Showing preview only (1,007K chars total). Download the full file or copy to clipboard to get everything.
Repository: sheikhhaziq/vibemusic
Branch: main
Commit: 2e08142f8f5e
Files: 216
Total size: 13.5 MB
Directory structure:
gitextract_k51tdnmq/
├── .fvmrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── config.yml
│ └── workflows/
│ ├── auto-label-issues.yml
│ ├── beta-release.yml
│ ├── branch-protection-check.yml
│ └── stable-release.yml
├── .gitignore
├── .metadata
├── .vscode/
│ ├── launch.json
│ └── settings.json
├── CONTRIBUTING.md
├── GyawunMusic-2.0.16.flatpak
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── app/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── com/
│ │ │ │ └── jhelum/
│ │ │ │ └── gyawun/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── anim/
│ │ │ │ ├── in_animation.xml
│ │ │ │ └── out_animation.xml
│ │ │ ├── drawable/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-hdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── drawable-mdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── drawable-night/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-xhdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── drawable-xxhdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── drawable-xxxhdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ └── ic_launcher.xml
│ │ │ ├── raw/
│ │ │ │ └── keep.xml
│ │ │ ├── values/
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ ├── styles.xml
│ │ │ │ └── themes.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ └── styles.xml
│ │ │ ├── values-v31/
│ │ │ │ └── styles.xml
│ │ │ └── xml/
│ │ │ └── automotive_app_desc.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build/
│ │ └── reports/
│ │ └── problems/
│ │ └── problems-report.html
│ ├── build.gradle.kts
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle.kts
├── build-flatpak.sh
├── devtools_options.yaml
├── fastlane/
│ └── metadata/
│ └── android/
│ └── en-US/
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
├── flutter_native_splash.yaml
├── lib/
│ ├── core/
│ │ ├── extensions/
│ │ │ ├── random_material_shape.dart
│ │ │ └── string_extensions.dart
│ │ ├── models/
│ │ │ └── app_config.dart
│ │ ├── utils/
│ │ │ ├── expressive_sheet.dart
│ │ │ └── service_locator.dart
│ │ └── widgets/
│ │ ├── expressive_app_bar.dart
│ │ ├── expressive_list_group.dart
│ │ ├── expressive_list_tile.dart
│ │ ├── expressive_switch_list_tile.dart
│ │ ├── internet_guard.dart
│ │ ├── library_tile.dart
│ │ ├── rounded_polygon_icon.dart
│ │ ├── section_item.dart
│ │ ├── sections/
│ │ │ ├── section_multi_column.dart
│ │ │ └── section_row.dart
│ │ ├── song_tile.dart
│ │ └── tiles/
│ │ ├── section_list_tile.dart
│ │ └── section_row_tile.dart
│ ├── generated/
│ │ ├── intl/
│ │ │ ├── messages_all.dart
│ │ │ ├── messages_en.dart
│ │ │ ├── messages_es.dart
│ │ │ ├── messages_fr.dart
│ │ │ ├── messages_hi.dart
│ │ │ ├── messages_it.dart
│ │ │ ├── messages_tr.dart
│ │ │ └── messages_ur.dart
│ │ └── l10n.dart
│ ├── l10n/
│ │ ├── intl_en.arb
│ │ ├── intl_es.arb
│ │ ├── intl_fr.arb
│ │ ├── intl_hi.arb
│ │ ├── intl_it.arb
│ │ ├── intl_tr.arb
│ │ └── intl_ur.arb
│ ├── main.dart
│ ├── screens/
│ │ ├── browse/
│ │ │ ├── browse_page.dart
│ │ │ └── cubit/
│ │ │ ├── browse_cubit.dart
│ │ │ └── browse_state.dart
│ │ ├── chip/
│ │ │ ├── chip_page.dart
│ │ │ └── cubit/
│ │ │ ├── chip_cubit.dart
│ │ │ └── chip_state.dart
│ │ ├── home/
│ │ │ ├── cubit/
│ │ │ │ ├── home_cubit.dart
│ │ │ │ └── home_state.dart
│ │ │ ├── home_page.dart
│ │ │ └── widgets/
│ │ │ └── chips_row.dart
│ │ ├── library/
│ │ │ ├── cubit/
│ │ │ │ ├── library_cubit.dart
│ │ │ │ └── library_state.dart
│ │ │ ├── downloads/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── downloads_cubit.dart
│ │ │ │ │ └── downloads_state.dart
│ │ │ │ ├── downloading/
│ │ │ │ │ ├── cubit/
│ │ │ │ │ │ ├── downloading_cubit.dart
│ │ │ │ │ │ └── downloading_state.dart
│ │ │ │ │ ├── downloading_page.dart
│ │ │ │ │ └── widgets/
│ │ │ │ │ ├── downloading_section_tile.dart
│ │ │ │ │ └── downloading_song_tile.dart
│ │ │ │ ├── downloads_page.dart
│ │ │ │ └── playlist/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── download_playlist_cubit.dart
│ │ │ │ │ └── download_playlist_state.dart
│ │ │ │ ├── download_playlist_page.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── download_playlist_header.dart
│ │ │ │ └── download_song_tile.dart
│ │ │ ├── favourites/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── favourites_cubit.dart
│ │ │ │ │ └── favourites_state.dart
│ │ │ │ └── favourites_page.dart
│ │ │ ├── history/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── history_cubit.dart
│ │ │ │ │ └── history_state.dart
│ │ │ │ └── history_page.dart
│ │ │ ├── library_page.dart
│ │ │ ├── playlist/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── playlist_details_cubit.dart
│ │ │ │ │ └── playlist_details_state.dart
│ │ │ │ └── playlist_details_page.dart
│ │ │ └── widgets/
│ │ │ └── my_playlist_header.dart
│ │ ├── player/
│ │ │ ├── player_page.dart
│ │ │ └── widgets/
│ │ │ ├── lyrics_box.dart
│ │ │ ├── play_pause_button.dart
│ │ │ └── queue_list.dart
│ │ ├── search/
│ │ │ ├── cubit/
│ │ │ │ ├── search_cubit.dart
│ │ │ │ └── search_state.dart
│ │ │ └── search_page.dart
│ │ ├── settings/
│ │ │ ├── about/
│ │ │ │ └── about_page.dart
│ │ │ ├── appearance/
│ │ │ │ ├── appearance_page.dart
│ │ │ │ └── cubit/
│ │ │ │ ├── appearance_cubit.dart
│ │ │ │ └── appearance_state.dart
│ │ │ ├── backup_storage/
│ │ │ │ ├── backup_storage_page.dart
│ │ │ │ └── cubit/
│ │ │ │ ├── backup_storage_cubit.dart
│ │ │ │ └── backup_storage_state.dart
│ │ │ ├── cubit/
│ │ │ │ ├── settings_system_cubit.dart
│ │ │ │ └── settings_system_state.dart
│ │ │ ├── player/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── player_settings_cubit.dart
│ │ │ │ │ └── player_settings_state.dart
│ │ │ │ ├── equalizer/
│ │ │ │ │ ├── cubit/
│ │ │ │ │ │ ├── equalizer_cubit.dart
│ │ │ │ │ │ ├── equalizer_state.dart
│ │ │ │ │ │ ├── loudness_cubit.dart
│ │ │ │ │ │ └── loudness_state.dart
│ │ │ │ │ └── equalizer_page.dart
│ │ │ │ └── player_settings_page.dart
│ │ │ ├── privacy/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── privacy_cubit.dart
│ │ │ │ │ └── privacy_state.dart
│ │ │ │ └── privacy_page.dart
│ │ │ ├── services/
│ │ │ │ └── yt_music/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── ytmusic_cubit.dart
│ │ │ │ │ └── ytmusic_state.dart
│ │ │ │ └── yt_music_page.dart
│ │ │ ├── settings_page.dart
│ │ │ └── widgets/
│ │ │ ├── color_icon.dart
│ │ │ └── setting_item.dart
│ │ └── shell/
│ │ ├── app_shell.dart
│ │ └── widgets/
│ │ └── bottom_player.dart
│ ├── services/
│ │ ├── bottom_message.dart
│ │ ├── custom_audio_stream.dart
│ │ ├── download_manager.dart
│ │ ├── favourites_manager.dart
│ │ ├── file_storage.dart
│ │ ├── history_manager.dart
│ │ ├── library.dart
│ │ ├── lyrics.dart
│ │ ├── media_player.dart
│ │ ├── settings_manager.dart
│ │ ├── stream_client.dart
│ │ ├── update_service/
│ │ │ ├── models/
│ │ │ │ └── update_info.dart
│ │ │ ├── update_service.dart
│ │ │ └── widgets/
│ │ │ ├── update_checking.dart
│ │ │ └── update_dialog.dart
│ │ └── yt_audio_stream.dart
│ ├── themes/
│ │ ├── colors.dart
│ │ ├── dark.dart
│ │ ├── light.dart
│ │ ├── text_styles.dart
│ │ ├── theme.dart
│ │ └── typography.dart
│ └── utils/
│ ├── adaptive_widgets/
│ │ ├── adaptive_widgets.dart
│ │ ├── appbar.dart
│ │ ├── buttons.dart
│ │ ├── card.dart
│ │ ├── dropdown_button.dart
│ │ ├── icons.dart
│ │ ├── inkwell.dart
│ │ ├── listtile.dart
│ │ ├── no_splash_factory.dart
│ │ ├── progress_ring.dart
│ │ ├── scaffold.dart
│ │ ├── slider.dart
│ │ ├── switch.dart
│ │ ├── text_field.dart
│ │ └── theme.dart
│ ├── add_history.dart
│ ├── bottom_modals.dart
│ ├── check_update.dart
│ ├── enhanced_image.dart
│ ├── extensions.dart
│ ├── format_duration.dart
│ ├── internet_guard.dart
│ ├── playlist_icon.dart
│ ├── playlist_icon_widget.dart
│ ├── playlist_icons.dart
│ ├── playlist_thumbnail.dart
│ ├── pprint.dart
│ ├── router.dart
│ ├── song_thumbnail.dart
│ └── text_controller_builder.dart
├── pubspec.yaml
└── test/
└── widget_test.dart
================================================
FILE CONTENTS
================================================
================================================
FILE: .fvmrc
================================================
{
"flutter": "3.41.4"
}
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug report
description: Report a bug in the app (stable or beta)
labels: ["bug"]
body:
- type: dropdown
id: channel
attributes:
label: Release channel
description: Which version are you using?
options:
- Stable
- Beta
validations:
required: true
- type: input
id: version
attributes:
label: App version
placeholder: e.g. 2.0.11
validations:
required: true
- type: dropdown
id: source
attributes:
label: Install source
options:
- GitHub Releases
- IzzyOnDroid (F-Droid)
validations:
required: true
- type: input
id: android
attributes:
label: Android version
placeholder: e.g. Android 14
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual behavior
validations:
required: true
- type: textarea
id: regression
attributes:
label: Regression information (beta only)
description: Did this work correctly in the latest stable version?
placeholder: Yes / No / Not sure
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: Questions and support
url: https://github.com/sheikhhaziq/gyawun_music/discussions
about: Please use Discussions for questions and general support.
================================================
FILE: .github/workflows/auto-label-issues.yml
================================================
name: Auto-label issues by release channel
on:
issues:
types: [opened]
permissions:
issues: write
jobs:
label:
runs-on: ubuntu-latest
steps:
- name: Auto-label by release channel
uses: actions/github-script@v7
with:
script: |
const body = context.payload.issue.body || "";
function getSectionValue(title) {
const regex = new RegExp(
`###\\s+${title}[\\s\\S]*?\\n\\n([^#]+)`,
"i"
);
const match = body.match(regex);
return match ? match[1].trim() : null;
}
const channel = getSectionValue("Release channel");
if (!channel) return;
const labels = [];
if (channel.toLowerCase().startsWith("stable")) {
labels.push("stable");
}
if (channel.toLowerCase().startsWith("beta")) {
labels.push("beta");
}
if (!labels.length) return;
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
labels,
});
================================================
FILE: .github/workflows/beta-release.yml
================================================
name: Beta Release
on:
push:
tags:
- 'v*-beta.*'
jobs:
beta-release:
if: "contains(github.ref, '-beta.')"
runs-on: ubuntu-latest
outputs:
release_tag: ${{ steps.app_version.outputs.version }}
release_channel: 'beta'
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate tag is on beta branch
run: |
if ! git branch -r --contains "${{ github.ref_name }}" | grep -q 'origin/beta'; then
echo "❌ Tag ${{ github.ref_name }} is not on the beta branch"
exit 1
fi
echo "✅ Tag is on beta branch"
- name: Read FVM version
id: fvm_version
run: |
FVM_VERSION=$(jq -r '.flutterSdkVersion' .fvm/fvm_config.json)
echo "version=$FVM_VERSION" >> $GITHUB_OUTPUT
echo "Flutter version from FVM: $FVM_VERSION"
- name: Read and validate beta version
id: app_version
run: |
TAG="${{ github.ref_name }}" # e.g. v1.2.0-beta.1
VERSION="${TAG#v}" # e.g. 1.2.0-beta.1
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+-beta\.[0-9]+$ ]]; then
echo "❌ Tag must follow vX.Y.Z-beta.N format, got: $TAG"
exit 1
fi
VERSION_CODE=$(grep '^version:' pubspec.yaml | awk '{print $2}' | cut -d'+' -f2)
if [[ -z "$VERSION_CODE" || "$VERSION_CODE" == "0" ]]; then
echo "❌ pubspec.yaml must have a valid build number (not 0)"
exit 1
fi
sed -i "s/^version:.*/version: $VERSION+$VERSION_CODE/" pubspec.yaml
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "build=$VERSION_CODE" >> $GITHUB_OUTPUT
echo "✅ Beta version: $VERSION+$VERSION_CODE"
- name: Setup Flutter with FVM
uses: kuhnroyal/flutter-fvm-config-action/setup@v3
- name: Decode keystore
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks
- name: Create key.properties
run: |
cat > android/key.properties << EOF
storePassword=${{ secrets.STORE_PASSWORD }}
keyPassword=${{ secrets.KEY_PASSWORD }}
keyAlias=${{ secrets.KEY_ALIAS }}
storeFile=keystore.jks
EOF
- name: Install dependencies
run: flutter pub get
- name: Generate Splash Screen
run: dart run flutter_native_splash:create
- name: Build Android APK (Beta - Universal)
run: flutter build apk --flavor beta --release
- name: Build Android APK (Beta - Split per ABI)
run: flutter build apk --flavor beta --release --split-per-abi
- name: Rename build artifacts
run: |
mkdir -p releases
V=${{ steps.app_version.outputs.version }}
cp build/app/outputs/flutter-apk/app-beta-release.apk \
releases/gyawun-beta-v${V}-universal.apk
cp build/app/outputs/flutter-apk/app-arm64-v8a-beta-release.apk \
releases/gyawun-beta-v${V}-arm64-v8a.apk
cp build/app/outputs/flutter-apk/app-armeabi-v7a-beta-release.apk \
releases/gyawun-beta-v${V}-armeabi-v7a.apk
cp build/app/outputs/flutter-apk/app-x86_64-beta-release.apk \
releases/gyawun-beta-v${V}-x86_64.apk
- name: Create Beta Pre-Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.ref_name }}
name: Beta v${{ steps.app_version.outputs.version }}
prerelease: true
draft: false
body: |
## 🧪 Beta Release v${{ steps.app_version.outputs.version }}
⚠️ **This is a BETA release.**
For testing purposes – may contain bugs.
---
### 🔖 Build Information
- **Channel:** Beta
- **Version:** `${{ steps.app_version.outputs.version }}`
- **Build Number:** `${{ steps.app_version.outputs.build }}`
- **Flutter SDK:** `${{ steps.fvm_version.outputs.version }}`
- **Branch:** `beta`
---
### 🧪 Testing Notes
- Beta quality – expect some bugs
- Please report issues on GitHub
- Backup your data before testing
files: |
releases/gyawun-beta-v${{ steps.app_version.outputs.version }}-universal.apk
releases/gyawun-beta-v${{ steps.app_version.outputs.version }}-arm64-v8a.apk
releases/gyawun-beta-v${{ steps.app_version.outputs.version }}-armeabi-v7a.apk
releases/gyawun-beta-v${{ steps.app_version.outputs.version }}-x86_64.apk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/branch-protection-check.yml
================================================
name: Branch Protection Check
on:
pull_request:
branches:
- stable
- beta
jobs:
check-pr-source:
runs-on: ubuntu-latest
steps:
- name: Check PR to stable is from beta
if: github.base_ref == 'stable'
run: |
if [ "${{ github.head_ref }}" != "beta" ]; then
echo "❌ Error: Pull requests to 'stable' branch must come from 'beta' branch only."
echo "Current source: ${{ github.head_ref }}"
exit 1
fi
echo "✅ PR is from beta branch - validation passed"
- name: Info for beta PRs
if: github.base_ref == 'beta'
run: |
echo "✅ Pull request to beta branch from: ${{ github.head_ref }}"
echo "This will trigger a beta pre-release on merge."
================================================
FILE: .github/workflows/stable-release.yml
================================================
name: Stable Release
on:
push:
tags:
- 'v[0-9]*.[0-9]*.[0-9]*'
jobs:
stable-release:
if: "!contains(github.ref, '-beta.')"
runs-on: ubuntu-latest
outputs:
release_tag: ${{ steps.app_version.outputs.version }}
release_channel: 'stable'
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Validate tag is on stable branch
run: |
if ! git branch -r --contains "${{ github.ref_name }}" | grep -q 'origin/stable'; then
echo "❌ Tag ${{ github.ref_name }} is not on the stable branch"
exit 1
fi
echo "✅ Tag is on stable branch"
- name: Read FVM version
id: fvm_version
run: |
FVM_VERSION=$(jq -r '.flutterSdkVersion' .fvm/fvm_config.json)
echo "version=$FVM_VERSION" >> $GITHUB_OUTPUT
echo "Flutter version from FVM: $FVM_VERSION"
- name: Read and validate production version
id: app_version
run: |
TAG="${{ github.ref_name }}" # e.g. v1.2.0
VERSION="${TAG#v}" # e.g. 1.2.0
if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "❌ Tag must follow vX.Y.Z format (no beta suffix), got: $TAG"
exit 1
fi
VERSION_CODE=$(grep '^version:' pubspec.yaml | awk '{print $2}' | cut -d'+' -f2)
if [[ -z "$VERSION_CODE" || "$VERSION_CODE" == "0" ]]; then
echo "❌ pubspec.yaml must have a valid build number (not 0)"
exit 1
fi
sed -i "s/^version:.*/version: $VERSION+$VERSION_CODE/" pubspec.yaml
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "build=$VERSION_CODE" >> $GITHUB_OUTPUT
echo "✅ Stable version: $VERSION+$VERSION_CODE"
- name: Setup Flutter with FVM
uses: kuhnroyal/flutter-fvm-config-action/setup@v3
- name: Decode keystore
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/keystore.jks
- name: Create key.properties
run: |
cat > android/key.properties << EOF
storePassword=${{ secrets.STORE_PASSWORD }}
keyPassword=${{ secrets.KEY_PASSWORD }}
keyAlias=${{ secrets.KEY_ALIAS }}
storeFile=keystore.jks
EOF
- name: Install dependencies
run: flutter pub get
- name: Generate Splash Screen
run: dart run flutter_native_splash:create
- name: Build Android APK (Stable - Universal)
run: flutter build apk --flavor stable --release
- name: Build Android APK (Stable - Split per ABI)
run: flutter build apk --flavor stable --release --split-per-abi
- name: Rename build artifacts
run: |
mkdir -p releases
V=${{ steps.app_version.outputs.version }}
cp build/app/outputs/flutter-apk/app-stable-release.apk \
releases/gyawun-v${V}-universal.apk
cp build/app/outputs/flutter-apk/app-arm64-v8a-stable-release.apk \
releases/gyawun-v${V}-arm64-v8a.apk
cp build/app/outputs/flutter-apk/app-armeabi-v7a-stable-release.apk \
releases/gyawun-v${V}-armeabi-v7a.apk
cp build/app/outputs/flutter-apk/app-x86_64-stable-release.apk \
releases/gyawun-v${V}-x86_64.apk
- name: Create Stable Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.ref_name }}
name: v${{ steps.app_version.outputs.version }}
prerelease: false
draft: false
body: |
## ✅ Stable Release v${{ steps.app_version.outputs.version }}
**This is a stable production release.**
---
### 🔖 Build Information
- **Channel:** Stable
- **Version:** `${{ steps.app_version.outputs.version }}`
- **Build Number:** `${{ steps.app_version.outputs.build }}`
- **Flutter SDK:** `${{ steps.fvm_version.outputs.version }}`
- **Branch:** `stable`
---
### 📝 Release Notes
_See commit history for changes._
files: |
releases/gyawun-v${{ steps.app_version.outputs.version }}-universal.apk
releases/gyawun-v${{ steps.app_version.outputs.version }}-arm64-v8a.apk
releases/gyawun-v${{ steps.app_version.outputs.version }}-armeabi-v7a.apk
releases/gyawun-v${{ steps.app_version.outputs.version }}-x86_64.apk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
**/Gyawun
**/dist
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/key.properties
**/android/**/GeneratedPluginRegistrant.java
/linux
/macos
/windows
/ios
/web
.flatpak-builder
.secrets
# FVM Version Cache
.fvm/
repo
================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: "adc901062556672b4138e18a4dc62a4be8f4b3c2"
channel: "stable"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2
base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2
- platform: linux
create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2
base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'
================================================
FILE: .vscode/launch.json
================================================
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Flutter (Beta Flavor)",
"request": "launch",
"type": "dart",
"args": [
"--flavor",
"beta"
]
},
{
"name": "Flutter (Production Flavor)",
"request": "launch",
"type": "dart",
"args": [
"--flavor",
"production"
]
}
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"cmake.sourceDirectory": "/home/sheikh-haziq/Development/Jhelum/gyawun-app/linux",
"dart.flutterSdkPath": ".fvm/versions/3.41.4"
}
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing Guide
Thank you for your interest in contributing!
This repository follows a **strict, staged branch workflow** to maintain stability while allowing controlled development and testing.
Please read this document fully before opening a pull request.
---
## 📌 Repository Overview
- **Project type:** Flutter application
- **Primary maintainer:** Solo maintainer
- **Default branch:** `main`
---
## 🌿 Branching Model
This project uses **three long-lived branches**:
### `main` — Development
- All **active development** happens here
- Used by the maintainer for **manual testing**
- May be unstable or incomplete
- **All pull requests must target `main`**
✅ This is the **only branch contributors should use**.
---
### `beta` — Pre-release
- Receives changes **only from `main`**
- Used for wider testing and early access
- Merging into `beta`:
- Automatically publishes a **beta GitHub release**
- Version format: `x.y.z-beta.n`
🚫 Contributors should **not** open PRs directly to `beta`.
---
### `stable` — Stable
- Production-ready code only
- Receives changes **only from `beta`**
- Merging into `stable`:
- Automatically publishes a **stable GitHub release**
- Version format: `x.y.z`
🚫 Pull requests to `stable` are not accepted.
---
## 🔁 Contribution Workflow
### 1. Fork the Repository
```bash
git clone https://github.com/<your-username>/<repo>.git
cd <repo>
git checkout main
```
---
### 2. Create a Feature or Fix Branch
```bash
git checkout -b feature/short-description
# or
git checkout -b fix/short-description
```
---
### 3. Make Your Changes
- Keep changes **focused and minimal**
- Follow the existing project structure
- Avoid unrelated refactors or dependency changes
---
### 4. Basic Checks
Before opening a PR, ensure:
```bash
flutter analyze
flutter test
```
> Final testing is performed **manually by the maintainer** on the `main` branch.
---
### 5. Open a Pull Request
- **Base branch:** `main`
- **Compare branch:** your feature/fix branch
- Clearly explain:
- What the change does
- Why it is needed
- Any user-facing or breaking changes
🚫 PRs targeting `beta` or `stable` will be **closed without review**.
---
## 🚀 Release Flow (For Reference)
| Action | Result |
|------|-------|
| Merge PR → `main` | Change queued for manual testing |
| Merge `main` → `beta` | Beta release published |
| Merge `beta` → `stable` | Stable release published |
Contributors do **not** need to manage versions, tags, or releases.
---
## 🐞 Issues & Discussions
- **Bug reports & feature requests:** GitHub Issues
- **Questions & general discussion:** GitHub Discussions
- Old or unstructured issues may be closed during maintenance cleanups
---
## 📐 Code Guidelines
- Follow Flutter and Dart best practices
- Prefer clarity over cleverness
- Avoid introducing new dependencies without discussion
- Platform-specific logic should be well-isolated
---
## 🔒 Maintainer Notes
- This project is mantained by **Two maintainers**
- Reviews and merges may take time
- Large or architectural changes should be discussed **before** implementation
---
## ❤️ Thank You
Every contribution—code, issues, or documentation—helps improve the project.
Happy contributing! 🚀
================================================
FILE: GyawunMusic-2.0.16.flatpak
================================================
[File too large to display: 12.5 MB]
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 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 General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is 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. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
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.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
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 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. Use with the GNU Affero General Public License.
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 Affero 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 special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU 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 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 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 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 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 General Public License for more details.
You should have received a copy of the GNU 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 the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
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 GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
<div align="center">

# 🎵 Gyawun Music
**Where Music Knows No Bounds**
*Experience the freedom of unlimited, ad-free music streaming from YouTube Music*
[](https://github.com/sheikhhaziq/gyawun_music/releases/latest)
[](LICENSE)
[](https://github.com/sheikhhaziq/gyawun_music/stargazers)
[](https://github.com/sheikhhaziq/gyawun_music/releases)
[](https://t.me/jhelumcorp)
[Download](https://github.com/sheikhhaziq/gyawun_music/releases/latest) • [Website](https://gyawunmusic.vercel.app/) • [Contribute](CONTRIBUTING.md) • [Report Bug](https://github.com/sheikhhaziq/gyawun_music/issues)
---
</div>
## ✨ What Makes Gyawun Special
Gyawun isn't just another music player—it's your gateway to an uninterrupted musical journey. Built with Flutter and powered by YouTube Music's vast library, Gyawun brings you millions of songs without the noise of advertisements, subscription walls, or unnecessary restrictions.
Immerse yourself in crystal-clear audio quality, discover artists from every corner of the globe, and let the rhythm carry you wherever you go. With Gyawun, music flows freely, as it should.
## 🚀 Features
### Core Experience
- 🎧 **Unlimited Streaming** - Access millions of songs from YouTube Music
- 🚫 **Ad-Free Playback** - Enjoy uninterrupted listening, always
- 🎼 **High-Quality Audio** - Adjustable audio quality to suit your preference
- 🌙 **Background Playback** - Keep the music playing while you multitask
- 💾 **Offline Downloads** - Save your favorite tracks for offline listening
- ⏰ **Sleep Timer** - Fall asleep to your favorite music with auto-stop
### Discovery & Organization
- 🔍 **Smart Search** - Find songs, artists, and playlists effortlessly
- ❤️ **Favorites** - Build your personal collection of beloved tracks
- 📝 **Custom Playlists** - Curate and organize music your way
- 🔄 **Flexible Queue** - Reorder songs on the fly
- 📜 **Listening History** - Never lose track of what you've played
- 📝 **Lyrics** - Sing along with synchronized lyrics powered by LRCLib
### Personalization
- 🎨 **Material You** - Dynamic theming that adapts to your style
- 🌓 **Dark Mode** - Easy on the eyes, day or night
- 🎚️ **Audio Enhancement** - Built-in equalizer and loudness enhancer
- 🌍 **Multi-Language Support** - Available in multiple languages
- 🔄 **Cross-Device Sync** - Sync recommendations across devices using visitor ID
- 🎙️ **Podcast Support** - Stream your favorite podcasts alongside music
## 📱 Installation
### Android
Download the latest APK from our [releases page](https://github.com/sheikhhaziq/gyawun_music/releases/latest) and install it on your device.
### Building from Source
```bash
# Clone the repository
git clone https://github.com/sheikhhaziq/gyawun_music.git
cd gyawun_music
# This project uses FVM for Flutter version management
# Install FVM if you haven't already: https://fvm.app/docs/getting_started/installation
# The Flutter version is specified in .fvmrc
# Install the correct Flutter version
fvm install
# Use the project's Flutter version
fvm use
# Install dependencies
fvm flutter pub get
# Run the app
fvm flutter run
```
## 🎯 Roadmap
We're constantly evolving. Here's what we're working on:
- [ ] iOS Support
- [ ] Desktop Applications (Windows, macOS, Linux)
- [ ] Advanced Audio Controls
- [ ] Social Features (Share playlists, collaborative playlists)
- [ ] Import/Export Playlists
- [ ] Enhanced Podcast Features
## 🤝 Contributing
Gyawun is built by music lovers, for music lovers. We welcome contributions from developers, designers, translators, and enthusiasts of all skill levels.
Whether you want to fix bugs, add features, improve documentation, or translate the app into your language, your contributions make Gyawun better for everyone.
Please read our [Contributing Guidelines](CONTRIBUTING.md) to get started.
## 👥 Community
Join our growing community of music enthusiasts:
- 💬 [Telegram Group](https://t.me/jhelumcorp) - Chat, share music, and get support
- 🐛 [Issue Tracker](https://github.com/sheikhhaziq/gyawun_music/issues) - Report bugs
- 💡 [Discussions](https://github.com/sheikhhaziq/gyawun_music/discussions) - Request features, share ideas and feedback
## 🙏 Acknowledgments
A heartfelt thank you to our incredible contributors who have helped shape Gyawun:
[](https://github.com/sheikhhaziq/gyawun_music/graphs/contributors)
## ⚖️ Legal
**Disclaimer:** This project and its contents are not affiliated with, funded, authorized, endorsed by, or in any way associated with YouTube, Google LLC, or any of its affiliates and subsidiaries. Any trademark, service mark, trade name, or other intellectual property rights used in this project are owned by the respective owners.
Gyawun is an open-source project created for educational and personal use. Users are responsible for ensuring their usage complies with YouTube's Terms of Service and applicable laws in their jurisdiction.
## 📄 License
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.
---
<div align="center">
**Made with ❤️ by the Gyawun community**
*Let the music play on*
[⬆ Back to Top](#-gyawun-music)
</div>
================================================
FILE: analysis_options.yaml
================================================
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at https://dart.dev/lints.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
================================================
FILE: android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
.cxx/
# Remember to never publicly share your keystore.
# See https://flutter.dev/to/reference-keystore
key.properties
**/*.keystore
**/*.jks
================================================
FILE: android/app/build.gradle.kts
================================================
import java.io.FileInputStream
import java.util.Properties
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("dev.flutter.flutter-gradle-plugin")
}
/* ---------- local.properties ---------- */
val localProperties = Properties()
val localPropertiesFile = rootProject.file("local.properties")
if (localPropertiesFile.exists()) {
localPropertiesFile.inputStream().use {
localProperties.load(it)
}
}
/* ---------- key.properties ---------- */
val keystoreProperties = Properties()
val keystorePropertiesFile = rootProject.file("key.properties")
if (keystorePropertiesFile.exists()) {
FileInputStream(keystorePropertiesFile).use {
keystoreProperties.load(it)
}
}
android {
namespace = "com.jhelum.gyawun"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
defaultConfig {
applicationId = "com.jhelum.gyawun"
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
/* ---------- Flavors ---------- */
flavorDimensions += "default"
productFlavors {
create("beta") {
dimension = "default"
applicationIdSuffix = ".beta"
resValue("string", "app_name", "Gyawun Music Beta")
}
create("stable") {
dimension = "default"
resValue("string", "app_name", "Gyawun Music")
}
}
/* ---------- Signing ---------- */
signingConfigs {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String?
keyPassword = keystoreProperties["keyPassword"] as String?
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
storePassword = keystoreProperties["storePassword"] as String?
}
}
buildTypes {
getByName("release") {
signingConfig = signingConfigs.getByName("release")
ndk {
debugSymbolLevel = "none"
}
}
}
packaging {
jniLibs {
useLegacyPackaging = true
}
}
}
flutter {
source = "../.."
}
================================================
FILE: android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- ===== Permissions ===== -->
<!-- Android < 10 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- Android 11+ (scoped storage exemption) -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<!-- ===== Queries MUST be here ===== -->
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
</queries>
<!-- ===== Application ===== -->
<application
android:name="${applicationName}"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true"
android:enableOnBackInvokedCallback="true"
android:requestLegacyExternalStorage="true">
<activity
android:name="com.ryanheise.audioservice.AudioServiceActivity"
android:exported="true"
android:launchMode="singleTask"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="https"/>
<data android:host="music.youtube.com"/>
</intent-filter>
</activity>
<service
android:name="com.ryanheise.audioservice.AudioService"
android:foregroundServiceType="mediaPlayback"
android:exported="true"
tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService"/>
</intent-filter>
</service>
<receiver
android:name="com.ryanheise.audioservice.MediaButtonReceiver"
android:exported="true"
tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON"/>
</intent-filter>
</receiver>
<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
<meta-data
android:name="flutterEmbedding"
android:value="2"/>
</application>
</manifest>
================================================
FILE: android/app/src/main/kotlin/com/jhelum/gyawun/MainActivity.kt
================================================
package com.jhelum.gyawun
import io.flutter.embedding.android.FlutterActivity
class MainActivity : FlutterActivity()
================================================
FILE: android/app/src/main/res/anim/in_animation.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_shortAnimTime"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:shareInterpolator="true">
<alpha
android:fillAfter="true"
android:fillBefore="true"
android:fillEnabled="true"
android:fromAlpha="0"
android:toAlpha="1.0" />
<translate android:fromYDelta="100%p" />
</set>
================================================
FILE: android/app/src/main/res/anim/out_animation.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_shortAnimTime"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:shareInterpolator="true">
<alpha
android:fillAfter="true"
android:fillBefore="true"
android:fillEnabled="true"
android:fromAlpha="1.0"
android:toAlpha="0" />
<translate
android:fromYDelta="0%p"
android:toYDelta="-100%p" />
</set>
================================================
FILE: android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
<item>
<bitmap android:gravity="bottom" android:src="@drawable/branding"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-hdpi/audio_service_stop.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="M289.94,256l95,-95A24,24 0,0 0,351 127l-95,95 -95,-95A24,24 0,0 0,127 161l95,95 -95,95A24,24 0,1 0,161 385l95,-95 95,95A24,24 0,0 0,385 351Z"/>
</vector>
================================================
FILE: android/app/src/main/res/drawable-mdpi/audio_service_stop.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="M289.94,256l95,-95A24,24 0,0 0,351 127l-95,95 -95,-95A24,24 0,0 0,127 161l95,95 -95,95A24,24 0,1 0,161 385l95,-95 95,95A24,24 0,0 0,385 351Z"/>
</vector>
================================================
FILE: android/app/src/main/res/drawable-night/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Dark theme splash screen with launcher icon -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/black" /> <!-- Black background -->
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher" /> <!-- Use launcher icon -->
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
<item>
<bitmap android:gravity="bottom" android:src="@drawable/branding"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-xhdpi/audio_service_stop.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="M289.94,256l95,-95A24,24 0,0 0,351 127l-95,95 -95,-95A24,24 0,0 0,127 161l95,95 -95,95A24,24 0,1 0,161 385l95,-95 95,95A24,24 0,0 0,385 351Z"/>
</vector>
================================================
FILE: android/app/src/main/res/drawable-xxhdpi/audio_service_stop.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="72dp"
android:height="72dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="M289.94,256l95,-95A24,24 0,0 0,351 127l-95,95 -95,-95A24,24 0,0 0,127 161l95,95 -95,95A24,24 0,1 0,161 385l95,-95 95,95A24,24 0,0 0,385 351Z"/>
</vector>
================================================
FILE: android/app/src/main/res/drawable-xxxhdpi/audio_service_stop.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="96dp"
android:height="96dp"
android:viewportWidth="512"
android:viewportHeight="512">
<path
android:fillColor="#FF000000"
android:pathData="M289.94,256l95,-95A24,24 0,0 0,351 127l-95,95 -95,-95A24,24 0,0 0,127 161l95,95 -95,95A24,24 0,1 0,161 385l95,-95 95,95A24,24 0,0 0,385 351Z"/>
</vector>
================================================
FILE: android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
</adaptive-icon>
================================================
FILE: android/app/src/main/res/raw/keep.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/*" />
================================================
FILE: android/app/src/main/res/values/attrs.xml
================================================
<resources>
<declare-styleable name="AppWidgetAttrs">
<attr name="appWidgetPadding" format="dimension" />
<attr name="appWidgetInnerRadius" format="dimension" />
<attr name="appWidgetRadius" format="dimension" />
</declare-styleable>
</resources>
================================================
FILE: android/app/src/main/res/values/colors.xml
================================================
<resources>
<color name="light_blue_50">#FFE1F5FE</color>
<color name="light_blue_200">#FF81D4FA</color>
<color name="light_blue_600">#FF039BE5</color>
<color name="light_blue_900">#FF01579B</color>
</resources>
================================================
FILE: android/app/src/main/res/values/dimens.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Refer to App Widget Documentation for margin information
http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout
-->
<dimen name="widget_margin">0dp</dimen>
</resources>
================================================
FILE: android/app/src/main/res/values/ic_launcher_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#000000</color>
</resources>
================================================
FILE: android/app/src/main/res/values/strings.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="appwidget_text">Play</string>
<string name="add_widget">Add widget</string>
<string name="app_widget_description">BlackHole Music</string>
</resources>
================================================
FILE: android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/black</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
<style name="Widget.Android.AppWidget.Container" parent="android:Widget">
<item name="android:id">@android:id/background</item>
<item name="android:background">?android:attr/colorBackground</item>
</style>
<style name="Widget.Android.AppWidget.InnerView" parent="android:Widget">
<item name="android:background">?android:attr/colorBackground</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values/themes.xml
================================================
<resources>
<style name="Theme.Android.AppWidgetContainerParent" parent="@android:style/Theme.DeviceDefault">
<!-- Radius of the outer bound of widgets to make the rounded corners -->
<item name="appWidgetRadius">16dp</item>
<!--
Radius of the inner view's bound of widgets to make the rounded corners.
It needs to be 8dp or less than the value of appWidgetRadius
-->
<item name="appWidgetInnerRadius">8dp</item>
</style>
<style name="Theme.Android.AppWidgetContainer" parent="Theme.Android.AppWidgetContainerParent">
<!-- Apply padding to avoid the content of the widget colliding with the rounded corners -->
<item name="appWidgetPadding">16dp</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-night-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBrandingImage">@drawable/android12branding</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBrandingImage">@drawable/android12branding</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/android12splash</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/xml/automotive_app_desc.xml
================================================
<automotiveApp>
<uses name="media"/>
</automotiveApp>
================================================
FILE: android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: android/build/reports/problems/problems-report.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<style type="text/css">
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */
html {
line-height: 1.15;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%
}
body {
margin: 0
}
article, aside, footer, header, nav, section {
display: block
}
h1 {
font-size: 2em;
margin: .67em 0
}
figcaption, figure, main {
display: block
}
figure {
margin: 1em 40px
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible
}
pre {
font-family: monospace, monospace;
font-size: 1em
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
text-decoration: underline dotted
}
b, strong {
font-weight: inherit
}
b, strong {
font-weight: bolder
}
code, kbd, samp {
font-family: monospace, monospace;
font-size: 1em
}
dfn {
font-style: italic
}
mark {
background-color: #ff0;
color: #000
}
small {
font-size: 80%
}
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline
}
sub {
bottom: -.25em
}
sup {
top: -.5em
}
audio, video {
display: inline-block
}
audio:not([controls]) {
display: none;
height: 0
}
img {
border-style: none
}
svg:not(:root) {
overflow: hidden
}
button, input, optgroup, select, textarea {
font-family: sans-serif;
font-size: 100%;
line-height: 1.15;
margin: 0
}
button, input {
overflow: visible
}
button, select {
text-transform: none
}
[type=reset], [type=submit], button, html [type=button] {
-webkit-appearance: button
}
[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner {
border-style: none;
padding: 0
}
[type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring {
outline: 1px dotted ButtonText
}
fieldset {
padding: .35em .75em .625em
}
legend {
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal
}
progress {
display: inline-block;
vertical-align: baseline
}
textarea {
overflow: auto
}
[type=checkbox], [type=radio] {
box-sizing: border-box;
padding: 0
}
[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button {
height: auto
}
[type=search] {
-webkit-appearance: textfield;
outline-offset: -2px
}
[type=search]::-webkit-search-cancel-button, [type=search]::-webkit-search-decoration {
-webkit-appearance: none
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit
}
details, menu {
display: block
}
summary {
display: list-item
}
canvas {
display: inline-block
}
template {
display: none
}
[hidden] {
display: none
}
/* configuration cache styles */
.report-wrapper {
margin: 0;
padding: 0 24px;
}
.gradle-logo {
width: 32px;
height: 24px;
background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAGAAAAAA915G0AAAD5klEQVRIDbVWC0xTZxT+emmhVUEeA1/ROh/tFAFFGK7oJisIKsNVoOwBbJPowEWHzikRxeiMRpwwjDWRBHQLIzOmiRhe22BT40TitiyaMBQFfMEeLMIEaSmk+/+rvd7be4no6Elu7n++c/5zzv845/wyOyG4iGyDgzCdNOPLM9W41n4bnmNUiHo5DNsz0hGsmcV6lbkyAOOWXJjrz4qWp1C4o3z/LqzWL4VcJB1FIHmZHn/f78a6pDcxbeIEfNvQiPwTZbDZBpC24zOEaGfDpTsgtZby6u+QlrubFWUY3nh6AH39/ahr/Bn1jZfxW3ML2js60dtvgbtcQVblj8CZM7A0PBSrol6Ft+c4KZ8iTB1nwN0//8IEP9/hA2i924Gir0/iq8oa/NvbJzLiDKiUSqTE6pGVbEBY4BxnsYAPSnwXTa3tLCZ5BF3dPdAkGNHzoFcwcaRMnC4CeZkZiAgKFE252nITC1Pew9Dj5GNEGgS4Rbb5eZ1Te7UXG6FLX4cV6zeh5kIDaDpSunL9Boyf5nLOpwT4Sx+BxWrFK8QAnTAapPRQwofcj86uLoG59cbVEOzA0NAQNh38Atn5RSjY8rFAmc/I3dyQvOx1PsSNVy7Roa3ajHDePbBYLSLn1MaGd5KFAXy07xAOl59C6elK+I73hIHcbGd6wXs8qkyH8FZcjLOI5X/9/TrOnLsAldJDUu4As1NToFFPe3IEpm/M2HigwCFnU6t4Zw6Ck1JhGRhgcXq5juXloKyqFnlHirmz5CaNcEAv59kSE9wVikcB3O78A/MSU0Fznk/H9+yAetJEnPr+B8RFLsLcGS8ia28+qQuX+WrPNNZOV+Nc6VH4+3iz89g0pEaLzRUiQ3LGDWsM8Qidq2WL0PGKKlgf74ZIeQTAfFJ6a44WIsDXh9OW/dPdY58aawC9KK6kpOgolO7JxViVSuBGXnvxksudZ5F0O5yzGYxMJnBOGaau4fnPU2RNAtCFBKFoa7akczaAptY2iWmjB33+yQa4kZwfjpi2ex3Dyf43vuAljWQ/4Btmei1WPj+q45hF4U+1J4fEizCEvNf0EWHoIW244sfzoN1RipaT2kDfdjfv3MNpojdISjmfIheE8Fnp8WR9vJ2Zr+O+bYUmO+kJ9KnIUtf9bnvY2x9wcqrrvnCJvfL8Tw4V9v9LU7PdKzJaoNdy645AR4ph1JMncZHRKrVvYyYY5kmP8iO1v2T3dk6HDtYmrgJtOnwKnaPFrg8z+BBX7QSgEyOPJfX9Qd9DFs40GgTOHbrBs2ch4bXFuEG2mmFkeD9hpUMk+NMXEe0TNtsg/Ly94DVurEAuxfwHC1WiVbe0U7MAAAAASUVORK5CYII=");
background-size: contain;
}
.header {
display: flex;
flex-wrap: wrap;
position: fixed;
top: 0;
left: 0;
width: 100%;
padding: 24px 24px 0 24px;
background-color: white;
z-index: 1;
}
.learn-more {
margin-left: auto;
align-self: center;
font-size: 0.875rem;
font-weight: normal;
}
.title {
display: flex;
align-items: center;
padding: 18px 0 24px 0;
flex: 1 0 100%;
}
.content {
font-size: 0.875rem;
padding: 240px 0 48px;
overflow-x: auto;
white-space: nowrap;
}
.content ol:first-of-type {
margin: 0;
}
.tree-btn {
cursor: pointer;
display: inline-block;
width: 16px;
height: 16px;
background-size: contain;
background-repeat: no-repeat;
vertical-align: middle;
margin-top: -0.2em;
}
.tree-btn.collapsed {
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 512"><path d="M166.9 264.5l-117.8 116c-4.7 4.7-12.3 4.7-17 0l-7.1-7.1c-4.7-4.7-4.7-12.3 0-17L127.3 256 25.1 155.6c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0l117.8 116c4.6 4.7 4.6 12.3-.1 17z" fill="%23999999" stroke="%23999999"/></svg>');
}
.tree-btn.expanded {
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><path d="M119.5 326.9L3.5 209.1c-4.7-4.7-4.7-12.3 0-17l7.1-7.1c4.7-4.7 12.3-4.7 17 0L128 287.3l100.4-102.2c4.7-4.7 12.3-4.7 17 0l7.1 7.1c4.7 4.7 4.7 12.3 0 17L136.5 327c-4.7 4.6-12.3 4.6-17-.1z" fill="%23999999" stroke="%23999999"/></svg>');
}
ul .tree-btn {
margin-right: 3px;
}
.leaf-icon {
display: inline-block;
width: 16px;
height: 16px;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 512"><path d="M32 256 H224" stroke="%23999999" stroke-width="48" stroke-linecap="round"/></svg>');
background-size: contain;
background-repeat: no-repeat;
vertical-align: middle;
margin-top: -0.2em;
}
.invisible-text {
user-select: all; /* Allow the text to be selectable */
color: transparent; /* Hide the text */
text-indent: -9999px; /* Move the text out of view */
position: relative;
white-space: pre; /* Preserve meaningful whitespace in the invisible text for copying */
}
.text-for-copy {
display: inline-block;
}
.enum-icon {
display: inline-block;
width: 16px;
height: 16px;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><circle cx="512" cy="512" r="200" /></svg>');
background-size: contain;
background-repeat: no-repeat;
vertical-align: middle;
margin-inline-start: 0.5ex;
margin-inline-end: 0.5ex;
margin-top: -0.2em;
}
.error-icon {
display: inline-block;
width: 16px;
height: 16px;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M193.94 256L296.5 153.44l21.15-21.15c3.12-3.12 3.12-8.19 0-11.31l-22.63-22.63c-3.12-3.12-8.19-3.12-11.31 0L160 222.06 36.29 98.34c-3.12-3.12-8.19-3.12-11.31 0L2.34 120.97c-3.12 3.12-3.12 8.19 0 11.31L126.06 256 2.34 379.71c-3.12 3.12-3.12 8.19 0 11.31l22.63 22.63c3.12 3.12 8.19 3.12 11.31 0L160 289.94 262.56 392.5l21.15 21.15c3.12 3.12 8.19 3.12 11.31 0l22.63-22.63c3.12-3.12 3.12-8.19 0-11.31L193.94 256z" fill="%23FC461E" stroke="%23FC461E"/></svg>');
background-size: contain;
background-repeat: no-repeat;
vertical-align: middle;
margin-inline-start: 0.5ex;
margin-inline-end: 0.5ex;
margin-top: -0.2em;
}
.advice-icon {
display: inline-block;
width: 16px;
height: 16px;
background-image: url('data:image/svg+xml;utf8,<svg width="800px" height="800px" viewBox="-4.93 0 122.88 122.88" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="enable-background:new 0 0 113.01 122.88" xml:space="preserve"><g><path d="M44.13,102.06c-1.14,0.03-2.14-0.81-2.3-1.96c-0.17-1.2,0.64-2.31,1.82-2.54c-1.3-7.37-4.85-11.43-8.6-15.72 c-2.92-3.34-5.95-6.81-8.34-11.92c-2.35-5.03-3.64-10.23-3.6-15.63c0.05-5.4,1.42-10.96,4.4-16.71c0.02-0.04,0.04-0.07,0.06-0.11 l0,0c3.91-6.62,9.38-11.04,15.47-13.52c5.11-2.09,10.66-2.8,16.1-2.3c5.42,0.5,10.73,2.2,15.37,4.94 c5.9,3.49,10.75,8.67,13.42,15.21c1.44,3.54,2.42,7.49,2.54,11.82c0.12,4.31-0.62,8.96-2.61,13.88 c-2.66,6.59-6.18,10.68-9.47,14.51c-3.03,3.53-5.85,6.81-7.42,11.84c0.89,0.21,1.59,0.94,1.73,1.9c0.17,1.24-0.7,2.39-1.94,2.56 l-0.77,0.11c-0.14,1.09-0.23,2.26-0.27,3.51l0.25-0.04c1.24-0.17,2.39,0.7,2.56,1.94c0.17,1.24-0.7,2.39-1.94,2.56l-0.78,0.11 c0.01,0.15,0.02,0.3,0.03,0.45l0,0c0.07,0.88,0.08,1.73,0.03,2.54l0.13-0.02c1.25-0.15,2.38,0.74,2.54,1.98 c0.15,1.25-0.74,2.38-1.98,2.54l-1.68,0.21c-1.2,3.11-3.34,5.48-5.87,6.94c-1.74,1.01-3.67,1.59-5.61,1.71 c-1.97,0.12-3.96-0.25-5.78-1.13c-2.08-1.02-3.94-2.71-5.29-5.14c-0.65-0.33-1.13-0.97-1.23-1.75c-0.04-0.31-0.01-0.61,0.07-0.89 c-0.39-1.16-0.68-2.43-0.87-3.83l-0.07,0.01c-1.24,0.17-2.39-0.7-2.56-1.94c-0.17-1.24,0.7-2.39,1.94-2.56l0.54-0.08 C44.19,104.32,44.18,103.16,44.13,102.06L44.13,102.06z M2.18,58.86C1.01,58.89,0.04,57.98,0,56.81c-0.04-1.17,0.88-2.14,2.05-2.18 l8.7-0.3c1.17-0.04,2.14,0.88,2.18,2.05c0.04,1.17-0.88,2.14-2.05,2.18L2.18,58.86L2.18,58.86z M110.68,50.25 c1.16-0.12,2.2,0.73,2.32,1.89c0.12,1.16-0.73,2.2-1.89,2.32l-8.66,0.91c-1.16,0.12-2.2-0.73-2.32-1.89 c-0.12-1.16,0.73-2.2,1.89-2.32L110.68,50.25L110.68,50.25z M94.91,14.78c0.65-0.97,1.96-1.23,2.93-0.58 c0.97,0.65,1.23,1.96,0.58,2.93l-4.84,7.24c-0.65,0.97-1.96,1.23-2.93,0.58c-0.97-0.65-1.23-1.96-0.58-2.93L94.91,14.78 L94.91,14.78z M57.63,2.06c0.03-1.17,1-2.09,2.16-2.06c1.17,0.03,2.09,1,2.06,2.16l-0.22,8.7c-0.03,1.17-1,2.09-2.16,2.06 c-1.17-0.03-2.09-1-2.06-2.16L57.63,2.06L57.63,2.06z M13.88,15.53c-0.86-0.8-0.9-2.14-0.11-2.99c0.8-0.86,2.14-0.9,2.99-0.11 l6.37,5.94c0.86,0.8,0.9,2.14,0.11,2.99c-0.8,0.86-2.14,0.9-2.99,0.11L13.88,15.53L13.88,15.53z M47.88,96.95l18.49-2.63 c1.59-6.7,5.05-10.73,8.8-15.08c3.08-3.58,6.36-7.4,8.76-13.34c1.76-4.35,2.41-8.43,2.31-12.19c-0.1-3.75-0.96-7.21-2.24-10.34 c-2.3-5.63-6.51-10.11-11.65-13.15c-4.11-2.43-8.8-3.94-13.59-4.37c-4.77-0.44-9.64,0.19-14.13,2.02 c-5.26,2.15-9.99,5.97-13.39,11.72c-2.64,5.12-3.86,10.02-3.9,14.73c-0.04,4.74,1.11,9.33,3.2,13.8c2.13,4.56,4.97,7.8,7.69,10.92 C42.47,83.9,46.48,88.49,47.88,96.95L47.88,96.95z M65.62,99.02l-17.27,2.45c0.05,1.1,0.07,2.25,0.05,3.47l17.05-2.42 C65.47,101.29,65.52,100.12,65.62,99.02L65.62,99.02z M48.49,109.52c0.12,0.92,0.3,1.76,0.53,2.54l16.55-2.04 c0.11-0.86,0.13-1.77,0.05-2.74l0,0l0-0.02l-0.01-0.17L48.49,109.52L48.49,109.52z M51.37,116.36c0.64,0.67,1.35,1.19,2.1,1.55 c1.15,0.56,2.42,0.79,3.67,0.72c1.29-0.08,2.57-0.47,3.74-1.15c1.1-0.64,2.09-1.53,2.88-2.65L51.37,116.36L51.37,116.36z"/></g></svg>');
background-size: contain;
background-repeat: no-repeat;
vertical-align: middle;
margin-inline-start: 0.5ex;
margin-inline-end: 0.5ex;
margin-top: -0.2em;
}
.warning-icon {
display: inline-block;
width: 13px;
height: 13px;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M270.2 160h35.5c3.4 0 6.1 2.8 6 6.2l-7.5 196c-.1 3.2-2.8 5.8-6 5.8h-20.5c-3.2 0-5.9-2.5-6-5.8l-7.5-196c-.1-3.4 2.6-6.2 6-6.2zM288 388c-15.5 0-28 12.5-28 28s12.5 28 28 28 28-12.5 28-28-12.5-28-28-28zm281.5 52L329.6 24c-18.4-32-64.7-32-83.2 0L6.5 440c-18.4 31.9 4.6 72 41.6 72H528c36.8 0 60-40 41.5-72zM528 480H48c-12.3 0-20-13.3-13.9-24l240-416c6.1-10.6 21.6-10.7 27.7 0l240 416c6.2 10.6-1.5 24-13.8 24z" fill="%23DEAD22" stroke="%23DEAD22"/></svg>');
background-size: contain;
background-repeat: no-repeat;
vertical-align: middle;
margin-inline-start: 0.3ex;
margin-inline-end: 1.1ex;
margin-top: -0.1em;
}
.documentation-button {
cursor: pointer;
display: inline-block;
width: 13px;
height: 13px;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256 340c-15.464 0-28 12.536-28 28s12.536 28 28 28 28-12.536 28-28-12.536-28-28-28zm7.67-24h-16c-6.627 0-12-5.373-12-12v-.381c0-70.343 77.44-63.619 77.44-107.408 0-20.016-17.761-40.211-57.44-40.211-29.144 0-44.265 9.649-59.211 28.692-3.908 4.98-11.054 5.995-16.248 2.376l-13.134-9.15c-5.625-3.919-6.86-11.771-2.645-17.177C185.658 133.514 210.842 116 255.67 116c52.32 0 97.44 29.751 97.44 80.211 0 67.414-77.44 63.849-77.44 107.408V304c0 6.627-5.373 12-12 12zM256 40c118.621 0 216 96.075 216 216 0 119.291-96.61 216-216 216-119.244 0-216-96.562-216-216 0-119.203 96.602-216 216-216m0-32C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8z" fill="%23999999" stroke="%23999999"/></svg>');
background-size: contain;
background-repeat: no-repeat;
vertical-align: middle;
margin-inline-start: 0.5ex;
margin-inline-end: 0.5ex;
margin-top: -0.2em;
}
.documentation-button::selection {
color: transparent;
}
.documentation-button:hover {
color: transparent;
}
.copy-button {
cursor: pointer;
display: inline-block;
width: 12px;
height: 12px;
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M433.941 193.941l-51.882-51.882A48 48 0 0 0 348.118 128H320V80c0-26.51-21.49-48-48-48h-66.752C198.643 13.377 180.858 0 160 0s-38.643 13.377-45.248 32H48C21.49 32 0 53.49 0 80v288c0 26.51 21.49 48 48 48h80v48c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V227.882a48 48 0 0 0-14.059-33.941zm-22.627 22.627a15.888 15.888 0 0 1 4.195 7.432H352v-63.509a15.88 15.88 0 0 1 7.431 4.195l51.883 51.882zM160 30c9.941 0 18 8.059 18 18s-8.059 18-18 18-18-8.059-18-18 8.059-18 18-18zM48 384c-8.822 0-16-7.178-16-16V80c0-8.822 7.178-16 16-16h66.752c6.605 18.623 24.389 32 45.248 32s38.643-13.377 45.248-32H272c8.822 0 16 7.178 16 16v48H176c-26.51 0-48 21.49-48 48v208H48zm352 96H176c-8.822 0-16-7.178-16-16V176c0-8.822 7.178-16 16-16h144v72c0 13.2 10.8 24 24 24h72v208c0 8.822-7.178 16-16 16z" fill="%23999999" stroke="%23999999"/></svg>');
background-size: contain;
background-repeat: no-repeat;
vertical-align: middle;
margin-inline-start: 0.5ex;
margin-top: -0.2em;
}
.groups{
display: flex;
border-bottom: 1px solid #EDEEEF;
flex: 1 0 100%;
}
.uncategorized {
display: flex;
border-top: 4px solid #EDEEEF;
flex: 1 0 100%;
}
.group-selector {
padding: 0 52px 24px 0;
font-size: 0.9rem;
font-weight: bold;
color: #999999;
cursor: pointer;
}
.group-selector__count {
margin: 0 8px;
border-radius: 8px;
background-color: #999;
color: #fff;
padding: 1px 8px 2px;
font-size: 0.75rem;
}
.group-selector--active {
color: #02303A;
cursor: auto;
}
.group-selector--active .group-selector__count {
background-color: #686868;
}
.group-selector--disabled {
cursor: not-allowed;
}
.accordion-header {
cursor: pointer;
}
.container {
padding-left: 0.5em;
padding-right: 0.5em;
}
.stacktrace {
border-radius: 4px;
overflow-x: auto;
padding: 0.5rem;
margin-bottom: 0;
min-width: 1000px;
}
/* Lato (bold, regular) */
@font-face {
font-display: swap;
font-family: Lato;
font-weight: 500;
font-style: normal;
src: url("https://assets.gradle.com/lato/fonts/lato-semibold/lato-semibold.woff2") format("woff2"),
url("https://assets.gradle.com/lato/fonts/lato-semibold/lato-semibold.woff") format("woff");
}
@font-face {
font-display: swap;
font-family: Lato;
font-weight: bold;
font-style: normal;
src: url("https://assets.gradle.com/lato/fonts/lato-bold/lato-bold.woff2") format("woff2"),
url("https://assets.gradle.com/lato/fonts/lato-bold/lato-bold.woff") format("woff");
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
}
html {
font-family: "Lato", "Helvetica Neue", Arial, sans-serif;
font-size: 16px;
font-weight: 400;
line-height: 1.5;
}
body {
color: #02303A;
background-color: #ffffff;
-webkit-text-size-adjust: 100%;
-ms-text-size-adjust: 100%;
-webkit-font-smoothing: antialiased;
}
/* typography */
h1, h2, h3, h4, h5, h6 {
color: #02303A;
text-rendering: optimizeLegibility;
margin: 0;
}
h1 {
font-size: 1rem;
}
h2 {
font-size: 0.9rem;
}
h3 {
font-size: 1.125rem;
}
h4, h5, h6 {
font-size: 0.875rem;
}
h1 code {
font-weight: bold;
}
ul, ol, dl {
list-style-position: outside;
line-height: 1.6;
padding: 0;
margin: 0 0 0 20px;
list-style-type: none;
}
li {
line-height: 2;
}
a {
color: #1DA2BD;
text-decoration: none;
transition: all 0.3s ease, visibility 0s;
}
a:hover {
color: #35c1e4;
}
/* code */
code, pre {
font-family: Inconsolata, Monaco, "Courier New", monospace;
font-style: normal;
font-variant-ligatures: normal;
font-variant-caps: normal;
font-variant-numeric: normal;
font-variant-east-asian: normal;
font-weight: normal;
font-stretch: normal;
color: #686868;
}
*:not(pre) > code {
letter-spacing: 0;
padding: 0.1em 0.5ex;
text-rendering: optimizeSpeed;
word-spacing: -0.15em;
word-wrap: break-word;
}
pre {
font-size: 0.75rem;
line-height: 1.8;
margin-top: 0;
margin-bottom: 1.5em;
padding: 1rem;
}
pre code {
background-color: transparent;
color: inherit;
line-height: 1.8;
font-size: 100%;
padding: 0;
}
a code {
color: #1BA8CB;
}
pre.code, pre.programlisting, pre.screen, pre.tt {
background-color: #f7f7f8;
border-radius: 4px;
font-size: 1em;
line-height: 1.45;
margin-bottom: 1.25em;
overflow-x: auto;
padding: 1rem;
}
li em, p em {
padding: 0 1px;
}
code em, tt em {
text-decoration: none;
}
code + .copy-button {
margin-inline-start: 0.2ex;
}
.java-exception {
font-size: 0.75rem;
padding-left: 24px;
}
.java-exception ul {
margin: 0;
line-height: inherit;
}
.java-exception code {
white-space: pre;
}
.java-exception-part-toggle {
user-select: none;
cursor: pointer;
border-radius: 2px;
padding: 0.1em 0.2em;
background: azure;
color: #686868;
}
</style>
<!-- Inconsolata is used as a default monospace font in the report. -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inconsolata:400,700" />
<title>Gradle Configuration Cache</title>
</head>
<body>
<div id="playground"></div>
<div class="report" id="report">
Loading...
</div>
<script type="text/javascript">
function configurationCacheProblems() { return (
// begin-report-data
{"diagnostics":[{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('version = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('namespace = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('version = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('checkAllWarnings = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('warningsAsErrors = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('group = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('version = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('namespace = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('group = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('version = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('namespace = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('minSdk = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('group = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('version = <value>') instead."}]]},{"locations":[{}],"problem":[{"text":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"severity":"WARNING","problemDetails":[{"text":"This is scheduled to be removed in Gradle 10.0."}],"contextualLabel":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated.","documentationLink":"https://docs.gradle.org/8.14/userguide/upgrading_version_8.html#groovy_space_assignment_syntax","problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"solutions":[[{"text":"Use assignment ('namespace = <value>') instead."}]]}],"problemsReport":{"totalProblemCount":15,"buildName":"android","requestedTasks":"assembleProductionRelease","documentationLink":"https://docs.gradle.org/8.14/userguide/reporting_problems.html","documentationLinkCaption":"Problem report","summaries":[{"problemId":[{"name":"deprecation","displayName":"Deprecation"},{"name":"properties-should-be-assigned-using-the-propname-value-syntax-setting-a-property-via-the-gradle-generated-propname-value-or-propname-value-syntax-in-groovy-dsl","displayName":"Properties should be assigned using the 'propName = value' syntax. Setting a property via the Gradle-generated 'propName value' or 'propName(value)' syntax in Groovy DSL has been deprecated."}],"count":19}]}}
// end-report-data
);}
</script>
<script type="text/javascript">
!function(n,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["configuration-cache-report"]=t():n["configuration-cache-report"]=t()}(this,(()=>(({70:function(){void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(n){return null!=n&&null!=n.__proto__&&n.__proto__.__proto__===Int8Array.prototype.__proto__}),void 0===Math.imul&&(Math.imul=function(n,t){return(4294901760&n)*(65535&t)+(65535&n)*(0|t)|0}),this["configuration-cache-report"]=function(n){"use strict";var t,r,i,e,u,o,f,s,c,a,h,l,_,v,d,g,w,b,p,m,k,q,y,B,C,x,j,P,I,S,z,T,E,L,N,A,M,F,D,O,R,H,$,G,U,V,Q,Z,Y,W,K,X,J,nn,tn,rn,en,un,on,fn,sn,cn,an,hn,ln,_n,vn,dn,gn,wn,bn,pn,mn,kn,qn,yn,Bn,Cn,xn,jn,Pn,In,Sn,zn,Tn,En,Ln,Nn,An,Mn=Math.imul,Fn=ArrayBuffer.isView;function Dn(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));return function(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));if(0===t)return Ct();if(t>=n.length)return function(n){switch(n.length){case 0:return Ct();case 1:return qr(n[0]);default:return function(n){return Hr(function(n){return new It(n,!1)}(n))}(n)}}(n);if(1===t)return qr(n[0]);var r=0,i=Rr(),e=0,u=n.length;n:for(;e<u;){var o=n[e];if(e=e+1|0,i.d(o),(r=r+1|0)===t)break n}return i}(n,rt(n.length-t|0,0))}function On(n,t,r,i,e,u,o){return t=t===A?", ":t,r=r===A?"":r,i=i===A?"":i,e=e===A?-1:e,u=u===A?"...":u,o=o===A?null:o,function(n,t,r,i,e,u,o,f){r=r===A?", ":r,i=i===A?"":i,e=e===A?"":e,u=u===A?-1:u,o=o===A?"...":o,f=f===A?null:f,t.e(i);var s=0,c=0,a=n.length;n:for(;c<a;){var h=n[c];if(c=c+1|0,(s=s+1|0)>1&&t.e(r),!(u<0||s<=u))break n;Jt(t,h,f)}return u>=0&&s>u&&t.e(o),t.e(e),t}(n,Bi(),t,r,i,e,u,o).toString()}function Rn(n){return n.length-1|0}function Hn(n,t){if(null==t){var r=0,i=n.length-1|0;if(r<=i)do{var e=r;if(r=r+1|0,null==n[e])return e}while(r<=i)}else{var u=0,o=n.length-1|0;if(u<=o)do{var f=u;if(u=u+1|0,le(t,n[f]))return f}while(u<=o)}return-1}function $n(n,t,r,i,e,u,o){return t=t===A?", ":t,r=r===A?"":r,i=i===A?"":i,e=e===A?-1:e,u=u===A?"...":u,o=o===A?null:o,Gn(n,Bi(),t,r,i,e,u,o).toString()}function Gn(n,t,r,i,e,u,o,f){r=r===A?", ":r,i=i===A?"":i,e=e===A?"":e,u=u===A?-1:u,o=o===A?"...":o,f=f===A?null:f,t.e(i);var s=0,c=n.f();n:for(;c.g();){var a=c.h();if((s=s+1|0)>1&&t.e(r),!(u<0||s<=u))break n;Jt(t,a,f)}return u>=0&&s>u&&t.e(o),t.e(e),t}function Un(n){if(n.i())throw xu("List is empty.");return n.j(0)}function Vn(n){return new tt(n)}function Qn(n){if(Ke(n,Di)){var t;switch(n.k()){case 0:t=Ct();break;case 1:t=qr(Ke(n,Fi)?n.j(0):n.f().h());break;default:t=Zn(n)}return t}return xt(Xn(n))}function Zn(n){return Hr(n)}function Yn(n){if(Ke(n,Di)&&n.k()<=1)return Qn(n);var t=Xn(n);return function(n){var t=(n.k()/2|0)-1|0;if(t<0)return br();var r=jt(n),i=0;if(i<=t)do{var e=i;i=i+1|0;var u=n.j(e);n.f4(e,n.j(r)),n.f4(r,u),r=r-1|0}while(e!==t)}(t),t}function Wn(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));return function(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));if(0===t)return Ct();if(Ke(n,Di)){if(t>=n.k())return Qn(n);if(1===t)return qr(function(n){if(Ke(n,Fi))return Un(n);var t=n.f();if(!t.g())throw xu("Collection is empty.");return t.h()}(n))}var r=0,i=Rr(),e=n.f();n:for(;e.g();){var u=e.h();if(i.d(u),(r=r+1|0)===t)break n}return xt(i)}(n,rt(n.k()-t|0,0))}function Kn(n,t){if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));if(0===t)return Ct();var r=n.k();if(t>=r)return Qn(n);if(1===t)return qr(Jn(n));var i=Rr();if(Ke(n,bi)){var e=r-t|0;if(e<r)do{var u=e;e=e+1|0,i.d(n.j(u))}while(e<r)}else for(var o=n.l(r-t|0);o.g();){var f=o.h();i.d(f)}return i}function Xn(n){return Ke(n,Di)?Zn(n):nt(n,Or())}function Jn(n){if(n.i())throw xu("List is empty.");return n.j(jt(n))}function nt(n,t){for(var r=n.f();r.g();){var i=r.h();t.d(i)}return t}function tt(n){this.n_1=n}function rt(n,t){return n<t?t:n}function it(n,t){return n>t?t:n}function et(n,t){return Kt().q(n,t,-1)}function ut(n,t){return new Ft(n,t)}function ot(n){var t=n.f();if(!t.g())return Ct();var r=t.h();if(!t.g())return qr(r);var i=Or();for(i.d(r);t.g();)i.d(t.h());return i}function ft(n){this.r_1=n}function st(n,t){this.s_1=n,this.t_1=t}function ct(){}function at(n){this.x_1=n,this.w_1=0}function ht(n,t){this.a1_1=n,at.call(this,n),_t().b1(t,this.a1_1.k()),this.w_1=t}function lt(){t=this}function _t(){return null==t&&new lt,t}function vt(){_t(),ct.call(this)}function dt(n){this.h1_1=n}function gt(n,t){return t===n?"(this Map)":Vi(t)}function wt(n,t){var r;n:{for(var i=n.o().f();i.g();){var e=i.h();if(le(e.j1(),t)){r=e;break n}}r=null}return r}function bt(){r=this}function pt(){return null==r&&new bt,r}function mt(n){this.q1_1=n,ct.call(this)}function kt(){pt(),this.n1_1=null,this.o1_1=null}function qt(){i=this}function yt(){return null==i&&new qt,i}function Bt(n){return n.length>0?ou(n):Ct()}function Ct(){return null==e&&new Pt,e}function xt(n){switch(n.k()){case 0:return Ct();case 1:return qr(n.j(0));default:return n}}function jt(n){return n.k()-1|0}function Pt(){e=this,this.z1_1=new ke(-1478467534,-1720727600)}function It(n,t){this.b2_1=n,this.c2_1=t}function St(){u=this}function zt(){return null==u&&new St,u}function Tt(n,t){return Ke(n,Di)?n.k():t}function Et(n,t){if(Ke(t,Di))return n.m(t);for(var r=!1,i=t.f();i.g();){var e=i.h();n.d(e)&&(r=!0)}return r}function Lt(){}function Nt(n,t){this.h2_1=n,this.g2_1=n.i2_1.l(function(n,t){if(!(0<=t&&t<=n.k()))throw du("Position index "+t+" must be in range ["+Ve(0,n.k())+"].");return n.k()-t|0}(n,t))}function At(n){vt.call(this),this.i2_1=n}function Mt(n){this.k2_1=n,this.j2_1=n.l2_1.f()}function Ft(n,t){this.l2_1=n,this.m2_1=t}function Dt(n){for(;n.n2_1.g();){var t=n.n2_1.h();if(n.q2_1.t2_1(t)===n.q2_1.s2_1)return n.p2_1=t,n.o2_1=1,br()}n.o2_1=0}function Ot(n){this.q2_1=n,this.n2_1=n.r2_1.f(),this.o2_1=-1,this.p2_1=null}function Rt(n,t,r){t=t===A||t,this.r2_1=n,this.s2_1=t,this.t2_1=r}function Ht(){return null==o&&new $t,o}function $t(){o=this,this.u2_1=new ke(1993859828,793161749)}function Gt(n,t,r){return Ut(Ut(n,r)-Ut(t,r)|0,r)}function Ut(n,t){var r=n%t|0;return r>=0?r:r+t|0}function Vt(){f=this,this.p_1=new Zt(1,0)}function Qt(){return null==f&&new Vt,f}function Zt(n,t){Qt(),Xt.call(this,n,t,1)}function Yt(n,t,r){Lt.call(this),this.d3_1=r,this.e3_1=t,this.f3_1=this.d3_1>0?n<=t:n>=t,this.g3_1=this.f3_1?n:this.e3_1}function Wt(){s=this}function Kt(){return null==s&&new Wt,s}function Xt(n,t,r){if(Kt(),0===r)throw _u("Step must be non-zero.");if(r===mr().MIN_VALUE)throw _u("Step must be greater than Int.MIN_VALUE to avoid overflow on negation.");this.z2_1=n,this.a3_1=function(n,t,r){var i;if(r>0)i=n>=t?t:t-Gt(t,n,r)|0;else{if(!(r<0))throw _u("Step is zero.");i=n<=t?t:t+Gt(n,t,0|-r)|0}return i}(n,t,r),this.b3_1=r}function Jt(n,t,r){null!=r?n.e(r(t)):null==t||nu(t)?n.e(t):t instanceof Mi?n.i3(t.h3_1):n.e(Vi(t))}function nr(n,t,r){if(n===t)return!0;if(!(r=r!==A&&r))return!1;var i=xi(n),e=xi(t);return i===e||le(new Mi(ne(Li(i).toLowerCase(),0)),new Mi(ne(Li(e).toLowerCase(),0)))}function tr(n){return re(n)-1|0}function rr(n,t,r,i){return r=r===A?0:r,(i=i!==A&&i)||"string"!=typeof n?ir(n,t,r,re(n),i):n.indexOf(t,r)}function ir(n,t,r,i,e,u){var o=(u=u!==A&&u)?et(it(r,tr(n)),rt(i,0)):Ve(rt(r,0),it(i,re(n)));if("string"==typeof n&&"string"==typeof t){var f=o.z2_1,s=o.a3_1,c=o.b3_1;if(c>0&&f<=s||c<0&&s<=f)do{var a=f;if(f=f+c|0,Ti(t,0,n,a,re(t),e))return a}while(a!==s)}else{var h=o.z2_1,l=o.a3_1,_=o.b3_1;if(_>0&&h<=l||_<0&&l<=h)do{var v=h;if(h=h+_|0,fr(t,0,n,v,re(t),e))return v}while(v!==l)}return-1}function er(n){var t=0,r=re(n)-1|0,i=!1;n:for(;t<=r;){var e=ji(ne(n,i?r:t));if(i){if(!e)break n;r=r-1|0}else e?t=t+1|0:i=!0}return ie(n,t,r+1|0)}function ur(n,t){return ce(ie(n,t.y2(),t.c3()+1|0))}function or(n,t,r,i,e){r=r===A?0:r,i=i!==A&&i,sr(e=e===A?0:e);var u,o,f=ou(t);return new hr(n,r,e,(u=f,o=i,function(n,t){var r=function(n,t,r,i){if(!i&&1===t.k()){var e=function(n){if(Ke(n,Fi))return function(n){var t;switch(n.k()){case 0:throw xu("List is empty.");case 1:t=n.j(0);break;default:throw _u("List has more than one element.")}return t}(n);var t=n.f();if(!t.g())throw xu("Collection is empty.");var r=t.h();if(t.g())throw _u("Collection has more than one element.");return r}(t),u=rr(n,e,r);return u<0?null:_r(u,e)}var o=Ve(rt(r,0),re(n));if("string"==typeof n){var f=o.z2_1,s=o.a3_1,c=o.b3_1;if(c>0&&f<=s||c<0&&s<=f)do{var a,h=f;f=f+c|0;n:{for(var l=t.f();l.g();){var _=l.h();if(Ti(_,0,n,h,_.length,i)){a=_;break n}}a=null}if(null!=a)return _r(h,a)}while(h!==s)}else{var v=o.z2_1,d=o.a3_1,g=o.b3_1;if(g>0&&v<=d||g<0&&d<=v)do{var w,b=v;v=v+g|0;n:{for(var p=t.f();p.g();){var m=p.h();if(fr(m,0,n,b,m.length,i)){w=m;break n}}w=null}if(null!=w)return _r(b,w)}while(b!==d)}return null}(n,u,t,o);return null==r?null:_r(r.t3_1,r.u3_1.length)}))}function fr(n,t,r,i,e,u){if(i<0||t<0||t>(re(n)-e|0)||i>(re(r)-e|0))return!1;var o=0;if(o<e)do{var f=o;if(o=o+1|0,!nr(ne(n,t+f|0),ne(r,i+f|0),u))return!1}while(o<e);return!0}function sr(n){if(!(n>=0))throw _u(ce("Limit must be non-negative, but was "+n))}function cr(n){if(n.l3_1<0)n.j3_1=0,n.m3_1=null;else{var t;if(n.o3_1.r3_1>0?(n.n3_1=n.n3_1+1|0,t=n.n3_1>=n.o3_1.r3_1):t=!1,t||n.l3_1>re(n.o3_1.p3_1))n.m3_1=Ve(n.k3_1,tr(n.o3_1.p3_1)),n.l3_1=-1;else{var r=n.o3_1.s3_1(n.o3_1.p3_1,n.l3_1);if(null==r)n.m3_1=Ve(n.k3_1,tr(n.o3_1.p3_1)),n.l3_1=-1;else{var i=r.v3(),e=r.w3();n.m3_1=function(n,t){return t<=mr().MIN_VALUE?Qt().p_1:Ve(n,t-1|0)}(n.k3_1,i),n.k3_1=i+e|0,n.l3_1=n.k3_1+(0===e?1:0)|0}}n.j3_1=1}}function ar(n){this.o3_1=n,this.j3_1=-1,this.k3_1=function(n,t,r){if(0>r)throw _u("Cannot coerce value to an empty range: maximum "+r+" is less than minimum 0.");return n<0?0:n>r?r:n}(n.q3_1,0,re(n.p3_1)),this.l3_1=this.k3_1,this.m3_1=null,this.n3_1=0}function hr(n,t,r,i){this.p3_1=n,this.q3_1=t,this.r3_1=r,this.s3_1=i}function lr(n,t){this.t3_1=n,this.u3_1=t}function _r(n,t){return new lr(n,t)}function vr(){}function dr(){}function gr(){}function wr(){c=this}function br(){return null==c&&new wr,c}function pr(){a=this,this.MIN_VALUE=-2147483648,this.MAX_VALUE=2147483647,this.SIZE_BYTES=4,this.SIZE_BITS=32}function mr(){return null==a&&new pr,a}function kr(n){for(var t=[],r=n.f();r.g();)t.push(r.h());return t}function qr(n){return 0===(t=[n]).length?Or():Hr(new It(t,!0));var t}function yr(n){return n<0&&function(){throw Pu("Index overflow has happened.")}(),n}function Br(n){return void 0!==n.toArray?n.toArray():kr(n)}function Cr(n){return function(n,t){for(var r=0,i=n.length;r<i;){var e=n[r];r=r+1|0,t.d(e)}return t}(t=[n],(r=t.length,i=de(ve(ni)),function(n,t,r){Mr.call(r),ni.call(r),r.y5_1=function(n){return Kr(n,0,de(ve(Xr)))}(n)}(r,0,i),i));var t,r,i}function xr(){ct.call(this)}function jr(n){this.j4_1=n,this.h4_1=0,this.i4_1=-1}function Pr(n,t){this.n4_1=n,jr.call(this,n),_t().b1(t,this.n4_1.k()),this.h4_1=t}function Ir(){xr.call(this),this.o4_1=0}function Sr(n){this.r4_1=n}function zr(n){this.s4_1=n}function Tr(n,t){this.t4_1=n,this.u4_1=t}function Er(){Mr.call(this)}function Lr(n){this.x4_1=n,Mr.call(this)}function Nr(n){this.e5_1=n,xr.call(this)}function Ar(){kt.call(this),this.c5_1=null,this.d5_1=null}function Mr(){xr.call(this)}function Fr(){h=this;var n=Rr();n.c_1=!0,this.i5_1=n}function Dr(){return null==h&&new Fr,h}function Or(){return n=de(ve(Gr)),t=[],Gr.call(n,t),n;var n,t}function Rr(n){return t=de(ve(Gr)),r=[],Gr.call(t,r),t;var t,r}function Hr(n){return function(n,t){var r;return r=Br(n),Gr.call(t,r),t}(n,de(ve(Gr)))}function $r(n,t){return _t().e1(t,n.k()),t}function Gr(n){Dr(),Ir.call(this),this.b_1=n,this.c_1=!1}function Ur(n,t,r,i,e){if(r===i)return n;var u=(r+i|0)/2|0,o=Ur(n,t,r,u,e),f=Ur(n,t,u+1|0,i,e),s=o===t?n:t,c=r,a=u+1|0,h=r;if(h<=i)do{var l=h;if(h=h+1|0,c<=u&&a<=i){var _=o[c],v=f[a];e.compare(_,v)<=0?(s[l]=_,c=c+1|0):(s[l]=v,a=a+1|0)}else c<=u?(s[l]=o[c],c=c+1|0):(s[l]=f[a],a=a+1|0)}while(l!==i);return s}function Vr(n,t){return(3&n)-(3&t)|0}function Qr(){_=this}function Zr(n){this.n5_1=n,Er.call(this)}function Yr(n){return function(n,t){Ar.call(t),Xr.call(t),t.t5_1=n,t.u5_1=n.w5()}(new ui((null==_&&new Qr,_)),n),n}function Wr(){return Yr(de(ve(Xr)))}function Kr(n,t,r){if(Yr(r),!(n>=0))throw _u(ce("Negative initial capacity: "+n));if(!(t>=0))throw _u(ce("Non-positive load factor: "+t));return r}function Xr(){this.v5_1=null}function Jr(n,t){return Mr.call(t),ni.call(t),t.y5_1=n,t}function ni(){}function ti(n,t){var r=ii(n,n.h6_1.m5(t));if(null==r)return null;var i=r;if(null!=i&&Xe(i))return ri(i,n,t);var e=i;return n.h6_1.l5(e.j1(),t)?e:null}function ri(n,t,r){var i;n:{for(var e=0,u=n.length;e<u;){var o=n[e];if(e=e+1|0,t.h6_1.l5(o.j1(),r)){i=o;break n}}i=null}return i}function ii(n,t){var r=n.i6_1[t];return void 0===r?null:r}function ei(n){this.g6_1=n,this.z5_1=-1,this.a6_1=Object.keys(n.i6_1),this.b6_1=-1,this.c6_1=null,this.d6_1=!1,this.e6_1=-1,this.f6_1=null}function ui(n){this.h6_1=n,this.i6_1=this.k6(),this.j6_1=0}function oi(){}function fi(n){this.n6_1=n,this.l6_1=null,this.m6_1=null,this.m6_1=this.n6_1.y6_1.v6_1}function si(){v=this;var n,t=(_i(0,0,n=de(ve(vi))),n);t.x6_1=!0,this.e7_1=t}function ci(){return null==v&&new si,v}function ai(n,t,r){this.d7_1=n,Tr.call(this,t,r),this.b7_1=null,this.c7_1=null}function hi(n){this.y6_1=n,Er.call(this)}function li(){return Yr(n=de(ve(vi))),vi.call(n),n.w6_1=Wr(),n;var n}function _i(n,t,r){return Kr(n,t,r),vi.call(r),r.w6_1=Wr(),r}function vi(){ci(),this.v6_1=null,this.x6_1=!1}function di(){d=this;var n=gi(0),t=n.y5_1;(t instanceof vi?t:pe()).j5(),this.f7_1=n}function gi(n){return function(n,t){return function(n,t,r){Jr(function(n,t){return _i(n,t,de(ve(vi)))}(n,t),r),wi.call(r)}(n,0,t),t}(n,de(ve(wi)))}function wi(){null==d&&new di}function bi(){}function pi(){}function mi(n){pi.call(this),this.k7_1=n}function ki(){qi.call(this)}function qi(){pi.call(this),this.m7_1=""}function yi(){if(!w){w=!0;var n="undefined"!=typeof process&&process.versions&&!!process.versions.node;g=n?new mi(process.stdout):new ki}}function Bi(){return n=de(ve(Ci)),Ci.call(n,""),n;var n}function Ci(n){this.o7_1=void 0!==n?n:""}function xi(n){var t=Li(n).toUpperCase();return t.length>1?n:ne(t,0)}function ji(n){return function(n){return 9<=n&&n<=13||28<=n&&n<=32||160===n||n>4096&&(5760===n||8192<=n&&n<=8202||8232===n||8233===n||8239===n||8287===n||12288===n)}(n)}function Pi(){b=this,this.q7_1=new RegExp("[\\\\^$*+?.()|[\\]{}]","g"),this.r7_1=new RegExp("[\\\\$]","g"),this.s7_1=new RegExp("\\$","g")}function Ii(){return null==b&&new Pi,b}function Si(n,t){Ii(),this.v7_1=n,this.w7_1=function(n){if(Ke(n,Di)){var t;switch(n.k()){case 0:t=Ht();break;case 1:t=Cr(Ke(n,Fi)?n.j(0):n.f().h());break;default:t=nt(n,gi(n.k()))}return t}return function(n){switch(n.k()){case 0:return Ht();case 1:return Cr(n.f().h());default:return n}}(nt(n,(r=de(ve(wi)),Jr(li(),r),wi.call(r),r)));var r}(t),this.x7_1=new RegExp(n,$n(t,"","gu",A,A,A,zi)),this.y7_1=null,this.z7_1=null}function zi(n){return n.d8_1}function Ti(n,t,r,i,e,u){return fr(n,t,r,i,e,u=u!==A&&u)}function Ei(n,t){return n-t|0}function Li(n){return String.fromCharCode(n)}function Ni(){p=this,this.e8_1=0,this.f8_1=65535,this.g8_1=55296,this.h8_1=56319,this.i8_1=56320,this.j8_1=57343,this.k8_1=55296,this.l8_1=57343,this.m8_1=2,this.n8_1=16}function Ai(){return null==p&&new Ni,p}function Mi(n){Ai(),this.h3_1=n}function Fi(){}function Di(){}function Oi(){}function Ri(){}function Hi(){}function $i(){}function Gi(){m=this}function Ui(n,t){null==m&&new Gi,this.p8_1=n,this.q8_1=t}function Vi(n){var t=null==n?null:ce(n);return null==t?"null":t}function Qi(n){return new Zi(n)}function Zi(n){this.t8_1=n,this.s8_1=0}function Yi(){return Ji(),k}function Wi(){return Ji(),q}function Ki(){return Ji(),y}function Xi(){return Ji(),B}function Ji(){x||(x=!0,k=new ArrayBuffer(8),q=new Float64Array(Yi()),new Float32Array(Yi()),y=new Int32Array(Yi()),Wi()[0]=-1,B=0!==Ki()[0]?1:0,C=1-Xi()|0)}function ne(n,t){var r;if(te(n)){var i,e=n.charCodeAt(t);if(Ai(),e<0?i=!0:(Ai(),i=e>65535),i)throw _u("Invalid Char code: "+e);r=Ue(e)}else r=n.y3(t);return r}function te(n){return"string"==typeof n}function re(n){return te(n)?n.length:n.x3()}function ie(n,t,r){return te(n)?n.substring(t,r):n.z3(t,r)}function ee(n){return ce(n)}function ue(n,t){var r;switch(typeof n){case"number":r="number"==typeof t?oe(n,t):t instanceof ke?oe(n,t.w8()):fe(n,t);break;case"string":case"boolean":r=fe(n,t);break;default:r=function(n,t){return n.a4(t)}(n,t)}return r}function oe(n,t){var r;if(n<t)r=-1;else if(n>t)r=1;else if(n===t){var i;if(0!==n)i=0;else{var e=1/n;i=e===1/t?0:e<0?-1:1}r=i}else r=n!=n?t!=t?0:1:-1;return r}function fe(n,t){return n<t?-1:n>t?1:0}function se(n){if(!("kotlinHashCodeValue$"in n)){var t=4294967296*Math.random()|0,r=new Object;r.value=t,r.enumerable=!1,Object.defineProperty(n,"kotlinHashCodeValue$",r)}return n.kotlinHashCodeValue$}function ce(n){return null==n?"null":function(n){return!!Ye(n)||Fn(n)}(n)?"[...]":n.toString()}function ae(n){if(null==n)return 0;var t;switch(typeof n){case"object":t="function"==typeof n.hashCode?n.hashCode():se(n);break;case"function":t=se(n);break;case"number":t=function(n){return Ji(),(0|n)===n?Ge(n):(Wi()[0]=n,Mn(Ki()[(Ji(),C)],31)+Ki()[Xi()]|0)}(n);break;case"boolean":t=n?1:0;break;default:t=he(String(n))}return t}function he(n){var t=0,r=0,i=n.length-1|0;if(r<=i)do{var e=r;r=r+1|0;var u=n.charCodeAt(e);t=Mn(t,31)+u|0}while(e!==i);return t}function le(n,t){return null==n?null==t:null!=t&&("object"==typeof n&&"function"==typeof n.equals?n.equals(t):n!=n?t!=t:"number"==typeof n&&"number"==typeof t?n===t&&(0!==n||1/n==1/t):n===t)}function _e(n,t){null!=Error.captureStackTrace?Error.captureStackTrace(n,t):n.stack=(new Error).stack}function ve(n){return n.prototype}function de(n){return Object.create(n)}function ge(n,t,r){Error.call(n),function(n,t,r){var i=eu(Object.getPrototypeOf(n));if(!(1&i)){var e;if(null==t){var u;if(null!==t){var o=null==r?null:r.toString();u=null==o?A:o}else u=A;e=u}else e=t;n.message=e}2&i||(n.cause=r),n.name=Object.getPrototypeOf(n).constructor.name}(n,t,r)}function we(n){var t;return null==n?function(){throw Eu()}():t=n,t}function be(){throw Nu()}function pe(){throw Mu()}function me(){j=this,this.x8_1=new ke(0,-2147483648),this.y8_1=new ke(-1,2147483647),this.z8_1=8,this.a9_1=64}function ke(n,t){null==j&&new me,gr.call(this),this.u8_1=n,this.v8_1=t}function qe(){return $e(),P}function ye(){return $e(),I}function Be(){return $e(),S}function Ce(){return $e(),T}function xe(){return $e(),E}function je(n,t){if($e(),Te(n,t))return 0;var r=Ne(n),i=Ne(t);return r&&!i?-1:!r&&i?1:Ne(Ie(n,t))?-1:1}function Pe(n,t){$e();var r=n.v8_1>>>16|0,i=65535&n.v8_1,e=n.u8_1>>>16|0,u=65535&n.u8_1,o=t.v8_1>>>16|0,f=65535&t.v8_1,s=t.u8_1>>>16|0,c=0,a=0,h=0,l=0;return c=(c=c+((a=(a=a+((h=(h=h+((l=l+(u+(65535&t.u8_1)|0)|0)>>>16|0)|0)+(e+s|0)|0)>>>16|0)|0)+(i+f|0)|0)>>>16|0)|0)+(r+o|0)|0,new ke((h&=65535)<<16|(l&=65535),(c&=65535)<<16|(a&=65535))}function Ie(n,t){return $e(),Pe(n,t.e9())}function Se(n,t){if($e(),Ae(n))return qe();if(Ae(t))return qe();if(Te(n,Ce()))return Me(t)?Ce():qe();if(Te(t,Ce()))return Me(n)?Ce():qe();if(Ne(n))return Ne(t)?Se(Fe(n),Fe(t)):Fe(Se(Fe(n),t));if(Ne(t))return Fe(Se(n,Fe(t)));if(De(n,xe())&&De(t,xe()))return Oe(ze(n)*ze(t));var r=n.v8_1>>>16|0,i=65535&n.v8_1,e=n.u8_1>>>16|0,u=65535&n.u8_1,o=t.v8_1>>>16|0,f=65535&t.v8_1,s=t.u8_1>>>16|0,c=65535&t.u8_1,a=0,h=0,l=0,_=0;return l=l+((_=_+Mn(u,c)|0)>>>16|0)|0,_&=65535,h=(h=h+((l=l+Mn(e,c)|0)>>>16|0)|0)+((l=(l&=65535)+Mn(u,s)|0)>>>16|0)|0,l&=65535,a=(a=(a=a+((h=h+Mn(i,c)|0)>>>16|0)|0)+((h=(h&=65535)+Mn(e,s)|0)>>>16|0)|0)+((h=(h&=65535)+Mn(u,f)|0)>>>16|0)|0,h&=65535,a=a+(((Mn(r,c)+Mn(i,s)|0)+Mn(e,f)|0)+Mn(u,o)|0)|0,new ke(l<<16|_,(a&=65535)<<16|h)}function ze(n){return $e(),4294967296*n.v8_1+function(n){return $e(),n.u8_1>=0?n.u8_1:4294967296+n.u8_1}(n)}function Te(n,t){return $e(),n.v8_1===t.v8_1&&n.u8_1===t.u8_1}function Ee(n,t){if($e(),t<2||36<t)throw mu("radix out of range: "+t);if(Ae(n))return"0";if(Ne(n)){if(Te(n,Ce())){var r=Le(t),i=n.d9(r),e=Ie(Se(i,r),n).g9();return Ee(i,t)+e.toString(t)}return"-"+Ee(Fe(n),t)}for(var u=2===t?31:t<=10?9:t<=21?7:t<=35?6:5,o=Oe(Math.pow(t,u)),f=n,s="";;){var c=f.d9(o),a=Ie(f,Se(c,o)).g9().toString(t);if(Ae(f=c))return a+s;for(;a.length<u;)a="0"+a;s=a+s}}function Le(n){return $e(),new ke(n,n<0?-1:0)}function Ne(n){return $e(),n.v8_1<0}function Ae(n){return $e(),0===n.v8_1&&0===n.u8_1}function Me(n){return $e(),!(1&~n.u8_1)}function Fe(n){return $e(),n.e9()}function De(n,t){return $e(),je(n,t)<0}function Oe(n){if($e(),(t=n)!=t)return qe();if(n<=-0x8000000000000000)return Ce();if(n+1>=0x8000000000000000)return $e(),z;if(n<0)return Fe(Oe(-n));var t,r=4294967296;return new ke(n%r|0,n/r|0)}function Re(n,t){return $e(),je(n,t)>0}function He(n,t){return $e(),je(n,t)>=0}function $e(){L||(L=!0,P=Le(0),I=Le(1),S=Le(-1),z=new ke(-1,2147483647),T=new ke(0,-2147483648),E=Le(16777216))}function Ge(n){return n instanceof ke?n.g9():function(n){return n>2147483647?2147483647:n<-2147483648?-2147483648:0|n}(n)}function Ue(n){var t;return t=function(n){return n<<16>>16}(Ge(n)),function(n){return 65535&n}(t)}function Ve(n,t){return new Zt(n,t)}function Qe(n,t,r,i){return Ze("class",n,t,r,i,null)}function Ze(n,t,r,i,e,u){return{kind:n,simpleName:t,associatedObjectKey:r,associatedObjects:i,suspendArity:e,$kClass$:A,iid:u}}function Ye(n){return Array.isArray(n)}function We(n,t,r,i,e,u,o,f){null!=i&&(n.prototype=Object.create(i.prototype),n.prototype.constructor=n);var s=r(t,u,o,null==f?[]:f);n.$metadata$=s,null!=e&&((null!=s.iid?n:n.prototype).$imask$=function(n){for(var t=1,r=[],i=0,e=n.length;i<e;){var u=n[i];i=i+1|0;var o=t,f=u.prototype.$imask$,s=null==f?u.$imask$:f;null!=s&&(r.push(s),o=s.length);var c=u.$metadata$.iid,a=null==c?null:(l=void 0,v=1<<(31&(h=c)),(l=new Int32Array(1+(h>>5)|0))[_=h>>5]=l[_]|v,l);null!=a&&(r.push(a),o=Math.max(o,a.length)),o>t&&(t=o)}var h,l,_,v;return function(n,t){for(var r=0,i=new Int32Array(n);r<n;){for(var e=r,u=0,o=0,f=t.length;o<f;){var s=t[o];o=o+1|0,e<s.length&&(u|=s[e])}i[e]=u,r=r+1|0}return i}(t,r)}(e))}function Ke(n,t){return function(n,t){var r=n.$imask$;return null!=r&&function(n,t){var r=t>>5;if(r>n.length)return!1;var i=1<<(31&t);return!!(n[r]&i)}(r,t)}(n,t.$metadata$.iid)}function Xe(n){return!!Ye(n)&&!n.$type$}function Je(n){var t;switch(typeof n){case"string":case"number":case"boolean":case"function":t=!0;break;default:t=n instanceof Object}return t}function nu(n){return"string"==typeof n||Ke(n,vr)}function tu(n,t,r,i){return Ze("interface",n,t,r,i,(null==N&&(N=0),N=ru()+1|0,ru()))}function ru(){if(null!=N)return N;!function(){throw Du("lateinit property iid has not been initialized")}()}function iu(n,t,r,i){return Ze("object",n,t,r,i,null)}function eu(n){var t=n.constructor,r=null==t?null:t.$metadata$,i=null==r?null:r.errorInfo;if(null!=i)return i;var e,u=0;if(uu(n,"message")&&(u|=1),uu(n,"cause")&&(u|=2),3!==u){var o=(e=n,Object.getPrototypeOf(e));o!=Error.prototype&&(u|=eu(o))}return null!=r&&(r.errorInfo=u),u}function uu(n,t){return n.hasOwnProperty(t)}function ou(n){return new Gr(n)}function fu(n,t,r){for(var i=new Int32Array(r),e=0,u=0,o=0,f=0,s=n.length;f<s;){var c=ne(n,f);f=f+1|0;var a=t[c];if(u|=(31&a)<<o,a<32){var h=e;e=h+1|0,i[h]=u,u=0,o=0}else o=o+5|0}return i}function su(n,t){for(var r=0,i=n.length-1|0,e=-1,u=0;r<=i;)if(t>(u=n[e=(r+i|0)/2|0]))r=e+1|0;else{if(t===u)return e;i=e-1|0}return e-(t<u?1:0)|0}function cu(){M=this;var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=new Int32Array(128),r=0,i=re(n)-1|0;if(r<=i)do{var e=r;r=r+1|0,t[ne(n,e)]=e}while(r<=i);var u=fu("hCgBpCQGYHZH5BRpBPPPPPPRMP5BPPlCPP6BkEPPPPcPXPzBvBrB3BOiDoBHwD+E3DauCnFmBmB2D6E1BlBTiBmBlBP5BhBiBrBvBjBqBnBPRtBiCmCtBlB0BmB5BiB7BmBgEmChBZgCoEoGVpBSfRhBPqKQ2BwBYoFgB4CJuTiEvBuCuDrF5DgEgFlJ1DgFmBQtBsBRGsB+BPiBlD1EIjDPRPPPQPPPPPGQSQS/DxENVNU+B9zCwBwBPPCkDPNnBPqDYY1R8B7FkFgTgwGgwUwmBgKwBuBScmEP/BPPPPPPrBP8B7F1B/ErBqC6B7BiBmBfQsBUwCw/KwqIwLwETPcPjQgJxFgBlBsD",t,222),o=new Int32Array(u.length),f=0,s=u.length-1|0;if(f<=s)do{var c=f;f=f+1|0,o[c]=0===c?u[c]:o[c-1|0]+u[c]|0}while(f<=s);this.h9_1=o,this.i9_1=fu("aaMBXHYH5BRpBPPPPPPRMP5BPPlCPPzBDOOPPcPXPzBvBjB3BOhDmBBpB7DoDYxB+EiBP1DoExBkBQhBekBPmBgBhBctBiBMWOOXhCsBpBkBUV3Ba4BkB0DlCgBXgBtD4FSdBfPhBPpKP0BvBXjEQ2CGsT8DhBtCqDpFvD1D3E0IrD2EkBJrBDOBsB+BPiBlB1EIjDPPPPPPPPPPPGPPMNLsBNPNPKCvBvBPPCkDPBmBPhDXXgD4B6FzEgDguG9vUtkB9JcuBSckEP/BPPPPPPBPf4FrBjEhBpC3B5BKaWPrBOwCk/KsCuLqDHPbPxPsFtEaaqDL",t,222),this.j9_1=fu("GFjgggUHGGFFZZZmzpz5qB6s6020B60ptltB6smt2sB60mz22B1+vv+8BZZ5s2850BW5q1ymtB506smzBF3q1q1qB1q1q1+Bgii4wDTm74g3KiggxqM60q1q1Bq1o1q1BF1qlrqrBZ2q5wprBGFZWWZGHFsjiooLowgmOowjkwCkgoiIk7ligGogiioBkwkiYkzj2oNoi+sbkwj04DghhkQ8wgiYkgoioDsgnkwC4gikQ//v+85BkwvoIsgoyI4yguI0whiwEowri4CoghsJowgqYowgm4DkwgsY/nwnzPowhmYkg6wI8yggZswikwHgxgmIoxgqYkwgk4DkxgmIkgoioBsgssoBgzgyI8g9gL8g9kI0wgwJoxgkoC0wgioFkw/wI0w53iF4gioYowjmgBHGq1qkgwBF1q1q8qBHwghuIwghyKk0goQkwgoQk3goQHGFHkyg0pBgxj6IoinkxDswno7Ikwhz9Bo0gioB8z48Rwli0xN0mpjoX8w78pDwltoqKHFGGwwgsIHFH3q1q16BFHWFZ1q10q1B2qlwq1B1q10q1B2q1yq1B6q1gq1Biq1qhxBir1qp1Bqt1q1qB1g1q1+B//3q16B///q1qBH/qlqq9Bholqq9B1i00a1q10qD1op1HkwmigEigiy6Cptogq1Bixo1kDq7/j00B2qgoBWGFm1lz50B6s5q1+BGWhggzhwBFFhgk4//Bo2jigE8wguI8wguI8wgugUog1qoB4qjmIwwi2KgkYHHH4lBgiFWkgIWoghssMmz5smrBZ3q1y50B5sm7gzBtz1smzB5smz50BqzqtmzB5sgzqzBF2/9//5BowgoIwmnkzPkwgk4C8ys65BkgoqI0wgy6FghquZo2giY0ghiIsgh24B4ghsQ8QF/v1q1OFs0O8iCHHF1qggz/B8wg6Iznv+//B08QgohsjK0QGFk7hsQ4gB",t,222)}function au(){return null==M&&new cu,M}function hu(){F=this,this.k9_1=new Int32Array([170,186,688,704,736,837,890,7468,7544,7579,8305,8319,8336,8560,9424,11388,42652,42864,43e3,43868]),this.l9_1=new Int32Array([1,1,9,2,5,1,1,63,1,37,1,1,13,16,26,2,2,1,2,4])}function lu(){return null==F&&new hu,F}function _u(n){var t=function(n,t){return yu(n,t),vu.call(t),t}(n,de(ve(vu)));return _e(t,_u),t}function vu(){_e(this,vu)}function du(n){var t=function(n,t){return yu(n,t),gu.call(t),t}(n,de(ve(gu)));return _e(t,du),t}function gu(){_e(this,gu)}function wu(n){var t=function(n,t){return yu(n,t),bu.call(t),t}(n,de(ve(bu)));return _e(t,wu),t}function bu(){_e(this,bu)}function pu(n,t){return ge(t,n),ku.call(t),t}function mu(n){var t=pu(n,de(ve(ku)));return _e(t,mu),t}function ku(){_e(this,ku)}function qu(n){return function(n){ge(n),ku.call(n)}(n),Bu.call(n),n}function yu(n,t){return pu(n,t),Bu.call(t),t}function Bu(){_e(this,Bu)}function Cu(){var n,t=(qu(n=de(ve(ju))),ju.call(n),n);return _e(t,Cu),t}function xu(n){var t=function(n,t){return yu(n,t),ju.call(t),t}(n,de(ve(ju)));return _e(t,xu),t}function ju(){_e(this,ju)}function Pu(n){var t=function(n,t){return yu(n,t),Iu.call(t),t}(n,de(ve(Iu)));return _e(t,Pu),t}function Iu(){_e(this,Iu)}function Su(){var n,t=(qu(n=de(ve(Tu))),Tu.call(n),n);return _e(t,Su),t}function zu(n){var t=function(n,t){return yu(n,t),Tu.call(t),t}(n,de(ve(Tu)));return _e(t,zu),t}function Tu(){_e(this,Tu)}function Eu(){var n,t=(qu(n=de(ve(Lu))),Lu.call(n),n);return _e(t,Eu),t}function Lu(){_e(this,Lu)}function Nu(){var n,t=(qu(n=de(ve(Au))),Au.call(n),n);return _e(t,Nu),t}function Au(){_e(this,Au)}function Mu(){var n,t=(qu(n=de(ve(Fu))),Fu.call(n),n);return _e(t,Mu),t}function Fu(){_e(this,Fu)}function Du(n){var t=function(n,t){return yu(n,t),Ou.call(t),t}(n,de(ve(Ou)));return _e(t,Du),t}function Ou(){_e(this,Ou)}function Ru(n,t){var r,i=n.className;return(r="(^|.*\\s+)"+t+"($|\\s+.*)",function(n,t){return Si.call(t,n,Ht()),t}(r,de(ve(Si)))).a8(i)}function Hu(n,t){this.o9_1=n,this.p9_1=t}function $u(n){this.q9_1=n}function Gu(n,t,r){var i,e=Gf(),u=ro(),o=$f().ga(t),f=ro();if(0===re(r))i=Of();else{var s=n.ia_1,c=null==s?null:new $u(s).v9(r,"Copy reference to the clipboard");i=null==c?Of():c}return e.ja([u,o,f,i])}function Uu(n){n=n===A?null:n,this.ia_1=n}function Vu(n,t,r){to.call(this),this.ma_1=n,this.na_1=t,this.oa_1=r}function Qu(n,t){this.ra_1=n,this.sa_1=t}function Zu(n,t){to.call(this),this.va_1=n,this.wa_1=t}function Yu(n,t){to.call(this),this.xa_1=n,this.ya_1=t}function Wu(n){to.call(this),this.za_1=n}function Ku(n){to.call(this),this.ab_1=n}function Xu(n){to.call(this),this.bb_1=n}function Ju(n,t){to.call(this),this.cb_1=n,this.db_1=t}function no(n){to.call(this),this.eb_1=n}function to(){}function ro(){return so(),D}function io(){return so(),O}function eo(){return so(),R}function uo(){return so(),H}function oo(n){return so(),Gf().fb(us(fo),n)}function fo(n){return so(),n.gb(["invisible-text","text-for-copy"]),br()}function so(){$||($=!0,D=oo("`"),O=oo(" "),R=oo("("),H=oo(")"))}function co(n,t){to.call(this),this.hb_1=n,this.ib_1=t}function ao(n){to.call(this),this.jb_1=n}function ho(n,t){to.call(this),this.kb_1=n,this.lb_1=t}function lo(n){to.call(this),this.mb_1=n}function _o(n){to.call(this),this.nb_1=n}function vo(n){to.call(this),this.ob_1=n}function go(n,t,r){to.call(this),this.pb_1=n,this.qb_1=t,this.rb_1=r}function wo(n){to.call(this),this.sb_1=n}function bo(n){to.call(this),this.tb_1=n}function po(n){return n.xb_1.vb_1.k()}function mo(){if(Z)return br();Z=!0,G=new jo("Inputs",0,"Build configuration inputs"),U=new jo("ByMessage",1,"Problems grouped by message"),V=new jo("ByLocation",2,"Problems grouped by location"),Q=new jo("IncompatibleTasks",3,"Incompatible tasks")}function ko(n){Fc.call(this),this.yb_1=n}function qo(n){Fc.call(this),this.ac_1=n}function yo(n){Fc.call(this),this.bc_1=n}function Bo(n){Fc.call(this),this.cc_1=n}function Co(n){Po.call(this),this.dc_1=n}function xo(n,t,r,i,e,u,o,f){this.ec_1=n,this.fc_1=t,this.gc_1=r,this.hc_1=i,this.ic_1=e,this.jc_1=u,this.kc_1=o,this.lc_1=f}function jo(n,t,r){Ui.call(this,n,t),this.qc_1=r}function Po(){Oc.call(this)}function Io(n,t){var r=Hf(),i=us(Oo),e=Hf().y9(us(Ro),[]),u=function(n,t){var r,i=Hf(),e=us(Vo),u=Gf().ga("Learn more about the "),o=Yf();return i.y9(e,[u,o.fb(us((r=t,function(n){return n.bd(r.tc_1),br()})),t.sc_1),Gf().ga(".")])}(0,t.gc_1),o=Hf().y9(us(Ho),[zo(0,t)]),f=Hf();return r.y9(i,[e,u,o,f.y9(us($o),[No(0,Qo(),t.lc_1,po(t.jc_1)),No(0,Zo(),t.lc_1,po(t.hc_1)),No(0,Yo(),t.lc_1,po(t.ic_1)),No(0,Wo(),t.lc_1,po(t.kc_1))])])}function So(n,t){var r,i,e=Hf(),u=us(Go);switch(t.lc_1.q8_1){case 0:r=Mo(0,t.jc_1,((i=function(n){return new yo(n)}).callableName="<init>",i));break;case 3:r=Mo(0,t.kc_1,function(){var n=function(n){return new Bo(n)};return n.callableName="<init>",n}());break;case 1:r=Mo(0,t.hc_1,function(){var n=function(n){return new qo(n)};return n.callableName="<init>",n}());break;case 2:r=Mo(0,t.ic_1,function(){var n=function(n){return new ko(n)};return n.callableName="<init>",n}());break;default:be()}return e.y9(u,[r])}function zo(n,t){return Hf().ja([Lo(0,t),To(0,t)])}function To(n,t){for(var r=Hf(),i=t.fc_1,e=Or(),u=0,o=i.f();o.g();){var f=o.h(),s=u;u=s+1|0,Et(e,0===yr(s)?qr(Eo(Xo(),f)):Bt([Wf().ja([]),Eo(Xo(),f)]))}return r.ha(e)}function Eo(n,t){return Uf().ja([Uc(t)])}function Lo(n,t){return Rf().ja([$c().ka(t.ec_1)])}function No(n,t,r,i){var e,u,o;return Hf().y9(us((e=i,u=t,o=r,function(n){return n.t9("group-selector"),0===e?(n.t9("group-selector--disabled"),br()):u.equals(o)?(n.t9("group-selector--active"),br()):(n.u9(function(n){return function(t){return new Co(n)}}(u)),br()),br()})),[Gf().rc(t.qc_1,[Ao(0,i)])])}function Ao(n,t){return Gf().y9(us(Uo),[io(),eo(),Gf().ga(""+t),uo()])}function Mo(n,t,r){return function(n,t,r){var i,e=Hf(),u=Vf();return e.ja([u.ha(Ps(t,(i=r,function(n){var t,r=n.cd().ub_1;return r instanceof Zu?Kc(i,(Xo(),(t=function(n){return Fo(0,n)}).callableName="viewNode",t),n,r.va_1,r.wa_1,Rc()):r instanceof Yu?Kc(i,function(){var n=function(n){return Fo(0,n)};return n.callableName="viewNode",n}(Xo()),n,r.xa_1,r.ya_1,Hc()):r instanceof co?Kc(i,function(){var n=function(n){return Fo(0,n)};return n.callableName="viewNode",n}(Xo()),n,r.hb_1,r.ib_1,A,Ao(Xo(),n.cd().vb_1.k())):r instanceof Vu?Wc(i,n,r):Kc(i,function(){var n=function(n){return Fo(0,n)};return n.callableName="viewNode",n}(Xo()),n,r)})))])}(0,t.xb_1.uc().vc(),r)}function Fo(n,t){var r;return t instanceof ao?Vc((r=t,function(n){return n.ed("project "),n.fd(r.jb_1),br()})):t instanceof go?Vc(function(n){return function(t){return t.ed(n.pb_1+" "),t.fd(n.qb_1),t.ed(" of "),t.fd(n.rb_1),br()}}(t)):t instanceof vo?Vc(function(n){return function(t){return t.ed("system property "),t.fd(n.ob_1),br()}}(t)):t instanceof ho?Vc(function(n){return function(t){return t.ed("task "),t.fd(n.kb_1),t.ed(" of type "),t.fd(n.lb_1),br()}}(t)):t instanceof _o?Vc(function(n){return function(t){return t.ed("bean of type "),t.fd(n.nb_1),br()}}(t)):t instanceof wo?Vc(function(n){return function(t){return t.ed(n.sb_1),br()}}(t)):t instanceof bo?Vc(function(n){return function(t){return t.ed("class "),t.fd(n.tb_1),br()}}(t)):t instanceof no?Vc(function(n){return function(t){return t.ed(n.eb_1),br()}}(t)):t instanceof Wu?Uc(t.za_1):t instanceof Ju?Jo(t):Gf().ga(ce(t))}function Do(n){return n.t9("report-wrapper"),br()}function Oo(n){return n.t9("header"),br()}function Ro(n){return n.t9("gradle-logo"),br()}function Ho(n){return n.t9("title"),br()}function $o(n){return n.t9("groups"),br()}function Go(n){return n.t9("content"),br()}function Uo(n){return n.t9("group-selector__count"),br()}function Vo(n){return n.t9("learn-more"),br()}function Qo(){return mo(),G}function Zo(){return mo(),U}function Yo(){return mo(),V}function Wo(){return mo(),Q}function Ko(){Y=this}function Xo(){return null==Y&&new Ko,Y}function Jo(n){var t;return Yf().fb(us((t=n,function(n){return n.t9("documentation-button"),n.bd(t.cb_1),br()})),n.db_1)}function nf(n,t,r){this.kd_1=n,this.ld_1=t,this.md_1=r}function tf(n,t,r){this.nd_1=n,this.od_1=t,this.pd_1=r}function rf(n,t){for(var r=mf(n),i=t.trace,e=Rr(i.length),u=0,o=i.length;u<o;){var f,s=i[u];u=u+1|0,f=of(s),e.d(f)}return new nf(t,r,e)}function ef(n,t){var r,i=null==(r=t.kd_1.error)?null:ff(r);null==i||n.d(i)}function uf(n){return function(n,t,r){var i=null==n.error?null:new Zu(t,r);return null==i?new Yu(t,r):i}(n.kd_1,new Wu(n.ld_1),af(n.kd_1))}function of(n){var t;switch(n.kind){case"Project":t=new ao(n.path);break;case"Task":t=new ho(n.path,n.type);break;case"TaskPath":t=new lo(n.path);break;case"Bean":t=new _o(n.type);break;case"Field":t=new go("field",n.name,n.declaringType);break;case"InputProperty":t=new go("input property",n.name,n.task);break;case"OutputProperty":t=new go("output property",n.name,n.task);break;case"SystemProperty":t=new vo(n.name);break;case"PropertyUsage":t=new go("property",n.name,n.from);break;case"BuildLogic":t=new wo(n.location);break;case"BuildLogicClass":t=new bo(n.type);break;default:t=new no("Gradle runtime")}return t}function ff(n){var t=n.parts;if(null==t){var r=n.summary;return null==r?null:new Wu(mf(r))}for(var i=n.summary,e=null==i?null:mf(i),u=Or(),o=Qi(t);o.g();){var f=cf(o.h());null==f||u.d(f)}for(var s=$n(u,"\n"),c=Or(),a=Qi(t);a.g();){var h=sf(a.h());null==h||c.d(h)}return new Vu(e,s,c)}function sf(n){var t=cf(n);if(null==t)return null;var r,i,e=ot(new Rt(function(n,t,r,i){var e;return ut(or(n,["\r\n","\n","\r"],A,r=r!==A&&r,i=i===A?0:i),(e=n,function(n){return ur(e,n)}))}(t),!0,bf));return new Qu(e,(r=!(null==n.internalText),i=e.k(),r&&i>1?Cs():null))}function cf(n){var t=n.text;return null==t?n.internalText:t}function af(n){var t=n.documentationLink;return null==t?null:new Ju(t,"")}function hf(n,t){return new ds(lf(n,Ef().sd(t),Cs()))}function lf(n,t,r){return new js(n,function(n,t){var r,i=ut(Vn(n.o()),Nf);return ot(ut(new st(i,new _f(pf)),(r=t,function(n){return lf(n.v3(),n.w3().wd_1,r)})))}(t,1===Lf(t)?xs():Cs()),0===Lf(t)?Cs():r)}function _f(n){this.td_1=n}function vf(n){var t=Or(),r=n.ld_1,i=Un(r.ca_1).fa_1,e=ce(er(nu(i)?i:pe())),u=r.vd(function(n,t){var r;if(!(t>=0))throw _u(ce("Requested element count "+t+" is less than zero."));if(0===t)return Qn(n);if(Ke(n,Di)){var i=n.k()-t|0;if(i<=0)return Ct();if(1===i)return qr(function(n){if(Ke(n,Fi))return Jn(n);var t=n.f();if(!t.g())throw xu("Collection is empty.");for(var r=t.h();t.g();)r=t.h();return r}(n));if(r=Rr(),Ke(n,Fi)){if(Ke(n,bi)){var e=t,u=n.k();if(e<u)do{var o=e;e=e+1|0,r.d(n.j(o))}while(e<u)}else for(var f=n.l(t);f.g();){var s=f.h();r.d(s)}return r}}else r=Or();for(var c=0,a=n.f();a.g();){var h=a.h();c>=t?r.d(h):c=c+1|0}return xt(r)}(r.ca_1,1));return t.d(new co(new no(e),af(n.kd_1))),t.d(new Wu(u)),t.m(n.md_1),t.j5()}function df(n){var t=Or(),r=n.ld_1,i=r.vd(r.ca_1);return t.d(new Yu(new Wu(i),af(n.kd_1))),t.j5()}function gf(n){var t=Or();return t.d(uf(n)),t.m(n.md_1),ef(t,n),t.j5()}function wf(n){var t=Or();return t.m(new At(n.md_1)),t.d(uf(n)),ef(t,n),t.j5()}function bf(n){return re(n)>0}function pf(n,t){return function(n,t){return n===t?0:null==n?-1:null==t?1:ue(null!=n&&("string"==(i=typeof(r=n))||"boolean"===i||function(n){return"number"==typeof n||n instanceof ke}(r)||Ke(r,dr))?n:pe(),t);var r,i}(Vi(n.v3()),Vi(t.v3()))}function mf(n){var t;return Sf().qd((t=n,function(n){for(var r=t,i=0,e=r.length;i<e;){var u=r[i];i=i+1|0;var o=u.text;null==o||n.ed(o);var f=u.name;null==f||(n.fd(f),br())}return br()}))}function kf(n,t){return(0!==(r=n)?r.toString():"No")+" "+qf(t,n)+" "+yf(n)+" found";var r}function qf(n,t){return t<2?n:n+"s"}function yf(n){return n<=1?"was":"were"}function Bf(n,t){this.sc_1=n,this.tc_1=t}function Cf(n){jf.call(this),this.fa_1=n}function xf(n,t){jf.call(this),this.da_1=n,this.ea_1=t}function jf(){}function Pf(){this.dd_1=Or()}function If(){W=this}function Sf(){return null==W&&new If,W}function zf(n){Sf(),this.ca_1=n}function Tf(){K=this}function Ef(){return null==K&&new Tf,K}function Lf(n){return n.k()}function Nf(n){var t=n.j1(),r=n.i1();return _r(t,new Af(Ke(r,Ri)?r:pe()))}function Af(n){Ef(),this.wd_1=n}function Mf(n,t,r){var i;Df(t,n,r),i="Component mounted at #"+n.id+".",yi(),(yi(),g).j7(i)}function Ff(n){var t=document.getElementById(n);if(null==t)throw wu("'"+n+"' element missing");return t}function Df(n,t,r){var i,e,u;i=n.z9(r),e=t,u=function(n,t,r){return function(i){return Df(n,r,n.ba(i,t)),br()}}(n,r,t),_s(),e.innerHTML="",hs(e,i,u)}function Of(){return _s(),X}function Rf(){return _s(),J}function Hf(){return _s(),nn}function $f(){return _s(),tn}function Gf(){return _s(),rn}function Uf(){return _s(),en}function Vf(){return _s(),un}function Qf(){return _s(),on}function Zf(){return _s(),fn}function Yf(){return _s(),sn}function Wf(){return _s(),cn}function Kf(n){this.x9_1=n}function Xf(){an=this}function Jf(){return null==an&&new Xf,an}function ns(){hn=this,es.call(this)}function ts(){return null==hn&&new ns,hn}function rs(n,t,r,i){t=t===A?Ct():t,r=r===A?null:r,i=i===A?Ct():i,es.call(this),this.be_1=n,this.ce_1=t,this.de_1=r,this.ee_1=i}function is(){}function es(){Jf()}function us(n){_s();var t,r=Or();return n(new os((t=r,function(n){return t.d(n),br()}))),r}function os(n){this.r9_1=n}function fs(n,t){as.call(this),this.fe_1=n,this.ge_1=t}function ss(n){as.call(this),this.he_1=n}function cs(n,t){as.call(this),this.ie_1=n,this.je_1=t}function as(){}function hs(n,t,r){if(_s(),t instanceof rs)!function(n,t,r){var i=function(n,t,r){var i=n.createElement(t);return r(i),i}(we(n.ownerDocument),t,r);n.appendChild(i)}(n,t.be_1,(e=t,u=r,function(n){for(var t=e.ce_1.f();t.g();)ls(n,t.h(),u);var r=e.de_1;null==r||function(n,t){n.appendChild(we(n.ownerDocument).createTextNode(t))}(n,r);for(var i=e.ee_1.f();i.g();)hs(n,i.h(),u);return br()}));else if(t instanceof is){var i=t instanceof is?t:pe();hs(n,i.ke_1,function(n,t){return function(r){return n(t.le_1(r)),br()}}(r,i))}else if(le(t,ts()))return br();var e,u}function ls(n,t,r){var i,e;_s(),t instanceof cs?n.setAttribute(t.ie_1,t.je_1):t instanceof ss?function(n,t){for(var r=Or(),i=0,e=t.length;i<e;){var u=t[i];i=i+1|0,Ru(n,u)||r.d(u)}var o=r;if(!o.i()){var f=n.className,s=ce(er(nu(f)?f:pe())),c=Bi();c.p7(s),0!==re(s)&&c.p7(" "),Gn(o,c," "),n.className=c.toString()}}(n,[t.he_1]):t instanceof fs&&n.addEventListener(t.fe_1,(i=r,e=t,function(n){return n.stopPropagation(),i(e.ge_1(n)),br()}))}function _s(){ln||(ln=!0,X=ts(),new Kf("hr"),J=new Kf("h1"),new Kf("h2"),nn=new Kf("div"),new Kf("pre"),tn=new Kf("code"),rn=new Kf("span"),en=new Kf("small"),un=new Kf("ol"),on=new Kf("ul"),fn=new Kf("li"),sn=new Kf("a"),cn=new Kf("br"),new Kf("p"))}function vs(n){gs.call(this),this.ne_1=n}function ds(n){this.xb_1=n}function gs(){}function ws(n){return n.me(A,A,n.wb_1.ad())}function bs(){_n=this}function ps(){return null==_n&&new bs,_n}function ms(){if(gn)return br();gn=!0,vn=new ys("Collapsed",0),dn=new ys("Expanded",1)}function ks(n){Bs.call(this),this.ve_1=n}function qs(n,t,r){Bs.call(this),this.se_1=n,this.te_1=t,this.ue_1=r}function ys(n,t){Ui.call(this,n,t)}function Bs(){}function Cs(){return ms(),vn}function xs(){return ms(),dn}function js(n,t,r){t=t===A?Ct():t,r=r===A?Cs():r,this.ub_1=n,this.vb_1=t,this.wb_1=r}function Ps(n,t){return ot(ut(n,(r=t,function(n){return function(n,t){var r,i=n.cd(),e=Zf(),u=t(n),o=i.vb_1;r=null==(i.wb_1.equals(xs())&&!o.i()?o:null)?null:function(n,t){return Qf().ha(function(n,t){return Ps(n.vc(),t)}(n,t))}(n,t);var f=r;return e.ja([u,null==f?Of():f])}(n,r)})));var r}function Is(){if(xn)return br();xn=!0,kn=new Ss("ByMessage",0,"Messages"),qn=new Ss("ByGroup",1,"Group"),yn=new Ss("ByFileLocation",2,"File Locations"),Bn=new Ss("ByPluginLocation",3,"Plugin Locations"),Cn=new Ss("ByTaskLocation",4,"Task Locations")}function Ss(n,t,r){Ui.call(this,n,t),this.cf_1=r}function zs(n,t){this.df_1=n,this.ef_1=t}function Ts(n,t){this.ff_1=n,this.gf_1=t}function Es(n,t,r){ec();for(var i=Or(),e=li(),u=0,o=n.length;u<o;){var f=n[u];u=u+1|0;var s=f.locations;null==s||0===s.length?i.d(Os(f)):r(f,e)||i.d(Os(f))}var c=function(n,t,r){ec();for(var i=n.w1(),e=Rr(Tt(i,10)),u=i.f();u.g();){var o;o=u.h().t3_1,e.d(o)}var f=Zn(e);return t.i()||f.d(new js(new oc(Sf().rd("no location"),!0),t)),r>0&&f.d(Ns(r)),f}(e,i,t);return new ds(new js(new uc("text"),c))}function Ls(n){return ec(),t=n,function(n,r){var i,e=n.locations;if(null==e)i=null;else{for(var u=Or(),o=Qi(e);o.g();){var f=o.h();null!=t(f)&&u.d(f)}i=u}var s,c=i;if(null==c||c.i())s=!1;else{for(var a=c.f();a.g();){var h=a.h();As(r,we(t(h)),n,h)}s=!0}return s};var t}function Ns(n){return ec(),new js(new Wu(Sf().rd(n+" more problem"+(n>1?"s have":" has")+" been skipped")))}function As(n,t,r,i){ec();var e,u,o=n.v1(t);if(null==o){var f=Or(),s=_r(new js(new oc(Sf().qd((u=t,function(n){return n.fd(u),br()}))),f,xs()),f);n.h5(t,s),e=s}else e=o;e.u3_1.d(Os(r,i))}function Ms(n,t,r,i){var e,u;if(t=t===A?Or():t,r=r===A?li():r,i===A){var o=(ec(),mn);u=o+1|0,ec(),mn=u,e=o}else e=i;i=e,this.hf_1=n,this.if_1=t,this.jf_1=r,this.kf_1=i}function Fs(n,t){if(ec(),t.i())return null;for(var r,i=n,e=null,u=t.f();u.g();){var o=u.h();r=e;var f,s=i,c=o.ef_1+" ("+o.df_1+")",a=s.v1(c);if(null==a){var h=Or(),l=new Ms(new js(new oc(Sf().qd(Ys(o))),h,xs()),h);s.h5(c,l),f=l}else f=a;e=f,null==r||we(r).if_1.u(we(e).hf_1)||we(r).if_1.d(we(e).hf_1),i=we(e).jf_1}return e}function Ds(n,t){if(ec(),n.k()===t.length){var r;n:{var i=function(n,t){var r=t.length,i=Tt(n,10),e=Rr(Math.min(i,r)),u=0,o=n.f();t:for(;o.g();){var f,s=o.h();if(u>=r)break t;var c=u;u=c+1|0,f=_r(s,t[c]),e.d(f)}return e}(n,t);if(Ke(i,Di)&&i.i())r=!0;else{for(var e=i.f();e.g();){var u=e.h();if(u.t3_1.df_1!==u.u3_1.name||u.t3_1.ef_1!==u.u3_1.displayName){r=!1;break n}}r=!0}}return r}return!1}function Os(n,t,r){t=t===A?null:t,r=r!==A&&r,ec();var i=function(n,t,r){t=t===A?null:t,r=r!==A&&r,ec();var i=$s(function(n,t){return ec(),n&&null!=t.contextualLabel?we(t.contextualLabel):Rs(t)}(r,n),t).j5();return Hs(n,new Wu(i))}(n,t,r),e=function(n,t,r){r=r!==A&&r,ec();var i,e=n.problemDetails;if(null==e)i=null;else{var u,o=e[0].text,f=null==o?null:function(n,t,r,i){if(r=r!==A&&r,i=i===A?0:i,1===t.length){var e=t[0];if(0!==re(e))return function(n,t,r,i){sr(i);var e=0,u=rr(n,t,e,r);if(-1===u||1===i)return qr(ce(n));var o,f=i>0,s=Rr(f&&it(i,10));n:do{var c;if(c=ce(ie(n,e,u)),s.d(c),e=u+t.length|0,f&&s.k()===(i-1|0))break n;u=rr(n,t,e,r)}while(-1!==u);return o=ce(ie(n,e,re(n))),s.d(o),s}(n,e,r,i)}for(var u=function(n){return new ft(n)}(or(n,t,A,r,i)),o=Rr(Tt(u,10)),f=u.f();f.g();){var s;s=ur(n,f.h()),o.d(s)}return o}(o,["\n"]);if(null==f)u=null;else{for(var s=Rr(Tt(f,10)),c=f.f();c.g();){var a,h=c.h();a=Us(n)?Sf().qd(Ks(h)):Sf().rd(h),s.d(a)}u=s}var l,_=u;if(null==_)l=null;else{for(var v=Rr(Tt(_,10)),d=_.f();d.g();){var g;g=new js(new Wu(d.h())),v.d(g)}l=v}var w=null==l?null:Zn(l);i=null==w?Or():w}var b=i,p=null==b?Or():b;r||null==n.contextualLabel||p.d(new js(new Wu(Sf().rd(we(n.contextualLabel)))));var m=function(n){ec();var t=n.solutions;if(null==t||0===t.length)return null;for(var r=new Xu(Sf().rd("Solutions")),i=we(n.solutions),e=Rr(i.length),u=0,o=i.length;u<o;){var f,s=i[u];u=u+1|0,f=new js(new Ku(mf(s))),e.d(f)}return new js(r,e)}(n);null==m||p.d(m);var k,q=n.error,y=null==q?null:ff(q);if(null==y||p.d(new js(y)),t){var B=n.locations;k=!(null==B||0===B.length)}else k=!1;return k&&p.d(function(n){ec();var t,r=n.locations;if(null==r)t=null;else{for(var i=Rr(r.length),e=Qi(r);e.g();){var u,o=e.h();u=new js(new Wu(Sf().qd(Xs(o)))),i.d(u)}t=i}var f=t;return new js(new no("Locations"),null==f?Ct():f)}(n)),p}(n,null==t,r);return new js(i,e)}function Rs(n){return ec(),function(n){if(0===n.length)throw xu("Array is empty.");return n[Rn(n)]}(n.problemId).displayName}function Hs(n,t){var r;switch(ec(),n.severity){case"WARNING":var i=n.documentationLink;r=new Yu(t,null==i?null:new Ju(i,""));break;case"ERROR":var e=n.documentationLink;r=new Zu(t,null==e?null:new Ju(e,""));break;case"ADVICE":var u=n.documentationLink;r=new fc(t,null==u?null:new Ju(u,""));break;default:console.error("no severity "+n.severity),r=t}return r}function $s(n,t){t=t===A?null:t,ec();var r,i=new Pf;if(i.ed(n),null==t);else if(null!=t.line){var e=Gs(t);i.xd(e+(r=t,ec(),null==r.line||null==r.length?"":"-"+r.length),""+t.path+e),br()}else null!=t.taskPath?(i.fd(we(t.taskPath)),br()):null!=t.pluginId&&(i.fd(we(t.pluginId)),br());return i}function Gs(n){var t;if(ec(),null==n.line)t=null;else{var r,i=":"+n.line,e=n.column;t=i+(null==(r=null==e?null:":"+e)?"":r)}return null==t?"":t}function Us(n){var t;ec();var r,i=n.problemId;n:{for(var e=0,u=i.length;e<u;){var o=i[e];if(e=e+1|0,"compilation"===o.name){r=o;break n}}r=null}if(null!=r){var f,s=n.problemId;n:{for(var c=0,a=s.length;c<a;){var h=s[c];if(c=c+1|0,"java"===h.name){f=h;break n}}f=null}t=!(null==f)}else t=!1;return t}function Vs(n){return ec(),n.path}function Qs(n){return ec(),n.pluginId}function Zs(n){return ec(),n.taskPath}function Ys(n){return function(t){return t.ed(n.ef_1),t.fd(n.df_1),br()}}function Ws(n){return ec(),n.name}function Ks(n){return function(t){return t.xd(function(n,t,r,i){i=i!==A&&i;var e=new RegExp(Ii().t7(" "),i?"gui":"gu"),u=Ii().u7(" ");return n.replace(e,u)}(n),""),br()}}function Xs(n){return function(t){var r;return t.ed("- "),t.fd((r=n,ec(),null!=r.path?""+r.path+Gs(r):null!=r.taskPath?we(r.taskPath):"<undefined>")),br()}}function Js(){return Is(),kn}function nc(){return Is(),qn}function tc(){return Is(),yn}function rc(){return Is(),Bn}function ic(){return Is(),Cn}function ec(){jn||(jn=!0,wn=Ls(Vs),bn=Ls(Qs),pn=Ls(Zs),mn=0)}function uc(n){sc.call(this),this.lf_1=n}function oc(n,t){t=t!==A&&t,sc.call(this),this.mf_1=n,this.nf_1=t}function fc(n,t){t=t===A?null:t,to.call(this),this.of_1=n,this.pf_1=t}function sc(){to.call(this)}function cc(n){Fc.call(this),this.qf_1=n}function ac(n){Fc.call(this),this.rf_1=n}function hc(n){Fc.call(this),this.sf_1=n}function lc(n){Fc.call(this),this.tf_1=n}function _c(n){Fc.call(this),this.uf_1=n}function vc(n){gc.call(this),this.vf_1=n}function dc(n,t,r,i,e,u,o,f,s,c){this.wf_1=n,this.xf_1=t,this.yf_1=r,this.zf_1=i,this.ag_1=e,this.bg_1=u,this.cg_1=o,this.dg_1=f,this.eg_1=s,this.fg_1=c}function gc(){Oc.call(this)}function wc(n,t){var r=Or();po(t.zf_1)>0&&r.d(yc(0,Js(),t.fg_1,t.eg_1)),po(t.ag_1)>0&&r.d(yc(0,nc(),t.fg_1,t.eg_1)),po(t.bg_1)>0&&r.d(yc(0,tc(),t.fg_1,t.eg_1)),po(t.cg_1)>0&&r.d(yc(0,rc(),t.fg_1,t.eg_1)),po(t.dg_1)>0&&r.d(yc(0,ic(),t.fg_1,t.eg_1));var i=Hf(),e=us(jc),u=Hf().y9(us(Pc),[]),o=function(n,t){var r,i=Hf(),e=us(Ec),u=Gf().ga("Learn more about "),o=Yf();return i.y9(e,[u,o.fb(us((r=t,function(n){return n.bd(r.tc_1),br()})),t.sc_1),Gf().ga(".")])}(0,t.yf_1),f=Hf().y9(us(Ic),[pc(0,t)]),s=Hf();return i.y9(e,[u,o,f,s.zd(us(Sc),r)])}function bc(n,t){var r,i,e=Hf(),u=us(zc);switch(t.fg_1.q8_1){case 0:r=Bc(0,t.zf_1,((i=function(n){return new cc(n)}).callableName="<init>",i));break;case 1:r=Bc(0,t.ag_1,function(){var n=function(n){return new ac(n)};return n.callableName="<init>",n}());break;case 2:r=Bc(0,t.bg_1,function(){var n=function(n){return new hc(n)};return n.callableName="<init>",n}());break;case 3:r=Bc(0,t.cg_1,function(){var n=function(n){return new lc(n)};return n.callableName="<init>",n}());break;case 4:r=Bc(0,t.dg_1,function(){var n=function(n){return new _c(n)};return n.callableName="<init>",n}());break;default:be()}return e.y9(u,[r])}function pc(n,t){return Hf().ja([qc(0,t),mc(0,t)])}function mc(n,t){for(var r=Hf(),i=t.xf_1,e=Or(),u=0,o=i.f();o.g();){var f=o.h(),s=u;u=s+1|0,Et(e,0===yr(s)?qr(kc(Nc(),f)):Bt([Wf().ja([]),kc(Nc(),f)]))}return r.ha(e)}function kc(n,t){return Uf().ja([Uc(t)])}function qc(n,t){return Rf().ja([$c().ka(t.wf_1)])}function yc(n,t,r,i){var e,u,o,f;return Hf().y9(us((e=i,u=t,o=r,function(n){return n.t9("group-selector"),0===e?(n.t9("group-selector--disabled"),br()):u.equals(o)?(n.t9("group-selector--active"),br()):(n.u9(function(n){return function(t){return new vc(n)}}(u)),br()),br()})),[Gf().rc(t.cf_1,[(f=i,Gf().y9(us(Tc),[io(),eo(),Gf().ga(""+f),uo()]))])])}function Bc(n,t,r){return function(n,t,r){var i,e=Hf(),u=Vf();return e.ja([u.ha(Ps(t,(i=r,function(n){return function(n,t,r,i){var e,u;return t instanceof uc?Uc(Sf().rd(t.lf_1)):t instanceof oc?Hf().y9(us((u=t,function(n){return u.nf_1&&(n.t9("uncategorized"),br()),br()})),[Hf().ja([Qc(r,i),Uc(t.mf_1)])]):t instanceof Vu?Wc(i,r,t):t instanceof Wu?Uc(t.za_1):t instanceof Ku?Hf().ja([(sa(),Tn),Uc(t.ab_1)]):t instanceof Xu?Hf().ja([Qc(r,i),Uc(t.bb_1)]):t instanceof Zu?Kc(i,((e=function(n){return Cc(0,n)}).callableName="viewIt",e),r,t.va_1,t.wa_1,Rc()):t instanceof fc?Kc(i,function(){var n=function(n){return Cc(0,n)};return n.callableName="viewIt",n}(),r,t.of_1,t.pf_1,(sa(),Sn)):t instanceof Yu?Kc(i,function(){var n=function(n){return Cc(0,n)};return n.callableName="viewIt",n}(),r,t.xa_1,t.ya_1,Hc()):t instanceof no?Hf().ja([Qc(r,i),Uc(Sf().rd(t.eb_1))]):Gf().ga("Unknown node type viewNode: "+t)}(Nc(),n.cd().ub_1,n,i)})))])}(0,t.xb_1.uc().vc(),r)}function Cc(n,t){var r;if(t instanceof Ju)r=Jo(t);else if(t instanceof no)r=Uc(Sf().rd(t.eb_1));else if(t instanceof Wu)r=Uc(t.za_1);else{var i="Unknown node type viewIt: "+t;console.error(i),r=Gf().ga(i)}return r}function xc(n){return n.t9("report-wrapper"),br()}function jc(n){return n.t9("header"),br()}function Pc(n){return n.t9("gradle-logo"),br()}function Ic(n){return n.t9("title"),br()}function Sc(n){return n.t9("groups"),br()}function zc(n){return n.t9("content"),br()}function Tc(n){return n.t9("group-selector__count"),br()}function Ec(n){return n.t9("learn-more"),br()}function Lc(){Pn=this,document.title="Gradle - Problems Report"}function Nc(){return null==Pn&&new Lc,Pn}function Ac(n,t,r){return n.pe(t.zb().oe(),r)}function Mc(n){Oc.call(this),this.hd_1=n}function Fc(){Oc.call(this)}function Dc(n,t){Oc.call(this),this.wc_1=n,this.xc_1=t}function Oc(){}function Rc(){return sa(),In}function Hc(){return sa(),zn}function $c(){return sa(),En}function Gc(){return sa(),Ln}function Uc(n){return sa(),Gc().ka(n)}function Vc(n){return sa(),Gc().ka(Sf().qd(n))}function Qc(n,t){return sa(),n.cd().ye()?Xc(n,t):function(n){return sa(),Gf().fb(us(oa),Jc(n))}(n)}function Zc(n,t,r,i){var e,u,o;return sa(),Gf().fb(us((e=r,u=t,o=i,function(n){return n.t9("java-exception-part-toggle"),n.u9(function(n,t){return function(r){return new Dc(n,t())}}(u,o)),n.s9("Click to "+function(n){var t;switch(sa(),n.q8_1){case 0:t="show";break;case 1:t="hide";break;default:be()}return t}(e)),br()})),"("+n+" internal "+qf("line",n)+" "+function(n){var t;switch(sa(),n.q8_1){case 0:t="hidden";break;case 1:t="shown";break;default:be()}return t}(r)+")")}function Yc(n,t){t=t===A?Of():t,sa();for(var r=Qf(),i=Rr(Tt(n,10)),e=0,u=n.f();u.g();){var o,f=e;e=f+1|0,s=u.h(),c=(c=0===yr(f)?t:Of())===A?Of():c,sa(),o=Zf().ja([$f().ga(s),c]),i.d(o)}var s,c;return r.ha(i)}function Wc(n,t,r){sa();var i,e,u,o=Hf(),f=Xc(t,n),s=Gf().ga("Exception"),c=Gf().ja([(sa(),Nn).v9(r.na_1,"Copy exception to the clipboard")]),a=null==r.ma_1?null:Gf().ga(" "),h=null==a?Of():a,l=r.ma_1,_=null==l?null:Uc(l),v=null==_?Of():_;switch(t.cd().wb_1.q8_1){case 0:i=Of();break;case 1:i=function(n,t){sa();for(var r=Hf(),i=us(fa),e=n.oa_1,u=Rr(Tt(e,10)),o=0,f=e.f();f.g();){var s,c=f.h(),a=o;o=a+1|0;var h,l=yr(a);if(null!=c.sa_1){var _,v=Zc(c.ra_1.k(),l,c.sa_1,t),d=c.sa_1;switch(null==d?-1:d.q8_1){case 0:_=Yc(Kn(c.ra_1,1),v);break;case 1:_=Yc(c.ra_1,v);break;default:be()}h=_}else h=Yc(c.ra_1);s=h,u.d(s)}return r.zd(i,u)}(r,(e=n,u=t,function(){return e(new vs(u))}));break;default:be()}return o.ja([f,s,c,h,v,i])}function Kc(n,t,r,i,e,u,o){e=e===A?null:e,u=u===A?Of():u,o=o===A?Of():o,sa();var f=Hf(),s=Qc(r,n),c=t(i),a=null==e?null:t(e);return f.ja([s,u,c,null==a?Of():a,o])}function Xc(n,t){var r,i;return sa(),Gf().fb(us((r=n,i=t,function(n){return n.gb(["invisible-text","tree-btn"]),r.cd().wb_1===Cs()&&(n.t9("collapsed"),br()),r.cd().wb_1===xs()&&(n.t9("expanded"),br()),n.s9("Click to "+function(n){var t;switch(sa(),n.q8_1){case 0:t="expand";break;case 1:t="collapse";break;default:be()}return t}(r.cd().wb_1)),n.u9(function(n,t){return function(r){return n(new vs(t))}}(i,r)),br()})),Jc(n))}function Jc(n){return sa(),function(n,t){var r;if(!(t>=0))throw _u(ce("Count 'n' must be non-negative, but was "+t+"."));switch(t){case 0:r="";break;case 1:r=ce(n);break;default:var i="";if(0!==re(n))for(var e=ce(n),u=t;1&~u||(i+=e),0!=(u=u>>>1|0);)e+=e;return i}return r}(" ",n.we()-1|0)+"- "}function na(n){return sa(),n.gb(["invisible-text","error-icon"]),br()}function ta(n){return sa(),n.gb(["invisible-text","advice-icon"]),br()}function ra(n){return sa(),n.gb(["invisible-text","warning-icon"]),br()}function ia(n){return sa(),n.gb(["invisible-text","enum-icon"]),br()}function ea(n){return sa(),new Mc(n)}function ua(n){return sa(),new Mc(n)}function oa(n){return sa(),n.gb(["invisible-text","leaf-icon"]),br()}function fa(n){return sa(),n.t9("java-exception"),br()}function sa(){if(!An){An=!0;var n=Gf();In=n.fb(us(na),"[error] ");var t=Gf();Sn=t.fb(us(ta),"[advice] ");var r=Gf();zn=r.fb(us(ra),"[warn] ");var i=Gf();Tn=i.fb(us(ia),"[enum] "),En=new Uu,Ln=new Uu(ea),Nn=new $u(ua)}}return We(tt,A,Qe),We(ft,A,Qe),We(st,A,Qe),We(Di,"Collection",tu),We(ct,"AbstractCollection",Qe,A,[Di]),We(at,"IteratorImpl",Qe),We(ht,"ListIteratorImpl",Qe,at),We(lt,"Companion",iu),We(Fi,"List",tu,A,[Di]),We(vt,"AbstractList",Qe,ct,[ct,Fi]),We(dt,A,Qe),We(bt,"Companion",iu),We(mt,A,Qe,ct),We(Ri,"Map",tu),We(kt,"AbstractMap",Qe,A,[Ri]),We(qt,"Companion",iu),We(bi,"RandomAccess",tu),We(Pt,"EmptyList",iu,A,[Fi,bi]),We(It,"ArrayAsCollection",Qe,A,[Di]),We(St,"EmptyIterator",iu),We(Lt,"IntIterator",Qe),We(Nt,A,Qe),We(At,"ReversedListReadOnly",Qe,vt),We(Mt,A,Qe),We(Ft,"TransformingSequence",Qe),We(Ot,A,Qe),We(Rt,"FilteringSequence",Qe),We($i,"Set",tu,A,[Di]),We($t,"EmptySet",iu,A,[$i]),We(Vt,"Companion",iu),We(Xt,"IntProgression",Qe),We(Zt,"IntRange",Qe,Xt),We(Yt,"IntProgressionIterator",Qe,Lt),We(Wt,"Companion",iu),We(ar,A,Qe),We(hr,"DelimitedRangesSequence",Qe),We(lr,"Pair",Qe),We(vr,"CharSequence",tu),We(dr,"Comparable",tu),We(gr,"Number",Qe),We(wr,"Unit",iu),We(pr,"IntCompanionObject",iu),We(xr,"AbstractMutableCollection",Qe,ct,[ct,Di]),We(jr,"IteratorImpl",Qe),We(Pr,"ListIteratorImpl",Qe,jr),We(Ir,"AbstractMutableList",Qe,xr,[xr,Di,Fi]),We(Sr,A,Qe),We(zr,A,Qe),We(Oi,"Entry",tu),We(Hi,"MutableEntry",tu,A,[Oi]),We(Tr,"SimpleEntry",Qe,A,[Hi]),We(Mr,"AbstractMutableSet",Qe,xr,[xr,$i,Di]),We(Er,"AbstractEntrySet",Qe,Mr),We(Lr,A,Qe,Mr),We(Nr,A,Qe,xr),We(Ar,"AbstractMutableMap",Qe,kt,[kt,Ri]),We(Fr,"Companion",iu),We(Gr,"ArrayList",Qe,Ir,[Ir,Di,Fi,bi]),We(Qr,"HashCode",iu),We(Zr,"EntrySet",Qe,Er),We(Xr,"HashMap",Qe,Ar,[Ar,Ri]),We(ni,"HashSet",Qe,Mr,[Mr,$i,Di]),We(ei,A,Qe),We(oi,"InternalMap",tu),We(ui,"InternalHashCodeMap",Qe,A,[oi]),We(fi,"EntryIterator",Qe),We(si,"Companion",iu),We(ai,"ChainEntry",Qe,Tr),We(hi,"EntrySet",Qe,Er),We(vi,"LinkedHashMap",Qe,Xr,[Xr,Ri]),We(di,"Companion",iu),We(wi,"LinkedHashSet",Qe,ni,[ni,$i,Di]),We(pi,"BaseOutput",Qe),We(mi,"NodeJsOutput",Qe,pi),We(qi,"BufferedOutput",Qe,pi),We(ki,"BufferedOutputToConsoleLog",Qe,qi),We(Ci,"StringBuilder",Qe,A,[vr]),We(Pi,"Companion",iu),We(Si,"Regex",Qe),We(Ni,"Companion",iu),We(Mi,"Char",Qe,A,[dr]),We(Gi,"Companion",iu),We(Ui,"Enum",Qe,A,[dr]),We(Zi,A,Qe),We(me,"Companion",iu),We(ke,"Long",Qe,gr,[gr,dr]),We(cu,"Letter",iu),We(hu,"OtherLowercase",iu),We(ku,"Exception",Qe,Error),We(Bu,"RuntimeException",Qe,ku),We(vu,"IllegalArgumentException",Qe,Bu),We(gu,"IndexOutOfBoundsException",Qe,Bu),We(bu,"IllegalStateException",Qe,Bu),We(ju,"NoSuchElementException",Qe,Bu),We(Iu,"ArithmeticException",Qe,Bu),We(Tu,"UnsupportedOperationException",Qe,Bu),We(Lu,"NullPointerException",Qe,Bu),We(Au,"NoWhenBranchMatchedException",Qe,Bu),We(Fu,"ClassCastException",Qe,Bu),We(Ou,"UninitializedPropertyAccessException",Qe,Bu),We(Hu,"Model",Qe),We($u,"CopyButtonComponent",Qe),We(Uu,"PrettyTextComponent",Qe),We(to,"ProblemNode",Qe),We(Vu,"Exception",Qe,to),We(Qu,"StackTracePart",Qe),We(Zu,"Error",Qe,to),We(Yu,"Warning",Qe,to),We(Wu,"Message",Qe,to),We(Ku,"ListElement",Qe,to),We(Xu,"TreeNode",Qe,to),We(Ju,"Link",Qe,to),We(no,"Label",Qe,to),We(co,"Info",Qe,to),We(ao,"Project",Qe,to),We(ho,"Task",Qe,to),We(lo,"TaskPath",Qe,to),We(_o,"Bean",Qe,to),We(vo,"SystemProperty",Qe,to),We(go,"Property",Qe,to),We(wo,"BuildLogic",Qe,to),We(bo,"BuildLogicClass",Qe,to),We(Oc,"BaseIntent",Qe),We(Fc,"TreeIntent",Qe,Oc),We(ko,"TaskTreeIntent",Qe,Fc),We(qo,"MessageTreeIntent",Qe,Fc),We(yo,"InputTreeIntent",Qe,Fc),We(Bo,"IncompatibleTaskTreeIntent",Qe,Fc),We(Po,"Intent",Qe,Oc),We(Co,"SetTab",Qe,Po),We(xo,"Model",Qe),We(jo,"Tab",Qe,Ui),We(Ko,"ConfigurationCacheReportPage",iu),We(nf,"ImportedProblem",Qe),We(tf,"ImportedDiagnostics",Qe),We(_f,"sam$kotlin_Comparator$0",Qe),We(Bf,"LearnMore",Qe),We(jf,"Fragment",Qe),We(Cf,"Text",Qe,jf),We(xf,"Reference",Qe,jf),We(Pf,"Builder",Qe),We(If,"Companion",iu),We(zf,"PrettyText",Qe),We(Tf,"Companion",iu),We(Af,"Trie",Qe),We(Kf,"ViewFactory",Qe),We(Xf,"Companion",iu),We(es,"View",Qe),We(ns,"Empty",iu,es),We(rs,"Element",Qe,es),We(is,"MappedView",Qe,es),We(os,"Attributes",Qe),We(as,"Attribute",Qe),We(fs,"OnEvent",Qe,as),We(ss,"ClassName",Qe,as),We(cs,"Named",Qe,as),We(gs,"Intent",Qe),We(vs,"Toggle",Qe,gs),We(ds,"Model",Qe),We(bs,"TreeView",iu),We(Bs,"Focus",Qe),We(ks,"Original",Qe,Bs),We(qs,"Child",Qe,Bs),We(ys,"ViewState",Qe,Ui),We(js,"Tree",Qe),We(Ss,"Tab",Qe,Ui),We(zs,"ProblemIdElement",Qe),We(Ts,"ProblemSummary",Qe),We(Ms,"ProblemNodeGroup",Qe),We(sc,"ProblemApiNode",Qe,to),We(uc,"Text",Qe,sc),We(oc,"ProblemIdNode",Qe,sc),We(fc,"Advice",Qe,to),We(cc,"MessageTreeIntent",Qe,Fc),We(ac,"ProblemIdTreeIntent",Qe,Fc),We(hc,"FileLocationTreeIntent",Qe,Fc),We(lc,"PluginLocationTreeIntent",Qe,Fc),We(_c,"TaskLocationTreeIntent",Qe,Fc),We(gc,"Intent",Qe,Oc),We(vc,"SetTab",Qe,gc),We(dc,"Model",Qe),We(Lc,"ProblemsReportPage",iu),We(Mc,"Copy",Qe,Oc),We(Dc,"ToggleStackTracePart",Qe,Oc),ve(tt).f=function(){return this.n_1.f()},ve(ft).f=function(){return this.r_1.f()},ve(st).f=function(){var n,t,r=function(n,t){for(var r=n.f();r.g();){var i=r.h();t.d(i)}return t}(this.s_1,Or());return n=r,t=this.t_1,function(n,t){if(n.k()<=1)return br();var r=Br(n);!function(n,t){if(function(){if(null!=l)return l;l=!1;var n=[],t=0;if(t<600)do{var r=t;t=t+1|0,n.push(r)}while(t<600);var i=Vr;n.sort(i);var e=1,u=n.length;if(e<u)do{var o=e;e=e+1|0;var f=n[o-1|0],s=n[o];if((3&f)==(3&s)&&f>=s)return!1}while(e<u);return l=!0,!0}()){var r=(i=t,function(n,t){return i.compare(n,t)});n.sort(r)}else!function(n,t,r,i){var e=n.length,u=function(n){var t=0,r=n.length-1|0;if(t<=r)do{var i=t;t=t+1|0,n[i]=null}while(i!==r);return n}(Array(e)),o=Ur(n,u,0,r,i);if(o!==n){var f=0;if(f<=r)do{var s=f;f=f+1|0,n[s]=o[s]}while(s!==r)}}(n,0,Rn(n),t);var i}(r,t);var i=0,e=r.length;if(i<e)do{var u=i;i=i+1|0,n.f4(u,r[u])}while(i<e)}(n,t),r.f()},ve(ct).u=function(n){var t;n:if(Ke(this,Di)&&this.i())t=!1;else{for(var r=this.f();r.g();)if(le(r.h(),n)){t=!0;break n}t=!1}return t},ve(ct).v=function(n){var t;n:if(Ke(n,Di)&&n.i())t=!0;else{for(var r=n.f();r.g();){var i=r.h();if(!this.u(i)){t=!1;break n}}t=!0}return t},ve(ct).i=function(){return 0===this.k()},ve(ct).toString=function(){return $n(this,", ","[","]",A,A,(n=this,function(t){return t===n?"(this Collection)":Vi(t)}));var n},ve(ct).toArray=function(){return kr(this)},ve(at).g=function(){return this.w_1<this.x_1.k()},ve(at).h=function(){if(!this.g())throw Cu();var n=this.w_1;return this.w_1=n+1|0,this.x_1.j(n)},ve(ht).c1=function(){return this.w_1>0},ve(ht).d1=function(){if(!this.c1())throw Cu();return this.w_1=this.w_1-1|0,this.a1_1.j(this.w_1)},ve(lt).e1=function(n,t){if(n<0||n>=t)throw du("index: "+n+", size: "+t)},ve(lt).b1=function(n,t){if(n<0||n>t)throw du("index: "+n+", size: "+t)},ve(lt).f1=function(n){for(var t=1,r=n.f();r.g();){var i=r.h(),e=Mn(31,t),u=null==i?null:ae(i);t=e+(null==u?0:u)|0}return t},ve(lt).g1=function(n,t){if(n.k()!==t.k())return!1;for(var r=t.f(),i=n.f();i.g();)if(!le(i.h(),r.h()))return!1;return!0},ve(vt).f=function(){return new at(this)},ve(vt).l=function(n){return new ht(this,n)},ve(vt).equals=function(n){return n===this||!(null==n||!Ke(n,Fi))&&_t().g1(this,n)},ve(vt).hashCode=function(){return _t().f1(this)},ve(dt).g=function(){return this.h1_1.g()},ve(dt).h=function(){return this.h1_1.h().i1()},ve(bt).k1=function(n){var t=n.j1(),r=null==t?null:ae(t),i=null==r?0:r,e=n.i1(),u=null==e?null:ae(e);return i^(null==u?0:u)},ve(bt).l1=function(n){return Vi(n.j1())+"="+Vi(n.i1())},ve(bt).m1=function(n,t){return!(null==t||!Ke(t,Oi))&&!!le(n.j1(),t.j1())&&le(n.i1(),t.i1())},ve(mt).r1=function(n){return this.q1_1.s1(n)},ve(mt).u=function(n){return!(null!=n&&!Je(n))&&this.r1(null==n||Je(n)?n:pe())},ve(mt).f=function(){return new dt(this.q1_1.o().f())},ve(mt).k=function(){return this.q1_1.k()},ve(kt).t1=function(n){return!(null==wt(this,n))},ve(kt).s1=function(n){var t;n:{var r=this.o();if(Ke(r,Di)&&r.i())t=!1;else{for(var i=r.f();i.g();)if(le(i.h().i1(),n)){t=!0;break n}t=!1}}return t},ve(kt).u1=function(n){if(null==n||!Ke(n,Oi))return!1;var t=n.j1(),r=n.i1(),i=(Ke(this,Ri)?this:pe()).v1(t);return!(!le(r,i)||null==i&&!(Ke(this,Ri)?this:pe()).t1(t))},ve(kt).equals=function(n){if(n===this)return!0;if(null==n||!Ke(n,Ri))return!1;if(this.k()!==n.k())return!1;var t;n:{var r=n.o();if(Ke(r,Di)&&r.i())t=!0;else{for(var i=r.f();i.g();){var e=i.h();if(!this.u1(e)){t=!1;break n}}t=!0}}return t},ve(kt).v1=function(n){var t=wt(this,n);return null==t?null:t.i1()},ve(kt).hashCode=function(){return ae(this.o())},ve(kt).i=function(){return 0===this.k()},ve(kt).k=function(){return this.o().k()},ve(kt).toString=function(){var n;return $n(this.o(),", ","{","}",A,A,(n=this,function(t){return n.p1(t)}))},ve(kt).p1=function(n){return gt(this,n.j1())+"="+gt(this,n.i1())},ve(kt).w1=function(){return null==this.o1_1&&(this.o1_1=new mt(this)),we(this.o1_1)},ve(qt).x1=function(n){for(var t=0,r=n.f();r.g();){var i=r.h(),e=t,u=null==i?null:ae(i);t=e+(null==u?0:u)|0}return t},ve(qt).y1=function(n,t){return n.k()===t.k()&&n.v(t)},ve(Pt).equals=function(n){return!(null==n||!Ke(n,Fi))&&n.i()},ve(Pt).hashCode=function(){return 1},ve(Pt).toString=function(){return"[]"},ve(Pt).k=function(){return 0},ve(Pt).i=function(){return!0},ve(Pt).a2=function(n){return n.i()},ve(Pt).v=function(n){return this.a2(n)},ve(Pt).j=function(n){throw du("Empty list doesn't contain element at index "+n+".")},ve(Pt).f=function(){return zt()},ve(Pt).l=function(n){if(0!==n)throw du("Index: "+n);return zt()},ve(It).k=function(){return this.b2_1.length},ve(It).i=function(){return 0===this.b2_1.length},ve(It).d2=function(n){return function(n,t){return Hn(n,t)>=0}(this.b2_1,n)},ve(It).e2=function(n){var t;n:if(Ke(n,Di)&&n.i())t=!0;else{for(var r=n.f();r.g();){var i=r.h();if(!this.d2(i)){t=!1;break n}}t=!0}return t},ve(It).v=function(n){return this.e2(n)},ve(It).f=function(){return Qi(this.b2_1)},ve(St).g=function(){return!1},ve(St).c1=function(){return!1},ve(St).h=function(){throw Cu()},ve(St).d1=function(){throw Cu()},ve(Lt).h=function(){return this.f2()},ve(Nt).g=function(){return this.g2_1.c1()},ve(Nt).c1=function(){return this.g2_1.g()},ve(Nt).h=function(){return this.g2_1.d1()},ve(Nt).d1=function(){return this.g2_1.h()},ve(At).k=function(){return this.i2_1.k()},ve(At).j=function(n){return this.i2_1.j(function(n,t){if(!(0<=t&&t<=jt(n)))throw du("Element index "+t+" must be in range ["+Ve(0,jt(n))+"].");return jt(n)-t|0}(this,n))},ve(At).f=function(){return this.l(0)},ve(At).l=function(n){return new Nt(this,n)},ve(Mt).h=function(){return this.k2_1.m2_1(this.j2_1.h())},ve(Mt).g=function(){return this.j2_1.g()},ve(Ft).f=function(){return new Mt(this)},ve(Ot).h=function(){if(-1===this.o2_1&&Dt(this),0===this.o2_1)throw Cu();var n=this.p2_1;return this.p2_1=null,this.o2_1=-1,null==n||Je(n)?n:pe()},ve(Ot).g=function(){return-1===this.o2_1&&Dt(this),1===this.o2_1},ve(Rt).f=function(){return new Ot(this)},ve($t).equals=function(n){return!(null==n||!Ke(n,$i))&&n.i()},ve($t).hashCode=function(){return 0},ve($t).toString=function(){return"[]"},ve($t).k=function(){return 0},ve($t).i=function(){return!0},ve($t).a2=function(n){return n.i()},ve($t).v=function(n){return this.a2(n)},ve($t).f=function(){return zt()},ve(Zt).y2=function(){return this.z2_1},ve(Zt).c3=function(){return this.a3_1},ve(Zt).i=function(){return this.z2_1>this.a3_1},ve(Zt).equals=function(n){return n instanceof Zt&&(!(!this.i()||!n.i())||this.z2_1===n.z2_1&&this.a3_1===n.a3_1)},ve(Zt).hashCode=function(){return this.i()?-1:Mn(31,this.z2_1)+this.a3_1|0},ve(Zt).toString=function(){return this.z2_1+".."+this.a3_1},ve(Yt).g=function(){return this.f3_1},ve(Yt).f2=function(){var n=this.g3_1;if(n===this.e3_1){if(!this.f3_1)throw Cu();this.f3_1=!1}else this.g3_1=this.g3_1+this.d3_1|0;return n},ve(Wt).q=function(n,t,r){return new Xt(n,t,r)},ve(Xt).f=function(){return new Yt(this.z2_1,this.a3_1,this.b3_1)},ve(Xt).i=function(){return this.b3_1>0?this.z2_1>this.a3_1:this.z2_1<this.a3_1},ve(Xt).equals=function(n){return n instanceof Xt&&(!(!this.i()||!n.i())||this.z2_1===n.z2_1&&this.a3_1===n.a3_1&&this.b3_1===n.b3_1)},ve(Xt).hashCode=function(){return this.i()?-1:Mn(31,Mn(31,this.z2_1)+this.a3_1|0)+this.b3_1|0},ve(Xt).toString=function(){return this.b3_1>0?this.z2_1+".."+this.a3_1+" step "+this.b3_1:this.z2_1+" downTo "+this.a3_1+" step "+(0|-this.b3_1)},ve(ar).h=function(){if(-1===this.j3_1&&cr(this),0===this.j3_1)throw Cu();var n=this.m3_1,t=n instanceof Zt?n:pe();return this.m3_1=null,this.j3_1=-1,t},ve(ar).g=function(){return-1===this.j3_1&&cr(this),1===this.j3_1},ve(hr).f=function(){return new ar(this)},ve(lr).toString=function(){return"("+this.t3_1+", "+this.u3_1+")"},ve(lr).v3=function(){return this.t3_1},ve(lr).w3=function(){return this.u3_1},ve(lr).hashCode=function(){var n=null==this.t3_1?0:ae(this.t3_1);return Mn(n,31)+(null==this.u3_1?0:ae(this.u3_1))|0},ve(lr).equals=function(n){if(this===n)return!0;if(!(n instanceof lr))return!1;var t=n instanceof lr?n:pe();return!!le(this.t3_1,t.t3_1)&&!!le(this.u3_1,t.u3_1)},ve(wr).toString=function(){return"kotlin.Unit"},ve(pr).b4=function(){return this.MIN_VALUE},ve(pr).c4=function(){return this.MAX_VALUE},ve(pr).d4=function(){return this.SIZE_BYTES},ve(pr).e4=function(){return this.SIZE_BITS},ve(xr).m=function(n){this.g4();for(var t=!1,r=n.f();r.g();){var i=r.h();this.d(i)&&(t=!0)}return t},ve(xr).toJSON=function(){return this.toArray()},ve(xr).g4=function(){},ve(jr).g=function(){return this.h4_1<this.j4_1.k()},ve(jr).h=function(){if(!this.g())throw Cu();var n=this.h4_1;return this.h4_1=n+1|0,this.i4_1=n,this.j4_1.j(this.i4_1)},ve(Pr).c1=function(){return this.h4_1>0},ve(Pr).d1=function(){if(!this.c1())throw Cu();return this.h4_1=this.h4_1-1|0,this.i4_1=this.h4_1,this.n4_1.j(this.i4_1)},ve(Ir).d=function(n){return this.g4(),this.p4(this.k(),n),!0},ve(Ir).f=function(){return new jr(this)},ve(Ir).u=function(n){return this.q4(n)>=0},ve(Ir).q4=function(n){var t=0,r=jt(this);if(t<=r)do{var i=t;if(t=t+1|0,le(this.j(i),n))return i}while(i!==r);return-1},ve(Ir).l=function(n){return new Pr(this,n)},ve(Ir).equals=function(n){return n===this||!(null==n||!Ke(n,Fi))&&_t().g1(this,n)},ve(Ir).hashCode=function(){return _t().f1(this)},ve(Sr).g=function(){return this.r4_1.g()},ve(Sr).h=function(){return this.r4_1.h().j1()},ve(zr).g=function(){return this.s4_1.g()},ve(zr).h=function(){return this.s4_1.h().i1()},ve(Tr).j1=function(){return this.t4_1},ve(Tr).i1=function(){return this.u4_1},ve(Tr).v4=function(n){var t=this.u4_1;return this.u4_1=n,t},ve(Tr).hashCode=function(){return pt().k1(this)},ve(Tr).toString=function(){return pt().l1(this)},ve(Tr).equals=function(n){return pt().m1(this,n)},ve(Er).u=function(n){return this.w4(n)},ve(Lr).y4=function(n){throw zu("Add is not supported on keys")},ve(Lr).d=function(n){return this.y4(null==n||Je(n)?n:pe())},ve(Lr).z4=function(n){return this.x4_1.t1(n)},ve(Lr).u=function(n){return!(null!=n&&!Je(n))&&this.z4(null==n||Je(n)?n:pe())},ve(Lr).f=function(){return new Sr(this.x4_1.o().f())},ve(Lr).k=function(){return this.x4_1.k()},ve(Lr).g4=function(){return this.x4_1.g4()},ve(Nr).f5=function(n){throw zu("Add is not supported on values")},ve(Nr).d=function(n){return this.f5(null==n||Je(n)?n:pe())},ve(Nr).r1=function(n){return this.e5_1.s1(n)},ve(Nr).u=function(n){return!(null!=n&&!Je(n))&&this.r1(null==n||Je(n)?n:pe())},ve(Nr).f=function(){return new zr(this.e5_1.o().f())},ve(Nr).k=function(){return this.e5_1.k()},ve(Nr).g4=function(){return this.e5_1.g4()},ve(Ar).g5=function(){return null==this.c5_1&&(this.c5_1=new Lr(this)),we(this.c5_1)},ve(Ar).w1=function(){return null==this.d5_1&&(this.d5_1=new Nr(this)),we(this.d5_1)},ve(Ar).g4=function(){},ve(Mr).equals=function(n){return n===this||!(null==n||!Ke(n,$i))&&yt().y1(this,n)},ve(Mr).hashCode=function(){return yt().x1(this)},ve(Gr).j5=function(){return this.g4(),this.c_1=!0,this.k()>0?this:Dr().i5_1},ve(Gr).k=function(){return this.b_1.length},ve(Gr).j=function(n){var t=this.b_1[$r(this,n)];return null==t||Je(t)?t:pe()},ve(Gr).f4=function(n,t){this.g4(),$r(this,n);var r=this.b_1[n];this.b_1[n]=t;var i=r;return null==i||Je(i)?i:pe()},ve(Gr).d=function(n){return this.g4(),this.b_1.push(n),this.o4_1=this.o4_1+1|0,!0},ve(Gr).p4=function(n,t){this.g4(),this.b_1.splice(function(n,t){return _t().b1(t,n.k()),t}(this,n),0,t),this.o4_1=this.o4_1+1|0},ve(Gr).m=function(n){if(this.g4(),n.i())return!1;for(var t,r,i,e=(t=this,r=n.k(),i=t.k(),t.b_1.length=t.k()+r|0,i),u=0,o=n.f();o.g();){var f=o.h(),s=u;u=s+1|0;var c=yr(s);this.b_1[e+c|0]=f}return this.o4_1=this.o4_1+1|0,!0},ve(Gr).q4=function(n){return Hn(this.b_1,n)},ve(Gr).toString=function(){return On(this.b_1,", ","[","]",A,A,ee)},ve(Gr).k5=function(){return[].slice.call(this.b_1)},ve(Gr).toArray=function(){return this.k5()},ve(Gr).g4=function(){if(this.c_1)throw Su()},ve(Qr).l5=function(n,t){return le(n,t)},ve(Qr).m5=function(n){var t=null==n?null:ae(n);return null==t?0:t},ve(Zr).o5=function(n){throw zu("Add is not supported on entries")},ve(Zr).d=function(n){return this.o5(null!=n&&Ke(n,Hi)?n:pe())},ve(Zr).w4=function(n){return this.n5_1.u1(n)},ve(Zr).f=function(){return this.n5_1.t5_1.f()},ve(Zr).k=function(){return this.n5_1.k()},ve(Xr).t1=function(n){return this.t5_1.z4(n)},ve(Xr).s1=function(n){var t;n:{var r=this.t5_1;if(Ke(r,Di)&&r.i())t=!1;else{for(var i=r.f();i.g();){var e=i.h();if(this.u5_1.l5(e.i1(),n)){t=!0;break n}}t=!1}}return t},ve(Xr).o=function(){return null==this.v5_1&&(this.v5_1=this.x5()),we(this.v5_1)},ve(Xr).x5=function(){return new Zr(this)},ve(Xr).v1=function(n){return this.t5_1.v1(n)},ve(Xr).h5=function(n,t){return this.t5_1.h5(n,t)},ve(Xr).k=function(){return this.t5_1.k()},ve(ni).d=function(n){return null==this.y5_1.h5(n,this)},ve(ni).u=function(n){return this.y5_1.t1(n)},ve(ni).i=function(){return this.y5_1.i()},ve(ni).f=function(){return this.y5_1.g5().f()},ve(ni).k=function(){return this.y5_1.k()},ve(ei).g=function(){return-1===this.z5_1&&(this.z5_1=function(n){if(null!=n.c6_1&&n.d6_1){var t=n.c6_1.length;if(n.e6_1=n.e6_1+1|0,n.e6_1<t)return 0}if(n.b6_1=n.b6_1+1|0,n.b6_1<n.a6_1.length){n.c6_1=n.g6_1.i6_1[n.a6_1[n.b6_1]];var r=n,i=n.c6_1;return r.d6_1=null!=i&&Xe(i),n.e6_1=0,0}return n.c6_1=null,1}(this)),0===this.z5_1},ve(ei).h=function(){if(!this.g())throw Cu();var n=this.d6_1?this.c6_1[this.e6_1]:this.c6_1;return this.f6_1=n,this.z5_1=-1,n},ve(ui).w5=function(){return this.h6_1},ve(ui).k=function(){return this.j6_1},ve(ui).h5=function(n,t){var r=this.h6_1.m5(n),i=ii(this,r);if(null==i)this.i6_1[r]=new Tr(n,t);else{if(null==i||!Xe(i)){var e,u=i;return this.h6_1.l5(u.j1(),n)?u.v4(t):(e=[u,new Tr(n,t)],this.i6_1[r]=e,this.j6_1=this.j6_1+1|0,null)}var o=i,f=
gitextract_k51tdnmq/
├── .fvmrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── config.yml
│ └── workflows/
│ ├── auto-label-issues.yml
│ ├── beta-release.yml
│ ├── branch-protection-check.yml
│ └── stable-release.yml
├── .gitignore
├── .metadata
├── .vscode/
│ ├── launch.json
│ └── settings.json
├── CONTRIBUTING.md
├── GyawunMusic-2.0.16.flatpak
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── app/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── com/
│ │ │ │ └── jhelum/
│ │ │ │ └── gyawun/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── anim/
│ │ │ │ ├── in_animation.xml
│ │ │ │ └── out_animation.xml
│ │ │ ├── drawable/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-hdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── drawable-mdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── drawable-night/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-xhdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── drawable-xxhdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── drawable-xxxhdpi/
│ │ │ │ └── audio_service_stop.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ └── ic_launcher.xml
│ │ │ ├── raw/
│ │ │ │ └── keep.xml
│ │ │ ├── values/
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ ├── strings.xml
│ │ │ │ ├── styles.xml
│ │ │ │ └── themes.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ └── styles.xml
│ │ │ ├── values-v31/
│ │ │ │ └── styles.xml
│ │ │ └── xml/
│ │ │ └── automotive_app_desc.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build/
│ │ └── reports/
│ │ └── problems/
│ │ └── problems-report.html
│ ├── build.gradle.kts
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle.kts
├── build-flatpak.sh
├── devtools_options.yaml
├── fastlane/
│ └── metadata/
│ └── android/
│ └── en-US/
│ ├── full_description.txt
│ ├── short_description.txt
│ └── title.txt
├── flutter_native_splash.yaml
├── lib/
│ ├── core/
│ │ ├── extensions/
│ │ │ ├── random_material_shape.dart
│ │ │ └── string_extensions.dart
│ │ ├── models/
│ │ │ └── app_config.dart
│ │ ├── utils/
│ │ │ ├── expressive_sheet.dart
│ │ │ └── service_locator.dart
│ │ └── widgets/
│ │ ├── expressive_app_bar.dart
│ │ ├── expressive_list_group.dart
│ │ ├── expressive_list_tile.dart
│ │ ├── expressive_switch_list_tile.dart
│ │ ├── internet_guard.dart
│ │ ├── library_tile.dart
│ │ ├── rounded_polygon_icon.dart
│ │ ├── section_item.dart
│ │ ├── sections/
│ │ │ ├── section_multi_column.dart
│ │ │ └── section_row.dart
│ │ ├── song_tile.dart
│ │ └── tiles/
│ │ ├── section_list_tile.dart
│ │ └── section_row_tile.dart
│ ├── generated/
│ │ ├── intl/
│ │ │ ├── messages_all.dart
│ │ │ ├── messages_en.dart
│ │ │ ├── messages_es.dart
│ │ │ ├── messages_fr.dart
│ │ │ ├── messages_hi.dart
│ │ │ ├── messages_it.dart
│ │ │ ├── messages_tr.dart
│ │ │ └── messages_ur.dart
│ │ └── l10n.dart
│ ├── l10n/
│ │ ├── intl_en.arb
│ │ ├── intl_es.arb
│ │ ├── intl_fr.arb
│ │ ├── intl_hi.arb
│ │ ├── intl_it.arb
│ │ ├── intl_tr.arb
│ │ └── intl_ur.arb
│ ├── main.dart
│ ├── screens/
│ │ ├── browse/
│ │ │ ├── browse_page.dart
│ │ │ └── cubit/
│ │ │ ├── browse_cubit.dart
│ │ │ └── browse_state.dart
│ │ ├── chip/
│ │ │ ├── chip_page.dart
│ │ │ └── cubit/
│ │ │ ├── chip_cubit.dart
│ │ │ └── chip_state.dart
│ │ ├── home/
│ │ │ ├── cubit/
│ │ │ │ ├── home_cubit.dart
│ │ │ │ └── home_state.dart
│ │ │ ├── home_page.dart
│ │ │ └── widgets/
│ │ │ └── chips_row.dart
│ │ ├── library/
│ │ │ ├── cubit/
│ │ │ │ ├── library_cubit.dart
│ │ │ │ └── library_state.dart
│ │ │ ├── downloads/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── downloads_cubit.dart
│ │ │ │ │ └── downloads_state.dart
│ │ │ │ ├── downloading/
│ │ │ │ │ ├── cubit/
│ │ │ │ │ │ ├── downloading_cubit.dart
│ │ │ │ │ │ └── downloading_state.dart
│ │ │ │ │ ├── downloading_page.dart
│ │ │ │ │ └── widgets/
│ │ │ │ │ ├── downloading_section_tile.dart
│ │ │ │ │ └── downloading_song_tile.dart
│ │ │ │ ├── downloads_page.dart
│ │ │ │ └── playlist/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── download_playlist_cubit.dart
│ │ │ │ │ └── download_playlist_state.dart
│ │ │ │ ├── download_playlist_page.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── download_playlist_header.dart
│ │ │ │ └── download_song_tile.dart
│ │ │ ├── favourites/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── favourites_cubit.dart
│ │ │ │ │ └── favourites_state.dart
│ │ │ │ └── favourites_page.dart
│ │ │ ├── history/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── history_cubit.dart
│ │ │ │ │ └── history_state.dart
│ │ │ │ └── history_page.dart
│ │ │ ├── library_page.dart
│ │ │ ├── playlist/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── playlist_details_cubit.dart
│ │ │ │ │ └── playlist_details_state.dart
│ │ │ │ └── playlist_details_page.dart
│ │ │ └── widgets/
│ │ │ └── my_playlist_header.dart
│ │ ├── player/
│ │ │ ├── player_page.dart
│ │ │ └── widgets/
│ │ │ ├── lyrics_box.dart
│ │ │ ├── play_pause_button.dart
│ │ │ └── queue_list.dart
│ │ ├── search/
│ │ │ ├── cubit/
│ │ │ │ ├── search_cubit.dart
│ │ │ │ └── search_state.dart
│ │ │ └── search_page.dart
│ │ ├── settings/
│ │ │ ├── about/
│ │ │ │ └── about_page.dart
│ │ │ ├── appearance/
│ │ │ │ ├── appearance_page.dart
│ │ │ │ └── cubit/
│ │ │ │ ├── appearance_cubit.dart
│ │ │ │ └── appearance_state.dart
│ │ │ ├── backup_storage/
│ │ │ │ ├── backup_storage_page.dart
│ │ │ │ └── cubit/
│ │ │ │ ├── backup_storage_cubit.dart
│ │ │ │ └── backup_storage_state.dart
│ │ │ ├── cubit/
│ │ │ │ ├── settings_system_cubit.dart
│ │ │ │ └── settings_system_state.dart
│ │ │ ├── player/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── player_settings_cubit.dart
│ │ │ │ │ └── player_settings_state.dart
│ │ │ │ ├── equalizer/
│ │ │ │ │ ├── cubit/
│ │ │ │ │ │ ├── equalizer_cubit.dart
│ │ │ │ │ │ ├── equalizer_state.dart
│ │ │ │ │ │ ├── loudness_cubit.dart
│ │ │ │ │ │ └── loudness_state.dart
│ │ │ │ │ └── equalizer_page.dart
│ │ │ │ └── player_settings_page.dart
│ │ │ ├── privacy/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── privacy_cubit.dart
│ │ │ │ │ └── privacy_state.dart
│ │ │ │ └── privacy_page.dart
│ │ │ ├── services/
│ │ │ │ └── yt_music/
│ │ │ │ ├── cubit/
│ │ │ │ │ ├── ytmusic_cubit.dart
│ │ │ │ │ └── ytmusic_state.dart
│ │ │ │ └── yt_music_page.dart
│ │ │ ├── settings_page.dart
│ │ │ └── widgets/
│ │ │ ├── color_icon.dart
│ │ │ └── setting_item.dart
│ │ └── shell/
│ │ ├── app_shell.dart
│ │ └── widgets/
│ │ └── bottom_player.dart
│ ├── services/
│ │ ├── bottom_message.dart
│ │ ├── custom_audio_stream.dart
│ │ ├── download_manager.dart
│ │ ├── favourites_manager.dart
│ │ ├── file_storage.dart
│ │ ├── history_manager.dart
│ │ ├── library.dart
│ │ ├── lyrics.dart
│ │ ├── media_player.dart
│ │ ├── settings_manager.dart
│ │ ├── stream_client.dart
│ │ ├── update_service/
│ │ │ ├── models/
│ │ │ │ └── update_info.dart
│ │ │ ├── update_service.dart
│ │ │ └── widgets/
│ │ │ ├── update_checking.dart
│ │ │ └── update_dialog.dart
│ │ └── yt_audio_stream.dart
│ ├── themes/
│ │ ├── colors.dart
│ │ ├── dark.dart
│ │ ├── light.dart
│ │ ├── text_styles.dart
│ │ ├── theme.dart
│ │ └── typography.dart
│ └── utils/
│ ├── adaptive_widgets/
│ │ ├── adaptive_widgets.dart
│ │ ├── appbar.dart
│ │ ├── buttons.dart
│ │ ├── card.dart
│ │ ├── dropdown_button.dart
│ │ ├── icons.dart
│ │ ├── inkwell.dart
│ │ ├── listtile.dart
│ │ ├── no_splash_factory.dart
│ │ ├── progress_ring.dart
│ │ ├── scaffold.dart
│ │ ├── slider.dart
│ │ ├── switch.dart
│ │ ├── text_field.dart
│ │ └── theme.dart
│ ├── add_history.dart
│ ├── bottom_modals.dart
│ ├── check_update.dart
│ ├── enhanced_image.dart
│ ├── extensions.dart
│ ├── format_duration.dart
│ ├── internet_guard.dart
│ ├── playlist_icon.dart
│ ├── playlist_icon_widget.dart
│ ├── playlist_icons.dart
│ ├── playlist_thumbnail.dart
│ ├── pprint.dart
│ ├── router.dart
│ ├── song_thumbnail.dart
│ └── text_controller_builder.dart
├── pubspec.yaml
└── test/
└── widget_test.dart
SYMBOL INDEX (744 symbols across 142 files)
FILE: lib/core/extensions/string_extensions.dart
function capitalize (line 2) | String capitalize()
FILE: lib/core/models/app_config.dart
class AppConfig (line 1) | class AppConfig {
FILE: lib/core/utils/expressive_sheet.dart
class ExpressiveSheetOption (line 5) | class ExpressiveSheetOption<T> {
class ExpressiveSheet (line 19) | class ExpressiveSheet {
method showSelection (line 22) | Future<T?> showSelection<T>(
method showColorSelection (line 80) | Future<Color?> showColorSelection(
FILE: lib/core/widgets/expressive_app_bar.dart
class ExpressiveAppBar (line 5) | class ExpressiveAppBar extends StatelessWidget {
method build (line 19) | Widget build(BuildContext context)
class _ExpressiveFlexSpaceBar (line 50) | class _ExpressiveFlexSpaceBar extends StatelessWidget {
method build (line 62) | Widget build(BuildContext context)
FILE: lib/core/widgets/expressive_list_group.dart
class ExpressiveListGroupScope (line 3) | class ExpressiveListGroupScope extends InheritedWidget {
method of (line 6) | ExpressiveListGroupScope? of(BuildContext context)
method updateShouldNotify (line 12) | bool updateShouldNotify(ExpressiveListGroupScope oldWidget)
class ExpressiveListGroup (line 15) | class ExpressiveListGroup extends StatelessWidget {
method build (line 28) | Widget build(BuildContext context)
method _buildChildrenWithDividers (line 68) | List<Widget> _buildChildrenWithDividers(BuildContext context)
FILE: lib/core/widgets/expressive_list_tile.dart
class ExpressiveListTile (line 4) | class ExpressiveListTile extends StatelessWidget {
method build (line 31) | Widget build(BuildContext context)
FILE: lib/core/widgets/expressive_switch_list_tile.dart
class ExpressiveSwitchListTile (line 4) | class ExpressiveSwitchListTile extends StatelessWidget {
method build (line 27) | Widget build(BuildContext context)
FILE: lib/core/widgets/internet_guard.dart
class InternetGuard (line 11) | class InternetGuard extends StatefulWidget {
method createState (line 22) | State<InternetGuard> createState()
class _InternetGuardState (line 25) | class _InternetGuardState extends State<InternetGuard> {
method initState (line 33) | void initState()
method dispose (line 39) | void dispose()
method _initConnectivity (line 44) | Future<void> _initConnectivity()
method _updateStatus (line 54) | void _updateStatus(dynamic value)
method _isOffline (line 73) | bool _isOffline(dynamic value)
method _retry (line 85) | Future<void> _retry()
method build (line 91) | Widget build(BuildContext context)
FILE: lib/core/widgets/library_tile.dart
class LibraryTile (line 3) | class LibraryTile extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
FILE: lib/core/widgets/rounded_polygon_icon.dart
class RoundedPolygonIcon (line 4) | class RoundedPolygonIcon extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
class _RoundedPolygonPainter (line 30) | class _RoundedPolygonPainter extends CustomPainter {
method paint (line 40) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 66) | bool shouldRepaint(_RoundedPolygonPainter oldDelegate)
FILE: lib/core/widgets/section_item.dart
class SectionItem (line 16) | class SectionItem extends StatefulWidget {
method createState (line 22) | State<SectionItem> createState()
class _SectionItemState (line 25) | class _SectionItemState extends State<SectionItem> {
method initState (line 31) | void initState()
method dispose (line 36) | void dispose()
method loadMoreItems (line 42) | void loadMoreItems()
method build (line 60) | Widget build(BuildContext context)
class SectionHeader (line 92) | class SectionHeader extends StatelessWidget {
method build (line 104) | Widget build(BuildContext context)
class SingleColumnList (line 154) | class SingleColumnList extends StatelessWidget {
method build (line 158) | Widget build(BuildContext context)
FILE: lib/core/widgets/sections/section_multi_column.dart
class SectionMultiColumn (line 7) | class SectionMultiColumn extends StatefulWidget {
method createState (line 14) | State<SectionMultiColumn> createState()
class _SectionMultiColumnState (line 17) | class _SectionMultiColumnState extends State<SectionMultiColumn> {
method didChangeDependencies (line 20) | void didChangeDependencies()
method build (line 29) | Widget build(BuildContext context)
FILE: lib/core/widgets/sections/section_row.dart
class SectionRow (line 4) | class SectionRow extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: lib/core/widgets/song_tile.dart
class SongTile (line 11) | class SongTile extends StatelessWidget {
method _onTap (line 32) | void _onTap(BuildContext context, Map song)
method _onLongPress (line 40) | void _onLongPress(BuildContext context, Map song)
method _onIconPress (line 46) | void _onIconPress(BuildContext context, Map song)
method build (line 53) | Widget build(BuildContext context)
FILE: lib/core/widgets/tiles/section_list_tile.dart
class SectionListTile (line 9) | class SectionListTile extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
FILE: lib/core/widgets/tiles/section_row_tile.dart
class SectionRowTile (line 8) | class SectionRowTile extends StatelessWidget {
method build (line 14) | Widget build(BuildContext context)
FILE: lib/generated/intl/messages_all.dart
type Future (line 27) | typedef Future<dynamic> LibraryLoader();
function _findExact (line 38) | MessageLookupByLibrary? _findExact(String localeName)
function initializeMessages (line 60) | Future<bool> initializeMessages(String localeName)
function _messagesExistFor (line 76) | bool _messagesExistFor(String locale)
function _findGeneratedMessagesFor (line 84) | MessageLookupByLibrary? _findGeneratedMessagesFor(String locale)
FILE: lib/generated/intl/messages_en.dart
type String (line 18) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 20) | class MessageLookup extends MessageLookupByLibrary {
method m0 (line 23) | String m0(count)
method m1 (line 25) | String m1(count)
method _notInlinedMessages (line 29) | Map<String, Function> _notInlinedMessages(_)
FILE: lib/generated/intl/messages_es.dart
type String (line 18) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 20) | class MessageLookup extends MessageLookupByLibrary {
method m1 (line 23) | String m1(count)
method _notInlinedMessages (line 27) | Map<String, Function> _notInlinedMessages(_)
FILE: lib/generated/intl/messages_fr.dart
type String (line 18) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 20) | class MessageLookup extends MessageLookupByLibrary {
method m1 (line 23) | String m1(count)
method _notInlinedMessages (line 27) | Map<String, Function> _notInlinedMessages(_)
FILE: lib/generated/intl/messages_hi.dart
type String (line 18) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 20) | class MessageLookup extends MessageLookupByLibrary {
method m1 (line 23) | String m1(count)
method _notInlinedMessages (line 27) | Map<String, Function> _notInlinedMessages(_)
FILE: lib/generated/intl/messages_it.dart
type String (line 18) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 20) | class MessageLookup extends MessageLookupByLibrary {
method m0 (line 23) | String m0(count)
method m1 (line 25) | String m1(count)
method _notInlinedMessages (line 29) | Map<String, Function> _notInlinedMessages(_)
FILE: lib/generated/intl/messages_tr.dart
type String (line 18) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 20) | class MessageLookup extends MessageLookupByLibrary {
method m1 (line 23) | String m1(count)
method _notInlinedMessages (line 27) | Map<String, Function> _notInlinedMessages(_)
FILE: lib/generated/intl/messages_ur.dart
type String (line 18) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 20) | class MessageLookup extends MessageLookupByLibrary {
method m1 (line 23) | String m1(count)
method _notInlinedMessages (line 27) | Map<String, Function> _notInlinedMessages(_)
FILE: lib/generated/l10n.dart
class S (line 15) | class S {
method load (line 30) | Future<S> load(Locale locale)
method of (line 44) | S of(BuildContext context)
method maybeOf (line 53) | S? maybeOf(BuildContext context)
method nSongs (line 118) | String nSongs(num count)
method Queued_Count (line 1061) | String Queued_Count(Object count)
class AppLocalizationDelegate (line 1156) | class AppLocalizationDelegate extends LocalizationsDelegate<S> {
method isSupported (line 1172) | bool isSupported(Locale locale)
method load (line 1174) | Future<S> load(Locale locale)
method shouldReload (line 1176) | bool shouldReload(AppLocalizationDelegate old)
method _isSupported (line 1178) | bool _isSupported(Locale locale)
FILE: lib/main.dart
function main (line 30) | void main()
class Gyawun (line 103) | class Gyawun extends StatelessWidget {
method build (line 106) | Widget build(BuildContext context)
function initialiseHive (line 162) | Future<void> initialiseHive()
function getYtConfig (line 171) | Future<YTConfig?>? getYtConfig(SettingsManager settingsManager)
FILE: lib/screens/browse/browse_page.dart
class BrowsePage (line 21) | class BrowsePage extends StatelessWidget {
method build (line 27) | Widget build(BuildContext context)
class _BrowsePage (line 35) | class _BrowsePage extends StatefulWidget {
method createState (line 41) | State<_BrowsePage> createState()
class _BrowsePageState (line 44) | class _BrowsePageState extends State<_BrowsePage> {
method initState (line 49) | void initState()
method _scrollListener (line 63) | Future<void> _scrollListener()
method build (line 71) | Widget build(BuildContext context)
class HeaderWidget (line 174) | class HeaderWidget extends StatefulWidget {
method createState (line 180) | State<HeaderWidget> createState()
class _HeaderWidgetState (line 183) | class _HeaderWidgetState extends State<HeaderWidget> {
method _buildImage (line 191) | Widget _buildImage(
method _buildContent (line 224) | Padding _buildContent(
method build (line 331) | Widget build(BuildContext context)
FILE: lib/screens/browse/cubit/browse_cubit.dart
class BrowseCubit (line 7) | class BrowseCubit extends Cubit<BrowseState> {
method fetch (line 11) | Future<void> fetch()
method fetchNext (line 26) | Future<void> fetchNext()
FILE: lib/screens/browse/cubit/browse_state.dart
class BrowseState (line 3) | @immutable
class BrowseLoading (line 8) | final class BrowseLoading extends BrowseState {
class BrowseError (line 12) | final class BrowseError extends BrowseState {
class BrowseSuccess (line 18) | final class BrowseSuccess extends BrowseState {
method copyWith (line 30) | BrowseSuccess copyWith({
FILE: lib/screens/chip/chip_page.dart
class ChipPage (line 10) | class ChipPage extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
class _ChipPage (line 24) | class _ChipPage extends StatelessWidget {
method build (line 30) | Widget build(BuildContext context)
FILE: lib/screens/chip/cubit/chip_cubit.dart
class ChipCubit (line 7) | class ChipCubit extends Cubit<ChipState> {
method fetch (line 12) | Future<void> fetch()
method refresh (line 26) | Future<void> refresh()
method fetchNext (line 39) | Future<void> fetchNext()
FILE: lib/screens/chip/cubit/chip_state.dart
class ChipState (line 3) | @immutable
class ChipLoading (line 8) | final class ChipLoading extends ChipState {
class ChipError (line 12) | final class ChipError extends ChipState {
class ChipSuccess (line 18) | final class ChipSuccess extends ChipState {
method copyWith (line 28) | ChipSuccess copyWith({
FILE: lib/screens/home/cubit/home_cubit.dart
class HomeCubit (line 7) | class HomeCubit extends Cubit<HomeState> {
method fetch (line 11) | Future<void> fetch()
method refresh (line 26) | Future<void> refresh()
method fetchNext (line 40) | Future<void> fetchNext()
FILE: lib/screens/home/cubit/home_state.dart
class HomeState (line 3) | @immutable
class HomeLoading (line 8) | final class HomeLoading extends HomeState {
class HomeError (line 12) | final class HomeError extends HomeState {
class HomeSuccess (line 18) | final class HomeSuccess extends HomeState {
method copyWith (line 30) | HomeSuccess copyWith({
FILE: lib/screens/home/home_page.dart
class HomePage (line 16) | class HomePage extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
class _HomePage (line 28) | class _HomePage extends StatefulWidget {
method createState (line 32) | State<_HomePage> createState()
class _HomePageState (line 35) | class _HomePageState extends State<_HomePage> {
method initState (line 39) | void initState()
method _scrollListener (line 45) | Future<void> _scrollListener()
method build (line 53) | Widget build(BuildContext context)
FILE: lib/screens/home/widgets/chips_row.dart
class ChipsRow (line 4) | class ChipsRow extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: lib/screens/library/cubit/library_cubit.dart
class LibraryCubit (line 12) | class LibraryCubit extends Cubit<LibraryState> {
method loadLibrary (line 34) | void loadLibrary()
method _emitCurrentState (line 38) | void _emitCurrentState()
method close (line 56) | Future<void> close()
FILE: lib/screens/library/cubit/library_state.dart
class LibraryState (line 3) | @immutable
class LibraryLoading (line 8) | class LibraryLoading extends LibraryState {
class LibraryLoaded (line 12) | class LibraryLoaded extends LibraryState {
class LibraryError (line 26) | class LibraryError extends LibraryState {
FILE: lib/screens/library/downloads/cubit/downloads_cubit.dart
class DownloadsCubit (line 8) | class DownloadsCubit extends Cubit<DownloadsState> {
method load (line 23) | void load()
method _emitState (line 27) | void _emitState()
method close (line 40) | Future<void> close()
FILE: lib/screens/library/downloads/cubit/downloads_state.dart
class DownloadsState (line 3) | @immutable
class DownloadsLoading (line 8) | class DownloadsLoading extends DownloadsState {
class DownloadsLoaded (line 12) | class DownloadsLoaded extends DownloadsState {
class DownloadsError (line 18) | class DownloadsError extends DownloadsState {
FILE: lib/screens/library/downloads/downloading/cubit/downloading_cubit.dart
class DownloadingCubit (line 8) | class DownloadingCubit extends Cubit<DownloadingState> {
method load (line 23) | void load()
method _emitState (line 27) | void _emitState()
method close (line 48) | Future<void> close()
FILE: lib/screens/library/downloads/downloading/cubit/downloading_state.dart
class DownloadingState (line 3) | @immutable
class DownloadingLoading (line 8) | class DownloadingLoading extends DownloadingState {
class DownloadingLoaded (line 12) | class DownloadingLoaded extends DownloadingState {
class DownloadingError (line 22) | class DownloadingError extends DownloadingState {
FILE: lib/screens/library/downloads/downloading/downloading_page.dart
class DownloadingPage (line 9) | class DownloadingPage extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
FILE: lib/screens/library/downloads/downloading/widgets/downloading_section_tile.dart
class DownloadingSectionTile (line 3) | class DownloadingSectionTile extends StatelessWidget {
method build (line 8) | Widget build(BuildContext context)
FILE: lib/screens/library/downloads/downloading/widgets/downloading_song_tile.dart
class DownloadingSongTile (line 10) | class DownloadingSongTile extends StatelessWidget {
method build (line 14) | Widget build(BuildContext context)
FILE: lib/screens/library/downloads/downloads_page.dart
class DownloadsPage (line 18) | class DownloadsPage extends StatelessWidget {
method build (line 22) | Widget build(BuildContext context)
function build (line 50) | Widget build(BuildContext context)
FILE: lib/screens/library/downloads/playlist/cubit/download_playlist_cubit.dart
class DownloadPlaylistCubit (line 10) | class DownloadPlaylistCubit extends Cubit<DownloadPlaylistState> {
method load (line 27) | void load()
method _emitState (line 32) | void _emitState()
method _verifyPlaylistIntegrity (line 51) | Future<void> _verifyPlaylistIntegrity()
method removeSong (line 71) | Future<void> removeSong(Map song)
method getCleanSong (line 75) | Map getCleanSong(Map song)
method getDownloadedSongs (line 79) | List? getDownloadedSongs(String? playlistId)
method restoreDownloads (line 83) | Future<void> restoreDownloads(List<Map> songs)
method close (line 88) | Future<void> close()
FILE: lib/screens/library/downloads/playlist/cubit/download_playlist_state.dart
class DownloadPlaylistState (line 3) | @immutable
class DownloadPlaylistLoading (line 8) | class DownloadPlaylistLoading extends DownloadPlaylistState {
class DownloadPlaylistLoaded (line 12) | class DownloadPlaylistLoaded extends DownloadPlaylistState {
class DownloadPlaylistError (line 22) | class DownloadPlaylistError extends DownloadPlaylistState {
FILE: lib/screens/library/downloads/playlist/download_playlist_page.dart
class DownloadPlaylistPage (line 20) | class DownloadPlaylistPage extends StatelessWidget {
method build (line 26) | Widget build(BuildContext context)
function build (line 103) | Widget build(BuildContext context)
FILE: lib/screens/library/favourites/cubit/favourites_cubit.dart
class FavouritesCubit (line 8) | class FavouritesCubit extends Cubit<FavouritesState> {
method load (line 24) | void load()
method _emitState (line 28) | void _emitState()
method remove (line 40) | Future<void> remove(dynamic key)
method close (line 45) | Future<void> close()
FILE: lib/screens/library/favourites/cubit/favourites_state.dart
class FavouritesState (line 3) | @immutable
class FavouritesLoading (line 8) | class FavouritesLoading extends FavouritesState {
class FavouritesLoaded (line 12) | class FavouritesLoaded extends FavouritesState {
class FavouritesError (line 18) | class FavouritesError extends FavouritesState {
FILE: lib/screens/library/favourites/favourites_page.dart
class FavouritesPage (line 16) | class FavouritesPage extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
function build (line 48) | Widget build(BuildContext context)
FILE: lib/screens/library/history/cubit/history_cubit.dart
class HistoryCubit (line 9) | class HistoryCubit extends Cubit<HistoryState> {
method load (line 25) | void load()
method _emitState (line 29) | void _emitState()
method remove (line 42) | Future<void> remove(Map song)
method close (line 47) | Future<void> close()
FILE: lib/screens/library/history/cubit/history_state.dart
class HistoryState (line 3) | @immutable
class HistoryLoading (line 8) | class HistoryLoading extends HistoryState {
class HistoryLoaded (line 12) | class HistoryLoaded extends HistoryState {
class HistoryError (line 17) | class HistoryError extends HistoryState {
FILE: lib/screens/library/history/history_page.dart
class HistoryPage (line 14) | class HistoryPage extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
function build (line 42) | Widget build(BuildContext context)
FILE: lib/screens/library/library_page.dart
class LibraryPage (line 22) | class LibraryPage extends StatelessWidget {
method build (line 26) | Widget build(BuildContext context)
function build (line 92) | Widget build(BuildContext context)
FILE: lib/screens/library/playlist/cubit/playlist_details_cubit.dart
class PlaylistDetailsCubit (line 8) | class PlaylistDetailsCubit extends Cubit<PlaylistDetailsState> {
method load (line 25) | void load()
method _emitState (line 29) | void _emitState()
method removeSong (line 48) | Future<String> removeSong(Map song)
method close (line 56) | Future<void> close()
FILE: lib/screens/library/playlist/cubit/playlist_details_state.dart
class PlaylistDetailsState (line 3) | @immutable
class PlaylistDetailsLoading (line 8) | class PlaylistDetailsLoading extends PlaylistDetailsState {
class PlaylistDetailsLoaded (line 12) | class PlaylistDetailsLoaded extends PlaylistDetailsState {
class PlaylistDetailsError (line 17) | class PlaylistDetailsError extends PlaylistDetailsState {
FILE: lib/screens/library/playlist/playlist_details_page.dart
class PlaylistDetailsPage (line 17) | class PlaylistDetailsPage extends StatelessWidget {
method build (line 23) | Widget build(BuildContext context)
function build (line 54) | Widget build(BuildContext context)
FILE: lib/screens/library/widgets/my_playlist_header.dart
class MyPlayistHeader (line 15) | class MyPlayistHeader extends StatelessWidget {
method _buildImage (line 20) | Widget _buildImage(
method _buildContent (line 69) | Padding _buildContent(
method build (line 139) | Widget build(BuildContext context)
FILE: lib/screens/player/player_page.dart
class PlayerPage (line 30) | class PlayerPage extends StatefulWidget {
method createState (line 35) | State<PlayerPage> createState()
class _PlayerPageState (line 38) | class _PlayerPageState extends State<PlayerPage> {
method initState (line 49) | void initState()
method songListener (line 72) | void songListener()
method setShowLyrics (line 82) | void setShowLyrics()
method updateBackgroundColor (line 90) | Future<void> updateBackgroundColor(ImageProvider image)
method build (line 113) | Widget build(BuildContext context)
class Artwork (line 381) | class Artwork extends StatelessWidget {
method build (line 397) | Widget build(BuildContext context)
class NameAndControls (line 449) | class NameAndControls extends StatelessWidget {
method build (line 463) | Widget build(BuildContext context)
FILE: lib/screens/player/widgets/lyrics_box.dart
class LyricsBox (line 12) | class LyricsBox extends StatefulWidget {
method createState (line 18) | State<LyricsBox> createState()
class _LyricsBoxState (line 21) | class _LyricsBoxState extends State<LyricsBox> {
method initState (line 26) | void initState()
method _initFetchLyrics (line 32) | void _initFetchLyrics()
method _progressListener (line 40) | void _progressListener()
method _initWakelock (line 47) | void _initWakelock()
method _updateWakelock (line 51) | void _updateWakelock()
method didUpdateWidget (line 63) | void didUpdateWidget(covariant LyricsBox oldWidget)
method _fetchLyrics (line 70) | void _fetchLyrics()
method dispose (line 101) | void dispose()
method build (line 109) | Widget build(BuildContext context)
FILE: lib/screens/player/widgets/play_pause_button.dart
class PlayPauseButton (line 7) | class PlayPauseButton extends StatefulWidget {
method createState (line 16) | State<PlayPauseButton> createState()
class _PlayPauseButtonState (line 19) | class _PlayPauseButtonState extends State<PlayPauseButton>
method initState (line 25) | void initState()
method dispose (line 34) | void dispose()
method build (line 40) | Widget build(BuildContext context)
FILE: lib/screens/player/widgets/queue_list.dart
class QueueList (line 11) | class QueueList extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
class QueueTile (line 101) | class QueueTile extends StatelessWidget {
method build (line 114) | Widget build(BuildContext context)
class ArtworkWidget (line 144) | class ArtworkWidget extends StatelessWidget {
method build (line 155) | Widget build(BuildContext context)
FILE: lib/screens/search/cubit/search_cubit.dart
class SearchCubit (line 10) | class SearchCubit extends Cubit<SearchState> {
method search (line 22) | Future<void> search(String query)
method fetchNext (line 41) | Future<void> fetchNext()
method getSuggestions (line 62) | Future<List<Map<String, dynamic>>> getSuggestions(String query)
FILE: lib/screens/search/cubit/search_state.dart
class SearchState (line 3) | @immutable
class SearchInitial (line 8) | final class SearchInitial extends SearchState{
class SearchLoading (line 12) | final class SearchLoading extends SearchState {
class SearchError (line 16) | final class SearchError extends SearchState {
class SearchSuccess (line 22) | final class SearchSuccess extends SearchState {
method copyWith (line 32) | SearchSuccess copyWith({
FILE: lib/screens/search/search_page.dart
class SearchPage (line 21) | class SearchPage extends StatelessWidget {
method build (line 27) | Widget build(BuildContext context)
class _SearchPage (line 35) | class _SearchPage extends StatefulWidget {
method createState (line 41) | State<_SearchPage> createState()
class _SearchPageState (line 44) | class _SearchPageState extends State<_SearchPage> with WidgetsBindingObs...
method initState (line 51) | void initState()
method dispose (line 60) | void dispose()
method didChangeMetrics (line 70) | void didChangeMetrics()
method _scrollListener (line 81) | Future<void> _scrollListener()
method onSubmit (line 88) | Future<void> onSubmit(String query)
method build (line 95) | Widget build(BuildContext context)
class _SearchSectionItem (line 271) | class _SearchSectionItem extends StatelessWidget {
method build (line 282) | Widget build(BuildContext context)
class _SearchListTile (line 344) | class _SearchListTile extends StatelessWidget {
method build (line 348) | Widget build(BuildContext context)
FILE: lib/screens/settings/about/about_page.dart
class AboutPage (line 12) | class AboutPage extends StatefulWidget {
method createState (line 16) | State<AboutPage> createState()
class _AboutPageState (line 19) | class _AboutPageState extends State<AboutPage> {
method initState (line 23) | void initState()
method _loadVersion (line 28) | Future<void> _loadVersion()
method _open (line 38) | void _open(String url)
method build (line 43) | Widget build(BuildContext context)
FILE: lib/screens/settings/appearance/appearance_page.dart
class AppearancePage (line 17) | class AppearancePage extends StatelessWidget {
method build (line 21) | Widget build(BuildContext context)
FILE: lib/screens/settings/appearance/cubit/appearance_cubit.dart
class AppearanceCubit (line 8) | class AppearanceCubit extends Cubit<AppearanceState> {
method _emitState (line 31) | void _emitState()
method setThemeMode (line 44) | Future<void> setThemeMode(ThemeMode mode)
method setAmoledBlack (line 49) | void setAmoledBlack(bool value)
method setDynamicColors (line 53) | void setDynamicColors(bool value)
method close (line 58) | Future<void> close()
FILE: lib/screens/settings/appearance/cubit/appearance_state.dart
class AppearanceState (line 3) | @immutable
class AppearanceLoaded (line 8) | class AppearanceLoaded extends AppearanceState {
FILE: lib/screens/settings/backup_storage/backup_storage_page.dart
class BackupStoragePage (line 19) | class BackupStoragePage extends StatelessWidget {
method build (line 23) | Widget build(BuildContext context)
class _BackupStoragePage (line 51) | class _BackupStoragePage extends StatelessWidget {
method build (line 55) | Widget build(BuildContext context)
function showBackupSelector (line 155) | Future<(String, List)?> showBackupSelector(BuildContext context)
function _backupActionButton (line 236) | Widget _backupActionButton(
FILE: lib/screens/settings/backup_storage/cubit/backup_storage_cubit.dart
class BackupStorageCubit (line 14) | class BackupStorageCubit extends Cubit<BackupStorageState> {
method _emit (line 33) | void _emit()
method setAppFolder (line 43) | Future<void> setAppFolder(String path)
method restore (line 48) | Future<void> restore()
method backup (line 61) | Future<void> backup({required String action, required List items})
method close (line 113) | Future<void> close()
FILE: lib/screens/settings/backup_storage/cubit/backup_storage_state.dart
class BackupStorageState (line 3) | @immutable
method copyWith (line 17) | BackupStorageState copyWith({
class BackupResult (line 30) | sealed class BackupResult {
class BackupSuccess (line 34) | class BackupSuccess extends BackupResult {
class BackupFailure (line 39) | class BackupFailure extends BackupResult {
class RestoreSuccess (line 43) | class RestoreSuccess extends BackupResult {
class RestoreFailure (line 47) | class RestoreFailure extends BackupResult {
FILE: lib/screens/settings/cubit/settings_system_cubit.dart
class SettingsSystemCubit (line 9) | class SettingsSystemCubit extends Cubit<SettingsSystemState> {
method load (line 12) | Future<void> load()
method requestBatteryOptimizationIgnore (line 29) | Future<void> requestBatteryOptimizationIgnore()
FILE: lib/screens/settings/cubit/settings_system_state.dart
class SettingsSystemState (line 3) | @immutable
class SettingsSystemInitial (line 8) | class SettingsSystemInitial extends SettingsSystemState {
class SettingsSystemLoaded (line 12) | class SettingsSystemLoaded extends SettingsSystemState {
FILE: lib/screens/settings/player/cubit/player_settings_cubit.dart
class PlayerSettingsCubit (line 10) | class PlayerSettingsCubit extends Cubit<PlayerSettingsState> {
method _emitState (line 31) | void _emitState()
method setSkipSilence (line 41) | Future<void> setSkipSilence(bool value)
method close (line 48) | Future<void> close()
FILE: lib/screens/settings/player/cubit/player_settings_state.dart
class PlayerSettingsState (line 3) | @immutable
class PlayerSettingsLoaded (line 8) | class PlayerSettingsLoaded extends PlayerSettingsState {
FILE: lib/screens/settings/player/equalizer/cubit/equalizer_cubit.dart
class EqualizerCubit (line 7) | class EqualizerCubit extends Cubit<EqualizerState> {
method _getEqualizerParameters (line 14) | Future<void> _getEqualizerParameters()
method toggle (line 27) | Future<void> toggle(bool enabled)
method setBandGain (line 33) | Future<void> setBandGain(int index, double gain)
FILE: lib/screens/settings/player/equalizer/cubit/equalizer_state.dart
class EqualizerState (line 3) | @immutable
class EqualizerLoading (line 8) | class EqualizerLoading extends EqualizerState {
class EqualizerLoaded (line 12) | class EqualizerLoaded extends EqualizerState {
FILE: lib/screens/settings/player/equalizer/cubit/loudness_cubit.dart
class LoudnessCubit (line 7) | class LoudnessCubit extends Cubit<LoudnessState> {
method toggle (line 18) | Future<void> toggle(bool enabled)
method setTargetGain (line 23) | Future<void> setTargetGain(double gain)
FILE: lib/screens/settings/player/equalizer/cubit/loudness_state.dart
class LoudnessState (line 3) | @immutable
method copyWith (line 13) | LoudnessState copyWith({
FILE: lib/screens/settings/player/equalizer/equalizer_page.dart
class EqualizerPage (line 12) | class EqualizerPage extends StatelessWidget {
method build (line 16) | Widget build(BuildContext context)
class _EqualizerView (line 27) | class _EqualizerView extends StatelessWidget {
method build (line 31) | Widget build(BuildContext context)
FILE: lib/screens/settings/player/player_settings_page.dart
class PlayerSettingsPage (line 14) | class PlayerSettingsPage extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/screens/settings/privacy/cubit/privacy_cubit.dart
class PrivacyCubit (line 9) | class PrivacyCubit extends Cubit<PrivacyState> {
method _load (line 19) | void _load()
method togglePlaybackHistory (line 28) | Future<void> togglePlaybackHistory(bool value)
method toggleSearchHistory (line 33) | Future<void> toggleSearchHistory(bool value)
method clearPlaybackHistory (line 38) | Future<void> clearPlaybackHistory()
method clearSearchHistory (line 43) | Future<void> clearSearchHistory()
method consumeAction (line 48) | void consumeAction()
FILE: lib/screens/settings/privacy/cubit/privacy_state.dart
type PrivacyAction (line 3) | enum PrivacyAction {
class PrivacyState (line 8) | class PrivacyState {
method copyWith (line 24) | PrivacyState copyWith({
FILE: lib/screens/settings/privacy/privacy_page.dart
class PrivacyPage (line 16) | class PrivacyPage extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
class _PrivacyView (line 49) | class _PrivacyView extends StatelessWidget {
method build (line 53) | Widget build(BuildContext context)
FILE: lib/screens/settings/services/yt_music/cubit/ytmusic_cubit.dart
class YTMusicCubit (line 11) | class YTMusicCubit extends Cubit<YTMusicState> {
method _emit (line 40) | void _emit()
method setLocation (line 57) | void setLocation(Map<String, String> location)
method setLanguage (line 61) | void setLanguage(Map<String, String> language)
method setAutofetchSongs (line 65) | void setAutofetchSongs(bool value)
method setStreamingQuality (line 69) | void setStreamingQuality(AudioQuality quality)
method setDownloadQuality (line 73) | void setDownloadQuality(AudioQuality quality)
method setTranslateLyrics (line 77) | Future<void> setTranslateLyrics(bool value)
method setPersonalisedContent (line 81) | Future<void> setPersonalisedContent(bool value)
method setVisitorId (line 89) | Future<void> setVisitorId(String id)
method resetVisitorId (line 94) | Future<void> resetVisitorId()
method close (line 102) | Future<void> close()
FILE: lib/screens/settings/services/yt_music/cubit/ytmusic_state.dart
class YTMusicState (line 3) | @immutable
method copyWith (line 27) | YTMusicState copyWith({
FILE: lib/screens/settings/services/yt_music/yt_music_page.dart
class YTMusicPage (line 19) | class YTMusicPage extends StatelessWidget {
method _setLocation (line 22) | Future<void> _setLocation(
method _setLanguage (line 49) | Future<void> _setLanguage(
method _setStreamingQuality (line 76) | Future<void> _setStreamingQuality(
method _setDownloadingQuality (line 103) | Future<void> _setDownloadingQuality(
method build (line 131) | Widget build(BuildContext context)
FILE: lib/screens/settings/settings_page.dart
class SettingsPage (line 21) | class SettingsPage extends StatelessWidget {
method build (line 25) | Widget build(BuildContext context)
class _BatteryWarningTile (line 186) | class _BatteryWarningTile extends StatelessWidget {
method build (line 188) | Widget build(BuildContext context)
function showPaymentsModal (line 216) | void showPaymentsModal(BuildContext context)
FILE: lib/screens/settings/widgets/color_icon.dart
class ColorIcon (line 3) | class ColorIcon extends StatelessWidget {
method build (line 21) | Widget build(BuildContext context)
class SettingsColorIcon (line 33) | class SettingsColorIcon extends StatelessWidget {
method build (line 39) | Widget build(BuildContext context)
FILE: lib/screens/settings/widgets/setting_item.dart
class GroupTitle (line 3) | class GroupTitle extends StatelessWidget {
method build (line 8) | Widget build(BuildContext context)
class SettingEmptyTile (line 22) | class SettingEmptyTile extends StatelessWidget {
method build (line 35) | Widget build(BuildContext context)
class SettingTile (line 64) | class SettingTile extends StatelessWidget {
method build (line 86) | Widget build(BuildContext context)
class SettingSwitchTile (line 137) | class SettingSwitchTile extends StatelessWidget {
method build (line 158) | Widget build(BuildContext context)
FILE: lib/screens/shell/app_shell.dart
class AppShell (line 13) | class AppShell extends StatefulWidget {
method createState (line 19) | State<AppShell> createState()
class _AppShellState (line 22) | class _AppShellState extends State<AppShell> {
method initState (line 25) | void initState()
method _handleIntent (line 43) | void _handleIntent(SharedMediaFile value)
method dispose (line 66) | void dispose()
method _goBranch (line 71) | void _goBranch(int index)
method build (line 79) | Widget build(BuildContext context)
FILE: lib/screens/shell/widgets/bottom_player.dart
class BottomPlayer (line 11) | class BottomPlayer extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
FILE: lib/services/bottom_message.dart
class BottomMessage (line 7) | class BottomMessage {
method showText (line 8) | void showText(BuildContext context, String text,
FILE: lib/services/download_manager.dart
class DownloadCanceledException (line 20) | class DownloadCanceledException implements Exception {}
class DownloadManager (line 22) | class DownloadManager {
method songListenable (line 36) | Listenable songListenable(String songId)
method getDownload (line 40) | Map? getDownload(String songId)
method getCleanSong (line 44) | Map getCleanSong(Map song)
method getDownloadedSongs (line 52) | List? getDownloadedSongs(String? playlistId)
method reInit (line 73) | Future<void> reInit()
method create (line 78) | Future<DownloadManager> create()
method _cleanAndMigrateData (line 85) | Future<void> _cleanAndMigrateData()
method _refreshData (line 132) | Future<void> _refreshData()
method getDownloadQueue (line 193) | List<Map> getDownloadQueue()
method getProgressNotifier (line 197) | ValueNotifier<double>? getProgressNotifier(String videoId)
method _startTrackingProgress (line 201) | void _startTrackingProgress(String videoId)
method _updateTrackingProgress (line 206) | void _updateTrackingProgress(String videoId, double value)
method _stopTrackingProgress (line 210) | void _stopTrackingProgress(String videoId)
method restoreDownloads (line 217) | Future<void> restoreDownloads({List? songs})
method setDownloads (line 235) | Future<void> setDownloads(Map downloads)
method downloadSong (line 241) | Future<void> downloadSong(Map songToDownaload)
method _downloadSong (line 289) | Future<void> _downloadSong(Map song)
method _updateSongMetadata (line 351) | Future<void> _updateSongMetadata(String key, Map newMetadata)
method _downloadStart (line 373) | Future<bool> _downloadStart(Map song)
method _ensureActive (line 383) | void _ensureActive(Map song)
method _downloadEnd (line 389) | void _downloadEnd(Map song)
method _downloadNext (line 395) | void _downloadNext()
method _deleteSongInstance (line 402) | Future<void> _deleteSongInstance(Map song)
method deleteSong (line 419) | Future<String> deleteSong({
method deleteAllSongs (line 444) | Future<void> deleteAllSongs()
method updateStatus (line 451) | Future<void> updateStatus(String key, String status)
method _getSongs (line 459) | Future<List> _getSongs({
method downloadPlaylist (line 482) | Future<void> downloadPlaylist(Map playlist)
method _getSongInfo (line 503) | Future<AudioOnlyStreamInfo> _getSongInfo(
FILE: lib/services/favourites_manager.dart
class FavouritesManager (line 4) | class FavouritesManager {
method create (line 23) | Future<FavouritesManager> create()
method getOrderedSongs (line 30) | List getOrderedSongs()
method isFavourite (line 36) | bool isFavourite(Map? song)
method add (line 41) | Future<void> add(Map? song)
method remove (line 50) | Future<void> remove(Map? song)
method addOrRemove (line 56) | Future<void> addOrRemove(Map? song)
method setFavourites (line 66) | Future<void> setFavourites(Map favourites)
FILE: lib/services/file_storage.dart
class FileStorage (line 21) | class FileStorage {
method create (line 26) | Future<FileStorage> create()
method setupPaths (line 32) | Future<void> setupPaths()
method saveBackUp (line 43) | Future<String> saveBackUp(Map data)
method shareBackUp (line 62) | Future<String> shareBackUp(Map data)
method saveMusic (line 79) | Future<File?> saveMusic(List<int> data, Map song, {extension = 'm4a'})
method loadBackup (line 123) | Future<bool> loadBackup()
method _getAppDirectory (line 163) | Future<Directory> _getAppDirectory()
method _getDirectory (line 177) | Future<Directory> _getDirectory(String pathString)
method requestPermissions (line 185) | Future<bool> requestPermissions()
method _getAndroidSdkInt (line 227) | Future<int?> _getAndroidSdkInt()
class StoragePaths (line 241) | class StoragePaths {
FILE: lib/services/history_manager.dart
class HistoryManager (line 6) | class HistoryManager {
method create (line 12) | Future<HistoryManager> create()
class SearchHistory (line 20) | class SearchHistory {
method create (line 25) | Future<SearchHistory> create()
method getList (line 34) | List<Map<String, dynamic>> getList({String? filter})
method add (line 46) | Future<void> add(String value)
method clear (line 53) | Future<void> clear()
class SongHistory (line 58) | class SongHistory {
method create (line 63) | Future<SongHistory> create()
method getList (line 74) | List getList()
method add (line 80) | Future<void> add(Map song)
method remove (line 101) | Future<void> remove(Map song)
method clear (line 105) | Future<void> clear()
method setHistory (line 109) | Future<void> setHistory(Map history)
FILE: lib/services/library.dart
class LibraryService (line 6) | class LibraryService extends ChangeNotifier {
method create (line 14) | Future<LibraryService> create()
method _init (line 22) | void _init()
method getPlaylist (line 34) | Map? getPlaylist(String playlistId)
method reInit (line 36) | Future<void> reInit()
method _migrateLibIcons (line 42) | Future<void> _migrateLibIcons()
method createPlaylist (line 52) | Future<String> createPlaylist(
method importPlaylist (line 75) | Future<String> importPlaylist(String playlistUrl)
method addToOrRemoveFromLibrary (line 108) | Future<String> addToOrRemoveFromLibrary(Map item)
method editPlaylist (line 125) | Future<String> editPlaylist({
method removeFromLibrary (line 144) | Future<String> removeFromLibrary(String key)
method addToPlaylist (line 154) | Future<String> addToPlaylist({required Map item, required String key})
method removeFromPlaylist (line 168) | Future<String> removeFromPlaylist({
method setPlaylists (line 185) | Future setPlaylists(Map value)
FILE: lib/services/lyrics.dart
class Lyrics (line 7) | class Lyrics {
method getLyrics (line 9) | Future<Map<String, dynamic>> getLyrics({
method fixLrcFormat (line 58) | void fixLrcFormat(Map lrc)
method fetchLyrics (line 67) | Future<Map> fetchLyrics({
method translateSyncLyrics (line 119) | Future<String?> translateSyncLyrics(
method translatePlainLyrics (line 139) | Future<String?> translatePlainLyrics(
FILE: lib/services/media_player.dart
class MediaPlayer (line 16) | class MediaPlayer extends ChangeNotifier {
method _startSession (line 71) | Object _startSession()
method _isSessionValid (line 72) | bool _isSessionValid(Object? session)
method _init (line 109) | Future<void> _init()
method _loadLoudnessEnhancer (line 135) | Future<void> _loadLoudnessEnhancer()
method getEqualizerParameters (line 145) | Future<Map> getEqualizerParameters()
method _loadEqualizer (line 155) | Future<void> _loadEqualizer()
method setLoudnessEnabled (line 178) | Future<void> setLoudnessEnabled(bool value)
method setEqualizerEnabled (line 183) | Future<void> setEqualizerEnabled(bool value)
method setLoudnessTargetGain (line 188) | Future<void> setLoudnessTargetGain(double value)
method setEqualizerBandGain (line 193) | Future<void> setEqualizerBandGain(int bandIndex, double gain)
method _listenToChangesInPlaylist (line 199) | void _listenToChangesInPlaylist()
method _listenToPlaybackState (line 229) | void _listenToPlaybackState()
method _listenToCurrentPosition (line 247) | void _listenToCurrentPosition()
method _listenToBufferedPosition (line 260) | void _listenToBufferedPosition()
method _listenToTotalDuration (line 273) | void _listenToTotalDuration()
method _listenToShuffle (line 286) | void _listenToShuffle()
method _listenToChangesInSong (line 293) | void _listenToChangesInSong()
method _fetchAndQueueSongs (line 310) | Future<List> _fetchAndQueueSongs({
method changeLoopMode (line 347) | void changeLoopMode()
method skipSilence (line 362) | Future<void> skipSilence(bool value)
method _getAudioSource (line 367) | Future<AudioSource> _getAudioSource(Map<String, dynamic> song)
method _getAudioSources (line 398) | Future<List<AudioSource>> _getAudioSources(List songs)
method _getPlaylistSongs (line 407) | Future<List> _getPlaylistSongs({
method playSong (line 426) | Future<void> playSong(Map<String, dynamic> song)
method playNext (line 439) | Future<void> playNext(Map<String, dynamic> mediaItem)
method playAll (line 470) | Future<void> playAll(List songs, {int index = 0})
method addToQueue (line 483) | Future<void> addToQueue(Map<String, dynamic> mediaItem)
method startRelated (line 507) | Future<void> startRelated(
method startPlaylistSongs (line 532) | Future<void> startPlaylistSongs(Map endpoint)
method stop (line 549) | Future<void> stop()
method _addSongListToQueue (line 559) | Future<void> _addSongListToQueue(
method _listenToAutofetch (line 587) | void _listenToAutofetch()
method setTimer (line 607) | void setTimer(Duration duration)
method cancelTimer (line 621) | void cancelTimer()
type ButtonState (line 628) | enum ButtonState { loading, paused, playing }
type LoopState (line 630) | enum LoopState { off, all, one }
class ProgressBarState (line 632) | class ProgressBarState {
function toMap (line 644) | Map<String, dynamic> toMap()
FILE: lib/services/settings_manager.dart
class SettingsManager (line 5) | class SettingsManager extends ChangeNotifier {
method create (line 83) | Future<SettingsManager> create()
method _init (line 90) | void _init()
method setThemeMode (line 127) | Future<void> setThemeMode(ThemeMode mode)
method setEqualizerParameters (line 249) | Future<void> setEqualizerParameters(Map value)
method setEqualizerBandsGain (line 255) | Future<void> setEqualizerBandsGain(int index, double value)
method setSettings (line 274) | Future<void> setSettings(Map value)
function getDarkness (line 283) | bool getDarkness(int themeMode)
type AudioQuality (line 297) | enum AudioQuality { high, low }
FILE: lib/services/stream_client.dart
class AudioStreamClient (line 6) | class AudioStreamClient {
method getAudioStream (line 25) | Stream<List<int>> getAudioStream(StreamInfo streamInfo,
method _getStream (line 29) | Stream<List<int>> _getStream(
method _validateResponse (line 99) | void _validateResponse(http.BaseResponse response, int statusCode)
method retry (line 120) | Future<T> retry<T>(
method getExceptionCost (line 141) | int getExceptionCost(Exception e)
method send (line 151) | Future<http.StreamedResponse> send(http.BaseRequest request)
FILE: lib/services/update_service/models/update_info.dart
class UpdateInfo (line 3) | class UpdateInfo {
FILE: lib/services/update_service/update_service.dart
class UpdateService (line 13) | class UpdateService {
method checkForUpdate (line 20) | Future<UpdateInfo?> checkForUpdate()
method autoCheck (line 102) | Future<void> autoCheck(BuildContext context)
method manualCheck (line 108) | Future<void> manualCheck(BuildContext context)
method showUpdateDialog (line 130) | Future<void> showUpdateDialog(BuildContext context, UpdateInfo info)
method _selectAsset (line 141) | Future<Map?> _selectAsset(List assets)
FILE: lib/services/update_service/widgets/update_checking.dart
class UpdateCheckingDialog (line 3) | class UpdateCheckingDialog extends StatelessWidget {
method build (line 7) | Widget build(BuildContext context)
FILE: lib/services/update_service/widgets/update_dialog.dart
class UpdateDialog (line 6) | class UpdateDialog extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
FILE: lib/services/yt_audio_stream.dart
class YouTubeAudioSource (line 10) | class YouTubeAudioSource extends StreamAudioSource {
method request (line 19) | Future<StreamAudioResponse> request([int? start, int? end])
function createAudioStreamServer (line 65) | Future<String> createAudioStreamServer()
function handleAudioRequest (line 93) | Future<void> handleAudioRequest(HttpRequest request)
function parseRange (line 141) | (int start, int end)? parseRange(String rangeHeader, int totalLength)
FILE: lib/themes/dark.dart
function darkTheme (line 17) | ThemeData darkTheme({required ColorScheme colorScheme})
FILE: lib/themes/light.dart
function lightTheme (line 7) | ThemeData lightTheme({required ColorScheme colorScheme})
FILE: lib/themes/text_styles.dart
function bigTextStyle (line 5) | TextStyle bigTextStyle(BuildContext context,
function mediumTextStyle (line 14) | TextStyle mediumTextStyle(BuildContext context,
function textStyle (line 23) | TextStyle textStyle(BuildContext context,
function subtitleTextStyle (line 32) | TextStyle subtitleTextStyle(BuildContext context,
function smallTextStyle (line 41) | TextStyle smallTextStyle(BuildContext context,
function tinyTextStyle (line 50) | TextStyle tinyTextStyle(BuildContext context,
function customTextStyle (line 59) | TextStyle customTextStyle(BuildContext context,
FILE: lib/themes/theme.dart
class AppTheme (line 6) | class AppTheme {
method light (line 7) | ThemeData light({Color? primary})
method dark (line 35) | ThemeData dark({Color? primary, bool isPureBlack = false})
FILE: lib/themes/typography.dart
function appTextTheme (line 3) | TextTheme appTextTheme(TextTheme? textTheme)
FILE: lib/utils/adaptive_widgets/appbar.dart
class AdaptiveAppBar (line 5) | class AdaptiveAppBar extends StatelessWidget implements PreferredSizeWid...
method build (line 39) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/buttons.dart
class AdaptiveButton (line 5) | class AdaptiveButton extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
class AdaptiveFilledButton (line 22) | class AdaptiveFilledButton extends StatelessWidget {
method build (line 38) | Widget build(BuildContext context)
class AdaptiveOutlinedButton (line 52) | class AdaptiveOutlinedButton extends StatelessWidget {
method build (line 60) | Widget build(BuildContext context)
class AdaptiveIconButton (line 74) | class AdaptiveIconButton extends StatelessWidget {
method build (line 88) | Widget build(BuildContext context)
class AdaptiveBackButton (line 99) | class AdaptiveBackButton extends StatelessWidget {
method build (line 103) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/card.dart
class Adaptivecard (line 3) | class Adaptivecard extends StatelessWidget {
method build (line 22) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/dropdown_button.dart
class AdaptiveDropdownButton (line 3) | class AdaptiveDropdownButton<T> extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
class AdaptiveDropdownMenuItem (line 40) | class AdaptiveDropdownMenuItem<T> {
FILE: lib/utils/adaptive_widgets/icons.dart
class AdaptiveIcons (line 6) | abstract final class AdaptiveIcons {
method volume (line 35) | IconData volume(double range)
FILE: lib/utils/adaptive_widgets/inkwell.dart
class AdaptiveInkWell (line 7) | class AdaptiveInkWell extends StatelessWidget {
method build (line 34) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/listtile.dart
class AdaptiveListTile (line 8) | class AdaptiveListTile extends StatelessWidget {
method build (line 47) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/no_splash_factory.dart
class NoSplashFactory (line 3) | class NoSplashFactory extends InteractiveInkFeatureFactory {
method create (line 7) | InteractiveInkFeature create({
class NoSplash (line 28) | class NoSplash extends InteractiveInkFeature {
method paintFeature (line 39) | void paintFeature(Canvas canvas, Matrix4 transform)
FILE: lib/utils/adaptive_widgets/progress_ring.dart
class AdaptiveProgressRing (line 3) | class AdaptiveProgressRing extends StatelessWidget {
method build (line 23) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/scaffold.dart
class AdaptiveScaffold (line 3) | class AdaptiveScaffold extends StatelessWidget {
method build (line 14) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/slider.dart
class AdaptiveSlider (line 3) | class AdaptiveSlider extends StatelessWidget {
method build (line 24) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/switch.dart
class AdaptiveSwitch (line 3) | class AdaptiveSwitch extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/text_field.dart
class AdaptiveTextField (line 3) | class AdaptiveTextField extends StatelessWidget {
method build (line 43) | Widget build(BuildContext context)
FILE: lib/utils/adaptive_widgets/theme.dart
class AdaptiveTheme (line 3) | class AdaptiveTheme {
method getMaterialTheme (line 4) | ThemeData getMaterialTheme(BuildContext context)
method of (line 8) | AdaptiveThemeData of(BuildContext context)
class AdaptiveThemeData (line 19) | class AdaptiveThemeData {
FILE: lib/utils/add_history.dart
function addHistory (line 8) | Future<void> addHistory(Map song)
FILE: lib/utils/bottom_modals.dart
class Modals (line 34) | class Modals {
method showCenterLoadingModal (line 35) | Future showCenterLoadingModal(BuildContext context, {String? title})
method showTextField (line 60) | Future<String?> showTextField(
method showSelection (line 81) | Future<T?> showSelection<T>(
method showSongBottomModal (line 95) | void showSongBottomModal(BuildContext context, Map song)
method showPlayerOptionsModal (line 106) | void showPlayerOptionsModal(BuildContext context, Map song)
method showPlaylistBottomModal (line 117) | void showPlaylistBottomModal(BuildContext context, Map playlist)
method showFavouritesBottomModal (line 128) | void showFavouritesBottomModal(BuildContext context, Map playlist)
method showDownloadBottomModal (line 139) | void showDownloadBottomModal(BuildContext context)
method showDownloadDetailsBottomModal (line 150) | void showDownloadDetailsBottomModal(
method showArtistsBottomModal (line 164) | Future showArtistsBottomModal(
method showCreateplaylistModal (line 181) | void showCreateplaylistModal(BuildContext context, {Map? item})
method showSelectPlaylistIconModal (line 204) | Future<PlaylistIcon?> showSelectPlaylistIconModal(
method showImportplaylistModal (line 218) | void showImportplaylistModal(BuildContext context, {Map? item})
method showEditPlaylistBottomModal (line 229) | void showEditPlaylistBottomModal(
method addToPlaylist (line 258) | void addToPlaylist(BuildContext context, Map item)
method showConfirmBottomModal (line 269) | Future<bool> showConfirmBottomModal(
method showAccentSelector (line 293) | void showAccentSelector(BuildContext context)
function _confirmBottomModal (line 305) | BottomModalLayout _confirmBottomModal(
function _editPlaylistBottomModal (line 349) | Widget _editPlaylistBottomModal(
function _artistsBottomModal (line 449) | BottomModalLayout _artistsBottomModal(
function _createPlaylistModal (line 497) | Widget _createPlaylistModal(
function _selectPlaylistIconModal (line 606) | Widget _selectPlaylistIconModal(BuildContext context)
function _importPlaylistModal (line 632) | Widget _importPlaylistModal(BuildContext context)
function _addToPlaylist (line 713) | BottomModalLayout _addToPlaylist(BuildContext context, Map item)
function _textFieldBottomModal (line 862) | Widget _textFieldBottomModal(
function _playerOptionsModal (line 925) | BottomModalLayout _playerOptionsModal(BuildContext context, Map song)
function _showSelection (line 1103) | BottomModalLayout _showSelection(
function _songBottomModal (line 1128) | BottomModalLayout _songBottomModal(BuildContext context, Map song)
function _playlistBottomModal (line 1264) | BottomModalLayout _playlistBottomModal(BuildContext context, Map playlist)
function _favouritesBottomModal (line 1463) | BottomModalLayout _favouritesBottomModal(BuildContext context, Map playl...
function _downloadBottomModal (line 1517) | BottomModalLayout _downloadBottomModal(BuildContext context)
function _downloadDetailsBottomModal (line 1586) | BottomModalLayout _downloadDetailsBottomModal(
function _accentSelector (line 1719) | BottomModalLayout _accentSelector(BuildContext context)
class BottomModalLayout (line 1757) | class BottomModalLayout extends StatelessWidget {
method build (line 1769) | Widget build(BuildContext context)
class SelectionItem (line 1834) | class SelectionItem<T> {
FILE: lib/utils/enhanced_image.dart
function getEnhancedImage (line 1) | String getEnhancedImage(String imageUrl,
FILE: lib/utils/format_duration.dart
function formatDuration (line 1) | String formatDuration(Duration duration)
function twoDigits (line 2) | String twoDigits(int n)
FILE: lib/utils/playlist_icon.dart
class PlaylistIcon (line 4) | abstract class PlaylistIcon {
method toId (line 9) | String toId()
class MaterialPlaylistIcon (line 12) | class MaterialPlaylistIcon extends PlaylistIcon {
class PolygonPlaylistIcon (line 18) | class PolygonPlaylistIcon extends PlaylistIcon {
FILE: lib/utils/playlist_icon_widget.dart
class MaterialIconWidget (line 6) | class MaterialIconWidget extends StatelessWidget {
method build (line 13) | Widget build(BuildContext context)
class PolygonIconWidget (line 22) | class PolygonIconWidget extends StatelessWidget {
method build (line 29) | Widget build(BuildContext context)
class PlaylistIconWidget (line 38) | class PlaylistIconWidget extends StatelessWidget {
method build (line 45) | Widget build(BuildContext context)
FILE: lib/utils/playlist_icons.dart
class PlaylistIcons (line 7) | class PlaylistIcons {
method byId (line 126) | PlaylistIcon byId(String id)
FILE: lib/utils/playlist_thumbnail.dart
class PlaylistThumbnail (line 7) | class PlaylistThumbnail extends StatefulWidget {
method createState (line 20) | State<PlaylistThumbnail> createState()
class _PlaylistThumbnailState (line 23) | class _PlaylistThumbnailState extends State<PlaylistThumbnail> {
method initState (line 27) | void initState()
method didUpdateWidget (line 33) | void didUpdateWidget(covariant PlaylistThumbnail oldWidget)
method _calculateItems (line 38) | void _calculateItems({bool forceUpdate = false})
method build (line 58) | Widget build(BuildContext context)
FILE: lib/utils/pprint.dart
function pprint (line 4) | void pprint(Object? data)
FILE: lib/utils/router.dart
class MyPageView (line 192) | class MyPageView extends StatefulWidget {
method createState (line 200) | MyPageViewState createState()
class MyPageViewState (line 203) | class MyPageViewState extends State<MyPageView> {
method initState (line 207) | void initState()
method didUpdateWidget (line 212) | void didUpdateWidget(covariant MyPageView oldWidget)
method build (line 221) | Widget build(BuildContext context)
FILE: lib/utils/song_thumbnail.dart
class SongThumbnail (line 9) | class SongThumbnail extends StatefulWidget {
method createState (line 32) | State<SongThumbnail> createState()
class _SongThumbnailState (line 35) | class _SongThumbnailState extends State<SongThumbnail> {
method initState (line 41) | void initState()
method didUpdateWidget (line 47) | void didUpdateWidget(covariant SongThumbnail oldWidget)
method _checkLocalThumbnail (line 59) | Future<void> _checkLocalThumbnail()
method _buildDisplayImage (line 86) | Widget _buildDisplayImage(ImageProvider provider)
method _buildCachedNetworkImage (line 105) | Widget _buildCachedNetworkImage(List<String> urls, int index)
method build (line 124) | Widget build(BuildContext context)
FILE: lib/utils/text_controller_builder.dart
class TextControllerBuilder (line 3) | class TextControllerBuilder extends StatefulWidget {
method createState (line 15) | State<TextControllerBuilder> createState()
class _TextControllerBuilderState (line 18) | class _TextControllerBuilderState extends State<TextControllerBuilder> {
method initState (line 22) | void initState()
method dispose (line 28) | void dispose()
method build (line 34) | Widget build(BuildContext context)
FILE: test/widget_test.dart
function main (line 13) | void main()
Condensed preview — 216 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,014K chars).
[
{
"path": ".fvmrc",
"chars": 25,
"preview": "{\n \"flutter\": \"3.41.4\"\n}"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 1365,
"preview": "name: Bug report\ndescription: Report a bug in the app (stable or beta)\nlabels: [\"bug\"]\nbody:\n - type: dropdown\n id: "
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 208,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: Questions and support\n url: https://github.com/sheikhhaziq/gyawun"
},
{
"path": ".github/workflows/auto-label-issues.yml",
"chars": 1249,
"preview": "name: Auto-label issues by release channel\n\non:\n issues:\n types: [opened]\n\npermissions:\n issues: write\n\njobs:\n lab"
},
{
"path": ".github/workflows/beta-release.yml",
"chars": 4805,
"preview": "name: Beta Release\n\non:\n push:\n tags:\n - 'v*-beta.*'\n\njobs:\n beta-release:\n if: \"contains(github.ref, '-bet"
},
{
"path": ".github/workflows/branch-protection-check.yml",
"chars": 800,
"preview": "name: Branch Protection Check\n\non:\n pull_request:\n branches:\n - stable\n - beta\n\njobs:\n check-pr-source:\n "
},
{
"path": ".github/workflows/stable-release.yml",
"chars": 4663,
"preview": "name: Stable Release\n\non:\n push:\n tags:\n - 'v[0-9]*.[0-9]*.[0-9]*'\n\njobs:\n stable-release:\n if: \"!contains("
},
{
"path": ".gitignore",
"chars": 1026,
"preview": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\nmigrate_working_dir/\n\n# IntelliJ re"
},
{
"path": ".metadata",
"chars": 966,
"preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
},
{
"path": ".vscode/launch.json",
"chars": 697,
"preview": "{\n // Use IntelliSense to learn about possible attributes.\n // Hover to view descriptions of existing attributes.\n"
},
{
"path": ".vscode/settings.json",
"chars": 136,
"preview": "{\n \"cmake.sourceDirectory\": \"/home/sheikh-haziq/Development/Jhelum/gyawun-app/linux\",\n \"dart.flutterSdkPath\": \".fvm/ve"
},
{
"path": "CONTRIBUTING.md",
"chars": 3247,
"preview": "# Contributing Guide\n\nThank you for your interest in contributing! \nThis repository follows a **strict, staged branch w"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 5763,
"preview": "<div align=\"center\">\n\n\n\n# 🎵 Gyawun Music\n\n**Where Music Knows No Bounds**\n\n*Experience "
},
{
"path": "analysis_options.yaml",
"chars": 1420,
"preview": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n#"
},
{
"path": "android/.gitignore",
"chars": 253,
"preview": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n.cxx/\n\n# R"
},
{
"path": "android/app/build.gradle.kts",
"chars": 2416,
"preview": "import java.io.FileInputStream\nimport java.util.Properties\n\nplugins {\n id(\"com.android.application\")\n id(\"org.jetb"
},
{
"path": "android/app/src/debug/AndroidManifest.xml",
"chars": 378,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <!-- The INTERNET permission is required for d"
},
{
"path": "android/app/src/main/AndroidManifest.xml",
"chars": 3953,
"preview": "<manifest\n xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:tools=\"http://schemas.android.com/too"
},
{
"path": "android/app/src/main/kotlin/com/jhelum/gyawun/MainActivity.kt",
"chars": 119,
"preview": "package com.jhelum.gyawun\n\nimport io.flutter.embedding.android.FlutterActivity\n\nclass MainActivity : FlutterActivity()\n"
},
{
"path": "android/app/src/main/res/anim/in_animation.xml",
"chars": 508,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:durat"
},
{
"path": "android/app/src/main/res/anim/out_animation.xml",
"chars": 548,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:durat"
},
{
"path": "android/app/src/main/res/drawable/launch_background.xml",
"chars": 420,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-hdpi/audio_service_stop.xml",
"chars": 405,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"36dp\"\n android:height=\"36dp\"\n "
},
{
"path": "android/app/src/main/res/drawable-mdpi/audio_service_stop.xml",
"chars": 405,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"24dp\"\n android:height=\"24dp\"\n "
},
{
"path": "android/app/src/main/res/drawable-night/launch_background.xml",
"chars": 408,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Dark theme splash screen with launcher icon -->\n<layer-list xmlns:android=\"h"
},
{
"path": "android/app/src/main/res/drawable-v21/launch_background.xml",
"chars": 420,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-xhdpi/audio_service_stop.xml",
"chars": 405,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"48dp\"\n android:height=\"48dp\"\n "
},
{
"path": "android/app/src/main/res/drawable-xxhdpi/audio_service_stop.xml",
"chars": 405,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"72dp\"\n android:height=\"72dp\"\n "
},
{
"path": "android/app/src/main/res/drawable-xxxhdpi/audio_service_stop.xml",
"chars": 405,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:width=\"96dp\"\n android:height=\"96dp\"\n "
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 328,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <bac"
},
{
"path": "android/app/src/main/res/raw/keep.xml",
"chars": 126,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\"\n tools:keep=\"@drawable"
},
{
"path": "android/app/src/main/res/values/attrs.xml",
"chars": 278,
"preview": "<resources>\n <declare-styleable name=\"AppWidgetAttrs\">\n <attr name=\"appWidgetPadding\" format=\"dimension\" />\n "
},
{
"path": "android/app/src/main/res/values/colors.xml",
"chars": 227,
"preview": "<resources>\n <color name=\"light_blue_50\">#FFE1F5FE</color>\n <color name=\"light_blue_200\">#FF81D4FA</color>\n <co"
},
{
"path": "android/app/src/main/res/values/dimens.xml",
"chars": 262,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n <!--\nRefer to App Widget Documentation for margin information\nht"
},
{
"path": "android/app/src/main/res/values/ic_launcher_background.xml",
"chars": 120,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_background\">#000000</color>\n</resources>"
},
{
"path": "android/app/src/main/res/values/strings.xml",
"chars": 228,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <string name=\"appwidget_text\">Play</string>\n <string name=\"add"
},
{
"path": "android/app/src/main/res/values/styles.xml",
"chars": 2220,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values/themes.xml",
"chars": 764,
"preview": "<resources>\n\n <style name=\"Theme.Android.AppWidgetContainerParent\" parent=\"@android:style/Theme.DeviceDefault\">\n "
},
{
"path": "android/app/src/main/res/values-night/styles.xml",
"chars": 1266,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-night-v31/styles.xml",
"chars": 1248,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-v31/styles.xml",
"chars": 1248,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/xml/automotive_app_desc.xml",
"chars": 57,
"preview": "<automotiveApp>\n <uses name=\"media\"/>\n</automotiveApp>"
},
{
"path": "android/app/src/profile/AndroidManifest.xml",
"chars": 378,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <!-- The INTERNET permission is required for d"
},
{
"path": "android/build/reports/problems/problems-report.html",
"chars": 147164,
"preview": "<!DOCTYPE html>\n\n<html lang=\"en\">\n<head>\n <!-- Required meta tags -->\n <meta charset=\"utf-8\">\n <meta name=\"view"
},
{
"path": "android/build.gradle.kts",
"chars": 537,
"preview": "allprojects {\n repositories {\n google()\n mavenCentral()\n }\n}\n\nval newBuildDir: Directory =\n rootP"
},
{
"path": "android/gradle/wrapper/gradle-wrapper.properties",
"chars": 255,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dist"
},
{
"path": "android/gradle.properties",
"chars": 138,
"preview": "org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError\nandroid"
},
{
"path": "android/settings.gradle.kts",
"chars": 772,
"preview": "pluginManagement {\n val flutterSdkPath =\n run {\n val properties = java.util.Properties()\n "
},
{
"path": "build-flatpak.sh",
"chars": 1280,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\nAPP_ID=\"com.gyawun.music\"\nAPP_NAME=\"GyawunMusic\"\nVERSION=\"2.0.16\"\nBUNDLE_DIR=\"bui"
},
{
"path": "devtools_options.yaml",
"chars": 184,
"preview": "description: This file stores settings for Dart & Flutter DevTools.\ndocumentation: https://docs.flutter.dev/tools/devtoo"
},
{
"path": "fastlane/metadata/android/en-US/full_description.txt",
"chars": 289,
"preview": "Immerse yourself in the world of Gyawun, where music knows no bounds. Enjoy uninterrupted, ad-free streaming with an ext"
},
{
"path": "fastlane/metadata/android/en-US/short_description.txt",
"chars": 31,
"preview": "Stream music from YouTube Music"
},
{
"path": "fastlane/metadata/android/en-US/title.txt",
"chars": 12,
"preview": "Gyawun Music"
},
{
"path": "flutter_native_splash.yaml",
"chars": 244,
"preview": "flutter_native_splash:\n image: assets/images/splash_icon.png\n background_image: \"assets/images/background.png\"\n brand"
},
{
"path": "lib/core/extensions/random_material_shape.dart",
"chars": 484,
"preview": "import 'dart:math' as math;\n\nimport 'package:m3e_collection/m3e_collection.dart';\n\nextension RandomMaterialShape on Mate"
},
{
"path": "lib/core/extensions/string_extensions.dart",
"chars": 152,
"preview": "extension StringCapitalization on String {\n String capitalize() {\n if (isEmpty) return this;\n return this[0].toUp"
},
{
"path": "lib/core/models/app_config.dart",
"chars": 303,
"preview": "class AppConfig {\n final bool isBeta;\n final Uri stableReleasesUri;\n final Uri allReleasesUri;\n final String codeNam"
},
{
"path": "lib/core/utils/expressive_sheet.dart",
"chars": 8154,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/core/utils/service_locator.dart",
"chars": 58,
"preview": "import 'package:get_it/get_it.dart';\n\nfinal sl = GetIt.I;\n"
},
{
"path": "lib/core/widgets/expressive_app_bar.dart",
"chars": 1868,
"preview": "import 'dart:ui';\n\nimport 'package:flutter/material.dart';\n\nclass ExpressiveAppBar extends StatelessWidget {\n const Exp"
},
{
"path": "lib/core/widgets/expressive_list_group.dart",
"chars": 2430,
"preview": "import 'package:flutter/material.dart';\n\nclass ExpressiveListGroupScope extends InheritedWidget {\n const ExpressiveList"
},
{
"path": "lib/core/widgets/expressive_list_tile.dart",
"chars": 4947,
"preview": "import 'package:flutter/material.dart';\nimport 'package:gyawun/core/widgets/expressive_list_group.dart';\n\nclass Expressi"
},
{
"path": "lib/core/widgets/expressive_switch_list_tile.dart",
"chars": 1023,
"preview": "import 'package:flutter/material.dart';\nimport 'package:gyawun/core/widgets/expressive_list_tile.dart';\n\nclass Expressiv"
},
{
"path": "lib/core/widgets/internet_guard.dart",
"chars": 3315,
"preview": "import 'dart:async';\nimport 'package:flutter/material.dart';\nimport 'package:go_router/go_router.dart';\nimport 'package:"
},
{
"path": "lib/core/widgets/library_tile.dart",
"chars": 2229,
"preview": "import 'package:flutter/material.dart';\n\nclass LibraryTile extends StatelessWidget {\n const LibraryTile({\n this.titl"
},
{
"path": "lib/core/widgets/rounded_polygon_icon.dart",
"chars": 1684,
"preview": "import 'package:flutter/material.dart';\nimport 'package:m3e_collection/m3e_collection.dart';\n\nclass RoundedPolygonIcon e"
},
{
"path": "lib/core/widgets/section_item.dart",
"chars": 5667,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/core/widgets/sections/section_multi_column.dart",
"chars": 1978,
"preview": "import 'dart:math';\n\nimport 'package:expandable_page_view/expandable_page_view.dart';\nimport 'package:flutter/material.d"
},
{
"path": "lib/core/widgets/sections/section_row.dart",
"chars": 828,
"preview": "import 'package:flutter/material.dart';\nimport 'package:gyawun/core/widgets/tiles/section_row_tile.dart';\n\nclass Section"
},
{
"path": "lib/core/widgets/song_tile.dart",
"chars": 3348,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/core/widgets/tiles/section_list_tile.dart",
"chars": 3764,
"preview": "import 'package:cached_network_image/cached_network_image.dart';\nimport 'package:fluentui_system_icons/fluentui_system_i"
},
{
"path": "lib/core/widgets/tiles/section_row_tile.dart",
"chars": 4049,
"preview": "import 'package:cached_network_image/cached_network_image.dart';\nimport 'package:flutter/material.dart';\nimport 'package"
},
{
"path": "lib/generated/intl/messages_all.dart",
"chars": 2957,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that looks up messa"
},
{
"path": "lib/generated/intl/messages_en.dart",
"chars": 12765,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/generated/intl/messages_es.dart",
"chars": 10512,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/generated/intl/messages_fr.dart",
"chars": 12702,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/generated/intl/messages_hi.dart",
"chars": 10000,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/generated/intl/messages_it.dart",
"chars": 13245,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/generated/intl/messages_tr.dart",
"chars": 10202,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/generated/intl/messages_ur.dart",
"chars": 10061,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/generated/l10n.dart",
"chars": 25476,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\nimport 'package:flutter/material.dart';\nimport 'package:intl/intl.dart';\nimpor"
},
{
"path": "lib/l10n/intl_en.arb",
"chars": 8891,
"preview": "{\n \"@@locale\": \"en\",\n \"Gyawun\": \"Gyawun\",\n \"Next_Up\": \"Next Up\",\n \"@Next_Up\": {},\n \"Shuffle\": \"Shuffle\",\n \"@Shuffl"
},
{
"path": "lib/l10n/intl_es.arb",
"chars": 7707,
"preview": "{\n \"@@locale\": \"es\",\n \"Gyawun\": \"Gyawun\",\n \"Next_Up\": \"Siguiente\",\n \"@Next_Up\": {},\n \"Shuffle\": \"Aleatori"
},
{
"path": "lib/l10n/intl_fr.arb",
"chars": 8954,
"preview": "{\n \"@@locale\": \"fr\",\n \"Gyawun\": \"Gyawun\",\n \"Next_Up\": \"Suivant\",\n \"@Next_Up\": {},\n \"Shuffle\": \"Aléatoire\",\n \"@Shuf"
},
{
"path": "lib/l10n/intl_hi.arb",
"chars": 7243,
"preview": "{\n \"@@locale\": \"hi\",\n \"Gyawun\": \"ग्यावुन\",\n \"@Gyawun\": {},\n \"Next_Up\": \"अगला\",\n \"@Next_Up\": {},\n \"Shuf"
},
{
"path": "lib/l10n/intl_it.arb",
"chars": 9279,
"preview": "{\n \"@@locale\": \"it\",\n \"Gyawun\": \"Gyawun\",\n \"@Gyawun\": {},\n \"Next_Up\": \"Prossimo\",\n \"@Next_Up\": {},\n \"Shuffle\": \"Ca"
},
{
"path": "lib/l10n/intl_tr.arb",
"chars": 7468,
"preview": "{\n \"@@locale\": \"tr\",\n \"Gyawun\": \"Gyawun\",\n \"Next_Up\": \"Sıradaki\",\n \"@Next_Up\": {},\n \"Shuffle\": \"Karıştır\""
},
{
"path": "lib/l10n/intl_ur.arb",
"chars": 7316,
"preview": "{\n \"@@locale\": \"ur\",\n \"Gyawun\": \"گیاون\",\n \"Next_Up\": \"اگلا\",\n \"@Next_Up\": {},\n \"Shuffle\": \"بے ترتیب\",\n "
},
{
"path": "lib/main.dart",
"chars": 6840,
"preview": "import 'dart:io';\n\nimport 'package:dynamic_color/dynamic_color.dart';\nimport 'package:flutter/material.dart';\nimport 'pa"
},
{
"path": "lib/screens/browse/browse_page.dart",
"chars": 13361,
"preview": "import 'package:cached_network_image/cached_network_image.dart';\nimport 'package:expandable_text/expandable_text.dart';\n"
},
{
"path": "lib/screens/browse/cubit/browse_cubit.dart",
"chars": 1398,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:meta/meta.dart';\nimport 'package:yt_music/ytmusic.dart';\n\npart 'browse_"
},
{
"path": "lib/screens/browse/cubit/browse_state.dart",
"chars": 1003,
"preview": "part of 'browse_cubit.dart';\n\n@immutable\nsealed class BrowseState {\n const BrowseState();\n}\n\nfinal class BrowseLoading "
},
{
"path": "lib/screens/chip/chip_page.dart",
"chars": 2863,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:gyawun/core/wid"
},
{
"path": "lib/screens/chip/cubit/chip_cubit.dart",
"chars": 1609,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:meta/meta.dart';\nimport 'package:yt_music/ytmusic.dart';\n\npart 'chip_st"
},
{
"path": "lib/screens/chip/cubit/chip_state.dart",
"chars": 839,
"preview": "part of 'chip_cubit.dart';\n\n@immutable\nsealed class ChipState {\n const ChipState();\n}\n\nfinal class ChipLoading extends "
},
{
"path": "lib/screens/home/cubit/home_cubit.dart",
"chars": 1628,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:meta/meta.dart';\nimport 'package:yt_music/ytmusic.dart';\n\npart 'home_st"
},
{
"path": "lib/screens/home/cubit/home_state.dart",
"chars": 935,
"preview": "part of 'home_cubit.dart';\n\n@immutable\nsealed class HomeState {\n const HomeState();\n}\n\nfinal class HomeLoading extends "
},
{
"path": "lib/screens/home/home_page.dart",
"chars": 5047,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'pack"
},
{
"path": "lib/screens/home/widgets/chips_row.dart",
"chars": 792,
"preview": "import 'package:flutter/material.dart';\nimport 'package:go_router/go_router.dart';\n\nclass ChipsRow extends StatelessWidg"
},
{
"path": "lib/screens/library/cubit/library_cubit.dart",
"chars": 1869,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\nimport '"
},
{
"path": "lib/screens/library/cubit/library_state.dart",
"chars": 577,
"preview": "part of 'library_cubit.dart';\n\n@immutable\nsealed class LibraryState {\n const LibraryState();\n}\n\nclass LibraryLoading ex"
},
{
"path": "lib/screens/library/downloads/cubit/downloads_cubit.dart",
"chars": 943,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\nimport '"
},
{
"path": "lib/screens/library/downloads/cubit/downloads_state.dart",
"chars": 407,
"preview": "part of 'downloads_cubit.dart';\n\n@immutable\nsealed class DownloadsState {\n const DownloadsState();\n}\n\nclass DownloadsLo"
},
{
"path": "lib/screens/library/downloads/downloading/cubit/downloading_cubit.dart",
"chars": 1185,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\nimport '"
},
{
"path": "lib/screens/library/downloads/downloading/cubit/downloading_state.dart",
"chars": 503,
"preview": "part of 'downloading_cubit.dart';\n\n@immutable\nsealed class DownloadingState {\n const DownloadingState();\n}\n\nclass Downl"
},
{
"path": "lib/screens/library/downloads/downloading/downloading_page.dart",
"chars": 2471,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:gyawun/screens/"
},
{
"path": "lib/screens/library/downloads/downloading/widgets/downloading_section_tile.dart",
"chars": 574,
"preview": "import 'package:flutter/material.dart';\n\nclass DownloadingSectionTile extends StatelessWidget {\n const DownloadingSecti"
},
{
"path": "lib/screens/library/downloads/downloading/widgets/downloading_song_tile.dart",
"chars": 2381,
"preview": "import 'package:cached_network_image/cached_network_image.dart';\nimport 'package:expandable_text/expandable_text.dart';\n"
},
{
"path": "lib/screens/library/downloads/downloads_page.dart",
"chars": 4645,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/cupertino.dart';\nimport 'pack"
},
{
"path": "lib/screens/library/downloads/playlist/cubit/download_playlist_cubit.dart",
"chars": 2263,
"preview": "import 'dart:io';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get"
},
{
"path": "lib/screens/library/downloads/playlist/cubit/download_playlist_state.dart",
"chars": 555,
"preview": "part of 'download_playlist_cubit.dart';\n\n@immutable\nsealed class DownloadPlaylistState {\n const DownloadPlaylistState()"
},
{
"path": "lib/screens/library/downloads/playlist/download_playlist_page.dart",
"chars": 12791,
"preview": "import 'dart:ui';\n\nimport 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.d"
},
{
"path": "lib/screens/library/downloads/playlist/widgets/download_playlist_header.dart",
"chars": 5687,
"preview": "// import 'dart:io';\n\n// import 'package:flutter/cupertino.dart';\n// import 'package:flutter/material.dart';\n// import '"
},
{
"path": "lib/screens/library/downloads/playlist/widgets/download_song_tile.dart",
"chars": 3789,
"preview": "// import 'package:expandable_text/expandable_text.dart';\n// import 'package:flutter/material.dart';\n// import 'package:"
},
{
"path": "lib/screens/library/favourites/cubit/favourites_cubit.dart",
"chars": 1026,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\nimport '"
},
{
"path": "lib/screens/library/favourites/cubit/favourites_state.dart",
"chars": 421,
"preview": "part of 'favourites_cubit.dart';\n\n@immutable\nsealed class FavouritesState {\n const FavouritesState();\n}\n\nclass Favourit"
},
{
"path": "lib/screens/library/favourites/favourites_page.dart",
"chars": 7100,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/screens/library/history/cubit/history_cubit.dart",
"chars": 1047,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\n\nimport "
},
{
"path": "lib/screens/library/history/cubit/history_state.dart",
"chars": 375,
"preview": "part of 'history_cubit.dart';\n\n@immutable\nsealed class HistoryState {\n const HistoryState();\n}\n\nclass HistoryLoading ex"
},
{
"path": "lib/screens/library/history/history_page.dart",
"chars": 5081,
"preview": "import 'dart:ui';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'pack"
},
{
"path": "lib/screens/library/library_page.dart",
"chars": 11395,
"preview": "import 'dart:collection';\n\nimport 'package:cached_network_image/cached_network_image.dart';\nimport 'package:fluentui_sys"
},
{
"path": "lib/screens/library/playlist/cubit/playlist_details_cubit.dart",
"chars": 1288,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\nimport '"
},
{
"path": "lib/screens/library/playlist/cubit/playlist_details_state.dart",
"chars": 477,
"preview": "part of 'playlist_details_cubit.dart';\n\n@immutable\nsealed class PlaylistDetailsState {\n const PlaylistDetailsState();\n}"
},
{
"path": "lib/screens/library/playlist/playlist_details_page.dart",
"chars": 7776,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/screens/library/widgets/my_playlist_header.dart",
"chars": 6065,
"preview": "import 'dart:io';\nimport 'dart:math';\n\nimport 'package:cached_network_image/cached_network_image.dart';\nimport 'package:"
},
{
"path": "lib/screens/player/player_page.dart",
"chars": 26838,
"preview": "import 'dart:io';\nimport 'dart:math';\nimport 'dart:ui';\nimport 'package:audio_video_progress_bar/audio_video_progress_ba"
},
{
"path": "lib/screens/player/widgets/lyrics_box.dart",
"chars": 7110,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_lyric/lyrics_reader.dart';\nimport 'package:get_it/get_it"
},
{
"path": "lib/screens/player/widgets/play_pause_button.dart",
"chars": 2371,
"preview": "import 'package:flutter/material.dart';\nimport 'package:get_it/get_it.dart';\nimport 'package:gyawun/services/media_playe"
},
{
"path": "lib/screens/player/widgets/queue_list.dart",
"chars": 6339,
"preview": "import 'dart:io';\nimport 'dart:ui';\nimport 'package:flutter/material.dart';\nimport 'package:get_it/get_it.dart';\nimport "
},
{
"path": "lib/screens/search/cubit/search_cubit.dart",
"chars": 2014,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/widgets.dart';\nimport 'package:get_it/get_it.dart';\nimport 'pac"
},
{
"path": "lib/screens/search/cubit/search_state.dart",
"chars": 942,
"preview": "part of 'search_cubit.dart';\n\n@immutable\nsealed class SearchState {\n const SearchState();\n}\n\nfinal class SearchInitial "
},
{
"path": "lib/screens/search/search_page.dart",
"chars": 15544,
"preview": "import 'dart:io';\n\nimport 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/cupertino."
},
{
"path": "lib/screens/settings/about/about_page.dart",
"chars": 7893,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/screens/settings/appearance/appearance_page.dart",
"chars": 7040,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/screens/settings/appearance/cubit/appearance_cubit.dart",
"chars": 1498,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/material.dart';\nimport 'package:get_it/get_it.dart';\nimport 'pa"
},
{
"path": "lib/screens/settings/appearance/cubit/appearance_state.dart",
"chars": 426,
"preview": "part of 'appearance_cubit.dart';\n\n@immutable\nsealed class AppearanceState {\n const AppearanceState();\n}\n\nclass Appearan"
},
{
"path": "lib/screens/settings/backup_storage/backup_storage_page.dart",
"chars": 9154,
"preview": "import 'dart:io';\n\nimport 'package:easy_folder_picker/FolderPicker.dart';\nimport 'package:fluentui_system_icons/fluentui"
},
{
"path": "lib/screens/settings/backup_storage/cubit/backup_storage_cubit.dart",
"chars": 3202,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\n\nimport "
},
{
"path": "lib/screens/settings/backup_storage/cubit/backup_storage_state.dart",
"chars": 968,
"preview": "part of 'backup_storage_cubit.dart';\n\n@immutable\nclass BackupStorageState {\n final String appFolder;\n final String def"
},
{
"path": "lib/screens/settings/cubit/settings_system_cubit.dart",
"chars": 858,
"preview": "import 'dart:io';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:permission"
},
{
"path": "lib/screens/settings/cubit/settings_system_state.dart",
"chars": 404,
"preview": "part of 'settings_system_cubit.dart';\n\n@immutable\nsealed class SettingsSystemState {\n const SettingsSystemState();\n}\n\nc"
},
{
"path": "lib/screens/settings/player/cubit/player_settings_cubit.dart",
"chars": 1189,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\n\nimport "
},
{
"path": "lib/screens/settings/player/cubit/player_settings_state.dart",
"chars": 273,
"preview": "part of 'player_settings_cubit.dart';\n\n@immutable\nsealed class PlayerSettingsState {\n const PlayerSettingsState();\n}\n\nc"
},
{
"path": "lib/screens/settings/player/equalizer/cubit/equalizer_cubit.dart",
"chars": 1160,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:get_it/get_it.dart';\nimport 'package:gyawun/services/media_player.dart'"
},
{
"path": "lib/screens/settings/player/equalizer/cubit/equalizer_state.dart",
"chars": 455,
"preview": "import 'package:flutter/foundation.dart';\n\n@immutable\nclass EqualizerState {\n const EqualizerState();\n}\n\nclass Equalize"
},
{
"path": "lib/screens/settings/player/equalizer/cubit/loudness_cubit.dart",
"chars": 824,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:get_it/get_it.dart';\nimport 'package:gyawun/services/media_player.dart'"
},
{
"path": "lib/screens/settings/player/equalizer/cubit/loudness_state.dart",
"chars": 419,
"preview": "import 'package:flutter/foundation.dart';\n\n@immutable\nclass LoudnessState {\n final bool enabled;\n final double targetG"
},
{
"path": "lib/screens/settings/player/equalizer/equalizer_page.dart",
"chars": 5281,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:gyawun/screens/"
},
{
"path": "lib/screens/settings/player/player_settings_page.dart",
"chars": 2916,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/screens/settings/privacy/cubit/privacy_cubit.dart",
"chars": 1409,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:get_it/get_it.dart';\nimport 'package:gyawun/services/settings_manager.d"
},
{
"path": "lib/screens/settings/privacy/cubit/privacy_state.dart",
"chars": 757,
"preview": "part of 'privacy_cubit.dart';\n\nenum PrivacyAction {\n playbackDeleted,\n searchDeleted,\n}\n\nclass PrivacyState {\n final "
},
{
"path": "lib/screens/settings/privacy/privacy_page.dart",
"chars": 5422,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/screens/settings/services/yt_music/cubit/ytmusic_cubit.dart",
"chars": 3281,
"preview": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\nimport '"
},
{
"path": "lib/screens/settings/services/yt_music/cubit/ytmusic_state.dart",
"chars": 1403,
"preview": "part of 'ytmusic_cubit.dart';\n\n@immutable\nclass YTMusicState {\n final Map<String, String> location;\n final Map<String,"
},
{
"path": "lib/screens/settings/services/yt_music/yt_music_page.dart",
"chars": 11273,
"preview": "import 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
},
{
"path": "lib/screens/settings/settings_page.dart",
"chars": 12134,
"preview": "import 'dart:io';\n\nimport 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'package:flutter/material.d"
},
{
"path": "lib/screens/settings/widgets/color_icon.dart",
"chars": 1309,
"preview": "import 'package:flutter/material.dart';\n\nclass ColorIcon extends StatelessWidget {\n const ColorIcon({\n required this"
},
{
"path": "lib/screens/settings/widgets/setting_item.dart",
"chars": 5762,
"preview": "import 'package:flutter/material.dart';\n\nclass GroupTitle extends StatelessWidget {\n const GroupTitle({super.key, requi"
},
{
"path": "lib/screens/shell/app_shell.dart",
"chars": 5582,
"preview": "import 'dart:async';\nimport 'dart:io';\nimport 'package:fluentui_system_icons/fluentui_system_icons.dart';\nimport 'packag"
},
{
"path": "lib/screens/shell/widgets/bottom_player.dart",
"chars": 5590,
"preview": "import 'package:flutter/material.dart';\nimport 'package:get_it/get_it.dart';\nimport 'package:go_router/go_router.dart';\n"
},
{
"path": "lib/services/bottom_message.dart",
"chars": 588,
"preview": "import 'package:fl_toast/fl_toast.dart';\nimport 'package:flutter/material.dart';\n\nimport '../themes/text_styles.dart';\ni"
},
{
"path": "lib/services/custom_audio_stream.dart",
"chars": 2209,
"preview": "// import 'dart:async';\n// import 'package:gyawun/services/stream_client.dart';\n// import 'package:just_audio/just_audio"
},
{
"path": "lib/services/download_manager.dart",
"chars": 15701,
"preview": "import 'dart:collection';\nimport 'package:collection/collection.dart';\nimport 'dart:io';\nimport 'dart:typed_data';\n\nimpo"
},
{
"path": "lib/services/favourites_manager.dart",
"chars": 1713,
"preview": "import 'package:flutter/foundation.dart';\nimport 'package:hive_flutter/hive_flutter.dart';\n\nclass FavouritesManager {\n "
},
{
"path": "lib/services/file_storage.dart",
"chars": 7740,
"preview": "import 'dart:convert';\nimport 'dart:io';\nimport 'package:audiotags/audiotags.dart';\nimport 'package:file_picker/file_pic"
},
{
"path": "lib/services/history_manager.dart",
"chars": 2903,
"preview": "import 'package:flutter/material.dart';\nimport 'package:get_it/get_it.dart';\nimport 'package:hive_flutter/hive_flutter.d"
},
{
"path": "lib/services/library.dart",
"chars": 5263,
"preview": "import 'package:flutter/cupertino.dart';\nimport 'package:get_it/get_it.dart';\nimport 'package:hive_flutter/hive_flutter."
},
{
"path": "lib/services/lyrics.dart",
"chars": 5018,
"preview": "import 'dart:convert';\nimport 'package:flutter/widgets.dart';\nimport 'package:http/http.dart';\nimport 'package:translato"
},
{
"path": "lib/services/media_player.dart",
"chars": 20153,
"preview": "import 'dart:async';\nimport 'dart:io';\n\nimport 'package:flutter/foundation.dart';\nimport 'package:get_it/get_it.dart';\ni"
},
{
"path": "lib/services/settings_manager.dart",
"chars": 16418,
"preview": "import 'package:flutter/material.dart';\nimport 'package:gyawun/services/file_storage.dart';\nimport 'package:hive_flutter"
},
{
"path": "lib/services/stream_client.dart",
"chars": 4661,
"preview": "import 'dart:async';\n\nimport 'package:http/http.dart' as http;\nimport 'package:youtube_explode_dart/youtube_explode_dart"
},
{
"path": "lib/services/update_service/models/update_info.dart",
"chars": 349,
"preview": "import 'package:pub_semver/pub_semver.dart';\n\nclass UpdateInfo {\n final Version version;\n final String name;\n final S"
},
{
"path": "lib/services/update_service/update_service.dart",
"chars": 4887,
"preview": "import 'dart:convert';\nimport 'dart:io';\n\nimport 'package:device_info_plus/device_info_plus.dart';\nimport 'package:flutt"
},
{
"path": "lib/services/update_service/widgets/update_checking.dart",
"chars": 560,
"preview": "import 'package:flutter/material.dart';\n\nclass UpdateCheckingDialog extends StatelessWidget {\n const UpdateCheckingDial"
},
{
"path": "lib/services/update_service/widgets/update_dialog.dart",
"chars": 2498,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_markdown_plus/flutter_markdown_plus.dart';\nimport 'packa"
},
{
"path": "lib/services/yt_audio_stream.dart",
"chars": 6750,
"preview": "// ignore_for_file: experimental_member_use\n\nimport 'dart:async';\nimport 'dart:io';\n\nimport 'package:flutter/foundation."
},
{
"path": "lib/themes/colors.dart",
"chars": 1129,
"preview": "import 'package:flutter/material.dart';\n\nColor greyColor = Colors.grey.withAlpha(100);\nColor darkGreyColor = Colors.grey"
},
{
"path": "lib/themes/dark.dart",
"chars": 2305,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:googl"
},
{
"path": "lib/themes/light.dart",
"chars": 1804,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:google_fonts/google_font"
},
{
"path": "lib/themes/text_styles.dart",
"chars": 1996,
"preview": "import 'package:flutter/material.dart';\nimport 'package:google_fonts/google_fonts.dart';\n\nfinal defaultFontStyle = Googl"
},
{
"path": "lib/themes/theme.dart",
"chars": 2493,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\n\nimport 'typography.dart';\n\nclass AppThe"
},
{
"path": "lib/themes/typography.dart",
"chars": 3016,
"preview": "import 'package:flutter/material.dart';\n\nTextTheme appTextTheme(TextTheme? textTheme) {\n textTheme ??= ThemeData.light("
},
{
"path": "lib/utils/adaptive_widgets/adaptive_widgets.dart",
"chars": 308,
"preview": "export 'appbar.dart';\nexport 'buttons.dart';\nexport 'card.dart';\nexport 'dropdown_button.dart';\nexport 'icons.dart';\nexp"
},
{
"path": "lib/utils/adaptive_widgets/appbar.dart",
"chars": 1461,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\n\nclass AdaptiveAppBar extends StatelessWidget implements Pref"
},
{
"path": "lib/utils/adaptive_widgets/buttons.dart",
"chars": 2557,
"preview": "import 'package:flutter/material.dart';\n\nimport 'icons.dart';\n\nclass AdaptiveButton extends StatelessWidget {\n final Wi"
},
{
"path": "lib/utils/adaptive_widgets/card.dart",
"chars": 886,
"preview": "import 'package:flutter/material.dart';\n\nclass Adaptivecard extends StatelessWidget {\n const Adaptivecard({\n super.k"
},
{
"path": "lib/utils/adaptive_widgets/dropdown_button.dart",
"chars": 1163,
"preview": "import 'package:flutter/material.dart';\n\nclass AdaptiveDropdownButton<T> extends StatelessWidget {\n final T? value;\n f"
},
{
"path": "lib/utils/adaptive_widgets/icons.dart",
"chars": 2196,
"preview": "// ignore_for_file: non_constant_identifier_names\n\nimport 'package:flutter/cupertino.dart';\nimport 'package:flutter/mate"
},
{
"path": "lib/utils/adaptive_widgets/inkwell.dart",
"chars": 1442,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\n\nimport 'no_splash_factory.dart';\n\nclass AdaptiveInkWell exte"
},
{
"path": "lib/utils/adaptive_widgets/listtile.dart",
"chars": 4710,
"preview": "import 'dart:io';\n\nimport 'package:flutter/material.dart';\n\nimport '../../themes/text_styles.dart';\nimport 'no_splash_fa"
},
{
"path": "lib/utils/adaptive_widgets/no_splash_factory.dart",
"chars": 1118,
"preview": "import 'package:flutter/material.dart';\n\nclass NoSplashFactory extends InteractiveInkFeatureFactory {\n const NoSplashFa"
},
{
"path": "lib/utils/adaptive_widgets/progress_ring.dart",
"chars": 707,
"preview": "import 'package:flutter/material.dart';\n\nclass AdaptiveProgressRing extends StatelessWidget {\n final double? value;\n f"
},
{
"path": "lib/utils/adaptive_widgets/scaffold.dart",
"chars": 515,
"preview": "import 'package:flutter/material.dart';\n\nclass AdaptiveScaffold extends StatelessWidget {\n /// Creates a new [AdaptiveS"
},
{
"path": "lib/utils/adaptive_widgets/slider.dart",
"chars": 830,
"preview": "import 'package:flutter/material.dart';\n\nclass AdaptiveSlider extends StatelessWidget {\n final double value;\n final bo"
},
{
"path": "lib/utils/adaptive_widgets/switch.dart",
"chars": 335,
"preview": "import 'package:flutter/material.dart';\n\nclass AdaptiveSwitch extends StatelessWidget {\n final bool value;\n final void"
},
{
"path": "lib/utils/adaptive_widgets/text_field.dart",
"chars": 1938,
"preview": "import 'package:flutter/material.dart';\n\nclass AdaptiveTextField extends StatelessWidget {\n final TextEditingController"
},
{
"path": "lib/utils/adaptive_widgets/theme.dart",
"chars": 690,
"preview": "import 'package:flutter/material.dart';\n\nclass AdaptiveTheme {\n static ThemeData getMaterialTheme(BuildContext context)"
},
{
"path": "lib/utils/add_history.dart",
"chars": 578,
"preview": "import 'package:get_it/get_it.dart';\nimport 'package:yt_music/ytmusic.dart';\n\nimport '../services/download_manager.dart'"
},
{
"path": "lib/utils/bottom_modals.dart",
"chars": 60491,
"preview": "import 'dart:io';\nimport 'dart:math';\nimport 'package:cached_network_image/cached_network_image.dart';\nimport 'package:d"
}
]
// ... and 16 more files (download for full content)
About this extraction
This page contains the full source code of the sheikhhaziq/vibemusic GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 216 files (13.5 MB), approximately 237.8k tokens, and a symbol index with 744 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.