From 98ed7e88394cfe9e703353e20e7ff9912885b53f Mon Sep 17 00:00:00 2001 From: almightyhak Date: Thu, 20 Jun 2024 11:54:12 +0700 Subject: [PATCH] Initial commit --- .editorconfig | 15 + .gitattributes | 1 + .github/ISSUE_TEMPLATE.md | 32 + .github/ISSUE_TEMPLATE/01_report_issue.yml | 107 ++ .github/ISSUE_TEMPLATE/02_request_source.yml | 56 + .../ISSUE_TEMPLATE/03_report_url_change.yml | 57 + .../ISSUE_TEMPLATE/04_report_dead_source.yml | 63 + .github/ISSUE_TEMPLATE/05_request_feature.yml | 59 + .github/ISSUE_TEMPLATE/06_request_meta.yml | 41 + .github/ISSUE_TEMPLATE/07_request_removal.yml | 33 + .github/ISSUE_TEMPLATE/config.yml | 14 + .github/pull_request_template.md | 10 + .github/readme-images/app-icon.png | Bin 0 -> 1606 bytes .github/scripts/bump-versions.py | 75 ++ .github/scripts/commit-repo.sh | 17 + .github/scripts/create-repo.py | 108 ++ .github/scripts/move-apks.py | 16 + .github/scripts/sign-apks.sh | 52 + .github/workflows/batch_close_issues.yml | 25 + .github/workflows/build_pull_request.yml | 76 ++ .github/workflows/build_push.yml | 178 +++ .github/workflows/issue_moderator.yml | 51 + .github/workflows/lock.yml | 21 + .gitignore | 12 + CODE_OF_CONDUCT.md | 126 ++ CONTRIBUTING.md | 712 +++++++++++ LICENSE | 202 +++ README.md | 2 + build.gradle.kts | 21 + buildSrc/build.gradle.kts | 10 + buildSrc/settings.gradle.kts | 9 + buildSrc/src/main/kotlin/AndroidConfig.kt | 8 + buildSrc/src/main/kotlin/Extensions.kt | 6 + .../src/main/kotlin/lib-android.gradle.kts | 24 + .../src/main/kotlin/lib-kotlin.gradle.kts | 13 + .../src/main/kotlin/lib-multisrc.gradle.kts | 55 + common.gradle | 133 ++ core/AndroidManifest.xml | 13 + core/build.gradle.kts | 25 + core/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2656 bytes core/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1502 bytes core/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3253 bytes core/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6714 bytes core/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9726 bytes gradle.properties | 25 + gradle/libs.versions.toml | 29 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43462 bytes gradle/wrapper/gradle-wrapper.properties | 7 + gradlew | 249 ++++ gradlew.bat | 92 ++ ktlintCodeStyle.xml | 136 ++ lib-multisrc/animestream/AndroidManifest.xml | 23 + lib-multisrc/animestream/build.gradle.kts | 5 + .../multisrc/animestream/AnimeStream.kt | 431 +++++++ .../animestream/AnimeStreamFilters.kt | 94 ++ .../animestream/AnimeStreamUrlActivity.kt | 37 + lib-multisrc/datalifeengine/build.gradle.kts | 5 + .../multisrc/datalifeengine/DataLifeEngine.kt | 214 ++++ lib-multisrc/dooplay/AndroidManifest.xml | 23 + lib-multisrc/dooplay/build.gradle.kts | 5 + .../tachiyomi/multisrc/dooplay/DooPlay.kt | 485 ++++++++ .../multisrc/dooplay/DooPlayUrlActivity.kt | 39 + lib-multisrc/dopeflix/build.gradle.kts | 11 + .../tachiyomi/multisrc/dopeflix/DopeFlix.kt | 374 ++++++ .../multisrc/dopeflix/DopeFlixFilters.kt | 178 +++ .../multisrc/dopeflix/dto/DopeFlixDto.kt | 23 + .../dopeflix/extractors/DopeFlixExtractor.kt | 112 ++ lib-multisrc/zorotheme/build.gradle.kts | 10 + .../tachiyomi/multisrc/zorotheme/ZoroTheme.kt | 444 +++++++ .../multisrc/zorotheme/ZoroThemeFilters.kt | 244 ++++ .../multisrc/zorotheme/dto/ZoroThemeDto.kt | 39 + lib/blogger-extractor/build.gradle.kts | 3 + .../lib/bloggerextractor/BloggerExtractor.kt | 32 + lib/burstcloud-extractor/build.gradle.kts | 3 + .../BurstCloudExtractor.kt | 45 + .../BurstCloudExtractorDto.kt | 9 + lib/cda-extractor/build.gradle.kts | 3 + .../lib/cdaextractor/CdaExtractor.kt | 126 ++ lib/chillx-extractor/build.gradle.kts | 8 + .../lib/chillxextractor/ChillxExtractor.kt | 117 ++ lib/cloudflare-interceptor/build.gradle.kts | 3 + .../CloudflareInterceptor.kt | 165 +++ lib/cryptoaes/build.gradle.kts | 3 + .../tachiyomi/lib/cryptoaes/CryptoAES.kt | 220 ++++ .../tachiyomi/lib/cryptoaes/Deobfuscator.kt | 82 ++ lib/dailymotion-extractor/build.gradle.kts | 7 + .../dailymotionextractor/DailymotionDto.kt | 61 + .../DailymotionExtractor.kt | 135 ++ lib/dataimage/build.gradle.kts | 3 + .../lib/dataimage/DataImageInterceptor.kt | 61 + lib/dood-extractor/build.gradle.kts | 3 + .../lib/doodextractor/DoodExtractor.kt | 61 + lib/fastream-extractor/build.gradle.kts | 10 + .../fastreamextractor/FastreamExtractor.kt | 61 + lib/filemoon-extractor/build.gradle.kts | 10 + .../filemoonextractor/FilemoonExtractor.kt | 63 + lib/fusevideo-extractor/build.gradle.kts | 7 + .../fusevideoextractor/FusevideoExtractor.kt | 31 + lib/gdriveplayer-extractor/build.gradle.kts | 8 + .../GdrivePlayerExtractor.kt | 68 + lib/gogostream-extractor/build.gradle.kts | 7 + .../GogoStreamExtractor.kt | 96 ++ .../GogoStreamExtractorDto.kt | 12 + lib/googledrive-episodes/build.gradle.kts | 3 + .../GoogleDriveEpisodes.kt | 176 +++ lib/googledrive-extractor/build.gradle.kts | 3 + .../GoogleDriveExtractor.kt | 56 + lib/javcoverfetcher/build.gradle.kts | 3 + .../lib/javcoverfetcher/JavCoverFetcher.kt | 156 +++ lib/megacloud-extractor/build.gradle.kts | 8 + .../megacloudextractor/MegaCloudExtractor.kt | 180 +++ lib/mixdrop-extractor/build.gradle.kts | 7 + .../lib/mixdropextractor/MixDropExtractor.kt | 52 + lib/mp4upload-extractor/build.gradle.kts | 9 + .../mp4uploadextractor/Mp4uploadExtractor.kt | 36 + lib/okru-extractor/build.gradle.kts | 7 + .../lib/okruextractor/OkruExtractor.kt | 77 ++ lib/playlist-utils/build.gradle.kts | 3 + .../lib/playlistutils/PlaylistUtils.kt | 337 +++++ lib/sendvid-extractor/build.gradle.kts | 7 + .../lib/sendvidextractor/SendvidExtractor.kt | 29 + lib/sibnet-extractor/build.gradle.kts | 3 + .../lib/sibnetextractor/SibnetExtractor.kt | 39 + lib/streamdav-extractor/build.gradle.kts | 3 + .../streamdavextractor/StreamDavExtractor.kt | 17 + lib/streamhidevid-extractor/build.gradle.kts | 10 + .../StreamHideVidExtractor.kt | 25 + lib/streamhub-extractor/build.gradle.kts | 7 + .../streamhubextractor/StreamHubExtractor.kt | 23 + lib/streamlare-extractor/build.gradle.kts | 3 + .../StreamlareExtractor.kt | 57 + lib/streamtape-extractor/build.gradle.kts | 3 + .../StreamTapeExtractor.kt | 33 + lib/streamvid-extractor/build.gradle.kts | 10 + .../streamvidextractor/StreamVidExtractor.kt | 26 + lib/streamwish-extractor/build.gradle.kts | 10 + .../StreamWishExtractor.kt | 38 + lib/synchrony/build.gradle.kts | 3 + .../src/main/assets/synchrony-v2.4.5.1.js | 117 ++ .../tachiyomi/lib/synchrony/Deobfuscator.kt | 38 + lib/unpacker/build.gradle.kts | 8 + .../lib/unpacker/SubstringExtractor.kt | 42 + .../kanade/tachiyomi/lib/unpacker/Unpacker.kt | 84 ++ lib/upstream-extractor/build.gradle.kts | 10 + .../upstreamextractor/UpstreamExtractor.kt | 17 + lib/uqload-extractor/build.gradle.kts | 3 + .../lib/uqloadextractor/UqloadExtractor.kt | 25 + lib/vidbom-extractor/build.gradle.kts | 3 + .../lib/vidbomextractor/VidBomExtractor.kt | 23 + lib/vidhide-extractor/build.gradle.kts | 7 + .../lib/vidhideextractor/VidHideExtractor.kt | 64 + lib/vido-extractor/build.gradle.kts | 10 + .../lib/vidoextractor/VidoExtractor.kt | 22 + lib/vidsrc-extractor/build.gradle.kts | 7 + .../lib/vidsrcextractor/VidSrcExtractor.kt | 174 +++ lib/vk-extractor/build.gradle.kts | 3 + .../tachiyomi/lib/vkextractor/VkExtractor.kt | 38 + lib/voe-extractor/build.gradle.kts | 7 + .../lib/voeextractor/VoeExtractor.kt | 49 + lib/vudeo-extractor/build.gradle.kts | 3 + .../lib/vudeoextractor/VudeoExtractor.kt | 30 + lib/yourupload-extractor/build.gradle.kts | 3 + .../YourUploadExtractor.kt | 25 + renovate.json | 7 + repositories.gradle.kts | 16 + settings.gradle.kts | 61 + src/all/animeonsen/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3769 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2162 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5759 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10795 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17566 bytes src/all/animeonsen/res/web_hi_res_512.png | Bin 0 -> 167803 bytes .../all/animeonsen/AOAPIInterceptor.kt | 56 + .../all/animeonsen/AnimeOnsen.kt | 192 +++ .../all/animeonsen/dto/AnimeOnsenDto.kt | 83 ++ src/all/animeworldindia/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6039 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3384 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8586 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14710 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 22049 bytes .../all/animeworldindia/AnimeWorldIndia.kt | 246 ++++ .../animeworldindia/AnimeWorldIndiaFactory.kt | 18 + .../animeworldindia/AnimeWorldIndiaFilters.kt | 179 +++ .../all/animeworldindia/MyStreamExtractor.kt | 44 + src/all/animexin/build.gradle | 17 + .../animexin/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4043 bytes .../animexin/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2024 bytes .../animexin/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6351 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13004 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 21253 bytes .../animeextension/all/animexin/AnimeXin.kt | 91 ++ .../extractors/VidstreamingExtractor.kt | 127 ++ .../animexin/extractors/YouTubeExtractor.kt | 164 +++ src/all/chineseanime/build.gradle | 16 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5175 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2563 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8318 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 17240 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 28215 bytes src/all/chineseanime/res/web_hi_res_512.png | Bin 0 -> 212063 bytes .../all/chineseanime/ChineseAnime.kt | 88 ++ .../extractors/VatchusExtractor.kt | 56 + src/all/googledrive/README.md | 62 + src/all/googledrive/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2910 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1604 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3586 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6358 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8342 bytes src/all/googledrive/res/web_hi_res_512.png | Bin 0 -> 31465 bytes .../all/googledrive/GoogleDrive.kt | 720 +++++++++++ .../all/googledrive/GoogleDriveDto.kt | 45 + .../googledrive/GoogleDriveMultiFormReqs.kt | 18 + src/all/googledriveindex/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3277 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1794 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4477 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8246 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12092 bytes .../googledriveindex/res/web_hi_res_512.png | Bin 0 -> 62731 bytes .../all/googledriveindex/GoogleDriveIndex.kt | 743 +++++++++++ .../googledriveindex/GoogleDriveIndexDto.kt | 49 + src/all/hikari/build.gradle | 12 + .../hikari/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 9534 bytes .../hikari/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4597 bytes .../hikari/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 15239 bytes .../hikari/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 30095 bytes .../hikari/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 47670 bytes .../animeextension/all/hikari/Filters.kt | 255 ++++ .../animeextension/all/hikari/Hikari.kt | 332 +++++ src/all/javguru/AndroidManifest.xml | 22 + src/all/javguru/build.gradle | 18 + .../javguru/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3182 bytes .../javguru/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1725 bytes .../javguru/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4281 bytes .../javguru/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7691 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10868 bytes src/all/javguru/res/web_hi_res_512.png | Bin 0 -> 52646 bytes .../animeextension/all/javguru/JavGuru.kt | 381 ++++++ .../all/javguru/JavGuruFilters.kt | 335 +++++ .../all/javguru/JavGuruUrlActivity.kt | 34 + .../javguru/extractors/EmTurboExtractor.kt | 36 + .../javguru/extractors/MaxStreamExtractor.kt | 32 + src/all/jellyfin/build.gradle | 7 + .../jellyfin/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3748 bytes .../jellyfin/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2134 bytes .../jellyfin/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5289 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9746 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15387 bytes src/all/jellyfin/res/web_hi_res_512.png | Bin 0 -> 58717 bytes .../animeextension/all/jellyfin/Jellyfin.kt | 803 ++++++++++++ .../all/jellyfin/JellyfinAuthenticator.kt | 94 ++ .../all/jellyfin/JellyfinConstants.kt | 129 ++ .../all/jellyfin/JellyfinDto.kt | 234 ++++ .../all/jellyfin/JellyfinFactory.kt | 18 + src/all/lmanime/build.gradle | 15 + .../lmanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3576 bytes .../lmanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1901 bytes .../lmanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5095 bytes .../lmanime/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9414 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13284 bytes .../animeextension/all/lmanime/LMAnime.kt | 117 ++ src/all/missav/build.gradle | 14 + .../missav/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3502 bytes .../missav/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1953 bytes .../missav/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4476 bytes .../missav/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7997 bytes .../missav/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11750 bytes src/all/missav/res/web_hi_res_512.png | Bin 0 -> 65852 bytes .../animeextension/all/missav/MissAV.kt | 191 +++ .../all/missav/MissAVFilters.kt | 346 ++++++ src/all/sudatchi/AndroidManifest.xml | 22 + src/all/sudatchi/build.gradle | 11 + .../sudatchi/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4883 bytes .../sudatchi/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3033 bytes .../sudatchi/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6978 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11539 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17732 bytes .../animeextension/all/sudatchi/Sudatchi.kt | 292 +++++ .../all/sudatchi/SudatchiFilters.kt | 72 ++ .../all/sudatchi/SudatchiUrlActivity.kt | 41 + .../all/sudatchi/dto/SudatchiDto.kt | 111 ++ src/all/supjav/AndroidManifest.xml | 22 + src/all/supjav/build.gradle | 15 + .../supjav/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3675 bytes .../supjav/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2328 bytes .../supjav/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4933 bytes .../supjav/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8893 bytes .../supjav/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13031 bytes .../animeextension/all/supjav/SupJav.kt | 244 ++++ .../all/supjav/SupJavFactory.kt | 11 + .../all/supjav/SupJavUrlActivity.kt | 41 + src/all/torrentioanime/AndroidManifest.xml | 22 + src/all/torrentioanime/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1784 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1058 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2272 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4152 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6193 bytes .../all/torrentioanime/Torrentio.kt | 908 ++++++++++++++ .../torrentioanime/TorrentioUrlActivity.kt | 41 + .../all/torrentioanime/dto/TorrentioDto.kt | 153 +++ src/ar/akwam/build.gradle | 7 + src/ar/akwam/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3350 bytes src/ar/akwam/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1971 bytes src/ar/akwam/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4898 bytes .../akwam/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8136 bytes .../akwam/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11864 bytes src/ar/akwam/res/play_store_512.png | Bin 0 -> 33190 bytes .../animeextension/ar/akwam/Akwam.kt | 355 ++++++ src/ar/anime4up/build.gradle | 19 + .../anime4up/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3392 bytes .../anime4up/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1828 bytes .../anime4up/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4988 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8581 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13322 bytes src/ar/anime4up/res/play_store_512.png | Bin 0 -> 72918 bytes .../animeextension/ar/anime4up/Anime4Up.kt | 233 ++++ .../ar/anime4up/Anime4UpFilters.kt | 110 ++ .../ar/anime4up/extractors/SharedExtractor.kt | 15 + .../anime4up/extractors/VidYardExtractor.kt | 30 + src/ar/animeblkom/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2775 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1761 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4116 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7245 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11283 bytes src/ar/animeblkom/res/web_hi_res_512.png | Bin 0 -> 56508 bytes .../ar/animeblkom/AnimeBlkom.kt | 252 ++++ src/ar/animeiat/build.gradle | 7 + .../animeiat/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3438 bytes .../animeiat/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1772 bytes .../animeiat/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4899 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9456 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14200 bytes src/ar/animeiat/res/web_hi_res_512.png | Bin 0 -> 78302 bytes .../animeextension/ar/animeiat/Animeiat.kt | 232 ++++ .../ar/animeiat/dto/AnimeiatDto.kt | 97 ++ src/ar/animelek/build.gradle | 14 + .../animelek/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3555 bytes .../animelek/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1940 bytes .../animelek/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5232 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8979 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13968 bytes src/ar/animelek/res/play_store_512.png | Bin 0 -> 44037 bytes .../animeextension/ar/animelek/AnimeLek.kt | 197 +++ .../ar/animelek/extractors/SharedExtractor.kt | 19 + src/ar/animerco/build.gradle | 19 + .../animerco/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2618 bytes .../animerco/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1569 bytes .../animerco/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3869 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6665 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9569 bytes src/ar/animerco/res/play_store_512.png | Bin 0 -> 21204 bytes .../animeextension/ar/animerco/Animerco.kt | 259 ++++ .../ar/animerco/extractors/SharedExtractor.kt | 15 + src/ar/arabanime/build.gradle | 7 + .../arabanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3255 bytes .../arabanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1717 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4705 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7900 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13960 bytes src/ar/arabanime/res/web_hi_res_512.png | Bin 0 -> 79344 bytes .../animeextension/ar/arabanime/ArabAnime.kt | 268 ++++ .../ar/arabanime/dto/ArabAnimeDto.kt | 62 + src/ar/arabseed/build.gradle | 13 + .../arabseed/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5012 bytes .../arabseed/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2693 bytes .../arabseed/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6765 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12418 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17499 bytes src/ar/arabseed/res/web_hi_res_512.png | Bin 0 -> 95029 bytes .../animeextension/ar/arabseed/ArabSeed.kt | 237 ++++ src/ar/asia2tv/build.gradle | 16 + .../asia2tv/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3888 bytes .../asia2tv/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2250 bytes .../asia2tv/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5828 bytes .../asia2tv/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9951 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15078 bytes src/ar/asia2tv/res/play_store_512.png | Bin 0 -> 42310 bytes .../animeextension/ar/asia2tv/Asia2TV.kt | 266 ++++ src/ar/cimaleek/build.gradle | 11 + .../cimaleek/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4821 bytes .../cimaleek/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2529 bytes .../cimaleek/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6825 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13520 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 20227 bytes .../animeextension/ar/cimaleek/Cimaleek.kt | 281 +++++ .../cimaleek/interceptor/WebViewResolver.kt | 75 ++ src/ar/egydead/build.gradle | 13 + .../egydead/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2871 bytes .../egydead/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1516 bytes .../egydead/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4032 bytes .../egydead/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7585 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10838 bytes src/ar/egydead/res/web_hi_res_512.png | Bin 0 -> 51014 bytes .../animeextension/ar/egydead/EgyDead.kt | 320 +++++ src/ar/faselhd/build.gradle | 11 + .../faselhd/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4025 bytes .../faselhd/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2351 bytes .../faselhd/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6486 bytes .../faselhd/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10519 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16212 bytes src/ar/faselhd/res/web_hi_res_512.png | Bin 0 -> 82610 bytes .../animeextension/ar/faselhd/FASELHD.kt | 288 +++++ .../ar/faselhd/WebViewResolver.kt | 69 ++ src/ar/mycima/build.gradle | 11 + src/ar/mycima/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3157 bytes src/ar/mycima/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1649 bytes .../mycima/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4151 bytes .../mycima/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8501 bytes .../mycima/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11914 bytes src/ar/mycima/res/web_hi_res_512.png | Bin 0 -> 60255 bytes .../animeextension/ar/mycima/MyCima.kt | 377 ++++++ .../ar/mycima/extractors/GoVadExtractor.kt | 21 + src/ar/okanime/AndroidManifest.xml | 22 + src/ar/okanime/build.gradle | 15 + .../okanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5221 bytes .../okanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2810 bytes .../okanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7608 bytes .../okanime/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13520 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19847 bytes .../animeextension/ar/okanime/Okanime.kt | 249 ++++ .../ar/okanime/OkanimeUrlActivity.kt | 41 + src/ar/tuktukcinema/build.gradle | 17 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3952 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2163 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5533 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10265 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15030 bytes src/ar/tuktukcinema/res/web_hi_res_512.png | Bin 0 -> 72843 bytes .../ar/tuktukcinema/Tuktukcinema.kt | 309 +++++ src/ar/witanime/build.gradle | 15 + .../witanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4006 bytes .../witanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2222 bytes .../witanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5411 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10234 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15159 bytes src/ar/witanime/res/web_hi_res_512.png | Bin 0 -> 79359 bytes .../animeextension/ar/witanime/WitAnime.kt | 257 ++++ .../ar/witanime/extractors/SharedExtractor.kt | 15 + .../witanime/extractors/SoraPlayExtractor.kt | 22 + src/ar/xsanime/build.gradle | 7 + .../xsanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4204 bytes .../xsanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2311 bytes .../xsanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5460 bytes .../xsanime/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10238 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14653 bytes src/ar/xsanime/res/web_hi_res_512.png | Bin 0 -> 72322 bytes .../animeextension/ar/xsanime/XsAnime.kt | 225 ++++ src/ar/xsmovie/build.gradle | 7 + .../xsmovie/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4702 bytes .../xsmovie/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2615 bytes .../xsmovie/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6533 bytes .../xsmovie/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12060 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16594 bytes src/ar/xsmovie/res/web_hi_res_512.png | Bin 0 -> 79664 bytes .../animeextension/ar/xsmovie/XsMovie.kt | 149 +++ src/de/animebase/build.gradle | 15 + .../animebase/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 9870 bytes .../animebase/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5518 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 15148 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 28256 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 46205 bytes .../animeextension/de/animebase/AnimeBase.kt | 299 +++++ .../de/animebase/AnimeBaseFilters.kt | 285 +++++ .../animebase/extractors/UnpackerExtractor.kt | 31 + .../animebase/extractors/VidGuardExtractor.kt | 124 ++ src/de/animeloads/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3182 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 3606 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 6706 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1812 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 2032 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 3431 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4261 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 5689 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 8966 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7973 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 9151 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 17353 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10816 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 13485 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 27128 bytes .../de/animeloads/AnimeLoads.kt | 813 ++++++++++++ .../de/animeloads/DdosGuardInterceptor.kt | 74 ++ src/de/animestream/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2152 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1365 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3158 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5701 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8904 bytes .../de/animestream/AnimeStream.kt | 138 +++ .../animestream/extractors/MetaExtractor.kt | 17 + src/de/animetoast/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4061 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2372 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6351 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12278 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19333 bytes .../de/animetoast/AnimeToast.kt | 355 ++++++ src/de/aniworld/build.gradle | 13 + .../aniworld/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3551 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 3606 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 8361 bytes .../aniworld/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1976 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 2032 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 4446 bytes .../aniworld/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5324 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 5689 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 13343 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9680 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 9151 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 26069 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15357 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 13485 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 40741 bytes .../animeextension/de/aniworld/AWConstants.kt | 30 + .../animeextension/de/aniworld/AniWorld.kt | 368 ++++++ .../de/aniworld/DdosGuardInterceptor.kt | 72 ++ .../de/aniworld/extractors/VidozaExtractor.kt | 17 + src/de/cineclix/build.gradle | 16 + .../cineclix/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2321 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 842 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3385 bytes .../mipmap-hdpi/ic_launcher_monochrome.png | Bin 0 -> 3385 bytes .../cineclix/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1417 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 448 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1991 bytes .../mipmap-mdpi/ic_launcher_monochrome.png | Bin 0 -> 1991 bytes .../cineclix/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3476 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 1306 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 5532 bytes .../mipmap-xhdpi/ic_launcher_monochrome.png | Bin 0 -> 5532 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6110 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 2940 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 9836 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.png | Bin 0 -> 9836 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9381 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 4221 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 15675 bytes .../mipmap-xxxhdpi/ic_launcher_monochrome.png | Bin 0 -> 15675 bytes .../animeextension/de/cineclix/CineClix.kt | 364 ++++++ .../cineclix/extractors/StreamVidExtractor.kt | 22 + .../extractors/SuperVideoExtractor.kt | 22 + src/de/cinemathek/build.gradle | 18 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2734 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 3606 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 5166 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1712 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 2032 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 2983 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4044 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 5689 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 8245 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6691 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 9151 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 13256 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10004 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 13485 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 20512 bytes .../de/cinemathek/Cinemathek.kt | 180 +++ src/de/einfach/AndroidManifest.xml | 26 + src/de/einfach/build.gradle | 18 + .../einfach/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3283 bytes .../einfach/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1981 bytes .../einfach/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3958 bytes .../einfach/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7262 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10441 bytes .../animeextension/de/einfach/Einfach.kt | 297 +++++ .../de/einfach/EinfachUrlActivity.kt | 42 + .../einfach/extractors/MyStreamExtractor.kt | 50 + .../einfach/extractors/UnpackerExtractor.kt | 31 + .../de/einfach/extractors/VidozaExtractor.kt | 27 + src/de/filmpalast/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2927 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 3606 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 4625 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1763 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 2032 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 2323 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4219 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 5689 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 7022 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7694 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 9151 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 13914 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11263 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 13485 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 22534 bytes .../de/filmpalast/FilmPalast.kt | 292 +++++ .../filmpalast/extractors/EvoloadExtractor.kt | 45 + .../de/filmpalast/extractors/JsUnpacker.kt | 205 +++ .../extractors/StreamHideVidExtractor.kt | 35 + .../extractors/UpstreamExtractor.kt | 30 + src/de/kinoking/build.gradle | 14 + .../kinoking/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2653 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 3606 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 3644 bytes .../kinoking/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1700 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 2032 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 2571 bytes .../kinoking/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3813 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 5689 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 5958 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6027 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 9151 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 9055 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8951 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 13485 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 13875 bytes .../animeextension/de/kinoking/Kinoking.kt | 136 ++ src/de/kool/build.gradle | 13 + src/de/kool/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6204 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 842 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 7338 bytes .../mipmap-hdpi/ic_launcher_monochrome.png | Bin 0 -> 7338 bytes src/de/kool/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3949 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 448 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 5083 bytes .../mipmap-mdpi/ic_launcher_monochrome.png | Bin 0 -> 5083 bytes src/de/kool/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9252 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 1306 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 11845 bytes .../mipmap-xhdpi/ic_launcher_monochrome.png | Bin 0 -> 11845 bytes src/de/kool/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14456 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 2940 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 17047 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.png | Bin 0 -> 17047 bytes .../kool/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 21780 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 4221 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 26485 bytes .../mipmap-xxxhdpi/ic_launcher_monochrome.png | Bin 0 -> 26485 bytes .../tachiyomi/animeextension/de/kool/Kool.kt | 764 ++++++++++++ .../de/kool/extractors/JsUnpacker.kt | 205 +++ .../de/kool/extractors/VidozaExtractor.kt | 17 + src/de/moflixstream/build.gradle | 15 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2132 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1276 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3202 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5535 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8274 bytes .../de/moflixstream/MoflixStream.kt | 257 ++++ .../de/moflixstream/dto/MoflixStreamDto.kt | 89 ++ .../extractors/UnpackerExtractor.kt | 31 + .../extractors/VidGuardExtractor.kt | 124 ++ src/de/movie2k/build.gradle | 14 + .../movie2k/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2510 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 842 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 3341 bytes .../mipmap-hdpi/ic_launcher_monochrome.png | Bin 0 -> 3341 bytes .../movie2k/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1546 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 448 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1990 bytes .../mipmap-mdpi/ic_launcher_monochrome.png | Bin 0 -> 1990 bytes .../movie2k/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3685 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 1306 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 5141 bytes .../mipmap-xhdpi/ic_launcher_monochrome.png | Bin 0 -> 5141 bytes .../movie2k/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6195 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 2940 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 10017 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.png | Bin 0 -> 10017 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9289 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 4221 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 15194 bytes .../mipmap-xxxhdpi/ic_launcher_monochrome.png | Bin 0 -> 15194 bytes .../animeextension/de/movie2k/Movie2k.kt | 259 ++++ .../movie2k/extractors/DroploadExtractor.kt | 31 + .../movie2k/extractors/UpstreamExtractor.kt | 31 + src/de/movie4k/build.gradle | 12 + .../movie4k/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3184 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 3606 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 5560 bytes .../movie4k/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1875 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 2032 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 3068 bytes .../movie4k/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4424 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 5689 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 8214 bytes .../movie4k/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7725 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 9151 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 16381 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11481 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 13485 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 24404 bytes .../animeextension/de/movie4k/Movie4k.kt | 440 +++++++ .../de/movie4k/extractors/StreamZExtractor.kt | 22 + .../de/movie4k/extractors/VidozaExtractor.kt | 17 + src/de/serienstream/build.gradle | 13 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3094 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 839 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 5239 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1870 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 446 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 2764 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4858 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 1304 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 7289 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8414 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 2936 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 13693 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13066 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 4219 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 20735 bytes .../de/serienstream/DdosGuardInterceptor.kt | 72 ++ .../de/serienstream/SConstants.kt | 28 + .../de/serienstream/Serienstream.kt | 355 ++++++ src/de/streamcloud/build.gradle | 13 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3408 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 839 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 8851 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1833 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 446 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 4321 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5358 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 1304 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 14450 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10341 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 2936 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 29548 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17115 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 4219 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 49470 bytes .../de/streamcloud/StreamCloud.kt | 198 +++ src/en/allanime/build.gradle | 16 + .../allanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3962 bytes .../allanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2061 bytes .../allanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5947 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11637 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 18331 bytes src/en/allanime/res/web_hi_res_512.png | Bin 0 -> 129213 bytes .../animeextension/en/allanime/AllAnime.kt | 667 ++++++++++ .../animeextension/en/allanime/AllAnimeDto.kt | 131 ++ .../en/allanime/AllAnimeFilters.kt | 231 ++++ .../en/allanime/AllAnimeQueries.kt | 119 ++ .../allanime/extractors/AllAnimeExtractor.kt | 252 ++++ src/en/allanimechi/build.gradle | 17 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6969 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3465 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 10172 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 20196 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 29928 bytes src/en/allanimechi/res/web_hi_res_512.png | Bin 0 -> 169281 bytes .../en/allanimechi/AllAnimeChi.kt | 680 ++++++++++ .../en/allanimechi/AllAnimeChiDto.kt | 150 +++ .../en/allanimechi/AllAnimeChiFilters.kt | 214 ++++ .../extractors/AllAnimeExtractor.kt | 113 ++ .../extractors/InternalExtractor.kt | 154 +++ src/en/allmovies/build.gradle | 7 + .../allmovies/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5871 bytes .../allmovies/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3190 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9173 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 16848 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 25931 bytes src/en/allmovies/res/web_hi_res_512.png | Bin 0 -> 98961 bytes .../animeextension/en/allmovies/AllMovies.kt | 337 +++++ src/en/animeflix/build.gradle | 7 + .../animeflix/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3818 bytes .../animeflix/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2040 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5443 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10360 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15705 bytes src/en/animeflix/res/web_hi_res_512.png | Bin 0 -> 94539 bytes .../animeextension/en/animeflix/AnimeFlix.kt | 398 ++++++ src/en/animeflixlive/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3092 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1934 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4530 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7973 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10748 bytes .../en/animeflixlive/AnimeflixLive.kt | 503 ++++++++ .../animeextension/en/animeflixlive/Dto.kt | 123 ++ .../en/animeflixlive/Filters.kt | 81 ++ src/en/animekhor/build.gradle | 15 + .../animekhor/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3779 bytes .../animekhor/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2042 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5540 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10234 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15707 bytes .../animeextension/en/animekhor/AnimeKhor.kt | 38 + .../animekhor/extractors/AnimeABCExtractor.kt | 52 + .../extractors/StreamHideExtractor.kt | 46 + src/en/animenosub/build.gradle | 16 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2991 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1695 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3933 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6911 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9927 bytes .../en/animenosub/Animenosub.kt | 122 ++ .../animenosub/extractors/VidMolyExtractor.kt | 29 + .../animenosub/extractors/VtubeExtractor.kt | 49 + .../extractors/WolfstreamExtractor.kt | 19 + src/en/animension/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2949 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1576 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4323 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7873 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12346 bytes src/en/animension/res/web_hi_res_512.png | Bin 0 -> 60325 bytes .../en/animension/Animension.kt | 213 ++++ src/en/animeowl/build.gradle | 12 + .../animeowl/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4647 bytes .../animeowl/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2821 bytes .../animeowl/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6972 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11911 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 18593 bytes src/en/animeowl/res/web_hi_res_512.png | Bin 0 -> 90613 bytes .../animeextension/en/animeowl/AnimeOwl.kt | 314 +++++ .../animeextension/en/animeowl/AnimeOwlDto.kt | 63 + .../en/animeowl/extractors/OwlExtractor.kt | 87 ++ src/en/animepahe/build.gradle | 11 + .../animepahe/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1783 bytes .../animepahe/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 857 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2109 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3376 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 4823 bytes src/en/animepahe/res/web_hi_res_512.png | Bin 0 -> 13277 bytes .../animeextension/en/animepahe/AnimePahe.kt | 381 ++++++ .../en/animepahe/DdosGuardInterceptor.kt | 69 ++ .../en/animepahe/KwikExtractor.kt | 159 +++ .../en/animepahe/dto/AnimePaheDto.kt | 42 + src/en/animeparadise/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3940 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2161 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5207 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9527 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13165 bytes src/en/animeparadise/res/web_hi_res_512.png | Bin 0 -> 66519 bytes .../en/animeparadise/AnimeParadise.kt | 220 ++++ .../en/animeparadise/AnimeParadiseDto.kt | 132 ++ src/en/animesakura/README.md | 3 + src/en/animesakura/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4297 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2117 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6045 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11402 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17250 bytes .../en/animesakura/AnimeSakura.kt | 477 +++++++ .../en/animesakura/DriveIndexExtractor.kt | 162 +++ src/en/animetake/build.gradle | 14 + .../animetake/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2819 bytes .../animetake/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1621 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3579 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6334 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8883 bytes src/en/animetake/res/web_hi_res_512.png | Bin 0 -> 30615 bytes .../animeextension/en/animetake/AnimeTake.kt | 290 +++++ .../en/animetake/AnimeTakeFilters.kt | 170 +++ src/en/asiaflix/build.gradle | 16 + .../asiaflix/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3278 bytes .../asiaflix/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1827 bytes .../asiaflix/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4358 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7777 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11440 bytes src/en/asiaflix/res/web_hi_res_512.png | Bin 0 -> 55492 bytes .../animeextension/en/asiaflix/AsiaFlix.kt | 287 +++++ .../en/asiaflix/dto/DetailsResponseDto.kt | 39 + .../en/asiaflix/dto/EpisodeResponseDto.kt | 52 + .../en/asiaflix/dto/SearchResponseDto.kt | 20 + .../en/asiaflix/dto/VideoResponseDto.kt | 22 + src/en/asianload/build.gradle | 14 + .../asianload/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3366 bytes .../asianload/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2168 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5248 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9287 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14388 bytes src/en/asianload/res/play_store_512.png | Bin 0 -> 57873 bytes .../animeextension/en/asianload/AsianLoad.kt | 207 ++++ src/en/ask4movie/build.gradle | 12 + .../ask4movie/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3006 bytes .../ask4movie/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1718 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3956 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7126 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9705 bytes src/en/ask4movie/res/web_hi_res_512.png | Bin 0 -> 44294 bytes .../animeextension/en/ask4movie/Ask4Movie.kt | 254 ++++ src/en/bestdubbedanime/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4215 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2136 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6536 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13051 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 21205 bytes src/en/bestdubbedanime/res/web_hi_res_512.png | Bin 0 -> 166551 bytes .../en/bestdubbedanime/BestDubbedAnime.kt | 475 +++++++ src/en/donghuastream/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 9026 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4309 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 14416 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 28487 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 46093 bytes .../en/donghuastream/DonghuaStream.kt | 41 + .../extractors/StreamPlayExtractor.kt | 71 ++ src/en/dopebox/build.gradle | 9 + .../dopebox/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3817 bytes .../dopebox/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2444 bytes .../dopebox/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5614 bytes .../dopebox/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9577 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14762 bytes src/en/dopebox/res/play_store_512.png | Bin 0 -> 76341 bytes .../animeextension/en/dopebox/DopeBox.kt | 12 + src/en/dramacool/build.gradle | 13 + .../dramacool/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5091 bytes .../dramacool/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3118 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7768 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13086 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 20635 bytes src/en/dramacool/res/play_store_512.png | Bin 0 -> 89701 bytes .../animeextension/en/dramacool/DramaCool.kt | 202 +++ src/en/edytjedhgmdhm/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2249 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1305 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2837 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5101 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6980 bytes src/en/edytjedhgmdhm/res/web_hi_res_512.png | Bin 0 -> 30332 bytes .../en/edytjedhgmdhm/Edytjedhgmdhm.kt | 347 ++++++ src/en/fmovies/build.gradle | 13 + .../fmovies/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3071 bytes .../fmovies/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1734 bytes .../fmovies/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4007 bytes .../fmovies/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7238 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10188 bytes src/en/fmovies/res/web_hi_res_512.png | Bin 0 -> 38372 bytes .../animeextension/en/fmovies/FMovies.kt | 368 ++++++ .../animeextension/en/fmovies/FMoviesDto.kt | 54 + .../en/fmovies/FMoviesFilters.kt | 304 +++++ .../animeextension/en/fmovies/FmoviesUtils.kt | 140 +++ src/en/genoanime/build.gradle | 12 + .../genoanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 36898 bytes .../genoanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 22987 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 51276 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 97750 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 162447 bytes src/en/genoanime/res/web_hi_res_512.png | Bin 0 -> 164682 bytes .../animeextension/en/genoanime/GenoAnime.kt | 198 +++ src/en/gogoanime/build.gradle | 14 + .../gogoanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2102 bytes .../gogoanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1235 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3130 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5462 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8180 bytes src/en/gogoanime/res/web_hi_res_512.png | Bin 0 -> 30153 bytes .../animeextension/en/gogoanime/GogoAnime.kt | 299 +++++ .../en/gogoanime/GogoAnimeFilters.kt | 414 +++++++ src/en/hahomoe/build.gradle | 8 + .../hahomoe/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5731 bytes .../hahomoe/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3340 bytes .../hahomoe/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7453 bytes .../hahomoe/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13306 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 18780 bytes src/en/hahomoe/res/web_hi_res_512.png | Bin 0 -> 87796 bytes .../animeextension/en/hahomoe/HahoMoe.kt | 216 ++++ .../en/hahomoe/HahoMoeFilters.kt | 740 +++++++++++ src/en/hanime/build.gradle | 8 + src/en/hanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2115 bytes src/en/hanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1281 bytes .../hanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2775 bytes .../hanime/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4499 bytes .../hanime/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5856 bytes src/en/hanime/res/web_hi_res_500.png | Bin 0 -> 22472 bytes .../animeextension/en/hanime/DataModel.kt | 255 ++++ .../animeextension/en/hanime/Hanime.kt | 543 ++++++++ src/en/hentaimama/build.gradle | 8 + src/en/hentaimama/ic_launcher-playstore.png | Bin 0 -> 21969 bytes .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4304 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2394 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6592 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11928 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17215 bytes src/en/hentaimama/res/web_hi_res_500.png | Bin 0 -> 21969 bytes .../en/hentaimama/HentaiMama.kt | 610 +++++++++ src/en/hstream/AndroidManifest.xml | 22 + src/en/hstream/build.gradle | 8 + .../hstream/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5091 bytes .../hstream/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2816 bytes .../hstream/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7422 bytes .../hstream/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13108 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 20174 bytes .../animeextension/en/hstream/Hstream.kt | 263 ++++ .../en/hstream/HstreamFilters.kt | 212 ++++ .../en/hstream/HstreamUrlActivity.kt | 41 + src/en/kaido/build.gradle | 9 + src/en/kaido/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4959 bytes src/en/kaido/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2641 bytes src/en/kaido/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6792 bytes .../kaido/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12263 bytes .../kaido/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17540 bytes src/en/kaido/res/play_store_512.png | Bin 0 -> 97898 bytes .../animeextension/en/kaido/Kaido.kt | 32 + src/en/kawaiifu/build.gradle | 9 + .../kawaiifu/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2395 bytes .../kawaiifu/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1358 bytes .../kawaiifu/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3154 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5699 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8152 bytes src/en/kawaiifu/res/web_hi_res_512.png | Bin 0 -> 44018 bytes .../animeextension/en/kawaiifu/Kawaiifu.kt | 259 ++++ .../en/kawaiifu/KawaiifuFilters.kt | 311 +++++ src/en/kayoanime/README.md | 3 + src/en/kayoanime/build.gradle | 11 + .../kayoanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3555 bytes .../kayoanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2046 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4758 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8451 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11810 bytes src/en/kayoanime/res/web_hi_res_512.png | Bin 0 -> 56939 bytes .../en/kayoanime/DriveIndexExtractor.kt | 162 +++ .../animeextension/en/kayoanime/Kayoanime.kt | 592 +++++++++ src/en/kickassanime/AndroidManifest.xml | 23 + src/en/kickassanime/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3643 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2076 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4795 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8677 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11984 bytes src/en/kickassanime/res/web_hi_res_512.png | Bin 0 -> 48170 bytes .../en/kickassanime/KickAssAnime.kt | 434 +++++++ .../en/kickassanime/KickAssAnimeFilters.kt | 300 +++++ .../kickassanime/KickAssAnimeUrlActivity.kt | 41 + .../en/kickassanime/dto/KickAssAnimeDto.kt | 95 ++ .../extractors/KickAssAnimeExtractor.kt | 146 +++ src/en/kimoitv/build.gradle | 7 + .../kimoitv/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6176 bytes .../kimoitv/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3002 bytes .../kimoitv/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9948 bytes .../kimoitv/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 20687 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 33114 bytes src/en/kimoitv/res/web_hi_res_512.png | Bin 0 -> 246706 bytes .../animeextension/en/kimoitv/KimoiTV.kt | 497 ++++++++ src/en/kissanime/build.gradle | 14 + .../kissanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4473 bytes .../kissanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2830 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6271 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11141 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15628 bytes src/en/kissanime/res/web_hi_res_512.png | Bin 0 -> 90847 bytes .../animeextension/en/kissanime/KissAnime.kt | 321 +++++ .../en/kissanime/KissAnimeFilters.kt | 152 +++ .../extractors/VodstreamExtractor.kt | 77 ++ src/en/kisskh/build.gradle | 7 + src/en/kisskh/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3090 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 0 -> 842 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 4300 bytes .../mipmap-hdpi/ic_launcher_monochrome.png | Bin 0 -> 4300 bytes src/en/kisskh/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1750 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 0 -> 450 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 2207 bytes .../mipmap-mdpi/ic_launcher_monochrome.png | Bin 0 -> 2207 bytes .../kisskh/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4029 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 0 -> 1307 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 5567 bytes .../mipmap-xhdpi/ic_launcher_monochrome.png | Bin 0 -> 5567 bytes .../kisskh/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7389 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 0 -> 2939 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 10744 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.png | Bin 0 -> 10744 bytes .../kisskh/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10086 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 0 -> 4223 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 16715 bytes .../mipmap-xxxhdpi/ic_launcher_monochrome.png | Bin 0 -> 16715 bytes .../animeextension/en/kisskh/KissKH.kt | 214 ++++ .../animeextension/en/kisskh/SubDecryptor.kt | 80 ++ src/en/luciferdonghua/build.gradle | 15 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 10387 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4893 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 17203 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 35081 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 59180 bytes .../en/luciferdonghua/LuciferDonghua.kt | 42 + src/en/multimovies/build.gradle | 18 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3699 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1919 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5215 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9739 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14308 bytes .../en/multimovies/Multimovies.kt | 198 +++ .../en/multimovies/MultimoviesFilters.kt | 73 ++ .../extractors/AutoEmbedExtractor.kt | 887 +++++++++++++ .../extractors/MultimoviesCloudExtractor.kt | 46 + .../extractors/RabbitStreamExtractor.kt | 96 ++ src/en/myanime/build.gradle | 14 + .../myanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5059 bytes .../myanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2507 bytes .../myanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7740 bytes .../myanime/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 16047 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 25547 bytes src/en/myanime/res/web_hi_res_512.png | Bin 0 -> 191697 bytes .../animeextension/en/myanime/Myanime.kt | 287 +++++ .../en/myanime/extractors/YouTubeExtractor.kt | 179 +++ src/en/myrunningman/AndroidManifest.xml | 22 + src/en/myrunningman/build.gradle | 13 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4253 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2291 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6691 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12163 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 22584 bytes .../en/myrunningman/MyRunningMan.kt | 225 ++++ .../myrunningman/MyRunningManUrlActivity.kt | 41 + src/en/nineanime/build.gradle | 14 + .../nineanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3903 bytes .../nineanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2191 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5109 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8948 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12235 bytes src/en/nineanime/res/web_hi_res_512.png | Bin 0 -> 48438 bytes .../animeextension/en/nineanime/Aniwave.kt | 464 +++++++ .../animeextension/en/nineanime/AniwaveDto.kt | 49 + .../en/nineanime/AniwaveFilters.kt | 270 ++++ .../en/nineanime/AniwaveUtils.kt | 57 + src/en/nollyverse/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 13660 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 6730 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 22927 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 47328 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 78794 bytes .../en/nollyverse/NollyVerse.kt | 551 +++++++++ src/en/noobsubs/build.gradle | 7 + .../noobsubs/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1483 bytes .../noobsubs/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 875 bytes .../noobsubs/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 1919 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3483 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5281 bytes src/en/noobsubs/res/web_hi_res_512.png | Bin 0 -> 16733 bytes .../animeextension/en/noobsubs/NoobSubs.kt | 238 ++++ src/en/oppaistream/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4116 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2213 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5959 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11230 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16880 bytes src/en/oppaistream/res/web_hi_res_512.png | Bin 0 -> 96372 bytes .../en/oppaistream/OppaiStream.kt | 350 ++++++ .../en/oppaistream/OppaiStreamFilters.kt | 205 +++ .../en/oppaistream/dto/OppaiStreamDto.kt | 24 + src/en/putlocker/build.gradle | 11 + .../putlocker/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3023 bytes .../putlocker/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1719 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4087 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7031 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9395 bytes src/en/putlocker/res/web_hi_res_512.png | Bin 0 -> 39294 bytes .../animeextension/en/putlocker/CryptoAES.kt | 157 +++ .../animeextension/en/putlocker/JSONUtil.kt | 76 ++ .../animeextension/en/putlocker/PutLocker.kt | 274 +++++ .../en/putlocker/PutLockerDto.kt | 34 + .../extractors/PutServerExtractor.kt | 114 ++ src/en/ripcrabbyanime/README.md | 3 + src/en/ripcrabbyanime/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3539 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1906 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4812 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8905 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12551 bytes src/en/ripcrabbyanime/res/web_hi_res_512.png | Bin 0 -> 75342 bytes .../en/ripcrabbyanime/Ripcrabbyanime.kt | 432 +++++++ src/en/rule34video/AndroidManifest.xml | 23 + src/en/rule34video/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2640 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1669 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3229 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4886 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6927 bytes src/en/rule34video/res/web_hi_res_500.png | Bin 0 -> 6927 bytes .../en/rule34video/DdosGuardInterceptor.kt | 69 ++ .../en/rule34video/Rule34Video.kt | 271 ++++ .../en/rule34video/Rule34VideoUrlActivity.kt | 37 + src/en/seez/build.gradle | 12 + src/en/seez/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3034 bytes src/en/seez/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1717 bytes src/en/seez/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4049 bytes src/en/seez/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7174 bytes .../seez/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10093 bytes src/en/seez/res/web_hi_res_512.png | Bin 0 -> 47358 bytes .../tachiyomi/animeextension/en/seez/Seez.kt | 434 +++++++ .../animeextension/en/seez/SeezDto.kt | 122 ++ src/en/sflix/build.gradle | 9 + src/en/sflix/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5254 bytes src/en/sflix/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2823 bytes src/en/sflix/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7671 bytes .../sflix/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14572 bytes .../sflix/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 21911 bytes src/en/sflix/res/play_store_512.png | Bin 0 -> 84015 bytes .../animeextension/en/sflix/SFlix.kt | 12 + src/en/slothanime/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4660 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2519 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6608 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12644 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 20546 bytes .../animeextension/en/slothanime/Filters.kt | 122 ++ .../en/slothanime/SlothAnime.kt | 197 +++ src/en/superstream/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 7548 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3785 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 11913 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 24215 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 40281 bytes src/en/superstream/res/web_hi_res_512.png | Bin 0 -> 214717 bytes .../en/superstream/DataModel.kt | 289 +++++ .../en/superstream/SuperStream.kt | 239 ++++ .../en/superstream/SuperStreamAPI.kt | 1095 +++++++++++++++++ src/en/tokuzilla/build.gradle | 11 + .../tokuzilla/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2565 bytes .../tokuzilla/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1444 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3407 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6175 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9514 bytes .../animeextension/en/tokuzilla/Tokuzilla.kt | 198 +++ src/en/uhdmovies/build.gradle | 7 + .../uhdmovies/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2675 bytes .../uhdmovies/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1449 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4173 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7323 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11379 bytes src/en/uhdmovies/res/web_hi_res_512.png | Bin 0 -> 49074 bytes .../en/uhdmovies/RedirectorBypasser.kt | 65 + .../animeextension/en/uhdmovies/UHDMovies.kt | 459 +++++++ src/en/uniquestream/build.gradle | 9 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3768 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2088 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5150 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9414 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13958 bytes src/en/uniquestream/res/web_hi_res_512.png | Bin 0 -> 71236 bytes .../en/uniquestream/UniqueStream.kt | 320 +++++ src/en/wcofun/build.gradle | 7 + src/en/wcofun/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2195 bytes src/en/wcofun/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1220 bytes .../wcofun/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2975 bytes .../wcofun/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4995 bytes .../wcofun/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7314 bytes src/en/wcofun/res/web_hi_res_512.png | Bin 0 -> 24101 bytes .../animeextension/en/wcofun/Wcofun.kt | 195 +++ src/en/wcostream/build.gradle | 7 + .../wcostream/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3169 bytes .../wcostream/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1666 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4312 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8342 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11272 bytes src/en/wcostream/res/play_store_512.png | Bin 0 -> 65367 bytes .../animeextension/en/wcostream/WCOStream.kt | 310 +++++ src/en/zoro/build.gradle | 9 + src/en/zoro/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4625 bytes src/en/zoro/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2631 bytes src/en/zoro/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6436 bytes src/en/zoro/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13069 bytes .../zoro/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 21381 bytes .../animeextension/en/zoro/HiAnime.kt | 36 + src/es/animefenix/build.gradle | 24 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 16452 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 16452 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 16452 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 16452 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16452 bytes .../es/animefenix/Animefenix.kt | 414 +++++++ .../extractors/SolidFilesExtractor.kt | 27 + src/es/animeflv/build.gradle | 14 + .../animeflv/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2387 bytes .../animeflv/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1431 bytes .../animeflv/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3053 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4891 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7041 bytes .../animeextension/es/animeflv/AnimeFlv.kt | 340 +++++ src/es/animeid/build.gradle | 11 + .../animeid/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 11952 bytes .../animeid/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5805 bytes .../animeid/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 20154 bytes .../animeid/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 40568 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 65680 bytes .../animeextension/es/animeid/AnimeID.kt | 365 ++++++ src/es/animelatinohd/build.gradle | 15 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5718 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3588 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8509 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14418 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19936 bytes .../es/animelatinohd/AnimeLatinoHD.kt | 435 +++++++ .../es/animelatinohd/extractors/JsUnpacker.kt | 205 +++ .../extractors/SolidFilesExtractor.kt | 27 + src/es/animemovil/build.gradle | 23 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2458 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1342 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2877 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4404 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6158 bytes .../es/animemovil/AnimeMovil.kt | 473 +++++++ src/es/animeonlineninja/build.gradle | 17 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3155 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1978 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4372 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7072 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9891 bytes .../es/animeonlineninja/AnimeOnlineNinja.kt | 266 ++++ .../AnimeOnlineNinjaFilters.kt | 127 ++ .../es/animeonlineninja/VrfInterceptor.kt | 40 + src/es/animeyt/build.gradle | 10 + .../animeyt/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 10857 bytes .../animeyt/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5594 bytes .../animeyt/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 17507 bytes .../animeyt/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 34001 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 55050 bytes .../animeextension/es/animeyt/Animeyt.kt | 188 +++ src/es/animeytes/build.gradle | 15 + .../animeytes/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 9621 bytes .../animeytes/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4965 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 15669 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 30961 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 50655 bytes .../animeextension/es/animeytes/AnimeYTES.kt | 29 + src/es/asialiveaction/build.gradle | 27 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6481 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3492 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 10041 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 18825 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 29034 bytes .../es/asialiveaction/AsiaLiveAction.kt | 357 ++++++ .../extractors/VidGuardExtractor.kt | 124 ++ src/es/beatzanime/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3933 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2031 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4794 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8732 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12707 bytes .../es/beatzanime/BeatZAnime.kt | 281 +++++ .../animeextension/es/beatzanime/Filters.kt | 45 + src/es/cuevana/build.gradle | 26 + .../cuevana/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5267 bytes .../cuevana/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3245 bytes .../cuevana/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7857 bytes .../cuevana/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13144 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19043 bytes .../animeextension/es/cuevana/CuevanaCh.kt | 398 ++++++ .../animeextension/es/cuevana/CuevanaEu.kt | 399 ++++++ .../es/cuevana/CuevanaFactory.kt | 11 + .../es/cuevana/models/AnimeEpisodesList.kt | 55 + .../es/cuevana/models/PopularAnimeList.kt | 176 +++ src/es/doramasflix/build.gradle | 26 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3165 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1762 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4675 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8350 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12243 bytes .../es/doramasflix/DataModel.kt | 193 +++ .../es/doramasflix/Doramasflix.kt | 592 +++++++++ src/es/doramasyt/build.gradle | 13 + .../doramasyt/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 10484 bytes .../doramasyt/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5606 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 16322 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 28727 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 42449 bytes .../animeextension/es/doramasyt/Doramasyt.kt | 288 +++++ .../extractors/SolidFilesExtractor.kt | 27 + src/es/ennovelas/build.gradle | 17 + .../ennovelas/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 7415 bytes .../ennovelas/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4242 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 11155 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 19654 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 30804 bytes .../animeextension/es/ennovelas/EnNovelas.kt | 323 +++++ src/es/fanpelis/build.gradle | 13 + .../fanpelis/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3358 bytes .../fanpelis/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2139 bytes .../fanpelis/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5395 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11010 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15970 bytes .../animeextension/es/fanpelis/FanPelis.kt | 303 +++++ src/es/gnula/build.gradle | 24 + src/es/gnula/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 14105 bytes src/es/gnula/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 6505 bytes src/es/gnula/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 24754 bytes .../gnula/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 54647 bytes .../gnula/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 96141 bytes .../animeextension/es/gnula/DataModel.kt | 235 ++++ .../animeextension/es/gnula/Gnula.kt | 366 ++++++ src/es/hackstore/build.gradle | 15 + .../hackstore/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6044 bytes .../hackstore/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3424 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9127 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 16579 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 26355 bytes .../animeextension/es/hackstore/Hackstore.kt | 297 +++++ .../es/hackstore/HackstoreUrlActivity.kt | 41 + src/es/hentaijk/build.gradle | 12 + .../hentaijk/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 8579 bytes .../hentaijk/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4563 bytes .../hentaijk/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 13434 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 25706 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 40916 bytes .../animeextension/es/hentaijk/Hentaijk.kt | 457 +++++++ src/es/hentaila/build.gradle | 17 + .../hentaila/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2226 bytes .../hentaila/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1197 bytes .../hentaila/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2815 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4764 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7021 bytes .../animeextension/es/hentaila/Hentaila.kt | 355 ++++++ .../animeextension/es/hentaila/HentailaDto.kt | 11 + src/es/hentaitk/build.gradle | 18 + .../hentaitk/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 11875 bytes .../hentaitk/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5532 bytes .../hentaitk/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 19774 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 41417 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 70803 bytes .../animeextension/es/hentaitk/Hentaitk.kt | 360 ++++++ src/es/jkanime/build.gradle | 17 + .../jkanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 13742 bytes .../jkanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 13742 bytes .../jkanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 13742 bytes .../jkanime/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13742 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13742 bytes .../animeextension/es/jkanime/Jkanime.kt | 524 ++++++++ .../es/jkanime/extractors/JkanimeExtractor.kt | 66 + src/es/jkhentai/build.gradle | 13 + .../jkhentai/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2299 bytes .../jkhentai/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2299 bytes .../jkhentai/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2299 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 2299 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 2299 bytes .../animeextension/es/jkhentai/Jkhentai.kt | 240 ++++ .../extractors/SolidFilesExtractor.kt | 27 + src/es/lacartoons/build.gradle | 15 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 9998 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4407 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 16313 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 35034 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 60141 bytes .../es/lacartoons/Lacartoons.kt | 224 ++++ src/es/latanime/build.gradle | 16 + .../latanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4028 bytes .../latanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2179 bytes .../latanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5457 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9982 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14309 bytes src/es/latanime/res/web_hi_res_512.png | Bin 0 -> 57689 bytes .../animeextension/es/latanime/Latanime.kt | 347 ++++++ src/es/legionanime/build.gradle | 17 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6709 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3566 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 10808 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 21280 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 34689 bytes .../es/legionanime/LegionAnime.kt | 479 +++++++ .../animeextension/es/legionanime/Utils.kt | 465 +++++++ .../extractors/JkanimeExtractor.kt | 57 + .../extractors/MediaFireExtractor.kt | 19 + src/es/locopelis/build.gradle | 14 + .../locopelis/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2082 bytes .../locopelis/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1173 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3173 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6122 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10212 bytes .../animeextension/es/locopelis/LocoPelis.kt | 249 ++++ src/es/metroseries/build.gradle | 18 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2720 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1527 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3172 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4453 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 5928 bytes .../es/metroseries/MetroSeries.kt | 312 +++++ src/es/monoschinos/build.gradle | 15 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 384812 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 384812 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 384812 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 384812 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 384812 bytes .../es/monoschinos/MonosChinos.kt | 288 +++++ .../extractors/SolidFilesExtractor.kt | 27 + src/es/mundodonghua/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 12026 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 6002 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 19720 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 39297 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 63380 bytes .../es/mundodonghua/MundoDonghua.kt | 308 +++++ .../es/mundodonghua/extractors/JsUnpacker.kt | 193 +++ .../extractors/ProteaExtractor.kt | 50 + src/es/pelisflix/build.gradle | 12 + .../pelisflix/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6104 bytes .../pelisflix/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3575 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8988 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 15656 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 22973 bytes .../animeextension/es/pelisflix/Pelisflix.kt | 267 ++++ .../es/pelisflix/PelisflixFactory.kt | 226 ++++ src/es/pelisforte/build.gradle | 24 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3976 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2039 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4980 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8685 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13957 bytes .../es/pelisforte/PelisForte.kt | 330 +++++ src/es/pelisplushd/build.gradle | 26 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3656 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3656 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3656 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3656 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 3656 bytes .../es/pelisplushd/Pelisplushd.kt | 352 ++++++ .../es/pelisplushd/PelisplushdFactory.kt | 12 + .../es/pelisplushd/Pelisplusph.kt | 363 ++++++ .../es/pelisplushd/Pelisplusto.kt | 302 +++++ .../es/pelisplushd/extractors/JsUnpacker.kt | 205 +++ .../extractors/StreamHideExtractor.kt | 34 + src/es/tioanimeh/build.gradle | 13 + .../tioanimeh/res/mipmap-hdpi/ic_launcher.jpg | Bin 0 -> 43584 bytes .../tioanimeh/res/mipmap-mdpi/ic_launcher.jpg | Bin 0 -> 43584 bytes .../res/mipmap-xhdpi/ic_launcher.jpg | Bin 0 -> 43584 bytes .../res/mipmap-xxhdpi/ic_launcher.jpg | Bin 0 -> 43584 bytes .../res/mipmap-xxxhdpi/ic_launcher.jpg | Bin 0 -> 43584 bytes .../animeextension/es/tioanimeh/TioanimeH.kt | 255 ++++ .../es/tioanimeh/TioanimeHFactory.kt | 79 ++ .../tioanimeh/extractors/VidGuardExtractor.kt | 124 ++ src/es/tiodonghua/build.gradle | 17 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 11681 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5789 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 18968 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 38380 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 59860 bytes .../es/tiodonghua/Tiodonghua.kt | 34 + src/fr/animesama/AndroidManifest.xml | 22 + src/fr/animesama/build.gradle | 13 + .../animesama/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3522 bytes .../animesama/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2018 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4885 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8793 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13128 bytes src/fr/animesama/res/web_hi_res_512.png | Bin 0 -> 66702 bytes .../animeextension/fr/animesama/AnimeSama.kt | 295 +++++ .../fr/animesama/AnimeSamaFilters.kt | 125 ++ .../fr/animesama/AnimeSamaUrlActivity.kt | 41 + src/fr/animevostfr/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3316 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1792 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4738 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8329 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13129 bytes src/fr/animevostfr/res/web_hi_res_512.png | Bin 0 -> 80057 bytes .../fr/animevostfr/AnimeVostFr.kt | 410 ++++++ .../fr/animevostfr/CloudFlareInterceptor.kt | 88 ++ .../animevostfr/extractors/CdopeExtractor.kt | 65 + src/fr/anisama/AndroidManifest.xml | 22 + src/fr/anisama/build.gradle | 16 + .../anisama/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4301 bytes .../anisama/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2512 bytes .../anisama/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6008 bytes .../anisama/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10777 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17605 bytes .../animeextension/fr/anisama/AniSama.kt | 346 ++++++ .../fr/anisama/AniSamaFilters.kt | 80 ++ .../fr/anisama/AniSamaUrlActivity.kt | 41 + .../fr/anisama/extractors/VidCdnExtractor.kt | 51 + src/fr/empirestreaming/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3231 bytes .../mipmap-hdpi/ic_launcher_adaptive_back.png | Bin 0 -> 3606 bytes .../mipmap-hdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 4300 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2112 bytes .../mipmap-mdpi/ic_launcher_adaptive_back.png | Bin 0 -> 2032 bytes .../mipmap-mdpi/ic_launcher_adaptive_fore.png | Bin 0 -> 2914 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4783 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 5689 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 6571 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7228 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 9151 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 10501 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10941 bytes .../ic_launcher_adaptive_back.png | Bin 0 -> 13485 bytes .../ic_launcher_adaptive_fore.png | Bin 0 -> 15720 bytes .../fr/empirestreaming/EmpireStreaming.kt | 297 +++++ .../empirestreaming/dto/EmpireStreamingDto.kt | 65 + .../extractors/EplayerExtractor.kt | 55 + src/fr/franime/AndroidManifest.xml | 22 + src/fr/franime/build.gradle | 14 + .../franime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3742 bytes .../franime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2060 bytes .../franime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4738 bytes .../franime/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8361 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11233 bytes .../animeextension/fr/franime/FrAnime.kt | 187 +++ .../fr/franime/FrAnimeUrlActivity.kt | 34 + .../fr/franime/dto/FrAnimeDto.kt | 91 ++ src/fr/frenchanime/build.gradle | 22 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4472 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2429 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6552 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11861 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16816 bytes src/fr/frenchanime/res/web_hi_res_512.png | Bin 0 -> 78989 bytes .../fr/frenchanime/FrenchAnime.kt | 116 ++ src/fr/hds/build.gradle | 14 + src/fr/hds/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3259 bytes src/fr/hds/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1878 bytes src/fr/hds/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4102 bytes src/fr/hds/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6345 bytes src/fr/hds/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9257 bytes .../tachiyomi/animeextension/fr/hds/Hds.kt | 75 ++ src/fr/jetanime/build.gradle | 14 + .../jetanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4424 bytes .../jetanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2350 bytes .../jetanime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6082 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11230 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15424 bytes src/fr/jetanime/res/web_hi_res_512.png | Bin 0 -> 72121 bytes .../animeextension/fr/jetanime/JetAnime.kt | 171 +++ .../jetanime/extractors/HdsplayExtractor.kt | 44 + .../jetanime/extractors/SentinelExtractor.kt | 44 + src/fr/mykdrama/build.gradle | 16 + .../mykdrama/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5405 bytes .../mykdrama/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3013 bytes .../mykdrama/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7740 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14256 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 22093 bytes src/fr/mykdrama/res/web_hi_res_512.png | Bin 0 -> 125679 bytes .../animeextension/fr/mykdrama/MyKdrama.kt | 117 ++ .../fr/mykdrama/MyKdramaFilters.kt | 45 + src/fr/nekosama/build.gradle | 13 + .../nekosama/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 11242 bytes .../nekosama/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 11242 bytes .../nekosama/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 11242 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11242 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11242 bytes .../animeextension/fr/nekosama/NekoSama.kt | 339 +++++ src/fr/otakufr/build.gradle | 18 + .../otakufr/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 10653 bytes .../otakufr/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4967 bytes .../otakufr/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 17680 bytes .../otakufr/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 36610 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 62150 bytes src/fr/otakufr/res/web_hi_res_512.png | Bin 0 -> 444335 bytes .../animeextension/fr/otakufr/OtakuFR.kt | 369 ++++++ .../otakufr/extractors/UpstreamExtractor.kt | 23 + .../fr/otakufr/extractors/VidbmExtractor.kt | 31 + src/fr/voircartoon/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4909 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2735 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7320 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12275 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12524 bytes .../fr/voircartoon/VoirCartoon.kt | 138 +++ .../fr/voircartoon/VoirCartoonFilters.kt | 199 +++ .../extractors/ComedyShowExtractor.kt | 46 + src/fr/vostfree/build.gradle | 13 + .../vostfree/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 18470 bytes .../vostfree/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 18470 bytes .../vostfree/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 18470 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 18470 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 18470 bytes .../animeextension/fr/vostfree/Vostfree.kt | 278 +++++ src/fr/wiflix/build.gradle | 21 + src/fr/wiflix/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4551 bytes src/fr/wiflix/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2536 bytes .../wiflix/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6052 bytes .../wiflix/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11027 bytes .../wiflix/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15808 bytes src/fr/wiflix/res/web_hi_res_512.png | Bin 0 -> 72734 bytes .../animeextension/fr/wiflix/Wiflix.kt | 103 ++ src/hi/animesaga/build.gradle | 13 + .../animesaga/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3579 bytes .../animesaga/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2015 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4732 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8315 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11228 bytes .../animeextension/hi/animesaga/AnimeSAGA.kt | 62 + src/hi/yomovies/build.gradle | 15 + .../yomovies/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3141 bytes .../yomovies/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1646 bytes .../yomovies/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4261 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8022 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11624 bytes src/hi/yomovies/res/web_hi_res_512.png | Bin 0 -> 63702 bytes .../animeextension/hi/yomovies/YoMovies.kt | 421 +++++++ .../yomovies/extractors/MinoplresExtractor.kt | 27 + .../yomovies/extractors/MovembedExtractor.kt | 55 + .../extractors/SpeedostreamExtractor.kt | 36 + src/id/animeindo/build.gradle | 17 + .../animeindo/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3461 bytes .../animeindo/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1865 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4986 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9371 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13235 bytes .../animeextension/id/animeindo/AnimeIndo.kt | 131 ++ .../id/animeindo/AnimeIndoFilters.kt | 62 + src/id/kuramanime/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 11839 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5857 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 19435 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 39007 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 63772 bytes src/id/kuramanime/res/web_hi_res_512.png | Bin 0 -> 1133149 bytes .../id/kuramanime/Kuramanime.kt | 296 +++++ src/id/kuronime/build.gradle | 14 + .../kuronime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5502 bytes .../kuronime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3003 bytes .../kuronime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8162 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13633 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 21047 bytes src/id/kuronime/res/web_hi_res_512.png | Bin 0 -> 217529 bytes .../animeextension/id/kuronime/Kuronime.kt | 221 ++++ .../kuronime/extractors/AnimekuExtractor.kt | 42 + .../id/kuronime/extractors/HxFileExtractor.kt | 20 + .../kuronime/extractors/LinkBoxExtractor.kt | 36 + src/id/minioppai/build.gradle | 15 + .../minioppai/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6367 bytes .../minioppai/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3614 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9735 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 16889 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 25796 bytes src/id/minioppai/res/web_hi_res_512.png | Bin 0 -> 306386 bytes .../animeextension/id/minioppai/MiniOppai.kt | 125 ++ .../id/minioppai/MiniOppaiFilters.kt | 202 +++ .../extractors/MiniOppaiExtractor.kt | 51 + src/id/neonime/build.gradle | 15 + .../neonime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4929 bytes .../neonime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2891 bytes .../neonime/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7428 bytes .../neonime/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12870 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19459 bytes src/id/neonime/res/web_hi_res_128.png | Bin 0 -> 7966 bytes .../animeextension/id/neonime/NeoNime.kt | 336 +++++ .../id/neonime/extractors/LinkBoxExtractor.kt | 36 + src/id/nimegami/AndroidManifest.xml | 22 + src/id/nimegami/build.gradle | 12 + .../nimegami/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3623 bytes .../nimegami/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2005 bytes .../nimegami/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4632 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8049 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10248 bytes .../animeextension/id/nimegami/NimeGami.kt | 263 ++++ .../id/nimegami/NimeGamiUrlActivity.kt | 41 + src/id/oploverz/build.gradle | 7 + .../oploverz/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 10281 bytes .../oploverz/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 4861 bytes .../oploverz/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 15769 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 32036 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 50212 bytes src/id/oploverz/res/web_hi_res_512.png | Bin 0 -> 378745 bytes .../animeextension/id/oploverz/Oploverz.kt | 234 ++++ .../id/oploverz/OploverzFilters.kt | 329 +++++ src/id/otakudesu/build.gradle | 12 + .../otakudesu/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 8146 bytes .../otakudesu/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 8146 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 8146 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8146 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8146 bytes src/id/otakudesu/res/web_hi_res_512.png | Bin 0 -> 8146 bytes .../animeextension/id/otakudesu/OtakuDesu.kt | 380 ++++++ src/id/samehadaku/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 7884 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3863 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 12530 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 24380 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 39723 bytes src/id/samehadaku/res/web_hi_res_512.png | Bin 0 -> 254937 bytes .../id/samehadaku/Samehadaku.kt | 250 ++++ .../id/samehadaku/SamehadakuFilters.kt | 185 +++ src/it/animesaturn/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 16300 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 13375 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 17284 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 22574 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 28148 bytes .../it/animesaturn/AnimeSaturn.kt | 456 +++++++ src/it/animeunity/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3410 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1884 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4488 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8163 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11226 bytes src/it/animeunity/res/web_hi_res_512.png | Bin 0 -> 59366 bytes .../it/animeunity/AnimeUnity.kt | 517 ++++++++ .../it/animeunity/AnimeUnityDto.kt | 77 ++ .../it/animeunity/AnimeUnityFilters.kt | 204 +++ src/it/animeworld/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4233 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2646 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6297 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 10208 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15522 bytes src/it/animeworld/res/play_store_512.png | Bin 0 -> 53722 bytes .../it/animeworld/ANIMEWORLD.kt | 542 ++++++++ .../extractors/StreamHideExtractor.kt | 52 + src/it/aniplay/AndroidManifest.xml | 22 + src/it/aniplay/build.gradle | 11 + .../aniplay/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2577 bytes .../aniplay/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1489 bytes .../aniplay/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3397 bytes .../aniplay/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5949 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8515 bytes .../animeextension/it/aniplay/AniPlay.kt | 238 ++++ .../it/aniplay/AniPlayFilters.kt | 281 +++++ .../it/aniplay/AniPlayUrlActivity.kt | 41 + .../it/aniplay/dto/AniPlayDto.kt | 68 + src/it/hentaisaturn/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 24085 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 18826 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 25790 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 34222 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 43364 bytes .../it/hentaisaturn/HentaiSaturn.kt | 435 +++++++ src/it/streamingcommunity/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4870 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2661 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6579 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12044 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17511 bytes .../streamingcommunity/res/web_hi_res_512.png | Bin 0 -> 88502 bytes .../streamingcommunity/StreamingCommunity.kt | 432 +++++++ .../StreamingCommunityDto.kt | 92 ++ src/it/toonitalia/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1964 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1174 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2573 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 4436 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6213 bytes src/it/toonitalia/res/web_hi_res_512.png | Bin 0 -> 19968 bytes .../it/toonitalia/Toonitalia.kt | 299 +++++ .../extractors/MaxStreamExtractor.kt | 67 + .../toonitalia/extractors/StreamZExtractor.kt | 30 + src/it/vvvvid/build.gradle | 7 + src/it/vvvvid/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3296 bytes src/it/vvvvid/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1812 bytes .../vvvvid/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4949 bytes .../vvvvid/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9471 bytes .../vvvvid/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14538 bytes src/it/vvvvid/res/web_hi_res_512.png | Bin 0 -> 74060 bytes .../animeextension/it/vvvvid/VVVVID.kt | 679 ++++++++++ .../animeextension/it/vvvvid/VVVVIDDto.kt | 101 ++ src/ko/aniweek/build.gradle | 11 + .../aniweek/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2860 bytes .../aniweek/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1609 bytes .../aniweek/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3767 bytes .../aniweek/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6742 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9622 bytes src/ko/aniweek/res/web_hi_res_512.png | Bin 0 -> 45411 bytes .../animeextension/ko/aniweek/Aniweek.kt | 385 ++++++ src/pl/desuonline/build.gradle | 15 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2888 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1552 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4665 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9133 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15015 bytes src/pl/desuonline/res/web_hi_res_512.png | Bin 0 -> 129310 bytes .../pl/desuonline/DesuOnline.kt | 86 ++ .../pl/desuonline/extractors/CDAExtractor.kt | 105 ++ src/pl/ogladajanime/build.gradle | 17 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2995 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1677 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4049 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7226 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10797 bytes .../pl/ogladajanime/OgladajAnime.kt | 312 +++++ src/pl/wbijam/build.gradle | 14 + src/pl/wbijam/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3511 bytes src/pl/wbijam/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1978 bytes .../wbijam/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4732 bytes .../wbijam/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8314 bytes .../wbijam/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11671 bytes src/pl/wbijam/res/web_hi_res_512.png | Bin 0 -> 59434 bytes .../animeextension/pl/wbijam/Wbijam.kt | 370 ++++++ .../pl/wbijam/extractors/CdaPlExtractor.kt | 129 ++ .../pl/wbijam/extractors/VkExtractor.kt | 39 + src/pt/anidong/AndroidManifest.xml | 23 + src/pt/anidong/build.gradle | 7 + .../anidong/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2913 bytes .../anidong/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1556 bytes .../anidong/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3725 bytes .../anidong/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6620 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8456 bytes .../animeextension/pt/anidong/AniDong.kt | 260 ++++ .../pt/anidong/AniDongFilters.kt | 124 ++ .../pt/anidong/AniDongUrlActivity.kt | 41 + .../pt/anidong/dto/AniDongDto.kt | 53 + src/pt/animefire/AndroidManifest.xml | 23 + src/pt/animefire/build.gradle | 7 + .../animefire/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6286 bytes .../animefire/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3686 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9612 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 17907 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 26924 bytes .../animeextension/pt/animefire/AFFilters.kt | 92 ++ .../pt/animefire/AFUrlActivity.kt | 42 + .../animeextension/pt/animefire/AnimeFire.kt | 208 ++++ .../pt/animefire/dto/AnimeFireDto.kt | 18 + .../extractors/AnimeFireExtractor.kt | 23 + .../animefire/extractors/IframeExtractor.kt | 21 + src/pt/animeplayer/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6270 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3128 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 10103 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 20495 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 33585 bytes .../pt/animeplayer/AnimePlayer.kt | 112 ++ src/pt/animescx/AndroidManifest.xml | 22 + src/pt/animescx/build.gradle | 12 + .../animescx/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3776 bytes .../animescx/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2233 bytes .../animescx/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4948 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8652 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12684 bytes .../animeextension/pt/animescx/AnimesCX.kt | 270 ++++ .../pt/animescx/AnimesCXUrlActivity.kt | 41 + src/pt/animesdigital/AndroidManifest.xml | 23 + src/pt/animesdigital/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 10270 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5150 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 16142 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 32088 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 51244 bytes .../pt/animesdigital/AnimesDigital.kt | 298 +++++ .../pt/animesdigital/AnimesDigitalFilters.kt | 235 ++++ .../animesdigital/AnimesDigitalUrlActivity.kt | 41 + .../extractors/ProtectorExtractor.kt | 22 + .../extractors/ScriptExtractor.kt | 37 + src/pt/animesfoxbr/build.gradle | 9 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5328 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2806 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7875 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 15073 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 22836 bytes .../pt/animesfoxbr/AnimesFoxBR.kt | 209 ++++ src/pt/animesgames/AndroidManifest.xml | 22 + src/pt/animesgames/build.gradle | 11 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4053 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2170 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6281 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12110 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 18717 bytes .../pt/animesgames/AnimesGames.kt | 279 +++++ .../pt/animesgames/AnimesGamesFilters.kt | 153 +++ .../pt/animesgames/AnimesGamesUrlActivity.kt | 41 + src/pt/animesgratis/build.gradle | 17 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3845 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2142 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5156 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9238 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12179 bytes .../pt/animesgratis/AnimesOnline.kt | 146 +++ .../extractors/AnimesOnlinePlayerExtractor.kt | 24 + .../extractors/RuplayExtractor.kt | 23 + src/pt/animesroll/AndroidManifest.xml | 29 + src/pt/animesroll/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5123 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3068 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7483 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12883 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19539 bytes .../pt/animesroll/AnimesROLL.kt | 192 +++ .../pt/animesroll/AnimesROLLUrlActivity.kt | 41 + .../pt/animesroll/dto/AnimesROLLDto.kt | 73 ++ src/pt/animestc/AndroidManifest.xml | 23 + src/pt/animestc/build.gradle | 11 + .../animestc/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4538 bytes .../animestc/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2938 bytes .../animestc/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6086 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9160 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12389 bytes .../animeextension/pt/animestc/ATCFilters.kt | 174 +++ .../animeextension/pt/animestc/AnimesTC.kt | 290 +++++ .../pt/animestc/AnimesTCUrlActivity.kt | 41 + .../pt/animestc/dto/AnimesTCDto.kt | 78 ++ .../pt/animestc/extractors/LinkBypasser.kt | 42 + .../pt/animestc/extractors/SendcmExtractor.kt | 20 + src/pt/animeszone/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4334 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2303 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6205 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11608 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17786 bytes src/pt/animeszone/res/web_hi_res_512.png | Bin 0 -> 102014 bytes .../pt/animeszone/AnimesZone.kt | 416 +++++++ .../pt/animeszone/AnimesZoneFilters.kt | 279 +++++ .../extractors/BloggerJWPlayerExtractor.kt | 27 + .../extractors/PlaylistExtractor.kt | 18 + src/pt/anitube/build.gradle | 7 + .../anitube/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2747 bytes .../anitube/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1534 bytes .../anitube/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3815 bytes .../anitube/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6192 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8786 bytes src/pt/anitube/res/web_hi_res_512.png | Bin 0 -> 32224 bytes .../animeextension/pt/anitube/Anitube.kt | 236 ++++ .../pt/anitube/AnitubeFilters.kt | 135 ++ .../pt/anitube/extractors/AnitubeExtractor.kt | 30 + src/pt/betteranime/AndroidManifest.xml | 23 + src/pt/betteranime/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5344 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3482 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7773 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 14676 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 15441 bytes .../pt/betteranime/BAFilters.kt | 128 ++ .../pt/betteranime/BAUrlActivity.kt | 44 + .../animeextension/pt/betteranime/BAUtils.kt | 12 + .../pt/betteranime/BetterAnime.kt | 293 +++++ .../pt/betteranime/LoginInterceptor.kt | 50 + .../pt/betteranime/RecaptchaV3Bypasser.kt | 178 +++ .../pt/betteranime/dto/BetterAnimeDto.kt | 24 + .../extractors/BetterAnimeExtractor.kt | 66 + src/pt/donghuanosekai/AndroidManifest.xml | 22 + src/pt/donghuanosekai/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 10743 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 5181 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 18024 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 37120 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 62722 bytes .../pt/donghuanosekai/DonghuaNoSekai.kt | 288 +++++ .../donghuanosekai/DonghuaNoSekaiFilters.kt | 163 +++ .../DonghuaNoSekaiUrlActivity.kt | 41 + .../extractors/DonghuaNoSekaiExtractor.kt | 71 ++ src/pt/doramogo/AndroidManifest.xml | 22 + src/pt/doramogo/build.gradle | 15 + .../doramogo/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3965 bytes .../doramogo/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2121 bytes .../doramogo/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5938 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11434 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17735 bytes .../animeextension/pt/doramogo/Doramogo.kt | 206 ++++ .../pt/doramogo/DoramogoFilters.kt | 94 ++ .../pt/doramogo/DoramogoUrlActivity.kt | 41 + .../doramogo/extractors/DoramogoExtractor.kt | 31 + src/pt/flixei/AndroidManifest.xml | 23 + src/pt/flixei/build.gradle | 12 + src/pt/flixei/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2691 bytes src/pt/flixei/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1540 bytes .../flixei/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3639 bytes .../flixei/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6509 bytes .../flixei/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9136 bytes .../animeextension/pt/flixei/Flixei.kt | 342 +++++ .../pt/flixei/FlixeiUrlActivity.kt | 42 + .../animeextension/pt/flixei/dto/FlixeiDto.kt | 33 + src/pt/goanimes/build.gradle | 16 + .../goanimes/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3120 bytes .../goanimes/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1715 bytes .../goanimes/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4152 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7328 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10002 bytes .../animeextension/pt/goanimes/GoAnimes.kt | 185 +++ .../extractors/BloggerJWPlayerExtractor.kt | 18 + .../goanimes/extractors/GoAnimesExtractor.kt | 81 ++ .../pt/goanimes/extractors/JsDecoder.kt | 48 + .../pt/goanimes/extractors/LinkfunBypasser.kt | 54 + .../goanimes/extractors/PlaylistExtractor.kt | 30 + src/pt/hentaistube/AndroidManifest.xml | 22 + src/pt/hentaistube/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5128 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2697 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7147 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13402 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19010 bytes .../pt/hentaistube/HentaisTube.kt | 234 ++++ .../pt/hentaistube/HentaisTubeFilters.kt | 349 ++++++ .../pt/hentaistube/HentaisTubeUrlActivity.kt | 41 + .../pt/hentaistube/dto/HentaisTubeDto.kt | 19 + src/pt/hinatasoul/AndroidManifest.xml | 23 + src/pt/hinatasoul/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4287 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2845 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5812 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8844 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12136 bytes .../pt/hinatasoul/HSUrlActivity.kt | 42 + .../pt/hinatasoul/HinataSoul.kt | 245 ++++ .../extractors/HinataSoulExtractor.kt | 31 + src/pt/listadeanimes/build.gradle | 7 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6821 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3644 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9450 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 17931 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 24761 bytes .../pt/listadeanimes/ListaDeAnimes.kt | 112 ++ src/pt/megaflix/AndroidManifest.xml | 23 + src/pt/megaflix/build.gradle | 16 + .../megaflix/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2775 bytes .../megaflix/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1545 bytes .../megaflix/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3752 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6779 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9754 bytes .../animeextension/pt/megaflix/Megaflix.kt | 285 +++++ .../pt/megaflix/MegaflixFilters.kt | 59 + .../pt/megaflix/MegaflixUrlActivity.kt | 41 + .../megaflix/extractors/MegaflixExtractor.kt | 28 + src/pt/muitohentai/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3945 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2341 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6177 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11496 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 18687 bytes .../pt/muitohentai/MuitoHentai.kt | 124 ++ src/pt/pifansubs/build.gradle | 14 + .../pifansubs/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3161 bytes .../pifansubs/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1689 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4220 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7752 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10986 bytes src/pt/pifansubs/res/web_hi_res_512.png | Bin 0 -> 40894 bytes .../animeextension/pt/pifansubs/PiFansubs.kt | 64 + .../pifansubs/extractors/BlembedExtractor.kt | 40 + src/pt/rinecloud/build.gradle | 14 + .../rinecloud/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4567 bytes .../rinecloud/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2476 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6415 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12557 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 18543 bytes .../animeextension/pt/rinecloud/RineCloud.kt | 25 + .../extractors/RineCloudExtractor.kt | 49 + src/pt/vizer/AndroidManifest.xml | 23 + src/pt/vizer/build.gradle | 13 + src/pt/vizer/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4615 bytes src/pt/vizer/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2844 bytes src/pt/vizer/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6542 bytes .../vizer/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11032 bytes .../vizer/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16184 bytes .../animeextension/pt/vizer/Vizer.kt | 356 ++++++ .../animeextension/pt/vizer/VizerFilters.kt | 111 ++ .../pt/vizer/VizerUrlActivity.kt | 42 + .../animeextension/pt/vizer/dto/VizerDto.kt | 92 ++ .../pt/vizer/extractors/WarezExtractor.kt | 52 + src/ru/animelib/build.gradle | 12 + .../animelib/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3247 bytes .../animelib/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2218 bytes .../animelib/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4515 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6837 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9986 bytes .../animeextension/ru/animelib/Animelib.kt | 495 ++++++++ .../animeextension/ru/animelib/AnimelibDto.kt | 179 +++ .../ru/animelib/AnimelibFilters.kt | 192 +++ src/ru/animevost/build.gradle | 7 + .../animevost/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 44513 bytes .../animevost/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 20965 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 76449 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 161111 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 265982 bytes .../animeextension/ru/animevost/Animevost.kt | 11 + .../ru/animevost/AnimevostSource.kt | 366 ++++++ src/sr/animebalkan/build.gradle | 14 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5039 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3021 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6415 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12203 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 16499 bytes .../sr/animebalkan/AnimeBalkan.kt | 65 + .../animebalkan/extractors/MailRuExtractor.kt | 63 + src/sr/animesrbija/AndroidManifest.xml | 23 + src/sr/animesrbija/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 5460 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3811 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 7516 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12236 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17971 bytes .../sr/animesrbija/AnimeSrbija.kt | 170 +++ .../sr/animesrbija/AnimeSrbijaFilters.kt | 373 ++++++ .../sr/animesrbija/AnimeSrbijaUrlActivity.kt | 41 + .../sr/animesrbija/dto/AnimeSrbijaDto.kt | 86 ++ src/tr/animeler/AndroidManifest.xml | 22 + src/tr/animeler/build.gradle | 20 + .../animeler/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3730 bytes .../animeler/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1948 bytes .../animeler/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5901 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 12033 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19115 bytes .../animeextension/tr/animeler/Animeler.kt | 374 ++++++ .../tr/animeler/AnimelerFilters.kt | 683 ++++++++++ .../tr/animeler/AnimelerUrlActivity.kt | 41 + .../tr/animeler/dto/AnimelerDto.kt | 105 ++ src/tr/anizm/AndroidManifest.xml | 22 + src/tr/anizm/build.gradle | 22 + src/tr/anizm/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4491 bytes src/tr/anizm/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2366 bytes src/tr/anizm/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6785 bytes .../anizm/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 13101 bytes .../anizm/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 20164 bytes .../animeextension/tr/anizm/Anizm.kt | 454 +++++++ .../animeextension/tr/anizm/AnizmFilters.kt | 551 +++++++++ .../tr/anizm/AnizmUrlActivity.kt | 41 + .../animeextension/tr/anizm/SearchItemDto.kt | 18 + .../tr/anizm/extractors/AincradExtractor.kt | 50 + src/tr/asyaanimeleri/build.gradle | 18 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3441 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1844 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4941 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9429 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14031 bytes .../tr/asyaanimeleri/AsyaAnimeleri.kt | 145 +++ .../tr/asyaanimeleri/AsyaAnimeleriFilters.kt | 54 + .../ShittyProtectionInterceptor.kt | 73 ++ src/tr/hdfilmcehennemi/AndroidManifest.xml | 22 + src/tr/hdfilmcehennemi/build.gradle | 13 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4356 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2415 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 6209 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11845 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 17629 bytes .../tr/hdfilmcehennemi/HDFilmCehennemi.kt | 305 +++++ .../hdfilmcehennemi/HDFilmCehennemiFilters.kt | 155 +++ .../HDFilmCehennemiUrlActivity.kt | 41 + .../extractors/CloseloadExtractor.kt | 62 + .../extractors/VidmolyExtractor.kt | 23 + .../extractors/XBetExtractor.kt | 58 + src/tr/hentaizm/AndroidManifest.xml | 22 + src/tr/hentaizm/build.gradle | 8 + .../hentaizm/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3127 bytes .../hentaizm/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1684 bytes .../hentaizm/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4506 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8469 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12791 bytes .../animeextension/tr/hentaizm/HentaiZM.kt | 227 ++++ .../tr/hentaizm/HentaiZMUrlActivity.kt | 41 + .../tr/hentaizm/extractors/VideaExtractor.kt | 74 ++ src/tr/tranimeci/build.gradle | 9 + .../tranimeci/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2980 bytes .../tranimeci/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1596 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4269 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7994 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11258 bytes .../tranimeci/ShittyProtectionInterceptor.kt | 73 ++ .../animeextension/tr/tranimeci/TRAnimeCI.kt | 147 +++ .../tr/tranimeci/TRAnimeCIFilters.kt | 51 + src/tr/tranimeizle/AndroidManifest.xml | 22 + src/tr/tranimeizle/build.gradle | 20 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3613 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1932 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4751 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8703 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11369 bytes .../tranimeizle/ShittyCaptchaInterceptor.kt | 70 ++ .../tr/tranimeizle/TRAnimeIzle.kt | 442 +++++++ .../tr/tranimeizle/TRAnimeIzleUrlActivity.kt | 41 + src/tr/turkanime/build.gradle | 24 + .../turkanime/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3147 bytes .../turkanime/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1763 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4789 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8937 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14188 bytes src/tr/turkanime/res/web_hi_res_512.png | Bin 0 -> 92543 bytes .../animeextension/tr/turkanime/TurkAnime.kt | 572 +++++++++ .../turkanime/extractors/AlucardExtractor.kt | 65 + .../extractors/EmbedgramExtractor.kt | 28 + .../turkanime/extractors/MVidooExtractor.kt | 32 + .../turkanime/extractors/MailRuExtractor.kt | 67 + .../extractors/StreamVidExtractor.kt | 46 + .../tr/turkanime/extractors/VTubeExtractor.kt | 50 + .../extractors/WolfstreamExtractor.kt | 19 + src/uk/uakino/build.gradle | 7 + src/uk/uakino/ic_launcher-playstore.png | Bin 0 -> 165320 bytes src/uk/uakino/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3561 bytes src/uk/uakino/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1957 bytes .../uakino/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5818 bytes .../uakino/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11374 bytes .../uakino/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 19064 bytes .../animeextension/uk/uakino/AshdiModel.kt | 24 + .../animeextension/uk/uakino/UAKino.kt | 219 ++++ src/uk/ufdub/build.gradle | 7 + src/uk/ufdub/ic_launcher-playstore.png | Bin 0 -> 80992 bytes src/uk/ufdub/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2885 bytes src/uk/ufdub/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1688 bytes src/uk/ufdub/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4450 bytes .../ufdub/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8352 bytes .../ufdub/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 13450 bytes .../animeextension/uk/ufdub/UFDub.kt | 156 +++ template/README-REMOVED-TEMPLATE.md | 11 + template/README-TEMPLATE.md | 12 + 2263 files changed, 108711 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/01_report_issue.yml create mode 100644 .github/ISSUE_TEMPLATE/02_request_source.yml create mode 100644 .github/ISSUE_TEMPLATE/03_report_url_change.yml create mode 100644 .github/ISSUE_TEMPLATE/04_report_dead_source.yml create mode 100644 .github/ISSUE_TEMPLATE/05_request_feature.yml create mode 100644 .github/ISSUE_TEMPLATE/06_request_meta.yml create mode 100644 .github/ISSUE_TEMPLATE/07_request_removal.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/pull_request_template.md create mode 100644 .github/readme-images/app-icon.png create mode 100644 .github/scripts/bump-versions.py create mode 100644 .github/scripts/commit-repo.sh create mode 100644 .github/scripts/create-repo.py create mode 100644 .github/scripts/move-apks.py create mode 100644 .github/scripts/sign-apks.sh create mode 100644 .github/workflows/batch_close_issues.yml create mode 100644 .github/workflows/build_pull_request.yml create mode 100644 .github/workflows/build_push.yml create mode 100644 .github/workflows/issue_moderator.yml create mode 100644 .github/workflows/lock.yml create mode 100644 .gitignore create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 build.gradle.kts create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/settings.gradle.kts create mode 100644 buildSrc/src/main/kotlin/AndroidConfig.kt create mode 100644 buildSrc/src/main/kotlin/Extensions.kt create mode 100644 buildSrc/src/main/kotlin/lib-android.gradle.kts create mode 100644 buildSrc/src/main/kotlin/lib-kotlin.gradle.kts create mode 100644 buildSrc/src/main/kotlin/lib-multisrc.gradle.kts create mode 100644 common.gradle create mode 100644 core/AndroidManifest.xml create mode 100644 core/build.gradle.kts create mode 100644 core/res/mipmap-hdpi/ic_launcher.png create mode 100644 core/res/mipmap-mdpi/ic_launcher.png create mode 100644 core/res/mipmap-xhdpi/ic_launcher.png create mode 100644 core/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 core/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 gradle.properties create mode 100644 gradle/libs.versions.toml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 ktlintCodeStyle.xml create mode 100644 lib-multisrc/animestream/AndroidManifest.xml create mode 100644 lib-multisrc/animestream/build.gradle.kts create mode 100644 lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStream.kt create mode 100644 lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStreamFilters.kt create mode 100644 lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStreamUrlActivity.kt create mode 100644 lib-multisrc/datalifeengine/build.gradle.kts create mode 100644 lib-multisrc/datalifeengine/src/eu/kanade/tachiyomi/multisrc/datalifeengine/DataLifeEngine.kt create mode 100644 lib-multisrc/dooplay/AndroidManifest.xml create mode 100644 lib-multisrc/dooplay/build.gradle.kts create mode 100644 lib-multisrc/dooplay/src/eu/kanade/tachiyomi/multisrc/dooplay/DooPlay.kt create mode 100644 lib-multisrc/dooplay/src/eu/kanade/tachiyomi/multisrc/dooplay/DooPlayUrlActivity.kt create mode 100644 lib-multisrc/dopeflix/build.gradle.kts create mode 100644 lib-multisrc/dopeflix/src/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlix.kt create mode 100644 lib-multisrc/dopeflix/src/eu/kanade/tachiyomi/multisrc/dopeflix/DopeFlixFilters.kt create mode 100644 lib-multisrc/dopeflix/src/eu/kanade/tachiyomi/multisrc/dopeflix/dto/DopeFlixDto.kt create mode 100644 lib-multisrc/dopeflix/src/eu/kanade/tachiyomi/multisrc/dopeflix/extractors/DopeFlixExtractor.kt create mode 100644 lib-multisrc/zorotheme/build.gradle.kts create mode 100644 lib-multisrc/zorotheme/src/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroTheme.kt create mode 100644 lib-multisrc/zorotheme/src/eu/kanade/tachiyomi/multisrc/zorotheme/ZoroThemeFilters.kt create mode 100644 lib-multisrc/zorotheme/src/eu/kanade/tachiyomi/multisrc/zorotheme/dto/ZoroThemeDto.kt create mode 100644 lib/blogger-extractor/build.gradle.kts create mode 100644 lib/blogger-extractor/src/main/java/eu/kanade/tachiyomi/lib/bloggerextractor/BloggerExtractor.kt create mode 100644 lib/burstcloud-extractor/build.gradle.kts create mode 100644 lib/burstcloud-extractor/src/main/java/eu/kanade/tachiyomi/lib/burstcloudextractor/BurstCloudExtractor.kt create mode 100644 lib/burstcloud-extractor/src/main/java/eu/kanade/tachiyomi/lib/burstcloudextractor/BurstCloudExtractorDto.kt create mode 100644 lib/cda-extractor/build.gradle.kts create mode 100644 lib/cda-extractor/src/main/java/eu/kanade/tachiyomi/lib/cdaextractor/CdaExtractor.kt create mode 100644 lib/chillx-extractor/build.gradle.kts create mode 100644 lib/chillx-extractor/src/main/java/eu/kanade/tachiyomi/lib/chillxextractor/ChillxExtractor.kt create mode 100644 lib/cloudflare-interceptor/build.gradle.kts create mode 100644 lib/cloudflare-interceptor/src/main/java/eu/kanade/tachiyomi/lib/cloudflareinterceptor/CloudflareInterceptor.kt create mode 100644 lib/cryptoaes/build.gradle.kts create mode 100644 lib/cryptoaes/src/main/java/eu/kanade/tachiyomi/lib/cryptoaes/CryptoAES.kt create mode 100644 lib/cryptoaes/src/main/java/eu/kanade/tachiyomi/lib/cryptoaes/Deobfuscator.kt create mode 100644 lib/dailymotion-extractor/build.gradle.kts create mode 100644 lib/dailymotion-extractor/src/main/java/eu/kanade/tachiyomi/lib/dailymotionextractor/DailymotionDto.kt create mode 100644 lib/dailymotion-extractor/src/main/java/eu/kanade/tachiyomi/lib/dailymotionextractor/DailymotionExtractor.kt create mode 100644 lib/dataimage/build.gradle.kts create mode 100644 lib/dataimage/src/main/java/eu/kanade/tachiyomi/lib/dataimage/DataImageInterceptor.kt create mode 100644 lib/dood-extractor/build.gradle.kts create mode 100644 lib/dood-extractor/src/main/java/eu/kanade/tachiyomi/lib/doodextractor/DoodExtractor.kt create mode 100644 lib/fastream-extractor/build.gradle.kts create mode 100644 lib/fastream-extractor/src/main/java/eu/kanade/tachiyomi/lib/fastreamextractor/FastreamExtractor.kt create mode 100644 lib/filemoon-extractor/build.gradle.kts create mode 100644 lib/filemoon-extractor/src/main/java/eu/kanade/tachiyomi/lib/filemoonextractor/FilemoonExtractor.kt create mode 100644 lib/fusevideo-extractor/build.gradle.kts create mode 100644 lib/fusevideo-extractor/src/main/java/eu/kanade/tachiyomi/lib/fusevideoextractor/FusevideoExtractor.kt create mode 100644 lib/gdriveplayer-extractor/build.gradle.kts create mode 100644 lib/gdriveplayer-extractor/src/main/java/eu/kanade/tachiyomi/lib/gdriveplayerextractor/GdrivePlayerExtractor.kt create mode 100644 lib/gogostream-extractor/build.gradle.kts create mode 100644 lib/gogostream-extractor/src/main/java/eu/kanade/tachiyomi/lib/gogostreamextractor/GogoStreamExtractor.kt create mode 100644 lib/gogostream-extractor/src/main/java/eu/kanade/tachiyomi/lib/gogostreamextractor/GogoStreamExtractorDto.kt create mode 100644 lib/googledrive-episodes/build.gradle.kts create mode 100644 lib/googledrive-episodes/src/main/java/eu/kanade/tachiyomi/lib/googledriveepisodes/GoogleDriveEpisodes.kt create mode 100644 lib/googledrive-extractor/build.gradle.kts create mode 100644 lib/googledrive-extractor/src/main/java/eu/kanade/tachiyomi/lib/googledriveextractor/GoogleDriveExtractor.kt create mode 100644 lib/javcoverfetcher/build.gradle.kts create mode 100644 lib/javcoverfetcher/src/main/java/eu/kanade/tachiyomi/lib/javcoverfetcher/JavCoverFetcher.kt create mode 100644 lib/megacloud-extractor/build.gradle.kts create mode 100644 lib/megacloud-extractor/src/main/java/eu/kanade/tachiyomi/lib/megacloudextractor/MegaCloudExtractor.kt create mode 100644 lib/mixdrop-extractor/build.gradle.kts create mode 100644 lib/mixdrop-extractor/src/main/java/eu/kanade/tachiyomi/lib/mixdropextractor/MixDropExtractor.kt create mode 100644 lib/mp4upload-extractor/build.gradle.kts create mode 100644 lib/mp4upload-extractor/src/main/java/eu/kanade/tachiyomi/lib/mp4uploadextractor/Mp4uploadExtractor.kt create mode 100644 lib/okru-extractor/build.gradle.kts create mode 100644 lib/okru-extractor/src/main/java/eu/kanade/tachiyomi/lib/okruextractor/OkruExtractor.kt create mode 100644 lib/playlist-utils/build.gradle.kts create mode 100644 lib/playlist-utils/src/main/java/eu/kanade/tachiyomi/lib/playlistutils/PlaylistUtils.kt create mode 100644 lib/sendvid-extractor/build.gradle.kts create mode 100644 lib/sendvid-extractor/src/main/java/eu/kanade/tachiyomi/lib/sendvidextractor/SendvidExtractor.kt create mode 100644 lib/sibnet-extractor/build.gradle.kts create mode 100644 lib/sibnet-extractor/src/main/java/eu/kanade/tachiyomi/lib/sibnetextractor/SibnetExtractor.kt create mode 100644 lib/streamdav-extractor/build.gradle.kts create mode 100644 lib/streamdav-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamdavextractor/StreamDavExtractor.kt create mode 100644 lib/streamhidevid-extractor/build.gradle.kts create mode 100644 lib/streamhidevid-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamhidevidextractor/StreamHideVidExtractor.kt create mode 100644 lib/streamhub-extractor/build.gradle.kts create mode 100644 lib/streamhub-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamhubextractor/StreamHubExtractor.kt create mode 100644 lib/streamlare-extractor/build.gradle.kts create mode 100644 lib/streamlare-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamlareextractor/StreamlareExtractor.kt create mode 100644 lib/streamtape-extractor/build.gradle.kts create mode 100644 lib/streamtape-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamtapeextractor/StreamTapeExtractor.kt create mode 100644 lib/streamvid-extractor/build.gradle.kts create mode 100644 lib/streamvid-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamvidextractor/StreamVidExtractor.kt create mode 100644 lib/streamwish-extractor/build.gradle.kts create mode 100644 lib/streamwish-extractor/src/main/java/eu/kanade/tachiyomi/lib/streamwishextractor/StreamWishExtractor.kt create mode 100644 lib/synchrony/build.gradle.kts create mode 100644 lib/synchrony/src/main/assets/synchrony-v2.4.5.1.js create mode 100644 lib/synchrony/src/main/java/eu/kanade/tachiyomi/lib/synchrony/Deobfuscator.kt create mode 100644 lib/unpacker/build.gradle.kts create mode 100644 lib/unpacker/src/main/java/eu/kanade/tachiyomi/lib/unpacker/SubstringExtractor.kt create mode 100644 lib/unpacker/src/main/java/eu/kanade/tachiyomi/lib/unpacker/Unpacker.kt create mode 100644 lib/upstream-extractor/build.gradle.kts create mode 100644 lib/upstream-extractor/src/main/java/eu/kanade/tachiyomi/lib/upstreamextractor/UpstreamExtractor.kt create mode 100644 lib/uqload-extractor/build.gradle.kts create mode 100644 lib/uqload-extractor/src/main/java/eu/kanade/tachiyomi/lib/uqloadextractor/UqloadExtractor.kt create mode 100644 lib/vidbom-extractor/build.gradle.kts create mode 100644 lib/vidbom-extractor/src/main/java/eu/kanade/tachiyomi/lib/vidbomextractor/VidBomExtractor.kt create mode 100644 lib/vidhide-extractor/build.gradle.kts create mode 100644 lib/vidhide-extractor/src/main/java/eu/kanade/tachiyomi/lib/vidhideextractor/VidHideExtractor.kt create mode 100644 lib/vido-extractor/build.gradle.kts create mode 100644 lib/vido-extractor/src/main/java/eu/kanade/tachiyomi/lib/vidoextractor/VidoExtractor.kt create mode 100644 lib/vidsrc-extractor/build.gradle.kts create mode 100644 lib/vidsrc-extractor/src/main/java/eu/kanade/tachiyomi/lib/vidsrcextractor/VidSrcExtractor.kt create mode 100644 lib/vk-extractor/build.gradle.kts create mode 100644 lib/vk-extractor/src/main/java/eu/kanade/tachiyomi/lib/vkextractor/VkExtractor.kt create mode 100644 lib/voe-extractor/build.gradle.kts create mode 100644 lib/voe-extractor/src/main/java/eu/kanade/tachiyomi/lib/voeextractor/VoeExtractor.kt create mode 100644 lib/vudeo-extractor/build.gradle.kts create mode 100644 lib/vudeo-extractor/src/main/java/eu/kanade/tachiyomi/lib/vudeoextractor/VudeoExtractor.kt create mode 100644 lib/yourupload-extractor/build.gradle.kts create mode 100644 lib/yourupload-extractor/src/main/java/eu/kanade/tachiyomi/lib/youruploadextractor/YourUploadExtractor.kt create mode 100644 renovate.json create mode 100644 repositories.gradle.kts create mode 100644 settings.gradle.kts create mode 100644 src/all/animeonsen/build.gradle create mode 100644 src/all/animeonsen/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/animeonsen/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/animeonsen/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/animeonsen/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/animeonsen/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/animeonsen/res/web_hi_res_512.png create mode 100644 src/all/animeonsen/src/eu/kanade/tachiyomi/animeextension/all/animeonsen/AOAPIInterceptor.kt create mode 100644 src/all/animeonsen/src/eu/kanade/tachiyomi/animeextension/all/animeonsen/AnimeOnsen.kt create mode 100644 src/all/animeonsen/src/eu/kanade/tachiyomi/animeextension/all/animeonsen/dto/AnimeOnsenDto.kt create mode 100644 src/all/animeworldindia/build.gradle create mode 100644 src/all/animeworldindia/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/animeworldindia/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/animeworldindia/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/animeworldindia/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/animeworldindia/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/animeworldindia/src/eu/kanade/tachiyomi/animeextension/all/animeworldindia/AnimeWorldIndia.kt create mode 100644 src/all/animeworldindia/src/eu/kanade/tachiyomi/animeextension/all/animeworldindia/AnimeWorldIndiaFactory.kt create mode 100644 src/all/animeworldindia/src/eu/kanade/tachiyomi/animeextension/all/animeworldindia/AnimeWorldIndiaFilters.kt create mode 100644 src/all/animeworldindia/src/eu/kanade/tachiyomi/animeextension/all/animeworldindia/MyStreamExtractor.kt create mode 100644 src/all/animexin/build.gradle create mode 100644 src/all/animexin/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/animexin/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/animexin/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/animexin/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/animexin/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/animexin/src/eu/kanade/tachiyomi/animeextension/all/animexin/AnimeXin.kt create mode 100644 src/all/animexin/src/eu/kanade/tachiyomi/animeextension/all/animexin/extractors/VidstreamingExtractor.kt create mode 100644 src/all/animexin/src/eu/kanade/tachiyomi/animeextension/all/animexin/extractors/YouTubeExtractor.kt create mode 100644 src/all/chineseanime/build.gradle create mode 100644 src/all/chineseanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/chineseanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/chineseanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/chineseanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/chineseanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/chineseanime/res/web_hi_res_512.png create mode 100644 src/all/chineseanime/src/eu/kanade/tachiyomi/animeextension/all/chineseanime/ChineseAnime.kt create mode 100644 src/all/chineseanime/src/eu/kanade/tachiyomi/animeextension/all/chineseanime/extractors/VatchusExtractor.kt create mode 100644 src/all/googledrive/README.md create mode 100644 src/all/googledrive/build.gradle create mode 100644 src/all/googledrive/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/googledrive/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/googledrive/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/googledrive/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/googledrive/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/googledrive/res/web_hi_res_512.png create mode 100644 src/all/googledrive/src/eu/kanade/tachiyomi/animeextension/all/googledrive/GoogleDrive.kt create mode 100644 src/all/googledrive/src/eu/kanade/tachiyomi/animeextension/all/googledrive/GoogleDriveDto.kt create mode 100644 src/all/googledrive/src/eu/kanade/tachiyomi/animeextension/all/googledrive/GoogleDriveMultiFormReqs.kt create mode 100644 src/all/googledriveindex/build.gradle create mode 100644 src/all/googledriveindex/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/googledriveindex/res/web_hi_res_512.png create mode 100644 src/all/googledriveindex/src/eu/kanade/tachiyomi/animeextension/all/googledriveindex/GoogleDriveIndex.kt create mode 100644 src/all/googledriveindex/src/eu/kanade/tachiyomi/animeextension/all/googledriveindex/GoogleDriveIndexDto.kt create mode 100644 src/all/hikari/build.gradle create mode 100644 src/all/hikari/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/hikari/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/hikari/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/hikari/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/hikari/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Filters.kt create mode 100644 src/all/hikari/src/eu/kanade/tachiyomi/animeextension/all/hikari/Hikari.kt create mode 100644 src/all/javguru/AndroidManifest.xml create mode 100644 src/all/javguru/build.gradle create mode 100644 src/all/javguru/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/javguru/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/javguru/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/javguru/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/javguru/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/javguru/res/web_hi_res_512.png create mode 100644 src/all/javguru/src/eu/kanade/tachiyomi/animeextension/all/javguru/JavGuru.kt create mode 100644 src/all/javguru/src/eu/kanade/tachiyomi/animeextension/all/javguru/JavGuruFilters.kt create mode 100644 src/all/javguru/src/eu/kanade/tachiyomi/animeextension/all/javguru/JavGuruUrlActivity.kt create mode 100644 src/all/javguru/src/eu/kanade/tachiyomi/animeextension/all/javguru/extractors/EmTurboExtractor.kt create mode 100644 src/all/javguru/src/eu/kanade/tachiyomi/animeextension/all/javguru/extractors/MaxStreamExtractor.kt create mode 100644 src/all/jellyfin/build.gradle create mode 100644 src/all/jellyfin/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/jellyfin/res/web_hi_res_512.png create mode 100644 src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/Jellyfin.kt create mode 100644 src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinAuthenticator.kt create mode 100644 src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinConstants.kt create mode 100644 src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinDto.kt create mode 100644 src/all/jellyfin/src/eu/kanade/tachiyomi/animeextension/all/jellyfin/JellyfinFactory.kt create mode 100644 src/all/lmanime/build.gradle create mode 100644 src/all/lmanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/lmanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/lmanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/lmanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/lmanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/lmanime/src/eu/kanade/tachiyomi/animeextension/all/lmanime/LMAnime.kt create mode 100644 src/all/missav/build.gradle create mode 100644 src/all/missav/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/missav/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/missav/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/missav/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/missav/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/missav/res/web_hi_res_512.png create mode 100644 src/all/missav/src/eu/kanade/tachiyomi/animeextension/all/missav/MissAV.kt create mode 100644 src/all/missav/src/eu/kanade/tachiyomi/animeextension/all/missav/MissAVFilters.kt create mode 100644 src/all/sudatchi/AndroidManifest.xml create mode 100644 src/all/sudatchi/build.gradle create mode 100644 src/all/sudatchi/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/sudatchi/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/sudatchi/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/sudatchi/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/sudatchi/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/sudatchi/src/eu/kanade/tachiyomi/animeextension/all/sudatchi/Sudatchi.kt create mode 100644 src/all/sudatchi/src/eu/kanade/tachiyomi/animeextension/all/sudatchi/SudatchiFilters.kt create mode 100644 src/all/sudatchi/src/eu/kanade/tachiyomi/animeextension/all/sudatchi/SudatchiUrlActivity.kt create mode 100644 src/all/sudatchi/src/eu/kanade/tachiyomi/animeextension/all/sudatchi/dto/SudatchiDto.kt create mode 100644 src/all/supjav/AndroidManifest.xml create mode 100644 src/all/supjav/build.gradle create mode 100644 src/all/supjav/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/supjav/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/supjav/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/supjav/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/supjav/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/supjav/src/eu/kanade/tachiyomi/animeextension/all/supjav/SupJav.kt create mode 100644 src/all/supjav/src/eu/kanade/tachiyomi/animeextension/all/supjav/SupJavFactory.kt create mode 100644 src/all/supjav/src/eu/kanade/tachiyomi/animeextension/all/supjav/SupJavUrlActivity.kt create mode 100644 src/all/torrentioanime/AndroidManifest.xml create mode 100644 src/all/torrentioanime/build.gradle create mode 100644 src/all/torrentioanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/torrentioanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/torrentioanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/torrentioanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/torrentioanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/torrentioanime/src/eu/kanade/tachiyomi/animeextension/all/torrentioanime/Torrentio.kt create mode 100644 src/all/torrentioanime/src/eu/kanade/tachiyomi/animeextension/all/torrentioanime/TorrentioUrlActivity.kt create mode 100644 src/all/torrentioanime/src/eu/kanade/tachiyomi/animeextension/all/torrentioanime/dto/TorrentioDto.kt create mode 100644 src/ar/akwam/build.gradle create mode 100644 src/ar/akwam/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/akwam/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/akwam/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/akwam/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/akwam/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/akwam/res/play_store_512.png create mode 100644 src/ar/akwam/src/eu/kanade/tachiyomi/animeextension/ar/akwam/Akwam.kt create mode 100644 src/ar/anime4up/build.gradle create mode 100644 src/ar/anime4up/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/anime4up/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/anime4up/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/anime4up/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/anime4up/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/anime4up/res/play_store_512.png create mode 100644 src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/Anime4Up.kt create mode 100644 src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/Anime4UpFilters.kt create mode 100644 src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/extractors/SharedExtractor.kt create mode 100644 src/ar/anime4up/src/eu/kanade/tachiyomi/animeextension/ar/anime4up/extractors/VidYardExtractor.kt create mode 100644 src/ar/animeblkom/build.gradle create mode 100644 src/ar/animeblkom/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/animeblkom/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/animeblkom/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/animeblkom/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/animeblkom/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/animeblkom/res/web_hi_res_512.png create mode 100644 src/ar/animeblkom/src/eu/kanade/tachiyomi/animeextension/ar/animeblkom/AnimeBlkom.kt create mode 100644 src/ar/animeiat/build.gradle create mode 100644 src/ar/animeiat/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/animeiat/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/animeiat/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/animeiat/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/animeiat/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/animeiat/res/web_hi_res_512.png create mode 100644 src/ar/animeiat/src/eu/kanade/tachiyomi/animeextension/ar/animeiat/Animeiat.kt create mode 100644 src/ar/animeiat/src/eu/kanade/tachiyomi/animeextension/ar/animeiat/dto/AnimeiatDto.kt create mode 100644 src/ar/animelek/build.gradle create mode 100644 src/ar/animelek/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/animelek/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/animelek/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/animelek/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/animelek/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/animelek/res/play_store_512.png create mode 100644 src/ar/animelek/src/eu/kanade/tachiyomi/animeextension/ar/animelek/AnimeLek.kt create mode 100644 src/ar/animelek/src/eu/kanade/tachiyomi/animeextension/ar/animelek/extractors/SharedExtractor.kt create mode 100644 src/ar/animerco/build.gradle create mode 100644 src/ar/animerco/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/animerco/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/animerco/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/animerco/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/animerco/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/animerco/res/play_store_512.png create mode 100644 src/ar/animerco/src/eu/kanade/tachiyomi/animeextension/ar/animerco/Animerco.kt create mode 100644 src/ar/animerco/src/eu/kanade/tachiyomi/animeextension/ar/animerco/extractors/SharedExtractor.kt create mode 100644 src/ar/arabanime/build.gradle create mode 100644 src/ar/arabanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/arabanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/arabanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/arabanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/arabanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/arabanime/res/web_hi_res_512.png create mode 100644 src/ar/arabanime/src/eu/kanade/tachiyomi/animeextension/ar/arabanime/ArabAnime.kt create mode 100644 src/ar/arabanime/src/eu/kanade/tachiyomi/animeextension/ar/arabanime/dto/ArabAnimeDto.kt create mode 100644 src/ar/arabseed/build.gradle create mode 100644 src/ar/arabseed/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/arabseed/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/arabseed/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/arabseed/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/arabseed/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/arabseed/res/web_hi_res_512.png create mode 100644 src/ar/arabseed/src/eu/kanade/tachiyomi/animeextension/ar/arabseed/ArabSeed.kt create mode 100644 src/ar/asia2tv/build.gradle create mode 100644 src/ar/asia2tv/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/asia2tv/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/asia2tv/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/asia2tv/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/asia2tv/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/asia2tv/res/play_store_512.png create mode 100644 src/ar/asia2tv/src/eu/kanade/tachiyomi/animeextension/ar/asia2tv/Asia2TV.kt create mode 100644 src/ar/cimaleek/build.gradle create mode 100644 src/ar/cimaleek/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/cimaleek/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/cimaleek/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/cimaleek/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/cimaleek/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/cimaleek/src/eu/kanade/tachiyomi/animeextension/ar/cimaleek/Cimaleek.kt create mode 100644 src/ar/cimaleek/src/eu/kanade/tachiyomi/animeextension/ar/cimaleek/interceptor/WebViewResolver.kt create mode 100644 src/ar/egydead/build.gradle create mode 100644 src/ar/egydead/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/egydead/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/egydead/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/egydead/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/egydead/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/egydead/res/web_hi_res_512.png create mode 100644 src/ar/egydead/src/eu/kanade/tachiyomi/animeextension/ar/egydead/EgyDead.kt create mode 100644 src/ar/faselhd/build.gradle create mode 100644 src/ar/faselhd/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/faselhd/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/faselhd/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/faselhd/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/faselhd/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/faselhd/res/web_hi_res_512.png create mode 100644 src/ar/faselhd/src/eu/kanade/tachiyomi/animeextension/ar/faselhd/FASELHD.kt create mode 100644 src/ar/faselhd/src/eu/kanade/tachiyomi/animeextension/ar/faselhd/WebViewResolver.kt create mode 100644 src/ar/mycima/build.gradle create mode 100644 src/ar/mycima/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/mycima/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/mycima/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/mycima/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/mycima/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/mycima/res/web_hi_res_512.png create mode 100644 src/ar/mycima/src/eu/kanade/tachiyomi/animeextension/ar/mycima/MyCima.kt create mode 100644 src/ar/mycima/src/eu/kanade/tachiyomi/animeextension/ar/mycima/extractors/GoVadExtractor.kt create mode 100644 src/ar/okanime/AndroidManifest.xml create mode 100644 src/ar/okanime/build.gradle create mode 100644 src/ar/okanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/okanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/okanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/okanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/okanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/okanime/src/eu/kanade/tachiyomi/animeextension/ar/okanime/Okanime.kt create mode 100644 src/ar/okanime/src/eu/kanade/tachiyomi/animeextension/ar/okanime/OkanimeUrlActivity.kt create mode 100644 src/ar/tuktukcinema/build.gradle create mode 100644 src/ar/tuktukcinema/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/tuktukcinema/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/tuktukcinema/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/tuktukcinema/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/tuktukcinema/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/tuktukcinema/res/web_hi_res_512.png create mode 100644 src/ar/tuktukcinema/src/eu/kanade/tachiyomi/animeextension/ar/tuktukcinema/Tuktukcinema.kt create mode 100644 src/ar/witanime/build.gradle create mode 100644 src/ar/witanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/witanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/witanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/witanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/witanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/witanime/res/web_hi_res_512.png create mode 100644 src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/WitAnime.kt create mode 100644 src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/SharedExtractor.kt create mode 100644 src/ar/witanime/src/eu/kanade/tachiyomi/animeextension/ar/witanime/extractors/SoraPlayExtractor.kt create mode 100644 src/ar/xsanime/build.gradle create mode 100644 src/ar/xsanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/xsanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/xsanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/xsanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/xsanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/xsanime/res/web_hi_res_512.png create mode 100644 src/ar/xsanime/src/eu/kanade/tachiyomi/animeextension/ar/xsanime/XsAnime.kt create mode 100644 src/ar/xsmovie/build.gradle create mode 100644 src/ar/xsmovie/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ar/xsmovie/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ar/xsmovie/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ar/xsmovie/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ar/xsmovie/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ar/xsmovie/res/web_hi_res_512.png create mode 100644 src/ar/xsmovie/src/eu/kanade/tachiyomi/animeextension/ar/xsmovie/XsMovie.kt create mode 100644 src/de/animebase/build.gradle create mode 100644 src/de/animebase/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/animebase/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/animebase/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/animebase/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/animebase/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/animebase/src/eu/kanade/tachiyomi/animeextension/de/animebase/AnimeBase.kt create mode 100644 src/de/animebase/src/eu/kanade/tachiyomi/animeextension/de/animebase/AnimeBaseFilters.kt create mode 100644 src/de/animebase/src/eu/kanade/tachiyomi/animeextension/de/animebase/extractors/UnpackerExtractor.kt create mode 100644 src/de/animebase/src/eu/kanade/tachiyomi/animeextension/de/animebase/extractors/VidGuardExtractor.kt create mode 100644 src/de/animeloads/build.gradle create mode 100644 src/de/animeloads/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/animeloads/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/animeloads/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/animeloads/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/animeloads/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/animeloads/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/animeloads/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/animeloads/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/animeloads/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/animeloads/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/animeloads/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/animeloads/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/animeloads/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/animeloads/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/animeloads/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/animeloads/src/eu/kanade/tachiyomi/animeextension/de/animeloads/AnimeLoads.kt create mode 100644 src/de/animeloads/src/eu/kanade/tachiyomi/animeextension/de/animeloads/DdosGuardInterceptor.kt create mode 100644 src/de/animestream/build.gradle create mode 100644 src/de/animestream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/animestream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/animestream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/animestream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/animestream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/animestream/src/eu/kanade/tachiyomi/animeextension/de/animestream/AnimeStream.kt create mode 100644 src/de/animestream/src/eu/kanade/tachiyomi/animeextension/de/animestream/extractors/MetaExtractor.kt create mode 100644 src/de/animetoast/build.gradle create mode 100644 src/de/animetoast/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/animetoast/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/animetoast/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/animetoast/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/animetoast/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/animetoast/src/eu/kanade/tachiyomi/animeextension/de/animetoast/AnimeToast.kt create mode 100644 src/de/aniworld/build.gradle create mode 100644 src/de/aniworld/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/aniworld/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/aniworld/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/aniworld/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/aniworld/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/aniworld/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/aniworld/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/aniworld/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/aniworld/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/aniworld/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/aniworld/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/aniworld/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/aniworld/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/aniworld/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/aniworld/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AWConstants.kt create mode 100644 src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/AniWorld.kt create mode 100644 src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/DdosGuardInterceptor.kt create mode 100644 src/de/aniworld/src/eu/kanade/tachiyomi/animeextension/de/aniworld/extractors/VidozaExtractor.kt create mode 100644 src/de/cineclix/build.gradle create mode 100644 src/de/cineclix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/cineclix/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 src/de/cineclix/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 src/de/cineclix/res/mipmap-hdpi/ic_launcher_monochrome.png create mode 100644 src/de/cineclix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/cineclix/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 src/de/cineclix/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 src/de/cineclix/res/mipmap-mdpi/ic_launcher_monochrome.png create mode 100644 src/de/cineclix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/cineclix/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 src/de/cineclix/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 src/de/cineclix/res/mipmap-xhdpi/ic_launcher_monochrome.png create mode 100644 src/de/cineclix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/cineclix/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 src/de/cineclix/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 src/de/cineclix/res/mipmap-xxhdpi/ic_launcher_monochrome.png create mode 100644 src/de/cineclix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/cineclix/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 src/de/cineclix/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 src/de/cineclix/res/mipmap-xxxhdpi/ic_launcher_monochrome.png create mode 100644 src/de/cineclix/src/eu/kanade/tachiyomi/animeextension/de/cineclix/CineClix.kt create mode 100644 src/de/cineclix/src/eu/kanade/tachiyomi/animeextension/de/cineclix/extractors/StreamVidExtractor.kt create mode 100644 src/de/cineclix/src/eu/kanade/tachiyomi/animeextension/de/cineclix/extractors/SuperVideoExtractor.kt create mode 100644 src/de/cinemathek/build.gradle create mode 100644 src/de/cinemathek/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/cinemathek/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/cinemathek/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/cinemathek/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/cinemathek/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/cinemathek/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/cinemathek/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/cinemathek/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/cinemathek/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/cinemathek/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/cinemathek/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/cinemathek/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/cinemathek/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/cinemathek/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/cinemathek/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/cinemathek/src/eu/kanade/tachiyomi/animeextension/de/cinemathek/Cinemathek.kt create mode 100644 src/de/einfach/AndroidManifest.xml create mode 100644 src/de/einfach/build.gradle create mode 100644 src/de/einfach/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/einfach/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/einfach/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/einfach/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/einfach/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/Einfach.kt create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/EinfachUrlActivity.kt create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/extractors/MyStreamExtractor.kt create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/extractors/UnpackerExtractor.kt create mode 100644 src/de/einfach/src/eu/kanade/tachiyomi/animeextension/de/einfach/extractors/VidozaExtractor.kt create mode 100644 src/de/filmpalast/build.gradle create mode 100644 src/de/filmpalast/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/filmpalast/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/filmpalast/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/filmpalast/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/filmpalast/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/filmpalast/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/filmpalast/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/filmpalast/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/filmpalast/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/filmpalast/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/filmpalast/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/filmpalast/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/filmpalast/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/filmpalast/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/filmpalast/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/filmpalast/src/eu/kanade/tachiyomi/animeextension/de/filmpalast/FilmPalast.kt create mode 100644 src/de/filmpalast/src/eu/kanade/tachiyomi/animeextension/de/filmpalast/extractors/EvoloadExtractor.kt create mode 100644 src/de/filmpalast/src/eu/kanade/tachiyomi/animeextension/de/filmpalast/extractors/JsUnpacker.kt create mode 100644 src/de/filmpalast/src/eu/kanade/tachiyomi/animeextension/de/filmpalast/extractors/StreamHideVidExtractor.kt create mode 100644 src/de/filmpalast/src/eu/kanade/tachiyomi/animeextension/de/filmpalast/extractors/UpstreamExtractor.kt create mode 100644 src/de/kinoking/build.gradle create mode 100644 src/de/kinoking/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/kinoking/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/kinoking/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/kinoking/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/kinoking/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/kinoking/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/kinoking/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/kinoking/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/kinoking/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/kinoking/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/kinoking/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/kinoking/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/kinoking/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/kinoking/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/kinoking/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/kinoking/src/eu/kanade/tachiyomi/animeextension/de/kinoking/Kinoking.kt create mode 100644 src/de/kool/build.gradle create mode 100644 src/de/kool/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/kool/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 src/de/kool/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 src/de/kool/res/mipmap-hdpi/ic_launcher_monochrome.png create mode 100644 src/de/kool/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/kool/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 src/de/kool/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 src/de/kool/res/mipmap-mdpi/ic_launcher_monochrome.png create mode 100644 src/de/kool/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/kool/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 src/de/kool/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 src/de/kool/res/mipmap-xhdpi/ic_launcher_monochrome.png create mode 100644 src/de/kool/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/kool/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 src/de/kool/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 src/de/kool/res/mipmap-xxhdpi/ic_launcher_monochrome.png create mode 100644 src/de/kool/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/kool/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 src/de/kool/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 src/de/kool/res/mipmap-xxxhdpi/ic_launcher_monochrome.png create mode 100644 src/de/kool/src/eu/kanade/tachiyomi/animeextension/de/kool/Kool.kt create mode 100644 src/de/kool/src/eu/kanade/tachiyomi/animeextension/de/kool/extractors/JsUnpacker.kt create mode 100644 src/de/kool/src/eu/kanade/tachiyomi/animeextension/de/kool/extractors/VidozaExtractor.kt create mode 100644 src/de/moflixstream/build.gradle create mode 100644 src/de/moflixstream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/moflixstream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/moflixstream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/moflixstream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/moflixstream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/moflixstream/src/eu/kanade/tachiyomi/animeextension/de/moflixstream/MoflixStream.kt create mode 100644 src/de/moflixstream/src/eu/kanade/tachiyomi/animeextension/de/moflixstream/dto/MoflixStreamDto.kt create mode 100644 src/de/moflixstream/src/eu/kanade/tachiyomi/animeextension/de/moflixstream/extractors/UnpackerExtractor.kt create mode 100644 src/de/moflixstream/src/eu/kanade/tachiyomi/animeextension/de/moflixstream/extractors/VidGuardExtractor.kt create mode 100644 src/de/movie2k/build.gradle create mode 100644 src/de/movie2k/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/movie2k/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 src/de/movie2k/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 src/de/movie2k/res/mipmap-hdpi/ic_launcher_monochrome.png create mode 100644 src/de/movie2k/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/movie2k/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 src/de/movie2k/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 src/de/movie2k/res/mipmap-mdpi/ic_launcher_monochrome.png create mode 100644 src/de/movie2k/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/movie2k/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 src/de/movie2k/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 src/de/movie2k/res/mipmap-xhdpi/ic_launcher_monochrome.png create mode 100644 src/de/movie2k/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/movie2k/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 src/de/movie2k/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 src/de/movie2k/res/mipmap-xxhdpi/ic_launcher_monochrome.png create mode 100644 src/de/movie2k/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/movie2k/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 src/de/movie2k/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 src/de/movie2k/res/mipmap-xxxhdpi/ic_launcher_monochrome.png create mode 100644 src/de/movie2k/src/eu/kanade/tachiyomi/animeextension/de/movie2k/Movie2k.kt create mode 100644 src/de/movie2k/src/eu/kanade/tachiyomi/animeextension/de/movie2k/extractors/DroploadExtractor.kt create mode 100644 src/de/movie2k/src/eu/kanade/tachiyomi/animeextension/de/movie2k/extractors/UpstreamExtractor.kt create mode 100644 src/de/movie4k/build.gradle create mode 100644 src/de/movie4k/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/movie4k/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/movie4k/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/movie4k/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/movie4k/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/movie4k/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/movie4k/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/movie4k/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/movie4k/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/movie4k/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/movie4k/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/movie4k/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/movie4k/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/movie4k/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/movie4k/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/movie4k/src/eu/kanade/tachiyomi/animeextension/de/movie4k/Movie4k.kt create mode 100644 src/de/movie4k/src/eu/kanade/tachiyomi/animeextension/de/movie4k/extractors/StreamZExtractor.kt create mode 100644 src/de/movie4k/src/eu/kanade/tachiyomi/animeextension/de/movie4k/extractors/VidozaExtractor.kt create mode 100644 src/de/serienstream/build.gradle create mode 100644 src/de/serienstream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/serienstream/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/serienstream/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/serienstream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/serienstream/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/serienstream/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/serienstream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/serienstream/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/serienstream/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/serienstream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/serienstream/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/serienstream/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/serienstream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/serienstream/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/serienstream/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/serienstream/src/eu/kanade/tachiyomi/animeextension/de/serienstream/DdosGuardInterceptor.kt create mode 100644 src/de/serienstream/src/eu/kanade/tachiyomi/animeextension/de/serienstream/SConstants.kt create mode 100644 src/de/serienstream/src/eu/kanade/tachiyomi/animeextension/de/serienstream/Serienstream.kt create mode 100644 src/de/streamcloud/build.gradle create mode 100644 src/de/streamcloud/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/de/streamcloud/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/streamcloud/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/streamcloud/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/de/streamcloud/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/streamcloud/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/streamcloud/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/de/streamcloud/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/streamcloud/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/streamcloud/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/de/streamcloud/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/streamcloud/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/streamcloud/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/de/streamcloud/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/de/streamcloud/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/de/streamcloud/src/eu/kanade/tachiyomi/animeextension/de/streamcloud/StreamCloud.kt create mode 100644 src/en/allanime/build.gradle create mode 100644 src/en/allanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/allanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/allanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/allanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/allanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/allanime/res/web_hi_res_512.png create mode 100644 src/en/allanime/src/eu/kanade/tachiyomi/animeextension/en/allanime/AllAnime.kt create mode 100644 src/en/allanime/src/eu/kanade/tachiyomi/animeextension/en/allanime/AllAnimeDto.kt create mode 100644 src/en/allanime/src/eu/kanade/tachiyomi/animeextension/en/allanime/AllAnimeFilters.kt create mode 100644 src/en/allanime/src/eu/kanade/tachiyomi/animeextension/en/allanime/AllAnimeQueries.kt create mode 100644 src/en/allanime/src/eu/kanade/tachiyomi/animeextension/en/allanime/extractors/AllAnimeExtractor.kt create mode 100644 src/en/allanimechi/build.gradle create mode 100644 src/en/allanimechi/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/allanimechi/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/allanimechi/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/allanimechi/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/allanimechi/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/allanimechi/res/web_hi_res_512.png create mode 100644 src/en/allanimechi/src/eu/kanade/tachiyomi/animeextension/en/allanimechi/AllAnimeChi.kt create mode 100644 src/en/allanimechi/src/eu/kanade/tachiyomi/animeextension/en/allanimechi/AllAnimeChiDto.kt create mode 100644 src/en/allanimechi/src/eu/kanade/tachiyomi/animeextension/en/allanimechi/AllAnimeChiFilters.kt create mode 100644 src/en/allanimechi/src/eu/kanade/tachiyomi/animeextension/en/allanimechi/extractors/AllAnimeExtractor.kt create mode 100644 src/en/allanimechi/src/eu/kanade/tachiyomi/animeextension/en/allanimechi/extractors/InternalExtractor.kt create mode 100644 src/en/allmovies/build.gradle create mode 100644 src/en/allmovies/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/allmovies/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/allmovies/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/allmovies/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/allmovies/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/allmovies/res/web_hi_res_512.png create mode 100644 src/en/allmovies/src/eu/kanade/tachiyomi/animeextension/en/allmovies/AllMovies.kt create mode 100644 src/en/animeflix/build.gradle create mode 100644 src/en/animeflix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animeflix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animeflix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animeflix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animeflix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animeflix/res/web_hi_res_512.png create mode 100644 src/en/animeflix/src/eu/kanade/tachiyomi/animeextension/en/animeflix/AnimeFlix.kt create mode 100644 src/en/animeflixlive/build.gradle create mode 100644 src/en/animeflixlive/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animeflixlive/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animeflixlive/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animeflixlive/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animeflixlive/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animeflixlive/src/eu/kanade/tachiyomi/animeextension/en/animeflixlive/AnimeflixLive.kt create mode 100644 src/en/animeflixlive/src/eu/kanade/tachiyomi/animeextension/en/animeflixlive/Dto.kt create mode 100644 src/en/animeflixlive/src/eu/kanade/tachiyomi/animeextension/en/animeflixlive/Filters.kt create mode 100644 src/en/animekhor/build.gradle create mode 100644 src/en/animekhor/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animekhor/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animekhor/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animekhor/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animekhor/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animekhor/src/eu/kanade/tachiyomi/animeextension/en/animekhor/AnimeKhor.kt create mode 100644 src/en/animekhor/src/eu/kanade/tachiyomi/animeextension/en/animekhor/extractors/AnimeABCExtractor.kt create mode 100644 src/en/animekhor/src/eu/kanade/tachiyomi/animeextension/en/animekhor/extractors/StreamHideExtractor.kt create mode 100644 src/en/animenosub/build.gradle create mode 100644 src/en/animenosub/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animenosub/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animenosub/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animenosub/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animenosub/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animenosub/src/eu/kanade/tachiyomi/animeextension/en/animenosub/Animenosub.kt create mode 100644 src/en/animenosub/src/eu/kanade/tachiyomi/animeextension/en/animenosub/extractors/VidMolyExtractor.kt create mode 100644 src/en/animenosub/src/eu/kanade/tachiyomi/animeextension/en/animenosub/extractors/VtubeExtractor.kt create mode 100644 src/en/animenosub/src/eu/kanade/tachiyomi/animeextension/en/animenosub/extractors/WolfstreamExtractor.kt create mode 100644 src/en/animension/build.gradle create mode 100644 src/en/animension/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animension/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animension/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animension/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animension/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animension/res/web_hi_res_512.png create mode 100644 src/en/animension/src/eu/kanade/tachiyomi/animeextension/en/animension/Animension.kt create mode 100644 src/en/animeowl/build.gradle create mode 100644 src/en/animeowl/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animeowl/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animeowl/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animeowl/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animeowl/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animeowl/res/web_hi_res_512.png create mode 100644 src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt create mode 100644 src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwlDto.kt create mode 100644 src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/extractors/OwlExtractor.kt create mode 100644 src/en/animepahe/build.gradle create mode 100644 src/en/animepahe/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animepahe/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animepahe/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animepahe/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animepahe/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animepahe/res/web_hi_res_512.png create mode 100644 src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/AnimePahe.kt create mode 100644 src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/DdosGuardInterceptor.kt create mode 100644 src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/KwikExtractor.kt create mode 100644 src/en/animepahe/src/eu/kanade/tachiyomi/animeextension/en/animepahe/dto/AnimePaheDto.kt create mode 100644 src/en/animeparadise/build.gradle create mode 100644 src/en/animeparadise/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animeparadise/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animeparadise/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animeparadise/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animeparadise/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animeparadise/res/web_hi_res_512.png create mode 100644 src/en/animeparadise/src/eu/kanade/tachiyomi/animeextension/en/animeparadise/AnimeParadise.kt create mode 100644 src/en/animeparadise/src/eu/kanade/tachiyomi/animeextension/en/animeparadise/AnimeParadiseDto.kt create mode 100644 src/en/animesakura/README.md create mode 100644 src/en/animesakura/build.gradle create mode 100644 src/en/animesakura/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animesakura/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animesakura/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animesakura/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animesakura/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animesakura/src/eu/kanade/tachiyomi/animeextension/en/animesakura/AnimeSakura.kt create mode 100644 src/en/animesakura/src/eu/kanade/tachiyomi/animeextension/en/animesakura/DriveIndexExtractor.kt create mode 100644 src/en/animetake/build.gradle create mode 100644 src/en/animetake/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/animetake/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/animetake/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/animetake/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/animetake/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/animetake/res/web_hi_res_512.png create mode 100644 src/en/animetake/src/eu/kanade/tachiyomi/animeextension/en/animetake/AnimeTake.kt create mode 100644 src/en/animetake/src/eu/kanade/tachiyomi/animeextension/en/animetake/AnimeTakeFilters.kt create mode 100644 src/en/asiaflix/build.gradle create mode 100644 src/en/asiaflix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/asiaflix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/asiaflix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/asiaflix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/asiaflix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/asiaflix/res/web_hi_res_512.png create mode 100644 src/en/asiaflix/src/eu/kanade/tachiyomi/animeextension/en/asiaflix/AsiaFlix.kt create mode 100644 src/en/asiaflix/src/eu/kanade/tachiyomi/animeextension/en/asiaflix/dto/DetailsResponseDto.kt create mode 100644 src/en/asiaflix/src/eu/kanade/tachiyomi/animeextension/en/asiaflix/dto/EpisodeResponseDto.kt create mode 100644 src/en/asiaflix/src/eu/kanade/tachiyomi/animeextension/en/asiaflix/dto/SearchResponseDto.kt create mode 100644 src/en/asiaflix/src/eu/kanade/tachiyomi/animeextension/en/asiaflix/dto/VideoResponseDto.kt create mode 100644 src/en/asianload/build.gradle create mode 100644 src/en/asianload/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/asianload/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/asianload/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/asianload/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/asianload/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/asianload/res/play_store_512.png create mode 100644 src/en/asianload/src/eu/kanade/tachiyomi/animeextension/en/asianload/AsianLoad.kt create mode 100644 src/en/ask4movie/build.gradle create mode 100644 src/en/ask4movie/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/ask4movie/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/ask4movie/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/ask4movie/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/ask4movie/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/ask4movie/res/web_hi_res_512.png create mode 100644 src/en/ask4movie/src/eu/kanade/tachiyomi/animeextension/en/ask4movie/Ask4Movie.kt create mode 100644 src/en/bestdubbedanime/build.gradle create mode 100644 src/en/bestdubbedanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/bestdubbedanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/bestdubbedanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/bestdubbedanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/bestdubbedanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/bestdubbedanime/res/web_hi_res_512.png create mode 100644 src/en/bestdubbedanime/src/eu/kanade/tachiyomi/animeextension/en/bestdubbedanime/BestDubbedAnime.kt create mode 100644 src/en/donghuastream/build.gradle create mode 100644 src/en/donghuastream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/donghuastream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/donghuastream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/donghuastream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/donghuastream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/donghuastream/src/eu/kanade/tachiyomi/animeextension/en/donghuastream/DonghuaStream.kt create mode 100644 src/en/donghuastream/src/eu/kanade/tachiyomi/animeextension/en/donghuastream/extractors/StreamPlayExtractor.kt create mode 100644 src/en/dopebox/build.gradle create mode 100644 src/en/dopebox/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/dopebox/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/dopebox/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/dopebox/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/dopebox/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/dopebox/res/play_store_512.png create mode 100644 src/en/dopebox/src/eu/kanade/tachiyomi/animeextension/en/dopebox/DopeBox.kt create mode 100644 src/en/dramacool/build.gradle create mode 100644 src/en/dramacool/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/dramacool/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/dramacool/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/dramacool/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/dramacool/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/dramacool/res/play_store_512.png create mode 100644 src/en/dramacool/src/eu/kanade/tachiyomi/animeextension/en/dramacool/DramaCool.kt create mode 100644 src/en/edytjedhgmdhm/build.gradle create mode 100644 src/en/edytjedhgmdhm/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/edytjedhgmdhm/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/edytjedhgmdhm/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/edytjedhgmdhm/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/edytjedhgmdhm/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/edytjedhgmdhm/res/web_hi_res_512.png create mode 100644 src/en/edytjedhgmdhm/src/eu/kanade/tachiyomi/animeextension/en/edytjedhgmdhm/Edytjedhgmdhm.kt create mode 100644 src/en/fmovies/build.gradle create mode 100644 src/en/fmovies/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/fmovies/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/fmovies/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/fmovies/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/fmovies/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/fmovies/res/web_hi_res_512.png create mode 100644 src/en/fmovies/src/eu/kanade/tachiyomi/animeextension/en/fmovies/FMovies.kt create mode 100644 src/en/fmovies/src/eu/kanade/tachiyomi/animeextension/en/fmovies/FMoviesDto.kt create mode 100644 src/en/fmovies/src/eu/kanade/tachiyomi/animeextension/en/fmovies/FMoviesFilters.kt create mode 100644 src/en/fmovies/src/eu/kanade/tachiyomi/animeextension/en/fmovies/FmoviesUtils.kt create mode 100644 src/en/genoanime/build.gradle create mode 100644 src/en/genoanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/genoanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/genoanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/genoanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/genoanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/genoanime/res/web_hi_res_512.png create mode 100644 src/en/genoanime/src/eu/kanade/tachiyomi/animeextension/en/genoanime/GenoAnime.kt create mode 100644 src/en/gogoanime/build.gradle create mode 100644 src/en/gogoanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/gogoanime/res/web_hi_res_512.png create mode 100644 src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnime.kt create mode 100644 src/en/gogoanime/src/eu/kanade/tachiyomi/animeextension/en/gogoanime/GogoAnimeFilters.kt create mode 100644 src/en/hahomoe/build.gradle create mode 100644 src/en/hahomoe/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/hahomoe/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/hahomoe/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/hahomoe/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/hahomoe/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/hahomoe/res/web_hi_res_512.png create mode 100644 src/en/hahomoe/src/eu/kanade/tachiyomi/animeextension/en/hahomoe/HahoMoe.kt create mode 100644 src/en/hahomoe/src/eu/kanade/tachiyomi/animeextension/en/hahomoe/HahoMoeFilters.kt create mode 100644 src/en/hanime/build.gradle create mode 100644 src/en/hanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/hanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/hanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/hanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/hanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/hanime/res/web_hi_res_500.png create mode 100644 src/en/hanime/src/eu/kanade/tachiyomi/animeextension/en/hanime/DataModel.kt create mode 100644 src/en/hanime/src/eu/kanade/tachiyomi/animeextension/en/hanime/Hanime.kt create mode 100644 src/en/hentaimama/build.gradle create mode 100644 src/en/hentaimama/ic_launcher-playstore.png create mode 100644 src/en/hentaimama/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/hentaimama/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/hentaimama/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/hentaimama/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/hentaimama/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/hentaimama/res/web_hi_res_500.png create mode 100644 src/en/hentaimama/src/eu/kanade/tachiyomi/animeextension/en/hentaimama/HentaiMama.kt create mode 100644 src/en/hstream/AndroidManifest.xml create mode 100644 src/en/hstream/build.gradle create mode 100644 src/en/hstream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/hstream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/hstream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/hstream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/hstream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/hstream/src/eu/kanade/tachiyomi/animeextension/en/hstream/Hstream.kt create mode 100644 src/en/hstream/src/eu/kanade/tachiyomi/animeextension/en/hstream/HstreamFilters.kt create mode 100644 src/en/hstream/src/eu/kanade/tachiyomi/animeextension/en/hstream/HstreamUrlActivity.kt create mode 100644 src/en/kaido/build.gradle create mode 100644 src/en/kaido/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/kaido/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/kaido/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/kaido/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/kaido/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/kaido/res/play_store_512.png create mode 100644 src/en/kaido/src/eu/kanade/tachiyomi/animeextension/en/kaido/Kaido.kt create mode 100644 src/en/kawaiifu/build.gradle create mode 100644 src/en/kawaiifu/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/kawaiifu/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/kawaiifu/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/kawaiifu/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/kawaiifu/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/kawaiifu/res/web_hi_res_512.png create mode 100644 src/en/kawaiifu/src/eu/kanade/tachiyomi/animeextension/en/kawaiifu/Kawaiifu.kt create mode 100644 src/en/kawaiifu/src/eu/kanade/tachiyomi/animeextension/en/kawaiifu/KawaiifuFilters.kt create mode 100644 src/en/kayoanime/README.md create mode 100644 src/en/kayoanime/build.gradle create mode 100644 src/en/kayoanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/kayoanime/res/web_hi_res_512.png create mode 100644 src/en/kayoanime/src/eu/kanade/tachiyomi/animeextension/en/kayoanime/DriveIndexExtractor.kt create mode 100644 src/en/kayoanime/src/eu/kanade/tachiyomi/animeextension/en/kayoanime/Kayoanime.kt create mode 100644 src/en/kickassanime/AndroidManifest.xml create mode 100644 src/en/kickassanime/build.gradle create mode 100644 src/en/kickassanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/kickassanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/kickassanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/kickassanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/kickassanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/kickassanime/res/web_hi_res_512.png create mode 100644 src/en/kickassanime/src/eu/kanade/tachiyomi/animeextension/en/kickassanime/KickAssAnime.kt create mode 100644 src/en/kickassanime/src/eu/kanade/tachiyomi/animeextension/en/kickassanime/KickAssAnimeFilters.kt create mode 100644 src/en/kickassanime/src/eu/kanade/tachiyomi/animeextension/en/kickassanime/KickAssAnimeUrlActivity.kt create mode 100644 src/en/kickassanime/src/eu/kanade/tachiyomi/animeextension/en/kickassanime/dto/KickAssAnimeDto.kt create mode 100644 src/en/kickassanime/src/eu/kanade/tachiyomi/animeextension/en/kickassanime/extractors/KickAssAnimeExtractor.kt create mode 100644 src/en/kimoitv/build.gradle create mode 100644 src/en/kimoitv/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/kimoitv/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/kimoitv/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/kimoitv/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/kimoitv/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/kimoitv/res/web_hi_res_512.png create mode 100644 src/en/kimoitv/src/eu/kanade/tachiyomi/animeextension/en/kimoitv/KimoiTV.kt create mode 100644 src/en/kissanime/build.gradle create mode 100644 src/en/kissanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/kissanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/kissanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/kissanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/kissanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/kissanime/res/web_hi_res_512.png create mode 100644 src/en/kissanime/src/eu/kanade/tachiyomi/animeextension/en/kissanime/KissAnime.kt create mode 100644 src/en/kissanime/src/eu/kanade/tachiyomi/animeextension/en/kissanime/KissAnimeFilters.kt create mode 100644 src/en/kissanime/src/eu/kanade/tachiyomi/animeextension/en/kissanime/extractors/VodstreamExtractor.kt create mode 100644 src/en/kisskh/build.gradle create mode 100644 src/en/kisskh/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/kisskh/res/mipmap-hdpi/ic_launcher_background.png create mode 100644 src/en/kisskh/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 src/en/kisskh/res/mipmap-hdpi/ic_launcher_monochrome.png create mode 100644 src/en/kisskh/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/kisskh/res/mipmap-mdpi/ic_launcher_background.png create mode 100644 src/en/kisskh/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 src/en/kisskh/res/mipmap-mdpi/ic_launcher_monochrome.png create mode 100644 src/en/kisskh/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/kisskh/res/mipmap-xhdpi/ic_launcher_background.png create mode 100644 src/en/kisskh/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 src/en/kisskh/res/mipmap-xhdpi/ic_launcher_monochrome.png create mode 100644 src/en/kisskh/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/kisskh/res/mipmap-xxhdpi/ic_launcher_background.png create mode 100644 src/en/kisskh/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 src/en/kisskh/res/mipmap-xxhdpi/ic_launcher_monochrome.png create mode 100644 src/en/kisskh/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/kisskh/res/mipmap-xxxhdpi/ic_launcher_background.png create mode 100644 src/en/kisskh/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 src/en/kisskh/res/mipmap-xxxhdpi/ic_launcher_monochrome.png create mode 100644 src/en/kisskh/src/eu/kanade/tachiyomi/animeextension/en/kisskh/KissKH.kt create mode 100644 src/en/kisskh/src/eu/kanade/tachiyomi/animeextension/en/kisskh/SubDecryptor.kt create mode 100644 src/en/luciferdonghua/build.gradle create mode 100644 src/en/luciferdonghua/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/luciferdonghua/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/luciferdonghua/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/luciferdonghua/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/luciferdonghua/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/luciferdonghua/src/eu/kanade/tachiyomi/animeextension/en/luciferdonghua/LuciferDonghua.kt create mode 100644 src/en/multimovies/build.gradle create mode 100644 src/en/multimovies/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/multimovies/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/multimovies/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/multimovies/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/multimovies/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/multimovies/src/eu/kanade/tachiyomi/animeextension/en/multimovies/Multimovies.kt create mode 100644 src/en/multimovies/src/eu/kanade/tachiyomi/animeextension/en/multimovies/MultimoviesFilters.kt create mode 100644 src/en/multimovies/src/eu/kanade/tachiyomi/animeextension/en/multimovies/extractors/AutoEmbedExtractor.kt create mode 100644 src/en/multimovies/src/eu/kanade/tachiyomi/animeextension/en/multimovies/extractors/MultimoviesCloudExtractor.kt create mode 100644 src/en/multimovies/src/eu/kanade/tachiyomi/animeextension/en/multimovies/extractors/RabbitStreamExtractor.kt create mode 100644 src/en/myanime/build.gradle create mode 100644 src/en/myanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/myanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/myanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/myanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/myanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/myanime/res/web_hi_res_512.png create mode 100644 src/en/myanime/src/eu/kanade/tachiyomi/animeextension/en/myanime/Myanime.kt create mode 100644 src/en/myanime/src/eu/kanade/tachiyomi/animeextension/en/myanime/extractors/YouTubeExtractor.kt create mode 100644 src/en/myrunningman/AndroidManifest.xml create mode 100644 src/en/myrunningman/build.gradle create mode 100644 src/en/myrunningman/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/myrunningman/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/myrunningman/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/myrunningman/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/myrunningman/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/myrunningman/src/eu/kanade/tachiyomi/animeextension/en/myrunningman/MyRunningMan.kt create mode 100644 src/en/myrunningman/src/eu/kanade/tachiyomi/animeextension/en/myrunningman/MyRunningManUrlActivity.kt create mode 100644 src/en/nineanime/build.gradle create mode 100644 src/en/nineanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/nineanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/nineanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/nineanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/nineanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/nineanime/res/web_hi_res_512.png create mode 100644 src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/Aniwave.kt create mode 100644 src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/AniwaveDto.kt create mode 100644 src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/AniwaveFilters.kt create mode 100644 src/en/nineanime/src/eu/kanade/tachiyomi/animeextension/en/nineanime/AniwaveUtils.kt create mode 100644 src/en/nollyverse/build.gradle create mode 100644 src/en/nollyverse/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/nollyverse/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/nollyverse/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/nollyverse/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/nollyverse/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/nollyverse/src/eu/kanade/tachiyomi/animeextension/en/nollyverse/NollyVerse.kt create mode 100644 src/en/noobsubs/build.gradle create mode 100644 src/en/noobsubs/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/noobsubs/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/noobsubs/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/noobsubs/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/noobsubs/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/noobsubs/res/web_hi_res_512.png create mode 100644 src/en/noobsubs/src/eu/kanade/tachiyomi/animeextension/en/noobsubs/NoobSubs.kt create mode 100644 src/en/oppaistream/build.gradle create mode 100644 src/en/oppaistream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/oppaistream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/oppaistream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/oppaistream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/oppaistream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/oppaistream/res/web_hi_res_512.png create mode 100644 src/en/oppaistream/src/eu/kanade/tachiyomi/animeextension/en/oppaistream/OppaiStream.kt create mode 100644 src/en/oppaistream/src/eu/kanade/tachiyomi/animeextension/en/oppaistream/OppaiStreamFilters.kt create mode 100644 src/en/oppaistream/src/eu/kanade/tachiyomi/animeextension/en/oppaistream/dto/OppaiStreamDto.kt create mode 100644 src/en/putlocker/build.gradle create mode 100644 src/en/putlocker/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/putlocker/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/putlocker/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/putlocker/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/putlocker/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/putlocker/res/web_hi_res_512.png create mode 100644 src/en/putlocker/src/eu/kanade/tachiyomi/animeextension/en/putlocker/CryptoAES.kt create mode 100644 src/en/putlocker/src/eu/kanade/tachiyomi/animeextension/en/putlocker/JSONUtil.kt create mode 100644 src/en/putlocker/src/eu/kanade/tachiyomi/animeextension/en/putlocker/PutLocker.kt create mode 100644 src/en/putlocker/src/eu/kanade/tachiyomi/animeextension/en/putlocker/PutLockerDto.kt create mode 100644 src/en/putlocker/src/eu/kanade/tachiyomi/animeextension/en/putlocker/extractors/PutServerExtractor.kt create mode 100644 src/en/ripcrabbyanime/README.md create mode 100644 src/en/ripcrabbyanime/build.gradle create mode 100644 src/en/ripcrabbyanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/ripcrabbyanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/ripcrabbyanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/ripcrabbyanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/ripcrabbyanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/ripcrabbyanime/res/web_hi_res_512.png create mode 100644 src/en/ripcrabbyanime/src/eu/kanade/tachiyomi/animeextension/en/ripcrabbyanime/Ripcrabbyanime.kt create mode 100644 src/en/rule34video/AndroidManifest.xml create mode 100644 src/en/rule34video/build.gradle create mode 100644 src/en/rule34video/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/rule34video/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/rule34video/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/rule34video/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/rule34video/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/rule34video/res/web_hi_res_500.png create mode 100644 src/en/rule34video/src/eu/kanade/tachiyomi/animeextension/en/rule34video/DdosGuardInterceptor.kt create mode 100644 src/en/rule34video/src/eu/kanade/tachiyomi/animeextension/en/rule34video/Rule34Video.kt create mode 100644 src/en/rule34video/src/eu/kanade/tachiyomi/animeextension/en/rule34video/Rule34VideoUrlActivity.kt create mode 100644 src/en/seez/build.gradle create mode 100644 src/en/seez/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/seez/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/seez/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/seez/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/seez/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/seez/res/web_hi_res_512.png create mode 100644 src/en/seez/src/eu/kanade/tachiyomi/animeextension/en/seez/Seez.kt create mode 100644 src/en/seez/src/eu/kanade/tachiyomi/animeextension/en/seez/SeezDto.kt create mode 100644 src/en/sflix/build.gradle create mode 100644 src/en/sflix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/sflix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/sflix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/sflix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/sflix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/sflix/res/play_store_512.png create mode 100644 src/en/sflix/src/eu/kanade/tachiyomi/animeextension/en/sflix/SFlix.kt create mode 100644 src/en/slothanime/build.gradle create mode 100644 src/en/slothanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/slothanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/slothanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/slothanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/slothanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/slothanime/src/eu/kanade/tachiyomi/animeextension/en/slothanime/Filters.kt create mode 100644 src/en/slothanime/src/eu/kanade/tachiyomi/animeextension/en/slothanime/SlothAnime.kt create mode 100644 src/en/superstream/build.gradle create mode 100644 src/en/superstream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/superstream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/superstream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/superstream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/superstream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/superstream/res/web_hi_res_512.png create mode 100644 src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/DataModel.kt create mode 100644 src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStream.kt create mode 100644 src/en/superstream/src/eu/kanade/tachiyomi/animeextension/en/superstream/SuperStreamAPI.kt create mode 100644 src/en/tokuzilla/build.gradle create mode 100644 src/en/tokuzilla/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/tokuzilla/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/tokuzilla/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/tokuzilla/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/tokuzilla/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/tokuzilla/src/eu/kanade/tachiyomi/animeextension/en/tokuzilla/Tokuzilla.kt create mode 100644 src/en/uhdmovies/build.gradle create mode 100644 src/en/uhdmovies/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/uhdmovies/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/uhdmovies/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/uhdmovies/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/uhdmovies/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/uhdmovies/res/web_hi_res_512.png create mode 100644 src/en/uhdmovies/src/eu/kanade/tachiyomi/animeextension/en/uhdmovies/RedirectorBypasser.kt create mode 100644 src/en/uhdmovies/src/eu/kanade/tachiyomi/animeextension/en/uhdmovies/UHDMovies.kt create mode 100644 src/en/uniquestream/build.gradle create mode 100644 src/en/uniquestream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/uniquestream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/uniquestream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/uniquestream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/uniquestream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/uniquestream/res/web_hi_res_512.png create mode 100644 src/en/uniquestream/src/eu/kanade/tachiyomi/animeextension/en/uniquestream/UniqueStream.kt create mode 100644 src/en/wcofun/build.gradle create mode 100644 src/en/wcofun/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/wcofun/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/wcofun/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/wcofun/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/wcofun/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/wcofun/res/web_hi_res_512.png create mode 100644 src/en/wcofun/src/eu/kanade/tachiyomi/animeextension/en/wcofun/Wcofun.kt create mode 100644 src/en/wcostream/build.gradle create mode 100644 src/en/wcostream/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/wcostream/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/wcostream/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/wcostream/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/wcostream/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/wcostream/res/play_store_512.png create mode 100644 src/en/wcostream/src/eu/kanade/tachiyomi/animeextension/en/wcostream/WCOStream.kt create mode 100644 src/en/zoro/build.gradle create mode 100644 src/en/zoro/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/zoro/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/zoro/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/zoro/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/zoro/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/zoro/src/eu/kanade/tachiyomi/animeextension/en/zoro/HiAnime.kt create mode 100644 src/es/animefenix/build.gradle create mode 100644 src/es/animefenix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/animefenix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/animefenix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/animefenix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/animefenix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/Animefenix.kt create mode 100644 src/es/animefenix/src/eu/kanade/tachiyomi/animeextension/es/animefenix/extractors/SolidFilesExtractor.kt create mode 100644 src/es/animeflv/build.gradle create mode 100644 src/es/animeflv/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/animeflv/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/animeflv/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/animeflv/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/animeflv/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/animeflv/src/eu/kanade/tachiyomi/animeextension/es/animeflv/AnimeFlv.kt create mode 100644 src/es/animeid/build.gradle create mode 100644 src/es/animeid/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/animeid/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/animeid/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/animeid/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/animeid/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/animeid/src/eu/kanade/tachiyomi/animeextension/es/animeid/AnimeID.kt create mode 100644 src/es/animelatinohd/build.gradle create mode 100644 src/es/animelatinohd/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/animelatinohd/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/animelatinohd/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/animelatinohd/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/animelatinohd/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/animelatinohd/src/eu/kanade/tachiyomi/animeextension/es/animelatinohd/AnimeLatinoHD.kt create mode 100644 src/es/animelatinohd/src/eu/kanade/tachiyomi/animeextension/es/animelatinohd/extractors/JsUnpacker.kt create mode 100644 src/es/animelatinohd/src/eu/kanade/tachiyomi/animeextension/es/animelatinohd/extractors/SolidFilesExtractor.kt create mode 100644 src/es/animemovil/build.gradle create mode 100644 src/es/animemovil/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/animemovil/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/animemovil/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/animemovil/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/animemovil/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/animemovil/src/eu/kanade/tachiyomi/animeextension/es/animemovil/AnimeMovil.kt create mode 100644 src/es/animeonlineninja/build.gradle create mode 100644 src/es/animeonlineninja/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/animeonlineninja/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/animeonlineninja/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/animeonlineninja/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/animeonlineninja/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/animeonlineninja/src/eu/kanade/tachiyomi/animeextension/es/animeonlineninja/AnimeOnlineNinja.kt create mode 100644 src/es/animeonlineninja/src/eu/kanade/tachiyomi/animeextension/es/animeonlineninja/AnimeOnlineNinjaFilters.kt create mode 100644 src/es/animeonlineninja/src/eu/kanade/tachiyomi/animeextension/es/animeonlineninja/VrfInterceptor.kt create mode 100644 src/es/animeyt/build.gradle create mode 100644 src/es/animeyt/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/animeyt/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/animeyt/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/animeyt/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/animeyt/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/animeyt/src/eu/kanade/tachiyomi/animeextension/es/animeyt/Animeyt.kt create mode 100644 src/es/animeytes/build.gradle create mode 100644 src/es/animeytes/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/animeytes/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/animeytes/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/animeytes/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/animeytes/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/animeytes/src/eu/kanade/tachiyomi/animeextension/es/animeytes/AnimeYTES.kt create mode 100644 src/es/asialiveaction/build.gradle create mode 100644 src/es/asialiveaction/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/asialiveaction/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/asialiveaction/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/asialiveaction/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/asialiveaction/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/asialiveaction/src/eu/kanade/tachiyomi/animeextension/es/asialiveaction/AsiaLiveAction.kt create mode 100644 src/es/asialiveaction/src/eu/kanade/tachiyomi/animeextension/es/asialiveaction/extractors/VidGuardExtractor.kt create mode 100644 src/es/beatzanime/build.gradle create mode 100644 src/es/beatzanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/beatzanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/beatzanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/beatzanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/beatzanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/beatzanime/src/eu/kanade/tachiyomi/animeextension/es/beatzanime/BeatZAnime.kt create mode 100644 src/es/beatzanime/src/eu/kanade/tachiyomi/animeextension/es/beatzanime/Filters.kt create mode 100644 src/es/cuevana/build.gradle create mode 100644 src/es/cuevana/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/cuevana/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/cuevana/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/cuevana/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/cuevana/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/cuevana/src/eu/kanade/tachiyomi/animeextension/es/cuevana/CuevanaCh.kt create mode 100644 src/es/cuevana/src/eu/kanade/tachiyomi/animeextension/es/cuevana/CuevanaEu.kt create mode 100644 src/es/cuevana/src/eu/kanade/tachiyomi/animeextension/es/cuevana/CuevanaFactory.kt create mode 100644 src/es/cuevana/src/eu/kanade/tachiyomi/animeextension/es/cuevana/models/AnimeEpisodesList.kt create mode 100644 src/es/cuevana/src/eu/kanade/tachiyomi/animeextension/es/cuevana/models/PopularAnimeList.kt create mode 100644 src/es/doramasflix/build.gradle create mode 100644 src/es/doramasflix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/doramasflix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/doramasflix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/doramasflix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/doramasflix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/doramasflix/src/eu/kanade/tachiyomi/animeextension/es/doramasflix/DataModel.kt create mode 100644 src/es/doramasflix/src/eu/kanade/tachiyomi/animeextension/es/doramasflix/Doramasflix.kt create mode 100644 src/es/doramasyt/build.gradle create mode 100644 src/es/doramasyt/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/doramasyt/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/doramasyt/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/doramasyt/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/doramasyt/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/doramasyt/src/eu/kanade/tachiyomi/animeextension/es/doramasyt/Doramasyt.kt create mode 100644 src/es/doramasyt/src/eu/kanade/tachiyomi/animeextension/es/doramasyt/extractors/SolidFilesExtractor.kt create mode 100644 src/es/ennovelas/build.gradle create mode 100644 src/es/ennovelas/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/ennovelas/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/ennovelas/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/ennovelas/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/ennovelas/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/ennovelas/src/eu/kanade/tachiyomi/animeextension/es/ennovelas/EnNovelas.kt create mode 100644 src/es/fanpelis/build.gradle create mode 100644 src/es/fanpelis/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/fanpelis/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/fanpelis/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/fanpelis/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/fanpelis/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/fanpelis/src/eu/kanade/tachiyomi/animeextension/es/fanpelis/FanPelis.kt create mode 100644 src/es/gnula/build.gradle create mode 100644 src/es/gnula/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/gnula/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/gnula/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/gnula/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/gnula/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/gnula/src/eu/kanade/tachiyomi/animeextension/es/gnula/DataModel.kt create mode 100644 src/es/gnula/src/eu/kanade/tachiyomi/animeextension/es/gnula/Gnula.kt create mode 100644 src/es/hackstore/build.gradle create mode 100644 src/es/hackstore/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/hackstore/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/hackstore/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/hackstore/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/hackstore/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/hackstore/src/eu/kanade/tachiyomi/animeextension/es/hackstore/Hackstore.kt create mode 100644 src/es/hackstore/src/eu/kanade/tachiyomi/animeextension/es/hackstore/HackstoreUrlActivity.kt create mode 100644 src/es/hentaijk/build.gradle create mode 100644 src/es/hentaijk/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/hentaijk/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/hentaijk/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/hentaijk/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/hentaijk/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/hentaijk/src/eu/kanade/tachiyomi/animeextension/es/hentaijk/Hentaijk.kt create mode 100644 src/es/hentaila/build.gradle create mode 100644 src/es/hentaila/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/hentaila/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/hentaila/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/hentaila/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/hentaila/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/hentaila/src/eu/kanade/tachiyomi/animeextension/es/hentaila/Hentaila.kt create mode 100644 src/es/hentaila/src/eu/kanade/tachiyomi/animeextension/es/hentaila/HentailaDto.kt create mode 100644 src/es/hentaitk/build.gradle create mode 100644 src/es/hentaitk/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/hentaitk/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/hentaitk/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/hentaitk/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/hentaitk/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/hentaitk/src/eu/kanade/tachiyomi/animeextension/es/hentaitk/Hentaitk.kt create mode 100644 src/es/jkanime/build.gradle create mode 100644 src/es/jkanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/jkanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/jkanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/jkanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/jkanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/jkanime/src/eu/kanade/tachiyomi/animeextension/es/jkanime/Jkanime.kt create mode 100644 src/es/jkanime/src/eu/kanade/tachiyomi/animeextension/es/jkanime/extractors/JkanimeExtractor.kt create mode 100644 src/es/jkhentai/build.gradle create mode 100644 src/es/jkhentai/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/jkhentai/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/jkhentai/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/jkhentai/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/jkhentai/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/jkhentai/src/eu/kanade/tachiyomi/animeextension/es/jkhentai/Jkhentai.kt create mode 100644 src/es/jkhentai/src/eu/kanade/tachiyomi/animeextension/es/jkhentai/extractors/SolidFilesExtractor.kt create mode 100644 src/es/lacartoons/build.gradle create mode 100644 src/es/lacartoons/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/lacartoons/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/lacartoons/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/lacartoons/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/lacartoons/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/lacartoons/src/eu/kanade/tachiyomi/animeextension/es/lacartoons/Lacartoons.kt create mode 100644 src/es/latanime/build.gradle create mode 100644 src/es/latanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/latanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/latanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/latanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/latanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/latanime/res/web_hi_res_512.png create mode 100644 src/es/latanime/src/eu/kanade/tachiyomi/animeextension/es/latanime/Latanime.kt create mode 100644 src/es/legionanime/build.gradle create mode 100644 src/es/legionanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/legionanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/legionanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/legionanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/legionanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/legionanime/src/eu/kanade/tachiyomi/animeextension/es/legionanime/LegionAnime.kt create mode 100644 src/es/legionanime/src/eu/kanade/tachiyomi/animeextension/es/legionanime/Utils.kt create mode 100644 src/es/legionanime/src/eu/kanade/tachiyomi/animeextension/es/legionanime/extractors/JkanimeExtractor.kt create mode 100644 src/es/legionanime/src/eu/kanade/tachiyomi/animeextension/es/legionanime/extractors/MediaFireExtractor.kt create mode 100644 src/es/locopelis/build.gradle create mode 100644 src/es/locopelis/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/locopelis/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/locopelis/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/locopelis/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/locopelis/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/locopelis/src/eu/kanade/tachiyomi/animeextension/es/locopelis/LocoPelis.kt create mode 100644 src/es/metroseries/build.gradle create mode 100644 src/es/metroseries/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/metroseries/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/metroseries/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/metroseries/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/metroseries/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/metroseries/src/eu/kanade/tachiyomi/animeextension/es/metroseries/MetroSeries.kt create mode 100644 src/es/monoschinos/build.gradle create mode 100644 src/es/monoschinos/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/monoschinos/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/monoschinos/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/monoschinos/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/monoschinos/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/monoschinos/src/eu/kanade/tachiyomi/animeextension/es/monoschinos/MonosChinos.kt create mode 100644 src/es/monoschinos/src/eu/kanade/tachiyomi/animeextension/es/monoschinos/extractors/SolidFilesExtractor.kt create mode 100644 src/es/mundodonghua/build.gradle create mode 100644 src/es/mundodonghua/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/mundodonghua/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/mundodonghua/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/mundodonghua/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/mundodonghua/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/mundodonghua/src/eu/kanade/tachiyomi/animeextension/es/mundodonghua/MundoDonghua.kt create mode 100644 src/es/mundodonghua/src/eu/kanade/tachiyomi/animeextension/es/mundodonghua/extractors/JsUnpacker.kt create mode 100644 src/es/mundodonghua/src/eu/kanade/tachiyomi/animeextension/es/mundodonghua/extractors/ProteaExtractor.kt create mode 100644 src/es/pelisflix/build.gradle create mode 100644 src/es/pelisflix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/pelisflix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/pelisflix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/pelisflix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/pelisflix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/pelisflix/src/eu/kanade/tachiyomi/animeextension/es/pelisflix/Pelisflix.kt create mode 100644 src/es/pelisflix/src/eu/kanade/tachiyomi/animeextension/es/pelisflix/PelisflixFactory.kt create mode 100644 src/es/pelisforte/build.gradle create mode 100644 src/es/pelisforte/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/pelisforte/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/pelisforte/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/pelisforte/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/pelisforte/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/pelisforte/src/eu/kanade/tachiyomi/animeextension/es/pelisforte/PelisForte.kt create mode 100644 src/es/pelisplushd/build.gradle create mode 100644 src/es/pelisplushd/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/pelisplushd/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/pelisplushd/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/pelisplushd/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/pelisplushd/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplushd.kt create mode 100644 src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/PelisplushdFactory.kt create mode 100644 src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusph.kt create mode 100644 src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/Pelisplusto.kt create mode 100644 src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/extractors/JsUnpacker.kt create mode 100644 src/es/pelisplushd/src/eu/kanade/tachiyomi/animeextension/es/pelisplushd/extractors/StreamHideExtractor.kt create mode 100644 src/es/tioanimeh/build.gradle create mode 100644 src/es/tioanimeh/res/mipmap-hdpi/ic_launcher.jpg create mode 100644 src/es/tioanimeh/res/mipmap-mdpi/ic_launcher.jpg create mode 100644 src/es/tioanimeh/res/mipmap-xhdpi/ic_launcher.jpg create mode 100644 src/es/tioanimeh/res/mipmap-xxhdpi/ic_launcher.jpg create mode 100644 src/es/tioanimeh/res/mipmap-xxxhdpi/ic_launcher.jpg create mode 100644 src/es/tioanimeh/src/eu/kanade/tachiyomi/animeextension/es/tioanimeh/TioanimeH.kt create mode 100644 src/es/tioanimeh/src/eu/kanade/tachiyomi/animeextension/es/tioanimeh/TioanimeHFactory.kt create mode 100644 src/es/tioanimeh/src/eu/kanade/tachiyomi/animeextension/es/tioanimeh/extractors/VidGuardExtractor.kt create mode 100644 src/es/tiodonghua/build.gradle create mode 100644 src/es/tiodonghua/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/es/tiodonghua/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/es/tiodonghua/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/es/tiodonghua/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/es/tiodonghua/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/es/tiodonghua/src/eu/kanade/tachiyomi/animeextension/es/tiodonghua/Tiodonghua.kt create mode 100644 src/fr/animesama/AndroidManifest.xml create mode 100644 src/fr/animesama/build.gradle create mode 100644 src/fr/animesama/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/animesama/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/animesama/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/animesama/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/animesama/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/animesama/res/web_hi_res_512.png create mode 100644 src/fr/animesama/src/eu/kanade/tachiyomi/animeextension/fr/animesama/AnimeSama.kt create mode 100644 src/fr/animesama/src/eu/kanade/tachiyomi/animeextension/fr/animesama/AnimeSamaFilters.kt create mode 100644 src/fr/animesama/src/eu/kanade/tachiyomi/animeextension/fr/animesama/AnimeSamaUrlActivity.kt create mode 100644 src/fr/animevostfr/build.gradle create mode 100644 src/fr/animevostfr/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/animevostfr/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/animevostfr/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/animevostfr/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/animevostfr/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/animevostfr/res/web_hi_res_512.png create mode 100644 src/fr/animevostfr/src/eu/kanade/tachiyomi/animeextension/fr/animevostfr/AnimeVostFr.kt create mode 100644 src/fr/animevostfr/src/eu/kanade/tachiyomi/animeextension/fr/animevostfr/CloudFlareInterceptor.kt create mode 100644 src/fr/animevostfr/src/eu/kanade/tachiyomi/animeextension/fr/animevostfr/extractors/CdopeExtractor.kt create mode 100644 src/fr/anisama/AndroidManifest.xml create mode 100644 src/fr/anisama/build.gradle create mode 100644 src/fr/anisama/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/anisama/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/anisama/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/anisama/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/anisama/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/anisama/src/eu/kanade/tachiyomi/animeextension/fr/anisama/AniSama.kt create mode 100644 src/fr/anisama/src/eu/kanade/tachiyomi/animeextension/fr/anisama/AniSamaFilters.kt create mode 100644 src/fr/anisama/src/eu/kanade/tachiyomi/animeextension/fr/anisama/AniSamaUrlActivity.kt create mode 100644 src/fr/anisama/src/eu/kanade/tachiyomi/animeextension/fr/anisama/extractors/VidCdnExtractor.kt create mode 100644 src/fr/empirestreaming/build.gradle create mode 100644 src/fr/empirestreaming/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/empirestreaming/res/mipmap-hdpi/ic_launcher_adaptive_back.png create mode 100644 src/fr/empirestreaming/res/mipmap-hdpi/ic_launcher_adaptive_fore.png create mode 100644 src/fr/empirestreaming/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/empirestreaming/res/mipmap-mdpi/ic_launcher_adaptive_back.png create mode 100644 src/fr/empirestreaming/res/mipmap-mdpi/ic_launcher_adaptive_fore.png create mode 100644 src/fr/empirestreaming/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/empirestreaming/res/mipmap-xhdpi/ic_launcher_adaptive_back.png create mode 100644 src/fr/empirestreaming/res/mipmap-xhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/fr/empirestreaming/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/empirestreaming/res/mipmap-xxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/fr/empirestreaming/res/mipmap-xxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/fr/empirestreaming/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/empirestreaming/res/mipmap-xxxhdpi/ic_launcher_adaptive_back.png create mode 100644 src/fr/empirestreaming/res/mipmap-xxxhdpi/ic_launcher_adaptive_fore.png create mode 100644 src/fr/empirestreaming/src/eu/kanade/tachiyomi/animeextension/fr/empirestreaming/EmpireStreaming.kt create mode 100644 src/fr/empirestreaming/src/eu/kanade/tachiyomi/animeextension/fr/empirestreaming/dto/EmpireStreamingDto.kt create mode 100644 src/fr/empirestreaming/src/eu/kanade/tachiyomi/animeextension/fr/empirestreaming/extractors/EplayerExtractor.kt create mode 100644 src/fr/franime/AndroidManifest.xml create mode 100644 src/fr/franime/build.gradle create mode 100644 src/fr/franime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/franime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/franime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/franime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/franime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnime.kt create mode 100644 src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/FrAnimeUrlActivity.kt create mode 100644 src/fr/franime/src/eu/kanade/tachiyomi/animeextension/fr/franime/dto/FrAnimeDto.kt create mode 100644 src/fr/frenchanime/build.gradle create mode 100644 src/fr/frenchanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/frenchanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/frenchanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/frenchanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/frenchanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/frenchanime/res/web_hi_res_512.png create mode 100644 src/fr/frenchanime/src/eu/kanade/tachiyomi/animeextension/fr/frenchanime/FrenchAnime.kt create mode 100644 src/fr/hds/build.gradle create mode 100644 src/fr/hds/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/hds/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/hds/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/hds/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/hds/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/hds/src/eu/kanade/tachiyomi/animeextension/fr/hds/Hds.kt create mode 100644 src/fr/jetanime/build.gradle create mode 100644 src/fr/jetanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/jetanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/jetanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/jetanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/jetanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/jetanime/res/web_hi_res_512.png create mode 100644 src/fr/jetanime/src/eu/kanade/tachiyomi/animeextension/fr/jetanime/JetAnime.kt create mode 100644 src/fr/jetanime/src/eu/kanade/tachiyomi/animeextension/fr/jetanime/extractors/HdsplayExtractor.kt create mode 100644 src/fr/jetanime/src/eu/kanade/tachiyomi/animeextension/fr/jetanime/extractors/SentinelExtractor.kt create mode 100644 src/fr/mykdrama/build.gradle create mode 100644 src/fr/mykdrama/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/mykdrama/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/mykdrama/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/mykdrama/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/mykdrama/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/mykdrama/res/web_hi_res_512.png create mode 100644 src/fr/mykdrama/src/eu/kanade/tachiyomi/animeextension/fr/mykdrama/MyKdrama.kt create mode 100644 src/fr/mykdrama/src/eu/kanade/tachiyomi/animeextension/fr/mykdrama/MyKdramaFilters.kt create mode 100644 src/fr/nekosama/build.gradle create mode 100644 src/fr/nekosama/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/nekosama/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/nekosama/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/nekosama/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/nekosama/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/nekosama/src/eu/kanade/tachiyomi/animeextension/fr/nekosama/NekoSama.kt create mode 100644 src/fr/otakufr/build.gradle create mode 100644 src/fr/otakufr/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/otakufr/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/otakufr/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/otakufr/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/otakufr/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/otakufr/res/web_hi_res_512.png create mode 100644 src/fr/otakufr/src/eu/kanade/tachiyomi/animeextension/fr/otakufr/OtakuFR.kt create mode 100644 src/fr/otakufr/src/eu/kanade/tachiyomi/animeextension/fr/otakufr/extractors/UpstreamExtractor.kt create mode 100644 src/fr/otakufr/src/eu/kanade/tachiyomi/animeextension/fr/otakufr/extractors/VidbmExtractor.kt create mode 100644 src/fr/voircartoon/build.gradle create mode 100644 src/fr/voircartoon/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/voircartoon/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/voircartoon/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/voircartoon/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/voircartoon/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/voircartoon/src/eu/kanade/tachiyomi/animeextension/fr/voircartoon/VoirCartoon.kt create mode 100644 src/fr/voircartoon/src/eu/kanade/tachiyomi/animeextension/fr/voircartoon/VoirCartoonFilters.kt create mode 100644 src/fr/voircartoon/src/eu/kanade/tachiyomi/animeextension/fr/voircartoon/extractors/ComedyShowExtractor.kt create mode 100644 src/fr/vostfree/build.gradle create mode 100644 src/fr/vostfree/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/vostfree/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/vostfree/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/vostfree/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/vostfree/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/vostfree/src/eu/kanade/tachiyomi/animeextension/fr/vostfree/Vostfree.kt create mode 100644 src/fr/wiflix/build.gradle create mode 100644 src/fr/wiflix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/fr/wiflix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/fr/wiflix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/fr/wiflix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/fr/wiflix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/fr/wiflix/res/web_hi_res_512.png create mode 100644 src/fr/wiflix/src/eu/kanade/tachiyomi/animeextension/fr/wiflix/Wiflix.kt create mode 100644 src/hi/animesaga/build.gradle create mode 100644 src/hi/animesaga/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/hi/animesaga/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/hi/animesaga/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/hi/animesaga/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/hi/animesaga/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/hi/animesaga/src/eu/kanade/tachiyomi/animeextension/hi/animesaga/AnimeSAGA.kt create mode 100644 src/hi/yomovies/build.gradle create mode 100644 src/hi/yomovies/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/hi/yomovies/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/hi/yomovies/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/hi/yomovies/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/hi/yomovies/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/hi/yomovies/res/web_hi_res_512.png create mode 100644 src/hi/yomovies/src/eu/kanade/tachiyomi/animeextension/hi/yomovies/YoMovies.kt create mode 100644 src/hi/yomovies/src/eu/kanade/tachiyomi/animeextension/hi/yomovies/extractors/MinoplresExtractor.kt create mode 100644 src/hi/yomovies/src/eu/kanade/tachiyomi/animeextension/hi/yomovies/extractors/MovembedExtractor.kt create mode 100644 src/hi/yomovies/src/eu/kanade/tachiyomi/animeextension/hi/yomovies/extractors/SpeedostreamExtractor.kt create mode 100644 src/id/animeindo/build.gradle create mode 100644 src/id/animeindo/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/animeindo/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/animeindo/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/animeindo/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/animeindo/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/animeindo/src/eu/kanade/tachiyomi/animeextension/id/animeindo/AnimeIndo.kt create mode 100644 src/id/animeindo/src/eu/kanade/tachiyomi/animeextension/id/animeindo/AnimeIndoFilters.kt create mode 100644 src/id/kuramanime/build.gradle create mode 100644 src/id/kuramanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/kuramanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/kuramanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/kuramanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/kuramanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/kuramanime/res/web_hi_res_512.png create mode 100644 src/id/kuramanime/src/eu/kanade/tachiyomi/animeextension/id/kuramanime/Kuramanime.kt create mode 100644 src/id/kuronime/build.gradle create mode 100644 src/id/kuronime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/kuronime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/kuronime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/kuronime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/kuronime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/kuronime/res/web_hi_res_512.png create mode 100644 src/id/kuronime/src/eu/kanade/tachiyomi/animeextension/id/kuronime/Kuronime.kt create mode 100644 src/id/kuronime/src/eu/kanade/tachiyomi/animeextension/id/kuronime/extractors/AnimekuExtractor.kt create mode 100644 src/id/kuronime/src/eu/kanade/tachiyomi/animeextension/id/kuronime/extractors/HxFileExtractor.kt create mode 100644 src/id/kuronime/src/eu/kanade/tachiyomi/animeextension/id/kuronime/extractors/LinkBoxExtractor.kt create mode 100644 src/id/minioppai/build.gradle create mode 100644 src/id/minioppai/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/minioppai/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/minioppai/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/minioppai/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/minioppai/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/minioppai/res/web_hi_res_512.png create mode 100644 src/id/minioppai/src/eu/kanade/tachiyomi/animeextension/id/minioppai/MiniOppai.kt create mode 100644 src/id/minioppai/src/eu/kanade/tachiyomi/animeextension/id/minioppai/MiniOppaiFilters.kt create mode 100644 src/id/minioppai/src/eu/kanade/tachiyomi/animeextension/id/minioppai/extractors/MiniOppaiExtractor.kt create mode 100644 src/id/neonime/build.gradle create mode 100644 src/id/neonime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/neonime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/neonime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/neonime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/neonime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/neonime/res/web_hi_res_128.png create mode 100644 src/id/neonime/src/eu/kanade/tachiyomi/animeextension/id/neonime/NeoNime.kt create mode 100644 src/id/neonime/src/eu/kanade/tachiyomi/animeextension/id/neonime/extractors/LinkBoxExtractor.kt create mode 100644 src/id/nimegami/AndroidManifest.xml create mode 100644 src/id/nimegami/build.gradle create mode 100644 src/id/nimegami/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/nimegami/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/nimegami/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/nimegami/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/nimegami/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/nimegami/src/eu/kanade/tachiyomi/animeextension/id/nimegami/NimeGami.kt create mode 100644 src/id/nimegami/src/eu/kanade/tachiyomi/animeextension/id/nimegami/NimeGamiUrlActivity.kt create mode 100644 src/id/oploverz/build.gradle create mode 100644 src/id/oploverz/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/oploverz/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/oploverz/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/oploverz/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/oploverz/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/oploverz/res/web_hi_res_512.png create mode 100644 src/id/oploverz/src/eu/kanade/tachiyomi/animeextension/id/oploverz/Oploverz.kt create mode 100644 src/id/oploverz/src/eu/kanade/tachiyomi/animeextension/id/oploverz/OploverzFilters.kt create mode 100644 src/id/otakudesu/build.gradle create mode 100644 src/id/otakudesu/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/otakudesu/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/otakudesu/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/otakudesu/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/otakudesu/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/otakudesu/res/web_hi_res_512.png create mode 100644 src/id/otakudesu/src/eu/kanade/tachiyomi/animeextension/id/otakudesu/OtakuDesu.kt create mode 100644 src/id/samehadaku/build.gradle create mode 100644 src/id/samehadaku/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/id/samehadaku/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/id/samehadaku/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/id/samehadaku/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/id/samehadaku/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/id/samehadaku/res/web_hi_res_512.png create mode 100644 src/id/samehadaku/src/eu/kanade/tachiyomi/animeextension/id/samehadaku/Samehadaku.kt create mode 100644 src/id/samehadaku/src/eu/kanade/tachiyomi/animeextension/id/samehadaku/SamehadakuFilters.kt create mode 100644 src/it/animesaturn/build.gradle create mode 100644 src/it/animesaturn/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/it/animesaturn/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/it/animesaturn/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/it/animesaturn/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/it/animesaturn/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/it/animesaturn/src/eu/kanade/tachiyomi/animeextension/it/animesaturn/AnimeSaturn.kt create mode 100644 src/it/animeunity/build.gradle create mode 100644 src/it/animeunity/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/it/animeunity/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/it/animeunity/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/it/animeunity/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/it/animeunity/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/it/animeunity/res/web_hi_res_512.png create mode 100644 src/it/animeunity/src/eu/kanade/tachiyomi/animeextension/it/animeunity/AnimeUnity.kt create mode 100644 src/it/animeunity/src/eu/kanade/tachiyomi/animeextension/it/animeunity/AnimeUnityDto.kt create mode 100644 src/it/animeunity/src/eu/kanade/tachiyomi/animeextension/it/animeunity/AnimeUnityFilters.kt create mode 100644 src/it/animeworld/build.gradle create mode 100644 src/it/animeworld/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/it/animeworld/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/it/animeworld/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/it/animeworld/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/it/animeworld/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/it/animeworld/res/play_store_512.png create mode 100644 src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/ANIMEWORLD.kt create mode 100644 src/it/animeworld/src/eu/kanade/tachiyomi/animeextension/it/animeworld/extractors/StreamHideExtractor.kt create mode 100644 src/it/aniplay/AndroidManifest.xml create mode 100644 src/it/aniplay/build.gradle create mode 100644 src/it/aniplay/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/it/aniplay/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/it/aniplay/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/it/aniplay/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/it/aniplay/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/AniPlay.kt create mode 100644 src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/AniPlayFilters.kt create mode 100644 src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/AniPlayUrlActivity.kt create mode 100644 src/it/aniplay/src/eu/kanade/tachiyomi/animeextension/it/aniplay/dto/AniPlayDto.kt create mode 100644 src/it/hentaisaturn/build.gradle create mode 100644 src/it/hentaisaturn/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/it/hentaisaturn/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/it/hentaisaturn/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/it/hentaisaturn/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/it/hentaisaturn/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/it/hentaisaturn/src/eu/kanade/tachiyomi/animeextension/it/hentaisaturn/HentaiSaturn.kt create mode 100644 src/it/streamingcommunity/build.gradle create mode 100644 src/it/streamingcommunity/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/it/streamingcommunity/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/it/streamingcommunity/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/it/streamingcommunity/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/it/streamingcommunity/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/it/streamingcommunity/res/web_hi_res_512.png create mode 100644 src/it/streamingcommunity/src/eu/kanade/tachiyomi/animeextension/it/streamingcommunity/StreamingCommunity.kt create mode 100644 src/it/streamingcommunity/src/eu/kanade/tachiyomi/animeextension/it/streamingcommunity/StreamingCommunityDto.kt create mode 100644 src/it/toonitalia/build.gradle create mode 100644 src/it/toonitalia/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/it/toonitalia/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/it/toonitalia/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/it/toonitalia/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/it/toonitalia/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/it/toonitalia/res/web_hi_res_512.png create mode 100644 src/it/toonitalia/src/eu/kanade/tachiyomi/animeextension/it/toonitalia/Toonitalia.kt create mode 100644 src/it/toonitalia/src/eu/kanade/tachiyomi/animeextension/it/toonitalia/extractors/MaxStreamExtractor.kt create mode 100644 src/it/toonitalia/src/eu/kanade/tachiyomi/animeextension/it/toonitalia/extractors/StreamZExtractor.kt create mode 100644 src/it/vvvvid/build.gradle create mode 100644 src/it/vvvvid/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/it/vvvvid/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/it/vvvvid/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/it/vvvvid/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/it/vvvvid/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/it/vvvvid/res/web_hi_res_512.png create mode 100644 src/it/vvvvid/src/eu/kanade/tachiyomi/animeextension/it/vvvvid/VVVVID.kt create mode 100644 src/it/vvvvid/src/eu/kanade/tachiyomi/animeextension/it/vvvvid/VVVVIDDto.kt create mode 100644 src/ko/aniweek/build.gradle create mode 100644 src/ko/aniweek/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ko/aniweek/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ko/aniweek/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ko/aniweek/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ko/aniweek/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ko/aniweek/res/web_hi_res_512.png create mode 100644 src/ko/aniweek/src/eu/kanade/tachiyomi/animeextension/ko/aniweek/Aniweek.kt create mode 100644 src/pl/desuonline/build.gradle create mode 100644 src/pl/desuonline/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pl/desuonline/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pl/desuonline/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pl/desuonline/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pl/desuonline/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pl/desuonline/res/web_hi_res_512.png create mode 100644 src/pl/desuonline/src/eu/kanade/tachiyomi/animeextension/pl/desuonline/DesuOnline.kt create mode 100644 src/pl/desuonline/src/eu/kanade/tachiyomi/animeextension/pl/desuonline/extractors/CDAExtractor.kt create mode 100644 src/pl/ogladajanime/build.gradle create mode 100644 src/pl/ogladajanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pl/ogladajanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pl/ogladajanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pl/ogladajanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pl/ogladajanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pl/ogladajanime/src/eu/kanade/tachiyomi/animeextension/pl/ogladajanime/OgladajAnime.kt create mode 100644 src/pl/wbijam/build.gradle create mode 100644 src/pl/wbijam/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pl/wbijam/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pl/wbijam/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pl/wbijam/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pl/wbijam/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pl/wbijam/res/web_hi_res_512.png create mode 100644 src/pl/wbijam/src/eu/kanade/tachiyomi/animeextension/pl/wbijam/Wbijam.kt create mode 100644 src/pl/wbijam/src/eu/kanade/tachiyomi/animeextension/pl/wbijam/extractors/CdaPlExtractor.kt create mode 100644 src/pl/wbijam/src/eu/kanade/tachiyomi/animeextension/pl/wbijam/extractors/VkExtractor.kt create mode 100644 src/pt/anidong/AndroidManifest.xml create mode 100644 src/pt/anidong/build.gradle create mode 100644 src/pt/anidong/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/anidong/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/anidong/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/anidong/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/anidong/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/anidong/src/eu/kanade/tachiyomi/animeextension/pt/anidong/AniDong.kt create mode 100644 src/pt/anidong/src/eu/kanade/tachiyomi/animeextension/pt/anidong/AniDongFilters.kt create mode 100644 src/pt/anidong/src/eu/kanade/tachiyomi/animeextension/pt/anidong/AniDongUrlActivity.kt create mode 100644 src/pt/anidong/src/eu/kanade/tachiyomi/animeextension/pt/anidong/dto/AniDongDto.kt create mode 100644 src/pt/animefire/AndroidManifest.xml create mode 100644 src/pt/animefire/build.gradle create mode 100644 src/pt/animefire/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animefire/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animefire/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animefire/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animefire/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animefire/src/eu/kanade/tachiyomi/animeextension/pt/animefire/AFFilters.kt create mode 100644 src/pt/animefire/src/eu/kanade/tachiyomi/animeextension/pt/animefire/AFUrlActivity.kt create mode 100644 src/pt/animefire/src/eu/kanade/tachiyomi/animeextension/pt/animefire/AnimeFire.kt create mode 100644 src/pt/animefire/src/eu/kanade/tachiyomi/animeextension/pt/animefire/dto/AnimeFireDto.kt create mode 100644 src/pt/animefire/src/eu/kanade/tachiyomi/animeextension/pt/animefire/extractors/AnimeFireExtractor.kt create mode 100644 src/pt/animefire/src/eu/kanade/tachiyomi/animeextension/pt/animefire/extractors/IframeExtractor.kt create mode 100644 src/pt/animeplayer/build.gradle create mode 100644 src/pt/animeplayer/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animeplayer/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animeplayer/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animeplayer/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animeplayer/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animeplayer/src/eu/kanade/tachiyomi/animeextension/pt/animeplayer/AnimePlayer.kt create mode 100644 src/pt/animescx/AndroidManifest.xml create mode 100644 src/pt/animescx/build.gradle create mode 100644 src/pt/animescx/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animescx/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animescx/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animescx/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animescx/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animescx/src/eu/kanade/tachiyomi/animeextension/pt/animescx/AnimesCX.kt create mode 100644 src/pt/animescx/src/eu/kanade/tachiyomi/animeextension/pt/animescx/AnimesCXUrlActivity.kt create mode 100644 src/pt/animesdigital/AndroidManifest.xml create mode 100644 src/pt/animesdigital/build.gradle create mode 100644 src/pt/animesdigital/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animesdigital/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animesdigital/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animesdigital/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animesdigital/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animesdigital/src/eu/kanade/tachiyomi/animeextension/pt/animesdigital/AnimesDigital.kt create mode 100644 src/pt/animesdigital/src/eu/kanade/tachiyomi/animeextension/pt/animesdigital/AnimesDigitalFilters.kt create mode 100644 src/pt/animesdigital/src/eu/kanade/tachiyomi/animeextension/pt/animesdigital/AnimesDigitalUrlActivity.kt create mode 100644 src/pt/animesdigital/src/eu/kanade/tachiyomi/animeextension/pt/animesdigital/extractors/ProtectorExtractor.kt create mode 100644 src/pt/animesdigital/src/eu/kanade/tachiyomi/animeextension/pt/animesdigital/extractors/ScriptExtractor.kt create mode 100644 src/pt/animesfoxbr/build.gradle create mode 100644 src/pt/animesfoxbr/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animesfoxbr/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animesfoxbr/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animesfoxbr/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animesfoxbr/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animesfoxbr/src/eu/kanade/tachiyomi/animeextension/pt/animesfoxbr/AnimesFoxBR.kt create mode 100644 src/pt/animesgames/AndroidManifest.xml create mode 100644 src/pt/animesgames/build.gradle create mode 100644 src/pt/animesgames/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animesgames/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animesgames/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animesgames/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animesgames/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animesgames/src/eu/kanade/tachiyomi/animeextension/pt/animesgames/AnimesGames.kt create mode 100644 src/pt/animesgames/src/eu/kanade/tachiyomi/animeextension/pt/animesgames/AnimesGamesFilters.kt create mode 100644 src/pt/animesgames/src/eu/kanade/tachiyomi/animeextension/pt/animesgames/AnimesGamesUrlActivity.kt create mode 100644 src/pt/animesgratis/build.gradle create mode 100644 src/pt/animesgratis/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animesgratis/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animesgratis/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animesgratis/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animesgratis/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animesgratis/src/eu/kanade/tachiyomi/animeextension/pt/animesgratis/AnimesOnline.kt create mode 100644 src/pt/animesgratis/src/eu/kanade/tachiyomi/animeextension/pt/animesgratis/extractors/AnimesOnlinePlayerExtractor.kt create mode 100644 src/pt/animesgratis/src/eu/kanade/tachiyomi/animeextension/pt/animesgratis/extractors/RuplayExtractor.kt create mode 100644 src/pt/animesroll/AndroidManifest.xml create mode 100644 src/pt/animesroll/build.gradle create mode 100644 src/pt/animesroll/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animesroll/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animesroll/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animesroll/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animesroll/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animesroll/src/eu/kanade/tachiyomi/animeextension/pt/animesroll/AnimesROLL.kt create mode 100644 src/pt/animesroll/src/eu/kanade/tachiyomi/animeextension/pt/animesroll/AnimesROLLUrlActivity.kt create mode 100644 src/pt/animesroll/src/eu/kanade/tachiyomi/animeextension/pt/animesroll/dto/AnimesROLLDto.kt create mode 100644 src/pt/animestc/AndroidManifest.xml create mode 100644 src/pt/animestc/build.gradle create mode 100644 src/pt/animestc/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animestc/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animestc/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animestc/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animestc/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animestc/src/eu/kanade/tachiyomi/animeextension/pt/animestc/ATCFilters.kt create mode 100644 src/pt/animestc/src/eu/kanade/tachiyomi/animeextension/pt/animestc/AnimesTC.kt create mode 100644 src/pt/animestc/src/eu/kanade/tachiyomi/animeextension/pt/animestc/AnimesTCUrlActivity.kt create mode 100644 src/pt/animestc/src/eu/kanade/tachiyomi/animeextension/pt/animestc/dto/AnimesTCDto.kt create mode 100644 src/pt/animestc/src/eu/kanade/tachiyomi/animeextension/pt/animestc/extractors/LinkBypasser.kt create mode 100644 src/pt/animestc/src/eu/kanade/tachiyomi/animeextension/pt/animestc/extractors/SendcmExtractor.kt create mode 100644 src/pt/animeszone/build.gradle create mode 100644 src/pt/animeszone/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/animeszone/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/animeszone/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/animeszone/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/animeszone/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/animeszone/res/web_hi_res_512.png create mode 100644 src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AnimesZone.kt create mode 100644 src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/AnimesZoneFilters.kt create mode 100644 src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/extractors/BloggerJWPlayerExtractor.kt create mode 100644 src/pt/animeszone/src/eu/kanade/tachiyomi/animeextension/pt/animeszone/extractors/PlaylistExtractor.kt create mode 100644 src/pt/anitube/build.gradle create mode 100644 src/pt/anitube/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/anitube/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/anitube/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/anitube/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/anitube/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/anitube/res/web_hi_res_512.png create mode 100644 src/pt/anitube/src/eu/kanade/tachiyomi/animeextension/pt/anitube/Anitube.kt create mode 100644 src/pt/anitube/src/eu/kanade/tachiyomi/animeextension/pt/anitube/AnitubeFilters.kt create mode 100644 src/pt/anitube/src/eu/kanade/tachiyomi/animeextension/pt/anitube/extractors/AnitubeExtractor.kt create mode 100644 src/pt/betteranime/AndroidManifest.xml create mode 100644 src/pt/betteranime/build.gradle create mode 100644 src/pt/betteranime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/betteranime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/betteranime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/betteranime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/betteranime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAFilters.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUrlActivity.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BAUtils.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/BetterAnime.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/LoginInterceptor.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/RecaptchaV3Bypasser.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/dto/BetterAnimeDto.kt create mode 100644 src/pt/betteranime/src/eu/kanade/tachiyomi/animeextension/pt/betteranime/extractors/BetterAnimeExtractor.kt create mode 100644 src/pt/donghuanosekai/AndroidManifest.xml create mode 100644 src/pt/donghuanosekai/build.gradle create mode 100644 src/pt/donghuanosekai/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/donghuanosekai/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/donghuanosekai/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/donghuanosekai/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/donghuanosekai/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/donghuanosekai/src/eu/kanade/tachiyomi/animeextension/pt/donghuanosekai/DonghuaNoSekai.kt create mode 100644 src/pt/donghuanosekai/src/eu/kanade/tachiyomi/animeextension/pt/donghuanosekai/DonghuaNoSekaiFilters.kt create mode 100644 src/pt/donghuanosekai/src/eu/kanade/tachiyomi/animeextension/pt/donghuanosekai/DonghuaNoSekaiUrlActivity.kt create mode 100644 src/pt/donghuanosekai/src/eu/kanade/tachiyomi/animeextension/pt/donghuanosekai/extractors/DonghuaNoSekaiExtractor.kt create mode 100644 src/pt/doramogo/AndroidManifest.xml create mode 100644 src/pt/doramogo/build.gradle create mode 100644 src/pt/doramogo/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/doramogo/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/doramogo/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/doramogo/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/doramogo/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/doramogo/src/eu/kanade/tachiyomi/animeextension/pt/doramogo/Doramogo.kt create mode 100644 src/pt/doramogo/src/eu/kanade/tachiyomi/animeextension/pt/doramogo/DoramogoFilters.kt create mode 100644 src/pt/doramogo/src/eu/kanade/tachiyomi/animeextension/pt/doramogo/DoramogoUrlActivity.kt create mode 100644 src/pt/doramogo/src/eu/kanade/tachiyomi/animeextension/pt/doramogo/extractors/DoramogoExtractor.kt create mode 100644 src/pt/flixei/AndroidManifest.xml create mode 100644 src/pt/flixei/build.gradle create mode 100644 src/pt/flixei/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/flixei/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/flixei/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/flixei/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/flixei/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/flixei/src/eu/kanade/tachiyomi/animeextension/pt/flixei/Flixei.kt create mode 100644 src/pt/flixei/src/eu/kanade/tachiyomi/animeextension/pt/flixei/FlixeiUrlActivity.kt create mode 100644 src/pt/flixei/src/eu/kanade/tachiyomi/animeextension/pt/flixei/dto/FlixeiDto.kt create mode 100644 src/pt/goanimes/build.gradle create mode 100644 src/pt/goanimes/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/goanimes/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/goanimes/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/goanimes/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/goanimes/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/goanimes/src/eu/kanade/tachiyomi/animeextension/pt/goanimes/GoAnimes.kt create mode 100644 src/pt/goanimes/src/eu/kanade/tachiyomi/animeextension/pt/goanimes/extractors/BloggerJWPlayerExtractor.kt create mode 100644 src/pt/goanimes/src/eu/kanade/tachiyomi/animeextension/pt/goanimes/extractors/GoAnimesExtractor.kt create mode 100644 src/pt/goanimes/src/eu/kanade/tachiyomi/animeextension/pt/goanimes/extractors/JsDecoder.kt create mode 100644 src/pt/goanimes/src/eu/kanade/tachiyomi/animeextension/pt/goanimes/extractors/LinkfunBypasser.kt create mode 100644 src/pt/goanimes/src/eu/kanade/tachiyomi/animeextension/pt/goanimes/extractors/PlaylistExtractor.kt create mode 100644 src/pt/hentaistube/AndroidManifest.xml create mode 100644 src/pt/hentaistube/build.gradle create mode 100644 src/pt/hentaistube/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/hentaistube/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/hentaistube/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/hentaistube/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/hentaistube/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/hentaistube/src/eu/kanade/tachiyomi/animeextension/pt/hentaistube/HentaisTube.kt create mode 100644 src/pt/hentaistube/src/eu/kanade/tachiyomi/animeextension/pt/hentaistube/HentaisTubeFilters.kt create mode 100644 src/pt/hentaistube/src/eu/kanade/tachiyomi/animeextension/pt/hentaistube/HentaisTubeUrlActivity.kt create mode 100644 src/pt/hentaistube/src/eu/kanade/tachiyomi/animeextension/pt/hentaistube/dto/HentaisTubeDto.kt create mode 100644 src/pt/hinatasoul/AndroidManifest.xml create mode 100644 src/pt/hinatasoul/build.gradle create mode 100644 src/pt/hinatasoul/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/hinatasoul/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/hinatasoul/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/hinatasoul/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/hinatasoul/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/hinatasoul/src/eu/kanade/tachiyomi/animeextension/pt/hinatasoul/HSUrlActivity.kt create mode 100644 src/pt/hinatasoul/src/eu/kanade/tachiyomi/animeextension/pt/hinatasoul/HinataSoul.kt create mode 100644 src/pt/hinatasoul/src/eu/kanade/tachiyomi/animeextension/pt/hinatasoul/extractors/HinataSoulExtractor.kt create mode 100644 src/pt/listadeanimes/build.gradle create mode 100644 src/pt/listadeanimes/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/listadeanimes/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/listadeanimes/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/listadeanimes/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/listadeanimes/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/listadeanimes/src/eu/kanade/tachiyomi/animeextension/pt/listadeanimes/ListaDeAnimes.kt create mode 100644 src/pt/megaflix/AndroidManifest.xml create mode 100644 src/pt/megaflix/build.gradle create mode 100644 src/pt/megaflix/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/megaflix/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/megaflix/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/megaflix/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/megaflix/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/megaflix/src/eu/kanade/tachiyomi/animeextension/pt/megaflix/Megaflix.kt create mode 100644 src/pt/megaflix/src/eu/kanade/tachiyomi/animeextension/pt/megaflix/MegaflixFilters.kt create mode 100644 src/pt/megaflix/src/eu/kanade/tachiyomi/animeextension/pt/megaflix/MegaflixUrlActivity.kt create mode 100644 src/pt/megaflix/src/eu/kanade/tachiyomi/animeextension/pt/megaflix/extractors/MegaflixExtractor.kt create mode 100644 src/pt/muitohentai/build.gradle create mode 100644 src/pt/muitohentai/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/muitohentai/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/muitohentai/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/muitohentai/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/muitohentai/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/muitohentai/src/eu/kanade/tachiyomi/animeextension/pt/muitohentai/MuitoHentai.kt create mode 100644 src/pt/pifansubs/build.gradle create mode 100644 src/pt/pifansubs/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/pifansubs/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/pifansubs/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/pifansubs/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/pifansubs/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/pifansubs/res/web_hi_res_512.png create mode 100644 src/pt/pifansubs/src/eu/kanade/tachiyomi/animeextension/pt/pifansubs/PiFansubs.kt create mode 100644 src/pt/pifansubs/src/eu/kanade/tachiyomi/animeextension/pt/pifansubs/extractors/BlembedExtractor.kt create mode 100644 src/pt/rinecloud/build.gradle create mode 100644 src/pt/rinecloud/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/rinecloud/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/rinecloud/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/rinecloud/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/rinecloud/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/rinecloud/src/eu/kanade/tachiyomi/animeextension/pt/rinecloud/RineCloud.kt create mode 100644 src/pt/rinecloud/src/eu/kanade/tachiyomi/animeextension/pt/rinecloud/extractors/RineCloudExtractor.kt create mode 100644 src/pt/vizer/AndroidManifest.xml create mode 100644 src/pt/vizer/build.gradle create mode 100644 src/pt/vizer/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/pt/vizer/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/pt/vizer/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/pt/vizer/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/pt/vizer/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/pt/vizer/src/eu/kanade/tachiyomi/animeextension/pt/vizer/Vizer.kt create mode 100644 src/pt/vizer/src/eu/kanade/tachiyomi/animeextension/pt/vizer/VizerFilters.kt create mode 100644 src/pt/vizer/src/eu/kanade/tachiyomi/animeextension/pt/vizer/VizerUrlActivity.kt create mode 100644 src/pt/vizer/src/eu/kanade/tachiyomi/animeextension/pt/vizer/dto/VizerDto.kt create mode 100644 src/pt/vizer/src/eu/kanade/tachiyomi/animeextension/pt/vizer/extractors/WarezExtractor.kt create mode 100644 src/ru/animelib/build.gradle create mode 100644 src/ru/animelib/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ru/animelib/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ru/animelib/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ru/animelib/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ru/animelib/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ru/animelib/src/eu/kanade/tachiyomi/animeextension/ru/animelib/Animelib.kt create mode 100644 src/ru/animelib/src/eu/kanade/tachiyomi/animeextension/ru/animelib/AnimelibDto.kt create mode 100644 src/ru/animelib/src/eu/kanade/tachiyomi/animeextension/ru/animelib/AnimelibFilters.kt create mode 100644 src/ru/animevost/build.gradle create mode 100644 src/ru/animevost/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/ru/animevost/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/ru/animevost/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/ru/animevost/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/ru/animevost/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/ru/animevost/src/eu/kanade/tachiyomi/animeextension/ru/animevost/Animevost.kt create mode 100644 src/ru/animevost/src/eu/kanade/tachiyomi/animeextension/ru/animevost/AnimevostSource.kt create mode 100644 src/sr/animebalkan/build.gradle create mode 100644 src/sr/animebalkan/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/sr/animebalkan/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/sr/animebalkan/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/sr/animebalkan/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/sr/animebalkan/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/sr/animebalkan/src/eu/kanade/tachiyomi/animeextension/sr/animebalkan/AnimeBalkan.kt create mode 100644 src/sr/animebalkan/src/eu/kanade/tachiyomi/animeextension/sr/animebalkan/extractors/MailRuExtractor.kt create mode 100644 src/sr/animesrbija/AndroidManifest.xml create mode 100644 src/sr/animesrbija/build.gradle create mode 100644 src/sr/animesrbija/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/sr/animesrbija/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/sr/animesrbija/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/sr/animesrbija/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/sr/animesrbija/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/sr/animesrbija/src/eu/kanade/tachiyomi/animeextension/sr/animesrbija/AnimeSrbija.kt create mode 100644 src/sr/animesrbija/src/eu/kanade/tachiyomi/animeextension/sr/animesrbija/AnimeSrbijaFilters.kt create mode 100644 src/sr/animesrbija/src/eu/kanade/tachiyomi/animeextension/sr/animesrbija/AnimeSrbijaUrlActivity.kt create mode 100644 src/sr/animesrbija/src/eu/kanade/tachiyomi/animeextension/sr/animesrbija/dto/AnimeSrbijaDto.kt create mode 100644 src/tr/animeler/AndroidManifest.xml create mode 100644 src/tr/animeler/build.gradle create mode 100644 src/tr/animeler/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/animeler/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/animeler/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/animeler/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/animeler/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/Animeler.kt create mode 100644 src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/AnimelerFilters.kt create mode 100644 src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/AnimelerUrlActivity.kt create mode 100644 src/tr/animeler/src/eu/kanade/tachiyomi/animeextension/tr/animeler/dto/AnimelerDto.kt create mode 100644 src/tr/anizm/AndroidManifest.xml create mode 100644 src/tr/anizm/build.gradle create mode 100644 src/tr/anizm/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/anizm/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/anizm/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/anizm/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/anizm/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/anizm/src/eu/kanade/tachiyomi/animeextension/tr/anizm/Anizm.kt create mode 100644 src/tr/anizm/src/eu/kanade/tachiyomi/animeextension/tr/anizm/AnizmFilters.kt create mode 100644 src/tr/anizm/src/eu/kanade/tachiyomi/animeextension/tr/anizm/AnizmUrlActivity.kt create mode 100644 src/tr/anizm/src/eu/kanade/tachiyomi/animeextension/tr/anizm/SearchItemDto.kt create mode 100644 src/tr/anizm/src/eu/kanade/tachiyomi/animeextension/tr/anizm/extractors/AincradExtractor.kt create mode 100644 src/tr/asyaanimeleri/build.gradle create mode 100644 src/tr/asyaanimeleri/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/asyaanimeleri/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/asyaanimeleri/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/asyaanimeleri/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/asyaanimeleri/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/asyaanimeleri/src/eu/kanade/tachiyomi/animeextension/tr/asyaanimeleri/AsyaAnimeleri.kt create mode 100644 src/tr/asyaanimeleri/src/eu/kanade/tachiyomi/animeextension/tr/asyaanimeleri/AsyaAnimeleriFilters.kt create mode 100644 src/tr/asyaanimeleri/src/eu/kanade/tachiyomi/animeextension/tr/asyaanimeleri/ShittyProtectionInterceptor.kt create mode 100644 src/tr/hdfilmcehennemi/AndroidManifest.xml create mode 100644 src/tr/hdfilmcehennemi/build.gradle create mode 100644 src/tr/hdfilmcehennemi/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/hdfilmcehennemi/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/hdfilmcehennemi/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/hdfilmcehennemi/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/hdfilmcehennemi/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/HDFilmCehennemi.kt create mode 100644 src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/HDFilmCehennemiFilters.kt create mode 100644 src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/HDFilmCehennemiUrlActivity.kt create mode 100644 src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/extractors/CloseloadExtractor.kt create mode 100644 src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/extractors/VidmolyExtractor.kt create mode 100644 src/tr/hdfilmcehennemi/src/eu/kanade/tachiyomi/animeextension/tr/hdfilmcehennemi/extractors/XBetExtractor.kt create mode 100644 src/tr/hentaizm/AndroidManifest.xml create mode 100644 src/tr/hentaizm/build.gradle create mode 100644 src/tr/hentaizm/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/hentaizm/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/hentaizm/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/hentaizm/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/hentaizm/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/hentaizm/src/eu/kanade/tachiyomi/animeextension/tr/hentaizm/HentaiZM.kt create mode 100644 src/tr/hentaizm/src/eu/kanade/tachiyomi/animeextension/tr/hentaizm/HentaiZMUrlActivity.kt create mode 100644 src/tr/hentaizm/src/eu/kanade/tachiyomi/animeextension/tr/hentaizm/extractors/VideaExtractor.kt create mode 100644 src/tr/tranimeci/build.gradle create mode 100644 src/tr/tranimeci/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/tranimeci/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/tranimeci/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/tranimeci/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/tranimeci/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/tranimeci/src/eu/kanade/tachiyomi/animeextension/tr/tranimeci/ShittyProtectionInterceptor.kt create mode 100644 src/tr/tranimeci/src/eu/kanade/tachiyomi/animeextension/tr/tranimeci/TRAnimeCI.kt create mode 100644 src/tr/tranimeci/src/eu/kanade/tachiyomi/animeextension/tr/tranimeci/TRAnimeCIFilters.kt create mode 100644 src/tr/tranimeizle/AndroidManifest.xml create mode 100644 src/tr/tranimeizle/build.gradle create mode 100644 src/tr/tranimeizle/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/tranimeizle/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/tranimeizle/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/tranimeizle/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/tranimeizle/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/tranimeizle/src/eu/kanade/tachiyomi/animeextension/tr/tranimeizle/ShittyCaptchaInterceptor.kt create mode 100644 src/tr/tranimeizle/src/eu/kanade/tachiyomi/animeextension/tr/tranimeizle/TRAnimeIzle.kt create mode 100644 src/tr/tranimeizle/src/eu/kanade/tachiyomi/animeextension/tr/tranimeizle/TRAnimeIzleUrlActivity.kt create mode 100644 src/tr/turkanime/build.gradle create mode 100644 src/tr/turkanime/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/tr/turkanime/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/tr/turkanime/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/tr/turkanime/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/tr/turkanime/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/tr/turkanime/res/web_hi_res_512.png create mode 100644 src/tr/turkanime/src/eu/kanade/tachiyomi/animeextension/tr/turkanime/TurkAnime.kt create mode 100644 src/tr/turkanime/src/eu/kanade/tachiyomi/animeextension/tr/turkanime/extractors/AlucardExtractor.kt create mode 100644 src/tr/turkanime/src/eu/kanade/tachiyomi/animeextension/tr/turkanime/extractors/EmbedgramExtractor.kt create mode 100644 src/tr/turkanime/src/eu/kanade/tachiyomi/animeextension/tr/turkanime/extractors/MVidooExtractor.kt create mode 100644 src/tr/turkanime/src/eu/kanade/tachiyomi/animeextension/tr/turkanime/extractors/MailRuExtractor.kt create mode 100644 src/tr/turkanime/src/eu/kanade/tachiyomi/animeextension/tr/turkanime/extractors/StreamVidExtractor.kt create mode 100644 src/tr/turkanime/src/eu/kanade/tachiyomi/animeextension/tr/turkanime/extractors/VTubeExtractor.kt create mode 100644 src/tr/turkanime/src/eu/kanade/tachiyomi/animeextension/tr/turkanime/extractors/WolfstreamExtractor.kt create mode 100644 src/uk/uakino/build.gradle create mode 100644 src/uk/uakino/ic_launcher-playstore.png create mode 100644 src/uk/uakino/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/uk/uakino/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/uk/uakino/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/uk/uakino/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/uk/uakino/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/uk/uakino/src/eu/kanade/tachiyomi/animeextension/uk/uakino/AshdiModel.kt create mode 100644 src/uk/uakino/src/eu/kanade/tachiyomi/animeextension/uk/uakino/UAKino.kt create mode 100644 src/uk/ufdub/build.gradle create mode 100644 src/uk/ufdub/ic_launcher-playstore.png create mode 100644 src/uk/ufdub/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/uk/ufdub/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/uk/ufdub/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/uk/ufdub/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/uk/ufdub/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/uk/ufdub/src/eu/kanade/tachiyomi/animeextension/uk/ufdub/UFDub.kt create mode 100644 template/README-REMOVED-TEMPLATE.md create mode 100644 template/README-TEMPLATE.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..336ff3c0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*.kt] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true +ktlint_experimental = enabled +ktlint_experimental_argument-list-wrapping = disabled # Doesn't play well with Android Studio +ktlint_experimental_comment-wrapping = disabled diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..176a458f --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..668f125f --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,32 @@ +**PLEASE READ THIS** + +I acknowledge that: + +- I have updated to the latest version of the app (stable is v0.15.2.2) +- I have updated all extensions +- If this is an issue with the app itself, that I should be opening an issue in https://github.com/aniyomiorg/aniyomi +- I have searched the existing issues for duplicates +- For source requests, I have checked the list of existing extensions including the multi-source spreadsheet: https://aniyomi.org/extensions/ + +**DELETE THIS SECTION IF YOU HAVE READ AND ACKNOWLEDGED IT** + +--- + +## Device information +* Aniyomi version: ? +* Android version: ? +* Device: ? + +## Source information +* Source name: ? +* Source extension version: ? + +## Steps to reproduce +1. First step +2. Second step + +## Issue/Request +? + +## Other details +Additional details and attachments. diff --git a/.github/ISSUE_TEMPLATE/01_report_issue.yml b/.github/ISSUE_TEMPLATE/01_report_issue.yml new file mode 100644 index 00000000..acbe78bd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01_report_issue.yml @@ -0,0 +1,107 @@ +name: 🐞 Issue report +description: Report a source issue in Aniyomi +labels: [Bug] +body: + + - type: input + id: source + attributes: + label: Source information + description: | + You can find the extension name and version in **Browse → Extensions**. + placeholder: | + Example: "AnimePahe 14.19 (English)" + validations: + required: true + + - type: input + id: language + attributes: + label: Source language + placeholder: | + Example: "English" + validations: + required: true + + - type: textarea + id: reproduce-steps + attributes: + label: Steps to reproduce + description: Provide an example of the issue. Be as specific as possible. + placeholder: | + Example: + 1. First step (e.g. "Open Mahouka Koukou No Rettousei (first season)") + 2. Second step (e.g. "Try to watch episode 15") + 3. Issue here (e.g. "It shows a HTTP 403 error toast") + validations: + required: true + + - type: textarea + id: expected-behavior + attributes: + label: Expected behavior + placeholder: | + Example: + "This should happen..." + validations: + required: true + + - type: textarea + id: actual-behavior + attributes: + label: Actual behavior + placeholder: | + Example: + "This happened instead..." + validations: + required: true + + - type: input + id: aniyomi-version + attributes: + label: Aniyomi version + description: | + You can find your Aniyomi version in **More → About**. + placeholder: | + Example: "0.15.2.4" or "Preview r7473" + validations: + required: true + + - type: input + id: android-version + attributes: + label: Android version + description: | + You can find this somewhere in your Android settings. + placeholder: | + Example: "Android 11" + validations: + required: true + + - type: textarea + id: other-details + attributes: + label: Other details + placeholder: | + Additional details and attachments. + + - type: checkboxes + id: acknowledgements + attributes: + label: Acknowledgements + description: Your issue will be closed if you haven't done these steps. + options: + - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. + required: true + - label: I have written a short but informative title. + required: true + - label: I have updated the app to version **[0.15.2.4](https://github.com/aniyomiorg/aniyomi/releases/latest)**. + required: true + - label: I have updated all installed extensions. + required: true + - label: I have tried the [troubleshooting guide](https://aniyomi.org/docs/guides/troubleshooting/). + required: true + - label: If this is an issue with the app itself, I should be opening an issue in the [app repository](https://github.com/aniyomiorg/aniyomi/issues/new/choose). + required: true + - label: I will fill out all of the requested information in this form. + required: true diff --git a/.github/ISSUE_TEMPLATE/02_request_source.yml b/.github/ISSUE_TEMPLATE/02_request_source.yml new file mode 100644 index 00000000..bc4cd131 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02_request_source.yml @@ -0,0 +1,56 @@ +name: 🌐 Source request +description: Suggest a new source for Aniyomi +labels: [Source request] +body: + + - type: input + id: name + attributes: + label: Source name + placeholder: | + Example: "Not Real Source" + validations: + required: true + + - type: input + id: link + attributes: + label: Source link + placeholder: | + Example: "https://notrealsource.org" + validations: + required: true + + - type: input + id: language + attributes: + label: Source language + placeholder: | + Example: "English" + validations: + required: true + + - type: textarea + id: other-details + attributes: + label: Other details + placeholder: | + Additional details and attachments. + Example: "+18/NSFW = yes" + + - type: checkboxes + id: acknowledgements + attributes: + label: Acknowledgements + description: Your issue will be closed if you haven't done these steps. + options: + - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. + required: true + - label: I have written a title with source name. + required: true + - label: I have checked that the extension does not already exist on the [website extensions list](https://aniyomi.org/extensions/) or the app. + required: true + - label: I have checked that the extension does not already exist by searching the [GitHub repository](https://github.com/aniyomiorg/aniyomi-extensions/) and verified it does not appear in the code base. + required: true + - label: I will fill out all of the requested information in this form. + required: true diff --git a/.github/ISSUE_TEMPLATE/03_report_url_change.yml b/.github/ISSUE_TEMPLATE/03_report_url_change.yml new file mode 100644 index 00000000..819e66e2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/03_report_url_change.yml @@ -0,0 +1,57 @@ +name: 🔗 URL change report +description: Report URL change of an existing source +labels: [Bug,Domain changed] +body: + + - type: input + id: source + attributes: + label: Source information + description: | + You can find the extension name and version in **Browse → Extensions**. + placeholder: | + Example: "NotRealSource 14.1" + validations: + required: true + + - type: input + id: language + attributes: + label: Source language + placeholder: | + Example: "English" + validations: + required: true + + - type: input + id: link + attributes: + label: Source new URL + placeholder: | + Example: "https://notrealsource.org" + validations: + required: true + + - type: textarea + id: other-details + attributes: + label: Other details + placeholder: | + Additional details and attachments. + + - type: checkboxes + id: acknowledgements + attributes: + label: Acknowledgements + description: Your issue will be closed if you haven't done these steps. + options: + - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. + required: true + - label: I have written a short but informative title. + required: true + - label: I have updated all installed extensions. + required: true + - label: I have opened WebView and checked that the source URL is not updated yet. + required: true + - label: I will fill out all of the requested information in this form. + required: true diff --git a/.github/ISSUE_TEMPLATE/04_report_dead_source.yml b/.github/ISSUE_TEMPLATE/04_report_dead_source.yml new file mode 100644 index 00000000..59942ab1 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/04_report_dead_source.yml @@ -0,0 +1,63 @@ +name: ❌ Dead source report +description: Source is down and website is closed +labels: [Source is down] +body: + + - type: markdown + attributes: + value: | + ### Notice + If you have a lot of dead sources to report, please go back and submit a single meta request. + + - type: input + id: source + attributes: + label: Source name + description: | + You can find the extension name in **Browse → Extensions**. + placeholder: | + Example: "NotRealSource" + validations: + required: true + + - type: input + id: language + attributes: + label: Source language + placeholder: | + Example: "English" + validations: + required: true + + - type: input + id: link + attributes: + label: Source link + placeholder: | + Example: "https://notrealsource.org" + validations: + required: true + + - type: textarea + id: other-details + attributes: + label: Other details + placeholder: | + Additional details and attachments. + + - type: checkboxes + id: acknowledgements + attributes: + label: Acknowledgements + description: Your issue will be closed if you haven't done these steps. + options: + - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. + required: true + - label: I have written a title with source name. + required: true + - label: I have updated all installed extensions. + required: true + - label: I have opened WebView and checked that the source website is down. + required: true + - label: I will fill out all of the requested information in this form. + required: true diff --git a/.github/ISSUE_TEMPLATE/05_request_feature.yml b/.github/ISSUE_TEMPLATE/05_request_feature.yml new file mode 100644 index 00000000..e47281fb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/05_request_feature.yml @@ -0,0 +1,59 @@ +name: ⭐ Feature request +description: Suggest a feature to improve an existing source +labels: [Feature request] +body: + + - type: input + id: source + attributes: + label: Source name + description: | + You can find the extension name in **Browse → Extensions**. + placeholder: | + Example: "DopeBox" + validations: + required: true + + - type: input + id: language + attributes: + label: Source language + placeholder: | + Example: "English" + validations: + required: true + + - type: textarea + id: feature-description + attributes: + label: Describe your suggested feature + description: How can an existing extension be improved? + placeholder: | + Example: + "It should work like this..." + validations: + required: true + + - type: textarea + id: other-details + attributes: + label: Other details + placeholder: | + Additional details and attachments. + + - type: checkboxes + id: acknowledgements + attributes: + label: Acknowledgements + description: Your issue will be closed if you haven't done these steps. + options: + - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open or closed issue. + required: true + - label: I have written a short but informative title. + required: true + - label: If this is an issue with the app itself, I should be opening an issue in the [app repository](https://github.com/aniyomiorg/aniyomi/issues/new/choose). + required: true + - label: I have updated the app to version **[0.15.2.4](https://github.com/aniyomiorg/aniyomi/releases/latest)**. + required: true + - label: I will fill out all of the requested information in this form. + required: true diff --git a/.github/ISSUE_TEMPLATE/06_request_meta.yml b/.github/ISSUE_TEMPLATE/06_request_meta.yml new file mode 100644 index 00000000..f6003b85 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/06_request_meta.yml @@ -0,0 +1,41 @@ +name: 🧠 Meta request +description: Suggest improvements to the project +labels: [Meta request] +body: + + - type: textarea + id: feature-description + attributes: + label: Describe why this should be added + description: How can the project be improved? + placeholder: | + Example: + "It should work like this..." + validations: + required: true + + - type: textarea + id: other-details + attributes: + label: Other details + placeholder: | + Additional details and attachments. + + - type: checkboxes + id: acknowledgements + attributes: + label: Acknowledgements + description: Your issue will be closed if you haven't done these steps. + options: + - label: I have searched the existing issues and this is a new ticket, **NOT** a duplicate or related to another open (or closed) issue. + required: true + - label: I have written a short but informative title. + required: true + - label: If this is an issue with the app itself, I should be opening an issue in the [app repository](https://github.com/aniyomiorg/aniyomi/issues/new/choose). + required: true + - label: I have updated the app to version **[0.15.2.4](https://github.com/aniyomiorg/aniyomi/releases/latest)**. + required: true + - label: I have updated all installed extensions. + required: true + - label: I will fill out all of the requested information in this form. + required: true diff --git a/.github/ISSUE_TEMPLATE/07_request_removal.yml b/.github/ISSUE_TEMPLATE/07_request_removal.yml new file mode 100644 index 00000000..7b3617bf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/07_request_removal.yml @@ -0,0 +1,33 @@ +name: 🗑 Source removal request +description: Scanlators can request their site to be removed +labels: [Meta request] +body: + + - type: input + id: link + attributes: + label: Source link + placeholder: | + Example: "https://notrealscans.org" + validations: + required: true + + - type: textarea + id: other-details + attributes: + label: Other details + placeholder: | + Additional details and attachments. + + - type: checkboxes + id: requirements + attributes: + label: Requirements + description: Your request will be denied if you don't meet these requirements. + options: + - label: Proof of ownership/intent to remove sent to a Aniyomi Discord server mod via DM + required: true + - label: Site only hosts content scanlated by the group and not stolen from other scanlators or official releases (i.e., not an aggregator site) + required: true + - label: Site is not infested with user-hostile features (e.g., invasive or malicious ads) + required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..9e1a6b4e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,14 @@ +blank_issues_enabled: false +contact_links: + - name: ⚠️ Application issue + url: https://github.com/aniyomiorg/aniyomi/issues/new/choose + about: Issues and requests about the app itself should be opened in the tachiyomi repository instead + - name: 📦 Aniyomi extensions + url: https://aniyomi.org/extensions + about: List of all available extensions with download links + - name: 🖥️ Aniyomi website + url: https://aniyomi.org/help/ + about: Guides, troubleshooting, and answers to common questions + - name: Aniyomi app GitHub repository + url: https://github.com/aniyomiorg/aniyomi + about: Issues about the app itself should be opened here instead. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..e0276c30 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,10 @@ +Checklist: + +- [ ] Updated `extVersionCode` value in `build.gradle` for individual extensions +- [ ] Updated `overrideVersionCode` or `baseVersionCode` as needed for all multisrc extensions +- [ ] Referenced all related issues in the PR body (e.g. "Closes #xyz") +- [ ] Added the `isNsfw = true` flag in `build.gradle` when appropriate +- [ ] Have not changed source names +- [ ] Have explicitly kept the `id` if a source's name or language were changed +- [ ] Have tested the modifications by compiling and running the extension through Android Studio +- [ ] Have removed `web_hi_res_512.png` when adding a new extension diff --git a/.github/readme-images/app-icon.png b/.github/readme-images/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c77fb428468aaa03ad5a7b2e2555cb43708a20ac GIT binary patch literal 1606 zcmV-M2D$l(P)lyx)Bv$M@dBS$ucb=DYp&-gn>oKF{y> z{(0W#`@U(@?iUX(X^o9uv6}PK-3jC%<~3>2XyCzV2u~^Z!iSQ#7UjNkPb@6^-Y=#^ z_q02JzLCQixk*Iug+PD!A@Df{_&?sqcG%t-A(9JNtUe7D zFKmYMAt7UAgZx1s8VntCLZCA;jMjLK|MP9IeL3le{lzw2Cg7#Q&)|e=u|P^Me;$5W zw+3$3)qjh8OM)!b~MFWSK+CH5hifE7EM;Z)QDVbuSqCO%=9bYoOrd&YGo^RmLvUS4fA&HTpA%>tcz<$@u_6fEQF3+O&B^8kIYCW{e zgScfwmVw!5V2Ird%mxE==VVcPI(aa)FPQ)wox_Q1xuv5Bgu7R+Foe3gx*#<*6&e~E zU~q7dxo;1~A1_mTX!r24wIsZb&BBxlz_ouSLdlK(hV={)L{n1}5HsN8;{z*Kt^~ba z4`#EOX*UjJV`C6NyJsSmWG^&JBVfa(1Kj8b2f*#mkF!K<1n`(KV+Ir!7Q&4iH(+#v z2z9IB7`2P`^EMrnM!>GsuTuvd;R+b~{Wpe$Jpnvs&z=o6H8n6WFu?Rd4EFX=yJ%mX z{)RLH-Xl2;I>6J_QP^}OfQL$@g4WhnW;V=3SZ72iwO^UCQ5petOVT(2QF9pL&I&;I z`T0RlPY=_#b8a}bUz3m_jex48Tuwkl7!7}70?r5s4-W^eR?EzQX`o-20nA<{5wK^~ zHenConiZ3uNPw@eFH}}mLSJ7WLmn~M^Q*82G$i$wL_q$=Dj^DC)DV-fCqO2XK|w(Q z^!E0`$jAuOp2w|YM};V~F@L`_0+M!o0cRtkxN{&chaq7rz}wp!;^X5%r_+JSWMbNh z(QQrcTFE(s=Zz!+#3wOkm0}`z5+@`iKz)5Z7#&0^F$@p&d#EV-q5vc!mMD8*Z6;T z_PTM;#MmDnPsO%fA^?FQuR1YPc*vnbNIb_w33Db)59pf-a?Qti1h%hETtnXziEX-6 z03t?n4l+n|I&5hBx zPDw`;LTh)x>N}d8&S3?0&4ine!%s|DtOC3q_Y0GUZaJb=?riBN%8kmmP8(?LO7K2+ zp6U~qzrDF({7`DEMZ^B^-a-p0iBhMEq zLZ0SLe#!_Qbu(m?i?ify3vQOk{Mv`y35Of@e({j<56xztSfH0u{r~^~07*qoM6N<$ Eg4E^x&;S4c literal 0 HcmV?d00001 diff --git a/.github/scripts/bump-versions.py b/.github/scripts/bump-versions.py new file mode 100644 index 00000000..ec2d56a8 --- /dev/null +++ b/.github/scripts/bump-versions.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 + +from concurrent.futures import Future, ThreadPoolExecutor, as_completed +import itertools +from pathlib import Path +import re +import subprocess +import sys + +VERSION_STR = "VersionCode =" +VERSION_REGEX = re.compile(f"{VERSION_STR} (\\d+)") +BUMPED_FILES: list[Path] = [] + +BOT_EMAIL = "aniyomi-bot@aniyomi.org" +BOT_NAME = "aniyomi-bot[bot]" + +def has_match(query: str, file: Path) -> tuple[Path, bool]: + return (file, query in file.read_text()) + +def find_files_with_match(query: str, include_multisrc: bool = True) -> list[Path]: + files = Path("src").glob("*/*/build.gradle") + if include_multisrc: + files = itertools.chain(files, Path("lib-multisrc").glob("*/build.gradle.kts")) + + # Prevent bumping files twice. + files = filter(lambda file: file not in BUMPED_FILES, files) + + # Use multiple threads to find matches. + with ThreadPoolExecutor() as executor: + futures = [executor.submit(has_match, query, file) for file in files] + results = map(Future.result, as_completed(futures)) + return [path for path, result in results if result] + +def replace_version(match: re.Match) -> str: + version = int(match.group(1)) + print(f"{version} -> {version + 1}") + return f"{VERSION_STR} {version + 1}" + +def bump_version(file: Path): + BUMPED_FILES.append(file) + with file.open("r+") as f: + print(f"\n{file}: ", end="") + text = VERSION_REGEX.sub(replace_version, f.read()) + # Move the cursor to the start again, to prevent writing at the end + f.seek(0) + f.write(text) + +def bump_lib_multisrc(theme: str): + for file in find_files_with_match(f"themePkg = '{theme}'", include_multisrc=False): + bump_version(file) + +def commit_changes(): + paths = [str(path.resolve()) for path in BUMPED_FILES] + subprocess.check_call(["git", "config", "--local", "user.email", BOT_EMAIL]) + subprocess.check_call(["git", "config", "--local", "user.name", BOT_NAME]) + subprocess.check_call(["git", "add"] + paths) + subprocess.check_call(["git", "commit", "-S", "-m", "[skip ci] chore: Mass-bump on extensions"]) + subprocess.check_call(["git", "push"]) + +if __name__ == "__main__": + if len(sys.argv) > 1: + # Regex to match the lib name in the path, like "unpacker" or "dood-extractor". + lib_regex = re.compile(r"lib/([a-z0-9-]+)/") + # Find matches and remove None results. + matches = filter(None, map(lib_regex.search, sys.argv[1:])) + for match in matches: + project_path = ":lib:" + match.group(1) + for file in find_files_with_match(project_path): + if file.parent.parent.name == "lib-multisrc": + bump_lib_multisrc(file.parent.name) + else: + bump_version(file) + + if len(BUMPED_FILES) > 0: + commit_changes() diff --git a/.github/scripts/commit-repo.sh b/.github/scripts/commit-repo.sh new file mode 100644 index 00000000..240e7126 --- /dev/null +++ b/.github/scripts/commit-repo.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e + +rsync -a --delete --exclude .git --exclude .gitignore ../master/repo/ . +git config --global user.email "aniyomi-bot@aniyomi.org" +git config --global user.name "aniyomi-bot[bot]" +git status +if [ -n "$(git status --porcelain)" ]; then + git add . + git commit -S -m "Update extensions repo" + git push + + # Purge cached index on jsDelivr + curl https://purge.jsdelivr.net/gh/aniyomiorg/aniyomi-extensions@repo/index.min.json +else + echo "No changes to commit" +fi diff --git a/.github/scripts/create-repo.py b/.github/scripts/create-repo.py new file mode 100644 index 00000000..09c31c2c --- /dev/null +++ b/.github/scripts/create-repo.py @@ -0,0 +1,108 @@ +import json +import os +import re +import subprocess +from pathlib import Path +from zipfile import ZipFile + +PACKAGE_NAME_REGEX = re.compile(r"package: name='([^']+)'") +VERSION_CODE_REGEX = re.compile(r"versionCode='([^']+)'") +VERSION_NAME_REGEX = re.compile(r"versionName='([^']+)'") +IS_NSFW_REGEX = re.compile(r"'tachiyomi.animeextension.nsfw' value='([^']+)'") +APPLICATION_LABEL_REGEX = re.compile(r"^application-label:'([^']+)'", re.MULTILINE) +APPLICATION_ICON_320_REGEX = re.compile( + r"^application-icon-320:'([^']+)'", re.MULTILINE +) +LANGUAGE_REGEX = re.compile(r"aniyomi-([^\.]+)") + +*_, ANDROID_BUILD_TOOLS = (Path(os.environ["ANDROID_HOME"]) / "build-tools").iterdir() +REPO_DIR = Path("repo") +REPO_APK_DIR = REPO_DIR / "apk" +REPO_ICON_DIR = REPO_DIR / "icon" + +REPO_ICON_DIR.mkdir(parents=True, exist_ok=True) + +with open("output.json", encoding="utf-8") as f: + inspector_data = json.load(f) + +index_data = [] +index_min_data = [] + +for apk in REPO_APK_DIR.iterdir(): + badging = subprocess.check_output( + [ + ANDROID_BUILD_TOOLS / "aapt", + "dump", + "--include-meta-data", + "badging", + apk, + ] + ).decode() + + package_info = next(x for x in badging.splitlines() if x.startswith("package: ")) + package_name = PACKAGE_NAME_REGEX.search(package_info).group(1) + application_icon = APPLICATION_ICON_320_REGEX.search(badging).group(1) + + with ZipFile(apk) as z, z.open(application_icon) as i, ( + REPO_ICON_DIR / f"{package_name}.png" + ).open("wb") as f: + f.write(i.read()) + + language = LANGUAGE_REGEX.search(apk.name).group(1) + sources = inspector_data[package_name] + + if len(sources) == 1: + source_language = sources[0]["lang"] + + if ( + source_language != language + and source_language not in {"all", "other"} + and language not in {"all", "other"} + ): + language = source_language + + common_data = { + "name": APPLICATION_LABEL_REGEX.search(badging).group(1), + "pkg": package_name, + "apk": apk.name, + "lang": language, + "code": int(VERSION_CODE_REGEX.search(package_info).group(1)), + "version": VERSION_NAME_REGEX.search(package_info).group(1), + "nsfw": int(IS_NSFW_REGEX.search(badging).group(1)), + } + min_data = { + **common_data, + "sources": [], + } + + for source in sources: + min_data["sources"].append( + { + "name": source["name"], + "lang": source["lang"], + "id": source["id"], + "baseUrl": source["baseUrl"], + } + ) + + index_min_data.append(min_data) + index_data.append( + { + **common_data, + "hasReadme": 0, + "hasChangelog": 0, + "sources": sources, + } + ) + +index_data.sort(key=lambda x: x["pkg"]) +index_min_data.sort(key=lambda x: x["pkg"]) + +with (REPO_DIR / "index.json").open("w", encoding="utf-8") as f: + index_data_str = json.dumps(index_data, ensure_ascii=False, indent=2) + + print(index_data_str) + f.write(index_data_str) + +with (REPO_DIR / "index.min.json").open("w", encoding="utf-8") as f: + json.dump(index_min_data, f, ensure_ascii=False, separators=(",", ":")) diff --git a/.github/scripts/move-apks.py b/.github/scripts/move-apks.py new file mode 100644 index 00000000..b354a33a --- /dev/null +++ b/.github/scripts/move-apks.py @@ -0,0 +1,16 @@ +from pathlib import Path +import shutil + +REPO_APK_DIR = Path("repo/apk") + +try: + shutil.rmtree(REPO_APK_DIR) +except FileNotFoundError: + pass + +REPO_APK_DIR.mkdir(parents=True, exist_ok=True) + +for apk in (Path.home() / "apk-artifacts").glob("**/*.apk"): + apk_name = apk.name.replace("-release.apk", ".apk") + + shutil.move(apk, REPO_APK_DIR / apk_name) diff --git a/.github/scripts/sign-apks.sh b/.github/scripts/sign-apks.sh new file mode 100644 index 00000000..fa7a0ae7 --- /dev/null +++ b/.github/scripts/sign-apks.sh @@ -0,0 +1,52 @@ +#!/bin/bash +set -e + +TOOLS="$(ls -d ${ANDROID_HOME}/build-tools/* | tail -1)" + +shopt -s globstar nullglob extglob +APKS=( **/*".apk" ) + +# Fail if too little extensions seem to have been built +if [ "${#APKS[@]}" -le "50" ]; then + echo "Insufficient amount of APKs found. Please check the project configuration." + exit 1; +fi; + +# Take base64 encoded key input and put it into a file +STORE_PATH=$PWD/signingkey.jks +rm -f $STORE_PATH && touch $STORE_PATH +echo $1 | base64 -d > $STORE_PATH + +STORE_ALIAS=$2 +export KEY_STORE_PASSWORD=$3 +export KEY_PASSWORD=$4 + +DEST=$PWD/apk +rm -rf $DEST && mkdir -p $DEST + +MAX_PARALLEL=4 + +# Sign all of the APKs +for APK in ${APKS[@]}; do + ( + BASENAME=$(basename $APK) + APKNAME="${BASENAME%%+(-release*)}.apk" + APKDEST="$DEST/$APKNAME" + + ${TOOLS}/zipalign -c -v -p 4 $APK + + cp $APK $APKDEST + ${TOOLS}/apksigner sign --ks $STORE_PATH --ks-key-alias $STORE_ALIAS --ks-pass env:KEY_STORE_PASSWORD --key-pass env:KEY_PASSWORD $APKDEST + ) & + + # Allow to execute up to $MAX_PARALLEL jobs in parallel + if [[ $(jobs -r -p | wc -l) -ge $MAX_PARALLEL ]]; then + wait -n + fi +done + +wait + +rm $STORE_PATH +unset KEY_STORE_PASSWORD +unset KEY_PASSWORD diff --git a/.github/workflows/batch_close_issues.yml b/.github/workflows/batch_close_issues.yml new file mode 100644 index 00000000..2e5ac860 --- /dev/null +++ b/.github/workflows/batch_close_issues.yml @@ -0,0 +1,25 @@ +name: "Batch close stale issues" + +on: + # Monthly + schedule: + - cron: '0 0 1 * *' + # Manual trigger + workflow_dispatch: + inputs: + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + # Close everything older than ~6 months + days-before-issue-stale: 180 + days-before-issue-close: 0 + exempt-issue-labels: "do-not-autoclose,Meta request" + close-issue-message: "In an effort to have a more manageable issue backlog, we're closing older requests that weren't addressed since there's a low chance of it being addressed if it hasn't already. If your request is still relevant, please [open a new request](https://github.com/aniyomiorg/aniyomi-extensions/issues/new/choose)." + close-issue-reason: not_planned + ascending: true + operations-per-run: 250 diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml new file mode 100644 index 00000000..3aaa544e --- /dev/null +++ b/.github/workflows/build_pull_request.yml @@ -0,0 +1,76 @@ +name: PR build check + +on: + pull_request: + paths: + - '**' + - '!**.md' + - '!.github/**' + - '.github/workflows/build_pull_request.yml' + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + cancel-in-progress: true + +env: + CI_CHUNK_SIZE: 65 + +jobs: + prepare: + name: Prepare job + runs-on: ubuntu-latest + outputs: + individualMatrix: ${{ steps.generate-matrices.outputs.individualMatrix }} + steps: + - name: Clone repo + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + + - name: Validate Gradle Wrapper + uses: gradle/wrapper-validation-action@a494d935f4b56874c4a5a87d19af7afcf3a163d0 # v2 + + - name: Get number of modules + run: | + set -x + projects=(src/*/*) + + echo "NUM_INDIVIDUAL_MODULES=${#projects[@]}" >> $GITHUB_ENV + + - id: generate-matrices + name: Create output matrices + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7 + with: + script: | + const numIndividualModules = process.env.NUM_INDIVIDUAL_MODULES; + const chunkSize = process.env.CI_CHUNK_SIZE; + + const numIndividualChunks = Math.ceil(numIndividualModules / chunkSize); + + console.log(`Individual modules: ${numIndividualModules} (${numIndividualChunks} chunks of ${chunkSize})`); + + core.setOutput('individualMatrix', { 'chunk': [...Array(numIndividualChunks).keys()] }); + + build_individual: + name: Build individual modules + needs: prepare + runs-on: ubuntu-latest + strategy: + matrix: ${{ fromJSON(needs.prepare.outputs.individualMatrix) }} + steps: + - name: Checkout PR + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + + - name: Set up JDK + uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 # v4 + with: + java-version: 17 + distribution: temurin + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3 + with: + cache-read-only: true + + - name: Build extensions (chunk ${{ matrix.chunk }}) + env: + CI_CHUNK_NUM: ${{ matrix.chunk }} + run: ./gradlew -p src assembleDebug diff --git a/.github/workflows/build_push.yml b/.github/workflows/build_push.yml new file mode 100644 index 00000000..59256092 --- /dev/null +++ b/.github/workflows/build_push.yml @@ -0,0 +1,178 @@ +name: CI + +on: + push: + branches: + - master + paths: + - '**' + - '!**.md' + - '!.github/**' + - '.github/scripts/**' + - '.github/workflows/build_push.yml' + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +env: + CI_CHUNK_SIZE: 65 + +jobs: + prepare: + name: Prepare job + runs-on: ubuntu-latest + outputs: + individualMatrix: ${{ steps.generate-matrices.outputs.individualMatrix }} + steps: + - name: Clone repo + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + with: + ref: master + token: ${{ secrets.ANIYOMIORG_BOT_PAT }} + + - name: Find lib changes + id: modified-libs + uses: tj-actions/changed-files@90a06d6ba9543371ab4df8eeca0be07ca6054959 #v42 + with: + files: lib/ + files_ignore: lib/**.md + files_separator: " " + safe_output: false + + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@01dd5d3ca463c7f10f7f4f7b4f177225ac661ee4 # v6.1.0 + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.GPG_PASSPHRASE }} + git_user_signingkey: true + git_commit_gpgsign: true + + # This step is going to commit, but this will not trigger another workflow. + - name: Bump extensions that uses a modified lib + if: steps.modified-libs.outputs.any_changed == 'true' + run: | + ./.github/scripts/bump-versions.py ${{ steps.modified-libs.outputs.all_changed_files }} + + - name: Validate Gradle Wrapper + uses: gradle/wrapper-validation-action@a494d935f4b56874c4a5a87d19af7afcf3a163d0 # v2 + + - name: Get number of modules + run: | + set -x + projects=(src/*/*) + + echo "NUM_INDIVIDUAL_MODULES=${#projects[@]}" >> $GITHUB_ENV + + - id: generate-matrices + name: Create output matrices + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7 + with: + script: | + const numIndividualModules = process.env.NUM_INDIVIDUAL_MODULES; + const chunkSize = process.env.CI_CHUNK_SIZE; + + const numIndividualChunks = Math.ceil(numIndividualModules / chunkSize); + + console.log(`Individual modules: ${numIndividualModules} (${numIndividualChunks} chunks of ${chunkSize})`); + + core.setOutput('individualMatrix', { 'chunk': [...Array(numIndividualChunks).keys()] }); + + build_individual: + name: Build individual modules + needs: prepare + runs-on: ubuntu-latest + strategy: + matrix: ${{ fromJSON(needs.prepare.outputs.individualMatrix) }} + steps: + - name: Checkout master branch + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + with: + ref: master + + - name: Set up JDK + uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 # v4 + with: + java-version: 17 + distribution: temurin + + - name: Prepare signing key + run: | + echo ${{ secrets.SIGNING_KEY }} | base64 -d > signingkey.jks + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3 + + - name: Build extensions (chunk ${{ matrix.chunk }}) + env: + CI_CHUNK_NUM: ${{ matrix.chunk }} + ALIAS: ${{ secrets.ALIAS }} + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + run: ./gradlew -p src assembleRelease + + - name: Upload APKs (chunk ${{ matrix.chunk }}) + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4 + if: "github.repository == 'aniyomiorg/aniyomi-extensions'" + with: + name: "individual-apks-${{ matrix.chunk }}" + path: "**/*.apk" + retention-days: 1 + + - name: Clean up CI files + run: rm signingkey.jks + + publish_repo: + name: Publish repo + needs: + - build_individual + if: "github.repository == 'aniyomiorg/aniyomi-extensions'" + runs-on: ubuntu-latest + steps: + - name: Download APK artifacts + uses: actions/download-artifact@eaceaf801fd36c7dee90939fad912460b18a1ffe # v4 + with: + path: ~/apk-artifacts + + - name: Set up JDK + uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 # v4 + with: + java-version: 17 + distribution: temurin + + - name: Checkout master branch + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + with: + ref: master + path: master + + - name: Create repo artifacts + run: | + cd master + python ./.github/scripts/move-apks.py + INSPECTOR_LINK="$(curl -s "https://api.github.com/repos/aniyomiorg/aniyomi-extensions-inspector/releases/latest" | jq -r '.assets[0].browser_download_url')" + curl -L "$INSPECTOR_LINK" -o ./Inspector.jar + java -jar ./Inspector.jar "repo/apk" "output.json" "tmp" + python ./.github/scripts/create-repo.py + + - name: Checkout repo branch + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 + with: + repository: aniyomiorg/aniyomi-extensions + token: ${{ secrets.ANIYOMIORG_BOT_PAT }} + ref: repo + path: repo + + - name: Import GPG key + uses: crazy-max/ghaction-import-gpg@01dd5d3ca463c7f10f7f4f7b4f177225ac661ee4 # v6.1.0 + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + passphrase: ${{ secrets.GPG_PASSPHRASE }} + git_user_signingkey: true + git_commit_gpgsign: true + workdir: repo + + - name: Deploy repo + run: | + cd repo + ../master/.github/scripts/commit-repo.sh diff --git a/.github/workflows/issue_moderator.yml b/.github/workflows/issue_moderator.yml new file mode 100644 index 00000000..52695c98 --- /dev/null +++ b/.github/workflows/issue_moderator.yml @@ -0,0 +1,51 @@ +name: Issue moderator + +on: + issues: + types: [opened, edited, reopened] + issue_comment: + types: [created] + +jobs: + autoclose: + runs-on: ubuntu-latest + steps: + - name: Moderate issues + uses: aniyomiorg/issue-moderator-action@v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + duplicate-label: Duplicate + + duplicate-check-enabled: true + duplicate-check-labels: | + ["Source request", "Domain changed"] + + existing-check-enabled: true + existing-check-labels: | + ["Source request", "Domain changed"] + + auto-close-rules: | + [ + { + "type": "body", + "regex": ".*DELETE THIS SECTION IF YOU HAVE READ AND ACKNOWLEDGED IT.*", + "message": "The acknowledgment section was not removed." + }, + { + "type": "body", + "regex": ".*\\* (Aniyomi version|Android version|Device): \\?.*", + "message": "Requested information in the template was not filled out." + }, + { + "type": "title", + "regex": ".*(Source name|Short description).*", + "message": "You did not fill out the description in the title." + }, + { + "type": "both", + "regex": ".*(?:fail(?:ed|ure|s)?|can\\s*(?:no|')?t|(?:not|un).*able|(?Steps + +1. Make sure to delete "repo" branch in your fork. You may also want to disable Actions in the repo settings. + + **Also make sure you are using the latest version of Git as many commands used here are pretty new.** + +2. Do a partial clone. + ```bash + git clone --filter=blob:none --sparse + cd aniyomi-extensions/ + ``` +3. Configure sparse checkout. + + There are two modes of pattern matching. The default is cone (🔺) mode. + Cone mode enables significantly faster pattern matching for big monorepos + and the sparse index feature to make Git commands more responsive. + In this mode, you can only filter by file path, which is less flexible + and might require more work when the project structure changes. + + You can skip this code block to use legacy mode if you want easier filters. + It won't be much slower as the repo doesn't have that many files. + + To enable cone mode together with sparse index, follow these steps: + + ```bash + git sparse-checkout set --cone --sparse-index + # add project folders + git sparse-checkout add .run buildSrc core gradle lib multisrc/src/main/java/generator + # add a single source + git sparse-checkout add src// + # add a multisrc theme + git sparse-checkout add multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/ + git sparse-checkout add multisrc/overrides/ + ``` + + To remove a source, open `.git/info/sparse-checkout` and delete the exact + lines you typed when adding it. Don't touch the other auto-generated lines + unless you fully understand how cone mode works, or you might break it. + + To use the legacy non-cone mode, follow these steps: + + ```bash + # enable sparse checkout + git sparse-checkout set --no-cone + # edit sparse checkout filter + vim .git/info/sparse-checkout + # alternatively, if you have VS Code installed + code .git/info/sparse-checkout + ``` + Here's an example: + ```bash + /* + !/src/* + !/multisrc/overrides/* + !/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/* + # allow a single source + /src// + # allow a multisrc theme + /multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/ + /multisrc/overrides/ + # or type the source name directly + + ``` + + Explanation: the rules are like `gitignore`. We first exclude all sources + while retaining project folders, then add the needed sources back manually. + +4. Configure remotes. + ```bash + # add upstream + git remote add upstream + # optionally disable push to upstream + git remote set-url --push upstream no_pushing + # ignore 'repo' branch of upstream + # option 1: use negative refspec + git config --add remote.upstream.fetch "^refs/heads/repo" + # option 2: fetch master only (ignore all other branches) + git config remote.upstream.fetch "+refs/heads/master:refs/remotes/upstream/master" + # update remotes + git remote update + # track master of upstream instead of fork + git branch master -u upstream/master + ``` +5. Useful configurations. (optional) + ```bash + # prune obsolete remote branches on fetch + git config remote.origin.prune true + # fast-forward only when pulling master branch + git config pull.ff only + # Add an alias to sync master branch without fetching useless blobs. + # If you run `git pull` to fast-forward in a blobless clone like this, + # all blobs (files) in the new commits are still fetched regardless of + # sparse rules, which makes the local repo accumulate unused files. + # Use `git sync-master` to avoid this. Be careful if you have changes + # on master branch, which is not a good practice. + git config alias.sync-master '!git switch master && git fetch upstream && git reset --keep FETCH_HEAD' + ``` +6. Later, if you change the sparse checkout filter, run `git sparse-checkout reapply`. + +Read more on +[Git's object model](https://github.blog/2020-12-17-commits-are-snapshots-not-diffs/), +[partial clone](https://github.blog/2020-12-21-get-up-to-speed-with-partial-clone-and-shallow-clone/), +[sparse checkout](https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/), +[sparse index](https://github.blog/2021-11-10-make-your-monorepo-feel-small-with-gits-sparse-index/), +and [negative refspecs](https://github.blog/2020-10-19-git-2-29-released/#user-content-negative-refspecs). + + +## Getting help + +- Join [the Discord server](https://discord.gg/F32UjdJZrR) for online help and to ask questions while developing your extension. When doing so, please ask it in the `#dev` channel. + +- There are some features and tricks that are not explored in this document. Refer to existing extension code for examples. + +## Writing an extension + +The quickest way to get started is to copy an existing extension's folder structure and renaming it as needed. We also recommend reading through a few existing extensions' code before you start. + +### Setting up a new Gradle module + +Each extension should reside in `src//`. Use `all` as `` if your target source supports multiple languages or if it could support multiple sources. + +The `` used in the folder inside `src` should be the major `language` part. For example, if you will be creating a `pt-BR` source, use `` here as `pt` only. Inside the source class, use the full locale string instead. + +#### Extension file structure + +The simplest extension structure looks like this: + +```console +$ tree src/// +src/// +├── AndroidManifest.xml (optional) +├── build.gradle +├── build.gradle +├── res +│   ├── mipmap-hdpi +│   │   └── ic_launcher.png +│   ├── mipmap-mdpi +│   │   └── ic_launcher.png +│   ├── mipmap-xhdpi +│   │   └── ic_launcher.png +│   ├── mipmap-xxhdpi +│   │   └── ic_launcher.png +│   ├── mipmap-xxxhdpi +│   │   └── ic_launcher.png +│   └── web_hi_res_512.png +└── src + └── eu + └── kanade + └── tachiyomi + └── animeextension + └── + └── + └── .kt + +13 directories, 9 files +``` + +`` should be an ISO 639-1 compliant language code (two letters or `all`). `` +should be adapted from the site name, and can only contain lowercase ASCII letters and digits. +Your extension code must be placed in the package `eu.kanade.tachiyomi.animeextension..`. + +#### AndroidManifest.xml (optional) +You only need to create this file if you want to add deep linking to your extension. +See [URL intent filter](#url-intent-filter) for more information. + +#### build.gradle +Make sure that your new extension's `build.gradle` file follows the following structure: + +```groovy +ext { + extName = '' + extClass = '.' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" +``` + +| Field | Description | +| ----- | ----------- | +| `extName` | The name of the extension. Should be romanized if site name is not in English.| +| `extClass` | Points to the class that implements `AnimeSource`. You can use a relative path starting with a dot (the package name is the base path). This is used to find and instantiate the source(s). | +| `extVersionCode` | The extension version code. This must be a positive integer and incremented with any change to the code. | +| `isNsfw` | (Optional, defaults to `false`) Flag to indicate that a source contains NSFW content. | + +The extension's version name is generated automatically by concatenating `14` and `extVersionCode`. With the example used above, the version would be `14.1`. + +### Core dependencies + +#### Extension API + +Extensions rely on [extensions-lib](https://github.com/aniyomiorg/extensions-lib), which provides some interfaces and stubs from the [app](https://github.com/aniyomiorg/aniyomi) for compilation purposes. The actual implementations can be found [here](https://github.com/aniyomiorg/aniyomi/tree/master/app/src/main/java/eu/kanade/tachiyomi/animesource). Referencing the actual implementation will help with understanding extensions' call flow. + +#### CryptoAES library + +The [`cryptoaes`](https://github.com/aniyomiorg/aniyomi-extensions/tree/master/lib/cryptoaes) provides utilities for decrypting AES-encrypted data, like data encrypted with AES+EvpKDF (The key-derivation algorithm used by the [cryptojs](https://cryptojs.gitbook.io/docs/) library). It also includes some utilities to decrypt strings in the [jsfuck](https://jsfuck.com/) format. + +```groovy +dependencies { + implementation(project(":lib:cryptoaes")) +} +``` + +#### Unpacker library + +The [`unpacker`](https://github.com/aniyomiorg/aniyomi-extensions/tree/master/lib/unpacker) library provides a deobfuscator(unpacker) for javascript code obfuscated with the [jspacker](http://dean.edwards.name/packer/) algorithm. + +```groovy +dependencies { + implementation(project(":lib:unpacker")) +} +``` + +#### Synchrony library + +[`synchrony`](https://github.com/aniyomiorg/aniyomi-extensions/tree/master/lib/synchrony) is a library that bundles and runs the [synchrony](https://github.com/relative/synchrony) deobfuscator with your extension to help when deobfuscating obfuscated javascript. Useful to get data on highly obfuscated javascript code. + +```groovy +dependencies { + implementation(project(":lib:synchrony")) +} +``` + +#### Additional dependencies + +If you find yourself needing additional functionality, you can add more dependencies to your `build.gradle` file. +Many of [the dependencies](https://github.com/aniyomiorg/aniyomi/blob/master/app/build.gradle.kts) from the main Aniyomi app are exposed to extensions by default. + +> Note that several dependencies are already exposed to all extensions via Gradle version catalog. +> To view which are available view `libs.versions.toml` under the `gradle` folder + +Notice that we're using `compileOnly` instead of `implementation` if the app already contains it. You could use `implementation` instead for a new dependency, or you prefer not to rely on whatever the main app has at the expense of app size. + +Note that using `compileOnly` restricts you to versions that must be compatible with those used in [the latest stable version of Aniyomi](https://github.com/aniyomiorg/aniyomi/releases/latest). + +### Extension main class + +The class which is referenced and defined by `extClass` in `build.gradle`. This class should implement either `AnimeSourceFactory` or extend one of the `AnimeSource` implementations: `AnimeHttpSource` or `ParsedAnimeHttpSource`. + +| Class | Description | +| ----- | ----------- | +|`AnimeSourceFactory`| Used to expose multiple `AnimeSource`s. Use this in case of a source that supports multiple languages or mirrors of the same website. For similar websites use [theme sources](#multi-source-themes). | +| `AnimeHttpSource`| For online source, where requests are made using HTTP. | +| `ParsedAnimeHttpSource`| Similar to `AnimeHttpSource`, but has methods useful for scraping pages. | + +#### Main class key variables + +| Field | Description | +| ----- | ----------- | +| `name` | Name displayed in the "Sources" tab in Aniyomi. | +| `baseUrl` | Base URL of the source without any trailing slashes. | +| `lang` | An ISO 639-1 compliant language code (two letters in lower case in most cases, but can also include the country/dialect part by using a simple dash character). | +| `id` | Identifier of your source, automatically set in `AnimeHttpSource`. It should only be manually overriden if you need to copy an existing autogenerated ID. | + +### Extension call flow + +#### Popular Anime + +a.k.a. the Browse source entry point in the app (invoked by tapping on the source name). + +- The app calls `fetchPopularAnime` which should return a `AnimesPage` containing the first batch of found `SAnime` entries. + - This method supports pagination. When user scrolls the manga list and more results must be fetched, the app calls it again with increasing `page` values(starting with `page=1`). This continues while `AnimesPage.hasNextPage` is passed as `true` and `AnimesPage.mangas` is not empty. +- To show the list properly, the app needs `url`, `title` and `thumbnail_url`. You **must** set them here. The rest of the fields could be filled later.(refer to Anime Details below). + - You should set `thumbnail_url` if is available, if not, `fetchAnimeDetails` will be **immediately** called. (this will increase network calls heavily and should be avoided). + +#### Latest Anime + +a.k.a. the Latest source entry point in the app (invoked by tapping on the "Latest" button beside the source name). + +- Enabled if `supportsLatest` is `true` for a source +- Similar to popular anime, but should be fetching the latest entries from a source. + +#### Anime Search + +- When the user searches inside the app, `fetchSearchAnime` will be called and the rest of the flow is similar to what happens with `fetchPopularAnime`. + - If search functionality is not available, return `Observable.just(AnimesPage(emptyList(), false))` +- `getFilterList` will be called to get all filters and filter types. + +##### Filters + +The search flow have support to filters that can be added to a `AnimeFilterList` inside the `getFilterList` method. When the user changes the filter's state, they will be passed to the `searchAnimeRequest`, and they can be iterated to create the request (by getting the `filter.state` value, where the type varies depending on the `AnimeFilter` used). You can check the filter types available [here](https://github.com/aniyomiorg/aniyomi/blob/master/source-api/src/main/java/eu/kanade/tachiyomi/animesource/model/AnimeFilter.kt) and in the table below. + +| Filter | State type | Description | +| ------ | ---------- | ----------- | +| `AnimeFilter.Header` | None | A simple header. Useful for separating sections in the list or showing any note or warning to the user. | +| `AnimeFilter.Separator` | None | A line separator. Useful for visual distinction between sections. | +| `AnimeFilter.Select` | `Int` | A select control, similar to HTML's ``. | +| `AnimeFilter.CheckBox` | `Boolean` | A checkbox control, similar to HTML's ``. The state is `true` if it's checked. | +| `AnimeFilter.TriState` | `Int` | A enhanced checkbox control that supports an excluding state. The state can be compared with `STATE_IGNORE`, `STATE_INCLUDE` and `STATE_EXCLUDE` constants of the class. | +| `AnimeFilter.Group` | `List` | A group of filters (preferentially of the same type). The state will be a `List` with all the states. | +| `AnimeFilter.Sort` | `Selection` | A control for sorting, with support for the ordering. The state indicates which item index is selected and if the sorting is `ascending`. | + +All control filters can have a default state set. It's usually recommended if the source have filters to make the initial state match the popular anime list, so when the user open the filter sheet, the state is equal and represents the current anime showing. + +The `AnimeFilter` classes can also be extended, so you can create new custom filters like the `UriPartFilter`: + +```kotlin +open class UriPartFilter(displayName: String, private val vals: Array>) : + AnimeFilter.Select(displayName, vals.map { it.first }.toTypedArray()) { + fun toUriPart() = vals[state].second +} +``` + +#### Anime Details + +- When user taps on an anime, `fetchAnimeDetails` and `fetchEpisodeList` will be called and the results will be cached. + - A `SAnime` entry is identified by its `url`. +- `fetchAnimeDetails` is called to update an anime's details from when it was initialized earlier. + - `SAnime.initialized` tells the app if it should call `fetchAnimeDetails`. If you are overriding `fetchAnimeDetails`, make sure to pass it as `true`. + - `SAnime.genre` is a string containing list of all genres separated with `", "`. + - `SAnime.status` is an "enum" value. Refer to [the values in the `SAnime` companion object](https://github.com/aniyomiorg/extensions-lib/blob/main/library/src/main/java/eu/kanade/tachiyomi/animesource/model/SAnime.kt#L26-L32). + - During a backup, only `url` and `title` are stored. To restore the rest of the anime data, the app calls `fetchAnimeDetails`, so all fields should be (re)filled in if possible. + - If a `SAnime` is cached `fetchAnimeDetails` will be only called when the user does a manual update(Swipe-to-Refresh). +- `fetchEpisodeList` is called to display the episode list. + - **The list should be sorted descending by the source order**. + - If `Video.videoUrl`s are available immediately, you should pass them here. Otherwise, you should set `video.url` to a page that contains them and override `videoUrlParse` to fill those `videoUrl`s. + +#### Episode + +- After an episode list for the anime is fetched and the app is going to cache the data, `prepareNewEpisode` will be called. +- `SEpisode.date_upload` is the [UNIX Epoch time](https://en.wikipedia.org/wiki/Unix_time) **expressed in milliseconds**. + - If you don't pass `SEpisode.date_upload` and leave it zero, the app will use the default date instead, but it's recommended to always fill it if it's available. + - To get the time in milliseconds from a date string, you can use a `SimpleDateFormat` like in the example below. + + ```kotlin + private fun parseDate(dateStr: String): Long { + return runCatching { DATE_FORMATTER.parse(dateStr)?.time } + .getOrNull() ?: 0L + } + + companion object { + private val DATE_FORMATTER by lazy { + SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH) + } + } + ``` + + Make sure you make the `SimpleDateFormat` a class constant or variable so it doesn't get recreated for every episode. If you need to parse or format dates in anime description, create another instance since `SimpleDateFormat` is not thread-safe. + - If the parsing have any problem, make sure to return `0L` so the app will use the default date instead. + - The app will overwrite dates of existing old episodes **UNLESS** `0L` is returned. + - The default date has [changed](https://github.com/aniyomiorg/aniyomi/pull/7197) in Aniyomi preview ≥ r4442 or stable > 0.13.4. + - In older versions, the default date is always the fetch date. + - In newer versions, this is the same if every (new) episode has `0L` returned. + - However, if the source only provides the upload date of the latest episode, you can now set it to the latest episode and leave other episodes default. The app will automatically set it (instead of fetch date) to every new episode and leave old episodes' dates untouched. + +#### Episode Videos + +- When user opens an episode, `fetchVideoList` will be called and it will return a list of `Video`s that are used by the player. + +### Misc notes + +- Sometimes you may find no use for some inherited methods. If so just override them and throw exceptions: `throw UnsupportedOperationException()` +- You probably will find `getUrlWithoutDomain` useful when parsing the target source URLs. Keep in mind there's a current issue with spaces in the URL though, so if you use it, replace all spaces with URL encoded characters (like `%20`). +- If possible try to stick to the general workflow from `AnimeHttpSource`/`AnimeParsedHttpSource`; breaking them may cause you more headache than necessary. +- By implementing `ConfigurableAnimeSource` you can add settings to your source, which is backed by [`SharedPreferences`](https://developer.android.com/reference/android/content/SharedPreferences). + +### Advanced Extension features + +#### URL intent filter + +Extensions can define URL intent filters by defining it inside a custom `AndroidManifest.xml` file. +For an example, refer to [the AniWatch module's `AndroidManifest.xml` file](https://github.com/aniyomiorg/aniyomi-extensions/blob/master/src/en/aniwatch/AndroidManifest.xml) and [its corresponding `AniWatchUrlActivity` handler](https://github.com/aniyomiorg/aniyomi-extensions/blob/master/src/en/aniwatch/src/eu/kanade/tachiyomi/animeextension/en/zoro/AniWatchUrlActivity.kt). + +To test if the URL intent filter is working as expected, you can try opening the website in a browser and navigating to the endpoint that was added as a filter or clicking a hyperlink. Alternatively, you can use the `adb` command below. + +```console +$ adb shell am start -d "" -a android.intent.action.VIEW +``` + +#### Renaming existing sources + +There is some cases where existing sources changes their name on the website. To correctly reflect these changes in the extension, you need to explicity set the `id` to the same old value, otherwise it will get changed by the new `name` value and users will be forced to migrate back to the source. + +To get the current `id` value before the name change, you can search the source name in the [repository JSON file](https://github.com/aniyomiorg/aniyomi-extensions/blob/repo/index.json) by looking into the `sources` attribute of the extension. When you have the `id` copied, you can override it in the source: + +```kotlin +override val id: Long = +``` + +Then the class name and the `name` attribute value can be changed. Also don't forget to update the extension name and class name in the individual Gradle file if it is not a multisrc extension. + +**Important:** the package name **needs** to be the same (even if it has the old name), otherwise users will not receive the extension update when it gets published in the repository. If you're changing the name of a multisrc source, you can manually set it in the generator class of the theme by using `pkgName = "oldpackagename"`. + +The `id` also needs to be explicity set to the old value if you're changing the `lang` attribute. + +## Multi-source themes +The `multisrc` module houses source code for generating extensions for cases where multiple source sites use the same site generator tool(usually a CMS) for bootstraping their website and this makes them similar enough to prompt code reuse through inheritance/composition; which from now on we will use the general **theme** term to refer to. + +This module contains the *default implementation* for each theme and definitions for each source that builds upon that default implementation and also it's overrides upon that default implementation, all of this becomes a set of source code which then is used to generate individual extensions from. + +### The directory structure +```console +$ tree multisrc +multisrc +├── build.gradle.kts +├── overrides +│   └── +│   ├── default +│   │   ├── additional.gradle +│   │   └── res +│   │   ├── mipmap-hdpi +│   │   │   └── ic_launcher.png +│   │   ├── mipmap-mdpi +│   │   │   └── ic_launcher.png +│   │   ├── mipmap-xhdpi +│   │   │   └── ic_launcher.png +│   │   ├── mipmap-xxhdpi +│   │   │   └── ic_launcher.png +│   │   ├── mipmap-xxxhdpi +│   │   │   └── ic_launcher.png +│   │   └── web_hi_res_512.png +│   └── +│   ├── additional.gradle +│   ├── AndroidManifest.xml +│   ├── res +│   │   ├── mipmap-hdpi +│   │   │   └── ic_launcher.png +│   │   ├── mipmap-mdpi +│   │   │   └── ic_launcher.png +│   │   ├── mipmap-xhdpi +│   │   │   └── ic_launcher.png +│   │   ├── mipmap-xxhdpi +│   │   │   └── ic_launcher.png +│   │   ├── mipmap-xxxhdpi +│   │   │   └── ic_launcher.png +│   │   └── web_hi_res_512.png +│   └── src +│   └── .kt +└── src + └── main + ├── AndroidManifest.xml + └── java + ├── eu + │   └── kanade + │   └── tachiyomi + │   └── multisrc + │   └── + │   ├── Generator.kt + │   └── .kt + └── generator + ├── GeneratorMain.kt + ├── IntelijConfigurationGeneratorMain.kt + └── ThemeSourceGenerator.kt +``` + +- `multisrc/src/main/java/eu/kanade/tachiyomi/multisrc//.kt` defines the the theme's default implementation. +- `multisrc/src/main/java/eu/kanade/tachiyomi/multisrc//Generator.kt` defines the the theme's generator class, this is similar to a `AnimeSourceFactory` class. +- `multisrc/overrides//default/res` is the theme's default icons, if a source doesn't have overrides for `res`, then default icons will be used. +- `multisrc/overrides//default/additional.gradle` defines additional gradle code, this will be copied at the end of all generated sources from this theme. +- `multisrc/overrides//` contains overrides for a source that is defined inside the `Generator.kt` class. +- `multisrc/overrides///src` contains source overrides. +- `multisrc/overrides///res` contains override for icons. +- `multisrc/overrides///additional.gradle` defines additional gradle code, this will be copied at the end of the generated gradle file below the theme's `additional.gradle`. +- `multisrc/overrides///AndroidManifest.xml` is copied as an override to the default `AndroidManifest.xml` generation if it exists. + +> **Note** +> +> Files ending with `Gen.kt` (i.e. `multisrc/src/main/java/eu/kanade/tachiyomi/multisrc//XxxGen.kt`) +> are considered helper files and won't be copied to generated sources. + +### Development workflow +There are three steps in running and testing a theme source: + +1. Generate the sources + - **Option 1: Only generate sources from one theme** + - **Method 1:** Find and run `Generator` run configuration form the `Run/Debug Configuration` menu. + - **Method 2:** Directly run `.Generator.main` by pressing the play button in front of the method shown inside Android Studio's Code Editor to generate sources from the said theme. + - **Option 2: Generate sources from all themes** + - **Method 1:** Run `./gradlew multisrc:generateExtensions` from a terminal window to generate all sources. + - **Method 2:** Directly run `Generator.GeneratorMain.main` by pressing the play button in front of the method shown inside Android Studio's Code Editor to generate all sources. +2. Sync gradle to import the new generated sources inside `generated-src` + - **Method 1:** Android Studio might prompt to sync the gradle. Click on `Sync Now`. + - **Method 2:** Manually re-sync by opening `File` -> `Sync Project with Gradle Files` or by pressing `Alt+f` then `g`. +3. Build and test the generated Extention like normal `src` sources. + - It's recommended to make changes here to skip going through step 1 and 2 multiple times, and when you are done, copying the changes back to `multisrc`. + +### Scaffolding overrides +You can use this python script to generate scaffolds for source overrides. Put it inside `multisrc/overrides//` as `scaffold.py`. +```python +import os, sys +from pathlib import Path + +theme = Path(os.getcwd()).parts[-1] + +print(f"Detected theme: {theme}") + +if len(sys.argv) < 3: + print("Must be called with a class name and lang, for Example 'python scaffold.py LeviatanScans en'") + exit(-1) + +source = sys.argv[1] +package = source.lower() +lang = sys.argv[2] + +print(f"working on {source} with lang {lang}") + +os.makedirs(f"{package}/src") +os.makedirs(f"{package}/res") + +with open(f"{package}/src/{source}.kt", "w") as f: + f.write(f"package eu.kanade.tachiyomi.animeextension.{lang}.{package}\n\n") +``` + +### Additional Notes +- Generated sources extension version code is calculated as `baseVersionCode + overrideVersionCode + multisrcLibraryVersion`. + - Currently `multisrcLibraryVersion` is `0` + - When a new source is added, it doesn't need to set `overrideVersionCode` as it's default is `0`. + - For each time a source changes in a way that should the version increase, `overrideVersionCode` should be increased by one. + - When a theme's default implementation changes, `baseVersionCode` should be increased, the initial value should be `1`. + - For example, for a new theme with a new source, extention version code will be `0 + 0 + 1 = 1`. +- `IntelijConfigurationGeneratorMainKt` should be run on creating or removing a multisrc theme. + - On removing a theme, you can manually remove the corresponding configuration in the `.run` folder instead. + - Be careful if you're using sparse checkout. If other configurations are accidentally removed, `git add` the file you want and `git restore` the others. Another choice is to allow `/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/*` before running the generator. + +## Running + +To make local development more convenient, you can use the following run configuration to launch Aniyomi directly at the Browse panel: + +![](https://i.imgur.com/STy0UFY.png) + +If you're running a Preview or debug build of Aniyomi: + +``` +-W -S -n xyz.jmir.tachiyomi.mi.debug/eu.kanade.tachiyomi.ui.main.MainActivity -a eu.kanade.tachiyomi.SHOW_CATALOGUES +``` + +And for a release build of Aniyomi: + +``` +-W -S -n xyz.jmir.tachiyomi.mi/eu.kanade.tachiyomi.ui.main.MainActivity -a eu.kanade.tachiyomi.SHOW_CATALOGUES +``` + +If you're deploying to Android 11 or higher, enable the "Always install with package manager" option in the run configurations. + +## Debugging + +### Android Debugger + +You can leverage the Android Debugger to step through your extension while debugging. + +You *cannot* simply use Android Studio's `Debug 'module.name'` -> this will most likely result in an error while launching. + +Instead, once you've built and installed your extension on the target device, use `Attach Debugger to Android Process` to start debugging Aniyomi. + +![](https://i.imgur.com/muhXyfu.png) + + +### Logs + +You can also elect to simply rely on logs printed from your extension, which +show up in the [`Logcat`](https://developer.android.com/studio/debug/am-logcat) panel of Android Studio. + +### Inspecting network calls +One of the easiest way to inspect network issues (such as HTTP errors 404, 429, no chapter found etc.) is to use the [`Logcat`](https://developer.android.com/studio/debug/am-logcat) panel of Android Studio and filtering by the `OkHttpClient` tag. + +To be able to check the calls done by OkHttp, you need to enable verbose logging in the app, that is not enabled by default and is only included in the Preview versions of Aniyomi. To enable it, go to More -> Settings -> Advanced -> Verbose logging. After enabling it, don't forget to restart the app. + +Inspecting the Logcat allows you to get a good look at the call flow and it's more than enough in most cases where issues occurs. However, alternatively, you can also use an external tool like `mitm-proxy`. For that, refer to the next section. + +### Using external network inspecting tools +If you want to take a deeper look into the network flow, such as taking a look into the request and response bodies, you can use an external tool like `mitm-proxy`. + +#### Setup your proxy server +We are going to use [mitm-proxy](https://mitmproxy.org/) but you can replace it with any other Web Debugger (i.e. Charles, Burp Suite, Fiddler etc). To install and execute, follow the commands bellow. + +```console +Install the tool. +$ sudo pip3 install mitmproxy +Execute the web interface and the proxy. +$ mitmweb +``` + +Alternatively, you can also use the Docker image: + +``` +$ docker run --rm -it -p 8080:8080 \ + -p 127.0.0.1:8081:8081 \ + --web-host 0.0.0.0 \ + mitmproxy/mitmproxy mitmweb +``` + +After installing and running, open your browser and navigate to http://127.0.0.1:8081. + +#### OkHttp proxy setup +Since most of the manga sources are going to use HTTPS, we need to disable SSL verification in order to use the web debugger. For that, add this code to inside your source class: + +```kotlin +package eu.kanade.tachiyomi.animeextension.en.animesource + +import android.annotation.SuppressLint +import eu.kanade.tachiyomi.multisrc.animetheme.AnimeTheme +import okhttp3.OkHttpClient +import java.net.InetSocketAddress +import java.net.Proxy +import java.security.SecureRandom +import java.security.cert.X509Certificate +import javax.net.ssl.SSLContext +import javax.net.ssl.TrustManager +import javax.net.ssl.X509TrustManager + +class AnimeSource : AnimeTheme( + "AnimeSource", + "https://example.com", + "en" +) { + private fun OkHttpClient.Builder.ignoreAllSSLErrors(): OkHttpClient.Builder { + val naiveTrustManager = @SuppressLint("CustomX509TrustManager") + object : X509TrustManager { + override fun getAcceptedIssuers(): Array = emptyArray() + override fun checkClientTrusted(certs: Array, authType: String) = Unit + override fun checkServerTrusted(certs: Array, authType: String) = Unit + } + + val insecureSocketFactory = SSLContext.getInstance("TLSv1.2").apply { + val trustAllCerts = arrayOf(naiveTrustManager) + init(null, trustAllCerts, SecureRandom()) + }.socketFactory + + sslSocketFactory(insecureSocketFactory, naiveTrustManager) + hostnameVerifier { _, _ -> true } + return this + } + + override val client: OkHttpClient = network.client.newBuilder() + .ignoreAllSSLErrors() + .proxy(Proxy(Proxy.Type.HTTP, InetSocketAddress("10.0.2.2", 8080))) + .build() +} +``` + +Note: `10.0.2.2` is usually the address of your loopback interface in the android emulator. If Aniyomi tells you that it's unable to connect to 10.0.2.2:8080 you will likely need to change it (the same if you are using hardware device). + +If all went well, you should see all requests and responses made by the source in the web interface of `mitmweb`. + +## Building + +APKs can be created in Android Studio via `Build > Build Bundle(s) / APK(s) > Build APK(s)` or `Build > Generate Signed Bundle / APK`. + +## Submitting the changes + +When you feel confident about your changes, submit a new Pull Request so your code can be reviewed and merged if it's approved. We encourage following a [GitHub Standard Fork & Pull Request Workflow](https://gist.github.com/Chaser324/ce0505fbed06b947d962) and following the good practices of the workflow, such as not commiting directly to `master`: always create a new branch for your changes. + +If you are more comfortable about using Git GUI-based tools, you can refer to [this guide](https://learntodroid.com/how-to-use-git-and-github-in-android-studio/) about the Git integration inside Android Studio, specifically the "How to Contribute to an to Existing Git Repository in Android Studio" section of the guide. + +Please **do test your changes by compiling it through Android Studio** before submitting it. Also make sure to follow the PR checklist available in the PR body field when creating a new PR. As a reference, you can find it below. + +### Pull Request checklist + +- Update `extVersionCode` value in `build.gradle` for individual extensions +- Update `overrideVersionCode` or `baseVersionCode` as needed for all multisrc extensions +- Reference all related issues in the PR body (e.g. "Closes #xyz") +- Add the `isNsfw = true` flag in `build.gradle` when appropriate +- Explicitly kept the `id` if a source's name or language were changed +- Test the modifications by compiling and running the extension through Android Studio diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..8f71f43f --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/README.md b/README.md new file mode 100644 index 00000000..dff9521d --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# aniyomi-extensions + extension source diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..98a6d7a5 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,21 @@ +buildscript { + repositories { + mavenCentral() + google() + maven(url = "https://plugins.gradle.org/m2/") + } + dependencies { + classpath(libs.gradle.agp) + classpath(libs.gradle.kotlin) + classpath(libs.gradle.kotlin.serialization) + classpath(libs.gradle.kotlinter) + } +} + +allprojects { + tasks.withType().configureEach { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } + } +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 00000000..21d0f6cc --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,10 @@ +plugins { + `kotlin-dsl` +} + +dependencies { + implementation(libs.gradle.agp) + implementation(libs.gradle.kotlin) + implementation(libs.gradle.kotlin.serialization) + implementation(libs.gradle.kotlinter) +} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 00000000..b7e30c8e --- /dev/null +++ b/buildSrc/settings.gradle.kts @@ -0,0 +1,9 @@ +apply(from = "../repositories.gradle.kts") + +dependencyResolutionManagement { + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} diff --git a/buildSrc/src/main/kotlin/AndroidConfig.kt b/buildSrc/src/main/kotlin/AndroidConfig.kt new file mode 100644 index 00000000..5e3f111b --- /dev/null +++ b/buildSrc/src/main/kotlin/AndroidConfig.kt @@ -0,0 +1,8 @@ +object AndroidConfig { + const val compileSdk = 32 + const val minSdk = 21 + const val targetSdk = 32 + const val namespace = "eu.kanade.tachiyomi.animeextension" + const val coreNamespace = "eu.kanade.tachiyomi.lib.core" + const val multisrcNamespace = "eu.kanade.tachiyomi.lib.themesources" +} diff --git a/buildSrc/src/main/kotlin/Extensions.kt b/buildSrc/src/main/kotlin/Extensions.kt new file mode 100644 index 00000000..12eff37a --- /dev/null +++ b/buildSrc/src/main/kotlin/Extensions.kt @@ -0,0 +1,6 @@ +import org.gradle.api.plugins.ExtensionAware +import org.gradle.kotlin.dsl.extra + +var ExtensionAware.baseVersionCode: Int + get() = extra.get("baseVersionCode") as Int + set(value) = extra.set("baseVersionCode", value) diff --git a/buildSrc/src/main/kotlin/lib-android.gradle.kts b/buildSrc/src/main/kotlin/lib-android.gradle.kts new file mode 100644 index 00000000..2d9eebc6 --- /dev/null +++ b/buildSrc/src/main/kotlin/lib-android.gradle.kts @@ -0,0 +1,24 @@ +plugins { + id("com.android.library") + kotlin("android") + id("kotlinx-serialization") +} + +android { + compileSdk = AndroidConfig.compileSdk + + defaultConfig { + minSdk = AndroidConfig.minSdk + } + + namespace = "eu.kanade.tachiyomi.lib.${name.replace("-", "")}" +} + +versionCatalogs + .named("libs") + .findBundle("common") + .ifPresent { common -> + dependencies { + compileOnly(common) + } + } diff --git a/buildSrc/src/main/kotlin/lib-kotlin.gradle.kts b/buildSrc/src/main/kotlin/lib-kotlin.gradle.kts new file mode 100644 index 00000000..f800de6e --- /dev/null +++ b/buildSrc/src/main/kotlin/lib-kotlin.gradle.kts @@ -0,0 +1,13 @@ +plugins { + `java-library` + kotlin("jvm") +} + +versionCatalogs + .named("libs") + .findLibrary("kotlin-stdlib") + .ifPresent { stdlib -> + dependencies { + compileOnly(stdlib) + } + } diff --git a/buildSrc/src/main/kotlin/lib-multisrc.gradle.kts b/buildSrc/src/main/kotlin/lib-multisrc.gradle.kts new file mode 100644 index 00000000..57e86f95 --- /dev/null +++ b/buildSrc/src/main/kotlin/lib-multisrc.gradle.kts @@ -0,0 +1,55 @@ +plugins { + id("com.android.library") + kotlin("android") + id("kotlinx-serialization") + id("org.jmailen.kotlinter") +} + +android { + compileSdk = AndroidConfig.compileSdk + + defaultConfig { + minSdk = AndroidConfig.minSdk + } + + namespace = "eu.kanade.tachiyomi.multisrc.${project.name}" + + sourceSets { + named("main") { + manifest.srcFile("AndroidManifest.xml") + java.setSrcDirs(listOf("src")) + res.setSrcDirs(listOf("res")) + assets.setSrcDirs(listOf("assets")) + } + } + + buildFeatures { + resValues = false + shaders = false + } + + kotlinOptions { + freeCompilerArgs += "-opt-in=kotlinx.serialization.ExperimentalSerializationApi" + } +} + +versionCatalogs + .named("libs") + .findBundle("common") + .ifPresent { common -> + dependencies { + compileOnly(common) + } + } + +tasks { + preBuild { + dependsOn(lintKotlin) + } + + if (System.getenv("CI") != "true") { + lintKotlin { + dependsOn(formatKotlin) + } + } +} diff --git a/common.gradle b/common.gradle new file mode 100644 index 00000000..fa09e223 --- /dev/null +++ b/common.gradle @@ -0,0 +1,133 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' +apply plugin: 'org.jmailen.kotlinter' + +assert !ext.has("pkgNameSuffix") +assert !ext.has("libVersion") + +assert extName.chars().max().asInt < 0x180 : "Extension name should be romanized" + +Project theme = ext.has("themePkg") ? project(":lib-multisrc:$themePkg") : null +if (theme != null) evaluationDependsOn(theme.path) + +android { + compileSdkVersion AndroidConfig.compileSdk + namespace AndroidConfig.namespace + + sourceSets { + main { + manifest.srcFile "AndroidManifest.xml" + java.srcDirs = ['src'] + res.srcDirs = ['res'] + } + release { + manifest.srcFile "AndroidManifest.xml" + } + debug { + manifest.srcFile "AndroidManifest.xml" + } + } + + defaultConfig { + minSdkVersion AndroidConfig.minSdk + targetSdkVersion AndroidConfig.targetSdk + applicationIdSuffix project.parent.name + "." + project.name + versionCode theme == null ? extVersionCode : theme.baseVersionCode + overrideVersionCode + versionName "14.$versionCode" + base { + archivesName = "aniyomi-$applicationIdSuffix-v$versionName" + } + assert extClass.startsWith(".") + manifestPlaceholders = [ + appName : "Aniyomi: $extName", + extClass: extClass, + nsfw : project.ext.find("isNsfw") ? 1 : 0, + ] + String baseUrl = project.ext.find("baseUrl") ?: "" + if (theme != null && !baseUrl.isEmpty()) { + def split = baseUrl.split("://") + assert split.length == 2 + def path = split[1].split("/") + manifestPlaceholders += [ + SOURCEHOST : path[0], + SOURCESCHEME: split[0], + ] + } + + } + + signingConfigs { + release { + storeFile rootProject.file("signingkey.jks") + storePassword System.getenv("KEY_STORE_PASSWORD") + keyAlias System.getenv("ALIAS") + keyPassword System.getenv("KEY_PASSWORD") + } + } + + buildTypes { + release { + signingConfig signingConfigs.release + minifyEnabled false + } + } + + dependenciesInfo { + includeInApk = false + } + + buildFeatures { + // Disable unused AGP features + aidl false + renderScript false + resValues false + shaders false + buildConfig true + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + freeCompilerArgs += "-opt-in=kotlinx.serialization.ExperimentalSerializationApi" + } +} + +dependencies { + if (theme != null) implementation(theme) // Overrides core launcher icons + implementation(project(":core")) + compileOnly(libs.bundles.common) +} + +configurations.all { + resolutionStrategy.eachDependency { DependencyResolveDetails details -> + if (details.requested.group == 'org.jetbrains.kotlin' && details.requested.name == 'kotlin-stdlib-jdk8' && details.requested.version == '1.7.0') { + details.useVersion(libs.versions.kotlin.version.get()) + details.because 'Fix problems with dev.datlag JsUnpacker' + } + } +} + +tasks.register("writeManifestFile") { + doLast { + def manifest = android.sourceSets.getByName("main").manifest + if (!manifest.srcFile.exists()) { + File tempFile = layout.buildDirectory.get().file("tempAndroidManifest.xml").getAsFile() + if (!tempFile.exists()) { + tempFile.withWriter { + it.write('\n\n') + } + } + manifest.srcFile(tempFile.path) + } + } +} + +preBuild.dependsOn(writeManifestFile, lintKotlin) +if (System.getenv("CI") != "true") { + lintKotlin.dependsOn(formatKotlin) +} diff --git a/core/AndroidManifest.xml b/core/AndroidManifest.xml new file mode 100644 index 00000000..6972ec62 --- /dev/null +++ b/core/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/core/build.gradle.kts b/core/build.gradle.kts new file mode 100644 index 00000000..dcd5b361 --- /dev/null +++ b/core/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + id("com.android.library") +} + +android { + compileSdk = AndroidConfig.compileSdk + namespace = AndroidConfig.coreNamespace + + defaultConfig { + minSdk = AndroidConfig.minSdk + } + + sourceSets { + named("main") { + manifest.srcFile("AndroidManifest.xml") + res.setSrcDirs(listOf("res")) + } + } + + libraryVariants.all { + generateBuildConfigProvider?.configure { + enabled = false + } + } +} diff --git a/core/res/mipmap-hdpi/ic_launcher.png b/core/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..3e78412b0062ffe9d381a0ab0450e946f2577f66 GIT binary patch literal 2656 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 literal 0 HcmV?d00001 diff --git a/core/res/mipmap-xxhdpi/ic_launcher.png b/core/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..99590ff99166d58b461b4afa03acd8028c97330d GIT binary patch literal 6714 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 literal 0 HcmV?d00001 diff --git a/core/res/mipmap-xxxhdpi/ic_launcher.png b/core/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9ddcbc0287f144e646d1576f02a32cc00c5aeb14 GIT binary patch literal 9726 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 Ld7)4wXX5{VWuQm% literal 0 HcmV?d00001 diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..022f4950 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,25 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx5120m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +org.gradle.parallel=true +org.gradle.workers.max=5 + +org.gradle.caching=true + +# Enable AndroidX dependencies +android.useAndroidX=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..e51cd920 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,29 @@ +[versions] +agp_version = "8.2.1" +coroutines_version = "1.7.1" +kotlin_version = "1.8.22" +serialization_version = "1.5.1" + +[libraries] +gradle-agp = { module = "com.android.tools.build:gradle", version.ref = "agp_version" } +gradle-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin_version" } +gradle-kotlin-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin_version" } +gradle-kotlinter = { module = "org.jmailen.gradle:kotlinter-gradle", version = "3.15.0" } + +aniyomi-lib = { module = "com.github.aniyomiorg:extensions-lib", version = "14" } + +kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin_version" } +kotlin-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf", version.ref = "serialization_version" } +kotlin-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "serialization_version" } + +coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines_version" } +coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines_version" } + +injekt-core = { module = "com.github.inorichi.injekt:injekt-core", version = "65b0440" } +rxjava = { module = "io.reactivex:rxjava", version = "1.3.8" } +jsoup = { module = "org.jsoup:jsoup", version = "1.16.1" } +okhttp = { module = "com.squareup.okhttp3:okhttp", version = "5.0.0-alpha.11" } +quickjs = { module = "app.cash.quickjs:quickjs-android", version = "0.9.2" } + +[bundles] +common = ["kotlin-stdlib", "injekt-core", "rxjava", "kotlin-protobuf", "kotlin-json", "jsoup", "okhttp", "aniyomi-lib", "quickjs", "coroutines-core", "coroutines-android"] diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..d64cd4917707c1f8861d8cb53dd15194d4248596 GIT binary patch literal 43462 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 literal 0 HcmV?d00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..1af9e093 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 00000000..1aa94a42 --- /dev/null +++ b/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..93e3f59f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/ktlintCodeStyle.xml b/ktlintCodeStyle.xml new file mode 100644 index 00000000..e1422c7c --- /dev/null +++ b/ktlintCodeStyle.xml @@ -0,0 +1,136 @@ + + + + + + + + + +

+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+ + + + + + \ No newline at end of file diff --git a/lib-multisrc/animestream/AndroidManifest.xml b/lib-multisrc/animestream/AndroidManifest.xml new file mode 100644 index 00000000..15e586eb --- /dev/null +++ b/lib-multisrc/animestream/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + diff --git a/lib-multisrc/animestream/build.gradle.kts b/lib-multisrc/animestream/build.gradle.kts new file mode 100644 index 00000000..5e2a19a1 --- /dev/null +++ b/lib-multisrc/animestream/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + id("lib-multisrc") +} + +baseVersionCode = 2 \ No newline at end of file diff --git a/lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStream.kt b/lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStream.kt new file mode 100644 index 00000000..fbd2a189 --- /dev/null +++ b/lib-multisrc/animestream/src/eu/kanade/tachiyomi/multisrc/animestream/AnimeStream.kt @@ -0,0 +1,431 @@ +package eu.kanade.tachiyomi.multisrc.animestream + +import android.app.Application +import android.util.Base64 +import android.util.Log +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilter +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters.GenresFilter +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters.OrderFilter +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters.SeasonFilter +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters.StatusFilter +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters.StudioFilter +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters.SubFilter +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStreamFilters.TypeFilter +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.awaitSuccess +import eu.kanade.tachiyomi.util.asJsoup +import eu.kanade.tachiyomi.util.parallelCatchingFlatMapBlocking +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withContext +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull +import okhttp3.Request +import okhttp3.Response +import org.jsoup.Jsoup +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import java.text.SimpleDateFormat +import java.util.Locale + +abstract class AnimeStream( + override val lang: String, + override val name: String, + override val baseUrl: String, +) : ConfigurableAnimeSource, ParsedAnimeHttpSource() { + + override val supportsLatest = true + + protected open val preferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + companion object { + const val PREFIX_SEARCH = "path:" + } + + protected open val prefQualityDefault = "720p" + protected open val prefQualityKey = "preferred_quality" + protected open val prefQualityTitle = when (lang) { + "pt-BR" -> "Qualidade preferida" + else -> "Preferred quality" + } + protected open val prefQualityValues = arrayOf("1080p", "720p", "480p", "360p") + protected open val prefQualityEntries = prefQualityValues + + protected open val videoSortPrefKey = prefQualityKey + protected open val videoSortPrefDefault = prefQualityDefault + + protected open val dateFormatter by lazy { + val locale = when (lang) { + "pt-BR" -> Locale("pt", "BR") + else -> Locale.ENGLISH + } + SimpleDateFormat("MMMM d, yyyy", locale) + } + + protected open val animeListUrl = "$baseUrl/anime" + + // ============================== Popular =============================== + override suspend fun getPopularAnime(page: Int): AnimesPage { + fetchFilterList() + return super.getPopularAnime(page) + } + + override fun popularAnimeRequest(page: Int) = GET("$animeListUrl/?page=$page&order=popular") + + override fun popularAnimeSelector() = searchAnimeSelector() + + override fun popularAnimeFromElement(element: Element) = searchAnimeFromElement(element) + + override fun popularAnimeNextPageSelector(): String? = searchAnimeNextPageSelector() + + // =============================== Latest =============================== + override suspend fun getLatestUpdates(page: Int): AnimesPage { + fetchFilterList() + return super.getLatestUpdates(page) + } + + override fun latestUpdatesRequest(page: Int) = GET("$animeListUrl/?page=$page&order=update") + + override fun latestUpdatesSelector() = searchAnimeSelector() + + override fun latestUpdatesFromElement(element: Element) = searchAnimeFromElement(element) + + override fun latestUpdatesNextPageSelector(): String? = searchAnimeNextPageSelector() + + // =============================== Search =============================== + override suspend fun getSearchAnime(page: Int, query: String, filters: AnimeFilterList): AnimesPage { + return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler + val path = query.removePrefix(PREFIX_SEARCH) + client.newCall(GET("$baseUrl/$path")) + .awaitSuccess() + .use(::searchAnimeByPathParse) + } else { + super.getSearchAnime(page, query, filters) + } + } + + protected open fun searchAnimeByPathParse(response: Response): AnimesPage { + val details = animeDetailsParse(response.asJsoup()) + return AnimesPage(listOf(details), false) + } + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request { + val params = AnimeStreamFilters.getSearchParameters(filters) + return if (query.isNotEmpty()) { + GET("$baseUrl/page/$page/?s=$query") + } else { + val multiString = buildString { + if (params.genres.isNotEmpty()) append(params.genres + "&") + if (params.seasons.isNotEmpty()) append(params.seasons + "&") + if (params.studios.isNotEmpty()) append(params.studios + "&") + } + + GET("$animeListUrl/?page=$page&$multiString&status=${params.status}&type=${params.type}&sub=${params.sub}&order=${params.order}") + } + } + + override fun searchAnimeSelector() = "div.listupd article a.tip" + + override fun searchAnimeFromElement(element: Element): SAnime { + return SAnime.create().apply { + setUrlWithoutDomain(element.attr("abs:href")) + title = element.selectFirst("div.tt, div.ttl")!!.ownText() + thumbnail_url = element.selectFirst("img")?.getImageUrl() + } + } + + override fun searchAnimeNextPageSelector(): String? = "div.pagination a.next, div.hpage > a.r" + + // ============================== Filters =============================== + + /** + * Disable it if you don't want the filters to be automatically fetched. + */ + protected open val fetchFilters = true + + protected open val filtersSelector = "span.sec1 > div.filter > ul" + + private fun fetchFilterList() { + if (fetchFilters && !AnimeStreamFilters.filterInitialized()) { + AnimeStreamFilters.filterElements = runBlocking { + withContext(Dispatchers.IO) { + client.newCall(GET(animeListUrl)).execute() + .asJsoup() + .select(filtersSelector) + } + } + } + } + + protected open val filtersHeader = when (lang) { + "pt-BR" -> "NOTA: Filtros serão ignorados se usar a pesquisa por nome!" + else -> "NOTE: Filters are going to be ignored if using search text!" + } + + protected open val filtersMissingWarning: String = when (lang) { + "pt-BR" -> "Aperte 'Redefinir' para tentar mostrar os filtros" + else -> "Press 'Reset' to attempt to show the filters" + } + + protected open val genresFilterText = when (lang) { + "pt-BR" -> "Gêneros" + else -> "Genres" + } + + protected open val seasonsFilterText = when (lang) { + "pt-BR" -> "Temporadas" + else -> "Seasons" + } + + protected open val studioFilterText = when (lang) { + "pt-BR" -> "Estúdios" + else -> "Studios" + } + + protected open val statusFilterText = "Status" + + protected open val typeFilterText = when (lang) { + "pt-BR" -> "Tipo" + else -> "Type" + } + + protected open val subFilterText = when (lang) { + "pt-BR" -> "Legenda" + else -> "Subtitle" + } + + protected open val orderFilterText = when (lang) { + "pt-BR" -> "Ordem" + else -> "Order" + } + + override fun getFilterList(): AnimeFilterList { + return if (fetchFilters && AnimeStreamFilters.filterInitialized()) { + AnimeFilterList( + GenresFilter(genresFilterText), + SeasonFilter(seasonsFilterText), + StudioFilter(studioFilterText), + AnimeFilter.Separator(), + StatusFilter(statusFilterText), + TypeFilter(typeFilterText), + SubFilter(subFilterText), + OrderFilter(orderFilterText), + ) + } else if (fetchFilters) { + AnimeFilterList(AnimeFilter.Header(filtersMissingWarning)) + } else { + AnimeFilterList() + } + } + + // =========================== Anime Details ============================ + protected open val animeDetailsSelector = "div.info-content, div.right ul.data" + protected open val animeAltNameSelector = ".alter" + protected open val animeTitleSelector = "h1.entry-title" + protected open val animeThumbnailSelector = "div.thumb > img, div.limage > img" + protected open val animeGenresSelector = "div.genxed > a, li:contains(Genre:) a" + protected open val animeDescriptionSelector = ".entry-content[itemprop=description], .desc" + protected open val animeAdditionalInfoSelector = "div.spe > span, li:has(b)" + + protected open val animeStatusText = "Status" + protected open val animeAuthorText = "Fansub" + protected open val animeArtistText = when (lang) { + "pt-BR" -> "Estudio" + else -> "Studio" + } + + protected open val animeAltNamePrefix = when (lang) { + "pt-BR" -> "Nome(s) alternativo(s): " + else -> "Alternative name(s): " + } + + protected open fun getAnimeDescription(document: Document) = + document.selectFirst(animeDescriptionSelector)?.text() + + override fun animeDetailsParse(document: Document): SAnime { + return SAnime.create().apply { + setUrlWithoutDomain(document.location()) + title = document.selectFirst(animeTitleSelector)!!.text() + thumbnail_url = document.selectFirst(animeThumbnailSelector)?.getImageUrl() + + val infos = document.selectFirst(animeDetailsSelector)!! + genre = infos.select(animeGenresSelector).eachText().joinToString() + + status = parseStatus(infos.getInfo(animeStatusText)) + artist = infos.getInfo(animeArtistText) + author = infos.getInfo(animeAuthorText) + + description = buildString { + getAnimeDescription(document)?.also { + append("$it\n\n") + } + + document.selectFirst(animeAltNameSelector)?.text() + ?.takeIf(String::isNotBlank) + ?.also { append("$animeAltNamePrefix$it\n") } + + infos.select(animeAdditionalInfoSelector).eachText().forEach { + append("$it\n") + } + } + } + } + + // ============================== Episodes ============================== + override fun episodeListParse(response: Response): List { + val doc = response.asJsoup() + return doc.select(episodeListSelector()).map(::episodeFromElement) + } + + override fun episodeListSelector() = "div.eplister > ul > li > a" + + protected open val episodePrefix = when (lang) { + "pt-BR" -> "Episódio" + else -> "Episode" + } + + @Suppress("unused_parameter") + protected open fun getEpisodeName(element: Element, epNum: String) = "$episodePrefix $epNum" + + override fun episodeFromElement(element: Element): SEpisode { + return SEpisode.create().apply { + setUrlWithoutDomain(element.attr("href")) + element.selectFirst(".epl-num")!!.text().let { + name = getEpisodeName(element, it) + episode_number = it.substringBefore(" ").toFloatOrNull() ?: 0F + } + element.selectFirst(".epl-sub")?.text()?.let { scanlator = it } + date_upload = element.selectFirst(".epl-date")?.text().toDate() + } + } + + // ============================ Video Links ============================= + override fun videoListSelector() = "select.mirror > option[data-index], ul.mirror a[data-em]" + + override fun videoListParse(response: Response): List
)4xU-NdA_6wYbI#s55HsPR%l78JCOyJ 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 LUG}@QY0&=w$(@7g literal 0 HcmV?d00001 diff --git a/src/en/animekhor/src/eu/kanade/tachiyomi/animeextension/en/animekhor/AnimeKhor.kt b/src/en/animekhor/src/eu/kanade/tachiyomi/animeextension/en/animekhor/AnimeKhor.kt new file mode 100644 index 00000000..321e1ac3 --- /dev/null +++ b/src/en/animekhor/src/eu/kanade/tachiyomi/animeextension/en/animekhor/AnimeKhor.kt @@ -0,0 +1,38 @@ +package eu.kanade.tachiyomi.animeextension.en.animekhor + +import eu.kanade.tachiyomi.animeextension.en.animekhor.extractors.StreamHideExtractor +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.lib.okruextractor.OkruExtractor +import eu.kanade.tachiyomi.lib.streamwishextractor.StreamWishExtractor +import eu.kanade.tachiyomi.multisrc.animestream.AnimeStream + +class AnimeKhor : AnimeStream( + "en", + "AnimeKhor", + "https://animekhor.xyz", +) { + // ============================ Video Links ============================= + + override fun getVideoList(url: String, name: String): List
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.getSharedPreferences("source_$id", 0x0000) + } + + // Popular + override fun popularAnimeRequest(page: Int): Request = + GET("$apiUrl/search.php?dub=0&sort=popular-week&page=$page") + + override fun popularAnimeParse(response: Response): AnimesPage { + val responseJson = json.decodeFromString(response.body.string()) + val animes = responseJson.map { anime -> + val data = anime.jsonArray + + SAnime.create().apply { + title = data[0].jsonPrimitive.content + url = data[1].jsonPrimitive.content + thumbnail_url = data[2].jsonPrimitive.content + } + } + val hasNextPage = responseJson.size >= 25 + + return AnimesPage(animes, hasNextPage) + } + + // Episode + override fun episodeListRequest(anime: SAnime): Request { + return GET("$apiUrl/episodes.php?id=${anime.url}", headers) + } + + override fun episodeListParse(response: Response): List { + val responseJson = json.decodeFromString(response.body.string()) + val episodes = responseJson.map { episode -> + val data = episode.jsonArray + + SEpisode.create().apply { + name = "Episode ${data[2]}" + url = data[1].jsonPrimitive.content + episode_number = data[2].jsonPrimitive.float + date_upload = data[3].jsonPrimitive.long.toMilli() + } + } + return episodes + } + + // Video urls + override fun videoListRequest(episode: SEpisode): Request = + GET("$apiUrl/episode.php?id=${episode.url}", headers) + + override fun videoListParse(response: Response): List

Nb+Nl`fRy>5lWY0 zzwUT?LTGJrf)je*LTO&OJ{wCr{C?bo_)66~usx^KzqNMT?bV{ z@%S$QTQuND5m{+;iu3rWOH)lZ%)Ekhb=vluO*& zv0vrQ;Zl1r8^MuJ=E2AU-|^N-)MOnvw(S0y#}*pfvAbIVnp6G0IuqoPc_$IM&F&GV z@4udg$Hyf*P?$R_|Bz4qc@6!otasMaYR?!=TR{-3-K_{+2{s);L1CBs167}$EP)Np zr$K0vn@LZSP|Z1{&0X_3Hu@eQ6SqPfI{LD}4t>q&LcPFCT%wcL_dD~;W7;M4CUv{K z$M=cNZl8UVr<+5bw_dbhBC1?D5NLHNM%^6=QGBQ`BxkTA&R=O--8b`Zz5Of9_JC4n zFe)*<^@odyhz`_>4-d4mjH}rrVl{ec>VSNL-|_JiOiX;L@gUb94NWyg+!*+^FR zTHA9O8he=_Iz*ixW=P#_RDexA;l6Vi*#4x) z{Y35|*mOM9`25%Ez~>0)nExo4y{c+Bi_WUsXGmJzv0-d7lG$#rJE64wL<;FEn(tQ?26(QpAckj7vR7 z3!CBsJojJIXGRmq+CT(aOgJmM!k${pz1x!WULZ$Wjbo?>HAsB`9}RRwNX+~3mn;| z)$-?#`P*$%`C(T*1W*nhXFAQwnK+3zcXY1W9oZO+1K5;oVsNyxF^$^rh0!EW&?J&Y zAdN$Mp)Dr|Gv6%V*%%U<$P^PA8Y+fOi=WHzAuj?NR`l&kR7nF}Cd_t|8wO;(feV5< zxk{7$PQ>j?^FdWy_Osl51NeFM-p%RoyVuiW;Z35LvatT6&glfx>S%=XsON!^E{~xv zRU?XG`*eBKjpSEMq~BB$fjKF$MfDU!qhCAkPTvhjlUW}Qav@^YA2h$zsC%|Ju^cU< zaKvF^{a9a}VKqKUt}N#sZlQxp!ghPI8ljR;b>n|KFRgIAv5aB73?pi>^l&~%k73q_ z`du)v?4W9HZl181*|I$0o^mV7&n=)&y&VQ5FK(qU_Z80_`GA3XWcz*w1ZlqIe@c&C*6&?-#n!rpRo^6vt){cQtVL3ovvqIkM2EGBI`j`xhC|7aPp^7l zTVJk5CLZ=mD=NMB6}@WD$Zb~|l^e{PF+e~7tI14*?4ZA|*Rc1uQR5@fkB~1_hu49g z#!&LG$krugaYGh~wY!KG`G{zF`LOKJu~olpk7A2(5z%u@Wc`r=u0cwCNle%FLq9N) z;xCW~j9rmp5|U89@r9%kV|jM?vA#`im&T(ym7owcO5ZjnrKy+Cham%REA}cTWT4rg zXmOfOlvWJ{^j7a!S@3`DpT^6EY@;6ARB?+PtC&jiMFMr7vOII%k&hOcq*|VlOvOgw z;KA++?b_M!_P9VHXicBjM~l|mx#fr52FBW=;WMynPF`6AeXGL&j=PItLOo*hj;Yjq z9KXqBP9IOZic|m!VSXGGXsW4p5VqCFJt@Q&wBHKY-t zZ)!5q@uxG2k_4!=ve1EwgP!OIMZZZ9aZS~t`xz`N)}yHfcjrM>E{n$w9tHI=HK7cV zOT1S|YdWFiM1Y);VKa!vx-YIA>X3R>6?f~9KKx=3rF|~wtF5g(lkCKBSlOUyqunzX zgKi_DL&qx)z>QnaO*e?n*iB5>O-NXA9~Kw8U4`}?%-oAo6do-4dL71j*|E%)u~qlf zLoeKR!Mi}eJ?=ZKcwLWacK8I)BCI}n9G z1O~EvBzX;Z@(H8!dfeS_yzDo6cs}pwK}HBAY|yzoN)$+NmRN|P^v52_7NHpluAHSacZOigAm&v zAKrltA59X_TAfUplyaCwk>!0gV5BI9b39d9F;$hW}|Rn6Oozos|{pr-hL3 zX6}Hs!&EU7HW?quBLT5bBbrK~d{+TuT7rf^;NilEi3S^eDo{U_jp72%!`+~zxx|5h zUogd2!!f`iOZ(SS(o!N*1` zNX&m(M-x-I>}{lh?WX-qvE^;0$sv?zh&`PHd3+pS{utDv;=wNvzgc!hh~q{lR74gF zk;7jPxi#Zx5ebE)3M>M40&u{IJcIrV57U<)a8endP%Pu;<@ZMdu@Fcvb(RmA88V`5 z4*T|e2}7&m#F5+Rk`x6riR_|zK=IkWKE8#^h4CD=~~j_NjOyFAj2o4m`Vp_+m)m zp($FW$f2C{rCFkTWZ?;tP^tI`Tu0nmJLa?%eF?5y0t(o2%&b+?QTej|Ax#KA6D~EJ zcRmLHI|2TkF(85f{@M&Olu3CTZpL%dqY-`aQ>2X1(?W)%>x=CnI)ZaYds3?Jrd3Ca zrPKwhF5Jy7#|3G(3e-RQ9=)ILMGg#7FSPnu-6fg4VoJ_q__rw`kOcUGLa2DHhhbrQ zdjS>mD`2BOUL;vm(r+>6^m*QPwbkr^(rIY!n3tg==dw=@f_Bq8#g zi?y4f;>F`Pr|6F$g7n6l_Rxx?icq%vi6NGtkgi7Bo`Dh%xgSsVQ=?ypZIYLM#A1X< zPh#;p9AA2_HF;a6?3M+W3`Y&8!E)B#0Zk91gULS&t!ClT{B&fbN*KqGDFHhFc0K%H z4BsPhs$U4$L-(yzSw~v~Wd_v`2HvlnjnCs&mj8-kHYJ$;&7h~RQ?tHrvqoetfJr{Wy6!(?90+40bRcTjG4!z8C)XUE8>^ zqgY?n?fH8>dG4X`2J#Bmout5h_lV}@6CHL^d?2IdFU#vzlL8AOd~Lg%gV?7Vn2JW| zd%%1Ggw(J;lI(iXG-zw0`353HRA7vc0I5X4(%^oLn_aZ9dk{G;y%Jpk^q6fOi1?Aw z1v!WvFZWypDoL??xa^*wyr0rTT3cUyDOR>-{wio!sZe`2vf9(X{Cgq<5uwkG2@2B> zli0aG)XC1sdQQC-78aVEjB#&A$ut}jottb^rRaTfqSZ?sE>wY)*6s`l=TEtj8`1pY zOVisc9^&zqXBcrpT5Sg{x@@fumXSdMmP%pTA2NC!H>_C0fz zl*C)9>$k5dyN7b-RW%!fPU{EsF;B$jyK~nuvB``t8+0F|}J%C7+otxs1YJjW+L z<>mNGpWQa|_kTRwxo%u+_S9>-SZjD>gcZ=IW-=OmZdE;o@|E^eljxV8t>MS6zAT0()-v0& zub;KcB~Iqoefq%qkLdpmDgk3fxQ4jV>8NReM6#&?1dl61-!?8`5tQ5iVPH7H0p-sa z|3`kW>&dpJ_FG%kB&7){`O5~0^dqwPIV)<)1uXBF#k5i9q!4J;ev;Z)aG@5so=7n5S> z(_SQ*a)A%Da*V4)EowfkTtKt&h!C`K>E?z}iAX-FZTs(4Dwde&F*!2r!qaI!js?61 z4Tvd2gVkOaM41w96T%+{zeqRS4uO>^ol2oZHfXYQqJ-06Enh*4Sb56`!{tx`UBEDC z!}>M+Tm(se>;Mi$6bgOBGJFE4t2{*Z*|12Uri9hvRQmqiWBN5hy*3akLj zx7(9qv$VtmZ*_`%;Qkc4i|2egD_||PhYU_6Xa{T>m;L{QADeJdNtWQBg7Fm%g?B@far~Kb5ZY#>c#)B^N#@k9d z;w1(TO|In6R1pS_i=UD?Ex5F6Es5CBz8@P+WUjjHrC40rkX!58Mguxbi!j^ocsHJdVZU7eME|3fhR`jAR;<<=s2$iV zQX^voI_zG?k~!~AY zGIpIZa$0m31Ia5H8HKL4nZoU-V+Roc@HpF1Ad3Db{74*%Q~C4Z25zw@RuL-LLnqbc zIR%%R`q4^ZPZCSOBzC1$syiC+@~{cLxxt|A66Fk_NW7LUsjXi>8E3gco$W_a(4>yWW3l(Z83A|s?4~`E0GxKwM7xsEa?N@62l*Z-2Wy;CL1<$Bc z+gaTQ*{scMb2*ZQy^oF`7Y8wdMixtdh^KQBP7<&=L&Uo@Ba{{4y|>NPF{HkrZHHm(B1Pj1BDX)_2P0dN4q z>P8ou#m;`g_&5bNH}{rLbwU7CyrQlh!iG1tF-f>Doop2^_ad0+GE2x|96QrQv--k1 z2QVn@=?c=!F)?u+|AuLqnEHvqZ=t+37F)0P!nFwzrhAv#oWE6?vt)ag2Z+E7-U$@a zf=zBvXRZ5CfA(J!P@;cVLKA5GD{50{$oBi$Hmd!bbDVGkn?m#bC9ieD`4ONvo zj9dTTsU*NaN;;8YS%jdSvYH*4rmr^;Zy87SfCJSL1s^f9et?DJQFdX=Gs}8#-o9;G z>3$>QB++^W_%`S@w{4e`#kK)X<*TL7pQS3;J-1>Wum8)}z~gv+H?@4Yz!)4s&rDHQ zeEZAF#1fZ!g24#!kz`{jf_ztj_2}1OELsL#S(*#|~Kn?4kHjTn}lqtwg{}p2q zd7mf)Q0n3hVddVI5`4kc%c5qT>>XVXl=ZjldUnQ?7%sqi1B?=>FITQ7jPL&nHs?D> z`sQW|@=eVYuQqRn7G{d3)!V_CUZD|pFHDhN-nG~?3M#S_i60p#^~*l?ibI`OEc*g9 z-Sl*yI@t8t5_(UU^Y52qYMeX61T5CFw^X5Nik4-l&$Yrqol%_`*D+Z^VS` z8850R1^f%%hyegWgW5OoX*pT>&ZRn=A07~Ph25fAUxt@lNz{RG=JpbvH>{=a6dlty z&&Z+(z*vAi`>(<|x|BZk-EqK|BRpmB>>3p;>_2bgQ84rZG zc%200>(pT2usPpxI;KmX=io#-5klD~mN3fRM-v zaZR4+6k-z~fkG^nq@u{$YQ9urtLfQ2@dV*AJPY`FdD^gk1Pvwllw)d3h0wCC(rytn zzf8Rr3|!Db$7H;q$)#6_;XFYDiNVX1a>HQ$iZq6JBr(wnl$ zyFRT_O%)dUDS+nm0-uQ4(sePPH;ft$20_=b2PK{}O#y*(j2nT{B;B@e&8HXd?GM-* zsQ3{*A=i3~&lUmB!yTDzaVwEs0r1-~?$_Tse7xn@5=tKj&tcD#nd$h#T!>pCpJ&c{ z64!k=1+&&0mBl{bJAXQB^k!ot;Hn*jk-9FSJ6UYObtu#H!_{~5vsa16Vmj(mF^vkc z^u8R`AdE%iAT4CCw|$go-<=sw`>qpv&1N$vKbpbM{Ug62?TX_GO}vcS{&=K0P;9;E z7ihy7@J@b|VUDd`5lQ{^z`ecQ4FvgK9%Z&Dl)Pxd+Q2^BR9e=l`ynI#ZxV zsB!{wFXgTIwykYpd0TP$$*#xo<6 z-meX?i3F{S<~wElC?UB6S{7;cYOFfDG9OG~$X(aYms`*$1g}33WpYEVOmDC#Og@rZQ4WMP2_u3#U)Hvb^LWTzii`cHeNeEkf z2o=#(gm>823qDwAQ53Z17f4oMGJmR`p}u^X;JKC;xZQE$7#*K3o2k%0NWiV3$(oY( zl{D+9yyz&=lrwzx)$Pzx4+gm3vGAZl!E<_zzuhZMHJm+t>iy@5K5?;_mz|?2cwDwT z#-FriOedaqaWngN_|HW*r^p7f`xxI)Pl-F@hvFRXZw^;v!0OJTOX~4S+at_E11C-B zTO-Wx=zUbU57BYZKm)83P;^h#+wo`E1b;sJ=BtVlf#Lb?K7uov>_{xA?vc0gyY#81 zGu2*YiiqwHxAB95+skD>-#yo08Qu!MG)Qgz=R{wylF+AiDF@RA{rEz}%nwi^0AIzw zTdupcf~vZQSvtD~x9~YUMP9}cLSNC0%x*Cbog(ehM(*LlEMoISk7+B414f0PO?fdI zc*VwmIb6~R{oS0$-1O-JIM;UPNQ48^-&>M_mw4jVFN>P)1M*Q3I5NR4c3Y>(9EZR1 z^6~! zs#FB-gQa};@B50H4fbD-@P29NZd$@2d8xyh%xb^t*SYeh;06 z5Bqk~+lajx%GxNE0z88fiDrecZHIvcD~U@VuJ9dRrrVVaA)gmd@6Sp)u^O4K(AQYk zfhhcN&+`sk8JSI#9hGq6o>P^=Ak!AlP_UqW{IC1D_qBd^@9|GV^`wkW0uF0p*B71X zDcD}AuhJa!?Bp=qD?b>il-dc3t^SaVo_J^OixVNB6LlWHd!qtgh0c1g>jkiE_M<{p zLj`SEmf8cLKHkjwKxCxoDp6H}6*x6@?x@^2SMIa);JR`D|pF!Ek3fmGn(O>!B2SP53j1 z-oH;xVC{pfS|t5>Ix(0izEk<4AUL>%+DGcq6ix!boj?mmGMu%DM_#Psr2e|H)>icp zN*x_H!&7z)Zg>x1T5ZXBu(VoWZx|pA^9kP@t8|)8DBqmW8P&dO00pwzeNB zygV&C)FUgV_$zZu^C$rM3LM+NI+Z}hkjZya^aC+mN< zO`4D%`G+d>$Wgo=29QZa^Sy!|h0w|!=fP5pu~H2Wauo*XJ;A6w4?0vNf`Wo4HaA=y!^q7WQeT@L6;ckB8epLdp(rLr=z=kreRpAs#NN%FmH-V0kxnh*yZfzL zbY&?4;IPSLh+=MiAX7YB;{34!xs-2Ri0QHK4NGu9`VuVtR)?oDP3`OWbko9Wzv6bx zxyczS*OgO!#RfFBKv{ncARX^-1n*~yK^+Zm0X;kIzOsh*?RtasG}$sH=5b|-0{G?@ zTUSsT8&7HW;vrEP829fddT{C31Jmz6`yV$kNi3oLHqN32IAC4TyY&3|VMBVve%x=M zA)Vpq`nR-Xb{O2+o{yc4pNyW2pR7W~F%vV}y1J;E3VtCAAHbV_7jjyuH0xgxsK0IUT6Ho6^RSF+nR@NaqLaBBLfA(^gA)NcHCr zI^5xzG0r28`n)yv5ogDkD8ADL9I1oJ{=@`_>H%1cJ8Q2V*(%R}8R{zH1IP2+=qk)T z5-H=pgp94<^%96iKLk-jFJ0_B^mDb-Vv2mE_(vVa>v|^OV>d;p!DNsqzn2@VC^#3i zmMh7^r-pnfRFv z3(0h@w_gix^K{*Q3HsUSamu&W?%qR2QKT4<>4wEr`xZ+n7py*(`p2%&9ue`PMp~>q zuwrR_sOxmG#)8550)Rkz!5S4j65(rJlO}r6hVReWT?b3KEqPcp{QNl&?0>QmrM02R z$hB$*I!VP$gDA-lAoMJ=e|bGm85lrw_#Jcab1;7v;Kd??%kK$Nafph#lu!h~VBuQZ zYx<`?ao@C_x3_eQx>wKCpA2ceVEA8*cP2-wX>|78%h&4=8! z{@#4oEZ~?cUnFrqKjhjwO@^pJfP74qr5%9pG17_(02bHRsX3RE>6=<s`JJ(kEm8+&FMw?9ngUcHvL>%0r{yNmXo(Mq|!CmEN zbV89+NC~=?;xIQCExFo4qQ3BVji_i}v4Ul^*NZ4<|tlp0zvFHn2|B>uq zFVA9?yV$}tc=?V1D$GKQjH6aEyxO4!OmzHfBfZ+C`LkN>C0{}W-Uzs@12@T~y4MZ( zI8P%9=9T|=!L77_*P$8fOn79&GcT;xlrkT2*UhoR@U#r-ZOhzPsQEG96(@*~=gPa* z+B~al?)7zBJZ70>Jhtp2sox!BEmfMukyMK`iPY%keI2qps8AA?cuBPfA-g-5CJW7W z1i)A#fS|#?luu5#3!%97OIGB;lG{E&iZA~-dE6|q(PodYYJ-%PN6oc5R^|&u@yv^EqL=dj6PieY5?1| zE9>3MznLM-XB1f(1BLFoH%`BDx|Jhrios$9XL__v5W)N2)Kv9u&bxIQZzD3{38 z72PG4{P^#;g0+J;4||qDp=8{BQ~19LU&>P0H!rH< zV)2R5S8H)D5a&AHGsP#?1RYNX9ivII9~3I$?E~H{LwnZa#`&BmK32v;@W`KryJJI zb6K+an;={@V)f7NJle*V@OT*d+ETURh+6{g!>{df47SZAM`R>ftsp}R;>gzD>3upV z_L-SPMVf!03*LCY_y`GAXHJezO<O=)m4AEj&eDP<5x}?@ z5wU%1C`jpV@i?WUip=sgqgSs)5j~p`ttfR%<5Qy>O=-akLf%Upi&RXEAb!^%+#lDT zqh?7Z65O28WzuTKO921P39H-r=(;K}Q2=!a}3mn#v@Mf0r)@r9DmB%@DmMVL(B1MYZ6PpXTJz;JL@G+rt>fhe1j$I``bP<7 z-9F!KWcjv&ml`ZkyC#Ss2`y+-wOsv6t`x*b#^*$@a&!tJbK;NI8~2KsCMi8BX4h!u z&*WNPHT2IR41Hq);bkj{{aFPw>%SX=uKpGC{Cuj-+xgo77ihrZq3KJ5ghok`O!Q=zB^Rb}x2V{U=W)Aq!JqKdiZ9`>&-YtfeIpF(L30x{Z`wU} z^987qkk2s8NH%0xAo-zgL~u2H^rvW8Q1SJ~#-CLhwUV+6Tfm3dTqXv~g(jU+Rh&Eu#AEM~!P0RE3;&a*l zt}+?up4Vt+5=4^glf~|7V&5O_`K%C*adG^wBx*?I%{L3|s|R&;;pc6+{6`SDg{(_d zy3QwRBa=m$?4R8?gbpri|JuXpu7UaW?!)*VisR|!`HCM~3#<`D+&BnmM2VkZEq!Pc zel|NFMxVAY9IVwLRPPU&iJ(F0piQMBp`i91&sS9X%)r|&w<5h~3Iy@r6CF75T4!K2 z-7)HL3^Z-jczU_!NSIlg^^@IeUVM)y;VRl6L7IPFN zu5Y)3HhxQ1gaj7`4QVfx{EFYQ7iRZZpfIxw21GYc%($g@;U!k1rv-)!1O%& zmDF1`^70;tQnB6>1aX(o9C2Fb7-R`O?4`+5T~}W%3x>LF8j&tkn-Ku*wMe~|UyBMW zVh;!pk2zo4Jc@M7@tyXEg91b28pZKG>MxRET)n}}*{=9rTPSY7wIR4YTtE>CdIjpZ zp8LB^q{{qjoA2?bY5=ElI|L(bQ+Ml-EmLNEIa&GWAUTXg5{LaeHG%OO=54WQV3WLa z_J%*AD4f6F9jcSYr|;L0f)|U;E|lGi|Kl~e+Y78$(k*{W$fubb1p;-J^SG4p;i-v0 zPy;Ah488C1nxj*dKcm*i9@*l%5Dez2l0+ppaAw3Hm#Vh4vVN#2h*V#buA665^kQa~ ze>K6ko-MKB_KG<8!flTYd^5CHY2Pf2e#BETIv0HjSepqLh!mSKAA_CenM$8_Grc-r z%17aHSoG(1AY|?f+PKP{UATW><6wYG&fY|D0w!WfR zOD+8|&>s$kL@FwsMysr7gZ?Al!NP+zwaC9H_gSg$s$B#EJ`aevO!~c3+XIz$BRJ_T zKVo*jML*YGXrNk`>ojyPRIv$x$e=m}n2KU|bQuz>F&X!p4Wfnq$e-{n4_qV~kgsIYkLu+-#cmF~$Y`Cvt!F1vI`cfo9I z?pnDn5eqbiSkLA^{vMs}mx<+4F=zUzTWvfq4$3lYE%RPr)HbS*V(gkS6eH!{+ zz(P?Kjpy<>f6PaDJBN~q9ns3&~T{9zTTK6kLxq(5=74+vNrcs~$oK zwN>(@&G#4$LeR9J@y^Mrj83(k&lj;8RE6e$J5r5wPJE)zksMnZ75x~`@+XMcUuAS^ zGKIjxk{RrFj|Nv~zbu;{;Qojd9Z8S|?V;N8IcmcC zCa5Z<&i>7KuWZ-`D`l{iJ!Sk0vWM*$!WOb!K;*EwLutjX1#g)>R-65}xKJ)k%B{h# z!Gs2Gp)i*Y?+Jl)DaG#`^wr=3CU^pRWO2un?^zf)nX!H0Mo*)Q4^PJ&dz^#pYRFA= zgcFxa4`*vlFsKA?{ua!Ey4c!llU9$^^2s0JuJ%mKexvMJe4@b^KV6b>E0>?)c@)QJ*-_liX)=2@7FYgcDPNE;jpPu zu#D`r-Uoq1o=A-{Io&p>fH5cKAFZg>B;@ z6ujBR{$=Si4VeI;LH;B1`MM8_?(@8Ci1ypXFPpi)qKj<1W2-{#@4g-`Hb&3FE$Iac zC}%=znLMtK$nCO;EB>(6A~7s-a?ztBx;$o;T6ET#J)#$q4HlHy3oje2=tj zY&629$ZhJV&9i`z>>V)=ut~@Vv4PBvA-*6dqRX0KH<|06p5XjF!}oUYQRs_!WRb&{ z;uQ9BF?=W$dNk`L0wz#nH(4jrELlvcQ51&VKTX&Oy!!!SS(ENS8R-nFI^#y-FUkIa zOfNP*9sA>+#z>vOt}CQ_2*Q#b_YnQ6Y z>7lF&lJQKzAar6ehPgl@oRm4cCBuJ%%CU2}$lSRNKQh}ybu0X*q~102^Apn&6Ts!- zz-x7}cT0eR0-Cz$_@3|hK1H6`N=HGFD#@uL|B6K|8{ur#A(?nyO`=lZ5KU#rN1>ES z7>Ws76_)Pj_m!cJX_w>U@Ih==|}e+x2}7K_3fqGQq3wSUM{b+jCkwo#T=Xh+4AMO1aGat`;@}9-3s;T79nP;8nv+hqN-EUBKm? zMMzkqI228+bsJ}ghoM7pRJo3E{juGQBN`Z=hXOG@)^Y@J|Fmkb1qm zZ0sK+T|b)M1jFAe@9NeRrSd^-!@t*L!&KD%sb7i3+5F)Fu5>@3G0xZx4WTa?ZzmrJ5`qNONjvlP@ zo;iLE(AcWMz%Q6izVlIvW`U}=UH4;1VOzX^phhKQ^LK}v5kUM&iU@iUi4ele-F|55 z9ruP|P-MX{wiwS8%UI%cJYVxp>b(zVcFw;&{s68q9}5dY!QEPRunXUiMlOtrDZ2Sd z39#n#e~cpMc>Z-$6HEYiv?`Z4(@G-fl?7excQ=Jk2YFe~mJK2E>b1KO<@>y3{S_j9 z^LYbe-&7^)rPe(v`Z~UZW1>AhuyVeK)fkxHQ&6;0>y+BxDEFD^ki|!WBMI!hKzj;V zK^_YD)!t%N4{`njCR5dvZZA8~FfD zVI&a3-MNKVVOXfPP~AgGP%*ba-8TL#lcF|gD>g9SZ0n|g-fB7zkIk88ndiG1?_-z3 z_H@VA%gRnIH3dFv6I3eQ^OS*Oq0pbFtc?xo`@Q$0S$f;WR=Cxc_uzT_t4#(z9~mDf2$CAk^t%+P6bglhVW6ar9dY*k)0)}XBMt173=RpP6a4#NLmBmjH#j_r zX=}45#O?j-66<$+wAw4NFuB4f{_MbmMldn(A=nM#Sfgm&#!WZD6n*rn@zg z#pH8ofdelOrhRxsqEg|LO{t%_ehy~_$Nkuu>---JAVv}*K{XW96Jj*J;=VUxfC`Sc zoVjX=*``!T#nWl9?P*A1FO@u;9Z8~5Dfl2ay)|k9VY1lJzE7BOYgf!b2EW!JukR0b zjgH?Q&-V%QyUL(tut^}>F13Evsy6Kky59d*^vx(Rg+al?QuQ-i-oRF0cr?8RQTXLh zD+80h#1tI`&NmM$?d#g8Lq%DvBX;qG|R05uF(10P$xPj;cZF%)u`r zsULSll?4ocyh9z_EIarc_I`Q7t{$^rtAyIAyj$@TWwO5DNCgx6WTx|`uv;uee6IX) zNd_Egk%-NgDawuaEK@`kt-j~?$65GW8H`?UhoF&q63KlP z59`OBATpXA2J{XleB-*UbOfwM|Ge;_G?1xiiF2h;rA89%#x|q0_mh^+7uyIpOEd<; zH7W=X?PmtmZjSxS{6v!BIz=8FiE8mtr$6Dh;YgZ~rT#Z(>E%wDmLoPSxS+Pb+Q%2x zGnR+O)id_WWf`E2yT-Os)3qTZh6*!@N?ghP@qA||pUQ*8ZZXDI)|^HttV@{!z8?EO zn$ChPj;?FggC)3Ia1RjNeSidam*50-z`LGd+8+ zT6a}(^LXBr49p^anZqRcU|0PR=lyw&Mn1(43g%^uE4QXELP03j)=jIEBs!I9ngHZd0CAt0_6vyi^6N3%Yp$~eP$D4CcAec4 z$f>|X8T?!BbssDTp2?N8(vt^CzN*pJgUEt4YDIY~G%xY4=QN(o&(}Jgu*TDyfjr)4 zEeA$3aOYw-$qBQ`pIv-@TLw$jYU*cfi)h>4t@CcTn&L6w;9WL}UB4+`{yZ_EC40xc z25k^nfD@1GWNNK(L1D4okI(K(Rb?gFM`=E%fP?YOFHjV{3?YA~APN_`(9SuL)z#aDAX?OlENC=S=?tF z_vZ82=Lo~Cy@j&>@D3>UM&oJo7nik_9m9)U-7k-DI6moh zdKlN+&KAr3>idOCCXz>0wj>S2n?2OxvlxWPrF}PZ&vVW#6P5o;Nv(6#YJE5*V!qN4 z^i{Oy3B^jOSza(OkXGZPn&@`~jlws_ZbG<4CGWYLXCo-Z%{X>kzmy9@^R*Tz8rcjZ z!Z_0|eGdmx<@@~br;7nAMo>!UiwA;1{FHE!8e%tQbMZxf+I-p0MeQN7o8?2XX>OU# zPS_>l?iYZ)I3TlWYcOqi5TnE!l0_L2WwBm5XHctLnZ&sXaZoB3d7U}Llg$u7SaviW z$oxJtj~oE~TI;h49?oKK_Xy#%;sWdxZEa#u=v~0ZzwZyum)Py{ggEO$bfC&DOjZZC zl~FdddMvbData65h$$hiFQ>V=5Dn#(7y(qhu@cN*B%K&$(juGA)VV@8NIF}TBN43! zkA&i+jlS^JSOb%UsL`E9CJ7ceM8sPian$(79d*>J-;huUIAG^drmsqMCoK(+Q54Qv z#2cR}K==b%cvg+hmkIQ@Fs5T^q5TM0nngP%>r)ATxZ^y8u9dsC1ESvCoXNS#$D-54 z;Oro6J;Q5ub+9Q&FYvz(8_O3p8D8#)SJj+2XsArhhN!ZfkEfu%`o90&MmK)hk&1Um z{84_tgGRcZZ?!m~*M_n-bil4JQ5^hSC)-rn8-dnDWOTzT?xys0<*ggz zLlT1?k(24<;NsD2`99hfJGnbi+x@8tx92y;b?u8tDPa6`E&6N53@VwfAxd=5OvP{X z;eC6&+U=XOn7ue_Zn}J%3m&)+XR>))mn>3py{*587^+^j(=M7nVnKO5H#;(TUu=?V zbG+kx1o{*XFwn2n7#X7)RM;U=J&7kf2M52po9+7Uc^y|c3_GZ@;Zvmmh5}|dy7W<<*21Z>z*PbcEKDYzsctwuw`&fK7>l%tzOG5NF z>^L5$L1fixEt#ft7Vf~n%Dyl9*G3|KcRfSVq|1dw31q|2wu=*)DF&3cO5IhN{OnLl zOg9T{8$W}brgMEhdr#q$&;}dNc{(`z49me@7JsYF!{>LTa>Su6k%lMRs??nR$>V(! zxLr3zsNcCohq<}^A-fZl^SL`RhGBja4*5rzBjkK^r{_yNsK)Nx zHlg|=J}C9C$lTc9VQYnn#BMG-L+<6orOAObCX(YnK~PX;o_rx}65UgFs>?Mq3gE3C zf0#OR?h*~W_+r^c+L#~FgVZv3IX3C2vLO3}4NG@(SZhL|H1Dv43p!<5@IsYV^f#$^ zdd`6fn^mPQWij=LvE@k|0ef5tjl1_#K+hp4$bciGS%0X+`?z&+Qa#RUeu4h*=($Sd zH^xCMwdK2Y`pO_c5wZ8T$hROjWc+0fL3%S3on7visir2rm5f8@wBEE*i}Mki=iMnn z*z{g@IkhS0b@5_wo=hd=oaAt!Jp1p;zn7TWyJ8;i2l%&p@MvADbjzo4g?tVPZ5bcW zJK=NRS4LRB@PkQ8h=@-9@gSEj)qDZmOj*CZU* z{YkZpR&L^y_rHyyy4%0cCW}kP zMQz6MyUADRw0;Q1`kXM{K2DTFK|5{-+nWLs4)tEsOu>piKQOgw>KWlPn3+2|A`@VM zT^H)Yr5PVWBgu7`9prI6O%W64@Z#u)oxCApSL%i3al3*z>RM9m z@>%dGPIOr7fr;W2UeO!wxgRw=ptN zPS}ehy-*gWtyN2wC$2G=Hd?myn`2h{ld#mZV+Zse(TM4k{I1(Wnr>6`(uD=JLS<$u zaN39C(uV-)9<0=c59fU>PInBrpD6F)V4w28Cr%g@#;O=>vIx;}6C z0~*DlY6xT#2%rT*)yNNrk{R{VZ%6C0NIt6i-bYv6iY>x=%PmfblVK5I!rubzx0R;R zv-Tne&coMV2Kv!SsE8C7*m0pH&s&P3J54kgqDM8VJ~27S=z5Er^W35GRAIQDEx`ej zBd%y)h0uu$EnKy3xjrl8(lI=Hu0mfBFLjy#`4{QNC{n&e)VJ$}O2(F301MAG$o=_n zxarj__;SKo68Z@;7G&oANblS)Q!2B*J}~+CemG5u&7=%}|8KpSpSm>ebKgGkJDH5B z%Pn~lLuNFW4c~SE3@#{te-@)f=yJz+XAp%}tBhm4+w0d83W4G5ekATBfwKKjg_XKub~fA z3=!$+>0uT@;twG1uCgfbnZ=dVW2b z!BEtCwG~OL-nSSr2mq0DoRV!HXzAlC%JTn+i&uW4YcY{d?muoM+&nu8&|ucjk&35T zs&h%#J%8ODi3`}Tl#V=(doKPnnON&^O_Mk$&CUMb2<99n`H^qP14=mZ15PpnNEt62 z`z?|FJ+L(XUD&`Nr{XBvq=s`H?%GaWVjz4}=ptA?`yFk$>El0tZg6%i@XuSNw@zJYd@BLaNwkEm!!eFY=& zEbhbTYDwYW{QZ||t?;_u-@Memj;GyzZgV~R7Xw0H3+qYvk9KYgx;A*!SxjLRNGyMB>TjpNcAfyU~!8t>iwQw0} zOA2V`f}gN8sM@Hc;tbBa0whx@N>BF`8m7|09{(yS)3-IwfyDIHUrNA zVPvY@&8`D-ucy`wi%s9=g;sYEBJcO3dMAUIeX6yd6?jP&A_ZH3Ti_u0{WO>v2NV|8 zTbut&vE3F1sCdm}3A?7zZJS$qy|*opPo5ZK!mJp5(IjZU|EDqFMY-6J;JDACTw9R8 z1?*aKcsd>5E5+;MXLot6HOzB7C({Yq28@;SVlQ_-=c!i`)R8NU9Yvdf^I;i#gXFVg zy7gI3(qHSg2fqFYG?;PDe>$8V<3RJ;d2+cqo=5uLZ1Zdl{LWlsZk|U2*f5376EbG? zdv7|M)^}PZOtoZ6nQ)h{Pl9r3s_w5VY+f1D1md#hAq{9wKVDHkq7n!5i$!Vr09u{+ zMwgEoFSO-f((POVj*@WS*AEmvp0`?${jcX6-O+&JXY75!BUf1A)7equb*{HNmic|& zfz^1B!}(+ZhMb(dY(<4Ke_t*7Hig22jUfe$R|sL~%OaLSc=TFTZ?M^bTC`hBXaL#w zeo>_jK)@;@GaigMtp*C1gS8ticPeF3K!O*ESOhvpRt28hF1F?^pd9wDHa~W0`UN;% zeqqfPmBwRu5-&^ zdtO&>qZQU#pLx=tYeCE=U&86ttTulKd~A!Q4g$|x52y2^J>C2Z>J)EQ| zbZ-#qfrMhO8Y8%J_0xYd6Vcg$BUBGO63~&3i^l-1&5^M?5^ucT(Mqe+67sTV7xwo6 zDdBwt7L+ujG4<+U0_G9|v&ce2>C0B@cZ${*bsG##K#*s75^$?<-)Mg;U$@V>4}@d? zPO@3GY4Ai6DV=t+IrZ7V9_ybBZk%oG`tBHfMJxnN{L%cK~c0qeY^s(0PnaSN< zl3xs$Nfp0XK3kcc8rOzs{sHr|{7+#+d@SK3J}__Vng+gVDA~ z9)}yUs7%2iGleYibEHVkxZ!%UNs?V=RY|o;B}xf{iaRpW7 zJ*vb`@pMa;pH8)6J>8#;UOmbXcYI@?bR9(d==qL!a9iBn9P)T@4%3l~aM9WB#^Qcq zP@(yltb4>?^k{waKt<$oG=&-v9NobB9v;Ndwi$Xq22I8amIX;BV%lw#c}eVFo89=b zhCx!<3x;Y{%%~Va9Q$(!JJb1g;9s2ltolT`zei`0L_`oora4Hzg148ii!1P>NzzCv zQ~&b2b??V#yitr2$GHe9rM6}vw8>}rOa<+z=%8>}s{; zlM0D{MvVI@6H8QGx@}b8Tqsr8nG2^utvOM}&3K`^%%!KOsF)C!+)>}{^s|Dxt0gDb zDifI#vy>9kYu($U2FQJal}dSg6vg9EBA>|qe1&nX=l;P!OW|~XvncR0K*sbJjekeS zJobK+^Ab?)W3F_{DeR03RQNPHks%bRS~@HF(?k^SRpt>_76-FX6e<<1XR-9+c#p8% zE=Suw+47`fzsS|Q&|#+NmB4H=E2y|QnQGY0Zez1twe&}MJKb-M@Z!0ks$H2~T5I1& z%$H2adt}}~VK`Rk)<&lj;qCFl?^xqM9{&a|241FN^b379hw=TPe0i?VEs%kq^$O#_zvhTN>?6BBY?f}%0bhU0A*oD0&M0C*3RUQYN5tKcU-fvCU#`AZ`Nuw7 zk1i~OWV-`x&xq<;7QhDL!@vYTBlO+NE2$qCFG(I1E_w8xl1o7ql!{yfo+gU_F za-JDLq@q47-AZ2IinC$F|Qo-Bx61W7)6$}2(Z~t|q!-m_IAYpo^xqpJ zl7xvD&_x~ZO)C%%(;siJwHfV7GRqg?_LB7*%rX8XefiAju2f>8 z`s2n4aXd(t&VX$QKzfh}7e@~`+;DuV@P8q8$YyfDxg0MhW^ON5>*qQZqiQy-b!CTU zOqH9QncJK&M9&F8b@<*wYjr)NDr5^ShGkVyylq~YtRIdAyVNFyz3diT!6?K*Ta>>DM6(3Dj(Kym-yYqEhFXAf^9C^)-TZ zVi-IeN7$`5)-!>U@=yQP67TO0h$DL!)qvkl7b{ipS4L2FUVp*CH`>e3W_PEW4bGot z3goG^_7|Ov>SQE4L@KzE@IbrkMbRX@KL_Q~{K7Irz|=1{yFr4Qto|P(wd%z=fyfsa zy~{$CKgttuwQxOMAdu|46JOiwf?S-c#`IyBgE?{?&+Wf?EFX7XgH(i~rqyO!k!#$_ z%bR5^HJLw>1UG(iCkE$Pg0u#okuSPOlP^>XvmF3Ku^Pu0&KVfHR@RIlIV(fO?zhAF zX0&aoZ^MdhS0*o%rqd-D5M&B?lcDuANcJsPvp?rK!E@u1QR%pxaU6hnEP5zCmb(U1xTqB z^)UCa5!c+V#Za64UEwret%AwwcDL;#74*Sx*sL}o4xfZUYj$6f2=zn6270 zhibMcoiBg7!78NlqVMf<|J)dfryAUQe+z)*IL8)6lY$M#k8yzh#>!o+g7Qn8YAnGA z!taLO9?F7Ub#sD--ePaGgwTqfxmwN-N$!#B3UCY>SVDBke|w0+#kVWT_qMdICh*YteezKVXA5e_sGben-t?G!tW{ij`MY6rsLlT`&x6_3xAHAP#aMf8#zH^rWc*OdpV6ELb6mU@pHCM0~Qn*f{Le}JuE9W0#BQoLy>3AO=esSVZVJ2`q$OzHB~1jvj%yX zGPL*(N65kLkYJbgvF@0R^WPFi-&9$EH#`{*?-n;o6wt?2^DUJ+Y`Up#h}~S3)<@t{ z0|YC0-TYf7W;Y!-!Sxe{=%224qAl00Cc*gLT##SwjzoS|$mR_xHQ{D-xB4^%-;xL^ z`){MxvpV#rSUjOU@WJi(dFVArS64 z01QdOL9)9-y{TreSj~obXxC50md;eXG6#m;kaMAx2HQwoFV_?QI$eCr2P-Pfs3?UF z9Ts4Ry-@ij9mY>Wk7aB0Tc9A6pFIL9>L8#dauQqLJ>)kBn+qo8zhLzpap!P*x}3wf zp`j(J5Cyf$dnvdzX!A|OT*taM~kvupRyu!RF)hfdwlky>#suZ$r5MfF+CzElWG<^gX@g2lxYERA*P#I$&qj zVjJjUH_XkY)ht1u$lx`u)zAs8rvET_DgK{YJM?lyP5t!XZakdx+kCn#(Yj2p=r+A$ zGU%Ogcf|Dapa|?y1)*Ch*)`8z?_@Rmr=#A>#pUgJIfamR;HlsD3&O{!i*GWdoKDFc7MK+}wa{=#I1A8eiLru^ ze*#>#OCf4sG`80Y!`l$#i7+@HX1_!Jt+h@U=@P1zE5rHv?#|JMc&jqjE4`*IHMkUi zYPMr5>I3eNv0S>&pSA(nWh|AIxbyjbsNL=OM5Mp}rEDv-D3pU!K86e)0KA3gkLRiL z)7-I9esx;i%Qx7};=aGSi8=64+H?I!OEB4@1L6S_Mi_TP+~B`sZl6Xc?YwVvz}Z4f zr%aWM13J`YVEbA4gt7gePjPtn@pa>E{6}jh03$*$@h{9#urVp2zwF#YSzMwKkt2rq_w>@_wEC&DHPR+b&c2 z&vq48_gUw>BmS04OGWP?-bcM(*EDh34)4uIiQX}`wlv#4Iagc`d!!u(Z_KEe=ckG|051Rnux^#>cZ%ow zUN4FKFNX>hn}gao?iwcN*p6B{q34L*Y%b?Wkr4gL6Y2k00O}PYXv=x26MP||OD*Xo zqk#mZ-KD39iE9yb#C7cWfU-Z7BbexJHSe96fmpo3+h%rQlBb$cliMmoM0C;Z8;((BJ?2+ozC7zr77N6evWO z*KnoJXdLlVW(VukNDR^VHmy-IgDR9h!91JOat`!G{e?Q6X&F8v(yuhk0FOKD8rm-d z&hJ_&QXGqr0UC#1wI3k7Fwi$YpFA@A-kYrysx^V1kmw1mrRD6D684v-^UY_I#w?x! zNm`Wy=ITDrjWrXv)5THuC0dED`<5z{w3B(`<|X|E3BLkljDO{7Q@KcAQ6z!fD0vTC z=FMEp)&6Kup^SP>8m^TNcvi?5Du&Ugo=kC!7lfTEFvg9Lu%ea?Vi(<2# zX7_U$n+J$?rOM+;9^dT*%h{vi9t|skhB1p^fLEVut>;Q3{WXHbjIh{!h=l;UX;#Mj zn>0?SSfAt_yAD^2nd=8Ty)TJ$`5K4n60MxCn;nAhrJeTZm-gN? zJ`i%*2DTS#7c2VZC8cpZ!Zq7|H2ag z;rI2{Y4=5ul1n^4oOvo$ruKfprwGrUeu)mf&2MPNqK5B{OmE&KMbDX=d+~C2hy8#` z;0H)4rBxZUaBJqiB{Z~29M0OH5Ncm(6GUZ? zHy&Z7uP?yl4a=<3I?NrF#=-h8{vH;Pc&?hoPggE)SBMhqEh zYEN)TqJv~s*dgoQ5ro`Px>w5j`Xfv=%vL3tCuK6P_pf)}4~gu?xPtOs&jt zyB`4_88HDllKf5VTVTCcaPPY$^`3xDs09t&`u(SOXee0xoqgRoAKLQ9^Ci%<-2c_>jV@yaB*4WX+x^E?hsIH}+O1nh z5E4eDH``iu73d5=E_o&{rlxNJK*eQDzeUpJC#~<+Mz`BXu`t}BO#ZukI-^lv$Kd9w zL#r0hCL+aYq+vor$w%G)R_N>yray1Aj0i{s5GpTl1PgDb!?`2L$z-Ffm6MaEIewe- z8Q?0wJ@hX##jo{0pV*Ay^KjH@ag_^#^COmH##x!y(Ik;=YHZr+pW)m4=i%h!qyN4J9t;aJ>NVY;P013!V z$-yx;ZAkt6={KZSvFJ-3jlrEglV%R6$@Xtp51CCb>F*3Mgp1GhFs%9fM#VZ}KM3Px z9>%nzr>BRu((a#U^Fd(0Yvf;y;MMq;a*gsRi`n7;%VHVgQ-=NQxHpy|u!s`{JDB>_ z5E|sdX7Y|@_3msxp2~{_q|hy9h{#PC?UWRp!%z1682#Cf;SmwlX?MX&K$koYzk`aw z1@&8Lm%Ueh=e`80V>W-otYVHi3NcMwDVIU4r+9z`p`QpqCY#r8mu>7sZU#MI{^w5F zAJ6<%s#3f?GFx1hhd}h3j_X37xuY>-L#z8473dfiZo6TNnsklvyt_eIX*~DC`J!GT zE?6|dJP$vp*vDf7#iC5lm!8c0V{0wruGW6P><18Su# zJj*-SRncaphJ={UwU-_5M|yo%MdW@urg!JUH@|GsD!q0@Fyy-gwa^ECRpCT{JN0v+ zVHXjKN2M&dD*lgm1j0V(VyPb6^_=NZ{sBXFM745}Z~$N9bfXz5m28SI0%M==XPqcw zus=z+%fLwdJH@x4^N48yHq0)in#4`ztVk{PqI}C+0xpGQOPc$K5lUL6iUi${GMx5C ztB-{^W@f8HmPmfMp)*?IEoEREX*e7D{^aZ!+WcVb5sq z7V^Bn2oOw|09P>+RFE>$!+XUFI4_m5`5cHW*iGX){pR68j-sI3Odbc!r~C6s*v^zZ zZW<0nFWji}t`WabtYQiUfA5QA^e$(uId$QXk3ZzQTyF{fa~c7=JIXbBxh5rog6Wf0 z+K#hI4Nj+T5}NP6uT$0UAlD*`*O02WS5L#aLjyVTB=KsuO6Pv(XH7FG#W*74G(*pb zY$^-Pu{0s1Lf;ssd%{l`BOJcAPY22HCb;=L5Gy-Kl!~S~Jm8=SIAS-gEr!wXt~Kep z84L()kSkxvaZe>xLjqZ64Wk;w9X%LQn!y1u0N|vmj9MiiO1mjiv5oBCmq;C`F=s-X1g)474TeZbxs0A0{x;!pAl_OYKqzhelS1PVZ{_3U}LeWb%)V+B*S@~h?#_kF##%LzE(dts>TK|lXtaO^k z=m~|dDFSTs@`J;6SvDVpuA8jYp(j<8{i~6)9q#dGNuyKaX?7(g1~q%h;g22O*SIH1 z)&2ef&knZ>E&^UxMAdqo{m=KJp4Rz~KN>y|ByWC}iNlvbCGK1NH1p>l>!p^#-w<=% zE^h=Nwke?5u8vbbXn{V73HA)?C(pOp=HxqQMz3o zfj}y}*sZPox+Q1<5qDe)GYXM`AH9^l7?=dXfWH`> z;0nVI>A_# zE&Y~7@RDe7_~<3OLrDT$K1@@1JnDR)dJ>*A)+A4nhqsoUK8!u-stb7E4AXS2!H4@z z6U3GuFw-2edUl>bZP3aDufP0TuKXArNnqQ(|3OR8B*P+9!|7m56cF90vTY-_14x{( z2@Sk4Ksr1~StMDSE#?S+lAB5I6@ujZ4SfU_vb{kCjKn%V+Z~e zh)&;{+M=v;fzrfI7}?UYMe}*MAOR=PhEjf(H(#fZ+N|)1(OlcA#{;zh5}Rb?hn+)0 zmjwnb!0Ce_H3=ceCc3A!<9#JWvmMJA!Fv0ap2(<@BII?2UnrB@GroFn!i-+nfl{TD zZTUbr`*3kd$Y~t{E>=hu`()GoB z>72e*S(7O_5|g~Fh>&~^-TY0*tRkr_XuN8jpy=#qs`LS95FTs+0SR9Rn#rhYf4kc` zgD+RuhG$i1O5p7>uy!&KViZMmvG`lY31}-&WlLXNVy>DYOh+@fB2o|r>J4+K&Awk~ z_-sGOisWBa+}MoLe-L3k%vET?0J$Hze1HgU)vLf=(9g$g}{zIW$Pa;1ppRTY9ws=#?oWz)32NGudaSVMi@nab( z$Wgn~Ou6hpBp{fK$GzgXPlmCwY9DaDFXBDinF&>0{<;usal%7PVjzE zXfl3w<*;1CSNJB@6tVwn#RvcUst*RpIqMT|X`S+b^n>vV2P}0A)6-Y;3-5RDY3<#| z<}f?Ys|Spg2AlA+RpNW!#5&Q#G1TIofrda5fRzcyWfTnx!%;&7$s&f>S|#RA>)H6t z7Axe4N3OI$-u+bsW@nbwUR(xv9DI=TFS#+h>T7@(_gC%C&n@}AF)`9#U%L9ww4n65 zyrcAeErMN67QWcRm^r8ukwtNY0JA0mio_XVixNRia`ES%LvZMj$P? zQmBy2wUU`^8!4?iY}qUxlCQr|%%UKcN8zEIrKY|S{iCUuq17-?Xu|g-e{nh!#yK>< zL&44uY`^MDhm(I1&Zmj21rE64CBufn9b_;uIRnk11FS-;kp4yUZUi=%KIu!en$-eX zm#iH2!Vs1ADpsCF!6VXs{xb9U*gRji&dr^MQwARBX01Zoz(Py&Xr{0auorBdoP4R2 z5*H``dG&^*C8J50b*@i;vN3>!r&y*+=l$@Yg!G5Yrg3U>PMCmi=tD+7&ksNviOLp$ zLEw#0G6|@T0QIb9qQ);93aUtJhC%i>C81gX}}&*uO^x z=cyYn^ic@oJ#LD?Ox3DrIQ+<#G>nLP#+$iMD|>5g{het`TpqqXKZ<8Q(?ah0Z{4iR zZ*B$)3rTt08$UF;e&_k=VH3zAkxY_Zk&;RT8JNJucnwi~5gt`%1oAW4erXvs3|d5{ zOz$kGgMXz`9Uq=PDfW`nY<<}(+IQ0!v&)5stM#}xrIJigRF)!#@=FH|&nHpjrI^f7 zVQZci(;D;-lOL|S#WeU;1s_h9$N>*IBI}D;;Q-LdYjFOr6J8dbwzY+ll42wNy0uwd9vfgvx>Dt^IA!34O^_jKTyH%lO)(iJnitf0{kVBl4%01 z4Il%=W)uEVRsZe(7DEd-mN?QCSHn|_vj$)?^>@OYf2$H#R-bXM zWpxq-H_XItWBA$TFlbfrySv094p{ zZADugi}FVKdFu{-p2tP2w|@uqiC6QDGwXD zOUfBg#jVb9UG_x|RgSs|!uP06PH~pQmY+sIwP)U~SC#F8?uk z7*9BZSdjr6=`0_%p2q6~romd92h4^^qP%dyx9kVE$_7jS*U~6sj>&B{Z%TWG1Qv|_ z@zh`0^zQ|a-R@9OP)e2?3&b`B+e#~C-c;1WO7tUw~^{XFMY1Px*J| zX^tgZ(C4RmrMAJ)M!PlD@{+Wdta-2{R}1@#bUGIbu$qck^SCO*2K7HdobgKO{Y9xl z42}ypMQ%wC+Z|pBj^`@Foen0-$tT4Xr`AS(qfT6?jmC&a8*_N)%@4Ci1lmyjOQ5y+ zvs-Gu(2-ghG=2(0CIF=g4~lD4&eKpG9*TYt`p%`(>8m@+_FS>j)(=f~KX_NF4g2!? zdU4+UPT}D=x^!7n!x9*bnEITulTBw3f$Gcc<~GvuE|<=gC-VA%LC)U#Az}f)VdjwD zTR>o~)@T4R;fu!l2QgOEeNwRj{|bJ4jOg^|(inu_7xwq)3^2gE_2zpDREPL1**g^q z=W~uP{eWVj2$P5uFLOcBM(WV_MzrQNxBD9hVgUfi2J__^aZt`0*c)`4%Ss2->+}PcGi#2zsTjqgGpAXwRgbccQY8NO zk3Gc-B>AF`??9*yc@}5Y1r66$>1QT@Oz8!hVQsFUE<&5|!;wJS9iY4wkm=DR6-r7Y zVL6xGdWU$SG1knr1t^I-2|K!I zls%;MaIHslLABNHuto%b%C2Tc`OO+)hU+((-gmjp&f8Y0v z29Jgo(A?a7ac77493Q7gcQlzYP04EAPfJ{*iq@+}(5M|@L_m7^;Oi^2)MfI~@nGCI z9?OsPqC>FIdEc%3#@H_uhGI)$;`haFXkW?qVyJ(D?&dA%<_*CNxJkR-GILcZoM#b5 z2T0z}^*O;{1T3najOBWzLTye$gSl)b2>D|0CfO(>NWdpe5XxXD$))7V$tB5YZ`5oQ z>MsLGT&Bgr`nj~;C58vo|G>#U+V5x zxL-`UsB!J|``d_Kg~RoXEZ6C|dpI5p{(MBbaN!%RP;Ut7>+995B%Of=q9o8K|Dr$% z`G!a|hf01R1N-NG4F;y_5$ntLtJypU!b|b;Z{-A$q6oq4-JccGuzy7ni2`w1Cd@{` z`5B-dYN#)%3h)+Ts4xv5pP*3UolCZ_! zi^h2}(k8b*mRf5$uRlzWaYwHSDv_p-FN51!!44}g5+xJUov+r%E7z!=56DnJ9mInY zKA^Kv>=ybNFw{4+I0Vh6-|zf5>(rCpY&UX77>Y^7G4Li)eF41rIqH$xEne?k6H7-Q zCnU#vlo)jVu^#P^i3Q*@`P^d1mW5leNPeOlNW(L@!ea-0Ov_Ad;jqPorYaYQa({i| z1nSE|z(w-h^}{$E*T01tYybBRdCX+km#flgtugHL1R{P`ieMV^m5&5ogU7QlsG!^T z+KS&;;ksR(QF3z)qevLDt-AqtLCwPEyyT6eUe}L7-3D_gdbKj^#Cv`COU!>Au8H$RO zTJ46EU4Lp{0>g(;W}h!m!Z8SPR=uj{8T@=wkHL!1fafQF)lRq8^j15Wir0ZUT9kvxP?dzcM(ale%BP@2XU^KZFmpAkmHzS!(5f#p|H~I#tr05` z@8h(#$MG{J0CVolzBHRJVE@J{?vd;Dk0-T%xxy<0)$K&QXX~D2lA7M3HWG4I?IaJ% zIqW{L;^-vW8AaH*V$7y{(1$9%}6V8|aTE5Gg@-v>z~*p`JM}+>j(=&!>JP7`+6{hpm8L7h%j)&UJ4LfuMM9KP`9`&ZeBN zr-TN4WBot<7+)j?E+7K^m$NiK7a>RGg39;`Ie+R!PHbl3y3J*WcTBR zA#cS}?8^Sxc+al{Irl8nkmj&5Wq^O}cfW+G98B=_8HIOMZQmDjL`^sJn>;wS%+4MG zA88EV_#)RyG_0XC%vgQl3Qwmc{KwP9cC_F~qTJQD2UU=dBeWj|E>z)&d^VFH?pSuT zj)$WRJSaA2CgDf_)y+i=GBIVwYNKsHkPPk@l){I0f=IFQz$%^+ER?y;6Il0ws)?v< zK`(U%of`ZN(+LJEI5J5 zvxRlO)*FFsZTF8M3p^xXPyF{U`Xm^JPf3+Gcb6iyMnSP)JE4Nn6kH(bVrcdL{POD2 zsl)4?1OT{uW``6mPnVH&Iz3TR2Z_v4{WhtF>pQOswWwNAApG~m8TLG6m@-TrICtt z4Ca4#;0f#h_H(oO|5$)T0k{8-+o3~N;Cjxx=Ckd!m0T3bYLZsE+eo{Nc7}9Kf>8i< z>1z0%uCbsRk8ZxW@%{2^DqD@1MYOBxq<}A)9L^L|e<6Cg+>|HC>|cHVb$>ox2ZY_U8|LrkIRx6l4*wlT z5%hAFsK@Q5@Tf~*3uVjG6#6+86W!wWE>xx88FqazVR*OJ+Tt);i`{Q|;j;J79!^L^ z1WL2Up2_zm_otYupF8vPd(_XE=?G#?bp@!?ZaN)oC4)AI0KKE=Ed{Lq?~K>6ioF!7 zkGTaosfB=3>Gu@*Yt44`ZLhx+sxpl}8s&XoanaHDY&)Z;8=Y?PNuY*G>LK!cZ+t<+ z+?}?hO#jc1kyxQK4fyDgo?lbwuBbs0;(&O;?S6TMQ$nVFJV&S0s7(E1JdIdPCh135 z{D9fj8y?9>e=K`b2A-&?+#n1;uHP3tW^$RPiqq1wQM_?~W?T>!b4F~r zZOmn~&~I-m!eP;F-8OqDmy`KEPGT$d*&_2tEA|L{c6E2xsVgz4^Yt!~?zh((>t#oB z<6I=L*}jMZN8@%ZkCM^pMmwR!tXV>aC9vv7N(}@#KGct44#SH3@?1vv_0CUnkdx!_ zX~oJeK=I>D4gX{}`2&kga>Fm={ZbOfsC}dcr&<(SKIr&AEsgqRKpF|5Knm;gx7^+! z#ac_81bQ9pP)r(A=$_{(w2R9-aRXuWZ4dXF*@^A`@UU;+G-*ZqdbiF_WcCzH$vyB)6;gk?59{D^Y!8JnVgmk9?IYU;{HA;x|$T& z%!f1_b&2msY>)wo85eiA@oMH7>-jp*X1z6)%Nqn;+EAPS&Q^zGSSbPZAXEHO1v-Zo z;y)&36|Mx>2!cSNzVVyObaVmg%q zVQ)J-bmXnmm?mw@Ot;1}I-{^)Am*adDSoyB-!Jh!9C!>*iSHL@Zd%5Xka+DZ{J#^Y zFgfBXPO4u4c)4@BUDS9nJ~v^>Z0N2#7C>*>KbFs}f?ZPh&A9lSPk&sCm-m}_aR4?` z(8+?0urNsK=*g!+C`-^YP+$Ay|Iu_+VO4xzdk)<#CEY09NF&l65=w(~cOMj_ySp2t z1(A~O?(XhxzWM#1=ey#9n|=1oti9K}-UtQ#RZ}V;mNOB)S_~gUExez+z3p$Vh-e<) z6_l^hBf$v%3yEe_J#)opaiw%|hFe+^B0^igC~7NWfUNgtJtB<70kufUN7+X&4Hw*$ znIPv27Brm<{n#5N09J<0W@2E-x^sHZlnQr#G9m zohs8LP|6gp7t5MBRz%N)K196j>>bsN+D`~H9Ptw?`$A>lRz2Dpr(mW zmFp62_iNc3Ad+k)=zE|Xp{(6kxD!xSp%d}BUmRCQIBeV@-#yG*zTRNq@t0_0_$|!6>b3^F8B8?ZIhqGcc!BN*Bgd8S znZ0~->WUWYl!;^xQ{vWG28VZ7>_V`~9I&aoLEFN+N^psES|_aS)N=0T6cN3z+a3O2 zWeg9zE+4q9SDHX8K!x@e#F2#b7ZNUK>O2M#-7M!AUb}G^1!8WAldpf)Pu4A3xf*Pi ze}Zv)8^epdv5y=wu@VfLzXe-m@85X)_#_j&jB1opSj5sa*=Xd-eeFpS`l5|mcw`aw z^o44OALz27A*U#3@nd0P&<1A8b^H&w5BDTji(nW&gNT%LOLgG6$qTuVC5=v zqK_v=KCd^-rL)D6u!y9UinQHjAL^|PdWQZCsVzNF7qPvBJmN%lq&e0hFq&3JZwTnp z?T%)OZAvQGAMc?5E!>{tY53J%B)jdH+-AVv+?;<1k3<|DO(9){fJB+M#39|o>z{;9|D4c_Fsf8Nuq}T z7}Czxsh9;gTuB(0b0JJ;gC><&bc!gFGfbJLa6RRbxi%zfoYQWR~Unm^QwUBOmEgm$KUC z6GZtD(Rh4=*8P5BPF(WW3|~TG1dedM<>#I%!#o?+jL>xy#9aG7wYR>u#I!{WnVe8F zocQup3KQk(Dwtq6fiyg;+<*JpYc~~(bIlg8Grx3$Ht7{NKu^dT6M@p|cjqch=>yvB zeKHlIFW&AqTl^R#{P}|`Au^s*7Xf$J@f46yym!!V!(Vd0&U2idpU1dNEY^6S9?X=5 zx!sUJOcChyVNiB2uk58jSF$`1eC&(iq;Ks{Cknx(Rei3L_BIt4r4h12F20aU<9|#M zeEL%_SM@dJmlrw=l&Fw#HE=2A@o|iDPsAWwC()1Rn4|_^kSWQ6y>;9k@(0OCR6ak^ zc(xqr@k_c1!C3)l?qje}XCZ%~aapqNHbE0ob(nQ5ouqPgGE{4p5<4OhpeDPqx5f7R z4*5&8$Ld9>^G=2p`Q&V+p5bX`%N`g@X}jEN)7m&Swp+?$c~{KKk{_d4p^9wW3r`J> z^Icg!*TC6Fh&-Hay@9*;A7J8<*P(tNMZs0IS{|BXKNva3E1HaVZb1@(p-sx5e$e*H zvflpkL#xJ`$aV#1N9C}HH*3Gf>fXv}s#qJBsI4D5a{R$)dx4up*VuECrdzFqU3#-} zHXCv12L_mXf(3Z@n*> zpR>%ebSEz?Q>wZOPU|y|k1u`-b0J!>L=3rb@*Ipo>^l%T&Jb|z>gtc1&VJUezc+%| z+c$y4n~;6bh$q$U7#RQ+cH%i5@aGrPUqEw{s|UKvN@Ii+F2=Two3>ZU)VkbUV!=g{ z_5gGoAV7#NS=nQnzs$tZ`)!SLojeT%BBxa^iEGN-$pPZ+N#2H1g8lY^AI4;^scbx# zz0`dPK4Sf*Cc`UiBGWx;e5UpTE{o%5pc{{pf)GLe(~qGT*zueILDMSQh>oR;^3rBF z?%59a14Djth@nm%s1W!9);iKbd{!eR4G<(X^&6d(2;2WW_`bkZu*pAYSQV!X6k;3S z1sj4zAL&x7&2gVfHt_{Ankk|QQ*_`~e_4c*oFRGBQ@xM>-zD-N$glwYpCzf)dgQHH zb-X+NVvYLKKUp+U%>L31L%2Sqrr}bb6_QT$f4aY*aJOcw*&V5n#adfvt%_%S4K&c* zBG*P@_{4+BUw4j+waA~p@;dw*?%opWOg3w$j5wI|ynV#w>-gM;1YjsKro?}6IiLcg zP8-cCG8%KMjP{MV?4~7M)umX=<7MJDPBR2zczis|oWvWo`Vd9u!tn(LtTSsR`Ys|8 zRuTgncJ|)6xFWTOZ1#>7Dd``HxQ~gQ9Lx@@_#Om_U8U{5`ZD-~13eruioA9=D~giR+UMN<6TjBccixc9j=xm`VcM8zCRHzZaA51uxtC36MnO^@a8ZmO6rp=x0vw*=%e z@ZhOe%|0G#s9;yA#6<%+Uqp4pJ@+&Uv{jnK#XVnk<>!Y+6!~ifYWr=!Wj=oO7rGW$ z9r9>fQNqQ2x*T=6I$VrmY|6Wx%vbp+2|HF&+crEV2pEk2Mn^Ds^?%HcFWW5Fa6khn zQUOIAl~5823!Bk&{vY#BWMT_1@Cks z2l^+g)p)P<7mSvwdbo%<&BsR3n_*Cxb@E{@(AXM|rn$8nkyez}>U>70fbL?}{Oss} zS$eqD|N6R%@JqjK1c3V4f%-4oue}jgn&+d}R*jCw?|$k134QyzMb%anEyFUIYoT_> zT^gjr-LkIIiCf>?oKo&MoLVmm28@q4%HVR{SPfZ7!(kYP-;@%DoLimyowoJT3~zJ} zn(wn%?^^rjZWEB}lZU5?sz2vp6O(*@AU--a`rzHXhb#EF^i?K_GZ;DpGno6hxX%*PKbQk{>*!acV+^wiBa z2+Fc-oyJKF#gVMpB7b=t)fW@wiiQEaV~Ku?qQ7iYQPrz!lSCzx(bwe_Y z?`)MFs85%{nW{JX92z%i!otXBGS}>S4 z$fo-9+-G+a)R6&+Sm3iMg!_M@##2$PO)Jd6RUpf^-20Y19N=u zFMqUHO-_uO3sdciv%C~jemq<8dku57S;$Srm>0mE=`lV4&ofVlyj#&8`VoIrz2qqE zTJqg=+=7y!nST@-FG#DgcG&t@KVXps`%F)~a8hWB2@DEe%o-b)N|d`HXODJmodF@Z zU@_KU?$xJVNCiZq!i5I<90OVO#Y_hBb;>DQm-Sbhemn1)-dptqrZ?307ZY@a1Op_DR9SoV@syz8lF9ktb8?|Tk>CUIC?S&3E)?9c7&)x$NrH<+Eelz$iphWfJM%karYx6y>NRg9~*Mhtw zpt2cED}6A>wjmfkUf{Cx&+u~1F@3LMW8=RZ!TiD4hLO&E3FnqIGvQKVGkrYp1>}zc z_dM+V=8fhMMi&nLtTxsc|FK}{r6>&&H=5#+{NzL#2{nu@paBzYU5jO`bTLb(I zcoQBV<@ufN_ngy^Kb|n@ofO8DSkfW*V5U@XwlZ!zt8{Wn1gk#twBl$>STEHJJkdT; zG8ou7k||O-s6HaB#2wKAI$u;D)zY4o7rZY-9p^rRsQ+N(Afq z8lugf$UGK!=GLk1)4Z7<<{P^~rh~$rE!3xG>FNbp7gU;wjc>v}K@m}BR9ilY(M|wW zjZ!*38p_I0@UCIJxl^IjphCOwR}iqjVf+*jxE4fy(@{&O%fzIue^QY~DC|s#K`LZ9 z=O|ET`{UH@8M?!)GdCnAOtu{Y)xxtbn`zJ`o{WkU6(syC@}3(7f^*NAr?~UAnO486 zhQs^v8Gp$43i)fRNm|yDUM?YXiG_Ajo)z)|ad48JFY@gYC(QI8&x4Cgr-C0Tmxf|c zia)79aW(Z>5+d#lqbyBV=_^rW6(8coD;=5;Ck|S4b;u+GL`bVZVUi#Y7uzUtDo(S)4T1?_fNU9gyzK=CC0#kF!~K6>TN; zvB=eCac$XcrK5P$ z;eBulJ8EX8wXETK=Sa6^kBOM*pHw})XFLB7B*_Wy8x(t#6l8kVC_kdXeynq@C_ny6 z2JppIZGG~3U2eeUJXAsPV*bm4Q^W1pB_ypV!|hx`x={D;Rz%tg=<6y+fF|Il(1>~; zC^!%TyF0zCiET{fEN;k%ViS7IO6}xruc3%!B!Rf}iVF&;#QU8m|F}V(C9{vG~(so%p9AFXE_APEL6vDhC~2HtXWeXBUI9g=Fvh_0!j51Tg7n z;>~^eIHQZCTy7lS06=W6cTYHx{4i1rc|~36mj(>*F$&42l61nnNt0r@zoh&wAzd9| zUJWTBu^WH@7c5Nf4rD97w?ZxbYdo78m)FDc_NC>2q{@ zM+_9$95FHB0%A0_*Ptz3^OJb`zf^VJ(uU~Yomech%v<@23EvzoM3~AY8H}#9^szEb zeF!hSk+ia}i~Nsb&!qbj$N^Nv2eYh}($>YQk8WCd0`k>lbljC|w7O6IMuOKvYU=km z;X8hyZ;q=?l}W!U8Y$0L4u0Y?aD>Hdt!?m4fhPCUQw6rSU4S=(mtO(|%!Mae^?hui z%Pf(NP(X*S)lHAt9Dc5-a@>A*wKxAm7FHA|x%puL#`|vEsMAB16gaDHI8vRuvHUak zM+E5-uFqrRf-#z?(uAle9hW{TPwCW`fiXw(dg9l#J(X2<8krR(`As{^i~B)8e=r$u zO6w8VF3D%#`P!tmJ9&3yOK z-DwW;l&OCSfMP(<4EZ{JAy*mS0)i!%C7gngztT(<(Vuj#YAQ8KynGhhbebhM>Nv>jop$mzPbMDqI+2K|h|%&)oo zAM7Es?>4>6MpK!D0WRs!BR97H%y1|r#dp>p2kRTmU`LKX2D~|wZW9_e9%=2|8*G8) zCy!CX`CWa6(#7MPzj)6&JXSx2`uojGU;t_TGJ=J7wqGR_RQ_TA!SvT4B)a|nF2@N6 z`)pv4)p(pfOUD%8++ecUv+8PgH2(0;5W6W>ed;AcV6%iiOJZtly;!9dAwgzf&nGs@ zP0SE7Lr=FcsYI|jH1E{t5%=|}$HG0`r!_KDUwK!tkKY$2lY`OEgERF`XnXff>!ahh z-w|(l43_TB8PtP|m2=ZFy{R&bTn6#yTC8|KJk)Z_bv+uP%AP9@h*!Q@p%s0;pnq=g zt3{8aQ|!1t2-7>E0P&;C6o^Iu}87B)JcD+L4uahj@UoYzqR2CKsF z00UT~dHt)IEuE`YrxG#^U5g08>AHL`7jr_kWK4{CQMa z=+AX52^{=AeBbb}DTgl0qcyv4n>%*WudmZ4eueY&%)?U){llN!69Nn|hy>v}gV6si znPqjZCb5>G(?9-Q5?mKsj&@kXDjh674FuXhl;A#Qo?|%40$#=w2;pyw&;WDZZ(Z|4 zUON`emn)AG82(@Rtxw8~G(OB-FmH&17TC=Bd!ik68k(^`PFhW<{daEhHh=tIj*4``Jd%Ym}Sg zdGMNe)HRYJaCTcT7%Srtez%4^E9ul)Do<@G%E88Cw}3{v;3gp|Y6gcGL_x!a=kM=d z{H5~OFN5s5I=G}tz3$N>zm9Xad8d!xs|(_Ud^# zJ!Pt!ytY#S=qCBi5I<@PQ`zru;1Jx%Ow0sjYP4L|X}_zL{MnCv{FsD)_Qfr5c? zt>vgk(xsWkORlU};(5rA{QPmh*Jng9NVYeITB`WQ+%C`Sv;`3vIpl~|>vNB}Nib%| z`^r|Zmbfm&%U7Uz@9lx{T;(B>5l>@<3RX*gt3L?&jc5*dErWIRxYxDw=#u6_5~>Na zd-U16I>Y&L*xx+Pt)hgXItZ|0&i;D+5ij&uWp#@|BH#c60?NJhhqI!p6$_7iO-js{ zvfyiIbT-Do%@@xE+`}}wI|}Df zWCbdE_g@nHO2>!NND~X~P3Jlq;^2542SrMoIv4; z`@?=wiiBRI^plb2_3`*yFV#47ct8d$WzFH3P@yYT0jKrTy3O0*@OHOVzbKH8D}ynL zO0Xnn!%uEH>bG|0Pjc0?iNSeEzMV5~4unhk#vhhC53hj0mHXCsullTpx>m5qWo9RV zzHh<8OeTWk?qsQl)6vWtEXDN%3ij{mg)ZbDS|-NTmB{boVzTB)R;=Ih1EM$Q`({~2 zFHV=ol&~&YkCKrRPYdjT^GDR|UWJy_n;_in_A3i&Idzwh+gE$8O5B6~5v zyAR&=u(xNEjPeAiC0BxgSD-8`%TCF<@3i?EL(lKhMM0Hjxb-A>&%b5AWB~xo5VE-; zSO#x}Y}0dbvvC$Djykb_({DD|OcIA6Bk#@sjS>W^Xe8dihkHBIDA5;ftLl?)4E)MF|XDD!8(8Hq*KMuBQcV zFnF+lOpwq?2hGZ|^*5HqH)p|FF&OuEv~r$?V81W^?8x4L{ zNywk#5P&0*ILwyEzo_ig7h#E$5}&eduI>{DXGoftdS2* zPwysI;Q&0Ty z+8XTYA1=T!RSMT_S?_x9H!sb1^tRhOma#C5bN!_uGfp!fT2;Zz#PQL+bm|hAphNZT z!FkBTo9AGvL~0vLhDwc2GODxi*qPR({;14Mn()TV%o0Q?j}cmfla>Sqv#tyC(Fv`j z@Sur4bAv%0{E|yftQ)gEoei!w{p)wXpZpSXL#5MpcSXWpeX69@;6hs-?UQ^p$bd7} zxI1yYmzLKIH>1hKiel|a9*@91tH{wL=I+|d9ri%CI_a}W4)sHP=BhzOfWk$LfZ)w~ zjMO(O7U6$2Q9TO8ln%!_R|m_QsvJhN_m13Gv+Sw6{2_Op3*oB+ucB#X z@f>+Hw)~xD=X1LypHq7hLHD_LcF@FYjp^TX0G7ViSNwM`S;%p%=MPry8~sHlR_>QJ zuMeA;&W9_c@PUDfqc*EG+D=CbD@Ca&S_j>lFu+@0oc)x94}yY%F^Q?+C;xI{Ps8wl zwNG~ZTbY@Ok^fYFl&p&IM?|F4a9HoLfe$=e1}0u-==$v}R)Z0(@T(=i@9QPz*7i30 z@KKC%39sCE6~~BDwe{aL>Ek5e5&`{SGc$&|>MW38tkC64&;8U&P=HWmqZQvxLBS!5 z*ex2yzn3HHCJE6cguYB7HR7!Ju+eyWHG4S)*lek(m?<}jkp`K4lGc|CC;5mJ!$}D= z!mU>FuJF5?x0RdQvw97;jb+XvxIi&UTT~RU@T)iDNt<8%yF8kn%I-R%N!mrCh^jOY zr1a@$G@ma`*tsvz`<0tZ)g_C=K=fU0S)V=m}=oXB-Tx(-o@kP1Mir5Cs4_ z4ml$RAbatD@p#L>fG;~ew7JtVs^wAnZBpXr+QQL}*wG~EZ}3~QbY`uTZLe387U6FN zMmC%)Om)9~X$L{GbcsH4mWY7-t%TLNQOx(6Ouc>xXzE)@Pm3Onmm<&h7h6$pIy8q< zxg;G2d=&suX@T?JfG!bm3I%I5OQ&_C)?jP%mCuh%Z>6;+IAiMSH*r{;>Xz_lkxb!; z;67>XUeeS{H7fU67Jq4JtuV!}Cl2R9GL0* zgh)&kOYTWY)k@lyyz{Yeknf3wEV)48E$YS@z2A9l%C`F>KRL#Ld3|u9C=E#bYu^j% zF?zgRbY{Otnw`$`Vo-Ie;er7UGtRkUyozS%e;EUSM^JN7LSQYX9xV4YSqZc&m*-xn4an<$6viSyvFo_S%R5;@-=@Y~2cK zK=c5fnstggO8EO-qx&FEv*mPGlt^ZPzVW_gaCm8~Nh~#wUuzNyz~^#+7Z<3YBqPE1 z8I)m0$Jas7iTmhD81+kUbpEt`<%@cKUiF%L80M9)fSd?L#=DR@a7E27%y>&u|4>o;!(8=3C zQZH*C50d3CT1mh9_#Cx<$5$%6GeG`c1_5-?p?O{^oA9aUUwCXnvqtry4Gl@Ae3Zoo zQ4=>UG|r)4T2R&0nLybs?wo5D7t?<>+V%&ZikydvFM)kGD$K!D>K#v!HQ#vdoq_^3xunA|c z8+X!ao_nwv>DA~{EeA;j7<*swNn8bsYH20Ad{PVyWqq2zu=JxOjD`j7;Q&E4l-1LP zlJ{)1SICD8=tMynM5sU`17HMWuP&}BpeEI8H<1k)dA>pP_9+++1#vch(B(K{95bTl z`fX(3m$Kv0Wj{9oAp6!o5Dt-=MHnOhAa%)U|Fn(G;({hWKmR~T=-OQp0O-)zevtst z0n)ppS)Z0Y(bEwCbEIquRB^0&OUHL+{~#utESx=CP?;2dVUgdPQQNx)Y3>*1(K zH47z#oarICKS3WGGh)lMt0_FW!J@X%{XB5jVbupS8+1PZJdwS9)cDS$Lx{bkG;q5g zgi8;VM_(kTUR8a8aD=rN#46)kmiHyo7k`MwM*%5R z5s{~-LA$ea##w-2JSF^bFwiNP%fm6y*Y0{PaDYvco18q0gI1t8U1FFuQ<6%hruuL^ zOFxY7L@$c(skm57tCkJ}l&r=GRX#tev3XpW6m?|}WFVGcXBib?LgSqkkCtl9L_(** zoS&QHZ4Fej(R4A`f~RG1asUOreVkef3@Ii5WalZRht~sFW%%PF^-~NvTEt*Vs0w9V z+oj%|r3}3EE2qe7fZM7MfymK9pp|B2PM_l2f;^nW&kN(tQ98ZqkJ({um^7MT#Gt~t z{gsyBW#5cRz8?*7y_&?lif;Ymj{{^>_t{Mdv9XSK$MJ?_e&BE%1mhz1t{ z=M;r$+1V#k4o^eGeXo2kxZg&p2X_?!K`a9<04HHjdhttxZH|-#+(^1W(O+bWxi-|A zNU~}N&rO-~FidDW97Xr2XI2}vle6U_0=@4O5x12J0Oc?k+)+s8@%iveuf_6;r?l&? z$pYxwQ-5+J?iXiOfQU4Z5&t)%B~=o+3@?YJP@!i@<|Plq*OZ5#Wd4!_p!Au^Keh)o zwe;YOIE9ik;9uK+O#o17lXL{=n?5*gh^bLx$nn$2>r*cqy699igY`-?(X>ooQdcJc zj5w$?LFi>ZZ*l=&RjI4#ByX%#5Vp3LJHXC>()HSsNvDqRb!R2_rE#p8ck0LdxUyY{ zk}Wc5kno?JhyB1GF|91tDv3DiWQC$!D*M!1HEZV-5rlww3!CmuC1n=UD!U4dE%#Y;#=R_+Y7)6j? z09UsO0YvbA{<$lKa%48=51;2rjn}%_X)IU>3HY{y{{DuOg~K(m`Ak5Sd%P2cr1Elf zH_rk!!hoz?bVf=Drif107FMJ8c4(&#wby>GtbHg#igkhV`ID0 zo>3lB0MPtOx@AleD!$%v!oR8GM!va~+8H-4Uf-vj zSHVOF*gdcTiXqswJ?-(MiA??#-(BYBv!}4o&NzoCGT{IV_DTD*G3?ZWWE%!XgK=O? zn)pU`?@1@TYFzDP^4GVn!{@Q}PV-4g;gBI#Ge1dtcev0nxuevNin-&CWG3O?BA%mT zQ@?4F0sQ39Ub3_Zjk3>Q5~UYR%}lbbZcjo1Xd6YK4)6!{@~T8F)B_-)J;-=|Fx)Iu zIJ>SN))nnZPQLnC&zzm=)uI#=6CWoXccX^ zp7-3gL(-48;f;vT4=apb!j8t5NfCDwjLgi&PCHIYe~#Oly}9iMV&vF9azIvmZk6+o zM#q}Cr-!1K1rR9?=TtsI+7UM37+`=@UT`G7CeQftvM4~e8Z{=uNlh9f6p!PduwJBA zbl#U2Wu))Ou^DA7{Gifazzy6`C^F|C&b5-l0)m3uap6qQCfGZ|ZK4eq)jBiu)^dR8 z#f!Qw1UiQt?F~%a7E$rZe|W>jk15=fnp88T3VFTSi~`9$!icH{eR`f}&nJy}nEz$z zesDSL|Bg>d&Q6ei7d)TCmEV@NBPTD-2@vge{1cYW8~8dx^b9}ZH)EK-#k36o4lpES z+=Ld|^Xed{grQuHVgiGl2M-A521eH2c`S2={ibOt=yJMM+WK1uU ze;oYt$7)fw08(sC45JEf|JblPQ0jGgd4WZSAFl7)R{Yj4m=%i{Iby7$gnS&>Lk2?6 z_rR?iPSq-FIbN(q6f)Vk(FWS}Qob(Zgpotjdf+c@^4;jV7?mra-nMUnbFrN{!hqd zab*UYA%YM7%Ele z=>lS7l{+s!k61H#K}<#sO`?qHfJ`IFIDiEhz_FrHhCqK?$GC88C;&{NjGDNptf=ST zx-lXd4sj z4v1fkz*nY3ES0$#=~tr@IMNq)QocEZCrY}rU;>F5M&INc-c$_?5K6U`s1G)zEfmYL3?-v<}87} z?xe)n@6o|Xq>%PeG=PDLi7UV`H#fJ+WAO9)zg2e~_?bjjM)AJ1UHcK+_(#PS&}0>m zjrKFWoJml4SLW$qv9f8rM><5Yv9FLhb$#=+StW508(=mxaT7ICI@Qj~?fvVT6}wozjESNfp?+i>NByh#U|o3~clH#Gw1b z{e3I|_0HG#w4ekDEGmK3(O5pb^xe>_E6AE9q^qY#`$no&WdHG&non@a6aexdbItJi z<+W4B6_7Pnj9&->x0(xK`X?O5r*8#v5e5dToO<1o`43gTHWz25$e?yEP_LsCE|FV( z?#Ttcy&$*VTwlxv}K>z0EMyDne1gfjs{6GT6 zz`_cF{n2Br20*lcOuP;V? zFQ#%KKqmr*$-s@J&lHXM25fdeoWZ=?9|Tc!W#3k7A~LTdc3t&d%g1q9^48}XS~+%~ z9r^bLiX{H}KHD1Jb$irwL~-|oN)TM2Z>&-5xrxu=0`FkDjCFnk^dC=VbD$c@;Qe(L zc9vJsgF=HT8X8FqzyRNd(?jm+x9fpE;t6vI)cjwKB2?tHOC6RA1wbPb4~1Av0mayh zBdgs6X;^oR=-S?o_{1QOsbdk|b)>u{O(<3*B@n2nKew`fg`Fv6KSxp5c<#V}@$&t{ z^YahF8=f9hgm`nxE7)ja3RYf%P6TwxCX5nj_h}U!U;yvA2WcNf)$d6=Z7xC7i_foY zY5s?~b9e~mU$A6r*E;$|cYGHg%4!4T5`DwJ!x#_wFRa4co`RN@DV(;;r63bukm_w# zv*{$A4R)&sB(j$4<3PKrN;?ch`#i%6(K6@1|G5sox%LD9Tx8O zzmzvARg@x#KwX;AKt04n-jLV;0py*V2IH<(`Tr>90(5A%C|-fBu@4Xwa4#!l=?Z4` zz0fOLUYh9MG~s0JJ%8xxlJBiC%>tcag~ktOZ4K7H2Ws7Pt9B0Kd!BYr_i}=7C-P5c z)DBE9FvL>xgQCauz#Dh#5t8`Cz1^Gxq#7O=;6K}LaDww0PgYJw(i|=j8LA3vzcVzt zH=c)haTyU~8-iePxx;)>lK!cFBja9NjvrNaSYKHS+T?OT+{z_&7p4CdjN%r3l1yzd zXJi(t*}hAbLcX#`FYm4DjOyrd7R65K`0uWjZ4aX^fXA*-!VMV3A<_aAmldG1Ip?>L zsb`MqA0kLCiGJ6#h4K-GcziSjJ$|dttSerxLTbmAJ@N=owlDxu?#-Ke)vLxS^+~PVYg4f&`|6?=%S)HW>gkc|`)Y z%5-o>78!8IIk!rTJFs1D_LuZkI5t8zvjT``%Aztvo}ed`|8TxH7fV!5L>Ak;SejJJ zZktSNeTI!r3(J8;q}p5)tN%y4>Q|sB&rU&1FDd{5QoQ;%Xp=9uNd5}$MZD-u7q5p* z#dAsAgm>u^ymn0Wt5wr`L>a1xmLh6(zXekoe?ky${^EwD@&4-_luOR~Zjs?9K!9y% z*k~YCjn$%D=RPk90rI#3PgsCmSDKK*0Ve)&PGAsO`TmzNtK@}r#ig<$o#$A+K8w+ROqnOV9VkZS|+~xlct1;O9S{0&LAtNvU~)QwDq}fh;<(-~9kI z(;oAcWVp*?wz$(!)zSa9Sq>eXeeJ1r+T}1%sjNO;(n&bkaRfw%cjTzgi#?X(R)a9e z!sh}c?%XdyCzp!nStm1WJmS(XFMdLNV<5ue^MM^gqs7e1P1{{U40w&GH5wSf6d!>z z*cL|$(-G>ZjmvHQLA_$jr*cF;MqTHP``hEiAc2#{P6$BZW4PFcsUnTSixq(hpubvZ zYr4fE?cF&vskaZ+)K_Gbn~n#O8=g3gs#<^^F?Zc{7R$Nlk`ZKqQ+4Vjg7yGy!NZjD zxFf>1MMsoI62N|DeObhard8(;Og;tHV|-iiAPC8Cjt(X0%6_6)DE!Kv4Qgikecii7 z7)ml_@Bj!95@JLS#S18k451N`V31^E5x0JjSobt zw;xQ@=RG-Tn{Rl4 zG@b+`Ito4nW{eYUjDZ}`b0qp;f|Lh|_A0iS(81`8{0&mPIHqzw674PjZ6nQFaAg;c7h1g^U2kFePYz{ch#yGPAtJz##57byH~aX`x7a%E-3 zw1dF^b1pu$Uwzx8w5{cDc`v_NSywwdR`1_;xZxpWy|ix)v4Q!{jZft3_wcCi6?85C zYq^0~rLWd7(#s8)>p}&GZtryq9m&7+z+n-EJi+jwMgLT)OWz#>S4S_Zi2(RLoeO+$ z-ZMw?sT+&E@m7sh1Hl=){+#!yYgA!skuZb-;Xe?$yza}!Cy9um^;WY+6ZtZ+;-QS^ zWf{uT56e@4bh=yKPxSNaBz;QDIpq^gd|+#PrQ^ziUEbZm)GPcP5?tL68?DFzDOHD^ zvV;Lqa75eH5x3-gRh%#Z0D4r8cJ+7C7aht;%fDe!&B{;I;`J91$TpN^zH<4AAc_p^ zwUDQt5Ah@x1NPc!L5Ky63g(zj&q5@YlK)Qfe;y4f;9$JS}c-NeO(Mbx3E?p!f zKlI6KhomOHMi}Uvdnw?Yg5X|uQWz{yhz~aBO;-8oIS`5%0g%U-KLeP1WQDI$It_*9 zi6%?{V^r5X6*`7sj?^Bls&Qdak>S#u!`N^Lf z%dja?+!o{G1Nzm9a*O+t2V5eh+rfiDgd3gN1r0X-3POZpZ7M&H0_=06tad50 zl7e{ux#Jx2ePB!)1EM))6%{4P31)$_df=*+@FQ#!#pN8kyC;@z$Z=i}f&nQa5Ng5& z6b`RuvW9rwl(3;gS6CA>dndWsuxJv0*S59616#Y>lw4eJZ7(lDnQHr>1&@eGetv=2 zs614a4gi;h2J8j;y|h?-L=|#3K}tdt{pILwiY!Nc7(D9=H8QXm1ON zI&{}f@J$tUSzx^*R zO0Kpi;(8X4P6j5_Zm799#BZqSch@Vn{`-<%?S%nPIT~=X>~by-g}=WCnM;|J#5huf zItS&!Mgp{^ZG%z}q(R7Ge;gcOLdLBF8yyUi8=%R+7MalP77}KP&-+9eIv^Sj&`lw^ zBmGc4KigO9;)K%^o{@cDcT~TRO3Uu6N}J}c)+U*bkX?VY&Gh1*_3^-wj;xCv2cXc{ zWq|6lV9|@J!DgGlPypGA%S}HeWctqGB9x->^8UO9#vXIg&QHIWZ}vO@)>>_3#=Q}o zc>tGR1(>G>{_=DW0|SEch%l*LD6pe>ft}3xi0$3t=o07{Jkc8*0%PC}T)_gWA<&82 z)7g6BwaT`q4)wo(9gmwR>u9^7(#!xqdcgZ+00k9QxkynLm6ceWVL)t}MdFqn^xzgn zWGE3|WttKJQhFmhC*xL-tIEUknSW<~L~gcQsKXu~H&)Tol4eF5J8ie#SHxq3K=-)% z!?sudaBggDj4?9=-(T;D@QyK8z5lh;D3(AJ&Lb zQe8dWl*L|dJF|AbZ6&W7k$Lp$E&1m%Qf}L|iJ^5{cme%Zr_)``@ z;Z;_^67($9%=McGDP|rvARZI1cV!YL za*cr}`mk{6~=0WX(LVA7wRoXA$chi^YU>c!+BRy>nEEi|Z*%Z^s2GFDPlIMJ?a2tsC2F zyTP4*7sF%)0Nuib`SfsAQ9^L+vulG=#KyNOhe6O?gqv9j;dLb;Ewcl)smgA@1=0|p zj;TvBc|VQzyIBTsEgpdm9DP5xg`7j!1_LrICiLbNG#Z;#l+W<*!@y9pG)gOcP;&xf zBD8QWbH*V^|EcbnfV=nsg5`^_Ywwe(1(C7z;;zJeGZv=I-fCjZMK?yEde%@Jg?++a z!ZaHHWJF}W%#rq!3)&e=3Fh@%$XwUL={d{q8XT&u>+9gk_-&{ zJfH9|9vm2`h@E`fTHCOkpesNt18p=eXy!lGPy#&+8F@jB_v{eO`?L;1|q8^Mqju*)5Ca4O5 z_GlIe2&}Az6~VQKK2CsA=j?IxLp3X=+E1wne%6`(%v*>N82RxSvrk+UkVef{YtdqX z2xXPU0fDxTY|b3E&n^0OQ6#{M;{is!Sm)B2+TQRJh&n37g~)VQYVWC539pAOU1`5w zBqkgV=NHi(7|j&(!@v^}STt_FpLN-Y$yJMIRo0ocr7#O?{Z!2G{q(|JiVzTui-Lpc zdnJjz)^lNr0cwS~d8yYY!!AH9i3^NjSPkhJHpx;FfOcQWx6Rb&uV=@YY(*bve^^)* zf!CMJ78~+ZTC_&qbvo*$^<3O-Tqxc(wcdq#O2Hf`9s+O(8~#W=Ji%iubd*CP;iZHG z!v|^QSZF0!zlaYm$YUl+EIjr}eG%d^(NP_8m!Akk64IfM5nFi=D|&l8$k5P3yLYEU zPrDjLW{}hImq^d%gic&}|VVfy87|c7%i4czQ*GDp_C( zI@Shbu{vVmHBsReMvN*5rZ*WAJ~I{9{G2bg?F+>(qD?n&W9?!=pB+*VU#jxNBpazQi0d`5HmJ#gA_E(P zyL;j}11=yo)y7oJ^96KgnJZN>;LT5Z-?#5-=r3#fc~b%=J&=DN4oJ;~w%YX6hP3Nq z%v^#y&VbvD%lR{PXM%1AffmXoE6&zzu=*xng%dm7bJJpWHf91$liV$sLOS*79l@-i zi}-=aQ*uql;o6?|9z=pcz!Zpo#8b8`ynCLp8(V_r*8`@aI6g@Da-)Vgq7Y`%gnTjA zQeay`*x#C_IyHhes+XnFx$op$EhRUxQb;$6Tj zUI_EDWduk95`uR-?yNcO@#$245HY`-UvN_0IsaT8SoNb}{fYe;8>LuGsR&@&1zx(o z9|e#t+M=OU|2n%I=JkerX#=;xbL@>b+-<&G@;>%iVg2Xv5oUt@eQ5%8n;wA7F4$y! zTHWz;Ql(BsX;C;}y5Z?tS68qT3m;bJDM#o!Ka3g!N}nY_jVc1AxG$(rXkshG#6gkA z6rXknWN-kP>6zU=sNnRvoYVJ6T!ER?xezQqA_%$oEkC2tOcNJTOnHr}Lvuha#Ns+E ztBWW4_*|XBGD7lO@30pkq}P-B%An@DWmjZ&{C6*3FnE3E&+@WsbV3AD-ucW}LM6nK zF}Tq&VfGA2a398O(rSK(y(LRyL3`SGyBWygFqR2(WQ@akRX zkUVb$`d(T-?@G-mgtvVm(q}!K{3G%B6KqLVjx;{JnO?^wC@_VPB7+i-&rOqHZSAD(dXv;PtO_gAs}C+MKjMmKuQebvMQ zZX!xPPpQbzA3WWaWh>RnaxJMJg||Sm7ZTlg9~Pz{CkD!CicHmbr*cdt*=L5J#u`!3 z7q6UD1}lBCu=l-z>AyNQx}<~?De4w60L`>5D(WtOBORxeI$8XIZN$|+l_L&X(5#56 zr?GIaNFsm-9BjIZ2}~O`C+1}UiX=EVxb$S(i4}Qclobxp`+ocKN*Q>nutZakjoXo< zVev{f-yELQBLOo?cQZ0Ib@|ttP@L{mF{vb*(i1b4zp9m;I zG6})@p=G3STGN5DbGeIUSAq*wf-2r$g5q4^Ank8z-56i!s zv7;aYLb7gE*64yR{W0J+T?4c2QzxW7^sF@LMG?N96uFOcWS zlK16{w6yG{PVj@2g9#)0=z=_OL`I~Br?&nAIN>AA z8a?QH6KJCfY{-Db_w~K`_E7|IR9mbkZO#!3YNd%`gR?+Yoh!syO_{O{ZB3LjE3TV@ zfTnOGi2%L3SZm7%>49 z|D0eQR|ZS`2NNU(rH5$;{zwZyA_5eDBmpwIeh1O4T0Fh_-?vpR19TZ|`0JcuUDW^r zh~g&pR?JuspzKF+KG$PGMZ@HlEu1*FQHl*NObUj-Fq+E7?LjtALAPO0_XYtP|6TqofC%n2cG3iTF`H2hhm( zbN>W1!6NmL@%#A+7pULJ!4CVYl$S&d^{^aoe|~5cez2i(FAY-UoB@-KZxe8wxN(bZ z^R}ZbF=%6dPM*^)wF2`}Lgc-Kqyk*qh?>4tsA3{RGavyiBe>=7m(>mi(rn+{)3DLx zFm6YO0mg{}Ksv>4b0sl`jUsyPcPgYw0Ci1_DZk~sfk7Pw1p@F$!=XGz8K$KCaTSd@ zG2Tt;VLyb>)z`-t5U_;~x3d9@o6`zo?1jDg@EYQ&NkDB6-`Lwv$X*udL4WTU2Q>)5 z#>Qs#H3GMojA^&8?oMN!6X+&wpKOmw@~|Ie>UYNY{Xo%*91yz#;W4NksfWlD!cSBw zpm52KR8qDcm~=0-Ft<{o_;Qe@%&s-boQ|WW15k=`s%=qmTa(rzz&gJgADD2WSVe&R zyK8TB12V4_iH^XCg?4UMH#7SSqq_v?R{c00ukgPBbzgy{z9hh~wo&%*Y}tgK))glc z7YK@iCq)y>*9TCn8+0YROGuE6n-~Gx+Q%p*0ExbJ4Y&7h^&yu}{mOh9B+?bKUQ&X5 z5Pc_x%@l>OytKp~(mJUJ!)a-FPHbX6gg>E%P1z>&bcn$3wh&sKADQ846-M7CTc|D* zog{hSpuv5?!d?>u_Wg6s7j@n?ZX|4D4ghA&NTv{SFnD>l$odow=<S6ShaHe4J46&fs>XlaWF{Y7()d+b*5aTva0nn`e&4$0Cm{e2 zFvwjlfSP`5ODOP(XH+GCdNyfLQX!m;gU#j&V+>a}o#^#jqJj#nj&b6RA-?(mLN!rT zF(vxv1c*C}Hj{aOW(I&~Sy9P0sJ{5Im#{1(P&FCZ z(U6Bhb+2+z-7A$l!|Dej$#0V*U#24bBC(iQMF|4eV9?pscTY#=r9k`5uS6IBy)^`? zixc^1Jb!KJpGcV{+PJeg_P%5VP6`;e&>c0v&`1%v~yWJ!+Edron6y#JA$OJ{ki$lpUe!B{4HQR9X zY(T*0ASd#Z_x96@@CsR*<`h%#NC~m1XYS)xp@iZ9UKuxQ;QN2)e2Qc@R~))d1O%?b zxcZ0semD6Zo>N)&tH30Dl=g~Y#A9FeUX7FdI_glMem_zqj|jf(;*a=T^B;-PQh>!O z$!d@$?IIR>2#V+g4G4xYKzY3=?f)9r)H=3Z4#etI&?#jLcbYKuk-dwndp9*YmGqsg z43>)Of7>Y3^;(J%Xs>_N$e{0P2%Smta#cTO>#bR#pCQ5_+~XgJvLUW~O4#~qprnK& z09>$&uIJ4ed>fJFt>Jl$*MS07k+5GOZidx`xIjtOBO-#Is!w~lM|&WN4PQ{^-k29i zOnMWkOMeeWNlw1l)HGzXxjx|3SYGz7#R-x)9tkTc7N}@eAtN2)o`J<*9RFPuvm~pA z!Nb=`zHj^1=FKcI<8VP@km%E~-22uVEwZjRF`EJMl6^rH`8qxUU^cwCxyIQaQLKBy z$>~l3*(`3poS(UEk}B?u$6{G+i#_yReb~{{b8u8#fr%OrQ27|*+unQTu&(`NpP?vI zHP$rc_h%pJZy5lKNWsV9%^G{z$O6>m__sX?nRY*Naq~}pd0wYDQ2?!rhd*a=;(*-y z93<$)W*RdgLz4is6IdI{jT(}DY}5aCof3&&vKc=rhgj}2-Bh>vh}=0Cgh^LzoNjN_ zq`Y)P2~bwzcJxv%rC4YfSnh*ZcnlC3{P4GvE*W?j*7Yz2>GWp0(%ZI3SQb>-u?sXM zG^Mh!ts<;20L1D4UAH}S%pGwv@TF}$fayZYsZO~pT%NH`dH~2U1?>b+-d9M$j_mSe z!fUGK`|k&KTY(zF<=zAc`C4f1_AY;xhDOXPP|fbVv+nXw?aLCp&jyQI6*^guN71o5b?XTbS23^qx^~ zB5I&&;VtM$vMm=5F^5j;uMbAlvEz5%2aIv3X=zN+1Drx&ribV#g8L~l0>=Y#KDj$n z3ZSD=%AckGWeA`q>j0ZdD1B2A)B8z&`7h=YeScs8QzwT8(Ret7S64)U!bEnK(*DMN zFFnz9|9@5k)4<3*fU5kjVbR6HYBz}Q!))5W;>@tB< z?=p$Mus8jpdal`djik@G!X4xN!;UU2A|;pN8zefB-`sogOh{4me=fkC>5p8z+@mVQ zbx+d@(E|wdYuS(ASzd{{{=#sEzP>z(3tcY~u?g|zMP!Trsa4!({bq>xCELFfr)y8@ zwl+WUlUPdlv%BlAmKxEzpFp>8+313n7&?>+T z5Q`ka(8Y86Wl_Wb>GGfvdkAgN&OC_`TAyy)|2^56L|l?-}1WD+GWMv%`!WB1g+%TN@Y~ zTtHWf)gK0A=PkJI@)^ulGq<}2ctSy;F?eGN}lfG;Gw!%^7QNT)*u#HZ+g@ER2?-#nrwcWe~zMXXLrVA zY^x3QjoRSPk>-$z6UZo@6tYrN*;T@@iq?Yqz(N@W5_djlW1)0J_O#8cl&JF{LFjNy zDuOU3cAR(4@F8^`v|)Z}b!qEXf3 zf&VETLew&BP(nh{WGgVH>wBZ4#2#o|C~qc)pv-@tAE16>^p?k;y*tf>iD)->vSQw`E0wp6E>~(u% zLQfS{Jebua2n2s(=joVWoU9L@f$8#_fH0_Xk&$e0Nw9~5@F7cW1k>|OXEsT8#@7y7 zS%MIhdV_d#1nXCuOE_SV5e@x4kqw~8lwfWvQcTn~hFX`ZN^S71)CG%}H6Nri%7;!Z zv-I(4ia!|CG<2~)6r;vP!JY0r7_coUlvi*Y>?=Z(Le#?jFeBWECki+p7%-9HT7@TZr44~-8>tMRR!?Ff860cxlyn z?Y$6A-@K0a+T`p4-)^?f&1=>JWiZAHI2O`%44bA*}>fpX{xdMmS&qh!lVnQtO3|kp_QZH6@hj zLTURUS;psHq=$iJAkCQ*C;3hp(H0r^gL{w$PFmi!+!w|Vs&2Y1e?*JWuc z8Y1WBOjQ}tWd_uoC}tVq(J>MRlKk`KYI01gBBBmreLSm6ap+V(sM?KNVlhH2{!p!m zw4Pq%s(fu8-m8`6v_|5%7xUviHKtV}5h`IXzh6Rg6GJWDl!dm&l)Qr@8OP}dH92{f zHu~qk&pS)qidUXD-mn7O7^FgGjPBGM3Ey0nU-}b(fGLXox3)45>Kda=dX<2O|}+T z!xWP;QX~9!XR`n*3{EoF%=#C{UKGW!?W~FU#d}#rNi{*<+M48FQzk(L2PU@+D8)wt z<6)dcX|NeM310*#1)Bn81WI9Z1AvNA2Pk~{s=7b~u#pV=i4TKkK|%TT5AWYWpNy^k z(W5_&r+(o-{~Yg~)a7z-+Q8ZN5YK-V^xw^wah3&?>om zUj+-3b@_lfu`V&NvK)3NO$JV!R}7o}EcB`jQ`f`}4u1I;mN!%!gANM9NR=(&K*nZH z_!2-B#9=WZm`VO{kD9N-z+M3iN-a({l;+17wS&B|W^-8Iz6i|4JMeL6_9xN0ZAC;Gl{oPR9{Q}WUS3=@Ws z{bW4sFXhTdUC4|7-~lzQI~)|YH|+^N{{;O+YS~N&&*lDCD$_Ih@xtcJ3OeBwY?LY^ zRH-CpWSDsTNB7r1iBKuO1T{#Ya{9pq?$wQr;?oI-p4+p4B%h9xncKJGo?#!-L*qNc z_rjv0ID>NR-<#A}$!3kaMsTjn4PB8*{@wYZDSg(V`1#4dWb;ond-1QoeiwyQ0AH~o z$_(HlAmIZ!$csgQ-?Vmz*w8*e_gqo^3h}N!UsU?`>+!z_fBRA2l$x4<=7vJP7#NJ-`5{ric39pOGuy!iO%oZ zm;dCls?P}{lb6478mnb*n{Ap>P!T?PW!rc7gq0};sI*M@xZIlw(656k{8%3m03Axvx4Ar5 z78D{FRgddY>Mq>>#TI=V(ND*Ez^Acupl_Sc1UarFcgyfnbbCwJeZP6OI6iy_If)XtGer8;CCTS+L$<9+t zKH-{lpY`y~S^t^S6N5*^BxFtR8>_zGRP%Rwgvfe^%Cf-Ed{z(zT|yJ}Xeb!<@p;lt z&(e&^{I{P(nGsNm%(?`bRn#~}wIEg58=z)6xiahw(y`ku=o zh%7e9UuMsJ2_TD+Gmq7gy~coMRz7@pdlRJkzp`i{O$(wJsD<<7M)3iVX~AaQP4pp0 zlO}Bf6e(2kLxmrAV-|s#3Sx1O^h;sobnPR99i1VRhB_HAcobiOD#3)LEzj}k?_X}0 z!=C*)Uq3wL%#~1wf4kXRMCh8TyTHa(p11kfq^}LWT^?+l?}oy)qWmJT_xSI)bLT>_sSrCA3 z0`jyhZUq1wP-^^v|LEw*o~Fv<`u=qDD(!#L2%dixc1cptuT&!<|CuPPcQ53vh+D*d==96PVXL=-3b>32*Pt$9zG?^ovyDGd-X}Yf zK~eWE4Vf@C8389*F4SpJK4O1d`goQK%A8YbA*5&XR~rAkMD#^pg5(uEL&TYM@`C^o zf=w2Bx#<+v`OWQNXhV*B)oDnOA?L|}08W3koFs*f5UB4k4Ni+P-t^?rN5nw4C0^jp zQPpy@>(oi-fI$0eNR9DzNN0Xt0Aea}&MsmEgj`PwOD+4T(xHeW7dB5siIIb|K0|jW zmT&4?oI7|&hck{E2mf`tn{hD4Pfot>t&l6J7sXWb)~{_czs2cSix3@cT5W=^f&@?1TY|D8=TuGbbh8(S(ToP`7- zck>MC{;R%4){?xH+&~YTC`f+o+2-?CA4h|B{>!?#DzYt4d z=}N~e**puFVrdHE)v0(h_|dlSbYo`$bD~0HKTd=a{vbzoW$ALiW#6jvYx<&L7vgq} z0{t1_Y@&)(eH`2}N>{(v|Iqoxe|}6Reg4CY=RsXOQ3Z@i4`-?GJwQQ(l3ZRpZXT3r zGfHUZiUlZfAO(fmHQ^F=fiVjcJf{TO1&X{RDKqy~2UMt^8=t5Bx8JDMrxj)WA+e9HlWfs5;7B_prlAUbZ? zhZHLHhh!k}hhvr~5XodXmj*sfQ#=Fji=I%ve2IB*a`G`-vE=9O;e@f}QoQVKQma~b zdi%lt%21tyW}oqZao(E}D8**|F~vL9m)YtMN@*NPOO59AN58#p?9W=ZFX>fp(0v>e=P(WynP4+ooN>`U20csE_I>IgpQaE)w>zxgB+bs|k zzZvYz<*tv(RN|>$F@|1z3~Mi1J3i5cDvT4|D$_M?e3#?+ ze%Q^<-jg9@ixsU%a!Y*oqR)Wy{rY0jpbr`PDLWZEIN15!WYX-G$x%LfQScc7xVZYG z5)uRyb5H0^m$yHp7g{ddl&8yuZr&R$)cuEG;&5Ows*Y8y$`bYB*>4a9Ts+HXn8~jS zA|7qxV*9y-4r%B(S1LV6IT_x3hA(r$m0!fgV zo14(2BNu0H8EoCp^M@OtJ_j7yYtga4BC~pCBA6`ZE)RKra23(jzMWXXl>+ zo^AiT&5v&suZCtQc*9p_NtpUB0qH$(X+b<8FsqQA)lgJKjz`7c4F#c?EAF%(%oOptCfX%hSc}-s>)v7qN1R0CHBila8$xiNU@}t(rft|O$zgf#|V;&(U?C$-% z-oL)JnZKfflHKXez62t2NJZCa>PY_XOBaB0yd%u$cT(TJgkIm!*7Y|3+kPA$F4z8j z(KR2V{%qk0UlU`ThYjBuJ53aF37vLQuZKsIsGebF8coxIi;C_T=XdhBt(w zGw)+Q*UBojxVl2#o-Gqei@1;r3*R%}&~V|OV9CnN1QP=0cUzhm8iJ6tVtf@B{u|MZ zCp+?gDMv?{q40-~a4&63pG<%YGVZMl1t0bp8)>L%%qK8}1kUirv_COvuDJv7QXqxR zoe{N_tfr7lv7GFC*p?qmtPf#%bN95QpiG|~nd=R!?gD+>spH~LvnDw)QLo4T*jPY>1)u>P(Z7^FOx zdVI?M4#`85^_on6Td7evQI+1`1Dmc4Nz$;r9IKkH|FuT}3lMF|0*?oz$N;g7bC z%5}-(65S(STd5DC;~rN?RsDd)l|Wp8U`}tALyhq-0z&-mhJAl1E5kw9AH!d$M&adz zJ@5M*PR4{L-`uZDJsOq#f8%hsz4yaUAHab|X};23GNPq2eyH(#bR>A0q)I#>N&BlM zRFb6y35dfu_+kwp>_w{LZdqM!e5XD3aUCHUr)r_z+^@6k3prx!2eof7=CgHsQ&}9| z>z=g78b!&&Rs-PO+Z16d-#M;RK5@g)Em#B!wJ`lEN?;X0b@l|mV9C^H+fvX|c0SV|<6|luiH{7^ zmnX^6p=?c1b&xBg1&}5x=0Df9wRu1rOx4K^0kBl9FU28;=BhRZ+b2hMCMIcv$vvGP z*umA2->uO*qIa`_uR)5VW{j>|8w8PK8Y;9>f= z80*b$XLQ8hZ-*OXz6@O@G4w;r`Rg-Twj=*}piuV1#0N#yYH{Edyubg4Ld(gny^h6q zj{eZf_oS=8+ulV%wmas(!_34Kbx9x8zW7OYhi{%rqxH`Md{1og%%kriA@bV% zSJmT2!H_MH$^{b(zl`{&o2E?#Sg6nUZi2hhDSY3+RW%yuHLQ#d)*l`VBhl?QS7dyT z8&x#gRU|G?*~f{KQchu3`#~>cRSz7Y23m~TGv;qqZ}-Nt$J9qK1fMY_LpCQ65y2AP zi;Z#$v-W&`;&zT`a0;xn9n9!MbOqPh1 zvrKkU|CW7xb+vx5a2vEB8RhV^fCm$b7T-`OkixFOCnfs$G3B^=nL|5qV&j`6CP|c> z4v|jp8qW##XYXBM2RSipY{C_*qx!OE);BSe4F*Yd)VGqg-{E=0m?)nCoww4Mw2f{J zDHq@8%%C9Y7M@1z82#=8tC;j@39a~1?6`gJw0cT{`}AVbBzLMc&#U{5Lm4_iS;?7~mFF))9Qm50O#I+wGJ0nEca|Ev+8cdF6ztxynQn~r z<>@>l+8O$( ztBKK_0%=^{v_E3umuOlj*ks**6M~9S@~=VCoyaVH)qR;n|KrL&b_h-0s@Bj64dA$G zZ`}qd1!}VbZV`qi!YoXA5sEri@?o!;oWIG-Cl};|(dfw&9coM7{#ELcQVvVv;yQe2 zLXMFZo0o?!#pqmplU9T0W;JsrXGmXMToTmmSPXqm-md4Yn>9B#Z&htopAKY*hsxs^ z$1~Vd!AT%3lM4&E;P)04$mAeQcJVY04qr(KOSLeuWu25_`r-s? z>uQCb9PFMs%yP7x)IXLpL)17BG)8S*vm}FOoo14;J&KP!=QlSwJ8U{!4O{6pAFWGk zfg>%=i}YHxf%wp)_LfIE@1qWR9EJ$Kvs})UiNl9k)q2qP-`97&F_+@Ahaa;6;jiV4 zc>@@EKb7SKQ7E-T3hVB8!(cDxBoi@J_U7=aB83AAf}AAW#iS_4?j6bfv!**w9!rpL zQ6bT4scY9WoAz7#JnJs3(iAg_z9ENAQlK55Y6cW) zsP~Oh3f|zLH;q;Z?ibZ}iIKtcj*FZuirVLdU7O@$-#Qlk#(#aTdKuqx^XBi1{$hcD z*Q?rJe2|_2RcV|@uM>H93>@V?Ugko<%wG|X1iQk`Y1B)AKUY7B+TP{pYn*yu|3$u%X6qQaB|39sov{}YHHp`Pv`E~b}t`1WsBaaHB1#0ga6ui_mBk%i9(krI`(SX_w&^1sE$1mE_=VcREN?~GRvp{Dq!8!n~f zg2dXYY}FsTeL{ibiCdfYthB`2hi&O*v`l(WC5t{#bNN0vk``?|vfVFRS>F_1>7R{y zaC7A@KFslPJ+A4mHm~VUj(>;WVrf?%(_%49urB|t`BZ$O2#)-tdyU$kNDu5EJjjp< zqEv~cTOH93Sy;^oS*Ds@4KA8KfA9G!_;+ap3g^L?-h&u@+|#d9=h4|RzLeLO$34|D zHz96=B0#43bPV! zvvL?M#GL(LEE%p))wz0hfS$N}F6QGPw;4nl`41 zmXO%r4{t{G@+lLNC@}f|gw5P$;-V}OUflP{WSXD!yy%J=_hNHTjhZMWYW*e*Pi*k3 zGNvdN_f<=5jJlm`aW-R%i=%}J;`T`W>!UH#`#`v5RPlO2+cBUBKFJP#KhT`yKZskF zy;7^a4VpdGL=1m0=5G7tA_v=;Wu>T?+T2&Q7%qzlSfeHJ-Jb1<1N}kr7vfDdDT`d? zbGJ*EYr6-IcJ>QxAgxXUB^{fwhDs}P!uxpKIe`lh!I{`J^;2LZu!Df1lkKF}Lz5xZZ@FKb zZ8qLItLq6 z0XW1koWm>{XN*d<3zg)LC+rTPQwSTuTHGpr(r{rxvgW59EWV?F8*bl9Et4AwhMGy>IP=NgD#_nObh#% zy?iSQp9bwee-6HV`)2U~E#XEK_O-5~N$N5{EvmMAa49;oiv*8GUm@!3MQ0&6es?gM zz}TlnFU7QcOw&H{*MVnuqJnBtDTN5#dufT6HKAxS0>;aIXteEePrcyd6QJKTbflVB zRxWwxHd(ilaST!`1^%h1dVD>fq9T5>Jwsd3Zn8~NJg{?XhR|K&E@vmd8hLE&u2vjG zUHTnsjxE&t=SBJRi8tLuR|Q{Lc5ZHhf*XUVAdH%%dzWND_5!CxZL2ZFGonzD1#pyN zE7}ls7w-;mlDA)^tXpyR-$R3kn(;i84|gl8 zDi~ynVr{~9N20+MWLdjk-wrGJ=}?y3o&${r4~TIu)JEjJ1^xdJ{eYAJ2Lp&mWT^&#@kR>T?#3g^S=YH%izsS!s>X+aN$wc07-IwVK!GFCq2>Px7Uov48sW(OM`CR zD!+jD&w|u~=WZCY`2{(tbg;Mz*p1HtlWC)KIAk1AoDF6An^4XL^zc}*Ja|9=Gg$gF zbaQ!-U+6SnaM#8BIn8L@5VHk8S7G&g@`rnSPF&Iku2|7xaNYHFZde^V^5wyN7XI(gD{oR7ivo6uV&)#agtyEilT#c zg!g_SMl+u7DXX{mH5=3*uqiP+zQa^sVs!|^yoTVVGFLRyeF^UizfHsq=V|lNU08A~ zt&-P{>VH39vUk*E|6$-N`o3U7qxni{=KnfQ-P_)R|j$DLnri zL#BywKQB(8uNnEcS38rkIv$X#5 z9WY6&*-icYiS+Z#0zXXSNL&0us@rw_?=mSFso+gg)Zuglr*4IxyT&iDtC-p)Z}_ey z{jRq)>nrXn&o0v?;ODUrPwUw>v)*LV`oa~AP9CXYu!h;LDmwoQ=yY3GiT>gO%%VP? z92gTOKp-s7q002kV7YfXXeAo*%DIFV{XR&h%(`uH@F}O`mI}o3-RsXKwtn zoW}D67xm!5M_O1So%0;oU#=nzcFWqy!IrFrIaQ?@Rn6VoLGcABl6b$HG4zTAKe|jO zij~+8zUUR~#+XB|?~V#D2ldVqcM4S!dOPI9hl{>V1U?PNC(@8{N6%+>CsdHYtWMp3 zpRwy3Tw-XATIm62y#g4q7GKt=AomREdmqp8#ht(FdNPtUp&q};7jBR6Y{q{dj*iA; zG4!k}<^rw>>_QC$F)vw1^lX&PwyXvx(h-(2UPMS{rA^U;@ePLzpf z4Lre<*O-3B=jm@!Z7$>Kr`z0V1=3mr1{`k8F4E*M=yX7(3y#va9?b%xJ{+wIt2Ey(k1q~LF8?O@Et{$yX1Z(QRXffD?5MLGy}0ahrJ^81OMbv|#lhH! ztg z;L5~8iRItj9*A)@B#(x&f@PP)Q?E}QbE|tJI2lwO960zX%$9Plk9l%&Byxb#*V+j4 zaw5RywUkjlVdSwnUz$Y611khr6vLIzZ&aIw{YYUCDdz(fZFql}~o{9y4?;C-h2{ zy-F;kF8{8Ke-I+qQLBlymFh?Ku<+^0=$*Co^?b+l>gk4{#$6ppB)VrHJ%Ie7!%C)g zwc1jc93SW4@1FwgayxU$nx+>HeBQ%53=RX14L31Vcs15@fzmhK%bycdY%hP8cJ(Xf zDQIeHKFTBY{=9E&HKo3i#G4=G!c!(@1E4`XJ?I<62o(Q&b$&5fyF33?Z6*9gpU~ef z`C6)=QZ7-$UZ0$;dnZT(7MAJ?-$8QgeARUR>6>?<6x^-5t0an1)`zw48C1pbZVlAXC(l>S zlZ9RHn2L~9Q9Qm}crF!r{&(FP5}`?WFJTaE7E0V$g}AePup9-{m5fVkcvh>c!l%mirh9nT41c9Dh16-@W^QN@HZa@Y!2e4N}#2SWM9vRx88S zXTxZ~g#^xXE46LO_rUF2`{`H`?z2qy8#(QFy`L}lyV5N^7XO4CvtmH=Sw);cJrZXW z$7Eq+KA00}7J$h>dn@QcD-8cfD~57&tCS=mri)i5eeX}*dU-PY?BGvS713nEo7FfF z9b`$w-@xH2YyR?uVq|%II@C6ikBX-!C=^v9%{wkLpH7(loXO18GO7j7@#z1^rNqK(_Ij; z3?qTnl(XO2vU$8|CLtad0**%NT#emkKMklS$bO=cc|uLOC2G}`51Mb zViddNtuA)csLP_2vQzi!Kq}wi=lPQAR zr5dlWTJ+t>3|FiLg4}VW%z_ZUYmm*4+kf{jtp}tcVUOXx-rbK-3 zTD_=zs5u4_9pGI>Nv&jRewI{{N&J6S&dq%>T+z(u{X>s#n=c@E` zUJ%I0$uYLJ%)K6zYX20%w@)ua%E)V4Is0K-k#_~@{SkH@bT(g#UcVK?taBJrF*0h{ zwJjzrq=Kos05uo?wMg6Tufh?ZoI_;xnuGAMh&~fM-JV!2hIz_u9$5345dyi}V=^oP zhOjPGLhPrtvL)~noEoC7gUYA;WT1-MBIzV8OpAX3FJ%9~AT!fxvKI5FWA5p*y{A*= zF+GgWqvb3YzAqz#s@341S9nu^ajjJ*h6G=>et%ABWHI+1mjw>WrLlUt7Rq(%C|te? zqw#F_bf0^F^;|tiE+MG4wzkH8+Yg!mDB?EPkfypgoIrel2^$4xVQ&z#SS;t*q@tY) zNgki`={*<&r7lhx(GG*A8*75b%wyx!x%V77a)Mo0?g(H~!mPwXLvhe-1_Af^BHhoQ z;-CxK*8aS?PeS$UV=b?52$cTU{Gn~+9oDwzakNy8RVV4g=zna)>^28r_1%dbA`+onzw?EFDnZ0Mu%$a+x zd*-?Zdwaoax=c0ptJ?0f?;vtCqw6xctLGY=z-lOw^V)tnF8VG-IVc{vclk9m0RLRm zurlcJ*j7+b{y5mFzDb?AnAvRd{} zTisK}A&OH4n*EyyK01Saxt6S|6%9Zl}%#?x#Dyu9s8H=(c|k za){lIY(wPYJWLMS$xKETyY)dzO##+GfMMJ{B>U5E!YhplPyO7g=KI;g!$Lz*0qm~p zLkW>T=*N}#JJ~l;}x||jUB7>+Y{M)I18!N!=o=; zr8c$Ac9yHk_ChL**@Xm#B=Lb^jAP!D6KzRAW3`j4Brv4+5<_qMyP;@P%>6!9p6~jg z-4rO%WVc1uJE-WiY2&I+eD7+zOq-Tpp(lDrbyYik_;a`t7!O1=%#PB6^0%s1R`TYh zP7j>yzL(KvN$=iemh<7}EItUuWcVw+v1Nvxu zGu+pj`b-W^=yNr7D^6CFwV$(>Py?9;CAXo^@>0h48tlI!&T@eHpk*m}@eBU3$LKo| zVTyPOI$?{r%9#&#L%9ltTQawk81V@J3a~}hHib&M!n6MAVuqFTn0Mq^)G23A@M|>- zk<9qJ_ax`sYTO##8cHDSyiN%Zj(I=l$`s|pneQo5Z}$y_?B!uzLP4|s$SmA)zMX(pvlLNK1ql**YG zy5+5VHl!Pw|E*i__uA)@m%YN%Cj z9lzL#qkcf-t-Wm~OB2ON>*C@zTw-8*?Cn0g{(fjN)j;t}0t*7lrlqr#@cazU1vG!YXoy2XJheg2zz{wZuvzC% zyX@*sHkm{!_)!;PP*^wY6gB^_y7|PKZIrocd{s zdM>!T%4^UxOG9!sK5iB*<9Aaj{{j`xfa&NP?3<1{KwDR_7VAb*(MjL`%$t+Ne@>3k z)??b9@cH5~N{z_=aP%@r?^4JGk|s}C1)JE9Jq;*Wi7Z8Oza>r=oXT@Q!g^A3M7;R1 zd}D33z+j#g@0fbNin#`ow)3Ss^jFYbzPd?U-HK!MIr0g8B`3uPhiZcJge2z6yAdWA zVCPu?Y@P~-LlcEXB$j3}6SOU@9*5mX@!Kr(6pTdz&kx>p0}a`aUjrZ%d(~((U9;&!l9S{nBAtv- z8e~|IOn99$|MUm9=_A1$e(~Hv;E{^wF%+9`w`2U$xGdqp6VLiY!G46WxCKaT=&`jx8(=f zNxd;!ny4H3+|Pi!^z1!@wPJ$*^s$iR_D|iT<>nL~&PQf7ID0DNH|Ij!GIM(sGvi@I zi2TyVN!-O-HPtryt8K(9bb*KgRm;>`jY&Rbba&);=smY3Slg@BM1%~AQqW`I;Ap*B zHB4Ju2QPd7E(8%TPNu`~f=aU*eW?7e0o26+HZNFK z<9(TJ3cOT~G-{BRPkZ+WyvHxB4!YoIAeE zgzR+2p@20QlF4B~$lM}kRQxF%LveH5xN2v`%);zR{t^{;XV;x!?>@8V=%P!f#&i5K z>ui9D)5`jN%6iEeOTCwpohL0P`Px433+jN(1XAxqdseDt>gUf4@91fD)))>zjI%J= z-Rj=(aV$B|)zyXHE_6CLWxD*317z9hVM!tkITr$;=)17jn6(saQ?<=mA?l%r(X9i- zTFm}LB@-6t?AoLkvPV1y!zaaXFVUU~oOO3MFAI8hsuIe5{5kpjWu=;hOW63xpt}n_Nc+*y)nZi0tgjsFEp55mJe%f(%HN_f| zwGk`3ybZ$F!oF?{+jmTV45mM&+(=OpH<*#%MuZ^IDYo~G&%U7u@MMRphtCgk2GjzUC`(h8ah zk(ojfxN}lwi?eG}VtA_v6xx^mGj1eibVQ- zJGX9xj92bu#oR~#K-t)0#M5Z#xt1UC zy7FSxLqecfc;hO}u-}M`gG>X?E+RrH^LQtU4Yw~r6k~yeq7nfYfSgW*X4D0~&y*L# zsxMTz26-sxQ0~p^kh)6r>X~{s9{_b8KuAk7^G-2FSBi-pcSQSoV--$js!r)+K{_(p zf$;rMa>kqE+li_kq=tmPH4B{f_V!2C zSEYdp3gJMa7y$_im<#crd6<5~;+c}f=HT93^N}ki2&DCSn_iC%Iu*RX#tmICW{WM` zQ%K#Jf^-+%g%PPw6oZku-d@>j*R6_Aur2x0VV4RWs&Cjc;hxiPb0`|WMhRA!SQ(^e z^(xY67_kgQythoLnrw2&%;75dL=5TSKz?V$Jk-ujw%kOL_r?d56c^j;S-h+v!8p~J z^iTJ{__X%=d+|$J5+_l+y9gmad<&b|4F%~VRMy#^kd57*aa=-oB2%!4W2+p~VZ845 zz27D{71<7GQg_iyf)yz&7bGySX=AbmhTFg7&-$tpN)5Hs#JBQ;$}wGl z$9}Q3snKKdVTVAJ{=v`)7rU8{+=^8r#u3!(J4!nrOfx&-02dS02#kXypr6L7Rs%f8 zCu&&;RzdEiI%XZ~J^k!VhsJg`S;)!nSQtED)-WRKKVHAMi4ytvGsw{6GRT*4@-y4o zU`~pwRM{;q8O%~Czq7Bpi|u_KLATzYKm9j`S(R91ov}W~N>Lat)B#B21AXex?TTPb z`xm~GlBC2a3GHv4DX#0_%L_{otSWWjpUGq8FuV{>6Yxj}0`AEF+HIH_c{}z^-c)p4 zY0abt{R5iFAZIL-^j0?k^j786Xg2frcVRuDng0%uQF1oC&1{6}hmQO6e zmHTJ@`6!OsE_uDcNlNqPS3`ck`0C@#_5amP1dvTZVuw%wazW`H#Oh7&1I)-;ma5j0CQ(u4W!OB5-E zd;B5gmkatutZ4BE_2Z=!^}qlA`vn#s#0zHzJyi@+B$0)x>T@7URsOCe>w1c#df+=5 zwhZm~c&$4wund6!eB7e*NPf|f1*D}9(@}oW3rwG6HZaMo&!-23f z7Sp#D>8Y5d7gV{=G-U|qiRxQrr9Z08D^)_DzLJe8(#f>n9DOj^;zX(4zMzJ>zV}Fp z15E^?#5>9(Z$c-91LYpQjOlnU9`49mYF$ppt0aL+(GSq>XXK0h^V?p{tWf*#GW4S@ z_YIBIez|bg?`{(ygdv53x75gAM7yBjYlSjXAED%!+n z;qT3~Lz7I;KMf=tAI^--g97(Ht#Zr4g(W3tKDX+5;Q5RYP5{-~YQ{ZFoSSQ))|5Wf`x4%ljYLUqboU+-j}Ol0i7GzGEiuSx&!?ofJ6z(KZ1ERKc=|Mw1ahoLtj-Mf zv~I?Lmi_m$;q0lkN*l`PPNu4ytrYNDkLC65!Q3f)nMQ!$Pl?9u+~7c(2oYB&X^onX zrG)fY^OlJp;ujRx8W8?!5t$5o|Q%pC3M<`ZMqoMs;~UGDyRIDQLX&+xLcMY~yB z=kUuJ+d|&uDPJ<%rNYj0D#zvG?I`6&Bske_tOz41V-dnT9q)Cf8^lq5><#WC%np03 zkzp{xB?Dm#9};Yti*iVetS4@MT5YIQUfAtqt1k0kU}e36T+ZEN63@mgLs$LjCQG`A z&QAs+F5uMw$xGllP~&Dcz!O9*)OZgABf=fE8wi@8gGym@)IWFP>|nX9y2SW+4d(cM@yxAqlK`_d)P z&1<#>SGKaWUVPS^3hXfz)Q%6h00DD8L0g_v<(a3hIwh>e zZ>In8t57TLc0KWZX*~un&`i-U9>>2tV%h0)KnnwO(^6_B$iK+{lg1u%Y zP`s`o7_YKjZBKw+Pxczwi(#^Q4DIiKxTecnW?C83D0?E_ZpL!Xph!SKF!|Yw&8+%< zB#5Q@#^;4a0UQf#e+{9S3G`3*=S21BsncXb2BE0RnL0B{IooeA?X$W0T@5e*`7AG!Epd^s-hfX3_o-VosPV<-8%@wp zl5vk46T@*R*%P!i=k4B`~KG zpIprtWC%Jl1f@|al9+6h7}!_{$;imO&)UN7op)vG+Zb0nxMhzL>STr_cI#E65(o~( zLv8jQ&Q`!%8k04lOh1B86x{KyTsLfl;_fj!FI+8Maat4@BP&@K06Onjh$3cID~gSZ z3b2}a&vSaR8%x9*LTo<%*;qJhdGlahprB_0Jz+U^IJs<~S=ae>4a5`-h5j6HnI={` z2W`~i26W#!FRF&LKH~S=nT>zNEYRmRpIn$r4DpBO8-qwKw_b^-WBa`C16R}P7(Twl z9<`K2O`qef0od@cou~vCj0IdP_l;hBz(qFIdY@P?8;WVE-s+VcD!uJ zN@;m6#zaOg=_xV}3U4H2CtWl0EJ2shhjDkUYA!vI2r;o}XrI5pF`wdgQzr2NDG8t- z))cT5Pl8A9wU+jw%|U>-!s3|Z<|EgAvH96oR_@cS*T!tKlZ7p%-^7g`Yb=3EDVo=z zc4NS^G=?{~G+3o8^Dei|%N-w+v&u50mgs5}@M25%yvWDG|AdkjUpf)``1qcOV>S7_uZ7` z@!PnErOYyaq${g?24v<{wa=2T3kr5^i+qgZ7r7YoUaoUcPN$+iI2>Jd9&47ug;LYPY3tx#PLN%+xdfO-4djuc};is(kFEO%*0L z4@icpVvyGxuFh*5je?5xUf^IkGTl4`XQeVR5{gg-k%CA%E(SFY5+#OGWa|S zT!7)uLjNdXhlYXlS#P+vGvR-;ZeC@npF&?mv26-!E%U*NA*$^1VEw}jtcWCxIK1ou zGB*>Gs}0s3r5vb!Rlj*oVK9*hf+7i=mBbOmn(Q0!whFo+S#HltiXYg|N!&Q%c{0fm z(9)}XpD5*F5@ose(VwPw-ZzlbN^xKP2L?&}_j6_@1@!+>L&+F0MzHTnZ)IE+fvC2L z5l7_!vV`#fp(<4>S zu3~!C6;aA?PGyjGGyl0HTSQA%jP6w$`0bK_CJzHyE;L}^F(g-E?(d^lotI_;&)0@2 zj|R)lbxC^s*LFxAYJm~R+s|kEYw=&x*z-}u@q`%eqqrYjk^%o~<8^h6Bw*B7D#`P| zf~sxg;EQu49(nwK3GAd-{%Q16Z4=J_wx1n704}2F7^L;zPQU7`d?Z-t|En5&I7Ig1 UpdTWj4uHQqxAoPlRMAiV1IUJbvj6}9 literal 0 HcmV?d00001 diff --git a/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt new file mode 100644 index 00000000..5de012b5 --- /dev/null +++ b/src/en/animeowl/src/eu/kanade/tachiyomi/animeextension/en/animeowl/AnimeOwl.kt @@ -0,0 +1,314 @@ +package eu.kanade.tachiyomi.animeextension.en.animeowl + +import android.app.Application +import android.content.SharedPreferences +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.animeextension.en.animeowl.extractors.OwlExtractor +import eu.kanade.tachiyomi.animesource.ConfigurableAnimeSource +import eu.kanade.tachiyomi.animesource.model.AnimeFilterList +import eu.kanade.tachiyomi.animesource.model.AnimesPage +import eu.kanade.tachiyomi.animesource.model.SAnime +import eu.kanade.tachiyomi.animesource.model.SEpisode +import eu.kanade.tachiyomi.animesource.model.Video +import eu.kanade.tachiyomi.animesource.online.ParsedAnimeHttpSource +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.util.asJsoup +import eu.kanade.tachiyomi.util.parallelFlatMap +import eu.kanade.tachiyomi.util.parseAs +import kotlinx.serialization.ExperimentalSerializationApi +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.put +import kotlinx.serialization.json.putJsonArray +import kotlinx.serialization.json.putJsonObject +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get +import uy.kohesive.injekt.injectLazy +import kotlin.math.ceil + +@ExperimentalSerializationApi +class AnimeOwl : ConfigurableAnimeSource, ParsedAnimeHttpSource() { + + override val name = "AnimeOwl" + + override val baseUrl = "https://animeowl.us" + + override val lang = "en" + + override val supportsLatest = true + + private val json: Json by injectLazy() + + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + + private val owlServersExtractor by lazy { OwlExtractor(client, baseUrl) } + + // ============================== Popular =============================== + override fun popularAnimeRequest(page: Int): Request = GET("$baseUrl/trending?page=$page") + + override fun popularAnimeSelector(): String = "div#anime-list > div" + + override fun popularAnimeNextPageSelector(): String = "ul.pagination > li > a[rel=next]" + + override fun popularAnimeFromElement(element: Element): SAnime { + return SAnime.create().apply { + setUrlWithoutDomain(element.select("a.title-link").attr("href")) + thumbnail_url = element.select("img[data-src]").attr("data-src") + title = element.select("a.title-link h3").text() + } + } + + // =============================== Latest =============================== + override suspend fun getLatestUpdates(page: Int): AnimesPage = + advancedSearchAnime(page, sort = Sort.Latest) + + override fun latestUpdatesRequest(page: Int): Request = + throw UnsupportedOperationException() + + override fun latestUpdatesSelector(): String = + throw UnsupportedOperationException() + + override fun latestUpdatesNextPageSelector(): String = + throw UnsupportedOperationException() + + override fun latestUpdatesFromElement(element: Element): SAnime = + throw UnsupportedOperationException() + + // =============================== Search =============================== + override suspend fun getSearchAnime( + page: Int, + query: String, + filters: AnimeFilterList, + ): AnimesPage = advancedSearchAnime(page, sort = Sort.Search, query = query) + + override fun searchAnimeRequest(page: Int, query: String, filters: AnimeFilterList): Request = + throw UnsupportedOperationException() + + override fun searchAnimeSelector(): String = + throw UnsupportedOperationException() + + override fun searchAnimeNextPageSelector(): String = + throw UnsupportedOperationException() + + override fun searchAnimeFromElement(element: Element): SAnime = + throw UnsupportedOperationException() + + // =========================== Anime Details ============================ + override fun animeDetailsParse(document: Document): SAnime = SAnime.create().apply { + genre = document.select("div.genre > a").joinToString { it.text() } + author = document.select("div.type > a").text() + status = parseStatus(document.select("div.status > span").text()) + description = buildString { + document.select("div.anime-desc.desc-content").text() + .takeIf { it.isNotBlank() } + ?.let { + appendLine(it) + appendLine() + } + document.select("h4.anime-alternatives").text() + .takeIf { it.isNotBlank() } + ?.let { + append("Other name(s): ") + append(it) + } + } + } + + // ============================== Episodes ============================== + override fun episodeListParse(response: Response): List { + val animeId = response.asJsoup().select("div#unq-anime-id").attr("animeId") + val episodes = client.newCall( + GET("$baseUrl/api/anime/$animeId/episodes"), + ).execute() + .parseAs() + + return listOf( + episodes.sub.map { it.copy(lang = "Sub") }, + episodes.dub.map { it.copy(lang = "Dub") }, + ).flatten() + .groupBy { it.name } + .map { (epNum, epList) -> + SEpisode.create().apply { + url = LinkData( + epList.map { ep -> + Link( + ep.buildUrl(episodes.subSlug, episodes.dubSlug), + ep.lang!!, + ) + }, + ).toJsonString() + episode_number = epNum.toFloatOrNull() ?: 0F + name = "Episode $epNum" + } + } + .sortedByDescending { it.episode_number } + } + + override fun episodeListSelector(): String = throw UnsupportedOperationException() + + override fun episodeFromElement(element: Element): SEpisode = throw UnsupportedOperationException() + + // ============================ Video Links ============================= + override suspend fun getVideoList(episode: SEpisode): List?yo>DbG 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 R{Nw-t002ovPDHLkV1h%U%i90| literal 0 HcmV?d00001 diff --git a/src/en/animeparadise/res/mipmap-xxhdpi/ic_launcher.png b/src/en/animeparadise/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..e67f3263043e0bf534ffc48830f2023ac597930f GIT binary patch literal 9527 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 literal 0 HcmV?d00001 diff --git a/src/en/animeparadise/res/web_hi_res_512.png b/src/en/animeparadise/res/web_hi_res_512.png new file mode 100644 index 0000000000000000000000000000000000000000..1927b8de0d8864ab7a0fdb4ca7694a33fc3f6386 GIT binary patch literal 66519 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