Full Code of ciderapp/Cider for AI

main 953bb5a9e260 cached
238 files
7.8 MB
2.1M tokens
6733 symbols
1 requests
Download .txt
Showing preview only (8,255K chars total). Download the full file or copy to clipboard to get everything.
Repository: ciderapp/Cider
Branch: main
Commit: 953bb5a9e260
Files: 238
Total size: 7.8 MB

Directory structure:
gitextract_auu_ugs8/

├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yaml
│   │   ├── config.yml
│   │   └── translation.yaml
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── translations.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── auto-project.yml
│       ├── cider-chores.yml
│       ├── dev-chores.yml
│       ├── stale-issues.yml
│       └── support-notice.yml
├── .gitignore
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .prettierrc
├── .yarnrc.yml
├── Assets/
│   ├── AppChromeBtn.afdesign
│   ├── Install On Cider/
│   │   └── install on cider.afdesign
│   ├── MissingArtwork.afdesign
│   └── Sources/
│       ├── Cider with text.afdesign
│       ├── Release.afdesign
│       ├── cider-vinyl no raster.afdesign
│       ├── cider-vinyl-no raster 2.afdesign
│       └── cider-vinyl.afdesign
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── docs/
│   └── plugins/
│       ├── example/
│       │   └── examplePlugin.ts
│       └── sendSongToTitlebar.ts
├── flatpak/
│   ├── cider-wrapper
│   ├── flathub.json
│   ├── org.cidercollective.cider.yml
│   ├── sh.cider.Cider.metainfo.xml
│   └── sh.cider.Cider.yml
├── msft-test.json
├── package.json
├── resources/
│   ├── afterPack.cjs
│   ├── bg.tiff
│   ├── entitlements.mac.plist
│   ├── icons/
│   │   ├── icon-old.icns
│   │   └── icon.icns
│   ├── license.json
│   ├── license.txt
│   ├── macPackager.cjs
│   ├── notarize.cjs
│   ├── verror-types
│   └── version.sh
├── src/
│   ├── ciderkit/
│   │   └── public.js
│   ├── main/
│   │   ├── base/
│   │   │   ├── app.ts
│   │   │   ├── browserwindow.ts
│   │   │   ├── castcontroller.ts
│   │   │   ├── castreceiver.ts
│   │   │   ├── plugins.ts
│   │   │   ├── store.ts
│   │   │   ├── utils.ts
│   │   │   ├── vcomponents.json
│   │   │   ├── vrouting.json
│   │   │   └── wsapi.ts
│   │   ├── index.ts
│   │   ├── plugins/
│   │   │   ├── chromecast.ts
│   │   │   ├── discordrpc.ts
│   │   │   ├── lastfm.ts
│   │   │   ├── menubar.ts
│   │   │   ├── mpris.ts
│   │   │   ├── playbackNotifications.ts
│   │   │   ├── raop.ts
│   │   │   ├── thumbar.ts
│   │   │   └── webNowPlaying.ts
│   │   └── providers/
│   │       └── local/
│   │           └── index.ts
│   ├── preload/
│   │   └── cider-preload.js
│   ├── renderer/
│   │   ├── apple-hls-old.js
│   │   ├── apple-hls.js
│   │   ├── assets/
│   │   │   └── fonts/
│   │   │       ├── Inter/
│   │   │       │   └── inter.css
│   │   │       └── Pretendard/
│   │   │           └── pretendardvariable.css
│   │   ├── audio/
│   │   │   ├── audio.js
│   │   │   └── cloud/
│   │   │       └── audio.js
│   │   ├── hlscider.js
│   │   ├── index.js
│   │   ├── less/
│   │   │   ├── ameframework.less
│   │   │   ├── appvars.less
│   │   │   ├── bootstrap-vue.min.less
│   │   │   ├── bootstrap.less
│   │   │   ├── codicon.css
│   │   │   ├── compact.less
│   │   │   ├── directives.less
│   │   │   ├── elements.less
│   │   │   ├── fullscreen.less
│   │   │   ├── helpers.css
│   │   │   ├── helpers.less
│   │   │   ├── linux.less
│   │   │   ├── macos.less
│   │   │   ├── macosemu.less
│   │   │   ├── miniplayer.less
│   │   │   ├── notyf.less
│   │   │   ├── pages.css
│   │   │   └── pages.less
│   │   ├── lib/
│   │   │   ├── fast-plural-rules.js
│   │   │   ├── less.js
│   │   │   ├── marked.js
│   │   │   ├── smoothscroll.js
│   │   │   ├── vue-horizontal.js
│   │   │   ├── vue.dev.js
│   │   │   └── vue.js
│   │   ├── main/
│   │   │   ├── app.js
│   │   │   ├── cidercache.js
│   │   │   ├── ciderfrontapi.js
│   │   │   ├── components/
│   │   │   │   ├── i18n-editor.js
│   │   │   │   ├── sidebar-library-item.js
│   │   │   │   └── svg-icon.js
│   │   │   ├── events.js
│   │   │   ├── gamepad.js
│   │   │   ├── html.js
│   │   │   ├── mica.js
│   │   │   ├── musickittools.js
│   │   │   ├── vueapp.js
│   │   │   ├── vuex-store.js
│   │   │   └── wsapi_interop.js
│   │   ├── sounds/
│   │   │   ├── btn1.ogg
│   │   │   ├── confirm.ogg
│   │   │   └── hover.ogg
│   │   ├── style.less
│   │   ├── sw.js
│   │   ├── themes/
│   │   │   ├── WIP.md
│   │   │   ├── compactui.less
│   │   │   ├── dark.less
│   │   │   ├── default.less
│   │   │   ├── grain.less
│   │   │   ├── inline_drawer.less
│   │   │   ├── reduce_visuals.less
│   │   │   └── sweetener.less
│   │   ├── todo.js
│   │   ├── views/
│   │   │   ├── app/
│   │   │   │   ├── app-navigation.ejs
│   │   │   │   ├── chrome-bottom.ejs
│   │   │   │   ├── chrome-top.ejs
│   │   │   │   └── panels.ejs
│   │   │   ├── components/
│   │   │   │   ├── add-to-playlist.ejs
│   │   │   │   ├── airplay-modal.ejs
│   │   │   │   ├── animatedartwork-view.ejs
│   │   │   │   ├── app-content.ejs
│   │   │   │   ├── artist-chip.ejs
│   │   │   │   ├── artwork-material.ejs
│   │   │   │   ├── audio-controls.ejs
│   │   │   │   ├── audio-playbackrate.ejs
│   │   │   │   ├── audio-settings.ejs
│   │   │   │   ├── c2-upgrade.ejs
│   │   │   │   ├── castmenu.ejs
│   │   │   │   ├── cider-modal.ejs
│   │   │   │   ├── editorialNotes.ejs
│   │   │   │   ├── equalizer.ejs
│   │   │   │   ├── fullscreen.ejs
│   │   │   │   ├── hello-world.ejs
│   │   │   │   ├── inline-collection-list.ejs
│   │   │   │   ├── karaoke-in.ejs
│   │   │   │   ├── libraryartist-item.ejs
│   │   │   │   ├── listennow-child.ejs
│   │   │   │   ├── listitem-horizontal.ejs
│   │   │   │   ├── lyrics-view.ejs
│   │   │   │   ├── mediaitem-artwork.ejs
│   │   │   │   ├── mediaitem-hrect.ejs
│   │   │   │   ├── mediaitem-info.ejs
│   │   │   │   ├── mediaitem-list-item.ejs
│   │   │   │   ├── mediaitem-mvview-sp.ejs
│   │   │   │   ├── mediaitem-mvview.ejs
│   │   │   │   ├── mediaitem-scroller-horizontal-large.ejs
│   │   │   │   ├── mediaitem-scroller-horizontal-mvview.ejs
│   │   │   │   ├── mediaitem-scroller-horizontal-sp.ejs
│   │   │   │   ├── mediaitem-scroller-horizontal.ejs
│   │   │   │   ├── mediaitem-square.ejs
│   │   │   │   ├── menu-panel.ejs
│   │   │   │   ├── miniplayer.ejs
│   │   │   │   ├── moreinfo-modal.ejs
│   │   │   │   ├── pagination.ejs
│   │   │   │   ├── pathmenu.ejs
│   │   │   │   ├── playlists.ejs
│   │   │   │   ├── plugin-menu.ejs
│   │   │   │   ├── qrcode-modal.ejs
│   │   │   │   ├── queue.ejs
│   │   │   │   ├── settings-keybinds.ejs
│   │   │   │   ├── settings-plugins-github.ejs
│   │   │   │   ├── settings-themes-github.ejs
│   │   │   │   ├── settings-themes.ejs
│   │   │   │   ├── settings-window.ejs
│   │   │   │   ├── share-sheet.ejs
│   │   │   │   ├── sidebar-playlist.ejs
│   │   │   │   ├── sidebar.ejs
│   │   │   │   └── smarthints.ejs
│   │   │   ├── main.ejs
│   │   │   └── pages/
│   │   │       ├── about.ejs
│   │   │       ├── apple-account-settings.ejs
│   │   │       ├── apple-curator.ejs
│   │   │       ├── artist-feed.ejs
│   │   │       ├── artist.ejs
│   │   │       ├── audiolabs.ejs
│   │   │       ├── browse.ejs
│   │   │       ├── charts.ejs
│   │   │       ├── cider-multiroom.ejs
│   │   │       ├── cider-playlist.ejs
│   │   │       ├── cider-profile.ejs
│   │   │       ├── collection-list.ejs
│   │   │       ├── connect-linked.ejs
│   │   │       ├── groupings.ejs
│   │   │       ├── home.ejs
│   │   │       ├── installed-themes.ejs
│   │   │       ├── library-albums.ejs
│   │   │       ├── library-artists.ejs
│   │   │       ├── library-recentlyadded.ejs
│   │   │       ├── library-songs.ejs
│   │   │       ├── library-videos.ejs
│   │   │       ├── listen_now.ejs
│   │   │       ├── madeforyou.ejs
│   │   │       ├── oobe.ejs
│   │   │       ├── playlist-inline.ejs
│   │   │       ├── plugin-renderer.ejs
│   │   │       ├── podcasts.ejs
│   │   │       ├── radio.ejs
│   │   │       ├── recordLabel.ejs
│   │   │       ├── remote-pair.ejs
│   │   │       ├── replay.ejs
│   │   │       ├── search.ejs
│   │   │       ├── themes-github.ejs
│   │   │       ├── webview.ejs
│   │   │       └── zoo.ejs
│   │   └── workbox-962786f2.js
│   └── web-remote/
│       ├── ciderframework.css
│       ├── index.js
│       ├── manifest.json
│       ├── style.css
│       ├── views/
│       │   ├── components/
│       │   │   ├── animatedartwork-view.ejs
│       │   │   ├── mediaitem-artwork.ejs
│       │   │   └── mediaitem-square.ejs
│       │   └── index.ejs
│       └── vue.js
├── steam-deck.json
├── tsconfig.json
├── winget.json
└── workbox-config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 2
trim_trailing_whitespace = true

[*.md]
trim_trailing_whitespace = false


================================================
FILE: .github/FUNDING.yml
================================================
github: ciderapp
ko_fi: cryptofyre
open_collective: ciderapp
custom: "https://opencollective.com/ciderapp/donate/10/month/Support%20Development?redirect=https://cidercollective.dev/thanks"


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yaml
================================================
name: Bug Report
description: If you encounter an issue whilst using our app, please use this template to help improve the app.
title: "[Bug]: "
labels: ["bug", "needs-triage"]
assignees: []
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this bug report!
  - type: checkboxes
    attributes:
      label: Preflight Checklist
      description: Please ensure you've completed all of the following.
      options:
        - label: I have read the [Support Disclaimer](https://docs.cider.sh/support/disclaimer) for this project.
          required: true
        - label: I agree to follow the [Code of Conduct](https://github.com/ciderapp/Cider/blob/main/CODE_OF_CONDUCT.md) that this project adheres to.
          required: true
        - label: I have searched the [issue tracker](https://www.github.com/ciderapp/Cider/issues) for a bug report that matches the one I want to file, without success.
          required: true
        - label: I have read the [troublshooting FAQs](https://cider.gitbook.io/welcome-to-gitbook/support/faqs#why-is-my-discordrpc-status-not-appearing) and none solved my issue.
          required: true
  - type: input
    attributes:
      label: Cider Version
      description: |
        What version of Cider are you using?
        
        Note: Please only report issues for [currently supported versions of Cider](hhttps://cider.gitbook.io/welcome-to-gitbook/support/version-information). You can find your version on the About Page.
      placeholder: 1.6.0
    validations:
      required: true
  - type: dropdown
    attributes:
      label: What operating system are you using?
      options:
        - Windows
        - macOS
        - Ubuntu
        - Other Linux
        - Other (specify below)
    validations:
      required: true
  - type: input
    attributes:
      label: Operating System Version
      description: What operating system version are you using? On Windows, click Start button > Settings > System > About. On macOS, click the Apple Menu > About This Mac. On Linux, use lsb_release or uname -a.
      placeholder: "e.g. Windows 10 version 1909, macOS Catalina 10.15.7, or Ubuntu 20.04"
    validations:
      required: true
  - type: dropdown
    id: download
    attributes:
      label: Where did you download Cider from?
      options:
        - Microsoft Store
        - GitHub
        - Winget
        - Winget (Nightly)
        - Chocolatey
        - Flathub
        - AUR
    validations:
      required: true
  - type: textarea
    id: description
    attributes:
      label: Describe the Bug
      description: A clear and concise description of the bug you encountered. Tell us what did you expect to happen?
      placeholder: Tell us what you see!
    validations:
      required: true
  - type: textarea
    id: replication
    attributes:
      label: Steps to Reproduce
      description: How did you produce this bug, tell us how you did it so we can do it ourselves.
      placeholder: 1. Clicked on...
    validations:
      required: true
  - type: textarea
    attributes:
      label: Anything else?
      description: |
        Links? References? Anything that will give us more context about the issue you are encountering!

        Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Support Disclaimer
    url: https://docs.cider.sh/support/disclaimer
    about: Please read this before creating any issue.
  - name: Feature Request
    url: https://github.com/ciderapp/Cider/discussions/new?category=feature-request
    about: Have a feature you would like to have in the app? Make a request.
  - name: Discord Support
    url: https://discord.com/invite/AppleMusic
    about: For quick support, make a ticket or ask for community support here.
  - name: Cider Documentation
    url: https://docs.cider.sh/support/faqs
    about: In most cases, these troubleshooting tips can resolve basic issues. Try them out before opening an issue.
  - name: GitHub Issues
    url: https://github.com/ciderapp/Cider/issues
    about: Check to make sure there is not an issues already open that is related to your issue.


================================================
FILE: .github/ISSUE_TEMPLATE/translation.yaml
================================================
name: Translation Report/Request
description: Request a language or report an issue with one.
title: "[Translation]: "
labels: ["🌐 Translations"]
assignees: []
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill out this report!
  - type: input
    id: language
    attributes:
      label: Relevant Language
      description: The language you would like to request for or have an issue with.
      placeholder: en_US
    validations:
      required: true
  - type: dropdown
    id: requestType
    attributes:
      label: Change or Addition or Both
      multiple: true
      options:
        - Change a Language
        - Add a Language
    validations:
      required: true
  - type: textarea
    id: description
    attributes:
      label: Change Requested / Any Additional Information
      description: If you are requesting a change, place all the information here, or you can provide additional information to additions if you want.
      placeholder: I would like ... changed to ...
    validations:
      required: false
  - type: checkboxes
    id: terms
    attributes:
      label: Code of Conduct
      description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/ciderapp/Cider/blob/main/CODE_OF_CONDUCT.md)
      options:
        - label: I agree to follow this project's Code of Conduct
          required: true


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/translations.md
================================================
---
name: Translations
about: Improvement to our tranlations
title: ""
labels: 🌐 Translations
assignees: ''
---




================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
  - package-ecosystem: "npm" # See documentation for possible values
    directory: "/" # Location of package manifests
    schedule:
      interval: "monthly"


================================================
FILE: .github/workflows/auto-project.yml
================================================
name: Add bugs to bugs project

on:
  issues:
    types:
      - opened

jobs:
  add-to-project:
    name: Add issue to project
    runs-on: ubuntu-latest
    steps:
      - uses: actions/add-to-project@main
        with:
          project-url: https://github.com/orgs/ciderapp/projects/5
          github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
          labeled: bug, needs-triage
          label-operator: OR


================================================
FILE: .github/workflows/cider-chores.yml
================================================
name: Cider Chores

on:
  push:
    branches:
      - main

jobs:
  compile-and-post:
    runs-on: ubuntu-latest

    container:
      image: electronuserland/builder:wine


    steps:
      - name: Checkout 🛎
        uses: actions/checkout@v4

      - uses: pnpm/action-setup@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version-file: '.nvmrc'

      - name: Install Dependencies 📦
        run: pnpm install

      - name: Build 🏗
        run: pnpm dist:all

      - name: Upload Release 🚀
        uses: softprops/action-gh-release@v2.0.5
        with:
          files: |
            ./dist/*.exe
            ./dist/*.deb
            ./dist/*.AppImage
            ./dist/*.rpm
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/dev-chores.yml
================================================
name: Developer Chores

on: [pull_request]

jobs:
    linter-check:
      runs-on: ${{ matrix.os }}

      strategy:
        matrix:
          os: [ubuntu-latest]
          node: [18]

      steps:
        - name: Checkout 🛎
          uses: actions/checkout@v3

        - name: Setup node env 🏗
          uses: actions/setup-node@v3
          with:
            node-version: ${{ matrix.node }}
            check-latest: true

        - name: Install dependencies 👨🏻‍💻
          run: npm run bootstrap

        - name: Run linter 👀
          run: npm run format:write

        - name: Comment Suggestions 🗒️
          uses: getsentry/action-git-diff-suggestions@main
          with:
            message: Prettier Suggestion


================================================
FILE: .github/workflows/stale-issues.yml
================================================
name: 'Close stale issues and PRs'
on:
  schedule:
    - cron: '30 1 * * *'

permissions:
  issues: write
  pull-requests: write

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v4
        with:
          stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 7 days.'
          days-before-stale: 30
          days-before-close: 7
          stale-issue-label: "stale"
          stale-pr-label: "stale"
          exempt-all-assignees: true
          exempt-issue-labels: 'more-info,work-in-progress,accessibility-feature,help-wanted,persist/priority'


================================================
FILE: .github/workflows/support-notice.yml
================================================
name: Support Notice

on:
  issues:
    types: [opened]

jobs:
  post-notice:
    runs-on: ubuntu-latest

    steps:
      - uses: derekprior/add-autoresponse@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          respondableId: ${{ github.event.issue.node_id }}
          response: "Cider 1.x is no longer actively maintained. We highly suggest moving to the newer version versions of the app available at https://cider.sh through official storefronts ex. Itch.io, or the Microsoft Store."
          author: ${{ github.event.issue.user.login }}


================================================
FILE: .gitignore
================================================
# Building
dist
build
.flatpak*
yarn-cache
src/renderer/style.css
.pnpm-store

# Misc
.idea
.vscode
auth.json
musickit.js

# Microsoft Store Package Configs
msft-package.json

## Node GitIgnore ##

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp
.cache

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v2
.pnp.*
.yarn/*
.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

## JetBrains GitIgnore ##

# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

# AWS User-specific
.idea/**/aws.xml

# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn.  Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# SonarLint plugin
.idea/sonarlint/

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser


## macOS GitIgnore ##

# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon


# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk


## VSCode GitIgnore ##

.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets

# Local History for Visual Studio Code
.history/

# Built Visual Studio Code Extensions
*.vsix

## Sublime Text GitIgnore ##

# Cache files for Sublime Text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache

# Workspace files are user-specific
*.sublime-workspace

# Project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using Sublime Text
# *.sublime-project

# SFTP configuration file
sftp-config.json
sftp-config-alt*.json

# Package control specific files
Package Control.last-run
Package Control.ca-list
Package Control.ca-bundle
Package Control.system-ca-bundle
Package Control.cache/
Package Control.ca-certs/
Package Control.merged-ca-bundle
Package Control.user-ca-bundle
oscrypto-ca-bundle.crt
bh_unicode_properties.cache

# Sublime-github package stores a github token in this file
# https://packagecontrol.io/packages/sublime-github
GitHub.sublime-settings

#Service Worker mappings
src/renderer/sw.js.map
src/renderer/workbox-962786f2.js.map
/src/renderer/musickit-dev.js

#Mac certs
*.p12
keys.sh

package-lock.json
resources/b64.txt


savedconfig/cider-config.json
savedconfig/config.json
savedconfig/session.json
savedconfig/window-state.json
src/main/base/sample.json

# yeet circleci ci for now
.circleci/


================================================
FILE: .npmrc
================================================
node-linker=hoisted
public-hoist-pattern=*
shamefully-hoist=true


================================================
FILE: .nvmrc
================================================
20.2.0


================================================
FILE: .prettierignore
================================================
src/renderer/*hls*.js
build/*
dist/*
src/renderer/lib/*
*.min.*
.pnpm-store


================================================
FILE: .prettierrc
================================================
{
  "printWidth": 600,
  "singleAttributePerLine": true,
  "bracketSameLine": true,
  "overrides": [
    {
      "files": "src/renderer/main/**/*.js",
      "options": {
        "singleAttributePerLine": false
      }
    }
  ]
}


================================================
FILE: .yarnrc.yml
================================================
compressionLevel: mixed

enableGlobalCache: false

nodeLinker: node-modules


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

> Threats made to someone's wellbeing, especially towards self-harm or sucide, will be automatically be dealt with as a maximum level offense, no matter the reasoning.

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
cryptofyre@cider.sh.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: LICENSE
================================================
                    GNU AFFERO GENERAL PUBLIC LICENSE
                       Version 3, 19 November 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

  A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate.  Many developers of free software are heartened and
encouraged by the resulting cooperation.  However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

  The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community.  It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server.  Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

  An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals.  This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU Affero General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Remote Network Interaction; Use with the GNU General Public License.

  Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software.  This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time.  Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source.  For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code.  There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.


================================================
FILE: README.md
================================================
<div align="center">
<picture>
    <img src="resources/icons/icon.png" width="128px">
</picture>
</div>
<h1 align="center">
Cider 1
</h1>

> [!WARNING]  
>This project has been archived, and no further updates or support will be provided under any circumstances. We highly recommend switching to [Cider v2](https://cider.sh/downloads/client) for the latest features, improvements, and continued support.  

This repository contains the source code for **Cider v1.x**, a cross-platform Apple Music client built from the ground up by the development team.  

Cider v1 was developed using [Electron.js](https://electronjs.org), [Vue.js 2](https://vuejs.org), and [Webpack](https://webpack.js.org).  

**Note:** While distributions may still be available through various third-party sources, first-party builds are no longer provided due to the high volume of support requests for v1. You can compile it following the [insructions outlined in our legacy documentation](https://cider.sh/docs) from our website. Support will not be provided for compiling.


================================================
FILE: docs/plugins/example/examplePlugin.ts
================================================
let i = 1,
  k = 1;
class ExamplePlugin {
  /**
   * Private variables for interaction in plugins
   */
  private _win: any;
  private _app: any;
  private _store: any;

  /**
   * Base Plugin Details (Eventually implemented into a GUI in settings)
   */
  public name: string = "examplePlugin";
  public description: string = "Example plugin";
  public version: string = "1.0.0";
  public author: string = "Example author";

  /**
   * Runs on plugin load (Currently run on application start)
   */
  constructor(app: any, store: any) {
    this._app = app;
    this._store = store;
    console.debug(`[Plugin][${this.name}] Loading Complete.`);
  }

  /**
   * Runs on app ready
   */
  onReady(win: any): void {
    this._win = win;
    console.debug(`[Plugin][${this.name}] Ready.`);
  }

  /**
   * Runs on app stop
   */
  onBeforeQuit(): void {
    console.debug(`[Plugin][${this.name}] Stopped.`);
  }

  /**
   * Runs on playback State Change
   * @param attributes Music Attributes (attributes.status = current state)
   */
  onPlaybackStateDidChange(attributes: object): void {
    console.log("onPlaybackStateDidChange has been called " + i + " times");
    i++;
  }

  /**
   * Runs on song change
   * @param attributes Music Attributes
   */
  onNowPlayingItemDidChange(attributes: object): void {
    console.log("onNowPlayingDidChange has been called " + k + " times");
    k++;
  }
}

module.exports = ExamplePlugin;


================================================
FILE: docs/plugins/sendSongToTitlebar.ts
================================================
class sendSongToTitlebar {
  /**
   * Base Plugin Details (Eventually implemented into a GUI in settings)
   */
  public name: string = "sendSongToTitlebar";
  public description: string = "Sets the app's titlebar to the Song title";
  public version: string = "0.0.1";
  public author: string = "Cider Collective (credit to 8times9 via #147)";
  /**
   * Runs on plugin load (Currently run on application start)
   */
  private _win: any;
  private _app: any;
  constructor() {}
  /**
   * Runs on app ready
   */
  onReady(win: any): void {
    this._win = win;
  }
  /**
   * Runs on app stop
   */
  onBeforeQuit(): void {}
  /**
   * Runs on playback State Change
   * @param attributes Music Attributes (attributes.status = current state)
   */
  onPlaybackStateDidChange(attributes: any): void {
    this._win.setTitle(`${attributes != null && attributes.name != null && attributes.name.length > 0 ? attributes.name + " - " : ""}Cider`);
  }
  /**
   * Runs on song change
   * @param attributes Music Attributes
   */
  onNowPlayingItemDidChange(attributes: object): void {}
}

module.exports = sendSongToTitlebar;


================================================
FILE: flatpak/cider-wrapper
================================================
#!/bin/sh

for i in {0..9}; do
    test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
done

cider "$@"

================================================
FILE: flatpak/flathub.json
================================================
{
  "only-arches": ["x86_64"],
  "publish-delay-hours": 2
}


================================================
FILE: flatpak/org.cidercollective.cider.yml
================================================
app-id: org.cidercollective.cider
runtime: org.freedesktop.Platform
runtime-version: '21.08'
sdk: org.freedesktop.Sdk
base: org.electronjs.Electron2.BaseApp
base-version: '21.08'
command: cider
rename-desktop-file: cider.desktop
rename-icon: cider
finish-args:
  - --device=dri
  - --filesystem=xdg-music
  - --own-name=org.mpris.MediaPlayer2.Cider
  - --share=ipc
  - --share=network
  - --socket=pulseaudio
  # needs electron v11 (chromium v87) or newer with ozone enabled
  # https://github.com/electron/electron/issues/10915
  # - --socket=wayland
  - --socket=x11
  - --system-talk-name=org.freedesktop.UPower
  - --talk-name=com.canonical.AppMenu.Registrar
  - --talk-name=com.canonical.dbusmenu
  - --talk-name=org.freedesktop.Notifications
  - --talk-name=org.kde.StatusNotifierWatcher
modules:
  - name: cider
    buildsystem: simple
    build-commands:
      - install -dm755 ${FLATPAK_DEST}/cider
      - |
        bsdtar -Oxf cider.deb 'data.tar*' |
        bsdtar -xf - \
        -C ${FLATPAK_DEST}/cider \
        --strip-components=3 \
        ./opt/Cider
      - |
        bsdtar -Oxf cider.deb 'data.tar*' |
        bsdtar -xf - \
        -C ${FLATPAK_DEST} \
        --strip-components=2 \
        --exclude=./usr/share/doc \
        ./usr/share
      - desktop-file-edit --set-key=Exec --set-value=cider ${FLATPAK_DEST}/share/applications/cider.desktop
      - install -Dm755 stub_sandbox ${FLATPAK_DEST}/cider/chrome-sandbox
      - install -Dm755 cider -t ${FLATPAK_DEST}/bin/
    sources:
      - type: file
        dest-filename: cider.deb
        url: https://1308-429851205-gh.circle-artifacts.com/0/~/Cider/dist/artifacts/cider_1.3.1308_amd64.deb
        sha256: 342abde96bac9668e7238860ba435171edd72077ed9f4b385a3546c4d8f96995
        x-checker-data:
          type: html
          url: https://circleci.com/api/v1.1/project/gh/ciderapp/Cider/latest/artifacts?branch=main&filter=successful
          pattern: (https://.*circle-artifacts.com/.+/cider_([\d\.]+)_amd64.deb)
      - type: script
        dest-filename: cider
        commands:
          # share chromium singleton between multiple session, needed for flatpak<1.11.1
          - export TMPDIR=$XDG_RUNTIME_DIR/app/$FLATPAK_ID
          - exec zypak-wrapper /app/cider/cider "$@"
      - type: script
        dest-filename: stub_sandbox
        commands:
          - |
            echo Stub sandbox ignoring command: $@
            exit 1


================================================
FILE: flatpak/sh.cider.Cider.metainfo.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
  <content_rating type="oars-1.0"/>
  <id>sh.cider.Cider</id>
  
  <name>Cider</name>
  <summary>An open source and community oriented Apple Music client</summary>
  
  <metadata_license>CC0-1.0</metadata_license>
  <project_license>AGPL-1.0-or-later</project_license>
  <developer_name>Cider Collective</developer_name>

  <url type="homepage">https://cider.sh/?utm_source=flathub%26utm_medium=link%26utm_campaign=product-page</url>
  <url type="bugtracker">https://github.com/ciderapp/Cider/issues</url>
  <url type="donation">https://ko-fi.com/cryptofyre</url>
  
  <description>
    <p>
      Project Cider. A new look into listening and enjoying Apple Music in style and performance with Features such as Discord and Last.fm integration, spatial audio support, equalizers, and remote controllable using companion app
    </p>
  </description>
  
  <launchable type="desktop-id">cider.desktop</launchable>

  <screenshots>
    <screenshot type="default">
      <image>https://github.com/ciderapp/cider.sh/blob/main/assets/img/frontpage-scn.png?raw=true</image>
    </screenshot>
  </screenshots>

  <releases>
    <release version="v1.3.0.1555" date="2022-03-24"/>
    <release version="v1.3.0.1548" date="2022-03-24"/>
    <release version="v1.3.0.1541" date="2022-03-23"/>
    <release version="v1.3.0.1540" date="2022-03-23"/>
    <release version="v1.3.0.1531" date="2022-03-22"/>
  </releases>
</component>


================================================
FILE: flatpak/sh.cider.Cider.yml
================================================
app-id: sh.cider.Cider
runtime: org.freedesktop.Platform
runtime-version: '21.08'
sdk: org.freedesktop.Sdk
base: org.electronjs.Electron2.BaseApp
base-version: '21.08'
command: cider-wrapper
rename-desktop-file: cider.desktop
rename-icon: cider
finish-args:
  - --device=dri
  - --filesystem=xdg-music
  - --filesystem=xdg-run/app/com.discordapp.Discord:create
  - --own-name=org.mpris.MediaPlayer2.cider
  - --share=ipc
  - --share=network
  - --socket=pulseaudio
  # needs electron v11 (chromium v87) or newer with ozone enabled
  # https://github.com/electron/electron/issues/10915
  #- --socket=wayland
  - --socket=x11
  - --system-talk-name=org.freedesktop.UPower
  - --talk-name=com.canonical.AppMenu.Registrar
  - --talk-name=com.canonical.dbusmenu
  - --talk-name=org.freedesktop.Notifications
  - --talk-name=org.kde.StatusNotifierWatcher
modules:
  - name: cider
    buildsystem: simple
    build-commands:
      - install -dm755 ${FLATPAK_DEST}/cider
      - |
        bsdtar -Oxf cider.deb 'data.tar*' |
        bsdtar -xf - \
        -C ${FLATPAK_DEST}/cider \
        --strip-components=3 \
        ./opt/Cider
      - |
        bsdtar -Oxf cider.deb 'data.tar*' |
        bsdtar -xf - \
        -C ${FLATPAK_DEST} \
        --strip-components=2 \
        --exclude=./usr/share/doc \
        ./usr/share
      - install -Dm755 cider-wrapper /app/bin/cider-wrapper
      - desktop-file-edit --set-key=Exec --set-value=cider-wrapper ${FLATPAK_DEST}/share/applications/cider.desktop
      - install -Dm755 stub_sandbox ${FLATPAK_DEST}/cider/chrome-sandbox
      - install -Dm755 cider -t ${FLATPAK_DEST}/bin/
      - install -Dm644 -t /app/share/metainfo ${FLATPAK_ID}.metainfo.xml
    sources:
      - type: file
        dest-filename: cider.deb
        url: https://github.com/ciderapp/cider-releases/releases/download/v1.3.0.1555/cider_1.3.0-alpha.1555_amd64.deb
        sha256: 8a582ca2758d556cc2d5fad73e05ed3e2f27076e13bf377d1d83d9494aaef9c2
        x-checker-data:
          type: json
          url: https://api.github.com/repos/ciderapp/cider-releases/releases/latest
          version-query: .tag_name
          url-query: .assets[] | select(.name | match("(amd64.deb)")) | .browser_download_url
      - type: script
        dest-filename: cider
        commands:
          # share chromium singleton between multiple session, needed for flatpak<1.11.1
          - export TMPDIR=$XDG_RUNTIME_DIR/app/$FLATPAK_ID
          - exec zypak-wrapper /app/cider/cider "$@"
      - type: script
        dest-filename: stub_sandbox
        commands:
          - |
            echo Stub sandbox ignoring command: $@
            exit 1
      - type: file
        path: cider-wrapper
      - type: file
        path: sh.cider.Cider.metainfo.xml


================================================
FILE: msft-test.json
================================================
{
  "electronVersion": "16.2.8",
  "electronDownload": {
    "version": "16.2.8+wvcus",
    "mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
  },
  "appId": "cider",
  "protocols": [
    {
      "name": "Cider",
      "schemes": ["ame", "cider", "itms", "itmss", "musics", "music"]
    }
  ],
  "extends": null,
  "files": ["**/*", "./src/**/*", "./resources/icons/icon.*"],
  "linux": {
    "target": ["AppImage", "deb", "snap", "rpm"],
    "synopsis": "A new look into listening and enjoying music in style and performance. ",
    "category": "AudioVideo",
    "icon": "cider",
    "executableName": "cider"
  },
  "appx": {
    "applicationId": "CiderAlpha",
    "publisher": "CN=CiderCollective, OID.2.25.311729368913984317654407730594956997722=1",
    "displayName": "Cider",
    "identityName": "CiderCollective.CiderAlpha",
    "backgroundColor": "transparent",
    "setBuildNumber": true
  },
  "win": {
    "target": ["appx"],
    "icon": "resources/icons/icon.ico"
  },
  "directories": {
    "buildResources": ".",
    "output": "dist"
  },
  "mac": {
    "icon": "./resources/icons/icon.icns",
    "category": "public.app-category.music",
    "entitlements": "resources/entitlements.mac.plist",
    "darkModeSupport": true
  }
}


================================================
FILE: package.json
================================================
{
  "name": "cider",
  "applicationId": "Cider",
  "productName": "Cider",
  "version": "1.6.4",
  "description": "A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance in mind.",
  "license": "AGPL-3.0",
  "exports": "./build/index.js",
  "main": "./build/index.js",
  "author": "Cider Collective <development@cider.sh> (https://cider.sh)",
  "repository": "github:ciderapp/Cider",
  "type": "module",
  "bugs": {
    "url": "https://github.com/ciderapp/Cider/issues?q=is%3Aopen+is%3Aissue+label%3Abug"
  },
  "homepage": "https://cider.sh/",
  "buildResources": "resources",
  "scripts": {
    "bootstrap": "npx -y check-engine && pnpm i",
    "build": "tsc && lessc ./src/renderer/style.less ./src/renderer/style.css",
    "start": "npm run build && electron ./build/index.js",
    "dist": "npm run build && electron-builder --publish=never",
    "dist:win": "npm run build && electron-builder --win --publish=never",
    "dist:linux": "npm run build && electron-builder --linux --publish=never",
    "dist:all": "npm run build && electron-builder -wl --publish=never",
    "dist:universalNotWorking": "npm run build && electron-builder --mac --universal --publish:never",
    "winget": "npm run build && electron-builder --win -c winget.json",
    "msft": "npm run build && electron-builder -c msft-package.json",
    "mstest": "npm run build && electron-builder -c msft-test.json",
    "steamdeck": "npm run build && electron-builder --linux -c steam-deck.json",
    "format:check": "npx prettier --check \"src/**/*.{js,json,ts,less}\"",
    "format:write": "npx prettier --write \"src/**/*.{js,json,ts,less}\""
  },
  "dependencies": {
    "@achingbrain/ssdp": "^4.2.1",
    "@crowdin/ota-client": "^1.1.3",
    "adm-zip": "^0.5.16",
    "airtunes2": "github:ciderapp/node_airtunes2",
    "castv2-client": "github:ciderapp/node-castv2-client",
    "chokidar": "^3.6.0",
    "discord-auto-rpc": "^1.0.17",
    "ejs": "^3.1.10",
    "electron-log": "^5.2.4",
    "electron-notarize": "^1.2.2",
    "electron-store": "^9.0.0",
    "electron-updater": "6.2.1",
    "electron-window-state": "^5.0.3",
    "express": "^4.21.2",
    "get-port": "7.1.0",
    "jimp": "^0.22.12",
    "lastfmapi": "^0.1.1",
    "mdns-js": "github:ciderapp/node-mdns-js",
    "mpris-service": "github:ciderapp/mpris-service",
    "music-metadata": "7.14.0",
    "node-fetch": "^3.3.2",
    "node-ssdp": "^4.0.1",
    "node-ssdp-js": "^0.9.6",
    "qrcode": "^1.5.4",
    "request": "^2.88.2",
    "simple-ssdp": "^1.0.2",
    "source-map-support": "^0.5.21",
    "ssdp-js": "^1.0.1",
    "ts-md5": "1.3.1",
    "upnp-mediarenderer-client": "github:vapormusic/node-upnp-mediarenderer-client",
    "v8-compile-cache": "^2.4.0",
    "wallpaper": "7.2.1",
    "ws": "^8.18.0",
    "xml2js": "^0.6.2",
    "youtube-search-without-api-key": "^2.0.1"
  },
  "devDependencies": {
    "@types/adm-zip": "^0.5.7",
    "@types/discord-rpc": "4.0.8",
    "@types/express": "^4.17.21",
    "@types/musickit": "github:ciderapp/musickit-types",
    "@types/node": "^20.17.9",
    "@types/node-ssdp": "^4.0.4",
    "@types/qrcode-terminal": "^0.12.2",
    "@types/request": "^2.48.12",
    "@types/upnp-mediarenderer-client": "^1.4.3",
    "@types/ws": "^8.5.13",
    "@types/xml2js": "^0.4.14",
    "electron": "github:castlabs/electron-releases#v32.2.6+wvcus",
    "electron-builder": "^24.13.3",
    "electron-builder-notarize-pkg": "^1.2.0",
    "electron-webpack": "^2.8.2",
    "less": "^4.2.1",
    "node-gyp": "^10.3.1",
    "prettier": "3.2.5",
    "typescript": "^5.7.2",
    "vue-devtools": "^5.1.4",
    "webpack": "~5.91.0"
  },
  "fileAssociations": [
    {
      "name": "Cider",
      "mimeType": "x-scheme-handler/ame;x-scheme-handler/itms;x-scheme-handler/itmss;x-scheme-handler/musics;x-scheme-handler/music;",
      "schemes": [
        "ame",
        "cider",
        "itms",
        "itmss",
        "musics",
        "music"
      ],
      "protocols": [
        "ame",
        "cider",
        "itms",
        "itmss",
        "musics",
        "music"
      ]
    }
  ],
  "build": {
    "electronDownload": {
      "mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
    },
    "appId": "cider",
    "afterPack": "./resources/afterPack.cjs",
    "afterSign": "./resources/notarize.cjs",
    "protocols": [
      {
        "name": "Cider",
        "schemes": [
          "ame",
          "cider",
          "itms",
          "itmss",
          "musics",
          "music"
        ]
      }
    ],
    "extends": null,
    "files": [
      "./build/**/*",
      "./src/**/*",
      "./resources/icons/**/*"
    ],
    "linux": {
      "target": [
        "AppImage",
        "deb",
        "rpm"
      ],
      "synopsis": "A new look into listening and enjoying music in style and performance. ",
      "category": "AudioVideo",
      "icon": "cider",
      "executableName": "cider"
    },
    "appx": {
      "applicationId": "Cider",
      "displayName": "Cider",
      "identityName": "Cider",
      "publisherDisplayName": "Cider Collective",
      "backgroundColor": "transparent",
      "setBuildNumber": true
    },
    "nsis": {
      "oneClick": false,
      "perMachine": false,
      "allowToChangeInstallationDirectory": true,
      "license": "LICENSE",
      "deleteAppDataOnUninstall": true,
      "artifactName": "${productName}-Setup-${version}.${ext}"
    },
    "pkg": {
      "installLocation": "/Applications",
      "background": {
        "file": "./resources/bg.png",
        "alignment": "bottomleft"
      },
      "allowAnywhere": true,
      "allowCurrentUserHome": true,
      "allowRootDirectory": true,
      "license": "./LICENSE",
      "isVersionChecked": false,
      "isRelocatable": false,
      "overwriteAction": "upgrade"
    },
    "snap": {
      "slots": [
        {
          "mpris": {
            "interface": "mpris"
          }
        }
      ]
    },
    "dmg": {
      "background": "./resources/bg.tiff",
      "icon": "resources/icons/icon.ico"
    },
    "mas": {
      "entitlements": "./resources/entitlements.mac.plist",
      "entitlementsInherit": "./resources/entitlements.mac.plist"
    },
    "win": {
      "target": [
        "nsis"
      ],
      "icon": "resources/icons/icon.ico"
    },
    "directories": {
      "buildResources": ".",
      "output": "dist"
    },
    "mac": {
      "hardenedRuntime": true,
      "gatekeeperAssess": false,
      "icon": "./resources/icons/icon.icns",
      "category": "public.app-category.music",
      "entitlements": "./resources/entitlements.mac.plist",
      "entitlementsInherit": "./resources/entitlements.mac.plist",
      "darkModeSupport": true,
      "target": [
        "dmg"
      ],
      "extendInfo": {
        "NSUserNotificationAlertStyle": "alert"
      }
    }
  },
  "electronWebpack": {
    "devtool": "source-map"
  },
  "packageManager": "pnpm@9.15.0"
}


================================================
FILE: resources/afterPack.cjs
================================================
exports.default = function (context) {
  const { execSync } = require("child_process");
  const fs = require("fs");

  if (process.platform !== "darwin") return;

  if (fs.existsSync("dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig"))
    fs.unlinkSync("dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig");
  if (fs.existsSync("dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig"))
    fs.unlinkSync("dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig");
  console.log('Castlabs-evs update start')
  execSync('python3 -m pip install --upgrade castlabs-evs')
  console.log('Castlabs-evs update complete')

  // xcode 13
  if (
    fs.existsSync("dist/mac-universal--x64") &&
    fs.existsSync("dist/mac-universal--arm64") &&
    fs.existsSync("dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib")
  )
    execSync(
      "cp 'dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib' 'dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib'",
      { stdio: "inherit" }
    );

  console.log('VMP signing start')
  if (fs.existsSync('dist/mac-universal'))
  execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-universal',{stdio: 'inherit'})
  if (fs.existsSync('dist/mac'))
  execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac',{stdio: 'inherit'})
  if (fs.existsSync('dist/mac-arm64'))
  execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-arm64 -z',{stdio: 'inherit'})

  console.log('VMP signing complete')
};


================================================
FILE: resources/entitlements.mac.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <!-- https://github.com/electron/electron-notarize#prerequisites -->
    <key>com.apple.security.cs.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <!-- https://github.cm/electron-userland/electron-builder/issues/3940 -->
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
  </dict>
</plist>

================================================
FILE: resources/license.json
================================================
{
  "$schema": "https://github.com/argv-minus-one/dmg-license/raw/master/schema.json",
  "body": [
    {
      "file": "license.txt",
      "lang": ["en-US"]
    }
  ]
}


================================================
FILE: resources/license.txt
================================================
                    GNU AFFERO GENERAL PUBLIC LICENSE
                       Version 3, 19 November 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

  A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate.  Many developers of free software are heartened and
encouraged by the resulting cooperation.  However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

  The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community.  It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server.  Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

  An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals.  This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU Affero General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Remote Network Interaction; Use with the GNU General Public License.

  Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software.  This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time.  Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source.  For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code.  There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.


================================================
FILE: resources/macPackager.cjs
================================================
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const bluebird_lst_1 = require("bluebird-lst");
const builder_util_1 = require("builder-util");
const electron_osx_sign_1 = require("electron-osx-sign");
const promises_1 = require("fs/promises");
const lazy_val_1 = require("lazy-val");
const path = require("path");
const fs_1 = require("builder-util/out/fs");
const promise_1 = require("builder-util/out/promise");
const appInfo_1 = require("./appInfo");
const macCodeSign_1 = require("./codeSign/macCodeSign");
const core_1 = require("./core");
const platformPackager_1 = require("./platformPackager");
const ArchiveTarget_1 = require("./targets/ArchiveTarget");
const pkg_1 = require("./targets/pkg");
const targetFactory_1 = require("./targets/targetFactory");
const macosVersion_1 = require("./util/macosVersion");
const pathManager_1 = require("./util/pathManager");
const fs = require("fs/promises");
class MacPackager extends platformPackager_1.PlatformPackager {
  constructor(info) {
    super(info, core_1.Platform.MAC);
    this.codeSigningInfo = new lazy_val_1.Lazy(() => {
      const cscLink = this.getCscLink();
      if (cscLink == null || process.platform !== "darwin") {
        return Promise.resolve({
          keychainFile: process.env.CSC_KEYCHAIN || null,
        });
      }
      return macCodeSign_1
        .createKeychain({
          tmpDir: this.info.tempDirManager,
          cscLink,
          cscKeyPassword: this.getCscPassword(),
          cscILink: platformPackager_1.chooseNotNull(this.platformSpecificBuildOptions.cscInstallerLink, process.env.CSC_INSTALLER_LINK),
          cscIKeyPassword: platformPackager_1.chooseNotNull(this.platformSpecificBuildOptions.cscInstallerKeyPassword, process.env.CSC_INSTALLER_KEY_PASSWORD),
          currentDir: this.projectDir,
        })
        .then((result) => {
          const keychainFile = result.keychainFile;
          if (keychainFile != null) {
            this.info.disposeOnBuildFinish(() => macCodeSign_1.removeKeychain(keychainFile));
          }
          return result;
        });
    });
    this._iconPath = new lazy_val_1.Lazy(() => this.getOrConvertIcon("icns"));
  }
  get defaultTarget() {
    return this.info.framework.macOsDefaultTargets;
  }
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  prepareAppInfo(appInfo) {
    return new appInfo_1.AppInfo(this.info, this.platformSpecificBuildOptions.bundleVersion, this.platformSpecificBuildOptions);
  }
  async getIconPath() {
    return this._iconPath.value;
  }
  createTargets(targets, mapper) {
    for (const name of targets) {
      switch (name) {
        case core_1.DIR_TARGET:
          break;
        case "dmg": {
          // eslint-disable-next-line @typescript-eslint/no-var-requires
          const { DmgTarget } = require("dmg-builder");
          mapper(name, (outDir) => new DmgTarget(this, outDir));
          break;
        }
        case "zip":
          // https://github.com/electron-userland/electron-builder/issues/2313
          mapper(name, (outDir) => new ArchiveTarget_1.ArchiveTarget(name, outDir, this, true));
          break;
        case "pkg":
          mapper(name, (outDir) => new pkg_1.PkgTarget(this, outDir));
          break;
        default:
          mapper(name, (outDir) => (name === "mas" || name === "mas-dev" ? new targetFactory_1.NoOpTarget(name) : targetFactory_1.createCommonTarget(name, outDir, this)));
          break;
      }
    }
  }
  async doPack(outDir, appOutDir, platformName, arch, platformSpecificBuildOptions, targets) {
    switch (arch) {
      default: {
        return super.doPack(outDir, appOutDir, platformName, arch, platformSpecificBuildOptions, targets);
      }
      case builder_util_1.Arch.universal: {
        const x64Arch = builder_util_1.Arch.x64;
        const x64AppOutDir = appOutDir + "--" + builder_util_1.Arch[x64Arch];
        await super.doPack(outDir, x64AppOutDir, platformName, x64Arch, platformSpecificBuildOptions, targets, false, true);
        const arm64Arch = builder_util_1.Arch.arm64;
        const arm64AppOutPath = appOutDir + "--" + builder_util_1.Arch[arm64Arch];
        await super.doPack(outDir, arm64AppOutPath, platformName, arm64Arch, platformSpecificBuildOptions, targets, false, true);
        const framework = this.info.framework;
        builder_util_1.log.info(
          {
            platform: platformName,
            arch: builder_util_1.Arch[arch],
            [`${framework.name}`]: framework.version,
            appOutDir: builder_util_1.log.filePath(appOutDir),
          },
          `packaging`
        );
        const appFile = `${this.appInfo.productFilename}.app`;
        const { makeUniversalApp } = require("@electron/universal");
        await makeUniversalApp({
          x64AppPath: path.join(x64AppOutDir, appFile),
          arm64AppPath: path.join(arm64AppOutPath, appFile),
          outAppPath: path.join(appOutDir, appFile),
          force: true,
        });
        await fs.rm(x64AppOutDir, { recursive: true, force: true });
        await fs.rm(arm64AppOutPath, { recursive: true, force: true });
        const packContext = {
          appOutDir,
          outDir,
          arch,
          targets,
          packager: this,
          electronPlatformName: platformName,
        };
        await this.info.afterPack(packContext);
        if (framework.afterPack != null) {
          await framework.afterPack(packContext);
        }
        await this.doSignAfterPack(outDir, appOutDir, platformName, arch, platformSpecificBuildOptions, targets);
        break;
      }
    }
  }
  async pack(outDir, arch, targets, taskManager) {
    let nonMasPromise = null;
    const hasMas = targets.length !== 0 && targets.some((it) => it.name === "mas" || it.name === "mas-dev");
    const prepackaged = this.packagerOptions.prepackaged;
    if (!hasMas || targets.length > 1) {
      const appPath = prepackaged == null ? path.join(this.computeAppOutDir(outDir, arch), `${this.appInfo.productFilename}.app`) : prepackaged;
      nonMasPromise = (prepackaged ? Promise.resolve() : this.doPack(outDir, path.dirname(appPath), this.platform.nodeName, arch, this.platformSpecificBuildOptions, targets)).then(() =>
        this.packageInDistributableFormat(appPath, arch, targets, taskManager)
      );
    }
    for (const target of targets) {
      const targetName = target.name;
      if (!(targetName === "mas" || targetName === "mas-dev")) {
        continue;
      }
      const masBuildOptions = builder_util_1.deepAssign({}, this.platformSpecificBuildOptions, this.config.mas);
      if (targetName === "mas-dev") {
        builder_util_1.deepAssign(masBuildOptions, this.config.masDev, {
          type: "development",
        });
      }
      const targetOutDir = path.join(outDir, `${targetName}${builder_util_1.getArchSuffix(arch)}`);
      if (prepackaged == null) {
        await this.doPack(outDir, targetOutDir, "mas", arch, masBuildOptions, [target]);
        await this.sign(path.join(targetOutDir, `${this.appInfo.productFilename}.app`), targetOutDir, masBuildOptions, arch);
      } else {
        await this.sign(prepackaged, targetOutDir, masBuildOptions, arch);
      }
    }
    if (nonMasPromise != null) {
      await nonMasPromise;
    }
  }
  async sign(appPath, outDir, masOptions, arch) {
    if (!macCodeSign_1.isSignAllowed()) {
      return;
    }
    const isMas = masOptions != null;
    const options = masOptions == null ? this.platformSpecificBuildOptions : masOptions;
    const qualifier = options.identity;
    if (!isMas && qualifier === null) {
      if (this.forceCodeSigning) {
        throw new builder_util_1.InvalidConfigurationError("identity explicitly is set to null, but forceCodeSigning is set to true");
      }
      builder_util_1.log.info({ reason: "identity explicitly is set to null" }, "skipped macOS code signing");
      return;
    }
    const keychainFile = (await this.codeSigningInfo.value).keychainFile;
    const explicitType = options.type;
    const type = explicitType || "distribution";
    const isDevelopment = type === "development";
    const certificateTypes = getCertificateTypes(isMas, isDevelopment);
    let identity = null;
    for (const certificateType of certificateTypes) {
      identity = await macCodeSign_1.findIdentity(certificateType, qualifier, keychainFile);
      if (identity != null) {
        break;
      }
    }
    if (identity == null) {
      if (!isMas && !isDevelopment && explicitType !== "distribution") {
        identity = await macCodeSign_1.findIdentity("Mac Developer", qualifier, keychainFile);
        if (identity != null) {
          builder_util_1.log.warn("Mac Developer is used to sign app — it is only for development and testing, not for production");
        }
      }
      if (identity == null) {
        await macCodeSign_1.reportError(isMas, certificateTypes, qualifier, keychainFile, this.forceCodeSigning);
        return;
      }
    }
    if (!macosVersion_1.isMacOsHighSierra()) {
      throw new builder_util_1.InvalidConfigurationError("macOS High Sierra 10.13.6 is required to sign");
    }
    let filter = options.signIgnore;
    if (Array.isArray(filter)) {
      if (filter.length == 0) {
        filter = null;
      }
    } else if (filter != null) {
      filter = filter.length === 0 ? null : [filter];
    }
    const filterRe = filter == null ? null : filter.map((it) => new RegExp(it));
    let binaries = options.binaries || undefined;
    if (binaries) {
      // Accept absolute paths for external binaries, else resolve relative paths from the artifact's app Contents path.
      const userDefinedBinaries = await Promise.all(
        binaries.map(async (destination) => {
          if (await fs_1.statOrNull(destination)) {
            return destination;
          }
          return path.resolve(appPath, destination);
        })
      );
      // Insert at front to prioritize signing. We still sort by depth next
      binaries = userDefinedBinaries.concat(binaries);
      builder_util_1.log.info("Signing addtional user-defined binaries: " + JSON.stringify(userDefinedBinaries, null, 1));
    }
    const signOptions = {
      "identity-validation": false,
      // https://github.com/electron-userland/electron-builder/issues/1699
      // kext are signed by the chipset manufacturers. You need a special certificate (only available on request) from Apple to be able to sign kext.
      ignore: (file) => {
        if (filterRe != null) {
          for (const regExp of filterRe) {
            if (regExp.test(file)) {
              return true;
            }
          }
        }
        return (
          file.endsWith(".kext") ||
          file.startsWith("/Contents/PlugIns", appPath.length) ||
          file.includes("/node_modules/puppeteer/.local-chromium") ||
          file.includes("/node_modules/playwright-firefox/.local-browsers") ||
          file.includes("/node_modules/playwright/.local-browsers")
        );
        /* Those are browser automating modules, browser (chromium, nightly) cannot be signed
                  https://github.com/electron-userland/electron-builder/issues/2010
                  https://github.com/electron-userland/electron-builder/issues/5383
                  */
      },
      identity: identity,
      type,
      platform: isMas ? "mas" : "darwin",
      version: this.config.electronVersion,
      app: appPath,
      keychain: keychainFile || undefined,
      binaries,
      timestamp: isMas ? (masOptions === null || masOptions === void 0 ? void 0 : masOptions.timestamp) : options.timestamp,
      requirements: isMas || this.platformSpecificBuildOptions.requirements == null ? undefined : await this.getResource(this.platformSpecificBuildOptions.requirements),
      // https://github.com/electron-userland/electron-osx-sign/issues/196
      // will fail on 10.14.5+ because a signed but unnotarized app is also rejected.
      "gatekeeper-assess": options.gatekeeperAssess === true,
      // https://github.com/electron-userland/electron-builder/issues/1480
      "strict-verify": options.strictVerify,
      hardenedRuntime: isMas ? masOptions && masOptions.hardenedRuntime === true : options.hardenedRuntime !== false,
    };
    await this.adjustSignOptions(signOptions, masOptions);
    builder_util_1.log.info(
      {
        file: builder_util_1.log.filePath(appPath),
        identityName: identity.name,
        identityHash: identity.hash,
        provisioningProfile: signOptions["provisioning-profile"] || "none",
      },
      "signing"
    );
    await this.doSign(signOptions);
    // https://github.com/electron-userland/electron-builder/issues/1196#issuecomment-312310209
    if (masOptions != null && !isDevelopment) {
      const certType = isDevelopment ? "Mac Developer" : "3rd Party Mac Developer Installer";
      const masInstallerIdentity = await macCodeSign_1.findIdentity(certType, masOptions.identity, keychainFile);
      if (masInstallerIdentity == null) {
        throw new builder_util_1.InvalidConfigurationError(`Cannot find valid "${certType}" identity to sign MAS installer, please see https://electron.build/code-signing`);
      }
      // mas uploaded to AppStore, so, use "-" instead of space for name
      const artifactName = this.expandArtifactNamePattern(masOptions, "pkg", arch);
      const artifactPath = path.join(outDir, artifactName);
      await this.doFlat(appPath, artifactPath, masInstallerIdentity, keychainFile);
      await this.dispatchArtifactCreated(artifactPath, null, builder_util_1.Arch.x64, this.computeSafeArtifactName(artifactName, "pkg", arch, true, this.platformSpecificBuildOptions.defaultArch));
    }
  }
  async adjustSignOptions(signOptions, masOptions) {
    const resourceList = await this.resourceList;
    const customSignOptions = masOptions || this.platformSpecificBuildOptions;
    const entitlementsSuffix = masOptions == null ? "mac" : "mas";
    let entitlements = customSignOptions.entitlements;
    if (entitlements == null) {
      const p = `entitlements.${entitlementsSuffix}.plist`;
      if (resourceList.includes(p)) {
        entitlements = path.join(this.info.buildResourcesDir, p);
      } else {
        entitlements = pathManager_1.getTemplatePath("entitlements.mac.plist");
      }
    }
    signOptions.entitlements = entitlements;
    let entitlementsInherit = customSignOptions.entitlementsInherit;
    if (entitlementsInherit == null) {
      const p = `entitlements.${entitlementsSuffix}.inherit.plist`;
      if (resourceList.includes(p)) {
        entitlementsInherit = path.join(this.info.buildResourcesDir, p);
      } else {
        entitlementsInherit = pathManager_1.getTemplatePath("entitlements.mac.plist");
      }
    }
    signOptions["entitlements-inherit"] = entitlementsInherit;
    if (customSignOptions.provisioningProfile != null) {
      signOptions["provisioning-profile"] = customSignOptions.provisioningProfile;
    }
    signOptions["entitlements-loginhelper"] = customSignOptions.entitlementsLoginHelper;
  }
  //noinspection JSMethodCanBeStatic
  async doSign(opts) {
    return electron_osx_sign_1.signAsync(opts);
  }
  //noinspection JSMethodCanBeStatic
  async doFlat(appPath, outFile, identity, keychain) {
    // productbuild doesn't created directory for out file
    await promises_1.mkdir(path.dirname(outFile), { recursive: true });
    const args = pkg_1.prepareProductBuildArgs(identity, keychain);
    args.push("--component", appPath, "/Applications");
    args.push(outFile);
    return await builder_util_1.exec("productbuild", args);
  }
  getElectronSrcDir(dist) {
    return path.resolve(this.projectDir, dist, this.info.framework.distMacOsAppName);
  }
  getElectronDestinationDir(appOutDir) {
    return path.join(appOutDir, this.info.framework.distMacOsAppName);
  }
  // todo fileAssociations
  async applyCommonInfo(appPlist, contentsPath) {
    const appInfo = this.appInfo;
    const appFilename = appInfo.productFilename;
    // https://github.com/electron-userland/electron-builder/issues/1278
    appPlist.CFBundleExecutable = appFilename.endsWith(" Helper") ? appFilename.substring(0, appFilename.length - " Helper".length) : appFilename;
    const icon = await this.getIconPath();
    if (icon != null) {
      const oldIcon = appPlist.CFBundleIconFile;
      const resourcesPath = path.join(contentsPath, "Resources");
      if (oldIcon != null) {
        await fs_1.unlinkIfExists(path.join(resourcesPath, oldIcon));
      }
      const iconFileName = "icon.icns";
      appPlist.CFBundleIconFile = iconFileName;
      await fs_1.copyFile(icon, path.join(resourcesPath, iconFileName));
    }
    appPlist.CFBundleName = appInfo.productName;
    appPlist.CFBundleDisplayName = appInfo.productName;
    const minimumSystemVersion = this.platformSpecificBuildOptions.minimumSystemVersion;
    if (minimumSystemVersion != null) {
      appPlist.LSMinimumSystemVersion = minimumSystemVersion;
    }
    appPlist.CFBundleIdentifier = appInfo.macBundleIdentifier;
    appPlist.CFBundleShortVersionString = this.platformSpecificBuildOptions.bundleShortVersion || appInfo.version;
    appPlist.CFBundleVersion = appInfo.buildVersion;
    builder_util_1.use(this.platformSpecificBuildOptions.category || this.config.category, (it) => (appPlist.LSApplicationCategoryType = it));
    appPlist.NSHumanReadableCopyright = appInfo.copyright;
    if (this.platformSpecificBuildOptions.darkModeSupport) {
      appPlist.NSRequiresAquaSystemAppearance = false;
    }
    const extendInfo = this.platformSpecificBuildOptions.extendInfo;
    if (extendInfo != null) {
      Object.assign(appPlist, extendInfo);
    }
  }
  async signApp(packContext, isAsar) {
    const appFileName = `${this.appInfo.productFilename}.app`;
    await bluebird_lst_1.default.map(promises_1.readdir(packContext.appOutDir), (file) => {
      if (file === appFileName) {
        return this.sign(path.join(packContext.appOutDir, file), null, null, null);
      }
      return null;
    });
    if (!isAsar) {
      return;
    }
    const outResourcesDir = path.join(packContext.appOutDir, "resources", "app.asar.unpacked");
    await bluebird_lst_1.default.map(promise_1.orIfFileNotExist(promises_1.readdir(outResourcesDir), []), (file) => {
      if (file.endsWith(".app")) {
        return this.sign(path.join(outResourcesDir, file), null, null, null);
      } else {
        return null;
      }
    });
  }
}
exports.default = MacPackager;
function getCertificateTypes(isMas, isDevelopment) {
  if (isDevelopment) {
    return isMas ? ["Mac Developer", "Apple Development"] : ["Developer ID Application"];
  }
  return isMas ? ["Apple Distribution"] : ["Developer ID Application"];
}
//# sourceMappingURL=macPackager.js.map


================================================
FILE: resources/notarize.cjs
================================================
require("dotenv").config();
const { notarize } = require("electron-notarize");

exports.default = async function notarizing(context) {
  const { electronPlatformName, appOutDir } = context;
  if (electronPlatformName !== "darwin") {
    return;
  }

  const appName = context.packager.appInfo.productFilename;

  return await notarize({
    appBundleId: "com.ciderapp.cider",
    appPath: `${appOutDir}/${appName}.app`,
    appleId: process.env.APPLEID,
    appleIdPassword: process.env.APPLEIDPASS,
  });
};


================================================
FILE: resources/verror-types
================================================
// Type definitions for verror 1.10
// Project: https://github.com/davepacheco/node-verror
// Definitions by: Sven Reglitzki <https://github.com/svi3c>, Maxime Toumi-M <https://github.com/max4t>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

/*
 * VError([cause], fmt[, arg...]): Like JavaScript's built-in Error class, but
 * supports a "cause" argument (another error) and a printf-style message.  The
 * cause argument can be null or omitted entirely.
 *
 * Examples:
 *
 * CODE                                    MESSAGE
 * new VError('something bad happened')    "something bad happened"
 * new VError('missing file: "%s"', file)  "missing file: "/etc/passwd"
 *   with file = '/etc/passwd'
 * new VError(err, 'open failed')          "open failed: file not found"
 *   with err.message = 'file not found'
 */
declare class VError extends Error {
    static VError: typeof VError;

    static cause(err: Error): Error | null;
    static info(err: Error): VError.Info;
    static fullStack(err: Error): string;
    static findCauseByName(err: Error, name: string): Error | null;
    static hasCauseWithName(err: Error, name: string): boolean;
    static errorFromList<T extends Error>(errors: T[]): null | T | VError.MultiError;
    static errorForEach(err: Error, func: (err: Error) => void): void;

    //@ts-ignore
    cause(): Error | undefined;
    constructor(options: VError.Options | Error, message: string, ...params: any[]);
    constructor(message?: string, ...params: any[]);
}

declare namespace VError {
    interface Info {
        [key: string]: any;
    }

    interface Options {
        cause?: Error | null | undefined;
        name?: string | undefined;
        strict?: boolean | undefined;
        constructorOpt?(...args: any[]): void;
        info?: Info | undefined;
    }

    /*
    * SError is like VError, but stricter about types.  You cannot pass "null" or
    * "undefined" as string arguments to the formatter.  Since SError is only a
    * different function, not really a different class, we don't set
    * SError.prototype.name.
    */
    class SError extends VError {}

    /*
    * Represents a collection of errors for the purpose of consumers that generally
    * only deal with one error.  Callers can extract the individual errors
    * contained in this object, but may also just treat it as a normal single
    * error, in which case a summary message will be printed.
    */
    class MultiError extends VError {
        constructor(errors: Error[]);
        errors(): Error[];
    }

    /*
    * Like JavaScript's built-in Error class, but supports a "cause" argument which
    * is wrapped, not "folded in" as with VError.    Accepts a printf-style message.
    * The cause argument can be null.
    */
    class WError extends VError {}
}

export = VError;

================================================
FILE: resources/version.sh
================================================
#!/bin/bash

# Setup the variables needed
if [[ $GH_REQUEST_TOKEN != "" ]]; then
	STABLE_SHA=$(curl -H "Authorization: token ${GH_REQUEST_TOKEN}" -s https://api.github.com/repos/ciderapp/Cider/branches/stable | grep '"sha"' | head -1 | cut -d '"' -f 4)
elif [[ $GITHUB_TOKEN != "" ]]; then
	STABLE_SHA=$(curl -H "Authorization: token ${GITHUB_TOKEN}" -s https://api.github.com/repos/ciderapp/Cider/branches/stable | grep '"sha"' | head -1 | cut -d '"' -f 4)
else
	STABLE_SHA=$(curl -s https://api.github.com/repos/ciderapp/Cider/branches/stable | grep '"sha"' | head -1 | cut -d '"' -f 4)
fi

SHA_DATE=$(git show -s --format=%ci $STABLE_SHA)
VERSION_POSTFIX=$(git rev-list $STABLE_SHA..HEAD --count --since="$SHA_DATE")
CURRENT_VERSION=$(node -p -e "require('./package.json').version" | cut -d '-' -f 1)

# Set the version number for commits on main branch
if [[ ($CIRCLE_BRANCH == "main" || $GITHUB_REF_NAME == "main") && $VERSION_POSTFIX -gt 0 ]]; then
  NEW_VERSION_NUMBERED="$CURRENT_VERSION-beta.$(printf "%03d\n" $VERSION_POSTFIX)"
	NEW_VERSION="${CURRENT_VERSION}-beta.${VERSION_POSTFIX}"

	# Update the version in package.json
  if [[ $NO_WRITE_VER == "" && $(node -p -e "require('./package.json').version" | cut -d '.' -f 4) != $VERSION_POSTFIX ]]; then
    if [[ $RUNNER_OS == "macOS" ]]; then
      sed -i "" -e "s/$CURRENT_VERSION/$NEW_VERSION/" package.json
    else
      sed -i "0,/$CURRENT_VERSION/s//$NEW_VERSION/" package.json
    fi
  fi
else
  NEW_VERSION_NUMBERED=$CURRENT_VERSION
	NEW_VERSION=$CURRENT_VERSION
fi

echo $NEW_VERSION


# Add the version to the environment for CI usage
if [[ $GITHUB_REF_NAME != "" ]] && [[ "$GITHUB_ENV" ]]; then
  echo "APP_VERSION=$NEW_VERSION" >>$GITHUB_ENV
  echo "RELEASE_VERSION=$NEW_VERSION_NUMBERED" >>$GITHUB_ENV
elif [[ $CIRCLE_BRANCH != "" ]] && [[ "$BASH_ENV" ]]; then
  echo "export APP_VERSION=$NEW_VERSION" >>$BASH_ENV
  echo "export RELEASE_VERSION=$NEW_VERSION_NUMBERED" >>$BASH_ENV
fi


================================================
FILE: src/ciderkit/public.js
================================================
const CiderKit = {
  v1: {
    musickit: {
      async mkv3(route, body, options) {
        let opts = {
          method: "POST",
          cache: "no-cache",
          credentials: "same-origin",
          headers: {
            "Content-Type": "application/json",
          },
          redirect: "follow",
          referrerPolicy: "no-referrer",
          body: {},
        };
        opts.body = JSON.stringify({
          route: route,
          body: body,
          options: options,
        });
        let response = await fetch("./api/musickit/v3", opts);
        return response.json();
      },
    },
  },
};


================================================
FILE: src/main/base/app.ts
================================================
import { Menu, Tray, app, clipboard, ipcMain, nativeImage, shell } from "electron";
import log from "electron-log";
import { readFileSync } from "node:fs";
import { dirname, join, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import os from "os";
import { utils } from "../base/utils.js";

/**
 * @file Creates App instance
 * @author CiderCollective
 */

/** @namespace */
export class AppEvents {
  private protocols: string[] = ["ame", "cider", "itms", "itmss", "musics", "music"];
  private plugin: any = undefined;
  private tray: any = undefined;
  private i18n: any = undefined;

  /** @constructor */
  constructor() {
    this.start();
  }

  /**
   * Handles all actions that occur for the app on start (Mainly commandline arguments)
   * @returns {void}
   */
  private start(): void {
    AppEvents.initLogging();
    console.info("[AppEvents] App started");

    /**********************************************************************************************************************
     * Startup arguments handling
     **********************************************************************************************************************/
    if (app.commandLine.hasSwitch("version") || app.commandLine.hasSwitch("v")) {
      console.log(app.getVersion());
      app.exit();
    }

    // Verbose Check
    if (app.commandLine.hasSwitch("verbose")) {
      console.log("[Cider] User has launched the application with --verbose");
    }

    // Log File Location
    if (app.commandLine.hasSwitch("log") || app.commandLine.hasSwitch("l")) {
      console.log(join(app.getPath("userData"), "logs"));
      app.exit();
    }

    // Try limiting JS memory to 350MB.
    app.commandLine.appendSwitch("js-flags", "--max-old-space-size=350");

    // Expose GC
    app.commandLine.appendSwitch("js-flags", "--expose_gc");

    if (process.platform === "win32") {
      app.setAppUserModelId(app.getName()); // For notification name
    }

    /***********************************************************************************************************************
     * Commandline arguments
     **********************************************************************************************************************/
    switch (utils.getStoreValue("visual.hw_acceleration") as string) {
      default:
      case "default":
        app.commandLine.appendSwitch("enable-accelerated-mjpeg-decode");
        app.commandLine.appendSwitch("enable-accelerated-video");
        app.commandLine.appendSwitch("disable-gpu-driver-bug-workarounds");
        app.commandLine.appendSwitch("ignore-gpu-blacklist");
        app.commandLine.appendSwitch("enable-native-gpu-memory-buffers");
        app.commandLine.appendSwitch("enable-accelerated-video-decode");
        app.commandLine.appendSwitch("enable-gpu-rasterization");
        app.commandLine.appendSwitch("enable-native-gpu-memory-buffers");
        app.commandLine.appendSwitch("enable-oop-rasterization");
        break;

      case "webgpu":
        console.info("[AppEvents] WebGPU is enabled.");
        app.commandLine.appendSwitch("enable-unsafe-webgpu");
        if (process.platform === "linux") {
          app.commandLine.appendSwitch("enable-features", "Vulkan");
        }
        break;

      case "disabled":
        console.info("[AppEvents] Hardware acceleration is disabled.");
        app.commandLine.appendSwitch("disable-gpu");
        app.disableHardwareAcceleration();
        break;
    }

    if (process.platform === "linux") {
      app.commandLine.appendSwitch("disable-features", "MediaSessionService");

      if (os.version().includes("SteamOS")) {
        app.commandLine.appendSwitch("enable-features", "UseOzonePlatform");
        app.commandLine.appendSwitch("ozone-platform", "x11");
      }
    }

    /***********************************************************************************************************************
     * Protocols
     **********************************************************************************************************************/
    /**  */
    if (process.defaultApp) {
      if (process.argv.length >= 2) {
        this.protocols.forEach((protocol: string) => {
          app.setAsDefaultProtocolClient(protocol, process.execPath, [resolve(process.argv[1])]);
        });
      }
    } else {
      this.protocols.forEach((protocol: string) => {
        app.setAsDefaultProtocolClient(protocol);
      });
    }
  }

  public quit() {
    console.log("[AppEvents] App quit");
  }

  public ready(plug: any) {
    this.plugin = plug;
    console.log("[AppEvents] App ready");

    AppEvents.setLoginSettings();
  }

  public bwCreated() {
    app.on("open-url", (event, url) => {
      event.preventDefault();
      if (this.protocols.some((protocol: string) => url.includes(protocol))) {
        this.LinkHandler(url);
        console.log(url);
      }
    });

    if (process.platform === "darwin") {
      app.setUserActivity(
        "8R23J2835D.com.ciderapp.webremote.play",
        {
          title: "Web Remote",
          description: "Connect to your Web Remote",
        },
        "https://webremote.cider.sh",
      );
    }

    this.InstanceHandler();
    if (process.platform !== "darwin") {
      this.InitTray();
    }
  }

  /***********************************************************************************************************************
   * Private methods
   **********************************************************************************************************************/

  /**
   * Handles links (URI) and protocols for the application
   * @param arg
   */
  private LinkHandler(arg: string) {
    if (!arg) return;

    // LastFM Auth URL
    if (arg.includes("auth")) {
      const authURI = arg.split("/auth/")[1];
      if (authURI.startsWith("lastfm")) {
        // If we wanted more auth options
        console.log("token: ", authURI.split("lastfm?token=")[1]);
        utils
          .getWindow()
          .webContents.executeJavaScript(`ipcRenderer.send('lastfm:auth', ${JSON.stringify(authURI.split("lastfm?token=")[1])})`)
          .catch(console.error);
      }
    } else if (arg.includes("playpause")) {
      //language=JS
      utils.getWindow().webContents.executeJavaScript("MusicKitInterop.playPause()");
    } else if (arg.includes("nextitem")) {
      //language=JS
      utils.getWindow().webContents.executeJavaScript("app.mk.skipToNextItem()");
    }
    // Play
    else if (arg.includes("/play/")) {
      //Steer away from protocol:// specific conditionals
      const playParam = arg.split("/play/")[1];

      const mediaType = {
        "s/": "song",
        "a/": "album",
        "p/": "playlist",
      };

      for (const [key, value] of Object.entries(mediaType)) {
        if (playParam.includes(key)) {
          const id = playParam.split(key)[1];
          utils.getWindow().webContents.send("play", value, id);
          console.debug(`[LinkHandler] Attempting to load ${value} by id: ${id}`);
        }
      }
    } else if (arg.includes("music.apple.com")) {
      // URL (used with itms/itmss/music/musics uris)
      console.log(arg);
      let url = arg.split("//")[1];
      console.warn(`[LinkHandler] Attempting to load url: ${url}`);
      utils.getWindow().webContents.send("play", "url", url);
    } else if (arg.includes("/debug/appdata")) {
      shell.openPath(app.getPath("userData"));
    } else if (arg.includes("/debug/logs")) {
      shell.openPath(app.getPath("logs"));
    } else if (arg.includes("/discord")) {
      shell.openExternal("https://discord.gg/applemusic");
    } else if (arg.includes("/github")) {
      shell.openExternal("https://github.com/ciderapp/cider");
    } else if (arg.includes("/donate")) {
      shell.openExternal("https://opencollective.com/ciderapp");
    } else if (arg.includes("/beep")) {
      shell.beep();
    } else {
      utils.getWindow().webContents.executeJavaScript(`app.appRoute(${JSON.stringify(arg.split("//")[1])})`);
    }
  }

  /**
   * Handles the creation of a new instance of the app
   */
  private InstanceHandler() {
    // Detects of an existing instance is running (So if the lock has been achieved, no existing instance has been found)
    const gotTheLock = app.requestSingleInstanceLock();

    if (!gotTheLock) {
      // Runs on the new instance if another instance has been found
      console.log("[Cider] Another instance has been found, quitting.");
      app.quit();
    } else {
      // Runs on the first instance if no other instance has been found
      app.on("second-instance", (_event, startArgs) => {
        console.log("[InstanceHandler] (second-instance) Instance started with " + startArgs.toString());

        startArgs.forEach((arg) => {
          console.log(arg);
          if (arg.includes("cider://") || arg.includes("itms://") || arg.includes("itmss://") || arg.includes("music://") || arg.includes("musics://")) {
            console.debug("[InstanceHandler] (second-instance) Link detected with " + arg);
            this.LinkHandler(arg);
          } else if (arg.includes("--force-quit")) {
            console.warn("[InstanceHandler] (second-instance) Force Quit found. Quitting App.");
            app.quit();
          } else if (utils.getWindow()) {
            if (utils.getWindow().isMinimized()) utils.getWindow().restore();
            utils.getWindow().show();
            utils.getWindow().focus();
          }
        });
      });
    }
  }

  /**
   * Initializes the applications tray
   */
  private InitTray() {
    const icons = {
      win32: nativeImage.createFromPath(join(dirname(fileURLToPath(import.meta.url)), `../../resources/icons/icon.ico`)).resize({
        width: 32,
        height: 32,
      }),
      linux: nativeImage.createFromPath(join(dirname(fileURLToPath(import.meta.url)), `../../resources/icons/icon.png`)).resize({
        width: 32,
        height: 32,
      }),
      darwin: nativeImage.createFromPath(join(dirname(fileURLToPath(import.meta.url)), `../../resources/icons/icon.png`)).resize({
        width: 20,
        height: 20,
      }),
    };
    this.tray = new Tray(process.platform === "win32" ? icons.win32 : process.platform === "darwin" ? icons.darwin : icons.linux);
    this.tray.setToolTip(app.getName());
    this.setTray(false);

    this.tray.on("double-click", () => {  // supports windows and mac only
      if (utils.getWindow()) {
        if (utils.getWindow().isVisible()) {
          utils.getWindow().focus();
        } else {
          utils.getWindow().show();
        }
      }
    });

    this.tray.on("click", () => {
      if (utils.getWindow() && process.platform === "linux") {  // use single click to open when double doesn't work
        if (utils.getWindow().isVisible()) {
          utils.getWindow().focus();
        } else {
          utils.getWindow().show();
        }
      }
    });

    utils.getWindow().on("show", () => {
      this.setTray(true);
    });

    utils.getWindow().on("restore", () => {
      this.setTray(true);
    });

    utils.getWindow().on("hide", () => {
      this.setTray(false);
    });

    utils.getWindow().on("minimize", () => {
      this.setTray(false);
    });
  }

  /**
   * Sets the tray context menu to a given state
   * @param visible - BrowserWindow Visibility
   */
  private setTray(visible: boolean = utils.getWindow().isVisible()) {
    this.i18n = utils.getLocale(utils.getStoreValue("general.language"));

    const ciderIcon = nativeImage.createFromPath(join(dirname(fileURLToPath(import.meta.url)), `../../resources/icons/icon.png`)).resize({
      width: 24,
      height: 24,
    });

    const menu = Menu.buildFromTemplate([
      {
        label: app.getName(),
        enabled: false,
        icon: ciderIcon,
      },

      { type: "separator" },

      /* For now only idea i dont know if posible to implement

            this could be implemented in a plugin if you would like track info, it would be impractical to put listeners in this file. -Core
            {
                label: this.i18n['action.tray.listento'],
                enabled: false,
            },

            {
                visible: visible,
                label: 'track info',
                enabled: false,
            },

            {type: 'separator'},
            */

      {
        visible: !visible,
        label: this.i18n["term.playpause"],
        click: () => {
          utils.getWindow().webContents.executeJavaScript("MusicKitInterop.playPause()");
        },
      },

      {
        visible: !visible,
        label: this.i18n["term.next"],
        click: () => {
          utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.next()`);
        },
      },

      {
        visible: !visible,
        label: this.i18n["term.previous"],
        click: () => {
          utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.previous()`);
        },
      },

      { type: "separator", visible: !visible },

      {
        label: visible ? this.i18n["action.tray.minimize"] : `${this.i18n["action.tray.show"]}`,
        click: () => {
          if (utils.getWindow()) {
            if (visible) {
              utils.getWindow().hide();
            } else {
              utils.getWindow().show();
            }
          }
        },
      },
      {
        label: this.i18n["term.quit"],
        click: () => {
          app.quit();
        },
      },
    ]);
    this.tray.setContextMenu(menu);
  }

  /**
   * Initializes logging in the application
   * @private
   */
  private static initLogging() {
    log.transports.console.format = "[{h}:{i}:{s}.{ms}] [{level}] {text}";
    Object.assign(console, log.functions);
    console.debug = function (...args: any[]) {
      if (!app.isPackaged) {
        log.debug(...args);
      }
    };

    ipcMain.on("fetch-log", (_event) => {
      const data = readFileSync(log.transports.file.getFile().path, {
        encoding: "utf8",
        flag: "r",
      });
      clipboard.writeText(data);
    });
  }

  /**
   * Set login settings
   * @private
   */
  private static setLoginSettings() {
    if (utils.getStoreValue("general.onStartup.enabled")) {
      app.setLoginItemSettings({
        openAtLogin: true,
        path: app.getPath("exe"),
        args: [`${utils.getStoreValue("general.onStartup.hidden") ? "--hidden" : ""}`],
      });
    } else {
      app.setLoginItemSettings({
        openAtLogin: false,
        path: app.getPath("exe"),
      });
    }
  }
}


================================================
FILE: src/main/base/browserwindow.ts
================================================
import AdmZip from "adm-zip";
import { watch } from "chokidar";
import { ShareMenu, app, BrowserWindow as bw, dialog, ipcMain, nativeTheme, screen, shell } from "electron";
import windowStateKeeper from "electron-window-state";
import express from "express";
import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, rmSync, rmdirSync, statSync, unlinkSync, writeFileSync } from "fs";
import getPort from "get-port";
import { LocalFiles } from "../providers/local/index.js";
import mm from "music-metadata";
import fetch from "node-fetch";
import os, { networkInterfaces } from "os";
import { join } from "path";
import { Stream } from "stream";
import { getWallpaper } from "wallpaper";
import { search } from "youtube-search-without-api-key";
import { Plugins } from "./plugins.js";
import { utils } from "./utils.js";
import { wsapi } from "./wsapi.js";

/**
 * @file Creates the BrowserWindow
 * @author CiderCollective
 */

/** @namespace */
export class BrowserWindow {
  public static win: any | undefined = null;
  private devMode: boolean = !app.isPackaged;
  public static express: any | undefined = null;

  private audioStream: any = new Stream.PassThrough();
  private headerSent: any = false;
  private chromecastIP: any = [];
  private clientPort: number = 0;
  private remotePort: number = 6942;
  private EnvironmentVariables: object = {
    env: {
      platform: process.platform,
      dev: app.isPackaged,
      osRelease: os.release(),
      updatable: !process.windowsStore || !process.mas,
      useV3: utils.getStoreValue("advanced.experiments").includes("ampv3"),
      components: [
        "pages/podcasts",
        "pages/apple-account-settings",
        "pages/library-songs",
        "pages/library-albums",
        "pages/library-artists",
        "pages/library-recentlyadded",
        "pages/browse",
        "pages/groupings",
        "pages/charts",
        //"pages/installed-themes",
        "pages/listen_now",
        "pages/radio",
        "pages/home",
        "pages/artist-feed",
        "pages/cider-playlist",
        "pages/playlist-inline",
        "pages/recordLabel",
        "pages/cider-multiroom",
        "pages/collection-list",
        "pages/apple-curator",
        "pages/artist",
        "pages/search",
        "pages/about",
        "pages/library-videos",
        "pages/remote-pair",
        //"pages/themes-github",
        //"pages/plugins-github",
        "pages/replay",
        "pages/audiolabs",
        "pages/zoo",
        "pages/plugin-renderer",
        "pages/oobe",
        "pages/cider-profile",
        "components/c2-upgrade",
        "components/app-content",
        "components/sidebar",
        "components/mediaitem-artwork",
        "components/artwork-material",
        "components/menu-panel",
        "components/sidebar-playlist",
        "components/audio-settings",
        "components/plugin-menu",
        "components/audio-controls",
        "components/audio-playbackrate",
        "components/qrcode-modal",
        "components/moreinfo-modal",
        "components/equalizer",
        "components/add-to-playlist",
        "components/queue",
        "components/smarthints",
        "components/mediaitem-scroller-horizontal",
        "components/mediaitem-scroller-horizontal-large",
        "components/mediaitem-scroller-horizontal-sp",
        "components/mediaitem-scroller-horizontal-mvview",
        "components/mediaitem-list-item",
        "components/mediaitem-hrect",
        "components/mediaitem-square",
        "components/mediaitem-mvview",
        // "components/libraryartist-item",
        "components/listennow-child",
        "components/mediaitem-mvview-sp",
        "components/animatedartwork-view",
        "components/listitem-horizontal",
        "components/lyrics-view",
        "components/fullscreen",
        "components/miniplayer",
        "components/castmenu",
        "components/pathmenu",
        "components/airplay-modal",
        "components/artist-chip",
        "components/hello-world",
        "components/inline-collection-list",
        "components/settings-window",
        "components/pagination",
        "components/settings-keybinds",
        "components/settings-themes",
        "components/settings-themes-github",
        "components/settings-plugins-github",
      ],
      appRoutes: [
        {
          page: "lzedit",
          component: `<i18n-editor></i18n-editor>`,
          condition: "$root.page == 'lzedit'",
        },
        {
          page: "library-recentlyadded",
          component: `<cider-recentlyadded></cider-recentlyadded>`,
          condition: "$root.page == 'library-recentlyadded'",
        },
        {
          page: "plugin-renderer",
          component: `<plugin-renderer></plugin-renderer>`,
          condition: "$root.page == 'plugin-renderer'",
        },
        {
          page: "zoo",
          component: "<cider-zoo></cider-zoo>",
          condition: "$root.page == 'zoo'",
        },
        {
          page: "podcasts",
          component: `<apple-podcasts></apple-podcasts>`,
          condition: `$root.page == 'podcasts'`,
        },
        {
          page: "library-videos",
          component: `<cider-library-videos></cider-library-videos>`,
          condition: `$root.page == 'library-videos'`,
        },
        {
          page: "apple-account-settings",
          component: `<apple-account-settings></apple-account-settings>`,
          condition: `$root.page == 'apple-account-settings'`,
        },
        {
          page: "about",
          component: `<about-page></about-page>`,
          condition: `$root.page == 'about'`,
        },
        {
          page: "cider-artist",
          component: `<cider-artist :data="$root.artistPage.data"></cider-artist>`,
          condition: `$root.page == 'artist-page' && $root.artistPage.data.attributes`,
        },
        {
          page: "collection-list",
          component: `<cider-collection-list :data="$root.collectionList.response" :type="$root.collectionList.type" :title="$root.collectionList.title"></cider-collection-list>`,
          condition: `$root.page == 'collection-list'`,
        },
        {
          page: "home",
          component: `<cider-home></cider-home>`,
          condition: `$root.page == 'home'`,
        },
        {
          page: "artist-feed",
          component: `<cider-artist-feed></cider-artist-feed>`,
          condition: `$root.page == 'artist-feed'`,
        },
        {
          page: "playlist-inline",
          component: `<playlist-inline :data="$root.showingPlaylist"></playlist-inline>`,
          condition: `$root.modals.showPlaylist`,
        },
        {
          page: "playlist_",
          component: `<cider-playlist :data="$root.showingPlaylist"></cider-playlist>`,
          condition: `$root.page.includes('playlist_')`,
        },
        {
          page: "album_",
          component: `<cider-playlist :data="$root.showingPlaylist"></cider-playlist>`,
          condition: `$root.page.includes('album_')`,
        },
        {
          page: "recordLabel_",
          component: `<cider-recordlabel :data="$root.showingPlaylist"></cider-recordlabel>`,
          condition: `$root.page.includes('recordLabel_')`,
        },
        {
          page: "social-profiles_",
          component: `<cider-socialprofile :data="$root.showingPlaylist"></cider-socialprofile>`,
          condition: `$root.page.includes('social-profiles_')`,
        },
        {
          page: "multiroom",
          component: `<cider-multiroom :data="$root.multiroom"></cider-multiroom>`,
          condition: `$root.page.includes('multiroom')`,
        },
        {
          page: "curator_",
          component: `<cider-recordlabel :data="$root.showingPlaylist"></cider-recordlabel>`,
          condition: `$root.page.includes('curator_')`,
        },
        {
          page: "browsepage",
          component: `<cider-browse :data="$root.browsepage"></cider-browse>`,
          condition: `$root.page == 'browse'`,
          onEnter: ``,
        },
        {
          page: "groupings",
          component: `<cider-groupings :data="$root.browsepage"></cider-groupings>`,
          condition: `$root.page == 'groupings'`,
          onEnter: ``,
        },
        {
          page: "charts",
          component: `<cider-charts :data="$root.browsepage"></cider-charts>`,
          condition: `$root.page == 'charts'`,
          onEnter: ``,
        },
        {
          page: "listen_now",
          component: `<cider-listen-now :data="$root.listennow"></cider-listen-now>`,
          condition: `$root.page == 'listen_now'`,
          onEnter: ``,
        },
        {
          page: "radio",
          component: `<cider-radio :data="$root.radio"></cider-radio>`,
          condition: `$root.page == 'radio'`,
          onEnter: ``,
        },
        {
          page: "settings",
          component: `<cider-settings></cider-settings>`,
          condition: `$root.page == 'settings'`,
        },
        {
          page: "installed-themes",
          component: `<installed-themes></installed-themes>`,
          condition: `$root.page == 'installed-themes'`,
        },
        {
          page: "search",
          component: `<cider-search :search="$root.search"></cider-search>`,
          condition: `$root.page == 'search'`,
        },
        {
          page: "library-songs",
          component: `<cider-library-songs :data="$root.library.songs"></cider-library-songs>`,
          condition: `$root.page == 'library-songs'`,
          onEnter: ``,
        },
        {
          page: "library-albums",
          component: `<cider-library-albums :data="$root.library.songs"></cider-library-albums>`,
          condition: `$root.page == 'library-albums'`,
          onEnter: ``,
        },
        {
          page: "library-artists",
          component: `<cider-library-artists></cider-library-artists>`,
          condition: `$root.page == 'library-artists'`,
          onEnter: ``,
        },
        {
          page: "appleCurator",
          component: `<cider-applecurator :data="$root.appleCurator"></cider-applecurator>`,
          condition: `$root.page.includes('appleCurator')`,
        },
        {
          page: "themes-github",
          component: `<themes-github></themes-github>`,
          condition: `$root.page == 'themes-github'`,
        },
        {
          page: "plugins-github",
          component: `<plugins-github></plugins-github>`,
          condition: `$root.page == 'plugins-github'`,
        },
        {
          page: "remote-pair",
          component: `<remote-pair></remote-pair>`,
          condition: `$root.page == 'remote-pair'`,
        },
        {
          page: "audiolabs",
          component: `<audiolabs-page></audiolabs-page>`,
          condition: `$root.page == 'audiolabs'`,
        },
        {
          page: "replay",
          component: `<replay-page></replay-page>`,
          condition: `$root.page == 'replay'`,
        },
        {
          page: "keydinds",
          component: `<keybinds-settings></keybinds-settings>`,
          condition: `$root.page == 'keybinds-settings'`,
        },
      ],
    },
  };
  private options: any = {
    icon: join(utils.getPath("resourcePath"), `icons/icon.` + (process.platform === "win32" ? "ico" : "png")),
    width: 1024,
    height: 600,
    x: undefined,
    y: undefined,
    minWidth: 900,
    minHeight: 390,
    frame: false,
    title: "Cider",
    show: false,
    // backgroundColor: "#1E1E1E",
    titleBarStyle: "hidden",
    trafficLightPosition: { x: 15, y: 20 },
    webPreferences: {
      experimentalFeatures: true,
      nodeIntegration: true,
      sandbox: true,
      allowRunningInsecureContent: true,
      contextIsolation: false,
      webviewTag: true,
      plugins: true,
      nodeIntegrationInWorker: true,
      webSecurity: false,
      preload: join(utils.getPath("srcPath"), "./preload/cider-preload.js"),
    },
  };

  public static watcher: any;

  StartWatcher(path: string) {
    BrowserWindow.watcher = watch(path, {
      ignored: /[\/\\]\./,
      persistent: true,
    });

    function onWatcherReady() {
      console.info("From here can you check for real changes, the initial scan has been completed.");
    }

    // Declare the listeners of the watcher
    BrowserWindow.watcher
      .on("add", function (path: string) {
        // console.log('File', path, 'has been added');
      })
      .on("addDir", function (path: string) {
        // console.log('Directory', path, 'has been added');
      })
      .on("change", function (path: string) {
        console.log("File", path, "has been changed");
        BrowserWindow.win.webContents.send("theme-update", "");
      })
      .on("unlink", function (path: string) {
        // console.log('File', path, 'has been removed');
      })
      .on("unlinkDir", function (path: string) {
        // console.log('Directory', path, 'has been removed');
      })
      .on("error", function (error: string) {
        // console.log('Error happened', error);
      })
      .on("ready", onWatcherReady)
      .on("raw", function (event: any, path: any, details: any) {
        // This event should be triggered everytime something happens.
        // console.log('Raw event info:', event, path, details);
      });
  }

  async StopWatcher() {
    await BrowserWindow.watcher.close();
  }

  /**
   * Creates the browser window
   * @generator
   * @function createWindow
   * @yields {object} Electron browser window
   */
  async createWindow(): Promise<Electron.BrowserWindow> {
    const envPort = process.env?.CIDER_PORT || "9000";
    this.clientPort = await getPort({ port: parseInt(envPort, 10) || 9000 });
    BrowserWindow.verifyFiles();
    this.StartWatcher(utils.getPath("themes"));

    // Load the previous state with fallback to defaults
    const windowState = windowStateKeeper({
      defaultWidth: 1024,
      defaultHeight: 600,
      fullScreen: false,
    });
    this.options.width = windowState.width;
    this.options.height = windowState.height;
    this.options.x = windowState.x;
    this.options.y = windowState.y;

    switch (process.platform) {
      default:
        break;
      case "win32":
        if (!(utils.getStoreValue("visual.transparent") ?? false)) {
          this.options.backgroundColor = "#1E1E1E";
        } else {
          this.options.transparent = true;
        }
        this.options.autoHideMenuBar = true;
        if (utils.getStoreValue("visual.nativeTitleBar")) {
          this.options.titleBarStyle = "visible";
          this.options.frame = true;
        }
        break;
      case "linux":
        this.options.autoHideMenuBar = true;
        if (!(utils.getStoreValue("visual.transparent") ?? false)) {
          this.options.backgroundColor = "#1E1E1E";
        } else {
          this.options.transparent = true;
        }
        if (utils.getStoreValue("visual.nativeTitleBar")) {
          this.options.titleBarStyle = "visible";
          this.options.frame = true;
        }
        break;
      case "darwin":
        this.options.transparent = true;
        this.options.vibrancy = "dark";
        this.options.hasShadow = true;
        break;
    }

    nativeTheme.themeSource = utils.getStoreValue("visual.overrideDisplayTheme");

    // Start the webserver for the browser window to load
    // LocalFiles.DB.init()
    this.startWebServer();

    BrowserWindow.win = new bw(this.options);
    // cant be built in CI
    // if (process.platform === "win32" && (utils.getStoreValue('visual.transparent') ?? false)) {
    //     var electronVibrancy = require('electron-vibrancy-updated');
    //     electronVibrancy.SetVibrancy(BrowserWindow.win, 0);

    // }
    const ws = new wsapi(BrowserWindow.win);
    ws.InitWebSockets();
    // and load the renderer.
    this.startSession();
    this.startHandlers();

    // Register listeners on Window to track size and position of the Window.
    windowState.manage(BrowserWindow.win);

    return BrowserWindow.win;
  }

  /**
   * Verifies the files for the renderer to use (Cache, library info, etc.)
   */
  private static verifyFiles(): void {
    const expectedDirectories = ["CiderCache"];
    const expectedFiles = ["library-songs.json", "library-artists.json", "library-albums.json", "library-playlists.json", "library-recentlyAdded.json"];
    for (let i = 0; i < expectedDirectories.length; i++) {
      if (!existsSync(join(app.getPath("userData"), expectedDirectories[i]))) {
        mkdirSync(join(app.getPath("userData"), expectedDirectories[i]));
      }
    }
    for (let i = 0; i < expectedFiles.length; i++) {
      const file = join(join(app.getPath("userData"), "CiderCache"), expectedFiles[i]);
      if (!existsSync(file)) {
        writeFileSync(file, JSON.stringify([]));
      }
    }
  }

  /**
   * Starts the webserver for the renderer process.
   */
  private startWebServer(): void {
    const app = express();
    BrowserWindow.express = app;
    app.use(express.static(join(utils.getPath("srcPath"), "./renderer/")));
    app.set("views", join(utils.getPath("srcPath"), "./renderer/views"));
    app.set("view engine", "ejs");
    let firstRequest = true;
    app.use((req, res, next) => {
      if (!req || !req.headers || !req.headers.host || !req.headers["user-agent"]) {
        console.error("Req not defined");
        return;
      }
      if (req.url.includes("api") || req.url.includes("audio.wav") || (req.headers.host.includes("localhost") && (this.devMode || req.headers["user-agent"].includes("Electron"))) || req.url.includes("/connect")) {
        next();
      } else {
        res.redirect("https://discord.gg/applemusic");
      }
    });

    app.get("/", (_req, res) => {
      res.render("main", this.EnvironmentVariables);
    });

    app.get("/audio/cideraudio.js", (_req, res) => {
      if (existsSync(join(utils.getPath("externals"), "/audio.js"))) {
        if (utils.getStoreValue("audio.maikiwiAudio.cloud") == true) {
          res.sendFile(join(utils.getPath("externals"), "/cloud/audio.js"));
        } else {
          res.sendFile(join(utils.getPath("externals"), "/audio.js"));
        }
      } else {
        res.sendFile(join(utils.getPath("srcPath"), "./renderer/audio/audio.js"));
      }
    });

    app.get("/cideraudio/impulses/:file", (req, res) => {
      const impulseExternals = join(utils.getPath("externals"), "/impulses/");
      const impulseFile = join(impulseExternals, req.params.file);
      if (existsSync(impulseFile)) {
        res.sendFile(impulseFile);
      } else {
        res.sendFile(join(utils.getPath("srcPath"), "./renderer/audio/impulses/" + req.params.file));
      }
    });

    app.get("/api/playback/:action", (req, res) => {
      const action = req.params.action;
      switch (action) {
        case "playpause":
          BrowserWindow.win.webContents.executeJavaScript("wsapi.togglePlayPause()");
          res.send("Play/Pause toggle");
          break;
        case "play":
          BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().play()");
          res.send("Playing");
          break;
        case "pause":
          BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().pause()");
          res.send("Paused");
          break;
        case "stop":
          BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().stop()");
          res.send("Stopped");
          break;
        case "next":
          BrowserWindow.win.webContents.executeJavaScript("if (MusicKit.getInstance().queue.nextPlayableItemIndex != -1 && MusicKit.getInstance().queue.nextPlayableItemIndex != null) {MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.nextPlayableItemIndex);}");
          res.send("Next");
          break;
        case "previous":
          BrowserWindow.win.webContents.executeJavaScript("if (MusicKit.getInstance().queue.previousPlayableItemIndex != -1 && MusicKit.getInstance().queue.previousPlayableItemIndex != null) {MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.previousPlayableItemIndex);}");
          res.send("Previous");
          break;
        default: {
          res.send("Invalid action");
        }
      }
    });

    app.get("/themes/:theme", (req, res) => {
      const theme = req.params.theme;
      const themePath = join(utils.getPath("srcPath"), "./renderer/themes/", theme);
      const userThemePath = join(utils.getPath("themes"), theme);
      if (existsSync(userThemePath)) {
        res.sendFile(userThemePath);
      } else if (existsSync(themePath)) {
        res.sendFile(themePath);
      } else {
        res.send(`// Theme not found - ${userThemePath}`);
      }
    });

    app.get("/themes/:theme/*", (req: { params: { theme: string; 0: string } }, res) => {
      const theme = req.params.theme;
      const file = req.params[0];
      const themePath = join(utils.getPath("srcPath"), "./renderer/themes/", theme);
      const userThemePath = join(utils.getPath("themes"), theme);
      if (existsSync(userThemePath)) {
        res.sendFile(join(userThemePath, file));
      } else if (existsSync(themePath)) {
        res.sendFile(join(themePath, file));
      } else {
        res.send(`// File not found - ${userThemePath}`);
      }
    });

    app.get("/plugins/:plugin/*", (req: { params: { plugin: string; 0: string } }, res) => {
      let plugin = req.params.plugin;
      if (Plugins.getPluginFromMap(plugin)) {
        plugin = Plugins.getPluginFromMap(plugin);
      }
      const file = req.params[0];
      const pluginPath = join(utils.getPath("plugins"), plugin);
      console.log(pluginPath);
      if (existsSync(pluginPath)) {
        res.sendFile(join(pluginPath, file));
      } else {
        res.send(`// Plugin not found - ${pluginPath}`);
      }
    });

    app.get("/audio.wav", (req, res) => {
      try {
        const ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress;
        if (!this.chromecastIP.includes(ip)) {
          this.headerSent = false;
          this.audioStream._readableState.buffer.clear();
          this.audioStream._readableState.length = 0;
          this.chromecastIP.push(ip);
        }
        req.socket.setTimeout(Number.MAX_SAFE_INTEGER);
        // CiderBase.requests.push({req: req, res: res});
        // var pos = CiderBase.requests.length - 1;
        req.on("close", () => {
          console.log("disconnected");
          this.headerSent = false;
          this.chromecastIP = this.chromecastIP.filter((item: any) => item !== ip);
        });

        this.audioStream.on("data", (data: any) => {
          try {
            res.write(data);
          } catch (ex) {
            console.log(ex);
          }
        });
      } catch (ex) {
        console.log(ex);
      }
    });
    //region Connect Integration
    app.get("/connect/set-cc-user/:data", (req, res) => {
      //utils.getStoreValue('connectUser', JSON.parse()) // [Connect] Save user in store
      utils.getWindow().webContents.send("setStoreValue", "connectUser", JSON.parse(req.params.data));
      res.redirect(`https://connect.cidercollective.dev/linked.html`);
    });

    LocalFiles.setupHandlers();

    // [Connect] Set auth URL in store for `shell.openExternal`
    utils.setStoreValue("cc_authURL", `https://connect.cidercollective.dev/callback/discord?app=cider&appPort=${this.clientPort}`);
    console.log(`[Connect] Auth URL: ${utils.getStoreValue("cc_authURL")}`);
    //endregion

    app.listen(this.clientPort, () => {
      console.log(`Cider client port: ${this.clientPort}`);
    });

    /*
     * Remote Client -@quacksire
     * https://github.com/ciderapp/Apple-Music-Electron/blob/818189ed40ff600d76eb59d22016723a75885cd5/resources/functions/handler.js#L1173
     */
    const remote = express();
    remote.use(express.static(join(utils.getPath("srcPath"), "./web-remote/")));
    remote.set("views", join(utils.getPath("srcPath"), "./web-remote/views"));
    remote.set("view engine", "ejs");
    getPort({ port: 6942 }).then((port: number) => {
      this.remotePort = port;
      // Start Remote Discovery
      this.broadcastRemote();
      remote.listen(this.remotePort, () => {
        console.log(`Cider remote port: ${this.remotePort}`);
        firstRequest = false;
      });
      remote.get("/", (_req, res) => {
        res.render("index", this.EnvironmentVariables);
      });
    });
  }

  /**
   * Starts the session for the renderer process.
   */
  private startSession(): void {
    // intercept "https://js-cdn.music.apple.com/hls.js/2.141.1/hls.js/hls.js" and redirect to local file "./apple-hls.js" instead
    BrowserWindow.win.webContents.session.webRequest.onBeforeRequest(
      {
        urls: ["https://*/*"],
      },
      (details: { url: string | string[] }, callback: (arg0: { redirectURL?: string; cancel?: boolean }) => void) => {
        if (details.url.includes("hls.js")) {
          callback({
            redirectURL: `http://localhost:${this.clientPort}/apple-hls.js`,
          });
        } else if (details.url.includes("ciderlocal") && !details.url.includes("https://apic-desktop.musixmatch.com")) {
          let text = details.url.toString().includes("ids=") ? decodeURIComponent(details.url.toString()).split("?ids=")[1] : decodeURIComponent(details.url.toString().substring(details.url.toString().lastIndexOf("/") + 1));
          //console.log('localurl',text)
          callback({
            redirectURL: `http://localhost:${this.clientPort}/ciderlocal/${Buffer.from(text).toString("base64url")}`,
          });
        } else {
          callback({
            cancel: false,
          });
        }
      },
    );

    BrowserWindow.win.webContents.session.webRequest.onBeforeSendHeaders(async (details: { url: string; requestHeaders: { [x: string]: string } }, callback: (arg0: { requestHeaders: any }) => void) => {
      if (details.url === "https://buy.itunes.apple.com/account/web/info") {
        details.requestHeaders["sec-fetch-site"] = "same-site";
        details.requestHeaders["DNT"] = "1";
        let itspod = await BrowserWindow.win.webContents.executeJavaScript(`window.localStorage.getItem("music.ampwebplay.itspod")`);
        if (itspod != null) details.requestHeaders["Cookie"] = `itspod=${itspod}`;
      }
      if (details.url.includes("apple.com")) {
        details.requestHeaders["DNT"] = "1";
        details.requestHeaders["authority"] = "amp-api.music.apple.com";
        details.requestHeaders["origin"] = "https://beta.music.apple.com";
        details.requestHeaders["referer"] = "https://beta.music.apple.com";
        details.requestHeaders["sec-fetch-dest"] = "empty";
        details.requestHeaders["sec-fetch-mode"] = "cors";
        details.requestHeaders["sec-fetch-site"] = "same-site";
      }
      if (details.url.startsWith("https://music.163.com")) {
        details.requestHeaders["Referer"] = "https://music.163.com/";
        details.requestHeaders["user-agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Cider/1.0.0 Chrome/96.0.4664.45 Electron/16.0.0 Safari/537.36";
      }
      if (details.url.includes("https://qq.com")) {
        (details.requestHeaders["Accept"] = "*/*"), (details.requestHeaders["Accept-Encoding"] = "gzip, deflate, br"), (details.requestHeaders["Accept-Language"] = "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"), (details.requestHeaders["Referer"] = "https://y.qq.com/"), (details.requestHeaders["User-Agent"] = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (");
        ("KHTML, like Gecko) Mobile/17D50 UCBrowser/12.8.2.1268 Mobile AliApp(TUnionSDK/0.1.20.3) ");
      }
      if (details.url.includes("https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg")) {
        (details.requestHeaders["Accept"] = "*/*"), (details.requestHeaders["Accept-Encoding"] = "gzip, deflate, br"), (details.requestHeaders["Accept-Language"] = "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"), (details.requestHeaders["User-Agent"] = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (");
        ("KHTML, like Gecko) Mobile/17D50 UCBrowser/12.8.2.1268 Mobile AliApp(TUnionSDK/0.1.20.3) ");
        details.requestHeaders["Referer"] = "https://y.qq.com/portal/player.html";
      }
      callback({ requestHeaders: details.requestHeaders });
    });

    let location = `http://localhost:${this.clientPort}/`;

    if (app.isPackaged) {
      BrowserWindow.win.loadURL(location);
    } else {
      BrowserWindow.win.loadURL(location, {
        userAgent: "Cider Development Environment",
      });
    }
  }

  /**
   * Initializes the window handlers
   */
  private startHandlers(): void {
    /**********************************************************************************************************************
     * ipcMain Events
     ****************************************************************************************************************** */

    ipcMain.handle("mkv3", async (event, args) => {
      const options = {
        route: "",
        token: "",
        mediaToken: "",
        GETBody: {},
      };
      Object.assign(options, args);

      let res = await fetch(
        `https://amp-api.music.apple.com/${options.route}?${new URLSearchParams({
          ...options.GETBody,
        }).toString()}`,
        {
          method: "GET",
          headers: {
            "Content-Type": "application/json",
            authorization: `Bearer ${options.token}`,
            path: options.route,
            authority: "amp-api.music.apple.com",
            "media-user-token": options.mediaToken,
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Cider/1.4.2 Chrome/100.0.4896.75 Electron/18.0.3 Safari/537.36",
          },
        },
      );
      let json = await res.json();
      return json;
    });

    ipcMain.on("get-wallpaper", async (event, args) => {
      const wpPath: string = await getWallpaper();
      const Jimp = (await import("jimp")).default;
      const img = await Jimp.read(wpPath);
      const blurAmount = args.blurAmount ?? 256;
      if (blurAmount) {
        img.blur(blurAmount);
      }
      const screens = await screen.getAllDisplays();
      const width = screens.reduce((a, b) => a + b.size.width, 0);
      const height = screens.reduce((a, b) => a + b.size.height, 0);

      img.cover(width, height, Jimp.HORIZONTAL_ALIGN_LEFT | Jimp.VERTICAL_ALIGN_MIDDLE);
      const result = await img.getBase64Async(Jimp.MIME_PNG);

      event.returnValue = {
        path: wpPath,
        data: result,
        res: {
          width: width,
          height: height,
        },
      };
    });

    ipcMain.handle("uninstall-theme", async (event, path) => {
      await this.StopWatcher();
      const themesDir = utils.getPath("themes");
      // validate the path is in the themes directory
      try {
        if (path.startsWith(themesDir)) {
          // get last dir in path, can be either / or \ and may have a trailing slash
          const themeName = path.split(/[\\\/]/).pop();
          if (themeName == "Themes" || themeName == "themes") {
            BrowserWindow.win.webContents.send("theme-uninstalled", {
              path: path,
              status: 3,
            });
            return;
          }
          // if path is directory, delete it
          if (lstatSync(path).isDirectory()) {
            await rmdirSync(path, { recursive: true });
          } else {
            // if path is file, delete it
            await unlinkSync(path);
          }
          // return the path
          BrowserWindow.win.webContents.send("theme-uninstalled", {
            path: path,
            status: 0,
          });
        } else {
          BrowserWindow.win.webContents.send("theme-uninstalled", {
            path: path,
            status: 1,
          });
        }
      } catch (e: any) {
        BrowserWindow.win.webContents.send("theme-uninstalled", {
          path: path,
          message: e.message,
          status: 2,
        });
      }

      this.StartWatcher(utils.getPath("themes"));
    });

    ipcMain.handle("reinstall-widevine-cdm", () => {
      // remove WidevineCDM from appdata folder
      const widevineCdmPath = join(app.getPath("userData"), "./WidevineCdm");
      if (existsSync(widevineCdmPath)) {
        rmSync(widevineCdmPath, { recursive: true, force: true });
      }
      // reinstall WidevineCDM
      app.relaunch();
      app.exit();
    });

    ipcMain.handle("get-github-plugin", async (event, url) => {
      await this.StopWatcher();
      const returnVal = {
        success: true,
        theme: null,
        message: "",
      };
      try {
        if (!existsSync(utils.getPath("plugins"))) {
          mkdirSync(utils.getPath("plugins"));
        }
        if (url.endsWith("/")) url = url.slice(0, -1);
        let response = await utils.fetch(`${url}/archive/refs/heads/main.zip`);
        let repo = url.split("/").slice(-2).join("/");
        let apiRepo = await utils.fetch(`https://api.github.com/repos/${repo}`).then((res) => res.json()) as { id: number };
        console.debug(`REPO ID: ${apiRepo.id}`);
        // extract the files from the first folder in the zip response
        let zip = new AdmZip(await response.buffer());
        let entry = zip.getEntries()[0];
        if (!existsSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id))) {
          mkdirSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id));
        }
        console.log(join(utils.getPath("plugins"), "gh_" + apiRepo.id));
        zip.extractEntryTo(entry, join(utils.getPath("plugins"), "gh_" + apiRepo.id), false, true);
        let commit = await utils.fetch(`https://api.github.com/repos/${repo}/commits`).then((res) => res.json()) as { sha: string }[];
        console.debug(`COMMIT SHA: ${commit[0].sha}`);
        let theme = JSON.parse(readFileSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id, "package.json"), "utf8"));
        theme.id = apiRepo.id;
        theme.commit = commit[0].sha;
        writeFileSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id, "package.json"), JSON.stringify(theme, null, 4), "utf8");
      } catch (e) {
        returnVal.success = false;
      }
      BrowserWindow.win.webContents.send("plugin-installed", returnVal);
      this.StartWatcher(utils.getPath("themes"));
    });

    ipcMain.handle("get-github-theme", async (event, url) => {
      await this.StopWatcher();
      const returnVal = {
        success: true,
        theme: null,
        message: "",
      };
      try {
        if (!existsSync(utils.getPath("themes"))) {
          mkdirSync(utils.getPath("themes"));
        }
        if (url.endsWith("/")) url = url.slice(0, -1);
        let response = await utils.fetch(`${url}/archive/refs/heads/main.zip`);
        let repo = url.split("/").slice(-2).join("/");
        let apiRepo = await utils
          .fetch(`https://api.github.com/repos/${repo}`, {
            headers: {
              "User-Agent": utils.getWindow().webContents.getUserAgent(),
            },
          })
          .then((res) => res.json()) as { id: number }
        console.error(apiRepo);
        console.debug(`REPO ID: ${apiRepo.id}`);
        // extract the files from the first folder in the zip response
        let zip = new AdmZip(await response.buffer());
        if (!existsSync(join(utils.getPath("themes"), "gh_" + apiRepo.id))) {
          mkdirSync(join(utils.getPath("themes"), "gh_" + apiRepo.id));
        }
        console.log(join(utils.getPath("themes"), "gh_" + apiRepo.id));
        zip.getEntries().forEach((entry) => {
          if (entry.entryName.endsWith("/")) return;
          let subFolder = entry.entryName.split("/").slice(1, -1).join("/");
          zip.extractEntryTo(entry, join(utils.getPath("themes"), "gh_" + apiRepo.id, "/", subFolder), false, true);
        });
        let commit = await utils.fetch(`https://api.github.com/repos/${repo}/commits`).then((res) => res.json()) as { sha: string }[];
        console.debug(`COMMIT SHA: ${commit[0].sha}`);
        let theme = JSON.parse(readFileSync(join(utils.getPath("themes"), "gh_" + apiRepo.id, "theme.json"), "utf8"));
        theme.id = apiRepo.id;
        theme.commit = commit[0].sha;
        writeFileSync(join(utils.getPath("themes"), "gh_" + apiRepo.id, "theme.json"), JSON.stringify(theme, null, 4), "utf8");
      } catch (e) {
        console.error(e);
        returnVal.success = false;
      }
      BrowserWindow.win.webContents.send("theme-installed", returnVal);
      this.StartWatcher(utils.getPath("themes"));
      BrowserWindow.win.webContents.send("theme-update", "");
    });

    ipcMain.on("get-themes", (event, _key) => {
      if (existsSync(utils.getPath("themes"))) {
        let files = readdirSync(utils.getPath("themes"));
        let themes = [];
        for (let file of files) {
          if (file.endsWith(".less")) {
            themes.push(file);
          } else if (statSync(join(utils.getPath("themes"), file)).isDirectory()) {
            let subFiles = readdirSync(join(utils.getPath("themes"), file));
            for (let subFile of subFiles) {
              if (subFile.endsWith("index.less")) {
                themes.push(join(file, subFile));
              }
            }
          }
        }
        let themeObjects = [];
        for (let theme of themes) {
          let themePath = join(utils.getPath("themes"), theme);
          let themeName = theme;
          let themeDescription = "";
          if (theme.includes("/")) {
            themeName = theme.split("/")[1];
            themeDescription = theme.split("/")[0];
          }
          if (themePath.endsWith("index.less")) {
            themePath = themePath.slice(0, -10);
          }
          if (existsSync(join(themePath, "theme.json"))) {
            try {
              let themeJson = JSON.parse(readFileSync(join(themePath, "theme.json"), "utf8"));
              themeObjects.push({
                name: themeJson.name || themeName,
                description: themeJson.description || themeDescription,
                path: themePath,
                file: theme,
                github_repo: themeJson.github_repo || "",
                commit: themeJson.commit || "",
                pack: themeJson.pack || false,
              });
            } catch (e) {
              console.error(e);
            }
          } else {
            themeObjects.push({
              name: themeName,
              description: themeDescription,
              path: themePath,
              file: theme,
              github_repo: "",
              commit: "",
              pack: false,
            });
          }
        }
        event.returnValue = themeObjects;
      } else {
        event.returnValue = [];
      }
    });

    ipcMain.handle("open-path", async (event, path) => {
      switch (path) {
        default:
        case "plugins":
          if (existsSync(utils.getPath("plugins"))) {
            shell.openPath(utils.getPath("plugins"));
          } else {
            mkdirSync(utils.getPath("plugins"));
            shell.openPath(utils.getPath("plugins"));
          }
          break;
        case "userdata":
          shell.openPath(app.getPath("userData"));
          break;
        case "themes":
          if (existsSync(utils.getPath("themes"))) {
            shell.openPath(utils.getPath("themes"));
          } else {
            mkdirSync(utils.getPath("themes"));
            shell.openPath(utils.getPath("themes"));
          }
          break;
      }
    });

    ipcMain.on("get-i18n", (event, key) => {
      event.returnValue = utils.getLocale(key);
    });

    ipcMain.on("get-i18n-listing", (event) => {
      const translations = utils.i18n;
      const i18nListing: any = [];

      for (const lang in translations) {
        i18nListing.push({
          code: lang,
          nameNative: translations[lang][0].content["i18n.languageName"] ?? lang,
          nameEnglish: translations[lang][0].content["i18n.languageNameEnglish"] ?? lang,
          category: translations[lang][0].content["i18n.category"] ?? "",
          authors: translations[lang][0].content["i18n.authors"] ?? "",
        });
      }

      event.returnValue = i18nListing;
    });

    ipcMain.on("get-gpu-mode", (event) => {
      event.returnValue = process.platform;
    });

    ipcMain.on("get-port", (event) => {
      event.returnValue = this.clientPort;
    });

    ipcMain.on("is-dev", (event) => {
      event.returnValue = this.devMode;
    });

    ipcMain.handle("put-cache", (_event, arg) => {
      writeFileSync(join(join(app.getPath("userData"), "CiderCache"), `${arg.file}.json`), arg.data);
    });

    ipcMain.on("get-cache", (event, arg) => {
      let read = "";
      if (existsSync(join(join(app.getPath("userData"), "CiderCache"), `${arg}.json`))) {
        read = readFileSync(join(join(app.getPath("userData"), "CiderCache"), `${arg}.json`), "utf8");
      }
      event.returnValue = read;
    });

    ipcMain.handle("getYTLyrics", async (_event, track, artist) => {
      const u = track + " " + artist + " official video";
      return await search(u);
    });

    ipcMain.on("close", (_event) => {
      BrowserWindow.win.close();
    });

    ipcMain.on("maximize", (_event) => {
      // listen for maximize event
      if (BrowserWindow.win.isMaximized()) {
        BrowserWindow.win.unmaximize();
      } else {
        BrowserWindow.win.maximize();
      }
    });
    ipcMain.on("unmaximize", () => {
      // listen for maximize event
      BrowserWindow.win.unmaximize();
    });

    ipcMain.on("minimize", () => {
      // listen for minimize event
      BrowserWindow.win.minimize();
    });

    // Set scale
    ipcMain.on("setScreenScale", (_event, scale) => {
      BrowserWindow.win.webContents.setZoomFactor(parseFloat(scale));
    });

    ipcMain.on("windowmin", (_event, width, height) => {
      BrowserWindow.win.setMinimumSize(width, height);
    });

    ipcMain.on("windowontop", (_event, ontop) => {
      BrowserWindow.win.setAlwaysOnTop(ontop);
    });

    // Set scale
    ipcMain.on("windowresize", (_event, width, height, lock = false) => {
      BrowserWindow.win.setContentSize(width, height);
      BrowserWindow.win.setResizable(!lock);
    });

    // Move window
    ipcMain.on("windowmove", (_event, x, y) => {
      BrowserWindow.win.setBounds({ x, y });
    });

    // Override light, dark
    ipcMain.on("changeDisplayTheme", (event, theme) => {
      nativeTheme.themeSource = theme;
    });

    //Fullscreen
    ipcMain.on("setFullScreen", (_event, flag) => {
      BrowserWindow.win.setFullScreen(flag);
    });

    //Fullscreen
    ipcMain.on("getFullScreen", (event, flag) => {
      event.returnValue = BrowserWindow.win.isFullScreen();
    });

    //Fullscreen
    ipcMain.on("detachDT", (_event, _) => {
      BrowserWindow.win.webContents.openDevTools({ mode: "detach" });
    });

    ipcMain.handle("relaunchApp", (_event, _) => {
      const opt: Electron.RelaunchOptions = {};
      opt.args = process.argv.slice(1).concat(["--relau
Download .txt
gitextract_auu_ugs8/

├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yaml
│   │   ├── config.yml
│   │   └── translation.yaml
│   ├── PULL_REQUEST_TEMPLATE/
│   │   └── translations.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── auto-project.yml
│       ├── cider-chores.yml
│       ├── dev-chores.yml
│       ├── stale-issues.yml
│       └── support-notice.yml
├── .gitignore
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .prettierrc
├── .yarnrc.yml
├── Assets/
│   ├── AppChromeBtn.afdesign
│   ├── Install On Cider/
│   │   └── install on cider.afdesign
│   ├── MissingArtwork.afdesign
│   └── Sources/
│       ├── Cider with text.afdesign
│       ├── Release.afdesign
│       ├── cider-vinyl no raster.afdesign
│       ├── cider-vinyl-no raster 2.afdesign
│       └── cider-vinyl.afdesign
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── docs/
│   └── plugins/
│       ├── example/
│       │   └── examplePlugin.ts
│       └── sendSongToTitlebar.ts
├── flatpak/
│   ├── cider-wrapper
│   ├── flathub.json
│   ├── org.cidercollective.cider.yml
│   ├── sh.cider.Cider.metainfo.xml
│   └── sh.cider.Cider.yml
├── msft-test.json
├── package.json
├── resources/
│   ├── afterPack.cjs
│   ├── bg.tiff
│   ├── entitlements.mac.plist
│   ├── icons/
│   │   ├── icon-old.icns
│   │   └── icon.icns
│   ├── license.json
│   ├── license.txt
│   ├── macPackager.cjs
│   ├── notarize.cjs
│   ├── verror-types
│   └── version.sh
├── src/
│   ├── ciderkit/
│   │   └── public.js
│   ├── main/
│   │   ├── base/
│   │   │   ├── app.ts
│   │   │   ├── browserwindow.ts
│   │   │   ├── castcontroller.ts
│   │   │   ├── castreceiver.ts
│   │   │   ├── plugins.ts
│   │   │   ├── store.ts
│   │   │   ├── utils.ts
│   │   │   ├── vcomponents.json
│   │   │   ├── vrouting.json
│   │   │   └── wsapi.ts
│   │   ├── index.ts
│   │   ├── plugins/
│   │   │   ├── chromecast.ts
│   │   │   ├── discordrpc.ts
│   │   │   ├── lastfm.ts
│   │   │   ├── menubar.ts
│   │   │   ├── mpris.ts
│   │   │   ├── playbackNotifications.ts
│   │   │   ├── raop.ts
│   │   │   ├── thumbar.ts
│   │   │   └── webNowPlaying.ts
│   │   └── providers/
│   │       └── local/
│   │           └── index.ts
│   ├── preload/
│   │   └── cider-preload.js
│   ├── renderer/
│   │   ├── apple-hls-old.js
│   │   ├── apple-hls.js
│   │   ├── assets/
│   │   │   └── fonts/
│   │   │       ├── Inter/
│   │   │       │   └── inter.css
│   │   │       └── Pretendard/
│   │   │           └── pretendardvariable.css
│   │   ├── audio/
│   │   │   ├── audio.js
│   │   │   └── cloud/
│   │   │       └── audio.js
│   │   ├── hlscider.js
│   │   ├── index.js
│   │   ├── less/
│   │   │   ├── ameframework.less
│   │   │   ├── appvars.less
│   │   │   ├── bootstrap-vue.min.less
│   │   │   ├── bootstrap.less
│   │   │   ├── codicon.css
│   │   │   ├── compact.less
│   │   │   ├── directives.less
│   │   │   ├── elements.less
│   │   │   ├── fullscreen.less
│   │   │   ├── helpers.css
│   │   │   ├── helpers.less
│   │   │   ├── linux.less
│   │   │   ├── macos.less
│   │   │   ├── macosemu.less
│   │   │   ├── miniplayer.less
│   │   │   ├── notyf.less
│   │   │   ├── pages.css
│   │   │   └── pages.less
│   │   ├── lib/
│   │   │   ├── fast-plural-rules.js
│   │   │   ├── less.js
│   │   │   ├── marked.js
│   │   │   ├── smoothscroll.js
│   │   │   ├── vue-horizontal.js
│   │   │   ├── vue.dev.js
│   │   │   └── vue.js
│   │   ├── main/
│   │   │   ├── app.js
│   │   │   ├── cidercache.js
│   │   │   ├── ciderfrontapi.js
│   │   │   ├── components/
│   │   │   │   ├── i18n-editor.js
│   │   │   │   ├── sidebar-library-item.js
│   │   │   │   └── svg-icon.js
│   │   │   ├── events.js
│   │   │   ├── gamepad.js
│   │   │   ├── html.js
│   │   │   ├── mica.js
│   │   │   ├── musickittools.js
│   │   │   ├── vueapp.js
│   │   │   ├── vuex-store.js
│   │   │   └── wsapi_interop.js
│   │   ├── sounds/
│   │   │   ├── btn1.ogg
│   │   │   ├── confirm.ogg
│   │   │   └── hover.ogg
│   │   ├── style.less
│   │   ├── sw.js
│   │   ├── themes/
│   │   │   ├── WIP.md
│   │   │   ├── compactui.less
│   │   │   ├── dark.less
│   │   │   ├── default.less
│   │   │   ├── grain.less
│   │   │   ├── inline_drawer.less
│   │   │   ├── reduce_visuals.less
│   │   │   └── sweetener.less
│   │   ├── todo.js
│   │   ├── views/
│   │   │   ├── app/
│   │   │   │   ├── app-navigation.ejs
│   │   │   │   ├── chrome-bottom.ejs
│   │   │   │   ├── chrome-top.ejs
│   │   │   │   └── panels.ejs
│   │   │   ├── components/
│   │   │   │   ├── add-to-playlist.ejs
│   │   │   │   ├── airplay-modal.ejs
│   │   │   │   ├── animatedartwork-view.ejs
│   │   │   │   ├── app-content.ejs
│   │   │   │   ├── artist-chip.ejs
│   │   │   │   ├── artwork-material.ejs
│   │   │   │   ├── audio-controls.ejs
│   │   │   │   ├── audio-playbackrate.ejs
│   │   │   │   ├── audio-settings.ejs
│   │   │   │   ├── c2-upgrade.ejs
│   │   │   │   ├── castmenu.ejs
│   │   │   │   ├── cider-modal.ejs
│   │   │   │   ├── editorialNotes.ejs
│   │   │   │   ├── equalizer.ejs
│   │   │   │   ├── fullscreen.ejs
│   │   │   │   ├── hello-world.ejs
│   │   │   │   ├── inline-collection-list.ejs
│   │   │   │   ├── karaoke-in.ejs
│   │   │   │   ├── libraryartist-item.ejs
│   │   │   │   ├── listennow-child.ejs
│   │   │   │   ├── listitem-horizontal.ejs
│   │   │   │   ├── lyrics-view.ejs
│   │   │   │   ├── mediaitem-artwork.ejs
│   │   │   │   ├── mediaitem-hrect.ejs
│   │   │   │   ├── mediaitem-info.ejs
│   │   │   │   ├── mediaitem-list-item.ejs
│   │   │   │   ├── mediaitem-mvview-sp.ejs
│   │   │   │   ├── mediaitem-mvview.ejs
│   │   │   │   ├── mediaitem-scroller-horizontal-large.ejs
│   │   │   │   ├── mediaitem-scroller-horizontal-mvview.ejs
│   │   │   │   ├── mediaitem-scroller-horizontal-sp.ejs
│   │   │   │   ├── mediaitem-scroller-horizontal.ejs
│   │   │   │   ├── mediaitem-square.ejs
│   │   │   │   ├── menu-panel.ejs
│   │   │   │   ├── miniplayer.ejs
│   │   │   │   ├── moreinfo-modal.ejs
│   │   │   │   ├── pagination.ejs
│   │   │   │   ├── pathmenu.ejs
│   │   │   │   ├── playlists.ejs
│   │   │   │   ├── plugin-menu.ejs
│   │   │   │   ├── qrcode-modal.ejs
│   │   │   │   ├── queue.ejs
│   │   │   │   ├── settings-keybinds.ejs
│   │   │   │   ├── settings-plugins-github.ejs
│   │   │   │   ├── settings-themes-github.ejs
│   │   │   │   ├── settings-themes.ejs
│   │   │   │   ├── settings-window.ejs
│   │   │   │   ├── share-sheet.ejs
│   │   │   │   ├── sidebar-playlist.ejs
│   │   │   │   ├── sidebar.ejs
│   │   │   │   └── smarthints.ejs
│   │   │   ├── main.ejs
│   │   │   └── pages/
│   │   │       ├── about.ejs
│   │   │       ├── apple-account-settings.ejs
│   │   │       ├── apple-curator.ejs
│   │   │       ├── artist-feed.ejs
│   │   │       ├── artist.ejs
│   │   │       ├── audiolabs.ejs
│   │   │       ├── browse.ejs
│   │   │       ├── charts.ejs
│   │   │       ├── cider-multiroom.ejs
│   │   │       ├── cider-playlist.ejs
│   │   │       ├── cider-profile.ejs
│   │   │       ├── collection-list.ejs
│   │   │       ├── connect-linked.ejs
│   │   │       ├── groupings.ejs
│   │   │       ├── home.ejs
│   │   │       ├── installed-themes.ejs
│   │   │       ├── library-albums.ejs
│   │   │       ├── library-artists.ejs
│   │   │       ├── library-recentlyadded.ejs
│   │   │       ├── library-songs.ejs
│   │   │       ├── library-videos.ejs
│   │   │       ├── listen_now.ejs
│   │   │       ├── madeforyou.ejs
│   │   │       ├── oobe.ejs
│   │   │       ├── playlist-inline.ejs
│   │   │       ├── plugin-renderer.ejs
│   │   │       ├── podcasts.ejs
│   │   │       ├── radio.ejs
│   │   │       ├── recordLabel.ejs
│   │   │       ├── remote-pair.ejs
│   │   │       ├── replay.ejs
│   │   │       ├── search.ejs
│   │   │       ├── themes-github.ejs
│   │   │       ├── webview.ejs
│   │   │       └── zoo.ejs
│   │   └── workbox-962786f2.js
│   └── web-remote/
│       ├── ciderframework.css
│       ├── index.js
│       ├── manifest.json
│       ├── style.css
│       ├── views/
│       │   ├── components/
│       │   │   ├── animatedartwork-view.ejs
│       │   │   ├── mediaitem-artwork.ejs
│       │   │   └── mediaitem-square.ejs
│       │   └── index.ejs
│       └── vue.js
├── steam-deck.json
├── tsconfig.json
├── winget.json
└── workbox-config.js
Download .txt
Showing preview only (482K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6733 symbols across 52 files)

FILE: docs/plugins/example/examplePlugin.ts
  class ExamplePlugin (line 3) | class ExamplePlugin {
    method constructor (line 22) | constructor(app: any, store: any) {
    method onReady (line 31) | onReady(win: any): void {
    method onBeforeQuit (line 39) | onBeforeQuit(): void {
    method onPlaybackStateDidChange (line 47) | onPlaybackStateDidChange(attributes: object): void {
    method onNowPlayingItemDidChange (line 56) | onNowPlayingItemDidChange(attributes: object): void {

FILE: docs/plugins/sendSongToTitlebar.ts
  class sendSongToTitlebar (line 1) | class sendSongToTitlebar {
    method constructor (line 14) | constructor() {}
    method onReady (line 18) | onReady(win: any): void {
    method onBeforeQuit (line 24) | onBeforeQuit(): void {}
    method onPlaybackStateDidChange (line 29) | onPlaybackStateDidChange(attributes: any): void {
    method onNowPlayingItemDidChange (line 36) | onNowPlayingItemDidChange(attributes: object): void {}

FILE: resources/macPackager.cjs
  class MacPackager (line 21) | class MacPackager extends platformPackager_1.PlatformPackager {
    method constructor (line 22) | constructor(info) {
    method defaultTarget (line 50) | get defaultTarget() {
    method prepareAppInfo (line 54) | prepareAppInfo(appInfo) {
    method getIconPath (line 57) | async getIconPath() {
    method createTargets (line 60) | createTargets(targets, mapper) {
    method doPack (line 84) | async doPack(outDir, appOutDir, platformName, arch, platformSpecificBu...
    method pack (line 133) | async pack(outDir, arch, targets, taskManager) {
    method sign (line 166) | async sign(appPath, outDir, masOptions, arch) {
    method adjustSignOptions (line 296) | async adjustSignOptions(signOptions, masOptions) {
    method doSign (line 326) | async doSign(opts) {
    method doFlat (line 330) | async doFlat(appPath, outFile, identity, keychain) {
    method getElectronSrcDir (line 338) | getElectronSrcDir(dist) {
    method getElectronDestinationDir (line 341) | getElectronDestinationDir(appOutDir) {
    method applyCommonInfo (line 345) | async applyCommonInfo(appPlist, contentsPath) {
    method signApp (line 380) | async signApp(packContext, isAsar) {
  function getCertificateTypes (line 402) | function getCertificateTypes(isMas, isDevelopment) {

FILE: src/ciderkit/public.js
  method mkv3 (line 4) | async mkv3(route, body, options) {

FILE: src/main/base/app.ts
  class AppEvents (line 15) | class AppEvents {
    method constructor (line 22) | constructor() {
    method start (line 30) | private start(): void {
    method quit (line 121) | public quit() {
    method ready (line 125) | public ready(plug: any) {
    method bwCreated (line 132) | public bwCreated() {
    method LinkHandler (line 166) | private LinkHandler(arg: string) {
    method InstanceHandler (line 231) | private InstanceHandler() {
    method InitTray (line 265) | private InitTray() {
    method setTray (line 325) | private setTray(visible: boolean = utils.getWindow().isVisible()) {
    method initLogging (line 411) | private static initLogging() {
    method setLoginSettings (line 433) | private static setLoginSettings() {

FILE: src/main/base/browserwindow.ts
  class BrowserWindow (line 26) | class BrowserWindow {
    method StartWatcher (line 350) | StartWatcher(path: string) {
    method StopWatcher (line 388) | async StopWatcher() {
    method createWindow (line 398) | async createWindow(): Promise<Electron.BrowserWindow> {
    method verifyFiles (line 477) | private static verifyFiles(): void {
    method startWebServer (line 496) | private startWebServer(): void {
    method startSession (line 688) | private startSession(): void {
    method startHandlers (line 759) | private startHandlers(): void {
    method getIP (line 1642) | private static getIP(): string {
    method broadcastRemote (line 1668) | private async broadcastRemote() {

FILE: src/main/base/castcontroller.ts
  class CiderCastController (line 7) | class CiderCastController extends RequestResponseController {
    method constructor (line 8) | constructor(client: string, sourceId: string, destinationId: string) {
    method sendIp (line 17) | sendIp(ip: string) {
    method kill (line 25) | kill() {

FILE: src/main/base/castreceiver.ts
  class CiderReceiver (line 8) | class CiderReceiver extends Application {
    method constructor (line 13) | constructor(_client: unknown, _session: unknown) {
    method getStatus (line 29) | getStatus(callback: unknown) {
    method load (line 33) | load(media: unknown, options: unknown, callback: unknown) {
    method play (line 37) | play(callback: unknown) {
    method pause (line 41) | pause(callback: unknown) {
    method stop (line 45) | stop(callback: unknown) {
    method seek (line 49) | seek(currentTime: unknown, callback: unknown) {
    method queueLoad (line 53) | queueLoad(items: unknown, options: unknown, callback: unknown) {
    method queueInsert (line 57) | queueInsert(items: unknown, options: unknown, callback: unknown) {
    method queueRemove (line 61) | queueRemove(itemIds: unknown, options: unknown, callback: unknown) {
    method queueReorder (line 65) | queueReorder(itemIds: unknown, options: unknown, callback: unknown) {
    method queueUpdate (line 69) | queueUpdate(items: unknown, callback: unknown) {
    method sendIp (line 73) | sendIp(opts: unknown) {
    method kill (line 77) | kill(opts: unknown) {

FILE: src/main/base/plugins.ts
  class Plugins (line 19) | class Plugins {
    method constructor (line 25) | constructor() {
    method getPluginFromMap (line 29) | public static getPluginFromMap(plugin: string): any {
    method getPlugins (line 37) | public getPlugins(): any {
    method callPlugins (line 104) | public callPlugins(event: string, ...args: any[]) {
    method callPlugin (line 117) | public callPlugin(plugin: string, event: string, ...args: any[]) {

FILE: src/main/base/store.ts
  class Store (line 5) | class Store {
    method constructor (line 242) | constructor() {
    method pushToCloud (line 254) | static pushToCloud(): void {
    method ipcHandler (line 316) | private ipcHandler(): void {

FILE: src/main/base/utils.ts
  class utils (line 10) | class utils {
    method getPath (line 56) | static getPath(name: string): string {
    method getApp (line 64) | static getApp(): Electron.App {
    method getIPCMain (line 71) | static getIPCMain(): Electron.IpcMain {
    method getExpress (line 79) | static getExpress(): any {
    method fetch (line 87) | static async fetch(url: string, opts: object = {}) {
    method initializeTranslations (line 106) | static async initializeTranslations() {
    method getLocale (line 119) | static getLocale(language: string, key?: string): string | object {
    method getStoreValue (line 140) | static getStoreValue(key: string): any {
    method getStore (line 148) | static getStore(): Object {
    method getStoreInstance (line 156) | static getStoreInstance(): ElectronStore {
    method setStoreValue (line 165) | static setStoreValue(key: string, value: any): void {
    method pushStoreToConnect (line 173) | static pushStoreToConnect(): Function {
    method getWindow (line 180) | static getWindow(): Electron.BrowserWindow {
    method loadPluginFrontend (line 188) | static loadPluginFrontend(path: string): void {}
    method loadJSFrontend (line 190) | static loadJSFrontend(path: string): void {

FILE: src/main/base/wsapi.ts
  type standardResponse (line 4) | interface standardResponse {
  class wsapi (line 11) | class wsapi {
    method constructor (line 18) | constructor(win: any) {
    method createId (line 22) | createId() {
    method InitWebSockets (line 31) | public async InitWebSockets() {
    method sendToClient (line 287) | sendToClient(_id: any) {
    method updatePlaybackState (line 291) | updatePlaybackState(attr: any) {
    method returnMusicKitApi (line 303) | returnMusicKitApi(results: any, method: any) {
    method returnDynamic (line 315) | returnDynamic(results: any, type: any) {
    method returnLyrics (line 327) | returnLyrics(results: any) {
    method returnSearch (line 339) | returnSearch(results: any) {
    method returnSearchLibrary (line 351) | returnSearchLibrary(results: any) {
    method returnQueue (line 363) | returnQueue(queue: any) {
    method returnmaxVolume (line 375) | returnmaxVolume(vol: any) {
    method returnLibraryStatus (line 387) | returnLibraryStatus(inLibrary: boolean, rating: number) {
    method returnRatingStatus (line 402) | returnRatingStatus(kind: string, id: string, rating: number) {
    method returnLibraryChange (line 414) | returnLibraryChange(kind: string, id: string, shouldAdd: boolean) {

FILE: src/main/plugins/chromecast.ts
  class ChromecastPlugin (line 10) | class ChromecastPlugin {
    method searchForGCDevices (line 41) | private async searchForGCDevices() {
    method getServiceDescription (line 89) | private getServiceDescription(url: any, address: any) {
    method ondeviceup (line 97) | private ondeviceup(host: any, name: any, location: any, type: any) {
    method parseServiceDescription (line 118) | private async parseServiceDescription(body: any, address: any, url: an...
    method loadMedia (line 134) | private loadMedia(client: any, song: any, artist: any, album: any, alb...
    method getIp (line 195) | private getIp() {
    method stream (line 217) | private stream(device: any, song: any, artist: any, album: any, albuma...
    method setupGCServer (line 282) | private async setupGCServer() {
    method constructor (line 297) | constructor(utils: { getApp: () => any; getStore: () => any }) {
    method onReady (line 305) | onReady(win: any): void {
    method onBeforeQuit (line 342) | onBeforeQuit(): void { }
    method onNowPlayingItemDidChange (line 348) | onNowPlayingItemDidChange(attributes: any): void { }
    method onRendererReady (line 350) | onRendererReady(): void {

FILE: src/main/plugins/discordrpc.ts
  class DiscordRPC (line 5) | class DiscordRPC {
    method constructor (line 42) | constructor(utils: any) {
    method onReady (line 50) | onReady(_win: any): void {
    method onRendererReady (line 58) | onRendererReady() {
    method onBeforeQuit (line 112) | onBeforeQuit(): void {
    method onPlaybackStateDidChange (line 120) | onPlaybackStateDidChange(attributes: object): void {
    method playbackTimeDidChange (line 129) | playbackTimeDidChange(attributes: object): void {
    method connect (line 142) | private connect() {
    method setActivity (line 175) | private setActivity(attributes: any) {
    method filterActivity (line 213) | private filterActivity(activity: any, attributes: any): Object {

FILE: src/main/plugins/lastfm.ts
  class lastfm (line 4) | class lastfm {
    method constructor (line 29) | constructor(utils: any) {
    method onReady (line 33) | onReady(_win: Electron.BrowserWindow): void {
    method onRendererReady (line 37) | onRendererReady(): void {
    method initializeLastFM (line 77) | private initializeLastFM(token: string, api: { key: string; secret: st...
    method authenticateLastFM (line 97) | private authenticateLastFM(token: string): void {
    method verifyTrack (line 118) | private verifyTrack(attributes: any, callback: Function): void {
    method scrobbleTrack (line 167) | private scrobbleTrack(attributes: any): void {
    method updateNowPlayingTrack (line 207) | private updateNowPlayingTrack(attributes: any): void {

FILE: src/main/plugins/menubar.ts
  class Thumbar (line 4) | class Thumbar {
    method constructor (line 30) | constructor(_utils: utils) {
    method onReady (line 37) | onReady(_win: Electron.BrowserWindow): void {
    method onBeforeQuit (line 312) | onBeforeQuit(): void {
    method onPlaybackStateDidChange (line 320) | onPlaybackStateDidChange(attributes: object): void {}
    method onNowPlayingItemDidChange (line 326) | onNowPlayingItemDidChange(attributes: object): void {}

FILE: src/main/plugins/mpris.ts
  class mpris (line 3) | class mpris {
    method constructor (line 27) | constructor(utils: any) {
    method linuxOnly (line 37) | private static linuxOnly(_target: any, _propertyKey: string, descripto...
    method connect (line 48) | private static connect() {
    method updateMetaData (line 113) | private static updateMetaData(attributes: any) {
    method clearState (line 133) | private static clearState() {
    method onReady (line 147) | onReady(_: any): void {
    method onRendererReady (line 155) | onRendererReady(): void {
    method onBeforeQuit (line 163) | onBeforeQuit(): void {
    method onPlaybackStateDidChange (line 173) | onPlaybackStateDidChange(attributes: any): void {
    method playbackTimeDidChange (line 182) | playbackTimeDidChange(attributes: object): void {

FILE: src/main/plugins/playbackNotifications.ts
  class playbackNotifications (line 7) | class playbackNotifications {
    method createNotification (line 26) | createNotification(a: any): void {
    method constructor (line 83) | constructor(utils: any) {

FILE: src/main/plugins/raop.ts
  class RAOP (line 7) | class RAOP {
    method ondeviceup (line 85) | private ondeviceup(name: any, host: any, port: any, addresses: any, te...
    method constructor (line 152) | constructor(utils: { getStore: () => any; getApp: () => any }) {
    method onReady (line 161) | async onReady(win: any): Promise<void> {
    method disconnectAirplay (line 382) | private disconnectAirplay(identifier: any = "") {
    method onBeforeQuit (line 459) | onBeforeQuit(): void {}
    method onNowPlayingItemDidChange (line 465) | onNowPlayingItemDidChange(attributes: any): void {
    method onPlaybackStateDidChange (line 486) | onPlaybackStateDidChange(attributes: any): void {
    method playbackTimeDidChange (line 503) | playbackTimeDidChange(attributes: any): void {

FILE: src/main/plugins/thumbar.ts
  class Thumbar (line 5) | class Thumbar {
    method windowsOnly (line 39) | private static windowsOnly(_target: any, _propertyKey: string, descrip...
    method updateButtons (line 50) | private updateButtons(attributes: any) {
    method constructor (line 95) | constructor(a: { getApp: () => any }) {
    method onReady (line 104) | onReady(win: Electron.BrowserWindow): void {
    method onBeforeQuit (line 113) | onBeforeQuit(): void {
    method onPlaybackStateDidChange (line 122) | onPlaybackStateDidChange(attributes: object): void {
    method onNowPlayingItemDidChange (line 131) | onNowPlayingItemDidChange(attributes: object): void {

FILE: src/main/plugins/webNowPlaying.ts
  class WebNowPlaying (line 25) | class WebNowPlaying {
    method constructor (line 39) | constructor() {
    method windowsOnly (line 48) | private static windowsOnly(_target: any, _propertyKey: string, descrip...
    method sendSongInfo (line 54) | private sendSongInfo(attributes: any) {
    method fireEvent (line 103) | private fireEvent(evt: WebSocket.MessageEvent) {
    method onReady (line 159) | public onReady(win: any) {
    method onBeforeQuit (line 215) | public onBeforeQuit() {
    method onPlaybackStateDidChange (line 232) | public onPlaybackStateDidChange(attributes: any) {
    method onNowPlayingItemDidChange (line 241) | public onNowPlayingItemDidChange(attributes: any) {

FILE: src/main/providers/local/index.ts
  class LocalFiles (line 9) | class LocalFiles {
    method getDataType (line 15) | static getDataType(item_id: String | any) {
    method scanLibrary (line 36) | static async scanLibrary() {
    method getFiles (line 130) | static async getFiles(dir: string): Promise<string[]> {
    method setupHandlers (line 171) | static setupHandlers() {

FILE: src/preload/cider-preload.js
  method sleep (line 95) | sleep(ms) {
  method fetchSongRelationships (line 101) | async fetchSongRelationships({ id = this.getAttributes().songId, relatio...

FILE: src/renderer/apple-hls-old.js
  class d (line 8) | class d {
    method constructor (line 9) | constructor() {
    method uint8ArrayToUint32Array_ (line 12) | uint8ArrayToUint32Array_(e) {
    method initTable (line 19) | initTable() {
    method expandKey (line 47) | expandKey(e) {
    method networkToHostOrderSwap (line 72) | networkToHostOrderSwap(e) {
    method decrypt (line 75) | decrypt(e, t, i) {
    method destroy (line 99) | destroy() {
  class i (line 103) | class i {
    method constructor (line 104) | constructor(e, t) {
  class p (line 132) | class p extends Error {
    method constructor (line 133) | constructor(e, t, i, r, n) {
  class R (line 137) | class R extends p {
    method constructor (line 138) | constructor(e, t, i, r, n) {
  class V (line 440) | class V extends p {
    method constructor (line 441) | constructor(e, t, i) {
  class D (line 445) | class D extends p {
    method constructor (line 446) | constructor(e, t, i) {
  class F (line 450) | class F extends p {
    method constructor (line 451) | constructor(e, t, i, r) {
  function S (line 456) | function S(e) {
  function B (line 460) | function B(e, t) {
  function g (line 467) | function g(e, t) {
  function y (line 471) | function y(e, t) {
  function b (line 475) | function b(e, t) {
  method constructor (line 479) | constructor() {
  method _on (line 482) | _on(e, t, i = !1) {
  method _off (line 485) | _off(e, t) {
  method on (line 488) | on(e, t) {
  method off (line 494) | off(e, t) {
  method addListener (line 499) | addListener(e, t) {
  method once (line 502) | once(e, t) {
  method removeListener (line 508) | removeListener(e, t) {
  method removeAllListeners (line 511) | removeAllListeners(e) {
  method setMaxListeners (line 514) | setMaxListeners(e) {
  method getMaxListeners (line 517) | getMaxListeners() {
  method listeners (line 520) | listeners(e) {
  method rawListeners (line 523) | rawListeners(e) {
  method emit (line 526) | emit(e, ...t) {
  method listenerCount (line 537) | listenerCount(e) {
  method prependListener (line 540) | prependListener(e, t) {
  method prependOnceListener (line 546) | prependOnceListener(e, t) {
  method eventNames (line 552) | eventNames() {
  class a (line 556) | class a extends t {
    method trigger (line 557) | trigger(e, t) {
  function E (line 562) | function E(e, t, i, r, n) {
  class u (line 579) | class u {
    method constructor (line 580) | constructor(e, t, i, r, n) {
    method probe (line 583) | static probe(e, t) {
    method resetTimeStamp (line 586) | resetTimeStamp(e) {}
    method resetInitSegment (line 587) | resetInitSegment(e, t, i, r) {}
    method destroy (line 588) | destroy() {}
  class c (line 590) | class c extends u {
    method constructor (line 591) | constructor(e, t, i, r, n) {
  class h (line 595) | class h {
    method constructor (line 596) | constructor(e, t, i) {
    method resetInitSegment (line 599) | resetInitSegment() {}
    method resetTimeStamp (line 600) | resetTimeStamp(e) {}
    method destroy (line 601) | destroy() {}
  method strToUtf8array (line 609) | strToUtf8array(e) {
  method strToUtf8array (line 616) | strToUtf8array(e) {
  class C (line 628) | class C {
    method constructor (line 629) | constructor(e, t) {
    method isHeader (line 646) | static isHeader(e, t) {
    method readSynchSafeUint32 (line 649) | static readSynchSafeUint32(e) {
    method readUTF (line 652) | static readUTF(e, t, i) {
    method isID3Frame (line 658) | isID3Frame(e, t) {
    method decodeID3Frame (line 661) | decodeID3Frame(e) {
    method decodeTxxxFrame (line 667) | decodeTxxxFrame(e) {
    method decodeWxxxFrame (line 678) | decodeWxxxFrame(e) {
    method decodeTextFrame (line 689) | decodeTextFrame(e) {
    method decodePrivFrame (line 698) | decodePrivFrame(e) {
    method _extractID3Frame (line 708) | _extractID3Frame(e, t, i, r, n) {
    method _parseID3Frames (line 716) | _parseID3Frames(e, t, i) {
    method id3utf8ArrayToStr (line 737) | id3utf8ArrayToStr(e) {
    method hasTimeStamp (line 764) | get hasTimeStamp() {
    method timeStamp (line 767) | get timeStamp() {
    method audioType (line 770) | get audioType() {
    method length (line 773) | get length() {
    method payload (line 776) | get payload() {
    method frames (line 779) | get frames() {
    method minor (line 782) | get minor() {
    method revision (line 785) | get revision() {
  class K (line 793) | class K extends c {
    method resetInitSegment (line 794) | resetInitSegment(e, t) {
    method probe (line 797) | static probe(e, t) {
    method append (line 803) | append(e, t, i, r, n) {
  class q (line 864) | class q {
    method bsReadAndUpdate (line 865) | bsReadAndUpdate(e, t, i) {
    method bsWriteAndUpdate (line 869) | bsWriteAndUpdate(e, t, i, r) {
    method bsSkip (line 873) | bsSkip(e, t) {
    method readBits (line 876) | readBits(i, r, n) {
    method writeBits (line 902) | writeBits(t, i, r, n) {
    method updateOffset (line 920) | updateOffset(e, t) {
  function H (line 926) | function H(e, t) {
  function j (line 930) | function j(e, t, i, r) {
  function Q (line 953) | function Q(e, t, i) {
  class z (line 962) | class z extends c {
    method resetInitSegment (line 963) | resetInitSegment(e, t) {
    method probe (line 966) | static probe(e, t) {
    method append (line 974) | append(e, t, i, r, n) {
  class J (line 1155) | class J extends c {
    method resetInitSegment (line 1156) | resetInitSegment(e, t) {
    method probe (line 1159) | static probe(e, t) {
    method append (line 1167) | append(e, t, i, r, n) {
  class ie (line 1310) | class ie extends c {
    method resetInitSegment (line 1311) | resetInitSegment(e, t) {
    method probe (line 1314) | static probe(e, t) {
    method append (line 1322) | append(e, t, i, r, n) {
  function re (line 1359) | function re(e, t) {
  function ne (line 1375) | function ne(e) {
  function se (line 1379) | function se(e, t) {
  function ae (line 1383) | function ae(e, i = 3) {
  function le (line 1388) | function le(e) {
  function de (line 1392) | function de(e) {
  function ue (line 1402) | function ue(e) {
  function ce (line 1408) | function ce(e) {
  class pe (line 1414) | class pe {
    method init (line 1415) | static init() {
    method set16 (line 1487) | static set16(e, t, i) {
    method set32 (line 1490) | static set32(e, t, i) {
    method box (line 1493) | static box(e) {
    method hdlr (line 1502) | static hdlr(e) {
    method mdat (line 1505) | static mdat(e) {
    method mdhd (line 1508) | static mdhd(e, t) {
    method mdia (line 1514) | static mdia(e) {
    method mfhd (line 1520) | static mfhd(e) {
    method minf (line 1523) | static minf(e) {
    method moof (line 1526) | static moof(e, t) {
    method moov (line 1531) | static moov(e) {
    method mvex (line 1537) | static mvex(e) {
    method mvhd (line 1543) | static mvhd(e, t) {
    method sdtp (line 1550) | static sdtp(e) {
    method stbl (line 1557) | static stbl(e) {
    method avc1 (line 1565) | static avc1(e) {
    method esds (line 1579) | static esds(e) {
    method audioStsd (line 1583) | static audioStsd(e) {
    method dac3 (line 1587) | static dac3(e) {
    method dec3 (line 1591) | static dec3(e) {
    method mp4a (line 1594) | static mp4a(e, t) {
    method mp3 (line 1601) | static mp3(e) {
    method ac3 (line 1604) | static ac3(e, t) {
    method ec3 (line 1609) | static ec3(e, t) {
    method stsd (line 1614) | static stsd(e) {
    method tkhd (line 1622) | static tkhd(e) {
    method traf (line 1631) | static traf(e, t) {
    method trak (line 1644) | static trak(e) {
    method trex (line 1652) | static trex(e) {
    method trun (line 1656) | static trun(e, t) {
    method initSegment (line 1665) | static initSegment(e) {
    method saio (line 1671) | static saio(e) {
    method saiz (line 1675) | static saiz(e, t) {
    method senc (line 1681) | static senc(e) {
    method sinf (line 1715) | static sinf(e, t, i) {
    method frma (line 1718) | static frma(e) {
    method schm (line 1721) | static schm() {
    method schi (line 1724) | static schi(e, t) {
    method tenc (line 1727) | static tenc(e, t) {
    method sbgp (line 1734) | static sbgp(e) {
    method sgpd (line 1739) | static sgpd(e) {
    method pssh (line 1748) | static pssh(e, t, i) {
  method isDolbyAtmos (line 1778) | isDolbyAtmos(e, t) {
  method isAAC (line 1782) | isAAC(e) {
  method isMP3 (line 1785) | isMP3(e) {
  method isCompatibleCodecString (line 1801) | isCompatibleCodecString(e, t) {
  method getSegmentCodec (line 1816) | getSegmentCodec(e) {
  method getChannelCount (line 1827) | getChannelCount(e) {
  method avc1toavcoti (line 1832) | avc1toavcoti(e) {
  method getDynamicRangeType (line 1838) | getDynamicRangeType(e, t) {
  method getCompressionType (line 1842) | getCompressionType(e) {
  method isHigherCodecByFamily (line 1846) | isHigherCodecByFamily(e, t) {
  class Te (line 1869) | class Te {
    method getTrack (line 1870) | static getTrack(e, t, i, r, n) {
    method getSample (line 1905) | static getSample(e, t) {
    method getSegment (line 1918) | static getSegment(e, i, r, n) {
  class Ee (line 1967) | class Ee extends h {
    method constructor (line 1968) | constructor(e, t, i, r, n) {
    method resetTimeStamp (line 1975) | resetTimeStamp(e) {
    method resetInitSegment (line 1978) | resetInitSegment() {
    method remuxEsTracks (line 1981) | remuxEsTracks(r, n, s, a, o, l, d, u, c, h) {
    method updateInitPTSDTS (line 2067) | updateInitPTSDTS(e, t, i) {
    method generateIS (line 2089) | generateIS(e, t) {
    method remuxVideo (line 2134) | remuxVideo(n, e, s, a, o) {
    method remuxAudio (line 2263) | remuxAudio(r, i, n, e, s) {
    method remuxEmptyAudio (line 2400) | remuxEmptyAudio(t, e, i, r, n, s) {
    method remuxID3 (line 2422) | remuxID3(t, e) {
    method remuxText (line 2432) | remuxText(t, e) {
  function Ie (line 2447) | function Ie(e, t) {
  function we (line 2455) | function we(e) {
  function Ae (line 2463) | function Ae(e, t, i) {
  function t (line 2513) | function t(e) {
  function De (line 2546) | function De(s) {
  function Me (line 2592) | function Me(e, t, i, r) {
  function xe (line 2638) | function xe(e, t, i, r) {
  function Pe (line 2645) | function Pe(i, r, n) {
  function Re (line 2655) | function Re(e) {
  function Le (line 2667) | function Le() {
  function _e (line 2671) | function _e(e) {
  function Ne (line 2675) | function Ne() {}
  function Fe (line 2677) | function Fe() {
  function Be (line 2681) | function Be() {
  function $e (line 2686) | function $e(e = {}) {
  function Ke (line 2722) | function Ke(e, t) {
  function qe (line 2727) | function qe(r, n, e) {
  function He (line 2753) | function He(e) {
  function je (line 2757) | function je(e, t = 1 / 0) {
  method readUint16 (line 2772) | readUint16(e, t) {
  method readUint32 (line 2777) | readUint32(e, t) {
  method writeUint32 (line 2781) | writeUint32(e, t, i) {
  method readUint64 (line 2784) | readUint64(e, t) {
  method writeUint64 (line 2788) | writeUint64(e, t, i) {
  method findBox (line 2794) | findBox(e, t) {
  method findBoxWithOffset (line 2800) | findBoxWithOffset(e, t, i, r) {
  class ze (line 2820) | class ze extends h {
    method constructor (line 2821) | constructor(e, t, i, r, n) {
    method _isCommonEncryptionInternal (line 2824) | static _isCommonEncryptionInternal(e) {
    method remuxInitSegment (line 2827) | static remuxInitSegment(c, h, p, f) {
    method remuxCbc2InitSegment (line 2893) | static remuxCbc2InitSegment(i, r, n) {
    method remuxOverflowSegment (line 2911) | static remuxOverflowSegment(i, e) {
    method remuxOverflowMoof (line 2934) | static remuxOverflowMoof(e) {
    method remuxOverflowTraf (line 2966) | static remuxOverflowTraf(e) {
    method remuxText (line 2975) | remuxText(e, t) {
    method remuxIFrame (line 2980) | remuxIFrame(e, t, i, r, n) {
    method remuxEmsgAndRawData (line 3004) | remuxEmsgAndRawData(e, t, i, r, n, s, a, o, l, d) {
    method remuxID3 (line 3020) | remuxID3(t, e) {
  class Ze (line 3035) | class Ze extends u {
    method constructor (line 3036) | constructor(e, t, i, r, n) {
    method resetTimeStamp (line 3039) | resetTimeStamp(e) {
    method isHEVCFlavor (line 3048) | static isHEVCFlavor(e) {
    method resetInitSegment (line 3054) | resetInitSegment(t, i, r) {
    method probe (line 3104) | static probe(e, t) {
    method parseHvcC (line 3107) | static parseHvcC(e) {
    method hvcCToCodecString (line 3119) | static hvcCToCodecString(t, i) {
    method parseDvcC (line 3131) | static parseDvcC(e) {
    method dvcCToCodecString (line 3140) | static dvcCToCodecString(e, t) {
    method parseVpcC (line 3143) | static parseVpcC(e) {
    method vpcCToCodecString (line 3151) | static vpcCToCodecString(e, t) {
    method checkAndAddLeadingZero (line 3154) | static checkAndAddLeadingZero(e) {
    method parseInitSegment (line 3157) | static parseInitSegment(e) {
    method parseStsd (line 3228) | static parseStsd(e) {
    method has32BitTfdts (line 3290) | static has32BitTfdts(e) {
    method getStartDtsTs (line 3297) | static getStartDtsTs(r, e) {
    method offsetStartDTS (line 3319) | static offsetStartDTS(r, e, l, n) {
    method writeStartDTS (line 3347) | static writeStartDTS(i, e, s) {
    method parseSAIO (line 3362) | static parseSAIO(e) {
    method parseSAIZ (line 3370) | static parseSAIZ(e) {
    method parseSubsample (line 3375) | static parseSubsample(e, t) {
    method isSEIMessage (line 3388) | static isSEIMessage(e, t) {
    method parseCLCPSample (line 3391) | static parseCLCPSample(e, t, i) {
    method parseSamples (line 3411) | static parseSamples(e, S, b, T, E, I) {
    method parseEmsg (line 3531) | static parseEmsg(e) {
    method extractID3PayloadCreateID3Track (line 3563) | static extractID3PayloadCreateID3Track(e, t, i, r) {
    method append (line 3599) | append(e, t, i, r, n, s, a) {
    method extractSEICaptionsFromNALu (line 3656) | static extractSEICaptionsFromNALu(a, o) {
  class tt (line 3712) | class tt {
    method constructor (line 3713) | constructor(e, t) {
    method bytesAvailable (line 3716) | get bytesAvailable() {
    method loadWord (line 3719) | loadWord() {
    method skipBits (line 3728) | skipBits(e) {
    method readBits (line 3732) | readBits(e) {
    method skipLZ (line 3737) | skipLZ() {
    method skipUEG (line 3743) | skipUEG() {
    method skipEG (line 3746) | skipEG() {
    method readUEG (line 3749) | readUEG() {
    method readEG (line 3753) | readEG() {
    method readBoolean (line 3757) | readBoolean() {
    method readUByte (line 3760) | readUByte() {
    method readUShort (line 3763) | readUShort() {
    method readUInt (line 3766) | readUInt() {
    method skipScalingList (line 3769) | skipScalingList(e) {
    method readSPS (line 3774) | readSPS() {
    method readSliceType (line 3863) | readSliceType() {
  method constructor (line 3871) | constructor(e, t, i, r, n) {
  method probe (line 3874) | static probe(e, t) {
  method resetInitSegment (line 3877) | resetInitSegment(e, t, i) {
  method append (line 3916) | append(e, t, i, r, n, s, a) {
  method destroy (line 4021) | destroy() {
  method _parsePAT (line 4024) | _parsePAT(e, t) {
  method _parsePMT (line 4027) | _parsePMT(e, t, i) {
  method _parsePES (line 4076) | _parsePES(e) {
  method pushAccesUnit (line 4111) | pushAccesUnit(e, t) {
  method _parseAVCPES (line 4125) | _parseAVCPES(o, e) {
  method _createAVCSample (line 4200) | _createAVCSample(e, t, i, r) {
  method _insertSampleInOrder (line 4210) | _insertSampleInOrder(t, i) {
  method _getLastNalUnit (line 4222) | _getLastNalUnit() {
  method _parseAVCNALu (line 4235) | _parseAVCNALu(e) {
  method discardEPB (line 4277) | discardEPB(e) {
  method _parseAACPES (line 4289) | _parseAACPES(e) {
  method _parseMPEGPES (line 4327) | _parseMPEGPES(e) {
  method _parseDolbyPES (line 4330) | _parseDolbyPES(e) {
  class st (line 4375) | class st extends a {
    method constructor (line 4376) | constructor(e, t, i, r) {
    method destroy (line 4379) | destroy() {
    method push (line 4385) | push(t, i, r, n, s, a, o, l, d, u, c, h) {
  function at (line 4436) | function at() {
  class ot (line 4440) | class ot {
    method constructor (line 4441) | constructor(e, t) {
  class lt (line 4457) | class lt {
    method constructor (line 4458) | constructor(e) {
    method register (line 4476) | register(e, t) {
    method unregister (line 4480) | unregister(e) {
    method invoke (line 4484) | invoke(i, r, n) {
    method teardown (line 4497) | teardown(e) {
    method _respond (line 4500) | _respond(e, t, i, r, n) {
    method _send (line 4511) | _send(e, t = []) {
  function ut (line 4544) | function ut(e, t) {
  function ht (line 4560) | function ht(e, t, i, r) {
  function pt (line 4569) | function pt(e, t) {
  function ft (line 4573) | function ft(e) {
  function mt (line 4589) | function mt(e, t) {
  function gt (line 4611) | function gt() {
  function yt (line 4616) | function yt(e) {
  method useDeprecatedSynchronousErrorHandling (line 4622) | set useDeprecatedSynchronousErrorHandling(e) {
  method useDeprecatedSynchronousErrorHandling (line 4625) | get useDeprecatedSynchronousErrorHandling() {
  function bt (line 4630) | function bt(e) {
  function It (line 4648) | function It(e) {
  function Ot (line 4711) | function Ot(e) {
  function kt (line 4715) | function kt(e) {
  function Ct (line 4721) | function Ct(e) {
  function Lt (line 4789) | function Lt(e, t, i, r) {
  function _t (line 4796) | function _t(e, t, i) {
  function Ft (line 4818) | function Ft(e) {
  function Bt (line 4822) | function Bt() {
  function Ut (line 4827) | function Ut(t) {
  function Vt (line 4900) | function Vt(e) {
  function Kt (line 4904) | function Kt(e) {
  function Jt (line 4960) | function Jt(e, t) {
  function Zt (line 4965) | function Zt() {
  function ei (line 4970) | function ei(e) {
  function ti (line 4975) | function ti(e, t) {
  function ii (line 4980) | function ii() {
  function ri (line 4984) | function ri() {
  function wi (line 5136) | function wi() {
  function Ai (line 5140) | function Ai(e, t) {
  function Oi (line 5148) | function Oi(e, t) {
  function ki (line 5152) | function ki(e, t) {
  function Ci (line 5157) | function Ci(e, t) {
  function Di (line 5162) | function Di(e, t) {
  function Mi (line 5166) | function Mi(e) {
  function xi (line 5171) | function xi(e, t) {
  function Pi (line 5176) | function Pi(e, t) {
  function Ri (line 5181) | function Ri(e, t) {
  function Li (line 5186) | function Li(e) {
  function _i (line 5190) | function _i(e) {
  function Ni (line 5199) | function Ni(e) {
  function Bi (line 5209) | function Bi(r, n) {
  function Ui (line 5219) | function Ui(e, t) {
  function $i (line 5223) | function $i() {
  function Vi (line 5229) | function Vi(t, i) {
  function Ki (line 5240) | function Ki(e) {
  function Hi (line 5282) | function Hi(e, t, i) {
  function ji (line 5286) | function ji(t, i) {
  function rr (line 5348) | function rr() {
  function nr (line 5353) | function nr(e, t, i) {
  function sr (line 5359) | function sr(e, t, i) {
  function ar (line 5365) | function ar(e, t) {
  function or (line 5369) | function or() {}
  function ur (line 5373) | function ur() {
  function cr (line 5377) | function cr() {
  function hr (line 5381) | function hr(t, i) {
  function br (line 5414) | function br(e, t, i) {
  function Tr (line 5419) | function Tr() {
  function Er (line 5423) | function Er(e, t, i) {
  function Ir (line 5428) | function Ir(e, t) {
  function Or (line 5436) | function Or(e) {
  function Cr (line 5478) | function Cr(e, t, i, r, n) {
  function Mr (line 5483) | function Mr() {
  function Lr (line 5522) | function Lr(e, t) {
  function _r (line 5527) | function _r(e) {
  function Nr (line 5531) | function Nr(e, t) {
  function Fr (line 5600) | function Fr(e, t) {
  function Kr (line 5618) | function Kr() {
  function qr (line 5622) | function qr(e) {
  function Hr (line 5627) | function Hr(e, t) {
  function jr (line 5631) | function jr(t, n, i) {
  function zr (line 5670) | function zr(e, t, i) {
  function Xr (line 5676) | function Xr(e, t) {
  function Yr (line 5680) | function Yr(e) {
  function Jr (line 5684) | function Jr() {
  function Zr (line 5689) | function Zr(i) {
  function en (line 5701) | function en() {
  function tn (line 5720) | function tn(l, d) {
  function rn (line 5745) | function rn(e, i, r, t) {
  function nn (line 5783) | function nn(e, t, i) {
  function sn (line 5789) | function sn(e) {
  function an (line 5793) | function an() {
  function ln (line 5802) | function ln(t, i) {
  function hn (line 5820) | function hn(e, t, i) {
  function pn (line 5825) | function pn(e, t) {
  function fn (line 5829) | function fn() {
  function vn (line 5862) | function vn(e) {
  function Sn (line 5867) | function Sn() {}
  function bn (line 5869) | function bn(i, e, r) {
  function Tn (line 5882) | function Tn(e) {
  function En (line 5892) | function En() {
  function Mn (line 5982) | function Mn(e, t, i) {
  function xn (line 5987) | function xn(e) {
  function Pn (line 5991) | function Pn(e) {
  function Rn (line 5995) | function Rn(e, t, i) {
  function Ln (line 6000) | function Ln(e) {
  function Bn (line 6028) | function Bn(e, t) {
  function Un (line 6033) | function Un(e) {
  function $n (line 6037) | function $n(e, t) {
  function Vn (line 6047) | function Vn(i) {
  function jn (line 6073) | function jn(e, t, i) {
  function Qn (line 6078) | function Qn(e) {
  function Wn (line 6082) | function Wn(e, t) {
  function Gn (line 6086) | function Gn(t, i) {
  function Jn (line 6107) | function Jn(e, t, i) {
  function Zn (line 6112) | function Zn(e, t) {
  function es (line 6116) | function es(e) {
  function ns (line 6128) | function ns(e, t) {
  function ss (line 6133) | function ss(e) {
  function as (line 6137) | function as(e) {
  function cs (line 6166) | function cs(e, t, i) {
  function hs (line 6171) | function hs(e, t) {
  function Ss (line 6216) | function Ss(e, t) {
  function bs (line 6221) | function bs(e, t) {
  function Ts (line 6226) | function Ts(e, t) {
  function Es (line 6231) | function Es(e) {
  function Is (line 6235) | function Is(t, i) {
  function ks (line 6261) | function ks(e, t, i) {
  function Cs (line 6266) | function Cs(e, t) {
  function Ds (line 6270) | function Ds(t) {
  function Rs (line 6284) | function Rs(e, t) {
  function Ls (line 6289) | function Ls(e) {
  function _s (line 6293) | function _s(t, n) {
  function Us (line 6333) | function Us(e, t) {
  function $s (line 6338) | function $s(e) {
  function Vs (line 6342) | function Vs(t) {
  function js (line 6352) | function js(e, t) {
  function Qs (line 6357) | function Qs(e) {
  function Ws (line 6361) | function Ws(t) {
  function Ys (line 6385) | function Ys(e, t) {
  function Js (line 6390) | function Js(e) {
  function Zs (line 6394) | function Zs(t) {
  function ra (line 6406) | function ra(e, t) {
  function na (line 6411) | function na(e) {
  function sa (line 6415) | function sa(t, i) {
  function da (line 6446) | function da(e, t, i, r) {
  function ua (line 6451) | function ua(e, t, i) {
  function ca (line 6461) | function ca(e, t) {
  function ha (line 6465) | function ha() {
  function ga (line 6478) | function ga(e) {
  function ya (line 6483) | function ya() {}
  function va (line 6485) | function va(t) {
  function Ea (line 6519) | function Ea(e, t, i) {
  function Ia (line 6524) | function Ia(e, t) {
  function wa (line 6528) | function wa() {
  function Aa (line 6532) | function Aa() {
  function Oa (line 6541) | function Oa(e, t, i) {
  function ka (line 6569) | function ka(t) {
  function xa (line 6581) | function xa(e, t) {
  function Pa (line 6586) | function Pa(e) {
  function Ra (line 6590) | function Ra() {
  function La (line 6600) | function La(t, n) {
  function Ba (line 6639) | function Ba(e, t) {
  function Ua (line 6644) | function Ua(e) {
  function $a (line 6648) | function $a(e, t) {
  function Va (line 6656) | function Va(t) {
  function ja (line 6670) | function ja(e) {
  function Qa (line 6675) | function Qa(e) {
  function Wa (line 6679) | function Wa(t, i) {
  function Ya (line 6701) | function Ya(e, t, i) {
  function Ja (line 6706) | function Ja(e, t) {
  function Za (line 6710) | function Za(t, i, r) {
  function no (line 6745) | function no(e, t, i, r) {
  function so (line 6750) | function so(e, t, i) {
  function ao (line 6754) | function ao(t, i, r) {
  function co (line 6774) | function co(e, t, i, r, n) {
  function ho (line 6779) | function ho(e, t, i, r) {
  function po (line 6783) | function po(e) {
  function yo (line 6801) | function yo(e, t, i, r, n) {
  function vo (line 6806) | function vo(e, t, i, r) {
  function So (line 6810) | function So(e, t) {
  function bo (line 6820) | function bo() {
  function ko (line 6852) | function ko(e, t, i) {
  function Co (line 6865) | function Co(e, t) {
  function Do (line 6869) | function Do(e, t) {
  function Mo (line 6873) | function Mo(e, t) {
  function xo (line 6877) | function xo(e, t) {
  function Po (line 6881) | function Po(e) {
  function Ro (line 6885) | function Ro(e) {
  function No (line 6891) | function No(e) {
  function Fo (line 6896) | function Fo(e) {
  function Bo (line 6900) | function Bo(e) {
  function Uo (line 6904) | function Uo(e) {
  function $o (line 6908) | function $o(e) {
  function Vo (line 6912) | function Vo(e) {
  function Ko (line 6916) | function Ko(e) {
  function qo (line 6920) | function qo(e) {
  function Ho (line 6924) | function Ho(e) {
  function jo (line 6933) | function jo(e, t) {
  function Wo (line 6959) | function Wo(t) {
  function Jo (line 6971) | function Jo(e) {
  function Zo (line 6975) | function Zo(e) {
  function sl (line 6991) | function sl() {
  function al (line 6995) | function al(e, t) {
  function ol (line 7004) | function ol() {
  function ll (line 7016) | function ll(t) {
  function ul (line 7147) | function ul(e, t) {
  function gl (line 7594) | function gl(e, t) {
  function yl (line 7598) | function yl(e, t) {
  function vl (line 7609) | function vl() {
  function Sl (line 7615) | function Sl(e, t) {
  function bl (line 7623) | function bl(i, e) {
  function Tl (line 7644) | function Tl(e) {
  function El (line 7648) | function El(t, i) {
  function Il (line 7702) | function Il(e) {
  function wl (line 7706) | function wl(e) {
  function Dl (line 7862) | function Dl(e) {
  function Ml (line 7866) | function Ml(e, t) {
  function xl (line 7872) | function xl(e, t) {
  function Pl (line 7878) | function Pl(e, t, r) {
  function Bl (line 7934) | function Bl(e, t) {
  function Ul (line 7938) | function Ul(e, t, i) {
  function $l (line 7951) | function $l(e, t) {
  function Hl (line 8234) | function Hl(e, t, i) {
  function jl (line 8250) | function jl(e, t) {
  function Ql (line 8254) | function Ql(e, t) {
  function Gl (line 8301) | function Gl(e, t) {
  function Jl (line 8355) | function Jl(e, t, i) {
  function Zl (line 8360) | function Zl() {
  function ed (line 8364) | function ed(e) {
  function td (line 8368) | function td(e, t) {
  function ud (line 8492) | function ud(e) {
  function cd (line 8499) | function cd(e) {
  function hd (line 8503) | function hd(t) {
  function md (line 8520) | function md(i, r, t) {
  function gd (line 8528) | function gd(e) {
  function yd (line 8533) | function yd(e, t) {
  function vd (line 8537) | function vd(e, t) {
  function Sd (line 8541) | function Sd(e, t, i) {
  function bd (line 8546) | function bd(e, t) {
  function Td (line 8550) | function Td(e) {
  function Ed (line 8554) | function Ed(e) {
  function Id (line 8558) | function Id(e) {
  function wd (line 8562) | function wd(e) {
  function Ad (line 8579) | function Ad(e, t) {
  function Od (line 8585) | function Od() {
  function kd (line 8589) | function kd(e) {
  function Md (line 8594) | function Md(e) {
  function xd (line 8599) | function xd(e, t) {
  function Pd (line 8603) | function Pd() {
  function Rd (line 8607) | function Rd(e, t) {
  function Ld (line 8611) | function Ld(e) {
  function _d (line 8615) | function _d(e) {
  function Nd (line 8619) | function Nd(e) {
  function Fd (line 8629) | function Fd(e) {
  function Bd (line 8634) | function Bd(e, t) {
  function Ud (line 8641) | function Ud(i, r, n) {
  function $d (line 8651) | function $d(e, t, i, r, n, s) {
  function Vd (line 8660) | function Vd(e, t, i) {
  function Hd (line 8714) | function Hd(e, t) {
  function jd (line 8719) | function jd(e, t) {
  function Qd (line 8728) | function Qd(e) {
  function Wd (line 8732) | function Wd(e) {
  function Gd (line 8814) | function Gd(e) {
  function zd (line 8818) | function zd(e, t, i) {
  function Xd (line 8843) | function Xd(e) {
  function Yd (line 8859) | function Yd(e, t) {
  function Jd (line 8869) | function Jd() {
  function Zd (line 8990) | function Zd() {
  function eu (line 9154) | function eu() {
  function Tu (line 9413) | function Tu(e) {
  function Eu (line 9417) | function Eu(e) {
  function Au (line 9429) | function Au(e, t) {
  function $u (line 9776) | function $u(e) {
  function Vu (line 9787) | function Vu(e) {
  method getMinTimeForCC (line 9863) | getMinTimeForCC(e, t, i, r) {
  method discoSeqNumForTime (line 9875) | discoSeqNumForTime(e, t, i = 0) {
  function Gu (line 9883) | function Gu(e, t, i = 1) {
  function zu (line 9887) | function zu(e, t) {
  class Xu (line 9894) | class Xu {
    method constructor (line 9895) | constructor() {
    method forward (line 9898) | get forward() {
    method isStarted (line 9902) | get isStarted() {
    method start (line 9905) | start(e) {
    method pause (line 9919) | pause() {
    method stop (line 9922) | stop() {
    method timeline (line 9925) | get timeline() {
    method getCurrentTime (line 9928) | getCurrentTime() {
  class Yu (line 9932) | class Yu {
    method constructor (line 9933) | constructor(e) {
    method timeline (line 9936) | get timeline() {
    method getCurrentTime (line 9939) | getCurrentTime() {
  class Zu (line 9949) | class Zu {
    method constructor (line 9950) | constructor(e, t) {
    method destroy (line 9953) | destroy() {
    method resetScaledSegments (line 9956) | resetScaledSegments() {
    method anchorFrag (line 9959) | get anchorFrag() {
    method lastFrag (line 9962) | get lastFrag() {
    method isStarted (line 9965) | get isStarted() {
    method iframeRate (line 9968) | get iframeRate() {
    method iframeClockTimeSeconds (line 9972) | get iframeClockTimeSeconds() {
    method mediaAppendClockTimeSeconds (line 9975) | get mediaAppendClockTimeSeconds() {
    method mediaRootTime (line 9979) | get mediaRootTime() {
    method pause (line 9983) | pause() {
    method stop (line 9986) | stop() {
    method checkHasMore (line 9989) | checkHasMore() {
    method startClocksAndGetFirstFragment (line 9992) | startClocksAndGetFirstFragment(e, t, i, r, n) {
    method getNextFragment (line 10010) | getNextFragment(e, t, i) {
    method nextFragment (line 10033) | nextFragment(e, t, i, r) {
    method handleNextFrag (line 10050) | handleNextFrag(e, t) {
    method hasMore (line 10064) | get hasMore() {
    method handleWaitForMore (line 10067) | handleWaitForMore() {
    method isEndFrag (line 10070) | isEndFrag(e, t) {
  function ec (line 10078) | function ec(e, t) {
  function tc (line 10085) | function tc(t) {
  function sc (line 10097) | function sc(e) {
  function ac (line 10108) | function ac(e) {
  class oc (line 10125) | class oc extends Error {
    method constructor (line 10126) | constructor(e, t) {
  class lc (line 10130) | class lc extends p {
    method constructor (line 10131) | constructor(e, t, i, r, n, s) {
  class dc (line 10135) | class dc extends lc {
    method constructor (line 10136) | constructor(e, t, i, r, n) {
  class uc (line 10140) | class uc extends lc {
    method constructor (line 10141) | constructor(e, t, i, r, n, s, a, o) {
  class cc (line 10154) | class cc extends lc {
    method constructor (line 10155) | constructor(e, t, i, r) {
  class hc (line 10159) | class hc extends lc {
    method constructor (line 10160) | constructor(e, t, i, r, n, s, a) {
  class pc (line 10164) | class pc extends dr {
    method constructor (line 10165) | constructor(e, t, i) {
  class fc (line 10169) | class fc extends lc {
    method constructor (line 10170) | constructor(e, t, i) {
  class mc (line 10174) | class mc extends lc {
    method constructor (line 10175) | constructor(e, t, i, r = []) {
  class gc (line 10179) | class gc extends lc {
    method constructor (line 10180) | constructor(e, t, i, r, n, s, a = !1, o = []) {
  class yc (line 10184) | class yc extends p {
    method constructor (line 10185) | constructor(e, t, i, r, n) {
  function vc (line 10190) | function vc(e, t) {
  class bc (line 10204) | class bc extends kl {
    method constructor (line 10205) | constructor(e) {
    method unresolvedUriLoading$ (line 10208) | get unresolvedUriLoading$() {
  class Tc (line 10212) | class Tc {
    method constructor (line 10213) | constructor(e) {
    method createUnresolvedUriLoading (line 10216) | createUnresolvedUriLoading(e, t, i) {
    method removeUnresolvedUriLoading (line 10223) | removeUnresolvedUriLoading(e) {
  method constructor (line 10228) | constructor() {
  class wc (line 10237) | class wc extends t {
    method trigger (line 10238) | trigger(e, t) {
  class Ac (line 10246) | class Ac {
    method constructor (line 10247) | constructor(e, t) {
    method eventWithOptions (line 10250) | eventWithOptions(e, t, i, r = this._this) {
    method event (line 10254) | event(e, t, i = this._this) {
    method listen (line 10257) | listen(e, t, i, r = this._this) {
  function Oc (line 10262) | function Oc(e, t) {
  function kc (line 10266) | function kc(e, t, i) {
  function Cc (line 10275) | function Cc(y, v) {
  class Mc (line 10366) | class Mc {
    method constructor (line 10367) | constructor(e) {
    method load (line 10370) | load(a, o) {
    method setCustomUrlResponse (line 10395) | setCustomUrlResponse(e, t) {
    method handleExternalResponse (line 10399) | handleExternalResponse(e, t, i, r) {
    method redirectRequest (line 10408) | redirectRequest(e, t, i, n) {
  function Pc (line 10440) | function Pc(e) {
  function Rc (line 10444) | function Rc(e, t) {
  function Lc (line 10453) | function Lc(e, t) {
  function _c (line 10457) | function _c(e, t) {
  function Nc (line 10461) | function Nc(e) {
  function Uc (line 10486) | function Uc(e) {
  class $c (line 10489) | class $c {
    method strToBase64Encode (line 10490) | static strToBase64Encode(e) {
    method base64DecodeToStr (line 10493) | static base64DecodeToStr(e) {
    method base64Encode (line 10496) | static base64Encode(e) {
    method base64UrlEncode (line 10499) | static base64UrlEncode(e) {
    method base64Decode (line 10502) | static base64Decode(e) {
  class Vc (line 10506) | class Vc {
    method strToBase64Encode (line 10507) | static strToBase64Encode(e) {
    method base64DecodeToStr (line 10510) | static base64DecodeToStr(e) {
    method base64Encode (line 10513) | static base64Encode(e) {
    method base64UrlEncode (line 10516) | static base64UrlEncode(e) {
    method base64Decode (line 10519) | static base64Decode(e) {
  function Qc (line 10541) | function Qc(e) {
  function t (line 10567) | function t(e, t, i) {
  class zc (line 10628) | class zc {
    method constructor (line 10629) | constructor(e, t, i, r, n) {
    method keyTagInfo (line 10671) | get keyTagInfo() {
    method clearKeyUriToKeyIdMap (line 10693) | static clearKeyUriToKeyIdMap() {
  class Xc (line 10697) | class Xc {
    method constructor (line 10698) | constructor(e, t, i, r) {
    method isClosing (line 10703) | get isClosing() {
    method isClosed (line 10706) | get isClosed() {
    method destroy (line 10709) | destroy() {
  class Yc (line 10719) | class Yc {
    method constructor (line 10720) | constructor(e, t = null) {
    method requestState (line 10723) | get requestState() {
    method onKeyRequestState$ (line 10726) | get onKeyRequestState$() {
    method destroy (line 10729) | destroy() {
    method abort (line 10732) | abort() {
    method setKeyRequestState (line 10736) | setKeyRequestState(e) {
    method resolveState (line 10745) | resolveState(e, t) {
    method error (line 10758) | error(e) {
  function Jc (line 10767) | function Jc(e) {
  class Zc (line 10770) | class Zc {
    method constructor (line 10771) | constructor(e, t, i, r, n, s, a) {
    method keyStatusChange$ (line 10774) | get keyStatusChange$() {
    method destroy (line 10777) | destroy() {
    method setServerCertificate (line 10786) | setServerCertificate(e = null) {
    method ensureKeyContext (line 10794) | ensureKeyContext(e) {
    method startKeyRequest (line 10803) | startKeyRequest(t) {
    method _abortKeyRequest (line 10846) | _abortKeyRequest(e) {
    method handleKeyExchangeError (line 10852) | handleKeyExchangeError(e, t) {
    method updateItemId (line 10855) | updateItemId(e) {
    method removeKey (line 10858) | removeKey(e) {
    method removeKeyInternal (line 10861) | removeKeyInternal(e) {
    method removeSessions (line 10870) | removeSessions(e, t) {
    method removeSession (line 10878) | removeSession(t) {
    method getKeyRequestInfo (line 10883) | getKeyRequestInfo(e) {
    method setKeyRequestInfo (line 10893) | setKeyRequestInfo(e, t) {
    method sanitizeRequest (line 10897) | sanitizeRequest(e) {
    method generateLicenseChallengeInternal (line 10900) | generateLicenseChallengeInternal(t, e, i) {
    method generateLicenseChallenge (line 10918) | generateLicenseChallenge(e, t) {
    method setParsedResponse (line 10940) | setParsedResponse(e, t) {
    method handleKeyStatusesChange (line 10944) | handleKeyStatusesChange(e) {
    method handleKeyStatusForKey (line 10952) | handleKeyStatusForKey(e, t) {
    method _scheduleRenewal (line 10971) | _scheduleRenewal(e, t) {
    method _signalRenewal (line 10974) | _signalRenewal(e) {
    method _signalError (line 10980) | _signalError(e, t) {
  method constructor (line 11002) | constructor(e, t, i, r, n, s) {
  method requestAccessConfig (line 11005) | static get requestAccessConfig() {
  method needsCert (line 11008) | get needsCert() {
  method getKeyRequestResponse (line 11011) | getKeyRequestResponse(e, t) {
  method parseResponse (line 11028) | parseResponse(e, t) {
  method handleParsedKeyResponse (line 11038) | handleParsedKeyResponse(i, e) {
  method generateInitData (line 11052) | generateInitData(e) {
  method generateRequestInitialized (line 11058) | generateRequestInitialized() {
  method sanitizeRequest (line 11061) | sanitizeRequest(e) {
  method handleKeyMessage (line 11064) | handleKeyMessage(e) {
  class oh (line 11081) | class oh extends Zc {
    method constructor (line 11082) | constructor(e, t, i, r, n, s, a) {
    method systemId (line 11085) | static get systemId() {
    method requestAccessConfig (line 11088) | static get requestAccessConfig() {
    method needsCert (line 11091) | get needsCert() {
    method sanitizeRequest (line 11094) | sanitizeRequest(e) {
    method _scheduleRenewal (line 11101) | _scheduleRenewal(e, t) {
    method handleParsedKeyResponse (line 11109) | handleParsedKeyResponse(t, e) {
    method makeKeyRequests (line 11140) | makeKeyRequests(e) {
    method getSchemeAndFlags (line 11155) | getSchemeAndFlags(e) {
    method generateInitData (line 11161) | generateInitData(e, t, i) {
    method generateRequestInitialized (line 11174) | generateRequestInitialized(t, e) {
    method getKeyRequestResponse (line 11183) | getKeyRequestResponse(e, t) {
    method resolveSPCPromise (line 11192) | resolveSPCPromise(e, t) {
  function uh (line 11199) | function uh(e, t, i) {
  function ch (line 11212) | function ch(t) {
  function hh (line 11228) | function hh(e, t, i, r) {
  function ph (line 11233) | function ph(e) {
  function fh (line 11239) | function fh(e, t, i, r) {
  class mh (line 11246) | class mh extends oh {
    method constructor (line 11247) | constructor(e, t, i, r, n, s) {
    method makeProcessLicenseRequestMessage (line 11250) | makeProcessLicenseRequestMessage(e, t, i) {
    method makeFpsKeySystemInitData (line 11267) | makeFpsKeySystemInitData(e, t, i) {
    method makeKeyRequestMessage (line 11276) | makeKeyRequestMessage(e) {
    method handleKeyMessage (line 11289) | handleKeyMessage(e) {
    method _handleLicenseRelease (line 11330) | _handleLicenseRelease(e) {
  method constructor (line 11363) | constructor(e, t, i, r, n, s) {
  method needsCert (line 11366) | static get needsCert() {
  method handleKeyExchangeError (line 11369) | handleKeyExchangeError(e, t) {
  method _abortKeyRequest (line 11372) | _abortKeyRequest(e) {
  method makeFpsKeySystemInitData (line 11375) | makeFpsKeySystemInitData(e, t, i) {
  method makeKeyRequestMessage (line 11392) | makeKeyRequestMessage(e, t) {
  method makeProcessLicenseRequestMessage (line 11395) | makeProcessLicenseRequestMessage(e, t, i) {
  method handleKeyMessage (line 11402) | handleKeyMessage(e) {
  method _handleLicenseRelease (line 11439) | _handleLicenseRelease(e) {
  class Sh (line 11449) | class Sh extends Zc {
    method constructor (line 11450) | constructor(e, t, i, r, n, s) {
    method systemId (line 11453) | static get systemId() {
    method requestAccessConfig (line 11456) | static get requestAccessConfig() {
    method needsCert (line 11459) | get needsCert() {
    method generateInitData (line 11462) | generateInitData(e, t) {
    method removeKey (line 11469) | removeKey(e) {
    method ensureKeyContext (line 11472) | ensureKeyContext(e) {
    method getKeyRequestResponse (line 11477) | getKeyRequestResponse(e, t) {
    method generateRequestInitialized (line 11487) | generateRequestInitialized(e) {
    method handleParsedKeyResponse (line 11491) | handleParsedKeyResponse(t, e) {
    method handleKeyMessage (line 11514) | handleKeyMessage(e) {
  method constructor (line 11560) | constructor(e, t, i, r, n, s) {
  method systemId (line 11563) | static get systemId() {
  method requestAccessConfig (line 11566) | static get requestAccessConfig() {
  method needsCert (line 11569) | get needsCert() {
  method removeKey (line 11572) | removeKey(e) {
  method ensureKeyContext (line 11575) | ensureKeyContext(e) {
  method getKeyRequestResponse (line 11580) | getKeyRequestResponse(e, t) {
  method handleParsedKeyResponse (line 11590) | handleParsedKeyResponse(t, e) {
  method generateInitData (line 11619) | generateInitData(e, t) {
  method generateRequestInitialized (line 11625) | generateRequestInitialized(e) {
  method handleKeyMessage (line 11629) | handleKeyMessage(i) {
  class Ah (line 11654) | class Ah {
    method createMediaKeys (line 11655) | createMediaKeys(t, e, i, r, n) {
    method destroyMediaKeys (line 11671) | destroyMediaKeys() {
    method getKeySystemIdForDecryptData (line 11674) | static getKeySystemIdForDecryptData(e) {
    method requestKeySystemAccess (line 11690) | static requestKeySystemAccess(e, t, i, r) {
    method requestKeySystemInternal (line 11704) | static requestKeySystemInternal(e, t, i) {
    method make (line 11707) | make(e, t, i, r, n, s) {
    method availableKeySystems (line 11719) | static get availableKeySystems() {
    method getKeySystemFormat (line 11722) | static getKeySystemFormat(e) {
    method getKeySystemSecurityLevel (line 11726) | static getKeySystemSecurityLevel(e) {
  function Ch (line 11735) | function Ch(e, t, i) {
  class Dh (line 11745) | class Dh {
    method constructor (line 11746) | constructor(e, t, i, r, n, s, a, o = new Ah) {
    method keyStatusChange$ (line 11764) | get keyStatusChange$() {
    method keySystem (line 11767) | get keySystem() {
    method destroy (line 11770) | destroy() {
    method attachMediaKeys (line 11776) | attachMediaKeys() {
    method isKeyCleanupSupported (line 11781) | isKeyCleanupSupported() {
    method handleKeyCleanup (line 11784) | handleKeyCleanup(i) {
    method _removeKey (line 11797) | _removeKey(e, t) {
    method removeKeysForItems (line 11800) | removeKeysForItems(i) {
    method availableKeySystems (line 11812) | get availableKeySystems() {
    method initialize (line 11815) | initialize(e) {
    method generateRequest (line 11853) | generateRequest(e, t) {
    method setLicenseResponse (line 11856) | setLicenseResponse(e, t) {
    method getKeyFromDecryptData (line 11859) | getKeyFromDecryptData(e, t) {
    method _getKeyFromDecryptData (line 11866) | _getKeyFromDecryptData(t, i) {
    method fetchKeyEME (line 11930) | fetchKeyEME(e) {
    method fetchKeyHTTP (line 11937) | fetchKeyHTTP(e, t, i) {
    method fetchKeyHTTP (line 11940) | static fetchKeyHTTP(t, e, i, r) {
    method requestKey (line 11951) | requestKey(t) {
    method ensureKeySystem (line 11954) | ensureKeySystem(t) {
    method makeKeySystem (line 11964) | makeKeySystem(e) {
    method ensureMediaKeys (line 11967) | ensureMediaKeys(e) {
    method onServerCertificateLoaded (line 11973) | onServerCertificateLoaded(e) {
    method handleKeySystemError (line 11978) | handleKeySystemError(e) {
  class Mh (line 11983) | class Mh extends kl {
    method constructor (line 11984) | constructor(e) {
    method getKeyInfo (line 11987) | getKeyInfo(e) {
    method getKeyInfo$ (line 11993) | getKeyInfo$(e) {
    method getKeyRequestState$ (line 11998) | getKeyRequestState$(e) {
    method getKeyStatus$ (line 12001) | getKeyStatus$(e) {
    method getKeyError$ (line 12004) | getKeyError$(e) {
  class xh (line 12008) | class xh {
    method constructor (line 12009) | constructor(e) {
    method getQuery (line 12012) | getQuery() {
    method upsertKey (line 12015) | upsertKey(i) {
    method removeKey (line 12031) | removeKey(e) {
    method removeAllKeysForItem (line 12034) | removeAllKeysForItem(i) {
    method removeAll (line 12040) | removeAll() {
    method updateKeyValue (line 12043) | updateKeyValue(e, t) {
    method updateKeyStatus (line 12048) | updateKeyStatus(e, t) {
    method updateKeyRequestState (line 12053) | updateKeyRequestState(e, t, i) {
    method addMediaOption (line 12058) | addMediaOption(e, t) {
    method setError (line 12067) | setError(e, t) {
  method constructor (line 12075) | constructor() {
  function Lh (line 12085) | function Lh(e) {
  function _h (line 12090) | function _h(t) {
  class Hh (line 12246) | class Hh {
    method constructor (line 12247) | constructor(e, t, i, r, n) {
    method reset (line 12250) | reset() {
    method setStyles (line 12253) | setStyles(e) {
    method isDefault (line 12256) | isDefault() {
    method equals (line 12259) | equals(e) {
    method copy (line 12262) | copy(e) {
    method toString (line 12265) | toString() {
  class jh (line 12269) | class jh {
    method constructor (line 12270) | constructor(e, t, i, r, n, s) {
    method reset (line 12273) | reset() {
    method setChar (line 12276) | setChar(e, t) {
    method setPenState (line 12279) | setPenState(e) {
    method equals (line 12282) | equals(e) {
    method copy (line 12285) | copy(e) {
    method isEmpty (line 12288) | isEmpty() {
  class Qh (line 12292) | class Qh {
    method constructor (line 12293) | constructor() {
    method equals (line 12298) | equals(t) {
    method copy (line 12306) | copy(t) {
    method isEmpty (line 12309) | isEmpty() {
    method setCursor (line 12317) | setCursor(e) {
    method moveCursor (line 12320) | moveCursor(e) {
    method backSpace (line 12326) | backSpace() {
    method insertChar (line 12329) | insertChar(e) {
    method clearFromPos (line 12334) | clearFromPos(e) {
    method clear (line 12338) | clear() {
    method clearToEndOfRow (line 12341) | clearToEndOfRow() {
    method getTextString (line 12344) | getTextString() {
    method setPenStyles (line 12353) | setPenStyles(e) {
  class Wh (line 12357) | class Wh {
    method constructor (line 12358) | constructor() {
    method reset (line 12363) | reset() {
    method equals (line 12367) | equals(t) {
    method copy (line 12375) | copy(t) {
    method isEmpty (line 12378) | isEmpty() {
    method backSpace (line 12386) | backSpace() {
    method clearToEndOfRow (line 12389) | clearToEndOfRow() {
    method insertChar (line 12392) | insertChar(e) {
    method setPen (line 12395) | setPen(e) {
    method moveCursor (line 12398) | moveCursor(e) {
    method setCursor (line 12401) | setCursor(e) {
    method setPAC (line 12404) | setPAC(t) {
    method setBkgData (line 12433) | setBkgData(e) {
    method setRollUpRows (line 12436) | setRollUpRows(e) {
    method rollUp (line 12439) | rollUp() {
    method getDisplayText (line 12447) | getDisplayText(t) {
    method getTextAndFormat (line 12458) | getTextAndFormat() {
  class Gh (line 12462) | class Gh {
    method constructor (line 12463) | constructor(e, t) {
    method reset (line 12466) | reset() {
    method getHandler (line 12469) | getHandler() {
    method setHandler (line 12472) | setHandler(e) {
    method setPAC (line 12475) | setPAC(e) {
    method setBkgData (line 12478) | setBkgData(e) {
    method setMode (line 12481) | setMode(e) {
    method insertChars (line 12484) | insertChars(t) {
    method ccRCL (line 12489) | ccRCL() {
    method ccBS (line 12492) | ccBS() {
    method ccAOF (line 12495) | ccAOF() {}
    method ccAON (line 12496) | ccAON() {}
    method ccDER (line 12497) | ccDER() {
    method ccRU (line 12500) | ccRU(e) {
    method ccFON (line 12503) | ccFON() {
    method ccRDC (line 12508) | ccRDC() {
    method ccTR (line 12511) | ccTR() {
    method ccRTD (line 12514) | ccRTD() {
    method ccEDM (line 12517) | ccEDM() {
    method ccCR (line 12520) | ccCR() {
    method ccENM (line 12523) | ccENM() {
    method ccEOC (line 12526) | ccEOC() {
    method ccTO (line 12530) | ccTO(e) {
    method ccMIDROW (line 12533) | ccMIDROW(e) {
    method outputDataUpdate (line 12541) | outputDataUpdate(e = !1) {
    method cueSplitAtTime (line 12545) | cueSplitAtTime(e) {
  method constructor (line 12550) | constructor(e = 1, t, i) {
  method getHandler (line 12558) | getHandler(e) {
  method setHandler (line 12561) | setHandler(e, t) {
  method addData (line 12564) | addData(e, t) {
  method parseCmd (line 12569) | parseCmd(e, t) {
  method parseMidrow (line 12575) | parseMidrow(e, t) {
  method parsePAC (line 12584) | parsePAC(e, t) {
  method interpretPAC (line 12591) | interpretPAC(e, t) {
  method parseChars (line 12602) | parseChars(e, t) {
  method parseBackgroundAttributes (line 12613) | parseBackgroundAttributes(e, t) {
  method reset (line 12619) | reset() {
  method cueSplitAtTime (line 12623) | cueSplitAtTime(t) {
  class Xh (line 12627) | class Xh {
    method constructor (line 12628) | constructor(e, t) {
    method dispatchCue (line 12631) | dispatchCue() {
    method newCue (line 12634) | newCue(e, t, i) {
  class rp (line 12691) | class rp {
    method parseTimeStamp (line 12692) | static parseTimeStamp(e) {
    method parseContent (line 12700) | static parseContent(s, t, a) {
  method constructor (line 12766) | constructor(e, t, i) {
  method id (line 12769) | get id() {
  method id (line 12772) | set id(e) {
  method pauseOnExit (line 12775) | get pauseOnExit() {
  method pauseOnExit (line 12778) | set pauseOnExit(e) {
  method startTime (line 12781) | get startTime() {
  method startTime (line 12784) | set startTime(e) {
  method endTime (line 12788) | get endTime() {
  method endTime (line 12791) | set endTime(e) {
  method text (line 12795) | get text() {
  method text (line 12798) | set text(e) {
  method region (line 12801) | get region() {
  method region (line 12804) | set region(e) {
  method vertical (line 12807) | get vertical() {
  method vertical (line 12810) | set vertical(e) {
  method snapToLines (line 12814) | get snapToLines() {
  method snapToLines (line 12817) | set snapToLines(e) {
  method line (line 12820) | get line() {
  method line (line 12823) | set line(e) {
  method lineAlign (line 12827) | get lineAlign() {
  method lineAlign (line 12830) | set lineAlign(e) {
  method position (line 12834) | get position() {
  method position (line 12837) | set position(e) {
  method positionAlign (line 12841) | get positionAlign() {
  method positionAlign (line 12844) | set positionAlign(e) {
  method size (line 12848) | get size() {
  method size (line 12851) | set size(e) {
  method align (line 12855) | get align() {
  method align (line 12858) | set align(e) {
  method getCueAsHTML (line 12862) | getCueAsHTML() {
  method create (line 12865) | static create(t) {
  method fromJSON (line 12872) | static fromJSON(e) {
  method toJSON (line 12875) | toJSON() {
  method constructor (line 12899) | constructor() {
  method id (line 12902) | get id() {
  method id (line 12905) | set id(e) {
  method lines (line 12909) | get lines() {
  method lines (line 12912) | set lines(e) {
  method regionAnchorX (line 12916) | get regionAnchorX() {
  method regionAnchorX (line 12919) | set regionAnchorX(e) {
  method regionAnchorY (line 12923) | get regionAnchorY() {
  method regionAnchorY (line 12926) | set regionAnchorY(e) {
  method scroll (line 12930) | get scroll() {
  method scroll (line 12933) | set scroll(e) {
  method viewportAnchorX (line 12940) | get viewportAnchorX() {
  method viewportAnchorX (line 12943) | set viewportAnchorX(e) {
  method viewportAnchorY (line 12947) | get viewportAnchorY() {
  method viewportAnchorY (line 12950) | set viewportAnchorY(e) {
  method width (line 12954) | get width() {
  method width (line 12957) | set width(e) {
  method toJSON (line 12961) | toJSON() {
  method create (line 12967) | static create(t) {
  method fromJSON (line 12973) | static fromJSON(e) {
  class up (line 12985) | class up extends Error {
    method constructor (line 12986) | constructor(e, t) {
  class cp (line 12993) | class cp {
    method constructor (line 12994) | constructor() {
    method set (line 12997) | set(e, t) {
    method get (line 13000) | get(e, t, i) {
    method has (line 13003) | has(e) {
    method alt (line 13006) | alt(t, i, r) {
    method integer (line 13013) | integer(e, t) {
    method percent (line 13016) | percent(e, t) {
  class hp (line 13026) | class hp {
    method constructor (line 13027) | constructor(e, t, i) {
    method StringDecoder (line 13030) | static StringDecoder() {
    method reportOrThrowError (line 13039) | reportOrThrowError(e) {
    method parseOptions (line 13043) | parseOptions(e, t, i, r) {
    method parseCue (line 13051) | parseCue(t, e, a) {
    method parseRegion (line 13111) | parseRegion(e) {
    method parseStyle (line 13144) | parseStyle(i) {
    method parseHeader (line 13165) | parseHeader(e) {
    method parse (line 13170) | parse(i) {
    method flush (line 13268) | flush() {
    method styles (line 13276) | styles() {
  class vp (line 13396) | class vp {
    method applyStyles (line 13397) | applyStyles(e, t) {
    method formatStyle (line 13401) | formatStyle(e, t) {
  class Sp (line 13406) | class Sp extends vp {
    method constructor (line 13407) | constructor(e, t, i, r, n) {
    method determineBidi (line 13465) | determineBidi(e) {
    method parseOpacity (line 13490) | parseOpacity(e) {
    method directionSettingToWritingMode (line 13495) | directionSettingToWritingMode(e) {
    method move (line 13498) | move(e) {
  class bp (line 13510) | class bp {
    method constructor (line 13511) | constructor(e) {
    method calculateNewLines (line 13524) | calculateNewLines(t) {
    method move (line 13529) | move(e, t) {
    method overlaps (line 13544) | overlaps(e) {
    method overlapsAny (line 13547) | overlapsAny(e) {
    method within (line 13552) | within(e) {
    method moveIfOutOfBounds (line 13555) | moveIfOutOfBounds(e, t) {
    method toCSSCompatValues (line 13570) | toCSSCompatValues(e) {
    method getSimpleBoxPosition (line 13580) | static getSimpleBoxPosition(e) {
    method getBoxPosition (line 13601) | static getBoxPosition(r, n) {
    method moveToMinimumDistancePlacement (line 13610) | static moveToMinimumDistancePlacement(e, t, i) {
    method moveBoxToLinePosition (line 13613) | static moveBoxToLinePosition(e, a, o) {
  class Tp (line 13713) | class Tp {
    method constructor (line 13714) | constructor(e, t, i = !0) {
    method initSubtitleCSS (line 13728) | initSubtitleCSS() {
    method convertCueToDOMTree (line 13732) | convertCueToDOMTree(e) {
    method setStyles (line 13735) | setStyles(i) {
    method processCues (line 13757) | processCues(r) {
    method setSize (line 13789) | setSize(e, t) {
    method getOverlay (line 13792) | getOverlay() {
  function Ep (line 13797) | function Ep(e) {
  function Ip (line 13804) | function Ip(e, t, i) {
  function wp (line 13808) | function wp(e) {
  function Ap (line 13815) | function Ap(e) {
  function Op (line 13822) | function Op(e, t = 0, i = 8589934592) {
  function Rp (line 13928) | function Rp(t) {
  function Lp (line 13937) | function Lp(e) {
  class _p (line 13941) | class _p extends $t {
    method constructor (line 13942) | constructor(e, t, i, r) {
    method destroy (line 13954) | destroy() {
    method convertCuesIntoSubtitleFragInfo (line 13957) | convertCuesIntoSubtitleFragInfo(t) {
    method checkReadyToLoadNextSubtitleFragment (line 13973) | checkReadyToLoadNextSubtitleFragment() {
    method checkReadyToLoadNextSubtitleFragment$ (line 13977) | checkReadyToLoadNextSubtitleFragment$(e, t) {
    method getNextFragment (line 13980) | getNextFragment(e, t) {
    method calculateFragInfoMap (line 13984) | calculateFragInfoMap(e, t, i, r) {
    method findFrags$ (line 14021) | findFrags$(t, i) {
    method reviewParsedFrag (line 14027) | reviewParsedFrag(e, i, r) {
    method isFragmentEmpty (line 14053) | isFragmentEmpty(e) {
    method isFragmentCompleteOrEmpty (line 14056) | isFragmentCompleteOrEmpty(e, t, i) {
    method getEarlierFragmentInSameDisco (line 14060) | getEarlierFragmentInSameDisco(e, t, i) {
    method inferSubtitleFragmentForPosition (line 14066) | inferSubtitleFragmentForPosition(i, r, t, n, s) {
    method generateFragmentBatch (line 14119) | generateFragmentBatch(t, i, e, r, n, s) {
    method findFragmentsForPosition (line 14143) | findFragmentsForPosition(e, t, i) {
    method selectedMediaOption (line 14152) | get selectedMediaOption() {
    method selectedMediaOption (line 14155) | set selectedMediaOption(e) {
    method selectedTrack (line 14158) | get selectedTrack() {
    method selectedTrack (line 14161) | set selectedTrack(e) {
    method getTrack (line 14164) | getTrack(t) {
    method updateTextTrackState (line 14167) | updateTextTrackState() {
    method mapHTMLTextTrackIndexToMediaOptionId (line 14177) | mapHTMLTextTrackIndexToMediaOptionId(e) {
    method mediaSelectionOptions (line 14184) | get mediaSelectionOptions() {
    method _makeDisableOption (line 14187) | _makeDisableOption(e) {
    method _onTextTracksChanged (line 14194) | _onTextTracksChanged() {
    method addCues (line 14210) | addCues(e, t, i, r) {
    method getExistingHTMLTextTrackWithChannelNumber (line 14221) | getExistingHTMLTextTrackWithChannelNumber(t) {
    method sendAddTrackEvent (line 14231) | sendAddTrackEvent(e, t) {
    method createHTMLCaptionsTrackGuts (line 14240) | createHTMLCaptionsTrackGuts(e, t, i, r) {
    method createHTMLCaptionsTrack (line 14252) | createHTMLCaptionsTrack(e) {
    method getExistingHTMLTextTrack (line 14255) | getExistingHTMLTextTrack(e) {
    method getExistingHTMLTextTrackWithSubtitleTrackId (line 14258) | getExistingHTMLTextTrackWithSubtitleTrackId(t) {
    method getExistingHTMLTextTrackIndex (line 14262) | getExistingHTMLTextTrackIndex(e) {
    method setExistingHTMLTextTrack (line 14272) | setExistingHTMLTextTrack(e, t) {
    method createHTMLTextTrack (line 14275) | createHTMLTextTrack(t) {
    method createHTMLTextTrackGuts (line 14288) | createHTMLTextTrackGuts(t, i, r, e) {
    method resetLoadSource (line 14297) | resetLoadSource() {
    method resetTracks (line 14300) | resetTracks() {
    method _cleanTracks (line 14303) | _cleanTracks() {
    method getCuesOfEnabledTrack (line 14311) | getCuesOfEnabledTrack(e, t = !1) {
    method _getCuesOfEnabledTrack (line 14322) | _getCuesOfEnabledTrack(e) {
    method attachSubtitleTracks (line 14326) | attachSubtitleTracks() {
    method setTracks (line 14331) | setTracks(e, t, i) {
    method onInlineStylesParsed (line 14334) | onInlineStylesParsed(e) {}
    method processSubtitleFrag (line 14335) | processSubtitleFrag(e, t, i, r) {
    method _parseVTTs (line 14343) | _parseVTTs(r, n, e, t) {
    method _ensureParser (line 14361) | _ensureParser() {
    method setupForFrag (line 14365) | setupForFrag(e) {
    method resetClosedCaptionParser (line 14368) | resetClosedCaptionParser() {
    method addLegibleSamples (line 14372) | addLegibleSamples(e, t, i, r) {
    method addClosedCaptionSamples (line 14375) | addClosedCaptionSamples(e, t) {
    method addMP4CaptionSamples (line 14378) | addMP4CaptionSamples(e, i) {
    method addTSCaptionSamples (line 14392) | addTSCaptionSamples(e, t) {
    method addId3Samples (line 14403) | addId3Samples(e, t, r) {
    method id3shouldIgnore (line 14419) | id3shouldIgnore(e) {
    method extractCea608Data (line 14422) | static extractCea608Data(t) {
  class Fp (line 14433) | class Fp {
    method constructor (line 14434) | constructor(e, t, i, r) {
    method loadSessionData (line 14443) | loadSessionData(r) {
    method loadSessionDataItemWithUrl (line 14464) | loadSessionDataItemWithUrl(e, t, i, r, n, s, a) {
    method onLoadSuccess (line 14482) | onLoadSuccess(e, t, i, r) {
    method setSessionData (line 14565) | setSessionData(t, i, r, n) {
    method onLoadError (line 14583) | onLoadError(e, t, i) {
  function Bp (line 14588) | function Bp(e, t) {
  function Up (line 14599) | function Up(e) {
  function $p (line 14603) | function $p(e, t) {
  function Vp (line 14607) | function Vp(e) {
  function Kp (line 14611) | function Kp() {
  function qp (line 14615) | function qp(e) {
  function Hp (line 14619) | function Hp(e) {
  function jp (line 14623) | function jp(e) {
  class Qp (line 14626) | class Qp {
    method constructor (line 14627) | constructor(...e) {
    method ensureSameIdentifierLength (line 14630) | ensureSameIdentifierLength(e) {
    method isGreaterThan (line 14633) | isGreaterThan(t) {
    method isEqualTo (line 14641) | isEqualTo(i) {
  function Wp (line 14646) | function Wp(e) {
  class Gp (line 14649) | class Gp extends Error {}
  class zp (line 14650) | class zp {
    method constructor (line 14651) | constructor(e) {
    method lock (line 14654) | lock(e, t = !1) {
    method unlock (line 14657) | unlock() {
    method readLock (line 14660) | readLock(e, t = !1) {
    method readUnlock (line 14663) | readUnlock() {
    method _schedule (line 14666) | _schedule() {
    method _canLock (line 14671) | _canLock(e) {
    method _lock (line 14674) | _lock(i, e, r = !1) {
    method _unlock (line 14697) | _unlock(e) {
  class Xp (line 14701) | class Xp extends $t {
    method constructor (line 14702) | constructor() {
    method wrap (line 14705) | wrap(e) {
    method add (line 14710) | add(e = 1) {
    method done (line 14713) | done(e = 1) {
  method isBuffered (line 14718) | isBuffered(t, i) {
  method timeRangesToBufferedRange (line 14723) | timeRangesToBufferedRange(t) {
  method subtitleBufferInfo (line 14731) | subtitleBufferInfo(e, t, i) {
  method fragmentsBufferedInfo (line 14743) | fragmentsBufferedInfo(e, t, i) {
  method bufferedCues (line 14751) | bufferedCues(t) {
  method getBufferedInfo (line 14761) | getBufferedInfo(e, t, i) {
  function Zp (line 14806) | function Zp(t, e) {
  function ef (line 14821) | function ef(t, e) {
  function tf (line 14839) | function tf(t, i) {
  function rf (line 14850) | function rf(s, a) {
  class nf (line 14864) | class nf extends kl {
    method constructor (line 14865) | constructor(e, t) {
    method mediaElementDuration$ (line 14868) | get mediaElementDuration$() {
    method mediaElementDuration (line 14873) | get mediaElementDuration() {
    method msDuration (line 14877) | get msDuration() {
    method minSBDuration (line 14881) | get minSBDuration() {
    method currentTime (line 14888) | get currentTime() {
    method clientWidth (line 14891) | get clientWidth() {
    method clientHeight (line 14894) | get clientHeight() {
    method getBufferedDuration (line 14897) | getBufferedDuration(e = .5) {
    method mediaSourceEntity (line 14902) | get mediaSourceEntity() {
    method msReadyState (line 14906) | get msReadyState() {
    method sourceBufferEntities (line 14910) | get sourceBufferEntities() {
    method sourceBufferEntityByType (line 14914) | sourceBufferEntityByType(e) {
    method initSegmentEntityByType (line 14918) | initSegmentEntityByType(e) {
    method maxBufferSize (line 14921) | get maxBufferSize() {
    method postFlushSeek (line 14926) | get postFlushSeek() {
    method seekable (line 14930) | get seekable() {
    method desiredRate (line 14933) | get desiredRate() {
    method desiredRate$ (line 14937) | get desiredRate$() {
    method effectiveRate (line 14942) | get effectiveRate() {
    method playbackRate (line 14945) | get playbackRate() {
    method isIframeRate (line 14948) | get isIframeRate() {
    method isIframeRate$ (line 14951) | get isIframeRate$() {
    method msObjectUrl$ (line 14954) | get msObjectUrl$() {
    method msReadyState$ (line 14959) | get msReadyState$() {
    method readyState (line 14966) | get readyState() {
    method readyState$ (line 14970) | get readyState$() {
    method mediaSourceEntity$ (line 14975) | get mediaSourceEntity$() {
    method expectedSbCount$ (line 14980) | get expectedSbCount$() {
    method expectedSbCount (line 14985) | get expectedSbCount() {
    method paused$ (line 14989) | get paused$() {
    method paused (line 14994) | get paused() {
    method playbackStarted (line 14998) | get playbackStarted() {
    method flushing$ (line 15002) | get flushing$() {
    method flushing (line 15007) | get flushing() {
    method waitingForDisco$ (line 15011) | get waitingForDisco$() {
    method waitingForDisco (line 15016) | get waitingForDisco() {
    method gotPlaying (line 15020) | get gotPlaying() {
    method gotPlaying$ (line 15024) | get gotPlaying$() {
    method gotLoadStart$ (line 15029) | get gotLoadStart$() {
    method seekTo (line 15034) | get seekTo() {
    method seekTo$ (line 15038) | get seekTo$() {
    method seeking (line 15043) | get seeking() {
    method seeking$ (line 15047) | get seeking$() {
    method nudgeTarget$ (line 15052) | get nudgeTarget$() {
    method nudgeCount (line 15057) | get nudgeCount() {
    method sourceBufferEntities$ (line 15061) | get sourceBufferEntities$() {
    method sourceBufferEntityByType$ (line 15066) | sourceBufferEntityByType$(t) {
    method bufferedSegmentsByType$ (line 15073) | bufferedSegmentsByType$(t) {
    method getBufferedSegmentsByType (line 15080) | getBufferedSegmentsByType(e) {
    method bufferedSegmentsTuple$ (line 15083) | get bufferedSegmentsTuple$() {
    method timeupdate$ (line 15086) | get timeupdate$() {
    method playingEvent$ (line 15092) | get playingEvent$() {
    method mediaElementEntity$ (line 15095) | get mediaElementEntity$() {
    method ended$ (line 15098) | get ended$() {
    method sbUpdating$ (line 15103) | sbUpdating$(t) {
    method sbUpdating (line 15108) | sbUpdating(e) {
    method sbError$ (line 15112) | sbError$(t) {
    method updating$ (line 15117) | get updating$() {
    method bufferedRangeTuple$ (line 15120) | get bufferedRangeTuple$() {
    method getBufferedRangeByType (line 15127) | getBufferedRangeByType(e) {
    method combinedBuffer$ (line 15130) | get combinedBuffer$() {
    method getBufferInfo (line 15135) | getBufferInfo(n, s) {
    method getCombinedBufferInfo (line 15158) | getCombinedBufferInfo(e, t) {
    method bufferMonitorInfo (line 15162) | get bufferMonitorInfo() {
    method bufferMonitorThresholds$ (line 15166) | get bufferMonitorThresholds$() {
    method waterLevelType$ (line 15184) | get waterLevelType$() {
    method waterLevelForType (line 15189) | waterLevelForType(e) {
    method waterLevelChangedForType$ (line 15193) | waterLevelChangedForType$(t) {
    method fellBelowLowWater$ (line 15196) | get fellBelowLowWater$() {
    method isBufferedToEnd$ (line 15201) | isBufferedToEnd$(s, a = !0) {
    method needData$ (line 15210) | needData$(e, n = !1) {
    method getSourceBufferInfoAction (line 15219) | getSourceBufferInfoAction(e, t, i, r) {
    method haveEnough (line 15238) | get haveEnough() {
    method haveEnough$ (line 15242) | get haveEnough$() {
    method likelyToKeepUp (line 15247) | static likelyToKeepUp(e, t, i) {
    method playbackLikelyToKeepUp (line 15250) | get playbackLikelyToKeepUp() {
    method playbackLikelyToKeepUp$ (line 15253) | get playbackLikelyToKeepUp$() {
    method getCurrentWaterLevel (line 15256) | getCurrentWaterLevel(e) {
    method getCombinedMediaSourceBufferInfo (line 15261) | getCombinedMediaSourceBufferInfo(e) {
    method getCurrentWaterLevelByType (line 15266) | getCurrentWaterLevelByType(e, t) {
    method canContinuePlaybackWithoutGap (line 15272) | canContinuePlaybackWithoutGap(e, t, i, r) {
    method stallInfo$ (line 15281) | get stallInfo$() {
    method textTracks (line 15286) | get textTracks() {
    method textTracksCreated$ (line 15289) | get textTracksCreated$() {
    method mediaOptionParsedSubtitleRecord (line 15292) | get mediaOptionParsedSubtitleRecord() {
    method getParsedSubtitleRecordsForMediaOption (line 15296) | getParsedSubtitleRecordsForMediaOption(e) {
  class sf (line 15300) | class sf {
    method constructor (line 15301) | constructor(e, t, i, r) {
    method install (line 15304) | install() {
    method uninstall (line 15324) | uninstall() {
    method play (line 15328) | play() {
    method pause (line 15336) | pause() {
    method _handlePendingPlayPromises (line 15344) | _handlePendingPlayPromises(t) {
    method _mediaPlayInternal (line 15352) | _mediaPlayInternal() {
    method _mediaPauseInternal (line 15355) | _mediaPauseInternal() {
  class af (line 15359) | class af extends Error {}
  class of (line 15360) | class of extends p {
    method constructor (line 15361) | constructor(e, t, i, r, n) {
  class lf (line 15365) | class lf extends of {
    method constructor (line 15366) | constructor(e, t, i, r) {
  class df (line 15370) | class df extends of {
    method constructor (line 15371) | constructor(e, t, i, r, n, s) {
  class uf (line 15375) | class uf extends df {
    method constructor (line 15376) | constructor(e, t, i, r) {
  class cf (line 15380) | class cf extends df {
    method constructor (line 15381) | constructor(e, t, i) {
  class hf (line 15385) | class hf extends df {
    method constructor (line 15386) | constructor(e, t, i, r) {
  class pf (line 15390) | class pf extends p {
    method constructor (line 15391) | constructor(e, t, i, r, n, s, a = NaN) {
  class ff (line 15395) | class ff extends $t {
    method constructor (line 15396) | constructor(n, e, s, a, o, l, d, u, c) {
    method buffered (line 15422) | get buffered() {
    method appendBuffer (line 15425) | appendBuffer(e, t) {
    method _appendBufferAsync (line 15428) | _appendBufferAsync(e, t) {
    method remove (line 15450) | remove(e, t) {
    method _removeAsync (line 15453) | _removeAsync(e, t) {
    method abort (line 15461) | abort() {
    method updating (line 15469) | get updating() {
    method timestampOffset (line 15472) | get timestampOffset() {
    method timestampOffset (line 15475) | set timestampOffset(e) {
    method gotQuotaExceeded (line 15478) | get gotQuotaExceeded() {
    method bufferedSegments (line 15482) | get bufferedSegments() {
    method totalBytes (line 15486) | get totalBytes() {
    method maxTotalBytes (line 15490) | get maxTotalBytes() {
    method _waitForUpdateEndOrError (line 15494) | _waitForUpdateEndOrError() {
  class mf (line 15500) | class mf extends $t {
    method constructor (line 15501) | constructor(a, o, e, l, t) {
    method readyState (line 15516) | get readyState() {
    method duration (line 15519) | set duration(e) {
    method duration (line 15522) | get duration() {
    method endOfStream (line 15525) | endOfStream(e) {
    method createSourceBuffers (line 15528) | createSourceBuffers(e, a) {
    method needSourceBuffers (line 15554) | get needSourceBuffers() {
    method sourceBuffers (line 15557) | get sourceBuffers() {
    method getSourceBufferByType (line 15560) | getSourceBufferByType(e) {
    method updateLiveSeekableRange (line 15564) | updateLiveSeekableRange(e, t) {
    method clearLiveSeekableRange (line 15568) | clearLiveSeekableRange() {
  function gf (line 15574) | function gf(e, c, t) {
  function yf (line 15602) | function yf(e, t, i, r, n, s) {
  class vf (line 15612) | class vf extends $t {
    method constructor (line 15613) | constructor(w, A, e, t, i, r, n) {
    method mediaSourceAdapter (line 15686) | get mediaSourceAdapter() {
    method sourceBuffers (line 15689) | get sourceBuffers() {
    method needSourceBuffers (line 15693) | get needSourceBuffers() {
    method mediaQuery (line 15696) | get mediaQuery() {
    method sourceBuffersBufferedRangeByType (line 15699) | sourceBuffersBufferedRangeByType(e) {
    method createId3Track (line 15703) | createId3Track(e) {
    method checkForInconsistentStoreBufferRangesAndUpdate (line 15706) | checkForInconsistentStoreBufferRangesAndUpdate() {
    method shouldUpdateStoreValues (line 15714) | shouldUpdateStoreValues(e, i) {
    method updateMediaElementStoreBufferedRanges (line 15720) | updateMediaElementStoreBufferedRanges(e, t) {
    method destroyMediaSource (line 15724) | destroyMediaSource() {
    method makeMediaSource (line 15727) | makeMediaSource() {
    method openMediaSource (line 15730) | openMediaSource(t) {
    method createSourceBuffers (line 15736) | createSourceBuffers(e) {
    method _waitForMediaSourceOpen (line 15741) | _waitForMediaSourceOpen(i) {
    method appendOrder (line 15745) | get appendOrder() {
    method clearFlush (line 15748) | clearFlush(e) {
    method getSwitchPosition (line 15756) | getSwitchPosition(e) {
    method checkForReplay (line 15762) | checkForReplay() {
    method resetMediaSourceIfNeeded (line 15766) | resetMediaSourceIfNeeded(r) {
    method resetMediaSource (line 15877) | resetMediaSource(e = NaN, t) {
    method setExpectedSbCount (line 15881) | setExpectedSbCount(e) {
    method appendInitSegments (line 15884) | appendInitSegments(l, d) {
    method appendDataSegments (line 15924) | appendDataSegments(m, g) {
    method setStoreSbTimeoffsets (line 15971) | setStoreSbTimeoffsets(s) {
    method adjustJaggedStart (line 15987) | adjustJaggedStart(e) {
    method addCues (line 16010) | addCues(e, t) {
    method _flushInternal (line 16016) | _flushInternal(e, t, i) {
    method flushAll (line 16019) | flushAll(i, r, n = !1) {
    method flushData (line 16022) | flushData(o, l, d, u = !1) {
    method convertInitSegToCompatInfo (line 16045) | static convertInitSegToCompatInfo(e) {
    method combineAppendDataInfoWithCompatInfo (line 16056) | static combineAppendDataInfoWithCompatInfo(e, t, i, r = 0) {
    method convertSourceBufferEntitiesToCompatInfo (line 16066) | convertSourceBufferEntitiesToCompatInfo(e) {
    method appendData (line 16081) | appendData(e, i, r) {
    method endStream (line 16130) | endStream() {
    method setMediaKeys (line 16137) | setMediaKeys(e) {
    method clearMediaKeys (line 16143) | clearMediaKeys() {
    method postFlushSeek (line 16151) | set postFlushSeek(e) {
    method schedulePostFlushSeek (line 16154) | schedulePostFlushSeek(e) {
    method seekTo (line 16159) | set seekTo(e) {
    method setSeekToWithDiscontinuity (line 16162) | setSeekToWithDiscontinuity(e, t) {
    method nudgeSeek (line 16165) | nudgeSeek(e, t) {
    method desiredRate (line 16173) | set desiredRate(e) {
    method toggleTrickPlaybackMode (line 16176) | toggleTrickPlaybackMode(e) {
    method play (line 16190) | play() {
    method pause (line 16193) | pause() {
    method expectPlayEvent (line 16196) | get expectPlayEvent() {
    method expectPlayEvent (line 16199) | set expectPlayEvent(e) {
    method expectPauseEvent (line 16202) | get expectPauseEvent() {
    method expectPauseEvent (line 16205) | set expectPauseEvent(e) {
    method textTracksCreated (line 16208) | set textTracksCreated(e) {
    method msDuration (line 16212) | get msDuration() {
    method msDuration (line 16215) | set msDuration(e) {
    method haveEnough (line 16224) | set haveEnough(e) {
    method flushing (line 16227) | set flushing(e) {
    method bufferMonitorTargetDuration (line 16230) | set bufferMonitorTargetDuration(e) {
    method textTracks (line 16233) | get textTracks() {
    method id3TextTrack (line 16236) | get id3TextTrack() {
    method addTextTrack (line 16239) | addTextTrack(e, t, i) {
    method dispatchEvent (line 16242) | dispatchEvent(e) {
    method offsetWidth (line 16245) | get offsetWidth() {
    method offsetHeight (line 16248) | get offsetHeight() {
    method getliveSeekableWindow (line 16251) | getliveSeekableWindow() {
    method archiveParsedSubtitleFragmentRecord (line 16254) | archiveParsedSubtitleFragmentRecord(e, t, i) {
    method updateLiveSeekableRange (line 16257) | updateLiveSeekableRange(e) {
    method clearLiveSeekableRange (line 16266) | clearLiveSeekableRange() {
  method constructor (line 16319) | constructor() {
  method activeId (line 16325) | get activeId() {
  method startMediaSession (line 16328) | startMediaSession(i, r, n, s) {
  method setMediaSourceEntity (line 16363) | setMediaSourceEntity(t, i) {
  method mediaElementDuration (line 16373) | set mediaElementDuration(t) {
  method msReadyState (line 16378) | set msReadyState(t) {
  method readyState (line 16385) | set readyState(t) {
  method ended (line 16390) | set ended(t) {
  method msDuration (line 16395) | set msDuration(t) {
  method textTracksCreated (line 16400) | set textTracksCreated(t) {
  method expectedSbCount (line 16405) | set expectedSbCount(t) {
  method postFlushSeek (line 16410) | set postFlushSeek(e) {
  method setSeekToPos (line 16415) | setSeekToPos(t, i, r) {
  method seeking (line 16424) | set seeking(t) {
  method paused (line 16429) | set paused(t) {
  method gotPlayingEvent (line 16434) | gotPlayingEvent() {
  method gotLoadStartEvent (line 16439) | gotLoadStartEvent() {
  method desiredRate (line 16444) | set desiredRate(t) {
  method haveEnough (line 16449) | set haveEnough(t) {
  method flushing (line 16454) | set flushing(e) {
  method waitingForDisco (line 16459) | set waitingForDisco(t) {
  method setSourceBufferUpdating (line 16464) | setSourceBufferUpdating(i) {
  method setTimestampOffset (line 16472) | setTimestampOffset(i, r) {
  method setBufferedRangesUpdated (line 16480) | setBufferedRangesUpdated(a, o, l, d, u) {
  method setSourceBufferEntity (line 16535) | setSourceBufferEntity(n, s) {
  method setInflightSegment (line 16560) | setInflightSegment(i, r) {
  method setInitSegmentEntity (line 16568) | setInitSegmentEntity(i, r) {
  method setSourceBufferError (line 16576) | setSourceBufferError(i, r) {
  method setStallInfo (line 16584) | setStallInfo(t) {
  method setNudgeInfo (line 16589) | setNudgeInfo(t) {
  method updateWaterLevels (line 16594) | updateWaterLevels(t, i) {
  method bufferMonitorTargetDuration (line 16602) | set bufferMonitorTargetDuration(i) {
  method archiveParsedSubtitleFragmentRecord (line 16610) | archiveParsedSubtitleFragmentRecord(i, r, n) {
  class Tf (line 16617) | class Tf extends bi {
    method constructor (line 16618) | constructor(e) {
    method platformInfo (line 16621) | get platformInfo() {
    method displaySupportsHdr (line 16624) | get displaySupportsHdr() {
    method viewportInfo (line 16627) | get viewportInfo() {
  class Ef (line 16631) | class Ef {
    method constructor (line 16632) | constructor(e) {
    method getQuery (line 16635) | getQuery() {
    method updateSupportsHdr (line 16638) | updateSupportsHdr(t) {
    method updatePlatformInfo (line 16643) | updatePlatformInfo(e) {
    method updateViewportInfo (line 16648) | updateViewportInfo(t) {
  method constructor (line 16655) | constructor() {
  function Af (line 16666) | function Af() {
  class Of (line 16669) | class Of extends $t {
    method constructor (line 16670) | constructor(e, t) {
    method register (line 16682) | register(e, i) {
    method invoke (line 16687) | invoke(e, t, r) {
  class kf (line 16695) | class kf extends Of {
    method constructor (line 16696) | constructor(e) {
    method decrypt (line 16699) | decrypt(e, t, i, r, n) {
  class Cf (line 16703) | class Cf extends Of {
    method constructor (line 16704) | constructor(e) {
    method init (line 16709) | init(e, t, i) {
  class Df (line 16729) | class Df {
    method constructor (line 16730) | constructor(e, t) {
    method push (line 16733) | push(e, t, i, r, n, s, a, o, l, d, u, c, h) {
    method pushWithoutTransfer (line 16736) | pushWithoutTransfer(e, t, i, r, n, s, a, o, l, d, u, c) {
    method destroy (line 16739) | destroy() {
  class Mf (line 16743) | class Mf {
    method constructor (line 16744) | constructor() {
    method register (line 16747) | register(e, t) {
    method unregister (line 16751) | unregister(e) {
    method invoke (line 16755) | invoke(e, i) {
    method teardown (line 16765) | teardown(e) {
  class Nf (line 16817) | class Nf {}
  class Bf (line 16841) | class Bf {
    method constructor (line 16842) | constructor(e, t) {
    method setReportingAgent (line 16845) | setReportingAgent(e) {
    method sendPlayEnded (line 16848) | sendPlayEnded(e) {
    method sendPlayStalled (line 16852) | sendPlayStalled(e) {
    method sendMediaEngineStalled (line 16856) | sendMediaEngineStalled(e) {
    method sendKeySessionComplete (line 16860) | sendKeySessionComplete(e) {
    method sendPlayLikelyToKeepUp (line 16864) | sendPlayLikelyToKeepUp(e) {
    method sendPlayRateChange (line 16868) | sendPlayRateChange(e) {
    method sendSwitchComplete (line 16872) | sendSwitchComplete(e) {
    method sendVariantEnded (line 16876) | sendVariantEnded(e) {
    method sendPlayError (line 16880) | sendPlayError(e) {
    method sendNwError (line 16884) | sendNwError(e) {
    method sendPeriodic (line 16888) | sendPeriodic(e) {
    method fillAndFire (line 16892) | fillAndFire(e, t) {
  class Uf (line 16909) | class Uf extends kl {
    method constructor (line 16910) | constructor(e, t) {
    method activeEntity (line 16913) | get activeEntity() {
    method entity (line 16916) | entity(e) {
    method playEnded (line 16919) | playEnded(e) {
    method periodic (line 16922) | periodic(e) {
    method playStalled (line 16925) | playStalled(e) {
    method mediaEngineStalled (line 16928) | mediaEngineStalled(e) {
    method keySessionComplete (line 16931) | keySessionComplete(e) {
    method playLikelyToKeepUp (line 16934) | playLikelyToKeepUp(e) {
    method playRateChanged (line 16937) | playRateChanged(e) {
    method switchComplete (line 16940) | switchComplete(e) {
    method variantEnded (line 16943) | variantEnded(e) {
    method playError (line 16946) | playError(e) {
    method nwError (line 16949) | nwError(e) {
  class $f (line 16953) | class $f extends fl {
    method constructor (line 16954) | constructor(e) {
    method createEntity (line 16962) | createEntity(e) {
    method updateEnded (line 16993) | updateEnded(e) {
    method updatePeriodic (line 16996) | updatePeriodic(e, t) {
    method updateBufferStalled (line 17001) | updateBufferStalled(e, t) {
    method updateSegmentKeyLoaded (line 17011) | updateSegmentKeyLoaded(e, r) {
    method updateLicenseResponseProcessed (line 17020) | updateLicenseResponseProcessed(e, i) {
    method updateLicenseChallengeError (line 17028) | updateLicenseChallengeError(e, i) {
    method updateLicenseResponseError (line 17036) | updateLicenseResponseError(e, i) {
    method updateKeyAborted (line 17044) | updateKeyAborted(e, t) {
    method updateCanPlay (line 17051) | updateCanPlay(e, t) {
    method updateRateChanged (line 17054) | updateRateChanged(e, t) {
    method updateMediaError (line 17063) | updateMediaError(e, r) {
    method updateMediaElementError (line 17077) | updateMediaElementError(e, t) {
    method updateMediaEngineStalled (line 17096) | updateMediaEngineStalled(e, t) {
    method updateLevelSwitched (line 17106) | updateLevelSwitched(e, d) {
    method updateLevelLoadError (line 17123) | updateLevelLoadError(e, o) {
    method updateVariantEnd (line 17140) | updateVariantEnd(e, t) {
    method updateNwError (line 17143) | updateNwError(e, r) {
    method finalize (line 17157) | finalize(e, t) {
    method updatePlaybackInfo (line 17267) | updatePlaybackInfo(e, s) {
    method updateBufferAppended (line 17279) | updateBufferAppended(e, t) {
    method updateSeeked (line 17286) | updateSeeked(e, t) {
    method updateManifestParsed (line 17293) | updateManifestParsed(e, r) {
    method updateFragLoaded (line 17307) | updateFragLoaded(e, r) {
    method updateFragBuffered (line 17320) | updateFragBuffered(e, i) {
    method updateLevelLoaded (line 17328) | updateLevelLoaded(e, n) {
    method updateLevelsChanged (line 17340) | updateLevelsChanged(e, r) {
    method updateLicenseChallengeRequested (line 17354) | updateLicenseChallengeRequested(e, r) {
    method updateLicenseChallengeReceived (line 17363) | updateLicenseChallengeReceived(e, i) {
    method updateLicenseChallengeSubmitted (line 17371) | updateLicenseChallengeSubmitted(e, i) {
    method updateLicenseChallengeCreated (line 17379) | updateLicenseChallengeCreated(e, i) {
    method updateLicenseResponseRequested (line 17387) | updateLicenseResponseRequested(e, t) {
    method updateLicenseResponseReceived (line 17394) | updateLicenseResponseReceived(e, i) {
    method updateLicenseResponseSubmitted (line 17402) | updateLicenseResponseSubmitted(e, t) {
    method _prepareEventPlayEnded (line 17409) | _prepareEventPlayEnded(e) {
    method _prepareEventPeriodic (line 17435) | _prepareEventPeriodic(e, o) {
    method _prepareEventPlayStalled (line 17456) | _prepareEventPlayStalled(e, s) {
    method _prepareEventKeySessionComplete (line 17467) | _prepareEventKeySessionComplete(e, r) {
    method _prepareEventPlayLikelyToKeepUp (line 17477) | _prepareEventPlayLikelyToKeepUp(e, n) {
    method _prepareEventPlayRateChanged (line 17487) | _prepareEventPlayRateChanged(e, n) {
    method _prepareEventPlayError (line 17497) | _prepareEventPlayError(e, s) {
    method _prepareEventMediaEngineStalled (line 17508) | _prepareEventMediaEngineStalled(e, s) {
    method _prepareEventSwitchComplete (line 17519) | _prepareEventSwitchComplete(e, s) {
    method _prepareEventVariantEnded (line 17530) | _prepareEventVariantEnded(e, n) {
    method _prepareEventNwError (line 17540) | _prepareEventNwError(e, n) {
    method _copyCommonKeys (line 17550) | _copyCommonKeys(e, t) {
    method _computeVariantInfo (line 17553) | _computeVariantInfo(e) {
    method _getMaxNormalizedPeak (line 17591) | _getMaxNormalizedPeak(e) {
    method _getNormalizedPeak (line 17603) | _getNormalizedPeak(e, t) {
    method _getVideoFourCC (line 17606) | _getVideoFourCC(e) {
    method _getVideoQualityIndex (line 17609) | _getVideoQualityIndex(e, t) {
    method _getBitrateRank (line 17612) | _getBitrateRank(e, t, i) {
    method _findTimeWeightedValues (line 17616) | _findTimeWeightedValues(o, l, d) {
    method _computeMediaStats (line 17635) | _computeMediaStats(e) {
    method _computeStats (line 17655) | _computeStats(e) {
    method _getVariantInfo (line 17672) | _getVariantInfo(e, t) {
    method _setTargetDuration (line 17675) | _setTargetDuration(e, t, i) {
    method _isBadSw (line 17678) | _isBadSw(e, t, i, r, n, s, a) {
    method _aggregateTimes (line 17682) | _aggregateTimes(e) {
  class Kf (line 17733) | class Kf {
    method constructor (line 17734) | constructor(e, t, i, r) {
    method destroy (line 17737) | destroy() {
    method detachMedia (line 17740) | detachMedia() {
    method handleError (line 17751) | handleError(e) {
    method handleMediaElementError (line 17767) | handleMediaElementError(e) {
    method handleFragLoaded (line 17770) | handleFragLoaded(e, t) {
    method handleFragBuffered (line 17791) | handleFragBuffered(e) {
    method handleLevelLoaded (line 17799) | handleLevelLoaded(e, t) {
    method handleLevelSwitched (line 17809) | handleLevelSwitched(e) {
    method handleLevelSwitching (line 17820) | handleLevelSwitching(e) {
    method handleLevelsChanged (line 17823) | handleLevelsChanged(e) {
    method handleManifestParsed (line 17828) | handleManifestParsed(e) {
    method handleSeek (line 17840) | handleSeek(e) {
    method handleDesiredRateChanged (line 17850) | handleDesiredRateChanged(e, t) {
    method handleVariantBufferAppended (line 17859) | handleVariantBufferAppended(e, t) {
    method handleStalled (line 17866) | handleStalled(e, t) {
    method handlePlaybackInfo (line 17876) | handlePlaybackInfo(e, t) {
    method checkMediaOptionType (line 17885) | checkMediaOptionType(e) {
    method rtcEventItemId (line 17888) | rtcEventItemId(e = !1) {
    method subscribeAndUpdateStore (line 17891) | subscribeAndUpdateStore() {
    method itemTransitioned (line 17905) | itemTransitioned(e, t) {
    method mediaElementQueryListener (line 17910) | mediaElementQueryListener(e) {
    method registerForEvents (line 17927) | registerForEvents() {
    method keyRequestStarted (line 17931) | keyRequestStarted(e) {
    method keyLoaded (line 17934) | keyLoaded(e) {
    method licenseChallengeReceived (line 17937) | licenseChallengeReceived(e) {
    method licenseChallengeSubmitted (line 17943) | licenseChallengeSubmitted(e) {
    method licenseChallengeCreated (line 17950) | licenseChallengeCreated(e) {
    method licenseResponseSubmitted (line 17960) | licenseResponseSubmitted(e) {
    method licenseResponseProcessed (line 17969) | licenseResponseProcessed(e) {
    method licenseChallengeError (line 17976) | licenseChallengeError(e) {
    method licenseResponseError (line 17982) | licenseResponseError(e) {
    method keyAborted (line 17988) | keyAborted(e) {
    method setPeriodic (line 17995) | setPeriodic(e) {
    method handlePeriodic (line 17998) | handlePeriodic(e) {
    method clearPeriodic (line 18001) | clearPeriodic() {
    method sendAndFinalize (line 18004) | sendAndFinalize(e, t) {
  class jf (line 18062) | class jf {
    method constructor (line 18063) | constructor(e, t = "quadratic-time-weighted", i = {
    method estimate$ (line 18069) | get estimate$() {
    method record (line 18072) | record(e) {
    method getEstimate (line 18081) | getEstimate() {
    method getLatest (line 18149) | getLatest() {
    method recordLatency (line 18161) | recordLatency(e, t) {
    method recordBandwidth (line 18167) | recordBandwidth(e, t, i) {
    method setCleanupTimeout (line 18174) | setCleanupTimeout(e) {
    method clearCleanupTimeout (line 18177) | clearCleanupTimeout() {
    method updateCleanupTimeout (line 18180) | updateCleanupTimeout(e) {
    method cleanUpExpiredEntries (line 18184) | cleanUpExpiredEntries() {
    method destroy (line 18192) | destroy() {
  class Gf (line 18302) | class Gf {
    method constructor (line 18303) | constructor(e = 0) {
    method avg (line 18306) | get avg() {
    method max (line 18309) | get max() {
    method count (line 18312) | get count() {
    method reset (line 18315) | reset() {
    method add (line 18318) | add(e) {
  class zf (line 18322) | class zf extends kl {
    method constructor (line 18323) | constructor(e, t) {
    method getBandwidthEstimate (line 18326) | getBandwidthEstimate(e, t) {
    method getPlaylistEstimate (line 18336) | getPlaylistEstimate(e, t) {
    method getBufferEstimate (line 18348) | getBufferEstimate(e, t) {
    method getFragEstimate (line 18360) | getFragEstimate(e, t) {
    method getCombinedEstimate (line 18372) | getCombinedEstimate() {
    method statsEntity (line 18375) | get statsEntity() {
    method bandwidthSample (line 18378) | get bandwidthSample() {
    method bandwidthStatus (line 18382) | get bandwidthStatus() {
    method fragSample (line 18386) | get fragSample() {
    method bandwidthEstimate$ (line 18390) | get bandwidthEstimate$() {
    method fragEstimate$ (line 18393) | get fragEstimate$() {
    method playlistEstimate$ (line 18396) | get playlistEstimate$() {
    method bufferEstimate$ (line 18399) | get bufferEstimate$() {
    method bandwidthSample$ (line 18402) | get bandwidthSample$() {
    method fragSample$ (line 18407) | get fragSample$() {
    method playlistSample$ (line 18412) | get playlistSample$() {
    method bufferMetric$ (line 18417) | get bufferMetric$() {
  class Xf (line 18423) | class Xf {
    method constructor (line 18424) | constructor(e) {
    method getQuery (line 18427) | getQuery() {
    method getQueryForItem (line 18430) | getQueryForItem(e) {
    method remove (line 18433) | remove(e) {
    method removeAll (line 18436) | removeAll() {
    method setBandwidthSample (line 18439) | setBandwidthSample(e) {
    method setFragSample (line 18442) | setFragSample(e) {
    method setPlaylistSample (line 18445) | setPlaylistSample(e) {
    method setBufferMetric (line 18448) | setBufferMetric(e) {
    method setBandwidthEstimate (line 18451) | setBandwidthEstimate(e) {
    method setFragEstimate (line 18454) | setFragEstimate(e) {
    method setPlaylistEstimate (line 18457) | setPlaylistEstimate(e) {
    method setBufferEstimate (line 18460) | setBufferEstimate(e) {
  method constructor (line 18465) | constructor() {
  method statsEntity (line 18471) | set statsEntity(e) {
  method playlistSample (line 18476) | set playlistSample(t) {
  method bandwidthSample (line 18481) | set bandwidthSample(t) {
  method fragSample (line 18486) | set fragSample(t) {
  method bufferMetric (line 18491) | set bufferMetric(t) {
  method bandwidthEstimate (line 18496) | set bandwidthEstimate(t) {
  method fragEstimate (line 18501) | set fragEstimate(t) {
  method playlistEstimate (line 18506) | set playlistEstimate(t) {
  method bufferEstimate (line 18511) | set bufferEstimate(t) {
  function em (line 18520) | function em(e, t) {
  function tm (line 18528) | function tm(f, m, g) {
  method timeRangeToArray (line 18615) | timeRangeToArray(t) {
  class rm (line 18621) | class rm {
    method constructor (line 18622) | constructor(e, t) {
    method destroy (line 18625) | destroy() {
    method setRTCQuery (line 18628) | setRTCQuery(e) {
    method setupReporter (line 18631) | setupReporter(e) {
    method addPlayTime (line 18638) | addPlayTime(e) {
    method updatePlaybackInfo (line 18642) | updatePlaybackInfo(e, t) {
    method updateStallCount (line 18645) | updateStallCount(e) {
    method updateMediaEngineStallCount (line 18648) | updateMediaEngineStallCount(e) {
    method updateCanPlay (line 18651) | updateCanPlay(e) {
    method updateFragLoaded (line 18654) | updateFragLoaded(e, t, i) {
    method addToAccessLog (line 18658) | addToAccessLog(e) {
    method addToErrorLog (line 18673) | addToErrorLog(e, t) {
    method getAccessLog (line 18688) | getAccessLog(e) {
    method errorLog (line 18702) | get errorLog() {
    method createAccessLogEntry (line 18705) | createAccessLogEntry() {
    method convertStringObjectToPrimitive (line 18729) | convertStringObjectToPrimitive(e) {
    method updateSvrAddrStats (line 18732) | updateSvrAddrStats(t) {
    method translateToAccessLogItem (line 18740) | translateToAccessLogItem(e, t, i, r) {
    method translateToErrorLogItem (line 18772) | translateToErrorLogItem(e, t, i) {
    method hasGap (line 18783) | hasGap(e, t, i, r) {
    method aggregateFragObserverdBitrate (line 18786) | aggregateFragObserverdBitrate(e, t, i, r) {
    method aggregateFragMinMaxBitrate (line 18794) | aggregateFragMinMaxBitrate(e, t) {
    method getVariantInfo (line 18797) | getVariantInfo(e) {
  method getKeySystemFormat (line 18865) | getKeySystemFormat(e) {
  method getKeySystemSecurityLevel (line 18869) | getKeySystemSecurityLevel(e) {
  function dm (line 18888) | function dm(e) {
  function um (line 18892) | function um(e) {
  method shortenLanguageCode (line 19062) | shortenLanguageCode(e) {
  method getRichestVideoCodec (line 19069) | getRichestVideoCodec(e) {
  method getRichestAudioCodec (line 19075) | getRichestAudioCodec(e) {
  method getRichestChannelLayoutForGroupId (line 19081) | getRichestChannelLayoutForGroupId(t, i) {
  function mm (line 19094) | function mm(e) {
  class gm (line 19097) | class gm {
    method constructor (line 19098) | constructor(e) {
    method getMediaFragment (line 19101) | getMediaFragment(e, t, i) {
    method url (line 19119) | get url() {
    method url (line 19125) | set url(e) {
    method programDateTime (line 19128) | get programDateTime() {
    method byteRange (line 19131) | get byteRange() {
    method byteRangeStartOffset (line 19139) | get byteRangeStartOffset() {
    method byteRangeEndOffset (line 19142) | get byteRangeEndOffset() {
    method rangeString (line 19145) | get rangeString() {
    method fragTag (line 19148) | get fragTag() {
  method addMediaToSelectionArray (line 19154) | addMediaToSelectionArray(e, t, i) {
  method addDefaultClosedCaptionOption (line 19167) | addDefaultClosedCaptionOption(e, t, i, r) {
  class Em (line 19201) | class Em {
    method constructor (line 19202) | constructor(e) {
    method isKey (line 19205) | isKey(e) {
    method trySetValue (line 19208) | trySetValue(e, t, i) {
  class Im (line 19212) | class Im {
    method parseTags (line 19213) | static parseTags(t) {
  method parseFunc (line 19228) | parseFunc(e) {
  method parseFunc (line 19264) | parseFunc(e) {
  method constructor (line 19269) | constructor() {
  method parseFunc (line 19273) | parseFunc(e) {
  method parseFunc (line 19287) | parseFunc(e) {
  function Am (line 19309) | function Am(e, t, i) {
  class Om (line 19315) | class Om {
    method isValidPlaylist (line 19316) | static isValidPlaylist(e) {
    method isMediaPlaylist (line 19319) | static isMediaPlaylist(e) {
    method replaceVariables (line 19322) | static replaceVariables(e, t) {
    method parseDecryptData (line 19334) | static parseDecryptData(e, t, i) {
    method shouldSelectKeyTag (line 19352) | static shouldSelectKeyTag(e, t, i) {
    method optOutClosedCaption (line 19355) | static optOutClosedCaption(t) {
    method parseRootPlaylistAlternateMediaOptions (line 19368) | static parseRootPlaylistAlternateMediaOptions(a, o, l, d, u, c) {
    method parseMediaOptionPlaylist (line 19442) | static parseMediaOptionPlaylist(e, t, i = !0, r, n, s, a, o, l, d = 0,...
    method parseRootPlaylist (line 19606) | static parseRootPlaylist(t, e, i, r) {
    method parseAllowedCPC (line 19744) | static parseAllowedCPC(e) {
    method parseSessionKeys (line 19761) | static parseSessionKeys(e, t, i) {
    method parseSessionData (line 19770) | static parseSessionData(e, t) {
  function Fm (line 19882) | function Fm(e, t) {
  function Bm (line 19888) | function Bm(t, r, n, s, a = !1, o = !1) {
  function Um (line 19906) | function Um(e, t, i, r, n, s = !1) {
  function $m (line 19916) | function $m(e) {
  class Vm (line 19926) | class Vm {
    method constructor (line 19927) | constructor(e) {
    method name (line 19930) | get name() {
    method priority (line 19933) | get priority() {
    method expiry (line 19936) | get expiry() {
    method filter (line 19939) | filter(i, e) {
  function Km (line 19946) | function Km(e, t, i) {
  function qm (line 19950) | function qm(t, e) {
  function Hm (line 19956) | function Hm() {
  class jm (line 19974) | class jm extends kl {
    method constructor (line 19975) | constructor(e, t, i) {
    method mediaOptionList (line 19978) | get mediaOptionList() {
    method mediaOptionList$ (line 19982) | get mediaOptionList$() {
    method mediaOptionFromId (line 19987) | mediaOptionFromId(t) {
    method _getFilteredList (line 19991) | _getFilteredList(e) {
    method filteredMediaOptionList (line 19994) | get filteredMediaOptionList() {
    method filteredMediaOptionList$ (line 19997) | get filteredMediaOptionList$() {
    method preferredMediaOptionList (line 20005) | get preferredMediaOptionList() {
    method preferredMediaOptionList$ (line 20008) | get preferredMediaOptionList$() {
    method getNewHost (line 20011) | getNewHost(e) {
  function Qm (line 20017) | function Qm(e) {
  function Wm (line 20021) | function Wm(e, t) {
  function Gm (line 20025) | function Gm(e, t, i, r) {
  function zm (line 20029) | function zm(e, t) {
  class Xm (line 20032) | class Xm extends jm {
    method constructor (line 20033) | constructor(e, t) {
    method makeFilters (line 20036) | static makeFilters() {
    method _initFilters (line 20064) | _initFilters() {
    method preferredHost (line 20067) | get preferredHost() {
    method preferredHost$ (line 20071) | get preferredHost$() {
    method mediaOptionListInfo (line 20076) | get mediaOptionListInfo() {
    method mediaOptionListInfo$ (line 20080) | get mediaOptionListInfo$() {
    method hdrMode$ (line 20085) | get hdrMode$() {
    method maxHdcpLevel$ (line 20088) | get maxHdcpLevel$() {
    method listFallbackVariants (line 20094) | listFallbackVariants(t, e, i, r, n) {
    method getFallbackVariant (line 20103) | getFallbackVariant(t, e, i, r) {
    method makeFilteredListFromVariant (line 20112) | makeFilteredListFromVariant(e, t, i) {
    method hasIframes (line 20125) | get hasIframes() {
    method canSwitchToSDR (line 20129) | canSwitchToSDR(e, t, i = !1) {
    method _listFallbackVariants (line 20143) | static _listFallbackVariants(e, r, n, t, s, a = !1, i = null) {
    method _getFallbackVariant (line 20164) | static _getFallbackVariant(e, t, i, r, n, s = !1) {
    method getMatchingVariant (line 20176) | getMatchingVariant(e, t) {
    method currentPathwayID (line 20192) | get currentPathwayID() {
  function Ym (line 20198) | function Ym(e, t) {
  function Jm (line 20209) | function Jm(e, t, i, r, n, s, a, o = !1) {
  function Zm (line 20224) | function Zm(e) {
  function eg (line 20253) | function eg(i, r, n, s, a, o, l) {
  function tg (line 20296) | function tg(e, t) {
  function ig (line 20300) | function ig(t, i, r) {
  function rg (line 20308) | function rg(e, t, i, r, n, s, a, o, l = !1) {
  function ng (line 20312) | function ng(e, t, i, r, n, s, a, o = !1) {
  function sg (line 20319) | function sg(t, i, r, n) {
  function ag (line 20332) | function ag(e, t, i, r, n) {
  function og (line 20338) | function og(r, t, e, n, s, a) {
  function lg (line 20380) | function lg(t, i, r, n, s, a, o, l) {
  class dg (line 20435) | class dg extends kl {
    method constructor (line 20436) | constructor(e) {
    method currentConfig (line 20439) | get currentConfig() {
    method extendMaxTTFB (line 20443) | get extendMaxTTFB() {
    method config$ (line 20447) | get config$() {
    method userSeek$ (line 20450) | get userSeek$() {
  class ug (line 20455) | class ug extends fl {
    method constructor (line 20456) | constructor() {
  class cg (line 20463) | class cg {
    method constructor (line 20464) | constructor(e) {
    method getQuery (line 20467) | getQuery() {
    method setHlsEntity (line 20470) | setHlsEntity(e) {
    method removeEntity (line 20476) | removeEntity(e) {
    method setStartTime (line 20479) | setStartTime(t) {
    method setUserSeek (line 20484) | setUserSeek(t) {
    method setExtendMaxTTFB (line 20489) | setExtendMaxTTFB(t) {
  function fg (line 20497) | function fg() {
  function mg (line 20501) | function mg() {
  function gg (line 20505) | function gg(r, n) {
  function yg (line 20539) | function yg(e, t, i) {
  function vg (line 20544) | function vg(e, t, i, r, n) {
  function Sg (line 20556) | function Sg(e) {
  function bg (line 20560) | function bg(e, t) {
  function Tg (line 20566) | function Tg(t, i, r = NaN) {
  function Eg (line 20579) | function Eg(e, t, i) {
  function Ig (line 20587) | function Ig(e, t, i, r, n) {
  function wg (line 20600) | function wg(e) {
  class Ag (line 20604) | class Ag extends kl {
    method constructor (line 20605) | constructor(e, t) {
    method itemId (line 20608) | get itemId() {
    method mediaOptionId (line 20611) | get mediaOptionId() {
    method initSegmentEntities (line 20614) | get initSegmentEntities() {
    method mediaLibraryEntity (line 20618) | get mediaLibraryEntity() {
    method mediaOptionDetailsEntityRecord (line 20621) | get mediaOptionDetailsEntityRecord() {
    method mediaOptionDetailsEntity (line 20625) | get mediaOptionDetailsEntity() {
    method mediaOptionDetails (line 20628) | get mediaOptionDetails() {
    method playlistDuration (line 20632) | get playlistDuration() {
    method mediaOptionDetailsEntity$ (line 20636) | get mediaOptionDetailsEntity$() {
    method mediaOptionDetails$ (line 20645) | get mediaOptionDetails$() {
    method playlistDuration$ (line 20650) | get playlistDuration$() {
    method live$ (line 20653) | get live$() {
  class Og (line 20657) | class Og extends fl {
    method constructor (line 20658) | constructor() {
  class kg (line 20666) | class kg {
    method constructor (line 20667) | constructor(e) {
    method getQuery (line 20670) | getQuery() {
    method getQueryForOption (line 20673) | getQueryForOption(e) {
    method createMediaLibraryEntity (line 20676) | createMediaLibraryEntity(e) {
    method setDetailsLoading (line 20683) | setDetailsLoading(e) {
    method archiveMediaOptionDetails (line 20697) | archiveMediaOptionDetails(i, r, n) {
    method setInitSegmentLoading (line 20707) | setInitSegmentLoading(e) {
    method archiveInitSegmentEntity (line 20717) | archiveInitSegmentEntity(i, r) {
    method updatePTSDTS (line 20730) | updatePTSDTS(e, i, t, r) {
    method remove (line 20754) | remove(e) {
    method clear (line 20757) | clear() {
  function Cg (line 20762) | function Cg() {
  function Pg (line 20851) | function Pg(e, n, t) {
  function Rg (line 20903) | function Rg(n, s, i, r) {
  function _g (line 21080) | function _g(e, t, i) {
  class Ng (line 21097) | class Ng {
    method constructor (line 21098) | constructor(e, t, i) {
    method destroy (line 21103) | destroy() {
    method subscribeAndEmit (line 21106) | subscribeAndEmit() {
    method activeItemListener (line 21114) | activeItemListener(e) {
    method rootPlaylistQueryListener (line 21122) | rootPlaylistQueryListener(t, e) {
    method mediaElementQueryListener (line 21203) | mediaElementQueryListener(s, e) {
    method checkAndTriggerReadyForNext (line 21250) | checkAndTriggerReadyForNext(e, t) {
    method loaderQueryListener (line 21256) | loaderQueryListener(e) {
    method triggerAudioSwitch (line 21266) | triggerAudioSwitch(e) {
    method triggerManifestLoaded (line 21271) | triggerManifestLoaded(e) {
    method triggerManifestParsed (line 21284) | triggerManifestParsed(e) {
    method urlRedactedManifestLoaded (line 21298) | urlRedactedManifestLoaded(e) {
    method urlRedactedManifestParsed (line 21302) | urlRedactedManifestParsed(e) {
  function Bg (line 21315) | function Bg(e, a, o, l, d, u) {
  function Ug (line 21328) | function Ug(e, t, i, r, n, s) {
  function Vg (line 21346) | function Vg(e, t) {
  function Kg (line 21350) | function Kg(e) {
  function qg (line 21354) | function qg(e, t) {
  function Hg (line 21358) | function Hg(t, i, e, r) {
  function jg (line 21372) | function jg(t, e, i, r, n, s, a) {
  function Qg (line 21408) | function Qg(e, t) {
  function Wg (line 21419) | function Wg(i, r, n, e, s, a, o, l, t, d, u, c, h, p, f) {
  function Gg (line 21506) | function Gg(e, t, i, r) {
  function zg (line 21514) | function zg(e, t, i, r, n, s) {
  function Xg (line 21519) | function Xg(t, e) {
  function Yg (line 21531) | function Yg(e, t, i) {
  function Jg (line 21535) | function Jg(e, t) {
  function Zg (line 21539) | function Zg(e) {
  function ty (line 21544) | function ty(e, t, i, r) {
  function iy (line 21559) | function iy(e, t, i, r, n) {
  class ay (line 21670) | class ay {
    method constructor (line 21671) | constructor() {
    method createItem (line 21674) | static createItem(e, t, i = NaN, r, n) {
    method activeItemById$ (line 21703) | get activeItemById$() {
    method removedItems$ (line 21706) | get removedItems$() {
    method activeItem (line 21709) | get activeItem() {
    method queueItems$ (line 21712) | get queueItems$() {
    method isFirstItem (line 21715) | get isFirstItem() {
    method playingItem (line 21718) | get playingItem() {
    method loadingItem (line 21721) | get loadingItem() {
    method addQueueItem (line 21724) | addQueueItem(e, t, i, r, n, s) {
    method updatePlayingItemId (line 21731) | updatePlayingItemId() {
    method resetLoadingItem (line 21734) | resetLoadingItem() {
    method isPreloading (line 21739) | isPreloading() {
    method setQueueItem (line 21742) | setQueueItem(t, i, r, n, s) {
    method removeQueueItem (line 21749) | removeQueueItem(e) {
    method clearQueue (line 21752) | clearQueue() {
    method clearAllButActive (line 21755) | clearAllButActive() {
    method earlyAudioSelection (line 21764) | set earlyAudioSelection(t) {
    method earlyAudioSelection (line 21769) | get earlyAudioSelection() {
    method earlySubtitleSelection (line 21773) | set earlySubtitleSelection(t) {
    method earlySubtitleSelection (line 21778) | get earlySubtitleSelection() {
  function oy (line 21784) | function oy(e, t, i, r, n, s) {
  class ly (line 21792) | class ly {
    method constructor (line 21793) | constructor(e, t, i, r, n, s) {
    method destroy (line 21798) | destroy() {
    method discoSeqNum (line 21801) | get discoSeqNum() {
    method _discoSeqNum (line 21804) | get _discoSeqNum() {
    method _discoSeqNum (line 21807) | set _discoSeqNum(e) {
    method anchorMSNs (line 21810) | get anchorMSNs() {
    method _resolvePosition (line 21813) | _resolvePosition(e, t, i) {
    method getDiscoSeqNumForTime (line 21823) | getDiscoSeqNumForTime(e, t) {
    method _updateAnchorByPosition (line 21832) | _updateAnchorByPosition(e, t) {
    method _updateAnchor (line 21848) | _updateAnchor(e, s) {
    method getNextFragments (line 21873) | getNextFragments(i, r, n) {
    method _getNextFragmentsInternal (line 21890) | _getNextFragmentsInternal(r, n) {
    method _getNextFragmentForType (line 21906) | _getNextFragmentForType(e, t, i) {
    method _updateAnchorForType (line 21969) | _updateAnchorForType(e, t) {
  function dy (line 21988) | function dy(e, t, i, r, n) {
  function cy (line 22005) | function cy(r) {
  function py (line 22429) | function py(e, i, t, r) {
  function fy (line 22462) | function fy(e, t, i, r) {
  function gy (line 22568) | function gy(d, u, c, h, p, f) {
  function yy (line 22603) | function yy(e) {
  class Ty (line 22818) | class Ty {
    method constructor (line 22819) | constructor(e, t, i) {
    method parseInitSegment (line 22828) | parseInitSegment(h, e) {
    method parseSegment (line 22868) | parseSegment(y, e) {
    method reset (line 22944) | reset(e) {
    method destroy (line 22951) | destroy(e) {
    method willBeTrackSwitch (line 22954) | willBeTrackSwitch(e, t) {
    method getDemuxerInfo (line 22961) | getDemuxerInfo(e, r, t, i) {
    method handleInitSegmentData (line 22987) | handleInitSegmentData(e) {
    method handleError (line 23008) | handleError(e) {
  function Ey (line 23013) | function Ey(a, e, t, h, p, i, r, n) {
  function Iy (line 23088) | function Iy(e, t, i, r) {
  function Ay (line 23101) | function Ay(e, t) {
  function Oy (line 23106) | function Oy(e) {
  function ky (line 23110) | function ky(e, t) {
  function Cy (line 23114) | function Cy() {
  function Dy (line 23131) | function Dy(e, t) {
  function My (line 23137) | function My(e, t, i) {
  function xy (line 23141) | function xy(e, i, s) {
  function Py (line 23162) | function Py(e, r) {
  function Ry (line 23193) | function Ry(e, t, l) {
  function Ly (line 23229) | function Ly(e, a, o, l, d, u) {
  function _y (line 23408) | function _y(e, t) {
  class Ny (line 23411) | class Ny extends jm {
    method constructor (line 23412) | constructor(e, t, i) {
    method makeFilters (line 23415) | static makeFilters() {
    method _initFilters (line 23418) | _initFilters() {
    method _mediaOptionType (line 23421) | get _mediaOptionType() {
    method preferredHost (line 23424) | get preferredHost() {
    method preferredHost$ (line 23427) | get preferredHost$() {
    method mediaOptionListInfo (line 23430) | get mediaOptionListInfo() {
    method mediaOptionListInfo$ (line 23434) | get mediaOptionListInfo$() {
    method getFallbackVariant (line 23437) | getFallbackVariant(t, e, i, r) {
    method getMatchingAlternateWithPersistentId (line 23449) | getMatchingAlternateWithPersistentId(t, i, r) {
    method matchGroup (line 23453) | matchGroup(e, t, i, r) {
    method getMatchingAlternate (line 23467) | getMatchingAlternate(e, t) {
    method packageAlternateMediaOption (line 23471) | packageAlternateMediaOption(e, t, i) {
    method augmentClosedCaptionsWithForcedSubtitles (line 23474) | augmentClosedCaptionsWithForcedSubtitles(e, t, i) {
    method pairForcedSubtitleMediaOptionWithClosedCaption (line 23481) | pairForcedSubtitleMediaOptionWithClosedCaption(t, i, r) {
    method pairForcedSubtitleMediaOptionWithClosedCaptionInList (line 23489) | static pairForcedSubtitleMediaOptionWithClosedCaptionInList(t, i, e) {
  class Fy (line 23496) | class Fy extends kl {
    method constructor (line 23497) | constructor(e, t) {
    method rootPlaylistEntity (line 23500) | get rootPlaylistEntity() {
    method rootMediaOptionsTuple (line 23503) | get rootMediaOptionsTuple() {
    method itemStartOffset (line 23511) | get itemStartOffset() {
    method highestVideoCodec (line 23515) | get highestVideoCodec() {
    method baseUrl (line 23519) | get baseUrl() {
    method anchorTime (line 23523) | get anchorTime() {
    method discoSeqNum (line 23527) | get discoSeqNum() {
    method discoSeqNum$ (line 23531) | get discoSeqNum$() {
    method audioMediaSelectionGroup (line 23534) | get audioMediaSelectionGroup() {
    method subtitleMediaSelectionGroup (line 23538) | get subtitleMediaSelectionGroup() {
    method audioMediaSelectionOptions (line 23542) | get audioMediaSelectionOptions() {
    method subtitleMediaSelectionOptions (line 23546) | get subtitleMediaSelectionOptions() {
    method contentSteeringOption (line 23550) | get contentSteeringOption() {
    method masterVariableList (line 23554) | get masterVariableList() {
    method loadStats (line 23558) | get loadStats() {
    method isMediaPlaylist (line 23562) | get isMediaPlaylist() {
    method getInitPTS (line 23566) | getInitPTS(e) {
    method abrStatus$ (line 23570) | get abrStatus$() {
    method abrStatus (line 23573) | get abrStatus() {
    method nextMaxAutoOptionId (line 23577) | get nextMaxAutoOptionId() {
    method nextMinAutoOptionId (line 23581) | get nextMinAutoOptionId() {
    method initPTS$ (line 23585) | initPTS$(t) {
    method rootPlaylistEntity$ (line 23590) | get rootPlaylistEntity$() {
    method rootPlaylistEntityAdded$ (line 23593) | get rootPlaylistEntityAdded$() {
    method rootMediaOptionsTuple$ (line 23596) | get rootMediaOptionsTuple$() {
    method sessionData (line 23599) | get sessionData() {
    method sessionData$ (line 23603) | get sessionData$() {
    method anchorTime$ (line 23608) | get anchorTime$() {
    method pendingSeek$ (line 23614) | get pendingSeek$() {
    method enabledMediaOptionKeys$ (line 23619) | get enabledMediaOptionKeys$() {
    method enabledMediaOptionKeys (line 23622) | get enabledMediaOptionKeys() {
    method enabledMediaOptionSwitchContexts (line 23626) | get enabledMediaOptionSwitchContexts() {
    method enabledMediaOptionSwitchContextsByType$ (line 23630) | enabledMediaOptionSwitchContextsByType$(t) {
    method enabledMediaOptions$ (line 23633) | get enabledMediaOptions$() {
    method enabledAVOptions$ (line 23636) | get enabledAVOptions$() {
    method rawEnabledMediaOptionByType$ (line 23639) | rawEnabledMediaOptionByType$(t) {
    method enabledMediaOptionByType$ (line 23648) | enabledMediaOptionByType$(e) {
    method enabledMediaOptionSwitchForType$ (line 23651) | enabledMediaOptionSwitchForType$(e) {
    method enableMediaOptionSwitchedForType$ (line 23658) | enableMediaOptionSwitchedForType$(t) {
    method enabledMediaOptionIdByType (line 23661) | enabledMediaOptionIdByType(e) {
    method enabledVariantMediaOptionIdBeforeTrickplaySwitch (line 23664) | get enabledVariantMediaOptionIdBeforeTrickplaySwitch() {
    method variantMediaOptionById (line 23667) | variantMediaOptionById(e) {
    method alternateMediaOptionById (line 23670) | alternateMediaOptionById(e, t) {
    method enabledAlternateMediaOptionByType (line 23673) | enabledAlternateMediaOptionByType(e) {
    method enabledVariantMediaOption (line 23677) | get enabledVariantMediaOption() {
    method lastLoadedMediaOptionByType (line 23681) | lastLoadedMediaOptionByType(e) {
    method nextMediaOptionsKeys$ (line 23685) | get nextMediaOptionsKeys$() {
    method preferredMediaOptions (line 23688) | get preferredMediaOptions() {
    method preferredMediaOptions$ (line 23691) | get preferredMediaOptions$() {
    method filteredMediaOptions (line 23694) | get filteredMediaOptions() {
    method getDisabledMediaOption (line 23697) | getDisabledMediaOption(e) {
    method getEnabledMediaOptionMask (line 23704) | getEnabledMediaOptionMask() {
    method getPreferredMediaOptionsByType$ (line 23707) | getPreferredMediaOptionsByType$(e) {
    method altMediaOptionHasValidUrl (line 23710) | altMediaOptionHasValidUrl(e, t) {
    method hdrMode$ (line 23714) | get hdrMode$() {
    method maxHdcpLevel$ (line 23717) | get maxHdcpLevel$() {
    method currentPathwayID (line 23720) | get currentPathwayID() {
    method preferredHost (line 23723) | get preferredHost() {
    method getErrorInfoByType (line 23726) | getErrorInfoByType(e) {
    method getInFlightFragByType (line 23730) | getInFlightFragByType(e) {
    method getInFlightFragByType$ (line 23734) | getInFlightFragByType$(t) {
    method matchAlternates (line 23739) | matchAlternates(e, t, i, r) {
    method getLegacyMatchingAlternateWithPersistentId (line 23743) | getLegacyMatchingAlternateWithPersistentId(e, t, i) {
    method isValidMediaOptionTuple (line 23747) | isValidMediaOptionTuple(i, e) {
    method matchGroup (line 23751) | matchGroup(e, t, i, r) {
    method preferHDR (line 23755) | get preferHDR() {
  class Uy (line 23762) | class Uy {
    method constructor (line 23763) | constructor(e, t) {
    method getQuery (line 23766) | getQuery() {
    method getQueryForId (line 23769) | getQueryForId(e) {
    method rootPlaylistEntity (line 23772) | set rootPlaylistEntity(e) {
    method removeItems (line 23775) | removeItems(e) {
    method removeAll (line 23778) | removeAll() {
    method setRootPlaylistEntity (line 23781) | setRootPlaylistEntity(e, t) {
    method setSessionData (line 23784) | setSessionData(e, t) {
    method setAnchorTime (line 23789) | setAnchorTime(e, t) {
    method setDiscoSeqNum (line 23794) | setDiscoSeqNum(e, t) {
    method setPendingSeek (line 23799) | setPendingSeek(e, t) {
    method setEnabledMediaOptionSwitchContextByType (line 23804) | setEnabledMediaOptionSwitchContextByType(e, i, r, n) {
    method setEnabledVariantMediaOptionIdBeforeTrickplaySwitch (line 23816) | setEnabledVariantMediaOptionIdBeforeTrickplaySwitch(e, t) {
    method setEnabledMediaOptionByType (line 23821) | setEnabledMediaOptionByType(r, n, s, a = !1, o) {
    method _associateForcedSubtitleWithClosedCaption (line 23841) | _associateForcedSubtitleWithClosedCaption(e, t, i, r) {
    method _updateEnabledMediaOptionKeys (line 23850) | _updateEnabledMediaOptionKeys(t, i) {
    method setManualMode (line 23874) | setManualMode(e, t) {
    method setEnabledMediaOptions (line 23879) | setEnabledMediaOptions(e, i) {
    method setEnabledMediaOptionsAndSwitchContexts (line 23891) | setEnabledMediaOptionsAndSwitchContexts(e, i, r) {
    method setNextMediaOptions (line 23903) | setNextMediaOptions(e, i) {
    method updateEnabledMediaOptions (line 23915) | updateEnabledMediaOptions(e) {
    method setLastLoadedMediaOptionByType (line 23920) | setLastLoadedMediaOptionByType(r, n, s) {
    method setPreferredHost (line 23930) | setPreferredHost(e, t) {
    method setViewportInfo (line 23935) | setViewportInfo(e, t) {
    method getExistingPersistentIds (line 23940) | static getExistingPersistentIds(e) {
    method doUpdateRootHDRSwitch (line 23957) | static doUpdateRootHDRSwitch(e, t, i, r) {
    method switchToSDROnly (line 23977) | switchToSDROnly(e) {
    method setHDRPreference (line 23983) | setHDRPreference(e, i, r) {
    method setPathwayPriority (line 23993) | setPathwayPriority(e, i) {
    method setCurrentPathwayID (line 24001) | setCurrentPathwayID(e, t) {
    method setInitPTS (line 24006) | setInitPTS(e, t, i, r, n, s) {
    method prunePenaltyBox (line 24016) | static prunePenaltyBox(e, t) {
    method addToPenaltyBox (line 24019) | static addToPenaltyBox(e, t, i) {
    method addToPenaltyBox (line 24025) | addToPenaltyBox(e, r, n) {
    method prunePenaltyBox (line 24034) | prunePenaltyBox(e, r = null) {
    method removePermanently (line 24043) | removePermanently(e, r, n) {
    method moveAllWithMatchingHosts (line 24052) | moveAllWithMatchingHosts(e, r, n, s) {
    method setMaxHdcpLevel (line 24068) | setMaxHdcpLevel(e, i, r = !1) {
    method updateConsecutiveTimeouts (line 24076) | updateConsecutiveTimeouts(e, i, r, n) {
    method updateInflightFrag (line 24100) | updateInflightFrag(l, d, u, c, h) {
    method setNextMaxAutoOptionId (line 24128) | setNextMaxAutoOptionId(e, t) {
    method setNextMinAutoOptionId (line 24135) | setNextMinAutoOptionId(e, t) {
    method setHighBWTrigger (line 24142) | setHighBWTrigger(e, t) {
    method setFragLoadSlow (line 24149) | setFragLoadSlow(e, t) {
    method pickMediaOptionTupleByPersistentId (line 24156) | pickMediaOptionTupleByPersistentId(e, t, i, r = !1, n = !1) {
    method getFallbackMediaOptionTupleFromMediaOptionId (line 24170) | getFallbackMediaOptionTupleFromMediaOptionId(e, t, i, r, n = !1, s = !...
    method hasFallbackMediaOptionTuple (line 24180) | hasFallbackMediaOptionTuple(e, t, i, r) {
    method setLegacyAlternateMediaOption (line 24184) | setLegacyAlternateMediaOption(e, t, i, r, n) {
    method setEnabledMediaOptionTupleWithMatchedGroups (line 24190) | setEnabledMediaOptionTupleWithMatchedGroups(t, i, e, r) {
    method canSwitchToSDR (line 24200) | canSwitchToSDR(e, t, i, r = !1) {
    method getBestMediaOptionTupleFromVariantAndPersistentId (line 24205) | getBestMediaOptionTupleFromVariantAndPersistentId(t, e, i, r, n, s, a,...
  method constructor (line 24219) | constructor() {
  method akitaPreAddEntity (line 24226) | akitaPreAddEntity(e) {
  function Ky (line 24253) | function Ky(e) {
  function Hy (line 24335) | function Hy(e, t, i, r, n, s, a) {
  function jy (line 24370) | function jy(e, t, i) {
  function Qy (line 24381) | function Qy(e, t, i, r, n, s, a, o) {
  function Gy (line 24644) | function Gy(t, o, l, d, u, c, h) {
  method constructor (line 24664) | constructor(e = {}, t) {
  method publicQueries$ (line 24967) | get publicQueries$() {
  method _activeRootQuery (line 24970) | get _activeRootQuery() {
  method _mediaElementQuery (line 24974) | get _mediaElementQuery() {
  method version (line 24978) | static get version() {
  method Events (line 24981) | static get Events() {
  method Events (line 24984) | get Events() {
  method DefaultConfig (line 24987) | static get DefaultConfig() {
  method DefaultConfig (line 24990) | get DefaultConfig() {
  method isSupported (line 24993) | static isSupported() {
  method commitEarlySelection (line 25004) | commitEarlySelection(e) {
  method _handleError (line 25008) | _handleError(i) {
  method updateLiveSeekableRange (line 25027) | updateLiveSeekableRange(e, t) {
  method playbackInfo (line 25037) | playbackInfo(i, r) {
  method currentItem (line 25063) | get currentItem() {
  method realCurrentTime (line 25066) | get realCurrentTime() {
  method realCurrentTime (line 25077) | set realCurrentTime(e) {
  method bufferedDuration (line 25081) | get bufferedDuration() {
  method sessionData (line 25086) | get sessionData() {
  method supportedFrameRates (line 25090) | get supportedFrameRates() {
  method loadSource (line 25097) | loadSource(e, i, t) {
  method queueSource (line 25126) | queueSource(e, t, i) {
  method dequeueSource (line 25133) | dequeueSource(e = "ApplicationInitiated") {
  method triggerItemEvicted (line 25141) | triggerItemEvicted(e, t) {
  method endSource (line 25150) | endSource() {
  method inGaplessMode (line 25153) | get inGaplessMode() {
  method isPreloading (line 25156) | get isPreloading() {
  method isFirstItem (line 25159) | get isFirstItem() {
  method loadingItem (line 25162) | get loadingItem() {
  method playingItem (line 25165) | get playingItem() {
  method url (line 25168) | get url() {
  method destroy (line 25171) | destroy() {
  method attachMedia (line 25177) | attachMedia(e) {
  method detachMedia (line 25184) | detachMedia() {
  method handleResolvedUri (line 25188) | handleResolvedUri(e, t) {
  method variantOptions$ (line 25194) | get variantOptions$() {
  method altAudioOptions$ (line 25203) | get altAudioOptions$() {
  method subtitleOptions$ (line 25209) | get subtitleOptions$() {
  method levels (line 25218) | get levels() {
  method audioTracks (line 25222) | get audioTracks() {
  method audioMediaOptions (line 25226) | get audioMediaOptions() {
  method subtitleMediaOptions (line 25230) | get subtitleMediaOptions() {
  method playbackLikelyToKeepUp (line 25234) | get playbackLikelyToKeepUp() {
  method duration$ (line 25238) | get duration$() {
  method timeupdate$ (line 25244) | get timeupdate$() {
  method playing$ (line 25250) | get playing$() {
  method desiredRate$ (line 25256) | get desiredRate$() {
  method desiredRate (line 25262) | set desiredRate(e) {
  method desiredRate (line 25265) | get desiredRate() {
  method effectiveRate (line 25269) | get effectiveRate() {
  method iframeMode (line 25273) | get iframeMode() {
  method accessLog (line 25277) | get accessLog() {
  method errorLog (line 25280) | get errorLog() {
  method setRate (line 25283) | setRate(e) {
  method sessionData$ (line 25303) | get sessionData$() {
  method skip (line 25306) | set skip(e) {
  method gaplessSeekTo (line 25309) | gaplessSeekTo(e) {
  method isIframeInternalSeek (line 25312) | isIframeInternalSeek(e) {
  method seekTo (line 25315) | set seekTo(e) {
  method seekToDate (line 25325) | seekToDate(e) {
  method availableProgramDateTime (line 25328) | get availableProgramDateTime() {
  method _currentDateToMediaTimeTuple (line 25331) | get _currentDateToMediaTimeTuple() {
  method playingDate (line 25336) | get playingDate() {
  method variantId (line 25346) | set variantId(e) {}
  method audioSelectedPersistentID (line 25347) | set audioSelectedPersistentID(e) {
  method audioSelectedPersistentID (line 25353) | get audioSelectedPersistentID() {
  method subtitleSelectedPersistentID (line 25357) | set subtitleSelectedPersistentID(e) {
  method subtitleSelectedPersistentID (line 25362) | get subtitleSelectedPersistentID() {
  method selectedMediaArray (line 25366) | get selectedMediaArray() {
  method selectedMediaArray (line 25393) | set selectedMediaArray(e) {
  method getHTMLTextTrack (line 25398) | getHTMLTextTrack(e) {
  method keysystems (line 25401) | get keysystems() {
  method setProtectionData (line 25404) | setProtectionData(e) {
  method generateKeyRequest (line 25407) | generateKeyRequest(e, t) {
  method setLicenseResponse (line 25412) | setLicenseResponse(e, t) {
  method bufferInfo$ (line 25415) | get bufferInfo$() {
  method bufferInfoByType$ (line 25427) | bufferInfoByType$(t) {
  method levelWithPersistentId (line 25430) | levelWithPersistentId(e) {
  method startLoad (line 25433) | startLoad(e) {
  method stopLoad (line 25436) | stopLoad() {}
  method config (line 25437) | get config() {
  method media (line 25444) | get media() {
  method subtitleDisplay (line 25447) | set subtitleDisplay(e) {

FILE: src/renderer/apple-hls.js
  function hasUMDWorker (line 10) | function hasUMDWorker() {
  class JSAESDecryptor (line 23) | class JSAESDecryptor {
    method constructor (line 24) | constructor() {
    method uint8ArrayToUint32Array_ (line 40) | uint8ArrayToUint32Array_(arrayBuffer) {
    method initTable (line 49) | initTable() {
    method expandKey (line 105) | expandKey(keyBuffer) {
    method networkToHostOrderSwap (line 174) | networkToHostOrderSwap(word) {
    method decrypt (line 177) | decrypt(inputArrayBuffer, offset, aesIV) {
    method destroy (line 241) | destroy() {
  function removePadding (line 255) | function removePadding(decryptedData) {
  class CryptoRPCServer (line 279) | class CryptoRPCServer {
    method constructor (line 280) | constructor(rpc, logger) {
  class HlsError (line 477) | class HlsError extends Error {
    method constructor (line 478) | constructor(type, details, fatal, reason, response) {
  class PlaylistParsingError (line 562) | class PlaylistParsingError extends HlsError {
    method constructor (line 563) | constructor(type, details, fatal, reason, response) {
  class ExceptionError (line 738) | class ExceptionError extends HlsError {
    method constructor (line 739) | constructor(fatal, reason, response) {
  class FragParsingError (line 744) | class FragParsingError extends HlsError {
    method constructor (line 745) | constructor(fatal, reason, response) {
  class RemuxAllocError (line 749) | class RemuxAllocError extends HlsError {
    method constructor (line 750) | constructor(fatal, reason, response, bytes) {
  function convertTimestampToSeconds (line 756) | function convertTimestampToSeconds(ts) {
  function convertSecondsToTimestamp (line 759) | function convertSecondsToTimestamp(sec, timescale) {
  function convertTimescale (line 765) | function convertTimescale(ts, timescale) {
  function determineMinTimestamp (line 771) | function determineMinTimestamp(a, b) {
  function determineMaxTimestamp (line 776) | function determineMaxTimestamp(a, b) {
  function diffSeconds (line 784) | function diffSeconds(a, b) {
  class EventEmitterPolyfill (line 788) | class EventEmitterPolyfill {
    method constructor (line 789) | constructor() {
    method _on (line 792) | _on(eventName, eventRecord, prepend = false) {
    method _off (line 804) | _off(eventName, record) {
    method on (line 813) | on(eventName, listener) {
    method off (line 816) | off(eventName, listener) {
    method addListener (line 819) | addListener(eventName, listener) {
    method once (line 822) | once(eventName, listener) {
    method removeListener (line 825) | removeListener(eventName, listener) {
    method removeAllListeners (line 828) | removeAllListeners(event) {
    method setMaxListeners (line 832) | setMaxListeners(n) {
    method getMaxListeners (line 835) | getMaxListeners() {
    method listeners (line 839) | listeners(eventName) {
    method rawListeners (line 846) | rawListeners(eventName) {
    method emit (line 849) | emit(eventName, ...args) {
    method listenerCount (line 864) | listenerCount(eventName) {
    method prependListener (line 870) | prependListener(eventName, listener) {
    method prependOnceListener (line 873) | prependOnceListener(eventName, listener) {
    method eventNames (line 876) | eventNames() {
  class Observer (line 885) | class Observer extends EventEmitter {
    method trigger (line 891) | trigger(event, data) {
  class DemuxerBase (line 1015) | class DemuxerBase {
    method constructor (line 1016) | constructor(observer, remuxer, config, typeSupported, logger) {
    method probe (line 1023) | static probe(data, logger) {
    method resetTimeStamp (line 1026) | resetTimeStamp(initPTS90k) { }
    method resetInitSegment (line 1027) | resetInitSegment(initSegment, duration, keyTagInfo, discontinuity) { }
    method destroy (line 1028) | destroy() { }
  class EsDemuxer (line 1030) | class EsDemuxer extends DemuxerBase {
    method constructor (line 1031) | constructor(observer, remuxer, config, typeSupported, logger) {
  class RemuxerBase (line 1041) | class RemuxerBase {
    method constructor (line 1042) | constructor(observer, config, logger) {
    method resetInitSegment (line 1047) | resetInitSegment() { }
    method resetTimeStamp (line 1048) | resetTimeStamp(initPTS90k) { }
    method destroy (line 1049) | destroy() { }
  method strToUtf8array (line 1066) | strToUtf8array(str) {
  method utf8arrayToStr (line 1077) | utf8arrayToStr(array) {
  method strToUtf8array (line 1090) | strToUtf8array(str) {
  method utf8arrayToStr (line 1099) | utf8arrayToStr(array) {
  method strToUtf8array (line 1109) | strToUtf8array(str) {
  method utf8arrayToStr (line 1122) | utf8arrayToStr(array) {
  class ID3 (line 1136) | class ID3 {
    method constructor (line 1138) | constructor(data, logger) {
    method isHeader (line 1205) | static isHeader(data, offset) {
    method readSynchSafeUint32 (line 1217) | static readSynchSafeUint32(data) {
    method readUTF (line 1220) | static readUTF(data, start, len) {
    method isID3Frame (line 1228) | isID3Frame(data, offset) {
    method decodeID3Frame (line 1234) | decodeID3Frame(frame) {
    method decodeTxxxFrame (line 1251) | decodeTxxxFrame(frame) {
    method decodeWxxxFrame (line 1270) | decodeWxxxFrame(frame) {
    method decodeTextFrame (line 1291) | decodeTextFrame(frame) {
    method decodePrivFrame (line 1307) | decodePrivFrame(frame) {
    method _extractID3Frame (line 1318) | _extractID3Frame(data, frameId, frameLen, frameBodyOffset, endPos) {
    method _parseID3Frames (line 1329) | _parseID3Frames(data, offset, endPos) {
    method id3utf8ArrayToStr (line 1410) | id3utf8ArrayToStr(array) {
    method hasTimeStamp (line 1446) | get hasTimeStamp() {
    method timeStamp (line 1449) | get timeStamp() {
    method audioType (line 1452) | get audioType() {
    method length (line 1455) | get length() {
    method payload (line 1458) | get payload() {
    method frames (line 1461) | get frames() {
    method minor (line 1464) | get minor() {
    method revision (line 1467) | get revision() {
  class AACDemuxer (line 1475) | class AACDemuxer extends EsDemuxer {
    method resetInitSegment (line 1476) | resetInitSegment(initSegment, duration) {
    method probe (line 1481) | static probe(data, logger) {
    method append (line 1496) | append(data, timeOffset, contiguous, accurateTimeOffset, keyTagInfo) {
  class BitstreamUtils (line 1584) | class BitstreamUtils {
    method bsReadAndUpdate (line 1598) | bsReadAndUpdate(data, bitStream, numBits) {
    method bsWriteAndUpdate (line 1615) | bsWriteAndUpdate(data, bitStream, numBits, value) {
    method bsSkip (line 1629) | bsSkip(bitStream, numBits) {
    method readBits (line 1633) | readBits(data, bitStream, numBits) {
    method writeBits (line 1687) | writeBits(data, bitStream, numBits, value) {
    method updateOffset (line 1739) | updateOffset(bitStream, numBits) {
  class AC3Demuxer (line 1947) | class AC3Demuxer extends EsDemuxer {
    method resetInitSegment (line 1948) | resetInitSegment(initSegment, duration) {
    method probe (line 1953) | static probe(data, logger) {
    method append (line 1968) | append(data, timeOffset, contiguous, accurateTimeOffset, keyTagInfo) {
  class EC3Demuxer (line 2430) | class EC3Demuxer extends EsDemuxer {
    method resetInitSegment (line 2431) | resetInitSegment(initSegment, duration) {
    method probe (line 2436) | static probe(data, logger) {
    method append (line 2451) | append(data, timeOffset, contiguous, accurateTimeOffset, keyTagInfo) {
  class MP3Demuxer (line 2775) | class MP3Demuxer extends EsDemuxer {
    method resetInitSegment (line 2776) | resetInitSegment(initSegment, duration) {
    method probe (line 2781) | static probe(data, logger) {
    method append (line 2799) | append(data, timeOffset, contiguous, accurateTimeOffset, keyTagInfo) {
  function getSilentFrame (line 2825) | function getSilentFrame(codec, channelCount) {
  function isFiniteNumber (line 3046) | function isFiniteNumber(value) {
  function toFixed (line 3054) | function toFixed(val, precision) {
  function stringifyWithPrecision (line 3066) | function stringifyWithPrecision(obj, precision = 3) {
  function setupRedactUrl (line 3081) | function setupRedactUrl(buildType) {
  function redactUrl (line 3084) | function redactUrl(url) {
  function deepCpy (line 3089) | function deepCpy(obj) {
  function urlRedactedLevelInfo (line 3107) | function urlRedactedLevelInfo(indata) {
  function urlRedactedAltMediaOption (line 3119) | function urlRedactedAltMediaOption(indata) {
  class MP4 (line 3136) | class MP4 {
    method init (line 3137) | static init() {
    method set16 (line 3374) | static set16(num, data, index) {
    method set32 (line 3379) | static set32(num, data, index) {
    method box (line 3386) | static box(type, ...params) {
    method hdlr (line 3409) | static hdlr(type) {
    method mdat (line 3412) | static mdat(data) {
    method mdhd (line 3415) | static mdhd(timescale, duration) {
    method mdia (line 3458) | static mdia(track) {
    method mfhd (line 3464) | static mfhd(sequenceNumber) {
    method minf (line 3476) | static minf(track) {
    method moof (line 3484) | static moof(baseMediaDecodeTime, track) {
    method moov (line 3495) | static moov(tracks) {
    method mvex (line 3503) | static mvex(tracks) {
    method mvhd (line 3512) | static mvhd(timescale, duration) {
    method sdtp (line 3632) | static sdtp(track) {
    method stbl (line 3643) | static stbl(track) {
    method avc1 (line 3651) | static avc1(track) {
    method esds (line 3792) | static esds(config) {
    method audioStsd (line 3825) | static audioStsd(config) {
    method dac3 (line 3858) | static dac3(config) {
    method dec3 (line 3862) | static dec3(config) {
    method mp4a (line 3865) | static mp4a(info, config) {
    method mp3 (line 3879) | static mp3(config) {
    method ac3 (line 3882) | static ac3(info, config) {
    method ec3 (line 3894) | static ec3(info, config) {
    method stsd (line 3906) | static stsd(track) {
    method tkhd (line 3928) | static tkhd(track) {
    method traf (line 4038) | static traf(track, baseMediaDecodeTime) {
    method trak (line 4084) | static trak(track) {
    method trex (line 4095) | static trex(track) {
    method trun (line 4124) | static trun(track, offset) {
    method initSegment (line 4169) | static initSegment(tracks) {
    method saio (line 4180) | static saio(sencOffset) {
    method saiz (line 4197) | static saiz(defaultSampleInfoSize, sampleInfoSizes) {
    method senc (line 4215) | static senc(track) {
    method sinf (line 4270) | static sinf(decryptdata, type, originalCodingName) {
    method frma (line 4273) | static frma(originalCodingName) {
    method schm (line 4276) | static schm() {
    method schi (line 4292) | static schi(decryptdata, type) {
    method tenc (line 4295) | static tenc(decryptdata, trackType) {
    method sbgp (line 4321) | static sbgp(track) {
    method sgpd (line 4350) | static sgpd(track) {
    method pssh (line 4395) | static pssh(systemId, keyids, data) {
  method isAC3 (line 4472) | isAC3(codec) {
  method isEC3 (line 4475) | isEC3(codec) {
  method isDolbyAtmos (line 4478) | isDolbyAtmos(codec, channels) {
  method isAAC (line 4482) | isAAC(codec) {
  method isMP3 (line 4486) | isMP3(codec) {
  method isAVC (line 4490) | isAVC(codec) {
  method isHEVC (line 4503) | isHEVC(codec) {
  method isDolby (line 4507) | isDolby(codec) {
  method isVP09 (line 4510) | isVP09(codec) {
  method isCompatibleCodecString (line 4514) | isCompatibleCodecString(c1, c2) {
  method isVideoCodec (line 4525) | isVideoCodec(codec) {
  method isAudioCodec (line 4528) | isAudioCodec(codec) {
  method isCompatibleVideoCodec (line 4531) | isCompatibleVideoCodec(c1, c2) {
  method isCompatibleAudioCodec (line 4540) | isCompatibleAudioCodec(c1, c2) {
  method getSegmentCodec (line 4549) | getSegmentCodec(audioCodec) {
  method getChannelCount (line 4568) | getChannelCount(channels) {
  method avc1toavcoti (line 4579) | avc1toavcoti(codec) {
  method getDynamicRangeType (line 4593) | getDynamicRangeType(videoRange, videoCodec) {
  method getCompressionType (line 4606) | getCompressionType(videoCodec) {
  method isHigherCodecByFamily (line 4616) | isHigherCodecByFamily(currentCodec, newCodec) {
  class SilentAudio (line 4644) | class SilentAudio {
    method getTrack (line 4645) | static getTrack(observer, id, codec, channelCount, logger) {
    method getSample (line 4677) | static getSample(codec, channelCount) {
    method getSegment (line 4889) | static getSegment(silentTrack, sequenceNumber, startDtsTimescale, segm...
  class EsRemuxer (line 4952) | class EsRemuxer extends RemuxerBase {
    method constructor (line 4953) | constructor(observer, config, typeSupported, vendor, logger) {
    method resetTimeStamp (line 4961) | resetTimeStamp(defaultTimeStamp) {
    method resetInitSegment (line 4964) | resetInitSegment() {
    method remuxEsTracks (line 4976) | remuxEsTracks(audioTrack, videoTrack, id3Track, textTrack, timeOffset,...
    method updateInitPTSDTS (line 5122) | updateInitPTSDTS(videoTrack, audioTrack, timeOffset) {
    method generateIS (line 5151) | generateIS(audioTrack, videoTrack) {
    method remuxVideo (line 5220) | remuxVideo(track, timeOffset, contiguous, audioTrackLength, iframeDura...
    method remuxAudio (line 5480) | remuxAudio(track, timeOffset, contiguous, accurateTimeOffset, keyTagIn...
    method remuxEmptyAudio (line 5736) | remuxEmptyAudio(track, timeOffset, contiguous, accurateTimeOffset, vid...
    method remuxID3 (line 5761) | remuxID3(track, parsingData) {
    method remuxText (line 5777) | remuxText(track, parsingData) {
  function normalizePts (line 5799) | function normalizePts(value, reference) {
  function getVideoStartPts (line 5820) | function getVideoStartPts(videoSamples) {
  function tryStringify (line 5839) | function tryStringify (o) {
  function format$1 (line 5845) | function format$1(f, args, opts) {
  function shouldSerialize (line 5951) | function shouldSerialize (serialize, serializers) {
  function pino (line 5964) | function pino (opts) {
  function set$1 (line 6107) | function set$1 (opts, logger, level, fallback) {
  function wrap (line 6116) | function wrap (opts, logger, level) {
  function asObject (line 6151) | function asObject (logger, level, args, ts) {
  function applySerializers (line 6173) | function applySerializers (args, serialize, serializers, stdErrSerialize) {
  function bind (line 6187) | function bind (parent, bindings, level) {
  function transmit (line 6202) | function transmit (logger, opts, args) {
  function createLogEventShape (line 6230) | function createLogEventShape (bindings) {
  function asErrValue (line 6239) | function asErrValue (err) {
  function getTimeFunction (line 6253) | function getTimeFunction (opts) {
  function mock (line 6263) | function mock () { return {} }
  function passthrough (line 6264) | function passthrough (a) { return a }
  function noop$2 (line 6265) | function noop$2 () {}
  function nullTime (line 6267) | function nullTime () { return false }
  function epochTime (line 6268) | function epochTime () { return Date.now() }
  function unixTime (line 6269) | function unixTime () { return Math.round(Date.now() / 1000.0) }
  function isoTime (line 6270) | function isoTime () { return new Date(Date.now()).toISOString() }
  function pfGlobalThisOrFallback (line 6274) | function pfGlobalThisOrFallback () {
  function addQELevel (line 6292) | function addQELevel(options = {}) {
  function getLoggerConfig (line 6312) | function getLoggerConfig(config = {}) {
  function logFn (line 6334) | function logFn(consoleObj, consoleLevel) {
  function consoleWriteFn (line 6342) | function consoleWriteFn(method, logLevel, o) {
  function getCustomLocaleTimeString (line 6370) | function getCustomLocaleTimeString(isoDateTime) {
  function pad (line 6387) | function pad(number) {
  method bin2str (line 6410) | bin2str(buffer) {
  method readUint16 (line 6413) | readUint16(buffer, offset) {
  method readSint32 (line 6417) | readSint32(buffer, offset) {
  method readUint32 (line 6421) | readUint32(buffer, offset) {
  method writeUint32 (line 6425) | writeUint32(buffer, offset, value) {
  method readUint64 (line 6431) | readUint64(buffer, offset) {
  method writeUint64 (line 6437) | writeUint64(buffer, offset, value) {
  method findBox (line 6445) | findBox(data, path) {
  method findBoxWithOffset (line 6480) | findBoxWithOffset(data, offset, path, walkedPath) {
  class MP4EncryptionRemuxer (line 6547) | class MP4EncryptionRemuxer extends RemuxerBase {
    method constructor (line 6548) | constructor(observer, config, typeSupported, vendor, logger) {
    method _isCommonEncryptionInternal (line 6551) | static _isCommonEncryptionInternal(decryptMethod) {
    method remuxInitSegment (line 6554) | static remuxInitSegment(initSegment, logger, keyTagInfo, sinfArray) {
    method remuxCbc2InitSegment (line 6689) | static remuxCbc2InitSegment(initSegment, traksToAppend, logger) {
    method remuxOverflowSegment (line 6723) | static remuxOverflowSegment(data, logger) {
    method remuxOverflowMoof (line 6762) | static remuxOverflowMoof(moofData) {
    method remuxOverflowTraf (line 6814) | static remuxOverflowTraf(trafData) {
    method remuxText (line 6846) | remuxText(track, parsingData) {
    method remuxIFrame (line 6859) | remuxIFrame(startDTS, videoTrack, audioTrack, iframeDuration, track) {
    method remuxEmsgAndRawData (line 6903) | remuxEmsgAndRawData(audioDuration, hasAudio, videoDuration, hasVideo, ...
    method remuxID3 (line 6939) | remuxID3(track, parsingData) {
  class MP4Demuxer (line 6962) | class MP4Demuxer extends DemuxerBase {
    method constructor (line 6963) | constructor(observer, remuxer, config, typeSupported = undefined, logg...
    method resetTimeStamp (line 6973) | resetTimeStamp(initPTS90k) {
    method isHEVCFlavor (line 6987) | static isHEVCFlavor(codec) {
    method resetInitSegment (line 7013) | resetInitSegment(initSegment, duration, keyTagInfo) {
    method probe (line 7061) | static probe(data, logger) {
    method parseHvcC (line 7065) | static parseHvcC(data) {
    method hvcCToCodecString (line 7089) | static hvcCToCodecString(baseCodecType, codecConfig) {
    method parseDvcC (line 7103) | static parseDvcC(data) {
    method dvcCToCodecString (line 7118) | static dvcCToCodecString(baseCodecType, codecConfig) {
    method parseVpcC (line 7123) | static parseVpcC(data) {
    method vpcCToCodecString (line 7137) | static vpcCToCodecString(baseCodecType, codecConfig) {
    method checkAndAddLeadingZero (line 7143) | static checkAndAddLeadingZero(num) {
    method parseInitSegment (line 7165) | static parseInitSegment(initSegment) {
    method parseStsd (line 7236) | static parseStsd(stsd) {
    method has32BitTfdts (line 7319) | static has32BitTfdts(fragment) {
    method getStartDtsTs (line 7346) | static getStartDtsTs(initData, fragment) {
    method offsetStartDTS (line 7391) | static offsetStartDTS(initData, fragment, timeOffsetTs, audioPrimingDe...
    method writeStartDTS (line 7444) | static writeStartDTS(initData, fragmentData, startDTS) {
    method parseSAIO (line 7479) | static parseSAIO(saio) {
    method parseSAIZ (line 7503) | static parseSAIZ(saiz) {
    method parseSubsample (line 7520) | static parseSubsample(perSampleIVSize, entry) {
    method isSEIMessage (line 7538) | static isSEIMessage(isHEVCFlavor, naluType) {
    method parseCLCPSample (line 7541) | static parseCLCPSample(fragment, startSampleOffset, sampleSize) {
    method parseSamples (line 7571) | static parseSamples(startDTS, fragment, track, iframeDuration, useSEIC...
    method parseEmsg (line 7782) | static parseEmsg(data) {
    method extractID3PayloadCreateID3Track (line 7844) | static extractID3PayloadCreateID3Track(emsgInfo, timeOffset, id3Track,...
    method append (line 7911) | append(data, timeOffset, contiguous, accurateTimeOffset, keyTagInfo, i...
    method extractSEICaptionsFromNALu (line 8011) | static extractSEICaptionsFromNALu(units, textTrack) {
  class ExpGolomb (line 8103) | class ExpGolomb {
    method constructor (line 8104) | constructor(data, logger) {
    method bytesAvailable (line 8114) | get bytesAvailable() {
    method loadWord (line 8117) | loadWord() {
    method skipBits (line 8128) | skipBits(count) {
    method readBits (line 8144) | readBits(size) {
    method skipLZ (line 8166) | skipLZ() {
    method skipUEG (line 8181) | skipUEG() {
    method skipEG (line 8185) | skipEG() {
    method readUEG (line 8189) | readUEG() {
    method readEG (line 8194) | readEG() {
    method readBoolean (line 8206) | readBoolean() {
    method readUByte (line 8210) | readUByte() {
    method readUShort (line 8214) | readUShort() {
    method readUInt (line 8218) | readUInt() {
    method skipScalingList (line 8228) | skipScalingList(count) {
    method readSPS (line 8247) | readSPS() {
    method readSliceType (line 8387) | readSliceType() {
  function isCompleteVideoConfig (line 8400) | function isCompleteVideoConfig(config) {
  class TsDemuxer (line 8409) | class TsDemuxer extends EsDemuxer {
    method constructor (line 8410) | constructor(observer, remuxer, config, typeSupported, logger) {
    method probe (line 8413) | static probe(data, logger) {
    method resetInitSegment (line 8422) | resetInitSegment(initSegment, duration, keyTagInfo) {
    method append (line 8435) | append(data, timeOffset, contiguous, accurateTimeOffset, keyTagInfo, i...
    method destroy (line 8626) | destroy() {
    method _parsePAT (line 8629) | _parsePAT(data, offset) {
    method _parsePMT (line 8633) | _parsePMT(data, offset, typeSupported) {
    method _parsePES (line 8732) | _parsePES(stream) {
    method pushAccesUnit (line 8822) | pushAccesUnit(avcContext, keyTagInfo) {
    method _parseAVCPES (line 8856) | _parseAVCPES(pes, last) {
    method _createAVCSample (line 9018) | _createAVCSample(key, pts, dts, debug) {
    method _insertSampleInOrder (line 9021) | _insertSampleInOrder(arr, data) {
    method _getLastNalUnit (line 9040) | _getLastNalUnit() {
    method _parseAVCNALu (line 9054) | _parseAVCNALu(array) {
    method discardEPB (line 9154) | discardEPB(data) {
    method _parseAACPES (line 9187) | _parseAACPES(pes) {
    method _parseMPEGPES (line 9274) | _parseMPEGPES(pes) {
    method _parseDolbyPES (line 9279) | _parseDolbyPES(pes) {
  class DemuxerInline (line 9352) | class DemuxerInline extends Observer {
    method constructor (line 9353) | constructor(typeSupported, config, vendor, logger) {
    method destroy (line 9360) | destroy() {
    method push (line 9371) | push(data, keyTagInfo, initSegment, timeOffset, discontinuity, trackSw...
  function generateUniqueID (line 9428) | function generateUniqueID() {
  class DemuxRPCServer (line 9436) | class DemuxRPCServer {
    method constructor (line 9437) | constructor(rpc, logger) {
  class RPCWorkerService (line 9482) | class RPCWorkerService {
    method constructor (line 9483) | constructor(worker) {
    method register (line 9510) | register(command, handler) {
    method unregister (line 9516) | unregister(command) {
    method invoke (line 9522) | invoke(command, args, transfer) {
    method teardown (line 9535) | teardown(done) {
    method _respond (line 9539) | _respond(id, command, result, error, transfer) {
    method _send (line 9552) | _send(message, transfer = []) {
  function __extends (line 9611) | function __extends(d, b) {
  function __rest (line 9630) | function __rest(s, e) {
  function __decorate$2 (line 9642) | function __decorate$2(decorators, target, key, desc) {
  function __metadata (line 9649) | function __metadata(metadataKey, metadataValue) {
  function __values (line 9653) | function __values(o) {
  function __read (line 9665) | function __read(o, n) {
  function __spread (line 9683) | function __spread() {
  function isFunction$1 (line 9690) | function isFunction$1(x) {
  method useDeprecatedSynchronousErrorHandling (line 9698) | set useDeprecatedSynchronousErrorHandling(value) {
  method useDeprecatedSynchronousErrorHandling (line 9701) | get useDeprecatedSynchronousErrorHandling() {
  function hostReportError (line 9707) | function hostReportError(err) {
  function isObject$1 (line 9730) | function isObject$1(x) {
  function UnsubscriptionErrorImpl (line 9736) | function UnsubscriptionErrorImpl(errors) {
  function Subscription (line 9751) | function Subscription(unsubscribe) {
  function flattenUnsubscriptionErrors (line 9880) | function flattenUnsubscriptionErrors(errors) {
  function Subscriber (line 9894) | function Subscriber(destinationOrNext, error, complete) {
  function SafeSubscriber (line 9982) | function SafeSubscriber(_parentSubscriber, observerOrNext, error, comple...
  function canReportError (line 10116) | function canReportError(observer) {
  function toSubscriber (line 10133) | function toSubscriber(nextOrObserver, error, complete) {
  function identity (line 10152) | function identity(x) {
  function pipe (line 10157) | function pipe() {
  function pipeFromArray (line 10164) | function pipeFromArray(fns) {
  function Observable (line 10178) | function Observable(subscribe) {
  function getPromiseCtor (line 10276) | function getPromiseCtor(promiseCtor) {
  function ObjectUnsubscribedErrorImpl (line 10288) | function ObjectUnsubscribedErrorImpl() {
  function SubjectSubscription (line 10302) | function SubjectSubscription(subject, subscriber) {
  function SubjectSubscriber (line 10331) | function SubjectSubscriber(destination) {
  function Subject (line 10340) | function Subject() {
  function AnonymousSubject (line 10440) | function AnonymousSubject(destination, source) {
  function refCount (line 10477) | function refCount() {
  function RefCountOperator (line 10483) | function RefCountOperator(connectable) {
  function RefCountSubscriber (line 10500) | function RefCountSubscriber(destination, connectable) {
  function ConnectableObservable (line 10535) | function ConnectableObservable(source, subjectFactory) {
  function ConnectableSubscriber (line 10588) | function ConnectableSubscriber(destination, connectable) {
  function BehaviorSubject (line 10621) | function BehaviorSubject(_value) {
  function Action (line 10660) | function Action(scheduler, work) {
  function AsyncAction (line 10672) | function AsyncAction(scheduler, work) {
  function QueueAction (line 10764) | function QueueAction(scheduler, work) {
  function Scheduler (line 10800) | function Scheduler(SchedulerAction, now) {
  function AsyncScheduler (line 10820) | function AsyncScheduler(SchedulerAction, now) {
  function QueueScheduler (line 10875) | function QueueScheduler() {
  function empty (line 10887) | function empty(scheduler) {
  function emptyScheduled (line 10890) | function emptyScheduled(scheduler) {
  function isScheduler (line 10895) | function isScheduler(value) {
  function scheduleArray (line 10910) | function scheduleArray(input, scheduler) {
  function fromArray (line 10929) | function fromArray(input, scheduler) {
  function of (line 10939) | function of() {
  function throwError (line 10955) | function throwError(error, scheduler) {
  function dispatch$1 (line 10963) | function dispatch$1(_a) {
  function Notification (line 10970) | function Notification(kind, value, error) {
  function observeOn (line 11035) | function observeOn(scheduler, delay) {
  function ObserveOnOperator (line 11044) | function ObserveOnOperator(scheduler, delay) {
  function ObserveOnSubscriber (line 11058) | function ObserveOnSubscriber(destination, scheduler, delay) {
  function ObserveOnMessage (line 11090) | function ObserveOnMessage(notification, destination) {
  function ReplaySubject (line 11100) | function ReplaySubject(bufferSize, windowTime, scheduler) {
  function ReplayEvent (line 11203) | function ReplayEvent(time, value) {
  function AsyncSubject (line 11213) | function AsyncSubject() {
  function noop (line 11258) | function noop() { }
  function isObservable (line 11261) | function isObservable(obj) {
  function ArgumentOutOfRangeErrorImpl (line 11267) | function ArgumentOutOfRangeErrorImpl() {
  function TimeoutErrorImpl (line 11280) | function TimeoutErrorImpl() {
  function map (line 11292) | function map(project, thisArg) {
  function MapOperator (line 11301) | function MapOperator(project, thisArg) {
  function MapSubscriber (line 11312) | function MapSubscriber(destination, project, thisArg) {
  function OuterSubscriber (line 11336) | function OuterSubscriber() {
  function InnerSubscriber (line 11354) | function InnerSubscriber(parent, outerValue, outerIndex) {
  function getSymbolIterator (line 11391) | function getSymbolIterator() {
  function isPromise (line 11449) | function isPromise(value) {
  function subscribeToResult (line 11476) | function subscribeToResult(outerSubscriber, result, outerValue, outerInd...
  function combineLatest (line 11491) | function combineLatest() {
  function CombineLatestOperator (line 11510) | function CombineLatestOperator(resultSelector) {
  function CombineLatestSubscriber (line 11520) | function CombineLatestSubscriber(destination, resultSelector) {
  function scheduleObservable (line 11583) | function scheduleObservable(input, scheduler) {
  function schedulePromise (line 11599) | function schedulePromise(input, scheduler) {
  function scheduleIterable (line 11617) | function scheduleIterable(input, scheduler) {
  function isInteropObservable (line 11660) | function isInteropObservable(input) {
  function isIterable (line 11665) | function isIterable(input) {
  function scheduled (line 11670) | function scheduled(input, scheduler) {
  function from (line 11689) | function from(input, scheduler) {
  function SimpleInnerSubscriber (line 11704) | function SimpleInnerSubscriber(parent) {
  function SimpleOuterSubscriber (line 11724) | function SimpleOuterSubscriber() {
  function innerSubscribe (line 11738) | function innerSubscribe(result, innerSubscriber) {
  function mergeMap (line 11749) | function mergeMap(project, resultSelector, concurrent) {
  function MergeMapOperator (line 11762) | function MergeMapOperator(project, concurrent) {
  function MergeMapSubscriber (line 11776) | function MergeMapSubscriber(destination, project, concurrent) {
  function mergeAll (line 11843) | function mergeAll(concurrent) {
  function concatAll (line 11851) | function concatAll() {
  function concat (line 11856) | function concat() {
  function defer (line 11865) | function defer(observableFactory) {
  function forkJoin (line 11881) | function forkJoin() {
  function forkJoinInternal (line 11903) | function forkJoinInternal(sources, keys) {
  function fromEvent (line 11945) | function fromEvent(target, eventName, options, resultSelector) {
  function setupSubscription (line 11965) | function setupSubscription(sourceObj, eventName, handler, subscriber, op...
  function isNodeStyleEventEmitter (line 11992) | function isNodeStyleEventEmitter(sourceObj) {
  function isJQueryStyleEventEmitter (line 11995) | function isJQueryStyleEventEmitter(sourceObj) {
  function isEventTarget (line 11998) | function isEventTarget(sourceObj) {
  function iif (line 12003) | function iif(condition, trueResult, falseResult) {
  function isNumeric (line 12014) | function isNumeric(val) {
  function merge (line 12019) | function merge() {
  function filter (line 12046) | function filter(predicate, thisArg) {
  function FilterOperator (line 12052) | function FilterOperator(predicate, thisArg) {
  function FilterSubscriber (line 12063) | function FilterSubscriber(destination, predicate, thisArg) {
  function race (line 12087) | function race() {
  function RaceOperator (line 12103) | function RaceOperator() {
  function RaceSubscriber (line 12112) | function RaceSubscriber(destination) {
  function timer (line 12158) | function timer(dueTime, periodOrScheduler, scheduler) {
  function dispatch (line 12181) | function dispatch(state) {
  function zip (line 12195) | function zip() {
  function ZipOperator (line 12207) | function ZipOperator(resultSelector) {
  function ZipSubscriber (line 12217) | function ZipSubscriber(destination, resultSelector, values) {
  function StaticIterator (line 12311) | function StaticIterator(iterator) {
  function StaticArrayIterator (line 12330) | function StaticArrayIterator(array) {
  function ZipBufferIterator (line 12354) | function ZipBufferIterator(destination, parent, observable) {
  function audit (line 12401) | function audit(durationSelector) {
  function AuditOperator (line 12407) | function AuditOperator(durationSelector) {
  function AuditSubscriber (line 12417) | function AuditSubscriber(destination, durationSelector) {
  function auditTime (line 12467) | function auditTime(duration, scheduler) {
  function catchError (line 12475) | function catchError(selector) {
  function CatchOperator (line 12483) | function CatchOperator(selector) {
  function CatchSubscriber (line 12493) | function CatchSubscriber(destination, selector, caught) {
  function concatMap (line 12522) | function concatMap(project, resultSelector) {
  function debounceTime (line 12527) | function debounceTime(dueTime, scheduler) {
  function DebounceTimeOperator (line 12534) | function DebounceTimeOperator(dueTime, scheduler) {
  function DebounceTimeSubscriber (line 12545) | function DebounceTimeSubscriber(destination, dueTime, scheduler) {
  function dispatchNext$1 (line 12583) | function dispatchNext$1(subscriber) {
  function defaultIfEmpty (line 12588) | function defaultIfEmpty(defaultValue) {
  function DefaultIfEmptyOperator (line 12595) | function DefaultIfEmptyOperator(defaultValue) {
  function DefaultIfEmptySubscriber (line 12605) | function DefaultIfEmptySubscriber(destination, defaultValue) {
  function isDate (line 12625) | function isDate(value) {
  function delay (line 12630) | function delay(delay, scheduler) {
  function DelayOperator (line 12639) | function DelayOperator(delay, scheduler) {
  function DelaySubscriber (line 12650) | function DelaySubscriber(destination, delay, scheduler) {
  function DelayMessage (line 12710) | function DelayMessage(time, notification) {
  function delayWhen (line 12718) | function delayWhen(delayDurationSelector, subscriptionDelay) {
  function DelayWhenOperator (line 12728) | function DelayWhenOperator(delayDurationSelector) {
  function DelayWhenSubscriber (line 12738) | function DelayWhenSubscriber(destination, delayDurationSelector) {
  function SubscriptionDelayObservable (line 12803) | function SubscriptionDelayObservable(source, subscriptionDelay) {
  function SubscriptionDelaySubscriber (line 12816) | function SubscriptionDelaySubscriber(parent, source) {
  function distinctUntilChanged (line 12845) | function distinctUntilChanged(compare, keySelector) {
  function DistinctUntilChangedOperator (line 12849) | function DistinctUntilChangedOperator(compare, keySelector) {
  function DistinctUntilChangedSubscriber (line 12860) | function DistinctUntilChangedSubscriber(destination, compare, keySelecto...
  function take (line 12903) | function take(count) {
  function TakeOperator (line 12914) | function TakeOperator(total) {
  function TakeSubscriber (line 12927) | function TakeSubscriber(destination, total) {
  function exhaustMap (line 12948) | function exhaustMap(project, resultSelector) {
  function ExhaustMapOperator (line 12957) | function ExhaustMapOperator(project) {
  function ExhaustMapSubscriber (line 12967) | function ExhaustMapSubscriber(destination, project) {
  function finalize$1 (line 13025) | function finalize$1(callback) {
  function FinallyOperator (line 13029) | function FinallyOperator(callback) {
  function FinallySubscriber (line 13039) | function FinallySubscriber(destination, callback) {
  function takeLast (line 13048) | function takeLast(count) {
  function TakeLastOperator (line 13059) | function TakeLastOperator(total) {
  function TakeLastSubscriber (line 13072) | function TakeLastSubscriber(destination, total) {
  function mapTo (line 13108) | function mapTo(value) {
  function MapToOperator (line 13112) | function MapToOperator(value) {
  function MapToSubscriber (line 13122) | function MapToSubscriber(destination, value) {
  function scan (line 13134) | function scan(accumulator, seed) {
  function ScanOperator (line 13144) | function ScanOperator(accumulator, seed, hasSeed) {
  function ScanSubscriber (line 13159) | function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
  function reduce (line 13203) | function reduce(accumulator, seed) {
  function multicast (line 13215) | function multicast(subjectOrSubjectFactory, selector) {
  function MulticastOperator (line 13236) | function MulticastOperator(subjectFactory, selector) {
  function pairwise (line 13251) | function pairwise() {
  function PairwiseOperator (line 13255) | function PairwiseOperator() {
  function PairwiseSubscriber (line 13264) | function PairwiseSubscriber(destination) {
  function retryWhen (line 13286) | function retryWhen(notifier) {
  function RetryWhenOperator (line 13290) | function RetryWhenOperator(notifier, source) {
  function RetryWhenSubscriber (line 13301) | function RetryWhenSubscriber(destination, notifier, source) {
  function shareSubjectFactory (line 13357) | function shareSubjectFactory() {
  function share (line 13360) | function share() {
  function shareReplay (line 13365) | function shareReplay(configOrBufferSize, windowTime, scheduler) {
  function shareReplayOperator (line 13380) | function shareReplayOperator(_a) {
  function skip (line 13429) | function skip(count) {
  function SkipOperator (line 13433) | function SkipOperator(total) {
  function SkipSubscriber (line 13443) | function SkipSubscriber(destination, total) {
  function startWith (line 13458) | function startWith() {
  function switchMap (line 13474) | function switchMap(project, resultSelector) {
  function SwitchMapOperator (line 13481) | function SwitchMapOperator(project) {
  function SwitchMapSubscriber (line 13491) | function SwitchMapSubscriber(destination, project) {
  function switchMapTo (line 13545) | function switchMapTo(innerObservable, resultSelector) {
  function takeUntil (line 13550) | function takeUntil(notifier) {
  function TakeUntilOperator (line 13554) | function TakeUntilOperator(notifier) {
  function TakeUntilSubscriber (line 13570) | function TakeUntilSubscriber(destination) {
  function takeWhile (line 13585) | function takeWhile(predicate, inclusive) {
  function TakeWhileOperator (line 13594) | function TakeWhileOperator(predicate, inclusive) {
  function TakeWhileSubscriber (line 13605) | function TakeWhileSubscriber(destination, predicate, inclusive) {
  function tap (line 13640) | function tap(nextOrObserver, error, complete) {
  function DoOperator (line 13646) | function DoOperator(nextOrObserver, error, complete) {
  function TapSubscriber (line 13658) | function TapSubscriber(destination, observerOrNext, error, complete) {
  function throttleTime (line 13717) | function throttleTime(duration, scheduler, config) {
  function ThrottleTimeOperator (line 13727) | function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
  function ThrottleTimeSubscriber (line 13740) | function ThrottleTimeSubscriber(destination, duration, scheduler, leadin...
  function dispatchNext (line 13792) | function dispatchNext(arg) {
  function timeoutWith (line 13798) | function timeoutWith(due, withObservable, scheduler) {
  function TimeoutWithOperator (line 13809) | function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, s...
  function TimeoutWithSubscriber (line 13822) | function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, wi...
  function timeout (line 13860) | function timeout(due, scheduler) {
  function withLatestFrom (line 13868) | function withLatestFrom() {
  function WithLatestFromOperator (line 13883) | function WithLatestFromOperator(observables, project) {
  function WithLatestFromSubscriber (line 13894) | function WithLatestFromSubscriber(destination, observables, project) {
  function resetCustomAction (line 13953) | function resetCustomAction() {
  function logAction (line 13957) | function logAction(type, entityIds) {
  function setAction (line 13961) | function setAction(type, entityIds) {
  function action (line 13967) | function action(action, entityIds) {
  function hasEntity (line 13983) | function hasEntity(entities, id) {
  function addEntities (line 13988) | function addEntities(_a) {
  function isNil (line 14026) | function isNil(v) {
  function coerceArray (line 14031) | function coerceArray(value) {
  function isObject (line 14051) | function isObject(value) {
  function isArray (line 14057) | function isArray(value) {
  function getActiveEntities (line 14062) | function getActiveEntities(idOrOptions, ids, currentActive) {
  function isDefined (line 14106) | function isDefined(val) {
  function isEmpty (line 14111) | function isEmpty(arr) {
  function isFunction (line 14119) | function isFunction(value) {
  function isUndefined (line 14124) | function isUndefined(value) {
  function hasActiveState (line 14129) | function hasActiveState(state) {
  function isMultiActiveState (line 14133) | function isMultiActiveState(active) {
  function resolveActiveEntity (line 14137) | function resolveActiveEntity(_a) {
  function getExitingActives (line 14148) | function getExitingActives(currentActivesIds, newIds) {
  function removeEntities (line 14158) | function removeEntities(_a) {
  function removeAllEntities (line 14187) | function removeAllEntities(state) {
  function toEntitiesObject (line 14192) | function toEntitiesObject(entities, idKey, preAddEntity) {
  function isEntityState (line 14218) | function isEntityState(state) {
  function applyMiddleware (line 14222) | function applyMiddleware(entities, preAddEntity) {
  function setEntities (line 14241) | function setEntities(_a) {
  function getAkitaConfig (line 14272) | function getAkitaConfig() {
  function getGlobalProducerFn (line 14275) | function getGlobalProducerFn() {
  function deepFreeze (line 14280) | function deepFreeze(o) {
  function dispatchDeleted (line 14303) | function dispatchDeleted(storeName) {
  function dispatchAdded (line 14307) | function dispatchAdded(storeName) {
  function dispatchUpdate (line 14311) | function dispatchUpdate(storeName, action) {
  function AkitaError (line 14318) | function AkitaError(message) {
  function assertStoreHasName (line 14324) | function assertStoreHasName(name, className) {
  function toBoolean (line 14331) | function toBoolean(value) {
  function isPlainObject$1 (line 14336) | function isPlainObject$1(value) {
  function startBatch (line 14361) | function startBatch() {
  function endBatch (line 14369) | function endBatch() {
  function isTransactionInProcess (line 14378) | function isTransactionInProcess() {
  function commit (line 14382) | function commit() {
  function applyTransaction (line 14397) | function applyTransaction(action, thisArg) {
  function transaction (line 14423) | function transaction() {
  function withTransaction (line 14454) | function withTransaction(next) {
  function Store (line 14486) | function Store(initialState, options) {
  function updateEntities (line 14757) | function updateEntities(_a) {
  function EntityStore (line 14848) | function EntityStore(initialState, options) {
  function EntityUIStore (line 15358) | function EntityUIStore(initialState, storeConfig) {
  function distinctUntilArrayItemChanged (line 15383) | function distinctUntilArrayItemChanged() {
  function hasChange (line 15405) | function hasChange(first, second) {
  function compareValues (line 15419) | function compareValues(key, order) {
  function entitiesToArray (line 15439) | function entitiesToArray(state, options) {
  function entitiesToMap (line 15467) | function entitiesToMap(state, options) {
  function isString (line 15516) | function isString(value) {
  function findEntityByPredicate (line 15521) | function findEntityByPredicate(predicate, entities) {
  function getEntity (line 15541) | function getEntity(id, project) {
  function mapSkipUndefined (line 15558) | function mapSkipUndefined(arr, callbackFn) {
  function compareKeys (line 15570) | function compareKeys(keysOrFuncs) {
  function Query (line 15584) | function Query(store) {
  function sortByOptions (line 15686) | function sortByOptions(options, config) {
  function QueryEntity (line 15706) | function QueryEntity(store, options) {
  function EntityUIQuery (line 15894) | function EntityUIQuery(store) {
  function getValue (line 15915) | function getValue(obj, prop) {
  function setValue (line 15933) | function setValue(obj, prop, val) {
  function AkitaPlugin (line 15954) | function AkitaPlugin(query, config) {
  function PaginatorPlugin (line 16046) | function PaginatorPlugin(query, config) {
  function generatePages (line 16325) | function generatePages(total, perPage) {
  function PersistNgFormPlugin (line 16336) | function PersistNgFormPlugin(query, factoryFnOrPath, params) {
  function EntityCollectionPlugin (line 16457) | function EntityCollectionPlugin(query, entityIds) {
  function StateHistoryPlugin (line 16601) | function StateHistoryPlugin(query, params, _entityId) {
  function EntityStateHistoryPlugin (line 16829) | function EntityStateHistoryPlugin(query, params) {
  function getNestedPath (line 16883) | function getNestedPath(nestedObj, path) {
  function DirtyCheckPlugin (line 16889) | function DirtyCheckPlugin(query, params, _entityId) {
  function EntityDirtyCheckPlugin (line 17004) | function EntityDirtyCheckPlugin(query, params) {
  function guid (line 17109) | function guid() {
  function combineQueries (line 17143) | function combineQueries(observables) {
  function die (line 17226) | function die(error) {
  function isDraft (line 17253) | function isDraft(value) {
  function isDraftable (line 17260) | function isDraftable(value) {
  function isPlainObject (line 17266) | function isPlainObject(value) {
  function original (line 17271) | function original(value) {
  function each (line 17290) | function each(obj, iter, enumerableOnly) {
  function getArchtype (line 17307) | function getArchtype(thing) {
  function has (line 17316) | function has(thing, prop) {
  function get (line 17321) | function get(thing, prop) {
  function set (line 17327) | function set(thing, propOrOldValue, value) {
  function is (line 17336) | function is(x, y) {
  function isMap (line 17346) | function isMap(target) {
  function isSet (line 17351) | function isSet(target) {
  function latest (line 17356) | function latest(state) {
  function shallowCopy (line 17361) | function shallowCopy(base) {
  function freeze (line 17389) | function freeze(obj, deep) {
  function dontMutateFrozenCollections (line 17404) | function dontMutateFrozenCollections() {
  function isFrozen (line 17408) | function isFrozen(obj) {
  function getPlugin (line 17417) | function getPlugin(pluginKey) {
  function loadPlugin (line 17427) | function loadPlugin(pluginKey, implementation) {
  function getCurrentScope (line 17432) | function getCurrentScope() {
  function createScope (line 17437) | function createScope(parent_, immer_) {
  function usePatchesInScope (line 17449) | function usePatchesInScope(scope, patchListener) {
  function revokeScope (line 17458) | function revokeScope(scope) {
  function leaveScope (line 17464) | function leaveScope(scope) {
  function enterScope (line 17469) | function enterScope(immer) {
  function revokeDraft (line 17473) | function revokeDraft(draft) {
  function processResult (line 17478) | function processResult(result, scope) {
  function finalize (line 17513) | function finalize(rootScope, value, path) {
  function finalizeProperty (line 17558) | function finalizeProperty(rootScope, parentState, targetObject, prop, ch...
  function maybeFreeze (line 17592) | function maybeFreeze(scope, value, deep) {
  function createProxyProxy (line 17608) | function createProxyProxy(base, parent) {
  function peek (line 17786) | function peek(draft, prop) {
  function readPropFromProto (line 17792) | function readPropFromProto(state, source, prop) {
  function getDescriptorFromProto (line 17801) | function getDescriptorFromProto(source, prop) {
  function markChanged (line 17815) | function markChanged(state) {
  function prepareCopy (line 17824) | function prepareCopy(state) {
  function Immer (line 17833) | function Immer(config) {
  function createProxy (line 18029) | function createProxy(immer, value, parent) {
  function current (line 18037) | function current(value) {
  function currentImpl (line 18042) | function currentImpl(value) {
  function copyHelper (line 18067) | function copyHelper(value, archType) {
  function enableES5 (line 18081) | function enableES5() {
  function enablePatches (line 18326) | function enablePatches() {
  function enableMapSet (line 18593) | function enableMapSet() {
  function enableAllPlugins (line 18943) | function enableAllPlugins() {
  function castDraft (line 19036) | function castDraft(value) {
  function castImmutable (line 19045) | function castImmutable(value) {
  function __webpack_require__ (line 19186) | function __webpack_require__(moduleId) {
  function defaultSetTimout (line 19287) | function defaultSetTimout() {
  function defaultClearTimeout (line 19290) | function defaultClearTimeout () {
  function runTimeout (line 19313) | function runTimeout(fun) {
  function runClearTimeout (line 19338) | function runClearTimeout(marker) {
  function cleanUpNextTick (line 19370) | function cleanUpNextTick() {
  function drainQueue (line 19385) | function drainQueue() {
  function Item (line 19423) | function Item(fun, array) {
  function noop (line 19437) | function noop() {}
  function parse (line 19718) | function parse(version, loose) {
  function valid (line 19740) | function valid(version, loose) {
  function clean (line 19747) | function clean(version, loose) {
  function SemVer (line 19754) | function SemVer(version, loose) {
  function inc (line 19967) | function inc(version, release, loose, identifier) {
  function diff (line 19981) | function diff(version1, version2) {
  function compareIdentifiers (line 20010) | function compareIdentifiers(a, b) {
  function rcompareIdentifiers (line 20027) | function rcompareIdentifiers(a, b) {
  function major (line 20032) | function major(a, loose) {
  function minor (line 20037) | function minor(a, loose) {
  function patch (line 20042) | function patch(a, loose) {
  function compare (line 20047) | function compare(a, b, loose) {
  function compareLoose (line 20052) | function compareLoose(a, b) {
  function rcompare (line 20057) | function rcompare(a, b, loose) {
  function sort (line 20062) | function sort(list, loose) {
  function rsort (line 20069) | function rsort(list, loose) {
  function gt (line 20076) | function gt(a, b, loose) {
  function lt (line 20081) | function lt(a, b, loose) {
  function eq (line 20086) | function eq(a, b, loose) {
  function neq (line 20091) | function neq(a, b, loose) {
  function gte (line 20096) | function gte(a, b, loose) {
  function lte (line 20101) | function lte(a, b, loose) {
  function cmp (line 20106) | function cmp(a, op, b, loose) {
  function Comparator (line 20131) | function Comparator(comp, loose) {
  function Range (line 20230) | function Range(range, loose) {
  function toComparators (line 20334) | function toComparators(range, loose) {
  function parseComparator (line 20345) | function parseComparator(comp, loose) {
  function isX (line 20358) | function isX(id) {
  function replaceTildes (line 20368) | function replaceTildes(comp, loose) {
  function replaceTilde (line 20374) | function replaceTilde(comp, loose) {
  function replaceCarets (line 20409) | function replaceCarets(comp, loose) {
  function replaceCaret (line 20415) | function replaceCaret(comp, loose) {
  function replaceXRanges (line 20464) | function replaceXRanges(comp, loose) {
  function replaceXRange (line 20471) | function replaceXRange(comp, loose) {
  function replaceStars (line 20537) | function replaceStars(comp, loose) {
  function hyphenReplace (line 20548) | function hyphenReplace($0,
  function testSet (line 20591) | function testSet(set, version) {
  function satisfies (line 20625) | function satisfies(version, range, loose) {
  function maxSatisfying (line 20635) | function maxSatisfying(versions, range, loose) {
  function minSatisfying (line 20655) | function minSatisfying(versions, range, loose) {
  function validRange (line 20675) | function validRange(range, loose) {
  function ltr (line 20687) | function ltr(version, range, loose) {
  function gtr (line 20693) | function gtr(version, range, loose) {
  function outside (line 20698) | function outside(version, range, hilo, loose) {
  function prerelease (line 20768) | function prerelease(version, loose) {
  function intersects (line 20774) | function intersects(r1, r2, loose) {
  function coerce (line 20781) | function coerce(version) {
  class RTCObjectRef (line 20852) | class RTCObjectRef {
    method constructor (line 20853) | constructor(objectNotToDestroy = null) {
    method addInstantiatedObject (line 20857) | addInstantiatedObject(objectToDestroy) {
    method instance (line 20860) | get instance() {
    method destroy (line 20863) | destroy() {
  class RTCReportingAgent (line 20870) | class RTCReportingAgent {
    method constructor (line 20871) | constructor(reportingConfig = {}) {
    method destroy (line 20881) | destroy() {
    method ReportingAllowed (line 20884) | get ReportingAllowed() {
    method version (line 20887) | static get version() {
    method issueReportingEvent (line 20890) | issueReportingEvent(eventID, eventPayload, eventType = _reporting_conf...
    method endSession (line 20901) | endSession() {
    method SessionInfo (line 20911) | set SessionInfo(session_info) {
    method SessionInfo (line 20914) | get SessionInfo() {
    method SessionID (line 20917) | get SessionID() {
    method ClientName (line 20923) | get ClientName() {
    method ServiceName (line 20929) | get ServiceName() {
    method _FuzzFactor (line 20935) | get _FuzzFactor() {
    method _initializeReportingAgent (line 20938) | _initializeReportingAgent(reportingConfig) {
    method _issueSessionBeginEvent (line 21055) | _issueSessionBeginEvent() {
    method _issueSessionEndEvent (line 21061) | _issueSessionEndEvent() {
    method _createSessionID (line 21067) | static _createSessionID() {
  class RTCReportingError (line 21236) | class RTCReportingError extends Error {
    method constructor (line 21237) | constructor(...args) {
  class RTCReportingEvent (line 21258) | class RTCReportingEvent {
    method constructor (line 21259) | constructor(eventID, status = 0, eventPayload = {}, fuzzFactor = 0, ev...
    method prepareEventPayload (line 21268) | prepareEventPayload(sessionInfo, sizeTillLastBatch, sizeOfLastBatch) {
    method EventPayload (line 21277) | get EventPayload() {
    method IsEventRealTime (line 21280) | get IsEventRealTime() {
    method _addEventMetadata (line 21283) | _addEventMetadata() {
  class EventDispatcher (line 2130
Condensed preview — 238 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,482K chars).
[
  {
    "path": ".editorconfig",
    "chars": 188,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 2\ntrim_"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 189,
    "preview": "github: ciderapp\nko_fi: cryptofyre\nopen_collective: ciderapp\ncustom: \"https://opencollective.com/ciderapp/donate/10/mont"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
    "chars": 3378,
    "preview": "name: Bug Report\ndescription: If you encounter an issue whilst using our app, please use this template to help improve t"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 878,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Support Disclaimer\n    url: https://docs.cider.sh/support/disclaime"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/translation.yaml",
    "chars": 1418,
    "preview": "name: Translation Report/Request\ndescription: Request a language or report an issue with one.\ntitle: \"[Translation]: \"\nl"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/translations.md",
    "chars": 114,
    "preview": "---\nname: Translations\nabout: Improvement to our tranlations\ntitle: \"\"\nlabels: 🌐 Translations\nassignees: ''\n---\n\n\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 526,
    "preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
  },
  {
    "path": ".github/workflows/auto-project.yml",
    "chars": 413,
    "preview": "name: Add bugs to bugs project\n\non:\n  issues:\n    types:\n      - opened\n\njobs:\n  add-to-project:\n    name: Add issue to "
  },
  {
    "path": ".github/workflows/cider-chores.yml",
    "chars": 795,
    "preview": "name: Cider Chores\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  compile-and-post:\n    runs-on: ubuntu-latest\n\n    co"
  },
  {
    "path": ".github/workflows/dev-chores.yml",
    "chars": 723,
    "preview": "name: Developer Chores\n\non: [pull_request]\n\njobs:\n    linter-check:\n      runs-on: ${{ matrix.os }}\n\n      strategy:\n   "
  },
  {
    "path": ".github/workflows/stale-issues.yml",
    "chars": 678,
    "preview": "name: 'Close stale issues and PRs'\non:\n  schedule:\n    - cron: '30 1 * * *'\n\npermissions:\n  issues: write\n  pull-request"
  },
  {
    "path": ".github/workflows/support-notice.yml",
    "chars": 587,
    "preview": "name: Support Notice\n\non:\n  issues:\n    types: [opened]\n\njobs:\n  post-notice:\n    runs-on: ubuntu-latest\n\n    steps:\n   "
  },
  {
    "path": ".gitignore",
    "chars": 5712,
    "preview": "# Building\ndist\nbuild\n.flatpak*\nyarn-cache\nsrc/renderer/style.css\n.pnpm-store\n\n# Misc\n.idea\n.vscode\nauth.json\nmusickit.j"
  },
  {
    "path": ".npmrc",
    "chars": 65,
    "preview": "node-linker=hoisted\npublic-hoist-pattern=*\nshamefully-hoist=true\n"
  },
  {
    "path": ".nvmrc",
    "chars": 7,
    "preview": "20.2.0\n"
  },
  {
    "path": ".prettierignore",
    "chars": 76,
    "preview": "src/renderer/*hls*.js\nbuild/*\ndist/*\nsrc/renderer/lib/*\n*.min.*\n.pnpm-store\n"
  },
  {
    "path": ".prettierrc",
    "chars": 230,
    "preview": "{\n  \"printWidth\": 600,\n  \"singleAttributePerLine\": true,\n  \"bracketSameLine\": true,\n  \"overrides\": [\n    {\n      \"files\""
  },
  {
    "path": ".yarnrc.yml",
    "chars": 76,
    "preview": "compressionLevel: mixed\n\nenableGlobalCache: false\n\nnodeLinker: node-modules\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5390,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "LICENSE",
    "chars": 34523,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "README.md",
    "chars": 1050,
    "preview": "<div align=\"center\">\n<picture>\n    <img src=\"resources/icons/icon.png\" width=\"128px\">\n</picture>\n</div>\n<h1 align=\"cente"
  },
  {
    "path": "docs/plugins/example/examplePlugin.ts",
    "chars": 1435,
    "preview": "let i = 1,\n  k = 1;\nclass ExamplePlugin {\n  /**\n   * Private variables for interaction in plugins\n   */\n  private _win: "
  },
  {
    "path": "docs/plugins/sendSongToTitlebar.ts",
    "chars": 1123,
    "preview": "class sendSongToTitlebar {\n  /**\n   * Base Plugin Details (Eventually implemented into a GUI in settings)\n   */\n  public"
  },
  {
    "path": "flatpak/cider-wrapper",
    "chars": 163,
    "preview": "#!/bin/sh\n\nfor i in {0..9}; do\n    test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RU"
  },
  {
    "path": "flatpak/flathub.json",
    "chars": 60,
    "preview": "{\n  \"only-arches\": [\"x86_64\"],\n  \"publish-delay-hours\": 2\n}\n"
  },
  {
    "path": "flatpak/org.cidercollective.cider.yml",
    "chars": 2426,
    "preview": "app-id: org.cidercollective.cider\nruntime: org.freedesktop.Platform\nruntime-version: '21.08'\nsdk: org.freedesktop.Sdk\nba"
  },
  {
    "path": "flatpak/sh.cider.Cider.metainfo.xml",
    "chars": 1494,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component type=\"desktop-application\">\n  <content_rating type=\"oars-1.0\"/>\n  <id>"
  },
  {
    "path": "flatpak/sh.cider.Cider.yml",
    "chars": 2753,
    "preview": "app-id: sh.cider.Cider\nruntime: org.freedesktop.Platform\nruntime-version: '21.08'\nsdk: org.freedesktop.Sdk\nbase: org.ele"
  },
  {
    "path": "msft-test.json",
    "chars": 1270,
    "preview": "{\n  \"electronVersion\": \"16.2.8\",\n  \"electronDownload\": {\n    \"version\": \"16.2.8+wvcus\",\n    \"mirror\": \"https://github.co"
  },
  {
    "path": "package.json",
    "chars": 6955,
    "preview": "{\n  \"name\": \"cider\",\n  \"applicationId\": \"Cider\",\n  \"productName\": \"Cider\",\n  \"version\": \"1.6.4\",\n  \"description\": \"A new"
  },
  {
    "path": "resources/afterPack.cjs",
    "chars": 2008,
    "preview": "exports.default = function (context) {\n  const { execSync } = require(\"child_process\");\n  const fs = require(\"fs\");\n\n  i"
  },
  {
    "path": "resources/entitlements.mac.plist",
    "chars": 559,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "resources/license.json",
    "chars": 170,
    "preview": "{\n  \"$schema\": \"https://github.com/argv-minus-one/dmg-license/raw/master/schema.json\",\n  \"body\": [\n    {\n      \"file\": \""
  },
  {
    "path": "resources/license.txt",
    "chars": 34523,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "resources/macPackager.cjs",
    "chars": 18801,
    "preview": "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst bluebird_lst_1 = require(\"bluebird-ls"
  },
  {
    "path": "resources/notarize.cjs",
    "chars": 509,
    "preview": "require(\"dotenv\").config();\nconst { notarize } = require(\"electron-notarize\");\n\nexports.default = async function notariz"
  },
  {
    "path": "resources/verror-types",
    "chars": 2832,
    "preview": "// Type definitions for verror 1.10\n// Project: https://github.com/davepacheco/node-verror\n// Definitions by: Sven Regli"
  },
  {
    "path": "resources/version.sh",
    "chars": 1957,
    "preview": "#!/bin/bash\n\n# Setup the variables needed\nif [[ $GH_REQUEST_TOKEN != \"\" ]]; then\n\tSTABLE_SHA=$(curl -H \"Authorization: t"
  },
  {
    "path": "src/ciderkit/public.js",
    "chars": 624,
    "preview": "const CiderKit = {\n  v1: {\n    musickit: {\n      async mkv3(route, body, options) {\n        let opts = {\n          metho"
  },
  {
    "path": "src/main/base/app.ts",
    "chars": 14558,
    "preview": "import { Menu, Tray, app, clipboard, ipcMain, nativeImage, shell } from \"electron\";\nimport log from \"electron-log\";\nimpo"
  },
  {
    "path": "src/main/base/browserwindow.ts",
    "chars": 61302,
    "preview": "import AdmZip from \"adm-zip\";\nimport { watch } from \"chokidar\";\nimport { ShareMenu, app, BrowserWindow as bw, dialog, ip"
  },
  {
    "path": "src/main/base/castcontroller.ts",
    "chars": 702,
    "preview": "// @ts-nocheck\nimport castv2Cli from \"castv2-client\";\nconst RequestResponseController = castv2Cli.RequestResponseControl"
  },
  {
    "path": "src/main/base/castreceiver.ts",
    "chars": 2093,
    "preview": "// @ts-nocheck\nimport castv2Cli from \"castv2-client\";\nimport { CiderCastController } from \"./castcontroller.js\";\n\nconst "
  },
  {
    "path": "src/main/base/plugins.ts",
    "chars": 4355,
    "preview": "import {app} from \"electron\";\nimport { existsSync, lstatSync, readdirSync } from \"node:fs\";\nimport { dirname, join } fro"
  },
  {
    "path": "src/main/base/store.ts",
    "chars": 9974,
    "preview": "import ElectronStore from \"electron-store\";\nimport { app, ipcMain } from \"electron\";\nimport fetch from \"node-fetch\";\n\nex"
  },
  {
    "path": "src/main/base/utils.ts",
    "chars": 4950,
    "preview": "import { BrowserWindow, app, ipcMain } from \"electron\";\nimport ElectronStore from \"electron-store\";\nimport fetch from \"n"
  },
  {
    "path": "src/main/base/vcomponents.json",
    "chars": 1856,
    "preview": "[\n  \"pages/podcasts\",\n  \"pages/apple-account-settings\",\n  \"pages/library-songs\",\n  \"pages/library-albums\",\n  \"pages/libr"
  },
  {
    "path": "src/main/base/vrouting.json",
    "chars": 5309,
    "preview": "[\n  {\n    \"page\": \"plugin-renderer\",\n    \"component\": \"<plugin-renderer></plugin-renderer>\",\n    \"condition\": \"page == '"
  },
  {
    "path": "src/main/base/wsapi.ts",
    "chars": 14007,
    "preview": "import WebSocket, { WebSocketServer } from 'ws';\nimport electron from \"electron\";\n\ninterface standardResponse {\n  status"
  },
  {
    "path": "src/main/index.ts",
    "chars": 2770,
    "preview": "// @ts-ignore\nawait import(\"v8-compile-cache\");\n\nimport { app, components, ipcMain } from \"electron\";\nimport { join } fr"
  },
  {
    "path": "src/main/plugins/chromecast.ts",
    "chars": 11967,
    "preview": "import electron from \"electron\";\nimport os from \"os\";\nimport { CiderReceiver } from \"../base/castreceiver.js\";\nimport Me"
  },
  {
    "path": "src/main/plugins/discordrpc.ts",
    "chars": 10878,
    "preview": "import { AutoClient } from \"discord-auto-rpc\";\nimport { ipcMain } from \"electron\";\nimport fetch from \"node-fetch\";\n\nexpo"
  },
  {
    "path": "src/main/plugins/lastfm.ts",
    "chars": 8284,
    "preview": "// @ts-ignore\nimport LastfmAPI from \"lastfmapi\";\n\nexport default class lastfm {\n  /**\n   * Base Plugin Information\n   */"
  },
  {
    "path": "src/main/plugins/menubar.ts",
    "chars": 15150,
    "preview": "import { app, Menu, shell } from \"electron\";\nimport { utils } from \"../base/utils.js\";\n\nexport default class Thumbar {\n "
  },
  {
    "path": "src/main/plugins/mpris.ts",
    "chars": 5515,
    "preview": "import Player from 'mpris-service';\n\nexport default class mpris {\n  /**\n   * Private variables for interaction in plugin"
  },
  {
    "path": "src/main/plugins/playbackNotifications.ts",
    "chars": 4456,
    "preview": "import fetch from \"node-fetch\";\nimport { app, nativeImage, Notification } from \"electron\";\nimport NativeImage = Electron"
  },
  {
    "path": "src/main/plugins/raop.ts",
    "chars": 19254,
    "preview": "import electron from \"electron\";\nimport fetch from \"node-fetch\";\nimport { Stream } from \"stream\";\nimport { Worker } from"
  },
  {
    "path": "src/main/plugins/thumbar.ts",
    "chars": 3908,
    "preview": "import { nativeImage, nativeTheme } from \"electron\";\nimport { utils } from \"../base/utils.js\";\nimport { join } from \"pat"
  },
  {
    "path": "src/main/plugins/webNowPlaying.ts",
    "chars": 7364,
    "preview": "import WebSocket from \"ws\";\n\n/**\n * 0-pad a number.\n * @param {Number} number\n * @param {Number} length\n * @returns Stri"
  },
  {
    "path": "src/main/providers/local/index.ts",
    "chars": 7250,
    "preview": "// import { ProviderDB } from \"./db\";\nimport { EventEmitter } from \"events\";\nimport mm from \"music-metadata\";\nimport { r"
  },
  {
    "path": "src/preload/cider-preload.js",
    "chars": 13934,
    "preview": "global.ipcRenderer = require(\"electron\").ipcRenderer;\nconsole.info(\"Loaded Preload\");\n\nlet cache = { playParams: { id: 0"
  },
  {
    "path": "src/renderer/apple-hls-old.js",
    "chars": 1256400,
    "preview": "/*! For license information please see hls.js.LICENSE.txt */ ! function Xy(Yy) {\n    const Jy = this;\n    var e, t;\n    "
  },
  {
    "path": "src/renderer/apple-hls.js",
    "chars": 2528136,
    "preview": "/*! For license information please see hls.js.LICENSE.txt \nTL,DR: Don't misuse this file for piracy purpose, all rights "
  },
  {
    "path": "src/renderer/assets/fonts/Inter/inter.css",
    "chars": 5158,
    "preview": "@font-face {\n  font-family: \"Inter\";\n  font-style: normal;\n  font-weight: 100;\n  font-display: swap;\n  src: url(\"Inter-T"
  },
  {
    "path": "src/renderer/assets/fonts/Pretendard/pretendardvariable.css",
    "chars": 516,
    "preview": "/*\nCopyright (c) 2021 Kil Hyung-jin, with Reserved Font Name Pretendard.\nhttps://github.com/orioncactus/pretendard\n\nThis"
  },
  {
    "path": "src/renderer/audio/audio.js",
    "chars": 49534,
    "preview": "const CiderAudio = {\n  context: null,\n  source: null,\n  audioNodes: {\n    gainNode: null,\n    spatialNode: null,\n    aud"
  },
  {
    "path": "src/renderer/audio/cloud/audio.js",
    "chars": 46580,
    "preview": "const CiderAudio = {\n  context: null,\n  source: null,\n  audioNodes: {\n    gainNode: null,\n    audioBands: null,\n    vibr"
  },
  {
    "path": "src/renderer/hlscider.js",
    "chars": 1304408,
    "preview": "typeof window !== \"undefined\" &&\n  (function webpackUniversalModuleDefinition(root, factory) {\n    if (typeof exports =="
  },
  {
    "path": "src/renderer/index.js",
    "chars": 7469,
    "preview": "var notyf = new Notyf();\n\nfunction clamp(num, min, max) {\n  return Math.min(Math.max(num, min), max);\n}\n\nconst MusicKitO"
  },
  {
    "path": "src/renderer/less/ameframework.less",
    "chars": 13393,
    "preview": ":root {\n  --appleEase: cubic-bezier(0.42, 0, 0.58, 1);\n  --appleTransition: 0.2s var(--appleEase);\n}\n\n/* Simple CSS fram"
  },
  {
    "path": "src/renderer/less/appvars.less",
    "chars": 569,
    "preview": "@colorMixRate: 1%;\n@transparencyRate: 50%;\n\n@keyColor: #fc3c44;\n@ciderColor: #ff2654;\n@baseColor: #1e1e1e;\n@baseColorMix"
  },
  {
    "path": "src/renderer/less/bootstrap-vue.min.less",
    "chars": 86494,
    "preview": "@charset \"UTF-8\";\n/*!\n * BootstrapVue Custom CSS (https://bootstrap-vue.org)\n */\n.bv-no-focus-ring:focus {\n  outline: no"
  },
  {
    "path": "src/renderer/less/bootstrap.less",
    "chars": 133108,
    "preview": "// Dropdown\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowra"
  },
  {
    "path": "src/renderer/less/codicon.css",
    "chars": 27706,
    "preview": "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Micros"
  },
  {
    "path": "src/renderer/less/compact.less",
    "chars": 972,
    "preview": "#app.compact {\n  .content-inner {\n    zoom: 0.95;\n  }\n  .app-sidebar-content {\n    padding: 0px;\n\n    .app-sidebar-heade"
  },
  {
    "path": "src/renderer/less/directives.less",
    "chars": 8710,
    "preview": "#app.navbar {\n  --navigationBarHeight: 38px;\n}\n\n#app.twopanel {\n  --chromeHeight1: 46px;\n  --chromeHeight2: 90px;\n  --ch"
  },
  {
    "path": "src/renderer/less/elements.less",
    "chars": 46047,
    "preview": "// Form\n\n.md-select {\n  padding: 6px;\n  border-radius: 6px;\n  border: 1px solid rgba(200, 200, 200, 0.1);\n  border-top: "
  },
  {
    "path": "src/renderer/less/fullscreen.less",
    "chars": 11956,
    "preview": ".fullscreen-view-container {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: bla"
  },
  {
    "path": "src/renderer/less/helpers.css",
    "chars": 11316,
    "preview": ".notyf__toast {\n  -webkit-app-region: no-drag;\n  cursor: pointer;\n}\n.notyf-info {\n  background: var(--keyColor);\n}\n.tool"
  },
  {
    "path": "src/renderer/less/helpers.less",
    "chars": 10132,
    "preview": ".notyf__toast {\n  -webkit-app-region: no-drag;\n  cursor: pointer;\n}\n\n.notyf-info {\n  background: var(--keyColor);\n}\n\n.to"
  },
  {
    "path": "src/renderer/less/linux.less",
    "chars": 1211,
    "preview": "// Linux\nbody[platform=\"linux\"] {\n  #window-controls-container {\n    //display: none;\n  }\n\n  .window-controls {\n    just"
  },
  {
    "path": "src/renderer/less/macos.less",
    "chars": 1433,
    "preview": "body[platform=\"darwin\"] {\n  html {\n    background: transparent !important;\n  }\n\n  &.notransparency::before {\n    display"
  },
  {
    "path": "src/renderer/less/macosemu.less",
    "chars": 1148,
    "preview": "#app.macosemu {\n  .app-chrome .app-chrome-item > .window-controls-macos {\n    @controlSize: 12px;\n    display: flex;\n   "
  },
  {
    "path": "src/renderer/less/miniplayer.less",
    "chars": 8098,
    "preview": ".mini-view {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  .fs-ro"
  },
  {
    "path": "src/renderer/less/notyf.less",
    "chars": 6462,
    "preview": "@-webkit-keyframes notyf-fadeinup {\n  0% {\n    opacity: 0;\n    transform: translateY(25%);\n  }\n\n  to {\n    opacity: 1;\n "
  },
  {
    "path": "src/renderer/less/pages.css",
    "chars": 46957,
    "preview": ".content-inner {\n  position: absolute;\n  top: var(--navigationBarHeight);\n  left: 0;\n  padding: 32px;\n  width: 100%;\n  t"
  },
  {
    "path": "src/renderer/less/pages.less",
    "chars": 45347,
    "preview": "// Helpers\n.content-inner {\n  position: absolute;\n  top: var(--navigationBarHeight);\n  left: 0;\n  padding: 32px;\n  width"
  },
  {
    "path": "src/renderer/lib/fast-plural-rules.js",
    "chars": 4156,
    "preview": "!function(n,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?e(exports):\"function\"==typeof define&&define.amd?def"
  },
  {
    "path": "src/renderer/lib/less.js",
    "chars": 146112,
    "preview": "/**\n * Less - Leaner CSS v4.1.1\n * http://lesscss.org\n *\n * Copyright (c) 2009-2021, Alexis Sellier <self@cloudhead.net>"
  },
  {
    "path": "src/renderer/lib/marked.js",
    "chars": 111550,
    "preview": "/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/"
  },
  {
    "path": "src/renderer/lib/smoothscroll.js",
    "chars": 13103,
    "preview": "/* smoothscroll v0.4.4 - 2019 - Dustan Kasten, Jeremias Menichelli - MIT License */\n(function () {\n    'use strict';\n  \n"
  },
  {
    "path": "src/renderer/lib/vue-horizontal.js",
    "chars": 8400,
    "preview": "var VueHorizontal=function(t,e){\"use strict\";function n(t){return t&&\"object\"==typeof t&&\"default\"in t?t:{default:t}}var"
  },
  {
    "path": "src/renderer/lib/vue.dev.js",
    "chars": 407057,
    "preview": "/*!\n * Vue.js v2.6.14\n * (c) 2014-2021 Evan You\n * Released under the MIT License.\n */\n(function (global, factory) {\n   "
  },
  {
    "path": "src/renderer/lib/vue.js",
    "chars": 94151,
    "preview": "/*!\n * Vue.js v2.6.14\n * (c) 2014-2021 Evan You\n * Released under the MIT License.\n */\n!function(e,t){\"object\"==typeof e"
  },
  {
    "path": "src/renderer/main/app.js",
    "chars": 1343,
    "preview": "import { app } from \"./vueapp.js\";\nimport { CiderCache } from \"./cidercache.js\";\nimport { CiderFrontAPI } from \"./ciderf"
  },
  {
    "path": "src/renderer/main/cidercache.js",
    "chars": 520,
    "preview": "const CiderCache = {\n  async getCache(file) {\n    let cache = await ipcRenderer.sendSync(\"get-cache\", file);\n    if (isJ"
  },
  {
    "path": "src/renderer/main/ciderfrontapi.js",
    "chars": 963,
    "preview": "const CiderFrontAPI = {\n  Objects: {\n    MenuEntry: function () {\n      this.id = \"\";\n      this.name = \"\";\n      this.o"
  },
  {
    "path": "src/renderer/main/components/i18n-editor.js",
    "chars": 2868,
    "preview": "import { html } from \"../html.js\";\n\nexport const i18nEditor = Vue.component(\"i18n-editor\", {\n  // language=HTML\n  templa"
  },
  {
    "path": "src/renderer/main/components/sidebar-library-item.js",
    "chars": 970,
    "preview": "import { html } from \"../html.js\";\n\nexport const sidebarLibraryItem = Vue.component(\"sidebar-library-item\", {\n  template"
  },
  {
    "path": "src/renderer/main/components/svg-icon.js",
    "chars": 457,
    "preview": "import { html } from \"../html.js\";\n\nexport const svgIcon = Vue.component(\"svg-icon\", {\n  template: html` <div class=\"_sv"
  },
  {
    "path": "src/renderer/main/events.js",
    "chars": 3276,
    "preview": "const Events = {\n  InitEvents() {\n    const app = window.app;\n\n    // add event listener for when window.location.hash c"
  },
  {
    "path": "src/renderer/main/gamepad.js",
    "chars": 8975,
    "preview": "function simulateGamepad() {\n  const app = window.app;\n  app.chrome.showCursor = true;\n  let cursorPos = [0, 0];\n  let i"
  },
  {
    "path": "src/renderer/main/html.js",
    "chars": 47,
    "preview": "export function html(str) {\n  return str[0];\n}\n"
  },
  {
    "path": "src/renderer/main/mica.js",
    "chars": 2434,
    "preview": "import { CiderCache } from \"./cidercache.js\";\n\nasync function spawnMica() {\n  if (typeof window.micaSpawned !== \"undefin"
  },
  {
    "path": "src/renderer/main/musickittools.js",
    "chars": 1351,
    "preview": "const MusicKitTools = {\n  async v3Backend({ route = \"\", getBody = {}, options = {} }) {\n    return await await ipcRender"
  },
  {
    "path": "src/renderer/main/vueapp.js",
    "chars": 198784,
    "preview": "import { store } from \"./vuex-store.js\";\n\nVue.use(VueHorizontal);\nVue.use(VueObserveVisibility);\nVue.use(BootstrapVue);\n"
  },
  {
    "path": "src/renderer/main/vuex-store.js",
    "chars": 1651,
    "preview": "const store = new Vuex.Store({\n  state: {\n    windowRelativeScale: 1,\n    library: {\n      // songs: ipcRenderer.sendSyn"
  },
  {
    "path": "src/renderer/main/wsapi_interop.js",
    "chars": 7661,
    "preview": "const wsapi = {\n  cache: { playParams: { id: 0 }, status: null, remainingTime: 0 },\n  playbackCache: { status: null, tim"
  },
  {
    "path": "src/renderer/style.less",
    "chars": 73222,
    "preview": "@import url(\"assets/fonts/Pretendard/pretendardvariable.css\");\n@import url(\"https://fonts.googleapis.com/css2?family=Not"
  },
  {
    "path": "src/renderer/sw.js",
    "chars": 2776,
    "preview": "if (!self.define) {\n  let e,\n    i = {};\n  const s = (s, r) => (\n    (s = new URL(s + \".js\", r).href),\n    i[s] ||\n     "
  },
  {
    "path": "src/renderer/themes/WIP.md",
    "chars": 663,
    "preview": "# Themes (WIP)\n\n## Making a theme\n* If one does not already exist, create a new theme directory in the user data folder."
  },
  {
    "path": "src/renderer/themes/compactui.less",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/renderer/themes/dark.less",
    "chars": 27,
    "preview": "#app {\n  --color1: #111;\n}\n"
  },
  {
    "path": "src/renderer/themes/default.less",
    "chars": 17,
    "preview": "// Default theme\n"
  },
  {
    "path": "src/renderer/themes/grain.less",
    "chars": 50,
    "preview": "body.notransparency::before {\n  display: block;\n}\n"
  },
  {
    "path": "src/renderer/themes/inline_drawer.less",
    "chars": 896,
    "preview": "&:not(.modular-fs) {\n  .app-drawer {\n    border-radius: 0px;\n    top: 0;\n    right: 0;\n    height: 100%;\n    box-shadow:"
  },
  {
    "path": "src/renderer/themes/reduce_visuals.less",
    "chars": 2402,
    "preview": "body {\n  --ciderShadow-Generic: var(--mediaItemShadow);\n  --mediaItemShadow-Shadow: var(--mediaItemShadow);\n  --mediaIte"
  },
  {
    "path": "src/renderer/themes/sweetener.less",
    "chars": 2905,
    "preview": "@panelColorsFallback: rgb(30 30 30);\n@panelColors: rgb(30 30 30 / 45%);\n\n.menu-panel {\n  .menu-panel-body {\n    backgrou"
  },
  {
    "path": "src/renderer/todo.js",
    "chars": 6478,
    "preview": "// Apple Music Listen Now Page\n// URL : https://amp-api.music.apple.com/v1/me/recommendations?timezone=+00:00\n//  &with="
  },
  {
    "path": "src/renderer/views/app/app-navigation.ejs",
    "chars": 6984,
    "preview": "<div\n  class=\"app-navigation\"\n  v-cloak>\n  <transition name=\"wpfade\">\n    <div\n      class=\"usermenu-container\"\n      v-"
  },
  {
    "path": "src/renderer/views/app/chrome-bottom.ejs",
    "chars": 12553,
    "preview": "<div class=\"app-chrome chrome-bottom\" v-if=\"getThemeDirective('windowLayout') == 'twopanel'\"\n     :style=\"{'display': ch"
  },
  {
    "path": "src/renderer/views/app/chrome-top.ejs",
    "chars": 21200,
    "preview": "<div class=\"app-chrome\" :style=\"{'display': chrome.topChromeVisible ? '' : 'none'}\">\n    <div class=\"app-chrome--left\">\n"
  },
  {
    "path": "src/renderer/views/app/panels.ejs",
    "chars": 7560,
    "preview": "<cider-menu-panel v-if=\"menuPanel.visible\"> </cider-menu-panel>\n<transition name=\"wpfade\">\n  <div\n    class=\"bg-artwork-"
  },
  {
    "path": "src/renderer/views/components/add-to-playlist.ejs",
    "chars": 3218,
    "preview": "<script type=\"text/x-template\" id=\"add-to-playlist\">\n    <div class=\"modal-fullscreen addtoplaylist-panel\" @click.self=\""
  },
  {
    "path": "src/renderer/views/components/airplay-modal.ejs",
    "chars": 1529,
    "preview": "<script type=\"text/x-template\" id=\"airplay-modal\">\n    <div class=\"spatialproperties-panel castmenu modal-fullscreen air"
  },
  {
    "path": "src/renderer/views/components/animatedartwork-view.ejs",
    "chars": 3171,
    "preview": "<script type=\"text/x-template\" id=\"animatedartwork-view\">\n    <div class=\"animated\" v-bind:vid=\"app.hashCode(video).toSt"
  },
  {
    "path": "src/renderer/views/components/app-content.ejs",
    "chars": 1811,
    "preview": "<script type=\"text/x-template\" id=\"app-content-area\">\n    <div id=\"app-content\" :scrollpos=\"$root.chrome.contentScrollPo"
  },
  {
    "path": "src/renderer/views/components/artist-chip.ejs",
    "chars": 1752,
    "preview": "<script type=\"text/x-template\" id=\"artist-chip\">\n    <div class=\"artist-chip\" @click.self=\"route\" tabindex=\"0\">\n        "
  },
  {
    "path": "src/renderer/views/components/artwork-material.ejs",
    "chars": 746,
    "preview": "<script type=\"text/x-template\" id=\"artwork-material\">\n    <div class=\"artworkMaterial\">\n        <mediaitem-artwork :url="
  },
  {
    "path": "src/renderer/views/components/audio-controls.ejs",
    "chars": 3942,
    "preview": "<script type=\"text/x-template\" id=\"audio-controls\">\n    <div class=\"modal-fullscreen addtoplaylist-panel\" @click.self=\"a"
  },
  {
    "path": "src/renderer/views/components/audio-playbackrate.ejs",
    "chars": 2320,
    "preview": "<script type=\"text/x-template\" id=\"audio-playbackrate\">\n    <div class=\"modal-fullscreen addtoplaylist-panel\" @click.sel"
  },
  {
    "path": "src/renderer/views/components/audio-settings.ejs",
    "chars": 2716,
    "preview": "<script type=\"text/x-template\" id=\"audio-settings\">\n    <template>\n        <div class=\"modal-fullscreen addtoplaylist-pa"
  },
  {
    "path": "src/renderer/views/components/c2-upgrade.ejs",
    "chars": 3106,
    "preview": "<template\n  type=\"text/x-template\"\n  id=\"c2-upgrade\">\n  <div\n    class=\"modal-fullscreen addtoplaylist-panel\"\n    @click"
  },
  {
    "path": "src/renderer/views/components/castmenu.ejs",
    "chars": 10032,
    "preview": "<script type=\"text/x-template\" id=\"castmenu\">\n    <div class=\"spatialproperties-panel castmenu modal-fullscreen\" @click."
  },
  {
    "path": "src/renderer/views/components/cider-modal.ejs",
    "chars": 3069,
    "preview": "<script type=\"text/x-template\" id=\"add-to-playlist\">\n    <template>\n        <div class=\"modal-fullscreen modal-generic\" "
  },
  {
    "path": "src/renderer/views/components/editorialNotes.ejs",
    "chars": 369,
    "preview": "<div class=\"modal-backdrop\">\n    <div class=\"modal-dialog\">\n        <div class=\"modal-header\">\n            <button type="
  },
  {
    "path": "src/renderer/views/components/equalizer.ejs",
    "chars": 25934,
    "preview": "<script type=\"text/x-template\" id=\"eq-view\">\n    <div class=\"modal-fullscreen equalizer-panel\" @click.self=\"close()\" @co"
  },
  {
    "path": "src/renderer/views/components/fullscreen.ejs",
    "chars": 14994,
    "preview": "<script type=\"text/x-template\" id=\"fullscreen-view\">\n    <div class=\"fullscreen-view\" tabindex=\"0\">\n        <div class=\""
  },
  {
    "path": "src/renderer/views/components/hello-world.ejs",
    "chars": 300,
    "preview": "<script type=\"text/x-template\" id=\"hello-world\">\n    <button @click=\"sayHello()\">Hello world!</button>\n</script>\n\n<scrip"
  },
  {
    "path": "src/renderer/views/components/inline-collection-list.ejs",
    "chars": 4424,
    "preview": "<script type=\"text/x-template\" id=\"inline-collection-list\">\n    <div class=\"collection-page\">\n        <h3 class=\"header-"
  },
  {
    "path": "src/renderer/views/components/karaoke-in.ejs",
    "chars": 864,
    "preview": "<script type=\"text/x-template\" id=\"karaoke-in\">\n    <div class=\"karaoke-viewer\">\n        <div class=\"lyric\">\n           "
  },
  {
    "path": "src/renderer/views/components/libraryartist-item.ejs",
    "chars": 7694,
    "preview": "<script type=\"text/x-template\" id=\"libraryartist-item\">\n    <div v-observe-visibility=\"{callback: visibilityChanged}\"\n  "
  },
  {
    "path": "src/renderer/views/components/listennow-child.ejs",
    "chars": 5392,
    "preview": "<script type=\"text/x-template\" id=\"listennow-child\">\n    <div v-observe-visibility=\"{callback: visibilityChanged}\">\n    "
  },
  {
    "path": "src/renderer/views/components/listitem-horizontal.ejs",
    "chars": 2071,
    "preview": "<script type=\"text/x-template\" id=\"listitem-horizontal\">\n    <div class=\"listitem-horizontal\">\n        <vue-horizontal>\n"
  },
  {
    "path": "src/renderer/views/components/lyrics-view.ejs",
    "chars": 10892,
    "preview": "<script type=\"text/x-template\" id=\"lyrics-view\">\n    <div ref=\"lyricsview\" class=\"md-body lyric-body\">\n        <template"
  },
  {
    "path": "src/renderer/views/components/mediaitem-artwork.ejs",
    "chars": 3965,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-artwork\">\n    <div class=\"mediaitem-artwork\" :style=\"awStyle\" @contextmenu="
  },
  {
    "path": "src/renderer/views/components/mediaitem-hrect.ejs",
    "chars": 1296,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-hrect\">\n    <template>\n        <div @click=\"app.playMediaItemById(item.attr"
  },
  {
    "path": "src/renderer/views/components/mediaitem-info.ejs",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/renderer/views/components/mediaitem-list-item.ejs",
    "chars": 30017,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-list-item\">\n    <div v-observe-visibility=\"{callback: visibilityChanged, th"
  },
  {
    "path": "src/renderer/views/components/mediaitem-mvview-sp.ejs",
    "chars": 4094,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-mvview-sp\">\n    <div v-if=\"(item.attributes?.editorialArtwork?.subscription"
  },
  {
    "path": "src/renderer/views/components/mediaitem-mvview.ejs",
    "chars": 3625,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-mvview\">\n    <template>\n        <div style=\"position: relative; display: in"
  },
  {
    "path": "src/renderer/views/components/mediaitem-scroller-horizontal-large.ejs",
    "chars": 414,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-scroller-horizontal-large\">\n    <vue-horizontal>\n        <mediaitem-square "
  },
  {
    "path": "src/renderer/views/components/mediaitem-scroller-horizontal-mvview.ejs",
    "chars": 1810,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-scroller-horizontal-mvview\">\n    <vue-horizontal>\n        <template v-if=\"b"
  },
  {
    "path": "src/renderer/views/components/mediaitem-scroller-horizontal-sp.ejs",
    "chars": 806,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-scroller-horizontal-sp\">\n    <div class=\"cd-hmedia-scroller hmedia-scroller"
  },
  {
    "path": "src/renderer/views/components/mediaitem-scroller-horizontal.ejs",
    "chars": 740,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-scroller-horizontal\">\n    <vue-horizontal ref=\"horizontal\">\n        <slot><"
  },
  {
    "path": "src/renderer/views/components/mediaitem-square.ejs",
    "chars": 23877,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-square\">\n  <div tabindex=\"0\" class=\"cd-mediaitem-square-container\"\n       @"
  },
  {
    "path": "src/renderer/views/components/menu-panel.ejs",
    "chars": 5565,
    "preview": "<script type=\"text/x-template\" id=\"cider-menu-panel\">\n    <div class=\"menu-panel\" @click.self=\"menuPanel.visible = false"
  },
  {
    "path": "src/renderer/views/components/miniplayer.ejs",
    "chars": 13084,
    "preview": "<script type=\"text/x-template\" id=\"mini-view\">\n    <div class=\"mini-view\" tabindex=\"0\">\n        <div class=\"background\">"
  },
  {
    "path": "src/renderer/views/components/moreinfo-modal.ejs",
    "chars": 1160,
    "preview": "<script type=\"text/x-template\" id=\"moreinfo-modal\">\n    <div class=\"modal-fullscreen spatialproperties-panel moreinfo-mo"
  },
  {
    "path": "src/renderer/views/components/pagination.ejs",
    "chars": 5637,
    "preview": "<script type=\"text/x-template\" id=\"pagination\">\n    <div class=\"pagination-container\" v-if=\"!isInfinite\">\n        <butto"
  },
  {
    "path": "src/renderer/views/components/pathmenu.ejs",
    "chars": 2300,
    "preview": "<script type=\"text/x-template\" id=\"pathmenu\">\n    <div class=\"spatialproperties-panel castmenu pathmenu modal-fullscreen"
  },
  {
    "path": "src/renderer/views/components/playlists.ejs",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "src/renderer/views/components/plugin-menu.ejs",
    "chars": 1498,
    "preview": "<script type=\"text/x-template\" id=\"plugin-menu\">\n    <div class=\"modal-fullscreen addtoplaylist-panel\" @click.self=\"app."
  },
  {
    "path": "src/renderer/views/components/qrcode-modal.ejs",
    "chars": 824,
    "preview": "<script type=\"text/x-template\" id=\"qrcode-modal\">\n    <div class=\"modal-fullscreen spatialproperties-panel\">\n        <di"
  },
  {
    "path": "src/renderer/views/components/queue.ejs",
    "chars": 8151,
    "preview": "<script type=\"text/x-template\" id=\"cider-queue\">\n    <div class=\"queue-panel\">\n        <div class=\"row\">\n            <di"
  },
  {
    "path": "src/renderer/views/components/settings-keybinds.ejs",
    "chars": 15886,
    "preview": "<script type=\"text/x-template\" id=\"keybinds-settings\">\n    <div class=\"keybinds-page\">\n        <div class=\"md-option-hea"
  },
  {
    "path": "src/renderer/views/components/settings-plugins-github.ejs",
    "chars": 7336,
    "preview": "<script type=\"text/x-template\" id=\"plugins-github\">\n    <div class=\"github-themes-page\">\n        <div class=\"gh-header\">"
  },
  {
    "path": "src/renderer/views/components/settings-themes-github.ejs",
    "chars": 7967,
    "preview": "<script type=\"text/x-template\" id=\"themes-github\">\n    <div class=\"github-themes-page\">\n        <div class=\"gh-header\">\n"
  },
  {
    "path": "src/renderer/views/components/settings-themes.ejs",
    "chars": 13552,
    "preview": "<script type=\"text/x-template\" id=\"installed-themes\">\n    <div class=\"installed-themes-page\">\n        <div class=\"gh-hea"
  },
  {
    "path": "src/renderer/views/components/settings-window.ejs",
    "chars": 120686,
    "preview": "<script type=\"text/x-template\" id=\"settings-window\">\n    <div class=\"settings-panel\" @click.self=\"close()\">\n        <div"
  },
  {
    "path": "src/renderer/views/components/share-sheet.ejs",
    "chars": 3284,
    "preview": "<script type=\"text/x-template\" id=\"add-to-playlist\">\n    <template>\n        <div class=\"modal-fullscreen addtoplaylist-p"
  },
  {
    "path": "src/renderer/views/components/sidebar-playlist.ejs",
    "chars": 9613,
    "preview": "<script type=\"text/x-template\" id=\"sidebar-playlist\">\n    <div class=\"sidebar-playlist\" :key=\"item.id\">\n        <button "
  },
  {
    "path": "src/renderer/views/components/sidebar.ejs",
    "chars": 17754,
    "preview": "<script type=\"text/x-template\" id=\"cider-app-sidebar\">\n    <div id=\"app-sidebar\">\n        <template v-if=\"$root.getTheme"
  },
  {
    "path": "src/renderer/views/components/smarthints.ejs",
    "chars": 20533,
    "preview": "<script type=\"text/x-template\" id=\"mediaitem-smarthints\">\n<div class=\"cd-queue-item\"  @click=\"$root.search.showHints = f"
  },
  {
    "path": "src/renderer/views/main.ejs",
    "chars": 5365,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <link rel=\"preconnect\" href=\"https://amp-api.music.apple.com/\" crossorigin "
  },
  {
    "path": "src/renderer/views/pages/about.ejs",
    "chars": 9539,
    "preview": "<script type=\"text/x-template\" id=\"about-page\">\n    <div class=\"content-inner about-page\">\n        <div class=\"row\">\n   "
  },
  {
    "path": "src/renderer/views/pages/apple-account-settings.ejs",
    "chars": 857,
    "preview": "<script type=\"text/x-template\" id=\"apple-account-settings\">\n    <div style=\"display:flex;width:100%;height:100%;padding-"
  },
  {
    "path": "src/renderer/views/pages/apple-curator.ejs",
    "chars": 2808,
    "preview": "<script type=\"text/x-template\" id=\"cider-applecurator\">\n    <div class=\"content-inner\">\n        <h1 class=\"header-text\">"
  },
  {
    "path": "src/renderer/views/pages/artist-feed.ejs",
    "chars": 5250,
    "preview": "<script type=\"text/x-template\" id=\"cider-artist-feed\">\n    <div class=\"content-inner\">\n        <div>\n            <div cl"
  },
  {
    "path": "src/renderer/views/pages/artist.ejs",
    "chars": 14396,
    "preview": "<script type=\"text/x-template\" id=\"cider-artist\">\n    <div class=\"content-inner artist-page\"\n         :class=\"[(data.att"
  },
  {
    "path": "src/renderer/views/pages/audiolabs.ejs",
    "chars": 10090,
    "preview": "<script type=\"text/x-template\" id=\"audiolabs-page\">\n    <div class=\"audiolabs-page\">\n        <div class=\"md-option-conta"
  },
  {
    "path": "src/renderer/views/pages/browse.ejs",
    "chars": 4860,
    "preview": "<script type=\"text/x-template\" id=\"cider-browse\">\n    <div class=\"content-inner\">\n        <h1 class=\"header-text\">{{$roo"
  },
  {
    "path": "src/renderer/views/pages/charts.ejs",
    "chars": 6412,
    "preview": "<script type=\"text/x-template\" id=\"cider-charts\">\n    <div class=\"content-inner\">\n        <h1 class=\"header-text\">{{$roo"
  },
  {
    "path": "src/renderer/views/pages/cider-multiroom.ejs",
    "chars": 4392,
    "preview": "<script type=\"text/x-template\" id=\"cider-multiroom\">\n    <div class=\"content-inner cider-multiroom\">\n        <div class="
  },
  {
    "path": "src/renderer/views/pages/cider-playlist.ejs",
    "chars": 50127,
    "preview": "<script type=\"text/x-template\" id=\"cider-playlist\">\n    <div class=\"content-inner playlist-page\" :class=\"classes\" :is-al"
  },
  {
    "path": "src/renderer/views/pages/cider-profile.ejs",
    "chars": 2654,
    "preview": "<script type=\"text/x-template\" id=\"cider-socialprofile\">\n    <div class=\"content-inner artist-page profile-page\">\n      "
  },
  {
    "path": "src/renderer/views/pages/collection-list.ejs",
    "chars": 4989,
    "preview": "<script type=\"text/x-template\" id=\"cider-collection-list\">\n    <div class=\"content-inner collection-page\">\n        <h3 c"
  },
  {
    "path": "src/renderer/views/pages/connect-linked.ejs",
    "chars": 641,
    "preview": "<script type=\"text/x-template\" id=\"connected\">\n    <div style=\"display:flex;width:100%;height:100%;padding-top: var(--na"
  },
  {
    "path": "src/renderer/views/pages/groupings.ejs",
    "chars": 6292,
    "preview": "<script type=\"text/x-template\" id=\"cider-groupings\">\n    <div class=\"content-inner\">\n        <template v-if=\"data != nul"
  },
  {
    "path": "src/renderer/views/pages/home.ejs",
    "chars": 12957,
    "preview": "<script type=\"text/x-template\" id=\"cider-home\">\n    <div class=\"content-inner home-page\">\n        <div v-if=\"page == 'ma"
  },
  {
    "path": "src/renderer/views/pages/installed-themes.ejs",
    "chars": 15649,
    "preview": "//Not used for Now\n\n<!-- <script type=\"text/x-template\" id=\"installed-themes\">\n    <div class=\"installed-themes-page\">\n "
  },
  {
    "path": "src/renderer/views/pages/library-albums.ejs",
    "chars": 5572,
    "preview": "<script type=\"text/x-template\" id=\"cider-library-albums\">\n    <div class=\"content-inner\">\n        <div class=\"row\">\n    "
  },
  {
    "path": "src/renderer/views/pages/library-artists.ejs",
    "chars": 10875,
    "preview": "<script type=\"text/x-template\" id=\"cider-library-artists\">\n    <div class=\"content-inner library-artists-page\">\n        "
  },
  {
    "path": "src/renderer/views/pages/library-recentlyadded.ejs",
    "chars": 3164,
    "preview": "<script type=\"text/x-template\" id=\"cider-recentlyadded\">\n    <div class=\"content-inner\">\n        <h1 class=\"header-text\""
  },
  {
    "path": "src/renderer/views/pages/library-songs.ejs",
    "chars": 7245,
    "preview": "<script type=\"text/x-template\" id=\"cider-library-songs\">\n    <div class=\"content-inner library-page\">\n        <div class"
  },
  {
    "path": "src/renderer/views/pages/library-videos.ejs",
    "chars": 1184,
    "preview": "<script type=\"text/x-template\" id=\"cider-library-videos\">\n    <div class=\"content-inner\">\n        <div class=\"row\">\n    "
  },
  {
    "path": "src/renderer/views/pages/listen_now.ejs",
    "chars": 578,
    "preview": "<script type=\"text/x-template\" id=\"cider-listen-now\">\n    <div class=\"content-inner\">\n        <h1 class=\"header-text\">{{"
  },
  {
    "path": "src/renderer/views/pages/madeforyou.ejs",
    "chars": 369,
    "preview": "<div class=\"content-inner\">\n    <div class=\"row\">\n        <div class=\"col\" style=\"padding:0\">\n            <h1 class=\"hea"
  },
  {
    "path": "src/renderer/views/pages/oobe.ejs",
    "chars": 8802,
    "preview": "<script type=\"text/x-template\" id=\"cider-oobe\">\n    <div class=\"content-inner oobe\">\n        <!--        before_we_start"
  },
  {
    "path": "src/renderer/views/pages/playlist-inline.ejs",
    "chars": 35402,
    "preview": "<script type=\"text/x-template\" id=\"playlist-inline\">\n    <div class=\"content-inner playlist-page inline-playlist\" @click"
  }
]

// ... and 38 more files (download for full content)

About this extraction

This page contains the full source code of the ciderapp/Cider GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 238 files (7.8 MB), approximately 2.1M tokens, and a symbol index with 6733 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!