From a207e337aa1ce070d91cb8cfee7b37ddfd547d6e Mon Sep 17 00:00:00 2001 From: Infinite Date: Sat, 29 Feb 2020 16:18:59 +0100 Subject: [PATCH 01/67] Use parameter binding for all queries --- pkg/models/querybuilder_gallery.go | 4 +++- pkg/models/querybuilder_scene.go | 4 +++- pkg/models/querybuilder_scene_marker.go | 4 +++- pkg/models/querybuilder_sql.go | 23 ----------------------- pkg/models/querybuilder_studio.go | 4 +++- pkg/models/querybuilder_tag.go | 4 +++- 6 files changed, 15 insertions(+), 28 deletions(-) diff --git a/pkg/models/querybuilder_gallery.go b/pkg/models/querybuilder_gallery.go index f77fe0de23a..02913a44afe 100644 --- a/pkg/models/querybuilder_gallery.go +++ b/pkg/models/querybuilder_gallery.go @@ -119,7 +119,9 @@ func (qb *GalleryQueryBuilder) Query(findFilter *FindFilterType) ([]*Gallery, in if q := findFilter.Q; q != nil && *q != "" { searchColumns := []string{"galleries.path", "galleries.checksum"} - whereClauses = append(whereClauses, getSearch(searchColumns, *q)) + clause, thisArgs := getSearchBinding(searchColumns, *q, false) + whereClauses = append(whereClauses, clause) + args = append(args, thisArgs...) } sortAndPagination := qb.getGallerySort(findFilter) + getPagination(findFilter) diff --git a/pkg/models/querybuilder_scene.go b/pkg/models/querybuilder_scene.go index 502af4bb507..4bd806a18e9 100644 --- a/pkg/models/querybuilder_scene.go +++ b/pkg/models/querybuilder_scene.go @@ -221,7 +221,9 @@ func (qb *SceneQueryBuilder) Query(sceneFilter *SceneFilterType, findFilter *Fin if q := findFilter.Q; q != nil && *q != "" { searchColumns := []string{"scenes.title", "scenes.details", "scenes.path", "scenes.checksum", "scene_markers.title"} - whereClauses = append(whereClauses, getSearch(searchColumns, *q)) + clause, thisArgs := getSearchBinding(searchColumns, *q, false) + whereClauses = append(whereClauses, clause) + args = append(args, thisArgs...) } if rating := sceneFilter.Rating; rating != nil { diff --git a/pkg/models/querybuilder_scene_marker.go b/pkg/models/querybuilder_scene_marker.go index 5e0b683dbea..b1c8790a5be 100644 --- a/pkg/models/querybuilder_scene_marker.go +++ b/pkg/models/querybuilder_scene_marker.go @@ -227,7 +227,9 @@ func (qb *SceneMarkerQueryBuilder) Query(sceneMarkerFilter *SceneMarkerFilterTyp if q := findFilter.Q; q != nil && *q != "" { searchColumns := []string{"scene_markers.title", "scene.title"} - whereClauses = append(whereClauses, getSearch(searchColumns, *q)) + clause, thisArgs := getSearchBinding(searchColumns, *q, false) + whereClauses = append(whereClauses, clause) + args = append(args, thisArgs...) } if tagID := sceneMarkerFilter.TagID; tagID != nil { diff --git a/pkg/models/querybuilder_sql.go b/pkg/models/querybuilder_sql.go index e20645b7c48..6209c9dcf37 100644 --- a/pkg/models/querybuilder_sql.go +++ b/pkg/models/querybuilder_sql.go @@ -137,29 +137,6 @@ func getRandomSort(tableName string, direction string, seed float64) string { return " ORDER BY " + "(substr(" + colName + " * " + randomSortString + ", length(" + colName + ") + 2))" + " " + direction } -func getSearch(columns []string, q string) string { - // TODO - susceptible to SQL injection - var likeClauses []string - queryWords := strings.Split(q, " ") - trimmedQuery := strings.Trim(q, "\"") - if trimmedQuery == q { - // Search for any word - for _, word := range queryWords { - for _, column := range columns { - likeClauses = append(likeClauses, column+" LIKE '%"+word+"%'") - } - } - } else { - // Search the exact query - for _, column := range columns { - likeClauses = append(likeClauses, column+" LIKE '%"+trimmedQuery+"%'") - } - } - likes := strings.Join(likeClauses, " OR ") - - return "(" + likes + ")" -} - func getSearchBinding(columns []string, q string, not bool) (string, []interface{}) { var likeClauses []string var args []interface{} diff --git a/pkg/models/querybuilder_studio.go b/pkg/models/querybuilder_studio.go index 1bf501a433a..da33979e68f 100644 --- a/pkg/models/querybuilder_studio.go +++ b/pkg/models/querybuilder_studio.go @@ -108,7 +108,9 @@ func (qb *StudioQueryBuilder) Query(findFilter *FindFilterType) ([]*Studio, int) if q := findFilter.Q; q != nil && *q != "" { searchColumns := []string{"studios.name"} - whereClauses = append(whereClauses, getSearch(searchColumns, *q)) + clause, thisArgs := getSearchBinding(searchColumns, *q, false) + whereClauses = append(whereClauses, clause) + args = append(args, thisArgs...) } sortAndPagination := qb.getStudioSort(findFilter) + getPagination(findFilter) diff --git a/pkg/models/querybuilder_tag.go b/pkg/models/querybuilder_tag.go index 91c376d3398..14ee1c6b551 100644 --- a/pkg/models/querybuilder_tag.go +++ b/pkg/models/querybuilder_tag.go @@ -147,7 +147,9 @@ func (qb *TagQueryBuilder) Query(findFilter *FindFilterType) ([]*Tag, int) { if q := findFilter.Q; q != nil && *q != "" { searchColumns := []string{"tags.name"} - whereClauses = append(whereClauses, getSearch(searchColumns, *q)) + clause, thisArgs := getSearchBinding(searchColumns, *q, false) + whereClauses = append(whereClauses, clause) + args = append(args, thisArgs...) } sortAndPagination := qb.getTagSort(findFilter) + getPagination(findFilter) From 4faa29327aa28a40255208c750b9d9c2db3ea009 Mon Sep 17 00:00:00 2001 From: Infinite Date: Fri, 3 Jan 2020 22:29:21 +0100 Subject: [PATCH 02/67] WIP --- ui/v2.5/.env | 2 + ui/v2.5/.eslintcache | 1 + ui/v2.5/.eslintrc.json | 8 + ui/v2.5/.gitignore | 23 + ui/v2.5/.vscode/launch.json | 18 + ui/v2.5/.vscode/settings.json | 10 + ui/v2.5/README.md | 47 + ui/v2.5/codegen.yml | 18 + ui/v2.5/package.json | 73 + ui/v2.5/public/favicon.ico | Bin 0 -> 3134 bytes ui/v2.5/public/index.html | 41 + ui/v2.5/public/jwplayer/jwplayer.controls.js | 95 + .../jwplayer/jwplayer.core.controls.html5.js | 95 + .../public/jwplayer/jwplayer.core.controls.js | 95 + .../jwplayer.core.controls.polyfills.html5.js | 95 + .../jwplayer.core.controls.polyfills.js | 95 + ui/v2.5/public/jwplayer/jwplayer.core.js | 95 + ui/v2.5/public/jwplayer/jwplayer.js | 95 + ui/v2.5/public/jwplayer/notice.txt | 92 + .../polyfills.intersection-observer.js | 95 + ui/v2.5/public/jwplayer/polyfills.webvtt.js | 95 + ui/v2.5/public/jwplayer/provider.html5.js | 95 + ui/v2.5/public/jwplayer/vttparser.js | 95 + ui/v2.5/public/manifest.json | 15 + ui/v2.5/src/.index.scss.swp | Bin 0 -> 20480 bytes ui/v2.5/src/App.tsx | 42 + ui/v2.5/src/components/ErrorBoundary.tsx | 34 + .../src/components/Galleries/Galleries.tsx | 13 + ui/v2.5/src/components/Galleries/Gallery.tsx | 30 + .../src/components/Galleries/GalleryList.tsx | 54 + .../components/Galleries/GalleryViewer.tsx | 47 + ui/v2.5/src/components/MainNavbar.tsx | 94 + ui/v2.5/src/components/PageNotFound.tsx | 7 + ui/v2.5/src/components/Settings/Settings.tsx | 50 + .../Settings/SettingsAboutPanel.tsx | 57 + .../Settings/SettingsConfigurationPanel.tsx | 292 + .../Settings/SettingsInterfacePanel.tsx | 145 + .../components/Settings/SettingsLogsPanel.tsx | 188 + .../SettingsTasksPanel/GenerateButton.tsx | 53 + .../SettingsTasksPanel/SettingsTasksPanel.tsx | 272 + .../components/Shared/DetailsEditNavbar.tsx | 150 + .../src/components/Shared/DurationInput.tsx | 134 + .../Shared/FolderSelect/FolderSelect.tsx | 85 + ui/v2.5/src/components/Shared/TagLink.tsx | 35 + ui/v2.5/src/components/Stats.tsx | 63 + ui/v2.5/src/components/Studios/StudioCard.tsx | 28 + .../Studios/StudioDetails/Studio.tsx | 162 + ui/v2.5/src/components/Studios/StudioList.tsx | 36 + ui/v2.5/src/components/Studios/Studios.tsx | 13 + ui/v2.5/src/components/Tags/TagList.tsx | 143 + ui/v2.5/src/components/Tags/Tags.tsx | 11 + ui/v2.5/src/components/Wall/Wall.scss | 99 + ui/v2.5/src/components/Wall/WallItem.tsx | 132 + ui/v2.5/src/components/Wall/WallPanel.tsx | 89 + ui/v2.5/src/components/list/AddFilter.tsx | 218 + ui/v2.5/src/components/list/ListFilter.tsx | 290 + ui/v2.5/src/components/list/Pagination.tsx | 119 + .../components/performers/PerformerCard.tsx | 45 + .../performers/PerformerDetails/Performer.tsx | 387 + .../components/performers/PerformerList.tsx | 62 + .../performers/PerformerListTable.tsx | 100 + .../src/components/performers/performers.tsx | 13 + ui/v2.5/src/components/scenes/SceneCard.tsx | 241 + .../components/scenes/SceneDetails/Scene.tsx | 95 + .../scenes/SceneDetails/SceneDetailPanel.tsx | 48 + .../scenes/SceneDetails/SceneEditPanel.tsx | 393 + .../SceneDetails/SceneFileInfoPanel.tsx | 137 + .../scenes/SceneDetails/SceneMarkersPanel.tsx | 267 + .../SceneDetails/ScenePerformerPanel.tsx | 21 + .../components/scenes/SceneFilenameParser.tsx | 982 ++ ui/v2.5/src/components/scenes/SceneList.tsx | 104 + .../src/components/scenes/SceneListTable.tsx | 121 + .../src/components/scenes/SceneMarkerList.tsx | 59 + .../scenes/ScenePlayer/ScenePlayer.tsx | 196 + .../ScenePlayer/ScenePlayerScrubber.scss | 128 + .../ScenePlayer/ScenePlayerScrubber.tsx | 316 + .../scenes/SceneSelectedOptions.tsx | 301 + ui/v2.5/src/components/scenes/helpers.tsx | 34 + ui/v2.5/src/components/scenes/scenes.tsx | 15 + .../components/select/FilterMultiSelect.tsx | 190 + .../src/components/select/FilterSelect.tsx | 117 + .../components/select/MarkerTitleSuggest.tsx | 61 + .../select/ScrapePerformerSuggest.tsx | 74 + .../select/ValidGalleriesSelect.tsx | 75 + ui/v2.5/src/core/StashService.ts | 538 + ui/v2.5/src/core/generated-graphql.tsx | 3666 +++++ ui/v2.5/src/hooks/ListHook.tsx | 310 + ui/v2.5/src/hooks/LocalForage.ts | 66 + ui/v2.5/src/hooks/VideoHover.ts | 72 + ui/v2.5/src/index.scss | 519 + ui/v2.5/src/index.tsx | 21 + ui/v2.5/src/models/base-props.ts | 3 + ui/v2.5/src/models/index.ts | 2 + .../models/list-filter/criteria/criterion.ts | 197 + .../models/list-filter/criteria/favorite.ts | 20 + .../list-filter/criteria/has-markers.ts | 20 + .../models/list-filter/criteria/is-missing.ts | 20 + .../src/models/list-filter/criteria/none.ts | 20 + .../models/list-filter/criteria/performers.ts | 31 + .../src/models/list-filter/criteria/rating.ts | 27 + .../models/list-filter/criteria/resolution.ts | 20 + .../models/list-filter/criteria/studios.ts | 30 + .../src/models/list-filter/criteria/tags.ts | 40 + .../src/models/list-filter/criteria/utils.ts | 51 + ui/v2.5/src/models/list-filter/filter.ts | 340 + ui/v2.5/src/models/list-filter/types.ts | 23 + ui/v2.5/src/models/react-images.d.ts | 5 + ui/v2.5/src/models/react-jw-player.d.ts | 5 + ui/v2.5/src/models/types.ts | 1 + ui/v2.5/src/react-app-env.d.ts | 1 + ui/v2.5/src/serviceWorker.ts | 143 + ui/v2.5/src/styles/._variables.scss.swp | Bin 0 -> 12288 bytes ui/v2.5/src/styles/_blueprint-overrides.scss | 30 + ui/v2.5/src/styles/_scrollbars.scss | 67 + ui/v2.5/src/styles/_variables.scss | 8 + ui/v2.5/src/styles/form/_grid.scss | 27 + ui/v2.5/src/styles/shared/_details.scss | 56 + ui/v2.5/src/utils/color.ts | 12 + ui/v2.5/src/utils/editabletext.tsx | 71 + ui/v2.5/src/utils/errors.ts | 24 + ui/v2.5/src/utils/image.tsx | 34 + ui/v2.5/src/utils/navigation.ts | 49 + ui/v2.5/src/utils/table.tsx | 138 + ui/v2.5/src/utils/text.ts | 83 + ui/v2.5/src/utils/toasts.ts | 14 + ui/v2.5/src/utils/zoom.ts | 6 + ui/v2.5/tsconfig.json | 28 + ui/v2.5/yarn.lock | 12711 ++++++++++++++++ 128 files changed, 28709 insertions(+) create mode 100644 ui/v2.5/.env create mode 100644 ui/v2.5/.eslintcache create mode 100644 ui/v2.5/.eslintrc.json create mode 100755 ui/v2.5/.gitignore create mode 100644 ui/v2.5/.vscode/launch.json create mode 100644 ui/v2.5/.vscode/settings.json create mode 100755 ui/v2.5/README.md create mode 100644 ui/v2.5/codegen.yml create mode 100644 ui/v2.5/package.json create mode 100644 ui/v2.5/public/favicon.ico create mode 100755 ui/v2.5/public/index.html create mode 100644 ui/v2.5/public/jwplayer/jwplayer.controls.js create mode 100644 ui/v2.5/public/jwplayer/jwplayer.core.controls.html5.js create mode 100644 ui/v2.5/public/jwplayer/jwplayer.core.controls.js create mode 100644 ui/v2.5/public/jwplayer/jwplayer.core.controls.polyfills.html5.js create mode 100644 ui/v2.5/public/jwplayer/jwplayer.core.controls.polyfills.js create mode 100644 ui/v2.5/public/jwplayer/jwplayer.core.js create mode 100644 ui/v2.5/public/jwplayer/jwplayer.js create mode 100644 ui/v2.5/public/jwplayer/notice.txt create mode 100644 ui/v2.5/public/jwplayer/polyfills.intersection-observer.js create mode 100644 ui/v2.5/public/jwplayer/polyfills.webvtt.js create mode 100644 ui/v2.5/public/jwplayer/provider.html5.js create mode 100644 ui/v2.5/public/jwplayer/vttparser.js create mode 100755 ui/v2.5/public/manifest.json create mode 100644 ui/v2.5/src/.index.scss.swp create mode 100755 ui/v2.5/src/App.tsx create mode 100644 ui/v2.5/src/components/ErrorBoundary.tsx create mode 100644 ui/v2.5/src/components/Galleries/Galleries.tsx create mode 100644 ui/v2.5/src/components/Galleries/Gallery.tsx create mode 100644 ui/v2.5/src/components/Galleries/GalleryList.tsx create mode 100644 ui/v2.5/src/components/Galleries/GalleryViewer.tsx create mode 100644 ui/v2.5/src/components/MainNavbar.tsx create mode 100644 ui/v2.5/src/components/PageNotFound.tsx create mode 100644 ui/v2.5/src/components/Settings/Settings.tsx create mode 100644 ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx create mode 100644 ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx create mode 100644 ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx create mode 100644 ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx create mode 100644 ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx create mode 100644 ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx create mode 100644 ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx create mode 100644 ui/v2.5/src/components/Shared/DurationInput.tsx create mode 100644 ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx create mode 100644 ui/v2.5/src/components/Shared/TagLink.tsx create mode 100644 ui/v2.5/src/components/Stats.tsx create mode 100644 ui/v2.5/src/components/Studios/StudioCard.tsx create mode 100644 ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx create mode 100644 ui/v2.5/src/components/Studios/StudioList.tsx create mode 100644 ui/v2.5/src/components/Studios/Studios.tsx create mode 100644 ui/v2.5/src/components/Tags/TagList.tsx create mode 100644 ui/v2.5/src/components/Tags/Tags.tsx create mode 100644 ui/v2.5/src/components/Wall/Wall.scss create mode 100644 ui/v2.5/src/components/Wall/WallItem.tsx create mode 100644 ui/v2.5/src/components/Wall/WallPanel.tsx create mode 100644 ui/v2.5/src/components/list/AddFilter.tsx create mode 100644 ui/v2.5/src/components/list/ListFilter.tsx create mode 100644 ui/v2.5/src/components/list/Pagination.tsx create mode 100644 ui/v2.5/src/components/performers/PerformerCard.tsx create mode 100644 ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx create mode 100644 ui/v2.5/src/components/performers/PerformerList.tsx create mode 100644 ui/v2.5/src/components/performers/PerformerListTable.tsx create mode 100644 ui/v2.5/src/components/performers/performers.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneCard.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneFilenameParser.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneList.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneListTable.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneMarkerList.tsx create mode 100644 ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx create mode 100644 ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.scss create mode 100644 ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx create mode 100644 ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx create mode 100644 ui/v2.5/src/components/scenes/helpers.tsx create mode 100644 ui/v2.5/src/components/scenes/scenes.tsx create mode 100644 ui/v2.5/src/components/select/FilterMultiSelect.tsx create mode 100644 ui/v2.5/src/components/select/FilterSelect.tsx create mode 100644 ui/v2.5/src/components/select/MarkerTitleSuggest.tsx create mode 100644 ui/v2.5/src/components/select/ScrapePerformerSuggest.tsx create mode 100644 ui/v2.5/src/components/select/ValidGalleriesSelect.tsx create mode 100644 ui/v2.5/src/core/StashService.ts create mode 100644 ui/v2.5/src/core/generated-graphql.tsx create mode 100644 ui/v2.5/src/hooks/ListHook.tsx create mode 100644 ui/v2.5/src/hooks/LocalForage.ts create mode 100644 ui/v2.5/src/hooks/VideoHover.ts create mode 100755 ui/v2.5/src/index.scss create mode 100755 ui/v2.5/src/index.tsx create mode 100644 ui/v2.5/src/models/base-props.ts create mode 100644 ui/v2.5/src/models/index.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/criterion.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/favorite.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/has-markers.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/is-missing.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/none.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/performers.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/rating.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/resolution.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/studios.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/tags.ts create mode 100644 ui/v2.5/src/models/list-filter/criteria/utils.ts create mode 100644 ui/v2.5/src/models/list-filter/filter.ts create mode 100644 ui/v2.5/src/models/list-filter/types.ts create mode 100644 ui/v2.5/src/models/react-images.d.ts create mode 100644 ui/v2.5/src/models/react-jw-player.d.ts create mode 100644 ui/v2.5/src/models/types.ts create mode 100644 ui/v2.5/src/react-app-env.d.ts create mode 100755 ui/v2.5/src/serviceWorker.ts create mode 100644 ui/v2.5/src/styles/._variables.scss.swp create mode 100644 ui/v2.5/src/styles/_blueprint-overrides.scss create mode 100644 ui/v2.5/src/styles/_scrollbars.scss create mode 100644 ui/v2.5/src/styles/_variables.scss create mode 100644 ui/v2.5/src/styles/form/_grid.scss create mode 100644 ui/v2.5/src/styles/shared/_details.scss create mode 100644 ui/v2.5/src/utils/color.ts create mode 100644 ui/v2.5/src/utils/editabletext.tsx create mode 100644 ui/v2.5/src/utils/errors.ts create mode 100644 ui/v2.5/src/utils/image.tsx create mode 100644 ui/v2.5/src/utils/navigation.ts create mode 100644 ui/v2.5/src/utils/table.tsx create mode 100644 ui/v2.5/src/utils/text.ts create mode 100644 ui/v2.5/src/utils/toasts.ts create mode 100644 ui/v2.5/src/utils/zoom.ts create mode 100644 ui/v2.5/tsconfig.json create mode 100644 ui/v2.5/yarn.lock diff --git a/ui/v2.5/.env b/ui/v2.5/.env new file mode 100644 index 00000000000..4b2b446bd2f --- /dev/null +++ b/ui/v2.5/.env @@ -0,0 +1,2 @@ +BROWSER=none +PORT=3001 diff --git a/ui/v2.5/.eslintcache b/ui/v2.5/.eslintcache new file mode 100644 index 00000000000..aae10c69a72 --- /dev/null +++ b/ui/v2.5/.eslintcache @@ -0,0 +1 @@ +[{"/home/peroo/stash/ui/v2/src/App.tsx":"1","/home/peroo/stash/ui/v2/src/components/ErrorBoundary.tsx":"2","/home/peroo/stash/ui/v2/src/components/Galleries/Galleries.tsx":"3","/home/peroo/stash/ui/v2/src/components/Galleries/Gallery.tsx":"4","/home/peroo/stash/ui/v2/src/components/Galleries/GalleryList.tsx":"5","/home/peroo/stash/ui/v2/src/components/Galleries/GalleryViewer.tsx":"6","/home/peroo/stash/ui/v2/src/components/MainNavbar.tsx":"7","/home/peroo/stash/ui/v2/src/components/PageNotFound.tsx":"8","/home/peroo/stash/ui/v2/src/components/Settings/Settings.tsx":"9","/home/peroo/stash/ui/v2/src/components/Settings/SettingsAboutPanel.tsx":"10","/home/peroo/stash/ui/v2/src/components/Settings/SettingsConfigurationPanel.tsx":"11","/home/peroo/stash/ui/v2/src/components/Settings/SettingsInterfacePanel.tsx":"12","/home/peroo/stash/ui/v2/src/components/Settings/SettingsLogsPanel.tsx":"13","/home/peroo/stash/ui/v2/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx":"14","/home/peroo/stash/ui/v2/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx":"15","/home/peroo/stash/ui/v2/src/components/Shared/DetailsEditNavbar.tsx":"16","/home/peroo/stash/ui/v2/src/components/Shared/DurationInput.tsx":"17","/home/peroo/stash/ui/v2/src/components/Shared/FolderSelect/FolderSelect.tsx":"18","/home/peroo/stash/ui/v2/src/components/Shared/TagLink.tsx":"19","/home/peroo/stash/ui/v2/src/components/Stats.tsx":"20","/home/peroo/stash/ui/v2/src/components/Studios/StudioCard.tsx":"21","/home/peroo/stash/ui/v2/src/components/Studios/StudioDetails/Studio.tsx":"22","/home/peroo/stash/ui/v2/src/components/Studios/StudioList.tsx":"23","/home/peroo/stash/ui/v2/src/components/Studios/Studios.tsx":"24","/home/peroo/stash/ui/v2/src/components/Tags/TagList.tsx":"25","/home/peroo/stash/ui/v2/src/components/Tags/Tags.tsx":"26","/home/peroo/stash/ui/v2/src/components/Wall/WallItem.tsx":"27","/home/peroo/stash/ui/v2/src/components/Wall/WallPanel.tsx":"28","/home/peroo/stash/ui/v2/src/components/list/AddFilter.tsx":"29","/home/peroo/stash/ui/v2/src/components/list/ListFilter.tsx":"30","/home/peroo/stash/ui/v2/src/components/list/Pagination.tsx":"31","/home/peroo/stash/ui/v2/src/components/performers/PerformerCard.tsx":"32","/home/peroo/stash/ui/v2/src/components/performers/PerformerDetails/Performer.tsx":"33","/home/peroo/stash/ui/v2/src/components/performers/PerformerList.tsx":"34","/home/peroo/stash/ui/v2/src/components/performers/PerformerListTable.tsx":"35","/home/peroo/stash/ui/v2/src/components/performers/performers.tsx":"36","/home/peroo/stash/ui/v2/src/components/scenes/SceneCard.tsx":"37","/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/Scene.tsx":"38","/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneDetailPanel.tsx":"39","/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneEditPanel.tsx":"40","/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx":"41","/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx":"42","/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx":"43","/home/peroo/stash/ui/v2/src/components/scenes/SceneFilenameParser.tsx":"44","/home/peroo/stash/ui/v2/src/components/scenes/SceneList.tsx":"45","/home/peroo/stash/ui/v2/src/components/scenes/SceneListTable.tsx":"46","/home/peroo/stash/ui/v2/src/components/scenes/SceneMarkerList.tsx":"47","/home/peroo/stash/ui/v2/src/components/scenes/ScenePlayer/ScenePlayer.tsx":"48","/home/peroo/stash/ui/v2/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx":"49","/home/peroo/stash/ui/v2/src/components/scenes/SceneSelectedOptions.tsx":"50","/home/peroo/stash/ui/v2/src/components/scenes/helpers.tsx":"51","/home/peroo/stash/ui/v2/src/components/scenes/scenes.tsx":"52","/home/peroo/stash/ui/v2/src/components/select/FilterMultiSelect.tsx":"53","/home/peroo/stash/ui/v2/src/components/select/FilterSelect.tsx":"54","/home/peroo/stash/ui/v2/src/components/select/MarkerTitleSuggest.tsx":"55","/home/peroo/stash/ui/v2/src/components/select/ScrapePerformerSuggest.tsx":"56","/home/peroo/stash/ui/v2/src/components/select/ValidGalleriesSelect.tsx":"57","/home/peroo/stash/ui/v2/src/core/StashService.ts":"58","/home/peroo/stash/ui/v2/src/core/generated-graphql.tsx":"59","/home/peroo/stash/ui/v2/src/hooks/ListHook.tsx":"60","/home/peroo/stash/ui/v2/src/hooks/LocalForage.ts":"61","/home/peroo/stash/ui/v2/src/hooks/VideoHover.ts":"62","/home/peroo/stash/ui/v2/src/index.tsx":"63","/home/peroo/stash/ui/v2/src/models/base-props.ts":"64","/home/peroo/stash/ui/v2/src/models/index.ts":"65","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/criterion.ts":"66","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/favorite.ts":"67","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/has-markers.ts":"68","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/is-missing.ts":"69","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/none.ts":"70","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/performers.ts":"71","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/rating.ts":"72","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/resolution.ts":"73","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/studios.ts":"74","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/tags.ts":"75","/home/peroo/stash/ui/v2/src/models/list-filter/criteria/utils.ts":"76","/home/peroo/stash/ui/v2/src/models/list-filter/filter.ts":"77","/home/peroo/stash/ui/v2/src/models/list-filter/types.ts":"78","/home/peroo/stash/ui/v2/src/models/react-images.d.ts":"79","/home/peroo/stash/ui/v2/src/models/react-jw-player.d.ts":"80","/home/peroo/stash/ui/v2/src/models/types.ts":"81","/home/peroo/stash/ui/v2/src/react-app-env.d.ts":"82","/home/peroo/stash/ui/v2/src/serviceWorker.ts":"83","/home/peroo/stash/ui/v2/src/utils/color.ts":"84","/home/peroo/stash/ui/v2/src/utils/errors.ts":"85","/home/peroo/stash/ui/v2/src/utils/navigation.ts":"86","/home/peroo/stash/ui/v2/src/utils/table.tsx":"87","/home/peroo/stash/ui/v2/src/utils/text.ts":"88","/home/peroo/stash/ui/v2/src/utils/toasts.ts":"89","/home/peroo/stash/ui/v2/src/utils/zoom.ts":"90"},{"size":1571,"mtime":1575810635928,"results":"91","hashOfConfig":"92"},{"size":769,"mtime":1575810635928,"results":"93","hashOfConfig":"92"},{"size":364,"mtime":1575810635928,"results":"94","hashOfConfig":"92"},{"size":1109,"mtime":1575819631714,"results":"95","hashOfConfig":"92"},{"size":1954,"mtime":1575810635928,"results":"96","hashOfConfig":"92"},{"size":1464,"mtime":1575810635928,"results":"97","hashOfConfig":"92"},{"size":3041,"mtime":1575810635928,"results":"98","hashOfConfig":"92"},{"size":154,"mtime":1575810635928,"results":"99","hashOfConfig":"92"},{"size":1885,"mtime":1575819631714,"results":"100","hashOfConfig":"92"},{"size":1317,"mtime":1575811824080,"results":"101","hashOfConfig":"92"},{"size":8087,"mtime":1575819631714,"results":"102","hashOfConfig":"92"},{"size":4442,"mtime":1575819631718,"results":"103","hashOfConfig":"92"},{"size":5104,"mtime":1575819631718,"results":"104","hashOfConfig":"92"},{"size":1767,"mtime":1575810635928,"results":"105","hashOfConfig":"92"},{"size":7508,"mtime":1575811824080,"results":"106","hashOfConfig":"92"},{"size":4090,"mtime":1575811824080,"results":"107","hashOfConfig":"92"},{"size":2809,"mtime":1575811824080,"results":"108","hashOfConfig":"92"},{"size":2973,"mtime":1575819631718,"results":"109","hashOfConfig":"92"},{"size":1258,"mtime":1575810635928,"results":"110","hashOfConfig":"92"},{"size":1858,"mtime":1575810635928,"results":"111","hashOfConfig":"92"},{"size":875,"mtime":1575810635928,"results":"112","hashOfConfig":"92"},{"size":5604,"mtime":1575819631718,"results":"113","hashOfConfig":"92"},{"size":1352,"mtime":1575810635928,"results":"114","hashOfConfig":"92"},{"size":364,"mtime":1575810635928,"results":"115","hashOfConfig":"92"},{"size":5680,"mtime":1575819631718,"results":"116","hashOfConfig":"92"},{"size":244,"mtime":1575810635928,"results":"117","hashOfConfig":"92"},{"size":4911,"mtime":1575811824080,"results":"118","hashOfConfig":"92"},{"size":2744,"mtime":1575810635928,"results":"119","hashOfConfig":"92"},{"size":6795,"mtime":1575811824080,"results":"120","hashOfConfig":"92"},{"size":7603,"mtime":1575811824080,"results":"121","hashOfConfig":"92"},{"size":3323,"mtime":1575810635928,"results":"122","hashOfConfig":"92"},{"size":1669,"mtime":1575810635928,"results":"123","hashOfConfig":"92"},{"size":14259,"mtime":1576598625042,"results":"124","hashOfConfig":"92"},{"size":1500,"mtime":1576598518665,"results":"125","hashOfConfig":"92"},{"size":2591,"mtime":1575810635928,"results":"126","hashOfConfig":"92"},{"size":397,"mtime":1575810635928,"results":"127","hashOfConfig":"92"},{"size":6923,"mtime":1576598490141,"results":"128","hashOfConfig":"92"},{"size":3548,"mtime":1575819631722,"results":"129","hashOfConfig":"92"},{"size":1498,"mtime":1576598390374,"results":"130","hashOfConfig":"92"},{"size":7524,"mtime":1576598365666,"results":"131","hashOfConfig":"92"},{"size":3150,"mtime":1575810635928,"results":"132","hashOfConfig":"92"},{"size":9201,"mtime":1576598346025,"results":"133","hashOfConfig":"92"},{"size":618,"mtime":1575810635928,"results":"134","hashOfConfig":"92"},{"size":32274,"mtime":1576598320443,"results":"135","hashOfConfig":"92"},{"size":2776,"mtime":1576598120984,"results":"136","hashOfConfig":"92"},{"size":3111,"mtime":1575810635928,"results":"137","hashOfConfig":"92"},{"size":1114,"mtime":1576598100401,"results":"138","hashOfConfig":"92"},{"size":7917,"mtime":1576598079008,"results":"139","hashOfConfig":"92"},{"size":10564,"mtime":1575819631746,"results":"140","hashOfConfig":"92"},{"size":8729,"mtime":1576597964447,"results":"141","hashOfConfig":"92"},{"size":1451,"mtime":1575810635928,"results":"142","hashOfConfig":"92"},{"size":484,"mtime":1575810635928,"results":"143","hashOfConfig":"92"},{"size":6521,"mtime":1576597838041,"results":"144","hashOfConfig":"92"},{"size":3823,"mtime":1576597810488,"results":"145","hashOfConfig":"92"},{"size":2275,"mtime":1575810635928,"results":"146","hashOfConfig":"92"},{"size":2608,"mtime":1576597793145,"results":"147","hashOfConfig":"92"},{"size":2695,"mtime":1576597777105,"results":"148","hashOfConfig":"92"},{"size":14701,"mtime":1575811824080,"results":"149","hashOfConfig":"92"},{"size":68793,"mtime":1575811113226,"results":"150","hashOfConfig":"92"},{"size":10880,"mtime":1576597208786,"results":"151","hashOfConfig":"92"},{"size":1659,"mtime":1575811824080,"results":"152","hashOfConfig":"92"},{"size":2144,"mtime":1575811824080,"results":"153","hashOfConfig":"92"},{"size":803,"mtime":1575810635928,"results":"154","hashOfConfig":"92"},{"size":124,"mtime":1575810635928,"results":"155","hashOfConfig":"92"},{"size":55,"mtime":1575810635928,"results":"156","hashOfConfig":"92"},{"size":6833,"mtime":1575810635928,"results":"157","hashOfConfig":"92"},{"size":659,"mtime":1575810635928,"results":"158","hashOfConfig":"92"},{"size":664,"mtime":1575810635928,"results":"159","hashOfConfig":"92"},{"size":682,"mtime":1575810635928,"results":"160","hashOfConfig":"92"},{"size":566,"mtime":1575810635928,"results":"161","hashOfConfig":"92"},{"size":966,"mtime":1575810635928,"results":"162","hashOfConfig":"92"},{"size":1013,"mtime":1575810635928,"results":"163","hashOfConfig":"92"},{"size":694,"mtime":1575810635928,"results":"164","hashOfConfig":"92"},{"size":881,"mtime":1575810635928,"results":"165","hashOfConfig":"92"},{"size":1287,"mtime":1575810635928,"results":"166","hashOfConfig":"92"},{"size":1965,"mtime":1575810635928,"results":"167","hashOfConfig":"92"},{"size":12393,"mtime":1575810635928,"results":"168","hashOfConfig":"92"},{"size":278,"mtime":1575810635928,"results":"169","hashOfConfig":"92"},{"size":187,"mtime":1575810635928,"results":"170","hashOfConfig":"92"},{"size":200,"mtime":1575810635928,"results":"171","hashOfConfig":"92"},{"size":74,"mtime":1575810635928,"results":"172","hashOfConfig":"92"},{"size":40,"mtime":1575810635928,"results":"173","hashOfConfig":"92"},{"size":5216,"mtime":1575810635928,"results":"174","hashOfConfig":"92"},{"size":308,"mtime":1575810635928,"results":"175","hashOfConfig":"92"},{"size":529,"mtime":1575810635928,"results":"176","hashOfConfig":"92"},{"size":2396,"mtime":1575810635928,"results":"177","hashOfConfig":"92"},{"size":4050,"mtime":1575810635928,"results":"178","hashOfConfig":"92"},{"size":2240,"mtime":1576597744487,"results":"179","hashOfConfig":"92"},{"size":275,"mtime":1575810635928,"results":"180","hashOfConfig":"92"},{"size":123,"mtime":1575811824080,"results":"181","hashOfConfig":"92"},{"filePath":"182","messages":"183","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"184"},"mugomj",{"filePath":"185","messages":"186","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"187","messages":"188","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"189","messages":"190","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":1,"source":"191"},{"filePath":"192","messages":"193","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"194"},{"filePath":"195","messages":"196","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"197"},{"filePath":"198","messages":"199","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"200","messages":"201","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"202","messages":"203","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"204"},{"filePath":"205","messages":"206","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"207"},{"filePath":"208","messages":"209","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":1,"source":"210"},{"filePath":"211","messages":"212","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":1,"source":"213"},{"filePath":"214","messages":"215","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":3,"source":"216"},{"filePath":"217","messages":"218","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"219","messages":"220","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"221"},{"filePath":"222","messages":"223","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"224"},{"filePath":"225","messages":"226","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"227"},{"filePath":"228","messages":"229","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":1,"source":"230"},{"filePath":"231","messages":"232","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"233"},{"filePath":"234","messages":"235","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"236"},{"filePath":"237","messages":"238","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"239","messages":"240","errorCount":0,"warningCount":10,"fixableErrorCount":0,"fixableWarningCount":2,"source":"241"},{"filePath":"242","messages":"243","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"244"},{"filePath":"245","messages":"246","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"247","messages":"248","errorCount":0,"warningCount":12,"fixableErrorCount":0,"fixableWarningCount":1,"source":"249"},{"filePath":"250","messages":"251","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"252","messages":"253","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"254"},{"filePath":"255","messages":"256","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"257"},{"filePath":"258","messages":"259","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"260","messages":"261","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"262"},{"filePath":"263","messages":"264","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"265","messages":"266","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"267","messages":"268","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":null},{"filePath":"269","messages":"270","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"271","messages":"272","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"273","messages":"274","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"275","messages":"276","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"277","messages":"278","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":"279"},{"filePath":"280","messages":"281","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"282","messages":"283","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"284","messages":"285","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"286","messages":"287","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"288","messages":"289","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"290","messages":"291","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":"292"},{"filePath":"293","messages":"294","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"295","messages":"296","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"297","messages":"298","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"299","messages":"300","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"301","messages":"302","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":2,"source":"303"},{"filePath":"304","messages":"305","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"306","messages":"307","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"308","messages":"309","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"310","messages":"311","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"312"},{"filePath":"313","messages":"314","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"315","messages":"316","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"317","messages":"318","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"319","messages":"320","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"321","messages":"322","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"323","messages":"324","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"325","messages":"326","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":4,"source":"327"},{"filePath":"328","messages":"329","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"330","messages":"331","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"332","messages":"333","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"334","messages":"335","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"336","messages":"337","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"338","messages":"339","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"340","messages":"341","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"342","messages":"343","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"344","messages":"345","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"346","messages":"347","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"348","messages":"349","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"350","messages":"351","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"352","messages":"353","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"354","messages":"355","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"356","messages":"357","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"358","messages":"359","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"360","messages":"361","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"362","messages":"363","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"364","messages":"365","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"366","messages":"367","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"368","messages":"369","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"370","messages":"371","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"372","messages":"373","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"374","messages":"375","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"376","messages":"377","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"378","messages":"379","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"380","messages":"381","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"382","messages":"383","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"384","messages":"385","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"386","messages":"387","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/peroo/stash/ui/v2/src/App.tsx",["388"],"import React, { FunctionComponent, useEffect } from \"react\";\nimport { Route, Switch } from \"react-router-dom\";\nimport { ErrorBoundary } from \"./components/ErrorBoundary\";\nimport Galleries from \"./components/Galleries/Galleries\";\nimport { MainNavbar } from \"./components/MainNavbar\";\nimport { PageNotFound } from \"./components/PageNotFound\";\nimport Performers from \"./components/performers/performers\";\nimport Scenes from \"./components/scenes/scenes\";\nimport { Settings } from \"./components/Settings/Settings\";\nimport { Stats } from \"./components/Stats\";\nimport Studios from \"./components/Studios/Studios\";\nimport Tags from \"./components/Tags/Tags\";\nimport { SceneFilenameParser } from \"./components/scenes/SceneFilenameParser\";\n\ninterface IProps {}\n\nexport const App: FunctionComponent = (props: IProps) => {\n return (\n
\n \n \n \n \n \n {/* */}\n \n \n \n \n \n \n \n \n \n
\n );\n};\n","/home/peroo/stash/ui/v2/src/components/ErrorBoundary.tsx",[],"/home/peroo/stash/ui/v2/src/components/Galleries/Galleries.tsx",[],"/home/peroo/stash/ui/v2/src/components/Galleries/Gallery.tsx",["389","390"],"import {\n Spinner,\n} from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { IBaseProps } from \"../../models\";\nimport { GalleryViewer } from \"./GalleryViewer\";\n\ninterface IProps extends IBaseProps {}\n\nexport const Gallery: FunctionComponent = (props: IProps) => {\n const [gallery, setGallery] = useState>({});\n const [isLoading, setIsLoading] = useState(false);\n\n const { data, error, loading } = StashService.useFindGallery(props.match.params.id);\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findGallery || !!error) { return; }\n setGallery(data.findGallery);\n }, [data]);\n\n if (!data || !data.findGallery || isLoading) { return ; }\n if (!!error) { return <>{error.message}; }\n return (\n
\n \n
\n );\n};\n","/home/peroo/stash/ui/v2/src/components/Galleries/GalleryList.tsx",["391","392"],"import { HTMLTable } from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { Link } from \"react-router-dom\";\nimport { FindGalleriesQuery, FindGalleriesVariables } from \"../../core/generated-graphql\";\nimport { ListHook } from \"../../hooks/ListHook\";\nimport { IBaseProps } from \"../../models/base-props\";\nimport { ListFilterModel } from \"../../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../../models/list-filter/types\";\n\ninterface IProps extends IBaseProps {}\n\nexport const GalleryList: FunctionComponent = (props: IProps) => {\n const listData = ListHook.useList({\n filterMode: FilterMode.Galleries,\n props,\n renderContent,\n });\n\n function renderContent(result: QueryHookResult, filter: ListFilterModel) {\n if (!result.data || !result.data.findGalleries) { return; }\n if (filter.displayMode === DisplayMode.Grid) {\n return

TODO

;\n } else if (filter.displayMode === DisplayMode.List) {\n return (\n \n \n \n Preview\n Path\n \n \n \n {result.data.findGalleries.galleries.map((gallery) => (\n \n \n \n {gallery.files.length > 0 ? : undefined}\n \n \n {gallery.path}\n \n ))}\n \n \n );\n } else if (filter.displayMode === DisplayMode.Wall) {\n return

TODO

;\n }\n }\n\n return listData.template;\n};\n","/home/peroo/stash/ui/v2/src/components/Galleries/GalleryViewer.tsx",["393"],"import _ from \"lodash\";\nimport React, { FunctionComponent, useState } from \"react\";\nimport Lightbox from \"react-images\";\nimport Gallery from \"react-photo-gallery\";\nimport * as GQL from \"../../core/generated-graphql\";\n\ninterface IProps {\n gallery: GQL.GalleryDataFragment;\n}\n\nexport const GalleryViewer: FunctionComponent = (props: IProps) => {\n const [currentImage, setCurrentImage] = useState(0);\n const [lightboxIsOpen, setLightboxIsOpen] = useState(false);\n\n function openLightbox(event: any, obj: any) {\n setCurrentImage(obj.index);\n setLightboxIsOpen(true);\n }\n function closeLightbox() {\n setCurrentImage(0);\n setLightboxIsOpen(false);\n }\n function gotoPrevious() {\n setCurrentImage(currentImage - 1);\n }\n function gotoNext() {\n setCurrentImage(currentImage + 1);\n }\n\n const photos = props.gallery.files.map((file) => ({src: file.path || \"\", caption: file.name}));\n const thumbs = props.gallery.files.map((file) => ({src: `${file.path}?thumb=true` || \"\", width: 1, height: 1}));\n return (\n
\n \n window.open(photos[currentImage].src, \"_blank\")}\n width={9999}\n />\n
\n );\n};\n","/home/peroo/stash/ui/v2/src/components/MainNavbar.tsx",[],"/home/peroo/stash/ui/v2/src/components/PageNotFound.tsx",[],"/home/peroo/stash/ui/v2/src/components/Settings/Settings.tsx",["394"],"import {\n Card,\n Tab,\n Tabs,\n} from \"@blueprintjs/core\";\nimport queryString from \"query-string\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { IBaseProps } from \"../../models\";\nimport { SettingsAboutPanel } from \"./SettingsAboutPanel\";\nimport { SettingsConfigurationPanel } from \"./SettingsConfigurationPanel\";\nimport { SettingsInterfacePanel } from \"./SettingsInterfacePanel\";\nimport { SettingsLogsPanel } from \"./SettingsLogsPanel\";\nimport { SettingsTasksPanel } from \"./SettingsTasksPanel/SettingsTasksPanel\";\n\ninterface IProps extends IBaseProps {}\n\ntype TabId = \"configuration\" | \"tasks\" | \"logs\" | \"about\";\n\nexport const Settings: FunctionComponent = (props: IProps) => {\n const [tabId, setTabId] = useState(getTabId());\n\n useEffect(() => {\n const location = Object.assign({}, props.history.location);\n location.search = queryString.stringify({tab: tabId}, {encode: false});\n props.history.replace(location);\n }, [tabId]);\n\n function getTabId(): TabId {\n const queryParams = queryString.parse(props.location.search);\n if (!queryParams.tab || typeof queryParams.tab !== \"string\") { return \"tasks\"; }\n return queryParams.tab as TabId;\n }\n\n return (\n \n setTabId(newId as TabId)}\n defaultSelectedTabId={getTabId()}\n >\n } />\n } />\n } />\n } />\n } />\n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Settings/SettingsAboutPanel.tsx",["395","396","397","398","399"],"import {\n H1,\n H4,\n H6,\n HTMLTable,\n Spinner,\n Tag,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { TextUtils } from \"../../utils/text\";\nimport { StashService } from \"../../core/StashService\";\n\ninterface IProps {}\n\nexport const SettingsAboutPanel: FunctionComponent = (props: IProps) => {\n const { data, error, loading } = StashService.useVersion();\n\n function maybeRenderTag() {\n if (!data || !data.version || !data.version.version) { return; }\n return (\n \n Version:\n {data.version.version}\n \n );\n }\n\n function renderVersion() {\n if (!data || !data.version) { return; }\n return (\n <>\n \n \n {maybeRenderTag()}\n \n Build hash:\n {data.version.hash}\n \n \n Build time:\n {data.version.build_time}\n \n \n \n \n );\n }\n return (\n <>\n

About

\n {!data || loading ? : undefined}\n {!!error ? error.message : undefined}\n {renderVersion()}\n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Settings/SettingsConfigurationPanel.tsx",["400","401","402","403"],"import {\n Button,\n Divider,\n FormGroup,\n H1,\n H4,\n H6,\n InputGroup,\n Spinner,\n Tag,\n Checkbox,\n HTMLSelect,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { ToastUtils } from \"../../utils/toasts\";\nimport { FolderSelect } from \"../Shared/FolderSelect/FolderSelect\";\n\ninterface IProps {}\n\nexport const SettingsConfigurationPanel: FunctionComponent = (props: IProps) => {\n // Editing config state\n const [stashes, setStashes] = useState([]);\n const [databasePath, setDatabasePath] = useState(undefined);\n const [generatedPath, setGeneratedPath] = useState(undefined);\n const [maxTranscodeSize, setMaxTranscodeSize] = useState(undefined);\n const [maxStreamingTranscodeSize, setMaxStreamingTranscodeSize] = useState(undefined);\n const [username, setUsername] = useState(undefined);\n const [password, setPassword] = useState(undefined);\n const [logFile, setLogFile] = useState();\n const [logOut, setLogOut] = useState(true);\n const [logLevel, setLogLevel] = useState(\"Info\");\n const [logAccess, setLogAccess] = useState(true);\n\n const { data, error, loading } = StashService.useConfiguration();\n\n const updateGeneralConfig = StashService.useConfigureGeneral({\n stashes,\n databasePath,\n generatedPath,\n maxTranscodeSize,\n maxStreamingTranscodeSize,\n username,\n password,\n logFile,\n logOut,\n logLevel,\n logAccess,\n });\n\n useEffect(() => {\n if (!data || !data.configuration || !!error) { return; }\n const conf = StashService.nullToUndefined(data.configuration) as GQL.ConfigDataFragment;\n if (!!conf.general) {\n setStashes(conf.general.stashes || []);\n setDatabasePath(conf.general.databasePath);\n setGeneratedPath(conf.general.generatedPath);\n setMaxTranscodeSize(conf.general.maxTranscodeSize);\n setMaxStreamingTranscodeSize(conf.general.maxStreamingTranscodeSize);\n setUsername(conf.general.username);\n setPassword(conf.general.password);\n setLogFile(conf.general.logFile);\n setLogOut(conf.general.logOut);\n setLogLevel(conf.general.logLevel);\n setLogAccess(conf.general.logAccess);\n }\n }, [data]);\n\n function onStashesChanged(directories: string[]) {\n setStashes(directories);\n }\n\n async function onSave() {\n try {\n const result = await updateGeneralConfig();\n console.log(result);\n ToastUtils.success(\"Updated config\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n const transcodeQualities = [\n GQL.StreamingResolutionEnum.Low,\n GQL.StreamingResolutionEnum.Standard,\n GQL.StreamingResolutionEnum.StandardHd,\n GQL.StreamingResolutionEnum.FullHd,\n GQL.StreamingResolutionEnum.FourK,\n GQL.StreamingResolutionEnum.Original\n ].map(resolutionToString);\n\n function resolutionToString(r : GQL.StreamingResolutionEnum | undefined) {\n switch (r) {\n case GQL.StreamingResolutionEnum.Low: return \"240p\";\n case GQL.StreamingResolutionEnum.Standard: return \"480p\";\n case GQL.StreamingResolutionEnum.StandardHd: return \"720p\";\n case GQL.StreamingResolutionEnum.FullHd: return \"1080p\";\n case GQL.StreamingResolutionEnum.FourK: return \"4k\";\n case GQL.StreamingResolutionEnum.Original: return \"Original\";\n }\n\n return \"Original\";\n }\n\n function translateQuality(quality : string) {\n switch (quality) {\n case \"240p\": return GQL.StreamingResolutionEnum.Low;\n case \"480p\": return GQL.StreamingResolutionEnum.Standard;\n case \"720p\": return GQL.StreamingResolutionEnum.StandardHd;\n case \"1080p\": return GQL.StreamingResolutionEnum.FullHd;\n case \"4k\": return GQL.StreamingResolutionEnum.FourK;\n case \"Original\": return GQL.StreamingResolutionEnum.Original;\n }\n\n return GQL.StreamingResolutionEnum.Original;\n }\n\n return (\n <>\n {!!error ?

{error.message}

: undefined}\n {(!data || !data.configuration || loading) ? : undefined}\n

Library

\n \n \n \n \n \n \n \n \n setDatabasePath(e.target.value)} />\n \n\n \n setGeneratedPath(e.target.value)} />\n \n \n \n \n \n

Video

\n \n setMaxTranscodeSize(translateQuality(event.target.value))}\n value={resolutionToString(maxTranscodeSize)}\n />\n \n \n setMaxStreamingTranscodeSize(translateQuality(event.target.value))}\n value={resolutionToString(maxStreamingTranscodeSize)}\n />\n \n
\n \n\n \n

Authentication

\n \n setUsername(e.target.value)} />\n
\n \n setPassword(e.target.value)} />\n \n \n\n \n

Logging

\n \n setLogFile(e.target.value)} />\n \n\n \n setLogOut(!logOut)}\n />\n \n\n \n setLogLevel(event.target.value)}\n value={logLevel}\n />\n \n\n \n setLogAccess(!logAccess)}\n />\n \n\n \n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Settings/SettingsInterfacePanel.tsx",["404","405"],"import {\n Button,\n Checkbox,\n Divider,\n FormGroup,\n H4,\n Spinner,\n TextArea,\n NumericInput\n} from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { StashService } from \"../../core/StashService\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { ToastUtils } from \"../../utils/toasts\";\n\ninterface IProps {}\n\nexport const SettingsInterfacePanel: FunctionComponent = () => {\n const config = StashService.useConfiguration();\n const [soundOnPreview, setSoundOnPreview] = useState();\n const [wallShowTitle, setWallShowTitle] = useState();\n const [maximumLoopDuration, setMaximumLoopDuration] = useState(0);\n const [autostartVideo, setAutostartVideo] = useState();\n const [showStudioAsText, setShowStudioAsText] = useState();\n const [css, setCSS] = useState();\n const [cssEnabled, setCSSEnabled] = useState();\n\n const updateInterfaceConfig = StashService.useConfigureInterface({\n soundOnPreview,\n wallShowTitle,\n maximumLoopDuration,\n autostartVideo,\n showStudioAsText,\n css,\n cssEnabled\n });\n\n useEffect(() => {\n if (!config.data || !config.data.configuration || !!config.error) { return; }\n if (!!config.data.configuration.interface) {\n let iCfg = config.data.configuration.interface;\n setSoundOnPreview(iCfg.soundOnPreview !== undefined ? iCfg.soundOnPreview : true);\n setWallShowTitle(iCfg.wallShowTitle !== undefined ? iCfg.wallShowTitle : true);\n setMaximumLoopDuration(iCfg.maximumLoopDuration || 0);\n setAutostartVideo(iCfg.autostartVideo !== undefined ? iCfg.autostartVideo : false);\n setShowStudioAsText(iCfg.showStudioAsText !== undefined ? iCfg.showStudioAsText : false);\n setCSS(config.data.configuration.interface.css || \"\");\n setCSSEnabled(config.data.configuration.interface.cssEnabled || false);\n }\n }, [config.data]);\n\n async function onSave() {\n try {\n const result = await updateInterfaceConfig();\n console.log(result);\n ToastUtils.success(\"Updated config\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n return (\n <>\n {!!config.error ?

{config.error.message}

: undefined}\n {(!config.data || !config.data.configuration || config.loading) ? : undefined}\n

User Interface

\n \n setWallShowTitle(!wallShowTitle)}\n />\n setSoundOnPreview(!soundOnPreview)}\n />\n \n\n \n {\n setShowStudioAsText(!showStudioAsText)\n }}\n />\n \n \n \n {\n setAutostartVideo(!autostartVideo)\n }}\n />\n\n \n setMaximumLoopDuration(value)}\n min={0}\n minorStepSize={1}\n />\n \n \n\n \n {\n setCSSEnabled(!cssEnabled)\n }}\n />\n\n \n \n\n \n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Settings/SettingsLogsPanel.tsx",["406","407","408","409"],"import {\n H4, FormGroup, HTMLSelect,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useState, useEffect, useRef } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\n\ninterface IProps {}\n\nfunction convertTime(logEntry : GQL.LogEntryDataFragment) {\n function pad(val : number) {\n var ret = val.toString();\n if (val <= 9) {\n ret = \"0\" + ret;\n }\n\n return ret;\n }\n\n var date = new Date(logEntry.time);\n var month = date.getMonth() + 1;\n var day = date.getDate();\n var dateStr = date.getFullYear() + \"-\" + pad(month) + \"-\" + pad(day);\n dateStr += \" \" + pad(date.getHours()) + \":\" + pad(date.getMinutes()) + \":\" + pad(date.getSeconds());\n\n return dateStr;\n}\n\nclass LogEntry {\n public time: string;\n public level: string;\n public message: string;\n public id: string;\n\n private static nextId: number = 0;\n\n public constructor(logEntry: GQL.LogEntryDataFragment) {\n this.time = convertTime(logEntry);\n this.level = logEntry.level;\n this.message = logEntry.message;\n\n var id = LogEntry.nextId++;\n this.id = id.toString();\n }\n}\n\nexport const SettingsLogsPanel: FunctionComponent = (props: IProps) => {\n const { data, error } = StashService.useLoggingSubscribe();\n const { data: existingData } = StashService.useLogs();\n \n const logEntries = useRef([]);\n const [logLevel, setLogLevel] = useState(\"Info\");\n const [filteredLogEntries, setFilteredLogEntries] = useState([]);\n const lastUpdate = useRef(0);\n const updateTimeout = useRef();\n\n // maximum number of log entries to display. Subsequent entries will truncate \n // the list, dropping off the oldest entries first.\n const MAX_LOG_ENTRIES = 200;\n\n function truncateLogEntries(entries : LogEntry[]) {\n entries.length = Math.min(entries.length, MAX_LOG_ENTRIES);\n }\n\n function prependLogEntries(toPrepend : LogEntry[]) {\n var newLogEntries = toPrepend.concat(logEntries.current);\n truncateLogEntries(newLogEntries);\n logEntries.current = newLogEntries;\n }\n\n function appendLogEntries(toAppend : LogEntry[]) {\n var newLogEntries = logEntries.current.concat(toAppend);\n truncateLogEntries(newLogEntries);\n logEntries.current = newLogEntries;\n }\n\n useEffect(() => {\n if (!data) { return; }\n\n // append data to the logEntries\n var convertedData = data.loggingSubscribe.map(convertLogEntry);\n\n // filter subscribed data as it comes in, otherwise we'll end up\n // truncating stuff that wasn't filtered out\n convertedData = convertedData.filter(filterByLogLevel)\n \n // put newest entries at the top\n convertedData.reverse();\n prependLogEntries(convertedData);\n\n updateFilteredEntries();\n }, [data]);\n\n useEffect(() => {\n if (!existingData || !existingData.logs) { return; }\n\n var convertedData = existingData.logs.map(convertLogEntry);\n appendLogEntries(convertedData);\n\n updateFilteredEntries();\n }, [existingData]);\n\n function updateFilteredEntries() {\n if (!updateTimeout.current) {\n console.log(\"Updating after timeout\");\n }\n updateTimeout.current = undefined;\n\n var filteredEntries = logEntries.current.filter(filterByLogLevel);\n setFilteredLogEntries(filteredEntries);\n\n lastUpdate.current = new Date().getTime();\n }\n\n useEffect(() => {\n updateFilteredEntries();\n }, [logLevel]);\n\n function convertLogEntry(logEntry : GQL.LogEntryDataFragment) {\n return new LogEntry(logEntry);\n }\n\n function levelClass(level : string) {\n return level.toLowerCase().trim();\n }\n\n interface ILogElementProps {\n logEntry : LogEntry\n }\n\n function LogElement(props : ILogElementProps) {\n // pad to maximum length of level enum\n var level = props.logEntry.level.padEnd(GQL.LogLevel.Progress.length);\n\n return (\n <>\n {props.logEntry.time} \n {level} \n {props.logEntry.message}\n
\n \n );\n }\n\n function maybeRenderError() {\n if (error) {\n return (\n <>\n Error connecting to log server: {error.message}
\n \n );\n }\n }\n\n const logLevels = [\"Debug\", \"Info\", \"Warning\", \"Error\"];\n\n function filterByLogLevel(logEntry : LogEntry) {\n if (logLevel == \"Debug\") {\n return true;\n }\n\n var logLevelIndex = logLevels.indexOf(logLevel);\n var levelIndex = logLevels.indexOf(logEntry.level);\n\n return levelIndex >= logLevelIndex;\n }\n\n return (\n <>\n

Logs

\n
\n \n setLogLevel(event.target.value)}\n value={logLevel}\n />\n \n
\n
\n {maybeRenderError()}\n {filteredLogEntries.map((logEntry) =>\n \n )}\n
\n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx",[],"/home/peroo/stash/ui/v2/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx",["410"],"import {\n Alert,\n Button,\n Checkbox,\n Divider,\n FormGroup,\n H4,\n AnchorButton,\n ProgressBar,\n H5,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useState, useEffect } from \"react\";\nimport { StashService } from \"../../../core/StashService\";\nimport { ErrorUtils } from \"../../../utils/errors\";\nimport { ToastUtils } from \"../../../utils/toasts\";\nimport { GenerateButton } from \"./GenerateButton\";\nimport { Link } from \"react-router-dom\";\n\ninterface IProps {}\n\nexport const SettingsTasksPanel: FunctionComponent = (props: IProps) => {\n const [isImportAlertOpen, setIsImportAlertOpen] = useState(false);\n const [isCleanAlertOpen, setIsCleanAlertOpen] = useState(false);\n const [nameFromMetadata, setNameFromMetadata] = useState(true);\n const [status, setStatus] = useState(\"\");\n const [progress, setProgress] = useState(undefined);\n\n const [autoTagPerformers, setAutoTagPerformers] = useState(true);\n const [autoTagStudios, setAutoTagStudios] = useState(true);\n const [autoTagTags, setAutoTagTags] = useState(true);\n\n const jobStatus = StashService.useJobStatus();\n const metadataUpdate = StashService.useMetadataUpdate();\n\n function statusToText(status : string) {\n switch(status) {\n case \"Idle\":\n return \"Idle\";\n case \"Scan\":\n return \"Scanning for new content\";\n case \"Generate\":\n return \"Generating supporting files\";\n case \"Clean\":\n return \"Cleaning the database\";\n case \"Export\":\n return \"Exporting to JSON\";\n case \"Import\":\n return \"Importing from JSON\";\n case \"Auto Tag\":\n return \"Auto tagging scenes\";\n }\n\n return \"Idle\";\n }\n\n useEffect(() => {\n if (!!jobStatus.data && !!jobStatus.data.jobStatus) {\n setStatus(statusToText(jobStatus.data.jobStatus.status));\n var newProgress = jobStatus.data.jobStatus.progress;\n if (newProgress < 0) {\n setProgress(undefined);\n } else {\n setProgress(newProgress);\n }\n }\n }, [jobStatus.data]);\n\n useEffect(() => {\n if (!!metadataUpdate.data && !!metadataUpdate.data.metadataUpdate) {\n setStatus(statusToText(metadataUpdate.data.metadataUpdate.status));\n var newProgress = metadataUpdate.data.metadataUpdate.progress;\n if (newProgress < 0) {\n setProgress(undefined);\n } else {\n setProgress(newProgress);\n }\n }\n }, [metadataUpdate.data]);\n\n function onImport() {\n setIsImportAlertOpen(false);\n StashService.queryMetadataImport().then(() => { jobStatus.refetch()});\n }\n\n function renderImportAlert() {\n return (\n setIsImportAlertOpen(false)}\n onConfirm={() => onImport()}\n >\n

\n Are you sure you want to import? This will delete the database and re-import from\n your exported metadata.\n

\n \n );\n }\n\n function onClean() {\n setIsCleanAlertOpen(false);\n StashService.queryMetadataClean().then(() => { jobStatus.refetch()});\n }\n\n function renderCleanAlert() {\n return (\n setIsCleanAlertOpen(false)}\n onConfirm={() => onClean()}\n >\n

\n Are you sure you want to Clean?\n This will delete db information and generated content\n for all scenes that are no longer found in the filesystem.\n

\n \n );\n }\n\n async function onScan() {\n try {\n await StashService.queryMetadataScan({nameFromMetadata});\n ToastUtils.success(\"Started scan\");\n jobStatus.refetch();\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n function getAutoTagInput() {\n var wildcard = [\"*\"];\n return {\n performers: autoTagPerformers ? wildcard : [],\n studios: autoTagStudios ? wildcard : [],\n tags: autoTagTags ? wildcard : []\n }\n }\n\n async function onAutoTag() {\n try {\n await StashService.queryMetadataAutoTag(getAutoTagInput());\n ToastUtils.success(\"Started auto tagging\");\n jobStatus.refetch();\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n function maybeRenderStop() {\n if (!status || status === \"Idle\") {\n return undefined;\n }\n\n return (\n <>\n \n )\n }\n }\n\n function renderScenesButton() {\n if (props.isEditing) { return; }\n let linkSrc: string = \"#\";\n if (!!props.performer) {\n linkSrc = NavigationUtils.makePerformerScenesUrl(props.performer);\n } else if (!!props.studio) {\n linkSrc = NavigationUtils.makeStudioScenesUrl(props.studio);\n }\n return (\n \n Scenes\n \n );\n }\n\n function renderDeleteAlert() {\n var name;\n\n if (props.performer) {\n name = props.performer.name;\n }\n if (props.studio) {\n name = props.studio.name;\n }\n\n return (\n setIsDeleteAlertOpen(false)}\n onConfirm={() => props.onDelete()}\n >\n

\n Are you sure you want to delete {name}?\n

\n \n );\n }\n\n\n return (\n <>\n {renderDeleteAlert()}\n \n \n {renderEditButton()}\n {props.isEditing && !props.isNew ? : undefined}\n {renderScraperMenu()}\n {renderImageInput()}\n {renderSaveButton()}\n\n {renderAutoTagButton()}\n {renderScenesButton()}\n {renderDeleteButton()}\n \n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Shared/DurationInput.tsx",["412","413"],"import React, { FunctionComponent, useState, useEffect } from \"react\";\nimport { InputGroup, ButtonGroup, Button, IInputGroupProps, HTMLInputProps, ControlGroup } from \"@blueprintjs/core\";\nimport { TextUtils } from \"../../utils/text\";\nimport { FIXED, NUMERIC_INPUT } from \"@blueprintjs/core/lib/esm/common/classes\";\n\ninterface IProps {\n disabled?: boolean\n numericValue: number\n onValueChange(valueAsNumber: number): void\n onReset?(): void\n}\n\nexport const DurationInput: FunctionComponent = (props: IProps) => {\n const [value, setValue] = useState(secondsToString(props.numericValue));\n\n useEffect(() => {\n setValue(secondsToString(props.numericValue));\n }, [props.numericValue]);\n\n function secondsToString(seconds : number) {\n let ret = TextUtils.secondsToTimestamp(seconds);\n\n if (ret.startsWith(\"00:\")) {\n ret = ret.substr(3);\n\n if (ret.startsWith(\"0\")) {\n ret = ret.substr(1);\n }\n }\n\n return ret;\n }\n\n function stringToSeconds(v : string) {\n if (!v) {\n return 0;\n }\n \n let splits = v.split(\":\");\n\n if (splits.length > 3) {\n return 0;\n }\n\n let seconds = 0;\n let factor = 1;\n while(splits.length > 0) {\n let thisSplit = splits.pop();\n if (thisSplit == undefined) {\n return 0;\n }\n\n let thisInt = parseInt(thisSplit, 10);\n if (isNaN(thisInt)) {\n return 0;\n }\n\n seconds += factor * thisInt;\n factor *= 60;\n }\n\n return seconds;\n }\n\n function increment() {\n let seconds = stringToSeconds(value);\n seconds += 1;\n props.onValueChange(seconds);\n }\n\n function decrement() {\n let seconds = stringToSeconds(value);\n seconds -= 1;\n props.onValueChange(seconds);\n }\n\n function renderButtons() {\n return (\n \n increment()}\n />\n decrement()}\n />\n \n )\n }\n\n function onReset() {\n if (props.onReset) {\n props.onReset();\n }\n }\n\n function maybeRenderReset() {\n if (props.onReset) {\n return (\n onReset()}\n />\n )\n }\n }\n\n return (\n \n setValue(e.target.value)}\n onBlur={() => props.onValueChange(stringToSeconds(value))}\n placeholder=\"hh:mm:ss\"\n rightElement={maybeRenderReset()}\n />\n {renderButtons()}\n \n )\n};","/home/peroo/stash/ui/v2/src/components/Shared/FolderSelect/FolderSelect.tsx",["414","415"],"import {\n Button,\n Classes,\n Dialog,\n InputGroup,\n Spinner,\n FormGroup,\n} from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { StashService } from \"../../../core/StashService\";\n\ninterface IProps {\n directories: string[];\n onDirectoriesChanged: (directories: string[]) => void;\n}\n\nexport const FolderSelect: FunctionComponent = (props: IProps) => {\n const [currentDirectory, setCurrentDirectory] = useState(\"\");\n const [isDisplayingDialog, setIsDisplayingDialog] = useState(false);\n const [selectableDirectories, setSelectableDirectories] = useState([]);\n const [selectedDirectories, setSelectedDirectories] = useState([]);\n const { data, error, loading } = StashService.useDirectories(currentDirectory);\n\n useEffect(() => {\n setSelectedDirectories(props.directories);\n }, [props.directories]);\n\n useEffect(() => {\n if (!data || !data.directories || !!error) { return; }\n setSelectableDirectories(StashService.nullToUndefined(data.directories));\n }, [data]);\n\n function onSelectDirectory() {\n selectedDirectories.push(currentDirectory);\n setSelectedDirectories(selectedDirectories);\n setCurrentDirectory(\"\");\n setIsDisplayingDialog(false);\n props.onDirectoriesChanged(selectedDirectories);\n }\n\n function onRemoveDirectory(directory: string) {\n const newSelectedDirectories = selectedDirectories.filter((dir) => dir !== directory);\n setSelectedDirectories(newSelectedDirectories);\n props.onDirectoriesChanged(newSelectedDirectories);\n }\n\n function renderDialog() {\n return (\n setIsDisplayingDialog(false)}\n title=\"Select Directory\"\n >\n
\n setCurrentDirectory(e.target.value)}\n value={currentDirectory}\n rightElement={(!data || !data.directories || loading) ? : undefined}\n />\n {selectableDirectories.map((path) => {\n return
setCurrentDirectory(path)}>{path}
;\n })}\n
\n
\n
\n \n
\n
\n \n );\n }\n\n return (\n <>\n {!!error ?

{error.message}

: undefined}\n {renderDialog()}\n \n {selectedDirectories.map((path) => {\n return ;\n })}\n \n \n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Shared/TagLink.tsx",["416"],"import {\n ITagProps,\n Tag,\n} from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { PerformerDataFragment, SceneMarkerDataFragment, TagDataFragment } from \"../../core/generated-graphql\";\nimport { NavigationUtils } from \"../../utils/navigation\";\nimport { TextUtils } from \"../../utils/text\";\n\ninterface IProps extends ITagProps {\n tag?: Partial;\n performer?: Partial;\n marker?: Partial;\n}\n\nexport const TagLink: FunctionComponent = (props: IProps) => {\n let link: string = \"#\";\n let title: string = \"\";\n if (!!props.tag) {\n link = NavigationUtils.makeTagScenesUrl(props.tag);\n title = props.tag.name || \"\";\n } else if (!!props.performer) {\n link = NavigationUtils.makePerformerScenesUrl(props.performer);\n title = props.performer.name || \"\";\n } else if (!!props.marker) {\n link = NavigationUtils.makeSceneMarkerUrl(props.marker);\n title = `${props.marker.title} - ${TextUtils.secondsToTimestamp(props.marker.seconds || 0)}`;\n }\n return (\n \n {title}\n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Stats.tsx",["417"],"import { H1, Spinner } from \"@blueprintjs/core\";\nimport React, { FunctionComponent } from \"react\";\nimport { StashService } from \"../core/StashService\";\n\nexport const Stats: FunctionComponent = () => {\n const { data, error, loading } = StashService.useStats();\n\n function renderStats() {\n if (!data || !data.stats) { return; }\n return (\n \n );\n }\n\n return (\n
\n {!data || loading ? : undefined}\n {!!error ? error.message : undefined}\n {renderStats()}\n\n

Notes

\n
\n        {`\n        This is still an early version, some things are still a work in progress.\n        `}\n      
\n
\n );\n};\n","/home/peroo/stash/ui/v2/src/components/Studios/StudioCard.tsx",[],"/home/peroo/stash/ui/v2/src/components/Studios/StudioDetails/Studio.tsx",["418","419","420","421","422","423","424","425","426","427"],"import {\n Button,\n Classes,\n Dialog,\n EditableText,\n HTMLSelect,\n HTMLTable,\n Spinner,\n} from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { StashService } from \"../../../core/StashService\";\nimport { IBaseProps } from \"../../../models\";\nimport { ErrorUtils } from \"../../../utils/errors\";\nimport { TableUtils } from \"../../../utils/table\";\nimport { DetailsEditNavbar } from \"../../Shared/DetailsEditNavbar\";\nimport { ToastUtils } from \"../../../utils/toasts\";\n\ninterface IProps extends IBaseProps {}\n\nexport const Studio: FunctionComponent = (props: IProps) => {\n const isNew = props.match.params.id === \"new\";\n\n // Editing state\n const [isEditing, setIsEditing] = useState(isNew);\n\n // Editing studio state\n const [image, setImage] = useState(undefined);\n const [name, setName] = useState(undefined);\n const [url, setUrl] = useState(undefined);\n\n // Studio state\n const [studio, setStudio] = useState>({});\n const [imagePreview, setImagePreview] = useState(undefined);\n\n // Network state\n const [isLoading, setIsLoading] = useState(false);\n\n const { data, error, loading } = StashService.useFindStudio(props.match.params.id);\n const updateStudio = StashService.useStudioUpdate(getStudioInput() as GQL.StudioUpdateInput);\n const createStudio = StashService.useStudioCreate(getStudioInput() as GQL.StudioCreateInput);\n const deleteStudio = StashService.useStudioDestroy(getStudioInput() as GQL.StudioDestroyInput);\n\n function updateStudioEditState(state: Partial) {\n setName(state.name);\n setUrl(state.url);\n }\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findStudio || !!error) { return; }\n setStudio(data.findStudio);\n }, [data]);\n\n useEffect(() => {\n setImagePreview(studio.image_path);\n setImage(undefined);\n updateStudioEditState(studio);\n if (!isNew) {\n setIsEditing(false);\n }\n }, [studio]);\n\n function pasteImage(e : any) {\n if (e.clipboardData.files.length == 0) {\n return;\n }\n \n const file: File = e.clipboardData.files[0];\n const reader: FileReader = new FileReader();\n \n reader.onloadend = (e) => {\n setImagePreview(reader.result as string);\n setImage(reader.result as string);\n };\n reader.readAsDataURL(file);\n }\n\n useEffect(() => {\n window.addEventListener(\"paste\", pasteImage);\n \n return () => window.removeEventListener(\"paste\", pasteImage);\n });\n\n if (!isNew && !isEditing) {\n if (!data || !data.findStudio || isLoading) { return ; }\n if (!!error) { return <>error...; }\n }\n\n function getStudioInput() {\n const input: Partial = {\n name,\n url,\n image,\n };\n\n if (!isNew) {\n (input as GQL.StudioUpdateInput).id = props.match.params.id;\n }\n return input;\n }\n\n async function onSave() {\n setIsLoading(true);\n try {\n if (!isNew) {\n const result = await updateStudio();\n setStudio(result.data.studioUpdate);\n } else {\n const result = await createStudio();\n setStudio(result.data.studioCreate);\n props.history.push(`/studios/${result.data.studioCreate.id}`);\n }\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n }\n\n async function onAutoTag() {\n if (!studio || !studio.id) {\n return;\n }\n try {\n await StashService.queryMetadataAutoTag({ studios: [studio.id]});\n ToastUtils.success(\"Started auto tagging\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n async function onDelete() {\n setIsLoading(true);\n try {\n const result = await deleteStudio();\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n \n // redirect to studios page\n props.history.push(`/studios`);\n }\n\n function onImageChange(event: React.FormEvent) {\n const file: File = (event.target as any).files[0];\n const reader: FileReader = new FileReader();\n\n reader.onloadend = (e) => {\n setImagePreview(reader.result as string);\n setImage(reader.result as string);\n };\n reader.readAsDataURL(file);\n }\n\n // TODO: CSS class\n return (\n <>\n
\n
\n \n
\n
\n { setIsEditing(!isEditing); updateStudioEditState(studio); }}\n onSave={onSave}\n onDelete={onDelete}\n onAutoTag={onAutoTag}\n onImageChange={onImageChange}\n />\n

\n setName(value)}\n />\n

\n\n \n \n {TableUtils.renderEditableTextTableRow({title: \"URL\", value: url, isEditing, onChange: setUrl})}\n \n \n
\n
\n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Studios/StudioList.tsx",["428"],"import _ from \"lodash\";\nimport React, { FunctionComponent } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { FindStudiosQuery, FindStudiosVariables } from \"../../core/generated-graphql\";\nimport { ListHook } from \"../../hooks/ListHook\";\nimport { IBaseProps } from \"../../models/base-props\";\nimport { ListFilterModel } from \"../../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../../models/list-filter/types\";\nimport { StudioCard } from \"./StudioCard\";\n\ninterface IProps extends IBaseProps {}\n\nexport const StudioList: FunctionComponent = (props: IProps) => {\n const listData = ListHook.useList({\n filterMode: FilterMode.Studios,\n props,\n renderContent,\n });\n\n function renderContent(result: QueryHookResult, filter: ListFilterModel) {\n if (!result.data || !result.data.findStudios) { return; }\n if (filter.displayMode === DisplayMode.Grid) {\n return (\n
\n {result.data.findStudios.studios.map((studio) => ())}\n
\n );\n } else if (filter.displayMode === DisplayMode.List) {\n return

TODO

;\n } else if (filter.displayMode === DisplayMode.Wall) {\n return

TODO

;\n }\n }\n\n return listData.template;\n};\n","/home/peroo/stash/ui/v2/src/components/Studios/Studios.tsx",[],"/home/peroo/stash/ui/v2/src/components/Tags/TagList.tsx",["429","430","431","432","433","434","435","436","437","438","439","440"],"import { Alert, Button, Classes, Dialog, EditableText, FormGroup, HTMLTable, InputGroup, Spinner, Tag } from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { Link } from \"react-router-dom\";\nimport { FindGalleriesQuery, FindGalleriesVariables } from \"../../core/generated-graphql\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { ListHook } from \"../../hooks/ListHook\";\nimport { IBaseProps } from \"../../models/base-props\";\nimport { ListFilterModel } from \"../../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../../models/list-filter/types\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { NavigationUtils } from \"../../utils/navigation\";\nimport { ToastUtils } from \"../../utils/toasts\";\n\ninterface IProps extends IBaseProps {}\n\nexport const TagList: FunctionComponent = (props: IProps) => {\n const [tags, setTags] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n\n // Editing / New state\n const [editingTag, setEditingTag] = useState | undefined>(undefined);\n const [deletingTag, setDeletingTag] = useState | undefined>(undefined);\n const [name, setName] = useState(\"\");\n\n const { data, error, loading } = StashService.useAllTags();\n const updateTag = StashService.useTagUpdate(getTagInput() as GQL.TagUpdateInput);\n const createTag = StashService.useTagCreate(getTagInput() as GQL.TagCreateInput);\n const deleteTag = StashService.useTagDestroy(getDeleteTagInput() as GQL.TagDestroyInput);\n\n const [isDeleteAlertOpen, setIsDeleteAlertOpen] = useState(false);\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.allTags || !!error) { return; }\n setTags(data.allTags);\n }, [data]);\n\n useEffect(() => {\n if (!!editingTag) {\n setName(editingTag.name || \"\");\n } else {\n setName(\"\");\n }\n }, [editingTag]);\n\n useEffect(() => {\n setIsDeleteAlertOpen(!!deletingTag);\n }, [deletingTag]);\n\n function getTagInput() {\n const tagInput: Partial = { name };\n if (!!editingTag) { (tagInput as Partial).id = editingTag.id; }\n return tagInput;\n }\n\n function getDeleteTagInput() {\n const tagInput: Partial = {};\n if (!!deletingTag) { tagInput.id = deletingTag.id; }\n return tagInput;\n }\n\n async function onEdit() {\n try {\n if (!!editingTag && !!editingTag.id) {\n await updateTag();\n ToastUtils.success(\"Updated tag\");\n } else {\n await createTag();\n ToastUtils.success(\"Created tag\");\n }\n setEditingTag(undefined);\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n async function onAutoTag(tag : GQL.TagDataFragment) {\n if (!tag) {\n return;\n }\n try {\n await StashService.queryMetadataAutoTag({ tags: [tag.id]});\n ToastUtils.success(\"Started auto tagging\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n async function onDelete() {\n try {\n await deleteTag();\n ToastUtils.success(\"Deleted tag\");\n setDeletingTag(undefined);\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n function renderDeleteAlert() {\n return (\n setDeletingTag(undefined)}\n onConfirm={() => onDelete()}\n >\n

\n Are you sure you want to delete {deletingTag && deletingTag.name}?\n

\n \n );\n }\n\n if (!data || !data.allTags || isLoading) { return ; }\n if (!!error) { return <>{error.message}; }\n\n const tagElements = tags.map((tag) => {\n return (\n <>\n {renderDeleteAlert()}\n
\n setEditingTag(tag)}>{tag.name}\n
\n \n Scenes: {tag.scene_count}\n \n Markers: {tag.scene_marker_count}\n \n Total: {(tag.scene_count || 0) + (tag.scene_marker_count || 0)}\n \n
\n
\n \n );\n });\n return (\n
\n \n setEditingTag(undefined)}\n title={!!editingTag && !!editingTag.id ? \"Edit Tag\" : \"New Tag\"}\n >\n
\n \n setName(newValue.target.value)}\n value={name}\n />\n \n
\n
\n
\n \n
\n
\n \n\n {tagElements}\n
\n );\n};\n","/home/peroo/stash/ui/v2/src/components/Tags/Tags.tsx",[],"/home/peroo/stash/ui/v2/src/components/Wall/WallItem.tsx",["441"],"import _ from \"lodash\";\nimport React, { FunctionComponent, useRef, useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { VideoHoverHook } from \"../../hooks/VideoHover\";\nimport { TextUtils } from \"../../utils/text\";\nimport { NavigationUtils } from \"../../utils/navigation\";\nimport { StashService } from \"../../core/StashService\";\n\ninterface IWallItemProps {\n scene?: GQL.SlimSceneDataFragment;\n sceneMarker?: GQL.SceneMarkerDataFragment;\n origin?: string;\n onOverlay: (show: boolean) => void;\n clickHandler?: (item: GQL.SlimSceneDataFragment | GQL.SceneMarkerDataFragment) => void;\n}\n\nexport const WallItem: FunctionComponent = (props: IWallItemProps) => {\n const [videoPath, setVideoPath] = useState(undefined);\n const [previewPath, setPreviewPath] = useState(\"\");\n const [screenshotPath, setScreenshotPath] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [tags, setTags] = useState([]);\n const config = StashService.useConfiguration();\n const videoHoverHook = VideoHoverHook.useVideoHover({resetOnMouseLeave: true});\n const showTextContainer = !!config.data && !!config.data.configuration ? config.data.configuration.interface.wallShowTitle : true;\n\n function onMouseEnter() {\n VideoHoverHook.onMouseEnter(videoHoverHook);\n if (!videoPath || videoPath === \"\") {\n if (!!props.sceneMarker) {\n setVideoPath(props.sceneMarker.stream || \"\");\n } else if (!!props.scene) {\n setVideoPath(props.scene.paths.preview || \"\");\n }\n }\n props.onOverlay(true);\n }\n const debouncedOnMouseEnter = useRef(_.debounce(onMouseEnter, 500));\n\n function onMouseLeave() {\n VideoHoverHook.onMouseLeave(videoHoverHook);\n setVideoPath(\"\");\n debouncedOnMouseEnter.current.cancel();\n props.onOverlay(false);\n }\n\n function onClick() {\n if (props.clickHandler === undefined) { return; }\n if (props.scene !== undefined) {\n props.clickHandler(props.scene);\n } else if (props.sceneMarker !== undefined) {\n props.clickHandler(props.sceneMarker);\n }\n }\n\n let linkSrc: string = \"#\";\n if (props.clickHandler === undefined) {\n if (props.scene !== undefined) {\n linkSrc = `/scenes/${props.scene.id}`;\n } else if (props.sceneMarker !== undefined) {\n linkSrc = NavigationUtils.makeSceneMarkerUrl(props.sceneMarker);\n }\n }\n\n function onTransitionEnd(event: React.TransitionEvent) {\n const target = (event.target as any);\n if (target.classList.contains(\"double-scale\")) {\n target.parentElement.style.zIndex = 10;\n } else {\n target.parentElement.style.zIndex = null;\n }\n }\n\n useEffect(() => {\n if (!!props.sceneMarker) {\n setPreviewPath(props.sceneMarker.preview);\n setTitle(`${props.sceneMarker!.title} - ${TextUtils.secondsToTimestamp(props.sceneMarker.seconds)}`);\n const thisTags = props.sceneMarker.tags.map((tag) => ({tag.name}));\n thisTags.unshift({props.sceneMarker.primary_tag.name});\n setTags(thisTags);\n } else if (!!props.scene) {\n setPreviewPath(props.scene.paths.webp || \"\");\n setScreenshotPath(props.scene.paths.screenshot || \"\");\n setTitle(props.scene.title || \"\");\n // tags = props.scene.tags.map((tag) => ({tag.name}));\n }\n }, [props.sceneMarker, props.scene]);\n\n function previewNotFound() {\n if (previewPath !== screenshotPath) {\n setPreviewPath(screenshotPath);\n }\n }\n\n const className = [\"scene-wall-item-container\"];\n if (videoHoverHook.isHovering.current) { className.push(\"double-scale\"); }\n const style: React.CSSProperties = {};\n if (!!props.origin) { style.transformOrigin = props.origin; }\n return (\n
\n debouncedOnMouseEnter.current()}\n onMouseMove={() => debouncedOnMouseEnter.current()}\n onMouseLeave={onMouseLeave}\n >\n onClick()} to={linkSrc}>\n \n previewNotFound()} />\n {showTextContainer ?\n
\n
\n {title}\n
\n {tags}\n
: undefined\n }\n \n
\n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Wall/WallPanel.tsx",["442"],"import _ from \"lodash\";\nimport React, { FunctionComponent, useState } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport \"./Wall.scss\";\nimport { WallItem } from \"./WallItem\";\n\ninterface IWallPanelProps {\n scenes?: GQL.SlimSceneDataFragment[];\n sceneMarkers?: GQL.SceneMarkerDataFragment[];\n clickHandler?: (item: GQL.SlimSceneDataFragment | GQL.SceneMarkerDataFragment) => void;\n}\n\nexport const WallPanel: FunctionComponent = (props: IWallPanelProps) => {\n const [showOverlay, setShowOverlay] = useState(false);\n\n function onOverlay(show: boolean) {\n setShowOverlay(show);\n }\n\n function getOrigin(index: number, rowSize: number, total: number): string {\n const isAtStart = index % rowSize === 0;\n const isAtEnd = index % rowSize === rowSize - 1;\n const endRemaining = total % rowSize;\n\n // First row\n if (total === 1) { return \"top\"; }\n if (index === 0) { return \"top left\"; }\n if (index === rowSize - 1 || (total < rowSize && index === total - 1)) { return \"top right\"; }\n if (index < rowSize) { return \"top\"; }\n\n // Bottom row\n if (isAtEnd && index === total - 1) { return \"bottom right\"; }\n if (isAtStart && index === total - rowSize) { return \"bottom left\"; }\n if (endRemaining !== 0 && index >= total - endRemaining) { return \"bottom\"; }\n if (endRemaining === 0 && index >= total - rowSize) { return \"bottom\"; }\n\n // Everything else\n if (isAtStart) { return \"center left\"; }\n if (isAtEnd) { return \"center right\"; }\n return \"center\";\n }\n\n function maybeRenderScenes() {\n if (props.scenes === undefined) { return; }\n return props.scenes.map((scene, index) => {\n const origin = getOrigin(index, 5, props.scenes!.length);\n return (\n \n );\n });\n }\n\n function maybeRenderSceneMarkers() {\n if (props.sceneMarkers === undefined) { return; }\n return props.sceneMarkers.map((marker, index) => {\n const origin = getOrigin(index, 5, props.sceneMarkers!.length);\n return (\n \n );\n });\n }\n\n function render() {\n const overlayClassName = showOverlay ? \"visible\" : \"hidden\";\n return (\n <>\n
\n
\n {maybeRenderScenes()}\n {maybeRenderSceneMarkers()}\n
\n \n );\n }\n\n return render();\n};\n","/home/peroo/stash/ui/v2/src/components/list/AddFilter.tsx",[],"/home/peroo/stash/ui/v2/src/components/list/ListFilter.tsx",["443","444","445","446"],"import {\n AnchorButton,\n Button,\n ButtonGroup,\n ControlGroup,\n HTMLSelect,\n InputGroup,\n Menu,\n MenuItem,\n Popover,\n Tag,\n Tooltip,\n Slider,\n} from \"@blueprintjs/core\";\nimport { debounce } from \"lodash\";\nimport React, { FunctionComponent, SyntheticEvent, useEffect, useRef, useState } from \"react\";\nimport { Criterion } from \"../../models/list-filter/criteria/criterion\";\nimport { ListFilterModel } from \"../../models/list-filter/filter\";\nimport { DisplayMode } from \"../../models/list-filter/types\";\nimport { AddFilter } from \"./AddFilter\";\n\ninterface IListFilterProps {\n onChangePageSize: (pageSize: number) => void;\n onChangeQuery: (query: string) => void;\n onChangeSortDirection: (sortDirection: \"asc\" | \"desc\") => void;\n onChangeSortBy: (sortBy: string) => void;\n onChangeDisplayMode: (displayMode: DisplayMode) => void;\n onAddCriterion: (criterion: Criterion, oldId?: string) => void;\n onRemoveCriterion: (criterion: Criterion) => void;\n zoomIndex?: number;\n onChangeZoom?: (zoomIndex: number) => void;\n onSelectAll?: () => void;\n onSelectNone?: () => void;\n filter: ListFilterModel;\n}\n\nconst PAGE_SIZE_OPTIONS = [\"20\", \"40\", \"60\", \"120\"];\n\nexport const ListFilter: FunctionComponent = (props: IListFilterProps) => {\n let searchCallback: any;\n\n const [editingCriterion, setEditingCriterion] = useState(undefined);\n\n useEffect(() => {\n searchCallback = debounce((event: any) => {\n props.onChangeQuery(event.target.value);\n }, 500);\n });\n\n function onChangePageSize(event: SyntheticEvent) {\n const val = event!.currentTarget!.value;\n props.onChangePageSize(parseInt(val, 10));\n }\n\n function onChangeQuery(event: SyntheticEvent) {\n event.persist();\n searchCallback(event);\n }\n\n function onChangeSortDirection(_: any) {\n if (props.filter.sortDirection === \"asc\") {\n props.onChangeSortDirection(\"desc\");\n } else {\n props.onChangeSortDirection(\"asc\");\n }\n }\n\n function onChangeSortBy(event: React.MouseEvent) {\n props.onChangeSortBy(event.currentTarget.text);\n }\n\n function onChangeDisplayMode(displayMode: DisplayMode) {\n props.onChangeDisplayMode(displayMode);\n }\n\n function onAddCriterion(criterion: Criterion, oldId?: string) {\n props.onAddCriterion(criterion, oldId);\n }\n\n function onCancelAddCriterion() {\n setEditingCriterion(undefined);\n }\n\n let removedCriterionId = \"\";\n function onRemoveCriterionTag(criterion?: Criterion) {\n if (!criterion) { return; }\n setEditingCriterion(undefined);\n removedCriterionId = criterion.getId();\n props.onRemoveCriterion(criterion);\n }\n function onClickCriterionTag(criterion?: Criterion) {\n if (!criterion || removedCriterionId !== \"\") { return; }\n setEditingCriterion(criterion);\n }\n\n function renderSortByOptions() {\n return props.filter.sortByOptions.map((option) => (\n \n ));\n }\n\n function renderDisplayModeOptions() {\n function getIcon(option: DisplayMode) {\n switch (option) {\n case DisplayMode.Grid: return \"grid-view\";\n case DisplayMode.List: return \"list\";\n case DisplayMode.Wall: return \"symbol-square\";\n }\n }\n function getLabel(option: DisplayMode) {\n switch (option) {\n case DisplayMode.Grid: return \"Grid\";\n case DisplayMode.List: return \"List\";\n case DisplayMode.Wall: return \"Wall\";\n }\n }\n return props.filter.displayModeOptions.map((option) => (\n \n onChangeDisplayMode(option)}\n icon={getIcon(option)}\n />\n \n ));\n }\n\n function renderFilterTags() {\n return props.filter.criteria.map((criterion) => (\n onRemoveCriterionTag(criterion)}\n onClick={() => onClickCriterionTag(criterion)}\n >\n {criterion.getLabel()}\n \n ));\n }\n\n function onSelectAll() {\n if (props.onSelectAll) {\n props.onSelectAll();\n }\n }\n\n function onSelectNone() {\n if (props.onSelectNone) {\n props.onSelectNone();\n }\n }\n\n function renderSelectAll() {\n if (props.onSelectAll) {\n return onSelectAll()} text=\"Select All\" />;\n }\n }\n\n function renderSelectNone() {\n if (props.onSelectNone) {\n return onSelectNone()} text=\"Select None\" />;\n }\n }\n\n function renderMore() {\n let options = [];\n options.push(renderSelectAll());\n options.push(renderSelectNone());\n options = options.filter((o) => !!o);\n\n let menuItems = options as JSX.Element[];\n\n function renderMoreOptions() {\n return (\n <>\n {menuItems}\n \n )\n }\n\n if (menuItems.length > 0) {\n return (\n \n \n {renderSortByOptions()}\n \n \n \n \n \n \n \n\n \n\n \n {renderDisplayModeOptions()}\n \n\n {maybeRenderZoom()}\n\n \n {renderMore()}\n \n
\n
\n {renderFilterTags()}\n
\n \n );\n }\n\n return render();\n};\n","/home/peroo/stash/ui/v2/src/components/list/Pagination.tsx",[],"/home/peroo/stash/ui/v2/src/components/performers/PerformerCard.tsx",[],"/home/peroo/stash/ui/v2/src/components/performers/PerformerDetails/Performer.tsx",["447","448"],"/home/peroo/stash/ui/v2/src/components/performers/PerformerList.tsx",[],"/home/peroo/stash/ui/v2/src/components/performers/PerformerListTable.tsx",[],"/home/peroo/stash/ui/v2/src/components/performers/performers.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneCard.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/Scene.tsx",["449","450"],"import {\n Card,\n Spinner,\n Tab,\n Tabs,\n} from \"@blueprintjs/core\";\nimport queryString from \"query-string\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { StashService } from \"../../../core/StashService\";\nimport { IBaseProps } from \"../../../models\";\nimport { GalleryViewer } from \"../../Galleries/GalleryViewer\";\nimport { ScenePlayer } from \"../ScenePlayer/ScenePlayer\";\nimport { SceneDetailPanel } from \"./SceneDetailPanel\";\nimport { SceneEditPanel } from \"./SceneEditPanel\";\nimport { SceneFileInfoPanel } from \"./SceneFileInfoPanel\";\nimport { SceneMarkersPanel } from \"./SceneMarkersPanel\";\nimport { ScenePerformerPanel } from \"./ScenePerformerPanel\";\n\ninterface ISceneProps extends IBaseProps {}\n\nexport const Scene: FunctionComponent = (props: ISceneProps) => {\n const [timestamp, setTimestamp] = useState(0);\n const [scene, setScene] = useState>({});\n const [isLoading, setIsLoading] = useState(false);\n const { data, error, loading } = StashService.useFindScene(props.match.params.id);\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findScene || !!error) { return; }\n setScene(StashService.nullToUndefined(data.findScene));\n }, [data]);\n\n useEffect(() => {\n const queryParams = queryString.parse(props.location.search);\n if (!!queryParams.t && typeof queryParams.t === \"string\" && timestamp === 0) {\n const newTimestamp = parseInt(queryParams.t, 10);\n setTimestamp(newTimestamp);\n }\n });\n\n function onClickMarker(marker: GQL.SceneMarkerDataFragment) {\n setTimestamp(marker.seconds);\n }\n\n if (!data || !data.findScene || isLoading || Object.keys(scene).length === 0) {\n return ;\n }\n const modifiedScene =\n Object.assign({scene_marker_tags: data.sceneMarkerTags}, scene) as GQL.SceneDataFragment; // TODO Hack from angular\n if (!!error) { return <>error...; }\n\n return (\n <>\n \n \n \n } />\n }\n />\n {modifiedScene.performers.length > 0 ?\n }\n /> : undefined\n }\n {!!modifiedScene.gallery ?\n }\n /> : undefined\n }\n } />\n setScene(newScene)} \n onDelete={() => props.history.push(\"/scenes\")}\n />}\n />\n \n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneDetailPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneEditPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneFilenameParser.tsx",["451","452"],"import {\n Card,\n FormGroup,\n InputGroup,\n Button,\n H4,\n Spinner,\n HTMLTable,\n Checkbox,\n H5,\n MenuItem,\n HTMLSelect,\n TagInput,\n Tree,\n ITreeNode,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { StashService } from \"../../core/StashService\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { SlimSceneDataFragment, Maybe } from \"../../core/generated-graphql\";\nimport { TextUtils } from \"../../utils/text\";\nimport _ from \"lodash\";\nimport { ToastUtils } from \"../../utils/toasts\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { Pagination } from \"../list/Pagination\";\nimport { Select, ItemRenderer, ItemPredicate } from \"@blueprintjs/select\";\nimport { FilterMultiSelect } from \"../select/FilterMultiSelect\";\nimport { FilterSelect } from \"../select/FilterSelect\";\n \nclass ParserResult {\n public value: Maybe;\n public originalValue: Maybe;\n public set: boolean = false;\n\n public setOriginalValue(v : Maybe) {\n this.originalValue = v;\n this.value = v;\n }\n\n public setValue(v : Maybe) {\n if (!!v) {\n this.value = v;\n this.set = !_.isEqual(this.value, this.originalValue);\n }\n }\n}\n\nclass ParserField {\n public field : string;\n public helperText? : string;\n\n constructor(field: string, helperText?: string) {\n this.field = field;\n this.helperText = helperText;\n }\n\n public getFieldPattern() {\n return \"{\" + this.field + \"}\";\n }\n\n static Title = new ParserField(\"title\");\n static Ext = new ParserField(\"ext\", \"File extension\");\n\n static I = new ParserField(\"i\", \"Matches any ignored word\");\n static D = new ParserField(\"d\", \"Matches any delimiter (.-_)\");\n\n static Performer = new ParserField(\"performer\");\n static Studio = new ParserField(\"studio\");\n static Tag = new ParserField(\"tag\");\n\n // date fields\n static Date = new ParserField(\"date\", \"YYYY-MM-DD\");\n static YYYY = new ParserField(\"yyyy\", \"Year\");\n static YY = new ParserField(\"yy\", \"Year (20YY)\");\n static MM = new ParserField(\"mm\", \"Two digit month\");\n static DD = new ParserField(\"dd\", \"Two digit date\");\n static YYYYMMDD = new ParserField(\"yyyymmdd\");\n static YYMMDD = new ParserField(\"yymmdd\");\n static DDMMYYYY = new ParserField(\"ddmmyyyy\");\n static DDMMYY = new ParserField(\"ddmmyy\");\n static MMDDYYYY = new ParserField(\"mmddyyyy\");\n static MMDDYY = new ParserField(\"mmddyy\");\n\n static validFields = [\n ParserField.Title,\n ParserField.Ext,\n ParserField.D,\n ParserField.I,\n ParserField.Performer,\n ParserField.Studio,\n ParserField.Tag,\n ParserField.Date,\n ParserField.YYYY,\n ParserField.YY,\n ParserField.MM,\n ParserField.DD,\n ParserField.YYYYMMDD,\n ParserField.YYMMDD,\n ParserField.DDMMYYYY,\n ParserField.DDMMYY,\n ParserField.MMDDYYYY,\n ParserField.MMDDYY\n ]\n\n static fullDateFields = [\n ParserField.YYYYMMDD,\n ParserField.YYMMDD,\n ParserField.DDMMYYYY,\n ParserField.DDMMYY,\n ParserField.MMDDYYYY,\n ParserField.MMDDYY\n ];\n}\nclass SceneParserResult {\n public id: string;\n public filename: string;\n public title: ParserResult = new ParserResult();\n public date: ParserResult = new ParserResult();\n\n public studio: ParserResult = new ParserResult();\n public studioId: ParserResult = new ParserResult();\n public tags: ParserResult = new ParserResult();\n public tagIds: ParserResult = new ParserResult();\n public performers: ParserResult = new ParserResult();\n public performerIds: ParserResult = new ParserResult();\n\n public scene : SlimSceneDataFragment;\n\n constructor(result : GQL.ParseSceneFilenamesResults) {\n this.scene = result.scene;\n\n this.id = this.scene.id;\n this.filename = TextUtils.fileNameFromPath(this.scene.path);\n this.title.setOriginalValue(this.scene.title);\n this.date.setOriginalValue(this.scene.date);\n this.performerIds.setOriginalValue(this.scene.performers.map((p) => p.id));\n this.performers.setOriginalValue(this.scene.performers);\n this.tagIds.setOriginalValue(this.scene.tags.map((t) => t.id));\n this.tags.setOriginalValue(this.scene.tags);\n this.studioId.setOriginalValue(this.scene.studio ? this.scene.studio.id : undefined);\n this.studio.setOriginalValue(this.scene.studio);\n\n this.title.setValue(result.title);\n this.date.setValue(result.date);\n this.performerIds.setValue(result.performer_ids);\n this.tagIds.setValue(result.tag_ids);\n this.studioId.setValue(result.studio_id);\n\n if (result.performer_ids) {\n this.performers.setValue(result.performer_ids.map((p) => {\n return {\n id: p,\n name: \"\",\n favorite: false,\n image_path: \"\"\n };\n }));\n }\n\n if (result.tag_ids) {\n this.tags.setValue(result.tag_ids.map((t) => {\n return {\n id: t,\n name: \"\",\n };\n }));\n }\n\n if (result.studio_id) {\n this.studio.setValue({\n id: result.studio_id,\n name: \"\",\n image_path: \"\"\n });\n }\n }\n\n private static setInput(object: any, key: string, parserResult : ParserResult) {\n if (parserResult.set) {\n object[key] = parserResult.value;\n }\n }\n\n // returns true if any of its fields have set == true\n public isChanged() {\n return this.title.set || this.date.set || this.performerIds.set || this.studioId.set || this.tagIds.set;\n }\n\n public toSceneUpdateInput() {\n var ret = {\n id: this.id,\n title: this.scene.title,\n details: this.scene.details,\n url: this.scene.url,\n date: this.scene.date,\n rating: this.scene.rating,\n gallery_id: this.scene.gallery ? this.scene.gallery.id : undefined,\n studio_id: this.scene.studio ? this.scene.studio.id : undefined,\n performer_ids: this.scene.performers.map((performer) => performer.id),\n tag_ids: this.scene.tags.map((tag) => tag.id)\n };\n\n SceneParserResult.setInput(ret, \"title\", this.title);\n SceneParserResult.setInput(ret, \"date\", this.date);\n SceneParserResult.setInput(ret, \"performer_ids\", this.performerIds);\n SceneParserResult.setInput(ret, \"studio_id\", this.studioId);\n SceneParserResult.setInput(ret, \"tag_ids\", this.tagIds);\n\n return ret;\n }\n};\n\ninterface IParserInput {\n pattern: string,\n ignoreWords: string[],\n whitespaceCharacters: string,\n capitalizeTitle: boolean,\n page: number,\n pageSize: number,\n findClicked: boolean\n}\n\ninterface IParserRecipe {\n pattern: string,\n ignoreWords: string[],\n whitespaceCharacters: string,\n capitalizeTitle: boolean,\n description: string\n}\n\nconst builtInRecipes = [\n {\n pattern: \"{title}\",\n ignoreWords: [],\n whitespaceCharacters: \"\",\n capitalizeTitle: false,\n description: \"Filename\"\n },\n {\n pattern: \"{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \"\",\n capitalizeTitle: false,\n description: \"Without extension\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.XXX.{}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{title}.XXX.{}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.{i}.{ext}\",\n ignoreWords: [\"cz\", \"fr\"],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"Foreign language\"\n }\n];\n\nexport const SceneFilenameParser: FunctionComponent = () => {\n const [parserResult, setParserResult] = useState([]);\n const [parserInput, setParserInput] = useState(initialParserInput());\n\n const [allTitleSet, setAllTitleSet] = useState(false);\n const [allDateSet, setAllDateSet] = useState(false);\n const [allPerformerSet, setAllPerformerSet] = useState(false);\n const [allTagSet, setAllTagSet] = useState(false);\n const [allStudioSet, setAllStudioSet] = useState(false);\n\n const [showFields, setShowFields] = useState>(initialShowFieldsState());\n \n const [totalItems, setTotalItems] = useState(0);\n\n // Network state\n const [isLoading, setIsLoading] = useState(false);\n\n const updateScenes = StashService.useScenesUpdate(getScenesUpdateData());\n\n function initialParserInput() {\n return {\n pattern: \"{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \"._\",\n capitalizeTitle: true,\n page: 1,\n pageSize: 20,\n findClicked: false\n };\n }\n\n function initialShowFieldsState() {\n return new Map([\n [\"Title\", true],\n [\"Date\", true],\n [\"Performers\", true],\n [\"Tags\", true],\n [\"Studio\", true]\n ]);\n }\n\n function getParserFilter() {\n return {\n q: parserInput.pattern,\n page: parserInput.page,\n per_page: parserInput.pageSize,\n sort: \"path\",\n direction: GQL.SortDirectionEnum.Asc,\n };\n }\n\n function getParserInput() {\n return {\n ignoreWords: parserInput.ignoreWords,\n whitespaceCharacters: parserInput.whitespaceCharacters,\n capitalizeTitle: parserInput.capitalizeTitle\n };\n }\n\n async function onFind() {\n setParserResult([]);\n\n setIsLoading(true);\n \n try {\n const response = await StashService.queryParseSceneFilenames(getParserFilter(), getParserInput());\n\n let result = response.data.parseSceneFilenames;\n if (!!result) {\n parseResults(result.results);\n setTotalItems(result.count);\n }\n } catch (err) {\n ErrorUtils.handle(err);\n }\n\n setIsLoading(false);\n }\n\n useEffect(() => {\n if(parserInput.findClicked) {\n onFind();\n }\n }, [parserInput]);\n\n function onPageSizeChanged(newSize : number) {\n var newInput = _.clone(parserInput);\n newInput.page = 1;\n newInput.pageSize = newSize;\n setParserInput(newInput);\n }\n\n function onPageChanged(newPage : number) {\n if (newPage !== parserInput.page) {\n var newInput = _.clone(parserInput);\n newInput.page = newPage;\n setParserInput(newInput);\n }\n }\n\n function onFindClicked(input : IParserInput) {\n input.page = 1;\n input.findClicked = true;\n setParserInput(input);\n setTotalItems(0);\n }\n\n function getScenesUpdateData() {\n return parserResult.filter((result) => result.isChanged()).map((result) => result.toSceneUpdateInput());\n }\n\n async function onApply() {\n setIsLoading(true);\n\n try {\n await updateScenes();\n ToastUtils.success(\"Updated scenes\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n\n setIsLoading(false);\n }\n\n function parseResults(results : GQL.ParseSceneFilenamesResults[]) {\n if (results) {\n var result = results.map((r) => {\n return new SceneParserResult(r);\n }).filter((r) => !!r) as SceneParserResult[];\n\n setParserResult(result);\n determineFieldsToHide();\n }\n }\n\n function determineFieldsToHide() {\n var pattern = parserInput.pattern;\n var titleSet = pattern.includes(\"{title}\");\n var dateSet = pattern.includes(\"{date}\") || \n pattern.includes(\"{dd}\") || // don't worry about other partial date fields since this should be implied\n ParserField.fullDateFields.some((f) => {\n return pattern.includes(\"{\" + f.field + \"}\");\n });\n var performerSet = pattern.includes(\"{performer}\");\n var tagSet = pattern.includes(\"{tag}\");\n var studioSet = pattern.includes(\"{studio}\");\n\n var showFieldsCopy = _.clone(showFields);\n showFieldsCopy.set(\"Title\", titleSet);\n showFieldsCopy.set(\"Date\", dateSet);\n showFieldsCopy.set(\"Performers\", performerSet);\n showFieldsCopy.set(\"Tags\", tagSet);\n showFieldsCopy.set(\"Studio\", studioSet);\n setShowFields(showFieldsCopy);\n }\n\n useEffect(() => {\n var newAllTitleSet = !parserResult.some((r) => {\n return !r.title.set;\n });\n var newAllDateSet = !parserResult.some((r) => {\n return !r.date.set;\n });\n var newAllPerformerSet = !parserResult.some((r) => {\n return !r.performerIds.set;\n });\n var newAllTagSet = !parserResult.some((r) => {\n return !r.tagIds.set;\n });\n var newAllStudioSet = !parserResult.some((r) => {\n return !r.studioId.set;\n });\n\n if (newAllTitleSet !== allTitleSet) {\n setAllTitleSet(newAllTitleSet);\n }\n if (newAllDateSet !== allDateSet) {\n setAllDateSet(newAllDateSet);\n }\n if (newAllPerformerSet !== allPerformerSet) {\n setAllTagSet(newAllPerformerSet);\n }\n if (newAllTagSet !== allTagSet) {\n setAllTagSet(newAllTagSet);\n }\n if (newAllStudioSet !== allStudioSet) {\n setAllStudioSet(newAllStudioSet);\n }\n }, [parserResult]);\n\n function onSelectAllTitleSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.title.set = selected;\n });\n\n setParserResult(newResult);\n setAllTitleSet(selected);\n }\n\n function onSelectAllDateSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.date.set = selected;\n });\n\n setParserResult(newResult);\n setAllDateSet(selected);\n }\n\n function onSelectAllPerformerSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.performerIds.set = selected;\n });\n\n setParserResult(newResult);\n setAllPerformerSet(selected);\n }\n\n function onSelectAllTagSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.tagIds.set = selected;\n });\n\n setParserResult(newResult);\n setAllTagSet(selected);\n }\n\n function onSelectAllStudioSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.studioId.set = selected;\n });\n\n setParserResult(newResult);\n setAllStudioSet(selected);\n }\n\n interface IShowFieldsTreeProps {\n showFields: Map\n onShowFieldsChanged: (fields : Map) => void\n }\n\n function ShowFieldsTree(props : IShowFieldsTreeProps) {\n const [displayFieldsExpanded, setDisplayFieldsExpanded] = useState();\n\n const treeState: ITreeNode[] = [\n {\n id: 0,\n hasCaret: true,\n label: \"Display fields\",\n childNodes: [\n {\n id: 1,\n label: \"Title\",\n },\n {\n id: 2,\n label: \"Date\",\n },\n {\n id: 3,\n label: \"Performers\",\n },\n {\n id: 4,\n label: \"Tags\",\n },\n {\n id: 5,\n label: \"Studio\",\n }\n ]\n }\n ];\n\n function setNodeState() {\n if (!!treeState[0].childNodes) {\n treeState[0].childNodes.forEach((n) => {\n n.icon = props.showFields.get(n.label as string) ? \"tick\" : \"cross\";\n });\n }\n\n treeState[0].isExpanded = displayFieldsExpanded;\n }\n\n setNodeState();\n\n function expandNode() {\n setDisplayFieldsExpanded(true);\n }\n\n function collapseNode() {\n setDisplayFieldsExpanded(false);\n }\n\n function handleClick(nodeData: ITreeNode) {\n var field = nodeData.label as string;\n var fieldsCopy = _.clone(props.showFields);\n fieldsCopy.set(field, !fieldsCopy.get(field));\n props.onShowFieldsChanged(fieldsCopy);\n }\n\n return (\n \n );\n }\n\n interface IParserInputProps {\n input: IParserInput,\n onFind: (input : IParserInput) => void\n }\n\n function ParserInput(props : IParserInputProps) {\n const [pattern, setPattern] = useState(props.input.pattern);\n const [ignoreWords, setIgnoreWords] = useState(props.input.ignoreWords.join(\" \"));\n const [whitespaceCharacters, setWhitespaceCharacters] = useState(props.input.whitespaceCharacters);\n const [capitalizeTitle, setCapitalizeTitle] = useState(props.input.capitalizeTitle);\n\n function onFind() {\n props.onFind({\n pattern: pattern,\n ignoreWords: ignoreWords.split(\" \"),\n whitespaceCharacters: whitespaceCharacters,\n capitalizeTitle: capitalizeTitle,\n page: 1,\n pageSize: props.input.pageSize,\n findClicked: props.input.findClicked\n });\n }\n\n const ParserRecipeSelect = Select.ofType();\n\n const renderParserRecipe: ItemRenderer = (input, { handleClick, modifiers }) => {\n if (!modifiers.matchesPredicate) {\n return null;\n }\n return (\n \n );\n };\n\n const parserRecipePredicate: ItemPredicate = (query, item) => {\n return item.pattern.includes(query);\n };\n\n function setParserRecipe(recipe: IParserRecipe) {\n setPattern(recipe.pattern);\n setIgnoreWords(recipe.ignoreWords.join(\" \"));\n setWhitespaceCharacters(recipe.whitespaceCharacters);\n setCapitalizeTitle(recipe.capitalizeTitle);\n }\n \n const ParserFieldSelect = Select.ofType();\n\n const renderParserField: ItemRenderer = (field, { handleClick, modifiers }) => {\n if (!modifiers.matchesPredicate) {\n return null;\n }\n return (\n \n );\n };\n\n const parserFieldPredicate: ItemPredicate = (query, item) => {\n return item.field.includes(query);\n };\n\n const validFields = [new ParserField(\"\", \"Wildcard\")].concat(ParserField.validFields);\n \n function addParserField(field: ParserField) {\n setPattern(pattern + field.getFieldPattern());\n }\n\n const parserFieldSelect = (\n addParserField(item)}\n itemRenderer={renderParserField}\n itemPredicate={parserFieldPredicate}\n >\n \n \n \n )\n }\n\n return (\n \n

Scene Filename Parser

\n onFindClicked(input)}\n />\n\n {isLoading ? : undefined}\n {renderTable()}\n
\n );\n};\n \n","/home/peroo/stash/ui/v2/src/components/scenes/SceneList.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneListTable.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneMarkerList.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/ScenePlayer/ScenePlayer.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx",["453","454","455","456","457","458"],"import axios from \"axios\";\nimport React, { CSSProperties, FunctionComponent, RefObject, useEffect, useRef, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { TextUtils } from \"../../../utils/text\";\nimport \"./ScenePlayerScrubber.scss\";\n\ninterface IScenePlayerScrubberProps {\n scene: GQL.SceneDataFragment;\n position: number;\n onSeek: (seconds: number) => void;\n onScrolled: () => void;\n}\n\ninterface ISceneSpriteItem {\n start: number;\n end: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport const ScenePlayerScrubber: FunctionComponent = (props: IScenePlayerScrubberProps) => {\n const contentEl = useRef(null);\n const positionIndicatorEl = useRef(null);\n const scrubberSliderEl = useRef(null);\n const mouseDown = useRef(false);\n const lastMouseEvent = useRef(null);\n const startMouseEvent = useRef(null);\n const velocity = useRef(0);\n\n const _position = useRef(0);\n function getPostion() { return _position.current; }\n function setPosition(newPostion: number, shouldEmit: boolean = true) {\n if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return; }\n if (shouldEmit) { props.onScrolled(); }\n\n const midpointOffset = scrubberSliderEl.current.clientWidth / 2;\n\n const bounds = getBounds() * -1;\n if (newPostion > midpointOffset) {\n _position.current = midpointOffset;\n } else if (newPostion < bounds - midpointOffset) {\n _position.current = bounds - midpointOffset;\n } else {\n _position.current = newPostion;\n }\n\n scrubberSliderEl.current.style.transform = `translateX(${_position.current}px)`;\n\n const indicatorPosition = (\n (newPostion - midpointOffset) / (bounds - (midpointOffset * 2)) * scrubberSliderEl.current.clientWidth\n );\n positionIndicatorEl.current.style.transform = `translateX(${indicatorPosition}px)`;\n }\n\n const [spriteItems, setSpriteItems] = useState([]);\n const [delayedRender, setDelayedRender] = useState(false);\n\n useEffect(() => {\n if (!scrubberSliderEl.current) { return; }\n scrubberSliderEl.current.style.transform = `translateX(${scrubberSliderEl.current.clientWidth / 2}px)`;\n }, [scrubberSliderEl]);\n\n useEffect(() => {\n fetchSpriteInfo();\n }, [props.scene]);\n\n useEffect(() => {\n if (!scrubberSliderEl.current) { return; }\n const duration = Number(props.scene.file.duration);\n const percentage = props.position / duration;\n const position = (\n (scrubberSliderEl.current.scrollWidth * percentage) - (scrubberSliderEl.current.clientWidth / 2)\n ) * -1;\n setPosition(position, false);\n }, [props.position]);\n\n useEffect(() => {\n window.addEventListener(\"mouseup\", onMouseUp, false);\n return () => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n });\n\n useEffect(() => {\n if (!contentEl.current) { return; }\n contentEl.current.addEventListener(\"mousedown\", onMouseDown, false);\n return () => {\n if (!contentEl.current) { return; }\n contentEl.current.removeEventListener(\"mousedown\", onMouseDown);\n };\n });\n\n useEffect(() => {\n if (!contentEl.current) { return; }\n contentEl.current.addEventListener(\"mousemove\", onMouseMove, false);\n return () => {\n if (!contentEl.current) { return; }\n contentEl.current.removeEventListener(\"mousemove\", onMouseMove);\n };\n });\n\n function onMouseUp(this: Window, event: MouseEvent) {\n if (!startMouseEvent.current || !scrubberSliderEl.current) { return; }\n mouseDown.current = false;\n const delta = Math.abs(event.clientX - startMouseEvent.current.clientX);\n if (delta < 1 && event.target instanceof HTMLDivElement) {\n const target: HTMLDivElement = event.target;\n let seekSeconds: number | undefined;\n\n const spriteIdString = target.getAttribute(\"data-sprite-item-id\");\n if (spriteIdString != null) {\n const spritePercentage = event.offsetX / target.clientWidth;\n const offset = target.offsetLeft + (target.clientWidth * spritePercentage);\n const percentage = offset / scrubberSliderEl.current.scrollWidth;\n seekSeconds = percentage * (props.scene.file.duration || 0);\n }\n\n const markerIdString = target.getAttribute(\"data-marker-id\");\n if (markerIdString != null) {\n const marker = props.scene.scene_markers[Number(markerIdString)];\n seekSeconds = marker.seconds;\n }\n\n if (!!seekSeconds) { props.onSeek(seekSeconds); }\n } else if (Math.abs(velocity.current) > 25) {\n const newPosition = getPostion() + (velocity.current * 10);\n setPosition(newPosition);\n velocity.current = 0;\n }\n }\n\n function onMouseDown(this: HTMLDivElement, event: MouseEvent) {\n event.preventDefault();\n mouseDown.current = true;\n lastMouseEvent.current = event;\n startMouseEvent.current = event;\n velocity.current = 0;\n }\n\n function onMouseMove(this: HTMLDivElement, event: MouseEvent) {\n if (!mouseDown.current) { return; }\n\n // negative dragging right (past), positive left (future)\n const delta = event.clientX - lastMouseEvent.current.clientX;\n\n const movement = event.movementX;\n velocity.current = movement;\n\n const newPostion = getPostion() + delta;\n setPosition(newPostion);\n lastMouseEvent.current = event;\n }\n\n function getBounds(): number {\n if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return 0; }\n return scrubberSliderEl.current.scrollWidth - scrubberSliderEl.current.clientWidth;\n }\n\n function goBack() {\n if (!scrubberSliderEl.current) { return; }\n const newPosition = getPostion() + scrubberSliderEl.current.clientWidth;\n setPosition(newPosition);\n }\n\n function goForward() {\n if (!scrubberSliderEl.current) { return; }\n const newPosition = getPostion() - scrubberSliderEl.current.clientWidth;\n setPosition(newPosition);\n }\n\n async function fetchSpriteInfo() {\n if (!props.scene || !props.scene.paths.vtt) { return; }\n\n const response = await axios.get(props.scene.paths.vtt, {responseType: \"text\"});\n if (response.status !== 200) {\n console.log(response.statusText);\n }\n\n // TODO: This is gnarly\n const lines = response.data.split(\"\\n\");\n if (lines.shift() !== \"WEBVTT\") { return; }\n if (lines.shift() !== \"\") { return; }\n let item: ISceneSpriteItem = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0};\n const newSpriteItems: ISceneSpriteItem[] = [];\n while (lines.length) {\n const line = lines.shift();\n if (line === undefined) { continue; }\n\n if (line.includes(\"#\") && line.includes(\"=\") && line.includes(\",\")) {\n const size = line.split(\"#\")[1].split(\"=\")[1].split(\",\");\n item.x = Number(size[0]);\n item.y = Number(size[1]);\n item.w = Number(size[2]);\n item.h = Number(size[3]);\n\n newSpriteItems.push(item);\n item = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0};\n } else if (line.includes(\" --> \")) {\n const times = line.split(\" --> \");\n\n const start = times[0].split(\":\");\n item.start = (+start[0]) * 60 * 60 + (+start[1]) * 60 + (+start[2]);\n\n const end = times[1].split(\":\");\n item.end = (+end[0]) * 60 * 60 + (+end[1]) * 60 + (+end[2]);\n }\n }\n\n setSpriteItems(newSpriteItems);\n // TODO: Very hacky. Need to wait for the scroll width to update from the image loading.\n setTimeout(() => {\n setDelayedRender(true);\n }, 100);\n }\n\n function renderTags() {\n function getTagStyle(i: number): CSSProperties {\n if (!scrubberSliderEl.current ||\n spriteItems.length === 0 ||\n getBounds() === 0) { return {}; }\n\n const tags = window.document.getElementsByClassName(\"scrubber-tag\");\n if (tags.length === 0) { return {}; }\n\n let tag: any;\n for (let index = 0; index < tags.length; index++) {\n tag = tags.item(index) as any;\n const id = tag.getAttribute(\"data-marker-id\");\n if (id === i.toString()) {\n break;\n }\n }\n\n const marker = props.scene.scene_markers[i];\n const duration = Number(props.scene.file.duration);\n const percentage = marker.seconds / duration;\n\n const left = (scrubberSliderEl.current.scrollWidth * percentage) - (tag.clientWidth / 2);\n return {\n left: `${left}px`,\n height: 20,\n };\n }\n\n return props.scene.scene_markers.map((marker, index) => {\n const dataAttrs = {\n \"data-marker-id\": index,\n };\n return (\n \n {marker.title}\n \n );\n });\n }\n\n function renderSprites() {\n function getStyleForSprite(index: number): CSSProperties {\n if (!props.scene.paths.vtt) { return {}; }\n const sprite = spriteItems[index];\n const left = sprite.w * index;\n const path = props.scene.paths.vtt.replace(\"_thumbs.vtt\", \"_sprite.jpg\"); // TODO: Gnarly\n return {\n width: `${sprite.w}px`,\n height: `${sprite.h}px`,\n margin: \"0px auto\",\n backgroundPosition: -sprite.x + \"px \" + -sprite.y + \"px\",\n backgroundImage: `url(${path})`,\n left: `${left}px`,\n };\n }\n\n return spriteItems.map((spriteItem, index) => {\n const dataAttrs = {\n \"data-sprite-item-id\": index,\n };\n return (\n \n {TextUtils.secondsToTimestamp(spriteItem.start)} - {TextUtils.secondsToTimestamp(spriteItem.end)}\n \n );\n });\n }\n\n return (\n
\n goBack()}><\n
\n
\n
\n
\n
\n
\n
\n {renderTags()}\n
\n {renderSprites()}\n
\n
\n
\n goForward()}>>\n
\n );\n};\n","/home/peroo/stash/ui/v2/src/components/scenes/SceneSelectedOptions.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/helpers.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/scenes.tsx",[],"/home/peroo/stash/ui/v2/src/components/select/FilterMultiSelect.tsx",["459"],"import * as React from \"react\";\n\nimport { MenuItem } from \"@blueprintjs/core\";\nimport { IMultiSelectProps, ItemPredicate, ItemRenderer, MultiSelect } from \"@blueprintjs/select\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { HTMLInputProps } from \"../../models\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { ToastUtils } from \"../../utils/toasts\";\n\nconst InternalPerformerMultiSelect = MultiSelect.ofType();\nconst InternalTagMultiSelect = MultiSelect.ofType();\nconst InternalStudioMultiSelect = MultiSelect.ofType();\n\ntype ValidTypes =\n GQL.AllPerformersForFilterAllPerformers |\n GQL.AllTagsForFilterAllTags |\n GQL.AllStudiosForFilterAllStudios;\n\ninterface IProps extends HTMLInputProps, Partial> {\n type: \"performers\" | \"studios\" | \"tags\";\n initialIds?: string[];\n onUpdate: (items: ValidTypes[]) => void;\n}\n\nexport const FilterMultiSelect: React.FunctionComponent = (props: IProps) => {\n let MultiSelectImpl = getMultiSelectImpl();\n let InternalMultiSelect = MultiSelectImpl.getInternalMultiSelect();\n const data = MultiSelectImpl.getData();\n \n const [selectedItems, setSelectedItems] = React.useState([]);\n const [items, setItems] = React.useState([]);\n const [newTagName, setNewTagName] = React.useState(\"\");\n const createTag = StashService.useTagCreate(getTagInput() as GQL.TagCreateInput);\n\n React.useEffect(() => {\n if (!!data) {\n MultiSelectImpl.translateData();\n }\n }, [data]);\n \n function getTagInput() {\n const tagInput: Partial = { name: newTagName };\n return tagInput;\n }\n\n async function onCreateNewObject(item: ValidTypes) {\n var created : any;\n if (props.type === \"tags\") {\n try {\n created = await createTag();\n \n items.push(created.data.tagCreate);\n setItems(items.slice());\n addSelectedItem(created.data.tagCreate);\n \n ToastUtils.success(\"Created tag\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n }\n\n function createNewTag(query : string) {\n setNewTagName(query);\n return {\n name : query\n };\n }\n\n function createNewRenderer(query: string, active: boolean, handleClick: React.MouseEventHandler) {\n // if tag already exists with that name, then don't return anything\n if (items.find((item) => {\n return item.name === query;\n })) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n React.useEffect(() => {\n if (!!props.initialIds && !!items) {\n const initialItems = items.filter((item) => props.initialIds!.includes(item.id));\n setSelectedItems(initialItems);\n }\n }, [props.initialIds, items]);\n\n function getMultiSelectImpl() {\n let getInternalMultiSelect: () => new (props: IMultiSelectProps) => MultiSelect;\n let getData: () => GQL.AllPerformersForFilterQuery | GQL.AllStudiosForFilterQuery | GQL.AllTagsForFilterQuery | undefined;\n let translateData: () => void;\n let createNewObject: ((query : string) => void) | undefined = undefined; \n\n switch (props.type) {\n case \"performers\": {\n getInternalMultiSelect = () => { return InternalPerformerMultiSelect; };\n getData = () => { const { data } = StashService.useAllPerformersForFilter(); return data; }\n translateData = () => { let perfData = data as GQL.AllPerformersForFilterQuery; setItems(!!perfData && !!perfData.allPerformers ? perfData.allPerformers : []); };\n break;\n }\n case \"studios\": {\n getInternalMultiSelect = () => { return InternalStudioMultiSelect; };\n getData = () => { const { data } = StashService.useAllStudiosForFilter(); return data; }\n translateData = () => { let studioData = data as GQL.AllStudiosForFilterQuery; setItems(!!studioData && !!studioData.allStudios ? studioData.allStudios : []); };\n break;\n }\n case \"tags\": {\n getInternalMultiSelect = () => { return InternalTagMultiSelect; };\n getData = () => { const { data } = StashService.useAllTagsForFilter(); return data; }\n translateData = () => { let tagData = data as GQL.AllTagsForFilterQuery; setItems(!!tagData && !!tagData.allTags ? tagData.allTags : []); };\n createNewObject = createNewTag;\n break;\n }\n default: {\n throw Error(\"Unhandled case in FilterMultiSelect\");\n }\n }\n\n return {\n getInternalMultiSelect: getInternalMultiSelect,\n getData: getData,\n translateData: translateData,\n createNewObject: createNewObject\n };\n }\n\n const renderItem: ItemRenderer = (item, itemProps) => {\n if (!itemProps.modifiers.matchesPredicate) { return null; }\n return (\n \n );\n };\n\n const filter: ItemPredicate = (query, item) => {\n if (selectedItems.includes(item)) { return false; }\n return item.name!.toLowerCase().indexOf(query.toLowerCase()) >= 0;\n };\n\n function addSelectedItem(item: ValidTypes) {\n selectedItems.push(item);\n setSelectedItems(selectedItems);\n props.onUpdate(selectedItems);\n }\n\n function onItemSelect(item: ValidTypes) {\n if (item.id === undefined) {\n // create the new item, if applicable\n onCreateNewObject(item);\n } else {\n addSelectedItem(item);\n }\n }\n\n function onItemRemove(value: string, index: number) {\n const newSelectedItems = selectedItems.filter((_, i) => i !== index);\n setSelectedItems(newSelectedItems);\n props.onUpdate(newSelectedItems);\n }\n\n return (\n tag.name}\n tagInputProps={{ onRemove: onItemRemove }}\n onItemSelect={onItemSelect}\n resetOnSelect={true}\n popoverProps={{position: \"bottom\"}}\n createNewItemFromQuery={MultiSelectImpl.createNewObject}\n createNewItemRenderer={createNewRenderer}\n {...props}\n />\n );\n};\n","/home/peroo/stash/ui/v2/src/components/select/FilterSelect.tsx",[],"/home/peroo/stash/ui/v2/src/components/select/MarkerTitleSuggest.tsx",[],"/home/peroo/stash/ui/v2/src/components/select/ScrapePerformerSuggest.tsx",[],"/home/peroo/stash/ui/v2/src/components/select/ValidGalleriesSelect.tsx",[],"/home/peroo/stash/ui/v2/src/core/StashService.ts",[],"/home/peroo/stash/ui/v2/src/core/generated-graphql.tsx",[],"/home/peroo/stash/ui/v2/src/hooks/ListHook.tsx",["460","461","462","463"],"import { Spinner } from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport queryString from \"query-string\";\nimport React, { useEffect, useState } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { ListFilter } from \"../components/list/ListFilter\";\nimport { Pagination } from \"../components/list/Pagination\";\nimport { StashService } from \"../core/StashService\";\nimport { IBaseProps } from \"../models\";\nimport { Criterion } from \"../models/list-filter/criteria/criterion\";\nimport { ListFilterModel } from \"../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../models/list-filter/types\";\n\nexport interface IListHookData {\n filter: ListFilterModel;\n template: JSX.Element;\n options: IListHookOptions;\n onSelectChange: (id: string, selected : boolean, shiftKey: boolean) => void;\n}\n\nexport interface IListHookOptions {\n filterMode: FilterMode;\n props: IBaseProps;\n zoomable?: boolean\n renderContent: (result: QueryHookResult, filter: ListFilterModel, selectedIds: Set, zoomIndex: number) => JSX.Element | undefined;\n renderSelectedOptions?: (result: QueryHookResult, selectedIds: Set) => JSX.Element | undefined;\n}\n\nexport class ListHook {\n public static useList(options: IListHookOptions): IListHookData {\n const [filter, setFilter] = useState(new ListFilterModel(options.filterMode));\n const [selectedIds, setSelectedIds] = useState>(new Set());\n const [lastClickedId, setLastClickedId] = useState(undefined);\n const [totalCount, setTotalCount] = useState(0);\n const [zoomIndex, setZoomIndex] = useState(1);\n\n // Update the filter when the query parameters change\n useEffect(() => {\n const queryParams = queryString.parse(options.props.location.search);\n const newFilter = _.cloneDeep(filter);\n newFilter.configureFromQueryParameters(queryParams);\n setFilter(newFilter);\n\n // TODO: Need this side effect to update the query params properly\n filter.configureFromQueryParameters(queryParams);\n }, [options.props.location.search]);\n\n let result: QueryHookResult;\n\n let getData: (filter : ListFilterModel) => QueryHookResult;\n let getItems: () => any[];\n let getCount: () => number;\n\n switch (options.filterMode) {\n case FilterMode.Scenes: {\n getData = (filter : ListFilterModel) => { return StashService.useFindScenes(filter); }\n getItems = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.scenes : []; }\n getCount = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.count : 0; }\n break;\n }\n case FilterMode.SceneMarkers: {\n getData = (filter : ListFilterModel) => { return StashService.useFindSceneMarkers(filter); }\n getItems = () => { return !!result.data && !!result.data.findSceneMarkers ? result.data.findSceneMarkers.scene_markers : []; }\n getCount = () => { return !!result.data && !!result.data.findSceneMarkers ? result.data.findSceneMarkers.count : 0; }\n break;\n }\n case FilterMode.Galleries: {\n getData = (filter : ListFilterModel) => { return StashService.useFindGalleries(filter); }\n getItems = () => { return !!result.data && !!result.data.findGalleries ? result.data.findGalleries.galleries : []; }\n getCount = () => { return !!result.data && !!result.data.findGalleries ? result.data.findGalleries.count : 0; }\n break;\n }\n case FilterMode.Studios: {\n getData = (filter : ListFilterModel) => { return StashService.useFindStudios(filter); }\n getItems = () => { return !!result.data && !!result.data.findStudios ? result.data.findStudios.studios : []; }\n getCount = () => { return !!result.data && !!result.data.findStudios ? result.data.findStudios.count : 0; }\n break;\n }\n case FilterMode.Performers: {\n getData = (filter : ListFilterModel) => { return StashService.useFindPerformers(filter); }\n getItems = () => { return !!result.data && !!result.data.findPerformers ? result.data.findPerformers.performers : []; }\n getCount = () => { return !!result.data && !!result.data.findPerformers ? result.data.findPerformers.count : 0; }\n break;\n }\n default: {\n console.error(\"REMOVE DEFAULT IN LIST HOOK\");\n getData = (filter : ListFilterModel) => { return StashService.useFindScenes(filter); }\n getItems = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.scenes : []; }\n getCount = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.count : 0; }\n break;\n }\n }\n\n result = getData(filter);\n\n useEffect(() => {\n setTotalCount(getCount());\n\n // select none when data changes\n onSelectNone();\n setLastClickedId(undefined);\n }, [result.data])\n\n // Update the query parameters when the data changes\n useEffect(() => {\n const location = Object.assign({}, options.props.history.location);\n location.search = filter.makeQueryParameters();\n options.props.history.replace(location);\n }, [result.data, filter.displayMode]);\n\n // Update the total count\n useEffect(() => {\n const newFilter = _.cloneDeep(filter);\n newFilter.totalCount = totalCount;\n setFilter(newFilter);\n }, [totalCount]);\n\n function onChangePageSize(pageSize: number) {\n const newFilter = _.cloneDeep(filter);\n newFilter.itemsPerPage = pageSize;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeQuery(query: string) {\n const newFilter = _.cloneDeep(filter);\n newFilter.searchTerm = query;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeSortDirection(sortDirection: \"asc\" | \"desc\") {\n const newFilter = _.cloneDeep(filter);\n newFilter.sortDirection = sortDirection;\n setFilter(newFilter);\n }\n\n function onChangeSortBy(sortBy: string) {\n const newFilter = _.cloneDeep(filter);\n newFilter.sortBy = sortBy;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeDisplayMode(displayMode: DisplayMode) {\n const newFilter = _.cloneDeep(filter);\n newFilter.displayMode = displayMode;\n setFilter(newFilter);\n }\n\n function onAddCriterion(criterion: Criterion, oldId?: string) {\n const newFilter = _.cloneDeep(filter);\n\n // Find if we are editing an existing criteria, then modify that. Or create a new one.\n const existingIndex = newFilter.criteria.findIndex((c) => {\n // If we modified an existing criterion, then look for the old id.\n const id = !!oldId ? oldId : criterion.getId();\n return c.getId() === id;\n });\n if (existingIndex === -1) {\n newFilter.criteria.push(criterion);\n } else {\n newFilter.criteria[existingIndex] = criterion;\n }\n\n // Remove duplicate modifiers\n newFilter.criteria = newFilter.criteria.filter((obj, pos, arr) => {\n return arr.map((mapObj: any) => mapObj.getId()).indexOf(obj.getId()) === pos;\n });\n\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onRemoveCriterion(removedCriterion: Criterion) {\n const newFilter = _.cloneDeep(filter);\n newFilter.criteria = newFilter.criteria.filter((criterion) => criterion.getId() !== removedCriterion.getId());\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangePage(page: number) {\n const newFilter = _.cloneDeep(filter);\n newFilter.currentPage = page;\n setFilter(newFilter);\n }\n\n function onSelectChange(id: string, selected : boolean, shiftKey: boolean) {\n if (shiftKey) {\n multiSelect(id, selected);\n } else {\n singleSelect(id, selected);\n }\n }\n\n function singleSelect(id: string, selected: boolean) {\n setLastClickedId(id);\n \n const newSelectedIds = _.clone(selectedIds);\n if (selected) {\n newSelectedIds.add(id);\n } else {\n newSelectedIds.delete(id);\n }\n\n setSelectedIds(newSelectedIds);\n }\n\n function multiSelect(id: string, selected : boolean) {\n let startIndex = 0;\n let thisIndex = -1;\n \n if (!!lastClickedId) {\n startIndex = getItems().findIndex((item) => {\n return item.id === lastClickedId;\n });\n }\n\n thisIndex = getItems().findIndex((item) => {\n return item.id === id;\n });\n\n selectRange(startIndex, thisIndex);\n }\n \n function selectRange(startIndex : number, endIndex : number) {\n if (startIndex > endIndex) {\n let tmp = startIndex;\n startIndex = endIndex;\n endIndex = tmp;\n }\n \n const subset = getItems().slice(startIndex, endIndex + 1);\n const newSelectedIds : Set = new Set();\n\n subset.forEach((item) => {\n newSelectedIds.add(item.id);\n });\n\n setSelectedIds(newSelectedIds);\n }\n\n function onSelectAll() {\n const newSelectedIds : Set = new Set();\n getItems().forEach((item) => {\n newSelectedIds.add(item.id);\n });\n\n setSelectedIds(newSelectedIds);\n setLastClickedId(undefined);\n }\n\n function onSelectNone() {\n const newSelectedIds : Set = new Set();\n setSelectedIds(newSelectedIds);\n setLastClickedId(undefined);\n }\n\n function onChangeZoom(newZoomIndex : number) {\n setZoomIndex(newZoomIndex);\n }\n\n const template = (\n
\n \n {options.renderSelectedOptions && selectedIds.size > 0 ? options.renderSelectedOptions(result, selectedIds) : undefined}\n {result.loading ? : undefined}\n {result.error ?

{result.error.message}

: undefined}\n {options.renderContent(result, filter, selectedIds, zoomIndex)}\n \n
\n );\n\n return { filter, template, options, onSelectChange };\n }\n}\n","/home/peroo/stash/ui/v2/src/hooks/LocalForage.ts",[],"/home/peroo/stash/ui/v2/src/hooks/VideoHover.ts",[],"/home/peroo/stash/ui/v2/src/index.tsx",[],"/home/peroo/stash/ui/v2/src/models/base-props.ts",[],"/home/peroo/stash/ui/v2/src/models/index.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/criterion.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/favorite.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/has-markers.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/is-missing.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/none.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/performers.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/rating.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/resolution.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/studios.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/tags.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/utils.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/filter.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/types.ts",[],"/home/peroo/stash/ui/v2/src/models/react-images.d.ts",[],"/home/peroo/stash/ui/v2/src/models/react-jw-player.d.ts",[],"/home/peroo/stash/ui/v2/src/models/types.ts",[],"/home/peroo/stash/ui/v2/src/react-app-env.d.ts",[],"/home/peroo/stash/ui/v2/src/serviceWorker.ts",[],"/home/peroo/stash/ui/v2/src/utils/color.ts",[],"/home/peroo/stash/ui/v2/src/utils/errors.ts",[],"/home/peroo/stash/ui/v2/src/utils/navigation.ts",[],"/home/peroo/stash/ui/v2/src/utils/table.tsx",[],"/home/peroo/stash/ui/v2/src/utils/text.ts",[],"/home/peroo/stash/ui/v2/src/utils/toasts.ts",[],"/home/peroo/stash/ui/v2/src/utils/zoom.ts",[],{"ruleId":"464","severity":1,"message":"465","line":1,"column":36,"nodeType":"466","endLine":1,"endColumn":45},{"ruleId":"464","severity":1,"message":"467","line":4,"column":8,"nodeType":"466","endLine":4,"endColumn":9},{"ruleId":"468","severity":1,"message":"469","line":23,"column":6,"nodeType":"470","endLine":23,"endColumn":12,"fix":"471"},{"ruleId":"464","severity":1,"message":"467","line":2,"column":8,"nodeType":"466","endLine":2,"endColumn":9},{"ruleId":"472","severity":1,"message":"473","line":39,"column":49,"nodeType":"474","endLine":39,"endColumn":100},{"ruleId":"464","severity":1,"message":"467","line":1,"column":8,"nodeType":"466","endLine":1,"endColumn":9},{"ruleId":"468","severity":1,"message":"475","line":26,"column":6,"nodeType":"470","endLine":26,"endColumn":13,"fix":"476"},{"ruleId":"464","severity":1,"message":"477","line":2,"column":3,"nodeType":"466","endLine":2,"endColumn":5},{"ruleId":"464","severity":1,"message":"478","line":4,"column":3,"nodeType":"466","endLine":4,"endColumn":5},{"ruleId":"464","severity":1,"message":"479","line":7,"column":3,"nodeType":"466","endLine":7,"endColumn":6},{"ruleId":"464","severity":1,"message":"480","line":10,"column":13,"nodeType":"466","endLine":10,"endColumn":16},{"ruleId":"464","severity":1,"message":"481","line":11,"column":10,"nodeType":"466","endLine":11,"endColumn":19},{"ruleId":"464","severity":1,"message":"477","line":5,"column":3,"nodeType":"466","endLine":5,"endColumn":5},{"ruleId":"464","severity":1,"message":"478","line":7,"column":3,"nodeType":"466","endLine":7,"endColumn":5},{"ruleId":"464","severity":1,"message":"479","line":10,"column":3,"nodeType":"466","endLine":10,"endColumn":6},{"ruleId":"468","severity":1,"message":"482","line":69,"column":6,"nodeType":"470","endLine":69,"endColumn":12,"fix":"483"},{"ruleId":"464","severity":1,"message":"467","line":11,"column":8,"nodeType":"466","endLine":11,"endColumn":9},{"ruleId":"468","severity":1,"message":"484","line":51,"column":6,"nodeType":"470","endLine":51,"endColumn":19,"fix":"485"},{"ruleId":"468","severity":1,"message":"486","line":92,"column":6,"nodeType":"470","endLine":92,"endColumn":12,"fix":"487"},{"ruleId":"468","severity":1,"message":"488","line":101,"column":6,"nodeType":"470","endLine":101,"endColumn":20,"fix":"489"},{"ruleId":"468","severity":1,"message":"490","line":117,"column":6,"nodeType":"470","endLine":117,"endColumn":16,"fix":"491"},{"ruleId":"492","severity":1,"message":"493","line":158,"column":18,"nodeType":"494","messageId":"495","endLine":158,"endColumn":20},{"ruleId":"464","severity":1,"message":"496","line":8,"column":3,"nodeType":"466","endLine":8,"endColumn":15},{"ruleId":"464","severity":1,"message":"467","line":11,"column":8,"nodeType":"466","endLine":11,"endColumn":9},{"ruleId":"464","severity":1,"message":"497","line":2,"column":43,"nodeType":"466","endLine":2,"endColumn":59},{"ruleId":"492","severity":1,"message":"493","line":49,"column":21,"nodeType":"494","messageId":"495","endLine":49,"endColumn":23},{"ruleId":"464","severity":1,"message":"467","line":9,"column":8,"nodeType":"466","endLine":9,"endColumn":9},{"ruleId":"468","severity":1,"message":"482","line":32,"column":6,"nodeType":"470","endLine":32,"endColumn":12,"fix":"498"},{"ruleId":"464","severity":1,"message":"467","line":5,"column":8,"nodeType":"466","endLine":5,"endColumn":9},{"ruleId":"464","severity":1,"message":"477","line":1,"column":10,"nodeType":"466","endLine":1,"endColumn":12},{"ruleId":"464","severity":1,"message":"499","line":2,"column":3,"nodeType":"466","endLine":2,"endColumn":9},{"ruleId":"464","severity":1,"message":"500","line":3,"column":3,"nodeType":"466","endLine":3,"endColumn":10},{"ruleId":"464","severity":1,"message":"501","line":4,"column":3,"nodeType":"466","endLine":4,"endColumn":9},{"ruleId":"464","severity":1,"message":"502","line":6,"column":3,"nodeType":"466","endLine":6,"endColumn":13},{"ruleId":"464","severity":1,"message":"467","line":10,"column":8,"nodeType":"466","endLine":10,"endColumn":9},{"ruleId":"468","severity":1,"message":"469","line":54,"column":6,"nodeType":"470","endLine":54,"endColumn":12,"fix":"503"},{"ruleId":"468","severity":1,"message":"504","line":63,"column":6,"nodeType":"470","endLine":63,"endColumn":14,"fix":"505"},{"ruleId":"492","severity":1,"message":"493","line":66,"column":38,"nodeType":"494","messageId":"495","endLine":66,"endColumn":40},{"ruleId":"464","severity":1,"message":"506","line":136,"column":13,"nodeType":"466","endLine":136,"endColumn":19},{"ruleId":"472","severity":1,"message":"473","line":162,"column":11,"nodeType":"474","endLine":162,"endColumn":56},{"ruleId":"464","severity":1,"message":"467","line":1,"column":8,"nodeType":"466","endLine":1,"endColumn":9},{"ruleId":"464","severity":1,"message":"507","line":1,"column":42,"nodeType":"466","endLine":1,"endColumn":54},{"ruleId":"464","severity":1,"message":"508","line":1,"column":67,"nodeType":"466","endLine":1,"endColumn":76},{"ruleId":"464","severity":1,"message":"479","line":1,"column":99,"nodeType":"466","endLine":1,"endColumn":102},{"ruleId":"464","severity":1,"message":"467","line":2,"column":8,"nodeType":"466","endLine":2,"endColumn":9},{"ruleId":"464","severity":1,"message":"509","line":4,"column":10,"nodeType":"466","endLine":4,"endColumn":25},{"ruleId":"464","severity":1,"message":"510","line":6,"column":10,"nodeType":"466","endLine":6,"endColumn":28},{"ruleId":"464","severity":1,"message":"511","line":6,"column":30,"nodeType":"466","endLine":6,"endColumn":52},{"ruleId":"464","severity":1,"message":"512","line":9,"column":10,"nodeType":"466","endLine":9,"endColumn":18},{"ruleId":"464","severity":1,"message":"513","line":11,"column":10,"nodeType":"466","endLine":11,"endColumn":25},{"ruleId":"464","severity":1,"message":"514","line":12,"column":10,"nodeType":"466","endLine":12,"endColumn":21},{"ruleId":"464","severity":1,"message":"515","line":12,"column":23,"nodeType":"466","endLine":12,"endColumn":33},{"ruleId":"468","severity":1,"message":"469","line":39,"column":6,"nodeType":"470","endLine":39,"endColumn":12,"fix":"516"},{"ruleId":"472","severity":1,"message":"473","line":119,"column":11,"nodeType":"474","endLine":119,"endColumn":88},{"ruleId":"464","severity":1,"message":"467","line":1,"column":8,"nodeType":"466","endLine":1,"endColumn":9},{"ruleId":"464","severity":1,"message":"496","line":2,"column":3,"nodeType":"466","endLine":2,"endColumn":15},{"ruleId":"464","severity":1,"message":"517","line":5,"column":3,"nodeType":"466","endLine":5,"endColumn":15},{"ruleId":"464","severity":1,"message":"518","line":16,"column":63,"nodeType":"466","endLine":16,"endColumn":69},{"ruleId":"468","severity":1,"message":"519","line":45,"column":22,"nodeType":"520","endLine":47,"endColumn":12},{"ruleId":"468","severity":1,"message":"469","line":89,"column":6,"nodeType":"470","endLine":89,"endColumn":12,"fix":"521"},{"ruleId":"468","severity":1,"message":"504","line":98,"column":6,"nodeType":"470","endLine":98,"endColumn":17,"fix":"522"},{"ruleId":"468","severity":1,"message":"469","line":32,"column":6,"nodeType":"470","endLine":32,"endColumn":12,"fix":"523"},{"ruleId":"468","severity":1,"message":"524","line":34,"column":3,"nodeType":"466","endLine":34,"endColumn":12,"fix":"525"},{"ruleId":"468","severity":1,"message":"526","line":359,"column":6,"nodeType":"470","endLine":359,"endColumn":19,"fix":"527"},{"ruleId":"468","severity":1,"message":"528","line":464,"column":6,"nodeType":"470","endLine":464,"endColumn":20,"fix":"529"},{"ruleId":"464","severity":1,"message":"530","line":2,"column":51,"nodeType":"466","endLine":2,"endColumn":60},{"ruleId":"464","severity":1,"message":"531","line":58,"column":10,"nodeType":"466","endLine":58,"endColumn":23},{"ruleId":"468","severity":1,"message":"532","line":67,"column":6,"nodeType":"470","endLine":67,"endColumn":19,"fix":"533"},{"ruleId":"468","severity":1,"message":"534","line":77,"column":6,"nodeType":"470","endLine":77,"endColumn":22,"fix":"535"},{"ruleId":"468","severity":1,"message":"536","line":91,"column":17,"nodeType":"466","endLine":91,"endColumn":24},{"ruleId":"468","severity":1,"message":"536","line":100,"column":17,"nodeType":"466","endLine":100,"endColumn":24},{"ruleId":"468","severity":1,"message":"537","line":40,"column":6,"nodeType":"470","endLine":40,"endColumn":12,"fix":"538"},{"ruleId":"468","severity":1,"message":"539","line":46,"column":8,"nodeType":"470","endLine":46,"endColumn":39,"fix":"540"},{"ruleId":"468","severity":1,"message":"541","line":102,"column":8,"nodeType":"470","endLine":102,"endColumn":21,"fix":"542"},{"ruleId":"468","severity":1,"message":"543","line":109,"column":8,"nodeType":"470","endLine":109,"endColumn":41,"fix":"544"},{"ruleId":"468","severity":1,"message":"539","line":116,"column":8,"nodeType":"470","endLine":116,"endColumn":20,"fix":"545"},"@typescript-eslint/no-unused-vars","'useEffect' is defined but never used.","Identifier","'_' is defined but never used.","react-hooks/exhaustive-deps","React Hook useEffect has missing dependencies: 'error' and 'loading'. Either include them or remove the dependency array.","ArrayExpression",{"range":"546","text":"547"},"jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","JSXOpeningElement","React Hook useEffect has a missing dependency: 'props.history'. Either include it or remove the dependency array.",{"range":"548","text":"549"},"'H1' is defined but never used.","'H6' is defined but never used.","'Tag' is defined but never used.","'GQL' is defined but never used.","'TextUtils' is defined but never used.","React Hook useEffect has a missing dependency: 'error'. Either include it or remove the dependency array.",{"range":"550","text":"551"},"React Hook useEffect has a missing dependency: 'config.error'. Either include it or remove the dependency array.",{"range":"552","text":"553"},"React Hook useEffect has missing dependencies: 'filterByLogLevel', 'prependLogEntries', and 'updateFilteredEntries'. Either include them or remove the dependency array.",{"range":"554","text":"555"},"React Hook useEffect has missing dependencies: 'appendLogEntries' and 'updateFilteredEntries'. Either include them or remove the dependency array.",{"range":"556","text":"557"},"React Hook useEffect has a missing dependency: 'updateFilteredEntries'. Either include it or remove the dependency array.",{"range":"558","text":"559"},"eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","'AnchorButton' is defined but never used.","'IInputGroupProps' is defined but never used.",{"range":"560","text":"551"},"'Button' is defined but never used.","'Classes' is defined but never used.","'Dialog' is defined but never used.","'HTMLSelect' is defined but never used.",{"range":"561","text":"547"},"React Hook useEffect has a missing dependency: 'isNew'. Either include it or remove the dependency array.",{"range":"562","text":"563"},"'result' is assigned a value but never used.","'EditableText' is defined but never used.","'HTMLTable' is defined but never used.","'QueryHookResult' is defined but never used.","'FindGalleriesQuery' is defined but never used.","'FindGalleriesVariables' is defined but never used.","'ListHook' is defined but never used.","'ListFilterModel' is defined but never used.","'DisplayMode' is defined but never used.","'FilterMode' is defined but never used.",{"range":"564","text":"547"},"'ControlGroup' is defined but never used.","'useRef' is defined but never used.","Assignments to the 'searchCallback' variable from inside React Hook useEffect will be lost after each render. To preserve the value over time, store it in a useRef Hook and keep the mutable value in the '.current' property. Otherwise, you can move this variable directly inside useEffect.","CallExpression",{"range":"565","text":"547"},{"range":"566","text":"567"},{"range":"568","text":"547"},"React Hook useEffect contains a call to 'setTimestamp'. Without a list of dependencies, this can lead to an infinite chain of updates. To fix this, pass [props.location.search, timestamp] as a second argument to the useEffect Hook.",{"range":"569","text":"570"},"React Hook useEffect has a missing dependency: 'onFind'. Either include it or remove the dependency array.",{"range":"571","text":"572"},"React Hook useEffect has missing dependencies: 'allDateSet', 'allPerformerSet', 'allStudioSet', 'allTagSet', and 'allTitleSet'. Either include them or remove the dependency array.",{"range":"573","text":"574"},"'RefObject' is defined but never used.","'delayedRender' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'fetchSpriteInfo'. Either include it or remove the dependency array.",{"range":"575","text":"576"},"React Hook useEffect has missing dependencies: 'props.scene.file.duration' and 'setPosition'. Either include them or remove the dependency array.",{"range":"577","text":"578"},"The ref value 'contentEl.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'contentEl.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook React.useEffect has a missing dependency: 'MultiSelectImpl'. Either include it or remove the dependency array.",{"range":"579","text":"580"},"React Hook useEffect has a missing dependency: 'filter'. Either include it or remove the dependency array.",{"range":"581","text":"582"},"React Hook useEffect has a missing dependency: 'getCount'. Either include it or remove the dependency array.",{"range":"583","text":"584"},"React Hook useEffect has missing dependencies: 'filter' and 'options.props.history'. Either include them or remove the dependency array.",{"range":"585","text":"586"},{"range":"587","text":"588"},[823,829],"[data, error, loading]",[983,990],"[props.history, tabId]",[2555,2561],"[data, error]",[1955,1968],"[config.data, config.error]",[2796,2802],"[data, filterByLogLevel, prependLogEntries, updateFilteredEntries]",[3020,3034],"[appendLogEntries, existingData, updateFilteredEntries]",[3422,3432],"[logLevel, updateFilteredEntries]",[1097,1103],[1971,1977],[2157,2165],"[isNew, studio]",[1962,1968],[4264,4270],[4459,4470],"[isNew, performer]",[1311,1317],[1589,1589],", [props.location.search, timestamp]",[9936,9949],"[onFind, parserInput]",[12915,12929],"[allDateSet, allPerformerSet, allStudioSet, allTagSet, allTitleSet, parserResult]",[2337,2350],"[fetchSpriteInfo, props.scene]",[2706,2722],"[props.position, props.scene.file.duration, setPosition]",[1668,1674],"[MultiSelectImpl, data]",[2105,2136],"[filter, options.props.location.search]",[4971,4984],"[getCount, result.data]",[5248,5281],"[result.data, filter.displayMode, options.props.history, filter]",[5458,5470],"[filter, totalCount]"] \ No newline at end of file diff --git a/ui/v2.5/.eslintrc.json b/ui/v2.5/.eslintrc.json new file mode 100644 index 00000000000..1c1fff5fd8d --- /dev/null +++ b/ui/v2.5/.eslintrc.json @@ -0,0 +1,8 @@ +{ + "extends": [ + "react-app" + ], + "rules": { + "jsx-a11y/anchor-is-valid": "off" + } +} diff --git a/ui/v2.5/.gitignore b/ui/v2.5/.gitignore new file mode 100755 index 00000000000..4d29575de80 --- /dev/null +++ b/ui/v2.5/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/ui/v2.5/.vscode/launch.json b/ui/v2.5/.vscode/launch.json new file mode 100644 index 00000000000..a0b21cbef42 --- /dev/null +++ b/ui/v2.5/.vscode/launch.json @@ -0,0 +1,18 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "chrome", + "request": "launch", + "name": "Chrome", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}/src", + "sourceMapPathOverrides": { + "webpack:///src/*": "${webRoot}/*" + } + } + ] +} \ No newline at end of file diff --git a/ui/v2.5/.vscode/settings.json b/ui/v2.5/.vscode/settings.json new file mode 100644 index 00000000000..ba34e28f041 --- /dev/null +++ b/ui/v2.5/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "editor.tabSize": 2, + "editor.renderWhitespace": "boundary", + "editor.wordWrap": "bounded", + "javascript.preferences.importModuleSpecifier": "relative", + "typescript.preferences.importModuleSpecifier": "relative", + "editor.wordWrapColumn": 120, + "editor.rulers": [120] +} \ No newline at end of file diff --git a/ui/v2.5/README.md b/ui/v2.5/README.md new file mode 100755 index 00000000000..60f58b4439e --- /dev/null +++ b/ui/v2.5/README.md @@ -0,0 +1,47 @@ +* Install gulp `yarn global add gulp` + + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.
+Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.
+You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.
+See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.
+It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/ui/v2.5/codegen.yml b/ui/v2.5/codegen.yml new file mode 100644 index 00000000000..aa2da743f2d --- /dev/null +++ b/ui/v2.5/codegen.yml @@ -0,0 +1,18 @@ +overwrite: true +schema: "../../graphql/schema/**/*.graphql" +documents: "../../graphql/documents/**/*.graphql" +generates: + src/core/generated-graphql.tsx: + config: + noNamespaces: true + optionalType: "undefined" + noHOC: true + noComponents: true + withHooks: true + plugins: + - add: "/* tslint:disable */" + - add: "/* eslint-disable */" + - time + - "typescript-common" + - "typescript-client" + - "typescript-react-apollo" diff --git a/ui/v2.5/package.json b/ui/v2.5/package.json new file mode 100644 index 00000000000..62bbc623a31 --- /dev/null +++ b/ui/v2.5/package.json @@ -0,0 +1,73 @@ +{ + "name": "stash", + "version": "0.1.0", + "private": true, + "dependencies": { + "@blueprintjs/core": "3.22.1", + "@blueprintjs/select": "3.11.2", + "@fortawesome/fontawesome-svg-core": "^1.2.26", + "@fortawesome/free-solid-svg-icons": "^5.12.0", + "@fortawesome/react-fontawesome": "^0.1.8", + "apollo-boost": "0.4.0", + "apollo-link-ws": "^1.0.19", + "axios": "0.18.1", + "bootstrap": "^4.4.1", + "formik": "1.5.7", + "graphql": "14.3.1", + "localforage": "1.7.3", + "lodash": "4.17.13", + "node-sass": "4.12.0", + "query-string": "6.5.0", + "react": "16.12.0", + "react-apollo": "2.5.6", + "react-apollo-hooks": "0.4.5", + "react-bootstrap": "^1.0.0-beta.16", + "react-dom": "16.12.0", + "react-hotkeys": "^2.0.0", + "react-images": "0.5.19", + "react-jw-player": "1.19.0", + "react-photo-gallery": "7.0.2", + "react-router-bootstrap": "^0.25.0", + "react-router-dom": "^5.1.2", + "react-scripts": "3.3.0", + "subscriptions-transport-ws": "^0.9.16", + "video.js": "^7.6.0" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject", + "lint": "eslint --cache src/**/*.{ts,tsx}", + "lint:fix": "eslint --fix src/**/*.{ts,tsx}", + "gqlgen": "gql-gen --config codegen.yml" + }, + "eslintConfig": { + "extends": "react-app" + }, + "browserslist": [ + ">0.2%", + "not dead", + "not ie <= 11", + "not op_mini all" + ], + "devDependencies": { + "@types/jest": "24.0.13", + "@types/lodash": "4.14.132", + "@types/node": "11.13.0", + "@types/query-string": "6.3.0", + "@types/react": "16.9.15", + "@types/react-dom": "16.9.4", + "@types/react-router-bootstrap": "^0.24.5", + "@types/react-router-dom": "5.1.3", + "@types/video.js": "^7.2.11", + "eslint": "^6.7.2", + "graphql-code-generator": "0.18.2", + "graphql-codegen-add": "0.18.2", + "graphql-codegen-time": "0.18.2", + "graphql-codegen-typescript-client": "0.18.2", + "graphql-codegen-typescript-common": "0.18.2", + "graphql-codegen-typescript-react-apollo": "0.18.2", + "typescript": "3.4.5" + } +} diff --git a/ui/v2.5/public/favicon.ico b/ui/v2.5/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6ff0465ca7c341d7b47feea0afeefe1ef90dcc08 GIT binary patch literal 3134 zcmY*bc{~)_`yP8}Y=yE8l4Uew$u`C|mN9l?8`<}Lj9HLfMaZs*YtK+5QIU*&$-X2; z3E2|W;A*+q`qI6>`}=;+=X1_^&+|U-^PKnmby6(Nkw7*9HUIzsL>cL$k9W|?JjHyx z5+WnN9&dC6G!g-LG$yohlJPV`n*jik7Xg6y8vwxGF%h0> zVFf=4nUhHeC@ea6Eau>EgCSzfOktiO!4P+^5D#xiL@@4{4FJF+V8>yw zH_;sw5gddiz#=roe=}gm@d*qS2mPiH12x4lW|knm5WF`?8FCpSFRsM~0)gOoFCQ3M z-|(OE)}#p(h!r0z@AAul8{% z`~-zr;QhUiolo?&6yU#^|AYPG1BafN|JP;y?({c$+^QBE9QyCGX|b7hOE~}lY-p6e zt__Cuj-7vy(=_kVf?~+`>F;UO9X^c=;W<`TF*iN4?#%n;r*!>RYtUdz18ZK}fNU=9 z8pD8TJL0`W(fjdbj+WBo1fDC>CI}4nOK31Duj``0s;adaI4B?}(7&;_Ruif>x!6 zrKDIvhQsWyG@eeq@n_vlRAAU8KwM{bWBE|rqk*tUtqGAG+J>Jr@FDwtXtW<&+(z-N z$u2afiTL_#>ATjpH|<$t6(K~nYUp?d$EYvoWNZFF?Fu8>ErIImorke+^O%_C7n;w` z&W`e<HSY^pB|ZJq8*{dl;A+FE=f^P*NjY8T7>Vb2fv z7JTbk@Y>Or*jC~%`;`ri!K7ec6cx+8vLwK4{EqhO&Dt6^Uv8nJl^pFEXu#dAB_*VS zB5URm=g$JIpaO5`X)p9(Y{7dkX`?x*qlZ2RufNuVL7GswsNl(%A)aM6= zS}ct)W81qo@iI%QFZuRqBWYAg(Wvg2hf$>|7W;|yqLIwSQz1Hp+XzKv>l}UO3wP6M z26u-YPWSWS0^~$ohXO)gC(UOX@rul?1bZi}cSP%bYbq9$E&k@-vH5gxwL_-ntg^17 z94jR~=Txc8`wvt8VmfC!O!~xyX_P;&KO7DU#-4GhuVWD_UpwHQ zc?w6Xi~aJHbS6bA$zwF@bLOoxGNkf4#T%oOxEZpMp^H+Gkn$6~k9-CysCcuyvh~Xp z5tH}62%%>yN!wN2DkACB!lt_BQ&QK&@Rt1rW^?j(Z`*c`Q3^sir3<1T^6hQhKjV=%wyHHInU$uv333Hs#?p#|Zh-h?v@cU{IhCwUB; z`ZJ5!^Ly8jKUnKHWB6GR27Z>iI+s(mL)wM;Bazwp!MGvupk5&)qT?b9RYU8grIVx` zZ>8sh=x_b##dPit6A8`>gBQEV1@|-7aX5HVNdoFM%lzzuQ%dVW>^sde@!GZRn-yFt z!ZclbM+pu)I|;F2wdk+G#3Hq%xFTUjLth2I033G|r4G_p1+65!B8a-Eb=+$@$}ZPO z_|`a7G3v!-HM&%2Dn&{0AjT&y(^{n620A%G2;HOSQoF3=%gjn5*RBrHam}K^ao$<%XpesZ$5S-FF_g z`LNj71}d99`T1ENq3Uf#k>Ek-x#%3;jqkg{bVv?cZDbY^GIyJWmMIG*9SvE*rw#!n zi*16b0U*iLS=9)UN$O&Ju!DYdF6Y`LNX1J1$-&3b*rk#>lme|5ZAvdWJ zbmrmA55o^lEvKDB9&nn}RRMDxyK${7+3LcCK6)*T<<8N|_3dZh1sGT1S}))UQHI(G zR3&S*@lbrU$UIAFf7-5crDI|FICQDaNx&EBQ$V-Ww3pmOmX$t?al2^I)jneGAZh1- zYH9S--mRN+6p%p?J#=9mPfx#9d&4BDsso(qqrI6h~gMB}*;PZl(84)yV`H+HuH1 zmh;A5-8;Tw5VaEEK;0ke6q}?<{sye4SCH|;8 zr74&5ysY}A+6|RQu_*!CJh<`^XSx_?7T%j28ZC1gir0Fe9f>o}FdJ6|j@fP<?LB^lkblbRWw%!d}zGBQB zvbv|ZYpK1PpJ+AzIDW8*^^e+fN#zLgLc=SKpA0wc71L$iaG zK}I13ZTX%EI6Jsu)A%5n?4{Z;%8 zN~#%m)r0)f7`bq7>IUKt?L^xrFg^)+XP&>r-Xp8Q=uCQz%*latB)(T?6L#;68(#`5 z137`^h-taVqy+dg`vvP}4?R77v2VM5^ttT*n^rjnO3IL+`dbsBE~mBCdx&_*M1%RM z+hx%_F1(QRK(9ImD&@WQ@{n`yl`IJF<(@&w@<+4C9}L{l)61LRxdc_x1%OlyDZ19K zk_p_mde8xjngfR4D%QnbnmK{rP5Up8UJF^PRX_IUEtsQ8AtYrP1nn6B`)Y@4wwf(} zF)&w+&aRCB8-l|Q_5{Rcm;#C$jmh_ih}9B-<{^AwS!Ndpcaks|-Hzj0V>E77pE`U0 zA-QDf{JyJ&GXhc{_q@Iq9L|*D-?$p-SQZCU=9CqV%AVt>*K62Qa~>qptN2Oj4{_3X zdo!jZOcQmk8h99#Solf?sGxs&(Ib<5EY^X$ypi7oHUv)-s-|r0{JGF(tOW3?x8}&3VcjKT;JJA>$+eu|G8n7kV+pqMCoZYx`Y+ zmy2ho{pjJo1>61){+uYLHKh)Fb*HOczw9?!Jcbh~B}DLs85uGM1iHI=diHMJy%+dh z%99{uxVVkT(EXXVCFTrHMEfGOTEAauomSB35)Bn|wbl!2@V=$IsMCXewUw{7I!9|A z5AZs80XooBZ60UFM0D&Olrnn_nm-l>BX<_1y>;@&g=GYP2`)TF1-Ypn(Vu+OQ3mGv Jj}UIx{sZ4llMw&_ literal 0 HcmV?d00001 diff --git a/ui/v2.5/public/index.html b/ui/v2.5/public/index.html new file mode 100755 index 00000000000..322bc1d1152 --- /dev/null +++ b/ui/v2.5/public/index.html @@ -0,0 +1,41 @@ + + + + + + + + + + + Stash + + + +
+ + + diff --git a/ui/v2.5/public/jwplayer/jwplayer.controls.js b/ui/v2.5/public/jwplayer/jwplayer.controls.js new file mode 100644 index 00000000000..c668aeec26a --- /dev/null +++ b/ui/v2.5/public/jwplayer/jwplayer.controls.js @@ -0,0 +1,95 @@ +/*! +JW Player version 8.11.5 +Copyright (c) 2019, JW Player, All Rights Reserved +https://github.com/jwplayer/jwplayer/blob/v8.11.5/README.md + +This source code and its use and distribution is subject to the terms and conditions of the applicable license agreement. +https://www.jwplayer.com/tos/ + +This product includes portions of other software. For the full text of licenses, see below: + +JW Player Third Party Software Notices and/or Additional Terms and Conditions + +************************************************************************************************** +The following software is used under Apache License 2.0 +************************************************************************************************** + +vtt.js v0.13.0 +Copyright (c) 2019 Mozilla (http://mozilla.org) +https://github.com/mozilla/vtt.js/blob/v0.13.0/LICENSE + +* * * + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and +limitations under the License. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under MIT license +************************************************************************************************** + +Underscore.js v1.6.0 +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +https://github.com/jashkenas/underscore/blob/1.6.0/LICENSE + +Backbone backbone.events.js v1.1.2 +Copyright (c) 2010-2014 Jeremy Ashkenas, DocumentCloud +https://github.com/jashkenas/backbone/blob/1.1.2/LICENSE + +Promise Polyfill v7.1.1 +Copyright (c) 2014 Taylor Hakes and Forbes Lindesay +https://github.com/taylorhakes/promise-polyfill/blob/v7.1.1/LICENSE + +can-autoplay.js v3.0.0 +Copyright (c) 2017 video-dev +https://github.com/video-dev/can-autoplay/blob/v3.0.0/LICENSE + +* * * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under W3C license +************************************************************************************************** + +Intersection Observer v0.5.0 +Copyright (c) 2016 Google Inc. (http://google.com) +https://github.com/w3c/IntersectionObserver/blob/v0.5.0/LICENSE.md + +* * * + +W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. + +This work is being provided by the copyright holders under the following license. + +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: + +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. + +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." + +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders. +*/ +(window.webpackJsonpjwplayer=window.webpackJsonpjwplayer||[]).push([[1],[,,,,,,,,,,,,,,,,,function(t,e,i){"use strict";i.r(e);var n,o=i(8),a=i(3),r=i(7),l=i(43),s=i(5),c=i(15),w=i(40);function u(t){return n||(n=new DOMParser),Object(s.r)(Object(s.s)(n.parseFromString(t,"image/svg+xml").documentElement))}var p=function(t,e,i,n){var o=document.createElement("div");o.className="jw-icon jw-icon-inline jw-button-color jw-reset "+t,o.setAttribute("role","button"),o.setAttribute("tabindex","0"),i&&o.setAttribute("aria-label",i),o.style.display="none";var a=new w.a(o).on("click tap enter",e||function(){});return n&&Array.prototype.forEach.call(n,(function(t){"string"==typeof t?o.appendChild(u(t)):o.appendChild(t)})),{ui:a,element:function(){return o},toggle:function(t){t?this.show():this.hide()},show:function(){o.style.display=""},hide:function(){o.style.display="none"}}},j=i(0),d=i(67),h=i.n(d),f=i(68),g=i.n(f),b=i(69),v=i.n(b),m=i(70),y=i.n(m),x=i(71),k=i.n(x),O=i(72),C=i.n(O),S=i(73),T=i.n(S),z=i(74),E=i.n(z),M=i(75),L=i.n(M),_=i(76),A=i.n(_),B=i(77),I=i.n(B),V=i(78),H=i.n(V),P=i(79),R=i.n(P),N=i(80),q=i.n(N),U=i(81),D=i.n(U),F=i(82),W=i.n(F),Z=i(83),K=i.n(Z),X=i(84),J=i.n(X),Q=i(85),Y=i.n(Q),G=i(86),$=i.n(G),tt=i(87),et=i.n(tt),it=i(88),nt=i.n(it),ot=i(89),at=i.n(ot),rt=null;function lt(t){var e=ut().querySelector(ct(t));if(e)return wt(e);throw new Error("Icon not found "+t)}function st(t){var e=ut().querySelectorAll(t.split(",").map(ct).join(","));if(!e.length)throw new Error("Icons not found "+t);return Array.prototype.map.call(e,(function(t){return wt(t)}))}function ct(t){return".jw-svg-icon-".concat(t)}function wt(t){return t.cloneNode(!0)}function ut(){return rt||(rt=u(""+h.a+g.a+v.a+y.a+k.a+C.a+T.a+E.a+L.a+A.a+I.a+H.a+R.a+q.a+D.a+W.a+K.a+J.a+Y.a+$.a+et.a+nt.a+at.a+"")),rt}var pt=i(10);function jt(t,e){for(var i=0;i10&&delete dt[e[0]];var i=u(t);dt[t]=i}return dt[t].cloneNode(!0)}(e):((r=document.createElement("div")).className="jw-icon jw-button-image jw-button-color jw-reset",e&&Object(pt.d)(r,{backgroundImage:"url(".concat(e,")")})),l.appendChild(r),new w.a(l).on("click tap enter",n,this),l.addEventListener("mousedown",(function(t){t.preventDefault()})),this.id=o,this.buttonElement=l}var e,i,n;return e=t,(i=[{key:"element",value:function(){return this.buttonElement}},{key:"toggle",value:function(t){t?this.show():this.hide()}},{key:"show",value:function(){this.buttonElement.style.display=""}},{key:"hide",value:function(){this.buttonElement.style.display="none"}}])&&jt(e.prototype,i),n&&jt(e,n),t}(),ft=i(11);function gt(t,e){for(var i=0;i=0&&(e.left-=i,e.right-=i),e},vt=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Object(j.h)(this,r.a),this.className=e+" jw-background-color jw-reset",this.orientation=i}var e,i,n;return e=t,(i=[{key:"setup",value:function(){this.el=Object(s.e)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return''}(this.className,"jw-slider-"+this.orientation)),this.elementRail=this.el.getElementsByClassName("jw-slider-container")[0],this.elementBuffer=this.el.getElementsByClassName("jw-buffer")[0],this.elementProgress=this.el.getElementsByClassName("jw-progress")[0],this.elementThumb=this.el.getElementsByClassName("jw-knob")[0],this.ui=new w.a(this.element(),{preventScrolling:!0}).on("dragStart",this.dragStart,this).on("drag",this.dragMove,this).on("dragEnd",this.dragEnd,this).on("click tap",this.tap,this)}},{key:"dragStart",value:function(){this.trigger("dragStart"),this.railBounds=bt(this.elementRail)}},{key:"dragEnd",value:function(t){this.dragMove(t),this.trigger("dragEnd")}},{key:"dragMove",value:function(t){var e,i,n=this.railBounds=this.railBounds?this.railBounds:bt(this.elementRail);return i="horizontal"===this.orientation?(e=t.pageX)n.right?100:100*Object(l.a)((e-n.left)/n.width,0,1):(e=t.pageY)>=n.bottom?0:e<=n.top?100:100*Object(l.a)((n.height-(e-n.top))/n.height,0,1),this.render(i),this.update(i),!1}},{key:"tap",value:function(t){this.railBounds=bt(this.elementRail),this.dragMove(t)}},{key:"limit",value:function(t){return t}},{key:"update",value:function(t){this.trigger("update",{percentage:t})}},{key:"render",value:function(t){t=Math.max(0,Math.min(t,100)),"horizontal"===this.orientation?(this.elementThumb.style.left=t+"%",this.elementProgress.style.width=t+"%"):(this.elementThumb.style.bottom=t+"%",this.elementProgress.style.height=t+"%")}},{key:"updateBuffer",value:function(t){this.elementBuffer.style.width=t+"%"}},{key:"element",value:function(){return this.el}}])&>(e.prototype,i),n&>(e,n),t}(),mt=function(t,e){t&&e&&(t.setAttribute("aria-label",e),t.setAttribute("role","button"),t.setAttribute("tabindex","0"))};function yt(t,e){for(var i=0;i0&&Array.prototype.forEach.call(o,(function(t){"string"==typeof t?a.el.appendChild(u(t)):a.el.appendChild(t)}))}var e,i,n;return e=t,(i=[{key:"addContent",value:function(t){this.content&&this.removeContent(),this.content=t,this.tooltip.appendChild(t)}},{key:"removeContent",value:function(){this.content&&(this.tooltip.removeChild(this.content),this.content=null)}},{key:"hasContent",value:function(){return!!this.content}},{key:"element",value:function(){return this.el}},{key:"openTooltip",value:function(t){this.isOpen||(this.trigger("open-"+this.componentType,t,{isOpen:!0}),this.isOpen=!0,Object(s.v)(this.el,this.openClass,this.isOpen))}},{key:"closeTooltip",value:function(t){this.isOpen&&(this.trigger("close-"+this.componentType,t,{isOpen:!1}),this.isOpen=!1,Object(s.v)(this.el,this.openClass,this.isOpen))}},{key:"toggleOpenState",value:function(t){this.isOpen?this.closeTooltip(t):this.openTooltip(t)}}])&&yt(e.prototype,i),n&&yt(e,n),t}(),kt=i(22),Ot=i(57);function Ct(t,e){for(var i=0;i=this.thumbnails.length&&(e=this.thumbnails.length-1);var i=this.thumbnails[e].img;return i.indexOf("://")<0&&(i=this.vttPath?this.vttPath+"/"+i:i),i},loadThumbnail:function(t){var e=this.chooseThumbnail(t),i={margin:"0 auto",backgroundPosition:"0 0"};if(e.indexOf("#xywh")>0)try{var n=/(.+)#xywh=(\d+),(\d+),(\d+),(\d+)/.exec(e);e=n[1],i.backgroundPosition=-1*n[2]+"px "+-1*n[3]+"px",i.width=n[4],this.timeTip.setWidth(+i.width),i.height=n[5]}catch(t){return}else this.individualImage||(this.individualImage=new Image,this.individualImage.onload=Object(j.a)((function(){this.individualImage.onload=null,this.timeTip.image({width:this.individualImage.width,height:this.individualImage.height}),this.timeTip.setWidth(this.individualImage.width)}),this),this.individualImage.src=e);return i.backgroundImage='url("'+e+'")',i},showThumbnail:function(t){this._model.get("containerWidth")<=420||this.thumbnails.length<1||this.timeTip.image(this.loadThumbnail(t))},resetThumbnails:function(){this.timeTip.image({backgroundImage:"",width:0,height:0}),this.thumbnails=[]}};function Mt(t,e,i){return(Mt="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,i){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Vt(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(i):o.value}})(t,e,i||t)}function Lt(t){return(Lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function _t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function At(t,e){for(var i=0;i-1&&(n="Live")}var u=this.timeTip;u.update(n),this.textLength!==n.length&&(this.textLength=n.length,u.resetWidth()),this.showThumbnail(w),Object(s.a)(u.el,"jw-open");var p=u.getWidth(),j=a.width/100,d=o-a.width,h=0;p>d&&(h=(p-d)/(200*j));var f=100*Math.min(1-h,Math.max(h,c)).toFixed(3);Object(pt.d)(u.el,{left:f+"%"})}}},{key:"hideTimeTooltip",value:function(){Object(s.o)(this.timeTip.el,"jw-open")}},{key:"updateCues",value:function(t,e){var i=this;this.resetCues(),e&&e.length&&(e.forEach((function(t){i.addCue(t)})),this.drawCues())}},{key:"updateAriaText",value:function(){var t=this._model;if(!t.get("seeking")){var e=t.get("position"),i=t.get("duration"),n=Object(ft.timeFormat)(e);"DVR"!==this.streamType&&(n+=" of ".concat(Object(ft.timeFormat)(i)));var o=this.el;document.activeElement!==o&&(this.timeUpdateKeeper.textContent=n),Object(s.t)(o,"aria-valuenow",e),Object(s.t)(o,"aria-valuetext",n)}}},{key:"reset",value:function(){this.resetThumbnails(),this.timeTip.resetWidth(),this.textLength=0}}]),e}(vt);Object(j.h)(Nt.prototype,Tt,Et);var qt=Nt;function Ut(t,e){for(var i=0;i=75&&!t),Object(s.t)(r,"aria-valuenow",o),Object(s.t)(l,"aria-valuenow",o);var c="Volume ".concat(o,"%");Object(s.t)(r,"aria-valuetext",c),Object(s.t)(l,"aria-valuetext",c),document.activeElement!==r&&document.activeElement!==l&&(this._volumeAnnouncer.textContent=c)}}},{key:"onCastAvailable",value:function(t,e){this.elements.cast.toggle(e)}},{key:"onCastActive",value:function(t,e){this.elements.fullscreen.toggle(!e),this.elements.cast.button&&Object(s.v)(this.elements.cast.button,"jw-off",!e)}},{key:"onElapsed",value:function(t,e){var i,n,o=t.get("duration");if("DVR"===t.get("streamType")){var a=Math.ceil(e),r=this._model.get("dvrSeekLimit");i=n=a>=-r?"":"-"+Object(ft.timeFormat)(-(e+r)),t.set("dvrLive",a>=-r)}else i=Object(ft.timeFormat)(e),n=Object(ft.timeFormat)(o-e);this.elements.elapsed.textContent=i,this.elements.countdown.textContent=n}},{key:"onDuration",value:function(t,e){this.elements.duration.textContent=Object(ft.timeFormat)(Math.abs(e))}},{key:"onAudioMode",value:function(t,e){var i=this.elements.time.element();e?this.elements.buttonContainer.insertBefore(i,this.elements.elapsed):Object(s.m)(this.el,i)}},{key:"element",value:function(){return this.el}},{key:"setAltText",value:function(t,e){this.elements.alt.textContent=e}},{key:"closeMenus",value:function(t){this.menus.forEach((function(e){t&&t.target===e.el||e.closeTooltip(t)}))}},{key:"rewind",value:function(){var t,e=0,i=this._model.get("currentTime");i?t=i-10:(t=this._model.get("position")-10,"DVR"===this._model.get("streamType")&&(e=this._model.get("duration"))),this._api.seek(Math.max(t,e),{reason:"interaction"})}},{key:"onState",value:function(t,e){var i=t.get("localization"),n=i.play;this.setPlayText(n),e===a.pb&&("LIVE"!==t.get("streamType")?(n=i.pause,this.setPlayText(n)):(n=i.stop,this.setPlayText(n))),Object(s.t)(this.elements.play.element(),"aria-label",n)}},{key:"onStreamTypeChange",value:function(t,e){var i="LIVE"===e,n="DVR"===e;this.elements.rewind.toggle(!i),this.elements.live.toggle(i||n),Object(s.t)(this.elements.live.element(),"tabindex",i?"-1":"0"),this.elements.duration.style.display=n?"none":"",this.onDuration(t,t.get("duration")),this.onState(t,t.get("state"))}},{key:"addLogo",value:function(t){var e=this.elements.buttonContainer,i=new ht(t.file,this._model.get("localization").logo,(function(){t.link&&Object(s.l)(t.link,"_blank",{rel:"noreferrer"})}),"logo","jw-logo-button");t.link||Object(s.t)(i.element(),"tabindex","-1"),e.insertBefore(i.element(),e.querySelector(".jw-spacer").nextSibling)}},{key:"goToLiveEdge",value:function(){if("DVR"===this._model.get("streamType")){var t=Math.min(this._model.get("position"),-1),e=this._model.get("dvrSeekLimit");this._api.seek(Math.max(-e,t),{reason:"interaction"}),this._api.play({reason:"interaction"})}}},{key:"updateButtons",value:function(t,e,i){if(e){var n,o,a=this.elements.buttonContainer;e!==i&&i?(n=ae(e,i),o=ae(i,e),this.removeButtons(a,o)):n=e;for(var r=n.length-1;r>=0;r--){var l=n[r],s=new ht(l.img,l.tooltip,l.callback,l.id,l.btnClass);l.tooltip&&$t(s.element(),l.id,l.tooltip);var c=void 0;"related"===s.id?c=this.elements.settingsButton.element():"share"===s.id?c=a.querySelector('[button="related"]')||this.elements.settingsButton.element():(c=this.elements.spacer.nextSibling)&&"logo"===c.getAttribute("button")&&(c=c.nextSibling),a.insertBefore(s.element(),c)}}}},{key:"removeButtons",value:function(t,e){for(var i=e.length;i--;){var n=t.querySelector('[button="'.concat(e[i].id,'"]'));n&&t.removeChild(n)}}},{key:"toggleCaptionsButtonState",value:function(t){var e=this.elements.captionsButton;e&&Object(s.v)(e.element(),"jw-off",!t)}},{key:"destroy",value:function(){var t=this;this._model.off(null,null,this),Object.keys(this.elements).forEach((function(e){var i=t.elements[e];i&&"function"==typeof i.destroy&&t.elements[e].destroy()})),this.ui.forEach((function(t){t.destroy()})),this.ui=[]}}])&&ee(e.prototype,i),n&&ee(e,n),t}(),se=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return'
')+'
')+"
"},ce=function(t){return'
'+se("rewind",t.rewind)+se("display",t.playback)+se("next",t.next)+"
"};function we(t,e){for(var i=0;i'.concat(a.playback,"
")),Object(s.a)(o.icon,"jw-idle-label"),o.icon.appendChild(l))}return o}var i,n,o;return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&fe(t,e)}(e,t),i=e,(n=[{key:"element",value:function(){return this.el}}])&&je(i.prototype,n),o&&je(i,o),e}(r.a);function be(t,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:"",e=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]:"";return'
'+'
'.concat(t,"
")+'
'.concat(e,"
")+'
'.concat(i,"
")+"
"+'')+"
"}());e.querySelector(".jw-nextup-close").appendChild(lt("close")),this.addContent(e),this.closeButton=this.content.querySelector(".jw-nextup-close"),this.closeButton.setAttribute("aria-label",this.localization.close),this.tooltip=this.content.querySelector(".jw-nextup-tooltip");var i=this._model,n=i.player;this.enabled=!1,i.on("change:nextUp",this.onNextUp,this),n.change("duration",this.onDuration,this),n.change("position",this.onElapsed,this),n.change("streamType",this.onStreamType,this),n.change("state",(function(t,e){"complete"===e&&this.toggle(!1)}),this),this.closeUi=new w.a(this.closeButton,{directSelect:!0}).on("click tap enter",(function(){this.nextUpSticky=!1,this.toggle(!1)}),this),this.tooltipUi=new w.a(this.tooltip).on("click tap",this.click,this)}},{key:"loadThumbnail",value:function(t){return this.nextUpImage=new Image,this.nextUpImage.onload=function(){this.nextUpImage.onload=null}.bind(this),this.nextUpImage.src=t,{backgroundImage:'url("'+t+'")'}}},{key:"click",value:function(){var t=this.feedShownId;this.reset(),this._api.next({feedShownId:t,reason:"interaction"})}},{key:"toggle",value:function(t,e){if(this.enabled&&(Object(s.v)(this.container,"jw-nextup-sticky",!!this.nextUpSticky),this.shown!==t)){this.shown=t,Object(s.v)(this.container,"jw-nextup-container-visible",t),Object(s.v)(this._playerElement,"jw-flag-nextup",t);var i=this._model.get("nextUp");t&&i?(this.feedShownId=Object(te.b)(te.a),this.trigger("nextShown",{mode:i.mode,ui:"nextup",itemsShown:[i],feedData:i.feedData,reason:e,feedShownId:this.feedShownId})):this.feedShownId=""}}},{key:"setNextUpItem",value:function(t){var e=this;setTimeout((function(){if(e.thumbnail=e.content.querySelector(".jw-nextup-thumbnail"),Object(s.v)(e.content,"jw-nextup-thumbnail-visible",!!t.image),t.image){var i=e.loadThumbnail(t.image);Object(pt.d)(e.thumbnail,i)}e.header=e.content.querySelector(".jw-nextup-header"),e.header.textContent=Object(s.e)(e.localization.nextUp).textContent,e.title=e.content.querySelector(".jw-nextup-title");var n=t.title;e.title.textContent=n?Object(s.e)(n).textContent:"";var o=t.duration;o&&(e.duration=e.content.querySelector(".jw-nextup-duration"),e.duration.textContent="number"==typeof o?Object(ft.timeFormat)(o):o)}),500)}},{key:"onNextUp",value:function(t,e){this.reset(),e||(e={showNextUp:!1}),this.enabled=!(!e.title&&!e.image),this.enabled&&(e.showNextUp||(this.nextUpSticky=!1,this.toggle(!1)),this.setNextUpItem(e))}},{key:"onDuration",value:function(t,e){if(e){var i=t.get("nextupoffset"),n=-10;i&&(n=Object(ke.d)(i,e)),n<0&&(n+=e),Object(ke.c)(i)&&e-5=this.offset;n&&void 0===i?(this.nextUpSticky=n,this.toggle(n,"time")):!n&&i&&this.reset()}}},{key:"onStreamType",value:function(t,e){"VOD"!==e&&(this.nextUpSticky=!1,this.toggle(!1))}},{key:"element",value:function(){return this.container}},{key:"addContent",value:function(t){this.content&&this.removeContent(),this.content=t,this.container.appendChild(t)}},{key:"removeContent",value:function(){this.content&&(this.container.removeChild(this.content),this.content=null)}},{key:"reset",value:function(){this.nextUpSticky=void 0,this.toggle(!1)}},{key:"destroy",value:function(){this.off(),this._model.off(null,null,this),this.closeUi&&this.closeUi.destroy(),this.tooltipUi&&this.tooltipUi.destroy()}}])&&Oe(e.prototype,i),n&&Oe(e,n),t}(),Se=function(t,e){var i=t.featured,n=t.showLogo,o=t.type;return t.logo=n?'':"",'
  • ').concat(Te[o](t,e),"
  • ")},Te={link:function(t){var e=t.link,i=t.title,n=t.logo;return'').concat(n).concat(i||"","")},info:function(t,e){return'")},share:function(t,e){return'")},keyboardShortcuts:function(t,e){return'")}},ze=i(23),Ee=i(6),Me=i(13);function Le(t,e){for(var i=0;iJW Player '.concat(t,""),a={items:[{type:"info"},{title:Object(Me.e)(n)?"".concat(o," ").concat(n):"".concat(n," ").concat(o),type:"link",featured:!0,showLogo:!0,link:"https://jwplayer.com/learn-more?e=".concat(_e[i])}]},r=e.get("provider"),l=a.items;if(r&&r.name.indexOf("flash")>=0){var s="Flash Version "+Object(Ee.a)();l.push({title:s,type:"link",link:"http://www.adobe.com/software/flash/about/"})}return this.shortcutsTooltip&&l.splice(l.length-1,0,{type:"keyboardShortcuts"}),a}},{key:"rightClick",value:function(t){if(this.lazySetup(),this.mouseOverContext)return!1;this.hideMenu(),this.showMenu(t),this.addHideMenuHandlers()}},{key:"getOffset",value:function(t){var e=Object(s.c)(this.wrapperElement),i=t.pageX-e.left,n=t.pageY-e.top;return this.model.get("touchMode")&&(n-=100),{x:i,y:n}}},{key:"showMenu",value:function(t){var e=this,i=this.getOffset(t);return this.el.style.left=i.x+"px",this.el.style.top=i.y+"px",this.outCount=0,Object(s.a)(this.playerContainer,"jw-flag-rightclick-open"),Object(s.a)(this.el,"jw-open"),clearTimeout(this._menuTimeout),this._menuTimeout=setTimeout((function(){return e.hideMenu()}),3e3),!1}},{key:"hideMenu",value:function(t){t&&this.el&&this.el.contains(t.target)||(Object(s.o)(this.playerContainer,"jw-flag-rightclick-open"),Object(s.o)(this.el,"jw-open"))}},{key:"lazySetup",value:function(){var t,e,i,n,o=this,a=(t=this.buildArray(),e=this.model.get("localization"),i=t.items,n=(void 0===i?[]:i).map((function(t){return Se(t,e)})),'
    '+'
      '.concat(n.join(""),"
    ")+"
    ");if(this.el){if(this.html!==a){this.html=a;var r=Ae(a);Object(s.h)(this.el);for(var l=r.childNodes.length;l--;)this.el.appendChild(r.firstChild)}}else this.html=a,this.el=Ae(this.html),this.wrapperElement.appendChild(this.el),this.hideMenuHandler=function(t){return o.hideMenu(t)},this.overHandler=function(){o.mouseOverContext=!0},this.outHandler=function(t){o.mouseOverContext=!1,t.relatedTarget&&!o.el.contains(t.relatedTarget)&&++o.outCount>1&&o.hideMenu()},this.infoOverlayHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.infoOverlay.open()},this.shortcutsTooltipHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.shortcutsTooltip.open()}}},{key:"setup",value:function(t,e,i){this.wrapperElement=i,this.model=t,this.mouseOverContext=!1,this.playerContainer=e,this.ui=new w.a(i).on("longPress",this.rightClick,this)}},{key:"addHideMenuHandlers",value:function(){this.removeHideMenuHandlers(),this.wrapperElement.addEventListener("touchstart",this.hideMenuHandler),document.addEventListener("touchstart",this.hideMenuHandler),o.OS.mobile||(this.wrapperElement.addEventListener("click",this.hideMenuHandler),document.addEventListener("click",this.hideMenuHandler),this.el.addEventListener("mouseover",this.overHandler),this.el.addEventListener("mouseout",this.outHandler)),this.el.querySelector(".jw-info-overlay-item").addEventListener("click",this.infoOverlayHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").addEventListener("click",this.shortcutsTooltipHandler)}},{key:"removeHideMenuHandlers",value:function(){this.wrapperElement&&(this.wrapperElement.removeEventListener("click",this.hideMenuHandler),this.wrapperElement.removeEventListener("touchstart",this.hideMenuHandler)),this.el&&(this.el.querySelector(".jw-info-overlay-item").removeEventListener("click",this.infoOverlayHandler),this.el.removeEventListener("mouseover",this.overHandler),this.el.removeEventListener("mouseout",this.outHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").removeEventListener("click",this.shortcutsTooltipHandler)),document.removeEventListener("click",this.hideMenuHandler),document.removeEventListener("touchstart",this.hideMenuHandler)}},{key:"destroy",value:function(){clearTimeout(this._menuTimeout),this.removeHideMenuHandlers(),this.el&&(this.hideMenu(),this.hideMenuHandler=null,this.el=null),this.wrapperElement&&(this.wrapperElement.oncontextmenu=null,this.wrapperElement=null),this.model&&(this.model=null),this.ui&&(this.ui.destroy(),this.ui=null)}}])&&Le(e.prototype,i),n&&Le(e,n),t}(),Ie=function(){return''};function Ve(t){var e=document.getElementsByClassName("jw-icon-settings")[0];if(e){var i="Right"===t?Object(s.k)(e):Object(s.n)(e);i&&i.focus()}}var He=function(t){Object.keys(t).forEach((function(e){t[e].deactivate()}))},Pe=function(t){return'"};var Re=function(t){t.forEach((function(t){t.deactivate()}))},Ne=function(t){return'"};function qe(t,e,i){var n,o=Object(s.e)(Ne(e)),a=new w.a(o).on("click tap enter",(function(t){i(t)})),r={activate:function(){Object(s.v)(o,"jw-settings-item-active",!0),o.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(s.v)(o,"jw-settings-item-active",!1),o.setAttribute("aria-checked","false"),n=!1},element:function(){return o},uiElement:function(){return a},destroy:function(){this.deactivate(),a.destroy()}};return Object.defineProperty(r,"active",{enumerable:!0,get:function(){return n}}),r}var Ue="audioTracks",De="captions",Fe="quality",We="playbackRates",Ze=Fe,Ke=function(t,e,i,n,o){var a=t.getSubmenu(e);if(a)a.replaceContent(i);else{var r=p("jw-settings-".concat(e),(function(i){t.activateSubmenu(e,!1,i&&"enter"!==i.type),a.element().children[0].focus()}),e,[n]),l=r.element();l.setAttribute("role","menuitemradio"),l.setAttribute("aria-checked","false"),l.setAttribute("aria-label",o),(a=function(t,e,i){var n,o=[],a=Object(s.e)(Pe(t)),r=e.element();r.setAttribute("name",t),r.className+=" jw-submenu-"+t,e.show();var l=function(t,e){t?t.focus():void 0!==e&&o[e].element().focus()},c=function(t){var e=Object(s.k)(r),i=Object(s.n)(r),n=Object(s.k)(t.target),a=Object(s.n)(t.target),c=t.key.replace(/(Arrow|ape)/,"");switch(c){case"Tab":l(t.shiftKey?i:e);break;case"Left":l(i||Object(s.n)(document.getElementsByClassName("jw-icon-settings")[0]));break;case"Up":l(a,o.length-1);break;case"Right":l(e);break;case"Down":l(n,0)}t.preventDefault(),"Esc"!==c&&t.stopPropagation()},w={addContent:function(t){t&&(t.forEach((function(t){a.appendChild(t.element()),t.element().setAttribute("tabindex","-1"),t.element().addEventListener("keydown",c)})),o=t)},replaceContent:function(t){w.removeContent(),this.addContent(t)},removeContent:function(){o.forEach((function(t){t.element().removeEventListener("keydown",c)})),Object(s.h)(a),o=[]},getItems:function(){return o},activate:function(){Object(s.v)(a,"jw-settings-submenu-active",!0),a.setAttribute("aria-expanded","true"),r.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(s.v)(a,"jw-settings-submenu-active",!1),a.setAttribute("aria-expanded","false"),r.setAttribute("aria-checked","false"),n=!1},activateItem:function(t){var e=o[t];e&&!e.active&&(Re(o),e.activate())},element:function(){return a},destroy:function(){o&&(o.forEach((function(t){t.destroy()})),this.removeContent())}};return Object.defineProperties(w,{name:{enumerable:!0,get:function(){return t}},active:{enumerable:!0,get:function(){return n}},categoryButtonElement:{enumerable:!0,get:function(){return r}},isDefault:{enumerable:!0,get:function(){return i}}}),w}(e,r,e===Ze)).addContent(i),"ontouchstart"in window||$t(l,e,o),t.addSubmenu(a)}return a};function Xe(t){t.removeSubmenu(De)}function Je(t){t.removeSubmenu(Ue)}function Qe(t){t.removeSubmenu(Fe)}function Ye(t){t.removeSubmenu(We)}function Ge(t,e,i){var n=t.elements.settingsButton,o=function(t,e,i){var n,o=function(t){/jw-(settings|video|nextup-close|sharing-link|share-item)/.test(t.target.className)||d.close()},a=null,r={},l=Object(s.e)(Ie()),c=new w.a(l).on("keydown",(function(t){var e=t.sourceEvent,i=t.target,n=Object(s.k)(i),o=Object(s.n)(i),a=e.key.replace(/(Arrow|ape)/,"");switch(a){case"Esc":d.close(t);break;case"Left":o?o.focus():(d.close(),Ve(a));break;case"Right":n&&u.element()&&i!==u.element()&&n.focus();break;case"Up":case"Down":d.activateSubmenu(i.getAttribute("name"),"Up"===a)}if(e.stopPropagation(),/13|27|32|37|38|39|40/.test(e.keyCode))return e.preventDefault(),!1})),u=p("jw-settings-close",(function(t){d.close(t)}),i.close,[lt("close")]);u.ui.on("keydown",(function(t){var e=t.sourceEvent,i=e.key.replace(/(Arrow|ape)/,"");("Enter"===i||"Right"===i||"Tab"===i&&!e.shiftKey)&&d.close(e),"Right"===i&&Ve(e.key)})),u.show();var j=l.querySelector(".jw-settings-topbar");j.appendChild(u.element());var d={ui:c,closeButton:u,open:function(e,i){(t(n=!0,i),l.setAttribute("aria-expanded","true"),document.addEventListener("click",o),e&&i&&"enter"===i.type)?a.categoryButtonElement.focus():a.element().firstChild.focus()},close:function(e){t(n=!1,e),a=null,He(r),l.setAttribute("aria-expanded","false"),document.removeEventListener("click",o)},toggle:function(){n?this.close():this.open()},addSubmenu:function(t){if(t){var i=t.name;if(r[i]=t,t.isDefault)Object(s.m)(j,t.categoryButtonElement),t.categoryButtonElement.addEventListener("keydown",(function(t){9===t.keyCode&&t.shiftKey&&d.close(t)}));else{var n=j.querySelector(".jw-submenu-sharing");j.insertBefore(t.categoryButtonElement,n||u.element())}l.appendChild(t.element()),e.show()}},getSubmenu:function(t){return r[t]},getSubmenuNames:function(){return Object.keys(r)},removeSubmenu:function(t){var i=r[t];i&&i.element().parentNode===l&&(l.removeChild(i.element()),j.removeChild(i.categoryButtonElement),i.destroy(),delete r[t],Object.keys(r).length||(this.close(),e.hide()))},activateSubmenu:function(t,e){var i=r[t];i&&(i.active||(He(r),i.activate(),a=i),(e?i.element().lastChild:i.element().firstChild).focus())},activateFirstSubmenu:function(t){var e=Object.keys(r)[0];this.activateSubmenu(e,!1,t)},element:function(){return l},destroy:function(){this.close(),this.ui.destroy(),this.closeButton.ui.destroy(),Object(s.h)(l)}};return Object.defineProperties(d,{visible:{enumerable:!0,get:function(){return n}}}),d}(e,{hide:function(){return n.hide()},show:function(){return n.show()}},i);return t.on("settingsInteraction",(function(t,e,i){var n=o.getSubmenu(t),a=i&&"enter"!==i.type,r=Object(j.c)(o.open,10);(n||e)&&(o.visible?e||n.active?o.close():o.activateSubmenu(t,!1,a):(n?o.activateSubmenu(t,!1,a):o.activateFirstSubmenu(a),r(e,i)))})),o}function $e(t,e,i,n){var o=i.player,a=function(e,i){var n=t.getSubmenu(e);n&&n.activateItem(i)},r=function(e,i){!i||i.length<=1?Je(t):function(t,e,i,n,o){var a=e.map((function(e,n){return qe(e.name,e.name,(function(e){i(n),t.close(e)}))}));Ke(t,Ue,a,lt("audio-tracks"),o).activateItem(n)}(t,i,(function(t){return n.setCurrentAudioTrack(t)}),o.get("currentAudioTrack"),o.get("localization").audioTracks)},l=function(i,a){if(!a||a.length<=1)Qe(t);else{var r=o.get("localization"),l=r.hd,s=r.auto;!function(t,e,i,n,o,a){var r=e.map((function(e,n){var o=e.label;return"Auto"===o&&0===n&&(o="".concat(a,' ')),qe(e.label,o,(function(e){i(n),t.close(e)}))}));Ke(t,Fe,r,lt("quality-100"),o).activateItem(n)}(t,a,(function(t){return n.setCurrentQuality(t)}),o.get("currentLevel"),l,s)}!function(t,e){var i=t.getSubmenuNames(),n=i.length>1||i.some((function(t){return"quality"===t||"playbackRates"===t}));e.elements.settingsButton.toggle(n)}(t,e)},s=function(e,i){o.get("supportsPlaybackRate")&&"LIVE"!==o.get("streamType")&&o.get("playbackRateControls")&&i.length>1?function(t,e,i,n,o){var a=e.map((function(e){return qe(0,Object(Me.e)(o)?"x"+e:e+"x",(function(n){i(e),t.close(n)}))}));Ke(t,We,a,lt("playback-rate"),o).activateItem(n)}(t,i,(function(t){return n.setPlaybackRate(t)}),i.indexOf(o.get("playbackRate")),o.get("localization").playbackRates):Ye(t)},c=function(t,e,i){var n=o.get("levels");if(n&&"Auto"===n[0].label){var a=e.getItems()[0].element().querySelector(".jw-auto-label"),r=n[t.index]||{label:""};a.textContent=i?"":r.label}};o.change("levels",l,t),o.on("change:currentLevel",(function(e,i){var n=t.getSubmenu("quality"),r=o.get("visualQuality");r&&n&&c(r.level,n,i),a("quality",i)}),t),o.change("audioTracks",r,t),o.on("change:currentAudioTrack",(function(t,e){a("audioTracks",e)}),t),o.on("change:playlistItem",(function(){Xe(t),e.elements.captionsButton.hide(),t.visible&&t.close()})),o.change("captionsList",(function(i,a){var r=e.elements.captionsButton;if(!a||a.length<=1)return Xe(t),void r.hide();var l=o.get("localization"),s=l.cc,c=l.off;!function(t,e,i,n,o,a){var r=e.map((function(e,n){var o=e.label;return"Off"!==o&&"off"!==e.id||0!==n||(o=a),qe(e.id,o,(function(e){i(n),t.close(e)}))}));Ke(t,De,r,lt("cc-off"),o).activateItem(n)}(t,a,(function(t){return n.setCurrentCaptions(t)}),o.get("captionsIndex"),s,c),e.toggleCaptionsButtonState(!!o.get("captionsIndex")),r.show()}),t),o.change("captionsIndex",(function(i,n){var o=t.getSubmenu("captions");o&&(o.activateItem(n),e.toggleCaptionsButtonState(!!n))}),t),o.change("playbackRates",s,t),o.change("playbackRate",(function(t,e){var i=o.get("playbackRates");i&&a("playbackRates",i.indexOf(e))}),t),o.on("change:playbackRateControls",(function(){s(0,o.get("playbackRates"))})),o.on("change:visualQuality",(function(e,i){var n=t.getSubmenu("quality");i&&n&&c(i.level,n,o.get("currentLevel"))})),o.on("change:castActive",(function(e,i,n){i!==n&&(i?(Je(t),Qe(t),Ye(t)):(r(0,o.get("audioTracks")),l(0,o.get("levels")),s(0,o.get("playbackRates"))))}),t),o.on("change:streamType",(function(){s(0,o.get("playbackRates"))}),t)}var ti=i(58),ei=i(36),ii=i(12),ni=function(t,e,i,n){var o=Object(s.e)('
    '),r=!1,l=null,c=!1,w=function(t){/jw-info/.test(t.target.className)||j.close()},u=function(){var n,a,l,c,w,u=p("jw-info-close",(function(){j.close()}),e.get("localization").close,[lt("close")]);u.show(),Object(s.m)(o,u.element()),a=o.querySelector(".jw-info-title"),l=o.querySelector(".jw-info-duration"),c=o.querySelector(".jw-info-description"),w=o.querySelector(".jw-info-clientid"),e.change("playlistItem",(function(t,e){var i=e.description,n=e.title;Object(s.q)(c,i||""),Object(s.q)(a,n||"Unknown Title")})),e.change("duration",(function(t,i){var n="";switch(e.get("streamType")){case"LIVE":n="Live";break;case"DVR":n="DVR";break;default:i&&(n=Object(ft.timeFormat)(i))}l.textContent=n}),j),w.textContent=(n=i.getPlugin("jwpsrv"))&&"function"==typeof n.doNotTrackUser&&n.doNotTrackUser()?"":"Client ID: ".concat(function(){try{return window.localStorage.jwplayerLocalId}catch(t){return"none"}}()),t.appendChild(o),r=!0};var j={open:function(){r||u(),document.addEventListener("click",w),c=!0;var t=e.get("state");t===a.pb&&i.pause("infoOverlayInteraction"),l=t,n(!0)},close:function(){document.removeEventListener("click",w),c=!1,e.get("state")===a.ob&&l===a.pb&&i.play("infoOverlayInteraction"),l=null,n(!1)},destroy:function(){this.close(),e.off(null,null,this)}};return Object.defineProperties(j,{visible:{enumerable:!0,get:function(){return c}}}),j};var oi=function(t,e,i){var n,o=!1,r=null,l=i.get("localization").shortcuts,c=Object(s.e)(function(t,e){var i=t.map((function(t){return'
    '+''.concat(t.description,"")+''.concat(t.key,"")+"
    "})).join("");return'
    ')+'Press shift question mark to access a list of keyboard shortcuts
    '+''.concat(e,"")+'
    '+"".concat(i)+"
    "}(function(t){var e=t.playPause,i=t.volumeToggle,n=t.fullscreenToggle,o=t.seekPercent,a=t.increaseVolume,r=t.decreaseVolume,l=t.seekForward,s=t.seekBackward;return[{key:t.spacebar,description:e},{key:"↑",description:a},{key:"↓",description:r},{key:"→",description:l},{key:"←",description:s},{key:"c",description:t.captionsToggle},{key:"f",description:n},{key:"m",description:i},{key:"0-9",description:o}]}(l),l.keyboardShortcuts)),w={reason:"settingsInteraction"},u=c.querySelector(".jw-switch"),j=function(){u.setAttribute("aria-checked",i.get("enableShortcuts")),u.addEventListener("click",f),Object(s.a)(c,"jw-open"),r=i.get("state"),c.querySelector(".jw-shortcuts-close").focus(),document.addEventListener("click",h),o=!0,e.pause(w)},d=function(){u.removeEventListener("click",f),Object(s.o)(c,"jw-open"),document.removeEventListener("click",h),t.focus(),o=!1,r===a.pb&&e.play(w)},h=function(t){/jw-shortcuts|jw-switch/.test(t.target.className)||d()},f=function(t){var e=t.currentTarget,n="true"!==e.getAttribute("aria-checked");e.setAttribute("aria-checked",n),i.set("enableShortcuts",n)};return n=p("jw-shortcuts-close",(function(){d()}),i.get("localization").close,[lt("close")]),Object(s.m)(c,n.element()),n.show(),t.appendChild(c),{el:c,close:d,open:j,toggleVisibility:function(){o?d():j()}}},ai=function(t){return'
    ')+"
    "};function ri(t){return(ri="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function li(t,e){for(var i=0;i16?n.activeTimeout=setTimeout(n.userInactiveTimeout,t):n.playerContainer.querySelector(".jw-tab-focus")?n.resetActiveTimeout():n.userInactive()},n}var i,n,r;return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&fi(t,e)}(e,t),i=e,(n=[{key:"resetActiveTimeout",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.inactiveTime=0}},{key:"enable",value:function(t,e){var i=this,n=this.context.createElement("div");n.className="jw-controls jw-reset",this.div=n;var r=this.context.createElement("div");r.className="jw-controls-backdrop jw-reset",this.backdrop=r,this.logo=this.playerContainer.querySelector(".jw-logo");var c=e.get("touchMode");if(!this.displayContainer){var w=new ye(e,t);w.buttons.display.on("click tap enter",(function(){i.trigger(a.p),i.userActive(1e3),t.playToggle(vi()),e.get("isFloating")?i.wrapperElement.focus():i.playerContainer.focus()})),this.div.appendChild(w.element()),this.displayContainer=w}this.infoOverlay=new ni(n,e,t,(function(t){Object(s.v)(i.div,"jw-info-open",t),t&&i.div.querySelector(".jw-info-close").focus()})),o.OS.mobile||(this.shortcutsTooltip=new oi(this.wrapperElement,t,e)),this.rightClickMenu=new Be(this.infoOverlay,this.shortcutsTooltip),c?(Object(s.a)(this.playerContainer,"jw-flag-touch"),this.rightClickMenu.setup(e,this.playerContainer,this.wrapperElement)):e.change("flashBlocked",(function(t,e){e?i.rightClickMenu.destroy():i.rightClickMenu.setup(t,i.playerContainer,i.wrapperElement)}),this);var u=e.get("floating");if(u){var j=new ui(n,e.get("localization").close);j.on(a.sb,(function(){return i.trigger("dismissFloating",{doNotForward:!0})})),!1!==u.dismissible&&Object(s.a)(this.playerContainer,"jw-floating-dismissible")}var d=this.controlbar=new le(t,e,this.playerContainer.querySelector(".jw-hidden-accessibility"));if(d.on(a.sb,(function(){return i.userActive()})),d.on("nextShown",(function(t){this.trigger("nextShown",t)}),this),d.on("adjustVolume",m,this),e.get("nextUpDisplay")&&!d.nextUpToolTip){var h=new Ce(e,t,this.playerContainer);h.on("all",this.trigger,this),h.setup(this.context),d.nextUpToolTip=h,this.div.appendChild(h.element())}this.div.appendChild(d.element());var f=null,g=this.settingsMenu=Ge(d,(function(n,o){var r=e.get("state"),l={reason:"settingsInteraction"},c="keydown"===(o&&o.sourceEvent||o||{}).type;Object(s.v)(i.div,"jw-settings-open",n),Object(ti.a)(e.get("containerWidth"))<2&&(n&&r===a.pb?t.pause(l):n||r!==a.ob||f!==a.pb||t.play(l));var w=n||c?0:gi;i.userActive(w),f=r;var u=i.controlbar.elements.settingsButton;!n&&u&&(c?u.element().focus():o&&(e.get("isFloating")?i.wrapperElement:i.playerContainer).focus())}),e.get("localization"));$e(g,d,e,t),o.OS.mobile?this.div.appendChild(g.element()):(this.playerContainer.setAttribute("aria-describedby","jw-shortcuts-tooltip-explanation"),this.div.insertBefore(g.element(),d.element()));var b=function(e){if(e.get("autostartMuted")){var n=function(){return i.unmuteAutoplay(t,e)},a=function(t,e){e||n()};o.OS.mobile&&(i.mute=p("jw-autostart-mute jw-off",n,e.get("localization").unmute,[lt("volume-0")]),i.mute.show(),i.div.appendChild(i.mute.element())),d.renderVolume(!0,e.get("volume")),Object(s.a)(i.playerContainer,"jw-flag-autostart"),e.on("change:autostartFailed",n,i),e.on("change:autostartMuted change:mute",a,i),i.muteChangeCallback=a,i.unmuteCallback=n}};function v(i){var n=0,o=e.get("duration"),a=e.get("position");if("DVR"===e.get("streamType")){var r=e.get("dvrSeekLimit");n=o,o=Math.max(a,-r)}var s=Object(l.a)(a+i,n,o);t.seek(s,vi())}function m(i){var n=Object(l.a)(e.get("volume")+i,0,100);t.setVolume(n)}e.once("change:autostartMuted",b),b(e);var y=function(n){if(n.ctrlKey||n.metaKey)return!0;var o=!i.settingsMenu.visible,a=!0===e.get("enableShortcuts"),r=i.instreamState;if(a||-1!==bi.indexOf(n.keyCode)){switch(n.keyCode){case 27:if(e.get("fullscreen"))t.setFullscreen(!1),i.playerContainer.blur(),i.userInactive();else{var l=t.getPlugin("related");l&&l.close({type:"escape"})}i.rightClickMenu.el&&i.rightClickMenu.hideMenuHandler(),i.infoOverlay.visible&&i.infoOverlay.close(),i.shortcutsTooltip&&i.shortcutsTooltip.close();break;case 13:case 32:if(document.activeElement.classList.contains("jw-switch")&&32===n.keyCode)return!0;t.playToggle(vi());break;case 37:!r&&o&&v(-5);break;case 39:!r&&o&&v(5);break;case 38:o&&m(10);break;case 40:o&&m(-10);break;case 67:var s=t.getCaptionsList().length;if(s){var c=(t.getCurrentCaptions()+1)%s;t.setCurrentCaptions(c)}break;case 77:t.setMute();break;case 70:t.setFullscreen();break;case 191:i.shortcutsTooltip&&i.shortcutsTooltip.toggleVisibility();break;default:if(n.keyCode>=48&&n.keyCode<=59){var w=(n.keyCode-48)/10*e.get("duration");t.seek(w,vi())}}return/13|32|37|38|39|40/.test(n.keyCode)?(n.preventDefault(),!1):void 0}};this.playerContainer.addEventListener("keydown",y),this.keydownCallback=y;var x=function(t){if(9===t.keyCode){var e=i.playerContainer.contains(t.target)?0:gi;i.userActive(e)}};this.playerContainer.addEventListener("keyup",x),this.keyupCallback=x;var k=function(t){var e=t.relatedTarget||document.querySelector(":focus");e&&(i.playerContainer.contains(e)||i.userInactive())};this.playerContainer.addEventListener("blur",k,!0),this.blurCallback=k;var O=function t(){"jw-shortcuts-tooltip-explanation"===i.playerContainer.getAttribute("aria-describedby")&&i.playerContainer.removeAttribute("aria-describedby"),i.playerContainer.removeEventListener("blur",t,!0)};this.shortcutsTooltip&&(this.playerContainer.addEventListener("blur",O,!0),this.onRemoveShortcutsDescription=O),this.userActive(),this.addControls(),this.addBackdrop(),e.set("controlsEnabled",!0)}},{key:"addControls",value:function(){this.wrapperElement.appendChild(this.div)}},{key:"disable",value:function(t){var e=this.nextUpToolTip,i=this.settingsMenu,n=this.infoOverlay,o=this.controlbar,a=this.rightClickMenu,r=this.playerContainer,l=this.div;clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.off(),t.off(null,null,this),t.set("controlsEnabled",!1),l.parentNode&&(Object(s.o)(r,"jw-flag-touch"),l.parentNode.removeChild(l)),o&&o.destroy(),a&&a.destroy(),this.keydownCallback&&r.removeEventListener("keydown",this.keydownCallback),this.keyupCallback&&r.removeEventListener("keyup",this.keyupCallback),this.blurCallback&&r.removeEventListener("blur",this.blurCallback),this.onRemoveShortcutsDescription&&r.removeEventListener("blur",this.onRemoveShortcutsDescription),this.displayContainer&&this.displayContainer.destroy(),e&&e.destroy(),i&&(i.destroy(),l.removeChild(i.element())),n&&n.destroy(),this.removeBackdrop()}},{key:"controlbarHeight",value:function(){return this.dimensions.cbHeight||(this.dimensions.cbHeight=this.controlbar.element().clientHeight),this.dimensions.cbHeight}},{key:"element",value:function(){return this.div}},{key:"resize",value:function(){this.dimensions={}}},{key:"unmuteAutoplay",value:function(t,e){var i=!e.get("autostartFailed"),n=e.get("mute");i?n=!1:e.set("playOnViewable",!1),this.muteChangeCallback&&(e.off("change:autostartMuted change:mute",this.muteChangeCallback),this.muteChangeCallback=null),this.unmuteCallback&&(e.off("change:autostartFailed",this.unmuteCallback),this.unmuteCallback=null),e.set("autostartFailed",void 0),e.set("autostartMuted",void 0),t.setMute(n),this.controlbar.renderVolume(n,e.get("volume")),this.mute&&this.mute.hide(),Object(s.o)(this.playerContainer,"jw-flag-autostart"),this.userActive()}},{key:"mouseMove",value:function(t){var e=this.controlbar.element().contains(t.target),i=this.controlbar.nextUpToolTip&&this.controlbar.nextUpToolTip.element().contains(t.target),n=this.logo&&this.logo.contains(t.target),o=e||i||n?0:gi;this.userActive(o)}},{key:"userActive",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:gi;t>0?(this.inactiveTime=Object(c.a)()+t,-1===this.activeTimeout&&(this.activeTimeout=setTimeout(this.userInactiveTimeout,t))):this.resetActiveTimeout(),this.showing||(Object(s.o)(this.playerContainer,"jw-flag-user-inactive"),this.showing=!0,this.trigger("userActive"))}},{key:"userInactive",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.settingsMenu.visible||(this.inactiveTime=0,this.showing=!1,Object(s.a)(this.playerContainer,"jw-flag-user-inactive"),this.trigger("userInactive"))}},{key:"addBackdrop",value:function(){var t=this.instreamState?this.div:this.wrapperElement.querySelector(".jw-captions");this.wrapperElement.insertBefore(this.backdrop,t)}},{key:"removeBackdrop",value:function(){var t=this.backdrop.parentNode;t&&t.removeChild(this.backdrop)}},{key:"setupInstream",value:function(){this.instreamState=!0,this.userActive(),this.addBackdrop(),this.settingsMenu&&this.settingsMenu.close(),Object(s.o)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","-1")}},{key:"destroyInstream",value:function(t){this.instreamState=null,this.addBackdrop(),t.get("autostartMuted")&&Object(s.a)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","0")}}])&&ji(i.prototype,n),r&&ji(i,r),e}(r.a)},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,i){"use strict";i.d(e,"a",(function(){return o}));var n=i(2);function o(t){var e=[],i=(t=Object(n.i)(t)).split("\r\n\r\n");1===i.length&&(i=t.split("\n\n"));for(var o=0;o0&&(o=0),i.length>o+1&&i[o+1]){var a=i[o],r=a.indexOf(" --\x3e ");r>0&&(e.begin=Object(n.g)(a.substr(0,r)),e.end=Object(n.g)(a.substr(r+5)),e.text=i.slice(o+1).join("\r\n"))}return e}},function(t,e,i){"use strict";i.d(e,"a",(function(){return o})),i.d(e,"b",(function(){return a}));var n=i(5);function o(t){var e=-1;return t>=1280?e=7:t>=960?e=6:t>=800?e=5:t>=640?e=4:t>=540?e=3:t>=420?e=2:t>=320?e=1:t>=250&&(e=0),e}function a(t,e){var i="jw-breakpoint-"+e;Object(n.p)(t,/jw-breakpoint--?\d+/,i)}},function(t,e,i){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i=function(t,e){var i=t[1]||"",n=t[3];if(!n)return i;if(e&&"function"==typeof btoa){var o=(r=n,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */"),a=n.sources.map((function(t){return"/*# sourceURL="+n.sourceRoot+t+" */"}));return[i].concat(a).concat([o]).join("\n")}var r;return[i].join("\n")}(e,t);return e[2]?"@media "+e[2]+"{"+i+"}":i})).join("")},e.i=function(t,i){"string"==typeof t&&(t=[[null,t,""]]);for(var n={},o=0;o.jw-icon-rewind,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-next,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-playback{display:none}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop{opacity:0}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-countdown{display:flex}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-duration,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-duration{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-text-countdown,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-related-btn,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-slider-volume{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-controlbar{flex-direction:column-reverse}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-button-container{height:30px}.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-volume,.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-fullscreen{display:none}.jwplayer:not(.jw-breakpoint-0) .jw-text-duration:before,.jwplayer:not(.jw-breakpoint--1) .jw-text-duration:before{content:"/";padding-right:1ch;padding-left:1ch}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar{will-change:transform}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar .jw-text{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.jw-slider-container{display:flex;align-items:center;position:relative;touch-action:none}.jw-rail,.jw-buffer,.jw-progress{position:absolute;cursor:pointer}.jw-progress{background-color:#f2f2f2}.jw-rail{background-color:rgba(255,255,255,0.3)}.jw-buffer{background-color:rgba(255,255,255,0.3)}.jw-knob{height:13px;width:13px;background-color:#fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,0.4);opacity:1;pointer-events:none;position:absolute;-webkit-transform:translate(-50%, -50%) scale(0);transform:translate(-50%, -50%) scale(0);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform}.jw-flag-dragging .jw-slider-time .jw-knob,.jw-icon-volume:active .jw-slider-volume .jw-knob{box-shadow:0 0 26px rgba(0,0,0,0.2),0 0 10px rgba(0,0,0,0.4),0 0 0 6px rgba(255,255,255,0.2)}.jw-slider-horizontal,.jw-slider-vertical{display:flex}.jw-slider-horizontal .jw-slider-container{height:5px;width:100%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue,.jw-slider-horizontal .jw-knob{top:50%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue{-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress{height:5px}.jw-slider-horizontal .jw-rail{width:100%}.jw-slider-vertical{align-items:center;flex-direction:column}.jw-slider-vertical .jw-slider-container{height:88px;width:5px}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress,.jw-slider-vertical .jw-knob{left:50%}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress{height:100%;width:5px;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out;bottom:0}.jw-slider-vertical .jw-knob{-webkit-transform:translate(-50%, 50%);transform:translate(-50%, 50%)}.jw-slider-time.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-slider-time,.jw-flag-audio-player .jw-slider-volume{height:17px;width:100%;align-items:center;background:transparent none;padding:0 12px}.jw-slider-time .jw-cue{background-color:rgba(33,33,33,0.8);cursor:pointer;position:absolute;width:6px}.jw-slider-time,.jw-horizontal-volume-container{z-index:1;outline:none}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail,.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer,.jw-slider-time .jw-progress,.jw-horizontal-volume-container .jw-progress,.jw-slider-time .jw-cue,.jw-horizontal-volume-container .jw-cue{-webkit-backface-visibility:hidden;backface-visibility:hidden;height:100%;-webkit-transform:translate(0, -50%) scale(1, .6);transform:translate(0, -50%) scale(1, .6);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}.jw-slider-time:hover .jw-rail,.jw-horizontal-volume-container:hover .jw-rail,.jw-slider-time:focus .jw-rail,.jw-horizontal-volume-container:focus .jw-rail,.jw-flag-dragging .jw-slider-time .jw-rail,.jw-flag-dragging .jw-horizontal-volume-container .jw-rail,.jw-flag-touch .jw-slider-time .jw-rail,.jw-flag-touch .jw-horizontal-volume-container .jw-rail,.jw-slider-time:hover .jw-buffer,.jw-horizontal-volume-container:hover .jw-buffer,.jw-slider-time:focus .jw-buffer,.jw-horizontal-volume-container:focus .jw-buffer,.jw-flag-dragging .jw-slider-time .jw-buffer,.jw-flag-dragging .jw-horizontal-volume-container .jw-buffer,.jw-flag-touch .jw-slider-time .jw-buffer,.jw-flag-touch .jw-horizontal-volume-container .jw-buffer,.jw-slider-time:hover .jw-progress,.jw-horizontal-volume-container:hover .jw-progress,.jw-slider-time:focus .jw-progress,.jw-horizontal-volume-container:focus .jw-progress,.jw-flag-dragging .jw-slider-time .jw-progress,.jw-flag-dragging .jw-horizontal-volume-container .jw-progress,.jw-flag-touch .jw-slider-time .jw-progress,.jw-flag-touch .jw-horizontal-volume-container .jw-progress,.jw-slider-time:hover .jw-cue,.jw-horizontal-volume-container:hover .jw-cue,.jw-slider-time:focus .jw-cue,.jw-horizontal-volume-container:focus .jw-cue,.jw-flag-dragging .jw-slider-time .jw-cue,.jw-flag-dragging .jw-horizontal-volume-container .jw-cue,.jw-flag-touch .jw-slider-time .jw-cue,.jw-flag-touch .jw-horizontal-volume-container .jw-cue{-webkit-transform:translate(0, -50%) scale(1, 1);transform:translate(0, -50%) scale(1, 1)}.jw-slider-time:hover .jw-knob,.jw-horizontal-volume-container:hover .jw-knob,.jw-slider-time:focus .jw-knob,.jw-horizontal-volume-container:focus .jw-knob{-webkit-transform:translate(-50%, -50%) scale(1);transform:translate(-50%, -50%) scale(1)}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail{background-color:rgba(255,255,255,0.2)}.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer{background-color:rgba(255,255,255,0.4)}.jw-flag-touch .jw-slider-time::before,.jw-flag-touch .jw-horizontal-volume-container::before{height:44px;width:100%;content:"";position:absolute;display:block;bottom:calc(100% - 17px);left:0}.jw-slider-time.jw-tab-focus:focus .jw-rail,.jw-horizontal-volume-container.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time{height:17px;padding:0}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-slider-container{height:10px}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-knob{border-radius:0;border:1px solid rgba(0,0,0,0.75);height:12px;width:10px}.jw-modal{width:284px}.jw-breakpoint-7 .jw-modal,.jw-breakpoint-6 .jw-modal,.jw-breakpoint-5 .jw-modal{height:232px}.jw-breakpoint-4 .jw-modal,.jw-breakpoint-3 .jw-modal{height:192px}.jw-breakpoint-2 .jw-modal,.jw-flag-small-player .jw-modal{bottom:0;right:0;height:100%;width:100%;max-height:none;max-width:none;z-index:2}.jwplayer .jw-rightclick{display:none;position:absolute;white-space:nowrap}.jwplayer .jw-rightclick.jw-open{display:block}.jwplayer .jw-rightclick .jw-rightclick-list{border-radius:1px;list-style:none;margin:0;padding:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item{background-color:rgba(0,0,0,0.8);border-bottom:1px solid #444;margin:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo{color:#fff;display:inline-flex;padding:0 10px 0 0;vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo .jw-svg-icon{height:20px;width:20px}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-link{border:none;color:#fff;display:block;font-size:11px;line-height:1em;padding:15px 23px;text-align:start;text-decoration:none;width:100%}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:last-child{border-bottom:none}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:hover{cursor:pointer}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured{vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link{color:#fff}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link span{color:#fff}.jwplayer .jw-rightclick .jw-info-overlay-item,.jwplayer .jw-rightclick .jw-share-item,.jwplayer .jw-rightclick .jw-shortcuts-item{border:none;background-color:transparent;outline:none;cursor:pointer}.jw-icon-tooltip.jw-open .jw-overlay{opacity:1;pointer-events:auto;transition-delay:0s}.jw-icon-tooltip.jw-open .jw-overlay:focus{outline:none}.jw-icon-tooltip.jw-open .jw-overlay:focus.jw-tab-focus{outline:solid 2px #4d90fe}.jw-slider-time .jw-overlay:before{height:1em;top:auto}.jw-slider-time .jw-icon-tooltip.jw-open .jw-overlay{pointer-events:none}.jw-volume-tip{padding:13px 0 26px}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{height:auto;width:100%;box-shadow:0 0 10px rgba(0,0,0,0.4);color:#fff;display:block;margin:0 0 14px;pointer-events:none;position:relative;z-index:0}.jw-time-tip::after,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{top:100%;position:absolute;left:50%;height:14px;width:14px;border-radius:1px;background-color:currentColor;-webkit-transform-origin:75% 50%;transform-origin:75% 50%;-webkit-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);z-index:-1}.jw-time-tip .jw-text,.jw-controlbar .jw-tooltip .jw-text,.jw-settings-menu .jw-tooltip .jw-text{background-color:#fff;border-radius:1px;color:#000;font-size:10px;height:auto;line-height:1;padding:7px 10px;display:inline-block;min-width:100%;vertical-align:middle}.jw-controlbar .jw-overlay{position:absolute;bottom:100%;left:50%;margin:0;min-height:44px;min-width:44px;opacity:0;pointer-events:none;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s, 150ms;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);width:100%;z-index:1}.jw-controlbar .jw-overlay .jw-contents{position:relative}.jw-controlbar .jw-option{position:relative;white-space:nowrap;cursor:pointer;list-style:none;height:1.5em;font-family:inherit;line-height:1.5em;padding:0 .5em;font-size:.8em;margin:0}.jw-controlbar .jw-option::before{padding-right:.125em}.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{position:absolute;bottom:100%;left:50%;opacity:0;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:100ms 0s cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility, -webkit-transform;transition-property:opacity, transform, visibility;transition-property:opacity, transform, visibility, -webkit-transform;visibility:hidden;white-space:nowrap;width:auto;z-index:1}.jw-controlbar .jw-tooltip.jw-open,.jw-settings-menu .jw-tooltip.jw-open{opacity:1;-webkit-transform:translate(-50%, -10px);transform:translate(-50%, -10px);transition-duration:150ms;transition-delay:500ms,0s,500ms;visibility:visible}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen{left:auto;right:0;-webkit-transform:translate(0, 0);transform:translate(0, 0)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen.jw-open,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen.jw-open{-webkit-transform:translate(0, -10px);transform:translate(0, -10px)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen::after,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen::after{left:auto;right:9px}.jw-tooltip-time{height:auto;width:0;bottom:100%;line-height:normal;padding:0;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jw-tooltip-time .jw-overlay{bottom:0;min-height:0;width:auto}.jw-tooltip{bottom:57px;display:none;position:absolute}.jw-tooltip .jw-text{height:100%;white-space:nowrap;text-overflow:ellipsis;direction:unset;max-width:246px;overflow:hidden}.jw-flag-audio-player .jw-tooltip{display:none}.jw-flag-small-player .jw-time-thumb{display:none}.jwplayer .jw-shortcuts-tooltip{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column;z-index:1}.jwplayer .jw-shortcuts-tooltip.jw-open{display:flex}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-close{flex:0 0 auto;margin:5px 5px 5px auto}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container{display:flex;flex:1 1 auto;flex-flow:column;font-size:12px;margin:0 20px 20px;overflow-y:auto;padding:5px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar{background-color:transparent;width:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-title{font-weight:bold}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list{display:flex;max-width:340px;margin:0 10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-tooltip-descriptions{width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row{display:flex;align-items:center;justify-content:space-between;margin:10px 0;width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-description{margin-right:10px;max-width:70%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-key{background:#fefefe;color:#333;overflow:hidden;padding:7px 10px;text-overflow:ellipsis;white-space:nowrap}.jw-skip{color:rgba(255,255,255,0.8);cursor:default;position:absolute;display:flex;right:.75em;bottom:56px;padding:.5em;border:1px solid #333;background-color:#000;align-items:center;height:2em}.jw-skip.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-skip.jw-skippable{cursor:pointer;padding:.25em .75em}.jw-skip.jw-skippable:hover{cursor:pointer;color:#fff}.jw-skip.jw-skippable .jw-skip-icon{display:inline;height:24px;width:24px;margin:0}.jw-breakpoint-7 .jw-skip{padding:1.35em 1em;bottom:130px}.jw-breakpoint-7 .jw-skip .jw-text{font-size:1em;font-weight:normal}.jw-breakpoint-7 .jw-skip .jw-icon-inline{height:30px;width:30px}.jw-breakpoint-7 .jw-skip .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-skip .jw-skip-icon{display:none;margin-left:-0.75em;padding:0 .5em;pointer-events:none}.jw-skip .jw-skip-icon .jw-svg-icon-next{display:block;padding:0}.jw-skip .jw-text,.jw-skip .jw-skip-icon{vertical-align:middle;font-size:.7em}.jw-skip .jw-text{font-weight:bold}.jw-cast{background-size:cover;display:none;height:100%;position:relative;width:100%}.jw-cast-container{background:linear-gradient(180deg, rgba(25,25,25,0.75), rgba(25,25,25,0.25), rgba(25,25,25,0));left:0;padding:20px 20px 80px;position:absolute;top:0;width:100%}.jw-cast-text{color:#fff;font-size:1.6em}.jw-breakpoint--1 .jw-cast-text,.jw-breakpoint-0 .jw-cast-text{font-size:1.15em}.jw-breakpoint-1 .jw-cast-text,.jw-breakpoint-2 .jw-cast-text,.jw-breakpoint-3 .jw-cast-text{font-size:1.3em}.jw-nextup-container{position:absolute;bottom:66px;left:0;background-color:transparent;cursor:pointer;margin:0 auto;padding:12px;pointer-events:none;right:0;text-align:right;visibility:hidden;width:100%}.jw-settings-open .jw-nextup-container,.jw-info-open .jw-nextup-container{display:none}.jw-breakpoint-7 .jw-nextup-container{padding:60px}.jw-flag-small-player .jw-nextup-container{padding:0 12px 0 0}.jw-flag-small-player .jw-nextup-container .jw-nextup-title,.jw-flag-small-player .jw-nextup-container .jw-nextup-duration,.jw-flag-small-player .jw-nextup-container .jw-nextup-close{display:none}.jw-flag-small-player .jw-nextup-container .jw-nextup-tooltip{height:30px}.jw-flag-small-player .jw-nextup-container .jw-nextup-header{font-size:12px}.jw-flag-small-player .jw-nextup-container .jw-nextup-body{justify-content:center;align-items:center;padding:.75em .3em}.jw-flag-small-player .jw-nextup-container .jw-nextup-thumbnail{width:50%}.jw-flag-small-player .jw-nextup-container .jw-nextup{max-width:65px}.jw-flag-small-player .jw-nextup-container .jw-nextup.jw-nextup-thumbnail-visible{max-width:120px}.jw-nextup{background:#333;border-radius:0;box-shadow:0 0 10px rgba(0,0,0,0.5);color:rgba(255,255,255,0.8);display:inline-block;max-width:280px;overflow:hidden;opacity:0;position:relative;width:64%;pointer-events:all;-webkit-transform:translate(0, -5px);transform:translate(0, -5px);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform;transition-delay:0s}.jw-nextup:hover .jw-nextup-tooltip{color:#fff}.jw-nextup.jw-nextup-thumbnail-visible{max-width:400px}.jw-nextup.jw-nextup-thumbnail-visible .jw-nextup-thumbnail{display:block}.jw-nextup-container-visible{visibility:visible}.jw-nextup-container-visible .jw-nextup{opacity:1;-webkit-transform:translate(0, 0);transform:translate(0, 0);transition-delay:0s, 0s, 150ms}.jw-nextup-tooltip{display:flex;height:80px}.jw-nextup-thumbnail{width:120px;background-position:center;background-size:cover;flex:0 0 auto;display:none}.jw-nextup-body{flex:1 1 auto;overflow:hidden;padding:.75em .875em;display:flex;flex-flow:column wrap;justify-content:space-between}.jw-nextup-header,.jw-nextup-title{font-size:14px;line-height:1.35}.jw-nextup-header{font-weight:bold}.jw-nextup-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.jw-nextup-duration{align-self:flex-end;text-align:right;font-size:12px}.jw-nextup-close{height:24px;width:24px;border:none;color:rgba(255,255,255,0.8);cursor:pointer;margin:6px;visibility:hidden}.jw-nextup-close:hover{color:#fff}.jw-nextup-sticky .jw-nextup-close{visibility:visible}.jw-autostart-mute{position:absolute;bottom:0;right:12px;height:44px;width:44px;background-color:rgba(33,33,33,0.4);padding:5px 4px 5px 6px;display:none}.jwplayer.jw-flag-autostart:not(.jw-flag-media-audio) .jw-nextup{display:none}.jw-settings-menu{position:absolute;bottom:57px;right:12px;align-items:flex-start;background-color:#333;display:none;flex-flow:column nowrap;max-width:284px;pointer-events:auto}.jw-settings-open .jw-settings-menu{display:flex}.jw-breakpoint-7 .jw-settings-menu{bottom:130px;right:60px;max-height:none;max-width:none;height:35%;width:25%}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline{height:60px;width:60px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-tooltip .jw-text{font-size:1em}.jw-breakpoint-6 .jw-settings-menu,.jw-breakpoint-5 .jw-settings-menu{height:232px;width:284px;max-height:232px}.jw-breakpoint-4 .jw-settings-menu,.jw-breakpoint-3 .jw-settings-menu{height:192px;width:284px;max-height:192px}.jw-breakpoint-2 .jw-settings-menu{height:179px;width:284px;max-height:179px}.jw-flag-small-player .jw-settings-menu{max-width:none}.jw-settings-menu .jw-icon.jw-button-color::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon.jw-button-color[aria-checked="true"]::after{opacity:1}.jw-settings-topbar{align-items:center;background-color:rgba(0,0,0,0.4);display:flex;flex:0 0 auto;padding:3px 5px 0;width:100%}.jw-settings-topbar .jw-settings-close{margin-left:auto}.jw-settings-submenu{display:none;flex:1 1 auto;overflow-y:auto;padding:8px 20px 0 5px}.jw-settings-submenu::-webkit-scrollbar{background-color:transparent;width:6px}.jw-settings-submenu::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-settings-submenu.jw-settings-submenu-active{display:block}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item{font-size:1em;padding:11px 0 11px 30px}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-settings-item-active::before{justify-content:flex-end}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-auto-label{font-size:.85em;padding-left:10px}.jw-flag-touch .jw-settings-submenu{overflow-y:scroll;-webkit-overflow-scrolling:touch}.jw-auto-label{font-size:10px;font-weight:initial;opacity:.75;padding-left:5px}.jw-settings-content-item{position:relative;color:rgba(255,255,255,0.8);cursor:pointer;font-size:12px;line-height:1;padding:7px 0 7px 15px;width:100%;text-align:left;outline:none}.jw-settings-content-item:hover{color:#fff}.jw-settings-content-item:focus{font-weight:bold}.jw-flag-small-player .jw-settings-content-item{line-height:1.75}.jw-settings-content-item.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-settings-item-active{font-weight:bold;position:relative}.jw-settings-item-active::before{height:100%;width:1em;align-items:center;content:"\\2022";display:inline-flex;justify-content:center}.jw-breakpoint-2 .jw-settings-open .jw-display-container,.jw-flag-small-player .jw-settings-open .jw-display-container,.jw-flag-touch .jw-settings-open .jw-display-container{display:none}.jw-breakpoint-2 .jw-settings-open.jw-controls,.jw-flag-small-player .jw-settings-open.jw-controls,.jw-flag-touch .jw-settings-open.jw-controls{z-index:1}.jw-flag-small-player .jw-settings-open .jw-controlbar{display:none}.jw-settings-open .jw-icon-settings::after{opacity:1}.jw-settings-open .jw-tooltip-settings{display:none}.jw-sharing-link{cursor:pointer}.jw-shortcuts-container .jw-switch{position:relative;display:inline-block;transition:ease-out .15s;transition-property:opacity, background;border-radius:18px;width:80px;height:20px;padding:10px;background:rgba(80,80,80,0.8);cursor:pointer;font-size:inherit;vertical-align:middle}.jw-shortcuts-container .jw-switch .jw-switch-knob{position:absolute;top:2px;left:1px;transition:ease-out .15s;box-shadow:0 0 10px rgba(0,0,0,0.4);border-radius:13px;width:15px;height:15px;background:#fefefe}.jw-shortcuts-container .jw-switch:before,.jw-shortcuts-container .jw-switch:after{position:absolute;top:3px;transition:inherit;color:#fefefe}.jw-shortcuts-container .jw-switch:before{content:attr(data-jw-switch-disabled);right:8px}.jw-shortcuts-container .jw-switch:after{content:attr(data-jw-switch-enabled);left:8px;opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]{background:#475470}.jw-shortcuts-container .jw-switch[aria-checked="true"]:before{opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]:after{opacity:1}.jw-shortcuts-container .jw-switch[aria-checked="true"] .jw-switch-knob{left:60px}.jw-idle-icon-text{display:none;line-height:1;position:absolute;text-align:center;text-indent:.35em;top:100%;white-space:nowrap;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.jw-idle-label{border-radius:50%;color:#fff;-webkit-filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));font:normal 16px/1 Arial,Helvetica,sans-serif;position:relative;transition:background-color 150ms cubic-bezier(0, .25, .25, 1);transition-property:background-color,-webkit-filter;transition-property:background-color,filter;transition-property:background-color,filter,-webkit-filter;-webkit-font-smoothing:antialiased}.jw-state-idle .jw-icon-display.jw-idle-label .jw-idle-icon-text{display:block}.jw-state-idle .jw-icon-display.jw-idle-label .jw-svg-icon-play{-webkit-transform:scale(.7, .7);transform:scale(.7, .7)}.jw-breakpoint-0.jw-state-idle .jw-icon-display.jw-idle-label,.jw-breakpoint--1.jw-state-idle .jw-icon-display.jw-idle-label{font-size:12px}.jw-info-overlay{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column}.jw-info-overlay .jw-info-close{flex:0 0 auto;margin:5px 5px 5px auto}.jw-info-open .jw-info-overlay{display:flex}.jw-info-container{display:flex;flex:1 1 auto;flex-flow:column;margin:0 20px 20px;overflow-y:auto;padding:5px}.jw-info-container [class*="jw-info"]:not(:first-of-type){color:rgba(255,255,255,0.8);padding-top:10px;font-size:12px}.jw-info-container .jw-info-description{margin-bottom:30px;text-align:start}.jw-info-container .jw-info-description:empty{display:none}.jw-info-container .jw-info-duration{text-align:start}.jw-info-container .jw-info-title{text-align:start;font-size:12px;font-weight:bold}.jw-info-container::-webkit-scrollbar{background-color:transparent;width:6px}.jw-info-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-info-clientid{align-self:flex-end;font-size:12px;color:rgba(255,255,255,0.8);margin:0 20px 20px 44px;text-align:right}.jw-flag-touch .jw-info-open .jw-display-container{display:none}@supports ((-webkit-filter: drop-shadow(0 0 3px #000)) or (filter: drop-shadow(0 0 3px #000))){.jwplayer.jw-ab-drop-shadow .jw-controls .jw-svg-icon,.jwplayer.jw-ab-drop-shadow .jw-controls .jw-icon.jw-text,.jwplayer.jw-ab-drop-shadow .jw-slider-container .jw-rail,.jwplayer.jw-ab-drop-shadow .jw-title{text-shadow:none;box-shadow:none;-webkit-filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3));filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3))}.jwplayer.jw-ab-drop-shadow .jw-button-color{opacity:.8;transition-property:color, opacity}.jwplayer.jw-ab-drop-shadow .jw-button-color:not(:hover){color:#fff;opacity:.8}.jwplayer.jw-ab-drop-shadow .jw-button-color:hover{opacity:1}.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0), hsla(0, 0%, 0%, 0.00787) 10.79%, hsla(0, 0%, 0%, 0.02963) 21.99%, hsla(0, 0%, 0%, 0.0625) 33.34%, hsla(0, 0%, 0%, 0.1037) 44.59%, hsla(0, 0%, 0%, 0.15046) 55.48%, hsla(0, 0%, 0%, 0.2) 65.75%, hsla(0, 0%, 0%, 0.24954) 75.14%, hsla(0, 0%, 0%, 0.2963) 83.41%, hsla(0, 0%, 0%, 0.3375) 90.28%, hsla(0, 0%, 0%, 0.37037) 95.51%, hsla(0, 0%, 0%, 0.39213) 98.83%, hsla(0, 0%, 0%, 0.4));mix-blend-mode:multiply;transition-property:opacity}.jw-state-idle.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0.2), hsla(0, 0%, 0%, 0.19606) 1.17%, hsla(0, 0%, 0%, 0.18519) 4.49%, hsla(0, 0%, 0%, 0.16875) 9.72%, hsla(0, 0%, 0%, 0.14815) 16.59%, hsla(0, 0%, 0%, 0.12477) 24.86%, hsla(0, 0%, 0%, 0.1) 34.25%, hsla(0, 0%, 0%, 0.07523) 44.52%, hsla(0, 0%, 0%, 0.05185) 55.41%, hsla(0, 0%, 0%, 0.03125) 66.66%, hsla(0, 0%, 0%, 0.01481) 78.01%, hsla(0, 0%, 0%, 0.00394) 89.21%, hsla(0, 0%, 0%, 0));background-size:100% 7rem;background-position:50% 0}.jwplayer.jw-ab-drop-shadow.jw-state-idle .jw-controls{background-color:transparent}}.jw-video-thumbnail-container{position:relative;overflow:hidden}.jw-video-thumbnail-container:not(.jw-related-shelf-item-image){height:100%;width:100%}.jw-video-thumbnail-container.jw-video-thumbnail-generated{position:absolute;top:0;left:0}.jw-video-thumbnail-container:hover,.jw-related-item-content:hover .jw-video-thumbnail-container,.jw-related-shelf-item:hover .jw-video-thumbnail-container{cursor:pointer}.jw-video-thumbnail-container:hover .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-item-content:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-shelf-item:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail{position:absolute;top:50%;left:50%;bottom:unset;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:100%;height:auto;min-width:100%;min-height:100%;opacity:0;transition:opacity .3s ease;object-fit:cover;background:#000}.jw-related-item-next-up .jw-video-thumbnail-container .jw-video-thumbnail{height:100%;width:auto}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-visible:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-completed{opacity:0}.jw-video-thumbnail-container .jw-video-thumbnail~.jw-svg-icon-play{display:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-shelf-item-aspect{pointer-events:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-item-poster-content{pointer-events:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-state-idle .jw-controls{background:rgba(0,0,0,0.4)}.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay),.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay){display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon:focus{border:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon .jw-svg-icon-buffer{-webkit-animation:jw-spin 2s linear infinite;animation:jw-spin 2s linear infinite;display:block}@-webkit-keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jwplayer.jw-state-buffering .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-pause{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-pause{display:block}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-controls-backdrop{opacity:0}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-logo-bottom-left,.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio):not(.jw-flag-autostart) .jw-logo-bottom-right{bottom:0}.jwplayer .jw-icon-playback .jw-svg-icon-stop{display:none}.jwplayer.jw-state-paused .jw-svg-icon-pause,.jwplayer.jw-state-idle .jw-svg-icon-pause,.jwplayer.jw-state-error .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-svg-icon-pause{display:none}.jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-complete .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-play{display:none}.jwplayer:not(.jw-state-buffering) .jw-svg-icon-buffer{display:none}.jwplayer:not(.jw-state-complete) .jw-svg-icon-replay{display:none}.jwplayer:not(.jw-state-error) .jw-svg-icon-error{display:none}.jwplayer.jw-state-complete .jw-display .jw-icon-display .jw-svg-icon-replay{display:block}.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-state-complete .jw-controls{background:rgba(0,0,0,0.4);height:100%}.jw-state-idle .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-state-idle .jw-display-icon-rewind,.jwplayer.jw-state-buffering .jw-display-icon-rewind,.jwplayer.jw-state-complete .jw-display-icon-rewind,body .jw-error .jw-display-icon-rewind,body .jwplayer.jw-state-error .jw-display-icon-rewind,.jw-state-idle .jw-display-icon-next,.jwplayer.jw-state-buffering .jw-display-icon-next,.jwplayer.jw-state-complete .jw-display-icon-next,body .jw-error .jw-display-icon-next,body .jwplayer.jw-state-error .jw-display-icon-next{display:none}body .jw-error .jw-icon-display,body .jwplayer.jw-state-error .jw-icon-display{cursor:default}body .jw-error .jw-icon-display .jw-svg-icon-error,body .jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-error{display:block}body .jw-error .jw-icon-container{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-preview{display:none}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title{padding-top:4px}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-primary{width:auto;display:inline-block;padding-right:.5ch}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-secondary{width:auto;display:inline-block;padding-left:0}body .jwplayer.jw-state-error .jw-controlbar,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-controlbar{display:none}body .jwplayer.jw-state-error .jw-settings-menu,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-settings-menu{height:100%;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}body .jwplayer.jw-state-error .jw-display,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-display{padding:0}body .jwplayer.jw-state-error .jw-logo-bottom-left,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-left,body .jwplayer.jw-state-error .jw-logo-bottom-right,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-right{bottom:0}.jwplayer.jw-state-playing.jw-flag-user-inactive .jw-display{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-state-playing:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display,.jwplayer.jw-state-paused:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting):not(.jw-flag-play-rejected) .jw-display{display:none}.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-rewind,.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-next{display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-text,.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-flag-casting:not(.jw-flag-audio-player) .jw-cast{display:block}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-display-icon-container{display:none}.jwplayer.jw-flag-casting .jw-icon-hd,.jwplayer.jw-flag-casting .jw-captions,.jwplayer.jw-flag-casting .jw-icon-fullscreen,.jwplayer.jw-flag-casting .jw-icon-audio-tracks{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-volume{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-airplay{color:#fff}.jw-state-playing.jw-flag-casting:not(.jw-flag-audio-player) .jw-display,.jw-state-paused.jw-flag-casting:not(.jw-flag-audio-player) .jw-display{display:table}.jwplayer.jw-flag-cast-available .jw-icon-cast,.jwplayer.jw-flag-cast-available .jw-icon-airplay{display:flex}.jwplayer.jw-flag-cardboard-available .jw-icon-cardboard{display:flex}.jwplayer.jw-flag-live .jw-display-icon-rewind{visibility:hidden}.jwplayer.jw-flag-live .jw-controlbar .jw-text-elapsed,.jwplayer.jw-flag-live .jw-controlbar .jw-text-duration,.jwplayer.jw-flag-live .jw-controlbar .jw-text-countdown,.jwplayer.jw-flag-live .jw-controlbar .jw-slider-time{display:none}.jwplayer.jw-flag-live .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-live .jw-controlbar .jw-overlay:after{display:none}.jwplayer.jw-flag-live .jw-nextup-container{bottom:44px}.jwplayer.jw-flag-live .jw-text-elapsed,.jwplayer.jw-flag-live .jw-text-duration{display:none}.jwplayer.jw-flag-live .jw-text-live{cursor:default}.jwplayer.jw-flag-live .jw-text-live:hover{color:rgba(255,255,255,0.8)}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-stop,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-stop{display:block}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-text-live{height:24px;width:auto;align-items:center;border-radius:1px;color:rgba(255,255,255,0.8);display:flex;font-size:12px;font-weight:bold;margin-right:10px;padding:0 1ch;text-rendering:geometricPrecision;text-transform:uppercase;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:box-shadow,color}.jw-text-live::before{height:8px;width:8px;background-color:currentColor;border-radius:50%;margin-right:6px;opacity:1;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-text-live.jw-dvr-live{box-shadow:inset 0 0 0 2px currentColor}.jw-text-live.jw-dvr-live::before{opacity:.5}.jw-text-live.jw-dvr-live:hover{color:#fff}.jwplayer.jw-flag-controls-hidden .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-controls-hidden:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-controls-hidden .jw-plugin{bottom:.5em}.jwplayer.jw-flag-controls-hidden .jw-nextup-container{bottom:0}.jw-flag-controls-hidden .jw-controlbar,.jw-flag-controls-hidden .jw-display{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-controls-hidden .jw-controls-backdrop{opacity:0}.jw-flag-controls-hidden .jw-logo{visibility:visible}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-plugin{bottom:.5em}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-nextup-container{bottom:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-controls-hidden) .jw-media{cursor:none;-webkit-cursor-visibility:auto-hide}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing.jw-flag-casting .jw-display{display:table}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-ads) .jw-autostart-mute{display:flex}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting .jw-nextup-container{bottom:66px}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting.jw-state-idle .jw-nextup-container{display:none}.jw-flag-media-audio .jw-preview{display:block}.jwplayer.jw-flag-ads .jw-preview,.jwplayer.jw-flag-ads .jw-logo,.jwplayer.jw-flag-ads .jw-captions.jw-captions-enabled,.jwplayer.jw-flag-ads .jw-nextup-container,.jwplayer.jw-flag-ads .jw-text-duration,.jwplayer.jw-flag-ads .jw-text-elapsed{display:none}.jwplayer.jw-flag-ads video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-rewind,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-next,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-display{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player.jw-state-buffering .jw-display-icon-display{display:inline-block}.jwplayer.jw-flag-ads .jw-controlbar{flex-wrap:wrap-reverse}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time{height:auto;padding:0;pointer-events:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-slider-container{height:5px}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-rail,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-knob,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-buffer,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-cue,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-icon-settings{display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-progress{-webkit-transform:none;transform:none;top:auto}.jwplayer.jw-flag-ads .jw-controlbar .jw-tooltip,.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-tooltip:not(.jw-icon-volume),.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-inline:not(.jw-icon-playback):not(.jw-icon-fullscreen):not(.jw-icon-volume){display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-volume-tip{padding:13px 0}.jwplayer.jw-flag-ads .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid) .jw-controls .jw-controlbar,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart .jw-controls .jw-controlbar{display:flex;pointer-events:all;visibility:visible;opacity:1}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-user-inactive .jw-controls-backdrop,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart.jw-flag-user-inactive .jw-controls-backdrop{opacity:1;background-size:100% 60px}.jwplayer.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-ads-vpaid .jw-skip,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-skip{display:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls{background:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls::after{content:none}.jwplayer.jw-flag-ads-hide-controls .jw-controls-backdrop,.jwplayer.jw-flag-ads-hide-controls .jw-controls{display:none !important}.jw-flag-overlay-open-related .jw-controls,.jw-flag-overlay-open-related .jw-title,.jw-flag-overlay-open-related .jw-logo{display:none}.jwplayer.jw-flag-rightclick-open{overflow:visible}.jwplayer.jw-flag-rightclick-open .jw-rightclick{z-index:16777215}body .jwplayer.jw-flag-flash-blocked .jw-controls,body .jwplayer.jw-flag-flash-blocked .jw-overlays,body .jwplayer.jw-flag-flash-blocked .jw-controls-backdrop,body .jwplayer.jw-flag-flash-blocked .jw-preview{display:none}body .jwplayer.jw-flag-flash-blocked .jw-error-msg{top:25%}.jw-flag-touch.jw-breakpoint-7 .jw-captions,.jw-flag-touch.jw-breakpoint-6 .jw-captions,.jw-flag-touch.jw-breakpoint-5 .jw-captions,.jw-flag-touch.jw-breakpoint-4 .jw-captions,.jw-flag-touch.jw-breakpoint-7 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-6 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-5 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-4 .jw-nextup-container{bottom:4.25em}.jw-flag-touch .jw-controlbar .jw-icon-volume{display:flex}.jw-flag-touch .jw-display,.jw-flag-touch .jw-display-container,.jw-flag-touch .jw-display-controls{pointer-events:none}.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-rewind,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-rewind{display:none}.jw-flag-touch.jw-state-paused.jw-flag-dragging .jw-display{display:none}.jw-flag-audio-player{background-color:#000}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:44px}.jw-flag-audio-player:not(.jw-flag-live) .jw-spacer{display:none}.jw-flag-audio-player .jw-preview,.jw-flag-audio-player .jw-display,.jw-flag-audio-player .jw-title,.jw-flag-audio-player .jw-nextup-container{display:none}.jw-flag-audio-player .jw-controlbar{position:relative}.jw-flag-audio-player .jw-controlbar .jw-button-container{padding-right:3px;padding-left:0}.jw-flag-audio-player .jw-controlbar .jw-icon-tooltip,.jw-flag-audio-player .jw-controlbar .jw-icon-inline{display:none}.jw-flag-audio-player .jw-controlbar .jw-icon-volume,.jw-flag-audio-player .jw-controlbar .jw-icon-playback,.jw-flag-audio-player .jw-controlbar .jw-icon-next,.jw-flag-audio-player .jw-controlbar .jw-icon-rewind,.jw-flag-audio-player .jw-controlbar .jw-icon-cast,.jw-flag-audio-player .jw-controlbar .jw-text-live,.jw-flag-audio-player .jw-controlbar .jw-icon-airplay,.jw-flag-audio-player .jw-controlbar .jw-logo-button,.jw-flag-audio-player .jw-controlbar .jw-text-elapsed,.jw-flag-audio-player .jw-controlbar .jw-text-duration{display:flex;flex:0 0 auto}.jw-flag-audio-player .jw-controlbar .jw-text-duration,.jw-flag-audio-player .jw-controlbar .jw-text-countdown{padding-right:10px}.jw-flag-audio-player .jw-controlbar .jw-slider-time{flex:0 1 auto;align-items:center;display:flex;order:1}.jw-flag-audio-player .jw-controlbar .jw-icon-volume{margin-right:0;transition:margin-right 150ms cubic-bezier(0, .25, .25, 1)}.jw-flag-audio-player .jw-controlbar .jw-icon-volume .jw-overlay{display:none}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container{transition:width 300ms cubic-bezier(0, .25, .25, 1);width:0}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open{width:140px}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open .jw-slider-volume{padding-right:24px;transition:opacity 300ms;opacity:1}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open~.jw-slider-time{flex:1 1 auto;width:auto;transition:opacity 300ms, width 300ms}.jw-flag-audio-player .jw-controlbar .jw-slider-volume{opacity:0}.jw-flag-audio-player .jw-controlbar .jw-slider-volume .jw-knob{-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.jw-flag-audio-player .jw-controlbar .jw-slider-volume~.jw-icon-volume{margin-right:140px}.jw-flag-audio-player.jw-breakpoint-1 .jw-horizontal-volume-container.jw-open~.jw-slider-time,.jw-flag-audio-player.jw-breakpoint-2 .jw-horizontal-volume-container.jw-open~.jw-slider-time{opacity:0}.jw-flag-audio-player.jw-flag-small-player .jw-text-elapsed,.jw-flag-audio-player.jw-flag-small-player .jw-text-duration{display:none}.jw-flag-audio-player.jw-flag-ads .jw-slider-time{display:none}.jw-hidden{display:none}',""])}]]); \ No newline at end of file diff --git a/ui/v2.5/public/jwplayer/jwplayer.core.controls.html5.js b/ui/v2.5/public/jwplayer/jwplayer.core.controls.html5.js new file mode 100644 index 00000000000..a087c11a8ab --- /dev/null +++ b/ui/v2.5/public/jwplayer/jwplayer.core.controls.html5.js @@ -0,0 +1,95 @@ +/*! +JW Player version 8.11.5 +Copyright (c) 2019, JW Player, All Rights Reserved +https://github.com/jwplayer/jwplayer/blob/v8.11.5/README.md + +This source code and its use and distribution is subject to the terms and conditions of the applicable license agreement. +https://www.jwplayer.com/tos/ + +This product includes portions of other software. For the full text of licenses, see below: + +JW Player Third Party Software Notices and/or Additional Terms and Conditions + +************************************************************************************************** +The following software is used under Apache License 2.0 +************************************************************************************************** + +vtt.js v0.13.0 +Copyright (c) 2019 Mozilla (http://mozilla.org) +https://github.com/mozilla/vtt.js/blob/v0.13.0/LICENSE + +* * * + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and +limitations under the License. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under MIT license +************************************************************************************************** + +Underscore.js v1.6.0 +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +https://github.com/jashkenas/underscore/blob/1.6.0/LICENSE + +Backbone backbone.events.js v1.1.2 +Copyright (c) 2010-2014 Jeremy Ashkenas, DocumentCloud +https://github.com/jashkenas/backbone/blob/1.1.2/LICENSE + +Promise Polyfill v7.1.1 +Copyright (c) 2014 Taylor Hakes and Forbes Lindesay +https://github.com/taylorhakes/promise-polyfill/blob/v7.1.1/LICENSE + +can-autoplay.js v3.0.0 +Copyright (c) 2017 video-dev +https://github.com/video-dev/can-autoplay/blob/v3.0.0/LICENSE + +* * * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under W3C license +************************************************************************************************** + +Intersection Observer v0.5.0 +Copyright (c) 2016 Google Inc. (http://google.com) +https://github.com/w3c/IntersectionObserver/blob/v0.5.0/LICENSE.md + +* * * + +W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. + +This work is being provided by the copyright holders under the following license. + +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: + +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. + +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." + +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders. +*/ +(window.webpackJsonpjwplayer=window.webpackJsonpjwplayer||[]).push([[4,1,2,3,9],[,,,,,,,,,,,,,,,,,function(e,t,i){"use strict";i.r(t);var n,o=i(8),a=i(3),r=i(7),s=i(43),l=i(5),c=i(15),u=i(40);function d(e){return n||(n=new DOMParser),Object(l.r)(Object(l.s)(n.parseFromString(e,"image/svg+xml").documentElement))}var p=function(e,t,i,n){var o=document.createElement("div");o.className="jw-icon jw-icon-inline jw-button-color jw-reset "+e,o.setAttribute("role","button"),o.setAttribute("tabindex","0"),i&&o.setAttribute("aria-label",i),o.style.display="none";var a=new u.a(o).on("click tap enter",t||function(){});return n&&Array.prototype.forEach.call(n,(function(e){"string"==typeof e?o.appendChild(d(e)):o.appendChild(e)})),{ui:a,element:function(){return o},toggle:function(e){e?this.show():this.hide()},show:function(){o.style.display=""},hide:function(){o.style.display="none"}}},w=i(0),f=i(67),h=i.n(f),j=i(68),g=i.n(j),b=i(69),m=i.n(b),v=i(70),y=i.n(v),k=i(71),x=i.n(k),O=i(72),T=i.n(O),C=i(73),_=i.n(C),S=i(74),M=i.n(S),E=i(75),z=i.n(E),A=i(76),P=i.n(A),L=i(77),I=i.n(L),R=i(78),B=i.n(R),V=i(79),H=i.n(V),N=i(80),F=i.n(N),D=i(81),q=i.n(D),U=i(82),W=i.n(U),Q=i(83),X=i.n(Q),Y=i(84),K=i.n(Y),J=i(85),Z=i.n(J),G=i(86),$=i.n(G),ee=i(87),te=i.n(ee),ie=i(88),ne=i.n(ie),oe=i(89),ae=i.n(oe),re=null;function se(e){var t=de().querySelector(ce(e));if(t)return ue(t);throw new Error("Icon not found "+e)}function le(e){var t=de().querySelectorAll(e.split(",").map(ce).join(","));if(!t.length)throw new Error("Icons not found "+e);return Array.prototype.map.call(t,(function(e){return ue(e)}))}function ce(e){return".jw-svg-icon-".concat(e)}function ue(e){return e.cloneNode(!0)}function de(){return re||(re=d(""+h.a+g.a+m.a+y.a+x.a+T.a+_.a+M.a+z.a+P.a+I.a+B.a+H.a+F.a+q.a+W.a+X.a+K.a+Z.a+$.a+te.a+ne.a+ae.a+"")),re}var pe=i(10);function we(e,t){for(var i=0;i10&&delete fe[t[0]];var i=d(e);fe[e]=i}return fe[e].cloneNode(!0)}(t):((r=document.createElement("div")).className="jw-icon jw-button-image jw-button-color jw-reset",t&&Object(pe.d)(r,{backgroundImage:"url(".concat(t,")")})),s.appendChild(r),new u.a(s).on("click tap enter",n,this),s.addEventListener("mousedown",(function(e){e.preventDefault()})),this.id=o,this.buttonElement=s}var t,i,n;return t=e,(i=[{key:"element",value:function(){return this.buttonElement}},{key:"toggle",value:function(e){e?this.show():this.hide()}},{key:"show",value:function(){this.buttonElement.style.display=""}},{key:"hide",value:function(){this.buttonElement.style.display="none"}}])&&we(t.prototype,i),n&&we(t,n),e}(),je=i(11);function ge(e,t){for(var i=0;i=0&&(t.left-=i,t.right-=i),t},me=function(){function e(t,i){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Object(w.h)(this,r.a),this.className=t+" jw-background-color jw-reset",this.orientation=i}var t,i,n;return t=e,(i=[{key:"setup",value:function(){this.el=Object(l.e)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return''}(this.className,"jw-slider-"+this.orientation)),this.elementRail=this.el.getElementsByClassName("jw-slider-container")[0],this.elementBuffer=this.el.getElementsByClassName("jw-buffer")[0],this.elementProgress=this.el.getElementsByClassName("jw-progress")[0],this.elementThumb=this.el.getElementsByClassName("jw-knob")[0],this.ui=new u.a(this.element(),{preventScrolling:!0}).on("dragStart",this.dragStart,this).on("drag",this.dragMove,this).on("dragEnd",this.dragEnd,this).on("click tap",this.tap,this)}},{key:"dragStart",value:function(){this.trigger("dragStart"),this.railBounds=be(this.elementRail)}},{key:"dragEnd",value:function(e){this.dragMove(e),this.trigger("dragEnd")}},{key:"dragMove",value:function(e){var t,i,n=this.railBounds=this.railBounds?this.railBounds:be(this.elementRail);return i="horizontal"===this.orientation?(t=e.pageX)n.right?100:100*Object(s.a)((t-n.left)/n.width,0,1):(t=e.pageY)>=n.bottom?0:t<=n.top?100:100*Object(s.a)((n.height-(t-n.top))/n.height,0,1),this.render(i),this.update(i),!1}},{key:"tap",value:function(e){this.railBounds=be(this.elementRail),this.dragMove(e)}},{key:"limit",value:function(e){return e}},{key:"update",value:function(e){this.trigger("update",{percentage:e})}},{key:"render",value:function(e){e=Math.max(0,Math.min(e,100)),"horizontal"===this.orientation?(this.elementThumb.style.left=e+"%",this.elementProgress.style.width=e+"%"):(this.elementThumb.style.bottom=e+"%",this.elementProgress.style.height=e+"%")}},{key:"updateBuffer",value:function(e){this.elementBuffer.style.width=e+"%"}},{key:"element",value:function(){return this.el}}])&&ge(t.prototype,i),n&&ge(t,n),e}(),ve=function(e,t){e&&t&&(e.setAttribute("aria-label",t),e.setAttribute("role","button"),e.setAttribute("tabindex","0"))};function ye(e,t){for(var i=0;i0&&Array.prototype.forEach.call(o,(function(e){"string"==typeof e?a.el.appendChild(d(e)):a.el.appendChild(e)}))}var t,i,n;return t=e,(i=[{key:"addContent",value:function(e){this.content&&this.removeContent(),this.content=e,this.tooltip.appendChild(e)}},{key:"removeContent",value:function(){this.content&&(this.tooltip.removeChild(this.content),this.content=null)}},{key:"hasContent",value:function(){return!!this.content}},{key:"element",value:function(){return this.el}},{key:"openTooltip",value:function(e){this.isOpen||(this.trigger("open-"+this.componentType,e,{isOpen:!0}),this.isOpen=!0,Object(l.v)(this.el,this.openClass,this.isOpen))}},{key:"closeTooltip",value:function(e){this.isOpen&&(this.trigger("close-"+this.componentType,e,{isOpen:!1}),this.isOpen=!1,Object(l.v)(this.el,this.openClass,this.isOpen))}},{key:"toggleOpenState",value:function(e){this.isOpen?this.closeTooltip(e):this.openTooltip(e)}}])&&ye(t.prototype,i),n&&ye(t,n),e}(),xe=i(22),Oe=i(57);function Te(e,t){for(var i=0;i=this.thumbnails.length&&(t=this.thumbnails.length-1);var i=this.thumbnails[t].img;return i.indexOf("://")<0&&(i=this.vttPath?this.vttPath+"/"+i:i),i},loadThumbnail:function(e){var t=this.chooseThumbnail(e),i={margin:"0 auto",backgroundPosition:"0 0"};if(t.indexOf("#xywh")>0)try{var n=/(.+)#xywh=(\d+),(\d+),(\d+),(\d+)/.exec(t);t=n[1],i.backgroundPosition=-1*n[2]+"px "+-1*n[3]+"px",i.width=n[4],this.timeTip.setWidth(+i.width),i.height=n[5]}catch(e){return}else this.individualImage||(this.individualImage=new Image,this.individualImage.onload=Object(w.a)((function(){this.individualImage.onload=null,this.timeTip.image({width:this.individualImage.width,height:this.individualImage.height}),this.timeTip.setWidth(this.individualImage.width)}),this),this.individualImage.src=t);return i.backgroundImage='url("'+t+'")',i},showThumbnail:function(e){this._model.get("containerWidth")<=420||this.thumbnails.length<1||this.timeTip.image(this.loadThumbnail(e))},resetThumbnails:function(){this.timeTip.image({backgroundImage:"",width:0,height:0}),this.thumbnails=[]}};function Ee(e,t,i){return(Ee="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,i){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Re(e)););return e}(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(i):o.value}})(e,t,i||e)}function ze(e){return(ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pe(e,t){for(var i=0;i-1&&(n="Live")}var d=this.timeTip;d.update(n),this.textLength!==n.length&&(this.textLength=n.length,d.resetWidth()),this.showThumbnail(u),Object(l.a)(d.el,"jw-open");var p=d.getWidth(),w=a.width/100,f=o-a.width,h=0;p>f&&(h=(p-f)/(200*w));var j=100*Math.min(1-h,Math.max(h,c)).toFixed(3);Object(pe.d)(d.el,{left:j+"%"})}}},{key:"hideTimeTooltip",value:function(){Object(l.o)(this.timeTip.el,"jw-open")}},{key:"updateCues",value:function(e,t){var i=this;this.resetCues(),t&&t.length&&(t.forEach((function(e){i.addCue(e)})),this.drawCues())}},{key:"updateAriaText",value:function(){var e=this._model;if(!e.get("seeking")){var t=e.get("position"),i=e.get("duration"),n=Object(je.timeFormat)(t);"DVR"!==this.streamType&&(n+=" of ".concat(Object(je.timeFormat)(i)));var o=this.el;document.activeElement!==o&&(this.timeUpdateKeeper.textContent=n),Object(l.t)(o,"aria-valuenow",t),Object(l.t)(o,"aria-valuetext",n)}}},{key:"reset",value:function(){this.resetThumbnails(),this.timeTip.resetWidth(),this.textLength=0}}]),t}(me);Object(w.h)(Ne.prototype,_e,Me);var Fe=Ne;function De(e,t){for(var i=0;i=75&&!e),Object(l.t)(r,"aria-valuenow",o),Object(l.t)(s,"aria-valuenow",o);var c="Volume ".concat(o,"%");Object(l.t)(r,"aria-valuetext",c),Object(l.t)(s,"aria-valuetext",c),document.activeElement!==r&&document.activeElement!==s&&(this._volumeAnnouncer.textContent=c)}}},{key:"onCastAvailable",value:function(e,t){this.elements.cast.toggle(t)}},{key:"onCastActive",value:function(e,t){this.elements.fullscreen.toggle(!t),this.elements.cast.button&&Object(l.v)(this.elements.cast.button,"jw-off",!t)}},{key:"onElapsed",value:function(e,t){var i,n,o=e.get("duration");if("DVR"===e.get("streamType")){var a=Math.ceil(t),r=this._model.get("dvrSeekLimit");i=n=a>=-r?"":"-"+Object(je.timeFormat)(-(t+r)),e.set("dvrLive",a>=-r)}else i=Object(je.timeFormat)(t),n=Object(je.timeFormat)(o-t);this.elements.elapsed.textContent=i,this.elements.countdown.textContent=n}},{key:"onDuration",value:function(e,t){this.elements.duration.textContent=Object(je.timeFormat)(Math.abs(t))}},{key:"onAudioMode",value:function(e,t){var i=this.elements.time.element();t?this.elements.buttonContainer.insertBefore(i,this.elements.elapsed):Object(l.m)(this.el,i)}},{key:"element",value:function(){return this.el}},{key:"setAltText",value:function(e,t){this.elements.alt.textContent=t}},{key:"closeMenus",value:function(e){this.menus.forEach((function(t){e&&e.target===t.el||t.closeTooltip(e)}))}},{key:"rewind",value:function(){var e,t=0,i=this._model.get("currentTime");i?e=i-10:(e=this._model.get("position")-10,"DVR"===this._model.get("streamType")&&(t=this._model.get("duration"))),this._api.seek(Math.max(e,t),{reason:"interaction"})}},{key:"onState",value:function(e,t){var i=e.get("localization"),n=i.play;this.setPlayText(n),t===a.pb&&("LIVE"!==e.get("streamType")?(n=i.pause,this.setPlayText(n)):(n=i.stop,this.setPlayText(n))),Object(l.t)(this.elements.play.element(),"aria-label",n)}},{key:"onStreamTypeChange",value:function(e,t){var i="LIVE"===t,n="DVR"===t;this.elements.rewind.toggle(!i),this.elements.live.toggle(i||n),Object(l.t)(this.elements.live.element(),"tabindex",i?"-1":"0"),this.elements.duration.style.display=n?"none":"",this.onDuration(e,e.get("duration")),this.onState(e,e.get("state"))}},{key:"addLogo",value:function(e){var t=this.elements.buttonContainer,i=new he(e.file,this._model.get("localization").logo,(function(){e.link&&Object(l.l)(e.link,"_blank",{rel:"noreferrer"})}),"logo","jw-logo-button");e.link||Object(l.t)(i.element(),"tabindex","-1"),t.insertBefore(i.element(),t.querySelector(".jw-spacer").nextSibling)}},{key:"goToLiveEdge",value:function(){if("DVR"===this._model.get("streamType")){var e=Math.min(this._model.get("position"),-1),t=this._model.get("dvrSeekLimit");this._api.seek(Math.max(-t,e),{reason:"interaction"}),this._api.play({reason:"interaction"})}}},{key:"updateButtons",value:function(e,t,i){if(t){var n,o,a=this.elements.buttonContainer;t!==i&&i?(n=at(t,i),o=at(i,t),this.removeButtons(a,o)):n=t;for(var r=n.length-1;r>=0;r--){var s=n[r],l=new he(s.img,s.tooltip,s.callback,s.id,s.btnClass);s.tooltip&&$e(l.element(),s.id,s.tooltip);var c=void 0;"related"===l.id?c=this.elements.settingsButton.element():"share"===l.id?c=a.querySelector('[button="related"]')||this.elements.settingsButton.element():(c=this.elements.spacer.nextSibling)&&"logo"===c.getAttribute("button")&&(c=c.nextSibling),a.insertBefore(l.element(),c)}}}},{key:"removeButtons",value:function(e,t){for(var i=t.length;i--;){var n=e.querySelector('[button="'.concat(t[i].id,'"]'));n&&e.removeChild(n)}}},{key:"toggleCaptionsButtonState",value:function(e){var t=this.elements.captionsButton;t&&Object(l.v)(t.element(),"jw-off",!e)}},{key:"destroy",value:function(){var e=this;this._model.off(null,null,this),Object.keys(this.elements).forEach((function(t){var i=e.elements[t];i&&"function"==typeof i.destroy&&e.elements[t].destroy()})),this.ui.forEach((function(e){e.destroy()})),this.ui=[]}}])&&tt(t.prototype,i),n&&tt(t,n),e}(),lt=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return'
    ')+'
    ')+"
    "},ct=function(e){return'
    '+lt("rewind",e.rewind)+lt("display",e.playback)+lt("next",e.next)+"
    "};function ut(e,t){for(var i=0;i'.concat(a.playback,"
    ")),Object(l.a)(o.icon,"jw-idle-label"),o.icon.appendChild(s))}return o}var i,n,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&jt(e,t)}(t,e),i=t,(n=[{key:"element",value:function(){return this.el}}])&&wt(i.prototype,n),o&&wt(i,o),t}(r.a);function bt(e,t){for(var i=0;i0&&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]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";return'
    '+'
    '.concat(e,"
    ")+'
    '.concat(t,"
    ")+'
    '.concat(i,"
    ")+"
    "+'')+"
    "}());t.querySelector(".jw-nextup-close").appendChild(se("close")),this.addContent(t),this.closeButton=this.content.querySelector(".jw-nextup-close"),this.closeButton.setAttribute("aria-label",this.localization.close),this.tooltip=this.content.querySelector(".jw-nextup-tooltip");var i=this._model,n=i.player;this.enabled=!1,i.on("change:nextUp",this.onNextUp,this),n.change("duration",this.onDuration,this),n.change("position",this.onElapsed,this),n.change("streamType",this.onStreamType,this),n.change("state",(function(e,t){"complete"===t&&this.toggle(!1)}),this),this.closeUi=new u.a(this.closeButton,{directSelect:!0}).on("click tap enter",(function(){this.nextUpSticky=!1,this.toggle(!1)}),this),this.tooltipUi=new u.a(this.tooltip).on("click tap",this.click,this)}},{key:"loadThumbnail",value:function(e){return this.nextUpImage=new Image,this.nextUpImage.onload=function(){this.nextUpImage.onload=null}.bind(this),this.nextUpImage.src=e,{backgroundImage:'url("'+e+'")'}}},{key:"click",value:function(){var e=this.feedShownId;this.reset(),this._api.next({feedShownId:e,reason:"interaction"})}},{key:"toggle",value:function(e,t){if(this.enabled&&(Object(l.v)(this.container,"jw-nextup-sticky",!!this.nextUpSticky),this.shown!==e)){this.shown=e,Object(l.v)(this.container,"jw-nextup-container-visible",e),Object(l.v)(this._playerElement,"jw-flag-nextup",e);var i=this._model.get("nextUp");e&&i?(this.feedShownId=Object(et.b)(et.a),this.trigger("nextShown",{mode:i.mode,ui:"nextup",itemsShown:[i],feedData:i.feedData,reason:t,feedShownId:this.feedShownId})):this.feedShownId=""}}},{key:"setNextUpItem",value:function(e){var t=this;setTimeout((function(){if(t.thumbnail=t.content.querySelector(".jw-nextup-thumbnail"),Object(l.v)(t.content,"jw-nextup-thumbnail-visible",!!e.image),e.image){var i=t.loadThumbnail(e.image);Object(pe.d)(t.thumbnail,i)}t.header=t.content.querySelector(".jw-nextup-header"),t.header.textContent=Object(l.e)(t.localization.nextUp).textContent,t.title=t.content.querySelector(".jw-nextup-title");var n=e.title;t.title.textContent=n?Object(l.e)(n).textContent:"";var o=e.duration;o&&(t.duration=t.content.querySelector(".jw-nextup-duration"),t.duration.textContent="number"==typeof o?Object(je.timeFormat)(o):o)}),500)}},{key:"onNextUp",value:function(e,t){this.reset(),t||(t={showNextUp:!1}),this.enabled=!(!t.title&&!t.image),this.enabled&&(t.showNextUp||(this.nextUpSticky=!1,this.toggle(!1)),this.setNextUpItem(t))}},{key:"onDuration",value:function(e,t){if(t){var i=e.get("nextupoffset"),n=-10;i&&(n=Object(xt.d)(i,t)),n<0&&(n+=t),Object(xt.c)(i)&&t-5=this.offset;n&&void 0===i?(this.nextUpSticky=n,this.toggle(n,"time")):!n&&i&&this.reset()}}},{key:"onStreamType",value:function(e,t){"VOD"!==t&&(this.nextUpSticky=!1,this.toggle(!1))}},{key:"element",value:function(){return this.container}},{key:"addContent",value:function(e){this.content&&this.removeContent(),this.content=e,this.container.appendChild(e)}},{key:"removeContent",value:function(){this.content&&(this.container.removeChild(this.content),this.content=null)}},{key:"reset",value:function(){this.nextUpSticky=void 0,this.toggle(!1)}},{key:"destroy",value:function(){this.off(),this._model.off(null,null,this),this.closeUi&&this.closeUi.destroy(),this.tooltipUi&&this.tooltipUi.destroy()}}])&&Ot(t.prototype,i),n&&Ot(t,n),e}(),Ct=function(e,t){var i=e.featured,n=e.showLogo,o=e.type;return e.logo=n?'':"",'
  • ').concat(_t[o](e,t),"
  • ")},_t={link:function(e){var t=e.link,i=e.title,n=e.logo;return'').concat(n).concat(i||"","")},info:function(e,t){return'")},share:function(e,t){return'")},keyboardShortcuts:function(e,t){return'")}},St=i(23),Mt=i(6),Et=i(13);function zt(e,t){for(var i=0;iJW Player '.concat(e,""),a={items:[{type:"info"},{title:Object(Et.e)(n)?"".concat(o," ").concat(n):"".concat(n," ").concat(o),type:"link",featured:!0,showLogo:!0,link:"https://jwplayer.com/learn-more?e=".concat(At[i])}]},r=t.get("provider"),s=a.items;if(r&&r.name.indexOf("flash")>=0){var l="Flash Version "+Object(Mt.a)();s.push({title:l,type:"link",link:"http://www.adobe.com/software/flash/about/"})}return this.shortcutsTooltip&&s.splice(s.length-1,0,{type:"keyboardShortcuts"}),a}},{key:"rightClick",value:function(e){if(this.lazySetup(),this.mouseOverContext)return!1;this.hideMenu(),this.showMenu(e),this.addHideMenuHandlers()}},{key:"getOffset",value:function(e){var t=Object(l.c)(this.wrapperElement),i=e.pageX-t.left,n=e.pageY-t.top;return this.model.get("touchMode")&&(n-=100),{x:i,y:n}}},{key:"showMenu",value:function(e){var t=this,i=this.getOffset(e);return this.el.style.left=i.x+"px",this.el.style.top=i.y+"px",this.outCount=0,Object(l.a)(this.playerContainer,"jw-flag-rightclick-open"),Object(l.a)(this.el,"jw-open"),clearTimeout(this._menuTimeout),this._menuTimeout=setTimeout((function(){return t.hideMenu()}),3e3),!1}},{key:"hideMenu",value:function(e){e&&this.el&&this.el.contains(e.target)||(Object(l.o)(this.playerContainer,"jw-flag-rightclick-open"),Object(l.o)(this.el,"jw-open"))}},{key:"lazySetup",value:function(){var e,t,i,n,o=this,a=(e=this.buildArray(),t=this.model.get("localization"),i=e.items,n=(void 0===i?[]:i).map((function(e){return Ct(e,t)})),'
    '+'
      '.concat(n.join(""),"
    ")+"
    ");if(this.el){if(this.html!==a){this.html=a;var r=Pt(a);Object(l.h)(this.el);for(var s=r.childNodes.length;s--;)this.el.appendChild(r.firstChild)}}else this.html=a,this.el=Pt(this.html),this.wrapperElement.appendChild(this.el),this.hideMenuHandler=function(e){return o.hideMenu(e)},this.overHandler=function(){o.mouseOverContext=!0},this.outHandler=function(e){o.mouseOverContext=!1,e.relatedTarget&&!o.el.contains(e.relatedTarget)&&++o.outCount>1&&o.hideMenu()},this.infoOverlayHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.infoOverlay.open()},this.shortcutsTooltipHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.shortcutsTooltip.open()}}},{key:"setup",value:function(e,t,i){this.wrapperElement=i,this.model=e,this.mouseOverContext=!1,this.playerContainer=t,this.ui=new u.a(i).on("longPress",this.rightClick,this)}},{key:"addHideMenuHandlers",value:function(){this.removeHideMenuHandlers(),this.wrapperElement.addEventListener("touchstart",this.hideMenuHandler),document.addEventListener("touchstart",this.hideMenuHandler),o.OS.mobile||(this.wrapperElement.addEventListener("click",this.hideMenuHandler),document.addEventListener("click",this.hideMenuHandler),this.el.addEventListener("mouseover",this.overHandler),this.el.addEventListener("mouseout",this.outHandler)),this.el.querySelector(".jw-info-overlay-item").addEventListener("click",this.infoOverlayHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").addEventListener("click",this.shortcutsTooltipHandler)}},{key:"removeHideMenuHandlers",value:function(){this.wrapperElement&&(this.wrapperElement.removeEventListener("click",this.hideMenuHandler),this.wrapperElement.removeEventListener("touchstart",this.hideMenuHandler)),this.el&&(this.el.querySelector(".jw-info-overlay-item").removeEventListener("click",this.infoOverlayHandler),this.el.removeEventListener("mouseover",this.overHandler),this.el.removeEventListener("mouseout",this.outHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").removeEventListener("click",this.shortcutsTooltipHandler)),document.removeEventListener("click",this.hideMenuHandler),document.removeEventListener("touchstart",this.hideMenuHandler)}},{key:"destroy",value:function(){clearTimeout(this._menuTimeout),this.removeHideMenuHandlers(),this.el&&(this.hideMenu(),this.hideMenuHandler=null,this.el=null),this.wrapperElement&&(this.wrapperElement.oncontextmenu=null,this.wrapperElement=null),this.model&&(this.model=null),this.ui&&(this.ui.destroy(),this.ui=null)}}])&&zt(t.prototype,i),n&&zt(t,n),e}(),It=function(){return''};function Rt(e){var t=document.getElementsByClassName("jw-icon-settings")[0];if(t){var i="Right"===e?Object(l.k)(t):Object(l.n)(t);i&&i.focus()}}var Bt=function(e){Object.keys(e).forEach((function(t){e[t].deactivate()}))},Vt=function(e){return'"};var Ht=function(e){e.forEach((function(e){e.deactivate()}))},Nt=function(e){return'"};function Ft(e,t,i){var n,o=Object(l.e)(Nt(t)),a=new u.a(o).on("click tap enter",(function(e){i(e)})),r={activate:function(){Object(l.v)(o,"jw-settings-item-active",!0),o.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(l.v)(o,"jw-settings-item-active",!1),o.setAttribute("aria-checked","false"),n=!1},element:function(){return o},uiElement:function(){return a},destroy:function(){this.deactivate(),a.destroy()}};return Object.defineProperty(r,"active",{enumerable:!0,get:function(){return n}}),r}var Dt="audioTracks",qt="captions",Ut="quality",Wt="playbackRates",Qt=Ut,Xt=function(e,t,i,n,o){var a=e.getSubmenu(t);if(a)a.replaceContent(i);else{var r=p("jw-settings-".concat(t),(function(i){e.activateSubmenu(t,!1,i&&"enter"!==i.type),a.element().children[0].focus()}),t,[n]),s=r.element();s.setAttribute("role","menuitemradio"),s.setAttribute("aria-checked","false"),s.setAttribute("aria-label",o),(a=function(e,t,i){var n,o=[],a=Object(l.e)(Vt(e)),r=t.element();r.setAttribute("name",e),r.className+=" jw-submenu-"+e,t.show();var s=function(e,t){e?e.focus():void 0!==t&&o[t].element().focus()},c=function(e){var t=Object(l.k)(r),i=Object(l.n)(r),n=Object(l.k)(e.target),a=Object(l.n)(e.target),c=e.key.replace(/(Arrow|ape)/,"");switch(c){case"Tab":s(e.shiftKey?i:t);break;case"Left":s(i||Object(l.n)(document.getElementsByClassName("jw-icon-settings")[0]));break;case"Up":s(a,o.length-1);break;case"Right":s(t);break;case"Down":s(n,0)}e.preventDefault(),"Esc"!==c&&e.stopPropagation()},u={addContent:function(e){e&&(e.forEach((function(e){a.appendChild(e.element()),e.element().setAttribute("tabindex","-1"),e.element().addEventListener("keydown",c)})),o=e)},replaceContent:function(e){u.removeContent(),this.addContent(e)},removeContent:function(){o.forEach((function(e){e.element().removeEventListener("keydown",c)})),Object(l.h)(a),o=[]},getItems:function(){return o},activate:function(){Object(l.v)(a,"jw-settings-submenu-active",!0),a.setAttribute("aria-expanded","true"),r.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(l.v)(a,"jw-settings-submenu-active",!1),a.setAttribute("aria-expanded","false"),r.setAttribute("aria-checked","false"),n=!1},activateItem:function(e){var t=o[e];t&&!t.active&&(Ht(o),t.activate())},element:function(){return a},destroy:function(){o&&(o.forEach((function(e){e.destroy()})),this.removeContent())}};return Object.defineProperties(u,{name:{enumerable:!0,get:function(){return e}},active:{enumerable:!0,get:function(){return n}},categoryButtonElement:{enumerable:!0,get:function(){return r}},isDefault:{enumerable:!0,get:function(){return i}}}),u}(t,r,t===Qt)).addContent(i),"ontouchstart"in window||$e(s,t,o),e.addSubmenu(a)}return a};function Yt(e){e.removeSubmenu(qt)}function Kt(e){e.removeSubmenu(Dt)}function Jt(e){e.removeSubmenu(Ut)}function Zt(e){e.removeSubmenu(Wt)}function Gt(e,t,i){var n=e.elements.settingsButton,o=function(e,t,i){var n,o=function(e){/jw-(settings|video|nextup-close|sharing-link|share-item)/.test(e.target.className)||f.close()},a=null,r={},s=Object(l.e)(It()),c=new u.a(s).on("keydown",(function(e){var t=e.sourceEvent,i=e.target,n=Object(l.k)(i),o=Object(l.n)(i),a=t.key.replace(/(Arrow|ape)/,"");switch(a){case"Esc":f.close(e);break;case"Left":o?o.focus():(f.close(),Rt(a));break;case"Right":n&&d.element()&&i!==d.element()&&n.focus();break;case"Up":case"Down":f.activateSubmenu(i.getAttribute("name"),"Up"===a)}if(t.stopPropagation(),/13|27|32|37|38|39|40/.test(t.keyCode))return t.preventDefault(),!1})),d=p("jw-settings-close",(function(e){f.close(e)}),i.close,[se("close")]);d.ui.on("keydown",(function(e){var t=e.sourceEvent,i=t.key.replace(/(Arrow|ape)/,"");("Enter"===i||"Right"===i||"Tab"===i&&!t.shiftKey)&&f.close(t),"Right"===i&&Rt(t.key)})),d.show();var w=s.querySelector(".jw-settings-topbar");w.appendChild(d.element());var f={ui:c,closeButton:d,open:function(t,i){(e(n=!0,i),s.setAttribute("aria-expanded","true"),document.addEventListener("click",o),t&&i&&"enter"===i.type)?a.categoryButtonElement.focus():a.element().firstChild.focus()},close:function(t){e(n=!1,t),a=null,Bt(r),s.setAttribute("aria-expanded","false"),document.removeEventListener("click",o)},toggle:function(){n?this.close():this.open()},addSubmenu:function(e){if(e){var i=e.name;if(r[i]=e,e.isDefault)Object(l.m)(w,e.categoryButtonElement),e.categoryButtonElement.addEventListener("keydown",(function(e){9===e.keyCode&&e.shiftKey&&f.close(e)}));else{var n=w.querySelector(".jw-submenu-sharing");w.insertBefore(e.categoryButtonElement,n||d.element())}s.appendChild(e.element()),t.show()}},getSubmenu:function(e){return r[e]},getSubmenuNames:function(){return Object.keys(r)},removeSubmenu:function(e){var i=r[e];i&&i.element().parentNode===s&&(s.removeChild(i.element()),w.removeChild(i.categoryButtonElement),i.destroy(),delete r[e],Object.keys(r).length||(this.close(),t.hide()))},activateSubmenu:function(e,t){var i=r[e];i&&(i.active||(Bt(r),i.activate(),a=i),(t?i.element().lastChild:i.element().firstChild).focus())},activateFirstSubmenu:function(e){var t=Object.keys(r)[0];this.activateSubmenu(t,!1,e)},element:function(){return s},destroy:function(){this.close(),this.ui.destroy(),this.closeButton.ui.destroy(),Object(l.h)(s)}};return Object.defineProperties(f,{visible:{enumerable:!0,get:function(){return n}}}),f}(t,{hide:function(){return n.hide()},show:function(){return n.show()}},i);return e.on("settingsInteraction",(function(e,t,i){var n=o.getSubmenu(e),a=i&&"enter"!==i.type,r=Object(w.c)(o.open,10);(n||t)&&(o.visible?t||n.active?o.close():o.activateSubmenu(e,!1,a):(n?o.activateSubmenu(e,!1,a):o.activateFirstSubmenu(a),r(t,i)))})),o}function $t(e,t,i,n){var o=i.player,a=function(t,i){var n=e.getSubmenu(t);n&&n.activateItem(i)},r=function(t,i){!i||i.length<=1?Kt(e):function(e,t,i,n,o){var a=t.map((function(t,n){return Ft(t.name,t.name,(function(t){i(n),e.close(t)}))}));Xt(e,Dt,a,se("audio-tracks"),o).activateItem(n)}(e,i,(function(e){return n.setCurrentAudioTrack(e)}),o.get("currentAudioTrack"),o.get("localization").audioTracks)},s=function(i,a){if(!a||a.length<=1)Jt(e);else{var r=o.get("localization"),s=r.hd,l=r.auto;!function(e,t,i,n,o,a){var r=t.map((function(t,n){var o=t.label;return"Auto"===o&&0===n&&(o="".concat(a,' ')),Ft(t.label,o,(function(t){i(n),e.close(t)}))}));Xt(e,Ut,r,se("quality-100"),o).activateItem(n)}(e,a,(function(e){return n.setCurrentQuality(e)}),o.get("currentLevel"),s,l)}!function(e,t){var i=e.getSubmenuNames(),n=i.length>1||i.some((function(e){return"quality"===e||"playbackRates"===e}));t.elements.settingsButton.toggle(n)}(e,t)},l=function(t,i){o.get("supportsPlaybackRate")&&"LIVE"!==o.get("streamType")&&o.get("playbackRateControls")&&i.length>1?function(e,t,i,n,o){var a=t.map((function(t){return Ft(0,Object(Et.e)(o)?"x"+t:t+"x",(function(n){i(t),e.close(n)}))}));Xt(e,Wt,a,se("playback-rate"),o).activateItem(n)}(e,i,(function(e){return n.setPlaybackRate(e)}),i.indexOf(o.get("playbackRate")),o.get("localization").playbackRates):Zt(e)},c=function(e,t,i){var n=o.get("levels");if(n&&"Auto"===n[0].label){var a=t.getItems()[0].element().querySelector(".jw-auto-label"),r=n[e.index]||{label:""};a.textContent=i?"":r.label}};o.change("levels",s,e),o.on("change:currentLevel",(function(t,i){var n=e.getSubmenu("quality"),r=o.get("visualQuality");r&&n&&c(r.level,n,i),a("quality",i)}),e),o.change("audioTracks",r,e),o.on("change:currentAudioTrack",(function(e,t){a("audioTracks",t)}),e),o.on("change:playlistItem",(function(){Yt(e),t.elements.captionsButton.hide(),e.visible&&e.close()})),o.change("captionsList",(function(i,a){var r=t.elements.captionsButton;if(!a||a.length<=1)return Yt(e),void r.hide();var s=o.get("localization"),l=s.cc,c=s.off;!function(e,t,i,n,o,a){var r=t.map((function(t,n){var o=t.label;return"Off"!==o&&"off"!==t.id||0!==n||(o=a),Ft(t.id,o,(function(t){i(n),e.close(t)}))}));Xt(e,qt,r,se("cc-off"),o).activateItem(n)}(e,a,(function(e){return n.setCurrentCaptions(e)}),o.get("captionsIndex"),l,c),t.toggleCaptionsButtonState(!!o.get("captionsIndex")),r.show()}),e),o.change("captionsIndex",(function(i,n){var o=e.getSubmenu("captions");o&&(o.activateItem(n),t.toggleCaptionsButtonState(!!n))}),e),o.change("playbackRates",l,e),o.change("playbackRate",(function(e,t){var i=o.get("playbackRates");i&&a("playbackRates",i.indexOf(t))}),e),o.on("change:playbackRateControls",(function(){l(0,o.get("playbackRates"))})),o.on("change:visualQuality",(function(t,i){var n=e.getSubmenu("quality");i&&n&&c(i.level,n,o.get("currentLevel"))})),o.on("change:castActive",(function(t,i,n){i!==n&&(i?(Kt(e),Jt(e),Zt(e)):(r(0,o.get("audioTracks")),s(0,o.get("levels")),l(0,o.get("playbackRates"))))}),e),o.on("change:streamType",(function(){l(0,o.get("playbackRates"))}),e)}var ei=i(58),ti=i(36),ii=i(12),ni=function(e,t,i,n){var o=Object(l.e)('
    '),r=!1,s=null,c=!1,u=function(e){/jw-info/.test(e.target.className)||w.close()},d=function(){var n,a,s,c,u,d=p("jw-info-close",(function(){w.close()}),t.get("localization").close,[se("close")]);d.show(),Object(l.m)(o,d.element()),a=o.querySelector(".jw-info-title"),s=o.querySelector(".jw-info-duration"),c=o.querySelector(".jw-info-description"),u=o.querySelector(".jw-info-clientid"),t.change("playlistItem",(function(e,t){var i=t.description,n=t.title;Object(l.q)(c,i||""),Object(l.q)(a,n||"Unknown Title")})),t.change("duration",(function(e,i){var n="";switch(t.get("streamType")){case"LIVE":n="Live";break;case"DVR":n="DVR";break;default:i&&(n=Object(je.timeFormat)(i))}s.textContent=n}),w),u.textContent=(n=i.getPlugin("jwpsrv"))&&"function"==typeof n.doNotTrackUser&&n.doNotTrackUser()?"":"Client ID: ".concat(function(){try{return window.localStorage.jwplayerLocalId}catch(e){return"none"}}()),e.appendChild(o),r=!0};var w={open:function(){r||d(),document.addEventListener("click",u),c=!0;var e=t.get("state");e===a.pb&&i.pause("infoOverlayInteraction"),s=e,n(!0)},close:function(){document.removeEventListener("click",u),c=!1,t.get("state")===a.ob&&s===a.pb&&i.play("infoOverlayInteraction"),s=null,n(!1)},destroy:function(){this.close(),t.off(null,null,this)}};return Object.defineProperties(w,{visible:{enumerable:!0,get:function(){return c}}}),w};var oi=function(e,t,i){var n,o=!1,r=null,s=i.get("localization").shortcuts,c=Object(l.e)(function(e,t){var i=e.map((function(e){return'
    '+''.concat(e.description,"")+''.concat(e.key,"")+"
    "})).join("");return'
    ')+'Press shift question mark to access a list of keyboard shortcuts
    '+''.concat(t,"")+'
    '+"".concat(i)+"
    "}(function(e){var t=e.playPause,i=e.volumeToggle,n=e.fullscreenToggle,o=e.seekPercent,a=e.increaseVolume,r=e.decreaseVolume,s=e.seekForward,l=e.seekBackward;return[{key:e.spacebar,description:t},{key:"↑",description:a},{key:"↓",description:r},{key:"→",description:s},{key:"←",description:l},{key:"c",description:e.captionsToggle},{key:"f",description:n},{key:"m",description:i},{key:"0-9",description:o}]}(s),s.keyboardShortcuts)),u={reason:"settingsInteraction"},d=c.querySelector(".jw-switch"),w=function(){d.setAttribute("aria-checked",i.get("enableShortcuts")),d.addEventListener("click",j),Object(l.a)(c,"jw-open"),r=i.get("state"),c.querySelector(".jw-shortcuts-close").focus(),document.addEventListener("click",h),o=!0,t.pause(u)},f=function(){d.removeEventListener("click",j),Object(l.o)(c,"jw-open"),document.removeEventListener("click",h),e.focus(),o=!1,r===a.pb&&t.play(u)},h=function(e){/jw-shortcuts|jw-switch/.test(e.target.className)||f()},j=function(e){var t=e.currentTarget,n="true"!==t.getAttribute("aria-checked");t.setAttribute("aria-checked",n),i.set("enableShortcuts",n)};return n=p("jw-shortcuts-close",(function(){f()}),i.get("localization").close,[se("close")]),Object(l.m)(c,n.element()),n.show(),e.appendChild(c),{el:c,close:f,open:w,toggleVisibility:function(){o?f():w()}}},ai=function(e){return'
    ')+"
    "};function ri(e){return(ri="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function si(e,t){for(var i=0;i16?n.activeTimeout=setTimeout(n.userInactiveTimeout,e):n.playerContainer.querySelector(".jw-tab-focus")?n.resetActiveTimeout():n.userInactive()},n}var i,n,r;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&ji(e,t)}(t,e),i=t,(n=[{key:"resetActiveTimeout",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.inactiveTime=0}},{key:"enable",value:function(e,t){var i=this,n=this.context.createElement("div");n.className="jw-controls jw-reset",this.div=n;var r=this.context.createElement("div");r.className="jw-controls-backdrop jw-reset",this.backdrop=r,this.logo=this.playerContainer.querySelector(".jw-logo");var c=t.get("touchMode");if(!this.displayContainer){var u=new yt(t,e);u.buttons.display.on("click tap enter",(function(){i.trigger(a.p),i.userActive(1e3),e.playToggle(mi()),t.get("isFloating")?i.wrapperElement.focus():i.playerContainer.focus()})),this.div.appendChild(u.element()),this.displayContainer=u}this.infoOverlay=new ni(n,t,e,(function(e){Object(l.v)(i.div,"jw-info-open",e),e&&i.div.querySelector(".jw-info-close").focus()})),o.OS.mobile||(this.shortcutsTooltip=new oi(this.wrapperElement,e,t)),this.rightClickMenu=new Lt(this.infoOverlay,this.shortcutsTooltip),c?(Object(l.a)(this.playerContainer,"jw-flag-touch"),this.rightClickMenu.setup(t,this.playerContainer,this.wrapperElement)):t.change("flashBlocked",(function(e,t){t?i.rightClickMenu.destroy():i.rightClickMenu.setup(e,i.playerContainer,i.wrapperElement)}),this);var d=t.get("floating");if(d){var w=new di(n,t.get("localization").close);w.on(a.sb,(function(){return i.trigger("dismissFloating",{doNotForward:!0})})),!1!==d.dismissible&&Object(l.a)(this.playerContainer,"jw-floating-dismissible")}var f=this.controlbar=new st(e,t,this.playerContainer.querySelector(".jw-hidden-accessibility"));if(f.on(a.sb,(function(){return i.userActive()})),f.on("nextShown",(function(e){this.trigger("nextShown",e)}),this),f.on("adjustVolume",v,this),t.get("nextUpDisplay")&&!f.nextUpToolTip){var h=new Tt(t,e,this.playerContainer);h.on("all",this.trigger,this),h.setup(this.context),f.nextUpToolTip=h,this.div.appendChild(h.element())}this.div.appendChild(f.element());var j=null,g=this.settingsMenu=Gt(f,(function(n,o){var r=t.get("state"),s={reason:"settingsInteraction"},c="keydown"===(o&&o.sourceEvent||o||{}).type;Object(l.v)(i.div,"jw-settings-open",n),Object(ei.a)(t.get("containerWidth"))<2&&(n&&r===a.pb?e.pause(s):n||r!==a.ob||j!==a.pb||e.play(s));var u=n||c?0:gi;i.userActive(u),j=r;var d=i.controlbar.elements.settingsButton;!n&&d&&(c?d.element().focus():o&&(t.get("isFloating")?i.wrapperElement:i.playerContainer).focus())}),t.get("localization"));$t(g,f,t,e),o.OS.mobile?this.div.appendChild(g.element()):(this.playerContainer.setAttribute("aria-describedby","jw-shortcuts-tooltip-explanation"),this.div.insertBefore(g.element(),f.element()));var b=function(t){if(t.get("autostartMuted")){var n=function(){return i.unmuteAutoplay(e,t)},a=function(e,t){t||n()};o.OS.mobile&&(i.mute=p("jw-autostart-mute jw-off",n,t.get("localization").unmute,[se("volume-0")]),i.mute.show(),i.div.appendChild(i.mute.element())),f.renderVolume(!0,t.get("volume")),Object(l.a)(i.playerContainer,"jw-flag-autostart"),t.on("change:autostartFailed",n,i),t.on("change:autostartMuted change:mute",a,i),i.muteChangeCallback=a,i.unmuteCallback=n}};function m(i){var n=0,o=t.get("duration"),a=t.get("position");if("DVR"===t.get("streamType")){var r=t.get("dvrSeekLimit");n=o,o=Math.max(a,-r)}var l=Object(s.a)(a+i,n,o);e.seek(l,mi())}function v(i){var n=Object(s.a)(t.get("volume")+i,0,100);e.setVolume(n)}t.once("change:autostartMuted",b),b(t);var y=function(n){if(n.ctrlKey||n.metaKey)return!0;var o=!i.settingsMenu.visible,a=!0===t.get("enableShortcuts"),r=i.instreamState;if(a||-1!==bi.indexOf(n.keyCode)){switch(n.keyCode){case 27:if(t.get("fullscreen"))e.setFullscreen(!1),i.playerContainer.blur(),i.userInactive();else{var s=e.getPlugin("related");s&&s.close({type:"escape"})}i.rightClickMenu.el&&i.rightClickMenu.hideMenuHandler(),i.infoOverlay.visible&&i.infoOverlay.close(),i.shortcutsTooltip&&i.shortcutsTooltip.close();break;case 13:case 32:if(document.activeElement.classList.contains("jw-switch")&&32===n.keyCode)return!0;e.playToggle(mi());break;case 37:!r&&o&&m(-5);break;case 39:!r&&o&&m(5);break;case 38:o&&v(10);break;case 40:o&&v(-10);break;case 67:var l=e.getCaptionsList().length;if(l){var c=(e.getCurrentCaptions()+1)%l;e.setCurrentCaptions(c)}break;case 77:e.setMute();break;case 70:e.setFullscreen();break;case 191:i.shortcutsTooltip&&i.shortcutsTooltip.toggleVisibility();break;default:if(n.keyCode>=48&&n.keyCode<=59){var u=(n.keyCode-48)/10*t.get("duration");e.seek(u,mi())}}return/13|32|37|38|39|40/.test(n.keyCode)?(n.preventDefault(),!1):void 0}};this.playerContainer.addEventListener("keydown",y),this.keydownCallback=y;var k=function(e){if(9===e.keyCode){var t=i.playerContainer.contains(e.target)?0:gi;i.userActive(t)}};this.playerContainer.addEventListener("keyup",k),this.keyupCallback=k;var x=function(e){var t=e.relatedTarget||document.querySelector(":focus");t&&(i.playerContainer.contains(t)||i.userInactive())};this.playerContainer.addEventListener("blur",x,!0),this.blurCallback=x;var O=function e(){"jw-shortcuts-tooltip-explanation"===i.playerContainer.getAttribute("aria-describedby")&&i.playerContainer.removeAttribute("aria-describedby"),i.playerContainer.removeEventListener("blur",e,!0)};this.shortcutsTooltip&&(this.playerContainer.addEventListener("blur",O,!0),this.onRemoveShortcutsDescription=O),this.userActive(),this.addControls(),this.addBackdrop(),t.set("controlsEnabled",!0)}},{key:"addControls",value:function(){this.wrapperElement.appendChild(this.div)}},{key:"disable",value:function(e){var t=this.nextUpToolTip,i=this.settingsMenu,n=this.infoOverlay,o=this.controlbar,a=this.rightClickMenu,r=this.playerContainer,s=this.div;clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.off(),e.off(null,null,this),e.set("controlsEnabled",!1),s.parentNode&&(Object(l.o)(r,"jw-flag-touch"),s.parentNode.removeChild(s)),o&&o.destroy(),a&&a.destroy(),this.keydownCallback&&r.removeEventListener("keydown",this.keydownCallback),this.keyupCallback&&r.removeEventListener("keyup",this.keyupCallback),this.blurCallback&&r.removeEventListener("blur",this.blurCallback),this.onRemoveShortcutsDescription&&r.removeEventListener("blur",this.onRemoveShortcutsDescription),this.displayContainer&&this.displayContainer.destroy(),t&&t.destroy(),i&&(i.destroy(),s.removeChild(i.element())),n&&n.destroy(),this.removeBackdrop()}},{key:"controlbarHeight",value:function(){return this.dimensions.cbHeight||(this.dimensions.cbHeight=this.controlbar.element().clientHeight),this.dimensions.cbHeight}},{key:"element",value:function(){return this.div}},{key:"resize",value:function(){this.dimensions={}}},{key:"unmuteAutoplay",value:function(e,t){var i=!t.get("autostartFailed"),n=t.get("mute");i?n=!1:t.set("playOnViewable",!1),this.muteChangeCallback&&(t.off("change:autostartMuted change:mute",this.muteChangeCallback),this.muteChangeCallback=null),this.unmuteCallback&&(t.off("change:autostartFailed",this.unmuteCallback),this.unmuteCallback=null),t.set("autostartFailed",void 0),t.set("autostartMuted",void 0),e.setMute(n),this.controlbar.renderVolume(n,t.get("volume")),this.mute&&this.mute.hide(),Object(l.o)(this.playerContainer,"jw-flag-autostart"),this.userActive()}},{key:"mouseMove",value:function(e){var t=this.controlbar.element().contains(e.target),i=this.controlbar.nextUpToolTip&&this.controlbar.nextUpToolTip.element().contains(e.target),n=this.logo&&this.logo.contains(e.target),o=t||i||n?0:gi;this.userActive(o)}},{key:"userActive",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:gi;e>0?(this.inactiveTime=Object(c.a)()+e,-1===this.activeTimeout&&(this.activeTimeout=setTimeout(this.userInactiveTimeout,e))):this.resetActiveTimeout(),this.showing||(Object(l.o)(this.playerContainer,"jw-flag-user-inactive"),this.showing=!0,this.trigger("userActive"))}},{key:"userInactive",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.settingsMenu.visible||(this.inactiveTime=0,this.showing=!1,Object(l.a)(this.playerContainer,"jw-flag-user-inactive"),this.trigger("userInactive"))}},{key:"addBackdrop",value:function(){var e=this.instreamState?this.div:this.wrapperElement.querySelector(".jw-captions");this.wrapperElement.insertBefore(this.backdrop,e)}},{key:"removeBackdrop",value:function(){var e=this.backdrop.parentNode;e&&e.removeChild(this.backdrop)}},{key:"setupInstream",value:function(){this.instreamState=!0,this.userActive(),this.addBackdrop(),this.settingsMenu&&this.settingsMenu.close(),Object(l.o)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","-1")}},{key:"destroyInstream",value:function(e){this.instreamState=null,this.addBackdrop(),e.get("autostartMuted")&&Object(l.a)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","0")}}])&&wi(i.prototype,n),r&&wi(i,r),t}(r.a)},function(e,t,i){"use strict";i.r(t);var n=i(0),o=i(12),a=i(50),r=i(37);var s=i(44),l=i(51),c=i(26),u=i(25),d=i(3),p=i(46),w=i(2),f=i(7),h=i(34);function j(e){var t=!1;return{async:function(){var i=this,n=arguments;return Promise.resolve().then((function(){if(!t)return e.apply(i,n)}))},cancel:function(){t=!0},cancelled:function(){return t}}}var g=i(1);function b(e){return function(t,i){var o=e.mediaModel,a=Object(n.h)({},i,{type:t});switch(t){case d.T:if(o.get(d.T)===i.mediaType)return;o.set(d.T,i.mediaType);break;case d.U:return void o.set(d.U,Object(n.h)({},i));case d.M:if(i[t]===e.model.getMute())return;break;case d.bb:i.newstate===d.mb&&(e.thenPlayPromise.cancel(),o.srcReset());var r=o.attributes.mediaState;o.attributes.mediaState=i.newstate,o.trigger("change:mediaState",o,i.newstate,r);break;case d.F:return e.beforeComplete=!0,e.trigger(d.B,a),void(e.attached&&!e.background&&e._playbackComplete());case d.G:o.get("setup")?(e.thenPlayPromise.cancel(),o.srcReset()):(t=d.tb,a.code+=1e5);break;case d.K:a.metadataType||(a.metadataType="unknown");var s=i.duration;Object(n.v)(s)&&(o.set("seekRange",i.seekRange),o.set("duration",s));break;case d.D:o.set("buffer",i.bufferPercent);case d.S:o.set("seekRange",i.seekRange),o.set("position",i.position),o.set("currentTime",i.currentTime);var l=i.duration;Object(n.v)(l)&&o.set("duration",l),t===d.S&&Object(n.s)(e.item.starttime)&&delete e.item.starttime;break;case d.R:var c=e.mediaElement;c&&c.paused&&o.set("mediaState","paused");break;case d.I:o.set(d.I,i.levels);case d.J:var u=i.currentQuality,p=i.levels;u>-1&&p.length>1&&o.set("currentLevel",parseInt(u));break;case d.f:o.set(d.f,i.tracks);case d.g:var w=i.currentTrack,f=i.tracks;w>-1&&f.length>0&&w=Math.max(l,p.a)&&(e.preloadNextItem(),v=!0)}function A(e){var t={};b.tag&&(t.tag=b.tag),this.trigger(d.F,t),P.call(this,e)}function P(e){j={},a&&h+10?e:null,f&&f.model.set("skipOffset",s)}};Object(n.h)(le.prototype,f.a);var ce=le,ue=i(63),de=i(60),pe=function(e){var t=this,i=[],n={},o=0,a=0;function r(e){if(e.data=e.data||[],e.name=e.label||e.name||e.language,e._id=Object(de.a)(e,i.length),!e.name){var t=Object(de.b)(e,o);e.name=t.label,o=t.unknownCount}n[e._id]=e,i.push(e)}function s(){for(var e=[{id:"off",label:"Off"}],t=0;t')+'
    '},he=i(36),je=44,ge=function(e){var t=e.get("height");if(e.get("aspectratio"))return!1;if("string"==typeof t&&t.indexOf("%")>-1)return!1;var i=1*t||NaN;return!!(i=isNaN(i)?e.get("containerHeight"):i)&&(i&&i<=je)},be=i(54);function me(e,t){if(e.get("fullscreen"))return 1;if(!e.get("activeTab"))return 0;if(e.get("isFloating"))return 1;var i=e.get("intersectionRatio");return void 0===i&&(i=function(e){var t=document.documentElement,i=document.body,n={top:0,left:0,right:t.clientWidth||i.clientWidth,width:t.clientWidth||i.clientWidth,bottom:t.clientHeight||i.clientHeight,height:t.clientHeight||i.clientHeight};if(!i.contains(e))return 0;if("none"===window.getComputedStyle(e).display)return 0;var o=ve(e);if(!o)return 0;var a=o,r=e.parentNode,s=!1;for(;!s;){var l=null;if(r===i||r===t||1!==r.nodeType?(s=!0,l=n):"visible"!==window.getComputedStyle(r).overflow&&(l=ve(r)),l&&(c=l,u=a,d=void 0,p=void 0,w=void 0,f=void 0,h=void 0,j=void 0,d=Math.max(c.top,u.top),p=Math.min(c.bottom,u.bottom),w=Math.max(c.left,u.left),f=Math.min(c.right,u.right),j=p-d,!(a=(h=f-w)>=0&&j>=0&&{top:d,bottom:p,left:w,right:f,width:h,height:j})))return 0;r=r.parentNode}var c,u,d,p,w,f,h,j;var g=o.width*o.height,b=a.width*a.height;return g?b/g:0}(t),window.top!==window.self&&i)?0:i}function ve(e){try{return e.getBoundingClientRect()}catch(e){}}var ye=i(49),ke=i(42),xe=i(58),Oe=i(10);var Te=i(32),Ce=i(5),_e=i(6),Se=["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"],Me=function(e,t,i){for(var n=e.requestFullscreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullscreen,o=t.exitFullscreen||t.webkitExitFullscreen||t.webkitCancelFullScreen||t.mozCancelFullScreen||t.msExitFullscreen,a=!(!n||!o),r=Se.length;r--;)t.addEventListener(Se[r],i);return{events:Se,supportsDomFullscreen:function(){return a},requestFullscreen:function(){n.call(e,{navigationUI:"hide"})},exitFullscreen:function(){null!==this.fullscreenElement()&&o.apply(t)},fullscreenElement:function(){var e=t.fullscreenElement,i=t.webkitCurrentFullScreenElement,n=t.mozFullScreenElement,o=t.msFullscreenElement;return null===e?e:e||i||n||o},destroy:function(){for(var e=Se.length;e--;)t.removeEventListener(Se[e],i)}}},Ee=i(40);function ze(e,t){for(var i=0;io?a:n*r/i)*u}return e}(i))/10}f.get("renderCaptionsNatively")?function(e,t){var i="#".concat(e," .jw-video::-webkit-media-text-track-display");t&&(t+="px",m.OS.iOS&&Object(Oe.b)(i,{fontSize:"inherit"},e,!0));p.fontSize=t,Object(Oe.b)(i,p,e,!0)}(f.get("id"),t):Object(Oe.d)(s,{fontSize:t})}}function g(e,t,i){var n=Object(Oe.c)("#000000",i);"dropshadow"===e?t.textShadow="0 2px 1px "+n:"raised"===e?t.textShadow="0 0 5px "+n+", 0 1px 5px "+n+", 0 2px 5px "+n:"depressed"===e?t.textShadow="0 -2px 1px "+n:"uniform"===e&&(t.textShadow="-2px 0 1px "+n+",2px 0 1px "+n+",0 -2px 1px "+n+",0 2px 1px "+n+",-1px 1px 1px "+n+",1px 1px 1px "+n+",1px -1px 1px "+n+",1px 1px 1px "+n)}(s=document.createElement("div")).className="jw-captions jw-reset",this.show=function(){Object(Ce.a)(s,"jw-captions-enabled")},this.hide=function(){Object(Ce.o)(s,"jw-captions-enabled")},this.populate=function(e){f.get("renderCaptionsNatively")||(a=[],o=e,e?this.selectCues(e,r):this.renderCues())},this.resize=function(){j(),this.renderCues(!0)},this.renderCues=function(e){e=!!e,Ae&&Ae.processCues(window,a,s,e)},this.selectCues=function(e,t){if(e&&e.data&&t&&!f.get("renderCaptionsNatively")){var i=this.getAlignmentPosition(e,t);!1!==i&&(a=this.getCurrentCues(e.data,i),this.renderCues(!0))}},this.getCurrentCues=function(e,t){return Object(n.i)(e,(function(e){return t>=e.startTime&&(!e.endTime||t<=e.endTime)}))},this.getAlignmentPosition=function(e,t){var i=e.source,o=t.metadata,a=t.currentTime;return i&&o&&Object(n.s)(o[i])&&(a=o[i]),a},this.clear=function(){Object(Ce.g)(s)},this.setup=function(e,i){l=document.createElement("div"),c=document.createElement("span"),l.className="jw-captions-window jw-reset",c.className="jw-captions-text jw-reset",t=Object(n.h)({},Ie,i),u=Ie.fontScale,h(t.fontSize);var o=t.windowColor,a=t.windowOpacity,r=t.edgeStyle;p={};var d={};!function(e,t){var i=t.color,n=t.fontOpacity;(i||n!==Ie.fontOpacity)&&(e.color=Object(Oe.c)(i||"#ffffff",n));if(t.back){var o=t.backgroundColor,a=t.backgroundOpacity;o===Ie.backgroundColor&&a===Ie.backgroundOpacity||(e.backgroundColor=Object(Oe.c)(o,a))}else e.background="transparent";t.fontFamily&&(e.fontFamily=t.fontFamily);t.fontStyle&&(e.fontStyle=t.fontStyle);t.fontWeight&&(e.fontWeight=t.fontWeight);t.textDecoration&&(e.textDecoration=t.textDecoration)}(d,t),(o||a!==Ie.windowOpacity)&&(p.backgroundColor=Object(Oe.c)(o||"#000000",a)),g(r,d,t.fontOpacity),t.back||null!==r||g("uniform",d),Object(Oe.d)(l,p),Object(Oe.d)(c,d),function(e,t){j(),function(e,t){m.Browser.safari&&Object(Oe.b)("#"+e+" .jw-video::-webkit-media-text-track-display-backdrop",{backgroundColor:t.backgroundColor},e,!0);Object(Oe.b)("#"+e+" .jw-video::-webkit-media-text-track-display",p,e,!0),Object(Oe.b)("#"+e+" .jw-video::cue",t,e,!0)}(e,t),function(e,t){Object(Oe.b)("#"+e+" .jw-text-track-display",p,e),Object(Oe.b)("#"+e+" .jw-text-track-cue",t,e)}(e,t)}(e,d),l.appendChild(c),s.appendChild(l),f.change("captionsTrack",(function(e,t){this.populate(t)}),this),f.set("captions",t)},this.element=function(){return s},this.destroy=function(){f.off(null,null,this),this.off()};var b=function(e){r=e,w.selectCues(o,r)};f.on("change:playlistItem",(function(){r=null,a=[]}),this),f.on(d.Q,(function(e){a=[],b(e)}),this),f.on(d.S,b,this),f.on("subtitlesTrackData",(function(){this.selectCues(o,r)}),this),f.on("change:captionsList",(function e(t,n){var o=this;1!==n.length&&(t.get("renderCaptionsNatively")||Ae||(i.e(8).then(function(e){Ae=i(93).default}.bind(null,i)).catch(Object(Le.c)(301121)).catch((function(e){o.trigger(d.tb,e)})),t.off("change:captionsList",e,this)))}),this)};Object(n.h)(Re.prototype,f.a);var Be=Re,Ve=function(e,t){var i=t?" jw-hide":"";return'')},He={linktarget:"_blank",margin:8,hide:!1,position:"top-right"};function Ne(e){var t,i;Object(n.h)(this,f.a);var o=new Image;this.setup=function(){(i=Object(n.h)({},He,e.get("logo"))).position=i.position||He.position,i.hide="true"===i.hide.toString(),i.file&&"control-bar"!==i.position&&(t||(t=Object(Ce.e)(Ve(i.position,i.hide))),e.set("logo",i),o.onload=function(){var n=this.height,o=this.width,a={backgroundImage:'url("'+this.src+'")'};if(i.margin!==He.margin){var r=/(\w+)-(\w+)/.exec(i.position);3===r.length&&(a["margin-"+r[1]]=i.margin,a["margin-"+r[2]]=i.margin)}var s=.15*e.get("containerHeight"),l=.15*e.get("containerWidth");if(n>s||o>l){var c=o/n;l/s>c?(n=s,o=s*c):(o=l,n=l/c)}a.width=Math.round(o),a.height=Math.round(n),Object(Oe.d)(t,a),e.set("logoWidth",a.width)},o.src=i.file,i.link&&(t.setAttribute("tabindex","0"),t.setAttribute("aria-label",e.get("localization").logo)),this.ui=new Ee.a(t).on("click tap enter",(function(e){e&&e.stopPropagation&&e.stopPropagation(),this.trigger(d.A,{link:i.link,linktarget:i.linktarget})}),this))},this.setContainer=function(e){t&&e.appendChild(t)},this.element=function(){return t},this.position=function(){return i.position},this.destroy=function(){o.onload=null,this.ui&&this.ui.destroy()}}var Fe=function(e){this.model=e,this.image=null};Object(n.h)(Fe.prototype,{setup:function(e){this.el=e},setImage:function(e){var t=this.image;t&&(t.onload=null),this.image=null;var i="";"string"==typeof e&&(i='url("'+e+'")',(t=this.image=new Image).src=e),Object(Oe.d)(this.el,{backgroundImage:i})},resize:function(e,t,i){if("uniform"===i){if(e&&(this.playerAspectRatio=e/t),!this.playerAspectRatio||!this.image||"complete"!==(s=this.model.get("state"))&&"idle"!==s&&"error"!==s&&"buffering"!==s)return;var n=this.image,o=null;if(n){if(0===n.width){var a=this;return void(n.onload=function(){a.resize(e,t,i)})}var r=n.width/n.height;Math.abs(this.playerAspectRatio-r)<.09&&(o="cover")}Object(Oe.d)(this.el,{backgroundSize:o})}var s},element:function(){return this.el}});var De=Fe,qe=function(e){this.model=e.player};Object(n.h)(qe.prototype,{hide:function(){Object(Oe.d)(this.el,{display:"none"})},show:function(){Object(Oe.d)(this.el,{display:""})},setup:function(e){this.el=e;var t=this.el.getElementsByTagName("div");this.title=t[0],this.description=t[1],this.model.on("change:logoWidth",this.update,this),this.model.change("playlistItem",this.playlistItem,this)},update:function(e){var t={},i=e.get("logo");if(i){var n=1*(""+i.margin).replace("px",""),o=e.get("logoWidth")+(isNaN(n)?0:n+10);"top-left"===i.position?t.paddingLeft=o:"top-right"===i.position&&(t.paddingRight=o)}Object(Oe.d)(this.el,t)},playlistItem:function(e,t){if(t)if(e.get("displaytitle")||e.get("displaydescription")){var i="",n="";t.title&&e.get("displaytitle")&&(i=t.title),t.description&&e.get("displaydescription")&&(n=t.description),this.updateText(i,n)}else this.hide()},updateText:function(e,t){Object(Ce.q)(this.title,e),Object(Ce.q)(this.description,t),this.title.firstChild||this.description.firstChild?this.show():this.hide()},element:function(){return this.el}});var Ue=qe;function We(e,t){for(var i=0;ie)}if(t.get("controls")){var r=ge(t);Object(Ce.v)(u,"jw-flag-audio-player",r),t.set("audioMode",r)}}function R(){t.set("visibility",me(t,u))}this.updateBounds=function(){Object(ke.a)(k);var e=t.get("isFloating")?p:u,i=document.body.contains(e),n=Object(Ce.c)(e),r=Math.round(n.width),s=Math.round(n.height);if(M=Object(Ce.c)(u),r===o&&s===a)return o&&a||P(),void t.set("inDom",i);r&&s||o&&a||P(),(r||s||i)&&(t.set("containerWidth",r),t.set("containerHeight",s)),t.set("inDom",i),i&&be.a.observe(u)},this.updateStyles=function(){var e=t.get("containerWidth"),i=t.get("containerHeight");I(e,i),z&&z.resize(e,i),$(e,i),v.resize(),O&&F()},this.checkResized=function(){var e=t.get("containerWidth"),i=t.get("containerHeight"),n=t.get("isFloating");if(e!==o||i!==a){this.resizeListener||(this.resizeListener=new Ye.a(p,this,t)),o=e,a=i,l.trigger(d.hb,{width:e,height:i});var s=Object(xe.a)(e);E!==s&&(E=s,l.trigger(d.j,{breakpoint:E}))}n!==r&&(r=n,l.trigger(d.x,{floating:n}),R())},this.responsiveListener=P,this.setup=function(){var n,o,a,r;g.setup(u.querySelector(".jw-preview")),b.setup(u.querySelector(".jw-title")),(i=new Ne(t)).setup(),i.setContainer(p),i.on(d.A,J),v.setup(u.id,t.get("captions")),b.element().parentNode.insertBefore(v.element(),b.element()),n=e,a=new Pe(o=t,h),r=o.get("controls"),a.on({click:function(){l.trigger(d.p),z&&(ce()?z.settingsMenu.close():ue()?z.infoOverlay.close():n.playToggle({reason:"interaction"}))},tap:function(){u.removeEventListener("mousemove",W),u.removeEventListener("mouseout",X),u.removeEventListener("mouseover",Q),l.trigger(d.p),ce()&&z.settingsMenu.close(),ue()&&z.infoOverlay.close();var e=o.get("state");if(r&&(e===d.mb||e===d.kb||o.get("instream")&&e===d.ob)&&n.playToggle({reason:"interaction"}),r&&e===d.ob){if(o.get("instream")||o.get("castActive")||"audio"===o.get("mediaType"))return;Object(Ce.v)(u,"jw-flag-controls-hidden"),l.dismissible&&Object(Ce.v)(u,"jw-floating-dismissible",Object(Ce.i)(u,"jw-flag-controls-hidden")),v.renderCues(!0)}else z&&(z.showing?z.userInactive():z.userActive())},doubleClick:function(){return z&&n.setFullscreen()}}),u.addEventListener("mousemove",W),u.addEventListener("mouseover",Q),u.addEventListener("mouseout",X),T=a,_=new Ee.a(u).on("click",(function(){})),C=Me(u,document,te),t.on("change:hideAdsControls",(function(e,t){Object(Ce.v)(u,"jw-flag-ads-hide-controls",t)})),t.on("change:scrubbing",(function(e,t){Object(Ce.v)(u,"jw-flag-dragging",t)})),t.on("change:playRejected",(function(e,t){Object(Ce.v)(u,"jw-flag-play-rejected",t)})),t.on(d.X,ee),t.on("change:".concat(d.U),(function(){$(),v.resize()})),t.player.on("change:errorEvent",ae),t.change("stretching",Y);var s=t.get("width"),c=t.get("height"),f=G(s,c);Object(Oe.d)(u,f),t.change("aspectratio",K),I(s,c),t.get("controls")||(Object(Ce.a)(u,"jw-flag-controls-hidden"),Object(Ce.o)(u,"jw-floating-dismissible")),Je&&Object(Ce.a)(u,"jw-ie");var j=t.get("skin")||{};j.name&&Object(Ce.p)(u,/jw-skin-\S+/,"jw-skin-"+j.name);var y=function(e){e||(e={});var t=e.active,i=e.inactive,n=e.background,o={};return o.controlbar=function(e){if(e||t||i||n){var o={};return e=e||{},o.iconsActive=e.iconsActive||t,o.icons=e.icons||i,o.text=e.text||i,o.background=e.background||n,o}}(e.controlbar),o.timeslider=function(e){if(e||t){var i={};return e=e||{},i.progress=e.progress||t,i.rail=e.rail,i}}(e.timeslider),o.menus=function(e){if(e||t||i||n){var o={};return e=e||{},o.text=e.text||i,o.textActive=e.textActive||t,o.background=e.background||n,o}}(e.menus),o.tooltips=function(e){if(e||i||n){var t={};return e=e||{},t.text=e.text||i,t.background=e.background||n,t}}(e.tooltips),o}(j);!function(e,t){var i;function n(t,i,n,o){if(n){t=Object(w.f)(t,"#"+e+(o?"":" "));var a={};a[i]=n,Object(Oe.b)(t.join(", "),a,e)}}t&&(t.controlbar&&function(t){n([".jw-controlbar .jw-icon-inline.jw-text",".jw-title-primary",".jw-title-secondary"],"color",t.text),t.icons&&(n([".jw-button-color:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:not(.jw-icon-cast)"],"color",t.icons),n([".jw-display-icon-container .jw-button-color"],"color",t.icons),Object(Oe.b)("#".concat(e," .jw-icon-cast google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.icons,"}"),e));t.iconsActive&&(n([".jw-display-icon-container .jw-button-color:hover",".jw-display-icon-container .jw-button-color:focus"],"color",t.iconsActive),n([".jw-button-color.jw-toggle:not(.jw-icon-cast)",".jw-button-color:hover:not(.jw-icon-cast)",".jw-button-color:focus:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:hover:not(.jw-icon-cast)"],"color",t.iconsActive),n([".jw-svg-icon-buffer"],"fill",t.icons),Object(Oe.b)("#".concat(e," .jw-icon-cast:hover google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast:focus google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast google-cast-launcher.jw-off:focus"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast google-cast-launcher:focus"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast:hover google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast:focus google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e));n([" .jw-settings-topbar",":not(.jw-state-idle) .jw-controlbar",".jw-flag-audio-player .jw-controlbar"],"background",t.background,!0)}(t.controlbar),t.timeslider&&function(e){var t=e.progress;"none"!==t&&(n([".jw-progress",".jw-knob"],"background-color",t),n([".jw-buffer"],"background-color",Object(Oe.c)(t,50)));n([".jw-rail"],"background-color",e.rail),n([".jw-background-color.jw-slider-time",".jw-slider-time .jw-cue"],"background-color",e.background)}(t.timeslider),t.menus&&(n([".jw-option",".jw-toggle.jw-off",".jw-skip .jw-skip-icon",".jw-nextup-tooltip",".jw-nextup-close",".jw-settings-content-item",".jw-related-title"],"color",(i=t.menus).text),n([".jw-option.jw-active-option",".jw-option:not(.jw-active-option):hover",".jw-option:not(.jw-active-option):focus",".jw-settings-content-item:hover",".jw-nextup-tooltip:hover",".jw-nextup-tooltip:focus",".jw-nextup-close:hover"],"color",i.textActive),n([".jw-nextup",".jw-settings-menu"],"background",i.background)),t.tooltips&&function(e){n([".jw-skip",".jw-tooltip .jw-text",".jw-time-tip .jw-text"],"background-color",e.background),n([".jw-time-tip",".jw-tooltip"],"color",e.background),n([".jw-skip"],"border","none"),n([".jw-skip .jw-text",".jw-skip .jw-icon",".jw-time-tip .jw-text",".jw-tooltip .jw-text"],"color",e.text)}(t.tooltips),t.menus&&function(t){if(t.textActive){var i={color:t.textActive,borderColor:t.textActive,stroke:t.textActive};Object(Oe.b)("#".concat(e," .jw-color-active"),i,e),Object(Oe.b)("#".concat(e," .jw-color-active-hover:hover"),i,e)}if(t.text){var n={color:t.text,borderColor:t.text,stroke:t.text};Object(Oe.b)("#".concat(e," .jw-color-inactive"),n,e),Object(Oe.b)("#".concat(e," .jw-color-inactive-hover:hover"),n,e)}}(t.menus))}(t.get("id"),y),t.set("mediaContainer",h),t.set("iFrame",m.Features.iframe),t.set("activeTab",Object(ye.a)()),t.set("touchMode",Ke&&("string"==typeof c||c>=je)),be.a.add(this),t.get("enableGradient")&&!Je&&Object(Ce.a)(u,"jw-ab-drop-shadow"),this.isSetup=!0,t.trigger("viewSetup",u);var k=document.body.contains(u);k&&be.a.observe(u),t.set("inDom",k)},this.init=function(){this.updateBounds(),t.on("change:fullscreen",Z),t.on("change:activeTab",R),t.on("change:fullscreen",R),t.on("change:intersectionRatio",R),t.on("change:visibility",U),t.on("instreamMode",(function(e){e?de():pe()})),R(),1!==be.a.size()||t.get("visibility")||U(t,1,0);var e=t.player;t.change("state",re),e.change("controls",D),t.change("streamType",ne),t.change("mediaType",oe),e.change("playlistItem",(function(e,t){le(e,t)})),o=a=null,O&&m.OS.mobile&&be.a.addScrollHandler(F),this.checkResized()};var B,V=62,H=!0;function N(){var e=t.get("isFloating"),i=M.top0&&void 0!==arguments[0])||arguments[0],t={x:0,y:0,width:o||0,height:a||0};return z&&e&&(t.height-=z.controlbarHeight()),t},this.setCaptions=function(e){v.clear(),v.setup(t.get("id"),e),v.resize()},this.setIntersection=function(e){var i=Math.round(100*e.intersectionRatio)/100;t.set("intersectionRatio",i),O&&!A()&&(S=S||i>=.5)&&we(i)},this.stopFloating=function(e,i){if(e&&(O=null,be.a.removeScrollHandler(F)),Ze===u){Ze=null,t.set("isFloating",!1);var n=function(){Object(Ce.o)(u,"jw-flag-floating"),K(t,t.get("aspectratio")),Object(Oe.d)(u,{backgroundImage:null}),Object(Oe.d)(p,{maxWidth:null,width:null,height:null,left:null,right:null,top:null,bottom:null,margin:null,transform:null,transition:null,"transition-timing-function":null})};i?(Object(Oe.d)(p,{transform:"translateY(-".concat(V-M.top,"px)"),"transition-timing-function":"ease-out"}),setTimeout(n,150)):n(),j.disable(),P()}},this.destroy=function(){t.destroy(),be.a.unobserve(u),be.a.remove(this),this.isSetup=!1,this.off(),Object(ke.a)(k),clearTimeout(y),Ze===u&&(Ze=null),_&&(_.destroy(),_=null),C&&(C.destroy(),C=null),z&&z.disable(t),T&&(T.destroy(),u.removeEventListener("mousemove",W),u.removeEventListener("mouseout",X),u.removeEventListener("mouseover",Q),T=null),v.destroy(),i&&(i.destroy(),i=null),Object(Oe.a)(t.get("id")),this.resizeListener&&(this.resizeListener.destroy(),delete this.resizeListener),O&&m.OS.mobile&&be.a.removeScrollHandler(F)}};function $e(e,t,i){return($e="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,i){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=at(e)););return e}(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(i):o.value}})(e,t,i||e)}function et(e){return(et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function tt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function it(e,t){for(var i=0;it&&e(),t=n}};function Mt(e,t){t.off(d.N,e._onPlayAttempt),t.off(d.fb,e._triggerFirstFrame),t.off(d.S,e._onTime),e.off("change:activeTab",e._onTabVisible)}var Et=function(e,t){e.change("mediaModel",(function(e,i,n){e._qoeItem&&n&&e._qoeItem.end(n.get("mediaState")),e._qoeItem=new Tt.a,e._qoeItem.getFirstFrame=function(){var e=this.between(d.N,d.H),t=this.between(_t,d.H);return t>0&&t0&&re(t,e.tracks)}),T).on(d.F,(function(){Promise.resolve().then(ae)}),T).on(d.G,T.triggerError,T),Et(C,B),C.on(d.w,T.triggerError,T),C.on("change:state",(function(e,t,i){Y()||K.call(O,e,t,i)}),this),C.on("change:castState",(function(e,t){T.trigger(d.m,t)})),C.on("change:fullscreen",(function(e,t){T.trigger(d.y,{fullscreen:t}),t&&e.set("playOnViewable",!1)})),C.on("change:volume",(function(e,t){T.trigger(d.V,{volume:t})})),C.on("change:mute",(function(e){T.trigger(d.M,{mute:e.getMute()})})),C.on("change:playbackRate",(function(e,t){T.trigger(d.ab,{playbackRate:t,position:e.get("position")})}));var V=function e(t,i){"clickthrough"!==i&&"interaction"!==i&&"external"!==i||(C.set("playOnViewable",!1),C.off("change:playReason change:pauseReason",e))};function H(e,t){Object(n.u)(t)||C.set("viewable",Math.round(t))}function N(){de&&(!0!==C.get("autostart")||C.get("playOnViewable")||$("autostart"),de.flush())}function F(e,t){T.trigger("viewable",{viewable:t}),D()}function D(){if((o.a[0]===t||1===C.get("viewable"))&&"idle"===C.get("state")&&!1===C.get("autostart"))if(!b.primed()&&m.OS.android){var e=b.getTestElement(),i=T.getMute();Promise.resolve().then((function(){return bt(e,{muted:i})})).then((function(){"idle"===C.get("state")&&B.preloadVideo()})).catch(Pt)}else B.preloadVideo()}function q(e){T._instreamAdapter.noResume=!e,e||te({reason:"viewable"})}function U(e){e||(T.pause({reason:"viewable"}),C.set("playOnViewable",!e))}function W(e,t){var i=Y();if(e.get("playOnViewable")){if(t){var n=e.get("autoPause").pauseAds,o=e.get("pauseReason");J()===d.mb?$("viewable"):i&&!n||"interaction"===o||Z({reason:"viewable"})}else m.OS.mobile&&!i&&(T.pause({reason:"autostart"}),C.set("playOnViewable",!0));m.OS.mobile&&i&&q(t)}}function Q(e,t){var i=e.get("state"),n=Y(),o=e.get("playReason");n?e.get("autoPause").pauseAds?U(t):q(t):i===d.pb||i===d.jb?U(t):i===d.mb&&"playlist"===o&&e.once("change:state",(function(){U(t)}))}function Y(){var e=T._instreamAdapter;return!!e&&e.getState()}function J(){var e=Y();return e||C.get("state")}function Z(e){if(E.cancel(),S=!1,C.get("state")===d.lb)return Promise.resolve();var i=G(e);return C.set("playReason",i),Y()?(t.pauseAd(!1,e),Promise.resolve()):(C.get("state")===d.kb&&(ee(!0),T.setItemIndex(0)),!_&&(_=!0,T.trigger(d.C,{playReason:i,startTime:e&&e.startTime?e.startTime:C.get("playlistItem").starttime}),_=!1,Ot()&&!b.primed()&&b.prime(),"playlist"===i&&C.get("autoPause").viewability&&Q(C,C.get("viewable")),x)?(Ot()&&!I&&C.get("mediaElement").load(),x=!1,k=null,Promise.resolve()):B.playVideo(i).then(b.played))}function G(e){return e&&e.reason?e.reason:"unknown"}function $(e){if(J()===d.mb){E=j(N);var t=C.get("advertising");(function(e,t){var i=t.cancelable,n=t.muted,o=void 0!==n&&n,a=t.allowMuted,r=void 0!==a&&a,s=t.timeout,l=void 0===s?1e4:s,c=e.getTestElement(),u=o?"muted":"".concat(r);kt[u]||(kt[u]=bt(c,{muted:o}).catch((function(e){if(!i.cancelled()&&!1===o&&r)return bt(c,{muted:o=!0});throw e})).then((function(){return o?(kt[u]=null,vt):mt})).catch((function(e){throw clearTimeout(d),kt[u]=null,e.reason=yt,e})));var d,p=kt[u].then((function(e){if(clearTimeout(d),i.cancelled()){var t=new Error("Autoplay test was cancelled");throw t.reason="cancelled",t}return e})),w=new Promise((function(e,t){d=setTimeout((function(){kt[u]=null;var e=new Error("Autoplay test timed out");e.reason="timeout",t(e)}),l)}));return Promise.race([p,w])})(b,{cancelable:E,muted:T.getMute(),allowMuted:!t||t.autoplayadsmuted}).then((function(t){return C.set("canAutoplay",t),t!==vt||T.getMute()||(C.set("autostartMuted",!0),ue(),C.once("change:autostartMuted",(function(e){e.off("change:viewable",W),T.trigger(d.M,{mute:C.getMute()})}))),T.getMute()&&C.get("enableDefaultCaptions")&&y.selectDefaultIndex(1),Z({reason:e}).catch((function(){T._instreamAdapter||C.set("autostartFailed",!0),k=null}))})).catch((function(e){if(C.set("canAutoplay",yt),C.set("autostart",!1),!E.cancelled()){var t=Object(g.w)(e);T.trigger(d.h,{reason:e.reason,code:t,error:e})}}))}}function ee(e){if(E.cancel(),de.empty(),Y()){var t=T._instreamAdapter;return t&&(t.noResume=!0),void(k=function(){return B.stopVideo()})}k=null,!e&&(S=!0),_&&(x=!0),C.set("errorEvent",void 0),B.stopVideo()}function te(e){var t=G(e);C.set("pauseReason",t),C.set("playOnViewable","viewable"===t)}function ie(e){k=null,E.cancel();var i=Y();if(i&&i!==d.ob)return te(e),void t.pauseAd(!0,e);switch(C.get("state")){case d.lb:return;case d.pb:case d.jb:te(e),B.pause();break;default:_&&(x=!0)}}function ne(e,t){ee(!0),T.setItemIndex(e),T.play(t)}function oe(e){ne(C.get("item")+1,e)}function ae(){T.completeCancelled()||(k=T.completeHandler,T.shouldAutoAdvance()?T.nextItem():C.get("repeat")?oe({reason:"repeat"}):(m.OS.iOS&&le(!1),C.set("playOnViewable",!1),C.set("state",d.kb),T.trigger(d.cb,{})))}function re(e,t){e=parseInt(e,10)||0,C.persistVideoSubtitleTrack(e,t),B.subtitles=e,T.trigger(d.k,{tracks:se(),track:e})}function se(){return y.getCaptionsList()}function le(e){Object(n.o)(e)||(e=!C.get("fullscreen")),C.set("fullscreen",e),T._instreamAdapter&&T._instreamAdapter._adModel&&T._instreamAdapter._adModel.set("fullscreen",e)}function ue(){B.mute=C.getMute(),B.volume=C.get("volume")}C.on("change:playReason change:pauseReason",V),T.on(d.c,(function(e){return V(0,e.playReason)})),T.on(d.b,(function(e){return V(0,e.pauseReason)})),C.on("change:scrubbing",(function(e,t){t?(M=C.get("state")!==d.ob,ie()):M&&Z({reason:"interaction"})})),C.on("change:captionsList",(function(e,t){T.trigger(d.l,{tracks:t,track:C.get("captionsIndex")||0})})),C.on("change:mediaModel",(function(e,t){var i=this;e.set("errorEvent",void 0),t.change("mediaState",(function(t,i){var n;e.get("errorEvent")||e.set(d.bb,(n=i)===d.nb||n===d.qb?d.jb:n)}),this),t.change("duration",(function(t,i){if(0!==i){var n=e.get("minDvrWindow"),o=Object(xt.b)(i,n);e.setStreamType(o)}}),this);var n=e.get("item")+1,o="autoplay"===(e.get("related")||{}).oncomplete,a=e.get("playlist")[n];if((a||o)&&I){t.on("change:position",(function e(n,r){var s=a&&!a.daiSetting,l=t.get("duration");s&&r&&l>0&&r>=l-p.b?(t.off("change:position",e,i),B.backgroundLoad(a)):o&&(a=C.get("nextUp"))}),this)}})),(y=new we(C)).on("all",L,T),R.on("viewSetup",(function(e){Object(a.b)(O,e)})),this.playerReady=function(){v.once(d.hb,(function(){try{!function(){C.change("visibility",H),A.off(),T.trigger(d.gb,{setupTime:0}),C.change("playlist",(function(e,t){if(t.length){var i={playlist:t},o=C.get("feedData");o&&(i.feedData=Object(n.h)({},o)),T.trigger(d.eb,i)}})),C.change("playlistItem",(function(e,t){if(t){var i=t.title,n=t.image;if("mediaSession"in navigator&&window.MediaMetadata&&(i||n))try{navigator.mediaSession.metadata=new window.MediaMetadata({title:i,artist:window.location.hostname,artwork:[{src:n||""}]})}catch(e){}e.set("cues",[]),T.trigger(d.db,{index:C.get("item"),item:t})}})),A.flush(),A.destroy(),A=null,C.change("viewable",F),C.change("viewable",W),C.get("autoPause").viewability?C.change("viewable",Q):C.once("change:autostartFailed change:mute",(function(e){e.off("change:viewable",W)}));N(),C.on("change:itemReady",(function(e,t){t&&de.flush()}))}()}catch(e){T.triggerError(Object(g.v)(g.m,g.a,e))}})),v.init()},this.preload=D,this.load=function(e,t){var i,n=T._instreamAdapter;switch(n&&(n.noResume=!0),T.trigger("destroyPlugin",{}),ee(!0),E.cancel(),E=j(N),z.cancel(),Ot()&&b.prime(),zt(e)){case"string":C.attributes.item=0,C.attributes.itemReady=!1,z=j((function(e){if(e)return T.updatePlaylist(Object(c.a)(e.playlist),e)})),i=function(e){var t=this;return new Promise((function(i,n){var o=new l.a;o.on(d.eb,(function(e){i(e)})),o.on(d.w,n,t),o.load(e)}))}(e).then(z.async);break;case"object":C.attributes.item=0,i=T.updatePlaylist(Object(c.a)(e),t||{});break;case"number":i=T.setItemIndex(e);break;default:return}i.catch((function(e){T.triggerError(Object(g.u)(e,g.c))})),i.then(E.async).catch(Pt)},this.play=function(e){return Z(e).catch(Pt)},this.pause=ie,this.seek=function(e,t){var i=C.get("state");if(i!==d.lb){B.position=e;var n=i===d.mb;C.get("scrubbing")||!n&&i!==d.kb||(n&&((t=t||{}).startTime=e),this.play(t))}},this.stop=ee,this.playlistItem=ne,this.playlistNext=oe,this.playlistPrev=function(e){ne(C.get("item")-1,e)},this.setCurrentCaptions=re,this.setCurrentQuality=function(e){B.quality=e},this.setFullscreen=le,this.getCurrentQuality=function(){return B.quality},this.getQualityLevels=function(){return B.qualities},this.setCurrentAudioTrack=function(e){B.audioTrack=e},this.getCurrentAudioTrack=function(){return B.audioTrack},this.getAudioTracks=function(){return B.audioTracks},this.getCurrentCaptions=function(){return y.getCurrentIndex()},this.getCaptionsList=se,this.getVisualQuality=function(){var e=this._model.get("mediaModel");return e?e.get(d.U):null},this.getConfig=function(){return this._model?this._model.getConfiguration():void 0},this.getState=J,this.next=Pt,this.completeHandler=ae,this.completeCancelled=function(){return(e=C.get("state"))!==d.mb&&e!==d.kb&&e!==d.lb||!!S&&(S=!1,!0);var e},this.shouldAutoAdvance=function(){return C.get("item")!==C.get("playlist").length-1},this.nextItem=function(){oe({reason:"playlist"})},this.setConfig=function(e){!function(e,t){var i=e._model,n=i.attributes;t.height&&(t.height=Object(r.b)(t.height),t.width=t.width||n.width),t.width&&(t.width=Object(r.b)(t.width),t.aspectratio?(n.width=t.width,delete t.width):t.height=n.height),t.width&&t.height&&!t.aspectratio&&e._view.resize(t.width,t.height),Object.keys(t).forEach((function(o){var a=t[o];if(void 0!==a)switch(o){case"aspectratio":i.set(o,Object(r.a)(a,n.width));break;case"autostart":!function(e,t,i){e.setAutoStart(i),"idle"===e.get("state")&&!0===i&&t.play({reason:"autostart"})}(i,e,a);break;case"mute":e.setMute(a);break;case"volume":e.setVolume(a);break;case"playbackRateControls":case"playbackRates":case"repeat":case"stretching":i.set(o,a)}}))}(T,e)},this.setItemIndex=function(e){B.stopVideo();var t=C.get("playlist").length;return(e=(parseInt(e,10)||0)%t)<0&&(e+=t),B.setActiveItem(e).catch((function(e){e.code>=151&&e.code<=162&&(e=Object(g.u)(e,g.e)),O.triggerError(Object(g.v)(g.k,g.d,e))}))},this.detachMedia=function(){if(_&&(x=!0),C.get("autoPause").viewability&&Q(C,C.get("viewable")),!I)return B.setAttached(!1);B.backgroundActiveMedia()},this.attachMedia=function(){I?B.restoreBackgroundMedia():B.setAttached(!0),"function"==typeof k&&k()},this.routeEvents=function(e){return B.routeEvents(e)},this.forwardEvents=function(){return B.forwardEvents()},this.playVideo=function(e){return B.playVideo(e)},this.stopVideo=function(){return B.stopVideo()},this.castVideo=function(e,t){return B.castVideo(e,t)},this.stopCast=function(){return B.stopCast()},this.backgroundActiveMedia=function(){return B.backgroundActiveMedia()},this.restoreBackgroundMedia=function(){return B.restoreBackgroundMedia()},this.preloadNextItem=function(){B.background.currentMedia&&B.preloadVideo()},this.isBeforeComplete=function(){return B.beforeComplete},this.setVolume=function(e){C.setVolume(e),ue()},this.setMute=function(e){C.setMute(e),ue()},this.setPlaybackRate=function(e){C.setPlaybackRate(e)},this.getProvider=function(){return C.get("provider")},this.getWidth=function(){return C.get("containerWidth")},this.getHeight=function(){return C.get("containerHeight")},this.getItemQoe=function(){return C._qoeItem},this.addButton=function(e,t,i,n,o){var a=C.get("customButtons")||[],r=!1,s={img:e,tooltip:t,callback:i,id:n,btnClass:o};a=a.reduce((function(e,t){return t.id===n?(r=!0,e.push(s)):e.push(t),e}),[]),r||a.unshift(s),C.set("customButtons",a)},this.removeButton=function(e){var t=C.get("customButtons")||[];t=t.filter((function(t){return t.id!==e})),C.set("customButtons",t)},this.resize=v.resize,this.getSafeRegion=v.getSafeRegion,this.setCaptions=v.setCaptions,this.checkBeforePlay=function(){return _},this.setControls=function(e){Object(n.o)(e)||(e=!C.get("controls")),C.set("controls",e),B.controls=e},this.addCues=function(e){this.setCues(C.get("cues").concat(e))},this.setCues=function(e){C.set("cues",e)},this.updatePlaylist=function(e,t){try{var i=Object(c.b)(e,C,t);Object(c.e)(i);var o=Object(n.h)({},t);delete o.playlist,C.set("feedData",o),C.set("playlist",i)}catch(e){return Promise.reject(e)}return this.setItemIndex(C.get("item"))},this.setPlaylistItem=function(e,t){(t=Object(c.d)(C,new u.a(t),t.feedData||{}))&&(C.get("playlist")[e]=t,e===C.get("item")&&"idle"===C.get("state")&&this.setItemIndex(e))},this.playerDestroy=function(){this.off(),this.stop(),Object(a.b)(this,this.originalContainer),v&&v.destroy(),C&&C.destroy(),de&&de.destroy(),y&&y.destroy(),B&&B.destroy(),this.instreamDestroy()},this.isBeforePlay=this.checkBeforePlay,this.createInstream=function(){return this.instreamDestroy(),this._instreamAdapter=new ce(this,C,v,b),this._instreamAdapter},this.instreamDestroy=function(){T._instreamAdapter&&(T._instreamAdapter.destroy(),T._instreamAdapter=null)};var de=new s.a(this,["play","pause","setCurrentAudioTrack","setCurrentCaptions","setCurrentQuality","setFullscreen"],(function(){return!O._model.get("itemReady")||A}));de.queue.push.apply(de.queue,h),v.setup()},get:function(e){if(e in y.a){var t=this._model.get("mediaModel");return t?t.get(e):y.a[e]}return this._model.get(e)},getContainer:function(){return this.currentContainer||this.originalContainer},getMute:function(){return this._model.getMute()},triggerError:function(e){var t=this._model;e.message=t.get("localization").errors[e.key],delete e.key,t.set("errorEvent",e),t.set("state",d.lb),t.once("change:state",(function(){this.set("errorEvent",void 0)}),t),this.trigger(d.w,e)}});t.default=At},,,,,,,,,,,,,function(e,t,i){"use strict";i.r(t);var n=i(0);var o=i(8),a=i(52),r=i(3),s=i(43),l={canplay:function(){this.trigger(r.E)},play:function(){this.stallTime=-1,this.video.paused||this.state===r.pb||this.setState(r.nb)},loadedmetadata:function(){var e={metadataType:"media",duration:this.getDuration(),height:this.video.videoHeight,width:this.video.videoWidth,seekRange:this.getSeekRange()},t=this.drmUsed;t&&(e.drm=t),this.trigger(r.K,e)},timeupdate:function(){var e=this.video.currentTime,t=this.getCurrentTime(),i=this.getDuration();if(!isNaN(i)){this.seeking||this.video.paused||this.state!==r.qb&&this.state!==r.nb||this.stallTime===e||(this.stallTime=-1,this.setState(r.pb),this.trigger(r.fb));var n={position:t,duration:i,currentTime:e,seekRange:this.getSeekRange(),metadata:{currentTime:e}};if(this.getPtsOffset){var o=this.getPtsOffset();o>=0&&(n.metadata.mpegts=o+t)}var a=this.getLiveLatency();null!==a&&(n.latency=a),(this.state===r.pb||this.seeking)&&this.trigger(r.S,n)}},click:function(e){this.trigger(r.n,e)},volumechange:function(){var e=this.video;this.trigger(r.V,{volume:Math.round(100*e.volume)}),this.trigger(r.M,{mute:e.muted})},seeked:function(){this.seeking&&(this.seeking=!1,this.trigger(r.R))},playing:function(){-1===this.stallTime&&this.setState(r.pb),this.trigger(r.fb)},pause:function(){this.state!==r.kb&&(this.video.ended||this.video.error||this.video.currentTime!==this.video.duration&&this.setState(r.ob))},progress:function(){var e=this.getDuration();if(!(e<=0||e===1/0)){var t=this.video.buffered;if(t&&0!==t.length){var i=Object(s.a)(t.end(t.length-1)/e,0,1);this.trigger(r.D,{bufferPercent:100*i,position:this.getCurrentTime(),duration:e,currentTime:this.video.currentTime,seekRange:this.getSeekRange()})}}},ratechange:function(){this.trigger(r.P,{playbackRate:this.video.playbackRate})},ended:function(){this.videoHeight=0,this.streamBitrate=-1,this.state!==r.mb&&this.state!==r.kb&&this.trigger(r.F)},loadeddata:function(){this.renderNatively&&this.setTextTracks(this.video.textTracks)}},c=i(10);function u(e){return e&&e.length?e.end(e.length-1):0}var d={container:null,volume:function(e){this.video.volume=Math.min(Math.max(0,e/100),1)},mute:function(e){this.video.muted=!!e,this.video.muted||this.video.removeAttribute("muted")},resize:function(e,t,i){var n=this.video,a=n.videoWidth,r=n.videoHeight;if(e&&t&&a&&r){var s={objectFit:"",width:"",height:""};if("uniform"===i){var l=e/t,u=a/r,d=Math.abs(l-u);d<.09&&d>.0025&&(s.objectFit="fill",i="exactfit")}if(o.Browser.ie||o.OS.iOS&&o.OS.version.major<9||o.Browser.androidNative)if("uniform"!==i){s.objectFit="contain";var p=e/t,w=a/r,f=1,h=1;"none"===i?f=h=p>w?Math.ceil(100*r/t)/100:Math.ceil(100*a/e)/100:"fill"===i?f=h=p>w?p/w:w/p:"exactfit"===i&&(p>w?(f=p/w,h=1):(f=1,h=w/p)),Object(c.e)(n,"matrix(".concat(f.toFixed(2),", 0, 0, ").concat(h.toFixed(2),", 0, 0)"))}else s.top=s.left=s.margin="",Object(c.e)(n,"");Object(c.d)(n,s)}},getContainer:function(){return this.container},setContainer:function(e){this.container=e,this.video.parentNode!==e&&e.appendChild(this.video)},remove:function(){this.stop(),this.destroy();var e=this.container;e&&e===this.video.parentNode&&e.removeChild(this.video)},atEdgeOfLiveStream:function(){if(!this.isLive())return!1;return u(this.video.buffered)-this.video.currentTime<=2}},p={eventsOn_:function(){},eventsOff_:function(){},attachMedia:function(){this.eventsOn_()},detachMedia:function(){return this.eventsOff_()}},w=i(62),f=i(5),h=i(53),j=i(7),g=i(63),b=i(60),m={TIT2:"title",TT2:"title",WXXX:"url",TPE1:"artist",TP1:"artist",TALB:"album",TAL:"album"};function v(e,t){for(var i,n,o,a=e.length,r="",s=t||0;s>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:r+=String.fromCharCode(i);break;case 12:case 13:n=e[s++],r+=String.fromCharCode((31&i)<<6|63&n);break;case 14:n=e[s++],o=e[s++],r+=String.fromCharCode((15&i)<<12|(63&n)<<6|(63&o)<<0)}return r}function y(e){var t=function(e){for(var t="0x",i=0;i>1|(8323072&t)>>2|(2130706432&t)>>3}function k(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(e,t){if(!("value"in t)&&"data"in t&&t.data instanceof ArrayBuffer){var i=new Uint8Array(t.data),n=i.length;t={value:{key:"",data:""}};for(var o=10;o<14&&o0){var c=v(i.subarray(a,a+=s),0);if("PRIV"===t.value.key){if("com.apple.streaming.transportStreamTimestamp"===c){var u=1&y(i.subarray(a,a+=4)),d=y(i.subarray(a,a+=4))+(u?4294967296:0);t.value.data=d}else t.value.data=v(i,a+1);t.value.info=c}else t.value.info=c,t.value.data=v(i,a+1)}else{var p=i[a];t.value.data=1===p||2===p?function(e,t){for(var i=e.length-1,n="",o=t||0;o=0&&o[a].startTime>t.startTime;a--)i.unshift(o[a]),e.removeCue(o[a]);try{e.addCue(t),i.forEach((function(t){return e.addCue(t)}))}catch(e){console.error(e)}e.mode=n}(t,n)}else try{t.addCue(i)}catch(e){console.error(e)}}function S(e,t){t&&t.length&&Object(n.g)(t,(function(t){if(!(o.Browser.ie&&e&&/^(native|subtitle|cc)/.test(t._id))){o.Browser.ie&&"disabled"===t.mode||(t.mode="disabled",t.mode="hidden");for(var i=t.cues.length;i--;)t.removeCue(t.cues[i]);t.embedded||(t.mode="disabled"),t.inuse=!1}}))}function M(e){return"subtitles"===e||"captions"===e}function E(e){var t,i=Object(b.b)(e,this._unknownCount),o=i.label;if(this._unknownCount=i.unknownCount,this.renderNatively||"metadata"===e.kind){var a=this.video.textTracks;(t=Object(n.k)(a,{label:o}))||(t=this.video.addTextTrack(e.kind,o,e.language||"")),t.default=e.default,t.mode="disabled",t.inuse=!0}else(t=e).data=t.data||[];return t._id||(t._id=Object(b.a)(e,this._textTracks.length)),t}function z(e){this._textTracks.push(e),this._tracksById[e._id]=e}function A(){if(this._textTracks){var e=this._textTracks.filter((function(e){return e.embedded||"subs"===e.groupid}));this._initTextTracks(),e.forEach((function(e){this._tracksById[e._id]=e})),this._textTracks=e}}function P(e){this.triggerActiveCues(e.currentTarget.activeCues)}function L(e,t,i){var n=e.kind;this._cachedVTTCues[e._id]||(this._cachedVTTCues[e._id]={});var o,a=this._cachedVTTCues[e._id];switch(n){case"captions":case"subtitles":o=i||Math.floor(20*t.startTime);var r="_"+t.line,s=Math.floor(20*t.endTime),l=a[o+r]||a[o+1+r]||a[o-1+r];return!(l&&Math.abs(l-s)<=1)&&(a[o+r]=s,!0);case"metadata":var c=t.data?new Uint8Array(t.data).join(""):t.text;return!a[o=i||t.startTime+c]&&(a[o]=t.endTime,!0);default:return!1}}function I(e){if(e.length>this._textTracks.length)return!0;for(var t=0;t=0&&(h.retries=0),h.currentTime=v.currentTime,S&&C!==v.currentTime&&$(v.currentTime),l.timeupdate.call(h),fe(),o.Browser.ie&&G()},resize:G,ended:function(){_=-1,he(),l.ended.call(h)},loadedmetadata:function(){var e=h.getDuration();I&&e===1/0&&(e=0);var t={metadataType:"media",duration:e,height:v.videoHeight,width:v.videoWidth,seekRange:h.getSeekRange()};h.trigger(r.K,t),G()},durationchange:function(){I||l.progress.call(h)},loadeddata:function(){var e;!function(){if(v.getStartDate){var e=v.getStartDate(),t=e.getTime?e.getTime():NaN;if(t!==h.startDateTime&&!isNaN(t)){h.startDateTime=t;var i=e.toISOString(),n=h.getSeekRange(),o=n.start,a=n.end,s={metadataType:"program-date-time",programDateTime:i,start:o,end:a},l=h.createCue(o,a,JSON.stringify(s));h.addVTTCue({type:"metadata",cue:l}),delete s.metadataType,h.trigger(r.L,{metadataType:"program-date-time",metadata:s})}}}(),l.loadeddata.call(h),function(e){if(E=null,!e)return;if(e.length){for(var t=0;t0&&(t=e.map((function(e,t){return{label:e.label||t}}))),t}function ie(e){h.currentTime=-1,g=e.minDvrWindow,m=e.sources,_=function(e){var i=Math.max(0,_),n=t.qualityLabel;if(e)for(var o=0;o0&&(O=-1,h.seek(e)),e>0&&v.currentTime!==e&&h.seek(e);var n=te(m);n&&h.trigger(r.I,{levels:n,currentQuality:_}),m.length&&"hls"!==m[0].type&&we()}function ae(e){E=null,z=-1,y.reason||(y.reason="initial choice",y.level={}),x=!1;var t=document.createElement("source");t.src=e.file,v.src!==t.src&&(v.src=e.file)}function re(){v&&(h.disableTextTrack(),v.removeAttribute("preload"),v.removeAttribute("src"),Object(f.h)(v),Object(c.d)(v,{objectFit:""}),_=-1,!o.Browser.msie&&"load"in v&&v.load())}function se(){var e=1/0;return["buffered","seekable"].forEach((function(t){for(var i=v[t],o=i?i.length:0;o--;){var a=Math.min(e,i.start(o));Object(n.p)(a)&&(e=a)}})),e}function le(){var e=0;return["buffered","seekable"].forEach((function(t){for(var i=v[t],o=i?i.length:0;o--;){var a=Math.max(e,i.end(o));Object(n.p)(a)&&(e=a)}})),e}function ce(){for(var e=-1,t=0;t-1&&e1)&&function(e){Y=e.end,J=Math.min(0,v.currentTime-Y),Z=Object(V.a)()}(t),Object(w.a)(t.end-t.start,g))return J}return e}(v.currentTime)},h.getDuration=function(){var e=v.duration;if(I&&e===1/0&&0===v.currentTime||isNaN(e))return 0;var t=le();if(h.isLive()&&t){var i=t-se();Object(w.a)(i,g)&&(e=-i)}return e},h.getSeekRange=function(){var e={start:0,end:v.duration};return v.seekable.length&&(e.end=le(),e.start=se()),e},h.getLiveLatency=function(){var e=null,t=le();return h.isLive()&&t&&(e=t+(Object(V.a)()-Z)/1e3-v.currentTime),e},this.stop=function(){he(),re(),this.clearTracks(),o.Browser.ie&&v.pause(),this.setState(r.mb)},this.destroy=function(){M=Q,X(b,v),this.removeTracksListener(v.audioTracks,"change",ce),this.removeTracksListener(v.textTracks,"change",h.textTrackChangeHandler),this.off()},this.init=function(e){h.retries=0,h.maxRetries=e.adType?0:3,ie(e);var t=m[_];(I=Object(a.a)(t))&&(h.supportsPlaybackRate=!1,b.waiting=Q),h.eventsOn_(),m.length&&"hls"!==m[0].type&&this.sendMediaType(m),y.reason=""},this.preload=function(e){ie(e);var t=m[_],i=t.preload||"metadata";"none"!==i&&(v.setAttribute("preload",i),ae(t))},this.load=function(e){ie(e),oe(e.starttime),this.setupSideloadedTracks(e.tracks)},this.play=function(){return M(),ne()},this.pause=function(){he(),M=function(){if(v.paused&&v.currentTime&&h.isLive()){var e=le(),t=e-se(),i=!Object(w.a)(t,g),o=e-v.currentTime;if(i&&e&&(o>15||o<0)){if(T=Math.max(e-10,e-t),!Object(n.p)(T))return;$(v.currentTime),v.currentTime=T}}},v.pause()},this.seek=function(e){var t=h.getSeekRange(),i=e;if(e<0&&(i+=t.end),x||(x=!!le()),x){O=0;try{if(h.seeking=!0,h.isLive()&&Object(w.a)(t.end-t.start,g))if(J=Math.min(0,i-Y),e<0)i+=Math.min(12,(Object(V.a)()-Z)/1e3);T=i,$(v.currentTime),v.currentTime=i}catch(e){h.seeking=!1,O=i}}else O=i,o.Browser.firefox&&v.paused&&ne()},this.setVisibility=function(e){(e=!!e)||o.OS.android?Object(c.d)(h.container,{visibility:"visible",opacity:1}):Object(c.d)(h.container,{visibility:"",opacity:0})},this.setFullscreen=function(e){if(e=!!e){try{var t=v.webkitEnterFullscreen||v.webkitEnterFullScreen;t&&t.apply(v)}catch(e){return!1}return h.getFullScreen()}var i=v.webkitExitFullscreen||v.webkitExitFullScreen;return i&&i.apply(v),e},h.getFullScreen=function(){return S||!!v.webkitDisplayingFullscreen},this.setCurrentQuality=function(e){_!==e&&e>=0&&m&&m.length>e&&(_=e,y.reason="api",y.level={},this.trigger(r.J,{currentQuality:e,levels:te(m)}),t.qualityLabel=m[e].label,oe(v.currentTime||0),ne())},this.setPlaybackRate=function(e){v.playbackRate=v.defaultPlaybackRate=e},this.getPlaybackRate=function(){return v.playbackRate},this.getCurrentQuality=function(){return _},this.getQualityLevels=function(){return Array.isArray(m)?m.map((function(e){return function(e){return{bitrate:e.bitrate,label:e.label,width:e.width,height:e.height}}(e)})):[]},this.getName=function(){return{name:W}},this.setCurrentAudioTrack=de,this.getAudioTracks=function(){return E||[]},this.getCurrentAudioTrack=function(){return z}}Object(n.h)(Y.prototype,h.a),Y.getName=function(){return{name:"html5"}};t.default=Y;var K=220001},,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,i){"use strict";i.d(t,"a",(function(){return o}));var n=i(2);function o(e){var t=[],i=(e=Object(n.i)(e)).split("\r\n\r\n");1===i.length&&(i=e.split("\n\n"));for(var o=0;o0&&(o=0),i.length>o+1&&i[o+1]){var a=i[o],r=a.indexOf(" --\x3e ");r>0&&(t.begin=Object(n.g)(a.substr(0,r)),t.end=Object(n.g)(a.substr(r+5)),t.text=i.slice(o+1).join("\r\n"))}return t}},function(e,t,i){"use strict";i.d(t,"a",(function(){return o})),i.d(t,"b",(function(){return a}));var n=i(5);function o(e){var t=-1;return e>=1280?t=7:e>=960?t=6:e>=800?t=5:e>=640?t=4:e>=540?t=3:e>=420?t=2:e>=320?t=1:e>=250&&(t=0),t}function a(e,t){var i="jw-breakpoint-"+t;Object(n.p)(e,/jw-breakpoint--?\d+/,i)}},function(e,t,i){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var i=function(e,t){var i=e[1]||"",n=e[3];if(!n)return i;if(t&&"function"==typeof btoa){var o=(r=n,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */"),a=n.sources.map((function(e){return"/*# sourceURL="+n.sourceRoot+e+" */"}));return[i].concat(a).concat([o]).join("\n")}var r;return[i].join("\n")}(t,e);return t[2]?"@media "+t[2]+"{"+i+"}":i})).join("")},t.i=function(e,i){"string"==typeof e&&(e=[[null,e,""]]);for(var n={},o=0;o1&&(i+=" ["+t+"]")),{label:i,unknownCount:t}}i.d(t,"a",(function(){return n})),i.d(t,"b",(function(){return o}))},function(e,t,i){"use strict";function n(e){return new Promise((function(t,i){if(e.paused)return i(o("NotAllowedError",0,"play() failed."));var n=function(){e.removeEventListener("play",a),e.removeEventListener("playing",r),e.removeEventListener("pause",r),e.removeEventListener("abort",r),e.removeEventListener("error",r)},a=function(){e.addEventListener("playing",r),e.addEventListener("abort",r),e.addEventListener("error",r),e.addEventListener("pause",r)},r=function(e){if(n(),"playing"===e.type)t();else{var a='The play() request was interrupted by a "'.concat(e.type,'" event.');"error"===e.type?i(o("NotSupportedError",9,a)):i(o("AbortError",20,a))}};e.addEventListener("play",a)}))}function o(e,t,i){var n=new Error(i);return n.name=e,n.code=t,n}i.d(t,"a",(function(){return n}))},function(e,t,i){"use strict";function n(e,t){return e!==1/0&&Math.abs(e)>=Math.max(a(t),0)}function o(e,t){var i="VOD";return e===1/0?i="LIVE":e<0&&(i=n(e,a(t))?"DVR":"LIVE"),i}function a(e){return void 0===e?120:Math.max(e,0)}i.d(t,"a",(function(){return n})),i.d(t,"b",(function(){return o}))},function(e,t,i){"use strict";var n=i(64),o=i(16),a=i(22),r=i(4),s=i(57),l=i(2),c=i(1);function u(e){throw new c.n(null,e)}function d(e,t,n){e.xhr=Object(a.a)(e.file,(function(a){!function(e,t,n,a){var d,p,f=e.responseXML?e.responseXML.firstChild:null;if(f)for("xml"===Object(r.b)(f)&&(f=f.nextSibling);f.nodeType===f.COMMENT_NODE;)f=f.nextSibling;try{if(f&&"tt"===Object(r.b)(f))d=function(e){e||u(306007);var t=[],i=e.getElementsByTagName("p"),n=30,o=e.getElementsByTagName("tt");if(o&&o[0]){var a=parseFloat(o[0].getAttribute("ttp:frameRate"));isNaN(a)||(n=a)}i||u(306005),i.length||(i=e.getElementsByTagName("tt:p")).length||(i=e.getElementsByTagName("tts:p"));for(var r=0;r\s+<").replace(/(<\/?)tts?:/g,"$1").replace(//g,"\r\n");if(f){var h=s.getAttribute("begin"),j=s.getAttribute("dur"),g=s.getAttribute("end"),b={begin:Object(l.g)(h,n),text:f};g?b.end=Object(l.g)(g,n):j&&(b.end=b.begin+Object(l.g)(j,n)),t.push(b)}}return t.length||u(306005),t}(e.responseXML),p=w(d),delete t.xhr,n(p);else{var h=e.responseText;h.indexOf("WEBVTT")>=0?i.e(10).then(function(e){return i(92).default}.bind(null,i)).catch(Object(o.c)(301131)).then((function(e){var i=new e(window);p=[],i.oncue=function(e){p.push(e)},i.onflush=function(){delete t.xhr,n(p)},i.parse(h)})).catch((function(e){delete t.xhr,a(Object(c.v)(null,c.b,e))})):(d=Object(s.a)(h),p=w(d),delete t.xhr,n(p))}}catch(e){delete t.xhr,a(Object(c.v)(null,c.b,e))}}(a,e,t,n)}),(function(e,t,i,o){n(Object(c.u)(o,c.b))}))}function p(e){e&&e.forEach((function(e){var t=e.xhr;t&&(t.onload=null,t.onreadystatechange=null,t.onerror=null,"abort"in t&&t.abort()),delete e.xhr}))}function w(e){return e.map((function(e){return new n.a(e.begin,e.end,e.text)}))}i.d(t,"c",(function(){return d})),i.d(t,"a",(function(){return p})),i.d(t,"b",(function(){return w}))},function(e,t,i){"use strict";var n=window.VTTCue;function o(e){if("string"!=typeof e)return!1;return!!{start:!0,middle:!0,end:!0,left:!0,right:!0}[e.toLowerCase()]&&e.toLowerCase()}if(!n){(n=function(e,t,i){var n=this;n.hasBeenReset=!1;var a="",r=!1,s=e,l=t,c=i,u=null,d="",p=!0,w="auto",f="start",h="auto",j=100,g="middle";Object.defineProperty(n,"id",{enumerable:!0,get:function(){return a},set:function(e){a=""+e}}),Object.defineProperty(n,"pauseOnExit",{enumerable:!0,get:function(){return r},set:function(e){r=!!e}}),Object.defineProperty(n,"startTime",{enumerable:!0,get:function(){return s},set:function(e){if("number"!=typeof e)throw new TypeError("Start time must be set to a number.");s=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"endTime",{enumerable:!0,get:function(){return l},set:function(e){if("number"!=typeof e)throw new TypeError("End time must be set to a number.");l=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"text",{enumerable:!0,get:function(){return c},set:function(e){c=""+e,this.hasBeenReset=!0}}),Object.defineProperty(n,"region",{enumerable:!0,get:function(){return u},set:function(e){u=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"vertical",{enumerable:!0,get:function(){return d},set:function(e){var t=function(e){return"string"==typeof e&&(!!{"":!0,lr:!0,rl:!0}[e.toLowerCase()]&&e.toLowerCase())}(e);if(!1===t)throw new SyntaxError("An invalid or illegal string was specified.");d=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"snapToLines",{enumerable:!0,get:function(){return p},set:function(e){p=!!e,this.hasBeenReset=!0}}),Object.defineProperty(n,"line",{enumerable:!0,get:function(){return w},set:function(e){if("number"!=typeof e&&"auto"!==e)throw new SyntaxError("An invalid number or illegal string was specified.");w=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"lineAlign",{enumerable:!0,get:function(){return f},set:function(e){var t=o(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");f=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"position",{enumerable:!0,get:function(){return h},set:function(e){if(e<0||e>100)throw new Error("Position must be between 0 and 100.");h=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"size",{enumerable:!0,get:function(){return j},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");j=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"align",{enumerable:!0,get:function(){return g},set:function(e){var t=o(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");g=t,this.hasBeenReset=!0}}),n.displayState=void 0}).prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)}}t.a=n},function(e,t,i){var n=i(66);"string"==typeof n&&(n=[["all-players",n,""]]),i(35).style(n,"all-players"),n.locals&&(e.exports=n.locals)},function(e,t,i){(e.exports=i(59)(!1)).push([e.i,'.jw-reset{text-align:left;direction:ltr}.jw-reset-text,.jw-reset{color:inherit;background-color:transparent;padding:0;margin:0;float:none;font-family:Arial,Helvetica,sans-serif;font-size:1em;line-height:1em;list-style:none;text-transform:none;vertical-align:baseline;border:0;font-variant:inherit;font-stretch:inherit;-webkit-tap-highlight-color:rgba(255,255,255,0)}body .jw-error,body .jwplayer.jw-state-error{height:100%;width:100%}.jw-title{position:absolute;top:0}.jw-background-color{background:rgba(0,0,0,0.4)}.jw-text{color:rgba(255,255,255,0.8)}.jw-knob{color:rgba(255,255,255,0.8);background-color:#fff}.jw-button-color{color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):focus,:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):hover{color:#fff}.jw-toggle{color:#fff}.jw-toggle.jw-off{color:rgba(255,255,255,0.8)}.jw-toggle.jw-off:focus{color:#fff}.jw-toggle:focus{outline:none}:not(.jw-flag-touch) .jw-toggle.jw-off:hover{color:#fff}.jw-rail{background:rgba(255,255,255,0.3)}.jw-buffer{background:rgba(255,255,255,0.3)}.jw-progress{background:#f2f2f2}.jw-time-tip,.jw-volume-tip{border:0}.jw-slider-volume.jw-volume-tip.jw-background-color.jw-slider-vertical{background:none}.jw-skip{padding:.5em;outline:none}.jw-skip .jw-skiptext,.jw-skip .jw-skip-icon{color:rgba(255,255,255,0.8)}.jw-skip.jw-skippable:hover .jw-skip-icon,.jw-skip.jw-skippable:focus .jw-skip-icon{color:#fff}.jw-icon-cast google-cast-launcher{--connected-color:#fff;--disconnected-color:rgba(255,255,255,0.8)}.jw-icon-cast google-cast-launcher:focus{outline:none}.jw-icon-cast google-cast-launcher.jw-off{--connected-color:rgba(255,255,255,0.8)}.jw-icon-cast:focus google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-icon-cast:hover google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-nextup-container{bottom:2.5em;padding:5px .5em}.jw-nextup{border-radius:0}.jw-color-active{color:#fff;stroke:#fff;border-color:#fff}:not(.jw-flag-touch) .jw-color-active-hover:hover,:not(.jw-flag-touch) .jw-color-active-hover:focus{color:#fff;stroke:#fff;border-color:#fff}.jw-color-inactive{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-color-inactive-hover:hover{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}.jw-option{color:rgba(255,255,255,0.8)}.jw-option.jw-active-option{color:#fff;background-color:rgba(255,255,255,0.1)}:not(.jw-flag-touch) .jw-option:hover{color:#fff}.jwplayer{width:100%;font-size:16px;position:relative;display:block;min-height:0;overflow:hidden;box-sizing:border-box;font-family:Arial,Helvetica,sans-serif;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.jwplayer *{box-sizing:inherit}.jwplayer.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jwplayer.jw-flag-aspect-mode{height:auto !important}.jwplayer.jw-flag-aspect-mode .jw-aspect{display:block}.jwplayer .jw-aspect{display:none}.jwplayer .jw-swf{outline:none}.jw-media,.jw-preview{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}.jw-media{overflow:hidden;cursor:pointer}.jw-plugin{position:absolute;bottom:66px}.jw-breakpoint-7 .jw-plugin{bottom:132px}.jw-plugin .jw-banner{max-width:100%;opacity:0;cursor:pointer;position:absolute;margin:auto auto 0;left:0;right:0;bottom:0;display:block}.jw-preview,.jw-captions,.jw-title{pointer-events:none}.jw-media,.jw-logo{pointer-events:all}.jw-wrapper{background-color:#000;position:absolute;top:0;left:0;right:0;bottom:0}.jw-hidden-accessibility{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.jw-contract-trigger::before{content:"";overflow:hidden;width:200%;height:200%;display:block;position:absolute;top:0;left:0}.jwplayer .jw-media video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:auto;background:transparent}.jwplayer .jw-media video::-webkit-media-controls-start-playback-button{display:none}.jwplayer.jw-stretch-uniform .jw-media video{object-fit:contain}.jwplayer.jw-stretch-none .jw-media video{object-fit:none}.jwplayer.jw-stretch-fill .jw-media video{object-fit:cover}.jwplayer.jw-stretch-exactfit .jw-media video{object-fit:fill}.jw-preview{position:absolute;display:none;opacity:1;visibility:visible;width:100%;height:100%;background:#000 no-repeat 50% 50%}.jwplayer .jw-preview,.jw-error .jw-preview{background-size:contain}.jw-stretch-none .jw-preview{background-size:auto auto}.jw-stretch-fill .jw-preview{background-size:cover}.jw-stretch-exactfit .jw-preview{background-size:100% 100%}.jw-title{display:none;padding-top:20px;width:100%;z-index:1}.jw-title-primary,.jw-title-secondary{color:#fff;padding-left:20px;padding-right:20px;padding-bottom:.5em;overflow:hidden;text-overflow:ellipsis;direction:unset;white-space:nowrap;width:100%}.jw-title-primary{font-size:1.625em}.jw-breakpoint-2 .jw-title-primary,.jw-breakpoint-3 .jw-title-primary{font-size:1.5em}.jw-flag-small-player .jw-title-primary{font-size:1.25em}.jw-flag-small-player .jw-title-secondary,.jw-title-secondary:empty{display:none}.jw-captions{position:absolute;width:100%;height:100%;text-align:center;display:none;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-decoration:none;pointer-events:none;overflow:hidden;top:0}.jw-captions.jw-captions-enabled{display:block}.jw-captions-window{display:none;padding:.25em;border-radius:.25em}.jw-captions-window.jw-captions-window-active{display:inline-block}.jw-captions-text{display:inline-block;color:#fff;background-color:#000;word-wrap:normal;word-break:normal;white-space:pre-line;font-style:normal;font-weight:normal;text-align:center;text-decoration:none}.jw-text-track-display{font-size:inherit;line-height:1.5}.jw-text-track-cue{background-color:rgba(0,0,0,0.5);color:#fff;padding:.1em .3em}.jwplayer video::-webkit-media-controls{display:none;justify-content:flex-start}.jwplayer video::-webkit-media-text-track-display{min-width:-webkit-min-content}.jwplayer video::cue{background-color:rgba(0,0,0,0.5)}.jwplayer video::-webkit-media-controls-panel-container{display:none}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing) .jw-captions,.jwplayer.jw-flag-media-audio.jw-state-playing .jw-captions,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden) .jw-captions{max-height:calc(100% - 60px)}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-flag-media-audio.jw-state-playing:not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container{max-height:calc(100% - 60px)}.jw-logo{position:absolute;margin:20px;cursor:pointer;pointer-events:all;background-repeat:no-repeat;background-size:contain;top:auto;right:auto;left:auto;bottom:auto;outline:none}.jw-logo.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-flag-audio-player .jw-logo{display:none}.jw-logo-top-right{top:0;right:0}.jw-logo-top-left{top:0;left:0}.jw-logo-bottom-left{left:0}.jw-logo-bottom-right{right:0}.jw-logo-bottom-left,.jw-logo-bottom-right{bottom:44px;transition:bottom 150ms cubic-bezier(0, .25, .25, 1)}.jw-state-idle .jw-logo{z-index:1}.jw-state-setup .jw-wrapper{background-color:inherit}.jw-state-setup .jw-logo,.jw-state-setup .jw-controls,.jw-state-setup .jw-controls-backdrop{visibility:hidden}span.jw-break{display:block}body .jw-error,body .jwplayer.jw-state-error{background-color:#333;color:#fff;font-size:16px;display:table;opacity:1;position:relative}body .jw-error .jw-display,body .jwplayer.jw-state-error .jw-display{display:none}body .jw-error .jw-media,body .jwplayer.jw-state-error .jw-media{cursor:default}body .jw-error .jw-preview,body .jwplayer.jw-state-error .jw-preview{background-color:#333}body .jw-error .jw-error-msg,body .jwplayer.jw-state-error .jw-error-msg{background-color:#000;border-radius:2px;display:flex;flex-direction:row;align-items:stretch;padding:20px}body .jw-error .jw-error-msg .jw-icon,body .jwplayer.jw-state-error .jw-error-msg .jw-icon{height:30px;width:30px;margin-right:20px;flex:0 0 auto;align-self:center}body .jw-error .jw-error-msg .jw-icon:empty,body .jwplayer.jw-state-error .jw-error-msg .jw-icon:empty{display:none}body .jw-error .jw-error-msg .jw-info-container,body .jwplayer.jw-state-error .jw-error-msg .jw-info-container{margin:0;padding:0}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg{flex-direction:column}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text{text-align:center}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon{flex:.5 0 auto;margin-right:0;margin-bottom:20px}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break{display:inline}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break:before{content:" "}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg{height:100%;width:100%;top:0;position:absolute;left:0;background:#000;-webkit-transform:none;transform:none;padding:4px 16px;z-index:1}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg.jw-info-overlay{max-width:none;max-height:none}body .jwplayer.jw-state-error .jw-title,.jw-state-idle .jw-title,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-title{display:block}body .jwplayer.jw-state-error .jw-preview,.jw-state-idle .jw-preview,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-preview{display:block}.jw-state-idle .jw-captions,.jwplayer.jw-state-complete .jw-captions,body .jwplayer.jw-state-error .jw-captions{display:none}.jw-state-idle video::-webkit-media-text-track-container,.jwplayer.jw-state-complete video::-webkit-media-text-track-container,body .jwplayer.jw-state-error video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-fullscreen{width:100% !important;height:100% !important;top:0;right:0;bottom:0;left:0;z-index:1000;margin:0;position:fixed}body .jwplayer.jw-flag-flash-blocked .jw-title{display:block}.jwplayer.jw-flag-controls-hidden .jw-media{cursor:default}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:45px}.jw-flag-floating{background-size:cover;background-color:#000}.jw-flag-floating .jw-wrapper{position:fixed;z-index:2147483647;-webkit-animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;top:auto;bottom:1rem;left:auto;right:1rem;max-width:400px;max-height:400px;margin:0 auto}@media screen and (max-width:480px){.jw-flag-floating .jw-wrapper{width:100%;left:0;right:0}}.jw-flag-floating .jw-wrapper .jw-media{touch-action:none}@media screen and (max-device-width:480px) and (orientation:portrait){.jw-flag-touch.jw-flag-floating .jw-wrapper{-webkit-animation:none;animation:none;top:62px;bottom:auto;left:0;right:0;max-width:none;max-height:none}}.jw-flag-floating .jw-float-icon{pointer-events:all;cursor:pointer;display:none}.jw-flag-floating .jw-float-icon .jw-svg-icon{-webkit-filter:drop-shadow(0 0 1px #000);filter:drop-shadow(0 0 1px #000)}.jw-flag-floating.jw-floating-dismissible .jw-dismiss-icon{display:none}.jw-flag-floating.jw-floating-dismissible.jw-flag-ads .jw-float-icon{display:flex}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-logo,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-logo{display:none}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-float-icon,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-float-icon{display:flex}.jw-float-icon{display:none;position:absolute;top:3px;right:5px;align-items:center;justify-content:center}@-webkit-keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.jw-flag-top{margin-top:2em;overflow:visible}.jw-top{height:2em;line-height:2;pointer-events:none;text-align:center;opacity:.8;position:absolute;top:-2em;width:100%}.jw-top .jw-icon{cursor:pointer;pointer-events:all;height:auto;width:auto}.jw-top .jw-text{color:#555}',""])},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t,i){var n=i(91);"string"==typeof n&&(n=[["all-players",n,""]]),i(35).style(n,"all-players"),n.locals&&(e.exports=n.locals)},function(e,t,i){(e.exports=i(59)(!1)).push([e.i,'.jw-overlays,.jw-controls,.jw-controls-backdrop,.jw-flag-small-player .jw-settings-menu,.jw-settings-submenu{height:100%;width:100%}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-settings-menu .jw-icon.jw-button-color::after{position:absolute;right:0}.jw-overlays,.jw-controls,.jw-controls-backdrop,.jw-settings-item-active::before{top:0;position:absolute;left:0}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-settings-menu .jw-icon.jw-button-color::after{position:absolute;bottom:0;left:0}.jw-nextup-close{position:absolute;top:0;right:0}.jw-overlays,.jw-controls,.jw-flag-small-player .jw-settings-menu{position:absolute;bottom:0;right:0}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-time-tip::after,.jw-settings-menu .jw-icon.jw-button-color::after,.jw-text-live::before,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{content:"";display:block}.jw-svg-icon{height:24px;width:24px;fill:currentColor;pointer-events:none}.jw-icon{height:44px;width:44px;background-color:transparent;outline:none}.jw-icon.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-icon-airplay .jw-svg-icon-airplay-off{display:none}.jw-off.jw-icon-airplay .jw-svg-icon-airplay-off{display:block}.jw-icon-airplay .jw-svg-icon-airplay-on{display:block}.jw-off.jw-icon-airplay .jw-svg-icon-airplay-on{display:none}.jw-icon-cc .jw-svg-icon-cc-off{display:none}.jw-off.jw-icon-cc .jw-svg-icon-cc-off{display:block}.jw-icon-cc .jw-svg-icon-cc-on{display:block}.jw-off.jw-icon-cc .jw-svg-icon-cc-on{display:none}.jw-icon-fullscreen .jw-svg-icon-fullscreen-off{display:none}.jw-off.jw-icon-fullscreen .jw-svg-icon-fullscreen-off{display:block}.jw-icon-fullscreen .jw-svg-icon-fullscreen-on{display:block}.jw-off.jw-icon-fullscreen .jw-svg-icon-fullscreen-on{display:none}.jw-icon-volume .jw-svg-icon-volume-0{display:none}.jw-off.jw-icon-volume .jw-svg-icon-volume-0{display:block}.jw-icon-volume .jw-svg-icon-volume-100{display:none}.jw-full.jw-icon-volume .jw-svg-icon-volume-100{display:block}.jw-icon-volume .jw-svg-icon-volume-50{display:block}.jw-off.jw-icon-volume .jw-svg-icon-volume-50,.jw-full.jw-icon-volume .jw-svg-icon-volume-50{display:none}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon[aria-checked="true"]::after,.jw-settings-open .jw-icon-settings::after,.jw-icon-volume.jw-open::after{opacity:1}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-cc,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-settings,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-audio-tracks,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-hd,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-settings-sharing,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-fullscreen,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player).jw-flag-cast-available .jw-icon-airplay,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player).jw-flag-cast-available .jw-icon-cast{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-volume,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-text-live{bottom:6px}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-volume::after{display:none}.jw-overlays,.jw-controls{pointer-events:none}.jw-controls-backdrop{display:block;background:linear-gradient(to bottom, transparent, rgba(0,0,0,0.4) 77%, rgba(0,0,0,0.4) 100%) 100% 100% / 100% 240px no-repeat transparent;transition:opacity 250ms cubic-bezier(0, .25, .25, 1),background-size 250ms cubic-bezier(0, .25, .25, 1);pointer-events:none}.jw-overlays{cursor:auto}.jw-controls{overflow:hidden}.jw-flag-small-player .jw-controls{text-align:center}.jw-text{height:1em;font-family:Arial,Helvetica,sans-serif;font-size:.75em;font-style:normal;font-weight:normal;color:#fff;text-align:center;font-variant:normal;font-stretch:normal}.jw-controlbar,.jw-skip,.jw-display-icon-container .jw-icon,.jw-nextup-container,.jw-autostart-mute,.jw-overlays .jw-plugin{pointer-events:all}.jwplayer .jw-display-icon-container,.jw-error .jw-display-icon-container{width:auto;height:auto;box-sizing:content-box}.jw-display{display:table;height:100%;padding:57px 0;position:relative;width:100%}.jw-flag-dragging .jw-display{display:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-display-container{display:table-cell;height:100%;text-align:center;vertical-align:middle}.jw-display-controls{display:inline-block}.jwplayer .jw-display-icon-container{float:left}.jw-display-icon-container{display:inline-block;padding:5.5px;margin:0 22px}.jw-display-icon-container .jw-icon{height:75px;width:75px;cursor:pointer;display:flex;justify-content:center;align-items:center}.jw-display-icon-container .jw-icon .jw-svg-icon{height:33px;width:33px;padding:0;position:relative}.jw-display-icon-container .jw-icon .jw-svg-icon-rewind{padding:.2em .05em}.jw-breakpoint--1 .jw-nextup-container{display:none}.jw-breakpoint-0 .jw-display-icon-next,.jw-breakpoint--1 .jw-display-icon-next,.jw-breakpoint-0 .jw-display-icon-rewind,.jw-breakpoint--1 .jw-display-icon-rewind{display:none}.jw-breakpoint-0 .jw-display .jw-icon,.jw-breakpoint--1 .jw-display .jw-icon,.jw-breakpoint-0 .jw-display .jw-svg-icon,.jw-breakpoint--1 .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px}.jw-breakpoint-0 .jw-display .jw-icon:before,.jw-breakpoint--1 .jw-display .jw-icon:before,.jw-breakpoint-0 .jw-display .jw-svg-icon:before,.jw-breakpoint--1 .jw-display .jw-svg-icon:before{width:22px;height:22px}.jw-breakpoint-1 .jw-display .jw-icon,.jw-breakpoint-1 .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px}.jw-breakpoint-1 .jw-display .jw-icon:before,.jw-breakpoint-1 .jw-display .jw-svg-icon:before{width:22px;height:22px}.jw-breakpoint-1 .jw-display .jw-icon.jw-icon-rewind:before{width:33px;height:33px}.jw-breakpoint-2 .jw-display .jw-icon,.jw-breakpoint-3 .jw-display .jw-icon,.jw-breakpoint-2 .jw-display .jw-svg-icon,.jw-breakpoint-3 .jw-display .jw-svg-icon{width:77px;height:77px;line-height:77px}.jw-breakpoint-2 .jw-display .jw-icon:before,.jw-breakpoint-3 .jw-display .jw-icon:before,.jw-breakpoint-2 .jw-display .jw-svg-icon:before,.jw-breakpoint-3 .jw-display .jw-svg-icon:before{width:38.5px;height:38.5px}.jw-breakpoint-4 .jw-display .jw-icon,.jw-breakpoint-5 .jw-display .jw-icon,.jw-breakpoint-6 .jw-display .jw-icon,.jw-breakpoint-7 .jw-display .jw-icon,.jw-breakpoint-4 .jw-display .jw-svg-icon,.jw-breakpoint-5 .jw-display .jw-svg-icon,.jw-breakpoint-6 .jw-display .jw-svg-icon,.jw-breakpoint-7 .jw-display .jw-svg-icon{width:88px;height:88px;line-height:88px}.jw-breakpoint-4 .jw-display .jw-icon:before,.jw-breakpoint-5 .jw-display .jw-icon:before,.jw-breakpoint-6 .jw-display .jw-icon:before,.jw-breakpoint-7 .jw-display .jw-icon:before,.jw-breakpoint-4 .jw-display .jw-svg-icon:before,.jw-breakpoint-5 .jw-display .jw-svg-icon:before,.jw-breakpoint-6 .jw-display .jw-svg-icon:before,.jw-breakpoint-7 .jw-display .jw-svg-icon:before{width:44px;height:44px}.jw-controlbar{display:flex;flex-flow:row wrap;align-items:center;justify-content:center;position:absolute;left:0;bottom:0;width:100%;border:none;border-radius:0;background-size:auto;box-shadow:none;max-height:72px;transition:250ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s}.jw-breakpoint-7 .jw-controlbar{max-height:140px}.jw-breakpoint-7 .jw-controlbar .jw-button-container{padding:0 48px 20px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-tooltip{margin-bottom:-7px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume .jw-overlay{padding-bottom:40%}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-text{font-size:1em}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-text.jw-text-elapsed{justify-content:flex-end}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-inline,.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume{height:60px;width:60px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-inline .jw-svg-icon,.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-controlbar .jw-slider-time{padding:0 60px;height:34px}.jw-breakpoint-7 .jw-controlbar .jw-slider-time .jw-slider-container{height:10px}.jw-controlbar .jw-button-image{background:no-repeat 50% 50%;background-size:contain;max-height:24px}.jw-controlbar .jw-spacer{flex:1 1 auto;align-self:stretch}.jw-controlbar .jw-icon.jw-button-color:hover{color:#fff}.jw-button-container{display:flex;flex-flow:row nowrap;flex:1 1 auto;align-items:center;justify-content:center;width:100%;padding:0 12px}.jw-slider-horizontal{background-color:transparent}.jw-icon-inline{position:relative}.jw-icon-inline,.jw-icon-tooltip{height:44px;width:44px;align-items:center;display:flex;justify-content:center}.jw-icon-inline:not(.jw-text),.jw-icon-tooltip,.jw-slider-horizontal{cursor:pointer}.jw-text-elapsed,.jw-text-duration{justify-content:flex-start;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.jw-icon-tooltip{position:relative}.jw-knob:hover,.jw-icon-inline:hover,.jw-icon-tooltip:hover,.jw-icon-display:hover,.jw-option:before:hover{color:#fff}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{pointer-events:none}.jw-icon-cast{display:none;margin:0;padding:0}.jw-icon-cast google-cast-launcher{background-color:transparent;border:none;padding:0;width:24px;height:24px;cursor:pointer}.jw-icon-inline.jw-icon-volume{display:none}.jwplayer .jw-text-countdown{display:none}.jw-flag-small-player .jw-display{padding-top:0;padding-bottom:0}.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-rewind,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-next,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-playback{display:none}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop{opacity:0}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-countdown{display:flex}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-duration,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-duration{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-text-countdown,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-related-btn,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-slider-volume{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-controlbar{flex-direction:column-reverse}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-button-container{height:30px}.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-volume,.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-fullscreen{display:none}.jwplayer:not(.jw-breakpoint-0) .jw-text-duration:before,.jwplayer:not(.jw-breakpoint--1) .jw-text-duration:before{content:"/";padding-right:1ch;padding-left:1ch}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar{will-change:transform}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar .jw-text{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.jw-slider-container{display:flex;align-items:center;position:relative;touch-action:none}.jw-rail,.jw-buffer,.jw-progress{position:absolute;cursor:pointer}.jw-progress{background-color:#f2f2f2}.jw-rail{background-color:rgba(255,255,255,0.3)}.jw-buffer{background-color:rgba(255,255,255,0.3)}.jw-knob{height:13px;width:13px;background-color:#fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,0.4);opacity:1;pointer-events:none;position:absolute;-webkit-transform:translate(-50%, -50%) scale(0);transform:translate(-50%, -50%) scale(0);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform}.jw-flag-dragging .jw-slider-time .jw-knob,.jw-icon-volume:active .jw-slider-volume .jw-knob{box-shadow:0 0 26px rgba(0,0,0,0.2),0 0 10px rgba(0,0,0,0.4),0 0 0 6px rgba(255,255,255,0.2)}.jw-slider-horizontal,.jw-slider-vertical{display:flex}.jw-slider-horizontal .jw-slider-container{height:5px;width:100%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue,.jw-slider-horizontal .jw-knob{top:50%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue{-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress{height:5px}.jw-slider-horizontal .jw-rail{width:100%}.jw-slider-vertical{align-items:center;flex-direction:column}.jw-slider-vertical .jw-slider-container{height:88px;width:5px}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress,.jw-slider-vertical .jw-knob{left:50%}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress{height:100%;width:5px;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out;bottom:0}.jw-slider-vertical .jw-knob{-webkit-transform:translate(-50%, 50%);transform:translate(-50%, 50%)}.jw-slider-time.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-slider-time,.jw-flag-audio-player .jw-slider-volume{height:17px;width:100%;align-items:center;background:transparent none;padding:0 12px}.jw-slider-time .jw-cue{background-color:rgba(33,33,33,0.8);cursor:pointer;position:absolute;width:6px}.jw-slider-time,.jw-horizontal-volume-container{z-index:1;outline:none}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail,.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer,.jw-slider-time .jw-progress,.jw-horizontal-volume-container .jw-progress,.jw-slider-time .jw-cue,.jw-horizontal-volume-container .jw-cue{-webkit-backface-visibility:hidden;backface-visibility:hidden;height:100%;-webkit-transform:translate(0, -50%) scale(1, .6);transform:translate(0, -50%) scale(1, .6);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}.jw-slider-time:hover .jw-rail,.jw-horizontal-volume-container:hover .jw-rail,.jw-slider-time:focus .jw-rail,.jw-horizontal-volume-container:focus .jw-rail,.jw-flag-dragging .jw-slider-time .jw-rail,.jw-flag-dragging .jw-horizontal-volume-container .jw-rail,.jw-flag-touch .jw-slider-time .jw-rail,.jw-flag-touch .jw-horizontal-volume-container .jw-rail,.jw-slider-time:hover .jw-buffer,.jw-horizontal-volume-container:hover .jw-buffer,.jw-slider-time:focus .jw-buffer,.jw-horizontal-volume-container:focus .jw-buffer,.jw-flag-dragging .jw-slider-time .jw-buffer,.jw-flag-dragging .jw-horizontal-volume-container .jw-buffer,.jw-flag-touch .jw-slider-time .jw-buffer,.jw-flag-touch .jw-horizontal-volume-container .jw-buffer,.jw-slider-time:hover .jw-progress,.jw-horizontal-volume-container:hover .jw-progress,.jw-slider-time:focus .jw-progress,.jw-horizontal-volume-container:focus .jw-progress,.jw-flag-dragging .jw-slider-time .jw-progress,.jw-flag-dragging .jw-horizontal-volume-container .jw-progress,.jw-flag-touch .jw-slider-time .jw-progress,.jw-flag-touch .jw-horizontal-volume-container .jw-progress,.jw-slider-time:hover .jw-cue,.jw-horizontal-volume-container:hover .jw-cue,.jw-slider-time:focus .jw-cue,.jw-horizontal-volume-container:focus .jw-cue,.jw-flag-dragging .jw-slider-time .jw-cue,.jw-flag-dragging .jw-horizontal-volume-container .jw-cue,.jw-flag-touch .jw-slider-time .jw-cue,.jw-flag-touch .jw-horizontal-volume-container .jw-cue{-webkit-transform:translate(0, -50%) scale(1, 1);transform:translate(0, -50%) scale(1, 1)}.jw-slider-time:hover .jw-knob,.jw-horizontal-volume-container:hover .jw-knob,.jw-slider-time:focus .jw-knob,.jw-horizontal-volume-container:focus .jw-knob{-webkit-transform:translate(-50%, -50%) scale(1);transform:translate(-50%, -50%) scale(1)}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail{background-color:rgba(255,255,255,0.2)}.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer{background-color:rgba(255,255,255,0.4)}.jw-flag-touch .jw-slider-time::before,.jw-flag-touch .jw-horizontal-volume-container::before{height:44px;width:100%;content:"";position:absolute;display:block;bottom:calc(100% - 17px);left:0}.jw-slider-time.jw-tab-focus:focus .jw-rail,.jw-horizontal-volume-container.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time{height:17px;padding:0}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-slider-container{height:10px}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-knob{border-radius:0;border:1px solid rgba(0,0,0,0.75);height:12px;width:10px}.jw-modal{width:284px}.jw-breakpoint-7 .jw-modal,.jw-breakpoint-6 .jw-modal,.jw-breakpoint-5 .jw-modal{height:232px}.jw-breakpoint-4 .jw-modal,.jw-breakpoint-3 .jw-modal{height:192px}.jw-breakpoint-2 .jw-modal,.jw-flag-small-player .jw-modal{bottom:0;right:0;height:100%;width:100%;max-height:none;max-width:none;z-index:2}.jwplayer .jw-rightclick{display:none;position:absolute;white-space:nowrap}.jwplayer .jw-rightclick.jw-open{display:block}.jwplayer .jw-rightclick .jw-rightclick-list{border-radius:1px;list-style:none;margin:0;padding:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item{background-color:rgba(0,0,0,0.8);border-bottom:1px solid #444;margin:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo{color:#fff;display:inline-flex;padding:0 10px 0 0;vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo .jw-svg-icon{height:20px;width:20px}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-link{border:none;color:#fff;display:block;font-size:11px;line-height:1em;padding:15px 23px;text-align:start;text-decoration:none;width:100%}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:last-child{border-bottom:none}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:hover{cursor:pointer}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured{vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link{color:#fff}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link span{color:#fff}.jwplayer .jw-rightclick .jw-info-overlay-item,.jwplayer .jw-rightclick .jw-share-item,.jwplayer .jw-rightclick .jw-shortcuts-item{border:none;background-color:transparent;outline:none;cursor:pointer}.jw-icon-tooltip.jw-open .jw-overlay{opacity:1;pointer-events:auto;transition-delay:0s}.jw-icon-tooltip.jw-open .jw-overlay:focus{outline:none}.jw-icon-tooltip.jw-open .jw-overlay:focus.jw-tab-focus{outline:solid 2px #4d90fe}.jw-slider-time .jw-overlay:before{height:1em;top:auto}.jw-slider-time .jw-icon-tooltip.jw-open .jw-overlay{pointer-events:none}.jw-volume-tip{padding:13px 0 26px}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{height:auto;width:100%;box-shadow:0 0 10px rgba(0,0,0,0.4);color:#fff;display:block;margin:0 0 14px;pointer-events:none;position:relative;z-index:0}.jw-time-tip::after,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{top:100%;position:absolute;left:50%;height:14px;width:14px;border-radius:1px;background-color:currentColor;-webkit-transform-origin:75% 50%;transform-origin:75% 50%;-webkit-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);z-index:-1}.jw-time-tip .jw-text,.jw-controlbar .jw-tooltip .jw-text,.jw-settings-menu .jw-tooltip .jw-text{background-color:#fff;border-radius:1px;color:#000;font-size:10px;height:auto;line-height:1;padding:7px 10px;display:inline-block;min-width:100%;vertical-align:middle}.jw-controlbar .jw-overlay{position:absolute;bottom:100%;left:50%;margin:0;min-height:44px;min-width:44px;opacity:0;pointer-events:none;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s, 150ms;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);width:100%;z-index:1}.jw-controlbar .jw-overlay .jw-contents{position:relative}.jw-controlbar .jw-option{position:relative;white-space:nowrap;cursor:pointer;list-style:none;height:1.5em;font-family:inherit;line-height:1.5em;padding:0 .5em;font-size:.8em;margin:0}.jw-controlbar .jw-option::before{padding-right:.125em}.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{position:absolute;bottom:100%;left:50%;opacity:0;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:100ms 0s cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility, -webkit-transform;transition-property:opacity, transform, visibility;transition-property:opacity, transform, visibility, -webkit-transform;visibility:hidden;white-space:nowrap;width:auto;z-index:1}.jw-controlbar .jw-tooltip.jw-open,.jw-settings-menu .jw-tooltip.jw-open{opacity:1;-webkit-transform:translate(-50%, -10px);transform:translate(-50%, -10px);transition-duration:150ms;transition-delay:500ms,0s,500ms;visibility:visible}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen{left:auto;right:0;-webkit-transform:translate(0, 0);transform:translate(0, 0)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen.jw-open,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen.jw-open{-webkit-transform:translate(0, -10px);transform:translate(0, -10px)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen::after,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen::after{left:auto;right:9px}.jw-tooltip-time{height:auto;width:0;bottom:100%;line-height:normal;padding:0;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jw-tooltip-time .jw-overlay{bottom:0;min-height:0;width:auto}.jw-tooltip{bottom:57px;display:none;position:absolute}.jw-tooltip .jw-text{height:100%;white-space:nowrap;text-overflow:ellipsis;direction:unset;max-width:246px;overflow:hidden}.jw-flag-audio-player .jw-tooltip{display:none}.jw-flag-small-player .jw-time-thumb{display:none}.jwplayer .jw-shortcuts-tooltip{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column;z-index:1}.jwplayer .jw-shortcuts-tooltip.jw-open{display:flex}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-close{flex:0 0 auto;margin:5px 5px 5px auto}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container{display:flex;flex:1 1 auto;flex-flow:column;font-size:12px;margin:0 20px 20px;overflow-y:auto;padding:5px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar{background-color:transparent;width:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-title{font-weight:bold}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list{display:flex;max-width:340px;margin:0 10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-tooltip-descriptions{width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row{display:flex;align-items:center;justify-content:space-between;margin:10px 0;width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-description{margin-right:10px;max-width:70%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-key{background:#fefefe;color:#333;overflow:hidden;padding:7px 10px;text-overflow:ellipsis;white-space:nowrap}.jw-skip{color:rgba(255,255,255,0.8);cursor:default;position:absolute;display:flex;right:.75em;bottom:56px;padding:.5em;border:1px solid #333;background-color:#000;align-items:center;height:2em}.jw-skip.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-skip.jw-skippable{cursor:pointer;padding:.25em .75em}.jw-skip.jw-skippable:hover{cursor:pointer;color:#fff}.jw-skip.jw-skippable .jw-skip-icon{display:inline;height:24px;width:24px;margin:0}.jw-breakpoint-7 .jw-skip{padding:1.35em 1em;bottom:130px}.jw-breakpoint-7 .jw-skip .jw-text{font-size:1em;font-weight:normal}.jw-breakpoint-7 .jw-skip .jw-icon-inline{height:30px;width:30px}.jw-breakpoint-7 .jw-skip .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-skip .jw-skip-icon{display:none;margin-left:-0.75em;padding:0 .5em;pointer-events:none}.jw-skip .jw-skip-icon .jw-svg-icon-next{display:block;padding:0}.jw-skip .jw-text,.jw-skip .jw-skip-icon{vertical-align:middle;font-size:.7em}.jw-skip .jw-text{font-weight:bold}.jw-cast{background-size:cover;display:none;height:100%;position:relative;width:100%}.jw-cast-container{background:linear-gradient(180deg, rgba(25,25,25,0.75), rgba(25,25,25,0.25), rgba(25,25,25,0));left:0;padding:20px 20px 80px;position:absolute;top:0;width:100%}.jw-cast-text{color:#fff;font-size:1.6em}.jw-breakpoint--1 .jw-cast-text,.jw-breakpoint-0 .jw-cast-text{font-size:1.15em}.jw-breakpoint-1 .jw-cast-text,.jw-breakpoint-2 .jw-cast-text,.jw-breakpoint-3 .jw-cast-text{font-size:1.3em}.jw-nextup-container{position:absolute;bottom:66px;left:0;background-color:transparent;cursor:pointer;margin:0 auto;padding:12px;pointer-events:none;right:0;text-align:right;visibility:hidden;width:100%}.jw-settings-open .jw-nextup-container,.jw-info-open .jw-nextup-container{display:none}.jw-breakpoint-7 .jw-nextup-container{padding:60px}.jw-flag-small-player .jw-nextup-container{padding:0 12px 0 0}.jw-flag-small-player .jw-nextup-container .jw-nextup-title,.jw-flag-small-player .jw-nextup-container .jw-nextup-duration,.jw-flag-small-player .jw-nextup-container .jw-nextup-close{display:none}.jw-flag-small-player .jw-nextup-container .jw-nextup-tooltip{height:30px}.jw-flag-small-player .jw-nextup-container .jw-nextup-header{font-size:12px}.jw-flag-small-player .jw-nextup-container .jw-nextup-body{justify-content:center;align-items:center;padding:.75em .3em}.jw-flag-small-player .jw-nextup-container .jw-nextup-thumbnail{width:50%}.jw-flag-small-player .jw-nextup-container .jw-nextup{max-width:65px}.jw-flag-small-player .jw-nextup-container .jw-nextup.jw-nextup-thumbnail-visible{max-width:120px}.jw-nextup{background:#333;border-radius:0;box-shadow:0 0 10px rgba(0,0,0,0.5);color:rgba(255,255,255,0.8);display:inline-block;max-width:280px;overflow:hidden;opacity:0;position:relative;width:64%;pointer-events:all;-webkit-transform:translate(0, -5px);transform:translate(0, -5px);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform;transition-delay:0s}.jw-nextup:hover .jw-nextup-tooltip{color:#fff}.jw-nextup.jw-nextup-thumbnail-visible{max-width:400px}.jw-nextup.jw-nextup-thumbnail-visible .jw-nextup-thumbnail{display:block}.jw-nextup-container-visible{visibility:visible}.jw-nextup-container-visible .jw-nextup{opacity:1;-webkit-transform:translate(0, 0);transform:translate(0, 0);transition-delay:0s, 0s, 150ms}.jw-nextup-tooltip{display:flex;height:80px}.jw-nextup-thumbnail{width:120px;background-position:center;background-size:cover;flex:0 0 auto;display:none}.jw-nextup-body{flex:1 1 auto;overflow:hidden;padding:.75em .875em;display:flex;flex-flow:column wrap;justify-content:space-between}.jw-nextup-header,.jw-nextup-title{font-size:14px;line-height:1.35}.jw-nextup-header{font-weight:bold}.jw-nextup-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.jw-nextup-duration{align-self:flex-end;text-align:right;font-size:12px}.jw-nextup-close{height:24px;width:24px;border:none;color:rgba(255,255,255,0.8);cursor:pointer;margin:6px;visibility:hidden}.jw-nextup-close:hover{color:#fff}.jw-nextup-sticky .jw-nextup-close{visibility:visible}.jw-autostart-mute{position:absolute;bottom:0;right:12px;height:44px;width:44px;background-color:rgba(33,33,33,0.4);padding:5px 4px 5px 6px;display:none}.jwplayer.jw-flag-autostart:not(.jw-flag-media-audio) .jw-nextup{display:none}.jw-settings-menu{position:absolute;bottom:57px;right:12px;align-items:flex-start;background-color:#333;display:none;flex-flow:column nowrap;max-width:284px;pointer-events:auto}.jw-settings-open .jw-settings-menu{display:flex}.jw-breakpoint-7 .jw-settings-menu{bottom:130px;right:60px;max-height:none;max-width:none;height:35%;width:25%}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline{height:60px;width:60px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-tooltip .jw-text{font-size:1em}.jw-breakpoint-6 .jw-settings-menu,.jw-breakpoint-5 .jw-settings-menu{height:232px;width:284px;max-height:232px}.jw-breakpoint-4 .jw-settings-menu,.jw-breakpoint-3 .jw-settings-menu{height:192px;width:284px;max-height:192px}.jw-breakpoint-2 .jw-settings-menu{height:179px;width:284px;max-height:179px}.jw-flag-small-player .jw-settings-menu{max-width:none}.jw-settings-menu .jw-icon.jw-button-color::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon.jw-button-color[aria-checked="true"]::after{opacity:1}.jw-settings-topbar{align-items:center;background-color:rgba(0,0,0,0.4);display:flex;flex:0 0 auto;padding:3px 5px 0;width:100%}.jw-settings-topbar .jw-settings-close{margin-left:auto}.jw-settings-submenu{display:none;flex:1 1 auto;overflow-y:auto;padding:8px 20px 0 5px}.jw-settings-submenu::-webkit-scrollbar{background-color:transparent;width:6px}.jw-settings-submenu::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-settings-submenu.jw-settings-submenu-active{display:block}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item{font-size:1em;padding:11px 0 11px 30px}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-settings-item-active::before{justify-content:flex-end}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-auto-label{font-size:.85em;padding-left:10px}.jw-flag-touch .jw-settings-submenu{overflow-y:scroll;-webkit-overflow-scrolling:touch}.jw-auto-label{font-size:10px;font-weight:initial;opacity:.75;padding-left:5px}.jw-settings-content-item{position:relative;color:rgba(255,255,255,0.8);cursor:pointer;font-size:12px;line-height:1;padding:7px 0 7px 15px;width:100%;text-align:left;outline:none}.jw-settings-content-item:hover{color:#fff}.jw-settings-content-item:focus{font-weight:bold}.jw-flag-small-player .jw-settings-content-item{line-height:1.75}.jw-settings-content-item.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-settings-item-active{font-weight:bold;position:relative}.jw-settings-item-active::before{height:100%;width:1em;align-items:center;content:"\\2022";display:inline-flex;justify-content:center}.jw-breakpoint-2 .jw-settings-open .jw-display-container,.jw-flag-small-player .jw-settings-open .jw-display-container,.jw-flag-touch .jw-settings-open .jw-display-container{display:none}.jw-breakpoint-2 .jw-settings-open.jw-controls,.jw-flag-small-player .jw-settings-open.jw-controls,.jw-flag-touch .jw-settings-open.jw-controls{z-index:1}.jw-flag-small-player .jw-settings-open .jw-controlbar{display:none}.jw-settings-open .jw-icon-settings::after{opacity:1}.jw-settings-open .jw-tooltip-settings{display:none}.jw-sharing-link{cursor:pointer}.jw-shortcuts-container .jw-switch{position:relative;display:inline-block;transition:ease-out .15s;transition-property:opacity, background;border-radius:18px;width:80px;height:20px;padding:10px;background:rgba(80,80,80,0.8);cursor:pointer;font-size:inherit;vertical-align:middle}.jw-shortcuts-container .jw-switch .jw-switch-knob{position:absolute;top:2px;left:1px;transition:ease-out .15s;box-shadow:0 0 10px rgba(0,0,0,0.4);border-radius:13px;width:15px;height:15px;background:#fefefe}.jw-shortcuts-container .jw-switch:before,.jw-shortcuts-container .jw-switch:after{position:absolute;top:3px;transition:inherit;color:#fefefe}.jw-shortcuts-container .jw-switch:before{content:attr(data-jw-switch-disabled);right:8px}.jw-shortcuts-container .jw-switch:after{content:attr(data-jw-switch-enabled);left:8px;opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]{background:#475470}.jw-shortcuts-container .jw-switch[aria-checked="true"]:before{opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]:after{opacity:1}.jw-shortcuts-container .jw-switch[aria-checked="true"] .jw-switch-knob{left:60px}.jw-idle-icon-text{display:none;line-height:1;position:absolute;text-align:center;text-indent:.35em;top:100%;white-space:nowrap;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.jw-idle-label{border-radius:50%;color:#fff;-webkit-filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));font:normal 16px/1 Arial,Helvetica,sans-serif;position:relative;transition:background-color 150ms cubic-bezier(0, .25, .25, 1);transition-property:background-color,-webkit-filter;transition-property:background-color,filter;transition-property:background-color,filter,-webkit-filter;-webkit-font-smoothing:antialiased}.jw-state-idle .jw-icon-display.jw-idle-label .jw-idle-icon-text{display:block}.jw-state-idle .jw-icon-display.jw-idle-label .jw-svg-icon-play{-webkit-transform:scale(.7, .7);transform:scale(.7, .7)}.jw-breakpoint-0.jw-state-idle .jw-icon-display.jw-idle-label,.jw-breakpoint--1.jw-state-idle .jw-icon-display.jw-idle-label{font-size:12px}.jw-info-overlay{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column}.jw-info-overlay .jw-info-close{flex:0 0 auto;margin:5px 5px 5px auto}.jw-info-open .jw-info-overlay{display:flex}.jw-info-container{display:flex;flex:1 1 auto;flex-flow:column;margin:0 20px 20px;overflow-y:auto;padding:5px}.jw-info-container [class*="jw-info"]:not(:first-of-type){color:rgba(255,255,255,0.8);padding-top:10px;font-size:12px}.jw-info-container .jw-info-description{margin-bottom:30px;text-align:start}.jw-info-container .jw-info-description:empty{display:none}.jw-info-container .jw-info-duration{text-align:start}.jw-info-container .jw-info-title{text-align:start;font-size:12px;font-weight:bold}.jw-info-container::-webkit-scrollbar{background-color:transparent;width:6px}.jw-info-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-info-clientid{align-self:flex-end;font-size:12px;color:rgba(255,255,255,0.8);margin:0 20px 20px 44px;text-align:right}.jw-flag-touch .jw-info-open .jw-display-container{display:none}@supports ((-webkit-filter: drop-shadow(0 0 3px #000)) or (filter: drop-shadow(0 0 3px #000))){.jwplayer.jw-ab-drop-shadow .jw-controls .jw-svg-icon,.jwplayer.jw-ab-drop-shadow .jw-controls .jw-icon.jw-text,.jwplayer.jw-ab-drop-shadow .jw-slider-container .jw-rail,.jwplayer.jw-ab-drop-shadow .jw-title{text-shadow:none;box-shadow:none;-webkit-filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3));filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3))}.jwplayer.jw-ab-drop-shadow .jw-button-color{opacity:.8;transition-property:color, opacity}.jwplayer.jw-ab-drop-shadow .jw-button-color:not(:hover){color:#fff;opacity:.8}.jwplayer.jw-ab-drop-shadow .jw-button-color:hover{opacity:1}.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0), hsla(0, 0%, 0%, 0.00787) 10.79%, hsla(0, 0%, 0%, 0.02963) 21.99%, hsla(0, 0%, 0%, 0.0625) 33.34%, hsla(0, 0%, 0%, 0.1037) 44.59%, hsla(0, 0%, 0%, 0.15046) 55.48%, hsla(0, 0%, 0%, 0.2) 65.75%, hsla(0, 0%, 0%, 0.24954) 75.14%, hsla(0, 0%, 0%, 0.2963) 83.41%, hsla(0, 0%, 0%, 0.3375) 90.28%, hsla(0, 0%, 0%, 0.37037) 95.51%, hsla(0, 0%, 0%, 0.39213) 98.83%, hsla(0, 0%, 0%, 0.4));mix-blend-mode:multiply;transition-property:opacity}.jw-state-idle.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0.2), hsla(0, 0%, 0%, 0.19606) 1.17%, hsla(0, 0%, 0%, 0.18519) 4.49%, hsla(0, 0%, 0%, 0.16875) 9.72%, hsla(0, 0%, 0%, 0.14815) 16.59%, hsla(0, 0%, 0%, 0.12477) 24.86%, hsla(0, 0%, 0%, 0.1) 34.25%, hsla(0, 0%, 0%, 0.07523) 44.52%, hsla(0, 0%, 0%, 0.05185) 55.41%, hsla(0, 0%, 0%, 0.03125) 66.66%, hsla(0, 0%, 0%, 0.01481) 78.01%, hsla(0, 0%, 0%, 0.00394) 89.21%, hsla(0, 0%, 0%, 0));background-size:100% 7rem;background-position:50% 0}.jwplayer.jw-ab-drop-shadow.jw-state-idle .jw-controls{background-color:transparent}}.jw-video-thumbnail-container{position:relative;overflow:hidden}.jw-video-thumbnail-container:not(.jw-related-shelf-item-image){height:100%;width:100%}.jw-video-thumbnail-container.jw-video-thumbnail-generated{position:absolute;top:0;left:0}.jw-video-thumbnail-container:hover,.jw-related-item-content:hover .jw-video-thumbnail-container,.jw-related-shelf-item:hover .jw-video-thumbnail-container{cursor:pointer}.jw-video-thumbnail-container:hover .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-item-content:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-shelf-item:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail{position:absolute;top:50%;left:50%;bottom:unset;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:100%;height:auto;min-width:100%;min-height:100%;opacity:0;transition:opacity .3s ease;object-fit:cover;background:#000}.jw-related-item-next-up .jw-video-thumbnail-container .jw-video-thumbnail{height:100%;width:auto}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-visible:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-completed{opacity:0}.jw-video-thumbnail-container .jw-video-thumbnail~.jw-svg-icon-play{display:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-shelf-item-aspect{pointer-events:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-item-poster-content{pointer-events:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-state-idle .jw-controls{background:rgba(0,0,0,0.4)}.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay),.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay){display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon:focus{border:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon .jw-svg-icon-buffer{-webkit-animation:jw-spin 2s linear infinite;animation:jw-spin 2s linear infinite;display:block}@-webkit-keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jwplayer.jw-state-buffering .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-pause{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-pause{display:block}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-controls-backdrop{opacity:0}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-logo-bottom-left,.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio):not(.jw-flag-autostart) .jw-logo-bottom-right{bottom:0}.jwplayer .jw-icon-playback .jw-svg-icon-stop{display:none}.jwplayer.jw-state-paused .jw-svg-icon-pause,.jwplayer.jw-state-idle .jw-svg-icon-pause,.jwplayer.jw-state-error .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-svg-icon-pause{display:none}.jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-complete .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-play{display:none}.jwplayer:not(.jw-state-buffering) .jw-svg-icon-buffer{display:none}.jwplayer:not(.jw-state-complete) .jw-svg-icon-replay{display:none}.jwplayer:not(.jw-state-error) .jw-svg-icon-error{display:none}.jwplayer.jw-state-complete .jw-display .jw-icon-display .jw-svg-icon-replay{display:block}.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-state-complete .jw-controls{background:rgba(0,0,0,0.4);height:100%}.jw-state-idle .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-state-idle .jw-display-icon-rewind,.jwplayer.jw-state-buffering .jw-display-icon-rewind,.jwplayer.jw-state-complete .jw-display-icon-rewind,body .jw-error .jw-display-icon-rewind,body .jwplayer.jw-state-error .jw-display-icon-rewind,.jw-state-idle .jw-display-icon-next,.jwplayer.jw-state-buffering .jw-display-icon-next,.jwplayer.jw-state-complete .jw-display-icon-next,body .jw-error .jw-display-icon-next,body .jwplayer.jw-state-error .jw-display-icon-next{display:none}body .jw-error .jw-icon-display,body .jwplayer.jw-state-error .jw-icon-display{cursor:default}body .jw-error .jw-icon-display .jw-svg-icon-error,body .jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-error{display:block}body .jw-error .jw-icon-container{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-preview{display:none}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title{padding-top:4px}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-primary{width:auto;display:inline-block;padding-right:.5ch}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-secondary{width:auto;display:inline-block;padding-left:0}body .jwplayer.jw-state-error .jw-controlbar,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-controlbar{display:none}body .jwplayer.jw-state-error .jw-settings-menu,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-settings-menu{height:100%;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}body .jwplayer.jw-state-error .jw-display,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-display{padding:0}body .jwplayer.jw-state-error .jw-logo-bottom-left,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-left,body .jwplayer.jw-state-error .jw-logo-bottom-right,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-right{bottom:0}.jwplayer.jw-state-playing.jw-flag-user-inactive .jw-display{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-state-playing:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display,.jwplayer.jw-state-paused:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting):not(.jw-flag-play-rejected) .jw-display{display:none}.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-rewind,.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-next{display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-text,.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-flag-casting:not(.jw-flag-audio-player) .jw-cast{display:block}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-display-icon-container{display:none}.jwplayer.jw-flag-casting .jw-icon-hd,.jwplayer.jw-flag-casting .jw-captions,.jwplayer.jw-flag-casting .jw-icon-fullscreen,.jwplayer.jw-flag-casting .jw-icon-audio-tracks{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-volume{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-airplay{color:#fff}.jw-state-playing.jw-flag-casting:not(.jw-flag-audio-player) .jw-display,.jw-state-paused.jw-flag-casting:not(.jw-flag-audio-player) .jw-display{display:table}.jwplayer.jw-flag-cast-available .jw-icon-cast,.jwplayer.jw-flag-cast-available .jw-icon-airplay{display:flex}.jwplayer.jw-flag-cardboard-available .jw-icon-cardboard{display:flex}.jwplayer.jw-flag-live .jw-display-icon-rewind{visibility:hidden}.jwplayer.jw-flag-live .jw-controlbar .jw-text-elapsed,.jwplayer.jw-flag-live .jw-controlbar .jw-text-duration,.jwplayer.jw-flag-live .jw-controlbar .jw-text-countdown,.jwplayer.jw-flag-live .jw-controlbar .jw-slider-time{display:none}.jwplayer.jw-flag-live .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-live .jw-controlbar .jw-overlay:after{display:none}.jwplayer.jw-flag-live .jw-nextup-container{bottom:44px}.jwplayer.jw-flag-live .jw-text-elapsed,.jwplayer.jw-flag-live .jw-text-duration{display:none}.jwplayer.jw-flag-live .jw-text-live{cursor:default}.jwplayer.jw-flag-live .jw-text-live:hover{color:rgba(255,255,255,0.8)}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-stop,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-stop{display:block}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-text-live{height:24px;width:auto;align-items:center;border-radius:1px;color:rgba(255,255,255,0.8);display:flex;font-size:12px;font-weight:bold;margin-right:10px;padding:0 1ch;text-rendering:geometricPrecision;text-transform:uppercase;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:box-shadow,color}.jw-text-live::before{height:8px;width:8px;background-color:currentColor;border-radius:50%;margin-right:6px;opacity:1;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-text-live.jw-dvr-live{box-shadow:inset 0 0 0 2px currentColor}.jw-text-live.jw-dvr-live::before{opacity:.5}.jw-text-live.jw-dvr-live:hover{color:#fff}.jwplayer.jw-flag-controls-hidden .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-controls-hidden:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-controls-hidden .jw-plugin{bottom:.5em}.jwplayer.jw-flag-controls-hidden .jw-nextup-container{bottom:0}.jw-flag-controls-hidden .jw-controlbar,.jw-flag-controls-hidden .jw-display{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-controls-hidden .jw-controls-backdrop{opacity:0}.jw-flag-controls-hidden .jw-logo{visibility:visible}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-plugin{bottom:.5em}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-nextup-container{bottom:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-controls-hidden) .jw-media{cursor:none;-webkit-cursor-visibility:auto-hide}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing.jw-flag-casting .jw-display{display:table}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-ads) .jw-autostart-mute{display:flex}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting .jw-nextup-container{bottom:66px}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting.jw-state-idle .jw-nextup-container{display:none}.jw-flag-media-audio .jw-preview{display:block}.jwplayer.jw-flag-ads .jw-preview,.jwplayer.jw-flag-ads .jw-logo,.jwplayer.jw-flag-ads .jw-captions.jw-captions-enabled,.jwplayer.jw-flag-ads .jw-nextup-container,.jwplayer.jw-flag-ads .jw-text-duration,.jwplayer.jw-flag-ads .jw-text-elapsed{display:none}.jwplayer.jw-flag-ads video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-rewind,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-next,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-display{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player.jw-state-buffering .jw-display-icon-display{display:inline-block}.jwplayer.jw-flag-ads .jw-controlbar{flex-wrap:wrap-reverse}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time{height:auto;padding:0;pointer-events:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-slider-container{height:5px}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-rail,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-knob,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-buffer,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-cue,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-icon-settings{display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-progress{-webkit-transform:none;transform:none;top:auto}.jwplayer.jw-flag-ads .jw-controlbar .jw-tooltip,.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-tooltip:not(.jw-icon-volume),.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-inline:not(.jw-icon-playback):not(.jw-icon-fullscreen):not(.jw-icon-volume){display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-volume-tip{padding:13px 0}.jwplayer.jw-flag-ads .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid) .jw-controls .jw-controlbar,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart .jw-controls .jw-controlbar{display:flex;pointer-events:all;visibility:visible;opacity:1}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-user-inactive .jw-controls-backdrop,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart.jw-flag-user-inactive .jw-controls-backdrop{opacity:1;background-size:100% 60px}.jwplayer.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-ads-vpaid .jw-skip,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-skip{display:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls{background:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls::after{content:none}.jwplayer.jw-flag-ads-hide-controls .jw-controls-backdrop,.jwplayer.jw-flag-ads-hide-controls .jw-controls{display:none !important}.jw-flag-overlay-open-related .jw-controls,.jw-flag-overlay-open-related .jw-title,.jw-flag-overlay-open-related .jw-logo{display:none}.jwplayer.jw-flag-rightclick-open{overflow:visible}.jwplayer.jw-flag-rightclick-open .jw-rightclick{z-index:16777215}body .jwplayer.jw-flag-flash-blocked .jw-controls,body .jwplayer.jw-flag-flash-blocked .jw-overlays,body .jwplayer.jw-flag-flash-blocked .jw-controls-backdrop,body .jwplayer.jw-flag-flash-blocked .jw-preview{display:none}body .jwplayer.jw-flag-flash-blocked .jw-error-msg{top:25%}.jw-flag-touch.jw-breakpoint-7 .jw-captions,.jw-flag-touch.jw-breakpoint-6 .jw-captions,.jw-flag-touch.jw-breakpoint-5 .jw-captions,.jw-flag-touch.jw-breakpoint-4 .jw-captions,.jw-flag-touch.jw-breakpoint-7 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-6 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-5 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-4 .jw-nextup-container{bottom:4.25em}.jw-flag-touch .jw-controlbar .jw-icon-volume{display:flex}.jw-flag-touch .jw-display,.jw-flag-touch .jw-display-container,.jw-flag-touch .jw-display-controls{pointer-events:none}.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-rewind,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-rewind{display:none}.jw-flag-touch.jw-state-paused.jw-flag-dragging .jw-display{display:none}.jw-flag-audio-player{background-color:#000}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:44px}.jw-flag-audio-player:not(.jw-flag-live) .jw-spacer{display:none}.jw-flag-audio-player .jw-preview,.jw-flag-audio-player .jw-display,.jw-flag-audio-player .jw-title,.jw-flag-audio-player .jw-nextup-container{display:none}.jw-flag-audio-player .jw-controlbar{position:relative}.jw-flag-audio-player .jw-controlbar .jw-button-container{padding-right:3px;padding-left:0}.jw-flag-audio-player .jw-controlbar .jw-icon-tooltip,.jw-flag-audio-player .jw-controlbar .jw-icon-inline{display:none}.jw-flag-audio-player .jw-controlbar .jw-icon-volume,.jw-flag-audio-player .jw-controlbar .jw-icon-playback,.jw-flag-audio-player .jw-controlbar .jw-icon-next,.jw-flag-audio-player .jw-controlbar .jw-icon-rewind,.jw-flag-audio-player .jw-controlbar .jw-icon-cast,.jw-flag-audio-player .jw-controlbar .jw-text-live,.jw-flag-audio-player .jw-controlbar .jw-icon-airplay,.jw-flag-audio-player .jw-controlbar .jw-logo-button,.jw-flag-audio-player .jw-controlbar .jw-text-elapsed,.jw-flag-audio-player .jw-controlbar .jw-text-duration{display:flex;flex:0 0 auto}.jw-flag-audio-player .jw-controlbar .jw-text-duration,.jw-flag-audio-player .jw-controlbar .jw-text-countdown{padding-right:10px}.jw-flag-audio-player .jw-controlbar .jw-slider-time{flex:0 1 auto;align-items:center;display:flex;order:1}.jw-flag-audio-player .jw-controlbar .jw-icon-volume{margin-right:0;transition:margin-right 150ms cubic-bezier(0, .25, .25, 1)}.jw-flag-audio-player .jw-controlbar .jw-icon-volume .jw-overlay{display:none}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container{transition:width 300ms cubic-bezier(0, .25, .25, 1);width:0}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open{width:140px}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open .jw-slider-volume{padding-right:24px;transition:opacity 300ms;opacity:1}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open~.jw-slider-time{flex:1 1 auto;width:auto;transition:opacity 300ms, width 300ms}.jw-flag-audio-player .jw-controlbar .jw-slider-volume{opacity:0}.jw-flag-audio-player .jw-controlbar .jw-slider-volume .jw-knob{-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.jw-flag-audio-player .jw-controlbar .jw-slider-volume~.jw-icon-volume{margin-right:140px}.jw-flag-audio-player.jw-breakpoint-1 .jw-horizontal-volume-container.jw-open~.jw-slider-time,.jw-flag-audio-player.jw-breakpoint-2 .jw-horizontal-volume-container.jw-open~.jw-slider-time{opacity:0}.jw-flag-audio-player.jw-flag-small-player .jw-text-elapsed,.jw-flag-audio-player.jw-flag-small-player .jw-text-duration{display:none}.jw-flag-audio-player.jw-flag-ads .jw-slider-time{display:none}.jw-hidden{display:none}',""])}]]); \ No newline at end of file diff --git a/ui/v2.5/public/jwplayer/jwplayer.core.controls.js b/ui/v2.5/public/jwplayer/jwplayer.core.controls.js new file mode 100644 index 00000000000..74e898a25e7 --- /dev/null +++ b/ui/v2.5/public/jwplayer/jwplayer.core.controls.js @@ -0,0 +1,95 @@ +/*! +JW Player version 8.11.5 +Copyright (c) 2019, JW Player, All Rights Reserved +https://github.com/jwplayer/jwplayer/blob/v8.11.5/README.md + +This source code and its use and distribution is subject to the terms and conditions of the applicable license agreement. +https://www.jwplayer.com/tos/ + +This product includes portions of other software. For the full text of licenses, see below: + +JW Player Third Party Software Notices and/or Additional Terms and Conditions + +************************************************************************************************** +The following software is used under Apache License 2.0 +************************************************************************************************** + +vtt.js v0.13.0 +Copyright (c) 2019 Mozilla (http://mozilla.org) +https://github.com/mozilla/vtt.js/blob/v0.13.0/LICENSE + +* * * + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and +limitations under the License. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under MIT license +************************************************************************************************** + +Underscore.js v1.6.0 +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +https://github.com/jashkenas/underscore/blob/1.6.0/LICENSE + +Backbone backbone.events.js v1.1.2 +Copyright (c) 2010-2014 Jeremy Ashkenas, DocumentCloud +https://github.com/jashkenas/backbone/blob/1.1.2/LICENSE + +Promise Polyfill v7.1.1 +Copyright (c) 2014 Taylor Hakes and Forbes Lindesay +https://github.com/taylorhakes/promise-polyfill/blob/v7.1.1/LICENSE + +can-autoplay.js v3.0.0 +Copyright (c) 2017 video-dev +https://github.com/video-dev/can-autoplay/blob/v3.0.0/LICENSE + +* * * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under W3C license +************************************************************************************************** + +Intersection Observer v0.5.0 +Copyright (c) 2016 Google Inc. (http://google.com) +https://github.com/w3c/IntersectionObserver/blob/v0.5.0/LICENSE.md + +* * * + +W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. + +This work is being provided by the copyright holders under the following license. + +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: + +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. + +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." + +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders. +*/ +(window.webpackJsonpjwplayer=window.webpackJsonpjwplayer||[]).push([[3,1,2],[,,,,,,,,,,,,,,,,,function(e,t,i){"use strict";i.r(t);var n,o=i(8),a=i(3),r=i(7),l=i(43),s=i(5),c=i(15),u=i(40);function d(e){return n||(n=new DOMParser),Object(s.r)(Object(s.s)(n.parseFromString(e,"image/svg+xml").documentElement))}var p=function(e,t,i,n){var o=document.createElement("div");o.className="jw-icon jw-icon-inline jw-button-color jw-reset "+e,o.setAttribute("role","button"),o.setAttribute("tabindex","0"),i&&o.setAttribute("aria-label",i),o.style.display="none";var a=new u.a(o).on("click tap enter",t||function(){});return n&&Array.prototype.forEach.call(n,(function(e){"string"==typeof e?o.appendChild(d(e)):o.appendChild(e)})),{ui:a,element:function(){return o},toggle:function(e){e?this.show():this.hide()},show:function(){o.style.display=""},hide:function(){o.style.display="none"}}},w=i(0),f=i(67),h=i.n(f),j=i(68),g=i.n(j),b=i(69),m=i.n(b),v=i(70),y=i.n(v),k=i(71),x=i.n(k),O=i(72),C=i.n(O),S=i(73),M=i.n(S),T=i(74),E=i.n(T),_=i(75),z=i.n(_),P=i(76),A=i.n(P),L=i(77),R=i.n(L),I=i(78),B=i.n(I),V=i(79),H=i.n(V),N=i(80),F=i.n(N),q=i(81),D=i.n(q),U=i(82),W=i.n(U),Q=i(83),Y=i.n(Q),X=i(84),Z=i.n(X),K=i(85),J=i.n(K),G=i(86),$=i.n(G),ee=i(87),te=i.n(ee),ie=i(88),ne=i.n(ie),oe=i(89),ae=i.n(oe),re=null;function le(e){var t=de().querySelector(ce(e));if(t)return ue(t);throw new Error("Icon not found "+e)}function se(e){var t=de().querySelectorAll(e.split(",").map(ce).join(","));if(!t.length)throw new Error("Icons not found "+e);return Array.prototype.map.call(t,(function(e){return ue(e)}))}function ce(e){return".jw-svg-icon-".concat(e)}function ue(e){return e.cloneNode(!0)}function de(){return re||(re=d(""+h.a+g.a+m.a+y.a+x.a+C.a+M.a+E.a+z.a+A.a+R.a+B.a+H.a+F.a+D.a+W.a+Y.a+Z.a+J.a+$.a+te.a+ne.a+ae.a+"")),re}var pe=i(10);function we(e,t){for(var i=0;i10&&delete fe[t[0]];var i=d(e);fe[e]=i}return fe[e].cloneNode(!0)}(t):((r=document.createElement("div")).className="jw-icon jw-button-image jw-button-color jw-reset",t&&Object(pe.d)(r,{backgroundImage:"url(".concat(t,")")})),l.appendChild(r),new u.a(l).on("click tap enter",n,this),l.addEventListener("mousedown",(function(e){e.preventDefault()})),this.id=o,this.buttonElement=l}var t,i,n;return t=e,(i=[{key:"element",value:function(){return this.buttonElement}},{key:"toggle",value:function(e){e?this.show():this.hide()}},{key:"show",value:function(){this.buttonElement.style.display=""}},{key:"hide",value:function(){this.buttonElement.style.display="none"}}])&&we(t.prototype,i),n&&we(t,n),e}(),je=i(11);function ge(e,t){for(var i=0;i=0&&(t.left-=i,t.right-=i),t},me=function(){function e(t,i){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),Object(w.h)(this,r.a),this.className=t+" jw-background-color jw-reset",this.orientation=i}var t,i,n;return t=e,(i=[{key:"setup",value:function(){this.el=Object(s.e)(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return''}(this.className,"jw-slider-"+this.orientation)),this.elementRail=this.el.getElementsByClassName("jw-slider-container")[0],this.elementBuffer=this.el.getElementsByClassName("jw-buffer")[0],this.elementProgress=this.el.getElementsByClassName("jw-progress")[0],this.elementThumb=this.el.getElementsByClassName("jw-knob")[0],this.ui=new u.a(this.element(),{preventScrolling:!0}).on("dragStart",this.dragStart,this).on("drag",this.dragMove,this).on("dragEnd",this.dragEnd,this).on("click tap",this.tap,this)}},{key:"dragStart",value:function(){this.trigger("dragStart"),this.railBounds=be(this.elementRail)}},{key:"dragEnd",value:function(e){this.dragMove(e),this.trigger("dragEnd")}},{key:"dragMove",value:function(e){var t,i,n=this.railBounds=this.railBounds?this.railBounds:be(this.elementRail);return i="horizontal"===this.orientation?(t=e.pageX)n.right?100:100*Object(l.a)((t-n.left)/n.width,0,1):(t=e.pageY)>=n.bottom?0:t<=n.top?100:100*Object(l.a)((n.height-(t-n.top))/n.height,0,1),this.render(i),this.update(i),!1}},{key:"tap",value:function(e){this.railBounds=be(this.elementRail),this.dragMove(e)}},{key:"limit",value:function(e){return e}},{key:"update",value:function(e){this.trigger("update",{percentage:e})}},{key:"render",value:function(e){e=Math.max(0,Math.min(e,100)),"horizontal"===this.orientation?(this.elementThumb.style.left=e+"%",this.elementProgress.style.width=e+"%"):(this.elementThumb.style.bottom=e+"%",this.elementProgress.style.height=e+"%")}},{key:"updateBuffer",value:function(e){this.elementBuffer.style.width=e+"%"}},{key:"element",value:function(){return this.el}}])&&ge(t.prototype,i),n&&ge(t,n),e}(),ve=function(e,t){e&&t&&(e.setAttribute("aria-label",t),e.setAttribute("role","button"),e.setAttribute("tabindex","0"))};function ye(e,t){for(var i=0;i0&&Array.prototype.forEach.call(o,(function(e){"string"==typeof e?a.el.appendChild(d(e)):a.el.appendChild(e)}))}var t,i,n;return t=e,(i=[{key:"addContent",value:function(e){this.content&&this.removeContent(),this.content=e,this.tooltip.appendChild(e)}},{key:"removeContent",value:function(){this.content&&(this.tooltip.removeChild(this.content),this.content=null)}},{key:"hasContent",value:function(){return!!this.content}},{key:"element",value:function(){return this.el}},{key:"openTooltip",value:function(e){this.isOpen||(this.trigger("open-"+this.componentType,e,{isOpen:!0}),this.isOpen=!0,Object(s.v)(this.el,this.openClass,this.isOpen))}},{key:"closeTooltip",value:function(e){this.isOpen&&(this.trigger("close-"+this.componentType,e,{isOpen:!1}),this.isOpen=!1,Object(s.v)(this.el,this.openClass,this.isOpen))}},{key:"toggleOpenState",value:function(e){this.isOpen?this.closeTooltip(e):this.openTooltip(e)}}])&&ye(t.prototype,i),n&&ye(t,n),e}(),xe=i(22),Oe=i(57);function Ce(e,t){for(var i=0;i=this.thumbnails.length&&(t=this.thumbnails.length-1);var i=this.thumbnails[t].img;return i.indexOf("://")<0&&(i=this.vttPath?this.vttPath+"/"+i:i),i},loadThumbnail:function(e){var t=this.chooseThumbnail(e),i={margin:"0 auto",backgroundPosition:"0 0"};if(t.indexOf("#xywh")>0)try{var n=/(.+)#xywh=(\d+),(\d+),(\d+),(\d+)/.exec(t);t=n[1],i.backgroundPosition=-1*n[2]+"px "+-1*n[3]+"px",i.width=n[4],this.timeTip.setWidth(+i.width),i.height=n[5]}catch(e){return}else this.individualImage||(this.individualImage=new Image,this.individualImage.onload=Object(w.a)((function(){this.individualImage.onload=null,this.timeTip.image({width:this.individualImage.width,height:this.individualImage.height}),this.timeTip.setWidth(this.individualImage.width)}),this),this.individualImage.src=t);return i.backgroundImage='url("'+t+'")',i},showThumbnail:function(e){this._model.get("containerWidth")<=420||this.thumbnails.length<1||this.timeTip.image(this.loadThumbnail(e))},resetThumbnails:function(){this.timeTip.image({backgroundImage:"",width:0,height:0}),this.thumbnails=[]}};function _e(e,t,i){return(_e="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,i){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Ie(e)););return e}(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(i):o.value}})(e,t,i||e)}function ze(e){return(ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Pe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ae(e,t){for(var i=0;i-1&&(n="Live")}var d=this.timeTip;d.update(n),this.textLength!==n.length&&(this.textLength=n.length,d.resetWidth()),this.showThumbnail(u),Object(s.a)(d.el,"jw-open");var p=d.getWidth(),w=a.width/100,f=o-a.width,h=0;p>f&&(h=(p-f)/(200*w));var j=100*Math.min(1-h,Math.max(h,c)).toFixed(3);Object(pe.d)(d.el,{left:j+"%"})}}},{key:"hideTimeTooltip",value:function(){Object(s.o)(this.timeTip.el,"jw-open")}},{key:"updateCues",value:function(e,t){var i=this;this.resetCues(),t&&t.length&&(t.forEach((function(e){i.addCue(e)})),this.drawCues())}},{key:"updateAriaText",value:function(){var e=this._model;if(!e.get("seeking")){var t=e.get("position"),i=e.get("duration"),n=Object(je.timeFormat)(t);"DVR"!==this.streamType&&(n+=" of ".concat(Object(je.timeFormat)(i)));var o=this.el;document.activeElement!==o&&(this.timeUpdateKeeper.textContent=n),Object(s.t)(o,"aria-valuenow",t),Object(s.t)(o,"aria-valuetext",n)}}},{key:"reset",value:function(){this.resetThumbnails(),this.timeTip.resetWidth(),this.textLength=0}}]),t}(me);Object(w.h)(Ne.prototype,Me,Ee);var Fe=Ne;function qe(e,t){for(var i=0;i=75&&!e),Object(s.t)(r,"aria-valuenow",o),Object(s.t)(l,"aria-valuenow",o);var c="Volume ".concat(o,"%");Object(s.t)(r,"aria-valuetext",c),Object(s.t)(l,"aria-valuetext",c),document.activeElement!==r&&document.activeElement!==l&&(this._volumeAnnouncer.textContent=c)}}},{key:"onCastAvailable",value:function(e,t){this.elements.cast.toggle(t)}},{key:"onCastActive",value:function(e,t){this.elements.fullscreen.toggle(!t),this.elements.cast.button&&Object(s.v)(this.elements.cast.button,"jw-off",!t)}},{key:"onElapsed",value:function(e,t){var i,n,o=e.get("duration");if("DVR"===e.get("streamType")){var a=Math.ceil(t),r=this._model.get("dvrSeekLimit");i=n=a>=-r?"":"-"+Object(je.timeFormat)(-(t+r)),e.set("dvrLive",a>=-r)}else i=Object(je.timeFormat)(t),n=Object(je.timeFormat)(o-t);this.elements.elapsed.textContent=i,this.elements.countdown.textContent=n}},{key:"onDuration",value:function(e,t){this.elements.duration.textContent=Object(je.timeFormat)(Math.abs(t))}},{key:"onAudioMode",value:function(e,t){var i=this.elements.time.element();t?this.elements.buttonContainer.insertBefore(i,this.elements.elapsed):Object(s.m)(this.el,i)}},{key:"element",value:function(){return this.el}},{key:"setAltText",value:function(e,t){this.elements.alt.textContent=t}},{key:"closeMenus",value:function(e){this.menus.forEach((function(t){e&&e.target===t.el||t.closeTooltip(e)}))}},{key:"rewind",value:function(){var e,t=0,i=this._model.get("currentTime");i?e=i-10:(e=this._model.get("position")-10,"DVR"===this._model.get("streamType")&&(t=this._model.get("duration"))),this._api.seek(Math.max(e,t),{reason:"interaction"})}},{key:"onState",value:function(e,t){var i=e.get("localization"),n=i.play;this.setPlayText(n),t===a.pb&&("LIVE"!==e.get("streamType")?(n=i.pause,this.setPlayText(n)):(n=i.stop,this.setPlayText(n))),Object(s.t)(this.elements.play.element(),"aria-label",n)}},{key:"onStreamTypeChange",value:function(e,t){var i="LIVE"===t,n="DVR"===t;this.elements.rewind.toggle(!i),this.elements.live.toggle(i||n),Object(s.t)(this.elements.live.element(),"tabindex",i?"-1":"0"),this.elements.duration.style.display=n?"none":"",this.onDuration(e,e.get("duration")),this.onState(e,e.get("state"))}},{key:"addLogo",value:function(e){var t=this.elements.buttonContainer,i=new he(e.file,this._model.get("localization").logo,(function(){e.link&&Object(s.l)(e.link,"_blank",{rel:"noreferrer"})}),"logo","jw-logo-button");e.link||Object(s.t)(i.element(),"tabindex","-1"),t.insertBefore(i.element(),t.querySelector(".jw-spacer").nextSibling)}},{key:"goToLiveEdge",value:function(){if("DVR"===this._model.get("streamType")){var e=Math.min(this._model.get("position"),-1),t=this._model.get("dvrSeekLimit");this._api.seek(Math.max(-t,e),{reason:"interaction"}),this._api.play({reason:"interaction"})}}},{key:"updateButtons",value:function(e,t,i){if(t){var n,o,a=this.elements.buttonContainer;t!==i&&i?(n=at(t,i),o=at(i,t),this.removeButtons(a,o)):n=t;for(var r=n.length-1;r>=0;r--){var l=n[r],s=new he(l.img,l.tooltip,l.callback,l.id,l.btnClass);l.tooltip&&$e(s.element(),l.id,l.tooltip);var c=void 0;"related"===s.id?c=this.elements.settingsButton.element():"share"===s.id?c=a.querySelector('[button="related"]')||this.elements.settingsButton.element():(c=this.elements.spacer.nextSibling)&&"logo"===c.getAttribute("button")&&(c=c.nextSibling),a.insertBefore(s.element(),c)}}}},{key:"removeButtons",value:function(e,t){for(var i=t.length;i--;){var n=e.querySelector('[button="'.concat(t[i].id,'"]'));n&&e.removeChild(n)}}},{key:"toggleCaptionsButtonState",value:function(e){var t=this.elements.captionsButton;t&&Object(s.v)(t.element(),"jw-off",!e)}},{key:"destroy",value:function(){var e=this;this._model.off(null,null,this),Object.keys(this.elements).forEach((function(t){var i=e.elements[t];i&&"function"==typeof i.destroy&&e.elements[t].destroy()})),this.ui.forEach((function(e){e.destroy()})),this.ui=[]}}])&&tt(t.prototype,i),n&&tt(t,n),e}(),st=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return'
    ')+'
    ')+"
    "},ct=function(e){return'
    '+st("rewind",e.rewind)+st("display",e.playback)+st("next",e.next)+"
    "};function ut(e,t){for(var i=0;i'.concat(a.playback,"")),Object(s.a)(o.icon,"jw-idle-label"),o.icon.appendChild(l))}return o}var i,n,o;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&jt(e,t)}(t,e),i=t,(n=[{key:"element",value:function(){return this.el}}])&&wt(i.prototype,n),o&&wt(i,o),t}(r.a);function bt(e,t){for(var i=0;i0&&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]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";return'
    '+'
    '.concat(e,"
    ")+'
    '.concat(t,"
    ")+'
    '.concat(i,"
    ")+"
    "+'')+"
    "}());t.querySelector(".jw-nextup-close").appendChild(le("close")),this.addContent(t),this.closeButton=this.content.querySelector(".jw-nextup-close"),this.closeButton.setAttribute("aria-label",this.localization.close),this.tooltip=this.content.querySelector(".jw-nextup-tooltip");var i=this._model,n=i.player;this.enabled=!1,i.on("change:nextUp",this.onNextUp,this),n.change("duration",this.onDuration,this),n.change("position",this.onElapsed,this),n.change("streamType",this.onStreamType,this),n.change("state",(function(e,t){"complete"===t&&this.toggle(!1)}),this),this.closeUi=new u.a(this.closeButton,{directSelect:!0}).on("click tap enter",(function(){this.nextUpSticky=!1,this.toggle(!1)}),this),this.tooltipUi=new u.a(this.tooltip).on("click tap",this.click,this)}},{key:"loadThumbnail",value:function(e){return this.nextUpImage=new Image,this.nextUpImage.onload=function(){this.nextUpImage.onload=null}.bind(this),this.nextUpImage.src=e,{backgroundImage:'url("'+e+'")'}}},{key:"click",value:function(){var e=this.feedShownId;this.reset(),this._api.next({feedShownId:e,reason:"interaction"})}},{key:"toggle",value:function(e,t){if(this.enabled&&(Object(s.v)(this.container,"jw-nextup-sticky",!!this.nextUpSticky),this.shown!==e)){this.shown=e,Object(s.v)(this.container,"jw-nextup-container-visible",e),Object(s.v)(this._playerElement,"jw-flag-nextup",e);var i=this._model.get("nextUp");e&&i?(this.feedShownId=Object(et.b)(et.a),this.trigger("nextShown",{mode:i.mode,ui:"nextup",itemsShown:[i],feedData:i.feedData,reason:t,feedShownId:this.feedShownId})):this.feedShownId=""}}},{key:"setNextUpItem",value:function(e){var t=this;setTimeout((function(){if(t.thumbnail=t.content.querySelector(".jw-nextup-thumbnail"),Object(s.v)(t.content,"jw-nextup-thumbnail-visible",!!e.image),e.image){var i=t.loadThumbnail(e.image);Object(pe.d)(t.thumbnail,i)}t.header=t.content.querySelector(".jw-nextup-header"),t.header.textContent=Object(s.e)(t.localization.nextUp).textContent,t.title=t.content.querySelector(".jw-nextup-title");var n=e.title;t.title.textContent=n?Object(s.e)(n).textContent:"";var o=e.duration;o&&(t.duration=t.content.querySelector(".jw-nextup-duration"),t.duration.textContent="number"==typeof o?Object(je.timeFormat)(o):o)}),500)}},{key:"onNextUp",value:function(e,t){this.reset(),t||(t={showNextUp:!1}),this.enabled=!(!t.title&&!t.image),this.enabled&&(t.showNextUp||(this.nextUpSticky=!1,this.toggle(!1)),this.setNextUpItem(t))}},{key:"onDuration",value:function(e,t){if(t){var i=e.get("nextupoffset"),n=-10;i&&(n=Object(xt.d)(i,t)),n<0&&(n+=t),Object(xt.c)(i)&&t-5=this.offset;n&&void 0===i?(this.nextUpSticky=n,this.toggle(n,"time")):!n&&i&&this.reset()}}},{key:"onStreamType",value:function(e,t){"VOD"!==t&&(this.nextUpSticky=!1,this.toggle(!1))}},{key:"element",value:function(){return this.container}},{key:"addContent",value:function(e){this.content&&this.removeContent(),this.content=e,this.container.appendChild(e)}},{key:"removeContent",value:function(){this.content&&(this.container.removeChild(this.content),this.content=null)}},{key:"reset",value:function(){this.nextUpSticky=void 0,this.toggle(!1)}},{key:"destroy",value:function(){this.off(),this._model.off(null,null,this),this.closeUi&&this.closeUi.destroy(),this.tooltipUi&&this.tooltipUi.destroy()}}])&&Ot(t.prototype,i),n&&Ot(t,n),e}(),St=function(e,t){var i=e.featured,n=e.showLogo,o=e.type;return e.logo=n?'':"",'
  • ').concat(Mt[o](e,t),"
  • ")},Mt={link:function(e){var t=e.link,i=e.title,n=e.logo;return'').concat(n).concat(i||"","")},info:function(e,t){return'")},share:function(e,t){return'")},keyboardShortcuts:function(e,t){return'")}},Tt=i(23),Et=i(6),_t=i(13);function zt(e,t){for(var i=0;iJW Player '.concat(e,""),a={items:[{type:"info"},{title:Object(_t.e)(n)?"".concat(o," ").concat(n):"".concat(n," ").concat(o),type:"link",featured:!0,showLogo:!0,link:"https://jwplayer.com/learn-more?e=".concat(Pt[i])}]},r=t.get("provider"),l=a.items;if(r&&r.name.indexOf("flash")>=0){var s="Flash Version "+Object(Et.a)();l.push({title:s,type:"link",link:"http://www.adobe.com/software/flash/about/"})}return this.shortcutsTooltip&&l.splice(l.length-1,0,{type:"keyboardShortcuts"}),a}},{key:"rightClick",value:function(e){if(this.lazySetup(),this.mouseOverContext)return!1;this.hideMenu(),this.showMenu(e),this.addHideMenuHandlers()}},{key:"getOffset",value:function(e){var t=Object(s.c)(this.wrapperElement),i=e.pageX-t.left,n=e.pageY-t.top;return this.model.get("touchMode")&&(n-=100),{x:i,y:n}}},{key:"showMenu",value:function(e){var t=this,i=this.getOffset(e);return this.el.style.left=i.x+"px",this.el.style.top=i.y+"px",this.outCount=0,Object(s.a)(this.playerContainer,"jw-flag-rightclick-open"),Object(s.a)(this.el,"jw-open"),clearTimeout(this._menuTimeout),this._menuTimeout=setTimeout((function(){return t.hideMenu()}),3e3),!1}},{key:"hideMenu",value:function(e){e&&this.el&&this.el.contains(e.target)||(Object(s.o)(this.playerContainer,"jw-flag-rightclick-open"),Object(s.o)(this.el,"jw-open"))}},{key:"lazySetup",value:function(){var e,t,i,n,o=this,a=(e=this.buildArray(),t=this.model.get("localization"),i=e.items,n=(void 0===i?[]:i).map((function(e){return St(e,t)})),'
    '+'
      '.concat(n.join(""),"
    ")+"
    ");if(this.el){if(this.html!==a){this.html=a;var r=At(a);Object(s.h)(this.el);for(var l=r.childNodes.length;l--;)this.el.appendChild(r.firstChild)}}else this.html=a,this.el=At(this.html),this.wrapperElement.appendChild(this.el),this.hideMenuHandler=function(e){return o.hideMenu(e)},this.overHandler=function(){o.mouseOverContext=!0},this.outHandler=function(e){o.mouseOverContext=!1,e.relatedTarget&&!o.el.contains(e.relatedTarget)&&++o.outCount>1&&o.hideMenu()},this.infoOverlayHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.infoOverlay.open()},this.shortcutsTooltipHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.shortcutsTooltip.open()}}},{key:"setup",value:function(e,t,i){this.wrapperElement=i,this.model=e,this.mouseOverContext=!1,this.playerContainer=t,this.ui=new u.a(i).on("longPress",this.rightClick,this)}},{key:"addHideMenuHandlers",value:function(){this.removeHideMenuHandlers(),this.wrapperElement.addEventListener("touchstart",this.hideMenuHandler),document.addEventListener("touchstart",this.hideMenuHandler),o.OS.mobile||(this.wrapperElement.addEventListener("click",this.hideMenuHandler),document.addEventListener("click",this.hideMenuHandler),this.el.addEventListener("mouseover",this.overHandler),this.el.addEventListener("mouseout",this.outHandler)),this.el.querySelector(".jw-info-overlay-item").addEventListener("click",this.infoOverlayHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").addEventListener("click",this.shortcutsTooltipHandler)}},{key:"removeHideMenuHandlers",value:function(){this.wrapperElement&&(this.wrapperElement.removeEventListener("click",this.hideMenuHandler),this.wrapperElement.removeEventListener("touchstart",this.hideMenuHandler)),this.el&&(this.el.querySelector(".jw-info-overlay-item").removeEventListener("click",this.infoOverlayHandler),this.el.removeEventListener("mouseover",this.overHandler),this.el.removeEventListener("mouseout",this.outHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").removeEventListener("click",this.shortcutsTooltipHandler)),document.removeEventListener("click",this.hideMenuHandler),document.removeEventListener("touchstart",this.hideMenuHandler)}},{key:"destroy",value:function(){clearTimeout(this._menuTimeout),this.removeHideMenuHandlers(),this.el&&(this.hideMenu(),this.hideMenuHandler=null,this.el=null),this.wrapperElement&&(this.wrapperElement.oncontextmenu=null,this.wrapperElement=null),this.model&&(this.model=null),this.ui&&(this.ui.destroy(),this.ui=null)}}])&&zt(t.prototype,i),n&&zt(t,n),e}(),Rt=function(){return''};function It(e){var t=document.getElementsByClassName("jw-icon-settings")[0];if(t){var i="Right"===e?Object(s.k)(t):Object(s.n)(t);i&&i.focus()}}var Bt=function(e){Object.keys(e).forEach((function(t){e[t].deactivate()}))},Vt=function(e){return'"};var Ht=function(e){e.forEach((function(e){e.deactivate()}))},Nt=function(e){return'"};function Ft(e,t,i){var n,o=Object(s.e)(Nt(t)),a=new u.a(o).on("click tap enter",(function(e){i(e)})),r={activate:function(){Object(s.v)(o,"jw-settings-item-active",!0),o.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(s.v)(o,"jw-settings-item-active",!1),o.setAttribute("aria-checked","false"),n=!1},element:function(){return o},uiElement:function(){return a},destroy:function(){this.deactivate(),a.destroy()}};return Object.defineProperty(r,"active",{enumerable:!0,get:function(){return n}}),r}var qt="audioTracks",Dt="captions",Ut="quality",Wt="playbackRates",Qt=Ut,Yt=function(e,t,i,n,o){var a=e.getSubmenu(t);if(a)a.replaceContent(i);else{var r=p("jw-settings-".concat(t),(function(i){e.activateSubmenu(t,!1,i&&"enter"!==i.type),a.element().children[0].focus()}),t,[n]),l=r.element();l.setAttribute("role","menuitemradio"),l.setAttribute("aria-checked","false"),l.setAttribute("aria-label",o),(a=function(e,t,i){var n,o=[],a=Object(s.e)(Vt(e)),r=t.element();r.setAttribute("name",e),r.className+=" jw-submenu-"+e,t.show();var l=function(e,t){e?e.focus():void 0!==t&&o[t].element().focus()},c=function(e){var t=Object(s.k)(r),i=Object(s.n)(r),n=Object(s.k)(e.target),a=Object(s.n)(e.target),c=e.key.replace(/(Arrow|ape)/,"");switch(c){case"Tab":l(e.shiftKey?i:t);break;case"Left":l(i||Object(s.n)(document.getElementsByClassName("jw-icon-settings")[0]));break;case"Up":l(a,o.length-1);break;case"Right":l(t);break;case"Down":l(n,0)}e.preventDefault(),"Esc"!==c&&e.stopPropagation()},u={addContent:function(e){e&&(e.forEach((function(e){a.appendChild(e.element()),e.element().setAttribute("tabindex","-1"),e.element().addEventListener("keydown",c)})),o=e)},replaceContent:function(e){u.removeContent(),this.addContent(e)},removeContent:function(){o.forEach((function(e){e.element().removeEventListener("keydown",c)})),Object(s.h)(a),o=[]},getItems:function(){return o},activate:function(){Object(s.v)(a,"jw-settings-submenu-active",!0),a.setAttribute("aria-expanded","true"),r.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(s.v)(a,"jw-settings-submenu-active",!1),a.setAttribute("aria-expanded","false"),r.setAttribute("aria-checked","false"),n=!1},activateItem:function(e){var t=o[e];t&&!t.active&&(Ht(o),t.activate())},element:function(){return a},destroy:function(){o&&(o.forEach((function(e){e.destroy()})),this.removeContent())}};return Object.defineProperties(u,{name:{enumerable:!0,get:function(){return e}},active:{enumerable:!0,get:function(){return n}},categoryButtonElement:{enumerable:!0,get:function(){return r}},isDefault:{enumerable:!0,get:function(){return i}}}),u}(t,r,t===Qt)).addContent(i),"ontouchstart"in window||$e(l,t,o),e.addSubmenu(a)}return a};function Xt(e){e.removeSubmenu(Dt)}function Zt(e){e.removeSubmenu(qt)}function Kt(e){e.removeSubmenu(Ut)}function Jt(e){e.removeSubmenu(Wt)}function Gt(e,t,i){var n=e.elements.settingsButton,o=function(e,t,i){var n,o=function(e){/jw-(settings|video|nextup-close|sharing-link|share-item)/.test(e.target.className)||f.close()},a=null,r={},l=Object(s.e)(Rt()),c=new u.a(l).on("keydown",(function(e){var t=e.sourceEvent,i=e.target,n=Object(s.k)(i),o=Object(s.n)(i),a=t.key.replace(/(Arrow|ape)/,"");switch(a){case"Esc":f.close(e);break;case"Left":o?o.focus():(f.close(),It(a));break;case"Right":n&&d.element()&&i!==d.element()&&n.focus();break;case"Up":case"Down":f.activateSubmenu(i.getAttribute("name"),"Up"===a)}if(t.stopPropagation(),/13|27|32|37|38|39|40/.test(t.keyCode))return t.preventDefault(),!1})),d=p("jw-settings-close",(function(e){f.close(e)}),i.close,[le("close")]);d.ui.on("keydown",(function(e){var t=e.sourceEvent,i=t.key.replace(/(Arrow|ape)/,"");("Enter"===i||"Right"===i||"Tab"===i&&!t.shiftKey)&&f.close(t),"Right"===i&&It(t.key)})),d.show();var w=l.querySelector(".jw-settings-topbar");w.appendChild(d.element());var f={ui:c,closeButton:d,open:function(t,i){(e(n=!0,i),l.setAttribute("aria-expanded","true"),document.addEventListener("click",o),t&&i&&"enter"===i.type)?a.categoryButtonElement.focus():a.element().firstChild.focus()},close:function(t){e(n=!1,t),a=null,Bt(r),l.setAttribute("aria-expanded","false"),document.removeEventListener("click",o)},toggle:function(){n?this.close():this.open()},addSubmenu:function(e){if(e){var i=e.name;if(r[i]=e,e.isDefault)Object(s.m)(w,e.categoryButtonElement),e.categoryButtonElement.addEventListener("keydown",(function(e){9===e.keyCode&&e.shiftKey&&f.close(e)}));else{var n=w.querySelector(".jw-submenu-sharing");w.insertBefore(e.categoryButtonElement,n||d.element())}l.appendChild(e.element()),t.show()}},getSubmenu:function(e){return r[e]},getSubmenuNames:function(){return Object.keys(r)},removeSubmenu:function(e){var i=r[e];i&&i.element().parentNode===l&&(l.removeChild(i.element()),w.removeChild(i.categoryButtonElement),i.destroy(),delete r[e],Object.keys(r).length||(this.close(),t.hide()))},activateSubmenu:function(e,t){var i=r[e];i&&(i.active||(Bt(r),i.activate(),a=i),(t?i.element().lastChild:i.element().firstChild).focus())},activateFirstSubmenu:function(e){var t=Object.keys(r)[0];this.activateSubmenu(t,!1,e)},element:function(){return l},destroy:function(){this.close(),this.ui.destroy(),this.closeButton.ui.destroy(),Object(s.h)(l)}};return Object.defineProperties(f,{visible:{enumerable:!0,get:function(){return n}}}),f}(t,{hide:function(){return n.hide()},show:function(){return n.show()}},i);return e.on("settingsInteraction",(function(e,t,i){var n=o.getSubmenu(e),a=i&&"enter"!==i.type,r=Object(w.c)(o.open,10);(n||t)&&(o.visible?t||n.active?o.close():o.activateSubmenu(e,!1,a):(n?o.activateSubmenu(e,!1,a):o.activateFirstSubmenu(a),r(t,i)))})),o}function $t(e,t,i,n){var o=i.player,a=function(t,i){var n=e.getSubmenu(t);n&&n.activateItem(i)},r=function(t,i){!i||i.length<=1?Zt(e):function(e,t,i,n,o){var a=t.map((function(t,n){return Ft(t.name,t.name,(function(t){i(n),e.close(t)}))}));Yt(e,qt,a,le("audio-tracks"),o).activateItem(n)}(e,i,(function(e){return n.setCurrentAudioTrack(e)}),o.get("currentAudioTrack"),o.get("localization").audioTracks)},l=function(i,a){if(!a||a.length<=1)Kt(e);else{var r=o.get("localization"),l=r.hd,s=r.auto;!function(e,t,i,n,o,a){var r=t.map((function(t,n){var o=t.label;return"Auto"===o&&0===n&&(o="".concat(a,' ')),Ft(t.label,o,(function(t){i(n),e.close(t)}))}));Yt(e,Ut,r,le("quality-100"),o).activateItem(n)}(e,a,(function(e){return n.setCurrentQuality(e)}),o.get("currentLevel"),l,s)}!function(e,t){var i=e.getSubmenuNames(),n=i.length>1||i.some((function(e){return"quality"===e||"playbackRates"===e}));t.elements.settingsButton.toggle(n)}(e,t)},s=function(t,i){o.get("supportsPlaybackRate")&&"LIVE"!==o.get("streamType")&&o.get("playbackRateControls")&&i.length>1?function(e,t,i,n,o){var a=t.map((function(t){return Ft(0,Object(_t.e)(o)?"x"+t:t+"x",(function(n){i(t),e.close(n)}))}));Yt(e,Wt,a,le("playback-rate"),o).activateItem(n)}(e,i,(function(e){return n.setPlaybackRate(e)}),i.indexOf(o.get("playbackRate")),o.get("localization").playbackRates):Jt(e)},c=function(e,t,i){var n=o.get("levels");if(n&&"Auto"===n[0].label){var a=t.getItems()[0].element().querySelector(".jw-auto-label"),r=n[e.index]||{label:""};a.textContent=i?"":r.label}};o.change("levels",l,e),o.on("change:currentLevel",(function(t,i){var n=e.getSubmenu("quality"),r=o.get("visualQuality");r&&n&&c(r.level,n,i),a("quality",i)}),e),o.change("audioTracks",r,e),o.on("change:currentAudioTrack",(function(e,t){a("audioTracks",t)}),e),o.on("change:playlistItem",(function(){Xt(e),t.elements.captionsButton.hide(),e.visible&&e.close()})),o.change("captionsList",(function(i,a){var r=t.elements.captionsButton;if(!a||a.length<=1)return Xt(e),void r.hide();var l=o.get("localization"),s=l.cc,c=l.off;!function(e,t,i,n,o,a){var r=t.map((function(t,n){var o=t.label;return"Off"!==o&&"off"!==t.id||0!==n||(o=a),Ft(t.id,o,(function(t){i(n),e.close(t)}))}));Yt(e,Dt,r,le("cc-off"),o).activateItem(n)}(e,a,(function(e){return n.setCurrentCaptions(e)}),o.get("captionsIndex"),s,c),t.toggleCaptionsButtonState(!!o.get("captionsIndex")),r.show()}),e),o.change("captionsIndex",(function(i,n){var o=e.getSubmenu("captions");o&&(o.activateItem(n),t.toggleCaptionsButtonState(!!n))}),e),o.change("playbackRates",s,e),o.change("playbackRate",(function(e,t){var i=o.get("playbackRates");i&&a("playbackRates",i.indexOf(t))}),e),o.on("change:playbackRateControls",(function(){s(0,o.get("playbackRates"))})),o.on("change:visualQuality",(function(t,i){var n=e.getSubmenu("quality");i&&n&&c(i.level,n,o.get("currentLevel"))})),o.on("change:castActive",(function(t,i,n){i!==n&&(i?(Zt(e),Kt(e),Jt(e)):(r(0,o.get("audioTracks")),l(0,o.get("levels")),s(0,o.get("playbackRates"))))}),e),o.on("change:streamType",(function(){s(0,o.get("playbackRates"))}),e)}var ei=i(58),ti=i(36),ii=i(12),ni=function(e,t,i,n){var o=Object(s.e)('
    '),r=!1,l=null,c=!1,u=function(e){/jw-info/.test(e.target.className)||w.close()},d=function(){var n,a,l,c,u,d=p("jw-info-close",(function(){w.close()}),t.get("localization").close,[le("close")]);d.show(),Object(s.m)(o,d.element()),a=o.querySelector(".jw-info-title"),l=o.querySelector(".jw-info-duration"),c=o.querySelector(".jw-info-description"),u=o.querySelector(".jw-info-clientid"),t.change("playlistItem",(function(e,t){var i=t.description,n=t.title;Object(s.q)(c,i||""),Object(s.q)(a,n||"Unknown Title")})),t.change("duration",(function(e,i){var n="";switch(t.get("streamType")){case"LIVE":n="Live";break;case"DVR":n="DVR";break;default:i&&(n=Object(je.timeFormat)(i))}l.textContent=n}),w),u.textContent=(n=i.getPlugin("jwpsrv"))&&"function"==typeof n.doNotTrackUser&&n.doNotTrackUser()?"":"Client ID: ".concat(function(){try{return window.localStorage.jwplayerLocalId}catch(e){return"none"}}()),e.appendChild(o),r=!0};var w={open:function(){r||d(),document.addEventListener("click",u),c=!0;var e=t.get("state");e===a.pb&&i.pause("infoOverlayInteraction"),l=e,n(!0)},close:function(){document.removeEventListener("click",u),c=!1,t.get("state")===a.ob&&l===a.pb&&i.play("infoOverlayInteraction"),l=null,n(!1)},destroy:function(){this.close(),t.off(null,null,this)}};return Object.defineProperties(w,{visible:{enumerable:!0,get:function(){return c}}}),w};var oi=function(e,t,i){var n,o=!1,r=null,l=i.get("localization").shortcuts,c=Object(s.e)(function(e,t){var i=e.map((function(e){return'
    '+''.concat(e.description,"")+''.concat(e.key,"")+"
    "})).join("");return'
    ')+'Press shift question mark to access a list of keyboard shortcuts
    '+''.concat(t,"")+'
    '+"".concat(i)+"
    "}(function(e){var t=e.playPause,i=e.volumeToggle,n=e.fullscreenToggle,o=e.seekPercent,a=e.increaseVolume,r=e.decreaseVolume,l=e.seekForward,s=e.seekBackward;return[{key:e.spacebar,description:t},{key:"↑",description:a},{key:"↓",description:r},{key:"→",description:l},{key:"←",description:s},{key:"c",description:e.captionsToggle},{key:"f",description:n},{key:"m",description:i},{key:"0-9",description:o}]}(l),l.keyboardShortcuts)),u={reason:"settingsInteraction"},d=c.querySelector(".jw-switch"),w=function(){d.setAttribute("aria-checked",i.get("enableShortcuts")),d.addEventListener("click",j),Object(s.a)(c,"jw-open"),r=i.get("state"),c.querySelector(".jw-shortcuts-close").focus(),document.addEventListener("click",h),o=!0,t.pause(u)},f=function(){d.removeEventListener("click",j),Object(s.o)(c,"jw-open"),document.removeEventListener("click",h),e.focus(),o=!1,r===a.pb&&t.play(u)},h=function(e){/jw-shortcuts|jw-switch/.test(e.target.className)||f()},j=function(e){var t=e.currentTarget,n="true"!==t.getAttribute("aria-checked");t.setAttribute("aria-checked",n),i.set("enableShortcuts",n)};return n=p("jw-shortcuts-close",(function(){f()}),i.get("localization").close,[le("close")]),Object(s.m)(c,n.element()),n.show(),e.appendChild(c),{el:c,close:f,open:w,toggleVisibility:function(){o?f():w()}}},ai=function(e){return'
    ')+"
    "};function ri(e){return(ri="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function li(e,t){for(var i=0;i16?n.activeTimeout=setTimeout(n.userInactiveTimeout,e):n.playerContainer.querySelector(".jw-tab-focus")?n.resetActiveTimeout():n.userInactive()},n}var i,n,r;return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&ji(e,t)}(t,e),i=t,(n=[{key:"resetActiveTimeout",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.inactiveTime=0}},{key:"enable",value:function(e,t){var i=this,n=this.context.createElement("div");n.className="jw-controls jw-reset",this.div=n;var r=this.context.createElement("div");r.className="jw-controls-backdrop jw-reset",this.backdrop=r,this.logo=this.playerContainer.querySelector(".jw-logo");var c=t.get("touchMode");if(!this.displayContainer){var u=new yt(t,e);u.buttons.display.on("click tap enter",(function(){i.trigger(a.p),i.userActive(1e3),e.playToggle(mi()),t.get("isFloating")?i.wrapperElement.focus():i.playerContainer.focus()})),this.div.appendChild(u.element()),this.displayContainer=u}this.infoOverlay=new ni(n,t,e,(function(e){Object(s.v)(i.div,"jw-info-open",e),e&&i.div.querySelector(".jw-info-close").focus()})),o.OS.mobile||(this.shortcutsTooltip=new oi(this.wrapperElement,e,t)),this.rightClickMenu=new Lt(this.infoOverlay,this.shortcutsTooltip),c?(Object(s.a)(this.playerContainer,"jw-flag-touch"),this.rightClickMenu.setup(t,this.playerContainer,this.wrapperElement)):t.change("flashBlocked",(function(e,t){t?i.rightClickMenu.destroy():i.rightClickMenu.setup(e,i.playerContainer,i.wrapperElement)}),this);var d=t.get("floating");if(d){var w=new di(n,t.get("localization").close);w.on(a.sb,(function(){return i.trigger("dismissFloating",{doNotForward:!0})})),!1!==d.dismissible&&Object(s.a)(this.playerContainer,"jw-floating-dismissible")}var f=this.controlbar=new lt(e,t,this.playerContainer.querySelector(".jw-hidden-accessibility"));if(f.on(a.sb,(function(){return i.userActive()})),f.on("nextShown",(function(e){this.trigger("nextShown",e)}),this),f.on("adjustVolume",v,this),t.get("nextUpDisplay")&&!f.nextUpToolTip){var h=new Ct(t,e,this.playerContainer);h.on("all",this.trigger,this),h.setup(this.context),f.nextUpToolTip=h,this.div.appendChild(h.element())}this.div.appendChild(f.element());var j=null,g=this.settingsMenu=Gt(f,(function(n,o){var r=t.get("state"),l={reason:"settingsInteraction"},c="keydown"===(o&&o.sourceEvent||o||{}).type;Object(s.v)(i.div,"jw-settings-open",n),Object(ei.a)(t.get("containerWidth"))<2&&(n&&r===a.pb?e.pause(l):n||r!==a.ob||j!==a.pb||e.play(l));var u=n||c?0:gi;i.userActive(u),j=r;var d=i.controlbar.elements.settingsButton;!n&&d&&(c?d.element().focus():o&&(t.get("isFloating")?i.wrapperElement:i.playerContainer).focus())}),t.get("localization"));$t(g,f,t,e),o.OS.mobile?this.div.appendChild(g.element()):(this.playerContainer.setAttribute("aria-describedby","jw-shortcuts-tooltip-explanation"),this.div.insertBefore(g.element(),f.element()));var b=function(t){if(t.get("autostartMuted")){var n=function(){return i.unmuteAutoplay(e,t)},a=function(e,t){t||n()};o.OS.mobile&&(i.mute=p("jw-autostart-mute jw-off",n,t.get("localization").unmute,[le("volume-0")]),i.mute.show(),i.div.appendChild(i.mute.element())),f.renderVolume(!0,t.get("volume")),Object(s.a)(i.playerContainer,"jw-flag-autostart"),t.on("change:autostartFailed",n,i),t.on("change:autostartMuted change:mute",a,i),i.muteChangeCallback=a,i.unmuteCallback=n}};function m(i){var n=0,o=t.get("duration"),a=t.get("position");if("DVR"===t.get("streamType")){var r=t.get("dvrSeekLimit");n=o,o=Math.max(a,-r)}var s=Object(l.a)(a+i,n,o);e.seek(s,mi())}function v(i){var n=Object(l.a)(t.get("volume")+i,0,100);e.setVolume(n)}t.once("change:autostartMuted",b),b(t);var y=function(n){if(n.ctrlKey||n.metaKey)return!0;var o=!i.settingsMenu.visible,a=!0===t.get("enableShortcuts"),r=i.instreamState;if(a||-1!==bi.indexOf(n.keyCode)){switch(n.keyCode){case 27:if(t.get("fullscreen"))e.setFullscreen(!1),i.playerContainer.blur(),i.userInactive();else{var l=e.getPlugin("related");l&&l.close({type:"escape"})}i.rightClickMenu.el&&i.rightClickMenu.hideMenuHandler(),i.infoOverlay.visible&&i.infoOverlay.close(),i.shortcutsTooltip&&i.shortcutsTooltip.close();break;case 13:case 32:if(document.activeElement.classList.contains("jw-switch")&&32===n.keyCode)return!0;e.playToggle(mi());break;case 37:!r&&o&&m(-5);break;case 39:!r&&o&&m(5);break;case 38:o&&v(10);break;case 40:o&&v(-10);break;case 67:var s=e.getCaptionsList().length;if(s){var c=(e.getCurrentCaptions()+1)%s;e.setCurrentCaptions(c)}break;case 77:e.setMute();break;case 70:e.setFullscreen();break;case 191:i.shortcutsTooltip&&i.shortcutsTooltip.toggleVisibility();break;default:if(n.keyCode>=48&&n.keyCode<=59){var u=(n.keyCode-48)/10*t.get("duration");e.seek(u,mi())}}return/13|32|37|38|39|40/.test(n.keyCode)?(n.preventDefault(),!1):void 0}};this.playerContainer.addEventListener("keydown",y),this.keydownCallback=y;var k=function(e){if(9===e.keyCode){var t=i.playerContainer.contains(e.target)?0:gi;i.userActive(t)}};this.playerContainer.addEventListener("keyup",k),this.keyupCallback=k;var x=function(e){var t=e.relatedTarget||document.querySelector(":focus");t&&(i.playerContainer.contains(t)||i.userInactive())};this.playerContainer.addEventListener("blur",x,!0),this.blurCallback=x;var O=function e(){"jw-shortcuts-tooltip-explanation"===i.playerContainer.getAttribute("aria-describedby")&&i.playerContainer.removeAttribute("aria-describedby"),i.playerContainer.removeEventListener("blur",e,!0)};this.shortcutsTooltip&&(this.playerContainer.addEventListener("blur",O,!0),this.onRemoveShortcutsDescription=O),this.userActive(),this.addControls(),this.addBackdrop(),t.set("controlsEnabled",!0)}},{key:"addControls",value:function(){this.wrapperElement.appendChild(this.div)}},{key:"disable",value:function(e){var t=this.nextUpToolTip,i=this.settingsMenu,n=this.infoOverlay,o=this.controlbar,a=this.rightClickMenu,r=this.playerContainer,l=this.div;clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.off(),e.off(null,null,this),e.set("controlsEnabled",!1),l.parentNode&&(Object(s.o)(r,"jw-flag-touch"),l.parentNode.removeChild(l)),o&&o.destroy(),a&&a.destroy(),this.keydownCallback&&r.removeEventListener("keydown",this.keydownCallback),this.keyupCallback&&r.removeEventListener("keyup",this.keyupCallback),this.blurCallback&&r.removeEventListener("blur",this.blurCallback),this.onRemoveShortcutsDescription&&r.removeEventListener("blur",this.onRemoveShortcutsDescription),this.displayContainer&&this.displayContainer.destroy(),t&&t.destroy(),i&&(i.destroy(),l.removeChild(i.element())),n&&n.destroy(),this.removeBackdrop()}},{key:"controlbarHeight",value:function(){return this.dimensions.cbHeight||(this.dimensions.cbHeight=this.controlbar.element().clientHeight),this.dimensions.cbHeight}},{key:"element",value:function(){return this.div}},{key:"resize",value:function(){this.dimensions={}}},{key:"unmuteAutoplay",value:function(e,t){var i=!t.get("autostartFailed"),n=t.get("mute");i?n=!1:t.set("playOnViewable",!1),this.muteChangeCallback&&(t.off("change:autostartMuted change:mute",this.muteChangeCallback),this.muteChangeCallback=null),this.unmuteCallback&&(t.off("change:autostartFailed",this.unmuteCallback),this.unmuteCallback=null),t.set("autostartFailed",void 0),t.set("autostartMuted",void 0),e.setMute(n),this.controlbar.renderVolume(n,t.get("volume")),this.mute&&this.mute.hide(),Object(s.o)(this.playerContainer,"jw-flag-autostart"),this.userActive()}},{key:"mouseMove",value:function(e){var t=this.controlbar.element().contains(e.target),i=this.controlbar.nextUpToolTip&&this.controlbar.nextUpToolTip.element().contains(e.target),n=this.logo&&this.logo.contains(e.target),o=t||i||n?0:gi;this.userActive(o)}},{key:"userActive",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:gi;e>0?(this.inactiveTime=Object(c.a)()+e,-1===this.activeTimeout&&(this.activeTimeout=setTimeout(this.userInactiveTimeout,e))):this.resetActiveTimeout(),this.showing||(Object(s.o)(this.playerContainer,"jw-flag-user-inactive"),this.showing=!0,this.trigger("userActive"))}},{key:"userInactive",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.settingsMenu.visible||(this.inactiveTime=0,this.showing=!1,Object(s.a)(this.playerContainer,"jw-flag-user-inactive"),this.trigger("userInactive"))}},{key:"addBackdrop",value:function(){var e=this.instreamState?this.div:this.wrapperElement.querySelector(".jw-captions");this.wrapperElement.insertBefore(this.backdrop,e)}},{key:"removeBackdrop",value:function(){var e=this.backdrop.parentNode;e&&e.removeChild(this.backdrop)}},{key:"setupInstream",value:function(){this.instreamState=!0,this.userActive(),this.addBackdrop(),this.settingsMenu&&this.settingsMenu.close(),Object(s.o)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","-1")}},{key:"destroyInstream",value:function(e){this.instreamState=null,this.addBackdrop(),e.get("autostartMuted")&&Object(s.a)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","0")}}])&&wi(i.prototype,n),r&&wi(i,r),t}(r.a)},function(e,t,i){"use strict";i.r(t);var n=i(0),o=i(12),a=i(50),r=i(37);var l=i(44),s=i(51),c=i(26),u=i(25),d=i(3),p=i(46),w=i(2),f=i(7),h=i(34);function j(e){var t=!1;return{async:function(){var i=this,n=arguments;return Promise.resolve().then((function(){if(!t)return e.apply(i,n)}))},cancel:function(){t=!0},cancelled:function(){return t}}}var g=i(1);function b(e){return function(t,i){var o=e.mediaModel,a=Object(n.h)({},i,{type:t});switch(t){case d.T:if(o.get(d.T)===i.mediaType)return;o.set(d.T,i.mediaType);break;case d.U:return void o.set(d.U,Object(n.h)({},i));case d.M:if(i[t]===e.model.getMute())return;break;case d.bb:i.newstate===d.mb&&(e.thenPlayPromise.cancel(),o.srcReset());var r=o.attributes.mediaState;o.attributes.mediaState=i.newstate,o.trigger("change:mediaState",o,i.newstate,r);break;case d.F:return e.beforeComplete=!0,e.trigger(d.B,a),void(e.attached&&!e.background&&e._playbackComplete());case d.G:o.get("setup")?(e.thenPlayPromise.cancel(),o.srcReset()):(t=d.tb,a.code+=1e5);break;case d.K:a.metadataType||(a.metadataType="unknown");var l=i.duration;Object(n.v)(l)&&(o.set("seekRange",i.seekRange),o.set("duration",l));break;case d.D:o.set("buffer",i.bufferPercent);case d.S:o.set("seekRange",i.seekRange),o.set("position",i.position),o.set("currentTime",i.currentTime);var s=i.duration;Object(n.v)(s)&&o.set("duration",s),t===d.S&&Object(n.s)(e.item.starttime)&&delete e.item.starttime;break;case d.R:var c=e.mediaElement;c&&c.paused&&o.set("mediaState","paused");break;case d.I:o.set(d.I,i.levels);case d.J:var u=i.currentQuality,p=i.levels;u>-1&&p.length>1&&o.set("currentLevel",parseInt(u));break;case d.f:o.set(d.f,i.tracks);case d.g:var w=i.currentTrack,f=i.tracks;w>-1&&f.length>0&&w=Math.max(s,p.a)&&(e.preloadNextItem(),v=!0)}function P(e){var t={};b.tag&&(t.tag=b.tag),this.trigger(d.F,t),A.call(this,e)}function A(e){j={},a&&h+10?e:null,f&&f.model.set("skipOffset",l)}};Object(n.h)(se.prototype,f.a);var ce=se,ue=i(63),de=i(60),pe=function(e){var t=this,i=[],n={},o=0,a=0;function r(e){if(e.data=e.data||[],e.name=e.label||e.name||e.language,e._id=Object(de.a)(e,i.length),!e.name){var t=Object(de.b)(e,o);e.name=t.label,o=t.unknownCount}n[e._id]=e,i.push(e)}function l(){for(var e=[{id:"off",label:"Off"}],t=0;t')+'
    '},he=i(36),je=44,ge=function(e){var t=e.get("height");if(e.get("aspectratio"))return!1;if("string"==typeof t&&t.indexOf("%")>-1)return!1;var i=1*t||NaN;return!!(i=isNaN(i)?e.get("containerHeight"):i)&&(i&&i<=je)},be=i(54);function me(e,t){if(e.get("fullscreen"))return 1;if(!e.get("activeTab"))return 0;if(e.get("isFloating"))return 1;var i=e.get("intersectionRatio");return void 0===i&&(i=function(e){var t=document.documentElement,i=document.body,n={top:0,left:0,right:t.clientWidth||i.clientWidth,width:t.clientWidth||i.clientWidth,bottom:t.clientHeight||i.clientHeight,height:t.clientHeight||i.clientHeight};if(!i.contains(e))return 0;if("none"===window.getComputedStyle(e).display)return 0;var o=ve(e);if(!o)return 0;var a=o,r=e.parentNode,l=!1;for(;!l;){var s=null;if(r===i||r===t||1!==r.nodeType?(l=!0,s=n):"visible"!==window.getComputedStyle(r).overflow&&(s=ve(r)),s&&(c=s,u=a,d=void 0,p=void 0,w=void 0,f=void 0,h=void 0,j=void 0,d=Math.max(c.top,u.top),p=Math.min(c.bottom,u.bottom),w=Math.max(c.left,u.left),f=Math.min(c.right,u.right),j=p-d,!(a=(h=f-w)>=0&&j>=0&&{top:d,bottom:p,left:w,right:f,width:h,height:j})))return 0;r=r.parentNode}var c,u,d,p,w,f,h,j;var g=o.width*o.height,b=a.width*a.height;return g?b/g:0}(t),window.top!==window.self&&i)?0:i}function ve(e){try{return e.getBoundingClientRect()}catch(e){}}var ye=i(49),ke=i(42),xe=i(58),Oe=i(10);var Ce=i(32),Se=i(5),Me=i(6),Te=["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"],Ee=function(e,t,i){for(var n=e.requestFullscreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullscreen,o=t.exitFullscreen||t.webkitExitFullscreen||t.webkitCancelFullScreen||t.mozCancelFullScreen||t.msExitFullscreen,a=!(!n||!o),r=Te.length;r--;)t.addEventListener(Te[r],i);return{events:Te,supportsDomFullscreen:function(){return a},requestFullscreen:function(){n.call(e,{navigationUI:"hide"})},exitFullscreen:function(){null!==this.fullscreenElement()&&o.apply(t)},fullscreenElement:function(){var e=t.fullscreenElement,i=t.webkitCurrentFullScreenElement,n=t.mozFullScreenElement,o=t.msFullscreenElement;return null===e?e:e||i||n||o},destroy:function(){for(var e=Te.length;e--;)t.removeEventListener(Te[e],i)}}},_e=i(40);function ze(e,t){for(var i=0;io?a:n*r/i)*u}return e}(i))/10}f.get("renderCaptionsNatively")?function(e,t){var i="#".concat(e," .jw-video::-webkit-media-text-track-display");t&&(t+="px",m.OS.iOS&&Object(Oe.b)(i,{fontSize:"inherit"},e,!0));p.fontSize=t,Object(Oe.b)(i,p,e,!0)}(f.get("id"),t):Object(Oe.d)(l,{fontSize:t})}}function g(e,t,i){var n=Object(Oe.c)("#000000",i);"dropshadow"===e?t.textShadow="0 2px 1px "+n:"raised"===e?t.textShadow="0 0 5px "+n+", 0 1px 5px "+n+", 0 2px 5px "+n:"depressed"===e?t.textShadow="0 -2px 1px "+n:"uniform"===e&&(t.textShadow="-2px 0 1px "+n+",2px 0 1px "+n+",0 -2px 1px "+n+",0 2px 1px "+n+",-1px 1px 1px "+n+",1px 1px 1px "+n+",1px -1px 1px "+n+",1px 1px 1px "+n)}(l=document.createElement("div")).className="jw-captions jw-reset",this.show=function(){Object(Se.a)(l,"jw-captions-enabled")},this.hide=function(){Object(Se.o)(l,"jw-captions-enabled")},this.populate=function(e){f.get("renderCaptionsNatively")||(a=[],o=e,e?this.selectCues(e,r):this.renderCues())},this.resize=function(){j(),this.renderCues(!0)},this.renderCues=function(e){e=!!e,Pe&&Pe.processCues(window,a,l,e)},this.selectCues=function(e,t){if(e&&e.data&&t&&!f.get("renderCaptionsNatively")){var i=this.getAlignmentPosition(e,t);!1!==i&&(a=this.getCurrentCues(e.data,i),this.renderCues(!0))}},this.getCurrentCues=function(e,t){return Object(n.i)(e,(function(e){return t>=e.startTime&&(!e.endTime||t<=e.endTime)}))},this.getAlignmentPosition=function(e,t){var i=e.source,o=t.metadata,a=t.currentTime;return i&&o&&Object(n.s)(o[i])&&(a=o[i]),a},this.clear=function(){Object(Se.g)(l)},this.setup=function(e,i){s=document.createElement("div"),c=document.createElement("span"),s.className="jw-captions-window jw-reset",c.className="jw-captions-text jw-reset",t=Object(n.h)({},Re,i),u=Re.fontScale,h(t.fontSize);var o=t.windowColor,a=t.windowOpacity,r=t.edgeStyle;p={};var d={};!function(e,t){var i=t.color,n=t.fontOpacity;(i||n!==Re.fontOpacity)&&(e.color=Object(Oe.c)(i||"#ffffff",n));if(t.back){var o=t.backgroundColor,a=t.backgroundOpacity;o===Re.backgroundColor&&a===Re.backgroundOpacity||(e.backgroundColor=Object(Oe.c)(o,a))}else e.background="transparent";t.fontFamily&&(e.fontFamily=t.fontFamily);t.fontStyle&&(e.fontStyle=t.fontStyle);t.fontWeight&&(e.fontWeight=t.fontWeight);t.textDecoration&&(e.textDecoration=t.textDecoration)}(d,t),(o||a!==Re.windowOpacity)&&(p.backgroundColor=Object(Oe.c)(o||"#000000",a)),g(r,d,t.fontOpacity),t.back||null!==r||g("uniform",d),Object(Oe.d)(s,p),Object(Oe.d)(c,d),function(e,t){j(),function(e,t){m.Browser.safari&&Object(Oe.b)("#"+e+" .jw-video::-webkit-media-text-track-display-backdrop",{backgroundColor:t.backgroundColor},e,!0);Object(Oe.b)("#"+e+" .jw-video::-webkit-media-text-track-display",p,e,!0),Object(Oe.b)("#"+e+" .jw-video::cue",t,e,!0)}(e,t),function(e,t){Object(Oe.b)("#"+e+" .jw-text-track-display",p,e),Object(Oe.b)("#"+e+" .jw-text-track-cue",t,e)}(e,t)}(e,d),s.appendChild(c),l.appendChild(s),f.change("captionsTrack",(function(e,t){this.populate(t)}),this),f.set("captions",t)},this.element=function(){return l},this.destroy=function(){f.off(null,null,this),this.off()};var b=function(e){r=e,w.selectCues(o,r)};f.on("change:playlistItem",(function(){r=null,a=[]}),this),f.on(d.Q,(function(e){a=[],b(e)}),this),f.on(d.S,b,this),f.on("subtitlesTrackData",(function(){this.selectCues(o,r)}),this),f.on("change:captionsList",(function e(t,n){var o=this;1!==n.length&&(t.get("renderCaptionsNatively")||Pe||(i.e(8).then(function(e){Pe=i(93).default}.bind(null,i)).catch(Object(Le.c)(301121)).catch((function(e){o.trigger(d.tb,e)})),t.off("change:captionsList",e,this)))}),this)};Object(n.h)(Ie.prototype,f.a);var Be=Ie,Ve=function(e,t){var i=t?" jw-hide":"";return'')},He={linktarget:"_blank",margin:8,hide:!1,position:"top-right"};function Ne(e){var t,i;Object(n.h)(this,f.a);var o=new Image;this.setup=function(){(i=Object(n.h)({},He,e.get("logo"))).position=i.position||He.position,i.hide="true"===i.hide.toString(),i.file&&"control-bar"!==i.position&&(t||(t=Object(Se.e)(Ve(i.position,i.hide))),e.set("logo",i),o.onload=function(){var n=this.height,o=this.width,a={backgroundImage:'url("'+this.src+'")'};if(i.margin!==He.margin){var r=/(\w+)-(\w+)/.exec(i.position);3===r.length&&(a["margin-"+r[1]]=i.margin,a["margin-"+r[2]]=i.margin)}var l=.15*e.get("containerHeight"),s=.15*e.get("containerWidth");if(n>l||o>s){var c=o/n;s/l>c?(n=l,o=l*c):(o=s,n=s/c)}a.width=Math.round(o),a.height=Math.round(n),Object(Oe.d)(t,a),e.set("logoWidth",a.width)},o.src=i.file,i.link&&(t.setAttribute("tabindex","0"),t.setAttribute("aria-label",e.get("localization").logo)),this.ui=new _e.a(t).on("click tap enter",(function(e){e&&e.stopPropagation&&e.stopPropagation(),this.trigger(d.A,{link:i.link,linktarget:i.linktarget})}),this))},this.setContainer=function(e){t&&e.appendChild(t)},this.element=function(){return t},this.position=function(){return i.position},this.destroy=function(){o.onload=null,this.ui&&this.ui.destroy()}}var Fe=function(e){this.model=e,this.image=null};Object(n.h)(Fe.prototype,{setup:function(e){this.el=e},setImage:function(e){var t=this.image;t&&(t.onload=null),this.image=null;var i="";"string"==typeof e&&(i='url("'+e+'")',(t=this.image=new Image).src=e),Object(Oe.d)(this.el,{backgroundImage:i})},resize:function(e,t,i){if("uniform"===i){if(e&&(this.playerAspectRatio=e/t),!this.playerAspectRatio||!this.image||"complete"!==(l=this.model.get("state"))&&"idle"!==l&&"error"!==l&&"buffering"!==l)return;var n=this.image,o=null;if(n){if(0===n.width){var a=this;return void(n.onload=function(){a.resize(e,t,i)})}var r=n.width/n.height;Math.abs(this.playerAspectRatio-r)<.09&&(o="cover")}Object(Oe.d)(this.el,{backgroundSize:o})}var l},element:function(){return this.el}});var qe=Fe,De=function(e){this.model=e.player};Object(n.h)(De.prototype,{hide:function(){Object(Oe.d)(this.el,{display:"none"})},show:function(){Object(Oe.d)(this.el,{display:""})},setup:function(e){this.el=e;var t=this.el.getElementsByTagName("div");this.title=t[0],this.description=t[1],this.model.on("change:logoWidth",this.update,this),this.model.change("playlistItem",this.playlistItem,this)},update:function(e){var t={},i=e.get("logo");if(i){var n=1*(""+i.margin).replace("px",""),o=e.get("logoWidth")+(isNaN(n)?0:n+10);"top-left"===i.position?t.paddingLeft=o:"top-right"===i.position&&(t.paddingRight=o)}Object(Oe.d)(this.el,t)},playlistItem:function(e,t){if(t)if(e.get("displaytitle")||e.get("displaydescription")){var i="",n="";t.title&&e.get("displaytitle")&&(i=t.title),t.description&&e.get("displaydescription")&&(n=t.description),this.updateText(i,n)}else this.hide()},updateText:function(e,t){Object(Se.q)(this.title,e),Object(Se.q)(this.description,t),this.title.firstChild||this.description.firstChild?this.show():this.hide()},element:function(){return this.el}});var Ue=De;function We(e,t){for(var i=0;ie)}if(t.get("controls")){var r=ge(t);Object(Se.v)(u,"jw-flag-audio-player",r),t.set("audioMode",r)}}function I(){t.set("visibility",me(t,u))}this.updateBounds=function(){Object(ke.a)(k);var e=t.get("isFloating")?p:u,i=document.body.contains(e),n=Object(Se.c)(e),r=Math.round(n.width),l=Math.round(n.height);if(E=Object(Se.c)(u),r===o&&l===a)return o&&a||A(),void t.set("inDom",i);r&&l||o&&a||A(),(r||l||i)&&(t.set("containerWidth",r),t.set("containerHeight",l)),t.set("inDom",i),i&&be.a.observe(u)},this.updateStyles=function(){var e=t.get("containerWidth"),i=t.get("containerHeight");R(e,i),z&&z.resize(e,i),$(e,i),v.resize(),O&&F()},this.checkResized=function(){var e=t.get("containerWidth"),i=t.get("containerHeight"),n=t.get("isFloating");if(e!==o||i!==a){this.resizeListener||(this.resizeListener=new Xe.a(p,this,t)),o=e,a=i,s.trigger(d.hb,{width:e,height:i});var l=Object(xe.a)(e);_!==l&&(_=l,s.trigger(d.j,{breakpoint:_}))}n!==r&&(r=n,s.trigger(d.x,{floating:n}),I())},this.responsiveListener=A,this.setup=function(){var n,o,a,r;g.setup(u.querySelector(".jw-preview")),b.setup(u.querySelector(".jw-title")),(i=new Ne(t)).setup(),i.setContainer(p),i.on(d.A,K),v.setup(u.id,t.get("captions")),b.element().parentNode.insertBefore(v.element(),b.element()),n=e,a=new Ae(o=t,h),r=o.get("controls"),a.on({click:function(){s.trigger(d.p),z&&(ce()?z.settingsMenu.close():ue()?z.infoOverlay.close():n.playToggle({reason:"interaction"}))},tap:function(){u.removeEventListener("mousemove",W),u.removeEventListener("mouseout",Y),u.removeEventListener("mouseover",Q),s.trigger(d.p),ce()&&z.settingsMenu.close(),ue()&&z.infoOverlay.close();var e=o.get("state");if(r&&(e===d.mb||e===d.kb||o.get("instream")&&e===d.ob)&&n.playToggle({reason:"interaction"}),r&&e===d.ob){if(o.get("instream")||o.get("castActive")||"audio"===o.get("mediaType"))return;Object(Se.v)(u,"jw-flag-controls-hidden"),s.dismissible&&Object(Se.v)(u,"jw-floating-dismissible",Object(Se.i)(u,"jw-flag-controls-hidden")),v.renderCues(!0)}else z&&(z.showing?z.userInactive():z.userActive())},doubleClick:function(){return z&&n.setFullscreen()}}),u.addEventListener("mousemove",W),u.addEventListener("mouseover",Q),u.addEventListener("mouseout",Y),C=a,M=new _e.a(u).on("click",(function(){})),S=Ee(u,document,te),t.on("change:hideAdsControls",(function(e,t){Object(Se.v)(u,"jw-flag-ads-hide-controls",t)})),t.on("change:scrubbing",(function(e,t){Object(Se.v)(u,"jw-flag-dragging",t)})),t.on("change:playRejected",(function(e,t){Object(Se.v)(u,"jw-flag-play-rejected",t)})),t.on(d.X,ee),t.on("change:".concat(d.U),(function(){$(),v.resize()})),t.player.on("change:errorEvent",ae),t.change("stretching",X);var l=t.get("width"),c=t.get("height"),f=G(l,c);Object(Oe.d)(u,f),t.change("aspectratio",Z),R(l,c),t.get("controls")||(Object(Se.a)(u,"jw-flag-controls-hidden"),Object(Se.o)(u,"jw-floating-dismissible")),Ke&&Object(Se.a)(u,"jw-ie");var j=t.get("skin")||{};j.name&&Object(Se.p)(u,/jw-skin-\S+/,"jw-skin-"+j.name);var y=function(e){e||(e={});var t=e.active,i=e.inactive,n=e.background,o={};return o.controlbar=function(e){if(e||t||i||n){var o={};return e=e||{},o.iconsActive=e.iconsActive||t,o.icons=e.icons||i,o.text=e.text||i,o.background=e.background||n,o}}(e.controlbar),o.timeslider=function(e){if(e||t){var i={};return e=e||{},i.progress=e.progress||t,i.rail=e.rail,i}}(e.timeslider),o.menus=function(e){if(e||t||i||n){var o={};return e=e||{},o.text=e.text||i,o.textActive=e.textActive||t,o.background=e.background||n,o}}(e.menus),o.tooltips=function(e){if(e||i||n){var t={};return e=e||{},t.text=e.text||i,t.background=e.background||n,t}}(e.tooltips),o}(j);!function(e,t){var i;function n(t,i,n,o){if(n){t=Object(w.f)(t,"#"+e+(o?"":" "));var a={};a[i]=n,Object(Oe.b)(t.join(", "),a,e)}}t&&(t.controlbar&&function(t){n([".jw-controlbar .jw-icon-inline.jw-text",".jw-title-primary",".jw-title-secondary"],"color",t.text),t.icons&&(n([".jw-button-color:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:not(.jw-icon-cast)"],"color",t.icons),n([".jw-display-icon-container .jw-button-color"],"color",t.icons),Object(Oe.b)("#".concat(e," .jw-icon-cast google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.icons,"}"),e));t.iconsActive&&(n([".jw-display-icon-container .jw-button-color:hover",".jw-display-icon-container .jw-button-color:focus"],"color",t.iconsActive),n([".jw-button-color.jw-toggle:not(.jw-icon-cast)",".jw-button-color:hover:not(.jw-icon-cast)",".jw-button-color:focus:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:hover:not(.jw-icon-cast)"],"color",t.iconsActive),n([".jw-svg-icon-buffer"],"fill",t.icons),Object(Oe.b)("#".concat(e," .jw-icon-cast:hover google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast:focus google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast google-cast-launcher.jw-off:focus"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast google-cast-launcher:focus"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast:hover google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(Oe.b)("#".concat(e," .jw-icon-cast:focus google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e));n([" .jw-settings-topbar",":not(.jw-state-idle) .jw-controlbar",".jw-flag-audio-player .jw-controlbar"],"background",t.background,!0)}(t.controlbar),t.timeslider&&function(e){var t=e.progress;"none"!==t&&(n([".jw-progress",".jw-knob"],"background-color",t),n([".jw-buffer"],"background-color",Object(Oe.c)(t,50)));n([".jw-rail"],"background-color",e.rail),n([".jw-background-color.jw-slider-time",".jw-slider-time .jw-cue"],"background-color",e.background)}(t.timeslider),t.menus&&(n([".jw-option",".jw-toggle.jw-off",".jw-skip .jw-skip-icon",".jw-nextup-tooltip",".jw-nextup-close",".jw-settings-content-item",".jw-related-title"],"color",(i=t.menus).text),n([".jw-option.jw-active-option",".jw-option:not(.jw-active-option):hover",".jw-option:not(.jw-active-option):focus",".jw-settings-content-item:hover",".jw-nextup-tooltip:hover",".jw-nextup-tooltip:focus",".jw-nextup-close:hover"],"color",i.textActive),n([".jw-nextup",".jw-settings-menu"],"background",i.background)),t.tooltips&&function(e){n([".jw-skip",".jw-tooltip .jw-text",".jw-time-tip .jw-text"],"background-color",e.background),n([".jw-time-tip",".jw-tooltip"],"color",e.background),n([".jw-skip"],"border","none"),n([".jw-skip .jw-text",".jw-skip .jw-icon",".jw-time-tip .jw-text",".jw-tooltip .jw-text"],"color",e.text)}(t.tooltips),t.menus&&function(t){if(t.textActive){var i={color:t.textActive,borderColor:t.textActive,stroke:t.textActive};Object(Oe.b)("#".concat(e," .jw-color-active"),i,e),Object(Oe.b)("#".concat(e," .jw-color-active-hover:hover"),i,e)}if(t.text){var n={color:t.text,borderColor:t.text,stroke:t.text};Object(Oe.b)("#".concat(e," .jw-color-inactive"),n,e),Object(Oe.b)("#".concat(e," .jw-color-inactive-hover:hover"),n,e)}}(t.menus))}(t.get("id"),y),t.set("mediaContainer",h),t.set("iFrame",m.Features.iframe),t.set("activeTab",Object(ye.a)()),t.set("touchMode",Ze&&("string"==typeof c||c>=je)),be.a.add(this),t.get("enableGradient")&&!Ke&&Object(Se.a)(u,"jw-ab-drop-shadow"),this.isSetup=!0,t.trigger("viewSetup",u);var k=document.body.contains(u);k&&be.a.observe(u),t.set("inDom",k)},this.init=function(){this.updateBounds(),t.on("change:fullscreen",J),t.on("change:activeTab",I),t.on("change:fullscreen",I),t.on("change:intersectionRatio",I),t.on("change:visibility",U),t.on("instreamMode",(function(e){e?de():pe()})),I(),1!==be.a.size()||t.get("visibility")||U(t,1,0);var e=t.player;t.change("state",re),e.change("controls",q),t.change("streamType",ne),t.change("mediaType",oe),e.change("playlistItem",(function(e,t){se(e,t)})),o=a=null,O&&m.OS.mobile&&be.a.addScrollHandler(F),this.checkResized()};var B,V=62,H=!0;function N(){var e=t.get("isFloating"),i=E.top0&&void 0!==arguments[0])||arguments[0],t={x:0,y:0,width:o||0,height:a||0};return z&&e&&(t.height-=z.controlbarHeight()),t},this.setCaptions=function(e){v.clear(),v.setup(t.get("id"),e),v.resize()},this.setIntersection=function(e){var i=Math.round(100*e.intersectionRatio)/100;t.set("intersectionRatio",i),O&&!P()&&(T=T||i>=.5)&&we(i)},this.stopFloating=function(e,i){if(e&&(O=null,be.a.removeScrollHandler(F)),Je===u){Je=null,t.set("isFloating",!1);var n=function(){Object(Se.o)(u,"jw-flag-floating"),Z(t,t.get("aspectratio")),Object(Oe.d)(u,{backgroundImage:null}),Object(Oe.d)(p,{maxWidth:null,width:null,height:null,left:null,right:null,top:null,bottom:null,margin:null,transform:null,transition:null,"transition-timing-function":null})};i?(Object(Oe.d)(p,{transform:"translateY(-".concat(V-E.top,"px)"),"transition-timing-function":"ease-out"}),setTimeout(n,150)):n(),j.disable(),A()}},this.destroy=function(){t.destroy(),be.a.unobserve(u),be.a.remove(this),this.isSetup=!1,this.off(),Object(ke.a)(k),clearTimeout(y),Je===u&&(Je=null),M&&(M.destroy(),M=null),S&&(S.destroy(),S=null),z&&z.disable(t),C&&(C.destroy(),u.removeEventListener("mousemove",W),u.removeEventListener("mouseout",Y),u.removeEventListener("mouseover",Q),C=null),v.destroy(),i&&(i.destroy(),i=null),Object(Oe.a)(t.get("id")),this.resizeListener&&(this.resizeListener.destroy(),delete this.resizeListener),O&&m.OS.mobile&&be.a.removeScrollHandler(F)}};function $e(e,t,i){return($e="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,i){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=at(e)););return e}(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(i):o.value}})(e,t,i||e)}function et(e){return(et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function tt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function it(e,t){for(var i=0;it&&e(),t=n}};function Et(e,t){t.off(d.N,e._onPlayAttempt),t.off(d.fb,e._triggerFirstFrame),t.off(d.S,e._onTime),e.off("change:activeTab",e._onTabVisible)}var _t=function(e,t){e.change("mediaModel",(function(e,i,n){e._qoeItem&&n&&e._qoeItem.end(n.get("mediaState")),e._qoeItem=new Ct.a,e._qoeItem.getFirstFrame=function(){var e=this.between(d.N,d.H),t=this.between(Mt,d.H);return t>0&&t0&&re(t,e.tracks)}),C).on(d.F,(function(){Promise.resolve().then(ae)}),C).on(d.G,C.triggerError,C),_t(S,B),S.on(d.w,C.triggerError,C),S.on("change:state",(function(e,t,i){X()||Z.call(O,e,t,i)}),this),S.on("change:castState",(function(e,t){C.trigger(d.m,t)})),S.on("change:fullscreen",(function(e,t){C.trigger(d.y,{fullscreen:t}),t&&e.set("playOnViewable",!1)})),S.on("change:volume",(function(e,t){C.trigger(d.V,{volume:t})})),S.on("change:mute",(function(e){C.trigger(d.M,{mute:e.getMute()})})),S.on("change:playbackRate",(function(e,t){C.trigger(d.ab,{playbackRate:t,position:e.get("position")})}));var V=function e(t,i){"clickthrough"!==i&&"interaction"!==i&&"external"!==i||(S.set("playOnViewable",!1),S.off("change:playReason change:pauseReason",e))};function H(e,t){Object(n.u)(t)||S.set("viewable",Math.round(t))}function N(){de&&(!0!==S.get("autostart")||S.get("playOnViewable")||$("autostart"),de.flush())}function F(e,t){C.trigger("viewable",{viewable:t}),q()}function q(){if((o.a[0]===t||1===S.get("viewable"))&&"idle"===S.get("state")&&!1===S.get("autostart"))if(!b.primed()&&m.OS.android){var e=b.getTestElement(),i=C.getMute();Promise.resolve().then((function(){return bt(e,{muted:i})})).then((function(){"idle"===S.get("state")&&B.preloadVideo()})).catch(At)}else B.preloadVideo()}function D(e){C._instreamAdapter.noResume=!e,e||te({reason:"viewable"})}function U(e){e||(C.pause({reason:"viewable"}),S.set("playOnViewable",!e))}function W(e,t){var i=X();if(e.get("playOnViewable")){if(t){var n=e.get("autoPause").pauseAds,o=e.get("pauseReason");K()===d.mb?$("viewable"):i&&!n||"interaction"===o||J({reason:"viewable"})}else m.OS.mobile&&!i&&(C.pause({reason:"autostart"}),S.set("playOnViewable",!0));m.OS.mobile&&i&&D(t)}}function Q(e,t){var i=e.get("state"),n=X(),o=e.get("playReason");n?e.get("autoPause").pauseAds?U(t):D(t):i===d.pb||i===d.jb?U(t):i===d.mb&&"playlist"===o&&e.once("change:state",(function(){U(t)}))}function X(){var e=C._instreamAdapter;return!!e&&e.getState()}function K(){var e=X();return e||S.get("state")}function J(e){if(_.cancel(),T=!1,S.get("state")===d.lb)return Promise.resolve();var i=G(e);return S.set("playReason",i),X()?(t.pauseAd(!1,e),Promise.resolve()):(S.get("state")===d.kb&&(ee(!0),C.setItemIndex(0)),!M&&(M=!0,C.trigger(d.C,{playReason:i,startTime:e&&e.startTime?e.startTime:S.get("playlistItem").starttime}),M=!1,Ot()&&!b.primed()&&b.prime(),"playlist"===i&&S.get("autoPause").viewability&&Q(S,S.get("viewable")),x)?(Ot()&&!R&&S.get("mediaElement").load(),x=!1,k=null,Promise.resolve()):B.playVideo(i).then(b.played))}function G(e){return e&&e.reason?e.reason:"unknown"}function $(e){if(K()===d.mb){_=j(N);var t=S.get("advertising");(function(e,t){var i=t.cancelable,n=t.muted,o=void 0!==n&&n,a=t.allowMuted,r=void 0!==a&&a,l=t.timeout,s=void 0===l?1e4:l,c=e.getTestElement(),u=o?"muted":"".concat(r);kt[u]||(kt[u]=bt(c,{muted:o}).catch((function(e){if(!i.cancelled()&&!1===o&&r)return bt(c,{muted:o=!0});throw e})).then((function(){return o?(kt[u]=null,vt):mt})).catch((function(e){throw clearTimeout(d),kt[u]=null,e.reason=yt,e})));var d,p=kt[u].then((function(e){if(clearTimeout(d),i.cancelled()){var t=new Error("Autoplay test was cancelled");throw t.reason="cancelled",t}return e})),w=new Promise((function(e,t){d=setTimeout((function(){kt[u]=null;var e=new Error("Autoplay test timed out");e.reason="timeout",t(e)}),s)}));return Promise.race([p,w])})(b,{cancelable:_,muted:C.getMute(),allowMuted:!t||t.autoplayadsmuted}).then((function(t){return S.set("canAutoplay",t),t!==vt||C.getMute()||(S.set("autostartMuted",!0),ue(),S.once("change:autostartMuted",(function(e){e.off("change:viewable",W),C.trigger(d.M,{mute:S.getMute()})}))),C.getMute()&&S.get("enableDefaultCaptions")&&y.selectDefaultIndex(1),J({reason:e}).catch((function(){C._instreamAdapter||S.set("autostartFailed",!0),k=null}))})).catch((function(e){if(S.set("canAutoplay",yt),S.set("autostart",!1),!_.cancelled()){var t=Object(g.w)(e);C.trigger(d.h,{reason:e.reason,code:t,error:e})}}))}}function ee(e){if(_.cancel(),de.empty(),X()){var t=C._instreamAdapter;return t&&(t.noResume=!0),void(k=function(){return B.stopVideo()})}k=null,!e&&(T=!0),M&&(x=!0),S.set("errorEvent",void 0),B.stopVideo()}function te(e){var t=G(e);S.set("pauseReason",t),S.set("playOnViewable","viewable"===t)}function ie(e){k=null,_.cancel();var i=X();if(i&&i!==d.ob)return te(e),void t.pauseAd(!0,e);switch(S.get("state")){case d.lb:return;case d.pb:case d.jb:te(e),B.pause();break;default:M&&(x=!0)}}function ne(e,t){ee(!0),C.setItemIndex(e),C.play(t)}function oe(e){ne(S.get("item")+1,e)}function ae(){C.completeCancelled()||(k=C.completeHandler,C.shouldAutoAdvance()?C.nextItem():S.get("repeat")?oe({reason:"repeat"}):(m.OS.iOS&&se(!1),S.set("playOnViewable",!1),S.set("state",d.kb),C.trigger(d.cb,{})))}function re(e,t){e=parseInt(e,10)||0,S.persistVideoSubtitleTrack(e,t),B.subtitles=e,C.trigger(d.k,{tracks:le(),track:e})}function le(){return y.getCaptionsList()}function se(e){Object(n.o)(e)||(e=!S.get("fullscreen")),S.set("fullscreen",e),C._instreamAdapter&&C._instreamAdapter._adModel&&C._instreamAdapter._adModel.set("fullscreen",e)}function ue(){B.mute=S.getMute(),B.volume=S.get("volume")}S.on("change:playReason change:pauseReason",V),C.on(d.c,(function(e){return V(0,e.playReason)})),C.on(d.b,(function(e){return V(0,e.pauseReason)})),S.on("change:scrubbing",(function(e,t){t?(E=S.get("state")!==d.ob,ie()):E&&J({reason:"interaction"})})),S.on("change:captionsList",(function(e,t){C.trigger(d.l,{tracks:t,track:S.get("captionsIndex")||0})})),S.on("change:mediaModel",(function(e,t){var i=this;e.set("errorEvent",void 0),t.change("mediaState",(function(t,i){var n;e.get("errorEvent")||e.set(d.bb,(n=i)===d.nb||n===d.qb?d.jb:n)}),this),t.change("duration",(function(t,i){if(0!==i){var n=e.get("minDvrWindow"),o=Object(xt.b)(i,n);e.setStreamType(o)}}),this);var n=e.get("item")+1,o="autoplay"===(e.get("related")||{}).oncomplete,a=e.get("playlist")[n];if((a||o)&&R){t.on("change:position",(function e(n,r){var l=a&&!a.daiSetting,s=t.get("duration");l&&r&&s>0&&r>=s-p.b?(t.off("change:position",e,i),B.backgroundLoad(a)):o&&(a=S.get("nextUp"))}),this)}})),(y=new we(S)).on("all",L,C),I.on("viewSetup",(function(e){Object(a.b)(O,e)})),this.playerReady=function(){v.once(d.hb,(function(){try{!function(){S.change("visibility",H),P.off(),C.trigger(d.gb,{setupTime:0}),S.change("playlist",(function(e,t){if(t.length){var i={playlist:t},o=S.get("feedData");o&&(i.feedData=Object(n.h)({},o)),C.trigger(d.eb,i)}})),S.change("playlistItem",(function(e,t){if(t){var i=t.title,n=t.image;if("mediaSession"in navigator&&window.MediaMetadata&&(i||n))try{navigator.mediaSession.metadata=new window.MediaMetadata({title:i,artist:window.location.hostname,artwork:[{src:n||""}]})}catch(e){}e.set("cues",[]),C.trigger(d.db,{index:S.get("item"),item:t})}})),P.flush(),P.destroy(),P=null,S.change("viewable",F),S.change("viewable",W),S.get("autoPause").viewability?S.change("viewable",Q):S.once("change:autostartFailed change:mute",(function(e){e.off("change:viewable",W)}));N(),S.on("change:itemReady",(function(e,t){t&&de.flush()}))}()}catch(e){C.triggerError(Object(g.v)(g.m,g.a,e))}})),v.init()},this.preload=q,this.load=function(e,t){var i,n=C._instreamAdapter;switch(n&&(n.noResume=!0),C.trigger("destroyPlugin",{}),ee(!0),_.cancel(),_=j(N),z.cancel(),Ot()&&b.prime(),zt(e)){case"string":S.attributes.item=0,S.attributes.itemReady=!1,z=j((function(e){if(e)return C.updatePlaylist(Object(c.a)(e.playlist),e)})),i=function(e){var t=this;return new Promise((function(i,n){var o=new s.a;o.on(d.eb,(function(e){i(e)})),o.on(d.w,n,t),o.load(e)}))}(e).then(z.async);break;case"object":S.attributes.item=0,i=C.updatePlaylist(Object(c.a)(e),t||{});break;case"number":i=C.setItemIndex(e);break;default:return}i.catch((function(e){C.triggerError(Object(g.u)(e,g.c))})),i.then(_.async).catch(At)},this.play=function(e){return J(e).catch(At)},this.pause=ie,this.seek=function(e,t){var i=S.get("state");if(i!==d.lb){B.position=e;var n=i===d.mb;S.get("scrubbing")||!n&&i!==d.kb||(n&&((t=t||{}).startTime=e),this.play(t))}},this.stop=ee,this.playlistItem=ne,this.playlistNext=oe,this.playlistPrev=function(e){ne(S.get("item")-1,e)},this.setCurrentCaptions=re,this.setCurrentQuality=function(e){B.quality=e},this.setFullscreen=se,this.getCurrentQuality=function(){return B.quality},this.getQualityLevels=function(){return B.qualities},this.setCurrentAudioTrack=function(e){B.audioTrack=e},this.getCurrentAudioTrack=function(){return B.audioTrack},this.getAudioTracks=function(){return B.audioTracks},this.getCurrentCaptions=function(){return y.getCurrentIndex()},this.getCaptionsList=le,this.getVisualQuality=function(){var e=this._model.get("mediaModel");return e?e.get(d.U):null},this.getConfig=function(){return this._model?this._model.getConfiguration():void 0},this.getState=K,this.next=At,this.completeHandler=ae,this.completeCancelled=function(){return(e=S.get("state"))!==d.mb&&e!==d.kb&&e!==d.lb||!!T&&(T=!1,!0);var e},this.shouldAutoAdvance=function(){return S.get("item")!==S.get("playlist").length-1},this.nextItem=function(){oe({reason:"playlist"})},this.setConfig=function(e){!function(e,t){var i=e._model,n=i.attributes;t.height&&(t.height=Object(r.b)(t.height),t.width=t.width||n.width),t.width&&(t.width=Object(r.b)(t.width),t.aspectratio?(n.width=t.width,delete t.width):t.height=n.height),t.width&&t.height&&!t.aspectratio&&e._view.resize(t.width,t.height),Object.keys(t).forEach((function(o){var a=t[o];if(void 0!==a)switch(o){case"aspectratio":i.set(o,Object(r.a)(a,n.width));break;case"autostart":!function(e,t,i){e.setAutoStart(i),"idle"===e.get("state")&&!0===i&&t.play({reason:"autostart"})}(i,e,a);break;case"mute":e.setMute(a);break;case"volume":e.setVolume(a);break;case"playbackRateControls":case"playbackRates":case"repeat":case"stretching":i.set(o,a)}}))}(C,e)},this.setItemIndex=function(e){B.stopVideo();var t=S.get("playlist").length;return(e=(parseInt(e,10)||0)%t)<0&&(e+=t),B.setActiveItem(e).catch((function(e){e.code>=151&&e.code<=162&&(e=Object(g.u)(e,g.e)),O.triggerError(Object(g.v)(g.k,g.d,e))}))},this.detachMedia=function(){if(M&&(x=!0),S.get("autoPause").viewability&&Q(S,S.get("viewable")),!R)return B.setAttached(!1);B.backgroundActiveMedia()},this.attachMedia=function(){R?B.restoreBackgroundMedia():B.setAttached(!0),"function"==typeof k&&k()},this.routeEvents=function(e){return B.routeEvents(e)},this.forwardEvents=function(){return B.forwardEvents()},this.playVideo=function(e){return B.playVideo(e)},this.stopVideo=function(){return B.stopVideo()},this.castVideo=function(e,t){return B.castVideo(e,t)},this.stopCast=function(){return B.stopCast()},this.backgroundActiveMedia=function(){return B.backgroundActiveMedia()},this.restoreBackgroundMedia=function(){return B.restoreBackgroundMedia()},this.preloadNextItem=function(){B.background.currentMedia&&B.preloadVideo()},this.isBeforeComplete=function(){return B.beforeComplete},this.setVolume=function(e){S.setVolume(e),ue()},this.setMute=function(e){S.setMute(e),ue()},this.setPlaybackRate=function(e){S.setPlaybackRate(e)},this.getProvider=function(){return S.get("provider")},this.getWidth=function(){return S.get("containerWidth")},this.getHeight=function(){return S.get("containerHeight")},this.getItemQoe=function(){return S._qoeItem},this.addButton=function(e,t,i,n,o){var a=S.get("customButtons")||[],r=!1,l={img:e,tooltip:t,callback:i,id:n,btnClass:o};a=a.reduce((function(e,t){return t.id===n?(r=!0,e.push(l)):e.push(t),e}),[]),r||a.unshift(l),S.set("customButtons",a)},this.removeButton=function(e){var t=S.get("customButtons")||[];t=t.filter((function(t){return t.id!==e})),S.set("customButtons",t)},this.resize=v.resize,this.getSafeRegion=v.getSafeRegion,this.setCaptions=v.setCaptions,this.checkBeforePlay=function(){return M},this.setControls=function(e){Object(n.o)(e)||(e=!S.get("controls")),S.set("controls",e),B.controls=e},this.addCues=function(e){this.setCues(S.get("cues").concat(e))},this.setCues=function(e){S.set("cues",e)},this.updatePlaylist=function(e,t){try{var i=Object(c.b)(e,S,t);Object(c.e)(i);var o=Object(n.h)({},t);delete o.playlist,S.set("feedData",o),S.set("playlist",i)}catch(e){return Promise.reject(e)}return this.setItemIndex(S.get("item"))},this.setPlaylistItem=function(e,t){(t=Object(c.d)(S,new u.a(t),t.feedData||{}))&&(S.get("playlist")[e]=t,e===S.get("item")&&"idle"===S.get("state")&&this.setItemIndex(e))},this.playerDestroy=function(){this.off(),this.stop(),Object(a.b)(this,this.originalContainer),v&&v.destroy(),S&&S.destroy(),de&&de.destroy(),y&&y.destroy(),B&&B.destroy(),this.instreamDestroy()},this.isBeforePlay=this.checkBeforePlay,this.createInstream=function(){return this.instreamDestroy(),this._instreamAdapter=new ce(this,S,v,b),this._instreamAdapter},this.instreamDestroy=function(){C._instreamAdapter&&(C._instreamAdapter.destroy(),C._instreamAdapter=null)};var de=new l.a(this,["play","pause","setCurrentAudioTrack","setCurrentCaptions","setCurrentQuality","setFullscreen"],(function(){return!O._model.get("itemReady")||P}));de.queue.push.apply(de.queue,h),v.setup()},get:function(e){if(e in y.a){var t=this._model.get("mediaModel");return t?t.get(e):y.a[e]}return this._model.get(e)},getContainer:function(){return this.currentContainer||this.originalContainer},getMute:function(){return this._model.getMute()},triggerError:function(e){var t=this._model;e.message=t.get("localization").errors[e.key],delete e.key,t.set("errorEvent",e),t.set("state",d.lb),t.once("change:state",(function(){this.set("errorEvent",void 0)}),t),this.trigger(d.w,e)}});t.default=Pt},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,i){"use strict";i.d(t,"a",(function(){return o}));var n=i(2);function o(e){var t=[],i=(e=Object(n.i)(e)).split("\r\n\r\n");1===i.length&&(i=e.split("\n\n"));for(var o=0;o0&&(o=0),i.length>o+1&&i[o+1]){var a=i[o],r=a.indexOf(" --\x3e ");r>0&&(t.begin=Object(n.g)(a.substr(0,r)),t.end=Object(n.g)(a.substr(r+5)),t.text=i.slice(o+1).join("\r\n"))}return t}},function(e,t,i){"use strict";i.d(t,"a",(function(){return o})),i.d(t,"b",(function(){return a}));var n=i(5);function o(e){var t=-1;return e>=1280?t=7:e>=960?t=6:e>=800?t=5:e>=640?t=4:e>=540?t=3:e>=420?t=2:e>=320?t=1:e>=250&&(t=0),t}function a(e,t){var i="jw-breakpoint-"+t;Object(n.p)(e,/jw-breakpoint--?\d+/,i)}},function(e,t,i){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var i=function(e,t){var i=e[1]||"",n=e[3];if(!n)return i;if(t&&"function"==typeof btoa){var o=(r=n,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */"),a=n.sources.map((function(e){return"/*# sourceURL="+n.sourceRoot+e+" */"}));return[i].concat(a).concat([o]).join("\n")}var r;return[i].join("\n")}(t,e);return t[2]?"@media "+t[2]+"{"+i+"}":i})).join("")},t.i=function(e,i){"string"==typeof e&&(e=[[null,e,""]]);for(var n={},o=0;o1&&(i+=" ["+t+"]")),{label:i,unknownCount:t}}i.d(t,"a",(function(){return n})),i.d(t,"b",(function(){return o}))},function(e,t,i){"use strict";function n(e){return new Promise((function(t,i){if(e.paused)return i(o("NotAllowedError",0,"play() failed."));var n=function(){e.removeEventListener("play",a),e.removeEventListener("playing",r),e.removeEventListener("pause",r),e.removeEventListener("abort",r),e.removeEventListener("error",r)},a=function(){e.addEventListener("playing",r),e.addEventListener("abort",r),e.addEventListener("error",r),e.addEventListener("pause",r)},r=function(e){if(n(),"playing"===e.type)t();else{var a='The play() request was interrupted by a "'.concat(e.type,'" event.');"error"===e.type?i(o("NotSupportedError",9,a)):i(o("AbortError",20,a))}};e.addEventListener("play",a)}))}function o(e,t,i){var n=new Error(i);return n.name=e,n.code=t,n}i.d(t,"a",(function(){return n}))},function(e,t,i){"use strict";function n(e,t){return e!==1/0&&Math.abs(e)>=Math.max(a(t),0)}function o(e,t){var i="VOD";return e===1/0?i="LIVE":e<0&&(i=n(e,a(t))?"DVR":"LIVE"),i}function a(e){return void 0===e?120:Math.max(e,0)}i.d(t,"a",(function(){return n})),i.d(t,"b",(function(){return o}))},function(e,t,i){"use strict";var n=i(64),o=i(16),a=i(22),r=i(4),l=i(57),s=i(2),c=i(1);function u(e){throw new c.n(null,e)}function d(e,t,n){e.xhr=Object(a.a)(e.file,(function(a){!function(e,t,n,a){var d,p,f=e.responseXML?e.responseXML.firstChild:null;if(f)for("xml"===Object(r.b)(f)&&(f=f.nextSibling);f.nodeType===f.COMMENT_NODE;)f=f.nextSibling;try{if(f&&"tt"===Object(r.b)(f))d=function(e){e||u(306007);var t=[],i=e.getElementsByTagName("p"),n=30,o=e.getElementsByTagName("tt");if(o&&o[0]){var a=parseFloat(o[0].getAttribute("ttp:frameRate"));isNaN(a)||(n=a)}i||u(306005),i.length||(i=e.getElementsByTagName("tt:p")).length||(i=e.getElementsByTagName("tts:p"));for(var r=0;r\s+<").replace(/(<\/?)tts?:/g,"$1").replace(//g,"\r\n");if(f){var h=l.getAttribute("begin"),j=l.getAttribute("dur"),g=l.getAttribute("end"),b={begin:Object(s.g)(h,n),text:f};g?b.end=Object(s.g)(g,n):j&&(b.end=b.begin+Object(s.g)(j,n)),t.push(b)}}return t.length||u(306005),t}(e.responseXML),p=w(d),delete t.xhr,n(p);else{var h=e.responseText;h.indexOf("WEBVTT")>=0?i.e(10).then(function(e){return i(92).default}.bind(null,i)).catch(Object(o.c)(301131)).then((function(e){var i=new e(window);p=[],i.oncue=function(e){p.push(e)},i.onflush=function(){delete t.xhr,n(p)},i.parse(h)})).catch((function(e){delete t.xhr,a(Object(c.v)(null,c.b,e))})):(d=Object(l.a)(h),p=w(d),delete t.xhr,n(p))}}catch(e){delete t.xhr,a(Object(c.v)(null,c.b,e))}}(a,e,t,n)}),(function(e,t,i,o){n(Object(c.u)(o,c.b))}))}function p(e){e&&e.forEach((function(e){var t=e.xhr;t&&(t.onload=null,t.onreadystatechange=null,t.onerror=null,"abort"in t&&t.abort()),delete e.xhr}))}function w(e){return e.map((function(e){return new n.a(e.begin,e.end,e.text)}))}i.d(t,"c",(function(){return d})),i.d(t,"a",(function(){return p})),i.d(t,"b",(function(){return w}))},function(e,t,i){"use strict";var n=window.VTTCue;function o(e){if("string"!=typeof e)return!1;return!!{start:!0,middle:!0,end:!0,left:!0,right:!0}[e.toLowerCase()]&&e.toLowerCase()}if(!n){(n=function(e,t,i){var n=this;n.hasBeenReset=!1;var a="",r=!1,l=e,s=t,c=i,u=null,d="",p=!0,w="auto",f="start",h="auto",j=100,g="middle";Object.defineProperty(n,"id",{enumerable:!0,get:function(){return a},set:function(e){a=""+e}}),Object.defineProperty(n,"pauseOnExit",{enumerable:!0,get:function(){return r},set:function(e){r=!!e}}),Object.defineProperty(n,"startTime",{enumerable:!0,get:function(){return l},set:function(e){if("number"!=typeof e)throw new TypeError("Start time must be set to a number.");l=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"endTime",{enumerable:!0,get:function(){return s},set:function(e){if("number"!=typeof e)throw new TypeError("End time must be set to a number.");s=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"text",{enumerable:!0,get:function(){return c},set:function(e){c=""+e,this.hasBeenReset=!0}}),Object.defineProperty(n,"region",{enumerable:!0,get:function(){return u},set:function(e){u=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"vertical",{enumerable:!0,get:function(){return d},set:function(e){var t=function(e){return"string"==typeof e&&(!!{"":!0,lr:!0,rl:!0}[e.toLowerCase()]&&e.toLowerCase())}(e);if(!1===t)throw new SyntaxError("An invalid or illegal string was specified.");d=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"snapToLines",{enumerable:!0,get:function(){return p},set:function(e){p=!!e,this.hasBeenReset=!0}}),Object.defineProperty(n,"line",{enumerable:!0,get:function(){return w},set:function(e){if("number"!=typeof e&&"auto"!==e)throw new SyntaxError("An invalid number or illegal string was specified.");w=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"lineAlign",{enumerable:!0,get:function(){return f},set:function(e){var t=o(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");f=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"position",{enumerable:!0,get:function(){return h},set:function(e){if(e<0||e>100)throw new Error("Position must be between 0 and 100.");h=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"size",{enumerable:!0,get:function(){return j},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");j=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"align",{enumerable:!0,get:function(){return g},set:function(e){var t=o(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");g=t,this.hasBeenReset=!0}}),n.displayState=void 0}).prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)}}t.a=n},function(e,t,i){var n=i(66);"string"==typeof n&&(n=[["all-players",n,""]]),i(35).style(n,"all-players"),n.locals&&(e.exports=n.locals)},function(e,t,i){(e.exports=i(59)(!1)).push([e.i,'.jw-reset{text-align:left;direction:ltr}.jw-reset-text,.jw-reset{color:inherit;background-color:transparent;padding:0;margin:0;float:none;font-family:Arial,Helvetica,sans-serif;font-size:1em;line-height:1em;list-style:none;text-transform:none;vertical-align:baseline;border:0;font-variant:inherit;font-stretch:inherit;-webkit-tap-highlight-color:rgba(255,255,255,0)}body .jw-error,body .jwplayer.jw-state-error{height:100%;width:100%}.jw-title{position:absolute;top:0}.jw-background-color{background:rgba(0,0,0,0.4)}.jw-text{color:rgba(255,255,255,0.8)}.jw-knob{color:rgba(255,255,255,0.8);background-color:#fff}.jw-button-color{color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):focus,:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):hover{color:#fff}.jw-toggle{color:#fff}.jw-toggle.jw-off{color:rgba(255,255,255,0.8)}.jw-toggle.jw-off:focus{color:#fff}.jw-toggle:focus{outline:none}:not(.jw-flag-touch) .jw-toggle.jw-off:hover{color:#fff}.jw-rail{background:rgba(255,255,255,0.3)}.jw-buffer{background:rgba(255,255,255,0.3)}.jw-progress{background:#f2f2f2}.jw-time-tip,.jw-volume-tip{border:0}.jw-slider-volume.jw-volume-tip.jw-background-color.jw-slider-vertical{background:none}.jw-skip{padding:.5em;outline:none}.jw-skip .jw-skiptext,.jw-skip .jw-skip-icon{color:rgba(255,255,255,0.8)}.jw-skip.jw-skippable:hover .jw-skip-icon,.jw-skip.jw-skippable:focus .jw-skip-icon{color:#fff}.jw-icon-cast google-cast-launcher{--connected-color:#fff;--disconnected-color:rgba(255,255,255,0.8)}.jw-icon-cast google-cast-launcher:focus{outline:none}.jw-icon-cast google-cast-launcher.jw-off{--connected-color:rgba(255,255,255,0.8)}.jw-icon-cast:focus google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-icon-cast:hover google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-nextup-container{bottom:2.5em;padding:5px .5em}.jw-nextup{border-radius:0}.jw-color-active{color:#fff;stroke:#fff;border-color:#fff}:not(.jw-flag-touch) .jw-color-active-hover:hover,:not(.jw-flag-touch) .jw-color-active-hover:focus{color:#fff;stroke:#fff;border-color:#fff}.jw-color-inactive{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-color-inactive-hover:hover{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}.jw-option{color:rgba(255,255,255,0.8)}.jw-option.jw-active-option{color:#fff;background-color:rgba(255,255,255,0.1)}:not(.jw-flag-touch) .jw-option:hover{color:#fff}.jwplayer{width:100%;font-size:16px;position:relative;display:block;min-height:0;overflow:hidden;box-sizing:border-box;font-family:Arial,Helvetica,sans-serif;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.jwplayer *{box-sizing:inherit}.jwplayer.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jwplayer.jw-flag-aspect-mode{height:auto !important}.jwplayer.jw-flag-aspect-mode .jw-aspect{display:block}.jwplayer .jw-aspect{display:none}.jwplayer .jw-swf{outline:none}.jw-media,.jw-preview{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}.jw-media{overflow:hidden;cursor:pointer}.jw-plugin{position:absolute;bottom:66px}.jw-breakpoint-7 .jw-plugin{bottom:132px}.jw-plugin .jw-banner{max-width:100%;opacity:0;cursor:pointer;position:absolute;margin:auto auto 0;left:0;right:0;bottom:0;display:block}.jw-preview,.jw-captions,.jw-title{pointer-events:none}.jw-media,.jw-logo{pointer-events:all}.jw-wrapper{background-color:#000;position:absolute;top:0;left:0;right:0;bottom:0}.jw-hidden-accessibility{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.jw-contract-trigger::before{content:"";overflow:hidden;width:200%;height:200%;display:block;position:absolute;top:0;left:0}.jwplayer .jw-media video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:auto;background:transparent}.jwplayer .jw-media video::-webkit-media-controls-start-playback-button{display:none}.jwplayer.jw-stretch-uniform .jw-media video{object-fit:contain}.jwplayer.jw-stretch-none .jw-media video{object-fit:none}.jwplayer.jw-stretch-fill .jw-media video{object-fit:cover}.jwplayer.jw-stretch-exactfit .jw-media video{object-fit:fill}.jw-preview{position:absolute;display:none;opacity:1;visibility:visible;width:100%;height:100%;background:#000 no-repeat 50% 50%}.jwplayer .jw-preview,.jw-error .jw-preview{background-size:contain}.jw-stretch-none .jw-preview{background-size:auto auto}.jw-stretch-fill .jw-preview{background-size:cover}.jw-stretch-exactfit .jw-preview{background-size:100% 100%}.jw-title{display:none;padding-top:20px;width:100%;z-index:1}.jw-title-primary,.jw-title-secondary{color:#fff;padding-left:20px;padding-right:20px;padding-bottom:.5em;overflow:hidden;text-overflow:ellipsis;direction:unset;white-space:nowrap;width:100%}.jw-title-primary{font-size:1.625em}.jw-breakpoint-2 .jw-title-primary,.jw-breakpoint-3 .jw-title-primary{font-size:1.5em}.jw-flag-small-player .jw-title-primary{font-size:1.25em}.jw-flag-small-player .jw-title-secondary,.jw-title-secondary:empty{display:none}.jw-captions{position:absolute;width:100%;height:100%;text-align:center;display:none;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-decoration:none;pointer-events:none;overflow:hidden;top:0}.jw-captions.jw-captions-enabled{display:block}.jw-captions-window{display:none;padding:.25em;border-radius:.25em}.jw-captions-window.jw-captions-window-active{display:inline-block}.jw-captions-text{display:inline-block;color:#fff;background-color:#000;word-wrap:normal;word-break:normal;white-space:pre-line;font-style:normal;font-weight:normal;text-align:center;text-decoration:none}.jw-text-track-display{font-size:inherit;line-height:1.5}.jw-text-track-cue{background-color:rgba(0,0,0,0.5);color:#fff;padding:.1em .3em}.jwplayer video::-webkit-media-controls{display:none;justify-content:flex-start}.jwplayer video::-webkit-media-text-track-display{min-width:-webkit-min-content}.jwplayer video::cue{background-color:rgba(0,0,0,0.5)}.jwplayer video::-webkit-media-controls-panel-container{display:none}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing) .jw-captions,.jwplayer.jw-flag-media-audio.jw-state-playing .jw-captions,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden) .jw-captions{max-height:calc(100% - 60px)}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-flag-media-audio.jw-state-playing:not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container{max-height:calc(100% - 60px)}.jw-logo{position:absolute;margin:20px;cursor:pointer;pointer-events:all;background-repeat:no-repeat;background-size:contain;top:auto;right:auto;left:auto;bottom:auto;outline:none}.jw-logo.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-flag-audio-player .jw-logo{display:none}.jw-logo-top-right{top:0;right:0}.jw-logo-top-left{top:0;left:0}.jw-logo-bottom-left{left:0}.jw-logo-bottom-right{right:0}.jw-logo-bottom-left,.jw-logo-bottom-right{bottom:44px;transition:bottom 150ms cubic-bezier(0, .25, .25, 1)}.jw-state-idle .jw-logo{z-index:1}.jw-state-setup .jw-wrapper{background-color:inherit}.jw-state-setup .jw-logo,.jw-state-setup .jw-controls,.jw-state-setup .jw-controls-backdrop{visibility:hidden}span.jw-break{display:block}body .jw-error,body .jwplayer.jw-state-error{background-color:#333;color:#fff;font-size:16px;display:table;opacity:1;position:relative}body .jw-error .jw-display,body .jwplayer.jw-state-error .jw-display{display:none}body .jw-error .jw-media,body .jwplayer.jw-state-error .jw-media{cursor:default}body .jw-error .jw-preview,body .jwplayer.jw-state-error .jw-preview{background-color:#333}body .jw-error .jw-error-msg,body .jwplayer.jw-state-error .jw-error-msg{background-color:#000;border-radius:2px;display:flex;flex-direction:row;align-items:stretch;padding:20px}body .jw-error .jw-error-msg .jw-icon,body .jwplayer.jw-state-error .jw-error-msg .jw-icon{height:30px;width:30px;margin-right:20px;flex:0 0 auto;align-self:center}body .jw-error .jw-error-msg .jw-icon:empty,body .jwplayer.jw-state-error .jw-error-msg .jw-icon:empty{display:none}body .jw-error .jw-error-msg .jw-info-container,body .jwplayer.jw-state-error .jw-error-msg .jw-info-container{margin:0;padding:0}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg{flex-direction:column}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text{text-align:center}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon{flex:.5 0 auto;margin-right:0;margin-bottom:20px}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break{display:inline}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break:before{content:" "}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg{height:100%;width:100%;top:0;position:absolute;left:0;background:#000;-webkit-transform:none;transform:none;padding:4px 16px;z-index:1}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg.jw-info-overlay{max-width:none;max-height:none}body .jwplayer.jw-state-error .jw-title,.jw-state-idle .jw-title,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-title{display:block}body .jwplayer.jw-state-error .jw-preview,.jw-state-idle .jw-preview,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-preview{display:block}.jw-state-idle .jw-captions,.jwplayer.jw-state-complete .jw-captions,body .jwplayer.jw-state-error .jw-captions{display:none}.jw-state-idle video::-webkit-media-text-track-container,.jwplayer.jw-state-complete video::-webkit-media-text-track-container,body .jwplayer.jw-state-error video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-fullscreen{width:100% !important;height:100% !important;top:0;right:0;bottom:0;left:0;z-index:1000;margin:0;position:fixed}body .jwplayer.jw-flag-flash-blocked .jw-title{display:block}.jwplayer.jw-flag-controls-hidden .jw-media{cursor:default}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:45px}.jw-flag-floating{background-size:cover;background-color:#000}.jw-flag-floating .jw-wrapper{position:fixed;z-index:2147483647;-webkit-animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;top:auto;bottom:1rem;left:auto;right:1rem;max-width:400px;max-height:400px;margin:0 auto}@media screen and (max-width:480px){.jw-flag-floating .jw-wrapper{width:100%;left:0;right:0}}.jw-flag-floating .jw-wrapper .jw-media{touch-action:none}@media screen and (max-device-width:480px) and (orientation:portrait){.jw-flag-touch.jw-flag-floating .jw-wrapper{-webkit-animation:none;animation:none;top:62px;bottom:auto;left:0;right:0;max-width:none;max-height:none}}.jw-flag-floating .jw-float-icon{pointer-events:all;cursor:pointer;display:none}.jw-flag-floating .jw-float-icon .jw-svg-icon{-webkit-filter:drop-shadow(0 0 1px #000);filter:drop-shadow(0 0 1px #000)}.jw-flag-floating.jw-floating-dismissible .jw-dismiss-icon{display:none}.jw-flag-floating.jw-floating-dismissible.jw-flag-ads .jw-float-icon{display:flex}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-logo,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-logo{display:none}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-float-icon,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-float-icon{display:flex}.jw-float-icon{display:none;position:absolute;top:3px;right:5px;align-items:center;justify-content:center}@-webkit-keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.jw-flag-top{margin-top:2em;overflow:visible}.jw-top{height:2em;line-height:2;pointer-events:none;text-align:center;opacity:.8;position:absolute;top:-2em;width:100%}.jw-top .jw-icon{cursor:pointer;pointer-events:all;height:auto;width:auto}.jw-top .jw-text{color:#555}',""])},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t,i){var n=i(91);"string"==typeof n&&(n=[["all-players",n,""]]),i(35).style(n,"all-players"),n.locals&&(e.exports=n.locals)},function(e,t,i){(e.exports=i(59)(!1)).push([e.i,'.jw-overlays,.jw-controls,.jw-controls-backdrop,.jw-flag-small-player .jw-settings-menu,.jw-settings-submenu{height:100%;width:100%}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-settings-menu .jw-icon.jw-button-color::after{position:absolute;right:0}.jw-overlays,.jw-controls,.jw-controls-backdrop,.jw-settings-item-active::before{top:0;position:absolute;left:0}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-settings-menu .jw-icon.jw-button-color::after{position:absolute;bottom:0;left:0}.jw-nextup-close{position:absolute;top:0;right:0}.jw-overlays,.jw-controls,.jw-flag-small-player .jw-settings-menu{position:absolute;bottom:0;right:0}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-time-tip::after,.jw-settings-menu .jw-icon.jw-button-color::after,.jw-text-live::before,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{content:"";display:block}.jw-svg-icon{height:24px;width:24px;fill:currentColor;pointer-events:none}.jw-icon{height:44px;width:44px;background-color:transparent;outline:none}.jw-icon.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-icon-airplay .jw-svg-icon-airplay-off{display:none}.jw-off.jw-icon-airplay .jw-svg-icon-airplay-off{display:block}.jw-icon-airplay .jw-svg-icon-airplay-on{display:block}.jw-off.jw-icon-airplay .jw-svg-icon-airplay-on{display:none}.jw-icon-cc .jw-svg-icon-cc-off{display:none}.jw-off.jw-icon-cc .jw-svg-icon-cc-off{display:block}.jw-icon-cc .jw-svg-icon-cc-on{display:block}.jw-off.jw-icon-cc .jw-svg-icon-cc-on{display:none}.jw-icon-fullscreen .jw-svg-icon-fullscreen-off{display:none}.jw-off.jw-icon-fullscreen .jw-svg-icon-fullscreen-off{display:block}.jw-icon-fullscreen .jw-svg-icon-fullscreen-on{display:block}.jw-off.jw-icon-fullscreen .jw-svg-icon-fullscreen-on{display:none}.jw-icon-volume .jw-svg-icon-volume-0{display:none}.jw-off.jw-icon-volume .jw-svg-icon-volume-0{display:block}.jw-icon-volume .jw-svg-icon-volume-100{display:none}.jw-full.jw-icon-volume .jw-svg-icon-volume-100{display:block}.jw-icon-volume .jw-svg-icon-volume-50{display:block}.jw-off.jw-icon-volume .jw-svg-icon-volume-50,.jw-full.jw-icon-volume .jw-svg-icon-volume-50{display:none}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon[aria-checked="true"]::after,.jw-settings-open .jw-icon-settings::after,.jw-icon-volume.jw-open::after{opacity:1}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-cc,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-settings,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-audio-tracks,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-hd,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-settings-sharing,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-fullscreen,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player).jw-flag-cast-available .jw-icon-airplay,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player).jw-flag-cast-available .jw-icon-cast{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-volume,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-text-live{bottom:6px}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-volume::after{display:none}.jw-overlays,.jw-controls{pointer-events:none}.jw-controls-backdrop{display:block;background:linear-gradient(to bottom, transparent, rgba(0,0,0,0.4) 77%, rgba(0,0,0,0.4) 100%) 100% 100% / 100% 240px no-repeat transparent;transition:opacity 250ms cubic-bezier(0, .25, .25, 1),background-size 250ms cubic-bezier(0, .25, .25, 1);pointer-events:none}.jw-overlays{cursor:auto}.jw-controls{overflow:hidden}.jw-flag-small-player .jw-controls{text-align:center}.jw-text{height:1em;font-family:Arial,Helvetica,sans-serif;font-size:.75em;font-style:normal;font-weight:normal;color:#fff;text-align:center;font-variant:normal;font-stretch:normal}.jw-controlbar,.jw-skip,.jw-display-icon-container .jw-icon,.jw-nextup-container,.jw-autostart-mute,.jw-overlays .jw-plugin{pointer-events:all}.jwplayer .jw-display-icon-container,.jw-error .jw-display-icon-container{width:auto;height:auto;box-sizing:content-box}.jw-display{display:table;height:100%;padding:57px 0;position:relative;width:100%}.jw-flag-dragging .jw-display{display:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-display-container{display:table-cell;height:100%;text-align:center;vertical-align:middle}.jw-display-controls{display:inline-block}.jwplayer .jw-display-icon-container{float:left}.jw-display-icon-container{display:inline-block;padding:5.5px;margin:0 22px}.jw-display-icon-container .jw-icon{height:75px;width:75px;cursor:pointer;display:flex;justify-content:center;align-items:center}.jw-display-icon-container .jw-icon .jw-svg-icon{height:33px;width:33px;padding:0;position:relative}.jw-display-icon-container .jw-icon .jw-svg-icon-rewind{padding:.2em .05em}.jw-breakpoint--1 .jw-nextup-container{display:none}.jw-breakpoint-0 .jw-display-icon-next,.jw-breakpoint--1 .jw-display-icon-next,.jw-breakpoint-0 .jw-display-icon-rewind,.jw-breakpoint--1 .jw-display-icon-rewind{display:none}.jw-breakpoint-0 .jw-display .jw-icon,.jw-breakpoint--1 .jw-display .jw-icon,.jw-breakpoint-0 .jw-display .jw-svg-icon,.jw-breakpoint--1 .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px}.jw-breakpoint-0 .jw-display .jw-icon:before,.jw-breakpoint--1 .jw-display .jw-icon:before,.jw-breakpoint-0 .jw-display .jw-svg-icon:before,.jw-breakpoint--1 .jw-display .jw-svg-icon:before{width:22px;height:22px}.jw-breakpoint-1 .jw-display .jw-icon,.jw-breakpoint-1 .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px}.jw-breakpoint-1 .jw-display .jw-icon:before,.jw-breakpoint-1 .jw-display .jw-svg-icon:before{width:22px;height:22px}.jw-breakpoint-1 .jw-display .jw-icon.jw-icon-rewind:before{width:33px;height:33px}.jw-breakpoint-2 .jw-display .jw-icon,.jw-breakpoint-3 .jw-display .jw-icon,.jw-breakpoint-2 .jw-display .jw-svg-icon,.jw-breakpoint-3 .jw-display .jw-svg-icon{width:77px;height:77px;line-height:77px}.jw-breakpoint-2 .jw-display .jw-icon:before,.jw-breakpoint-3 .jw-display .jw-icon:before,.jw-breakpoint-2 .jw-display .jw-svg-icon:before,.jw-breakpoint-3 .jw-display .jw-svg-icon:before{width:38.5px;height:38.5px}.jw-breakpoint-4 .jw-display .jw-icon,.jw-breakpoint-5 .jw-display .jw-icon,.jw-breakpoint-6 .jw-display .jw-icon,.jw-breakpoint-7 .jw-display .jw-icon,.jw-breakpoint-4 .jw-display .jw-svg-icon,.jw-breakpoint-5 .jw-display .jw-svg-icon,.jw-breakpoint-6 .jw-display .jw-svg-icon,.jw-breakpoint-7 .jw-display .jw-svg-icon{width:88px;height:88px;line-height:88px}.jw-breakpoint-4 .jw-display .jw-icon:before,.jw-breakpoint-5 .jw-display .jw-icon:before,.jw-breakpoint-6 .jw-display .jw-icon:before,.jw-breakpoint-7 .jw-display .jw-icon:before,.jw-breakpoint-4 .jw-display .jw-svg-icon:before,.jw-breakpoint-5 .jw-display .jw-svg-icon:before,.jw-breakpoint-6 .jw-display .jw-svg-icon:before,.jw-breakpoint-7 .jw-display .jw-svg-icon:before{width:44px;height:44px}.jw-controlbar{display:flex;flex-flow:row wrap;align-items:center;justify-content:center;position:absolute;left:0;bottom:0;width:100%;border:none;border-radius:0;background-size:auto;box-shadow:none;max-height:72px;transition:250ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s}.jw-breakpoint-7 .jw-controlbar{max-height:140px}.jw-breakpoint-7 .jw-controlbar .jw-button-container{padding:0 48px 20px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-tooltip{margin-bottom:-7px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume .jw-overlay{padding-bottom:40%}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-text{font-size:1em}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-text.jw-text-elapsed{justify-content:flex-end}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-inline,.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume{height:60px;width:60px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-inline .jw-svg-icon,.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-controlbar .jw-slider-time{padding:0 60px;height:34px}.jw-breakpoint-7 .jw-controlbar .jw-slider-time .jw-slider-container{height:10px}.jw-controlbar .jw-button-image{background:no-repeat 50% 50%;background-size:contain;max-height:24px}.jw-controlbar .jw-spacer{flex:1 1 auto;align-self:stretch}.jw-controlbar .jw-icon.jw-button-color:hover{color:#fff}.jw-button-container{display:flex;flex-flow:row nowrap;flex:1 1 auto;align-items:center;justify-content:center;width:100%;padding:0 12px}.jw-slider-horizontal{background-color:transparent}.jw-icon-inline{position:relative}.jw-icon-inline,.jw-icon-tooltip{height:44px;width:44px;align-items:center;display:flex;justify-content:center}.jw-icon-inline:not(.jw-text),.jw-icon-tooltip,.jw-slider-horizontal{cursor:pointer}.jw-text-elapsed,.jw-text-duration{justify-content:flex-start;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.jw-icon-tooltip{position:relative}.jw-knob:hover,.jw-icon-inline:hover,.jw-icon-tooltip:hover,.jw-icon-display:hover,.jw-option:before:hover{color:#fff}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{pointer-events:none}.jw-icon-cast{display:none;margin:0;padding:0}.jw-icon-cast google-cast-launcher{background-color:transparent;border:none;padding:0;width:24px;height:24px;cursor:pointer}.jw-icon-inline.jw-icon-volume{display:none}.jwplayer .jw-text-countdown{display:none}.jw-flag-small-player .jw-display{padding-top:0;padding-bottom:0}.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-rewind,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-next,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-playback{display:none}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop{opacity:0}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-countdown{display:flex}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-duration,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-duration{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-text-countdown,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-related-btn,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-slider-volume{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-controlbar{flex-direction:column-reverse}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-button-container{height:30px}.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-volume,.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-fullscreen{display:none}.jwplayer:not(.jw-breakpoint-0) .jw-text-duration:before,.jwplayer:not(.jw-breakpoint--1) .jw-text-duration:before{content:"/";padding-right:1ch;padding-left:1ch}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar{will-change:transform}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar .jw-text{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.jw-slider-container{display:flex;align-items:center;position:relative;touch-action:none}.jw-rail,.jw-buffer,.jw-progress{position:absolute;cursor:pointer}.jw-progress{background-color:#f2f2f2}.jw-rail{background-color:rgba(255,255,255,0.3)}.jw-buffer{background-color:rgba(255,255,255,0.3)}.jw-knob{height:13px;width:13px;background-color:#fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,0.4);opacity:1;pointer-events:none;position:absolute;-webkit-transform:translate(-50%, -50%) scale(0);transform:translate(-50%, -50%) scale(0);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform}.jw-flag-dragging .jw-slider-time .jw-knob,.jw-icon-volume:active .jw-slider-volume .jw-knob{box-shadow:0 0 26px rgba(0,0,0,0.2),0 0 10px rgba(0,0,0,0.4),0 0 0 6px rgba(255,255,255,0.2)}.jw-slider-horizontal,.jw-slider-vertical{display:flex}.jw-slider-horizontal .jw-slider-container{height:5px;width:100%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue,.jw-slider-horizontal .jw-knob{top:50%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue{-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress{height:5px}.jw-slider-horizontal .jw-rail{width:100%}.jw-slider-vertical{align-items:center;flex-direction:column}.jw-slider-vertical .jw-slider-container{height:88px;width:5px}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress,.jw-slider-vertical .jw-knob{left:50%}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress{height:100%;width:5px;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out;bottom:0}.jw-slider-vertical .jw-knob{-webkit-transform:translate(-50%, 50%);transform:translate(-50%, 50%)}.jw-slider-time.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-slider-time,.jw-flag-audio-player .jw-slider-volume{height:17px;width:100%;align-items:center;background:transparent none;padding:0 12px}.jw-slider-time .jw-cue{background-color:rgba(33,33,33,0.8);cursor:pointer;position:absolute;width:6px}.jw-slider-time,.jw-horizontal-volume-container{z-index:1;outline:none}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail,.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer,.jw-slider-time .jw-progress,.jw-horizontal-volume-container .jw-progress,.jw-slider-time .jw-cue,.jw-horizontal-volume-container .jw-cue{-webkit-backface-visibility:hidden;backface-visibility:hidden;height:100%;-webkit-transform:translate(0, -50%) scale(1, .6);transform:translate(0, -50%) scale(1, .6);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}.jw-slider-time:hover .jw-rail,.jw-horizontal-volume-container:hover .jw-rail,.jw-slider-time:focus .jw-rail,.jw-horizontal-volume-container:focus .jw-rail,.jw-flag-dragging .jw-slider-time .jw-rail,.jw-flag-dragging .jw-horizontal-volume-container .jw-rail,.jw-flag-touch .jw-slider-time .jw-rail,.jw-flag-touch .jw-horizontal-volume-container .jw-rail,.jw-slider-time:hover .jw-buffer,.jw-horizontal-volume-container:hover .jw-buffer,.jw-slider-time:focus .jw-buffer,.jw-horizontal-volume-container:focus .jw-buffer,.jw-flag-dragging .jw-slider-time .jw-buffer,.jw-flag-dragging .jw-horizontal-volume-container .jw-buffer,.jw-flag-touch .jw-slider-time .jw-buffer,.jw-flag-touch .jw-horizontal-volume-container .jw-buffer,.jw-slider-time:hover .jw-progress,.jw-horizontal-volume-container:hover .jw-progress,.jw-slider-time:focus .jw-progress,.jw-horizontal-volume-container:focus .jw-progress,.jw-flag-dragging .jw-slider-time .jw-progress,.jw-flag-dragging .jw-horizontal-volume-container .jw-progress,.jw-flag-touch .jw-slider-time .jw-progress,.jw-flag-touch .jw-horizontal-volume-container .jw-progress,.jw-slider-time:hover .jw-cue,.jw-horizontal-volume-container:hover .jw-cue,.jw-slider-time:focus .jw-cue,.jw-horizontal-volume-container:focus .jw-cue,.jw-flag-dragging .jw-slider-time .jw-cue,.jw-flag-dragging .jw-horizontal-volume-container .jw-cue,.jw-flag-touch .jw-slider-time .jw-cue,.jw-flag-touch .jw-horizontal-volume-container .jw-cue{-webkit-transform:translate(0, -50%) scale(1, 1);transform:translate(0, -50%) scale(1, 1)}.jw-slider-time:hover .jw-knob,.jw-horizontal-volume-container:hover .jw-knob,.jw-slider-time:focus .jw-knob,.jw-horizontal-volume-container:focus .jw-knob{-webkit-transform:translate(-50%, -50%) scale(1);transform:translate(-50%, -50%) scale(1)}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail{background-color:rgba(255,255,255,0.2)}.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer{background-color:rgba(255,255,255,0.4)}.jw-flag-touch .jw-slider-time::before,.jw-flag-touch .jw-horizontal-volume-container::before{height:44px;width:100%;content:"";position:absolute;display:block;bottom:calc(100% - 17px);left:0}.jw-slider-time.jw-tab-focus:focus .jw-rail,.jw-horizontal-volume-container.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time{height:17px;padding:0}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-slider-container{height:10px}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-knob{border-radius:0;border:1px solid rgba(0,0,0,0.75);height:12px;width:10px}.jw-modal{width:284px}.jw-breakpoint-7 .jw-modal,.jw-breakpoint-6 .jw-modal,.jw-breakpoint-5 .jw-modal{height:232px}.jw-breakpoint-4 .jw-modal,.jw-breakpoint-3 .jw-modal{height:192px}.jw-breakpoint-2 .jw-modal,.jw-flag-small-player .jw-modal{bottom:0;right:0;height:100%;width:100%;max-height:none;max-width:none;z-index:2}.jwplayer .jw-rightclick{display:none;position:absolute;white-space:nowrap}.jwplayer .jw-rightclick.jw-open{display:block}.jwplayer .jw-rightclick .jw-rightclick-list{border-radius:1px;list-style:none;margin:0;padding:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item{background-color:rgba(0,0,0,0.8);border-bottom:1px solid #444;margin:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo{color:#fff;display:inline-flex;padding:0 10px 0 0;vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo .jw-svg-icon{height:20px;width:20px}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-link{border:none;color:#fff;display:block;font-size:11px;line-height:1em;padding:15px 23px;text-align:start;text-decoration:none;width:100%}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:last-child{border-bottom:none}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:hover{cursor:pointer}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured{vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link{color:#fff}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link span{color:#fff}.jwplayer .jw-rightclick .jw-info-overlay-item,.jwplayer .jw-rightclick .jw-share-item,.jwplayer .jw-rightclick .jw-shortcuts-item{border:none;background-color:transparent;outline:none;cursor:pointer}.jw-icon-tooltip.jw-open .jw-overlay{opacity:1;pointer-events:auto;transition-delay:0s}.jw-icon-tooltip.jw-open .jw-overlay:focus{outline:none}.jw-icon-tooltip.jw-open .jw-overlay:focus.jw-tab-focus{outline:solid 2px #4d90fe}.jw-slider-time .jw-overlay:before{height:1em;top:auto}.jw-slider-time .jw-icon-tooltip.jw-open .jw-overlay{pointer-events:none}.jw-volume-tip{padding:13px 0 26px}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{height:auto;width:100%;box-shadow:0 0 10px rgba(0,0,0,0.4);color:#fff;display:block;margin:0 0 14px;pointer-events:none;position:relative;z-index:0}.jw-time-tip::after,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{top:100%;position:absolute;left:50%;height:14px;width:14px;border-radius:1px;background-color:currentColor;-webkit-transform-origin:75% 50%;transform-origin:75% 50%;-webkit-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);z-index:-1}.jw-time-tip .jw-text,.jw-controlbar .jw-tooltip .jw-text,.jw-settings-menu .jw-tooltip .jw-text{background-color:#fff;border-radius:1px;color:#000;font-size:10px;height:auto;line-height:1;padding:7px 10px;display:inline-block;min-width:100%;vertical-align:middle}.jw-controlbar .jw-overlay{position:absolute;bottom:100%;left:50%;margin:0;min-height:44px;min-width:44px;opacity:0;pointer-events:none;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s, 150ms;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);width:100%;z-index:1}.jw-controlbar .jw-overlay .jw-contents{position:relative}.jw-controlbar .jw-option{position:relative;white-space:nowrap;cursor:pointer;list-style:none;height:1.5em;font-family:inherit;line-height:1.5em;padding:0 .5em;font-size:.8em;margin:0}.jw-controlbar .jw-option::before{padding-right:.125em}.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{position:absolute;bottom:100%;left:50%;opacity:0;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:100ms 0s cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility, -webkit-transform;transition-property:opacity, transform, visibility;transition-property:opacity, transform, visibility, -webkit-transform;visibility:hidden;white-space:nowrap;width:auto;z-index:1}.jw-controlbar .jw-tooltip.jw-open,.jw-settings-menu .jw-tooltip.jw-open{opacity:1;-webkit-transform:translate(-50%, -10px);transform:translate(-50%, -10px);transition-duration:150ms;transition-delay:500ms,0s,500ms;visibility:visible}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen{left:auto;right:0;-webkit-transform:translate(0, 0);transform:translate(0, 0)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen.jw-open,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen.jw-open{-webkit-transform:translate(0, -10px);transform:translate(0, -10px)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen::after,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen::after{left:auto;right:9px}.jw-tooltip-time{height:auto;width:0;bottom:100%;line-height:normal;padding:0;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jw-tooltip-time .jw-overlay{bottom:0;min-height:0;width:auto}.jw-tooltip{bottom:57px;display:none;position:absolute}.jw-tooltip .jw-text{height:100%;white-space:nowrap;text-overflow:ellipsis;direction:unset;max-width:246px;overflow:hidden}.jw-flag-audio-player .jw-tooltip{display:none}.jw-flag-small-player .jw-time-thumb{display:none}.jwplayer .jw-shortcuts-tooltip{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column;z-index:1}.jwplayer .jw-shortcuts-tooltip.jw-open{display:flex}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-close{flex:0 0 auto;margin:5px 5px 5px auto}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container{display:flex;flex:1 1 auto;flex-flow:column;font-size:12px;margin:0 20px 20px;overflow-y:auto;padding:5px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar{background-color:transparent;width:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-title{font-weight:bold}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list{display:flex;max-width:340px;margin:0 10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-tooltip-descriptions{width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row{display:flex;align-items:center;justify-content:space-between;margin:10px 0;width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-description{margin-right:10px;max-width:70%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-key{background:#fefefe;color:#333;overflow:hidden;padding:7px 10px;text-overflow:ellipsis;white-space:nowrap}.jw-skip{color:rgba(255,255,255,0.8);cursor:default;position:absolute;display:flex;right:.75em;bottom:56px;padding:.5em;border:1px solid #333;background-color:#000;align-items:center;height:2em}.jw-skip.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-skip.jw-skippable{cursor:pointer;padding:.25em .75em}.jw-skip.jw-skippable:hover{cursor:pointer;color:#fff}.jw-skip.jw-skippable .jw-skip-icon{display:inline;height:24px;width:24px;margin:0}.jw-breakpoint-7 .jw-skip{padding:1.35em 1em;bottom:130px}.jw-breakpoint-7 .jw-skip .jw-text{font-size:1em;font-weight:normal}.jw-breakpoint-7 .jw-skip .jw-icon-inline{height:30px;width:30px}.jw-breakpoint-7 .jw-skip .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-skip .jw-skip-icon{display:none;margin-left:-0.75em;padding:0 .5em;pointer-events:none}.jw-skip .jw-skip-icon .jw-svg-icon-next{display:block;padding:0}.jw-skip .jw-text,.jw-skip .jw-skip-icon{vertical-align:middle;font-size:.7em}.jw-skip .jw-text{font-weight:bold}.jw-cast{background-size:cover;display:none;height:100%;position:relative;width:100%}.jw-cast-container{background:linear-gradient(180deg, rgba(25,25,25,0.75), rgba(25,25,25,0.25), rgba(25,25,25,0));left:0;padding:20px 20px 80px;position:absolute;top:0;width:100%}.jw-cast-text{color:#fff;font-size:1.6em}.jw-breakpoint--1 .jw-cast-text,.jw-breakpoint-0 .jw-cast-text{font-size:1.15em}.jw-breakpoint-1 .jw-cast-text,.jw-breakpoint-2 .jw-cast-text,.jw-breakpoint-3 .jw-cast-text{font-size:1.3em}.jw-nextup-container{position:absolute;bottom:66px;left:0;background-color:transparent;cursor:pointer;margin:0 auto;padding:12px;pointer-events:none;right:0;text-align:right;visibility:hidden;width:100%}.jw-settings-open .jw-nextup-container,.jw-info-open .jw-nextup-container{display:none}.jw-breakpoint-7 .jw-nextup-container{padding:60px}.jw-flag-small-player .jw-nextup-container{padding:0 12px 0 0}.jw-flag-small-player .jw-nextup-container .jw-nextup-title,.jw-flag-small-player .jw-nextup-container .jw-nextup-duration,.jw-flag-small-player .jw-nextup-container .jw-nextup-close{display:none}.jw-flag-small-player .jw-nextup-container .jw-nextup-tooltip{height:30px}.jw-flag-small-player .jw-nextup-container .jw-nextup-header{font-size:12px}.jw-flag-small-player .jw-nextup-container .jw-nextup-body{justify-content:center;align-items:center;padding:.75em .3em}.jw-flag-small-player .jw-nextup-container .jw-nextup-thumbnail{width:50%}.jw-flag-small-player .jw-nextup-container .jw-nextup{max-width:65px}.jw-flag-small-player .jw-nextup-container .jw-nextup.jw-nextup-thumbnail-visible{max-width:120px}.jw-nextup{background:#333;border-radius:0;box-shadow:0 0 10px rgba(0,0,0,0.5);color:rgba(255,255,255,0.8);display:inline-block;max-width:280px;overflow:hidden;opacity:0;position:relative;width:64%;pointer-events:all;-webkit-transform:translate(0, -5px);transform:translate(0, -5px);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform;transition-delay:0s}.jw-nextup:hover .jw-nextup-tooltip{color:#fff}.jw-nextup.jw-nextup-thumbnail-visible{max-width:400px}.jw-nextup.jw-nextup-thumbnail-visible .jw-nextup-thumbnail{display:block}.jw-nextup-container-visible{visibility:visible}.jw-nextup-container-visible .jw-nextup{opacity:1;-webkit-transform:translate(0, 0);transform:translate(0, 0);transition-delay:0s, 0s, 150ms}.jw-nextup-tooltip{display:flex;height:80px}.jw-nextup-thumbnail{width:120px;background-position:center;background-size:cover;flex:0 0 auto;display:none}.jw-nextup-body{flex:1 1 auto;overflow:hidden;padding:.75em .875em;display:flex;flex-flow:column wrap;justify-content:space-between}.jw-nextup-header,.jw-nextup-title{font-size:14px;line-height:1.35}.jw-nextup-header{font-weight:bold}.jw-nextup-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.jw-nextup-duration{align-self:flex-end;text-align:right;font-size:12px}.jw-nextup-close{height:24px;width:24px;border:none;color:rgba(255,255,255,0.8);cursor:pointer;margin:6px;visibility:hidden}.jw-nextup-close:hover{color:#fff}.jw-nextup-sticky .jw-nextup-close{visibility:visible}.jw-autostart-mute{position:absolute;bottom:0;right:12px;height:44px;width:44px;background-color:rgba(33,33,33,0.4);padding:5px 4px 5px 6px;display:none}.jwplayer.jw-flag-autostart:not(.jw-flag-media-audio) .jw-nextup{display:none}.jw-settings-menu{position:absolute;bottom:57px;right:12px;align-items:flex-start;background-color:#333;display:none;flex-flow:column nowrap;max-width:284px;pointer-events:auto}.jw-settings-open .jw-settings-menu{display:flex}.jw-breakpoint-7 .jw-settings-menu{bottom:130px;right:60px;max-height:none;max-width:none;height:35%;width:25%}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline{height:60px;width:60px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-tooltip .jw-text{font-size:1em}.jw-breakpoint-6 .jw-settings-menu,.jw-breakpoint-5 .jw-settings-menu{height:232px;width:284px;max-height:232px}.jw-breakpoint-4 .jw-settings-menu,.jw-breakpoint-3 .jw-settings-menu{height:192px;width:284px;max-height:192px}.jw-breakpoint-2 .jw-settings-menu{height:179px;width:284px;max-height:179px}.jw-flag-small-player .jw-settings-menu{max-width:none}.jw-settings-menu .jw-icon.jw-button-color::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon.jw-button-color[aria-checked="true"]::after{opacity:1}.jw-settings-topbar{align-items:center;background-color:rgba(0,0,0,0.4);display:flex;flex:0 0 auto;padding:3px 5px 0;width:100%}.jw-settings-topbar .jw-settings-close{margin-left:auto}.jw-settings-submenu{display:none;flex:1 1 auto;overflow-y:auto;padding:8px 20px 0 5px}.jw-settings-submenu::-webkit-scrollbar{background-color:transparent;width:6px}.jw-settings-submenu::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-settings-submenu.jw-settings-submenu-active{display:block}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item{font-size:1em;padding:11px 0 11px 30px}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-settings-item-active::before{justify-content:flex-end}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-auto-label{font-size:.85em;padding-left:10px}.jw-flag-touch .jw-settings-submenu{overflow-y:scroll;-webkit-overflow-scrolling:touch}.jw-auto-label{font-size:10px;font-weight:initial;opacity:.75;padding-left:5px}.jw-settings-content-item{position:relative;color:rgba(255,255,255,0.8);cursor:pointer;font-size:12px;line-height:1;padding:7px 0 7px 15px;width:100%;text-align:left;outline:none}.jw-settings-content-item:hover{color:#fff}.jw-settings-content-item:focus{font-weight:bold}.jw-flag-small-player .jw-settings-content-item{line-height:1.75}.jw-settings-content-item.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-settings-item-active{font-weight:bold;position:relative}.jw-settings-item-active::before{height:100%;width:1em;align-items:center;content:"\\2022";display:inline-flex;justify-content:center}.jw-breakpoint-2 .jw-settings-open .jw-display-container,.jw-flag-small-player .jw-settings-open .jw-display-container,.jw-flag-touch .jw-settings-open .jw-display-container{display:none}.jw-breakpoint-2 .jw-settings-open.jw-controls,.jw-flag-small-player .jw-settings-open.jw-controls,.jw-flag-touch .jw-settings-open.jw-controls{z-index:1}.jw-flag-small-player .jw-settings-open .jw-controlbar{display:none}.jw-settings-open .jw-icon-settings::after{opacity:1}.jw-settings-open .jw-tooltip-settings{display:none}.jw-sharing-link{cursor:pointer}.jw-shortcuts-container .jw-switch{position:relative;display:inline-block;transition:ease-out .15s;transition-property:opacity, background;border-radius:18px;width:80px;height:20px;padding:10px;background:rgba(80,80,80,0.8);cursor:pointer;font-size:inherit;vertical-align:middle}.jw-shortcuts-container .jw-switch .jw-switch-knob{position:absolute;top:2px;left:1px;transition:ease-out .15s;box-shadow:0 0 10px rgba(0,0,0,0.4);border-radius:13px;width:15px;height:15px;background:#fefefe}.jw-shortcuts-container .jw-switch:before,.jw-shortcuts-container .jw-switch:after{position:absolute;top:3px;transition:inherit;color:#fefefe}.jw-shortcuts-container .jw-switch:before{content:attr(data-jw-switch-disabled);right:8px}.jw-shortcuts-container .jw-switch:after{content:attr(data-jw-switch-enabled);left:8px;opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]{background:#475470}.jw-shortcuts-container .jw-switch[aria-checked="true"]:before{opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]:after{opacity:1}.jw-shortcuts-container .jw-switch[aria-checked="true"] .jw-switch-knob{left:60px}.jw-idle-icon-text{display:none;line-height:1;position:absolute;text-align:center;text-indent:.35em;top:100%;white-space:nowrap;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.jw-idle-label{border-radius:50%;color:#fff;-webkit-filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));font:normal 16px/1 Arial,Helvetica,sans-serif;position:relative;transition:background-color 150ms cubic-bezier(0, .25, .25, 1);transition-property:background-color,-webkit-filter;transition-property:background-color,filter;transition-property:background-color,filter,-webkit-filter;-webkit-font-smoothing:antialiased}.jw-state-idle .jw-icon-display.jw-idle-label .jw-idle-icon-text{display:block}.jw-state-idle .jw-icon-display.jw-idle-label .jw-svg-icon-play{-webkit-transform:scale(.7, .7);transform:scale(.7, .7)}.jw-breakpoint-0.jw-state-idle .jw-icon-display.jw-idle-label,.jw-breakpoint--1.jw-state-idle .jw-icon-display.jw-idle-label{font-size:12px}.jw-info-overlay{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column}.jw-info-overlay .jw-info-close{flex:0 0 auto;margin:5px 5px 5px auto}.jw-info-open .jw-info-overlay{display:flex}.jw-info-container{display:flex;flex:1 1 auto;flex-flow:column;margin:0 20px 20px;overflow-y:auto;padding:5px}.jw-info-container [class*="jw-info"]:not(:first-of-type){color:rgba(255,255,255,0.8);padding-top:10px;font-size:12px}.jw-info-container .jw-info-description{margin-bottom:30px;text-align:start}.jw-info-container .jw-info-description:empty{display:none}.jw-info-container .jw-info-duration{text-align:start}.jw-info-container .jw-info-title{text-align:start;font-size:12px;font-weight:bold}.jw-info-container::-webkit-scrollbar{background-color:transparent;width:6px}.jw-info-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-info-clientid{align-self:flex-end;font-size:12px;color:rgba(255,255,255,0.8);margin:0 20px 20px 44px;text-align:right}.jw-flag-touch .jw-info-open .jw-display-container{display:none}@supports ((-webkit-filter: drop-shadow(0 0 3px #000)) or (filter: drop-shadow(0 0 3px #000))){.jwplayer.jw-ab-drop-shadow .jw-controls .jw-svg-icon,.jwplayer.jw-ab-drop-shadow .jw-controls .jw-icon.jw-text,.jwplayer.jw-ab-drop-shadow .jw-slider-container .jw-rail,.jwplayer.jw-ab-drop-shadow .jw-title{text-shadow:none;box-shadow:none;-webkit-filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3));filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3))}.jwplayer.jw-ab-drop-shadow .jw-button-color{opacity:.8;transition-property:color, opacity}.jwplayer.jw-ab-drop-shadow .jw-button-color:not(:hover){color:#fff;opacity:.8}.jwplayer.jw-ab-drop-shadow .jw-button-color:hover{opacity:1}.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0), hsla(0, 0%, 0%, 0.00787) 10.79%, hsla(0, 0%, 0%, 0.02963) 21.99%, hsla(0, 0%, 0%, 0.0625) 33.34%, hsla(0, 0%, 0%, 0.1037) 44.59%, hsla(0, 0%, 0%, 0.15046) 55.48%, hsla(0, 0%, 0%, 0.2) 65.75%, hsla(0, 0%, 0%, 0.24954) 75.14%, hsla(0, 0%, 0%, 0.2963) 83.41%, hsla(0, 0%, 0%, 0.3375) 90.28%, hsla(0, 0%, 0%, 0.37037) 95.51%, hsla(0, 0%, 0%, 0.39213) 98.83%, hsla(0, 0%, 0%, 0.4));mix-blend-mode:multiply;transition-property:opacity}.jw-state-idle.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0.2), hsla(0, 0%, 0%, 0.19606) 1.17%, hsla(0, 0%, 0%, 0.18519) 4.49%, hsla(0, 0%, 0%, 0.16875) 9.72%, hsla(0, 0%, 0%, 0.14815) 16.59%, hsla(0, 0%, 0%, 0.12477) 24.86%, hsla(0, 0%, 0%, 0.1) 34.25%, hsla(0, 0%, 0%, 0.07523) 44.52%, hsla(0, 0%, 0%, 0.05185) 55.41%, hsla(0, 0%, 0%, 0.03125) 66.66%, hsla(0, 0%, 0%, 0.01481) 78.01%, hsla(0, 0%, 0%, 0.00394) 89.21%, hsla(0, 0%, 0%, 0));background-size:100% 7rem;background-position:50% 0}.jwplayer.jw-ab-drop-shadow.jw-state-idle .jw-controls{background-color:transparent}}.jw-video-thumbnail-container{position:relative;overflow:hidden}.jw-video-thumbnail-container:not(.jw-related-shelf-item-image){height:100%;width:100%}.jw-video-thumbnail-container.jw-video-thumbnail-generated{position:absolute;top:0;left:0}.jw-video-thumbnail-container:hover,.jw-related-item-content:hover .jw-video-thumbnail-container,.jw-related-shelf-item:hover .jw-video-thumbnail-container{cursor:pointer}.jw-video-thumbnail-container:hover .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-item-content:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-shelf-item:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail{position:absolute;top:50%;left:50%;bottom:unset;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:100%;height:auto;min-width:100%;min-height:100%;opacity:0;transition:opacity .3s ease;object-fit:cover;background:#000}.jw-related-item-next-up .jw-video-thumbnail-container .jw-video-thumbnail{height:100%;width:auto}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-visible:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-completed{opacity:0}.jw-video-thumbnail-container .jw-video-thumbnail~.jw-svg-icon-play{display:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-shelf-item-aspect{pointer-events:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-item-poster-content{pointer-events:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-state-idle .jw-controls{background:rgba(0,0,0,0.4)}.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay),.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay){display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon:focus{border:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon .jw-svg-icon-buffer{-webkit-animation:jw-spin 2s linear infinite;animation:jw-spin 2s linear infinite;display:block}@-webkit-keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jwplayer.jw-state-buffering .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-pause{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-pause{display:block}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-controls-backdrop{opacity:0}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-logo-bottom-left,.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio):not(.jw-flag-autostart) .jw-logo-bottom-right{bottom:0}.jwplayer .jw-icon-playback .jw-svg-icon-stop{display:none}.jwplayer.jw-state-paused .jw-svg-icon-pause,.jwplayer.jw-state-idle .jw-svg-icon-pause,.jwplayer.jw-state-error .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-svg-icon-pause{display:none}.jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-complete .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-play{display:none}.jwplayer:not(.jw-state-buffering) .jw-svg-icon-buffer{display:none}.jwplayer:not(.jw-state-complete) .jw-svg-icon-replay{display:none}.jwplayer:not(.jw-state-error) .jw-svg-icon-error{display:none}.jwplayer.jw-state-complete .jw-display .jw-icon-display .jw-svg-icon-replay{display:block}.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-state-complete .jw-controls{background:rgba(0,0,0,0.4);height:100%}.jw-state-idle .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-state-idle .jw-display-icon-rewind,.jwplayer.jw-state-buffering .jw-display-icon-rewind,.jwplayer.jw-state-complete .jw-display-icon-rewind,body .jw-error .jw-display-icon-rewind,body .jwplayer.jw-state-error .jw-display-icon-rewind,.jw-state-idle .jw-display-icon-next,.jwplayer.jw-state-buffering .jw-display-icon-next,.jwplayer.jw-state-complete .jw-display-icon-next,body .jw-error .jw-display-icon-next,body .jwplayer.jw-state-error .jw-display-icon-next{display:none}body .jw-error .jw-icon-display,body .jwplayer.jw-state-error .jw-icon-display{cursor:default}body .jw-error .jw-icon-display .jw-svg-icon-error,body .jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-error{display:block}body .jw-error .jw-icon-container{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-preview{display:none}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title{padding-top:4px}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-primary{width:auto;display:inline-block;padding-right:.5ch}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-secondary{width:auto;display:inline-block;padding-left:0}body .jwplayer.jw-state-error .jw-controlbar,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-controlbar{display:none}body .jwplayer.jw-state-error .jw-settings-menu,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-settings-menu{height:100%;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}body .jwplayer.jw-state-error .jw-display,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-display{padding:0}body .jwplayer.jw-state-error .jw-logo-bottom-left,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-left,body .jwplayer.jw-state-error .jw-logo-bottom-right,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-right{bottom:0}.jwplayer.jw-state-playing.jw-flag-user-inactive .jw-display{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-state-playing:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display,.jwplayer.jw-state-paused:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting):not(.jw-flag-play-rejected) .jw-display{display:none}.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-rewind,.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-next{display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-text,.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-flag-casting:not(.jw-flag-audio-player) .jw-cast{display:block}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-display-icon-container{display:none}.jwplayer.jw-flag-casting .jw-icon-hd,.jwplayer.jw-flag-casting .jw-captions,.jwplayer.jw-flag-casting .jw-icon-fullscreen,.jwplayer.jw-flag-casting .jw-icon-audio-tracks{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-volume{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-airplay{color:#fff}.jw-state-playing.jw-flag-casting:not(.jw-flag-audio-player) .jw-display,.jw-state-paused.jw-flag-casting:not(.jw-flag-audio-player) .jw-display{display:table}.jwplayer.jw-flag-cast-available .jw-icon-cast,.jwplayer.jw-flag-cast-available .jw-icon-airplay{display:flex}.jwplayer.jw-flag-cardboard-available .jw-icon-cardboard{display:flex}.jwplayer.jw-flag-live .jw-display-icon-rewind{visibility:hidden}.jwplayer.jw-flag-live .jw-controlbar .jw-text-elapsed,.jwplayer.jw-flag-live .jw-controlbar .jw-text-duration,.jwplayer.jw-flag-live .jw-controlbar .jw-text-countdown,.jwplayer.jw-flag-live .jw-controlbar .jw-slider-time{display:none}.jwplayer.jw-flag-live .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-live .jw-controlbar .jw-overlay:after{display:none}.jwplayer.jw-flag-live .jw-nextup-container{bottom:44px}.jwplayer.jw-flag-live .jw-text-elapsed,.jwplayer.jw-flag-live .jw-text-duration{display:none}.jwplayer.jw-flag-live .jw-text-live{cursor:default}.jwplayer.jw-flag-live .jw-text-live:hover{color:rgba(255,255,255,0.8)}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-stop,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-stop{display:block}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-text-live{height:24px;width:auto;align-items:center;border-radius:1px;color:rgba(255,255,255,0.8);display:flex;font-size:12px;font-weight:bold;margin-right:10px;padding:0 1ch;text-rendering:geometricPrecision;text-transform:uppercase;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:box-shadow,color}.jw-text-live::before{height:8px;width:8px;background-color:currentColor;border-radius:50%;margin-right:6px;opacity:1;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-text-live.jw-dvr-live{box-shadow:inset 0 0 0 2px currentColor}.jw-text-live.jw-dvr-live::before{opacity:.5}.jw-text-live.jw-dvr-live:hover{color:#fff}.jwplayer.jw-flag-controls-hidden .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-controls-hidden:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-controls-hidden .jw-plugin{bottom:.5em}.jwplayer.jw-flag-controls-hidden .jw-nextup-container{bottom:0}.jw-flag-controls-hidden .jw-controlbar,.jw-flag-controls-hidden .jw-display{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-controls-hidden .jw-controls-backdrop{opacity:0}.jw-flag-controls-hidden .jw-logo{visibility:visible}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-plugin{bottom:.5em}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-nextup-container{bottom:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-controls-hidden) .jw-media{cursor:none;-webkit-cursor-visibility:auto-hide}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing.jw-flag-casting .jw-display{display:table}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-ads) .jw-autostart-mute{display:flex}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting .jw-nextup-container{bottom:66px}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting.jw-state-idle .jw-nextup-container{display:none}.jw-flag-media-audio .jw-preview{display:block}.jwplayer.jw-flag-ads .jw-preview,.jwplayer.jw-flag-ads .jw-logo,.jwplayer.jw-flag-ads .jw-captions.jw-captions-enabled,.jwplayer.jw-flag-ads .jw-nextup-container,.jwplayer.jw-flag-ads .jw-text-duration,.jwplayer.jw-flag-ads .jw-text-elapsed{display:none}.jwplayer.jw-flag-ads video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-rewind,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-next,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-display{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player.jw-state-buffering .jw-display-icon-display{display:inline-block}.jwplayer.jw-flag-ads .jw-controlbar{flex-wrap:wrap-reverse}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time{height:auto;padding:0;pointer-events:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-slider-container{height:5px}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-rail,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-knob,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-buffer,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-cue,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-icon-settings{display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-progress{-webkit-transform:none;transform:none;top:auto}.jwplayer.jw-flag-ads .jw-controlbar .jw-tooltip,.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-tooltip:not(.jw-icon-volume),.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-inline:not(.jw-icon-playback):not(.jw-icon-fullscreen):not(.jw-icon-volume){display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-volume-tip{padding:13px 0}.jwplayer.jw-flag-ads .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid) .jw-controls .jw-controlbar,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart .jw-controls .jw-controlbar{display:flex;pointer-events:all;visibility:visible;opacity:1}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-user-inactive .jw-controls-backdrop,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart.jw-flag-user-inactive .jw-controls-backdrop{opacity:1;background-size:100% 60px}.jwplayer.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-ads-vpaid .jw-skip,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-skip{display:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls{background:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls::after{content:none}.jwplayer.jw-flag-ads-hide-controls .jw-controls-backdrop,.jwplayer.jw-flag-ads-hide-controls .jw-controls{display:none !important}.jw-flag-overlay-open-related .jw-controls,.jw-flag-overlay-open-related .jw-title,.jw-flag-overlay-open-related .jw-logo{display:none}.jwplayer.jw-flag-rightclick-open{overflow:visible}.jwplayer.jw-flag-rightclick-open .jw-rightclick{z-index:16777215}body .jwplayer.jw-flag-flash-blocked .jw-controls,body .jwplayer.jw-flag-flash-blocked .jw-overlays,body .jwplayer.jw-flag-flash-blocked .jw-controls-backdrop,body .jwplayer.jw-flag-flash-blocked .jw-preview{display:none}body .jwplayer.jw-flag-flash-blocked .jw-error-msg{top:25%}.jw-flag-touch.jw-breakpoint-7 .jw-captions,.jw-flag-touch.jw-breakpoint-6 .jw-captions,.jw-flag-touch.jw-breakpoint-5 .jw-captions,.jw-flag-touch.jw-breakpoint-4 .jw-captions,.jw-flag-touch.jw-breakpoint-7 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-6 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-5 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-4 .jw-nextup-container{bottom:4.25em}.jw-flag-touch .jw-controlbar .jw-icon-volume{display:flex}.jw-flag-touch .jw-display,.jw-flag-touch .jw-display-container,.jw-flag-touch .jw-display-controls{pointer-events:none}.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-rewind,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-rewind{display:none}.jw-flag-touch.jw-state-paused.jw-flag-dragging .jw-display{display:none}.jw-flag-audio-player{background-color:#000}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:44px}.jw-flag-audio-player:not(.jw-flag-live) .jw-spacer{display:none}.jw-flag-audio-player .jw-preview,.jw-flag-audio-player .jw-display,.jw-flag-audio-player .jw-title,.jw-flag-audio-player .jw-nextup-container{display:none}.jw-flag-audio-player .jw-controlbar{position:relative}.jw-flag-audio-player .jw-controlbar .jw-button-container{padding-right:3px;padding-left:0}.jw-flag-audio-player .jw-controlbar .jw-icon-tooltip,.jw-flag-audio-player .jw-controlbar .jw-icon-inline{display:none}.jw-flag-audio-player .jw-controlbar .jw-icon-volume,.jw-flag-audio-player .jw-controlbar .jw-icon-playback,.jw-flag-audio-player .jw-controlbar .jw-icon-next,.jw-flag-audio-player .jw-controlbar .jw-icon-rewind,.jw-flag-audio-player .jw-controlbar .jw-icon-cast,.jw-flag-audio-player .jw-controlbar .jw-text-live,.jw-flag-audio-player .jw-controlbar .jw-icon-airplay,.jw-flag-audio-player .jw-controlbar .jw-logo-button,.jw-flag-audio-player .jw-controlbar .jw-text-elapsed,.jw-flag-audio-player .jw-controlbar .jw-text-duration{display:flex;flex:0 0 auto}.jw-flag-audio-player .jw-controlbar .jw-text-duration,.jw-flag-audio-player .jw-controlbar .jw-text-countdown{padding-right:10px}.jw-flag-audio-player .jw-controlbar .jw-slider-time{flex:0 1 auto;align-items:center;display:flex;order:1}.jw-flag-audio-player .jw-controlbar .jw-icon-volume{margin-right:0;transition:margin-right 150ms cubic-bezier(0, .25, .25, 1)}.jw-flag-audio-player .jw-controlbar .jw-icon-volume .jw-overlay{display:none}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container{transition:width 300ms cubic-bezier(0, .25, .25, 1);width:0}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open{width:140px}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open .jw-slider-volume{padding-right:24px;transition:opacity 300ms;opacity:1}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open~.jw-slider-time{flex:1 1 auto;width:auto;transition:opacity 300ms, width 300ms}.jw-flag-audio-player .jw-controlbar .jw-slider-volume{opacity:0}.jw-flag-audio-player .jw-controlbar .jw-slider-volume .jw-knob{-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.jw-flag-audio-player .jw-controlbar .jw-slider-volume~.jw-icon-volume{margin-right:140px}.jw-flag-audio-player.jw-breakpoint-1 .jw-horizontal-volume-container.jw-open~.jw-slider-time,.jw-flag-audio-player.jw-breakpoint-2 .jw-horizontal-volume-container.jw-open~.jw-slider-time{opacity:0}.jw-flag-audio-player.jw-flag-small-player .jw-text-elapsed,.jw-flag-audio-player.jw-flag-small-player .jw-text-duration{display:none}.jw-flag-audio-player.jw-flag-ads .jw-slider-time{display:none}.jw-hidden{display:none}',""])}]]); \ No newline at end of file diff --git a/ui/v2.5/public/jwplayer/jwplayer.core.controls.polyfills.html5.js b/ui/v2.5/public/jwplayer/jwplayer.core.controls.polyfills.html5.js new file mode 100644 index 00000000000..c22ccb298b8 --- /dev/null +++ b/ui/v2.5/public/jwplayer/jwplayer.core.controls.polyfills.html5.js @@ -0,0 +1,95 @@ +/*! +JW Player version 8.11.5 +Copyright (c) 2019, JW Player, All Rights Reserved +https://github.com/jwplayer/jwplayer/blob/v8.11.5/README.md + +This source code and its use and distribution is subject to the terms and conditions of the applicable license agreement. +https://www.jwplayer.com/tos/ + +This product includes portions of other software. For the full text of licenses, see below: + +JW Player Third Party Software Notices and/or Additional Terms and Conditions + +************************************************************************************************** +The following software is used under Apache License 2.0 +************************************************************************************************** + +vtt.js v0.13.0 +Copyright (c) 2019 Mozilla (http://mozilla.org) +https://github.com/mozilla/vtt.js/blob/v0.13.0/LICENSE + +* * * + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and +limitations under the License. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under MIT license +************************************************************************************************** + +Underscore.js v1.6.0 +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +https://github.com/jashkenas/underscore/blob/1.6.0/LICENSE + +Backbone backbone.events.js v1.1.2 +Copyright (c) 2010-2014 Jeremy Ashkenas, DocumentCloud +https://github.com/jashkenas/backbone/blob/1.1.2/LICENSE + +Promise Polyfill v7.1.1 +Copyright (c) 2014 Taylor Hakes and Forbes Lindesay +https://github.com/taylorhakes/promise-polyfill/blob/v7.1.1/LICENSE + +can-autoplay.js v3.0.0 +Copyright (c) 2017 video-dev +https://github.com/video-dev/can-autoplay/blob/v3.0.0/LICENSE + +* * * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under W3C license +************************************************************************************************** + +Intersection Observer v0.5.0 +Copyright (c) 2016 Google Inc. (http://google.com) +https://github.com/w3c/IntersectionObserver/blob/v0.5.0/LICENSE.md + +* * * + +W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. + +This work is being provided by the copyright holders under the following license. + +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: + +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. + +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." + +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders. +*/ +(window.webpackJsonpjwplayer=window.webpackJsonpjwplayer||[]).push([[6,1,2,3,4,5,7,9],[,,,,,,,,,,,,,,,,,function(t,e,i){"use strict";i.r(e);var n,o=i(8),a=i(3),r=i(7),s=i(43),l=i(5),c=i(15),u=i(40);function d(t){return n||(n=new DOMParser),Object(l.r)(Object(l.s)(n.parseFromString(t,"image/svg+xml").documentElement))}var p=function(t,e,i,n){var o=document.createElement("div");o.className="jw-icon jw-icon-inline jw-button-color jw-reset "+t,o.setAttribute("role","button"),o.setAttribute("tabindex","0"),i&&o.setAttribute("aria-label",i),o.style.display="none";var a=new u.a(o).on("click tap enter",e||function(){});return n&&Array.prototype.forEach.call(n,(function(t){"string"==typeof t?o.appendChild(d(t)):o.appendChild(t)})),{ui:a,element:function(){return o},toggle:function(t){t?this.show():this.hide()},show:function(){o.style.display=""},hide:function(){o.style.display="none"}}},h=i(0),w=i(67),f=i.n(w),g=i(68),j=i.n(g),b=i(69),m=i.n(b),v=i(70),y=i.n(v),k=i(71),x=i.n(k),T=i(72),O=i.n(T),C=i(73),_=i.n(C),S=i(74),M=i.n(S),E=i(75),I=i.n(E),A=i(76),L=i.n(A),z=i(77),P=i.n(z),R=i(78),B=i.n(R),V=i(79),H=i.n(V),N=i(80),F=i.n(N),q=i(81),D=i.n(q),U=i(82),W=i.n(U),Q=i(83),X=i.n(Q),Y=i(84),K=i.n(Y),J=i(85),Z=i.n(J),G=i(86),$=i.n(G),tt=i(87),et=i.n(tt),it=i(88),nt=i.n(it),ot=i(89),at=i.n(ot),rt=null;function st(t){var e=dt().querySelector(ct(t));if(e)return ut(e);throw new Error("Icon not found "+t)}function lt(t){var e=dt().querySelectorAll(t.split(",").map(ct).join(","));if(!e.length)throw new Error("Icons not found "+t);return Array.prototype.map.call(e,(function(t){return ut(t)}))}function ct(t){return".jw-svg-icon-".concat(t)}function ut(t){return t.cloneNode(!0)}function dt(){return rt||(rt=d(""+f.a+j.a+m.a+y.a+x.a+O.a+_.a+M.a+I.a+L.a+P.a+B.a+H.a+F.a+D.a+W.a+X.a+K.a+Z.a+$.a+et.a+nt.a+at.a+"")),rt}var pt=i(10);function ht(t,e){for(var i=0;i10&&delete wt[e[0]];var i=d(t);wt[t]=i}return wt[t].cloneNode(!0)}(e):((r=document.createElement("div")).className="jw-icon jw-button-image jw-button-color jw-reset",e&&Object(pt.d)(r,{backgroundImage:"url(".concat(e,")")})),s.appendChild(r),new u.a(s).on("click tap enter",n,this),s.addEventListener("mousedown",(function(t){t.preventDefault()})),this.id=o,this.buttonElement=s}var e,i,n;return e=t,(i=[{key:"element",value:function(){return this.buttonElement}},{key:"toggle",value:function(t){t?this.show():this.hide()}},{key:"show",value:function(){this.buttonElement.style.display=""}},{key:"hide",value:function(){this.buttonElement.style.display="none"}}])&&ht(e.prototype,i),n&&ht(e,n),t}(),gt=i(11);function jt(t,e){for(var i=0;i=0&&(e.left-=i,e.right-=i),e},mt=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Object(h.h)(this,r.a),this.className=e+" jw-background-color jw-reset",this.orientation=i}var e,i,n;return e=t,(i=[{key:"setup",value:function(){this.el=Object(l.e)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return''}(this.className,"jw-slider-"+this.orientation)),this.elementRail=this.el.getElementsByClassName("jw-slider-container")[0],this.elementBuffer=this.el.getElementsByClassName("jw-buffer")[0],this.elementProgress=this.el.getElementsByClassName("jw-progress")[0],this.elementThumb=this.el.getElementsByClassName("jw-knob")[0],this.ui=new u.a(this.element(),{preventScrolling:!0}).on("dragStart",this.dragStart,this).on("drag",this.dragMove,this).on("dragEnd",this.dragEnd,this).on("click tap",this.tap,this)}},{key:"dragStart",value:function(){this.trigger("dragStart"),this.railBounds=bt(this.elementRail)}},{key:"dragEnd",value:function(t){this.dragMove(t),this.trigger("dragEnd")}},{key:"dragMove",value:function(t){var e,i,n=this.railBounds=this.railBounds?this.railBounds:bt(this.elementRail);return i="horizontal"===this.orientation?(e=t.pageX)n.right?100:100*Object(s.a)((e-n.left)/n.width,0,1):(e=t.pageY)>=n.bottom?0:e<=n.top?100:100*Object(s.a)((n.height-(e-n.top))/n.height,0,1),this.render(i),this.update(i),!1}},{key:"tap",value:function(t){this.railBounds=bt(this.elementRail),this.dragMove(t)}},{key:"limit",value:function(t){return t}},{key:"update",value:function(t){this.trigger("update",{percentage:t})}},{key:"render",value:function(t){t=Math.max(0,Math.min(t,100)),"horizontal"===this.orientation?(this.elementThumb.style.left=t+"%",this.elementProgress.style.width=t+"%"):(this.elementThumb.style.bottom=t+"%",this.elementProgress.style.height=t+"%")}},{key:"updateBuffer",value:function(t){this.elementBuffer.style.width=t+"%"}},{key:"element",value:function(){return this.el}}])&&jt(e.prototype,i),n&&jt(e,n),t}(),vt=function(t,e){t&&e&&(t.setAttribute("aria-label",e),t.setAttribute("role","button"),t.setAttribute("tabindex","0"))};function yt(t,e){for(var i=0;i0&&Array.prototype.forEach.call(o,(function(t){"string"==typeof t?a.el.appendChild(d(t)):a.el.appendChild(t)}))}var e,i,n;return e=t,(i=[{key:"addContent",value:function(t){this.content&&this.removeContent(),this.content=t,this.tooltip.appendChild(t)}},{key:"removeContent",value:function(){this.content&&(this.tooltip.removeChild(this.content),this.content=null)}},{key:"hasContent",value:function(){return!!this.content}},{key:"element",value:function(){return this.el}},{key:"openTooltip",value:function(t){this.isOpen||(this.trigger("open-"+this.componentType,t,{isOpen:!0}),this.isOpen=!0,Object(l.v)(this.el,this.openClass,this.isOpen))}},{key:"closeTooltip",value:function(t){this.isOpen&&(this.trigger("close-"+this.componentType,t,{isOpen:!1}),this.isOpen=!1,Object(l.v)(this.el,this.openClass,this.isOpen))}},{key:"toggleOpenState",value:function(t){this.isOpen?this.closeTooltip(t):this.openTooltip(t)}}])&&yt(e.prototype,i),n&&yt(e,n),t}(),xt=i(22),Tt=i(57);function Ot(t,e){for(var i=0;i=this.thumbnails.length&&(e=this.thumbnails.length-1);var i=this.thumbnails[e].img;return i.indexOf("://")<0&&(i=this.vttPath?this.vttPath+"/"+i:i),i},loadThumbnail:function(t){var e=this.chooseThumbnail(t),i={margin:"0 auto",backgroundPosition:"0 0"};if(e.indexOf("#xywh")>0)try{var n=/(.+)#xywh=(\d+),(\d+),(\d+),(\d+)/.exec(e);e=n[1],i.backgroundPosition=-1*n[2]+"px "+-1*n[3]+"px",i.width=n[4],this.timeTip.setWidth(+i.width),i.height=n[5]}catch(t){return}else this.individualImage||(this.individualImage=new Image,this.individualImage.onload=Object(h.a)((function(){this.individualImage.onload=null,this.timeTip.image({width:this.individualImage.width,height:this.individualImage.height}),this.timeTip.setWidth(this.individualImage.width)}),this),this.individualImage.src=e);return i.backgroundImage='url("'+e+'")',i},showThumbnail:function(t){this._model.get("containerWidth")<=420||this.thumbnails.length<1||this.timeTip.image(this.loadThumbnail(t))},resetThumbnails:function(){this.timeTip.image({backgroundImage:"",width:0,height:0}),this.thumbnails=[]}};function Et(t,e,i){return(Et="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,i){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rt(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(i):o.value}})(t,e,i||t)}function It(t){return(It="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function At(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Lt(t,e){for(var i=0;i-1&&(n="Live")}var d=this.timeTip;d.update(n),this.textLength!==n.length&&(this.textLength=n.length,d.resetWidth()),this.showThumbnail(u),Object(l.a)(d.el,"jw-open");var p=d.getWidth(),h=a.width/100,w=o-a.width,f=0;p>w&&(f=(p-w)/(200*h));var g=100*Math.min(1-f,Math.max(f,c)).toFixed(3);Object(pt.d)(d.el,{left:g+"%"})}}},{key:"hideTimeTooltip",value:function(){Object(l.o)(this.timeTip.el,"jw-open")}},{key:"updateCues",value:function(t,e){var i=this;this.resetCues(),e&&e.length&&(e.forEach((function(t){i.addCue(t)})),this.drawCues())}},{key:"updateAriaText",value:function(){var t=this._model;if(!t.get("seeking")){var e=t.get("position"),i=t.get("duration"),n=Object(gt.timeFormat)(e);"DVR"!==this.streamType&&(n+=" of ".concat(Object(gt.timeFormat)(i)));var o=this.el;document.activeElement!==o&&(this.timeUpdateKeeper.textContent=n),Object(l.t)(o,"aria-valuenow",e),Object(l.t)(o,"aria-valuetext",n)}}},{key:"reset",value:function(){this.resetThumbnails(),this.timeTip.resetWidth(),this.textLength=0}}]),e}(mt);Object(h.h)(Nt.prototype,_t,Mt);var Ft=Nt;function qt(t,e){for(var i=0;i=75&&!t),Object(l.t)(r,"aria-valuenow",o),Object(l.t)(s,"aria-valuenow",o);var c="Volume ".concat(o,"%");Object(l.t)(r,"aria-valuetext",c),Object(l.t)(s,"aria-valuetext",c),document.activeElement!==r&&document.activeElement!==s&&(this._volumeAnnouncer.textContent=c)}}},{key:"onCastAvailable",value:function(t,e){this.elements.cast.toggle(e)}},{key:"onCastActive",value:function(t,e){this.elements.fullscreen.toggle(!e),this.elements.cast.button&&Object(l.v)(this.elements.cast.button,"jw-off",!e)}},{key:"onElapsed",value:function(t,e){var i,n,o=t.get("duration");if("DVR"===t.get("streamType")){var a=Math.ceil(e),r=this._model.get("dvrSeekLimit");i=n=a>=-r?"":"-"+Object(gt.timeFormat)(-(e+r)),t.set("dvrLive",a>=-r)}else i=Object(gt.timeFormat)(e),n=Object(gt.timeFormat)(o-e);this.elements.elapsed.textContent=i,this.elements.countdown.textContent=n}},{key:"onDuration",value:function(t,e){this.elements.duration.textContent=Object(gt.timeFormat)(Math.abs(e))}},{key:"onAudioMode",value:function(t,e){var i=this.elements.time.element();e?this.elements.buttonContainer.insertBefore(i,this.elements.elapsed):Object(l.m)(this.el,i)}},{key:"element",value:function(){return this.el}},{key:"setAltText",value:function(t,e){this.elements.alt.textContent=e}},{key:"closeMenus",value:function(t){this.menus.forEach((function(e){t&&t.target===e.el||e.closeTooltip(t)}))}},{key:"rewind",value:function(){var t,e=0,i=this._model.get("currentTime");i?t=i-10:(t=this._model.get("position")-10,"DVR"===this._model.get("streamType")&&(e=this._model.get("duration"))),this._api.seek(Math.max(t,e),{reason:"interaction"})}},{key:"onState",value:function(t,e){var i=t.get("localization"),n=i.play;this.setPlayText(n),e===a.pb&&("LIVE"!==t.get("streamType")?(n=i.pause,this.setPlayText(n)):(n=i.stop,this.setPlayText(n))),Object(l.t)(this.elements.play.element(),"aria-label",n)}},{key:"onStreamTypeChange",value:function(t,e){var i="LIVE"===e,n="DVR"===e;this.elements.rewind.toggle(!i),this.elements.live.toggle(i||n),Object(l.t)(this.elements.live.element(),"tabindex",i?"-1":"0"),this.elements.duration.style.display=n?"none":"",this.onDuration(t,t.get("duration")),this.onState(t,t.get("state"))}},{key:"addLogo",value:function(t){var e=this.elements.buttonContainer,i=new ft(t.file,this._model.get("localization").logo,(function(){t.link&&Object(l.l)(t.link,"_blank",{rel:"noreferrer"})}),"logo","jw-logo-button");t.link||Object(l.t)(i.element(),"tabindex","-1"),e.insertBefore(i.element(),e.querySelector(".jw-spacer").nextSibling)}},{key:"goToLiveEdge",value:function(){if("DVR"===this._model.get("streamType")){var t=Math.min(this._model.get("position"),-1),e=this._model.get("dvrSeekLimit");this._api.seek(Math.max(-e,t),{reason:"interaction"}),this._api.play({reason:"interaction"})}}},{key:"updateButtons",value:function(t,e,i){if(e){var n,o,a=this.elements.buttonContainer;e!==i&&i?(n=ae(e,i),o=ae(i,e),this.removeButtons(a,o)):n=e;for(var r=n.length-1;r>=0;r--){var s=n[r],l=new ft(s.img,s.tooltip,s.callback,s.id,s.btnClass);s.tooltip&&$t(l.element(),s.id,s.tooltip);var c=void 0;"related"===l.id?c=this.elements.settingsButton.element():"share"===l.id?c=a.querySelector('[button="related"]')||this.elements.settingsButton.element():(c=this.elements.spacer.nextSibling)&&"logo"===c.getAttribute("button")&&(c=c.nextSibling),a.insertBefore(l.element(),c)}}}},{key:"removeButtons",value:function(t,e){for(var i=e.length;i--;){var n=t.querySelector('[button="'.concat(e[i].id,'"]'));n&&t.removeChild(n)}}},{key:"toggleCaptionsButtonState",value:function(t){var e=this.elements.captionsButton;e&&Object(l.v)(e.element(),"jw-off",!t)}},{key:"destroy",value:function(){var t=this;this._model.off(null,null,this),Object.keys(this.elements).forEach((function(e){var i=t.elements[e];i&&"function"==typeof i.destroy&&t.elements[e].destroy()})),this.ui.forEach((function(t){t.destroy()})),this.ui=[]}}])&&ee(e.prototype,i),n&&ee(e,n),t}(),le=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return'
    ')+'
    ')+"
    "},ce=function(t){return'
    '+le("rewind",t.rewind)+le("display",t.playback)+le("next",t.next)+"
    "};function ue(t,e){for(var i=0;i'.concat(a.playback,"")),Object(l.a)(o.icon,"jw-idle-label"),o.icon.appendChild(s))}return o}var i,n,o;return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&ge(t,e)}(e,t),i=e,(n=[{key:"element",value:function(){return this.el}}])&&he(i.prototype,n),o&&he(i,o),e}(r.a);function be(t,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:"",e=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]:"";return'
    '+'
    '.concat(t,"
    ")+'
    '.concat(e,"
    ")+'
    '.concat(i,"
    ")+"
    "+'')+"
    "}());e.querySelector(".jw-nextup-close").appendChild(st("close")),this.addContent(e),this.closeButton=this.content.querySelector(".jw-nextup-close"),this.closeButton.setAttribute("aria-label",this.localization.close),this.tooltip=this.content.querySelector(".jw-nextup-tooltip");var i=this._model,n=i.player;this.enabled=!1,i.on("change:nextUp",this.onNextUp,this),n.change("duration",this.onDuration,this),n.change("position",this.onElapsed,this),n.change("streamType",this.onStreamType,this),n.change("state",(function(t,e){"complete"===e&&this.toggle(!1)}),this),this.closeUi=new u.a(this.closeButton,{directSelect:!0}).on("click tap enter",(function(){this.nextUpSticky=!1,this.toggle(!1)}),this),this.tooltipUi=new u.a(this.tooltip).on("click tap",this.click,this)}},{key:"loadThumbnail",value:function(t){return this.nextUpImage=new Image,this.nextUpImage.onload=function(){this.nextUpImage.onload=null}.bind(this),this.nextUpImage.src=t,{backgroundImage:'url("'+t+'")'}}},{key:"click",value:function(){var t=this.feedShownId;this.reset(),this._api.next({feedShownId:t,reason:"interaction"})}},{key:"toggle",value:function(t,e){if(this.enabled&&(Object(l.v)(this.container,"jw-nextup-sticky",!!this.nextUpSticky),this.shown!==t)){this.shown=t,Object(l.v)(this.container,"jw-nextup-container-visible",t),Object(l.v)(this._playerElement,"jw-flag-nextup",t);var i=this._model.get("nextUp");t&&i?(this.feedShownId=Object(te.b)(te.a),this.trigger("nextShown",{mode:i.mode,ui:"nextup",itemsShown:[i],feedData:i.feedData,reason:e,feedShownId:this.feedShownId})):this.feedShownId=""}}},{key:"setNextUpItem",value:function(t){var e=this;setTimeout((function(){if(e.thumbnail=e.content.querySelector(".jw-nextup-thumbnail"),Object(l.v)(e.content,"jw-nextup-thumbnail-visible",!!t.image),t.image){var i=e.loadThumbnail(t.image);Object(pt.d)(e.thumbnail,i)}e.header=e.content.querySelector(".jw-nextup-header"),e.header.textContent=Object(l.e)(e.localization.nextUp).textContent,e.title=e.content.querySelector(".jw-nextup-title");var n=t.title;e.title.textContent=n?Object(l.e)(n).textContent:"";var o=t.duration;o&&(e.duration=e.content.querySelector(".jw-nextup-duration"),e.duration.textContent="number"==typeof o?Object(gt.timeFormat)(o):o)}),500)}},{key:"onNextUp",value:function(t,e){this.reset(),e||(e={showNextUp:!1}),this.enabled=!(!e.title&&!e.image),this.enabled&&(e.showNextUp||(this.nextUpSticky=!1,this.toggle(!1)),this.setNextUpItem(e))}},{key:"onDuration",value:function(t,e){if(e){var i=t.get("nextupoffset"),n=-10;i&&(n=Object(xe.d)(i,e)),n<0&&(n+=e),Object(xe.c)(i)&&e-5=this.offset;n&&void 0===i?(this.nextUpSticky=n,this.toggle(n,"time")):!n&&i&&this.reset()}}},{key:"onStreamType",value:function(t,e){"VOD"!==e&&(this.nextUpSticky=!1,this.toggle(!1))}},{key:"element",value:function(){return this.container}},{key:"addContent",value:function(t){this.content&&this.removeContent(),this.content=t,this.container.appendChild(t)}},{key:"removeContent",value:function(){this.content&&(this.container.removeChild(this.content),this.content=null)}},{key:"reset",value:function(){this.nextUpSticky=void 0,this.toggle(!1)}},{key:"destroy",value:function(){this.off(),this._model.off(null,null,this),this.closeUi&&this.closeUi.destroy(),this.tooltipUi&&this.tooltipUi.destroy()}}])&&Te(e.prototype,i),n&&Te(e,n),t}(),Ce=function(t,e){var i=t.featured,n=t.showLogo,o=t.type;return t.logo=n?'':"",'
  • ').concat(_e[o](t,e),"
  • ")},_e={link:function(t){var e=t.link,i=t.title,n=t.logo;return'').concat(n).concat(i||"","")},info:function(t,e){return'")},share:function(t,e){return'")},keyboardShortcuts:function(t,e){return'")}},Se=i(23),Me=i(6),Ee=i(13);function Ie(t,e){for(var i=0;iJW Player '.concat(t,""),a={items:[{type:"info"},{title:Object(Ee.e)(n)?"".concat(o," ").concat(n):"".concat(n," ").concat(o),type:"link",featured:!0,showLogo:!0,link:"https://jwplayer.com/learn-more?e=".concat(Ae[i])}]},r=e.get("provider"),s=a.items;if(r&&r.name.indexOf("flash")>=0){var l="Flash Version "+Object(Me.a)();s.push({title:l,type:"link",link:"http://www.adobe.com/software/flash/about/"})}return this.shortcutsTooltip&&s.splice(s.length-1,0,{type:"keyboardShortcuts"}),a}},{key:"rightClick",value:function(t){if(this.lazySetup(),this.mouseOverContext)return!1;this.hideMenu(),this.showMenu(t),this.addHideMenuHandlers()}},{key:"getOffset",value:function(t){var e=Object(l.c)(this.wrapperElement),i=t.pageX-e.left,n=t.pageY-e.top;return this.model.get("touchMode")&&(n-=100),{x:i,y:n}}},{key:"showMenu",value:function(t){var e=this,i=this.getOffset(t);return this.el.style.left=i.x+"px",this.el.style.top=i.y+"px",this.outCount=0,Object(l.a)(this.playerContainer,"jw-flag-rightclick-open"),Object(l.a)(this.el,"jw-open"),clearTimeout(this._menuTimeout),this._menuTimeout=setTimeout((function(){return e.hideMenu()}),3e3),!1}},{key:"hideMenu",value:function(t){t&&this.el&&this.el.contains(t.target)||(Object(l.o)(this.playerContainer,"jw-flag-rightclick-open"),Object(l.o)(this.el,"jw-open"))}},{key:"lazySetup",value:function(){var t,e,i,n,o=this,a=(t=this.buildArray(),e=this.model.get("localization"),i=t.items,n=(void 0===i?[]:i).map((function(t){return Ce(t,e)})),'
    '+'
      '.concat(n.join(""),"
    ")+"
    ");if(this.el){if(this.html!==a){this.html=a;var r=Le(a);Object(l.h)(this.el);for(var s=r.childNodes.length;s--;)this.el.appendChild(r.firstChild)}}else this.html=a,this.el=Le(this.html),this.wrapperElement.appendChild(this.el),this.hideMenuHandler=function(t){return o.hideMenu(t)},this.overHandler=function(){o.mouseOverContext=!0},this.outHandler=function(t){o.mouseOverContext=!1,t.relatedTarget&&!o.el.contains(t.relatedTarget)&&++o.outCount>1&&o.hideMenu()},this.infoOverlayHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.infoOverlay.open()},this.shortcutsTooltipHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.shortcutsTooltip.open()}}},{key:"setup",value:function(t,e,i){this.wrapperElement=i,this.model=t,this.mouseOverContext=!1,this.playerContainer=e,this.ui=new u.a(i).on("longPress",this.rightClick,this)}},{key:"addHideMenuHandlers",value:function(){this.removeHideMenuHandlers(),this.wrapperElement.addEventListener("touchstart",this.hideMenuHandler),document.addEventListener("touchstart",this.hideMenuHandler),o.OS.mobile||(this.wrapperElement.addEventListener("click",this.hideMenuHandler),document.addEventListener("click",this.hideMenuHandler),this.el.addEventListener("mouseover",this.overHandler),this.el.addEventListener("mouseout",this.outHandler)),this.el.querySelector(".jw-info-overlay-item").addEventListener("click",this.infoOverlayHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").addEventListener("click",this.shortcutsTooltipHandler)}},{key:"removeHideMenuHandlers",value:function(){this.wrapperElement&&(this.wrapperElement.removeEventListener("click",this.hideMenuHandler),this.wrapperElement.removeEventListener("touchstart",this.hideMenuHandler)),this.el&&(this.el.querySelector(".jw-info-overlay-item").removeEventListener("click",this.infoOverlayHandler),this.el.removeEventListener("mouseover",this.overHandler),this.el.removeEventListener("mouseout",this.outHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").removeEventListener("click",this.shortcutsTooltipHandler)),document.removeEventListener("click",this.hideMenuHandler),document.removeEventListener("touchstart",this.hideMenuHandler)}},{key:"destroy",value:function(){clearTimeout(this._menuTimeout),this.removeHideMenuHandlers(),this.el&&(this.hideMenu(),this.hideMenuHandler=null,this.el=null),this.wrapperElement&&(this.wrapperElement.oncontextmenu=null,this.wrapperElement=null),this.model&&(this.model=null),this.ui&&(this.ui.destroy(),this.ui=null)}}])&&Ie(e.prototype,i),n&&Ie(e,n),t}(),Pe=function(){return''};function Re(t){var e=document.getElementsByClassName("jw-icon-settings")[0];if(e){var i="Right"===t?Object(l.k)(e):Object(l.n)(e);i&&i.focus()}}var Be=function(t){Object.keys(t).forEach((function(e){t[e].deactivate()}))},Ve=function(t){return'"};var He=function(t){t.forEach((function(t){t.deactivate()}))},Ne=function(t){return'"};function Fe(t,e,i){var n,o=Object(l.e)(Ne(e)),a=new u.a(o).on("click tap enter",(function(t){i(t)})),r={activate:function(){Object(l.v)(o,"jw-settings-item-active",!0),o.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(l.v)(o,"jw-settings-item-active",!1),o.setAttribute("aria-checked","false"),n=!1},element:function(){return o},uiElement:function(){return a},destroy:function(){this.deactivate(),a.destroy()}};return Object.defineProperty(r,"active",{enumerable:!0,get:function(){return n}}),r}var qe="audioTracks",De="captions",Ue="quality",We="playbackRates",Qe=Ue,Xe=function(t,e,i,n,o){var a=t.getSubmenu(e);if(a)a.replaceContent(i);else{var r=p("jw-settings-".concat(e),(function(i){t.activateSubmenu(e,!1,i&&"enter"!==i.type),a.element().children[0].focus()}),e,[n]),s=r.element();s.setAttribute("role","menuitemradio"),s.setAttribute("aria-checked","false"),s.setAttribute("aria-label",o),(a=function(t,e,i){var n,o=[],a=Object(l.e)(Ve(t)),r=e.element();r.setAttribute("name",t),r.className+=" jw-submenu-"+t,e.show();var s=function(t,e){t?t.focus():void 0!==e&&o[e].element().focus()},c=function(t){var e=Object(l.k)(r),i=Object(l.n)(r),n=Object(l.k)(t.target),a=Object(l.n)(t.target),c=t.key.replace(/(Arrow|ape)/,"");switch(c){case"Tab":s(t.shiftKey?i:e);break;case"Left":s(i||Object(l.n)(document.getElementsByClassName("jw-icon-settings")[0]));break;case"Up":s(a,o.length-1);break;case"Right":s(e);break;case"Down":s(n,0)}t.preventDefault(),"Esc"!==c&&t.stopPropagation()},u={addContent:function(t){t&&(t.forEach((function(t){a.appendChild(t.element()),t.element().setAttribute("tabindex","-1"),t.element().addEventListener("keydown",c)})),o=t)},replaceContent:function(t){u.removeContent(),this.addContent(t)},removeContent:function(){o.forEach((function(t){t.element().removeEventListener("keydown",c)})),Object(l.h)(a),o=[]},getItems:function(){return o},activate:function(){Object(l.v)(a,"jw-settings-submenu-active",!0),a.setAttribute("aria-expanded","true"),r.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(l.v)(a,"jw-settings-submenu-active",!1),a.setAttribute("aria-expanded","false"),r.setAttribute("aria-checked","false"),n=!1},activateItem:function(t){var e=o[t];e&&!e.active&&(He(o),e.activate())},element:function(){return a},destroy:function(){o&&(o.forEach((function(t){t.destroy()})),this.removeContent())}};return Object.defineProperties(u,{name:{enumerable:!0,get:function(){return t}},active:{enumerable:!0,get:function(){return n}},categoryButtonElement:{enumerable:!0,get:function(){return r}},isDefault:{enumerable:!0,get:function(){return i}}}),u}(e,r,e===Qe)).addContent(i),"ontouchstart"in window||$t(s,e,o),t.addSubmenu(a)}return a};function Ye(t){t.removeSubmenu(De)}function Ke(t){t.removeSubmenu(qe)}function Je(t){t.removeSubmenu(Ue)}function Ze(t){t.removeSubmenu(We)}function Ge(t,e,i){var n=t.elements.settingsButton,o=function(t,e,i){var n,o=function(t){/jw-(settings|video|nextup-close|sharing-link|share-item)/.test(t.target.className)||w.close()},a=null,r={},s=Object(l.e)(Pe()),c=new u.a(s).on("keydown",(function(t){var e=t.sourceEvent,i=t.target,n=Object(l.k)(i),o=Object(l.n)(i),a=e.key.replace(/(Arrow|ape)/,"");switch(a){case"Esc":w.close(t);break;case"Left":o?o.focus():(w.close(),Re(a));break;case"Right":n&&d.element()&&i!==d.element()&&n.focus();break;case"Up":case"Down":w.activateSubmenu(i.getAttribute("name"),"Up"===a)}if(e.stopPropagation(),/13|27|32|37|38|39|40/.test(e.keyCode))return e.preventDefault(),!1})),d=p("jw-settings-close",(function(t){w.close(t)}),i.close,[st("close")]);d.ui.on("keydown",(function(t){var e=t.sourceEvent,i=e.key.replace(/(Arrow|ape)/,"");("Enter"===i||"Right"===i||"Tab"===i&&!e.shiftKey)&&w.close(e),"Right"===i&&Re(e.key)})),d.show();var h=s.querySelector(".jw-settings-topbar");h.appendChild(d.element());var w={ui:c,closeButton:d,open:function(e,i){(t(n=!0,i),s.setAttribute("aria-expanded","true"),document.addEventListener("click",o),e&&i&&"enter"===i.type)?a.categoryButtonElement.focus():a.element().firstChild.focus()},close:function(e){t(n=!1,e),a=null,Be(r),s.setAttribute("aria-expanded","false"),document.removeEventListener("click",o)},toggle:function(){n?this.close():this.open()},addSubmenu:function(t){if(t){var i=t.name;if(r[i]=t,t.isDefault)Object(l.m)(h,t.categoryButtonElement),t.categoryButtonElement.addEventListener("keydown",(function(t){9===t.keyCode&&t.shiftKey&&w.close(t)}));else{var n=h.querySelector(".jw-submenu-sharing");h.insertBefore(t.categoryButtonElement,n||d.element())}s.appendChild(t.element()),e.show()}},getSubmenu:function(t){return r[t]},getSubmenuNames:function(){return Object.keys(r)},removeSubmenu:function(t){var i=r[t];i&&i.element().parentNode===s&&(s.removeChild(i.element()),h.removeChild(i.categoryButtonElement),i.destroy(),delete r[t],Object.keys(r).length||(this.close(),e.hide()))},activateSubmenu:function(t,e){var i=r[t];i&&(i.active||(Be(r),i.activate(),a=i),(e?i.element().lastChild:i.element().firstChild).focus())},activateFirstSubmenu:function(t){var e=Object.keys(r)[0];this.activateSubmenu(e,!1,t)},element:function(){return s},destroy:function(){this.close(),this.ui.destroy(),this.closeButton.ui.destroy(),Object(l.h)(s)}};return Object.defineProperties(w,{visible:{enumerable:!0,get:function(){return n}}}),w}(e,{hide:function(){return n.hide()},show:function(){return n.show()}},i);return t.on("settingsInteraction",(function(t,e,i){var n=o.getSubmenu(t),a=i&&"enter"!==i.type,r=Object(h.c)(o.open,10);(n||e)&&(o.visible?e||n.active?o.close():o.activateSubmenu(t,!1,a):(n?o.activateSubmenu(t,!1,a):o.activateFirstSubmenu(a),r(e,i)))})),o}function $e(t,e,i,n){var o=i.player,a=function(e,i){var n=t.getSubmenu(e);n&&n.activateItem(i)},r=function(e,i){!i||i.length<=1?Ke(t):function(t,e,i,n,o){var a=e.map((function(e,n){return Fe(e.name,e.name,(function(e){i(n),t.close(e)}))}));Xe(t,qe,a,st("audio-tracks"),o).activateItem(n)}(t,i,(function(t){return n.setCurrentAudioTrack(t)}),o.get("currentAudioTrack"),o.get("localization").audioTracks)},s=function(i,a){if(!a||a.length<=1)Je(t);else{var r=o.get("localization"),s=r.hd,l=r.auto;!function(t,e,i,n,o,a){var r=e.map((function(e,n){var o=e.label;return"Auto"===o&&0===n&&(o="".concat(a,' ')),Fe(e.label,o,(function(e){i(n),t.close(e)}))}));Xe(t,Ue,r,st("quality-100"),o).activateItem(n)}(t,a,(function(t){return n.setCurrentQuality(t)}),o.get("currentLevel"),s,l)}!function(t,e){var i=t.getSubmenuNames(),n=i.length>1||i.some((function(t){return"quality"===t||"playbackRates"===t}));e.elements.settingsButton.toggle(n)}(t,e)},l=function(e,i){o.get("supportsPlaybackRate")&&"LIVE"!==o.get("streamType")&&o.get("playbackRateControls")&&i.length>1?function(t,e,i,n,o){var a=e.map((function(e){return Fe(0,Object(Ee.e)(o)?"x"+e:e+"x",(function(n){i(e),t.close(n)}))}));Xe(t,We,a,st("playback-rate"),o).activateItem(n)}(t,i,(function(t){return n.setPlaybackRate(t)}),i.indexOf(o.get("playbackRate")),o.get("localization").playbackRates):Ze(t)},c=function(t,e,i){var n=o.get("levels");if(n&&"Auto"===n[0].label){var a=e.getItems()[0].element().querySelector(".jw-auto-label"),r=n[t.index]||{label:""};a.textContent=i?"":r.label}};o.change("levels",s,t),o.on("change:currentLevel",(function(e,i){var n=t.getSubmenu("quality"),r=o.get("visualQuality");r&&n&&c(r.level,n,i),a("quality",i)}),t),o.change("audioTracks",r,t),o.on("change:currentAudioTrack",(function(t,e){a("audioTracks",e)}),t),o.on("change:playlistItem",(function(){Ye(t),e.elements.captionsButton.hide(),t.visible&&t.close()})),o.change("captionsList",(function(i,a){var r=e.elements.captionsButton;if(!a||a.length<=1)return Ye(t),void r.hide();var s=o.get("localization"),l=s.cc,c=s.off;!function(t,e,i,n,o,a){var r=e.map((function(e,n){var o=e.label;return"Off"!==o&&"off"!==e.id||0!==n||(o=a),Fe(e.id,o,(function(e){i(n),t.close(e)}))}));Xe(t,De,r,st("cc-off"),o).activateItem(n)}(t,a,(function(t){return n.setCurrentCaptions(t)}),o.get("captionsIndex"),l,c),e.toggleCaptionsButtonState(!!o.get("captionsIndex")),r.show()}),t),o.change("captionsIndex",(function(i,n){var o=t.getSubmenu("captions");o&&(o.activateItem(n),e.toggleCaptionsButtonState(!!n))}),t),o.change("playbackRates",l,t),o.change("playbackRate",(function(t,e){var i=o.get("playbackRates");i&&a("playbackRates",i.indexOf(e))}),t),o.on("change:playbackRateControls",(function(){l(0,o.get("playbackRates"))})),o.on("change:visualQuality",(function(e,i){var n=t.getSubmenu("quality");i&&n&&c(i.level,n,o.get("currentLevel"))})),o.on("change:castActive",(function(e,i,n){i!==n&&(i?(Ke(t),Je(t),Ze(t)):(r(0,o.get("audioTracks")),s(0,o.get("levels")),l(0,o.get("playbackRates"))))}),t),o.on("change:streamType",(function(){l(0,o.get("playbackRates"))}),t)}var ti=i(58),ei=i(36),ii=i(12),ni=function(t,e,i,n){var o=Object(l.e)('
    '),r=!1,s=null,c=!1,u=function(t){/jw-info/.test(t.target.className)||h.close()},d=function(){var n,a,s,c,u,d=p("jw-info-close",(function(){h.close()}),e.get("localization").close,[st("close")]);d.show(),Object(l.m)(o,d.element()),a=o.querySelector(".jw-info-title"),s=o.querySelector(".jw-info-duration"),c=o.querySelector(".jw-info-description"),u=o.querySelector(".jw-info-clientid"),e.change("playlistItem",(function(t,e){var i=e.description,n=e.title;Object(l.q)(c,i||""),Object(l.q)(a,n||"Unknown Title")})),e.change("duration",(function(t,i){var n="";switch(e.get("streamType")){case"LIVE":n="Live";break;case"DVR":n="DVR";break;default:i&&(n=Object(gt.timeFormat)(i))}s.textContent=n}),h),u.textContent=(n=i.getPlugin("jwpsrv"))&&"function"==typeof n.doNotTrackUser&&n.doNotTrackUser()?"":"Client ID: ".concat(function(){try{return window.localStorage.jwplayerLocalId}catch(t){return"none"}}()),t.appendChild(o),r=!0};var h={open:function(){r||d(),document.addEventListener("click",u),c=!0;var t=e.get("state");t===a.pb&&i.pause("infoOverlayInteraction"),s=t,n(!0)},close:function(){document.removeEventListener("click",u),c=!1,e.get("state")===a.ob&&s===a.pb&&i.play("infoOverlayInteraction"),s=null,n(!1)},destroy:function(){this.close(),e.off(null,null,this)}};return Object.defineProperties(h,{visible:{enumerable:!0,get:function(){return c}}}),h};var oi=function(t,e,i){var n,o=!1,r=null,s=i.get("localization").shortcuts,c=Object(l.e)(function(t,e){var i=t.map((function(t){return'
    '+''.concat(t.description,"")+''.concat(t.key,"")+"
    "})).join("");return'
    ')+'Press shift question mark to access a list of keyboard shortcuts
    '+''.concat(e,"")+'
    '+"".concat(i)+"
    "}(function(t){var e=t.playPause,i=t.volumeToggle,n=t.fullscreenToggle,o=t.seekPercent,a=t.increaseVolume,r=t.decreaseVolume,s=t.seekForward,l=t.seekBackward;return[{key:t.spacebar,description:e},{key:"↑",description:a},{key:"↓",description:r},{key:"→",description:s},{key:"←",description:l},{key:"c",description:t.captionsToggle},{key:"f",description:n},{key:"m",description:i},{key:"0-9",description:o}]}(s),s.keyboardShortcuts)),u={reason:"settingsInteraction"},d=c.querySelector(".jw-switch"),h=function(){d.setAttribute("aria-checked",i.get("enableShortcuts")),d.addEventListener("click",g),Object(l.a)(c,"jw-open"),r=i.get("state"),c.querySelector(".jw-shortcuts-close").focus(),document.addEventListener("click",f),o=!0,e.pause(u)},w=function(){d.removeEventListener("click",g),Object(l.o)(c,"jw-open"),document.removeEventListener("click",f),t.focus(),o=!1,r===a.pb&&e.play(u)},f=function(t){/jw-shortcuts|jw-switch/.test(t.target.className)||w()},g=function(t){var e=t.currentTarget,n="true"!==e.getAttribute("aria-checked");e.setAttribute("aria-checked",n),i.set("enableShortcuts",n)};return n=p("jw-shortcuts-close",(function(){w()}),i.get("localization").close,[st("close")]),Object(l.m)(c,n.element()),n.show(),t.appendChild(c),{el:c,close:w,open:h,toggleVisibility:function(){o?w():h()}}},ai=function(t){return'
    ')+"
    "};function ri(t){return(ri="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function si(t,e){for(var i=0;i16?n.activeTimeout=setTimeout(n.userInactiveTimeout,t):n.playerContainer.querySelector(".jw-tab-focus")?n.resetActiveTimeout():n.userInactive()},n}var i,n,r;return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&gi(t,e)}(e,t),i=e,(n=[{key:"resetActiveTimeout",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.inactiveTime=0}},{key:"enable",value:function(t,e){var i=this,n=this.context.createElement("div");n.className="jw-controls jw-reset",this.div=n;var r=this.context.createElement("div");r.className="jw-controls-backdrop jw-reset",this.backdrop=r,this.logo=this.playerContainer.querySelector(".jw-logo");var c=e.get("touchMode");if(!this.displayContainer){var u=new ye(e,t);u.buttons.display.on("click tap enter",(function(){i.trigger(a.p),i.userActive(1e3),t.playToggle(mi()),e.get("isFloating")?i.wrapperElement.focus():i.playerContainer.focus()})),this.div.appendChild(u.element()),this.displayContainer=u}this.infoOverlay=new ni(n,e,t,(function(t){Object(l.v)(i.div,"jw-info-open",t),t&&i.div.querySelector(".jw-info-close").focus()})),o.OS.mobile||(this.shortcutsTooltip=new oi(this.wrapperElement,t,e)),this.rightClickMenu=new ze(this.infoOverlay,this.shortcutsTooltip),c?(Object(l.a)(this.playerContainer,"jw-flag-touch"),this.rightClickMenu.setup(e,this.playerContainer,this.wrapperElement)):e.change("flashBlocked",(function(t,e){e?i.rightClickMenu.destroy():i.rightClickMenu.setup(t,i.playerContainer,i.wrapperElement)}),this);var d=e.get("floating");if(d){var h=new di(n,e.get("localization").close);h.on(a.sb,(function(){return i.trigger("dismissFloating",{doNotForward:!0})})),!1!==d.dismissible&&Object(l.a)(this.playerContainer,"jw-floating-dismissible")}var w=this.controlbar=new se(t,e,this.playerContainer.querySelector(".jw-hidden-accessibility"));if(w.on(a.sb,(function(){return i.userActive()})),w.on("nextShown",(function(t){this.trigger("nextShown",t)}),this),w.on("adjustVolume",v,this),e.get("nextUpDisplay")&&!w.nextUpToolTip){var f=new Oe(e,t,this.playerContainer);f.on("all",this.trigger,this),f.setup(this.context),w.nextUpToolTip=f,this.div.appendChild(f.element())}this.div.appendChild(w.element());var g=null,j=this.settingsMenu=Ge(w,(function(n,o){var r=e.get("state"),s={reason:"settingsInteraction"},c="keydown"===(o&&o.sourceEvent||o||{}).type;Object(l.v)(i.div,"jw-settings-open",n),Object(ti.a)(e.get("containerWidth"))<2&&(n&&r===a.pb?t.pause(s):n||r!==a.ob||g!==a.pb||t.play(s));var u=n||c?0:ji;i.userActive(u),g=r;var d=i.controlbar.elements.settingsButton;!n&&d&&(c?d.element().focus():o&&(e.get("isFloating")?i.wrapperElement:i.playerContainer).focus())}),e.get("localization"));$e(j,w,e,t),o.OS.mobile?this.div.appendChild(j.element()):(this.playerContainer.setAttribute("aria-describedby","jw-shortcuts-tooltip-explanation"),this.div.insertBefore(j.element(),w.element()));var b=function(e){if(e.get("autostartMuted")){var n=function(){return i.unmuteAutoplay(t,e)},a=function(t,e){e||n()};o.OS.mobile&&(i.mute=p("jw-autostart-mute jw-off",n,e.get("localization").unmute,[st("volume-0")]),i.mute.show(),i.div.appendChild(i.mute.element())),w.renderVolume(!0,e.get("volume")),Object(l.a)(i.playerContainer,"jw-flag-autostart"),e.on("change:autostartFailed",n,i),e.on("change:autostartMuted change:mute",a,i),i.muteChangeCallback=a,i.unmuteCallback=n}};function m(i){var n=0,o=e.get("duration"),a=e.get("position");if("DVR"===e.get("streamType")){var r=e.get("dvrSeekLimit");n=o,o=Math.max(a,-r)}var l=Object(s.a)(a+i,n,o);t.seek(l,mi())}function v(i){var n=Object(s.a)(e.get("volume")+i,0,100);t.setVolume(n)}e.once("change:autostartMuted",b),b(e);var y=function(n){if(n.ctrlKey||n.metaKey)return!0;var o=!i.settingsMenu.visible,a=!0===e.get("enableShortcuts"),r=i.instreamState;if(a||-1!==bi.indexOf(n.keyCode)){switch(n.keyCode){case 27:if(e.get("fullscreen"))t.setFullscreen(!1),i.playerContainer.blur(),i.userInactive();else{var s=t.getPlugin("related");s&&s.close({type:"escape"})}i.rightClickMenu.el&&i.rightClickMenu.hideMenuHandler(),i.infoOverlay.visible&&i.infoOverlay.close(),i.shortcutsTooltip&&i.shortcutsTooltip.close();break;case 13:case 32:if(document.activeElement.classList.contains("jw-switch")&&32===n.keyCode)return!0;t.playToggle(mi());break;case 37:!r&&o&&m(-5);break;case 39:!r&&o&&m(5);break;case 38:o&&v(10);break;case 40:o&&v(-10);break;case 67:var l=t.getCaptionsList().length;if(l){var c=(t.getCurrentCaptions()+1)%l;t.setCurrentCaptions(c)}break;case 77:t.setMute();break;case 70:t.setFullscreen();break;case 191:i.shortcutsTooltip&&i.shortcutsTooltip.toggleVisibility();break;default:if(n.keyCode>=48&&n.keyCode<=59){var u=(n.keyCode-48)/10*e.get("duration");t.seek(u,mi())}}return/13|32|37|38|39|40/.test(n.keyCode)?(n.preventDefault(),!1):void 0}};this.playerContainer.addEventListener("keydown",y),this.keydownCallback=y;var k=function(t){if(9===t.keyCode){var e=i.playerContainer.contains(t.target)?0:ji;i.userActive(e)}};this.playerContainer.addEventListener("keyup",k),this.keyupCallback=k;var x=function(t){var e=t.relatedTarget||document.querySelector(":focus");e&&(i.playerContainer.contains(e)||i.userInactive())};this.playerContainer.addEventListener("blur",x,!0),this.blurCallback=x;var T=function t(){"jw-shortcuts-tooltip-explanation"===i.playerContainer.getAttribute("aria-describedby")&&i.playerContainer.removeAttribute("aria-describedby"),i.playerContainer.removeEventListener("blur",t,!0)};this.shortcutsTooltip&&(this.playerContainer.addEventListener("blur",T,!0),this.onRemoveShortcutsDescription=T),this.userActive(),this.addControls(),this.addBackdrop(),e.set("controlsEnabled",!0)}},{key:"addControls",value:function(){this.wrapperElement.appendChild(this.div)}},{key:"disable",value:function(t){var e=this.nextUpToolTip,i=this.settingsMenu,n=this.infoOverlay,o=this.controlbar,a=this.rightClickMenu,r=this.playerContainer,s=this.div;clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.off(),t.off(null,null,this),t.set("controlsEnabled",!1),s.parentNode&&(Object(l.o)(r,"jw-flag-touch"),s.parentNode.removeChild(s)),o&&o.destroy(),a&&a.destroy(),this.keydownCallback&&r.removeEventListener("keydown",this.keydownCallback),this.keyupCallback&&r.removeEventListener("keyup",this.keyupCallback),this.blurCallback&&r.removeEventListener("blur",this.blurCallback),this.onRemoveShortcutsDescription&&r.removeEventListener("blur",this.onRemoveShortcutsDescription),this.displayContainer&&this.displayContainer.destroy(),e&&e.destroy(),i&&(i.destroy(),s.removeChild(i.element())),n&&n.destroy(),this.removeBackdrop()}},{key:"controlbarHeight",value:function(){return this.dimensions.cbHeight||(this.dimensions.cbHeight=this.controlbar.element().clientHeight),this.dimensions.cbHeight}},{key:"element",value:function(){return this.div}},{key:"resize",value:function(){this.dimensions={}}},{key:"unmuteAutoplay",value:function(t,e){var i=!e.get("autostartFailed"),n=e.get("mute");i?n=!1:e.set("playOnViewable",!1),this.muteChangeCallback&&(e.off("change:autostartMuted change:mute",this.muteChangeCallback),this.muteChangeCallback=null),this.unmuteCallback&&(e.off("change:autostartFailed",this.unmuteCallback),this.unmuteCallback=null),e.set("autostartFailed",void 0),e.set("autostartMuted",void 0),t.setMute(n),this.controlbar.renderVolume(n,e.get("volume")),this.mute&&this.mute.hide(),Object(l.o)(this.playerContainer,"jw-flag-autostart"),this.userActive()}},{key:"mouseMove",value:function(t){var e=this.controlbar.element().contains(t.target),i=this.controlbar.nextUpToolTip&&this.controlbar.nextUpToolTip.element().contains(t.target),n=this.logo&&this.logo.contains(t.target),o=e||i||n?0:ji;this.userActive(o)}},{key:"userActive",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ji;t>0?(this.inactiveTime=Object(c.a)()+t,-1===this.activeTimeout&&(this.activeTimeout=setTimeout(this.userInactiveTimeout,t))):this.resetActiveTimeout(),this.showing||(Object(l.o)(this.playerContainer,"jw-flag-user-inactive"),this.showing=!0,this.trigger("userActive"))}},{key:"userInactive",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.settingsMenu.visible||(this.inactiveTime=0,this.showing=!1,Object(l.a)(this.playerContainer,"jw-flag-user-inactive"),this.trigger("userInactive"))}},{key:"addBackdrop",value:function(){var t=this.instreamState?this.div:this.wrapperElement.querySelector(".jw-captions");this.wrapperElement.insertBefore(this.backdrop,t)}},{key:"removeBackdrop",value:function(){var t=this.backdrop.parentNode;t&&t.removeChild(this.backdrop)}},{key:"setupInstream",value:function(){this.instreamState=!0,this.userActive(),this.addBackdrop(),this.settingsMenu&&this.settingsMenu.close(),Object(l.o)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","-1")}},{key:"destroyInstream",value:function(t){this.instreamState=null,this.addBackdrop(),t.get("autostartMuted")&&Object(l.a)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","0")}}])&&hi(i.prototype,n),r&&hi(i,r),e}(r.a)},function(t,e,i){"use strict";i.r(e);var n=i(0),o=i(12),a=i(50),r=i(37);var s=i(44),l=i(51),c=i(26),u=i(25),d=i(3),p=i(46),h=i(2),w=i(7),f=i(34);function g(t){var e=!1;return{async:function(){var i=this,n=arguments;return Promise.resolve().then((function(){if(!e)return t.apply(i,n)}))},cancel:function(){e=!0},cancelled:function(){return e}}}var j=i(1);function b(t){return function(e,i){var o=t.mediaModel,a=Object(n.h)({},i,{type:e});switch(e){case d.T:if(o.get(d.T)===i.mediaType)return;o.set(d.T,i.mediaType);break;case d.U:return void o.set(d.U,Object(n.h)({},i));case d.M:if(i[e]===t.model.getMute())return;break;case d.bb:i.newstate===d.mb&&(t.thenPlayPromise.cancel(),o.srcReset());var r=o.attributes.mediaState;o.attributes.mediaState=i.newstate,o.trigger("change:mediaState",o,i.newstate,r);break;case d.F:return t.beforeComplete=!0,t.trigger(d.B,a),void(t.attached&&!t.background&&t._playbackComplete());case d.G:o.get("setup")?(t.thenPlayPromise.cancel(),o.srcReset()):(e=d.tb,a.code+=1e5);break;case d.K:a.metadataType||(a.metadataType="unknown");var s=i.duration;Object(n.v)(s)&&(o.set("seekRange",i.seekRange),o.set("duration",s));break;case d.D:o.set("buffer",i.bufferPercent);case d.S:o.set("seekRange",i.seekRange),o.set("position",i.position),o.set("currentTime",i.currentTime);var l=i.duration;Object(n.v)(l)&&o.set("duration",l),e===d.S&&Object(n.s)(t.item.starttime)&&delete t.item.starttime;break;case d.R:var c=t.mediaElement;c&&c.paused&&o.set("mediaState","paused");break;case d.I:o.set(d.I,i.levels);case d.J:var u=i.currentQuality,p=i.levels;u>-1&&p.length>1&&o.set("currentLevel",parseInt(u));break;case d.f:o.set(d.f,i.tracks);case d.g:var h=i.currentTrack,w=i.tracks;h>-1&&w.length>0&&h=Math.max(l,p.a)&&(t.preloadNextItem(),v=!0)}function A(t){var e={};b.tag&&(e.tag=b.tag),this.trigger(d.F,e),L.call(this,t)}function L(t){g={},a&&f+10?t:null,w&&w.model.set("skipOffset",s)}};Object(n.h)(lt.prototype,w.a);var ct=lt,ut=i(63),dt=i(60),pt=function(t){var e=this,i=[],n={},o=0,a=0;function r(t){if(t.data=t.data||[],t.name=t.label||t.name||t.language,t._id=Object(dt.a)(t,i.length),!t.name){var e=Object(dt.b)(t,o);t.name=e.label,o=e.unknownCount}n[t._id]=t,i.push(t)}function s(){for(var t=[{id:"off",label:"Off"}],e=0;e')+'
    '},ft=i(36),gt=44,jt=function(t){var e=t.get("height");if(t.get("aspectratio"))return!1;if("string"==typeof e&&e.indexOf("%")>-1)return!1;var i=1*e||NaN;return!!(i=isNaN(i)?t.get("containerHeight"):i)&&(i&&i<=gt)},bt=i(54);function mt(t,e){if(t.get("fullscreen"))return 1;if(!t.get("activeTab"))return 0;if(t.get("isFloating"))return 1;var i=t.get("intersectionRatio");return void 0===i&&(i=function(t){var e=document.documentElement,i=document.body,n={top:0,left:0,right:e.clientWidth||i.clientWidth,width:e.clientWidth||i.clientWidth,bottom:e.clientHeight||i.clientHeight,height:e.clientHeight||i.clientHeight};if(!i.contains(t))return 0;if("none"===window.getComputedStyle(t).display)return 0;var o=vt(t);if(!o)return 0;var a=o,r=t.parentNode,s=!1;for(;!s;){var l=null;if(r===i||r===e||1!==r.nodeType?(s=!0,l=n):"visible"!==window.getComputedStyle(r).overflow&&(l=vt(r)),l&&(c=l,u=a,d=void 0,p=void 0,h=void 0,w=void 0,f=void 0,g=void 0,d=Math.max(c.top,u.top),p=Math.min(c.bottom,u.bottom),h=Math.max(c.left,u.left),w=Math.min(c.right,u.right),g=p-d,!(a=(f=w-h)>=0&&g>=0&&{top:d,bottom:p,left:h,right:w,width:f,height:g})))return 0;r=r.parentNode}var c,u,d,p,h,w,f,g;var j=o.width*o.height,b=a.width*a.height;return j?b/j:0}(e),window.top!==window.self&&i)?0:i}function vt(t){try{return t.getBoundingClientRect()}catch(t){}}var yt=i(49),kt=i(42),xt=i(58),Tt=i(10);var Ot=i(32),Ct=i(5),_t=i(6),St=["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"],Mt=function(t,e,i){for(var n=t.requestFullscreen||t.webkitRequestFullscreen||t.webkitRequestFullScreen||t.mozRequestFullScreen||t.msRequestFullscreen,o=e.exitFullscreen||e.webkitExitFullscreen||e.webkitCancelFullScreen||e.mozCancelFullScreen||e.msExitFullscreen,a=!(!n||!o),r=St.length;r--;)e.addEventListener(St[r],i);return{events:St,supportsDomFullscreen:function(){return a},requestFullscreen:function(){n.call(t,{navigationUI:"hide"})},exitFullscreen:function(){null!==this.fullscreenElement()&&o.apply(e)},fullscreenElement:function(){var t=e.fullscreenElement,i=e.webkitCurrentFullScreenElement,n=e.mozFullScreenElement,o=e.msFullscreenElement;return null===t?t:t||i||n||o},destroy:function(){for(var t=St.length;t--;)e.removeEventListener(St[t],i)}}},Et=i(40);function It(t,e){for(var i=0;io?a:n*r/i)*u}return t}(i))/10}w.get("renderCaptionsNatively")?function(t,e){var i="#".concat(t," .jw-video::-webkit-media-text-track-display");e&&(e+="px",m.OS.iOS&&Object(Tt.b)(i,{fontSize:"inherit"},t,!0));p.fontSize=e,Object(Tt.b)(i,p,t,!0)}(w.get("id"),e):Object(Tt.d)(s,{fontSize:e})}}function j(t,e,i){var n=Object(Tt.c)("#000000",i);"dropshadow"===t?e.textShadow="0 2px 1px "+n:"raised"===t?e.textShadow="0 0 5px "+n+", 0 1px 5px "+n+", 0 2px 5px "+n:"depressed"===t?e.textShadow="0 -2px 1px "+n:"uniform"===t&&(e.textShadow="-2px 0 1px "+n+",2px 0 1px "+n+",0 -2px 1px "+n+",0 2px 1px "+n+",-1px 1px 1px "+n+",1px 1px 1px "+n+",1px -1px 1px "+n+",1px 1px 1px "+n)}(s=document.createElement("div")).className="jw-captions jw-reset",this.show=function(){Object(Ct.a)(s,"jw-captions-enabled")},this.hide=function(){Object(Ct.o)(s,"jw-captions-enabled")},this.populate=function(t){w.get("renderCaptionsNatively")||(a=[],o=t,t?this.selectCues(t,r):this.renderCues())},this.resize=function(){g(),this.renderCues(!0)},this.renderCues=function(t){t=!!t,At&&At.processCues(window,a,s,t)},this.selectCues=function(t,e){if(t&&t.data&&e&&!w.get("renderCaptionsNatively")){var i=this.getAlignmentPosition(t,e);!1!==i&&(a=this.getCurrentCues(t.data,i),this.renderCues(!0))}},this.getCurrentCues=function(t,e){return Object(n.i)(t,(function(t){return e>=t.startTime&&(!t.endTime||e<=t.endTime)}))},this.getAlignmentPosition=function(t,e){var i=t.source,o=e.metadata,a=e.currentTime;return i&&o&&Object(n.s)(o[i])&&(a=o[i]),a},this.clear=function(){Object(Ct.g)(s)},this.setup=function(t,i){l=document.createElement("div"),c=document.createElement("span"),l.className="jw-captions-window jw-reset",c.className="jw-captions-text jw-reset",e=Object(n.h)({},Pt,i),u=Pt.fontScale,f(e.fontSize);var o=e.windowColor,a=e.windowOpacity,r=e.edgeStyle;p={};var d={};!function(t,e){var i=e.color,n=e.fontOpacity;(i||n!==Pt.fontOpacity)&&(t.color=Object(Tt.c)(i||"#ffffff",n));if(e.back){var o=e.backgroundColor,a=e.backgroundOpacity;o===Pt.backgroundColor&&a===Pt.backgroundOpacity||(t.backgroundColor=Object(Tt.c)(o,a))}else t.background="transparent";e.fontFamily&&(t.fontFamily=e.fontFamily);e.fontStyle&&(t.fontStyle=e.fontStyle);e.fontWeight&&(t.fontWeight=e.fontWeight);e.textDecoration&&(t.textDecoration=e.textDecoration)}(d,e),(o||a!==Pt.windowOpacity)&&(p.backgroundColor=Object(Tt.c)(o||"#000000",a)),j(r,d,e.fontOpacity),e.back||null!==r||j("uniform",d),Object(Tt.d)(l,p),Object(Tt.d)(c,d),function(t,e){g(),function(t,e){m.Browser.safari&&Object(Tt.b)("#"+t+" .jw-video::-webkit-media-text-track-display-backdrop",{backgroundColor:e.backgroundColor},t,!0);Object(Tt.b)("#"+t+" .jw-video::-webkit-media-text-track-display",p,t,!0),Object(Tt.b)("#"+t+" .jw-video::cue",e,t,!0)}(t,e),function(t,e){Object(Tt.b)("#"+t+" .jw-text-track-display",p,t),Object(Tt.b)("#"+t+" .jw-text-track-cue",e,t)}(t,e)}(t,d),l.appendChild(c),s.appendChild(l),w.change("captionsTrack",(function(t,e){this.populate(e)}),this),w.set("captions",e)},this.element=function(){return s},this.destroy=function(){w.off(null,null,this),this.off()};var b=function(t){r=t,h.selectCues(o,r)};w.on("change:playlistItem",(function(){r=null,a=[]}),this),w.on(d.Q,(function(t){a=[],b(t)}),this),w.on(d.S,b,this),w.on("subtitlesTrackData",(function(){this.selectCues(o,r)}),this),w.on("change:captionsList",(function t(e,n){var o=this;1!==n.length&&(e.get("renderCaptionsNatively")||At||(i.e(8).then(function(t){At=i(93).default}.bind(null,i)).catch(Object(zt.c)(301121)).catch((function(t){o.trigger(d.tb,t)})),e.off("change:captionsList",t,this)))}),this)};Object(n.h)(Rt.prototype,w.a);var Bt=Rt,Vt=function(t,e){var i=e?" jw-hide":"";return'')},Ht={linktarget:"_blank",margin:8,hide:!1,position:"top-right"};function Nt(t){var e,i;Object(n.h)(this,w.a);var o=new Image;this.setup=function(){(i=Object(n.h)({},Ht,t.get("logo"))).position=i.position||Ht.position,i.hide="true"===i.hide.toString(),i.file&&"control-bar"!==i.position&&(e||(e=Object(Ct.e)(Vt(i.position,i.hide))),t.set("logo",i),o.onload=function(){var n=this.height,o=this.width,a={backgroundImage:'url("'+this.src+'")'};if(i.margin!==Ht.margin){var r=/(\w+)-(\w+)/.exec(i.position);3===r.length&&(a["margin-"+r[1]]=i.margin,a["margin-"+r[2]]=i.margin)}var s=.15*t.get("containerHeight"),l=.15*t.get("containerWidth");if(n>s||o>l){var c=o/n;l/s>c?(n=s,o=s*c):(o=l,n=l/c)}a.width=Math.round(o),a.height=Math.round(n),Object(Tt.d)(e,a),t.set("logoWidth",a.width)},o.src=i.file,i.link&&(e.setAttribute("tabindex","0"),e.setAttribute("aria-label",t.get("localization").logo)),this.ui=new Et.a(e).on("click tap enter",(function(t){t&&t.stopPropagation&&t.stopPropagation(),this.trigger(d.A,{link:i.link,linktarget:i.linktarget})}),this))},this.setContainer=function(t){e&&t.appendChild(e)},this.element=function(){return e},this.position=function(){return i.position},this.destroy=function(){o.onload=null,this.ui&&this.ui.destroy()}}var Ft=function(t){this.model=t,this.image=null};Object(n.h)(Ft.prototype,{setup:function(t){this.el=t},setImage:function(t){var e=this.image;e&&(e.onload=null),this.image=null;var i="";"string"==typeof t&&(i='url("'+t+'")',(e=this.image=new Image).src=t),Object(Tt.d)(this.el,{backgroundImage:i})},resize:function(t,e,i){if("uniform"===i){if(t&&(this.playerAspectRatio=t/e),!this.playerAspectRatio||!this.image||"complete"!==(s=this.model.get("state"))&&"idle"!==s&&"error"!==s&&"buffering"!==s)return;var n=this.image,o=null;if(n){if(0===n.width){var a=this;return void(n.onload=function(){a.resize(t,e,i)})}var r=n.width/n.height;Math.abs(this.playerAspectRatio-r)<.09&&(o="cover")}Object(Tt.d)(this.el,{backgroundSize:o})}var s},element:function(){return this.el}});var qt=Ft,Dt=function(t){this.model=t.player};Object(n.h)(Dt.prototype,{hide:function(){Object(Tt.d)(this.el,{display:"none"})},show:function(){Object(Tt.d)(this.el,{display:""})},setup:function(t){this.el=t;var e=this.el.getElementsByTagName("div");this.title=e[0],this.description=e[1],this.model.on("change:logoWidth",this.update,this),this.model.change("playlistItem",this.playlistItem,this)},update:function(t){var e={},i=t.get("logo");if(i){var n=1*(""+i.margin).replace("px",""),o=t.get("logoWidth")+(isNaN(n)?0:n+10);"top-left"===i.position?e.paddingLeft=o:"top-right"===i.position&&(e.paddingRight=o)}Object(Tt.d)(this.el,e)},playlistItem:function(t,e){if(e)if(t.get("displaytitle")||t.get("displaydescription")){var i="",n="";e.title&&t.get("displaytitle")&&(i=e.title),e.description&&t.get("displaydescription")&&(n=e.description),this.updateText(i,n)}else this.hide()},updateText:function(t,e){Object(Ct.q)(this.title,t),Object(Ct.q)(this.description,e),this.title.firstChild||this.description.firstChild?this.show():this.hide()},element:function(){return this.el}});var Ut=Dt;function Wt(t,e){for(var i=0;it)}if(e.get("controls")){var r=jt(e);Object(Ct.v)(u,"jw-flag-audio-player",r),e.set("audioMode",r)}}function R(){e.set("visibility",mt(e,u))}this.updateBounds=function(){Object(kt.a)(k);var t=e.get("isFloating")?p:u,i=document.body.contains(t),n=Object(Ct.c)(t),r=Math.round(n.width),s=Math.round(n.height);if(M=Object(Ct.c)(u),r===o&&s===a)return o&&a||L(),void e.set("inDom",i);r&&s||o&&a||L(),(r||s||i)&&(e.set("containerWidth",r),e.set("containerHeight",s)),e.set("inDom",i),i&&bt.a.observe(u)},this.updateStyles=function(){var t=e.get("containerWidth"),i=e.get("containerHeight");P(t,i),I&&I.resize(t,i),$(t,i),v.resize(),T&&F()},this.checkResized=function(){var t=e.get("containerWidth"),i=e.get("containerHeight"),n=e.get("isFloating");if(t!==o||i!==a){this.resizeListener||(this.resizeListener=new Yt.a(p,this,e)),o=t,a=i,l.trigger(d.hb,{width:t,height:i});var s=Object(xt.a)(t);E!==s&&(E=s,l.trigger(d.j,{breakpoint:E}))}n!==r&&(r=n,l.trigger(d.x,{floating:n}),R())},this.responsiveListener=L,this.setup=function(){var n,o,a,r;j.setup(u.querySelector(".jw-preview")),b.setup(u.querySelector(".jw-title")),(i=new Nt(e)).setup(),i.setContainer(p),i.on(d.A,J),v.setup(u.id,e.get("captions")),b.element().parentNode.insertBefore(v.element(),b.element()),n=t,a=new Lt(o=e,f),r=o.get("controls"),a.on({click:function(){l.trigger(d.p),I&&(ct()?I.settingsMenu.close():ut()?I.infoOverlay.close():n.playToggle({reason:"interaction"}))},tap:function(){u.removeEventListener("mousemove",W),u.removeEventListener("mouseout",X),u.removeEventListener("mouseover",Q),l.trigger(d.p),ct()&&I.settingsMenu.close(),ut()&&I.infoOverlay.close();var t=o.get("state");if(r&&(t===d.mb||t===d.kb||o.get("instream")&&t===d.ob)&&n.playToggle({reason:"interaction"}),r&&t===d.ob){if(o.get("instream")||o.get("castActive")||"audio"===o.get("mediaType"))return;Object(Ct.v)(u,"jw-flag-controls-hidden"),l.dismissible&&Object(Ct.v)(u,"jw-floating-dismissible",Object(Ct.i)(u,"jw-flag-controls-hidden")),v.renderCues(!0)}else I&&(I.showing?I.userInactive():I.userActive())},doubleClick:function(){return I&&n.setFullscreen()}}),u.addEventListener("mousemove",W),u.addEventListener("mouseover",Q),u.addEventListener("mouseout",X),O=a,_=new Et.a(u).on("click",(function(){})),C=Mt(u,document,et),e.on("change:hideAdsControls",(function(t,e){Object(Ct.v)(u,"jw-flag-ads-hide-controls",e)})),e.on("change:scrubbing",(function(t,e){Object(Ct.v)(u,"jw-flag-dragging",e)})),e.on("change:playRejected",(function(t,e){Object(Ct.v)(u,"jw-flag-play-rejected",e)})),e.on(d.X,tt),e.on("change:".concat(d.U),(function(){$(),v.resize()})),e.player.on("change:errorEvent",at),e.change("stretching",Y);var s=e.get("width"),c=e.get("height"),w=G(s,c);Object(Tt.d)(u,w),e.change("aspectratio",K),P(s,c),e.get("controls")||(Object(Ct.a)(u,"jw-flag-controls-hidden"),Object(Ct.o)(u,"jw-floating-dismissible")),Jt&&Object(Ct.a)(u,"jw-ie");var g=e.get("skin")||{};g.name&&Object(Ct.p)(u,/jw-skin-\S+/,"jw-skin-"+g.name);var y=function(t){t||(t={});var e=t.active,i=t.inactive,n=t.background,o={};return o.controlbar=function(t){if(t||e||i||n){var o={};return t=t||{},o.iconsActive=t.iconsActive||e,o.icons=t.icons||i,o.text=t.text||i,o.background=t.background||n,o}}(t.controlbar),o.timeslider=function(t){if(t||e){var i={};return t=t||{},i.progress=t.progress||e,i.rail=t.rail,i}}(t.timeslider),o.menus=function(t){if(t||e||i||n){var o={};return t=t||{},o.text=t.text||i,o.textActive=t.textActive||e,o.background=t.background||n,o}}(t.menus),o.tooltips=function(t){if(t||i||n){var e={};return t=t||{},e.text=t.text||i,e.background=t.background||n,e}}(t.tooltips),o}(g);!function(t,e){var i;function n(e,i,n,o){if(n){e=Object(h.f)(e,"#"+t+(o?"":" "));var a={};a[i]=n,Object(Tt.b)(e.join(", "),a,t)}}e&&(e.controlbar&&function(e){n([".jw-controlbar .jw-icon-inline.jw-text",".jw-title-primary",".jw-title-secondary"],"color",e.text),e.icons&&(n([".jw-button-color:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:not(.jw-icon-cast)"],"color",e.icons),n([".jw-display-icon-container .jw-button-color"],"color",e.icons),Object(Tt.b)("#".concat(t," .jw-icon-cast google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(e.icons,"}"),t));e.iconsActive&&(n([".jw-display-icon-container .jw-button-color:hover",".jw-display-icon-container .jw-button-color:focus"],"color",e.iconsActive),n([".jw-button-color.jw-toggle:not(.jw-icon-cast)",".jw-button-color:hover:not(.jw-icon-cast)",".jw-button-color:focus:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:hover:not(.jw-icon-cast)"],"color",e.iconsActive),n([".jw-svg-icon-buffer"],"fill",e.icons),Object(Tt.b)("#".concat(t," .jw-icon-cast:hover google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(e.iconsActive,"}"),t),Object(Tt.b)("#".concat(t," .jw-icon-cast:focus google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(e.iconsActive,"}"),t),Object(Tt.b)("#".concat(t," .jw-icon-cast google-cast-launcher.jw-off:focus"),"{--disconnected-color: ".concat(e.iconsActive,"}"),t),Object(Tt.b)("#".concat(t," .jw-icon-cast google-cast-launcher"),"{--connected-color: ".concat(e.iconsActive,"}"),t),Object(Tt.b)("#".concat(t," .jw-icon-cast google-cast-launcher:focus"),"{--connected-color: ".concat(e.iconsActive,"}"),t),Object(Tt.b)("#".concat(t," .jw-icon-cast:hover google-cast-launcher"),"{--connected-color: ".concat(e.iconsActive,"}"),t),Object(Tt.b)("#".concat(t," .jw-icon-cast:focus google-cast-launcher"),"{--connected-color: ".concat(e.iconsActive,"}"),t));n([" .jw-settings-topbar",":not(.jw-state-idle) .jw-controlbar",".jw-flag-audio-player .jw-controlbar"],"background",e.background,!0)}(e.controlbar),e.timeslider&&function(t){var e=t.progress;"none"!==e&&(n([".jw-progress",".jw-knob"],"background-color",e),n([".jw-buffer"],"background-color",Object(Tt.c)(e,50)));n([".jw-rail"],"background-color",t.rail),n([".jw-background-color.jw-slider-time",".jw-slider-time .jw-cue"],"background-color",t.background)}(e.timeslider),e.menus&&(n([".jw-option",".jw-toggle.jw-off",".jw-skip .jw-skip-icon",".jw-nextup-tooltip",".jw-nextup-close",".jw-settings-content-item",".jw-related-title"],"color",(i=e.menus).text),n([".jw-option.jw-active-option",".jw-option:not(.jw-active-option):hover",".jw-option:not(.jw-active-option):focus",".jw-settings-content-item:hover",".jw-nextup-tooltip:hover",".jw-nextup-tooltip:focus",".jw-nextup-close:hover"],"color",i.textActive),n([".jw-nextup",".jw-settings-menu"],"background",i.background)),e.tooltips&&function(t){n([".jw-skip",".jw-tooltip .jw-text",".jw-time-tip .jw-text"],"background-color",t.background),n([".jw-time-tip",".jw-tooltip"],"color",t.background),n([".jw-skip"],"border","none"),n([".jw-skip .jw-text",".jw-skip .jw-icon",".jw-time-tip .jw-text",".jw-tooltip .jw-text"],"color",t.text)}(e.tooltips),e.menus&&function(e){if(e.textActive){var i={color:e.textActive,borderColor:e.textActive,stroke:e.textActive};Object(Tt.b)("#".concat(t," .jw-color-active"),i,t),Object(Tt.b)("#".concat(t," .jw-color-active-hover:hover"),i,t)}if(e.text){var n={color:e.text,borderColor:e.text,stroke:e.text};Object(Tt.b)("#".concat(t," .jw-color-inactive"),n,t),Object(Tt.b)("#".concat(t," .jw-color-inactive-hover:hover"),n,t)}}(e.menus))}(e.get("id"),y),e.set("mediaContainer",f),e.set("iFrame",m.Features.iframe),e.set("activeTab",Object(yt.a)()),e.set("touchMode",Kt&&("string"==typeof c||c>=gt)),bt.a.add(this),e.get("enableGradient")&&!Jt&&Object(Ct.a)(u,"jw-ab-drop-shadow"),this.isSetup=!0,e.trigger("viewSetup",u);var k=document.body.contains(u);k&&bt.a.observe(u),e.set("inDom",k)},this.init=function(){this.updateBounds(),e.on("change:fullscreen",Z),e.on("change:activeTab",R),e.on("change:fullscreen",R),e.on("change:intersectionRatio",R),e.on("change:visibility",U),e.on("instreamMode",(function(t){t?dt():pt()})),R(),1!==bt.a.size()||e.get("visibility")||U(e,1,0);var t=e.player;e.change("state",rt),t.change("controls",q),e.change("streamType",nt),e.change("mediaType",ot),t.change("playlistItem",(function(t,e){lt(t,e)})),o=a=null,T&&m.OS.mobile&&bt.a.addScrollHandler(F),this.checkResized()};var B,V=62,H=!0;function N(){var t=e.get("isFloating"),i=M.top0&&void 0!==arguments[0])||arguments[0],e={x:0,y:0,width:o||0,height:a||0};return I&&t&&(e.height-=I.controlbarHeight()),e},this.setCaptions=function(t){v.clear(),v.setup(e.get("id"),t),v.resize()},this.setIntersection=function(t){var i=Math.round(100*t.intersectionRatio)/100;e.set("intersectionRatio",i),T&&!A()&&(S=S||i>=.5)&&ht(i)},this.stopFloating=function(t,i){if(t&&(T=null,bt.a.removeScrollHandler(F)),Zt===u){Zt=null,e.set("isFloating",!1);var n=function(){Object(Ct.o)(u,"jw-flag-floating"),K(e,e.get("aspectratio")),Object(Tt.d)(u,{backgroundImage:null}),Object(Tt.d)(p,{maxWidth:null,width:null,height:null,left:null,right:null,top:null,bottom:null,margin:null,transform:null,transition:null,"transition-timing-function":null})};i?(Object(Tt.d)(p,{transform:"translateY(-".concat(V-M.top,"px)"),"transition-timing-function":"ease-out"}),setTimeout(n,150)):n(),g.disable(),L()}},this.destroy=function(){e.destroy(),bt.a.unobserve(u),bt.a.remove(this),this.isSetup=!1,this.off(),Object(kt.a)(k),clearTimeout(y),Zt===u&&(Zt=null),_&&(_.destroy(),_=null),C&&(C.destroy(),C=null),I&&I.disable(e),O&&(O.destroy(),u.removeEventListener("mousemove",W),u.removeEventListener("mouseout",X),u.removeEventListener("mouseover",Q),O=null),v.destroy(),i&&(i.destroy(),i=null),Object(Tt.a)(e.get("id")),this.resizeListener&&(this.resizeListener.destroy(),delete this.resizeListener),T&&m.OS.mobile&&bt.a.removeScrollHandler(F)}};function $t(t,e,i){return($t="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,i){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=ae(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(i):o.value}})(t,e,i||t)}function te(t){return(te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ee(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ie(t,e){for(var i=0;ie&&t(),e=n}};function Me(t,e){e.off(d.N,t._onPlayAttempt),e.off(d.fb,t._triggerFirstFrame),e.off(d.S,t._onTime),t.off("change:activeTab",t._onTabVisible)}var Ee=function(t,e){t.change("mediaModel",(function(t,i,n){t._qoeItem&&n&&t._qoeItem.end(n.get("mediaState")),t._qoeItem=new Oe.a,t._qoeItem.getFirstFrame=function(){var t=this.between(d.N,d.H),e=this.between(_e,d.H);return e>0&&e0&&rt(e,t.tracks)}),O).on(d.F,(function(){Promise.resolve().then(at)}),O).on(d.G,O.triggerError,O),Ee(C,B),C.on(d.w,O.triggerError,O),C.on("change:state",(function(t,e,i){Y()||K.call(T,t,e,i)}),this),C.on("change:castState",(function(t,e){O.trigger(d.m,e)})),C.on("change:fullscreen",(function(t,e){O.trigger(d.y,{fullscreen:e}),e&&t.set("playOnViewable",!1)})),C.on("change:volume",(function(t,e){O.trigger(d.V,{volume:e})})),C.on("change:mute",(function(t){O.trigger(d.M,{mute:t.getMute()})})),C.on("change:playbackRate",(function(t,e){O.trigger(d.ab,{playbackRate:e,position:t.get("position")})}));var V=function t(e,i){"clickthrough"!==i&&"interaction"!==i&&"external"!==i||(C.set("playOnViewable",!1),C.off("change:playReason change:pauseReason",t))};function H(t,e){Object(n.u)(e)||C.set("viewable",Math.round(e))}function N(){dt&&(!0!==C.get("autostart")||C.get("playOnViewable")||$("autostart"),dt.flush())}function F(t,e){O.trigger("viewable",{viewable:e}),q()}function q(){if((o.a[0]===e||1===C.get("viewable"))&&"idle"===C.get("state")&&!1===C.get("autostart"))if(!b.primed()&&m.OS.android){var t=b.getTestElement(),i=O.getMute();Promise.resolve().then((function(){return be(t,{muted:i})})).then((function(){"idle"===C.get("state")&&B.preloadVideo()})).catch(Le)}else B.preloadVideo()}function D(t){O._instreamAdapter.noResume=!t,t||et({reason:"viewable"})}function U(t){t||(O.pause({reason:"viewable"}),C.set("playOnViewable",!t))}function W(t,e){var i=Y();if(t.get("playOnViewable")){if(e){var n=t.get("autoPause").pauseAds,o=t.get("pauseReason");J()===d.mb?$("viewable"):i&&!n||"interaction"===o||Z({reason:"viewable"})}else m.OS.mobile&&!i&&(O.pause({reason:"autostart"}),C.set("playOnViewable",!0));m.OS.mobile&&i&&D(e)}}function Q(t,e){var i=t.get("state"),n=Y(),o=t.get("playReason");n?t.get("autoPause").pauseAds?U(e):D(e):i===d.pb||i===d.jb?U(e):i===d.mb&&"playlist"===o&&t.once("change:state",(function(){U(e)}))}function Y(){var t=O._instreamAdapter;return!!t&&t.getState()}function J(){var t=Y();return t||C.get("state")}function Z(t){if(E.cancel(),S=!1,C.get("state")===d.lb)return Promise.resolve();var i=G(t);return C.set("playReason",i),Y()?(e.pauseAd(!1,t),Promise.resolve()):(C.get("state")===d.kb&&(tt(!0),O.setItemIndex(0)),!_&&(_=!0,O.trigger(d.C,{playReason:i,startTime:t&&t.startTime?t.startTime:C.get("playlistItem").starttime}),_=!1,Te()&&!b.primed()&&b.prime(),"playlist"===i&&C.get("autoPause").viewability&&Q(C,C.get("viewable")),x)?(Te()&&!P&&C.get("mediaElement").load(),x=!1,k=null,Promise.resolve()):B.playVideo(i).then(b.played))}function G(t){return t&&t.reason?t.reason:"unknown"}function $(t){if(J()===d.mb){E=g(N);var e=C.get("advertising");(function(t,e){var i=e.cancelable,n=e.muted,o=void 0!==n&&n,a=e.allowMuted,r=void 0!==a&&a,s=e.timeout,l=void 0===s?1e4:s,c=t.getTestElement(),u=o?"muted":"".concat(r);ke[u]||(ke[u]=be(c,{muted:o}).catch((function(t){if(!i.cancelled()&&!1===o&&r)return be(c,{muted:o=!0});throw t})).then((function(){return o?(ke[u]=null,ve):me})).catch((function(t){throw clearTimeout(d),ke[u]=null,t.reason=ye,t})));var d,p=ke[u].then((function(t){if(clearTimeout(d),i.cancelled()){var e=new Error("Autoplay test was cancelled");throw e.reason="cancelled",e}return t})),h=new Promise((function(t,e){d=setTimeout((function(){ke[u]=null;var t=new Error("Autoplay test timed out");t.reason="timeout",e(t)}),l)}));return Promise.race([p,h])})(b,{cancelable:E,muted:O.getMute(),allowMuted:!e||e.autoplayadsmuted}).then((function(e){return C.set("canAutoplay",e),e!==ve||O.getMute()||(C.set("autostartMuted",!0),ut(),C.once("change:autostartMuted",(function(t){t.off("change:viewable",W),O.trigger(d.M,{mute:C.getMute()})}))),O.getMute()&&C.get("enableDefaultCaptions")&&y.selectDefaultIndex(1),Z({reason:t}).catch((function(){O._instreamAdapter||C.set("autostartFailed",!0),k=null}))})).catch((function(t){if(C.set("canAutoplay",ye),C.set("autostart",!1),!E.cancelled()){var e=Object(j.w)(t);O.trigger(d.h,{reason:t.reason,code:e,error:t})}}))}}function tt(t){if(E.cancel(),dt.empty(),Y()){var e=O._instreamAdapter;return e&&(e.noResume=!0),void(k=function(){return B.stopVideo()})}k=null,!t&&(S=!0),_&&(x=!0),C.set("errorEvent",void 0),B.stopVideo()}function et(t){var e=G(t);C.set("pauseReason",e),C.set("playOnViewable","viewable"===e)}function it(t){k=null,E.cancel();var i=Y();if(i&&i!==d.ob)return et(t),void e.pauseAd(!0,t);switch(C.get("state")){case d.lb:return;case d.pb:case d.jb:et(t),B.pause();break;default:_&&(x=!0)}}function nt(t,e){tt(!0),O.setItemIndex(t),O.play(e)}function ot(t){nt(C.get("item")+1,t)}function at(){O.completeCancelled()||(k=O.completeHandler,O.shouldAutoAdvance()?O.nextItem():C.get("repeat")?ot({reason:"repeat"}):(m.OS.iOS&<(!1),C.set("playOnViewable",!1),C.set("state",d.kb),O.trigger(d.cb,{})))}function rt(t,e){t=parseInt(t,10)||0,C.persistVideoSubtitleTrack(t,e),B.subtitles=t,O.trigger(d.k,{tracks:st(),track:t})}function st(){return y.getCaptionsList()}function lt(t){Object(n.o)(t)||(t=!C.get("fullscreen")),C.set("fullscreen",t),O._instreamAdapter&&O._instreamAdapter._adModel&&O._instreamAdapter._adModel.set("fullscreen",t)}function ut(){B.mute=C.getMute(),B.volume=C.get("volume")}C.on("change:playReason change:pauseReason",V),O.on(d.c,(function(t){return V(0,t.playReason)})),O.on(d.b,(function(t){return V(0,t.pauseReason)})),C.on("change:scrubbing",(function(t,e){e?(M=C.get("state")!==d.ob,it()):M&&Z({reason:"interaction"})})),C.on("change:captionsList",(function(t,e){O.trigger(d.l,{tracks:e,track:C.get("captionsIndex")||0})})),C.on("change:mediaModel",(function(t,e){var i=this;t.set("errorEvent",void 0),e.change("mediaState",(function(e,i){var n;t.get("errorEvent")||t.set(d.bb,(n=i)===d.nb||n===d.qb?d.jb:n)}),this),e.change("duration",(function(e,i){if(0!==i){var n=t.get("minDvrWindow"),o=Object(xe.b)(i,n);t.setStreamType(o)}}),this);var n=t.get("item")+1,o="autoplay"===(t.get("related")||{}).oncomplete,a=t.get("playlist")[n];if((a||o)&&P){e.on("change:position",(function t(n,r){var s=a&&!a.daiSetting,l=e.get("duration");s&&r&&l>0&&r>=l-p.b?(e.off("change:position",t,i),B.backgroundLoad(a)):o&&(a=C.get("nextUp"))}),this)}})),(y=new ht(C)).on("all",z,O),R.on("viewSetup",(function(t){Object(a.b)(T,t)})),this.playerReady=function(){v.once(d.hb,(function(){try{!function(){C.change("visibility",H),A.off(),O.trigger(d.gb,{setupTime:0}),C.change("playlist",(function(t,e){if(e.length){var i={playlist:e},o=C.get("feedData");o&&(i.feedData=Object(n.h)({},o)),O.trigger(d.eb,i)}})),C.change("playlistItem",(function(t,e){if(e){var i=e.title,n=e.image;if("mediaSession"in navigator&&window.MediaMetadata&&(i||n))try{navigator.mediaSession.metadata=new window.MediaMetadata({title:i,artist:window.location.hostname,artwork:[{src:n||""}]})}catch(t){}t.set("cues",[]),O.trigger(d.db,{index:C.get("item"),item:e})}})),A.flush(),A.destroy(),A=null,C.change("viewable",F),C.change("viewable",W),C.get("autoPause").viewability?C.change("viewable",Q):C.once("change:autostartFailed change:mute",(function(t){t.off("change:viewable",W)}));N(),C.on("change:itemReady",(function(t,e){e&&dt.flush()}))}()}catch(t){O.triggerError(Object(j.v)(j.m,j.a,t))}})),v.init()},this.preload=q,this.load=function(t,e){var i,n=O._instreamAdapter;switch(n&&(n.noResume=!0),O.trigger("destroyPlugin",{}),tt(!0),E.cancel(),E=g(N),I.cancel(),Te()&&b.prime(),Ie(t)){case"string":C.attributes.item=0,C.attributes.itemReady=!1,I=g((function(t){if(t)return O.updatePlaylist(Object(c.a)(t.playlist),t)})),i=function(t){var e=this;return new Promise((function(i,n){var o=new l.a;o.on(d.eb,(function(t){i(t)})),o.on(d.w,n,e),o.load(t)}))}(t).then(I.async);break;case"object":C.attributes.item=0,i=O.updatePlaylist(Object(c.a)(t),e||{});break;case"number":i=O.setItemIndex(t);break;default:return}i.catch((function(t){O.triggerError(Object(j.u)(t,j.c))})),i.then(E.async).catch(Le)},this.play=function(t){return Z(t).catch(Le)},this.pause=it,this.seek=function(t,e){var i=C.get("state");if(i!==d.lb){B.position=t;var n=i===d.mb;C.get("scrubbing")||!n&&i!==d.kb||(n&&((e=e||{}).startTime=t),this.play(e))}},this.stop=tt,this.playlistItem=nt,this.playlistNext=ot,this.playlistPrev=function(t){nt(C.get("item")-1,t)},this.setCurrentCaptions=rt,this.setCurrentQuality=function(t){B.quality=t},this.setFullscreen=lt,this.getCurrentQuality=function(){return B.quality},this.getQualityLevels=function(){return B.qualities},this.setCurrentAudioTrack=function(t){B.audioTrack=t},this.getCurrentAudioTrack=function(){return B.audioTrack},this.getAudioTracks=function(){return B.audioTracks},this.getCurrentCaptions=function(){return y.getCurrentIndex()},this.getCaptionsList=st,this.getVisualQuality=function(){var t=this._model.get("mediaModel");return t?t.get(d.U):null},this.getConfig=function(){return this._model?this._model.getConfiguration():void 0},this.getState=J,this.next=Le,this.completeHandler=at,this.completeCancelled=function(){return(t=C.get("state"))!==d.mb&&t!==d.kb&&t!==d.lb||!!S&&(S=!1,!0);var t},this.shouldAutoAdvance=function(){return C.get("item")!==C.get("playlist").length-1},this.nextItem=function(){ot({reason:"playlist"})},this.setConfig=function(t){!function(t,e){var i=t._model,n=i.attributes;e.height&&(e.height=Object(r.b)(e.height),e.width=e.width||n.width),e.width&&(e.width=Object(r.b)(e.width),e.aspectratio?(n.width=e.width,delete e.width):e.height=n.height),e.width&&e.height&&!e.aspectratio&&t._view.resize(e.width,e.height),Object.keys(e).forEach((function(o){var a=e[o];if(void 0!==a)switch(o){case"aspectratio":i.set(o,Object(r.a)(a,n.width));break;case"autostart":!function(t,e,i){t.setAutoStart(i),"idle"===t.get("state")&&!0===i&&e.play({reason:"autostart"})}(i,t,a);break;case"mute":t.setMute(a);break;case"volume":t.setVolume(a);break;case"playbackRateControls":case"playbackRates":case"repeat":case"stretching":i.set(o,a)}}))}(O,t)},this.setItemIndex=function(t){B.stopVideo();var e=C.get("playlist").length;return(t=(parseInt(t,10)||0)%e)<0&&(t+=e),B.setActiveItem(t).catch((function(t){t.code>=151&&t.code<=162&&(t=Object(j.u)(t,j.e)),T.triggerError(Object(j.v)(j.k,j.d,t))}))},this.detachMedia=function(){if(_&&(x=!0),C.get("autoPause").viewability&&Q(C,C.get("viewable")),!P)return B.setAttached(!1);B.backgroundActiveMedia()},this.attachMedia=function(){P?B.restoreBackgroundMedia():B.setAttached(!0),"function"==typeof k&&k()},this.routeEvents=function(t){return B.routeEvents(t)},this.forwardEvents=function(){return B.forwardEvents()},this.playVideo=function(t){return B.playVideo(t)},this.stopVideo=function(){return B.stopVideo()},this.castVideo=function(t,e){return B.castVideo(t,e)},this.stopCast=function(){return B.stopCast()},this.backgroundActiveMedia=function(){return B.backgroundActiveMedia()},this.restoreBackgroundMedia=function(){return B.restoreBackgroundMedia()},this.preloadNextItem=function(){B.background.currentMedia&&B.preloadVideo()},this.isBeforeComplete=function(){return B.beforeComplete},this.setVolume=function(t){C.setVolume(t),ut()},this.setMute=function(t){C.setMute(t),ut()},this.setPlaybackRate=function(t){C.setPlaybackRate(t)},this.getProvider=function(){return C.get("provider")},this.getWidth=function(){return C.get("containerWidth")},this.getHeight=function(){return C.get("containerHeight")},this.getItemQoe=function(){return C._qoeItem},this.addButton=function(t,e,i,n,o){var a=C.get("customButtons")||[],r=!1,s={img:t,tooltip:e,callback:i,id:n,btnClass:o};a=a.reduce((function(t,e){return e.id===n?(r=!0,t.push(s)):t.push(e),t}),[]),r||a.unshift(s),C.set("customButtons",a)},this.removeButton=function(t){var e=C.get("customButtons")||[];e=e.filter((function(e){return e.id!==t})),C.set("customButtons",e)},this.resize=v.resize,this.getSafeRegion=v.getSafeRegion,this.setCaptions=v.setCaptions,this.checkBeforePlay=function(){return _},this.setControls=function(t){Object(n.o)(t)||(t=!C.get("controls")),C.set("controls",t),B.controls=t},this.addCues=function(t){this.setCues(C.get("cues").concat(t))},this.setCues=function(t){C.set("cues",t)},this.updatePlaylist=function(t,e){try{var i=Object(c.b)(t,C,e);Object(c.e)(i);var o=Object(n.h)({},e);delete o.playlist,C.set("feedData",o),C.set("playlist",i)}catch(t){return Promise.reject(t)}return this.setItemIndex(C.get("item"))},this.setPlaylistItem=function(t,e){(e=Object(c.d)(C,new u.a(e),e.feedData||{}))&&(C.get("playlist")[t]=e,t===C.get("item")&&"idle"===C.get("state")&&this.setItemIndex(t))},this.playerDestroy=function(){this.off(),this.stop(),Object(a.b)(this,this.originalContainer),v&&v.destroy(),C&&C.destroy(),dt&&dt.destroy(),y&&y.destroy(),B&&B.destroy(),this.instreamDestroy()},this.isBeforePlay=this.checkBeforePlay,this.createInstream=function(){return this.instreamDestroy(),this._instreamAdapter=new ct(this,C,v,b),this._instreamAdapter},this.instreamDestroy=function(){O._instreamAdapter&&(O._instreamAdapter.destroy(),O._instreamAdapter=null)};var dt=new s.a(this,["play","pause","setCurrentAudioTrack","setCurrentCaptions","setCurrentQuality","setFullscreen"],(function(){return!T._model.get("itemReady")||A}));dt.queue.push.apply(dt.queue,f),v.setup()},get:function(t){if(t in y.a){var e=this._model.get("mediaModel");return e?e.get(t):y.a[t]}return this._model.get(t)},getContainer:function(){return this.currentContainer||this.originalContainer},getMute:function(){return this._model.getMute()},triggerError:function(t){var e=this._model;t.message=e.get("localization").errors[t.key],delete t.key,e.set("errorEvent",t),e.set("state",d.lb),e.once("change:state",(function(){this.set("errorEvent",void 0)}),e),this.trigger(d.w,t)}});e.default=Ae},,,,,,,,,,,,function(t,e){!function(t,e){"use strict";if("IntersectionObserver"in t&&"IntersectionObserverEntry"in t&&"intersectionRatio"in t.IntersectionObserverEntry.prototype)"isIntersecting"in t.IntersectionObserverEntry.prototype||Object.defineProperty(t.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var i=[];o.prototype.THROTTLE_TIMEOUT=100,o.prototype.POLL_INTERVAL=null,o.prototype.USE_MUTATION_OBSERVER=!0,o.prototype.observe=function(t){if(!this._observationTargets.some((function(e){return e.element==t}))){if(!t||1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(),this._checkForIntersections()}},o.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter((function(e){return e.element!=t})),this._observationTargets.length||(this._unmonitorIntersections(),this._unregisterInstance())},o.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorIntersections(),this._unregisterInstance()},o.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},o.prototype._initThresholds=function(t){var e=t||[0];return Array.isArray(e)||(e=[e]),e.sort().filter((function(t,e,i){if("number"!=typeof t||isNaN(t)||t<0||t>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==i[e-1]}))},o.prototype._parseRootMargin=function(t){var e=(t||"0px").split(/\s+/).map((function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}}));return e[1]=e[1]||e[0],e[2]=e[2]||e[0],e[3]=e[3]||e[1],e},o.prototype._monitorIntersections=function(){this._monitoringIntersections||(this._monitoringIntersections=!0,this.POLL_INTERVAL?this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL):(a(t,"resize",this._checkForIntersections,!0),a(e,"scroll",this._checkForIntersections,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in t&&(this._domObserver=new MutationObserver(this._checkForIntersections),this._domObserver.observe(e,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))))},o.prototype._unmonitorIntersections=function(){this._monitoringIntersections&&(this._monitoringIntersections=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null,r(t,"resize",this._checkForIntersections,!0),r(e,"scroll",this._checkForIntersections,!0),this._domObserver&&(this._domObserver.disconnect(),this._domObserver=null))},o.prototype._checkForIntersections=function(){var e=this._rootIsInDom(),i=e?this._getRootRect():{top:0,bottom:0,left:0,right:0,width:0,height:0};this._observationTargets.forEach((function(o){var a=o.element,r=s(a),l=this._rootContainsTarget(a),c=o.entry,u=e&&l&&this._computeTargetAndRootIntersection(a,i),d=o.entry=new n({time:t.performance&&performance.now&&performance.now(),target:a,boundingClientRect:r,rootBounds:i,intersectionRect:u});c?e&&l?this._hasCrossedThreshold(c,d)&&this._queuedEntries.push(d):c&&c.isIntersecting&&this._queuedEntries.push(d):this._queuedEntries.push(d)}),this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)},o.prototype._computeTargetAndRootIntersection=function(i,n){if("none"!=t.getComputedStyle(i).display){for(var o,a,r,l,u,d,p,h,w=s(i),f=c(i),g=!1;!g;){var j=null,b=1==f.nodeType?t.getComputedStyle(f):{};if("none"==b.display)return;if(f==this.root||f==e?(g=!0,j=n):f!=e.body&&f!=e.documentElement&&"visible"!=b.overflow&&(j=s(f)),j&&(o=j,a=w,r=void 0,l=void 0,u=void 0,d=void 0,p=void 0,h=void 0,r=Math.max(o.top,a.top),l=Math.min(o.bottom,a.bottom),u=Math.max(o.left,a.left),d=Math.min(o.right,a.right),h=l-r,!(w=(p=d-u)>=0&&h>=0&&{top:r,bottom:l,left:u,right:d,width:p,height:h})))break;f=c(f)}return w}},o.prototype._getRootRect=function(){var t;if(this.root)t=s(this.root);else{var i=e.documentElement,n=e.body;t={top:0,left:0,right:i.clientWidth||n.clientWidth,width:i.clientWidth||n.clientWidth,bottom:i.clientHeight||n.clientHeight,height:i.clientHeight||n.clientHeight}}return this._expandRectByRootMargin(t)},o.prototype._expandRectByRootMargin=function(t){var e=this._rootMarginValues.map((function(e,i){return"px"==e.unit?e.value:e.value*(i%2?t.width:t.height)/100})),i={top:t.top-e[0],right:t.right+e[1],bottom:t.bottom+e[2],left:t.left-e[3]};return i.width=i.right-i.left,i.height=i.bottom-i.top,i},o.prototype._hasCrossedThreshold=function(t,e){var i=t&&t.isIntersecting?t.intersectionRatio||0:-1,n=e.isIntersecting?e.intersectionRatio||0:-1;if(i!==n)for(var o=0;o=0&&(n.metadata.mpegts=o+e)}var a=this.getLiveLatency();null!==a&&(n.latency=a),(this.state===r.pb||this.seeking)&&this.trigger(r.S,n)}},click:function(t){this.trigger(r.n,t)},volumechange:function(){var t=this.video;this.trigger(r.V,{volume:Math.round(100*t.volume)}),this.trigger(r.M,{mute:t.muted})},seeked:function(){this.seeking&&(this.seeking=!1,this.trigger(r.R))},playing:function(){-1===this.stallTime&&this.setState(r.pb),this.trigger(r.fb)},pause:function(){this.state!==r.kb&&(this.video.ended||this.video.error||this.video.currentTime!==this.video.duration&&this.setState(r.ob))},progress:function(){var t=this.getDuration();if(!(t<=0||t===1/0)){var e=this.video.buffered;if(e&&0!==e.length){var i=Object(s.a)(e.end(e.length-1)/t,0,1);this.trigger(r.D,{bufferPercent:100*i,position:this.getCurrentTime(),duration:t,currentTime:this.video.currentTime,seekRange:this.getSeekRange()})}}},ratechange:function(){this.trigger(r.P,{playbackRate:this.video.playbackRate})},ended:function(){this.videoHeight=0,this.streamBitrate=-1,this.state!==r.mb&&this.state!==r.kb&&this.trigger(r.F)},loadeddata:function(){this.renderNatively&&this.setTextTracks(this.video.textTracks)}},c=i(10);function u(t){return t&&t.length?t.end(t.length-1):0}var d={container:null,volume:function(t){this.video.volume=Math.min(Math.max(0,t/100),1)},mute:function(t){this.video.muted=!!t,this.video.muted||this.video.removeAttribute("muted")},resize:function(t,e,i){var n=this.video,a=n.videoWidth,r=n.videoHeight;if(t&&e&&a&&r){var s={objectFit:"",width:"",height:""};if("uniform"===i){var l=t/e,u=a/r,d=Math.abs(l-u);d<.09&&d>.0025&&(s.objectFit="fill",i="exactfit")}if(o.Browser.ie||o.OS.iOS&&o.OS.version.major<9||o.Browser.androidNative)if("uniform"!==i){s.objectFit="contain";var p=t/e,h=a/r,w=1,f=1;"none"===i?w=f=p>h?Math.ceil(100*r/e)/100:Math.ceil(100*a/t)/100:"fill"===i?w=f=p>h?p/h:h/p:"exactfit"===i&&(p>h?(w=p/h,f=1):(w=1,f=h/p)),Object(c.e)(n,"matrix(".concat(w.toFixed(2),", 0, 0, ").concat(f.toFixed(2),", 0, 0)"))}else s.top=s.left=s.margin="",Object(c.e)(n,"");Object(c.d)(n,s)}},getContainer:function(){return this.container},setContainer:function(t){this.container=t,this.video.parentNode!==t&&t.appendChild(this.video)},remove:function(){this.stop(),this.destroy();var t=this.container;t&&t===this.video.parentNode&&t.removeChild(this.video)},atEdgeOfLiveStream:function(){if(!this.isLive())return!1;return u(this.video.buffered)-this.video.currentTime<=2}},p={eventsOn_:function(){},eventsOff_:function(){},attachMedia:function(){this.eventsOn_()},detachMedia:function(){return this.eventsOff_()}},h=i(62),w=i(5),f=i(53),g=i(7),j=i(63),b=i(60),m={TIT2:"title",TT2:"title",WXXX:"url",TPE1:"artist",TP1:"artist",TALB:"album",TAL:"album"};function v(t,e){for(var i,n,o,a=t.length,r="",s=e||0;s>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:r+=String.fromCharCode(i);break;case 12:case 13:n=t[s++],r+=String.fromCharCode((31&i)<<6|63&n);break;case 14:n=t[s++],o=t[s++],r+=String.fromCharCode((15&i)<<12|(63&n)<<6|(63&o)<<0)}return r}function y(t){var e=function(t){for(var e="0x",i=0;i>1|(8323072&e)>>2|(2130706432&e)>>3}function k(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(t,e){if(!("value"in e)&&"data"in e&&e.data instanceof ArrayBuffer){var i=new Uint8Array(e.data),n=i.length;e={value:{key:"",data:""}};for(var o=10;o<14&&o0){var c=v(i.subarray(a,a+=s),0);if("PRIV"===e.value.key){if("com.apple.streaming.transportStreamTimestamp"===c){var u=1&y(i.subarray(a,a+=4)),d=y(i.subarray(a,a+=4))+(u?4294967296:0);e.value.data=d}else e.value.data=v(i,a+1);e.value.info=c}else e.value.info=c,e.value.data=v(i,a+1)}else{var p=i[a];e.value.data=1===p||2===p?function(t,e){for(var i=t.length-1,n="",o=e||0;o=0&&o[a].startTime>e.startTime;a--)i.unshift(o[a]),t.removeCue(o[a]);try{t.addCue(e),i.forEach((function(e){return t.addCue(e)}))}catch(t){console.error(t)}t.mode=n}(e,n)}else try{e.addCue(i)}catch(t){console.error(t)}}function S(t,e){e&&e.length&&Object(n.g)(e,(function(e){if(!(o.Browser.ie&&t&&/^(native|subtitle|cc)/.test(e._id))){o.Browser.ie&&"disabled"===e.mode||(e.mode="disabled",e.mode="hidden");for(var i=e.cues.length;i--;)e.removeCue(e.cues[i]);e.embedded||(e.mode="disabled"),e.inuse=!1}}))}function M(t){return"subtitles"===t||"captions"===t}function E(t){var e,i=Object(b.b)(t,this._unknownCount),o=i.label;if(this._unknownCount=i.unknownCount,this.renderNatively||"metadata"===t.kind){var a=this.video.textTracks;(e=Object(n.k)(a,{label:o}))||(e=this.video.addTextTrack(t.kind,o,t.language||"")),e.default=t.default,e.mode="disabled",e.inuse=!0}else(e=t).data=e.data||[];return e._id||(e._id=Object(b.a)(t,this._textTracks.length)),e}function I(t){this._textTracks.push(t),this._tracksById[t._id]=t}function A(){if(this._textTracks){var t=this._textTracks.filter((function(t){return t.embedded||"subs"===t.groupid}));this._initTextTracks(),t.forEach((function(t){this._tracksById[t._id]=t})),this._textTracks=t}}function L(t){this.triggerActiveCues(t.currentTarget.activeCues)}function z(t,e,i){var n=t.kind;this._cachedVTTCues[t._id]||(this._cachedVTTCues[t._id]={});var o,a=this._cachedVTTCues[t._id];switch(n){case"captions":case"subtitles":o=i||Math.floor(20*e.startTime);var r="_"+e.line,s=Math.floor(20*e.endTime),l=a[o+r]||a[o+1+r]||a[o-1+r];return!(l&&Math.abs(l-s)<=1)&&(a[o+r]=s,!0);case"metadata":var c=e.data?new Uint8Array(e.data).join(""):e.text;return!a[o=i||e.startTime+c]&&(a[o]=e.endTime,!0);default:return!1}}function P(t){if(t.length>this._textTracks.length)return!0;for(var e=0;e=0&&(f.retries=0),f.currentTime=v.currentTime,S&&C!==v.currentTime&&$(v.currentTime),l.timeupdate.call(f),wt(),o.Browser.ie&&G()},resize:G,ended:function(){_=-1,ft(),l.ended.call(f)},loadedmetadata:function(){var t=f.getDuration();P&&t===1/0&&(t=0);var e={metadataType:"media",duration:t,height:v.videoHeight,width:v.videoWidth,seekRange:f.getSeekRange()};f.trigger(r.K,e),G()},durationchange:function(){P||l.progress.call(f)},loadeddata:function(){var t;!function(){if(v.getStartDate){var t=v.getStartDate(),e=t.getTime?t.getTime():NaN;if(e!==f.startDateTime&&!isNaN(e)){f.startDateTime=e;var i=t.toISOString(),n=f.getSeekRange(),o=n.start,a=n.end,s={metadataType:"program-date-time",programDateTime:i,start:o,end:a},l=f.createCue(o,a,JSON.stringify(s));f.addVTTCue({type:"metadata",cue:l}),delete s.metadataType,f.trigger(r.L,{metadataType:"program-date-time",metadata:s})}}}(),l.loadeddata.call(f),function(t){if(E=null,!t)return;if(t.length){for(var e=0;e0&&(e=t.map((function(t,e){return{label:t.label||e}}))),e}function it(t){f.currentTime=-1,j=t.minDvrWindow,m=t.sources,_=function(t){var i=Math.max(0,_),n=e.qualityLabel;if(t)for(var o=0;o0&&(T=-1,f.seek(t)),t>0&&v.currentTime!==t&&f.seek(t);var n=et(m);n&&f.trigger(r.I,{levels:n,currentQuality:_}),m.length&&"hls"!==m[0].type&&ht()}function at(t){E=null,I=-1,y.reason||(y.reason="initial choice",y.level={}),x=!1;var e=document.createElement("source");e.src=t.file,v.src!==e.src&&(v.src=t.file)}function rt(){v&&(f.disableTextTrack(),v.removeAttribute("preload"),v.removeAttribute("src"),Object(w.h)(v),Object(c.d)(v,{objectFit:""}),_=-1,!o.Browser.msie&&"load"in v&&v.load())}function st(){var t=1/0;return["buffered","seekable"].forEach((function(e){for(var i=v[e],o=i?i.length:0;o--;){var a=Math.min(t,i.start(o));Object(n.p)(a)&&(t=a)}})),t}function lt(){var t=0;return["buffered","seekable"].forEach((function(e){for(var i=v[e],o=i?i.length:0;o--;){var a=Math.max(t,i.end(o));Object(n.p)(a)&&(t=a)}})),t}function ct(){for(var t=-1,e=0;e-1&&t1)&&function(t){Y=t.end,J=Math.min(0,v.currentTime-Y),Z=Object(V.a)()}(e),Object(h.a)(e.end-e.start,j))return J}return t}(v.currentTime)},f.getDuration=function(){var t=v.duration;if(P&&t===1/0&&0===v.currentTime||isNaN(t))return 0;var e=lt();if(f.isLive()&&e){var i=e-st();Object(h.a)(i,j)&&(t=-i)}return t},f.getSeekRange=function(){var t={start:0,end:v.duration};return v.seekable.length&&(t.end=lt(),t.start=st()),t},f.getLiveLatency=function(){var t=null,e=lt();return f.isLive()&&e&&(t=e+(Object(V.a)()-Z)/1e3-v.currentTime),t},this.stop=function(){ft(),rt(),this.clearTracks(),o.Browser.ie&&v.pause(),this.setState(r.mb)},this.destroy=function(){M=Q,X(b,v),this.removeTracksListener(v.audioTracks,"change",ct),this.removeTracksListener(v.textTracks,"change",f.textTrackChangeHandler),this.off()},this.init=function(t){f.retries=0,f.maxRetries=t.adType?0:3,it(t);var e=m[_];(P=Object(a.a)(e))&&(f.supportsPlaybackRate=!1,b.waiting=Q),f.eventsOn_(),m.length&&"hls"!==m[0].type&&this.sendMediaType(m),y.reason=""},this.preload=function(t){it(t);var e=m[_],i=e.preload||"metadata";"none"!==i&&(v.setAttribute("preload",i),at(e))},this.load=function(t){it(t),ot(t.starttime),this.setupSideloadedTracks(t.tracks)},this.play=function(){return M(),nt()},this.pause=function(){ft(),M=function(){if(v.paused&&v.currentTime&&f.isLive()){var t=lt(),e=t-st(),i=!Object(h.a)(e,j),o=t-v.currentTime;if(i&&t&&(o>15||o<0)){if(O=Math.max(t-10,t-e),!Object(n.p)(O))return;$(v.currentTime),v.currentTime=O}}},v.pause()},this.seek=function(t){var e=f.getSeekRange(),i=t;if(t<0&&(i+=e.end),x||(x=!!lt()),x){T=0;try{if(f.seeking=!0,f.isLive()&&Object(h.a)(e.end-e.start,j))if(J=Math.min(0,i-Y),t<0)i+=Math.min(12,(Object(V.a)()-Z)/1e3);O=i,$(v.currentTime),v.currentTime=i}catch(t){f.seeking=!1,T=i}}else T=i,o.Browser.firefox&&v.paused&&nt()},this.setVisibility=function(t){(t=!!t)||o.OS.android?Object(c.d)(f.container,{visibility:"visible",opacity:1}):Object(c.d)(f.container,{visibility:"",opacity:0})},this.setFullscreen=function(t){if(t=!!t){try{var e=v.webkitEnterFullscreen||v.webkitEnterFullScreen;e&&e.apply(v)}catch(t){return!1}return f.getFullScreen()}var i=v.webkitExitFullscreen||v.webkitExitFullScreen;return i&&i.apply(v),t},f.getFullScreen=function(){return S||!!v.webkitDisplayingFullscreen},this.setCurrentQuality=function(t){_!==t&&t>=0&&m&&m.length>t&&(_=t,y.reason="api",y.level={},this.trigger(r.J,{currentQuality:t,levels:et(m)}),e.qualityLabel=m[t].label,ot(v.currentTime||0),nt())},this.setPlaybackRate=function(t){v.playbackRate=v.defaultPlaybackRate=t},this.getPlaybackRate=function(){return v.playbackRate},this.getCurrentQuality=function(){return _},this.getQualityLevels=function(){return Array.isArray(m)?m.map((function(t){return function(t){return{bitrate:t.bitrate,label:t.label,width:t.width,height:t.height}}(t)})):[]},this.getName=function(){return{name:W}},this.setCurrentAudioTrack=dt,this.getAudioTracks=function(){return E||[]},this.getCurrentAudioTrack=function(){return I}}Object(n.h)(Y.prototype,f.a),Y.getName=function(){return{name:"html5"}};e.default=Y;var K=220001},,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,i){"use strict";i.d(e,"a",(function(){return o}));var n=i(2);function o(t){var e=[],i=(t=Object(n.i)(t)).split("\r\n\r\n");1===i.length&&(i=t.split("\n\n"));for(var o=0;o0&&(o=0),i.length>o+1&&i[o+1]){var a=i[o],r=a.indexOf(" --\x3e ");r>0&&(e.begin=Object(n.g)(a.substr(0,r)),e.end=Object(n.g)(a.substr(r+5)),e.text=i.slice(o+1).join("\r\n"))}return e}},function(t,e,i){"use strict";i.d(e,"a",(function(){return o})),i.d(e,"b",(function(){return a}));var n=i(5);function o(t){var e=-1;return t>=1280?e=7:t>=960?e=6:t>=800?e=5:t>=640?e=4:t>=540?e=3:t>=420?e=2:t>=320?e=1:t>=250&&(e=0),e}function a(t,e){var i="jw-breakpoint-"+e;Object(n.p)(t,/jw-breakpoint--?\d+/,i)}},function(t,e,i){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i=function(t,e){var i=t[1]||"",n=t[3];if(!n)return i;if(e&&"function"==typeof btoa){var o=(r=n,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */"),a=n.sources.map((function(t){return"/*# sourceURL="+n.sourceRoot+t+" */"}));return[i].concat(a).concat([o]).join("\n")}var r;return[i].join("\n")}(e,t);return e[2]?"@media "+e[2]+"{"+i+"}":i})).join("")},e.i=function(t,i){"string"==typeof t&&(t=[[null,t,""]]);for(var n={},o=0;o1&&(i+=" ["+e+"]")),{label:i,unknownCount:e}}i.d(e,"a",(function(){return n})),i.d(e,"b",(function(){return o}))},function(t,e,i){"use strict";function n(t){return new Promise((function(e,i){if(t.paused)return i(o("NotAllowedError",0,"play() failed."));var n=function(){t.removeEventListener("play",a),t.removeEventListener("playing",r),t.removeEventListener("pause",r),t.removeEventListener("abort",r),t.removeEventListener("error",r)},a=function(){t.addEventListener("playing",r),t.addEventListener("abort",r),t.addEventListener("error",r),t.addEventListener("pause",r)},r=function(t){if(n(),"playing"===t.type)e();else{var a='The play() request was interrupted by a "'.concat(t.type,'" event.');"error"===t.type?i(o("NotSupportedError",9,a)):i(o("AbortError",20,a))}};t.addEventListener("play",a)}))}function o(t,e,i){var n=new Error(i);return n.name=t,n.code=e,n}i.d(e,"a",(function(){return n}))},function(t,e,i){"use strict";function n(t,e){return t!==1/0&&Math.abs(t)>=Math.max(a(e),0)}function o(t,e){var i="VOD";return t===1/0?i="LIVE":t<0&&(i=n(t,a(e))?"DVR":"LIVE"),i}function a(t){return void 0===t?120:Math.max(t,0)}i.d(e,"a",(function(){return n})),i.d(e,"b",(function(){return o}))},function(t,e,i){"use strict";var n=i(64),o=i(16),a=i(22),r=i(4),s=i(57),l=i(2),c=i(1);function u(t){throw new c.n(null,t)}function d(t,e,n){t.xhr=Object(a.a)(t.file,(function(a){!function(t,e,n,a){var d,p,w=t.responseXML?t.responseXML.firstChild:null;if(w)for("xml"===Object(r.b)(w)&&(w=w.nextSibling);w.nodeType===w.COMMENT_NODE;)w=w.nextSibling;try{if(w&&"tt"===Object(r.b)(w))d=function(t){t||u(306007);var e=[],i=t.getElementsByTagName("p"),n=30,o=t.getElementsByTagName("tt");if(o&&o[0]){var a=parseFloat(o[0].getAttribute("ttp:frameRate"));isNaN(a)||(n=a)}i||u(306005),i.length||(i=t.getElementsByTagName("tt:p")).length||(i=t.getElementsByTagName("tts:p"));for(var r=0;r\s+<").replace(/(<\/?)tts?:/g,"$1").replace(//g,"\r\n");if(w){var f=s.getAttribute("begin"),g=s.getAttribute("dur"),j=s.getAttribute("end"),b={begin:Object(l.g)(f,n),text:w};j?b.end=Object(l.g)(j,n):g&&(b.end=b.begin+Object(l.g)(g,n)),e.push(b)}}return e.length||u(306005),e}(t.responseXML),p=h(d),delete e.xhr,n(p);else{var f=t.responseText;f.indexOf("WEBVTT")>=0?i.e(10).then(function(t){return i(92).default}.bind(null,i)).catch(Object(o.c)(301131)).then((function(t){var i=new t(window);p=[],i.oncue=function(t){p.push(t)},i.onflush=function(){delete e.xhr,n(p)},i.parse(f)})).catch((function(t){delete e.xhr,a(Object(c.v)(null,c.b,t))})):(d=Object(s.a)(f),p=h(d),delete e.xhr,n(p))}}catch(t){delete e.xhr,a(Object(c.v)(null,c.b,t))}}(a,t,e,n)}),(function(t,e,i,o){n(Object(c.u)(o,c.b))}))}function p(t){t&&t.forEach((function(t){var e=t.xhr;e&&(e.onload=null,e.onreadystatechange=null,e.onerror=null,"abort"in e&&e.abort()),delete t.xhr}))}function h(t){return t.map((function(t){return new n.a(t.begin,t.end,t.text)}))}i.d(e,"c",(function(){return d})),i.d(e,"a",(function(){return p})),i.d(e,"b",(function(){return h}))},function(t,e,i){"use strict";var n=window.VTTCue;function o(t){if("string"!=typeof t)return!1;return!!{start:!0,middle:!0,end:!0,left:!0,right:!0}[t.toLowerCase()]&&t.toLowerCase()}if(!n){(n=function(t,e,i){var n=this;n.hasBeenReset=!1;var a="",r=!1,s=t,l=e,c=i,u=null,d="",p=!0,h="auto",w="start",f="auto",g=100,j="middle";Object.defineProperty(n,"id",{enumerable:!0,get:function(){return a},set:function(t){a=""+t}}),Object.defineProperty(n,"pauseOnExit",{enumerable:!0,get:function(){return r},set:function(t){r=!!t}}),Object.defineProperty(n,"startTime",{enumerable:!0,get:function(){return s},set:function(t){if("number"!=typeof t)throw new TypeError("Start time must be set to a number.");s=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"endTime",{enumerable:!0,get:function(){return l},set:function(t){if("number"!=typeof t)throw new TypeError("End time must be set to a number.");l=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"text",{enumerable:!0,get:function(){return c},set:function(t){c=""+t,this.hasBeenReset=!0}}),Object.defineProperty(n,"region",{enumerable:!0,get:function(){return u},set:function(t){u=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"vertical",{enumerable:!0,get:function(){return d},set:function(t){var e=function(t){return"string"==typeof t&&(!!{"":!0,lr:!0,rl:!0}[t.toLowerCase()]&&t.toLowerCase())}(t);if(!1===e)throw new SyntaxError("An invalid or illegal string was specified.");d=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"snapToLines",{enumerable:!0,get:function(){return p},set:function(t){p=!!t,this.hasBeenReset=!0}}),Object.defineProperty(n,"line",{enumerable:!0,get:function(){return h},set:function(t){if("number"!=typeof t&&"auto"!==t)throw new SyntaxError("An invalid number or illegal string was specified.");h=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"lineAlign",{enumerable:!0,get:function(){return w},set:function(t){var e=o(t);if(!e)throw new SyntaxError("An invalid or illegal string was specified.");w=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"position",{enumerable:!0,get:function(){return f},set:function(t){if(t<0||t>100)throw new Error("Position must be between 0 and 100.");f=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"size",{enumerable:!0,get:function(){return g},set:function(t){if(t<0||t>100)throw new Error("Size must be between 0 and 100.");g=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"align",{enumerable:!0,get:function(){return j},set:function(t){var e=o(t);if(!e)throw new SyntaxError("An invalid or illegal string was specified.");j=e,this.hasBeenReset=!0}}),n.displayState=void 0}).prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)}}e.a=n},function(t,e,i){var n=i(66);"string"==typeof n&&(n=[["all-players",n,""]]),i(35).style(n,"all-players"),n.locals&&(t.exports=n.locals)},function(t,e,i){(t.exports=i(59)(!1)).push([t.i,'.jw-reset{text-align:left;direction:ltr}.jw-reset-text,.jw-reset{color:inherit;background-color:transparent;padding:0;margin:0;float:none;font-family:Arial,Helvetica,sans-serif;font-size:1em;line-height:1em;list-style:none;text-transform:none;vertical-align:baseline;border:0;font-variant:inherit;font-stretch:inherit;-webkit-tap-highlight-color:rgba(255,255,255,0)}body .jw-error,body .jwplayer.jw-state-error{height:100%;width:100%}.jw-title{position:absolute;top:0}.jw-background-color{background:rgba(0,0,0,0.4)}.jw-text{color:rgba(255,255,255,0.8)}.jw-knob{color:rgba(255,255,255,0.8);background-color:#fff}.jw-button-color{color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):focus,:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):hover{color:#fff}.jw-toggle{color:#fff}.jw-toggle.jw-off{color:rgba(255,255,255,0.8)}.jw-toggle.jw-off:focus{color:#fff}.jw-toggle:focus{outline:none}:not(.jw-flag-touch) .jw-toggle.jw-off:hover{color:#fff}.jw-rail{background:rgba(255,255,255,0.3)}.jw-buffer{background:rgba(255,255,255,0.3)}.jw-progress{background:#f2f2f2}.jw-time-tip,.jw-volume-tip{border:0}.jw-slider-volume.jw-volume-tip.jw-background-color.jw-slider-vertical{background:none}.jw-skip{padding:.5em;outline:none}.jw-skip .jw-skiptext,.jw-skip .jw-skip-icon{color:rgba(255,255,255,0.8)}.jw-skip.jw-skippable:hover .jw-skip-icon,.jw-skip.jw-skippable:focus .jw-skip-icon{color:#fff}.jw-icon-cast google-cast-launcher{--connected-color:#fff;--disconnected-color:rgba(255,255,255,0.8)}.jw-icon-cast google-cast-launcher:focus{outline:none}.jw-icon-cast google-cast-launcher.jw-off{--connected-color:rgba(255,255,255,0.8)}.jw-icon-cast:focus google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-icon-cast:hover google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-nextup-container{bottom:2.5em;padding:5px .5em}.jw-nextup{border-radius:0}.jw-color-active{color:#fff;stroke:#fff;border-color:#fff}:not(.jw-flag-touch) .jw-color-active-hover:hover,:not(.jw-flag-touch) .jw-color-active-hover:focus{color:#fff;stroke:#fff;border-color:#fff}.jw-color-inactive{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-color-inactive-hover:hover{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}.jw-option{color:rgba(255,255,255,0.8)}.jw-option.jw-active-option{color:#fff;background-color:rgba(255,255,255,0.1)}:not(.jw-flag-touch) .jw-option:hover{color:#fff}.jwplayer{width:100%;font-size:16px;position:relative;display:block;min-height:0;overflow:hidden;box-sizing:border-box;font-family:Arial,Helvetica,sans-serif;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.jwplayer *{box-sizing:inherit}.jwplayer.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jwplayer.jw-flag-aspect-mode{height:auto !important}.jwplayer.jw-flag-aspect-mode .jw-aspect{display:block}.jwplayer .jw-aspect{display:none}.jwplayer .jw-swf{outline:none}.jw-media,.jw-preview{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}.jw-media{overflow:hidden;cursor:pointer}.jw-plugin{position:absolute;bottom:66px}.jw-breakpoint-7 .jw-plugin{bottom:132px}.jw-plugin .jw-banner{max-width:100%;opacity:0;cursor:pointer;position:absolute;margin:auto auto 0;left:0;right:0;bottom:0;display:block}.jw-preview,.jw-captions,.jw-title{pointer-events:none}.jw-media,.jw-logo{pointer-events:all}.jw-wrapper{background-color:#000;position:absolute;top:0;left:0;right:0;bottom:0}.jw-hidden-accessibility{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.jw-contract-trigger::before{content:"";overflow:hidden;width:200%;height:200%;display:block;position:absolute;top:0;left:0}.jwplayer .jw-media video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:auto;background:transparent}.jwplayer .jw-media video::-webkit-media-controls-start-playback-button{display:none}.jwplayer.jw-stretch-uniform .jw-media video{object-fit:contain}.jwplayer.jw-stretch-none .jw-media video{object-fit:none}.jwplayer.jw-stretch-fill .jw-media video{object-fit:cover}.jwplayer.jw-stretch-exactfit .jw-media video{object-fit:fill}.jw-preview{position:absolute;display:none;opacity:1;visibility:visible;width:100%;height:100%;background:#000 no-repeat 50% 50%}.jwplayer .jw-preview,.jw-error .jw-preview{background-size:contain}.jw-stretch-none .jw-preview{background-size:auto auto}.jw-stretch-fill .jw-preview{background-size:cover}.jw-stretch-exactfit .jw-preview{background-size:100% 100%}.jw-title{display:none;padding-top:20px;width:100%;z-index:1}.jw-title-primary,.jw-title-secondary{color:#fff;padding-left:20px;padding-right:20px;padding-bottom:.5em;overflow:hidden;text-overflow:ellipsis;direction:unset;white-space:nowrap;width:100%}.jw-title-primary{font-size:1.625em}.jw-breakpoint-2 .jw-title-primary,.jw-breakpoint-3 .jw-title-primary{font-size:1.5em}.jw-flag-small-player .jw-title-primary{font-size:1.25em}.jw-flag-small-player .jw-title-secondary,.jw-title-secondary:empty{display:none}.jw-captions{position:absolute;width:100%;height:100%;text-align:center;display:none;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-decoration:none;pointer-events:none;overflow:hidden;top:0}.jw-captions.jw-captions-enabled{display:block}.jw-captions-window{display:none;padding:.25em;border-radius:.25em}.jw-captions-window.jw-captions-window-active{display:inline-block}.jw-captions-text{display:inline-block;color:#fff;background-color:#000;word-wrap:normal;word-break:normal;white-space:pre-line;font-style:normal;font-weight:normal;text-align:center;text-decoration:none}.jw-text-track-display{font-size:inherit;line-height:1.5}.jw-text-track-cue{background-color:rgba(0,0,0,0.5);color:#fff;padding:.1em .3em}.jwplayer video::-webkit-media-controls{display:none;justify-content:flex-start}.jwplayer video::-webkit-media-text-track-display{min-width:-webkit-min-content}.jwplayer video::cue{background-color:rgba(0,0,0,0.5)}.jwplayer video::-webkit-media-controls-panel-container{display:none}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing) .jw-captions,.jwplayer.jw-flag-media-audio.jw-state-playing .jw-captions,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden) .jw-captions{max-height:calc(100% - 60px)}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-flag-media-audio.jw-state-playing:not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container{max-height:calc(100% - 60px)}.jw-logo{position:absolute;margin:20px;cursor:pointer;pointer-events:all;background-repeat:no-repeat;background-size:contain;top:auto;right:auto;left:auto;bottom:auto;outline:none}.jw-logo.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-flag-audio-player .jw-logo{display:none}.jw-logo-top-right{top:0;right:0}.jw-logo-top-left{top:0;left:0}.jw-logo-bottom-left{left:0}.jw-logo-bottom-right{right:0}.jw-logo-bottom-left,.jw-logo-bottom-right{bottom:44px;transition:bottom 150ms cubic-bezier(0, .25, .25, 1)}.jw-state-idle .jw-logo{z-index:1}.jw-state-setup .jw-wrapper{background-color:inherit}.jw-state-setup .jw-logo,.jw-state-setup .jw-controls,.jw-state-setup .jw-controls-backdrop{visibility:hidden}span.jw-break{display:block}body .jw-error,body .jwplayer.jw-state-error{background-color:#333;color:#fff;font-size:16px;display:table;opacity:1;position:relative}body .jw-error .jw-display,body .jwplayer.jw-state-error .jw-display{display:none}body .jw-error .jw-media,body .jwplayer.jw-state-error .jw-media{cursor:default}body .jw-error .jw-preview,body .jwplayer.jw-state-error .jw-preview{background-color:#333}body .jw-error .jw-error-msg,body .jwplayer.jw-state-error .jw-error-msg{background-color:#000;border-radius:2px;display:flex;flex-direction:row;align-items:stretch;padding:20px}body .jw-error .jw-error-msg .jw-icon,body .jwplayer.jw-state-error .jw-error-msg .jw-icon{height:30px;width:30px;margin-right:20px;flex:0 0 auto;align-self:center}body .jw-error .jw-error-msg .jw-icon:empty,body .jwplayer.jw-state-error .jw-error-msg .jw-icon:empty{display:none}body .jw-error .jw-error-msg .jw-info-container,body .jwplayer.jw-state-error .jw-error-msg .jw-info-container{margin:0;padding:0}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg{flex-direction:column}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text{text-align:center}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon{flex:.5 0 auto;margin-right:0;margin-bottom:20px}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break{display:inline}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break:before{content:" "}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg{height:100%;width:100%;top:0;position:absolute;left:0;background:#000;-webkit-transform:none;transform:none;padding:4px 16px;z-index:1}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg.jw-info-overlay{max-width:none;max-height:none}body .jwplayer.jw-state-error .jw-title,.jw-state-idle .jw-title,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-title{display:block}body .jwplayer.jw-state-error .jw-preview,.jw-state-idle .jw-preview,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-preview{display:block}.jw-state-idle .jw-captions,.jwplayer.jw-state-complete .jw-captions,body .jwplayer.jw-state-error .jw-captions{display:none}.jw-state-idle video::-webkit-media-text-track-container,.jwplayer.jw-state-complete video::-webkit-media-text-track-container,body .jwplayer.jw-state-error video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-fullscreen{width:100% !important;height:100% !important;top:0;right:0;bottom:0;left:0;z-index:1000;margin:0;position:fixed}body .jwplayer.jw-flag-flash-blocked .jw-title{display:block}.jwplayer.jw-flag-controls-hidden .jw-media{cursor:default}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:45px}.jw-flag-floating{background-size:cover;background-color:#000}.jw-flag-floating .jw-wrapper{position:fixed;z-index:2147483647;-webkit-animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;top:auto;bottom:1rem;left:auto;right:1rem;max-width:400px;max-height:400px;margin:0 auto}@media screen and (max-width:480px){.jw-flag-floating .jw-wrapper{width:100%;left:0;right:0}}.jw-flag-floating .jw-wrapper .jw-media{touch-action:none}@media screen and (max-device-width:480px) and (orientation:portrait){.jw-flag-touch.jw-flag-floating .jw-wrapper{-webkit-animation:none;animation:none;top:62px;bottom:auto;left:0;right:0;max-width:none;max-height:none}}.jw-flag-floating .jw-float-icon{pointer-events:all;cursor:pointer;display:none}.jw-flag-floating .jw-float-icon .jw-svg-icon{-webkit-filter:drop-shadow(0 0 1px #000);filter:drop-shadow(0 0 1px #000)}.jw-flag-floating.jw-floating-dismissible .jw-dismiss-icon{display:none}.jw-flag-floating.jw-floating-dismissible.jw-flag-ads .jw-float-icon{display:flex}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-logo,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-logo{display:none}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-float-icon,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-float-icon{display:flex}.jw-float-icon{display:none;position:absolute;top:3px;right:5px;align-items:center;justify-content:center}@-webkit-keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.jw-flag-top{margin-top:2em;overflow:visible}.jw-top{height:2em;line-height:2;pointer-events:none;text-align:center;opacity:.8;position:absolute;top:-2em;width:100%}.jw-top .jw-icon{cursor:pointer;pointer-events:all;height:auto;width:auto}.jw-top .jw-text{color:#555}',""])},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e,i){var n=i(91);"string"==typeof n&&(n=[["all-players",n,""]]),i(35).style(n,"all-players"),n.locals&&(t.exports=n.locals)},function(t,e,i){(t.exports=i(59)(!1)).push([t.i,'.jw-overlays,.jw-controls,.jw-controls-backdrop,.jw-flag-small-player .jw-settings-menu,.jw-settings-submenu{height:100%;width:100%}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-settings-menu .jw-icon.jw-button-color::after{position:absolute;right:0}.jw-overlays,.jw-controls,.jw-controls-backdrop,.jw-settings-item-active::before{top:0;position:absolute;left:0}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-settings-menu .jw-icon.jw-button-color::after{position:absolute;bottom:0;left:0}.jw-nextup-close{position:absolute;top:0;right:0}.jw-overlays,.jw-controls,.jw-flag-small-player .jw-settings-menu{position:absolute;bottom:0;right:0}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-time-tip::after,.jw-settings-menu .jw-icon.jw-button-color::after,.jw-text-live::before,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{content:"";display:block}.jw-svg-icon{height:24px;width:24px;fill:currentColor;pointer-events:none}.jw-icon{height:44px;width:44px;background-color:transparent;outline:none}.jw-icon.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-icon-airplay .jw-svg-icon-airplay-off{display:none}.jw-off.jw-icon-airplay .jw-svg-icon-airplay-off{display:block}.jw-icon-airplay .jw-svg-icon-airplay-on{display:block}.jw-off.jw-icon-airplay .jw-svg-icon-airplay-on{display:none}.jw-icon-cc .jw-svg-icon-cc-off{display:none}.jw-off.jw-icon-cc .jw-svg-icon-cc-off{display:block}.jw-icon-cc .jw-svg-icon-cc-on{display:block}.jw-off.jw-icon-cc .jw-svg-icon-cc-on{display:none}.jw-icon-fullscreen .jw-svg-icon-fullscreen-off{display:none}.jw-off.jw-icon-fullscreen .jw-svg-icon-fullscreen-off{display:block}.jw-icon-fullscreen .jw-svg-icon-fullscreen-on{display:block}.jw-off.jw-icon-fullscreen .jw-svg-icon-fullscreen-on{display:none}.jw-icon-volume .jw-svg-icon-volume-0{display:none}.jw-off.jw-icon-volume .jw-svg-icon-volume-0{display:block}.jw-icon-volume .jw-svg-icon-volume-100{display:none}.jw-full.jw-icon-volume .jw-svg-icon-volume-100{display:block}.jw-icon-volume .jw-svg-icon-volume-50{display:block}.jw-off.jw-icon-volume .jw-svg-icon-volume-50,.jw-full.jw-icon-volume .jw-svg-icon-volume-50{display:none}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon[aria-checked="true"]::after,.jw-settings-open .jw-icon-settings::after,.jw-icon-volume.jw-open::after{opacity:1}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-cc,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-settings,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-audio-tracks,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-hd,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-settings-sharing,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-fullscreen,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player).jw-flag-cast-available .jw-icon-airplay,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player).jw-flag-cast-available .jw-icon-cast{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-volume,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-text-live{bottom:6px}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-volume::after{display:none}.jw-overlays,.jw-controls{pointer-events:none}.jw-controls-backdrop{display:block;background:linear-gradient(to bottom, transparent, rgba(0,0,0,0.4) 77%, rgba(0,0,0,0.4) 100%) 100% 100% / 100% 240px no-repeat transparent;transition:opacity 250ms cubic-bezier(0, .25, .25, 1),background-size 250ms cubic-bezier(0, .25, .25, 1);pointer-events:none}.jw-overlays{cursor:auto}.jw-controls{overflow:hidden}.jw-flag-small-player .jw-controls{text-align:center}.jw-text{height:1em;font-family:Arial,Helvetica,sans-serif;font-size:.75em;font-style:normal;font-weight:normal;color:#fff;text-align:center;font-variant:normal;font-stretch:normal}.jw-controlbar,.jw-skip,.jw-display-icon-container .jw-icon,.jw-nextup-container,.jw-autostart-mute,.jw-overlays .jw-plugin{pointer-events:all}.jwplayer .jw-display-icon-container,.jw-error .jw-display-icon-container{width:auto;height:auto;box-sizing:content-box}.jw-display{display:table;height:100%;padding:57px 0;position:relative;width:100%}.jw-flag-dragging .jw-display{display:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-display-container{display:table-cell;height:100%;text-align:center;vertical-align:middle}.jw-display-controls{display:inline-block}.jwplayer .jw-display-icon-container{float:left}.jw-display-icon-container{display:inline-block;padding:5.5px;margin:0 22px}.jw-display-icon-container .jw-icon{height:75px;width:75px;cursor:pointer;display:flex;justify-content:center;align-items:center}.jw-display-icon-container .jw-icon .jw-svg-icon{height:33px;width:33px;padding:0;position:relative}.jw-display-icon-container .jw-icon .jw-svg-icon-rewind{padding:.2em .05em}.jw-breakpoint--1 .jw-nextup-container{display:none}.jw-breakpoint-0 .jw-display-icon-next,.jw-breakpoint--1 .jw-display-icon-next,.jw-breakpoint-0 .jw-display-icon-rewind,.jw-breakpoint--1 .jw-display-icon-rewind{display:none}.jw-breakpoint-0 .jw-display .jw-icon,.jw-breakpoint--1 .jw-display .jw-icon,.jw-breakpoint-0 .jw-display .jw-svg-icon,.jw-breakpoint--1 .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px}.jw-breakpoint-0 .jw-display .jw-icon:before,.jw-breakpoint--1 .jw-display .jw-icon:before,.jw-breakpoint-0 .jw-display .jw-svg-icon:before,.jw-breakpoint--1 .jw-display .jw-svg-icon:before{width:22px;height:22px}.jw-breakpoint-1 .jw-display .jw-icon,.jw-breakpoint-1 .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px}.jw-breakpoint-1 .jw-display .jw-icon:before,.jw-breakpoint-1 .jw-display .jw-svg-icon:before{width:22px;height:22px}.jw-breakpoint-1 .jw-display .jw-icon.jw-icon-rewind:before{width:33px;height:33px}.jw-breakpoint-2 .jw-display .jw-icon,.jw-breakpoint-3 .jw-display .jw-icon,.jw-breakpoint-2 .jw-display .jw-svg-icon,.jw-breakpoint-3 .jw-display .jw-svg-icon{width:77px;height:77px;line-height:77px}.jw-breakpoint-2 .jw-display .jw-icon:before,.jw-breakpoint-3 .jw-display .jw-icon:before,.jw-breakpoint-2 .jw-display .jw-svg-icon:before,.jw-breakpoint-3 .jw-display .jw-svg-icon:before{width:38.5px;height:38.5px}.jw-breakpoint-4 .jw-display .jw-icon,.jw-breakpoint-5 .jw-display .jw-icon,.jw-breakpoint-6 .jw-display .jw-icon,.jw-breakpoint-7 .jw-display .jw-icon,.jw-breakpoint-4 .jw-display .jw-svg-icon,.jw-breakpoint-5 .jw-display .jw-svg-icon,.jw-breakpoint-6 .jw-display .jw-svg-icon,.jw-breakpoint-7 .jw-display .jw-svg-icon{width:88px;height:88px;line-height:88px}.jw-breakpoint-4 .jw-display .jw-icon:before,.jw-breakpoint-5 .jw-display .jw-icon:before,.jw-breakpoint-6 .jw-display .jw-icon:before,.jw-breakpoint-7 .jw-display .jw-icon:before,.jw-breakpoint-4 .jw-display .jw-svg-icon:before,.jw-breakpoint-5 .jw-display .jw-svg-icon:before,.jw-breakpoint-6 .jw-display .jw-svg-icon:before,.jw-breakpoint-7 .jw-display .jw-svg-icon:before{width:44px;height:44px}.jw-controlbar{display:flex;flex-flow:row wrap;align-items:center;justify-content:center;position:absolute;left:0;bottom:0;width:100%;border:none;border-radius:0;background-size:auto;box-shadow:none;max-height:72px;transition:250ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s}.jw-breakpoint-7 .jw-controlbar{max-height:140px}.jw-breakpoint-7 .jw-controlbar .jw-button-container{padding:0 48px 20px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-tooltip{margin-bottom:-7px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume .jw-overlay{padding-bottom:40%}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-text{font-size:1em}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-text.jw-text-elapsed{justify-content:flex-end}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-inline,.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume{height:60px;width:60px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-inline .jw-svg-icon,.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-controlbar .jw-slider-time{padding:0 60px;height:34px}.jw-breakpoint-7 .jw-controlbar .jw-slider-time .jw-slider-container{height:10px}.jw-controlbar .jw-button-image{background:no-repeat 50% 50%;background-size:contain;max-height:24px}.jw-controlbar .jw-spacer{flex:1 1 auto;align-self:stretch}.jw-controlbar .jw-icon.jw-button-color:hover{color:#fff}.jw-button-container{display:flex;flex-flow:row nowrap;flex:1 1 auto;align-items:center;justify-content:center;width:100%;padding:0 12px}.jw-slider-horizontal{background-color:transparent}.jw-icon-inline{position:relative}.jw-icon-inline,.jw-icon-tooltip{height:44px;width:44px;align-items:center;display:flex;justify-content:center}.jw-icon-inline:not(.jw-text),.jw-icon-tooltip,.jw-slider-horizontal{cursor:pointer}.jw-text-elapsed,.jw-text-duration{justify-content:flex-start;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.jw-icon-tooltip{position:relative}.jw-knob:hover,.jw-icon-inline:hover,.jw-icon-tooltip:hover,.jw-icon-display:hover,.jw-option:before:hover{color:#fff}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{pointer-events:none}.jw-icon-cast{display:none;margin:0;padding:0}.jw-icon-cast google-cast-launcher{background-color:transparent;border:none;padding:0;width:24px;height:24px;cursor:pointer}.jw-icon-inline.jw-icon-volume{display:none}.jwplayer .jw-text-countdown{display:none}.jw-flag-small-player .jw-display{padding-top:0;padding-bottom:0}.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-rewind,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-next,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-playback{display:none}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop{opacity:0}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-countdown{display:flex}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-duration,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-duration{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-text-countdown,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-related-btn,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-slider-volume{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-controlbar{flex-direction:column-reverse}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-button-container{height:30px}.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-volume,.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-fullscreen{display:none}.jwplayer:not(.jw-breakpoint-0) .jw-text-duration:before,.jwplayer:not(.jw-breakpoint--1) .jw-text-duration:before{content:"/";padding-right:1ch;padding-left:1ch}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar{will-change:transform}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar .jw-text{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.jw-slider-container{display:flex;align-items:center;position:relative;touch-action:none}.jw-rail,.jw-buffer,.jw-progress{position:absolute;cursor:pointer}.jw-progress{background-color:#f2f2f2}.jw-rail{background-color:rgba(255,255,255,0.3)}.jw-buffer{background-color:rgba(255,255,255,0.3)}.jw-knob{height:13px;width:13px;background-color:#fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,0.4);opacity:1;pointer-events:none;position:absolute;-webkit-transform:translate(-50%, -50%) scale(0);transform:translate(-50%, -50%) scale(0);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform}.jw-flag-dragging .jw-slider-time .jw-knob,.jw-icon-volume:active .jw-slider-volume .jw-knob{box-shadow:0 0 26px rgba(0,0,0,0.2),0 0 10px rgba(0,0,0,0.4),0 0 0 6px rgba(255,255,255,0.2)}.jw-slider-horizontal,.jw-slider-vertical{display:flex}.jw-slider-horizontal .jw-slider-container{height:5px;width:100%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue,.jw-slider-horizontal .jw-knob{top:50%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue{-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress{height:5px}.jw-slider-horizontal .jw-rail{width:100%}.jw-slider-vertical{align-items:center;flex-direction:column}.jw-slider-vertical .jw-slider-container{height:88px;width:5px}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress,.jw-slider-vertical .jw-knob{left:50%}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress{height:100%;width:5px;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out;bottom:0}.jw-slider-vertical .jw-knob{-webkit-transform:translate(-50%, 50%);transform:translate(-50%, 50%)}.jw-slider-time.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-slider-time,.jw-flag-audio-player .jw-slider-volume{height:17px;width:100%;align-items:center;background:transparent none;padding:0 12px}.jw-slider-time .jw-cue{background-color:rgba(33,33,33,0.8);cursor:pointer;position:absolute;width:6px}.jw-slider-time,.jw-horizontal-volume-container{z-index:1;outline:none}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail,.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer,.jw-slider-time .jw-progress,.jw-horizontal-volume-container .jw-progress,.jw-slider-time .jw-cue,.jw-horizontal-volume-container .jw-cue{-webkit-backface-visibility:hidden;backface-visibility:hidden;height:100%;-webkit-transform:translate(0, -50%) scale(1, .6);transform:translate(0, -50%) scale(1, .6);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}.jw-slider-time:hover .jw-rail,.jw-horizontal-volume-container:hover .jw-rail,.jw-slider-time:focus .jw-rail,.jw-horizontal-volume-container:focus .jw-rail,.jw-flag-dragging .jw-slider-time .jw-rail,.jw-flag-dragging .jw-horizontal-volume-container .jw-rail,.jw-flag-touch .jw-slider-time .jw-rail,.jw-flag-touch .jw-horizontal-volume-container .jw-rail,.jw-slider-time:hover .jw-buffer,.jw-horizontal-volume-container:hover .jw-buffer,.jw-slider-time:focus .jw-buffer,.jw-horizontal-volume-container:focus .jw-buffer,.jw-flag-dragging .jw-slider-time .jw-buffer,.jw-flag-dragging .jw-horizontal-volume-container .jw-buffer,.jw-flag-touch .jw-slider-time .jw-buffer,.jw-flag-touch .jw-horizontal-volume-container .jw-buffer,.jw-slider-time:hover .jw-progress,.jw-horizontal-volume-container:hover .jw-progress,.jw-slider-time:focus .jw-progress,.jw-horizontal-volume-container:focus .jw-progress,.jw-flag-dragging .jw-slider-time .jw-progress,.jw-flag-dragging .jw-horizontal-volume-container .jw-progress,.jw-flag-touch .jw-slider-time .jw-progress,.jw-flag-touch .jw-horizontal-volume-container .jw-progress,.jw-slider-time:hover .jw-cue,.jw-horizontal-volume-container:hover .jw-cue,.jw-slider-time:focus .jw-cue,.jw-horizontal-volume-container:focus .jw-cue,.jw-flag-dragging .jw-slider-time .jw-cue,.jw-flag-dragging .jw-horizontal-volume-container .jw-cue,.jw-flag-touch .jw-slider-time .jw-cue,.jw-flag-touch .jw-horizontal-volume-container .jw-cue{-webkit-transform:translate(0, -50%) scale(1, 1);transform:translate(0, -50%) scale(1, 1)}.jw-slider-time:hover .jw-knob,.jw-horizontal-volume-container:hover .jw-knob,.jw-slider-time:focus .jw-knob,.jw-horizontal-volume-container:focus .jw-knob{-webkit-transform:translate(-50%, -50%) scale(1);transform:translate(-50%, -50%) scale(1)}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail{background-color:rgba(255,255,255,0.2)}.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer{background-color:rgba(255,255,255,0.4)}.jw-flag-touch .jw-slider-time::before,.jw-flag-touch .jw-horizontal-volume-container::before{height:44px;width:100%;content:"";position:absolute;display:block;bottom:calc(100% - 17px);left:0}.jw-slider-time.jw-tab-focus:focus .jw-rail,.jw-horizontal-volume-container.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time{height:17px;padding:0}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-slider-container{height:10px}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-knob{border-radius:0;border:1px solid rgba(0,0,0,0.75);height:12px;width:10px}.jw-modal{width:284px}.jw-breakpoint-7 .jw-modal,.jw-breakpoint-6 .jw-modal,.jw-breakpoint-5 .jw-modal{height:232px}.jw-breakpoint-4 .jw-modal,.jw-breakpoint-3 .jw-modal{height:192px}.jw-breakpoint-2 .jw-modal,.jw-flag-small-player .jw-modal{bottom:0;right:0;height:100%;width:100%;max-height:none;max-width:none;z-index:2}.jwplayer .jw-rightclick{display:none;position:absolute;white-space:nowrap}.jwplayer .jw-rightclick.jw-open{display:block}.jwplayer .jw-rightclick .jw-rightclick-list{border-radius:1px;list-style:none;margin:0;padding:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item{background-color:rgba(0,0,0,0.8);border-bottom:1px solid #444;margin:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo{color:#fff;display:inline-flex;padding:0 10px 0 0;vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo .jw-svg-icon{height:20px;width:20px}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-link{border:none;color:#fff;display:block;font-size:11px;line-height:1em;padding:15px 23px;text-align:start;text-decoration:none;width:100%}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:last-child{border-bottom:none}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:hover{cursor:pointer}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured{vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link{color:#fff}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link span{color:#fff}.jwplayer .jw-rightclick .jw-info-overlay-item,.jwplayer .jw-rightclick .jw-share-item,.jwplayer .jw-rightclick .jw-shortcuts-item{border:none;background-color:transparent;outline:none;cursor:pointer}.jw-icon-tooltip.jw-open .jw-overlay{opacity:1;pointer-events:auto;transition-delay:0s}.jw-icon-tooltip.jw-open .jw-overlay:focus{outline:none}.jw-icon-tooltip.jw-open .jw-overlay:focus.jw-tab-focus{outline:solid 2px #4d90fe}.jw-slider-time .jw-overlay:before{height:1em;top:auto}.jw-slider-time .jw-icon-tooltip.jw-open .jw-overlay{pointer-events:none}.jw-volume-tip{padding:13px 0 26px}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{height:auto;width:100%;box-shadow:0 0 10px rgba(0,0,0,0.4);color:#fff;display:block;margin:0 0 14px;pointer-events:none;position:relative;z-index:0}.jw-time-tip::after,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{top:100%;position:absolute;left:50%;height:14px;width:14px;border-radius:1px;background-color:currentColor;-webkit-transform-origin:75% 50%;transform-origin:75% 50%;-webkit-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);z-index:-1}.jw-time-tip .jw-text,.jw-controlbar .jw-tooltip .jw-text,.jw-settings-menu .jw-tooltip .jw-text{background-color:#fff;border-radius:1px;color:#000;font-size:10px;height:auto;line-height:1;padding:7px 10px;display:inline-block;min-width:100%;vertical-align:middle}.jw-controlbar .jw-overlay{position:absolute;bottom:100%;left:50%;margin:0;min-height:44px;min-width:44px;opacity:0;pointer-events:none;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s, 150ms;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);width:100%;z-index:1}.jw-controlbar .jw-overlay .jw-contents{position:relative}.jw-controlbar .jw-option{position:relative;white-space:nowrap;cursor:pointer;list-style:none;height:1.5em;font-family:inherit;line-height:1.5em;padding:0 .5em;font-size:.8em;margin:0}.jw-controlbar .jw-option::before{padding-right:.125em}.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{position:absolute;bottom:100%;left:50%;opacity:0;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:100ms 0s cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility, -webkit-transform;transition-property:opacity, transform, visibility;transition-property:opacity, transform, visibility, -webkit-transform;visibility:hidden;white-space:nowrap;width:auto;z-index:1}.jw-controlbar .jw-tooltip.jw-open,.jw-settings-menu .jw-tooltip.jw-open{opacity:1;-webkit-transform:translate(-50%, -10px);transform:translate(-50%, -10px);transition-duration:150ms;transition-delay:500ms,0s,500ms;visibility:visible}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen{left:auto;right:0;-webkit-transform:translate(0, 0);transform:translate(0, 0)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen.jw-open,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen.jw-open{-webkit-transform:translate(0, -10px);transform:translate(0, -10px)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen::after,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen::after{left:auto;right:9px}.jw-tooltip-time{height:auto;width:0;bottom:100%;line-height:normal;padding:0;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jw-tooltip-time .jw-overlay{bottom:0;min-height:0;width:auto}.jw-tooltip{bottom:57px;display:none;position:absolute}.jw-tooltip .jw-text{height:100%;white-space:nowrap;text-overflow:ellipsis;direction:unset;max-width:246px;overflow:hidden}.jw-flag-audio-player .jw-tooltip{display:none}.jw-flag-small-player .jw-time-thumb{display:none}.jwplayer .jw-shortcuts-tooltip{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column;z-index:1}.jwplayer .jw-shortcuts-tooltip.jw-open{display:flex}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-close{flex:0 0 auto;margin:5px 5px 5px auto}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container{display:flex;flex:1 1 auto;flex-flow:column;font-size:12px;margin:0 20px 20px;overflow-y:auto;padding:5px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar{background-color:transparent;width:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-title{font-weight:bold}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list{display:flex;max-width:340px;margin:0 10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-tooltip-descriptions{width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row{display:flex;align-items:center;justify-content:space-between;margin:10px 0;width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-description{margin-right:10px;max-width:70%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-key{background:#fefefe;color:#333;overflow:hidden;padding:7px 10px;text-overflow:ellipsis;white-space:nowrap}.jw-skip{color:rgba(255,255,255,0.8);cursor:default;position:absolute;display:flex;right:.75em;bottom:56px;padding:.5em;border:1px solid #333;background-color:#000;align-items:center;height:2em}.jw-skip.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-skip.jw-skippable{cursor:pointer;padding:.25em .75em}.jw-skip.jw-skippable:hover{cursor:pointer;color:#fff}.jw-skip.jw-skippable .jw-skip-icon{display:inline;height:24px;width:24px;margin:0}.jw-breakpoint-7 .jw-skip{padding:1.35em 1em;bottom:130px}.jw-breakpoint-7 .jw-skip .jw-text{font-size:1em;font-weight:normal}.jw-breakpoint-7 .jw-skip .jw-icon-inline{height:30px;width:30px}.jw-breakpoint-7 .jw-skip .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-skip .jw-skip-icon{display:none;margin-left:-0.75em;padding:0 .5em;pointer-events:none}.jw-skip .jw-skip-icon .jw-svg-icon-next{display:block;padding:0}.jw-skip .jw-text,.jw-skip .jw-skip-icon{vertical-align:middle;font-size:.7em}.jw-skip .jw-text{font-weight:bold}.jw-cast{background-size:cover;display:none;height:100%;position:relative;width:100%}.jw-cast-container{background:linear-gradient(180deg, rgba(25,25,25,0.75), rgba(25,25,25,0.25), rgba(25,25,25,0));left:0;padding:20px 20px 80px;position:absolute;top:0;width:100%}.jw-cast-text{color:#fff;font-size:1.6em}.jw-breakpoint--1 .jw-cast-text,.jw-breakpoint-0 .jw-cast-text{font-size:1.15em}.jw-breakpoint-1 .jw-cast-text,.jw-breakpoint-2 .jw-cast-text,.jw-breakpoint-3 .jw-cast-text{font-size:1.3em}.jw-nextup-container{position:absolute;bottom:66px;left:0;background-color:transparent;cursor:pointer;margin:0 auto;padding:12px;pointer-events:none;right:0;text-align:right;visibility:hidden;width:100%}.jw-settings-open .jw-nextup-container,.jw-info-open .jw-nextup-container{display:none}.jw-breakpoint-7 .jw-nextup-container{padding:60px}.jw-flag-small-player .jw-nextup-container{padding:0 12px 0 0}.jw-flag-small-player .jw-nextup-container .jw-nextup-title,.jw-flag-small-player .jw-nextup-container .jw-nextup-duration,.jw-flag-small-player .jw-nextup-container .jw-nextup-close{display:none}.jw-flag-small-player .jw-nextup-container .jw-nextup-tooltip{height:30px}.jw-flag-small-player .jw-nextup-container .jw-nextup-header{font-size:12px}.jw-flag-small-player .jw-nextup-container .jw-nextup-body{justify-content:center;align-items:center;padding:.75em .3em}.jw-flag-small-player .jw-nextup-container .jw-nextup-thumbnail{width:50%}.jw-flag-small-player .jw-nextup-container .jw-nextup{max-width:65px}.jw-flag-small-player .jw-nextup-container .jw-nextup.jw-nextup-thumbnail-visible{max-width:120px}.jw-nextup{background:#333;border-radius:0;box-shadow:0 0 10px rgba(0,0,0,0.5);color:rgba(255,255,255,0.8);display:inline-block;max-width:280px;overflow:hidden;opacity:0;position:relative;width:64%;pointer-events:all;-webkit-transform:translate(0, -5px);transform:translate(0, -5px);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform;transition-delay:0s}.jw-nextup:hover .jw-nextup-tooltip{color:#fff}.jw-nextup.jw-nextup-thumbnail-visible{max-width:400px}.jw-nextup.jw-nextup-thumbnail-visible .jw-nextup-thumbnail{display:block}.jw-nextup-container-visible{visibility:visible}.jw-nextup-container-visible .jw-nextup{opacity:1;-webkit-transform:translate(0, 0);transform:translate(0, 0);transition-delay:0s, 0s, 150ms}.jw-nextup-tooltip{display:flex;height:80px}.jw-nextup-thumbnail{width:120px;background-position:center;background-size:cover;flex:0 0 auto;display:none}.jw-nextup-body{flex:1 1 auto;overflow:hidden;padding:.75em .875em;display:flex;flex-flow:column wrap;justify-content:space-between}.jw-nextup-header,.jw-nextup-title{font-size:14px;line-height:1.35}.jw-nextup-header{font-weight:bold}.jw-nextup-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.jw-nextup-duration{align-self:flex-end;text-align:right;font-size:12px}.jw-nextup-close{height:24px;width:24px;border:none;color:rgba(255,255,255,0.8);cursor:pointer;margin:6px;visibility:hidden}.jw-nextup-close:hover{color:#fff}.jw-nextup-sticky .jw-nextup-close{visibility:visible}.jw-autostart-mute{position:absolute;bottom:0;right:12px;height:44px;width:44px;background-color:rgba(33,33,33,0.4);padding:5px 4px 5px 6px;display:none}.jwplayer.jw-flag-autostart:not(.jw-flag-media-audio) .jw-nextup{display:none}.jw-settings-menu{position:absolute;bottom:57px;right:12px;align-items:flex-start;background-color:#333;display:none;flex-flow:column nowrap;max-width:284px;pointer-events:auto}.jw-settings-open .jw-settings-menu{display:flex}.jw-breakpoint-7 .jw-settings-menu{bottom:130px;right:60px;max-height:none;max-width:none;height:35%;width:25%}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline{height:60px;width:60px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-tooltip .jw-text{font-size:1em}.jw-breakpoint-6 .jw-settings-menu,.jw-breakpoint-5 .jw-settings-menu{height:232px;width:284px;max-height:232px}.jw-breakpoint-4 .jw-settings-menu,.jw-breakpoint-3 .jw-settings-menu{height:192px;width:284px;max-height:192px}.jw-breakpoint-2 .jw-settings-menu{height:179px;width:284px;max-height:179px}.jw-flag-small-player .jw-settings-menu{max-width:none}.jw-settings-menu .jw-icon.jw-button-color::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon.jw-button-color[aria-checked="true"]::after{opacity:1}.jw-settings-topbar{align-items:center;background-color:rgba(0,0,0,0.4);display:flex;flex:0 0 auto;padding:3px 5px 0;width:100%}.jw-settings-topbar .jw-settings-close{margin-left:auto}.jw-settings-submenu{display:none;flex:1 1 auto;overflow-y:auto;padding:8px 20px 0 5px}.jw-settings-submenu::-webkit-scrollbar{background-color:transparent;width:6px}.jw-settings-submenu::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-settings-submenu.jw-settings-submenu-active{display:block}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item{font-size:1em;padding:11px 0 11px 30px}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-settings-item-active::before{justify-content:flex-end}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-auto-label{font-size:.85em;padding-left:10px}.jw-flag-touch .jw-settings-submenu{overflow-y:scroll;-webkit-overflow-scrolling:touch}.jw-auto-label{font-size:10px;font-weight:initial;opacity:.75;padding-left:5px}.jw-settings-content-item{position:relative;color:rgba(255,255,255,0.8);cursor:pointer;font-size:12px;line-height:1;padding:7px 0 7px 15px;width:100%;text-align:left;outline:none}.jw-settings-content-item:hover{color:#fff}.jw-settings-content-item:focus{font-weight:bold}.jw-flag-small-player .jw-settings-content-item{line-height:1.75}.jw-settings-content-item.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-settings-item-active{font-weight:bold;position:relative}.jw-settings-item-active::before{height:100%;width:1em;align-items:center;content:"\\2022";display:inline-flex;justify-content:center}.jw-breakpoint-2 .jw-settings-open .jw-display-container,.jw-flag-small-player .jw-settings-open .jw-display-container,.jw-flag-touch .jw-settings-open .jw-display-container{display:none}.jw-breakpoint-2 .jw-settings-open.jw-controls,.jw-flag-small-player .jw-settings-open.jw-controls,.jw-flag-touch .jw-settings-open.jw-controls{z-index:1}.jw-flag-small-player .jw-settings-open .jw-controlbar{display:none}.jw-settings-open .jw-icon-settings::after{opacity:1}.jw-settings-open .jw-tooltip-settings{display:none}.jw-sharing-link{cursor:pointer}.jw-shortcuts-container .jw-switch{position:relative;display:inline-block;transition:ease-out .15s;transition-property:opacity, background;border-radius:18px;width:80px;height:20px;padding:10px;background:rgba(80,80,80,0.8);cursor:pointer;font-size:inherit;vertical-align:middle}.jw-shortcuts-container .jw-switch .jw-switch-knob{position:absolute;top:2px;left:1px;transition:ease-out .15s;box-shadow:0 0 10px rgba(0,0,0,0.4);border-radius:13px;width:15px;height:15px;background:#fefefe}.jw-shortcuts-container .jw-switch:before,.jw-shortcuts-container .jw-switch:after{position:absolute;top:3px;transition:inherit;color:#fefefe}.jw-shortcuts-container .jw-switch:before{content:attr(data-jw-switch-disabled);right:8px}.jw-shortcuts-container .jw-switch:after{content:attr(data-jw-switch-enabled);left:8px;opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]{background:#475470}.jw-shortcuts-container .jw-switch[aria-checked="true"]:before{opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]:after{opacity:1}.jw-shortcuts-container .jw-switch[aria-checked="true"] .jw-switch-knob{left:60px}.jw-idle-icon-text{display:none;line-height:1;position:absolute;text-align:center;text-indent:.35em;top:100%;white-space:nowrap;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.jw-idle-label{border-radius:50%;color:#fff;-webkit-filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));font:normal 16px/1 Arial,Helvetica,sans-serif;position:relative;transition:background-color 150ms cubic-bezier(0, .25, .25, 1);transition-property:background-color,-webkit-filter;transition-property:background-color,filter;transition-property:background-color,filter,-webkit-filter;-webkit-font-smoothing:antialiased}.jw-state-idle .jw-icon-display.jw-idle-label .jw-idle-icon-text{display:block}.jw-state-idle .jw-icon-display.jw-idle-label .jw-svg-icon-play{-webkit-transform:scale(.7, .7);transform:scale(.7, .7)}.jw-breakpoint-0.jw-state-idle .jw-icon-display.jw-idle-label,.jw-breakpoint--1.jw-state-idle .jw-icon-display.jw-idle-label{font-size:12px}.jw-info-overlay{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column}.jw-info-overlay .jw-info-close{flex:0 0 auto;margin:5px 5px 5px auto}.jw-info-open .jw-info-overlay{display:flex}.jw-info-container{display:flex;flex:1 1 auto;flex-flow:column;margin:0 20px 20px;overflow-y:auto;padding:5px}.jw-info-container [class*="jw-info"]:not(:first-of-type){color:rgba(255,255,255,0.8);padding-top:10px;font-size:12px}.jw-info-container .jw-info-description{margin-bottom:30px;text-align:start}.jw-info-container .jw-info-description:empty{display:none}.jw-info-container .jw-info-duration{text-align:start}.jw-info-container .jw-info-title{text-align:start;font-size:12px;font-weight:bold}.jw-info-container::-webkit-scrollbar{background-color:transparent;width:6px}.jw-info-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-info-clientid{align-self:flex-end;font-size:12px;color:rgba(255,255,255,0.8);margin:0 20px 20px 44px;text-align:right}.jw-flag-touch .jw-info-open .jw-display-container{display:none}@supports ((-webkit-filter: drop-shadow(0 0 3px #000)) or (filter: drop-shadow(0 0 3px #000))){.jwplayer.jw-ab-drop-shadow .jw-controls .jw-svg-icon,.jwplayer.jw-ab-drop-shadow .jw-controls .jw-icon.jw-text,.jwplayer.jw-ab-drop-shadow .jw-slider-container .jw-rail,.jwplayer.jw-ab-drop-shadow .jw-title{text-shadow:none;box-shadow:none;-webkit-filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3));filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3))}.jwplayer.jw-ab-drop-shadow .jw-button-color{opacity:.8;transition-property:color, opacity}.jwplayer.jw-ab-drop-shadow .jw-button-color:not(:hover){color:#fff;opacity:.8}.jwplayer.jw-ab-drop-shadow .jw-button-color:hover{opacity:1}.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0), hsla(0, 0%, 0%, 0.00787) 10.79%, hsla(0, 0%, 0%, 0.02963) 21.99%, hsla(0, 0%, 0%, 0.0625) 33.34%, hsla(0, 0%, 0%, 0.1037) 44.59%, hsla(0, 0%, 0%, 0.15046) 55.48%, hsla(0, 0%, 0%, 0.2) 65.75%, hsla(0, 0%, 0%, 0.24954) 75.14%, hsla(0, 0%, 0%, 0.2963) 83.41%, hsla(0, 0%, 0%, 0.3375) 90.28%, hsla(0, 0%, 0%, 0.37037) 95.51%, hsla(0, 0%, 0%, 0.39213) 98.83%, hsla(0, 0%, 0%, 0.4));mix-blend-mode:multiply;transition-property:opacity}.jw-state-idle.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0.2), hsla(0, 0%, 0%, 0.19606) 1.17%, hsla(0, 0%, 0%, 0.18519) 4.49%, hsla(0, 0%, 0%, 0.16875) 9.72%, hsla(0, 0%, 0%, 0.14815) 16.59%, hsla(0, 0%, 0%, 0.12477) 24.86%, hsla(0, 0%, 0%, 0.1) 34.25%, hsla(0, 0%, 0%, 0.07523) 44.52%, hsla(0, 0%, 0%, 0.05185) 55.41%, hsla(0, 0%, 0%, 0.03125) 66.66%, hsla(0, 0%, 0%, 0.01481) 78.01%, hsla(0, 0%, 0%, 0.00394) 89.21%, hsla(0, 0%, 0%, 0));background-size:100% 7rem;background-position:50% 0}.jwplayer.jw-ab-drop-shadow.jw-state-idle .jw-controls{background-color:transparent}}.jw-video-thumbnail-container{position:relative;overflow:hidden}.jw-video-thumbnail-container:not(.jw-related-shelf-item-image){height:100%;width:100%}.jw-video-thumbnail-container.jw-video-thumbnail-generated{position:absolute;top:0;left:0}.jw-video-thumbnail-container:hover,.jw-related-item-content:hover .jw-video-thumbnail-container,.jw-related-shelf-item:hover .jw-video-thumbnail-container{cursor:pointer}.jw-video-thumbnail-container:hover .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-item-content:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-shelf-item:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail{position:absolute;top:50%;left:50%;bottom:unset;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:100%;height:auto;min-width:100%;min-height:100%;opacity:0;transition:opacity .3s ease;object-fit:cover;background:#000}.jw-related-item-next-up .jw-video-thumbnail-container .jw-video-thumbnail{height:100%;width:auto}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-visible:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-completed{opacity:0}.jw-video-thumbnail-container .jw-video-thumbnail~.jw-svg-icon-play{display:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-shelf-item-aspect{pointer-events:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-item-poster-content{pointer-events:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-state-idle .jw-controls{background:rgba(0,0,0,0.4)}.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay),.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay){display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon:focus{border:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon .jw-svg-icon-buffer{-webkit-animation:jw-spin 2s linear infinite;animation:jw-spin 2s linear infinite;display:block}@-webkit-keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jwplayer.jw-state-buffering .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-pause{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-pause{display:block}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-controls-backdrop{opacity:0}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-logo-bottom-left,.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio):not(.jw-flag-autostart) .jw-logo-bottom-right{bottom:0}.jwplayer .jw-icon-playback .jw-svg-icon-stop{display:none}.jwplayer.jw-state-paused .jw-svg-icon-pause,.jwplayer.jw-state-idle .jw-svg-icon-pause,.jwplayer.jw-state-error .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-svg-icon-pause{display:none}.jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-complete .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-play{display:none}.jwplayer:not(.jw-state-buffering) .jw-svg-icon-buffer{display:none}.jwplayer:not(.jw-state-complete) .jw-svg-icon-replay{display:none}.jwplayer:not(.jw-state-error) .jw-svg-icon-error{display:none}.jwplayer.jw-state-complete .jw-display .jw-icon-display .jw-svg-icon-replay{display:block}.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-state-complete .jw-controls{background:rgba(0,0,0,0.4);height:100%}.jw-state-idle .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-state-idle .jw-display-icon-rewind,.jwplayer.jw-state-buffering .jw-display-icon-rewind,.jwplayer.jw-state-complete .jw-display-icon-rewind,body .jw-error .jw-display-icon-rewind,body .jwplayer.jw-state-error .jw-display-icon-rewind,.jw-state-idle .jw-display-icon-next,.jwplayer.jw-state-buffering .jw-display-icon-next,.jwplayer.jw-state-complete .jw-display-icon-next,body .jw-error .jw-display-icon-next,body .jwplayer.jw-state-error .jw-display-icon-next{display:none}body .jw-error .jw-icon-display,body .jwplayer.jw-state-error .jw-icon-display{cursor:default}body .jw-error .jw-icon-display .jw-svg-icon-error,body .jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-error{display:block}body .jw-error .jw-icon-container{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-preview{display:none}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title{padding-top:4px}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-primary{width:auto;display:inline-block;padding-right:.5ch}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-secondary{width:auto;display:inline-block;padding-left:0}body .jwplayer.jw-state-error .jw-controlbar,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-controlbar{display:none}body .jwplayer.jw-state-error .jw-settings-menu,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-settings-menu{height:100%;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}body .jwplayer.jw-state-error .jw-display,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-display{padding:0}body .jwplayer.jw-state-error .jw-logo-bottom-left,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-left,body .jwplayer.jw-state-error .jw-logo-bottom-right,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-right{bottom:0}.jwplayer.jw-state-playing.jw-flag-user-inactive .jw-display{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-state-playing:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display,.jwplayer.jw-state-paused:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting):not(.jw-flag-play-rejected) .jw-display{display:none}.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-rewind,.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-next{display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-text,.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-flag-casting:not(.jw-flag-audio-player) .jw-cast{display:block}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-display-icon-container{display:none}.jwplayer.jw-flag-casting .jw-icon-hd,.jwplayer.jw-flag-casting .jw-captions,.jwplayer.jw-flag-casting .jw-icon-fullscreen,.jwplayer.jw-flag-casting .jw-icon-audio-tracks{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-volume{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-airplay{color:#fff}.jw-state-playing.jw-flag-casting:not(.jw-flag-audio-player) .jw-display,.jw-state-paused.jw-flag-casting:not(.jw-flag-audio-player) .jw-display{display:table}.jwplayer.jw-flag-cast-available .jw-icon-cast,.jwplayer.jw-flag-cast-available .jw-icon-airplay{display:flex}.jwplayer.jw-flag-cardboard-available .jw-icon-cardboard{display:flex}.jwplayer.jw-flag-live .jw-display-icon-rewind{visibility:hidden}.jwplayer.jw-flag-live .jw-controlbar .jw-text-elapsed,.jwplayer.jw-flag-live .jw-controlbar .jw-text-duration,.jwplayer.jw-flag-live .jw-controlbar .jw-text-countdown,.jwplayer.jw-flag-live .jw-controlbar .jw-slider-time{display:none}.jwplayer.jw-flag-live .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-live .jw-controlbar .jw-overlay:after{display:none}.jwplayer.jw-flag-live .jw-nextup-container{bottom:44px}.jwplayer.jw-flag-live .jw-text-elapsed,.jwplayer.jw-flag-live .jw-text-duration{display:none}.jwplayer.jw-flag-live .jw-text-live{cursor:default}.jwplayer.jw-flag-live .jw-text-live:hover{color:rgba(255,255,255,0.8)}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-stop,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-stop{display:block}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-text-live{height:24px;width:auto;align-items:center;border-radius:1px;color:rgba(255,255,255,0.8);display:flex;font-size:12px;font-weight:bold;margin-right:10px;padding:0 1ch;text-rendering:geometricPrecision;text-transform:uppercase;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:box-shadow,color}.jw-text-live::before{height:8px;width:8px;background-color:currentColor;border-radius:50%;margin-right:6px;opacity:1;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-text-live.jw-dvr-live{box-shadow:inset 0 0 0 2px currentColor}.jw-text-live.jw-dvr-live::before{opacity:.5}.jw-text-live.jw-dvr-live:hover{color:#fff}.jwplayer.jw-flag-controls-hidden .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-controls-hidden:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-controls-hidden .jw-plugin{bottom:.5em}.jwplayer.jw-flag-controls-hidden .jw-nextup-container{bottom:0}.jw-flag-controls-hidden .jw-controlbar,.jw-flag-controls-hidden .jw-display{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-controls-hidden .jw-controls-backdrop{opacity:0}.jw-flag-controls-hidden .jw-logo{visibility:visible}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-plugin{bottom:.5em}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-nextup-container{bottom:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-controls-hidden) .jw-media{cursor:none;-webkit-cursor-visibility:auto-hide}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing.jw-flag-casting .jw-display{display:table}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-ads) .jw-autostart-mute{display:flex}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting .jw-nextup-container{bottom:66px}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting.jw-state-idle .jw-nextup-container{display:none}.jw-flag-media-audio .jw-preview{display:block}.jwplayer.jw-flag-ads .jw-preview,.jwplayer.jw-flag-ads .jw-logo,.jwplayer.jw-flag-ads .jw-captions.jw-captions-enabled,.jwplayer.jw-flag-ads .jw-nextup-container,.jwplayer.jw-flag-ads .jw-text-duration,.jwplayer.jw-flag-ads .jw-text-elapsed{display:none}.jwplayer.jw-flag-ads video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-rewind,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-next,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-display{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player.jw-state-buffering .jw-display-icon-display{display:inline-block}.jwplayer.jw-flag-ads .jw-controlbar{flex-wrap:wrap-reverse}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time{height:auto;padding:0;pointer-events:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-slider-container{height:5px}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-rail,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-knob,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-buffer,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-cue,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-icon-settings{display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-progress{-webkit-transform:none;transform:none;top:auto}.jwplayer.jw-flag-ads .jw-controlbar .jw-tooltip,.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-tooltip:not(.jw-icon-volume),.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-inline:not(.jw-icon-playback):not(.jw-icon-fullscreen):not(.jw-icon-volume){display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-volume-tip{padding:13px 0}.jwplayer.jw-flag-ads .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid) .jw-controls .jw-controlbar,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart .jw-controls .jw-controlbar{display:flex;pointer-events:all;visibility:visible;opacity:1}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-user-inactive .jw-controls-backdrop,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart.jw-flag-user-inactive .jw-controls-backdrop{opacity:1;background-size:100% 60px}.jwplayer.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-ads-vpaid .jw-skip,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-skip{display:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls{background:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls::after{content:none}.jwplayer.jw-flag-ads-hide-controls .jw-controls-backdrop,.jwplayer.jw-flag-ads-hide-controls .jw-controls{display:none !important}.jw-flag-overlay-open-related .jw-controls,.jw-flag-overlay-open-related .jw-title,.jw-flag-overlay-open-related .jw-logo{display:none}.jwplayer.jw-flag-rightclick-open{overflow:visible}.jwplayer.jw-flag-rightclick-open .jw-rightclick{z-index:16777215}body .jwplayer.jw-flag-flash-blocked .jw-controls,body .jwplayer.jw-flag-flash-blocked .jw-overlays,body .jwplayer.jw-flag-flash-blocked .jw-controls-backdrop,body .jwplayer.jw-flag-flash-blocked .jw-preview{display:none}body .jwplayer.jw-flag-flash-blocked .jw-error-msg{top:25%}.jw-flag-touch.jw-breakpoint-7 .jw-captions,.jw-flag-touch.jw-breakpoint-6 .jw-captions,.jw-flag-touch.jw-breakpoint-5 .jw-captions,.jw-flag-touch.jw-breakpoint-4 .jw-captions,.jw-flag-touch.jw-breakpoint-7 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-6 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-5 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-4 .jw-nextup-container{bottom:4.25em}.jw-flag-touch .jw-controlbar .jw-icon-volume{display:flex}.jw-flag-touch .jw-display,.jw-flag-touch .jw-display-container,.jw-flag-touch .jw-display-controls{pointer-events:none}.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-rewind,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-rewind{display:none}.jw-flag-touch.jw-state-paused.jw-flag-dragging .jw-display{display:none}.jw-flag-audio-player{background-color:#000}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:44px}.jw-flag-audio-player:not(.jw-flag-live) .jw-spacer{display:none}.jw-flag-audio-player .jw-preview,.jw-flag-audio-player .jw-display,.jw-flag-audio-player .jw-title,.jw-flag-audio-player .jw-nextup-container{display:none}.jw-flag-audio-player .jw-controlbar{position:relative}.jw-flag-audio-player .jw-controlbar .jw-button-container{padding-right:3px;padding-left:0}.jw-flag-audio-player .jw-controlbar .jw-icon-tooltip,.jw-flag-audio-player .jw-controlbar .jw-icon-inline{display:none}.jw-flag-audio-player .jw-controlbar .jw-icon-volume,.jw-flag-audio-player .jw-controlbar .jw-icon-playback,.jw-flag-audio-player .jw-controlbar .jw-icon-next,.jw-flag-audio-player .jw-controlbar .jw-icon-rewind,.jw-flag-audio-player .jw-controlbar .jw-icon-cast,.jw-flag-audio-player .jw-controlbar .jw-text-live,.jw-flag-audio-player .jw-controlbar .jw-icon-airplay,.jw-flag-audio-player .jw-controlbar .jw-logo-button,.jw-flag-audio-player .jw-controlbar .jw-text-elapsed,.jw-flag-audio-player .jw-controlbar .jw-text-duration{display:flex;flex:0 0 auto}.jw-flag-audio-player .jw-controlbar .jw-text-duration,.jw-flag-audio-player .jw-controlbar .jw-text-countdown{padding-right:10px}.jw-flag-audio-player .jw-controlbar .jw-slider-time{flex:0 1 auto;align-items:center;display:flex;order:1}.jw-flag-audio-player .jw-controlbar .jw-icon-volume{margin-right:0;transition:margin-right 150ms cubic-bezier(0, .25, .25, 1)}.jw-flag-audio-player .jw-controlbar .jw-icon-volume .jw-overlay{display:none}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container{transition:width 300ms cubic-bezier(0, .25, .25, 1);width:0}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open{width:140px}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open .jw-slider-volume{padding-right:24px;transition:opacity 300ms;opacity:1}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open~.jw-slider-time{flex:1 1 auto;width:auto;transition:opacity 300ms, width 300ms}.jw-flag-audio-player .jw-controlbar .jw-slider-volume{opacity:0}.jw-flag-audio-player .jw-controlbar .jw-slider-volume .jw-knob{-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.jw-flag-audio-player .jw-controlbar .jw-slider-volume~.jw-icon-volume{margin-right:140px}.jw-flag-audio-player.jw-breakpoint-1 .jw-horizontal-volume-container.jw-open~.jw-slider-time,.jw-flag-audio-player.jw-breakpoint-2 .jw-horizontal-volume-container.jw-open~.jw-slider-time{opacity:0}.jw-flag-audio-player.jw-flag-small-player .jw-text-elapsed,.jw-flag-audio-player.jw-flag-small-player .jw-text-duration{display:none}.jw-flag-audio-player.jw-flag-ads .jw-slider-time{display:none}.jw-hidden{display:none}',""])}]]); \ No newline at end of file diff --git a/ui/v2.5/public/jwplayer/jwplayer.core.controls.polyfills.js b/ui/v2.5/public/jwplayer/jwplayer.core.controls.polyfills.js new file mode 100644 index 00000000000..d57b24de227 --- /dev/null +++ b/ui/v2.5/public/jwplayer/jwplayer.core.controls.polyfills.js @@ -0,0 +1,95 @@ +/*! +JW Player version 8.11.5 +Copyright (c) 2019, JW Player, All Rights Reserved +https://github.com/jwplayer/jwplayer/blob/v8.11.5/README.md + +This source code and its use and distribution is subject to the terms and conditions of the applicable license agreement. +https://www.jwplayer.com/tos/ + +This product includes portions of other software. For the full text of licenses, see below: + +JW Player Third Party Software Notices and/or Additional Terms and Conditions + +************************************************************************************************** +The following software is used under Apache License 2.0 +************************************************************************************************** + +vtt.js v0.13.0 +Copyright (c) 2019 Mozilla (http://mozilla.org) +https://github.com/mozilla/vtt.js/blob/v0.13.0/LICENSE + +* * * + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and +limitations under the License. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under MIT license +************************************************************************************************** + +Underscore.js v1.6.0 +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +https://github.com/jashkenas/underscore/blob/1.6.0/LICENSE + +Backbone backbone.events.js v1.1.2 +Copyright (c) 2010-2014 Jeremy Ashkenas, DocumentCloud +https://github.com/jashkenas/backbone/blob/1.1.2/LICENSE + +Promise Polyfill v7.1.1 +Copyright (c) 2014 Taylor Hakes and Forbes Lindesay +https://github.com/taylorhakes/promise-polyfill/blob/v7.1.1/LICENSE + +can-autoplay.js v3.0.0 +Copyright (c) 2017 video-dev +https://github.com/video-dev/can-autoplay/blob/v3.0.0/LICENSE + +* * * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under W3C license +************************************************************************************************** + +Intersection Observer v0.5.0 +Copyright (c) 2016 Google Inc. (http://google.com) +https://github.com/w3c/IntersectionObserver/blob/v0.5.0/LICENSE.md + +* * * + +W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. + +This work is being provided by the copyright holders under the following license. + +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: + +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. + +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." + +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders. +*/ +(window.webpackJsonpjwplayer=window.webpackJsonpjwplayer||[]).push([[5,1,2,3,7],[,,,,,,,,,,,,,,,,,function(t,e,i){"use strict";i.r(e);var n,o=i(8),a=i(3),r=i(7),s=i(43),l=i(5),c=i(15),u=i(40);function d(t){return n||(n=new DOMParser),Object(l.r)(Object(l.s)(n.parseFromString(t,"image/svg+xml").documentElement))}var p=function(t,e,i,n){var o=document.createElement("div");o.className="jw-icon jw-icon-inline jw-button-color jw-reset "+t,o.setAttribute("role","button"),o.setAttribute("tabindex","0"),i&&o.setAttribute("aria-label",i),o.style.display="none";var a=new u.a(o).on("click tap enter",e||function(){});return n&&Array.prototype.forEach.call(n,(function(t){"string"==typeof t?o.appendChild(d(t)):o.appendChild(t)})),{ui:a,element:function(){return o},toggle:function(t){t?this.show():this.hide()},show:function(){o.style.display=""},hide:function(){o.style.display="none"}}},w=i(0),f=i(67),h=i.n(f),j=i(68),g=i.n(j),b=i(69),m=i.n(b),v=i(70),y=i.n(v),k=i(71),x=i.n(k),O=i(72),C=i.n(O),T=i(73),S=i.n(T),M=i(74),E=i.n(M),_=i(75),z=i.n(_),A=i(76),P=i.n(A),I=i(77),L=i.n(I),R=i(78),B=i.n(R),V=i(79),H=i.n(V),N=i(80),F=i.n(N),q=i(81),D=i.n(q),U=i(82),W=i.n(U),Q=i(83),Y=i.n(Q),X=i(84),Z=i.n(X),K=i(85),J=i.n(K),$=i(86),G=i.n($),tt=i(87),et=i.n(tt),it=i(88),nt=i.n(it),ot=i(89),at=i.n(ot),rt=null;function st(t){var e=dt().querySelector(ct(t));if(e)return ut(e);throw new Error("Icon not found "+t)}function lt(t){var e=dt().querySelectorAll(t.split(",").map(ct).join(","));if(!e.length)throw new Error("Icons not found "+t);return Array.prototype.map.call(e,(function(t){return ut(t)}))}function ct(t){return".jw-svg-icon-".concat(t)}function ut(t){return t.cloneNode(!0)}function dt(){return rt||(rt=d(""+h.a+g.a+m.a+y.a+x.a+C.a+S.a+E.a+z.a+P.a+L.a+B.a+H.a+F.a+D.a+W.a+Y.a+Z.a+J.a+G.a+et.a+nt.a+at.a+"")),rt}var pt=i(10);function wt(t,e){for(var i=0;i10&&delete ft[e[0]];var i=d(t);ft[t]=i}return ft[t].cloneNode(!0)}(e):((r=document.createElement("div")).className="jw-icon jw-button-image jw-button-color jw-reset",e&&Object(pt.d)(r,{backgroundImage:"url(".concat(e,")")})),s.appendChild(r),new u.a(s).on("click tap enter",n,this),s.addEventListener("mousedown",(function(t){t.preventDefault()})),this.id=o,this.buttonElement=s}var e,i,n;return e=t,(i=[{key:"element",value:function(){return this.buttonElement}},{key:"toggle",value:function(t){t?this.show():this.hide()}},{key:"show",value:function(){this.buttonElement.style.display=""}},{key:"hide",value:function(){this.buttonElement.style.display="none"}}])&&wt(e.prototype,i),n&&wt(e,n),t}(),jt=i(11);function gt(t,e){for(var i=0;i=0&&(e.left-=i,e.right-=i),e},mt=function(){function t(e,i){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Object(w.h)(this,r.a),this.className=e+" jw-background-color jw-reset",this.orientation=i}var e,i,n;return e=t,(i=[{key:"setup",value:function(){this.el=Object(l.e)(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return''}(this.className,"jw-slider-"+this.orientation)),this.elementRail=this.el.getElementsByClassName("jw-slider-container")[0],this.elementBuffer=this.el.getElementsByClassName("jw-buffer")[0],this.elementProgress=this.el.getElementsByClassName("jw-progress")[0],this.elementThumb=this.el.getElementsByClassName("jw-knob")[0],this.ui=new u.a(this.element(),{preventScrolling:!0}).on("dragStart",this.dragStart,this).on("drag",this.dragMove,this).on("dragEnd",this.dragEnd,this).on("click tap",this.tap,this)}},{key:"dragStart",value:function(){this.trigger("dragStart"),this.railBounds=bt(this.elementRail)}},{key:"dragEnd",value:function(t){this.dragMove(t),this.trigger("dragEnd")}},{key:"dragMove",value:function(t){var e,i,n=this.railBounds=this.railBounds?this.railBounds:bt(this.elementRail);return i="horizontal"===this.orientation?(e=t.pageX)n.right?100:100*Object(s.a)((e-n.left)/n.width,0,1):(e=t.pageY)>=n.bottom?0:e<=n.top?100:100*Object(s.a)((n.height-(e-n.top))/n.height,0,1),this.render(i),this.update(i),!1}},{key:"tap",value:function(t){this.railBounds=bt(this.elementRail),this.dragMove(t)}},{key:"limit",value:function(t){return t}},{key:"update",value:function(t){this.trigger("update",{percentage:t})}},{key:"render",value:function(t){t=Math.max(0,Math.min(t,100)),"horizontal"===this.orientation?(this.elementThumb.style.left=t+"%",this.elementProgress.style.width=t+"%"):(this.elementThumb.style.bottom=t+"%",this.elementProgress.style.height=t+"%")}},{key:"updateBuffer",value:function(t){this.elementBuffer.style.width=t+"%"}},{key:"element",value:function(){return this.el}}])&>(e.prototype,i),n&>(e,n),t}(),vt=function(t,e){t&&e&&(t.setAttribute("aria-label",e),t.setAttribute("role","button"),t.setAttribute("tabindex","0"))};function yt(t,e){for(var i=0;i0&&Array.prototype.forEach.call(o,(function(t){"string"==typeof t?a.el.appendChild(d(t)):a.el.appendChild(t)}))}var e,i,n;return e=t,(i=[{key:"addContent",value:function(t){this.content&&this.removeContent(),this.content=t,this.tooltip.appendChild(t)}},{key:"removeContent",value:function(){this.content&&(this.tooltip.removeChild(this.content),this.content=null)}},{key:"hasContent",value:function(){return!!this.content}},{key:"element",value:function(){return this.el}},{key:"openTooltip",value:function(t){this.isOpen||(this.trigger("open-"+this.componentType,t,{isOpen:!0}),this.isOpen=!0,Object(l.v)(this.el,this.openClass,this.isOpen))}},{key:"closeTooltip",value:function(t){this.isOpen&&(this.trigger("close-"+this.componentType,t,{isOpen:!1}),this.isOpen=!1,Object(l.v)(this.el,this.openClass,this.isOpen))}},{key:"toggleOpenState",value:function(t){this.isOpen?this.closeTooltip(t):this.openTooltip(t)}}])&&yt(e.prototype,i),n&&yt(e,n),t}(),xt=i(22),Ot=i(57);function Ct(t,e){for(var i=0;i=this.thumbnails.length&&(e=this.thumbnails.length-1);var i=this.thumbnails[e].img;return i.indexOf("://")<0&&(i=this.vttPath?this.vttPath+"/"+i:i),i},loadThumbnail:function(t){var e=this.chooseThumbnail(t),i={margin:"0 auto",backgroundPosition:"0 0"};if(e.indexOf("#xywh")>0)try{var n=/(.+)#xywh=(\d+),(\d+),(\d+),(\d+)/.exec(e);e=n[1],i.backgroundPosition=-1*n[2]+"px "+-1*n[3]+"px",i.width=n[4],this.timeTip.setWidth(+i.width),i.height=n[5]}catch(t){return}else this.individualImage||(this.individualImage=new Image,this.individualImage.onload=Object(w.a)((function(){this.individualImage.onload=null,this.timeTip.image({width:this.individualImage.width,height:this.individualImage.height}),this.timeTip.setWidth(this.individualImage.width)}),this),this.individualImage.src=e);return i.backgroundImage='url("'+e+'")',i},showThumbnail:function(t){this._model.get("containerWidth")<=420||this.thumbnails.length<1||this.timeTip.image(this.loadThumbnail(t))},resetThumbnails:function(){this.timeTip.image({backgroundImage:"",width:0,height:0}),this.thumbnails=[]}};function _t(t,e,i){return(_t="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,i){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=Rt(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(i):o.value}})(t,e,i||t)}function zt(t){return(zt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function At(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Pt(t,e){for(var i=0;i-1&&(n="Live")}var d=this.timeTip;d.update(n),this.textLength!==n.length&&(this.textLength=n.length,d.resetWidth()),this.showThumbnail(u),Object(l.a)(d.el,"jw-open");var p=d.getWidth(),w=a.width/100,f=o-a.width,h=0;p>f&&(h=(p-f)/(200*w));var j=100*Math.min(1-h,Math.max(h,c)).toFixed(3);Object(pt.d)(d.el,{left:j+"%"})}}},{key:"hideTimeTooltip",value:function(){Object(l.o)(this.timeTip.el,"jw-open")}},{key:"updateCues",value:function(t,e){var i=this;this.resetCues(),e&&e.length&&(e.forEach((function(t){i.addCue(t)})),this.drawCues())}},{key:"updateAriaText",value:function(){var t=this._model;if(!t.get("seeking")){var e=t.get("position"),i=t.get("duration"),n=Object(jt.timeFormat)(e);"DVR"!==this.streamType&&(n+=" of ".concat(Object(jt.timeFormat)(i)));var o=this.el;document.activeElement!==o&&(this.timeUpdateKeeper.textContent=n),Object(l.t)(o,"aria-valuenow",e),Object(l.t)(o,"aria-valuetext",n)}}},{key:"reset",value:function(){this.resetThumbnails(),this.timeTip.resetWidth(),this.textLength=0}}]),e}(mt);Object(w.h)(Nt.prototype,St,Et);var Ft=Nt;function qt(t,e){for(var i=0;i=75&&!t),Object(l.t)(r,"aria-valuenow",o),Object(l.t)(s,"aria-valuenow",o);var c="Volume ".concat(o,"%");Object(l.t)(r,"aria-valuetext",c),Object(l.t)(s,"aria-valuetext",c),document.activeElement!==r&&document.activeElement!==s&&(this._volumeAnnouncer.textContent=c)}}},{key:"onCastAvailable",value:function(t,e){this.elements.cast.toggle(e)}},{key:"onCastActive",value:function(t,e){this.elements.fullscreen.toggle(!e),this.elements.cast.button&&Object(l.v)(this.elements.cast.button,"jw-off",!e)}},{key:"onElapsed",value:function(t,e){var i,n,o=t.get("duration");if("DVR"===t.get("streamType")){var a=Math.ceil(e),r=this._model.get("dvrSeekLimit");i=n=a>=-r?"":"-"+Object(jt.timeFormat)(-(e+r)),t.set("dvrLive",a>=-r)}else i=Object(jt.timeFormat)(e),n=Object(jt.timeFormat)(o-e);this.elements.elapsed.textContent=i,this.elements.countdown.textContent=n}},{key:"onDuration",value:function(t,e){this.elements.duration.textContent=Object(jt.timeFormat)(Math.abs(e))}},{key:"onAudioMode",value:function(t,e){var i=this.elements.time.element();e?this.elements.buttonContainer.insertBefore(i,this.elements.elapsed):Object(l.m)(this.el,i)}},{key:"element",value:function(){return this.el}},{key:"setAltText",value:function(t,e){this.elements.alt.textContent=e}},{key:"closeMenus",value:function(t){this.menus.forEach((function(e){t&&t.target===e.el||e.closeTooltip(t)}))}},{key:"rewind",value:function(){var t,e=0,i=this._model.get("currentTime");i?t=i-10:(t=this._model.get("position")-10,"DVR"===this._model.get("streamType")&&(e=this._model.get("duration"))),this._api.seek(Math.max(t,e),{reason:"interaction"})}},{key:"onState",value:function(t,e){var i=t.get("localization"),n=i.play;this.setPlayText(n),e===a.pb&&("LIVE"!==t.get("streamType")?(n=i.pause,this.setPlayText(n)):(n=i.stop,this.setPlayText(n))),Object(l.t)(this.elements.play.element(),"aria-label",n)}},{key:"onStreamTypeChange",value:function(t,e){var i="LIVE"===e,n="DVR"===e;this.elements.rewind.toggle(!i),this.elements.live.toggle(i||n),Object(l.t)(this.elements.live.element(),"tabindex",i?"-1":"0"),this.elements.duration.style.display=n?"none":"",this.onDuration(t,t.get("duration")),this.onState(t,t.get("state"))}},{key:"addLogo",value:function(t){var e=this.elements.buttonContainer,i=new ht(t.file,this._model.get("localization").logo,(function(){t.link&&Object(l.l)(t.link,"_blank",{rel:"noreferrer"})}),"logo","jw-logo-button");t.link||Object(l.t)(i.element(),"tabindex","-1"),e.insertBefore(i.element(),e.querySelector(".jw-spacer").nextSibling)}},{key:"goToLiveEdge",value:function(){if("DVR"===this._model.get("streamType")){var t=Math.min(this._model.get("position"),-1),e=this._model.get("dvrSeekLimit");this._api.seek(Math.max(-e,t),{reason:"interaction"}),this._api.play({reason:"interaction"})}}},{key:"updateButtons",value:function(t,e,i){if(e){var n,o,a=this.elements.buttonContainer;e!==i&&i?(n=ae(e,i),o=ae(i,e),this.removeButtons(a,o)):n=e;for(var r=n.length-1;r>=0;r--){var s=n[r],l=new ht(s.img,s.tooltip,s.callback,s.id,s.btnClass);s.tooltip&&Gt(l.element(),s.id,s.tooltip);var c=void 0;"related"===l.id?c=this.elements.settingsButton.element():"share"===l.id?c=a.querySelector('[button="related"]')||this.elements.settingsButton.element():(c=this.elements.spacer.nextSibling)&&"logo"===c.getAttribute("button")&&(c=c.nextSibling),a.insertBefore(l.element(),c)}}}},{key:"removeButtons",value:function(t,e){for(var i=e.length;i--;){var n=t.querySelector('[button="'.concat(e[i].id,'"]'));n&&t.removeChild(n)}}},{key:"toggleCaptionsButtonState",value:function(t){var e=this.elements.captionsButton;e&&Object(l.v)(e.element(),"jw-off",!t)}},{key:"destroy",value:function(){var t=this;this._model.off(null,null,this),Object.keys(this.elements).forEach((function(e){var i=t.elements[e];i&&"function"==typeof i.destroy&&t.elements[e].destroy()})),this.ui.forEach((function(t){t.destroy()})),this.ui=[]}}])&&ee(e.prototype,i),n&&ee(e,n),t}(),le=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return'
    ')+'
    ')+"
    "},ce=function(t){return'
    '+le("rewind",t.rewind)+le("display",t.playback)+le("next",t.next)+"
    "};function ue(t,e){for(var i=0;i'.concat(a.playback,"")),Object(l.a)(o.icon,"jw-idle-label"),o.icon.appendChild(s))}return o}var i,n,o;return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&je(t,e)}(e,t),i=e,(n=[{key:"element",value:function(){return this.el}}])&&we(i.prototype,n),o&&we(i,o),e}(r.a);function be(t,e){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:"",e=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]:"";return'
    '+'
    '.concat(t,"
    ")+'
    '.concat(e,"
    ")+'
    '.concat(i,"
    ")+"
    "+'')+"
    "}());e.querySelector(".jw-nextup-close").appendChild(st("close")),this.addContent(e),this.closeButton=this.content.querySelector(".jw-nextup-close"),this.closeButton.setAttribute("aria-label",this.localization.close),this.tooltip=this.content.querySelector(".jw-nextup-tooltip");var i=this._model,n=i.player;this.enabled=!1,i.on("change:nextUp",this.onNextUp,this),n.change("duration",this.onDuration,this),n.change("position",this.onElapsed,this),n.change("streamType",this.onStreamType,this),n.change("state",(function(t,e){"complete"===e&&this.toggle(!1)}),this),this.closeUi=new u.a(this.closeButton,{directSelect:!0}).on("click tap enter",(function(){this.nextUpSticky=!1,this.toggle(!1)}),this),this.tooltipUi=new u.a(this.tooltip).on("click tap",this.click,this)}},{key:"loadThumbnail",value:function(t){return this.nextUpImage=new Image,this.nextUpImage.onload=function(){this.nextUpImage.onload=null}.bind(this),this.nextUpImage.src=t,{backgroundImage:'url("'+t+'")'}}},{key:"click",value:function(){var t=this.feedShownId;this.reset(),this._api.next({feedShownId:t,reason:"interaction"})}},{key:"toggle",value:function(t,e){if(this.enabled&&(Object(l.v)(this.container,"jw-nextup-sticky",!!this.nextUpSticky),this.shown!==t)){this.shown=t,Object(l.v)(this.container,"jw-nextup-container-visible",t),Object(l.v)(this._playerElement,"jw-flag-nextup",t);var i=this._model.get("nextUp");t&&i?(this.feedShownId=Object(te.b)(te.a),this.trigger("nextShown",{mode:i.mode,ui:"nextup",itemsShown:[i],feedData:i.feedData,reason:e,feedShownId:this.feedShownId})):this.feedShownId=""}}},{key:"setNextUpItem",value:function(t){var e=this;setTimeout((function(){if(e.thumbnail=e.content.querySelector(".jw-nextup-thumbnail"),Object(l.v)(e.content,"jw-nextup-thumbnail-visible",!!t.image),t.image){var i=e.loadThumbnail(t.image);Object(pt.d)(e.thumbnail,i)}e.header=e.content.querySelector(".jw-nextup-header"),e.header.textContent=Object(l.e)(e.localization.nextUp).textContent,e.title=e.content.querySelector(".jw-nextup-title");var n=t.title;e.title.textContent=n?Object(l.e)(n).textContent:"";var o=t.duration;o&&(e.duration=e.content.querySelector(".jw-nextup-duration"),e.duration.textContent="number"==typeof o?Object(jt.timeFormat)(o):o)}),500)}},{key:"onNextUp",value:function(t,e){this.reset(),e||(e={showNextUp:!1}),this.enabled=!(!e.title&&!e.image),this.enabled&&(e.showNextUp||(this.nextUpSticky=!1,this.toggle(!1)),this.setNextUpItem(e))}},{key:"onDuration",value:function(t,e){if(e){var i=t.get("nextupoffset"),n=-10;i&&(n=Object(xe.d)(i,e)),n<0&&(n+=e),Object(xe.c)(i)&&e-5=this.offset;n&&void 0===i?(this.nextUpSticky=n,this.toggle(n,"time")):!n&&i&&this.reset()}}},{key:"onStreamType",value:function(t,e){"VOD"!==e&&(this.nextUpSticky=!1,this.toggle(!1))}},{key:"element",value:function(){return this.container}},{key:"addContent",value:function(t){this.content&&this.removeContent(),this.content=t,this.container.appendChild(t)}},{key:"removeContent",value:function(){this.content&&(this.container.removeChild(this.content),this.content=null)}},{key:"reset",value:function(){this.nextUpSticky=void 0,this.toggle(!1)}},{key:"destroy",value:function(){this.off(),this._model.off(null,null,this),this.closeUi&&this.closeUi.destroy(),this.tooltipUi&&this.tooltipUi.destroy()}}])&&Oe(e.prototype,i),n&&Oe(e,n),t}(),Te=function(t,e){var i=t.featured,n=t.showLogo,o=t.type;return t.logo=n?'':"",'
  • ').concat(Se[o](t,e),"
  • ")},Se={link:function(t){var e=t.link,i=t.title,n=t.logo;return'').concat(n).concat(i||"","")},info:function(t,e){return'")},share:function(t,e){return'")},keyboardShortcuts:function(t,e){return'")}},Me=i(23),Ee=i(6),_e=i(13);function ze(t,e){for(var i=0;iJW Player '.concat(t,""),a={items:[{type:"info"},{title:Object(_e.e)(n)?"".concat(o," ").concat(n):"".concat(n," ").concat(o),type:"link",featured:!0,showLogo:!0,link:"https://jwplayer.com/learn-more?e=".concat(Ae[i])}]},r=e.get("provider"),s=a.items;if(r&&r.name.indexOf("flash")>=0){var l="Flash Version "+Object(Ee.a)();s.push({title:l,type:"link",link:"http://www.adobe.com/software/flash/about/"})}return this.shortcutsTooltip&&s.splice(s.length-1,0,{type:"keyboardShortcuts"}),a}},{key:"rightClick",value:function(t){if(this.lazySetup(),this.mouseOverContext)return!1;this.hideMenu(),this.showMenu(t),this.addHideMenuHandlers()}},{key:"getOffset",value:function(t){var e=Object(l.c)(this.wrapperElement),i=t.pageX-e.left,n=t.pageY-e.top;return this.model.get("touchMode")&&(n-=100),{x:i,y:n}}},{key:"showMenu",value:function(t){var e=this,i=this.getOffset(t);return this.el.style.left=i.x+"px",this.el.style.top=i.y+"px",this.outCount=0,Object(l.a)(this.playerContainer,"jw-flag-rightclick-open"),Object(l.a)(this.el,"jw-open"),clearTimeout(this._menuTimeout),this._menuTimeout=setTimeout((function(){return e.hideMenu()}),3e3),!1}},{key:"hideMenu",value:function(t){t&&this.el&&this.el.contains(t.target)||(Object(l.o)(this.playerContainer,"jw-flag-rightclick-open"),Object(l.o)(this.el,"jw-open"))}},{key:"lazySetup",value:function(){var t,e,i,n,o=this,a=(t=this.buildArray(),e=this.model.get("localization"),i=t.items,n=(void 0===i?[]:i).map((function(t){return Te(t,e)})),'
    '+'
      '.concat(n.join(""),"
    ")+"
    ");if(this.el){if(this.html!==a){this.html=a;var r=Pe(a);Object(l.h)(this.el);for(var s=r.childNodes.length;s--;)this.el.appendChild(r.firstChild)}}else this.html=a,this.el=Pe(this.html),this.wrapperElement.appendChild(this.el),this.hideMenuHandler=function(t){return o.hideMenu(t)},this.overHandler=function(){o.mouseOverContext=!0},this.outHandler=function(t){o.mouseOverContext=!1,t.relatedTarget&&!o.el.contains(t.relatedTarget)&&++o.outCount>1&&o.hideMenu()},this.infoOverlayHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.infoOverlay.open()},this.shortcutsTooltipHandler=function(){o.mouseOverContext=!1,o.hideMenu(),o.shortcutsTooltip.open()}}},{key:"setup",value:function(t,e,i){this.wrapperElement=i,this.model=t,this.mouseOverContext=!1,this.playerContainer=e,this.ui=new u.a(i).on("longPress",this.rightClick,this)}},{key:"addHideMenuHandlers",value:function(){this.removeHideMenuHandlers(),this.wrapperElement.addEventListener("touchstart",this.hideMenuHandler),document.addEventListener("touchstart",this.hideMenuHandler),o.OS.mobile||(this.wrapperElement.addEventListener("click",this.hideMenuHandler),document.addEventListener("click",this.hideMenuHandler),this.el.addEventListener("mouseover",this.overHandler),this.el.addEventListener("mouseout",this.outHandler)),this.el.querySelector(".jw-info-overlay-item").addEventListener("click",this.infoOverlayHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").addEventListener("click",this.shortcutsTooltipHandler)}},{key:"removeHideMenuHandlers",value:function(){this.wrapperElement&&(this.wrapperElement.removeEventListener("click",this.hideMenuHandler),this.wrapperElement.removeEventListener("touchstart",this.hideMenuHandler)),this.el&&(this.el.querySelector(".jw-info-overlay-item").removeEventListener("click",this.infoOverlayHandler),this.el.removeEventListener("mouseover",this.overHandler),this.el.removeEventListener("mouseout",this.outHandler),this.shortcutsTooltip&&this.el.querySelector(".jw-shortcuts-item").removeEventListener("click",this.shortcutsTooltipHandler)),document.removeEventListener("click",this.hideMenuHandler),document.removeEventListener("touchstart",this.hideMenuHandler)}},{key:"destroy",value:function(){clearTimeout(this._menuTimeout),this.removeHideMenuHandlers(),this.el&&(this.hideMenu(),this.hideMenuHandler=null,this.el=null),this.wrapperElement&&(this.wrapperElement.oncontextmenu=null,this.wrapperElement=null),this.model&&(this.model=null),this.ui&&(this.ui.destroy(),this.ui=null)}}])&&ze(e.prototype,i),n&&ze(e,n),t}(),Le=function(){return''};function Re(t){var e=document.getElementsByClassName("jw-icon-settings")[0];if(e){var i="Right"===t?Object(l.k)(e):Object(l.n)(e);i&&i.focus()}}var Be=function(t){Object.keys(t).forEach((function(e){t[e].deactivate()}))},Ve=function(t){return'"};var He=function(t){t.forEach((function(t){t.deactivate()}))},Ne=function(t){return'"};function Fe(t,e,i){var n,o=Object(l.e)(Ne(e)),a=new u.a(o).on("click tap enter",(function(t){i(t)})),r={activate:function(){Object(l.v)(o,"jw-settings-item-active",!0),o.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(l.v)(o,"jw-settings-item-active",!1),o.setAttribute("aria-checked","false"),n=!1},element:function(){return o},uiElement:function(){return a},destroy:function(){this.deactivate(),a.destroy()}};return Object.defineProperty(r,"active",{enumerable:!0,get:function(){return n}}),r}var qe="audioTracks",De="captions",Ue="quality",We="playbackRates",Qe=Ue,Ye=function(t,e,i,n,o){var a=t.getSubmenu(e);if(a)a.replaceContent(i);else{var r=p("jw-settings-".concat(e),(function(i){t.activateSubmenu(e,!1,i&&"enter"!==i.type),a.element().children[0].focus()}),e,[n]),s=r.element();s.setAttribute("role","menuitemradio"),s.setAttribute("aria-checked","false"),s.setAttribute("aria-label",o),(a=function(t,e,i){var n,o=[],a=Object(l.e)(Ve(t)),r=e.element();r.setAttribute("name",t),r.className+=" jw-submenu-"+t,e.show();var s=function(t,e){t?t.focus():void 0!==e&&o[e].element().focus()},c=function(t){var e=Object(l.k)(r),i=Object(l.n)(r),n=Object(l.k)(t.target),a=Object(l.n)(t.target),c=t.key.replace(/(Arrow|ape)/,"");switch(c){case"Tab":s(t.shiftKey?i:e);break;case"Left":s(i||Object(l.n)(document.getElementsByClassName("jw-icon-settings")[0]));break;case"Up":s(a,o.length-1);break;case"Right":s(e);break;case"Down":s(n,0)}t.preventDefault(),"Esc"!==c&&t.stopPropagation()},u={addContent:function(t){t&&(t.forEach((function(t){a.appendChild(t.element()),t.element().setAttribute("tabindex","-1"),t.element().addEventListener("keydown",c)})),o=t)},replaceContent:function(t){u.removeContent(),this.addContent(t)},removeContent:function(){o.forEach((function(t){t.element().removeEventListener("keydown",c)})),Object(l.h)(a),o=[]},getItems:function(){return o},activate:function(){Object(l.v)(a,"jw-settings-submenu-active",!0),a.setAttribute("aria-expanded","true"),r.setAttribute("aria-checked","true"),n=!0},deactivate:function(){Object(l.v)(a,"jw-settings-submenu-active",!1),a.setAttribute("aria-expanded","false"),r.setAttribute("aria-checked","false"),n=!1},activateItem:function(t){var e=o[t];e&&!e.active&&(He(o),e.activate())},element:function(){return a},destroy:function(){o&&(o.forEach((function(t){t.destroy()})),this.removeContent())}};return Object.defineProperties(u,{name:{enumerable:!0,get:function(){return t}},active:{enumerable:!0,get:function(){return n}},categoryButtonElement:{enumerable:!0,get:function(){return r}},isDefault:{enumerable:!0,get:function(){return i}}}),u}(e,r,e===Qe)).addContent(i),"ontouchstart"in window||Gt(s,e,o),t.addSubmenu(a)}return a};function Xe(t){t.removeSubmenu(De)}function Ze(t){t.removeSubmenu(qe)}function Ke(t){t.removeSubmenu(Ue)}function Je(t){t.removeSubmenu(We)}function $e(t,e,i){var n=t.elements.settingsButton,o=function(t,e,i){var n,o=function(t){/jw-(settings|video|nextup-close|sharing-link|share-item)/.test(t.target.className)||f.close()},a=null,r={},s=Object(l.e)(Le()),c=new u.a(s).on("keydown",(function(t){var e=t.sourceEvent,i=t.target,n=Object(l.k)(i),o=Object(l.n)(i),a=e.key.replace(/(Arrow|ape)/,"");switch(a){case"Esc":f.close(t);break;case"Left":o?o.focus():(f.close(),Re(a));break;case"Right":n&&d.element()&&i!==d.element()&&n.focus();break;case"Up":case"Down":f.activateSubmenu(i.getAttribute("name"),"Up"===a)}if(e.stopPropagation(),/13|27|32|37|38|39|40/.test(e.keyCode))return e.preventDefault(),!1})),d=p("jw-settings-close",(function(t){f.close(t)}),i.close,[st("close")]);d.ui.on("keydown",(function(t){var e=t.sourceEvent,i=e.key.replace(/(Arrow|ape)/,"");("Enter"===i||"Right"===i||"Tab"===i&&!e.shiftKey)&&f.close(e),"Right"===i&&Re(e.key)})),d.show();var w=s.querySelector(".jw-settings-topbar");w.appendChild(d.element());var f={ui:c,closeButton:d,open:function(e,i){(t(n=!0,i),s.setAttribute("aria-expanded","true"),document.addEventListener("click",o),e&&i&&"enter"===i.type)?a.categoryButtonElement.focus():a.element().firstChild.focus()},close:function(e){t(n=!1,e),a=null,Be(r),s.setAttribute("aria-expanded","false"),document.removeEventListener("click",o)},toggle:function(){n?this.close():this.open()},addSubmenu:function(t){if(t){var i=t.name;if(r[i]=t,t.isDefault)Object(l.m)(w,t.categoryButtonElement),t.categoryButtonElement.addEventListener("keydown",(function(t){9===t.keyCode&&t.shiftKey&&f.close(t)}));else{var n=w.querySelector(".jw-submenu-sharing");w.insertBefore(t.categoryButtonElement,n||d.element())}s.appendChild(t.element()),e.show()}},getSubmenu:function(t){return r[t]},getSubmenuNames:function(){return Object.keys(r)},removeSubmenu:function(t){var i=r[t];i&&i.element().parentNode===s&&(s.removeChild(i.element()),w.removeChild(i.categoryButtonElement),i.destroy(),delete r[t],Object.keys(r).length||(this.close(),e.hide()))},activateSubmenu:function(t,e){var i=r[t];i&&(i.active||(Be(r),i.activate(),a=i),(e?i.element().lastChild:i.element().firstChild).focus())},activateFirstSubmenu:function(t){var e=Object.keys(r)[0];this.activateSubmenu(e,!1,t)},element:function(){return s},destroy:function(){this.close(),this.ui.destroy(),this.closeButton.ui.destroy(),Object(l.h)(s)}};return Object.defineProperties(f,{visible:{enumerable:!0,get:function(){return n}}}),f}(e,{hide:function(){return n.hide()},show:function(){return n.show()}},i);return t.on("settingsInteraction",(function(t,e,i){var n=o.getSubmenu(t),a=i&&"enter"!==i.type,r=Object(w.c)(o.open,10);(n||e)&&(o.visible?e||n.active?o.close():o.activateSubmenu(t,!1,a):(n?o.activateSubmenu(t,!1,a):o.activateFirstSubmenu(a),r(e,i)))})),o}function Ge(t,e,i,n){var o=i.player,a=function(e,i){var n=t.getSubmenu(e);n&&n.activateItem(i)},r=function(e,i){!i||i.length<=1?Ze(t):function(t,e,i,n,o){var a=e.map((function(e,n){return Fe(e.name,e.name,(function(e){i(n),t.close(e)}))}));Ye(t,qe,a,st("audio-tracks"),o).activateItem(n)}(t,i,(function(t){return n.setCurrentAudioTrack(t)}),o.get("currentAudioTrack"),o.get("localization").audioTracks)},s=function(i,a){if(!a||a.length<=1)Ke(t);else{var r=o.get("localization"),s=r.hd,l=r.auto;!function(t,e,i,n,o,a){var r=e.map((function(e,n){var o=e.label;return"Auto"===o&&0===n&&(o="".concat(a,' ')),Fe(e.label,o,(function(e){i(n),t.close(e)}))}));Ye(t,Ue,r,st("quality-100"),o).activateItem(n)}(t,a,(function(t){return n.setCurrentQuality(t)}),o.get("currentLevel"),s,l)}!function(t,e){var i=t.getSubmenuNames(),n=i.length>1||i.some((function(t){return"quality"===t||"playbackRates"===t}));e.elements.settingsButton.toggle(n)}(t,e)},l=function(e,i){o.get("supportsPlaybackRate")&&"LIVE"!==o.get("streamType")&&o.get("playbackRateControls")&&i.length>1?function(t,e,i,n,o){var a=e.map((function(e){return Fe(0,Object(_e.e)(o)?"x"+e:e+"x",(function(n){i(e),t.close(n)}))}));Ye(t,We,a,st("playback-rate"),o).activateItem(n)}(t,i,(function(t){return n.setPlaybackRate(t)}),i.indexOf(o.get("playbackRate")),o.get("localization").playbackRates):Je(t)},c=function(t,e,i){var n=o.get("levels");if(n&&"Auto"===n[0].label){var a=e.getItems()[0].element().querySelector(".jw-auto-label"),r=n[t.index]||{label:""};a.textContent=i?"":r.label}};o.change("levels",s,t),o.on("change:currentLevel",(function(e,i){var n=t.getSubmenu("quality"),r=o.get("visualQuality");r&&n&&c(r.level,n,i),a("quality",i)}),t),o.change("audioTracks",r,t),o.on("change:currentAudioTrack",(function(t,e){a("audioTracks",e)}),t),o.on("change:playlistItem",(function(){Xe(t),e.elements.captionsButton.hide(),t.visible&&t.close()})),o.change("captionsList",(function(i,a){var r=e.elements.captionsButton;if(!a||a.length<=1)return Xe(t),void r.hide();var s=o.get("localization"),l=s.cc,c=s.off;!function(t,e,i,n,o,a){var r=e.map((function(e,n){var o=e.label;return"Off"!==o&&"off"!==e.id||0!==n||(o=a),Fe(e.id,o,(function(e){i(n),t.close(e)}))}));Ye(t,De,r,st("cc-off"),o).activateItem(n)}(t,a,(function(t){return n.setCurrentCaptions(t)}),o.get("captionsIndex"),l,c),e.toggleCaptionsButtonState(!!o.get("captionsIndex")),r.show()}),t),o.change("captionsIndex",(function(i,n){var o=t.getSubmenu("captions");o&&(o.activateItem(n),e.toggleCaptionsButtonState(!!n))}),t),o.change("playbackRates",l,t),o.change("playbackRate",(function(t,e){var i=o.get("playbackRates");i&&a("playbackRates",i.indexOf(e))}),t),o.on("change:playbackRateControls",(function(){l(0,o.get("playbackRates"))})),o.on("change:visualQuality",(function(e,i){var n=t.getSubmenu("quality");i&&n&&c(i.level,n,o.get("currentLevel"))})),o.on("change:castActive",(function(e,i,n){i!==n&&(i?(Ze(t),Ke(t),Je(t)):(r(0,o.get("audioTracks")),s(0,o.get("levels")),l(0,o.get("playbackRates"))))}),t),o.on("change:streamType",(function(){l(0,o.get("playbackRates"))}),t)}var ti=i(58),ei=i(36),ii=i(12),ni=function(t,e,i,n){var o=Object(l.e)('
    '),r=!1,s=null,c=!1,u=function(t){/jw-info/.test(t.target.className)||w.close()},d=function(){var n,a,s,c,u,d=p("jw-info-close",(function(){w.close()}),e.get("localization").close,[st("close")]);d.show(),Object(l.m)(o,d.element()),a=o.querySelector(".jw-info-title"),s=o.querySelector(".jw-info-duration"),c=o.querySelector(".jw-info-description"),u=o.querySelector(".jw-info-clientid"),e.change("playlistItem",(function(t,e){var i=e.description,n=e.title;Object(l.q)(c,i||""),Object(l.q)(a,n||"Unknown Title")})),e.change("duration",(function(t,i){var n="";switch(e.get("streamType")){case"LIVE":n="Live";break;case"DVR":n="DVR";break;default:i&&(n=Object(jt.timeFormat)(i))}s.textContent=n}),w),u.textContent=(n=i.getPlugin("jwpsrv"))&&"function"==typeof n.doNotTrackUser&&n.doNotTrackUser()?"":"Client ID: ".concat(function(){try{return window.localStorage.jwplayerLocalId}catch(t){return"none"}}()),t.appendChild(o),r=!0};var w={open:function(){r||d(),document.addEventListener("click",u),c=!0;var t=e.get("state");t===a.pb&&i.pause("infoOverlayInteraction"),s=t,n(!0)},close:function(){document.removeEventListener("click",u),c=!1,e.get("state")===a.ob&&s===a.pb&&i.play("infoOverlayInteraction"),s=null,n(!1)},destroy:function(){this.close(),e.off(null,null,this)}};return Object.defineProperties(w,{visible:{enumerable:!0,get:function(){return c}}}),w};var oi=function(t,e,i){var n,o=!1,r=null,s=i.get("localization").shortcuts,c=Object(l.e)(function(t,e){var i=t.map((function(t){return'
    '+''.concat(t.description,"")+''.concat(t.key,"")+"
    "})).join("");return'
    ')+'Press shift question mark to access a list of keyboard shortcuts
    '+''.concat(e,"")+'
    '+"".concat(i)+"
    "}(function(t){var e=t.playPause,i=t.volumeToggle,n=t.fullscreenToggle,o=t.seekPercent,a=t.increaseVolume,r=t.decreaseVolume,s=t.seekForward,l=t.seekBackward;return[{key:t.spacebar,description:e},{key:"↑",description:a},{key:"↓",description:r},{key:"→",description:s},{key:"←",description:l},{key:"c",description:t.captionsToggle},{key:"f",description:n},{key:"m",description:i},{key:"0-9",description:o}]}(s),s.keyboardShortcuts)),u={reason:"settingsInteraction"},d=c.querySelector(".jw-switch"),w=function(){d.setAttribute("aria-checked",i.get("enableShortcuts")),d.addEventListener("click",j),Object(l.a)(c,"jw-open"),r=i.get("state"),c.querySelector(".jw-shortcuts-close").focus(),document.addEventListener("click",h),o=!0,e.pause(u)},f=function(){d.removeEventListener("click",j),Object(l.o)(c,"jw-open"),document.removeEventListener("click",h),t.focus(),o=!1,r===a.pb&&e.play(u)},h=function(t){/jw-shortcuts|jw-switch/.test(t.target.className)||f()},j=function(t){var e=t.currentTarget,n="true"!==e.getAttribute("aria-checked");e.setAttribute("aria-checked",n),i.set("enableShortcuts",n)};return n=p("jw-shortcuts-close",(function(){f()}),i.get("localization").close,[st("close")]),Object(l.m)(c,n.element()),n.show(),t.appendChild(c),{el:c,close:f,open:w,toggleVisibility:function(){o?f():w()}}},ai=function(t){return'
    ')+"
    "};function ri(t){return(ri="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function si(t,e){for(var i=0;i16?n.activeTimeout=setTimeout(n.userInactiveTimeout,t):n.playerContainer.querySelector(".jw-tab-focus")?n.resetActiveTimeout():n.userInactive()},n}var i,n,r;return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&ji(t,e)}(e,t),i=e,(n=[{key:"resetActiveTimeout",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.inactiveTime=0}},{key:"enable",value:function(t,e){var i=this,n=this.context.createElement("div");n.className="jw-controls jw-reset",this.div=n;var r=this.context.createElement("div");r.className="jw-controls-backdrop jw-reset",this.backdrop=r,this.logo=this.playerContainer.querySelector(".jw-logo");var c=e.get("touchMode");if(!this.displayContainer){var u=new ye(e,t);u.buttons.display.on("click tap enter",(function(){i.trigger(a.p),i.userActive(1e3),t.playToggle(mi()),e.get("isFloating")?i.wrapperElement.focus():i.playerContainer.focus()})),this.div.appendChild(u.element()),this.displayContainer=u}this.infoOverlay=new ni(n,e,t,(function(t){Object(l.v)(i.div,"jw-info-open",t),t&&i.div.querySelector(".jw-info-close").focus()})),o.OS.mobile||(this.shortcutsTooltip=new oi(this.wrapperElement,t,e)),this.rightClickMenu=new Ie(this.infoOverlay,this.shortcutsTooltip),c?(Object(l.a)(this.playerContainer,"jw-flag-touch"),this.rightClickMenu.setup(e,this.playerContainer,this.wrapperElement)):e.change("flashBlocked",(function(t,e){e?i.rightClickMenu.destroy():i.rightClickMenu.setup(t,i.playerContainer,i.wrapperElement)}),this);var d=e.get("floating");if(d){var w=new di(n,e.get("localization").close);w.on(a.sb,(function(){return i.trigger("dismissFloating",{doNotForward:!0})})),!1!==d.dismissible&&Object(l.a)(this.playerContainer,"jw-floating-dismissible")}var f=this.controlbar=new se(t,e,this.playerContainer.querySelector(".jw-hidden-accessibility"));if(f.on(a.sb,(function(){return i.userActive()})),f.on("nextShown",(function(t){this.trigger("nextShown",t)}),this),f.on("adjustVolume",v,this),e.get("nextUpDisplay")&&!f.nextUpToolTip){var h=new Ce(e,t,this.playerContainer);h.on("all",this.trigger,this),h.setup(this.context),f.nextUpToolTip=h,this.div.appendChild(h.element())}this.div.appendChild(f.element());var j=null,g=this.settingsMenu=$e(f,(function(n,o){var r=e.get("state"),s={reason:"settingsInteraction"},c="keydown"===(o&&o.sourceEvent||o||{}).type;Object(l.v)(i.div,"jw-settings-open",n),Object(ti.a)(e.get("containerWidth"))<2&&(n&&r===a.pb?t.pause(s):n||r!==a.ob||j!==a.pb||t.play(s));var u=n||c?0:gi;i.userActive(u),j=r;var d=i.controlbar.elements.settingsButton;!n&&d&&(c?d.element().focus():o&&(e.get("isFloating")?i.wrapperElement:i.playerContainer).focus())}),e.get("localization"));Ge(g,f,e,t),o.OS.mobile?this.div.appendChild(g.element()):(this.playerContainer.setAttribute("aria-describedby","jw-shortcuts-tooltip-explanation"),this.div.insertBefore(g.element(),f.element()));var b=function(e){if(e.get("autostartMuted")){var n=function(){return i.unmuteAutoplay(t,e)},a=function(t,e){e||n()};o.OS.mobile&&(i.mute=p("jw-autostart-mute jw-off",n,e.get("localization").unmute,[st("volume-0")]),i.mute.show(),i.div.appendChild(i.mute.element())),f.renderVolume(!0,e.get("volume")),Object(l.a)(i.playerContainer,"jw-flag-autostart"),e.on("change:autostartFailed",n,i),e.on("change:autostartMuted change:mute",a,i),i.muteChangeCallback=a,i.unmuteCallback=n}};function m(i){var n=0,o=e.get("duration"),a=e.get("position");if("DVR"===e.get("streamType")){var r=e.get("dvrSeekLimit");n=o,o=Math.max(a,-r)}var l=Object(s.a)(a+i,n,o);t.seek(l,mi())}function v(i){var n=Object(s.a)(e.get("volume")+i,0,100);t.setVolume(n)}e.once("change:autostartMuted",b),b(e);var y=function(n){if(n.ctrlKey||n.metaKey)return!0;var o=!i.settingsMenu.visible,a=!0===e.get("enableShortcuts"),r=i.instreamState;if(a||-1!==bi.indexOf(n.keyCode)){switch(n.keyCode){case 27:if(e.get("fullscreen"))t.setFullscreen(!1),i.playerContainer.blur(),i.userInactive();else{var s=t.getPlugin("related");s&&s.close({type:"escape"})}i.rightClickMenu.el&&i.rightClickMenu.hideMenuHandler(),i.infoOverlay.visible&&i.infoOverlay.close(),i.shortcutsTooltip&&i.shortcutsTooltip.close();break;case 13:case 32:if(document.activeElement.classList.contains("jw-switch")&&32===n.keyCode)return!0;t.playToggle(mi());break;case 37:!r&&o&&m(-5);break;case 39:!r&&o&&m(5);break;case 38:o&&v(10);break;case 40:o&&v(-10);break;case 67:var l=t.getCaptionsList().length;if(l){var c=(t.getCurrentCaptions()+1)%l;t.setCurrentCaptions(c)}break;case 77:t.setMute();break;case 70:t.setFullscreen();break;case 191:i.shortcutsTooltip&&i.shortcutsTooltip.toggleVisibility();break;default:if(n.keyCode>=48&&n.keyCode<=59){var u=(n.keyCode-48)/10*e.get("duration");t.seek(u,mi())}}return/13|32|37|38|39|40/.test(n.keyCode)?(n.preventDefault(),!1):void 0}};this.playerContainer.addEventListener("keydown",y),this.keydownCallback=y;var k=function(t){if(9===t.keyCode){var e=i.playerContainer.contains(t.target)?0:gi;i.userActive(e)}};this.playerContainer.addEventListener("keyup",k),this.keyupCallback=k;var x=function(t){var e=t.relatedTarget||document.querySelector(":focus");e&&(i.playerContainer.contains(e)||i.userInactive())};this.playerContainer.addEventListener("blur",x,!0),this.blurCallback=x;var O=function t(){"jw-shortcuts-tooltip-explanation"===i.playerContainer.getAttribute("aria-describedby")&&i.playerContainer.removeAttribute("aria-describedby"),i.playerContainer.removeEventListener("blur",t,!0)};this.shortcutsTooltip&&(this.playerContainer.addEventListener("blur",O,!0),this.onRemoveShortcutsDescription=O),this.userActive(),this.addControls(),this.addBackdrop(),e.set("controlsEnabled",!0)}},{key:"addControls",value:function(){this.wrapperElement.appendChild(this.div)}},{key:"disable",value:function(t){var e=this.nextUpToolTip,i=this.settingsMenu,n=this.infoOverlay,o=this.controlbar,a=this.rightClickMenu,r=this.playerContainer,s=this.div;clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.off(),t.off(null,null,this),t.set("controlsEnabled",!1),s.parentNode&&(Object(l.o)(r,"jw-flag-touch"),s.parentNode.removeChild(s)),o&&o.destroy(),a&&a.destroy(),this.keydownCallback&&r.removeEventListener("keydown",this.keydownCallback),this.keyupCallback&&r.removeEventListener("keyup",this.keyupCallback),this.blurCallback&&r.removeEventListener("blur",this.blurCallback),this.onRemoveShortcutsDescription&&r.removeEventListener("blur",this.onRemoveShortcutsDescription),this.displayContainer&&this.displayContainer.destroy(),e&&e.destroy(),i&&(i.destroy(),s.removeChild(i.element())),n&&n.destroy(),this.removeBackdrop()}},{key:"controlbarHeight",value:function(){return this.dimensions.cbHeight||(this.dimensions.cbHeight=this.controlbar.element().clientHeight),this.dimensions.cbHeight}},{key:"element",value:function(){return this.div}},{key:"resize",value:function(){this.dimensions={}}},{key:"unmuteAutoplay",value:function(t,e){var i=!e.get("autostartFailed"),n=e.get("mute");i?n=!1:e.set("playOnViewable",!1),this.muteChangeCallback&&(e.off("change:autostartMuted change:mute",this.muteChangeCallback),this.muteChangeCallback=null),this.unmuteCallback&&(e.off("change:autostartFailed",this.unmuteCallback),this.unmuteCallback=null),e.set("autostartFailed",void 0),e.set("autostartMuted",void 0),t.setMute(n),this.controlbar.renderVolume(n,e.get("volume")),this.mute&&this.mute.hide(),Object(l.o)(this.playerContainer,"jw-flag-autostart"),this.userActive()}},{key:"mouseMove",value:function(t){var e=this.controlbar.element().contains(t.target),i=this.controlbar.nextUpToolTip&&this.controlbar.nextUpToolTip.element().contains(t.target),n=this.logo&&this.logo.contains(t.target),o=e||i||n?0:gi;this.userActive(o)}},{key:"userActive",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:gi;t>0?(this.inactiveTime=Object(c.a)()+t,-1===this.activeTimeout&&(this.activeTimeout=setTimeout(this.userInactiveTimeout,t))):this.resetActiveTimeout(),this.showing||(Object(l.o)(this.playerContainer,"jw-flag-user-inactive"),this.showing=!0,this.trigger("userActive"))}},{key:"userInactive",value:function(){clearTimeout(this.activeTimeout),this.activeTimeout=-1,this.settingsMenu.visible||(this.inactiveTime=0,this.showing=!1,Object(l.a)(this.playerContainer,"jw-flag-user-inactive"),this.trigger("userInactive"))}},{key:"addBackdrop",value:function(){var t=this.instreamState?this.div:this.wrapperElement.querySelector(".jw-captions");this.wrapperElement.insertBefore(this.backdrop,t)}},{key:"removeBackdrop",value:function(){var t=this.backdrop.parentNode;t&&t.removeChild(this.backdrop)}},{key:"setupInstream",value:function(){this.instreamState=!0,this.userActive(),this.addBackdrop(),this.settingsMenu&&this.settingsMenu.close(),Object(l.o)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","-1")}},{key:"destroyInstream",value:function(t){this.instreamState=null,this.addBackdrop(),t.get("autostartMuted")&&Object(l.a)(this.playerContainer,"jw-flag-autostart"),this.controlbar.elements.time.element().setAttribute("tabindex","0")}}])&&wi(i.prototype,n),r&&wi(i,r),e}(r.a)},function(t,e,i){"use strict";i.r(e);var n=i(0),o=i(12),a=i(50),r=i(37);var s=i(44),l=i(51),c=i(26),u=i(25),d=i(3),p=i(46),w=i(2),f=i(7),h=i(34);function j(t){var e=!1;return{async:function(){var i=this,n=arguments;return Promise.resolve().then((function(){if(!e)return t.apply(i,n)}))},cancel:function(){e=!0},cancelled:function(){return e}}}var g=i(1);function b(t){return function(e,i){var o=t.mediaModel,a=Object(n.h)({},i,{type:e});switch(e){case d.T:if(o.get(d.T)===i.mediaType)return;o.set(d.T,i.mediaType);break;case d.U:return void o.set(d.U,Object(n.h)({},i));case d.M:if(i[e]===t.model.getMute())return;break;case d.bb:i.newstate===d.mb&&(t.thenPlayPromise.cancel(),o.srcReset());var r=o.attributes.mediaState;o.attributes.mediaState=i.newstate,o.trigger("change:mediaState",o,i.newstate,r);break;case d.F:return t.beforeComplete=!0,t.trigger(d.B,a),void(t.attached&&!t.background&&t._playbackComplete());case d.G:o.get("setup")?(t.thenPlayPromise.cancel(),o.srcReset()):(e=d.tb,a.code+=1e5);break;case d.K:a.metadataType||(a.metadataType="unknown");var s=i.duration;Object(n.v)(s)&&(o.set("seekRange",i.seekRange),o.set("duration",s));break;case d.D:o.set("buffer",i.bufferPercent);case d.S:o.set("seekRange",i.seekRange),o.set("position",i.position),o.set("currentTime",i.currentTime);var l=i.duration;Object(n.v)(l)&&o.set("duration",l),e===d.S&&Object(n.s)(t.item.starttime)&&delete t.item.starttime;break;case d.R:var c=t.mediaElement;c&&c.paused&&o.set("mediaState","paused");break;case d.I:o.set(d.I,i.levels);case d.J:var u=i.currentQuality,p=i.levels;u>-1&&p.length>1&&o.set("currentLevel",parseInt(u));break;case d.f:o.set(d.f,i.tracks);case d.g:var w=i.currentTrack,f=i.tracks;w>-1&&f.length>0&&w=Math.max(l,p.a)&&(t.preloadNextItem(),v=!0)}function A(t){var e={};b.tag&&(e.tag=b.tag),this.trigger(d.F,e),P.call(this,t)}function P(t){j={},a&&h+10?t:null,f&&f.model.set("skipOffset",s)}};Object(n.h)(lt.prototype,f.a);var ct=lt,ut=i(63),dt=i(60),pt=function(t){var e=this,i=[],n={},o=0,a=0;function r(t){if(t.data=t.data||[],t.name=t.label||t.name||t.language,t._id=Object(dt.a)(t,i.length),!t.name){var e=Object(dt.b)(t,o);t.name=e.label,o=e.unknownCount}n[t._id]=t,i.push(t)}function s(){for(var t=[{id:"off",label:"Off"}],e=0;e')+'
    '},ht=i(36),jt=44,gt=function(t){var e=t.get("height");if(t.get("aspectratio"))return!1;if("string"==typeof e&&e.indexOf("%")>-1)return!1;var i=1*e||NaN;return!!(i=isNaN(i)?t.get("containerHeight"):i)&&(i&&i<=jt)},bt=i(54);function mt(t,e){if(t.get("fullscreen"))return 1;if(!t.get("activeTab"))return 0;if(t.get("isFloating"))return 1;var i=t.get("intersectionRatio");return void 0===i&&(i=function(t){var e=document.documentElement,i=document.body,n={top:0,left:0,right:e.clientWidth||i.clientWidth,width:e.clientWidth||i.clientWidth,bottom:e.clientHeight||i.clientHeight,height:e.clientHeight||i.clientHeight};if(!i.contains(t))return 0;if("none"===window.getComputedStyle(t).display)return 0;var o=vt(t);if(!o)return 0;var a=o,r=t.parentNode,s=!1;for(;!s;){var l=null;if(r===i||r===e||1!==r.nodeType?(s=!0,l=n):"visible"!==window.getComputedStyle(r).overflow&&(l=vt(r)),l&&(c=l,u=a,d=void 0,p=void 0,w=void 0,f=void 0,h=void 0,j=void 0,d=Math.max(c.top,u.top),p=Math.min(c.bottom,u.bottom),w=Math.max(c.left,u.left),f=Math.min(c.right,u.right),j=p-d,!(a=(h=f-w)>=0&&j>=0&&{top:d,bottom:p,left:w,right:f,width:h,height:j})))return 0;r=r.parentNode}var c,u,d,p,w,f,h,j;var g=o.width*o.height,b=a.width*a.height;return g?b/g:0}(e),window.top!==window.self&&i)?0:i}function vt(t){try{return t.getBoundingClientRect()}catch(t){}}var yt=i(49),kt=i(42),xt=i(58),Ot=i(10);var Ct=i(32),Tt=i(5),St=i(6),Mt=["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"],Et=function(t,e,i){for(var n=t.requestFullscreen||t.webkitRequestFullscreen||t.webkitRequestFullScreen||t.mozRequestFullScreen||t.msRequestFullscreen,o=e.exitFullscreen||e.webkitExitFullscreen||e.webkitCancelFullScreen||e.mozCancelFullScreen||e.msExitFullscreen,a=!(!n||!o),r=Mt.length;r--;)e.addEventListener(Mt[r],i);return{events:Mt,supportsDomFullscreen:function(){return a},requestFullscreen:function(){n.call(t,{navigationUI:"hide"})},exitFullscreen:function(){null!==this.fullscreenElement()&&o.apply(e)},fullscreenElement:function(){var t=e.fullscreenElement,i=e.webkitCurrentFullScreenElement,n=e.mozFullScreenElement,o=e.msFullscreenElement;return null===t?t:t||i||n||o},destroy:function(){for(var t=Mt.length;t--;)e.removeEventListener(Mt[t],i)}}},_t=i(40);function zt(t,e){for(var i=0;io?a:n*r/i)*u}return t}(i))/10}f.get("renderCaptionsNatively")?function(t,e){var i="#".concat(t," .jw-video::-webkit-media-text-track-display");e&&(e+="px",m.OS.iOS&&Object(Ot.b)(i,{fontSize:"inherit"},t,!0));p.fontSize=e,Object(Ot.b)(i,p,t,!0)}(f.get("id"),e):Object(Ot.d)(s,{fontSize:e})}}function g(t,e,i){var n=Object(Ot.c)("#000000",i);"dropshadow"===t?e.textShadow="0 2px 1px "+n:"raised"===t?e.textShadow="0 0 5px "+n+", 0 1px 5px "+n+", 0 2px 5px "+n:"depressed"===t?e.textShadow="0 -2px 1px "+n:"uniform"===t&&(e.textShadow="-2px 0 1px "+n+",2px 0 1px "+n+",0 -2px 1px "+n+",0 2px 1px "+n+",-1px 1px 1px "+n+",1px 1px 1px "+n+",1px -1px 1px "+n+",1px 1px 1px "+n)}(s=document.createElement("div")).className="jw-captions jw-reset",this.show=function(){Object(Tt.a)(s,"jw-captions-enabled")},this.hide=function(){Object(Tt.o)(s,"jw-captions-enabled")},this.populate=function(t){f.get("renderCaptionsNatively")||(a=[],o=t,t?this.selectCues(t,r):this.renderCues())},this.resize=function(){j(),this.renderCues(!0)},this.renderCues=function(t){t=!!t,At&&At.processCues(window,a,s,t)},this.selectCues=function(t,e){if(t&&t.data&&e&&!f.get("renderCaptionsNatively")){var i=this.getAlignmentPosition(t,e);!1!==i&&(a=this.getCurrentCues(t.data,i),this.renderCues(!0))}},this.getCurrentCues=function(t,e){return Object(n.i)(t,(function(t){return e>=t.startTime&&(!t.endTime||e<=t.endTime)}))},this.getAlignmentPosition=function(t,e){var i=t.source,o=e.metadata,a=e.currentTime;return i&&o&&Object(n.s)(o[i])&&(a=o[i]),a},this.clear=function(){Object(Tt.g)(s)},this.setup=function(t,i){l=document.createElement("div"),c=document.createElement("span"),l.className="jw-captions-window jw-reset",c.className="jw-captions-text jw-reset",e=Object(n.h)({},Lt,i),u=Lt.fontScale,h(e.fontSize);var o=e.windowColor,a=e.windowOpacity,r=e.edgeStyle;p={};var d={};!function(t,e){var i=e.color,n=e.fontOpacity;(i||n!==Lt.fontOpacity)&&(t.color=Object(Ot.c)(i||"#ffffff",n));if(e.back){var o=e.backgroundColor,a=e.backgroundOpacity;o===Lt.backgroundColor&&a===Lt.backgroundOpacity||(t.backgroundColor=Object(Ot.c)(o,a))}else t.background="transparent";e.fontFamily&&(t.fontFamily=e.fontFamily);e.fontStyle&&(t.fontStyle=e.fontStyle);e.fontWeight&&(t.fontWeight=e.fontWeight);e.textDecoration&&(t.textDecoration=e.textDecoration)}(d,e),(o||a!==Lt.windowOpacity)&&(p.backgroundColor=Object(Ot.c)(o||"#000000",a)),g(r,d,e.fontOpacity),e.back||null!==r||g("uniform",d),Object(Ot.d)(l,p),Object(Ot.d)(c,d),function(t,e){j(),function(t,e){m.Browser.safari&&Object(Ot.b)("#"+t+" .jw-video::-webkit-media-text-track-display-backdrop",{backgroundColor:e.backgroundColor},t,!0);Object(Ot.b)("#"+t+" .jw-video::-webkit-media-text-track-display",p,t,!0),Object(Ot.b)("#"+t+" .jw-video::cue",e,t,!0)}(t,e),function(t,e){Object(Ot.b)("#"+t+" .jw-text-track-display",p,t),Object(Ot.b)("#"+t+" .jw-text-track-cue",e,t)}(t,e)}(t,d),l.appendChild(c),s.appendChild(l),f.change("captionsTrack",(function(t,e){this.populate(e)}),this),f.set("captions",e)},this.element=function(){return s},this.destroy=function(){f.off(null,null,this),this.off()};var b=function(t){r=t,w.selectCues(o,r)};f.on("change:playlistItem",(function(){r=null,a=[]}),this),f.on(d.Q,(function(t){a=[],b(t)}),this),f.on(d.S,b,this),f.on("subtitlesTrackData",(function(){this.selectCues(o,r)}),this),f.on("change:captionsList",(function t(e,n){var o=this;1!==n.length&&(e.get("renderCaptionsNatively")||At||(i.e(8).then(function(t){At=i(93).default}.bind(null,i)).catch(Object(It.c)(301121)).catch((function(t){o.trigger(d.tb,t)})),e.off("change:captionsList",t,this)))}),this)};Object(n.h)(Rt.prototype,f.a);var Bt=Rt,Vt=function(t,e){var i=e?" jw-hide":"";return'')},Ht={linktarget:"_blank",margin:8,hide:!1,position:"top-right"};function Nt(t){var e,i;Object(n.h)(this,f.a);var o=new Image;this.setup=function(){(i=Object(n.h)({},Ht,t.get("logo"))).position=i.position||Ht.position,i.hide="true"===i.hide.toString(),i.file&&"control-bar"!==i.position&&(e||(e=Object(Tt.e)(Vt(i.position,i.hide))),t.set("logo",i),o.onload=function(){var n=this.height,o=this.width,a={backgroundImage:'url("'+this.src+'")'};if(i.margin!==Ht.margin){var r=/(\w+)-(\w+)/.exec(i.position);3===r.length&&(a["margin-"+r[1]]=i.margin,a["margin-"+r[2]]=i.margin)}var s=.15*t.get("containerHeight"),l=.15*t.get("containerWidth");if(n>s||o>l){var c=o/n;l/s>c?(n=s,o=s*c):(o=l,n=l/c)}a.width=Math.round(o),a.height=Math.round(n),Object(Ot.d)(e,a),t.set("logoWidth",a.width)},o.src=i.file,i.link&&(e.setAttribute("tabindex","0"),e.setAttribute("aria-label",t.get("localization").logo)),this.ui=new _t.a(e).on("click tap enter",(function(t){t&&t.stopPropagation&&t.stopPropagation(),this.trigger(d.A,{link:i.link,linktarget:i.linktarget})}),this))},this.setContainer=function(t){e&&t.appendChild(e)},this.element=function(){return e},this.position=function(){return i.position},this.destroy=function(){o.onload=null,this.ui&&this.ui.destroy()}}var Ft=function(t){this.model=t,this.image=null};Object(n.h)(Ft.prototype,{setup:function(t){this.el=t},setImage:function(t){var e=this.image;e&&(e.onload=null),this.image=null;var i="";"string"==typeof t&&(i='url("'+t+'")',(e=this.image=new Image).src=t),Object(Ot.d)(this.el,{backgroundImage:i})},resize:function(t,e,i){if("uniform"===i){if(t&&(this.playerAspectRatio=t/e),!this.playerAspectRatio||!this.image||"complete"!==(s=this.model.get("state"))&&"idle"!==s&&"error"!==s&&"buffering"!==s)return;var n=this.image,o=null;if(n){if(0===n.width){var a=this;return void(n.onload=function(){a.resize(t,e,i)})}var r=n.width/n.height;Math.abs(this.playerAspectRatio-r)<.09&&(o="cover")}Object(Ot.d)(this.el,{backgroundSize:o})}var s},element:function(){return this.el}});var qt=Ft,Dt=function(t){this.model=t.player};Object(n.h)(Dt.prototype,{hide:function(){Object(Ot.d)(this.el,{display:"none"})},show:function(){Object(Ot.d)(this.el,{display:""})},setup:function(t){this.el=t;var e=this.el.getElementsByTagName("div");this.title=e[0],this.description=e[1],this.model.on("change:logoWidth",this.update,this),this.model.change("playlistItem",this.playlistItem,this)},update:function(t){var e={},i=t.get("logo");if(i){var n=1*(""+i.margin).replace("px",""),o=t.get("logoWidth")+(isNaN(n)?0:n+10);"top-left"===i.position?e.paddingLeft=o:"top-right"===i.position&&(e.paddingRight=o)}Object(Ot.d)(this.el,e)},playlistItem:function(t,e){if(e)if(t.get("displaytitle")||t.get("displaydescription")){var i="",n="";e.title&&t.get("displaytitle")&&(i=e.title),e.description&&t.get("displaydescription")&&(n=e.description),this.updateText(i,n)}else this.hide()},updateText:function(t,e){Object(Tt.q)(this.title,t),Object(Tt.q)(this.description,e),this.title.firstChild||this.description.firstChild?this.show():this.hide()},element:function(){return this.el}});var Ut=Dt;function Wt(t,e){for(var i=0;it)}if(e.get("controls")){var r=gt(e);Object(Tt.v)(u,"jw-flag-audio-player",r),e.set("audioMode",r)}}function R(){e.set("visibility",mt(e,u))}this.updateBounds=function(){Object(kt.a)(k);var t=e.get("isFloating")?p:u,i=document.body.contains(t),n=Object(Tt.c)(t),r=Math.round(n.width),s=Math.round(n.height);if(E=Object(Tt.c)(u),r===o&&s===a)return o&&a||P(),void e.set("inDom",i);r&&s||o&&a||P(),(r||s||i)&&(e.set("containerWidth",r),e.set("containerHeight",s)),e.set("inDom",i),i&&bt.a.observe(u)},this.updateStyles=function(){var t=e.get("containerWidth"),i=e.get("containerHeight");L(t,i),z&&z.resize(t,i),G(t,i),v.resize(),O&&F()},this.checkResized=function(){var t=e.get("containerWidth"),i=e.get("containerHeight"),n=e.get("isFloating");if(t!==o||i!==a){this.resizeListener||(this.resizeListener=new Xt.a(p,this,e)),o=t,a=i,l.trigger(d.hb,{width:t,height:i});var s=Object(xt.a)(t);_!==s&&(_=s,l.trigger(d.j,{breakpoint:_}))}n!==r&&(r=n,l.trigger(d.x,{floating:n}),R())},this.responsiveListener=P,this.setup=function(){var n,o,a,r;g.setup(u.querySelector(".jw-preview")),b.setup(u.querySelector(".jw-title")),(i=new Nt(e)).setup(),i.setContainer(p),i.on(d.A,K),v.setup(u.id,e.get("captions")),b.element().parentNode.insertBefore(v.element(),b.element()),n=t,a=new Pt(o=e,h),r=o.get("controls"),a.on({click:function(){l.trigger(d.p),z&&(ct()?z.settingsMenu.close():ut()?z.infoOverlay.close():n.playToggle({reason:"interaction"}))},tap:function(){u.removeEventListener("mousemove",W),u.removeEventListener("mouseout",Y),u.removeEventListener("mouseover",Q),l.trigger(d.p),ct()&&z.settingsMenu.close(),ut()&&z.infoOverlay.close();var t=o.get("state");if(r&&(t===d.mb||t===d.kb||o.get("instream")&&t===d.ob)&&n.playToggle({reason:"interaction"}),r&&t===d.ob){if(o.get("instream")||o.get("castActive")||"audio"===o.get("mediaType"))return;Object(Tt.v)(u,"jw-flag-controls-hidden"),l.dismissible&&Object(Tt.v)(u,"jw-floating-dismissible",Object(Tt.i)(u,"jw-flag-controls-hidden")),v.renderCues(!0)}else z&&(z.showing?z.userInactive():z.userActive())},doubleClick:function(){return z&&n.setFullscreen()}}),u.addEventListener("mousemove",W),u.addEventListener("mouseover",Q),u.addEventListener("mouseout",Y),C=a,S=new _t.a(u).on("click",(function(){})),T=Et(u,document,et),e.on("change:hideAdsControls",(function(t,e){Object(Tt.v)(u,"jw-flag-ads-hide-controls",e)})),e.on("change:scrubbing",(function(t,e){Object(Tt.v)(u,"jw-flag-dragging",e)})),e.on("change:playRejected",(function(t,e){Object(Tt.v)(u,"jw-flag-play-rejected",e)})),e.on(d.X,tt),e.on("change:".concat(d.U),(function(){G(),v.resize()})),e.player.on("change:errorEvent",at),e.change("stretching",X);var s=e.get("width"),c=e.get("height"),f=$(s,c);Object(Ot.d)(u,f),e.change("aspectratio",Z),L(s,c),e.get("controls")||(Object(Tt.a)(u,"jw-flag-controls-hidden"),Object(Tt.o)(u,"jw-floating-dismissible")),Kt&&Object(Tt.a)(u,"jw-ie");var j=e.get("skin")||{};j.name&&Object(Tt.p)(u,/jw-skin-\S+/,"jw-skin-"+j.name);var y=function(t){t||(t={});var e=t.active,i=t.inactive,n=t.background,o={};return o.controlbar=function(t){if(t||e||i||n){var o={};return t=t||{},o.iconsActive=t.iconsActive||e,o.icons=t.icons||i,o.text=t.text||i,o.background=t.background||n,o}}(t.controlbar),o.timeslider=function(t){if(t||e){var i={};return t=t||{},i.progress=t.progress||e,i.rail=t.rail,i}}(t.timeslider),o.menus=function(t){if(t||e||i||n){var o={};return t=t||{},o.text=t.text||i,o.textActive=t.textActive||e,o.background=t.background||n,o}}(t.menus),o.tooltips=function(t){if(t||i||n){var e={};return t=t||{},e.text=t.text||i,e.background=t.background||n,e}}(t.tooltips),o}(j);!function(t,e){var i;function n(e,i,n,o){if(n){e=Object(w.f)(e,"#"+t+(o?"":" "));var a={};a[i]=n,Object(Ot.b)(e.join(", "),a,t)}}e&&(e.controlbar&&function(e){n([".jw-controlbar .jw-icon-inline.jw-text",".jw-title-primary",".jw-title-secondary"],"color",e.text),e.icons&&(n([".jw-button-color:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:not(.jw-icon-cast)"],"color",e.icons),n([".jw-display-icon-container .jw-button-color"],"color",e.icons),Object(Ot.b)("#".concat(t," .jw-icon-cast google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(e.icons,"}"),t));e.iconsActive&&(n([".jw-display-icon-container .jw-button-color:hover",".jw-display-icon-container .jw-button-color:focus"],"color",e.iconsActive),n([".jw-button-color.jw-toggle:not(.jw-icon-cast)",".jw-button-color:hover:not(.jw-icon-cast)",".jw-button-color:focus:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:hover:not(.jw-icon-cast)"],"color",e.iconsActive),n([".jw-svg-icon-buffer"],"fill",e.icons),Object(Ot.b)("#".concat(t," .jw-icon-cast:hover google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(e.iconsActive,"}"),t),Object(Ot.b)("#".concat(t," .jw-icon-cast:focus google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(e.iconsActive,"}"),t),Object(Ot.b)("#".concat(t," .jw-icon-cast google-cast-launcher.jw-off:focus"),"{--disconnected-color: ".concat(e.iconsActive,"}"),t),Object(Ot.b)("#".concat(t," .jw-icon-cast google-cast-launcher"),"{--connected-color: ".concat(e.iconsActive,"}"),t),Object(Ot.b)("#".concat(t," .jw-icon-cast google-cast-launcher:focus"),"{--connected-color: ".concat(e.iconsActive,"}"),t),Object(Ot.b)("#".concat(t," .jw-icon-cast:hover google-cast-launcher"),"{--connected-color: ".concat(e.iconsActive,"}"),t),Object(Ot.b)("#".concat(t," .jw-icon-cast:focus google-cast-launcher"),"{--connected-color: ".concat(e.iconsActive,"}"),t));n([" .jw-settings-topbar",":not(.jw-state-idle) .jw-controlbar",".jw-flag-audio-player .jw-controlbar"],"background",e.background,!0)}(e.controlbar),e.timeslider&&function(t){var e=t.progress;"none"!==e&&(n([".jw-progress",".jw-knob"],"background-color",e),n([".jw-buffer"],"background-color",Object(Ot.c)(e,50)));n([".jw-rail"],"background-color",t.rail),n([".jw-background-color.jw-slider-time",".jw-slider-time .jw-cue"],"background-color",t.background)}(e.timeslider),e.menus&&(n([".jw-option",".jw-toggle.jw-off",".jw-skip .jw-skip-icon",".jw-nextup-tooltip",".jw-nextup-close",".jw-settings-content-item",".jw-related-title"],"color",(i=e.menus).text),n([".jw-option.jw-active-option",".jw-option:not(.jw-active-option):hover",".jw-option:not(.jw-active-option):focus",".jw-settings-content-item:hover",".jw-nextup-tooltip:hover",".jw-nextup-tooltip:focus",".jw-nextup-close:hover"],"color",i.textActive),n([".jw-nextup",".jw-settings-menu"],"background",i.background)),e.tooltips&&function(t){n([".jw-skip",".jw-tooltip .jw-text",".jw-time-tip .jw-text"],"background-color",t.background),n([".jw-time-tip",".jw-tooltip"],"color",t.background),n([".jw-skip"],"border","none"),n([".jw-skip .jw-text",".jw-skip .jw-icon",".jw-time-tip .jw-text",".jw-tooltip .jw-text"],"color",t.text)}(e.tooltips),e.menus&&function(e){if(e.textActive){var i={color:e.textActive,borderColor:e.textActive,stroke:e.textActive};Object(Ot.b)("#".concat(t," .jw-color-active"),i,t),Object(Ot.b)("#".concat(t," .jw-color-active-hover:hover"),i,t)}if(e.text){var n={color:e.text,borderColor:e.text,stroke:e.text};Object(Ot.b)("#".concat(t," .jw-color-inactive"),n,t),Object(Ot.b)("#".concat(t," .jw-color-inactive-hover:hover"),n,t)}}(e.menus))}(e.get("id"),y),e.set("mediaContainer",h),e.set("iFrame",m.Features.iframe),e.set("activeTab",Object(yt.a)()),e.set("touchMode",Zt&&("string"==typeof c||c>=jt)),bt.a.add(this),e.get("enableGradient")&&!Kt&&Object(Tt.a)(u,"jw-ab-drop-shadow"),this.isSetup=!0,e.trigger("viewSetup",u);var k=document.body.contains(u);k&&bt.a.observe(u),e.set("inDom",k)},this.init=function(){this.updateBounds(),e.on("change:fullscreen",J),e.on("change:activeTab",R),e.on("change:fullscreen",R),e.on("change:intersectionRatio",R),e.on("change:visibility",U),e.on("instreamMode",(function(t){t?dt():pt()})),R(),1!==bt.a.size()||e.get("visibility")||U(e,1,0);var t=e.player;e.change("state",rt),t.change("controls",q),e.change("streamType",nt),e.change("mediaType",ot),t.change("playlistItem",(function(t,e){lt(t,e)})),o=a=null,O&&m.OS.mobile&&bt.a.addScrollHandler(F),this.checkResized()};var B,V=62,H=!0;function N(){var t=e.get("isFloating"),i=E.top0&&void 0!==arguments[0])||arguments[0],e={x:0,y:0,width:o||0,height:a||0};return z&&t&&(e.height-=z.controlbarHeight()),e},this.setCaptions=function(t){v.clear(),v.setup(e.get("id"),t),v.resize()},this.setIntersection=function(t){var i=Math.round(100*t.intersectionRatio)/100;e.set("intersectionRatio",i),O&&!A()&&(M=M||i>=.5)&&wt(i)},this.stopFloating=function(t,i){if(t&&(O=null,bt.a.removeScrollHandler(F)),Jt===u){Jt=null,e.set("isFloating",!1);var n=function(){Object(Tt.o)(u,"jw-flag-floating"),Z(e,e.get("aspectratio")),Object(Ot.d)(u,{backgroundImage:null}),Object(Ot.d)(p,{maxWidth:null,width:null,height:null,left:null,right:null,top:null,bottom:null,margin:null,transform:null,transition:null,"transition-timing-function":null})};i?(Object(Ot.d)(p,{transform:"translateY(-".concat(V-E.top,"px)"),"transition-timing-function":"ease-out"}),setTimeout(n,150)):n(),j.disable(),P()}},this.destroy=function(){e.destroy(),bt.a.unobserve(u),bt.a.remove(this),this.isSetup=!1,this.off(),Object(kt.a)(k),clearTimeout(y),Jt===u&&(Jt=null),S&&(S.destroy(),S=null),T&&(T.destroy(),T=null),z&&z.disable(e),C&&(C.destroy(),u.removeEventListener("mousemove",W),u.removeEventListener("mouseout",Y),u.removeEventListener("mouseover",Q),C=null),v.destroy(),i&&(i.destroy(),i=null),Object(Ot.a)(e.get("id")),this.resizeListener&&(this.resizeListener.destroy(),delete this.resizeListener),O&&m.OS.mobile&&bt.a.removeScrollHandler(F)}};function Gt(t,e,i){return(Gt="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(t,e,i){var n=function(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=ae(t)););return t}(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(i):o.value}})(t,e,i||t)}function te(t){return(te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ee(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ie(t,e){for(var i=0;ie&&t(),e=n}};function Ee(t,e){e.off(d.N,t._onPlayAttempt),e.off(d.fb,t._triggerFirstFrame),e.off(d.S,t._onTime),t.off("change:activeTab",t._onTabVisible)}var _e=function(t,e){t.change("mediaModel",(function(t,i,n){t._qoeItem&&n&&t._qoeItem.end(n.get("mediaState")),t._qoeItem=new Ce.a,t._qoeItem.getFirstFrame=function(){var t=this.between(d.N,d.H),e=this.between(Se,d.H);return e>0&&e0&&rt(e,t.tracks)}),C).on(d.F,(function(){Promise.resolve().then(at)}),C).on(d.G,C.triggerError,C),_e(T,B),T.on(d.w,C.triggerError,C),T.on("change:state",(function(t,e,i){X()||Z.call(O,t,e,i)}),this),T.on("change:castState",(function(t,e){C.trigger(d.m,e)})),T.on("change:fullscreen",(function(t,e){C.trigger(d.y,{fullscreen:e}),e&&t.set("playOnViewable",!1)})),T.on("change:volume",(function(t,e){C.trigger(d.V,{volume:e})})),T.on("change:mute",(function(t){C.trigger(d.M,{mute:t.getMute()})})),T.on("change:playbackRate",(function(t,e){C.trigger(d.ab,{playbackRate:e,position:t.get("position")})}));var V=function t(e,i){"clickthrough"!==i&&"interaction"!==i&&"external"!==i||(T.set("playOnViewable",!1),T.off("change:playReason change:pauseReason",t))};function H(t,e){Object(n.u)(e)||T.set("viewable",Math.round(e))}function N(){dt&&(!0!==T.get("autostart")||T.get("playOnViewable")||G("autostart"),dt.flush())}function F(t,e){C.trigger("viewable",{viewable:e}),q()}function q(){if((o.a[0]===e||1===T.get("viewable"))&&"idle"===T.get("state")&&!1===T.get("autostart"))if(!b.primed()&&m.OS.android){var t=b.getTestElement(),i=C.getMute();Promise.resolve().then((function(){return be(t,{muted:i})})).then((function(){"idle"===T.get("state")&&B.preloadVideo()})).catch(Pe)}else B.preloadVideo()}function D(t){C._instreamAdapter.noResume=!t,t||et({reason:"viewable"})}function U(t){t||(C.pause({reason:"viewable"}),T.set("playOnViewable",!t))}function W(t,e){var i=X();if(t.get("playOnViewable")){if(e){var n=t.get("autoPause").pauseAds,o=t.get("pauseReason");K()===d.mb?G("viewable"):i&&!n||"interaction"===o||J({reason:"viewable"})}else m.OS.mobile&&!i&&(C.pause({reason:"autostart"}),T.set("playOnViewable",!0));m.OS.mobile&&i&&D(e)}}function Q(t,e){var i=t.get("state"),n=X(),o=t.get("playReason");n?t.get("autoPause").pauseAds?U(e):D(e):i===d.pb||i===d.jb?U(e):i===d.mb&&"playlist"===o&&t.once("change:state",(function(){U(e)}))}function X(){var t=C._instreamAdapter;return!!t&&t.getState()}function K(){var t=X();return t||T.get("state")}function J(t){if(_.cancel(),M=!1,T.get("state")===d.lb)return Promise.resolve();var i=$(t);return T.set("playReason",i),X()?(e.pauseAd(!1,t),Promise.resolve()):(T.get("state")===d.kb&&(tt(!0),C.setItemIndex(0)),!S&&(S=!0,C.trigger(d.C,{playReason:i,startTime:t&&t.startTime?t.startTime:T.get("playlistItem").starttime}),S=!1,Oe()&&!b.primed()&&b.prime(),"playlist"===i&&T.get("autoPause").viewability&&Q(T,T.get("viewable")),x)?(Oe()&&!L&&T.get("mediaElement").load(),x=!1,k=null,Promise.resolve()):B.playVideo(i).then(b.played))}function $(t){return t&&t.reason?t.reason:"unknown"}function G(t){if(K()===d.mb){_=j(N);var e=T.get("advertising");(function(t,e){var i=e.cancelable,n=e.muted,o=void 0!==n&&n,a=e.allowMuted,r=void 0!==a&&a,s=e.timeout,l=void 0===s?1e4:s,c=t.getTestElement(),u=o?"muted":"".concat(r);ke[u]||(ke[u]=be(c,{muted:o}).catch((function(t){if(!i.cancelled()&&!1===o&&r)return be(c,{muted:o=!0});throw t})).then((function(){return o?(ke[u]=null,ve):me})).catch((function(t){throw clearTimeout(d),ke[u]=null,t.reason=ye,t})));var d,p=ke[u].then((function(t){if(clearTimeout(d),i.cancelled()){var e=new Error("Autoplay test was cancelled");throw e.reason="cancelled",e}return t})),w=new Promise((function(t,e){d=setTimeout((function(){ke[u]=null;var t=new Error("Autoplay test timed out");t.reason="timeout",e(t)}),l)}));return Promise.race([p,w])})(b,{cancelable:_,muted:C.getMute(),allowMuted:!e||e.autoplayadsmuted}).then((function(e){return T.set("canAutoplay",e),e!==ve||C.getMute()||(T.set("autostartMuted",!0),ut(),T.once("change:autostartMuted",(function(t){t.off("change:viewable",W),C.trigger(d.M,{mute:T.getMute()})}))),C.getMute()&&T.get("enableDefaultCaptions")&&y.selectDefaultIndex(1),J({reason:t}).catch((function(){C._instreamAdapter||T.set("autostartFailed",!0),k=null}))})).catch((function(t){if(T.set("canAutoplay",ye),T.set("autostart",!1),!_.cancelled()){var e=Object(g.w)(t);C.trigger(d.h,{reason:t.reason,code:e,error:t})}}))}}function tt(t){if(_.cancel(),dt.empty(),X()){var e=C._instreamAdapter;return e&&(e.noResume=!0),void(k=function(){return B.stopVideo()})}k=null,!t&&(M=!0),S&&(x=!0),T.set("errorEvent",void 0),B.stopVideo()}function et(t){var e=$(t);T.set("pauseReason",e),T.set("playOnViewable","viewable"===e)}function it(t){k=null,_.cancel();var i=X();if(i&&i!==d.ob)return et(t),void e.pauseAd(!0,t);switch(T.get("state")){case d.lb:return;case d.pb:case d.jb:et(t),B.pause();break;default:S&&(x=!0)}}function nt(t,e){tt(!0),C.setItemIndex(t),C.play(e)}function ot(t){nt(T.get("item")+1,t)}function at(){C.completeCancelled()||(k=C.completeHandler,C.shouldAutoAdvance()?C.nextItem():T.get("repeat")?ot({reason:"repeat"}):(m.OS.iOS&<(!1),T.set("playOnViewable",!1),T.set("state",d.kb),C.trigger(d.cb,{})))}function rt(t,e){t=parseInt(t,10)||0,T.persistVideoSubtitleTrack(t,e),B.subtitles=t,C.trigger(d.k,{tracks:st(),track:t})}function st(){return y.getCaptionsList()}function lt(t){Object(n.o)(t)||(t=!T.get("fullscreen")),T.set("fullscreen",t),C._instreamAdapter&&C._instreamAdapter._adModel&&C._instreamAdapter._adModel.set("fullscreen",t)}function ut(){B.mute=T.getMute(),B.volume=T.get("volume")}T.on("change:playReason change:pauseReason",V),C.on(d.c,(function(t){return V(0,t.playReason)})),C.on(d.b,(function(t){return V(0,t.pauseReason)})),T.on("change:scrubbing",(function(t,e){e?(E=T.get("state")!==d.ob,it()):E&&J({reason:"interaction"})})),T.on("change:captionsList",(function(t,e){C.trigger(d.l,{tracks:e,track:T.get("captionsIndex")||0})})),T.on("change:mediaModel",(function(t,e){var i=this;t.set("errorEvent",void 0),e.change("mediaState",(function(e,i){var n;t.get("errorEvent")||t.set(d.bb,(n=i)===d.nb||n===d.qb?d.jb:n)}),this),e.change("duration",(function(e,i){if(0!==i){var n=t.get("minDvrWindow"),o=Object(xe.b)(i,n);t.setStreamType(o)}}),this);var n=t.get("item")+1,o="autoplay"===(t.get("related")||{}).oncomplete,a=t.get("playlist")[n];if((a||o)&&L){e.on("change:position",(function t(n,r){var s=a&&!a.daiSetting,l=e.get("duration");s&&r&&l>0&&r>=l-p.b?(e.off("change:position",t,i),B.backgroundLoad(a)):o&&(a=T.get("nextUp"))}),this)}})),(y=new wt(T)).on("all",I,C),R.on("viewSetup",(function(t){Object(a.b)(O,t)})),this.playerReady=function(){v.once(d.hb,(function(){try{!function(){T.change("visibility",H),A.off(),C.trigger(d.gb,{setupTime:0}),T.change("playlist",(function(t,e){if(e.length){var i={playlist:e},o=T.get("feedData");o&&(i.feedData=Object(n.h)({},o)),C.trigger(d.eb,i)}})),T.change("playlistItem",(function(t,e){if(e){var i=e.title,n=e.image;if("mediaSession"in navigator&&window.MediaMetadata&&(i||n))try{navigator.mediaSession.metadata=new window.MediaMetadata({title:i,artist:window.location.hostname,artwork:[{src:n||""}]})}catch(t){}t.set("cues",[]),C.trigger(d.db,{index:T.get("item"),item:e})}})),A.flush(),A.destroy(),A=null,T.change("viewable",F),T.change("viewable",W),T.get("autoPause").viewability?T.change("viewable",Q):T.once("change:autostartFailed change:mute",(function(t){t.off("change:viewable",W)}));N(),T.on("change:itemReady",(function(t,e){e&&dt.flush()}))}()}catch(t){C.triggerError(Object(g.v)(g.m,g.a,t))}})),v.init()},this.preload=q,this.load=function(t,e){var i,n=C._instreamAdapter;switch(n&&(n.noResume=!0),C.trigger("destroyPlugin",{}),tt(!0),_.cancel(),_=j(N),z.cancel(),Oe()&&b.prime(),ze(t)){case"string":T.attributes.item=0,T.attributes.itemReady=!1,z=j((function(t){if(t)return C.updatePlaylist(Object(c.a)(t.playlist),t)})),i=function(t){var e=this;return new Promise((function(i,n){var o=new l.a;o.on(d.eb,(function(t){i(t)})),o.on(d.w,n,e),o.load(t)}))}(t).then(z.async);break;case"object":T.attributes.item=0,i=C.updatePlaylist(Object(c.a)(t),e||{});break;case"number":i=C.setItemIndex(t);break;default:return}i.catch((function(t){C.triggerError(Object(g.u)(t,g.c))})),i.then(_.async).catch(Pe)},this.play=function(t){return J(t).catch(Pe)},this.pause=it,this.seek=function(t,e){var i=T.get("state");if(i!==d.lb){B.position=t;var n=i===d.mb;T.get("scrubbing")||!n&&i!==d.kb||(n&&((e=e||{}).startTime=t),this.play(e))}},this.stop=tt,this.playlistItem=nt,this.playlistNext=ot,this.playlistPrev=function(t){nt(T.get("item")-1,t)},this.setCurrentCaptions=rt,this.setCurrentQuality=function(t){B.quality=t},this.setFullscreen=lt,this.getCurrentQuality=function(){return B.quality},this.getQualityLevels=function(){return B.qualities},this.setCurrentAudioTrack=function(t){B.audioTrack=t},this.getCurrentAudioTrack=function(){return B.audioTrack},this.getAudioTracks=function(){return B.audioTracks},this.getCurrentCaptions=function(){return y.getCurrentIndex()},this.getCaptionsList=st,this.getVisualQuality=function(){var t=this._model.get("mediaModel");return t?t.get(d.U):null},this.getConfig=function(){return this._model?this._model.getConfiguration():void 0},this.getState=K,this.next=Pe,this.completeHandler=at,this.completeCancelled=function(){return(t=T.get("state"))!==d.mb&&t!==d.kb&&t!==d.lb||!!M&&(M=!1,!0);var t},this.shouldAutoAdvance=function(){return T.get("item")!==T.get("playlist").length-1},this.nextItem=function(){ot({reason:"playlist"})},this.setConfig=function(t){!function(t,e){var i=t._model,n=i.attributes;e.height&&(e.height=Object(r.b)(e.height),e.width=e.width||n.width),e.width&&(e.width=Object(r.b)(e.width),e.aspectratio?(n.width=e.width,delete e.width):e.height=n.height),e.width&&e.height&&!e.aspectratio&&t._view.resize(e.width,e.height),Object.keys(e).forEach((function(o){var a=e[o];if(void 0!==a)switch(o){case"aspectratio":i.set(o,Object(r.a)(a,n.width));break;case"autostart":!function(t,e,i){t.setAutoStart(i),"idle"===t.get("state")&&!0===i&&e.play({reason:"autostart"})}(i,t,a);break;case"mute":t.setMute(a);break;case"volume":t.setVolume(a);break;case"playbackRateControls":case"playbackRates":case"repeat":case"stretching":i.set(o,a)}}))}(C,t)},this.setItemIndex=function(t){B.stopVideo();var e=T.get("playlist").length;return(t=(parseInt(t,10)||0)%e)<0&&(t+=e),B.setActiveItem(t).catch((function(t){t.code>=151&&t.code<=162&&(t=Object(g.u)(t,g.e)),O.triggerError(Object(g.v)(g.k,g.d,t))}))},this.detachMedia=function(){if(S&&(x=!0),T.get("autoPause").viewability&&Q(T,T.get("viewable")),!L)return B.setAttached(!1);B.backgroundActiveMedia()},this.attachMedia=function(){L?B.restoreBackgroundMedia():B.setAttached(!0),"function"==typeof k&&k()},this.routeEvents=function(t){return B.routeEvents(t)},this.forwardEvents=function(){return B.forwardEvents()},this.playVideo=function(t){return B.playVideo(t)},this.stopVideo=function(){return B.stopVideo()},this.castVideo=function(t,e){return B.castVideo(t,e)},this.stopCast=function(){return B.stopCast()},this.backgroundActiveMedia=function(){return B.backgroundActiveMedia()},this.restoreBackgroundMedia=function(){return B.restoreBackgroundMedia()},this.preloadNextItem=function(){B.background.currentMedia&&B.preloadVideo()},this.isBeforeComplete=function(){return B.beforeComplete},this.setVolume=function(t){T.setVolume(t),ut()},this.setMute=function(t){T.setMute(t),ut()},this.setPlaybackRate=function(t){T.setPlaybackRate(t)},this.getProvider=function(){return T.get("provider")},this.getWidth=function(){return T.get("containerWidth")},this.getHeight=function(){return T.get("containerHeight")},this.getItemQoe=function(){return T._qoeItem},this.addButton=function(t,e,i,n,o){var a=T.get("customButtons")||[],r=!1,s={img:t,tooltip:e,callback:i,id:n,btnClass:o};a=a.reduce((function(t,e){return e.id===n?(r=!0,t.push(s)):t.push(e),t}),[]),r||a.unshift(s),T.set("customButtons",a)},this.removeButton=function(t){var e=T.get("customButtons")||[];e=e.filter((function(e){return e.id!==t})),T.set("customButtons",e)},this.resize=v.resize,this.getSafeRegion=v.getSafeRegion,this.setCaptions=v.setCaptions,this.checkBeforePlay=function(){return S},this.setControls=function(t){Object(n.o)(t)||(t=!T.get("controls")),T.set("controls",t),B.controls=t},this.addCues=function(t){this.setCues(T.get("cues").concat(t))},this.setCues=function(t){T.set("cues",t)},this.updatePlaylist=function(t,e){try{var i=Object(c.b)(t,T,e);Object(c.e)(i);var o=Object(n.h)({},e);delete o.playlist,T.set("feedData",o),T.set("playlist",i)}catch(t){return Promise.reject(t)}return this.setItemIndex(T.get("item"))},this.setPlaylistItem=function(t,e){(e=Object(c.d)(T,new u.a(e),e.feedData||{}))&&(T.get("playlist")[t]=e,t===T.get("item")&&"idle"===T.get("state")&&this.setItemIndex(t))},this.playerDestroy=function(){this.off(),this.stop(),Object(a.b)(this,this.originalContainer),v&&v.destroy(),T&&T.destroy(),dt&&dt.destroy(),y&&y.destroy(),B&&B.destroy(),this.instreamDestroy()},this.isBeforePlay=this.checkBeforePlay,this.createInstream=function(){return this.instreamDestroy(),this._instreamAdapter=new ct(this,T,v,b),this._instreamAdapter},this.instreamDestroy=function(){C._instreamAdapter&&(C._instreamAdapter.destroy(),C._instreamAdapter=null)};var dt=new s.a(this,["play","pause","setCurrentAudioTrack","setCurrentCaptions","setCurrentQuality","setFullscreen"],(function(){return!O._model.get("itemReady")||A}));dt.queue.push.apply(dt.queue,h),v.setup()},get:function(t){if(t in y.a){var e=this._model.get("mediaModel");return e?e.get(t):y.a[t]}return this._model.get(t)},getContainer:function(){return this.currentContainer||this.originalContainer},getMute:function(){return this._model.getMute()},triggerError:function(t){var e=this._model;t.message=e.get("localization").errors[t.key],delete t.key,e.set("errorEvent",t),e.set("state",d.lb),e.once("change:state",(function(){this.set("errorEvent",void 0)}),e),this.trigger(d.w,t)}});e.default=Ae},,,,,,,,,,,,function(t,e){!function(t,e){"use strict";if("IntersectionObserver"in t&&"IntersectionObserverEntry"in t&&"intersectionRatio"in t.IntersectionObserverEntry.prototype)"isIntersecting"in t.IntersectionObserverEntry.prototype||Object.defineProperty(t.IntersectionObserverEntry.prototype,"isIntersecting",{get:function(){return this.intersectionRatio>0}});else{var i=[];o.prototype.THROTTLE_TIMEOUT=100,o.prototype.POLL_INTERVAL=null,o.prototype.USE_MUTATION_OBSERVER=!0,o.prototype.observe=function(t){if(!this._observationTargets.some((function(e){return e.element==t}))){if(!t||1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(),this._checkForIntersections()}},o.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter((function(e){return e.element!=t})),this._observationTargets.length||(this._unmonitorIntersections(),this._unregisterInstance())},o.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorIntersections(),this._unregisterInstance()},o.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},o.prototype._initThresholds=function(t){var e=t||[0];return Array.isArray(e)||(e=[e]),e.sort().filter((function(t,e,i){if("number"!=typeof t||isNaN(t)||t<0||t>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==i[e-1]}))},o.prototype._parseRootMargin=function(t){var e=(t||"0px").split(/\s+/).map((function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}}));return e[1]=e[1]||e[0],e[2]=e[2]||e[0],e[3]=e[3]||e[1],e},o.prototype._monitorIntersections=function(){this._monitoringIntersections||(this._monitoringIntersections=!0,this.POLL_INTERVAL?this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL):(a(t,"resize",this._checkForIntersections,!0),a(e,"scroll",this._checkForIntersections,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in t&&(this._domObserver=new MutationObserver(this._checkForIntersections),this._domObserver.observe(e,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))))},o.prototype._unmonitorIntersections=function(){this._monitoringIntersections&&(this._monitoringIntersections=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null,r(t,"resize",this._checkForIntersections,!0),r(e,"scroll",this._checkForIntersections,!0),this._domObserver&&(this._domObserver.disconnect(),this._domObserver=null))},o.prototype._checkForIntersections=function(){var e=this._rootIsInDom(),i=e?this._getRootRect():{top:0,bottom:0,left:0,right:0,width:0,height:0};this._observationTargets.forEach((function(o){var a=o.element,r=s(a),l=this._rootContainsTarget(a),c=o.entry,u=e&&l&&this._computeTargetAndRootIntersection(a,i),d=o.entry=new n({time:t.performance&&performance.now&&performance.now(),target:a,boundingClientRect:r,rootBounds:i,intersectionRect:u});c?e&&l?this._hasCrossedThreshold(c,d)&&this._queuedEntries.push(d):c&&c.isIntersecting&&this._queuedEntries.push(d):this._queuedEntries.push(d)}),this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)},o.prototype._computeTargetAndRootIntersection=function(i,n){if("none"!=t.getComputedStyle(i).display){for(var o,a,r,l,u,d,p,w,f=s(i),h=c(i),j=!1;!j;){var g=null,b=1==h.nodeType?t.getComputedStyle(h):{};if("none"==b.display)return;if(h==this.root||h==e?(j=!0,g=n):h!=e.body&&h!=e.documentElement&&"visible"!=b.overflow&&(g=s(h)),g&&(o=g,a=f,r=void 0,l=void 0,u=void 0,d=void 0,p=void 0,w=void 0,r=Math.max(o.top,a.top),l=Math.min(o.bottom,a.bottom),u=Math.max(o.left,a.left),d=Math.min(o.right,a.right),w=l-r,!(f=(p=d-u)>=0&&w>=0&&{top:r,bottom:l,left:u,right:d,width:p,height:w})))break;h=c(h)}return f}},o.prototype._getRootRect=function(){var t;if(this.root)t=s(this.root);else{var i=e.documentElement,n=e.body;t={top:0,left:0,right:i.clientWidth||n.clientWidth,width:i.clientWidth||n.clientWidth,bottom:i.clientHeight||n.clientHeight,height:i.clientHeight||n.clientHeight}}return this._expandRectByRootMargin(t)},o.prototype._expandRectByRootMargin=function(t){var e=this._rootMarginValues.map((function(e,i){return"px"==e.unit?e.value:e.value*(i%2?t.width:t.height)/100})),i={top:t.top-e[0],right:t.right+e[1],bottom:t.bottom+e[2],left:t.left-e[3]};return i.width=i.right-i.left,i.height=i.bottom-i.top,i},o.prototype._hasCrossedThreshold=function(t,e){var i=t&&t.isIntersecting?t.intersectionRatio||0:-1,n=e.isIntersecting?e.intersectionRatio||0:-1;if(i!==n)for(var o=0;o0&&(o=0),i.length>o+1&&i[o+1]){var a=i[o],r=a.indexOf(" --\x3e ");r>0&&(e.begin=Object(n.g)(a.substr(0,r)),e.end=Object(n.g)(a.substr(r+5)),e.text=i.slice(o+1).join("\r\n"))}return e}},function(t,e,i){"use strict";i.d(e,"a",(function(){return o})),i.d(e,"b",(function(){return a}));var n=i(5);function o(t){var e=-1;return t>=1280?e=7:t>=960?e=6:t>=800?e=5:t>=640?e=4:t>=540?e=3:t>=420?e=2:t>=320?e=1:t>=250&&(e=0),e}function a(t,e){var i="jw-breakpoint-"+e;Object(n.p)(t,/jw-breakpoint--?\d+/,i)}},function(t,e,i){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i=function(t,e){var i=t[1]||"",n=t[3];if(!n)return i;if(e&&"function"==typeof btoa){var o=(r=n,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */"),a=n.sources.map((function(t){return"/*# sourceURL="+n.sourceRoot+t+" */"}));return[i].concat(a).concat([o]).join("\n")}var r;return[i].join("\n")}(e,t);return e[2]?"@media "+e[2]+"{"+i+"}":i})).join("")},e.i=function(t,i){"string"==typeof t&&(t=[[null,t,""]]);for(var n={},o=0;o1&&(i+=" ["+e+"]")),{label:i,unknownCount:e}}i.d(e,"a",(function(){return n})),i.d(e,"b",(function(){return o}))},function(t,e,i){"use strict";function n(t){return new Promise((function(e,i){if(t.paused)return i(o("NotAllowedError",0,"play() failed."));var n=function(){t.removeEventListener("play",a),t.removeEventListener("playing",r),t.removeEventListener("pause",r),t.removeEventListener("abort",r),t.removeEventListener("error",r)},a=function(){t.addEventListener("playing",r),t.addEventListener("abort",r),t.addEventListener("error",r),t.addEventListener("pause",r)},r=function(t){if(n(),"playing"===t.type)e();else{var a='The play() request was interrupted by a "'.concat(t.type,'" event.');"error"===t.type?i(o("NotSupportedError",9,a)):i(o("AbortError",20,a))}};t.addEventListener("play",a)}))}function o(t,e,i){var n=new Error(i);return n.name=t,n.code=e,n}i.d(e,"a",(function(){return n}))},function(t,e,i){"use strict";function n(t,e){return t!==1/0&&Math.abs(t)>=Math.max(a(e),0)}function o(t,e){var i="VOD";return t===1/0?i="LIVE":t<0&&(i=n(t,a(e))?"DVR":"LIVE"),i}function a(t){return void 0===t?120:Math.max(t,0)}i.d(e,"a",(function(){return n})),i.d(e,"b",(function(){return o}))},function(t,e,i){"use strict";var n=i(64),o=i(16),a=i(22),r=i(4),s=i(57),l=i(2),c=i(1);function u(t){throw new c.n(null,t)}function d(t,e,n){t.xhr=Object(a.a)(t.file,(function(a){!function(t,e,n,a){var d,p,f=t.responseXML?t.responseXML.firstChild:null;if(f)for("xml"===Object(r.b)(f)&&(f=f.nextSibling);f.nodeType===f.COMMENT_NODE;)f=f.nextSibling;try{if(f&&"tt"===Object(r.b)(f))d=function(t){t||u(306007);var e=[],i=t.getElementsByTagName("p"),n=30,o=t.getElementsByTagName("tt");if(o&&o[0]){var a=parseFloat(o[0].getAttribute("ttp:frameRate"));isNaN(a)||(n=a)}i||u(306005),i.length||(i=t.getElementsByTagName("tt:p")).length||(i=t.getElementsByTagName("tts:p"));for(var r=0;r\s+<").replace(/(<\/?)tts?:/g,"$1").replace(//g,"\r\n");if(f){var h=s.getAttribute("begin"),j=s.getAttribute("dur"),g=s.getAttribute("end"),b={begin:Object(l.g)(h,n),text:f};g?b.end=Object(l.g)(g,n):j&&(b.end=b.begin+Object(l.g)(j,n)),e.push(b)}}return e.length||u(306005),e}(t.responseXML),p=w(d),delete e.xhr,n(p);else{var h=t.responseText;h.indexOf("WEBVTT")>=0?i.e(10).then(function(t){return i(92).default}.bind(null,i)).catch(Object(o.c)(301131)).then((function(t){var i=new t(window);p=[],i.oncue=function(t){p.push(t)},i.onflush=function(){delete e.xhr,n(p)},i.parse(h)})).catch((function(t){delete e.xhr,a(Object(c.v)(null,c.b,t))})):(d=Object(s.a)(h),p=w(d),delete e.xhr,n(p))}}catch(t){delete e.xhr,a(Object(c.v)(null,c.b,t))}}(a,t,e,n)}),(function(t,e,i,o){n(Object(c.u)(o,c.b))}))}function p(t){t&&t.forEach((function(t){var e=t.xhr;e&&(e.onload=null,e.onreadystatechange=null,e.onerror=null,"abort"in e&&e.abort()),delete t.xhr}))}function w(t){return t.map((function(t){return new n.a(t.begin,t.end,t.text)}))}i.d(e,"c",(function(){return d})),i.d(e,"a",(function(){return p})),i.d(e,"b",(function(){return w}))},function(t,e,i){"use strict";var n=window.VTTCue;function o(t){if("string"!=typeof t)return!1;return!!{start:!0,middle:!0,end:!0,left:!0,right:!0}[t.toLowerCase()]&&t.toLowerCase()}if(!n){(n=function(t,e,i){var n=this;n.hasBeenReset=!1;var a="",r=!1,s=t,l=e,c=i,u=null,d="",p=!0,w="auto",f="start",h="auto",j=100,g="middle";Object.defineProperty(n,"id",{enumerable:!0,get:function(){return a},set:function(t){a=""+t}}),Object.defineProperty(n,"pauseOnExit",{enumerable:!0,get:function(){return r},set:function(t){r=!!t}}),Object.defineProperty(n,"startTime",{enumerable:!0,get:function(){return s},set:function(t){if("number"!=typeof t)throw new TypeError("Start time must be set to a number.");s=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"endTime",{enumerable:!0,get:function(){return l},set:function(t){if("number"!=typeof t)throw new TypeError("End time must be set to a number.");l=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"text",{enumerable:!0,get:function(){return c},set:function(t){c=""+t,this.hasBeenReset=!0}}),Object.defineProperty(n,"region",{enumerable:!0,get:function(){return u},set:function(t){u=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"vertical",{enumerable:!0,get:function(){return d},set:function(t){var e=function(t){return"string"==typeof t&&(!!{"":!0,lr:!0,rl:!0}[t.toLowerCase()]&&t.toLowerCase())}(t);if(!1===e)throw new SyntaxError("An invalid or illegal string was specified.");d=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"snapToLines",{enumerable:!0,get:function(){return p},set:function(t){p=!!t,this.hasBeenReset=!0}}),Object.defineProperty(n,"line",{enumerable:!0,get:function(){return w},set:function(t){if("number"!=typeof t&&"auto"!==t)throw new SyntaxError("An invalid number or illegal string was specified.");w=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"lineAlign",{enumerable:!0,get:function(){return f},set:function(t){var e=o(t);if(!e)throw new SyntaxError("An invalid or illegal string was specified.");f=e,this.hasBeenReset=!0}}),Object.defineProperty(n,"position",{enumerable:!0,get:function(){return h},set:function(t){if(t<0||t>100)throw new Error("Position must be between 0 and 100.");h=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"size",{enumerable:!0,get:function(){return j},set:function(t){if(t<0||t>100)throw new Error("Size must be between 0 and 100.");j=t,this.hasBeenReset=!0}}),Object.defineProperty(n,"align",{enumerable:!0,get:function(){return g},set:function(t){var e=o(t);if(!e)throw new SyntaxError("An invalid or illegal string was specified.");g=e,this.hasBeenReset=!0}}),n.displayState=void 0}).prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)}}e.a=n},function(t,e,i){var n=i(66);"string"==typeof n&&(n=[["all-players",n,""]]),i(35).style(n,"all-players"),n.locals&&(t.exports=n.locals)},function(t,e,i){(t.exports=i(59)(!1)).push([t.i,'.jw-reset{text-align:left;direction:ltr}.jw-reset-text,.jw-reset{color:inherit;background-color:transparent;padding:0;margin:0;float:none;font-family:Arial,Helvetica,sans-serif;font-size:1em;line-height:1em;list-style:none;text-transform:none;vertical-align:baseline;border:0;font-variant:inherit;font-stretch:inherit;-webkit-tap-highlight-color:rgba(255,255,255,0)}body .jw-error,body .jwplayer.jw-state-error{height:100%;width:100%}.jw-title{position:absolute;top:0}.jw-background-color{background:rgba(0,0,0,0.4)}.jw-text{color:rgba(255,255,255,0.8)}.jw-knob{color:rgba(255,255,255,0.8);background-color:#fff}.jw-button-color{color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):focus,:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):hover{color:#fff}.jw-toggle{color:#fff}.jw-toggle.jw-off{color:rgba(255,255,255,0.8)}.jw-toggle.jw-off:focus{color:#fff}.jw-toggle:focus{outline:none}:not(.jw-flag-touch) .jw-toggle.jw-off:hover{color:#fff}.jw-rail{background:rgba(255,255,255,0.3)}.jw-buffer{background:rgba(255,255,255,0.3)}.jw-progress{background:#f2f2f2}.jw-time-tip,.jw-volume-tip{border:0}.jw-slider-volume.jw-volume-tip.jw-background-color.jw-slider-vertical{background:none}.jw-skip{padding:.5em;outline:none}.jw-skip .jw-skiptext,.jw-skip .jw-skip-icon{color:rgba(255,255,255,0.8)}.jw-skip.jw-skippable:hover .jw-skip-icon,.jw-skip.jw-skippable:focus .jw-skip-icon{color:#fff}.jw-icon-cast google-cast-launcher{--connected-color:#fff;--disconnected-color:rgba(255,255,255,0.8)}.jw-icon-cast google-cast-launcher:focus{outline:none}.jw-icon-cast google-cast-launcher.jw-off{--connected-color:rgba(255,255,255,0.8)}.jw-icon-cast:focus google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-icon-cast:hover google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-nextup-container{bottom:2.5em;padding:5px .5em}.jw-nextup{border-radius:0}.jw-color-active{color:#fff;stroke:#fff;border-color:#fff}:not(.jw-flag-touch) .jw-color-active-hover:hover,:not(.jw-flag-touch) .jw-color-active-hover:focus{color:#fff;stroke:#fff;border-color:#fff}.jw-color-inactive{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-color-inactive-hover:hover{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}.jw-option{color:rgba(255,255,255,0.8)}.jw-option.jw-active-option{color:#fff;background-color:rgba(255,255,255,0.1)}:not(.jw-flag-touch) .jw-option:hover{color:#fff}.jwplayer{width:100%;font-size:16px;position:relative;display:block;min-height:0;overflow:hidden;box-sizing:border-box;font-family:Arial,Helvetica,sans-serif;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.jwplayer *{box-sizing:inherit}.jwplayer.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jwplayer.jw-flag-aspect-mode{height:auto !important}.jwplayer.jw-flag-aspect-mode .jw-aspect{display:block}.jwplayer .jw-aspect{display:none}.jwplayer .jw-swf{outline:none}.jw-media,.jw-preview{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}.jw-media{overflow:hidden;cursor:pointer}.jw-plugin{position:absolute;bottom:66px}.jw-breakpoint-7 .jw-plugin{bottom:132px}.jw-plugin .jw-banner{max-width:100%;opacity:0;cursor:pointer;position:absolute;margin:auto auto 0;left:0;right:0;bottom:0;display:block}.jw-preview,.jw-captions,.jw-title{pointer-events:none}.jw-media,.jw-logo{pointer-events:all}.jw-wrapper{background-color:#000;position:absolute;top:0;left:0;right:0;bottom:0}.jw-hidden-accessibility{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.jw-contract-trigger::before{content:"";overflow:hidden;width:200%;height:200%;display:block;position:absolute;top:0;left:0}.jwplayer .jw-media video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:auto;background:transparent}.jwplayer .jw-media video::-webkit-media-controls-start-playback-button{display:none}.jwplayer.jw-stretch-uniform .jw-media video{object-fit:contain}.jwplayer.jw-stretch-none .jw-media video{object-fit:none}.jwplayer.jw-stretch-fill .jw-media video{object-fit:cover}.jwplayer.jw-stretch-exactfit .jw-media video{object-fit:fill}.jw-preview{position:absolute;display:none;opacity:1;visibility:visible;width:100%;height:100%;background:#000 no-repeat 50% 50%}.jwplayer .jw-preview,.jw-error .jw-preview{background-size:contain}.jw-stretch-none .jw-preview{background-size:auto auto}.jw-stretch-fill .jw-preview{background-size:cover}.jw-stretch-exactfit .jw-preview{background-size:100% 100%}.jw-title{display:none;padding-top:20px;width:100%;z-index:1}.jw-title-primary,.jw-title-secondary{color:#fff;padding-left:20px;padding-right:20px;padding-bottom:.5em;overflow:hidden;text-overflow:ellipsis;direction:unset;white-space:nowrap;width:100%}.jw-title-primary{font-size:1.625em}.jw-breakpoint-2 .jw-title-primary,.jw-breakpoint-3 .jw-title-primary{font-size:1.5em}.jw-flag-small-player .jw-title-primary{font-size:1.25em}.jw-flag-small-player .jw-title-secondary,.jw-title-secondary:empty{display:none}.jw-captions{position:absolute;width:100%;height:100%;text-align:center;display:none;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-decoration:none;pointer-events:none;overflow:hidden;top:0}.jw-captions.jw-captions-enabled{display:block}.jw-captions-window{display:none;padding:.25em;border-radius:.25em}.jw-captions-window.jw-captions-window-active{display:inline-block}.jw-captions-text{display:inline-block;color:#fff;background-color:#000;word-wrap:normal;word-break:normal;white-space:pre-line;font-style:normal;font-weight:normal;text-align:center;text-decoration:none}.jw-text-track-display{font-size:inherit;line-height:1.5}.jw-text-track-cue{background-color:rgba(0,0,0,0.5);color:#fff;padding:.1em .3em}.jwplayer video::-webkit-media-controls{display:none;justify-content:flex-start}.jwplayer video::-webkit-media-text-track-display{min-width:-webkit-min-content}.jwplayer video::cue{background-color:rgba(0,0,0,0.5)}.jwplayer video::-webkit-media-controls-panel-container{display:none}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing) .jw-captions,.jwplayer.jw-flag-media-audio.jw-state-playing .jw-captions,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden) .jw-captions{max-height:calc(100% - 60px)}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-flag-media-audio.jw-state-playing:not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container{max-height:calc(100% - 60px)}.jw-logo{position:absolute;margin:20px;cursor:pointer;pointer-events:all;background-repeat:no-repeat;background-size:contain;top:auto;right:auto;left:auto;bottom:auto;outline:none}.jw-logo.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-flag-audio-player .jw-logo{display:none}.jw-logo-top-right{top:0;right:0}.jw-logo-top-left{top:0;left:0}.jw-logo-bottom-left{left:0}.jw-logo-bottom-right{right:0}.jw-logo-bottom-left,.jw-logo-bottom-right{bottom:44px;transition:bottom 150ms cubic-bezier(0, .25, .25, 1)}.jw-state-idle .jw-logo{z-index:1}.jw-state-setup .jw-wrapper{background-color:inherit}.jw-state-setup .jw-logo,.jw-state-setup .jw-controls,.jw-state-setup .jw-controls-backdrop{visibility:hidden}span.jw-break{display:block}body .jw-error,body .jwplayer.jw-state-error{background-color:#333;color:#fff;font-size:16px;display:table;opacity:1;position:relative}body .jw-error .jw-display,body .jwplayer.jw-state-error .jw-display{display:none}body .jw-error .jw-media,body .jwplayer.jw-state-error .jw-media{cursor:default}body .jw-error .jw-preview,body .jwplayer.jw-state-error .jw-preview{background-color:#333}body .jw-error .jw-error-msg,body .jwplayer.jw-state-error .jw-error-msg{background-color:#000;border-radius:2px;display:flex;flex-direction:row;align-items:stretch;padding:20px}body .jw-error .jw-error-msg .jw-icon,body .jwplayer.jw-state-error .jw-error-msg .jw-icon{height:30px;width:30px;margin-right:20px;flex:0 0 auto;align-self:center}body .jw-error .jw-error-msg .jw-icon:empty,body .jwplayer.jw-state-error .jw-error-msg .jw-icon:empty{display:none}body .jw-error .jw-error-msg .jw-info-container,body .jwplayer.jw-state-error .jw-error-msg .jw-info-container{margin:0;padding:0}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg{flex-direction:column}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text{text-align:center}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon{flex:.5 0 auto;margin-right:0;margin-bottom:20px}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break{display:inline}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break:before{content:" "}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg{height:100%;width:100%;top:0;position:absolute;left:0;background:#000;-webkit-transform:none;transform:none;padding:4px 16px;z-index:1}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg.jw-info-overlay{max-width:none;max-height:none}body .jwplayer.jw-state-error .jw-title,.jw-state-idle .jw-title,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-title{display:block}body .jwplayer.jw-state-error .jw-preview,.jw-state-idle .jw-preview,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-preview{display:block}.jw-state-idle .jw-captions,.jwplayer.jw-state-complete .jw-captions,body .jwplayer.jw-state-error .jw-captions{display:none}.jw-state-idle video::-webkit-media-text-track-container,.jwplayer.jw-state-complete video::-webkit-media-text-track-container,body .jwplayer.jw-state-error video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-fullscreen{width:100% !important;height:100% !important;top:0;right:0;bottom:0;left:0;z-index:1000;margin:0;position:fixed}body .jwplayer.jw-flag-flash-blocked .jw-title{display:block}.jwplayer.jw-flag-controls-hidden .jw-media{cursor:default}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:45px}.jw-flag-floating{background-size:cover;background-color:#000}.jw-flag-floating .jw-wrapper{position:fixed;z-index:2147483647;-webkit-animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;top:auto;bottom:1rem;left:auto;right:1rem;max-width:400px;max-height:400px;margin:0 auto}@media screen and (max-width:480px){.jw-flag-floating .jw-wrapper{width:100%;left:0;right:0}}.jw-flag-floating .jw-wrapper .jw-media{touch-action:none}@media screen and (max-device-width:480px) and (orientation:portrait){.jw-flag-touch.jw-flag-floating .jw-wrapper{-webkit-animation:none;animation:none;top:62px;bottom:auto;left:0;right:0;max-width:none;max-height:none}}.jw-flag-floating .jw-float-icon{pointer-events:all;cursor:pointer;display:none}.jw-flag-floating .jw-float-icon .jw-svg-icon{-webkit-filter:drop-shadow(0 0 1px #000);filter:drop-shadow(0 0 1px #000)}.jw-flag-floating.jw-floating-dismissible .jw-dismiss-icon{display:none}.jw-flag-floating.jw-floating-dismissible.jw-flag-ads .jw-float-icon{display:flex}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-logo,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-logo{display:none}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-float-icon,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-float-icon{display:flex}.jw-float-icon{display:none;position:absolute;top:3px;right:5px;align-items:center;justify-content:center}@-webkit-keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.jw-flag-top{margin-top:2em;overflow:visible}.jw-top{height:2em;line-height:2;pointer-events:none;text-align:center;opacity:.8;position:absolute;top:-2em;width:100%}.jw-top .jw-icon{cursor:pointer;pointer-events:all;height:auto;width:auto}.jw-top .jw-text{color:#555}',""])},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e){t.exports=''},function(t,e,i){var n=i(91);"string"==typeof n&&(n=[["all-players",n,""]]),i(35).style(n,"all-players"),n.locals&&(t.exports=n.locals)},function(t,e,i){(t.exports=i(59)(!1)).push([t.i,'.jw-overlays,.jw-controls,.jw-controls-backdrop,.jw-flag-small-player .jw-settings-menu,.jw-settings-submenu{height:100%;width:100%}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-settings-menu .jw-icon.jw-button-color::after{position:absolute;right:0}.jw-overlays,.jw-controls,.jw-controls-backdrop,.jw-settings-item-active::before{top:0;position:absolute;left:0}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-settings-menu .jw-icon.jw-button-color::after{position:absolute;bottom:0;left:0}.jw-nextup-close{position:absolute;top:0;right:0}.jw-overlays,.jw-controls,.jw-flag-small-player .jw-settings-menu{position:absolute;bottom:0;right:0}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after,.jw-time-tip::after,.jw-settings-menu .jw-icon.jw-button-color::after,.jw-text-live::before,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{content:"";display:block}.jw-svg-icon{height:24px;width:24px;fill:currentColor;pointer-events:none}.jw-icon{height:44px;width:44px;background-color:transparent;outline:none}.jw-icon.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-icon-airplay .jw-svg-icon-airplay-off{display:none}.jw-off.jw-icon-airplay .jw-svg-icon-airplay-off{display:block}.jw-icon-airplay .jw-svg-icon-airplay-on{display:block}.jw-off.jw-icon-airplay .jw-svg-icon-airplay-on{display:none}.jw-icon-cc .jw-svg-icon-cc-off{display:none}.jw-off.jw-icon-cc .jw-svg-icon-cc-off{display:block}.jw-icon-cc .jw-svg-icon-cc-on{display:block}.jw-off.jw-icon-cc .jw-svg-icon-cc-on{display:none}.jw-icon-fullscreen .jw-svg-icon-fullscreen-off{display:none}.jw-off.jw-icon-fullscreen .jw-svg-icon-fullscreen-off{display:block}.jw-icon-fullscreen .jw-svg-icon-fullscreen-on{display:block}.jw-off.jw-icon-fullscreen .jw-svg-icon-fullscreen-on{display:none}.jw-icon-volume .jw-svg-icon-volume-0{display:none}.jw-off.jw-icon-volume .jw-svg-icon-volume-0{display:block}.jw-icon-volume .jw-svg-icon-volume-100{display:none}.jw-full.jw-icon-volume .jw-svg-icon-volume-100{display:block}.jw-icon-volume .jw-svg-icon-volume-50{display:block}.jw-off.jw-icon-volume .jw-svg-icon-volume-50,.jw-full.jw-icon-volume .jw-svg-icon-volume-50{display:none}.jw-settings-menu .jw-icon::after,.jw-icon-settings::after,.jw-icon-volume::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon[aria-checked="true"]::after,.jw-settings-open .jw-icon-settings::after,.jw-icon-volume.jw-open::after{opacity:1}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-cc,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-settings,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-audio-tracks,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-hd,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-settings-sharing,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-fullscreen,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player).jw-flag-cast-available .jw-icon-airplay,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player).jw-flag-cast-available .jw-icon-cast{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-volume,.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-text-live{bottom:6px}.jwplayer.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-icon-volume::after{display:none}.jw-overlays,.jw-controls{pointer-events:none}.jw-controls-backdrop{display:block;background:linear-gradient(to bottom, transparent, rgba(0,0,0,0.4) 77%, rgba(0,0,0,0.4) 100%) 100% 100% / 100% 240px no-repeat transparent;transition:opacity 250ms cubic-bezier(0, .25, .25, 1),background-size 250ms cubic-bezier(0, .25, .25, 1);pointer-events:none}.jw-overlays{cursor:auto}.jw-controls{overflow:hidden}.jw-flag-small-player .jw-controls{text-align:center}.jw-text{height:1em;font-family:Arial,Helvetica,sans-serif;font-size:.75em;font-style:normal;font-weight:normal;color:#fff;text-align:center;font-variant:normal;font-stretch:normal}.jw-controlbar,.jw-skip,.jw-display-icon-container .jw-icon,.jw-nextup-container,.jw-autostart-mute,.jw-overlays .jw-plugin{pointer-events:all}.jwplayer .jw-display-icon-container,.jw-error .jw-display-icon-container{width:auto;height:auto;box-sizing:content-box}.jw-display{display:table;height:100%;padding:57px 0;position:relative;width:100%}.jw-flag-dragging .jw-display{display:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-display-container{display:table-cell;height:100%;text-align:center;vertical-align:middle}.jw-display-controls{display:inline-block}.jwplayer .jw-display-icon-container{float:left}.jw-display-icon-container{display:inline-block;padding:5.5px;margin:0 22px}.jw-display-icon-container .jw-icon{height:75px;width:75px;cursor:pointer;display:flex;justify-content:center;align-items:center}.jw-display-icon-container .jw-icon .jw-svg-icon{height:33px;width:33px;padding:0;position:relative}.jw-display-icon-container .jw-icon .jw-svg-icon-rewind{padding:.2em .05em}.jw-breakpoint--1 .jw-nextup-container{display:none}.jw-breakpoint-0 .jw-display-icon-next,.jw-breakpoint--1 .jw-display-icon-next,.jw-breakpoint-0 .jw-display-icon-rewind,.jw-breakpoint--1 .jw-display-icon-rewind{display:none}.jw-breakpoint-0 .jw-display .jw-icon,.jw-breakpoint--1 .jw-display .jw-icon,.jw-breakpoint-0 .jw-display .jw-svg-icon,.jw-breakpoint--1 .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px}.jw-breakpoint-0 .jw-display .jw-icon:before,.jw-breakpoint--1 .jw-display .jw-icon:before,.jw-breakpoint-0 .jw-display .jw-svg-icon:before,.jw-breakpoint--1 .jw-display .jw-svg-icon:before{width:22px;height:22px}.jw-breakpoint-1 .jw-display .jw-icon,.jw-breakpoint-1 .jw-display .jw-svg-icon{width:44px;height:44px;line-height:44px}.jw-breakpoint-1 .jw-display .jw-icon:before,.jw-breakpoint-1 .jw-display .jw-svg-icon:before{width:22px;height:22px}.jw-breakpoint-1 .jw-display .jw-icon.jw-icon-rewind:before{width:33px;height:33px}.jw-breakpoint-2 .jw-display .jw-icon,.jw-breakpoint-3 .jw-display .jw-icon,.jw-breakpoint-2 .jw-display .jw-svg-icon,.jw-breakpoint-3 .jw-display .jw-svg-icon{width:77px;height:77px;line-height:77px}.jw-breakpoint-2 .jw-display .jw-icon:before,.jw-breakpoint-3 .jw-display .jw-icon:before,.jw-breakpoint-2 .jw-display .jw-svg-icon:before,.jw-breakpoint-3 .jw-display .jw-svg-icon:before{width:38.5px;height:38.5px}.jw-breakpoint-4 .jw-display .jw-icon,.jw-breakpoint-5 .jw-display .jw-icon,.jw-breakpoint-6 .jw-display .jw-icon,.jw-breakpoint-7 .jw-display .jw-icon,.jw-breakpoint-4 .jw-display .jw-svg-icon,.jw-breakpoint-5 .jw-display .jw-svg-icon,.jw-breakpoint-6 .jw-display .jw-svg-icon,.jw-breakpoint-7 .jw-display .jw-svg-icon{width:88px;height:88px;line-height:88px}.jw-breakpoint-4 .jw-display .jw-icon:before,.jw-breakpoint-5 .jw-display .jw-icon:before,.jw-breakpoint-6 .jw-display .jw-icon:before,.jw-breakpoint-7 .jw-display .jw-icon:before,.jw-breakpoint-4 .jw-display .jw-svg-icon:before,.jw-breakpoint-5 .jw-display .jw-svg-icon:before,.jw-breakpoint-6 .jw-display .jw-svg-icon:before,.jw-breakpoint-7 .jw-display .jw-svg-icon:before{width:44px;height:44px}.jw-controlbar{display:flex;flex-flow:row wrap;align-items:center;justify-content:center;position:absolute;left:0;bottom:0;width:100%;border:none;border-radius:0;background-size:auto;box-shadow:none;max-height:72px;transition:250ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s}.jw-breakpoint-7 .jw-controlbar{max-height:140px}.jw-breakpoint-7 .jw-controlbar .jw-button-container{padding:0 48px 20px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-tooltip{margin-bottom:-7px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume .jw-overlay{padding-bottom:40%}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-text{font-size:1em}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-text.jw-text-elapsed{justify-content:flex-end}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-inline,.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume{height:60px;width:60px}.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-inline .jw-svg-icon,.jw-breakpoint-7 .jw-controlbar .jw-button-container .jw-icon-volume .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-controlbar .jw-slider-time{padding:0 60px;height:34px}.jw-breakpoint-7 .jw-controlbar .jw-slider-time .jw-slider-container{height:10px}.jw-controlbar .jw-button-image{background:no-repeat 50% 50%;background-size:contain;max-height:24px}.jw-controlbar .jw-spacer{flex:1 1 auto;align-self:stretch}.jw-controlbar .jw-icon.jw-button-color:hover{color:#fff}.jw-button-container{display:flex;flex-flow:row nowrap;flex:1 1 auto;align-items:center;justify-content:center;width:100%;padding:0 12px}.jw-slider-horizontal{background-color:transparent}.jw-icon-inline{position:relative}.jw-icon-inline,.jw-icon-tooltip{height:44px;width:44px;align-items:center;display:flex;justify-content:center}.jw-icon-inline:not(.jw-text),.jw-icon-tooltip,.jw-slider-horizontal{cursor:pointer}.jw-text-elapsed,.jw-text-duration{justify-content:flex-start;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.jw-icon-tooltip{position:relative}.jw-knob:hover,.jw-icon-inline:hover,.jw-icon-tooltip:hover,.jw-icon-display:hover,.jw-option:before:hover{color:#fff}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{pointer-events:none}.jw-icon-cast{display:none;margin:0;padding:0}.jw-icon-cast google-cast-launcher{background-color:transparent;border:none;padding:0;width:24px;height:24px;cursor:pointer}.jw-icon-inline.jw-icon-volume{display:none}.jwplayer .jw-text-countdown{display:none}.jw-flag-small-player .jw-display{padding-top:0;padding-bottom:0}.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-rewind,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-next,.jw-flag-small-player:not(.jw-flag-audio-player):not(.jw-flag-ads) .jw-controlbar .jw-button-container>.jw-icon-playback{display:none}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controlbar{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-ads-vpaid:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-playing:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop,.jw-flag-user-inactive.jw-state-buffering:not(.jw-flag-media-audio):not(.jw-flag-audio-player):not(.jw-flag-ads-vpaid-controls):not(.jw-flag-casting) .jw-controls-backdrop{opacity:0}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-countdown{display:flex}.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-elapsed,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint--1 .jw-text-duration,.jwplayer:not(.jw-flag-ads):not(.jw-flag-live).jw-breakpoint-0 .jw-text-duration{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-text-countdown,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-related-btn,.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-slider-volume{display:none}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-controlbar{flex-direction:column-reverse}.jwplayer.jw-breakpoint--1:not(.jw-flag-ads):not(.jw-flag-audio-player) .jw-button-container{height:30px}.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-volume,.jw-breakpoint--1.jw-flag-ads:not(.jw-flag-audio-player) .jw-icon-fullscreen{display:none}.jwplayer:not(.jw-breakpoint-0) .jw-text-duration:before,.jwplayer:not(.jw-breakpoint--1) .jw-text-duration:before{content:"/";padding-right:1ch;padding-left:1ch}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar{will-change:transform}.jwplayer:not(.jw-flag-user-inactive) .jw-controlbar .jw-text{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.jw-slider-container{display:flex;align-items:center;position:relative;touch-action:none}.jw-rail,.jw-buffer,.jw-progress{position:absolute;cursor:pointer}.jw-progress{background-color:#f2f2f2}.jw-rail{background-color:rgba(255,255,255,0.3)}.jw-buffer{background-color:rgba(255,255,255,0.3)}.jw-knob{height:13px;width:13px;background-color:#fff;border-radius:50%;box-shadow:0 0 10px rgba(0,0,0,0.4);opacity:1;pointer-events:none;position:absolute;-webkit-transform:translate(-50%, -50%) scale(0);transform:translate(-50%, -50%) scale(0);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform}.jw-flag-dragging .jw-slider-time .jw-knob,.jw-icon-volume:active .jw-slider-volume .jw-knob{box-shadow:0 0 26px rgba(0,0,0,0.2),0 0 10px rgba(0,0,0,0.4),0 0 0 6px rgba(255,255,255,0.2)}.jw-slider-horizontal,.jw-slider-vertical{display:flex}.jw-slider-horizontal .jw-slider-container{height:5px;width:100%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue,.jw-slider-horizontal .jw-knob{top:50%}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress,.jw-slider-horizontal .jw-cue{-webkit-transform:translate(0, -50%);transform:translate(0, -50%)}.jw-slider-horizontal .jw-rail,.jw-slider-horizontal .jw-buffer,.jw-slider-horizontal .jw-progress{height:5px}.jw-slider-horizontal .jw-rail{width:100%}.jw-slider-vertical{align-items:center;flex-direction:column}.jw-slider-vertical .jw-slider-container{height:88px;width:5px}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress,.jw-slider-vertical .jw-knob{left:50%}.jw-slider-vertical .jw-rail,.jw-slider-vertical .jw-buffer,.jw-slider-vertical .jw-progress{height:100%;width:5px;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out;bottom:0}.jw-slider-vertical .jw-knob{-webkit-transform:translate(-50%, 50%);transform:translate(-50%, 50%)}.jw-slider-time.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-slider-time,.jw-flag-audio-player .jw-slider-volume{height:17px;width:100%;align-items:center;background:transparent none;padding:0 12px}.jw-slider-time .jw-cue{background-color:rgba(33,33,33,0.8);cursor:pointer;position:absolute;width:6px}.jw-slider-time,.jw-horizontal-volume-container{z-index:1;outline:none}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail,.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer,.jw-slider-time .jw-progress,.jw-horizontal-volume-container .jw-progress,.jw-slider-time .jw-cue,.jw-horizontal-volume-container .jw-cue{-webkit-backface-visibility:hidden;backface-visibility:hidden;height:100%;-webkit-transform:translate(0, -50%) scale(1, .6);transform:translate(0, -50%) scale(1, .6);transition:-webkit-transform 150ms ease-in-out;transition:transform 150ms ease-in-out;transition:transform 150ms ease-in-out, -webkit-transform 150ms ease-in-out}.jw-slider-time:hover .jw-rail,.jw-horizontal-volume-container:hover .jw-rail,.jw-slider-time:focus .jw-rail,.jw-horizontal-volume-container:focus .jw-rail,.jw-flag-dragging .jw-slider-time .jw-rail,.jw-flag-dragging .jw-horizontal-volume-container .jw-rail,.jw-flag-touch .jw-slider-time .jw-rail,.jw-flag-touch .jw-horizontal-volume-container .jw-rail,.jw-slider-time:hover .jw-buffer,.jw-horizontal-volume-container:hover .jw-buffer,.jw-slider-time:focus .jw-buffer,.jw-horizontal-volume-container:focus .jw-buffer,.jw-flag-dragging .jw-slider-time .jw-buffer,.jw-flag-dragging .jw-horizontal-volume-container .jw-buffer,.jw-flag-touch .jw-slider-time .jw-buffer,.jw-flag-touch .jw-horizontal-volume-container .jw-buffer,.jw-slider-time:hover .jw-progress,.jw-horizontal-volume-container:hover .jw-progress,.jw-slider-time:focus .jw-progress,.jw-horizontal-volume-container:focus .jw-progress,.jw-flag-dragging .jw-slider-time .jw-progress,.jw-flag-dragging .jw-horizontal-volume-container .jw-progress,.jw-flag-touch .jw-slider-time .jw-progress,.jw-flag-touch .jw-horizontal-volume-container .jw-progress,.jw-slider-time:hover .jw-cue,.jw-horizontal-volume-container:hover .jw-cue,.jw-slider-time:focus .jw-cue,.jw-horizontal-volume-container:focus .jw-cue,.jw-flag-dragging .jw-slider-time .jw-cue,.jw-flag-dragging .jw-horizontal-volume-container .jw-cue,.jw-flag-touch .jw-slider-time .jw-cue,.jw-flag-touch .jw-horizontal-volume-container .jw-cue{-webkit-transform:translate(0, -50%) scale(1, 1);transform:translate(0, -50%) scale(1, 1)}.jw-slider-time:hover .jw-knob,.jw-horizontal-volume-container:hover .jw-knob,.jw-slider-time:focus .jw-knob,.jw-horizontal-volume-container:focus .jw-knob{-webkit-transform:translate(-50%, -50%) scale(1);transform:translate(-50%, -50%) scale(1)}.jw-slider-time .jw-rail,.jw-horizontal-volume-container .jw-rail{background-color:rgba(255,255,255,0.2)}.jw-slider-time .jw-buffer,.jw-horizontal-volume-container .jw-buffer{background-color:rgba(255,255,255,0.4)}.jw-flag-touch .jw-slider-time::before,.jw-flag-touch .jw-horizontal-volume-container::before{height:44px;width:100%;content:"";position:absolute;display:block;bottom:calc(100% - 17px);left:0}.jw-slider-time.jw-tab-focus:focus .jw-rail,.jw-horizontal-volume-container.jw-tab-focus:focus .jw-rail{outline:solid 2px #4d90fe}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time{height:17px;padding:0}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-slider-container{height:10px}.jw-breakpoint--1:not(.jw-flag-audio-player) .jw-slider-time .jw-knob{border-radius:0;border:1px solid rgba(0,0,0,0.75);height:12px;width:10px}.jw-modal{width:284px}.jw-breakpoint-7 .jw-modal,.jw-breakpoint-6 .jw-modal,.jw-breakpoint-5 .jw-modal{height:232px}.jw-breakpoint-4 .jw-modal,.jw-breakpoint-3 .jw-modal{height:192px}.jw-breakpoint-2 .jw-modal,.jw-flag-small-player .jw-modal{bottom:0;right:0;height:100%;width:100%;max-height:none;max-width:none;z-index:2}.jwplayer .jw-rightclick{display:none;position:absolute;white-space:nowrap}.jwplayer .jw-rightclick.jw-open{display:block}.jwplayer .jw-rightclick .jw-rightclick-list{border-radius:1px;list-style:none;margin:0;padding:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item{background-color:rgba(0,0,0,0.8);border-bottom:1px solid #444;margin:0}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo{color:#fff;display:inline-flex;padding:0 10px 0 0;vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-logo .jw-svg-icon{height:20px;width:20px}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item .jw-rightclick-link{border:none;color:#fff;display:block;font-size:11px;line-height:1em;padding:15px 23px;text-align:start;text-decoration:none;width:100%}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:last-child{border-bottom:none}.jwplayer .jw-rightclick .jw-rightclick-list .jw-rightclick-item:hover{cursor:pointer}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured{vertical-align:middle}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link{color:#fff}.jwplayer .jw-rightclick .jw-rightclick-list .jw-featured .jw-rightclick-link span{color:#fff}.jwplayer .jw-rightclick .jw-info-overlay-item,.jwplayer .jw-rightclick .jw-share-item,.jwplayer .jw-rightclick .jw-shortcuts-item{border:none;background-color:transparent;outline:none;cursor:pointer}.jw-icon-tooltip.jw-open .jw-overlay{opacity:1;pointer-events:auto;transition-delay:0s}.jw-icon-tooltip.jw-open .jw-overlay:focus{outline:none}.jw-icon-tooltip.jw-open .jw-overlay:focus.jw-tab-focus{outline:solid 2px #4d90fe}.jw-slider-time .jw-overlay:before{height:1em;top:auto}.jw-slider-time .jw-icon-tooltip.jw-open .jw-overlay{pointer-events:none}.jw-volume-tip{padding:13px 0 26px}.jw-time-tip,.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{height:auto;width:100%;box-shadow:0 0 10px rgba(0,0,0,0.4);color:#fff;display:block;margin:0 0 14px;pointer-events:none;position:relative;z-index:0}.jw-time-tip::after,.jw-controlbar .jw-tooltip::after,.jw-settings-menu .jw-tooltip::after{top:100%;position:absolute;left:50%;height:14px;width:14px;border-radius:1px;background-color:currentColor;-webkit-transform-origin:75% 50%;transform-origin:75% 50%;-webkit-transform:translate(-50%, -50%) rotate(45deg);transform:translate(-50%, -50%) rotate(45deg);z-index:-1}.jw-time-tip .jw-text,.jw-controlbar .jw-tooltip .jw-text,.jw-settings-menu .jw-tooltip .jw-text{background-color:#fff;border-radius:1px;color:#000;font-size:10px;height:auto;line-height:1;padding:7px 10px;display:inline-block;min-width:100%;vertical-align:middle}.jw-controlbar .jw-overlay{position:absolute;bottom:100%;left:50%;margin:0;min-height:44px;min-width:44px;opacity:0;pointer-events:none;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility;transition-delay:0s, 150ms;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);width:100%;z-index:1}.jw-controlbar .jw-overlay .jw-contents{position:relative}.jw-controlbar .jw-option{position:relative;white-space:nowrap;cursor:pointer;list-style:none;height:1.5em;font-family:inherit;line-height:1.5em;padding:0 .5em;font-size:.8em;margin:0}.jw-controlbar .jw-option::before{padding-right:.125em}.jw-controlbar .jw-tooltip,.jw-settings-menu .jw-tooltip{position:absolute;bottom:100%;left:50%;opacity:0;-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);transition:100ms 0s cubic-bezier(0, .25, .25, 1);transition-property:opacity, visibility, -webkit-transform;transition-property:opacity, transform, visibility;transition-property:opacity, transform, visibility, -webkit-transform;visibility:hidden;white-space:nowrap;width:auto;z-index:1}.jw-controlbar .jw-tooltip.jw-open,.jw-settings-menu .jw-tooltip.jw-open{opacity:1;-webkit-transform:translate(-50%, -10px);transform:translate(-50%, -10px);transition-duration:150ms;transition-delay:500ms,0s,500ms;visibility:visible}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen{left:auto;right:0;-webkit-transform:translate(0, 0);transform:translate(0, 0)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen.jw-open,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen.jw-open{-webkit-transform:translate(0, -10px);transform:translate(0, -10px)}.jw-controlbar .jw-tooltip.jw-tooltip-fullscreen::after,.jw-settings-menu .jw-tooltip.jw-tooltip-fullscreen::after{left:auto;right:9px}.jw-tooltip-time{height:auto;width:0;bottom:100%;line-height:normal;padding:0;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jw-tooltip-time .jw-overlay{bottom:0;min-height:0;width:auto}.jw-tooltip{bottom:57px;display:none;position:absolute}.jw-tooltip .jw-text{height:100%;white-space:nowrap;text-overflow:ellipsis;direction:unset;max-width:246px;overflow:hidden}.jw-flag-audio-player .jw-tooltip{display:none}.jw-flag-small-player .jw-time-thumb{display:none}.jwplayer .jw-shortcuts-tooltip{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column;z-index:1}.jwplayer .jw-shortcuts-tooltip.jw-open{display:flex}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-close{flex:0 0 auto;margin:5px 5px 5px auto}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container{display:flex;flex:1 1 auto;flex-flow:column;font-size:12px;margin:0 20px 20px;overflow-y:auto;padding:5px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar{background-color:transparent;width:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-title{font-weight:bold}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list{display:flex;max-width:340px;margin:0 10px}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-tooltip-descriptions{width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row{display:flex;align-items:center;justify-content:space-between;margin:10px 0;width:100%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-description{margin-right:10px;max-width:70%}.jwplayer .jw-shortcuts-tooltip .jw-shortcuts-container .jw-shortcuts-tooltip-list .jw-shortcuts-row .jw-shortcuts-key{background:#fefefe;color:#333;overflow:hidden;padding:7px 10px;text-overflow:ellipsis;white-space:nowrap}.jw-skip{color:rgba(255,255,255,0.8);cursor:default;position:absolute;display:flex;right:.75em;bottom:56px;padding:.5em;border:1px solid #333;background-color:#000;align-items:center;height:2em}.jw-skip.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-skip.jw-skippable{cursor:pointer;padding:.25em .75em}.jw-skip.jw-skippable:hover{cursor:pointer;color:#fff}.jw-skip.jw-skippable .jw-skip-icon{display:inline;height:24px;width:24px;margin:0}.jw-breakpoint-7 .jw-skip{padding:1.35em 1em;bottom:130px}.jw-breakpoint-7 .jw-skip .jw-text{font-size:1em;font-weight:normal}.jw-breakpoint-7 .jw-skip .jw-icon-inline{height:30px;width:30px}.jw-breakpoint-7 .jw-skip .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-skip .jw-skip-icon{display:none;margin-left:-0.75em;padding:0 .5em;pointer-events:none}.jw-skip .jw-skip-icon .jw-svg-icon-next{display:block;padding:0}.jw-skip .jw-text,.jw-skip .jw-skip-icon{vertical-align:middle;font-size:.7em}.jw-skip .jw-text{font-weight:bold}.jw-cast{background-size:cover;display:none;height:100%;position:relative;width:100%}.jw-cast-container{background:linear-gradient(180deg, rgba(25,25,25,0.75), rgba(25,25,25,0.25), rgba(25,25,25,0));left:0;padding:20px 20px 80px;position:absolute;top:0;width:100%}.jw-cast-text{color:#fff;font-size:1.6em}.jw-breakpoint--1 .jw-cast-text,.jw-breakpoint-0 .jw-cast-text{font-size:1.15em}.jw-breakpoint-1 .jw-cast-text,.jw-breakpoint-2 .jw-cast-text,.jw-breakpoint-3 .jw-cast-text{font-size:1.3em}.jw-nextup-container{position:absolute;bottom:66px;left:0;background-color:transparent;cursor:pointer;margin:0 auto;padding:12px;pointer-events:none;right:0;text-align:right;visibility:hidden;width:100%}.jw-settings-open .jw-nextup-container,.jw-info-open .jw-nextup-container{display:none}.jw-breakpoint-7 .jw-nextup-container{padding:60px}.jw-flag-small-player .jw-nextup-container{padding:0 12px 0 0}.jw-flag-small-player .jw-nextup-container .jw-nextup-title,.jw-flag-small-player .jw-nextup-container .jw-nextup-duration,.jw-flag-small-player .jw-nextup-container .jw-nextup-close{display:none}.jw-flag-small-player .jw-nextup-container .jw-nextup-tooltip{height:30px}.jw-flag-small-player .jw-nextup-container .jw-nextup-header{font-size:12px}.jw-flag-small-player .jw-nextup-container .jw-nextup-body{justify-content:center;align-items:center;padding:.75em .3em}.jw-flag-small-player .jw-nextup-container .jw-nextup-thumbnail{width:50%}.jw-flag-small-player .jw-nextup-container .jw-nextup{max-width:65px}.jw-flag-small-player .jw-nextup-container .jw-nextup.jw-nextup-thumbnail-visible{max-width:120px}.jw-nextup{background:#333;border-radius:0;box-shadow:0 0 10px rgba(0,0,0,0.5);color:rgba(255,255,255,0.8);display:inline-block;max-width:280px;overflow:hidden;opacity:0;position:relative;width:64%;pointer-events:all;-webkit-transform:translate(0, -5px);transform:translate(0, -5px);transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform;transition-delay:0s}.jw-nextup:hover .jw-nextup-tooltip{color:#fff}.jw-nextup.jw-nextup-thumbnail-visible{max-width:400px}.jw-nextup.jw-nextup-thumbnail-visible .jw-nextup-thumbnail{display:block}.jw-nextup-container-visible{visibility:visible}.jw-nextup-container-visible .jw-nextup{opacity:1;-webkit-transform:translate(0, 0);transform:translate(0, 0);transition-delay:0s, 0s, 150ms}.jw-nextup-tooltip{display:flex;height:80px}.jw-nextup-thumbnail{width:120px;background-position:center;background-size:cover;flex:0 0 auto;display:none}.jw-nextup-body{flex:1 1 auto;overflow:hidden;padding:.75em .875em;display:flex;flex-flow:column wrap;justify-content:space-between}.jw-nextup-header,.jw-nextup-title{font-size:14px;line-height:1.35}.jw-nextup-header{font-weight:bold}.jw-nextup-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.jw-nextup-duration{align-self:flex-end;text-align:right;font-size:12px}.jw-nextup-close{height:24px;width:24px;border:none;color:rgba(255,255,255,0.8);cursor:pointer;margin:6px;visibility:hidden}.jw-nextup-close:hover{color:#fff}.jw-nextup-sticky .jw-nextup-close{visibility:visible}.jw-autostart-mute{position:absolute;bottom:0;right:12px;height:44px;width:44px;background-color:rgba(33,33,33,0.4);padding:5px 4px 5px 6px;display:none}.jwplayer.jw-flag-autostart:not(.jw-flag-media-audio) .jw-nextup{display:none}.jw-settings-menu{position:absolute;bottom:57px;right:12px;align-items:flex-start;background-color:#333;display:none;flex-flow:column nowrap;max-width:284px;pointer-events:auto}.jw-settings-open .jw-settings-menu{display:flex}.jw-breakpoint-7 .jw-settings-menu{bottom:130px;right:60px;max-height:none;max-width:none;height:35%;width:25%}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline{height:60px;width:60px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-svg-icon{height:30px;width:30px}.jw-breakpoint-7 .jw-settings-menu .jw-settings-topbar .jw-icon-inline .jw-tooltip .jw-text{font-size:1em}.jw-breakpoint-6 .jw-settings-menu,.jw-breakpoint-5 .jw-settings-menu{height:232px;width:284px;max-height:232px}.jw-breakpoint-4 .jw-settings-menu,.jw-breakpoint-3 .jw-settings-menu{height:192px;width:284px;max-height:192px}.jw-breakpoint-2 .jw-settings-menu{height:179px;width:284px;max-height:179px}.jw-flag-small-player .jw-settings-menu{max-width:none}.jw-settings-menu .jw-icon.jw-button-color::after{height:100%;width:24px;box-shadow:inset 0 -3px 0 -1px currentColor;margin:auto;opacity:0;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-settings-menu .jw-icon.jw-button-color[aria-checked="true"]::after{opacity:1}.jw-settings-topbar{align-items:center;background-color:rgba(0,0,0,0.4);display:flex;flex:0 0 auto;padding:3px 5px 0;width:100%}.jw-settings-topbar .jw-settings-close{margin-left:auto}.jw-settings-submenu{display:none;flex:1 1 auto;overflow-y:auto;padding:8px 20px 0 5px}.jw-settings-submenu::-webkit-scrollbar{background-color:transparent;width:6px}.jw-settings-submenu::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-settings-submenu.jw-settings-submenu-active{display:block}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item{font-size:1em;padding:11px 0 11px 30px}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-settings-item-active::before{justify-content:flex-end}.jw-breakpoint-7 .jw-settings-submenu .jw-settings-content-item .jw-auto-label{font-size:.85em;padding-left:10px}.jw-flag-touch .jw-settings-submenu{overflow-y:scroll;-webkit-overflow-scrolling:touch}.jw-auto-label{font-size:10px;font-weight:initial;opacity:.75;padding-left:5px}.jw-settings-content-item{position:relative;color:rgba(255,255,255,0.8);cursor:pointer;font-size:12px;line-height:1;padding:7px 0 7px 15px;width:100%;text-align:left;outline:none}.jw-settings-content-item:hover{color:#fff}.jw-settings-content-item:focus{font-weight:bold}.jw-flag-small-player .jw-settings-content-item{line-height:1.75}.jw-settings-content-item.jw-tab-focus:focus{border:solid 2px #4d90fe}.jw-settings-item-active{font-weight:bold;position:relative}.jw-settings-item-active::before{height:100%;width:1em;align-items:center;content:"\\2022";display:inline-flex;justify-content:center}.jw-breakpoint-2 .jw-settings-open .jw-display-container,.jw-flag-small-player .jw-settings-open .jw-display-container,.jw-flag-touch .jw-settings-open .jw-display-container{display:none}.jw-breakpoint-2 .jw-settings-open.jw-controls,.jw-flag-small-player .jw-settings-open.jw-controls,.jw-flag-touch .jw-settings-open.jw-controls{z-index:1}.jw-flag-small-player .jw-settings-open .jw-controlbar{display:none}.jw-settings-open .jw-icon-settings::after{opacity:1}.jw-settings-open .jw-tooltip-settings{display:none}.jw-sharing-link{cursor:pointer}.jw-shortcuts-container .jw-switch{position:relative;display:inline-block;transition:ease-out .15s;transition-property:opacity, background;border-radius:18px;width:80px;height:20px;padding:10px;background:rgba(80,80,80,0.8);cursor:pointer;font-size:inherit;vertical-align:middle}.jw-shortcuts-container .jw-switch .jw-switch-knob{position:absolute;top:2px;left:1px;transition:ease-out .15s;box-shadow:0 0 10px rgba(0,0,0,0.4);border-radius:13px;width:15px;height:15px;background:#fefefe}.jw-shortcuts-container .jw-switch:before,.jw-shortcuts-container .jw-switch:after{position:absolute;top:3px;transition:inherit;color:#fefefe}.jw-shortcuts-container .jw-switch:before{content:attr(data-jw-switch-disabled);right:8px}.jw-shortcuts-container .jw-switch:after{content:attr(data-jw-switch-enabled);left:8px;opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]{background:#475470}.jw-shortcuts-container .jw-switch[aria-checked="true"]:before{opacity:0}.jw-shortcuts-container .jw-switch[aria-checked="true"]:after{opacity:1}.jw-shortcuts-container .jw-switch[aria-checked="true"] .jw-switch-knob{left:60px}.jw-idle-icon-text{display:none;line-height:1;position:absolute;text-align:center;text-indent:.35em;top:100%;white-space:nowrap;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.jw-idle-label{border-radius:50%;color:#fff;-webkit-filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));filter:drop-shadow(1px 1px 5px rgba(12,26,71,0.25));font:normal 16px/1 Arial,Helvetica,sans-serif;position:relative;transition:background-color 150ms cubic-bezier(0, .25, .25, 1);transition-property:background-color,-webkit-filter;transition-property:background-color,filter;transition-property:background-color,filter,-webkit-filter;-webkit-font-smoothing:antialiased}.jw-state-idle .jw-icon-display.jw-idle-label .jw-idle-icon-text{display:block}.jw-state-idle .jw-icon-display.jw-idle-label .jw-svg-icon-play{-webkit-transform:scale(.7, .7);transform:scale(.7, .7)}.jw-breakpoint-0.jw-state-idle .jw-icon-display.jw-idle-label,.jw-breakpoint--1.jw-state-idle .jw-icon-display.jw-idle-label{font-size:12px}.jw-info-overlay{top:50%;position:absolute;left:50%;background:#333;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);display:none;color:#fff;pointer-events:all;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;overflow:hidden;flex-direction:column}.jw-info-overlay .jw-info-close{flex:0 0 auto;margin:5px 5px 5px auto}.jw-info-open .jw-info-overlay{display:flex}.jw-info-container{display:flex;flex:1 1 auto;flex-flow:column;margin:0 20px 20px;overflow-y:auto;padding:5px}.jw-info-container [class*="jw-info"]:not(:first-of-type){color:rgba(255,255,255,0.8);padding-top:10px;font-size:12px}.jw-info-container .jw-info-description{margin-bottom:30px;text-align:start}.jw-info-container .jw-info-description:empty{display:none}.jw-info-container .jw-info-duration{text-align:start}.jw-info-container .jw-info-title{text-align:start;font-size:12px;font-weight:bold}.jw-info-container::-webkit-scrollbar{background-color:transparent;width:6px}.jw-info-container::-webkit-scrollbar-thumb{background-color:#fff;border:1px solid #333;border-radius:6px}.jw-info-clientid{align-self:flex-end;font-size:12px;color:rgba(255,255,255,0.8);margin:0 20px 20px 44px;text-align:right}.jw-flag-touch .jw-info-open .jw-display-container{display:none}@supports ((-webkit-filter: drop-shadow(0 0 3px #000)) or (filter: drop-shadow(0 0 3px #000))){.jwplayer.jw-ab-drop-shadow .jw-controls .jw-svg-icon,.jwplayer.jw-ab-drop-shadow .jw-controls .jw-icon.jw-text,.jwplayer.jw-ab-drop-shadow .jw-slider-container .jw-rail,.jwplayer.jw-ab-drop-shadow .jw-title{text-shadow:none;box-shadow:none;-webkit-filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3));filter:drop-shadow(0 2px 3px rgba(0,0,0,0.3))}.jwplayer.jw-ab-drop-shadow .jw-button-color{opacity:.8;transition-property:color, opacity}.jwplayer.jw-ab-drop-shadow .jw-button-color:not(:hover){color:#fff;opacity:.8}.jwplayer.jw-ab-drop-shadow .jw-button-color:hover{opacity:1}.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0), hsla(0, 0%, 0%, 0.00787) 10.79%, hsla(0, 0%, 0%, 0.02963) 21.99%, hsla(0, 0%, 0%, 0.0625) 33.34%, hsla(0, 0%, 0%, 0.1037) 44.59%, hsla(0, 0%, 0%, 0.15046) 55.48%, hsla(0, 0%, 0%, 0.2) 65.75%, hsla(0, 0%, 0%, 0.24954) 75.14%, hsla(0, 0%, 0%, 0.2963) 83.41%, hsla(0, 0%, 0%, 0.3375) 90.28%, hsla(0, 0%, 0%, 0.37037) 95.51%, hsla(0, 0%, 0%, 0.39213) 98.83%, hsla(0, 0%, 0%, 0.4));mix-blend-mode:multiply;transition-property:opacity}.jw-state-idle.jwplayer.jw-ab-drop-shadow .jw-controls-backdrop{background-image:linear-gradient(to bottom, hsla(0, 0%, 0%, 0.2), hsla(0, 0%, 0%, 0.19606) 1.17%, hsla(0, 0%, 0%, 0.18519) 4.49%, hsla(0, 0%, 0%, 0.16875) 9.72%, hsla(0, 0%, 0%, 0.14815) 16.59%, hsla(0, 0%, 0%, 0.12477) 24.86%, hsla(0, 0%, 0%, 0.1) 34.25%, hsla(0, 0%, 0%, 0.07523) 44.52%, hsla(0, 0%, 0%, 0.05185) 55.41%, hsla(0, 0%, 0%, 0.03125) 66.66%, hsla(0, 0%, 0%, 0.01481) 78.01%, hsla(0, 0%, 0%, 0.00394) 89.21%, hsla(0, 0%, 0%, 0));background-size:100% 7rem;background-position:50% 0}.jwplayer.jw-ab-drop-shadow.jw-state-idle .jw-controls{background-color:transparent}}.jw-video-thumbnail-container{position:relative;overflow:hidden}.jw-video-thumbnail-container:not(.jw-related-shelf-item-image){height:100%;width:100%}.jw-video-thumbnail-container.jw-video-thumbnail-generated{position:absolute;top:0;left:0}.jw-video-thumbnail-container:hover,.jw-related-item-content:hover .jw-video-thumbnail-container,.jw-related-shelf-item:hover .jw-video-thumbnail-container{cursor:pointer}.jw-video-thumbnail-container:hover .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-item-content:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed),.jw-related-shelf-item:hover .jw-video-thumbnail-container .jw-video-thumbnail:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail{position:absolute;top:50%;left:50%;bottom:unset;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);width:100%;height:auto;min-width:100%;min-height:100%;opacity:0;transition:opacity .3s ease;object-fit:cover;background:#000}.jw-related-item-next-up .jw-video-thumbnail-container .jw-video-thumbnail{height:100%;width:auto}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-visible:not(.jw-video-thumbnail-completed){opacity:1}.jw-video-thumbnail-container .jw-video-thumbnail.jw-video-thumbnail-completed{opacity:0}.jw-video-thumbnail-container .jw-video-thumbnail~.jw-svg-icon-play{display:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-shelf-item-aspect{pointer-events:none}.jw-video-thumbnail-container .jw-video-thumbnail+.jw-related-item-poster-content{pointer-events:none}.jw-state-idle:not(.jw-flag-cast-available) .jw-display{padding:0}.jw-state-idle .jw-controls{background:rgba(0,0,0,0.4)}.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-slider-time,.jw-state-idle.jw-flag-cast-available:not(.jw-flag-audio-player) .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay),.jw-state-idle.jw-flag-cardboard-available .jw-controlbar .jw-icon:not(.jw-icon-cardboard):not(.jw-icon-cast):not(.jw-icon-airplay){display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon:focus{border:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-icon .jw-svg-icon-buffer{-webkit-animation:jw-spin 2s linear infinite;animation:jw-spin 2s linear infinite;display:block}@-webkit-keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes jw-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.jwplayer.jw-state-buffering .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-pause{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-play{display:none}.jwplayer.jw-state-playing .jw-display .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-playing .jw-icon-playback .jw-svg-icon-pause{display:block}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-controls-backdrop{opacity:0}.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio) .jw-logo-bottom-left,.jwplayer.jw-state-playing.jw-flag-user-inactive:not(.jw-flag-audio-player):not(.jw-flag-casting):not(.jw-flag-media-audio):not(.jw-flag-autostart) .jw-logo-bottom-right{bottom:0}.jwplayer .jw-icon-playback .jw-svg-icon-stop{display:none}.jwplayer.jw-state-paused .jw-svg-icon-pause,.jwplayer.jw-state-idle .jw-svg-icon-pause,.jwplayer.jw-state-error .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-svg-icon-pause{display:none}.jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-complete .jw-icon-display .jw-svg-icon-play,.jwplayer.jw-state-buffering .jw-icon-display .jw-svg-icon-play{display:none}.jwplayer:not(.jw-state-buffering) .jw-svg-icon-buffer{display:none}.jwplayer:not(.jw-state-complete) .jw-svg-icon-replay{display:none}.jwplayer:not(.jw-state-error) .jw-svg-icon-error{display:none}.jwplayer.jw-state-complete .jw-display .jw-icon-display .jw-svg-icon-replay{display:block}.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-state-complete .jw-controls{background:rgba(0,0,0,0.4);height:100%}.jw-state-idle .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-state-paused .jw-icon-display .jw-svg-icon-pause,.jwplayer.jw-state-complete .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-state-idle .jw-display-icon-rewind,.jwplayer.jw-state-buffering .jw-display-icon-rewind,.jwplayer.jw-state-complete .jw-display-icon-rewind,body .jw-error .jw-display-icon-rewind,body .jwplayer.jw-state-error .jw-display-icon-rewind,.jw-state-idle .jw-display-icon-next,.jwplayer.jw-state-buffering .jw-display-icon-next,.jwplayer.jw-state-complete .jw-display-icon-next,body .jw-error .jw-display-icon-next,body .jwplayer.jw-state-error .jw-display-icon-next{display:none}body .jw-error .jw-icon-display,body .jwplayer.jw-state-error .jw-icon-display{cursor:default}body .jw-error .jw-icon-display .jw-svg-icon-error,body .jwplayer.jw-state-error .jw-icon-display .jw-svg-icon-error{display:block}body .jw-error .jw-icon-container{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-preview{display:none}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title{padding-top:4px}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-primary{width:auto;display:inline-block;padding-right:.5ch}body .jwplayer.jw-state-error.jw-flag-audio-player .jw-title-secondary{width:auto;display:inline-block;padding-left:0}body .jwplayer.jw-state-error .jw-controlbar,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-controlbar{display:none}body .jwplayer.jw-state-error .jw-settings-menu,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-settings-menu{height:100%;top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}body .jwplayer.jw-state-error .jw-display,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-display{padding:0}body .jwplayer.jw-state-error .jw-logo-bottom-left,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-left,body .jwplayer.jw-state-error .jw-logo-bottom-right,.jwplayer.jw-state-idle:not(.jw-flag-audio-player):not(.jw-flag-cast-available):not(.jw-flag-cardboard-available) .jw-logo-bottom-right{bottom:0}.jwplayer.jw-state-playing.jw-flag-user-inactive .jw-display{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-state-playing:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display,.jwplayer.jw-state-paused:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting):not(.jw-flag-play-rejected) .jw-display{display:none}.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-rewind,.jwplayer.jw-state-paused.jw-flag-play-rejected:not(.jw-flag-touch):not(.jw-flag-small-player):not(.jw-flag-casting) .jw-display-icon-next{display:none}.jwplayer.jw-state-buffering .jw-display-icon-display .jw-text,.jwplayer.jw-state-complete .jw-display .jw-text{display:none}.jwplayer.jw-flag-casting:not(.jw-flag-audio-player) .jw-cast{display:block}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-display-icon-container{display:none}.jwplayer.jw-flag-casting .jw-icon-hd,.jwplayer.jw-flag-casting .jw-captions,.jwplayer.jw-flag-casting .jw-icon-fullscreen,.jwplayer.jw-flag-casting .jw-icon-audio-tracks{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-volume{display:none}.jwplayer.jw-flag-casting.jw-flag-airplay-casting .jw-icon-airplay{color:#fff}.jw-state-playing.jw-flag-casting:not(.jw-flag-audio-player) .jw-display,.jw-state-paused.jw-flag-casting:not(.jw-flag-audio-player) .jw-display{display:table}.jwplayer.jw-flag-cast-available .jw-icon-cast,.jwplayer.jw-flag-cast-available .jw-icon-airplay{display:flex}.jwplayer.jw-flag-cardboard-available .jw-icon-cardboard{display:flex}.jwplayer.jw-flag-live .jw-display-icon-rewind{visibility:hidden}.jwplayer.jw-flag-live .jw-controlbar .jw-text-elapsed,.jwplayer.jw-flag-live .jw-controlbar .jw-text-duration,.jwplayer.jw-flag-live .jw-controlbar .jw-text-countdown,.jwplayer.jw-flag-live .jw-controlbar .jw-slider-time{display:none}.jwplayer.jw-flag-live .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-live .jw-controlbar .jw-overlay:after{display:none}.jwplayer.jw-flag-live .jw-nextup-container{bottom:44px}.jwplayer.jw-flag-live .jw-text-elapsed,.jwplayer.jw-flag-live .jw-text-duration{display:none}.jwplayer.jw-flag-live .jw-text-live{cursor:default}.jwplayer.jw-flag-live .jw-text-live:hover{color:rgba(255,255,255,0.8)}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-stop,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-stop{display:block}.jwplayer.jw-flag-live.jw-state-playing .jw-icon-playback .jw-svg-icon-pause,.jwplayer.jw-flag-live.jw-state-buffering .jw-icon-playback .jw-svg-icon-pause{display:none}.jw-text-live{height:24px;width:auto;align-items:center;border-radius:1px;color:rgba(255,255,255,0.8);display:flex;font-size:12px;font-weight:bold;margin-right:10px;padding:0 1ch;text-rendering:geometricPrecision;text-transform:uppercase;transition:150ms cubic-bezier(0, .25, .25, 1);transition-property:box-shadow,color}.jw-text-live::before{height:8px;width:8px;background-color:currentColor;border-radius:50%;margin-right:6px;opacity:1;transition:opacity 150ms cubic-bezier(0, .25, .25, 1)}.jw-text-live.jw-dvr-live{box-shadow:inset 0 0 0 2px currentColor}.jw-text-live.jw-dvr-live::before{opacity:.5}.jw-text-live.jw-dvr-live:hover{color:#fff}.jwplayer.jw-flag-controls-hidden .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-controls-hidden:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-controls-hidden .jw-plugin{bottom:.5em}.jwplayer.jw-flag-controls-hidden .jw-nextup-container{bottom:0}.jw-flag-controls-hidden .jw-controlbar,.jw-flag-controls-hidden .jw-display{visibility:hidden;pointer-events:none;opacity:0;transition-delay:0s, 250ms}.jw-flag-controls-hidden .jw-controls-backdrop{opacity:0}.jw-flag-controls-hidden .jw-logo{visibility:visible}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-logo.jw-hide{visibility:hidden;pointer-events:none;opacity:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-casting) .jw-logo-top-right{top:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-plugin{bottom:.5em}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing .jw-nextup-container{bottom:0}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-controls-hidden) .jw-media{cursor:none;-webkit-cursor-visibility:auto-hide}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing.jw-flag-casting .jw-display{display:table}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-state-playing:not(.jw-flag-ads) .jw-autostart-mute{display:flex}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting .jw-nextup-container{bottom:66px}.jwplayer.jw-flag-user-inactive:not(.jw-flag-media-audio).jw-flag-casting.jw-state-idle .jw-nextup-container{display:none}.jw-flag-media-audio .jw-preview{display:block}.jwplayer.jw-flag-ads .jw-preview,.jwplayer.jw-flag-ads .jw-logo,.jwplayer.jw-flag-ads .jw-captions.jw-captions-enabled,.jwplayer.jw-flag-ads .jw-nextup-container,.jwplayer.jw-flag-ads .jw-text-duration,.jwplayer.jw-flag-ads .jw-text-elapsed{display:none}.jwplayer.jw-flag-ads video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-rewind,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-next,.jwplayer.jw-flag-ads.jw-flag-small-player .jw-display-icon-display{display:none}.jwplayer.jw-flag-ads.jw-flag-small-player.jw-state-buffering .jw-display-icon-display{display:inline-block}.jwplayer.jw-flag-ads .jw-controlbar{flex-wrap:wrap-reverse}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time{height:auto;padding:0;pointer-events:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-slider-container{height:5px}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-rail,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-knob,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-buffer,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-cue,.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-icon-settings{display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-slider-time .jw-progress{-webkit-transform:none;transform:none;top:auto}.jwplayer.jw-flag-ads .jw-controlbar .jw-tooltip,.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-tooltip:not(.jw-icon-volume),.jwplayer.jw-flag-ads .jw-controlbar .jw-icon-inline:not(.jw-icon-playback):not(.jw-icon-fullscreen):not(.jw-icon-volume){display:none}.jwplayer.jw-flag-ads .jw-controlbar .jw-volume-tip{padding:13px 0}.jwplayer.jw-flag-ads .jw-controlbar .jw-text-alt{display:flex}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid) .jw-controls .jw-controlbar,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart .jw-controls .jw-controlbar{display:flex;pointer-events:all;visibility:visible;opacity:1}.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-user-inactive .jw-controls-backdrop,.jwplayer.jw-flag-ads.jw-flag-ads.jw-state-playing.jw-flag-touch:not(.jw-flag-ads-vpaid).jw-flag-autostart.jw-flag-user-inactive .jw-controls-backdrop{opacity:1;background-size:100% 60px}.jwplayer.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-display-container,.jwplayer.jw-flag-ads-vpaid .jw-skip,.jwplayer.jw-flag-touch.jw-flag-ads-vpaid .jw-skip{display:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls{background:none}.jwplayer.jw-flag-ads-vpaid.jw-flag-small-player .jw-controls::after{content:none}.jwplayer.jw-flag-ads-hide-controls .jw-controls-backdrop,.jwplayer.jw-flag-ads-hide-controls .jw-controls{display:none !important}.jw-flag-overlay-open-related .jw-controls,.jw-flag-overlay-open-related .jw-title,.jw-flag-overlay-open-related .jw-logo{display:none}.jwplayer.jw-flag-rightclick-open{overflow:visible}.jwplayer.jw-flag-rightclick-open .jw-rightclick{z-index:16777215}body .jwplayer.jw-flag-flash-blocked .jw-controls,body .jwplayer.jw-flag-flash-blocked .jw-overlays,body .jwplayer.jw-flag-flash-blocked .jw-controls-backdrop,body .jwplayer.jw-flag-flash-blocked .jw-preview{display:none}body .jwplayer.jw-flag-flash-blocked .jw-error-msg{top:25%}.jw-flag-touch.jw-breakpoint-7 .jw-captions,.jw-flag-touch.jw-breakpoint-6 .jw-captions,.jw-flag-touch.jw-breakpoint-5 .jw-captions,.jw-flag-touch.jw-breakpoint-4 .jw-captions,.jw-flag-touch.jw-breakpoint-7 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-6 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-5 .jw-nextup-container,.jw-flag-touch.jw-breakpoint-4 .jw-nextup-container{bottom:4.25em}.jw-flag-touch .jw-controlbar .jw-icon-volume{display:flex}.jw-flag-touch .jw-display,.jw-flag-touch .jw-display-container,.jw-flag-touch .jw-display-controls{pointer-events:none}.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-next,.jw-flag-touch.jw-state-paused:not(.jw-breakpoint-1) .jw-display-icon-rewind,.jw-flag-touch.jw-state-playing:not(.jw-breakpoint-1) .jw-display-icon-rewind{display:none}.jw-flag-touch.jw-state-paused.jw-flag-dragging .jw-display{display:none}.jw-flag-audio-player{background-color:#000}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:44px}.jw-flag-audio-player:not(.jw-flag-live) .jw-spacer{display:none}.jw-flag-audio-player .jw-preview,.jw-flag-audio-player .jw-display,.jw-flag-audio-player .jw-title,.jw-flag-audio-player .jw-nextup-container{display:none}.jw-flag-audio-player .jw-controlbar{position:relative}.jw-flag-audio-player .jw-controlbar .jw-button-container{padding-right:3px;padding-left:0}.jw-flag-audio-player .jw-controlbar .jw-icon-tooltip,.jw-flag-audio-player .jw-controlbar .jw-icon-inline{display:none}.jw-flag-audio-player .jw-controlbar .jw-icon-volume,.jw-flag-audio-player .jw-controlbar .jw-icon-playback,.jw-flag-audio-player .jw-controlbar .jw-icon-next,.jw-flag-audio-player .jw-controlbar .jw-icon-rewind,.jw-flag-audio-player .jw-controlbar .jw-icon-cast,.jw-flag-audio-player .jw-controlbar .jw-text-live,.jw-flag-audio-player .jw-controlbar .jw-icon-airplay,.jw-flag-audio-player .jw-controlbar .jw-logo-button,.jw-flag-audio-player .jw-controlbar .jw-text-elapsed,.jw-flag-audio-player .jw-controlbar .jw-text-duration{display:flex;flex:0 0 auto}.jw-flag-audio-player .jw-controlbar .jw-text-duration,.jw-flag-audio-player .jw-controlbar .jw-text-countdown{padding-right:10px}.jw-flag-audio-player .jw-controlbar .jw-slider-time{flex:0 1 auto;align-items:center;display:flex;order:1}.jw-flag-audio-player .jw-controlbar .jw-icon-volume{margin-right:0;transition:margin-right 150ms cubic-bezier(0, .25, .25, 1)}.jw-flag-audio-player .jw-controlbar .jw-icon-volume .jw-overlay{display:none}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container{transition:width 300ms cubic-bezier(0, .25, .25, 1);width:0}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open{width:140px}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open .jw-slider-volume{padding-right:24px;transition:opacity 300ms;opacity:1}.jw-flag-audio-player .jw-controlbar .jw-horizontal-volume-container.jw-open~.jw-slider-time{flex:1 1 auto;width:auto;transition:opacity 300ms, width 300ms}.jw-flag-audio-player .jw-controlbar .jw-slider-volume{opacity:0}.jw-flag-audio-player .jw-controlbar .jw-slider-volume .jw-knob{-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.jw-flag-audio-player .jw-controlbar .jw-slider-volume~.jw-icon-volume{margin-right:140px}.jw-flag-audio-player.jw-breakpoint-1 .jw-horizontal-volume-container.jw-open~.jw-slider-time,.jw-flag-audio-player.jw-breakpoint-2 .jw-horizontal-volume-container.jw-open~.jw-slider-time{opacity:0}.jw-flag-audio-player.jw-flag-small-player .jw-text-elapsed,.jw-flag-audio-player.jw-flag-small-player .jw-text-duration{display:none}.jw-flag-audio-player.jw-flag-ads .jw-slider-time{display:none}.jw-hidden{display:none}',""])}]]); \ No newline at end of file diff --git a/ui/v2.5/public/jwplayer/jwplayer.core.js b/ui/v2.5/public/jwplayer/jwplayer.core.js new file mode 100644 index 00000000000..17f29f33d04 --- /dev/null +++ b/ui/v2.5/public/jwplayer/jwplayer.core.js @@ -0,0 +1,95 @@ +/*! +JW Player version 8.11.5 +Copyright (c) 2019, JW Player, All Rights Reserved +https://github.com/jwplayer/jwplayer/blob/v8.11.5/README.md + +This source code and its use and distribution is subject to the terms and conditions of the applicable license agreement. +https://www.jwplayer.com/tos/ + +This product includes portions of other software. For the full text of licenses, see below: + +JW Player Third Party Software Notices and/or Additional Terms and Conditions + +************************************************************************************************** +The following software is used under Apache License 2.0 +************************************************************************************************** + +vtt.js v0.13.0 +Copyright (c) 2019 Mozilla (http://mozilla.org) +https://github.com/mozilla/vtt.js/blob/v0.13.0/LICENSE + +* * * + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and +limitations under the License. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under MIT license +************************************************************************************************** + +Underscore.js v1.6.0 +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +https://github.com/jashkenas/underscore/blob/1.6.0/LICENSE + +Backbone backbone.events.js v1.1.2 +Copyright (c) 2010-2014 Jeremy Ashkenas, DocumentCloud +https://github.com/jashkenas/backbone/blob/1.1.2/LICENSE + +Promise Polyfill v7.1.1 +Copyright (c) 2014 Taylor Hakes and Forbes Lindesay +https://github.com/taylorhakes/promise-polyfill/blob/v7.1.1/LICENSE + +can-autoplay.js v3.0.0 +Copyright (c) 2017 video-dev +https://github.com/video-dev/can-autoplay/blob/v3.0.0/LICENSE + +* * * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under W3C license +************************************************************************************************** + +Intersection Observer v0.5.0 +Copyright (c) 2016 Google Inc. (http://google.com) +https://github.com/w3c/IntersectionObserver/blob/v0.5.0/LICENSE.md + +* * * + +W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. + +This work is being provided by the copyright holders under the following license. + +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: + +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. + +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." + +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders. +*/ +(window.webpackJsonpjwplayer=window.webpackJsonpjwplayer||[]).push([[2],{18:function(e,t,n){"use strict";n.r(t);var i=n(0),o=n(12),r=n(50),a=n(37);var s=n(44),l=n(51),c=n(26),u=n(25),d=n(3),f=n(46),h=n(2),g=n(7),p=n(34);function b(e){var t=!1;return{async:function(){var n=this,i=arguments;return Promise.resolve().then((function(){if(!t)return e.apply(n,i)}))},cancel:function(){t=!0},cancelled:function(){return t}}}var m=n(1);function w(e){return function(t,n){var o=e.mediaModel,r=Object(i.h)({},n,{type:t});switch(t){case d.T:if(o.get(d.T)===n.mediaType)return;o.set(d.T,n.mediaType);break;case d.U:return void o.set(d.U,Object(i.h)({},n));case d.M:if(n[t]===e.model.getMute())return;break;case d.bb:n.newstate===d.mb&&(e.thenPlayPromise.cancel(),o.srcReset());var a=o.attributes.mediaState;o.attributes.mediaState=n.newstate,o.trigger("change:mediaState",o,n.newstate,a);break;case d.F:return e.beforeComplete=!0,e.trigger(d.B,r),void(e.attached&&!e.background&&e._playbackComplete());case d.G:o.get("setup")?(e.thenPlayPromise.cancel(),o.srcReset()):(t=d.tb,r.code+=1e5);break;case d.K:r.metadataType||(r.metadataType="unknown");var s=n.duration;Object(i.v)(s)&&(o.set("seekRange",n.seekRange),o.set("duration",s));break;case d.D:o.set("buffer",n.bufferPercent);case d.S:o.set("seekRange",n.seekRange),o.set("position",n.position),o.set("currentTime",n.currentTime);var l=n.duration;Object(i.v)(l)&&o.set("duration",l),t===d.S&&Object(i.s)(e.item.starttime)&&delete e.item.starttime;break;case d.R:var c=e.mediaElement;c&&c.paused&&o.set("mediaState","paused");break;case d.I:o.set(d.I,n.levels);case d.J:var u=n.currentQuality,f=n.levels;u>-1&&f.length>1&&o.set("currentLevel",parseInt(u));break;case d.f:o.set(d.f,n.tracks);case d.g:var h=n.currentTrack,g=n.tracks;h>-1&&g.length>0&&h=Math.max(l,f.a)&&(e.preloadNextItem(),y=!0)}function E(e){var t={};w.tag&&(t.tag=w.tag),this.trigger(d.F,t),R.call(this,e)}function R(e){b={},r&&p+10?e:null,g&&g.model.set("skipOffset",s)}};Object(i.h)(le.prototype,g.a);var ce=le,ue=n(63),de=n(60),fe=function(e){var t=this,n=[],i={},o=0,r=0;function a(e){if(e.data=e.data||[],e.name=e.label||e.name||e.language,e._id=Object(de.a)(e,n.length),!e.name){var t=Object(de.b)(e,o);e.name=t.label,o=t.unknownCount}i[e._id]=e,n.push(e)}function s(){for(var e=[{id:"off",label:"Off"}],t=0;t')+'
    '},pe=n(36),be=44,me=function(e){var t=e.get("height");if(e.get("aspectratio"))return!1;if("string"==typeof t&&t.indexOf("%")>-1)return!1;var n=1*t||NaN;return!!(n=isNaN(n)?e.get("containerHeight"):n)&&(n&&n<=be)},we=n(54);function ve(e,t){if(e.get("fullscreen"))return 1;if(!e.get("activeTab"))return 0;if(e.get("isFloating"))return 1;var n=e.get("intersectionRatio");return void 0===n&&(n=function(e){var t=document.documentElement,n=document.body,i={top:0,left:0,right:t.clientWidth||n.clientWidth,width:t.clientWidth||n.clientWidth,bottom:t.clientHeight||n.clientHeight,height:t.clientHeight||n.clientHeight};if(!n.contains(e))return 0;if("none"===window.getComputedStyle(e).display)return 0;var o=ye(e);if(!o)return 0;var r=o,a=e.parentNode,s=!1;for(;!s;){var l=null;if(a===n||a===t||1!==a.nodeType?(s=!0,l=i):"visible"!==window.getComputedStyle(a).overflow&&(l=ye(a)),l&&(c=l,u=r,d=void 0,f=void 0,h=void 0,g=void 0,p=void 0,b=void 0,d=Math.max(c.top,u.top),f=Math.min(c.bottom,u.bottom),h=Math.max(c.left,u.left),g=Math.min(c.right,u.right),b=f-d,!(r=(p=g-h)>=0&&b>=0&&{top:d,bottom:f,left:h,right:g,width:p,height:b})))return 0;a=a.parentNode}var c,u,d,f,h,g,p,b;var m=o.width*o.height,w=r.width*r.height;return m?w/m:0}(t),window.top!==window.self&&n)?0:n}function ye(e){try{return e.getBoundingClientRect()}catch(e){}}var je=n(49),ke=n(42),Oe=n(58),xe=n(10);var Ce=n(32),Me=n(5),_e=n(6),Se=["fullscreenchange","webkitfullscreenchange","mozfullscreenchange","MSFullscreenChange"],Pe=function(e,t,n){for(var i=e.requestFullscreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullscreen,o=t.exitFullscreen||t.webkitExitFullscreen||t.webkitCancelFullScreen||t.mozCancelFullScreen||t.msExitFullscreen,r=!(!i||!o),a=Se.length;a--;)t.addEventListener(Se[a],n);return{events:Se,supportsDomFullscreen:function(){return r},requestFullscreen:function(){i.call(e,{navigationUI:"hide"})},exitFullscreen:function(){null!==this.fullscreenElement()&&o.apply(t)},fullscreenElement:function(){var e=t.fullscreenElement,n=t.webkitCurrentFullScreenElement,i=t.mozFullScreenElement,o=t.msFullscreenElement;return null===e?e:e||n||i||o},destroy:function(){for(var e=Se.length;e--;)t.removeEventListener(Se[e],n)}}},Te=n(40);function Ae(e,t){for(var n=0;no?r:i*a/n)*u}return e}(n))/10}g.get("renderCaptionsNatively")?function(e,t){var n="#".concat(e," .jw-video::-webkit-media-text-track-display");t&&(t+="px",v.OS.iOS&&Object(xe.b)(n,{fontSize:"inherit"},e,!0));f.fontSize=t,Object(xe.b)(n,f,e,!0)}(g.get("id"),t):Object(xe.d)(s,{fontSize:t})}}function m(e,t,n){var i=Object(xe.c)("#000000",n);"dropshadow"===e?t.textShadow="0 2px 1px "+i:"raised"===e?t.textShadow="0 0 5px "+i+", 0 1px 5px "+i+", 0 2px 5px "+i:"depressed"===e?t.textShadow="0 -2px 1px "+i:"uniform"===e&&(t.textShadow="-2px 0 1px "+i+",2px 0 1px "+i+",0 -2px 1px "+i+",0 2px 1px "+i+",-1px 1px 1px "+i+",1px 1px 1px "+i+",1px -1px 1px "+i+",1px 1px 1px "+i)}(s=document.createElement("div")).className="jw-captions jw-reset",this.show=function(){Object(Me.a)(s,"jw-captions-enabled")},this.hide=function(){Object(Me.o)(s,"jw-captions-enabled")},this.populate=function(e){g.get("renderCaptionsNatively")||(r=[],o=e,e?this.selectCues(e,a):this.renderCues())},this.resize=function(){b(),this.renderCues(!0)},this.renderCues=function(e){e=!!e,Ee&&Ee.processCues(window,r,s,e)},this.selectCues=function(e,t){if(e&&e.data&&t&&!g.get("renderCaptionsNatively")){var n=this.getAlignmentPosition(e,t);!1!==n&&(r=this.getCurrentCues(e.data,n),this.renderCues(!0))}},this.getCurrentCues=function(e,t){return Object(i.i)(e,(function(e){return t>=e.startTime&&(!e.endTime||t<=e.endTime)}))},this.getAlignmentPosition=function(e,t){var n=e.source,o=t.metadata,r=t.currentTime;return n&&o&&Object(i.s)(o[n])&&(r=o[n]),r},this.clear=function(){Object(Me.g)(s)},this.setup=function(e,n){l=document.createElement("div"),c=document.createElement("span"),l.className="jw-captions-window jw-reset",c.className="jw-captions-text jw-reset",t=Object(i.h)({},Le,n),u=Le.fontScale,p(t.fontSize);var o=t.windowColor,r=t.windowOpacity,a=t.edgeStyle;f={};var d={};!function(e,t){var n=t.color,i=t.fontOpacity;(n||i!==Le.fontOpacity)&&(e.color=Object(xe.c)(n||"#ffffff",i));if(t.back){var o=t.backgroundColor,r=t.backgroundOpacity;o===Le.backgroundColor&&r===Le.backgroundOpacity||(e.backgroundColor=Object(xe.c)(o,r))}else e.background="transparent";t.fontFamily&&(e.fontFamily=t.fontFamily);t.fontStyle&&(e.fontStyle=t.fontStyle);t.fontWeight&&(e.fontWeight=t.fontWeight);t.textDecoration&&(e.textDecoration=t.textDecoration)}(d,t),(o||r!==Le.windowOpacity)&&(f.backgroundColor=Object(xe.c)(o||"#000000",r)),m(a,d,t.fontOpacity),t.back||null!==a||m("uniform",d),Object(xe.d)(l,f),Object(xe.d)(c,d),function(e,t){b(),function(e,t){v.Browser.safari&&Object(xe.b)("#"+e+" .jw-video::-webkit-media-text-track-display-backdrop",{backgroundColor:t.backgroundColor},e,!0);Object(xe.b)("#"+e+" .jw-video::-webkit-media-text-track-display",f,e,!0),Object(xe.b)("#"+e+" .jw-video::cue",t,e,!0)}(e,t),function(e,t){Object(xe.b)("#"+e+" .jw-text-track-display",f,e),Object(xe.b)("#"+e+" .jw-text-track-cue",t,e)}(e,t)}(e,d),l.appendChild(c),s.appendChild(l),g.change("captionsTrack",(function(e,t){this.populate(t)}),this),g.set("captions",t)},this.element=function(){return s},this.destroy=function(){g.off(null,null,this),this.off()};var w=function(e){a=e,h.selectCues(o,a)};g.on("change:playlistItem",(function(){a=null,r=[]}),this),g.on(d.Q,(function(e){r=[],w(e)}),this),g.on(d.S,w,this),g.on("subtitlesTrackData",(function(){this.selectCues(o,a)}),this),g.on("change:captionsList",(function e(t,i){var o=this;1!==i.length&&(t.get("renderCaptionsNatively")||Ee||(n.e(8).then(function(e){Ee=n(93).default}.bind(null,n)).catch(Object(Ie.c)(301121)).catch((function(e){o.trigger(d.tb,e)})),t.off("change:captionsList",e,this)))}),this)};Object(i.h)(Ve.prototype,g.a);var Fe=Ve,ze=function(e,t){var n=t?" jw-hide":"";return'')},He={linktarget:"_blank",margin:8,hide:!1,position:"top-right"};function Ne(e){var t,n;Object(i.h)(this,g.a);var o=new Image;this.setup=function(){(n=Object(i.h)({},He,e.get("logo"))).position=n.position||He.position,n.hide="true"===n.hide.toString(),n.file&&"control-bar"!==n.position&&(t||(t=Object(Me.e)(ze(n.position,n.hide))),e.set("logo",n),o.onload=function(){var i=this.height,o=this.width,r={backgroundImage:'url("'+this.src+'")'};if(n.margin!==He.margin){var a=/(\w+)-(\w+)/.exec(n.position);3===a.length&&(r["margin-"+a[1]]=n.margin,r["margin-"+a[2]]=n.margin)}var s=.15*e.get("containerHeight"),l=.15*e.get("containerWidth");if(i>s||o>l){var c=o/i;l/s>c?(i=s,o=s*c):(o=l,i=l/c)}r.width=Math.round(o),r.height=Math.round(i),Object(xe.d)(t,r),e.set("logoWidth",r.width)},o.src=n.file,n.link&&(t.setAttribute("tabindex","0"),t.setAttribute("aria-label",e.get("localization").logo)),this.ui=new Te.a(t).on("click tap enter",(function(e){e&&e.stopPropagation&&e.stopPropagation(),this.trigger(d.A,{link:n.link,linktarget:n.linktarget})}),this))},this.setContainer=function(e){t&&e.appendChild(t)},this.element=function(){return t},this.position=function(){return n.position},this.destroy=function(){o.onload=null,this.ui&&this.ui.destroy()}}var Be=function(e){this.model=e,this.image=null};Object(i.h)(Be.prototype,{setup:function(e){this.el=e},setImage:function(e){var t=this.image;t&&(t.onload=null),this.image=null;var n="";"string"==typeof e&&(n='url("'+e+'")',(t=this.image=new Image).src=e),Object(xe.d)(this.el,{backgroundImage:n})},resize:function(e,t,n){if("uniform"===n){if(e&&(this.playerAspectRatio=e/t),!this.playerAspectRatio||!this.image||"complete"!==(s=this.model.get("state"))&&"idle"!==s&&"error"!==s&&"buffering"!==s)return;var i=this.image,o=null;if(i){if(0===i.width){var r=this;return void(i.onload=function(){r.resize(e,t,n)})}var a=i.width/i.height;Math.abs(this.playerAspectRatio-a)<.09&&(o="cover")}Object(xe.d)(this.el,{backgroundSize:o})}var s},element:function(){return this.el}});var qe=Be,De=function(e){this.model=e.player};Object(i.h)(De.prototype,{hide:function(){Object(xe.d)(this.el,{display:"none"})},show:function(){Object(xe.d)(this.el,{display:""})},setup:function(e){this.el=e;var t=this.el.getElementsByTagName("div");this.title=t[0],this.description=t[1],this.model.on("change:logoWidth",this.update,this),this.model.change("playlistItem",this.playlistItem,this)},update:function(e){var t={},n=e.get("logo");if(n){var i=1*(""+n.margin).replace("px",""),o=e.get("logoWidth")+(isNaN(i)?0:i+10);"top-left"===n.position?t.paddingLeft=o:"top-right"===n.position&&(t.paddingRight=o)}Object(xe.d)(this.el,t)},playlistItem:function(e,t){if(t)if(e.get("displaytitle")||e.get("displaydescription")){var n="",i="";t.title&&e.get("displaytitle")&&(n=t.title),t.description&&e.get("displaydescription")&&(i=t.description),this.updateText(n,i)}else this.hide()},updateText:function(e,t){Object(Me.q)(this.title,e),Object(Me.q)(this.description,t),this.title.firstChild||this.description.firstChild?this.show():this.hide()},element:function(){return this.el}});var We=De;function Ue(e,t){for(var n=0;ne)}if(t.get("controls")){var a=me(t);Object(Me.v)(u,"jw-flag-audio-player",a),t.set("audioMode",a)}}function V(){t.set("visibility",ve(t,u))}this.updateBounds=function(){Object(ke.a)(k);var e=t.get("isFloating")?f:u,n=document.body.contains(e),i=Object(Me.c)(e),a=Math.round(i.width),s=Math.round(i.height);if(P=Object(Me.c)(u),a===o&&s===r)return o&&r||R(),void t.set("inDom",n);a&&s||o&&r||R(),(a||s||n)&&(t.set("containerWidth",a),t.set("containerHeight",s)),t.set("inDom",n),n&&we.a.observe(u)},this.updateStyles=function(){var e=t.get("containerWidth"),n=t.get("containerHeight");L(e,n),A&&A.resize(e,n),Z(e,n),y.resize(),x&&B()},this.checkResized=function(){var e=t.get("containerWidth"),n=t.get("containerHeight"),i=t.get("isFloating");if(e!==o||n!==r){this.resizeListener||(this.resizeListener=new Xe.a(f,this,t)),o=e,r=n,l.trigger(d.hb,{width:e,height:n});var s=Object(Oe.a)(e);T!==s&&(T=s,l.trigger(d.j,{breakpoint:T}))}i!==a&&(a=i,l.trigger(d.x,{floating:i}),V())},this.responsiveListener=R,this.setup=function(){var i,o,r,a;m.setup(u.querySelector(".jw-preview")),w.setup(u.querySelector(".jw-title")),(n=new Ne(t)).setup(),n.setContainer(f),n.on(d.A,G),y.setup(u.id,t.get("captions")),w.element().parentNode.insertBefore(y.element(),w.element()),i=e,r=new Re(o=t,p),a=o.get("controls"),r.on({click:function(){l.trigger(d.p),A&&(ce()?A.settingsMenu.close():ue()?A.infoOverlay.close():i.playToggle({reason:"interaction"}))},tap:function(){u.removeEventListener("mousemove",U),u.removeEventListener("mouseout",Y),u.removeEventListener("mouseover",Q),l.trigger(d.p),ce()&&A.settingsMenu.close(),ue()&&A.infoOverlay.close();var e=o.get("state");if(a&&(e===d.mb||e===d.kb||o.get("instream")&&e===d.ob)&&i.playToggle({reason:"interaction"}),a&&e===d.ob){if(o.get("instream")||o.get("castActive")||"audio"===o.get("mediaType"))return;Object(Me.v)(u,"jw-flag-controls-hidden"),l.dismissible&&Object(Me.v)(u,"jw-floating-dismissible",Object(Me.i)(u,"jw-flag-controls-hidden")),y.renderCues(!0)}else A&&(A.showing?A.userInactive():A.userActive())},doubleClick:function(){return A&&i.setFullscreen()}}),u.addEventListener("mousemove",U),u.addEventListener("mouseover",Q),u.addEventListener("mouseout",Y),C=r,_=new Te.a(u).on("click",(function(){})),M=Pe(u,document,te),t.on("change:hideAdsControls",(function(e,t){Object(Me.v)(u,"jw-flag-ads-hide-controls",t)})),t.on("change:scrubbing",(function(e,t){Object(Me.v)(u,"jw-flag-dragging",t)})),t.on("change:playRejected",(function(e,t){Object(Me.v)(u,"jw-flag-play-rejected",t)})),t.on(d.X,ee),t.on("change:".concat(d.U),(function(){Z(),y.resize()})),t.player.on("change:errorEvent",re),t.change("stretching",X);var s=t.get("width"),c=t.get("height"),g=$(s,c);Object(xe.d)(u,g),t.change("aspectratio",J),L(s,c),t.get("controls")||(Object(Me.a)(u,"jw-flag-controls-hidden"),Object(Me.o)(u,"jw-floating-dismissible")),Ge&&Object(Me.a)(u,"jw-ie");var b=t.get("skin")||{};b.name&&Object(Me.p)(u,/jw-skin-\S+/,"jw-skin-"+b.name);var j=function(e){e||(e={});var t=e.active,n=e.inactive,i=e.background,o={};return o.controlbar=function(e){if(e||t||n||i){var o={};return e=e||{},o.iconsActive=e.iconsActive||t,o.icons=e.icons||n,o.text=e.text||n,o.background=e.background||i,o}}(e.controlbar),o.timeslider=function(e){if(e||t){var n={};return e=e||{},n.progress=e.progress||t,n.rail=e.rail,n}}(e.timeslider),o.menus=function(e){if(e||t||n||i){var o={};return e=e||{},o.text=e.text||n,o.textActive=e.textActive||t,o.background=e.background||i,o}}(e.menus),o.tooltips=function(e){if(e||n||i){var t={};return e=e||{},t.text=e.text||n,t.background=e.background||i,t}}(e.tooltips),o}(b);!function(e,t){var n;function i(t,n,i,o){if(i){t=Object(h.f)(t,"#"+e+(o?"":" "));var r={};r[n]=i,Object(xe.b)(t.join(", "),r,e)}}t&&(t.controlbar&&function(t){i([".jw-controlbar .jw-icon-inline.jw-text",".jw-title-primary",".jw-title-secondary"],"color",t.text),t.icons&&(i([".jw-button-color:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:not(.jw-icon-cast)"],"color",t.icons),i([".jw-display-icon-container .jw-button-color"],"color",t.icons),Object(xe.b)("#".concat(e," .jw-icon-cast google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.icons,"}"),e));t.iconsActive&&(i([".jw-display-icon-container .jw-button-color:hover",".jw-display-icon-container .jw-button-color:focus"],"color",t.iconsActive),i([".jw-button-color.jw-toggle:not(.jw-icon-cast)",".jw-button-color:hover:not(.jw-icon-cast)",".jw-button-color:focus:not(.jw-icon-cast)",".jw-button-color.jw-toggle.jw-off:hover:not(.jw-icon-cast)"],"color",t.iconsActive),i([".jw-svg-icon-buffer"],"fill",t.icons),Object(xe.b)("#".concat(e," .jw-icon-cast:hover google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(xe.b)("#".concat(e," .jw-icon-cast:focus google-cast-launcher.jw-off"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(xe.b)("#".concat(e," .jw-icon-cast google-cast-launcher.jw-off:focus"),"{--disconnected-color: ".concat(t.iconsActive,"}"),e),Object(xe.b)("#".concat(e," .jw-icon-cast google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(xe.b)("#".concat(e," .jw-icon-cast google-cast-launcher:focus"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(xe.b)("#".concat(e," .jw-icon-cast:hover google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e),Object(xe.b)("#".concat(e," .jw-icon-cast:focus google-cast-launcher"),"{--connected-color: ".concat(t.iconsActive,"}"),e));i([" .jw-settings-topbar",":not(.jw-state-idle) .jw-controlbar",".jw-flag-audio-player .jw-controlbar"],"background",t.background,!0)}(t.controlbar),t.timeslider&&function(e){var t=e.progress;"none"!==t&&(i([".jw-progress",".jw-knob"],"background-color",t),i([".jw-buffer"],"background-color",Object(xe.c)(t,50)));i([".jw-rail"],"background-color",e.rail),i([".jw-background-color.jw-slider-time",".jw-slider-time .jw-cue"],"background-color",e.background)}(t.timeslider),t.menus&&(i([".jw-option",".jw-toggle.jw-off",".jw-skip .jw-skip-icon",".jw-nextup-tooltip",".jw-nextup-close",".jw-settings-content-item",".jw-related-title"],"color",(n=t.menus).text),i([".jw-option.jw-active-option",".jw-option:not(.jw-active-option):hover",".jw-option:not(.jw-active-option):focus",".jw-settings-content-item:hover",".jw-nextup-tooltip:hover",".jw-nextup-tooltip:focus",".jw-nextup-close:hover"],"color",n.textActive),i([".jw-nextup",".jw-settings-menu"],"background",n.background)),t.tooltips&&function(e){i([".jw-skip",".jw-tooltip .jw-text",".jw-time-tip .jw-text"],"background-color",e.background),i([".jw-time-tip",".jw-tooltip"],"color",e.background),i([".jw-skip"],"border","none"),i([".jw-skip .jw-text",".jw-skip .jw-icon",".jw-time-tip .jw-text",".jw-tooltip .jw-text"],"color",e.text)}(t.tooltips),t.menus&&function(t){if(t.textActive){var n={color:t.textActive,borderColor:t.textActive,stroke:t.textActive};Object(xe.b)("#".concat(e," .jw-color-active"),n,e),Object(xe.b)("#".concat(e," .jw-color-active-hover:hover"),n,e)}if(t.text){var i={color:t.text,borderColor:t.text,stroke:t.text};Object(xe.b)("#".concat(e," .jw-color-inactive"),i,e),Object(xe.b)("#".concat(e," .jw-color-inactive-hover:hover"),i,e)}}(t.menus))}(t.get("id"),j),t.set("mediaContainer",p),t.set("iFrame",v.Features.iframe),t.set("activeTab",Object(je.a)()),t.set("touchMode",Je&&("string"==typeof c||c>=be)),we.a.add(this),t.get("enableGradient")&&!Ge&&Object(Me.a)(u,"jw-ab-drop-shadow"),this.isSetup=!0,t.trigger("viewSetup",u);var k=document.body.contains(u);k&&we.a.observe(u),t.set("inDom",k)},this.init=function(){this.updateBounds(),t.on("change:fullscreen",K),t.on("change:activeTab",V),t.on("change:fullscreen",V),t.on("change:intersectionRatio",V),t.on("change:visibility",W),t.on("instreamMode",(function(e){e?de():fe()})),V(),1!==we.a.size()||t.get("visibility")||W(t,1,0);var e=t.player;t.change("state",ae),e.change("controls",q),t.change("streamType",ie),t.change("mediaType",oe),e.change("playlistItem",(function(e,t){le(e,t)})),o=r=null,x&&v.OS.mobile&&we.a.addScrollHandler(B),this.checkResized()};var F,z=62,H=!0;function N(){var e=t.get("isFloating"),n=P.top0&&void 0!==arguments[0])||arguments[0],t={x:0,y:0,width:o||0,height:r||0};return A&&e&&(t.height-=A.controlbarHeight()),t},this.setCaptions=function(e){y.clear(),y.setup(t.get("id"),e),y.resize()},this.setIntersection=function(e){var n=Math.round(100*e.intersectionRatio)/100;t.set("intersectionRatio",n),x&&!E()&&(S=S||n>=.5)&&he(n)},this.stopFloating=function(e,n){if(e&&(x=null,we.a.removeScrollHandler(B)),Ke===u){Ke=null,t.set("isFloating",!1);var i=function(){Object(Me.o)(u,"jw-flag-floating"),J(t,t.get("aspectratio")),Object(xe.d)(u,{backgroundImage:null}),Object(xe.d)(f,{maxWidth:null,width:null,height:null,left:null,right:null,top:null,bottom:null,margin:null,transform:null,transition:null,"transition-timing-function":null})};n?(Object(xe.d)(f,{transform:"translateY(-".concat(z-P.top,"px)"),"transition-timing-function":"ease-out"}),setTimeout(i,150)):i(),b.disable(),R()}},this.destroy=function(){t.destroy(),we.a.unobserve(u),we.a.remove(this),this.isSetup=!1,this.off(),Object(ke.a)(k),clearTimeout(j),Ke===u&&(Ke=null),_&&(_.destroy(),_=null),M&&(M.destroy(),M=null),A&&A.disable(t),C&&(C.destroy(),u.removeEventListener("mousemove",U),u.removeEventListener("mouseout",Y),u.removeEventListener("mouseover",Q),C=null),y.destroy(),n&&(n.destroy(),n=null),Object(xe.a)(t.get("id")),this.resizeListener&&(this.resizeListener.destroy(),delete this.resizeListener),x&&v.OS.mobile&&we.a.removeScrollHandler(B)}};function Ze(e,t,n){return(Ze="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var i=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=rt(e)););return e}(e,t);if(i){var o=Object.getOwnPropertyDescriptor(i,t);return o.get?o.get.call(n):o.value}})(e,t,n||e)}function et(e){return(et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function tt(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function nt(e,t){for(var n=0;nt&&e(),t=i}};function Pt(e,t){t.off(d.N,e._onPlayAttempt),t.off(d.fb,e._triggerFirstFrame),t.off(d.S,e._onTime),e.off("change:activeTab",e._onTabVisible)}var Tt=function(e,t){e.change("mediaModel",(function(e,n,i){e._qoeItem&&i&&e._qoeItem.end(i.get("mediaState")),e._qoeItem=new Ct.a,e._qoeItem.getFirstFrame=function(){var e=this.between(d.N,d.H),t=this.between(_t,d.H);return t>0&&t0&&ae(t,e.tracks)}),C).on(d.F,(function(){Promise.resolve().then(re)}),C).on(d.G,C.triggerError,C),Tt(M,F),M.on(d.w,C.triggerError,C),M.on("change:state",(function(e,t,n){X()||J.call(x,e,t,n)}),this),M.on("change:castState",(function(e,t){C.trigger(d.m,t)})),M.on("change:fullscreen",(function(e,t){C.trigger(d.y,{fullscreen:t}),t&&e.set("playOnViewable",!1)})),M.on("change:volume",(function(e,t){C.trigger(d.V,{volume:t})})),M.on("change:mute",(function(e){C.trigger(d.M,{mute:e.getMute()})})),M.on("change:playbackRate",(function(e,t){C.trigger(d.ab,{playbackRate:t,position:e.get("position")})}));var z=function e(t,n){"clickthrough"!==n&&"interaction"!==n&&"external"!==n||(M.set("playOnViewable",!1),M.off("change:playReason change:pauseReason",e))};function H(e,t){Object(i.u)(t)||M.set("viewable",Math.round(t))}function N(){de&&(!0!==M.get("autostart")||M.get("playOnViewable")||Z("autostart"),de.flush())}function B(e,t){C.trigger("viewable",{viewable:t}),q()}function q(){if((o.a[0]===t||1===M.get("viewable"))&&"idle"===M.get("state")&&!1===M.get("autostart"))if(!w.primed()&&v.OS.android){var e=w.getTestElement(),n=C.getMute();Promise.resolve().then((function(){return wt(e,{muted:n})})).then((function(){"idle"===M.get("state")&&F.preloadVideo()})).catch(Rt)}else F.preloadVideo()}function D(e){C._instreamAdapter.noResume=!e,e||te({reason:"viewable"})}function W(e){e||(C.pause({reason:"viewable"}),M.set("playOnViewable",!e))}function U(e,t){var n=X();if(e.get("playOnViewable")){if(t){var i=e.get("autoPause").pauseAds,o=e.get("pauseReason");G()===d.mb?Z("viewable"):n&&!i||"interaction"===o||K({reason:"viewable"})}else v.OS.mobile&&!n&&(C.pause({reason:"autostart"}),M.set("playOnViewable",!0));v.OS.mobile&&n&&D(t)}}function Q(e,t){var n=e.get("state"),i=X(),o=e.get("playReason");i?e.get("autoPause").pauseAds?W(t):D(t):n===d.pb||n===d.jb?W(t):n===d.mb&&"playlist"===o&&e.once("change:state",(function(){W(t)}))}function X(){var e=C._instreamAdapter;return!!e&&e.getState()}function G(){var e=X();return e||M.get("state")}function K(e){if(T.cancel(),S=!1,M.get("state")===d.lb)return Promise.resolve();var n=$(e);return M.set("playReason",n),X()?(t.pauseAd(!1,e),Promise.resolve()):(M.get("state")===d.kb&&(ee(!0),C.setItemIndex(0)),!_&&(_=!0,C.trigger(d.C,{playReason:n,startTime:e&&e.startTime?e.startTime:M.get("playlistItem").starttime}),_=!1,xt()&&!w.primed()&&w.prime(),"playlist"===n&&M.get("autoPause").viewability&&Q(M,M.get("viewable")),O)?(xt()&&!L&&M.get("mediaElement").load(),O=!1,k=null,Promise.resolve()):F.playVideo(n).then(w.played))}function $(e){return e&&e.reason?e.reason:"unknown"}function Z(e){if(G()===d.mb){T=b(N);var t=M.get("advertising");(function(e,t){var n=t.cancelable,i=t.muted,o=void 0!==i&&i,r=t.allowMuted,a=void 0!==r&&r,s=t.timeout,l=void 0===s?1e4:s,c=e.getTestElement(),u=o?"muted":"".concat(a);kt[u]||(kt[u]=wt(c,{muted:o}).catch((function(e){if(!n.cancelled()&&!1===o&&a)return wt(c,{muted:o=!0});throw e})).then((function(){return o?(kt[u]=null,yt):vt})).catch((function(e){throw clearTimeout(d),kt[u]=null,e.reason=jt,e})));var d,f=kt[u].then((function(e){if(clearTimeout(d),n.cancelled()){var t=new Error("Autoplay test was cancelled");throw t.reason="cancelled",t}return e})),h=new Promise((function(e,t){d=setTimeout((function(){kt[u]=null;var e=new Error("Autoplay test timed out");e.reason="timeout",t(e)}),l)}));return Promise.race([f,h])})(w,{cancelable:T,muted:C.getMute(),allowMuted:!t||t.autoplayadsmuted}).then((function(t){return M.set("canAutoplay",t),t!==yt||C.getMute()||(M.set("autostartMuted",!0),ue(),M.once("change:autostartMuted",(function(e){e.off("change:viewable",U),C.trigger(d.M,{mute:M.getMute()})}))),C.getMute()&&M.get("enableDefaultCaptions")&&j.selectDefaultIndex(1),K({reason:e}).catch((function(){C._instreamAdapter||M.set("autostartFailed",!0),k=null}))})).catch((function(e){if(M.set("canAutoplay",jt),M.set("autostart",!1),!T.cancelled()){var t=Object(m.w)(e);C.trigger(d.h,{reason:e.reason,code:t,error:e})}}))}}function ee(e){if(T.cancel(),de.empty(),X()){var t=C._instreamAdapter;return t&&(t.noResume=!0),void(k=function(){return F.stopVideo()})}k=null,!e&&(S=!0),_&&(O=!0),M.set("errorEvent",void 0),F.stopVideo()}function te(e){var t=$(e);M.set("pauseReason",t),M.set("playOnViewable","viewable"===t)}function ne(e){k=null,T.cancel();var n=X();if(n&&n!==d.ob)return te(e),void t.pauseAd(!0,e);switch(M.get("state")){case d.lb:return;case d.pb:case d.jb:te(e),F.pause();break;default:_&&(O=!0)}}function ie(e,t){ee(!0),C.setItemIndex(e),C.play(t)}function oe(e){ie(M.get("item")+1,e)}function re(){C.completeCancelled()||(k=C.completeHandler,C.shouldAutoAdvance()?C.nextItem():M.get("repeat")?oe({reason:"repeat"}):(v.OS.iOS&&le(!1),M.set("playOnViewable",!1),M.set("state",d.kb),C.trigger(d.cb,{})))}function ae(e,t){e=parseInt(e,10)||0,M.persistVideoSubtitleTrack(e,t),F.subtitles=e,C.trigger(d.k,{tracks:se(),track:e})}function se(){return j.getCaptionsList()}function le(e){Object(i.o)(e)||(e=!M.get("fullscreen")),M.set("fullscreen",e),C._instreamAdapter&&C._instreamAdapter._adModel&&C._instreamAdapter._adModel.set("fullscreen",e)}function ue(){F.mute=M.getMute(),F.volume=M.get("volume")}M.on("change:playReason change:pauseReason",z),C.on(d.c,(function(e){return z(0,e.playReason)})),C.on(d.b,(function(e){return z(0,e.pauseReason)})),M.on("change:scrubbing",(function(e,t){t?(P=M.get("state")!==d.ob,ne()):P&&K({reason:"interaction"})})),M.on("change:captionsList",(function(e,t){C.trigger(d.l,{tracks:t,track:M.get("captionsIndex")||0})})),M.on("change:mediaModel",(function(e,t){var n=this;e.set("errorEvent",void 0),t.change("mediaState",(function(t,n){var i;e.get("errorEvent")||e.set(d.bb,(i=n)===d.nb||i===d.qb?d.jb:i)}),this),t.change("duration",(function(t,n){if(0!==n){var i=e.get("minDvrWindow"),o=Object(Ot.b)(n,i);e.setStreamType(o)}}),this);var i=e.get("item")+1,o="autoplay"===(e.get("related")||{}).oncomplete,r=e.get("playlist")[i];if((r||o)&&L){t.on("change:position",(function e(i,a){var s=r&&!r.daiSetting,l=t.get("duration");s&&a&&l>0&&a>=l-f.b?(t.off("change:position",e,n),F.backgroundLoad(r)):o&&(r=M.get("nextUp"))}),this)}})),(j=new he(M)).on("all",I,C),V.on("viewSetup",(function(e){Object(r.b)(x,e)})),this.playerReady=function(){y.once(d.hb,(function(){try{!function(){M.change("visibility",H),E.off(),C.trigger(d.gb,{setupTime:0}),M.change("playlist",(function(e,t){if(t.length){var n={playlist:t},o=M.get("feedData");o&&(n.feedData=Object(i.h)({},o)),C.trigger(d.eb,n)}})),M.change("playlistItem",(function(e,t){if(t){var n=t.title,i=t.image;if("mediaSession"in navigator&&window.MediaMetadata&&(n||i))try{navigator.mediaSession.metadata=new window.MediaMetadata({title:n,artist:window.location.hostname,artwork:[{src:i||""}]})}catch(e){}e.set("cues",[]),C.trigger(d.db,{index:M.get("item"),item:t})}})),E.flush(),E.destroy(),E=null,M.change("viewable",B),M.change("viewable",U),M.get("autoPause").viewability?M.change("viewable",Q):M.once("change:autostartFailed change:mute",(function(e){e.off("change:viewable",U)}));N(),M.on("change:itemReady",(function(e,t){t&&de.flush()}))}()}catch(e){C.triggerError(Object(m.v)(m.m,m.a,e))}})),y.init()},this.preload=q,this.load=function(e,t){var n,i=C._instreamAdapter;switch(i&&(i.noResume=!0),C.trigger("destroyPlugin",{}),ee(!0),T.cancel(),T=b(N),A.cancel(),xt()&&w.prime(),At(e)){case"string":M.attributes.item=0,M.attributes.itemReady=!1,A=b((function(e){if(e)return C.updatePlaylist(Object(c.a)(e.playlist),e)})),n=function(e){var t=this;return new Promise((function(n,i){var o=new l.a;o.on(d.eb,(function(e){n(e)})),o.on(d.w,i,t),o.load(e)}))}(e).then(A.async);break;case"object":M.attributes.item=0,n=C.updatePlaylist(Object(c.a)(e),t||{});break;case"number":n=C.setItemIndex(e);break;default:return}n.catch((function(e){C.triggerError(Object(m.u)(e,m.c))})),n.then(T.async).catch(Rt)},this.play=function(e){return K(e).catch(Rt)},this.pause=ne,this.seek=function(e,t){var n=M.get("state");if(n!==d.lb){F.position=e;var i=n===d.mb;M.get("scrubbing")||!i&&n!==d.kb||(i&&((t=t||{}).startTime=e),this.play(t))}},this.stop=ee,this.playlistItem=ie,this.playlistNext=oe,this.playlistPrev=function(e){ie(M.get("item")-1,e)},this.setCurrentCaptions=ae,this.setCurrentQuality=function(e){F.quality=e},this.setFullscreen=le,this.getCurrentQuality=function(){return F.quality},this.getQualityLevels=function(){return F.qualities},this.setCurrentAudioTrack=function(e){F.audioTrack=e},this.getCurrentAudioTrack=function(){return F.audioTrack},this.getAudioTracks=function(){return F.audioTracks},this.getCurrentCaptions=function(){return j.getCurrentIndex()},this.getCaptionsList=se,this.getVisualQuality=function(){var e=this._model.get("mediaModel");return e?e.get(d.U):null},this.getConfig=function(){return this._model?this._model.getConfiguration():void 0},this.getState=G,this.next=Rt,this.completeHandler=re,this.completeCancelled=function(){return(e=M.get("state"))!==d.mb&&e!==d.kb&&e!==d.lb||!!S&&(S=!1,!0);var e},this.shouldAutoAdvance=function(){return M.get("item")!==M.get("playlist").length-1},this.nextItem=function(){oe({reason:"playlist"})},this.setConfig=function(e){!function(e,t){var n=e._model,i=n.attributes;t.height&&(t.height=Object(a.b)(t.height),t.width=t.width||i.width),t.width&&(t.width=Object(a.b)(t.width),t.aspectratio?(i.width=t.width,delete t.width):t.height=i.height),t.width&&t.height&&!t.aspectratio&&e._view.resize(t.width,t.height),Object.keys(t).forEach((function(o){var r=t[o];if(void 0!==r)switch(o){case"aspectratio":n.set(o,Object(a.a)(r,i.width));break;case"autostart":!function(e,t,n){e.setAutoStart(n),"idle"===e.get("state")&&!0===n&&t.play({reason:"autostart"})}(n,e,r);break;case"mute":e.setMute(r);break;case"volume":e.setVolume(r);break;case"playbackRateControls":case"playbackRates":case"repeat":case"stretching":n.set(o,r)}}))}(C,e)},this.setItemIndex=function(e){F.stopVideo();var t=M.get("playlist").length;return(e=(parseInt(e,10)||0)%t)<0&&(e+=t),F.setActiveItem(e).catch((function(e){e.code>=151&&e.code<=162&&(e=Object(m.u)(e,m.e)),x.triggerError(Object(m.v)(m.k,m.d,e))}))},this.detachMedia=function(){if(_&&(O=!0),M.get("autoPause").viewability&&Q(M,M.get("viewable")),!L)return F.setAttached(!1);F.backgroundActiveMedia()},this.attachMedia=function(){L?F.restoreBackgroundMedia():F.setAttached(!0),"function"==typeof k&&k()},this.routeEvents=function(e){return F.routeEvents(e)},this.forwardEvents=function(){return F.forwardEvents()},this.playVideo=function(e){return F.playVideo(e)},this.stopVideo=function(){return F.stopVideo()},this.castVideo=function(e,t){return F.castVideo(e,t)},this.stopCast=function(){return F.stopCast()},this.backgroundActiveMedia=function(){return F.backgroundActiveMedia()},this.restoreBackgroundMedia=function(){return F.restoreBackgroundMedia()},this.preloadNextItem=function(){F.background.currentMedia&&F.preloadVideo()},this.isBeforeComplete=function(){return F.beforeComplete},this.setVolume=function(e){M.setVolume(e),ue()},this.setMute=function(e){M.setMute(e),ue()},this.setPlaybackRate=function(e){M.setPlaybackRate(e)},this.getProvider=function(){return M.get("provider")},this.getWidth=function(){return M.get("containerWidth")},this.getHeight=function(){return M.get("containerHeight")},this.getItemQoe=function(){return M._qoeItem},this.addButton=function(e,t,n,i,o){var r=M.get("customButtons")||[],a=!1,s={img:e,tooltip:t,callback:n,id:i,btnClass:o};r=r.reduce((function(e,t){return t.id===i?(a=!0,e.push(s)):e.push(t),e}),[]),a||r.unshift(s),M.set("customButtons",r)},this.removeButton=function(e){var t=M.get("customButtons")||[];t=t.filter((function(t){return t.id!==e})),M.set("customButtons",t)},this.resize=y.resize,this.getSafeRegion=y.getSafeRegion,this.setCaptions=y.setCaptions,this.checkBeforePlay=function(){return _},this.setControls=function(e){Object(i.o)(e)||(e=!M.get("controls")),M.set("controls",e),F.controls=e},this.addCues=function(e){this.setCues(M.get("cues").concat(e))},this.setCues=function(e){M.set("cues",e)},this.updatePlaylist=function(e,t){try{var n=Object(c.b)(e,M,t);Object(c.e)(n);var o=Object(i.h)({},t);delete o.playlist,M.set("feedData",o),M.set("playlist",n)}catch(e){return Promise.reject(e)}return this.setItemIndex(M.get("item"))},this.setPlaylistItem=function(e,t){(t=Object(c.d)(M,new u.a(t),t.feedData||{}))&&(M.get("playlist")[e]=t,e===M.get("item")&&"idle"===M.get("state")&&this.setItemIndex(e))},this.playerDestroy=function(){this.off(),this.stop(),Object(r.b)(this,this.originalContainer),y&&y.destroy(),M&&M.destroy(),de&&de.destroy(),j&&j.destroy(),F&&F.destroy(),this.instreamDestroy()},this.isBeforePlay=this.checkBeforePlay,this.createInstream=function(){return this.instreamDestroy(),this._instreamAdapter=new ce(this,M,y,w),this._instreamAdapter},this.instreamDestroy=function(){C._instreamAdapter&&(C._instreamAdapter.destroy(),C._instreamAdapter=null)};var de=new s.a(this,["play","pause","setCurrentAudioTrack","setCurrentCaptions","setCurrentQuality","setFullscreen"],(function(){return!x._model.get("itemReady")||E}));de.queue.push.apply(de.queue,p),y.setup()},get:function(e){if(e in j.a){var t=this._model.get("mediaModel");return t?t.get(e):j.a[e]}return this._model.get(e)},getContainer:function(){return this.currentContainer||this.originalContainer},getMute:function(){return this._model.getMute()},triggerError:function(e){var t=this._model;e.message=t.get("localization").errors[e.key],delete e.key,t.set("errorEvent",e),t.set("state",d.lb),t.once("change:state",(function(){this.set("errorEvent",void 0)}),t),this.trigger(d.w,e)}});t.default=Et},57:function(e,t,n){"use strict";n.d(t,"a",(function(){return o}));var i=n(2);function o(e){var t=[],n=(e=Object(i.i)(e)).split("\r\n\r\n");1===n.length&&(n=e.split("\n\n"));for(var o=0;o0&&(o=0),n.length>o+1&&n[o+1]){var r=n[o],a=r.indexOf(" --\x3e ");a>0&&(t.begin=Object(i.g)(r.substr(0,a)),t.end=Object(i.g)(r.substr(a+5)),t.text=n.slice(o+1).join("\r\n"))}return t}},58:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return r}));var i=n(5);function o(e){var t=-1;return e>=1280?t=7:e>=960?t=6:e>=800?t=5:e>=640?t=4:e>=540?t=3:e>=420?t=2:e>=320?t=1:e>=250&&(t=0),t}function r(e,t){var n="jw-breakpoint-"+t;Object(i.p)(e,/jw-breakpoint--?\d+/,n)}},59:function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=function(e,t){var n=e[1]||"",i=e[3];if(!i)return n;if(t&&"function"==typeof btoa){var o=(a=i,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(a))))+" */"),r=i.sources.map((function(e){return"/*# sourceURL="+i.sourceRoot+e+" */"}));return[n].concat(r).concat([o]).join("\n")}var a;return[n].join("\n")}(t,e);return t[2]?"@media "+t[2]+"{"+n+"}":n})).join("")},t.i=function(e,n){"string"==typeof e&&(e=[[null,e,""]]);for(var i={},o=0;o1&&(n+=" ["+t+"]")),{label:n,unknownCount:t}}n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return o}))},61:function(e,t,n){"use strict";function i(e){return new Promise((function(t,n){if(e.paused)return n(o("NotAllowedError",0,"play() failed."));var i=function(){e.removeEventListener("play",r),e.removeEventListener("playing",a),e.removeEventListener("pause",a),e.removeEventListener("abort",a),e.removeEventListener("error",a)},r=function(){e.addEventListener("playing",a),e.addEventListener("abort",a),e.addEventListener("error",a),e.addEventListener("pause",a)},a=function(e){if(i(),"playing"===e.type)t();else{var r='The play() request was interrupted by a "'.concat(e.type,'" event.');"error"===e.type?n(o("NotSupportedError",9,r)):n(o("AbortError",20,r))}};e.addEventListener("play",r)}))}function o(e,t,n){var i=new Error(n);return i.name=e,i.code=t,i}n.d(t,"a",(function(){return i}))},62:function(e,t,n){"use strict";function i(e,t){return e!==1/0&&Math.abs(e)>=Math.max(r(t),0)}function o(e,t){var n="VOD";return e===1/0?n="LIVE":e<0&&(n=i(e,r(t))?"DVR":"LIVE"),n}function r(e){return void 0===e?120:Math.max(e,0)}n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return o}))},63:function(e,t,n){"use strict";var i=n(64),o=n(16),r=n(22),a=n(4),s=n(57),l=n(2),c=n(1);function u(e){throw new c.n(null,e)}function d(e,t,i){e.xhr=Object(r.a)(e.file,(function(r){!function(e,t,i,r){var d,f,g=e.responseXML?e.responseXML.firstChild:null;if(g)for("xml"===Object(a.b)(g)&&(g=g.nextSibling);g.nodeType===g.COMMENT_NODE;)g=g.nextSibling;try{if(g&&"tt"===Object(a.b)(g))d=function(e){e||u(306007);var t=[],n=e.getElementsByTagName("p"),i=30,o=e.getElementsByTagName("tt");if(o&&o[0]){var r=parseFloat(o[0].getAttribute("ttp:frameRate"));isNaN(r)||(i=r)}n||u(306005),n.length||(n=e.getElementsByTagName("tt:p")).length||(n=e.getElementsByTagName("tts:p"));for(var a=0;a\s+<").replace(/(<\/?)tts?:/g,"$1").replace(//g,"\r\n");if(g){var p=s.getAttribute("begin"),b=s.getAttribute("dur"),m=s.getAttribute("end"),w={begin:Object(l.g)(p,i),text:g};m?w.end=Object(l.g)(m,i):b&&(w.end=w.begin+Object(l.g)(b,i)),t.push(w)}}return t.length||u(306005),t}(e.responseXML),f=h(d),delete t.xhr,i(f);else{var p=e.responseText;p.indexOf("WEBVTT")>=0?n.e(10).then(function(e){return n(92).default}.bind(null,n)).catch(Object(o.c)(301131)).then((function(e){var n=new e(window);f=[],n.oncue=function(e){f.push(e)},n.onflush=function(){delete t.xhr,i(f)},n.parse(p)})).catch((function(e){delete t.xhr,r(Object(c.v)(null,c.b,e))})):(d=Object(s.a)(p),f=h(d),delete t.xhr,i(f))}}catch(e){delete t.xhr,r(Object(c.v)(null,c.b,e))}}(r,e,t,i)}),(function(e,t,n,o){i(Object(c.u)(o,c.b))}))}function f(e){e&&e.forEach((function(e){var t=e.xhr;t&&(t.onload=null,t.onreadystatechange=null,t.onerror=null,"abort"in t&&t.abort()),delete e.xhr}))}function h(e){return e.map((function(e){return new i.a(e.begin,e.end,e.text)}))}n.d(t,"c",(function(){return d})),n.d(t,"a",(function(){return f})),n.d(t,"b",(function(){return h}))},64:function(e,t,n){"use strict";var i=window.VTTCue;function o(e){if("string"!=typeof e)return!1;return!!{start:!0,middle:!0,end:!0,left:!0,right:!0}[e.toLowerCase()]&&e.toLowerCase()}if(!i){(i=function(e,t,n){var i=this;i.hasBeenReset=!1;var r="",a=!1,s=e,l=t,c=n,u=null,d="",f=!0,h="auto",g="start",p="auto",b=100,m="middle";Object.defineProperty(i,"id",{enumerable:!0,get:function(){return r},set:function(e){r=""+e}}),Object.defineProperty(i,"pauseOnExit",{enumerable:!0,get:function(){return a},set:function(e){a=!!e}}),Object.defineProperty(i,"startTime",{enumerable:!0,get:function(){return s},set:function(e){if("number"!=typeof e)throw new TypeError("Start time must be set to a number.");s=e,this.hasBeenReset=!0}}),Object.defineProperty(i,"endTime",{enumerable:!0,get:function(){return l},set:function(e){if("number"!=typeof e)throw new TypeError("End time must be set to a number.");l=e,this.hasBeenReset=!0}}),Object.defineProperty(i,"text",{enumerable:!0,get:function(){return c},set:function(e){c=""+e,this.hasBeenReset=!0}}),Object.defineProperty(i,"region",{enumerable:!0,get:function(){return u},set:function(e){u=e,this.hasBeenReset=!0}}),Object.defineProperty(i,"vertical",{enumerable:!0,get:function(){return d},set:function(e){var t=function(e){return"string"==typeof e&&(!!{"":!0,lr:!0,rl:!0}[e.toLowerCase()]&&e.toLowerCase())}(e);if(!1===t)throw new SyntaxError("An invalid or illegal string was specified.");d=t,this.hasBeenReset=!0}}),Object.defineProperty(i,"snapToLines",{enumerable:!0,get:function(){return f},set:function(e){f=!!e,this.hasBeenReset=!0}}),Object.defineProperty(i,"line",{enumerable:!0,get:function(){return h},set:function(e){if("number"!=typeof e&&"auto"!==e)throw new SyntaxError("An invalid number or illegal string was specified.");h=e,this.hasBeenReset=!0}}),Object.defineProperty(i,"lineAlign",{enumerable:!0,get:function(){return g},set:function(e){var t=o(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");g=t,this.hasBeenReset=!0}}),Object.defineProperty(i,"position",{enumerable:!0,get:function(){return p},set:function(e){if(e<0||e>100)throw new Error("Position must be between 0 and 100.");p=e,this.hasBeenReset=!0}}),Object.defineProperty(i,"size",{enumerable:!0,get:function(){return b},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");b=e,this.hasBeenReset=!0}}),Object.defineProperty(i,"align",{enumerable:!0,get:function(){return m},set:function(e){var t=o(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");m=t,this.hasBeenReset=!0}}),i.displayState=void 0}).prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)}}t.a=i},65:function(e,t,n){var i=n(66);"string"==typeof i&&(i=[["all-players",i,""]]),n(35).style(i,"all-players"),i.locals&&(e.exports=i.locals)},66:function(e,t,n){(e.exports=n(59)(!1)).push([e.i,'.jw-reset{text-align:left;direction:ltr}.jw-reset-text,.jw-reset{color:inherit;background-color:transparent;padding:0;margin:0;float:none;font-family:Arial,Helvetica,sans-serif;font-size:1em;line-height:1em;list-style:none;text-transform:none;vertical-align:baseline;border:0;font-variant:inherit;font-stretch:inherit;-webkit-tap-highlight-color:rgba(255,255,255,0)}body .jw-error,body .jwplayer.jw-state-error{height:100%;width:100%}.jw-title{position:absolute;top:0}.jw-background-color{background:rgba(0,0,0,0.4)}.jw-text{color:rgba(255,255,255,0.8)}.jw-knob{color:rgba(255,255,255,0.8);background-color:#fff}.jw-button-color{color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):focus,:not(.jw-flag-touch) .jw-button-color:not(.jw-logo-button):hover{color:#fff}.jw-toggle{color:#fff}.jw-toggle.jw-off{color:rgba(255,255,255,0.8)}.jw-toggle.jw-off:focus{color:#fff}.jw-toggle:focus{outline:none}:not(.jw-flag-touch) .jw-toggle.jw-off:hover{color:#fff}.jw-rail{background:rgba(255,255,255,0.3)}.jw-buffer{background:rgba(255,255,255,0.3)}.jw-progress{background:#f2f2f2}.jw-time-tip,.jw-volume-tip{border:0}.jw-slider-volume.jw-volume-tip.jw-background-color.jw-slider-vertical{background:none}.jw-skip{padding:.5em;outline:none}.jw-skip .jw-skiptext,.jw-skip .jw-skip-icon{color:rgba(255,255,255,0.8)}.jw-skip.jw-skippable:hover .jw-skip-icon,.jw-skip.jw-skippable:focus .jw-skip-icon{color:#fff}.jw-icon-cast google-cast-launcher{--connected-color:#fff;--disconnected-color:rgba(255,255,255,0.8)}.jw-icon-cast google-cast-launcher:focus{outline:none}.jw-icon-cast google-cast-launcher.jw-off{--connected-color:rgba(255,255,255,0.8)}.jw-icon-cast:focus google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-icon-cast:hover google-cast-launcher{--connected-color:#fff;--disconnected-color:#fff}.jw-nextup-container{bottom:2.5em;padding:5px .5em}.jw-nextup{border-radius:0}.jw-color-active{color:#fff;stroke:#fff;border-color:#fff}:not(.jw-flag-touch) .jw-color-active-hover:hover,:not(.jw-flag-touch) .jw-color-active-hover:focus{color:#fff;stroke:#fff;border-color:#fff}.jw-color-inactive{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}:not(.jw-flag-touch) .jw-color-inactive-hover:hover{color:rgba(255,255,255,0.8);stroke:rgba(255,255,255,0.8);border-color:rgba(255,255,255,0.8)}.jw-option{color:rgba(255,255,255,0.8)}.jw-option.jw-active-option{color:#fff;background-color:rgba(255,255,255,0.1)}:not(.jw-flag-touch) .jw-option:hover{color:#fff}.jwplayer{width:100%;font-size:16px;position:relative;display:block;min-height:0;overflow:hidden;box-sizing:border-box;font-family:Arial,Helvetica,sans-serif;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.jwplayer *{box-sizing:inherit}.jwplayer.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jwplayer.jw-flag-aspect-mode{height:auto !important}.jwplayer.jw-flag-aspect-mode .jw-aspect{display:block}.jwplayer .jw-aspect{display:none}.jwplayer .jw-swf{outline:none}.jw-media,.jw-preview{position:absolute;width:100%;height:100%;top:0;left:0;bottom:0;right:0}.jw-media{overflow:hidden;cursor:pointer}.jw-plugin{position:absolute;bottom:66px}.jw-breakpoint-7 .jw-plugin{bottom:132px}.jw-plugin .jw-banner{max-width:100%;opacity:0;cursor:pointer;position:absolute;margin:auto auto 0;left:0;right:0;bottom:0;display:block}.jw-preview,.jw-captions,.jw-title{pointer-events:none}.jw-media,.jw-logo{pointer-events:all}.jw-wrapper{background-color:#000;position:absolute;top:0;left:0;right:0;bottom:0}.jw-hidden-accessibility{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.jw-contract-trigger::before{content:"";overflow:hidden;width:200%;height:200%;display:block;position:absolute;top:0;left:0}.jwplayer .jw-media video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:auto;background:transparent}.jwplayer .jw-media video::-webkit-media-controls-start-playback-button{display:none}.jwplayer.jw-stretch-uniform .jw-media video{object-fit:contain}.jwplayer.jw-stretch-none .jw-media video{object-fit:none}.jwplayer.jw-stretch-fill .jw-media video{object-fit:cover}.jwplayer.jw-stretch-exactfit .jw-media video{object-fit:fill}.jw-preview{position:absolute;display:none;opacity:1;visibility:visible;width:100%;height:100%;background:#000 no-repeat 50% 50%}.jwplayer .jw-preview,.jw-error .jw-preview{background-size:contain}.jw-stretch-none .jw-preview{background-size:auto auto}.jw-stretch-fill .jw-preview{background-size:cover}.jw-stretch-exactfit .jw-preview{background-size:100% 100%}.jw-title{display:none;padding-top:20px;width:100%;z-index:1}.jw-title-primary,.jw-title-secondary{color:#fff;padding-left:20px;padding-right:20px;padding-bottom:.5em;overflow:hidden;text-overflow:ellipsis;direction:unset;white-space:nowrap;width:100%}.jw-title-primary{font-size:1.625em}.jw-breakpoint-2 .jw-title-primary,.jw-breakpoint-3 .jw-title-primary{font-size:1.5em}.jw-flag-small-player .jw-title-primary{font-size:1.25em}.jw-flag-small-player .jw-title-secondary,.jw-title-secondary:empty{display:none}.jw-captions{position:absolute;width:100%;height:100%;text-align:center;display:none;letter-spacing:normal;word-spacing:normal;text-transform:none;text-indent:0;text-decoration:none;pointer-events:none;overflow:hidden;top:0}.jw-captions.jw-captions-enabled{display:block}.jw-captions-window{display:none;padding:.25em;border-radius:.25em}.jw-captions-window.jw-captions-window-active{display:inline-block}.jw-captions-text{display:inline-block;color:#fff;background-color:#000;word-wrap:normal;word-break:normal;white-space:pre-line;font-style:normal;font-weight:normal;text-align:center;text-decoration:none}.jw-text-track-display{font-size:inherit;line-height:1.5}.jw-text-track-cue{background-color:rgba(0,0,0,0.5);color:#fff;padding:.1em .3em}.jwplayer video::-webkit-media-controls{display:none;justify-content:flex-start}.jwplayer video::-webkit-media-text-track-display{min-width:-webkit-min-content}.jwplayer video::cue{background-color:rgba(0,0,0,0.5)}.jwplayer video::-webkit-media-controls-panel-container{display:none}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing) .jw-captions,.jwplayer.jw-flag-media-audio.jw-state-playing .jw-captions,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden) .jw-captions{max-height:calc(100% - 60px)}.jwplayer:not(.jw-flag-controls-hidden):not(.jw-state-playing):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-flag-media-audio.jw-state-playing:not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container,.jwplayer.jw-state-playing:not(.jw-flag-user-inactive):not(.jw-flag-controls-hidden):not(.jw-flag-ios-fullscreen) video::-webkit-media-text-track-container{max-height:calc(100% - 60px)}.jw-logo{position:absolute;margin:20px;cursor:pointer;pointer-events:all;background-repeat:no-repeat;background-size:contain;top:auto;right:auto;left:auto;bottom:auto;outline:none}.jw-logo.jw-tab-focus:focus{outline:solid 2px #4d90fe}.jw-flag-audio-player .jw-logo{display:none}.jw-logo-top-right{top:0;right:0}.jw-logo-top-left{top:0;left:0}.jw-logo-bottom-left{left:0}.jw-logo-bottom-right{right:0}.jw-logo-bottom-left,.jw-logo-bottom-right{bottom:44px;transition:bottom 150ms cubic-bezier(0, .25, .25, 1)}.jw-state-idle .jw-logo{z-index:1}.jw-state-setup .jw-wrapper{background-color:inherit}.jw-state-setup .jw-logo,.jw-state-setup .jw-controls,.jw-state-setup .jw-controls-backdrop{visibility:hidden}span.jw-break{display:block}body .jw-error,body .jwplayer.jw-state-error{background-color:#333;color:#fff;font-size:16px;display:table;opacity:1;position:relative}body .jw-error .jw-display,body .jwplayer.jw-state-error .jw-display{display:none}body .jw-error .jw-media,body .jwplayer.jw-state-error .jw-media{cursor:default}body .jw-error .jw-preview,body .jwplayer.jw-state-error .jw-preview{background-color:#333}body .jw-error .jw-error-msg,body .jwplayer.jw-state-error .jw-error-msg{background-color:#000;border-radius:2px;display:flex;flex-direction:row;align-items:stretch;padding:20px}body .jw-error .jw-error-msg .jw-icon,body .jwplayer.jw-state-error .jw-error-msg .jw-icon{height:30px;width:30px;margin-right:20px;flex:0 0 auto;align-self:center}body .jw-error .jw-error-msg .jw-icon:empty,body .jwplayer.jw-state-error .jw-error-msg .jw-icon:empty{display:none}body .jw-error .jw-error-msg .jw-info-container,body .jwplayer.jw-state-error .jw-error-msg .jw-info-container{margin:0;padding:0}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg{flex-direction:column}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-error-text,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-error-text{text-align:center}body .jw-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-flag-small-player .jw-error-msg .jw-icon,body .jw-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon,body .jwplayer.jw-state-error:not(.jw-flag-audio-player).jw-breakpoint-2 .jw-error-msg .jw-icon{flex:.5 0 auto;margin-right:0;margin-bottom:20px}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break{display:inline}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-flag-small-player .jw-error-msg .jw-break:before,.jwplayer.jw-state-error.jw-breakpoint-2 .jw-error-msg .jw-break:before{content:" "}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg{height:100%;width:100%;top:0;position:absolute;left:0;background:#000;-webkit-transform:none;transform:none;padding:4px 16px;z-index:1}.jwplayer.jw-state-error.jw-flag-audio-player .jw-error-msg.jw-info-overlay{max-width:none;max-height:none}body .jwplayer.jw-state-error .jw-title,.jw-state-idle .jw-title,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-title{display:block}body .jwplayer.jw-state-error .jw-preview,.jw-state-idle .jw-preview,.jwplayer.jw-state-complete:not(.jw-flag-casting):not(.jw-flag-audio-player):not(.jw-flag-overlay-open-related) .jw-preview{display:block}.jw-state-idle .jw-captions,.jwplayer.jw-state-complete .jw-captions,body .jwplayer.jw-state-error .jw-captions{display:none}.jw-state-idle video::-webkit-media-text-track-container,.jwplayer.jw-state-complete video::-webkit-media-text-track-container,body .jwplayer.jw-state-error video::-webkit-media-text-track-container{display:none}.jwplayer.jw-flag-fullscreen{width:100% !important;height:100% !important;top:0;right:0;bottom:0;left:0;z-index:1000;margin:0;position:fixed}body .jwplayer.jw-flag-flash-blocked .jw-title{display:block}.jwplayer.jw-flag-controls-hidden .jw-media{cursor:default}.jw-flag-audio-player:not(.jw-flag-flash-blocked) .jw-media{visibility:hidden}.jw-flag-audio-player .jw-title{background:none}.jw-flag-audio-player object{min-height:45px}.jw-flag-floating{background-size:cover;background-color:#000}.jw-flag-floating .jw-wrapper{position:fixed;z-index:2147483647;-webkit-animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;animation:jw-float-to-bottom 150ms cubic-bezier(0, .25, .25, 1) forwards 1;top:auto;bottom:1rem;left:auto;right:1rem;max-width:400px;max-height:400px;margin:0 auto}@media screen and (max-width:480px){.jw-flag-floating .jw-wrapper{width:100%;left:0;right:0}}.jw-flag-floating .jw-wrapper .jw-media{touch-action:none}@media screen and (max-device-width:480px) and (orientation:portrait){.jw-flag-touch.jw-flag-floating .jw-wrapper{-webkit-animation:none;animation:none;top:62px;bottom:auto;left:0;right:0;max-width:none;max-height:none}}.jw-flag-floating .jw-float-icon{pointer-events:all;cursor:pointer;display:none}.jw-flag-floating .jw-float-icon .jw-svg-icon{-webkit-filter:drop-shadow(0 0 1px #000);filter:drop-shadow(0 0 1px #000)}.jw-flag-floating.jw-floating-dismissible .jw-dismiss-icon{display:none}.jw-flag-floating.jw-floating-dismissible.jw-flag-ads .jw-float-icon{display:flex}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-logo,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-logo{display:none}.jw-flag-floating.jw-floating-dismissible.jw-state-paused .jw-float-icon,.jw-flag-floating.jw-floating-dismissible:not(.jw-flag-user-inactive) .jw-float-icon{display:flex}.jw-float-icon{display:none;position:absolute;top:3px;right:5px;align-items:center;justify-content:center}@-webkit-keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes jw-float-to-bottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}to{-webkit-transform:translateY(0);transform:translateY(0)}}.jw-flag-top{margin-top:2em;overflow:visible}.jw-top{height:2em;line-height:2;pointer-events:none;text-align:center;opacity:.8;position:absolute;top:-2em;width:100%}.jw-top .jw-icon{cursor:pointer;pointer-events:all;height:auto;width:auto}.jw-top .jw-text{color:#555}',""])}}]); \ No newline at end of file diff --git a/ui/v2.5/public/jwplayer/jwplayer.js b/ui/v2.5/public/jwplayer/jwplayer.js new file mode 100644 index 00000000000..8b8ed97e9c2 --- /dev/null +++ b/ui/v2.5/public/jwplayer/jwplayer.js @@ -0,0 +1,95 @@ +/*! +JW Player version 8.11.5 +Copyright (c) 2019, JW Player, All Rights Reserved +https://github.com/jwplayer/jwplayer/blob/v8.11.5/README.md + +This source code and its use and distribution is subject to the terms and conditions of the applicable license agreement. +https://www.jwplayer.com/tos/ + +This product includes portions of other software. For the full text of licenses, see below: + +JW Player Third Party Software Notices and/or Additional Terms and Conditions + +************************************************************************************************** +The following software is used under Apache License 2.0 +************************************************************************************************** + +vtt.js v0.13.0 +Copyright (c) 2019 Mozilla (http://mozilla.org) +https://github.com/mozilla/vtt.js/blob/v0.13.0/LICENSE + +* * * + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and +limitations under the License. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under MIT license +************************************************************************************************** + +Underscore.js v1.6.0 +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +https://github.com/jashkenas/underscore/blob/1.6.0/LICENSE + +Backbone backbone.events.js v1.1.2 +Copyright (c) 2010-2014 Jeremy Ashkenas, DocumentCloud +https://github.com/jashkenas/backbone/blob/1.1.2/LICENSE + +Promise Polyfill v7.1.1 +Copyright (c) 2014 Taylor Hakes and Forbes Lindesay +https://github.com/taylorhakes/promise-polyfill/blob/v7.1.1/LICENSE + +can-autoplay.js v3.0.0 +Copyright (c) 2017 video-dev +https://github.com/video-dev/can-autoplay/blob/v3.0.0/LICENSE + +* * * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under W3C license +************************************************************************************************** + +Intersection Observer v0.5.0 +Copyright (c) 2016 Google Inc. (http://google.com) +https://github.com/w3c/IntersectionObserver/blob/v0.5.0/LICENSE.md + +* * * + +W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. + +This work is being provided by the copyright holders under the following license. + +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: + +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. + +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." + +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders. +*/ +window.jwplayer=function(t){function e(e){for(var n,i,o=e[0],u=e[1],a=0,s=[];a2;if(null==t&&(t=[]),p&&t.reduce===p)return r&&(e=G(e,r)),i?t.reduce(e,n):t.reduce(e);if(k(t,(function(t,o,u){i?n=e.call(r,n,t,o,u):(n=t,i=!0)})),!i)throw new TypeError(S);return n},T=E,A=E,_=function(t,e,n){var r;return R(t,(function(t,i,o){if(e.call(n,t,i,o))return r=t,!0})),r},F=_,L=function(t,e,n){var r=[];return null==t?r:v&&t.filter===v?t.filter(e,n):(k(t,(function(t,i,o){e.call(n,t,i,o)&&r.push(t)})),r)},I=L,M=function(t,e,n){e||(e=kt);var r=!0;return null==t?r:b&&t.every===b?t.every(e,n):(k(t,(function(t,o,u){if(!(r=r&&e.call(n,t,o,u)))return i})),!!r)},N=M,R=function(t,e,n){e||(e=kt);var r=!1;return null==t?r:g&&t.some===g?t.some(e,n):(k(t,(function(t,o,u){if(r||(r=e.call(n,t,o,u)))return i})),!!r)},D=R,B=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},q=function(t){return null==t?kt:vt(t)?t:Ct(t)},z=function(t){return function(e,n,r){var i={};return n=q(n),k(e,(function(o,u){var a=n.call(r,o,u,e);t(i,a,o)})),i}},V=z((function(t,e,n){Ot(t,e)?t[e].push(n):t[e]=[n]})),Q=z((function(t,e,n){t[e]=n})),W=function(t,e,n,r){for(var i=(n=q(n)).call(r,e),o=0,u=t.length;o>>1;n.call(r,t[a])=0)},H=X,Y=function(t,e){return _(t,Pt(e))},U=function(t){var e=s.apply(o,c.call(arguments,1));return L(t,(function(t){return!X(e,t)}))},J=function(t,e,n){if(null==t)return-1;var r=0,i=t.length;if(n){if("number"!=typeof n)return t[r=W(t,e)]===e?r:-1;r=n<0?Math.max(0,i+n):n}if(m&&t.indexOf===m)return t.indexOf(e,n);for(;r1&&void 0!==arguments[1]?arguments[1]:100;return function(){for(var r=this,i=arguments.length,o=new Array(i),u=0;ui&&(r=t,i=a)})),r},memoize:tt,now:xt,omit:function(t){var e={},n=s.apply(o,c.call(arguments,1));for(var r in t)X(n,r)||(e[r]=t[r]);return e},once:Z,partial:K,pick:st,pluck:function(t,e){return P(t,Ct(e))},property:Ct,propertyOf:function(t){return null==t?function(){}:function(e){return t[e]}},reduce:E,reject:function(t,e,n){return L(t,(function(t,r,i){return!e.call(n,t,r,i)}),n)},result:function(t,e){if(null!=t){var n=t[e];return vt(n)?n.call(t):n}},select:I,size:function(t){return null==t?0:t.length===+t.length?t.length:it(t).length},some:D,sortedIndex:W,throttle:rt,where:function(t,e){return L(t,Pt(e))},without:function(t){return U(t,c.call(arguments,1))}}},function(t,e,n){"use strict";n.d(e,"t",(function(){return o})),n.d(e,"s",(function(){return u})),n.d(e,"r",(function(){return a})),n.d(e,"o",(function(){return c})),n.d(e,"p",(function(){return s})),n.d(e,"a",(function(){return l})),n.d(e,"c",(function(){return f})),n.d(e,"q",(function(){return d})),n.d(e,"d",(function(){return p})),n.d(e,"h",(function(){return h})),n.d(e,"e",(function(){return v})),n.d(e,"b",(function(){return O})),n.d(e,"f",(function(){return k})),n.d(e,"g",(function(){return C})),n.d(e,"k",(function(){return P})),n.d(e,"i",(function(){return x})),n.d(e,"j",(function(){return S})),n.d(e,"l",(function(){return E})),n.d(e,"m",(function(){return T})),n.d(e,"n",(function(){return A})),n.d(e,"v",(function(){return _})),n.d(e,"u",(function(){return F})),n.d(e,"w",(function(){return L}));var r=n(0);function i(t,e){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:null;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.code=Object(r.v)(n)?n:0,this.sourceError=i,e&&(this.key=e)}var e,n,o;return e=t,o=[{key:"logMessage",value:function(t){var e=t%1e3,n=Math.floor((t-e)/1e3),r=t;return e>=400&&e<600&&(r="".concat(n,"400-").concat(n,"599")),"JW Player ".concat(t>299999&&t<4e5?"Warning":"Error"," ").concat(t,". For more information see https://developer.jwplayer.com/jw-player/docs/developer-guide/api/errors-reference#").concat(r)}}],(n=null)&&i(e.prototype,n),o&&i(e,o),t}();function _(t,e,n){return n instanceof A&&n.code?n:new A(t,e,n)}function F(t,e){var n=_(T,e,t);return n.code=(t&&t.code||0)+e,n}function L(t){var e=t.name,n=t.message;switch(e){case"AbortError":return/pause/.test(n)?y:/load/.test(n)?m:g;case"NotAllowedError":return w;case"NotSupportedError":return j;default:return b}}},function(t,e,n){"use strict";n.d(e,"i",(function(){return o})),n.d(e,"e",(function(){return u})),n.d(e,"j",(function(){return a})),n.d(e,"a",(function(){return c})),n.d(e,"b",(function(){return s})),n.d(e,"g",(function(){return l})),n.d(e,"d",(function(){return f})),n.d(e,"f",(function(){return d})),n.d(e,"h",(function(){return p})),n.d(e,"c",(function(){return h}));var r=n(0),i=window.parseFloat;function o(t){return t.replace(/^\s+|\s+$/g,"")}function u(t,e,n){for(t=""+t,n=n||"0";t.length-1?t.substr(t.lastIndexOf(".")+1,t.length).toLowerCase():void 0}function s(t){var e=(t/60|0)%60,n=t%60;return u(t/3600|0,2)+":"+u(e,2)+":"+u(n.toFixed(3),6)}function l(t,e){if(!t)return 0;if(Object(r.v)(t))return t;var n=t.replace(",","."),o=n.slice(-1),u=n.split(":"),a=u.length,c=0;if("s"===o)c=i(n);else if("m"===o)c=60*i(n);else if("h"===o)c=3600*i(n);else if(a>1){var s=a-1;4===a&&(e&&(c=i(u[s])/e),s-=1),c+=i(u[s]),c+=60*i(u[s-1]),a>=3&&(c+=3600*i(u[s-2]))}else c=i(n);return Object(r.v)(c)?c:0}function f(t,e,n){if(Object(r.t)(t)&&"%"===t.slice(-1)){var o=i(t);return e&&Object(r.v)(e)&&Object(r.v)(o)?e*o/100:null}return l(t,n)}function d(t,e){return t.map((function(t){return e+t}))}function p(t,e){return t.map((function(t){return t+e}))}function h(t){return"string"==typeof t&&"%"===t.slice(-1)}},function(t,e,n){"use strict";n.d(e,"jb",(function(){return r})),n.d(e,"mb",(function(){return i})),n.d(e,"kb",(function(){return o})),n.d(e,"ob",(function(){return u})),n.d(e,"pb",(function(){return a})),n.d(e,"lb",(function(){return c})),n.d(e,"nb",(function(){return s})),n.d(e,"qb",(function(){return l})),n.d(e,"s",(function(){return f})),n.d(e,"u",(function(){return d})),n.d(e,"t",(function(){return p})),n.d(e,"n",(function(){return h})),n.d(e,"q",(function(){return v})),n.d(e,"rb",(function(){return b})),n.d(e,"r",(function(){return g})),n.d(e,"Z",(function(){return m})),n.d(e,"W",(function(){return y})),n.d(e,"v",(function(){return w})),n.d(e,"Y",(function(){return j})),n.d(e,"w",(function(){return O})),n.d(e,"tb",(function(){return k})),n.d(e,"a",(function(){return C})),n.d(e,"b",(function(){return P})),n.d(e,"c",(function(){return x})),n.d(e,"d",(function(){return S})),n.d(e,"e",(function(){return E})),n.d(e,"h",(function(){return T})),n.d(e,"F",(function(){return A})),n.d(e,"gb",(function(){return _})),n.d(e,"Q",(function(){return F})),n.d(e,"C",(function(){return L})),n.d(e,"B",(function(){return I})),n.d(e,"E",(function(){return M})),n.d(e,"p",(function(){return N})),n.d(e,"cb",(function(){return R})),n.d(e,"m",(function(){return D})),n.d(e,"G",(function(){return B})),n.d(e,"H",(function(){return q})),n.d(e,"N",(function(){return z})),n.d(e,"O",(function(){return V})),n.d(e,"R",(function(){return Q})),n.d(e,"ib",(function(){return W})),n.d(e,"bb",(function(){return X})),n.d(e,"D",(function(){return H})),n.d(e,"S",(function(){return Y})),n.d(e,"P",(function(){return U})),n.d(e,"T",(function(){return J})),n.d(e,"V",(function(){return $})),n.d(e,"M",(function(){return G})),n.d(e,"L",(function(){return K})),n.d(e,"K",(function(){return Z})),n.d(e,"I",(function(){return tt})),n.d(e,"J",(function(){return et})),n.d(e,"U",(function(){return nt})),n.d(e,"o",(function(){return rt})),n.d(e,"y",(function(){return it})),n.d(e,"hb",(function(){return ot})),n.d(e,"db",(function(){return ut})),n.d(e,"eb",(function(){return at})),n.d(e,"f",(function(){return ct})),n.d(e,"g",(function(){return st})),n.d(e,"ab",(function(){return lt})),n.d(e,"A",(function(){return ft})),n.d(e,"l",(function(){return dt})),n.d(e,"k",(function(){return pt})),n.d(e,"fb",(function(){return ht})),n.d(e,"sb",(function(){return vt})),n.d(e,"z",(function(){return bt})),n.d(e,"j",(function(){return gt})),n.d(e,"X",(function(){return mt})),n.d(e,"i",(function(){return yt})),n.d(e,"x",(function(){return wt}));var r="buffering",i="idle",o="complete",u="paused",a="playing",c="error",s="loading",l="stalled",f="drag",d="dragStart",p="dragEnd",h="click",v="doubleClick",b="tap",g="doubleTap",m="over",y="move",w="enter",j="out",O=c,k="warning",C="adClick",P="adPause",x="adPlay",S="adSkipped",E="adTime",T="autostartNotAllowed",A=o,_="ready",F="seek",L="beforePlay",I="beforeComplete",M="bufferFull",N="displayClick",R="playlistComplete",D="cast",B="mediaError",q="firstFrame",z="playAttempt",V="playAttemptFailed",Q="seeked",W="setupError",X="state",H="bufferChange",Y="time",U="ratechange",J="mediaType",$="volume",G="mute",K="metadataCueParsed",Z="meta",tt="levels",et="levelsChanged",nt="visualQuality",rt="controls",it="fullscreen",ot="resize",ut="playlistItem",at="playlist",ct="audioTracks",st="audioTrackChanged",lt="playbackRateChanged",ft="logoClick",dt="captionsList",pt="captionsChanged",ht="providerFirstFrame",vt="userAction",bt="instreamClick",gt="breakpoint",mt="fullscreenchange",yt="bandwidthEstimate",wt="float"},function(t,e,n){"use strict";n.d(e,"b",(function(){return i})),n.d(e,"d",(function(){return o})),n.d(e,"a",(function(){return u})),n.d(e,"c",(function(){return a}));var r=n(2);function i(t){var e="";return t&&(t.localName?e=t.localName:t.baseName&&(e=t.baseName)),e}function o(t){var e="";return t&&(t.textContent?e=Object(r.i)(t.textContent):t.text&&(e=Object(r.i)(t.text))),e}function u(t,e){return t.childNodes[e]}function a(t){return t.childNodes?t.childNodes.length:0}},function(t,e,n){"use strict";n.d(e,"i",(function(){return a})),n.d(e,"e",(function(){return c})),n.d(e,"q",(function(){return s})),n.d(e,"j",(function(){return l})),n.d(e,"s",(function(){return f})),n.d(e,"r",(function(){return d})),n.d(e,"u",(function(){return p})),n.d(e,"d",(function(){return b})),n.d(e,"a",(function(){return g})),n.d(e,"o",(function(){return m})),n.d(e,"p",(function(){return y})),n.d(e,"v",(function(){return w})),n.d(e,"t",(function(){return j})),n.d(e,"h",(function(){return O})),n.d(e,"b",(function(){return k})),n.d(e,"g",(function(){return C})),n.d(e,"c",(function(){return P})),n.d(e,"m",(function(){return x})),n.d(e,"k",(function(){return S})),n.d(e,"n",(function(){return E})),n.d(e,"l",(function(){return T})),n.d(e,"f",(function(){return A}));var r,i=n(0),o=n(2),u=n(8);function a(t,e){return t.classList.contains(e)}function c(t){return l(t).firstChild}function s(t,e){O(t),function(t,e){if(!e)return;for(var n=document.createDocumentFragment(),r=l(e).childNodes,i=0;i0?"":"px")}function h(t){return Object(i.t)(t.className)?t.className.split(" "):[]}function v(t,e){e=Object(o.i)(e),t.className!==e&&(t.className=e)}function b(t){return t.classList?t.classList:h(t)}function g(t,e){var n=h(t);(Array.isArray(e)?e:e.split(" ")).forEach((function(t){Object(i.b)(n,t)||n.push(t)})),v(t,n.join(" "))}function m(t,e){var n=h(t),r=Array.isArray(e)?e:e.split(" ");v(t,Object(i.f)(n,r).join(" "))}function y(t,e,n){var r=t.className||"";e.test(r)?r=r.replace(e,n):n&&(r+=" "+n),v(t,r)}function w(t,e,n){var r=a(t,e);(n=Object(i.o)(n)?n:!r)!==r&&(n?g(t,e):m(t,e))}function j(t,e,n){t.setAttribute(e,n)}function O(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function k(t){var e=document.createElement("link");e.rel="stylesheet",e.href=t,document.getElementsByTagName("head")[0].appendChild(e)}function C(t){t&&O(t)}function P(t){var e={left:0,right:0,width:0,height:0,top:0,bottom:0};if(!t||!document.body.contains(t))return e;var n=t.getBoundingClientRect(),r=window.pageYOffset,i=window.pageXOffset;return n.width||n.height||n.left||n.top?(e.left=n.left+i,e.right=n.right+i,e.top=n.top+r,e.bottom=n.bottom+r,e.width=n.right-n.left,e.height=n.bottom-n.top,e):e}function x(t,e){t.insertBefore(e,t.firstChild)}function S(t){return t.nextElementSibling}function E(t){return t.previousElementSibling}function T(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=document.createElement("a");r.href=t,r.target=e,r=Object(i.h)(r,n),u.Browser.firefox?r.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})):r.click()}function A(){var t=window.screen.orientation;return!!t&&("landscape-primary"===t.type||"landscape-secondary"===t.type)||90===window.orientation||-90===window.orientation}},function(t,e,n){"use strict";n.d(e,"h",(function(){return u})),n.d(e,"f",(function(){return a})),n.d(e,"l",(function(){return s})),n.d(e,"k",(function(){return f})),n.d(e,"p",(function(){return d})),n.d(e,"g",(function(){return p})),n.d(e,"e",(function(){return h})),n.d(e,"n",(function(){return v})),n.d(e,"d",(function(){return b})),n.d(e,"i",(function(){return g})),n.d(e,"q",(function(){return m})),n.d(e,"j",(function(){return y})),n.d(e,"c",(function(){return w})),n.d(e,"b",(function(){return j})),n.d(e,"o",(function(){return O})),n.d(e,"m",(function(){return k})),n.d(e,"a",(function(){return C}));var r=navigator.userAgent;function i(t){return null!==r.match(t)}function o(t){return function(){return i(t)}}function u(){var t=C();return!!(t&&t>=18)}var a=o(/gecko\//i),c=o(/trident\/.+rv:\s*11/i),s=o(/iP(hone|od)/i),l="MacIntel"===navigator.platform&&navigator.maxTouchPoints>1,f=function(){return i(/iPad/i)||l},d=function(){return i(/Macintosh/i)&&!l},p=o(/FBAV/i);function h(){return i(/\sEdge\/\d+/i)}function v(){return i(/msie/i)}function b(){return i(/\s(?:(?:Headless)?Chrome|CriOS)\//i)&&!h()&&!i(/UCBrowser/i)}function g(){return h()||c()||v()}function m(){return i(/safari/i)&&!i(/(?:Chrome|CriOS|chromium|android|phantom)/i)}function y(){return i(/iP(hone|ad|od)/i)||l}function w(){return!(i(/chrome\/[123456789]/i)&&!i(/chrome\/18/i)&&!a())&&j()}function j(){return i(/Android/i)&&!i(/Windows Phone/i)}function O(){return y()||j()||i(/Windows Phone/i)}function k(){try{return window.self!==window.top}catch(t){return!0}}function C(){if(j())return 0;var t,e=navigator.plugins;if(e&&(t=e["Shockwave Flash"])&&t.description)return parseFloat(t.description.replace(/\D+(\d+\.?\d*).*/,"$1"));if(void 0!==window.ActiveXObject){try{if(t=new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash"))return parseFloat(t.GetVariable("$version").split(" ")[1].replace(/\s*,\s*/,"."))}catch(t){return 0}return t}return 0}},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){for(var n=0;ne)return t[e]}var o=n(0);n.d(e,"Browser",(function(){return a})),n.d(e,"OS",(function(){return c})),n.d(e,"Features",(function(){return s}));var u=navigator.userAgent;var a={},c={},s={};Object.defineProperties(a,{androidNative:{get:Object(o.y)(r.c),enumerable:!0},chrome:{get:Object(o.y)(r.d),enumerable:!0},edge:{get:Object(o.y)(r.e),enumerable:!0},facebook:{get:Object(o.y)(r.g),enumerable:!0},firefox:{get:Object(o.y)(r.f),enumerable:!0},ie:{get:Object(o.y)(r.i),enumerable:!0},msie:{get:Object(o.y)(r.n),enumerable:!0},safari:{get:Object(o.y)(r.q),enumerable:!0},version:{get:Object(o.y)(function(t,e){var n,r,i,o;return t.chrome?n=-1!==e.indexOf("Chrome")?e.substring(e.indexOf("Chrome")+7):e.substring(e.indexOf("CriOS")+6):t.safari?n=e.substring(e.indexOf("Version")+8):t.firefox?n=e.substring(e.indexOf("Firefox")+8):t.edge?n=e.substring(e.indexOf("Edge")+5):t.ie&&(-1!==e.indexOf("rv:")?n=e.substring(e.indexOf("rv:")+3):-1!==e.indexOf("MSIE")&&(n=e.substring(e.indexOf("MSIE")+5))),n&&(-1!==(o=n.indexOf(";"))&&(n=n.substring(0,o)),-1!==(o=n.indexOf(" "))&&(n=n.substring(0,o)),-1!==(o=n.indexOf(")"))&&(n=n.substring(0,o)),r=parseInt(n,10),i=parseInt(n.split(".")[1],10)),{version:n,major:r,minor:i}}.bind(void 0,a,u)),enumerable:!0}}),Object.defineProperties(c,{android:{get:Object(o.y)(r.b),enumerable:!0},iOS:{get:Object(o.y)(r.j),enumerable:!0},mobile:{get:Object(o.y)(r.o),enumerable:!0},mac:{get:Object(o.y)(r.p),enumerable:!0},iPad:{get:Object(o.y)(r.k),enumerable:!0},iPhone:{get:Object(o.y)(r.l),enumerable:!0},windows:{get:Object(o.y)((function(){return u.indexOf("Windows")>-1})),enumerable:!0},version:{get:Object(o.y)(function(t,e){var n,r,o;if(t.windows)switch(n=i(/Windows(?: NT|)? ([._\d]+)/.exec(e),1)){case"6.1":n="7.0";break;case"6.2":n="8.0";break;case"6.3":n="8.1"}else t.android?n=i(/Android ([._\d]+)/.exec(e),1):t.iOS?n=i(/OS ([._\d]+)/.exec(e),1):t.mac&&(n=i(/Mac OS X (10[._\d]+)/.exec(e),1));if(n){r=parseInt(n,10);var u=n.split(/[._]/);u&&(o=parseInt(u[1],10))}return{version:n,major:r,minor:o}}.bind(void 0,c,u)),enumerable:!0}}),Object.defineProperties(s,{flash:{get:Object(o.y)(r.h),enumerable:!0},flashVersion:{get:Object(o.y)(r.a),enumerable:!0},iframe:{get:Object(o.y)(r.m),enumerable:!0},passiveEvents:{get:Object(o.y)((function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){return t=!0}});window.addEventListener("testPassive",null,e),window.removeEventListener("testPassive",null,e)}catch(t){}return t})),enumerable:!0},backgroundLoading:{get:Object(o.y)((function(){return!(c.iOS||a.safari)})),enumerable:!0}})},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}n.r(e),n.d(e,"exists",(function(){return o})),n.d(e,"isHTTPS",(function(){return u})),n.d(e,"isFileProtocol",(function(){return a})),n.d(e,"isRtmp",(function(){return c})),n.d(e,"isYouTube",(function(){return s})),n.d(e,"typeOf",(function(){return l})),n.d(e,"isDeepKeyCompliant",(function(){return f}));var i=window.location.protocol;function o(t){switch(r(t)){case"string":return t.length>0;case"object":return null!==t;case"undefined":return!1;default:return!0}}function u(){return"https:"===i}function a(){return"file:"===i}function c(t,e){return 0===t.indexOf("rtmp:")||"rtmp"===e}function s(t,e){return"youtube"===e||/^(http|\/\/).*(youtube\.com|youtu\.be)\/.+/.test(t)}function l(t){if(null===t)return"null";var e=r(t);return"object"===e&&Array.isArray(t)?"array":e}function f(t,e,n){var i=Object.keys(t);return Object.keys(e).length>=i.length&&i.every((function(i){var o=t[i],u=e[i];return o&&"object"===r(o)?!(!u||"object"!==r(u))&&f(o,u,n):n(i,t)}))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return c})),n.d(e,"b",(function(){return s})),n.d(e,"d",(function(){return l})),n.d(e,"e",(function(){return p})),n.d(e,"c",(function(){return h}));var r=n(2),i=n(35),o=n.n(i);function u(t){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var a,c=o.a.clear;function s(t,e,n,r){n=n||"all-players";var i="";if("object"===u(e)){var a=document.createElement("div");l(a,e);var c=a.style.cssText;Object.prototype.hasOwnProperty.call(e,"content")&&c&&(c="".concat(c,' content: "').concat(e.content,'";')),r&&c&&(c=c.replace(/;/g," !important;")),i="{"+c+"}"}else"string"==typeof e&&(i=e);""!==i&&"{}"!==i?o.a.style([[t,t+i]],n):o.a.clear(n,t)}function l(t,e){if(null!=t){var n;void 0===t.length&&(t=[t]);var r={};for(n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=d(n,e[n]));for(var i=0;i-1?t:parseInt(t.replace("px",""),10):t}function l(t,e){if(t<=0&&!e||Object(i.r)(parseInt(t)))return"00:00";var n=t<0?"-":"";t=Math.abs(t);var r=Math.floor(t/3600),o=Math.floor((t-3600*r)/60),u=Math.floor(t%60);return n+(r?r+":":"")+(o<10?"0":"")+o+":"+(u<10?"0":"")+u}},function(t,e,n){"use strict";e.a=[]},function(t,e,n){"use strict";n.d(e,"h",(function(){return d})),n.d(e,"c",(function(){return h})),n.d(e,"e",(function(){return b})),n.d(e,"f",(function(){return g})),n.d(e,"b",(function(){return m})),n.d(e,"d",(function(){return w})),n.d(e,"g",(function(){return j})),n.d(e,"a",(function(){return O}));var r=n(0),i=n(6),o=n(22),u=n(9),a=n(33),c={},s={zh:"Chinese",nl:"Dutch",en:"English",fr:"French",de:"German",it:"Italian",ja:"Japanese",pt:"Portuguese",ru:"Russian",es:"Spanish",el:"Greek",fi:"Finnish",id:"Indonesian",ko:"Korean",th:"Thai",vi:"Vietnamese"};Object(r.n)(s);function l(t){var e=f(t),n=e.indexOf("_");return-1===n?e:e.substring(0,n)}function f(t){return t.toLowerCase().replace("-","_")}function d(t){return t?Object.keys(t).reduce((function(e,n){return e[f(n)]=t[n],e}),{}):{}}function p(t){var e=t.querySelector("html");return e?e.getAttribute("lang"):null}function h(){var t=p(document);if(!t&&Object(i.m)())try{t=p(window.top.document)}catch(t){}return t||navigator.language||"en"}var v=["ar","da","de","el","es","fi","fr","he","id","it","ja","ko","nl","no","oc","pt","ro","ru","sl","sv","th","tr","vi","zh"];function b(t){return 8207===t.charCodeAt(0)||/^[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/.test(t)}function g(t){return v.indexOf(l(t))>=0}function m(t,e,n){return Object(r.h)({},function(t){var e=t.advertising,n=t.related,i=t.sharing,o=t.abouttext,u=Object(r.h)({},t.localization);e&&(u.advertising=u.advertising||{},y(u.advertising,e,"admessage"),y(u.advertising,e,"cuetext"),y(u.advertising,e,"loadingAd"),y(u.advertising,e,"podmessage"),y(u.advertising,e,"skipmessage"),y(u.advertising,e,"skiptext"));"string"==typeof u.related?u.related={heading:u.related}:u.related=u.related||{};n&&y(u.related,n,"autoplaymessage");i&&(u.sharing=u.sharing||{},y(u.sharing,i,"heading"),y(u.sharing,i,"copied"));o&&y(u,t,"abouttext");var a=u.close||u.nextUpClose;a&&(u.close=a);return u}(t),e[l(n)],e[f(n)])}function y(t,e,n){var r=t[n]||e[n];r&&(t[n]=r)}function w(t){return Object(u.isDeepKeyCompliant)(a.a,t,(function(t,e){return"string"==typeof e[t]}))}function j(t,e){var n=c[e];if(!n){var r="".concat(t,"translations/").concat(l(e),".json");c[e]=n=new Promise((function(t,n){Object(o.a)({url:r,oncomplete:t,onerror:function(t,r,i,o){c[e]=null,n(o)},responseType:"json"})}))}return n}function O(t,e){var n=Object(r.h)({},t,e);return k(n,"errors",t,e),k(n,"related",t,e),k(n,"sharing",t,e),k(n,"advertising",t,e),k(n,"shortcuts",t,e),n}function k(t,e,n,i){t[e]=Object(r.h)({},n[e],i[e])}},function(t,e,n){"use strict";var r=n(52),i=n(9),o=document.createElement("video"),u={aac:"audio/mp4",mp4:"video/mp4",f4v:"video/mp4",m4v:"video/mp4",mov:"video/mp4",mp3:"audio/mpeg",mpeg:"audio/mpeg",ogv:"video/ogg",ogg:"video/ogg",oga:"video/ogg",vorbis:"video/ogg",webm:"video/webm",f4a:"video/aac",m3u8:"application/vnd.apple.mpegurl",m3u:"application/vnd.apple.mpegurl",hls:"application/vnd.apple.mpegurl"},a=[{name:"html5",supports:function(t){if(!1===Object(r.a)(t))return!1;if(!o.canPlayType)return!1;var e=t.file,n=t.type;if(Object(i.isRtmp)(e,n))return!1;var a=t.mimeType||u[n];if(!a)return!1;var c=t.mediaTypes;c&&c.length&&(a=[a].concat(c.slice()).join("; "));return!!o.canPlayType(a)}}];e.a=a},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var r=Date.now||function(){return(new Date).getTime()}},function(t,e,n){"use strict";n.d(e,"a",(function(){return l})),n.d(e,"d",(function(){return f})),n.d(e,"b",(function(){return d})),n.d(e,"c",(function(){return p}));var r=n(25),i=n(26),o=n(14),u=n(21),a=n(32),c=n(1),s=null,l={};function f(t){return s||(s=function(t){var e=t.get("controls"),s=h(),f=function(t,e){var n=t.get("playlist");if(Array.isArray(n)&&n.length)for(var u=Object(i.c)(Object(r.a)(n[0]),t),a=0;a=0)return r.substr(0,i+1)}}return""}),o=function(){return i("jwplayer.js")},u=function(t){var e=("0"+t).split(/\W/),n=r.a.split(/\W/),i=parseFloat(e[0]),o=parseFloat(n[0]);return!(i>o)&&!(i===o&&parseFloat("0"+e[1])>parseFloat(n[1]))},a=function(){return i("jwplayer.js")}},function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r=n(28),i=n(14),o=n(53),u=n(0);function a(t){var e=t.getName().name;if(!r.a[e]){if(!Object(u.j)(i.a,Object(u.x)({name:e}))){if(!Object(u.q)(t.supports))throw new Error("Tried to register a provider with an invalid object");i.a.unshift({name:e,supports:t.supports})}Object(u.e)(t.prototype,o.a),r.a[e]=t}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return m}));var r=n(0),i=n(11),o=n(9),u=n(1),a=1,c=2,s=3,l=4,f=5,d=6,p=7,h=601,v=602,b=611,g=function(){};function m(t,e,n,h){var O;t===Object(t)&&(t=(h=t).url);var k=Object(r.h)({xhr:null,url:t,withCredentials:!1,retryWithoutCredentials:!1,timeout:6e4,timeoutId:-1,oncomplete:e||g,onerror:n||g,mimeType:h&&!h.responseType?"text/xml":"",requireValidXML:!1,responseType:h&&h.plainText?"text":"",useDomParser:!1,requestFilter:null},h),C=function(t,e){return function(t,n){var i=t.currentTarget||e.xhr;if(clearTimeout(e.timeoutId),e.retryWithoutCredentials&&e.xhr.withCredentials)return y(i),void m(Object(r.h)({},e,{xhr:null,withCredentials:!1,retryWithoutCredentials:!1}));!n&&i.status>=400&&i.status<600&&(n=i.status),w(e,n?u.k:u.m,n||d,t)}}(0,k);if("XMLHttpRequest"in window){if(O=k.xhr=k.xhr||new window.XMLHttpRequest,"function"==typeof k.requestFilter){var P;try{P=k.requestFilter({url:t,xhr:O})}catch(t){return C(t,f),O}P&&"open"in P&&"send"in P&&(O=k.xhr=P)}O.onreadystatechange=function(t){return function(e){var n=e.currentTarget||t.xhr;if(4===n.readyState){clearTimeout(t.timeoutId);var a=n.status;if(a>=400)return void w(t,u.k,a<600?a:d);if(200===a)return function(t){return function(e){var n=e.currentTarget||t.xhr;if(clearTimeout(t.timeoutId),t.responseType){if("json"===t.responseType)return function(t,e){if(!t.response||"string"==typeof t.response&&'"'!==t.responseText.substr(1))try{t=Object(r.h)({},t,{response:JSON.parse(t.responseText)})}catch(t){return void w(e,u.k,b,t)}return e.oncomplete(t)}(n,t)}else{var o,a=n.responseXML;if(a)try{o=a.firstChild}catch(t){}if(a&&o)return j(n,a,t);if(t.useDomParser&&n.responseText&&!a&&(a=Object(i.parseXML)(n.responseText))&&a.firstChild)return j(n,a,t);if(t.requireValidXML)return void w(t,u.k,v)}t.oncomplete(n)}}(t)(e);0===a&&Object(o.isFileProtocol)()&&!/^[a-z][a-z0-9+.-]*:/.test(t.url)&&w(t,u.k,p)}}}(k),O.onerror=C,"overrideMimeType"in O?k.mimeType&&O.overrideMimeType(k.mimeType):k.useDomParser=!0;try{t=t.replace(/#.*$/,""),O.open("GET",t,!0)}catch(t){return C(t,s),O}if(k.responseType)try{O.responseType=k.responseType}catch(t){}k.timeout&&(k.timeoutId=setTimeout((function(){y(O),w(k,u.m,a)}),k.timeout),O.onabort=function(){clearTimeout(k.timeoutId)});try{k.withCredentials&&"withCredentials"in O&&(O.withCredentials=!0),O.send()}catch(t){C(t,l)}return O}w(k,u.m,c)}function y(t){t.onload=null,t.onprogress=null,t.onreadystatechange=null,t.onerror=null,"abort"in t&&t.abort()}function w(t,e,n,r){t.onerror(e,t.url,t.xhr,new u.n(e,n,r))}function j(t,e,n){var i=e.documentElement;if(!n.requireValidXML||"parsererror"!==i.nodeName&&!i.getElementsByTagName("parsererror").length)return t.responseXML||(t=Object(r.h)({},t,{responseXML:e})),n.oncomplete(t);w(n,u.k,h)}},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var r="8.11.5+local.2019-12-05-12-22-47-982"},function(t,e,n){"use strict";var r=n(0),i=n(15),o=window.performance||{timing:{}},u=o.timing.navigationStart||Object(i.a)();function a(){return u+o.now()}"now"in o||(o.now=function(){return Object(i.a)()-u});e.a=function(){var t={},e={},n={},i={};return{start:function(e){t[e]=a(),n[e]=n[e]+1||1},end:function(n){if(t[n]){var r=a()-t[n];delete t[n],e[n]=e[n]+r||r}},dump:function(){var o=Object(r.h)({},e);for(var u in t)if(Object.prototype.hasOwnProperty.call(t,u)){var c=a()-t[u];o[u]=o[u]+c||c}return{counts:Object(r.h)({},n),sums:o,events:Object(r.h)({},i)}},tick:function(t){i[t]=a()},clear:function(t){delete i[t]},between:function(t,e){return i[e]&&i[t]?i[e]-i[t]:null}}}},function(t,e,n){"use strict";var r=n(0),i=n(29),o=function(t){if(t&&t.file)return Object(r.h)({},{kind:"captions",default:!1},t)},u=Array.isArray;e.a=function(t){u((t=t||{}).tracks)||delete t.tracks;var e=Object(r.h)({},{sources:[],tracks:[],minDvrWindow:120,dvrSeekLimit:25},t);e.dvrSeekLimit<5&&(e.dvrSeekLimit=5),e.sources!==Object(e.sources)||u(e.sources)||(e.sources=[Object(i.a)(e.sources)]),u(e.sources)&&0!==e.sources.length||(t.levels?e.sources=t.levels:e.sources=[Object(i.a)(t)]);for(var n=0;n0)return d;var n=t.indexOf("/"),r=Object(f.a)(t);return!(e<0&&n<0)||r&&isNaN(r)?p:2}};var v=function(t){this.url=t,this.promise_=null};Object.defineProperties(v.prototype,{promise:{get:function(){return this.promise_||this.load()},set:function(){}}}),Object(i.h)(v.prototype,{load:function(){var t=this,e=this.promise_;if(!e){if(2===h(this.url))e=Promise.resolve(this);else{var n=new s.a(function(t){switch(h(t)){case d:return t;case p:return Object(l.getAbsolutePath)(t,window.location.href)}}(this.url));this.loader=n,e=n.load().then((function(){return t}))}this.promise_=e}return e},registerPlugin:function(t,e,n){this.name=t,this.target=e,this.js=n},getNewInstance:function(t,e,n){var i=this.js;if("function"!=typeof i)throw new r.n(null,u(this.url)+100);var o=new i(t,e,n);return o.addToPlayer=function(){var e=t.getContainer().querySelector(".jw-overlays");e&&(n.left=e.style.left,n.top=e.style.top,e.appendChild(n),o.displayArea=e)},o.resizeHandler=function(){var t=o.displayArea;t&&o.resize(t.clientWidth,t.clientHeight)},o}});var b=v,g=n(39),m={},y=function(){},w=y.prototype;w.setupPlugin=function(t){var e=this.getPlugin(t);return e?(e.url!==t&&Object(g.a)('JW Plugin "'.concat(o(t),'" already loaded from "').concat(e.url,'". Ignoring "').concat(t,'."')),e.promise):this.addPlugin(t).load()},w.addPlugin=function(t){var e=o(t),n=m[e];return n||(n=new b(t),m[e]=n),n},w.getPlugin=function(t){return m[o(t)]},w.removePlugin=function(t){delete m[o(t)]},w.getPlugins=function(){return m};var j=y;n.d(e,"b",(function(){return k})),n.d(e,"a",(function(){return C}));var O=new j,k=function(t,e,n){var r=O.addPlugin(t);r.js||r.registerPlugin(t,e,n)};function C(t,e){var n=t.get("plugins");return window.jwplayerPluginJsonp=k,(t.pluginLoader=t.pluginLoader||new c).load(e,O,n,t).then((function(e){if(!t.attributes._destroyed)return delete window.jwplayerPluginJsonp,e}))}},function(t,e,n){"use strict";e.a={}},function(t,e,n){"use strict";var r=n(0),i=n(9),o=n(2);e.a=function(t){if(t&&t.file){var e=Object(r.h)({},{default:!1},t);e.file=Object(o.i)(""+e.file);var n=/^[^/]+\/(?:x-)?([^/]+)$/;if(n.test(e.type)&&(e.mimeType=e.type,e.type=e.type.replace(n,"$1")),Object(i.isYouTube)(e.file)?e.type="youtube":Object(i.isRtmp)(e.file)?e.type="rtmp":e.type||(e.type=Object(o.a)(e.file)),e.type){switch(e.type){case"m3u8":case"vnd.apple.mpegurl":e.type="hls";break;case"dash+xml":e.type="dash";break;case"m4a":e.type="aac";break;case"smil":e.type="rtmp"}return Object.keys(e).forEach((function(t){""===e[t]&&delete e[t]})),e}}}},,,function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"b",(function(){return u}));var r=n(16),i=null,o={};function u(){return i||(i=n.e(1).then(function(t){var e=n(17).default;return o.controls=e,e}.bind(null,n)).catch((function(){i=null,Object(r.c)(301130)()}))),i}},function(t,e,n){"use strict";e.a={advertising:{admessage:"This ad will end in xx",cuetext:"Advertisement",displayHeading:"Advertisement",loadingAd:"Loading ad",podmessage:"Ad __AD_POD_CURRENT__ of __AD_POD_LENGTH__.",skipmessage:"Skip ad in xx",skiptext:"Skip"},airplay:"AirPlay",audioTracks:"Audio Tracks",auto:"Auto",buffer:"Loading",cast:"Chromecast",cc:"Closed Captions",close:"Close",errors:{badConnection:"This video cannot be played because of a problem with your internet connection.",cantLoadPlayer:"Sorry, the video player failed to load.",cantPlayInBrowser:"The video cannot be played in this browser.",cantPlayVideo:"This video file cannot be played.",errorCode:"Error Code",liveStreamDown:"The live stream is either down or has ended.",protectedContent:"There was a problem providing access to protected content.",technicalError:"This video cannot be played because of a technical error."},exitFullscreen:"Exit Fullscreen",fullscreen:"Fullscreen",hd:"Quality",liveBroadcast:"Live",logo:"Logo",mute:"Mute",next:"Next",nextUp:"Next Up",notLive:"Not Live",off:"Off",pause:"Pause",play:"Play",playback:"Play",playbackRates:"Playback Rates",player:"Video Player",poweredBy:"Powered by",prev:"Previous",related:{autoplaymessage:"Next up in xx",heading:"More Videos"},replay:"Replay",rewind:"Rewind 10 Seconds",settings:"Settings",sharing:{copied:"Copied",email:"Email",embed:"Embed",heading:"Share",link:"Link"},slider:"Seek",stop:"Stop",unmute:"Unmute",videoInfo:"About This Video",volume:"Volume",volumeSlider:"Volume",shortcuts:{playPause:"Play/Pause",volumeToggle:"Mute/Unmute",fullscreenToggle:"Fullscreen/Exit Fullscreen",seekPercent:"Seek %",keyboardShortcuts:"Keyboard Shortcuts",increaseVolume:"Increase Volume",decreaseVolume:"Decrease Volume",seekForward:"Seek Forward",seekBackward:"Seek Backward",spacebar:"SPACE",captionsToggle:"Captions On/Off"}}},function(t,e,n){"use strict";var r=n(0),i=n(14),o=n(21),u=n(28),a=n(16);function c(t){this.config=t||{}}var s={html5:function(){return n.e(9).then(function(t){var e=n(31).default;return Object(o.a)(e),e}.bind(null,n)).catch(Object(a.b)(152))}};Object(r.h)(c.prototype,{load:function(t){var e=s[t],n=function(){return Promise.reject(new Error("Failed to load media"))};return e?e().then((function(){var e=u.a[t];return e||n()})):n()},providerSupports:function(t,e){return t.supports(e)},choose:function(t){if(t===Object(t))for(var e=i.a.length,n=0;n')+'
    '+'
    '.concat(e||"",'').concat(i,"
    ")+"
    "},i=n(5),o=n(10);function u(t,e){var n=e.message,u=e.code,a=r(t.get("id"),n,t.get("localization").errors.errorCode,u),c=t.get("width"),s=t.get("height"),l=Object(i.e)(a);return Object(o.d)(l,{width:c.toString().indexOf("%")>0?c:"".concat(c,"px"),height:s.toString().indexOf("%")>0?s:"".concat(s,"px")}),l}n.d(e,"a",(function(){return u}))},function(t,e,n){"use strict";function r(t){return t.slice&&"px"===t.slice(-2)&&(t=t.slice(0,-2)),t}function i(t,e){if(-1===e.toString().indexOf("%"))return 0;if("string"!=typeof t||!t)return 0;if(/^\d*\.?\d+%$/.test(t))return t;var n=t.indexOf(":");if(-1===n)return 0;var r=parseFloat(t.substr(0,n)),i=parseFloat(t.substr(n+1));return r<=0||i<=0?0:i/r*100+"%"}n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return i}))},function(t,e,n){"use strict";var r=n(0),i=n(7),o=n(3),u={},a=45e3,c=2,s=3;function l(t){var e=document.createElement("link");return e.type="text/css",e.rel="stylesheet",e.href=t,e}function f(t,e){var n=document.createElement("script");return n.type="text/javascript",n.charset="utf-8",n.async=!0,n.timeout=e||a,n.src=t,n}var d=function(t,e,n){var r=this,i=0;function d(t){i=c,r.trigger(o.w,t).off()}function p(t){i=s,r.trigger(o.kb,t).off()}this.getStatus=function(){return i},this.load=function(){var r=u[t];return 0!==i?r:(r&&r.then(p).catch(d),i=1,r=new Promise((function(r,i){var o=(e?l:f)(t,n),u=function(){o.onerror=o.onload=null,clearTimeout(s)},c=function(t){u(),d(t),i(t)},s=setTimeout((function(){c(new Error("Network timeout ".concat(t)))}),a);o.onerror=function(){c(new Error("Failed to load ".concat(t)))},o.onload=function(t){u(),p(t),r(t)};var h=document.getElementsByTagName("head")[0]||document.documentElement;h.insertBefore(o,h.firstChild)})),u[t]=r,r)}};Object(r.h)(d.prototype,i.a),e.a=d},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var r="function"==typeof console.log?console.log.bind(console):function(){}},function(t,e,n){"use strict";n.d(e,"a",(function(){return x})),n.d(e,"b",(function(){return _}));var r=n(8),i=n(3),o=n(7),u=n(15),a=n(5);function c(t){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function s(t,e){for(var n=0;nk*k&&(N(t,i.u,e),t.dragged=!0,N(t,i.s,e))}n||"touchmove"!==e.type||D(e)},s=function(n){if(clearTimeout(h),t.el)if(I(t),L(t,y),t.dragged)t.dragged=!1,N(t,i.t,n);else if(-1===n.type.indexOf("cancel")&&e.contains(n.target)){if(Object(u.a)()-t.lastStart>P)return;var r="pointerup"===n.type||"pointercancel"===n.type,o="mouseup"===n.type||r&&"mouse"===n.pointerType;!function(t,e,n){if(t.enableDoubleTap)if(Object(u.a)()-t.lastClick4&&void 0!==arguments[4]?arguments[4]:O,o=t.handlers[e],u=t.options[e];if(o||(o=t.handlers[e]={},u=t.options[e]={}),o[n])throw new Error("".concat(e," ").concat(n," already registered"));o[n]=r,u[n]=i;var a=t.el;(e===y?_(a):a).addEventListener(n,r,i)}function L(t,e){var n=t.el,r=t.handlers,i=t.options,o=e===y?_(n):n,u=r[e],a=i[e];u&&(Object.keys(u).forEach((function(t){var e=a[t];"boolean"==typeof e?o.removeEventListener(t,u[t],e):o.removeEventListener(t,u[t])})),r[e]=null,i[e]=null)}function I(t){var e=t.el;null!==t.pointerId&&(e.releasePointerCapture(t.pointerId),t.pointerId=null)}function M(t,e,n){var r=t.el,i=n.target;t.trigger(e,{type:e,sourceEvent:n,currentTarget:r,target:i})}function N(t,e,n){var r=function(t,e,n){var r,i=e.target,o=e.touches,u=e.changedTouches,a=e.pointerType;o||u?(r=o&&o.length?o[0]:u[0],a=a||"touch"):(r=e,a=a||"mouse");var c=r,s=c.pageX,l=c.pageY;return{type:t,pointerType:a,pageX:s,pageY:l,sourceEvent:e,currentTarget:n,target:i}}(e,n,t.el);t.trigger(e,r)}function R(t){return 0===t.type.indexOf("touch")?(t.originalEvent||t).changedTouches[0]:t}function D(t){t.preventDefault&&t.preventDefault()}},function(t,e,n){"use strict";n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return i}));var r={audioMode:!1,flashBlocked:!1,item:0,itemMeta:{},playbackRate:1,playRejected:!1,state:n(3).mb,itemReady:!1,controlsEnabled:!1},i={position:0,duration:0,buffer:0,currentTime:0}},function(t,e,n){"use strict";n.d(e,"b",(function(){return r})),n.d(e,"a",(function(){return i}));var r=window.requestAnimationFrame||function(t){return setTimeout(t,17)},i=window.cancelAnimationFrame||clearTimeout},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var r=function(t,e,n){return Math.max(Math.min(t,n),e)}},function(t,e,n){"use strict";function r(t,e,n){var r=[],i={};function o(){for(;r.length>0;){var e=r.shift(),n=e.command,o=e.args;(i[n]||t[n]).apply(t,o)}}e.forEach((function(e){var u=t[e];i[e]=u,t[e]=function(){var t=Array.prototype.slice.call(arguments,0);n()?r.push({command:e,args:t}):(o(),u&&u.apply(this,t))}})),Object.defineProperty(this,"queue",{enumerable:!0,get:function(){return r}}),this.flush=o,this.empty=function(){r.length=0},this.off=function(){e.forEach((function(e){var n=i[e];n&&(t[e]=n,delete i[e])}))},this.destroy=function(){this.off(),this.empty()}}n.d(e,"a",(function(){return r}))},function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,e){for(var n=0;n=.25&&t<=4})).map((function(t){return Math.round(100*t)/100}))).indexOf(1)<0&&g.push(1),g.sort(),h.playbackRateControls=!0,h.playbackRates=g}(!h.playbackRateControls||h.playbackRates.indexOf(h.defaultPlaybackRate)<0)&&(h.defaultPlaybackRate=1),h.playbackRate=h.defaultPlaybackRate,h.aspectratio||delete h.aspectratio;var m=h.playlist;if(m)Array.isArray(m.playlist)&&(h.feedData=m,h.playlist=m.playlist);else{var y=Object(r.z)(h,["title","description","type","mediaid","image","images","file","sources","tracks","preload","duration"]);h.playlist=[y]}h.qualityLabels=h.qualityLabels||h.hlslabels,delete h.duration;var w=h.liveTimeout;null!==w&&(Object(r.v)(w)?0!==w&&(w=Math.max(30,w)):w=null,h.liveTimeout=w);var j,O,k=parseFloat(h.bandwidthEstimate),C=parseFloat(h.bitrateSelection);return h.bandwidthEstimate=Object(r.v)(k)?k:(j=h.defaultBandwidthEstimate,O=parseFloat(j),Object(r.v)(O)?Math.max(O,1):f.bandwidthEstimate),h.bitrateSelection=Object(r.v)(C)?C:f.bitrateSelection,h.backgroundLoading=Object(r.o)(h.backgroundLoading)?h.backgroundLoading:c.Features.backgroundLoading,h},p=n(16),h=n(27),v=n(3),b=n(51),g=n(26),m=n(38),y=n(1);function w(t,e,n){var r=t.attributes;r.playlist=Object(g.a)(e),r.feedData=n}function j(t){return function(t){var e=t.get("playlist");return new Promise((function(n,r){if("string"!=typeof e){var i=t.get("feedData")||{};return w(t,e,i),n()}var o=new b.a;o.on(v.eb,(function(e){var r=e.playlist;delete e.playlist,w(t,r,e),n()})),o.on(v.w,(function(e){w(t,[],{}),r(Object(y.u)(e,y.p))})),o.load(e)}))}(t).then((function(){if(!C(t)){var e=Object(g.b)(t.get("playlist"),t);t.attributes.playlist=e;try{Object(g.e)(e)}catch(t){throw t.code+=y.p,t}var n=t.getProviders(),r=n.choose(e[0].sources[0]),i=r.provider,o=r.name;return"function"==typeof i?i:p.a.html5&&"html5"===o?p.a.html5:n.load(o).catch((function(t){throw Object(y.u)(t,y.q)}))}}))}function O(t){var e=t.get("skin")?t.get("skin").url:void 0;if("string"==typeof e&&!function(t){for(var e=document.styleSheets,n=0,r=e.length;n0&&(n=t(l,n));break;case"title":n.title=Object(o.d)(l);break;case"description":n.description=Object(o.d)(l);break;case"guid":n.mediaid=Object(o.d)(l);break;case"thumbnail":n.image||(n.image=Object(u.j)(l,"url"));break;case"group":t(l,n);break;case"subtitle":var p={};p.file=Object(u.j)(l,"url"),p.kind="captions",Object(u.j)(l,"lang").length>0&&(p.label=(r=Object(u.j)(l,"lang"),i=void 0,(i={zh:"Chinese",nl:"Dutch",en:"English",fr:"French",de:"German",it:"Italian",ja:"Japanese",pt:"Portuguese",ru:"Russian",es:"Spanish"})[r]?i[r]:r)),c.push(p)}}}n.hasOwnProperty("tracks")||(n.tracks=[]);for(var h=0;h0&&(r[f][n]="true"===r[f][n],r[f].label.length||delete r[f].label,e.sources.push(r[f]))}if(i.length){e.tracks=[];for(var d=0;d0&&(i[d][n]="true"===i[d][n],i[d].kind=i[d].kind.length?i[d].kind:"captions",i[d].label.length||delete i[d].label,e.tracks.push(i[d]))}return e},f=n(25);function d(t){for(var e={},n=0;n=4.4):null}},function(t,e,n){"use strict";var r=n(3),i=function(){},o=function(){return!1},u={name:"default"},a={supports:o,play:i,pause:i,preload:i,load:i,stop:i,volume:i,mute:i,seek:i,resize:i,remove:i,destroy:i,setVisibility:i,setFullscreen:i,getFullscreen:o,supportsFullscreen:o,getContainer:i,setContainer:i,getName:function(){return u},getQualityLevels:i,getCurrentQuality:i,setCurrentQuality:i,getAudioTracks:i,getCurrentAudioTrack:i,setCurrentAudioTrack:i,getSeekRange:function(){return{start:0,end:this.getDuration()}},setPlaybackRate:i,getPlaybackRate:function(){return 1},getBandwidthEstimate:function(){return null},getLiveLatency:function(){return null},setControls:i,attachMedia:i,detachMedia:i,init:i,setState:function(t){this.state=t,this.trigger(r.bb,{newstate:t})},sendMediaType:function(t){var e=t[0],n=e.type,i=e.mimeType,o="aac"===n||"mp3"===n||"mpeg"===n||i&&0===i.indexOf("audio/");this.trigger(r.T,{mediaType:o?"audio":"video"})}};e.a=a},function(t,e,n){"use strict";var r,i=n(49),o=n(8),u=n(5),a=[],c=[],s=[],l={},f="screen"in window&&"orientation"in window.screen,d=o.OS.android&&o.Browser.chrome,p=!1;function h(t,e){for(var n=e.length;n--;){var r=e[n];if(t.target===r.getContainer()){r.setIntersection(t);break}}}function v(){a.forEach((function(t){var e=t.model;if(!(e.get("audioMode")||!e.get("controls")||e.get("visibility")<.75)){var n=e.get("state"),r=Object(u.f)();!r&&"paused"===n&&t.api.getFullscreen()?t.api.setFullscreen(!1):"playing"===n&&t.api.setFullscreen(r)}}))}function b(){a.forEach((function(t){t.model.set("activeTab",Object(i.a)())}))}function g(t,e){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}function m(t){s.forEach((function(e){e(t)}))}document.addEventListener("visibilitychange",b),document.addEventListener("webkitvisibilitychange",b),d&&f&&window.screen.orientation.addEventListener("change",v),window.addEventListener("beforeunload",(function(){document.removeEventListener("visibilitychange",b),document.removeEventListener("webkitvisibilitychange",b),window.removeEventListener("scroll",m),d&&f&&window.screen.orientation.removeEventListener("change",v)})),e.a={add:function(t){a.push(t)},remove:function(t){g(t,a)},addScrollHandler:function(t){p||(p=!0,window.addEventListener("scroll",m)),s.push(t)},removeScrollHandler:function(t){var e=s.indexOf(t);-1!==e&&s.splice(e,1)},addWidget:function(t){c.push(t)},removeWidget:function(t){g(t,c)},size:function(){return a.length},observe:function(t){var e;e=window.IntersectionObserver,r||(r=new e((function(t){if(t&&t.length)for(var e=t.length;e--;){var n=t[e];h(n,a),h(n,c)}}),{threshold:[0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1]})),l[t.id]||(l[t.id]=!0,r.observe(t))},unobserve:function(t){r&&l[t.id]&&(delete l[t.id],r.unobserve(t))}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return f}));var r=n(0),i=n(42),o=n(5),u=n(10);function a(t,e){for(var n=0;n
    '),d=f.firstChild,p=d.firstChild,h=d.nextSibling;Object(u.d)([d,h],Object(r.h)({overflow:"auto"},a,s)),Object(u.d)(f,Object(r.h)({},a,s)),this.expandElement=d,this.expandChild=p,this.contractElement=h,this.hiddenElement=f,this.element=e,this.view=n,this.model=i,this.width=0,this.resized=!1,e.firstChild?e.insertBefore(f,e.firstChild):e.appendChild(f),e.addEventListener("scroll",l,!0),c.push(this),l()}var e,n,i;return e=t,(n=[{key:"destroy",value:function(){if(this.view){var t=c.indexOf(this);-1!==t&&c.splice(t,1),this.element.removeEventListener("scroll",l,!0),this.element.removeChild(this.hiddenElement),this.view=this.model=null}}}])&&a(e.prototype,n),i&&a(e,i),t}()},function(t,e,n){"use strict";n.r(e);var r=setTimeout;function i(){}function o(t){if(!(this instanceof o))throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(t,this)}function u(t,e){for(;3===t._state;)t=t._value;0!==t._state?(t._handled=!0,o._immediateFn((function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null!==n){var r;try{r=n(t._value)}catch(t){return void c(e.promise,t)}a(e.promise,r)}else(1===t._state?a:c)(e.promise,t._value)}))):t._deferreds.push(e)}function a(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof o)return t._state=3,t._value=e,void s(t);if("function"==typeof n)return void f((r=n,i=e,function(){r.apply(i,arguments)}),t)}t._state=1,t._value=e,s(t)}catch(e){c(t,e)}var r,i}function c(t,e){t._state=2,t._value=e,s(t)}function s(t){2===t._state&&0===t._deferreds.length&&o._immediateFn((function(){t._handled||o._unhandledRejectionFn(t._value)}));for(var e=0,n=t._deferreds.length;e2&&void 0!==arguments[2]?arguments[2]:[];if(j.a.debug)return t.apply(e||this,n);try{return t.apply(e||this,n)}catch(e){return new A(t.name,e)}},Error:A,Timer:P.a,log:N.a,genId:R.b,between:M.a,foreach:function(t,e){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])},flashVersion:_.a,isIframe:_.m,indexOf:w.m,trim:T.i,pad:T.e,extension:T.a,hms:T.b,seconds:T.g,prefix:T.f,suffix:T.h,noop:function(){}}),B=0;function q(t,e){var n=new k.a(e);return n.on(C.gb,(function(e){t._qoe.tick("ready"),e.setupTime=t._qoe.between("setup","ready")})),n.on("all",(function(e,n){t.trigger(e,n)})),n}function z(t,e){var n=t.plugins;Object.keys(n).forEach((function(t){delete n[t]})),e.get("setupConfig")&&t.trigger("remove"),t.off(),e.playerDestroy(),e.getContainer().removeAttribute("data-jwplayer-id")}function V(t){var e=++B,n=t.id||"player-".concat(e),r=new P.a,i={},o=q(this,t);r.tick("init"),t.setAttribute("data-jwplayer-id",n),Object.defineProperties(this,{id:{enumerable:!0,get:function(){return n}},uniqueId:{enumerable:!0,get:function(){return e}},plugins:{enumerable:!0,get:function(){return i}},_qoe:{enumerable:!0,get:function(){return r}},version:{enumerable:!0,get:function(){return y.a}},Events:{enumerable:!0,get:function(){return x.a}},utils:{enumerable:!0,get:function(){return D}},_:{enumerable:!0,get:function(){return w.d}}}),Object(w.h)(this,{_events:{},setup:function(e){return r.clear("ready"),r.tick("setup"),z(this,o),(o=q(this,t)).init(e,this),this.on(e.events,null,this)},remove:function(){return function(t){for(var e=h.a.length;e--;)if(h.a[e].uniqueId===t.uniqueId){h.a.splice(e,1);break}}(this),z(this,o),this},qoe:function(){var t=o.getItemQoe();return{setupTime:this._qoe.between("setup","ready"),firstFrame:t.getFirstFrame?t.getFirstFrame():null,player:this._qoe.dump(),item:t.dump()}},addCues:function(t){return Array.isArray(t)&&o.addCues(t),this},getAudioTracks:function(){return o.getAudioTracks()},getBuffer:function(){return o.get("buffer")},getCaptions:function(){return o.get("captions")},getCaptionsList:function(){return o.getCaptionsList()},getConfig:function(){return o.getConfig()},getContainer:function(){return o.getContainer()},getControls:function(){return o.get("controls")},getCues:function(){return o.get("cues")},getCurrentAudioTrack:function(){return o.getCurrentAudioTrack()},getCurrentCaptions:function(){return o.getCurrentCaptions()},getCurrentQuality:function(){return o.getCurrentQuality()},getCurrentTime:function(){return o.get("currentTime")},getDuration:function(){return o.get("duration")},getEnvironment:function(){return O},getFullscreen:function(){return o.get("fullscreen")},getHeight:function(){return o.getHeight()},getItemMeta:function(){return o.get("itemMeta")||{}},getMute:function(){return o.getMute()},getPlaybackRate:function(){return o.get("playbackRate")},getPlaylist:function(){return o.get("playlist")},getPlaylistIndex:function(){return o.get("item")},getPlaylistItem:function(t){if(!D.exists(t))return o.get("playlistItem");var e=this.getPlaylist();return e?e[t]:null},getPosition:function(){return o.get("position")},getProvider:function(){return o.getProvider()},getQualityLevels:function(){return o.getQualityLevels()},getSafeRegion:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return o.getSafeRegion(t)},getState:function(){return o.getState()},getStretching:function(){return o.get("stretching")},getViewable:function(){return o.get("viewable")},getVisualQuality:function(){return o.getVisualQuality()},getVolume:function(){return o.get("volume")},getWidth:function(){return o.getWidth()},setCaptions:function(t){return o.setCaptions(t),this},setConfig:function(t){return o.setConfig(t),this},setControls:function(t){return o.setControls(t),this},setCurrentAudioTrack:function(t){o.setCurrentAudioTrack(t)},setCurrentCaptions:function(t){o.setCurrentCaptions(t)},setCurrentQuality:function(t){o.setCurrentQuality(t)},setFullscreen:function(t){return o.setFullscreen(t),this},setMute:function(t){return o.setMute(t),this},setPlaybackRate:function(t){return o.setPlaybackRate(t),this},setPlaylistItem:function(t,e){return o.setPlaylistItem(t,e),this},setCues:function(t){return Array.isArray(t)&&o.setCues(t),this},setVolume:function(t){return o.setVolume(t),this},load:function(t,e){return o.load(t,e),this},play:function(t){return o.play(t),this},pause:function(t){return o.pause(t),this},playToggle:function(t){switch(this.getState()){case C.pb:case C.jb:return this.pause(t);default:return this.play(t)}},seek:function(t,e){return o.seek(t,e),this},playlistItem:function(t,e){return o.playlistItem(t,e),this},playlistNext:function(t){return o.playlistNext(t),this},playlistPrev:function(t){return o.playlistPrev(t),this},next:function(t){return o.next(t),this},castToggle:function(){return o.castToggle(),this},createInstream:function(){return o.createInstream()},stop:function(){return o.stop(),this},resize:function(t,e){return o.resize(t,e),this},addButton:function(t,e,n,r,i){return o.addButton(t,e,n,r,i),this},removeButton:function(t){return o.removeButton(t),this},attachMedia:function(){return o.attachMedia(),this},detachMedia:function(){return o.detachMedia(),this},isBeforeComplete:function(){return o.isBeforeComplete()},isBeforePlay:function(){return o.isBeforePlay()}})}Object(w.h)(V.prototype,{on:function(t,e,n){return x.c.call(this,t,e,n)},once:function(t,e,n){return x.d.call(this,t,e,n)},off:function(t,e,n){return x.b.call(this,t,e,n)},trigger:function(t,e){return(e=w.d.isObject(e)?Object(w.h)({},e):{}).type=t,j.a.debug?x.e.call(this,t,e):x.f.call(this,t,e)},getPlugin:function(t){return this.plugins[t]},addPlugin:function(t,e){this.plugins[t]=e,this.on("ready",e.addToPlayer),e.resize&&this.on("resize",e.resizeHandler)},registerPlugin:function(t,e,n){Object(m.b)(t,e,n)},getAdBlock:function(){return!1},playAd:function(t){},pauseAd:function(t){},skipAd:function(){}}),n.d(e,"assignLibraryProperties",(function(){return X})),n.p=Object(p.loadFrom)();var Q=function(t){var e,n;if(t?"string"==typeof t?(e=W(t))||(n=document.getElementById(t)):"number"==typeof t?e=h.a[t]:t.nodeType&&(e=W((n=t).id||n.getAttribute("data-jwplayer-id"))):e=h.a[0],e)return e;if(n){var r=new V(n);return h.a.push(r),r}return{registerPlugin:m.b}};function W(t){for(var e=0;e0}});else{var n=[];i.prototype.THROTTLE_TIMEOUT=100,i.prototype.POLL_INTERVAL=null,i.prototype.USE_MUTATION_OBSERVER=!0,i.prototype.observe=function(t){if(!this._observationTargets.some((function(e){return e.element==t}))){if(!t||1!=t.nodeType)throw new Error("target must be an Element");this._registerInstance(),this._observationTargets.push({element:t,entry:null}),this._monitorIntersections(),this._checkForIntersections()}},i.prototype.unobserve=function(t){this._observationTargets=this._observationTargets.filter((function(e){return e.element!=t})),this._observationTargets.length||(this._unmonitorIntersections(),this._unregisterInstance())},i.prototype.disconnect=function(){this._observationTargets=[],this._unmonitorIntersections(),this._unregisterInstance()},i.prototype.takeRecords=function(){var t=this._queuedEntries.slice();return this._queuedEntries=[],t},i.prototype._initThresholds=function(t){var e=t||[0];return Array.isArray(e)||(e=[e]),e.sort().filter((function(t,e,n){if("number"!=typeof t||isNaN(t)||t<0||t>1)throw new Error("threshold must be a number between 0 and 1 inclusively");return t!==n[e-1]}))},i.prototype._parseRootMargin=function(t){var e=(t||"0px").split(/\s+/).map((function(t){var e=/^(-?\d*\.?\d+)(px|%)$/.exec(t);if(!e)throw new Error("rootMargin must be specified in pixels or percent");return{value:parseFloat(e[1]),unit:e[2]}}));return e[1]=e[1]||e[0],e[2]=e[2]||e[0],e[3]=e[3]||e[1],e},i.prototype._monitorIntersections=function(){this._monitoringIntersections||(this._monitoringIntersections=!0,this.POLL_INTERVAL?this._monitoringInterval=setInterval(this._checkForIntersections,this.POLL_INTERVAL):(r(t,"resize",this._checkForIntersections,!0),r(e,"scroll",this._checkForIntersections,!0),this.USE_MUTATION_OBSERVER&&"MutationObserver"in t&&(this._domObserver=new MutationObserver(this._checkForIntersections),this._domObserver.observe(e,{attributes:!0,childList:!0,characterData:!0,subtree:!0}))))},i.prototype._unmonitorIntersections=function(){this._monitoringIntersections&&(this._monitoringIntersections=!1,clearInterval(this._monitoringInterval),this._monitoringInterval=null,s(t,"resize",this._checkForIntersections,!0),s(e,"scroll",this._checkForIntersections,!0),this._domObserver&&(this._domObserver.disconnect(),this._domObserver=null))},i.prototype._checkForIntersections=function(){var e=this._rootIsInDom(),n=e?this._getRootRect():{top:0,bottom:0,left:0,right:0,width:0,height:0};this._observationTargets.forEach((function(i){var r=i.element,s=h(r),c=this._rootContainsTarget(r),a=i.entry,u=e&&c&&this._computeTargetAndRootIntersection(r,n),p=i.entry=new o({time:t.performance&&performance.now&&performance.now(),target:r,boundingClientRect:s,rootBounds:n,intersectionRect:u});a?e&&c?this._hasCrossedThreshold(a,p)&&this._queuedEntries.push(p):a&&a.isIntersecting&&this._queuedEntries.push(p):this._queuedEntries.push(p)}),this),this._queuedEntries.length&&this._callback(this.takeRecords(),this)},i.prototype._computeTargetAndRootIntersection=function(n,o){if("none"!=t.getComputedStyle(n).display){for(var i,r,s,c,u,p,l,d,f=h(n),g=a(n),_=!1;!_;){var v=null,m=1==g.nodeType?t.getComputedStyle(g):{};if("none"==m.display)return;if(g==this.root||g==e?(_=!0,v=o):g!=e.body&&g!=e.documentElement&&"visible"!=m.overflow&&(v=h(g)),v&&(i=v,r=f,s=void 0,c=void 0,u=void 0,p=void 0,l=void 0,d=void 0,s=Math.max(i.top,r.top),c=Math.min(i.bottom,r.bottom),u=Math.max(i.left,r.left),p=Math.min(i.right,r.right),d=c-s,!(f=(l=p-u)>=0&&d>=0&&{top:s,bottom:c,left:u,right:p,width:l,height:d})))break;g=a(g)}return f}},i.prototype._getRootRect=function(){var t;if(this.root)t=h(this.root);else{var n=e.documentElement,o=e.body;t={top:0,left:0,right:n.clientWidth||o.clientWidth,width:n.clientWidth||o.clientWidth,bottom:n.clientHeight||o.clientHeight,height:n.clientHeight||o.clientHeight}}return this._expandRectByRootMargin(t)},i.prototype._expandRectByRootMargin=function(t){var e=this._rootMarginValues.map((function(e,n){return"px"==e.unit?e.value:e.value*(n%2?t.width:t.height)/100})),n={top:t.top-e[0],right:t.right+e[1],bottom:t.bottom+e[2],left:t.left-e[3]};return n.width=n.right-n.left,n.height=n.bottom-n.top,n},i.prototype._hasCrossedThreshold=function(t,e){var n=t&&t.isIntersecting?t.intersectionRatio||0:-1,o=e.isIntersecting?e.intersectionRatio||0:-1;if(n!==o)for(var i=0;i59?e(i[1],i[2],0,i[4]):e(0,i[1],i[2],i[4]):null}i.r(e),r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r.Errors={BadSignature:{code:0,message:"Malformed WebVTT signature."},BadTimeStamp:{code:1,message:"Malformed time stamp."}};var o={"&":"&","<":"<",">":">","‎":"‎","‏":"‏"," ":" "},a={c:"span",i:"i",b:"b",u:"u",ruby:"ruby",rt:"rt",v:"span",lang:"span"},s={v:"title",lang:"lang"},l={rt:"ruby"};function h(t,e){function i(){if(!e)return null;var t,i=e.match(/^([^<]*)(<[^>]+>?)?/);return t=i[1]?i[1]:i[2],e=e.substr(t.length),t}function r(t){return o[t]}function h(t){for(var e;e=t.match(/&(amp|lt|gt|lrm|rlm|nbsp);/);)t=t.replace(e[0],r);return t}function c(t,e){return!l[e.localName]||l[e.localName]===t.localName}function p(e,i){var r=a[e];if(!r)return null;var n=t.document.createElement(r),o=s[e];return o&&i&&(n[o]=i.trim()),n}for(var f,u=t.document.createElement("div"),d=u,g=[];null!==(f=i());)if("<"!==f[0])d.appendChild(t.document.createTextNode(h(f)));else{if("/"===f[1]){g.length&&g[g.length-1]===f.substr(2).replace(">","")&&(g.pop(),d=d.parentNode);continue}var m=n(f.substr(1,f.length-2)),v=void 0;if(m){v=t.document.createProcessingInstruction("timestamp",m),d.appendChild(v);continue}var y=f.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);if(!y)continue;if(!(v=p(y[1],y[3])))continue;if(!c(d,v))continue;y[2]&&(v.className=y[2].substr(1).replace("."," ")),g.push(y[1]),d.appendChild(v),d=v}return u}var c=[[1470,1470],[1472,1472],[1475,1475],[1478,1478],[1488,1514],[1520,1524],[1544,1544],[1547,1547],[1549,1549],[1563,1563],[1566,1610],[1645,1647],[1649,1749],[1765,1766],[1774,1775],[1786,1805],[1807,1808],[1810,1839],[1869,1957],[1969,1969],[1984,2026],[2036,2037],[2042,2042],[2048,2069],[2074,2074],[2084,2084],[2088,2088],[2096,2110],[2112,2136],[2142,2142],[2208,2208],[2210,2220],[8207,8207],[64285,64285],[64287,64296],[64298,64310],[64312,64316],[64318,64318],[64320,64321],[64323,64324],[64326,64449],[64467,64829],[64848,64911],[64914,64967],[65008,65020],[65136,65140],[65142,65276],[67584,67589],[67592,67592],[67594,67637],[67639,67640],[67644,67644],[67647,67669],[67671,67679],[67840,67867],[67872,67897],[67903,67903],[67968,68023],[68030,68031],[68096,68096],[68112,68115],[68117,68119],[68121,68147],[68160,68167],[68176,68184],[68192,68223],[68352,68405],[68416,68437],[68440,68466],[68472,68479],[68608,68680],[126464,126467],[126469,126495],[126497,126498],[126500,126500],[126503,126503],[126505,126514],[126516,126519],[126521,126521],[126523,126523],[126530,126530],[126535,126535],[126537,126537],[126539,126539],[126541,126543],[126545,126546],[126548,126548],[126551,126551],[126553,126553],[126555,126555],[126557,126557],[126559,126559],[126561,126562],[126564,126564],[126567,126570],[126572,126578],[126580,126583],[126585,126588],[126590,126590],[126592,126601],[126603,126619],[126625,126627],[126629,126633],[126635,126651],[1114109,1114109]];function p(t){for(var e=0;e=i[0]&&t<=i[1])return!0}return!1}function f(t,e){for(var i=e.childNodes.length-1;i>=0;i--)t.push(e.childNodes[i])}function u(t){if(!t||!t.length)return null;var e=t.pop(),i=e.textContent||e.innerText;if(i){var r=i.match(/^.*(\n|\r)/);return r?(t.length=0,r[0]):i}return"ruby"===e.tagName?u(t):e.childNodes?(f(t,e),u(t)):void 0}function d(t){if(!t||!t.childNodes)return"ltr";var e,i=[];for(f(i,t);e=u(i);)for(var r=0;r=0&&t.line<=100))return t.line;if(!t.track||!t.track.textTrackList||!t.track.textTrackList.mediaElement)return-1;for(var e=t.track,i=e.textTrackList,r=0,n=0;nu&&(f=f<0?-1:1,f*=Math.ceil(u/c)*c),s<0)f+=a.vertical?i.width:i.height,f-=n*c,l=l.slice().reverse();f-=n,o.move(d,f)}else{var g=o.lineHeight/i.height*100;switch(a.lineAlign){case"middle":s-=g/2;break;case"end":s-=g}switch(a.vertical){case"":e.applyStyles({top:e.formatStyle(s,"%")});break;case"rl":e.applyStyles({left:e.formatStyle(s,"%")});break;case"lr":e.applyStyles({paddingRight:e.formatStyle(s,"%")})}l=["+y","-x","+x","-y"],o=new v(e)}var m=function t(e,n){for(var o,a,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,l=new v(e),h=0,c=0;ct.left&&this.topt.top},v.prototype.overlapsAny=function(t){for(var e=0;e=t.top&&this.bottom<=t.bottom&&this.left>=t.left&&this.right<=t.right},v.prototype.overlapsOppositeAxis=function(t,e){switch(e){case"+x":return this.leftt.right;case"+y":return this.topt.bottom}},v.prototype.intersectPercentage=function(t){return Math.max(0,Math.min(this.right,t.right)-Math.max(this.left,t.left))*Math.max(0,Math.min(this.bottom,t.bottom)-Math.max(this.top,t.top))/(this.height*this.width)},v.prototype.toCSSCompatValues=function(t){return{top:this.top-t.top,bottom:t.bottom-this.bottom,left:this.left-t.left,paddingRight:t.right-this.right,height:this.height,width:this.width}},v.getSimpleBoxPosition=function(t){var e=t.div?t.div.offsetHeight:t.tagName?t.offsetHeight:0,i=t.div?t.div.offsetWidth:t.tagName?t.offsetWidth:0,r=t.div?t.div.offsetTop:t.tagName?t.offsetTop:0,n=(t=t.div?t.div.getBoundingClientRect():t.tagName?t.getBoundingClientRect():t).height||e;return{left:t.left,right:t.right,top:t.top||r,height:n,bottom:t.bottom||r+n,width:t.width||i}},b.StringDecoder=function(){return{decode:function(t){if(!t)return"";if("string"!=typeof t)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(t))}}},b.convertCueToDOMTree=function(t,e){return t&&e?h(t,e):null};b.processCues=function(t,e,i,r){if(!t||!e||!i)return null;for(;i.firstChild;)i.removeChild(i.firstChild);if(!e.length)return null;var n=t.document.createElement("div");if(n.className="jw-text-track-container jw-reset",n.style.position="absolute",n.style.left="0",n.style.right="0",n.style.top="0",n.style.bottom="0",n.style.margin="1.5%",i.appendChild(n),function(t){for(var e=0;e=0&&(r.metadata.mpegts=n+t)}var a=this.getLiveLatency();null!==a&&(r.latency=a),(this.state===s.pb||this.seeking)&&this.trigger(s.S,r)}},click:function(e){this.trigger(s.n,e)},volumechange:function(){var e=this.video;this.trigger(s.V,{volume:Math.round(100*e.volume)}),this.trigger(s.M,{mute:e.muted})},seeked:function(){this.seeking&&(this.seeking=!1,this.trigger(s.R))},playing:function(){-1===this.stallTime&&this.setState(s.pb),this.trigger(s.fb)},pause:function(){this.state!==s.kb&&(this.video.ended||this.video.error||this.video.currentTime!==this.video.duration&&this.setState(s.ob))},progress:function(){var e=this.getDuration();if(!(e<=0||e===1/0)){var t=this.video.buffered;if(t&&0!==t.length){var i=Object(c.a)(t.end(t.length-1)/e,0,1);this.trigger(s.D,{bufferPercent:100*i,position:this.getCurrentTime(),duration:e,currentTime:this.video.currentTime,seekRange:this.getSeekRange()})}}},ratechange:function(){this.trigger(s.P,{playbackRate:this.video.playbackRate})},ended:function(){this.videoHeight=0,this.streamBitrate=-1,this.state!==s.mb&&this.state!==s.kb&&this.trigger(s.F)},loadeddata:function(){this.renderNatively&&this.setTextTracks(this.video.textTracks)}},o=i(10);function d(e){return e&&e.length?e.end(e.length-1):0}var l={container:null,volume:function(e){this.video.volume=Math.min(Math.max(0,e/100),1)},mute:function(e){this.video.muted=!!e,this.video.muted||this.video.removeAttribute("muted")},resize:function(e,t,i){var r=this.video,a=r.videoWidth,s=r.videoHeight;if(e&&t&&a&&s){var c={objectFit:"",width:"",height:""};if("uniform"===i){var u=e/t,d=a/s,l=Math.abs(u-d);l<.09&&l>.0025&&(c.objectFit="fill",i="exactfit")}if(n.Browser.ie||n.OS.iOS&&n.OS.version.major<9||n.Browser.androidNative)if("uniform"!==i){c.objectFit="contain";var h=e/t,f=a/s,v=1,T=1;"none"===i?v=T=h>f?Math.ceil(100*s/t)/100:Math.ceil(100*a/e)/100:"fill"===i?v=T=h>f?h/f:f/h:"exactfit"===i&&(h>f?(v=h/f,T=1):(v=1,T=f/h)),Object(o.e)(r,"matrix(".concat(v.toFixed(2),", 0, 0, ").concat(T.toFixed(2),", 0, 0)"))}else c.top=c.left=c.margin="",Object(o.e)(r,"");Object(o.d)(r,c)}},getContainer:function(){return this.container},setContainer:function(e){this.container=e,this.video.parentNode!==e&&e.appendChild(this.video)},remove:function(){this.stop(),this.destroy();var e=this.container;e&&e===this.video.parentNode&&e.removeChild(this.video)},atEdgeOfLiveStream:function(){if(!this.isLive())return!1;return d(this.video.buffered)-this.video.currentTime<=2}},h={eventsOn_:function(){},eventsOff_:function(){},attachMedia:function(){this.eventsOn_()},detachMedia:function(){return this.eventsOff_()}},f=i(62),v=i(5),T=i(53),g=i(7),m=i(63),k=i(60),b={TIT2:"title",TT2:"title",WXXX:"url",TPE1:"artist",TP1:"artist",TALB:"album",TAL:"album"};function p(e,t){for(var i,r,n,a=e.length,s="",c=t||0;c>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:s+=String.fromCharCode(i);break;case 12:case 13:r=e[c++],s+=String.fromCharCode((31&i)<<6|63&r);break;case 14:r=e[c++],n=e[c++],s+=String.fromCharCode((15&i)<<12|(63&r)<<6|(63&n)<<0)}return s}function y(e){var t=function(e){for(var t="0x",i=0;i>1|(8323072&t)>>2|(2130706432&t)>>3}function x(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:[]).reduce((function(e,t){if(!("value"in t)&&"data"in t&&t.data instanceof ArrayBuffer){var i=new Uint8Array(t.data),r=i.length;t={value:{key:"",data:""}};for(var n=10;n<14&&n0){var o=p(i.subarray(a,a+=c),0);if("PRIV"===t.value.key){if("com.apple.streaming.transportStreamTimestamp"===o){var d=1&y(i.subarray(a,a+=4)),l=y(i.subarray(a,a+=4))+(d?4294967296:0);t.value.data=l}else t.value.data=p(i,a+1);t.value.info=o}else t.value.info=o,t.value.data=p(i,a+1)}else{var h=i[a];t.value.data=1===h||2===h?function(e,t){for(var i=e.length-1,r="",n=t||0;n=0&&n[a].startTime>t.startTime;a--)i.unshift(n[a]),e.removeCue(n[a]);try{e.addCue(t),i.forEach((function(t){return e.addCue(t)}))}catch(e){console.error(e)}e.mode=r}(t,r)}else try{t.addCue(i)}catch(e){console.error(e)}}function j(e,t){t&&t.length&&Object(r.g)(t,(function(t){if(!(n.Browser.ie&&e&&/^(native|subtitle|cc)/.test(t._id))){n.Browser.ie&&"disabled"===t.mode||(t.mode="disabled",t.mode="hidden");for(var i=t.cues.length;i--;)t.removeCue(t.cues[i]);t.embedded||(t.mode="disabled"),t.inuse=!1}}))}function E(e){return"subtitles"===e||"captions"===e}function S(e){var t,i=Object(k.b)(e,this._unknownCount),n=i.label;if(this._unknownCount=i.unknownCount,this.renderNatively||"metadata"===e.kind){var a=this.video.textTracks;(t=Object(r.k)(a,{label:n}))||(t=this.video.addTextTrack(e.kind,n,e.language||"")),t.default=e.default,t.mode="disabled",t.inuse=!0}else(t=e).data=t.data||[];return t._id||(t._id=Object(k.a)(e,this._textTracks.length)),t}function L(e){this._textTracks.push(e),this._tracksById[e._id]=e}function I(){if(this._textTracks){var e=this._textTracks.filter((function(e){return e.embedded||"subs"===e.groupid}));this._initTextTracks(),e.forEach((function(e){this._tracksById[e._id]=e})),this._textTracks=e}}function N(e){this.triggerActiveCues(e.currentTarget.activeCues)}function R(e,t,i){var r=e.kind;this._cachedVTTCues[e._id]||(this._cachedVTTCues[e._id]={});var n,a=this._cachedVTTCues[e._id];switch(r){case"captions":case"subtitles":n=i||Math.floor(20*t.startTime);var s="_"+t.line,c=Math.floor(20*t.endTime),u=a[n+s]||a[n+1+s]||a[n-1+s];return!(u&&Math.abs(u-c)<=1)&&(a[n+s]=c,!0);case"metadata":var o=t.data?new Uint8Array(t.data).join(""):t.text;return!a[n=i||t.startTime+o]&&(a[n]=t.endTime,!0);default:return!1}}function M(e){if(e.length>this._textTracks.length)return!0;for(var t=0;t=0&&(T.retries=0),T.currentTime=p.currentTime,j&&O!==p.currentTime&&Z(p.currentTime),u.timeupdate.call(T),ve(),n.Browser.ie&&Y()},resize:Y,ended:function(){B=-1,Te(),u.ended.call(T)},loadedmetadata:function(){var e=T.getDuration();M&&e===1/0&&(e=0);var t={metadataType:"media",duration:e,height:p.videoHeight,width:p.videoWidth,seekRange:T.getSeekRange()};T.trigger(s.K,t),Y()},durationchange:function(){M||u.progress.call(T)},loadeddata:function(){var e;!function(){if(p.getStartDate){var e=p.getStartDate(),t=e.getTime?e.getTime():NaN;if(t!==T.startDateTime&&!isNaN(t)){T.startDateTime=t;var i=e.toISOString(),r=T.getSeekRange(),n=r.start,a=r.end,c={metadataType:"program-date-time",programDateTime:i,start:n,end:a},u=T.createCue(n,a,JSON.stringify(c));T.addVTTCue({type:"metadata",cue:u}),delete c.metadataType,T.trigger(s.L,{metadataType:"program-date-time",metadata:c})}}}(),u.loadeddata.call(T),function(e){if(S=null,!e)return;if(e.length){for(var t=0;t0&&(t=e.map((function(e,t){return{label:e.label||t}}))),t}function ie(e){T.currentTime=-1,m=e.minDvrWindow,b=e.sources,B=function(e){var i=Math.max(0,B),r=t.qualityLabel;if(e)for(var n=0;n0&&(w=-1,T.seek(e)),e>0&&p.currentTime!==e&&T.seek(e);var r=te(b);r&&T.trigger(s.I,{levels:r,currentQuality:B}),b.length&&"hls"!==b[0].type&&fe()}function ae(e){S=null,L=-1,y.reason||(y.reason="initial choice",y.level={}),_=!1;var t=document.createElement("source");t.src=e.file,p.src!==t.src&&(p.src=e.file)}function se(){p&&(T.disableTextTrack(),p.removeAttribute("preload"),p.removeAttribute("src"),Object(v.h)(p),Object(o.d)(p,{objectFit:""}),B=-1,!n.Browser.msie&&"load"in p&&p.load())}function ce(){var e=1/0;return["buffered","seekable"].forEach((function(t){for(var i=p[t],n=i?i.length:0;n--;){var a=Math.min(e,i.start(n));Object(r.p)(a)&&(e=a)}})),e}function ue(){var e=0;return["buffered","seekable"].forEach((function(t){for(var i=p[t],n=i?i.length:0;n--;){var a=Math.max(e,i.end(n));Object(r.p)(a)&&(e=a)}})),e}function oe(){for(var e=-1,t=0;t-1&&e1)&&function(e){z=e.end,G=Math.min(0,p.currentTime-z),$=Object(D.a)()}(t),Object(f.a)(t.end-t.start,m))return G}return e}(p.currentTime)},T.getDuration=function(){var e=p.duration;if(M&&e===1/0&&0===p.currentTime||isNaN(e))return 0;var t=ue();if(T.isLive()&&t){var i=t-ce();Object(f.a)(i,m)&&(e=-i)}return e},T.getSeekRange=function(){var e={start:0,end:p.duration};return p.seekable.length&&(e.end=ue(),e.start=ce()),e},T.getLiveLatency=function(){var e=null,t=ue();return T.isLive()&&t&&(e=t+(Object(D.a)()-$)/1e3-p.currentTime),e},this.stop=function(){Te(),se(),this.clearTracks(),n.Browser.ie&&p.pause(),this.setState(s.mb)},this.destroy=function(){E=q,J(k,p),this.removeTracksListener(p.audioTracks,"change",oe),this.removeTracksListener(p.textTracks,"change",T.textTrackChangeHandler),this.off()},this.init=function(e){T.retries=0,T.maxRetries=e.adType?0:3,ie(e);var t=b[B];(M=Object(a.a)(t))&&(T.supportsPlaybackRate=!1,k.waiting=q),T.eventsOn_(),b.length&&"hls"!==b[0].type&&this.sendMediaType(b),y.reason=""},this.preload=function(e){ie(e);var t=b[B],i=t.preload||"metadata";"none"!==i&&(p.setAttribute("preload",i),ae(t))},this.load=function(e){ie(e),ne(e.starttime),this.setupSideloadedTracks(e.tracks)},this.play=function(){return E(),re()},this.pause=function(){Te(),E=function(){if(p.paused&&p.currentTime&&T.isLive()){var e=ue(),t=e-ce(),i=!Object(f.a)(t,m),n=e-p.currentTime;if(i&&e&&(n>15||n<0)){if(C=Math.max(e-10,e-t),!Object(r.p)(C))return;Z(p.currentTime),p.currentTime=C}}},p.pause()},this.seek=function(e){var t=T.getSeekRange(),i=e;if(e<0&&(i+=t.end),_||(_=!!ue()),_){w=0;try{if(T.seeking=!0,T.isLive()&&Object(f.a)(t.end-t.start,m))if(G=Math.min(0,i-z),e<0)i+=Math.min(12,(Object(D.a)()-$)/1e3);C=i,Z(p.currentTime),p.currentTime=i}catch(e){T.seeking=!1,w=i}}else w=i,n.Browser.firefox&&p.paused&&re()},this.setVisibility=function(e){(e=!!e)||n.OS.android?Object(o.d)(T.container,{visibility:"visible",opacity:1}):Object(o.d)(T.container,{visibility:"",opacity:0})},this.setFullscreen=function(e){if(e=!!e){try{var t=p.webkitEnterFullscreen||p.webkitEnterFullScreen;t&&t.apply(p)}catch(e){return!1}return T.getFullScreen()}var i=p.webkitExitFullscreen||p.webkitExitFullScreen;return i&&i.apply(p),e},T.getFullScreen=function(){return j||!!p.webkitDisplayingFullscreen},this.setCurrentQuality=function(e){B!==e&&e>=0&&b&&b.length>e&&(B=e,y.reason="api",y.level={},this.trigger(s.J,{currentQuality:e,levels:te(b)}),t.qualityLabel=b[e].label,ne(p.currentTime||0),re())},this.setPlaybackRate=function(e){p.playbackRate=p.defaultPlaybackRate=e},this.getPlaybackRate=function(){return p.playbackRate},this.getCurrentQuality=function(){return B},this.getQualityLevels=function(){return Array.isArray(b)?b.map((function(e){return function(e){return{bitrate:e.bitrate,label:e.label,width:e.width,height:e.height}}(e)})):[]},this.getName=function(){return{name:Q}},this.setCurrentAudioTrack=le,this.getAudioTracks=function(){return S||[]},this.getCurrentAudioTrack=function(){return L}}Object(r.h)(z.prototype,T.a),z.getName=function(){return{name:"html5"}};t.default=z;var K=220001},57:function(e,t,i){"use strict";i.d(t,"a",(function(){return n}));var r=i(2);function n(e){var t=[],i=(e=Object(r.i)(e)).split("\r\n\r\n");1===i.length&&(i=e.split("\n\n"));for(var n=0;n0&&(n=0),i.length>n+1&&i[n+1]){var a=i[n],s=a.indexOf(" --\x3e ");s>0&&(t.begin=Object(r.g)(a.substr(0,s)),t.end=Object(r.g)(a.substr(s+5)),t.text=i.slice(n+1).join("\r\n"))}return t}},60:function(e,t,i){"use strict";function r(e,t){var i=e.kind||"cc";return e.default||e.defaulttrack?"default":e._id||e.file||i+t}function n(e,t){var i=e.label||e.name||e.language;return i||(i="Unknown CC",(t+=1)>1&&(i+=" ["+t+"]")),{label:i,unknownCount:t}}i.d(t,"a",(function(){return r})),i.d(t,"b",(function(){return n}))},61:function(e,t,i){"use strict";function r(e){return new Promise((function(t,i){if(e.paused)return i(n("NotAllowedError",0,"play() failed."));var r=function(){e.removeEventListener("play",a),e.removeEventListener("playing",s),e.removeEventListener("pause",s),e.removeEventListener("abort",s),e.removeEventListener("error",s)},a=function(){e.addEventListener("playing",s),e.addEventListener("abort",s),e.addEventListener("error",s),e.addEventListener("pause",s)},s=function(e){if(r(),"playing"===e.type)t();else{var a='The play() request was interrupted by a "'.concat(e.type,'" event.');"error"===e.type?i(n("NotSupportedError",9,a)):i(n("AbortError",20,a))}};e.addEventListener("play",a)}))}function n(e,t,i){var r=new Error(i);return r.name=e,r.code=t,r}i.d(t,"a",(function(){return r}))},62:function(e,t,i){"use strict";function r(e,t){return e!==1/0&&Math.abs(e)>=Math.max(a(t),0)}function n(e,t){var i="VOD";return e===1/0?i="LIVE":e<0&&(i=r(e,a(t))?"DVR":"LIVE"),i}function a(e){return void 0===e?120:Math.max(e,0)}i.d(t,"a",(function(){return r})),i.d(t,"b",(function(){return n}))},63:function(e,t,i){"use strict";var r=i(64),n=i(16),a=i(22),s=i(4),c=i(57),u=i(2),o=i(1);function d(e){throw new o.n(null,e)}function l(e,t,r){e.xhr=Object(a.a)(e.file,(function(a){!function(e,t,r,a){var l,h,v=e.responseXML?e.responseXML.firstChild:null;if(v)for("xml"===Object(s.b)(v)&&(v=v.nextSibling);v.nodeType===v.COMMENT_NODE;)v=v.nextSibling;try{if(v&&"tt"===Object(s.b)(v))l=function(e){e||d(306007);var t=[],i=e.getElementsByTagName("p"),r=30,n=e.getElementsByTagName("tt");if(n&&n[0]){var a=parseFloat(n[0].getAttribute("ttp:frameRate"));isNaN(a)||(r=a)}i||d(306005),i.length||(i=e.getElementsByTagName("tt:p")).length||(i=e.getElementsByTagName("tts:p"));for(var s=0;s\s+<").replace(/(<\/?)tts?:/g,"$1").replace(//g,"\r\n");if(v){var T=c.getAttribute("begin"),g=c.getAttribute("dur"),m=c.getAttribute("end"),k={begin:Object(u.g)(T,r),text:v};m?k.end=Object(u.g)(m,r):g&&(k.end=k.begin+Object(u.g)(g,r)),t.push(k)}}return t.length||d(306005),t}(e.responseXML),h=f(l),delete t.xhr,r(h);else{var T=e.responseText;T.indexOf("WEBVTT")>=0?i.e(10).then(function(e){return i(92).default}.bind(null,i)).catch(Object(n.c)(301131)).then((function(e){var i=new e(window);h=[],i.oncue=function(e){h.push(e)},i.onflush=function(){delete t.xhr,r(h)},i.parse(T)})).catch((function(e){delete t.xhr,a(Object(o.v)(null,o.b,e))})):(l=Object(c.a)(T),h=f(l),delete t.xhr,r(h))}}catch(e){delete t.xhr,a(Object(o.v)(null,o.b,e))}}(a,e,t,r)}),(function(e,t,i,n){r(Object(o.u)(n,o.b))}))}function h(e){e&&e.forEach((function(e){var t=e.xhr;t&&(t.onload=null,t.onreadystatechange=null,t.onerror=null,"abort"in t&&t.abort()),delete e.xhr}))}function f(e){return e.map((function(e){return new r.a(e.begin,e.end,e.text)}))}i.d(t,"c",(function(){return l})),i.d(t,"a",(function(){return h})),i.d(t,"b",(function(){return f}))},64:function(e,t,i){"use strict";var r=window.VTTCue;function n(e){if("string"!=typeof e)return!1;return!!{start:!0,middle:!0,end:!0,left:!0,right:!0}[e.toLowerCase()]&&e.toLowerCase()}if(!r){(r=function(e,t,i){var r=this;r.hasBeenReset=!1;var a="",s=!1,c=e,u=t,o=i,d=null,l="",h=!0,f="auto",v="start",T="auto",g=100,m="middle";Object.defineProperty(r,"id",{enumerable:!0,get:function(){return a},set:function(e){a=""+e}}),Object.defineProperty(r,"pauseOnExit",{enumerable:!0,get:function(){return s},set:function(e){s=!!e}}),Object.defineProperty(r,"startTime",{enumerable:!0,get:function(){return c},set:function(e){if("number"!=typeof e)throw new TypeError("Start time must be set to a number.");c=e,this.hasBeenReset=!0}}),Object.defineProperty(r,"endTime",{enumerable:!0,get:function(){return u},set:function(e){if("number"!=typeof e)throw new TypeError("End time must be set to a number.");u=e,this.hasBeenReset=!0}}),Object.defineProperty(r,"text",{enumerable:!0,get:function(){return o},set:function(e){o=""+e,this.hasBeenReset=!0}}),Object.defineProperty(r,"region",{enumerable:!0,get:function(){return d},set:function(e){d=e,this.hasBeenReset=!0}}),Object.defineProperty(r,"vertical",{enumerable:!0,get:function(){return l},set:function(e){var t=function(e){return"string"==typeof e&&(!!{"":!0,lr:!0,rl:!0}[e.toLowerCase()]&&e.toLowerCase())}(e);if(!1===t)throw new SyntaxError("An invalid or illegal string was specified.");l=t,this.hasBeenReset=!0}}),Object.defineProperty(r,"snapToLines",{enumerable:!0,get:function(){return h},set:function(e){h=!!e,this.hasBeenReset=!0}}),Object.defineProperty(r,"line",{enumerable:!0,get:function(){return f},set:function(e){if("number"!=typeof e&&"auto"!==e)throw new SyntaxError("An invalid number or illegal string was specified.");f=e,this.hasBeenReset=!0}}),Object.defineProperty(r,"lineAlign",{enumerable:!0,get:function(){return v},set:function(e){var t=n(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");v=t,this.hasBeenReset=!0}}),Object.defineProperty(r,"position",{enumerable:!0,get:function(){return T},set:function(e){if(e<0||e>100)throw new Error("Position must be between 0 and 100.");T=e,this.hasBeenReset=!0}}),Object.defineProperty(r,"size",{enumerable:!0,get:function(){return g},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");g=e,this.hasBeenReset=!0}}),Object.defineProperty(r,"align",{enumerable:!0,get:function(){return m},set:function(e){var t=n(e);if(!t)throw new SyntaxError("An invalid or illegal string was specified.");m=t,this.hasBeenReset=!0}}),r.displayState=void 0}).prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)}}t.a=r}}]); \ No newline at end of file diff --git a/ui/v2.5/public/jwplayer/vttparser.js b/ui/v2.5/public/jwplayer/vttparser.js new file mode 100644 index 00000000000..f285f794987 --- /dev/null +++ b/ui/v2.5/public/jwplayer/vttparser.js @@ -0,0 +1,95 @@ +/*! +JW Player version 8.11.5 +Copyright (c) 2019, JW Player, All Rights Reserved +https://github.com/jwplayer/jwplayer/blob/v8.11.5/README.md + +This source code and its use and distribution is subject to the terms and conditions of the applicable license agreement. +https://www.jwplayer.com/tos/ + +This product includes portions of other software. For the full text of licenses, see below: + +JW Player Third Party Software Notices and/or Additional Terms and Conditions + +************************************************************************************************** +The following software is used under Apache License 2.0 +************************************************************************************************** + +vtt.js v0.13.0 +Copyright (c) 2019 Mozilla (http://mozilla.org) +https://github.com/mozilla/vtt.js/blob/v0.13.0/LICENSE + +* * * + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. + +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and +limitations under the License. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under MIT license +************************************************************************************************** + +Underscore.js v1.6.0 +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +https://github.com/jashkenas/underscore/blob/1.6.0/LICENSE + +Backbone backbone.events.js v1.1.2 +Copyright (c) 2010-2014 Jeremy Ashkenas, DocumentCloud +https://github.com/jashkenas/backbone/blob/1.1.2/LICENSE + +Promise Polyfill v7.1.1 +Copyright (c) 2014 Taylor Hakes and Forbes Lindesay +https://github.com/taylorhakes/promise-polyfill/blob/v7.1.1/LICENSE + +can-autoplay.js v3.0.0 +Copyright (c) 2017 video-dev +https://github.com/video-dev/can-autoplay/blob/v3.0.0/LICENSE + +* * * + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +************************************************************************************************** +The following software is used under W3C license +************************************************************************************************** + +Intersection Observer v0.5.0 +Copyright (c) 2016 Google Inc. (http://google.com) +https://github.com/w3c/IntersectionObserver/blob/v0.5.0/LICENSE.md + +* * * + +W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE +Status: This license takes effect 13 May, 2015. + +This work is being provided by the copyright holders under the following license. + +License +By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions. + +Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications: + +The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. + +Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included. + +Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [YEAR] W3C® (MIT, ERCIM, Keio, Beihang)." + +Disclaimers +THIS WORK IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + +COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT. + +The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders. +*/ +(window.webpackJsonpjwplayer=window.webpackJsonpjwplayer||[]).push([[10],{92:function(t,e,r){"use strict";r.r(e);var n=r(42),i=r(64),s=/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/,a=/^-?\d+$/,u=/\r\n|\n/,o=/^NOTE($|[ \t])/,c=/^[^\sa-zA-Z-]+/,l=/:/,f=/\s/,h=/^\s+/,g=/-->/,d=/^WEBVTT([ \t].*)?$/,p=function(t,e){this.window=t,this.state="INITIAL",this.buffer="",this.decoder=e||new b,this.regionList=[],this.maxCueBatch=1e3};function b(){return{decode:function(t){if(!t)return"";if("string"!=typeof t)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(t))}}}function v(){this.values=Object.create(null)}v.prototype={set:function(t,e){this.get(t)||""===e||(this.values[t]=e)},get:function(t,e,r){return r?this.has(t)?this.values[t]:e[r]:this.has(t)?this.values[t]:e},has:function(t){return t in this.values},alt:function(t,e,r){for(var n=0;n=0&&e<=100&&(this.set(t,e),!0)}};var E=new i.a(0,0,0),w="middle"===E.align?"middle":"center";function T(t,e,r){var n=t;function i(){var e=function(t){function e(t,e,r,n){return 3600*(0|t)+60*(0|e)+(0|r)+(0|n)/1e3}var r=t.match(s);return r?r[3]?e(r[1],r[2],r[3].replace(":",""),r[4]):r[1]>59?e(r[1],r[2],0,r[4]):e(0,r[1],r[2],r[4]):null}(t);if(null===e)throw new Error("Malformed timestamp: "+n);return t=t.replace(c,""),e}function a(){t=t.replace(h,"")}if(a(),e.startTime=i(),a(),"--\x3e"!==t.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): "+n);t=t.substr(3),a(),e.endTime=i(),a(),function(t,e){var n=new v;!function(t,e,r,n){for(var i=n?t.split(n):[t],s=0;s<=i.length;s+=1)if("string"==typeof i[s]){var a=i[s].split(r);if(2===a.length)e(a[0],a[1])}}(t,(function(t,e){switch(t){case"region":for(var i=r.length-1;i>=0;i--)if(r[i].id===e){n.set(t,r[i].region);break}break;case"vertical":n.alt(t,e,["rl","lr"]);break;case"line":var s=e.split(","),a=s[0];n.integer(t,a),n.percent(t,a)&&n.set("snapToLines",!1),n.alt(t,a,["auto"]),2===s.length&&n.alt("lineAlign",s[1],["start",w,"end"]);break;case"position":var u=e.split(",");n.percent(t,u[0]),2===u.length&&n.alt("positionAlign",u[1],["start",w,"end","line-left","line-right","auto"]);break;case"size":n.percent(t,e);break;case"align":n.alt(t,e,["start",w,"end","left","right"])}}),l,f),e.region=n.get("region",null),e.vertical=n.get("vertical","");var i=n.get("line","auto");"auto"===i&&-1===E.line&&(i=-1),e.line=i,e.lineAlign=n.get("lineAlign","start"),e.snapToLines=n.get("snapToLines",!0),e.size=n.get("size",100),e.align=n.get("align",w);var s=n.get("position","auto");"auto"===s&&50===E.position&&(s="start"===e.align||"left"===e.align?0:"end"===e.align||"right"===e.align?100:50),e.position=s}(t,e)}p.prototype={parse:function(t,e){var r,s=this;function a(){for(var t=s.buffer,e=0;esbeZU6}xbQe4#00$}MRUhJ2-~ys*xlRP?Y!J?v)(j-S>Da7NTKrNC=q7q0HMNaFu5J8GqSP2mXq69Co;uFp9d-e3p zKJHGeN?A3t_1l^5@Ad!w-}C?fzFO(3OEy{K#d3kq>k5UBBqzVScH*+awkrySwiic{ zcz=jbr`8G6&LJWZe7($YI7ywPIo$Dwrz^$L;UumP`=RU27L$6C96FOhjDZFQ8aQ$d zbkc@BzN}EKluIJ<$`xl?zj5l7N1o3h#XtiC4Gc6e(7-?g0}Tu`Fwnq20|O2G%4#5O zFDcxB^hfI&d{KWN)%Sgje%`OYAMFcYqMv8=_lI=`CLjHJ@HNoDKm!8}3^Xv%z(4~7 z4Gc6e(7-?g0}Tu`Fwnq21OE>iaNI&+H|2g_81S6`8~gv;zg{Rj4_|?Oa5wCQ_d*@s z0vq9csKCka;K_wT3NCDb)8IJx&ay(`C3q2@h1=m)ct6|%H$Vti!?|z@yn0fh@KZPl z&%)Q>06Yfwz^(8{a5H#tIc$LSFb=1~3Gn?B3x)5&EAa2I4?YR^z+SiucEc?&19cdK z6>ui}78Ky%35CMT@Ll*fcntQ#XW(P78+L#P?}6Wk&2TPE!fIFsOW~#C3xy})0DKi5 zg8SfJ_*1wJrr{d65H`Si7=q>SMmPq(^J}ybJPLmUpM-m0FWd!x2JeFy-VGPP8aM@h zy0lREG5iRgg~#ClJO-bJ-Ebqc;5~2|Y=TQ+J^T(Vhd01!uoRv-j`Z+pxD9rK4_CvL z@OGGlbKrDX4sV1X9a|{80MEm7@OAhncnBVZ`{7Qw1O5Wu54XT}cqd#87r=RNE=tJ%Wz(*CqDc zo(Q9T5ms*8SlL)zFDhHuRj~N7_%s4<)@}sR%!D-)JMBsNa%(3^{l<2?9)+nFrW013 z|6Z&DT|a3D&h`nJRJ>YURKcEW?c}lTxGu_`u*#+OtW^?!lZ9g4iCsJK>Zu=vM3WM< zoOsF)bwsC=Mk2RG%I+(<*zg0Sl2ST;=*2@;G2-G9Z5@T(x27~zU-jRz>QNBI6ILfo zyj0c8vQlq0wOy}{wnY{bRv3kz3S2$WjHbO<cPwl7xQ=!rJELBdODceuImJvXO z+Oa>?M5RJIMDkoewQHR;ovW6TiKFW&^6IH#KJyvhO`8*z(PGmxrIc1p7N&jIi;C^o zoA$k#Vmpe{*zr>%SEkll5Y@Md`kH!_vizdjR@%;P_@XliO^9g2!&ywbVj5fi(xFEJ9R&$BbSP!LWCW*yxlfotrt(awbH0PVcF%1XsoPn+kw{*O(@%$w^8D& z4&&64DCnegn&MRKyQ=vEr{)D_00gM9U+Rib3Q2SWIkmu>(?~66);6`&@$&`8UO=Cn zmc7-q-aKuxSc8aGRTDwecU>PLiA9+rk*?X8Ql*%bc0^IjW;!Q$eu1iEuR)*%6ZZ*}39bcV30hE~tX+Q* z4K0|sPoSz8siGydK;=aQD!-N{TQG5-K$+lLpppt#ZD#ti?0Z=&%L%1YS|ulv)x{Yn z2vnl^`f!$oT#e3Zr?woLiNC|MdY*(*T7GDo$zxm(Z~dGpj)_UEnr5=ijdZ=PDbX2D zsgI<#6ZlgsCM`x)AP1;kY4rQ<+Pd0G#n`t}v5;oHM2KX@&}i0UjgaOILnIfdy1ag={Fvi{_efx+z}Rt!RfG zC2Zq_7)dLN(x%*ii6jXv&X+eP&)ow$pA0o}Fw@xa&C&589mF`G`a zh_k{^7HW~ZU1;}Bs;62jl5~6ECBxHB?2A#CteBh=mek`Y2*`N8z*^Ap+Odzy#jL|> zFSD4NM-z>?!>*Sy97R5JVu-OeEas%1!0SU^(=a={BDd`c688T(Y_}@*q_F?Z`TcX) z^9SIo@F?5~H^TL>6E1;q7=bDr4F|FHUxx3(-@zWZ13nHRybIm|*T5=xJ-iN8R!+mf!?1c}&PVhna z4eC&XEpR>zLlK1kU@0ttqo4pU;sE#f{S4kL|eZeUc?XZ0tg?%es~c63hsoD!)-7F*TV0?`A~sXa4IZ?<6!U^Xkeg$ zfd&Q|_?6Xw*nX-lXqx+pe^B}$dR{H`(DR;j{m;smp*Gj{f`NSjy9&Gd-e{kQ$frM~ z|2Zph(OfWugyTi{YZA3LT`(W~io_McnbT&%GM2Ap)uLHDX*zh8*c-~fGS*={Rdd#s z$A&7Ep~~1$apdeF9oQRCTJXIRsusmAwo~l5ekYl*s>ayr?&&cOr1x=UwKP&1Vc#vi zLsr+gkVcU$eNRegoQXBN?Sz?uKpnb{Y$@OR%8*qqi+`1I1TU6HF^@$$vC~dtzm0!3 zmAl|Ho(R*XU2pnH5b3A2Q&@P>vNb?9_nt9adZf>fg&Oz#( z$)MxS$FU;F( z#F-}c|9-uN`B&`ur$N~M_rh+t2_mS$rLX~ta2mXd4gYO;93Ftr!e>C({~v@|@Znn6 z2qUl@Ud49*3H%uT10IJ5;8XB15cdSGgBA!Mz-G7<-U?+{0jI+MQi*TEKfqtYAA$>) z!5EwcE8t8x5q^LT{tb8pz6ipW|633?{M+Gj*bJLsJ^TRM`UUt3JOW>WJ@6-xKm;ua z;3{}CRG|zdI17Fgj)f&~G`x%r{xpa?0Q=xk_&nSV!d~A4ABCG>E1U*L!GB_NKLuZa zzlQrkocDhaguR}CIP-79RUqv4Ntgf|mctVGIewp?!T-RwU_b1GFT*47S=bAE;1h5g zycf2?MmQY~a(@2`{1-d{UxJ6>3ve&o4!1%Zu7EO}0ly964!}w96VB7t&ob_*k4X_TXP=PnV59$Bk zhyR9y@J-kU55VW(F8B!C1|NVB-UaUfF?Ozoo{w2s^!zv8oh0P=PqgD&O#SoC+-Cl* zi0y_Pz&csBlgQ33){U+bQOrUt56IPt?Mgk|#fiH-%Vxk!PqSLH=A2A(eZh;x603_8 zXU)=C&$^XAs#eL>|8BwNWZB}=8~L)jWT*ByG3H2o2r>JDjcn|`M2PA0dh?k{rw);d*@|w{ zhVu)l_Mbfw=bq3nCV!uTa#4?5Y|WLIpf5k?!9J)TfE4bCZ}{VsUJ2X zA?)F$<9M@~PQ{+OGEj8AT1SqVZZ|Po%KV8wJy{)JWxF8G&dl`{JraBG%IHHR)fE%Y zMi|jTTv@BvdirLy@&|e|nDBOu31r)ZCBHbt4MbT|M{;6dsB&M!R+pxVLBv*APuX+g zsCimkdB~!u+d7M^2ikO*J0?sgT(8yFGZghzm#tk{4q4FF8F8Bni)VpZma9U_wZsv& zzA=+?z~t`Gtdo~$wDF zaqcY|jcbv_4YaNxLX1O;@=Gk*G`*UobO|OwTuW;+GuAni&HA@-5v-Rk z0x@RLD~pf3Z4(yFkX=U0&Fp3s%GP=_7??~}iA;J2!@T`LUeyyV-+SF_ zPDeIbbIl}|^N4!tnMh@mSjsapVHMY@eV}ySnTPI@)V(2=tFo@^ykp1on_sYD=Jtmk z*;(5}?X=I#h--W!WmT0UlRiI4dxY0rt$W|4$3;{wj;Ye5e5$33lo##HG1b&`!%9#K)|Q&hG^BpYi)`;M}%oAue; oP>!P%m&97TI_7#)!Xw)=YY7FJH{8U^Z5+9soZb5v6_ ( +
    + + +
    + + + + {/* */} + + + + + + + + +
    +
    +
    +); diff --git a/ui/v2.5/src/components/ErrorBoundary.tsx b/ui/v2.5/src/components/ErrorBoundary.tsx new file mode 100644 index 00000000000..eb47f4547b5 --- /dev/null +++ b/ui/v2.5/src/components/ErrorBoundary.tsx @@ -0,0 +1,34 @@ +import React from "react"; + +export class ErrorBoundary extends React.Component { + constructor(props: any) { + super(props); + this.state = { error: null, errorInfo: null }; + } + + public componentDidCatch(error: any, errorInfo: any) { + this.setState({ + error, + errorInfo, + }); + } + + public render() { + if (this.state.errorInfo) { + // Error path + return ( +
    +

    Something went wrong.

    +
    + {this.state.error && this.state.error.toString()} +
    + {this.state.errorInfo.componentStack} +
    +
    + ); + } + + // Normally, just render children + return this.props.children; + } +} diff --git a/ui/v2.5/src/components/Galleries/Galleries.tsx b/ui/v2.5/src/components/Galleries/Galleries.tsx new file mode 100644 index 00000000000..51db624b592 --- /dev/null +++ b/ui/v2.5/src/components/Galleries/Galleries.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import { Route, Switch } from "react-router-dom"; +import { Gallery } from "./Gallery"; +import { GalleryList } from "./GalleryList"; + +const Galleries = () => ( + + + + +); + +export default Galleries; diff --git a/ui/v2.5/src/components/Galleries/Gallery.tsx b/ui/v2.5/src/components/Galleries/Gallery.tsx new file mode 100644 index 00000000000..57890d875a3 --- /dev/null +++ b/ui/v2.5/src/components/Galleries/Gallery.tsx @@ -0,0 +1,30 @@ +import _ from "lodash"; +import React, { useEffect, useState } from "react"; +import { Spinner } from 'react-bootstrap'; +import * as GQL from "../../core/generated-graphql"; +import { StashService } from "../../core/StashService"; +import { IBaseProps } from "../../models"; +import { GalleryViewer } from "./GalleryViewer"; + +interface IProps extends IBaseProps {} + +export const Gallery: React.FC = (props: IProps) => { + const [gallery, setGallery] = useState>({}); + const [isLoading, setIsLoading] = useState(false); + + const { data, error, loading } = StashService.useFindGallery(props.match.params.id); + + useEffect(() => { + setIsLoading(loading); + if (!data || !data.findGallery || !!error) { return; } + setGallery(data.findGallery); + }, [data]); + + if (!data || !data.findGallery || isLoading) { return ; } + if (!!error) { return <>{error.message}; } + return ( +
    + +
    + ); +}; diff --git a/ui/v2.5/src/components/Galleries/GalleryList.tsx b/ui/v2.5/src/components/Galleries/GalleryList.tsx new file mode 100644 index 00000000000..fa3ec30af60 --- /dev/null +++ b/ui/v2.5/src/components/Galleries/GalleryList.tsx @@ -0,0 +1,54 @@ +import _ from "lodash"; +import React from "react"; +import { Table } from 'react-bootstrap'; +import { QueryHookResult } from "react-apollo-hooks"; +import { Link } from "react-router-dom"; +import { FindGalleriesQuery, FindGalleriesVariables } from "../../core/generated-graphql"; +import { ListHook } from "../../hooks/ListHook"; +import { IBaseProps } from "../../models/base-props"; +import { ListFilterModel } from "../../models/list-filter/filter"; +import { DisplayMode, FilterMode } from "../../models/list-filter/types"; + +interface IProps extends IBaseProps {} + +export const GalleryList: React.FC = (props: IProps) => { + const listData = ListHook.useList({ + filterMode: FilterMode.Galleries, + props, + renderContent, + }); + + function renderContent(result: QueryHookResult, filter: ListFilterModel) { + if (!result.data || !result.data.findGalleries) { return; } + if (filter.displayMode === DisplayMode.Grid) { + return

    TODO

    ; + } else if (filter.displayMode === DisplayMode.List) { + return ( + + + + + + + + + {result.data.findGalleries.galleries.map((gallery) => ( + + + + + ))} + +
    PreviewPath
    + + {gallery.files.length > 0 ? : undefined} + + {gallery.path}
    + ); + } else if (filter.displayMode === DisplayMode.Wall) { + return

    TODO

    ; + } + } + + return listData.template; +}; diff --git a/ui/v2.5/src/components/Galleries/GalleryViewer.tsx b/ui/v2.5/src/components/Galleries/GalleryViewer.tsx new file mode 100644 index 00000000000..5a1e7a3ef70 --- /dev/null +++ b/ui/v2.5/src/components/Galleries/GalleryViewer.tsx @@ -0,0 +1,47 @@ +import _ from "lodash"; +import React, { FunctionComponent, useState } from "react"; +import Lightbox from "react-images"; +import Gallery from "react-photo-gallery"; +import * as GQL from "../../core/generated-graphql"; + +interface IProps { + gallery: GQL.GalleryDataFragment; +} + +export const GalleryViewer: FunctionComponent = (props: IProps) => { + const [currentImage, setCurrentImage] = useState(0); + const [lightboxIsOpen, setLightboxIsOpen] = useState(false); + + function openLightbox(event: any, obj: any) { + setCurrentImage(obj.index); + setLightboxIsOpen(true); + } + function closeLightbox() { + setCurrentImage(0); + setLightboxIsOpen(false); + } + function gotoPrevious() { + setCurrentImage(currentImage - 1); + } + function gotoNext() { + setCurrentImage(currentImage + 1); + } + + const photos = props.gallery.files.map((file) => ({src: file.path || "", caption: file.name})); + const thumbs = props.gallery.files.map((file) => ({src: `${file.path}?thumb=true` || "", width: 1, height: 1})); + return ( +
    + + window.open(photos[currentImage].src, "_blank")} + width={9999} + /> +
    + ); +}; diff --git a/ui/v2.5/src/components/MainNavbar.tsx b/ui/v2.5/src/components/MainNavbar.tsx new file mode 100644 index 00000000000..410d69b280b --- /dev/null +++ b/ui/v2.5/src/components/MainNavbar.tsx @@ -0,0 +1,94 @@ +import { Nav, Navbar, Button } from "react-bootstrap"; +import { LinkContainer } from 'react-router-bootstrap'; +import React from "react"; +import { Link, useLocation } from "react-router-dom"; + +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { IconName } from '@fortawesome/fontawesome-svg-core'; + +interface IMenuItem { + text: string; + href: string; + icon: IconName; +} + +const menuItems:IMenuItem[] = [ +{ + icon: "play-circle", + text: "Scenes", + href: "/scenes" +}, +{ + href: "/scenes/markers", + icon: "map-marker-alt", + text: "Markers" +}, +{ + href: "/galleries", + icon: "image", + text: "Galleries" +}, +{ + href: "/performers", + icon: "user", + text: "Performers" +}, +{ + href: "/studios", + icon: "video", + text: "Studios" +}, +{ + href: "/tags", + icon: "tag", + text: "Tags" +} +]; + +export const MainNavbar: React.FC = () => { + const location = useLocation(); + + const path = location.pathname === '/performers' + ? '/performers/new' + : location.pathname === '/studios' + ? '/studios/new' : null; + const newButton = path === null ? '' : ( + + + + ); + + return ( + + + + + + + + + + ); +}; diff --git a/ui/v2.5/src/components/PageNotFound.tsx b/ui/v2.5/src/components/PageNotFound.tsx new file mode 100644 index 00000000000..8e7cfb32ecb --- /dev/null +++ b/ui/v2.5/src/components/PageNotFound.tsx @@ -0,0 +1,7 @@ +import React, { FunctionComponent } from "react"; + +export const PageNotFound: FunctionComponent = () => { + return ( +

    Page not found.

    + ); +}; diff --git a/ui/v2.5/src/components/Settings/Settings.tsx b/ui/v2.5/src/components/Settings/Settings.tsx new file mode 100644 index 00000000000..61f8294c9ad --- /dev/null +++ b/ui/v2.5/src/components/Settings/Settings.tsx @@ -0,0 +1,50 @@ +import { + Card, + Tab, + Tabs, +} from "@blueprintjs/core"; +import queryString from "query-string"; +import React, { FunctionComponent, useEffect, useState } from "react"; +import { IBaseProps } from "../../models"; +import { SettingsAboutPanel } from "./SettingsAboutPanel"; +import { SettingsConfigurationPanel } from "./SettingsConfigurationPanel"; +import { SettingsInterfacePanel } from "./SettingsInterfacePanel"; +import { SettingsLogsPanel } from "./SettingsLogsPanel"; +import { SettingsTasksPanel } from "./SettingsTasksPanel/SettingsTasksPanel"; + +interface IProps extends IBaseProps {} + +type TabId = "configuration" | "tasks" | "logs" | "about"; + +export const Settings: FunctionComponent = (props: IProps) => { + const [tabId, setTabId] = useState(getTabId()); + + useEffect(() => { + const location = Object.assign({}, props.history.location); + location.search = queryString.stringify({tab: tabId}, {encode: false}); + props.history.replace(location); + }, [tabId]); + + function getTabId(): TabId { + const queryParams = queryString.parse(props.location.search); + if (!queryParams.tab || typeof queryParams.tab !== "string") { return "tasks"; } + return queryParams.tab as TabId; + } + + return ( + + setTabId(newId as TabId)} + defaultSelectedTabId={getTabId()} + > + } /> + } /> + } /> + } /> + } /> + + + ); +}; diff --git a/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx b/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx new file mode 100644 index 00000000000..f995b0552f5 --- /dev/null +++ b/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx @@ -0,0 +1,57 @@ +import { + H1, + H4, + H6, + HTMLTable, + Spinner, + Tag, +} from "@blueprintjs/core"; +import React, { FunctionComponent } from "react"; +import * as GQL from "../../core/generated-graphql"; +import { TextUtils } from "../../utils/text"; +import { StashService } from "../../core/StashService"; + +interface IProps {} + +export const SettingsAboutPanel: FunctionComponent = (props: IProps) => { + const { data, error, loading } = StashService.useVersion(); + + function maybeRenderTag() { + if (!data || !data.version || !data.version.version) { return; } + return ( + + Version: + {data.version.version} + + ); + } + + function renderVersion() { + if (!data || !data.version) { return; } + return ( + <> + + + {maybeRenderTag()} + + Build hash: + {data.version.hash} + + + Build time: + {data.version.build_time} + + + + + ); + } + return ( + <> +

    About

    + {!data || loading ? : undefined} + {!!error ? error.message : undefined} + {renderVersion()} + + ); +}; diff --git a/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx b/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx new file mode 100644 index 00000000000..bf52604b37f --- /dev/null +++ b/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx @@ -0,0 +1,292 @@ +import { + AnchorButton, + Button, + Divider, + FormGroup, + H1, + H4, + H6, + InputGroup, + Spinner, + Tag, + Checkbox, + HTMLSelect, +} from "@blueprintjs/core"; +import React, { FunctionComponent, useEffect, useState } from "react"; +import * as GQL from "../../core/generated-graphql"; +import { StashService } from "../../core/StashService"; +import { ErrorUtils } from "../../utils/errors"; +import { ToastUtils } from "../../utils/toasts"; +import { FolderSelect } from "../Shared/FolderSelect/FolderSelect"; + +interface IProps {} + +export const SettingsConfigurationPanel: FunctionComponent = (props: IProps) => { + // Editing config state + const [stashes, setStashes] = useState([]); + const [databasePath, setDatabasePath] = useState(undefined); + const [generatedPath, setGeneratedPath] = useState(undefined); + const [maxTranscodeSize, setMaxTranscodeSize] = useState(undefined); + const [maxStreamingTranscodeSize, setMaxStreamingTranscodeSize] = useState(undefined); + const [username, setUsername] = useState(undefined); + const [password, setPassword] = useState(undefined); + const [logFile, setLogFile] = useState(); + const [logOut, setLogOut] = useState(true); + const [logLevel, setLogLevel] = useState("Info"); + const [logAccess, setLogAccess] = useState(true); + const [excludes, setExcludes] = useState<(string)[]>([]); + + const { data, error, loading } = StashService.useConfiguration(); + + const updateGeneralConfig = StashService.useConfigureGeneral({ + stashes, + databasePath, + generatedPath, + maxTranscodeSize, + maxStreamingTranscodeSize, + username, + password, + logFile, + logOut, + logLevel, + logAccess, + excludes, + + }); + + useEffect(() => { + if (!data || !data.configuration || !!error) { return; } + const conf = StashService.nullToUndefined(data.configuration) as GQL.ConfigDataFragment; + if (!!conf.general) { + setStashes(conf.general.stashes || []); + setDatabasePath(conf.general.databasePath); + setGeneratedPath(conf.general.generatedPath); + setMaxTranscodeSize(conf.general.maxTranscodeSize); + setMaxStreamingTranscodeSize(conf.general.maxStreamingTranscodeSize); + setUsername(conf.general.username); + setPassword(conf.general.password); + setLogFile(conf.general.logFile); + setLogOut(conf.general.logOut); + setLogLevel(conf.general.logLevel); + setLogAccess(conf.general.logAccess); + setExcludes(conf.general.excludes); + } + }, [data]); + + function onStashesChanged(directories: string[]) { + setStashes(directories); + } + + function excludeRegexChanged(idx: number, value: string) { + const newExcludes = excludes.map((regex, i)=> { + const ret = ( idx !== i ) ? regex : value ; + return ret + }) + setExcludes(newExcludes); + } + + function excludeRemoveRegex(idx: number) { + const newExcludes = excludes.filter((regex, i) => i!== idx ); + + setExcludes(newExcludes); + } + + function excludeAddRegex() { + const demo = "sample\\.mp4$" + const newExcludes = excludes.concat(demo); + + setExcludes(newExcludes); + } + + + async function onSave() { + try { + const result = await updateGeneralConfig(); + console.log(result); + ToastUtils.success("Updated config"); + } catch (e) { + ErrorUtils.handle(e); + } + } + + const transcodeQualities = [ + GQL.StreamingResolutionEnum.Low, + GQL.StreamingResolutionEnum.Standard, + GQL.StreamingResolutionEnum.StandardHd, + GQL.StreamingResolutionEnum.FullHd, + GQL.StreamingResolutionEnum.FourK, + GQL.StreamingResolutionEnum.Original + ].map(resolutionToString); + + function resolutionToString(r : GQL.StreamingResolutionEnum | undefined) { + switch (r) { + case GQL.StreamingResolutionEnum.Low: return "240p"; + case GQL.StreamingResolutionEnum.Standard: return "480p"; + case GQL.StreamingResolutionEnum.StandardHd: return "720p"; + case GQL.StreamingResolutionEnum.FullHd: return "1080p"; + case GQL.StreamingResolutionEnum.FourK: return "4k"; + case GQL.StreamingResolutionEnum.Original: return "Original"; + } + + return "Original"; + } + + function translateQuality(quality : string) { + switch (quality) { + case "240p": return GQL.StreamingResolutionEnum.Low; + case "480p": return GQL.StreamingResolutionEnum.Standard; + case "720p": return GQL.StreamingResolutionEnum.StandardHd; + case "1080p": return GQL.StreamingResolutionEnum.FullHd; + case "4k": return GQL.StreamingResolutionEnum.FourK; + case "Original": return GQL.StreamingResolutionEnum.Original; + } + + return GQL.StreamingResolutionEnum.Original; + } + + return ( + <> + {!!error ?

    {error.message}

    : undefined} + {(!data || !data.configuration || loading) ? : undefined} +

    Library

    + + + + + + + + + setDatabasePath(e.target.value)} /> + + + + setGeneratedPath(e.target.value)} /> + + + + + { (excludes) ? excludes.map((regexp, i) => { + return( + excludeRegexChanged(i, e.target.value)} + rightElement={ + + ); +}; diff --git a/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx b/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx new file mode 100644 index 00000000000..3fef846cae8 --- /dev/null +++ b/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx @@ -0,0 +1,145 @@ +import { + Button, + Checkbox, + Divider, + FormGroup, + H4, + Spinner, + TextArea, + NumericInput +} from "@blueprintjs/core"; +import _ from "lodash"; +import React, { FunctionComponent, useEffect, useState } from "react"; +import { StashService } from "../../core/StashService"; +import { ErrorUtils } from "../../utils/errors"; +import { ToastUtils } from "../../utils/toasts"; + +interface IProps {} + +export const SettingsInterfacePanel: FunctionComponent = () => { + const config = StashService.useConfiguration(); + const [soundOnPreview, setSoundOnPreview] = useState(); + const [wallShowTitle, setWallShowTitle] = useState(); + const [maximumLoopDuration, setMaximumLoopDuration] = useState(0); + const [autostartVideo, setAutostartVideo] = useState(); + const [showStudioAsText, setShowStudioAsText] = useState(); + const [css, setCSS] = useState(); + const [cssEnabled, setCSSEnabled] = useState(); + + const updateInterfaceConfig = StashService.useConfigureInterface({ + soundOnPreview, + wallShowTitle, + maximumLoopDuration, + autostartVideo, + showStudioAsText, + css, + cssEnabled + }); + + useEffect(() => { + if (!config.data || !config.data.configuration || !!config.error) { return; } + if (!!config.data.configuration.interface) { + let iCfg = config.data.configuration.interface; + setSoundOnPreview(iCfg.soundOnPreview !== undefined ? iCfg.soundOnPreview : true); + setWallShowTitle(iCfg.wallShowTitle !== undefined ? iCfg.wallShowTitle : true); + setMaximumLoopDuration(iCfg.maximumLoopDuration || 0); + setAutostartVideo(iCfg.autostartVideo !== undefined ? iCfg.autostartVideo : false); + setShowStudioAsText(iCfg.showStudioAsText !== undefined ? iCfg.showStudioAsText : false); + setCSS(config.data.configuration.interface.css || ""); + setCSSEnabled(config.data.configuration.interface.cssEnabled || false); + } + }, [config.data]); + + async function onSave() { + try { + const result = await updateInterfaceConfig(); + console.log(result); + ToastUtils.success("Updated config"); + } catch (e) { + ErrorUtils.handle(e); + } + } + + return ( + <> + {!!config.error ?

    {config.error.message}

    : undefined} + {(!config.data || !config.data.configuration || config.loading) ? : undefined} +

    User Interface

    + + setWallShowTitle(!wallShowTitle)} + /> + setSoundOnPreview(!soundOnPreview)} + /> + + + + { + setShowStudioAsText(!showStudioAsText) + }} + /> + + + + { + setAutostartVideo(!autostartVideo) + }} + /> + + + setMaximumLoopDuration(value)} + min={0} + minorStepSize={1} + /> + + + + + { + setCSSEnabled(!cssEnabled) + }} + /> + + + + + + + + ); +}; diff --git a/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx b/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx new file mode 100644 index 00000000000..0f3a723378a --- /dev/null +++ b/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx @@ -0,0 +1,188 @@ +import { + H4, FormGroup, HTMLSelect, +} from "@blueprintjs/core"; +import React, { FunctionComponent, useState, useEffect, useRef } from "react"; +import * as GQL from "../../core/generated-graphql"; +import { StashService } from "../../core/StashService"; + +interface IProps {} + +function convertTime(logEntry : GQL.LogEntryDataFragment) { + function pad(val : number) { + var ret = val.toString(); + if (val <= 9) { + ret = "0" + ret; + } + + return ret; + } + + var date = new Date(logEntry.time); + var month = date.getMonth() + 1; + var day = date.getDate(); + var dateStr = date.getFullYear() + "-" + pad(month) + "-" + pad(day); + dateStr += " " + pad(date.getHours()) + ":" + pad(date.getMinutes()) + ":" + pad(date.getSeconds()); + + return dateStr; +} + +class LogEntry { + public time: string; + public level: string; + public message: string; + public id: string; + + private static nextId: number = 0; + + public constructor(logEntry: GQL.LogEntryDataFragment) { + this.time = convertTime(logEntry); + this.level = logEntry.level; + this.message = logEntry.message; + + var id = LogEntry.nextId++; + this.id = id.toString(); + } +} + +export const SettingsLogsPanel: FunctionComponent = (props: IProps) => { + const { data, error } = StashService.useLoggingSubscribe(); + const { data: existingData } = StashService.useLogs(); + + const logEntries = useRef([]); + const [logLevel, setLogLevel] = useState("Info"); + const [filteredLogEntries, setFilteredLogEntries] = useState([]); + const lastUpdate = useRef(0); + const updateTimeout = useRef(); + + // maximum number of log entries to display. Subsequent entries will truncate + // the list, dropping off the oldest entries first. + const MAX_LOG_ENTRIES = 200; + + function truncateLogEntries(entries : LogEntry[]) { + entries.length = Math.min(entries.length, MAX_LOG_ENTRIES); + } + + function prependLogEntries(toPrepend : LogEntry[]) { + var newLogEntries = toPrepend.concat(logEntries.current); + truncateLogEntries(newLogEntries); + logEntries.current = newLogEntries; + } + + function appendLogEntries(toAppend : LogEntry[]) { + var newLogEntries = logEntries.current.concat(toAppend); + truncateLogEntries(newLogEntries); + logEntries.current = newLogEntries; + } + + useEffect(() => { + if (!data) { return; } + + // append data to the logEntries + var convertedData = data.loggingSubscribe.map(convertLogEntry); + + // filter subscribed data as it comes in, otherwise we'll end up + // truncating stuff that wasn't filtered out + convertedData = convertedData.filter(filterByLogLevel) + + // put newest entries at the top + convertedData.reverse(); + prependLogEntries(convertedData); + + updateFilteredEntries(); + }, [data]); + + useEffect(() => { + if (!existingData || !existingData.logs) { return; } + + var convertedData = existingData.logs.map(convertLogEntry); + appendLogEntries(convertedData); + + updateFilteredEntries(); + }, [existingData]); + + function updateFilteredEntries() { + if (!updateTimeout.current) { + console.log("Updating after timeout"); + } + updateTimeout.current = undefined; + + var filteredEntries = logEntries.current.filter(filterByLogLevel); + setFilteredLogEntries(filteredEntries); + + lastUpdate.current = new Date().getTime(); + } + + useEffect(() => { + updateFilteredEntries(); + }, [logLevel]); + + function convertLogEntry(logEntry : GQL.LogEntryDataFragment) { + return new LogEntry(logEntry); + } + + function levelClass(level : string) { + return level.toLowerCase().trim(); + } + + interface ILogElementProps { + logEntry : LogEntry + } + + function LogElement(props : ILogElementProps) { + // pad to maximum length of level enum + var level = props.logEntry.level.padEnd(GQL.LogLevel.Progress.length); + + return ( + <> + {props.logEntry.time}  + {level}  + {props.logEntry.message} +
    + + ); + } + + function maybeRenderError() { + if (error) { + return ( + <> + Error connecting to log server: {error.message}
    + + ); + } + } + + const logLevels = ["Debug", "Info", "Warning", "Error"]; + + function filterByLogLevel(logEntry : LogEntry) { + if (logLevel == "Debug") { + return true; + } + + var logLevelIndex = logLevels.indexOf(logLevel); + var levelIndex = logLevels.indexOf(logEntry.level); + + return levelIndex >= logLevelIndex; + } + + return ( + <> +

    Logs

    +
    + + setLogLevel(event.target.value)} + value={logLevel} + /> + +
    +
    + {maybeRenderError()} + {filteredLogEntries.map((logEntry) => + + )} +
    + + ); +}; diff --git a/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx b/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx new file mode 100644 index 00000000000..a37bea8313b --- /dev/null +++ b/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx @@ -0,0 +1,53 @@ +import { + Button, + Checkbox, + FormGroup, +} from "@blueprintjs/core"; +import React, { FunctionComponent, useState } from "react"; +import { StashService } from "../../../core/StashService"; +import { ErrorUtils } from "../../../utils/errors"; +import { ToastUtils } from "../../../utils/toasts"; + +interface IProps {} + +export const GenerateButton: FunctionComponent = () => { + const [sprites, setSprites] = useState(true); + const [previews, setPreviews] = useState(true); + const [markers, setMarkers] = useState(true); + const [transcodes, setTranscodes] = useState(true); + + async function onGenerate() { + try { + await StashService.queryMetadataGenerate({sprites, previews, markers, transcodes}); + ToastUtils.success("Started generating"); + } catch (e) { + ErrorUtils.handle(e); + } + } + + return ( + + setSprites(!sprites)} /> + setPreviews(!previews)} + /> + setMarkers(!markers)} + /> + setTranscodes(!transcodes)} + /> + + ); + } + + function renderSaveButton() { + if (!props.isEditing) { return; } + return ; + } + + function renderDeleteButton() { + if (props.isNew || props.isEditing) { return; } + return ; + } + + function renderImageInput() { + if (!props.isEditing) { return; } + return ( + + Choose image... + + + ) + } + + function renderScraperMenu() { + if (!props.performer) { return; } + if (!props.isEditing) { return; } + + const popover = ( + + +
    + { props.scrapers ? props.scrapers.map((s) => ( +
    props.onDisplayScraperDialog && props.onDisplayScraperDialog(s) }> + {s.name} +
    + )) : ''} +
    +
    +
    + ); + + return ( + + + + ); + } + + function renderAutoTagButton() { + if (props.isNew || props.isEditing) { return; } + if (!!props.onAutoTag) { + return () + } + } + + function renderScenesButton() { + if (props.isEditing) { return; } + let linkSrc: string = "#"; + if (!!props.performer) { + linkSrc = NavigationUtils.makePerformerScenesUrl(props.performer); + } else if (!!props.studio) { + linkSrc = NavigationUtils.makeStudioScenesUrl(props.studio); + } + return ( + + Scenes + + ); + } + + function renderDeleteAlert() { + var name; + + if (props.performer) { + name = props.performer.name; + } + if (props.studio) { + name = props.studio.name; + } + + return ( + + + Are you sure you want to delete {name}? + + + + + + + ); + } + + + return ( + <> + {renderDeleteAlert()} + + + + + ); +}; diff --git a/ui/v2.5/src/components/Shared/DurationInput.tsx b/ui/v2.5/src/components/Shared/DurationInput.tsx new file mode 100644 index 00000000000..08663d983cf --- /dev/null +++ b/ui/v2.5/src/components/Shared/DurationInput.tsx @@ -0,0 +1,134 @@ +import React, { useState, useEffect } from "react"; +import { Button, ButtonGroup, InputGroup, Form } from 'react-bootstrap'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { TextUtils } from "../../utils/text"; + +interface IProps { + disabled?: boolean + numericValue: number + onValueChange(valueAsNumber: number): void + onReset?(): void +} + +export const DurationInput: React.FC = (props: IProps) => { + const [value, setValue] = useState(secondsToString(props.numericValue)); + + useEffect(() => { + setValue(secondsToString(props.numericValue)); + }, [props.numericValue]); + + function secondsToString(seconds : number) { + let ret = TextUtils.secondsToTimestamp(seconds); + + if (ret.startsWith("00:")) { + ret = ret.substr(3); + + if (ret.startsWith("0")) { + ret = ret.substr(1); + } + } + + return ret; + } + + function stringToSeconds(v : string) { + if (!v) { + return 0; + } + + let splits = v.split(":"); + + if (splits.length > 3) { + return 0; + } + + let seconds = 0; + let factor = 1; + while(splits.length > 0) { + let thisSplit = splits.pop(); + if (thisSplit === undefined) { + return 0; + } + + let thisInt = parseInt(thisSplit, 10); + if (isNaN(thisInt)) { + return 0; + } + + seconds += factor * thisInt; + factor *= 60; + } + + return seconds; + } + + function increment() { + let seconds = stringToSeconds(value); + seconds += 1; + props.onValueChange(seconds); + } + + function decrement() { + let seconds = stringToSeconds(value); + seconds -= 1; + props.onValueChange(seconds); + } + + function renderButtons() { + return ( + + + + + ) + } + + function onReset() { + if (props.onReset) { + props.onReset(); + } + } + + function maybeRenderReset() { + if (props.onReset) { + return ( + + ) + } + } + + return ( + + + setValue(e.target.value)} + onBlur={() => props.onValueChange(stringToSeconds(value))} + placeholder="hh:mm:ss" + > + {renderButtons()} + + + {maybeRenderReset()} + + + + ) +}; diff --git a/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx b/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx new file mode 100644 index 00000000000..56936a43d75 --- /dev/null +++ b/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx @@ -0,0 +1,85 @@ +import { Button, InputGroup, Form, Modal, Spinner } from 'react-bootstrap'; +import React, { useEffect, useState } from "react"; +import { StashService } from "../../../core/StashService"; + +interface IProps { + directories: string[]; + onDirectoriesChanged: (directories: string[]) => void; +} + +export const FolderSelect: React.FC = (props: IProps) => { + const [currentDirectory, setCurrentDirectory] = useState(""); + const [isDisplayingDialog, setIsDisplayingDialog] = useState(false); + const [selectedDirectories, setSelectedDirectories] = useState([]); + const { data, error, loading } = StashService.useDirectories(currentDirectory); + + useEffect(() => { + setSelectedDirectories(props.directories); + }, [props.directories]); + + const selectableDirectories:string[] = data && data.directories && !error ? StashService.nullToUndefined(data.directories) : []; + + function onSelectDirectory() { + selectedDirectories.push(currentDirectory); + setSelectedDirectories(selectedDirectories); + setCurrentDirectory(""); + setIsDisplayingDialog(false); + props.onDirectoriesChanged(selectedDirectories); + } + + function onRemoveDirectory(directory: string) { + const newSelectedDirectories = selectedDirectories.filter((dir) => dir !== directory); + setSelectedDirectories(newSelectedDirectories); + props.onDirectoriesChanged(newSelectedDirectories); + } + + function renderDialog() { + return ( + setIsDisplayingDialog(false)} + title="" + > + + Select Directory + + +
    + + setCurrentDirectory(e.target.value)} + defaultValue={currentDirectory} + /> + + {(!data || !data.directories || loading) ? : undefined} + + + + /> + {selectableDirectories.map((path) => { + return
    setCurrentDirectory(path)}>{path}
    ; + })} +
    +
    + + + +
    + ); + } + + return ( + <> + {!!error ?

    {error.message}

    : undefined} + {renderDialog()} + + {selectedDirectories.map((path) => { + return ; + })} + + + + + ); +}; diff --git a/ui/v2.5/src/components/Shared/TagLink.tsx b/ui/v2.5/src/components/Shared/TagLink.tsx new file mode 100644 index 00000000000..fbff86926d0 --- /dev/null +++ b/ui/v2.5/src/components/Shared/TagLink.tsx @@ -0,0 +1,35 @@ +import { Badge } from 'react-bootstrap'; +import React from "react"; +import { Link } from "react-router-dom"; +import { PerformerDataFragment, SceneMarkerDataFragment, TagDataFragment } from "../../core/generated-graphql"; +import { NavigationUtils } from "../../utils/navigation"; +import { TextUtils } from "../../utils/text"; + +interface IProps { + tag?: Partial; + performer?: Partial; + marker?: Partial; +} + +export const TagLink: React.FC = (props: IProps) => { + let link: string = "#"; + let title: string = ""; + if (!!props.tag) { + link = NavigationUtils.makeTagScenesUrl(props.tag); + title = props.tag.name || ""; + } else if (!!props.performer) { + link = NavigationUtils.makePerformerScenesUrl(props.performer); + title = props.performer.name || ""; + } else if (!!props.marker) { + link = NavigationUtils.makeSceneMarkerUrl(props.marker); + title = `${props.marker.title} - ${TextUtils.secondsToTimestamp(props.marker.seconds || 0)}`; + } + return ( + + {title} + + ); +}; diff --git a/ui/v2.5/src/components/Stats.tsx b/ui/v2.5/src/components/Stats.tsx new file mode 100644 index 00000000000..9f7cea304f5 --- /dev/null +++ b/ui/v2.5/src/components/Stats.tsx @@ -0,0 +1,63 @@ +import { Spinner } from 'react-bootstrap'; +import React, { FunctionComponent } from "react"; +import { StashService } from "../core/StashService"; + +export const Stats: FunctionComponent = () => { + const { data, error, loading } = StashService.useStats(); + + function renderStats() { + if (!data || !data.stats) { return; } + return ( + + ); + } + + return ( +
    + {!data || loading ? + + Loading... + : undefined} + {!!error ? error.message : undefined} + {renderStats()} + +

    Notes

    +
    +        {`
    +        This is still an early version, some things are still a work in progress.
    +        `}
    +      
    +
    + ); +}; diff --git a/ui/v2.5/src/components/Studios/StudioCard.tsx b/ui/v2.5/src/components/Studios/StudioCard.tsx new file mode 100644 index 00000000000..91d4cc95d56 --- /dev/null +++ b/ui/v2.5/src/components/Studios/StudioCard.tsx @@ -0,0 +1,28 @@ +import { Card } from 'react-bootstrap'; +import React from "react"; +import { Link } from "react-router-dom"; +import * as GQL from "../../core/generated-graphql"; + +interface IProps { + studio: GQL.StudioDataFragment; +} + +export const StudioCard: React.FC = (props: IProps) => { + return ( + + +
    +

    + {props.studio.name} +

    + {props.studio.scene_count} scenes. +
    +
    + ); +}; diff --git a/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx b/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx new file mode 100644 index 00000000000..6dac927d96a --- /dev/null +++ b/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx @@ -0,0 +1,162 @@ +import { Form, Spinner, Table } from 'react-bootstrap'; +import React, { useEffect, useState } from "react"; +import { useParams, useHistory } from 'react-router-dom'; + +import * as GQL from "../../../core/generated-graphql"; +import { StashService } from "../../../core/StashService"; +import { ErrorUtils } from "../../../utils/errors"; +import { TableUtils } from "../../../utils/table"; +import { DetailsEditNavbar } from "../../Shared/DetailsEditNavbar"; +import { ToastUtils } from "../../../utils/toasts"; +import { ImageUtils } from "../../../utils/image"; + +export const Studio: React.FC = () => { + const { id = '' } = useParams(); + const history = useHistory(); + const isNew = id === "new"; + + // Editing state + const [isEditing, setIsEditing] = useState(isNew); + + // Editing studio state + const [image, setImage] = useState(undefined); + const [name, setName] = useState(undefined); + const [url, setUrl] = useState(undefined); + + // Studio state + const [studio, setStudio] = useState>({}); + const [imagePreview, setImagePreview] = useState(undefined); + + const { data, error, loading } = StashService.useFindStudio(id); + const updateStudio = StashService.useStudioUpdate(getStudioInput() as GQL.StudioUpdateInput); + const createStudio = StashService.useStudioCreate(getStudioInput() as GQL.StudioCreateInput); + const deleteStudio = StashService.useStudioDestroy(getStudioInput() as GQL.StudioDestroyInput); + + function updateStudioEditState(state: Partial) { + setName(state.name); + setUrl(state.url); + } + + function updateStudioData(studio:Partial) { + setImage(undefined); + updateStudioEditState(studio); + setImagePreview(studio.image_path); + setStudio(studio); + } + + useEffect(() => { + if (data && data.findStudio) { + setImage(undefined); + updateStudioEditState(data.findStudio); + setImagePreview(data.findStudio.image_path); + setStudio(data.findStudio); + } + }, [data]); + + function onImageLoad(this: FileReader) { + setImagePreview(this.result as string); + setImage(this.result as string); + } + + ImageUtils.addPasteImageHook(onImageLoad); + + if (!isNew && !isEditing) { + if (!data || !data.findStudio || loading) { return ; } + if (!!error) { return <>error...; } + } + + function getStudioInput() { + const input: Partial = { + name, + url, + image, + }; + + if (!isNew) { + (input as GQL.StudioUpdateInput).id = id; + } + return input; + } + + async function onSave() { + try { + if (!isNew) { + const result = await updateStudio(); + updateStudioData(result.data.studioUpdate) + setIsEditing(false); + } else { + const result = await createStudio(); + history.push(`/studios/${result.data.studioCreate.id}`); + } + } catch (e) { + ErrorUtils.handle(e); + } + } + + async function onAutoTag() { + if (!studio || !studio.id) { + return; + } + try { + await StashService.queryMetadataAutoTag({ studios: [studio.id]}); + ToastUtils.success("Started auto tagging"); + } catch (e) { + ErrorUtils.handle(e); + } + } + + async function onDelete() { + try { + await deleteStudio(); + } catch (e) { + ErrorUtils.handle(e); + } + + // redirect to studios page + history.push(`/studios`); + } + + function onImageChange(event: React.FormEvent) { + ImageUtils.onImageChange(event, onImageLoad); + } + + // TODO: CSS class + return ( +
    +
    + +
    +
    + { setIsEditing(!isEditing); updateStudioEditState(studio); }} + onSave={onSave} + onDelete={onDelete} + onAutoTag={onAutoTag} + onImageChange={onImageChange} + /> +

    + { !isEditing + ? {studio.name} + : + Name + setName(event.target.value)} + /> + + } +

    + + + + {TableUtils.renderInputGroup({title: "URL", value: studio.url, isEditing, onChange: (val:string) => setUrl(val)})} + +
    +
    +
    + ); +}; diff --git a/ui/v2.5/src/components/Studios/StudioList.tsx b/ui/v2.5/src/components/Studios/StudioList.tsx new file mode 100644 index 00000000000..ef1799b93fa --- /dev/null +++ b/ui/v2.5/src/components/Studios/StudioList.tsx @@ -0,0 +1,36 @@ +import _ from "lodash"; +import React, { FunctionComponent } from "react"; +import { QueryHookResult } from "react-apollo-hooks"; +import { FindStudiosQuery, FindStudiosVariables } from "../../core/generated-graphql"; +import { ListHook } from "../../hooks/ListHook"; +import { IBaseProps } from "../../models/base-props"; +import { ListFilterModel } from "../../models/list-filter/filter"; +import { DisplayMode, FilterMode } from "../../models/list-filter/types"; +import { StudioCard } from "./StudioCard"; + +interface IProps extends IBaseProps {} + +export const StudioList: FunctionComponent = (props: IProps) => { + const listData = ListHook.useList({ + filterMode: FilterMode.Studios, + props, + renderContent, + }); + + function renderContent(result: QueryHookResult, filter: ListFilterModel) { + if (!result.data || !result.data.findStudios) { return; } + if (filter.displayMode === DisplayMode.Grid) { + return ( +
    + {result.data.findStudios.studios.map((studio) => ())} +
    + ); + } else if (filter.displayMode === DisplayMode.List) { + return

    TODO

    ; + } else if (filter.displayMode === DisplayMode.Wall) { + return

    TODO

    ; + } + } + + return listData.template; +}; diff --git a/ui/v2.5/src/components/Studios/Studios.tsx b/ui/v2.5/src/components/Studios/Studios.tsx new file mode 100644 index 00000000000..5ad65d43333 --- /dev/null +++ b/ui/v2.5/src/components/Studios/Studios.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import { Route, Switch } from "react-router-dom"; +import { Studio } from "./StudioDetails/Studio"; +import { StudioList } from "./StudioList"; + +const Studios = () => ( + + + + +); + +export default Studios; diff --git a/ui/v2.5/src/components/Tags/TagList.tsx b/ui/v2.5/src/components/Tags/TagList.tsx new file mode 100644 index 00000000000..d12967ebbeb --- /dev/null +++ b/ui/v2.5/src/components/Tags/TagList.tsx @@ -0,0 +1,143 @@ +import React, { useState } from "react"; +import { Button, Form, Modal, Spinner } from 'react-bootstrap'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { Link } from "react-router-dom"; +import * as GQL from "../../core/generated-graphql"; +import { StashService } from "../../core/StashService"; +import { ErrorUtils } from "../../utils/errors"; +import { NavigationUtils } from "../../utils/navigation"; +import { ToastUtils } from "../../utils/toasts"; + +export const TagList: React.FC = () => { + // Editing / New state + const [name, setName] = useState(''); + const [editingTag, setEditingTag] = useState | null>(null); + const [deletingTag, setDeletingTag] = useState | null>(null); + + const { data, error } = StashService.useAllTags(); + const updateTag = StashService.useTagUpdate(getTagInput() as GQL.TagUpdateInput); + const createTag = StashService.useTagCreate(getTagInput() as GQL.TagCreateInput); + const deleteTag = StashService.useTagDestroy(getDeleteTagInput() as GQL.TagDestroyInput); + + function getTagInput() { + const tagInput: Partial = { name }; + if (!!editingTag) { (tagInput as Partial).id = editingTag.id; } + return tagInput; + } + + function getDeleteTagInput() { + const tagInput: Partial = {}; + if (deletingTag) { + tagInput.id = deletingTag.id; + } + return tagInput; + } + + async function onEdit() { + try { + if (editingTag && editingTag.id) { + await updateTag(); + ToastUtils.success("Updated tag"); + } else { + await createTag(); + ToastUtils.success("Created tag"); + } + setEditingTag(null); + } catch (e) { + ErrorUtils.handle(e); + } + } + + async function onAutoTag(tag : GQL.TagDataFragment) { + if (!tag) { + return; + } + try { + await StashService.queryMetadataAutoTag({ tags: [tag.id]}); + ToastUtils.success("Started auto tagging"); + } catch (e) { + ErrorUtils.handle(e); + } + } + + async function onDelete() { + try { + await deleteTag(); + ToastUtils.success("Deleted tag"); + setDeletingTag(null); + } catch (e) { + ErrorUtils.handle(e); + } + } + + const deleteAlert = ( + {}} + show={!!deletingTag} + > + + + Are you sure you want to delete {deletingTag && deletingTag.name}? + + +
    + + +
    +
    +
    + ); + + if (!data || !data.allTags) { return ; } + if (!!error) { return <>{error.message}; } + + const tagElements = data.allTags.map((tag) => { + return ( + <> + {deleteAlert} +
    + setEditingTag(tag)}>{tag.name} +
    + + Scenes: {tag.scene_count} + + Markers: {tag.scene_marker_count} + + Total: {(tag.scene_count || 0) + (tag.scene_marker_count || 0)} + +
    +
    + + ); + }); + + return ( +
    + + + {setEditingTag(null)}} + show={!!editingTag} + > + + { editingTag && editingTag.id ? "Edit Tag" : "New Tag" } + + + + Name + setName(newValue.target.value)} + defaultValue={(editingTag && editingTag.name) || ''} + /> + + + + + + + {tagElements} +
    + ); +}; diff --git a/ui/v2.5/src/components/Tags/Tags.tsx b/ui/v2.5/src/components/Tags/Tags.tsx new file mode 100644 index 00000000000..9c1f591f957 --- /dev/null +++ b/ui/v2.5/src/components/Tags/Tags.tsx @@ -0,0 +1,11 @@ +import React from "react"; +import { Route, Switch } from "react-router-dom"; +import { TagList } from "./TagList"; + +const Tags = () => ( + + + +); + +export default Tags; diff --git a/ui/v2.5/src/components/Wall/Wall.scss b/ui/v2.5/src/components/Wall/Wall.scss new file mode 100644 index 00000000000..803241f1618 --- /dev/null +++ b/ui/v2.5/src/components/Wall/Wall.scss @@ -0,0 +1,99 @@ +.wall-overlay { + background-color: rgba(0,0,0,.8); + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1; + pointer-events: none; + transition: transform .5s ease-in-out; +} +.visible { + opacity: 1; + transition: opacity .5s ease-in-out; +} +.hidden { + opacity: 0; + transition: opacity .5s ease-in-out; +} +.visible-unanimated { + opacity: 1; +} +.hidden-unanimated { + opacity: 0; +} + + +.double-scale { + position: absolute; + z-index: 2; + transform: scale(2); + background-color: black; +} + +.double-scale img { + opacity: 0; +} + +.scene-wall-item-container { + display: flex; + justify-content: center; + // align-items: center; + // overflow: hidden; // Commented out since it shows gaps in the wall + position: relative; + width: 100%; + height: 100%; + transition: transform .5s; + max-height: 253px; +} + +.scene-wall-item-container video { + position: absolute; + width: 100%; + height: 100%; + z-index: -1; +} + +.scene-wall-item-text-container { + position: absolute; + font-weight: 700; + color: #444; + padding: 5px; + width: 100%; + bottom: 0; + background: linear-gradient(rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.65)); + overflow: hidden; + text-align: center; + + & span { + line-height: 1; + font-weight: 400; + font-size: 10px; + margin: 0 3px; + } +} + +.scene-wall-item-blur { + position: absolute; + top: -5px; + left: -5px; + right: -5px; + bottom: -5px; + /*background-color: rgba(255, 255, 255, 0.75);*/ + /*backdrop-filter: blur(5px);*/ + z-index: -1; +} + +.wall.grid-item video, .wall.grid-item img { + width: 100%; + height: 100%; + object-fit: contain; +} + +.wall.grid-item { + padding: 0 !important; + line-height: 0; + overflow: visible; + position: relative; +} diff --git a/ui/v2.5/src/components/Wall/WallItem.tsx b/ui/v2.5/src/components/Wall/WallItem.tsx new file mode 100644 index 00000000000..b7c3c7a6429 --- /dev/null +++ b/ui/v2.5/src/components/Wall/WallItem.tsx @@ -0,0 +1,132 @@ +import _ from "lodash"; +import React, { FunctionComponent, useRef, useState, useEffect } from "react"; +import { Link } from "react-router-dom"; +import * as GQL from "../../core/generated-graphql"; +import { VideoHoverHook } from "../../hooks/VideoHover"; +import { TextUtils } from "../../utils/text"; +import { NavigationUtils } from "../../utils/navigation"; +import { StashService } from "../../core/StashService"; + +interface IWallItemProps { + scene?: GQL.SlimSceneDataFragment; + sceneMarker?: GQL.SceneMarkerDataFragment; + origin?: string; + onOverlay: (show: boolean) => void; + clickHandler?: (item: GQL.SlimSceneDataFragment | GQL.SceneMarkerDataFragment) => void; +} + +export const WallItem: FunctionComponent = (props: IWallItemProps) => { + const [videoPath, setVideoPath] = useState(undefined); + const [previewPath, setPreviewPath] = useState(""); + const [screenshotPath, setScreenshotPath] = useState(""); + const [title, setTitle] = useState(""); + const [tags, setTags] = useState([]); + const config = StashService.useConfiguration(); + const videoHoverHook = VideoHoverHook.useVideoHover({resetOnMouseLeave: true}); + const showTextContainer = !!config.data && !!config.data.configuration ? config.data.configuration.interface.wallShowTitle : true; + + function onMouseEnter() { + VideoHoverHook.onMouseEnter(videoHoverHook); + if (!videoPath || videoPath === "") { + if (!!props.sceneMarker) { + setVideoPath(props.sceneMarker.stream || ""); + } else if (!!props.scene) { + setVideoPath(props.scene.paths.preview || ""); + } + } + props.onOverlay(true); + } + const debouncedOnMouseEnter = useRef(_.debounce(onMouseEnter, 500)); + + function onMouseLeave() { + VideoHoverHook.onMouseLeave(videoHoverHook); + setVideoPath(""); + debouncedOnMouseEnter.current.cancel(); + props.onOverlay(false); + } + + function onClick() { + if (props.clickHandler === undefined) { return; } + if (props.scene !== undefined) { + props.clickHandler(props.scene); + } else if (props.sceneMarker !== undefined) { + props.clickHandler(props.sceneMarker); + } + } + + let linkSrc: string = "#"; + if (props.clickHandler === undefined) { + if (props.scene !== undefined) { + linkSrc = `/scenes/${props.scene.id}`; + } else if (props.sceneMarker !== undefined) { + linkSrc = NavigationUtils.makeSceneMarkerUrl(props.sceneMarker); + } + } + + function onTransitionEnd(event: React.TransitionEvent) { + const target = (event.target as any); + if (target.classList.contains("double-scale")) { + target.parentElement.style.zIndex = 10; + } else { + target.parentElement.style.zIndex = null; + } + } + + useEffect(() => { + if (!!props.sceneMarker) { + setPreviewPath(props.sceneMarker.preview); + setTitle(`${props.sceneMarker!.title} - ${TextUtils.secondsToTimestamp(props.sceneMarker.seconds)}`); + const thisTags = props.sceneMarker.tags.map((tag) => ({tag.name})); + thisTags.unshift({props.sceneMarker.primary_tag.name}); + setTags(thisTags); + } else if (!!props.scene) { + setPreviewPath(props.scene.paths.webp || ""); + setScreenshotPath(props.scene.paths.screenshot || ""); + setTitle(props.scene.title || ""); + // tags = props.scene.tags.map((tag) => ({tag.name})); + } + }, [props.sceneMarker, props.scene]); + + function previewNotFound() { + if (previewPath !== screenshotPath) { + setPreviewPath(screenshotPath); + } + } + + const className = ["scene-wall-item-container"]; + if (videoHoverHook.isHovering.current) { className.push("double-scale"); } + const style: React.CSSProperties = {}; + if (!!props.origin) { style.transformOrigin = props.origin; } + return ( +
    +
    debouncedOnMouseEnter.current()} + onMouseMove={() => debouncedOnMouseEnter.current()} + onMouseLeave={onMouseLeave} + > + onClick()} to={linkSrc}> +
    +
    + ); +}; diff --git a/ui/v2.5/src/components/Wall/WallPanel.tsx b/ui/v2.5/src/components/Wall/WallPanel.tsx new file mode 100644 index 00000000000..df466f7272e --- /dev/null +++ b/ui/v2.5/src/components/Wall/WallPanel.tsx @@ -0,0 +1,89 @@ +import _ from "lodash"; +import React, { FunctionComponent, useState } from "react"; +import * as GQL from "../../core/generated-graphql"; +import "./Wall.scss"; +import { WallItem } from "./WallItem"; + +interface IWallPanelProps { + scenes?: GQL.SlimSceneDataFragment[]; + sceneMarkers?: GQL.SceneMarkerDataFragment[]; + clickHandler?: (item: GQL.SlimSceneDataFragment | GQL.SceneMarkerDataFragment) => void; +} + +export const WallPanel: FunctionComponent = (props: IWallPanelProps) => { + const [showOverlay, setShowOverlay] = useState(false); + + function onOverlay(show: boolean) { + setShowOverlay(show); + } + + function getOrigin(index: number, rowSize: number, total: number): string { + const isAtStart = index % rowSize === 0; + const isAtEnd = index % rowSize === rowSize - 1; + const endRemaining = total % rowSize; + + // First row + if (total === 1) { return "top"; } + if (index === 0) { return "top left"; } + if (index === rowSize - 1 || (total < rowSize && index === total - 1)) { return "top right"; } + if (index < rowSize) { return "top"; } + + // Bottom row + if (isAtEnd && index === total - 1) { return "bottom right"; } + if (isAtStart && index === total - rowSize) { return "bottom left"; } + if (endRemaining !== 0 && index >= total - endRemaining) { return "bottom"; } + if (endRemaining === 0 && index >= total - rowSize) { return "bottom"; } + + // Everything else + if (isAtStart) { return "center left"; } + if (isAtEnd) { return "center right"; } + return "center"; + } + + function maybeRenderScenes() { + if (props.scenes === undefined) { return; } + return props.scenes.map((scene, index) => { + const origin = getOrigin(index, 5, props.scenes!.length); + return ( + + ); + }); + } + + function maybeRenderSceneMarkers() { + if (props.sceneMarkers === undefined) { return; } + return props.sceneMarkers.map((marker, index) => { + const origin = getOrigin(index, 5, props.sceneMarkers!.length); + return ( + + ); + }); + } + + function render() { + const overlayClassName = showOverlay ? "visible" : "hidden"; + return ( + <> +
    +
    + {maybeRenderScenes()} + {maybeRenderSceneMarkers()} +
    + + ); + } + + return render(); +}; diff --git a/ui/v2.5/src/components/list/AddFilter.tsx b/ui/v2.5/src/components/list/AddFilter.tsx new file mode 100644 index 00000000000..fd3c9fa7817 --- /dev/null +++ b/ui/v2.5/src/components/list/AddFilter.tsx @@ -0,0 +1,218 @@ +import { + Button, + Classes, + Dialog, + FormGroup, + HTMLSelect, + InputGroup, + Tooltip, +} from "@blueprintjs/core"; +import _ from "lodash"; +import React, { FunctionComponent, useEffect, useRef, useState } from "react"; +import { isArray } from "util"; +import { CriterionModifier } from "../../core/generated-graphql"; +import { Criterion, CriterionType } from "../../models/list-filter/criteria/criterion"; +import { NoneCriterion } from "../../models/list-filter/criteria/none"; +import { PerformersCriterion } from "../../models/list-filter/criteria/performers"; +import { StudiosCriterion } from "../../models/list-filter/criteria/studios"; +import { TagsCriterion } from "../../models/list-filter/criteria/tags"; +import { makeCriteria } from "../../models/list-filter/criteria/utils"; +import { ListFilterModel } from "../../models/list-filter/filter"; +import { FilterMultiSelect } from "../select/FilterMultiSelect"; + +interface IAddFilterProps { + onAddCriterion: (criterion: Criterion, oldId?: string) => void; + onCancel: () => void; + filter: ListFilterModel; + editingCriterion?: Criterion; +} + +export const AddFilter: FunctionComponent = (props: IAddFilterProps) => { + const singleValueSelect = useRef(null); + + const [isOpen, setIsOpen] = useState(false); + const [criterion, setCriterion] = useState>(new NoneCriterion()); + + const valueStage = useRef(criterion.value); + + // Configure if we are editing an existing criterion + useEffect(() => { + if (!props.editingCriterion) { return; } + setIsOpen(true); + setCriterion(props.editingCriterion); + }, [props.editingCriterion]); + + function onChangedCriteriaType(event: React.ChangeEvent) { + const newCriterionType = event.target.value as CriterionType; + const newCriterion = makeCriteria(newCriterionType); + setCriterion(newCriterion); + } + + function onChangedModifierSelect(event: React.ChangeEvent) { + const newCriterion = _.cloneDeep(criterion); + newCriterion.modifier = event.target.value as any; + setCriterion(newCriterion); + } + + function onChangedSingleSelect(event: React.ChangeEvent) { + const newCriterion = _.cloneDeep(criterion); + newCriterion.value = event.target.value; + setCriterion(newCriterion); + } + + function onChangedInput(event: React.ChangeEvent) { + valueStage.current = event.target.value; + } + + function onBlurInput() { + const newCriterion = _.cloneDeep(criterion); + newCriterion.value = valueStage.current; + setCriterion(newCriterion); + } + + function onAddFilter() { + if (!isArray(criterion.value) && !!singleValueSelect.current) { + const value = singleValueSelect.current.props.defaultValue; + if (criterion.options && (value === undefined || value === "" || typeof value === "number")) { + criterion.value = criterion.options[0]; + } else if (typeof value === "number" && value === undefined) { + criterion.value = 0; + } else if (value === undefined) { + criterion.value = ""; + } + } + const oldId = !!props.editingCriterion ? props.editingCriterion.getId() : undefined; + props.onAddCriterion(criterion, oldId); + onToggle(); + } + + function onToggle() { + if (isOpen) { + props.onCancel(); + } + setIsOpen(!isOpen); + setCriterion(makeCriteria()); + } + + const maybeRenderFilterPopoverContents = () => { + if (criterion.type === "none") { return; } + + function renderModifier() { + if (criterion.modifierOptions.length === 0) { return; } + return ( +
    + +
    + ); + } + + function renderSelect() { + // Hide the value select if the modifier is "IsNull" or "NotNull" + if (criterion.modifier === CriterionModifier.IsNull || criterion.modifier === CriterionModifier.NotNull) { + return; + } + + if (isArray(criterion.value)) { + let type: "performers" | "studios" | "tags" | "" = ""; + if (criterion instanceof PerformersCriterion) { + type = "performers"; + } else if (criterion instanceof StudiosCriterion) { + type = "studios"; + } else if (criterion instanceof TagsCriterion) { + type = "tags"; + } + + if (type === "") { + return (<>todo); + } else { + return ( + criterion.value = items.map((i) => ({id: i.id, label: i.name!}))} + openOnKeyDown={true} + initialIds={criterion.value.map((labeled: any) => labeled.id)} + /> + ); + } + } else { + if (criterion.options) { + return ( + + ); + } else { + return ( + + ) + } + } + } + return ( + <> + + {renderModifier()} + + + {renderSelect()} + + + ); + }; + + function maybeRenderFilterSelect() { + if (!!props.editingCriterion) { return; } + return ( + + + + ); + } + + const title = !props.editingCriterion ? "Add Filter" : "Update Filter"; + return ( + <> + + + + + onToggle()} title={title}> +
    + {maybeRenderFilterSelect()} + {maybeRenderFilterPopoverContents()} +
    +
    +
    + +
    +
    +
    + + ); +}; diff --git a/ui/v2.5/src/components/list/ListFilter.tsx b/ui/v2.5/src/components/list/ListFilter.tsx new file mode 100644 index 00000000000..9524ea896a4 --- /dev/null +++ b/ui/v2.5/src/components/list/ListFilter.tsx @@ -0,0 +1,290 @@ +import { + Button, + ButtonGroup, + HTMLSelect, + InputGroup, + Menu, + MenuItem, + Popover, + Tag, + Tooltip, + Slider, +} from "@blueprintjs/core"; +import { debounce } from "lodash"; +import React, { FunctionComponent, SyntheticEvent, useEffect, useState } from "react"; +import { Criterion } from "../../models/list-filter/criteria/criterion"; +import { ListFilterModel } from "../../models/list-filter/filter"; +import { DisplayMode } from "../../models/list-filter/types"; +import { AddFilter } from "./AddFilter"; + +interface IListFilterOperation { + text: string; + onClick: () => void; +} + +interface IListFilterProps { + onChangePageSize: (pageSize: number) => void; + onChangeQuery: (query: string) => void; + onChangeSortDirection: (sortDirection: "asc" | "desc") => void; + onChangeSortBy: (sortBy: string) => void; + onChangeDisplayMode: (displayMode: DisplayMode) => void; + onAddCriterion: (criterion: Criterion, oldId?: string) => void; + onRemoveCriterion: (criterion: Criterion) => void; + zoomIndex?: number; + onChangeZoom?: (zoomIndex: number) => void; + onSelectAll?: () => void; + onSelectNone?: () => void; + otherOperations?: IListFilterOperation[]; + filter: ListFilterModel; +} + +const PAGE_SIZE_OPTIONS = ["20", "40", "60", "120"]; + +export const ListFilter: FunctionComponent = (props: IListFilterProps) => { + let searchCallback: any; + + const [editingCriterion, setEditingCriterion] = useState(undefined); + + useEffect(() => { + searchCallback = debounce((event: any) => { + props.onChangeQuery(event.target.value); + }, 500); + }); + + function onChangePageSize(event: SyntheticEvent) { + const val = event!.currentTarget!.value; + props.onChangePageSize(parseInt(val, 10)); + } + + function onChangeQuery(event: SyntheticEvent) { + event.persist(); + searchCallback(event); + } + + function onChangeSortDirection(_: any) { + if (props.filter.sortDirection === "asc") { + props.onChangeSortDirection("desc"); + } else { + props.onChangeSortDirection("asc"); + } + } + + function onChangeSortBy(event: React.MouseEvent) { + props.onChangeSortBy(event.currentTarget.text); + } + + function onChangeDisplayMode(displayMode: DisplayMode) { + props.onChangeDisplayMode(displayMode); + } + + function onAddCriterion(criterion: Criterion, oldId?: string) { + props.onAddCriterion(criterion, oldId); + } + + function onCancelAddCriterion() { + setEditingCriterion(undefined); + } + + let removedCriterionId = ""; + function onRemoveCriterionTag(criterion?: Criterion) { + if (!criterion) { return; } + setEditingCriterion(undefined); + removedCriterionId = criterion.getId(); + props.onRemoveCriterion(criterion); + } + function onClickCriterionTag(criterion?: Criterion) { + if (!criterion || removedCriterionId !== "") { return; } + setEditingCriterion(criterion); + } + + function renderSortByOptions() { + return props.filter.sortByOptions.map((option) => ( + + )); + } + + function renderDisplayModeOptions() { + function getIcon(option: DisplayMode) { + switch (option) { + case DisplayMode.Grid: return "grid-view"; + case DisplayMode.List: return "list"; + case DisplayMode.Wall: return "symbol-square"; + } + } + function getLabel(option: DisplayMode) { + switch (option) { + case DisplayMode.Grid: return "Grid"; + case DisplayMode.List: return "List"; + case DisplayMode.Wall: return "Wall"; + } + } + return props.filter.displayModeOptions.map((option) => ( + + + {renderSortByOptions()} + + + +
    +
    + {renderFilterTags()} +
    + + ); + } + + return render(); +}; diff --git a/ui/v2.5/src/components/list/Pagination.tsx b/ui/v2.5/src/components/list/Pagination.tsx new file mode 100644 index 00000000000..057e9c0a46a --- /dev/null +++ b/ui/v2.5/src/components/list/Pagination.tsx @@ -0,0 +1,119 @@ +import { Button, ButtonGroup } from "@blueprintjs/core"; +import React from "react"; + +interface IPaginationProps { + itemsPerPage: number; + currentPage: number; + totalItems: number; + onChangePage: (page: number) => void; +} + +interface IPaginationState { + pages: number[]; + totalPages: number; +} + +export class Pagination extends React.Component { + constructor(props: IPaginationProps) { + super(props); + this.state = { + pages: [], + totalPages: Number.MAX_SAFE_INTEGER, + }; + } + + public componentWillMount() { + this.setPage(this.props.currentPage, false); + } + + public componentDidUpdate(prevProps: IPaginationProps) { + if (this.props.totalItems !== prevProps.totalItems || this.props.itemsPerPage !== prevProps.itemsPerPage) { + this.setPage(this.props.currentPage); + } + } + + public render() { + if (!this.state || !this.state.pages || this.state.pages.length <= 1) { return null; } + + return ( + + + + + ); + } + + function urlScrapable(url: string) : boolean { + return !!url && !!Scrapers.data && Scrapers.data.listPerformerScrapers && Scrapers.data.listPerformerScrapers.some((s) => { + return !!s.performer && !!s.performer.urls && s.performer.urls.some((u) => { return url.includes(u); }); + }); + } + + function maybeRenderScrapeButton() { + if (!url || !isEditing || !urlScrapable(url)) { + return undefined; + } + return ( + + ) + } + + function renderURLField() { + return ( + + + URL + {maybeRenderScrapeButton()} + + + {EditableTextUtils.renderInputGroup({ + value: url, isEditing, onChange: setUrl, placeholder: "URL" + })} + + + ); + } + + return ( + <> + {renderScraperDialog()} +
    +
    + +
    +
    + { setIsEditing(!isEditing); updatePerformerEditState(performer); }} + onSave={onSave} + onDelete={onDelete} + onImageChange={onImageChange} + scrapers={queryableScrapers} + onDisplayScraperDialog={onDisplayFreeOnesDialog} + onAutoTag={onAutoTag} + /> +

    + { !isEditing + ? {name} + : setName(event.target.value)} /> + } +

    +
    + + Aliases: + {EditableTextUtils.renderInputGroup({ + value: aliases, isEditing: isEditing, placeholder: "Aliases", onChange: setAliases + })} + +
    +
    + Favorite: + +
    + + + + {TableUtils.renderInputGroup( + {title: "Birthdate (YYYY-MM-DD)", value: birthdate, isEditing, onChange: setBirthdate})} + {renderEthnicity()} + {TableUtils.renderInputGroup( + {title: "Eye Color", value: eyeColor, isEditing, onChange: setEyeColor})} + {TableUtils.renderInputGroup( + {title: "Country", value: country, isEditing, onChange: setCountry})} + {TableUtils.renderInputGroup( + {title: "Height (CM)", value: height, isEditing, onChange: setHeight})} + {TableUtils.renderInputGroup( + {title: "Measurements", value: measurements, isEditing, onChange: setMeasurements})} + {TableUtils.renderInputGroup( + {title: "Fake Tits", value: fakeTits, isEditing, onChange: setFakeTits})} + {TableUtils.renderInputGroup( + {title: "Career Length", value: careerLength, isEditing, onChange: setCareerLength})} + {TableUtils.renderInputGroup( + {title: "Tattoos", value: tattoos, isEditing, onChange: setTattoos})} + {TableUtils.renderInputGroup( + {title: "Piercings", value: piercings, isEditing, onChange: setPiercings})} + {renderURLField()} + {TableUtils.renderInputGroup( + {title: "Twitter", value: twitter, isEditing, onChange: setTwitter})} + {TableUtils.renderInputGroup( + {title: "Instagram", value: instagram, isEditing, onChange: setInstagram})} + +
    +
    +
    + + ); +}; diff --git a/ui/v2.5/src/components/performers/PerformerList.tsx b/ui/v2.5/src/components/performers/PerformerList.tsx new file mode 100644 index 00000000000..5fff1edb07e --- /dev/null +++ b/ui/v2.5/src/components/performers/PerformerList.tsx @@ -0,0 +1,62 @@ +import _ from "lodash"; +import React, { FunctionComponent } from "react"; +import { QueryHookResult } from "react-apollo-hooks"; +import { FindPerformersQuery, FindPerformersVariables } from "../../core/generated-graphql"; +import { ListHook } from "../../hooks/ListHook"; +import { IBaseProps } from "../../models/base-props"; +import { ListFilterModel } from "../../models/list-filter/filter"; +import { DisplayMode, FilterMode } from "../../models/list-filter/types"; +import { PerformerCard } from "./PerformerCard"; +import { PerformerListTable } from "./PerformerListTable"; +import { StashService } from "../../core/StashService"; + +interface IPerformerListProps extends IBaseProps {} + +export const PerformerList: FunctionComponent = (props: IPerformerListProps) => { + const otherOperations = [ + { + text: "Open Random", + onClick: getRandom, + } + ]; + + const listData = ListHook.useList({ + filterMode: FilterMode.Performers, + props, + otherOperations: otherOperations, + renderContent, + }); + + async function getRandom(result: QueryHookResult, filter: ListFilterModel) { + if (result.data && result.data.findPerformers) { + let count = result.data.findPerformers.count; + let index = Math.floor(Math.random() * count); + let filterCopy = _.cloneDeep(filter); + filterCopy.itemsPerPage = 1; + filterCopy.currentPage = index + 1; + const singleResult = await StashService.queryFindPerformers(filterCopy); + if (singleResult && singleResult.data && singleResult.data.findPerformers && singleResult.data.findPerformers.performers.length === 1) { + let id = singleResult!.data!.findPerformers!.performers[0]!.id; + props.history.push("/performers/" + id); + } + } + } + + function renderContent( + result: QueryHookResult, filter: ListFilterModel) { + if (!result.data || !result.data.findPerformers) { return; } + if (filter.displayMode === DisplayMode.Grid) { + return ( +
    + {result.data.findPerformers.performers.map((p) => ())} +
    + ); + } else if (filter.displayMode === DisplayMode.List) { + return ; + } else if (filter.displayMode === DisplayMode.Wall) { + return; + } + } + + return listData.template; +}; diff --git a/ui/v2.5/src/components/performers/PerformerListTable.tsx b/ui/v2.5/src/components/performers/PerformerListTable.tsx new file mode 100644 index 00000000000..fc25cdd2575 --- /dev/null +++ b/ui/v2.5/src/components/performers/PerformerListTable.tsx @@ -0,0 +1,100 @@ +import React from "react"; +import { Button, Table } from 'react-bootstrap'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { Link } from "react-router-dom"; +import * as GQL from "../../core/generated-graphql"; +import { NavigationUtils } from "../../utils/navigation"; + +interface IPerformerListTableProps { + performers: GQL.PerformerDataFragment[]; +} + +export const PerformerListTable: React.FC = (props: IPerformerListTableProps) => { + + function maybeRenderFavoriteHeart(performer : GQL.PerformerDataFragment) { + if (!performer.favorite) { return; } + return ( + + ); + } + + function renderPerformerImage(performer : GQL.PerformerDataFragment) { + const style: React.CSSProperties = { + backgroundImage: `url('${performer.image_path}')`, + lineHeight: 5, + backgroundSize: "contain", + display: "inline-block", + backgroundPosition: "center", + backgroundRepeat: "no-repeat", + }; + + return ( + + ) + } + + function renderPerformerRow(performer : GQL.PerformerDataFragment) { + return ( + <> + + + {renderPerformerImage(performer)} + + + +
    + {performer.name} +
    + + + + {performer.aliases ? performer.aliases : ''} + + + {maybeRenderFavoriteHeart(performer)} + + + +
    {performer.scene_count}
    + + + + {performer.birthdate} + + + {performer.height} + + + + ) + } + + return ( + <> +
    + + + + + + + + + + + + + + {props.performers.map(renderPerformerRow)} + +
    NameAliasesFavouriteScene CountBirthdateHeight
    +
    + + ); +}; + diff --git a/ui/v2.5/src/components/performers/performers.tsx b/ui/v2.5/src/components/performers/performers.tsx new file mode 100644 index 00000000000..e6a2347c8d0 --- /dev/null +++ b/ui/v2.5/src/components/performers/performers.tsx @@ -0,0 +1,13 @@ +import React from "react"; +import { Route, Switch } from "react-router-dom"; +import { Performer } from "./PerformerDetails/Performer"; +import { PerformerList } from "./PerformerList"; + +const Performers = () => ( + + + + +); + +export default Performers; diff --git a/ui/v2.5/src/components/scenes/SceneCard.tsx b/ui/v2.5/src/components/scenes/SceneCard.tsx new file mode 100644 index 00000000000..8f8a476581a --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneCard.tsx @@ -0,0 +1,241 @@ +import { Button, ButtonGroup, Card, Form, Popover, OverlayTrigger } from 'react-bootstrap'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import React, { useState } from "react"; +import { Link } from "react-router-dom"; +import * as GQL from "../../core/generated-graphql"; +import { VideoHoverHook } from "../../hooks/VideoHover"; +import { ColorUtils } from "../../utils/color"; +import { TextUtils } from "../../utils/text"; +import { TagLink } from "../Shared/TagLink"; +import { ZoomUtils } from "../../utils/zoom"; +import { StashService } from "../../core/StashService"; + +interface ISceneCardProps { + scene: GQL.SlimSceneDataFragment; + selected: boolean | undefined; + zoomIndex: number; + onSelectedChanged: (selected : boolean, shiftKey : boolean) => void; +} + +export const SceneCard: React.FC = (props: ISceneCardProps) => { + const [previewPath, setPreviewPath] = useState(undefined); + const videoHoverHook = VideoHoverHook.useVideoHover({resetOnMouseLeave: false}); + + const config = StashService.useConfiguration(); + const showStudioAsText = !!config.data && !!config.data.configuration ? config.data.configuration.interface.showStudioAsText : false; + + function maybeRenderRatingBanner() { + if (!props.scene.rating) { return; } + return ( +
    + RATING: {props.scene.rating} +
    + ); + } + + function maybeRenderSceneSpecsOverlay() { + return ( +
    + {!!props.scene.file.height ? {TextUtils.resolution(props.scene.file.height)} : undefined} + {props.scene.file.duration !== undefined && props.scene.file.duration >= 1 ? TextUtils.secondsToTimestamp(props.scene.file.duration) : ""} +
    + ); + } + + function maybeRenderSceneStudioOverlay() { + if (!props.scene.studio) { + return; + } + + let style: React.CSSProperties = { + backgroundImage: `url('${props.scene.studio.image_path}')`, + }; + + let text = ""; + + if (showStudioAsText) { + style = {}; + text = props.scene.studio.name; + } + + return ( +
    + + {text} + +
    + ); + } + + function maybeRenderTagPopoverButton() { + if (props.scene.tags.length <= 0) { return; } + + const popover = ( + + { props.scene.tags.map((tag) => ( + + )) } + + ); + + return ( + + + + ); + } + + function maybeRenderPerformerPopoverButton() { + if (props.scene.performers.length <= 0) { return; } + + const popover = ( + + { + props.scene.performers.map((performer) => { + return ( +
    + + +
    + ); + }) + } +
    + ); + + return ( + + + + ); + } + + function maybeRenderSceneMarkerPopoverButton() { + if (props.scene.scene_markers.length <= 0) + return; + + const popover = ( + + { props.scene.scene_markers.map((marker) => { + (marker as any).scene = {}; + (marker as any).scene.id = props.scene.id; + return ; + }) } + + ); + + return ( + + + + ); + } + + function maybeRenderPopoverButtonGroup() { + if (props.scene.tags.length > 0 || + props.scene.performers.length > 0 || + props.scene.scene_markers.length > 0) { + return ( + <> +
    + + {maybeRenderTagPopoverButton()} + {maybeRenderPerformerPopoverButton()} + {maybeRenderSceneMarkerPopoverButton()} + + + ); + } + } + + function onMouseEnter() { + if (!previewPath || previewPath === "") { + setPreviewPath(props.scene.paths.preview || ""); + } + VideoHoverHook.onMouseEnter(videoHoverHook); + } + function onMouseLeave() { + VideoHoverHook.onMouseLeave(videoHoverHook); + setPreviewPath(""); + } + + function isPortrait() { + let file = props.scene.file; + let width = file.width ? file.width : 0; + let height = file.height ? file.height : 0; + return height > width; + } + + function getLinkClassName() { + let ret = "image previewable"; + + if (isPortrait()) { + ret += " portrait"; + } + + return ret; + } + + function getVideoClassName() { + let ret = "preview"; + + if (isPortrait()) { + ret += " portrait"; + } + + return ret; + } + + var shiftKey = false; + + return ( + + props.onSelectedChanged(!props.selected, shiftKey)} + onClick={(event: React.MouseEvent) => { shiftKey = event.shiftKey; event.stopPropagation(); } } + /> + +
    + {maybeRenderRatingBanner()} + {maybeRenderSceneSpecsOverlay()} + {maybeRenderSceneStudioOverlay()} + +
    + +
    +

    + {!!props.scene.title ? props.scene.title : TextUtils.fileNameFromPath(props.scene.path)} +

    + {props.scene.date} +

    {TextUtils.truncate(props.scene.details, 100, "... (continued)")}

    +
    + + {maybeRenderPopoverButtonGroup()} +
    + ); +}; diff --git a/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx b/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx new file mode 100644 index 00000000000..7427f5a7561 --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx @@ -0,0 +1,95 @@ +import { Card, Spinner, Tab, Tabs } from 'react-bootstrap'; +import queryString from "query-string"; +import React, { FunctionComponent, useEffect, useState } from "react"; +import * as GQL from "../../../core/generated-graphql"; +import { StashService } from "../../../core/StashService"; +import { IBaseProps } from "../../../models"; +import { GalleryViewer } from "../../Galleries/GalleryViewer"; +import { ScenePlayer } from "../ScenePlayer/ScenePlayer"; +import { SceneDetailPanel } from "./SceneDetailPanel"; +import { SceneEditPanel } from "./SceneEditPanel"; +import { SceneFileInfoPanel } from "./SceneFileInfoPanel"; +import { SceneMarkersPanel } from "./SceneMarkersPanel"; +import { ScenePerformerPanel } from "./ScenePerformerPanel"; + +interface ISceneProps extends IBaseProps {} + +export const Scene: FunctionComponent = (props: ISceneProps) => { + const [timestamp, setTimestamp] = useState(0); + const [autoplay, setAutoplay] = useState(false); + const [scene, setScene] = useState>({}); + const [isLoading, setIsLoading] = useState(false); + const { data, error, loading } = StashService.useFindScene(props.match.params.id); + + useEffect(() => { + setIsLoading(loading); + if (!data || !data.findScene || !!error) { return; } + setScene(StashService.nullToUndefined(data.findScene)); + }, [data]); + + useEffect(() => { + const queryParams = queryString.parse(props.location.search); + if (!!queryParams.t && typeof queryParams.t === "string" && timestamp === 0) { + const newTimestamp = parseInt(queryParams.t, 10); + setTimestamp(newTimestamp); + } + if (queryParams.autoplay && typeof queryParams.autoplay === "string") { + setAutoplay(queryParams.autoplay === "true"); + } + }); + + function onClickMarker(marker: GQL.SceneMarkerDataFragment) { + setTimestamp(marker.seconds); + } + + if (!data || !data.findScene || isLoading || Object.keys(scene).length === 0) { + return ; + } + const modifiedScene = + Object.assign({scene_marker_tags: data.sceneMarkerTags}, scene) as GQL.SceneDataFragment; // TODO Hack from angular + if (!!error) { return <>error...; } + + return ( + <> + + + + + + + + + + {modifiedScene.performers.length > 0 ? + + + : '' + } + {!!modifiedScene.gallery ? + + + : '' + } + + + + + setScene(newScene)} + onDelete={() => props.history.push("/scenes")} + /> + + + + + ); +}; diff --git a/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx b/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx new file mode 100644 index 00000000000..cbdba0872c0 --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx @@ -0,0 +1,48 @@ +import React from "react"; +import * as GQL from "../../../core/generated-graphql"; +import { TextUtils } from "../../../utils/text"; +import { TagLink } from "../../Shared/TagLink"; +import { SceneHelpers } from "../helpers"; + +interface ISceneDetailProps { + scene: GQL.SceneDataFragment; +} + +export const SceneDetailPanel: React.FC = (props: ISceneDetailProps) => { + function renderDetails() { + if (!props.scene.details || props.scene.details === "") { return; } + return ( + <> +
    Details
    +

    {props.scene.details}

    + + ); + } + + function renderTags() { + if (props.scene.tags.length === 0) { return; } + const tags = props.scene.tags.map((tag) => ( + + )); + return ( + <> +
    Tags
    + {tags} + + ); + } + + return ( + <> + {SceneHelpers.maybeRenderStudio(props.scene, 70)} +

    + {!!props.scene.title ? props.scene.title : TextUtils.fileNameFromPath(props.scene.path)} +

    + {!!props.scene.date ?

    {props.scene.date}

    : undefined} + {!!props.scene.rating ?
    Rating: {props.scene.rating}
    : undefined} + {!!props.scene.file.height ?
    Resolution: {TextUtils.resolution(props.scene.file.height)}
    : undefined} + {renderDetails()} + {renderTags()} + + ); +}; diff --git a/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx b/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx new file mode 100644 index 00000000000..e446da27a68 --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx @@ -0,0 +1,393 @@ +import React, { useEffect, useState } from "react"; +import * as GQL from "../../../core/generated-graphql"; +import { StashService } from "../../../core/StashService"; +import { ErrorUtils } from "../../../utils/errors"; +import { ToastUtils } from "../../../utils/toasts"; +import { FilterMultiSelect } from "../../select/FilterMultiSelect"; +import { FilterSelect } from "../../select/FilterSelect"; +import { ValidGalleriesSelect } from "../../select/ValidGalleriesSelect"; +import { ImageUtils } from "../../../utils/image"; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import { Collapse, Dropdown, DropdownButton, Form, Button, Modal, Spinner } from 'react-bootstrap'; + +interface IProps { + scene: GQL.SceneDataFragment; + onUpdate: (scene: GQL.SceneDataFragment) => void; + onDelete: () => void; +} + +export const SceneEditPanel: React.FC = (props: IProps) => { + const [title, setTitle] = useState(undefined); + const [details, setDetails] = useState(undefined); + const [url, setUrl] = useState(undefined); + const [date, setDate] = useState(undefined); + const [rating, setRating] = useState(undefined); + const [galleryId, setGalleryId] = useState(undefined); + const [studioId, setStudioId] = useState(undefined); + const [performerIds, setPerformerIds] = useState(undefined); + const [tagIds, setTagIds] = useState(undefined); + const [coverImage, setCoverImage] = useState(undefined); + + const Scrapers = StashService.useListSceneScrapers(); + const [queryableScrapers, setQueryableScrapers] = useState([]); + + const [isDeleteAlertOpen, setIsDeleteAlertOpen] = useState(false); + const [deleteFile, setDeleteFile] = useState(false); + const [deleteGenerated, setDeleteGenerated] = useState(true); + + const [isCoverImageOpen, setIsCoverImageOpen] = useState(false); + const [coverImagePreview, setCoverImagePreview] = useState(undefined); + + // Network state + const [isLoading, setIsLoading] = useState(false); + + const updateScene = StashService.useSceneUpdate(getSceneInput()); + const deleteScene = StashService.useSceneDestroy(getSceneDeleteInput()); + + useEffect(() => { + var newQueryableScrapers : GQL.ListSceneScrapersListSceneScrapers[] = []; + + if (!!Scrapers.data && Scrapers.data.listSceneScrapers) { + newQueryableScrapers = Scrapers.data.listSceneScrapers.filter((s) => { + return s.scene && s.scene.supported_scrapes.includes(GQL.ScrapeType.Fragment); + }); + } + + setQueryableScrapers(newQueryableScrapers); + + }, [Scrapers.data]) + + function updateSceneEditState(state: Partial) { + const perfIds = !!state.performers ? state.performers.map((performer) => performer.id) : undefined; + const tIds = !!state.tags ? state.tags.map((tag) => tag.id) : undefined; + + setTitle(state.title); + setDetails(state.details); + setUrl(state.url); + setDate(state.date); + setRating(state.rating === null ? NaN : state.rating); + setGalleryId(state.gallery ? state.gallery.id : undefined); + setStudioId(state.studio ? state.studio.id : undefined); + setPerformerIds(perfIds); + setTagIds(tIds); + } + + useEffect(() => { + updateSceneEditState(props.scene); + setCoverImagePreview(props.scene.paths.screenshot); + }, [props.scene]); + + ImageUtils.addPasteImageHook(onImageLoad); + + function getSceneInput(): GQL.SceneUpdateInput { + return { + id: props.scene.id, + title, + details, + url, + date, + rating, + gallery_id: galleryId, + studio_id: studioId, + performer_ids: performerIds, + tag_ids: tagIds, + cover_image: coverImage, + }; + } + + async function onSave() { + setIsLoading(true); + try { + const result = await updateScene(); + props.onUpdate(result.data.sceneUpdate); + ToastUtils.success("Updated scene"); + } catch (e) { + ErrorUtils.handle(e); + } + setIsLoading(false); + } + + function getSceneDeleteInput(): GQL.SceneDestroyInput { + return { + id: props.scene.id, + delete_file: deleteFile, + delete_generated: deleteGenerated + }; + } + + async function onDelete() { + setIsDeleteAlertOpen(false); + setIsLoading(true); + try { + await deleteScene(); + ToastUtils.success("Deleted scene"); + } catch (e) { + ErrorUtils.handle(e); + } + setIsLoading(false); + + props.onDelete(); + } + + function renderMultiSelect(type: "performers" | "tags", initialIds: string[] | undefined) { + return ( + { + const ids = items.map((i) => i.id); + switch (type) { + case "performers": setPerformerIds(ids); break; + case "tags": setTagIds(ids); break; + } + }} + initialIds={initialIds} + /> + ); + } + + function renderDeleteAlert() { + return ( + {}} + show={isDeleteAlertOpen} + > + + + Delete Scene? + + +

    + Are you sure you want to delete this scene? Unless the file is also deleted, this scene will be re-added when scan is performed. +

    +
    + setDeleteFile(!deleteFile)} /> + setDeleteGenerated(!deleteGenerated)} /> + +
    + + +
    + + +
    +
    +
    + ); + } + + function onImageLoad(this: FileReader) { + setCoverImagePreview(this.result as string); + setCoverImage(this.result as string); + } + + function onCoverImageChange(event: React.FormEvent) { + ImageUtils.onImageChange(event, onImageLoad); + } + + async function onScrapeClicked(scraper : GQL.ListSceneScrapersListSceneScrapers) { + setIsLoading(true); + try { + const result = await StashService.queryScrapeScene(scraper.id, getSceneInput()); + if (!result.data || !result.data.scrapeScene) { return; } + updateSceneFromScrapedScene(result.data.scrapeScene); + } catch (e) { + ErrorUtils.handle(e); + } finally { + setIsLoading(false); + } + } + + function renderScraperMenu() { + if (!queryableScrapers || queryableScrapers.length === 0) { + return; + } + + return ( + + { queryableScrapers.map(s => ( + onScrapeClicked(s)}>{s.name} + )) + } + + ); + } + + function urlScrapable(url: string) : boolean { + return !!url && !!Scrapers.data && Scrapers.data.listSceneScrapers && Scrapers.data.listSceneScrapers.some((s) => { + return !!s.scene && !!s.scene.urls && s.scene.urls.some((u) => { return url.includes(u); }); + }); + } + + function updateSceneFromScrapedScene(scene : GQL.ScrapedSceneDataFragment) { + if (!title && scene.title) { + setTitle(scene.title); + } + + if (!details && scene.details) { + setDetails(scene.details); + } + + if (!date && scene.date) { + setDate(scene.date); + } + + if (!url && scene.url) { + setUrl(scene.url); + } + + if (!studioId && scene.studio && scene.studio.id) { + setStudioId(scene.studio.id); + } + + if ((!performerIds || performerIds.length === 0) && scene.performers && scene.performers.length > 0) { + let idPerfs = scene.performers.filter((p) => { + return p.id !== undefined && p.id !== null; + }); + + if (idPerfs.length > 0) { + let newIds = idPerfs.map((p) => p.id); + setPerformerIds(newIds as string[]); + } + } + + if ((!tagIds || tagIds.length === 0) && scene.tags && scene.tags.length > 0) { + let idTags = scene.tags.filter((p) => { + return p.id !== undefined && p.id !== null; + }); + + if (idTags.length > 0) { + let newIds = idTags.map((p) => p.id); + setTagIds(newIds as string[]); + } + } + } + + async function onScrapeSceneURL() { + if (!url) { return; } + setIsLoading(true); + try { + const result = await StashService.queryScrapeSceneURL(url); + if (!result.data || !result.data.scrapeSceneURL) { return; } + updateSceneFromScrapedScene(result.data.scrapeSceneURL); + } catch (e) { + ErrorUtils.handle(e); + } finally { + setIsLoading(false); + } + } + + function maybeRenderScrapeButton() { + if (!url || !urlScrapable(url)) { + return undefined; + } + return ( + + ) + } + + return ( + <> + {renderDeleteAlert()} + {isLoading ? : undefined} +
    + + Title + setTitle(newValue.target.value)} + value={title} + /> + + + + Details + setDetails(newValue.target.value)} + value={details} + /> + + + + URL + setUrl(newValue.target.value)} + value={url} + /> + {maybeRenderScrapeButton()} + + + + Date + setDate(newValue.target.value)} + value={date} + /> +
    YYYY-MM-DD
    +
    + + + Rating + setRating(parseInt(event.target.value, 10))}> + { ["", 1, 2, 3, 4, 5].map(opt => ( + + )) } + + + + + Gallery + setGalleryId(item ? item.id : undefined)} + /> + + + + Studio + setStudioId(item ? item.id : undefined)} + initialId={studioId} + /> + + + + Performers + {renderMultiSelect("performers", performerIds)} + + + + Tags + {renderMultiSelect("tags", tagIds)} + + +
    + + +
    + + + + +
    +
    +
    + +
    + + + {renderScraperMenu()} + + ); +}; diff --git a/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx b/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx new file mode 100644 index 00000000000..48c8f2118be --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx @@ -0,0 +1,137 @@ +import { Table } from 'react-bootstrap'; +import React, { FunctionComponent } from "react"; +import * as GQL from "../../../core/generated-graphql"; +import { TextUtils } from "../../../utils/text"; + +interface ISceneFileInfoPanelProps { + scene: GQL.SceneDataFragment; +} + +export const SceneFileInfoPanel: FunctionComponent = (props: ISceneFileInfoPanelProps) => { + function renderChecksum() { + return ( + + Checksum + {props.scene.checksum} + + ); + } + + function renderPath() { + return ( + + Path + {"file://"+props.scene.path} + + ); + } + + function renderStream() { + return ( + + Stream + {props.scene.paths.stream} + + ); + } + + function renderFileSize() { + if (props.scene.file.size === undefined) { return; } + return ( + + File Size + {TextUtils.fileSize(parseInt(props.scene.file.size, 10))} + + ); + } + + function renderDuration() { + if (props.scene.file.duration === undefined) { return; } + return ( + + Duration + {TextUtils.secondsToTimestamp(props.scene.file.duration)} + + ); + } + + function renderDimensions() { + if (props.scene.file.duration === undefined) { return; } + return ( + + Dimensions + {props.scene.file.width} x {props.scene.file.height} + + ); + } + + function renderFrameRate() { + if (props.scene.file.framerate === undefined) { return; } + return ( + + Frame Rate + {props.scene.file.framerate} frames per second + + ); + } + + function renderBitRate() { + if (props.scene.file.bitrate === undefined) { return; } + return ( + + Bit Rate + {TextUtils.bitRate(props.scene.file.bitrate)} + + ); + } + + function renderVideoCodec() { + if (props.scene.file.video_codec === undefined) { return; } + return ( + + Video Codec + {props.scene.file.video_codec} + + ); + } + + function renderAudioCodec() { + if (props.scene.file.audio_codec === undefined) { return; } + return ( + + Audio Codec + {props.scene.file.audio_codec} + + ); + } + + function renderUrl() { + if (!props.scene.url || props.scene.url === "") { return; } + return ( + + Downloaded From + {props.scene.url} + + ); + } + + return ( + <> + + + {renderChecksum()} + {renderPath()} + {renderStream()} + {renderFileSize()} + {renderDuration()} + {renderDimensions()} + {renderFrameRate()} + {renderBitRate()} + {renderVideoCodec()} + {renderAudioCodec()} + {renderUrl()} + +
    + + ); +}; diff --git a/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx b/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx new file mode 100644 index 00000000000..80c497ac49a --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx @@ -0,0 +1,267 @@ +import { Badge, Button, Card, Collapse, Form as BootstrapForm } from 'react-bootstrap'; +import { Field, FieldProps, Form, Formik, FormikActions, FormikProps } from "formik"; +import React, { CSSProperties, FunctionComponent, useState } from "react"; +import * as GQL from "../../../core/generated-graphql"; +import { StashService } from "../../../core/StashService"; +import { TextUtils } from "../../../utils/text"; +import { FilterMultiSelect } from "../../select/FilterMultiSelect"; +import { FilterSelect } from "../../select/FilterSelect"; +import { MarkerTitleSuggest } from "../../select/MarkerTitleSuggest"; +import { WallPanel } from "../../Wall/WallPanel"; +import { SceneHelpers } from "../helpers"; +import { ErrorUtils } from "../../../utils/errors"; +import { DurationInput } from "../../Shared/DurationInput"; + +interface ISceneMarkersPanelProps { + scene: GQL.SceneDataFragment; + onClickMarker: (marker: GQL.SceneMarkerDataFragment) => void; +} + +interface IFormFields { + title: string; + seconds: string; + primaryTagId: string; + tagIds: string[]; +} + +export const SceneMarkersPanel: FunctionComponent = (props: ISceneMarkersPanelProps) => { + const [isEditorOpen, setIsEditorOpen] = useState(false); + const [editingMarker, setEditingMarker] = useState(null); + + const sceneMarkerCreate = StashService.useSceneMarkerCreate(); + const sceneMarkerUpdate = StashService.useSceneMarkerUpdate(); + const sceneMarkerDestroy = StashService.useSceneMarkerDestroy(); + + const jwplayer = SceneHelpers.getPlayer(); + + function onOpenEditor(marker: GQL.SceneMarkerDataFragment | null = null) { + setIsEditorOpen(true); + setEditingMarker(marker); + } + + function onClickMarker(marker: GQL.SceneMarkerDataFragment) { + props.onClickMarker(marker); + } + + function renderTags() { + function renderMarkers(primaryTag: GQL.FindSceneSceneMarkerTags) { + const markers = primaryTag.scene_markers.map((marker) => { + const markerTags = marker.tags.map((tag) => ( + {tag.name} + )); + + return ( +
    +
    + +
    + {TextUtils.secondsToTimestamp(marker.seconds)} +
    +
    + {markerTags} +
    +
    + ); + }); + return markers; + } + + const style: CSSProperties = { + height: "300px", + overflowY: "auto", + overflowX: "hidden", + display: "inline-block", + margin: "5px", + width: "300px", + flex: "0 0 auto", + }; + const tags = (props.scene as any).scene_marker_tags.map((primaryTag: GQL.FindSceneSceneMarkerTags) => { + + return ( +
    + +
    +

    {primaryTag.tag.name}

    + {renderMarkers(primaryTag)} +
    +
    +
    + ); + }); + return tags; + } + + function renderForm() { + function onSubmit(values: IFormFields, _: FormikActions) { + const isEditing = !!editingMarker; + const variables: GQL.SceneMarkerCreateVariables | GQL.SceneMarkerUpdateVariables = { + title: values.title, + seconds: parseFloat(values.seconds), + scene_id: props.scene.id, + primary_tag_id: values.primaryTagId, + tag_ids: values.tagIds, + }; + if (!isEditing) { + sceneMarkerCreate({ variables }).then((response) => { + setIsEditorOpen(false); + setEditingMarker(null); + }).catch((err) => ErrorUtils.handleApolloError(err)); + } else { + const updateVariables = variables as GQL.SceneMarkerUpdateVariables; + updateVariables.id = editingMarker!.id; + sceneMarkerUpdate({ variables: updateVariables }).then((response) => { + setIsEditorOpen(false); + setEditingMarker(null); + }).catch((err) => ErrorUtils.handleApolloError(err)); + } + } + function onDelete() { + if (!editingMarker) { return; } + sceneMarkerDestroy({variables: {id: editingMarker.id}}).then((response) => { + console.log(response); + }).catch((err) => console.error(err)); + setIsEditorOpen(false); + setEditingMarker(null); + } + function renderTitleField(fieldProps: FieldProps) { + return ( + fieldProps.form.setFieldValue("title", query)} + /> + ); + } + function renderSecondsField(fieldProps: FieldProps) { + return ( + fieldProps.form.setFieldValue("seconds", s)} + onReset={() => fieldProps.form.setFieldValue("seconds", Math.round(jwplayer.getPosition()))} + numericValue={fieldProps.field.value} + /> + ); + } + function renderPrimaryTagField(fieldProps: FieldProps) { + return ( + fieldProps.form.setFieldValue("primaryTagId", tag ? tag.id : undefined)} + initialId={!!editingMarker ? editingMarker.primary_tag.id : undefined} + /> + ); + } + function renderTagsField(fieldProps: FieldProps) { + return ( + fieldProps.form.setFieldValue("tagIds", tags.map((tag) => tag.id))} + initialIds={!!editingMarker ? fieldProps.form.values.tagIds : undefined} + /> + ); + } + function renderFormFields(formikProps: FormikProps) { + let deleteButton: JSX.Element | undefined; + if (!!editingMarker) { + deleteButton = ( + + ); + } + return ( +
    +
    + + Scene Marker Title + + + + Time + + + + Primary Tag + + + + Tags + + +
    +
    + + + {deleteButton} +
    +
    + ); + } + let initialValues: any; + if (!!editingMarker) { + initialValues = { + title: editingMarker.title, + seconds: editingMarker.seconds, + primaryTagId: editingMarker.primary_tag.id, + tagIds: editingMarker.tags.map((tag) => tag.id), + }; + } else { + initialValues = {title: "", seconds: Math.round(jwplayer.getPosition()), primaryTagId: "", tagIds: []}; + } + return ( + +
    + +
    +
    + ); + } + + function render() { + const newMarkerForm = ( +
    + + {renderForm()} +
    + ); + if (props.scene.scene_markers.length === 0) { + return newMarkerForm; + } + + const containerStyle: CSSProperties = { + overflowY: "hidden", + overflowX: "scroll", + whiteSpace: "nowrap", + display: "flex", + flexWrap: "nowrap", + marginBottom: "20px", + }; + return ( + <> + {newMarkerForm} +
    + {renderTags()} +
    + { window.scrollTo(0, 0); onClickMarker(marker as any); }} + /> + + ); + } + + return render(); +}; diff --git a/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx b/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx new file mode 100644 index 00000000000..9c2aa63734f --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx @@ -0,0 +1,21 @@ +import React, { FunctionComponent } from "react"; +import * as GQL from "../../../core/generated-graphql"; +import { PerformerCard } from "../../performers/PerformerCard"; + +interface IScenePerformerPanelProps { + scene: GQL.SceneDataFragment; +} + +export const ScenePerformerPanel: FunctionComponent = (props: IScenePerformerPanelProps) => { + const cards = props.scene.performers.map((performer) => ( + + )); + + return ( + <> +
    + {cards} +
    + + ); +}; diff --git a/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx b/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx new file mode 100644 index 00000000000..fdae8f375cd --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx @@ -0,0 +1,982 @@ +import { Badge, Button, Card, Collapse, Dropdown, DropdownButton, Form, Table, Spinner } from 'react-bootstrap'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' +import React, { useEffect, useState } from "react"; +import { StashService } from "../../core/StashService"; +import * as GQL from "../../core/generated-graphql"; +import { SlimSceneDataFragment, Maybe } from "../../core/generated-graphql"; +import { TextUtils } from "../../utils/text"; +import _ from "lodash"; +import { ToastUtils } from "../../utils/toasts"; +import { ErrorUtils } from "../../utils/errors"; +import { Pagination } from "../list/Pagination"; +import { FilterMultiSelect } from "../select/FilterMultiSelect"; +import { FilterSelect } from "../select/FilterSelect"; + +class ParserResult { + public value: Maybe; + public originalValue: Maybe; + public set: boolean = false; + + public setOriginalValue(v : Maybe) { + this.originalValue = v; + this.value = v; + } + + public setValue(v : Maybe) { + if (!!v) { + this.value = v; + this.set = !_.isEqual(this.value, this.originalValue); + } + } +} + +class ParserField { + public field : string; + public helperText? : string; + + constructor(field: string, helperText?: string) { + this.field = field; + this.helperText = helperText; + } + + public getFieldPattern() { + return "{" + this.field + "}"; + } + + static Title = new ParserField("title"); + static Ext = new ParserField("ext", "File extension"); + + static I = new ParserField("i", "Matches any ignored word"); + static D = new ParserField("d", "Matches any delimiter (.-_)"); + + static Performer = new ParserField("performer"); + static Studio = new ParserField("studio"); + static Tag = new ParserField("tag"); + + // date fields + static Date = new ParserField("date", "YYYY-MM-DD"); + static YYYY = new ParserField("yyyy", "Year"); + static YY = new ParserField("yy", "Year (20YY)"); + static MM = new ParserField("mm", "Two digit month"); + static DD = new ParserField("dd", "Two digit date"); + static YYYYMMDD = new ParserField("yyyymmdd"); + static YYMMDD = new ParserField("yymmdd"); + static DDMMYYYY = new ParserField("ddmmyyyy"); + static DDMMYY = new ParserField("ddmmyy"); + static MMDDYYYY = new ParserField("mmddyyyy"); + static MMDDYY = new ParserField("mmddyy"); + + static validFields = [ + ParserField.Title, + ParserField.Ext, + ParserField.D, + ParserField.I, + ParserField.Performer, + ParserField.Studio, + ParserField.Tag, + ParserField.Date, + ParserField.YYYY, + ParserField.YY, + ParserField.MM, + ParserField.DD, + ParserField.YYYYMMDD, + ParserField.YYMMDD, + ParserField.DDMMYYYY, + ParserField.DDMMYY, + ParserField.MMDDYYYY, + ParserField.MMDDYY + ] + + static fullDateFields = [ + ParserField.YYYYMMDD, + ParserField.YYMMDD, + ParserField.DDMMYYYY, + ParserField.DDMMYY, + ParserField.MMDDYYYY, + ParserField.MMDDYY + ]; +} +class SceneParserResult { + public id: string; + public filename: string; + public title: ParserResult = new ParserResult(); + public date: ParserResult = new ParserResult(); + + public studio: ParserResult = new ParserResult(); + public studioId: ParserResult = new ParserResult(); + public tags: ParserResult = new ParserResult(); + public tagIds: ParserResult = new ParserResult(); + public performers: ParserResult = new ParserResult(); + public performerIds: ParserResult = new ParserResult(); + + public scene : SlimSceneDataFragment; + + constructor(result : GQL.ParseSceneFilenamesResults) { + this.scene = result.scene; + + this.id = this.scene.id; + this.filename = TextUtils.fileNameFromPath(this.scene.path); + this.title.setOriginalValue(this.scene.title); + this.date.setOriginalValue(this.scene.date); + this.performerIds.setOriginalValue(this.scene.performers.map((p) => p.id)); + this.performers.setOriginalValue(this.scene.performers); + this.tagIds.setOriginalValue(this.scene.tags.map((t) => t.id)); + this.tags.setOriginalValue(this.scene.tags); + this.studioId.setOriginalValue(this.scene.studio ? this.scene.studio.id : undefined); + this.studio.setOriginalValue(this.scene.studio); + + this.title.setValue(result.title); + this.date.setValue(result.date); + this.performerIds.setValue(result.performer_ids); + this.tagIds.setValue(result.tag_ids); + this.studioId.setValue(result.studio_id); + + if (result.performer_ids) { + this.performers.setValue(result.performer_ids.map((p) => { + return { + id: p, + name: "", + favorite: false, + image_path: "" + }; + })); + } + + if (result.tag_ids) { + this.tags.setValue(result.tag_ids.map((t) => { + return { + id: t, + name: "", + }; + })); + } + + if (result.studio_id) { + this.studio.setValue({ + id: result.studio_id, + name: "", + image_path: "" + }); + } + } + + private static setInput(object: any, key: string, parserResult : ParserResult) { + if (parserResult.set) { + object[key] = parserResult.value; + } + } + + // returns true if any of its fields have set == true + public isChanged() { + return this.title.set || this.date.set || this.performerIds.set || this.studioId.set || this.tagIds.set; + } + + public toSceneUpdateInput() { + var ret = { + id: this.id, + title: this.scene.title, + details: this.scene.details, + url: this.scene.url, + date: this.scene.date, + rating: this.scene.rating, + gallery_id: this.scene.gallery ? this.scene.gallery.id : undefined, + studio_id: this.scene.studio ? this.scene.studio.id : undefined, + performer_ids: this.scene.performers.map((performer) => performer.id), + tag_ids: this.scene.tags.map((tag) => tag.id) + }; + + SceneParserResult.setInput(ret, "title", this.title); + SceneParserResult.setInput(ret, "date", this.date); + SceneParserResult.setInput(ret, "performer_ids", this.performerIds); + SceneParserResult.setInput(ret, "studio_id", this.studioId); + SceneParserResult.setInput(ret, "tag_ids", this.tagIds); + + return ret; + } +}; + +interface IParserInput { + pattern: string, + ignoreWords: string[], + whitespaceCharacters: string, + capitalizeTitle: boolean, + page: number, + pageSize: number, + findClicked: boolean +} + +interface IParserRecipe { + pattern: string, + ignoreWords: string[], + whitespaceCharacters: string, + capitalizeTitle: boolean, + description: string +} + +const builtInRecipes = [ + { + pattern: "{title}", + ignoreWords: [], + whitespaceCharacters: "", + capitalizeTitle: false, + description: "Filename" + }, + { + pattern: "{title}.{ext}", + ignoreWords: [], + whitespaceCharacters: "", + capitalizeTitle: false, + description: "Without extension" + }, + { + pattern: "{}.{yy}.{mm}.{dd}.{title}.XXX.{}.{ext}", + ignoreWords: [], + whitespaceCharacters: ".", + capitalizeTitle: true, + description: "" + }, + { + pattern: "{}.{yy}.{mm}.{dd}.{title}.{ext}", + ignoreWords: [], + whitespaceCharacters: ".", + capitalizeTitle: true, + description: "" + }, + { + pattern: "{title}.XXX.{}.{ext}", + ignoreWords: [], + whitespaceCharacters: ".", + capitalizeTitle: true, + description: "" + }, + { + pattern: "{}.{yy}.{mm}.{dd}.{title}.{i}.{ext}", + ignoreWords: ["cz", "fr"], + whitespaceCharacters: ".", + capitalizeTitle: true, + description: "Foreign language" + } +]; + +export const SceneFilenameParser: React.FC = () => { + const [parserResult, setParserResult] = useState([]); + const [parserInput, setParserInput] = useState(initialParserInput()); + + const [allTitleSet, setAllTitleSet] = useState(false); + const [allDateSet, setAllDateSet] = useState(false); + const [allPerformerSet, setAllPerformerSet] = useState(false); + const [allTagSet, setAllTagSet] = useState(false); + const [allStudioSet, setAllStudioSet] = useState(false); + + const [showFields, setShowFields] = useState>(initialShowFieldsState()); + + const [totalItems, setTotalItems] = useState(0); + + // Network state + const [isLoading, setIsLoading] = useState(false); + + const updateScenes = StashService.useScenesUpdate(getScenesUpdateData()); + + function initialParserInput() { + return { + pattern: "{title}.{ext}", + ignoreWords: [], + whitespaceCharacters: "._", + capitalizeTitle: true, + page: 1, + pageSize: 20, + findClicked: false + }; + } + + function initialShowFieldsState() { + return new Map([ + ["Title", true], + ["Date", true], + ["Performers", true], + ["Tags", true], + ["Studio", true] + ]); + } + + function getParserFilter() { + return { + q: parserInput.pattern, + page: parserInput.page, + per_page: parserInput.pageSize, + sort: "path", + direction: GQL.SortDirectionEnum.Asc, + }; + } + + function getParserInput() { + return { + ignoreWords: parserInput.ignoreWords, + whitespaceCharacters: parserInput.whitespaceCharacters, + capitalizeTitle: parserInput.capitalizeTitle + }; + } + + async function onFind() { + setParserResult([]); + + setIsLoading(true); + + try { + const response = await StashService.queryParseSceneFilenames(getParserFilter(), getParserInput()); + + let result = response.data.parseSceneFilenames; + if (!!result) { + parseResults(result.results); + setTotalItems(result.count); + } + } catch (err) { + ErrorUtils.handle(err); + } + + setIsLoading(false); + } + + useEffect(() => { + if(parserInput.findClicked) { + onFind(); + } + }, [parserInput]); + + function onPageSizeChanged(newSize : number) { + var newInput = _.clone(parserInput); + newInput.page = 1; + newInput.pageSize = newSize; + setParserInput(newInput); + } + + function onPageChanged(newPage : number) { + if (newPage !== parserInput.page) { + var newInput = _.clone(parserInput); + newInput.page = newPage; + setParserInput(newInput); + } + } + + function onFindClicked(input : IParserInput) { + input.page = 1; + input.findClicked = true; + setParserInput(input); + setTotalItems(0); + } + + function getScenesUpdateData() { + return parserResult.filter((result) => result.isChanged()).map((result) => result.toSceneUpdateInput()); + } + + async function onApply() { + setIsLoading(true); + + try { + await updateScenes(); + ToastUtils.success("Updated scenes"); + } catch (e) { + ErrorUtils.handle(e); + } + + setIsLoading(false); + } + + function parseResults(results : GQL.ParseSceneFilenamesResults[]) { + if (results) { + var result = results.map((r) => { + return new SceneParserResult(r); + }).filter((r) => !!r) as SceneParserResult[]; + + setParserResult(result); + determineFieldsToHide(); + } + } + + function determineFieldsToHide() { + var pattern = parserInput.pattern; + var titleSet = pattern.includes("{title}"); + var dateSet = pattern.includes("{date}") || + pattern.includes("{dd}") || // don't worry about other partial date fields since this should be implied + ParserField.fullDateFields.some((f) => { + return pattern.includes("{" + f.field + "}"); + }); + var performerSet = pattern.includes("{performer}"); + var tagSet = pattern.includes("{tag}"); + var studioSet = pattern.includes("{studio}"); + + var showFieldsCopy = _.clone(showFields); + showFieldsCopy.set("Title", titleSet); + showFieldsCopy.set("Date", dateSet); + showFieldsCopy.set("Performers", performerSet); + showFieldsCopy.set("Tags", tagSet); + showFieldsCopy.set("Studio", studioSet); + setShowFields(showFieldsCopy); + } + + useEffect(() => { + var newAllTitleSet = !parserResult.some((r) => { + return !r.title.set; + }); + var newAllDateSet = !parserResult.some((r) => { + return !r.date.set; + }); + var newAllPerformerSet = !parserResult.some((r) => { + return !r.performerIds.set; + }); + var newAllTagSet = !parserResult.some((r) => { + return !r.tagIds.set; + }); + var newAllStudioSet = !parserResult.some((r) => { + return !r.studioId.set; + }); + + if (newAllTitleSet != allTitleSet) { + setAllTitleSet(newAllTitleSet); + } + if (newAllDateSet != allDateSet) { + setAllDateSet(newAllDateSet); + } + if (newAllPerformerSet != allPerformerSet) { + setAllTagSet(newAllPerformerSet); + } + if (newAllTagSet != allTagSet) { + setAllTagSet(newAllTagSet); + } + if (newAllStudioSet != allStudioSet) { + setAllStudioSet(newAllStudioSet); + } + }, [parserResult]); + + function onSelectAllTitleSet(selected : boolean) { + var newResult = [...parserResult]; + + newResult.forEach((r) => { + r.title.set = selected; + }); + + setParserResult(newResult); + setAllTitleSet(selected); + } + + function onSelectAllDateSet(selected : boolean) { + var newResult = [...parserResult]; + + newResult.forEach((r) => { + r.date.set = selected; + }); + + setParserResult(newResult); + setAllDateSet(selected); + } + + function onSelectAllPerformerSet(selected : boolean) { + var newResult = [...parserResult]; + + newResult.forEach((r) => { + r.performerIds.set = selected; + }); + + setParserResult(newResult); + setAllPerformerSet(selected); + } + + function onSelectAllTagSet(selected : boolean) { + var newResult = [...parserResult]; + + newResult.forEach((r) => { + r.tagIds.set = selected; + }); + + setParserResult(newResult); + setAllTagSet(selected); + } + + function onSelectAllStudioSet(selected : boolean) { + var newResult = [...parserResult]; + + newResult.forEach((r) => { + r.studioId.set = selected; + }); + + setParserResult(newResult); + setAllStudioSet(selected); + } + + interface IShowFieldsProps { + fields: Map + onShowFieldsChanged: (fields : Map) => void + } + + function ShowFields(props: IShowFieldsProps) { + const [open, setOpen] = useState(false); + + function handleClick(label: string) { + const copy = new Map(props.fields); + copy.set(label, !props.fields.get(label)); + props.onShowFieldsChanged(copy); + } + + const fieldRows = [...props.fields.entries()].map(([label, enabled]) => ( +
    {handleClick(label)}}> + + {label} +
    + )); + + return ( +
    +
    setOpen(!open)}> + + Display fields +
    + +
    + {fieldRows} +
    +
    +
    + ); + } + + interface IParserInputProps { + input: IParserInput, + onFind: (input : IParserInput) => void + } + + function ParserInput(props : IParserInputProps) { + const [pattern, setPattern] = useState(props.input.pattern); + const [ignoreWords, setIgnoreWords] = useState(props.input.ignoreWords.join(" ")); + const [whitespaceCharacters, setWhitespaceCharacters] = useState(props.input.whitespaceCharacters); + const [capitalizeTitle, setCapitalizeTitle] = useState(props.input.capitalizeTitle); + + function onFind() { + props.onFind({ + pattern: pattern, + ignoreWords: ignoreWords.split(" "), + whitespaceCharacters: whitespaceCharacters, + capitalizeTitle: capitalizeTitle, + page: 1, + pageSize: props.input.pageSize, + findClicked: props.input.findClicked + }); + } + + function setParserRecipe(recipe: IParserRecipe) { + setPattern(recipe.pattern); + setIgnoreWords(recipe.ignoreWords.join(" ")); + setWhitespaceCharacters(recipe.whitespaceCharacters); + setCapitalizeTitle(recipe.capitalizeTitle); + } + + const validFields = [new ParserField("", "Wildcard")].concat(ParserField.validFields); + + function addParserField(field: ParserField) { + setPattern(pattern + field.getFieldPattern()); + } + + const PAGE_SIZE_OPTIONS = ["20", "40", "60", "120"]; + + return ( + + + setPattern(newValue.target.value)} + value={pattern} + /> + + { validFields.map(item => ( + addParserField(item)}> + {item.field}{item.helperText} + + ))} + +
    Use '\\' to escape literal {} characters
    +
    + + + Ignored words:: + setIgnoreWords(newValue.target.value)} + value={ignoreWords} + /> +
    Matches with {"{i}"}
    +
    + + +
    Title
    + Whitespace characters: + setWhitespaceCharacters(newValue.target.value)} + value={whitespaceCharacters} + /> + + Capitalize title + setCapitalizeTitle(!capitalizeTitle)} + /> + +
    These characters will be replaced with whitespace in the title
    +
    + + {/* TODO - mapping stuff will go here */} + + + + { builtInRecipes.map(item => ( + setParserRecipe(item)}> + {item.pattern}{item.description} + + ))} + + + + + setShowFields(fields)} + /> + + + + + onPageSizeChanged(parseInt(event.target.value))} + defaultValue={props.input.pageSize} + className="filter-item" + > + { PAGE_SIZE_OPTIONS.map(val => ) } + + +
    + ); + } + + interface ISceneParserFieldProps { + parserResult : ParserResult + className? : string + fieldName : string + onSetChanged : (set : boolean) => void + onValueChanged : (value : any) => void + originalParserResult? : ParserResult + renderOriginalInputField: (props : ISceneParserFieldProps) => JSX.Element + renderNewInputField: (props : ISceneParserFieldProps, onChange : (event : any) => void) => JSX.Element + } + + function SceneParserField(props : ISceneParserFieldProps) { + + function maybeValueChanged(value : any) { + if (value !== props.parserResult.value) { + props.onValueChanged(value); + } + } + + if (!showFields.get(props.fieldName)) { + return null; + } + + return ( + <> + + {props.onSetChanged(!props.parserResult.set)}} + /> + + + + {props.renderOriginalInputField(props)} + {props.renderNewInputField(props, (value) => maybeValueChanged(value))} + + + + ); + } + + function renderOriginalInputGroup(props: ISceneParserFieldProps) { + var parserResult = props.originalParserResult || props.parserResult; + + return ( + + ); + } + + interface IInputGroupWrapperProps { + parserResult: ParserResult + onChange : (event : any) => void + className? : string + } + + function InputGroupWrapper(props: IInputGroupWrapperProps) { + return ( + props.onChange(event.target.value)} + /> + ); + } + + function renderNewInputGroup(props : ISceneParserFieldProps, onChange : (value : any) => void) { + return ( + {onChange(value)}} + parserResult={props.parserResult} + /> + ); + } + + interface HasName { + name: string + } + + function renderOriginalSelect(props : ISceneParserFieldProps) { + const parserResult = props.originalParserResult || props.parserResult; + + const elements = parserResult.originalValue + ? Array.isArray(parserResult.originalValue) + ? parserResult.originalValue.map((el:HasName) => el.name) + : parserResult.originalValue.name + : []; + + return ( +
    + { elements.map((name:string) => {name}) } +
    + ); + } + + function renderNewMultiSelect(type: "performers" | "tags", props : ISceneParserFieldProps, onChange : (value : any) => void) { + return ( + { + const ids = items.map((i) => i.id); + onChange(ids); + }} + initialIds={props.parserResult.value} + /> + ); + } + + function renderNewPerformerSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) { + return renderNewMultiSelect("performers", props, onChange); + } + + function renderNewTagSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) { + return renderNewMultiSelect("tags", props, onChange); + } + + function renderNewStudioSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) { + return ( + onChange(item ? item.id : undefined)} + initialId={props.parserResult.value} + /> + ); + } + + interface ISceneParserRowProps { + scene : SceneParserResult, + onChange: (changedScene : SceneParserResult) => void + } + + function SceneParserRow(props : ISceneParserRowProps) { + + function changeParser(result : ParserResult, set : boolean, value : any) { + var newParser = _.clone(result); + newParser.set = set; + newParser.value = value; + return newParser; + } + + function onTitleChanged(set : boolean, value: string | undefined) { + var newResult = _.clone(props.scene); + newResult.title = changeParser(newResult.title, set, value); + props.onChange(newResult); + } + + function onDateChanged(set : boolean, value: string | undefined) { + var newResult = _.clone(props.scene); + newResult.date = changeParser(newResult.date, set, value); + props.onChange(newResult); + } + + function onPerformerIdsChanged(set : boolean, value: string[] | undefined) { + var newResult = _.clone(props.scene); + newResult.performerIds = changeParser(newResult.performerIds, set, value); + props.onChange(newResult); + } + + function onTagIdsChanged(set : boolean, value: string[] | undefined) { + var newResult = _.clone(props.scene); + newResult.tagIds = changeParser(newResult.tagIds, set, value); + props.onChange(newResult); + } + + function onStudioIdChanged(set : boolean, value: string | undefined) { + var newResult = _.clone(props.scene); + newResult.studioId = changeParser(newResult.studioId, set, value); + props.onChange(newResult); + } + + return ( + + + {props.scene.filename} + + onTitleChanged(set, props.scene.title.value)} + onValueChanged={(value) => onTitleChanged(props.scene.title.set, value)} + renderOriginalInputField={renderOriginalInputGroup} + renderNewInputField={renderNewInputGroup} + /> + onDateChanged(set, props.scene.date.value)} + onValueChanged={(value) => onDateChanged(props.scene.date.set, value)} + renderOriginalInputField={renderOriginalInputGroup} + renderNewInputField={renderNewInputGroup} + /> + onPerformerIdsChanged(set, props.scene.performerIds.value)} + onValueChanged={(value) => onPerformerIdsChanged(props.scene.performerIds.set, value)} + renderOriginalInputField={renderOriginalSelect} + renderNewInputField={renderNewPerformerSelect} + /> + onTagIdsChanged(set, props.scene.tagIds.value)} + onValueChanged={(value) => onTagIdsChanged(props.scene.tagIds.set, value)} + renderOriginalInputField={renderOriginalSelect} + renderNewInputField={renderNewTagSelect} + /> + onStudioIdChanged(set, props.scene.studioId.value)} + onValueChanged={(value) => onStudioIdChanged(props.scene.studioId.set, value)} + renderOriginalInputField={renderOriginalSelect} + renderNewInputField={renderNewStudioSelect} + /> + + ) + } + + function onChange(scene : SceneParserResult, changedScene : SceneParserResult) { + var newResult = [...parserResult]; + + var index = newResult.indexOf(scene); + newResult[index] = changedScene; + + setParserResult(newResult); + } + + function renderHeader(fieldName: string, allSet: boolean, onAllSet: (set: boolean) => void) { + if (!showFields.get(fieldName)) { + return null; + } + + return ( + <> + + {onAllSet(!allSet)}} + /> + + {fieldName} + + ) + } + + function renderTable() { + if (parserResult.length == 0) { return undefined; } + + return ( + <> +
    +
    + + + + + {renderHeader("Title", allTitleSet, onSelectAllTitleSet)} + {renderHeader("Date", allDateSet, onSelectAllDateSet)} + {renderHeader("Performers", allPerformerSet, onSelectAllPerformerSet)} + {renderHeader("Tags", allTagSet, onSelectAllTagSet)} + {renderHeader("Studio", allStudioSet, onSelectAllStudioSet)} + + + + {parserResult.map((scene) => + onChange(scene, changedScene)}/> + )} + +
    Filename
    +
    + onPageChanged(page)} + /> + +
    + + ) + } + + return ( + +

    Scene Filename Parser

    + onFindClicked(input)} + /> + + {isLoading ? : undefined} + {renderTable()} +
    + ); +}; + diff --git a/ui/v2.5/src/components/scenes/SceneList.tsx b/ui/v2.5/src/components/scenes/SceneList.tsx new file mode 100644 index 00000000000..77e84e664be --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneList.tsx @@ -0,0 +1,104 @@ +import _ from "lodash"; +import React from "react"; +import { QueryHookResult } from "react-apollo-hooks"; +import { FindScenesQuery, FindScenesVariables, SlimSceneDataFragment } from "../../core/generated-graphql"; +import { ListHook } from "../../hooks/ListHook"; +import { IBaseProps } from "../../models/base-props"; +import { ListFilterModel } from "../../models/list-filter/filter"; +import { DisplayMode, FilterMode } from "../../models/list-filter/types"; +import { WallPanel } from "../Wall/WallPanel"; +import { SceneCard } from "./SceneCard"; +import { SceneListTable } from "./SceneListTable"; +import { SceneSelectedOptions } from "./SceneSelectedOptions"; +import { StashService } from "../../core/StashService"; + +interface ISceneListProps extends IBaseProps {} + +export const SceneList: React.FC = (props: ISceneListProps) => { + const otherOperations = [ + { + text: "Play Random", + onClick: playRandom, + } + ]; + + const listData = ListHook.useList({ + filterMode: FilterMode.Scenes, + props, + zoomable: true, + otherOperations: otherOperations, + renderContent, + renderSelectedOptions + }); + + async function playRandom(result: QueryHookResult, filter: ListFilterModel, selectedIds: Set) { + // query for a random scene + if (result.data && result.data.findScenes) { + let count = result.data.findScenes.count; + + let index = Math.floor(Math.random() * count); + let filterCopy = _.cloneDeep(filter); + filterCopy.itemsPerPage = 1; + filterCopy.currentPage = index + 1; + const singleResult = await StashService.queryFindScenes(filterCopy); + if (singleResult && singleResult.data && singleResult.data.findScenes && singleResult.data.findScenes.scenes.length === 1) { + let id = singleResult!.data!.findScenes!.scenes[0].id; + // navigate to the scene player page + props.history.push("/scenes/" + id + "?autoplay=true"); + } + } + } + + function renderSelectedOptions(result: QueryHookResult, selectedIds: Set) { + // find the selected items from the ids + if (!result.data || !result.data.findScenes) { return undefined; } + + var scenes = result.data.findScenes.scenes; + + var selectedScenes : SlimSceneDataFragment[] = []; + selectedIds.forEach((id) => { + var scene = scenes.find((scene) => { + return scene.id === id; + }); + + if (scene) { + selectedScenes.push(scene); + } + }); + + return ( + <> + { return; }}/> + + ); + } + + function renderSceneCard(scene : SlimSceneDataFragment, selectedIds: Set, zoomIndex: number) { + return ( + listData.onSelectChange(scene.id, selected, shiftKey)} + /> + ) + } + + function renderContent(result: QueryHookResult, filter: ListFilterModel, selectedIds: Set, zoomIndex: number) { + if (!result.data || !result.data.findScenes) { return; } + if (filter.displayMode === DisplayMode.Grid) { + return ( +
    + {result.data.findScenes.scenes.map((scene) => renderSceneCard(scene, selectedIds, zoomIndex))} +
    + ); + } else if (filter.displayMode === DisplayMode.List) { + return ; + } else if (filter.displayMode === DisplayMode.Wall) { + return ; + } + } + + return listData.template; +}; diff --git a/ui/v2.5/src/components/scenes/SceneListTable.tsx b/ui/v2.5/src/components/scenes/SceneListTable.tsx new file mode 100644 index 00000000000..8acfb55e308 --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneListTable.tsx @@ -0,0 +1,121 @@ +import React from "react"; +import { Link } from "react-router-dom"; +import * as GQL from "../../core/generated-graphql"; +import { TextUtils } from "../../utils/text"; +import { NavigationUtils } from "../../utils/navigation"; + +import { Table } from 'react-bootstrap'; + +interface ISceneListTableProps { + scenes: GQL.SlimSceneDataFragment[]; +} + +export const SceneListTable: React.FC = (props: ISceneListTableProps) => { + + function renderSceneImage(scene : GQL.SlimSceneDataFragment) { + const style: React.CSSProperties = { + backgroundImage: `url('${scene.paths.screenshot}')`, + lineHeight: 5, + backgroundSize: "contain", + display: "inline-block", + backgroundPosition: "center", + backgroundRepeat: "no-repeat", + }; + + return ( + + ) + } + + function renderDuration(scene : GQL.SlimSceneDataFragment) { + if (scene.file.duration === undefined) { return; } + return TextUtils.secondsToTimestamp(scene.file.duration); + } + + function renderTags(tags : GQL.SlimSceneDataTags[]) { + return tags.map((tag) => ( + +
    {tag.name}
    + + )); + } + + function renderPerformers(performers : GQL.SlimSceneDataPerformers[]) { + return performers.map((performer) => ( + +
    {performer.name}
    + + )); + } + + function renderStudio(studio : GQL.SlimSceneDataStudio | undefined) { + if (!!studio) { + return ( + +
    {studio.name}
    + + ); + } + } + + function renderSceneRow(scene : GQL.SlimSceneDataFragment) { + return ( + <> + + + {renderSceneImage(scene)} + + + +
    + {!!scene.title ? scene.title : TextUtils.fileNameFromPath(scene.path)} +
    + + + + {scene.rating ? scene.rating : ''} + + + {renderDuration(scene)} + + + {renderTags(scene.tags)} + + + {renderPerformers(scene.performers)} + + + {renderStudio(scene.studio)} + + + + ) + } + + return ( + <> +
    + + + + + + + + + + + + + + {props.scenes.map(renderSceneRow)} + +
    TitleRatingDurationTagsPerformersStudio
    +
    + + ); +}; + diff --git a/ui/v2.5/src/components/scenes/SceneMarkerList.tsx b/ui/v2.5/src/components/scenes/SceneMarkerList.tsx new file mode 100644 index 00000000000..c865f9d0802 --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneMarkerList.tsx @@ -0,0 +1,59 @@ +import _ from "lodash"; +import React, { FunctionComponent } from "react"; +import { QueryHookResult } from "react-apollo-hooks"; +import { FindSceneMarkersQuery, FindSceneMarkersVariables } from "../../core/generated-graphql"; +import { ListHook } from "../../hooks/ListHook"; +import { IBaseProps } from "../../models/base-props"; +import { ListFilterModel } from "../../models/list-filter/filter"; +import { DisplayMode, FilterMode } from "../../models/list-filter/types"; +import { WallPanel } from "../Wall/WallPanel"; +import { StashService } from "../../core/StashService"; +import { NavigationUtils } from "../../utils/navigation"; + +interface IProps extends IBaseProps {} + +export const SceneMarkerList: FunctionComponent = (props: IProps) => { + const otherOperations = [ + { + text: "Play Random", + onClick: playRandom, + } + ]; + + const listData = ListHook.useList({ + filterMode: FilterMode.SceneMarkers, + otherOperations: otherOperations, + props, + renderContent, + }); + + async function playRandom(result: QueryHookResult, filter: ListFilterModel, selectedIds: Set) { + // query for a random scene + if (result.data && result.data.findSceneMarkers) { + let count = result.data.findSceneMarkers.count; + + let index = Math.floor(Math.random() * count); + let filterCopy = _.cloneDeep(filter); + filterCopy.itemsPerPage = 1; + filterCopy.currentPage = index + 1; + const singleResult = await StashService.queryFindSceneMarkers(filterCopy); + if (singleResult && singleResult.data && singleResult.data.findSceneMarkers && singleResult.data.findSceneMarkers.scene_markers.length === 1) { + // navigate to the scene player page + let url = NavigationUtils.makeSceneMarkerUrl(singleResult!.data!.findSceneMarkers!.scene_markers[0]) + props.history.push(url); + } + } + } + + function renderContent( + result: QueryHookResult, + filter: ListFilterModel, + ) { + if (!result.data || !result.data.findSceneMarkers) { return; } + if (filter.displayMode === DisplayMode.Wall) { + return ; + } + } + + return listData.template; +}; diff --git a/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx b/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx new file mode 100644 index 00000000000..93bd6013e12 --- /dev/null +++ b/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx @@ -0,0 +1,196 @@ +import React from "react"; +import ReactJWPlayer from "react-jw-player"; +import { HotKeys } from "react-hotkeys"; +import * as GQL from "../../../core/generated-graphql"; +import { SceneHelpers } from "../helpers"; +import { ScenePlayerScrubber } from "./ScenePlayerScrubber"; +import { StashService } from "../../../core/StashService"; + +interface IScenePlayerProps { + scene: GQL.SceneDataFragment; + timestamp: number; + autoplay?: boolean; + onReady?: any; + onSeeked?: any; + onTime?: any; + config?: GQL.ConfigInterfaceDataFragment; +} +interface IScenePlayerState { + scrubberPosition: number; +} + +const KeyMap = { + NUM0: "0", + NUM1: "1", + NUM2: "2", + SPACE: " " +} + +export class ScenePlayerImpl extends React.Component { + private player: any; + private lastTime = 0; + + constructor(props: IScenePlayerProps) { + super(props); + this.onReady = this.onReady.bind(this); + this.onSeeked = this.onSeeked.bind(this); + this.onTime = this.onTime.bind(this); + + this.onScrubberSeek = this.onScrubberSeek.bind(this); + this.onScrubberScrolled = this.onScrubberScrolled.bind(this); + + this.state = {scrubberPosition: 0}; + } + + public componentDidUpdate(prevProps: IScenePlayerProps) { + if (prevProps.timestamp !== this.props.timestamp) { + this.player.seek(this.props.timestamp); + } + } + + renderPlayer() { + const config = this.makeJWPlayerConfig(this.props.scene); + return ( + + ); + } + + onIncrease() { + const currentPlaybackRate = !!this.player ? this.player.getPlaybackRate() : 1; + this.player.setPlaybackRate(currentPlaybackRate + 0.5); + }; + onDecrease() { + const currentPlaybackRate = !!this.player ? this.player.getPlaybackRate() : 1; + this.player.setPlaybackRate(currentPlaybackRate - 0.5); + }; + onReset() { this.player.setPlaybackRate(1); }; + onPause() { this.player.getState().paused ? this.player.play() : this.player.pause(); }; + + private KeyHandlers = { + NUM0: () => {this.onReset()}, + NUM1: () => {this.onDecrease()}, + NUM2: () => {this.onIncrease()}, + SPACE: () => {this.onPause()} + } + + public render() { + return ( + +
    + {this.renderPlayer()} + +
    +
    + ); + } + + private shouldRepeat(scene: GQL.SceneDataFragment) { + let maxLoopDuration = this.props.config ? this.props.config.maximumLoopDuration : 0; + return !!scene.file.duration && !!maxLoopDuration && scene.file.duration < maxLoopDuration; + } + + private makeJWPlayerConfig(scene: GQL.SceneDataFragment) { + if (!scene.paths.stream) { return {}; } + + let repeat = this.shouldRepeat(scene); + let getDurationHook: (() => GQL.Maybe) | undefined = undefined; + let seekHook: ((seekToPosition: number, _videoTag: any) => void) | undefined = undefined; + let getCurrentTimeHook: ((_videoTag: any) => number) | undefined = undefined; + + if (!this.props.scene.is_streamable) { + getDurationHook = () => { + return this.props.scene.file.duration; + }; + + seekHook = (seekToPosition: number, _videoTag: any) => { + _videoTag.start = seekToPosition; + _videoTag.src = (this.props.scene.paths.stream + "?start=" + seekToPosition); + _videoTag.play(); + }; + + getCurrentTimeHook = (_videoTag: any) => { + let start = _videoTag.start || 0; + return _videoTag.currentTime + start; + } + } + + let ret = { + file: scene.paths.stream, + image: scene.paths.screenshot, + tracks: [ + { + file: scene.paths.vtt, + kind: "thumbnails", + }, + { + file: scene.paths.chapters_vtt, + kind: "chapters", + }, + ], + aspectratio: "16:9", + width: "100%", + floating: { + dismissible: true, + }, + cast: {}, + primary: "html5", + autostart: this.props.autoplay || (this.props.config ? this.props.config.autostartVideo : false), + repeat: repeat, + playbackRateControls: true, + playbackRates: [0.75, 1, 1.5, 2, 3, 4], + getDurationHook: getDurationHook, + seekHook: seekHook, + getCurrentTimeHook: getCurrentTimeHook + }; + + return ret; + } + + private onReady() { + this.player = SceneHelpers.getPlayer(); + if (this.props.timestamp > 0) { + this.player.seek(this.props.timestamp); + } + } + + private onSeeked() { + const position = this.player.getPosition(); + this.setState({scrubberPosition: position}); + this.player.play(); + } + + private onTime(data: any) { + const position = this.player.getPosition(); + const difference = Math.abs(position - this.lastTime); + if (difference > 1) { + this.lastTime = position; + this.setState({scrubberPosition: position}); + } + } + + private onScrubberSeek(seconds: number) { + this.player.seek(seconds); + } + + private onScrubberScrolled() { + this.player.pause(); + } +} + +export const ScenePlayer: React.FC = (props: IScenePlayerProps) => { + const config = StashService.useConfiguration(); + + return +} diff --git a/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.scss b/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.scss new file mode 100644 index 00000000000..1ddcafb7f6b --- /dev/null +++ b/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.scss @@ -0,0 +1,128 @@ +.scrubber-wrapper { + position: relative; + overflow: hidden; + margin: 5px 0; +} + +#scrubber-back { + float: left; +} + +#scrubber-forward { + float: right; +} + +.scrubber-button { + width: 1.5%; + height: 100%; + line-height: 120px; + padding: 0; + text-align: center; + border: 1px solid #555; + font-weight: 800; + font-size: 20px; + color: #FFF; + cursor: pointer; +} + +.scrubber-content { + -webkit-user-select: none; + -webkit-overflow-scrolling: touch; + cursor: -webkit-grab; + height: 120px; + width: 96%; + margin: 0 0.5%; + display: inline-block; + position: relative; + overflow: hidden; +} + +.scrubber-content.dragging { + cursor: -webkit-grabbing; +} + +.scrubber-tags-background { + background-color: #555; + position: absolute; + left: 0; + right: 0; + height: 20px; +} + +#scrubber-position-indicator { + background-color: #CCC; + width: 100%; + left: -100%; + height: 20px; + z-index: 0; + position: absolute; +} + +#scrubber-current-position { + background-color: #FFF; + width: 2px; + height: 30px; + left: 50%; + z-index: 1; + position: absolute; +} + +.scrubber-viewport { + position: static; + height: 100%; + overflow: hidden; +} + +.scrubber-slider { + position: absolute; + width: 100%; + height: 100%; + left: 0; + transition: 333ms ease-out; +} + +.scrubber-tags { + height: 20px; + position: relative; + margin-bottom: 10px; +} + +.scrubber-tag { + position: absolute; + background-color: #000; + font-size: 10px; + white-space: nowrap; + padding: 0 10px; + cursor: pointer; +} +.scrubber-tag:hover { + z-index: 1; + background-color: #444; +} +.scrubber-tag:after { + content: ""; + position: absolute; + bottom: -5px; + left: 50%; + margin-left: -5px; + border-top: solid 5px #000; + border-left: solid 5px transparent; + border-right: solid 5px transparent; +} + +.scrubber-item { + position: absolute; + display: flex; + margin-right: 10px; + cursor: pointer; + color: white; + text-shadow: 1px 1px black; + text-align: center; + font-size: 10px; +} + +.scrubber-item span { + display: inline-block; + align-self: flex-end; + width: 100%; +} \ No newline at end of file diff --git a/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx b/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx new file mode 100644 index 00000000000..e524b61948b --- /dev/null +++ b/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx @@ -0,0 +1,316 @@ +import axios from "axios"; +import React, { CSSProperties, FunctionComponent, RefObject, useEffect, useRef, useState } from "react"; +import * as GQL from "../../../core/generated-graphql"; +import { TextUtils } from "../../../utils/text"; +import "./ScenePlayerScrubber.scss"; + +interface IScenePlayerScrubberProps { + scene: GQL.SceneDataFragment; + position: number; + onSeek: (seconds: number) => void; + onScrolled: () => void; +} + +interface ISceneSpriteItem { + start: number; + end: number; + x: number; + y: number; + w: number; + h: number; +} + +export const ScenePlayerScrubber: FunctionComponent = (props: IScenePlayerScrubberProps) => { + const contentEl = useRef(null); + const positionIndicatorEl = useRef(null); + const scrubberSliderEl = useRef(null); + const mouseDown = useRef(false); + const lastMouseEvent = useRef(null); + const startMouseEvent = useRef(null); + const velocity = useRef(0); + + const _position = useRef(0); + function getPostion() { return _position.current; } + function setPosition(newPostion: number, shouldEmit: boolean = true) { + if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return; } + if (shouldEmit) { props.onScrolled(); } + + const midpointOffset = scrubberSliderEl.current.clientWidth / 2; + + const bounds = getBounds() * -1; + if (newPostion > midpointOffset) { + _position.current = midpointOffset; + } else if (newPostion < bounds - midpointOffset) { + _position.current = bounds - midpointOffset; + } else { + _position.current = newPostion; + } + + scrubberSliderEl.current.style.transform = `translateX(${_position.current}px)`; + + const indicatorPosition = ( + (newPostion - midpointOffset) / (bounds - (midpointOffset * 2)) * scrubberSliderEl.current.clientWidth + ); + positionIndicatorEl.current.style.transform = `translateX(${indicatorPosition}px)`; + } + + const [spriteItems, setSpriteItems] = useState([]); + const [delayedRender, setDelayedRender] = useState(false); + + useEffect(() => { + if (!scrubberSliderEl.current) { return; } + scrubberSliderEl.current.style.transform = `translateX(${scrubberSliderEl.current.clientWidth / 2}px)`; + }, [scrubberSliderEl]); + + useEffect(() => { + fetchSpriteInfo(); + }, [props.scene]); + + useEffect(() => { + if (!scrubberSliderEl.current) { return; } + const duration = Number(props.scene.file.duration); + const percentage = props.position / duration; + const position = ( + (scrubberSliderEl.current.scrollWidth * percentage) - (scrubberSliderEl.current.clientWidth / 2) + ) * -1; + setPosition(position, false); + }, [props.position]); + + useEffect(() => { + window.addEventListener("mouseup", onMouseUp, false); + return () => { + window.removeEventListener("mouseup", onMouseUp); + }; + }); + + useEffect(() => { + if (!contentEl.current) { return; } + contentEl.current.addEventListener("mousedown", onMouseDown, false); + return () => { + if (!contentEl.current) { return; } + contentEl.current.removeEventListener("mousedown", onMouseDown); + }; + }); + + useEffect(() => { + if (!contentEl.current) { return; } + contentEl.current.addEventListener("mousemove", onMouseMove, false); + return () => { + if (!contentEl.current) { return; } + contentEl.current.removeEventListener("mousemove", onMouseMove); + }; + }); + + function onMouseUp(this: Window, event: MouseEvent) { + if (!startMouseEvent.current || !scrubberSliderEl.current) { return; } + mouseDown.current = false; + const delta = Math.abs(event.clientX - startMouseEvent.current.clientX); + if (delta < 1 && event.target instanceof HTMLDivElement) { + const target: HTMLDivElement = event.target; + let seekSeconds: number | undefined; + + const spriteIdString = target.getAttribute("data-sprite-item-id"); + if (spriteIdString != null) { + const spritePercentage = event.offsetX / target.clientWidth; + const offset = target.offsetLeft + (target.clientWidth * spritePercentage); + const percentage = offset / scrubberSliderEl.current.scrollWidth; + seekSeconds = percentage * (props.scene.file.duration || 0); + } + + const markerIdString = target.getAttribute("data-marker-id"); + if (markerIdString != null) { + const marker = props.scene.scene_markers[Number(markerIdString)]; + seekSeconds = marker.seconds; + } + + if (!!seekSeconds) { props.onSeek(seekSeconds); } + } else if (Math.abs(velocity.current) > 25) { + const newPosition = getPostion() + (velocity.current * 10); + setPosition(newPosition); + velocity.current = 0; + } + } + + function onMouseDown(this: HTMLDivElement, event: MouseEvent) { + event.preventDefault(); + mouseDown.current = true; + lastMouseEvent.current = event; + startMouseEvent.current = event; + velocity.current = 0; + } + + function onMouseMove(this: HTMLDivElement, event: MouseEvent) { + if (!mouseDown.current) { return; } + + // negative dragging right (past), positive left (future) + const delta = event.clientX - lastMouseEvent.current.clientX; + + const movement = event.movementX; + velocity.current = movement; + + const newPostion = getPostion() + delta; + setPosition(newPostion); + lastMouseEvent.current = event; + } + + function getBounds(): number { + if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return 0; } + return scrubberSliderEl.current.scrollWidth - scrubberSliderEl.current.clientWidth; + } + + function goBack() { + if (!scrubberSliderEl.current) { return; } + const newPosition = getPostion() + scrubberSliderEl.current.clientWidth; + setPosition(newPosition); + } + + function goForward() { + if (!scrubberSliderEl.current) { return; } + const newPosition = getPostion() - scrubberSliderEl.current.clientWidth; + setPosition(newPosition); + } + + async function fetchSpriteInfo() { + if (!props.scene || !props.scene.paths.vtt) { return; } + + const response = await axios.get(props.scene.paths.vtt, {responseType: "text"}); + if (response.status !== 200) { + console.log(response.statusText); + } + + // TODO: This is gnarly + const lines = response.data.split("\n"); + if (lines.shift() !== "WEBVTT") { return; } + if (lines.shift() !== "") { return; } + let item: ISceneSpriteItem = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0}; + const newSpriteItems: ISceneSpriteItem[] = []; + while (lines.length) { + const line = lines.shift(); + if (line === undefined) { continue; } + + if (line.includes("#") && line.includes("=") && line.includes(",")) { + const size = line.split("#")[1].split("=")[1].split(","); + item.x = Number(size[0]); + item.y = Number(size[1]); + item.w = Number(size[2]); + item.h = Number(size[3]); + + newSpriteItems.push(item); + item = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0}; + } else if (line.includes(" --> ")) { + const times = line.split(" --> "); + + const start = times[0].split(":"); + item.start = (+start[0]) * 60 * 60 + (+start[1]) * 60 + (+start[2]); + + const end = times[1].split(":"); + item.end = (+end[0]) * 60 * 60 + (+end[1]) * 60 + (+end[2]); + } + } + + setSpriteItems(newSpriteItems); + // TODO: Very hacky. Need to wait for the scroll width to update from the image loading. + setTimeout(() => { + setDelayedRender(true); + }, 100); + } + + function renderTags() { + function getTagStyle(i: number): CSSProperties { + if (!scrubberSliderEl.current || + spriteItems.length === 0 || + getBounds() === 0) { return {}; } + + const tags = window.document.getElementsByClassName("scrubber-tag"); + if (tags.length === 0) { return {}; } + + let tag: any; + for (let index = 0; index < tags.length; index++) { + tag = tags.item(index) as any; + const id = tag.getAttribute("data-marker-id"); + if (id === i.toString()) { + break; + } + } + + const marker = props.scene.scene_markers[i]; + const duration = Number(props.scene.file.duration); + const percentage = marker.seconds / duration; + + const left = (scrubberSliderEl.current.scrollWidth * percentage) - (tag.clientWidth / 2); + return { + left: `${left}px`, + height: 20, + }; + } + + return props.scene.scene_markers.map((marker, index) => { + const dataAttrs = { + "data-marker-id": index, + }; + return ( +
    + {marker.title} +
    + ); + }); + } + + function renderSprites() { + function getStyleForSprite(index: number): CSSProperties { + if (!props.scene.paths.vtt) { return {}; } + const sprite = spriteItems[index]; + const left = sprite.w * index; + const path = props.scene.paths.vtt.replace("_thumbs.vtt", "_sprite.jpg"); // TODO: Gnarly + return { + width: `${sprite.w}px`, + height: `${sprite.h}px`, + margin: "0px auto", + backgroundPosition: -sprite.x + "px " + -sprite.y + "px", + backgroundImage: `url(${path})`, + left: `${left}px`, + }; + } + + return spriteItems.map((spriteItem, index) => { + const dataAttrs = { + "data-sprite-item-id": index, + }; + return ( +
    + {TextUtils.secondsToTimestamp(spriteItem.start)} - {TextUtils.secondsToTimestamp(spriteItem.end)} +
    + ); + }); + } + + return ( +
    + goBack()}>< +
    +
    +
    +
    +
    +
    +
    + {renderTags()} +
    + {renderSprites()} +
    +
    +
    + goForward()}>> +
    + ); +}; diff --git a/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx b/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx new file mode 100644 index 00000000000..da3941dd7d4 --- /dev/null +++ b/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx @@ -0,0 +1,301 @@ +import _ from "lodash"; +import { Button, ButtonGroup, Form, Spinner } from 'react-bootstrap'; +import React, { useEffect, useState } from "react"; +import { FilterSelect } from "../select/FilterSelect"; +import { FilterMultiSelect } from "../select/FilterMultiSelect"; +import { StashService } from "../../core/StashService"; +import * as GQL from "../../core/generated-graphql"; +import { ErrorUtils } from "../../utils/errors"; +import { ToastUtils } from "../../utils/toasts"; + +interface IListOperationProps { + selected: GQL.SlimSceneDataFragment[], + onScenesUpdated: () => void; +} + +export const SceneSelectedOptions: React.FC = (props: IListOperationProps) => { + const [rating, setRating] = useState(""); + const [studioId, setStudioId] = useState(undefined); + const [performerIds, setPerformerIds] = useState(undefined); + const [tagIds, setTagIds] = useState(undefined); + + const updateScenes = StashService.useBulkSceneUpdate(getSceneInput()); + + // Network state + const [isLoading, setIsLoading] = useState(false); + + function getSceneInput() : GQL.BulkSceneUpdateInput { + // need to determine what we are actually setting on each scene + var aggregateRating = getRating(props.selected); + var aggregateStudioId = getStudioId(props.selected); + var aggregatePerformerIds = getPerformerIds(props.selected); + var aggregateTagIds = getTagIds(props.selected); + + var sceneInput : GQL.BulkSceneUpdateInput = { + ids: props.selected.map((scene) => { + return scene.id; + }) + }; + + // if rating is undefined + if (rating === "") { + // and all scenes have the same rating, then we are unsetting the rating. + if(aggregateRating) { + // an undefined rating is ignored in the server, so set it to 0 instead + sceneInput.rating = 0; + } + // otherwise not setting the rating + } else { + // if rating is set, then we are setting the rating for all + sceneInput.rating = Number.parseInt(rating); + } + + // if studioId is undefined + if (studioId === undefined) { + // and all scenes have the same studioId, + // then unset the studioId, otherwise ignoring studioId + if (aggregateStudioId) { + // an undefined studio_id is ignored in the server, so set it to empty string instead + sceneInput.studio_id = ""; + } + } else { + // if studioId is set, then we are setting it + sceneInput.studio_id = studioId; + } + + // if performerIds are empty + if (!performerIds || performerIds.length === 0) { + // and all scenes have the same ids, + if (aggregatePerformerIds.length > 0) { + // then unset the performerIds, otherwise ignore + sceneInput.performer_ids = performerIds; + } + } else { + // if performerIds non-empty, then we are setting them + sceneInput.performer_ids = performerIds; + } + + // if tagIds non-empty, then we are setting them + if (!tagIds || tagIds.length === 0) { + // and all scenes have the same ids, + if (aggregateTagIds.length > 0) { + // then unset the tagIds, otherwise ignore + sceneInput.tag_ids = tagIds; + } + } else { + // if tagIds non-empty, then we are setting them + sceneInput.tag_ids = tagIds; + } + + return sceneInput; + } + + async function onSave() { + setIsLoading(true); + try { + const result = await updateScenes(); + ToastUtils.success("Updated scenes"); + } catch (e) { + ErrorUtils.handle(e); + } + setIsLoading(false); + props.onScenesUpdated(); + } + + function getRating(state: GQL.SlimSceneDataFragment[]) { + var ret : number | undefined; + var first = true; + + state.forEach((scene : GQL.SlimSceneDataFragment) => { + if (first) { + ret = scene.rating; + first = false; + } else { + if (ret !== scene.rating) { + ret = undefined; + } + } + }); + + return ret; + } + + function getStudioId(state: GQL.SlimSceneDataFragment[]) { + var ret : string | undefined; + var first = true; + + state.forEach((scene : GQL.SlimSceneDataFragment) => { + if (first) { + ret = scene.studio ? scene.studio.id : undefined; + first = false; + } else { + var studioId = scene.studio ? scene.studio.id : undefined; + if (ret != studioId) { + ret = undefined; + } + } + }); + + return ret; + } + + function toId(object : any) { + return object.id; + } + + function getPerformerIds(state: GQL.SlimSceneDataFragment[]) { + var ret : string[] = []; + var first = true; + + state.forEach((scene : GQL.SlimSceneDataFragment) => { + if (first) { + ret = !!scene.performers ? scene.performers.map(toId).sort() : []; + first = false; + } else { + const perfIds = !!scene.performers ? scene.performers.map(toId).sort() : []; + + if (!_.isEqual(ret, perfIds)) { + ret = []; + } + } + }); + + return ret; + } + + function getTagIds(state: GQL.SlimSceneDataFragment[]) { + var ret : string[] = []; + var first = true; + + state.forEach((scene : GQL.SlimSceneDataFragment) => { + if (first) { + ret = !!scene.tags ? scene.tags.map(toId).sort() : []; + first = false; + } else { + const tIds = !!scene.tags ? scene.tags.map(toId).sort() : []; + + if (!_.isEqual(ret, tIds)) { + ret = []; + } + } + }); + + return ret; + } + + function updateScenesEditState(state: GQL.SlimSceneDataFragment[]) { + function toId(object : any) { + return object.id; + } + + var rating : string = ""; + var studioId : string | undefined; + var performerIds : string[] = []; + var tagIds : string[] = []; + var first = true; + + state.forEach((scene : GQL.SlimSceneDataFragment) => { + var thisRating = scene.rating ? scene.rating.toString() : ""; + var thisStudio = scene.studio ? scene.studio.id : undefined; + + if (first) { + rating = thisRating; + studioId = thisStudio; + performerIds = !!scene.performers ? scene.performers.map(toId).sort() : []; + tagIds = !!scene.tags ? scene.tags.map(toId).sort() : []; + first = false; + } else { + if (rating !== thisRating) { + rating = ""; + } + if (studioId != thisStudio) { + studioId = undefined; + } + const perfIds = !!scene.performers ? scene.performers.map(toId).sort() : []; + const tIds = !!scene.tags ? scene.tags.map(toId).sort() : []; + + if (!_.isEqual(performerIds, perfIds)) { + performerIds = []; + } + + if (!_.isEqual(tagIds, tIds)) { + tagIds = []; + } + } + }); + + setRating(rating); + setStudioId(studioId); + setPerformerIds(performerIds); + setTagIds(tagIds); + } + + useEffect(() => { + updateScenesEditState(props.selected); + }, [props.selected]); + + function renderMultiSelect(type: "performers" | "tags", initialIds: string[] | undefined) { + return ( + { + const ids = items.map((i) => i.id); + switch (type) { + case "performers": setPerformerIds(ids); break; + case "tags": setTagIds(ids); break; + } + }} + initialIds={initialIds} + /> + ); + } + + function render() { + return ( + <> + {isLoading ? : undefined} +
    + + Rating + setRating(event.target.value)}> + { ["", 1, 2, 3, 4, 5].map(opt => ( + + )) } + + + + + Studio + setStudioId(item ? item.id : undefined)} + initialId={studioId} + /> + + + + Performers + {renderMultiSelect("performers", performerIds)} + + + + Performers + {renderMultiSelect("tags", tagIds)} + + + + + +
    + + ); + } + + return render(); +}; diff --git a/ui/v2.5/src/components/scenes/helpers.tsx b/ui/v2.5/src/components/scenes/helpers.tsx new file mode 100644 index 00000000000..b6c195786d2 --- /dev/null +++ b/ui/v2.5/src/components/scenes/helpers.tsx @@ -0,0 +1,34 @@ +import React, { } from "react"; +import { Link } from "react-router-dom"; +import * as GQL from "../../core/generated-graphql"; + +export class SceneHelpers { + public static maybeRenderStudio( + scene: GQL.SceneDataFragment | GQL.SlimSceneDataFragment, + height: number + ) { + if (!scene.studio) + return; + const style: React.CSSProperties = { + backgroundImage: `url('${scene.studio.image_path}')`, + width: "100%", + height: `${height}px`, + lineHeight: 5, + backgroundSize: "contain", + display: "inline-block", + backgroundPosition: "center", + backgroundRepeat: "no-repeat", + }; + return ( + + ); + } + + public static getJWPlayerId(): string { return "main-jwplayer"; } + public static getPlayer(): any { + return (window as any).jwplayer("main-jwplayer"); + } +} diff --git a/ui/v2.5/src/components/scenes/scenes.tsx b/ui/v2.5/src/components/scenes/scenes.tsx new file mode 100644 index 00000000000..4efeec38bb4 --- /dev/null +++ b/ui/v2.5/src/components/scenes/scenes.tsx @@ -0,0 +1,15 @@ +import React from "react"; +import { Route, Switch } from "react-router-dom"; +import { Scene } from "./SceneDetails/Scene"; +import { SceneList } from "./SceneList"; +import { SceneMarkerList } from "./SceneMarkerList"; + +const Scenes = () => ( + + + + + +); + +export default Scenes; diff --git a/ui/v2.5/src/components/select/FilterMultiSelect.tsx b/ui/v2.5/src/components/select/FilterMultiSelect.tsx new file mode 100644 index 00000000000..a5c8d746283 --- /dev/null +++ b/ui/v2.5/src/components/select/FilterMultiSelect.tsx @@ -0,0 +1,190 @@ +import * as React from "react"; + +import { MenuItem } from "@blueprintjs/core"; +import { IMultiSelectProps, ItemPredicate, ItemRenderer, MultiSelect } from "@blueprintjs/select"; +import * as GQL from "../../core/generated-graphql"; +import { StashService } from "../../core/StashService"; +import { HTMLInputProps } from "../../models"; +import { ErrorUtils } from "../../utils/errors"; +import { ToastUtils } from "../../utils/toasts"; + +const InternalPerformerMultiSelect = MultiSelect.ofType(); +const InternalTagMultiSelect = MultiSelect.ofType(); +const InternalStudioMultiSelect = MultiSelect.ofType(); + +type ValidTypes = + GQL.AllPerformersForFilterAllPerformers | + GQL.AllTagsForFilterAllTags | + GQL.AllStudiosForFilterAllStudios; + +interface IProps extends HTMLInputProps, Partial> { + type: "performers" | "studios" | "tags"; + initialIds?: string[]; + onUpdate: (items: ValidTypes[]) => void; +} + +export const FilterMultiSelect: React.FunctionComponent = (props: IProps) => { + let MultiSelectImpl = getMultiSelectImpl(); + let InternalMultiSelect = MultiSelectImpl.getInternalMultiSelect(); + const data = MultiSelectImpl.getData(); + + const [selectedItems, setSelectedItems] = React.useState([]); + const [items, setItems] = React.useState([]); + const [newTagName, setNewTagName] = React.useState(""); + const createTag = StashService.useTagCreate(getTagInput() as GQL.TagCreateInput); + + React.useEffect(() => { + if (!!data) { + MultiSelectImpl.translateData(); + } + }, [data]); + + function getTagInput() { + const tagInput: Partial = { name: newTagName }; + return tagInput; + } + + async function onCreateNewObject(item: ValidTypes) { + var created : any; + if (props.type === "tags") { + try { + created = await createTag(); + + items.push(created.data.tagCreate); + setItems(items.slice()); + addSelectedItem(created.data.tagCreate); + + ToastUtils.success("Created tag"); + } catch (e) { + ErrorUtils.handle(e); + } + } + } + + function createNewTag(query : string) { + setNewTagName(query); + return { + name : query + }; + } + + function createNewRenderer(query: string, active: boolean, handleClick: React.MouseEventHandler) { + // if tag already exists with that name, then don't return anything + if (items.find((item) => { + return item.name === query; + })) { + return undefined; + } + + return ( + + ); + } + + React.useEffect(() => { + if (!!props.initialIds && !!items) { + const initialItems = items.filter((item) => props.initialIds!.includes(item.id)); + setSelectedItems(initialItems); + } + }, [props.initialIds, items]); + + function getMultiSelectImpl() { + let getInternalMultiSelect: () => new (props: IMultiSelectProps) => MultiSelect; + let getData: () => GQL.AllPerformersForFilterQuery | GQL.AllStudiosForFilterQuery | GQL.AllTagsForFilterQuery | undefined; + let translateData: () => void; + let createNewObject: ((query : string) => void) | undefined = undefined; + + switch (props.type) { + case "performers": { + getInternalMultiSelect = () => { return InternalPerformerMultiSelect; }; + getData = () => { const { data } = StashService.useAllPerformersForFilter(); return data; } + translateData = () => { let perfData = data as GQL.AllPerformersForFilterQuery; setItems(!!perfData && !!perfData.allPerformers ? perfData.allPerformers : []); }; + break; + } + case "studios": { + getInternalMultiSelect = () => { return InternalStudioMultiSelect; }; + getData = () => { const { data } = StashService.useAllStudiosForFilter(); return data; } + translateData = () => { let studioData = data as GQL.AllStudiosForFilterQuery; setItems(!!studioData && !!studioData.allStudios ? studioData.allStudios : []); }; + break; + } + case "tags": { + getInternalMultiSelect = () => { return InternalTagMultiSelect; }; + getData = () => { const { data } = StashService.useAllTagsForFilter(); return data; } + translateData = () => { let tagData = data as GQL.AllTagsForFilterQuery; setItems(!!tagData && !!tagData.allTags ? tagData.allTags : []); }; + createNewObject = createNewTag; + break; + } + default: { + throw "Unhandled case in FilterMultiSelect"; + } + } + + return { + getInternalMultiSelect: getInternalMultiSelect, + getData: getData, + translateData: translateData, + createNewObject: createNewObject + }; + } + + const renderItem: ItemRenderer = (item, itemProps) => { + if (!itemProps.modifiers.matchesPredicate) { return null; } + return ( + + ); + }; + + const filter: ItemPredicate = (query, item) => { + if (selectedItems.includes(item)) { return false; } + return item.name!.toLowerCase().indexOf(query.toLowerCase()) >= 0; + }; + + function addSelectedItem(item: ValidTypes) { + selectedItems.push(item); + setSelectedItems(selectedItems); + props.onUpdate(selectedItems); + } + + function onItemSelect(item: ValidTypes) { + if (item.id === undefined) { + // create the new item, if applicable + onCreateNewObject(item); + } else { + addSelectedItem(item); + } + } + + function onItemRemove(value: string, index: number) { + const newSelectedItems = selectedItems.filter((_, i) => i !== index); + setSelectedItems(newSelectedItems); + props.onUpdate(newSelectedItems); + } + + return ( + tag.name} + tagInputProps={{ onRemove: onItemRemove }} + onItemSelect={onItemSelect} + resetOnSelect={true} + popoverProps={{position: "bottom"}} + createNewItemFromQuery={MultiSelectImpl.createNewObject} + createNewItemRenderer={createNewRenderer} + {...props} + /> + ); +}; diff --git a/ui/v2.5/src/components/select/FilterSelect.tsx b/ui/v2.5/src/components/select/FilterSelect.tsx new file mode 100644 index 00000000000..b906667db31 --- /dev/null +++ b/ui/v2.5/src/components/select/FilterSelect.tsx @@ -0,0 +1,117 @@ +import * as React from "react"; + +import { Button, MenuItem } from "@blueprintjs/core"; +import { ISelectProps, ItemPredicate, ItemRenderer, Select } from "@blueprintjs/select"; +import * as GQL from "../../core/generated-graphql"; +import { StashService } from "../../core/StashService"; +import { HTMLInputProps } from "../../models"; + +const InternalPerformerSelect = Select.ofType(); +const InternalTagSelect = Select.ofType(); +const InternalStudioSelect = Select.ofType(); + +type ValidTypes = + GQL.AllPerformersForFilterAllPerformers | + GQL.AllTagsForFilterAllTags | + GQL.AllStudiosForFilterAllStudios; + +interface IProps extends HTMLInputProps { + type: "performers" | "studios" | "tags"; + initialId?: string; + noSelectionString?: string; + onSelectItem: (item: ValidTypes | undefined) => void; +} + +function addNoneOption(items: ValidTypes[]) { + // Add a none option to clear the gallery + if (!items.find((item) => item.id === "0")) { items.unshift({id: "0", name: "None"}); } +} + +export const FilterSelect: React.FunctionComponent = (props: IProps) => { + let items: ValidTypes[]; + let InternalSelect: new (props: ISelectProps) => Select; + switch (props.type) { + case "performers": { + const { data } = StashService.useAllPerformersForFilter(); + items = !!data && !!data.allPerformers ? data.allPerformers : []; + addNoneOption(items); + InternalSelect = InternalPerformerSelect; + break; + } + case "studios": { + const { data } = StashService.useAllStudiosForFilter(); + items = !!data && !!data.allStudios ? data.allStudios : []; + addNoneOption(items); + InternalSelect = InternalStudioSelect; + break; + } + case "tags": { + const { data } = StashService.useAllTagsForFilter(); + items = !!data && !!data.allTags ? data.allTags : []; + InternalSelect = InternalTagSelect; + break; + } + default: { + console.error("Unhandled case in FilterSelect"); + return <>Unhandled case in FilterSelect; + } + } + + /* eslint-disable react-hooks/rules-of-hooks */ + const [selectedItem, setSelectedItem] = React.useState(undefined); + + React.useEffect(() => { + if (!!items) { + const initialItem = items.find((item) => props.initialId === item.id); + if (!!initialItem) { + setSelectedItem(initialItem); + } else { + setSelectedItem(undefined); + } + } + }, [props.initialId, items]); + /* eslint-enable */ + + const renderItem: ItemRenderer = (item, itemProps) => { + if (!itemProps.modifiers.matchesPredicate) { return null; } + return ( + + ); + }; + + const filter: ItemPredicate = (query, item) => { + return item.name!.toLowerCase().indexOf(query.toLowerCase()) >= 0; + }; + + function onItemSelect(item: ValidTypes | undefined) { + if (item && item.id == "0") { + item = undefined; + } + + props.onSelectItem(item); + setSelectedItem(item); + } + + const noSelection = props.noSelectionString !== undefined ? props.noSelectionString : "(No selection)" + const buttonText = selectedItem ? selectedItem.name : noSelection; + return ( + } + onItemSelect={onItemSelect} + popoverProps={{position: "bottom"}} + {...props} + > + \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Settings/SettingsLogsPanel.tsx",["406","407","408","409"],"import {\n H4, FormGroup, HTMLSelect,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useState, useEffect, useRef } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\n\ninterface IProps {}\n\nfunction convertTime(logEntry : GQL.LogEntryDataFragment) {\n function pad(val : number) {\n var ret = val.toString();\n if (val <= 9) {\n ret = \"0\" + ret;\n }\n\n return ret;\n }\n\n var date = new Date(logEntry.time);\n var month = date.getMonth() + 1;\n var day = date.getDate();\n var dateStr = date.getFullYear() + \"-\" + pad(month) + \"-\" + pad(day);\n dateStr += \" \" + pad(date.getHours()) + \":\" + pad(date.getMinutes()) + \":\" + pad(date.getSeconds());\n\n return dateStr;\n}\n\nclass LogEntry {\n public time: string;\n public level: string;\n public message: string;\n public id: string;\n\n private static nextId: number = 0;\n\n public constructor(logEntry: GQL.LogEntryDataFragment) {\n this.time = convertTime(logEntry);\n this.level = logEntry.level;\n this.message = logEntry.message;\n\n var id = LogEntry.nextId++;\n this.id = id.toString();\n }\n}\n\nexport const SettingsLogsPanel: FunctionComponent = (props: IProps) => {\n const { data, error } = StashService.useLoggingSubscribe();\n const { data: existingData } = StashService.useLogs();\n \n const logEntries = useRef([]);\n const [logLevel, setLogLevel] = useState(\"Info\");\n const [filteredLogEntries, setFilteredLogEntries] = useState([]);\n const lastUpdate = useRef(0);\n const updateTimeout = useRef();\n\n // maximum number of log entries to display. Subsequent entries will truncate \n // the list, dropping off the oldest entries first.\n const MAX_LOG_ENTRIES = 200;\n\n function truncateLogEntries(entries : LogEntry[]) {\n entries.length = Math.min(entries.length, MAX_LOG_ENTRIES);\n }\n\n function prependLogEntries(toPrepend : LogEntry[]) {\n var newLogEntries = toPrepend.concat(logEntries.current);\n truncateLogEntries(newLogEntries);\n logEntries.current = newLogEntries;\n }\n\n function appendLogEntries(toAppend : LogEntry[]) {\n var newLogEntries = logEntries.current.concat(toAppend);\n truncateLogEntries(newLogEntries);\n logEntries.current = newLogEntries;\n }\n\n useEffect(() => {\n if (!data) { return; }\n\n // append data to the logEntries\n var convertedData = data.loggingSubscribe.map(convertLogEntry);\n\n // filter subscribed data as it comes in, otherwise we'll end up\n // truncating stuff that wasn't filtered out\n convertedData = convertedData.filter(filterByLogLevel)\n \n // put newest entries at the top\n convertedData.reverse();\n prependLogEntries(convertedData);\n\n updateFilteredEntries();\n }, [data]);\n\n useEffect(() => {\n if (!existingData || !existingData.logs) { return; }\n\n var convertedData = existingData.logs.map(convertLogEntry);\n appendLogEntries(convertedData);\n\n updateFilteredEntries();\n }, [existingData]);\n\n function updateFilteredEntries() {\n if (!updateTimeout.current) {\n console.log(\"Updating after timeout\");\n }\n updateTimeout.current = undefined;\n\n var filteredEntries = logEntries.current.filter(filterByLogLevel);\n setFilteredLogEntries(filteredEntries);\n\n lastUpdate.current = new Date().getTime();\n }\n\n useEffect(() => {\n updateFilteredEntries();\n }, [logLevel]);\n\n function convertLogEntry(logEntry : GQL.LogEntryDataFragment) {\n return new LogEntry(logEntry);\n }\n\n function levelClass(level : string) {\n return level.toLowerCase().trim();\n }\n\n interface ILogElementProps {\n logEntry : LogEntry\n }\n\n function LogElement(props : ILogElementProps) {\n // pad to maximum length of level enum\n var level = props.logEntry.level.padEnd(GQL.LogLevel.Progress.length);\n\n return (\n <>\n {props.logEntry.time} \n {level} \n {props.logEntry.message}\n
    \n \n );\n }\n\n function maybeRenderError() {\n if (error) {\n return (\n <>\n Error connecting to log server: {error.message}
    \n \n );\n }\n }\n\n const logLevels = [\"Debug\", \"Info\", \"Warning\", \"Error\"];\n\n function filterByLogLevel(logEntry : LogEntry) {\n if (logLevel == \"Debug\") {\n return true;\n }\n\n var logLevelIndex = logLevels.indexOf(logLevel);\n var levelIndex = logLevels.indexOf(logEntry.level);\n\n return levelIndex >= logLevelIndex;\n }\n\n return (\n <>\n

    Logs

    \n
    \n \n setLogLevel(event.target.value)}\n value={logLevel}\n />\n \n
    \n
    \n {maybeRenderError()}\n {filteredLogEntries.map((logEntry) =>\n \n )}\n
    \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx",[],"/home/peroo/stash/ui/v2/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx",["410"],"import {\n Alert,\n Button,\n Checkbox,\n Divider,\n FormGroup,\n H4,\n AnchorButton,\n ProgressBar,\n H5,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useState, useEffect } from \"react\";\nimport { StashService } from \"../../../core/StashService\";\nimport { ErrorUtils } from \"../../../utils/errors\";\nimport { ToastUtils } from \"../../../utils/toasts\";\nimport { GenerateButton } from \"./GenerateButton\";\nimport { Link } from \"react-router-dom\";\n\ninterface IProps {}\n\nexport const SettingsTasksPanel: FunctionComponent = (props: IProps) => {\n const [isImportAlertOpen, setIsImportAlertOpen] = useState(false);\n const [isCleanAlertOpen, setIsCleanAlertOpen] = useState(false);\n const [nameFromMetadata, setNameFromMetadata] = useState(true);\n const [status, setStatus] = useState(\"\");\n const [progress, setProgress] = useState(undefined);\n\n const [autoTagPerformers, setAutoTagPerformers] = useState(true);\n const [autoTagStudios, setAutoTagStudios] = useState(true);\n const [autoTagTags, setAutoTagTags] = useState(true);\n\n const jobStatus = StashService.useJobStatus();\n const metadataUpdate = StashService.useMetadataUpdate();\n\n function statusToText(status : string) {\n switch(status) {\n case \"Idle\":\n return \"Idle\";\n case \"Scan\":\n return \"Scanning for new content\";\n case \"Generate\":\n return \"Generating supporting files\";\n case \"Clean\":\n return \"Cleaning the database\";\n case \"Export\":\n return \"Exporting to JSON\";\n case \"Import\":\n return \"Importing from JSON\";\n case \"Auto Tag\":\n return \"Auto tagging scenes\";\n }\n\n return \"Idle\";\n }\n\n useEffect(() => {\n if (!!jobStatus.data && !!jobStatus.data.jobStatus) {\n setStatus(statusToText(jobStatus.data.jobStatus.status));\n var newProgress = jobStatus.data.jobStatus.progress;\n if (newProgress < 0) {\n setProgress(undefined);\n } else {\n setProgress(newProgress);\n }\n }\n }, [jobStatus.data]);\n\n useEffect(() => {\n if (!!metadataUpdate.data && !!metadataUpdate.data.metadataUpdate) {\n setStatus(statusToText(metadataUpdate.data.metadataUpdate.status));\n var newProgress = metadataUpdate.data.metadataUpdate.progress;\n if (newProgress < 0) {\n setProgress(undefined);\n } else {\n setProgress(newProgress);\n }\n }\n }, [metadataUpdate.data]);\n\n function onImport() {\n setIsImportAlertOpen(false);\n StashService.queryMetadataImport().then(() => { jobStatus.refetch()});\n }\n\n function renderImportAlert() {\n return (\n setIsImportAlertOpen(false)}\n onConfirm={() => onImport()}\n >\n

    \n Are you sure you want to import? This will delete the database and re-import from\n your exported metadata.\n

    \n \n );\n }\n\n function onClean() {\n setIsCleanAlertOpen(false);\n StashService.queryMetadataClean().then(() => { jobStatus.refetch()});\n }\n\n function renderCleanAlert() {\n return (\n setIsCleanAlertOpen(false)}\n onConfirm={() => onClean()}\n >\n

    \n Are you sure you want to Clean?\n This will delete db information and generated content\n for all scenes that are no longer found in the filesystem.\n

    \n \n );\n }\n\n async function onScan() {\n try {\n await StashService.queryMetadataScan({nameFromMetadata});\n ToastUtils.success(\"Started scan\");\n jobStatus.refetch();\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n function getAutoTagInput() {\n var wildcard = [\"*\"];\n return {\n performers: autoTagPerformers ? wildcard : [],\n studios: autoTagStudios ? wildcard : [],\n tags: autoTagTags ? wildcard : []\n }\n }\n\n async function onAutoTag() {\n try {\n await StashService.queryMetadataAutoTag(getAutoTagInput());\n ToastUtils.success(\"Started auto tagging\");\n jobStatus.refetch();\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n function maybeRenderStop() {\n if (!status || status === \"Idle\") {\n return undefined;\n }\n\n return (\n <>\n \n )\n }\n }\n\n function renderScenesButton() {\n if (props.isEditing) { return; }\n let linkSrc: string = \"#\";\n if (!!props.performer) {\n linkSrc = NavigationUtils.makePerformerScenesUrl(props.performer);\n } else if (!!props.studio) {\n linkSrc = NavigationUtils.makeStudioScenesUrl(props.studio);\n }\n return (\n \n Scenes\n \n );\n }\n\n function renderDeleteAlert() {\n var name;\n\n if (props.performer) {\n name = props.performer.name;\n }\n if (props.studio) {\n name = props.studio.name;\n }\n\n return (\n setIsDeleteAlertOpen(false)}\n onConfirm={() => props.onDelete()}\n >\n

    \n Are you sure you want to delete {name}?\n

    \n \n );\n }\n\n\n return (\n <>\n {renderDeleteAlert()}\n \n \n {renderEditButton()}\n {props.isEditing && !props.isNew ? : undefined}\n {renderScraperMenu()}\n {renderImageInput()}\n {renderSaveButton()}\n\n {renderAutoTagButton()}\n {renderScenesButton()}\n {renderDeleteButton()}\n \n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Shared/DurationInput.tsx",["412","413"],"import React, { FunctionComponent, useState, useEffect } from \"react\";\nimport { InputGroup, ButtonGroup, Button, IInputGroupProps, HTMLInputProps, ControlGroup } from \"@blueprintjs/core\";\nimport { TextUtils } from \"../../utils/text\";\nimport { FIXED, NUMERIC_INPUT } from \"@blueprintjs/core/lib/esm/common/classes\";\n\ninterface IProps {\n disabled?: boolean\n numericValue: number\n onValueChange(valueAsNumber: number): void\n onReset?(): void\n}\n\nexport const DurationInput: FunctionComponent = (props: IProps) => {\n const [value, setValue] = useState(secondsToString(props.numericValue));\n\n useEffect(() => {\n setValue(secondsToString(props.numericValue));\n }, [props.numericValue]);\n\n function secondsToString(seconds : number) {\n let ret = TextUtils.secondsToTimestamp(seconds);\n\n if (ret.startsWith(\"00:\")) {\n ret = ret.substr(3);\n\n if (ret.startsWith(\"0\")) {\n ret = ret.substr(1);\n }\n }\n\n return ret;\n }\n\n function stringToSeconds(v : string) {\n if (!v) {\n return 0;\n }\n \n let splits = v.split(\":\");\n\n if (splits.length > 3) {\n return 0;\n }\n\n let seconds = 0;\n let factor = 1;\n while(splits.length > 0) {\n let thisSplit = splits.pop();\n if (thisSplit == undefined) {\n return 0;\n }\n\n let thisInt = parseInt(thisSplit, 10);\n if (isNaN(thisInt)) {\n return 0;\n }\n\n seconds += factor * thisInt;\n factor *= 60;\n }\n\n return seconds;\n }\n\n function increment() {\n let seconds = stringToSeconds(value);\n seconds += 1;\n props.onValueChange(seconds);\n }\n\n function decrement() {\n let seconds = stringToSeconds(value);\n seconds -= 1;\n props.onValueChange(seconds);\n }\n\n function renderButtons() {\n return (\n \n increment()}\n />\n decrement()}\n />\n \n )\n }\n\n function onReset() {\n if (props.onReset) {\n props.onReset();\n }\n }\n\n function maybeRenderReset() {\n if (props.onReset) {\n return (\n onReset()}\n />\n )\n }\n }\n\n return (\n \n setValue(e.target.value)}\n onBlur={() => props.onValueChange(stringToSeconds(value))}\n placeholder=\"hh:mm:ss\"\n rightElement={maybeRenderReset()}\n />\n {renderButtons()}\n \n )\n};","/home/peroo/stash/ui/v2/src/components/Shared/FolderSelect/FolderSelect.tsx",["414","415"],"import {\n Button,\n Classes,\n Dialog,\n InputGroup,\n Spinner,\n FormGroup,\n} from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { StashService } from \"../../../core/StashService\";\n\ninterface IProps {\n directories: string[];\n onDirectoriesChanged: (directories: string[]) => void;\n}\n\nexport const FolderSelect: FunctionComponent = (props: IProps) => {\n const [currentDirectory, setCurrentDirectory] = useState(\"\");\n const [isDisplayingDialog, setIsDisplayingDialog] = useState(false);\n const [selectableDirectories, setSelectableDirectories] = useState([]);\n const [selectedDirectories, setSelectedDirectories] = useState([]);\n const { data, error, loading } = StashService.useDirectories(currentDirectory);\n\n useEffect(() => {\n setSelectedDirectories(props.directories);\n }, [props.directories]);\n\n useEffect(() => {\n if (!data || !data.directories || !!error) { return; }\n setSelectableDirectories(StashService.nullToUndefined(data.directories));\n }, [data]);\n\n function onSelectDirectory() {\n selectedDirectories.push(currentDirectory);\n setSelectedDirectories(selectedDirectories);\n setCurrentDirectory(\"\");\n setIsDisplayingDialog(false);\n props.onDirectoriesChanged(selectedDirectories);\n }\n\n function onRemoveDirectory(directory: string) {\n const newSelectedDirectories = selectedDirectories.filter((dir) => dir !== directory);\n setSelectedDirectories(newSelectedDirectories);\n props.onDirectoriesChanged(newSelectedDirectories);\n }\n\n function renderDialog() {\n return (\n setIsDisplayingDialog(false)}\n title=\"Select Directory\"\n >\n
    \n setCurrentDirectory(e.target.value)}\n value={currentDirectory}\n rightElement={(!data || !data.directories || loading) ? : undefined}\n />\n {selectableDirectories.map((path) => {\n return
    setCurrentDirectory(path)}>{path}
    ;\n })}\n
    \n
    \n
    \n \n
    \n
    \n \n );\n }\n\n return (\n <>\n {!!error ?

    {error.message}

    : undefined}\n {renderDialog()}\n \n {selectedDirectories.map((path) => {\n return ;\n })}\n \n \n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Shared/TagLink.tsx",["416"],"import {\n ITagProps,\n Tag,\n} from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { PerformerDataFragment, SceneMarkerDataFragment, TagDataFragment } from \"../../core/generated-graphql\";\nimport { NavigationUtils } from \"../../utils/navigation\";\nimport { TextUtils } from \"../../utils/text\";\n\ninterface IProps extends ITagProps {\n tag?: Partial;\n performer?: Partial;\n marker?: Partial;\n}\n\nexport const TagLink: FunctionComponent = (props: IProps) => {\n let link: string = \"#\";\n let title: string = \"\";\n if (!!props.tag) {\n link = NavigationUtils.makeTagScenesUrl(props.tag);\n title = props.tag.name || \"\";\n } else if (!!props.performer) {\n link = NavigationUtils.makePerformerScenesUrl(props.performer);\n title = props.performer.name || \"\";\n } else if (!!props.marker) {\n link = NavigationUtils.makeSceneMarkerUrl(props.marker);\n title = `${props.marker.title} - ${TextUtils.secondsToTimestamp(props.marker.seconds || 0)}`;\n }\n return (\n \n {title}\n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Stats.tsx",["417"],"import { H1, Spinner } from \"@blueprintjs/core\";\nimport React, { FunctionComponent } from \"react\";\nimport { StashService } from \"../core/StashService\";\n\nexport const Stats: FunctionComponent = () => {\n const { data, error, loading } = StashService.useStats();\n\n function renderStats() {\n if (!data || !data.stats) { return; }\n return (\n \n );\n }\n\n return (\n
    \n {!data || loading ? : undefined}\n {!!error ? error.message : undefined}\n {renderStats()}\n\n

    Notes

    \n
    \n        {`\n        This is still an early version, some things are still a work in progress.\n        `}\n      
    \n
    \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Studios/StudioCard.tsx",[],"/home/peroo/stash/ui/v2/src/components/Studios/StudioDetails/Studio.tsx",["418","419","420","421","422","423","424","425","426","427"],"import {\n Button,\n Classes,\n Dialog,\n EditableText,\n HTMLSelect,\n HTMLTable,\n Spinner,\n} from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { StashService } from \"../../../core/StashService\";\nimport { IBaseProps } from \"../../../models\";\nimport { ErrorUtils } from \"../../../utils/errors\";\nimport { TableUtils } from \"../../../utils/table\";\nimport { DetailsEditNavbar } from \"../../Shared/DetailsEditNavbar\";\nimport { ToastUtils } from \"../../../utils/toasts\";\n\ninterface IProps extends IBaseProps {}\n\nexport const Studio: FunctionComponent = (props: IProps) => {\n const isNew = props.match.params.id === \"new\";\n\n // Editing state\n const [isEditing, setIsEditing] = useState(isNew);\n\n // Editing studio state\n const [image, setImage] = useState(undefined);\n const [name, setName] = useState(undefined);\n const [url, setUrl] = useState(undefined);\n\n // Studio state\n const [studio, setStudio] = useState>({});\n const [imagePreview, setImagePreview] = useState(undefined);\n\n // Network state\n const [isLoading, setIsLoading] = useState(false);\n\n const { data, error, loading } = StashService.useFindStudio(props.match.params.id);\n const updateStudio = StashService.useStudioUpdate(getStudioInput() as GQL.StudioUpdateInput);\n const createStudio = StashService.useStudioCreate(getStudioInput() as GQL.StudioCreateInput);\n const deleteStudio = StashService.useStudioDestroy(getStudioInput() as GQL.StudioDestroyInput);\n\n function updateStudioEditState(state: Partial) {\n setName(state.name);\n setUrl(state.url);\n }\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findStudio || !!error) { return; }\n setStudio(data.findStudio);\n }, [data]);\n\n useEffect(() => {\n setImagePreview(studio.image_path);\n setImage(undefined);\n updateStudioEditState(studio);\n if (!isNew) {\n setIsEditing(false);\n }\n }, [studio]);\n\n function pasteImage(e : any) {\n if (e.clipboardData.files.length == 0) {\n return;\n }\n \n const file: File = e.clipboardData.files[0];\n const reader: FileReader = new FileReader();\n \n reader.onloadend = (e) => {\n setImagePreview(reader.result as string);\n setImage(reader.result as string);\n };\n reader.readAsDataURL(file);\n }\n\n useEffect(() => {\n window.addEventListener(\"paste\", pasteImage);\n \n return () => window.removeEventListener(\"paste\", pasteImage);\n });\n\n if (!isNew && !isEditing) {\n if (!data || !data.findStudio || isLoading) { return ; }\n if (!!error) { return <>error...; }\n }\n\n function getStudioInput() {\n const input: Partial = {\n name,\n url,\n image,\n };\n\n if (!isNew) {\n (input as GQL.StudioUpdateInput).id = props.match.params.id;\n }\n return input;\n }\n\n async function onSave() {\n setIsLoading(true);\n try {\n if (!isNew) {\n const result = await updateStudio();\n setStudio(result.data.studioUpdate);\n } else {\n const result = await createStudio();\n setStudio(result.data.studioCreate);\n props.history.push(`/studios/${result.data.studioCreate.id}`);\n }\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n }\n\n async function onAutoTag() {\n if (!studio || !studio.id) {\n return;\n }\n try {\n await StashService.queryMetadataAutoTag({ studios: [studio.id]});\n ToastUtils.success(\"Started auto tagging\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n async function onDelete() {\n setIsLoading(true);\n try {\n const result = await deleteStudio();\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n \n // redirect to studios page\n props.history.push(`/studios`);\n }\n\n function onImageChange(event: React.FormEvent) {\n const file: File = (event.target as any).files[0];\n const reader: FileReader = new FileReader();\n\n reader.onloadend = (e) => {\n setImagePreview(reader.result as string);\n setImage(reader.result as string);\n };\n reader.readAsDataURL(file);\n }\n\n // TODO: CSS class\n return (\n <>\n
    \n
    \n \n
    \n
    \n { setIsEditing(!isEditing); updateStudioEditState(studio); }}\n onSave={onSave}\n onDelete={onDelete}\n onAutoTag={onAutoTag}\n onImageChange={onImageChange}\n />\n

    \n setName(value)}\n />\n

    \n\n \n \n {TableUtils.renderEditableTextTableRow({title: \"URL\", value: url, isEditing, onChange: setUrl})}\n \n \n
    \n
    \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Studios/StudioList.tsx",["428"],"import _ from \"lodash\";\nimport React, { FunctionComponent } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { FindStudiosQuery, FindStudiosVariables } from \"../../core/generated-graphql\";\nimport { ListHook } from \"../../hooks/ListHook\";\nimport { IBaseProps } from \"../../models/base-props\";\nimport { ListFilterModel } from \"../../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../../models/list-filter/types\";\nimport { StudioCard } from \"./StudioCard\";\n\ninterface IProps extends IBaseProps {}\n\nexport const StudioList: FunctionComponent = (props: IProps) => {\n const listData = ListHook.useList({\n filterMode: FilterMode.Studios,\n props,\n renderContent,\n });\n\n function renderContent(result: QueryHookResult, filter: ListFilterModel) {\n if (!result.data || !result.data.findStudios) { return; }\n if (filter.displayMode === DisplayMode.Grid) {\n return (\n
    \n {result.data.findStudios.studios.map((studio) => ())}\n
    \n );\n } else if (filter.displayMode === DisplayMode.List) {\n return

    TODO

    ;\n } else if (filter.displayMode === DisplayMode.Wall) {\n return

    TODO

    ;\n }\n }\n\n return listData.template;\n};\n","/home/peroo/stash/ui/v2/src/components/Studios/Studios.tsx",[],"/home/peroo/stash/ui/v2/src/components/Tags/TagList.tsx",["429","430","431","432","433","434","435","436","437","438","439","440"],"import { Alert, Button, Classes, Dialog, EditableText, FormGroup, HTMLTable, InputGroup, Spinner, Tag } from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { Link } from \"react-router-dom\";\nimport { FindGalleriesQuery, FindGalleriesVariables } from \"../../core/generated-graphql\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { ListHook } from \"../../hooks/ListHook\";\nimport { IBaseProps } from \"../../models/base-props\";\nimport { ListFilterModel } from \"../../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../../models/list-filter/types\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { NavigationUtils } from \"../../utils/navigation\";\nimport { ToastUtils } from \"../../utils/toasts\";\n\ninterface IProps extends IBaseProps {}\n\nexport const TagList: FunctionComponent = (props: IProps) => {\n const [tags, setTags] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n\n // Editing / New state\n const [editingTag, setEditingTag] = useState | undefined>(undefined);\n const [deletingTag, setDeletingTag] = useState | undefined>(undefined);\n const [name, setName] = useState(\"\");\n\n const { data, error, loading } = StashService.useAllTags();\n const updateTag = StashService.useTagUpdate(getTagInput() as GQL.TagUpdateInput);\n const createTag = StashService.useTagCreate(getTagInput() as GQL.TagCreateInput);\n const deleteTag = StashService.useTagDestroy(getDeleteTagInput() as GQL.TagDestroyInput);\n\n const [isDeleteAlertOpen, setIsDeleteAlertOpen] = useState(false);\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.allTags || !!error) { return; }\n setTags(data.allTags);\n }, [data]);\n\n useEffect(() => {\n if (!!editingTag) {\n setName(editingTag.name || \"\");\n } else {\n setName(\"\");\n }\n }, [editingTag]);\n\n useEffect(() => {\n setIsDeleteAlertOpen(!!deletingTag);\n }, [deletingTag]);\n\n function getTagInput() {\n const tagInput: Partial = { name };\n if (!!editingTag) { (tagInput as Partial).id = editingTag.id; }\n return tagInput;\n }\n\n function getDeleteTagInput() {\n const tagInput: Partial = {};\n if (!!deletingTag) { tagInput.id = deletingTag.id; }\n return tagInput;\n }\n\n async function onEdit() {\n try {\n if (!!editingTag && !!editingTag.id) {\n await updateTag();\n ToastUtils.success(\"Updated tag\");\n } else {\n await createTag();\n ToastUtils.success(\"Created tag\");\n }\n setEditingTag(undefined);\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n async function onAutoTag(tag : GQL.TagDataFragment) {\n if (!tag) {\n return;\n }\n try {\n await StashService.queryMetadataAutoTag({ tags: [tag.id]});\n ToastUtils.success(\"Started auto tagging\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n async function onDelete() {\n try {\n await deleteTag();\n ToastUtils.success(\"Deleted tag\");\n setDeletingTag(undefined);\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n function renderDeleteAlert() {\n return (\n setDeletingTag(undefined)}\n onConfirm={() => onDelete()}\n >\n

    \n Are you sure you want to delete {deletingTag && deletingTag.name}?\n

    \n \n );\n }\n\n if (!data || !data.allTags || isLoading) { return ; }\n if (!!error) { return <>{error.message}; }\n\n const tagElements = tags.map((tag) => {\n return (\n <>\n {renderDeleteAlert()}\n
    \n setEditingTag(tag)}>{tag.name}\n
    \n \n Scenes: {tag.scene_count}\n \n Markers: {tag.scene_marker_count}\n \n Total: {(tag.scene_count || 0) + (tag.scene_marker_count || 0)}\n \n
    \n
    \n \n );\n });\n return (\n
    \n \n setEditingTag(undefined)}\n title={!!editingTag && !!editingTag.id ? \"Edit Tag\" : \"New Tag\"}\n >\n
    \n \n setName(newValue.target.value)}\n value={name}\n />\n \n
    \n
    \n
    \n \n
    \n
    \n \n\n {tagElements}\n
    \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Tags/Tags.tsx",[],"/home/peroo/stash/ui/v2/src/components/Wall/WallItem.tsx",["441"],"import _ from \"lodash\";\nimport React, { FunctionComponent, useRef, useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { VideoHoverHook } from \"../../hooks/VideoHover\";\nimport { TextUtils } from \"../../utils/text\";\nimport { NavigationUtils } from \"../../utils/navigation\";\nimport { StashService } from \"../../core/StashService\";\n\ninterface IWallItemProps {\n scene?: GQL.SlimSceneDataFragment;\n sceneMarker?: GQL.SceneMarkerDataFragment;\n origin?: string;\n onOverlay: (show: boolean) => void;\n clickHandler?: (item: GQL.SlimSceneDataFragment | GQL.SceneMarkerDataFragment) => void;\n}\n\nexport const WallItem: FunctionComponent = (props: IWallItemProps) => {\n const [videoPath, setVideoPath] = useState(undefined);\n const [previewPath, setPreviewPath] = useState(\"\");\n const [screenshotPath, setScreenshotPath] = useState(\"\");\n const [title, setTitle] = useState(\"\");\n const [tags, setTags] = useState([]);\n const config = StashService.useConfiguration();\n const videoHoverHook = VideoHoverHook.useVideoHover({resetOnMouseLeave: true});\n const showTextContainer = !!config.data && !!config.data.configuration ? config.data.configuration.interface.wallShowTitle : true;\n\n function onMouseEnter() {\n VideoHoverHook.onMouseEnter(videoHoverHook);\n if (!videoPath || videoPath === \"\") {\n if (!!props.sceneMarker) {\n setVideoPath(props.sceneMarker.stream || \"\");\n } else if (!!props.scene) {\n setVideoPath(props.scene.paths.preview || \"\");\n }\n }\n props.onOverlay(true);\n }\n const debouncedOnMouseEnter = useRef(_.debounce(onMouseEnter, 500));\n\n function onMouseLeave() {\n VideoHoverHook.onMouseLeave(videoHoverHook);\n setVideoPath(\"\");\n debouncedOnMouseEnter.current.cancel();\n props.onOverlay(false);\n }\n\n function onClick() {\n if (props.clickHandler === undefined) { return; }\n if (props.scene !== undefined) {\n props.clickHandler(props.scene);\n } else if (props.sceneMarker !== undefined) {\n props.clickHandler(props.sceneMarker);\n }\n }\n\n let linkSrc: string = \"#\";\n if (props.clickHandler === undefined) {\n if (props.scene !== undefined) {\n linkSrc = `/scenes/${props.scene.id}`;\n } else if (props.sceneMarker !== undefined) {\n linkSrc = NavigationUtils.makeSceneMarkerUrl(props.sceneMarker);\n }\n }\n\n function onTransitionEnd(event: React.TransitionEvent) {\n const target = (event.target as any);\n if (target.classList.contains(\"double-scale\")) {\n target.parentElement.style.zIndex = 10;\n } else {\n target.parentElement.style.zIndex = null;\n }\n }\n\n useEffect(() => {\n if (!!props.sceneMarker) {\n setPreviewPath(props.sceneMarker.preview);\n setTitle(`${props.sceneMarker!.title} - ${TextUtils.secondsToTimestamp(props.sceneMarker.seconds)}`);\n const thisTags = props.sceneMarker.tags.map((tag) => ({tag.name}));\n thisTags.unshift({props.sceneMarker.primary_tag.name});\n setTags(thisTags);\n } else if (!!props.scene) {\n setPreviewPath(props.scene.paths.webp || \"\");\n setScreenshotPath(props.scene.paths.screenshot || \"\");\n setTitle(props.scene.title || \"\");\n // tags = props.scene.tags.map((tag) => ({tag.name}));\n }\n }, [props.sceneMarker, props.scene]);\n\n function previewNotFound() {\n if (previewPath !== screenshotPath) {\n setPreviewPath(screenshotPath);\n }\n }\n\n const className = [\"scene-wall-item-container\"];\n if (videoHoverHook.isHovering.current) { className.push(\"double-scale\"); }\n const style: React.CSSProperties = {};\n if (!!props.origin) { style.transformOrigin = props.origin; }\n return (\n
    \n debouncedOnMouseEnter.current()}\n onMouseMove={() => debouncedOnMouseEnter.current()}\n onMouseLeave={onMouseLeave}\n >\n onClick()} to={linkSrc}>\n \n previewNotFound()} />\n {showTextContainer ?\n
    \n
    \n {title}\n
    \n {tags}\n
    : undefined\n }\n \n
    \n
    \n );\n};\n","/home/peroo/stash/ui/v2/src/components/Wall/WallPanel.tsx",["442"],"import _ from \"lodash\";\nimport React, { FunctionComponent, useState } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport \"./Wall.scss\";\nimport { WallItem } from \"./WallItem\";\n\ninterface IWallPanelProps {\n scenes?: GQL.SlimSceneDataFragment[];\n sceneMarkers?: GQL.SceneMarkerDataFragment[];\n clickHandler?: (item: GQL.SlimSceneDataFragment | GQL.SceneMarkerDataFragment) => void;\n}\n\nexport const WallPanel: FunctionComponent = (props: IWallPanelProps) => {\n const [showOverlay, setShowOverlay] = useState(false);\n\n function onOverlay(show: boolean) {\n setShowOverlay(show);\n }\n\n function getOrigin(index: number, rowSize: number, total: number): string {\n const isAtStart = index % rowSize === 0;\n const isAtEnd = index % rowSize === rowSize - 1;\n const endRemaining = total % rowSize;\n\n // First row\n if (total === 1) { return \"top\"; }\n if (index === 0) { return \"top left\"; }\n if (index === rowSize - 1 || (total < rowSize && index === total - 1)) { return \"top right\"; }\n if (index < rowSize) { return \"top\"; }\n\n // Bottom row\n if (isAtEnd && index === total - 1) { return \"bottom right\"; }\n if (isAtStart && index === total - rowSize) { return \"bottom left\"; }\n if (endRemaining !== 0 && index >= total - endRemaining) { return \"bottom\"; }\n if (endRemaining === 0 && index >= total - rowSize) { return \"bottom\"; }\n\n // Everything else\n if (isAtStart) { return \"center left\"; }\n if (isAtEnd) { return \"center right\"; }\n return \"center\";\n }\n\n function maybeRenderScenes() {\n if (props.scenes === undefined) { return; }\n return props.scenes.map((scene, index) => {\n const origin = getOrigin(index, 5, props.scenes!.length);\n return (\n \n );\n });\n }\n\n function maybeRenderSceneMarkers() {\n if (props.sceneMarkers === undefined) { return; }\n return props.sceneMarkers.map((marker, index) => {\n const origin = getOrigin(index, 5, props.sceneMarkers!.length);\n return (\n \n );\n });\n }\n\n function render() {\n const overlayClassName = showOverlay ? \"visible\" : \"hidden\";\n return (\n <>\n
    \n
    \n {maybeRenderScenes()}\n {maybeRenderSceneMarkers()}\n
    \n \n );\n }\n\n return render();\n};\n","/home/peroo/stash/ui/v2/src/components/list/AddFilter.tsx",[],"/home/peroo/stash/ui/v2/src/components/list/ListFilter.tsx",["443","444","445","446"],"import {\n AnchorButton,\n Button,\n ButtonGroup,\n ControlGroup,\n HTMLSelect,\n InputGroup,\n Menu,\n MenuItem,\n Popover,\n Tag,\n Tooltip,\n Slider,\n} from \"@blueprintjs/core\";\nimport { debounce } from \"lodash\";\nimport React, { FunctionComponent, SyntheticEvent, useEffect, useRef, useState } from \"react\";\nimport { Criterion } from \"../../models/list-filter/criteria/criterion\";\nimport { ListFilterModel } from \"../../models/list-filter/filter\";\nimport { DisplayMode } from \"../../models/list-filter/types\";\nimport { AddFilter } from \"./AddFilter\";\n\ninterface IListFilterProps {\n onChangePageSize: (pageSize: number) => void;\n onChangeQuery: (query: string) => void;\n onChangeSortDirection: (sortDirection: \"asc\" | \"desc\") => void;\n onChangeSortBy: (sortBy: string) => void;\n onChangeDisplayMode: (displayMode: DisplayMode) => void;\n onAddCriterion: (criterion: Criterion, oldId?: string) => void;\n onRemoveCriterion: (criterion: Criterion) => void;\n zoomIndex?: number;\n onChangeZoom?: (zoomIndex: number) => void;\n onSelectAll?: () => void;\n onSelectNone?: () => void;\n filter: ListFilterModel;\n}\n\nconst PAGE_SIZE_OPTIONS = [\"20\", \"40\", \"60\", \"120\"];\n\nexport const ListFilter: FunctionComponent = (props: IListFilterProps) => {\n let searchCallback: any;\n\n const [editingCriterion, setEditingCriterion] = useState(undefined);\n\n useEffect(() => {\n searchCallback = debounce((event: any) => {\n props.onChangeQuery(event.target.value);\n }, 500);\n });\n\n function onChangePageSize(event: SyntheticEvent) {\n const val = event!.currentTarget!.value;\n props.onChangePageSize(parseInt(val, 10));\n }\n\n function onChangeQuery(event: SyntheticEvent) {\n event.persist();\n searchCallback(event);\n }\n\n function onChangeSortDirection(_: any) {\n if (props.filter.sortDirection === \"asc\") {\n props.onChangeSortDirection(\"desc\");\n } else {\n props.onChangeSortDirection(\"asc\");\n }\n }\n\n function onChangeSortBy(event: React.MouseEvent) {\n props.onChangeSortBy(event.currentTarget.text);\n }\n\n function onChangeDisplayMode(displayMode: DisplayMode) {\n props.onChangeDisplayMode(displayMode);\n }\n\n function onAddCriterion(criterion: Criterion, oldId?: string) {\n props.onAddCriterion(criterion, oldId);\n }\n\n function onCancelAddCriterion() {\n setEditingCriterion(undefined);\n }\n\n let removedCriterionId = \"\";\n function onRemoveCriterionTag(criterion?: Criterion) {\n if (!criterion) { return; }\n setEditingCriterion(undefined);\n removedCriterionId = criterion.getId();\n props.onRemoveCriterion(criterion);\n }\n function onClickCriterionTag(criterion?: Criterion) {\n if (!criterion || removedCriterionId !== \"\") { return; }\n setEditingCriterion(criterion);\n }\n\n function renderSortByOptions() {\n return props.filter.sortByOptions.map((option) => (\n \n ));\n }\n\n function renderDisplayModeOptions() {\n function getIcon(option: DisplayMode) {\n switch (option) {\n case DisplayMode.Grid: return \"grid-view\";\n case DisplayMode.List: return \"list\";\n case DisplayMode.Wall: return \"symbol-square\";\n }\n }\n function getLabel(option: DisplayMode) {\n switch (option) {\n case DisplayMode.Grid: return \"Grid\";\n case DisplayMode.List: return \"List\";\n case DisplayMode.Wall: return \"Wall\";\n }\n }\n return props.filter.displayModeOptions.map((option) => (\n \n onChangeDisplayMode(option)}\n icon={getIcon(option)}\n />\n \n ));\n }\n\n function renderFilterTags() {\n return props.filter.criteria.map((criterion) => (\n onRemoveCriterionTag(criterion)}\n onClick={() => onClickCriterionTag(criterion)}\n >\n {criterion.getLabel()}\n \n ));\n }\n\n function onSelectAll() {\n if (props.onSelectAll) {\n props.onSelectAll();\n }\n }\n\n function onSelectNone() {\n if (props.onSelectNone) {\n props.onSelectNone();\n }\n }\n\n function renderSelectAll() {\n if (props.onSelectAll) {\n return onSelectAll()} text=\"Select All\" />;\n }\n }\n\n function renderSelectNone() {\n if (props.onSelectNone) {\n return onSelectNone()} text=\"Select None\" />;\n }\n }\n\n function renderMore() {\n let options = [];\n options.push(renderSelectAll());\n options.push(renderSelectNone());\n options = options.filter((o) => !!o);\n\n let menuItems = options as JSX.Element[];\n\n function renderMoreOptions() {\n return (\n <>\n {menuItems}\n \n )\n }\n\n if (menuItems.length > 0) {\n return (\n \n \n {renderSortByOptions()}\n \n \n \n \n \n \n \n\n \n\n \n {renderDisplayModeOptions()}\n \n\n {maybeRenderZoom()}\n\n \n {renderMore()}\n \n
    \n
    \n {renderFilterTags()}\n
    \n \n );\n }\n\n return render();\n};\n","/home/peroo/stash/ui/v2/src/components/list/Pagination.tsx",[],"/home/peroo/stash/ui/v2/src/components/performers/PerformerCard.tsx",[],"/home/peroo/stash/ui/v2/src/components/performers/PerformerDetails/Performer.tsx",["447","448"],"/home/peroo/stash/ui/v2/src/components/performers/PerformerList.tsx",[],"/home/peroo/stash/ui/v2/src/components/performers/PerformerListTable.tsx",[],"/home/peroo/stash/ui/v2/src/components/performers/performers.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneCard.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/Scene.tsx",["449","450"],"import {\n Card,\n Spinner,\n Tab,\n Tabs,\n} from \"@blueprintjs/core\";\nimport queryString from \"query-string\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { StashService } from \"../../../core/StashService\";\nimport { IBaseProps } from \"../../../models\";\nimport { GalleryViewer } from \"../../Galleries/GalleryViewer\";\nimport { ScenePlayer } from \"../ScenePlayer/ScenePlayer\";\nimport { SceneDetailPanel } from \"./SceneDetailPanel\";\nimport { SceneEditPanel } from \"./SceneEditPanel\";\nimport { SceneFileInfoPanel } from \"./SceneFileInfoPanel\";\nimport { SceneMarkersPanel } from \"./SceneMarkersPanel\";\nimport { ScenePerformerPanel } from \"./ScenePerformerPanel\";\n\ninterface ISceneProps extends IBaseProps {}\n\nexport const Scene: FunctionComponent = (props: ISceneProps) => {\n const [timestamp, setTimestamp] = useState(0);\n const [scene, setScene] = useState>({});\n const [isLoading, setIsLoading] = useState(false);\n const { data, error, loading } = StashService.useFindScene(props.match.params.id);\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findScene || !!error) { return; }\n setScene(StashService.nullToUndefined(data.findScene));\n }, [data]);\n\n useEffect(() => {\n const queryParams = queryString.parse(props.location.search);\n if (!!queryParams.t && typeof queryParams.t === \"string\" && timestamp === 0) {\n const newTimestamp = parseInt(queryParams.t, 10);\n setTimestamp(newTimestamp);\n }\n });\n\n function onClickMarker(marker: GQL.SceneMarkerDataFragment) {\n setTimestamp(marker.seconds);\n }\n\n if (!data || !data.findScene || isLoading || Object.keys(scene).length === 0) {\n return ;\n }\n const modifiedScene =\n Object.assign({scene_marker_tags: data.sceneMarkerTags}, scene) as GQL.SceneDataFragment; // TODO Hack from angular\n if (!!error) { return <>error...; }\n\n return (\n <>\n \n \n \n } />\n }\n />\n {modifiedScene.performers.length > 0 ?\n }\n /> : undefined\n }\n {!!modifiedScene.gallery ?\n }\n /> : undefined\n }\n } />\n setScene(newScene)} \n onDelete={() => props.history.push(\"/scenes\")}\n />}\n />\n \n \n \n );\n};\n","/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneDetailPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneEditPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneFilenameParser.tsx",["451","452"],"import {\n Card,\n FormGroup,\n InputGroup,\n Button,\n H4,\n Spinner,\n HTMLTable,\n Checkbox,\n H5,\n MenuItem,\n HTMLSelect,\n TagInput,\n Tree,\n ITreeNode,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { StashService } from \"../../core/StashService\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { SlimSceneDataFragment, Maybe } from \"../../core/generated-graphql\";\nimport { TextUtils } from \"../../utils/text\";\nimport _ from \"lodash\";\nimport { ToastUtils } from \"../../utils/toasts\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { Pagination } from \"../list/Pagination\";\nimport { Select, ItemRenderer, ItemPredicate } from \"@blueprintjs/select\";\nimport { FilterMultiSelect } from \"../select/FilterMultiSelect\";\nimport { FilterSelect } from \"../select/FilterSelect\";\n \nclass ParserResult {\n public value: Maybe;\n public originalValue: Maybe;\n public set: boolean = false;\n\n public setOriginalValue(v : Maybe) {\n this.originalValue = v;\n this.value = v;\n }\n\n public setValue(v : Maybe) {\n if (!!v) {\n this.value = v;\n this.set = !_.isEqual(this.value, this.originalValue);\n }\n }\n}\n\nclass ParserField {\n public field : string;\n public helperText? : string;\n\n constructor(field: string, helperText?: string) {\n this.field = field;\n this.helperText = helperText;\n }\n\n public getFieldPattern() {\n return \"{\" + this.field + \"}\";\n }\n\n static Title = new ParserField(\"title\");\n static Ext = new ParserField(\"ext\", \"File extension\");\n\n static I = new ParserField(\"i\", \"Matches any ignored word\");\n static D = new ParserField(\"d\", \"Matches any delimiter (.-_)\");\n\n static Performer = new ParserField(\"performer\");\n static Studio = new ParserField(\"studio\");\n static Tag = new ParserField(\"tag\");\n\n // date fields\n static Date = new ParserField(\"date\", \"YYYY-MM-DD\");\n static YYYY = new ParserField(\"yyyy\", \"Year\");\n static YY = new ParserField(\"yy\", \"Year (20YY)\");\n static MM = new ParserField(\"mm\", \"Two digit month\");\n static DD = new ParserField(\"dd\", \"Two digit date\");\n static YYYYMMDD = new ParserField(\"yyyymmdd\");\n static YYMMDD = new ParserField(\"yymmdd\");\n static DDMMYYYY = new ParserField(\"ddmmyyyy\");\n static DDMMYY = new ParserField(\"ddmmyy\");\n static MMDDYYYY = new ParserField(\"mmddyyyy\");\n static MMDDYY = new ParserField(\"mmddyy\");\n\n static validFields = [\n ParserField.Title,\n ParserField.Ext,\n ParserField.D,\n ParserField.I,\n ParserField.Performer,\n ParserField.Studio,\n ParserField.Tag,\n ParserField.Date,\n ParserField.YYYY,\n ParserField.YY,\n ParserField.MM,\n ParserField.DD,\n ParserField.YYYYMMDD,\n ParserField.YYMMDD,\n ParserField.DDMMYYYY,\n ParserField.DDMMYY,\n ParserField.MMDDYYYY,\n ParserField.MMDDYY\n ]\n\n static fullDateFields = [\n ParserField.YYYYMMDD,\n ParserField.YYMMDD,\n ParserField.DDMMYYYY,\n ParserField.DDMMYY,\n ParserField.MMDDYYYY,\n ParserField.MMDDYY\n ];\n}\nclass SceneParserResult {\n public id: string;\n public filename: string;\n public title: ParserResult = new ParserResult();\n public date: ParserResult = new ParserResult();\n\n public studio: ParserResult = new ParserResult();\n public studioId: ParserResult = new ParserResult();\n public tags: ParserResult = new ParserResult();\n public tagIds: ParserResult = new ParserResult();\n public performers: ParserResult = new ParserResult();\n public performerIds: ParserResult = new ParserResult();\n\n public scene : SlimSceneDataFragment;\n\n constructor(result : GQL.ParseSceneFilenamesResults) {\n this.scene = result.scene;\n\n this.id = this.scene.id;\n this.filename = TextUtils.fileNameFromPath(this.scene.path);\n this.title.setOriginalValue(this.scene.title);\n this.date.setOriginalValue(this.scene.date);\n this.performerIds.setOriginalValue(this.scene.performers.map((p) => p.id));\n this.performers.setOriginalValue(this.scene.performers);\n this.tagIds.setOriginalValue(this.scene.tags.map((t) => t.id));\n this.tags.setOriginalValue(this.scene.tags);\n this.studioId.setOriginalValue(this.scene.studio ? this.scene.studio.id : undefined);\n this.studio.setOriginalValue(this.scene.studio);\n\n this.title.setValue(result.title);\n this.date.setValue(result.date);\n this.performerIds.setValue(result.performer_ids);\n this.tagIds.setValue(result.tag_ids);\n this.studioId.setValue(result.studio_id);\n\n if (result.performer_ids) {\n this.performers.setValue(result.performer_ids.map((p) => {\n return {\n id: p,\n name: \"\",\n favorite: false,\n image_path: \"\"\n };\n }));\n }\n\n if (result.tag_ids) {\n this.tags.setValue(result.tag_ids.map((t) => {\n return {\n id: t,\n name: \"\",\n };\n }));\n }\n\n if (result.studio_id) {\n this.studio.setValue({\n id: result.studio_id,\n name: \"\",\n image_path: \"\"\n });\n }\n }\n\n private static setInput(object: any, key: string, parserResult : ParserResult) {\n if (parserResult.set) {\n object[key] = parserResult.value;\n }\n }\n\n // returns true if any of its fields have set == true\n public isChanged() {\n return this.title.set || this.date.set || this.performerIds.set || this.studioId.set || this.tagIds.set;\n }\n\n public toSceneUpdateInput() {\n var ret = {\n id: this.id,\n title: this.scene.title,\n details: this.scene.details,\n url: this.scene.url,\n date: this.scene.date,\n rating: this.scene.rating,\n gallery_id: this.scene.gallery ? this.scene.gallery.id : undefined,\n studio_id: this.scene.studio ? this.scene.studio.id : undefined,\n performer_ids: this.scene.performers.map((performer) => performer.id),\n tag_ids: this.scene.tags.map((tag) => tag.id)\n };\n\n SceneParserResult.setInput(ret, \"title\", this.title);\n SceneParserResult.setInput(ret, \"date\", this.date);\n SceneParserResult.setInput(ret, \"performer_ids\", this.performerIds);\n SceneParserResult.setInput(ret, \"studio_id\", this.studioId);\n SceneParserResult.setInput(ret, \"tag_ids\", this.tagIds);\n\n return ret;\n }\n};\n\ninterface IParserInput {\n pattern: string,\n ignoreWords: string[],\n whitespaceCharacters: string,\n capitalizeTitle: boolean,\n page: number,\n pageSize: number,\n findClicked: boolean\n}\n\ninterface IParserRecipe {\n pattern: string,\n ignoreWords: string[],\n whitespaceCharacters: string,\n capitalizeTitle: boolean,\n description: string\n}\n\nconst builtInRecipes = [\n {\n pattern: \"{title}\",\n ignoreWords: [],\n whitespaceCharacters: \"\",\n capitalizeTitle: false,\n description: \"Filename\"\n },\n {\n pattern: \"{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \"\",\n capitalizeTitle: false,\n description: \"Without extension\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.XXX.{}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{title}.XXX.{}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.{i}.{ext}\",\n ignoreWords: [\"cz\", \"fr\"],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"Foreign language\"\n }\n];\n\nexport const SceneFilenameParser: FunctionComponent = () => {\n const [parserResult, setParserResult] = useState([]);\n const [parserInput, setParserInput] = useState(initialParserInput());\n\n const [allTitleSet, setAllTitleSet] = useState(false);\n const [allDateSet, setAllDateSet] = useState(false);\n const [allPerformerSet, setAllPerformerSet] = useState(false);\n const [allTagSet, setAllTagSet] = useState(false);\n const [allStudioSet, setAllStudioSet] = useState(false);\n\n const [showFields, setShowFields] = useState>(initialShowFieldsState());\n \n const [totalItems, setTotalItems] = useState(0);\n\n // Network state\n const [isLoading, setIsLoading] = useState(false);\n\n const updateScenes = StashService.useScenesUpdate(getScenesUpdateData());\n\n function initialParserInput() {\n return {\n pattern: \"{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \"._\",\n capitalizeTitle: true,\n page: 1,\n pageSize: 20,\n findClicked: false\n };\n }\n\n function initialShowFieldsState() {\n return new Map([\n [\"Title\", true],\n [\"Date\", true],\n [\"Performers\", true],\n [\"Tags\", true],\n [\"Studio\", true]\n ]);\n }\n\n function getParserFilter() {\n return {\n q: parserInput.pattern,\n page: parserInput.page,\n per_page: parserInput.pageSize,\n sort: \"path\",\n direction: GQL.SortDirectionEnum.Asc,\n };\n }\n\n function getParserInput() {\n return {\n ignoreWords: parserInput.ignoreWords,\n whitespaceCharacters: parserInput.whitespaceCharacters,\n capitalizeTitle: parserInput.capitalizeTitle\n };\n }\n\n async function onFind() {\n setParserResult([]);\n\n setIsLoading(true);\n \n try {\n const response = await StashService.queryParseSceneFilenames(getParserFilter(), getParserInput());\n\n let result = response.data.parseSceneFilenames;\n if (!!result) {\n parseResults(result.results);\n setTotalItems(result.count);\n }\n } catch (err) {\n ErrorUtils.handle(err);\n }\n\n setIsLoading(false);\n }\n\n useEffect(() => {\n if(parserInput.findClicked) {\n onFind();\n }\n }, [parserInput]);\n\n function onPageSizeChanged(newSize : number) {\n var newInput = _.clone(parserInput);\n newInput.page = 1;\n newInput.pageSize = newSize;\n setParserInput(newInput);\n }\n\n function onPageChanged(newPage : number) {\n if (newPage !== parserInput.page) {\n var newInput = _.clone(parserInput);\n newInput.page = newPage;\n setParserInput(newInput);\n }\n }\n\n function onFindClicked(input : IParserInput) {\n input.page = 1;\n input.findClicked = true;\n setParserInput(input);\n setTotalItems(0);\n }\n\n function getScenesUpdateData() {\n return parserResult.filter((result) => result.isChanged()).map((result) => result.toSceneUpdateInput());\n }\n\n async function onApply() {\n setIsLoading(true);\n\n try {\n await updateScenes();\n ToastUtils.success(\"Updated scenes\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n\n setIsLoading(false);\n }\n\n function parseResults(results : GQL.ParseSceneFilenamesResults[]) {\n if (results) {\n var result = results.map((r) => {\n return new SceneParserResult(r);\n }).filter((r) => !!r) as SceneParserResult[];\n\n setParserResult(result);\n determineFieldsToHide();\n }\n }\n\n function determineFieldsToHide() {\n var pattern = parserInput.pattern;\n var titleSet = pattern.includes(\"{title}\");\n var dateSet = pattern.includes(\"{date}\") || \n pattern.includes(\"{dd}\") || // don't worry about other partial date fields since this should be implied\n ParserField.fullDateFields.some((f) => {\n return pattern.includes(\"{\" + f.field + \"}\");\n });\n var performerSet = pattern.includes(\"{performer}\");\n var tagSet = pattern.includes(\"{tag}\");\n var studioSet = pattern.includes(\"{studio}\");\n\n var showFieldsCopy = _.clone(showFields);\n showFieldsCopy.set(\"Title\", titleSet);\n showFieldsCopy.set(\"Date\", dateSet);\n showFieldsCopy.set(\"Performers\", performerSet);\n showFieldsCopy.set(\"Tags\", tagSet);\n showFieldsCopy.set(\"Studio\", studioSet);\n setShowFields(showFieldsCopy);\n }\n\n useEffect(() => {\n var newAllTitleSet = !parserResult.some((r) => {\n return !r.title.set;\n });\n var newAllDateSet = !parserResult.some((r) => {\n return !r.date.set;\n });\n var newAllPerformerSet = !parserResult.some((r) => {\n return !r.performerIds.set;\n });\n var newAllTagSet = !parserResult.some((r) => {\n return !r.tagIds.set;\n });\n var newAllStudioSet = !parserResult.some((r) => {\n return !r.studioId.set;\n });\n\n if (newAllTitleSet !== allTitleSet) {\n setAllTitleSet(newAllTitleSet);\n }\n if (newAllDateSet !== allDateSet) {\n setAllDateSet(newAllDateSet);\n }\n if (newAllPerformerSet !== allPerformerSet) {\n setAllTagSet(newAllPerformerSet);\n }\n if (newAllTagSet !== allTagSet) {\n setAllTagSet(newAllTagSet);\n }\n if (newAllStudioSet !== allStudioSet) {\n setAllStudioSet(newAllStudioSet);\n }\n }, [parserResult]);\n\n function onSelectAllTitleSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.title.set = selected;\n });\n\n setParserResult(newResult);\n setAllTitleSet(selected);\n }\n\n function onSelectAllDateSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.date.set = selected;\n });\n\n setParserResult(newResult);\n setAllDateSet(selected);\n }\n\n function onSelectAllPerformerSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.performerIds.set = selected;\n });\n\n setParserResult(newResult);\n setAllPerformerSet(selected);\n }\n\n function onSelectAllTagSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.tagIds.set = selected;\n });\n\n setParserResult(newResult);\n setAllTagSet(selected);\n }\n\n function onSelectAllStudioSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.studioId.set = selected;\n });\n\n setParserResult(newResult);\n setAllStudioSet(selected);\n }\n\n interface IShowFieldsTreeProps {\n showFields: Map\n onShowFieldsChanged: (fields : Map) => void\n }\n\n function ShowFieldsTree(props : IShowFieldsTreeProps) {\n const [displayFieldsExpanded, setDisplayFieldsExpanded] = useState();\n\n const treeState: ITreeNode[] = [\n {\n id: 0,\n hasCaret: true,\n label: \"Display fields\",\n childNodes: [\n {\n id: 1,\n label: \"Title\",\n },\n {\n id: 2,\n label: \"Date\",\n },\n {\n id: 3,\n label: \"Performers\",\n },\n {\n id: 4,\n label: \"Tags\",\n },\n {\n id: 5,\n label: \"Studio\",\n }\n ]\n }\n ];\n\n function setNodeState() {\n if (!!treeState[0].childNodes) {\n treeState[0].childNodes.forEach((n) => {\n n.icon = props.showFields.get(n.label as string) ? \"tick\" : \"cross\";\n });\n }\n\n treeState[0].isExpanded = displayFieldsExpanded;\n }\n\n setNodeState();\n\n function expandNode() {\n setDisplayFieldsExpanded(true);\n }\n\n function collapseNode() {\n setDisplayFieldsExpanded(false);\n }\n\n function handleClick(nodeData: ITreeNode) {\n var field = nodeData.label as string;\n var fieldsCopy = _.clone(props.showFields);\n fieldsCopy.set(field, !fieldsCopy.get(field));\n props.onShowFieldsChanged(fieldsCopy);\n }\n\n return (\n \n );\n }\n\n interface IParserInputProps {\n input: IParserInput,\n onFind: (input : IParserInput) => void\n }\n\n function ParserInput(props : IParserInputProps) {\n const [pattern, setPattern] = useState(props.input.pattern);\n const [ignoreWords, setIgnoreWords] = useState(props.input.ignoreWords.join(\" \"));\n const [whitespaceCharacters, setWhitespaceCharacters] = useState(props.input.whitespaceCharacters);\n const [capitalizeTitle, setCapitalizeTitle] = useState(props.input.capitalizeTitle);\n\n function onFind() {\n props.onFind({\n pattern: pattern,\n ignoreWords: ignoreWords.split(\" \"),\n whitespaceCharacters: whitespaceCharacters,\n capitalizeTitle: capitalizeTitle,\n page: 1,\n pageSize: props.input.pageSize,\n findClicked: props.input.findClicked\n });\n }\n\n const ParserRecipeSelect = Select.ofType();\n\n const renderParserRecipe: ItemRenderer = (input, { handleClick, modifiers }) => {\n if (!modifiers.matchesPredicate) {\n return null;\n }\n return (\n \n );\n };\n\n const parserRecipePredicate: ItemPredicate = (query, item) => {\n return item.pattern.includes(query);\n };\n\n function setParserRecipe(recipe: IParserRecipe) {\n setPattern(recipe.pattern);\n setIgnoreWords(recipe.ignoreWords.join(\" \"));\n setWhitespaceCharacters(recipe.whitespaceCharacters);\n setCapitalizeTitle(recipe.capitalizeTitle);\n }\n \n const ParserFieldSelect = Select.ofType();\n\n const renderParserField: ItemRenderer = (field, { handleClick, modifiers }) => {\n if (!modifiers.matchesPredicate) {\n return null;\n }\n return (\n \n );\n };\n\n const parserFieldPredicate: ItemPredicate = (query, item) => {\n return item.field.includes(query);\n };\n\n const validFields = [new ParserField(\"\", \"Wildcard\")].concat(ParserField.validFields);\n \n function addParserField(field: ParserField) {\n setPattern(pattern + field.getFieldPattern());\n }\n\n const parserFieldSelect = (\n addParserField(item)}\n itemRenderer={renderParserField}\n itemPredicate={parserFieldPredicate}\n >\n \n
    \n \n )\n }\n\n return (\n \n

    Scene Filename Parser

    \n onFindClicked(input)}\n />\n\n {isLoading ? : undefined}\n {renderTable()}\n
    \n );\n};\n \n","/home/peroo/stash/ui/v2/src/components/scenes/SceneList.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneListTable.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/SceneMarkerList.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/ScenePlayer/ScenePlayer.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx",["453","454","455","456","457","458"],"import axios from \"axios\";\nimport React, { CSSProperties, FunctionComponent, RefObject, useEffect, useRef, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { TextUtils } from \"../../../utils/text\";\nimport \"./ScenePlayerScrubber.scss\";\n\ninterface IScenePlayerScrubberProps {\n scene: GQL.SceneDataFragment;\n position: number;\n onSeek: (seconds: number) => void;\n onScrolled: () => void;\n}\n\ninterface ISceneSpriteItem {\n start: number;\n end: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport const ScenePlayerScrubber: FunctionComponent = (props: IScenePlayerScrubberProps) => {\n const contentEl = useRef(null);\n const positionIndicatorEl = useRef(null);\n const scrubberSliderEl = useRef(null);\n const mouseDown = useRef(false);\n const lastMouseEvent = useRef(null);\n const startMouseEvent = useRef(null);\n const velocity = useRef(0);\n\n const _position = useRef(0);\n function getPostion() { return _position.current; }\n function setPosition(newPostion: number, shouldEmit: boolean = true) {\n if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return; }\n if (shouldEmit) { props.onScrolled(); }\n\n const midpointOffset = scrubberSliderEl.current.clientWidth / 2;\n\n const bounds = getBounds() * -1;\n if (newPostion > midpointOffset) {\n _position.current = midpointOffset;\n } else if (newPostion < bounds - midpointOffset) {\n _position.current = bounds - midpointOffset;\n } else {\n _position.current = newPostion;\n }\n\n scrubberSliderEl.current.style.transform = `translateX(${_position.current}px)`;\n\n const indicatorPosition = (\n (newPostion - midpointOffset) / (bounds - (midpointOffset * 2)) * scrubberSliderEl.current.clientWidth\n );\n positionIndicatorEl.current.style.transform = `translateX(${indicatorPosition}px)`;\n }\n\n const [spriteItems, setSpriteItems] = useState([]);\n const [delayedRender, setDelayedRender] = useState(false);\n\n useEffect(() => {\n if (!scrubberSliderEl.current) { return; }\n scrubberSliderEl.current.style.transform = `translateX(${scrubberSliderEl.current.clientWidth / 2}px)`;\n }, [scrubberSliderEl]);\n\n useEffect(() => {\n fetchSpriteInfo();\n }, [props.scene]);\n\n useEffect(() => {\n if (!scrubberSliderEl.current) { return; }\n const duration = Number(props.scene.file.duration);\n const percentage = props.position / duration;\n const position = (\n (scrubberSliderEl.current.scrollWidth * percentage) - (scrubberSliderEl.current.clientWidth / 2)\n ) * -1;\n setPosition(position, false);\n }, [props.position]);\n\n useEffect(() => {\n window.addEventListener(\"mouseup\", onMouseUp, false);\n return () => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n });\n\n useEffect(() => {\n if (!contentEl.current) { return; }\n contentEl.current.addEventListener(\"mousedown\", onMouseDown, false);\n return () => {\n if (!contentEl.current) { return; }\n contentEl.current.removeEventListener(\"mousedown\", onMouseDown);\n };\n });\n\n useEffect(() => {\n if (!contentEl.current) { return; }\n contentEl.current.addEventListener(\"mousemove\", onMouseMove, false);\n return () => {\n if (!contentEl.current) { return; }\n contentEl.current.removeEventListener(\"mousemove\", onMouseMove);\n };\n });\n\n function onMouseUp(this: Window, event: MouseEvent) {\n if (!startMouseEvent.current || !scrubberSliderEl.current) { return; }\n mouseDown.current = false;\n const delta = Math.abs(event.clientX - startMouseEvent.current.clientX);\n if (delta < 1 && event.target instanceof HTMLDivElement) {\n const target: HTMLDivElement = event.target;\n let seekSeconds: number | undefined;\n\n const spriteIdString = target.getAttribute(\"data-sprite-item-id\");\n if (spriteIdString != null) {\n const spritePercentage = event.offsetX / target.clientWidth;\n const offset = target.offsetLeft + (target.clientWidth * spritePercentage);\n const percentage = offset / scrubberSliderEl.current.scrollWidth;\n seekSeconds = percentage * (props.scene.file.duration || 0);\n }\n\n const markerIdString = target.getAttribute(\"data-marker-id\");\n if (markerIdString != null) {\n const marker = props.scene.scene_markers[Number(markerIdString)];\n seekSeconds = marker.seconds;\n }\n\n if (!!seekSeconds) { props.onSeek(seekSeconds); }\n } else if (Math.abs(velocity.current) > 25) {\n const newPosition = getPostion() + (velocity.current * 10);\n setPosition(newPosition);\n velocity.current = 0;\n }\n }\n\n function onMouseDown(this: HTMLDivElement, event: MouseEvent) {\n event.preventDefault();\n mouseDown.current = true;\n lastMouseEvent.current = event;\n startMouseEvent.current = event;\n velocity.current = 0;\n }\n\n function onMouseMove(this: HTMLDivElement, event: MouseEvent) {\n if (!mouseDown.current) { return; }\n\n // negative dragging right (past), positive left (future)\n const delta = event.clientX - lastMouseEvent.current.clientX;\n\n const movement = event.movementX;\n velocity.current = movement;\n\n const newPostion = getPostion() + delta;\n setPosition(newPostion);\n lastMouseEvent.current = event;\n }\n\n function getBounds(): number {\n if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return 0; }\n return scrubberSliderEl.current.scrollWidth - scrubberSliderEl.current.clientWidth;\n }\n\n function goBack() {\n if (!scrubberSliderEl.current) { return; }\n const newPosition = getPostion() + scrubberSliderEl.current.clientWidth;\n setPosition(newPosition);\n }\n\n function goForward() {\n if (!scrubberSliderEl.current) { return; }\n const newPosition = getPostion() - scrubberSliderEl.current.clientWidth;\n setPosition(newPosition);\n }\n\n async function fetchSpriteInfo() {\n if (!props.scene || !props.scene.paths.vtt) { return; }\n\n const response = await axios.get(props.scene.paths.vtt, {responseType: \"text\"});\n if (response.status !== 200) {\n console.log(response.statusText);\n }\n\n // TODO: This is gnarly\n const lines = response.data.split(\"\\n\");\n if (lines.shift() !== \"WEBVTT\") { return; }\n if (lines.shift() !== \"\") { return; }\n let item: ISceneSpriteItem = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0};\n const newSpriteItems: ISceneSpriteItem[] = [];\n while (lines.length) {\n const line = lines.shift();\n if (line === undefined) { continue; }\n\n if (line.includes(\"#\") && line.includes(\"=\") && line.includes(\",\")) {\n const size = line.split(\"#\")[1].split(\"=\")[1].split(\",\");\n item.x = Number(size[0]);\n item.y = Number(size[1]);\n item.w = Number(size[2]);\n item.h = Number(size[3]);\n\n newSpriteItems.push(item);\n item = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0};\n } else if (line.includes(\" --> \")) {\n const times = line.split(\" --> \");\n\n const start = times[0].split(\":\");\n item.start = (+start[0]) * 60 * 60 + (+start[1]) * 60 + (+start[2]);\n\n const end = times[1].split(\":\");\n item.end = (+end[0]) * 60 * 60 + (+end[1]) * 60 + (+end[2]);\n }\n }\n\n setSpriteItems(newSpriteItems);\n // TODO: Very hacky. Need to wait for the scroll width to update from the image loading.\n setTimeout(() => {\n setDelayedRender(true);\n }, 100);\n }\n\n function renderTags() {\n function getTagStyle(i: number): CSSProperties {\n if (!scrubberSliderEl.current ||\n spriteItems.length === 0 ||\n getBounds() === 0) { return {}; }\n\n const tags = window.document.getElementsByClassName(\"scrubber-tag\");\n if (tags.length === 0) { return {}; }\n\n let tag: any;\n for (let index = 0; index < tags.length; index++) {\n tag = tags.item(index) as any;\n const id = tag.getAttribute(\"data-marker-id\");\n if (id === i.toString()) {\n break;\n }\n }\n\n const marker = props.scene.scene_markers[i];\n const duration = Number(props.scene.file.duration);\n const percentage = marker.seconds / duration;\n\n const left = (scrubberSliderEl.current.scrollWidth * percentage) - (tag.clientWidth / 2);\n return {\n left: `${left}px`,\n height: 20,\n };\n }\n\n return props.scene.scene_markers.map((marker, index) => {\n const dataAttrs = {\n \"data-marker-id\": index,\n };\n return (\n \n {marker.title}\n
    \n );\n });\n }\n\n function renderSprites() {\n function getStyleForSprite(index: number): CSSProperties {\n if (!props.scene.paths.vtt) { return {}; }\n const sprite = spriteItems[index];\n const left = sprite.w * index;\n const path = props.scene.paths.vtt.replace(\"_thumbs.vtt\", \"_sprite.jpg\"); // TODO: Gnarly\n return {\n width: `${sprite.w}px`,\n height: `${sprite.h}px`,\n margin: \"0px auto\",\n backgroundPosition: -sprite.x + \"px \" + -sprite.y + \"px\",\n backgroundImage: `url(${path})`,\n left: `${left}px`,\n };\n }\n\n return spriteItems.map((spriteItem, index) => {\n const dataAttrs = {\n \"data-sprite-item-id\": index,\n };\n return (\n \n {TextUtils.secondsToTimestamp(spriteItem.start)} - {TextUtils.secondsToTimestamp(spriteItem.end)}\n \n );\n });\n }\n\n return (\n
    \n goBack()}><\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n {renderTags()}\n
    \n {renderSprites()}\n
    \n
    \n
    \n goForward()}>>\n
    \n );\n};\n","/home/peroo/stash/ui/v2/src/components/scenes/SceneSelectedOptions.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/helpers.tsx",[],"/home/peroo/stash/ui/v2/src/components/scenes/scenes.tsx",[],"/home/peroo/stash/ui/v2/src/components/select/FilterMultiSelect.tsx",["459"],"import * as React from \"react\";\n\nimport { MenuItem } from \"@blueprintjs/core\";\nimport { IMultiSelectProps, ItemPredicate, ItemRenderer, MultiSelect } from \"@blueprintjs/select\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { HTMLInputProps } from \"../../models\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { ToastUtils } from \"../../utils/toasts\";\n\nconst InternalPerformerMultiSelect = MultiSelect.ofType();\nconst InternalTagMultiSelect = MultiSelect.ofType();\nconst InternalStudioMultiSelect = MultiSelect.ofType();\n\ntype ValidTypes =\n GQL.AllPerformersForFilterAllPerformers |\n GQL.AllTagsForFilterAllTags |\n GQL.AllStudiosForFilterAllStudios;\n\ninterface IProps extends HTMLInputProps, Partial> {\n type: \"performers\" | \"studios\" | \"tags\";\n initialIds?: string[];\n onUpdate: (items: ValidTypes[]) => void;\n}\n\nexport const FilterMultiSelect: React.FunctionComponent = (props: IProps) => {\n let MultiSelectImpl = getMultiSelectImpl();\n let InternalMultiSelect = MultiSelectImpl.getInternalMultiSelect();\n const data = MultiSelectImpl.getData();\n \n const [selectedItems, setSelectedItems] = React.useState([]);\n const [items, setItems] = React.useState([]);\n const [newTagName, setNewTagName] = React.useState(\"\");\n const createTag = StashService.useTagCreate(getTagInput() as GQL.TagCreateInput);\n\n React.useEffect(() => {\n if (!!data) {\n MultiSelectImpl.translateData();\n }\n }, [data]);\n \n function getTagInput() {\n const tagInput: Partial = { name: newTagName };\n return tagInput;\n }\n\n async function onCreateNewObject(item: ValidTypes) {\n var created : any;\n if (props.type === \"tags\") {\n try {\n created = await createTag();\n \n items.push(created.data.tagCreate);\n setItems(items.slice());\n addSelectedItem(created.data.tagCreate);\n \n ToastUtils.success(\"Created tag\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n }\n\n function createNewTag(query : string) {\n setNewTagName(query);\n return {\n name : query\n };\n }\n\n function createNewRenderer(query: string, active: boolean, handleClick: React.MouseEventHandler) {\n // if tag already exists with that name, then don't return anything\n if (items.find((item) => {\n return item.name === query;\n })) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n React.useEffect(() => {\n if (!!props.initialIds && !!items) {\n const initialItems = items.filter((item) => props.initialIds!.includes(item.id));\n setSelectedItems(initialItems);\n }\n }, [props.initialIds, items]);\n\n function getMultiSelectImpl() {\n let getInternalMultiSelect: () => new (props: IMultiSelectProps) => MultiSelect;\n let getData: () => GQL.AllPerformersForFilterQuery | GQL.AllStudiosForFilterQuery | GQL.AllTagsForFilterQuery | undefined;\n let translateData: () => void;\n let createNewObject: ((query : string) => void) | undefined = undefined; \n\n switch (props.type) {\n case \"performers\": {\n getInternalMultiSelect = () => { return InternalPerformerMultiSelect; };\n getData = () => { const { data } = StashService.useAllPerformersForFilter(); return data; }\n translateData = () => { let perfData = data as GQL.AllPerformersForFilterQuery; setItems(!!perfData && !!perfData.allPerformers ? perfData.allPerformers : []); };\n break;\n }\n case \"studios\": {\n getInternalMultiSelect = () => { return InternalStudioMultiSelect; };\n getData = () => { const { data } = StashService.useAllStudiosForFilter(); return data; }\n translateData = () => { let studioData = data as GQL.AllStudiosForFilterQuery; setItems(!!studioData && !!studioData.allStudios ? studioData.allStudios : []); };\n break;\n }\n case \"tags\": {\n getInternalMultiSelect = () => { return InternalTagMultiSelect; };\n getData = () => { const { data } = StashService.useAllTagsForFilter(); return data; }\n translateData = () => { let tagData = data as GQL.AllTagsForFilterQuery; setItems(!!tagData && !!tagData.allTags ? tagData.allTags : []); };\n createNewObject = createNewTag;\n break;\n }\n default: {\n throw Error(\"Unhandled case in FilterMultiSelect\");\n }\n }\n\n return {\n getInternalMultiSelect: getInternalMultiSelect,\n getData: getData,\n translateData: translateData,\n createNewObject: createNewObject\n };\n }\n\n const renderItem: ItemRenderer = (item, itemProps) => {\n if (!itemProps.modifiers.matchesPredicate) { return null; }\n return (\n \n );\n };\n\n const filter: ItemPredicate = (query, item) => {\n if (selectedItems.includes(item)) { return false; }\n return item.name!.toLowerCase().indexOf(query.toLowerCase()) >= 0;\n };\n\n function addSelectedItem(item: ValidTypes) {\n selectedItems.push(item);\n setSelectedItems(selectedItems);\n props.onUpdate(selectedItems);\n }\n\n function onItemSelect(item: ValidTypes) {\n if (item.id === undefined) {\n // create the new item, if applicable\n onCreateNewObject(item);\n } else {\n addSelectedItem(item);\n }\n }\n\n function onItemRemove(value: string, index: number) {\n const newSelectedItems = selectedItems.filter((_, i) => i !== index);\n setSelectedItems(newSelectedItems);\n props.onUpdate(newSelectedItems);\n }\n\n return (\n tag.name}\n tagInputProps={{ onRemove: onItemRemove }}\n onItemSelect={onItemSelect}\n resetOnSelect={true}\n popoverProps={{position: \"bottom\"}}\n createNewItemFromQuery={MultiSelectImpl.createNewObject}\n createNewItemRenderer={createNewRenderer}\n {...props}\n />\n );\n};\n","/home/peroo/stash/ui/v2/src/components/select/FilterSelect.tsx",[],"/home/peroo/stash/ui/v2/src/components/select/MarkerTitleSuggest.tsx",[],"/home/peroo/stash/ui/v2/src/components/select/ScrapePerformerSuggest.tsx",[],"/home/peroo/stash/ui/v2/src/components/select/ValidGalleriesSelect.tsx",[],"/home/peroo/stash/ui/v2/src/core/StashService.ts",[],"/home/peroo/stash/ui/v2/src/core/generated-graphql.tsx",[],"/home/peroo/stash/ui/v2/src/hooks/ListHook.tsx",["460","461","462","463"],"import { Spinner } from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport queryString from \"query-string\";\nimport React, { useEffect, useState } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { ListFilter } from \"../components/list/ListFilter\";\nimport { Pagination } from \"../components/list/Pagination\";\nimport { StashService } from \"../core/StashService\";\nimport { IBaseProps } from \"../models\";\nimport { Criterion } from \"../models/list-filter/criteria/criterion\";\nimport { ListFilterModel } from \"../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../models/list-filter/types\";\n\nexport interface IListHookData {\n filter: ListFilterModel;\n template: JSX.Element;\n options: IListHookOptions;\n onSelectChange: (id: string, selected : boolean, shiftKey: boolean) => void;\n}\n\nexport interface IListHookOptions {\n filterMode: FilterMode;\n props: IBaseProps;\n zoomable?: boolean\n renderContent: (result: QueryHookResult, filter: ListFilterModel, selectedIds: Set, zoomIndex: number) => JSX.Element | undefined;\n renderSelectedOptions?: (result: QueryHookResult, selectedIds: Set) => JSX.Element | undefined;\n}\n\nexport class ListHook {\n public static useList(options: IListHookOptions): IListHookData {\n const [filter, setFilter] = useState(new ListFilterModel(options.filterMode));\n const [selectedIds, setSelectedIds] = useState>(new Set());\n const [lastClickedId, setLastClickedId] = useState(undefined);\n const [totalCount, setTotalCount] = useState(0);\n const [zoomIndex, setZoomIndex] = useState(1);\n\n // Update the filter when the query parameters change\n useEffect(() => {\n const queryParams = queryString.parse(options.props.location.search);\n const newFilter = _.cloneDeep(filter);\n newFilter.configureFromQueryParameters(queryParams);\n setFilter(newFilter);\n\n // TODO: Need this side effect to update the query params properly\n filter.configureFromQueryParameters(queryParams);\n }, [options.props.location.search]);\n\n let result: QueryHookResult;\n\n let getData: (filter : ListFilterModel) => QueryHookResult;\n let getItems: () => any[];\n let getCount: () => number;\n\n switch (options.filterMode) {\n case FilterMode.Scenes: {\n getData = (filter : ListFilterModel) => { return StashService.useFindScenes(filter); }\n getItems = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.scenes : []; }\n getCount = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.count : 0; }\n break;\n }\n case FilterMode.SceneMarkers: {\n getData = (filter : ListFilterModel) => { return StashService.useFindSceneMarkers(filter); }\n getItems = () => { return !!result.data && !!result.data.findSceneMarkers ? result.data.findSceneMarkers.scene_markers : []; }\n getCount = () => { return !!result.data && !!result.data.findSceneMarkers ? result.data.findSceneMarkers.count : 0; }\n break;\n }\n case FilterMode.Galleries: {\n getData = (filter : ListFilterModel) => { return StashService.useFindGalleries(filter); }\n getItems = () => { return !!result.data && !!result.data.findGalleries ? result.data.findGalleries.galleries : []; }\n getCount = () => { return !!result.data && !!result.data.findGalleries ? result.data.findGalleries.count : 0; }\n break;\n }\n case FilterMode.Studios: {\n getData = (filter : ListFilterModel) => { return StashService.useFindStudios(filter); }\n getItems = () => { return !!result.data && !!result.data.findStudios ? result.data.findStudios.studios : []; }\n getCount = () => { return !!result.data && !!result.data.findStudios ? result.data.findStudios.count : 0; }\n break;\n }\n case FilterMode.Performers: {\n getData = (filter : ListFilterModel) => { return StashService.useFindPerformers(filter); }\n getItems = () => { return !!result.data && !!result.data.findPerformers ? result.data.findPerformers.performers : []; }\n getCount = () => { return !!result.data && !!result.data.findPerformers ? result.data.findPerformers.count : 0; }\n break;\n }\n default: {\n console.error(\"REMOVE DEFAULT IN LIST HOOK\");\n getData = (filter : ListFilterModel) => { return StashService.useFindScenes(filter); }\n getItems = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.scenes : []; }\n getCount = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.count : 0; }\n break;\n }\n }\n\n result = getData(filter);\n\n useEffect(() => {\n setTotalCount(getCount());\n\n // select none when data changes\n onSelectNone();\n setLastClickedId(undefined);\n }, [result.data])\n\n // Update the query parameters when the data changes\n useEffect(() => {\n const location = Object.assign({}, options.props.history.location);\n location.search = filter.makeQueryParameters();\n options.props.history.replace(location);\n }, [result.data, filter.displayMode]);\n\n // Update the total count\n useEffect(() => {\n const newFilter = _.cloneDeep(filter);\n newFilter.totalCount = totalCount;\n setFilter(newFilter);\n }, [totalCount]);\n\n function onChangePageSize(pageSize: number) {\n const newFilter = _.cloneDeep(filter);\n newFilter.itemsPerPage = pageSize;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeQuery(query: string) {\n const newFilter = _.cloneDeep(filter);\n newFilter.searchTerm = query;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeSortDirection(sortDirection: \"asc\" | \"desc\") {\n const newFilter = _.cloneDeep(filter);\n newFilter.sortDirection = sortDirection;\n setFilter(newFilter);\n }\n\n function onChangeSortBy(sortBy: string) {\n const newFilter = _.cloneDeep(filter);\n newFilter.sortBy = sortBy;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeDisplayMode(displayMode: DisplayMode) {\n const newFilter = _.cloneDeep(filter);\n newFilter.displayMode = displayMode;\n setFilter(newFilter);\n }\n\n function onAddCriterion(criterion: Criterion, oldId?: string) {\n const newFilter = _.cloneDeep(filter);\n\n // Find if we are editing an existing criteria, then modify that. Or create a new one.\n const existingIndex = newFilter.criteria.findIndex((c) => {\n // If we modified an existing criterion, then look for the old id.\n const id = !!oldId ? oldId : criterion.getId();\n return c.getId() === id;\n });\n if (existingIndex === -1) {\n newFilter.criteria.push(criterion);\n } else {\n newFilter.criteria[existingIndex] = criterion;\n }\n\n // Remove duplicate modifiers\n newFilter.criteria = newFilter.criteria.filter((obj, pos, arr) => {\n return arr.map((mapObj: any) => mapObj.getId()).indexOf(obj.getId()) === pos;\n });\n\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onRemoveCriterion(removedCriterion: Criterion) {\n const newFilter = _.cloneDeep(filter);\n newFilter.criteria = newFilter.criteria.filter((criterion) => criterion.getId() !== removedCriterion.getId());\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangePage(page: number) {\n const newFilter = _.cloneDeep(filter);\n newFilter.currentPage = page;\n setFilter(newFilter);\n }\n\n function onSelectChange(id: string, selected : boolean, shiftKey: boolean) {\n if (shiftKey) {\n multiSelect(id, selected);\n } else {\n singleSelect(id, selected);\n }\n }\n\n function singleSelect(id: string, selected: boolean) {\n setLastClickedId(id);\n \n const newSelectedIds = _.clone(selectedIds);\n if (selected) {\n newSelectedIds.add(id);\n } else {\n newSelectedIds.delete(id);\n }\n\n setSelectedIds(newSelectedIds);\n }\n\n function multiSelect(id: string, selected : boolean) {\n let startIndex = 0;\n let thisIndex = -1;\n \n if (!!lastClickedId) {\n startIndex = getItems().findIndex((item) => {\n return item.id === lastClickedId;\n });\n }\n\n thisIndex = getItems().findIndex((item) => {\n return item.id === id;\n });\n\n selectRange(startIndex, thisIndex);\n }\n \n function selectRange(startIndex : number, endIndex : number) {\n if (startIndex > endIndex) {\n let tmp = startIndex;\n startIndex = endIndex;\n endIndex = tmp;\n }\n \n const subset = getItems().slice(startIndex, endIndex + 1);\n const newSelectedIds : Set = new Set();\n\n subset.forEach((item) => {\n newSelectedIds.add(item.id);\n });\n\n setSelectedIds(newSelectedIds);\n }\n\n function onSelectAll() {\n const newSelectedIds : Set = new Set();\n getItems().forEach((item) => {\n newSelectedIds.add(item.id);\n });\n\n setSelectedIds(newSelectedIds);\n setLastClickedId(undefined);\n }\n\n function onSelectNone() {\n const newSelectedIds : Set = new Set();\n setSelectedIds(newSelectedIds);\n setLastClickedId(undefined);\n }\n\n function onChangeZoom(newZoomIndex : number) {\n setZoomIndex(newZoomIndex);\n }\n\n const template = (\n
    \n \n {options.renderSelectedOptions && selectedIds.size > 0 ? options.renderSelectedOptions(result, selectedIds) : undefined}\n {result.loading ? : undefined}\n {result.error ?

    {result.error.message}

    : undefined}\n {options.renderContent(result, filter, selectedIds, zoomIndex)}\n \n
    \n );\n\n return { filter, template, options, onSelectChange };\n }\n}\n","/home/peroo/stash/ui/v2/src/hooks/LocalForage.ts",[],"/home/peroo/stash/ui/v2/src/hooks/VideoHover.ts",[],"/home/peroo/stash/ui/v2/src/index.tsx",[],"/home/peroo/stash/ui/v2/src/models/base-props.ts",[],"/home/peroo/stash/ui/v2/src/models/index.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/criterion.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/favorite.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/has-markers.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/is-missing.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/none.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/performers.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/rating.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/resolution.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/studios.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/tags.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/criteria/utils.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/filter.ts",[],"/home/peroo/stash/ui/v2/src/models/list-filter/types.ts",[],"/home/peroo/stash/ui/v2/src/models/react-images.d.ts",[],"/home/peroo/stash/ui/v2/src/models/react-jw-player.d.ts",[],"/home/peroo/stash/ui/v2/src/models/types.ts",[],"/home/peroo/stash/ui/v2/src/react-app-env.d.ts",[],"/home/peroo/stash/ui/v2/src/serviceWorker.ts",[],"/home/peroo/stash/ui/v2/src/utils/color.ts",[],"/home/peroo/stash/ui/v2/src/utils/errors.ts",[],"/home/peroo/stash/ui/v2/src/utils/navigation.ts",[],"/home/peroo/stash/ui/v2/src/utils/table.tsx",[],"/home/peroo/stash/ui/v2/src/utils/text.ts",[],"/home/peroo/stash/ui/v2/src/utils/toasts.ts",[],"/home/peroo/stash/ui/v2/src/utils/zoom.ts",[],{"ruleId":"464","severity":1,"message":"465","line":1,"column":36,"nodeType":"466","endLine":1,"endColumn":45},{"ruleId":"464","severity":1,"message":"467","line":4,"column":8,"nodeType":"466","endLine":4,"endColumn":9},{"ruleId":"468","severity":1,"message":"469","line":23,"column":6,"nodeType":"470","endLine":23,"endColumn":12,"fix":"471"},{"ruleId":"464","severity":1,"message":"467","line":2,"column":8,"nodeType":"466","endLine":2,"endColumn":9},{"ruleId":"472","severity":1,"message":"473","line":39,"column":49,"nodeType":"474","endLine":39,"endColumn":100},{"ruleId":"464","severity":1,"message":"467","line":1,"column":8,"nodeType":"466","endLine":1,"endColumn":9},{"ruleId":"468","severity":1,"message":"475","line":26,"column":6,"nodeType":"470","endLine":26,"endColumn":13,"fix":"476"},{"ruleId":"464","severity":1,"message":"477","line":2,"column":3,"nodeType":"466","endLine":2,"endColumn":5},{"ruleId":"464","severity":1,"message":"478","line":4,"column":3,"nodeType":"466","endLine":4,"endColumn":5},{"ruleId":"464","severity":1,"message":"479","line":7,"column":3,"nodeType":"466","endLine":7,"endColumn":6},{"ruleId":"464","severity":1,"message":"480","line":10,"column":13,"nodeType":"466","endLine":10,"endColumn":16},{"ruleId":"464","severity":1,"message":"481","line":11,"column":10,"nodeType":"466","endLine":11,"endColumn":19},{"ruleId":"464","severity":1,"message":"477","line":5,"column":3,"nodeType":"466","endLine":5,"endColumn":5},{"ruleId":"464","severity":1,"message":"478","line":7,"column":3,"nodeType":"466","endLine":7,"endColumn":5},{"ruleId":"464","severity":1,"message":"479","line":10,"column":3,"nodeType":"466","endLine":10,"endColumn":6},{"ruleId":"468","severity":1,"message":"482","line":69,"column":6,"nodeType":"470","endLine":69,"endColumn":12,"fix":"483"},{"ruleId":"464","severity":1,"message":"467","line":11,"column":8,"nodeType":"466","endLine":11,"endColumn":9},{"ruleId":"468","severity":1,"message":"484","line":51,"column":6,"nodeType":"470","endLine":51,"endColumn":19,"fix":"485"},{"ruleId":"468","severity":1,"message":"486","line":92,"column":6,"nodeType":"470","endLine":92,"endColumn":12,"fix":"487"},{"ruleId":"468","severity":1,"message":"488","line":101,"column":6,"nodeType":"470","endLine":101,"endColumn":20,"fix":"489"},{"ruleId":"468","severity":1,"message":"490","line":117,"column":6,"nodeType":"470","endLine":117,"endColumn":16,"fix":"491"},{"ruleId":"492","severity":1,"message":"493","line":158,"column":18,"nodeType":"494","messageId":"495","endLine":158,"endColumn":20},{"ruleId":"464","severity":1,"message":"496","line":8,"column":3,"nodeType":"466","endLine":8,"endColumn":15},{"ruleId":"464","severity":1,"message":"467","line":11,"column":8,"nodeType":"466","endLine":11,"endColumn":9},{"ruleId":"464","severity":1,"message":"497","line":2,"column":43,"nodeType":"466","endLine":2,"endColumn":59},{"ruleId":"492","severity":1,"message":"493","line":49,"column":21,"nodeType":"494","messageId":"495","endLine":49,"endColumn":23},{"ruleId":"464","severity":1,"message":"467","line":9,"column":8,"nodeType":"466","endLine":9,"endColumn":9},{"ruleId":"468","severity":1,"message":"482","line":32,"column":6,"nodeType":"470","endLine":32,"endColumn":12,"fix":"498"},{"ruleId":"464","severity":1,"message":"467","line":5,"column":8,"nodeType":"466","endLine":5,"endColumn":9},{"ruleId":"464","severity":1,"message":"477","line":1,"column":10,"nodeType":"466","endLine":1,"endColumn":12},{"ruleId":"464","severity":1,"message":"499","line":2,"column":3,"nodeType":"466","endLine":2,"endColumn":9},{"ruleId":"464","severity":1,"message":"500","line":3,"column":3,"nodeType":"466","endLine":3,"endColumn":10},{"ruleId":"464","severity":1,"message":"501","line":4,"column":3,"nodeType":"466","endLine":4,"endColumn":9},{"ruleId":"464","severity":1,"message":"502","line":6,"column":3,"nodeType":"466","endLine":6,"endColumn":13},{"ruleId":"464","severity":1,"message":"467","line":10,"column":8,"nodeType":"466","endLine":10,"endColumn":9},{"ruleId":"468","severity":1,"message":"469","line":54,"column":6,"nodeType":"470","endLine":54,"endColumn":12,"fix":"503"},{"ruleId":"468","severity":1,"message":"504","line":63,"column":6,"nodeType":"470","endLine":63,"endColumn":14,"fix":"505"},{"ruleId":"492","severity":1,"message":"493","line":66,"column":38,"nodeType":"494","messageId":"495","endLine":66,"endColumn":40},{"ruleId":"464","severity":1,"message":"506","line":136,"column":13,"nodeType":"466","endLine":136,"endColumn":19},{"ruleId":"472","severity":1,"message":"473","line":162,"column":11,"nodeType":"474","endLine":162,"endColumn":56},{"ruleId":"464","severity":1,"message":"467","line":1,"column":8,"nodeType":"466","endLine":1,"endColumn":9},{"ruleId":"464","severity":1,"message":"507","line":1,"column":42,"nodeType":"466","endLine":1,"endColumn":54},{"ruleId":"464","severity":1,"message":"508","line":1,"column":67,"nodeType":"466","endLine":1,"endColumn":76},{"ruleId":"464","severity":1,"message":"479","line":1,"column":99,"nodeType":"466","endLine":1,"endColumn":102},{"ruleId":"464","severity":1,"message":"467","line":2,"column":8,"nodeType":"466","endLine":2,"endColumn":9},{"ruleId":"464","severity":1,"message":"509","line":4,"column":10,"nodeType":"466","endLine":4,"endColumn":25},{"ruleId":"464","severity":1,"message":"510","line":6,"column":10,"nodeType":"466","endLine":6,"endColumn":28},{"ruleId":"464","severity":1,"message":"511","line":6,"column":30,"nodeType":"466","endLine":6,"endColumn":52},{"ruleId":"464","severity":1,"message":"512","line":9,"column":10,"nodeType":"466","endLine":9,"endColumn":18},{"ruleId":"464","severity":1,"message":"513","line":11,"column":10,"nodeType":"466","endLine":11,"endColumn":25},{"ruleId":"464","severity":1,"message":"514","line":12,"column":10,"nodeType":"466","endLine":12,"endColumn":21},{"ruleId":"464","severity":1,"message":"515","line":12,"column":23,"nodeType":"466","endLine":12,"endColumn":33},{"ruleId":"468","severity":1,"message":"469","line":39,"column":6,"nodeType":"470","endLine":39,"endColumn":12,"fix":"516"},{"ruleId":"472","severity":1,"message":"473","line":119,"column":11,"nodeType":"474","endLine":119,"endColumn":88},{"ruleId":"464","severity":1,"message":"467","line":1,"column":8,"nodeType":"466","endLine":1,"endColumn":9},{"ruleId":"464","severity":1,"message":"496","line":2,"column":3,"nodeType":"466","endLine":2,"endColumn":15},{"ruleId":"464","severity":1,"message":"517","line":5,"column":3,"nodeType":"466","endLine":5,"endColumn":15},{"ruleId":"464","severity":1,"message":"518","line":16,"column":63,"nodeType":"466","endLine":16,"endColumn":69},{"ruleId":"468","severity":1,"message":"519","line":45,"column":22,"nodeType":"520","endLine":47,"endColumn":12},{"ruleId":"468","severity":1,"message":"469","line":89,"column":6,"nodeType":"470","endLine":89,"endColumn":12,"fix":"521"},{"ruleId":"468","severity":1,"message":"504","line":98,"column":6,"nodeType":"470","endLine":98,"endColumn":17,"fix":"522"},{"ruleId":"468","severity":1,"message":"469","line":32,"column":6,"nodeType":"470","endLine":32,"endColumn":12,"fix":"523"},{"ruleId":"468","severity":1,"message":"524","line":34,"column":3,"nodeType":"466","endLine":34,"endColumn":12,"fix":"525"},{"ruleId":"468","severity":1,"message":"526","line":359,"column":6,"nodeType":"470","endLine":359,"endColumn":19,"fix":"527"},{"ruleId":"468","severity":1,"message":"528","line":464,"column":6,"nodeType":"470","endLine":464,"endColumn":20,"fix":"529"},{"ruleId":"464","severity":1,"message":"530","line":2,"column":51,"nodeType":"466","endLine":2,"endColumn":60},{"ruleId":"464","severity":1,"message":"531","line":58,"column":10,"nodeType":"466","endLine":58,"endColumn":23},{"ruleId":"468","severity":1,"message":"532","line":67,"column":6,"nodeType":"470","endLine":67,"endColumn":19,"fix":"533"},{"ruleId":"468","severity":1,"message":"534","line":77,"column":6,"nodeType":"470","endLine":77,"endColumn":22,"fix":"535"},{"ruleId":"468","severity":1,"message":"536","line":91,"column":17,"nodeType":"466","endLine":91,"endColumn":24},{"ruleId":"468","severity":1,"message":"536","line":100,"column":17,"nodeType":"466","endLine":100,"endColumn":24},{"ruleId":"468","severity":1,"message":"537","line":40,"column":6,"nodeType":"470","endLine":40,"endColumn":12,"fix":"538"},{"ruleId":"468","severity":1,"message":"539","line":46,"column":8,"nodeType":"470","endLine":46,"endColumn":39,"fix":"540"},{"ruleId":"468","severity":1,"message":"541","line":102,"column":8,"nodeType":"470","endLine":102,"endColumn":21,"fix":"542"},{"ruleId":"468","severity":1,"message":"543","line":109,"column":8,"nodeType":"470","endLine":109,"endColumn":41,"fix":"544"},{"ruleId":"468","severity":1,"message":"539","line":116,"column":8,"nodeType":"470","endLine":116,"endColumn":20,"fix":"545"},"@typescript-eslint/no-unused-vars","'useEffect' is defined but never used.","Identifier","'_' is defined but never used.","react-hooks/exhaustive-deps","React Hook useEffect has missing dependencies: 'error' and 'loading'. Either include them or remove the dependency array.","ArrayExpression",{"range":"546","text":"547"},"jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","JSXOpeningElement","React Hook useEffect has a missing dependency: 'props.history'. Either include it or remove the dependency array.",{"range":"548","text":"549"},"'H1' is defined but never used.","'H6' is defined but never used.","'Tag' is defined but never used.","'GQL' is defined but never used.","'TextUtils' is defined but never used.","React Hook useEffect has a missing dependency: 'error'. Either include it or remove the dependency array.",{"range":"550","text":"551"},"React Hook useEffect has a missing dependency: 'config.error'. Either include it or remove the dependency array.",{"range":"552","text":"553"},"React Hook useEffect has missing dependencies: 'filterByLogLevel', 'prependLogEntries', and 'updateFilteredEntries'. Either include them or remove the dependency array.",{"range":"554","text":"555"},"React Hook useEffect has missing dependencies: 'appendLogEntries' and 'updateFilteredEntries'. Either include them or remove the dependency array.",{"range":"556","text":"557"},"React Hook useEffect has a missing dependency: 'updateFilteredEntries'. Either include it or remove the dependency array.",{"range":"558","text":"559"},"eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","'AnchorButton' is defined but never used.","'IInputGroupProps' is defined but never used.",{"range":"560","text":"551"},"'Button' is defined but never used.","'Classes' is defined but never used.","'Dialog' is defined but never used.","'HTMLSelect' is defined but never used.",{"range":"561","text":"547"},"React Hook useEffect has a missing dependency: 'isNew'. Either include it or remove the dependency array.",{"range":"562","text":"563"},"'result' is assigned a value but never used.","'EditableText' is defined but never used.","'HTMLTable' is defined but never used.","'QueryHookResult' is defined but never used.","'FindGalleriesQuery' is defined but never used.","'FindGalleriesVariables' is defined but never used.","'ListHook' is defined but never used.","'ListFilterModel' is defined but never used.","'DisplayMode' is defined but never used.","'FilterMode' is defined but never used.",{"range":"564","text":"547"},"'ControlGroup' is defined but never used.","'useRef' is defined but never used.","Assignments to the 'searchCallback' variable from inside React Hook useEffect will be lost after each render. To preserve the value over time, store it in a useRef Hook and keep the mutable value in the '.current' property. Otherwise, you can move this variable directly inside useEffect.","CallExpression",{"range":"565","text":"547"},{"range":"566","text":"567"},{"range":"568","text":"547"},"React Hook useEffect contains a call to 'setTimestamp'. Without a list of dependencies, this can lead to an infinite chain of updates. To fix this, pass [props.location.search, timestamp] as a second argument to the useEffect Hook.",{"range":"569","text":"570"},"React Hook useEffect has a missing dependency: 'onFind'. Either include it or remove the dependency array.",{"range":"571","text":"572"},"React Hook useEffect has missing dependencies: 'allDateSet', 'allPerformerSet', 'allStudioSet', 'allTagSet', and 'allTitleSet'. Either include them or remove the dependency array.",{"range":"573","text":"574"},"'RefObject' is defined but never used.","'delayedRender' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'fetchSpriteInfo'. Either include it or remove the dependency array.",{"range":"575","text":"576"},"React Hook useEffect has missing dependencies: 'props.scene.file.duration' and 'setPosition'. Either include them or remove the dependency array.",{"range":"577","text":"578"},"The ref value 'contentEl.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'contentEl.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook React.useEffect has a missing dependency: 'MultiSelectImpl'. Either include it or remove the dependency array.",{"range":"579","text":"580"},"React Hook useEffect has a missing dependency: 'filter'. Either include it or remove the dependency array.",{"range":"581","text":"582"},"React Hook useEffect has a missing dependency: 'getCount'. Either include it or remove the dependency array.",{"range":"583","text":"584"},"React Hook useEffect has missing dependencies: 'filter' and 'options.props.history'. Either include them or remove the dependency array.",{"range":"585","text":"586"},{"range":"587","text":"588"},[823,829],"[data, error, loading]",[983,990],"[props.history, tabId]",[2555,2561],"[data, error]",[1955,1968],"[config.data, config.error]",[2796,2802],"[data, filterByLogLevel, prependLogEntries, updateFilteredEntries]",[3020,3034],"[appendLogEntries, existingData, updateFilteredEntries]",[3422,3432],"[logLevel, updateFilteredEntries]",[1097,1103],[1971,1977],[2157,2165],"[isNew, studio]",[1962,1968],[4264,4270],[4459,4470],"[isNew, performer]",[1311,1317],[1589,1589],", [props.location.search, timestamp]",[9936,9949],"[onFind, parserInput]",[12915,12929],"[allDateSet, allPerformerSet, allStudioSet, allTagSet, allTitleSet, parserResult]",[2337,2350],"[fetchSpriteInfo, props.scene]",[2706,2722],"[props.position, props.scene.file.duration, setPosition]",[1668,1674],"[MultiSelectImpl, data]",[2105,2136],"[filter, options.props.location.search]",[4971,4984],"[getCount, result.data]",[5248,5281],"[result.data, filter.displayMode, options.props.history, filter]",[5458,5470],"[filter, totalCount]"] \ No newline at end of file +[{"/home/peroo/stash/ui/v2.5/src/App.tsx":"1","/home/peroo/stash/ui/v2.5/src/components/ErrorBoundary.tsx":"2","/home/peroo/stash/ui/v2.5/src/components/Galleries/Galleries.tsx":"3","/home/peroo/stash/ui/v2.5/src/components/Galleries/Gallery.tsx":"4","/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryList.tsx":"5","/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryViewer.tsx":"6","/home/peroo/stash/ui/v2.5/src/components/MainNavbar.tsx":"7","/home/peroo/stash/ui/v2.5/src/components/PageNotFound.tsx":"8","/home/peroo/stash/ui/v2.5/src/components/Settings/Settings.tsx":"9","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx":"10","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx":"11","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx":"12","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx":"13","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx":"14","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx":"15","/home/peroo/stash/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx":"16","/home/peroo/stash/ui/v2.5/src/components/Shared/DurationInput.tsx":"17","/home/peroo/stash/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx":"18","/home/peroo/stash/ui/v2.5/src/components/Shared/TagLink.tsx":"19","/home/peroo/stash/ui/v2.5/src/components/Shared/Toast.tsx":"20","/home/peroo/stash/ui/v2.5/src/components/Stats.tsx":"21","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioCard.tsx":"22","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx":"23","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioList.tsx":"24","/home/peroo/stash/ui/v2.5/src/components/Studios/Studios.tsx":"25","/home/peroo/stash/ui/v2.5/src/components/Tags/TagList.tsx":"26","/home/peroo/stash/ui/v2.5/src/components/Tags/Tags.tsx":"27","/home/peroo/stash/ui/v2.5/src/components/Wall/WallItem.tsx":"28","/home/peroo/stash/ui/v2.5/src/components/Wall/WallPanel.tsx":"29","/home/peroo/stash/ui/v2.5/src/components/list/AddFilter.tsx":"30","/home/peroo/stash/ui/v2.5/src/components/list/ListFilter.tsx":"31","/home/peroo/stash/ui/v2.5/src/components/list/Pagination.tsx":"32","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerCard.tsx":"33","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx":"34","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerList.tsx":"35","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerListTable.tsx":"36","/home/peroo/stash/ui/v2.5/src/components/performers/performers.tsx":"37","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneCard.tsx":"38","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx":"39","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx":"40","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx":"41","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx":"42","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx":"43","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx":"44","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx":"45","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneList.tsx":"46","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneListTable.tsx":"47","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneMarkerList.tsx":"48","/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx":"49","/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx":"50","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx":"51","/home/peroo/stash/ui/v2.5/src/components/scenes/helpers.tsx":"52","/home/peroo/stash/ui/v2.5/src/components/scenes/scenes.tsx":"53","/home/peroo/stash/ui/v2.5/src/components/select/FilterMultiSelect.tsx":"54","/home/peroo/stash/ui/v2.5/src/components/select/FilterSelect.tsx":"55","/home/peroo/stash/ui/v2.5/src/components/select/MarkerTitleSuggest.tsx":"56","/home/peroo/stash/ui/v2.5/src/components/select/ScrapePerformerSuggest.tsx":"57","/home/peroo/stash/ui/v2.5/src/components/select/ValidGalleriesSelect.tsx":"58","/home/peroo/stash/ui/v2.5/src/core/StashService.ts":"59","/home/peroo/stash/ui/v2.5/src/core/generated-graphql.tsx":"60","/home/peroo/stash/ui/v2.5/src/hooks/ListHook.tsx":"61","/home/peroo/stash/ui/v2.5/src/hooks/LocalForage.ts":"62","/home/peroo/stash/ui/v2.5/src/hooks/VideoHover.ts":"63","/home/peroo/stash/ui/v2.5/src/index.tsx":"64","/home/peroo/stash/ui/v2.5/src/models/base-props.ts":"65","/home/peroo/stash/ui/v2.5/src/models/index.ts":"66","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/criterion.ts":"67","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/favorite.ts":"68","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/has-markers.ts":"69","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/is-missing.ts":"70","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/none.ts":"71","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/performers.ts":"72","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/rating.ts":"73","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/resolution.ts":"74","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/studios.ts":"75","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/tags.ts":"76","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/utils.ts":"77","/home/peroo/stash/ui/v2.5/src/models/list-filter/filter.ts":"78","/home/peroo/stash/ui/v2.5/src/models/list-filter/types.ts":"79","/home/peroo/stash/ui/v2.5/src/models/react-images.d.ts":"80","/home/peroo/stash/ui/v2.5/src/models/react-jw-player.d.ts":"81","/home/peroo/stash/ui/v2.5/src/models/types.ts":"82","/home/peroo/stash/ui/v2.5/src/react-app-env.d.ts":"83","/home/peroo/stash/ui/v2.5/src/serviceWorker.ts":"84","/home/peroo/stash/ui/v2.5/src/utils/color.ts":"85","/home/peroo/stash/ui/v2.5/src/utils/editabletext.tsx":"86","/home/peroo/stash/ui/v2.5/src/utils/errors.ts":"87","/home/peroo/stash/ui/v2.5/src/utils/image.tsx":"88","/home/peroo/stash/ui/v2.5/src/utils/navigation.ts":"89","/home/peroo/stash/ui/v2.5/src/utils/table.tsx":"90","/home/peroo/stash/ui/v2.5/src/utils/text.ts":"91","/home/peroo/stash/ui/v2.5/src/utils/toasts.ts":"92","/home/peroo/stash/ui/v2.5/src/utils/zoom.ts":"93"},{"size":1818,"mtime":1578432843260,"results":"94","hashOfConfig":"95"},{"size":769,"mtime":1577979127060,"results":"96","hashOfConfig":"95"},{"size":364,"mtime":1577979127060,"results":"97","hashOfConfig":"95"},{"size":1061,"mtime":1578153870063,"results":"98","hashOfConfig":"95"},{"size":1891,"mtime":1578153881712,"results":"99","hashOfConfig":"95"},{"size":1440,"mtime":1578153898526,"results":"100","hashOfConfig":"95"},{"size":2043,"mtime":1577994497113,"results":"101","hashOfConfig":"95"},{"size":154,"mtime":1577979127060,"results":"102","hashOfConfig":"95"},{"size":1885,"mtime":1577979127120,"results":"103","hashOfConfig":"95"},{"size":1109,"mtime":1578154008447,"results":"104","hashOfConfig":"95"},{"size":9581,"mtime":1578153404628,"results":"105","hashOfConfig":"95"},{"size":4412,"mtime":1578153807337,"results":"106","hashOfConfig":"95"},{"size":5105,"mtime":1578151803148,"results":"107","hashOfConfig":"95"},{"size":1767,"mtime":1577979127140,"results":"108","hashOfConfig":"95"},{"size":7437,"mtime":1578151882758,"results":"109","hashOfConfig":"95"},{"size":4140,"mtime":1578083340244,"results":"110","hashOfConfig":"95"},{"size":2898,"mtime":1578077797211,"results":"111","hashOfConfig":"95"},{"size":2923,"mtime":1578078846876,"results":"112","hashOfConfig":"95"},{"size":1174,"mtime":1578006626029,"results":"113","hashOfConfig":"95"},{"size":1319,"mtime":1578435714803,"results":"114","hashOfConfig":"95"},{"size":1957,"mtime":1577992677258,"results":"115","hashOfConfig":"95"},{"size":721,"mtime":1578076709401,"results":"116","hashOfConfig":"95"},{"size":5067,"mtime":1578076542562,"results":"117","hashOfConfig":"95"},{"size":1328,"mtime":1578153890219,"results":"118","hashOfConfig":"95"},{"size":364,"mtime":1577979127156,"results":"119","hashOfConfig":"95"},{"size":4672,"mtime":1578057682269,"results":"120","hashOfConfig":"95"},{"size":244,"mtime":1577979127172,"results":"121","hashOfConfig":"95"},{"size":4925,"mtime":1578153782630,"results":"122","hashOfConfig":"95"},{"size":2720,"mtime":1578153906690,"results":"123","hashOfConfig":"95"},{"size":7005,"mtime":1578299498166,"results":"124","hashOfConfig":"95"},{"size":7997,"mtime":1578172709206,"results":"125","hashOfConfig":"95"},{"size":3262,"mtime":1578165098978,"results":"126","hashOfConfig":"95"},{"size":1462,"mtime":1578083893006,"results":"127","hashOfConfig":"95"},{"size":13899,"mtime":1578086127588,"results":"128","hashOfConfig":"95"},{"size":2485,"mtime":1577979127184,"results":"129","hashOfConfig":"95"},{"size":2554,"mtime":1578084209211,"results":"130","hashOfConfig":"95"},{"size":397,"mtime":1577979127192,"results":"131","hashOfConfig":"95"},{"size":7168,"mtime":1578054332821,"results":"132","hashOfConfig":"95"},{"size":3737,"mtime":1578004207025,"results":"133","hashOfConfig":"95"},{"size":1381,"mtime":1578006480744,"results":"134","hashOfConfig":"95"},{"size":12685,"mtime":1578301620208,"results":"135","hashOfConfig":"95"},{"size":3133,"mtime":1577997627561,"results":"136","hashOfConfig":"95"},{"size":9231,"mtime":1578301845641,"results":"137","hashOfConfig":"95"},{"size":618,"mtime":1577979127196,"results":"138","hashOfConfig":"95"},{"size":29391,"mtime":1578301950830,"results":"139","hashOfConfig":"95"},{"size":3809,"mtime":1577994701125,"results":"140","hashOfConfig":"95"},{"size":3028,"mtime":1577996569786,"results":"141","hashOfConfig":"95"},{"size":2299,"mtime":1577979127196,"results":"142","hashOfConfig":"95"},{"size":5740,"mtime":1578054177135,"results":"143","hashOfConfig":"95"},{"size":10525,"mtime":1578154075579,"results":"144","hashOfConfig":"95"},{"size":8943,"mtime":1578302106743,"results":"145","hashOfConfig":"95"},{"size":905,"mtime":1577996960389,"results":"146","hashOfConfig":"95"},{"size":484,"mtime":1577979127227,"results":"147","hashOfConfig":"95"},{"size":6514,"mtime":1577979127227,"results":"148","hashOfConfig":"95"},{"size":5127,"mtime":1578435644103,"results":"149","hashOfConfig":"95"},{"size":2275,"mtime":1577979127227,"results":"150","hashOfConfig":"95"},{"size":2608,"mtime":1578153443601,"results":"151","hashOfConfig":"95"},{"size":2695,"mtime":1578151970904,"results":"152","hashOfConfig":"95"},{"size":16285,"mtime":1578426905076,"results":"153","hashOfConfig":"95"},{"size":73414,"mtime":1577979127231,"results":"154","hashOfConfig":"95"},{"size":11366,"mtime":1577979127231,"results":"155","hashOfConfig":"95"},{"size":1659,"mtime":1577979127231,"results":"156","hashOfConfig":"95"},{"size":2144,"mtime":1577979127231,"results":"157","hashOfConfig":"95"},{"size":737,"mtime":1577993631244,"results":"158","hashOfConfig":"95"},{"size":124,"mtime":1577979127235,"results":"159","hashOfConfig":"95"},{"size":55,"mtime":1577979127235,"results":"160","hashOfConfig":"95"},{"size":6822,"mtime":1578164766969,"results":"161","hashOfConfig":"95"},{"size":659,"mtime":1577979127255,"results":"162","hashOfConfig":"95"},{"size":664,"mtime":1577979127255,"results":"163","hashOfConfig":"95"},{"size":682,"mtime":1577979127255,"results":"164","hashOfConfig":"95"},{"size":566,"mtime":1577979127255,"results":"165","hashOfConfig":"95"},{"size":966,"mtime":1577979127255,"results":"166","hashOfConfig":"95"},{"size":1013,"mtime":1577979127255,"results":"167","hashOfConfig":"95"},{"size":694,"mtime":1577979127255,"results":"168","hashOfConfig":"95"},{"size":881,"mtime":1577979127255,"results":"169","hashOfConfig":"95"},{"size":1287,"mtime":1577979127255,"results":"170","hashOfConfig":"95"},{"size":1965,"mtime":1577979127255,"results":"171","hashOfConfig":"95"},{"size":12393,"mtime":1577979127255,"results":"172","hashOfConfig":"95"},{"size":278,"mtime":1577979127255,"results":"173","hashOfConfig":"95"},{"size":187,"mtime":1577979127255,"results":"174","hashOfConfig":"95"},{"size":200,"mtime":1577979127255,"results":"175","hashOfConfig":"95"},{"size":74,"mtime":1577979127255,"results":"176","hashOfConfig":"95"},{"size":40,"mtime":1577979127255,"results":"177","hashOfConfig":"95"},{"size":5216,"mtime":1577979127287,"results":"178","hashOfConfig":"95"},{"size":308,"mtime":1577979127287,"results":"179","hashOfConfig":"95"},{"size":1871,"mtime":1577979127287,"results":"180","hashOfConfig":"95"},{"size":529,"mtime":1577979127287,"results":"181","hashOfConfig":"95"},{"size":1049,"mtime":1578153858370,"results":"182","hashOfConfig":"95"},{"size":2396,"mtime":1577979127287,"results":"183","hashOfConfig":"95"},{"size":3507,"mtime":1578302319327,"results":"184","hashOfConfig":"95"},{"size":2241,"mtime":1577979127287,"results":"185","hashOfConfig":"95"},{"size":275,"mtime":1577979127287,"results":"186","hashOfConfig":"95"},{"size":123,"mtime":1577979127319,"results":"187","hashOfConfig":"95"},{"filePath":"188","messages":"189","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1tsnfwq",{"filePath":"190","messages":"191","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"192","messages":"193","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"194","messages":"195","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"196"},{"filePath":"197","messages":"198","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"199","messages":"200","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"201","messages":"202","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"203","messages":"204","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"205","messages":"206","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"207"},{"filePath":"208","messages":"209","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"210","messages":"211","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"212"},{"filePath":"213","messages":"214","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"215"},{"filePath":"216","messages":"217","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":3,"source":"218"},{"filePath":"219","messages":"220","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"221","messages":"222","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"223","messages":"224","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"225","messages":"226","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"227","messages":"228","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"229","messages":"230","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"231","messages":"232","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"233","messages":"234","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"235","messages":"236","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"237","messages":"238","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"239","messages":"240","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"241","messages":"242","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"243","messages":"244","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"245","messages":"246","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"247","messages":"248","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"249","messages":"250","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"251","messages":"252","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"253","messages":"254","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"255","messages":"256","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"257","messages":"258","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"259","messages":"260","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":"261"},{"filePath":"262","messages":"263","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"264","messages":"265","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"266","messages":"267","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"268","messages":"269","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"270","messages":"271","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":"272"},{"filePath":"273","messages":"274","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"275","messages":"276","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"277","messages":"278","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"279","messages":"280","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"281","messages":"282","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"283","messages":"284","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":"285"},{"filePath":"286","messages":"287","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"288","messages":"289","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"290","messages":"291","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"292","messages":"293","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"294","messages":"295","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":2,"source":"296"},{"filePath":"297","messages":"298","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"299","messages":"300","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"301","messages":"302","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"303","messages":"304","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":1,"source":"305"},{"filePath":"306","messages":"307","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"308","messages":"309","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"310","messages":"311","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"312","messages":"313","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"314","messages":"315","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"316","messages":"317","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"318","messages":"319","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":4,"source":"320"},{"filePath":"321","messages":"322","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"323","messages":"324","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"325","messages":"326","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"327","messages":"328","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"329","messages":"330","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"331","messages":"332","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"333","messages":"334","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"335","messages":"336","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"337","messages":"338","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"339","messages":"340","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"341","messages":"342","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"343","messages":"344","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"345","messages":"346","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"347","messages":"348","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"349","messages":"350","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"351","messages":"352","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"353","messages":"354","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"355","messages":"356","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"357","messages":"358","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"359","messages":"360","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"361","messages":"362","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"363","messages":"364","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"365","messages":"366","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"367","messages":"368","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"369","messages":"370","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"371","messages":"372","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"373","messages":"374","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"375","messages":"376","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"377","messages":"378","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"379","messages":"380","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"381"},{"filePath":"382","messages":"383","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"384","messages":"385","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/peroo/stash/ui/v2.5/src/App.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/ErrorBoundary.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Galleries/Galleries.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Galleries/Gallery.tsx",["386"],"import React, { useEffect, useState } from \"react\";\nimport { Spinner } from 'react-bootstrap';\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { IBaseProps } from \"../../models\";\nimport { GalleryViewer } from \"./GalleryViewer\";\n\ninterface IProps extends IBaseProps {}\n\nexport const Gallery: React.FC = (props: IProps) => {\n const [gallery, setGallery] = useState>({});\n const [isLoading, setIsLoading] = useState(false);\n\n const { data, error, loading } = StashService.useFindGallery(props.match.params.id);\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findGallery || !!error) { return; }\n setGallery(data.findGallery);\n }, [data]);\n\n if (!data || !data.findGallery || isLoading) { return ; }\n if (!!error) { return <>{error.message}; }\n return (\n
    \n \n
    \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryViewer.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/MainNavbar.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/PageNotFound.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Settings/Settings.tsx",["387"],"import {\n Card,\n Tab,\n Tabs,\n} from \"@blueprintjs/core\";\nimport queryString from \"query-string\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { IBaseProps } from \"../../models\";\nimport { SettingsAboutPanel } from \"./SettingsAboutPanel\";\nimport { SettingsConfigurationPanel } from \"./SettingsConfigurationPanel\";\nimport { SettingsInterfacePanel } from \"./SettingsInterfacePanel\";\nimport { SettingsLogsPanel } from \"./SettingsLogsPanel\";\nimport { SettingsTasksPanel } from \"./SettingsTasksPanel/SettingsTasksPanel\";\n\ninterface IProps extends IBaseProps {}\n\ntype TabId = \"configuration\" | \"tasks\" | \"logs\" | \"about\";\n\nexport const Settings: FunctionComponent = (props: IProps) => {\n const [tabId, setTabId] = useState(getTabId());\n\n useEffect(() => {\n const location = Object.assign({}, props.history.location);\n location.search = queryString.stringify({tab: tabId}, {encode: false});\n props.history.replace(location);\n }, [tabId]);\n\n function getTabId(): TabId {\n const queryParams = queryString.parse(props.location.search);\n if (!queryParams.tab || typeof queryParams.tab !== \"string\") { return \"tasks\"; }\n return queryParams.tab as TabId;\n }\n\n return (\n \n setTabId(newId as TabId)}\n defaultSelectedTabId={getTabId()}\n >\n } />\n } />\n } />\n } />\n } />\n \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx",["388"],"import {\n AnchorButton,\n Button,\n Divider,\n FormGroup,\n InputGroup,\n Spinner,\n Checkbox,\n HTMLSelect,\n} from \"@blueprintjs/core\";\nimport React, { useEffect, useState } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { ToastUtils } from \"../../utils/toasts\";\nimport { FolderSelect } from \"../Shared/FolderSelect/FolderSelect\";\n\nexport const SettingsConfigurationPanel: React.FC = () => {\n // Editing config state\n const [stashes, setStashes] = useState([]);\n const [databasePath, setDatabasePath] = useState(undefined);\n const [generatedPath, setGeneratedPath] = useState(undefined);\n const [maxTranscodeSize, setMaxTranscodeSize] = useState(undefined);\n const [maxStreamingTranscodeSize, setMaxStreamingTranscodeSize] = useState(undefined);\n const [username, setUsername] = useState(undefined);\n const [password, setPassword] = useState(undefined);\n const [logFile, setLogFile] = useState();\n const [logOut, setLogOut] = useState(true);\n const [logLevel, setLogLevel] = useState(\"Info\");\n const [logAccess, setLogAccess] = useState(true);\n const [excludes, setExcludes] = useState<(string)[]>([]);\n\n const { data, error, loading } = StashService.useConfiguration();\n\n const updateGeneralConfig = StashService.useConfigureGeneral({\n stashes,\n databasePath,\n generatedPath,\n maxTranscodeSize,\n maxStreamingTranscodeSize,\n username,\n password,\n logFile,\n logOut,\n logLevel,\n logAccess,\n excludes,\n });\n\n useEffect(() => {\n if (!data || !data.configuration || !!error) { return; }\n const conf = StashService.nullToUndefined(data.configuration) as GQL.ConfigDataFragment;\n if (!!conf.general) {\n setStashes(conf.general.stashes || []);\n setDatabasePath(conf.general.databasePath);\n setGeneratedPath(conf.general.generatedPath);\n setMaxTranscodeSize(conf.general.maxTranscodeSize);\n setMaxStreamingTranscodeSize(conf.general.maxStreamingTranscodeSize);\n setUsername(conf.general.username);\n setPassword(conf.general.password);\n setLogFile(conf.general.logFile);\n setLogOut(conf.general.logOut);\n setLogLevel(conf.general.logLevel);\n setLogAccess(conf.general.logAccess);\n setExcludes(conf.general.excludes);\n }\n }, [data]);\n\n function onStashesChanged(directories: string[]) {\n setStashes(directories);\n }\n\n function excludeRegexChanged(idx: number, value: string) {\n const newExcludes = excludes.map((regex, i)=> {\n const ret = ( idx !== i ) ? regex : value ;\n return ret\n })\n setExcludes(newExcludes);\n }\n\n function excludeRemoveRegex(idx: number) {\n const newExcludes = excludes.filter((_regex, i) => i !== idx );\n\n setExcludes(newExcludes);\n }\n\n function excludeAddRegex() {\n const demo = \"sample\\\\.mp4$\"\n const newExcludes = excludes.concat(demo);\n\n setExcludes(newExcludes);\n }\n\n\n async function onSave() {\n try {\n const result = await updateGeneralConfig();\n console.log(result);\n ToastUtils.success(\"Updated config\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n const transcodeQualities = [\n GQL.StreamingResolutionEnum.Low,\n GQL.StreamingResolutionEnum.Standard,\n GQL.StreamingResolutionEnum.StandardHd,\n GQL.StreamingResolutionEnum.FullHd,\n GQL.StreamingResolutionEnum.FourK,\n GQL.StreamingResolutionEnum.Original\n ].map(resolutionToString);\n\n function resolutionToString(r : GQL.StreamingResolutionEnum | undefined) {\n switch (r) {\n case GQL.StreamingResolutionEnum.Low: return \"240p\";\n case GQL.StreamingResolutionEnum.Standard: return \"480p\";\n case GQL.StreamingResolutionEnum.StandardHd: return \"720p\";\n case GQL.StreamingResolutionEnum.FullHd: return \"1080p\";\n case GQL.StreamingResolutionEnum.FourK: return \"4k\";\n case GQL.StreamingResolutionEnum.Original: return \"Original\";\n }\n\n return \"Original\";\n }\n\n function translateQuality(quality : string) {\n switch (quality) {\n case \"240p\": return GQL.StreamingResolutionEnum.Low;\n case \"480p\": return GQL.StreamingResolutionEnum.Standard;\n case \"720p\": return GQL.StreamingResolutionEnum.StandardHd;\n case \"1080p\": return GQL.StreamingResolutionEnum.FullHd;\n case \"4k\": return GQL.StreamingResolutionEnum.FourK;\n case \"Original\": return GQL.StreamingResolutionEnum.Original;\n }\n\n return GQL.StreamingResolutionEnum.Original;\n }\n\n return (\n <>\n {!!error ?

    {error.message}

    : undefined}\n {(!data || !data.configuration || loading) ? : undefined}\n

    Library

    \n \n \n \n \n \n \n \n \n setDatabasePath(e.target.value)} />\n \n\n \n setGeneratedPath(e.target.value)} />\n \n\n \n\n { (excludes) ? excludes.map((regexp, i) => {\n return(\n excludeRegexChanged(i, e.target.value)}\n rightElement={\n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx",["389"],"import {\n Button,\n Checkbox,\n Divider,\n FormGroup,\n Spinner,\n TextArea,\n NumericInput\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport { StashService } from \"../../core/StashService\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { ToastUtils } from \"../../utils/toasts\";\n\ninterface IProps {}\n\nexport const SettingsInterfacePanel: FunctionComponent = () => {\n const config = StashService.useConfiguration();\n const [soundOnPreview, setSoundOnPreview] = useState();\n const [wallShowTitle, setWallShowTitle] = useState();\n const [maximumLoopDuration, setMaximumLoopDuration] = useState(0);\n const [autostartVideo, setAutostartVideo] = useState();\n const [showStudioAsText, setShowStudioAsText] = useState();\n const [css, setCSS] = useState();\n const [cssEnabled, setCSSEnabled] = useState();\n\n const updateInterfaceConfig = StashService.useConfigureInterface({\n soundOnPreview,\n wallShowTitle,\n maximumLoopDuration,\n autostartVideo,\n showStudioAsText,\n css,\n cssEnabled\n });\n\n useEffect(() => {\n if (!config.data || !config.data.configuration || !!config.error) { return; }\n if (!!config.data.configuration.interface) {\n let iCfg = config.data.configuration.interface;\n setSoundOnPreview(iCfg.soundOnPreview !== undefined ? iCfg.soundOnPreview : true);\n setWallShowTitle(iCfg.wallShowTitle !== undefined ? iCfg.wallShowTitle : true);\n setMaximumLoopDuration(iCfg.maximumLoopDuration || 0);\n setAutostartVideo(iCfg.autostartVideo !== undefined ? iCfg.autostartVideo : false);\n setShowStudioAsText(iCfg.showStudioAsText !== undefined ? iCfg.showStudioAsText : false);\n setCSS(config.data.configuration.interface.css || \"\");\n setCSSEnabled(config.data.configuration.interface.cssEnabled || false);\n }\n }, [config.data]);\n\n async function onSave() {\n try {\n const result = await updateInterfaceConfig();\n console.log(result);\n ToastUtils.success(\"Updated config\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n return (\n <>\n {!!config.error ?

    {config.error.message}

    : undefined}\n {(!config.data || !config.data.configuration || config.loading) ? : undefined}\n

    User Interface

    \n \n setWallShowTitle(!wallShowTitle)}\n />\n setSoundOnPreview(!soundOnPreview)}\n />\n \n\n \n {\n setShowStudioAsText(!showStudioAsText)\n }}\n />\n \n \n \n {\n setAutostartVideo(!autostartVideo)\n }}\n />\n\n \n setMaximumLoopDuration(value)}\n min={0}\n minorStepSize={1}\n />\n \n \n\n \n {\n setCSSEnabled(!cssEnabled)\n }}\n />\n\n \n \n\n \n \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx",["390","391","392"],"import {\n H4, FormGroup, HTMLSelect,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useState, useEffect, useRef } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\n\ninterface IProps {}\n\nfunction convertTime(logEntry : GQL.LogEntryDataFragment) {\n function pad(val : number) {\n var ret = val.toString();\n if (val <= 9) {\n ret = \"0\" + ret;\n }\n\n return ret;\n }\n\n var date = new Date(logEntry.time);\n var month = date.getMonth() + 1;\n var day = date.getDate();\n var dateStr = date.getFullYear() + \"-\" + pad(month) + \"-\" + pad(day);\n dateStr += \" \" + pad(date.getHours()) + \":\" + pad(date.getMinutes()) + \":\" + pad(date.getSeconds());\n\n return dateStr;\n}\n\nclass LogEntry {\n public time: string;\n public level: string;\n public message: string;\n public id: string;\n\n private static nextId: number = 0;\n\n public constructor(logEntry: GQL.LogEntryDataFragment) {\n this.time = convertTime(logEntry);\n this.level = logEntry.level;\n this.message = logEntry.message;\n\n var id = LogEntry.nextId++;\n this.id = id.toString();\n }\n}\n\nexport const SettingsLogsPanel: FunctionComponent = (props: IProps) => {\n const { data, error } = StashService.useLoggingSubscribe();\n const { data: existingData } = StashService.useLogs();\n \n const logEntries = useRef([]);\n const [logLevel, setLogLevel] = useState(\"Info\");\n const [filteredLogEntries, setFilteredLogEntries] = useState([]);\n const lastUpdate = useRef(0);\n const updateTimeout = useRef();\n\n // maximum number of log entries to display. Subsequent entries will truncate \n // the list, dropping off the oldest entries first.\n const MAX_LOG_ENTRIES = 200;\n\n function truncateLogEntries(entries : LogEntry[]) {\n entries.length = Math.min(entries.length, MAX_LOG_ENTRIES);\n }\n\n function prependLogEntries(toPrepend : LogEntry[]) {\n var newLogEntries = toPrepend.concat(logEntries.current);\n truncateLogEntries(newLogEntries);\n logEntries.current = newLogEntries;\n }\n\n function appendLogEntries(toAppend : LogEntry[]) {\n var newLogEntries = logEntries.current.concat(toAppend);\n truncateLogEntries(newLogEntries);\n logEntries.current = newLogEntries;\n }\n\n useEffect(() => {\n if (!data) { return; }\n\n // append data to the logEntries\n var convertedData = data.loggingSubscribe.map(convertLogEntry);\n\n // filter subscribed data as it comes in, otherwise we'll end up\n // truncating stuff that wasn't filtered out\n convertedData = convertedData.filter(filterByLogLevel)\n \n // put newest entries at the top\n convertedData.reverse();\n prependLogEntries(convertedData);\n\n updateFilteredEntries();\n }, [data]);\n\n useEffect(() => {\n if (!existingData || !existingData.logs) { return; }\n\n var convertedData = existingData.logs.map(convertLogEntry);\n appendLogEntries(convertedData);\n\n updateFilteredEntries();\n }, [existingData]);\n\n function updateFilteredEntries() {\n if (!updateTimeout.current) {\n console.log(\"Updating after timeout\");\n }\n updateTimeout.current = undefined;\n\n var filteredEntries = logEntries.current.filter(filterByLogLevel);\n setFilteredLogEntries(filteredEntries);\n\n lastUpdate.current = new Date().getTime();\n }\n\n useEffect(() => {\n updateFilteredEntries();\n }, [logLevel]);\n\n function convertLogEntry(logEntry : GQL.LogEntryDataFragment) {\n return new LogEntry(logEntry);\n }\n\n function levelClass(level : string) {\n return level.toLowerCase().trim();\n }\n\n interface ILogElementProps {\n logEntry : LogEntry\n }\n\n function LogElement(props : ILogElementProps) {\n // pad to maximum length of level enum\n var level = props.logEntry.level.padEnd(GQL.LogLevel.Progress.length);\n\n return (\n <>\n {props.logEntry.time} \n {level} \n {props.logEntry.message}\n
    \n \n );\n }\n\n function maybeRenderError() {\n if (error) {\n return (\n <>\n Error connecting to log server: {error.message}
    \n \n );\n }\n }\n\n const logLevels = [\"Debug\", \"Info\", \"Warning\", \"Error\"];\n\n function filterByLogLevel(logEntry : LogEntry) {\n if (logLevel === \"Debug\") {\n return true;\n }\n\n var logLevelIndex = logLevels.indexOf(logLevel);\n var levelIndex = logLevels.indexOf(logEntry.level);\n\n return levelIndex >= logLevelIndex;\n }\n\n return (\n <>\n

    Logs

    \n
    \n \n setLogLevel(event.target.value)}\n value={logLevel}\n />\n \n
    \n
    \n {maybeRenderError()}\n {filteredLogEntries.map((logEntry) =>\n \n )}\n
    \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/DurationInput.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/TagLink.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/Toast.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Stats.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioCard.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Studios/Studios.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Tags/TagList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Tags/Tags.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Wall/WallItem.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Wall/WallPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/list/AddFilter.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/list/ListFilter.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/list/Pagination.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerCard.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx",["393","394"],"import _ from \"lodash\";\nimport { Button, Form, Modal, Spinner, Table } from 'react-bootstrap';\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport React, { useEffect, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { StashService } from \"../../../core/StashService\";\nimport { IBaseProps } from \"../../../models\";\nimport { ErrorUtils } from \"../../../utils/errors\";\nimport { TableUtils } from \"../../../utils/table\";\nimport { ScrapePerformerSuggest } from \"../../select/ScrapePerformerSuggest\";\nimport { DetailsEditNavbar } from \"../../Shared/DetailsEditNavbar\";\nimport { ToastUtils } from \"../../../utils/toasts\";\nimport { EditableTextUtils } from \"../../../utils/editabletext\";\nimport { ImageUtils } from \"../../../utils/image\";\n\ninterface IPerformerProps extends IBaseProps {}\n\nexport const Performer: React.FC = (props: IPerformerProps) => {\n const isNew = props.match.params.id === \"new\";\n\n // Editing state\n const [isEditing, setIsEditing] = useState(isNew);\n const [isDisplayingScraperDialog, setIsDisplayingScraperDialog] = useState(undefined);\n const [scrapePerformerDetails, setScrapePerformerDetails] = useState(undefined);\n\n // Editing performer state\n const [image, setImage] = useState(undefined);\n const [name, setName] = useState(undefined);\n const [aliases, setAliases] = useState(undefined);\n const [favorite, setFavorite] = useState(undefined);\n const [birthdate, setBirthdate] = useState(undefined);\n const [ethnicity, setEthnicity] = useState(undefined);\n const [country, setCountry] = useState(undefined);\n const [eyeColor, setEyeColor] = useState(undefined);\n const [height, setHeight] = useState(undefined);\n const [measurements, setMeasurements] = useState(undefined);\n const [fakeTits, setFakeTits] = useState(undefined);\n const [careerLength, setCareerLength] = useState(undefined);\n const [tattoos, setTattoos] = useState(undefined);\n const [piercings, setPiercings] = useState(undefined);\n const [url, setUrl] = useState(undefined);\n const [twitter, setTwitter] = useState(undefined);\n const [instagram, setInstagram] = useState(undefined);\n\n // Performer state\n const [performer, setPerformer] = useState>({});\n const [imagePreview, setImagePreview] = useState(undefined);\n\n // Network state\n const [isLoading, setIsLoading] = useState(false);\n\n const Scrapers = StashService.useListPerformerScrapers();\n const [queryableScrapers, setQueryableScrapers] = useState([]);\n\n const { data, error, loading } = StashService.useFindPerformer(props.match.params.id);\n const updatePerformer = StashService.usePerformerUpdate(getPerformerInput() as GQL.PerformerUpdateInput);\n const createPerformer = StashService.usePerformerCreate(getPerformerInput() as GQL.PerformerCreateInput);\n const deletePerformer = StashService.usePerformerDestroy(getPerformerInput() as GQL.PerformerDestroyInput);\n\n function updatePerformerEditState(state: Partial) {\n if ((state as GQL.PerformerDataFragment).favorite !== undefined) {\n setFavorite((state as GQL.PerformerDataFragment).favorite);\n }\n setName(state.name);\n setAliases(state.aliases);\n setBirthdate(state.birthdate);\n setEthnicity(state.ethnicity);\n setCountry(state.country);\n setEyeColor(state.eye_color);\n setHeight(state.height);\n setMeasurements(state.measurements);\n setFakeTits(state.fake_tits);\n setCareerLength(state.career_length);\n setTattoos(state.tattoos);\n setPiercings(state.piercings);\n setUrl(state.url);\n setTwitter(state.twitter);\n setInstagram(state.instagram);\n }\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findPerformer || !!error) { return; }\n setPerformer(data.findPerformer);\n }, [data]);\n\n useEffect(() => {\n setImagePreview(performer.image_path);\n setImage(undefined);\n updatePerformerEditState(performer);\n if (!isNew) {\n setIsEditing(false);\n }\n }, [performer]);\n\n function onImageLoad(this: FileReader) {\n setImagePreview(this.result as string);\n setImage(this.result as string);\n }\n\n ImageUtils.addPasteImageHook(onImageLoad);\n \n useEffect(() => {\n var newQueryableScrapers : GQL.ListPerformerScrapersListPerformerScrapers[] = [];\n\n if (!!Scrapers.data && Scrapers.data.listPerformerScrapers) {\n newQueryableScrapers = Scrapers.data.listPerformerScrapers.filter((s) => {\n return s.performer && s.performer.supported_scrapes.includes(GQL.ScrapeType.Name);\n });\n }\n\n setQueryableScrapers(newQueryableScrapers);\n\n }, [Scrapers.data]);\n\n if ((!isNew && !isEditing && (!data || !data.findPerformer)) || isLoading) {\n return ; \n }\n if (!!error) { return <>error...; }\n\n function getPerformerInput() {\n const performerInput: Partial = {\n name,\n aliases,\n favorite,\n birthdate,\n ethnicity,\n country,\n eye_color: eyeColor,\n height,\n measurements,\n fake_tits: fakeTits,\n career_length: careerLength,\n tattoos,\n piercings,\n url,\n twitter,\n instagram,\n image,\n };\n\n if (!isNew) {\n (performerInput as GQL.PerformerUpdateInput).id = props.match.params.id;\n }\n return performerInput;\n }\n\n async function onSave() {\n setIsLoading(true);\n try {\n if (!isNew) {\n const result = await updatePerformer();\n setPerformer(result.data.performerUpdate);\n } else {\n const result = await createPerformer();\n setPerformer(result.data.performerCreate);\n props.history.push(`/performers/${result.data.performerCreate.id}`);\n }\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n }\n\n async function onDelete() {\n setIsLoading(true);\n try {\n await deletePerformer();\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n \n // redirect to performers page\n props.history.push(`/performers`);\n }\n\n async function onAutoTag() {\n if (!performer || !performer.id) {\n return;\n }\n try {\n await StashService.queryMetadataAutoTag({ performers: [performer.id]});\n ToastUtils.success(\"Started auto tagging\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n function onImageChange(event: React.FormEvent) {\n ImageUtils.onImageChange(event, onImageLoad);\n }\n\n function onDisplayFreeOnesDialog(scraper: GQL.ListPerformerScrapersListPerformerScrapers) {\n setIsDisplayingScraperDialog(scraper);\n }\n\n function getQueryScraperPerformerInput() {\n if (!scrapePerformerDetails) {\n return {};\n }\n\n let ret = _.clone(scrapePerformerDetails);\n delete ret.__typename;\n return ret as GQL.ScrapedPerformerInput;\n }\n\n async function onScrapePerformer() {\n setIsDisplayingScraperDialog(undefined);\n setIsLoading(true);\n try {\n if (!scrapePerformerDetails || !isDisplayingScraperDialog) { return; }\n const result = await StashService.queryScrapePerformer(isDisplayingScraperDialog.id, getQueryScraperPerformerInput());\n if (!result.data || !result.data.scrapePerformer) { return; }\n updatePerformerEditState(result.data.scrapePerformer);\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n }\n\n async function onScrapePerformerURL() {\n if (!url) { return; }\n setIsLoading(true);\n try {\n const result = await StashService.queryScrapePerformerURL(url);\n if (!result.data || !result.data.scrapePerformerURL) { return; }\n updatePerformerEditState(result.data.scrapePerformerURL);\n } catch (e) {\n ErrorUtils.handle(e);\n } finally {\n setIsLoading(false);\n }\n }\n\n function renderEthnicity() {\n return TableUtils.renderHtmlSelect({\n title: \"Ethnicity\",\n value: ethnicity,\n isEditing,\n onChange: (value: string) => setEthnicity(value),\n selectOptions: [\"white\", \"black\", \"asian\", \"hispanic\"],\n });\n }\n\n function renderScraperDialog() {\n return (\n setIsDisplayingScraperDialog(undefined)}\n >\n \n Scrape\n \n \n
    \n setScrapePerformerDetails(query)}\n />\n
    \n
    \n \n \n \n \n );\n }\n\n function urlScrapable(url: string) : boolean {\n return !!url && !!Scrapers.data && Scrapers.data.listPerformerScrapers && Scrapers.data.listPerformerScrapers.some((s) => {\n return !!s.performer && !!s.performer.urls && s.performer.urls.some((u) => { return url.includes(u); });\n });\n }\n\n function maybeRenderScrapeButton() {\n if (!url || !isEditing || !urlScrapable(url)) {\n return undefined;\n }\n return (\n \n )\n }\n\n function renderURLField() {\n return (\n \n \n URL \n {maybeRenderScrapeButton()}\n \n \n {EditableTextUtils.renderInputGroup({\n value: url, isEditing, onChange: setUrl, placeholder: \"URL\"\n })}\n \n \n );\n }\n\n return (\n <>\n {renderScraperDialog()}\n
    \n
    \n \"\"\n
    \n
    \n { setIsEditing(!isEditing); updatePerformerEditState(performer); }}\n onSave={onSave}\n onDelete={onDelete}\n onImageChange={onImageChange}\n scrapers={queryableScrapers}\n onDisplayScraperDialog={onDisplayFreeOnesDialog}\n onAutoTag={onAutoTag}\n />\n

    \n { !isEditing\n ? {name}\n : setName(event.target.value)} />\n }\n

    \n
    \n \n Aliases:\n {EditableTextUtils.renderInputGroup({\n value: aliases, isEditing: isEditing, placeholder: \"Aliases\", onChange: setAliases\n })}\n \n
    \n
    \n Favorite:\n setFavorite(!favorite)}\n >\n \n \n
    \n\n \n \n {TableUtils.renderInputGroup(\n {title: \"Birthdate (YYYY-MM-DD)\", value: birthdate, isEditing, onChange: setBirthdate})}\n {renderEthnicity()}\n {TableUtils.renderInputGroup(\n {title: \"Eye Color\", value: eyeColor, isEditing, onChange: setEyeColor})}\n {TableUtils.renderInputGroup(\n {title: \"Country\", value: country, isEditing, onChange: setCountry})}\n {TableUtils.renderInputGroup(\n {title: \"Height (CM)\", value: height, isEditing, onChange: setHeight})}\n {TableUtils.renderInputGroup(\n {title: \"Measurements\", value: measurements, isEditing, onChange: setMeasurements})}\n {TableUtils.renderInputGroup(\n {title: \"Fake Tits\", value: fakeTits, isEditing, onChange: setFakeTits})}\n {TableUtils.renderInputGroup(\n {title: \"Career Length\", value: careerLength, isEditing, onChange: setCareerLength})}\n {TableUtils.renderInputGroup(\n {title: \"Tattoos\", value: tattoos, isEditing, onChange: setTattoos})}\n {TableUtils.renderInputGroup(\n {title: \"Piercings\", value: piercings, isEditing, onChange: setPiercings})}\n {renderURLField()}\n {TableUtils.renderInputGroup(\n {title: \"Twitter\", value: twitter, isEditing, onChange: setTwitter})}\n {TableUtils.renderInputGroup(\n {title: \"Instagram\", value: instagram, isEditing, onChange: setInstagram})}\n \n
    \n
    \n
    \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerListTable.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/performers/performers.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneCard.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx",["395","396"],"import { Card, Spinner, Tab, Tabs } from 'react-bootstrap';\nimport queryString from \"query-string\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { StashService } from \"../../../core/StashService\";\nimport { IBaseProps } from \"../../../models\";\nimport { GalleryViewer } from \"../../Galleries/GalleryViewer\";\nimport { ScenePlayer } from \"../ScenePlayer/ScenePlayer\";\nimport { SceneDetailPanel } from \"./SceneDetailPanel\";\nimport { SceneEditPanel } from \"./SceneEditPanel\";\nimport { SceneFileInfoPanel } from \"./SceneFileInfoPanel\";\nimport { SceneMarkersPanel } from \"./SceneMarkersPanel\";\nimport { ScenePerformerPanel } from \"./ScenePerformerPanel\";\n\ninterface ISceneProps extends IBaseProps {}\n\nexport const Scene: FunctionComponent = (props: ISceneProps) => {\n const [timestamp, setTimestamp] = useState(0);\n const [autoplay, setAutoplay] = useState(false);\n const [scene, setScene] = useState>({});\n const [isLoading, setIsLoading] = useState(false);\n const { data, error, loading } = StashService.useFindScene(props.match.params.id);\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findScene || !!error) { return; }\n setScene(StashService.nullToUndefined(data.findScene));\n }, [data]);\n\n useEffect(() => {\n const queryParams = queryString.parse(props.location.search);\n if (!!queryParams.t && typeof queryParams.t === \"string\" && timestamp === 0) {\n const newTimestamp = parseInt(queryParams.t, 10);\n setTimestamp(newTimestamp);\n }\n if (queryParams.autoplay && typeof queryParams.autoplay === \"string\") {\n setAutoplay(queryParams.autoplay === \"true\");\n }\n });\n\n function onClickMarker(marker: GQL.SceneMarkerDataFragment) {\n setTimestamp(marker.seconds);\n }\n\n if (!data || !data.findScene || isLoading || Object.keys(scene).length === 0) {\n return ;\n }\n const modifiedScene =\n Object.assign({scene_marker_tags: data.sceneMarkerTags}, scene) as GQL.SceneDataFragment; // TODO Hack from angular\n if (!!error) { return <>error...; }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n {modifiedScene.performers.length > 0 ?\n \n \n : ''\n }\n {!!modifiedScene.gallery ?\n \n \n : ''\n }\n \n \n \n \n setScene(newScene)} \n onDelete={() => props.history.push(\"/scenes\")}\n />\n \n \n \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx",["397","398"],"import { Badge, Button, Card, Collapse, Dropdown, DropdownButton, Form, Table, Spinner } from 'react-bootstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport React, { useEffect, useState } from \"react\";\nimport { StashService } from \"../../core/StashService\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { SlimSceneDataFragment, Maybe } from \"../../core/generated-graphql\";\nimport { TextUtils } from \"../../utils/text\";\nimport _ from \"lodash\";\nimport { ToastUtils } from \"../../utils/toasts\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { Pagination } from \"../list/Pagination\";\nimport { FilterSelect, StudioSelect } from \"../select/FilterSelect\";\n \nclass ParserResult {\n public value: Maybe;\n public originalValue: Maybe;\n public set: boolean = false;\n\n public setOriginalValue(v : Maybe) {\n this.originalValue = v;\n this.value = v;\n }\n\n public setValue(v : Maybe) {\n if (!!v) {\n this.value = v;\n this.set = !_.isEqual(this.value, this.originalValue);\n }\n }\n}\n\nclass ParserField {\n public field : string;\n public helperText? : string;\n\n constructor(field: string, helperText?: string) {\n this.field = field;\n this.helperText = helperText;\n }\n\n public getFieldPattern() {\n return \"{\" + this.field + \"}\";\n }\n\n static Title = new ParserField(\"title\");\n static Ext = new ParserField(\"ext\", \"File extension\");\n\n static I = new ParserField(\"i\", \"Matches any ignored word\");\n static D = new ParserField(\"d\", \"Matches any delimiter (.-_)\");\n\n static Performer = new ParserField(\"performer\");\n static Studio = new ParserField(\"studio\");\n static Tag = new ParserField(\"tag\");\n\n // date fields\n static Date = new ParserField(\"date\", \"YYYY-MM-DD\");\n static YYYY = new ParserField(\"yyyy\", \"Year\");\n static YY = new ParserField(\"yy\", \"Year (20YY)\");\n static MM = new ParserField(\"mm\", \"Two digit month\");\n static DD = new ParserField(\"dd\", \"Two digit date\");\n static YYYYMMDD = new ParserField(\"yyyymmdd\");\n static YYMMDD = new ParserField(\"yymmdd\");\n static DDMMYYYY = new ParserField(\"ddmmyyyy\");\n static DDMMYY = new ParserField(\"ddmmyy\");\n static MMDDYYYY = new ParserField(\"mmddyyyy\");\n static MMDDYY = new ParserField(\"mmddyy\");\n\n static validFields = [\n ParserField.Title,\n ParserField.Ext,\n ParserField.D,\n ParserField.I,\n ParserField.Performer,\n ParserField.Studio,\n ParserField.Tag,\n ParserField.Date,\n ParserField.YYYY,\n ParserField.YY,\n ParserField.MM,\n ParserField.DD,\n ParserField.YYYYMMDD,\n ParserField.YYMMDD,\n ParserField.DDMMYYYY,\n ParserField.DDMMYY,\n ParserField.MMDDYYYY,\n ParserField.MMDDYY\n ]\n\n static fullDateFields = [\n ParserField.YYYYMMDD,\n ParserField.YYMMDD,\n ParserField.DDMMYYYY,\n ParserField.DDMMYY,\n ParserField.MMDDYYYY,\n ParserField.MMDDYY\n ];\n}\nclass SceneParserResult {\n public id: string;\n public filename: string;\n public title: ParserResult = new ParserResult();\n public date: ParserResult = new ParserResult();\n\n public studio: ParserResult = new ParserResult();\n public studioId: ParserResult = new ParserResult();\n public tags: ParserResult = new ParserResult();\n public tagIds: ParserResult = new ParserResult();\n public performers: ParserResult = new ParserResult();\n public performerIds: ParserResult = new ParserResult();\n\n public scene : SlimSceneDataFragment;\n\n constructor(result : GQL.ParseSceneFilenamesResults) {\n this.scene = result.scene;\n\n this.id = this.scene.id;\n this.filename = TextUtils.fileNameFromPath(this.scene.path);\n this.title.setOriginalValue(this.scene.title);\n this.date.setOriginalValue(this.scene.date);\n this.performerIds.setOriginalValue(this.scene.performers.map((p) => p.id));\n this.performers.setOriginalValue(this.scene.performers);\n this.tagIds.setOriginalValue(this.scene.tags.map((t) => t.id));\n this.tags.setOriginalValue(this.scene.tags);\n this.studioId.setOriginalValue(this.scene.studio ? this.scene.studio.id : undefined);\n this.studio.setOriginalValue(this.scene.studio);\n\n this.title.setValue(result.title);\n this.date.setValue(result.date);\n this.performerIds.setValue(result.performer_ids);\n this.tagIds.setValue(result.tag_ids);\n this.studioId.setValue(result.studio_id);\n\n if (result.performer_ids) {\n this.performers.setValue(result.performer_ids.map((p) => {\n return {\n id: p,\n name: \"\",\n favorite: false,\n image_path: \"\"\n };\n }));\n }\n\n if (result.tag_ids) {\n this.tags.setValue(result.tag_ids.map((t) => {\n return {\n id: t,\n name: \"\",\n };\n }));\n }\n\n if (result.studio_id) {\n this.studio.setValue({\n id: result.studio_id,\n name: \"\",\n image_path: \"\"\n });\n }\n }\n\n private static setInput(object: any, key: string, parserResult : ParserResult) {\n if (parserResult.set) {\n object[key] = parserResult.value;\n }\n }\n\n // returns true if any of its fields have set == true\n public isChanged() {\n return this.title.set || this.date.set || this.performerIds.set || this.studioId.set || this.tagIds.set;\n }\n\n public toSceneUpdateInput() {\n var ret = {\n id: this.id,\n title: this.scene.title,\n details: this.scene.details,\n url: this.scene.url,\n date: this.scene.date,\n rating: this.scene.rating,\n gallery_id: this.scene.gallery ? this.scene.gallery.id : undefined,\n studio_id: this.scene.studio ? this.scene.studio.id : undefined,\n performer_ids: this.scene.performers.map((performer) => performer.id),\n tag_ids: this.scene.tags.map((tag) => tag.id)\n };\n\n SceneParserResult.setInput(ret, \"title\", this.title);\n SceneParserResult.setInput(ret, \"date\", this.date);\n SceneParserResult.setInput(ret, \"performer_ids\", this.performerIds);\n SceneParserResult.setInput(ret, \"studio_id\", this.studioId);\n SceneParserResult.setInput(ret, \"tag_ids\", this.tagIds);\n\n return ret;\n }\n};\n\ninterface IParserInput {\n pattern: string,\n ignoreWords: string[],\n whitespaceCharacters: string,\n capitalizeTitle: boolean,\n page: number,\n pageSize: number,\n findClicked: boolean\n}\n\ninterface IParserRecipe {\n pattern: string,\n ignoreWords: string[],\n whitespaceCharacters: string,\n capitalizeTitle: boolean,\n description: string\n}\n\nconst builtInRecipes = [\n {\n pattern: \"{title}\",\n ignoreWords: [],\n whitespaceCharacters: \"\",\n capitalizeTitle: false,\n description: \"Filename\"\n },\n {\n pattern: \"{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \"\",\n capitalizeTitle: false,\n description: \"Without extension\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.XXX.{}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{title}.XXX.{}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.{i}.{ext}\",\n ignoreWords: [\"cz\", \"fr\"],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"Foreign language\"\n }\n];\n\nexport const SceneFilenameParser: React.FC = () => {\n const [parserResult, setParserResult] = useState([]);\n const [parserInput, setParserInput] = useState(initialParserInput());\n\n const [allTitleSet, setAllTitleSet] = useState(false);\n const [allDateSet, setAllDateSet] = useState(false);\n const [allPerformerSet, setAllPerformerSet] = useState(false);\n const [allTagSet, setAllTagSet] = useState(false);\n const [allStudioSet, setAllStudioSet] = useState(false);\n\n const [showFields, setShowFields] = useState>(initialShowFieldsState());\n \n const [totalItems, setTotalItems] = useState(0);\n\n // Network state\n const [isLoading, setIsLoading] = useState(false);\n\n const updateScenes = StashService.useScenesUpdate(getScenesUpdateData());\n\n function initialParserInput() {\n return {\n pattern: \"{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \"._\",\n capitalizeTitle: true,\n page: 1,\n pageSize: 20,\n findClicked: false\n };\n }\n\n function initialShowFieldsState() {\n return new Map([\n [\"Title\", true],\n [\"Date\", true],\n [\"Performers\", true],\n [\"Tags\", true],\n [\"Studio\", true]\n ]);\n }\n\n function getParserFilter() {\n return {\n q: parserInput.pattern,\n page: parserInput.page,\n per_page: parserInput.pageSize,\n sort: \"path\",\n direction: GQL.SortDirectionEnum.Asc,\n };\n }\n\n function getParserInput() {\n return {\n ignoreWords: parserInput.ignoreWords,\n whitespaceCharacters: parserInput.whitespaceCharacters,\n capitalizeTitle: parserInput.capitalizeTitle\n };\n }\n\n async function onFind() {\n setParserResult([]);\n\n setIsLoading(true);\n \n try {\n const response = await StashService.queryParseSceneFilenames(getParserFilter(), getParserInput());\n\n let result = response.data.parseSceneFilenames;\n if (!!result) {\n parseResults(result.results);\n setTotalItems(result.count);\n }\n } catch (err) {\n ErrorUtils.handle(err);\n }\n\n setIsLoading(false);\n }\n\n useEffect(() => {\n if(parserInput.findClicked) {\n onFind();\n }\n }, [parserInput]);\n\n function onPageSizeChanged(newSize : number) {\n var newInput = _.clone(parserInput);\n newInput.page = 1;\n newInput.pageSize = newSize;\n setParserInput(newInput);\n }\n\n function onPageChanged(newPage : number) {\n if (newPage !== parserInput.page) {\n var newInput = _.clone(parserInput);\n newInput.page = newPage;\n setParserInput(newInput);\n }\n }\n\n function onFindClicked(input : IParserInput) {\n input.page = 1;\n input.findClicked = true;\n setParserInput(input);\n setTotalItems(0);\n }\n\n function getScenesUpdateData() {\n return parserResult.filter((result) => result.isChanged()).map((result) => result.toSceneUpdateInput());\n }\n\n async function onApply() {\n setIsLoading(true);\n\n try {\n await updateScenes();\n ToastUtils.success(\"Updated scenes\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n\n setIsLoading(false);\n }\n\n function parseResults(results : GQL.ParseSceneFilenamesResults[]) {\n if (results) {\n var result = results.map((r) => {\n return new SceneParserResult(r);\n }).filter((r) => !!r) as SceneParserResult[];\n\n setParserResult(result);\n determineFieldsToHide();\n }\n }\n\n function determineFieldsToHide() {\n var pattern = parserInput.pattern;\n var titleSet = pattern.includes(\"{title}\");\n var dateSet = pattern.includes(\"{date}\") || \n pattern.includes(\"{dd}\") || // don't worry about other partial date fields since this should be implied\n ParserField.fullDateFields.some((f) => {\n return pattern.includes(\"{\" + f.field + \"}\");\n });\n var performerSet = pattern.includes(\"{performer}\");\n var tagSet = pattern.includes(\"{tag}\");\n var studioSet = pattern.includes(\"{studio}\");\n\n var showFieldsCopy = _.clone(showFields);\n showFieldsCopy.set(\"Title\", titleSet);\n showFieldsCopy.set(\"Date\", dateSet);\n showFieldsCopy.set(\"Performers\", performerSet);\n showFieldsCopy.set(\"Tags\", tagSet);\n showFieldsCopy.set(\"Studio\", studioSet);\n setShowFields(showFieldsCopy);\n }\n\n useEffect(() => {\n var newAllTitleSet = !parserResult.some((r) => {\n return !r.title.set;\n });\n var newAllDateSet = !parserResult.some((r) => {\n return !r.date.set;\n });\n var newAllPerformerSet = !parserResult.some((r) => {\n return !r.performerIds.set;\n });\n var newAllTagSet = !parserResult.some((r) => {\n return !r.tagIds.set;\n });\n var newAllStudioSet = !parserResult.some((r) => {\n return !r.studioId.set;\n });\n\n if (newAllTitleSet !== allTitleSet) {\n setAllTitleSet(newAllTitleSet);\n }\n if (newAllDateSet !== allDateSet) {\n setAllDateSet(newAllDateSet);\n }\n if (newAllPerformerSet !== allPerformerSet) {\n setAllTagSet(newAllPerformerSet);\n }\n if (newAllTagSet !== allTagSet) {\n setAllTagSet(newAllTagSet);\n }\n if (newAllStudioSet !== allStudioSet) {\n setAllStudioSet(newAllStudioSet);\n }\n }, [parserResult]);\n\n function onSelectAllTitleSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.title.set = selected;\n });\n\n setParserResult(newResult);\n setAllTitleSet(selected);\n }\n\n function onSelectAllDateSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.date.set = selected;\n });\n\n setParserResult(newResult);\n setAllDateSet(selected);\n }\n\n function onSelectAllPerformerSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.performerIds.set = selected;\n });\n\n setParserResult(newResult);\n setAllPerformerSet(selected);\n }\n\n function onSelectAllTagSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.tagIds.set = selected;\n });\n\n setParserResult(newResult);\n setAllTagSet(selected);\n }\n\n function onSelectAllStudioSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.studioId.set = selected;\n });\n\n setParserResult(newResult);\n setAllStudioSet(selected);\n }\n\n interface IShowFieldsProps {\n fields: Map\n onShowFieldsChanged: (fields : Map) => void\n }\n\n function ShowFields(props: IShowFieldsProps) {\n const [open, setOpen] = useState(false);\n\n function handleClick(label: string) {\n const copy = new Map(props.fields);\n copy.set(label, !props.fields.get(label));\n props.onShowFieldsChanged(copy);\n }\n\n const fieldRows = [...props.fields.entries()].map(([label, enabled]) => (\n
    {handleClick(label)}}>\n \n {label}\n
    \n ));\n\n return (\n
    \n
    setOpen(!open)}>\n \n Display fields\n
    \n \n
    \n {fieldRows}\n
    \n
    \n
    \n );\n }\n\n interface IParserInputProps {\n input: IParserInput,\n onFind: (input : IParserInput) => void\n }\n\n function ParserInput(props : IParserInputProps) {\n const [pattern, setPattern] = useState(props.input.pattern);\n const [ignoreWords, setIgnoreWords] = useState(props.input.ignoreWords.join(\" \"));\n const [whitespaceCharacters, setWhitespaceCharacters] = useState(props.input.whitespaceCharacters);\n const [capitalizeTitle, setCapitalizeTitle] = useState(props.input.capitalizeTitle);\n\n function onFind() {\n props.onFind({\n pattern: pattern,\n ignoreWords: ignoreWords.split(\" \"),\n whitespaceCharacters: whitespaceCharacters,\n capitalizeTitle: capitalizeTitle,\n page: 1,\n pageSize: props.input.pageSize,\n findClicked: props.input.findClicked\n });\n }\n\n function setParserRecipe(recipe: IParserRecipe) {\n setPattern(recipe.pattern);\n setIgnoreWords(recipe.ignoreWords.join(\" \"));\n setWhitespaceCharacters(recipe.whitespaceCharacters);\n setCapitalizeTitle(recipe.capitalizeTitle);\n }\n \n const validFields = [new ParserField(\"\", \"Wildcard\")].concat(ParserField.validFields);\n \n function addParserField(field: ParserField) {\n setPattern(pattern + field.getFieldPattern());\n }\n\n const PAGE_SIZE_OPTIONS = [\"20\", \"40\", \"60\", \"120\"];\n\n return (\n \n \n setPattern(newValue.target.value)}\n value={pattern}\n />\n \n { validFields.map(item => (\n addParserField(item)}>\n {item.field}{item.helperText}\n \n ))}\n \n
    Use '\\\\' to escape literal {} characters
    \n
    \n\n \n Ignored words::\n setIgnoreWords(newValue.target.value)}\n value={ignoreWords}\n />\n
    Matches with {\"{i}\"}
    \n
    \n \n \n
    Title
    \n Whitespace characters:\n setWhitespaceCharacters(newValue.target.value)}\n value={whitespaceCharacters}\n />\n \n Capitalize title\n setCapitalizeTitle(!capitalizeTitle)}\n />\n \n
    These characters will be replaced with whitespace in the title
    \n
    \n \n {/* TODO - mapping stuff will go here */}\n\n \n \n { builtInRecipes.map(item => (\n setParserRecipe(item)}>\n {item.pattern}{item.description}\n \n ))}\n \n \n\n \n setShowFields(fields)}\n />\n \n\n \n \n onPageSizeChanged(parseInt(event.target.value))}\n defaultValue={props.input.pageSize}\n className=\"filter-item\"\n >\n { PAGE_SIZE_OPTIONS.map(val => ) }\n \n \n
    \n );\n }\n\n interface ISceneParserFieldProps {\n parserResult : ParserResult\n className? : string\n fieldName : string\n onSetChanged : (set : boolean) => void\n onValueChanged : (value : any) => void\n originalParserResult? : ParserResult\n renderOriginalInputField: (props : ISceneParserFieldProps) => JSX.Element\n renderNewInputField: (props : ISceneParserFieldProps, onChange : (event : any) => void) => JSX.Element\n }\n\n function SceneParserField(props : ISceneParserFieldProps) {\n\n function maybeValueChanged(value : any) {\n if (value !== props.parserResult.value) {\n props.onValueChanged(value);\n }\n }\n\n if (!showFields.get(props.fieldName)) {\n return null;\n }\n\n return (\n <>\n \n {props.onSetChanged(!props.parserResult.set)}}\n />\n \n \n \n {props.renderOriginalInputField(props)}\n {props.renderNewInputField(props, (value) => maybeValueChanged(value))}\n \n \n \n );\n }\n\n function renderOriginalInputGroup(props: ISceneParserFieldProps) {\n var parserResult = props.originalParserResult || props.parserResult;\n\n return (\n \n );\n }\n\n interface IInputGroupWrapperProps {\n parserResult: ParserResult\n onChange : (event : any) => void\n className? : string\n }\n\n function InputGroupWrapper(props: IInputGroupWrapperProps) {\n return (\n props.onChange(event.target.value)}\n />\n );\n }\n \n function renderNewInputGroup(props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return (\n {onChange(value)}}\n parserResult={props.parserResult}\n />\n );\n }\n\n interface HasName {\n name: string\n }\n\n function renderOriginalSelect(props : ISceneParserFieldProps) {\n const parserResult = props.originalParserResult || props.parserResult;\n\n const elements = parserResult.originalValue\n ? Array.isArray(parserResult.originalValue)\n ? parserResult.originalValue.map((el:HasName) => el.name)\n : parserResult.originalValue.name\n : [];\n\n return (\n
    \n { elements.map((name:string) => {name}) }\n
    \n );\n }\n\n function renderNewMultiSelect(type: \"performers\" | \"tags\", props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return (\n {\n const ids = items.map((i) => i.id);\n onChange(ids);\n }}\n initialIds={props.parserResult.value}\n />\n );\n }\n\n function renderNewPerformerSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return renderNewMultiSelect(\"performers\", props, onChange);\n }\n\n function renderNewTagSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return renderNewMultiSelect(\"tags\", props, onChange);\n }\n\n function renderNewStudioSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return (\n onChange(items[0]?.id)}\n initialIds={props.parserResult.value ? [props.parserResult.value] : []}\n />\n );\n }\n\n interface ISceneParserRowProps {\n scene : SceneParserResult,\n onChange: (changedScene : SceneParserResult) => void\n }\n\n function SceneParserRow(props : ISceneParserRowProps) {\n\n function changeParser(result : ParserResult, set : boolean, value : any) {\n var newParser = _.clone(result);\n newParser.set = set;\n newParser.value = value;\n return newParser;\n }\n\n function onTitleChanged(set : boolean, value: string | undefined) {\n var newResult = _.clone(props.scene);\n newResult.title = changeParser(newResult.title, set, value);\n props.onChange(newResult);\n }\n\n function onDateChanged(set : boolean, value: string | undefined) {\n var newResult = _.clone(props.scene);\n newResult.date = changeParser(newResult.date, set, value);\n props.onChange(newResult);\n }\n\n function onPerformerIdsChanged(set : boolean, value: string[] | undefined) {\n var newResult = _.clone(props.scene);\n newResult.performerIds = changeParser(newResult.performerIds, set, value);\n props.onChange(newResult);\n }\n\n function onTagIdsChanged(set : boolean, value: string[] | undefined) {\n var newResult = _.clone(props.scene);\n newResult.tagIds = changeParser(newResult.tagIds, set, value);\n props.onChange(newResult);\n }\n\n function onStudioIdChanged(set : boolean, value: string | undefined) {\n var newResult = _.clone(props.scene);\n newResult.studioId = changeParser(newResult.studioId, set, value);\n props.onChange(newResult);\n }\n\n return (\n \n \n {props.scene.filename}\n \n onTitleChanged(set, props.scene.title.value)}\n onValueChanged={(value) => onTitleChanged(props.scene.title.set, value)}\n renderOriginalInputField={renderOriginalInputGroup}\n renderNewInputField={renderNewInputGroup}\n />\n onDateChanged(set, props.scene.date.value)}\n onValueChanged={(value) => onDateChanged(props.scene.date.set, value)}\n renderOriginalInputField={renderOriginalInputGroup}\n renderNewInputField={renderNewInputGroup}\n />\n onPerformerIdsChanged(set, props.scene.performerIds.value)}\n onValueChanged={(value) => onPerformerIdsChanged(props.scene.performerIds.set, value)}\n renderOriginalInputField={renderOriginalSelect}\n renderNewInputField={renderNewPerformerSelect}\n />\n onTagIdsChanged(set, props.scene.tagIds.value)}\n onValueChanged={(value) => onTagIdsChanged(props.scene.tagIds.set, value)}\n renderOriginalInputField={renderOriginalSelect}\n renderNewInputField={renderNewTagSelect}\n />\n onStudioIdChanged(set, props.scene.studioId.value)}\n onValueChanged={(value) => onStudioIdChanged(props.scene.studioId.set, value)}\n renderOriginalInputField={renderOriginalSelect}\n renderNewInputField={renderNewStudioSelect}\n />\n \n )\n }\n\n function onChange(scene : SceneParserResult, changedScene : SceneParserResult) {\n var newResult = [...parserResult];\n\n var index = newResult.indexOf(scene);\n newResult[index] = changedScene;\n\n setParserResult(newResult);\n }\n\n function renderHeader(fieldName: string, allSet: boolean, onAllSet: (set: boolean) => void) {\n if (!showFields.get(fieldName)) {\n return null;\n }\n\n return (\n <>\n \n {onAllSet(!allSet)}}\n />\n \n {fieldName}\n \n )\n }\n\n function renderTable() {\n if (parserResult.length === 0) { return undefined; }\n\n return (\n <>\n
    \n
    \n \n \n \n \n {renderHeader(\"Title\", allTitleSet, onSelectAllTitleSet)}\n {renderHeader(\"Date\", allDateSet, onSelectAllDateSet)}\n {renderHeader(\"Performers\", allPerformerSet, onSelectAllPerformerSet)}\n {renderHeader(\"Tags\", allTagSet, onSelectAllTagSet)}\n {renderHeader(\"Studio\", allStudioSet, onSelectAllStudioSet)}\n \n \n \n {parserResult.map((scene) => \n onChange(scene, changedScene)}/>\n )}\n \n
    Filename
    \n
    \n onPageChanged(page)}\n />\n \n
    \n \n )\n }\n\n return (\n \n

    Scene Filename Parser

    \n onFindClicked(input)}\n />\n\n {isLoading ? : undefined}\n {renderTable()}\n
    \n );\n};\n \n","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneListTable.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneMarkerList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx",["399","400","401","402","403"],"import axios from \"axios\";\nimport React, { CSSProperties, useEffect, useRef, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { TextUtils } from \"../../../utils/text\";\nimport \"./ScenePlayerScrubber.scss\";\n\ninterface IScenePlayerScrubberProps {\n scene: GQL.SceneDataFragment;\n position: number;\n onSeek: (seconds: number) => void;\n onScrolled: () => void;\n}\n\ninterface ISceneSpriteItem {\n start: number;\n end: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport const ScenePlayerScrubber: React.FC = (props: IScenePlayerScrubberProps) => {\n const contentEl = useRef(null);\n const positionIndicatorEl = useRef(null);\n const scrubberSliderEl = useRef(null);\n const mouseDown = useRef(false);\n const lastMouseEvent = useRef(null);\n const startMouseEvent = useRef(null);\n const velocity = useRef(0);\n\n const _position = useRef(0);\n function getPostion() { return _position.current; }\n function setPosition(newPostion: number, shouldEmit: boolean = true) {\n if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return; }\n if (shouldEmit) { props.onScrolled(); }\n\n const midpointOffset = scrubberSliderEl.current.clientWidth / 2;\n\n const bounds = getBounds() * -1;\n if (newPostion > midpointOffset) {\n _position.current = midpointOffset;\n } else if (newPostion < bounds - midpointOffset) {\n _position.current = bounds - midpointOffset;\n } else {\n _position.current = newPostion;\n }\n\n scrubberSliderEl.current.style.transform = `translateX(${_position.current}px)`;\n\n const indicatorPosition = (\n (newPostion - midpointOffset) / (bounds - (midpointOffset * 2)) * scrubberSliderEl.current.clientWidth\n );\n positionIndicatorEl.current.style.transform = `translateX(${indicatorPosition}px)`;\n }\n\n const [spriteItems, setSpriteItems] = useState([]);\n const [delayedRender, setDelayedRender] = useState(false);\n\n useEffect(() => {\n if (!scrubberSliderEl.current) { return; }\n scrubberSliderEl.current.style.transform = `translateX(${scrubberSliderEl.current.clientWidth / 2}px)`;\n }, [scrubberSliderEl]);\n\n useEffect(() => {\n fetchSpriteInfo();\n }, [props.scene]);\n\n useEffect(() => {\n if (!scrubberSliderEl.current) { return; }\n const duration = Number(props.scene.file.duration);\n const percentage = props.position / duration;\n const position = (\n (scrubberSliderEl.current.scrollWidth * percentage) - (scrubberSliderEl.current.clientWidth / 2)\n ) * -1;\n setPosition(position, false);\n }, [props.position]);\n\n useEffect(() => {\n window.addEventListener(\"mouseup\", onMouseUp, false);\n return () => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n });\n\n useEffect(() => {\n if (!contentEl.current) { return; }\n contentEl.current.addEventListener(\"mousedown\", onMouseDown, false);\n return () => {\n if (!contentEl.current) { return; }\n contentEl.current.removeEventListener(\"mousedown\", onMouseDown);\n };\n });\n\n useEffect(() => {\n if (!contentEl.current) { return; }\n contentEl.current.addEventListener(\"mousemove\", onMouseMove, false);\n return () => {\n if (!contentEl.current) { return; }\n contentEl.current.removeEventListener(\"mousemove\", onMouseMove);\n };\n });\n\n function onMouseUp(this: Window, event: MouseEvent) {\n if (!startMouseEvent.current || !scrubberSliderEl.current) { return; }\n mouseDown.current = false;\n const delta = Math.abs(event.clientX - startMouseEvent.current.clientX);\n if (delta < 1 && event.target instanceof HTMLDivElement) {\n const target: HTMLDivElement = event.target;\n let seekSeconds: number | undefined;\n\n const spriteIdString = target.getAttribute(\"data-sprite-item-id\");\n if (spriteIdString != null) {\n const spritePercentage = event.offsetX / target.clientWidth;\n const offset = target.offsetLeft + (target.clientWidth * spritePercentage);\n const percentage = offset / scrubberSliderEl.current.scrollWidth;\n seekSeconds = percentage * (props.scene.file.duration || 0);\n }\n\n const markerIdString = target.getAttribute(\"data-marker-id\");\n if (markerIdString != null) {\n const marker = props.scene.scene_markers[Number(markerIdString)];\n seekSeconds = marker.seconds;\n }\n\n if (!!seekSeconds) { props.onSeek(seekSeconds); }\n } else if (Math.abs(velocity.current) > 25) {\n const newPosition = getPostion() + (velocity.current * 10);\n setPosition(newPosition);\n velocity.current = 0;\n }\n }\n\n function onMouseDown(this: HTMLDivElement, event: MouseEvent) {\n event.preventDefault();\n mouseDown.current = true;\n lastMouseEvent.current = event;\n startMouseEvent.current = event;\n velocity.current = 0;\n }\n\n function onMouseMove(this: HTMLDivElement, event: MouseEvent) {\n if (!mouseDown.current) { return; }\n\n // negative dragging right (past), positive left (future)\n const delta = event.clientX - lastMouseEvent.current.clientX;\n\n const movement = event.movementX;\n velocity.current = movement;\n\n const newPostion = getPostion() + delta;\n setPosition(newPostion);\n lastMouseEvent.current = event;\n }\n\n function getBounds(): number {\n if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return 0; }\n return scrubberSliderEl.current.scrollWidth - scrubberSliderEl.current.clientWidth;\n }\n\n function goBack() {\n if (!scrubberSliderEl.current) { return; }\n const newPosition = getPostion() + scrubberSliderEl.current.clientWidth;\n setPosition(newPosition);\n }\n\n function goForward() {\n if (!scrubberSliderEl.current) { return; }\n const newPosition = getPostion() - scrubberSliderEl.current.clientWidth;\n setPosition(newPosition);\n }\n\n async function fetchSpriteInfo() {\n if (!props.scene || !props.scene.paths.vtt) { return; }\n\n const response = await axios.get(props.scene.paths.vtt, {responseType: \"text\"});\n if (response.status !== 200) {\n console.log(response.statusText);\n }\n\n // TODO: This is gnarly\n const lines = response.data.split(\"\\n\");\n if (lines.shift() !== \"WEBVTT\") { return; }\n if (lines.shift() !== \"\") { return; }\n let item: ISceneSpriteItem = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0};\n const newSpriteItems: ISceneSpriteItem[] = [];\n while (lines.length) {\n const line = lines.shift();\n if (line === undefined) { continue; }\n\n if (line.includes(\"#\") && line.includes(\"=\") && line.includes(\",\")) {\n const size = line.split(\"#\")[1].split(\"=\")[1].split(\",\");\n item.x = Number(size[0]);\n item.y = Number(size[1]);\n item.w = Number(size[2]);\n item.h = Number(size[3]);\n\n newSpriteItems.push(item);\n item = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0};\n } else if (line.includes(\" --> \")) {\n const times = line.split(\" --> \");\n\n const start = times[0].split(\":\");\n item.start = (+start[0]) * 60 * 60 + (+start[1]) * 60 + (+start[2]);\n\n const end = times[1].split(\":\");\n item.end = (+end[0]) * 60 * 60 + (+end[1]) * 60 + (+end[2]);\n }\n }\n\n setSpriteItems(newSpriteItems);\n // TODO: Very hacky. Need to wait for the scroll width to update from the image loading.\n setTimeout(() => {\n setDelayedRender(true);\n }, 100);\n }\n\n function renderTags() {\n function getTagStyle(i: number): CSSProperties {\n if (!scrubberSliderEl.current ||\n spriteItems.length === 0 ||\n getBounds() === 0) { return {}; }\n\n const tags = window.document.getElementsByClassName(\"scrubber-tag\");\n if (tags.length === 0) { return {}; }\n\n let tag: any;\n for (let index = 0; index < tags.length; index++) {\n tag = tags.item(index) as any;\n const id = tag.getAttribute(\"data-marker-id\");\n if (id === i.toString()) {\n break;\n }\n }\n\n const marker = props.scene.scene_markers[i];\n const duration = Number(props.scene.file.duration);\n const percentage = marker.seconds / duration;\n\n const left = (scrubberSliderEl.current.scrollWidth * percentage) - (tag.clientWidth / 2);\n return {\n left: `${left}px`,\n height: 20,\n };\n }\n\n return props.scene.scene_markers.map((marker, index) => {\n const dataAttrs = {\n \"data-marker-id\": index,\n };\n return (\n \n {marker.title}\n
    \n );\n });\n }\n\n function renderSprites() {\n function getStyleForSprite(index: number): CSSProperties {\n if (!props.scene.paths.vtt) { return {}; }\n const sprite = spriteItems[index];\n const left = sprite.w * index;\n const path = props.scene.paths.vtt.replace(\"_thumbs.vtt\", \"_sprite.jpg\"); // TODO: Gnarly\n return {\n width: `${sprite.w}px`,\n height: `${sprite.h}px`,\n margin: \"0px auto\",\n backgroundPosition: -sprite.x + \"px \" + -sprite.y + \"px\",\n backgroundImage: `url(${path})`,\n left: `${left}px`,\n };\n }\n\n return spriteItems.map((spriteItem, index) => {\n const dataAttrs = {\n \"data-sprite-item-id\": index,\n };\n return (\n \n {TextUtils.secondsToTimestamp(spriteItem.start)} - {TextUtils.secondsToTimestamp(spriteItem.end)}\n
    \n );\n });\n }\n\n return (\n
    \n goBack()}><\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n {renderTags()}\n
    \n {renderSprites()}\n
    \n
    \n
    \n goForward()}>>\n
    \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/helpers.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/scenes.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/select/FilterMultiSelect.tsx",["404","405"],"import * as React from \"react\";\n\nimport { MenuItem } from \"@blueprintjs/core\";\nimport { IMultiSelectProps, ItemPredicate, ItemRenderer, MultiSelect } from \"@blueprintjs/select\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { HTMLInputProps } from \"../../models\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { ToastUtils } from \"../../utils/toasts\";\n\nconst InternalPerformerMultiSelect = MultiSelect.ofType();\nconst InternalTagMultiSelect = MultiSelect.ofType();\nconst InternalStudioMultiSelect = MultiSelect.ofType();\n\ntype ValidTypes =\n GQL.AllPerformersForFilterAllPerformers |\n GQL.AllTagsForFilterAllTags |\n GQL.AllStudiosForFilterAllStudios;\n\ninterface IProps extends HTMLInputProps, Partial> {\n type: \"performers\" | \"studios\" | \"tags\";\n initialIds?: string[];\n onUpdate: (items: ValidTypes[]) => void;\n}\n\nexport const FilterMultiSelect: React.FunctionComponent = (props: IProps) => {\n let MultiSelectImpl = getMultiSelectImpl();\n let InternalMultiSelect = MultiSelectImpl.getInternalMultiSelect();\n const data = MultiSelectImpl.getData();\n \n const [selectedItems, setSelectedItems] = React.useState([]);\n const [items, setItems] = React.useState([]);\n const [newTagName, setNewTagName] = React.useState(\"\");\n const createTag = StashService.useTagCreate(getTagInput() as GQL.TagCreateInput);\n\n React.useEffect(() => {\n if (!!data) {\n MultiSelectImpl.translateData();\n }\n }, [data]);\n \n function getTagInput() {\n const tagInput: Partial = { name: newTagName };\n return tagInput;\n }\n\n async function onCreateNewObject(item: ValidTypes) {\n var created : any;\n if (props.type === \"tags\") {\n try {\n created = await createTag();\n \n items.push(created.data.tagCreate);\n setItems(items.slice());\n addSelectedItem(created.data.tagCreate);\n \n ToastUtils.success(\"Created tag\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n }\n\n function createNewTag(query : string) {\n setNewTagName(query);\n return {\n name : query\n };\n }\n\n function createNewRenderer(query: string, active: boolean, handleClick: React.MouseEventHandler) {\n // if tag already exists with that name, then don't return anything\n if (items.find((item) => {\n return item.name === query;\n })) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n React.useEffect(() => {\n if (!!props.initialIds && !!items) {\n const initialItems = items.filter((item) => props.initialIds!.includes(item.id));\n setSelectedItems(initialItems);\n }\n }, [props.initialIds, items]);\n\n function getMultiSelectImpl() {\n let getInternalMultiSelect: () => new (props: IMultiSelectProps) => MultiSelect;\n let getData: () => GQL.AllPerformersForFilterQuery | GQL.AllStudiosForFilterQuery | GQL.AllTagsForFilterQuery | undefined;\n let translateData: () => void;\n let createNewObject: ((query : string) => void) | undefined = undefined; \n\n switch (props.type) {\n case \"performers\": {\n getInternalMultiSelect = () => { return InternalPerformerMultiSelect; };\n getData = () => { const { data } = StashService.useAllPerformersForFilter(); return data; }\n translateData = () => { let perfData = data as GQL.AllPerformersForFilterQuery; setItems(!!perfData && !!perfData.allPerformers ? perfData.allPerformers : []); };\n break;\n }\n case \"studios\": {\n getInternalMultiSelect = () => { return InternalStudioMultiSelect; };\n getData = () => { const { data } = StashService.useAllStudiosForFilter(); return data; }\n translateData = () => { let studioData = data as GQL.AllStudiosForFilterQuery; setItems(!!studioData && !!studioData.allStudios ? studioData.allStudios : []); };\n break;\n }\n case \"tags\": {\n getInternalMultiSelect = () => { return InternalTagMultiSelect; };\n getData = () => { const { data } = StashService.useAllTagsForFilter(); return data; }\n translateData = () => { let tagData = data as GQL.AllTagsForFilterQuery; setItems(!!tagData && !!tagData.allTags ? tagData.allTags : []); };\n createNewObject = createNewTag;\n break;\n }\n default: {\n throw \"Unhandled case in FilterMultiSelect\";\n }\n }\n\n return {\n getInternalMultiSelect: getInternalMultiSelect,\n getData: getData,\n translateData: translateData,\n createNewObject: createNewObject\n };\n }\n\n const renderItem: ItemRenderer = (item, itemProps) => {\n if (!itemProps.modifiers.matchesPredicate) { return null; }\n return (\n \n );\n };\n\n const filter: ItemPredicate = (query, item) => {\n if (selectedItems.includes(item)) { return false; }\n return item.name!.toLowerCase().indexOf(query.toLowerCase()) >= 0;\n };\n\n function addSelectedItem(item: ValidTypes) {\n selectedItems.push(item);\n setSelectedItems(selectedItems);\n props.onUpdate(selectedItems);\n }\n\n function onItemSelect(item: ValidTypes) {\n if (item.id === undefined) {\n // create the new item, if applicable\n onCreateNewObject(item);\n } else {\n addSelectedItem(item);\n }\n }\n\n function onItemRemove(value: string, index: number) {\n const newSelectedItems = selectedItems.filter((_, i) => i !== index);\n setSelectedItems(newSelectedItems);\n props.onUpdate(newSelectedItems);\n }\n\n return (\n tag.name}\n tagInputProps={{ onRemove: onItemRemove }}\n onItemSelect={onItemSelect}\n resetOnSelect={true}\n popoverProps={{position: \"bottom\"}}\n createNewItemFromQuery={MultiSelectImpl.createNewObject}\n createNewItemRenderer={createNewRenderer}\n {...props}\n />\n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/select/FilterSelect.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/select/MarkerTitleSuggest.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/select/ScrapePerformerSuggest.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/select/ValidGalleriesSelect.tsx",[],"/home/peroo/stash/ui/v2.5/src/core/StashService.ts",[],"/home/peroo/stash/ui/v2.5/src/core/generated-graphql.tsx",[],"/home/peroo/stash/ui/v2.5/src/hooks/ListHook.tsx",["406","407","408","409"],"import { Spinner } from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport queryString from \"query-string\";\nimport React, { useEffect, useState } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { ListFilter } from \"../components/list/ListFilter\";\nimport { Pagination } from \"../components/list/Pagination\";\nimport { StashService } from \"../core/StashService\";\nimport { IBaseProps } from \"../models\";\nimport { Criterion } from \"../models/list-filter/criteria/criterion\";\nimport { ListFilterModel } from \"../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../models/list-filter/types\";\n\nexport interface IListHookData {\n filter: ListFilterModel;\n template: JSX.Element;\n options: IListHookOptions;\n onSelectChange: (id: string, selected : boolean, shiftKey: boolean) => void;\n}\n\ninterface IListHookOperation {\n text: string;\n onClick: (result: QueryHookResult, filter: ListFilterModel, selectedIds: Set) => void;\n}\n\nexport interface IListHookOptions {\n filterMode: FilterMode;\n props: IBaseProps;\n zoomable?: boolean;\n otherOperations?: IListHookOperation[];\n renderContent: (result: QueryHookResult, filter: ListFilterModel, selectedIds: Set, zoomIndex: number) => JSX.Element | undefined;\n renderSelectedOptions?: (result: QueryHookResult, selectedIds: Set) => JSX.Element | undefined;\n}\n\nexport class ListHook {\n public static useList(options: IListHookOptions): IListHookData {\n const [filter, setFilter] = useState(new ListFilterModel(options.filterMode));\n const [selectedIds, setSelectedIds] = useState>(new Set());\n const [lastClickedId, setLastClickedId] = useState(undefined);\n const [totalCount, setTotalCount] = useState(0);\n const [zoomIndex, setZoomIndex] = useState(1);\n\n // Update the filter when the query parameters change\n useEffect(() => {\n const queryParams = queryString.parse(options.props.location.search);\n const newFilter = _.cloneDeep(filter);\n newFilter.configureFromQueryParameters(queryParams);\n setFilter(newFilter);\n\n // TODO: Need this side effect to update the query params properly\n filter.configureFromQueryParameters(queryParams);\n }, [options.props.location.search]);\n\n let result: QueryHookResult;\n\n let getData: (filter : ListFilterModel) => QueryHookResult;\n let getItems: () => any[];\n let getCount: () => number;\n\n switch (options.filterMode) {\n case FilterMode.Scenes: {\n getData = (filter : ListFilterModel) => { return StashService.useFindScenes(filter); }\n getItems = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.scenes : []; }\n getCount = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.count : 0; }\n break;\n }\n case FilterMode.SceneMarkers: {\n getData = (filter : ListFilterModel) => { return StashService.useFindSceneMarkers(filter); }\n getItems = () => { return !!result.data && !!result.data.findSceneMarkers ? result.data.findSceneMarkers.scene_markers : []; }\n getCount = () => { return !!result.data && !!result.data.findSceneMarkers ? result.data.findSceneMarkers.count : 0; }\n break;\n }\n case FilterMode.Galleries: {\n getData = (filter : ListFilterModel) => { return StashService.useFindGalleries(filter); }\n getItems = () => { return !!result.data && !!result.data.findGalleries ? result.data.findGalleries.galleries : []; }\n getCount = () => { return !!result.data && !!result.data.findGalleries ? result.data.findGalleries.count : 0; }\n break;\n }\n case FilterMode.Studios: {\n getData = (filter : ListFilterModel) => { return StashService.useFindStudios(filter); }\n getItems = () => { return !!result.data && !!result.data.findStudios ? result.data.findStudios.studios : []; }\n getCount = () => { return !!result.data && !!result.data.findStudios ? result.data.findStudios.count : 0; }\n break;\n }\n case FilterMode.Performers: {\n getData = (filter : ListFilterModel) => { return StashService.useFindPerformers(filter); }\n getItems = () => { return !!result.data && !!result.data.findPerformers ? result.data.findPerformers.performers : []; }\n getCount = () => { return !!result.data && !!result.data.findPerformers ? result.data.findPerformers.count : 0; }\n break;\n }\n default: {\n console.error(\"REMOVE DEFAULT IN LIST HOOK\");\n getData = (filter : ListFilterModel) => { return StashService.useFindScenes(filter); }\n getItems = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.scenes : []; }\n getCount = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.count : 0; }\n break;\n }\n }\n\n result = getData(filter);\n\n useEffect(() => {\n setTotalCount(getCount());\n\n // select none when data changes\n onSelectNone();\n setLastClickedId(undefined);\n }, [result.data])\n\n // Update the query parameters when the data changes\n useEffect(() => {\n const location = Object.assign({}, options.props.history.location);\n location.search = filter.makeQueryParameters();\n options.props.history.replace(location);\n }, [result.data, filter.displayMode]);\n\n // Update the total count\n useEffect(() => {\n const newFilter = _.cloneDeep(filter);\n newFilter.totalCount = totalCount;\n setFilter(newFilter);\n }, [totalCount]);\n\n function onChangePageSize(pageSize: number) {\n const newFilter = _.cloneDeep(filter);\n newFilter.itemsPerPage = pageSize;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeQuery(query: string) {\n const newFilter = _.cloneDeep(filter);\n newFilter.searchTerm = query;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeSortDirection(sortDirection: \"asc\" | \"desc\") {\n const newFilter = _.cloneDeep(filter);\n newFilter.sortDirection = sortDirection;\n setFilter(newFilter);\n }\n\n function onChangeSortBy(sortBy: string) {\n const newFilter = _.cloneDeep(filter);\n newFilter.sortBy = sortBy;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeDisplayMode(displayMode: DisplayMode) {\n const newFilter = _.cloneDeep(filter);\n newFilter.displayMode = displayMode;\n setFilter(newFilter);\n }\n\n function onAddCriterion(criterion: Criterion, oldId?: string) {\n const newFilter = _.cloneDeep(filter);\n\n // Find if we are editing an existing criteria, then modify that. Or create a new one.\n const existingIndex = newFilter.criteria.findIndex((c) => {\n // If we modified an existing criterion, then look for the old id.\n const id = !!oldId ? oldId : criterion.getId();\n return c.getId() === id;\n });\n if (existingIndex === -1) {\n newFilter.criteria.push(criterion);\n } else {\n newFilter.criteria[existingIndex] = criterion;\n }\n\n // Remove duplicate modifiers\n newFilter.criteria = newFilter.criteria.filter((obj, pos, arr) => {\n return arr.map((mapObj: any) => mapObj.getId()).indexOf(obj.getId()) === pos;\n });\n\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onRemoveCriterion(removedCriterion: Criterion) {\n const newFilter = _.cloneDeep(filter);\n newFilter.criteria = newFilter.criteria.filter((criterion) => criterion.getId() !== removedCriterion.getId());\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangePage(page: number) {\n const newFilter = _.cloneDeep(filter);\n newFilter.currentPage = page;\n setFilter(newFilter);\n }\n\n function onSelectChange(id: string, selected : boolean, shiftKey: boolean) {\n if (shiftKey) {\n multiSelect(id, selected);\n } else {\n singleSelect(id, selected);\n }\n }\n\n function singleSelect(id: string, selected: boolean) {\n setLastClickedId(id);\n \n const newSelectedIds = _.clone(selectedIds);\n if (selected) {\n newSelectedIds.add(id);\n } else {\n newSelectedIds.delete(id);\n }\n\n setSelectedIds(newSelectedIds);\n }\n\n function multiSelect(id: string, selected : boolean) {\n let startIndex = 0;\n let thisIndex = -1;\n \n if (!!lastClickedId) {\n startIndex = getItems().findIndex((item) => {\n return item.id === lastClickedId;\n });\n }\n\n thisIndex = getItems().findIndex((item) => {\n return item.id === id;\n });\n\n selectRange(startIndex, thisIndex);\n }\n \n function selectRange(startIndex : number, endIndex : number) {\n if (startIndex > endIndex) {\n let tmp = startIndex;\n startIndex = endIndex;\n endIndex = tmp;\n }\n \n const subset = getItems().slice(startIndex, endIndex + 1);\n const newSelectedIds : Set = new Set();\n\n subset.forEach((item) => {\n newSelectedIds.add(item.id);\n });\n\n setSelectedIds(newSelectedIds);\n }\n\n function onSelectAll() {\n const newSelectedIds : Set = new Set();\n getItems().forEach((item) => {\n newSelectedIds.add(item.id);\n });\n\n setSelectedIds(newSelectedIds);\n setLastClickedId(undefined);\n }\n\n function onSelectNone() {\n const newSelectedIds : Set = new Set();\n setSelectedIds(newSelectedIds);\n setLastClickedId(undefined);\n }\n\n function onChangeZoom(newZoomIndex : number) {\n setZoomIndex(newZoomIndex);\n }\n\n const otherOperations = options.otherOperations ? options.otherOperations.map((o) => {\n return {\n text: o.text,\n onClick: () => {\n o.onClick(result, filter, selectedIds);\n }\n }\n }) : undefined;\n\n const template = (\n
    \n \n {options.renderSelectedOptions && selectedIds.size > 0 ? options.renderSelectedOptions(result, selectedIds) : undefined}\n {result.loading ? : undefined}\n {result.error ?

    {result.error.message}

    : undefined}\n {options.renderContent(result, filter, selectedIds, zoomIndex)}\n \n
    \n );\n\n return { filter, template, options, onSelectChange };\n }\n}\n","/home/peroo/stash/ui/v2.5/src/hooks/LocalForage.ts",[],"/home/peroo/stash/ui/v2.5/src/hooks/VideoHover.ts",[],"/home/peroo/stash/ui/v2.5/src/index.tsx",[],"/home/peroo/stash/ui/v2.5/src/models/base-props.ts",[],"/home/peroo/stash/ui/v2.5/src/models/index.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/criterion.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/favorite.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/has-markers.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/is-missing.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/none.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/performers.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/rating.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/resolution.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/studios.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/tags.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/utils.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/filter.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/types.ts",[],"/home/peroo/stash/ui/v2.5/src/models/react-images.d.ts",[],"/home/peroo/stash/ui/v2.5/src/models/react-jw-player.d.ts",[],"/home/peroo/stash/ui/v2.5/src/models/types.ts",[],"/home/peroo/stash/ui/v2.5/src/react-app-env.d.ts",[],"/home/peroo/stash/ui/v2.5/src/serviceWorker.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/color.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/editabletext.tsx",[],"/home/peroo/stash/ui/v2.5/src/utils/errors.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/image.tsx",[],"/home/peroo/stash/ui/v2.5/src/utils/navigation.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/table.tsx",[],"/home/peroo/stash/ui/v2.5/src/utils/text.ts",["410"],"export class TextUtils {\n\n public static truncate(value?: string, limit: number = 100, tail: string = \"...\"): string {\n if (!value) { return \"\"; }\n return value.length > limit ? value.substring(0, limit) + tail : value;\n }\n\n public static fileSize(bytes: number = 0, precision: number = 2): string {\n if (isNaN(parseFloat(String(bytes))) || !isFinite(bytes)) { return \"?\"; }\n\n let unit = 0;\n while ( bytes >= 1024 ) {\n bytes /= 1024;\n unit++;\n }\n\n return bytes.toFixed(+precision) + \" \" + this.units[unit];\n }\n\n public static secondsToTimestamp(seconds: number): string {\n let ret = new Date(seconds * 1000).toISOString().substr(11, 8);\n\n if (ret.startsWith(\"00\")) {\n // strip hours if under one hour\n ret = ret.substr(3);\n }\n if (ret.startsWith(\"0\")) {\n // for duration under a minute, leave one leading zero\n ret = ret.substr(1);\n }\n return ret;\n }\n\n public static fileNameFromPath(path: string): string {\n if (!!path === false) { return \"No File Name\"; }\n return path.replace(/^.*[\\\\\\/]/, \"\");\n }\n\n public static age(dateString?: string, fromDateString?: string): number {\n if (!dateString) { return 0; }\n\n const birthdate = new Date(dateString);\n const fromDate = !!fromDateString ? new Date(fromDateString) : new Date();\n\n let age = fromDate.getFullYear() - birthdate.getFullYear();\n if (birthdate.getMonth() > fromDate.getMonth() ||\n (birthdate.getMonth() >= fromDate.getMonth() && birthdate.getDay() > fromDate.getDay())) {\n age -= 1;\n }\n\n return age;\n }\n\n public static bitRate(bitrate: number) {\n const megabits = bitrate / 1000000;\n return `${megabits.toFixed(2)} megabits per second`;\n }\n\n public static resolution(height: number) {\n if (height >= 240 && height < 480) {\n return \"240p\";\n } else if (height >= 480 && height < 720) {\n return \"480p\";\n } else if (height >= 720 && height < 1080) {\n return \"720p\";\n } else if (height >= 1080 && height < 2160) {\n return \"1080p\";\n } else if (height >= 2160) {\n return \"4K\";\n } else {\n return undefined;\n }\n }\n\n private static units = [\n \"bytes\",\n \"kB\",\n \"MB\",\n \"GB\",\n \"TB\",\n \"PB\",\n ];\n}\n","/home/peroo/stash/ui/v2.5/src/utils/toasts.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/zoom.ts",[],{"ruleId":"411","severity":1,"message":"412","line":20,"column":6,"nodeType":"413","endLine":20,"endColumn":12,"fix":"414"},{"ruleId":"411","severity":1,"message":"415","line":26,"column":6,"nodeType":"413","endLine":26,"endColumn":13,"fix":"416"},{"ruleId":"411","severity":1,"message":"417","line":67,"column":6,"nodeType":"413","endLine":67,"endColumn":12,"fix":"418"},{"ruleId":"411","severity":1,"message":"419","line":49,"column":6,"nodeType":"413","endLine":49,"endColumn":19,"fix":"420"},{"ruleId":"411","severity":1,"message":"421","line":92,"column":6,"nodeType":"413","endLine":92,"endColumn":12,"fix":"422"},{"ruleId":"411","severity":1,"message":"423","line":101,"column":6,"nodeType":"413","endLine":101,"endColumn":20,"fix":"424"},{"ruleId":"411","severity":1,"message":"425","line":117,"column":6,"nodeType":"413","endLine":117,"endColumn":16,"fix":"426"},{"ruleId":"411","severity":1,"message":"412","line":85,"column":6,"nodeType":"413","endLine":85,"endColumn":12,"fix":"427"},{"ruleId":"411","severity":1,"message":"428","line":94,"column":6,"nodeType":"413","endLine":94,"endColumn":17,"fix":"429"},{"ruleId":"411","severity":1,"message":"412","line":28,"column":6,"nodeType":"413","endLine":28,"endColumn":12,"fix":"430"},{"ruleId":"411","severity":1,"message":"431","line":30,"column":3,"nodeType":"432","endLine":30,"endColumn":12,"fix":"433"},{"ruleId":"411","severity":1,"message":"434","line":343,"column":6,"nodeType":"413","endLine":343,"endColumn":19,"fix":"435"},{"ruleId":"411","severity":1,"message":"436","line":448,"column":6,"nodeType":"413","endLine":448,"endColumn":20,"fix":"437"},{"ruleId":"438","severity":1,"message":"439","line":58,"column":10,"nodeType":"432","endLine":58,"endColumn":23},{"ruleId":"411","severity":1,"message":"440","line":67,"column":6,"nodeType":"413","endLine":67,"endColumn":19,"fix":"441"},{"ruleId":"411","severity":1,"message":"442","line":77,"column":6,"nodeType":"413","endLine":77,"endColumn":22,"fix":"443"},{"ruleId":"411","severity":1,"message":"444","line":91,"column":17,"nodeType":"432","endLine":91,"endColumn":24},{"ruleId":"411","severity":1,"message":"444","line":100,"column":17,"nodeType":"432","endLine":100,"endColumn":24},{"ruleId":"411","severity":1,"message":"445","line":40,"column":6,"nodeType":"413","endLine":40,"endColumn":12,"fix":"446"},{"ruleId":"447","severity":1,"message":"448","line":123,"column":9,"nodeType":"449","messageId":"450","endLine":123,"endColumn":53},{"ruleId":"411","severity":1,"message":"451","line":52,"column":8,"nodeType":"413","endLine":52,"endColumn":39,"fix":"452"},{"ruleId":"411","severity":1,"message":"453","line":108,"column":8,"nodeType":"413","endLine":108,"endColumn":21,"fix":"454"},{"ruleId":"411","severity":1,"message":"455","line":115,"column":8,"nodeType":"413","endLine":115,"endColumn":41,"fix":"456"},{"ruleId":"411","severity":1,"message":"451","line":122,"column":8,"nodeType":"413","endLine":122,"endColumn":20,"fix":"457"},{"ruleId":"458","severity":1,"message":"459","line":36,"column":32,"nodeType":"460","messageId":"461","endLine":36,"endColumn":33,"suggestions":"462"},"react-hooks/exhaustive-deps","React Hook useEffect has missing dependencies: 'error' and 'loading'. Either include them or remove the dependency array.","ArrayExpression",{"range":"463","text":"464"},"React Hook useEffect has a missing dependency: 'props.history'. Either include it or remove the dependency array.",{"range":"465","text":"466"},"React Hook useEffect has a missing dependency: 'error'. Either include it or remove the dependency array.",{"range":"467","text":"468"},"React Hook useEffect has a missing dependency: 'config.error'. Either include it or remove the dependency array.",{"range":"469","text":"470"},"React Hook useEffect has missing dependencies: 'filterByLogLevel', 'prependLogEntries', and 'updateFilteredEntries'. Either include them or remove the dependency array.",{"range":"471","text":"472"},"React Hook useEffect has missing dependencies: 'appendLogEntries' and 'updateFilteredEntries'. Either include them or remove the dependency array.",{"range":"473","text":"474"},"React Hook useEffect has a missing dependency: 'updateFilteredEntries'. Either include it or remove the dependency array.",{"range":"475","text":"476"},{"range":"477","text":"464"},"React Hook useEffect has a missing dependency: 'isNew'. Either include it or remove the dependency array.",{"range":"478","text":"479"},{"range":"480","text":"464"},"React Hook useEffect contains a call to 'setTimestamp'. Without a list of dependencies, this can lead to an infinite chain of updates. To fix this, pass [props.location.search, timestamp] as a second argument to the useEffect Hook.","Identifier",{"range":"481","text":"482"},"React Hook useEffect has a missing dependency: 'onFind'. Either include it or remove the dependency array.",{"range":"483","text":"484"},"React Hook useEffect has missing dependencies: 'allDateSet', 'allPerformerSet', 'allStudioSet', 'allTagSet', and 'allTitleSet'. Either include them or remove the dependency array.",{"range":"485","text":"486"},"@typescript-eslint/no-unused-vars","'delayedRender' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'fetchSpriteInfo'. Either include it or remove the dependency array.",{"range":"487","text":"488"},"React Hook useEffect has missing dependencies: 'props.scene.file.duration' and 'setPosition'. Either include them or remove the dependency array.",{"range":"489","text":"490"},"The ref value 'contentEl.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'contentEl.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook React.useEffect has a missing dependency: 'MultiSelectImpl'. Either include it or remove the dependency array.",{"range":"491","text":"492"},"no-throw-literal","Expected an error object to be thrown.","ThrowStatement","object","React Hook useEffect has a missing dependency: 'filter'. Either include it or remove the dependency array.",{"range":"493","text":"494"},"React Hook useEffect has a missing dependency: 'getCount'. Either include it or remove the dependency array.",{"range":"495","text":"496"},"React Hook useEffect has missing dependencies: 'filter' and 'options.props.history'. Either include them or remove the dependency array.",{"range":"497","text":"498"},{"range":"499","text":"500"},"no-useless-escape","Unnecessary escape character: \\/.","Literal","unnecessaryEscape",["501","502"],[766,772],"[data, error, loading]",[983,990],"[props.history, tabId]",[2592,2598],"[data, error]",[1925,1938],"[config.data, config.error]",[2796,2802],"[data, filterByLogLevel, prependLogEntries, updateFilteredEntries]",[3020,3034],"[appendLogEntries, existingData, updateFilteredEntries]",[3422,3432],"[logLevel, updateFilteredEntries]",[4401,4407],[4596,4607],"[isNew, performer]",[1360,1366],[1772,1772],", [props.location.search, timestamp]",[9771,9784],"[onFind, parserInput]",[12750,12764],"[allDateSet, allPerformerSet, allStudioSet, allTagSet, allTitleSet, parserResult]",[2298,2311],"[fetchSpriteInfo, props.scene]",[2667,2683],"[props.position, props.scene.file.duration, setPosition]",[1668,1674],"[MultiSelectImpl, data]",[2305,2336],"[filter, options.props.location.search]",[5171,5184],"[getCount, result.data]",[5448,5481],"[result.data, filter.displayMode, options.props.history, filter]",[5658,5670],"[filter, totalCount]",{"messageId":"503","fix":"504","desc":"505"},{"messageId":"506","fix":"507","desc":"508"},"removeEscape",{"range":"509","text":"510"},"Remove the `\\`. This maintains the current functionality.","escapeBackslash",{"range":"511","text":"512"},"Replace the `\\` with `\\\\` to include the actual backslash character.",[1068,1069],"",[1068,1068],"\\"] \ No newline at end of file diff --git a/ui/v2.5/.eslintrc.json b/ui/v2.5/.eslintrc.json index 1c1fff5fd8d..fbbe988f84d 100644 --- a/ui/v2.5/.eslintrc.json +++ b/ui/v2.5/.eslintrc.json @@ -1,8 +1,8 @@ { - "extends": [ - "react-app" - ], - "rules": { - "jsx-a11y/anchor-is-valid": "off" - } + "extends": [ + "react-app" + ], + "rules": { + "jsx-a11y/anchor-is-valid": "off" + } } diff --git a/ui/v2.5/package.json b/ui/v2.5/package.json index caf9e0bdb90..6b69c1a54c7 100644 --- a/ui/v2.5/package.json +++ b/ui/v2.5/package.json @@ -3,8 +3,6 @@ "version": "0.1.0", "private": true, "dependencies": { - "@blueprintjs/core": "3.22.1", - "@blueprintjs/select": "3.11.2", "@fortawesome/fontawesome-svg-core": "^1.2.26", "@fortawesome/free-solid-svg-icons": "^5.12.0", "@fortawesome/react-fontawesome": "^0.1.8", @@ -12,11 +10,13 @@ "apollo-link-ws": "^1.0.19", "axios": "0.18.1", "bootstrap": "^4.4.1", + "classnames": "^2.2.6", "formik": "1.5.7", "graphql": "14.3.1", "localforage": "1.7.3", "lodash": "4.17.13", "node-sass": "4.12.0", + "normalize.css": "^8.0.1", "query-string": "6.5.0", "react": "~16.12.0", "react-apollo": "2.5.6", @@ -53,6 +53,7 @@ "not op_mini all" ], "devDependencies": { + "@types/classnames": "^2.2.9", "@types/jest": "24.0.13", "@types/lodash": "4.14.132", "@types/node": "11.13.0", diff --git a/ui/v2.5/src/App.tsx b/ui/v2.5/src/App.tsx index a5a457ea1d8..4b4b1a6e9ca 100755 --- a/ui/v2.5/src/App.tsx +++ b/ui/v2.5/src/App.tsx @@ -11,7 +11,7 @@ import { Stats } from "./components/Stats"; import Studios from "./components/Studios/Studios"; import Tags from "./components/Tags/Tags"; import { SceneFilenameParser } from "./components/scenes/SceneFilenameParser"; -import { ToastProvider } from './components/Shared/Toast'; +import { ToastProvider } from 'src/hooks/Toast'; import { library } from '@fortawesome/fontawesome-svg-core' import { fas } from '@fortawesome/free-solid-svg-icons' diff --git a/ui/v2.5/src/components/Galleries/Gallery.tsx b/ui/v2.5/src/components/Galleries/Gallery.tsx index f2167354e12..a895549ce49 100644 --- a/ui/v2.5/src/components/Galleries/Gallery.tsx +++ b/ui/v2.5/src/components/Galleries/Gallery.tsx @@ -1,26 +1,20 @@ -import React, { useEffect, useState } from "react"; +import React from "react"; import { Spinner } from 'react-bootstrap'; -import * as GQL from "../../core/generated-graphql"; -import { StashService } from "../../core/StashService"; -import { IBaseProps } from "../../models"; +import { useParams } from 'react-router-dom'; +import { StashService } from "src/core/StashService"; import { GalleryViewer } from "./GalleryViewer"; -interface IProps extends IBaseProps {} +export const Gallery: React.FC = () => { + const { id = '' } = useParams(); -export const Gallery: React.FC = (props: IProps) => { - const [gallery, setGallery] = useState>({}); - const [isLoading, setIsLoading] = useState(false); + const { data, error, loading } = StashService.useFindGallery(id); + const gallery = data?.findGallery; - const { data, error, loading } = StashService.useFindGallery(props.match.params.id); + if (loading || !gallery) + return ; + if (error) + return
    {error.message}
    ; - useEffect(() => { - setIsLoading(loading); - if (!data || !data.findGallery || !!error) { return; } - setGallery(data.findGallery); - }, [data]); - - if (!data || !data.findGallery || isLoading) { return ; } - if (!!error) { return <>{error.message}; } return (
    diff --git a/ui/v2.5/src/components/Galleries/GalleryList.tsx b/ui/v2.5/src/components/Galleries/GalleryList.tsx index 29a1b905f94..49f30630744 100644 --- a/ui/v2.5/src/components/Galleries/GalleryList.tsx +++ b/ui/v2.5/src/components/Galleries/GalleryList.tsx @@ -2,11 +2,11 @@ import React from "react"; import { Table } from 'react-bootstrap'; import { QueryHookResult } from "react-apollo-hooks"; import { Link } from "react-router-dom"; -import { FindGalleriesQuery, FindGalleriesVariables } from "../../core/generated-graphql"; -import { ListHook } from "../../hooks/ListHook"; -import { IBaseProps } from "../../models/base-props"; -import { ListFilterModel } from "../../models/list-filter/filter"; -import { DisplayMode, FilterMode } from "../../models/list-filter/types"; +import { FindGalleriesQuery, FindGalleriesVariables } from "src/core/generated-graphql"; +import { ListHook } from "src/hooks"; +import { IBaseProps } from "src/models/base-props"; +import { ListFilterModel } from "src/models/list-filter/filter"; +import { DisplayMode, FilterMode } from "src/models/list-filter/types"; interface IProps extends IBaseProps {} diff --git a/ui/v2.5/src/components/Galleries/GalleryViewer.tsx b/ui/v2.5/src/components/Galleries/GalleryViewer.tsx index 55bc2e99d02..25d96ef4be7 100644 --- a/ui/v2.5/src/components/Galleries/GalleryViewer.tsx +++ b/ui/v2.5/src/components/Galleries/GalleryViewer.tsx @@ -1,17 +1,17 @@ import React, { FunctionComponent, useState } from "react"; import Lightbox from "react-images"; import Gallery from "react-photo-gallery"; -import * as GQL from "../../core/generated-graphql"; +import * as GQL from "src/core/generated-graphql"; interface IProps { gallery: GQL.GalleryDataFragment; } -export const GalleryViewer: FunctionComponent = (props: IProps) => { +export const GalleryViewer: FunctionComponent = ({ gallery }) => { const [currentImage, setCurrentImage] = useState(0); const [lightboxIsOpen, setLightboxIsOpen] = useState(false); - function openLightbox(event: any, obj: any) { + function openLightbox(_event: React.MouseEvent, obj: {index: number}) { setCurrentImage(obj.index); setLightboxIsOpen(true); } @@ -26,8 +26,8 @@ export const GalleryViewer: FunctionComponent = (props: IProps) => { setCurrentImage(currentImage + 1); } - const photos = props.gallery.files.map((file) => ({src: file.path || "", caption: file.name})); - const thumbs = props.gallery.files.map((file) => ({src: `${file.path}?thumb=true` || "", width: 1, height: 1})); + const photos = gallery.files.map((file) => ({src: file.path || "", caption: file.name})); + const thumbs = gallery.files.map((file) => ({src: `${file.path}?thumb=true` || "", width: 1, height: 1})); return (
    diff --git a/ui/v2.5/src/components/MainNavbar.tsx b/ui/v2.5/src/components/MainNavbar.tsx index 410d69b280b..802b7867171 100644 --- a/ui/v2.5/src/components/MainNavbar.tsx +++ b/ui/v2.5/src/components/MainNavbar.tsx @@ -71,6 +71,7 @@ export const MainNavbar: React.FC = () => { activeClassName="active" exact={true} to={i.href} + key={i.href} > + + + )) : '' + } - { (excludes) ? excludes.map((regexp, i) => { - return( - excludeRegexChanged(i, e.target.value)} - rightElement={

    - + rel="noopener noreferrer" + target="_blank" + > + Regexps of files/paths to exclude from Scan and add to Clean + +

    - - - - - -

    Video

    - + + +
    + + +

    Video

    + + Maximum transcode size + + onChange={(event:React.FormEvent) => setMaxTranscodeSize(translateQuality(event.currentTarget.value))} + value={resolutionToString(maxTranscodeSize)} > - setMaxTranscodeSize(translateQuality(event.target.value))} - value={resolutionToString(maxTranscodeSize)} - /> -
    - ())} + + Maximum size for generated transcodes + + + Maximum streaming transcode size + ) => setMaxStreamingTranscodeSize(translateQuality(event.currentTarget.value))} + value={resolutionToString(maxStreamingTranscodeSize)} > - setMaxStreamingTranscodeSize(translateQuality(event.target.value))} - value={resolutionToString(maxStreamingTranscodeSize)} - /> - -
    - - - + { transcodeQualities.map(q => ())} + + Maximum size for transcoded streams + + + +
    + +

    Authentication

    - - setUsername(e.target.value)} /> - - - setPassword(e.target.value)} /> - -
    + + Username + ) => setUsername(e.currentTarget.value)} /> + Username to access Stash. Leave blank to disable user authentication + + + Password + ) => setPassword(e.currentTarget.value)} /> + Password to access Stash. Leave blank to disable user authentication + + + +
    -

    Logging

    - - setLogFile(e.target.value)} /> - - - - + Log file + ) => setLogFile(e.currentTarget.value)} /> + Path to the file to output logging to. Blank to disable file logging. Requires restart. + + + + setLogOut(!logOut)} /> - + Logs to the terminal in addition to a file. Always true if file logging is disabled. Requires restart. + - - setLogLevel(event.target.value)} + + Log Level + ) => setLogLevel(event.currentTarget.value)} value={logLevel} - /> - + > + { ["Debug", "Info", "Warning", "Error"].map(o => ()) } + + - - + setLogAccess(!logAccess)} /> - + Logs http access to the terminal. Requires restart. + + +
    - - + ); }; diff --git a/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx b/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx index 49013a3d8e3..7f665ddbad5 100644 --- a/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx +++ b/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx @@ -1,20 +1,10 @@ -import { - Button, - Checkbox, - Divider, - FormGroup, - Spinner, - TextArea, - NumericInput -} from "@blueprintjs/core"; -import React, { FunctionComponent, useEffect, useState } from "react"; -import { StashService } from "../../core/StashService"; -import { ErrorUtils } from "../../utils/errors"; -import { ToastUtils } from "../../utils/toasts"; +import React, { useEffect, useState } from "react"; +import { Button, Form, Spinner } from 'react-bootstrap'; +import { StashService } from "src/core/StashService"; +import { useToast } from 'src/hooks'; -interface IProps {} - -export const SettingsInterfacePanel: FunctionComponent = () => { +export const SettingsInterfacePanel: React.FC = () => { + const Toast = useToast(); const config = StashService.useConfiguration(); const [soundOnPreview, setSoundOnPreview] = useState(); const [wallShowTitle, setWallShowTitle] = useState(); @@ -35,66 +25,63 @@ export const SettingsInterfacePanel: FunctionComponent = () => { }); useEffect(() => { - if (!config.data || !config.data.configuration || !!config.error) { return; } - if (!!config.data.configuration.interface) { - let iCfg = config.data.configuration.interface; - setSoundOnPreview(iCfg.soundOnPreview !== undefined ? iCfg.soundOnPreview : true); - setWallShowTitle(iCfg.wallShowTitle !== undefined ? iCfg.wallShowTitle : true); - setMaximumLoopDuration(iCfg.maximumLoopDuration || 0); - setAutostartVideo(iCfg.autostartVideo !== undefined ? iCfg.autostartVideo : false); - setShowStudioAsText(iCfg.showStudioAsText !== undefined ? iCfg.showStudioAsText : false); - setCSS(config.data.configuration.interface.css || ""); - setCSSEnabled(config.data.configuration.interface.cssEnabled || false); - } - }, [config.data]); + if (config.error) + return; + + const iCfg = config?.data?.configuration?.interface; + setSoundOnPreview(iCfg?.soundOnPreview ?? true); + setWallShowTitle(iCfg?.wallShowTitle ?? true); + setMaximumLoopDuration(iCfg?.maximumLoopDuration ?? 0); + setAutostartVideo(iCfg?.autostartVideo ?? false); + setShowStudioAsText(iCfg?.showStudioAsText ?? false); + setCSS(iCfg?.css ?? ""); + setCSSEnabled(iCfg?.cssEnabled ?? false); + }, [config]); async function onSave() { try { const result = await updateInterfaceConfig(); console.log(result); - ToastUtils.success("Updated config"); + Toast.success({ content: "Updated config" }); } catch (e) { - ErrorUtils.handle(e); + Toast.error(e); } } return ( <> - {!!config.error ?

    {config.error.message}

    : undefined} - {(!config.data || !config.data.configuration || config.loading) ? : undefined} + {config.error ?

    {config.error.message}

    : ''} + {(!config?.data?.configuration || config.loading) ? : ''}

    User Interface

    - - + Scene / Marker Wall + setWallShowTitle(!wallShowTitle)} /> - setSoundOnPreview(!soundOnPreview)} /> - + Configuration for wall items + - - + Scene List + { setShowStudioAsText(!showStudioAsText) }} /> - - - - + + + Scene Player + { @@ -102,25 +89,22 @@ export const SettingsInterfacePanel: FunctionComponent = () => { }} /> - - + Maximum loop duration + setMaximumLoopDuration(value)} + defaultValue={maximumLoopDuration} + onChange={(event:React.FormEvent) => setMaximumLoopDuration(Number.parseInt(event.currentTarget.value) ?? 0)} min={0} - minorStepSize={1} + step={1} /> - - + Maximum scene duration - in seconds - where scene player will loop the video - 0 to disable + + - - + Custom CSS + { @@ -128,16 +112,17 @@ export const SettingsInterfacePanel: FunctionComponent = () => { }} /> - - + + Page must be reloaded for changes to take effect. + - - +
    + ); }; diff --git a/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx b/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx index 946485f5b22..8270a25ea40 100644 --- a/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx +++ b/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx @@ -1,13 +1,9 @@ -import { - H4, FormGroup, HTMLSelect, -} from "@blueprintjs/core"; -import React, { FunctionComponent, useState, useEffect, useRef } from "react"; -import * as GQL from "../../core/generated-graphql"; -import { StashService } from "../../core/StashService"; +import React, { useState, useEffect, useRef } from "react"; +import { Form, Col } from 'react-bootstrap'; +import * as GQL from "src/core/generated-graphql"; +import { StashService } from "src/core/StashService"; -interface IProps {} - -function convertTime(logEntry : GQL.LogEntryDataFragment) { +function convertTime(logEntry: GQL.LogEntryDataFragment) { function pad(val : number) { var ret = val.toString(); if (val <= 9) { @@ -44,17 +40,17 @@ class LogEntry { } } -export const SettingsLogsPanel: FunctionComponent = (props: IProps) => { +export const SettingsLogsPanel: React.FC = () => { const { data, error } = StashService.useLoggingSubscribe(); const { data: existingData } = StashService.useLogs(); - + const logEntries = useRef([]); const [logLevel, setLogLevel] = useState("Info"); const [filteredLogEntries, setFilteredLogEntries] = useState([]); const lastUpdate = useRef(0); const updateTimeout = useRef(); - // maximum number of log entries to display. Subsequent entries will truncate + // maximum number of log entries to display. Subsequent entries will truncate // the list, dropping off the oldest entries first. const MAX_LOG_ENTRIES = 200; @@ -83,7 +79,7 @@ export const SettingsLogsPanel: FunctionComponent = (props: IProps) => { // filter subscribed data as it comes in, otherwise we'll end up // truncating stuff that wasn't filtered out convertedData = convertedData.filter(filterByLogLevel) - + // put newest entries at the top convertedData.reverse(); prependLogEntries(convertedData); @@ -167,16 +163,21 @@ export const SettingsLogsPanel: FunctionComponent = (props: IProps) => { return ( <> -

    Logs

    -
    - - setLogLevel(event.target.value)} - value={logLevel} - /> - -
    +

    Logs

    + + + Log Level + + + setLogLevel(event.currentTarget.value)} + > + { logLevels.map(level => ()) } + + +
    {maybeRenderError()} {filteredLogEntries.map((logEntry) => diff --git a/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx b/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx index a37bea8313b..21fcbe4e8cb 100644 --- a/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx +++ b/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx @@ -1,53 +1,32 @@ -import { - Button, - Checkbox, - FormGroup, -} from "@blueprintjs/core"; -import React, { FunctionComponent, useState } from "react"; -import { StashService } from "../../../core/StashService"; -import { ErrorUtils } from "../../../utils/errors"; -import { ToastUtils } from "../../../utils/toasts"; +import React, { useState } from "react"; +import { Button, Form } from 'react-bootstrap'; +import { StashService } from "src/core/StashService"; +import { useToast } from 'src/hooks'; -interface IProps {} - -export const GenerateButton: FunctionComponent = () => { - const [sprites, setSprites] = useState(true); - const [previews, setPreviews] = useState(true); - const [markers, setMarkers] = useState(true); - const [transcodes, setTranscodes] = useState(true); +export const GenerateButton: React.FC = () => { + const Toast = useToast(); + const [sprites, setSprites] = useState(true); + const [previews, setPreviews] = useState(true); + const [markers, setMarkers] = useState(true); + const [transcodes, setTranscodes] = useState(true); async function onGenerate() { try { await StashService.queryMetadataGenerate({sprites, previews, markers, transcodes}); - ToastUtils.success("Started generating"); + Toast.success({ content: "Started generating" }); } catch (e) { - ErrorUtils.handle(e); + Toast.error(e); } } return ( - - setSprites(!sprites)} /> - setPreviews(!previews)} - /> - setMarkers(!markers)} - /> - setTranscodes(!transcodes)} - /> - + Generate supporting image, sprite, video, vtt and other files. + ); }; diff --git a/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx b/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx index c0e056a92cb..a1a3735e0b0 100644 --- a/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx +++ b/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx @@ -1,24 +1,18 @@ -import { - Alert, - Button, - Checkbox, - Divider, - FormGroup, - ProgressBar, -} from "@blueprintjs/core"; import React, { useState, useEffect } from "react"; -import { StashService } from "../../../core/StashService"; -import { ErrorUtils } from "../../../utils/errors"; -import { ToastUtils } from "../../../utils/toasts"; -import { GenerateButton } from "./GenerateButton"; +import { Button, Form, ProgressBar } from 'react-bootstrap'; import { Link } from "react-router-dom"; +import { StashService } from "src/core/StashService"; +import { useToast } from 'src/hooks'; +import { Modal } from 'src/components/Shared'; +import { GenerateButton } from "./GenerateButton"; export const SettingsTasksPanel: React.FC = () => { + const Toast = useToast(); const [isImportAlertOpen, setIsImportAlertOpen] = useState(false); const [isCleanAlertOpen, setIsCleanAlertOpen] = useState(false); const [useFileMetadata, setUseFileMetadata] = useState(false); const [status, setStatus] = useState(""); - const [progress, setProgress] = useState(undefined); + const [progress, setProgress] = useState(0); const [autoTagPerformers, setAutoTagPerformers] = useState(true); const [autoTagStudios, setAutoTagStudios] = useState(true); @@ -53,7 +47,7 @@ export const SettingsTasksPanel: React.FC = () => { setStatus(statusToText(jobStatus.data.jobStatus.status)); var newProgress = jobStatus.data.jobStatus.progress; if (newProgress < 0) { - setProgress(undefined); + setProgress(0); } else { setProgress(newProgress); } @@ -65,7 +59,7 @@ export const SettingsTasksPanel: React.FC = () => { setStatus(statusToText(metadataUpdate.data.metadataUpdate.status)); var newProgress = metadataUpdate.data.metadataUpdate.progress; if (newProgress < 0) { - setProgress(undefined); + setProgress(0); } else { setProgress(newProgress); } @@ -79,20 +73,17 @@ export const SettingsTasksPanel: React.FC = () => { function renderImportAlert() { return ( - setIsImportAlertOpen(false)} - onConfirm={() => onImport()} + setIsImportAlertOpen(false) }} >

    Are you sure you want to import? This will delete the database and re-import from your exported metadata.

    -
    + ); } @@ -103,31 +94,28 @@ export const SettingsTasksPanel: React.FC = () => { function renderCleanAlert() { return ( - setIsCleanAlertOpen(false)} - onConfirm={() => onClean()} + setIsCleanAlertOpen(false) }} >

    Are you sure you want to Clean? This will delete db information and generated content for all scenes that are no longer found in the filesystem.

    -
    + ); } async function onScan() { try { await StashService.queryMetadataScan({useFileMetadata: useFileMetadata}); - ToastUtils.success("Started scan"); + Toast.success({ content: "Started scan" }); jobStatus.refetch(); } catch (e) { - ErrorUtils.handle(e); + Toast.error(e); } } @@ -143,10 +131,10 @@ export const SettingsTasksPanel: React.FC = () => { async function onAutoTag() { try { await StashService.queryMetadataAutoTag(getAutoTagInput()); - ToastUtils.success("Started auto tagging"); + Toast.success({ content: "Started auto tagging" }); jobStatus.refetch(); } catch (e) { - ErrorUtils.handle(e); + Toast.error(e); } } @@ -156,21 +144,19 @@ export const SettingsTasksPanel: React.FC = () => { } return ( - <> - - + ); } function renderJobStatus() { return ( <> - +
    Status: {status}
    - {!!status && status !== "Idle" ? : undefined} -
    + { status !== "Idle" ? : '' } + {maybeRenderStop()} ); @@ -185,83 +171,70 @@ export const SettingsTasksPanel: React.FC = () => { {renderJobStatus()} - +

    Library

    - - + setUseFileMetadata(!useFileMetadata)} /> - + Scan for new content and add it to the database. + - +

    Auto Tagging

    - - + setAutoTagPerformers(!autoTagPerformers)} /> - setAutoTagStudios(!autoTagStudios)} /> - setAutoTagTags(!autoTagTags)} /> - + Auto-tag content based on filenames. + - - - Scene Filename Parser - - - + + + + +

    Generated Content

    - - + Check for missing files and remove them from the database. This is a destructive action. + -

    Metadata

    - - + Export the database content into JSON format. + + + + + Import from exported JSON. This is a destructive action. + ); }; diff --git a/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx b/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx index b5cf5abd6fa..5891d668adb 100644 --- a/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx +++ b/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx @@ -1,8 +1,8 @@ import { Button, Form, Modal, Nav, Navbar, OverlayTrigger, Popover } from 'react-bootstrap'; import React, { useState } from "react"; import { Link } from "react-router-dom"; -import * as GQL from "../../core/generated-graphql"; -import { NavigationUtils } from "../../utils/navigation"; +import * as GQL from "src/core/generated-graphql"; +import { NavUtils } from "src/utils"; interface IProps { performer?: Partial; @@ -92,10 +92,10 @@ export const DetailsEditNavbar: React.FC = (props: IProps) => { function renderScenesButton() { if (props.isEditing) { return; } let linkSrc: string = "#"; - if (!!props.performer) { - linkSrc = NavigationUtils.makePerformerScenesUrl(props.performer); - } else if (!!props.studio) { - linkSrc = NavigationUtils.makeStudioScenesUrl(props.studio); + if (props.performer) { + linkSrc = NavUtils.makePerformerScenesUrl(props.performer); + } else if (props.studio) { + linkSrc = NavUtils.makeStudioScenesUrl(props.studio); } return ( diff --git a/ui/v2.5/src/components/Shared/DurationInput.tsx b/ui/v2.5/src/components/Shared/DurationInput.tsx index 08663d983cf..9f3c6a885f5 100644 --- a/ui/v2.5/src/components/Shared/DurationInput.tsx +++ b/ui/v2.5/src/components/Shared/DurationInput.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect } from "react"; import { Button, ButtonGroup, InputGroup, Form } from 'react-bootstrap'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' -import { TextUtils } from "../../utils/text"; +import { TextUtils } from "src/utils"; interface IProps { disabled?: boolean @@ -35,7 +35,7 @@ export const DurationInput: React.FC = (props: IProps) => { if (!v) { return 0; } - + let splits = v.split(":"); if (splits.length > 3) { @@ -122,9 +122,7 @@ export const DurationInput: React.FC = (props: IProps) => { onChange={(e : any) => setValue(e.target.value)} onBlur={() => props.onValueChange(stringToSeconds(value))} placeholder="hh:mm:ss" - > - {renderButtons()} - + /> {maybeRenderReset()} diff --git a/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx b/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx index 56936a43d75..532cfba6440 100644 --- a/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx +++ b/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx @@ -1,6 +1,6 @@ -import { Button, InputGroup, Form, Modal, Spinner } from 'react-bootstrap'; import React, { useEffect, useState } from "react"; -import { StashService } from "../../../core/StashService"; +import { Button, InputGroup, Form, Modal, Spinner } from 'react-bootstrap'; +import { StashService } from "src/core/StashService"; interface IProps { directories: string[]; @@ -17,7 +17,7 @@ export const FolderSelect: React.FC = (props: IProps) => { setSelectedDirectories(props.directories); }, [props.directories]); - const selectableDirectories:string[] = data && data.directories && !error ? StashService.nullToUndefined(data.directories) : []; + const selectableDirectories:string[] = data?.directories ?? []; function onSelectDirectory() { selectedDirectories.push(currentDirectory); @@ -55,7 +55,7 @@ export const FolderSelect: React.FC = (props: IProps) => { {(!data || !data.directories || loading) ? : undefined} - + /> {selectableDirectories.map((path) => { return
    setCurrentDirectory(path)}>{path}
    ; @@ -71,14 +71,14 @@ export const FolderSelect: React.FC = (props: IProps) => { return ( <> - {!!error ?

    {error.message}

    : undefined} + {error ?

    {error.message}

    : ''} {renderDialog()} {selectedDirectories.map((path) => { return ; })} - + ); diff --git a/ui/v2.5/src/components/Shared/Icon.tsx b/ui/v2.5/src/components/Shared/Icon.tsx new file mode 100644 index 00000000000..f59238c54e7 --- /dev/null +++ b/ui/v2.5/src/components/Shared/Icon.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { IconName } from '@fortawesome/fontawesome-svg-core'; + +interface IIcon { + icon: IconName; + className?: string; + color?: string; +} + +const Icon: React.FC = ({ icon, className, color }) => ( + +); + +export default Icon; diff --git a/ui/v2.5/src/components/Shared/Modal.tsx b/ui/v2.5/src/components/Shared/Modal.tsx new file mode 100644 index 00000000000..c1c489f5fd6 --- /dev/null +++ b/ui/v2.5/src/components/Shared/Modal.tsx @@ -0,0 +1,44 @@ +import React from "react"; +import { Button, Modal } from 'react-bootstrap'; +import { Icon } from 'src/components/Shared'; +import { IconName } from '@fortawesome/fontawesome-svg-core'; + +interface IButton { + text?: string; + variant?: 'danger'|'primary'; + onClick?: () => void; +} + +interface IModal { + show: boolean; + onHide?: () => void; + header?: string; + icon?: IconName; + cancel?: IButton; + accept?: IButton; +} + +const ModalComponent: React.FC = ({ children, show, icon, header, cancel, accept, onHide }) => (( + + + { icon ? : '' } + { header ?? '' } + + {children} + +
    + { cancel + ? + : '' + } + { } +
    +
    +
    +)); + +export default ModalComponent; diff --git a/ui/v2.5/src/components/select/FilterSelect.tsx b/ui/v2.5/src/components/Shared/Select.tsx similarity index 51% rename from ui/v2.5/src/components/select/FilterSelect.tsx rename to ui/v2.5/src/components/Shared/Select.tsx index b3d07eb1a81..96b5f12798d 100644 --- a/ui/v2.5/src/components/select/FilterSelect.tsx +++ b/ui/v2.5/src/components/Shared/Select.tsx @@ -1,11 +1,11 @@ -import React, { useState } from "react"; +import React, { useState, useCallback } from "react"; import Select, { ValueType } from 'react-select'; import CreatableSelect from 'react-select/creatable'; +import { debounce } from 'lodash'; -import { ErrorUtils } from "../../utils/errors"; -import * as GQL from "../../core/generated-graphql"; -import { StashService } from "../../core/StashService"; -import useToast from '../Shared/Toast'; +import * as GQL from "src/core/generated-graphql"; +import { StashService } from "src/core/StashService"; +import { useToast } from 'src/hooks'; type ValidTypes = GQL.AllPerformersForFilterAllPerformers | @@ -14,7 +14,7 @@ type ValidTypes = type Option = { value:string, label:string }; interface ITypeProps { - type: 'performers' | 'studios' | 'tags'; + type?: 'performers' | 'studios' | 'tags'; } interface IFilterProps { initialIds: string[]; @@ -32,8 +32,66 @@ interface ISelectProps { isLoading: boolean; onChange: (item: ValueType
    \n\n \n \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx",["390","391","392"],"import {\n H4, FormGroup, HTMLSelect,\n} from \"@blueprintjs/core\";\nimport React, { FunctionComponent, useState, useEffect, useRef } from \"react\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\n\ninterface IProps {}\n\nfunction convertTime(logEntry : GQL.LogEntryDataFragment) {\n function pad(val : number) {\n var ret = val.toString();\n if (val <= 9) {\n ret = \"0\" + ret;\n }\n\n return ret;\n }\n\n var date = new Date(logEntry.time);\n var month = date.getMonth() + 1;\n var day = date.getDate();\n var dateStr = date.getFullYear() + \"-\" + pad(month) + \"-\" + pad(day);\n dateStr += \" \" + pad(date.getHours()) + \":\" + pad(date.getMinutes()) + \":\" + pad(date.getSeconds());\n\n return dateStr;\n}\n\nclass LogEntry {\n public time: string;\n public level: string;\n public message: string;\n public id: string;\n\n private static nextId: number = 0;\n\n public constructor(logEntry: GQL.LogEntryDataFragment) {\n this.time = convertTime(logEntry);\n this.level = logEntry.level;\n this.message = logEntry.message;\n\n var id = LogEntry.nextId++;\n this.id = id.toString();\n }\n}\n\nexport const SettingsLogsPanel: FunctionComponent = (props: IProps) => {\n const { data, error } = StashService.useLoggingSubscribe();\n const { data: existingData } = StashService.useLogs();\n \n const logEntries = useRef([]);\n const [logLevel, setLogLevel] = useState(\"Info\");\n const [filteredLogEntries, setFilteredLogEntries] = useState([]);\n const lastUpdate = useRef(0);\n const updateTimeout = useRef();\n\n // maximum number of log entries to display. Subsequent entries will truncate \n // the list, dropping off the oldest entries first.\n const MAX_LOG_ENTRIES = 200;\n\n function truncateLogEntries(entries : LogEntry[]) {\n entries.length = Math.min(entries.length, MAX_LOG_ENTRIES);\n }\n\n function prependLogEntries(toPrepend : LogEntry[]) {\n var newLogEntries = toPrepend.concat(logEntries.current);\n truncateLogEntries(newLogEntries);\n logEntries.current = newLogEntries;\n }\n\n function appendLogEntries(toAppend : LogEntry[]) {\n var newLogEntries = logEntries.current.concat(toAppend);\n truncateLogEntries(newLogEntries);\n logEntries.current = newLogEntries;\n }\n\n useEffect(() => {\n if (!data) { return; }\n\n // append data to the logEntries\n var convertedData = data.loggingSubscribe.map(convertLogEntry);\n\n // filter subscribed data as it comes in, otherwise we'll end up\n // truncating stuff that wasn't filtered out\n convertedData = convertedData.filter(filterByLogLevel)\n \n // put newest entries at the top\n convertedData.reverse();\n prependLogEntries(convertedData);\n\n updateFilteredEntries();\n }, [data]);\n\n useEffect(() => {\n if (!existingData || !existingData.logs) { return; }\n\n var convertedData = existingData.logs.map(convertLogEntry);\n appendLogEntries(convertedData);\n\n updateFilteredEntries();\n }, [existingData]);\n\n function updateFilteredEntries() {\n if (!updateTimeout.current) {\n console.log(\"Updating after timeout\");\n }\n updateTimeout.current = undefined;\n\n var filteredEntries = logEntries.current.filter(filterByLogLevel);\n setFilteredLogEntries(filteredEntries);\n\n lastUpdate.current = new Date().getTime();\n }\n\n useEffect(() => {\n updateFilteredEntries();\n }, [logLevel]);\n\n function convertLogEntry(logEntry : GQL.LogEntryDataFragment) {\n return new LogEntry(logEntry);\n }\n\n function levelClass(level : string) {\n return level.toLowerCase().trim();\n }\n\n interface ILogElementProps {\n logEntry : LogEntry\n }\n\n function LogElement(props : ILogElementProps) {\n // pad to maximum length of level enum\n var level = props.logEntry.level.padEnd(GQL.LogLevel.Progress.length);\n\n return (\n <>\n {props.logEntry.time} \n {level} \n {props.logEntry.message}\n
    \n \n );\n }\n\n function maybeRenderError() {\n if (error) {\n return (\n <>\n Error connecting to log server: {error.message}
    \n \n );\n }\n }\n\n const logLevels = [\"Debug\", \"Info\", \"Warning\", \"Error\"];\n\n function filterByLogLevel(logEntry : LogEntry) {\n if (logLevel === \"Debug\") {\n return true;\n }\n\n var logLevelIndex = logLevels.indexOf(logLevel);\n var levelIndex = logLevels.indexOf(logEntry.level);\n\n return levelIndex >= logLevelIndex;\n }\n\n return (\n <>\n

    Logs

    \n
    \n \n setLogLevel(event.target.value)}\n value={logLevel}\n />\n \n
    \n
    \n {maybeRenderError()}\n {filteredLogEntries.map((logEntry) =>\n \n )}\n
    \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/DurationInput.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/TagLink.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Shared/Toast.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Stats.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioCard.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Studios/Studios.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Tags/TagList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Tags/Tags.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Wall/WallItem.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Wall/WallPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/list/AddFilter.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/list/ListFilter.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/list/Pagination.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerCard.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx",["393","394"],"import _ from \"lodash\";\nimport { Button, Form, Modal, Spinner, Table } from 'react-bootstrap';\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport React, { useEffect, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { StashService } from \"../../../core/StashService\";\nimport { IBaseProps } from \"../../../models\";\nimport { ErrorUtils } from \"../../../utils/errors\";\nimport { TableUtils } from \"../../../utils/table\";\nimport { ScrapePerformerSuggest } from \"../../select/ScrapePerformerSuggest\";\nimport { DetailsEditNavbar } from \"../../Shared/DetailsEditNavbar\";\nimport { ToastUtils } from \"../../../utils/toasts\";\nimport { EditableTextUtils } from \"../../../utils/editabletext\";\nimport { ImageUtils } from \"../../../utils/image\";\n\ninterface IPerformerProps extends IBaseProps {}\n\nexport const Performer: React.FC = (props: IPerformerProps) => {\n const isNew = props.match.params.id === \"new\";\n\n // Editing state\n const [isEditing, setIsEditing] = useState(isNew);\n const [isDisplayingScraperDialog, setIsDisplayingScraperDialog] = useState(undefined);\n const [scrapePerformerDetails, setScrapePerformerDetails] = useState(undefined);\n\n // Editing performer state\n const [image, setImage] = useState(undefined);\n const [name, setName] = useState(undefined);\n const [aliases, setAliases] = useState(undefined);\n const [favorite, setFavorite] = useState(undefined);\n const [birthdate, setBirthdate] = useState(undefined);\n const [ethnicity, setEthnicity] = useState(undefined);\n const [country, setCountry] = useState(undefined);\n const [eyeColor, setEyeColor] = useState(undefined);\n const [height, setHeight] = useState(undefined);\n const [measurements, setMeasurements] = useState(undefined);\n const [fakeTits, setFakeTits] = useState(undefined);\n const [careerLength, setCareerLength] = useState(undefined);\n const [tattoos, setTattoos] = useState(undefined);\n const [piercings, setPiercings] = useState(undefined);\n const [url, setUrl] = useState(undefined);\n const [twitter, setTwitter] = useState(undefined);\n const [instagram, setInstagram] = useState(undefined);\n\n // Performer state\n const [performer, setPerformer] = useState>({});\n const [imagePreview, setImagePreview] = useState(undefined);\n\n // Network state\n const [isLoading, setIsLoading] = useState(false);\n\n const Scrapers = StashService.useListPerformerScrapers();\n const [queryableScrapers, setQueryableScrapers] = useState([]);\n\n const { data, error, loading } = StashService.useFindPerformer(props.match.params.id);\n const updatePerformer = StashService.usePerformerUpdate(getPerformerInput() as GQL.PerformerUpdateInput);\n const createPerformer = StashService.usePerformerCreate(getPerformerInput() as GQL.PerformerCreateInput);\n const deletePerformer = StashService.usePerformerDestroy(getPerformerInput() as GQL.PerformerDestroyInput);\n\n function updatePerformerEditState(state: Partial) {\n if ((state as GQL.PerformerDataFragment).favorite !== undefined) {\n setFavorite((state as GQL.PerformerDataFragment).favorite);\n }\n setName(state.name);\n setAliases(state.aliases);\n setBirthdate(state.birthdate);\n setEthnicity(state.ethnicity);\n setCountry(state.country);\n setEyeColor(state.eye_color);\n setHeight(state.height);\n setMeasurements(state.measurements);\n setFakeTits(state.fake_tits);\n setCareerLength(state.career_length);\n setTattoos(state.tattoos);\n setPiercings(state.piercings);\n setUrl(state.url);\n setTwitter(state.twitter);\n setInstagram(state.instagram);\n }\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findPerformer || !!error) { return; }\n setPerformer(data.findPerformer);\n }, [data]);\n\n useEffect(() => {\n setImagePreview(performer.image_path);\n setImage(undefined);\n updatePerformerEditState(performer);\n if (!isNew) {\n setIsEditing(false);\n }\n }, [performer]);\n\n function onImageLoad(this: FileReader) {\n setImagePreview(this.result as string);\n setImage(this.result as string);\n }\n\n ImageUtils.addPasteImageHook(onImageLoad);\n \n useEffect(() => {\n var newQueryableScrapers : GQL.ListPerformerScrapersListPerformerScrapers[] = [];\n\n if (!!Scrapers.data && Scrapers.data.listPerformerScrapers) {\n newQueryableScrapers = Scrapers.data.listPerformerScrapers.filter((s) => {\n return s.performer && s.performer.supported_scrapes.includes(GQL.ScrapeType.Name);\n });\n }\n\n setQueryableScrapers(newQueryableScrapers);\n\n }, [Scrapers.data]);\n\n if ((!isNew && !isEditing && (!data || !data.findPerformer)) || isLoading) {\n return ; \n }\n if (!!error) { return <>error...; }\n\n function getPerformerInput() {\n const performerInput: Partial = {\n name,\n aliases,\n favorite,\n birthdate,\n ethnicity,\n country,\n eye_color: eyeColor,\n height,\n measurements,\n fake_tits: fakeTits,\n career_length: careerLength,\n tattoos,\n piercings,\n url,\n twitter,\n instagram,\n image,\n };\n\n if (!isNew) {\n (performerInput as GQL.PerformerUpdateInput).id = props.match.params.id;\n }\n return performerInput;\n }\n\n async function onSave() {\n setIsLoading(true);\n try {\n if (!isNew) {\n const result = await updatePerformer();\n setPerformer(result.data.performerUpdate);\n } else {\n const result = await createPerformer();\n setPerformer(result.data.performerCreate);\n props.history.push(`/performers/${result.data.performerCreate.id}`);\n }\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n }\n\n async function onDelete() {\n setIsLoading(true);\n try {\n await deletePerformer();\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n \n // redirect to performers page\n props.history.push(`/performers`);\n }\n\n async function onAutoTag() {\n if (!performer || !performer.id) {\n return;\n }\n try {\n await StashService.queryMetadataAutoTag({ performers: [performer.id]});\n ToastUtils.success(\"Started auto tagging\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n\n function onImageChange(event: React.FormEvent) {\n ImageUtils.onImageChange(event, onImageLoad);\n }\n\n function onDisplayFreeOnesDialog(scraper: GQL.ListPerformerScrapersListPerformerScrapers) {\n setIsDisplayingScraperDialog(scraper);\n }\n\n function getQueryScraperPerformerInput() {\n if (!scrapePerformerDetails) {\n return {};\n }\n\n let ret = _.clone(scrapePerformerDetails);\n delete ret.__typename;\n return ret as GQL.ScrapedPerformerInput;\n }\n\n async function onScrapePerformer() {\n setIsDisplayingScraperDialog(undefined);\n setIsLoading(true);\n try {\n if (!scrapePerformerDetails || !isDisplayingScraperDialog) { return; }\n const result = await StashService.queryScrapePerformer(isDisplayingScraperDialog.id, getQueryScraperPerformerInput());\n if (!result.data || !result.data.scrapePerformer) { return; }\n updatePerformerEditState(result.data.scrapePerformer);\n } catch (e) {\n ErrorUtils.handle(e);\n }\n setIsLoading(false);\n }\n\n async function onScrapePerformerURL() {\n if (!url) { return; }\n setIsLoading(true);\n try {\n const result = await StashService.queryScrapePerformerURL(url);\n if (!result.data || !result.data.scrapePerformerURL) { return; }\n updatePerformerEditState(result.data.scrapePerformerURL);\n } catch (e) {\n ErrorUtils.handle(e);\n } finally {\n setIsLoading(false);\n }\n }\n\n function renderEthnicity() {\n return TableUtils.renderHtmlSelect({\n title: \"Ethnicity\",\n value: ethnicity,\n isEditing,\n onChange: (value: string) => setEthnicity(value),\n selectOptions: [\"white\", \"black\", \"asian\", \"hispanic\"],\n });\n }\n\n function renderScraperDialog() {\n return (\n setIsDisplayingScraperDialog(undefined)}\n >\n \n Scrape\n \n \n
    \n setScrapePerformerDetails(query)}\n />\n
    \n
    \n \n \n \n \n );\n }\n\n function urlScrapable(url: string) : boolean {\n return !!url && !!Scrapers.data && Scrapers.data.listPerformerScrapers && Scrapers.data.listPerformerScrapers.some((s) => {\n return !!s.performer && !!s.performer.urls && s.performer.urls.some((u) => { return url.includes(u); });\n });\n }\n\n function maybeRenderScrapeButton() {\n if (!url || !isEditing || !urlScrapable(url)) {\n return undefined;\n }\n return (\n \n )\n }\n\n function renderURLField() {\n return (\n \n \n URL \n {maybeRenderScrapeButton()}\n \n \n {EditableTextUtils.renderInputGroup({\n value: url, isEditing, onChange: setUrl, placeholder: \"URL\"\n })}\n \n \n );\n }\n\n return (\n <>\n {renderScraperDialog()}\n
    \n
    \n \"\"\n
    \n
    \n { setIsEditing(!isEditing); updatePerformerEditState(performer); }}\n onSave={onSave}\n onDelete={onDelete}\n onImageChange={onImageChange}\n scrapers={queryableScrapers}\n onDisplayScraperDialog={onDisplayFreeOnesDialog}\n onAutoTag={onAutoTag}\n />\n

    \n { !isEditing\n ? {name}\n : setName(event.target.value)} />\n }\n

    \n
    \n \n Aliases:\n {EditableTextUtils.renderInputGroup({\n value: aliases, isEditing: isEditing, placeholder: \"Aliases\", onChange: setAliases\n })}\n \n
    \n
    \n Favorite:\n setFavorite(!favorite)}\n >\n \n \n
    \n\n \n \n {TableUtils.renderInputGroup(\n {title: \"Birthdate (YYYY-MM-DD)\", value: birthdate, isEditing, onChange: setBirthdate})}\n {renderEthnicity()}\n {TableUtils.renderInputGroup(\n {title: \"Eye Color\", value: eyeColor, isEditing, onChange: setEyeColor})}\n {TableUtils.renderInputGroup(\n {title: \"Country\", value: country, isEditing, onChange: setCountry})}\n {TableUtils.renderInputGroup(\n {title: \"Height (CM)\", value: height, isEditing, onChange: setHeight})}\n {TableUtils.renderInputGroup(\n {title: \"Measurements\", value: measurements, isEditing, onChange: setMeasurements})}\n {TableUtils.renderInputGroup(\n {title: \"Fake Tits\", value: fakeTits, isEditing, onChange: setFakeTits})}\n {TableUtils.renderInputGroup(\n {title: \"Career Length\", value: careerLength, isEditing, onChange: setCareerLength})}\n {TableUtils.renderInputGroup(\n {title: \"Tattoos\", value: tattoos, isEditing, onChange: setTattoos})}\n {TableUtils.renderInputGroup(\n {title: \"Piercings\", value: piercings, isEditing, onChange: setPiercings})}\n {renderURLField()}\n {TableUtils.renderInputGroup(\n {title: \"Twitter\", value: twitter, isEditing, onChange: setTwitter})}\n {TableUtils.renderInputGroup(\n {title: \"Instagram\", value: instagram, isEditing, onChange: setInstagram})}\n \n
    \n
    \n
    \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerListTable.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/performers/performers.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneCard.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx",["395","396"],"import { Card, Spinner, Tab, Tabs } from 'react-bootstrap';\nimport queryString from \"query-string\";\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { StashService } from \"../../../core/StashService\";\nimport { IBaseProps } from \"../../../models\";\nimport { GalleryViewer } from \"../../Galleries/GalleryViewer\";\nimport { ScenePlayer } from \"../ScenePlayer/ScenePlayer\";\nimport { SceneDetailPanel } from \"./SceneDetailPanel\";\nimport { SceneEditPanel } from \"./SceneEditPanel\";\nimport { SceneFileInfoPanel } from \"./SceneFileInfoPanel\";\nimport { SceneMarkersPanel } from \"./SceneMarkersPanel\";\nimport { ScenePerformerPanel } from \"./ScenePerformerPanel\";\n\ninterface ISceneProps extends IBaseProps {}\n\nexport const Scene: FunctionComponent = (props: ISceneProps) => {\n const [timestamp, setTimestamp] = useState(0);\n const [autoplay, setAutoplay] = useState(false);\n const [scene, setScene] = useState>({});\n const [isLoading, setIsLoading] = useState(false);\n const { data, error, loading } = StashService.useFindScene(props.match.params.id);\n\n useEffect(() => {\n setIsLoading(loading);\n if (!data || !data.findScene || !!error) { return; }\n setScene(StashService.nullToUndefined(data.findScene));\n }, [data]);\n\n useEffect(() => {\n const queryParams = queryString.parse(props.location.search);\n if (!!queryParams.t && typeof queryParams.t === \"string\" && timestamp === 0) {\n const newTimestamp = parseInt(queryParams.t, 10);\n setTimestamp(newTimestamp);\n }\n if (queryParams.autoplay && typeof queryParams.autoplay === \"string\") {\n setAutoplay(queryParams.autoplay === \"true\");\n }\n });\n\n function onClickMarker(marker: GQL.SceneMarkerDataFragment) {\n setTimestamp(marker.seconds);\n }\n\n if (!data || !data.findScene || isLoading || Object.keys(scene).length === 0) {\n return ;\n }\n const modifiedScene =\n Object.assign({scene_marker_tags: data.sceneMarkerTags}, scene) as GQL.SceneDataFragment; // TODO Hack from angular\n if (!!error) { return <>error...; }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n {modifiedScene.performers.length > 0 ?\n \n \n : ''\n }\n {!!modifiedScene.gallery ?\n \n \n : ''\n }\n \n \n \n \n setScene(newScene)} \n onDelete={() => props.history.push(\"/scenes\")}\n />\n \n \n \n \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx",["397","398"],"import { Badge, Button, Card, Collapse, Dropdown, DropdownButton, Form, Table, Spinner } from 'react-bootstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport React, { useEffect, useState } from \"react\";\nimport { StashService } from \"../../core/StashService\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { SlimSceneDataFragment, Maybe } from \"../../core/generated-graphql\";\nimport { TextUtils } from \"../../utils/text\";\nimport _ from \"lodash\";\nimport { ToastUtils } from \"../../utils/toasts\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { Pagination } from \"../list/Pagination\";\nimport { FilterSelect, StudioSelect } from \"../select/FilterSelect\";\n \nclass ParserResult {\n public value: Maybe;\n public originalValue: Maybe;\n public set: boolean = false;\n\n public setOriginalValue(v : Maybe) {\n this.originalValue = v;\n this.value = v;\n }\n\n public setValue(v : Maybe) {\n if (!!v) {\n this.value = v;\n this.set = !_.isEqual(this.value, this.originalValue);\n }\n }\n}\n\nclass ParserField {\n public field : string;\n public helperText? : string;\n\n constructor(field: string, helperText?: string) {\n this.field = field;\n this.helperText = helperText;\n }\n\n public getFieldPattern() {\n return \"{\" + this.field + \"}\";\n }\n\n static Title = new ParserField(\"title\");\n static Ext = new ParserField(\"ext\", \"File extension\");\n\n static I = new ParserField(\"i\", \"Matches any ignored word\");\n static D = new ParserField(\"d\", \"Matches any delimiter (.-_)\");\n\n static Performer = new ParserField(\"performer\");\n static Studio = new ParserField(\"studio\");\n static Tag = new ParserField(\"tag\");\n\n // date fields\n static Date = new ParserField(\"date\", \"YYYY-MM-DD\");\n static YYYY = new ParserField(\"yyyy\", \"Year\");\n static YY = new ParserField(\"yy\", \"Year (20YY)\");\n static MM = new ParserField(\"mm\", \"Two digit month\");\n static DD = new ParserField(\"dd\", \"Two digit date\");\n static YYYYMMDD = new ParserField(\"yyyymmdd\");\n static YYMMDD = new ParserField(\"yymmdd\");\n static DDMMYYYY = new ParserField(\"ddmmyyyy\");\n static DDMMYY = new ParserField(\"ddmmyy\");\n static MMDDYYYY = new ParserField(\"mmddyyyy\");\n static MMDDYY = new ParserField(\"mmddyy\");\n\n static validFields = [\n ParserField.Title,\n ParserField.Ext,\n ParserField.D,\n ParserField.I,\n ParserField.Performer,\n ParserField.Studio,\n ParserField.Tag,\n ParserField.Date,\n ParserField.YYYY,\n ParserField.YY,\n ParserField.MM,\n ParserField.DD,\n ParserField.YYYYMMDD,\n ParserField.YYMMDD,\n ParserField.DDMMYYYY,\n ParserField.DDMMYY,\n ParserField.MMDDYYYY,\n ParserField.MMDDYY\n ]\n\n static fullDateFields = [\n ParserField.YYYYMMDD,\n ParserField.YYMMDD,\n ParserField.DDMMYYYY,\n ParserField.DDMMYY,\n ParserField.MMDDYYYY,\n ParserField.MMDDYY\n ];\n}\nclass SceneParserResult {\n public id: string;\n public filename: string;\n public title: ParserResult = new ParserResult();\n public date: ParserResult = new ParserResult();\n\n public studio: ParserResult = new ParserResult();\n public studioId: ParserResult = new ParserResult();\n public tags: ParserResult = new ParserResult();\n public tagIds: ParserResult = new ParserResult();\n public performers: ParserResult = new ParserResult();\n public performerIds: ParserResult = new ParserResult();\n\n public scene : SlimSceneDataFragment;\n\n constructor(result : GQL.ParseSceneFilenamesResults) {\n this.scene = result.scene;\n\n this.id = this.scene.id;\n this.filename = TextUtils.fileNameFromPath(this.scene.path);\n this.title.setOriginalValue(this.scene.title);\n this.date.setOriginalValue(this.scene.date);\n this.performerIds.setOriginalValue(this.scene.performers.map((p) => p.id));\n this.performers.setOriginalValue(this.scene.performers);\n this.tagIds.setOriginalValue(this.scene.tags.map((t) => t.id));\n this.tags.setOriginalValue(this.scene.tags);\n this.studioId.setOriginalValue(this.scene.studio ? this.scene.studio.id : undefined);\n this.studio.setOriginalValue(this.scene.studio);\n\n this.title.setValue(result.title);\n this.date.setValue(result.date);\n this.performerIds.setValue(result.performer_ids);\n this.tagIds.setValue(result.tag_ids);\n this.studioId.setValue(result.studio_id);\n\n if (result.performer_ids) {\n this.performers.setValue(result.performer_ids.map((p) => {\n return {\n id: p,\n name: \"\",\n favorite: false,\n image_path: \"\"\n };\n }));\n }\n\n if (result.tag_ids) {\n this.tags.setValue(result.tag_ids.map((t) => {\n return {\n id: t,\n name: \"\",\n };\n }));\n }\n\n if (result.studio_id) {\n this.studio.setValue({\n id: result.studio_id,\n name: \"\",\n image_path: \"\"\n });\n }\n }\n\n private static setInput(object: any, key: string, parserResult : ParserResult) {\n if (parserResult.set) {\n object[key] = parserResult.value;\n }\n }\n\n // returns true if any of its fields have set == true\n public isChanged() {\n return this.title.set || this.date.set || this.performerIds.set || this.studioId.set || this.tagIds.set;\n }\n\n public toSceneUpdateInput() {\n var ret = {\n id: this.id,\n title: this.scene.title,\n details: this.scene.details,\n url: this.scene.url,\n date: this.scene.date,\n rating: this.scene.rating,\n gallery_id: this.scene.gallery ? this.scene.gallery.id : undefined,\n studio_id: this.scene.studio ? this.scene.studio.id : undefined,\n performer_ids: this.scene.performers.map((performer) => performer.id),\n tag_ids: this.scene.tags.map((tag) => tag.id)\n };\n\n SceneParserResult.setInput(ret, \"title\", this.title);\n SceneParserResult.setInput(ret, \"date\", this.date);\n SceneParserResult.setInput(ret, \"performer_ids\", this.performerIds);\n SceneParserResult.setInput(ret, \"studio_id\", this.studioId);\n SceneParserResult.setInput(ret, \"tag_ids\", this.tagIds);\n\n return ret;\n }\n};\n\ninterface IParserInput {\n pattern: string,\n ignoreWords: string[],\n whitespaceCharacters: string,\n capitalizeTitle: boolean,\n page: number,\n pageSize: number,\n findClicked: boolean\n}\n\ninterface IParserRecipe {\n pattern: string,\n ignoreWords: string[],\n whitespaceCharacters: string,\n capitalizeTitle: boolean,\n description: string\n}\n\nconst builtInRecipes = [\n {\n pattern: \"{title}\",\n ignoreWords: [],\n whitespaceCharacters: \"\",\n capitalizeTitle: false,\n description: \"Filename\"\n },\n {\n pattern: \"{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \"\",\n capitalizeTitle: false,\n description: \"Without extension\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.XXX.{}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{title}.XXX.{}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"\"\n },\n {\n pattern: \"{}.{yy}.{mm}.{dd}.{title}.{i}.{ext}\",\n ignoreWords: [\"cz\", \"fr\"],\n whitespaceCharacters: \".\",\n capitalizeTitle: true,\n description: \"Foreign language\"\n }\n];\n\nexport const SceneFilenameParser: React.FC = () => {\n const [parserResult, setParserResult] = useState([]);\n const [parserInput, setParserInput] = useState(initialParserInput());\n\n const [allTitleSet, setAllTitleSet] = useState(false);\n const [allDateSet, setAllDateSet] = useState(false);\n const [allPerformerSet, setAllPerformerSet] = useState(false);\n const [allTagSet, setAllTagSet] = useState(false);\n const [allStudioSet, setAllStudioSet] = useState(false);\n\n const [showFields, setShowFields] = useState>(initialShowFieldsState());\n \n const [totalItems, setTotalItems] = useState(0);\n\n // Network state\n const [isLoading, setIsLoading] = useState(false);\n\n const updateScenes = StashService.useScenesUpdate(getScenesUpdateData());\n\n function initialParserInput() {\n return {\n pattern: \"{title}.{ext}\",\n ignoreWords: [],\n whitespaceCharacters: \"._\",\n capitalizeTitle: true,\n page: 1,\n pageSize: 20,\n findClicked: false\n };\n }\n\n function initialShowFieldsState() {\n return new Map([\n [\"Title\", true],\n [\"Date\", true],\n [\"Performers\", true],\n [\"Tags\", true],\n [\"Studio\", true]\n ]);\n }\n\n function getParserFilter() {\n return {\n q: parserInput.pattern,\n page: parserInput.page,\n per_page: parserInput.pageSize,\n sort: \"path\",\n direction: GQL.SortDirectionEnum.Asc,\n };\n }\n\n function getParserInput() {\n return {\n ignoreWords: parserInput.ignoreWords,\n whitespaceCharacters: parserInput.whitespaceCharacters,\n capitalizeTitle: parserInput.capitalizeTitle\n };\n }\n\n async function onFind() {\n setParserResult([]);\n\n setIsLoading(true);\n \n try {\n const response = await StashService.queryParseSceneFilenames(getParserFilter(), getParserInput());\n\n let result = response.data.parseSceneFilenames;\n if (!!result) {\n parseResults(result.results);\n setTotalItems(result.count);\n }\n } catch (err) {\n ErrorUtils.handle(err);\n }\n\n setIsLoading(false);\n }\n\n useEffect(() => {\n if(parserInput.findClicked) {\n onFind();\n }\n }, [parserInput]);\n\n function onPageSizeChanged(newSize : number) {\n var newInput = _.clone(parserInput);\n newInput.page = 1;\n newInput.pageSize = newSize;\n setParserInput(newInput);\n }\n\n function onPageChanged(newPage : number) {\n if (newPage !== parserInput.page) {\n var newInput = _.clone(parserInput);\n newInput.page = newPage;\n setParserInput(newInput);\n }\n }\n\n function onFindClicked(input : IParserInput) {\n input.page = 1;\n input.findClicked = true;\n setParserInput(input);\n setTotalItems(0);\n }\n\n function getScenesUpdateData() {\n return parserResult.filter((result) => result.isChanged()).map((result) => result.toSceneUpdateInput());\n }\n\n async function onApply() {\n setIsLoading(true);\n\n try {\n await updateScenes();\n ToastUtils.success(\"Updated scenes\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n\n setIsLoading(false);\n }\n\n function parseResults(results : GQL.ParseSceneFilenamesResults[]) {\n if (results) {\n var result = results.map((r) => {\n return new SceneParserResult(r);\n }).filter((r) => !!r) as SceneParserResult[];\n\n setParserResult(result);\n determineFieldsToHide();\n }\n }\n\n function determineFieldsToHide() {\n var pattern = parserInput.pattern;\n var titleSet = pattern.includes(\"{title}\");\n var dateSet = pattern.includes(\"{date}\") || \n pattern.includes(\"{dd}\") || // don't worry about other partial date fields since this should be implied\n ParserField.fullDateFields.some((f) => {\n return pattern.includes(\"{\" + f.field + \"}\");\n });\n var performerSet = pattern.includes(\"{performer}\");\n var tagSet = pattern.includes(\"{tag}\");\n var studioSet = pattern.includes(\"{studio}\");\n\n var showFieldsCopy = _.clone(showFields);\n showFieldsCopy.set(\"Title\", titleSet);\n showFieldsCopy.set(\"Date\", dateSet);\n showFieldsCopy.set(\"Performers\", performerSet);\n showFieldsCopy.set(\"Tags\", tagSet);\n showFieldsCopy.set(\"Studio\", studioSet);\n setShowFields(showFieldsCopy);\n }\n\n useEffect(() => {\n var newAllTitleSet = !parserResult.some((r) => {\n return !r.title.set;\n });\n var newAllDateSet = !parserResult.some((r) => {\n return !r.date.set;\n });\n var newAllPerformerSet = !parserResult.some((r) => {\n return !r.performerIds.set;\n });\n var newAllTagSet = !parserResult.some((r) => {\n return !r.tagIds.set;\n });\n var newAllStudioSet = !parserResult.some((r) => {\n return !r.studioId.set;\n });\n\n if (newAllTitleSet !== allTitleSet) {\n setAllTitleSet(newAllTitleSet);\n }\n if (newAllDateSet !== allDateSet) {\n setAllDateSet(newAllDateSet);\n }\n if (newAllPerformerSet !== allPerformerSet) {\n setAllTagSet(newAllPerformerSet);\n }\n if (newAllTagSet !== allTagSet) {\n setAllTagSet(newAllTagSet);\n }\n if (newAllStudioSet !== allStudioSet) {\n setAllStudioSet(newAllStudioSet);\n }\n }, [parserResult]);\n\n function onSelectAllTitleSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.title.set = selected;\n });\n\n setParserResult(newResult);\n setAllTitleSet(selected);\n }\n\n function onSelectAllDateSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.date.set = selected;\n });\n\n setParserResult(newResult);\n setAllDateSet(selected);\n }\n\n function onSelectAllPerformerSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.performerIds.set = selected;\n });\n\n setParserResult(newResult);\n setAllPerformerSet(selected);\n }\n\n function onSelectAllTagSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.tagIds.set = selected;\n });\n\n setParserResult(newResult);\n setAllTagSet(selected);\n }\n\n function onSelectAllStudioSet(selected : boolean) {\n var newResult = [...parserResult];\n\n newResult.forEach((r) => {\n r.studioId.set = selected;\n });\n\n setParserResult(newResult);\n setAllStudioSet(selected);\n }\n\n interface IShowFieldsProps {\n fields: Map\n onShowFieldsChanged: (fields : Map) => void\n }\n\n function ShowFields(props: IShowFieldsProps) {\n const [open, setOpen] = useState(false);\n\n function handleClick(label: string) {\n const copy = new Map(props.fields);\n copy.set(label, !props.fields.get(label));\n props.onShowFieldsChanged(copy);\n }\n\n const fieldRows = [...props.fields.entries()].map(([label, enabled]) => (\n
    {handleClick(label)}}>\n \n {label}\n
    \n ));\n\n return (\n
    \n
    setOpen(!open)}>\n \n Display fields\n
    \n \n
    \n {fieldRows}\n
    \n
    \n
    \n );\n }\n\n interface IParserInputProps {\n input: IParserInput,\n onFind: (input : IParserInput) => void\n }\n\n function ParserInput(props : IParserInputProps) {\n const [pattern, setPattern] = useState(props.input.pattern);\n const [ignoreWords, setIgnoreWords] = useState(props.input.ignoreWords.join(\" \"));\n const [whitespaceCharacters, setWhitespaceCharacters] = useState(props.input.whitespaceCharacters);\n const [capitalizeTitle, setCapitalizeTitle] = useState(props.input.capitalizeTitle);\n\n function onFind() {\n props.onFind({\n pattern: pattern,\n ignoreWords: ignoreWords.split(\" \"),\n whitespaceCharacters: whitespaceCharacters,\n capitalizeTitle: capitalizeTitle,\n page: 1,\n pageSize: props.input.pageSize,\n findClicked: props.input.findClicked\n });\n }\n\n function setParserRecipe(recipe: IParserRecipe) {\n setPattern(recipe.pattern);\n setIgnoreWords(recipe.ignoreWords.join(\" \"));\n setWhitespaceCharacters(recipe.whitespaceCharacters);\n setCapitalizeTitle(recipe.capitalizeTitle);\n }\n \n const validFields = [new ParserField(\"\", \"Wildcard\")].concat(ParserField.validFields);\n \n function addParserField(field: ParserField) {\n setPattern(pattern + field.getFieldPattern());\n }\n\n const PAGE_SIZE_OPTIONS = [\"20\", \"40\", \"60\", \"120\"];\n\n return (\n \n \n setPattern(newValue.target.value)}\n value={pattern}\n />\n \n { validFields.map(item => (\n addParserField(item)}>\n {item.field}{item.helperText}\n \n ))}\n \n
    Use '\\\\' to escape literal {} characters
    \n
    \n\n \n Ignored words::\n setIgnoreWords(newValue.target.value)}\n value={ignoreWords}\n />\n
    Matches with {\"{i}\"}
    \n
    \n \n \n
    Title
    \n Whitespace characters:\n setWhitespaceCharacters(newValue.target.value)}\n value={whitespaceCharacters}\n />\n \n Capitalize title\n setCapitalizeTitle(!capitalizeTitle)}\n />\n \n
    These characters will be replaced with whitespace in the title
    \n
    \n \n {/* TODO - mapping stuff will go here */}\n\n \n \n { builtInRecipes.map(item => (\n setParserRecipe(item)}>\n {item.pattern}{item.description}\n \n ))}\n \n \n\n \n setShowFields(fields)}\n />\n \n\n \n \n onPageSizeChanged(parseInt(event.target.value))}\n defaultValue={props.input.pageSize}\n className=\"filter-item\"\n >\n { PAGE_SIZE_OPTIONS.map(val => ) }\n \n \n
    \n );\n }\n\n interface ISceneParserFieldProps {\n parserResult : ParserResult\n className? : string\n fieldName : string\n onSetChanged : (set : boolean) => void\n onValueChanged : (value : any) => void\n originalParserResult? : ParserResult\n renderOriginalInputField: (props : ISceneParserFieldProps) => JSX.Element\n renderNewInputField: (props : ISceneParserFieldProps, onChange : (event : any) => void) => JSX.Element\n }\n\n function SceneParserField(props : ISceneParserFieldProps) {\n\n function maybeValueChanged(value : any) {\n if (value !== props.parserResult.value) {\n props.onValueChanged(value);\n }\n }\n\n if (!showFields.get(props.fieldName)) {\n return null;\n }\n\n return (\n <>\n \n {props.onSetChanged(!props.parserResult.set)}}\n />\n \n \n \n {props.renderOriginalInputField(props)}\n {props.renderNewInputField(props, (value) => maybeValueChanged(value))}\n \n \n \n );\n }\n\n function renderOriginalInputGroup(props: ISceneParserFieldProps) {\n var parserResult = props.originalParserResult || props.parserResult;\n\n return (\n \n );\n }\n\n interface IInputGroupWrapperProps {\n parserResult: ParserResult\n onChange : (event : any) => void\n className? : string\n }\n\n function InputGroupWrapper(props: IInputGroupWrapperProps) {\n return (\n props.onChange(event.target.value)}\n />\n );\n }\n \n function renderNewInputGroup(props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return (\n {onChange(value)}}\n parserResult={props.parserResult}\n />\n );\n }\n\n interface HasName {\n name: string\n }\n\n function renderOriginalSelect(props : ISceneParserFieldProps) {\n const parserResult = props.originalParserResult || props.parserResult;\n\n const elements = parserResult.originalValue\n ? Array.isArray(parserResult.originalValue)\n ? parserResult.originalValue.map((el:HasName) => el.name)\n : parserResult.originalValue.name\n : [];\n\n return (\n
    \n { elements.map((name:string) => {name}) }\n
    \n );\n }\n\n function renderNewMultiSelect(type: \"performers\" | \"tags\", props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return (\n {\n const ids = items.map((i) => i.id);\n onChange(ids);\n }}\n initialIds={props.parserResult.value}\n />\n );\n }\n\n function renderNewPerformerSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return renderNewMultiSelect(\"performers\", props, onChange);\n }\n\n function renderNewTagSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return renderNewMultiSelect(\"tags\", props, onChange);\n }\n\n function renderNewStudioSelect(props : ISceneParserFieldProps, onChange : (value : any) => void) {\n return (\n onChange(items[0]?.id)}\n initialIds={props.parserResult.value ? [props.parserResult.value] : []}\n />\n );\n }\n\n interface ISceneParserRowProps {\n scene : SceneParserResult,\n onChange: (changedScene : SceneParserResult) => void\n }\n\n function SceneParserRow(props : ISceneParserRowProps) {\n\n function changeParser(result : ParserResult, set : boolean, value : any) {\n var newParser = _.clone(result);\n newParser.set = set;\n newParser.value = value;\n return newParser;\n }\n\n function onTitleChanged(set : boolean, value: string | undefined) {\n var newResult = _.clone(props.scene);\n newResult.title = changeParser(newResult.title, set, value);\n props.onChange(newResult);\n }\n\n function onDateChanged(set : boolean, value: string | undefined) {\n var newResult = _.clone(props.scene);\n newResult.date = changeParser(newResult.date, set, value);\n props.onChange(newResult);\n }\n\n function onPerformerIdsChanged(set : boolean, value: string[] | undefined) {\n var newResult = _.clone(props.scene);\n newResult.performerIds = changeParser(newResult.performerIds, set, value);\n props.onChange(newResult);\n }\n\n function onTagIdsChanged(set : boolean, value: string[] | undefined) {\n var newResult = _.clone(props.scene);\n newResult.tagIds = changeParser(newResult.tagIds, set, value);\n props.onChange(newResult);\n }\n\n function onStudioIdChanged(set : boolean, value: string | undefined) {\n var newResult = _.clone(props.scene);\n newResult.studioId = changeParser(newResult.studioId, set, value);\n props.onChange(newResult);\n }\n\n return (\n \n \n {props.scene.filename}\n \n onTitleChanged(set, props.scene.title.value)}\n onValueChanged={(value) => onTitleChanged(props.scene.title.set, value)}\n renderOriginalInputField={renderOriginalInputGroup}\n renderNewInputField={renderNewInputGroup}\n />\n onDateChanged(set, props.scene.date.value)}\n onValueChanged={(value) => onDateChanged(props.scene.date.set, value)}\n renderOriginalInputField={renderOriginalInputGroup}\n renderNewInputField={renderNewInputGroup}\n />\n onPerformerIdsChanged(set, props.scene.performerIds.value)}\n onValueChanged={(value) => onPerformerIdsChanged(props.scene.performerIds.set, value)}\n renderOriginalInputField={renderOriginalSelect}\n renderNewInputField={renderNewPerformerSelect}\n />\n onTagIdsChanged(set, props.scene.tagIds.value)}\n onValueChanged={(value) => onTagIdsChanged(props.scene.tagIds.set, value)}\n renderOriginalInputField={renderOriginalSelect}\n renderNewInputField={renderNewTagSelect}\n />\n onStudioIdChanged(set, props.scene.studioId.value)}\n onValueChanged={(value) => onStudioIdChanged(props.scene.studioId.set, value)}\n renderOriginalInputField={renderOriginalSelect}\n renderNewInputField={renderNewStudioSelect}\n />\n \n )\n }\n\n function onChange(scene : SceneParserResult, changedScene : SceneParserResult) {\n var newResult = [...parserResult];\n\n var index = newResult.indexOf(scene);\n newResult[index] = changedScene;\n\n setParserResult(newResult);\n }\n\n function renderHeader(fieldName: string, allSet: boolean, onAllSet: (set: boolean) => void) {\n if (!showFields.get(fieldName)) {\n return null;\n }\n\n return (\n <>\n \n {onAllSet(!allSet)}}\n />\n \n {fieldName}\n \n )\n }\n\n function renderTable() {\n if (parserResult.length === 0) { return undefined; }\n\n return (\n <>\n
    \n
    \n \n \n \n \n {renderHeader(\"Title\", allTitleSet, onSelectAllTitleSet)}\n {renderHeader(\"Date\", allDateSet, onSelectAllDateSet)}\n {renderHeader(\"Performers\", allPerformerSet, onSelectAllPerformerSet)}\n {renderHeader(\"Tags\", allTagSet, onSelectAllTagSet)}\n {renderHeader(\"Studio\", allStudioSet, onSelectAllStudioSet)}\n \n \n \n {parserResult.map((scene) => \n onChange(scene, changedScene)}/>\n )}\n \n
    Filename
    \n
    \n onPageChanged(page)}\n />\n \n
    \n \n )\n }\n\n return (\n \n

    Scene Filename Parser

    \n onFindClicked(input)}\n />\n\n {isLoading ? : undefined}\n {renderTable()}\n
    \n );\n};\n \n","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneListTable.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneMarkerList.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx",["399","400","401","402","403"],"import axios from \"axios\";\nimport React, { CSSProperties, useEffect, useRef, useState } from \"react\";\nimport * as GQL from \"../../../core/generated-graphql\";\nimport { TextUtils } from \"../../../utils/text\";\nimport \"./ScenePlayerScrubber.scss\";\n\ninterface IScenePlayerScrubberProps {\n scene: GQL.SceneDataFragment;\n position: number;\n onSeek: (seconds: number) => void;\n onScrolled: () => void;\n}\n\ninterface ISceneSpriteItem {\n start: number;\n end: number;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport const ScenePlayerScrubber: React.FC = (props: IScenePlayerScrubberProps) => {\n const contentEl = useRef(null);\n const positionIndicatorEl = useRef(null);\n const scrubberSliderEl = useRef(null);\n const mouseDown = useRef(false);\n const lastMouseEvent = useRef(null);\n const startMouseEvent = useRef(null);\n const velocity = useRef(0);\n\n const _position = useRef(0);\n function getPostion() { return _position.current; }\n function setPosition(newPostion: number, shouldEmit: boolean = true) {\n if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return; }\n if (shouldEmit) { props.onScrolled(); }\n\n const midpointOffset = scrubberSliderEl.current.clientWidth / 2;\n\n const bounds = getBounds() * -1;\n if (newPostion > midpointOffset) {\n _position.current = midpointOffset;\n } else if (newPostion < bounds - midpointOffset) {\n _position.current = bounds - midpointOffset;\n } else {\n _position.current = newPostion;\n }\n\n scrubberSliderEl.current.style.transform = `translateX(${_position.current}px)`;\n\n const indicatorPosition = (\n (newPostion - midpointOffset) / (bounds - (midpointOffset * 2)) * scrubberSliderEl.current.clientWidth\n );\n positionIndicatorEl.current.style.transform = `translateX(${indicatorPosition}px)`;\n }\n\n const [spriteItems, setSpriteItems] = useState([]);\n const [delayedRender, setDelayedRender] = useState(false);\n\n useEffect(() => {\n if (!scrubberSliderEl.current) { return; }\n scrubberSliderEl.current.style.transform = `translateX(${scrubberSliderEl.current.clientWidth / 2}px)`;\n }, [scrubberSliderEl]);\n\n useEffect(() => {\n fetchSpriteInfo();\n }, [props.scene]);\n\n useEffect(() => {\n if (!scrubberSliderEl.current) { return; }\n const duration = Number(props.scene.file.duration);\n const percentage = props.position / duration;\n const position = (\n (scrubberSliderEl.current.scrollWidth * percentage) - (scrubberSliderEl.current.clientWidth / 2)\n ) * -1;\n setPosition(position, false);\n }, [props.position]);\n\n useEffect(() => {\n window.addEventListener(\"mouseup\", onMouseUp, false);\n return () => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n };\n });\n\n useEffect(() => {\n if (!contentEl.current) { return; }\n contentEl.current.addEventListener(\"mousedown\", onMouseDown, false);\n return () => {\n if (!contentEl.current) { return; }\n contentEl.current.removeEventListener(\"mousedown\", onMouseDown);\n };\n });\n\n useEffect(() => {\n if (!contentEl.current) { return; }\n contentEl.current.addEventListener(\"mousemove\", onMouseMove, false);\n return () => {\n if (!contentEl.current) { return; }\n contentEl.current.removeEventListener(\"mousemove\", onMouseMove);\n };\n });\n\n function onMouseUp(this: Window, event: MouseEvent) {\n if (!startMouseEvent.current || !scrubberSliderEl.current) { return; }\n mouseDown.current = false;\n const delta = Math.abs(event.clientX - startMouseEvent.current.clientX);\n if (delta < 1 && event.target instanceof HTMLDivElement) {\n const target: HTMLDivElement = event.target;\n let seekSeconds: number | undefined;\n\n const spriteIdString = target.getAttribute(\"data-sprite-item-id\");\n if (spriteIdString != null) {\n const spritePercentage = event.offsetX / target.clientWidth;\n const offset = target.offsetLeft + (target.clientWidth * spritePercentage);\n const percentage = offset / scrubberSliderEl.current.scrollWidth;\n seekSeconds = percentage * (props.scene.file.duration || 0);\n }\n\n const markerIdString = target.getAttribute(\"data-marker-id\");\n if (markerIdString != null) {\n const marker = props.scene.scene_markers[Number(markerIdString)];\n seekSeconds = marker.seconds;\n }\n\n if (!!seekSeconds) { props.onSeek(seekSeconds); }\n } else if (Math.abs(velocity.current) > 25) {\n const newPosition = getPostion() + (velocity.current * 10);\n setPosition(newPosition);\n velocity.current = 0;\n }\n }\n\n function onMouseDown(this: HTMLDivElement, event: MouseEvent) {\n event.preventDefault();\n mouseDown.current = true;\n lastMouseEvent.current = event;\n startMouseEvent.current = event;\n velocity.current = 0;\n }\n\n function onMouseMove(this: HTMLDivElement, event: MouseEvent) {\n if (!mouseDown.current) { return; }\n\n // negative dragging right (past), positive left (future)\n const delta = event.clientX - lastMouseEvent.current.clientX;\n\n const movement = event.movementX;\n velocity.current = movement;\n\n const newPostion = getPostion() + delta;\n setPosition(newPostion);\n lastMouseEvent.current = event;\n }\n\n function getBounds(): number {\n if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return 0; }\n return scrubberSliderEl.current.scrollWidth - scrubberSliderEl.current.clientWidth;\n }\n\n function goBack() {\n if (!scrubberSliderEl.current) { return; }\n const newPosition = getPostion() + scrubberSliderEl.current.clientWidth;\n setPosition(newPosition);\n }\n\n function goForward() {\n if (!scrubberSliderEl.current) { return; }\n const newPosition = getPostion() - scrubberSliderEl.current.clientWidth;\n setPosition(newPosition);\n }\n\n async function fetchSpriteInfo() {\n if (!props.scene || !props.scene.paths.vtt) { return; }\n\n const response = await axios.get(props.scene.paths.vtt, {responseType: \"text\"});\n if (response.status !== 200) {\n console.log(response.statusText);\n }\n\n // TODO: This is gnarly\n const lines = response.data.split(\"\\n\");\n if (lines.shift() !== \"WEBVTT\") { return; }\n if (lines.shift() !== \"\") { return; }\n let item: ISceneSpriteItem = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0};\n const newSpriteItems: ISceneSpriteItem[] = [];\n while (lines.length) {\n const line = lines.shift();\n if (line === undefined) { continue; }\n\n if (line.includes(\"#\") && line.includes(\"=\") && line.includes(\",\")) {\n const size = line.split(\"#\")[1].split(\"=\")[1].split(\",\");\n item.x = Number(size[0]);\n item.y = Number(size[1]);\n item.w = Number(size[2]);\n item.h = Number(size[3]);\n\n newSpriteItems.push(item);\n item = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0};\n } else if (line.includes(\" --> \")) {\n const times = line.split(\" --> \");\n\n const start = times[0].split(\":\");\n item.start = (+start[0]) * 60 * 60 + (+start[1]) * 60 + (+start[2]);\n\n const end = times[1].split(\":\");\n item.end = (+end[0]) * 60 * 60 + (+end[1]) * 60 + (+end[2]);\n }\n }\n\n setSpriteItems(newSpriteItems);\n // TODO: Very hacky. Need to wait for the scroll width to update from the image loading.\n setTimeout(() => {\n setDelayedRender(true);\n }, 100);\n }\n\n function renderTags() {\n function getTagStyle(i: number): CSSProperties {\n if (!scrubberSliderEl.current ||\n spriteItems.length === 0 ||\n getBounds() === 0) { return {}; }\n\n const tags = window.document.getElementsByClassName(\"scrubber-tag\");\n if (tags.length === 0) { return {}; }\n\n let tag: any;\n for (let index = 0; index < tags.length; index++) {\n tag = tags.item(index) as any;\n const id = tag.getAttribute(\"data-marker-id\");\n if (id === i.toString()) {\n break;\n }\n }\n\n const marker = props.scene.scene_markers[i];\n const duration = Number(props.scene.file.duration);\n const percentage = marker.seconds / duration;\n\n const left = (scrubberSliderEl.current.scrollWidth * percentage) - (tag.clientWidth / 2);\n return {\n left: `${left}px`,\n height: 20,\n };\n }\n\n return props.scene.scene_markers.map((marker, index) => {\n const dataAttrs = {\n \"data-marker-id\": index,\n };\n return (\n \n {marker.title}\n
    \n );\n });\n }\n\n function renderSprites() {\n function getStyleForSprite(index: number): CSSProperties {\n if (!props.scene.paths.vtt) { return {}; }\n const sprite = spriteItems[index];\n const left = sprite.w * index;\n const path = props.scene.paths.vtt.replace(\"_thumbs.vtt\", \"_sprite.jpg\"); // TODO: Gnarly\n return {\n width: `${sprite.w}px`,\n height: `${sprite.h}px`,\n margin: \"0px auto\",\n backgroundPosition: -sprite.x + \"px \" + -sprite.y + \"px\",\n backgroundImage: `url(${path})`,\n left: `${left}px`,\n };\n }\n\n return spriteItems.map((spriteItem, index) => {\n const dataAttrs = {\n \"data-sprite-item-id\": index,\n };\n return (\n \n {TextUtils.secondsToTimestamp(spriteItem.start)} - {TextUtils.secondsToTimestamp(spriteItem.end)}\n
    \n );\n });\n }\n\n return (\n
    \n goBack()}><\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n {renderTags()}\n
    \n {renderSprites()}\n
    \n
    \n
    \n goForward()}>>\n
    \n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/helpers.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/scenes.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/select/FilterMultiSelect.tsx",["404","405"],"import * as React from \"react\";\n\nimport { MenuItem } from \"@blueprintjs/core\";\nimport { IMultiSelectProps, ItemPredicate, ItemRenderer, MultiSelect } from \"@blueprintjs/select\";\nimport * as GQL from \"../../core/generated-graphql\";\nimport { StashService } from \"../../core/StashService\";\nimport { HTMLInputProps } from \"../../models\";\nimport { ErrorUtils } from \"../../utils/errors\";\nimport { ToastUtils } from \"../../utils/toasts\";\n\nconst InternalPerformerMultiSelect = MultiSelect.ofType();\nconst InternalTagMultiSelect = MultiSelect.ofType();\nconst InternalStudioMultiSelect = MultiSelect.ofType();\n\ntype ValidTypes =\n GQL.AllPerformersForFilterAllPerformers |\n GQL.AllTagsForFilterAllTags |\n GQL.AllStudiosForFilterAllStudios;\n\ninterface IProps extends HTMLInputProps, Partial> {\n type: \"performers\" | \"studios\" | \"tags\";\n initialIds?: string[];\n onUpdate: (items: ValidTypes[]) => void;\n}\n\nexport const FilterMultiSelect: React.FunctionComponent = (props: IProps) => {\n let MultiSelectImpl = getMultiSelectImpl();\n let InternalMultiSelect = MultiSelectImpl.getInternalMultiSelect();\n const data = MultiSelectImpl.getData();\n \n const [selectedItems, setSelectedItems] = React.useState([]);\n const [items, setItems] = React.useState([]);\n const [newTagName, setNewTagName] = React.useState(\"\");\n const createTag = StashService.useTagCreate(getTagInput() as GQL.TagCreateInput);\n\n React.useEffect(() => {\n if (!!data) {\n MultiSelectImpl.translateData();\n }\n }, [data]);\n \n function getTagInput() {\n const tagInput: Partial = { name: newTagName };\n return tagInput;\n }\n\n async function onCreateNewObject(item: ValidTypes) {\n var created : any;\n if (props.type === \"tags\") {\n try {\n created = await createTag();\n \n items.push(created.data.tagCreate);\n setItems(items.slice());\n addSelectedItem(created.data.tagCreate);\n \n ToastUtils.success(\"Created tag\");\n } catch (e) {\n ErrorUtils.handle(e);\n }\n }\n }\n\n function createNewTag(query : string) {\n setNewTagName(query);\n return {\n name : query\n };\n }\n\n function createNewRenderer(query: string, active: boolean, handleClick: React.MouseEventHandler) {\n // if tag already exists with that name, then don't return anything\n if (items.find((item) => {\n return item.name === query;\n })) {\n return undefined;\n }\n\n return (\n \n );\n }\n\n React.useEffect(() => {\n if (!!props.initialIds && !!items) {\n const initialItems = items.filter((item) => props.initialIds!.includes(item.id));\n setSelectedItems(initialItems);\n }\n }, [props.initialIds, items]);\n\n function getMultiSelectImpl() {\n let getInternalMultiSelect: () => new (props: IMultiSelectProps) => MultiSelect;\n let getData: () => GQL.AllPerformersForFilterQuery | GQL.AllStudiosForFilterQuery | GQL.AllTagsForFilterQuery | undefined;\n let translateData: () => void;\n let createNewObject: ((query : string) => void) | undefined = undefined; \n\n switch (props.type) {\n case \"performers\": {\n getInternalMultiSelect = () => { return InternalPerformerMultiSelect; };\n getData = () => { const { data } = StashService.useAllPerformersForFilter(); return data; }\n translateData = () => { let perfData = data as GQL.AllPerformersForFilterQuery; setItems(!!perfData && !!perfData.allPerformers ? perfData.allPerformers : []); };\n break;\n }\n case \"studios\": {\n getInternalMultiSelect = () => { return InternalStudioMultiSelect; };\n getData = () => { const { data } = StashService.useAllStudiosForFilter(); return data; }\n translateData = () => { let studioData = data as GQL.AllStudiosForFilterQuery; setItems(!!studioData && !!studioData.allStudios ? studioData.allStudios : []); };\n break;\n }\n case \"tags\": {\n getInternalMultiSelect = () => { return InternalTagMultiSelect; };\n getData = () => { const { data } = StashService.useAllTagsForFilter(); return data; }\n translateData = () => { let tagData = data as GQL.AllTagsForFilterQuery; setItems(!!tagData && !!tagData.allTags ? tagData.allTags : []); };\n createNewObject = createNewTag;\n break;\n }\n default: {\n throw \"Unhandled case in FilterMultiSelect\";\n }\n }\n\n return {\n getInternalMultiSelect: getInternalMultiSelect,\n getData: getData,\n translateData: translateData,\n createNewObject: createNewObject\n };\n }\n\n const renderItem: ItemRenderer = (item, itemProps) => {\n if (!itemProps.modifiers.matchesPredicate) { return null; }\n return (\n \n );\n };\n\n const filter: ItemPredicate = (query, item) => {\n if (selectedItems.includes(item)) { return false; }\n return item.name!.toLowerCase().indexOf(query.toLowerCase()) >= 0;\n };\n\n function addSelectedItem(item: ValidTypes) {\n selectedItems.push(item);\n setSelectedItems(selectedItems);\n props.onUpdate(selectedItems);\n }\n\n function onItemSelect(item: ValidTypes) {\n if (item.id === undefined) {\n // create the new item, if applicable\n onCreateNewObject(item);\n } else {\n addSelectedItem(item);\n }\n }\n\n function onItemRemove(value: string, index: number) {\n const newSelectedItems = selectedItems.filter((_, i) => i !== index);\n setSelectedItems(newSelectedItems);\n props.onUpdate(newSelectedItems);\n }\n\n return (\n tag.name}\n tagInputProps={{ onRemove: onItemRemove }}\n onItemSelect={onItemSelect}\n resetOnSelect={true}\n popoverProps={{position: \"bottom\"}}\n createNewItemFromQuery={MultiSelectImpl.createNewObject}\n createNewItemRenderer={createNewRenderer}\n {...props}\n />\n );\n};\n","/home/peroo/stash/ui/v2.5/src/components/select/FilterSelect.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/select/MarkerTitleSuggest.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/select/ScrapePerformerSuggest.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/select/ValidGalleriesSelect.tsx",[],"/home/peroo/stash/ui/v2.5/src/core/StashService.ts",[],"/home/peroo/stash/ui/v2.5/src/core/generated-graphql.tsx",[],"/home/peroo/stash/ui/v2.5/src/hooks/ListHook.tsx",["406","407","408","409"],"import { Spinner } from \"@blueprintjs/core\";\nimport _ from \"lodash\";\nimport queryString from \"query-string\";\nimport React, { useEffect, useState } from \"react\";\nimport { QueryHookResult } from \"react-apollo-hooks\";\nimport { ListFilter } from \"../components/list/ListFilter\";\nimport { Pagination } from \"../components/list/Pagination\";\nimport { StashService } from \"../core/StashService\";\nimport { IBaseProps } from \"../models\";\nimport { Criterion } from \"../models/list-filter/criteria/criterion\";\nimport { ListFilterModel } from \"../models/list-filter/filter\";\nimport { DisplayMode, FilterMode } from \"../models/list-filter/types\";\n\nexport interface IListHookData {\n filter: ListFilterModel;\n template: JSX.Element;\n options: IListHookOptions;\n onSelectChange: (id: string, selected : boolean, shiftKey: boolean) => void;\n}\n\ninterface IListHookOperation {\n text: string;\n onClick: (result: QueryHookResult, filter: ListFilterModel, selectedIds: Set) => void;\n}\n\nexport interface IListHookOptions {\n filterMode: FilterMode;\n props: IBaseProps;\n zoomable?: boolean;\n otherOperations?: IListHookOperation[];\n renderContent: (result: QueryHookResult, filter: ListFilterModel, selectedIds: Set, zoomIndex: number) => JSX.Element | undefined;\n renderSelectedOptions?: (result: QueryHookResult, selectedIds: Set) => JSX.Element | undefined;\n}\n\nexport class ListHook {\n public static useList(options: IListHookOptions): IListHookData {\n const [filter, setFilter] = useState(new ListFilterModel(options.filterMode));\n const [selectedIds, setSelectedIds] = useState>(new Set());\n const [lastClickedId, setLastClickedId] = useState(undefined);\n const [totalCount, setTotalCount] = useState(0);\n const [zoomIndex, setZoomIndex] = useState(1);\n\n // Update the filter when the query parameters change\n useEffect(() => {\n const queryParams = queryString.parse(options.props.location.search);\n const newFilter = _.cloneDeep(filter);\n newFilter.configureFromQueryParameters(queryParams);\n setFilter(newFilter);\n\n // TODO: Need this side effect to update the query params properly\n filter.configureFromQueryParameters(queryParams);\n }, [options.props.location.search]);\n\n let result: QueryHookResult;\n\n let getData: (filter : ListFilterModel) => QueryHookResult;\n let getItems: () => any[];\n let getCount: () => number;\n\n switch (options.filterMode) {\n case FilterMode.Scenes: {\n getData = (filter : ListFilterModel) => { return StashService.useFindScenes(filter); }\n getItems = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.scenes : []; }\n getCount = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.count : 0; }\n break;\n }\n case FilterMode.SceneMarkers: {\n getData = (filter : ListFilterModel) => { return StashService.useFindSceneMarkers(filter); }\n getItems = () => { return !!result.data && !!result.data.findSceneMarkers ? result.data.findSceneMarkers.scene_markers : []; }\n getCount = () => { return !!result.data && !!result.data.findSceneMarkers ? result.data.findSceneMarkers.count : 0; }\n break;\n }\n case FilterMode.Galleries: {\n getData = (filter : ListFilterModel) => { return StashService.useFindGalleries(filter); }\n getItems = () => { return !!result.data && !!result.data.findGalleries ? result.data.findGalleries.galleries : []; }\n getCount = () => { return !!result.data && !!result.data.findGalleries ? result.data.findGalleries.count : 0; }\n break;\n }\n case FilterMode.Studios: {\n getData = (filter : ListFilterModel) => { return StashService.useFindStudios(filter); }\n getItems = () => { return !!result.data && !!result.data.findStudios ? result.data.findStudios.studios : []; }\n getCount = () => { return !!result.data && !!result.data.findStudios ? result.data.findStudios.count : 0; }\n break;\n }\n case FilterMode.Performers: {\n getData = (filter : ListFilterModel) => { return StashService.useFindPerformers(filter); }\n getItems = () => { return !!result.data && !!result.data.findPerformers ? result.data.findPerformers.performers : []; }\n getCount = () => { return !!result.data && !!result.data.findPerformers ? result.data.findPerformers.count : 0; }\n break;\n }\n default: {\n console.error(\"REMOVE DEFAULT IN LIST HOOK\");\n getData = (filter : ListFilterModel) => { return StashService.useFindScenes(filter); }\n getItems = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.scenes : []; }\n getCount = () => { return !!result.data && !!result.data.findScenes ? result.data.findScenes.count : 0; }\n break;\n }\n }\n\n result = getData(filter);\n\n useEffect(() => {\n setTotalCount(getCount());\n\n // select none when data changes\n onSelectNone();\n setLastClickedId(undefined);\n }, [result.data])\n\n // Update the query parameters when the data changes\n useEffect(() => {\n const location = Object.assign({}, options.props.history.location);\n location.search = filter.makeQueryParameters();\n options.props.history.replace(location);\n }, [result.data, filter.displayMode]);\n\n // Update the total count\n useEffect(() => {\n const newFilter = _.cloneDeep(filter);\n newFilter.totalCount = totalCount;\n setFilter(newFilter);\n }, [totalCount]);\n\n function onChangePageSize(pageSize: number) {\n const newFilter = _.cloneDeep(filter);\n newFilter.itemsPerPage = pageSize;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeQuery(query: string) {\n const newFilter = _.cloneDeep(filter);\n newFilter.searchTerm = query;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeSortDirection(sortDirection: \"asc\" | \"desc\") {\n const newFilter = _.cloneDeep(filter);\n newFilter.sortDirection = sortDirection;\n setFilter(newFilter);\n }\n\n function onChangeSortBy(sortBy: string) {\n const newFilter = _.cloneDeep(filter);\n newFilter.sortBy = sortBy;\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangeDisplayMode(displayMode: DisplayMode) {\n const newFilter = _.cloneDeep(filter);\n newFilter.displayMode = displayMode;\n setFilter(newFilter);\n }\n\n function onAddCriterion(criterion: Criterion, oldId?: string) {\n const newFilter = _.cloneDeep(filter);\n\n // Find if we are editing an existing criteria, then modify that. Or create a new one.\n const existingIndex = newFilter.criteria.findIndex((c) => {\n // If we modified an existing criterion, then look for the old id.\n const id = !!oldId ? oldId : criterion.getId();\n return c.getId() === id;\n });\n if (existingIndex === -1) {\n newFilter.criteria.push(criterion);\n } else {\n newFilter.criteria[existingIndex] = criterion;\n }\n\n // Remove duplicate modifiers\n newFilter.criteria = newFilter.criteria.filter((obj, pos, arr) => {\n return arr.map((mapObj: any) => mapObj.getId()).indexOf(obj.getId()) === pos;\n });\n\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onRemoveCriterion(removedCriterion: Criterion) {\n const newFilter = _.cloneDeep(filter);\n newFilter.criteria = newFilter.criteria.filter((criterion) => criterion.getId() !== removedCriterion.getId());\n newFilter.currentPage = 1;\n setFilter(newFilter);\n }\n\n function onChangePage(page: number) {\n const newFilter = _.cloneDeep(filter);\n newFilter.currentPage = page;\n setFilter(newFilter);\n }\n\n function onSelectChange(id: string, selected : boolean, shiftKey: boolean) {\n if (shiftKey) {\n multiSelect(id, selected);\n } else {\n singleSelect(id, selected);\n }\n }\n\n function singleSelect(id: string, selected: boolean) {\n setLastClickedId(id);\n \n const newSelectedIds = _.clone(selectedIds);\n if (selected) {\n newSelectedIds.add(id);\n } else {\n newSelectedIds.delete(id);\n }\n\n setSelectedIds(newSelectedIds);\n }\n\n function multiSelect(id: string, selected : boolean) {\n let startIndex = 0;\n let thisIndex = -1;\n \n if (!!lastClickedId) {\n startIndex = getItems().findIndex((item) => {\n return item.id === lastClickedId;\n });\n }\n\n thisIndex = getItems().findIndex((item) => {\n return item.id === id;\n });\n\n selectRange(startIndex, thisIndex);\n }\n \n function selectRange(startIndex : number, endIndex : number) {\n if (startIndex > endIndex) {\n let tmp = startIndex;\n startIndex = endIndex;\n endIndex = tmp;\n }\n \n const subset = getItems().slice(startIndex, endIndex + 1);\n const newSelectedIds : Set = new Set();\n\n subset.forEach((item) => {\n newSelectedIds.add(item.id);\n });\n\n setSelectedIds(newSelectedIds);\n }\n\n function onSelectAll() {\n const newSelectedIds : Set = new Set();\n getItems().forEach((item) => {\n newSelectedIds.add(item.id);\n });\n\n setSelectedIds(newSelectedIds);\n setLastClickedId(undefined);\n }\n\n function onSelectNone() {\n const newSelectedIds : Set = new Set();\n setSelectedIds(newSelectedIds);\n setLastClickedId(undefined);\n }\n\n function onChangeZoom(newZoomIndex : number) {\n setZoomIndex(newZoomIndex);\n }\n\n const otherOperations = options.otherOperations ? options.otherOperations.map((o) => {\n return {\n text: o.text,\n onClick: () => {\n o.onClick(result, filter, selectedIds);\n }\n }\n }) : undefined;\n\n const template = (\n
    \n \n {options.renderSelectedOptions && selectedIds.size > 0 ? options.renderSelectedOptions(result, selectedIds) : undefined}\n {result.loading ? : undefined}\n {result.error ?

    {result.error.message}

    : undefined}\n {options.renderContent(result, filter, selectedIds, zoomIndex)}\n \n
    \n );\n\n return { filter, template, options, onSelectChange };\n }\n}\n","/home/peroo/stash/ui/v2.5/src/hooks/LocalForage.ts",[],"/home/peroo/stash/ui/v2.5/src/hooks/VideoHover.ts",[],"/home/peroo/stash/ui/v2.5/src/index.tsx",[],"/home/peroo/stash/ui/v2.5/src/models/base-props.ts",[],"/home/peroo/stash/ui/v2.5/src/models/index.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/criterion.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/favorite.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/has-markers.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/is-missing.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/none.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/performers.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/rating.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/resolution.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/studios.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/tags.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/utils.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/filter.ts",[],"/home/peroo/stash/ui/v2.5/src/models/list-filter/types.ts",[],"/home/peroo/stash/ui/v2.5/src/models/react-images.d.ts",[],"/home/peroo/stash/ui/v2.5/src/models/react-jw-player.d.ts",[],"/home/peroo/stash/ui/v2.5/src/models/types.ts",[],"/home/peroo/stash/ui/v2.5/src/react-app-env.d.ts",[],"/home/peroo/stash/ui/v2.5/src/serviceWorker.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/color.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/editabletext.tsx",[],"/home/peroo/stash/ui/v2.5/src/utils/errors.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/image.tsx",[],"/home/peroo/stash/ui/v2.5/src/utils/navigation.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/table.tsx",[],"/home/peroo/stash/ui/v2.5/src/utils/text.ts",["410"],"export class TextUtils {\n\n public static truncate(value?: string, limit: number = 100, tail: string = \"...\"): string {\n if (!value) { return \"\"; }\n return value.length > limit ? value.substring(0, limit) + tail : value;\n }\n\n public static fileSize(bytes: number = 0, precision: number = 2): string {\n if (isNaN(parseFloat(String(bytes))) || !isFinite(bytes)) { return \"?\"; }\n\n let unit = 0;\n while ( bytes >= 1024 ) {\n bytes /= 1024;\n unit++;\n }\n\n return bytes.toFixed(+precision) + \" \" + this.units[unit];\n }\n\n public static secondsToTimestamp(seconds: number): string {\n let ret = new Date(seconds * 1000).toISOString().substr(11, 8);\n\n if (ret.startsWith(\"00\")) {\n // strip hours if under one hour\n ret = ret.substr(3);\n }\n if (ret.startsWith(\"0\")) {\n // for duration under a minute, leave one leading zero\n ret = ret.substr(1);\n }\n return ret;\n }\n\n public static fileNameFromPath(path: string): string {\n if (!!path === false) { return \"No File Name\"; }\n return path.replace(/^.*[\\\\\\/]/, \"\");\n }\n\n public static age(dateString?: string, fromDateString?: string): number {\n if (!dateString) { return 0; }\n\n const birthdate = new Date(dateString);\n const fromDate = !!fromDateString ? new Date(fromDateString) : new Date();\n\n let age = fromDate.getFullYear() - birthdate.getFullYear();\n if (birthdate.getMonth() > fromDate.getMonth() ||\n (birthdate.getMonth() >= fromDate.getMonth() && birthdate.getDay() > fromDate.getDay())) {\n age -= 1;\n }\n\n return age;\n }\n\n public static bitRate(bitrate: number) {\n const megabits = bitrate / 1000000;\n return `${megabits.toFixed(2)} megabits per second`;\n }\n\n public static resolution(height: number) {\n if (height >= 240 && height < 480) {\n return \"240p\";\n } else if (height >= 480 && height < 720) {\n return \"480p\";\n } else if (height >= 720 && height < 1080) {\n return \"720p\";\n } else if (height >= 1080 && height < 2160) {\n return \"1080p\";\n } else if (height >= 2160) {\n return \"4K\";\n } else {\n return undefined;\n }\n }\n\n private static units = [\n \"bytes\",\n \"kB\",\n \"MB\",\n \"GB\",\n \"TB\",\n \"PB\",\n ];\n}\n","/home/peroo/stash/ui/v2.5/src/utils/toasts.ts",[],"/home/peroo/stash/ui/v2.5/src/utils/zoom.ts",[],{"ruleId":"411","severity":1,"message":"412","line":20,"column":6,"nodeType":"413","endLine":20,"endColumn":12,"fix":"414"},{"ruleId":"411","severity":1,"message":"415","line":26,"column":6,"nodeType":"413","endLine":26,"endColumn":13,"fix":"416"},{"ruleId":"411","severity":1,"message":"417","line":67,"column":6,"nodeType":"413","endLine":67,"endColumn":12,"fix":"418"},{"ruleId":"411","severity":1,"message":"419","line":49,"column":6,"nodeType":"413","endLine":49,"endColumn":19,"fix":"420"},{"ruleId":"411","severity":1,"message":"421","line":92,"column":6,"nodeType":"413","endLine":92,"endColumn":12,"fix":"422"},{"ruleId":"411","severity":1,"message":"423","line":101,"column":6,"nodeType":"413","endLine":101,"endColumn":20,"fix":"424"},{"ruleId":"411","severity":1,"message":"425","line":117,"column":6,"nodeType":"413","endLine":117,"endColumn":16,"fix":"426"},{"ruleId":"411","severity":1,"message":"412","line":85,"column":6,"nodeType":"413","endLine":85,"endColumn":12,"fix":"427"},{"ruleId":"411","severity":1,"message":"428","line":94,"column":6,"nodeType":"413","endLine":94,"endColumn":17,"fix":"429"},{"ruleId":"411","severity":1,"message":"412","line":28,"column":6,"nodeType":"413","endLine":28,"endColumn":12,"fix":"430"},{"ruleId":"411","severity":1,"message":"431","line":30,"column":3,"nodeType":"432","endLine":30,"endColumn":12,"fix":"433"},{"ruleId":"411","severity":1,"message":"434","line":343,"column":6,"nodeType":"413","endLine":343,"endColumn":19,"fix":"435"},{"ruleId":"411","severity":1,"message":"436","line":448,"column":6,"nodeType":"413","endLine":448,"endColumn":20,"fix":"437"},{"ruleId":"438","severity":1,"message":"439","line":58,"column":10,"nodeType":"432","endLine":58,"endColumn":23},{"ruleId":"411","severity":1,"message":"440","line":67,"column":6,"nodeType":"413","endLine":67,"endColumn":19,"fix":"441"},{"ruleId":"411","severity":1,"message":"442","line":77,"column":6,"nodeType":"413","endLine":77,"endColumn":22,"fix":"443"},{"ruleId":"411","severity":1,"message":"444","line":91,"column":17,"nodeType":"432","endLine":91,"endColumn":24},{"ruleId":"411","severity":1,"message":"444","line":100,"column":17,"nodeType":"432","endLine":100,"endColumn":24},{"ruleId":"411","severity":1,"message":"445","line":40,"column":6,"nodeType":"413","endLine":40,"endColumn":12,"fix":"446"},{"ruleId":"447","severity":1,"message":"448","line":123,"column":9,"nodeType":"449","messageId":"450","endLine":123,"endColumn":53},{"ruleId":"411","severity":1,"message":"451","line":52,"column":8,"nodeType":"413","endLine":52,"endColumn":39,"fix":"452"},{"ruleId":"411","severity":1,"message":"453","line":108,"column":8,"nodeType":"413","endLine":108,"endColumn":21,"fix":"454"},{"ruleId":"411","severity":1,"message":"455","line":115,"column":8,"nodeType":"413","endLine":115,"endColumn":41,"fix":"456"},{"ruleId":"411","severity":1,"message":"451","line":122,"column":8,"nodeType":"413","endLine":122,"endColumn":20,"fix":"457"},{"ruleId":"458","severity":1,"message":"459","line":36,"column":32,"nodeType":"460","messageId":"461","endLine":36,"endColumn":33,"suggestions":"462"},"react-hooks/exhaustive-deps","React Hook useEffect has missing dependencies: 'error' and 'loading'. Either include them or remove the dependency array.","ArrayExpression",{"range":"463","text":"464"},"React Hook useEffect has a missing dependency: 'props.history'. Either include it or remove the dependency array.",{"range":"465","text":"466"},"React Hook useEffect has a missing dependency: 'error'. Either include it or remove the dependency array.",{"range":"467","text":"468"},"React Hook useEffect has a missing dependency: 'config.error'. Either include it or remove the dependency array.",{"range":"469","text":"470"},"React Hook useEffect has missing dependencies: 'filterByLogLevel', 'prependLogEntries', and 'updateFilteredEntries'. Either include them or remove the dependency array.",{"range":"471","text":"472"},"React Hook useEffect has missing dependencies: 'appendLogEntries' and 'updateFilteredEntries'. Either include them or remove the dependency array.",{"range":"473","text":"474"},"React Hook useEffect has a missing dependency: 'updateFilteredEntries'. Either include it or remove the dependency array.",{"range":"475","text":"476"},{"range":"477","text":"464"},"React Hook useEffect has a missing dependency: 'isNew'. Either include it or remove the dependency array.",{"range":"478","text":"479"},{"range":"480","text":"464"},"React Hook useEffect contains a call to 'setTimestamp'. Without a list of dependencies, this can lead to an infinite chain of updates. To fix this, pass [props.location.search, timestamp] as a second argument to the useEffect Hook.","Identifier",{"range":"481","text":"482"},"React Hook useEffect has a missing dependency: 'onFind'. Either include it or remove the dependency array.",{"range":"483","text":"484"},"React Hook useEffect has missing dependencies: 'allDateSet', 'allPerformerSet', 'allStudioSet', 'allTagSet', and 'allTitleSet'. Either include them or remove the dependency array.",{"range":"485","text":"486"},"@typescript-eslint/no-unused-vars","'delayedRender' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'fetchSpriteInfo'. Either include it or remove the dependency array.",{"range":"487","text":"488"},"React Hook useEffect has missing dependencies: 'props.scene.file.duration' and 'setPosition'. Either include them or remove the dependency array.",{"range":"489","text":"490"},"The ref value 'contentEl.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'contentEl.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook React.useEffect has a missing dependency: 'MultiSelectImpl'. Either include it or remove the dependency array.",{"range":"491","text":"492"},"no-throw-literal","Expected an error object to be thrown.","ThrowStatement","object","React Hook useEffect has a missing dependency: 'filter'. Either include it or remove the dependency array.",{"range":"493","text":"494"},"React Hook useEffect has a missing dependency: 'getCount'. Either include it or remove the dependency array.",{"range":"495","text":"496"},"React Hook useEffect has missing dependencies: 'filter' and 'options.props.history'. Either include them or remove the dependency array.",{"range":"497","text":"498"},{"range":"499","text":"500"},"no-useless-escape","Unnecessary escape character: \\/.","Literal","unnecessaryEscape",["501","502"],[766,772],"[data, error, loading]",[983,990],"[props.history, tabId]",[2592,2598],"[data, error]",[1925,1938],"[config.data, config.error]",[2796,2802],"[data, filterByLogLevel, prependLogEntries, updateFilteredEntries]",[3020,3034],"[appendLogEntries, existingData, updateFilteredEntries]",[3422,3432],"[logLevel, updateFilteredEntries]",[4401,4407],[4596,4607],"[isNew, performer]",[1360,1366],[1772,1772],", [props.location.search, timestamp]",[9771,9784],"[onFind, parserInput]",[12750,12764],"[allDateSet, allPerformerSet, allStudioSet, allTagSet, allTitleSet, parserResult]",[2298,2311],"[fetchSpriteInfo, props.scene]",[2667,2683],"[props.position, props.scene.file.duration, setPosition]",[1668,1674],"[MultiSelectImpl, data]",[2305,2336],"[filter, options.props.location.search]",[5171,5184],"[getCount, result.data]",[5448,5481],"[result.data, filter.displayMode, options.props.history, filter]",[5658,5670],"[filter, totalCount]",{"messageId":"503","fix":"504","desc":"505"},{"messageId":"506","fix":"507","desc":"508"},"removeEscape",{"range":"509","text":"510"},"Remove the `\\`. This maintains the current functionality.","escapeBackslash",{"range":"511","text":"512"},"Replace the `\\` with `\\\\` to include the actual backslash character.",[1068,1069],"",[1068,1068],"\\"] \ No newline at end of file +[{"/home/peroo/stash/ui/v2.5/src/App.tsx":"1","/home/peroo/stash/ui/v2.5/src/components/ErrorBoundary.tsx":"2","/home/peroo/stash/ui/v2.5/src/components/Galleries/Galleries.tsx":"3","/home/peroo/stash/ui/v2.5/src/components/Galleries/Gallery.tsx":"4","/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryList.tsx":"5","/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryViewer.tsx":"6","/home/peroo/stash/ui/v2.5/src/components/MainNavbar.tsx":"7","/home/peroo/stash/ui/v2.5/src/components/PageNotFound.tsx":"8","/home/peroo/stash/ui/v2.5/src/components/Settings/Settings.tsx":"9","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx":"10","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx":"11","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx":"12","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx":"13","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx":"14","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx":"15","/home/peroo/stash/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx":"16","/home/peroo/stash/ui/v2.5/src/components/Shared/DurationInput.tsx":"17","/home/peroo/stash/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx":"18","/home/peroo/stash/ui/v2.5/src/components/Shared/TagLink.tsx":"19","/home/peroo/stash/ui/v2.5/src/components/Stats.tsx":"20","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioCard.tsx":"21","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx":"22","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioList.tsx":"23","/home/peroo/stash/ui/v2.5/src/components/Studios/Studios.tsx":"24","/home/peroo/stash/ui/v2.5/src/components/Tags/TagList.tsx":"25","/home/peroo/stash/ui/v2.5/src/components/Tags/Tags.tsx":"26","/home/peroo/stash/ui/v2.5/src/components/Wall/WallItem.tsx":"27","/home/peroo/stash/ui/v2.5/src/components/Wall/WallPanel.tsx":"28","/home/peroo/stash/ui/v2.5/src/components/list/AddFilter.tsx":"29","/home/peroo/stash/ui/v2.5/src/components/list/ListFilter.tsx":"30","/home/peroo/stash/ui/v2.5/src/components/list/Pagination.tsx":"31","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerCard.tsx":"32","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx":"33","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerList.tsx":"34","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerListTable.tsx":"35","/home/peroo/stash/ui/v2.5/src/components/performers/performers.tsx":"36","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneCard.tsx":"37","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx":"38","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx":"39","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx":"40","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx":"41","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx":"42","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx":"43","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx":"44","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneList.tsx":"45","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneListTable.tsx":"46","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneMarkerList.tsx":"47","/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx":"48","/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx":"49","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx":"50","/home/peroo/stash/ui/v2.5/src/components/scenes/helpers.tsx":"51","/home/peroo/stash/ui/v2.5/src/components/scenes/scenes.tsx":"52","/home/peroo/stash/ui/v2.5/src/core/StashService.ts":"53","/home/peroo/stash/ui/v2.5/src/core/generated-graphql.tsx":"54","/home/peroo/stash/ui/v2.5/src/hooks/ListHook.tsx":"55","/home/peroo/stash/ui/v2.5/src/hooks/LocalForage.ts":"56","/home/peroo/stash/ui/v2.5/src/hooks/VideoHover.ts":"57","/home/peroo/stash/ui/v2.5/src/index.tsx":"58","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/criterion.ts":"59","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/favorite.ts":"60","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/has-markers.ts":"61","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/is-missing.ts":"62","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/none.ts":"63","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/performers.ts":"64","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/rating.ts":"65","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/resolution.ts":"66","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/studios.ts":"67","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/tags.ts":"68","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/utils.ts":"69","/home/peroo/stash/ui/v2.5/src/models/list-filter/filter.ts":"70","/home/peroo/stash/ui/v2.5/src/models/list-filter/types.ts":"71","/home/peroo/stash/ui/v2.5/src/models/react-jw-player.d.ts":"72","/home/peroo/stash/ui/v2.5/src/react-app-env.d.ts":"73","/home/peroo/stash/ui/v2.5/src/serviceWorker.ts":"74","/home/peroo/stash/ui/v2.5/src/utils/image.tsx":"75","/home/peroo/stash/ui/v2.5/src/utils/navigation.ts":"76","/home/peroo/stash/ui/v2.5/src/utils/table.tsx":"77","/home/peroo/stash/ui/v2.5/src/utils/text.ts":"78","/home/peroo/stash/ui/v2.5/src/components/Shared/Icon.tsx":"79","/home/peroo/stash/ui/v2.5/src/components/Shared/Modal.tsx":"80","/home/peroo/stash/ui/v2.5/src/components/Shared/Select.tsx":"81","/home/peroo/stash/ui/v2.5/src/components/Shared/index.ts":"82","/home/peroo/stash/ui/v2.5/src/hooks/Toast.tsx":"83","/home/peroo/stash/ui/v2.5/src/hooks/index.ts":"84","/home/peroo/stash/ui/v2.5/src/utils/index.ts":"85"},{"size":1808,"mtime":1578597473383,"results":"86","hashOfConfig":"87"},{"size":769,"mtime":1577979127060,"results":"88","hashOfConfig":"87"},{"size":364,"mtime":1577979127060,"results":"89","hashOfConfig":"87"},{"size":673,"mtime":1578780374404,"results":"90","hashOfConfig":"87"},{"size":1706,"mtime":1578840371228,"results":"91","hashOfConfig":"87"},{"size":1459,"mtime":1578780782586,"results":"92","hashOfConfig":"87"},{"size":2025,"mtime":1578780973810,"results":"93","hashOfConfig":"87"},{"size":154,"mtime":1577979127060,"results":"94","hashOfConfig":"87"},{"size":2080,"mtime":1578606630070,"results":"95","hashOfConfig":"87"},{"size":1089,"mtime":1578779962137,"results":"96","hashOfConfig":"87"},{"size":10690,"mtime":1578777377200,"results":"97","hashOfConfig":"87"},{"size":4174,"mtime":1578777395837,"results":"98","hashOfConfig":"87"},{"size":3378,"mtime":1579081670257,"results":"99","hashOfConfig":"87"},{"size":1596,"mtime":1578777455727,"results":"100","hashOfConfig":"87"},{"size":7197,"mtime":1578777429962,"results":"101","hashOfConfig":"87"},{"size":4100,"mtime":1578772579521,"results":"102","hashOfConfig":"87"},{"size":2808,"mtime":1579376263183,"results":"103","hashOfConfig":"87"},{"size":2842,"mtime":1579083191986,"results":"104","hashOfConfig":"87"},{"size":1089,"mtime":1578772646246,"results":"105","hashOfConfig":"87"},{"size":1957,"mtime":1577992677258,"results":"106","hashOfConfig":"87"},{"size":692,"mtime":1578779922613,"results":"107","hashOfConfig":"87"},{"size":4965,"mtime":1578775703361,"results":"108","hashOfConfig":"87"},{"size":1109,"mtime":1578840450818,"results":"109","hashOfConfig":"87"},{"size":364,"mtime":1577979127156,"results":"110","hashOfConfig":"87"},{"size":4251,"mtime":1578772374069,"results":"111","hashOfConfig":"87"},{"size":244,"mtime":1577979127172,"results":"112","hashOfConfig":"87"},{"size":4840,"mtime":1578777944861,"results":"113","hashOfConfig":"87"},{"size":2718,"mtime":1578779875383,"results":"114","hashOfConfig":"87"},{"size":6945,"mtime":1578780147932,"results":"115","hashOfConfig":"87"},{"size":7927,"mtime":1578780083370,"results":"116","hashOfConfig":"87"},{"size":3338,"mtime":1578857663610,"results":"117","hashOfConfig":"87"},{"size":1396,"mtime":1578772518825,"results":"118","hashOfConfig":"87"},{"size":13319,"mtime":1579090535092,"results":"119","hashOfConfig":"87"},{"size":2299,"mtime":1578840417294,"results":"120","hashOfConfig":"87"},{"size":2486,"mtime":1578772436440,"results":"121","hashOfConfig":"87"},{"size":397,"mtime":1577979127192,"results":"122","hashOfConfig":"87"},{"size":6781,"mtime":1578777970063,"results":"123","hashOfConfig":"87"},{"size":3460,"mtime":1578862782601,"results":"124","hashOfConfig":"87"},{"size":1340,"mtime":1578776136708,"results":"125","hashOfConfig":"87"},{"size":12186,"mtime":1578777073186,"results":"126","hashOfConfig":"87"},{"size":3084,"mtime":1578775782756,"results":"127","hashOfConfig":"87"},{"size":8860,"mtime":1579083289085,"results":"128","hashOfConfig":"87"},{"size":622,"mtime":1578779863998,"results":"129","hashOfConfig":"87"},{"size":28913,"mtime":1579375318854,"results":"130","hashOfConfig":"87"},{"size":3630,"mtime":1578840509676,"results":"131","hashOfConfig":"87"},{"size":2891,"mtime":1578779742343,"results":"132","hashOfConfig":"87"},{"size":2073,"mtime":1578840478306,"results":"133","hashOfConfig":"87"},{"size":5728,"mtime":1578779762449,"results":"134","hashOfConfig":"87"},{"size":10451,"mtime":1579365871415,"results":"135","hashOfConfig":"87"},{"size":8853,"mtime":1578777324073,"results":"136","hashOfConfig":"87"},{"size":903,"mtime":1578779727474,"results":"137","hashOfConfig":"87"},{"size":484,"mtime":1577979127227,"results":"138","hashOfConfig":"87"},{"size":15920,"mtime":1578694141057,"results":"139","hashOfConfig":"87"},{"size":73414,"mtime":1577979127231,"results":"140","hashOfConfig":"87"},{"size":10952,"mtime":1578857810131,"results":"141","hashOfConfig":"87"},{"size":1659,"mtime":1577979127231,"results":"142","hashOfConfig":"87"},{"size":2144,"mtime":1577979127231,"results":"143","hashOfConfig":"87"},{"size":737,"mtime":1577993631244,"results":"144","hashOfConfig":"87"},{"size":6817,"mtime":1578779686935,"results":"145","hashOfConfig":"87"},{"size":654,"mtime":1578779602441,"results":"146","hashOfConfig":"87"},{"size":659,"mtime":1578779676544,"results":"147","hashOfConfig":"87"},{"size":677,"mtime":1578779621979,"results":"148","hashOfConfig":"87"},{"size":561,"mtime":1578779656917,"results":"149","hashOfConfig":"87"},{"size":961,"mtime":1578779704059,"results":"150","hashOfConfig":"87"},{"size":1008,"mtime":1578779647146,"results":"151","hashOfConfig":"87"},{"size":689,"mtime":1578779632605,"results":"152","hashOfConfig":"87"},{"size":876,"mtime":1578779695856,"results":"153","hashOfConfig":"87"},{"size":1277,"mtime":1578779714508,"results":"154","hashOfConfig":"87"},{"size":1955,"mtime":1578779612056,"results":"155","hashOfConfig":"87"},{"size":12442,"mtime":1578828077239,"results":"156","hashOfConfig":"87"},{"size":278,"mtime":1577979127255,"results":"157","hashOfConfig":"87"},{"size":200,"mtime":1577979127255,"results":"158","hashOfConfig":"87"},{"size":40,"mtime":1577979127255,"results":"159","hashOfConfig":"87"},{"size":5216,"mtime":1577979127287,"results":"160","hashOfConfig":"87"},{"size":1017,"mtime":1578772276612,"results":"161","hashOfConfig":"87"},{"size":2316,"mtime":1578785966854,"results":"162","hashOfConfig":"87"},{"size":3331,"mtime":1578772154994,"results":"163","hashOfConfig":"87"},{"size":2170,"mtime":1578771832873,"results":"164","hashOfConfig":"87"},{"size":394,"mtime":1578768337650,"results":"165","hashOfConfig":"87"},{"size":1154,"mtime":1578687200851,"results":"166","hashOfConfig":"87"},{"size":8029,"mtime":1578777486582,"results":"167","hashOfConfig":"87"},{"size":391,"mtime":1578776102511,"results":"168","hashOfConfig":"87"},{"size":1921,"mtime":1579375302147,"results":"169","hashOfConfig":"87"},{"size":269,"mtime":1578840329810,"results":"170","hashOfConfig":"87"},{"size":197,"mtime":1578772509485,"results":"171","hashOfConfig":"87"},{"filePath":"172","messages":"173","errorCount":5,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":null},"ojnhck",{"filePath":"174","messages":"175","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"176","messages":"177","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"178","messages":"179","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"180","messages":"181","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"182","messages":"183","errorCount":3,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":null},{"filePath":"184","messages":"185","errorCount":52,"warningCount":0,"fixableErrorCount":52,"fixableWarningCount":0,"source":null},{"filePath":"186","messages":"187","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"188","messages":"189","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"190","messages":"191","errorCount":18,"warningCount":0,"fixableErrorCount":18,"fixableWarningCount":0,"source":null},{"filePath":"192","messages":"193","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"194","messages":"195","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"196","messages":"197","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"198","messages":"199","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"200","messages":"201","errorCount":29,"warningCount":0,"fixableErrorCount":29,"fixableWarningCount":0,"source":null},{"filePath":"202","messages":"203","errorCount":39,"warningCount":0,"fixableErrorCount":39,"fixableWarningCount":0,"source":null},{"filePath":"204","messages":"205","errorCount":20,"warningCount":0,"fixableErrorCount":20,"fixableWarningCount":0,"source":null},{"filePath":"206","messages":"207","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"208","messages":"209","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"210","messages":"211","errorCount":6,"warningCount":0,"fixableErrorCount":6,"fixableWarningCount":0,"source":null},{"filePath":"212","messages":"213","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"214","messages":"215","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"216","messages":"217","errorCount":5,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":null},{"filePath":"218","messages":"219","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"220","messages":"221","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"222","messages":"223","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"224","messages":"225","errorCount":22,"warningCount":0,"fixableErrorCount":22,"fixableWarningCount":0,"source":null},{"filePath":"226","messages":"227","errorCount":14,"warningCount":0,"fixableErrorCount":14,"fixableWarningCount":0,"source":null},{"filePath":"228","messages":"229","errorCount":28,"warningCount":0,"fixableErrorCount":28,"fixableWarningCount":0,"source":null},{"filePath":"230","messages":"231","errorCount":35,"warningCount":0,"fixableErrorCount":35,"fixableWarningCount":0,"source":null},{"filePath":"232","messages":"233","errorCount":19,"warningCount":0,"fixableErrorCount":19,"fixableWarningCount":0,"source":null},{"filePath":"234","messages":"235","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"236","messages":"237","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"238","messages":"239","errorCount":10,"warningCount":0,"fixableErrorCount":10,"fixableWarningCount":0,"source":null},{"filePath":"240","messages":"241","errorCount":45,"warningCount":0,"fixableErrorCount":45,"fixableWarningCount":0,"source":null},{"filePath":"242","messages":"243","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"244","messages":"245","errorCount":41,"warningCount":0,"fixableErrorCount":41,"fixableWarningCount":0,"source":null},{"filePath":"246","messages":"247","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"248","messages":"249","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"250","messages":"251","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"252","messages":"253","errorCount":13,"warningCount":0,"fixableErrorCount":13,"fixableWarningCount":0,"source":null},{"filePath":"254","messages":"255","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"256","messages":"257","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"258","messages":"259","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"260","messages":"261","errorCount":18,"warningCount":0,"fixableErrorCount":18,"fixableWarningCount":0,"source":null},{"filePath":"262","messages":"263","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"264","messages":"265","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"266","messages":"267","errorCount":47,"warningCount":0,"fixableErrorCount":47,"fixableWarningCount":0,"source":null},{"filePath":"268","messages":"269","errorCount":67,"warningCount":0,"fixableErrorCount":67,"fixableWarningCount":0,"source":null},{"filePath":"270","messages":"271","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"272","messages":"273","errorCount":5,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":null},{"filePath":"274","messages":"275","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"276","messages":"277","errorCount":82,"warningCount":0,"fixableErrorCount":82,"fixableWarningCount":0,"source":null},{"filePath":"278","messages":"279","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"280","messages":"281","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"282","messages":"283","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"284","messages":"285","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"286","messages":"287","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"288","messages":"289","errorCount":55,"warningCount":0,"fixableErrorCount":55,"fixableWarningCount":0,"source":null},{"filePath":"290","messages":"291","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"292","messages":"293","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"294","messages":"295","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"296","messages":"297","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"298","messages":"299","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"300","messages":"301","errorCount":3,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":null},{"filePath":"302","messages":"303","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"304","messages":"305","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"306","messages":"307","errorCount":3,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":null},{"filePath":"308","messages":"309","errorCount":21,"warningCount":0,"fixableErrorCount":21,"fixableWarningCount":0,"source":null},{"filePath":"310","messages":"311","errorCount":58,"warningCount":0,"fixableErrorCount":58,"fixableWarningCount":0,"source":null},{"filePath":"312","messages":"313","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"314","messages":"315","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"316","messages":"317","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"318","messages":"319","errorCount":11,"warningCount":0,"fixableErrorCount":11,"fixableWarningCount":0,"source":null},{"filePath":"320","messages":"321","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"322","messages":"323","errorCount":15,"warningCount":0,"fixableErrorCount":15,"fixableWarningCount":0,"source":null},{"filePath":"324","messages":"325","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"326","messages":"327","errorCount":18,"warningCount":0,"fixableErrorCount":18,"fixableWarningCount":0,"source":null},{"filePath":"328","messages":"329","errorCount":3,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":null},{"filePath":"330","messages":"331","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"332","messages":"333","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"334","messages":"335","errorCount":6,"warningCount":0,"fixableErrorCount":6,"fixableWarningCount":0,"source":null},{"filePath":"336","messages":"337","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"338","messages":"339","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"340","messages":"341","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},"/home/peroo/stash/ui/v2.5/src/App.tsx",["342","343","344","345","346"],"/home/peroo/stash/ui/v2.5/src/components/ErrorBoundary.tsx",["347"],"/home/peroo/stash/ui/v2.5/src/components/Galleries/Galleries.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Galleries/Gallery.tsx",["348"],"/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryList.tsx",["349","350","351","352","353","354","355","356","357"],"/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryViewer.tsx",["358","359","360"],"/home/peroo/stash/ui/v2.5/src/components/MainNavbar.tsx",["361","362","363","364","365","366","367","368","369","370","371","372","373","374","375","376","377","378","379","380","381","382","383","384","385","386","387","388","389","390","391","392","393","394","395","396","397","398","399","400","401","402","403","404","405","406","407","408","409","410","411","412"],"/home/peroo/stash/ui/v2.5/src/components/PageNotFound.tsx",["413"],"/home/peroo/stash/ui/v2.5/src/components/Settings/Settings.tsx",["414"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx",["415","416","417","418","419","420","421","422","423","424","425","426","427","428","429","430","431","432"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx",["433"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx",["434"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx",["435"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx",["436","437","438","439","440","441","442","443","444"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx",["445","446","447","448","449","450","451","452","453","454","455","456","457","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473"],"/home/peroo/stash/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx",["474","475","476","477","478","479","480","481","482","483","484","485","486","487","488","489","490","491","492","493","494","495","496","497","498","499","500","501","502","503","504","505","506","507","508","509","510","511","512"],"/home/peroo/stash/ui/v2.5/src/components/Shared/DurationInput.tsx",["513","514","515","516","517","518","519","520","521","522","523","524","525","526","527","528","529","530","531","532"],"/home/peroo/stash/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx",["533"],"/home/peroo/stash/ui/v2.5/src/components/Shared/TagLink.tsx",["534","535","536","537"],"/home/peroo/stash/ui/v2.5/src/components/Stats.tsx",["538","539","540","541","542","543"],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioCard.tsx",["544","545","546","547"],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx",["548"],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioList.tsx",["549","550","551","552","553"],"/home/peroo/stash/ui/v2.5/src/components/Studios/Studios.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Tags/TagList.tsx",["554"],"/home/peroo/stash/ui/v2.5/src/components/Tags/Tags.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Wall/WallItem.tsx",["555","556","557","558","559","560","561","562","563","564","565","566","567","568","569","570","571","572","573","574","575","576"],"/home/peroo/stash/ui/v2.5/src/components/Wall/WallPanel.tsx",["577","578","579","580","581","582","583","584","585","586","587","588","589","590"],"/home/peroo/stash/ui/v2.5/src/components/list/AddFilter.tsx",["591","592","593","594","595","596","597","598","599","600","601","602","603","604","605","606","607","608","609","610","611","612","613","614","615","616","617","618"],"/home/peroo/stash/ui/v2.5/src/components/list/ListFilter.tsx",["619","620","621","622","623","624","625","626","627","628","629","630","631","632","633","634","635","636","637","638","639","640","641","642","643","644","645","646","647","648","649","650","651","652","653"],"/home/peroo/stash/ui/v2.5/src/components/list/Pagination.tsx",["654","655","656","657","658","659","660","661","662","663","664","665","666","667","668","669","670","671","672"],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerCard.tsx",["673","674","675","676","677","678","679","680","681"],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx",["682"],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerList.tsx",["683","684","685","686","687","688","689","690","691","692"],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerListTable.tsx",["693","694","695","696","697","698","699","700","701","702","703","704","705","706","707","708","709","710","711","712","713","714","715","716","717","718","719","720","721","722","723","724","725","726","727","728","729","730","731","732","733","734","735","736","737"],"/home/peroo/stash/ui/v2.5/src/components/performers/performers.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneCard.tsx",["738","739","740","741","742","743","744","745","746","747","748","749","750","751","752","753","754","755","756","757","758","759","760","761","762","763","764","765","766","767","768","769","770","771","772","773","774","775","776","777","778"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx",["779"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx",["780","781","782","783","784","785","786","787","788"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx",["789"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx",["790","791","792","793","794","795","796","797","798","799","800","801","802"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx",["803"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx",["804","805","806","807"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx",["808"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneList.tsx",["809","810","811","812","813","814","815","816","817","818","819","820","821","822","823","824","825","826"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneListTable.tsx",["827"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneMarkerList.tsx",["828"],"/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx",["829","830","831","832","833","834","835","836","837","838","839","840","841","842","843","844","845","846","847","848","849","850","851","852","853","854","855","856","857","858","859","860","861","862","863","864","865","866","867","868","869","870","871","872","873","874","875"],"/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx",["876","877","878","879","880","881","882","883","884","885","886","887","888","889","890","891","892","893","894","895","896","897","898","899","900","901","902","903","904","905","906","907","908","909","910","911","912","913","914","915","916","917","918","919","920","921","922","923","924","925","926","927","928","929","930","931","932","933","934","935","936","937","938","939","940","941","942"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx",["943"],"/home/peroo/stash/ui/v2.5/src/components/scenes/helpers.tsx",["944","945","946","947","948"],"/home/peroo/stash/ui/v2.5/src/components/scenes/scenes.tsx",[],"/home/peroo/stash/ui/v2.5/src/core/StashService.ts",["949","950","951","952","953","954","955","956","957","958","959","960","961","962","963","964","965","966","967","968","969","970","971","972","973","974","975","976","977","978","979","980","981","982","983","984","985","986","987","988","989","990","991","992","993","994","995","996","997","998","999","1000","1001","1002","1003","1004","1005","1006","1007","1008","1009","1010","1011","1012","1013","1014","1015","1016","1017","1018","1019","1020","1021","1022","1023","1024","1025","1026","1027","1028","1029","1030"],"/home/peroo/stash/ui/v2.5/src/core/generated-graphql.tsx",[],"/home/peroo/stash/ui/v2.5/src/hooks/ListHook.tsx",["1031"],"/home/peroo/stash/ui/v2.5/src/hooks/LocalForage.ts",["1032","1033","1034","1035"],"/home/peroo/stash/ui/v2.5/src/hooks/VideoHover.ts",["1036","1037","1038","1039","1040","1041","1042","1043","1044"],"/home/peroo/stash/ui/v2.5/src/index.tsx",["1045","1046"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/criterion.ts",["1047","1048","1049","1050","1051","1052","1053","1054","1055","1056","1057","1058","1059","1060","1061","1062","1063","1064","1065","1066","1067","1068","1069","1070","1071","1072","1073","1074","1075","1076","1077","1078","1079","1080","1081","1082","1083","1084","1085","1086","1087","1088","1089","1090","1091","1092","1093","1094","1095","1096","1097","1098","1099","1100","1101"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/favorite.ts",["1102"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/has-markers.ts",["1103"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/is-missing.ts",["1104","1105"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/none.ts",["1106"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/performers.ts",["1107","1108"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/rating.ts",["1109","1110","1111"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/resolution.ts",["1112","1113"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/studios.ts",["1114","1115"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/tags.ts",["1116","1117","1118"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/utils.ts",["1119","1120","1121","1122","1123","1124","1125","1126","1127","1128","1129","1130","1131","1132","1133","1134","1135","1136","1137","1138","1139"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/filter.ts",["1140","1141","1142","1143","1144","1145","1146","1147","1148","1149","1150","1151","1152","1153","1154","1155","1156","1157","1158","1159","1160","1161","1162","1163","1164","1165","1166","1167","1168","1169","1170","1171","1172","1173","1174","1175","1176","1177","1178","1179","1180","1181","1182","1183","1184","1185","1186","1187","1188","1189","1190","1191","1192","1193","1194","1195","1196","1197"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/types.ts",["1198","1199"],"/home/peroo/stash/ui/v2.5/src/models/react-jw-player.d.ts",[],"/home/peroo/stash/ui/v2.5/src/react-app-env.d.ts",[],"/home/peroo/stash/ui/v2.5/src/serviceWorker.ts",["1200","1201","1202","1203","1204","1205","1206","1207","1208","1209","1210"],"/home/peroo/stash/ui/v2.5/src/utils/image.tsx",["1211"],"/home/peroo/stash/ui/v2.5/src/utils/navigation.ts",["1212","1213","1214","1215","1216","1217","1218","1219","1220","1221","1222","1223","1224","1225","1226"],"/home/peroo/stash/ui/v2.5/src/utils/table.tsx",["1227"],"/home/peroo/stash/ui/v2.5/src/utils/text.ts",["1228","1229","1230","1231","1232","1233","1234","1235","1236","1237","1238","1239","1240","1241","1242","1243","1244","1245"],"/home/peroo/stash/ui/v2.5/src/components/Shared/Icon.tsx",["1246","1247","1248"],"/home/peroo/stash/ui/v2.5/src/components/Shared/Modal.tsx",["1249"],"/home/peroo/stash/ui/v2.5/src/components/Shared/Select.tsx",["1250"],"/home/peroo/stash/ui/v2.5/src/components/Shared/index.ts",["1251","1252","1253","1254","1255","1256"],"/home/peroo/stash/ui/v2.5/src/hooks/Toast.tsx",["1257"],"/home/peroo/stash/ui/v2.5/src/hooks/index.ts",["1258","1259","1260","1261"],"/home/peroo/stash/ui/v2.5/src/utils/index.ts",["1262","1263","1264","1265"],{"ruleId":"1266","severity":2,"message":"1267","line":14,"column":31,"nodeType":null,"endLine":14,"endColumn":48,"fix":"1268"},{"ruleId":"1266","severity":2,"message":"1269","line":16,"column":25,"nodeType":null,"endLine":16,"endColumn":60,"fix":"1270"},{"ruleId":"1266","severity":2,"message":"1271","line":17,"column":21,"nodeType":null,"endLine":17,"endColumn":56,"fix":"1272"},{"ruleId":"1266","severity":2,"message":"1273","line":19,"column":8,"nodeType":null,"endLine":19,"endColumn":46,"fix":"1274"},{"ruleId":"1266","severity":2,"message":"1275","line":38,"column":19,"nodeType":null,"endLine":38,"endColumn":79,"fix":"1276"},{"ruleId":"1266","severity":2,"message":"1277","line":12,"column":16,"nodeType":null,"endLine":12,"endColumn":17,"fix":"1278"},{"ruleId":"1266","severity":2,"message":"1279","line":11,"column":25,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":23,"nodeType":null,"endLine":2,"endColumn":40,"fix":"1281"},{"ruleId":"1266","severity":2,"message":"1282","line":5,"column":9,"nodeType":null,"endLine":5,"endColumn":53,"fix":"1283"},{"ruleId":"1266","severity":2,"message":"1277","line":12,"column":18,"nodeType":null,"endLine":12,"endColumn":19,"fix":"1284"},{"ruleId":"1266","severity":2,"message":"1285","line":15,"column":26,"nodeType":null,"endLine":15,"endColumn":118,"fix":"1286"},{"ruleId":"1266","severity":2,"message":"1287","line":16,"column":54,"nodeType":null,"endLine":16,"endColumn":62,"fix":"1288"},{"ruleId":"1266","severity":2,"message":"1289","line":21,"column":24,"nodeType":null,"endLine":21,"endColumn":40,"fix":"1290"},{"ruleId":"1266","severity":2,"message":"1291","line":29,"column":54,"nodeType":null,"endLine":29,"endColumn":63,"fix":"1292"},{"ruleId":"1266","severity":2,"message":"1293","line":33,"column":49,"nodeType":null,"endLine":33,"endColumn":119,"fix":"1294"},{"ruleId":"1266","severity":2,"message":"1295","line":36,"column":21,"nodeType":null,"endLine":36,"endColumn":80,"fix":"1296"},{"ruleId":"1266","severity":2,"message":"1297","line":14,"column":25,"nodeType":null,"endLine":14,"endColumn":80,"fix":"1298"},{"ruleId":"1266","severity":2,"message":"1299","line":29,"column":36,"nodeType":null,"endLine":29,"endColumn":88,"fix":"1300"},{"ruleId":"1266","severity":2,"message":"1301","line":30,"column":36,"nodeType":null,"endLine":30,"endColumn":105,"fix":"1302"},{"ruleId":"1266","severity":2,"message":"1303","line":3,"column":26,"nodeType":null,"endLine":3,"endColumn":61,"fix":"1304"},{"ruleId":"1266","severity":2,"message":"1305","line":4,"column":31,"nodeType":null,"endLine":4,"endColumn":55,"fix":"1306"},{"ruleId":"1266","severity":2,"message":"1307","line":7,"column":22,"nodeType":null,"endLine":7,"endColumn":45,"fix":"1308"},{"ruleId":"1266","severity":2,"message":"1309","line":10,"column":3,"nodeType":null,"endLine":10,"endColumn":5,"fix":"1310"},{"ruleId":"1266","severity":2,"message":"1309","line":11,"column":1,"nodeType":null,"endLine":11,"endColumn":3,"fix":"1311"},{"ruleId":"1266","severity":2,"message":"1309","line":12,"column":3,"nodeType":null,"endLine":12,"endColumn":5,"fix":"1312"},{"ruleId":"1266","severity":2,"message":"1313","line":15,"column":17,"nodeType":null,"endLine":15,"endColumn":17,"fix":"1314"},{"ruleId":"1266","severity":2,"message":"1315","line":16,"column":1,"nodeType":null,"endLine":16,"endColumn":1,"fix":"1316"},{"ruleId":"1266","severity":2,"message":"1315","line":17,"column":3,"nodeType":null,"endLine":17,"endColumn":3,"fix":"1317"},{"ruleId":"1266","severity":2,"message":"1315","line":18,"column":3,"nodeType":null,"endLine":18,"endColumn":3,"fix":"1318"},{"ruleId":"1266","severity":2,"message":"1315","line":19,"column":1,"nodeType":null,"endLine":19,"endColumn":1,"fix":"1319"},{"ruleId":"1266","severity":2,"message":"1315","line":20,"column":1,"nodeType":null,"endLine":20,"endColumn":1,"fix":"1320"},{"ruleId":"1266","severity":2,"message":"1315","line":21,"column":1,"nodeType":null,"endLine":21,"endColumn":1,"fix":"1321"},{"ruleId":"1266","severity":2,"message":"1322","line":22,"column":1,"nodeType":null,"endLine":22,"endColumn":3,"fix":"1323"},{"ruleId":"1266","severity":2,"message":"1315","line":23,"column":1,"nodeType":null,"endLine":23,"endColumn":1,"fix":"1324"},{"ruleId":"1266","severity":2,"message":"1315","line":24,"column":1,"nodeType":null,"endLine":24,"endColumn":1,"fix":"1325"},{"ruleId":"1266","severity":2,"message":"1315","line":25,"column":1,"nodeType":null,"endLine":25,"endColumn":1,"fix":"1326"},{"ruleId":"1266","severity":2,"message":"1315","line":26,"column":1,"nodeType":null,"endLine":26,"endColumn":1,"fix":"1327"},{"ruleId":"1266","severity":2,"message":"1322","line":27,"column":1,"nodeType":null,"endLine":27,"endColumn":3,"fix":"1328"},{"ruleId":"1266","severity":2,"message":"1315","line":28,"column":1,"nodeType":null,"endLine":28,"endColumn":1,"fix":"1329"},{"ruleId":"1266","severity":2,"message":"1315","line":29,"column":3,"nodeType":null,"endLine":29,"endColumn":3,"fix":"1330"},{"ruleId":"1266","severity":2,"message":"1315","line":30,"column":1,"nodeType":null,"endLine":30,"endColumn":1,"fix":"1331"},{"ruleId":"1266","severity":2,"message":"1315","line":31,"column":1,"nodeType":null,"endLine":31,"endColumn":1,"fix":"1332"},{"ruleId":"1266","severity":2,"message":"1315","line":32,"column":1,"nodeType":null,"endLine":32,"endColumn":1,"fix":"1333"},{"ruleId":"1266","severity":2,"message":"1315","line":33,"column":3,"nodeType":null,"endLine":33,"endColumn":3,"fix":"1334"},{"ruleId":"1266","severity":2,"message":"1315","line":34,"column":1,"nodeType":null,"endLine":34,"endColumn":1,"fix":"1335"},{"ruleId":"1266","severity":2,"message":"1315","line":35,"column":1,"nodeType":null,"endLine":35,"endColumn":1,"fix":"1336"},{"ruleId":"1266","severity":2,"message":"1315","line":36,"column":1,"nodeType":null,"endLine":36,"endColumn":1,"fix":"1337"},{"ruleId":"1266","severity":2,"message":"1315","line":37,"column":1,"nodeType":null,"endLine":37,"endColumn":1,"fix":"1338"},{"ruleId":"1266","severity":2,"message":"1315","line":38,"column":3,"nodeType":null,"endLine":38,"endColumn":3,"fix":"1339"},{"ruleId":"1266","severity":2,"message":"1322","line":39,"column":1,"nodeType":null,"endLine":39,"endColumn":3,"fix":"1340"},{"ruleId":"1266","severity":2,"message":"1315","line":40,"column":1,"nodeType":null,"endLine":40,"endColumn":1,"fix":"1341"},{"ruleId":"1266","severity":2,"message":"1315","line":41,"column":1,"nodeType":null,"endLine":41,"endColumn":1,"fix":"1342"},{"ruleId":"1266","severity":2,"message":"1315","line":42,"column":1,"nodeType":null,"endLine":42,"endColumn":1,"fix":"1343"},{"ruleId":"1266","severity":2,"message":"1322","line":43,"column":1,"nodeType":null,"endLine":43,"endColumn":3,"fix":"1344"},{"ruleId":"1266","severity":2,"message":"1315","line":44,"column":1,"nodeType":null,"endLine":44,"endColumn":1,"fix":"1345"},{"ruleId":"1266","severity":2,"message":"1315","line":45,"column":1,"nodeType":null,"endLine":45,"endColumn":1,"fix":"1346"},{"ruleId":"1266","severity":2,"message":"1347","line":51,"column":15,"nodeType":null,"endLine":51,"endColumn":51,"fix":"1348"},{"ruleId":"1266","severity":2,"message":"1349","line":52,"column":5,"nodeType":null,"endLine":52,"endColumn":24,"fix":"1350"},{"ruleId":"1266","severity":2,"message":"1351","line":53,"column":1,"nodeType":null,"endLine":53,"endColumn":39,"fix":"1352"},{"ruleId":"1266","severity":2,"message":"1353","line":54,"column":9,"nodeType":null,"endLine":54,"endColumn":23,"fix":"1354"},{"ruleId":"1266","severity":2,"message":"1355","line":55,"column":20,"nodeType":null,"endLine":55,"endColumn":39,"fix":"1356"},{"ruleId":"1266","severity":2,"message":"1315","line":56,"column":1,"nodeType":null,"endLine":56,"endColumn":1,"fix":"1357"},{"ruleId":"1266","severity":2,"message":"1315","line":57,"column":1,"nodeType":null,"endLine":57,"endColumn":1,"fix":"1358"},{"ruleId":"1266","severity":2,"message":"1315","line":58,"column":5,"nodeType":null,"endLine":58,"endColumn":5,"fix":"1359"},{"ruleId":"1266","severity":2,"message":"1315","line":59,"column":1,"nodeType":null,"endLine":59,"endColumn":1,"fix":"1360"},{"ruleId":"1266","severity":2,"message":"1309","line":65,"column":1,"nodeType":null,"endLine":65,"endColumn":3,"fix":"1361"},{"ruleId":"1266","severity":2,"message":"1362","line":69,"column":24,"nodeType":null,"endLine":69,"endColumn":27,"fix":"1363"},{"ruleId":"1266","severity":2,"message":"1364","line":85,"column":23,"nodeType":null,"endLine":87,"endColumn":10,"fix":"1365"},{"ruleId":"1266","severity":2,"message":"1309","line":88,"column":1,"nodeType":null,"endLine":88,"endColumn":3,"fix":"1366"},{"ruleId":"1266","severity":2,"message":"1309","line":89,"column":13,"nodeType":null,"endLine":89,"endColumn":15,"fix":"1367"},{"ruleId":"1266","severity":2,"message":"1309","line":90,"column":1,"nodeType":null,"endLine":90,"endColumn":3,"fix":"1368"},{"ruleId":"1266","severity":2,"message":"1369","line":4,"column":10,"nodeType":null,"endLine":6,"endColumn":4,"fix":"1370"},{"ruleId":"1266","severity":2,"message":"1279","line":14,"column":63,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":32,"nodeType":null,"endLine":2,"endColumn":49,"fix":"1371"},{"ruleId":"1266","severity":2,"message":"1287","line":9,"column":59,"nodeType":null,"endLine":9,"endColumn":67,"fix":"1372"},{"ruleId":"1266","severity":2,"message":"1287","line":19,"column":34,"nodeType":null,"endLine":19,"endColumn":42,"fix":"1373"},{"ruleId":"1266","severity":2,"message":"1315","line":22,"column":1,"nodeType":null,"endLine":22,"endColumn":1,"fix":"1374"},{"ruleId":"1266","severity":2,"message":"1315","line":23,"column":9,"nodeType":null,"endLine":23,"endColumn":9,"fix":"1375"},{"ruleId":"1266","severity":2,"message":"1376","line":24,"column":1,"nodeType":null,"endLine":24,"endColumn":11,"fix":"1377"},{"ruleId":"1266","severity":2,"message":"1315","line":25,"column":11,"nodeType":null,"endLine":25,"endColumn":11,"fix":"1378"},{"ruleId":"1266","severity":2,"message":"1379","line":26,"column":1,"nodeType":null,"endLine":26,"endColumn":13,"fix":"1380"},{"ruleId":"1266","severity":2,"message":"1315","line":27,"column":1,"nodeType":null,"endLine":27,"endColumn":1,"fix":"1381"},{"ruleId":"1266","severity":2,"message":"1376","line":28,"column":1,"nodeType":null,"endLine":28,"endColumn":11,"fix":"1382"},{"ruleId":"1266","severity":2,"message":"1315","line":29,"column":11,"nodeType":null,"endLine":29,"endColumn":11,"fix":"1383"},{"ruleId":"1266","severity":2,"message":"1315","line":30,"column":1,"nodeType":null,"endLine":30,"endColumn":1,"fix":"1384"},{"ruleId":"1266","severity":2,"message":"1315","line":31,"column":1,"nodeType":null,"endLine":31,"endColumn":1,"fix":"1385"},{"ruleId":"1266","severity":2,"message":"1315","line":32,"column":11,"nodeType":null,"endLine":32,"endColumn":11,"fix":"1386"},{"ruleId":"1266","severity":2,"message":"1315","line":33,"column":1,"nodeType":null,"endLine":33,"endColumn":1,"fix":"1387"},{"ruleId":"1266","severity":2,"message":"1315","line":34,"column":1,"nodeType":null,"endLine":34,"endColumn":1,"fix":"1388"},{"ruleId":"1266","severity":2,"message":"1389","line":41,"column":76,"nodeType":null,"endLine":41,"endColumn":78,"fix":"1390"},{"ruleId":"1266","severity":2,"message":"1389","line":42,"column":45,"nodeType":null,"endLine":42,"endColumn":47,"fix":"1391"},{"ruleId":"1266","severity":2,"message":"1279","line":43,"column":16,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1279","line":31,"column":26,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1279","line":76,"column":34,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":30,"nodeType":null,"endLine":2,"endColumn":47,"fix":"1392"},{"ruleId":"1266","severity":2,"message":"1393","line":4,"column":26,"nodeType":null,"endLine":4,"endColumn":37,"fix":"1394"},{"ruleId":"1266","severity":2,"message":"1395","line":15,"column":49,"nodeType":null,"endLine":15,"endColumn":87,"fix":"1396"},{"ruleId":"1266","severity":2,"message":"1397","line":24,"column":18,"nodeType":null,"endLine":24,"endColumn":132,"fix":"1398"},{"ruleId":"1266","severity":2,"message":"1399","line":25,"column":18,"nodeType":null,"endLine":25,"endColumn":167,"fix":"1400"},{"ruleId":"1266","severity":2,"message":"1401","line":26,"column":18,"nodeType":null,"endLine":26,"endColumn":160,"fix":"1402"},{"ruleId":"1266","severity":2,"message":"1403","line":27,"column":18,"nodeType":null,"endLine":27,"endColumn":169,"fix":"1404"},{"ruleId":"1266","severity":2,"message":"1405","line":28,"column":72,"nodeType":null,"endLine":28,"endColumn":80,"fix":"1406"},{"ruleId":"1266","severity":2,"message":"1407","line":29,"column":41,"nodeType":null,"endLine":29,"endColumn":103,"fix":"1408"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":43,"nodeType":null,"endLine":2,"endColumn":60,"fix":"1409"},{"ruleId":"1266","severity":2,"message":"1393","line":5,"column":26,"nodeType":null,"endLine":5,"endColumn":37,"fix":"1410"},{"ruleId":"1266","severity":2,"message":"1411","line":6,"column":23,"nodeType":null,"endLine":6,"endColumn":46,"fix":"1412"},{"ruleId":"1266","severity":2,"message":"1413","line":24,"column":31,"nodeType":null,"endLine":24,"endColumn":32,"fix":"1414"},{"ruleId":"1266","severity":2,"message":"1313","line":25,"column":11,"nodeType":null,"endLine":25,"endColumn":11,"fix":"1415"},{"ruleId":"1266","severity":2,"message":"1416","line":71,"column":52,"nodeType":null,"endLine":71,"endColumn":72,"fix":"1417"},{"ruleId":"1266","severity":2,"message":"1418","line":79,"column":25,"nodeType":null,"endLine":79,"endColumn":52,"fix":"1419"},{"ruleId":"1266","severity":2,"message":"1420","line":83,"column":44,"nodeType":null,"endLine":84,"endColumn":10,"fix":"1421"},{"ruleId":"1266","severity":2,"message":"1416","line":92,"column":51,"nodeType":null,"endLine":92,"endColumn":71,"fix":"1422"},{"ruleId":"1266","severity":2,"message":"1423","line":100,"column":25,"nodeType":null,"endLine":100,"endColumn":51,"fix":"1424"},{"ruleId":"1266","severity":2,"message":"1425","line":104,"column":42,"nodeType":null,"endLine":106,"endColumn":57,"fix":"1426"},{"ruleId":"1266","severity":2,"message":"1427","line":114,"column":45,"nodeType":null,"endLine":114,"endColumn":77,"fix":"1428"},{"ruleId":"1266","severity":2,"message":"1429","line":128,"column":6,"nodeType":null,"endLine":128,"endColumn":6,"fix":"1430"},{"ruleId":"1266","severity":2,"message":"1431","line":148,"column":16,"nodeType":null,"endLine":148,"endColumn":124,"fix":"1432"},{"ruleId":"1266","severity":2,"message":"1315","line":156,"column":7,"nodeType":null,"endLine":156,"endColumn":7,"fix":"1433"},{"ruleId":"1266","severity":2,"message":"1315","line":157,"column":1,"nodeType":null,"endLine":157,"endColumn":1,"fix":"1434"},{"ruleId":"1266","severity":2,"message":"1435","line":158,"column":12,"nodeType":null,"endLine":158,"endColumn":92,"fix":"1436"},{"ruleId":"1266","severity":2,"message":"1315","line":159,"column":1,"nodeType":null,"endLine":159,"endColumn":1,"fix":"1437"},{"ruleId":"1266","severity":2,"message":"1315","line":160,"column":1,"nodeType":null,"endLine":160,"endColumn":1,"fix":"1438"},{"ruleId":"1266","severity":2,"message":"1439","line":183,"column":66,"nodeType":null,"endLine":183,"endColumn":70,"fix":"1440"},{"ruleId":"1266","severity":2,"message":"1441","line":184,"column":43,"nodeType":null,"endLine":184,"endColumn":91,"fix":"1442"},{"ruleId":"1266","severity":2,"message":"1443","line":207,"column":72,"nodeType":null,"endLine":207,"endColumn":80,"fix":"1444"},{"ruleId":"1266","severity":2,"message":"1445","line":208,"column":43,"nodeType":null,"endLine":208,"endColumn":79,"fix":"1446"},{"ruleId":"1266","severity":2,"message":"1447","line":222,"column":16,"nodeType":null,"endLine":222,"endColumn":92,"fix":"1448"},{"ruleId":"1266","severity":2,"message":"1449","line":223,"column":43,"nodeType":null,"endLine":223,"endColumn":131,"fix":"1450"},{"ruleId":"1266","severity":2,"message":"1451","line":230,"column":16,"nodeType":null,"endLine":230,"endColumn":134,"fix":"1452"},{"ruleId":"1266","severity":2,"message":"1453","line":231,"column":43,"nodeType":null,"endLine":231,"endColumn":88,"fix":"1454"},{"ruleId":"1266","severity":2,"message":"1455","line":235,"column":16,"nodeType":null,"endLine":235,"endColumn":95,"fix":"1456"},{"ruleId":"1266","severity":2,"message":"1457","line":236,"column":43,"nodeType":null,"endLine":236,"endColumn":100,"fix":"1458"},{"ruleId":"1266","severity":2,"message":"1459","line":1,"column":9,"nodeType":null,"endLine":1,"endColumn":92,"fix":"1460"},{"ruleId":"1266","severity":2,"message":"1461","line":20,"column":29,"nodeType":null,"endLine":20,"endColumn":84,"fix":"1462"},{"ruleId":"1266","severity":2,"message":"1287","line":27,"column":23,"nodeType":null,"endLine":27,"endColumn":31,"fix":"1463"},{"ruleId":"1266","severity":2,"message":"1464","line":29,"column":14,"nodeType":null,"endLine":32,"endColumn":7,"fix":"1465"},{"ruleId":"1266","severity":2,"message":"1413","line":33,"column":10,"nodeType":null,"endLine":33,"endColumn":11,"fix":"1466"},{"ruleId":"1266","severity":2,"message":"1287","line":39,"column":28,"nodeType":null,"endLine":39,"endColumn":36,"fix":"1467"},{"ruleId":"1266","severity":2,"message":"1468","line":40,"column":11,"nodeType":null,"endLine":40,"endColumn":82,"fix":"1469"},{"ruleId":"1266","severity":2,"message":"1287","line":44,"column":42,"nodeType":null,"endLine":44,"endColumn":50,"fix":"1470"},{"ruleId":"1266","severity":2,"message":"1471","line":45,"column":11,"nodeType":null,"endLine":45,"endColumn":95,"fix":"1472"},{"ruleId":"1266","severity":2,"message":"1473","line":49,"column":28,"nodeType":null,"endLine":49,"endColumn":38,"fix":"1474"},{"ruleId":"1266","severity":2,"message":"1475","line":50,"column":5,"nodeType":null,"endLine":50,"endColumn":5,"fix":"1476"},{"ruleId":"1266","severity":2,"message":"1309","line":51,"column":1,"nodeType":null,"endLine":51,"endColumn":3,"fix":"1477"},{"ruleId":"1266","severity":2,"message":"1478","line":52,"column":1,"nodeType":null,"endLine":52,"endColumn":11,"fix":"1479"},{"ruleId":"1266","severity":2,"message":"1480","line":53,"column":9,"nodeType":null,"endLine":53,"endColumn":92,"fix":"1481"},{"ruleId":"1266","severity":2,"message":"1309","line":54,"column":1,"nodeType":null,"endLine":54,"endColumn":3,"fix":"1482"},{"ruleId":"1266","severity":2,"message":"1483","line":55,"column":5,"nodeType":null,"endLine":55,"endColumn":8,"fix":"1484"},{"ruleId":"1266","severity":2,"message":"1287","line":59,"column":28,"nodeType":null,"endLine":59,"endColumn":36,"fix":"1485"},{"ruleId":"1266","severity":2,"message":"1287","line":60,"column":28,"nodeType":null,"endLine":60,"endColumn":36,"fix":"1486"},{"ruleId":"1266","severity":2,"message":"1487","line":66,"column":14,"nodeType":null,"endLine":66,"endColumn":54,"fix":"1488"},{"ruleId":"1266","severity":2,"message":"1489","line":67,"column":1,"nodeType":null,"endLine":67,"endColumn":101,"fix":"1490"},{"ruleId":"1266","severity":2,"message":"1491","line":68,"column":1,"nodeType":null,"endLine":68,"endColumn":1,"fix":"1492"},{"ruleId":"1266","severity":2,"message":"1491","line":69,"column":15,"nodeType":null,"endLine":69,"endColumn":15,"fix":"1493"},{"ruleId":"1266","severity":2,"message":"1494","line":70,"column":13,"nodeType":null,"endLine":70,"endColumn":20,"fix":"1495"},{"ruleId":"1266","severity":2,"message":"1287","line":84,"column":42,"nodeType":null,"endLine":84,"endColumn":50,"fix":"1496"},{"ruleId":"1266","severity":2,"message":"1497","line":86,"column":15,"nodeType":null,"endLine":86,"endColumn":22,"fix":"1498"},{"ruleId":"1266","severity":2,"message":"1499","line":87,"column":1,"nodeType":null,"endLine":87,"endColumn":49,"fix":"1500"},{"ruleId":"1266","severity":2,"message":"1501","line":88,"column":1,"nodeType":null,"endLine":88,"endColumn":28,"fix":"1502"},{"ruleId":"1266","severity":2,"message":"1287","line":93,"column":27,"nodeType":null,"endLine":93,"endColumn":35,"fix":"1503"},{"ruleId":"1266","severity":2,"message":"1504","line":100,"column":12,"nodeType":null,"endLine":104,"endColumn":6,"fix":"1505"},{"ruleId":"1266","severity":2,"message":"1506","line":118,"column":13,"nodeType":null,"endLine":120,"endColumn":7,"fix":"1507"},{"ruleId":"1266","severity":2,"message":"1508","line":121,"column":21,"nodeType":null,"endLine":123,"endColumn":9,"fix":"1509"},{"ruleId":"1266","severity":2,"message":"1510","line":125,"column":61,"nodeType":null,"endLine":125,"endColumn":67,"fix":"1511"},{"ruleId":"1266","severity":2,"message":"1512","line":126,"column":18,"nodeType":null,"endLine":126,"endColumn":89,"fix":"1513"},{"ruleId":"1266","severity":2,"message":"1514","line":132,"column":1,"nodeType":null,"endLine":133,"endColumn":1,"fix":"1515"},{"ruleId":"1266","severity":2,"message":"1315","line":135,"column":1,"nodeType":null,"endLine":135,"endColumn":1,"fix":"1516"},{"ruleId":"1266","severity":2,"message":"1315","line":136,"column":5,"nodeType":null,"endLine":136,"endColumn":5,"fix":"1517"},{"ruleId":"1266","severity":2,"message":"1315","line":137,"column":1,"nodeType":null,"endLine":137,"endColumn":1,"fix":"1518"},{"ruleId":"1266","severity":2,"message":"1315","line":146,"column":7,"nodeType":null,"endLine":146,"endColumn":7,"fix":"1519"},{"ruleId":"1266","severity":2,"message":"1315","line":147,"column":1,"nodeType":null,"endLine":147,"endColumn":1,"fix":"1520"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":55,"nodeType":null,"endLine":2,"endColumn":72,"fix":"1521"},{"ruleId":"1266","severity":2,"message":"1307","line":3,"column":22,"nodeType":null,"endLine":3,"endColumn":45,"fix":"1522"},{"ruleId":"1266","severity":2,"message":"1429","line":7,"column":21,"nodeType":null,"endLine":7,"endColumn":21,"fix":"1523"},{"ruleId":"1266","severity":2,"message":"1429","line":8,"column":23,"nodeType":null,"endLine":8,"endColumn":23,"fix":"1524"},{"ruleId":"1266","severity":2,"message":"1429","line":9,"column":45,"nodeType":null,"endLine":9,"endColumn":45,"fix":"1525"},{"ruleId":"1266","severity":2,"message":"1429","line":10,"column":19,"nodeType":null,"endLine":10,"endColumn":19,"fix":"1526"},{"ruleId":"1266","severity":2,"message":"1527","line":14,"column":46,"nodeType":null,"endLine":14,"endColumn":81,"fix":"1528"},{"ruleId":"1266","severity":2,"message":"1413","line":20,"column":35,"nodeType":null,"endLine":20,"endColumn":36,"fix":"1529"},{"ruleId":"1266","severity":2,"message":"1413","line":34,"column":29,"nodeType":null,"endLine":34,"endColumn":30,"fix":"1530"},{"ruleId":"1266","severity":2,"message":"1313","line":47,"column":10,"nodeType":null,"endLine":47,"endColumn":10,"fix":"1531"},{"ruleId":"1266","severity":2,"message":"1532","line":79,"column":19,"nodeType":null,"endLine":81,"endColumn":7,"fix":"1533"},{"ruleId":"1266","severity":2,"message":"1534","line":82,"column":16,"nodeType":null,"endLine":85,"endColumn":9,"fix":"1535"},{"ruleId":"1266","severity":2,"message":"1536","line":88,"column":16,"nodeType":null,"endLine":91,"endColumn":9,"fix":"1537"},{"ruleId":"1266","severity":2,"message":"1429","line":95,"column":6,"nodeType":null,"endLine":95,"endColumn":6,"fix":"1538"},{"ruleId":"1266","severity":2,"message":"1539","line":107,"column":16,"nodeType":null,"endLine":109,"endColumn":9,"fix":"1540"},{"ruleId":"1266","severity":2,"message":"1429","line":112,"column":8,"nodeType":null,"endLine":112,"endColumn":8,"fix":"1541"},{"ruleId":"1266","severity":2,"message":"1413","line":122,"column":23,"nodeType":null,"endLine":122,"endColumn":24,"fix":"1542"},{"ruleId":"1266","severity":2,"message":"1543","line":127,"column":12,"nodeType":null,"endLine":127,"endColumn":32,"fix":"1544"},{"ruleId":"1266","severity":2,"message":"1545","line":128,"column":12,"nodeType":null,"endLine":128,"endColumn":29,"fix":"1546"},{"ruleId":"1266","severity":2,"message":"1429","line":132,"column":4,"nodeType":null,"endLine":132,"endColumn":4,"fix":"1547"},{"ruleId":"1266","severity":2,"message":"1279","line":20,"column":48,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":1,"column":23,"nodeType":null,"endLine":1,"endColumn":40,"fix":"1548"},{"ruleId":"1266","severity":2,"message":"1549","line":4,"column":9,"nodeType":null,"endLine":4,"endColumn":74,"fix":"1550"},{"ruleId":"1266","severity":2,"message":"1551","line":24,"column":69,"nodeType":null,"endLine":24,"endColumn":94,"fix":"1552"},{"ruleId":"1266","severity":2,"message":"1553","line":27,"column":11,"nodeType":null,"endLine":30,"endColumn":5,"fix":"1554"},{"ruleId":"1266","severity":2,"message":"1280","line":1,"column":25,"nodeType":null,"endLine":1,"endColumn":42,"fix":"1555"},{"ruleId":"1266","severity":2,"message":"1287","line":9,"column":32,"nodeType":null,"endLine":9,"endColumn":40,"fix":"1556"},{"ruleId":"1266","severity":2,"message":"1557","line":48,"column":7,"nodeType":null,"endLine":48,"endColumn":29,"fix":"1558"},{"ruleId":"1266","severity":2,"message":"1309","line":49,"column":1,"nodeType":null,"endLine":49,"endColumn":3,"fix":"1559"},{"ruleId":"1266","severity":2,"message":"1309","line":50,"column":11,"nodeType":null,"endLine":50,"endColumn":13,"fix":"1560"},{"ruleId":"1266","severity":2,"message":"1561","line":51,"column":1,"nodeType":null,"endLine":51,"endColumn":33,"fix":"1562"},{"ruleId":"1266","severity":2,"message":"1280","line":1,"column":22,"nodeType":null,"endLine":1,"endColumn":39,"fix":"1563"},{"ruleId":"1266","severity":2,"message":"1564","line":12,"column":10,"nodeType":null,"endLine":14,"endColumn":5,"fix":"1565"},{"ruleId":"1266","severity":2,"message":"1566","line":18,"column":17,"nodeType":null,"endLine":18,"endColumn":61,"fix":"1567"},{"ruleId":"1266","severity":2,"message":"1568","line":21,"column":39,"nodeType":null,"endLine":23,"endColumn":9,"fix":"1569"},{"ruleId":"1266","severity":2,"message":"1279","line":63,"column":16,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1570","line":3,"column":9,"nodeType":null,"endLine":3,"endColumn":49,"fix":"1571"},{"ruleId":"1266","severity":2,"message":"1277","line":11,"column":18,"nodeType":null,"endLine":11,"endColumn":19,"fix":"1572"},{"ruleId":"1266","severity":2,"message":"1573","line":14,"column":26,"nodeType":null,"endLine":14,"endColumn":114,"fix":"1574"},{"ruleId":"1266","severity":2,"message":"1287","line":15,"column":52,"nodeType":null,"endLine":15,"endColumn":60,"fix":"1575"},{"ruleId":"1266","severity":2,"message":"1576","line":19,"column":48,"nodeType":null,"endLine":19,"endColumn":107,"fix":"1577"},{"ruleId":"1266","severity":2,"message":"1279","line":85,"column":14,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1578","line":14,"column":19,"nodeType":null,"endLine":14,"endColumn":80,"fix":"1579"},{"ruleId":"1266","severity":2,"message":"1580","line":17,"column":61,"nodeType":null,"endLine":17,"endColumn":82,"fix":"1581"},{"ruleId":"1266","severity":2,"message":"1582","line":24,"column":56,"nodeType":null,"endLine":24,"endColumn":79,"fix":"1583"},{"ruleId":"1266","severity":2,"message":"1584","line":25,"column":28,"nodeType":null,"endLine":25,"endColumn":125,"fix":"1585"},{"ruleId":"1266","severity":2,"message":"1287","line":48,"column":44,"nodeType":null,"endLine":48,"endColumn":52,"fix":"1586"},{"ruleId":"1266","severity":2,"message":"1587","line":68,"column":43,"nodeType":null,"endLine":68,"endColumn":47,"fix":"1588"},{"ruleId":"1266","severity":2,"message":"1313","line":69,"column":14,"nodeType":null,"endLine":69,"endColumn":14,"fix":"1589"},{"ruleId":"1266","severity":2,"message":"1389","line":70,"column":43,"nodeType":null,"endLine":70,"endColumn":45,"fix":"1590"},{"ruleId":"1266","severity":2,"message":"1591","line":77,"column":16,"nodeType":null,"endLine":77,"endColumn":106,"fix":"1592"},{"ruleId":"1266","severity":2,"message":"1593","line":78,"column":51,"nodeType":null,"endLine":78,"endColumn":97,"fix":"1594"},{"ruleId":"1266","severity":2,"message":"1595","line":79,"column":24,"nodeType":null,"endLine":79,"endColumn":112,"fix":"1596"},{"ruleId":"1266","severity":2,"message":"1597","line":96,"column":43,"nodeType":null,"endLine":96,"endColumn":75,"fix":"1598"},{"ruleId":"1266","severity":2,"message":"1599","line":98,"column":24,"nodeType":null,"endLine":98,"endColumn":62,"fix":"1600"},{"ruleId":"1266","severity":2,"message":"1601","line":113,"column":62,"nodeType":null,"endLine":113,"endColumn":77,"fix":"1602"},{"ruleId":"1266","severity":2,"message":"1603","line":118,"column":15,"nodeType":null,"endLine":118,"endColumn":99,"fix":"1604"},{"ruleId":"1266","severity":2,"message":"1605","line":119,"column":31,"nodeType":null,"endLine":119,"endColumn":31,"fix":"1606"},{"ruleId":"1266","severity":2,"message":"1607","line":121,"column":28,"nodeType":null,"endLine":121,"endColumn":44,"fix":"1608"},{"ruleId":"1266","severity":2,"message":"1609","line":122,"column":15,"nodeType":null,"endLine":122,"endColumn":23,"fix":"1610"},{"ruleId":"1266","severity":2,"message":"1309","line":123,"column":1,"nodeType":null,"endLine":123,"endColumn":3,"fix":"1611"},{"ruleId":"1266","severity":2,"message":"1612","line":124,"column":11,"nodeType":null,"endLine":124,"endColumn":21,"fix":"1613"},{"ruleId":"1266","severity":2,"message":"1614","line":125,"column":13,"nodeType":null,"endLine":125,"endColumn":24,"fix":"1615"},{"ruleId":"1266","severity":2,"message":"1616","line":126,"column":11,"nodeType":null,"endLine":126,"endColumn":11,"fix":"1617"},{"ruleId":"1266","severity":2,"message":"1578","line":9,"column":19,"nodeType":null,"endLine":9,"endColumn":80,"fix":"1618"},{"ruleId":"1266","severity":2,"message":"1619","line":12,"column":63,"nodeType":null,"endLine":12,"endColumn":85,"fix":"1620"},{"ruleId":"1266","severity":2,"message":"1621","line":25,"column":23,"nodeType":null,"endLine":25,"endColumn":37,"fix":"1622"},{"ruleId":"1266","severity":2,"message":"1623","line":26,"column":23,"nodeType":null,"endLine":26,"endColumn":42,"fix":"1624"},{"ruleId":"1266","severity":2,"message":"1625","line":27,"column":77,"nodeType":null,"endLine":27,"endColumn":97,"fix":"1626"},{"ruleId":"1266","severity":2,"message":"1621","line":28,"column":27,"nodeType":null,"endLine":28,"endColumn":41,"fix":"1627"},{"ruleId":"1266","severity":2,"message":"1628","line":31,"column":42,"nodeType":null,"endLine":31,"endColumn":65,"fix":"1629"},{"ruleId":"1266","severity":2,"message":"1630","line":32,"column":50,"nodeType":null,"endLine":32,"endColumn":72,"fix":"1631"},{"ruleId":"1266","severity":2,"message":"1632","line":33,"column":63,"nodeType":null,"endLine":33,"endColumn":80,"fix":"1633"},{"ruleId":"1266","severity":2,"message":"1632","line":34,"column":58,"nodeType":null,"endLine":34,"endColumn":75,"fix":"1634"},{"ruleId":"1266","severity":2,"message":"1635","line":37,"column":21,"nodeType":null,"endLine":37,"endColumn":43,"fix":"1636"},{"ruleId":"1266","severity":2,"message":"1637","line":38,"column":19,"nodeType":null,"endLine":38,"endColumn":42,"fix":"1638"},{"ruleId":"1266","severity":2,"message":"1287","line":43,"column":38,"nodeType":null,"endLine":43,"endColumn":46,"fix":"1639"},{"ruleId":"1266","severity":2,"message":"1287","line":59,"column":44,"nodeType":null,"endLine":59,"endColumn":52,"fix":"1640"},{"ruleId":"1266","severity":2,"message":"1641","line":3,"column":62,"nodeType":null,"endLine":3,"endColumn":79,"fix":"1642"},{"ruleId":"1266","severity":2,"message":"1411","line":4,"column":22,"nodeType":null,"endLine":4,"endColumn":45,"fix":"1643"},{"ruleId":"1266","severity":2,"message":"1644","line":6,"column":9,"nodeType":null,"endLine":6,"endColumn":35,"fix":"1645"},{"ruleId":"1266","severity":2,"message":"1646","line":22,"column":54,"nodeType":null,"endLine":22,"endColumn":76,"fix":"1647"},{"ruleId":"1266","severity":2,"message":"1648","line":23,"column":21,"nodeType":null,"endLine":23,"endColumn":44,"fix":"1649"},{"ruleId":"1266","severity":2,"message":"1650","line":26,"column":67,"nodeType":null,"endLine":26,"endColumn":86,"fix":"1651"},{"ruleId":"1266","severity":2,"message":"1287","line":32,"column":35,"nodeType":null,"endLine":32,"endColumn":43,"fix":"1652"},{"ruleId":"1266","severity":2,"message":"1653","line":43,"column":36,"nodeType":null,"endLine":43,"endColumn":79,"fix":"1654"},{"ruleId":"1266","severity":2,"message":"1655","line":68,"column":11,"nodeType":null,"endLine":68,"endColumn":98,"fix":"1656"},{"ruleId":"1266","severity":2,"message":"1657","line":76,"column":43,"nodeType":null,"endLine":76,"endColumn":76,"fix":"1658"},{"ruleId":"1266","severity":2,"message":"1287","line":90,"column":37,"nodeType":null,"endLine":90,"endColumn":45,"fix":"1659"},{"ruleId":"1266","severity":2,"message":"1660","line":93,"column":52,"nodeType":null,"endLine":93,"endColumn":60,"fix":"1661"},{"ruleId":"1266","severity":2,"message":"1413","line":101,"column":14,"nodeType":null,"endLine":101,"endColumn":15,"fix":"1662"},{"ruleId":"1266","severity":2,"message":"1309","line":102,"column":1,"nodeType":null,"endLine":102,"endColumn":3,"fix":"1663"},{"ruleId":"1266","severity":2,"message":"1664","line":111,"column":11,"nodeType":null,"endLine":111,"endColumn":110,"fix":"1665"},{"ruleId":"1266","severity":2,"message":"1666","line":130,"column":23,"nodeType":null,"endLine":130,"endColumn":98,"fix":"1667"},{"ruleId":"1266","severity":2,"message":"1413","line":143,"column":16,"nodeType":null,"endLine":143,"endColumn":17,"fix":"1668"},{"ruleId":"1266","severity":2,"message":"1669","line":144,"column":1,"nodeType":null,"endLine":144,"endColumn":19,"fix":"1670"},{"ruleId":"1266","severity":2,"message":"1429","line":156,"column":12,"nodeType":null,"endLine":156,"endColumn":12,"fix":"1671"},{"ruleId":"1266","severity":2,"message":"1672","line":162,"column":21,"nodeType":null,"endLine":164,"endColumn":9,"fix":"1673"},{"ruleId":"1266","severity":2,"message":"1674","line":165,"column":21,"nodeType":null,"endLine":167,"endColumn":9,"fix":"1675"},{"ruleId":"1266","severity":2,"message":"1287","line":173,"column":34,"nodeType":null,"endLine":173,"endColumn":42,"fix":"1676"},{"ruleId":"1266","severity":2,"message":"1677","line":180,"column":33,"nodeType":null,"endLine":180,"endColumn":33,"fix":"1678"},{"ruleId":"1266","severity":2,"message":"1413","line":181,"column":12,"nodeType":null,"endLine":181,"endColumn":13,"fix":"1679"},{"ruleId":"1266","severity":2,"message":"1309","line":182,"column":1,"nodeType":null,"endLine":182,"endColumn":3,"fix":"1680"},{"ruleId":"1266","severity":2,"message":"1681","line":196,"column":16,"nodeType":null,"endLine":199,"endColumn":9,"fix":"1682"},{"ruleId":"1266","severity":2,"message":"1683","line":204,"column":13,"nodeType":null,"endLine":206,"endColumn":8,"fix":"1684"},{"ruleId":"1266","severity":2,"message":"1685","line":215,"column":78,"nodeType":null,"endLine":215,"endColumn":85,"fix":"1686"},{"ruleId":"1266","severity":2,"message":"1687","line":3,"column":9,"nodeType":null,"endLine":3,"endColumn":102,"fix":"1688"},{"ruleId":"1266","severity":2,"message":"1411","line":5,"column":22,"nodeType":null,"endLine":5,"endColumn":45,"fix":"1689"},{"ruleId":"1266","severity":2,"message":"1690","line":34,"column":56,"nodeType":null,"endLine":34,"endColumn":79,"fix":"1691"},{"ruleId":"1266","severity":2,"message":"1692","line":38,"column":13,"nodeType":null,"endLine":38,"endColumn":13,"fix":"1693"},{"ruleId":"1266","severity":2,"message":"1694","line":41,"column":60,"nodeType":null,"endLine":41,"endColumn":81,"fix":"1695"},{"ruleId":"1266","severity":2,"message":"1287","line":79,"column":22,"nodeType":null,"endLine":79,"endColumn":30,"fix":"1696"},{"ruleId":"1266","severity":2,"message":"1287","line":85,"column":51,"nodeType":null,"endLine":85,"endColumn":59,"fix":"1697"},{"ruleId":"1266","severity":2,"message":"1698","line":90,"column":43,"nodeType":null,"endLine":90,"endColumn":51,"fix":"1699"},{"ruleId":"1266","severity":2,"message":"1700","line":91,"column":60,"nodeType":null,"endLine":91,"endColumn":68,"fix":"1701"},{"ruleId":"1266","severity":2,"message":"1702","line":98,"column":31,"nodeType":null,"endLine":98,"endColumn":31,"fix":"1703"},{"ruleId":"1266","severity":2,"message":"1702","line":99,"column":31,"nodeType":null,"endLine":99,"endColumn":31,"fix":"1704"},{"ruleId":"1266","severity":2,"message":"1702","line":100,"column":31,"nodeType":null,"endLine":100,"endColumn":31,"fix":"1705"},{"ruleId":"1266","severity":2,"message":"1702","line":105,"column":31,"nodeType":null,"endLine":105,"endColumn":31,"fix":"1706"},{"ruleId":"1266","severity":2,"message":"1702","line":106,"column":31,"nodeType":null,"endLine":106,"endColumn":31,"fix":"1707"},{"ruleId":"1266","severity":2,"message":"1702","line":107,"column":31,"nodeType":null,"endLine":107,"endColumn":31,"fix":"1708"},{"ruleId":"1266","severity":2,"message":"1698","line":110,"column":48,"nodeType":null,"endLine":110,"endColumn":56,"fix":"1709"},{"ruleId":"1266","severity":2,"message":"1710","line":111,"column":22,"nodeType":null,"endLine":111,"endColumn":96,"fix":"1711"},{"ruleId":"1266","severity":2,"message":"1712","line":124,"column":38,"nodeType":null,"endLine":124,"endColumn":49,"fix":"1713"},{"ruleId":"1266","severity":2,"message":"1714","line":152,"column":14,"nodeType":null,"endLine":152,"endColumn":85,"fix":"1715"},{"ruleId":"1266","severity":2,"message":"1716","line":158,"column":14,"nodeType":null,"endLine":158,"endColumn":87,"fix":"1717"},{"ruleId":"1266","severity":2,"message":"1718","line":163,"column":20,"nodeType":null,"endLine":166,"endColumn":5,"fix":"1719"},{"ruleId":"1266","severity":2,"message":"1720","line":169,"column":37,"nodeType":null,"endLine":169,"endColumn":40,"fix":"1721"},{"ruleId":"1266","severity":2,"message":"1722","line":170,"column":22,"nodeType":null,"endLine":170,"endColumn":81,"fix":"1723"},{"ruleId":"1266","severity":2,"message":"1724","line":182,"column":26,"nodeType":null,"endLine":184,"endColumn":11,"fix":"1725"},{"ruleId":"1266","severity":2,"message":"1413","line":190,"column":26,"nodeType":null,"endLine":190,"endColumn":27,"fix":"1726"},{"ruleId":"1266","severity":2,"message":"1727","line":204,"column":38,"nodeType":null,"endLine":204,"endColumn":88,"fix":"1728"},{"ruleId":"1266","severity":2,"message":"1315","line":206,"column":1,"nodeType":null,"endLine":206,"endColumn":1,"fix":"1729"},{"ruleId":"1266","severity":2,"message":"1730","line":227,"column":14,"nodeType":null,"endLine":227,"endColumn":74,"fix":"1731"},{"ruleId":"1266","severity":2,"message":"1732","line":234,"column":30,"nodeType":null,"endLine":236,"endColumn":15,"fix":"1733"},{"ruleId":"1266","severity":2,"message":"1734","line":239,"column":28,"nodeType":null,"endLine":239,"endColumn":28,"fix":"1735"},{"ruleId":"1266","severity":2,"message":"1736","line":240,"column":1,"nodeType":null,"endLine":240,"endColumn":119,"fix":"1737"},{"ruleId":"1266","severity":2,"message":"1738","line":241,"column":13,"nodeType":null,"endLine":241,"endColumn":14,"fix":"1739"},{"ruleId":"1266","severity":2,"message":"1740","line":243,"column":22,"nodeType":null,"endLine":243,"endColumn":94,"fix":"1741"},{"ruleId":"1266","severity":2,"message":"1742","line":261,"column":48,"nodeType":null,"endLine":263,"endColumn":11,"fix":"1743"},{"ruleId":"1266","severity":2,"message":"1744","line":265,"column":13,"nodeType":null,"endLine":265,"endColumn":86,"fix":"1745"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":37,"nodeType":null,"endLine":2,"endColumn":54,"fix":"1746"},{"ruleId":"1266","severity":2,"message":"1747","line":17,"column":49,"nodeType":null,"endLine":17,"endColumn":83,"fix":"1748"},{"ruleId":"1266","severity":2,"message":"1277","line":22,"column":42,"nodeType":null,"endLine":22,"endColumn":43,"fix":"1749"},{"ruleId":"1266","severity":2,"message":"1750","line":31,"column":28,"nodeType":null,"endLine":32,"endColumn":6,"fix":"1751"},{"ruleId":"1266","severity":2,"message":"1752","line":33,"column":9,"nodeType":null,"endLine":33,"endColumn":109,"fix":"1753"},{"ruleId":"1266","severity":2,"message":"1754","line":39,"column":76,"nodeType":null,"endLine":39,"endColumn":89,"fix":"1755"},{"ruleId":"1266","severity":2,"message":"1756","line":46,"column":10,"nodeType":null,"endLine":46,"endColumn":15,"fix":"1757"},{"ruleId":"1266","severity":2,"message":"1758","line":50,"column":10,"nodeType":null,"endLine":50,"endColumn":18,"fix":"1759"},{"ruleId":"1266","severity":2,"message":"1760","line":55,"column":10,"nodeType":null,"endLine":55,"endColumn":14,"fix":"1761"},{"ruleId":"1266","severity":2,"message":"1762","line":59,"column":10,"nodeType":null,"endLine":59,"endColumn":14,"fix":"1763"},{"ruleId":"1266","severity":2,"message":"1764","line":70,"column":8,"nodeType":null,"endLine":70,"endColumn":14,"fix":"1765"},{"ruleId":"1266","severity":2,"message":"1287","line":75,"column":30,"nodeType":null,"endLine":75,"endColumn":38,"fix":"1766"},{"ruleId":"1266","severity":2,"message":"1767","line":77,"column":43,"nodeType":null,"endLine":77,"endColumn":95,"fix":"1768"},{"ruleId":"1266","severity":2,"message":"1769","line":79,"column":20,"nodeType":null,"endLine":79,"endColumn":30,"fix":"1770"},{"ruleId":"1266","severity":2,"message":"1771","line":80,"column":40,"nodeType":null,"endLine":80,"endColumn":70,"fix":"1772"},{"ruleId":"1266","severity":2,"message":"1773","line":83,"column":21,"nodeType":null,"endLine":83,"endColumn":52,"fix":"1774"},{"ruleId":"1266","severity":2,"message":"1775","line":86,"column":25,"nodeType":null,"endLine":86,"endColumn":82,"fix":"1776"},{"ruleId":"1266","severity":2,"message":"1777","line":110,"column":29,"nodeType":null,"endLine":110,"endColumn":88,"fix":"1778"},{"ruleId":"1266","severity":2,"message":"1277","line":114,"column":17,"nodeType":null,"endLine":114,"endColumn":18,"fix":"1779"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":22,"nodeType":null,"endLine":2,"endColumn":39,"fix":"1780"},{"ruleId":"1266","severity":2,"message":"1781","line":12,"column":62,"nodeType":null,"endLine":12,"endColumn":88,"fix":"1782"},{"ruleId":"1266","severity":2,"message":"1783","line":14,"column":40,"nodeType":null,"endLine":14,"endColumn":83,"fix":"1784"},{"ruleId":"1266","severity":2,"message":"1287","line":17,"column":46,"nodeType":null,"endLine":17,"endColumn":54,"fix":"1785"},{"ruleId":"1266","severity":2,"message":"1786","line":18,"column":11,"nodeType":null,"endLine":22,"endColumn":6,"fix":"1787"},{"ruleId":"1266","severity":2,"message":"1788","line":30,"column":17,"nodeType":null,"endLine":30,"endColumn":70,"fix":"1789"},{"ruleId":"1266","severity":2,"message":"1790","line":35,"column":39,"nodeType":null,"endLine":37,"endColumn":9,"fix":"1791"},{"ruleId":"1266","severity":2,"message":"1389","line":38,"column":47,"nodeType":null,"endLine":38,"endColumn":49,"fix":"1792"},{"ruleId":"1266","severity":2,"message":"1793","line":39,"column":15,"nodeType":null,"endLine":39,"endColumn":127,"fix":"1794"},{"ruleId":"1266","severity":2,"message":"1279","line":78,"column":14,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1795","line":4,"column":28,"nodeType":null,"endLine":4,"endColumn":46,"fix":"1796"},{"ruleId":"1266","severity":2,"message":"1797","line":5,"column":9,"nodeType":null,"endLine":5,"endColumn":55,"fix":"1798"},{"ruleId":"1266","severity":2,"message":"1277","line":18,"column":25,"nodeType":null,"endLine":18,"endColumn":26,"fix":"1799"},{"ruleId":"1266","severity":2,"message":"1277","line":24,"column":18,"nodeType":null,"endLine":24,"endColumn":19,"fix":"1800"},{"ruleId":"1266","severity":2,"message":"1801","line":27,"column":28,"nodeType":null,"endLine":27,"endColumn":122,"fix":"1802"},{"ruleId":"1266","severity":2,"message":"1803","line":35,"column":11,"nodeType":null,"endLine":35,"endColumn":140,"fix":"1804"},{"ruleId":"1266","severity":2,"message":"1805","line":43,"column":75,"nodeType":null,"endLine":43,"endColumn":99,"fix":"1806"},{"ruleId":"1266","severity":2,"message":"1287","line":44,"column":55,"nodeType":null,"endLine":44,"endColumn":63,"fix":"1807"},{"ruleId":"1266","severity":2,"message":"1808","line":48,"column":54,"nodeType":null,"endLine":48,"endColumn":104,"fix":"1809"},{"ruleId":"1266","severity":2,"message":"1810","line":52,"column":14,"nodeType":null,"endLine":52,"endColumn":86,"fix":"1811"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":31,"nodeType":null,"endLine":2,"endColumn":48,"fix":"1812"},{"ruleId":"1266","severity":2,"message":"1411","line":5,"column":22,"nodeType":null,"endLine":5,"endColumn":45,"fix":"1813"},{"ruleId":"1266","severity":2,"message":"1814","line":12,"column":72,"nodeType":null,"endLine":13,"endColumn":1,"fix":"1815"},{"ruleId":"1266","severity":2,"message":"1413","line":14,"column":46,"nodeType":null,"endLine":14,"endColumn":47,"fix":"1816"},{"ruleId":"1266","severity":2,"message":"1287","line":15,"column":31,"nodeType":null,"endLine":15,"endColumn":39,"fix":"1817"},{"ruleId":"1266","severity":2,"message":"1413","line":23,"column":42,"nodeType":null,"endLine":23,"endColumn":43,"fix":"1818"},{"ruleId":"1266","severity":2,"message":"1277","line":30,"column":36,"nodeType":null,"endLine":30,"endColumn":37,"fix":"1819"},{"ruleId":"1266","severity":2,"message":"1820","line":37,"column":22,"nodeType":null,"endLine":37,"endColumn":22,"fix":"1821"},{"ruleId":"1266","severity":2,"message":"1429","line":38,"column":6,"nodeType":null,"endLine":38,"endColumn":6,"fix":"1822"},{"ruleId":"1266","severity":2,"message":"1413","line":41,"column":40,"nodeType":null,"endLine":41,"endColumn":41,"fix":"1823"},{"ruleId":"1266","severity":2,"message":"1315","line":44,"column":7,"nodeType":null,"endLine":44,"endColumn":7,"fix":"1824"},{"ruleId":"1266","severity":2,"message":"1825","line":45,"column":1,"nodeType":null,"endLine":47,"endColumn":9,"fix":"1826"},{"ruleId":"1266","severity":2,"message":"1827","line":48,"column":1,"nodeType":null,"endLine":48,"endColumn":38,"fix":"1828"},{"ruleId":"1266","severity":2,"message":"1315","line":49,"column":1,"nodeType":null,"endLine":49,"endColumn":1,"fix":"1829"},{"ruleId":"1266","severity":2,"message":"1830","line":50,"column":1,"nodeType":null,"endLine":52,"endColumn":13,"fix":"1831"},{"ruleId":"1266","severity":2,"message":"1315","line":53,"column":1,"nodeType":null,"endLine":53,"endColumn":1,"fix":"1832"},{"ruleId":"1266","severity":2,"message":"1315","line":54,"column":1,"nodeType":null,"endLine":54,"endColumn":1,"fix":"1833"},{"ruleId":"1266","severity":2,"message":"1834","line":55,"column":9,"nodeType":null,"endLine":57,"endColumn":9,"fix":"1835"},{"ruleId":"1266","severity":2,"message":"1836","line":58,"column":9,"nodeType":null,"endLine":60,"endColumn":9,"fix":"1837"},{"ruleId":"1266","severity":2,"message":"1838","line":61,"column":1,"nodeType":null,"endLine":61,"endColumn":9,"fix":"1839"},{"ruleId":"1266","severity":2,"message":"1315","line":62,"column":1,"nodeType":null,"endLine":62,"endColumn":1,"fix":"1840"},{"ruleId":"1266","severity":2,"message":"1315","line":63,"column":13,"nodeType":null,"endLine":63,"endColumn":13,"fix":"1841"},{"ruleId":"1266","severity":2,"message":"1315","line":64,"column":11,"nodeType":null,"endLine":64,"endColumn":11,"fix":"1842"},{"ruleId":"1266","severity":2,"message":"1838","line":65,"column":1,"nodeType":null,"endLine":65,"endColumn":9,"fix":"1843"},{"ruleId":"1266","severity":2,"message":"1844","line":66,"column":9,"nodeType":null,"endLine":68,"endColumn":9,"fix":"1845"},{"ruleId":"1266","severity":2,"message":"1846","line":69,"column":1,"nodeType":null,"endLine":71,"endColumn":9,"fix":"1847"},{"ruleId":"1266","severity":2,"message":"1848","line":72,"column":1,"nodeType":null,"endLine":72,"endColumn":7,"fix":"1849"},{"ruleId":"1266","severity":2,"message":"1429","line":74,"column":6,"nodeType":null,"endLine":74,"endColumn":6,"fix":"1850"},{"ruleId":"1266","severity":2,"message":"1315","line":79,"column":1,"nodeType":null,"endLine":79,"endColumn":1,"fix":"1851"},{"ruleId":"1266","severity":2,"message":"1315","line":80,"column":7,"nodeType":null,"endLine":80,"endColumn":7,"fix":"1852"},{"ruleId":"1266","severity":2,"message":"1315","line":81,"column":9,"nodeType":null,"endLine":81,"endColumn":9,"fix":"1853"},{"ruleId":"1266","severity":2,"message":"1315","line":82,"column":11,"nodeType":null,"endLine":82,"endColumn":11,"fix":"1854"},{"ruleId":"1266","severity":2,"message":"1855","line":83,"column":1,"nodeType":null,"endLine":83,"endColumn":21,"fix":"1856"},{"ruleId":"1266","severity":2,"message":"1315","line":84,"column":1,"nodeType":null,"endLine":84,"endColumn":1,"fix":"1857"},{"ruleId":"1266","severity":2,"message":"1379","line":85,"column":1,"nodeType":null,"endLine":85,"endColumn":13,"fix":"1858"},{"ruleId":"1266","severity":2,"message":"1315","line":86,"column":1,"nodeType":null,"endLine":86,"endColumn":1,"fix":"1859"},{"ruleId":"1266","severity":2,"message":"1379","line":87,"column":1,"nodeType":null,"endLine":87,"endColumn":13,"fix":"1860"},{"ruleId":"1266","severity":2,"message":"1315","line":88,"column":13,"nodeType":null,"endLine":88,"endColumn":13,"fix":"1861"},{"ruleId":"1266","severity":2,"message":"1379","line":89,"column":1,"nodeType":null,"endLine":89,"endColumn":13,"fix":"1862"},{"ruleId":"1266","severity":2,"message":"1315","line":90,"column":11,"nodeType":null,"endLine":90,"endColumn":11,"fix":"1863"},{"ruleId":"1266","severity":2,"message":"1838","line":91,"column":1,"nodeType":null,"endLine":91,"endColumn":9,"fix":"1864"},{"ruleId":"1266","severity":2,"message":"1865","line":92,"column":9,"nodeType":null,"endLine":94,"endColumn":9,"fix":"1866"},{"ruleId":"1266","severity":2,"message":"1848","line":95,"column":1,"nodeType":null,"endLine":95,"endColumn":7,"fix":"1867"},{"ruleId":"1266","severity":2,"message":"1315","line":96,"column":1,"nodeType":null,"endLine":96,"endColumn":1,"fix":"1868"},{"ruleId":"1266","severity":2,"message":"1514","line":100,"column":1,"nodeType":null,"endLine":101,"endColumn":1,"fix":"1869"},{"ruleId":"1266","severity":2,"message":"1870","line":2,"column":9,"nodeType":null,"endLine":2,"endColumn":91,"fix":"1871"},{"ruleId":"1266","severity":2,"message":"1872","line":4,"column":16,"nodeType":null,"endLine":4,"endColumn":28,"fix":"1873"},{"ruleId":"1266","severity":2,"message":"1411","line":8,"column":31,"nodeType":null,"endLine":8,"endColumn":54,"fix":"1874"},{"ruleId":"1266","severity":2,"message":"1875","line":15,"column":31,"nodeType":null,"endLine":15,"endColumn":52,"fix":"1876"},{"ruleId":"1266","severity":2,"message":"1877","line":18,"column":54,"nodeType":null,"endLine":18,"endColumn":76,"fix":"1878"},{"ruleId":"1266","severity":2,"message":"1879","line":20,"column":56,"nodeType":null,"endLine":20,"endColumn":80,"fix":"1880"},{"ruleId":"1266","severity":2,"message":"1881","line":23,"column":27,"nodeType":null,"endLine":23,"endColumn":127,"fix":"1882"},{"ruleId":"1266","severity":2,"message":"1287","line":26,"column":31,"nodeType":null,"endLine":26,"endColumn":39,"fix":"1883"},{"ruleId":"1266","severity":2,"message":"1884","line":28,"column":11,"nodeType":null,"endLine":28,"endColumn":100,"fix":"1885"},{"ruleId":"1266","severity":2,"message":"1886","line":37,"column":36,"nodeType":null,"endLine":37,"endColumn":135,"fix":"1887"},{"ruleId":"1266","severity":2,"message":"1888","line":38,"column":52,"nodeType":null,"endLine":38,"endColumn":146,"fix":"1889"},{"ruleId":"1266","severity":2,"message":"1750","line":44,"column":29,"nodeType":null,"endLine":45,"endColumn":6,"fix":"1890"},{"ruleId":"1266","severity":2,"message":"1277","line":48,"column":65,"nodeType":null,"endLine":48,"endColumn":66,"fix":"1891"},{"ruleId":"1266","severity":2,"message":"1892","line":59,"column":14,"nodeType":null,"endLine":62,"endColumn":9,"fix":"1893"},{"ruleId":"1266","severity":2,"message":"1750","line":70,"column":38,"nodeType":null,"endLine":71,"endColumn":6,"fix":"1894"},{"ruleId":"1266","severity":2,"message":"1895","line":75,"column":10,"nodeType":null,"endLine":75,"endColumn":38,"fix":"1896"},{"ruleId":"1266","severity":2,"message":"1413","line":77,"column":11,"nodeType":null,"endLine":77,"endColumn":12,"fix":"1897"},{"ruleId":"1266","severity":2,"message":"1750","line":92,"column":44,"nodeType":null,"endLine":93,"endColumn":6,"fix":"1898"},{"ruleId":"1266","severity":2,"message":"1899","line":97,"column":10,"nodeType":null,"endLine":98,"endColumn":49,"fix":"1900"},{"ruleId":"1266","severity":2,"message":"1309","line":99,"column":1,"nodeType":null,"endLine":99,"endColumn":3,"fix":"1901"},{"ruleId":"1266","severity":2,"message":"1902","line":100,"column":1,"nodeType":null,"endLine":100,"endColumn":15,"fix":"1903"},{"ruleId":"1266","severity":2,"message":"1309","line":101,"column":15,"nodeType":null,"endLine":101,"endColumn":17,"fix":"1904"},{"ruleId":"1266","severity":2,"message":"1669","line":102,"column":1,"nodeType":null,"endLine":102,"endColumn":19,"fix":"1905"},{"ruleId":"1266","severity":2,"message":"1309","line":103,"column":1,"nodeType":null,"endLine":103,"endColumn":3,"fix":"1906"},{"ruleId":"1266","severity":2,"message":"1907","line":104,"column":17,"nodeType":null,"endLine":104,"endColumn":74,"fix":"1908"},{"ruleId":"1266","severity":2,"message":"1909","line":105,"column":15,"nodeType":null,"endLine":105,"endColumn":24,"fix":"1910"},{"ruleId":"1266","severity":2,"message":"1309","line":106,"column":1,"nodeType":null,"endLine":106,"endColumn":3,"fix":"1911"},{"ruleId":"1266","severity":2,"message":"1309","line":107,"column":13,"nodeType":null,"endLine":107,"endColumn":15,"fix":"1912"},{"ruleId":"1266","severity":2,"message":"1309","line":108,"column":1,"nodeType":null,"endLine":108,"endColumn":3,"fix":"1913"},{"ruleId":"1266","severity":2,"message":"1914","line":109,"column":9,"nodeType":null,"endLine":110,"endColumn":9,"fix":"1915"},{"ruleId":"1266","severity":2,"message":"1916","line":125,"column":5,"nodeType":null,"endLine":126,"endColumn":10,"fix":"1917"},{"ruleId":"1266","severity":2,"message":"1918","line":130,"column":10,"nodeType":null,"endLine":130,"endColumn":50,"fix":"1919"},{"ruleId":"1266","severity":2,"message":"1413","line":134,"column":11,"nodeType":null,"endLine":134,"endColumn":12,"fix":"1920"},{"ruleId":"1266","severity":2,"message":"1820","line":149,"column":9,"nodeType":null,"endLine":149,"endColumn":9,"fix":"1921"},{"ruleId":"1266","severity":2,"message":"1309","line":150,"column":1,"nodeType":null,"endLine":150,"endColumn":3,"fix":"1922"},{"ruleId":"1266","severity":2,"message":"1923","line":151,"column":1,"nodeType":null,"endLine":151,"endColumn":45,"fix":"1924"},{"ruleId":"1266","severity":2,"message":"1315","line":191,"column":5,"nodeType":null,"endLine":191,"endColumn":5,"fix":"1925"},{"ruleId":"1266","severity":2,"message":"1926","line":196,"column":78,"nodeType":null,"endLine":196,"endColumn":133,"fix":"1927"},{"ruleId":"1266","severity":2,"message":"1928","line":198,"column":12,"nodeType":null,"endLine":198,"endColumn":110,"fix":"1929"},{"ruleId":"1266","severity":2,"message":"1930","line":205,"column":27,"nodeType":null,"endLine":205,"endColumn":61,"fix":"1931"},{"ruleId":"1266","severity":2,"message":"1932","line":215,"column":31,"nodeType":null,"endLine":215,"endColumn":51,"fix":"1933"},{"ruleId":"1266","severity":2,"message":"1279","line":24,"column":33,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1934","line":11,"column":63,"nodeType":null,"endLine":11,"endColumn":87,"fix":"1935"},{"ruleId":"1266","severity":2,"message":"1287","line":13,"column":62,"nodeType":null,"endLine":13,"endColumn":70,"fix":"1936"},{"ruleId":"1266","severity":2,"message":"1287","line":23,"column":41,"nodeType":null,"endLine":23,"endColumn":49,"fix":"1937"},{"ruleId":"1266","severity":2,"message":"1938","line":24,"column":39,"nodeType":null,"endLine":24,"endColumn":44,"fix":"1939"},{"ruleId":"1266","severity":2,"message":"1315","line":37,"column":5,"nodeType":null,"endLine":37,"endColumn":5,"fix":"1940"},{"ruleId":"1266","severity":2,"message":"1941","line":39,"column":29,"nodeType":null,"endLine":39,"endColumn":49,"fix":"1942"},{"ruleId":"1266","severity":2,"message":"1389","line":41,"column":57,"nodeType":null,"endLine":41,"endColumn":59,"fix":"1943"},{"ruleId":"1266","severity":2,"message":"1389","line":42,"column":69,"nodeType":null,"endLine":42,"endColumn":71,"fix":"1944"},{"ruleId":"1266","severity":2,"message":"1945","line":43,"column":34,"nodeType":null,"endLine":43,"endColumn":107,"fix":"1946"},{"ruleId":"1266","severity":2,"message":"1279","line":343,"column":72,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":23,"nodeType":null,"endLine":2,"endColumn":40,"fix":"1947"},{"ruleId":"1266","severity":2,"message":"1948","line":10,"column":72,"nodeType":null,"endLine":10,"endColumn":103,"fix":"1949"},{"ruleId":"1266","severity":2,"message":"1950","line":24,"column":13,"nodeType":null,"endLine":24,"endColumn":82,"fix":"1951"},{"ruleId":"1266","severity":2,"message":"1952","line":33,"column":13,"nodeType":null,"endLine":33,"endColumn":78,"fix":"1953"},{"ruleId":"1266","severity":2,"message":"1287","line":39,"column":47,"nodeType":null,"endLine":39,"endColumn":55,"fix":"1954"},{"ruleId":"1266","severity":2,"message":"1287","line":49,"column":51,"nodeType":null,"endLine":49,"endColumn":59,"fix":"1955"},{"ruleId":"1266","severity":2,"message":"1287","line":59,"column":51,"nodeType":null,"endLine":59,"endColumn":59,"fix":"1956"},{"ruleId":"1266","severity":2,"message":"1957","line":63,"column":13,"nodeType":null,"endLine":63,"endColumn":65,"fix":"1958"},{"ruleId":"1266","severity":2,"message":"1287","line":69,"column":52,"nodeType":null,"endLine":69,"endColumn":60,"fix":"1959"},{"ruleId":"1266","severity":2,"message":"1287","line":79,"column":50,"nodeType":null,"endLine":79,"endColumn":58,"fix":"1960"},{"ruleId":"1266","severity":2,"message":"1287","line":89,"column":54,"nodeType":null,"endLine":89,"endColumn":62,"fix":"1961"},{"ruleId":"1266","severity":2,"message":"1287","line":99,"column":54,"nodeType":null,"endLine":99,"endColumn":62,"fix":"1962"},{"ruleId":"1266","severity":2,"message":"1287","line":109,"column":54,"nodeType":null,"endLine":109,"endColumn":62,"fix":"1963"},{"ruleId":"1266","severity":2,"message":"1279","line":37,"column":31,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1964","line":9,"column":53,"nodeType":null,"endLine":9,"endColumn":78,"fix":"1965"},{"ruleId":"1266","severity":2,"message":"1966","line":10,"column":44,"nodeType":null,"endLine":10,"endColumn":55,"fix":"1967"},{"ruleId":"1266","severity":2,"message":"1968","line":11,"column":19,"nodeType":null,"endLine":11,"endColumn":91,"fix":"1969"},{"ruleId":"1266","severity":2,"message":"1970","line":16,"column":29,"nodeType":null,"endLine":18,"endColumn":7,"fix":"1971"},{"ruleId":"1266","severity":2,"message":"1279","line":767,"column":49,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1795","line":4,"column":28,"nodeType":null,"endLine":4,"endColumn":46,"fix":"1972"},{"ruleId":"1266","severity":2,"message":"1973","line":5,"column":9,"nodeType":null,"endLine":5,"endColumn":70,"fix":"1974"},{"ruleId":"1266","severity":2,"message":"1277","line":20,"column":26,"nodeType":null,"endLine":20,"endColumn":27,"fix":"1975"},{"ruleId":"1266","severity":2,"message":"1976","line":31,"column":29,"nodeType":null,"endLine":31,"endColumn":115,"fix":"1977"},{"ruleId":"1266","severity":2,"message":"1978","line":41,"column":11,"nodeType":null,"endLine":41,"endColumn":128,"fix":"1979"},{"ruleId":"1266","severity":2,"message":"1980","line":49,"column":34,"nodeType":null,"endLine":49,"endColumn":121,"fix":"1981"},{"ruleId":"1266","severity":2,"message":"1982","line":51,"column":51,"nodeType":null,"endLine":51,"endColumn":69,"fix":"1983"},{"ruleId":"1266","severity":2,"message":"1413","line":55,"column":23,"nodeType":null,"endLine":55,"endColumn":24,"fix":"1984"},{"ruleId":"1266","severity":2,"message":"1985","line":56,"column":25,"nodeType":null,"endLine":56,"endColumn":29,"fix":"1986"},{"ruleId":"1266","severity":2,"message":"1987","line":57,"column":31,"nodeType":null,"endLine":57,"endColumn":38,"fix":"1988"},{"ruleId":"1266","severity":2,"message":"1989","line":68,"column":7,"nodeType":null,"endLine":68,"endColumn":90,"fix":"1990"},{"ruleId":"1266","severity":2,"message":"1991","line":73,"column":28,"nodeType":null,"endLine":73,"endColumn":102,"fix":"1992"},{"ruleId":"1266","severity":2,"message":"1993","line":80,"column":69,"nodeType":null,"endLine":80,"endColumn":123,"fix":"1994"},{"ruleId":"1266","severity":2,"message":"1429","line":82,"column":6,"nodeType":null,"endLine":82,"endColumn":6,"fix":"1995"},{"ruleId":"1266","severity":2,"message":"1996","line":85,"column":26,"nodeType":null,"endLine":85,"endColumn":157,"fix":"1997"},{"ruleId":"1266","severity":2,"message":"1287","line":86,"column":51,"nodeType":null,"endLine":86,"endColumn":59,"fix":"1998"},{"ruleId":"1266","severity":2,"message":"1999","line":90,"column":46,"nodeType":null,"endLine":90,"endColumn":103,"fix":"2000"},{"ruleId":"1266","severity":2,"message":"1313","line":94,"column":68,"nodeType":null,"endLine":94,"endColumn":68,"fix":"2001"},{"ruleId":"1266","severity":2,"message":"1279","line":71,"column":30,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1279","line":47,"column":18,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1309","line":23,"column":3,"nodeType":null,"endLine":23,"endColumn":5,"fix":"2002"},{"ruleId":"1266","severity":2,"message":"2003","line":24,"column":1,"nodeType":null,"endLine":24,"endColumn":5,"fix":"2004"},{"ruleId":"1266","severity":2,"message":"1309","line":25,"column":1,"nodeType":null,"endLine":25,"endColumn":3,"fix":"2005"},{"ruleId":"1266","severity":2,"message":"1309","line":26,"column":3,"nodeType":null,"endLine":26,"endColumn":5,"fix":"2006"},{"ruleId":"1266","severity":2,"message":"1429","line":27,"column":2,"nodeType":null,"endLine":27,"endColumn":2,"fix":"2007"},{"ruleId":"1266","severity":2,"message":"2008","line":29,"column":54,"nodeType":null,"endLine":29,"endColumn":90,"fix":"2009"},{"ruleId":"1266","severity":2,"message":"2010","line":42,"column":19,"nodeType":null,"endLine":42,"endColumn":38,"fix":"2011"},{"ruleId":"1266","severity":2,"message":"1309","line":52,"column":5,"nodeType":null,"endLine":52,"endColumn":7,"fix":"2012"},{"ruleId":"1266","severity":2,"message":"1309","line":53,"column":1,"nodeType":null,"endLine":53,"endColumn":3,"fix":"2013"},{"ruleId":"1266","severity":2,"message":"1309","line":54,"column":7,"nodeType":null,"endLine":54,"endColumn":9,"fix":"2014"},{"ruleId":"1266","severity":2,"message":"2015","line":55,"column":1,"nodeType":null,"endLine":55,"endColumn":5,"fix":"2016"},{"ruleId":"1266","severity":2,"message":"2015","line":56,"column":9,"nodeType":null,"endLine":56,"endColumn":13,"fix":"2017"},{"ruleId":"1266","severity":2,"message":"2018","line":57,"column":1,"nodeType":null,"endLine":57,"endColumn":13,"fix":"2019"},{"ruleId":"1266","severity":2,"message":"2015","line":58,"column":1,"nodeType":null,"endLine":58,"endColumn":5,"fix":"2020"},{"ruleId":"1266","severity":2,"message":"2018","line":59,"column":1,"nodeType":null,"endLine":59,"endColumn":13,"fix":"2021"},{"ruleId":"1266","severity":2,"message":"2015","line":60,"column":9,"nodeType":null,"endLine":60,"endColumn":13,"fix":"2022"},{"ruleId":"1266","severity":2,"message":"2023","line":61,"column":1,"nodeType":null,"endLine":61,"endColumn":11,"fix":"2024"},{"ruleId":"1266","severity":2,"message":"1309","line":62,"column":1,"nodeType":null,"endLine":62,"endColumn":3,"fix":"2025"},{"ruleId":"1266","severity":2,"message":"2026","line":66,"column":46,"nodeType":null,"endLine":66,"endColumn":78,"fix":"2027"},{"ruleId":"1266","severity":2,"message":"2028","line":68,"column":4,"nodeType":null,"endLine":68,"endColumn":5,"fix":"2029"},{"ruleId":"1266","severity":2,"message":"2026","line":70,"column":46,"nodeType":null,"endLine":70,"endColumn":78,"fix":"2030"},{"ruleId":"1266","severity":2,"message":"2028","line":72,"column":4,"nodeType":null,"endLine":72,"endColumn":5,"fix":"2031"},{"ruleId":"1266","severity":2,"message":"2032","line":73,"column":14,"nodeType":null,"endLine":73,"endColumn":49,"fix":"2033"},{"ruleId":"1266","severity":2,"message":"2034","line":74,"column":14,"nodeType":null,"endLine":74,"endColumn":91,"fix":"2035"},{"ruleId":"1266","severity":2,"message":"2036","line":77,"column":18,"nodeType":null,"endLine":77,"endColumn":32,"fix":"2037"},{"ruleId":"1266","severity":2,"message":"2038","line":78,"column":18,"nodeType":null,"endLine":78,"endColumn":35,"fix":"2039"},{"ruleId":"1266","severity":2,"message":"2040","line":79,"column":18,"nodeType":null,"endLine":79,"endColumn":35,"fix":"2041"},{"ruleId":"1266","severity":2,"message":"2042","line":80,"column":19,"nodeType":null,"endLine":80,"endColumn":33,"fix":"2043"},{"ruleId":"1266","severity":2,"message":"1429","line":81,"column":4,"nodeType":null,"endLine":81,"endColumn":4,"fix":"2044"},{"ruleId":"1266","severity":2,"message":"2045","line":100,"column":44,"nodeType":null,"endLine":100,"endColumn":84,"fix":"2046"},{"ruleId":"1266","severity":2,"message":"2047","line":101,"column":11,"nodeType":null,"endLine":101,"endColumn":95,"fix":"2048"},{"ruleId":"1266","severity":2,"message":"2049","line":105,"column":31,"nodeType":null,"endLine":105,"endColumn":42,"fix":"2050"},{"ruleId":"1266","severity":2,"message":"2051","line":109,"column":18,"nodeType":null,"endLine":109,"endColumn":69,"fix":"2052"},{"ruleId":"1266","severity":2,"message":"2053","line":110,"column":28,"nodeType":null,"endLine":110,"endColumn":57,"fix":"2054"},{"ruleId":"1266","severity":2,"message":"2055","line":119,"column":24,"nodeType":null,"endLine":119,"endColumn":85,"fix":"2056"},{"ruleId":"1266","severity":2,"message":"1429","line":126,"column":8,"nodeType":null,"endLine":126,"endColumn":8,"fix":"2057"},{"ruleId":"1266","severity":2,"message":"1277","line":135,"column":29,"nodeType":null,"endLine":135,"endColumn":30,"fix":"2058"},{"ruleId":"1266","severity":2,"message":"1277","line":139,"column":27,"nodeType":null,"endLine":139,"endColumn":28,"fix":"2059"},{"ruleId":"1266","severity":2,"message":"1277","line":140,"column":10,"nodeType":null,"endLine":140,"endColumn":11,"fix":"2060"},{"ruleId":"1266","severity":2,"message":"1277","line":145,"column":26,"nodeType":null,"endLine":145,"endColumn":27,"fix":"2061"},{"ruleId":"1266","severity":2,"message":"2062","line":149,"column":17,"nodeType":null,"endLine":149,"endColumn":40,"fix":"2063"},{"ruleId":"1266","severity":2,"message":"2064","line":170,"column":20,"nodeType":null,"endLine":170,"endColumn":46,"fix":"2065"},{"ruleId":"1266","severity":2,"message":"2064","line":179,"column":22,"nodeType":null,"endLine":179,"endColumn":48,"fix":"2066"},{"ruleId":"1266","severity":2,"message":"2067","line":192,"column":58,"nodeType":null,"endLine":192,"endColumn":82,"fix":"2068"},{"ruleId":"1266","severity":2,"message":"1309","line":193,"column":1,"nodeType":null,"endLine":193,"endColumn":3,"fix":"2069"},{"ruleId":"1266","severity":2,"message":"2070","line":195,"column":3,"nodeType":null,"endLine":195,"endColumn":139,"fix":"2071"},{"ruleId":"1266","severity":2,"message":"2072","line":196,"column":1,"nodeType":null,"endLine":196,"endColumn":2,"fix":"2073"},{"ruleId":"1266","severity":2,"message":"2074","line":1,"column":16,"nodeType":null,"endLine":1,"endColumn":73,"fix":"2075"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":24,"nodeType":null,"endLine":2,"endColumn":41,"fix":"2076"},{"ruleId":"1266","severity":2,"message":"1514","line":24,"column":1,"nodeType":null,"endLine":25,"endColumn":1,"fix":"2077"},{"ruleId":"1266","severity":2,"message":"2078","line":26,"column":54,"nodeType":null,"endLine":26,"endColumn":74,"fix":"2079"},{"ruleId":"1266","severity":2,"message":"2080","line":33,"column":36,"nodeType":null,"endLine":33,"endColumn":44,"fix":"2081"},{"ruleId":"1266","severity":2,"message":"2080","line":34,"column":30,"nodeType":null,"endLine":34,"endColumn":38,"fix":"2082"},{"ruleId":"1266","severity":2,"message":"2083","line":35,"column":33,"nodeType":null,"endLine":35,"endColumn":73,"fix":"2084"},{"ruleId":"1266","severity":2,"message":"2085","line":39,"column":30,"nodeType":null,"endLine":39,"endColumn":40,"fix":"2086"},{"ruleId":"1266","severity":2,"message":"2087","line":42,"column":24,"nodeType":null,"endLine":42,"endColumn":52,"fix":"2088"},{"ruleId":"1266","severity":2,"message":"2083","line":49,"column":15,"nodeType":null,"endLine":49,"endColumn":55,"fix":"2089"},{"ruleId":"1266","severity":2,"message":"2090","line":54,"column":20,"nodeType":null,"endLine":54,"endColumn":74,"fix":"2091"},{"ruleId":"1266","severity":2,"message":"2092","line":57,"column":18,"nodeType":null,"endLine":57,"endColumn":66,"fix":"2093"},{"ruleId":"1266","severity":2,"message":"1514","line":62,"column":2,"nodeType":null,"endLine":63,"endColumn":1,"fix":"2094"},{"ruleId":"1266","severity":2,"message":"2095","line":65,"column":74,"nodeType":null,"endLine":65,"endColumn":106,"fix":"2096"},{"ruleId":"1266","severity":2,"message":"2097","line":76,"column":35,"nodeType":null,"endLine":76,"endColumn":35,"fix":"2098"},{"ruleId":"1266","severity":2,"message":"2099","line":77,"column":1,"nodeType":null,"endLine":77,"endColumn":77,"fix":"2100"},{"ruleId":"1266","severity":2,"message":"2101","line":78,"column":1,"nodeType":null,"endLine":78,"endColumn":42,"fix":"2102"},{"ruleId":"1266","severity":2,"message":"1315","line":80,"column":1,"nodeType":null,"endLine":80,"endColumn":1,"fix":"2103"},{"ruleId":"1266","severity":2,"message":"1315","line":82,"column":5,"nodeType":null,"endLine":82,"endColumn":5,"fix":"2104"},{"ruleId":"1266","severity":2,"message":"1315","line":83,"column":1,"nodeType":null,"endLine":83,"endColumn":1,"fix":"2105"},{"ruleId":"1266","severity":2,"message":"1848","line":84,"column":1,"nodeType":null,"endLine":84,"endColumn":7,"fix":"2106"},{"ruleId":"1266","severity":2,"message":"1315","line":85,"column":1,"nodeType":null,"endLine":85,"endColumn":1,"fix":"2107"},{"ruleId":"1266","severity":2,"message":"1315","line":86,"column":1,"nodeType":null,"endLine":86,"endColumn":1,"fix":"2108"},{"ruleId":"1266","severity":2,"message":"1315","line":87,"column":5,"nodeType":null,"endLine":87,"endColumn":5,"fix":"2109"},{"ruleId":"1266","severity":2,"message":"1315","line":88,"column":1,"nodeType":null,"endLine":88,"endColumn":1,"fix":"2110"},{"ruleId":"1266","severity":2,"message":"2111","line":89,"column":1,"nodeType":null,"endLine":89,"endColumn":5,"fix":"2112"},{"ruleId":"1266","severity":2,"message":"2113","line":91,"column":1,"nodeType":null,"endLine":91,"endColumn":79,"fix":"2114"},{"ruleId":"1266","severity":2,"message":"2115","line":93,"column":1,"nodeType":null,"endLine":93,"endColumn":32,"fix":"2116"},{"ruleId":"1266","severity":2,"message":"2117","line":94,"column":7,"nodeType":null,"endLine":94,"endColumn":109,"fix":"2118"},{"ruleId":"1266","severity":2,"message":"2119","line":95,"column":3,"nodeType":null,"endLine":96,"endColumn":1,"fix":"2120"},{"ruleId":"1266","severity":2,"message":"2121","line":97,"column":3,"nodeType":null,"endLine":97,"endColumn":13,"fix":"2122"},{"ruleId":"1266","severity":2,"message":"1287","line":102,"column":37,"nodeType":null,"endLine":102,"endColumn":45,"fix":"2123"},{"ruleId":"1266","severity":2,"message":"1820","line":103,"column":78,"nodeType":null,"endLine":103,"endColumn":78,"fix":"2124"},{"ruleId":"1266","severity":2,"message":"1750","line":107,"column":32,"nodeType":null,"endLine":108,"endColumn":6,"fix":"2125"},{"ruleId":"1266","severity":2,"message":"2126","line":109,"column":49,"nodeType":null,"endLine":109,"endColumn":58,"fix":"2127"},{"ruleId":"1266","severity":2,"message":"2128","line":110,"column":9,"nodeType":null,"endLine":111,"endColumn":8,"fix":"2129"},{"ruleId":"1266","severity":2,"message":"1287","line":116,"column":37,"nodeType":null,"endLine":116,"endColumn":45,"fix":"2130"},{"ruleId":"1266","severity":2,"message":"2131","line":119,"column":21,"nodeType":null,"endLine":119,"endColumn":23,"fix":"2132"},{"ruleId":"1266","severity":2,"message":"2133","line":120,"column":57,"nodeType":null,"endLine":120,"endColumn":103,"fix":"2134"},{"ruleId":"1266","severity":2,"message":"2135","line":121,"column":6,"nodeType":null,"endLine":121,"endColumn":10,"fix":"2136"},{"ruleId":"1266","severity":2,"message":"1287","line":133,"column":30,"nodeType":null,"endLine":133,"endColumn":38,"fix":"2137"},{"ruleId":"1266","severity":2,"message":"1660","line":137,"column":17,"nodeType":null,"endLine":137,"endColumn":25,"fix":"2138"},{"ruleId":"1266","severity":2,"message":"1287","line":143,"column":30,"nodeType":null,"endLine":143,"endColumn":38,"fix":"2139"},{"ruleId":"1266","severity":2,"message":"1660","line":147,"column":17,"nodeType":null,"endLine":147,"endColumn":25,"fix":"2140"},{"ruleId":"1266","severity":2,"message":"1287","line":153,"column":65,"nodeType":null,"endLine":153,"endColumn":73,"fix":"2141"},{"ruleId":"1266","severity":2,"message":"2142","line":163,"column":23,"nodeType":null,"endLine":163,"endColumn":83,"fix":"2143"},{"ruleId":"1266","severity":2,"message":"2144","line":174,"column":27,"nodeType":null,"endLine":174,"endColumn":54,"fix":"2145"},{"ruleId":"1266","severity":2,"message":"2146","line":176,"column":43,"nodeType":null,"endLine":176,"endColumn":66,"fix":"2147"},{"ruleId":"1266","severity":2,"message":"1287","line":191,"column":30,"nodeType":null,"endLine":191,"endColumn":38,"fix":"2148"},{"ruleId":"1266","severity":2,"message":"2149","line":205,"column":69,"nodeType":null,"endLine":205,"endColumn":79,"fix":"2150"},{"ruleId":"1266","severity":2,"message":"2151","line":206,"column":12,"nodeType":null,"endLine":206,"endColumn":87,"fix":"2152"},{"ruleId":"1266","severity":2,"message":"1287","line":210,"column":37,"nodeType":null,"endLine":210,"endColumn":45,"fix":"2153"},{"ruleId":"1266","severity":2,"message":"1287","line":216,"column":37,"nodeType":null,"endLine":216,"endColumn":45,"fix":"2154"},{"ruleId":"1266","severity":2,"message":"1677","line":223,"column":11,"nodeType":null,"endLine":223,"endColumn":11,"fix":"2155"},{"ruleId":"1266","severity":2,"message":"1309","line":224,"column":9,"nodeType":null,"endLine":224,"endColumn":11,"fix":"2156"},{"ruleId":"1266","severity":2,"message":"2157","line":225,"column":1,"nodeType":null,"endLine":225,"endColumn":42,"fix":"2158"},{"ruleId":"1266","severity":2,"message":"2159","line":228,"column":31,"nodeType":null,"endLine":228,"endColumn":42,"fix":"2160"},{"ruleId":"1266","severity":2,"message":"2161","line":243,"column":19,"nodeType":null,"endLine":243,"endColumn":95,"fix":"2162"},{"ruleId":"1266","severity":2,"message":"1277","line":246,"column":19,"nodeType":null,"endLine":246,"endColumn":20,"fix":"2163"},{"ruleId":"1266","severity":2,"message":"1277","line":252,"column":32,"nodeType":null,"endLine":252,"endColumn":33,"fix":"2164"},{"ruleId":"1266","severity":2,"message":"2159","line":269,"column":36,"nodeType":null,"endLine":269,"endColumn":47,"fix":"2165"},{"ruleId":"1266","severity":2,"message":"1277","line":279,"column":26,"nodeType":null,"endLine":279,"endColumn":27,"fix":"2166"},{"ruleId":"1266","severity":2,"message":"1277","line":285,"column":37,"nodeType":null,"endLine":285,"endColumn":38,"fix":"2167"},{"ruleId":"1266","severity":2,"message":"2168","line":294,"column":17,"nodeType":null,"endLine":294,"endColumn":114,"fix":"2169"},{"ruleId":"1266","severity":2,"message":"2170","line":302,"column":14,"nodeType":null,"endLine":302,"endColumn":106,"fix":"2171"},{"ruleId":"1266","severity":2,"message":"2172","line":309,"column":44,"nodeType":null,"endLine":311,"endColumn":13,"fix":"2173"},{"ruleId":"1266","severity":2,"message":"2174","line":316,"column":14,"nodeType":null,"endLine":316,"endColumn":97,"fix":"2175"},{"ruleId":"1266","severity":2,"message":"1279","line":248,"column":34,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2176","line":1,"column":13,"nodeType":null,"endLine":1,"endColumn":19,"fix":"2177"},{"ruleId":"1266","severity":2,"message":"1750","line":10,"column":23,"nodeType":null,"endLine":11,"endColumn":6,"fix":"2178"},{"ruleId":"1266","severity":2,"message":"1277","line":20,"column":36,"nodeType":null,"endLine":20,"endColumn":37,"fix":"2179"},{"ruleId":"1266","severity":2,"message":"2180","line":22,"column":12,"nodeType":null,"endLine":27,"endColumn":6,"fix":"2181"},{"ruleId":"1266","severity":2,"message":"2182","line":30,"column":42,"nodeType":null,"endLine":30,"endColumn":66,"fix":"2183"},{"ruleId":"1266","severity":2,"message":"2184","line":2,"column":31,"nodeType":null,"endLine":2,"endColumn":47,"fix":"2185"},{"ruleId":"1266","severity":2,"message":"2186","line":3,"column":31,"nodeType":null,"endLine":3,"endColumn":54,"fix":"2187"},{"ruleId":"1266","severity":2,"message":"1277","line":34,"column":15,"nodeType":null,"endLine":34,"endColumn":16,"fix":"2188"},{"ruleId":"1266","severity":2,"message":"1277","line":41,"column":8,"nodeType":null,"endLine":41,"endColumn":9,"fix":"2189"},{"ruleId":"1266","severity":2,"message":"2190","line":47,"column":25,"nodeType":null,"endLine":47,"endColumn":78,"fix":"2191"},{"ruleId":"1266","severity":2,"message":"1277","line":50,"column":15,"nodeType":null,"endLine":50,"endColumn":16,"fix":"2192"},{"ruleId":"1266","severity":2,"message":"1413","line":67,"column":43,"nodeType":null,"endLine":67,"endColumn":44,"fix":"2193"},{"ruleId":"1266","severity":2,"message":"2194","line":76,"column":13,"nodeType":null,"endLine":76,"endColumn":13,"fix":"2195"},{"ruleId":"1266","severity":2,"message":"1315","line":77,"column":11,"nodeType":null,"endLine":77,"endColumn":11,"fix":"2196"},{"ruleId":"1266","severity":2,"message":"2197","line":78,"column":1,"nodeType":null,"endLine":78,"endColumn":11,"fix":"2198"},{"ruleId":"1266","severity":2,"message":"1277","line":88,"column":40,"nodeType":null,"endLine":88,"endColumn":41,"fix":"2199"},{"ruleId":"1266","severity":2,"message":"1277","line":89,"column":8,"nodeType":null,"endLine":89,"endColumn":9,"fix":"2200"},{"ruleId":"1266","severity":2,"message":"1277","line":107,"column":34,"nodeType":null,"endLine":107,"endColumn":35,"fix":"2201"},{"ruleId":"1266","severity":2,"message":"1277","line":108,"column":8,"nodeType":null,"endLine":108,"endColumn":9,"fix":"2202"},{"ruleId":"1266","severity":2,"message":"1277","line":120,"column":34,"nodeType":null,"endLine":120,"endColumn":35,"fix":"2203"},{"ruleId":"1266","severity":2,"message":"1277","line":139,"column":47,"nodeType":null,"endLine":139,"endColumn":48,"fix":"2204"},{"ruleId":"1266","severity":2,"message":"1277","line":140,"column":8,"nodeType":null,"endLine":140,"endColumn":9,"fix":"2205"},{"ruleId":"1266","severity":2,"message":"1277","line":152,"column":47,"nodeType":null,"endLine":152,"endColumn":48,"fix":"2206"},{"ruleId":"1266","severity":2,"message":"1277","line":160,"column":40,"nodeType":null,"endLine":160,"endColumn":41,"fix":"2207"},{"ruleId":"1266","severity":2,"message":"1277","line":161,"column":8,"nodeType":null,"endLine":161,"endColumn":9,"fix":"2208"},{"ruleId":"1266","severity":2,"message":"1277","line":179,"column":42,"nodeType":null,"endLine":179,"endColumn":43,"fix":"2209"},{"ruleId":"1266","severity":2,"message":"1277","line":180,"column":8,"nodeType":null,"endLine":180,"endColumn":9,"fix":"2210"},{"ruleId":"1266","severity":2,"message":"1277","line":192,"column":42,"nodeType":null,"endLine":192,"endColumn":43,"fix":"2211"},{"ruleId":"1266","severity":2,"message":"2212","line":197,"column":45,"nodeType":null,"endLine":197,"endColumn":91,"fix":"2213"},{"ruleId":"1266","severity":2,"message":"2214","line":198,"column":43,"nodeType":null,"endLine":198,"endColumn":87,"fix":"2215"},{"ruleId":"1266","severity":2,"message":"2216","line":201,"column":34,"nodeType":null,"endLine":201,"endColumn":55,"fix":"2217"},{"ruleId":"1266","severity":2,"message":"2216","line":205,"column":31,"nodeType":null,"endLine":205,"endColumn":52,"fix":"2218"},{"ruleId":"1266","severity":2,"message":"1413","line":229,"column":60,"nodeType":null,"endLine":229,"endColumn":61,"fix":"2219"},{"ruleId":"1266","severity":2,"message":"2220","line":230,"column":40,"nodeType":null,"endLine":230,"endColumn":103,"fix":"2221"},{"ruleId":"1266","severity":2,"message":"2222","line":232,"column":36,"nodeType":null,"endLine":232,"endColumn":99,"fix":"2223"},{"ruleId":"1266","severity":2,"message":"2224","line":233,"column":1,"nodeType":null,"endLine":233,"endColumn":111,"fix":"2225"},{"ruleId":"1266","severity":2,"message":"2226","line":240,"column":57,"nodeType":null,"endLine":240,"endColumn":119,"fix":"2227"},{"ruleId":"1266","severity":2,"message":"2228","line":241,"column":37,"nodeType":null,"endLine":241,"endColumn":68,"fix":"2229"},{"ruleId":"1266","severity":2,"message":"2230","line":242,"column":31,"nodeType":null,"endLine":242,"endColumn":56,"fix":"2231"},{"ruleId":"1266","severity":2,"message":"2232","line":243,"column":40,"nodeType":null,"endLine":243,"endColumn":74,"fix":"2233"},{"ruleId":"1266","severity":2,"message":"2234","line":244,"column":46,"nodeType":null,"endLine":244,"endColumn":86,"fix":"2235"},{"ruleId":"1266","severity":2,"message":"2236","line":245,"column":43,"nodeType":null,"endLine":245,"endColumn":80,"fix":"2237"},{"ruleId":"1266","severity":2,"message":"2238","line":247,"column":43,"nodeType":null,"endLine":247,"endColumn":73,"fix":"2239"},{"ruleId":"1266","severity":2,"message":"2240","line":249,"column":29,"nodeType":null,"endLine":249,"endColumn":52,"fix":"2241"},{"ruleId":"1266","severity":2,"message":"2242","line":250,"column":31,"nodeType":null,"endLine":250,"endColumn":56,"fix":"2243"},{"ruleId":"1266","severity":2,"message":"2244","line":252,"column":37,"nodeType":null,"endLine":252,"endColumn":68,"fix":"2245"},{"ruleId":"1266","severity":2,"message":"2246","line":253,"column":48,"nodeType":null,"endLine":253,"endColumn":99,"fix":"2247"},{"ruleId":"1266","severity":2,"message":"2248","line":265,"column":20,"nodeType":null,"endLine":265,"endColumn":97,"fix":"2249"},{"ruleId":"1266","severity":2,"message":"2248","line":271,"column":20,"nodeType":null,"endLine":271,"endColumn":97,"fix":"2250"},{"ruleId":"1266","severity":2,"message":"2248","line":277,"column":20,"nodeType":null,"endLine":277,"endColumn":97,"fix":"2251"},{"ruleId":"1266","severity":2,"message":"2252","line":293,"column":20,"nodeType":null,"endLine":293,"endColumn":93,"fix":"2253"},{"ruleId":"1266","severity":2,"message":"2254","line":310,"column":20,"nodeType":null,"endLine":310,"endColumn":97,"fix":"2255"},{"ruleId":"1266","severity":2,"message":"2256","line":315,"column":52,"nodeType":null,"endLine":315,"endColumn":62,"fix":"2257"},{"ruleId":"1266","severity":2,"message":"2252","line":321,"column":20,"nodeType":null,"endLine":321,"endColumn":93,"fix":"2258"},{"ruleId":"1266","severity":2,"message":"2259","line":334,"column":20,"nodeType":null,"endLine":334,"endColumn":94,"fix":"2260"},{"ruleId":"1266","severity":2,"message":"2259","line":341,"column":20,"nodeType":null,"endLine":341,"endColumn":94,"fix":"2261"},{"ruleId":"1266","severity":2,"message":"2259","line":348,"column":20,"nodeType":null,"endLine":348,"endColumn":94,"fix":"2262"},{"ruleId":"1266","severity":2,"message":"1277","line":362,"column":54,"nodeType":null,"endLine":362,"endColumn":55,"fix":"2263"},{"ruleId":"1266","severity":2,"message":"1277","line":369,"column":54,"nodeType":null,"endLine":369,"endColumn":55,"fix":"2264"},{"ruleId":"1266","severity":2,"message":"2265","line":376,"column":20,"nodeType":null,"endLine":376,"endColumn":20,"fix":"2266"},{"ruleId":"1266","severity":2,"message":"2267","line":381,"column":37,"nodeType":null,"endLine":381,"endColumn":93,"fix":"2268"},{"ruleId":"1266","severity":2,"message":"2267","line":385,"column":39,"nodeType":null,"endLine":385,"endColumn":95,"fix":"2269"},{"ruleId":"1266","severity":2,"message":"2270","line":398,"column":20,"nodeType":null,"endLine":398,"endColumn":30,"fix":"2271"},{"ruleId":"1266","severity":2,"message":"2270","line":404,"column":20,"nodeType":null,"endLine":404,"endColumn":30,"fix":"2272"},{"ruleId":"1266","severity":2,"message":"1277","line":411,"column":34,"nodeType":null,"endLine":411,"endColumn":35,"fix":"2273"},{"ruleId":"1266","severity":2,"message":"1277","line":419,"column":38,"nodeType":null,"endLine":419,"endColumn":39,"fix":"2274"},{"ruleId":"1266","severity":2,"message":"1277","line":420,"column":8,"nodeType":null,"endLine":420,"endColumn":9,"fix":"2275"},{"ruleId":"1266","severity":2,"message":"2276","line":424,"column":38,"nodeType":null,"endLine":424,"endColumn":100,"fix":"2277"},{"ruleId":"1266","severity":2,"message":"1277","line":429,"column":44,"nodeType":null,"endLine":429,"endColumn":45,"fix":"2278"},{"ruleId":"1266","severity":2,"message":"1277","line":430,"column":8,"nodeType":null,"endLine":430,"endColumn":9,"fix":"2279"},{"ruleId":"1266","severity":2,"message":"1277","line":438,"column":17,"nodeType":null,"endLine":438,"endColumn":18,"fix":"2280"},{"ruleId":"1266","severity":2,"message":"1277","line":439,"column":8,"nodeType":null,"endLine":439,"endColumn":9,"fix":"2281"},{"ruleId":"1266","severity":2,"message":"1277","line":447,"column":17,"nodeType":null,"endLine":447,"endColumn":18,"fix":"2282"},{"ruleId":"1266","severity":2,"message":"1277","line":448,"column":8,"nodeType":null,"endLine":448,"endColumn":9,"fix":"2283"},{"ruleId":"1266","severity":2,"message":"2284","line":452,"column":34,"nodeType":null,"endLine":452,"endColumn":80,"fix":"2285"},{"ruleId":"1266","severity":2,"message":"1277","line":457,"column":21,"nodeType":null,"endLine":457,"endColumn":22,"fix":"2286"},{"ruleId":"1266","severity":2,"message":"1277","line":458,"column":8,"nodeType":null,"endLine":458,"endColumn":9,"fix":"2287"},{"ruleId":"1266","severity":2,"message":"1277","line":466,"column":34,"nodeType":null,"endLine":466,"endColumn":35,"fix":"2288"},{"ruleId":"1266","severity":2,"message":"1277","line":474,"column":34,"nodeType":null,"endLine":474,"endColumn":35,"fix":"2289"},{"ruleId":"1266","severity":2,"message":"1277","line":482,"column":34,"nodeType":null,"endLine":482,"endColumn":35,"fix":"2290"},{"ruleId":"1266","severity":2,"message":"1277","line":489,"column":34,"nodeType":null,"endLine":489,"endColumn":35,"fix":"2291"},{"ruleId":"1266","severity":2,"message":"1277","line":496,"column":34,"nodeType":null,"endLine":496,"endColumn":35,"fix":"2292"},{"ruleId":"1266","severity":2,"message":"1277","line":503,"column":34,"nodeType":null,"endLine":503,"endColumn":35,"fix":"2293"},{"ruleId":"1266","severity":2,"message":"2294","line":510,"column":19,"nodeType":null,"endLine":510,"endColumn":35,"fix":"2295"},{"ruleId":"1266","severity":2,"message":"2296","line":514,"column":42,"nodeType":null,"endLine":514,"endColumn":98,"fix":"2297"},{"ruleId":"1266","severity":2,"message":"2298","line":517,"column":19,"nodeType":null,"endLine":517,"endColumn":49,"fix":"2299"},{"ruleId":"1266","severity":2,"message":"1277","line":518,"column":34,"nodeType":null,"endLine":518,"endColumn":35,"fix":"2300"},{"ruleId":"1266","severity":2,"message":"1279","line":71,"column":47,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1514","line":5,"column":33,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2301"},{"ruleId":"1266","severity":2,"message":"2302","line":19,"column":57,"nodeType":null,"endLine":19,"endColumn":85,"fix":"2303"},{"ruleId":"1266","severity":2,"message":"1277","line":27,"column":10,"nodeType":null,"endLine":27,"endColumn":11,"fix":"2304"},{"ruleId":"1266","severity":2,"message":"2305","line":65,"column":11,"nodeType":null,"endLine":65,"endColumn":51,"fix":"2306"},{"ruleId":"1266","severity":2,"message":"2307","line":16,"column":31,"nodeType":null,"endLine":16,"endColumn":62,"fix":"2308"},{"ruleId":"1266","severity":2,"message":"2309","line":22,"column":25,"nodeType":null,"endLine":22,"endColumn":123,"fix":"2310"},{"ruleId":"1266","severity":2,"message":"1660","line":26,"column":23,"nodeType":null,"endLine":26,"endColumn":31,"fix":"2311"},{"ruleId":"1266","severity":2,"message":"2312","line":34,"column":32,"nodeType":null,"endLine":34,"endColumn":57,"fix":"2313"},{"ruleId":"1266","severity":2,"message":"1660","line":39,"column":23,"nodeType":null,"endLine":39,"endColumn":31,"fix":"2314"},{"ruleId":"1266","severity":2,"message":"2315","line":43,"column":13,"nodeType":null,"endLine":43,"endColumn":52,"fix":"2316"},{"ruleId":"1266","severity":2,"message":"1287","line":50,"column":21,"nodeType":null,"endLine":50,"endColumn":29,"fix":"2317"},{"ruleId":"1266","severity":2,"message":"2318","line":52,"column":29,"nodeType":null,"endLine":52,"endColumn":36,"fix":"2319"},{"ruleId":"1266","severity":2,"message":"1287","line":62,"column":21,"nodeType":null,"endLine":62,"endColumn":29,"fix":"2320"},{"ruleId":"1266","severity":2,"message":"2321","line":10,"column":17,"nodeType":null,"endLine":10,"endColumn":18,"fix":"2322"},{"ruleId":"1266","severity":2,"message":"2323","line":15,"column":19,"nodeType":null,"endLine":16,"endColumn":35,"fix":"2324"},{"ruleId":"1266","severity":2,"message":"2325","line":5,"column":3,"nodeType":null,"endLine":7,"endColumn":17,"fix":"2326"},{"ruleId":"1266","severity":2,"message":"2327","line":8,"column":3,"nodeType":null,"endLine":8,"endColumn":15,"fix":"2328"},{"ruleId":"1266","severity":2,"message":"2329","line":9,"column":3,"nodeType":null,"endLine":16,"endColumn":10,"fix":"2330"},{"ruleId":"1266","severity":2,"message":"2331","line":17,"column":2,"nodeType":null,"endLine":17,"endColumn":16,"fix":"2332"},{"ruleId":"1266","severity":2,"message":"2333","line":18,"column":2,"nodeType":null,"endLine":23,"endColumn":20,"fix":"2334"},{"ruleId":"1266","severity":2,"message":"2335","line":24,"column":3,"nodeType":null,"endLine":26,"endColumn":2,"fix":"2336"},{"ruleId":"1266","severity":2,"message":"2265","line":31,"column":19,"nodeType":null,"endLine":31,"endColumn":19,"fix":"2337"},{"ruleId":"1266","severity":2,"message":"2265","line":32,"column":21,"nodeType":null,"endLine":32,"endColumn":21,"fix":"2338"},{"ruleId":"1266","severity":2,"message":"2265","line":33,"column":25,"nodeType":null,"endLine":33,"endColumn":25,"fix":"2339"},{"ruleId":"1266","severity":2,"message":"2265","line":34,"column":23,"nodeType":null,"endLine":34,"endColumn":23,"fix":"2340"},{"ruleId":"1266","severity":2,"message":"2265","line":35,"column":25,"nodeType":null,"endLine":35,"endColumn":25,"fix":"2341"},{"ruleId":"1266","severity":2,"message":"2265","line":36,"column":24,"nodeType":null,"endLine":36,"endColumn":24,"fix":"2342"},{"ruleId":"1266","severity":2,"message":"2265","line":37,"column":19,"nodeType":null,"endLine":37,"endColumn":19,"fix":"2343"},{"ruleId":"1266","severity":2,"message":"2265","line":38,"column":24,"nodeType":null,"endLine":38,"endColumn":24,"fix":"2344"},{"ruleId":"1266","severity":2,"message":"2265","line":39,"column":25,"nodeType":null,"endLine":39,"endColumn":25,"fix":"2345"},{"ruleId":"1266","severity":2,"message":"2265","line":40,"column":22,"nodeType":null,"endLine":40,"endColumn":22,"fix":"2346"},{"ruleId":"1266","severity":2,"message":"2265","line":41,"column":25,"nodeType":null,"endLine":41,"endColumn":25,"fix":"2347"},{"ruleId":"1266","severity":2,"message":"2265","line":42,"column":18,"nodeType":null,"endLine":42,"endColumn":18,"fix":"2348"},{"ruleId":"1266","severity":2,"message":"2265","line":43,"column":24,"nodeType":null,"endLine":43,"endColumn":24,"fix":"2349"},{"ruleId":"1266","severity":2,"message":"2265","line":44,"column":22,"nodeType":null,"endLine":44,"endColumn":22,"fix":"2350"},{"ruleId":"1266","severity":2,"message":"2265","line":45,"column":24,"nodeType":null,"endLine":45,"endColumn":24,"fix":"2351"},{"ruleId":"1266","severity":2,"message":"2265","line":46,"column":21,"nodeType":null,"endLine":46,"endColumn":21,"fix":"2352"},{"ruleId":"1266","severity":2,"message":"2265","line":47,"column":27,"nodeType":null,"endLine":47,"endColumn":27,"fix":"2353"},{"ruleId":"1266","severity":2,"message":"2265","line":48,"column":24,"nodeType":null,"endLine":48,"endColumn":24,"fix":"2354"},{"ruleId":"1266","severity":2,"message":"2265","line":49,"column":28,"nodeType":null,"endLine":49,"endColumn":28,"fix":"2355"},{"ruleId":"1266","severity":2,"message":"2265","line":50,"column":22,"nodeType":null,"endLine":50,"endColumn":22,"fix":"2356"},{"ruleId":"1266","severity":2,"message":"2265","line":51,"column":24,"nodeType":null,"endLine":51,"endColumn":24,"fix":"2357"},{"ruleId":"1266","severity":2,"message":"2265","line":52,"column":22,"nodeType":null,"endLine":52,"endColumn":22,"fix":"2358"},{"ruleId":"1266","severity":2,"message":"2359","line":56,"column":35,"nodeType":null,"endLine":56,"endColumn":89,"fix":"2360"},{"ruleId":"1266","severity":2,"message":"2361","line":58,"column":37,"nodeType":null,"endLine":58,"endColumn":94,"fix":"2362"},{"ruleId":"1266","severity":2,"message":"2363","line":59,"column":40,"nodeType":null,"endLine":59,"endColumn":104,"fix":"2364"},{"ruleId":"1266","severity":2,"message":"2365","line":60,"column":42,"nodeType":null,"endLine":60,"endColumn":110,"fix":"2366"},{"ruleId":"1266","severity":2,"message":"2367","line":61,"column":39,"nodeType":null,"endLine":61,"endColumn":101,"fix":"2368"},{"ruleId":"1266","severity":2,"message":"2369","line":62,"column":37,"nodeType":null,"endLine":62,"endColumn":95,"fix":"2370"},{"ruleId":"1266","severity":2,"message":"2371","line":63,"column":38,"nodeType":null,"endLine":63,"endColumn":98,"fix":"2372"},{"ruleId":"1266","severity":2,"message":"2373","line":64,"column":42,"nodeType":null,"endLine":64,"endColumn":110,"fix":"2374"},{"ruleId":"1266","severity":2,"message":"2375","line":65,"column":39,"nodeType":null,"endLine":65,"endColumn":100,"fix":"2376"},{"ruleId":"1266","severity":2,"message":"2377","line":66,"column":39,"nodeType":null,"endLine":66,"endColumn":100,"fix":"2378"},{"ruleId":"1266","severity":2,"message":"2379","line":81,"column":37,"nodeType":null,"endLine":81,"endColumn":60,"fix":"2380"},{"ruleId":"1266","severity":2,"message":"2381","line":82,"column":40,"nodeType":null,"endLine":82,"endColumn":67,"fix":"2382"},{"ruleId":"1266","severity":2,"message":"2383","line":83,"column":42,"nodeType":null,"endLine":83,"endColumn":78,"fix":"2384"},{"ruleId":"1266","severity":2,"message":"2385","line":84,"column":39,"nodeType":null,"endLine":84,"endColumn":72,"fix":"2386"},{"ruleId":"1266","severity":2,"message":"2387","line":85,"column":37,"nodeType":null,"endLine":85,"endColumn":65,"fix":"2388"},{"ruleId":"1266","severity":2,"message":"2389","line":86,"column":38,"nodeType":null,"endLine":86,"endColumn":70,"fix":"2390"},{"ruleId":"1266","severity":2,"message":"2391","line":87,"column":39,"nodeType":null,"endLine":87,"endColumn":68,"fix":"2392"},{"ruleId":"1266","severity":2,"message":"2393","line":88,"column":42,"nodeType":null,"endLine":88,"endColumn":75,"fix":"2394"},{"ruleId":"1266","severity":2,"message":"2395","line":89,"column":39,"nodeType":null,"endLine":89,"endColumn":68,"fix":"2396"},{"ruleId":"1266","severity":2,"message":"2265","line":90,"column":15,"nodeType":null,"endLine":90,"endColumn":15,"fix":"2397"},{"ruleId":"1266","severity":2,"message":"2398","line":94,"column":9,"nodeType":null,"endLine":94,"endColumn":98,"fix":"2399"},{"ruleId":"1266","severity":2,"message":"2400","line":99,"column":32,"nodeType":null,"endLine":99,"endColumn":38,"fix":"2401"},{"ruleId":"1266","severity":2,"message":"2402","line":134,"column":20,"nodeType":null,"endLine":134,"endColumn":37,"fix":"2403"},{"ruleId":"1266","severity":2,"message":"1277","line":148,"column":59,"nodeType":null,"endLine":148,"endColumn":60,"fix":"2404"},{"ruleId":"1266","severity":2,"message":"2405","line":153,"column":19,"nodeType":null,"endLine":153,"endColumn":70,"fix":"2406"},{"ruleId":"1266","severity":2,"message":"1277","line":178,"column":59,"nodeType":null,"endLine":178,"endColumn":60,"fix":"2407"},{"ruleId":"1266","severity":2,"message":"2405","line":183,"column":19,"nodeType":null,"endLine":183,"endColumn":70,"fix":"2408"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2410"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2411"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2412"},{"ruleId":"1266","severity":2,"message":"2413","line":13,"column":31,"nodeType":null,"endLine":13,"endColumn":88,"fix":"2414"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2415"},{"ruleId":"1266","severity":2,"message":"2409","line":3,"column":9,"nodeType":null,"endLine":7,"endColumn":1,"fix":"2416"},{"ruleId":"1266","severity":2,"message":"1277","line":22,"column":60,"nodeType":null,"endLine":22,"endColumn":61,"fix":"2417"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2418"},{"ruleId":"1266","severity":2,"message":"2419","line":8,"column":65,"nodeType":null,"endLine":8,"endColumn":65,"fix":"2420"},{"ruleId":"1266","severity":2,"message":"1277","line":18,"column":59,"nodeType":null,"endLine":18,"endColumn":60,"fix":"2421"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2422"},{"ruleId":"1266","severity":2,"message":"2419","line":8,"column":69,"nodeType":null,"endLine":8,"endColumn":69,"fix":"2423"},{"ruleId":"1266","severity":2,"message":"2409","line":3,"column":9,"nodeType":null,"endLine":7,"endColumn":1,"fix":"2424"},{"ruleId":"1266","severity":2,"message":"1277","line":21,"column":60,"nodeType":null,"endLine":21,"endColumn":61,"fix":"2425"},{"ruleId":"1266","severity":2,"message":"2409","line":4,"column":9,"nodeType":null,"endLine":8,"endColumn":1,"fix":"2426"},{"ruleId":"1266","severity":2,"message":"2427","line":10,"column":46,"nodeType":null,"endLine":10,"endColumn":87,"fix":"2428"},{"ruleId":"1266","severity":2,"message":"1277","line":17,"column":60,"nodeType":null,"endLine":17,"endColumn":61,"fix":"2429"},{"ruleId":"1266","severity":2,"message":"2430","line":1,"column":9,"nodeType":null,"endLine":3,"endColumn":1,"fix":"2431"},{"ruleId":"1266","severity":2,"message":"2432","line":4,"column":9,"nodeType":null,"endLine":4,"endColumn":69,"fix":"2433"},{"ruleId":"1266","severity":2,"message":"2434","line":17,"column":17,"nodeType":null,"endLine":17,"endColumn":17,"fix":"2435"},{"ruleId":"1266","severity":2,"message":"2434","line":18,"column":19,"nodeType":null,"endLine":18,"endColumn":19,"fix":"2436"},{"ruleId":"1266","severity":2,"message":"2434","line":19,"column":23,"nodeType":null,"endLine":19,"endColumn":23,"fix":"2437"},{"ruleId":"1266","severity":2,"message":"2434","line":20,"column":21,"nodeType":null,"endLine":20,"endColumn":21,"fix":"2438"},{"ruleId":"1266","severity":2,"message":"2434","line":21,"column":23,"nodeType":null,"endLine":21,"endColumn":23,"fix":"2439"},{"ruleId":"1266","severity":2,"message":"2434","line":22,"column":22,"nodeType":null,"endLine":22,"endColumn":22,"fix":"2440"},{"ruleId":"1266","severity":2,"message":"2434","line":23,"column":17,"nodeType":null,"endLine":23,"endColumn":17,"fix":"2441"},{"ruleId":"1266","severity":2,"message":"2434","line":24,"column":22,"nodeType":null,"endLine":24,"endColumn":22,"fix":"2442"},{"ruleId":"1266","severity":2,"message":"2434","line":25,"column":23,"nodeType":null,"endLine":25,"endColumn":23,"fix":"2443"},{"ruleId":"1266","severity":2,"message":"2434","line":26,"column":20,"nodeType":null,"endLine":26,"endColumn":20,"fix":"2444"},{"ruleId":"1266","severity":2,"message":"2445","line":30,"column":1,"nodeType":null,"endLine":30,"endColumn":9,"fix":"2446"},{"ruleId":"1266","severity":2,"message":"1309","line":31,"column":1,"nodeType":null,"endLine":31,"endColumn":3,"fix":"2447"},{"ruleId":"1266","severity":2,"message":"1309","line":32,"column":7,"nodeType":null,"endLine":32,"endColumn":9,"fix":"2448"},{"ruleId":"1266","severity":2,"message":"1478","line":33,"column":1,"nodeType":null,"endLine":33,"endColumn":11,"fix":"2449"},{"ruleId":"1266","severity":2,"message":"1309","line":34,"column":1,"nodeType":null,"endLine":34,"endColumn":3,"fix":"2450"},{"ruleId":"1266","severity":2,"message":"1309","line":35,"column":9,"nodeType":null,"endLine":35,"endColumn":11,"fix":"2451"},{"ruleId":"1266","severity":2,"message":"1478","line":36,"column":1,"nodeType":null,"endLine":36,"endColumn":11,"fix":"2452"},{"ruleId":"1266","severity":2,"message":"1309","line":37,"column":7,"nodeType":null,"endLine":37,"endColumn":9,"fix":"2453"},{"ruleId":"1266","severity":2,"message":"1309","line":38,"column":1,"nodeType":null,"endLine":38,"endColumn":3,"fix":"2454"},{"ruleId":"1266","severity":2,"message":"1277","line":8,"column":20,"nodeType":null,"endLine":8,"endColumn":21,"fix":"2455"},{"ruleId":"1266","severity":2,"message":"2456","line":10,"column":9,"nodeType":null,"endLine":10,"endColumn":104,"fix":"2457"},{"ruleId":"1266","severity":2,"message":"2458","line":11,"column":9,"nodeType":null,"endLine":11,"endColumn":53,"fix":"2459"},{"ruleId":"1266","severity":2,"message":"2460","line":12,"column":9,"nodeType":null,"endLine":12,"endColumn":57,"fix":"2461"},{"ruleId":"1266","severity":2,"message":"2462","line":13,"column":9,"nodeType":null,"endLine":13,"endColumn":55,"fix":"2463"},{"ruleId":"1266","severity":2,"message":"2464","line":15,"column":9,"nodeType":null,"endLine":15,"endColumn":57,"fix":"2465"},{"ruleId":"1266","severity":2,"message":"2466","line":17,"column":9,"nodeType":null,"endLine":17,"endColumn":57,"fix":"2467"},{"ruleId":"1266","severity":2,"message":"2468","line":19,"column":9,"nodeType":null,"endLine":19,"endColumn":71,"fix":"2469"},{"ruleId":"1266","severity":2,"message":"2470","line":21,"column":9,"nodeType":null,"endLine":24,"endColumn":1,"fix":"2471"},{"ruleId":"1266","severity":2,"message":"2472","line":52,"column":39,"nodeType":null,"endLine":52,"endColumn":61,"fix":"2473"},{"ruleId":"1266","severity":2,"message":"2474","line":53,"column":31,"nodeType":null,"endLine":53,"endColumn":122,"fix":"2475"},{"ruleId":"1266","severity":2,"message":"1277","line":57,"column":27,"nodeType":null,"endLine":57,"endColumn":28,"fix":"2476"},{"ruleId":"1266","severity":2,"message":"1277","line":67,"column":39,"nodeType":null,"endLine":67,"endColumn":40,"fix":"2477"},{"ruleId":"1266","severity":2,"message":"2478","line":71,"column":39,"nodeType":null,"endLine":71,"endColumn":61,"fix":"2479"},{"ruleId":"1266","severity":2,"message":"2480","line":73,"column":36,"nodeType":null,"endLine":76,"endColumn":9,"fix":"2481"},{"ruleId":"1266","severity":2,"message":"1413","line":78,"column":27,"nodeType":null,"endLine":78,"endColumn":28,"fix":"2482"},{"ruleId":"1266","severity":2,"message":"1413","line":79,"column":27,"nodeType":null,"endLine":79,"endColumn":28,"fix":"2483"},{"ruleId":"1266","severity":2,"message":"2484","line":97,"column":62,"nodeType":null,"endLine":97,"endColumn":107,"fix":"2485"},{"ruleId":"1266","severity":2,"message":"1315","line":98,"column":1,"nodeType":null,"endLine":98,"endColumn":1,"fix":"2486"},{"ruleId":"1266","severity":2,"message":"2197","line":99,"column":1,"nodeType":null,"endLine":99,"endColumn":11,"fix":"2487"},{"ruleId":"1266","severity":2,"message":"2478","line":102,"column":39,"nodeType":null,"endLine":102,"endColumn":61,"fix":"2488"},{"ruleId":"1266","severity":2,"message":"2489","line":104,"column":36,"nodeType":null,"endLine":106,"endColumn":9,"fix":"2490"},{"ruleId":"1266","severity":2,"message":"2491","line":107,"column":34,"nodeType":null,"endLine":109,"endColumn":9,"fix":"2492"},{"ruleId":"1266","severity":2,"message":"2493","line":112,"column":39,"nodeType":null,"endLine":112,"endColumn":61,"fix":"2494"},{"ruleId":"1266","severity":2,"message":"2495","line":114,"column":36,"nodeType":null,"endLine":116,"endColumn":9,"fix":"2496"},{"ruleId":"1266","severity":2,"message":"2491","line":117,"column":34,"nodeType":null,"endLine":119,"endColumn":9,"fix":"2497"},{"ruleId":"1266","severity":2,"message":"2498","line":122,"column":39,"nodeType":null,"endLine":122,"endColumn":62,"fix":"2499"},{"ruleId":"1266","severity":2,"message":"2500","line":123,"column":31,"nodeType":null,"endLine":123,"endColumn":92,"fix":"2501"},{"ruleId":"1266","severity":2,"message":"2502","line":124,"column":36,"nodeType":null,"endLine":126,"endColumn":9,"fix":"2503"},{"ruleId":"1266","severity":2,"message":"1277","line":131,"column":42,"nodeType":null,"endLine":131,"endColumn":43,"fix":"2504"},{"ruleId":"1266","severity":2,"message":"2491","line":137,"column":34,"nodeType":null,"endLine":139,"endColumn":9,"fix":"2505"},{"ruleId":"1266","severity":2,"message":"2506","line":142,"column":40,"nodeType":null,"endLine":142,"endColumn":87,"fix":"2507"},{"ruleId":"1266","severity":2,"message":"2508","line":144,"column":7,"nodeType":null,"endLine":145,"endColumn":6,"fix":"2509"},{"ruleId":"1266","severity":2,"message":"1712","line":188,"column":27,"nodeType":null,"endLine":188,"endColumn":38,"fix":"2510"},{"ruleId":"1266","severity":2,"message":"1277","line":203,"column":25,"nodeType":null,"endLine":203,"endColumn":26,"fix":"2511"},{"ruleId":"1266","severity":2,"message":"2512","line":205,"column":43,"nodeType":null,"endLine":205,"endColumn":56,"fix":"2513"},{"ruleId":"1266","severity":2,"message":"2514","line":216,"column":17,"nodeType":null,"endLine":216,"endColumn":96,"fix":"2515"},{"ruleId":"1266","severity":2,"message":"2516","line":222,"column":26,"nodeType":null,"endLine":222,"endColumn":38,"fix":"2517"},{"ruleId":"1266","severity":2,"message":"2518","line":226,"column":28,"nodeType":null,"endLine":226,"endColumn":83,"fix":"2519"},{"ruleId":"1266","severity":2,"message":"2520","line":230,"column":25,"nodeType":null,"endLine":230,"endColumn":65,"fix":"2521"},{"ruleId":"1266","severity":2,"message":"2522","line":231,"column":25,"nodeType":null,"endLine":231,"endColumn":70,"fix":"2523"},{"ruleId":"1266","severity":2,"message":"2524","line":232,"column":25,"nodeType":null,"endLine":232,"endColumn":72,"fix":"2525"},{"ruleId":"1266","severity":2,"message":"2526","line":233,"column":26,"nodeType":null,"endLine":233,"endColumn":69,"fix":"2527"},{"ruleId":"1266","severity":2,"message":"2528","line":234,"column":23,"nodeType":null,"endLine":234,"endColumn":65,"fix":"2529"},{"ruleId":"1266","severity":2,"message":"2530","line":246,"column":26,"nodeType":null,"endLine":246,"endColumn":98,"fix":"2531"},{"ruleId":"1266","severity":2,"message":"2532","line":250,"column":32,"nodeType":null,"endLine":250,"endColumn":106,"fix":"2533"},{"ruleId":"1266","severity":2,"message":"2534","line":254,"column":29,"nodeType":null,"endLine":254,"endColumn":107,"fix":"2535"},{"ruleId":"1266","severity":2,"message":"1712","line":263,"column":27,"nodeType":null,"endLine":263,"endColumn":38,"fix":"2536"},{"ruleId":"1266","severity":2,"message":"2537","line":266,"column":36,"nodeType":null,"endLine":266,"endColumn":36,"fix":"2538"},{"ruleId":"1266","severity":2,"message":"2539","line":270,"column":32,"nodeType":null,"endLine":270,"endColumn":79,"fix":"2540"},{"ruleId":"1266","severity":2,"message":"2541","line":278,"column":31,"nodeType":null,"endLine":278,"endColumn":80,"fix":"2542"},{"ruleId":"1266","severity":2,"message":"2543","line":282,"column":29,"nodeType":null,"endLine":282,"endColumn":82,"fix":"2544"},{"ruleId":"1266","severity":2,"message":"2545","line":294,"column":34,"nodeType":null,"endLine":294,"endColumn":79,"fix":"2546"},{"ruleId":"1266","severity":2,"message":"2547","line":302,"column":35,"nodeType":null,"endLine":302,"endColumn":82,"fix":"2548"},{"ruleId":"1266","severity":2,"message":"1712","line":323,"column":27,"nodeType":null,"endLine":323,"endColumn":38,"fix":"2549"},{"ruleId":"1266","severity":2,"message":"2530","line":327,"column":26,"nodeType":null,"endLine":327,"endColumn":98,"fix":"2550"},{"ruleId":"1266","severity":2,"message":"2551","line":331,"column":32,"nodeType":null,"endLine":331,"endColumn":114,"fix":"2552"},{"ruleId":"1266","severity":2,"message":"2553","line":335,"column":32,"nodeType":null,"endLine":335,"endColumn":128,"fix":"2554"},{"ruleId":"1266","severity":2,"message":"1277","line":4,"column":7,"nodeType":null,"endLine":4,"endColumn":8,"fix":"2555"},{"ruleId":"1266","severity":2,"message":"1277","line":12,"column":15,"nodeType":null,"endLine":12,"endColumn":16,"fix":"2556"},{"ruleId":"1266","severity":2,"message":"1277","line":19,"column":63,"nodeType":null,"endLine":19,"endColumn":64,"fix":"2557"},{"ruleId":"1266","severity":2,"message":"1277","line":20,"column":6,"nodeType":null,"endLine":20,"endColumn":7,"fix":"2558"},{"ruleId":"1266","severity":2,"message":"1277","line":33,"column":27,"nodeType":null,"endLine":33,"endColumn":28,"fix":"2559"},{"ruleId":"1266","severity":2,"message":"1277","line":54,"column":67,"nodeType":null,"endLine":54,"endColumn":68,"fix":"2560"},{"ruleId":"1266","severity":2,"message":"2561","line":68,"column":11,"nodeType":null,"endLine":68,"endColumn":25,"fix":"2562"},{"ruleId":"1266","severity":2,"message":"1277","line":82,"column":78,"nodeType":null,"endLine":82,"endColumn":79,"fix":"2563"},{"ruleId":"1266","severity":2,"message":"2564","line":104,"column":11,"nodeType":null,"endLine":104,"endColumn":19,"fix":"2565"},{"ruleId":"1266","severity":2,"message":"2566","line":112,"column":11,"nodeType":null,"endLine":112,"endColumn":21,"fix":"2567"},{"ruleId":"1266","severity":2,"message":"2568","line":120,"column":43,"nodeType":null,"endLine":120,"endColumn":58,"fix":"2569"},{"ruleId":"1266","severity":2,"message":"1277","line":132,"column":72,"nodeType":null,"endLine":132,"endColumn":73,"fix":"2570"},{"ruleId":"1266","severity":2,"message":"2561","line":139,"column":40,"nodeType":null,"endLine":139,"endColumn":54,"fix":"2571"},{"ruleId":"1266","severity":2,"message":"1279","line":10,"column":24,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2572","line":8,"column":33,"nodeType":null,"endLine":8,"endColumn":78,"fix":"2573"},{"ruleId":"1266","severity":2,"message":"2574","line":9,"column":21,"nodeType":null,"endLine":10,"endColumn":4,"fix":"2575"},{"ruleId":"1266","severity":2,"message":"2576","line":13,"column":22,"nodeType":null,"endLine":13,"endColumn":96,"fix":"2577"},{"ruleId":"1266","severity":2,"message":"1429","line":16,"column":2,"nodeType":null,"endLine":16,"endColumn":2,"fix":"2578"},{"ruleId":"1266","severity":2,"message":"2574","line":19,"column":18,"nodeType":null,"endLine":20,"endColumn":4,"fix":"2579"},{"ruleId":"1266","severity":2,"message":"2580","line":23,"column":22,"nodeType":null,"endLine":23,"endColumn":84,"fix":"2581"},{"ruleId":"1266","severity":2,"message":"1429","line":26,"column":2,"nodeType":null,"endLine":26,"endColumn":2,"fix":"2582"},{"ruleId":"1266","severity":2,"message":"2574","line":29,"column":15,"nodeType":null,"endLine":30,"endColumn":4,"fix":"2583"},{"ruleId":"1266","severity":2,"message":"1429","line":36,"column":2,"nodeType":null,"endLine":36,"endColumn":2,"fix":"2584"},{"ruleId":"1266","severity":2,"message":"2574","line":39,"column":15,"nodeType":null,"endLine":40,"endColumn":4,"fix":"2585"},{"ruleId":"1266","severity":2,"message":"1429","line":46,"column":2,"nodeType":null,"endLine":46,"endColumn":2,"fix":"2586"},{"ruleId":"1266","severity":2,"message":"2587","line":48,"column":29,"nodeType":null,"endLine":48,"endColumn":78,"fix":"2588"},{"ruleId":"1266","severity":2,"message":"2574","line":49,"column":45,"nodeType":null,"endLine":50,"endColumn":4,"fix":"2589"},{"ruleId":"1266","severity":2,"message":"1429","line":52,"column":2,"nodeType":null,"endLine":52,"endColumn":2,"fix":"2590"},{"ruleId":"1266","severity":2,"message":"1429","line":60,"column":2,"nodeType":null,"endLine":60,"endColumn":2,"fix":"2591"},{"ruleId":"1266","severity":2,"message":"1279","line":59,"column":45,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2592","line":1,"column":16,"nodeType":null,"endLine":8,"endColumn":1,"fix":"2593"},{"ruleId":"1266","severity":2,"message":"2594","line":10,"column":19,"nodeType":null,"endLine":10,"endColumn":76,"fix":"2595"},{"ruleId":"1266","severity":2,"message":"2574","line":11,"column":14,"nodeType":null,"endLine":12,"endColumn":4,"fix":"2596"},{"ruleId":"1266","severity":2,"message":"2597","line":13,"column":30,"nodeType":null,"endLine":15,"endColumn":4,"fix":"2598"},{"ruleId":"1266","severity":2,"message":"1429","line":16,"column":2,"nodeType":null,"endLine":16,"endColumn":2,"fix":"2599"},{"ruleId":"1266","severity":2,"message":"2574","line":19,"column":67,"nodeType":null,"endLine":20,"endColumn":4,"fix":"2600"},{"ruleId":"1266","severity":2,"message":"2601","line":23,"column":10,"nodeType":null,"endLine":23,"endColumn":25,"fix":"2602"},{"ruleId":"1266","severity":2,"message":"1429","line":29,"column":2,"nodeType":null,"endLine":29,"endColumn":2,"fix":"2603"},{"ruleId":"1266","severity":2,"message":"1429","line":43,"column":2,"nodeType":null,"endLine":43,"endColumn":2,"fix":"2604"},{"ruleId":"1266","severity":2,"message":"2574","line":46,"column":24,"nodeType":null,"endLine":47,"endColumn":4,"fix":"2605"},{"ruleId":"1266","severity":2,"message":"1429","line":49,"column":2,"nodeType":null,"endLine":49,"endColumn":2,"fix":"2606"},{"ruleId":"1266","severity":2,"message":"2574","line":52,"column":19,"nodeType":null,"endLine":53,"endColumn":4,"fix":"2607"},{"ruleId":"1266","severity":2,"message":"2097","line":59,"column":7,"nodeType":null,"endLine":59,"endColumn":7,"fix":"2608"},{"ruleId":"1266","severity":2,"message":"2609","line":60,"column":1,"nodeType":null,"endLine":60,"endColumn":94,"fix":"2610"},{"ruleId":"1266","severity":2,"message":"1429","line":65,"column":2,"nodeType":null,"endLine":65,"endColumn":2,"fix":"2611"},{"ruleId":"1266","severity":2,"message":"1429","line":70,"column":2,"nodeType":null,"endLine":70,"endColumn":2,"fix":"2612"},{"ruleId":"1266","severity":2,"message":"1429","line":86,"column":2,"nodeType":null,"endLine":86,"endColumn":2,"fix":"2613"},{"ruleId":"1266","severity":2,"message":"1429","line":96,"column":2,"nodeType":null,"endLine":96,"endColumn":2,"fix":"2614"},{"ruleId":"1266","severity":2,"message":"2615","line":1,"column":19,"nodeType":null,"endLine":1,"endColumn":26,"fix":"2616"},{"ruleId":"1266","severity":2,"message":"2617","line":2,"column":33,"nodeType":null,"endLine":2,"endColumn":65,"fix":"2618"},{"ruleId":"1266","severity":2,"message":"1303","line":3,"column":26,"nodeType":null,"endLine":3,"endColumn":61,"fix":"2619"},{"ruleId":"1266","severity":2,"message":"1279","line":29,"column":26,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1279","line":47,"column":27,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2620","line":9,"column":8,"nodeType":null,"endLine":9,"endColumn":18,"fix":"2621"},{"ruleId":"1266","severity":2,"message":"2622","line":11,"column":33,"nodeType":null,"endLine":11,"endColumn":41,"fix":"2623"},{"ruleId":"1266","severity":2,"message":"2624","line":12,"column":34,"nodeType":null,"endLine":12,"endColumn":43,"fix":"2625"},{"ruleId":"1266","severity":2,"message":"2626","line":13,"column":35,"nodeType":null,"endLine":13,"endColumn":56,"fix":"2627"},{"ruleId":"1266","severity":2,"message":"2628","line":14,"column":31,"nodeType":null,"endLine":14,"endColumn":48,"fix":"2629"},{"ruleId":"1266","severity":2,"message":"2630","line":15,"column":25,"nodeType":null,"endLine":15,"endColumn":36,"fix":"2631"},{"ruleId":"1266","severity":2,"message":"1279","line":29,"column":34,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2632","line":1,"column":37,"nodeType":null,"endLine":1,"endColumn":46,"fix":"2633"},{"ruleId":"1266","severity":2,"message":"2634","line":2,"column":41,"nodeType":null,"endLine":2,"endColumn":56,"fix":"2635"},{"ruleId":"1266","severity":2,"message":"2636","line":3,"column":32,"nodeType":null,"endLine":3,"endColumn":46,"fix":"2637"},{"ruleId":"1266","severity":2,"message":"2638","line":4,"column":9,"nodeType":null,"endLine":4,"endColumn":117,"fix":"2639"},{"ruleId":"1266","severity":2,"message":"2640","line":1,"column":39,"nodeType":null,"endLine":1,"endColumn":48,"fix":"2641"},{"ruleId":"1266","severity":2,"message":"2642","line":2,"column":37,"nodeType":null,"endLine":2,"endColumn":51,"fix":"2643"},{"ruleId":"1266","severity":2,"message":"2644","line":3,"column":39,"nodeType":null,"endLine":3,"endColumn":48,"fix":"2645"},{"ruleId":"1266","severity":2,"message":"2646","line":4,"column":38,"nodeType":null,"endLine":4,"endColumn":46,"fix":"2647"},"prettier/prettier","Replace `'src/hooks/Toast'` with `\"src/hooks/Toast\"`",{"range":"2648","text":"2649"},"Replace `'@fortawesome/fontawesome-svg-core'` with `\"@fortawesome/fontawesome-svg-core\";`",{"range":"2650","text":"2651"},"Replace `'@fortawesome/free-solid-svg-icons'` with `\"@fortawesome/free-solid-svg-icons\";`",{"range":"2652","text":"2653"},"Replace `'bootstrap/dist/css/bootstrap.min.css'` with `\"bootstrap/dist/css/bootstrap.min.css\"`",{"range":"2654","text":"2655"},"Replace `·path=\"/sceneFilenameParser\"·component={SceneFilenameParser}` with `⏎··············path=\"/sceneFilenameParser\"⏎··············component={SceneFilenameParser}⏎···········`",{"range":"2656","text":"2657"},"Delete `,`",{"range":"2658","text":"2659"},"Parsing error: Expression expected.","Replace `'react-bootstrap'` with `\"react-bootstrap\"`",{"range":"2660","text":"2661"},"Replace `·FindGalleriesQuery,·FindGalleriesVariables·` with `⏎··FindGalleriesQuery,⏎··FindGalleriesVariables⏎`",{"range":"2662","text":"2663"},{"range":"2664","text":"2659"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel⏎··`",{"range":"2665","text":"2666"},"Replace `·return;` with `⏎······return;⏎···`",{"range":"2667","text":"2668"},"Replace `margin:·\"0·auto\"` with `·margin:·\"0·auto\"·`",{"range":"2669","text":"2670"},"Replace `(gallery)` with `gallery`",{"range":"2671","text":"2672"},"Replace `·:·undefined` with `(⏎······················⏎····················)·:·(⏎······················undefined⏎····················)`",{"range":"2673","text":"2674"},"Replace `{gallery.path}` with `⏎··················{gallery.path}⏎················`",{"range":"2675","text":"2676"},"Replace `_event:·React.MouseEvent,·obj:·{index:·number}` with `⏎····_event:·React.MouseEvent,⏎····obj:·{·index:·number·}⏎··`",{"range":"2677","text":"2678"},"Replace `(file)·=>·({src:·file.path·||·\"\",·caption:·file.name` with `file·=>·({⏎····src:·file.path·||·\"\",⏎····caption:·file.name⏎··`",{"range":"2679","text":"2680"},"Replace `(file)·=>·({src:·`${file.path}?thumb=true`·||·\"\",·width:·1,·height:·1` with `file·=>·({⏎····src:·`${file.path}?thumb=true`·||·\"\",⏎····width:·1,⏎····height:·1⏎··`",{"range":"2681","text":"2682"},"Replace `'@fortawesome/fontawesome-svg-core'` with `\"@fortawesome/fontawesome-svg-core\"`",{"range":"2683","text":"2684"},"Replace `'react-router-bootstrap'` with `\"react-router-bootstrap\"`",{"range":"2685","text":"2686"},"Replace `'src/components/Shared'` with `\"src/components/Shared\";`",{"range":"2687","text":"2688"},"Delete `··`",{"range":"2689","text":"2659"},{"range":"2690","text":"2659"},{"range":"2691","text":"2659"},"Insert `·`",{"range":"2692","text":"2693"},"Insert `··`",{"range":"2694","text":"2695"},{"range":"2696","text":"2695"},{"range":"2697","text":"2695"},{"range":"2698","text":"2695"},{"range":"2699","text":"2695"},{"range":"2700","text":"2695"},"Replace `··` with `····`",{"range":"2701","text":"2702"},{"range":"2703","text":"2695"},{"range":"2704","text":"2695"},{"range":"2705","text":"2695"},{"range":"2706","text":"2695"},{"range":"2707","text":"2702"},{"range":"2708","text":"2695"},{"range":"2709","text":"2695"},{"range":"2710","text":"2695"},{"range":"2711","text":"2695"},{"range":"2712","text":"2695"},{"range":"2713","text":"2695"},{"range":"2714","text":"2695"},{"range":"2715","text":"2695"},{"range":"2716","text":"2695"},{"range":"2717","text":"2695"},{"range":"2718","text":"2695"},{"range":"2719","text":"2702"},{"range":"2720","text":"2695"},{"range":"2721","text":"2695"},{"range":"2722","text":"2695"},{"range":"2723","text":"2702"},{"range":"2724","text":"2695"},{"range":"2725","text":"2695"},"Replace `·location.pathname·===·'/performers'` with `⏎····location.pathname·===·\"/performers\"`",{"range":"2726","text":"2727"},"Replace `?·'/performers/new'` with `··?·\"/performers/new\"`",{"range":"2728","text":"2729"},"Replace `····:·location.pathname·===·'/studios'` with `······:·location.pathname·===·\"/studios\"`",{"range":"2730","text":"2731"},"Replace `'/studios/new'` with `\"/studios/new\"⏎·····`",{"range":"2732","text":"2733"},"Replace `·path·===·null·?·''` with `⏎····path·===·null·?·(⏎······\"\"⏎····)`",{"range":"2734","text":"2735"},{"range":"2736","text":"2695"},{"range":"2737","text":"2695"},{"range":"2738","text":"2695"},{"range":"2739","text":"2695"},{"range":"2740","text":"2659"},"Replace `(i)` with `i`",{"range":"2741","text":"2742"},"Replace `⏎··········exact={true}⏎·········` with `·exact={true}`",{"range":"2743","text":"2744"},{"range":"2745","text":"2659"},{"range":"2746","text":"2659"},{"range":"2747","text":"2659"},"Replace `(⏎····

    Page·not·found.

    ⏎··)` with `

    Page·not·found.

    `",{"range":"2748","text":"2749"},{"range":"2750","text":"2661"},{"range":"2751","text":"2668"},{"range":"2752","text":"2668"},{"range":"2753","text":"2695"},{"range":"2754","text":"2695"},"Replace `··········` with `············`",{"range":"2755","text":"2756"},{"range":"2757","text":"2695"},"Replace `············` with `··············`",{"range":"2758","text":"2759"},{"range":"2760","text":"2695"},{"range":"2761","text":"2756"},{"range":"2762","text":"2695"},{"range":"2763","text":"2695"},{"range":"2764","text":"2695"},{"range":"2765","text":"2695"},{"range":"2766","text":"2695"},{"range":"2767","text":"2695"},"Replace `''` with `\"\"`",{"range":"2768","text":"2769"},{"range":"2770","text":"2769"},{"range":"2771","text":"2661"},"Replace `'src/hooks'` with `\"src/hooks\"`",{"range":"2772","text":"2773"},"Replace `sprites,·previews,·markers,·transcodes` with `⏎········sprites,⏎········previews,⏎········markers,⏎········transcodes⏎······`",{"range":"2774","text":"2775"},"Replace `·id=\"sprite-task\"·checked={sprites}·label=\"Sprites·(for·the·scene·scrubber)\"·onChange={()·=>·setSprites(!sprites)}` with `⏎········id=\"sprite-task\"⏎········checked={sprites}⏎········label=\"Sprites·(for·the·scene·scrubber)\"⏎········onChange={()·=>·setSprites(!sprites)}⏎·····`",{"range":"2776","text":"2777"},"Replace `·id=\"preview-task\"·checked={previews}·label=\"Previews·(video·previews·which·play·when·hovering·over·a·scene)\"·onChange={()·=>·setPreviews(!previews)}` with `⏎········id=\"preview-task\"⏎········checked={previews}⏎········label=\"Previews·(video·previews·which·play·when·hovering·over·a·scene)\"⏎········onChange={()·=>·setPreviews(!previews)}⏎·····`",{"range":"2778","text":"2779"},"Replace `·id=\"marker-task\"·checked={markers}·label=\"Markers·(20·second·videos·which·begin·at·the·given·timecode)\"·onChange={()·=>·setMarkers(!markers)}` with `⏎········id=\"marker-task\"⏎········checked={markers}⏎········label=\"Markers·(20·second·videos·which·begin·at·the·given·timecode)\"⏎········onChange={()·=>·setMarkers(!markers)}⏎·····`",{"range":"2780","text":"2781"},"Replace `·id=\"transcode-task\"·checked={transcodes}·label=\"Transcodes·(MP4·conversions·of·unsupported·video·formats)\"·onChange={()·=>·setTranscodes(!transcodes)}` with `⏎········id=\"transcode-task\"⏎········checked={transcodes}⏎········label=\"Transcodes·(MP4·conversions·of·unsupported·video·formats)\"⏎········onChange={()·=>·setTranscodes(!transcodes)}⏎·····`",{"range":"2782","text":"2783"},"Replace `Generate` with `⏎········Generate⏎······`",{"range":"2784","text":"2785"},"Replace `Generate·supporting·image,·sprite,·video,·vtt·and·other·files.` with `⏎········Generate·supporting·image,·sprite,·video,·vtt·and·other·files.⏎······`",{"range":"2786","text":"2787"},{"range":"2788","text":"2661"},{"range":"2789","text":"2773"},"Replace `'src/components/Shared'` with `\"src/components/Shared\"`",{"range":"2790","text":"2791"},"Delete `·`",{"range":"2792","text":"2659"},{"range":"2793","text":"2693"},"Replace `·jobStatus.refetch()` with `⏎······jobStatus.refetch();⏎····`",{"range":"2794","text":"2795"},"Replace `'Import',·variant:·'danger'` with `\"Import\",·variant:·\"danger\"`",{"range":"2796","text":"2797"},"Replace `·This·will·delete·the·database·and·re-import·from⏎·········` with `This·will·delete·the·database·and⏎··········re-import·from`",{"range":"2798","text":"2799"},{"range":"2800","text":"2795"},"Replace `'Clean',·variant:·'danger'` with `\"Clean\",·variant:·\"danger\"`",{"range":"2801","text":"2802"},"Replace `⏎··········This·will·delete·db·information·and·generated·content⏎··········for·all·scenes·that·are·no·longer·found·in·the` with `·This·will·delete·db·information·and⏎··········generated·content·for·all·scenes·that·are·no·longer·found·in·the⏎·········`",{"range":"2803","text":"2804"},"Replace `useFileMetadata:·useFileMetadata` with `⏎········useFileMetadata:·useFileMetadata⏎······`",{"range":"2805","text":"2806"},"Insert `;`",{"range":"2807","text":"2808"},"Replace `·id=\"stop\"·variant=\"danger\"·onClick={()·=>·StashService.queryStopJob().then(()·=>·jobStatus.refetch())}>Stop` with `⏎··········id=\"stop\"⏎··········variant=\"danger\"⏎··········onClick={()·=>⏎············StashService.queryStopJob().then(()·=>·jobStatus.refetch())⏎··········}⏎········>⏎··········Stop⏎········`",{"range":"2809","text":"2810"},{"range":"2811","text":"2695"},{"range":"2812","text":"2695"},"Replace `·status·!==·\"Idle\"·?··:·''·` with `status·!==·\"Idle\"·?·(⏎············⏎··········)·:·(⏎············\"\"⏎··········)`",{"range":"2813","text":"2814"},{"range":"2815","text":"2695"},{"range":"2816","text":"2695"},"Replace `Scan` with `⏎··········Scan⏎········`",{"range":"2817","text":"2818"},"Replace `Scan·for·new·content·and·add·it·to·the·database.` with `⏎··········Scan·for·new·content·and·add·it·to·the·database.⏎········`",{"range":"2819","text":"2820"},"Replace `Auto·Tag` with `⏎··········Auto·Tag⏎········`",{"range":"2821","text":"2822"},"Replace `Auto-tag·content·based·on·filenames.` with `⏎··········Auto-tag·content·based·on·filenames.⏎········`",{"range":"2823","text":"2824"},"Replace `·id=\"clean\"·variant=\"danger\"·onClick={()·=>·setIsCleanAlertOpen(true)}>Clean` with `⏎··········id=\"clean\"⏎··········variant=\"danger\"⏎··········onClick={()·=>·setIsCleanAlertOpen(true)}⏎········>⏎··········Clean⏎········`",{"range":"2825","text":"2826"},"Replace `Check·for·missing·files·and·remove·them·from·the·database.·This·is·a·destructive·action.` with `⏎··········Check·for·missing·files·and·remove·them·from·the·database.·This·is·a⏎··········destructive·action.⏎········`",{"range":"2827","text":"2828"},"Replace `·id=\"export\"·type=\"submit\"onClick={()·=>·StashService.queryMetadataExport().then(()·=>·{·jobStatus.refetch()})}>Export` with `⏎··········id=\"export\"⏎··········type=\"submit\"⏎··········onClick={()·=>⏎············StashService.queryMetadataExport().then(()·=>·{⏎··············jobStatus.refetch();⏎············})⏎··········}⏎········>⏎··········Export⏎········`",{"range":"2829","text":"2830"},"Replace `Export·the·database·content·into·JSON·format.` with `⏎··········Export·the·database·content·into·JSON·format.⏎········`",{"range":"2831","text":"2832"},"Replace `·id=\"import\"·variant=\"danger\"·onClick={()·=>·setIsImportAlertOpen(true)}>Import` with `⏎··········id=\"import\"⏎··········variant=\"danger\"⏎··········onClick={()·=>·setIsImportAlertOpen(true)}⏎········>⏎··········Import⏎········`",{"range":"2833","text":"2834"},"Replace `Import·from·exported·JSON.··This·is·a·destructive·action.` with `⏎··········Import·from·exported·JSON.·This·is·a·destructive·action.⏎········`",{"range":"2835","text":"2836"},"Replace `·Button,·Form,·Modal,·Nav,·Navbar,·OverlayTrigger,·Popover·}·from·'react-bootstrap'` with `⏎··Button,⏎··Form,⏎··Modal,⏎··Nav,⏎··Navbar,⏎··OverlayTrigger,⏎··Popover⏎}·from·\"react-bootstrap\"`",{"range":"2837","text":"2838"},"Replace `scraper:·GQL.ListPerformerScrapersListPerformerScrapers` with `⏎····scraper:·GQL.ListPerformerScrapersListPerformerScrapers⏎··`",{"range":"2839","text":"2840"},{"range":"2841","text":"2668"},"Replace `⏎········variant=\"primary\"⏎········onClick={()·=>·props.onToggleEdit()}⏎······` with `·variant=\"primary\"·onClick={()·=>·props.onToggleEdit()}`",{"range":"2842","text":"2843"},{"range":"2844","text":"2659"},{"range":"2845","text":"2668"},"Replace `··props.onSave()}>Save` with `·(⏎·······props.onSave()}>⏎········Save⏎······⏎····)`",{"range":"2846","text":"2847"},{"range":"2848","text":"2668"},"Replace `··setIsDeleteAlertOpen(true)}>Delete` with `·(⏎·······setIsDeleteAlertOpen(true)}>⏎········Delete⏎······⏎····)`",{"range":"2849","text":"2850"},"Replace `·return;·}` with `⏎······return;`",{"range":"2851","text":"2852"},"Insert `}⏎··`",{"range":"2853","text":"2854"},{"range":"2855","text":"2659"},"Replace `··········` with `········`",{"range":"2856","text":"2857"},"Replace `···props.onDisplayScraperDialog·&&··props.onDisplayScraperDialog(s)·}` with `··················⏎······················props.onDisplayScraperDialog·&&⏎······················props.onDisplayScraperDialog(s)⏎····················}⏎··················`",{"range":"2867","text":"2868"},"Insert `····`",{"range":"2869","text":"2702"},{"range":"2870","text":"2702"},"Replace `))·:·''` with `····))⏎··············:·\"\"`",{"range":"2871","text":"2872"},{"range":"2873","text":"2668"},"Replace `Auto·Tag)` with `··········}}⏎········>⏎··········Auto·Tag⏎········⏎······);`",{"range":"2878","text":"2879"},{"range":"2880","text":"2668"},"Replace `(⏎······⏎········Scenes⏎······⏎····)` with `Scenes`",{"range":"2881","text":"2882"},"Replace `⏎········show={isDeleteAlertOpen}⏎······` with `·show={isDeleteAlertOpen}`",{"range":"2883","text":"2884"},"Replace `⏎··········Are·you·sure·you·want·to·delete·{name}?⏎········` with `Are·you·sure·you·want·to·delete·{name}?`",{"range":"2885","text":"2886"},"Replace `Delete` with `⏎············Delete⏎··········`",{"range":"2887","text":"2888"},"Replace `·variant=\"secondary\"·onClick={()·=>·setIsDeleteAlertOpen(false)}>Cancel` with `⏎············variant=\"secondary\"⏎············onClick={()·=>·setIsDeleteAlertOpen(false)}⏎··········>⏎············Cancel⏎··········`",{"range":"2889","text":"2890"},"Delete `⏎`",{"range":"2891","text":"2659"},{"range":"2892","text":"2695"},{"range":"2893","text":"2695"},{"range":"2894","text":"2695"},{"range":"2895","text":"2695"},{"range":"2896","text":"2695"},{"range":"2897","text":"2661"},{"range":"2898","text":"2688"},{"range":"2899","text":"2808"},{"range":"2900","text":"2808"},{"range":"2901","text":"2808"},{"range":"2902","text":"2808"},"Replace `secondsToString(props.numericValue)` with `⏎····secondsToString(props.numericValue)⏎··`",{"range":"2903","text":"2904"},{"range":"2905","text":"2659"},{"range":"2906","text":"2659"},{"range":"2907","text":"2693"},"Replace `⏎·······vertical={true}⏎······` with `·vertical={true}`",{"range":"2908","text":"2909"},"Replace `⏎··········disabled={props.disabled}⏎··········onClick={()·=>·increment()}⏎········` with `·disabled={props.disabled}·onClick={()·=>·increment()}`",{"range":"2910","text":"2911"},"Replace `⏎··········disabled={props.disabled}⏎··········onClick={()·=>·decrement()}⏎········` with `·disabled={props.disabled}·onClick={()·=>·decrement()}`",{"range":"2912","text":"2913"},{"range":"2914","text":"2808"},"Replace `⏎··········onClick={()·=>·onReset()}⏎········` with `·onClick={()·=>·onReset()}`",{"range":"2915","text":"2916"},{"range":"2917","text":"2808"},{"range":"2918","text":"2659"},"Replace `·maybeRenderReset()·` with `maybeRenderReset()`",{"range":"2919","text":"2920"},"Replace `·renderButtons()·` with `renderButtons()`",{"range":"2921","text":"2922"},{"range":"2923","text":"2808"},{"range":"2924","text":"2661"},"Replace `·PerformerDataFragment,·SceneMarkerDataFragment,·TagDataFragment·` with `⏎··PerformerDataFragment,⏎··SceneMarkerDataFragment,⏎··TagDataFragment⏎`",{"range":"2925","text":"2926"},"Replace `props.marker.seconds·||·0` with `⏎······props.marker.seconds·||·0⏎····`",{"range":"2927","text":"2928"},"Replace `⏎······className=\"tag-item\"⏎······variant=\"secondary\"⏎····` with `·className=\"tag-item\"·variant=\"secondary\"`",{"range":"2929","text":"2930"},{"range":"2931","text":"2661"},{"range":"2932","text":"2668"},"Replace `··{!data·||·loading·?·` with `{!data·||·loading·?·(`",{"range":"2933","text":"2934"},{"range":"2935","text":"2659"},{"range":"2936","text":"2659"},"Replace `···········:·undefined` with `········⏎······)·:·(⏎········undefined⏎······)`",{"range":"2937","text":"2938"},{"range":"2939","text":"2661"},"Replace `⏎······className=\"col-4\"⏎····` with `·className=\"col-4\"`",{"range":"2940","text":"2941"},"Replace `backgroundImage:·`url(${studio.image_path})`` with `·backgroundImage:·`url(${studio.image_path})`·`",{"range":"2942","text":"2943"},"Replace `⏎··········{studio.name}⏎········` with `{studio.name}`",{"range":"2944","text":"2945"},"Replace `·FindStudiosQuery,·FindStudiosVariables·` with `⏎··FindStudiosQuery,⏎··FindStudiosVariables⏎`",{"range":"2946","text":"2947"},{"range":"2948","text":"2659"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel⏎··`",{"range":"2949","text":"2950"},{"range":"2951","text":"2668"},"Replace `(studio)·=>·(` with `studio·=>·(⏎············⏎··········`",{"range":"2952","text":"2953"},"Replace `item:·GQL.SlimSceneDataFragment·|·GQL.SceneMarkerDataFragment` with `⏎····item:·GQL.SlimSceneDataFragment·|·GQL.SceneMarkerDataFragment⏎··`",{"range":"2954","text":"2955"},"Replace `props:·IWallItemProps` with `⏎··props:·IWallItemProps⏎`",{"range":"2956","text":"2957"},"Replace `resetOnMouseLeave:·true` with `⏎····resetOnMouseLeave:·true⏎··`",{"range":"2958","text":"2959"},"Replace `·!!config.data·&&·!!config.data.configuration·?·config.data.configuration.interface.wallShowTitle` with `⏎····!!config.data·&&·!!config.data.configuration⏎······?·config.data.configuration.interface.wallShowTitle⏎·····`",{"range":"2960","text":"2961"},{"range":"2962","text":"2668"},"Replace `'10'` with `\"10\"`",{"range":"2963","text":"2964"},{"range":"2965","text":"2693"},{"range":"2966","text":"2769"},"Replace ``${props.sceneMarker!.title}·-·${TextUtils.secondsToTimestamp(props.sceneMarker.seconds)}`` with `⏎········`${props.sceneMarker!.title}·-·${TextUtils.secondsToTimestamp(⏎··········props.sceneMarker.seconds⏎········)}`⏎······`",{"range":"2967","text":"2968"},"Replace `(tag)·=>·({tag.name}` with `tag·=>·(⏎········{tag.name}⏎······`",{"range":"2969","text":"2970"},"Replace `{props.sceneMarker.primary_tag.name}` with `⏎········⏎··········{props.sceneMarker.primary_tag.name}⏎········⏎······`",{"range":"2971","text":"2972"},"Replace `·className.push(\"double-scale\");` with `⏎····className.push(\"double-scale\");⏎·`",{"range":"2973","text":"2974"},"Replace `·style.transformOrigin·=·props.origin;` with `⏎····style.transformOrigin·=·props.origin;⏎·`",{"range":"2975","text":"2976"},"Replace `display:·\"none\"` with `·display:·\"none\"·`",{"range":"2977","text":"2978"},"Replace `·alt=\"Preview\"·src={previewPath·||·screenshotPath}·onError={()·=>·previewNotFound()}` with `⏎············alt=\"Preview\"⏎············src={previewPath·||·screenshotPath}⏎············onError={()·=>·previewNotFound()}⏎·········`",{"range":"2979","text":"2980"},"Insert `·(`",{"range":"2981","text":"2982"},"Replace `lineHeight:·1}}>` with `·lineHeight:·1·}}>{title}
    `",{"range":"2983","text":"2984"},"Replace `··{title` with `{tags`",{"range":"2985","text":"2986"},{"range":"2987","text":"2659"},"Replace `····{tags}` with `)·:·(`",{"range":"2988","text":"2989"},"Replace `
    ·:·''` with `\"\"`",{"range":"2990","text":"2769"},"Insert `)`",{"range":"2991","text":"2992"},{"range":"2993","text":"2955"},"Replace `props:·IWallPanelProps` with `⏎··props:·IWallPanelProps⏎`",{"range":"2994","text":"2995"},"Replace `·return·\"top\";` with `⏎······return·\"top\";⏎···`",{"range":"2996","text":"2997"},"Replace `·return·\"top·left\";` with `⏎······return·\"top·left\";⏎···`",{"range":"2998","text":"2999"},"Replace `·return·\"top·right\";` with `⏎······return·\"top·right\";⏎···`",{"range":"3000","text":"3001"},{"range":"3002","text":"2997"},"Replace `·return·\"bottom·right\";` with `⏎······return·\"bottom·right\";⏎···`",{"range":"3003","text":"3004"},"Replace `·return·\"bottom·left\";` with `⏎······return·\"bottom·left\";⏎···`",{"range":"3005","text":"3006"},"Replace `·return·\"bottom\";` with `⏎······return·\"bottom\";⏎···`",{"range":"3007","text":"3008"},{"range":"3009","text":"3008"},"Replace `·return·\"center·left\";` with `⏎······return·\"center·left\";⏎···`",{"range":"3010","text":"3011"},"Replace `·return·\"center·right\";` with `⏎······return·\"center·right\";⏎···`",{"range":"3012","text":"3013"},{"range":"3014","text":"2668"},{"range":"3015","text":"2668"},"Replace `'react-bootstrap'` with `\"react-bootstrap\";`",{"range":"3016","text":"3017"},{"range":"3018","text":"2791"},"Replace `·Criterion,·CriterionType·` with `⏎··Criterion,⏎··CriterionType⏎`",{"range":"3019","text":"3020"},"Replace `props:·IAddFilterProps` with `⏎··props:·IAddFilterProps⏎`",{"range":"3021","text":"3022"},"Replace `=·useRef` with `⏎····event:·React.ChangeEvent⏎··`",{"range":"3028","text":"3029"},"Replace `criterion.options·&&·(value·===·undefined·||·value·===·\"\"·||·typeof·value·===·\"number\")` with `⏎········criterion.options·&&⏎········(value·===·undefined·||·value·===·\"\"·||·typeof·value·===·\"number\")⏎······`",{"range":"3030","text":"3031"},"Replace `·?·props.editingCriterion.getId()` with `⏎······?·props.editingCriterion.getId()⏎·····`",{"range":"3032","text":"3033"},{"range":"3034","text":"2668"},"Replace `·return;` with `⏎········return;⏎·····`",{"range":"3035","text":"3036"},{"range":"3037","text":"2659"},{"range":"3038","text":"2659"},"Replace `criterion.modifier·===·CriterionModifier.IsNull·||·criterion.modifier·===·CriterionModifier.NotNull` with `⏎········criterion.modifier·===·CriterionModifier.IsNull·||⏎········criterion.modifier·===·CriterionModifier.NotNull⏎······`",{"range":"3039","text":"3040"},"Replace `(items)·=>·criterion.value·=·items.map((i)·=>·({id:·i.id,·label:·i.name!}))` with `items·=>⏎··············(criterion.value·=·items.map(i·=>·({·id:·i.id,·label:·i.name!·})))⏎············`",{"range":"3041","text":"3042"},{"range":"3043","text":"2659"},"Replace `··················` with `················`",{"range":"3044","text":"3045"},{"range":"3046","text":"2808"},"Replace `⏎··········{renderModifier()}⏎········` with `{renderModifier()}`",{"range":"3047","text":"3048"},"Replace `⏎··········{renderSelect()}⏎········` with `{renderSelect()}`",{"range":"3049","text":"3050"},{"range":"3051","text":"2668"},"Insert `⏎········`",{"range":"3052","text":"3053"},{"range":"3054","text":"2659"},{"range":"3055","text":"2659"},"Replace `⏎··········onClick={()·=>·onToggle()}⏎··········active={isOpen}⏎········` with `·onClick={()·=>·onToggle()}·active={isOpen}`",{"range":"3056","text":"3057"},"Replace `⏎········show={isOpen}⏎·······` with `·show={isOpen}`",{"range":"3058","text":"3059"},"Replace `{title}` with `⏎············{title}⏎··········`",{"range":"3060","text":"3061"},"Replace `·Badge,·Button,·ButtonGroup,·Dropdown,·Form,·OverlayTrigger,·Tooltip·}·from·'react-bootstrap'` with `⏎··Badge,⏎··Button,⏎··ButtonGroup,⏎··Dropdown,⏎··Form,⏎··OverlayTrigger,⏎··Tooltip⏎}·from·\"react-bootstrap\"`",{"range":"3062","text":"3063"},{"range":"3064","text":"2791"},"Replace `props:·IListFilterProps` with `⏎··props:·IListFilterProps⏎`",{"range":"3065","text":"3066"},"Insert `⏎···`",{"range":"3067","text":"3068"},"Replace `Criterion·|·undefined` with `⏎····Criterion·|·undefined⏎··`",{"range":"3069","text":"3070"},{"range":"3071","text":"2668"},{"range":"3072","text":"2668"},"Replace `(option)` with `option`",{"range":"3073","text":"3074"},"Replace `{option}` with `⏎········{option}⏎······`",{"range":"3075","text":"3076"},"Insert `⏎·········`",{"range":"3077","text":"3078"},{"range":"3079","text":"3078"},{"range":"3080","text":"3078"},{"range":"3081","text":"3078"},{"range":"3082","text":"3078"},{"range":"3083","text":"3078"},{"range":"3084","text":"3074"},"Replace `·overlay={{getLabel(option)}}` with `⏎········overlay={⏎··········{getLabel(option)}⏎········}⏎······`",{"range":"3085","text":"3086"},"Replace `(criterion)` with `criterion`",{"range":"3087","text":"3088"},"Replace `·onSelectAll()}>Select·All` with `(⏎·········onSelectAll()}>Select·All⏎······)`",{"range":"3089","text":"3090"},"Replace `·onSelectNone()}>Select·None` with `(⏎·········onSelectNone()}>⏎··········Select·None⏎········⏎······)`",{"range":"3091","text":"3092"},"Replace `⏎······renderSelectAll(),⏎······renderSelectNone()⏎····` with `renderSelectAll(),·renderSelectNone()`",{"range":"3093","text":"3094"},"Replace `(o)` with `o`",{"range":"3095","text":"3096"},"Replace `{o.text}` with `⏎··········{o.text}⏎········`",{"range":"3097","text":"3098"},"Replace `⏎············{options}⏎··········` with `{options}`",{"range":"3099","text":"3100"},{"range":"3101","text":"2659"},"Replace `·onChangeZoom(Number.parseInt(event.target.value))` with `⏎··············onChangeZoom(Number.parseInt(event.target.value))⏎············`",{"range":"3102","text":"3103"},{"range":"3104","text":"2695"},"Replace `·PAGE_SIZE_OPTIONS.map(s·=>·{s})·` with `PAGE_SIZE_OPTIONS.map(s·=>·(⏎··············{s}⏎············))`",{"range":"3105","text":"3106"},"Replace `⏎················{renderSortByOptions()}⏎··············` with `{renderSortByOptions()}`",{"range":"3107","text":"3108"},"Insert `⏎·············`",{"range":"3109","text":"3110"},"Replace `··············{props.filter.sortDirection·===·\"asc\"·?·\"Ascending\"·:·\"Descending\"}` with `················⏎··················{props.filter.sortDirection·===·\"asc\"⏎····················?·\"Ascending\"⏎····················:·\"Descending\"}⏎················`",{"range":"3111","text":"3112"},"Replace `}` with `··}⏎············`",{"range":"3113","text":"3114"},"Replace `·icon={props.filter.sortDirection·===·\"asc\"·?·\"caret-up\"·:·\"caret-down\"}` with `⏎··················icon={⏎····················props.filter.sortDirection·===·\"asc\"⏎······················?·\"caret-up\"⏎······················:·\"caret-down\"⏎··················}⏎···············`",{"range":"3115","text":"3116"},"Replace `⏎············{renderMore()}⏎··········` with `{renderMore()}`",{"range":"3117","text":"3118"},"Replace `·style={{display:·\"flex\",·justifyContent:·\"center\",·margin:·\"10px·auto\"}}` with `⏎··········style={{⏎············display:·\"flex\",⏎············justifyContent:·\"center\",⏎············margin:·\"10px·auto\"⏎··········}}⏎········`",{"range":"3119","text":"3120"},{"range":"3121","text":"2661"},"Replace `IPaginationProps,·IPaginationState` with `⏎··IPaginationProps,⏎··IPaginationState⏎`",{"range":"3122","text":"3123"},{"range":"3124","text":"2659"},"Delete `⏎·····`",{"range":"3125","text":"2659"},"Replace `this.props.totalItems·!==·prevProps.totalItems·||·this.props.itemsPerPage·!==·prevProps.itemsPerPage` with `⏎······this.props.totalItems·!==·prevProps.totalItems·||⏎······this.props.itemsPerPage·!==·prevProps.itemsPerPage⏎····`",{"range":"3126","text":"3127"},"Replace `·return·null;` with `⏎······return·null;⏎···`",{"range":"3128","text":"3129"},"Replace `First` with `⏎··········First⏎········`",{"range":"3130","text":"3131"},"Replace `Previous` with `⏎··········Previous⏎········`",{"range":"3132","text":"3133"},"Replace `Next` with `⏎··········Next⏎········`",{"range":"3134","text":"3135"},"Replace `Last` with `⏎··········Last⏎········`",{"range":"3136","text":"3137"},"Replace `{page}` with `⏎········{page}⏎······`",{"range":"3138","text":"3139"},{"range":"3140","text":"2668"},"Replace `this.props.totalItems,·page,·this.props.itemsPerPage` with `⏎······this.props.totalItems,⏎······page,⏎······this.props.itemsPerPage⏎····`",{"range":"3141","text":"3142"},"Replace `·page·=·1;` with `⏎······page·=·1;⏎···`",{"range":"3143","text":"3144"},"Replace `·page·=·pagerState.totalPages;` with `⏎······page·=·pagerState.totalPages;⏎···`",{"range":"3145","text":"3146"},"Replace `·this.props.onChangePage(page);` with `⏎······this.props.onChangePage(page);⏎···`",{"range":"3147","text":"3148"},"Replace `totalItems:·number,·currentPage:·number,·pageSize:·number` with `⏎····totalItems:·number,⏎····currentPage:·number,⏎····pageSize:·number⏎··`",{"range":"3149","text":"3150"},"Replace `(endPage·+·1)·-·startPage).keys()].map((i)·=>·startPage·+·i` with `endPage·+·1·-·startPage).keys()].map(⏎······i·=>·startPage·+·i⏎····`",{"range":"3151","text":"3152"},{"range":"3153","text":"2659"},{"range":"3154","text":"2661"},"Replace `props:·IPerformerCardProps` with `⏎··props:·IPerformerCardProps⏎`",{"range":"3155","text":"3156"},"Replace `props.ageFromDate·?·\"·in·this·scene.\"·:·\".\"` with `⏎····props.ageFromDate·?·\"·in·this·scene.\"·:·\".\"⏎··`",{"range":"3157","text":"3158"},{"range":"3159","text":"2668"},"Replace `·(⏎······⏎········FAVORITE⏎······
    ⏎····)` with `·FAVORITE
    `",{"range":"3160","text":"3161"},"Replace `backgroundImage:·`url(${props.performer.image_path})`` with `·backgroundImage:·`url(${props.performer.image_path})`·`",{"range":"3162","text":"3163"},"Replace `⏎··········{props.performer.name}⏎········` with `{props.performer.name}`",{"range":"3164","text":"3165"},{"range":"3166","text":"2769"},"Replace `Stars·in·{props.performer.scene_count}·scenes` with `⏎··········Stars·in·{props.performer.scene_count}{\"·\"}⏎··········⏎············scenes⏎··········⏎··········`",{"range":"3167","text":"3168"},"Replace `'react-router-dom'` with `\"react-router-dom\"`",{"range":"3169","text":"3170"},"Replace `·FindPerformersQuery,·FindPerformersVariables·` with `⏎··FindPerformersQuery,⏎··FindPerformersVariables⏎`",{"range":"3171","text":"3172"},{"range":"3173","text":"2659"},{"range":"3174","text":"2659"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel⏎··`",{"range":"3175","text":"3176"},"Replace `singleResult·&&·singleResult.data·&&·singleResult.data.findPerformers·&&·singleResult.data.findPerformers.performers.length·===·1` with `⏎········singleResult·&&⏎········singleResult.data·&&⏎········singleResult.data.findPerformers·&&⏎········singleResult.data.findPerformers.performers.length·===·1⏎······`",{"range":"3177","text":"3178"},"Replace `·filter:·ListFilterModel` with `⏎····filter:·ListFilterModel⏎··`",{"range":"3179","text":"3180"},{"range":"3181","text":"2668"},"Replace `(p)·=>·(` with `p·=>·(⏎············⏎··········`",{"range":"3182","text":"3183"},"Replace `` with `(⏎········⏎······)`",{"range":"3184","text":"3185"},{"range":"3186","text":"2661"},{"range":"3187","text":"2791"},"Replace `props:·IPerformerListTableProps)·=>·{⏎` with `⏎··props:·IPerformerListTableProps⏎)·=>·{`",{"range":"3188","text":"3189"},{"range":"3190","text":"2659"},{"range":"3191","text":"2668"},{"range":"3192","text":"2659"},{"range":"3193","text":"2659"},"Insert `⏎······`",{"range":"3194","text":"3195"},{"range":"3196","text":"2808"},{"range":"3197","text":"2659"},{"range":"3198","text":"2695"},"Replace `········⏎··········{renderPerformerImage(performer)}⏎········` with `··········{renderPerformerImage(performer)}`",{"range":"3199","text":"3200"},"Replace `········⏎··············{performer.name}⏎············` with `··············{performer.name}`",{"range":"3204","text":"3205"},{"range":"3206","text":"2695"},{"range":"3207","text":"2695"},"Replace `⏎··········{performer.aliases·?·performer.aliases·:·''}⏎········` with `··{performer.aliases·?·performer.aliases·:·\"\"}`",{"range":"3208","text":"3209"},"Replace `⏎··········{maybeRenderFavoriteHeart(performer)}⏎········` with `··{maybeRenderFavoriteHeart(performer)}`",{"range":"3210","text":"3211"},"Replace `········` with `··········`",{"range":"3212","text":"3213"},{"range":"3214","text":"2695"},{"range":"3215","text":"2695"},{"range":"3216","text":"2695"},{"range":"3217","text":"3213"},"Replace `⏎··········{performer.birthdate}⏎········` with `··{performer.birthdate}`",{"range":"3218","text":"3219"},"Replace `········⏎··········{performer.height}⏎········` with `··········{performer.height}`",{"range":"3220","text":"3221"},"Replace `······` with `········`",{"range":"3222","text":"2857"},{"range":"3223","text":"2808"},{"range":"3224","text":"2695"},{"range":"3225","text":"2695"},{"range":"3226","text":"2695"},{"range":"3227","text":"2695"},"Replace `············⏎··········{props.performers.map(renderPerformerRow)}⏎········` with `··{props.performers.map(renderPerformerRow)}`",{"range":"3238","text":"3239"},{"range":"3240","text":"2857"},{"range":"3241","text":"2695"},{"range":"3242","text":"2659"},"Replace `·Button,·ButtonGroup,·Card,·Form,·Popover,·OverlayTrigger·}·from·'react-bootstrap'` with `⏎··Button,⏎··ButtonGroup,⏎··Card,⏎··Form,⏎··Popover,⏎··OverlayTrigger⏎}·from·\"react-bootstrap\"`",{"range":"3243","text":"3244"},"Replace `'classnames'` with `\"classnames\"`",{"range":"3245","text":"3246"},{"range":"3247","text":"2791"},"Replace `·:·boolean,·shiftKey·` with `:·boolean,·shiftKey`",{"range":"3248","text":"3249"},"Replace `props:·ISceneCardProps` with `⏎··props:·ISceneCardProps⏎`",{"range":"3250","text":"3251"},"Replace `resetOnMouseLeave:·false` with `⏎····resetOnMouseLeave:·false⏎··`",{"range":"3252","text":"3253"},"Replace `·!!config.data·&&·!!config.data.configuration·?·config.data.configuration.interface.showStudioAsText` with `⏎····!!config.data·&&·!!config.data.configuration⏎······?·config.data.configuration.interface.showStudioAsText⏎·····`",{"range":"3254","text":"3255"},{"range":"3256","text":"2668"},"Replace `·className={`rating-banner·${props.scene.rating·?·`rating-${props.scene.rating}`·:·''·}`}` with `⏎········className={`rating-banner·${⏎··········props.scene.rating·?·`rating-${props.scene.rating}`·:·\"\"⏎········}`}⏎······`",{"range":"3257","text":"3258"},"Replace `·{TextUtils.resolution(props.scene.file.height)}·:·''` with `(⏎··········⏎············{\"·\"}⏎············{TextUtils.resolution(props.scene.file.height)}⏎··········⏎········)·:·(⏎··········\"\"⏎········)`",{"range":"3259","text":"3260"},"Replace `·props.scene.file.duration·>=·1·?·TextUtils.secondsToTimestamp(props.scene.file.duration)·:·''` with `⏎········props.scene.file.duration·>=·1⏎··········?·TextUtils.secondsToTimestamp(props.scene.file.duration)⏎··········:·\"\"`",{"range":"3261","text":"3262"},{"range":"3263","text":"2659"},{"range":"3264","text":"2659"},"Replace `⏎··········to={`/studios/${props.scene.studio.id}`}⏎··········style={style}⏎········` with `·to={`/studios/${props.scene.studio.id}`}·style={style}`",{"range":"3265","text":"3266"},{"range":"3267","text":"2659"},"Replace `··props.scene.tags.map((tag)` with `props.scene.tags.map(tag`",{"range":"3268","text":"3269"},{"range":"3270","text":"2659"},{"range":"3271","text":"2659"},"Replace `⏎··········props.scene.performers.map((performer)` with `props.scene.performers.map(performer`",{"range":"3272","text":"3273"},{"range":"3274","text":"2659"},"Replace `··············` with `············`",{"range":"3275","text":"2756"},{"range":"3276","text":"2659"},{"range":"3277","text":"3045"},{"range":"3278","text":"2659"},"Replace `··style={{backgroundImage:·`url(${performer.image_path})`` with `style={{·backgroundImage:·`url(${performer.image_path})`·`",{"range":"3279","text":"3280"},"Replace `··>·0` with `······props.scene.scene_markers.length·>·0⏎····`",{"range":"3295","text":"3296"},{"range":"3297","text":"2695"},"Replace `·shiftKey·=·event.shiftKey;·event.stopPropagation();·}·` with `⏎··········shiftKey·=·event.shiftKey;⏎··········event.stopPropagation();⏎········}`",{"range":"3298","text":"3299"},"Replace `·to={`/scenes/${props.scene.id}`}·className={cx('image',·'previewable',·{portrait:·isPortrait()})}` with `⏎········to={`/scenes/${props.scene.id}`}⏎········className={cx(\"image\",·\"previewable\",·{·portrait:·isPortrait()·})}⏎······`",{"range":"3300","text":"3301"},"Replace `'preview',·{portrait:·isPortrait()` with `\"preview\",·{·portrait:·isPortrait()·`",{"range":"3302","text":"3303"},"Replace `·?·props.scene.title` with `⏎············?·props.scene.title⏎···········`",{"range":"3304","text":"3305"},"Replace `props:·ISceneDetailProps` with `⏎··props:·ISceneDetailProps⏎`",{"range":"3306","text":"3307"},{"range":"3308","text":"2668"},{"range":"3309","text":"2668"},"Replace `(tag)` with `tag`",{"range":"3310","text":"3311"},{"range":"3312","text":"2695"},"Replace `·?·props.scene.title` with `⏎··········?·props.scene.title⏎·········`",{"range":"3313","text":"3314"},{"range":"3315","text":"2769"},{"range":"3316","text":"2769"},"Replace `
    Resolution:·{TextUtils.resolution(props.scene.file.height)}
    ·:·''` with `(⏎········
    Resolution:·{TextUtils.resolution(props.scene.file.height)}
    ⏎······)·:·(⏎········\"\"⏎······)`",{"range":"3317","text":"3318"},{"range":"3319","text":"2661"},"Replace `props:·ISceneFileInfoPanelProps` with `⏎··props:·ISceneFileInfoPanelProps⏎`",{"range":"3320","text":"3321"},"Replace `{\"file://\"+props.scene.path}` with `⏎··········⏎············{\"file://\"·+·props.scene.path}⏎··········{\"·\"}⏎·······`",{"range":"3322","text":"3323"},"Replace `{props.scene.paths.stream}` with `⏎··········{props.scene.paths.stream}{\"·\"}⏎·······`",{"range":"3324","text":"3325"},{"range":"3326","text":"2668"},{"range":"3327","text":"2668"},{"range":"3328","text":"2668"},"Replace `{props.scene.file.width}·x·{props.scene.file.height}` with `⏎··········{props.scene.file.width}·x·{props.scene.file.height}⏎········`",{"range":"3329","text":"3330"},{"range":"3331","text":"2668"},{"range":"3332","text":"2668"},{"range":"3333","text":"2668"},{"range":"3334","text":"2668"},{"range":"3335","text":"2668"},"Replace `IScenePerformerPanelProps` with `⏎··IScenePerformerPanelProps⏎`",{"range":"3336","text":"3337"},"Replace `(performer)` with `performer`",{"range":"3338","text":"3339"},"Replace `·key={performer.id}·performer={performer}·ageFromDate={props.scene.date}` with `⏎······key={performer.id}⏎······performer={performer}⏎······ageFromDate={props.scene.date}⏎···`",{"range":"3340","text":"3341"},"Replace `⏎········{cards}⏎······` with `{cards}`",{"range":"3342","text":"3343"},{"range":"3344","text":"3170"},"Replace `·FindScenesQuery,·FindScenesVariables,·SlimSceneDataFragment·` with `⏎··FindScenesQuery,⏎··FindScenesVariables,⏎··SlimSceneDataFragment⏎`",{"range":"3345","text":"3346"},{"range":"3347","text":"2659"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel⏎··`",{"range":"3348","text":"3349"},"Replace `singleResult·&&·singleResult.data·&&·singleResult.data.findScenes·&&·singleResult.data.findScenes.scenes.length·===·1` with `⏎········singleResult·&&⏎········singleResult.data·&&⏎········singleResult.data.findScenes·&&⏎········singleResult.data.findScenes.scenes.length·===·1⏎······`",{"range":"3350","text":"3351"},"Replace `result:·QueryHookResult,·selectedIds:·Set` with `⏎····result:·QueryHookResult,⏎····selectedIds:·Set⏎··`",{"range":"3352","text":"3353"},"Replace `·return·undefined;` with `⏎······return·undefined;⏎···`",{"range":"3354","text":"3355"},{"range":"3356","text":"2659"},"Replace `(id)` with `id`",{"range":"3357","text":"3358"},"Replace `(scene)` with `scene`",{"range":"3359","text":"3360"},"Replace `·{·return;·}}` with `···{⏎············return;⏎··········}}⏎········`",{"range":"3361","text":"3362"},"Replace `scene·:·SlimSceneDataFragment,·selectedIds:·Set,·zoomIndex:·number` with `⏎····scene:·SlimSceneDataFragment,⏎····selectedIds:·Set,⏎····zoomIndex:·number⏎··`",{"range":"3363","text":"3364"},"Replace `·listData.onSelectChange(scene.id,·selected,·shiftKey)` with `⏎··········listData.onSelectChange(scene.id,·selected,·shiftKey)⏎········`",{"range":"3365","text":"3366"},{"range":"3367","text":"2808"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel,·selectedIds:·Set,·zoomIndex:·number` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel,⏎····selectedIds:·Set,⏎····zoomIndex:·number⏎··`",{"range":"3368","text":"3369"},{"range":"3370","text":"2668"},"Replace `(scene)·=>·renderSceneCard(scene,·selectedIds,·zoomIndex)` with `scene·=>⏎············renderSceneCard(scene,·selectedIds,·zoomIndex)⏎··········`",{"range":"3371","text":"3372"},{"range":"3373","text":"2693"},{"range":"3374","text":"2659"},"Replace `····` with `··`",{"range":"3375","text":"2695"},{"range":"3376","text":"2659"},{"range":"3377","text":"2659"},{"range":"3378","text":"2808"},"Replace `IScenePlayerProps,·IScenePlayerState` with `⏎··IScenePlayerProps,⏎··IScenePlayerState⏎`",{"range":"3379","text":"3380"},"Replace `scrubberPosition:·0` with `·scrubberPosition:·0·`",{"range":"3381","text":"3382"},{"range":"3383","text":"2659"},{"range":"3384","text":"2659"},{"range":"3385","text":"2659"},"Delete `····`",{"range":"3386","text":"2659"},{"range":"3387","text":"2659"},"Replace `············` with `········`",{"range":"3388","text":"2857"},{"range":"3389","text":"2659"},{"range":"3390","text":"2857"},{"range":"3391","text":"2659"},"Replace `··········` with `······`",{"range":"3392","text":"3393"},{"range":"3394","text":"2659"},"Replace `·?·this.player.getPlaybackRate()` with `⏎······?·this.player.getPlaybackRate()⏎·····`",{"range":"3395","text":"3396"},"Delete `;`",{"range":"3397","text":"2659"},{"range":"3398","text":"3396"},{"range":"3399","text":"2659"},"Replace `·this.player.setPlaybackRate(1);·};` with `⏎····this.player.setPlaybackRate(1);⏎··}`",{"range":"3400","text":"3401"},"Replace `·this.player.getState().paused·?·this.player.play()·:·this.player.pause();·};` with `⏎····this.player.getState().paused·?·this.player.play()·:·this.player.pause();⏎··}`",{"range":"3402","text":"3403"},"Replace `this.onReset()` with `⏎······this.onReset();⏎····`",{"range":"3404","text":"3405"},"Replace `this.onDecrease()` with `⏎······this.onDecrease();⏎····`",{"range":"3406","text":"3407"},"Replace `this.onIncrease()` with `⏎······this.onIncrease();⏎····`",{"range":"3408","text":"3409"},"Replace `this.onPause()` with `⏎······this.onPause();⏎····`",{"range":"3410","text":"3411"},{"range":"3412","text":"2808"},"Replace `·?·this.props.config.maximumLoopDuration` with `⏎······?·this.props.config.maximumLoopDuration⏎·····`",{"range":"3413","text":"3414"},"Replace `·!!scene.file.duration·&&·!!maxLoopDuration·&&·scene.file.duration·<·maxLoopDuration` with `·(⏎······!!scene.file.duration·&&⏎······!!maxLoopDuration·&&⏎······scene.file.duration·<·maxLoopDuration⏎····)`",{"range":"3415","text":"3416"},"Replace `·return·{};` with `⏎······return·{};⏎···`",{"range":"3417","text":"3418"},"Replace `·((seekToPosition:·number,·_videoTag:·any)·=>·void)` with `⏎······|·((seekToPosition:·number,·_videoTag:·any)·=>·void)⏎·····`",{"range":"3419","text":"3420"},"Replace `·((_videoTag:·any)·=>·number)` with `⏎······|·((_videoTag:·any)·=>·number)⏎·····`",{"range":"3421","text":"3422"},"Replace `·(this.props.scene.paths.stream·+·\"?start=\"·+·seekToPosition)` with `⏎··········this.props.scene.paths.stream·+·\"?start=\"·+·seekToPosition`",{"range":"3423","text":"3424"},{"range":"3425","text":"2808"},{"range":"3426","text":"2659"},{"range":"3427","text":"2659"},{"range":"3428","text":"2659"},{"range":"3429","text":"2659"},"Replace `·this.props.autoplay·||` with `⏎········this.props.autoplay·||⏎·······`",{"range":"3430","text":"3431"},"Replace `scrubberPosition:·position` with `·scrubberPosition:·position·`",{"range":"3432","text":"3433"},{"range":"3434","text":"3433"},"Replace `props:·IScenePlayerProps` with `⏎··props:·IScenePlayerProps⏎`",{"range":"3435","text":"3436"},{"range":"3437","text":"2659"},"Replace `··return··goBack()}><` with `⏎········variant=\"link\"⏎········className=\"scrubber-button\"⏎········id=\"scrubber-back\"⏎········onClick={()·=>·goBack()}⏎······>⏎········<⏎······`",{"range":"3534","text":"3535"},"Replace `⏎··············{renderTags()}⏎············` with `{renderTags()}`",{"range":"3536","text":"3537"},"Replace `·className=\"scrubber-button\"·id=\"scrubber-forward\"·onClick={()·=>·goForward()}>>` with `⏎········className=\"scrubber-button\"⏎········id=\"scrubber-forward\"⏎········onClick={()·=>·goForward()}⏎······>⏎········>⏎······`",{"range":"3538","text":"3539"},"Delete `,·{··}`",{"range":"3540","text":"2659"},{"range":"3541","text":"2659"},{"range":"3542","text":"2659"},"Replace `(⏎······⏎····)` with ``",{"range":"3543","text":"3544"},"Replace `·return·\"main-jwplayer\";` with `⏎····return·\"main-jwplayer\";⏎·`",{"range":"3545","text":"3546"},"Replace `'apollo-link-ws'` with `\"apollo-link-ws\"`",{"range":"3547","text":"3548"},"Replace `'apollo-cache-inmemory'` with `\"apollo-cache-inmemory\"`",{"range":"3549","text":"3550"},{"range":"3551","text":"2659"},{"range":"3552","text":"2659"},"Replace `'OperationDefinition'·&&·operation·===·'subscription'` with `\"OperationDefinition\"·&&·operation·===·\"subscription\"`",{"range":"3553","text":"3554"},{"range":"3555","text":"2659"},{"range":"3556","text":"2659"},"Insert `⏎··········`",{"range":"3557","text":"3558"},{"range":"3559","text":"2695"},"Replace `········})` with `··········})⏎········`",{"range":"3560","text":"3561"},{"range":"3562","text":"2659"},{"range":"3563","text":"2659"},{"range":"3564","text":"2659"},{"range":"3565","text":"2659"},{"range":"3566","text":"2659"},{"range":"3567","text":"2659"},{"range":"3568","text":"2659"},{"range":"3569","text":"2659"},{"range":"3570","text":"2659"},{"range":"3571","text":"2659"},{"range":"3572","text":"2659"},{"range":"3573","text":"2659"},{"range":"3574","text":"2659"},"Replace `·return·GQL.useFindGallery({variables:·{id}});` with `⏎····return·GQL.useFindGallery({·variables:·{·id·}·});⏎·`",{"range":"3575","text":"3576"},"Replace `·return·GQL.useFindScene({variables:·{id}});` with `⏎····return·GQL.useFindScene({·variables:·{·id·}·});⏎·`",{"range":"3577","text":"3578"},"Replace `variables:·{id},·skip` with `·variables:·{·id·},·skip·`",{"range":"3579","text":"3580"},{"range":"3581","text":"3580"},{"range":"3582","text":"2659"},"Replace `·variables:·{·scraper_id:·scraperId,·query:·q·},·skip:·q·===·''` with `⏎······variables:·{·scraper_id:·scraperId,·query:·q·},⏎······skip:·q·===·\"\"⏎····`",{"range":"3583","text":"3584"},"Replace `scraperId:·string,·scrapedPerformer·:·GQL.ScrapedPerformerInput` with `⏎····scraperId:·string,⏎····scrapedPerformer:·GQL.ScrapedPerformerInput⏎··`",{"range":"3585","text":"3586"},"Replace `·····return·GQL.useScrapePerformer({·variables:·{·scraper_id:·scraperId,·scraped_performer:·scrapedPerformer·}` with `····return·GQL.useScrapePerformer({⏎······variables:·{·scraper_id:·scraperId,·scraped_performer:·scrapedPerformer·}⏎····`",{"range":"3587","text":"3588"},"Replace `·return·GQL.useScrapeFreeonesPerformers({·variables:·{·q·}·});` with `⏎····return·GQL.useScrapeFreeonesPerformers({·variables:·{·q·}·});⏎·`",{"range":"3589","text":"3590"},"Replace `·return·GQL.useMarkerStrings();` with `⏎····return·GQL.useMarkerStrings();⏎·`",{"range":"3591","text":"3592"},"Replace `·return·GQL.useAllTags();` with `⏎····return·GQL.useAllTags();⏎·`",{"range":"3593","text":"3594"},"Replace `·return·GQL.useAllTagsForFilter();` with `⏎····return·GQL.useAllTagsForFilter();⏎·`",{"range":"3595","text":"3596"},"Replace `·return·GQL.useAllPerformersForFilter();` with `⏎····return·GQL.useAllPerformersForFilter();⏎·`",{"range":"3597","text":"3598"},"Replace `·return·GQL.useAllStudiosForFilter();` with `⏎····return·GQL.useAllStudiosForFilter();⏎·`",{"range":"3599","text":"3600"},"Replace `variables:·{scene_id:·sceneId}` with `·variables:·{·scene_id:·sceneId·}·`",{"range":"3601","text":"3602"},"Replace `·return·GQL.useStats();` with `⏎····return·GQL.useStats();⏎·`",{"range":"3603","text":"3604"},"Replace `·return·GQL.useVersion();` with `⏎····return·GQL.useVersion();⏎·`",{"range":"3605","text":"3606"},"Replace `·return·GQL.useConfiguration();` with `⏎····return·GQL.useConfiguration();⏎·`",{"range":"3607","text":"3608"},"Replace `·return·GQL.useDirectories({·variables:·{·path·}});` with `⏎····return·GQL.useDirectories({·variables:·{·path·}·});⏎·`",{"range":"3609","text":"3610"},"Replace `·StashService.invalidateQueries(StashService.performerMutationImpactedQueries` with `⏎········StashService.invalidateQueries(⏎··········StashService.performerMutationImpactedQueries⏎········`",{"range":"3611","text":"3612"},{"range":"3613","text":"3612"},{"range":"3614","text":"3612"},"Replace `·StashService.invalidateQueries(StashService.sceneMutationImpactedQueries` with `⏎········StashService.invalidateQueries(⏎··········StashService.sceneMutationImpactedQueries⏎········`",{"range":"3615","text":"3616"},"Replace `·StashService.invalidateQueries(StashService.sceneBulkMutationImpactedQueries` with `⏎········StashService.invalidateQueries(⏎··········StashService.sceneBulkMutationImpactedQueries⏎········`",{"range":"3617","text":"3618"},"Replace `·:·input·}` with `:·input·}·`",{"range":"3619","text":"3620"},{"range":"3621","text":"3616"},"Replace `·StashService.invalidateQueries(StashService.studioMutationImpactedQueries` with `⏎········StashService.invalidateQueries(⏎··········StashService.studioMutationImpactedQueries⏎········`",{"range":"3622","text":"3623"},{"range":"3624","text":"3623"},{"range":"3625","text":"3623"},{"range":"3626","text":"2659"},{"range":"3627","text":"2659"},"Insert `⏎·······`",{"range":"3628","text":"3629"},"Replace `·variables:·{·input·},·refetchQueries:·[\"Configuration\"]` with `⏎······variables:·{·input·},⏎······refetchQueries:·[\"Configuration\"]⏎···`",{"range":"3630","text":"3631"},{"range":"3632","text":"3631"},"Replace `'no-cache'` with `\"no-cache\"`",{"range":"3633","text":"3634"},{"range":"3635","text":"3634"},{"range":"3636","text":"2659"},{"range":"3637","text":"2659"},{"range":"3638","text":"2659"},"Replace `scraperId:·string,·scrapedPerformer:·GQL.ScrapedPerformerInput` with `⏎····scraperId:·string,⏎····scrapedPerformer:·GQL.ScrapedPerformerInput⏎··`",{"range":"3639","text":"3586"},{"range":"3640","text":"2659"},{"range":"3641","text":"2659"},{"range":"3642","text":"2659"},{"range":"3643","text":"2659"},{"range":"3644","text":"2659"},{"range":"3645","text":"2659"},"Replace `scraperId:·string,·scene:·GQL.SceneUpdateInput` with `⏎····scraperId:·string,⏎····scene:·GQL.SceneUpdateInput⏎··`",{"range":"3646","text":"3647"},{"range":"3648","text":"2659"},{"range":"3649","text":"2659"},{"range":"3650","text":"2659"},{"range":"3651","text":"2659"},{"range":"3652","text":"2659"},{"range":"3653","text":"2659"},{"range":"3654","text":"2659"},{"range":"3655","text":"2659"},"Replace `filter:·filter},` with `·filter:·filter·}`",{"range":"3656","text":"3657"},"Replace `filter:·GQL.FindFilterType,·config:·GQL.SceneParserInput` with `⏎····filter:·GQL.FindFilterType,⏎····config:·GQL.SceneParserInput⏎··`",{"range":"3658","text":"3659"},"Replace `filter:·filter,·config:·config` with `·filter:·filter,·config:·config·`",{"range":"3660","text":"3661"},{"range":"3662","text":"2659"},{"range":"3663","text":"2659"},"Replace `IInterfaceConfig·|·undefined` with `⏎··IInterfaceConfig·|·undefined⏎`",{"range":"3664","text":"3665"},{"range":"3666","text":"2659"},"Replace `data:·json,·setData:·setJson,·error:·err` with `·data:·json,·setData:·setJson,·error:·err·`",{"range":"3667","text":"3668"},"Replace `options:·IVideoHoverHookOptions` with `⏎····options:·IVideoHoverHookOptions⏎··`",{"range":"3669","text":"3670"},"Replace `·!!config.data·&&·!!config.data.configuration·?·config.data.configuration.interface.soundOnPreview` with `⏎······!!config.data·&&·!!config.data.configuration⏎········?·config.data.configuration.interface.soundOnPreview⏎·······`",{"range":"3671","text":"3672"},{"range":"3673","text":"3036"},"Replace `isPlaying.current·=·false` with `(isPlaying.current·=·false)`",{"range":"3674","text":"3675"},{"range":"3676","text":"3036"},"Replace `videoEl,·isPlaying,·isHovering,·options` with `·videoEl,·isPlaying,·isHovering,·options·`",{"range":"3677","text":"3678"},{"range":"3679","text":"2668"},"Replace `(error)` with `error`",{"range":"3680","text":"3681"},{"range":"3682","text":"2668"},"Delete `(`",{"range":"3683","text":"2659"},"Replace `⏎),·document.getElementById(\"root\")` with `,⏎··document.getElementById(\"root\")⏎`",{"range":"3684","text":"3685"},"Replace `\"none\"·|⏎··\"rating\"·|⏎··\"resolution\"·|` with `|·\"none\"⏎··|·\"rating\"⏎··|·\"resolution\"`",{"range":"3686","text":"3687"},"Replace `\"favorite\"·|` with `|·\"favorite\"`",{"range":"3688","text":"3689"},"Replace `\"hasMarkers\"·|⏎··\"isMissing\"·|⏎··\"tags\"·|⏎··\"sceneTags\"·|⏎··\"performers\"·|⏎··\"studios\"·|⏎··\"birth_year\"·|⏎··\"age\"·|` with `|·\"hasMarkers\"⏎··|·\"isMissing\"⏎··|·\"tags\"⏎··|·\"sceneTags\"⏎··|·\"performers\"⏎··|·\"studios\"⏎··|·\"birth_year\"⏎··|·\"age\"`",{"range":"3690","text":"3691"},"Replace `·\"ethnicity\"·|` with `·|·\"ethnicity\"`",{"range":"3692","text":"3693"},"Replace `·\"country\"·|⏎··\"eye_color\"·|⏎··\"height\"·|⏎··\"measurements\"·|⏎··\"fake_tits\"·|⏎··\"career_length\"·|` with `·|·\"country\"⏎··|·\"eye_color\"⏎··|·\"height\"⏎··|·\"measurements\"⏎··|·\"fake_tits\"⏎··|·\"career_length\"`",{"range":"3694","text":"3695"},"Replace `\"tattoos\"·|⏎··\"piercings\"·|⏎·` with `|·\"tattoos\"⏎··|·\"piercings\"⏎··|`",{"range":"3696","text":"3697"},{"range":"3698","text":"3629"},{"range":"3699","text":"3629"},{"range":"3700","text":"3629"},{"range":"3701","text":"3629"},{"range":"3702","text":"3629"},{"range":"3703","text":"3629"},{"range":"3704","text":"3629"},{"range":"3705","text":"3629"},{"range":"3706","text":"3629"},{"range":"3707","text":"3629"},{"range":"3708","text":"3629"},{"range":"3709","text":"3629"},{"range":"3710","text":"3629"},{"range":"3711","text":"3629"},{"range":"3712","text":"3629"},{"range":"3713","text":"3629"},{"range":"3714","text":"3629"},{"range":"3715","text":"3629"},{"range":"3716","text":"3629"},{"range":"3717","text":"3629"},{"range":"3718","text":"3629"},{"range":"3719","text":"3629"},"Replace `modifier:·CriterionModifier·=·CriterionModifier.Equals` with `⏎····modifier:·CriterionModifier·=·CriterionModifier.Equals⏎··`",{"range":"3720","text":"3721"},"Replace `·return·{value:·CriterionModifier.Equals,·label:·\"Equals\"` with `⏎········return·{·value:·CriterionModifier.Equals,·label:·\"Equals\"·`",{"range":"3722","text":"3723"},"Replace `·return·{value:·CriterionModifier.NotEquals,·label:·\"Not·Equals\"` with `⏎········return·{·value:·CriterionModifier.NotEquals,·label:·\"Not·Equals\"·`",{"range":"3724","text":"3725"},"Replace `·return·{value:·CriterionModifier.GreaterThan,·label:·\"Greater·Than\"` with `⏎········return·{·value:·CriterionModifier.GreaterThan,·label:·\"Greater·Than\"·`",{"range":"3726","text":"3727"},"Replace `·return·{value:·CriterionModifier.LessThan,·label:·\"Less·Than\"` with `⏎········return·{·value:·CriterionModifier.LessThan,·label:·\"Less·Than\"·`",{"range":"3728","text":"3729"},"Replace `·return·{value:·CriterionModifier.IsNull,·label:·\"Is·NULL\"` with `⏎········return·{·value:·CriterionModifier.IsNull,·label:·\"Is·NULL\"·`",{"range":"3730","text":"3731"},"Replace `·return·{value:·CriterionModifier.NotNull,·label:·\"Not·NULL\"` with `⏎········return·{·value:·CriterionModifier.NotNull,·label:·\"Not·NULL\"·`",{"range":"3732","text":"3733"},"Replace `·return·{value:·CriterionModifier.IncludesAll,·label:·\"Includes·All\"` with `⏎········return·{·value:·CriterionModifier.IncludesAll,·label:·\"Includes·All\"·`",{"range":"3734","text":"3735"},"Replace `·return·{value:·CriterionModifier.Includes,·label:·\"Includes\"` with `⏎········return·{·value:·CriterionModifier.Includes,·label:·\"Includes\"·`",{"range":"3736","text":"3737"},"Replace `·return·{value:·CriterionModifier.Excludes,·label:·\"Excludes\"` with `⏎········return·{·value:·CriterionModifier.Excludes,·label:·\"Excludes\"·`",{"range":"3738","text":"3739"},"Replace `·modifierString·=·\"is\";` with `⏎········modifierString·=·\"is\";⏎·······`",{"range":"3740","text":"3741"},"Replace `·modifierString·=·\"is·not\";` with `⏎········modifierString·=·\"is·not\";⏎·······`",{"range":"3742","text":"3743"},"Replace `·modifierString·=·\"is·greater·than\";` with `⏎········modifierString·=·\"is·greater·than\";⏎·······`",{"range":"3744","text":"3745"},"Replace `·modifierString·=·\"is·less·than\";` with `⏎········modifierString·=·\"is·less·than\";⏎·······`",{"range":"3746","text":"3747"},"Replace `·modifierString·=·\"is·null\";` with `⏎········modifierString·=·\"is·null\";⏎·······`",{"range":"3748","text":"3749"},"Replace `·modifierString·=·\"is·not·null\";` with `⏎········modifierString·=·\"is·not·null\";⏎·······`",{"range":"3750","text":"3751"},"Replace `·modifierString·=·\"includes\";` with `⏎········modifierString·=·\"includes\";⏎·······`",{"range":"3752","text":"3753"},"Replace `·modifierString·=·\"includes·all\";` with `⏎········modifierString·=·\"includes·all\";⏎·······`",{"range":"3754","text":"3755"},"Replace `·modifierString·=·\"excludes\";` with `⏎········modifierString·=·\"excludes\";⏎·······`",{"range":"3756","text":"3757"},{"range":"3758","text":"3629"},"Replace `this.modifier·===·CriterionModifier.IsNull·||·this.modifier·===·CriterionModifier.NotNull` with `⏎······this.modifier·===·CriterionModifier.IsNull·||⏎······this.modifier·===·CriterionModifier.NotNull⏎····`",{"range":"3759","text":"3760"},"Replace `(item)` with `item`",{"range":"3761","text":"3762"},"Replace `·:·string,·value·` with `:·string,·value`",{"range":"3763","text":"3764"},{"range":"3765","text":"2659"},"Replace `·:·CriterionType,·parameterName?:·string,·options?·` with `:·CriterionType,·parameterName?:·string,·options?`",{"range":"3766","text":"3767"},{"range":"3768","text":"2659"},{"range":"3769","text":"3767"},"Replace `⏎··Criterion,⏎··CriterionType,⏎··ICriterionOption,⏎` with `·Criterion,·CriterionType,·ICriterionOption·`",{"range":"3770","text":"3771"},{"range":"3772","text":"3771"},{"range":"3773","text":"3771"},"Replace `\"title\",·\"url\",·\"date\",·\"gallery\",·\"studio\",·\"performers\"` with `⏎····\"title\",⏎····\"url\",⏎····\"date\",⏎····\"gallery\",⏎····\"studio\",⏎····\"performers\"⏎··`",{"range":"3774","text":"3775"},{"range":"3776","text":"3771"},{"range":"3777","text":"3771"},{"range":"3778","text":"2659"},{"range":"3779","text":"3771"},"Insert `⏎·`",{"range":"3780","text":"3781"},{"range":"3782","text":"2659"},{"range":"3783","text":"3771"},{"range":"3784","text":"3781"},{"range":"3785","text":"3771"},{"range":"3786","text":"2659"},{"range":"3787","text":"3771"},"Replace `GQL.AllTagsForFilterAllTags,·ILabeledId[]` with `⏎··GQL.AllTagsForFilterAllTags,⏎··ILabeledId[]⏎`",{"range":"3788","text":"3789"},{"range":"3790","text":"2659"},"Replace `⏎··CriterionModifier,⏎` with `·CriterionModifier·`",{"range":"3791","text":"3792"},"Replace `·Criterion,·CriterionType,·StringCriterion,·NumberCriterion·` with `⏎··Criterion,⏎··CriterionType,⏎··StringCriterion,⏎··NumberCriterion⏎`",{"range":"3793","text":"3794"},"Insert `⏎·····`",{"range":"3795","text":"3796"},{"range":"3797","text":"3796"},{"range":"3798","text":"3796"},{"range":"3799","text":"3796"},{"range":"3800","text":"3796"},{"range":"3801","text":"3796"},{"range":"3802","text":"3796"},{"range":"3803","text":"3796"},{"range":"3804","text":"3796"},{"range":"3805","text":"3796"},"Replace `········` with `······`",{"range":"3806","text":"3393"},{"range":"3807","text":"2659"},{"range":"3808","text":"2659"},{"range":"3809","text":"2857"},{"range":"3810","text":"2659"},{"range":"3811","text":"2659"},{"range":"3812","text":"2857"},{"range":"3813","text":"2659"},{"range":"3814","text":"2659"},{"range":"3815","text":"2659"},"Replace `·Criterion,·ICriterionOption,·CriterionType,·CriterionOption,·NumberCriterion,·StringCriterion·` with `⏎··Criterion,⏎··ICriterionOption,⏎··CriterionType,⏎··CriterionOption,⏎··NumberCriterion,⏎··StringCriterion⏎`",{"range":"3816","text":"3817"},"Replace `·FavoriteCriterion,·FavoriteCriterionOption·` with `⏎··FavoriteCriterion,⏎··FavoriteCriterionOption⏎`",{"range":"3818","text":"3819"},"Replace `·HasMarkersCriterion,·HasMarkersCriterionOption·` with `⏎··HasMarkersCriterion,⏎··HasMarkersCriterionOption⏎`",{"range":"3820","text":"3821"},"Replace `·IsMissingCriterion,·IsMissingCriterionOption·` with `⏎··IsMissingCriterion,⏎··IsMissingCriterionOption⏎`",{"range":"3822","text":"3823"},"Replace `·PerformersCriterion,·PerformersCriterionOption·` with `⏎··PerformersCriterion,⏎··PerformersCriterionOption⏎`",{"range":"3824","text":"3825"},"Replace `·ResolutionCriterion,·ResolutionCriterionOption·` with `⏎··ResolutionCriterion,⏎··ResolutionCriterionOption⏎`",{"range":"3826","text":"3827"},"Replace `·SceneTagsCriterionOption,·TagsCriterion,·TagsCriterionOption·` with `⏎··SceneTagsCriterionOption,⏎··TagsCriterion,⏎··TagsCriterionOption⏎`",{"range":"3828","text":"3829"},"Replace `⏎··DisplayMode,⏎··FilterMode,⏎` with `·DisplayMode,·FilterMode·`",{"range":"3830","text":"3831"},"Replace `·this.sortBy·=·\"date\";` with `⏎··········this.sortBy·=·\"date\";⏎·······`",{"range":"3832","text":"3833"},"Replace `\"title\",·\"path\",·\"rating\",·\"date\",·\"filesize\",·\"duration\",·\"framerate\",·\"bitrate\",·\"random\"` with `⏎··········\"title\",⏎··········\"path\",⏎··········\"rating\",⏎··········\"date\",⏎··········\"filesize\",⏎··········\"duration\",⏎··········\"framerate\",⏎··········\"bitrate\",⏎··········\"random\"⏎········`",{"range":"3834","text":"3835"},{"range":"3836","text":"2659"},{"range":"3837","text":"2659"},"Replace `·this.sortBy·=·\"name\";` with `⏎··········this.sortBy·=·\"name\";⏎·······`",{"range":"3838","text":"3839"},"Replace `⏎··········DisplayMode.Grid,⏎··········DisplayMode.List,⏎········` with `DisplayMode.Grid,·DisplayMode.List`",{"range":"3840","text":"3841"},{"range":"3842","text":"2659"},{"range":"3843","text":"2659"},"Replace `numberCriteria.concat(stringCriteria).map((c)` with `⏎··········numberCriteria.concat(stringCriteria).map(c`",{"range":"3844","text":"3845"},{"range":"3846","text":"2695"},{"range":"3847","text":"3561"},{"range":"3848","text":"3839"},"Replace `⏎··········DisplayMode.Grid,⏎········` with `DisplayMode.Grid`",{"range":"3849","text":"3850"},"Replace `⏎··········new·NoneCriterionOption(),⏎········` with `new·NoneCriterionOption()`",{"range":"3851","text":"3852"},"Replace `·this.sortBy·=·\"path\";` with `⏎··········this.sortBy·=·\"path\";⏎·······`",{"range":"3853","text":"3854"},"Replace `⏎··········DisplayMode.List,⏎········` with `DisplayMode.List`",{"range":"3855","text":"3856"},{"range":"3857","text":"3852"},"Replace `·this.sortBy·=·\"title\";` with `⏎··········this.sortBy·=·\"title\";⏎·······`",{"range":"3858","text":"3859"},"Replace `\"title\",·\"seconds\",·\"scene_id\",·\"random\",·\"scenes_updated_at\"` with `⏎··········\"title\",⏎··········\"seconds\",⏎··········\"scene_id\",⏎··········\"random\",⏎··········\"scenes_updated_at\"⏎········`",{"range":"3860","text":"3861"},"Replace `⏎··········DisplayMode.Wall,⏎········` with `DisplayMode.Wall`",{"range":"3862","text":"3863"},{"range":"3864","text":"2659"},{"range":"3865","text":"3852"},"Replace `·this.displayMode·=·this.displayModeOptions[0];` with `⏎······this.displayMode·=·this.displayModeOptions[0];⏎···`",{"range":"3866","text":"3867"},"Replace `(rawParms)⏎·····` with `·(rawParms)`",{"range":"3868","text":"3869"},{"range":"3870","text":"3088"},{"range":"3871","text":"2659"},"Replace `encode:·false` with `·encode:·false·`",{"range":"3872","text":"3873"},"Replace `·this.sortDirection·===·\"asc\"·?·SortDirectionEnum.Asc·:·SortDirectionEnum.Desc,` with `⏎········this.sortDirection·===·\"asc\"⏎··········?·SortDirectionEnum.Asc⏎··········:·SortDirectionEnum.Desc`",{"range":"3874","text":"3875"},"Replace `((criterion)` with `(criterion`",{"range":"3876","text":"3877"},"Replace `·value:·ratingCrit.value,·modifier:·ratingCrit.modifier` with `⏎············value:·ratingCrit.value,⏎············modifier:·ratingCrit.modifier⏎·········`",{"range":"3878","text":"3879"},"Replace `·result.resolution·=·ResolutionEnum.Low;` with `⏎··············result.resolution·=·ResolutionEnum.Low;⏎·············`",{"range":"3880","text":"3881"},"Replace `·result.resolution·=·ResolutionEnum.Standard;` with `⏎··············result.resolution·=·ResolutionEnum.Standard;⏎·············`",{"range":"3882","text":"3883"},"Replace `·result.resolution·=·ResolutionEnum.StandardHd;` with `⏎··············result.resolution·=·ResolutionEnum.StandardHd;⏎·············`",{"range":"3884","text":"3885"},"Replace `·result.resolution·=·ResolutionEnum.FullHd;` with `⏎··············result.resolution·=·ResolutionEnum.FullHd;⏎·············`",{"range":"3886","text":"3887"},"Replace `·result.resolution·=·ResolutionEnum.FourK;` with `⏎··············result.resolution·=·ResolutionEnum.FourK;⏎·············`",{"range":"3888","text":"3889"},"Replace `·value:·tagsCrit.value.map((tag)·=>·tag.id),·modifier:·tagsCrit.modifier` with `⏎············value:·tagsCrit.value.map(tag·=>·tag.id),⏎············modifier:·tagsCrit.modifier⏎·········`",{"range":"3890","text":"3891"},"Replace `·value:·perfCrit.value.map((perf)·=>·perf.id),·modifier:·perfCrit.modifier` with `⏎············value:·perfCrit.value.map(perf·=>·perf.id),⏎············modifier:·perfCrit.modifier⏎·········`",{"range":"3892","text":"3893"},"Replace `·value:·studCrit.value.map((studio)·=>·studio.id),·modifier:·studCrit.modifier` with `⏎············value:·studCrit.value.map(studio·=>·studio.id),⏎············modifier:·studCrit.modifier⏎·········`",{"range":"3894","text":"3895"},{"range":"3896","text":"3088"},"Insert `⏎···········`",{"range":"3897","text":"3898"},"Replace `·value:·byCrit.value,·modifier:·byCrit.modifier` with `⏎············value:·byCrit.value,⏎············modifier:·byCrit.modifier⏎·········`",{"range":"3899","text":"3900"},"Replace `·value:·ethCrit.value,·modifier:·ethCrit.modifier` with `⏎············value:·ethCrit.value,⏎············modifier:·ethCrit.modifier⏎·········`",{"range":"3901","text":"3902"},"Replace `·value:·cntryCrit.value,·modifier:·cntryCrit.modifier` with `⏎············value:·cntryCrit.value,⏎············modifier:·cntryCrit.modifier⏎·········`",{"range":"3903","text":"3904"},"Replace `·value:·mCrit.value,·modifier:·mCrit.modifier` with `⏎············value:·mCrit.value,⏎············modifier:·mCrit.modifier⏎·········`",{"range":"3905","text":"3906"},"Replace `·value:·clCrit.value,·modifier:·clCrit.modifier` with `⏎············value:·clCrit.value,⏎············modifier:·clCrit.modifier⏎·········`",{"range":"3907","text":"3908"},{"range":"3909","text":"3088"},{"range":"3910","text":"3891"},"Replace `·value:·sceneTagsCrit.value.map((tag)·=>·tag.id),·modifier:·sceneTagsCrit.modifier` with `⏎············value:·sceneTagsCrit.value.map(tag·=>·tag.id),⏎············modifier:·sceneTagsCrit.modifier⏎·········`",{"range":"3911","text":"3912"},"Replace `·value:·performersCrit.value.map((performer)·=>·performer.id),·modifier:·performersCrit.modifier` with `⏎············value:·performersCrit.value.map(performer·=>·performer.id),⏎············modifier:·performersCrit.modifier⏎·········`",{"range":"3913","text":"3914"},{"range":"3915","text":"2659"},{"range":"3916","text":"2659"},{"range":"3917","text":"2659"},{"range":"3918","text":"2659"},{"range":"3919","text":"2659"},{"range":"3920","text":"2659"},"Replace `(registration)` with `registration`",{"range":"3921","text":"3922"},{"range":"3923","text":"2659"},"Replace `((error)` with `(error`",{"range":"3924","text":"3925"},"Replace `(response)` with `response`",{"range":"3926","text":"3927"},"Replace `((registration)` with `(registration`",{"range":"3928","text":"3929"},{"range":"3930","text":"2659"},{"range":"3931","text":"3922"},"Replace `performer:·Partial` with `⏎··performer:·Partial⏎`",{"range":"3932","text":"3933"},"Delete `⏎···`",{"range":"3934","text":"2659"},"Replace `{·id:·performer.id,·label:·performer.name·||·`Performer·${performer.id}`·}` with `⏎····{·id:·performer.id,·label:·performer.name·||·`Performer·${performer.id}`·}⏎··`",{"range":"3935","text":"3936"},{"range":"3937","text":"2808"},{"range":"3938","text":"2659"},"Replace `{·id:·studio.id,·label:·studio.name·||·`Studio·${studio.id}`·}` with `⏎····{·id:·studio.id,·label:·studio.name·||·`Studio·${studio.id}`·}⏎··`",{"range":"3939","text":"3940"},{"range":"3941","text":"2808"},{"range":"3942","text":"2659"},{"range":"3943","text":"2808"},{"range":"3944","text":"2659"},{"range":"3945","text":"2808"},"Replace `sceneMarker:·Partial` with `⏎··sceneMarker:·Partial⏎`",{"range":"3946","text":"3947"},{"range":"3948","text":"2659"},{"range":"3949","text":"2808"},{"range":"3950","text":"2808"},"Replace `⏎··\"bytes\",⏎··\"kB\",⏎··\"MB\",⏎··\"GB\",⏎··\"TB\",⏎··\"PB\",⏎` with `\"bytes\",·\"kB\",·\"MB\",·\"GB\",·\"TB\",·\"PB\"`",{"range":"3951","text":"3952"},"Replace `value?:·string,·limit:·number·=·100,·tail:·string·=·\"...\"` with `⏎··value?:·string,⏎··limit:·number·=·100,⏎··tail:·string·=·\"...\"⏎`",{"range":"3953","text":"3954"},{"range":"3955","text":"2659"},"Replace `⏎····?·value.substring(0,·limit)·+·tail⏎···` with `·?·value.substring(0,·limit)·+·tail`",{"range":"3956","text":"3957"},{"range":"3958","text":"2808"},{"range":"3959","text":"2659"},"Replace `·bytes·>=·1024·` with `bytes·>=·1024`",{"range":"3960","text":"3961"},{"range":"3962","text":"2808"},{"range":"3963","text":"2808"},{"range":"3964","text":"2659"},{"range":"3965","text":"2808"},{"range":"3966","text":"2659"},{"range":"3967","text":"3466"},"Replace `······(birthdate.getMonth()·>=·fromDate.getMonth()·&&·birthdate.getDay()·>·fromDate.getDay())` with `····(birthdate.getMonth()·>=·fromDate.getMonth()·&&⏎······birthdate.getDay()·>·fromDate.getDay())⏎··`",{"range":"3968","text":"3969"},{"range":"3970","text":"2808"},{"range":"3971","text":"2808"},{"range":"3972","text":"2808"},{"range":"3973","text":"2808"},"Replace `'react'` with `\"react\"`",{"range":"3974","text":"3975"},"Replace `'@fortawesome/react-fontawesome'` with `\"@fortawesome/react-fontawesome\"`",{"range":"3976","text":"3977"},{"range":"3978","text":"2684"},"Replace `'./Select'` with `\"./Select\"`",{"range":"3979","text":"3980"},"Replace `'./Icon'` with `\"./Icon\"`",{"range":"3981","text":"3982"},"Replace `'./Modal'` with `\"./Modal\"`",{"range":"3983","text":"3984"},"Replace `'./DetailsEditNavbar'` with `\"./DetailsEditNavbar\"`",{"range":"3985","text":"3986"},"Replace `'./DurationInput'` with `\"./DurationInput\"`",{"range":"3987","text":"3988"},"Replace `'./TagLink'` with `\"./TagLink\"`",{"range":"3989","text":"3990"},"Replace `'./Toast'` with `\"./Toast\"`",{"range":"3991","text":"3992"},"Replace `'./LocalForage'` with `\"./LocalForage\"`",{"range":"3993","text":"3994"},"Replace `'./VideoHover'` with `\"./VideoHover\"`",{"range":"3995","text":"3996"},"Replace `·useScenesList,·useSceneMarkersList,·useGalleriesList,·useStudiosList,·usePerformersList·}·from·'./ListHook'` with `⏎··useScenesList,⏎··useSceneMarkersList,⏎··useGalleriesList,⏎··useStudiosList,⏎··usePerformersList⏎}·from·\"./ListHook\"`",{"range":"3997","text":"3998"},"Replace `'./image'` with `\"./image\"`",{"range":"3999","text":"4000"},"Replace `'./navigation'` with `\"./navigation\"`",{"range":"4001","text":"4002"},"Replace `'./table'` with `\"./table\"`",{"range":"4003","text":"4004"},"Replace `'./text'` with `\"./text\"`",{"range":"4005","text":"4006"},[724,741],"\"src/hooks/Toast\"",[768,803],"\"@fortawesome/fontawesome-svg-core\";",[824,859],"\"@fortawesome/free-solid-svg-icons\";",[868,906],"\"bootstrap/dist/css/bootstrap.min.css\"",[1606,1666],"\n path=\"/sceneFilenameParser\"\n component={SceneFilenameParser}\n ",[298,299],"",[49,66],"\"react-bootstrap\"",[171,215],"\n FindGalleriesQuery,\n FindGalleriesVariables\n",[524,525],[558,650],"\n result: QueryHookResult,\n filter: ListFilterModel\n ",[707,715],"\n return;\n ",[893,909]," margin: \"0 auto\" ",[1115,1124],"gallery",[1292,1362],"(\n \"\"\n ) : (\n undefined\n )",[1432,1491],"\n {gallery.path}\n ",[485,540],"\n _event: React.MouseEvent,\n obj: { index: number }\n ",[870,922],"file => ({\n src: file.path || \"\",\n caption: file.name\n ",[962,1031],"file => ({\n src: `${file.path}?thumb=true` || \"\",\n width: 1,\n height: 1\n ",[107,142],"\"@fortawesome/fontawesome-svg-core\"",[174,198],"\"react-router-bootstrap\"",[276,299],"\"src/components/Shared\";",[325,327],[341,343],[361,363],[398,398]," ",[414,414]," ",[418,418],[441,441],[457,457],[475,475],[478,478],[480,482]," ",[507,507],[533,533],[551,551],[554,554],[556,558],[578,578],[597,597],[615,615],[618,618],[620,620],[645,645],[659,659],[680,680],[683,683],[685,685],[707,707],[722,724],[740,740],[743,743],[745,745],[762,764],[777,777],[792,792],[891,927],"\n location.pathname === \"/performers\"",[932,951]," ? \"/performers/new\"",[952,990]," : location.pathname === \"/studios\"",[999,1013],"\"/studios/new\"\n ",[1041,1060],"\n path === null ? (\n \"\"\n )",[1065,1065],[1095,1095],[1144,1144],[1161,1161],[1284,1286],[1432,1435],"i",[1818,1851]," exact={true}",[1868,1870],[1921,1923],[1943,1945],[115,149],"

    Page not found.

    ",[58,75],[335,343],[522,530],[555,555],[577,577],[585,595]," ",[624,624],[629,641]," ",[662,662],[703,713],[729,729],[734,734],[767,767],[824,824],[830,830],[847,847],[997,999],"\"\"",[1045,1047],[70,87],[168,179],"\"src/hooks\"",[549,587],"\n sprites,\n previews,\n markers,\n transcodes\n ",[743,857],"\n id=\"sprite-task\"\n checked={sprites}\n label=\"Sprites (for the scene scrubber)\"\n onChange={() => setSprites(!sprites)}\n ",[878,1027],"\n id=\"preview-task\"\n checked={previews}\n label=\"Previews (video previews which play when hovering over a scene)\"\n onChange={() => setPreviews(!previews)}\n ",[1048,1190],"\n id=\"marker-task\"\n checked={markers}\n label=\"Markers (20 second videos which begin at the given timecode)\"\n onChange={() => setMarkers(!markers)}\n ",[1211,1362],"\n id=\"transcode-task\"\n checked={transcodes}\n label=\"Transcodes (MP4 conversions of unsupported video formats)\"\n onChange={() => setTranscodes(!transcodes)}\n ",[1437,1445],"\n Generate\n ",[1495,1557],"\n Generate supporting image, sprite, video, vtt and other files.\n ",[94,111],[233,244],[268,291],"\"src/components/Shared\"",[1114,1115],[1137,1137],[2421,2441],"\n jobStatus.refetch();\n ",[2591,2618],"\"Import\", variant: \"danger\"",[2768,2827],"This will delete the database and\n re-import from",[2997,3017],[3165,3191],"\"Clean\", variant: \"danger\"",[3337,3458]," This will delete db information and\n generated content for all scenes that are no longer found in the\n ",[3593,3625],"\n useFileMetadata: useFileMetadata\n ",[3972,3972],";",[4370,4478],"\n id=\"stop\"\n variant=\"danger\"\n onClick={() =>\n StashService.queryStopJob().then(() => jobStatus.refetch())\n }\n >\n Stop\n ",[4579,4579],[4592,4592],[4637,4717],"status !== \"Idle\" ? (\n \n ) : (\n \"\"\n )",[4719,4719],[4739,4739],[5238,5242],"\n Scan\n ",[5294,5342],"\n Scan for new content and add it to the database.\n ",[5971,5979],"\n Auto Tag\n ",[6031,6067],"\n Auto-tag content based on filenames.\n ",[6355,6431],"\n id=\"clean\"\n variant=\"danger\"\n onClick={() => setIsCleanAlertOpen(true)}\n >\n Clean\n ",[6483,6571],"\n Check for missing files and remove them from the database. This is a\n destructive action.\n ",[6677,6795],"\n id=\"export\"\n type=\"submit\"\n onClick={() =>\n StashService.queryMetadataExport().then(() => {\n jobStatus.refetch();\n })\n }\n >\n Export\n ",[6847,6892],"\n Export the database content into JSON format.\n ",[6960,7039],"\n id=\"import\"\n variant=\"danger\"\n onClick={() => setIsImportAlertOpen(true)}\n >\n Import\n ",[7091,7148],"\n Import from exported JSON. This is a destructive action.\n ",[8,91],"\n Button,\n Form,\n Modal,\n Nav,\n Navbar,\n OverlayTrigger,\n Popover\n} from \"react-bootstrap\"",[725,780],"\n scraper: GQL.ListPerformerScrapersListPerformerScrapers\n ",[999,1007],[1036,1114]," variant=\"primary\" onClick={() => props.onToggleEdit()}",[1125,1126],[1250,1258],[1271,1342]," (\n \n )",[1424,1432],[1445,1529]," (\n \n )",[1595,1605],"\n return;",[1610,1610],"}\n ",[1621,1623],[1665,1675]," ",[1724,1807],"\n props.onDisplayScraperDialog &&\n props.onDisplayScraperDialog(s)\n }\n ",[2218,2218],[2257,2257],[2276,2283]," ))\n : \"\"",[2595,2603],[2649,2656],"\n \n Auto Tag\n \n );",[2824,2832],[3067,3129],"Scenes",[3340,3380]," show={isDeleteAlertOpen}",[3402,3461],"Are you sure you want to delete {name}?",[3558,3564],"\n Delete\n ",[3591,3662],"\n variant=\"secondary\"\n onClick={() => setIsDeleteAlertOpen(false)}\n >\n Cancel\n ",[3723,3724],[3742,3742],[3772,3772],[3791,3791],[4063,4063],[4070,4070],[106,123],[146,169],[249,249],[272,272],[317,317],[336,336],[453,488],"\n secondsToString(props.numericValue)\n ",[626,627],[880,881],[1064,1064],[1681,1711]," vertical={true}",[1728,1811]," disabled={props.disabled} onClick={() => increment()}",[1883,1966]," disabled={props.disabled} onClick={() => decrement()}",[2051,2051],[2226,2271]," onClick={() => onReset()}",[2330,2330],[2493,2494],[2682,2702],"maybeRenderReset()",[2715,2732],"renderButtons()",[2804,2804],[22,39],[117,182],"\n PerformerDataFragment,\n SceneMarkerDataFragment,\n TagDataFragment\n",[916,941],"\n props.marker.seconds || 0\n ",[971,1029]," className=\"tag-item\" variant=\"secondary\"",[24,41],[314,322],[1532,1554],"{!data || loading ? (",[1555,1557],[1628,1630],[1674,1706],"
    \n ) : (\n undefined\n )",[21,38],[298,327]," className=\"col-4\"",[439,483]," backgroundImage: `url(${studio.image_path})` ",[570,603],"{studio.name}",[89,129],"\n FindStudiosQuery,\n FindStudiosVariables\n",[476,477],[510,598],"\n result: QueryHookResult,\n filter: ListFilterModel\n ",[653,661],[808,867],"studio => (\n \n ",[527,588],"\n item: GQL.SlimSceneDataFragment | GQL.SceneMarkerDataFragment\n ",[662,683],"\n props: IWallItemProps\n",[1107,1130],"\n resetOnMouseLeave: true\n ",[1161,1258],"\n !!config.data && !!config.data.configuration\n ? config.data.configuration.interface.wallShowTitle\n ",[1922,1930],[2585,2589],"\"10\"",[2604,2604],[2671,2673],[2799,2889],"\n `${props.sceneMarker!.title} - ${TextUtils.secondsToTimestamp(\n props.sceneMarker.seconds\n )}`\n ",[2942,2988],"tag => (\n {tag.name}\n ",[3015,3103],"\n \n {props.sceneMarker.primary_tag.name}\n \n ",[3664,3696],"\n className.push(\"double-scale\");\n ",[3763,3801],"\n style.transformOrigin = props.origin;\n ",[4328,4343]," display: \"none\" ",[4466,4550],"\n alt=\"Preview\"\n src={previewPath || screenshotPath}\n onError={() => previewNotFound()}\n ",[4584,4584]," (",[4673,4689]," lineHeight: 1 }}>{title}
    ",[4704,4712],"{tags",[4714,4716],[4745,4755],") : (",[4768,4779],[4790,4790],")",[307,368],[444,466],"\n props: IWallPanelProps\n",[867,881],"\n return \"top\";\n ",[906,925],"\n return \"top left\";\n ",[1004,1024],"\n return \"top right\";\n ",[1053,1067],[1130,1153],"\n return \"bottom right\";\n ",[1205,1227],"\n return \"bottom left\";\n ",[1292,1309],"\n return \"bottom\";\n ",[1369,1386],[1433,1455],"\n return \"center left\";\n ",[1476,1499],"\n return \"center right\";\n ",[1598,1606],[2020,2028],[145,162],"\"react-bootstrap\";",[184,207],[281,307],"\n Criterion,\n CriterionType\n",[1080,1102],"\n props: IAddFilterProps\n",[1129,1152]," = useRef\n ",[2671,2758],"\n criterion.options &&\n (value === undefined || value === \"\" || typeof value === \"number\")\n ",[3034,3067],"\n ? props.editingCriterion.getId()\n ",[3368,3376],[3463,3471],"\n return;\n ",[3662,3663],[3700,3702],[3944,4043],"\n criterion.modifier === CriterionModifier.IsNull ||\n criterion.modifier === CriterionModifier.NotNull\n ",[4559,4634],"items =>\n (criterion.value = items.map(i => ({ id: i.id, label: i.name! })))\n ",[5018,5019],[5048,5066]," ",[5404,5404],[5471,5509],"{renderModifier()}",[5543,5579],"{renderSelect()}",[5688,5696],[5909,5909],"\n ",[5922,5923],[5964,5966],[6316,6388]," onClick={() => onToggle()} active={isOpen}",[6478,6508]," show={isOpen}",[6873,6880],"\n {title}\n ",[113,206],"\n Badge,\n Button,\n ButtonGroup,\n Dropdown,\n Form,\n OverlayTrigger,\n Tooltip\n} from \"react-bootstrap\"",[230,253],[1283,1306],"\n props: IListFilterProps\n",[1441,1441],"\n ",[1529,1550],"\n Criterion | undefined\n ",[2579,2587],[2820,2828],[2949,2957],"option",[3022,3030],"\n {option}\n ",[3198,3198],"\n ",[3248,3248],[3294,3294],[3425,3425],[3471,3471],[3517,3517],[3594,3602],[3629,3703],"\n overlay={\n {getLabel(option)}\n }\n ",[4029,4040],"criterion",[4617,4688],"(\n onSelectAll()}>Select All\n )",[4776,4849],"(\n onSelectNone()}>\n Select None\n \n )",[4907,4962],"renderSelectAll(), renderSelectNone()",[5035,5038],"o",[5065,5124],"\n {o.text}\n ",[5409,5442],"{options}",[5524,5525],[5848,5898],"\n onChangeZoom(Number.parseInt(event.target.value))\n ",[5913,5913],[6430,6490],"PAGE_SIZE_OPTIONS.map(s => (\n \n ))",[6773,6828],"{renderSortByOptions()}",[6897,6897],"\n ",[6908,7026]," \n {props.filter.sortDirection === \"asc\"\n ? \"Ascending\"\n : \"Descending\"}\n ",[7049,7050]," }\n ",[7128,7200],"\n icon={\n props.filter.sortDirection === \"asc\"\n ? \"caret-up\"\n : \"caret-down\"\n }\n ",[7682,7720],"{renderMore()}",[7762,7835],"\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n margin: \"10px auto\"\n }}\n ",[63,80],[366,400],"\n IPaginationProps,\n IPaginationState\n",[540,541],[726,732],[749,849],"\n this.props.totalItems !== prevProps.totalItems ||\n this.props.itemsPerPage !== prevProps.itemsPerPage\n ",[1003,1016],"\n return null;\n ",[1199,1204],"\n First\n ",[1356,1364],"\n Previous\n ",[1571,1575],"\n Next\n ",[1742,1746],"\n Last\n ",[2021,2027],"\n {page}\n ",[2141,2149],[2195,2247],"\n this.props.totalItems,\n page,\n this.props.itemsPerPage\n ",[2270,2280],"\n page = 1;\n ",[2322,2352],"\n page = pagerState.totalPages;\n ",[2407,2438],"\n this.props.onChangePage(page);\n ",[2470,2527],"\n totalItems: number,\n currentPage: number,\n pageSize: number\n ",[3218,3277],"endPage + 1 - startPage).keys()].map(\n i => startPage + i\n ",[3323,3324],[48,65],[369,395],"\n props: IPerformerCardProps\n",[516,559],"\n props.ageFromDate ? \" in this scene.\" : \".\"\n ",[650,658],[671,758],"
    FAVORITE
    ",[930,983]," backgroundImage: `url(${props.performer.image_path})` ",[1121,1163],"{props.performer.name}",[1215,1217],[1233,1345],"\n Stars in {props.performer.scene_count}{\" \"}\n \n scenes\n \n ",[132,150],"\"react-router-dom\"",[160,206],"\n FindPerformersQuery,\n FindPerformersVariables\n",[742,743],[850,851],[886,980],"\n result: QueryHookResult,\n filter: ListFilterModel\n ",[1352,1481],"\n singleResult &&\n singleResult.data &&\n singleResult.data.findPerformers &&\n singleResult.data.findPerformers.performers.length === 1\n ",[1719,1743],"\n filter: ListFilterModel\n ",[1801,1809],[1962,2012],"p => (\n \n ",[2111,2183],"(\n \n )",[57,74],[189,212],[407,445],"\n props: IPerformerListTableProps\n) => {",[491,492],[553,561],[721,722],[1007,1008],[1151,1151],"\n ",[1159,1159],[1204,1205],[1264,1264],[1269,1334]," {renderPerformerImage(performer)}",[1340,1377]," {performer.name}",[1525,1525],[1543,1543],[1565,1633]," {performer.aliases ? performer.aliases : \"\"}",[1647,1708]," {maybeRenderFavoriteHeart(performer)}",[1714,1722]," ",[1727,1727],[1804,1804],[1847,1847],[1855,1863],[1877,1922]," {performer.birthdate}",[1928,1978]," {performer.height}",[1984,1990],[2011,2011],[2035,2035],[2068,2068],[2101,2101],[2119,2119],[2124,2144]," {props.performers.map(renderPerformerRow)}",[2443,2449],[2458,2458],[2485,2486],[49,131],"\n Button,\n ButtonGroup,\n Card,\n Form,\n Popover,\n OverlayTrigger\n} from \"react-bootstrap\"",[189,201],"\"classnames\"",[382,405],[595,616],": boolean, shiftKey",[692,714],"\n props: ISceneCardProps\n",[857,881],"\n resetOnMouseLeave: false\n ",[962,1062],"\n !!config.data && !!config.data.configuration\n ? config.data.configuration.interface.showStudioAsText\n ",[1142,1150],[1176,1265],"\n className={`rating-banner ${\n props.scene.rating ? `rating-${props.scene.rating}` : \"\"\n }`}\n ",[1467,1566],"(\n \n {\" \"}\n {TextUtils.resolution(props.scene.file.height)}\n \n ) : (\n \"\"\n )",[1619,1713],"\n props.scene.file.duration >= 1\n ? TextUtils.secondsToTimestamp(props.scene.file.duration)\n : \"\"",[1813,1819],[1932,1933],[2125,2209]," to={`/studios/${props.scene.studio.id}`} style={style}",[2349,2355],[2429,2457],"props.scene.tags.map(tag",[2518,2519],[2864,2870],[2950,2999],"props.scene.performers.map(performer",[3005,3007],[3026,3040],[3096,3098],[3104,3122],[3157,3159],[3235,3292],"style={{ backgroundImage: `url(${performer.image_path})` ",[3309,3318],"/",[3320,3322],[3401,3403],[3410,3412],[3433,3446],"})",[3761,3815],"if (props.scene.scene_markers.length <= 0)",[3892,3932],"props.scene.scene_markers.map(marker",[4101,4102],[4417,4417],[4448,4450],[4493,4537]," props.scene.scene_markers.length > 0\n ",[5480,5480],[5736,5791],"\n shiftKey = event.shiftKey;\n event.stopPropagation();\n }",[5813,5911],"\n to={`/scenes/${props.scene.id}`}\n className={cx(\"image\", \"previewable\", { portrait: isPortrait() })}\n ",[6140,6174],"\"preview\", { portrait: isPortrait() ",[6503,6523],"\n ? props.scene.title\n ",[337,361],"\n props: ISceneDetailProps\n",[458,466],[657,665],[706,711],"tag",[869,869],[958,978],"\n ? props.scene.title\n ",[1095,1097],[1167,1169],[1204,1277],"(\n
    Resolution: {TextUtils.resolution(props.scene.file.height)}
    \n ) : (\n \"\"\n )",[49,66],[302,333],"\n props: ISceneFileInfoPanelProps\n",[568,637],"\n \n {\"file://\" + props.scene.path}\n {\" \"}\n ",[756,821],"\n {props.scene.paths.stream}{\" \"}\n ",[928,936],[1169,1177],[1411,1419],[1486,1538],"\n {props.scene.file.width} x {props.scene.file.height}\n ",[1650,1658],[1879,1887],[2112,2120],[2333,2341],[2547,2555],[300,325],"\n IScenePerformerPanelProps\n",[412,423],"performer",[447,519],"\n key={performer.id}\n performer={performer}\n ageFromDate={props.scene.date}\n ",[576,599],"{cards}",[132,150],[160,221],"\n FindScenesQuery,\n FindScenesVariables,\n SlimSceneDataFragment\n",[844,845],[1031,1117],"\n result: QueryHookResult,\n filter: ListFilterModel\n ",[1510,1627],"\n singleResult &&\n singleResult.data &&\n singleResult.data.findScenes &&\n singleResult.data.findScenes.scenes.length === 1\n ",[1849,1936],"\n result: QueryHookResult,\n selectedIds: Set\n ",[2034,2052],"\n return undefined;\n ",[2127,2128],[2184,2188],"id",[2224,2231],"scene",[2380,2463]," {\n return;\n }}\n ",[2515,2589],"\n scene: SlimSceneDataFragment,\n selectedIds: Set,\n zoomIndex: number\n ",[2811,2865],"\n listData.onSelectChange(scene.id, selected, shiftKey)\n ",[2881,2881],[2912,3043],"\n result: QueryHookResult,\n filter: ListFilterModel,\n selectedIds: Set,\n zoomIndex: number\n ",[3097,3105],[3250,3307],"scene =>\n renderSceneCard(scene, selectedIds, zoomIndex)\n ",[3459,3459],[605,607],[618,622],[633,635],[650,652],[664,664],[719,755],"\n IScenePlayerProps,\n IScenePlayerState\n",[1143,1162]," scrubberPosition: 0 ",[1366,1368],[1426,1428],[1447,1449],[1464,1468],[1524,1528],[1565,1577],[1598,1602],[1633,1645],[1678,1682],[1703,1713]," ",[1716,1718],[1792,1824],"\n ? this.player.getPlaybackRate()\n ",[1893,1894],[1957,1989],[2058,2059],[2073,2108],"\n this.player.setPlaybackRate(1);\n }",[2122,2199],"\n this.player.getState().paused ? this.player.play() : this.player.pause();\n }",[2244,2258],"\n this.onReset();\n ",[2278,2295],"\n this.onDecrease();\n ",[2315,2332],"\n this.onIncrease();\n ",[2353,2367],"\n this.onPause();\n ",[2372,2372],[2901,2941],"\n ? this.props.config.maximumLoopDuration\n ",[2957,3041]," (\n !!scene.file.duration &&\n !!maxLoopDuration &&\n scene.file.duration < maxLoopDuration\n )",[3139,3150],"\n return {};\n ",[3290,3341],"\n | ((seekToPosition: number, _videoTag: any) => void)\n ",[3394,3423],"\n | ((_videoTag: any) => number)\n ",[3710,3771],"\n this.props.scene.paths.stream + \"?start=\" + seekToPosition",[3953,3953],[4133,4134],[4224,4225],[4235,4236],[4337,4338],[4404,4427],"\n this.props.autoplay ||\n ",[4983,5009]," scrubberPosition: position ",[5258,5284],[5501,5525],"\n props: IScenePlayerProps\n",[5532,5534],[5587,5723],"return (\n goBack()}\n >\n <\n ",[10202,10244],"{renderTags()}",[10339,10422],"\n className=\"scrubber-button\"\n id=\"scrubber-forward\"\n onClick={() => goForward()}\n >\n >\n ",[12,18],[298,304],[620,621],[640,733],"",[781,805],"\n return \"main-jwplayer\";\n ",[72,88],"\"apollo-link-ws\"",[120,143],"\"apollo-cache-inmemory\"",[1225,1226],[1341,1342],[1485,1538],"\"OperationDefinition\" && operation === \"subscription\"",[1577,1578],[1945,1946],[2249,2249],"\n ",[2289,2289],[2318,2328]," })\n ",[2548,2549],[2557,2558],[3052,3053],[3061,3062],[3396,3397],[3942,3943],[3951,3952],[4335,4336],[4506,4507],[4515,4516],[5038,5039],[5047,5048],[5414,5415],[5481,5527],"\n return GQL.useFindGallery({ variables: { id } });\n ",[5572,5616],"\n return GQL.useFindScene({ variables: { id } });\n ",[5745,5766]," variables: { id }, skip ",[5894,5915],[6648,6649],[6700,6763],"\n variables: { scraper_id: scraperId, query: q },\n skip: q === \"\"\n ",[6806,6869],"\n scraperId: string,\n scrapedPerformer: GQL.ScrapedPerformerInput\n ",[6873,6983]," return GQL.useScrapePerformer({\n variables: { scraper_id: scraperId, scraped_performer: scrapedPerformer }\n ",[7133,7195],"\n return GQL.useScrapeFreeonesPerformers({ variables: { q } });\n ",[7234,7265],"\n return GQL.useMarkerStrings();\n ",[7298,7323],"\n return GQL.useAllTags();\n ",[7365,7399],"\n return GQL.useAllTagsForFilter();\n ",[7447,7487],"\n return GQL.useAllPerformersForFilter();\n ",[7532,7569],"\n return GQL.useAllStudiosForFilter();\n ",[7675,7705]," variables: { scene_id: sceneId } ",[7741,7764],"\n return GQL.useStats();\n ",[7797,7822],"\n return GQL.useVersion();\n ",[7862,7893],"\n return GQL.useConfiguration();\n ",[7943,7994],"\n return GQL.useDirectories({ variables: { path } });\n ",[8291,8368],"\n StashService.invalidateQueries(\n StashService.performerMutationImpactedQueries\n ",[8531,8608],[8774,8851],[9208,9281],"\n StashService.invalidateQueries(\n StashService.sceneMutationImpactedQueries\n ",[9717,9794],"\n StashService.invalidateQueries(\n StashService.sceneBulkMutationImpactedQueries\n ",[9925,9935],": input } ",[10084,10157],[10423,10497],"\n StashService.invalidateQueries(\n StashService.studioMutationImpactedQueries\n ",[10652,10726],[10884,10958],[11271,11272],[11544,11545],[11747,11747],"\n ",[11938,11994],"\n variables: { input },\n refetchQueries: [\"Configuration\"]\n ",[12115,12171],[12415,12425],"\"no-cache\"",[12521,12531],[12702,12703],[12939,12940],[12948,12949],[13000,13062],[13266,13267],[13275,13276],[13493,13494],[13502,13503],[13708,13709],[13717,13718],[13765,13811],"\n scraperId: string,\n scene: GQL.SceneUpdateInput\n ",[13984,13985],[13993,13994],[14236,14237],[14491,14492],[14750,14751],[14940,14941],[15133,15134],[15326,15327],[15546,15562]," filter: filter }",[15617,15673],"\n filter: GQL.FindFilterType,\n config: GQL.SceneParserInput\n ",[15810,15840]," filter: filter, config: config ",[15876,15877],[123,124],[417,445],"\n IInterfaceConfig | undefined\n",[660,661],[1614,1654]," data: json, setData: setJson, error: err ",[448,479],"\n options: IVideoHoverHookOptions\n ",[726,824],"\n !!config.data && !!config.data.configuration\n ? config.data.configuration.interface.soundOnPreview\n ",[918,926],[1138,1163],"(isPlaying.current = false)",[1269,1277],[1366,1405]," videoEl, isPlaying, isHovering, options ",[1571,1579],[1664,1671],"error",[1893,1901],[335,336],[466,501],",\n document.getElementById(\"root\")\n",[149,187],"| \"none\"\n | \"rating\"\n | \"resolution\"",[190,202],"| \"favorite\"",[205,320],"| \"hasMarkers\"\n | \"isMissing\"\n | \"tags\"\n | \"sceneTags\"\n | \"performers\"\n | \"studios\"\n | \"birth_year\"\n | \"age\"",[322,336]," | \"ethnicity\"",[338,434]," | \"country\"\n | \"eye_color\"\n | \"height\"\n | \"measurements\"\n | \"fake_tits\"\n | \"career_length\"",[437,466],"| \"tattoos\"\n | \"piercings\"\n |",[643,643],[679,679],[721,721],[765,765],[809,809],[855,855],[895,895],[934,934],[980,980],[1023,1023],[1066,1066],[1105,1105],[1143,1143],[1185,1185],[1227,1227],[1268,1268],[1312,1312],[1359,1359],[1407,1407],[1453,1453],[1495,1495],[1537,1537],[1601,1655],"\n modifier: CriterionModifier = CriterionModifier.Equals\n ",[1734,1791],"\n return { value: CriterionModifier.Equals, label: \"Equals\" ",[1833,1897],"\n return { value: CriterionModifier.NotEquals, label: \"Not Equals\" ",[1941,2009],"\n return { value: CriterionModifier.GreaterThan, label: \"Greater Than\" ",[2050,2112],"\n return { value: CriterionModifier.LessThan, label: \"Less Than\" ",[2151,2209],"\n return { value: CriterionModifier.IsNull, label: \"Is NULL\" ",[2249,2309],"\n return { value: CriterionModifier.NotNull, label: \"Not NULL\" ",[2353,2421],"\n return { value: CriterionModifier.IncludesAll, label: \"Includes All\" ",[2462,2523],"\n return { value: CriterionModifier.Includes, label: \"Includes\" ",[2564,2625],"\n return { value: CriterionModifier.Excludes, label: \"Excludes\" ",[3078,3101],"\n modifierString = \"is\";\n ",[3148,3175],"\n modifierString = \"is not\";\n ",[3224,3260],"\n modifierString = \"is greater than\";\n ",[3306,3339],"\n modifierString = \"is less than\";\n ",[3383,3411],"\n modifierString = \"is null\";\n ",[3456,3488],"\n modifierString = \"is not null\";\n ",[3534,3563],"\n modifierString = \"includes\";\n ",[3612,3645],"\n modifierString = \"includes all\";\n ",[3691,3720],"\n modifierString = \"excludes\";\n ",[3742,3742],[3808,3897],"\n this.modifier === CriterionModifier.IsNull ||\n this.modifier === CriterionModifier.NotNull\n ",[4106,4112],"item",[4957,4974],": string, value",[5488,5489],[5583,5634],": CriterionType, parameterName?: string, options?",[6435,6436],[6529,6580],[72,123]," Criterion, CriterionType, ICriterionOption ",[72,123],[72,123],[412,469],"\n \"title\",\n \"url\",\n \"date\",\n \"gallery\",\n \"studio\",\n \"performers\"\n ",[72,123],[111,162],[702,703],[72,123],[210,210],"\n ",[760,761],[72,123],[214,214],[111,162],[626,627],[162,213],[281,322],"\n GQL.AllTagsForFilterAllTags,\n ILabeledId[]\n",[652,653],[8,30]," CriterionModifier ",[75,135],"\n Criterion,\n CriterionType,\n StringCriterion,\n NumberCriterion\n",[679,679],"\n ",[726,726],[779,779],[834,834],[889,889],[945,945],[995,995],[1051,1051],[1113,1113],[1167,1167],[1239,1247],[1290,1292],[1359,1361],[1385,1395],[1450,1452],[1526,1528],[1588,1598],[1660,1662],[1665,1667],[171,172],[218,313],"\n Criterion,\n ICriterionOption,\n CriterionType,\n CriterionOption,\n NumberCriterion,\n StringCriterion\n",[352,396],"\n FavoriteCriterion,\n FavoriteCriterionOption\n",[434,482],"\n HasMarkersCriterion,\n HasMarkersCriterionOption\n",[523,569],"\n IsMissingCriterion,\n IsMissingCriterionOption\n",[664,712],"\n PerformersCriterion,\n PerformersCriterionOption\n",[828,876],"\n ResolutionCriterion,\n ResolutionCriterionOption\n",[995,1057],"\n SceneTagsCriterionOption,\n TagsCriterion,\n TagsCriterionOption\n",[1140,1170]," DisplayMode, FilterMode ",[1998,2020],"\n this.sortBy = \"date\";\n ",[2053,2144],"\n \"title\",\n \"path\",\n \"rating\",\n \"date\",\n \"filesize\",\n \"duration\",\n \"framerate\",\n \"bitrate\",\n \"random\"\n ",[2265,2266],[2634,2635],[2734,2756],"\n this.sortBy = \"name\";\n ",[2872,2937],"DisplayMode.Grid, DisplayMode.List",[2967,2968],[3037,3038],[3483,3528],"\n numberCriteria.concat(stringCriteria).map(c",[3534,3534],[3598,3608],[3695,3717],[3810,3847],"DisplayMode.Grid",[3883,3929],"new NoneCriterionOption()",[4018,4040],"\n this.sortBy = \"path\";\n ",[4117,4154],"DisplayMode.List",[4190,4236],[4328,4351],"\n this.sortBy = \"title\";\n ",[4384,4445],"\n \"title\",\n \"seconds\",\n \"scene_id\",\n \"random\",\n \"scenes_updated_at\"\n ",[4483,4520],"DisplayMode.Wall",[4714,4715],[4861,4907],[4970,5017],"\n this.displayMode = this.displayModeOptions[0];\n ",[5104,5120]," (rawParms)",[6393,6404],[6902,6903],[6953,6966]," encode: false ",[7258,7337],"\n this.sortDirection === \"asc\"\n ? SortDirectionEnum.Asc\n : SortDirectionEnum.Desc",[7461,7473],"(criterion",[7620,7675],"\n value: ratingCrit.value,\n modifier: ratingCrit.modifier\n ",[7811,7851],"\n result.resolution = ResolutionEnum.Low;\n ",[7883,7928],"\n result.resolution = ResolutionEnum.Standard;\n ",[7960,8007],"\n result.resolution = ResolutionEnum.StandardHd;\n ",[8040,8083],"\n result.resolution = ResolutionEnum.FullHd;\n ",[8113,8155],"\n result.resolution = ResolutionEnum.FourK;\n ",[8534,8606],"\n value: tagsCrit.value.map(tag => tag.id),\n modifier: tagsCrit.modifier\n ",[8746,8820],"\n value: perfCrit.value.map(perf => perf.id),\n modifier: perfCrit.modifier\n ",[8951,9029],"\n value: studCrit.value.map(studio => studio.id),\n modifier: studCrit.modifier\n ",[9214,9225],[9323,9323],"\n ",[9505,9552],"\n value: byCrit.value,\n modifier: byCrit.modifier\n ",[9855,9904],"\n value: ethCrit.value,\n modifier: ethCrit.modifier\n ",[10035,10088],"\n value: cntryCrit.value,\n modifier: cntryCrit.modifier\n ",[10574,10619],"\n value: mCrit.value,\n modifier: mCrit.modifier\n ",[10938,10985],"\n value: clCrit.value,\n modifier: clCrit.modifier\n ",[11696,11707],[11846,11918],[12056,12138],"\n value: sceneTagsCrit.value.map(tag => tag.id),\n modifier: sceneTagsCrit.modifier\n ",[12284,12380],"\n value: performersCrit.value.map(performer => performer.id),\n modifier: performersCrit.modifier\n ",[48,49],[140,141],[890,891],[897,898],[1377,1378],[2320,2321],[2599,2613],"registration",[3338,3339],[3976,3984],"(error",[4242,4252],"response",[4654,4669],"(registration",[5019,5020],[5149,5163],[430,475],"\n performer: Partial\n",[502,506],[644,718],"\n { id: performer.id, label: performer.name || `Performer ${performer.id}` }\n ",[809,809],[903,907],[1042,1104],"\n { id: studio.id, label: studio.name || `Studio ${studio.id}` }\n ",[1195,1195],[1277,1281],[1560,1560],[1648,1652],[1945,1945],[1975,2024],"\n sceneMarker: Partial\n",[2075,2079],[2162,2162],[2295,2295],[15,67],"\"bytes\", \"kB\", \"MB\", \"GB\", \"TB\", \"PB\"",[89,146],"\n value?: string,\n limit: number = 100,\n tail: string = \"...\"\n",[166,170],[211,254]," ? value.substring(0, limit) + tail",[265,265],[398,402],[441,456],"bytes >= 1024",[553,553],[900,900],[970,974],[1038,1038],[1122,1126],[1324,1324],[1370,1463]," (birthdate.getMonth() >= fromDate.getMonth() &&\n birthdate.getDay() > fromDate.getDay())\n ",[1501,1501],[1636,1636],[2022,2022],[2142,2142],[18,25],"\"react\"",[59,91],"\"@fortawesome/react-fontawesome\"",[118,153],[149,159],"\"./Select\"",[194,202],"\"./Icon\"",[237,246],"\"./Modal\"",[282,303],"\"./DetailsEditNavbar\"",[335,352],"\"./DurationInput\"",[378,389],"\"./TagLink\"",[36,45],"\"./Toast\"",[87,102],"\"./LocalForage\"",[135,149],"\"./VideoHover\"",[159,267],"\n useScenesList,\n useSceneMarkersList,\n useGalleriesList,\n useStudiosList,\n usePerformersList\n} from \"./ListHook\"",[38,47],"\"./image\"",[85,99],"\"./navigation\"",[139,148],"\"./table\"",[187,195],"\"./text\""] \ No newline at end of file diff --git a/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx b/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx index 8270a25ea40..18714b9154d 100644 --- a/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx +++ b/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect, useRef } from "react"; +import React, { useState } from "react"; import { Form, Col } from 'react-bootstrap'; import * as GQL from "src/core/generated-graphql"; import { StashService } from "src/core/StashService"; @@ -22,6 +22,29 @@ function convertTime(logEntry: GQL.LogEntryDataFragment) { return dateStr; } +function levelClass(level : string) { + return level.toLowerCase().trim(); +} + +interface ILogElementProps { + logEntry : LogEntry +} + +const LogElement: React.FC = ({ logEntry }) => { + // pad to maximum length of level enum + var level = logEntry.level.padEnd(GQL.LogLevel.Progress.length); + + return ( + <> + {logEntry.time}  + {level}  + {logEntry.message} +
    + + ); +} + + class LogEntry { public time: string; public level: string; @@ -40,120 +63,29 @@ class LogEntry { } } +// maximum number of log entries to display. Subsequent entries will truncate +// the list, dropping off the oldest entries first. +const MAX_LOG_ENTRIES = 200; +const logLevels = ["Debug", "Info", "Warning", "Error"]; + export const SettingsLogsPanel: React.FC = () => { const { data, error } = StashService.useLoggingSubscribe(); const { data: existingData } = StashService.useLogs(); - - const logEntries = useRef([]); const [logLevel, setLogLevel] = useState("Info"); - const [filteredLogEntries, setFilteredLogEntries] = useState([]); - const lastUpdate = useRef(0); - const updateTimeout = useRef(); - - // maximum number of log entries to display. Subsequent entries will truncate - // the list, dropping off the oldest entries first. - const MAX_LOG_ENTRIES = 200; - - function truncateLogEntries(entries : LogEntry[]) { - entries.length = Math.min(entries.length, MAX_LOG_ENTRIES); - } - - function prependLogEntries(toPrepend : LogEntry[]) { - var newLogEntries = toPrepend.concat(logEntries.current); - truncateLogEntries(newLogEntries); - logEntries.current = newLogEntries; - } - - function appendLogEntries(toAppend : LogEntry[]) { - var newLogEntries = logEntries.current.concat(toAppend); - truncateLogEntries(newLogEntries); - logEntries.current = newLogEntries; - } - - useEffect(() => { - if (!data) { return; } - - // append data to the logEntries - var convertedData = data.loggingSubscribe.map(convertLogEntry); - // filter subscribed data as it comes in, otherwise we'll end up - // truncating stuff that wasn't filtered out - convertedData = convertedData.filter(filterByLogLevel) + const oldData = (existingData?.logs ?? []).map(e => new LogEntry(e)); + const newData = (data?.loggingSubscribe ?? []).map(e => new LogEntry(e)); - // put newest entries at the top - convertedData.reverse(); - prependLogEntries(convertedData); + const filteredLogEntries = [...newData.reverse(), ...oldData] + .filter(filterByLogLevel).slice(0, MAX_LOG_ENTRIES); - updateFilteredEntries(); - }, [data]); - - useEffect(() => { - if (!existingData || !existingData.logs) { return; } - - var convertedData = existingData.logs.map(convertLogEntry); - appendLogEntries(convertedData); - - updateFilteredEntries(); - }, [existingData]); - - function updateFilteredEntries() { - if (!updateTimeout.current) { - console.log("Updating after timeout"); - } - updateTimeout.current = undefined; - - var filteredEntries = logEntries.current.filter(filterByLogLevel); - setFilteredLogEntries(filteredEntries); - - lastUpdate.current = new Date().getTime(); - } - - useEffect(() => { - updateFilteredEntries(); - }, [logLevel]); - - function convertLogEntry(logEntry : GQL.LogEntryDataFragment) { - return new LogEntry(logEntry); - } - - function levelClass(level : string) { - return level.toLowerCase().trim(); - } - - interface ILogElementProps { - logEntry : LogEntry - } - - function LogElement(props : ILogElementProps) { - // pad to maximum length of level enum - var level = props.logEntry.level.padEnd(GQL.LogLevel.Progress.length); - - return ( - <> - {props.logEntry.time}  - {level}  - {props.logEntry.message} -
    - - ); - } - - function maybeRenderError() { - if (error) { - return ( - <> - Error connecting to log server: {error.message}
    - - ); - } - } - - const logLevels = ["Debug", "Info", "Warning", "Error"]; + const maybeRenderError = error + ?
    Error connecting to log server: {error.message}
    + : ''; function filterByLogLevel(logEntry : LogEntry) { - if (logLevel === "Debug") { + if (logLevel === "Debug") return true; - } var logLevelIndex = logLevels.indexOf(logLevel); var levelIndex = logLevels.indexOf(logEntry.level); @@ -179,7 +111,7 @@ export const SettingsLogsPanel: React.FC = () => {
    - {maybeRenderError()} + {maybeRenderError} {filteredLogEntries.map((logEntry) => )} diff --git a/ui/v2.5/src/components/Shared/DurationInput.tsx b/ui/v2.5/src/components/Shared/DurationInput.tsx index 152af3df746..d37dfbb7e7c 100644 --- a/ui/v2.5/src/components/Shared/DurationInput.tsx +++ b/ui/v2.5/src/components/Shared/DurationInput.tsx @@ -118,13 +118,14 @@ export const DurationInput: React.FC = (props: IProps) => { setValue(e.target.value)} onBlur={() => props.onValueChange(stringToSeconds(value))} placeholder="hh:mm:ss" /> - {maybeRenderReset()} + { maybeRenderReset() } + { renderButtons() } diff --git a/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx b/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx index 532cfba6440..a6c72cdcfea 100644 --- a/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx +++ b/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx @@ -52,7 +52,7 @@ export const FolderSelect: React.FC = (props: IProps) => { defaultValue={currentDirectory} /> - {(!data || !data.directories || loading) ? : undefined} + {(!data || !data.directories || loading) ? : ''} @@ -75,7 +75,7 @@ export const FolderSelect: React.FC = (props: IProps) => { {renderDialog()} {selectedDirectories.map((path) => { - return ; + return
    {path}
    ; })}
    diff --git a/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx b/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx index 7a4563956f9..6c0867044b4 100644 --- a/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx +++ b/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx @@ -1,6 +1,5 @@ import React, { useEffect, useState } from "react"; import { Button, Form, Spinner, Table } from 'react-bootstrap'; -import _ from "lodash"; import { useParams, useHistory } from 'react-router-dom'; import * as GQL from "src/core/generated-graphql"; import { StashService } from "src/core/StashService"; @@ -48,7 +47,7 @@ export const Performer: React.FC = () => { const Scrapers = StashService.useListPerformerScrapers(); const [queryableScrapers, setQueryableScrapers] = useState([]); - const { data, error, loading } = StashService.useFindPerformer(id); + const { data, error } = StashService.useFindPerformer(id); const updatePerformer = StashService.usePerformerUpdate(getPerformerInput() as GQL.PerformerUpdateInput); const createPerformer = StashService.usePerformerCreate(getPerformerInput() as GQL.PerformerCreateInput); const deletePerformer = StashService.usePerformerDestroy(getPerformerInput() as GQL.PerformerDestroyInput); @@ -75,19 +74,16 @@ export const Performer: React.FC = () => { } useEffect(() => { - setIsLoading(loading); - if (!data || !data.findPerformer || error) - return; - setPerformer(data.findPerformer); + setIsLoading(false); + if(data?.findPerformer) + setPerformer(data.findPerformer); }, [data]); useEffect(() => { setImagePreview(performer.image_path); setImage(undefined); updatePerformerEditState(performer); - if (!isNew) { - setIsEditing(false); - } + setIsEditing(false); }, [performer]); function onImageLoad(this: FileReader) { diff --git a/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx b/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx index efc68dbb1cf..a922dc15214 100644 --- a/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx +++ b/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx @@ -52,8 +52,8 @@ export const SceneMarkersPanel: React.FC = (props: ISce

    - onClickMarker(marker)}>{marker.title} - {!isEditorOpen ? onOpenEditor(marker)}>Edit : undefined} + + {!isEditorOpen ? : ''}
    {TextUtils.secondsToTimestamp(marker.seconds)} diff --git a/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx b/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx index 3d3115d1cb0..83a878b45c4 100644 --- a/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx +++ b/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useState, useCallback } from "react"; import { Badge, Button, Card, Collapse, Dropdown, DropdownButton, Form, Table, Spinner } from 'react-bootstrap'; import _ from "lodash"; import { StashService } from "src/core/StashService"; @@ -255,10 +255,28 @@ const builtInRecipes = [ } ]; +const initialParserInput = { + pattern: "{title}.{ext}", + ignoreWords: [], + whitespaceCharacters: "._", + capitalizeTitle: true, + page: 1, + pageSize: 20, + findClicked: false +}; + +const initialShowFieldsState = new Map([ + ["Title", true], + ["Date", true], + ["Performers", true], + ["Tags", true], + ["Studio", true] +]); + export const SceneFilenameParser: React.FC = () => { const Toast = useToast(); const [parserResult, setParserResult] = useState([]); - const [parserInput, setParserInput] = useState(initialParserInput()); + const [parserInput, setParserInput] = useState(initialParserInput); const [allTitleSet, setAllTitleSet] = useState(false); const [allDateSet, setAllDateSet] = useState(false); @@ -266,7 +284,7 @@ export const SceneFilenameParser: React.FC = () => { const [allTagSet, setAllTagSet] = useState(false); const [allStudioSet, setAllStudioSet] = useState(false); - const [showFields, setShowFields] = useState>(initialShowFieldsState()); + const [showFields, setShowFields] = useState>(initialShowFieldsState); const [totalItems, setTotalItems] = useState(0); @@ -275,71 +293,75 @@ export const SceneFilenameParser: React.FC = () => { const updateScenes = StashService.useScenesUpdate(getScenesUpdateData()); - function initialParserInput() { - return { - pattern: "{title}.{ext}", - ignoreWords: [], - whitespaceCharacters: "._", - capitalizeTitle: true, - page: 1, - pageSize: 20, - findClicked: false - }; - } + const determineFieldsToHide = useCallback(() => { + var pattern = parserInput.pattern; + var titleSet = pattern.includes("{title}"); + var dateSet = pattern.includes("{date}") || + pattern.includes("{dd}") || // don't worry about other partial date fields since this should be implied + ParserField.fullDateFields.some((f) => { + return pattern.includes("{" + f.field + "}"); + }); + var performerSet = pattern.includes("{performer}"); + var tagSet = pattern.includes("{tag}"); + var studioSet = pattern.includes("{studio}"); - function initialShowFieldsState() { - return new Map([ - ["Title", true], - ["Date", true], - ["Performers", true], - ["Tags", true], - ["Studio", true] + const newShowFields = new Map([ + ["Title", titleSet], + ["Date", dateSet], + ["Performers", performerSet], + ["Tags", tagSet], + ["Studio", studioSet] ]); - } - function getParserFilter() { - return { - q: parserInput.pattern, - page: parserInput.page, - per_page: parserInput.pageSize, - sort: "path", - direction: GQL.SortDirectionEnum.Asc, - }; - } - - function getParserInput() { - return { - ignoreWords: parserInput.ignoreWords, - whitespaceCharacters: parserInput.whitespaceCharacters, - capitalizeTitle: parserInput.capitalizeTitle - }; - } - - async function onFind() { - setParserResult([]); - - setIsLoading(true); + setShowFields(newShowFields); + }, [parserInput]); - try { - const response = await StashService.queryParseSceneFilenames(getParserFilter(), getParserInput()); + const parseResults = useCallback((results : GQL.ParseSceneFilenamesResults[]) => { + if (results) { + var result = results.map((r) => { + return new SceneParserResult(r); + }).filter((r) => !!r) as SceneParserResult[]; - let result = response.data.parseSceneFilenames; - if (result) { - parseResults(result.results); - setTotalItems(result.count); - } - } catch (err) { - Toast.error(err); + setParserResult(result); + determineFieldsToHide(); } - - setIsLoading(false); - } + }, [determineFieldsToHide]); useEffect(() => { if(parserInput.findClicked) { - onFind(); + setParserResult([]); + setIsLoading(true); + + const parserFilter = { + q: parserInput.pattern, + page: parserInput.page, + per_page: parserInput.pageSize, + sort: "path", + direction: GQL.SortDirectionEnum.Asc, + }; + + const parserInputData = { + ignoreWords: parserInput.ignoreWords, + whitespaceCharacters: parserInput.whitespaceCharacters, + capitalizeTitle: parserInput.capitalizeTitle + }; + + StashService.queryParseSceneFilenames(parserFilter, parserInputData) + .then((response) => { + let result = response.data.parseSceneFilenames; + if (result) { + parseResults(result.results); + setTotalItems(result.count); + } + }) + .catch((err) => ( + Toast.error(err) + )) + .finally(() => ( + setIsLoading(false) + )); } - }, [parserInput]); + }, [parserInput, parseResults, Toast]); function onPageSizeChanged(newSize : number) { var newInput = _.clone(parserInput); @@ -380,38 +402,6 @@ export const SceneFilenameParser: React.FC = () => { setIsLoading(false); } - function parseResults(results : GQL.ParseSceneFilenamesResults[]) { - if (results) { - var result = results.map((r) => { - return new SceneParserResult(r); - }).filter((r) => !!r) as SceneParserResult[]; - - setParserResult(result); - determineFieldsToHide(); - } - } - - function determineFieldsToHide() { - var pattern = parserInput.pattern; - var titleSet = pattern.includes("{title}"); - var dateSet = pattern.includes("{date}") || - pattern.includes("{dd}") || // don't worry about other partial date fields since this should be implied - ParserField.fullDateFields.some((f) => { - return pattern.includes("{" + f.field + "}"); - }); - var performerSet = pattern.includes("{performer}"); - var tagSet = pattern.includes("{tag}"); - var studioSet = pattern.includes("{studio}"); - - var showFieldsCopy = _.clone(showFields); - showFieldsCopy.set("Title", titleSet); - showFieldsCopy.set("Date", dateSet); - showFieldsCopy.set("Performers", performerSet); - showFieldsCopy.set("Tags", tagSet); - showFieldsCopy.set("Studio", studioSet); - setShowFields(showFieldsCopy); - } - useEffect(() => { var newAllTitleSet = !parserResult.some((r) => { return !r.title.set; @@ -429,21 +419,11 @@ export const SceneFilenameParser: React.FC = () => { return !r.studioId.set; }); - if (newAllTitleSet !== allTitleSet) { - setAllTitleSet(newAllTitleSet); - } - if (newAllDateSet !== allDateSet) { - setAllDateSet(newAllDateSet); - } - if (newAllPerformerSet !== allPerformerSet) { - setAllTagSet(newAllPerformerSet); - } - if (newAllTagSet !== allTagSet) { - setAllTagSet(newAllTagSet); - } - if (newAllStudioSet !== allStudioSet) { - setAllStudioSet(newAllStudioSet); - } + setAllTitleSet(newAllTitleSet); + setAllDateSet(newAllDateSet); + setAllTagSet(newAllPerformerSet); + setAllTagSet(newAllTagSet); + setAllStudioSet(newAllStudioSet); }, [parserResult]); function onSelectAllTitleSet(selected : boolean) { @@ -746,7 +726,7 @@ export const SceneFilenameParser: React.FC = () => { const elements = parserResult.originalValue ? Array.isArray(parserResult.originalValue) ? parserResult.originalValue.map((el:HasName) => el.name) - : parserResult.originalValue.name + : [parserResult.originalValue.name] : []; return ( diff --git a/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx b/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx index 37ba202c1de..b8b2df8d066 100644 --- a/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx +++ b/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx @@ -1,4 +1,5 @@ -import React, { CSSProperties, useEffect, useRef, useState } from "react"; +import React, { CSSProperties, useEffect, useRef, useState, useCallback } from "react"; +import { Button } from 'react-bootstrap'; import axios from "axios"; import * as GQL from "src/core/generated-graphql"; import { TextUtils } from "src/utils"; @@ -20,6 +21,47 @@ interface ISceneSpriteItem { h: number; } + +async function fetchSpriteInfo(vttPath: string) { + const response = await axios.get(vttPath, {responseType: "text"}); + if (response.status !== 200) { + console.log(response.statusText); + } + + // TODO: This is gnarly + const lines = response.data.split("\n"); + if (lines.shift() !== "WEBVTT") { return; } + if (lines.shift() !== "") { return; } + let item: ISceneSpriteItem = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0}; + const newSpriteItems: ISceneSpriteItem[] = []; + while (lines.length) { + const line = lines.shift(); + if (line === undefined) { continue; } + + if (line.includes("#") && line.includes("=") && line.includes(",")) { + const size = line.split("#")[1].split("=")[1].split(","); + item.x = Number(size[0]); + item.y = Number(size[1]); + item.w = Number(size[2]); + item.h = Number(size[3]); + + newSpriteItems.push(item); + item = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0}; + } else if (line.includes(" --> ")) { + const times = line.split(" --> "); + + const start = times[0].split(":"); + item.start = (+start[0]) * 60 * 60 + (+start[1]) * 60 + (+start[2]); + + const end = times[1].split(":"); + item.end = (+end[0]) * 60 * 60 + (+end[1]) * 60 + (+end[2]); + } + } + + return newSpriteItems; +} + + export const ScenePlayerScrubber: React.FC = (props: IScenePlayerScrubberProps) => { const contentEl = useRef(null); const positionIndicatorEl = useRef(null); @@ -30,8 +72,8 @@ export const ScenePlayerScrubber: React.FC = (props: const velocity = useRef(0); const _position = useRef(0); - function getPostion() { return _position.current; } - function setPosition(newPostion: number, shouldEmit: boolean = true) { + const getPosition = useCallback(() => _position.current, []); + const setPosition = useCallback((newPostion: number, shouldEmit: boolean = true) => { if (!scrubberSliderEl.current || !positionIndicatorEl.current) { return; } if (shouldEmit) { props.onScrolled(); } @@ -52,10 +94,9 @@ export const ScenePlayerScrubber: React.FC = (props: (newPostion - midpointOffset) / (bounds - (midpointOffset * 2)) * scrubberSliderEl.current.clientWidth ); positionIndicatorEl.current.style.transform = `translateX(${indicatorPosition}px)`; - } + }, [props]); const [spriteItems, setSpriteItems] = useState([]); - const [delayedRender, setDelayedRender] = useState(false); useEffect(() => { if (!scrubberSliderEl.current) { return; } @@ -63,7 +104,12 @@ export const ScenePlayerScrubber: React.FC = (props: }, [scrubberSliderEl]); useEffect(() => { - fetchSpriteInfo(); + if (!props.scene.paths.vtt) + return; + fetchSpriteInfo(props.scene.paths.vtt).then((sprites) => { + if(sprites) + setSpriteItems(sprites); + }); }, [props.scene]); useEffect(() => { @@ -74,7 +120,7 @@ export const ScenePlayerScrubber: React.FC = (props: (scrubberSliderEl.current.scrollWidth * percentage) - (scrubberSliderEl.current.clientWidth / 2) ) * -1; setPosition(position, false); - }, [props.position]); + }, [props.position, props.scene.file.duration, setPosition]); useEffect(() => { window.addEventListener("mouseup", onMouseUp, false); @@ -85,19 +131,21 @@ export const ScenePlayerScrubber: React.FC = (props: useEffect(() => { if (!contentEl.current) { return; } - contentEl.current.addEventListener("mousedown", onMouseDown, false); + const el = contentEl.current; + el.addEventListener("mousedown", onMouseDown, false); return () => { - if (!contentEl.current) { return; } - contentEl.current.removeEventListener("mousedown", onMouseDown); + if (!el) { return; } + el.removeEventListener("mousedown", onMouseDown); }; }); useEffect(() => { if (!contentEl.current) { return; } - contentEl.current.addEventListener("mousemove", onMouseMove, false); + const el = contentEl.current; + el.addEventListener("mousemove", onMouseMove, false); return () => { - if (!contentEl.current) { return; } - contentEl.current.removeEventListener("mousemove", onMouseMove); + if (!el) { return; } + el.removeEventListener("mousemove", onMouseMove); }; }); @@ -125,7 +173,7 @@ export const ScenePlayerScrubber: React.FC = (props: if (!!seekSeconds) { props.onSeek(seekSeconds); } } else if (Math.abs(velocity.current) > 25) { - const newPosition = getPostion() + (velocity.current * 10); + const newPosition = getPosition() + (velocity.current * 10); setPosition(newPosition); velocity.current = 0; } @@ -148,7 +196,7 @@ export const ScenePlayerScrubber: React.FC = (props: const movement = event.movementX; velocity.current = movement; - const newPostion = getPostion() + delta; + const newPostion = getPosition() + delta; setPosition(newPostion); lastMouseEvent.current = event; } @@ -160,61 +208,16 @@ export const ScenePlayerScrubber: React.FC = (props: function goBack() { if (!scrubberSliderEl.current) { return; } - const newPosition = getPostion() + scrubberSliderEl.current.clientWidth; + const newPosition = getPosition() + scrubberSliderEl.current.clientWidth; setPosition(newPosition); } function goForward() { if (!scrubberSliderEl.current) { return; } - const newPosition = getPostion() - scrubberSliderEl.current.clientWidth; + const newPosition = getPosition() - scrubberSliderEl.current.clientWidth; setPosition(newPosition); } - async function fetchSpriteInfo() { - if (!props.scene || !props.scene.paths.vtt) { return; } - - const response = await axios.get(props.scene.paths.vtt, {responseType: "text"}); - if (response.status !== 200) { - console.log(response.statusText); - } - - // TODO: This is gnarly - const lines = response.data.split("\n"); - if (lines.shift() !== "WEBVTT") { return; } - if (lines.shift() !== "") { return; } - let item: ISceneSpriteItem = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0}; - const newSpriteItems: ISceneSpriteItem[] = []; - while (lines.length) { - const line = lines.shift(); - if (line === undefined) { continue; } - - if (line.includes("#") && line.includes("=") && line.includes(",")) { - const size = line.split("#")[1].split("=")[1].split(","); - item.x = Number(size[0]); - item.y = Number(size[1]); - item.w = Number(size[2]); - item.h = Number(size[3]); - - newSpriteItems.push(item); - item = {start: 0, end: 0, x: 0, y: 0, w: 0, h: 0}; - } else if (line.includes(" --> ")) { - const times = line.split(" --> "); - - const start = times[0].split(":"); - item.start = (+start[0]) * 60 * 60 + (+start[1]) * 60 + (+start[2]); - - const end = times[1].split(":"); - item.end = (+end[0]) * 60 * 60 + (+end[1]) * 60 + (+end[2]); - } - } - - setSpriteItems(newSpriteItems); - // TODO: Very hacky. Need to wait for the scroll width to update from the image loading. - setTimeout(() => { - setDelayedRender(true); - }, 100); - } - function renderTags() { function getTagStyle(i: number): CSSProperties { if (!scrubberSliderEl.current || @@ -296,7 +299,7 @@ export const ScenePlayerScrubber: React.FC = (props: return (
    - goBack()}>< +
    @@ -310,7 +313,7 @@ export const ScenePlayerScrubber: React.FC = (props:
    - goForward()}>> +
    ); }; diff --git a/ui/v2.5/src/hooks/Toast.tsx b/ui/v2.5/src/hooks/Toast.tsx index 039914a0642..aa9c09fa1cb 100644 --- a/ui/v2.5/src/hooks/Toast.tsx +++ b/ui/v2.5/src/hooks/Toast.tsx @@ -1,4 +1,4 @@ -import React, { useState, useContext, createContext } from 'react'; +import React, { useEffect, useState, useContext, createContext } from 'react'; import { Toast } from 'react-bootstrap'; interface IToast { @@ -52,19 +52,28 @@ export const ToastProvider: React.FC = ({children}) => { ) } -const useToasts = () => { - const setToast = useContext(ToastContext); +function createHookObject(toastFunc: (toast:IToast) => void) { return { - success: setToast, + success: toastFunc, error: (error: Error) => { console.error(error.message); - setToast({ + toastFunc({ variant: 'danger', header: 'Error', content: error.message ?? error.toString() }); } - }; + } +} + +const useToasts = () => { + const setToast = useContext(ToastContext); + const [hookObject, setHookObject] = useState(createHookObject(setToast)); + useEffect(() => ( + setHookObject(createHookObject(setToast)) + ), [setToast]); + + return hookObject; } export default useToasts; diff --git a/ui/v2.5/yarn.lock b/ui/v2.5/yarn.lock index 1fb3fe3ebf9..cc9857b85c2 100644 --- a/ui/v2.5/yarn.lock +++ b/ui/v2.5/yarn.lock @@ -4463,6 +4463,13 @@ escodegen@^1.11.0, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^6.9.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.9.0.tgz#430d24822e82f7deb1e22a435bfa3999fae4ad64" + integrity sha512-k4E14HBtcLv0uqThaI6I/n1LEqROp8XaPu6SO9Z32u5NlGRC07Enu1Bh2KEFw4FNHbekH8yzbIU9kUGxbiGmCA== + dependencies: + get-stdin "^6.0.0" + eslint-config-react-app@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.1.0.tgz#a37b3f2d4f56f856f93277281ef52bd791273e63" @@ -4536,6 +4543,13 @@ eslint-plugin-jsx-a11y@6.2.3: has "^1.0.3" jsx-ast-utils "^2.2.1" +eslint-plugin-prettier@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" + integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== + dependencies: + prettier-linter-helpers "^1.0.0" + eslint-plugin-react-hooks@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" @@ -4859,6 +4873,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^2.0.2: version "2.2.7" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" @@ -5311,6 +5330,11 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -9640,6 +9664,13 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@1.16.4: version "1.16.4" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" From a3019965f7e8eda417d4389f389c78a167ab66ce Mon Sep 17 00:00:00 2001 From: Infinite Date: Sat, 18 Jan 2020 23:17:09 +0100 Subject: [PATCH 10/67] Linting config --- ui/v2.5/.eslintcache | 1 - ui/v2.5/.eslintrc.json | 37 ++++++++- ui/v2.5/.gitignore | 2 + ui/v2.5/package.json | 10 ++- .../scenes/SceneDetails/SceneDetailPanel.tsx | 2 +- .../SceneDetails/SceneFileInfoPanel.tsx | 3 +- ui/v2.5/yarn.lock | 79 ++++++++++++++++++- 7 files changed, 124 insertions(+), 10 deletions(-) delete mode 100644 ui/v2.5/.eslintcache diff --git a/ui/v2.5/.eslintcache b/ui/v2.5/.eslintcache deleted file mode 100644 index b7cc31ded38..00000000000 --- a/ui/v2.5/.eslintcache +++ /dev/null @@ -1 +0,0 @@ -[{"/home/peroo/stash/ui/v2.5/src/App.tsx":"1","/home/peroo/stash/ui/v2.5/src/components/ErrorBoundary.tsx":"2","/home/peroo/stash/ui/v2.5/src/components/Galleries/Galleries.tsx":"3","/home/peroo/stash/ui/v2.5/src/components/Galleries/Gallery.tsx":"4","/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryList.tsx":"5","/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryViewer.tsx":"6","/home/peroo/stash/ui/v2.5/src/components/MainNavbar.tsx":"7","/home/peroo/stash/ui/v2.5/src/components/PageNotFound.tsx":"8","/home/peroo/stash/ui/v2.5/src/components/Settings/Settings.tsx":"9","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx":"10","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx":"11","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx":"12","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx":"13","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx":"14","/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx":"15","/home/peroo/stash/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx":"16","/home/peroo/stash/ui/v2.5/src/components/Shared/DurationInput.tsx":"17","/home/peroo/stash/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx":"18","/home/peroo/stash/ui/v2.5/src/components/Shared/TagLink.tsx":"19","/home/peroo/stash/ui/v2.5/src/components/Stats.tsx":"20","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioCard.tsx":"21","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx":"22","/home/peroo/stash/ui/v2.5/src/components/Studios/StudioList.tsx":"23","/home/peroo/stash/ui/v2.5/src/components/Studios/Studios.tsx":"24","/home/peroo/stash/ui/v2.5/src/components/Tags/TagList.tsx":"25","/home/peroo/stash/ui/v2.5/src/components/Tags/Tags.tsx":"26","/home/peroo/stash/ui/v2.5/src/components/Wall/WallItem.tsx":"27","/home/peroo/stash/ui/v2.5/src/components/Wall/WallPanel.tsx":"28","/home/peroo/stash/ui/v2.5/src/components/list/AddFilter.tsx":"29","/home/peroo/stash/ui/v2.5/src/components/list/ListFilter.tsx":"30","/home/peroo/stash/ui/v2.5/src/components/list/Pagination.tsx":"31","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerCard.tsx":"32","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx":"33","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerList.tsx":"34","/home/peroo/stash/ui/v2.5/src/components/performers/PerformerListTable.tsx":"35","/home/peroo/stash/ui/v2.5/src/components/performers/performers.tsx":"36","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneCard.tsx":"37","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx":"38","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx":"39","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx":"40","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx":"41","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx":"42","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx":"43","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx":"44","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneList.tsx":"45","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneListTable.tsx":"46","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneMarkerList.tsx":"47","/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx":"48","/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx":"49","/home/peroo/stash/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx":"50","/home/peroo/stash/ui/v2.5/src/components/scenes/helpers.tsx":"51","/home/peroo/stash/ui/v2.5/src/components/scenes/scenes.tsx":"52","/home/peroo/stash/ui/v2.5/src/core/StashService.ts":"53","/home/peroo/stash/ui/v2.5/src/core/generated-graphql.tsx":"54","/home/peroo/stash/ui/v2.5/src/hooks/ListHook.tsx":"55","/home/peroo/stash/ui/v2.5/src/hooks/LocalForage.ts":"56","/home/peroo/stash/ui/v2.5/src/hooks/VideoHover.ts":"57","/home/peroo/stash/ui/v2.5/src/index.tsx":"58","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/criterion.ts":"59","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/favorite.ts":"60","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/has-markers.ts":"61","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/is-missing.ts":"62","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/none.ts":"63","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/performers.ts":"64","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/rating.ts":"65","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/resolution.ts":"66","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/studios.ts":"67","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/tags.ts":"68","/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/utils.ts":"69","/home/peroo/stash/ui/v2.5/src/models/list-filter/filter.ts":"70","/home/peroo/stash/ui/v2.5/src/models/list-filter/types.ts":"71","/home/peroo/stash/ui/v2.5/src/models/react-jw-player.d.ts":"72","/home/peroo/stash/ui/v2.5/src/react-app-env.d.ts":"73","/home/peroo/stash/ui/v2.5/src/serviceWorker.ts":"74","/home/peroo/stash/ui/v2.5/src/utils/image.tsx":"75","/home/peroo/stash/ui/v2.5/src/utils/navigation.ts":"76","/home/peroo/stash/ui/v2.5/src/utils/table.tsx":"77","/home/peroo/stash/ui/v2.5/src/utils/text.ts":"78","/home/peroo/stash/ui/v2.5/src/components/Shared/Icon.tsx":"79","/home/peroo/stash/ui/v2.5/src/components/Shared/Modal.tsx":"80","/home/peroo/stash/ui/v2.5/src/components/Shared/Select.tsx":"81","/home/peroo/stash/ui/v2.5/src/components/Shared/index.ts":"82","/home/peroo/stash/ui/v2.5/src/hooks/Toast.tsx":"83","/home/peroo/stash/ui/v2.5/src/hooks/index.ts":"84","/home/peroo/stash/ui/v2.5/src/utils/index.ts":"85"},{"size":1808,"mtime":1578597473383,"results":"86","hashOfConfig":"87"},{"size":769,"mtime":1577979127060,"results":"88","hashOfConfig":"87"},{"size":364,"mtime":1577979127060,"results":"89","hashOfConfig":"87"},{"size":673,"mtime":1578780374404,"results":"90","hashOfConfig":"87"},{"size":1706,"mtime":1578840371228,"results":"91","hashOfConfig":"87"},{"size":1459,"mtime":1578780782586,"results":"92","hashOfConfig":"87"},{"size":2025,"mtime":1578780973810,"results":"93","hashOfConfig":"87"},{"size":154,"mtime":1577979127060,"results":"94","hashOfConfig":"87"},{"size":2080,"mtime":1578606630070,"results":"95","hashOfConfig":"87"},{"size":1089,"mtime":1578779962137,"results":"96","hashOfConfig":"87"},{"size":10690,"mtime":1578777377200,"results":"97","hashOfConfig":"87"},{"size":4174,"mtime":1578777395837,"results":"98","hashOfConfig":"87"},{"size":3378,"mtime":1579081670257,"results":"99","hashOfConfig":"87"},{"size":1596,"mtime":1578777455727,"results":"100","hashOfConfig":"87"},{"size":7197,"mtime":1578777429962,"results":"101","hashOfConfig":"87"},{"size":4100,"mtime":1578772579521,"results":"102","hashOfConfig":"87"},{"size":2808,"mtime":1579376263183,"results":"103","hashOfConfig":"87"},{"size":2842,"mtime":1579083191986,"results":"104","hashOfConfig":"87"},{"size":1089,"mtime":1578772646246,"results":"105","hashOfConfig":"87"},{"size":1957,"mtime":1577992677258,"results":"106","hashOfConfig":"87"},{"size":692,"mtime":1578779922613,"results":"107","hashOfConfig":"87"},{"size":4965,"mtime":1578775703361,"results":"108","hashOfConfig":"87"},{"size":1109,"mtime":1578840450818,"results":"109","hashOfConfig":"87"},{"size":364,"mtime":1577979127156,"results":"110","hashOfConfig":"87"},{"size":4251,"mtime":1578772374069,"results":"111","hashOfConfig":"87"},{"size":244,"mtime":1577979127172,"results":"112","hashOfConfig":"87"},{"size":4840,"mtime":1578777944861,"results":"113","hashOfConfig":"87"},{"size":2718,"mtime":1578779875383,"results":"114","hashOfConfig":"87"},{"size":6945,"mtime":1578780147932,"results":"115","hashOfConfig":"87"},{"size":7927,"mtime":1578780083370,"results":"116","hashOfConfig":"87"},{"size":3338,"mtime":1578857663610,"results":"117","hashOfConfig":"87"},{"size":1396,"mtime":1578772518825,"results":"118","hashOfConfig":"87"},{"size":13319,"mtime":1579090535092,"results":"119","hashOfConfig":"87"},{"size":2299,"mtime":1578840417294,"results":"120","hashOfConfig":"87"},{"size":2486,"mtime":1578772436440,"results":"121","hashOfConfig":"87"},{"size":397,"mtime":1577979127192,"results":"122","hashOfConfig":"87"},{"size":6781,"mtime":1578777970063,"results":"123","hashOfConfig":"87"},{"size":3460,"mtime":1578862782601,"results":"124","hashOfConfig":"87"},{"size":1340,"mtime":1578776136708,"results":"125","hashOfConfig":"87"},{"size":12186,"mtime":1578777073186,"results":"126","hashOfConfig":"87"},{"size":3084,"mtime":1578775782756,"results":"127","hashOfConfig":"87"},{"size":8860,"mtime":1579083289085,"results":"128","hashOfConfig":"87"},{"size":622,"mtime":1578779863998,"results":"129","hashOfConfig":"87"},{"size":28913,"mtime":1579375318854,"results":"130","hashOfConfig":"87"},{"size":3630,"mtime":1578840509676,"results":"131","hashOfConfig":"87"},{"size":2891,"mtime":1578779742343,"results":"132","hashOfConfig":"87"},{"size":2073,"mtime":1578840478306,"results":"133","hashOfConfig":"87"},{"size":5728,"mtime":1578779762449,"results":"134","hashOfConfig":"87"},{"size":10451,"mtime":1579365871415,"results":"135","hashOfConfig":"87"},{"size":8853,"mtime":1578777324073,"results":"136","hashOfConfig":"87"},{"size":903,"mtime":1578779727474,"results":"137","hashOfConfig":"87"},{"size":484,"mtime":1577979127227,"results":"138","hashOfConfig":"87"},{"size":15920,"mtime":1578694141057,"results":"139","hashOfConfig":"87"},{"size":73414,"mtime":1577979127231,"results":"140","hashOfConfig":"87"},{"size":10952,"mtime":1578857810131,"results":"141","hashOfConfig":"87"},{"size":1659,"mtime":1577979127231,"results":"142","hashOfConfig":"87"},{"size":2144,"mtime":1577979127231,"results":"143","hashOfConfig":"87"},{"size":737,"mtime":1577993631244,"results":"144","hashOfConfig":"87"},{"size":6817,"mtime":1578779686935,"results":"145","hashOfConfig":"87"},{"size":654,"mtime":1578779602441,"results":"146","hashOfConfig":"87"},{"size":659,"mtime":1578779676544,"results":"147","hashOfConfig":"87"},{"size":677,"mtime":1578779621979,"results":"148","hashOfConfig":"87"},{"size":561,"mtime":1578779656917,"results":"149","hashOfConfig":"87"},{"size":961,"mtime":1578779704059,"results":"150","hashOfConfig":"87"},{"size":1008,"mtime":1578779647146,"results":"151","hashOfConfig":"87"},{"size":689,"mtime":1578779632605,"results":"152","hashOfConfig":"87"},{"size":876,"mtime":1578779695856,"results":"153","hashOfConfig":"87"},{"size":1277,"mtime":1578779714508,"results":"154","hashOfConfig":"87"},{"size":1955,"mtime":1578779612056,"results":"155","hashOfConfig":"87"},{"size":12442,"mtime":1578828077239,"results":"156","hashOfConfig":"87"},{"size":278,"mtime":1577979127255,"results":"157","hashOfConfig":"87"},{"size":200,"mtime":1577979127255,"results":"158","hashOfConfig":"87"},{"size":40,"mtime":1577979127255,"results":"159","hashOfConfig":"87"},{"size":5216,"mtime":1577979127287,"results":"160","hashOfConfig":"87"},{"size":1017,"mtime":1578772276612,"results":"161","hashOfConfig":"87"},{"size":2316,"mtime":1578785966854,"results":"162","hashOfConfig":"87"},{"size":3331,"mtime":1578772154994,"results":"163","hashOfConfig":"87"},{"size":2170,"mtime":1578771832873,"results":"164","hashOfConfig":"87"},{"size":394,"mtime":1578768337650,"results":"165","hashOfConfig":"87"},{"size":1154,"mtime":1578687200851,"results":"166","hashOfConfig":"87"},{"size":8029,"mtime":1578777486582,"results":"167","hashOfConfig":"87"},{"size":391,"mtime":1578776102511,"results":"168","hashOfConfig":"87"},{"size":1921,"mtime":1579375302147,"results":"169","hashOfConfig":"87"},{"size":269,"mtime":1578840329810,"results":"170","hashOfConfig":"87"},{"size":197,"mtime":1578772509485,"results":"171","hashOfConfig":"87"},{"filePath":"172","messages":"173","errorCount":5,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":null},"ojnhck",{"filePath":"174","messages":"175","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"176","messages":"177","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"178","messages":"179","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"180","messages":"181","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"182","messages":"183","errorCount":3,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":null},{"filePath":"184","messages":"185","errorCount":52,"warningCount":0,"fixableErrorCount":52,"fixableWarningCount":0,"source":null},{"filePath":"186","messages":"187","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"188","messages":"189","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"190","messages":"191","errorCount":18,"warningCount":0,"fixableErrorCount":18,"fixableWarningCount":0,"source":null},{"filePath":"192","messages":"193","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"194","messages":"195","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"196","messages":"197","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"198","messages":"199","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"200","messages":"201","errorCount":29,"warningCount":0,"fixableErrorCount":29,"fixableWarningCount":0,"source":null},{"filePath":"202","messages":"203","errorCount":39,"warningCount":0,"fixableErrorCount":39,"fixableWarningCount":0,"source":null},{"filePath":"204","messages":"205","errorCount":20,"warningCount":0,"fixableErrorCount":20,"fixableWarningCount":0,"source":null},{"filePath":"206","messages":"207","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"208","messages":"209","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"210","messages":"211","errorCount":6,"warningCount":0,"fixableErrorCount":6,"fixableWarningCount":0,"source":null},{"filePath":"212","messages":"213","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"214","messages":"215","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"216","messages":"217","errorCount":5,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":null},{"filePath":"218","messages":"219","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"220","messages":"221","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"222","messages":"223","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"224","messages":"225","errorCount":22,"warningCount":0,"fixableErrorCount":22,"fixableWarningCount":0,"source":null},{"filePath":"226","messages":"227","errorCount":14,"warningCount":0,"fixableErrorCount":14,"fixableWarningCount":0,"source":null},{"filePath":"228","messages":"229","errorCount":28,"warningCount":0,"fixableErrorCount":28,"fixableWarningCount":0,"source":null},{"filePath":"230","messages":"231","errorCount":35,"warningCount":0,"fixableErrorCount":35,"fixableWarningCount":0,"source":null},{"filePath":"232","messages":"233","errorCount":19,"warningCount":0,"fixableErrorCount":19,"fixableWarningCount":0,"source":null},{"filePath":"234","messages":"235","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"236","messages":"237","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"238","messages":"239","errorCount":10,"warningCount":0,"fixableErrorCount":10,"fixableWarningCount":0,"source":null},{"filePath":"240","messages":"241","errorCount":45,"warningCount":0,"fixableErrorCount":45,"fixableWarningCount":0,"source":null},{"filePath":"242","messages":"243","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"244","messages":"245","errorCount":41,"warningCount":0,"fixableErrorCount":41,"fixableWarningCount":0,"source":null},{"filePath":"246","messages":"247","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"248","messages":"249","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"250","messages":"251","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"252","messages":"253","errorCount":13,"warningCount":0,"fixableErrorCount":13,"fixableWarningCount":0,"source":null},{"filePath":"254","messages":"255","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"256","messages":"257","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"258","messages":"259","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"260","messages":"261","errorCount":18,"warningCount":0,"fixableErrorCount":18,"fixableWarningCount":0,"source":null},{"filePath":"262","messages":"263","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"264","messages":"265","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"266","messages":"267","errorCount":47,"warningCount":0,"fixableErrorCount":47,"fixableWarningCount":0,"source":null},{"filePath":"268","messages":"269","errorCount":67,"warningCount":0,"fixableErrorCount":67,"fixableWarningCount":0,"source":null},{"filePath":"270","messages":"271","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"272","messages":"273","errorCount":5,"warningCount":0,"fixableErrorCount":5,"fixableWarningCount":0,"source":null},{"filePath":"274","messages":"275","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"276","messages":"277","errorCount":82,"warningCount":0,"fixableErrorCount":82,"fixableWarningCount":0,"source":null},{"filePath":"278","messages":"279","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"280","messages":"281","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"282","messages":"283","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"284","messages":"285","errorCount":9,"warningCount":0,"fixableErrorCount":9,"fixableWarningCount":0,"source":null},{"filePath":"286","messages":"287","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"288","messages":"289","errorCount":55,"warningCount":0,"fixableErrorCount":55,"fixableWarningCount":0,"source":null},{"filePath":"290","messages":"291","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"292","messages":"293","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"294","messages":"295","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"296","messages":"297","errorCount":1,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":null},{"filePath":"298","messages":"299","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"300","messages":"301","errorCount":3,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":null},{"filePath":"302","messages":"303","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"304","messages":"305","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"306","messages":"307","errorCount":3,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":null},{"filePath":"308","messages":"309","errorCount":21,"warningCount":0,"fixableErrorCount":21,"fixableWarningCount":0,"source":null},{"filePath":"310","messages":"311","errorCount":58,"warningCount":0,"fixableErrorCount":58,"fixableWarningCount":0,"source":null},{"filePath":"312","messages":"313","errorCount":2,"warningCount":0,"fixableErrorCount":2,"fixableWarningCount":0,"source":null},{"filePath":"314","messages":"315","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"316","messages":"317","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"318","messages":"319","errorCount":11,"warningCount":0,"fixableErrorCount":11,"fixableWarningCount":0,"source":null},{"filePath":"320","messages":"321","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"322","messages":"323","errorCount":15,"warningCount":0,"fixableErrorCount":15,"fixableWarningCount":0,"source":null},{"filePath":"324","messages":"325","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"326","messages":"327","errorCount":18,"warningCount":0,"fixableErrorCount":18,"fixableWarningCount":0,"source":null},{"filePath":"328","messages":"329","errorCount":3,"warningCount":0,"fixableErrorCount":3,"fixableWarningCount":0,"source":null},{"filePath":"330","messages":"331","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"332","messages":"333","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"334","messages":"335","errorCount":6,"warningCount":0,"fixableErrorCount":6,"fixableWarningCount":0,"source":null},{"filePath":"336","messages":"337","errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"338","messages":"339","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},{"filePath":"340","messages":"341","errorCount":4,"warningCount":0,"fixableErrorCount":4,"fixableWarningCount":0,"source":null},"/home/peroo/stash/ui/v2.5/src/App.tsx",["342","343","344","345","346"],"/home/peroo/stash/ui/v2.5/src/components/ErrorBoundary.tsx",["347"],"/home/peroo/stash/ui/v2.5/src/components/Galleries/Galleries.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Galleries/Gallery.tsx",["348"],"/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryList.tsx",["349","350","351","352","353","354","355","356","357"],"/home/peroo/stash/ui/v2.5/src/components/Galleries/GalleryViewer.tsx",["358","359","360"],"/home/peroo/stash/ui/v2.5/src/components/MainNavbar.tsx",["361","362","363","364","365","366","367","368","369","370","371","372","373","374","375","376","377","378","379","380","381","382","383","384","385","386","387","388","389","390","391","392","393","394","395","396","397","398","399","400","401","402","403","404","405","406","407","408","409","410","411","412"],"/home/peroo/stash/ui/v2.5/src/components/PageNotFound.tsx",["413"],"/home/peroo/stash/ui/v2.5/src/components/Settings/Settings.tsx",["414"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsAboutPanel.tsx",["415","416","417","418","419","420","421","422","423","424","425","426","427","428","429","430","431","432"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsConfigurationPanel.tsx",["433"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsInterfacePanel.tsx",["434"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsLogsPanel.tsx",["435"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/GenerateButton.tsx",["436","437","438","439","440","441","442","443","444"],"/home/peroo/stash/ui/v2.5/src/components/Settings/SettingsTasksPanel/SettingsTasksPanel.tsx",["445","446","447","448","449","450","451","452","453","454","455","456","457","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473"],"/home/peroo/stash/ui/v2.5/src/components/Shared/DetailsEditNavbar.tsx",["474","475","476","477","478","479","480","481","482","483","484","485","486","487","488","489","490","491","492","493","494","495","496","497","498","499","500","501","502","503","504","505","506","507","508","509","510","511","512"],"/home/peroo/stash/ui/v2.5/src/components/Shared/DurationInput.tsx",["513","514","515","516","517","518","519","520","521","522","523","524","525","526","527","528","529","530","531","532"],"/home/peroo/stash/ui/v2.5/src/components/Shared/FolderSelect/FolderSelect.tsx",["533"],"/home/peroo/stash/ui/v2.5/src/components/Shared/TagLink.tsx",["534","535","536","537"],"/home/peroo/stash/ui/v2.5/src/components/Stats.tsx",["538","539","540","541","542","543"],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioCard.tsx",["544","545","546","547"],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioDetails/Studio.tsx",["548"],"/home/peroo/stash/ui/v2.5/src/components/Studios/StudioList.tsx",["549","550","551","552","553"],"/home/peroo/stash/ui/v2.5/src/components/Studios/Studios.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Tags/TagList.tsx",["554"],"/home/peroo/stash/ui/v2.5/src/components/Tags/Tags.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/Wall/WallItem.tsx",["555","556","557","558","559","560","561","562","563","564","565","566","567","568","569","570","571","572","573","574","575","576"],"/home/peroo/stash/ui/v2.5/src/components/Wall/WallPanel.tsx",["577","578","579","580","581","582","583","584","585","586","587","588","589","590"],"/home/peroo/stash/ui/v2.5/src/components/list/AddFilter.tsx",["591","592","593","594","595","596","597","598","599","600","601","602","603","604","605","606","607","608","609","610","611","612","613","614","615","616","617","618"],"/home/peroo/stash/ui/v2.5/src/components/list/ListFilter.tsx",["619","620","621","622","623","624","625","626","627","628","629","630","631","632","633","634","635","636","637","638","639","640","641","642","643","644","645","646","647","648","649","650","651","652","653"],"/home/peroo/stash/ui/v2.5/src/components/list/Pagination.tsx",["654","655","656","657","658","659","660","661","662","663","664","665","666","667","668","669","670","671","672"],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerCard.tsx",["673","674","675","676","677","678","679","680","681"],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerDetails/Performer.tsx",["682"],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerList.tsx",["683","684","685","686","687","688","689","690","691","692"],"/home/peroo/stash/ui/v2.5/src/components/performers/PerformerListTable.tsx",["693","694","695","696","697","698","699","700","701","702","703","704","705","706","707","708","709","710","711","712","713","714","715","716","717","718","719","720","721","722","723","724","725","726","727","728","729","730","731","732","733","734","735","736","737"],"/home/peroo/stash/ui/v2.5/src/components/performers/performers.tsx",[],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneCard.tsx",["738","739","740","741","742","743","744","745","746","747","748","749","750","751","752","753","754","755","756","757","758","759","760","761","762","763","764","765","766","767","768","769","770","771","772","773","774","775","776","777","778"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/Scene.tsx",["779"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx",["780","781","782","783","784","785","786","787","788"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneEditPanel.tsx",["789"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx",["790","791","792","793","794","795","796","797","798","799","800","801","802"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/SceneMarkersPanel.tsx",["803"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneDetails/ScenePerformerPanel.tsx",["804","805","806","807"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneFilenameParser.tsx",["808"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneList.tsx",["809","810","811","812","813","814","815","816","817","818","819","820","821","822","823","824","825","826"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneListTable.tsx",["827"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneMarkerList.tsx",["828"],"/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayer.tsx",["829","830","831","832","833","834","835","836","837","838","839","840","841","842","843","844","845","846","847","848","849","850","851","852","853","854","855","856","857","858","859","860","861","862","863","864","865","866","867","868","869","870","871","872","873","874","875"],"/home/peroo/stash/ui/v2.5/src/components/scenes/ScenePlayer/ScenePlayerScrubber.tsx",["876","877","878","879","880","881","882","883","884","885","886","887","888","889","890","891","892","893","894","895","896","897","898","899","900","901","902","903","904","905","906","907","908","909","910","911","912","913","914","915","916","917","918","919","920","921","922","923","924","925","926","927","928","929","930","931","932","933","934","935","936","937","938","939","940","941","942"],"/home/peroo/stash/ui/v2.5/src/components/scenes/SceneSelectedOptions.tsx",["943"],"/home/peroo/stash/ui/v2.5/src/components/scenes/helpers.tsx",["944","945","946","947","948"],"/home/peroo/stash/ui/v2.5/src/components/scenes/scenes.tsx",[],"/home/peroo/stash/ui/v2.5/src/core/StashService.ts",["949","950","951","952","953","954","955","956","957","958","959","960","961","962","963","964","965","966","967","968","969","970","971","972","973","974","975","976","977","978","979","980","981","982","983","984","985","986","987","988","989","990","991","992","993","994","995","996","997","998","999","1000","1001","1002","1003","1004","1005","1006","1007","1008","1009","1010","1011","1012","1013","1014","1015","1016","1017","1018","1019","1020","1021","1022","1023","1024","1025","1026","1027","1028","1029","1030"],"/home/peroo/stash/ui/v2.5/src/core/generated-graphql.tsx",[],"/home/peroo/stash/ui/v2.5/src/hooks/ListHook.tsx",["1031"],"/home/peroo/stash/ui/v2.5/src/hooks/LocalForage.ts",["1032","1033","1034","1035"],"/home/peroo/stash/ui/v2.5/src/hooks/VideoHover.ts",["1036","1037","1038","1039","1040","1041","1042","1043","1044"],"/home/peroo/stash/ui/v2.5/src/index.tsx",["1045","1046"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/criterion.ts",["1047","1048","1049","1050","1051","1052","1053","1054","1055","1056","1057","1058","1059","1060","1061","1062","1063","1064","1065","1066","1067","1068","1069","1070","1071","1072","1073","1074","1075","1076","1077","1078","1079","1080","1081","1082","1083","1084","1085","1086","1087","1088","1089","1090","1091","1092","1093","1094","1095","1096","1097","1098","1099","1100","1101"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/favorite.ts",["1102"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/has-markers.ts",["1103"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/is-missing.ts",["1104","1105"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/none.ts",["1106"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/performers.ts",["1107","1108"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/rating.ts",["1109","1110","1111"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/resolution.ts",["1112","1113"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/studios.ts",["1114","1115"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/tags.ts",["1116","1117","1118"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/criteria/utils.ts",["1119","1120","1121","1122","1123","1124","1125","1126","1127","1128","1129","1130","1131","1132","1133","1134","1135","1136","1137","1138","1139"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/filter.ts",["1140","1141","1142","1143","1144","1145","1146","1147","1148","1149","1150","1151","1152","1153","1154","1155","1156","1157","1158","1159","1160","1161","1162","1163","1164","1165","1166","1167","1168","1169","1170","1171","1172","1173","1174","1175","1176","1177","1178","1179","1180","1181","1182","1183","1184","1185","1186","1187","1188","1189","1190","1191","1192","1193","1194","1195","1196","1197"],"/home/peroo/stash/ui/v2.5/src/models/list-filter/types.ts",["1198","1199"],"/home/peroo/stash/ui/v2.5/src/models/react-jw-player.d.ts",[],"/home/peroo/stash/ui/v2.5/src/react-app-env.d.ts",[],"/home/peroo/stash/ui/v2.5/src/serviceWorker.ts",["1200","1201","1202","1203","1204","1205","1206","1207","1208","1209","1210"],"/home/peroo/stash/ui/v2.5/src/utils/image.tsx",["1211"],"/home/peroo/stash/ui/v2.5/src/utils/navigation.ts",["1212","1213","1214","1215","1216","1217","1218","1219","1220","1221","1222","1223","1224","1225","1226"],"/home/peroo/stash/ui/v2.5/src/utils/table.tsx",["1227"],"/home/peroo/stash/ui/v2.5/src/utils/text.ts",["1228","1229","1230","1231","1232","1233","1234","1235","1236","1237","1238","1239","1240","1241","1242","1243","1244","1245"],"/home/peroo/stash/ui/v2.5/src/components/Shared/Icon.tsx",["1246","1247","1248"],"/home/peroo/stash/ui/v2.5/src/components/Shared/Modal.tsx",["1249"],"/home/peroo/stash/ui/v2.5/src/components/Shared/Select.tsx",["1250"],"/home/peroo/stash/ui/v2.5/src/components/Shared/index.ts",["1251","1252","1253","1254","1255","1256"],"/home/peroo/stash/ui/v2.5/src/hooks/Toast.tsx",["1257"],"/home/peroo/stash/ui/v2.5/src/hooks/index.ts",["1258","1259","1260","1261"],"/home/peroo/stash/ui/v2.5/src/utils/index.ts",["1262","1263","1264","1265"],{"ruleId":"1266","severity":2,"message":"1267","line":14,"column":31,"nodeType":null,"endLine":14,"endColumn":48,"fix":"1268"},{"ruleId":"1266","severity":2,"message":"1269","line":16,"column":25,"nodeType":null,"endLine":16,"endColumn":60,"fix":"1270"},{"ruleId":"1266","severity":2,"message":"1271","line":17,"column":21,"nodeType":null,"endLine":17,"endColumn":56,"fix":"1272"},{"ruleId":"1266","severity":2,"message":"1273","line":19,"column":8,"nodeType":null,"endLine":19,"endColumn":46,"fix":"1274"},{"ruleId":"1266","severity":2,"message":"1275","line":38,"column":19,"nodeType":null,"endLine":38,"endColumn":79,"fix":"1276"},{"ruleId":"1266","severity":2,"message":"1277","line":12,"column":16,"nodeType":null,"endLine":12,"endColumn":17,"fix":"1278"},{"ruleId":"1266","severity":2,"message":"1279","line":11,"column":25,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":23,"nodeType":null,"endLine":2,"endColumn":40,"fix":"1281"},{"ruleId":"1266","severity":2,"message":"1282","line":5,"column":9,"nodeType":null,"endLine":5,"endColumn":53,"fix":"1283"},{"ruleId":"1266","severity":2,"message":"1277","line":12,"column":18,"nodeType":null,"endLine":12,"endColumn":19,"fix":"1284"},{"ruleId":"1266","severity":2,"message":"1285","line":15,"column":26,"nodeType":null,"endLine":15,"endColumn":118,"fix":"1286"},{"ruleId":"1266","severity":2,"message":"1287","line":16,"column":54,"nodeType":null,"endLine":16,"endColumn":62,"fix":"1288"},{"ruleId":"1266","severity":2,"message":"1289","line":21,"column":24,"nodeType":null,"endLine":21,"endColumn":40,"fix":"1290"},{"ruleId":"1266","severity":2,"message":"1291","line":29,"column":54,"nodeType":null,"endLine":29,"endColumn":63,"fix":"1292"},{"ruleId":"1266","severity":2,"message":"1293","line":33,"column":49,"nodeType":null,"endLine":33,"endColumn":119,"fix":"1294"},{"ruleId":"1266","severity":2,"message":"1295","line":36,"column":21,"nodeType":null,"endLine":36,"endColumn":80,"fix":"1296"},{"ruleId":"1266","severity":2,"message":"1297","line":14,"column":25,"nodeType":null,"endLine":14,"endColumn":80,"fix":"1298"},{"ruleId":"1266","severity":2,"message":"1299","line":29,"column":36,"nodeType":null,"endLine":29,"endColumn":88,"fix":"1300"},{"ruleId":"1266","severity":2,"message":"1301","line":30,"column":36,"nodeType":null,"endLine":30,"endColumn":105,"fix":"1302"},{"ruleId":"1266","severity":2,"message":"1303","line":3,"column":26,"nodeType":null,"endLine":3,"endColumn":61,"fix":"1304"},{"ruleId":"1266","severity":2,"message":"1305","line":4,"column":31,"nodeType":null,"endLine":4,"endColumn":55,"fix":"1306"},{"ruleId":"1266","severity":2,"message":"1307","line":7,"column":22,"nodeType":null,"endLine":7,"endColumn":45,"fix":"1308"},{"ruleId":"1266","severity":2,"message":"1309","line":10,"column":3,"nodeType":null,"endLine":10,"endColumn":5,"fix":"1310"},{"ruleId":"1266","severity":2,"message":"1309","line":11,"column":1,"nodeType":null,"endLine":11,"endColumn":3,"fix":"1311"},{"ruleId":"1266","severity":2,"message":"1309","line":12,"column":3,"nodeType":null,"endLine":12,"endColumn":5,"fix":"1312"},{"ruleId":"1266","severity":2,"message":"1313","line":15,"column":17,"nodeType":null,"endLine":15,"endColumn":17,"fix":"1314"},{"ruleId":"1266","severity":2,"message":"1315","line":16,"column":1,"nodeType":null,"endLine":16,"endColumn":1,"fix":"1316"},{"ruleId":"1266","severity":2,"message":"1315","line":17,"column":3,"nodeType":null,"endLine":17,"endColumn":3,"fix":"1317"},{"ruleId":"1266","severity":2,"message":"1315","line":18,"column":3,"nodeType":null,"endLine":18,"endColumn":3,"fix":"1318"},{"ruleId":"1266","severity":2,"message":"1315","line":19,"column":1,"nodeType":null,"endLine":19,"endColumn":1,"fix":"1319"},{"ruleId":"1266","severity":2,"message":"1315","line":20,"column":1,"nodeType":null,"endLine":20,"endColumn":1,"fix":"1320"},{"ruleId":"1266","severity":2,"message":"1315","line":21,"column":1,"nodeType":null,"endLine":21,"endColumn":1,"fix":"1321"},{"ruleId":"1266","severity":2,"message":"1322","line":22,"column":1,"nodeType":null,"endLine":22,"endColumn":3,"fix":"1323"},{"ruleId":"1266","severity":2,"message":"1315","line":23,"column":1,"nodeType":null,"endLine":23,"endColumn":1,"fix":"1324"},{"ruleId":"1266","severity":2,"message":"1315","line":24,"column":1,"nodeType":null,"endLine":24,"endColumn":1,"fix":"1325"},{"ruleId":"1266","severity":2,"message":"1315","line":25,"column":1,"nodeType":null,"endLine":25,"endColumn":1,"fix":"1326"},{"ruleId":"1266","severity":2,"message":"1315","line":26,"column":1,"nodeType":null,"endLine":26,"endColumn":1,"fix":"1327"},{"ruleId":"1266","severity":2,"message":"1322","line":27,"column":1,"nodeType":null,"endLine":27,"endColumn":3,"fix":"1328"},{"ruleId":"1266","severity":2,"message":"1315","line":28,"column":1,"nodeType":null,"endLine":28,"endColumn":1,"fix":"1329"},{"ruleId":"1266","severity":2,"message":"1315","line":29,"column":3,"nodeType":null,"endLine":29,"endColumn":3,"fix":"1330"},{"ruleId":"1266","severity":2,"message":"1315","line":30,"column":1,"nodeType":null,"endLine":30,"endColumn":1,"fix":"1331"},{"ruleId":"1266","severity":2,"message":"1315","line":31,"column":1,"nodeType":null,"endLine":31,"endColumn":1,"fix":"1332"},{"ruleId":"1266","severity":2,"message":"1315","line":32,"column":1,"nodeType":null,"endLine":32,"endColumn":1,"fix":"1333"},{"ruleId":"1266","severity":2,"message":"1315","line":33,"column":3,"nodeType":null,"endLine":33,"endColumn":3,"fix":"1334"},{"ruleId":"1266","severity":2,"message":"1315","line":34,"column":1,"nodeType":null,"endLine":34,"endColumn":1,"fix":"1335"},{"ruleId":"1266","severity":2,"message":"1315","line":35,"column":1,"nodeType":null,"endLine":35,"endColumn":1,"fix":"1336"},{"ruleId":"1266","severity":2,"message":"1315","line":36,"column":1,"nodeType":null,"endLine":36,"endColumn":1,"fix":"1337"},{"ruleId":"1266","severity":2,"message":"1315","line":37,"column":1,"nodeType":null,"endLine":37,"endColumn":1,"fix":"1338"},{"ruleId":"1266","severity":2,"message":"1315","line":38,"column":3,"nodeType":null,"endLine":38,"endColumn":3,"fix":"1339"},{"ruleId":"1266","severity":2,"message":"1322","line":39,"column":1,"nodeType":null,"endLine":39,"endColumn":3,"fix":"1340"},{"ruleId":"1266","severity":2,"message":"1315","line":40,"column":1,"nodeType":null,"endLine":40,"endColumn":1,"fix":"1341"},{"ruleId":"1266","severity":2,"message":"1315","line":41,"column":1,"nodeType":null,"endLine":41,"endColumn":1,"fix":"1342"},{"ruleId":"1266","severity":2,"message":"1315","line":42,"column":1,"nodeType":null,"endLine":42,"endColumn":1,"fix":"1343"},{"ruleId":"1266","severity":2,"message":"1322","line":43,"column":1,"nodeType":null,"endLine":43,"endColumn":3,"fix":"1344"},{"ruleId":"1266","severity":2,"message":"1315","line":44,"column":1,"nodeType":null,"endLine":44,"endColumn":1,"fix":"1345"},{"ruleId":"1266","severity":2,"message":"1315","line":45,"column":1,"nodeType":null,"endLine":45,"endColumn":1,"fix":"1346"},{"ruleId":"1266","severity":2,"message":"1347","line":51,"column":15,"nodeType":null,"endLine":51,"endColumn":51,"fix":"1348"},{"ruleId":"1266","severity":2,"message":"1349","line":52,"column":5,"nodeType":null,"endLine":52,"endColumn":24,"fix":"1350"},{"ruleId":"1266","severity":2,"message":"1351","line":53,"column":1,"nodeType":null,"endLine":53,"endColumn":39,"fix":"1352"},{"ruleId":"1266","severity":2,"message":"1353","line":54,"column":9,"nodeType":null,"endLine":54,"endColumn":23,"fix":"1354"},{"ruleId":"1266","severity":2,"message":"1355","line":55,"column":20,"nodeType":null,"endLine":55,"endColumn":39,"fix":"1356"},{"ruleId":"1266","severity":2,"message":"1315","line":56,"column":1,"nodeType":null,"endLine":56,"endColumn":1,"fix":"1357"},{"ruleId":"1266","severity":2,"message":"1315","line":57,"column":1,"nodeType":null,"endLine":57,"endColumn":1,"fix":"1358"},{"ruleId":"1266","severity":2,"message":"1315","line":58,"column":5,"nodeType":null,"endLine":58,"endColumn":5,"fix":"1359"},{"ruleId":"1266","severity":2,"message":"1315","line":59,"column":1,"nodeType":null,"endLine":59,"endColumn":1,"fix":"1360"},{"ruleId":"1266","severity":2,"message":"1309","line":65,"column":1,"nodeType":null,"endLine":65,"endColumn":3,"fix":"1361"},{"ruleId":"1266","severity":2,"message":"1362","line":69,"column":24,"nodeType":null,"endLine":69,"endColumn":27,"fix":"1363"},{"ruleId":"1266","severity":2,"message":"1364","line":85,"column":23,"nodeType":null,"endLine":87,"endColumn":10,"fix":"1365"},{"ruleId":"1266","severity":2,"message":"1309","line":88,"column":1,"nodeType":null,"endLine":88,"endColumn":3,"fix":"1366"},{"ruleId":"1266","severity":2,"message":"1309","line":89,"column":13,"nodeType":null,"endLine":89,"endColumn":15,"fix":"1367"},{"ruleId":"1266","severity":2,"message":"1309","line":90,"column":1,"nodeType":null,"endLine":90,"endColumn":3,"fix":"1368"},{"ruleId":"1266","severity":2,"message":"1369","line":4,"column":10,"nodeType":null,"endLine":6,"endColumn":4,"fix":"1370"},{"ruleId":"1266","severity":2,"message":"1279","line":14,"column":63,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":32,"nodeType":null,"endLine":2,"endColumn":49,"fix":"1371"},{"ruleId":"1266","severity":2,"message":"1287","line":9,"column":59,"nodeType":null,"endLine":9,"endColumn":67,"fix":"1372"},{"ruleId":"1266","severity":2,"message":"1287","line":19,"column":34,"nodeType":null,"endLine":19,"endColumn":42,"fix":"1373"},{"ruleId":"1266","severity":2,"message":"1315","line":22,"column":1,"nodeType":null,"endLine":22,"endColumn":1,"fix":"1374"},{"ruleId":"1266","severity":2,"message":"1315","line":23,"column":9,"nodeType":null,"endLine":23,"endColumn":9,"fix":"1375"},{"ruleId":"1266","severity":2,"message":"1376","line":24,"column":1,"nodeType":null,"endLine":24,"endColumn":11,"fix":"1377"},{"ruleId":"1266","severity":2,"message":"1315","line":25,"column":11,"nodeType":null,"endLine":25,"endColumn":11,"fix":"1378"},{"ruleId":"1266","severity":2,"message":"1379","line":26,"column":1,"nodeType":null,"endLine":26,"endColumn":13,"fix":"1380"},{"ruleId":"1266","severity":2,"message":"1315","line":27,"column":1,"nodeType":null,"endLine":27,"endColumn":1,"fix":"1381"},{"ruleId":"1266","severity":2,"message":"1376","line":28,"column":1,"nodeType":null,"endLine":28,"endColumn":11,"fix":"1382"},{"ruleId":"1266","severity":2,"message":"1315","line":29,"column":11,"nodeType":null,"endLine":29,"endColumn":11,"fix":"1383"},{"ruleId":"1266","severity":2,"message":"1315","line":30,"column":1,"nodeType":null,"endLine":30,"endColumn":1,"fix":"1384"},{"ruleId":"1266","severity":2,"message":"1315","line":31,"column":1,"nodeType":null,"endLine":31,"endColumn":1,"fix":"1385"},{"ruleId":"1266","severity":2,"message":"1315","line":32,"column":11,"nodeType":null,"endLine":32,"endColumn":11,"fix":"1386"},{"ruleId":"1266","severity":2,"message":"1315","line":33,"column":1,"nodeType":null,"endLine":33,"endColumn":1,"fix":"1387"},{"ruleId":"1266","severity":2,"message":"1315","line":34,"column":1,"nodeType":null,"endLine":34,"endColumn":1,"fix":"1388"},{"ruleId":"1266","severity":2,"message":"1389","line":41,"column":76,"nodeType":null,"endLine":41,"endColumn":78,"fix":"1390"},{"ruleId":"1266","severity":2,"message":"1389","line":42,"column":45,"nodeType":null,"endLine":42,"endColumn":47,"fix":"1391"},{"ruleId":"1266","severity":2,"message":"1279","line":43,"column":16,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1279","line":31,"column":26,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1279","line":76,"column":34,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":30,"nodeType":null,"endLine":2,"endColumn":47,"fix":"1392"},{"ruleId":"1266","severity":2,"message":"1393","line":4,"column":26,"nodeType":null,"endLine":4,"endColumn":37,"fix":"1394"},{"ruleId":"1266","severity":2,"message":"1395","line":15,"column":49,"nodeType":null,"endLine":15,"endColumn":87,"fix":"1396"},{"ruleId":"1266","severity":2,"message":"1397","line":24,"column":18,"nodeType":null,"endLine":24,"endColumn":132,"fix":"1398"},{"ruleId":"1266","severity":2,"message":"1399","line":25,"column":18,"nodeType":null,"endLine":25,"endColumn":167,"fix":"1400"},{"ruleId":"1266","severity":2,"message":"1401","line":26,"column":18,"nodeType":null,"endLine":26,"endColumn":160,"fix":"1402"},{"ruleId":"1266","severity":2,"message":"1403","line":27,"column":18,"nodeType":null,"endLine":27,"endColumn":169,"fix":"1404"},{"ruleId":"1266","severity":2,"message":"1405","line":28,"column":72,"nodeType":null,"endLine":28,"endColumn":80,"fix":"1406"},{"ruleId":"1266","severity":2,"message":"1407","line":29,"column":41,"nodeType":null,"endLine":29,"endColumn":103,"fix":"1408"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":43,"nodeType":null,"endLine":2,"endColumn":60,"fix":"1409"},{"ruleId":"1266","severity":2,"message":"1393","line":5,"column":26,"nodeType":null,"endLine":5,"endColumn":37,"fix":"1410"},{"ruleId":"1266","severity":2,"message":"1411","line":6,"column":23,"nodeType":null,"endLine":6,"endColumn":46,"fix":"1412"},{"ruleId":"1266","severity":2,"message":"1413","line":24,"column":31,"nodeType":null,"endLine":24,"endColumn":32,"fix":"1414"},{"ruleId":"1266","severity":2,"message":"1313","line":25,"column":11,"nodeType":null,"endLine":25,"endColumn":11,"fix":"1415"},{"ruleId":"1266","severity":2,"message":"1416","line":71,"column":52,"nodeType":null,"endLine":71,"endColumn":72,"fix":"1417"},{"ruleId":"1266","severity":2,"message":"1418","line":79,"column":25,"nodeType":null,"endLine":79,"endColumn":52,"fix":"1419"},{"ruleId":"1266","severity":2,"message":"1420","line":83,"column":44,"nodeType":null,"endLine":84,"endColumn":10,"fix":"1421"},{"ruleId":"1266","severity":2,"message":"1416","line":92,"column":51,"nodeType":null,"endLine":92,"endColumn":71,"fix":"1422"},{"ruleId":"1266","severity":2,"message":"1423","line":100,"column":25,"nodeType":null,"endLine":100,"endColumn":51,"fix":"1424"},{"ruleId":"1266","severity":2,"message":"1425","line":104,"column":42,"nodeType":null,"endLine":106,"endColumn":57,"fix":"1426"},{"ruleId":"1266","severity":2,"message":"1427","line":114,"column":45,"nodeType":null,"endLine":114,"endColumn":77,"fix":"1428"},{"ruleId":"1266","severity":2,"message":"1429","line":128,"column":6,"nodeType":null,"endLine":128,"endColumn":6,"fix":"1430"},{"ruleId":"1266","severity":2,"message":"1431","line":148,"column":16,"nodeType":null,"endLine":148,"endColumn":124,"fix":"1432"},{"ruleId":"1266","severity":2,"message":"1315","line":156,"column":7,"nodeType":null,"endLine":156,"endColumn":7,"fix":"1433"},{"ruleId":"1266","severity":2,"message":"1315","line":157,"column":1,"nodeType":null,"endLine":157,"endColumn":1,"fix":"1434"},{"ruleId":"1266","severity":2,"message":"1435","line":158,"column":12,"nodeType":null,"endLine":158,"endColumn":92,"fix":"1436"},{"ruleId":"1266","severity":2,"message":"1315","line":159,"column":1,"nodeType":null,"endLine":159,"endColumn":1,"fix":"1437"},{"ruleId":"1266","severity":2,"message":"1315","line":160,"column":1,"nodeType":null,"endLine":160,"endColumn":1,"fix":"1438"},{"ruleId":"1266","severity":2,"message":"1439","line":183,"column":66,"nodeType":null,"endLine":183,"endColumn":70,"fix":"1440"},{"ruleId":"1266","severity":2,"message":"1441","line":184,"column":43,"nodeType":null,"endLine":184,"endColumn":91,"fix":"1442"},{"ruleId":"1266","severity":2,"message":"1443","line":207,"column":72,"nodeType":null,"endLine":207,"endColumn":80,"fix":"1444"},{"ruleId":"1266","severity":2,"message":"1445","line":208,"column":43,"nodeType":null,"endLine":208,"endColumn":79,"fix":"1446"},{"ruleId":"1266","severity":2,"message":"1447","line":222,"column":16,"nodeType":null,"endLine":222,"endColumn":92,"fix":"1448"},{"ruleId":"1266","severity":2,"message":"1449","line":223,"column":43,"nodeType":null,"endLine":223,"endColumn":131,"fix":"1450"},{"ruleId":"1266","severity":2,"message":"1451","line":230,"column":16,"nodeType":null,"endLine":230,"endColumn":134,"fix":"1452"},{"ruleId":"1266","severity":2,"message":"1453","line":231,"column":43,"nodeType":null,"endLine":231,"endColumn":88,"fix":"1454"},{"ruleId":"1266","severity":2,"message":"1455","line":235,"column":16,"nodeType":null,"endLine":235,"endColumn":95,"fix":"1456"},{"ruleId":"1266","severity":2,"message":"1457","line":236,"column":43,"nodeType":null,"endLine":236,"endColumn":100,"fix":"1458"},{"ruleId":"1266","severity":2,"message":"1459","line":1,"column":9,"nodeType":null,"endLine":1,"endColumn":92,"fix":"1460"},{"ruleId":"1266","severity":2,"message":"1461","line":20,"column":29,"nodeType":null,"endLine":20,"endColumn":84,"fix":"1462"},{"ruleId":"1266","severity":2,"message":"1287","line":27,"column":23,"nodeType":null,"endLine":27,"endColumn":31,"fix":"1463"},{"ruleId":"1266","severity":2,"message":"1464","line":29,"column":14,"nodeType":null,"endLine":32,"endColumn":7,"fix":"1465"},{"ruleId":"1266","severity":2,"message":"1413","line":33,"column":10,"nodeType":null,"endLine":33,"endColumn":11,"fix":"1466"},{"ruleId":"1266","severity":2,"message":"1287","line":39,"column":28,"nodeType":null,"endLine":39,"endColumn":36,"fix":"1467"},{"ruleId":"1266","severity":2,"message":"1468","line":40,"column":11,"nodeType":null,"endLine":40,"endColumn":82,"fix":"1469"},{"ruleId":"1266","severity":2,"message":"1287","line":44,"column":42,"nodeType":null,"endLine":44,"endColumn":50,"fix":"1470"},{"ruleId":"1266","severity":2,"message":"1471","line":45,"column":11,"nodeType":null,"endLine":45,"endColumn":95,"fix":"1472"},{"ruleId":"1266","severity":2,"message":"1473","line":49,"column":28,"nodeType":null,"endLine":49,"endColumn":38,"fix":"1474"},{"ruleId":"1266","severity":2,"message":"1475","line":50,"column":5,"nodeType":null,"endLine":50,"endColumn":5,"fix":"1476"},{"ruleId":"1266","severity":2,"message":"1309","line":51,"column":1,"nodeType":null,"endLine":51,"endColumn":3,"fix":"1477"},{"ruleId":"1266","severity":2,"message":"1478","line":52,"column":1,"nodeType":null,"endLine":52,"endColumn":11,"fix":"1479"},{"ruleId":"1266","severity":2,"message":"1480","line":53,"column":9,"nodeType":null,"endLine":53,"endColumn":92,"fix":"1481"},{"ruleId":"1266","severity":2,"message":"1309","line":54,"column":1,"nodeType":null,"endLine":54,"endColumn":3,"fix":"1482"},{"ruleId":"1266","severity":2,"message":"1483","line":55,"column":5,"nodeType":null,"endLine":55,"endColumn":8,"fix":"1484"},{"ruleId":"1266","severity":2,"message":"1287","line":59,"column":28,"nodeType":null,"endLine":59,"endColumn":36,"fix":"1485"},{"ruleId":"1266","severity":2,"message":"1287","line":60,"column":28,"nodeType":null,"endLine":60,"endColumn":36,"fix":"1486"},{"ruleId":"1266","severity":2,"message":"1487","line":66,"column":14,"nodeType":null,"endLine":66,"endColumn":54,"fix":"1488"},{"ruleId":"1266","severity":2,"message":"1489","line":67,"column":1,"nodeType":null,"endLine":67,"endColumn":101,"fix":"1490"},{"ruleId":"1266","severity":2,"message":"1491","line":68,"column":1,"nodeType":null,"endLine":68,"endColumn":1,"fix":"1492"},{"ruleId":"1266","severity":2,"message":"1491","line":69,"column":15,"nodeType":null,"endLine":69,"endColumn":15,"fix":"1493"},{"ruleId":"1266","severity":2,"message":"1494","line":70,"column":13,"nodeType":null,"endLine":70,"endColumn":20,"fix":"1495"},{"ruleId":"1266","severity":2,"message":"1287","line":84,"column":42,"nodeType":null,"endLine":84,"endColumn":50,"fix":"1496"},{"ruleId":"1266","severity":2,"message":"1497","line":86,"column":15,"nodeType":null,"endLine":86,"endColumn":22,"fix":"1498"},{"ruleId":"1266","severity":2,"message":"1499","line":87,"column":1,"nodeType":null,"endLine":87,"endColumn":49,"fix":"1500"},{"ruleId":"1266","severity":2,"message":"1501","line":88,"column":1,"nodeType":null,"endLine":88,"endColumn":28,"fix":"1502"},{"ruleId":"1266","severity":2,"message":"1287","line":93,"column":27,"nodeType":null,"endLine":93,"endColumn":35,"fix":"1503"},{"ruleId":"1266","severity":2,"message":"1504","line":100,"column":12,"nodeType":null,"endLine":104,"endColumn":6,"fix":"1505"},{"ruleId":"1266","severity":2,"message":"1506","line":118,"column":13,"nodeType":null,"endLine":120,"endColumn":7,"fix":"1507"},{"ruleId":"1266","severity":2,"message":"1508","line":121,"column":21,"nodeType":null,"endLine":123,"endColumn":9,"fix":"1509"},{"ruleId":"1266","severity":2,"message":"1510","line":125,"column":61,"nodeType":null,"endLine":125,"endColumn":67,"fix":"1511"},{"ruleId":"1266","severity":2,"message":"1512","line":126,"column":18,"nodeType":null,"endLine":126,"endColumn":89,"fix":"1513"},{"ruleId":"1266","severity":2,"message":"1514","line":132,"column":1,"nodeType":null,"endLine":133,"endColumn":1,"fix":"1515"},{"ruleId":"1266","severity":2,"message":"1315","line":135,"column":1,"nodeType":null,"endLine":135,"endColumn":1,"fix":"1516"},{"ruleId":"1266","severity":2,"message":"1315","line":136,"column":5,"nodeType":null,"endLine":136,"endColumn":5,"fix":"1517"},{"ruleId":"1266","severity":2,"message":"1315","line":137,"column":1,"nodeType":null,"endLine":137,"endColumn":1,"fix":"1518"},{"ruleId":"1266","severity":2,"message":"1315","line":146,"column":7,"nodeType":null,"endLine":146,"endColumn":7,"fix":"1519"},{"ruleId":"1266","severity":2,"message":"1315","line":147,"column":1,"nodeType":null,"endLine":147,"endColumn":1,"fix":"1520"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":55,"nodeType":null,"endLine":2,"endColumn":72,"fix":"1521"},{"ruleId":"1266","severity":2,"message":"1307","line":3,"column":22,"nodeType":null,"endLine":3,"endColumn":45,"fix":"1522"},{"ruleId":"1266","severity":2,"message":"1429","line":7,"column":21,"nodeType":null,"endLine":7,"endColumn":21,"fix":"1523"},{"ruleId":"1266","severity":2,"message":"1429","line":8,"column":23,"nodeType":null,"endLine":8,"endColumn":23,"fix":"1524"},{"ruleId":"1266","severity":2,"message":"1429","line":9,"column":45,"nodeType":null,"endLine":9,"endColumn":45,"fix":"1525"},{"ruleId":"1266","severity":2,"message":"1429","line":10,"column":19,"nodeType":null,"endLine":10,"endColumn":19,"fix":"1526"},{"ruleId":"1266","severity":2,"message":"1527","line":14,"column":46,"nodeType":null,"endLine":14,"endColumn":81,"fix":"1528"},{"ruleId":"1266","severity":2,"message":"1413","line":20,"column":35,"nodeType":null,"endLine":20,"endColumn":36,"fix":"1529"},{"ruleId":"1266","severity":2,"message":"1413","line":34,"column":29,"nodeType":null,"endLine":34,"endColumn":30,"fix":"1530"},{"ruleId":"1266","severity":2,"message":"1313","line":47,"column":10,"nodeType":null,"endLine":47,"endColumn":10,"fix":"1531"},{"ruleId":"1266","severity":2,"message":"1532","line":79,"column":19,"nodeType":null,"endLine":81,"endColumn":7,"fix":"1533"},{"ruleId":"1266","severity":2,"message":"1534","line":82,"column":16,"nodeType":null,"endLine":85,"endColumn":9,"fix":"1535"},{"ruleId":"1266","severity":2,"message":"1536","line":88,"column":16,"nodeType":null,"endLine":91,"endColumn":9,"fix":"1537"},{"ruleId":"1266","severity":2,"message":"1429","line":95,"column":6,"nodeType":null,"endLine":95,"endColumn":6,"fix":"1538"},{"ruleId":"1266","severity":2,"message":"1539","line":107,"column":16,"nodeType":null,"endLine":109,"endColumn":9,"fix":"1540"},{"ruleId":"1266","severity":2,"message":"1429","line":112,"column":8,"nodeType":null,"endLine":112,"endColumn":8,"fix":"1541"},{"ruleId":"1266","severity":2,"message":"1413","line":122,"column":23,"nodeType":null,"endLine":122,"endColumn":24,"fix":"1542"},{"ruleId":"1266","severity":2,"message":"1543","line":127,"column":12,"nodeType":null,"endLine":127,"endColumn":32,"fix":"1544"},{"ruleId":"1266","severity":2,"message":"1545","line":128,"column":12,"nodeType":null,"endLine":128,"endColumn":29,"fix":"1546"},{"ruleId":"1266","severity":2,"message":"1429","line":132,"column":4,"nodeType":null,"endLine":132,"endColumn":4,"fix":"1547"},{"ruleId":"1266","severity":2,"message":"1279","line":20,"column":48,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":1,"column":23,"nodeType":null,"endLine":1,"endColumn":40,"fix":"1548"},{"ruleId":"1266","severity":2,"message":"1549","line":4,"column":9,"nodeType":null,"endLine":4,"endColumn":74,"fix":"1550"},{"ruleId":"1266","severity":2,"message":"1551","line":24,"column":69,"nodeType":null,"endLine":24,"endColumn":94,"fix":"1552"},{"ruleId":"1266","severity":2,"message":"1553","line":27,"column":11,"nodeType":null,"endLine":30,"endColumn":5,"fix":"1554"},{"ruleId":"1266","severity":2,"message":"1280","line":1,"column":25,"nodeType":null,"endLine":1,"endColumn":42,"fix":"1555"},{"ruleId":"1266","severity":2,"message":"1287","line":9,"column":32,"nodeType":null,"endLine":9,"endColumn":40,"fix":"1556"},{"ruleId":"1266","severity":2,"message":"1557","line":48,"column":7,"nodeType":null,"endLine":48,"endColumn":29,"fix":"1558"},{"ruleId":"1266","severity":2,"message":"1309","line":49,"column":1,"nodeType":null,"endLine":49,"endColumn":3,"fix":"1559"},{"ruleId":"1266","severity":2,"message":"1309","line":50,"column":11,"nodeType":null,"endLine":50,"endColumn":13,"fix":"1560"},{"ruleId":"1266","severity":2,"message":"1561","line":51,"column":1,"nodeType":null,"endLine":51,"endColumn":33,"fix":"1562"},{"ruleId":"1266","severity":2,"message":"1280","line":1,"column":22,"nodeType":null,"endLine":1,"endColumn":39,"fix":"1563"},{"ruleId":"1266","severity":2,"message":"1564","line":12,"column":10,"nodeType":null,"endLine":14,"endColumn":5,"fix":"1565"},{"ruleId":"1266","severity":2,"message":"1566","line":18,"column":17,"nodeType":null,"endLine":18,"endColumn":61,"fix":"1567"},{"ruleId":"1266","severity":2,"message":"1568","line":21,"column":39,"nodeType":null,"endLine":23,"endColumn":9,"fix":"1569"},{"ruleId":"1266","severity":2,"message":"1279","line":63,"column":16,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1570","line":3,"column":9,"nodeType":null,"endLine":3,"endColumn":49,"fix":"1571"},{"ruleId":"1266","severity":2,"message":"1277","line":11,"column":18,"nodeType":null,"endLine":11,"endColumn":19,"fix":"1572"},{"ruleId":"1266","severity":2,"message":"1573","line":14,"column":26,"nodeType":null,"endLine":14,"endColumn":114,"fix":"1574"},{"ruleId":"1266","severity":2,"message":"1287","line":15,"column":52,"nodeType":null,"endLine":15,"endColumn":60,"fix":"1575"},{"ruleId":"1266","severity":2,"message":"1576","line":19,"column":48,"nodeType":null,"endLine":19,"endColumn":107,"fix":"1577"},{"ruleId":"1266","severity":2,"message":"1279","line":85,"column":14,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1578","line":14,"column":19,"nodeType":null,"endLine":14,"endColumn":80,"fix":"1579"},{"ruleId":"1266","severity":2,"message":"1580","line":17,"column":61,"nodeType":null,"endLine":17,"endColumn":82,"fix":"1581"},{"ruleId":"1266","severity":2,"message":"1582","line":24,"column":56,"nodeType":null,"endLine":24,"endColumn":79,"fix":"1583"},{"ruleId":"1266","severity":2,"message":"1584","line":25,"column":28,"nodeType":null,"endLine":25,"endColumn":125,"fix":"1585"},{"ruleId":"1266","severity":2,"message":"1287","line":48,"column":44,"nodeType":null,"endLine":48,"endColumn":52,"fix":"1586"},{"ruleId":"1266","severity":2,"message":"1587","line":68,"column":43,"nodeType":null,"endLine":68,"endColumn":47,"fix":"1588"},{"ruleId":"1266","severity":2,"message":"1313","line":69,"column":14,"nodeType":null,"endLine":69,"endColumn":14,"fix":"1589"},{"ruleId":"1266","severity":2,"message":"1389","line":70,"column":43,"nodeType":null,"endLine":70,"endColumn":45,"fix":"1590"},{"ruleId":"1266","severity":2,"message":"1591","line":77,"column":16,"nodeType":null,"endLine":77,"endColumn":106,"fix":"1592"},{"ruleId":"1266","severity":2,"message":"1593","line":78,"column":51,"nodeType":null,"endLine":78,"endColumn":97,"fix":"1594"},{"ruleId":"1266","severity":2,"message":"1595","line":79,"column":24,"nodeType":null,"endLine":79,"endColumn":112,"fix":"1596"},{"ruleId":"1266","severity":2,"message":"1597","line":96,"column":43,"nodeType":null,"endLine":96,"endColumn":75,"fix":"1598"},{"ruleId":"1266","severity":2,"message":"1599","line":98,"column":24,"nodeType":null,"endLine":98,"endColumn":62,"fix":"1600"},{"ruleId":"1266","severity":2,"message":"1601","line":113,"column":62,"nodeType":null,"endLine":113,"endColumn":77,"fix":"1602"},{"ruleId":"1266","severity":2,"message":"1603","line":118,"column":15,"nodeType":null,"endLine":118,"endColumn":99,"fix":"1604"},{"ruleId":"1266","severity":2,"message":"1605","line":119,"column":31,"nodeType":null,"endLine":119,"endColumn":31,"fix":"1606"},{"ruleId":"1266","severity":2,"message":"1607","line":121,"column":28,"nodeType":null,"endLine":121,"endColumn":44,"fix":"1608"},{"ruleId":"1266","severity":2,"message":"1609","line":122,"column":15,"nodeType":null,"endLine":122,"endColumn":23,"fix":"1610"},{"ruleId":"1266","severity":2,"message":"1309","line":123,"column":1,"nodeType":null,"endLine":123,"endColumn":3,"fix":"1611"},{"ruleId":"1266","severity":2,"message":"1612","line":124,"column":11,"nodeType":null,"endLine":124,"endColumn":21,"fix":"1613"},{"ruleId":"1266","severity":2,"message":"1614","line":125,"column":13,"nodeType":null,"endLine":125,"endColumn":24,"fix":"1615"},{"ruleId":"1266","severity":2,"message":"1616","line":126,"column":11,"nodeType":null,"endLine":126,"endColumn":11,"fix":"1617"},{"ruleId":"1266","severity":2,"message":"1578","line":9,"column":19,"nodeType":null,"endLine":9,"endColumn":80,"fix":"1618"},{"ruleId":"1266","severity":2,"message":"1619","line":12,"column":63,"nodeType":null,"endLine":12,"endColumn":85,"fix":"1620"},{"ruleId":"1266","severity":2,"message":"1621","line":25,"column":23,"nodeType":null,"endLine":25,"endColumn":37,"fix":"1622"},{"ruleId":"1266","severity":2,"message":"1623","line":26,"column":23,"nodeType":null,"endLine":26,"endColumn":42,"fix":"1624"},{"ruleId":"1266","severity":2,"message":"1625","line":27,"column":77,"nodeType":null,"endLine":27,"endColumn":97,"fix":"1626"},{"ruleId":"1266","severity":2,"message":"1621","line":28,"column":27,"nodeType":null,"endLine":28,"endColumn":41,"fix":"1627"},{"ruleId":"1266","severity":2,"message":"1628","line":31,"column":42,"nodeType":null,"endLine":31,"endColumn":65,"fix":"1629"},{"ruleId":"1266","severity":2,"message":"1630","line":32,"column":50,"nodeType":null,"endLine":32,"endColumn":72,"fix":"1631"},{"ruleId":"1266","severity":2,"message":"1632","line":33,"column":63,"nodeType":null,"endLine":33,"endColumn":80,"fix":"1633"},{"ruleId":"1266","severity":2,"message":"1632","line":34,"column":58,"nodeType":null,"endLine":34,"endColumn":75,"fix":"1634"},{"ruleId":"1266","severity":2,"message":"1635","line":37,"column":21,"nodeType":null,"endLine":37,"endColumn":43,"fix":"1636"},{"ruleId":"1266","severity":2,"message":"1637","line":38,"column":19,"nodeType":null,"endLine":38,"endColumn":42,"fix":"1638"},{"ruleId":"1266","severity":2,"message":"1287","line":43,"column":38,"nodeType":null,"endLine":43,"endColumn":46,"fix":"1639"},{"ruleId":"1266","severity":2,"message":"1287","line":59,"column":44,"nodeType":null,"endLine":59,"endColumn":52,"fix":"1640"},{"ruleId":"1266","severity":2,"message":"1641","line":3,"column":62,"nodeType":null,"endLine":3,"endColumn":79,"fix":"1642"},{"ruleId":"1266","severity":2,"message":"1411","line":4,"column":22,"nodeType":null,"endLine":4,"endColumn":45,"fix":"1643"},{"ruleId":"1266","severity":2,"message":"1644","line":6,"column":9,"nodeType":null,"endLine":6,"endColumn":35,"fix":"1645"},{"ruleId":"1266","severity":2,"message":"1646","line":22,"column":54,"nodeType":null,"endLine":22,"endColumn":76,"fix":"1647"},{"ruleId":"1266","severity":2,"message":"1648","line":23,"column":21,"nodeType":null,"endLine":23,"endColumn":44,"fix":"1649"},{"ruleId":"1266","severity":2,"message":"1650","line":26,"column":67,"nodeType":null,"endLine":26,"endColumn":86,"fix":"1651"},{"ruleId":"1266","severity":2,"message":"1287","line":32,"column":35,"nodeType":null,"endLine":32,"endColumn":43,"fix":"1652"},{"ruleId":"1266","severity":2,"message":"1653","line":43,"column":36,"nodeType":null,"endLine":43,"endColumn":79,"fix":"1654"},{"ruleId":"1266","severity":2,"message":"1655","line":68,"column":11,"nodeType":null,"endLine":68,"endColumn":98,"fix":"1656"},{"ruleId":"1266","severity":2,"message":"1657","line":76,"column":43,"nodeType":null,"endLine":76,"endColumn":76,"fix":"1658"},{"ruleId":"1266","severity":2,"message":"1287","line":90,"column":37,"nodeType":null,"endLine":90,"endColumn":45,"fix":"1659"},{"ruleId":"1266","severity":2,"message":"1660","line":93,"column":52,"nodeType":null,"endLine":93,"endColumn":60,"fix":"1661"},{"ruleId":"1266","severity":2,"message":"1413","line":101,"column":14,"nodeType":null,"endLine":101,"endColumn":15,"fix":"1662"},{"ruleId":"1266","severity":2,"message":"1309","line":102,"column":1,"nodeType":null,"endLine":102,"endColumn":3,"fix":"1663"},{"ruleId":"1266","severity":2,"message":"1664","line":111,"column":11,"nodeType":null,"endLine":111,"endColumn":110,"fix":"1665"},{"ruleId":"1266","severity":2,"message":"1666","line":130,"column":23,"nodeType":null,"endLine":130,"endColumn":98,"fix":"1667"},{"ruleId":"1266","severity":2,"message":"1413","line":143,"column":16,"nodeType":null,"endLine":143,"endColumn":17,"fix":"1668"},{"ruleId":"1266","severity":2,"message":"1669","line":144,"column":1,"nodeType":null,"endLine":144,"endColumn":19,"fix":"1670"},{"ruleId":"1266","severity":2,"message":"1429","line":156,"column":12,"nodeType":null,"endLine":156,"endColumn":12,"fix":"1671"},{"ruleId":"1266","severity":2,"message":"1672","line":162,"column":21,"nodeType":null,"endLine":164,"endColumn":9,"fix":"1673"},{"ruleId":"1266","severity":2,"message":"1674","line":165,"column":21,"nodeType":null,"endLine":167,"endColumn":9,"fix":"1675"},{"ruleId":"1266","severity":2,"message":"1287","line":173,"column":34,"nodeType":null,"endLine":173,"endColumn":42,"fix":"1676"},{"ruleId":"1266","severity":2,"message":"1677","line":180,"column":33,"nodeType":null,"endLine":180,"endColumn":33,"fix":"1678"},{"ruleId":"1266","severity":2,"message":"1413","line":181,"column":12,"nodeType":null,"endLine":181,"endColumn":13,"fix":"1679"},{"ruleId":"1266","severity":2,"message":"1309","line":182,"column":1,"nodeType":null,"endLine":182,"endColumn":3,"fix":"1680"},{"ruleId":"1266","severity":2,"message":"1681","line":196,"column":16,"nodeType":null,"endLine":199,"endColumn":9,"fix":"1682"},{"ruleId":"1266","severity":2,"message":"1683","line":204,"column":13,"nodeType":null,"endLine":206,"endColumn":8,"fix":"1684"},{"ruleId":"1266","severity":2,"message":"1685","line":215,"column":78,"nodeType":null,"endLine":215,"endColumn":85,"fix":"1686"},{"ruleId":"1266","severity":2,"message":"1687","line":3,"column":9,"nodeType":null,"endLine":3,"endColumn":102,"fix":"1688"},{"ruleId":"1266","severity":2,"message":"1411","line":5,"column":22,"nodeType":null,"endLine":5,"endColumn":45,"fix":"1689"},{"ruleId":"1266","severity":2,"message":"1690","line":34,"column":56,"nodeType":null,"endLine":34,"endColumn":79,"fix":"1691"},{"ruleId":"1266","severity":2,"message":"1692","line":38,"column":13,"nodeType":null,"endLine":38,"endColumn":13,"fix":"1693"},{"ruleId":"1266","severity":2,"message":"1694","line":41,"column":60,"nodeType":null,"endLine":41,"endColumn":81,"fix":"1695"},{"ruleId":"1266","severity":2,"message":"1287","line":79,"column":22,"nodeType":null,"endLine":79,"endColumn":30,"fix":"1696"},{"ruleId":"1266","severity":2,"message":"1287","line":85,"column":51,"nodeType":null,"endLine":85,"endColumn":59,"fix":"1697"},{"ruleId":"1266","severity":2,"message":"1698","line":90,"column":43,"nodeType":null,"endLine":90,"endColumn":51,"fix":"1699"},{"ruleId":"1266","severity":2,"message":"1700","line":91,"column":60,"nodeType":null,"endLine":91,"endColumn":68,"fix":"1701"},{"ruleId":"1266","severity":2,"message":"1702","line":98,"column":31,"nodeType":null,"endLine":98,"endColumn":31,"fix":"1703"},{"ruleId":"1266","severity":2,"message":"1702","line":99,"column":31,"nodeType":null,"endLine":99,"endColumn":31,"fix":"1704"},{"ruleId":"1266","severity":2,"message":"1702","line":100,"column":31,"nodeType":null,"endLine":100,"endColumn":31,"fix":"1705"},{"ruleId":"1266","severity":2,"message":"1702","line":105,"column":31,"nodeType":null,"endLine":105,"endColumn":31,"fix":"1706"},{"ruleId":"1266","severity":2,"message":"1702","line":106,"column":31,"nodeType":null,"endLine":106,"endColumn":31,"fix":"1707"},{"ruleId":"1266","severity":2,"message":"1702","line":107,"column":31,"nodeType":null,"endLine":107,"endColumn":31,"fix":"1708"},{"ruleId":"1266","severity":2,"message":"1698","line":110,"column":48,"nodeType":null,"endLine":110,"endColumn":56,"fix":"1709"},{"ruleId":"1266","severity":2,"message":"1710","line":111,"column":22,"nodeType":null,"endLine":111,"endColumn":96,"fix":"1711"},{"ruleId":"1266","severity":2,"message":"1712","line":124,"column":38,"nodeType":null,"endLine":124,"endColumn":49,"fix":"1713"},{"ruleId":"1266","severity":2,"message":"1714","line":152,"column":14,"nodeType":null,"endLine":152,"endColumn":85,"fix":"1715"},{"ruleId":"1266","severity":2,"message":"1716","line":158,"column":14,"nodeType":null,"endLine":158,"endColumn":87,"fix":"1717"},{"ruleId":"1266","severity":2,"message":"1718","line":163,"column":20,"nodeType":null,"endLine":166,"endColumn":5,"fix":"1719"},{"ruleId":"1266","severity":2,"message":"1720","line":169,"column":37,"nodeType":null,"endLine":169,"endColumn":40,"fix":"1721"},{"ruleId":"1266","severity":2,"message":"1722","line":170,"column":22,"nodeType":null,"endLine":170,"endColumn":81,"fix":"1723"},{"ruleId":"1266","severity":2,"message":"1724","line":182,"column":26,"nodeType":null,"endLine":184,"endColumn":11,"fix":"1725"},{"ruleId":"1266","severity":2,"message":"1413","line":190,"column":26,"nodeType":null,"endLine":190,"endColumn":27,"fix":"1726"},{"ruleId":"1266","severity":2,"message":"1727","line":204,"column":38,"nodeType":null,"endLine":204,"endColumn":88,"fix":"1728"},{"ruleId":"1266","severity":2,"message":"1315","line":206,"column":1,"nodeType":null,"endLine":206,"endColumn":1,"fix":"1729"},{"ruleId":"1266","severity":2,"message":"1730","line":227,"column":14,"nodeType":null,"endLine":227,"endColumn":74,"fix":"1731"},{"ruleId":"1266","severity":2,"message":"1732","line":234,"column":30,"nodeType":null,"endLine":236,"endColumn":15,"fix":"1733"},{"ruleId":"1266","severity":2,"message":"1734","line":239,"column":28,"nodeType":null,"endLine":239,"endColumn":28,"fix":"1735"},{"ruleId":"1266","severity":2,"message":"1736","line":240,"column":1,"nodeType":null,"endLine":240,"endColumn":119,"fix":"1737"},{"ruleId":"1266","severity":2,"message":"1738","line":241,"column":13,"nodeType":null,"endLine":241,"endColumn":14,"fix":"1739"},{"ruleId":"1266","severity":2,"message":"1740","line":243,"column":22,"nodeType":null,"endLine":243,"endColumn":94,"fix":"1741"},{"ruleId":"1266","severity":2,"message":"1742","line":261,"column":48,"nodeType":null,"endLine":263,"endColumn":11,"fix":"1743"},{"ruleId":"1266","severity":2,"message":"1744","line":265,"column":13,"nodeType":null,"endLine":265,"endColumn":86,"fix":"1745"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":37,"nodeType":null,"endLine":2,"endColumn":54,"fix":"1746"},{"ruleId":"1266","severity":2,"message":"1747","line":17,"column":49,"nodeType":null,"endLine":17,"endColumn":83,"fix":"1748"},{"ruleId":"1266","severity":2,"message":"1277","line":22,"column":42,"nodeType":null,"endLine":22,"endColumn":43,"fix":"1749"},{"ruleId":"1266","severity":2,"message":"1750","line":31,"column":28,"nodeType":null,"endLine":32,"endColumn":6,"fix":"1751"},{"ruleId":"1266","severity":2,"message":"1752","line":33,"column":9,"nodeType":null,"endLine":33,"endColumn":109,"fix":"1753"},{"ruleId":"1266","severity":2,"message":"1754","line":39,"column":76,"nodeType":null,"endLine":39,"endColumn":89,"fix":"1755"},{"ruleId":"1266","severity":2,"message":"1756","line":46,"column":10,"nodeType":null,"endLine":46,"endColumn":15,"fix":"1757"},{"ruleId":"1266","severity":2,"message":"1758","line":50,"column":10,"nodeType":null,"endLine":50,"endColumn":18,"fix":"1759"},{"ruleId":"1266","severity":2,"message":"1760","line":55,"column":10,"nodeType":null,"endLine":55,"endColumn":14,"fix":"1761"},{"ruleId":"1266","severity":2,"message":"1762","line":59,"column":10,"nodeType":null,"endLine":59,"endColumn":14,"fix":"1763"},{"ruleId":"1266","severity":2,"message":"1764","line":70,"column":8,"nodeType":null,"endLine":70,"endColumn":14,"fix":"1765"},{"ruleId":"1266","severity":2,"message":"1287","line":75,"column":30,"nodeType":null,"endLine":75,"endColumn":38,"fix":"1766"},{"ruleId":"1266","severity":2,"message":"1767","line":77,"column":43,"nodeType":null,"endLine":77,"endColumn":95,"fix":"1768"},{"ruleId":"1266","severity":2,"message":"1769","line":79,"column":20,"nodeType":null,"endLine":79,"endColumn":30,"fix":"1770"},{"ruleId":"1266","severity":2,"message":"1771","line":80,"column":40,"nodeType":null,"endLine":80,"endColumn":70,"fix":"1772"},{"ruleId":"1266","severity":2,"message":"1773","line":83,"column":21,"nodeType":null,"endLine":83,"endColumn":52,"fix":"1774"},{"ruleId":"1266","severity":2,"message":"1775","line":86,"column":25,"nodeType":null,"endLine":86,"endColumn":82,"fix":"1776"},{"ruleId":"1266","severity":2,"message":"1777","line":110,"column":29,"nodeType":null,"endLine":110,"endColumn":88,"fix":"1778"},{"ruleId":"1266","severity":2,"message":"1277","line":114,"column":17,"nodeType":null,"endLine":114,"endColumn":18,"fix":"1779"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":22,"nodeType":null,"endLine":2,"endColumn":39,"fix":"1780"},{"ruleId":"1266","severity":2,"message":"1781","line":12,"column":62,"nodeType":null,"endLine":12,"endColumn":88,"fix":"1782"},{"ruleId":"1266","severity":2,"message":"1783","line":14,"column":40,"nodeType":null,"endLine":14,"endColumn":83,"fix":"1784"},{"ruleId":"1266","severity":2,"message":"1287","line":17,"column":46,"nodeType":null,"endLine":17,"endColumn":54,"fix":"1785"},{"ruleId":"1266","severity":2,"message":"1786","line":18,"column":11,"nodeType":null,"endLine":22,"endColumn":6,"fix":"1787"},{"ruleId":"1266","severity":2,"message":"1788","line":30,"column":17,"nodeType":null,"endLine":30,"endColumn":70,"fix":"1789"},{"ruleId":"1266","severity":2,"message":"1790","line":35,"column":39,"nodeType":null,"endLine":37,"endColumn":9,"fix":"1791"},{"ruleId":"1266","severity":2,"message":"1389","line":38,"column":47,"nodeType":null,"endLine":38,"endColumn":49,"fix":"1792"},{"ruleId":"1266","severity":2,"message":"1793","line":39,"column":15,"nodeType":null,"endLine":39,"endColumn":127,"fix":"1794"},{"ruleId":"1266","severity":2,"message":"1279","line":78,"column":14,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1795","line":4,"column":28,"nodeType":null,"endLine":4,"endColumn":46,"fix":"1796"},{"ruleId":"1266","severity":2,"message":"1797","line":5,"column":9,"nodeType":null,"endLine":5,"endColumn":55,"fix":"1798"},{"ruleId":"1266","severity":2,"message":"1277","line":18,"column":25,"nodeType":null,"endLine":18,"endColumn":26,"fix":"1799"},{"ruleId":"1266","severity":2,"message":"1277","line":24,"column":18,"nodeType":null,"endLine":24,"endColumn":19,"fix":"1800"},{"ruleId":"1266","severity":2,"message":"1801","line":27,"column":28,"nodeType":null,"endLine":27,"endColumn":122,"fix":"1802"},{"ruleId":"1266","severity":2,"message":"1803","line":35,"column":11,"nodeType":null,"endLine":35,"endColumn":140,"fix":"1804"},{"ruleId":"1266","severity":2,"message":"1805","line":43,"column":75,"nodeType":null,"endLine":43,"endColumn":99,"fix":"1806"},{"ruleId":"1266","severity":2,"message":"1287","line":44,"column":55,"nodeType":null,"endLine":44,"endColumn":63,"fix":"1807"},{"ruleId":"1266","severity":2,"message":"1808","line":48,"column":54,"nodeType":null,"endLine":48,"endColumn":104,"fix":"1809"},{"ruleId":"1266","severity":2,"message":"1810","line":52,"column":14,"nodeType":null,"endLine":52,"endColumn":86,"fix":"1811"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":31,"nodeType":null,"endLine":2,"endColumn":48,"fix":"1812"},{"ruleId":"1266","severity":2,"message":"1411","line":5,"column":22,"nodeType":null,"endLine":5,"endColumn":45,"fix":"1813"},{"ruleId":"1266","severity":2,"message":"1814","line":12,"column":72,"nodeType":null,"endLine":13,"endColumn":1,"fix":"1815"},{"ruleId":"1266","severity":2,"message":"1413","line":14,"column":46,"nodeType":null,"endLine":14,"endColumn":47,"fix":"1816"},{"ruleId":"1266","severity":2,"message":"1287","line":15,"column":31,"nodeType":null,"endLine":15,"endColumn":39,"fix":"1817"},{"ruleId":"1266","severity":2,"message":"1413","line":23,"column":42,"nodeType":null,"endLine":23,"endColumn":43,"fix":"1818"},{"ruleId":"1266","severity":2,"message":"1277","line":30,"column":36,"nodeType":null,"endLine":30,"endColumn":37,"fix":"1819"},{"ruleId":"1266","severity":2,"message":"1820","line":37,"column":22,"nodeType":null,"endLine":37,"endColumn":22,"fix":"1821"},{"ruleId":"1266","severity":2,"message":"1429","line":38,"column":6,"nodeType":null,"endLine":38,"endColumn":6,"fix":"1822"},{"ruleId":"1266","severity":2,"message":"1413","line":41,"column":40,"nodeType":null,"endLine":41,"endColumn":41,"fix":"1823"},{"ruleId":"1266","severity":2,"message":"1315","line":44,"column":7,"nodeType":null,"endLine":44,"endColumn":7,"fix":"1824"},{"ruleId":"1266","severity":2,"message":"1825","line":45,"column":1,"nodeType":null,"endLine":47,"endColumn":9,"fix":"1826"},{"ruleId":"1266","severity":2,"message":"1827","line":48,"column":1,"nodeType":null,"endLine":48,"endColumn":38,"fix":"1828"},{"ruleId":"1266","severity":2,"message":"1315","line":49,"column":1,"nodeType":null,"endLine":49,"endColumn":1,"fix":"1829"},{"ruleId":"1266","severity":2,"message":"1830","line":50,"column":1,"nodeType":null,"endLine":52,"endColumn":13,"fix":"1831"},{"ruleId":"1266","severity":2,"message":"1315","line":53,"column":1,"nodeType":null,"endLine":53,"endColumn":1,"fix":"1832"},{"ruleId":"1266","severity":2,"message":"1315","line":54,"column":1,"nodeType":null,"endLine":54,"endColumn":1,"fix":"1833"},{"ruleId":"1266","severity":2,"message":"1834","line":55,"column":9,"nodeType":null,"endLine":57,"endColumn":9,"fix":"1835"},{"ruleId":"1266","severity":2,"message":"1836","line":58,"column":9,"nodeType":null,"endLine":60,"endColumn":9,"fix":"1837"},{"ruleId":"1266","severity":2,"message":"1838","line":61,"column":1,"nodeType":null,"endLine":61,"endColumn":9,"fix":"1839"},{"ruleId":"1266","severity":2,"message":"1315","line":62,"column":1,"nodeType":null,"endLine":62,"endColumn":1,"fix":"1840"},{"ruleId":"1266","severity":2,"message":"1315","line":63,"column":13,"nodeType":null,"endLine":63,"endColumn":13,"fix":"1841"},{"ruleId":"1266","severity":2,"message":"1315","line":64,"column":11,"nodeType":null,"endLine":64,"endColumn":11,"fix":"1842"},{"ruleId":"1266","severity":2,"message":"1838","line":65,"column":1,"nodeType":null,"endLine":65,"endColumn":9,"fix":"1843"},{"ruleId":"1266","severity":2,"message":"1844","line":66,"column":9,"nodeType":null,"endLine":68,"endColumn":9,"fix":"1845"},{"ruleId":"1266","severity":2,"message":"1846","line":69,"column":1,"nodeType":null,"endLine":71,"endColumn":9,"fix":"1847"},{"ruleId":"1266","severity":2,"message":"1848","line":72,"column":1,"nodeType":null,"endLine":72,"endColumn":7,"fix":"1849"},{"ruleId":"1266","severity":2,"message":"1429","line":74,"column":6,"nodeType":null,"endLine":74,"endColumn":6,"fix":"1850"},{"ruleId":"1266","severity":2,"message":"1315","line":79,"column":1,"nodeType":null,"endLine":79,"endColumn":1,"fix":"1851"},{"ruleId":"1266","severity":2,"message":"1315","line":80,"column":7,"nodeType":null,"endLine":80,"endColumn":7,"fix":"1852"},{"ruleId":"1266","severity":2,"message":"1315","line":81,"column":9,"nodeType":null,"endLine":81,"endColumn":9,"fix":"1853"},{"ruleId":"1266","severity":2,"message":"1315","line":82,"column":11,"nodeType":null,"endLine":82,"endColumn":11,"fix":"1854"},{"ruleId":"1266","severity":2,"message":"1855","line":83,"column":1,"nodeType":null,"endLine":83,"endColumn":21,"fix":"1856"},{"ruleId":"1266","severity":2,"message":"1315","line":84,"column":1,"nodeType":null,"endLine":84,"endColumn":1,"fix":"1857"},{"ruleId":"1266","severity":2,"message":"1379","line":85,"column":1,"nodeType":null,"endLine":85,"endColumn":13,"fix":"1858"},{"ruleId":"1266","severity":2,"message":"1315","line":86,"column":1,"nodeType":null,"endLine":86,"endColumn":1,"fix":"1859"},{"ruleId":"1266","severity":2,"message":"1379","line":87,"column":1,"nodeType":null,"endLine":87,"endColumn":13,"fix":"1860"},{"ruleId":"1266","severity":2,"message":"1315","line":88,"column":13,"nodeType":null,"endLine":88,"endColumn":13,"fix":"1861"},{"ruleId":"1266","severity":2,"message":"1379","line":89,"column":1,"nodeType":null,"endLine":89,"endColumn":13,"fix":"1862"},{"ruleId":"1266","severity":2,"message":"1315","line":90,"column":11,"nodeType":null,"endLine":90,"endColumn":11,"fix":"1863"},{"ruleId":"1266","severity":2,"message":"1838","line":91,"column":1,"nodeType":null,"endLine":91,"endColumn":9,"fix":"1864"},{"ruleId":"1266","severity":2,"message":"1865","line":92,"column":9,"nodeType":null,"endLine":94,"endColumn":9,"fix":"1866"},{"ruleId":"1266","severity":2,"message":"1848","line":95,"column":1,"nodeType":null,"endLine":95,"endColumn":7,"fix":"1867"},{"ruleId":"1266","severity":2,"message":"1315","line":96,"column":1,"nodeType":null,"endLine":96,"endColumn":1,"fix":"1868"},{"ruleId":"1266","severity":2,"message":"1514","line":100,"column":1,"nodeType":null,"endLine":101,"endColumn":1,"fix":"1869"},{"ruleId":"1266","severity":2,"message":"1870","line":2,"column":9,"nodeType":null,"endLine":2,"endColumn":91,"fix":"1871"},{"ruleId":"1266","severity":2,"message":"1872","line":4,"column":16,"nodeType":null,"endLine":4,"endColumn":28,"fix":"1873"},{"ruleId":"1266","severity":2,"message":"1411","line":8,"column":31,"nodeType":null,"endLine":8,"endColumn":54,"fix":"1874"},{"ruleId":"1266","severity":2,"message":"1875","line":15,"column":31,"nodeType":null,"endLine":15,"endColumn":52,"fix":"1876"},{"ruleId":"1266","severity":2,"message":"1877","line":18,"column":54,"nodeType":null,"endLine":18,"endColumn":76,"fix":"1878"},{"ruleId":"1266","severity":2,"message":"1879","line":20,"column":56,"nodeType":null,"endLine":20,"endColumn":80,"fix":"1880"},{"ruleId":"1266","severity":2,"message":"1881","line":23,"column":27,"nodeType":null,"endLine":23,"endColumn":127,"fix":"1882"},{"ruleId":"1266","severity":2,"message":"1287","line":26,"column":31,"nodeType":null,"endLine":26,"endColumn":39,"fix":"1883"},{"ruleId":"1266","severity":2,"message":"1884","line":28,"column":11,"nodeType":null,"endLine":28,"endColumn":100,"fix":"1885"},{"ruleId":"1266","severity":2,"message":"1886","line":37,"column":36,"nodeType":null,"endLine":37,"endColumn":135,"fix":"1887"},{"ruleId":"1266","severity":2,"message":"1888","line":38,"column":52,"nodeType":null,"endLine":38,"endColumn":146,"fix":"1889"},{"ruleId":"1266","severity":2,"message":"1750","line":44,"column":29,"nodeType":null,"endLine":45,"endColumn":6,"fix":"1890"},{"ruleId":"1266","severity":2,"message":"1277","line":48,"column":65,"nodeType":null,"endLine":48,"endColumn":66,"fix":"1891"},{"ruleId":"1266","severity":2,"message":"1892","line":59,"column":14,"nodeType":null,"endLine":62,"endColumn":9,"fix":"1893"},{"ruleId":"1266","severity":2,"message":"1750","line":70,"column":38,"nodeType":null,"endLine":71,"endColumn":6,"fix":"1894"},{"ruleId":"1266","severity":2,"message":"1895","line":75,"column":10,"nodeType":null,"endLine":75,"endColumn":38,"fix":"1896"},{"ruleId":"1266","severity":2,"message":"1413","line":77,"column":11,"nodeType":null,"endLine":77,"endColumn":12,"fix":"1897"},{"ruleId":"1266","severity":2,"message":"1750","line":92,"column":44,"nodeType":null,"endLine":93,"endColumn":6,"fix":"1898"},{"ruleId":"1266","severity":2,"message":"1899","line":97,"column":10,"nodeType":null,"endLine":98,"endColumn":49,"fix":"1900"},{"ruleId":"1266","severity":2,"message":"1309","line":99,"column":1,"nodeType":null,"endLine":99,"endColumn":3,"fix":"1901"},{"ruleId":"1266","severity":2,"message":"1902","line":100,"column":1,"nodeType":null,"endLine":100,"endColumn":15,"fix":"1903"},{"ruleId":"1266","severity":2,"message":"1309","line":101,"column":15,"nodeType":null,"endLine":101,"endColumn":17,"fix":"1904"},{"ruleId":"1266","severity":2,"message":"1669","line":102,"column":1,"nodeType":null,"endLine":102,"endColumn":19,"fix":"1905"},{"ruleId":"1266","severity":2,"message":"1309","line":103,"column":1,"nodeType":null,"endLine":103,"endColumn":3,"fix":"1906"},{"ruleId":"1266","severity":2,"message":"1907","line":104,"column":17,"nodeType":null,"endLine":104,"endColumn":74,"fix":"1908"},{"ruleId":"1266","severity":2,"message":"1909","line":105,"column":15,"nodeType":null,"endLine":105,"endColumn":24,"fix":"1910"},{"ruleId":"1266","severity":2,"message":"1309","line":106,"column":1,"nodeType":null,"endLine":106,"endColumn":3,"fix":"1911"},{"ruleId":"1266","severity":2,"message":"1309","line":107,"column":13,"nodeType":null,"endLine":107,"endColumn":15,"fix":"1912"},{"ruleId":"1266","severity":2,"message":"1309","line":108,"column":1,"nodeType":null,"endLine":108,"endColumn":3,"fix":"1913"},{"ruleId":"1266","severity":2,"message":"1914","line":109,"column":9,"nodeType":null,"endLine":110,"endColumn":9,"fix":"1915"},{"ruleId":"1266","severity":2,"message":"1916","line":125,"column":5,"nodeType":null,"endLine":126,"endColumn":10,"fix":"1917"},{"ruleId":"1266","severity":2,"message":"1918","line":130,"column":10,"nodeType":null,"endLine":130,"endColumn":50,"fix":"1919"},{"ruleId":"1266","severity":2,"message":"1413","line":134,"column":11,"nodeType":null,"endLine":134,"endColumn":12,"fix":"1920"},{"ruleId":"1266","severity":2,"message":"1820","line":149,"column":9,"nodeType":null,"endLine":149,"endColumn":9,"fix":"1921"},{"ruleId":"1266","severity":2,"message":"1309","line":150,"column":1,"nodeType":null,"endLine":150,"endColumn":3,"fix":"1922"},{"ruleId":"1266","severity":2,"message":"1923","line":151,"column":1,"nodeType":null,"endLine":151,"endColumn":45,"fix":"1924"},{"ruleId":"1266","severity":2,"message":"1315","line":191,"column":5,"nodeType":null,"endLine":191,"endColumn":5,"fix":"1925"},{"ruleId":"1266","severity":2,"message":"1926","line":196,"column":78,"nodeType":null,"endLine":196,"endColumn":133,"fix":"1927"},{"ruleId":"1266","severity":2,"message":"1928","line":198,"column":12,"nodeType":null,"endLine":198,"endColumn":110,"fix":"1929"},{"ruleId":"1266","severity":2,"message":"1930","line":205,"column":27,"nodeType":null,"endLine":205,"endColumn":61,"fix":"1931"},{"ruleId":"1266","severity":2,"message":"1932","line":215,"column":31,"nodeType":null,"endLine":215,"endColumn":51,"fix":"1933"},{"ruleId":"1266","severity":2,"message":"1279","line":24,"column":33,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1934","line":11,"column":63,"nodeType":null,"endLine":11,"endColumn":87,"fix":"1935"},{"ruleId":"1266","severity":2,"message":"1287","line":13,"column":62,"nodeType":null,"endLine":13,"endColumn":70,"fix":"1936"},{"ruleId":"1266","severity":2,"message":"1287","line":23,"column":41,"nodeType":null,"endLine":23,"endColumn":49,"fix":"1937"},{"ruleId":"1266","severity":2,"message":"1938","line":24,"column":39,"nodeType":null,"endLine":24,"endColumn":44,"fix":"1939"},{"ruleId":"1266","severity":2,"message":"1315","line":37,"column":5,"nodeType":null,"endLine":37,"endColumn":5,"fix":"1940"},{"ruleId":"1266","severity":2,"message":"1941","line":39,"column":29,"nodeType":null,"endLine":39,"endColumn":49,"fix":"1942"},{"ruleId":"1266","severity":2,"message":"1389","line":41,"column":57,"nodeType":null,"endLine":41,"endColumn":59,"fix":"1943"},{"ruleId":"1266","severity":2,"message":"1389","line":42,"column":69,"nodeType":null,"endLine":42,"endColumn":71,"fix":"1944"},{"ruleId":"1266","severity":2,"message":"1945","line":43,"column":34,"nodeType":null,"endLine":43,"endColumn":107,"fix":"1946"},{"ruleId":"1266","severity":2,"message":"1279","line":343,"column":72,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":23,"nodeType":null,"endLine":2,"endColumn":40,"fix":"1947"},{"ruleId":"1266","severity":2,"message":"1948","line":10,"column":72,"nodeType":null,"endLine":10,"endColumn":103,"fix":"1949"},{"ruleId":"1266","severity":2,"message":"1950","line":24,"column":13,"nodeType":null,"endLine":24,"endColumn":82,"fix":"1951"},{"ruleId":"1266","severity":2,"message":"1952","line":33,"column":13,"nodeType":null,"endLine":33,"endColumn":78,"fix":"1953"},{"ruleId":"1266","severity":2,"message":"1287","line":39,"column":47,"nodeType":null,"endLine":39,"endColumn":55,"fix":"1954"},{"ruleId":"1266","severity":2,"message":"1287","line":49,"column":51,"nodeType":null,"endLine":49,"endColumn":59,"fix":"1955"},{"ruleId":"1266","severity":2,"message":"1287","line":59,"column":51,"nodeType":null,"endLine":59,"endColumn":59,"fix":"1956"},{"ruleId":"1266","severity":2,"message":"1957","line":63,"column":13,"nodeType":null,"endLine":63,"endColumn":65,"fix":"1958"},{"ruleId":"1266","severity":2,"message":"1287","line":69,"column":52,"nodeType":null,"endLine":69,"endColumn":60,"fix":"1959"},{"ruleId":"1266","severity":2,"message":"1287","line":79,"column":50,"nodeType":null,"endLine":79,"endColumn":58,"fix":"1960"},{"ruleId":"1266","severity":2,"message":"1287","line":89,"column":54,"nodeType":null,"endLine":89,"endColumn":62,"fix":"1961"},{"ruleId":"1266","severity":2,"message":"1287","line":99,"column":54,"nodeType":null,"endLine":99,"endColumn":62,"fix":"1962"},{"ruleId":"1266","severity":2,"message":"1287","line":109,"column":54,"nodeType":null,"endLine":109,"endColumn":62,"fix":"1963"},{"ruleId":"1266","severity":2,"message":"1279","line":37,"column":31,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1964","line":9,"column":53,"nodeType":null,"endLine":9,"endColumn":78,"fix":"1965"},{"ruleId":"1266","severity":2,"message":"1966","line":10,"column":44,"nodeType":null,"endLine":10,"endColumn":55,"fix":"1967"},{"ruleId":"1266","severity":2,"message":"1968","line":11,"column":19,"nodeType":null,"endLine":11,"endColumn":91,"fix":"1969"},{"ruleId":"1266","severity":2,"message":"1970","line":16,"column":29,"nodeType":null,"endLine":18,"endColumn":7,"fix":"1971"},{"ruleId":"1266","severity":2,"message":"1279","line":767,"column":49,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1795","line":4,"column":28,"nodeType":null,"endLine":4,"endColumn":46,"fix":"1972"},{"ruleId":"1266","severity":2,"message":"1973","line":5,"column":9,"nodeType":null,"endLine":5,"endColumn":70,"fix":"1974"},{"ruleId":"1266","severity":2,"message":"1277","line":20,"column":26,"nodeType":null,"endLine":20,"endColumn":27,"fix":"1975"},{"ruleId":"1266","severity":2,"message":"1976","line":31,"column":29,"nodeType":null,"endLine":31,"endColumn":115,"fix":"1977"},{"ruleId":"1266","severity":2,"message":"1978","line":41,"column":11,"nodeType":null,"endLine":41,"endColumn":128,"fix":"1979"},{"ruleId":"1266","severity":2,"message":"1980","line":49,"column":34,"nodeType":null,"endLine":49,"endColumn":121,"fix":"1981"},{"ruleId":"1266","severity":2,"message":"1982","line":51,"column":51,"nodeType":null,"endLine":51,"endColumn":69,"fix":"1983"},{"ruleId":"1266","severity":2,"message":"1413","line":55,"column":23,"nodeType":null,"endLine":55,"endColumn":24,"fix":"1984"},{"ruleId":"1266","severity":2,"message":"1985","line":56,"column":25,"nodeType":null,"endLine":56,"endColumn":29,"fix":"1986"},{"ruleId":"1266","severity":2,"message":"1987","line":57,"column":31,"nodeType":null,"endLine":57,"endColumn":38,"fix":"1988"},{"ruleId":"1266","severity":2,"message":"1989","line":68,"column":7,"nodeType":null,"endLine":68,"endColumn":90,"fix":"1990"},{"ruleId":"1266","severity":2,"message":"1991","line":73,"column":28,"nodeType":null,"endLine":73,"endColumn":102,"fix":"1992"},{"ruleId":"1266","severity":2,"message":"1993","line":80,"column":69,"nodeType":null,"endLine":80,"endColumn":123,"fix":"1994"},{"ruleId":"1266","severity":2,"message":"1429","line":82,"column":6,"nodeType":null,"endLine":82,"endColumn":6,"fix":"1995"},{"ruleId":"1266","severity":2,"message":"1996","line":85,"column":26,"nodeType":null,"endLine":85,"endColumn":157,"fix":"1997"},{"ruleId":"1266","severity":2,"message":"1287","line":86,"column":51,"nodeType":null,"endLine":86,"endColumn":59,"fix":"1998"},{"ruleId":"1266","severity":2,"message":"1999","line":90,"column":46,"nodeType":null,"endLine":90,"endColumn":103,"fix":"2000"},{"ruleId":"1266","severity":2,"message":"1313","line":94,"column":68,"nodeType":null,"endLine":94,"endColumn":68,"fix":"2001"},{"ruleId":"1266","severity":2,"message":"1279","line":71,"column":30,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1279","line":47,"column":18,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1309","line":23,"column":3,"nodeType":null,"endLine":23,"endColumn":5,"fix":"2002"},{"ruleId":"1266","severity":2,"message":"2003","line":24,"column":1,"nodeType":null,"endLine":24,"endColumn":5,"fix":"2004"},{"ruleId":"1266","severity":2,"message":"1309","line":25,"column":1,"nodeType":null,"endLine":25,"endColumn":3,"fix":"2005"},{"ruleId":"1266","severity":2,"message":"1309","line":26,"column":3,"nodeType":null,"endLine":26,"endColumn":5,"fix":"2006"},{"ruleId":"1266","severity":2,"message":"1429","line":27,"column":2,"nodeType":null,"endLine":27,"endColumn":2,"fix":"2007"},{"ruleId":"1266","severity":2,"message":"2008","line":29,"column":54,"nodeType":null,"endLine":29,"endColumn":90,"fix":"2009"},{"ruleId":"1266","severity":2,"message":"2010","line":42,"column":19,"nodeType":null,"endLine":42,"endColumn":38,"fix":"2011"},{"ruleId":"1266","severity":2,"message":"1309","line":52,"column":5,"nodeType":null,"endLine":52,"endColumn":7,"fix":"2012"},{"ruleId":"1266","severity":2,"message":"1309","line":53,"column":1,"nodeType":null,"endLine":53,"endColumn":3,"fix":"2013"},{"ruleId":"1266","severity":2,"message":"1309","line":54,"column":7,"nodeType":null,"endLine":54,"endColumn":9,"fix":"2014"},{"ruleId":"1266","severity":2,"message":"2015","line":55,"column":1,"nodeType":null,"endLine":55,"endColumn":5,"fix":"2016"},{"ruleId":"1266","severity":2,"message":"2015","line":56,"column":9,"nodeType":null,"endLine":56,"endColumn":13,"fix":"2017"},{"ruleId":"1266","severity":2,"message":"2018","line":57,"column":1,"nodeType":null,"endLine":57,"endColumn":13,"fix":"2019"},{"ruleId":"1266","severity":2,"message":"2015","line":58,"column":1,"nodeType":null,"endLine":58,"endColumn":5,"fix":"2020"},{"ruleId":"1266","severity":2,"message":"2018","line":59,"column":1,"nodeType":null,"endLine":59,"endColumn":13,"fix":"2021"},{"ruleId":"1266","severity":2,"message":"2015","line":60,"column":9,"nodeType":null,"endLine":60,"endColumn":13,"fix":"2022"},{"ruleId":"1266","severity":2,"message":"2023","line":61,"column":1,"nodeType":null,"endLine":61,"endColumn":11,"fix":"2024"},{"ruleId":"1266","severity":2,"message":"1309","line":62,"column":1,"nodeType":null,"endLine":62,"endColumn":3,"fix":"2025"},{"ruleId":"1266","severity":2,"message":"2026","line":66,"column":46,"nodeType":null,"endLine":66,"endColumn":78,"fix":"2027"},{"ruleId":"1266","severity":2,"message":"2028","line":68,"column":4,"nodeType":null,"endLine":68,"endColumn":5,"fix":"2029"},{"ruleId":"1266","severity":2,"message":"2026","line":70,"column":46,"nodeType":null,"endLine":70,"endColumn":78,"fix":"2030"},{"ruleId":"1266","severity":2,"message":"2028","line":72,"column":4,"nodeType":null,"endLine":72,"endColumn":5,"fix":"2031"},{"ruleId":"1266","severity":2,"message":"2032","line":73,"column":14,"nodeType":null,"endLine":73,"endColumn":49,"fix":"2033"},{"ruleId":"1266","severity":2,"message":"2034","line":74,"column":14,"nodeType":null,"endLine":74,"endColumn":91,"fix":"2035"},{"ruleId":"1266","severity":2,"message":"2036","line":77,"column":18,"nodeType":null,"endLine":77,"endColumn":32,"fix":"2037"},{"ruleId":"1266","severity":2,"message":"2038","line":78,"column":18,"nodeType":null,"endLine":78,"endColumn":35,"fix":"2039"},{"ruleId":"1266","severity":2,"message":"2040","line":79,"column":18,"nodeType":null,"endLine":79,"endColumn":35,"fix":"2041"},{"ruleId":"1266","severity":2,"message":"2042","line":80,"column":19,"nodeType":null,"endLine":80,"endColumn":33,"fix":"2043"},{"ruleId":"1266","severity":2,"message":"1429","line":81,"column":4,"nodeType":null,"endLine":81,"endColumn":4,"fix":"2044"},{"ruleId":"1266","severity":2,"message":"2045","line":100,"column":44,"nodeType":null,"endLine":100,"endColumn":84,"fix":"2046"},{"ruleId":"1266","severity":2,"message":"2047","line":101,"column":11,"nodeType":null,"endLine":101,"endColumn":95,"fix":"2048"},{"ruleId":"1266","severity":2,"message":"2049","line":105,"column":31,"nodeType":null,"endLine":105,"endColumn":42,"fix":"2050"},{"ruleId":"1266","severity":2,"message":"2051","line":109,"column":18,"nodeType":null,"endLine":109,"endColumn":69,"fix":"2052"},{"ruleId":"1266","severity":2,"message":"2053","line":110,"column":28,"nodeType":null,"endLine":110,"endColumn":57,"fix":"2054"},{"ruleId":"1266","severity":2,"message":"2055","line":119,"column":24,"nodeType":null,"endLine":119,"endColumn":85,"fix":"2056"},{"ruleId":"1266","severity":2,"message":"1429","line":126,"column":8,"nodeType":null,"endLine":126,"endColumn":8,"fix":"2057"},{"ruleId":"1266","severity":2,"message":"1277","line":135,"column":29,"nodeType":null,"endLine":135,"endColumn":30,"fix":"2058"},{"ruleId":"1266","severity":2,"message":"1277","line":139,"column":27,"nodeType":null,"endLine":139,"endColumn":28,"fix":"2059"},{"ruleId":"1266","severity":2,"message":"1277","line":140,"column":10,"nodeType":null,"endLine":140,"endColumn":11,"fix":"2060"},{"ruleId":"1266","severity":2,"message":"1277","line":145,"column":26,"nodeType":null,"endLine":145,"endColumn":27,"fix":"2061"},{"ruleId":"1266","severity":2,"message":"2062","line":149,"column":17,"nodeType":null,"endLine":149,"endColumn":40,"fix":"2063"},{"ruleId":"1266","severity":2,"message":"2064","line":170,"column":20,"nodeType":null,"endLine":170,"endColumn":46,"fix":"2065"},{"ruleId":"1266","severity":2,"message":"2064","line":179,"column":22,"nodeType":null,"endLine":179,"endColumn":48,"fix":"2066"},{"ruleId":"1266","severity":2,"message":"2067","line":192,"column":58,"nodeType":null,"endLine":192,"endColumn":82,"fix":"2068"},{"ruleId":"1266","severity":2,"message":"1309","line":193,"column":1,"nodeType":null,"endLine":193,"endColumn":3,"fix":"2069"},{"ruleId":"1266","severity":2,"message":"2070","line":195,"column":3,"nodeType":null,"endLine":195,"endColumn":139,"fix":"2071"},{"ruleId":"1266","severity":2,"message":"2072","line":196,"column":1,"nodeType":null,"endLine":196,"endColumn":2,"fix":"2073"},{"ruleId":"1266","severity":2,"message":"2074","line":1,"column":16,"nodeType":null,"endLine":1,"endColumn":73,"fix":"2075"},{"ruleId":"1266","severity":2,"message":"1280","line":2,"column":24,"nodeType":null,"endLine":2,"endColumn":41,"fix":"2076"},{"ruleId":"1266","severity":2,"message":"1514","line":24,"column":1,"nodeType":null,"endLine":25,"endColumn":1,"fix":"2077"},{"ruleId":"1266","severity":2,"message":"2078","line":26,"column":54,"nodeType":null,"endLine":26,"endColumn":74,"fix":"2079"},{"ruleId":"1266","severity":2,"message":"2080","line":33,"column":36,"nodeType":null,"endLine":33,"endColumn":44,"fix":"2081"},{"ruleId":"1266","severity":2,"message":"2080","line":34,"column":30,"nodeType":null,"endLine":34,"endColumn":38,"fix":"2082"},{"ruleId":"1266","severity":2,"message":"2083","line":35,"column":33,"nodeType":null,"endLine":35,"endColumn":73,"fix":"2084"},{"ruleId":"1266","severity":2,"message":"2085","line":39,"column":30,"nodeType":null,"endLine":39,"endColumn":40,"fix":"2086"},{"ruleId":"1266","severity":2,"message":"2087","line":42,"column":24,"nodeType":null,"endLine":42,"endColumn":52,"fix":"2088"},{"ruleId":"1266","severity":2,"message":"2083","line":49,"column":15,"nodeType":null,"endLine":49,"endColumn":55,"fix":"2089"},{"ruleId":"1266","severity":2,"message":"2090","line":54,"column":20,"nodeType":null,"endLine":54,"endColumn":74,"fix":"2091"},{"ruleId":"1266","severity":2,"message":"2092","line":57,"column":18,"nodeType":null,"endLine":57,"endColumn":66,"fix":"2093"},{"ruleId":"1266","severity":2,"message":"1514","line":62,"column":2,"nodeType":null,"endLine":63,"endColumn":1,"fix":"2094"},{"ruleId":"1266","severity":2,"message":"2095","line":65,"column":74,"nodeType":null,"endLine":65,"endColumn":106,"fix":"2096"},{"ruleId":"1266","severity":2,"message":"2097","line":76,"column":35,"nodeType":null,"endLine":76,"endColumn":35,"fix":"2098"},{"ruleId":"1266","severity":2,"message":"2099","line":77,"column":1,"nodeType":null,"endLine":77,"endColumn":77,"fix":"2100"},{"ruleId":"1266","severity":2,"message":"2101","line":78,"column":1,"nodeType":null,"endLine":78,"endColumn":42,"fix":"2102"},{"ruleId":"1266","severity":2,"message":"1315","line":80,"column":1,"nodeType":null,"endLine":80,"endColumn":1,"fix":"2103"},{"ruleId":"1266","severity":2,"message":"1315","line":82,"column":5,"nodeType":null,"endLine":82,"endColumn":5,"fix":"2104"},{"ruleId":"1266","severity":2,"message":"1315","line":83,"column":1,"nodeType":null,"endLine":83,"endColumn":1,"fix":"2105"},{"ruleId":"1266","severity":2,"message":"1848","line":84,"column":1,"nodeType":null,"endLine":84,"endColumn":7,"fix":"2106"},{"ruleId":"1266","severity":2,"message":"1315","line":85,"column":1,"nodeType":null,"endLine":85,"endColumn":1,"fix":"2107"},{"ruleId":"1266","severity":2,"message":"1315","line":86,"column":1,"nodeType":null,"endLine":86,"endColumn":1,"fix":"2108"},{"ruleId":"1266","severity":2,"message":"1315","line":87,"column":5,"nodeType":null,"endLine":87,"endColumn":5,"fix":"2109"},{"ruleId":"1266","severity":2,"message":"1315","line":88,"column":1,"nodeType":null,"endLine":88,"endColumn":1,"fix":"2110"},{"ruleId":"1266","severity":2,"message":"2111","line":89,"column":1,"nodeType":null,"endLine":89,"endColumn":5,"fix":"2112"},{"ruleId":"1266","severity":2,"message":"2113","line":91,"column":1,"nodeType":null,"endLine":91,"endColumn":79,"fix":"2114"},{"ruleId":"1266","severity":2,"message":"2115","line":93,"column":1,"nodeType":null,"endLine":93,"endColumn":32,"fix":"2116"},{"ruleId":"1266","severity":2,"message":"2117","line":94,"column":7,"nodeType":null,"endLine":94,"endColumn":109,"fix":"2118"},{"ruleId":"1266","severity":2,"message":"2119","line":95,"column":3,"nodeType":null,"endLine":96,"endColumn":1,"fix":"2120"},{"ruleId":"1266","severity":2,"message":"2121","line":97,"column":3,"nodeType":null,"endLine":97,"endColumn":13,"fix":"2122"},{"ruleId":"1266","severity":2,"message":"1287","line":102,"column":37,"nodeType":null,"endLine":102,"endColumn":45,"fix":"2123"},{"ruleId":"1266","severity":2,"message":"1820","line":103,"column":78,"nodeType":null,"endLine":103,"endColumn":78,"fix":"2124"},{"ruleId":"1266","severity":2,"message":"1750","line":107,"column":32,"nodeType":null,"endLine":108,"endColumn":6,"fix":"2125"},{"ruleId":"1266","severity":2,"message":"2126","line":109,"column":49,"nodeType":null,"endLine":109,"endColumn":58,"fix":"2127"},{"ruleId":"1266","severity":2,"message":"2128","line":110,"column":9,"nodeType":null,"endLine":111,"endColumn":8,"fix":"2129"},{"ruleId":"1266","severity":2,"message":"1287","line":116,"column":37,"nodeType":null,"endLine":116,"endColumn":45,"fix":"2130"},{"ruleId":"1266","severity":2,"message":"2131","line":119,"column":21,"nodeType":null,"endLine":119,"endColumn":23,"fix":"2132"},{"ruleId":"1266","severity":2,"message":"2133","line":120,"column":57,"nodeType":null,"endLine":120,"endColumn":103,"fix":"2134"},{"ruleId":"1266","severity":2,"message":"2135","line":121,"column":6,"nodeType":null,"endLine":121,"endColumn":10,"fix":"2136"},{"ruleId":"1266","severity":2,"message":"1287","line":133,"column":30,"nodeType":null,"endLine":133,"endColumn":38,"fix":"2137"},{"ruleId":"1266","severity":2,"message":"1660","line":137,"column":17,"nodeType":null,"endLine":137,"endColumn":25,"fix":"2138"},{"ruleId":"1266","severity":2,"message":"1287","line":143,"column":30,"nodeType":null,"endLine":143,"endColumn":38,"fix":"2139"},{"ruleId":"1266","severity":2,"message":"1660","line":147,"column":17,"nodeType":null,"endLine":147,"endColumn":25,"fix":"2140"},{"ruleId":"1266","severity":2,"message":"1287","line":153,"column":65,"nodeType":null,"endLine":153,"endColumn":73,"fix":"2141"},{"ruleId":"1266","severity":2,"message":"2142","line":163,"column":23,"nodeType":null,"endLine":163,"endColumn":83,"fix":"2143"},{"ruleId":"1266","severity":2,"message":"2144","line":174,"column":27,"nodeType":null,"endLine":174,"endColumn":54,"fix":"2145"},{"ruleId":"1266","severity":2,"message":"2146","line":176,"column":43,"nodeType":null,"endLine":176,"endColumn":66,"fix":"2147"},{"ruleId":"1266","severity":2,"message":"1287","line":191,"column":30,"nodeType":null,"endLine":191,"endColumn":38,"fix":"2148"},{"ruleId":"1266","severity":2,"message":"2149","line":205,"column":69,"nodeType":null,"endLine":205,"endColumn":79,"fix":"2150"},{"ruleId":"1266","severity":2,"message":"2151","line":206,"column":12,"nodeType":null,"endLine":206,"endColumn":87,"fix":"2152"},{"ruleId":"1266","severity":2,"message":"1287","line":210,"column":37,"nodeType":null,"endLine":210,"endColumn":45,"fix":"2153"},{"ruleId":"1266","severity":2,"message":"1287","line":216,"column":37,"nodeType":null,"endLine":216,"endColumn":45,"fix":"2154"},{"ruleId":"1266","severity":2,"message":"1677","line":223,"column":11,"nodeType":null,"endLine":223,"endColumn":11,"fix":"2155"},{"ruleId":"1266","severity":2,"message":"1309","line":224,"column":9,"nodeType":null,"endLine":224,"endColumn":11,"fix":"2156"},{"ruleId":"1266","severity":2,"message":"2157","line":225,"column":1,"nodeType":null,"endLine":225,"endColumn":42,"fix":"2158"},{"ruleId":"1266","severity":2,"message":"2159","line":228,"column":31,"nodeType":null,"endLine":228,"endColumn":42,"fix":"2160"},{"ruleId":"1266","severity":2,"message":"2161","line":243,"column":19,"nodeType":null,"endLine":243,"endColumn":95,"fix":"2162"},{"ruleId":"1266","severity":2,"message":"1277","line":246,"column":19,"nodeType":null,"endLine":246,"endColumn":20,"fix":"2163"},{"ruleId":"1266","severity":2,"message":"1277","line":252,"column":32,"nodeType":null,"endLine":252,"endColumn":33,"fix":"2164"},{"ruleId":"1266","severity":2,"message":"2159","line":269,"column":36,"nodeType":null,"endLine":269,"endColumn":47,"fix":"2165"},{"ruleId":"1266","severity":2,"message":"1277","line":279,"column":26,"nodeType":null,"endLine":279,"endColumn":27,"fix":"2166"},{"ruleId":"1266","severity":2,"message":"1277","line":285,"column":37,"nodeType":null,"endLine":285,"endColumn":38,"fix":"2167"},{"ruleId":"1266","severity":2,"message":"2168","line":294,"column":17,"nodeType":null,"endLine":294,"endColumn":114,"fix":"2169"},{"ruleId":"1266","severity":2,"message":"2170","line":302,"column":14,"nodeType":null,"endLine":302,"endColumn":106,"fix":"2171"},{"ruleId":"1266","severity":2,"message":"2172","line":309,"column":44,"nodeType":null,"endLine":311,"endColumn":13,"fix":"2173"},{"ruleId":"1266","severity":2,"message":"2174","line":316,"column":14,"nodeType":null,"endLine":316,"endColumn":97,"fix":"2175"},{"ruleId":"1266","severity":2,"message":"1279","line":248,"column":34,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2176","line":1,"column":13,"nodeType":null,"endLine":1,"endColumn":19,"fix":"2177"},{"ruleId":"1266","severity":2,"message":"1750","line":10,"column":23,"nodeType":null,"endLine":11,"endColumn":6,"fix":"2178"},{"ruleId":"1266","severity":2,"message":"1277","line":20,"column":36,"nodeType":null,"endLine":20,"endColumn":37,"fix":"2179"},{"ruleId":"1266","severity":2,"message":"2180","line":22,"column":12,"nodeType":null,"endLine":27,"endColumn":6,"fix":"2181"},{"ruleId":"1266","severity":2,"message":"2182","line":30,"column":42,"nodeType":null,"endLine":30,"endColumn":66,"fix":"2183"},{"ruleId":"1266","severity":2,"message":"2184","line":2,"column":31,"nodeType":null,"endLine":2,"endColumn":47,"fix":"2185"},{"ruleId":"1266","severity":2,"message":"2186","line":3,"column":31,"nodeType":null,"endLine":3,"endColumn":54,"fix":"2187"},{"ruleId":"1266","severity":2,"message":"1277","line":34,"column":15,"nodeType":null,"endLine":34,"endColumn":16,"fix":"2188"},{"ruleId":"1266","severity":2,"message":"1277","line":41,"column":8,"nodeType":null,"endLine":41,"endColumn":9,"fix":"2189"},{"ruleId":"1266","severity":2,"message":"2190","line":47,"column":25,"nodeType":null,"endLine":47,"endColumn":78,"fix":"2191"},{"ruleId":"1266","severity":2,"message":"1277","line":50,"column":15,"nodeType":null,"endLine":50,"endColumn":16,"fix":"2192"},{"ruleId":"1266","severity":2,"message":"1413","line":67,"column":43,"nodeType":null,"endLine":67,"endColumn":44,"fix":"2193"},{"ruleId":"1266","severity":2,"message":"2194","line":76,"column":13,"nodeType":null,"endLine":76,"endColumn":13,"fix":"2195"},{"ruleId":"1266","severity":2,"message":"1315","line":77,"column":11,"nodeType":null,"endLine":77,"endColumn":11,"fix":"2196"},{"ruleId":"1266","severity":2,"message":"2197","line":78,"column":1,"nodeType":null,"endLine":78,"endColumn":11,"fix":"2198"},{"ruleId":"1266","severity":2,"message":"1277","line":88,"column":40,"nodeType":null,"endLine":88,"endColumn":41,"fix":"2199"},{"ruleId":"1266","severity":2,"message":"1277","line":89,"column":8,"nodeType":null,"endLine":89,"endColumn":9,"fix":"2200"},{"ruleId":"1266","severity":2,"message":"1277","line":107,"column":34,"nodeType":null,"endLine":107,"endColumn":35,"fix":"2201"},{"ruleId":"1266","severity":2,"message":"1277","line":108,"column":8,"nodeType":null,"endLine":108,"endColumn":9,"fix":"2202"},{"ruleId":"1266","severity":2,"message":"1277","line":120,"column":34,"nodeType":null,"endLine":120,"endColumn":35,"fix":"2203"},{"ruleId":"1266","severity":2,"message":"1277","line":139,"column":47,"nodeType":null,"endLine":139,"endColumn":48,"fix":"2204"},{"ruleId":"1266","severity":2,"message":"1277","line":140,"column":8,"nodeType":null,"endLine":140,"endColumn":9,"fix":"2205"},{"ruleId":"1266","severity":2,"message":"1277","line":152,"column":47,"nodeType":null,"endLine":152,"endColumn":48,"fix":"2206"},{"ruleId":"1266","severity":2,"message":"1277","line":160,"column":40,"nodeType":null,"endLine":160,"endColumn":41,"fix":"2207"},{"ruleId":"1266","severity":2,"message":"1277","line":161,"column":8,"nodeType":null,"endLine":161,"endColumn":9,"fix":"2208"},{"ruleId":"1266","severity":2,"message":"1277","line":179,"column":42,"nodeType":null,"endLine":179,"endColumn":43,"fix":"2209"},{"ruleId":"1266","severity":2,"message":"1277","line":180,"column":8,"nodeType":null,"endLine":180,"endColumn":9,"fix":"2210"},{"ruleId":"1266","severity":2,"message":"1277","line":192,"column":42,"nodeType":null,"endLine":192,"endColumn":43,"fix":"2211"},{"ruleId":"1266","severity":2,"message":"2212","line":197,"column":45,"nodeType":null,"endLine":197,"endColumn":91,"fix":"2213"},{"ruleId":"1266","severity":2,"message":"2214","line":198,"column":43,"nodeType":null,"endLine":198,"endColumn":87,"fix":"2215"},{"ruleId":"1266","severity":2,"message":"2216","line":201,"column":34,"nodeType":null,"endLine":201,"endColumn":55,"fix":"2217"},{"ruleId":"1266","severity":2,"message":"2216","line":205,"column":31,"nodeType":null,"endLine":205,"endColumn":52,"fix":"2218"},{"ruleId":"1266","severity":2,"message":"1413","line":229,"column":60,"nodeType":null,"endLine":229,"endColumn":61,"fix":"2219"},{"ruleId":"1266","severity":2,"message":"2220","line":230,"column":40,"nodeType":null,"endLine":230,"endColumn":103,"fix":"2221"},{"ruleId":"1266","severity":2,"message":"2222","line":232,"column":36,"nodeType":null,"endLine":232,"endColumn":99,"fix":"2223"},{"ruleId":"1266","severity":2,"message":"2224","line":233,"column":1,"nodeType":null,"endLine":233,"endColumn":111,"fix":"2225"},{"ruleId":"1266","severity":2,"message":"2226","line":240,"column":57,"nodeType":null,"endLine":240,"endColumn":119,"fix":"2227"},{"ruleId":"1266","severity":2,"message":"2228","line":241,"column":37,"nodeType":null,"endLine":241,"endColumn":68,"fix":"2229"},{"ruleId":"1266","severity":2,"message":"2230","line":242,"column":31,"nodeType":null,"endLine":242,"endColumn":56,"fix":"2231"},{"ruleId":"1266","severity":2,"message":"2232","line":243,"column":40,"nodeType":null,"endLine":243,"endColumn":74,"fix":"2233"},{"ruleId":"1266","severity":2,"message":"2234","line":244,"column":46,"nodeType":null,"endLine":244,"endColumn":86,"fix":"2235"},{"ruleId":"1266","severity":2,"message":"2236","line":245,"column":43,"nodeType":null,"endLine":245,"endColumn":80,"fix":"2237"},{"ruleId":"1266","severity":2,"message":"2238","line":247,"column":43,"nodeType":null,"endLine":247,"endColumn":73,"fix":"2239"},{"ruleId":"1266","severity":2,"message":"2240","line":249,"column":29,"nodeType":null,"endLine":249,"endColumn":52,"fix":"2241"},{"ruleId":"1266","severity":2,"message":"2242","line":250,"column":31,"nodeType":null,"endLine":250,"endColumn":56,"fix":"2243"},{"ruleId":"1266","severity":2,"message":"2244","line":252,"column":37,"nodeType":null,"endLine":252,"endColumn":68,"fix":"2245"},{"ruleId":"1266","severity":2,"message":"2246","line":253,"column":48,"nodeType":null,"endLine":253,"endColumn":99,"fix":"2247"},{"ruleId":"1266","severity":2,"message":"2248","line":265,"column":20,"nodeType":null,"endLine":265,"endColumn":97,"fix":"2249"},{"ruleId":"1266","severity":2,"message":"2248","line":271,"column":20,"nodeType":null,"endLine":271,"endColumn":97,"fix":"2250"},{"ruleId":"1266","severity":2,"message":"2248","line":277,"column":20,"nodeType":null,"endLine":277,"endColumn":97,"fix":"2251"},{"ruleId":"1266","severity":2,"message":"2252","line":293,"column":20,"nodeType":null,"endLine":293,"endColumn":93,"fix":"2253"},{"ruleId":"1266","severity":2,"message":"2254","line":310,"column":20,"nodeType":null,"endLine":310,"endColumn":97,"fix":"2255"},{"ruleId":"1266","severity":2,"message":"2256","line":315,"column":52,"nodeType":null,"endLine":315,"endColumn":62,"fix":"2257"},{"ruleId":"1266","severity":2,"message":"2252","line":321,"column":20,"nodeType":null,"endLine":321,"endColumn":93,"fix":"2258"},{"ruleId":"1266","severity":2,"message":"2259","line":334,"column":20,"nodeType":null,"endLine":334,"endColumn":94,"fix":"2260"},{"ruleId":"1266","severity":2,"message":"2259","line":341,"column":20,"nodeType":null,"endLine":341,"endColumn":94,"fix":"2261"},{"ruleId":"1266","severity":2,"message":"2259","line":348,"column":20,"nodeType":null,"endLine":348,"endColumn":94,"fix":"2262"},{"ruleId":"1266","severity":2,"message":"1277","line":362,"column":54,"nodeType":null,"endLine":362,"endColumn":55,"fix":"2263"},{"ruleId":"1266","severity":2,"message":"1277","line":369,"column":54,"nodeType":null,"endLine":369,"endColumn":55,"fix":"2264"},{"ruleId":"1266","severity":2,"message":"2265","line":376,"column":20,"nodeType":null,"endLine":376,"endColumn":20,"fix":"2266"},{"ruleId":"1266","severity":2,"message":"2267","line":381,"column":37,"nodeType":null,"endLine":381,"endColumn":93,"fix":"2268"},{"ruleId":"1266","severity":2,"message":"2267","line":385,"column":39,"nodeType":null,"endLine":385,"endColumn":95,"fix":"2269"},{"ruleId":"1266","severity":2,"message":"2270","line":398,"column":20,"nodeType":null,"endLine":398,"endColumn":30,"fix":"2271"},{"ruleId":"1266","severity":2,"message":"2270","line":404,"column":20,"nodeType":null,"endLine":404,"endColumn":30,"fix":"2272"},{"ruleId":"1266","severity":2,"message":"1277","line":411,"column":34,"nodeType":null,"endLine":411,"endColumn":35,"fix":"2273"},{"ruleId":"1266","severity":2,"message":"1277","line":419,"column":38,"nodeType":null,"endLine":419,"endColumn":39,"fix":"2274"},{"ruleId":"1266","severity":2,"message":"1277","line":420,"column":8,"nodeType":null,"endLine":420,"endColumn":9,"fix":"2275"},{"ruleId":"1266","severity":2,"message":"2276","line":424,"column":38,"nodeType":null,"endLine":424,"endColumn":100,"fix":"2277"},{"ruleId":"1266","severity":2,"message":"1277","line":429,"column":44,"nodeType":null,"endLine":429,"endColumn":45,"fix":"2278"},{"ruleId":"1266","severity":2,"message":"1277","line":430,"column":8,"nodeType":null,"endLine":430,"endColumn":9,"fix":"2279"},{"ruleId":"1266","severity":2,"message":"1277","line":438,"column":17,"nodeType":null,"endLine":438,"endColumn":18,"fix":"2280"},{"ruleId":"1266","severity":2,"message":"1277","line":439,"column":8,"nodeType":null,"endLine":439,"endColumn":9,"fix":"2281"},{"ruleId":"1266","severity":2,"message":"1277","line":447,"column":17,"nodeType":null,"endLine":447,"endColumn":18,"fix":"2282"},{"ruleId":"1266","severity":2,"message":"1277","line":448,"column":8,"nodeType":null,"endLine":448,"endColumn":9,"fix":"2283"},{"ruleId":"1266","severity":2,"message":"2284","line":452,"column":34,"nodeType":null,"endLine":452,"endColumn":80,"fix":"2285"},{"ruleId":"1266","severity":2,"message":"1277","line":457,"column":21,"nodeType":null,"endLine":457,"endColumn":22,"fix":"2286"},{"ruleId":"1266","severity":2,"message":"1277","line":458,"column":8,"nodeType":null,"endLine":458,"endColumn":9,"fix":"2287"},{"ruleId":"1266","severity":2,"message":"1277","line":466,"column":34,"nodeType":null,"endLine":466,"endColumn":35,"fix":"2288"},{"ruleId":"1266","severity":2,"message":"1277","line":474,"column":34,"nodeType":null,"endLine":474,"endColumn":35,"fix":"2289"},{"ruleId":"1266","severity":2,"message":"1277","line":482,"column":34,"nodeType":null,"endLine":482,"endColumn":35,"fix":"2290"},{"ruleId":"1266","severity":2,"message":"1277","line":489,"column":34,"nodeType":null,"endLine":489,"endColumn":35,"fix":"2291"},{"ruleId":"1266","severity":2,"message":"1277","line":496,"column":34,"nodeType":null,"endLine":496,"endColumn":35,"fix":"2292"},{"ruleId":"1266","severity":2,"message":"1277","line":503,"column":34,"nodeType":null,"endLine":503,"endColumn":35,"fix":"2293"},{"ruleId":"1266","severity":2,"message":"2294","line":510,"column":19,"nodeType":null,"endLine":510,"endColumn":35,"fix":"2295"},{"ruleId":"1266","severity":2,"message":"2296","line":514,"column":42,"nodeType":null,"endLine":514,"endColumn":98,"fix":"2297"},{"ruleId":"1266","severity":2,"message":"2298","line":517,"column":19,"nodeType":null,"endLine":517,"endColumn":49,"fix":"2299"},{"ruleId":"1266","severity":2,"message":"1277","line":518,"column":34,"nodeType":null,"endLine":518,"endColumn":35,"fix":"2300"},{"ruleId":"1266","severity":2,"message":"1279","line":71,"column":47,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1514","line":5,"column":33,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2301"},{"ruleId":"1266","severity":2,"message":"2302","line":19,"column":57,"nodeType":null,"endLine":19,"endColumn":85,"fix":"2303"},{"ruleId":"1266","severity":2,"message":"1277","line":27,"column":10,"nodeType":null,"endLine":27,"endColumn":11,"fix":"2304"},{"ruleId":"1266","severity":2,"message":"2305","line":65,"column":11,"nodeType":null,"endLine":65,"endColumn":51,"fix":"2306"},{"ruleId":"1266","severity":2,"message":"2307","line":16,"column":31,"nodeType":null,"endLine":16,"endColumn":62,"fix":"2308"},{"ruleId":"1266","severity":2,"message":"2309","line":22,"column":25,"nodeType":null,"endLine":22,"endColumn":123,"fix":"2310"},{"ruleId":"1266","severity":2,"message":"1660","line":26,"column":23,"nodeType":null,"endLine":26,"endColumn":31,"fix":"2311"},{"ruleId":"1266","severity":2,"message":"2312","line":34,"column":32,"nodeType":null,"endLine":34,"endColumn":57,"fix":"2313"},{"ruleId":"1266","severity":2,"message":"1660","line":39,"column":23,"nodeType":null,"endLine":39,"endColumn":31,"fix":"2314"},{"ruleId":"1266","severity":2,"message":"2315","line":43,"column":13,"nodeType":null,"endLine":43,"endColumn":52,"fix":"2316"},{"ruleId":"1266","severity":2,"message":"1287","line":50,"column":21,"nodeType":null,"endLine":50,"endColumn":29,"fix":"2317"},{"ruleId":"1266","severity":2,"message":"2318","line":52,"column":29,"nodeType":null,"endLine":52,"endColumn":36,"fix":"2319"},{"ruleId":"1266","severity":2,"message":"1287","line":62,"column":21,"nodeType":null,"endLine":62,"endColumn":29,"fix":"2320"},{"ruleId":"1266","severity":2,"message":"2321","line":10,"column":17,"nodeType":null,"endLine":10,"endColumn":18,"fix":"2322"},{"ruleId":"1266","severity":2,"message":"2323","line":15,"column":19,"nodeType":null,"endLine":16,"endColumn":35,"fix":"2324"},{"ruleId":"1266","severity":2,"message":"2325","line":5,"column":3,"nodeType":null,"endLine":7,"endColumn":17,"fix":"2326"},{"ruleId":"1266","severity":2,"message":"2327","line":8,"column":3,"nodeType":null,"endLine":8,"endColumn":15,"fix":"2328"},{"ruleId":"1266","severity":2,"message":"2329","line":9,"column":3,"nodeType":null,"endLine":16,"endColumn":10,"fix":"2330"},{"ruleId":"1266","severity":2,"message":"2331","line":17,"column":2,"nodeType":null,"endLine":17,"endColumn":16,"fix":"2332"},{"ruleId":"1266","severity":2,"message":"2333","line":18,"column":2,"nodeType":null,"endLine":23,"endColumn":20,"fix":"2334"},{"ruleId":"1266","severity":2,"message":"2335","line":24,"column":3,"nodeType":null,"endLine":26,"endColumn":2,"fix":"2336"},{"ruleId":"1266","severity":2,"message":"2265","line":31,"column":19,"nodeType":null,"endLine":31,"endColumn":19,"fix":"2337"},{"ruleId":"1266","severity":2,"message":"2265","line":32,"column":21,"nodeType":null,"endLine":32,"endColumn":21,"fix":"2338"},{"ruleId":"1266","severity":2,"message":"2265","line":33,"column":25,"nodeType":null,"endLine":33,"endColumn":25,"fix":"2339"},{"ruleId":"1266","severity":2,"message":"2265","line":34,"column":23,"nodeType":null,"endLine":34,"endColumn":23,"fix":"2340"},{"ruleId":"1266","severity":2,"message":"2265","line":35,"column":25,"nodeType":null,"endLine":35,"endColumn":25,"fix":"2341"},{"ruleId":"1266","severity":2,"message":"2265","line":36,"column":24,"nodeType":null,"endLine":36,"endColumn":24,"fix":"2342"},{"ruleId":"1266","severity":2,"message":"2265","line":37,"column":19,"nodeType":null,"endLine":37,"endColumn":19,"fix":"2343"},{"ruleId":"1266","severity":2,"message":"2265","line":38,"column":24,"nodeType":null,"endLine":38,"endColumn":24,"fix":"2344"},{"ruleId":"1266","severity":2,"message":"2265","line":39,"column":25,"nodeType":null,"endLine":39,"endColumn":25,"fix":"2345"},{"ruleId":"1266","severity":2,"message":"2265","line":40,"column":22,"nodeType":null,"endLine":40,"endColumn":22,"fix":"2346"},{"ruleId":"1266","severity":2,"message":"2265","line":41,"column":25,"nodeType":null,"endLine":41,"endColumn":25,"fix":"2347"},{"ruleId":"1266","severity":2,"message":"2265","line":42,"column":18,"nodeType":null,"endLine":42,"endColumn":18,"fix":"2348"},{"ruleId":"1266","severity":2,"message":"2265","line":43,"column":24,"nodeType":null,"endLine":43,"endColumn":24,"fix":"2349"},{"ruleId":"1266","severity":2,"message":"2265","line":44,"column":22,"nodeType":null,"endLine":44,"endColumn":22,"fix":"2350"},{"ruleId":"1266","severity":2,"message":"2265","line":45,"column":24,"nodeType":null,"endLine":45,"endColumn":24,"fix":"2351"},{"ruleId":"1266","severity":2,"message":"2265","line":46,"column":21,"nodeType":null,"endLine":46,"endColumn":21,"fix":"2352"},{"ruleId":"1266","severity":2,"message":"2265","line":47,"column":27,"nodeType":null,"endLine":47,"endColumn":27,"fix":"2353"},{"ruleId":"1266","severity":2,"message":"2265","line":48,"column":24,"nodeType":null,"endLine":48,"endColumn":24,"fix":"2354"},{"ruleId":"1266","severity":2,"message":"2265","line":49,"column":28,"nodeType":null,"endLine":49,"endColumn":28,"fix":"2355"},{"ruleId":"1266","severity":2,"message":"2265","line":50,"column":22,"nodeType":null,"endLine":50,"endColumn":22,"fix":"2356"},{"ruleId":"1266","severity":2,"message":"2265","line":51,"column":24,"nodeType":null,"endLine":51,"endColumn":24,"fix":"2357"},{"ruleId":"1266","severity":2,"message":"2265","line":52,"column":22,"nodeType":null,"endLine":52,"endColumn":22,"fix":"2358"},{"ruleId":"1266","severity":2,"message":"2359","line":56,"column":35,"nodeType":null,"endLine":56,"endColumn":89,"fix":"2360"},{"ruleId":"1266","severity":2,"message":"2361","line":58,"column":37,"nodeType":null,"endLine":58,"endColumn":94,"fix":"2362"},{"ruleId":"1266","severity":2,"message":"2363","line":59,"column":40,"nodeType":null,"endLine":59,"endColumn":104,"fix":"2364"},{"ruleId":"1266","severity":2,"message":"2365","line":60,"column":42,"nodeType":null,"endLine":60,"endColumn":110,"fix":"2366"},{"ruleId":"1266","severity":2,"message":"2367","line":61,"column":39,"nodeType":null,"endLine":61,"endColumn":101,"fix":"2368"},{"ruleId":"1266","severity":2,"message":"2369","line":62,"column":37,"nodeType":null,"endLine":62,"endColumn":95,"fix":"2370"},{"ruleId":"1266","severity":2,"message":"2371","line":63,"column":38,"nodeType":null,"endLine":63,"endColumn":98,"fix":"2372"},{"ruleId":"1266","severity":2,"message":"2373","line":64,"column":42,"nodeType":null,"endLine":64,"endColumn":110,"fix":"2374"},{"ruleId":"1266","severity":2,"message":"2375","line":65,"column":39,"nodeType":null,"endLine":65,"endColumn":100,"fix":"2376"},{"ruleId":"1266","severity":2,"message":"2377","line":66,"column":39,"nodeType":null,"endLine":66,"endColumn":100,"fix":"2378"},{"ruleId":"1266","severity":2,"message":"2379","line":81,"column":37,"nodeType":null,"endLine":81,"endColumn":60,"fix":"2380"},{"ruleId":"1266","severity":2,"message":"2381","line":82,"column":40,"nodeType":null,"endLine":82,"endColumn":67,"fix":"2382"},{"ruleId":"1266","severity":2,"message":"2383","line":83,"column":42,"nodeType":null,"endLine":83,"endColumn":78,"fix":"2384"},{"ruleId":"1266","severity":2,"message":"2385","line":84,"column":39,"nodeType":null,"endLine":84,"endColumn":72,"fix":"2386"},{"ruleId":"1266","severity":2,"message":"2387","line":85,"column":37,"nodeType":null,"endLine":85,"endColumn":65,"fix":"2388"},{"ruleId":"1266","severity":2,"message":"2389","line":86,"column":38,"nodeType":null,"endLine":86,"endColumn":70,"fix":"2390"},{"ruleId":"1266","severity":2,"message":"2391","line":87,"column":39,"nodeType":null,"endLine":87,"endColumn":68,"fix":"2392"},{"ruleId":"1266","severity":2,"message":"2393","line":88,"column":42,"nodeType":null,"endLine":88,"endColumn":75,"fix":"2394"},{"ruleId":"1266","severity":2,"message":"2395","line":89,"column":39,"nodeType":null,"endLine":89,"endColumn":68,"fix":"2396"},{"ruleId":"1266","severity":2,"message":"2265","line":90,"column":15,"nodeType":null,"endLine":90,"endColumn":15,"fix":"2397"},{"ruleId":"1266","severity":2,"message":"2398","line":94,"column":9,"nodeType":null,"endLine":94,"endColumn":98,"fix":"2399"},{"ruleId":"1266","severity":2,"message":"2400","line":99,"column":32,"nodeType":null,"endLine":99,"endColumn":38,"fix":"2401"},{"ruleId":"1266","severity":2,"message":"2402","line":134,"column":20,"nodeType":null,"endLine":134,"endColumn":37,"fix":"2403"},{"ruleId":"1266","severity":2,"message":"1277","line":148,"column":59,"nodeType":null,"endLine":148,"endColumn":60,"fix":"2404"},{"ruleId":"1266","severity":2,"message":"2405","line":153,"column":19,"nodeType":null,"endLine":153,"endColumn":70,"fix":"2406"},{"ruleId":"1266","severity":2,"message":"1277","line":178,"column":59,"nodeType":null,"endLine":178,"endColumn":60,"fix":"2407"},{"ruleId":"1266","severity":2,"message":"2405","line":183,"column":19,"nodeType":null,"endLine":183,"endColumn":70,"fix":"2408"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2410"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2411"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2412"},{"ruleId":"1266","severity":2,"message":"2413","line":13,"column":31,"nodeType":null,"endLine":13,"endColumn":88,"fix":"2414"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2415"},{"ruleId":"1266","severity":2,"message":"2409","line":3,"column":9,"nodeType":null,"endLine":7,"endColumn":1,"fix":"2416"},{"ruleId":"1266","severity":2,"message":"1277","line":22,"column":60,"nodeType":null,"endLine":22,"endColumn":61,"fix":"2417"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2418"},{"ruleId":"1266","severity":2,"message":"2419","line":8,"column":65,"nodeType":null,"endLine":8,"endColumn":65,"fix":"2420"},{"ruleId":"1266","severity":2,"message":"1277","line":18,"column":59,"nodeType":null,"endLine":18,"endColumn":60,"fix":"2421"},{"ruleId":"1266","severity":2,"message":"2409","line":2,"column":9,"nodeType":null,"endLine":6,"endColumn":1,"fix":"2422"},{"ruleId":"1266","severity":2,"message":"2419","line":8,"column":69,"nodeType":null,"endLine":8,"endColumn":69,"fix":"2423"},{"ruleId":"1266","severity":2,"message":"2409","line":3,"column":9,"nodeType":null,"endLine":7,"endColumn":1,"fix":"2424"},{"ruleId":"1266","severity":2,"message":"1277","line":21,"column":60,"nodeType":null,"endLine":21,"endColumn":61,"fix":"2425"},{"ruleId":"1266","severity":2,"message":"2409","line":4,"column":9,"nodeType":null,"endLine":8,"endColumn":1,"fix":"2426"},{"ruleId":"1266","severity":2,"message":"2427","line":10,"column":46,"nodeType":null,"endLine":10,"endColumn":87,"fix":"2428"},{"ruleId":"1266","severity":2,"message":"1277","line":17,"column":60,"nodeType":null,"endLine":17,"endColumn":61,"fix":"2429"},{"ruleId":"1266","severity":2,"message":"2430","line":1,"column":9,"nodeType":null,"endLine":3,"endColumn":1,"fix":"2431"},{"ruleId":"1266","severity":2,"message":"2432","line":4,"column":9,"nodeType":null,"endLine":4,"endColumn":69,"fix":"2433"},{"ruleId":"1266","severity":2,"message":"2434","line":17,"column":17,"nodeType":null,"endLine":17,"endColumn":17,"fix":"2435"},{"ruleId":"1266","severity":2,"message":"2434","line":18,"column":19,"nodeType":null,"endLine":18,"endColumn":19,"fix":"2436"},{"ruleId":"1266","severity":2,"message":"2434","line":19,"column":23,"nodeType":null,"endLine":19,"endColumn":23,"fix":"2437"},{"ruleId":"1266","severity":2,"message":"2434","line":20,"column":21,"nodeType":null,"endLine":20,"endColumn":21,"fix":"2438"},{"ruleId":"1266","severity":2,"message":"2434","line":21,"column":23,"nodeType":null,"endLine":21,"endColumn":23,"fix":"2439"},{"ruleId":"1266","severity":2,"message":"2434","line":22,"column":22,"nodeType":null,"endLine":22,"endColumn":22,"fix":"2440"},{"ruleId":"1266","severity":2,"message":"2434","line":23,"column":17,"nodeType":null,"endLine":23,"endColumn":17,"fix":"2441"},{"ruleId":"1266","severity":2,"message":"2434","line":24,"column":22,"nodeType":null,"endLine":24,"endColumn":22,"fix":"2442"},{"ruleId":"1266","severity":2,"message":"2434","line":25,"column":23,"nodeType":null,"endLine":25,"endColumn":23,"fix":"2443"},{"ruleId":"1266","severity":2,"message":"2434","line":26,"column":20,"nodeType":null,"endLine":26,"endColumn":20,"fix":"2444"},{"ruleId":"1266","severity":2,"message":"2445","line":30,"column":1,"nodeType":null,"endLine":30,"endColumn":9,"fix":"2446"},{"ruleId":"1266","severity":2,"message":"1309","line":31,"column":1,"nodeType":null,"endLine":31,"endColumn":3,"fix":"2447"},{"ruleId":"1266","severity":2,"message":"1309","line":32,"column":7,"nodeType":null,"endLine":32,"endColumn":9,"fix":"2448"},{"ruleId":"1266","severity":2,"message":"1478","line":33,"column":1,"nodeType":null,"endLine":33,"endColumn":11,"fix":"2449"},{"ruleId":"1266","severity":2,"message":"1309","line":34,"column":1,"nodeType":null,"endLine":34,"endColumn":3,"fix":"2450"},{"ruleId":"1266","severity":2,"message":"1309","line":35,"column":9,"nodeType":null,"endLine":35,"endColumn":11,"fix":"2451"},{"ruleId":"1266","severity":2,"message":"1478","line":36,"column":1,"nodeType":null,"endLine":36,"endColumn":11,"fix":"2452"},{"ruleId":"1266","severity":2,"message":"1309","line":37,"column":7,"nodeType":null,"endLine":37,"endColumn":9,"fix":"2453"},{"ruleId":"1266","severity":2,"message":"1309","line":38,"column":1,"nodeType":null,"endLine":38,"endColumn":3,"fix":"2454"},{"ruleId":"1266","severity":2,"message":"1277","line":8,"column":20,"nodeType":null,"endLine":8,"endColumn":21,"fix":"2455"},{"ruleId":"1266","severity":2,"message":"2456","line":10,"column":9,"nodeType":null,"endLine":10,"endColumn":104,"fix":"2457"},{"ruleId":"1266","severity":2,"message":"2458","line":11,"column":9,"nodeType":null,"endLine":11,"endColumn":53,"fix":"2459"},{"ruleId":"1266","severity":2,"message":"2460","line":12,"column":9,"nodeType":null,"endLine":12,"endColumn":57,"fix":"2461"},{"ruleId":"1266","severity":2,"message":"2462","line":13,"column":9,"nodeType":null,"endLine":13,"endColumn":55,"fix":"2463"},{"ruleId":"1266","severity":2,"message":"2464","line":15,"column":9,"nodeType":null,"endLine":15,"endColumn":57,"fix":"2465"},{"ruleId":"1266","severity":2,"message":"2466","line":17,"column":9,"nodeType":null,"endLine":17,"endColumn":57,"fix":"2467"},{"ruleId":"1266","severity":2,"message":"2468","line":19,"column":9,"nodeType":null,"endLine":19,"endColumn":71,"fix":"2469"},{"ruleId":"1266","severity":2,"message":"2470","line":21,"column":9,"nodeType":null,"endLine":24,"endColumn":1,"fix":"2471"},{"ruleId":"1266","severity":2,"message":"2472","line":52,"column":39,"nodeType":null,"endLine":52,"endColumn":61,"fix":"2473"},{"ruleId":"1266","severity":2,"message":"2474","line":53,"column":31,"nodeType":null,"endLine":53,"endColumn":122,"fix":"2475"},{"ruleId":"1266","severity":2,"message":"1277","line":57,"column":27,"nodeType":null,"endLine":57,"endColumn":28,"fix":"2476"},{"ruleId":"1266","severity":2,"message":"1277","line":67,"column":39,"nodeType":null,"endLine":67,"endColumn":40,"fix":"2477"},{"ruleId":"1266","severity":2,"message":"2478","line":71,"column":39,"nodeType":null,"endLine":71,"endColumn":61,"fix":"2479"},{"ruleId":"1266","severity":2,"message":"2480","line":73,"column":36,"nodeType":null,"endLine":76,"endColumn":9,"fix":"2481"},{"ruleId":"1266","severity":2,"message":"1413","line":78,"column":27,"nodeType":null,"endLine":78,"endColumn":28,"fix":"2482"},{"ruleId":"1266","severity":2,"message":"1413","line":79,"column":27,"nodeType":null,"endLine":79,"endColumn":28,"fix":"2483"},{"ruleId":"1266","severity":2,"message":"2484","line":97,"column":62,"nodeType":null,"endLine":97,"endColumn":107,"fix":"2485"},{"ruleId":"1266","severity":2,"message":"1315","line":98,"column":1,"nodeType":null,"endLine":98,"endColumn":1,"fix":"2486"},{"ruleId":"1266","severity":2,"message":"2197","line":99,"column":1,"nodeType":null,"endLine":99,"endColumn":11,"fix":"2487"},{"ruleId":"1266","severity":2,"message":"2478","line":102,"column":39,"nodeType":null,"endLine":102,"endColumn":61,"fix":"2488"},{"ruleId":"1266","severity":2,"message":"2489","line":104,"column":36,"nodeType":null,"endLine":106,"endColumn":9,"fix":"2490"},{"ruleId":"1266","severity":2,"message":"2491","line":107,"column":34,"nodeType":null,"endLine":109,"endColumn":9,"fix":"2492"},{"ruleId":"1266","severity":2,"message":"2493","line":112,"column":39,"nodeType":null,"endLine":112,"endColumn":61,"fix":"2494"},{"ruleId":"1266","severity":2,"message":"2495","line":114,"column":36,"nodeType":null,"endLine":116,"endColumn":9,"fix":"2496"},{"ruleId":"1266","severity":2,"message":"2491","line":117,"column":34,"nodeType":null,"endLine":119,"endColumn":9,"fix":"2497"},{"ruleId":"1266","severity":2,"message":"2498","line":122,"column":39,"nodeType":null,"endLine":122,"endColumn":62,"fix":"2499"},{"ruleId":"1266","severity":2,"message":"2500","line":123,"column":31,"nodeType":null,"endLine":123,"endColumn":92,"fix":"2501"},{"ruleId":"1266","severity":2,"message":"2502","line":124,"column":36,"nodeType":null,"endLine":126,"endColumn":9,"fix":"2503"},{"ruleId":"1266","severity":2,"message":"1277","line":131,"column":42,"nodeType":null,"endLine":131,"endColumn":43,"fix":"2504"},{"ruleId":"1266","severity":2,"message":"2491","line":137,"column":34,"nodeType":null,"endLine":139,"endColumn":9,"fix":"2505"},{"ruleId":"1266","severity":2,"message":"2506","line":142,"column":40,"nodeType":null,"endLine":142,"endColumn":87,"fix":"2507"},{"ruleId":"1266","severity":2,"message":"2508","line":144,"column":7,"nodeType":null,"endLine":145,"endColumn":6,"fix":"2509"},{"ruleId":"1266","severity":2,"message":"1712","line":188,"column":27,"nodeType":null,"endLine":188,"endColumn":38,"fix":"2510"},{"ruleId":"1266","severity":2,"message":"1277","line":203,"column":25,"nodeType":null,"endLine":203,"endColumn":26,"fix":"2511"},{"ruleId":"1266","severity":2,"message":"2512","line":205,"column":43,"nodeType":null,"endLine":205,"endColumn":56,"fix":"2513"},{"ruleId":"1266","severity":2,"message":"2514","line":216,"column":17,"nodeType":null,"endLine":216,"endColumn":96,"fix":"2515"},{"ruleId":"1266","severity":2,"message":"2516","line":222,"column":26,"nodeType":null,"endLine":222,"endColumn":38,"fix":"2517"},{"ruleId":"1266","severity":2,"message":"2518","line":226,"column":28,"nodeType":null,"endLine":226,"endColumn":83,"fix":"2519"},{"ruleId":"1266","severity":2,"message":"2520","line":230,"column":25,"nodeType":null,"endLine":230,"endColumn":65,"fix":"2521"},{"ruleId":"1266","severity":2,"message":"2522","line":231,"column":25,"nodeType":null,"endLine":231,"endColumn":70,"fix":"2523"},{"ruleId":"1266","severity":2,"message":"2524","line":232,"column":25,"nodeType":null,"endLine":232,"endColumn":72,"fix":"2525"},{"ruleId":"1266","severity":2,"message":"2526","line":233,"column":26,"nodeType":null,"endLine":233,"endColumn":69,"fix":"2527"},{"ruleId":"1266","severity":2,"message":"2528","line":234,"column":23,"nodeType":null,"endLine":234,"endColumn":65,"fix":"2529"},{"ruleId":"1266","severity":2,"message":"2530","line":246,"column":26,"nodeType":null,"endLine":246,"endColumn":98,"fix":"2531"},{"ruleId":"1266","severity":2,"message":"2532","line":250,"column":32,"nodeType":null,"endLine":250,"endColumn":106,"fix":"2533"},{"ruleId":"1266","severity":2,"message":"2534","line":254,"column":29,"nodeType":null,"endLine":254,"endColumn":107,"fix":"2535"},{"ruleId":"1266","severity":2,"message":"1712","line":263,"column":27,"nodeType":null,"endLine":263,"endColumn":38,"fix":"2536"},{"ruleId":"1266","severity":2,"message":"2537","line":266,"column":36,"nodeType":null,"endLine":266,"endColumn":36,"fix":"2538"},{"ruleId":"1266","severity":2,"message":"2539","line":270,"column":32,"nodeType":null,"endLine":270,"endColumn":79,"fix":"2540"},{"ruleId":"1266","severity":2,"message":"2541","line":278,"column":31,"nodeType":null,"endLine":278,"endColumn":80,"fix":"2542"},{"ruleId":"1266","severity":2,"message":"2543","line":282,"column":29,"nodeType":null,"endLine":282,"endColumn":82,"fix":"2544"},{"ruleId":"1266","severity":2,"message":"2545","line":294,"column":34,"nodeType":null,"endLine":294,"endColumn":79,"fix":"2546"},{"ruleId":"1266","severity":2,"message":"2547","line":302,"column":35,"nodeType":null,"endLine":302,"endColumn":82,"fix":"2548"},{"ruleId":"1266","severity":2,"message":"1712","line":323,"column":27,"nodeType":null,"endLine":323,"endColumn":38,"fix":"2549"},{"ruleId":"1266","severity":2,"message":"2530","line":327,"column":26,"nodeType":null,"endLine":327,"endColumn":98,"fix":"2550"},{"ruleId":"1266","severity":2,"message":"2551","line":331,"column":32,"nodeType":null,"endLine":331,"endColumn":114,"fix":"2552"},{"ruleId":"1266","severity":2,"message":"2553","line":335,"column":32,"nodeType":null,"endLine":335,"endColumn":128,"fix":"2554"},{"ruleId":"1266","severity":2,"message":"1277","line":4,"column":7,"nodeType":null,"endLine":4,"endColumn":8,"fix":"2555"},{"ruleId":"1266","severity":2,"message":"1277","line":12,"column":15,"nodeType":null,"endLine":12,"endColumn":16,"fix":"2556"},{"ruleId":"1266","severity":2,"message":"1277","line":19,"column":63,"nodeType":null,"endLine":19,"endColumn":64,"fix":"2557"},{"ruleId":"1266","severity":2,"message":"1277","line":20,"column":6,"nodeType":null,"endLine":20,"endColumn":7,"fix":"2558"},{"ruleId":"1266","severity":2,"message":"1277","line":33,"column":27,"nodeType":null,"endLine":33,"endColumn":28,"fix":"2559"},{"ruleId":"1266","severity":2,"message":"1277","line":54,"column":67,"nodeType":null,"endLine":54,"endColumn":68,"fix":"2560"},{"ruleId":"1266","severity":2,"message":"2561","line":68,"column":11,"nodeType":null,"endLine":68,"endColumn":25,"fix":"2562"},{"ruleId":"1266","severity":2,"message":"1277","line":82,"column":78,"nodeType":null,"endLine":82,"endColumn":79,"fix":"2563"},{"ruleId":"1266","severity":2,"message":"2564","line":104,"column":11,"nodeType":null,"endLine":104,"endColumn":19,"fix":"2565"},{"ruleId":"1266","severity":2,"message":"2566","line":112,"column":11,"nodeType":null,"endLine":112,"endColumn":21,"fix":"2567"},{"ruleId":"1266","severity":2,"message":"2568","line":120,"column":43,"nodeType":null,"endLine":120,"endColumn":58,"fix":"2569"},{"ruleId":"1266","severity":2,"message":"1277","line":132,"column":72,"nodeType":null,"endLine":132,"endColumn":73,"fix":"2570"},{"ruleId":"1266","severity":2,"message":"2561","line":139,"column":40,"nodeType":null,"endLine":139,"endColumn":54,"fix":"2571"},{"ruleId":"1266","severity":2,"message":"1279","line":10,"column":24,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2572","line":8,"column":33,"nodeType":null,"endLine":8,"endColumn":78,"fix":"2573"},{"ruleId":"1266","severity":2,"message":"2574","line":9,"column":21,"nodeType":null,"endLine":10,"endColumn":4,"fix":"2575"},{"ruleId":"1266","severity":2,"message":"2576","line":13,"column":22,"nodeType":null,"endLine":13,"endColumn":96,"fix":"2577"},{"ruleId":"1266","severity":2,"message":"1429","line":16,"column":2,"nodeType":null,"endLine":16,"endColumn":2,"fix":"2578"},{"ruleId":"1266","severity":2,"message":"2574","line":19,"column":18,"nodeType":null,"endLine":20,"endColumn":4,"fix":"2579"},{"ruleId":"1266","severity":2,"message":"2580","line":23,"column":22,"nodeType":null,"endLine":23,"endColumn":84,"fix":"2581"},{"ruleId":"1266","severity":2,"message":"1429","line":26,"column":2,"nodeType":null,"endLine":26,"endColumn":2,"fix":"2582"},{"ruleId":"1266","severity":2,"message":"2574","line":29,"column":15,"nodeType":null,"endLine":30,"endColumn":4,"fix":"2583"},{"ruleId":"1266","severity":2,"message":"1429","line":36,"column":2,"nodeType":null,"endLine":36,"endColumn":2,"fix":"2584"},{"ruleId":"1266","severity":2,"message":"2574","line":39,"column":15,"nodeType":null,"endLine":40,"endColumn":4,"fix":"2585"},{"ruleId":"1266","severity":2,"message":"1429","line":46,"column":2,"nodeType":null,"endLine":46,"endColumn":2,"fix":"2586"},{"ruleId":"1266","severity":2,"message":"2587","line":48,"column":29,"nodeType":null,"endLine":48,"endColumn":78,"fix":"2588"},{"ruleId":"1266","severity":2,"message":"2574","line":49,"column":45,"nodeType":null,"endLine":50,"endColumn":4,"fix":"2589"},{"ruleId":"1266","severity":2,"message":"1429","line":52,"column":2,"nodeType":null,"endLine":52,"endColumn":2,"fix":"2590"},{"ruleId":"1266","severity":2,"message":"1429","line":60,"column":2,"nodeType":null,"endLine":60,"endColumn":2,"fix":"2591"},{"ruleId":"1266","severity":2,"message":"1279","line":59,"column":45,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2592","line":1,"column":16,"nodeType":null,"endLine":8,"endColumn":1,"fix":"2593"},{"ruleId":"1266","severity":2,"message":"2594","line":10,"column":19,"nodeType":null,"endLine":10,"endColumn":76,"fix":"2595"},{"ruleId":"1266","severity":2,"message":"2574","line":11,"column":14,"nodeType":null,"endLine":12,"endColumn":4,"fix":"2596"},{"ruleId":"1266","severity":2,"message":"2597","line":13,"column":30,"nodeType":null,"endLine":15,"endColumn":4,"fix":"2598"},{"ruleId":"1266","severity":2,"message":"1429","line":16,"column":2,"nodeType":null,"endLine":16,"endColumn":2,"fix":"2599"},{"ruleId":"1266","severity":2,"message":"2574","line":19,"column":67,"nodeType":null,"endLine":20,"endColumn":4,"fix":"2600"},{"ruleId":"1266","severity":2,"message":"2601","line":23,"column":10,"nodeType":null,"endLine":23,"endColumn":25,"fix":"2602"},{"ruleId":"1266","severity":2,"message":"1429","line":29,"column":2,"nodeType":null,"endLine":29,"endColumn":2,"fix":"2603"},{"ruleId":"1266","severity":2,"message":"1429","line":43,"column":2,"nodeType":null,"endLine":43,"endColumn":2,"fix":"2604"},{"ruleId":"1266","severity":2,"message":"2574","line":46,"column":24,"nodeType":null,"endLine":47,"endColumn":4,"fix":"2605"},{"ruleId":"1266","severity":2,"message":"1429","line":49,"column":2,"nodeType":null,"endLine":49,"endColumn":2,"fix":"2606"},{"ruleId":"1266","severity":2,"message":"2574","line":52,"column":19,"nodeType":null,"endLine":53,"endColumn":4,"fix":"2607"},{"ruleId":"1266","severity":2,"message":"2097","line":59,"column":7,"nodeType":null,"endLine":59,"endColumn":7,"fix":"2608"},{"ruleId":"1266","severity":2,"message":"2609","line":60,"column":1,"nodeType":null,"endLine":60,"endColumn":94,"fix":"2610"},{"ruleId":"1266","severity":2,"message":"1429","line":65,"column":2,"nodeType":null,"endLine":65,"endColumn":2,"fix":"2611"},{"ruleId":"1266","severity":2,"message":"1429","line":70,"column":2,"nodeType":null,"endLine":70,"endColumn":2,"fix":"2612"},{"ruleId":"1266","severity":2,"message":"1429","line":86,"column":2,"nodeType":null,"endLine":86,"endColumn":2,"fix":"2613"},{"ruleId":"1266","severity":2,"message":"1429","line":96,"column":2,"nodeType":null,"endLine":96,"endColumn":2,"fix":"2614"},{"ruleId":"1266","severity":2,"message":"2615","line":1,"column":19,"nodeType":null,"endLine":1,"endColumn":26,"fix":"2616"},{"ruleId":"1266","severity":2,"message":"2617","line":2,"column":33,"nodeType":null,"endLine":2,"endColumn":65,"fix":"2618"},{"ruleId":"1266","severity":2,"message":"1303","line":3,"column":26,"nodeType":null,"endLine":3,"endColumn":61,"fix":"2619"},{"ruleId":"1266","severity":2,"message":"1279","line":29,"column":26,"nodeType":null},{"ruleId":"1266","severity":2,"message":"1279","line":47,"column":27,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2620","line":9,"column":8,"nodeType":null,"endLine":9,"endColumn":18,"fix":"2621"},{"ruleId":"1266","severity":2,"message":"2622","line":11,"column":33,"nodeType":null,"endLine":11,"endColumn":41,"fix":"2623"},{"ruleId":"1266","severity":2,"message":"2624","line":12,"column":34,"nodeType":null,"endLine":12,"endColumn":43,"fix":"2625"},{"ruleId":"1266","severity":2,"message":"2626","line":13,"column":35,"nodeType":null,"endLine":13,"endColumn":56,"fix":"2627"},{"ruleId":"1266","severity":2,"message":"2628","line":14,"column":31,"nodeType":null,"endLine":14,"endColumn":48,"fix":"2629"},{"ruleId":"1266","severity":2,"message":"2630","line":15,"column":25,"nodeType":null,"endLine":15,"endColumn":36,"fix":"2631"},{"ruleId":"1266","severity":2,"message":"1279","line":29,"column":34,"nodeType":null},{"ruleId":"1266","severity":2,"message":"2632","line":1,"column":37,"nodeType":null,"endLine":1,"endColumn":46,"fix":"2633"},{"ruleId":"1266","severity":2,"message":"2634","line":2,"column":41,"nodeType":null,"endLine":2,"endColumn":56,"fix":"2635"},{"ruleId":"1266","severity":2,"message":"2636","line":3,"column":32,"nodeType":null,"endLine":3,"endColumn":46,"fix":"2637"},{"ruleId":"1266","severity":2,"message":"2638","line":4,"column":9,"nodeType":null,"endLine":4,"endColumn":117,"fix":"2639"},{"ruleId":"1266","severity":2,"message":"2640","line":1,"column":39,"nodeType":null,"endLine":1,"endColumn":48,"fix":"2641"},{"ruleId":"1266","severity":2,"message":"2642","line":2,"column":37,"nodeType":null,"endLine":2,"endColumn":51,"fix":"2643"},{"ruleId":"1266","severity":2,"message":"2644","line":3,"column":39,"nodeType":null,"endLine":3,"endColumn":48,"fix":"2645"},{"ruleId":"1266","severity":2,"message":"2646","line":4,"column":38,"nodeType":null,"endLine":4,"endColumn":46,"fix":"2647"},"prettier/prettier","Replace `'src/hooks/Toast'` with `\"src/hooks/Toast\"`",{"range":"2648","text":"2649"},"Replace `'@fortawesome/fontawesome-svg-core'` with `\"@fortawesome/fontawesome-svg-core\";`",{"range":"2650","text":"2651"},"Replace `'@fortawesome/free-solid-svg-icons'` with `\"@fortawesome/free-solid-svg-icons\";`",{"range":"2652","text":"2653"},"Replace `'bootstrap/dist/css/bootstrap.min.css'` with `\"bootstrap/dist/css/bootstrap.min.css\"`",{"range":"2654","text":"2655"},"Replace `·path=\"/sceneFilenameParser\"·component={SceneFilenameParser}` with `⏎··············path=\"/sceneFilenameParser\"⏎··············component={SceneFilenameParser}⏎···········`",{"range":"2656","text":"2657"},"Delete `,`",{"range":"2658","text":"2659"},"Parsing error: Expression expected.","Replace `'react-bootstrap'` with `\"react-bootstrap\"`",{"range":"2660","text":"2661"},"Replace `·FindGalleriesQuery,·FindGalleriesVariables·` with `⏎··FindGalleriesQuery,⏎··FindGalleriesVariables⏎`",{"range":"2662","text":"2663"},{"range":"2664","text":"2659"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel⏎··`",{"range":"2665","text":"2666"},"Replace `·return;` with `⏎······return;⏎···`",{"range":"2667","text":"2668"},"Replace `margin:·\"0·auto\"` with `·margin:·\"0·auto\"·`",{"range":"2669","text":"2670"},"Replace `(gallery)` with `gallery`",{"range":"2671","text":"2672"},"Replace `·:·undefined` with `(⏎······················⏎····················)·:·(⏎······················undefined⏎····················)`",{"range":"2673","text":"2674"},"Replace `{gallery.path}` with `⏎··················{gallery.path}⏎················`",{"range":"2675","text":"2676"},"Replace `_event:·React.MouseEvent,·obj:·{index:·number}` with `⏎····_event:·React.MouseEvent,⏎····obj:·{·index:·number·}⏎··`",{"range":"2677","text":"2678"},"Replace `(file)·=>·({src:·file.path·||·\"\",·caption:·file.name` with `file·=>·({⏎····src:·file.path·||·\"\",⏎····caption:·file.name⏎··`",{"range":"2679","text":"2680"},"Replace `(file)·=>·({src:·`${file.path}?thumb=true`·||·\"\",·width:·1,·height:·1` with `file·=>·({⏎····src:·`${file.path}?thumb=true`·||·\"\",⏎····width:·1,⏎····height:·1⏎··`",{"range":"2681","text":"2682"},"Replace `'@fortawesome/fontawesome-svg-core'` with `\"@fortawesome/fontawesome-svg-core\"`",{"range":"2683","text":"2684"},"Replace `'react-router-bootstrap'` with `\"react-router-bootstrap\"`",{"range":"2685","text":"2686"},"Replace `'src/components/Shared'` with `\"src/components/Shared\";`",{"range":"2687","text":"2688"},"Delete `··`",{"range":"2689","text":"2659"},{"range":"2690","text":"2659"},{"range":"2691","text":"2659"},"Insert `·`",{"range":"2692","text":"2693"},"Insert `··`",{"range":"2694","text":"2695"},{"range":"2696","text":"2695"},{"range":"2697","text":"2695"},{"range":"2698","text":"2695"},{"range":"2699","text":"2695"},{"range":"2700","text":"2695"},"Replace `··` with `····`",{"range":"2701","text":"2702"},{"range":"2703","text":"2695"},{"range":"2704","text":"2695"},{"range":"2705","text":"2695"},{"range":"2706","text":"2695"},{"range":"2707","text":"2702"},{"range":"2708","text":"2695"},{"range":"2709","text":"2695"},{"range":"2710","text":"2695"},{"range":"2711","text":"2695"},{"range":"2712","text":"2695"},{"range":"2713","text":"2695"},{"range":"2714","text":"2695"},{"range":"2715","text":"2695"},{"range":"2716","text":"2695"},{"range":"2717","text":"2695"},{"range":"2718","text":"2695"},{"range":"2719","text":"2702"},{"range":"2720","text":"2695"},{"range":"2721","text":"2695"},{"range":"2722","text":"2695"},{"range":"2723","text":"2702"},{"range":"2724","text":"2695"},{"range":"2725","text":"2695"},"Replace `·location.pathname·===·'/performers'` with `⏎····location.pathname·===·\"/performers\"`",{"range":"2726","text":"2727"},"Replace `?·'/performers/new'` with `··?·\"/performers/new\"`",{"range":"2728","text":"2729"},"Replace `····:·location.pathname·===·'/studios'` with `······:·location.pathname·===·\"/studios\"`",{"range":"2730","text":"2731"},"Replace `'/studios/new'` with `\"/studios/new\"⏎·····`",{"range":"2732","text":"2733"},"Replace `·path·===·null·?·''` with `⏎····path·===·null·?·(⏎······\"\"⏎····)`",{"range":"2734","text":"2735"},{"range":"2736","text":"2695"},{"range":"2737","text":"2695"},{"range":"2738","text":"2695"},{"range":"2739","text":"2695"},{"range":"2740","text":"2659"},"Replace `(i)` with `i`",{"range":"2741","text":"2742"},"Replace `⏎··········exact={true}⏎·········` with `·exact={true}`",{"range":"2743","text":"2744"},{"range":"2745","text":"2659"},{"range":"2746","text":"2659"},{"range":"2747","text":"2659"},"Replace `(⏎····

    Page·not·found.

    ⏎··)` with `

    Page·not·found.

    `",{"range":"2748","text":"2749"},{"range":"2750","text":"2661"},{"range":"2751","text":"2668"},{"range":"2752","text":"2668"},{"range":"2753","text":"2695"},{"range":"2754","text":"2695"},"Replace `··········` with `············`",{"range":"2755","text":"2756"},{"range":"2757","text":"2695"},"Replace `············` with `··············`",{"range":"2758","text":"2759"},{"range":"2760","text":"2695"},{"range":"2761","text":"2756"},{"range":"2762","text":"2695"},{"range":"2763","text":"2695"},{"range":"2764","text":"2695"},{"range":"2765","text":"2695"},{"range":"2766","text":"2695"},{"range":"2767","text":"2695"},"Replace `''` with `\"\"`",{"range":"2768","text":"2769"},{"range":"2770","text":"2769"},{"range":"2771","text":"2661"},"Replace `'src/hooks'` with `\"src/hooks\"`",{"range":"2772","text":"2773"},"Replace `sprites,·previews,·markers,·transcodes` with `⏎········sprites,⏎········previews,⏎········markers,⏎········transcodes⏎······`",{"range":"2774","text":"2775"},"Replace `·id=\"sprite-task\"·checked={sprites}·label=\"Sprites·(for·the·scene·scrubber)\"·onChange={()·=>·setSprites(!sprites)}` with `⏎········id=\"sprite-task\"⏎········checked={sprites}⏎········label=\"Sprites·(for·the·scene·scrubber)\"⏎········onChange={()·=>·setSprites(!sprites)}⏎·····`",{"range":"2776","text":"2777"},"Replace `·id=\"preview-task\"·checked={previews}·label=\"Previews·(video·previews·which·play·when·hovering·over·a·scene)\"·onChange={()·=>·setPreviews(!previews)}` with `⏎········id=\"preview-task\"⏎········checked={previews}⏎········label=\"Previews·(video·previews·which·play·when·hovering·over·a·scene)\"⏎········onChange={()·=>·setPreviews(!previews)}⏎·····`",{"range":"2778","text":"2779"},"Replace `·id=\"marker-task\"·checked={markers}·label=\"Markers·(20·second·videos·which·begin·at·the·given·timecode)\"·onChange={()·=>·setMarkers(!markers)}` with `⏎········id=\"marker-task\"⏎········checked={markers}⏎········label=\"Markers·(20·second·videos·which·begin·at·the·given·timecode)\"⏎········onChange={()·=>·setMarkers(!markers)}⏎·····`",{"range":"2780","text":"2781"},"Replace `·id=\"transcode-task\"·checked={transcodes}·label=\"Transcodes·(MP4·conversions·of·unsupported·video·formats)\"·onChange={()·=>·setTranscodes(!transcodes)}` with `⏎········id=\"transcode-task\"⏎········checked={transcodes}⏎········label=\"Transcodes·(MP4·conversions·of·unsupported·video·formats)\"⏎········onChange={()·=>·setTranscodes(!transcodes)}⏎·····`",{"range":"2782","text":"2783"},"Replace `Generate` with `⏎········Generate⏎······`",{"range":"2784","text":"2785"},"Replace `Generate·supporting·image,·sprite,·video,·vtt·and·other·files.` with `⏎········Generate·supporting·image,·sprite,·video,·vtt·and·other·files.⏎······`",{"range":"2786","text":"2787"},{"range":"2788","text":"2661"},{"range":"2789","text":"2773"},"Replace `'src/components/Shared'` with `\"src/components/Shared\"`",{"range":"2790","text":"2791"},"Delete `·`",{"range":"2792","text":"2659"},{"range":"2793","text":"2693"},"Replace `·jobStatus.refetch()` with `⏎······jobStatus.refetch();⏎····`",{"range":"2794","text":"2795"},"Replace `'Import',·variant:·'danger'` with `\"Import\",·variant:·\"danger\"`",{"range":"2796","text":"2797"},"Replace `·This·will·delete·the·database·and·re-import·from⏎·········` with `This·will·delete·the·database·and⏎··········re-import·from`",{"range":"2798","text":"2799"},{"range":"2800","text":"2795"},"Replace `'Clean',·variant:·'danger'` with `\"Clean\",·variant:·\"danger\"`",{"range":"2801","text":"2802"},"Replace `⏎··········This·will·delete·db·information·and·generated·content⏎··········for·all·scenes·that·are·no·longer·found·in·the` with `·This·will·delete·db·information·and⏎··········generated·content·for·all·scenes·that·are·no·longer·found·in·the⏎·········`",{"range":"2803","text":"2804"},"Replace `useFileMetadata:·useFileMetadata` with `⏎········useFileMetadata:·useFileMetadata⏎······`",{"range":"2805","text":"2806"},"Insert `;`",{"range":"2807","text":"2808"},"Replace `·id=\"stop\"·variant=\"danger\"·onClick={()·=>·StashService.queryStopJob().then(()·=>·jobStatus.refetch())}>Stop` with `⏎··········id=\"stop\"⏎··········variant=\"danger\"⏎··········onClick={()·=>⏎············StashService.queryStopJob().then(()·=>·jobStatus.refetch())⏎··········}⏎········>⏎··········Stop⏎········`",{"range":"2809","text":"2810"},{"range":"2811","text":"2695"},{"range":"2812","text":"2695"},"Replace `·status·!==·\"Idle\"·?··:·''·` with `status·!==·\"Idle\"·?·(⏎············⏎··········)·:·(⏎············\"\"⏎··········)`",{"range":"2813","text":"2814"},{"range":"2815","text":"2695"},{"range":"2816","text":"2695"},"Replace `Scan` with `⏎··········Scan⏎········`",{"range":"2817","text":"2818"},"Replace `Scan·for·new·content·and·add·it·to·the·database.` with `⏎··········Scan·for·new·content·and·add·it·to·the·database.⏎········`",{"range":"2819","text":"2820"},"Replace `Auto·Tag` with `⏎··········Auto·Tag⏎········`",{"range":"2821","text":"2822"},"Replace `Auto-tag·content·based·on·filenames.` with `⏎··········Auto-tag·content·based·on·filenames.⏎········`",{"range":"2823","text":"2824"},"Replace `·id=\"clean\"·variant=\"danger\"·onClick={()·=>·setIsCleanAlertOpen(true)}>Clean` with `⏎··········id=\"clean\"⏎··········variant=\"danger\"⏎··········onClick={()·=>·setIsCleanAlertOpen(true)}⏎········>⏎··········Clean⏎········`",{"range":"2825","text":"2826"},"Replace `Check·for·missing·files·and·remove·them·from·the·database.·This·is·a·destructive·action.` with `⏎··········Check·for·missing·files·and·remove·them·from·the·database.·This·is·a⏎··········destructive·action.⏎········`",{"range":"2827","text":"2828"},"Replace `·id=\"export\"·type=\"submit\"onClick={()·=>·StashService.queryMetadataExport().then(()·=>·{·jobStatus.refetch()})}>Export` with `⏎··········id=\"export\"⏎··········type=\"submit\"⏎··········onClick={()·=>⏎············StashService.queryMetadataExport().then(()·=>·{⏎··············jobStatus.refetch();⏎············})⏎··········}⏎········>⏎··········Export⏎········`",{"range":"2829","text":"2830"},"Replace `Export·the·database·content·into·JSON·format.` with `⏎··········Export·the·database·content·into·JSON·format.⏎········`",{"range":"2831","text":"2832"},"Replace `·id=\"import\"·variant=\"danger\"·onClick={()·=>·setIsImportAlertOpen(true)}>Import` with `⏎··········id=\"import\"⏎··········variant=\"danger\"⏎··········onClick={()·=>·setIsImportAlertOpen(true)}⏎········>⏎··········Import⏎········`",{"range":"2833","text":"2834"},"Replace `Import·from·exported·JSON.··This·is·a·destructive·action.` with `⏎··········Import·from·exported·JSON.·This·is·a·destructive·action.⏎········`",{"range":"2835","text":"2836"},"Replace `·Button,·Form,·Modal,·Nav,·Navbar,·OverlayTrigger,·Popover·}·from·'react-bootstrap'` with `⏎··Button,⏎··Form,⏎··Modal,⏎··Nav,⏎··Navbar,⏎··OverlayTrigger,⏎··Popover⏎}·from·\"react-bootstrap\"`",{"range":"2837","text":"2838"},"Replace `scraper:·GQL.ListPerformerScrapersListPerformerScrapers` with `⏎····scraper:·GQL.ListPerformerScrapersListPerformerScrapers⏎··`",{"range":"2839","text":"2840"},{"range":"2841","text":"2668"},"Replace `⏎········variant=\"primary\"⏎········onClick={()·=>·props.onToggleEdit()}⏎······` with `·variant=\"primary\"·onClick={()·=>·props.onToggleEdit()}`",{"range":"2842","text":"2843"},{"range":"2844","text":"2659"},{"range":"2845","text":"2668"},"Replace `··props.onSave()}>Save` with `·(⏎·······props.onSave()}>⏎········Save⏎······⏎····)`",{"range":"2846","text":"2847"},{"range":"2848","text":"2668"},"Replace `··setIsDeleteAlertOpen(true)}>Delete` with `·(⏎·······setIsDeleteAlertOpen(true)}>⏎········Delete⏎······⏎····)`",{"range":"2849","text":"2850"},"Replace `·return;·}` with `⏎······return;`",{"range":"2851","text":"2852"},"Insert `}⏎··`",{"range":"2853","text":"2854"},{"range":"2855","text":"2659"},"Replace `··········` with `········`",{"range":"2856","text":"2857"},"Replace `···props.onDisplayScraperDialog·&&··props.onDisplayScraperDialog(s)·}` with `··················⏎······················props.onDisplayScraperDialog·&&⏎······················props.onDisplayScraperDialog(s)⏎····················}⏎··················`",{"range":"2867","text":"2868"},"Insert `····`",{"range":"2869","text":"2702"},{"range":"2870","text":"2702"},"Replace `))·:·''` with `····))⏎··············:·\"\"`",{"range":"2871","text":"2872"},{"range":"2873","text":"2668"},"Replace `Auto·Tag)` with `··········}}⏎········>⏎··········Auto·Tag⏎········⏎······);`",{"range":"2878","text":"2879"},{"range":"2880","text":"2668"},"Replace `(⏎······⏎········Scenes⏎······⏎····)` with `Scenes`",{"range":"2881","text":"2882"},"Replace `⏎········show={isDeleteAlertOpen}⏎······` with `·show={isDeleteAlertOpen}`",{"range":"2883","text":"2884"},"Replace `⏎··········Are·you·sure·you·want·to·delete·{name}?⏎········` with `Are·you·sure·you·want·to·delete·{name}?`",{"range":"2885","text":"2886"},"Replace `Delete` with `⏎············Delete⏎··········`",{"range":"2887","text":"2888"},"Replace `·variant=\"secondary\"·onClick={()·=>·setIsDeleteAlertOpen(false)}>Cancel` with `⏎············variant=\"secondary\"⏎············onClick={()·=>·setIsDeleteAlertOpen(false)}⏎··········>⏎············Cancel⏎··········`",{"range":"2889","text":"2890"},"Delete `⏎`",{"range":"2891","text":"2659"},{"range":"2892","text":"2695"},{"range":"2893","text":"2695"},{"range":"2894","text":"2695"},{"range":"2895","text":"2695"},{"range":"2896","text":"2695"},{"range":"2897","text":"2661"},{"range":"2898","text":"2688"},{"range":"2899","text":"2808"},{"range":"2900","text":"2808"},{"range":"2901","text":"2808"},{"range":"2902","text":"2808"},"Replace `secondsToString(props.numericValue)` with `⏎····secondsToString(props.numericValue)⏎··`",{"range":"2903","text":"2904"},{"range":"2905","text":"2659"},{"range":"2906","text":"2659"},{"range":"2907","text":"2693"},"Replace `⏎·······vertical={true}⏎······` with `·vertical={true}`",{"range":"2908","text":"2909"},"Replace `⏎··········disabled={props.disabled}⏎··········onClick={()·=>·increment()}⏎········` with `·disabled={props.disabled}·onClick={()·=>·increment()}`",{"range":"2910","text":"2911"},"Replace `⏎··········disabled={props.disabled}⏎··········onClick={()·=>·decrement()}⏎········` with `·disabled={props.disabled}·onClick={()·=>·decrement()}`",{"range":"2912","text":"2913"},{"range":"2914","text":"2808"},"Replace `⏎··········onClick={()·=>·onReset()}⏎········` with `·onClick={()·=>·onReset()}`",{"range":"2915","text":"2916"},{"range":"2917","text":"2808"},{"range":"2918","text":"2659"},"Replace `·maybeRenderReset()·` with `maybeRenderReset()`",{"range":"2919","text":"2920"},"Replace `·renderButtons()·` with `renderButtons()`",{"range":"2921","text":"2922"},{"range":"2923","text":"2808"},{"range":"2924","text":"2661"},"Replace `·PerformerDataFragment,·SceneMarkerDataFragment,·TagDataFragment·` with `⏎··PerformerDataFragment,⏎··SceneMarkerDataFragment,⏎··TagDataFragment⏎`",{"range":"2925","text":"2926"},"Replace `props.marker.seconds·||·0` with `⏎······props.marker.seconds·||·0⏎····`",{"range":"2927","text":"2928"},"Replace `⏎······className=\"tag-item\"⏎······variant=\"secondary\"⏎····` with `·className=\"tag-item\"·variant=\"secondary\"`",{"range":"2929","text":"2930"},{"range":"2931","text":"2661"},{"range":"2932","text":"2668"},"Replace `··{!data·||·loading·?·` with `{!data·||·loading·?·(`",{"range":"2933","text":"2934"},{"range":"2935","text":"2659"},{"range":"2936","text":"2659"},"Replace `···········:·undefined` with `········⏎······)·:·(⏎········undefined⏎······)`",{"range":"2937","text":"2938"},{"range":"2939","text":"2661"},"Replace `⏎······className=\"col-4\"⏎····` with `·className=\"col-4\"`",{"range":"2940","text":"2941"},"Replace `backgroundImage:·`url(${studio.image_path})`` with `·backgroundImage:·`url(${studio.image_path})`·`",{"range":"2942","text":"2943"},"Replace `⏎··········{studio.name}⏎········` with `{studio.name}`",{"range":"2944","text":"2945"},"Replace `·FindStudiosQuery,·FindStudiosVariables·` with `⏎··FindStudiosQuery,⏎··FindStudiosVariables⏎`",{"range":"2946","text":"2947"},{"range":"2948","text":"2659"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel⏎··`",{"range":"2949","text":"2950"},{"range":"2951","text":"2668"},"Replace `(studio)·=>·(` with `studio·=>·(⏎············⏎··········`",{"range":"2952","text":"2953"},"Replace `item:·GQL.SlimSceneDataFragment·|·GQL.SceneMarkerDataFragment` with `⏎····item:·GQL.SlimSceneDataFragment·|·GQL.SceneMarkerDataFragment⏎··`",{"range":"2954","text":"2955"},"Replace `props:·IWallItemProps` with `⏎··props:·IWallItemProps⏎`",{"range":"2956","text":"2957"},"Replace `resetOnMouseLeave:·true` with `⏎····resetOnMouseLeave:·true⏎··`",{"range":"2958","text":"2959"},"Replace `·!!config.data·&&·!!config.data.configuration·?·config.data.configuration.interface.wallShowTitle` with `⏎····!!config.data·&&·!!config.data.configuration⏎······?·config.data.configuration.interface.wallShowTitle⏎·····`",{"range":"2960","text":"2961"},{"range":"2962","text":"2668"},"Replace `'10'` with `\"10\"`",{"range":"2963","text":"2964"},{"range":"2965","text":"2693"},{"range":"2966","text":"2769"},"Replace ``${props.sceneMarker!.title}·-·${TextUtils.secondsToTimestamp(props.sceneMarker.seconds)}`` with `⏎········`${props.sceneMarker!.title}·-·${TextUtils.secondsToTimestamp(⏎··········props.sceneMarker.seconds⏎········)}`⏎······`",{"range":"2967","text":"2968"},"Replace `(tag)·=>·({tag.name}` with `tag·=>·(⏎········{tag.name}⏎······`",{"range":"2969","text":"2970"},"Replace `{props.sceneMarker.primary_tag.name}` with `⏎········⏎··········{props.sceneMarker.primary_tag.name}⏎········⏎······`",{"range":"2971","text":"2972"},"Replace `·className.push(\"double-scale\");` with `⏎····className.push(\"double-scale\");⏎·`",{"range":"2973","text":"2974"},"Replace `·style.transformOrigin·=·props.origin;` with `⏎····style.transformOrigin·=·props.origin;⏎·`",{"range":"2975","text":"2976"},"Replace `display:·\"none\"` with `·display:·\"none\"·`",{"range":"2977","text":"2978"},"Replace `·alt=\"Preview\"·src={previewPath·||·screenshotPath}·onError={()·=>·previewNotFound()}` with `⏎············alt=\"Preview\"⏎············src={previewPath·||·screenshotPath}⏎············onError={()·=>·previewNotFound()}⏎·········`",{"range":"2979","text":"2980"},"Insert `·(`",{"range":"2981","text":"2982"},"Replace `lineHeight:·1}}>` with `·lineHeight:·1·}}>{title}
    `",{"range":"2983","text":"2984"},"Replace `··{title` with `{tags`",{"range":"2985","text":"2986"},{"range":"2987","text":"2659"},"Replace `····{tags}` with `)·:·(`",{"range":"2988","text":"2989"},"Replace `
    ·:·''` with `\"\"`",{"range":"2990","text":"2769"},"Insert `)`",{"range":"2991","text":"2992"},{"range":"2993","text":"2955"},"Replace `props:·IWallPanelProps` with `⏎··props:·IWallPanelProps⏎`",{"range":"2994","text":"2995"},"Replace `·return·\"top\";` with `⏎······return·\"top\";⏎···`",{"range":"2996","text":"2997"},"Replace `·return·\"top·left\";` with `⏎······return·\"top·left\";⏎···`",{"range":"2998","text":"2999"},"Replace `·return·\"top·right\";` with `⏎······return·\"top·right\";⏎···`",{"range":"3000","text":"3001"},{"range":"3002","text":"2997"},"Replace `·return·\"bottom·right\";` with `⏎······return·\"bottom·right\";⏎···`",{"range":"3003","text":"3004"},"Replace `·return·\"bottom·left\";` with `⏎······return·\"bottom·left\";⏎···`",{"range":"3005","text":"3006"},"Replace `·return·\"bottom\";` with `⏎······return·\"bottom\";⏎···`",{"range":"3007","text":"3008"},{"range":"3009","text":"3008"},"Replace `·return·\"center·left\";` with `⏎······return·\"center·left\";⏎···`",{"range":"3010","text":"3011"},"Replace `·return·\"center·right\";` with `⏎······return·\"center·right\";⏎···`",{"range":"3012","text":"3013"},{"range":"3014","text":"2668"},{"range":"3015","text":"2668"},"Replace `'react-bootstrap'` with `\"react-bootstrap\";`",{"range":"3016","text":"3017"},{"range":"3018","text":"2791"},"Replace `·Criterion,·CriterionType·` with `⏎··Criterion,⏎··CriterionType⏎`",{"range":"3019","text":"3020"},"Replace `props:·IAddFilterProps` with `⏎··props:·IAddFilterProps⏎`",{"range":"3021","text":"3022"},"Replace `=·useRef` with `⏎····event:·React.ChangeEvent⏎··`",{"range":"3028","text":"3029"},"Replace `criterion.options·&&·(value·===·undefined·||·value·===·\"\"·||·typeof·value·===·\"number\")` with `⏎········criterion.options·&&⏎········(value·===·undefined·||·value·===·\"\"·||·typeof·value·===·\"number\")⏎······`",{"range":"3030","text":"3031"},"Replace `·?·props.editingCriterion.getId()` with `⏎······?·props.editingCriterion.getId()⏎·····`",{"range":"3032","text":"3033"},{"range":"3034","text":"2668"},"Replace `·return;` with `⏎········return;⏎·····`",{"range":"3035","text":"3036"},{"range":"3037","text":"2659"},{"range":"3038","text":"2659"},"Replace `criterion.modifier·===·CriterionModifier.IsNull·||·criterion.modifier·===·CriterionModifier.NotNull` with `⏎········criterion.modifier·===·CriterionModifier.IsNull·||⏎········criterion.modifier·===·CriterionModifier.NotNull⏎······`",{"range":"3039","text":"3040"},"Replace `(items)·=>·criterion.value·=·items.map((i)·=>·({id:·i.id,·label:·i.name!}))` with `items·=>⏎··············(criterion.value·=·items.map(i·=>·({·id:·i.id,·label:·i.name!·})))⏎············`",{"range":"3041","text":"3042"},{"range":"3043","text":"2659"},"Replace `··················` with `················`",{"range":"3044","text":"3045"},{"range":"3046","text":"2808"},"Replace `⏎··········{renderModifier()}⏎········` with `{renderModifier()}`",{"range":"3047","text":"3048"},"Replace `⏎··········{renderSelect()}⏎········` with `{renderSelect()}`",{"range":"3049","text":"3050"},{"range":"3051","text":"2668"},"Insert `⏎········`",{"range":"3052","text":"3053"},{"range":"3054","text":"2659"},{"range":"3055","text":"2659"},"Replace `⏎··········onClick={()·=>·onToggle()}⏎··········active={isOpen}⏎········` with `·onClick={()·=>·onToggle()}·active={isOpen}`",{"range":"3056","text":"3057"},"Replace `⏎········show={isOpen}⏎·······` with `·show={isOpen}`",{"range":"3058","text":"3059"},"Replace `{title}` with `⏎············{title}⏎··········`",{"range":"3060","text":"3061"},"Replace `·Badge,·Button,·ButtonGroup,·Dropdown,·Form,·OverlayTrigger,·Tooltip·}·from·'react-bootstrap'` with `⏎··Badge,⏎··Button,⏎··ButtonGroup,⏎··Dropdown,⏎··Form,⏎··OverlayTrigger,⏎··Tooltip⏎}·from·\"react-bootstrap\"`",{"range":"3062","text":"3063"},{"range":"3064","text":"2791"},"Replace `props:·IListFilterProps` with `⏎··props:·IListFilterProps⏎`",{"range":"3065","text":"3066"},"Insert `⏎···`",{"range":"3067","text":"3068"},"Replace `Criterion·|·undefined` with `⏎····Criterion·|·undefined⏎··`",{"range":"3069","text":"3070"},{"range":"3071","text":"2668"},{"range":"3072","text":"2668"},"Replace `(option)` with `option`",{"range":"3073","text":"3074"},"Replace `{option}` with `⏎········{option}⏎······`",{"range":"3075","text":"3076"},"Insert `⏎·········`",{"range":"3077","text":"3078"},{"range":"3079","text":"3078"},{"range":"3080","text":"3078"},{"range":"3081","text":"3078"},{"range":"3082","text":"3078"},{"range":"3083","text":"3078"},{"range":"3084","text":"3074"},"Replace `·overlay={{getLabel(option)}}` with `⏎········overlay={⏎··········{getLabel(option)}⏎········}⏎······`",{"range":"3085","text":"3086"},"Replace `(criterion)` with `criterion`",{"range":"3087","text":"3088"},"Replace `·onSelectAll()}>Select·All` with `(⏎·········onSelectAll()}>Select·All⏎······)`",{"range":"3089","text":"3090"},"Replace `·onSelectNone()}>Select·None` with `(⏎·········onSelectNone()}>⏎··········Select·None⏎········⏎······)`",{"range":"3091","text":"3092"},"Replace `⏎······renderSelectAll(),⏎······renderSelectNone()⏎····` with `renderSelectAll(),·renderSelectNone()`",{"range":"3093","text":"3094"},"Replace `(o)` with `o`",{"range":"3095","text":"3096"},"Replace `{o.text}` with `⏎··········{o.text}⏎········`",{"range":"3097","text":"3098"},"Replace `⏎············{options}⏎··········` with `{options}`",{"range":"3099","text":"3100"},{"range":"3101","text":"2659"},"Replace `·onChangeZoom(Number.parseInt(event.target.value))` with `⏎··············onChangeZoom(Number.parseInt(event.target.value))⏎············`",{"range":"3102","text":"3103"},{"range":"3104","text":"2695"},"Replace `·PAGE_SIZE_OPTIONS.map(s·=>·{s})·` with `PAGE_SIZE_OPTIONS.map(s·=>·(⏎··············{s}⏎············))`",{"range":"3105","text":"3106"},"Replace `⏎················{renderSortByOptions()}⏎··············` with `{renderSortByOptions()}`",{"range":"3107","text":"3108"},"Insert `⏎·············`",{"range":"3109","text":"3110"},"Replace `··············{props.filter.sortDirection·===·\"asc\"·?·\"Ascending\"·:·\"Descending\"}` with `················⏎··················{props.filter.sortDirection·===·\"asc\"⏎····················?·\"Ascending\"⏎····················:·\"Descending\"}⏎················`",{"range":"3111","text":"3112"},"Replace `}` with `··}⏎············`",{"range":"3113","text":"3114"},"Replace `·icon={props.filter.sortDirection·===·\"asc\"·?·\"caret-up\"·:·\"caret-down\"}` with `⏎··················icon={⏎····················props.filter.sortDirection·===·\"asc\"⏎······················?·\"caret-up\"⏎······················:·\"caret-down\"⏎··················}⏎···············`",{"range":"3115","text":"3116"},"Replace `⏎············{renderMore()}⏎··········` with `{renderMore()}`",{"range":"3117","text":"3118"},"Replace `·style={{display:·\"flex\",·justifyContent:·\"center\",·margin:·\"10px·auto\"}}` with `⏎··········style={{⏎············display:·\"flex\",⏎············justifyContent:·\"center\",⏎············margin:·\"10px·auto\"⏎··········}}⏎········`",{"range":"3119","text":"3120"},{"range":"3121","text":"2661"},"Replace `IPaginationProps,·IPaginationState` with `⏎··IPaginationProps,⏎··IPaginationState⏎`",{"range":"3122","text":"3123"},{"range":"3124","text":"2659"},"Delete `⏎·····`",{"range":"3125","text":"2659"},"Replace `this.props.totalItems·!==·prevProps.totalItems·||·this.props.itemsPerPage·!==·prevProps.itemsPerPage` with `⏎······this.props.totalItems·!==·prevProps.totalItems·||⏎······this.props.itemsPerPage·!==·prevProps.itemsPerPage⏎····`",{"range":"3126","text":"3127"},"Replace `·return·null;` with `⏎······return·null;⏎···`",{"range":"3128","text":"3129"},"Replace `First` with `⏎··········First⏎········`",{"range":"3130","text":"3131"},"Replace `Previous` with `⏎··········Previous⏎········`",{"range":"3132","text":"3133"},"Replace `Next` with `⏎··········Next⏎········`",{"range":"3134","text":"3135"},"Replace `Last` with `⏎··········Last⏎········`",{"range":"3136","text":"3137"},"Replace `{page}` with `⏎········{page}⏎······`",{"range":"3138","text":"3139"},{"range":"3140","text":"2668"},"Replace `this.props.totalItems,·page,·this.props.itemsPerPage` with `⏎······this.props.totalItems,⏎······page,⏎······this.props.itemsPerPage⏎····`",{"range":"3141","text":"3142"},"Replace `·page·=·1;` with `⏎······page·=·1;⏎···`",{"range":"3143","text":"3144"},"Replace `·page·=·pagerState.totalPages;` with `⏎······page·=·pagerState.totalPages;⏎···`",{"range":"3145","text":"3146"},"Replace `·this.props.onChangePage(page);` with `⏎······this.props.onChangePage(page);⏎···`",{"range":"3147","text":"3148"},"Replace `totalItems:·number,·currentPage:·number,·pageSize:·number` with `⏎····totalItems:·number,⏎····currentPage:·number,⏎····pageSize:·number⏎··`",{"range":"3149","text":"3150"},"Replace `(endPage·+·1)·-·startPage).keys()].map((i)·=>·startPage·+·i` with `endPage·+·1·-·startPage).keys()].map(⏎······i·=>·startPage·+·i⏎····`",{"range":"3151","text":"3152"},{"range":"3153","text":"2659"},{"range":"3154","text":"2661"},"Replace `props:·IPerformerCardProps` with `⏎··props:·IPerformerCardProps⏎`",{"range":"3155","text":"3156"},"Replace `props.ageFromDate·?·\"·in·this·scene.\"·:·\".\"` with `⏎····props.ageFromDate·?·\"·in·this·scene.\"·:·\".\"⏎··`",{"range":"3157","text":"3158"},{"range":"3159","text":"2668"},"Replace `·(⏎······⏎········FAVORITE⏎······
    ⏎····)` with `·FAVORITE
    `",{"range":"3160","text":"3161"},"Replace `backgroundImage:·`url(${props.performer.image_path})`` with `·backgroundImage:·`url(${props.performer.image_path})`·`",{"range":"3162","text":"3163"},"Replace `⏎··········{props.performer.name}⏎········` with `{props.performer.name}`",{"range":"3164","text":"3165"},{"range":"3166","text":"2769"},"Replace `Stars·in·{props.performer.scene_count}·scenes` with `⏎··········Stars·in·{props.performer.scene_count}{\"·\"}⏎··········⏎············scenes⏎··········⏎··········`",{"range":"3167","text":"3168"},"Replace `'react-router-dom'` with `\"react-router-dom\"`",{"range":"3169","text":"3170"},"Replace `·FindPerformersQuery,·FindPerformersVariables·` with `⏎··FindPerformersQuery,⏎··FindPerformersVariables⏎`",{"range":"3171","text":"3172"},{"range":"3173","text":"2659"},{"range":"3174","text":"2659"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel⏎··`",{"range":"3175","text":"3176"},"Replace `singleResult·&&·singleResult.data·&&·singleResult.data.findPerformers·&&·singleResult.data.findPerformers.performers.length·===·1` with `⏎········singleResult·&&⏎········singleResult.data·&&⏎········singleResult.data.findPerformers·&&⏎········singleResult.data.findPerformers.performers.length·===·1⏎······`",{"range":"3177","text":"3178"},"Replace `·filter:·ListFilterModel` with `⏎····filter:·ListFilterModel⏎··`",{"range":"3179","text":"3180"},{"range":"3181","text":"2668"},"Replace `(p)·=>·(` with `p·=>·(⏎············⏎··········`",{"range":"3182","text":"3183"},"Replace `` with `(⏎········⏎······)`",{"range":"3184","text":"3185"},{"range":"3186","text":"2661"},{"range":"3187","text":"2791"},"Replace `props:·IPerformerListTableProps)·=>·{⏎` with `⏎··props:·IPerformerListTableProps⏎)·=>·{`",{"range":"3188","text":"3189"},{"range":"3190","text":"2659"},{"range":"3191","text":"2668"},{"range":"3192","text":"2659"},{"range":"3193","text":"2659"},"Insert `⏎······`",{"range":"3194","text":"3195"},{"range":"3196","text":"2808"},{"range":"3197","text":"2659"},{"range":"3198","text":"2695"},"Replace `········⏎··········{renderPerformerImage(performer)}⏎········` with `··········{renderPerformerImage(performer)}`",{"range":"3199","text":"3200"},"Replace `········⏎··············{performer.name}⏎············` with `··············{performer.name}`",{"range":"3204","text":"3205"},{"range":"3206","text":"2695"},{"range":"3207","text":"2695"},"Replace `⏎··········{performer.aliases·?·performer.aliases·:·''}⏎········` with `··{performer.aliases·?·performer.aliases·:·\"\"}`",{"range":"3208","text":"3209"},"Replace `⏎··········{maybeRenderFavoriteHeart(performer)}⏎········` with `··{maybeRenderFavoriteHeart(performer)}`",{"range":"3210","text":"3211"},"Replace `········` with `··········`",{"range":"3212","text":"3213"},{"range":"3214","text":"2695"},{"range":"3215","text":"2695"},{"range":"3216","text":"2695"},{"range":"3217","text":"3213"},"Replace `⏎··········{performer.birthdate}⏎········` with `··{performer.birthdate}`",{"range":"3218","text":"3219"},"Replace `········⏎··········{performer.height}⏎········` with `··········{performer.height}`",{"range":"3220","text":"3221"},"Replace `······` with `········`",{"range":"3222","text":"2857"},{"range":"3223","text":"2808"},{"range":"3224","text":"2695"},{"range":"3225","text":"2695"},{"range":"3226","text":"2695"},{"range":"3227","text":"2695"},"Replace `············⏎··········{props.performers.map(renderPerformerRow)}⏎········` with `··{props.performers.map(renderPerformerRow)}`",{"range":"3238","text":"3239"},{"range":"3240","text":"2857"},{"range":"3241","text":"2695"},{"range":"3242","text":"2659"},"Replace `·Button,·ButtonGroup,·Card,·Form,·Popover,·OverlayTrigger·}·from·'react-bootstrap'` with `⏎··Button,⏎··ButtonGroup,⏎··Card,⏎··Form,⏎··Popover,⏎··OverlayTrigger⏎}·from·\"react-bootstrap\"`",{"range":"3243","text":"3244"},"Replace `'classnames'` with `\"classnames\"`",{"range":"3245","text":"3246"},{"range":"3247","text":"2791"},"Replace `·:·boolean,·shiftKey·` with `:·boolean,·shiftKey`",{"range":"3248","text":"3249"},"Replace `props:·ISceneCardProps` with `⏎··props:·ISceneCardProps⏎`",{"range":"3250","text":"3251"},"Replace `resetOnMouseLeave:·false` with `⏎····resetOnMouseLeave:·false⏎··`",{"range":"3252","text":"3253"},"Replace `·!!config.data·&&·!!config.data.configuration·?·config.data.configuration.interface.showStudioAsText` with `⏎····!!config.data·&&·!!config.data.configuration⏎······?·config.data.configuration.interface.showStudioAsText⏎·····`",{"range":"3254","text":"3255"},{"range":"3256","text":"2668"},"Replace `·className={`rating-banner·${props.scene.rating·?·`rating-${props.scene.rating}`·:·''·}`}` with `⏎········className={`rating-banner·${⏎··········props.scene.rating·?·`rating-${props.scene.rating}`·:·\"\"⏎········}`}⏎······`",{"range":"3257","text":"3258"},"Replace `·{TextUtils.resolution(props.scene.file.height)}·:·''` with `(⏎··········⏎············{\"·\"}⏎············{TextUtils.resolution(props.scene.file.height)}⏎··········⏎········)·:·(⏎··········\"\"⏎········)`",{"range":"3259","text":"3260"},"Replace `·props.scene.file.duration·>=·1·?·TextUtils.secondsToTimestamp(props.scene.file.duration)·:·''` with `⏎········props.scene.file.duration·>=·1⏎··········?·TextUtils.secondsToTimestamp(props.scene.file.duration)⏎··········:·\"\"`",{"range":"3261","text":"3262"},{"range":"3263","text":"2659"},{"range":"3264","text":"2659"},"Replace `⏎··········to={`/studios/${props.scene.studio.id}`}⏎··········style={style}⏎········` with `·to={`/studios/${props.scene.studio.id}`}·style={style}`",{"range":"3265","text":"3266"},{"range":"3267","text":"2659"},"Replace `··props.scene.tags.map((tag)` with `props.scene.tags.map(tag`",{"range":"3268","text":"3269"},{"range":"3270","text":"2659"},{"range":"3271","text":"2659"},"Replace `⏎··········props.scene.performers.map((performer)` with `props.scene.performers.map(performer`",{"range":"3272","text":"3273"},{"range":"3274","text":"2659"},"Replace `··············` with `············`",{"range":"3275","text":"2756"},{"range":"3276","text":"2659"},{"range":"3277","text":"3045"},{"range":"3278","text":"2659"},"Replace `··style={{backgroundImage:·`url(${performer.image_path})`` with `style={{·backgroundImage:·`url(${performer.image_path})`·`",{"range":"3279","text":"3280"},"Replace `··>·0` with `······props.scene.scene_markers.length·>·0⏎····`",{"range":"3295","text":"3296"},{"range":"3297","text":"2695"},"Replace `·shiftKey·=·event.shiftKey;·event.stopPropagation();·}·` with `⏎··········shiftKey·=·event.shiftKey;⏎··········event.stopPropagation();⏎········}`",{"range":"3298","text":"3299"},"Replace `·to={`/scenes/${props.scene.id}`}·className={cx('image',·'previewable',·{portrait:·isPortrait()})}` with `⏎········to={`/scenes/${props.scene.id}`}⏎········className={cx(\"image\",·\"previewable\",·{·portrait:·isPortrait()·})}⏎······`",{"range":"3300","text":"3301"},"Replace `'preview',·{portrait:·isPortrait()` with `\"preview\",·{·portrait:·isPortrait()·`",{"range":"3302","text":"3303"},"Replace `·?·props.scene.title` with `⏎············?·props.scene.title⏎···········`",{"range":"3304","text":"3305"},"Replace `props:·ISceneDetailProps` with `⏎··props:·ISceneDetailProps⏎`",{"range":"3306","text":"3307"},{"range":"3308","text":"2668"},{"range":"3309","text":"2668"},"Replace `(tag)` with `tag`",{"range":"3310","text":"3311"},{"range":"3312","text":"2695"},"Replace `·?·props.scene.title` with `⏎··········?·props.scene.title⏎·········`",{"range":"3313","text":"3314"},{"range":"3315","text":"2769"},{"range":"3316","text":"2769"},"Replace `
    Resolution:·{TextUtils.resolution(props.scene.file.height)}
    ·:·''` with `(⏎········
    Resolution:·{TextUtils.resolution(props.scene.file.height)}
    ⏎······)·:·(⏎········\"\"⏎······)`",{"range":"3317","text":"3318"},{"range":"3319","text":"2661"},"Replace `props:·ISceneFileInfoPanelProps` with `⏎··props:·ISceneFileInfoPanelProps⏎`",{"range":"3320","text":"3321"},"Replace `{\"file://\"+props.scene.path}` with `⏎··········⏎············{\"file://\"·+·props.scene.path}⏎··········{\"·\"}⏎·······`",{"range":"3322","text":"3323"},"Replace `{props.scene.paths.stream}` with `⏎··········{props.scene.paths.stream}{\"·\"}⏎·······`",{"range":"3324","text":"3325"},{"range":"3326","text":"2668"},{"range":"3327","text":"2668"},{"range":"3328","text":"2668"},"Replace `{props.scene.file.width}·x·{props.scene.file.height}` with `⏎··········{props.scene.file.width}·x·{props.scene.file.height}⏎········`",{"range":"3329","text":"3330"},{"range":"3331","text":"2668"},{"range":"3332","text":"2668"},{"range":"3333","text":"2668"},{"range":"3334","text":"2668"},{"range":"3335","text":"2668"},"Replace `IScenePerformerPanelProps` with `⏎··IScenePerformerPanelProps⏎`",{"range":"3336","text":"3337"},"Replace `(performer)` with `performer`",{"range":"3338","text":"3339"},"Replace `·key={performer.id}·performer={performer}·ageFromDate={props.scene.date}` with `⏎······key={performer.id}⏎······performer={performer}⏎······ageFromDate={props.scene.date}⏎···`",{"range":"3340","text":"3341"},"Replace `⏎········{cards}⏎······` with `{cards}`",{"range":"3342","text":"3343"},{"range":"3344","text":"3170"},"Replace `·FindScenesQuery,·FindScenesVariables,·SlimSceneDataFragment·` with `⏎··FindScenesQuery,⏎··FindScenesVariables,⏎··SlimSceneDataFragment⏎`",{"range":"3345","text":"3346"},{"range":"3347","text":"2659"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel⏎··`",{"range":"3348","text":"3349"},"Replace `singleResult·&&·singleResult.data·&&·singleResult.data.findScenes·&&·singleResult.data.findScenes.scenes.length·===·1` with `⏎········singleResult·&&⏎········singleResult.data·&&⏎········singleResult.data.findScenes·&&⏎········singleResult.data.findScenes.scenes.length·===·1⏎······`",{"range":"3350","text":"3351"},"Replace `result:·QueryHookResult,·selectedIds:·Set` with `⏎····result:·QueryHookResult,⏎····selectedIds:·Set⏎··`",{"range":"3352","text":"3353"},"Replace `·return·undefined;` with `⏎······return·undefined;⏎···`",{"range":"3354","text":"3355"},{"range":"3356","text":"2659"},"Replace `(id)` with `id`",{"range":"3357","text":"3358"},"Replace `(scene)` with `scene`",{"range":"3359","text":"3360"},"Replace `·{·return;·}}` with `···{⏎············return;⏎··········}}⏎········`",{"range":"3361","text":"3362"},"Replace `scene·:·SlimSceneDataFragment,·selectedIds:·Set,·zoomIndex:·number` with `⏎····scene:·SlimSceneDataFragment,⏎····selectedIds:·Set,⏎····zoomIndex:·number⏎··`",{"range":"3363","text":"3364"},"Replace `·listData.onSelectChange(scene.id,·selected,·shiftKey)` with `⏎··········listData.onSelectChange(scene.id,·selected,·shiftKey)⏎········`",{"range":"3365","text":"3366"},{"range":"3367","text":"2808"},"Replace `result:·QueryHookResult,·filter:·ListFilterModel,·selectedIds:·Set,·zoomIndex:·number` with `⏎····result:·QueryHookResult,⏎····filter:·ListFilterModel,⏎····selectedIds:·Set,⏎····zoomIndex:·number⏎··`",{"range":"3368","text":"3369"},{"range":"3370","text":"2668"},"Replace `(scene)·=>·renderSceneCard(scene,·selectedIds,·zoomIndex)` with `scene·=>⏎············renderSceneCard(scene,·selectedIds,·zoomIndex)⏎··········`",{"range":"3371","text":"3372"},{"range":"3373","text":"2693"},{"range":"3374","text":"2659"},"Replace `····` with `··`",{"range":"3375","text":"2695"},{"range":"3376","text":"2659"},{"range":"3377","text":"2659"},{"range":"3378","text":"2808"},"Replace `IScenePlayerProps,·IScenePlayerState` with `⏎··IScenePlayerProps,⏎··IScenePlayerState⏎`",{"range":"3379","text":"3380"},"Replace `scrubberPosition:·0` with `·scrubberPosition:·0·`",{"range":"3381","text":"3382"},{"range":"3383","text":"2659"},{"range":"3384","text":"2659"},{"range":"3385","text":"2659"},"Delete `····`",{"range":"3386","text":"2659"},{"range":"3387","text":"2659"},"Replace `············` with `········`",{"range":"3388","text":"2857"},{"range":"3389","text":"2659"},{"range":"3390","text":"2857"},{"range":"3391","text":"2659"},"Replace `··········` with `······`",{"range":"3392","text":"3393"},{"range":"3394","text":"2659"},"Replace `·?·this.player.getPlaybackRate()` with `⏎······?·this.player.getPlaybackRate()⏎·····`",{"range":"3395","text":"3396"},"Delete `;`",{"range":"3397","text":"2659"},{"range":"3398","text":"3396"},{"range":"3399","text":"2659"},"Replace `·this.player.setPlaybackRate(1);·};` with `⏎····this.player.setPlaybackRate(1);⏎··}`",{"range":"3400","text":"3401"},"Replace `·this.player.getState().paused·?·this.player.play()·:·this.player.pause();·};` with `⏎····this.player.getState().paused·?·this.player.play()·:·this.player.pause();⏎··}`",{"range":"3402","text":"3403"},"Replace `this.onReset()` with `⏎······this.onReset();⏎····`",{"range":"3404","text":"3405"},"Replace `this.onDecrease()` with `⏎······this.onDecrease();⏎····`",{"range":"3406","text":"3407"},"Replace `this.onIncrease()` with `⏎······this.onIncrease();⏎····`",{"range":"3408","text":"3409"},"Replace `this.onPause()` with `⏎······this.onPause();⏎····`",{"range":"3410","text":"3411"},{"range":"3412","text":"2808"},"Replace `·?·this.props.config.maximumLoopDuration` with `⏎······?·this.props.config.maximumLoopDuration⏎·····`",{"range":"3413","text":"3414"},"Replace `·!!scene.file.duration·&&·!!maxLoopDuration·&&·scene.file.duration·<·maxLoopDuration` with `·(⏎······!!scene.file.duration·&&⏎······!!maxLoopDuration·&&⏎······scene.file.duration·<·maxLoopDuration⏎····)`",{"range":"3415","text":"3416"},"Replace `·return·{};` with `⏎······return·{};⏎···`",{"range":"3417","text":"3418"},"Replace `·((seekToPosition:·number,·_videoTag:·any)·=>·void)` with `⏎······|·((seekToPosition:·number,·_videoTag:·any)·=>·void)⏎·····`",{"range":"3419","text":"3420"},"Replace `·((_videoTag:·any)·=>·number)` with `⏎······|·((_videoTag:·any)·=>·number)⏎·····`",{"range":"3421","text":"3422"},"Replace `·(this.props.scene.paths.stream·+·\"?start=\"·+·seekToPosition)` with `⏎··········this.props.scene.paths.stream·+·\"?start=\"·+·seekToPosition`",{"range":"3423","text":"3424"},{"range":"3425","text":"2808"},{"range":"3426","text":"2659"},{"range":"3427","text":"2659"},{"range":"3428","text":"2659"},{"range":"3429","text":"2659"},"Replace `·this.props.autoplay·||` with `⏎········this.props.autoplay·||⏎·······`",{"range":"3430","text":"3431"},"Replace `scrubberPosition:·position` with `·scrubberPosition:·position·`",{"range":"3432","text":"3433"},{"range":"3434","text":"3433"},"Replace `props:·IScenePlayerProps` with `⏎··props:·IScenePlayerProps⏎`",{"range":"3435","text":"3436"},{"range":"3437","text":"2659"},"Replace `··return··goBack()}><` with `⏎········variant=\"link\"⏎········className=\"scrubber-button\"⏎········id=\"scrubber-back\"⏎········onClick={()·=>·goBack()}⏎······>⏎········<⏎······`",{"range":"3534","text":"3535"},"Replace `⏎··············{renderTags()}⏎············` with `{renderTags()}`",{"range":"3536","text":"3537"},"Replace `·className=\"scrubber-button\"·id=\"scrubber-forward\"·onClick={()·=>·goForward()}>>` with `⏎········className=\"scrubber-button\"⏎········id=\"scrubber-forward\"⏎········onClick={()·=>·goForward()}⏎······>⏎········>⏎······`",{"range":"3538","text":"3539"},"Delete `,·{··}`",{"range":"3540","text":"2659"},{"range":"3541","text":"2659"},{"range":"3542","text":"2659"},"Replace `(⏎······⏎····)` with ``",{"range":"3543","text":"3544"},"Replace `·return·\"main-jwplayer\";` with `⏎····return·\"main-jwplayer\";⏎·`",{"range":"3545","text":"3546"},"Replace `'apollo-link-ws'` with `\"apollo-link-ws\"`",{"range":"3547","text":"3548"},"Replace `'apollo-cache-inmemory'` with `\"apollo-cache-inmemory\"`",{"range":"3549","text":"3550"},{"range":"3551","text":"2659"},{"range":"3552","text":"2659"},"Replace `'OperationDefinition'·&&·operation·===·'subscription'` with `\"OperationDefinition\"·&&·operation·===·\"subscription\"`",{"range":"3553","text":"3554"},{"range":"3555","text":"2659"},{"range":"3556","text":"2659"},"Insert `⏎··········`",{"range":"3557","text":"3558"},{"range":"3559","text":"2695"},"Replace `········})` with `··········})⏎········`",{"range":"3560","text":"3561"},{"range":"3562","text":"2659"},{"range":"3563","text":"2659"},{"range":"3564","text":"2659"},{"range":"3565","text":"2659"},{"range":"3566","text":"2659"},{"range":"3567","text":"2659"},{"range":"3568","text":"2659"},{"range":"3569","text":"2659"},{"range":"3570","text":"2659"},{"range":"3571","text":"2659"},{"range":"3572","text":"2659"},{"range":"3573","text":"2659"},{"range":"3574","text":"2659"},"Replace `·return·GQL.useFindGallery({variables:·{id}});` with `⏎····return·GQL.useFindGallery({·variables:·{·id·}·});⏎·`",{"range":"3575","text":"3576"},"Replace `·return·GQL.useFindScene({variables:·{id}});` with `⏎····return·GQL.useFindScene({·variables:·{·id·}·});⏎·`",{"range":"3577","text":"3578"},"Replace `variables:·{id},·skip` with `·variables:·{·id·},·skip·`",{"range":"3579","text":"3580"},{"range":"3581","text":"3580"},{"range":"3582","text":"2659"},"Replace `·variables:·{·scraper_id:·scraperId,·query:·q·},·skip:·q·===·''` with `⏎······variables:·{·scraper_id:·scraperId,·query:·q·},⏎······skip:·q·===·\"\"⏎····`",{"range":"3583","text":"3584"},"Replace `scraperId:·string,·scrapedPerformer·:·GQL.ScrapedPerformerInput` with `⏎····scraperId:·string,⏎····scrapedPerformer:·GQL.ScrapedPerformerInput⏎··`",{"range":"3585","text":"3586"},"Replace `·····return·GQL.useScrapePerformer({·variables:·{·scraper_id:·scraperId,·scraped_performer:·scrapedPerformer·}` with `····return·GQL.useScrapePerformer({⏎······variables:·{·scraper_id:·scraperId,·scraped_performer:·scrapedPerformer·}⏎····`",{"range":"3587","text":"3588"},"Replace `·return·GQL.useScrapeFreeonesPerformers({·variables:·{·q·}·});` with `⏎····return·GQL.useScrapeFreeonesPerformers({·variables:·{·q·}·});⏎·`",{"range":"3589","text":"3590"},"Replace `·return·GQL.useMarkerStrings();` with `⏎····return·GQL.useMarkerStrings();⏎·`",{"range":"3591","text":"3592"},"Replace `·return·GQL.useAllTags();` with `⏎····return·GQL.useAllTags();⏎·`",{"range":"3593","text":"3594"},"Replace `·return·GQL.useAllTagsForFilter();` with `⏎····return·GQL.useAllTagsForFilter();⏎·`",{"range":"3595","text":"3596"},"Replace `·return·GQL.useAllPerformersForFilter();` with `⏎····return·GQL.useAllPerformersForFilter();⏎·`",{"range":"3597","text":"3598"},"Replace `·return·GQL.useAllStudiosForFilter();` with `⏎····return·GQL.useAllStudiosForFilter();⏎·`",{"range":"3599","text":"3600"},"Replace `variables:·{scene_id:·sceneId}` with `·variables:·{·scene_id:·sceneId·}·`",{"range":"3601","text":"3602"},"Replace `·return·GQL.useStats();` with `⏎····return·GQL.useStats();⏎·`",{"range":"3603","text":"3604"},"Replace `·return·GQL.useVersion();` with `⏎····return·GQL.useVersion();⏎·`",{"range":"3605","text":"3606"},"Replace `·return·GQL.useConfiguration();` with `⏎····return·GQL.useConfiguration();⏎·`",{"range":"3607","text":"3608"},"Replace `·return·GQL.useDirectories({·variables:·{·path·}});` with `⏎····return·GQL.useDirectories({·variables:·{·path·}·});⏎·`",{"range":"3609","text":"3610"},"Replace `·StashService.invalidateQueries(StashService.performerMutationImpactedQueries` with `⏎········StashService.invalidateQueries(⏎··········StashService.performerMutationImpactedQueries⏎········`",{"range":"3611","text":"3612"},{"range":"3613","text":"3612"},{"range":"3614","text":"3612"},"Replace `·StashService.invalidateQueries(StashService.sceneMutationImpactedQueries` with `⏎········StashService.invalidateQueries(⏎··········StashService.sceneMutationImpactedQueries⏎········`",{"range":"3615","text":"3616"},"Replace `·StashService.invalidateQueries(StashService.sceneBulkMutationImpactedQueries` with `⏎········StashService.invalidateQueries(⏎··········StashService.sceneBulkMutationImpactedQueries⏎········`",{"range":"3617","text":"3618"},"Replace `·:·input·}` with `:·input·}·`",{"range":"3619","text":"3620"},{"range":"3621","text":"3616"},"Replace `·StashService.invalidateQueries(StashService.studioMutationImpactedQueries` with `⏎········StashService.invalidateQueries(⏎··········StashService.studioMutationImpactedQueries⏎········`",{"range":"3622","text":"3623"},{"range":"3624","text":"3623"},{"range":"3625","text":"3623"},{"range":"3626","text":"2659"},{"range":"3627","text":"2659"},"Insert `⏎·······`",{"range":"3628","text":"3629"},"Replace `·variables:·{·input·},·refetchQueries:·[\"Configuration\"]` with `⏎······variables:·{·input·},⏎······refetchQueries:·[\"Configuration\"]⏎···`",{"range":"3630","text":"3631"},{"range":"3632","text":"3631"},"Replace `'no-cache'` with `\"no-cache\"`",{"range":"3633","text":"3634"},{"range":"3635","text":"3634"},{"range":"3636","text":"2659"},{"range":"3637","text":"2659"},{"range":"3638","text":"2659"},"Replace `scraperId:·string,·scrapedPerformer:·GQL.ScrapedPerformerInput` with `⏎····scraperId:·string,⏎····scrapedPerformer:·GQL.ScrapedPerformerInput⏎··`",{"range":"3639","text":"3586"},{"range":"3640","text":"2659"},{"range":"3641","text":"2659"},{"range":"3642","text":"2659"},{"range":"3643","text":"2659"},{"range":"3644","text":"2659"},{"range":"3645","text":"2659"},"Replace `scraperId:·string,·scene:·GQL.SceneUpdateInput` with `⏎····scraperId:·string,⏎····scene:·GQL.SceneUpdateInput⏎··`",{"range":"3646","text":"3647"},{"range":"3648","text":"2659"},{"range":"3649","text":"2659"},{"range":"3650","text":"2659"},{"range":"3651","text":"2659"},{"range":"3652","text":"2659"},{"range":"3653","text":"2659"},{"range":"3654","text":"2659"},{"range":"3655","text":"2659"},"Replace `filter:·filter},` with `·filter:·filter·}`",{"range":"3656","text":"3657"},"Replace `filter:·GQL.FindFilterType,·config:·GQL.SceneParserInput` with `⏎····filter:·GQL.FindFilterType,⏎····config:·GQL.SceneParserInput⏎··`",{"range":"3658","text":"3659"},"Replace `filter:·filter,·config:·config` with `·filter:·filter,·config:·config·`",{"range":"3660","text":"3661"},{"range":"3662","text":"2659"},{"range":"3663","text":"2659"},"Replace `IInterfaceConfig·|·undefined` with `⏎··IInterfaceConfig·|·undefined⏎`",{"range":"3664","text":"3665"},{"range":"3666","text":"2659"},"Replace `data:·json,·setData:·setJson,·error:·err` with `·data:·json,·setData:·setJson,·error:·err·`",{"range":"3667","text":"3668"},"Replace `options:·IVideoHoverHookOptions` with `⏎····options:·IVideoHoverHookOptions⏎··`",{"range":"3669","text":"3670"},"Replace `·!!config.data·&&·!!config.data.configuration·?·config.data.configuration.interface.soundOnPreview` with `⏎······!!config.data·&&·!!config.data.configuration⏎········?·config.data.configuration.interface.soundOnPreview⏎·······`",{"range":"3671","text":"3672"},{"range":"3673","text":"3036"},"Replace `isPlaying.current·=·false` with `(isPlaying.current·=·false)`",{"range":"3674","text":"3675"},{"range":"3676","text":"3036"},"Replace `videoEl,·isPlaying,·isHovering,·options` with `·videoEl,·isPlaying,·isHovering,·options·`",{"range":"3677","text":"3678"},{"range":"3679","text":"2668"},"Replace `(error)` with `error`",{"range":"3680","text":"3681"},{"range":"3682","text":"2668"},"Delete `(`",{"range":"3683","text":"2659"},"Replace `⏎),·document.getElementById(\"root\")` with `,⏎··document.getElementById(\"root\")⏎`",{"range":"3684","text":"3685"},"Replace `\"none\"·|⏎··\"rating\"·|⏎··\"resolution\"·|` with `|·\"none\"⏎··|·\"rating\"⏎··|·\"resolution\"`",{"range":"3686","text":"3687"},"Replace `\"favorite\"·|` with `|·\"favorite\"`",{"range":"3688","text":"3689"},"Replace `\"hasMarkers\"·|⏎··\"isMissing\"·|⏎··\"tags\"·|⏎··\"sceneTags\"·|⏎··\"performers\"·|⏎··\"studios\"·|⏎··\"birth_year\"·|⏎··\"age\"·|` with `|·\"hasMarkers\"⏎··|·\"isMissing\"⏎··|·\"tags\"⏎··|·\"sceneTags\"⏎··|·\"performers\"⏎··|·\"studios\"⏎··|·\"birth_year\"⏎··|·\"age\"`",{"range":"3690","text":"3691"},"Replace `·\"ethnicity\"·|` with `·|·\"ethnicity\"`",{"range":"3692","text":"3693"},"Replace `·\"country\"·|⏎··\"eye_color\"·|⏎··\"height\"·|⏎··\"measurements\"·|⏎··\"fake_tits\"·|⏎··\"career_length\"·|` with `·|·\"country\"⏎··|·\"eye_color\"⏎··|·\"height\"⏎··|·\"measurements\"⏎··|·\"fake_tits\"⏎··|·\"career_length\"`",{"range":"3694","text":"3695"},"Replace `\"tattoos\"·|⏎··\"piercings\"·|⏎·` with `|·\"tattoos\"⏎··|·\"piercings\"⏎··|`",{"range":"3696","text":"3697"},{"range":"3698","text":"3629"},{"range":"3699","text":"3629"},{"range":"3700","text":"3629"},{"range":"3701","text":"3629"},{"range":"3702","text":"3629"},{"range":"3703","text":"3629"},{"range":"3704","text":"3629"},{"range":"3705","text":"3629"},{"range":"3706","text":"3629"},{"range":"3707","text":"3629"},{"range":"3708","text":"3629"},{"range":"3709","text":"3629"},{"range":"3710","text":"3629"},{"range":"3711","text":"3629"},{"range":"3712","text":"3629"},{"range":"3713","text":"3629"},{"range":"3714","text":"3629"},{"range":"3715","text":"3629"},{"range":"3716","text":"3629"},{"range":"3717","text":"3629"},{"range":"3718","text":"3629"},{"range":"3719","text":"3629"},"Replace `modifier:·CriterionModifier·=·CriterionModifier.Equals` with `⏎····modifier:·CriterionModifier·=·CriterionModifier.Equals⏎··`",{"range":"3720","text":"3721"},"Replace `·return·{value:·CriterionModifier.Equals,·label:·\"Equals\"` with `⏎········return·{·value:·CriterionModifier.Equals,·label:·\"Equals\"·`",{"range":"3722","text":"3723"},"Replace `·return·{value:·CriterionModifier.NotEquals,·label:·\"Not·Equals\"` with `⏎········return·{·value:·CriterionModifier.NotEquals,·label:·\"Not·Equals\"·`",{"range":"3724","text":"3725"},"Replace `·return·{value:·CriterionModifier.GreaterThan,·label:·\"Greater·Than\"` with `⏎········return·{·value:·CriterionModifier.GreaterThan,·label:·\"Greater·Than\"·`",{"range":"3726","text":"3727"},"Replace `·return·{value:·CriterionModifier.LessThan,·label:·\"Less·Than\"` with `⏎········return·{·value:·CriterionModifier.LessThan,·label:·\"Less·Than\"·`",{"range":"3728","text":"3729"},"Replace `·return·{value:·CriterionModifier.IsNull,·label:·\"Is·NULL\"` with `⏎········return·{·value:·CriterionModifier.IsNull,·label:·\"Is·NULL\"·`",{"range":"3730","text":"3731"},"Replace `·return·{value:·CriterionModifier.NotNull,·label:·\"Not·NULL\"` with `⏎········return·{·value:·CriterionModifier.NotNull,·label:·\"Not·NULL\"·`",{"range":"3732","text":"3733"},"Replace `·return·{value:·CriterionModifier.IncludesAll,·label:·\"Includes·All\"` with `⏎········return·{·value:·CriterionModifier.IncludesAll,·label:·\"Includes·All\"·`",{"range":"3734","text":"3735"},"Replace `·return·{value:·CriterionModifier.Includes,·label:·\"Includes\"` with `⏎········return·{·value:·CriterionModifier.Includes,·label:·\"Includes\"·`",{"range":"3736","text":"3737"},"Replace `·return·{value:·CriterionModifier.Excludes,·label:·\"Excludes\"` with `⏎········return·{·value:·CriterionModifier.Excludes,·label:·\"Excludes\"·`",{"range":"3738","text":"3739"},"Replace `·modifierString·=·\"is\";` with `⏎········modifierString·=·\"is\";⏎·······`",{"range":"3740","text":"3741"},"Replace `·modifierString·=·\"is·not\";` with `⏎········modifierString·=·\"is·not\";⏎·······`",{"range":"3742","text":"3743"},"Replace `·modifierString·=·\"is·greater·than\";` with `⏎········modifierString·=·\"is·greater·than\";⏎·······`",{"range":"3744","text":"3745"},"Replace `·modifierString·=·\"is·less·than\";` with `⏎········modifierString·=·\"is·less·than\";⏎·······`",{"range":"3746","text":"3747"},"Replace `·modifierString·=·\"is·null\";` with `⏎········modifierString·=·\"is·null\";⏎·······`",{"range":"3748","text":"3749"},"Replace `·modifierString·=·\"is·not·null\";` with `⏎········modifierString·=·\"is·not·null\";⏎·······`",{"range":"3750","text":"3751"},"Replace `·modifierString·=·\"includes\";` with `⏎········modifierString·=·\"includes\";⏎·······`",{"range":"3752","text":"3753"},"Replace `·modifierString·=·\"includes·all\";` with `⏎········modifierString·=·\"includes·all\";⏎·······`",{"range":"3754","text":"3755"},"Replace `·modifierString·=·\"excludes\";` with `⏎········modifierString·=·\"excludes\";⏎·······`",{"range":"3756","text":"3757"},{"range":"3758","text":"3629"},"Replace `this.modifier·===·CriterionModifier.IsNull·||·this.modifier·===·CriterionModifier.NotNull` with `⏎······this.modifier·===·CriterionModifier.IsNull·||⏎······this.modifier·===·CriterionModifier.NotNull⏎····`",{"range":"3759","text":"3760"},"Replace `(item)` with `item`",{"range":"3761","text":"3762"},"Replace `·:·string,·value·` with `:·string,·value`",{"range":"3763","text":"3764"},{"range":"3765","text":"2659"},"Replace `·:·CriterionType,·parameterName?:·string,·options?·` with `:·CriterionType,·parameterName?:·string,·options?`",{"range":"3766","text":"3767"},{"range":"3768","text":"2659"},{"range":"3769","text":"3767"},"Replace `⏎··Criterion,⏎··CriterionType,⏎··ICriterionOption,⏎` with `·Criterion,·CriterionType,·ICriterionOption·`",{"range":"3770","text":"3771"},{"range":"3772","text":"3771"},{"range":"3773","text":"3771"},"Replace `\"title\",·\"url\",·\"date\",·\"gallery\",·\"studio\",·\"performers\"` with `⏎····\"title\",⏎····\"url\",⏎····\"date\",⏎····\"gallery\",⏎····\"studio\",⏎····\"performers\"⏎··`",{"range":"3774","text":"3775"},{"range":"3776","text":"3771"},{"range":"3777","text":"3771"},{"range":"3778","text":"2659"},{"range":"3779","text":"3771"},"Insert `⏎·`",{"range":"3780","text":"3781"},{"range":"3782","text":"2659"},{"range":"3783","text":"3771"},{"range":"3784","text":"3781"},{"range":"3785","text":"3771"},{"range":"3786","text":"2659"},{"range":"3787","text":"3771"},"Replace `GQL.AllTagsForFilterAllTags,·ILabeledId[]` with `⏎··GQL.AllTagsForFilterAllTags,⏎··ILabeledId[]⏎`",{"range":"3788","text":"3789"},{"range":"3790","text":"2659"},"Replace `⏎··CriterionModifier,⏎` with `·CriterionModifier·`",{"range":"3791","text":"3792"},"Replace `·Criterion,·CriterionType,·StringCriterion,·NumberCriterion·` with `⏎··Criterion,⏎··CriterionType,⏎··StringCriterion,⏎··NumberCriterion⏎`",{"range":"3793","text":"3794"},"Insert `⏎·····`",{"range":"3795","text":"3796"},{"range":"3797","text":"3796"},{"range":"3798","text":"3796"},{"range":"3799","text":"3796"},{"range":"3800","text":"3796"},{"range":"3801","text":"3796"},{"range":"3802","text":"3796"},{"range":"3803","text":"3796"},{"range":"3804","text":"3796"},{"range":"3805","text":"3796"},"Replace `········` with `······`",{"range":"3806","text":"3393"},{"range":"3807","text":"2659"},{"range":"3808","text":"2659"},{"range":"3809","text":"2857"},{"range":"3810","text":"2659"},{"range":"3811","text":"2659"},{"range":"3812","text":"2857"},{"range":"3813","text":"2659"},{"range":"3814","text":"2659"},{"range":"3815","text":"2659"},"Replace `·Criterion,·ICriterionOption,·CriterionType,·CriterionOption,·NumberCriterion,·StringCriterion·` with `⏎··Criterion,⏎··ICriterionOption,⏎··CriterionType,⏎··CriterionOption,⏎··NumberCriterion,⏎··StringCriterion⏎`",{"range":"3816","text":"3817"},"Replace `·FavoriteCriterion,·FavoriteCriterionOption·` with `⏎··FavoriteCriterion,⏎··FavoriteCriterionOption⏎`",{"range":"3818","text":"3819"},"Replace `·HasMarkersCriterion,·HasMarkersCriterionOption·` with `⏎··HasMarkersCriterion,⏎··HasMarkersCriterionOption⏎`",{"range":"3820","text":"3821"},"Replace `·IsMissingCriterion,·IsMissingCriterionOption·` with `⏎··IsMissingCriterion,⏎··IsMissingCriterionOption⏎`",{"range":"3822","text":"3823"},"Replace `·PerformersCriterion,·PerformersCriterionOption·` with `⏎··PerformersCriterion,⏎··PerformersCriterionOption⏎`",{"range":"3824","text":"3825"},"Replace `·ResolutionCriterion,·ResolutionCriterionOption·` with `⏎··ResolutionCriterion,⏎··ResolutionCriterionOption⏎`",{"range":"3826","text":"3827"},"Replace `·SceneTagsCriterionOption,·TagsCriterion,·TagsCriterionOption·` with `⏎··SceneTagsCriterionOption,⏎··TagsCriterion,⏎··TagsCriterionOption⏎`",{"range":"3828","text":"3829"},"Replace `⏎··DisplayMode,⏎··FilterMode,⏎` with `·DisplayMode,·FilterMode·`",{"range":"3830","text":"3831"},"Replace `·this.sortBy·=·\"date\";` with `⏎··········this.sortBy·=·\"date\";⏎·······`",{"range":"3832","text":"3833"},"Replace `\"title\",·\"path\",·\"rating\",·\"date\",·\"filesize\",·\"duration\",·\"framerate\",·\"bitrate\",·\"random\"` with `⏎··········\"title\",⏎··········\"path\",⏎··········\"rating\",⏎··········\"date\",⏎··········\"filesize\",⏎··········\"duration\",⏎··········\"framerate\",⏎··········\"bitrate\",⏎··········\"random\"⏎········`",{"range":"3834","text":"3835"},{"range":"3836","text":"2659"},{"range":"3837","text":"2659"},"Replace `·this.sortBy·=·\"name\";` with `⏎··········this.sortBy·=·\"name\";⏎·······`",{"range":"3838","text":"3839"},"Replace `⏎··········DisplayMode.Grid,⏎··········DisplayMode.List,⏎········` with `DisplayMode.Grid,·DisplayMode.List`",{"range":"3840","text":"3841"},{"range":"3842","text":"2659"},{"range":"3843","text":"2659"},"Replace `numberCriteria.concat(stringCriteria).map((c)` with `⏎··········numberCriteria.concat(stringCriteria).map(c`",{"range":"3844","text":"3845"},{"range":"3846","text":"2695"},{"range":"3847","text":"3561"},{"range":"3848","text":"3839"},"Replace `⏎··········DisplayMode.Grid,⏎········` with `DisplayMode.Grid`",{"range":"3849","text":"3850"},"Replace `⏎··········new·NoneCriterionOption(),⏎········` with `new·NoneCriterionOption()`",{"range":"3851","text":"3852"},"Replace `·this.sortBy·=·\"path\";` with `⏎··········this.sortBy·=·\"path\";⏎·······`",{"range":"3853","text":"3854"},"Replace `⏎··········DisplayMode.List,⏎········` with `DisplayMode.List`",{"range":"3855","text":"3856"},{"range":"3857","text":"3852"},"Replace `·this.sortBy·=·\"title\";` with `⏎··········this.sortBy·=·\"title\";⏎·······`",{"range":"3858","text":"3859"},"Replace `\"title\",·\"seconds\",·\"scene_id\",·\"random\",·\"scenes_updated_at\"` with `⏎··········\"title\",⏎··········\"seconds\",⏎··········\"scene_id\",⏎··········\"random\",⏎··········\"scenes_updated_at\"⏎········`",{"range":"3860","text":"3861"},"Replace `⏎··········DisplayMode.Wall,⏎········` with `DisplayMode.Wall`",{"range":"3862","text":"3863"},{"range":"3864","text":"2659"},{"range":"3865","text":"3852"},"Replace `·this.displayMode·=·this.displayModeOptions[0];` with `⏎······this.displayMode·=·this.displayModeOptions[0];⏎···`",{"range":"3866","text":"3867"},"Replace `(rawParms)⏎·····` with `·(rawParms)`",{"range":"3868","text":"3869"},{"range":"3870","text":"3088"},{"range":"3871","text":"2659"},"Replace `encode:·false` with `·encode:·false·`",{"range":"3872","text":"3873"},"Replace `·this.sortDirection·===·\"asc\"·?·SortDirectionEnum.Asc·:·SortDirectionEnum.Desc,` with `⏎········this.sortDirection·===·\"asc\"⏎··········?·SortDirectionEnum.Asc⏎··········:·SortDirectionEnum.Desc`",{"range":"3874","text":"3875"},"Replace `((criterion)` with `(criterion`",{"range":"3876","text":"3877"},"Replace `·value:·ratingCrit.value,·modifier:·ratingCrit.modifier` with `⏎············value:·ratingCrit.value,⏎············modifier:·ratingCrit.modifier⏎·········`",{"range":"3878","text":"3879"},"Replace `·result.resolution·=·ResolutionEnum.Low;` with `⏎··············result.resolution·=·ResolutionEnum.Low;⏎·············`",{"range":"3880","text":"3881"},"Replace `·result.resolution·=·ResolutionEnum.Standard;` with `⏎··············result.resolution·=·ResolutionEnum.Standard;⏎·············`",{"range":"3882","text":"3883"},"Replace `·result.resolution·=·ResolutionEnum.StandardHd;` with `⏎··············result.resolution·=·ResolutionEnum.StandardHd;⏎·············`",{"range":"3884","text":"3885"},"Replace `·result.resolution·=·ResolutionEnum.FullHd;` with `⏎··············result.resolution·=·ResolutionEnum.FullHd;⏎·············`",{"range":"3886","text":"3887"},"Replace `·result.resolution·=·ResolutionEnum.FourK;` with `⏎··············result.resolution·=·ResolutionEnum.FourK;⏎·············`",{"range":"3888","text":"3889"},"Replace `·value:·tagsCrit.value.map((tag)·=>·tag.id),·modifier:·tagsCrit.modifier` with `⏎············value:·tagsCrit.value.map(tag·=>·tag.id),⏎············modifier:·tagsCrit.modifier⏎·········`",{"range":"3890","text":"3891"},"Replace `·value:·perfCrit.value.map((perf)·=>·perf.id),·modifier:·perfCrit.modifier` with `⏎············value:·perfCrit.value.map(perf·=>·perf.id),⏎············modifier:·perfCrit.modifier⏎·········`",{"range":"3892","text":"3893"},"Replace `·value:·studCrit.value.map((studio)·=>·studio.id),·modifier:·studCrit.modifier` with `⏎············value:·studCrit.value.map(studio·=>·studio.id),⏎············modifier:·studCrit.modifier⏎·········`",{"range":"3894","text":"3895"},{"range":"3896","text":"3088"},"Insert `⏎···········`",{"range":"3897","text":"3898"},"Replace `·value:·byCrit.value,·modifier:·byCrit.modifier` with `⏎············value:·byCrit.value,⏎············modifier:·byCrit.modifier⏎·········`",{"range":"3899","text":"3900"},"Replace `·value:·ethCrit.value,·modifier:·ethCrit.modifier` with `⏎············value:·ethCrit.value,⏎············modifier:·ethCrit.modifier⏎·········`",{"range":"3901","text":"3902"},"Replace `·value:·cntryCrit.value,·modifier:·cntryCrit.modifier` with `⏎············value:·cntryCrit.value,⏎············modifier:·cntryCrit.modifier⏎·········`",{"range":"3903","text":"3904"},"Replace `·value:·mCrit.value,·modifier:·mCrit.modifier` with `⏎············value:·mCrit.value,⏎············modifier:·mCrit.modifier⏎·········`",{"range":"3905","text":"3906"},"Replace `·value:·clCrit.value,·modifier:·clCrit.modifier` with `⏎············value:·clCrit.value,⏎············modifier:·clCrit.modifier⏎·········`",{"range":"3907","text":"3908"},{"range":"3909","text":"3088"},{"range":"3910","text":"3891"},"Replace `·value:·sceneTagsCrit.value.map((tag)·=>·tag.id),·modifier:·sceneTagsCrit.modifier` with `⏎············value:·sceneTagsCrit.value.map(tag·=>·tag.id),⏎············modifier:·sceneTagsCrit.modifier⏎·········`",{"range":"3911","text":"3912"},"Replace `·value:·performersCrit.value.map((performer)·=>·performer.id),·modifier:·performersCrit.modifier` with `⏎············value:·performersCrit.value.map(performer·=>·performer.id),⏎············modifier:·performersCrit.modifier⏎·········`",{"range":"3913","text":"3914"},{"range":"3915","text":"2659"},{"range":"3916","text":"2659"},{"range":"3917","text":"2659"},{"range":"3918","text":"2659"},{"range":"3919","text":"2659"},{"range":"3920","text":"2659"},"Replace `(registration)` with `registration`",{"range":"3921","text":"3922"},{"range":"3923","text":"2659"},"Replace `((error)` with `(error`",{"range":"3924","text":"3925"},"Replace `(response)` with `response`",{"range":"3926","text":"3927"},"Replace `((registration)` with `(registration`",{"range":"3928","text":"3929"},{"range":"3930","text":"2659"},{"range":"3931","text":"3922"},"Replace `performer:·Partial` with `⏎··performer:·Partial⏎`",{"range":"3932","text":"3933"},"Delete `⏎···`",{"range":"3934","text":"2659"},"Replace `{·id:·performer.id,·label:·performer.name·||·`Performer·${performer.id}`·}` with `⏎····{·id:·performer.id,·label:·performer.name·||·`Performer·${performer.id}`·}⏎··`",{"range":"3935","text":"3936"},{"range":"3937","text":"2808"},{"range":"3938","text":"2659"},"Replace `{·id:·studio.id,·label:·studio.name·||·`Studio·${studio.id}`·}` with `⏎····{·id:·studio.id,·label:·studio.name·||·`Studio·${studio.id}`·}⏎··`",{"range":"3939","text":"3940"},{"range":"3941","text":"2808"},{"range":"3942","text":"2659"},{"range":"3943","text":"2808"},{"range":"3944","text":"2659"},{"range":"3945","text":"2808"},"Replace `sceneMarker:·Partial` with `⏎··sceneMarker:·Partial⏎`",{"range":"3946","text":"3947"},{"range":"3948","text":"2659"},{"range":"3949","text":"2808"},{"range":"3950","text":"2808"},"Replace `⏎··\"bytes\",⏎··\"kB\",⏎··\"MB\",⏎··\"GB\",⏎··\"TB\",⏎··\"PB\",⏎` with `\"bytes\",·\"kB\",·\"MB\",·\"GB\",·\"TB\",·\"PB\"`",{"range":"3951","text":"3952"},"Replace `value?:·string,·limit:·number·=·100,·tail:·string·=·\"...\"` with `⏎··value?:·string,⏎··limit:·number·=·100,⏎··tail:·string·=·\"...\"⏎`",{"range":"3953","text":"3954"},{"range":"3955","text":"2659"},"Replace `⏎····?·value.substring(0,·limit)·+·tail⏎···` with `·?·value.substring(0,·limit)·+·tail`",{"range":"3956","text":"3957"},{"range":"3958","text":"2808"},{"range":"3959","text":"2659"},"Replace `·bytes·>=·1024·` with `bytes·>=·1024`",{"range":"3960","text":"3961"},{"range":"3962","text":"2808"},{"range":"3963","text":"2808"},{"range":"3964","text":"2659"},{"range":"3965","text":"2808"},{"range":"3966","text":"2659"},{"range":"3967","text":"3466"},"Replace `······(birthdate.getMonth()·>=·fromDate.getMonth()·&&·birthdate.getDay()·>·fromDate.getDay())` with `····(birthdate.getMonth()·>=·fromDate.getMonth()·&&⏎······birthdate.getDay()·>·fromDate.getDay())⏎··`",{"range":"3968","text":"3969"},{"range":"3970","text":"2808"},{"range":"3971","text":"2808"},{"range":"3972","text":"2808"},{"range":"3973","text":"2808"},"Replace `'react'` with `\"react\"`",{"range":"3974","text":"3975"},"Replace `'@fortawesome/react-fontawesome'` with `\"@fortawesome/react-fontawesome\"`",{"range":"3976","text":"3977"},{"range":"3978","text":"2684"},"Replace `'./Select'` with `\"./Select\"`",{"range":"3979","text":"3980"},"Replace `'./Icon'` with `\"./Icon\"`",{"range":"3981","text":"3982"},"Replace `'./Modal'` with `\"./Modal\"`",{"range":"3983","text":"3984"},"Replace `'./DetailsEditNavbar'` with `\"./DetailsEditNavbar\"`",{"range":"3985","text":"3986"},"Replace `'./DurationInput'` with `\"./DurationInput\"`",{"range":"3987","text":"3988"},"Replace `'./TagLink'` with `\"./TagLink\"`",{"range":"3989","text":"3990"},"Replace `'./Toast'` with `\"./Toast\"`",{"range":"3991","text":"3992"},"Replace `'./LocalForage'` with `\"./LocalForage\"`",{"range":"3993","text":"3994"},"Replace `'./VideoHover'` with `\"./VideoHover\"`",{"range":"3995","text":"3996"},"Replace `·useScenesList,·useSceneMarkersList,·useGalleriesList,·useStudiosList,·usePerformersList·}·from·'./ListHook'` with `⏎··useScenesList,⏎··useSceneMarkersList,⏎··useGalleriesList,⏎··useStudiosList,⏎··usePerformersList⏎}·from·\"./ListHook\"`",{"range":"3997","text":"3998"},"Replace `'./image'` with `\"./image\"`",{"range":"3999","text":"4000"},"Replace `'./navigation'` with `\"./navigation\"`",{"range":"4001","text":"4002"},"Replace `'./table'` with `\"./table\"`",{"range":"4003","text":"4004"},"Replace `'./text'` with `\"./text\"`",{"range":"4005","text":"4006"},[724,741],"\"src/hooks/Toast\"",[768,803],"\"@fortawesome/fontawesome-svg-core\";",[824,859],"\"@fortawesome/free-solid-svg-icons\";",[868,906],"\"bootstrap/dist/css/bootstrap.min.css\"",[1606,1666],"\n path=\"/sceneFilenameParser\"\n component={SceneFilenameParser}\n ",[298,299],"",[49,66],"\"react-bootstrap\"",[171,215],"\n FindGalleriesQuery,\n FindGalleriesVariables\n",[524,525],[558,650],"\n result: QueryHookResult,\n filter: ListFilterModel\n ",[707,715],"\n return;\n ",[893,909]," margin: \"0 auto\" ",[1115,1124],"gallery",[1292,1362],"(\n \"\"\n ) : (\n undefined\n )",[1432,1491],"\n {gallery.path}\n ",[485,540],"\n _event: React.MouseEvent,\n obj: { index: number }\n ",[870,922],"file => ({\n src: file.path || \"\",\n caption: file.name\n ",[962,1031],"file => ({\n src: `${file.path}?thumb=true` || \"\",\n width: 1,\n height: 1\n ",[107,142],"\"@fortawesome/fontawesome-svg-core\"",[174,198],"\"react-router-bootstrap\"",[276,299],"\"src/components/Shared\";",[325,327],[341,343],[361,363],[398,398]," ",[414,414]," ",[418,418],[441,441],[457,457],[475,475],[478,478],[480,482]," ",[507,507],[533,533],[551,551],[554,554],[556,558],[578,578],[597,597],[615,615],[618,618],[620,620],[645,645],[659,659],[680,680],[683,683],[685,685],[707,707],[722,724],[740,740],[743,743],[745,745],[762,764],[777,777],[792,792],[891,927],"\n location.pathname === \"/performers\"",[932,951]," ? \"/performers/new\"",[952,990]," : location.pathname === \"/studios\"",[999,1013],"\"/studios/new\"\n ",[1041,1060],"\n path === null ? (\n \"\"\n )",[1065,1065],[1095,1095],[1144,1144],[1161,1161],[1284,1286],[1432,1435],"i",[1818,1851]," exact={true}",[1868,1870],[1921,1923],[1943,1945],[115,149],"

    Page not found.

    ",[58,75],[335,343],[522,530],[555,555],[577,577],[585,595]," ",[624,624],[629,641]," ",[662,662],[703,713],[729,729],[734,734],[767,767],[824,824],[830,830],[847,847],[997,999],"\"\"",[1045,1047],[70,87],[168,179],"\"src/hooks\"",[549,587],"\n sprites,\n previews,\n markers,\n transcodes\n ",[743,857],"\n id=\"sprite-task\"\n checked={sprites}\n label=\"Sprites (for the scene scrubber)\"\n onChange={() => setSprites(!sprites)}\n ",[878,1027],"\n id=\"preview-task\"\n checked={previews}\n label=\"Previews (video previews which play when hovering over a scene)\"\n onChange={() => setPreviews(!previews)}\n ",[1048,1190],"\n id=\"marker-task\"\n checked={markers}\n label=\"Markers (20 second videos which begin at the given timecode)\"\n onChange={() => setMarkers(!markers)}\n ",[1211,1362],"\n id=\"transcode-task\"\n checked={transcodes}\n label=\"Transcodes (MP4 conversions of unsupported video formats)\"\n onChange={() => setTranscodes(!transcodes)}\n ",[1437,1445],"\n Generate\n ",[1495,1557],"\n Generate supporting image, sprite, video, vtt and other files.\n ",[94,111],[233,244],[268,291],"\"src/components/Shared\"",[1114,1115],[1137,1137],[2421,2441],"\n jobStatus.refetch();\n ",[2591,2618],"\"Import\", variant: \"danger\"",[2768,2827],"This will delete the database and\n re-import from",[2997,3017],[3165,3191],"\"Clean\", variant: \"danger\"",[3337,3458]," This will delete db information and\n generated content for all scenes that are no longer found in the\n ",[3593,3625],"\n useFileMetadata: useFileMetadata\n ",[3972,3972],";",[4370,4478],"\n id=\"stop\"\n variant=\"danger\"\n onClick={() =>\n StashService.queryStopJob().then(() => jobStatus.refetch())\n }\n >\n Stop\n ",[4579,4579],[4592,4592],[4637,4717],"status !== \"Idle\" ? (\n \n ) : (\n \"\"\n )",[4719,4719],[4739,4739],[5238,5242],"\n Scan\n ",[5294,5342],"\n Scan for new content and add it to the database.\n ",[5971,5979],"\n Auto Tag\n ",[6031,6067],"\n Auto-tag content based on filenames.\n ",[6355,6431],"\n id=\"clean\"\n variant=\"danger\"\n onClick={() => setIsCleanAlertOpen(true)}\n >\n Clean\n ",[6483,6571],"\n Check for missing files and remove them from the database. This is a\n destructive action.\n ",[6677,6795],"\n id=\"export\"\n type=\"submit\"\n onClick={() =>\n StashService.queryMetadataExport().then(() => {\n jobStatus.refetch();\n })\n }\n >\n Export\n ",[6847,6892],"\n Export the database content into JSON format.\n ",[6960,7039],"\n id=\"import\"\n variant=\"danger\"\n onClick={() => setIsImportAlertOpen(true)}\n >\n Import\n ",[7091,7148],"\n Import from exported JSON. This is a destructive action.\n ",[8,91],"\n Button,\n Form,\n Modal,\n Nav,\n Navbar,\n OverlayTrigger,\n Popover\n} from \"react-bootstrap\"",[725,780],"\n scraper: GQL.ListPerformerScrapersListPerformerScrapers\n ",[999,1007],[1036,1114]," variant=\"primary\" onClick={() => props.onToggleEdit()}",[1125,1126],[1250,1258],[1271,1342]," (\n \n )",[1424,1432],[1445,1529]," (\n \n )",[1595,1605],"\n return;",[1610,1610],"}\n ",[1621,1623],[1665,1675]," ",[1724,1807],"\n props.onDisplayScraperDialog &&\n props.onDisplayScraperDialog(s)\n }\n ",[2218,2218],[2257,2257],[2276,2283]," ))\n : \"\"",[2595,2603],[2649,2656],"\n \n Auto Tag\n \n );",[2824,2832],[3067,3129],"Scenes",[3340,3380]," show={isDeleteAlertOpen}",[3402,3461],"Are you sure you want to delete {name}?",[3558,3564],"\n Delete\n ",[3591,3662],"\n variant=\"secondary\"\n onClick={() => setIsDeleteAlertOpen(false)}\n >\n Cancel\n ",[3723,3724],[3742,3742],[3772,3772],[3791,3791],[4063,4063],[4070,4070],[106,123],[146,169],[249,249],[272,272],[317,317],[336,336],[453,488],"\n secondsToString(props.numericValue)\n ",[626,627],[880,881],[1064,1064],[1681,1711]," vertical={true}",[1728,1811]," disabled={props.disabled} onClick={() => increment()}",[1883,1966]," disabled={props.disabled} onClick={() => decrement()}",[2051,2051],[2226,2271]," onClick={() => onReset()}",[2330,2330],[2493,2494],[2682,2702],"maybeRenderReset()",[2715,2732],"renderButtons()",[2804,2804],[22,39],[117,182],"\n PerformerDataFragment,\n SceneMarkerDataFragment,\n TagDataFragment\n",[916,941],"\n props.marker.seconds || 0\n ",[971,1029]," className=\"tag-item\" variant=\"secondary\"",[24,41],[314,322],[1532,1554],"{!data || loading ? (",[1555,1557],[1628,1630],[1674,1706]," \n ) : (\n undefined\n )",[21,38],[298,327]," className=\"col-4\"",[439,483]," backgroundImage: `url(${studio.image_path})` ",[570,603],"{studio.name}",[89,129],"\n FindStudiosQuery,\n FindStudiosVariables\n",[476,477],[510,598],"\n result: QueryHookResult,\n filter: ListFilterModel\n ",[653,661],[808,867],"studio => (\n \n ",[527,588],"\n item: GQL.SlimSceneDataFragment | GQL.SceneMarkerDataFragment\n ",[662,683],"\n props: IWallItemProps\n",[1107,1130],"\n resetOnMouseLeave: true\n ",[1161,1258],"\n !!config.data && !!config.data.configuration\n ? config.data.configuration.interface.wallShowTitle\n ",[1922,1930],[2585,2589],"\"10\"",[2604,2604],[2671,2673],[2799,2889],"\n `${props.sceneMarker!.title} - ${TextUtils.secondsToTimestamp(\n props.sceneMarker.seconds\n )}`\n ",[2942,2988],"tag => (\n {tag.name}\n ",[3015,3103],"\n \n {props.sceneMarker.primary_tag.name}\n \n ",[3664,3696],"\n className.push(\"double-scale\");\n ",[3763,3801],"\n style.transformOrigin = props.origin;\n ",[4328,4343]," display: \"none\" ",[4466,4550],"\n alt=\"Preview\"\n src={previewPath || screenshotPath}\n onError={() => previewNotFound()}\n ",[4584,4584]," (",[4673,4689]," lineHeight: 1 }}>{title}
    ",[4704,4712],"{tags",[4714,4716],[4745,4755],") : (",[4768,4779],[4790,4790],")",[307,368],[444,466],"\n props: IWallPanelProps\n",[867,881],"\n return \"top\";\n ",[906,925],"\n return \"top left\";\n ",[1004,1024],"\n return \"top right\";\n ",[1053,1067],[1130,1153],"\n return \"bottom right\";\n ",[1205,1227],"\n return \"bottom left\";\n ",[1292,1309],"\n return \"bottom\";\n ",[1369,1386],[1433,1455],"\n return \"center left\";\n ",[1476,1499],"\n return \"center right\";\n ",[1598,1606],[2020,2028],[145,162],"\"react-bootstrap\";",[184,207],[281,307],"\n Criterion,\n CriterionType\n",[1080,1102],"\n props: IAddFilterProps\n",[1129,1152]," = useRef\n ",[2671,2758],"\n criterion.options &&\n (value === undefined || value === \"\" || typeof value === \"number\")\n ",[3034,3067],"\n ? props.editingCriterion.getId()\n ",[3368,3376],[3463,3471],"\n return;\n ",[3662,3663],[3700,3702],[3944,4043],"\n criterion.modifier === CriterionModifier.IsNull ||\n criterion.modifier === CriterionModifier.NotNull\n ",[4559,4634],"items =>\n (criterion.value = items.map(i => ({ id: i.id, label: i.name! })))\n ",[5018,5019],[5048,5066]," ",[5404,5404],[5471,5509],"{renderModifier()}",[5543,5579],"{renderSelect()}",[5688,5696],[5909,5909],"\n ",[5922,5923],[5964,5966],[6316,6388]," onClick={() => onToggle()} active={isOpen}",[6478,6508]," show={isOpen}",[6873,6880],"\n {title}\n ",[113,206],"\n Badge,\n Button,\n ButtonGroup,\n Dropdown,\n Form,\n OverlayTrigger,\n Tooltip\n} from \"react-bootstrap\"",[230,253],[1283,1306],"\n props: IListFilterProps\n",[1441,1441],"\n ",[1529,1550],"\n Criterion | undefined\n ",[2579,2587],[2820,2828],[2949,2957],"option",[3022,3030],"\n {option}\n ",[3198,3198],"\n ",[3248,3248],[3294,3294],[3425,3425],[3471,3471],[3517,3517],[3594,3602],[3629,3703],"\n overlay={\n {getLabel(option)}\n }\n ",[4029,4040],"criterion",[4617,4688],"(\n onSelectAll()}>Select All\n )",[4776,4849],"(\n onSelectNone()}>\n Select None\n \n )",[4907,4962],"renderSelectAll(), renderSelectNone()",[5035,5038],"o",[5065,5124],"\n {o.text}\n ",[5409,5442],"{options}",[5524,5525],[5848,5898],"\n onChangeZoom(Number.parseInt(event.target.value))\n ",[5913,5913],[6430,6490],"PAGE_SIZE_OPTIONS.map(s => (\n \n ))",[6773,6828],"{renderSortByOptions()}",[6897,6897],"\n ",[6908,7026]," \n {props.filter.sortDirection === \"asc\"\n ? \"Ascending\"\n : \"Descending\"}\n ",[7049,7050]," }\n ",[7128,7200],"\n icon={\n props.filter.sortDirection === \"asc\"\n ? \"caret-up\"\n : \"caret-down\"\n }\n ",[7682,7720],"{renderMore()}",[7762,7835],"\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n margin: \"10px auto\"\n }}\n ",[63,80],[366,400],"\n IPaginationProps,\n IPaginationState\n",[540,541],[726,732],[749,849],"\n this.props.totalItems !== prevProps.totalItems ||\n this.props.itemsPerPage !== prevProps.itemsPerPage\n ",[1003,1016],"\n return null;\n ",[1199,1204],"\n First\n ",[1356,1364],"\n Previous\n ",[1571,1575],"\n Next\n ",[1742,1746],"\n Last\n ",[2021,2027],"\n {page}\n ",[2141,2149],[2195,2247],"\n this.props.totalItems,\n page,\n this.props.itemsPerPage\n ",[2270,2280],"\n page = 1;\n ",[2322,2352],"\n page = pagerState.totalPages;\n ",[2407,2438],"\n this.props.onChangePage(page);\n ",[2470,2527],"\n totalItems: number,\n currentPage: number,\n pageSize: number\n ",[3218,3277],"endPage + 1 - startPage).keys()].map(\n i => startPage + i\n ",[3323,3324],[48,65],[369,395],"\n props: IPerformerCardProps\n",[516,559],"\n props.ageFromDate ? \" in this scene.\" : \".\"\n ",[650,658],[671,758],"
    FAVORITE
    ",[930,983]," backgroundImage: `url(${props.performer.image_path})` ",[1121,1163],"{props.performer.name}",[1215,1217],[1233,1345],"\n Stars in {props.performer.scene_count}{\" \"}\n \n scenes\n \n ",[132,150],"\"react-router-dom\"",[160,206],"\n FindPerformersQuery,\n FindPerformersVariables\n",[742,743],[850,851],[886,980],"\n result: QueryHookResult,\n filter: ListFilterModel\n ",[1352,1481],"\n singleResult &&\n singleResult.data &&\n singleResult.data.findPerformers &&\n singleResult.data.findPerformers.performers.length === 1\n ",[1719,1743],"\n filter: ListFilterModel\n ",[1801,1809],[1962,2012],"p => (\n \n ",[2111,2183],"(\n \n )",[57,74],[189,212],[407,445],"\n props: IPerformerListTableProps\n) => {",[491,492],[553,561],[721,722],[1007,1008],[1151,1151],"\n ",[1159,1159],[1204,1205],[1264,1264],[1269,1334]," {renderPerformerImage(performer)}",[1340,1377]," {performer.name}",[1525,1525],[1543,1543],[1565,1633]," {performer.aliases ? performer.aliases : \"\"}",[1647,1708]," {maybeRenderFavoriteHeart(performer)}",[1714,1722]," ",[1727,1727],[1804,1804],[1847,1847],[1855,1863],[1877,1922]," {performer.birthdate}",[1928,1978]," {performer.height}",[1984,1990],[2011,2011],[2035,2035],[2068,2068],[2101,2101],[2119,2119],[2124,2144]," {props.performers.map(renderPerformerRow)}",[2443,2449],[2458,2458],[2485,2486],[49,131],"\n Button,\n ButtonGroup,\n Card,\n Form,\n Popover,\n OverlayTrigger\n} from \"react-bootstrap\"",[189,201],"\"classnames\"",[382,405],[595,616],": boolean, shiftKey",[692,714],"\n props: ISceneCardProps\n",[857,881],"\n resetOnMouseLeave: false\n ",[962,1062],"\n !!config.data && !!config.data.configuration\n ? config.data.configuration.interface.showStudioAsText\n ",[1142,1150],[1176,1265],"\n className={`rating-banner ${\n props.scene.rating ? `rating-${props.scene.rating}` : \"\"\n }`}\n ",[1467,1566],"(\n \n {\" \"}\n {TextUtils.resolution(props.scene.file.height)}\n \n ) : (\n \"\"\n )",[1619,1713],"\n props.scene.file.duration >= 1\n ? TextUtils.secondsToTimestamp(props.scene.file.duration)\n : \"\"",[1813,1819],[1932,1933],[2125,2209]," to={`/studios/${props.scene.studio.id}`} style={style}",[2349,2355],[2429,2457],"props.scene.tags.map(tag",[2518,2519],[2864,2870],[2950,2999],"props.scene.performers.map(performer",[3005,3007],[3026,3040],[3096,3098],[3104,3122],[3157,3159],[3235,3292],"style={{ backgroundImage: `url(${performer.image_path})` ",[3309,3318],"/",[3320,3322],[3401,3403],[3410,3412],[3433,3446],"})",[3761,3815],"if (props.scene.scene_markers.length <= 0)",[3892,3932],"props.scene.scene_markers.map(marker",[4101,4102],[4417,4417],[4448,4450],[4493,4537]," props.scene.scene_markers.length > 0\n ",[5480,5480],[5736,5791],"\n shiftKey = event.shiftKey;\n event.stopPropagation();\n }",[5813,5911],"\n to={`/scenes/${props.scene.id}`}\n className={cx(\"image\", \"previewable\", { portrait: isPortrait() })}\n ",[6140,6174],"\"preview\", { portrait: isPortrait() ",[6503,6523],"\n ? props.scene.title\n ",[337,361],"\n props: ISceneDetailProps\n",[458,466],[657,665],[706,711],"tag",[869,869],[958,978],"\n ? props.scene.title\n ",[1095,1097],[1167,1169],[1204,1277],"(\n
    Resolution: {TextUtils.resolution(props.scene.file.height)}
    \n ) : (\n \"\"\n )",[49,66],[302,333],"\n props: ISceneFileInfoPanelProps\n",[568,637],"\n \n {\"file://\" + props.scene.path}\n {\" \"}\n ",[756,821],"\n {props.scene.paths.stream}{\" \"}\n ",[928,936],[1169,1177],[1411,1419],[1486,1538],"\n {props.scene.file.width} x {props.scene.file.height}\n ",[1650,1658],[1879,1887],[2112,2120],[2333,2341],[2547,2555],[300,325],"\n IScenePerformerPanelProps\n",[412,423],"performer",[447,519],"\n key={performer.id}\n performer={performer}\n ageFromDate={props.scene.date}\n ",[576,599],"{cards}",[132,150],[160,221],"\n FindScenesQuery,\n FindScenesVariables,\n SlimSceneDataFragment\n",[844,845],[1031,1117],"\n result: QueryHookResult,\n filter: ListFilterModel\n ",[1510,1627],"\n singleResult &&\n singleResult.data &&\n singleResult.data.findScenes &&\n singleResult.data.findScenes.scenes.length === 1\n ",[1849,1936],"\n result: QueryHookResult,\n selectedIds: Set\n ",[2034,2052],"\n return undefined;\n ",[2127,2128],[2184,2188],"id",[2224,2231],"scene",[2380,2463]," {\n return;\n }}\n ",[2515,2589],"\n scene: SlimSceneDataFragment,\n selectedIds: Set,\n zoomIndex: number\n ",[2811,2865],"\n listData.onSelectChange(scene.id, selected, shiftKey)\n ",[2881,2881],[2912,3043],"\n result: QueryHookResult,\n filter: ListFilterModel,\n selectedIds: Set,\n zoomIndex: number\n ",[3097,3105],[3250,3307],"scene =>\n renderSceneCard(scene, selectedIds, zoomIndex)\n ",[3459,3459],[605,607],[618,622],[633,635],[650,652],[664,664],[719,755],"\n IScenePlayerProps,\n IScenePlayerState\n",[1143,1162]," scrubberPosition: 0 ",[1366,1368],[1426,1428],[1447,1449],[1464,1468],[1524,1528],[1565,1577],[1598,1602],[1633,1645],[1678,1682],[1703,1713]," ",[1716,1718],[1792,1824],"\n ? this.player.getPlaybackRate()\n ",[1893,1894],[1957,1989],[2058,2059],[2073,2108],"\n this.player.setPlaybackRate(1);\n }",[2122,2199],"\n this.player.getState().paused ? this.player.play() : this.player.pause();\n }",[2244,2258],"\n this.onReset();\n ",[2278,2295],"\n this.onDecrease();\n ",[2315,2332],"\n this.onIncrease();\n ",[2353,2367],"\n this.onPause();\n ",[2372,2372],[2901,2941],"\n ? this.props.config.maximumLoopDuration\n ",[2957,3041]," (\n !!scene.file.duration &&\n !!maxLoopDuration &&\n scene.file.duration < maxLoopDuration\n )",[3139,3150],"\n return {};\n ",[3290,3341],"\n | ((seekToPosition: number, _videoTag: any) => void)\n ",[3394,3423],"\n | ((_videoTag: any) => number)\n ",[3710,3771],"\n this.props.scene.paths.stream + \"?start=\" + seekToPosition",[3953,3953],[4133,4134],[4224,4225],[4235,4236],[4337,4338],[4404,4427],"\n this.props.autoplay ||\n ",[4983,5009]," scrubberPosition: position ",[5258,5284],[5501,5525],"\n props: IScenePlayerProps\n",[5532,5534],[5587,5723],"return (\n goBack()}\n >\n <\n ",[10202,10244],"{renderTags()}",[10339,10422],"\n className=\"scrubber-button\"\n id=\"scrubber-forward\"\n onClick={() => goForward()}\n >\n >\n ",[12,18],[298,304],[620,621],[640,733],"",[781,805],"\n return \"main-jwplayer\";\n ",[72,88],"\"apollo-link-ws\"",[120,143],"\"apollo-cache-inmemory\"",[1225,1226],[1341,1342],[1485,1538],"\"OperationDefinition\" && operation === \"subscription\"",[1577,1578],[1945,1946],[2249,2249],"\n ",[2289,2289],[2318,2328]," })\n ",[2548,2549],[2557,2558],[3052,3053],[3061,3062],[3396,3397],[3942,3943],[3951,3952],[4335,4336],[4506,4507],[4515,4516],[5038,5039],[5047,5048],[5414,5415],[5481,5527],"\n return GQL.useFindGallery({ variables: { id } });\n ",[5572,5616],"\n return GQL.useFindScene({ variables: { id } });\n ",[5745,5766]," variables: { id }, skip ",[5894,5915],[6648,6649],[6700,6763],"\n variables: { scraper_id: scraperId, query: q },\n skip: q === \"\"\n ",[6806,6869],"\n scraperId: string,\n scrapedPerformer: GQL.ScrapedPerformerInput\n ",[6873,6983]," return GQL.useScrapePerformer({\n variables: { scraper_id: scraperId, scraped_performer: scrapedPerformer }\n ",[7133,7195],"\n return GQL.useScrapeFreeonesPerformers({ variables: { q } });\n ",[7234,7265],"\n return GQL.useMarkerStrings();\n ",[7298,7323],"\n return GQL.useAllTags();\n ",[7365,7399],"\n return GQL.useAllTagsForFilter();\n ",[7447,7487],"\n return GQL.useAllPerformersForFilter();\n ",[7532,7569],"\n return GQL.useAllStudiosForFilter();\n ",[7675,7705]," variables: { scene_id: sceneId } ",[7741,7764],"\n return GQL.useStats();\n ",[7797,7822],"\n return GQL.useVersion();\n ",[7862,7893],"\n return GQL.useConfiguration();\n ",[7943,7994],"\n return GQL.useDirectories({ variables: { path } });\n ",[8291,8368],"\n StashService.invalidateQueries(\n StashService.performerMutationImpactedQueries\n ",[8531,8608],[8774,8851],[9208,9281],"\n StashService.invalidateQueries(\n StashService.sceneMutationImpactedQueries\n ",[9717,9794],"\n StashService.invalidateQueries(\n StashService.sceneBulkMutationImpactedQueries\n ",[9925,9935],": input } ",[10084,10157],[10423,10497],"\n StashService.invalidateQueries(\n StashService.studioMutationImpactedQueries\n ",[10652,10726],[10884,10958],[11271,11272],[11544,11545],[11747,11747],"\n ",[11938,11994],"\n variables: { input },\n refetchQueries: [\"Configuration\"]\n ",[12115,12171],[12415,12425],"\"no-cache\"",[12521,12531],[12702,12703],[12939,12940],[12948,12949],[13000,13062],[13266,13267],[13275,13276],[13493,13494],[13502,13503],[13708,13709],[13717,13718],[13765,13811],"\n scraperId: string,\n scene: GQL.SceneUpdateInput\n ",[13984,13985],[13993,13994],[14236,14237],[14491,14492],[14750,14751],[14940,14941],[15133,15134],[15326,15327],[15546,15562]," filter: filter }",[15617,15673],"\n filter: GQL.FindFilterType,\n config: GQL.SceneParserInput\n ",[15810,15840]," filter: filter, config: config ",[15876,15877],[123,124],[417,445],"\n IInterfaceConfig | undefined\n",[660,661],[1614,1654]," data: json, setData: setJson, error: err ",[448,479],"\n options: IVideoHoverHookOptions\n ",[726,824],"\n !!config.data && !!config.data.configuration\n ? config.data.configuration.interface.soundOnPreview\n ",[918,926],[1138,1163],"(isPlaying.current = false)",[1269,1277],[1366,1405]," videoEl, isPlaying, isHovering, options ",[1571,1579],[1664,1671],"error",[1893,1901],[335,336],[466,501],",\n document.getElementById(\"root\")\n",[149,187],"| \"none\"\n | \"rating\"\n | \"resolution\"",[190,202],"| \"favorite\"",[205,320],"| \"hasMarkers\"\n | \"isMissing\"\n | \"tags\"\n | \"sceneTags\"\n | \"performers\"\n | \"studios\"\n | \"birth_year\"\n | \"age\"",[322,336]," | \"ethnicity\"",[338,434]," | \"country\"\n | \"eye_color\"\n | \"height\"\n | \"measurements\"\n | \"fake_tits\"\n | \"career_length\"",[437,466],"| \"tattoos\"\n | \"piercings\"\n |",[643,643],[679,679],[721,721],[765,765],[809,809],[855,855],[895,895],[934,934],[980,980],[1023,1023],[1066,1066],[1105,1105],[1143,1143],[1185,1185],[1227,1227],[1268,1268],[1312,1312],[1359,1359],[1407,1407],[1453,1453],[1495,1495],[1537,1537],[1601,1655],"\n modifier: CriterionModifier = CriterionModifier.Equals\n ",[1734,1791],"\n return { value: CriterionModifier.Equals, label: \"Equals\" ",[1833,1897],"\n return { value: CriterionModifier.NotEquals, label: \"Not Equals\" ",[1941,2009],"\n return { value: CriterionModifier.GreaterThan, label: \"Greater Than\" ",[2050,2112],"\n return { value: CriterionModifier.LessThan, label: \"Less Than\" ",[2151,2209],"\n return { value: CriterionModifier.IsNull, label: \"Is NULL\" ",[2249,2309],"\n return { value: CriterionModifier.NotNull, label: \"Not NULL\" ",[2353,2421],"\n return { value: CriterionModifier.IncludesAll, label: \"Includes All\" ",[2462,2523],"\n return { value: CriterionModifier.Includes, label: \"Includes\" ",[2564,2625],"\n return { value: CriterionModifier.Excludes, label: \"Excludes\" ",[3078,3101],"\n modifierString = \"is\";\n ",[3148,3175],"\n modifierString = \"is not\";\n ",[3224,3260],"\n modifierString = \"is greater than\";\n ",[3306,3339],"\n modifierString = \"is less than\";\n ",[3383,3411],"\n modifierString = \"is null\";\n ",[3456,3488],"\n modifierString = \"is not null\";\n ",[3534,3563],"\n modifierString = \"includes\";\n ",[3612,3645],"\n modifierString = \"includes all\";\n ",[3691,3720],"\n modifierString = \"excludes\";\n ",[3742,3742],[3808,3897],"\n this.modifier === CriterionModifier.IsNull ||\n this.modifier === CriterionModifier.NotNull\n ",[4106,4112],"item",[4957,4974],": string, value",[5488,5489],[5583,5634],": CriterionType, parameterName?: string, options?",[6435,6436],[6529,6580],[72,123]," Criterion, CriterionType, ICriterionOption ",[72,123],[72,123],[412,469],"\n \"title\",\n \"url\",\n \"date\",\n \"gallery\",\n \"studio\",\n \"performers\"\n ",[72,123],[111,162],[702,703],[72,123],[210,210],"\n ",[760,761],[72,123],[214,214],[111,162],[626,627],[162,213],[281,322],"\n GQL.AllTagsForFilterAllTags,\n ILabeledId[]\n",[652,653],[8,30]," CriterionModifier ",[75,135],"\n Criterion,\n CriterionType,\n StringCriterion,\n NumberCriterion\n",[679,679],"\n ",[726,726],[779,779],[834,834],[889,889],[945,945],[995,995],[1051,1051],[1113,1113],[1167,1167],[1239,1247],[1290,1292],[1359,1361],[1385,1395],[1450,1452],[1526,1528],[1588,1598],[1660,1662],[1665,1667],[171,172],[218,313],"\n Criterion,\n ICriterionOption,\n CriterionType,\n CriterionOption,\n NumberCriterion,\n StringCriterion\n",[352,396],"\n FavoriteCriterion,\n FavoriteCriterionOption\n",[434,482],"\n HasMarkersCriterion,\n HasMarkersCriterionOption\n",[523,569],"\n IsMissingCriterion,\n IsMissingCriterionOption\n",[664,712],"\n PerformersCriterion,\n PerformersCriterionOption\n",[828,876],"\n ResolutionCriterion,\n ResolutionCriterionOption\n",[995,1057],"\n SceneTagsCriterionOption,\n TagsCriterion,\n TagsCriterionOption\n",[1140,1170]," DisplayMode, FilterMode ",[1998,2020],"\n this.sortBy = \"date\";\n ",[2053,2144],"\n \"title\",\n \"path\",\n \"rating\",\n \"date\",\n \"filesize\",\n \"duration\",\n \"framerate\",\n \"bitrate\",\n \"random\"\n ",[2265,2266],[2634,2635],[2734,2756],"\n this.sortBy = \"name\";\n ",[2872,2937],"DisplayMode.Grid, DisplayMode.List",[2967,2968],[3037,3038],[3483,3528],"\n numberCriteria.concat(stringCriteria).map(c",[3534,3534],[3598,3608],[3695,3717],[3810,3847],"DisplayMode.Grid",[3883,3929],"new NoneCriterionOption()",[4018,4040],"\n this.sortBy = \"path\";\n ",[4117,4154],"DisplayMode.List",[4190,4236],[4328,4351],"\n this.sortBy = \"title\";\n ",[4384,4445],"\n \"title\",\n \"seconds\",\n \"scene_id\",\n \"random\",\n \"scenes_updated_at\"\n ",[4483,4520],"DisplayMode.Wall",[4714,4715],[4861,4907],[4970,5017],"\n this.displayMode = this.displayModeOptions[0];\n ",[5104,5120]," (rawParms)",[6393,6404],[6902,6903],[6953,6966]," encode: false ",[7258,7337],"\n this.sortDirection === \"asc\"\n ? SortDirectionEnum.Asc\n : SortDirectionEnum.Desc",[7461,7473],"(criterion",[7620,7675],"\n value: ratingCrit.value,\n modifier: ratingCrit.modifier\n ",[7811,7851],"\n result.resolution = ResolutionEnum.Low;\n ",[7883,7928],"\n result.resolution = ResolutionEnum.Standard;\n ",[7960,8007],"\n result.resolution = ResolutionEnum.StandardHd;\n ",[8040,8083],"\n result.resolution = ResolutionEnum.FullHd;\n ",[8113,8155],"\n result.resolution = ResolutionEnum.FourK;\n ",[8534,8606],"\n value: tagsCrit.value.map(tag => tag.id),\n modifier: tagsCrit.modifier\n ",[8746,8820],"\n value: perfCrit.value.map(perf => perf.id),\n modifier: perfCrit.modifier\n ",[8951,9029],"\n value: studCrit.value.map(studio => studio.id),\n modifier: studCrit.modifier\n ",[9214,9225],[9323,9323],"\n ",[9505,9552],"\n value: byCrit.value,\n modifier: byCrit.modifier\n ",[9855,9904],"\n value: ethCrit.value,\n modifier: ethCrit.modifier\n ",[10035,10088],"\n value: cntryCrit.value,\n modifier: cntryCrit.modifier\n ",[10574,10619],"\n value: mCrit.value,\n modifier: mCrit.modifier\n ",[10938,10985],"\n value: clCrit.value,\n modifier: clCrit.modifier\n ",[11696,11707],[11846,11918],[12056,12138],"\n value: sceneTagsCrit.value.map(tag => tag.id),\n modifier: sceneTagsCrit.modifier\n ",[12284,12380],"\n value: performersCrit.value.map(performer => performer.id),\n modifier: performersCrit.modifier\n ",[48,49],[140,141],[890,891],[897,898],[1377,1378],[2320,2321],[2599,2613],"registration",[3338,3339],[3976,3984],"(error",[4242,4252],"response",[4654,4669],"(registration",[5019,5020],[5149,5163],[430,475],"\n performer: Partial\n",[502,506],[644,718],"\n { id: performer.id, label: performer.name || `Performer ${performer.id}` }\n ",[809,809],[903,907],[1042,1104],"\n { id: studio.id, label: studio.name || `Studio ${studio.id}` }\n ",[1195,1195],[1277,1281],[1560,1560],[1648,1652],[1945,1945],[1975,2024],"\n sceneMarker: Partial\n",[2075,2079],[2162,2162],[2295,2295],[15,67],"\"bytes\", \"kB\", \"MB\", \"GB\", \"TB\", \"PB\"",[89,146],"\n value?: string,\n limit: number = 100,\n tail: string = \"...\"\n",[166,170],[211,254]," ? value.substring(0, limit) + tail",[265,265],[398,402],[441,456],"bytes >= 1024",[553,553],[900,900],[970,974],[1038,1038],[1122,1126],[1324,1324],[1370,1463]," (birthdate.getMonth() >= fromDate.getMonth() &&\n birthdate.getDay() > fromDate.getDay())\n ",[1501,1501],[1636,1636],[2022,2022],[2142,2142],[18,25],"\"react\"",[59,91],"\"@fortawesome/react-fontawesome\"",[118,153],[149,159],"\"./Select\"",[194,202],"\"./Icon\"",[237,246],"\"./Modal\"",[282,303],"\"./DetailsEditNavbar\"",[335,352],"\"./DurationInput\"",[378,389],"\"./TagLink\"",[36,45],"\"./Toast\"",[87,102],"\"./LocalForage\"",[135,149],"\"./VideoHover\"",[159,267],"\n useScenesList,\n useSceneMarkersList,\n useGalleriesList,\n useStudiosList,\n usePerformersList\n} from \"./ListHook\"",[38,47],"\"./image\"",[85,99],"\"./navigation\"",[139,148],"\"./table\"",[187,195],"\"./text\""] \ No newline at end of file diff --git a/ui/v2.5/.eslintrc.json b/ui/v2.5/.eslintrc.json index fbbe988f84d..15855b8eca0 100644 --- a/ui/v2.5/.eslintrc.json +++ b/ui/v2.5/.eslintrc.json @@ -1,8 +1,41 @@ { + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.json" + }, + "plugins": ["@typescript-eslint"], "extends": [ - "react-app" + "airbnb-typescript", + "prettier", + "prettier/react", + "prettier/@typescript-eslint" ], "rules": { - "jsx-a11y/anchor-is-valid": "off" + "@typescript-eslint/explicit-function-return-type": "off", + "lines-between-class-members": "off", + "@typescript-eslint/interface-name-prefix": [ + "warn", + { "prefixWithI": "always" } + ], + "import/named": "off", + "import/namespace": "off", + "import/default": "off", + "import/no-named-as-default-member": "off", + "import/no-named-as-default": "off", + "import/no-cycle": "off", + "import/no-unused-modules": "off", + "import/no-deprecated": "off", + "import/no-unresolved": "off", + "import/prefer-default-export": "off", + "import/no-extraneous-dependencies": "off", + "indent": "off", + "@typescript-eslint/indent": "off", + "react/prop-types": "off", + "react/destructuring-assignment": "off", + "react/jsx-props-no-spreading": "off", + "spaced-comment": ["error", "always", { + "markers": ["/"] + }], + "max-classes-per-file": "off" } } diff --git a/ui/v2.5/.gitignore b/ui/v2.5/.gitignore index 4d29575de80..d7b8f1bd75d 100755 --- a/ui/v2.5/.gitignore +++ b/ui/v2.5/.gitignore @@ -21,3 +21,5 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +.eslintcache diff --git a/ui/v2.5/package.json b/ui/v2.5/package.json index 45e07e342fb..c608d826c34 100644 --- a/ui/v2.5/package.json +++ b/ui/v2.5/package.json @@ -43,9 +43,6 @@ "lint:fix": "eslint --fix src/**/*.{ts,tsx}", "gqlgen": "gql-gen --config codegen.yml" }, - "eslintConfig": { - "extends": "react-app" - }, "browserslist": [ ">0.2%", "not dead", @@ -65,13 +62,20 @@ "@types/react-router-dom": "5.1.3", "@types/react-select": "^3.0.8", "@types/video.js": "^7.2.11", + "@typescript-eslint/eslint-plugin": "^2.16.0", + "@typescript-eslint/parser": "^2.16.0", "eslint": "^6.7.2", + "eslint-config-airbnb-typescript": "^6.3.1", + "eslint-config-prettier": "^6.9.0", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-prettier": "^3.1.2", "graphql-code-generator": "0.18.2", "graphql-codegen-add": "0.18.2", "graphql-codegen-time": "0.18.2", "graphql-codegen-typescript-client": "0.18.2", "graphql-codegen-typescript-common": "0.18.2", "graphql-codegen-typescript-react-apollo": "0.18.2", + "prettier": "^1.19.1", "typescript": "~3.7.4" } } diff --git a/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx b/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx index 739f2b227e2..6e42bfdda6f 100644 --- a/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx +++ b/ui/v2.5/src/components/scenes/SceneDetails/SceneDetailPanel.tsx @@ -8,7 +8,7 @@ interface ISceneDetailProps { scene: GQL.SceneDataFragment; } -export const SceneDetailPanel: React.FC = (props: ISceneDetailProps) => { +export default SceneDetailPanel: React.FC = (props: ISceneDetailProps) => { function renderDetails() { if (!props.scene.details || props.scene.details === "") { return; } return ( diff --git a/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx b/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx index 3d0db0d1947..8665f4a0654 100644 --- a/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx +++ b/ui/v2.5/src/components/scenes/SceneDetails/SceneFileInfoPanel.tsx @@ -18,10 +18,11 @@ export const SceneFileInfoPanel: React.FC = (props: IS } function renderPath() { + const { scene: { path } } = props; return ( Path - {"file://"+props.scene.path} + {"file://"+props.scene.path} ); } diff --git a/ui/v2.5/yarn.lock b/ui/v2.5/yarn.lock index cc9857b85c2..dc58f9772be 100644 --- a/ui/v2.5/yarn.lock +++ b/ui/v2.5/yarn.lock @@ -1655,6 +1655,17 @@ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg== +"@typescript-eslint/eslint-plugin@^2.16.0": + version "2.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.16.0.tgz#bf339b7db824c7cc3fd1ebedbc88dd17016471af" + integrity sha512-TKWbeFAKRPrvKiR9GNxErQ8sELKqg1ZvXi6uho07mcKShBnCnqNpDQWP01FEvWKf0bxM2g7uQEI5MNjSNqvUpQ== + dependencies: + "@typescript-eslint/experimental-utils" "2.16.0" + eslint-utils "^1.4.3" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + "@typescript-eslint/eslint-plugin@^2.8.0": version "2.14.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.14.0.tgz#c74447400537d4eb7aae1e31879ab43e6c662a8a" @@ -1675,6 +1686,25 @@ "@typescript-eslint/typescript-estree" "2.14.0" eslint-scope "^5.0.0" +"@typescript-eslint/experimental-utils@2.16.0": + version "2.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.16.0.tgz#bba65685728c532e0ddc811a0376e8d38e671f77" + integrity sha512-bXTmAztXpqxliDKZgvWkl+5dHeRN+jqXVZ16peKKFzSXVzT6mz8kgBpHiVzEKO2NZ8OCU7dG61K9sRS/SkUUFQ== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.16.0" + eslint-scope "^5.0.0" + +"@typescript-eslint/parser@^2.16.0", "@typescript-eslint/parser@^2.3.0": + version "2.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.16.0.tgz#d0c0135a8fdb915f670802ddd7c1ba457c1b4f9d" + integrity sha512-+w8dMaYETM9v6il1yYYkApMSiwgnqXWJbXrA94LAWN603vXHACsZTirJduyeBOJjA9wT6xuXe5zZ1iCUzoxCfw== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.16.0" + "@typescript-eslint/typescript-estree" "2.16.0" + eslint-visitor-keys "^1.1.0" + "@typescript-eslint/parser@^2.8.0": version "2.14.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.14.0.tgz#30fa0523d86d74172a5e32274558404ba4262cd6" @@ -1698,6 +1728,19 @@ semver "^6.3.0" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@2.16.0": + version "2.16.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.16.0.tgz#b444943a76c716ed32abd08cbe96172d2ca0ab75" + integrity sha512-hyrCYjFHISos68Bk5KjUAXw0pP/455qq9nxqB1KkT67Pxjcfw+r6Yhcmqnp8etFL45UexCHUMrADHH7dI/m2WQ== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^6.3.0" + tsutils "^3.17.1" + "@videojs/http-streaming@1.10.6": version "1.10.6" resolved "https://registry.yarnpkg.com/@videojs/http-streaming/-/http-streaming-1.10.6.tgz#a9119b1828b354c5cc17b42ea051cc7bcce2dca0" @@ -3421,7 +3464,7 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -confusing-browser-globals@^1.0.9: +confusing-browser-globals@^1.0.7, confusing-browser-globals@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== @@ -4463,6 +4506,33 @@ escodegen@^1.11.0, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-config-airbnb-base@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz#8a7bcb9643d13c55df4dd7444f138bf4efa61e17" + integrity sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA== + dependencies: + confusing-browser-globals "^1.0.7" + object.assign "^4.1.0" + object.entries "^1.1.0" + +eslint-config-airbnb-typescript@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-6.3.1.tgz#28bd09099355324353a074a71951dd879cce7df0" + integrity sha512-+tkkVysaN63zXz+oiPfkfYSRMIY5QfHI4qFeyb1ZhRGF2jR6JslqDv5GkrW/eciySNTVTigFvf9hkqHT9vklJw== + dependencies: + "@typescript-eslint/parser" "^2.3.0" + eslint-config-airbnb "^18.0.1" + eslint-config-airbnb-base "^14.0.0" + +eslint-config-airbnb@^18.0.1: + version "18.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.0.1.tgz#a3a74cc29b46413b6096965025381df8fb908559" + integrity sha512-hLb/ccvW4grVhvd6CT83bECacc+s4Z3/AEyWQdIT2KeTsG9dR7nx1gs7Iw4tDmGKozCNHFn4yZmRm3Tgy+XxyQ== + dependencies: + eslint-config-airbnb-base "^14.0.0" + object.assign "^4.1.0" + object.entries "^1.1.0" + eslint-config-prettier@^6.9.0: version "6.9.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.9.0.tgz#430d24822e82f7deb1e22a435bfa3999fae4ad64" @@ -4528,7 +4598,7 @@ eslint-plugin-import@2.18.2: read-pkg-up "^2.0.0" resolve "^1.11.0" -eslint-plugin-jsx-a11y@6.2.3: +eslint-plugin-jsx-a11y@6.2.3, eslint-plugin-jsx-a11y@^6.2.3: version "6.2.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" integrity sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg== @@ -9676,6 +9746,11 @@ prettier@1.16.4: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717" integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g== +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + pretty-bytes@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" From c6d4718c05f9074405b7e7271b4e290e4ff2949e Mon Sep 17 00:00:00 2001 From: Infinite Date: Mon, 20 Jan 2020 21:25:47 +0100 Subject: [PATCH 11/67] Linting update --- ui/v2.5/.eslintrc.json | 10 +- ui/v2.5/src/App.tsx | 8 +- .../src/components/Galleries/Galleries.tsx | 2 +- .../src/components/Galleries/GalleryList.tsx | 4 +- ui/v2.5/src/components/MainNavbar.tsx | 4 +- .../Settings/SettingsConfigurationPanel.tsx | 3 +- .../Settings/SettingsInterfacePanel.tsx | 3 +- .../components/Settings/SettingsLogsPanel.tsx | 24 +-- .../SettingsTasksPanel/SettingsTasksPanel.tsx | 22 +-- .../components/Shared/DetailsEditNavbar.tsx | 18 +- .../src/components/Shared/DurationInput.tsx | 10 +- .../Shared/FolderSelect/FolderSelect.tsx | 4 +- .../src/components/Shared/HoverPopover.tsx | 57 ++++++ ui/v2.5/src/components/Shared/Modal.tsx | 2 +- ui/v2.5/src/components/Shared/Select.tsx | 48 +++-- ui/v2.5/src/components/Shared/index.ts | 1 + ui/v2.5/src/components/Stats.tsx | 2 +- .../Studios/StudioDetails/Studio.tsx | 10 +- ui/v2.5/src/components/Studios/StudioList.tsx | 4 +- ui/v2.5/src/components/Studios/Studios.tsx | 2 +- ui/v2.5/src/components/Tags/TagList.tsx | 2 +- ui/v2.5/src/components/Tags/Tags.tsx | 2 +- ui/v2.5/src/components/Wall/WallItem.tsx | 10 +- ui/v2.5/src/components/list/AddFilter.tsx | 18 +- ui/v2.5/src/components/list/ListFilter.tsx | 6 +- ui/v2.5/src/components/list/Pagination.tsx | 147 +++++---------- .../components/performers/PerformerCard.tsx | 2 +- .../performers/PerformerDetails/Performer.tsx | 13 +- .../components/performers/PerformerList.tsx | 16 +- .../performers/PerformerListTable.tsx | 4 +- .../src/components/performers/performers.tsx | 2 +- ui/v2.5/src/components/scenes/SceneCard.tsx | 104 ++++++----- .../components/scenes/SceneDetails/Scene.tsx | 10 +- .../scenes/SceneDetails/SceneDetailPanel.tsx | 4 +- .../scenes/SceneDetails/SceneEditPanel.tsx | 30 ++-- .../SceneDetails/SceneFileInfoPanel.tsx | 2 +- .../scenes/SceneDetails/SceneMarkersPanel.tsx | 12 +- .../components/scenes/SceneFilenameParser.tsx | 127 ++++++------- ui/v2.5/src/components/scenes/SceneList.tsx | 26 ++- .../src/components/scenes/SceneListTable.tsx | 3 +- .../src/components/scenes/SceneMarkerList.tsx | 10 +- .../scenes/ScenePlayer/ScenePlayer.tsx | 156 ++++++++-------- .../ScenePlayer/ScenePlayerScrubber.tsx | 49 +++-- .../scenes/SceneSelectedOptions.tsx | 98 +++++----- ui/v2.5/src/components/scenes/scenes.tsx | 4 +- ui/v2.5/src/core/StashService.ts | 29 +-- ui/v2.5/src/hooks/ListHook.tsx | 167 +++++++++--------- ui/v2.5/src/hooks/LocalForage.ts | 30 ++-- ui/v2.5/src/hooks/Toast.tsx | 1 + ui/v2.5/src/hooks/VideoHover.ts | 4 +- .../models/list-filter/criteria/criterion.ts | 8 +- .../src/models/list-filter/criteria/tags.ts | 9 +- .../src/models/list-filter/criteria/utils.ts | 6 +- ui/v2.5/src/models/list-filter/filter.ts | 72 +++++--- ui/v2.5/src/models/react-jw-player.d.ts | 2 +- ui/v2.5/src/serviceWorker.ts | 84 ++++----- ui/v2.5/src/utils/table.tsx | 2 +- ui/v2.5/src/utils/text.ts | 25 +-- 58 files changed, 793 insertions(+), 741 deletions(-) create mode 100644 ui/v2.5/src/components/Shared/HoverPopover.tsx diff --git a/ui/v2.5/.eslintrc.json b/ui/v2.5/.eslintrc.json index 15855b8eca0..6a0c9d332be 100644 --- a/ui/v2.5/.eslintrc.json +++ b/ui/v2.5/.eslintrc.json @@ -36,6 +36,14 @@ "spaced-comment": ["error", "always", { "markers": ["/"] }], - "max-classes-per-file": "off" + "max-classes-per-file": "off", + "no-plusplus": "off", + "prefer-destructuring": ["error", {"object": true, "array": false}], + "default-case": "off", + "consistent-return": "off", + "@typescript-eslint/no-use-before-define": ["error", { "functions": false, "classes": true }], + "no-underscore-dangle": "off", + "no-nested-ternary": "off", + "jsx-a11y/media-has-caption": "off" } } diff --git a/ui/v2.5/src/App.tsx b/ui/v2.5/src/App.tsx index 4b4b1a6e9ca..921917665c0 100755 --- a/ui/v2.5/src/App.tsx +++ b/ui/v2.5/src/App.tsx @@ -1,5 +1,8 @@ import React from "react"; import { Route, Switch } from "react-router-dom"; +import { ToastProvider } from 'src/hooks/Toast'; +import { library } from '@fortawesome/fontawesome-svg-core' +import { fas } from '@fortawesome/free-solid-svg-icons' import { ErrorBoundary } from "./components/ErrorBoundary"; import Galleries from "./components/Galleries/Galleries"; import { MainNavbar } from "./components/MainNavbar"; @@ -11,10 +14,7 @@ import { Stats } from "./components/Stats"; import Studios from "./components/Studios/Studios"; import Tags from "./components/Tags/Tags"; import { SceneFilenameParser } from "./components/scenes/SceneFilenameParser"; -import { ToastProvider } from 'src/hooks/Toast'; -import { library } from '@fortawesome/fontawesome-svg-core' -import { fas } from '@fortawesome/free-solid-svg-icons' import 'bootstrap/dist/css/bootstrap.min.css'; @@ -27,7 +27,7 @@ export const App: React.FC = () => (
    - + {/* */} diff --git a/ui/v2.5/src/components/Galleries/Galleries.tsx b/ui/v2.5/src/components/Galleries/Galleries.tsx index 51db624b592..aad72ddd5d1 100644 --- a/ui/v2.5/src/components/Galleries/Galleries.tsx +++ b/ui/v2.5/src/components/Galleries/Galleries.tsx @@ -5,7 +5,7 @@ import { GalleryList } from "./GalleryList"; const Galleries = () => ( - + ); diff --git a/ui/v2.5/src/components/Galleries/GalleryList.tsx b/ui/v2.5/src/components/Galleries/GalleryList.tsx index bbae430e377..3bd296472a2 100644 --- a/ui/v2.5/src/components/Galleries/GalleryList.tsx +++ b/ui/v2.5/src/components/Galleries/GalleryList.tsx @@ -16,7 +16,7 @@ export const GalleryList: React.FC = () => { if (!result.data || !result.data.findGalleries) { return; } if (filter.displayMode === DisplayMode.Grid) { return

    TODO

    ; - } else if (filter.displayMode === DisplayMode.List) { + } if (filter.displayMode === DisplayMode.List) { return ( @@ -39,7 +39,7 @@ export const GalleryList: React.FC = () => {
    ); - } else if (filter.displayMode === DisplayMode.Wall) { + } if (filter.displayMode === DisplayMode.Wall) { return

    TODO

    ; } } diff --git a/ui/v2.5/src/components/MainNavbar.tsx b/ui/v2.5/src/components/MainNavbar.tsx index 22e1f0eb922..5565770083b 100644 --- a/ui/v2.5/src/components/MainNavbar.tsx +++ b/ui/v2.5/src/components/MainNavbar.tsx @@ -69,7 +69,7 @@ export const MainNavbar: React.FC = () => { {menuItems.map((i) => ( @@ -83,7 +83,7 @@ export const MainNavbar: React.FC = () => {
    diff --git a/ui/v2.5/src/components/Shared/HoverPopover.tsx b/ui/v2.5/src/components/Shared/HoverPopover.tsx new file mode 100644 index 00000000000..566c6472003 --- /dev/null +++ b/ui/v2.5/src/components/Shared/HoverPopover.tsx @@ -0,0 +1,57 @@ +import React, { useState, useCallback, useEffect, useRef } from 'react' +import { Overlay, Popover, OverlayProps } from 'react-bootstrap' + +interface IHoverPopover { + enterDelay?: number; + leaveDelay?: number; + content: JSX.Element[] | JSX.Element | string; + className?: string; + placement?: OverlayProps["placement"]; +} + +export const HoverPopover: React.FC = ({ enterDelay = 0, leaveDelay = 400, content, children, className, placement = 'top' }) => { + const [show, setShow] = useState(false); + const triggerRef = useRef(null); + const enterTimer = useRef(); + const leaveTimer = useRef(); + + const handleMouseEnter = useCallback(() => { + window.clearTimeout(leaveTimer.current); + enterTimer.current = window.setTimeout(() => setShow(true), enterDelay); + }, [enterDelay]); + + const handleMouseLeave = useCallback(() => { + window.clearTimeout(enterTimer.current); + leaveTimer.current = window.setTimeout(() => setShow(false), leaveDelay); + }, [leaveDelay]); + + useEffect(() => ( + () => { + window.clearTimeout(enterTimer.current) + window.clearTimeout(leaveTimer.current) + } + ), []); + + return ( + <> +
    + {children} +
    + { triggerRef.current && + + + {content} + + + } + + ); +} diff --git a/ui/v2.5/src/components/Shared/Modal.tsx b/ui/v2.5/src/components/Shared/Modal.tsx index c1c489f5fd6..f90939b20c9 100644 --- a/ui/v2.5/src/components/Shared/Modal.tsx +++ b/ui/v2.5/src/components/Shared/Modal.tsx @@ -35,7 +35,7 @@ const ModalComponent: React.FC = ({ children, show, icon, header, cancel ? : '' } - { } +
    diff --git a/ui/v2.5/src/components/Shared/Select.tsx b/ui/v2.5/src/components/Shared/Select.tsx index 96b5f12798d..9dd474ac7ea 100644 --- a/ui/v2.5/src/components/Shared/Select.tsx +++ b/ui/v2.5/src/components/Shared/Select.tsx @@ -42,6 +42,12 @@ interface ISceneGallerySelect { sceneId: string; onSelect: (item: GQL.ValidGalleriesForSceneValidGalleriesForScene | undefined) => void; } + +const getSelectedValues = (selectedItems:ValueType