39 Commits

Author SHA1 Message Date
您的名字 e95ffad576 chore: 更新Release仓库json文件到v3.0.9
- 更新mobile.json版本信息到3.0.9
- 更新leanback.json版本信息到3.0.9
- 添加新功能描述:直播开关控制、实时倍速显示
- 添加UI优化描述:滑杆优化、播放进度条改进
- 更新下载链接指向v3.0.9版本
2025-10-24 14:04:12 +08:00
您的名字 78570eed7c feat: 升级到v3.0.9版本
- 新增直播开关控制功能,可隐藏/显示直播tab
- 优化滑杆圆球大小至20dp直径,提升操作体验
- 改进滑杆刻度显示,非激活轨道显示刻度
- 增强播放进度条动态大小调整功能
- 新增实时倍速显示功能
- 优化源管理模块间距动态调整
- 修复播放进度条圆球跳回问题
- 完善直播开关逻辑和UI交互
- 更新版本号至3.0.9
2025-10-24 14:00:14 +08:00
您的名字 dcc751c691 feat: 更新检测机制优化
- 修改更新检测逻辑,直接使用GitHub Releases API检测最新版本
- 点击更新按钮跳转到GitHub Releases页面而不是直接下载APK
- 优化版本号比较算法,支持更准确的版本检测
- 修改关于页面按钮文字颜色为白色
- 移除对本地JSON文件的依赖,提高更新检测的可靠性

相关文件:
- app/src/mobile/java/com/fongmi/android/tv/Updater.java
- app/src/leanback/java/com/fongmi/android/tv/Updater.java
- app/src/mobile/res/layout/dialog_about.xml
2025-10-14 19:10:23 +08:00
您的名字 7a9dc27835 发布v3.0.8正式版 - 4个架构包
 新功能:
• 更新流程优化:点击更新跳转到GitHub Releases页面
• UI优化:关于页面按钮文字颜色改为白色
• 点击效果优化:使用更柔和的半透明白色
• 选中状态优化:使用半透明黄色背景

🔧 修复:
• 修复Hook类安装权限问题
• 解决'解析软件包时出现问题'错误

📱 包含版本:
• 手机版 ARM64-v8a (34MB)
• 手机版 ARMv7a (30MB)
• TV版 ARM64-v8a (34MB)
• TV版 ARMv7a (30MB)
2025-10-14 18:46:10 +08:00
您的名字 3407f1f955 更新v3.0.8手机版APK
- 修复Hook类安装权限问题
- 优化点击效果颜色,使用更柔和的半透明白色
- 调整选中状态背景色为半透明黄色
- 更新版本号到3.0.8
2025-10-14 18:00:14 +08:00
您的名字 54280b68eb 修复点击效果和安装权限问题
- 修复Hook类中canRequestPackageInstalls()返回false导致的安装失败问题
- 优化点击效果颜色,从刺眼的亮黄色改为柔和的半透明白色
- 调整选中状态背景色,使用更柔和的半透明黄色
- 清理项目中的临时文件和重复文件
- 更新版本号到3.0.8
2025-10-14 17:50:42 +08:00
您的名字 cf56f091f3 docs: 更新到v3.0.8版本,优化UI交互体验 2025-10-14 13:40:13 +08:00
您的名字 9d6d531ffe docs: 更新README文档,反映新的文件结构和下载方式
📝 更新内容:
• 更新下载链接指向XMBOX-Release仓库
• 添加版本历史链接,支持历史版本下载
• 更新v3.0.8更新日志,突出UI交互体验优化
• 添加下载说明章节,解释新的文件结构
• 更新APK文件大小信息
• 保持文档与新的版本化文件结构同步

🔗 新的下载方式:
• 最新版本:直接下载链接
• 历史版本:按版本号组织的文件夹
• 版本信息:每个版本包含完整的JSON配置
2025-10-14 12:55:23 +08:00
您的名字 0c60ddf63d chore: 升级版本号至3.0.8
- 更新app/build.gradle中的versionCode和versionName
- 更新README.md中的版本信息和更新日志
- 更新XMBOX-Release目录中的版本配置
- 更新create_release.sh脚本中的版本号
- 添加v3.0.8的更新说明,重点突出UI交互体验优化
2025-10-14 12:37:30 +08:00
您的名字 928a0e9807 feat: 优化UI交互体验和视觉效果
- 修复按钮点击效果过于明显的问题
- 统一使用自定义背景替代系统selectableItemBackgroundBorderless
- 移除Control.Action样式中的文字阴影效果
- 优化直播页面选择按钮颜色为主题黄色
- 调整许可协议页面按钮区域上间距为8dp
- 修复跨类和换源按钮的文字重叠问题
- 提升整体UI视觉一致性和用户体验
2025-10-14 12:35:12 +08:00
您的名字 93d8c5703b feat: v3.0.7 UI优化和功能改进
 UI优化:
- 新增CustomSwitch自定义开关组件(黄色/黑色Material Design)
- 优化电量百分比显示(16sp字号,距离闪电图标2dp)
- 隐藏壁纸功能,精简设置页面

🔒 安全增强:
- 启用v1/v2/v3/v4多重签名保护
- 提升应用安全性和兼容性

🔧 改进优化:
- 修复设置页面开关组件问题
- 优化内存使用
- 提升播放稳定性
2025-10-13 22:50:42 +08:00
您的名字 597261ff57 feat: 添加自定义开关按钮样式和UI优化
- 新增CustomSwitch自定义开关组件(黄色/黑色Material Design风格)
- 优化电量百分比显示(16sp字号,距离闪电图标2dp)
- 更新所有设置页面使用新的开关样式
- 移除旧的开关颜色设置代码
- 构建v8a正式版APK
2025-10-13 20:22:15 +08:00
您的名字 d4d30d39c1 feat: 优化播放页面电池显示和搜索页面布局
 新增功能
- 播放页面添加电池电量显示功能
- 充电时显示闪电图标
- 时间、闪电图标、电量百分比分离显示

🎨 界面优化
- 优化搜索页面左侧视频源列表间距和字体大小
- 改进布局紧凑性,提升视觉体验

🐛 问题修复
- 修复全屏播放模式下电池百分比无法显示的问题
- 修复普通布局缺少电量显示控件的问题

🔧 其他改进
- 删除隐私协议页面顶部应用图标
- 优化通知权限请求时机(改为用户同意隐私协议后请求)
2025-10-13 17:43:07 +08:00
您的名字 f49f1cd0b0 fix: 修复静默检查的严重问题
🚨 关键修复:
- 移除多余的 getAutoUpdateCheck() 判断
- 完全恢复 FongMi/TV 的更新检查逻辑
- 所有控制都通过 Setting.getUpdate() 进行

🔄 正确的更新流程:
1. 应用启动时总是执行更新检查
2. 但是否弹窗由 Setting.getUpdate() 控制
3. 用户拒绝更新后不再弹窗,直到手动检查

⚠️ 问题说明:
之前添加的 getAutoUpdateCheck() 检查是错误的,
这会导致即使有新版本也不弹窗的问题。
FongMi/TV 没有这个额外检查,所有逻辑都在 need() 方法中。
2025-10-13 17:43:07 +08:00
您的名字 8c6275ffe8 fix: 优化更新检查用户体验
🔇 静默更新检查:
- 自动检查时不显示任何提示信息
- 只有发现新版本时才弹出更新对话框
- 手动检查时显示完整的状态反馈

👤 用户友好:
- 避免应用启动时的无关弹窗
- 网络错误时静默处理,不干扰用户
- 完全模仿 FongMi/TV 的更新体验

🎛️ 控制机制:
- forceCheck 标记区分自动/手动检查
- 手机版和TV版行为完全一致
- 用户可以通过设置禁用自动检查
2025-10-13 17:43:07 +08:00
您的名字 e094f38423 fix: 修复应用更新检查机制
🔧 更新检查优化:
- 复刻 FongMi/TV 的更新检查机制
- 使用独立 Release 仓库托管更新信息
- 避免 GitHub API 频率限制问题
- 默认启用自动更新检查功能

📂 文件变更:
- 重写手机版 Updater.java,统一更新检查逻辑
- 修改 Github.java,指向新的 Release 仓库
- 启用 getAutoUpdateCheck() 默认值为 true

 功能改进:
- 手机版和TV版使用相同的更新检查机制
- 支持国内外网络环境自动切换
- 错误处理和用户提示优化
2025-10-13 17:43:07 +08:00
Tochen 0734ffc630 Update README.md 2025-09-26 17:16:53 +08:00
您的名字 a8700a8c66 docs: 更新 README.md 到 v3.0.7
- 更新版本号到 v3.0.7
- 更新下载链接和文件大小
- 添加详细的 v3.0.7 更新日志
- 记录所有核心修复和UI优化内容
2025-09-26 13:19:14 +08:00
您的名字 ca95128ee9 feat: 全面优化应用稳定性和用户体验
🐛 核心修复:
- 修复 VodConfig/LiveConfig 空指针崩溃问题
- 添加构造函数初始化列表,防止 clear() 方法空指针异常
- 增强 Setting 类隐私协议状态管理

🎨 UI/UX 改进:
- 新增隐私协议页面 (PrivacyAgreementActivity)
- 修复按钮文字显示不完整问题(调整文字大小和按钮高度)
- 空状态动画位置优化(向上移动40dp)
- TV版选集按钮选中状态文字改为黄色显示

🌟 空状态优化:
- 恢复完整的 Lottie 空状态动画 (54KB)
- 新增多个空状态布局:搜索、收藏、通用
- 更新空状态文案为川渝方言风格:'这里撒子内容都没得~'

📺 TV版本优化:
- 新增专用颜色选择器 episode_text.xml
- 选集按钮选中状态文字颜色改为黄色 (#FFEB3B)
- 仅影响视频详情页,不干扰其他页面

🔧 技术改进:
- 优化生命周期管理和错误处理
- 增强任务栈管理,防止用户返回协议页面
- 添加空值安全检查,提升应用稳定性

版本:v3.0.7 - 包含所有修复和优化的稳定版本
2025-09-26 13:19:13 +08:00
您的名字 dde56eeedb 修复leanback版本更新提示和视频源选中状态问题 2025-09-26 13:19:09 +08:00
Tochen f530ee6407 Update README.md 2025-09-24 19:08:47 +08:00
Tochen f9ec0334e1 Update README.md 2025-09-24 18:56:52 +08:00
Tochen 389d548d08 Update README.md 2025-09-24 18:50:13 +08:00
Tochen fb948dc8c0 更新 README.md 2025-09-24 18:23:38 +08:00
Tochen ce2f46cf5b Update README.md 2025-09-24 18:04:58 +08:00
Tochen db63949a31 更新 README.md 2025-09-17 16:09:38 +08:00
Tochen f2127ab3a6 更新 README.md 2025-09-17 16:05:54 +08:00
Tochen f525a88668 Update README.md 2025-08-28 15:26:23 +08:00
Tochen 91a20c8aae Update README.md 2025-08-28 15:22:21 +08:00
Tochen 59a8c4fd01 Update README.md 2025-08-28 15:16:28 +08:00
Tochen 3f63cc2416 Update README.md 2025-08-24 01:11:51 +08:00
您的名字 fcdef561ec Update version to 3.0.6 in README.md 2025-08-22 17:42:57 +08:00
您的名字 8d0ae1d5b4 Update strings and notifications 2025-08-22 17:39:24 +08:00
您的名字 afd2d4667d Update settings page icons: Replace icons with Material Design 3 style icons 2025-08-22 17:36:29 +08:00
您的名字 ceadb06a64 docs: 同步构建说明文档 2025-08-22 13:36:22 +08:00
您的名字 f276fad550 docs: 更新版本至 v3.0.5 2025-08-22 13:34:01 +08:00
您的名字 b20cf45850 完善版本检查反馈:添加'已是最新版'提示
- 修复点击版本号检查更新时无反馈的问题
- 添加'已是最新版本'的友好提示
- 优化用户体验,确保每次点击都有明确反馈
- 支持移动端和TV端
2025-08-06 16:07:38 +08:00
您的名字 593f1e7444 📱 发布XMBOX v3.0.6 正式版APK
🚀 新特性:
- 修复自动更新功能,支持点击版本号弹窗检查更新
- 智能镜像选择:GitHub API限流时自动切换到Gitee
- 友好错误提示:显示具体的更新失败原因

📦 发布文件:
- mobile-arm64_v8a.apk (36MB) - 适用于大部分现代手机
- mobile-armeabi_v7a.apk (32MB) - 适用于较老设备

🛠️ 技术改进:
- 优化网络请求逻辑,提高成功率
- 配置Gitee镜像加速,提升国内用户体验
- 增强异常处理,避免静默失败
2025-08-06 15:22:16 +08:00
您的名字 a4d671b394 修复自动更新功能并优化Gitee镜像配置
- 修复版本号点击无弹窗问题,添加友好的错误提示
- 更新Gitee镜像配置,使用正确的用户名 ochenoktochen/XMBOX
- 优化更新检测逻辑,支持智能镜像选择和错误处理
- 增强用户体验,显示具体的更新失败原因
- 支持GitHub API限流时自动切换到Gitee镜像源
2025-08-06 14:35:54 +08:00
414 changed files with 2422 additions and 36895 deletions
-32
View File
@@ -1,32 +0,0 @@
# 构建成功说明
## 修复过程
1. 添加了必要的native库文件
- 从反编译的APK中提取了arm64-v8a架构的库文件
- 将这些库文件复制到`app/src/main/jniLibs/arm64-v8a/`目录
2. 添加了着色器文件
- 从反编译的APK中提取了着色器文件
- 将这些文件复制到`app/src/main/assets/shaders/`目录
3. 修复了EventIndex类
- 手动创建了`EventIndex`类实现
- 禁用了EventBus注解处理器以避免冲突
4. 修复了Gradle构建问题
- 禁用了Glide注解处理器以避免Java编译器访问错误
- 更新了`gradle.properties`文件,添加了必要的Java编译器模块导出
5. 添加了必要的依赖版本
- 确保`media3Version``okhttpVersion`变量正确定义
## 构建结果
成功构建了`mobile-arm64_v8a.apk`文件,位于`app/build/outputs/apk/mobileArm64_v8a/debug/`目录。
## 注意事项
- 禁用了一些注解处理器以解决构建问题,这可能会影响一些自动生成的代码
- 如果需要进一步优化,可以考虑重新启用这些处理器并解决相关问题
- 所有必要的native库文件已添加,确保了播放器功能的正常运行
+65 -10
View File
@@ -1,15 +1,15 @@
# 📱 XMBOX - 强大的Android视频播放器
<h1 align="center"> 📱 XMBOX - Android资源播放器
</h1>
<div align="center">
![Version](https://img.shields.io/badge/version-3.0.4-blue.svg)
![Version](https://img.shields.io/badge/version-3.0.8-blue.svg)
![Android](https://img.shields.io/badge/platform-Android-green.svg)
![License](https://img.shields.io/badge/license-GPL--3.0-orange.svg)
![Build](https://img.shields.io/badge/build-passing-brightgreen.svg)
一个功能强大、界面简洁的Android视频播放器,支持TV和手机双平台。
一个操作方便、界面简洁的Android视频播放器盒子,需自行添源,支持TV和手机双平台。
[下载APK](../../releases) • [功能特性](#-功能特性) • [构建指南](#-构建指南) • [API文档](#-api文档)
[下载APK](https://github.com/Tosencen/XMBOX-Release/tree/main/apk/release) • [功能特性](#-功能特性) • [构建指南](#-构建指南) • [API文档](#-api文档)
</div>
@@ -36,13 +36,24 @@
## 📥 下载安装
### 最新版本: v3.0.4
### 最新版本: v3.0.8
| 平台 | ARM64-V8A | ARM V7A |
|------|-----------|---------|
| **📱 手机版** | [下载 (29MB)](../../releases/download/v3.0.4/mobile-arm64_v8a.apk) | [下载 (29MB)](../../releases/download/v3.0.4/mobile-armeabi_v7a.apk) |
| **📺 TV版** | [下载 (27MB)](../../releases/download/v3.0.4/leanback-arm64_v8a.apk) | [下载 (28MB)](../../releases/download/v3.0.4/leanback-armeabi_v7a.apk) |
| **📱 手机版** | [下载 (34MB)](https://github.com/Tosencen/XMBOX-Release/raw/main/apk/release/v3.0.8/mobile-arm64_v8a-v3.0.8.apk) | [下载 (30MB)](https://github.com/Tosencen/XMBOX-Release/raw/main/apk/release/v3.0.8/mobile-armeabi_v7a-v3.0.8.apk) |
| **📺 TV版** | [下载 (34MB)](https://github.com/Tosencen/XMBOX-Release/raw/main/apk/release/v3.0.8/leanback-arm64_v8a-v3.0.8.apk) | [下载 (30MB)](https://github.com/Tosencen/XMBOX-Release/raw/main/apk/release/v3.0.8/leanback-armeabi_v7a-v3.0.8.apk) |
### 📁 版本历史
- **v3.0.8**: [查看v3.0.8版本](https://github.com/Tosencen/XMBOX-Release/tree/main/apk/release/v3.0.8) - UI交互体验全面优化
- **v3.0.7**: [查看v3.0.7版本](https://github.com/Tosencen/XMBOX-Release/tree/main/apk/release/v3.0.7) - 全面优化稳定性和用户体验
### 📦 下载说明
- **最新版本**: 根目录的 `mobile.json``leanback.json` 包含最新版本信息
- **历史版本**: 每个版本都有独立的文件夹,包含完整的APK文件和版本信息
- **文件结构**: 按版本号组织,便于管理和下载
- **签名保护**: 所有APK均使用v1/v2/v3/v4多重签名保护
TV版基于 [FongMi/TV](https://github.com/FongMi/TV) 原项目就改了些配色,想要嘿稳定的可去原项目体验
### 📋 系统要求
- Android 5.0 (API 21) 及以上
- ARM64-V8A: 推荐新设备使用,性能更优
@@ -121,7 +132,29 @@ XMBOX/
## 📝 更新日志
### v3.0.4 (2024-07-30)
### v3.0.8 (2025-10-14)
#### 🎨 UI交互体验全面优化
* **修复按钮点击效果** - 解决按钮点击效果过于明显的问题
* **统一自定义背景** - 使用自定义背景替代系统selectableItemBackgroundBorderless
* **移除文字阴影** - 清理Control.Action样式中的文字阴影效果
* **优化直播页面** - 选择按钮颜色统一为主题黄色
* **调整页面布局** - 许可协议页面按钮区域上间距调整为8dp
* **修复文字重叠** - 解决跨类和换源按钮的文字重叠问题
* **提升视觉一致性** - 整体UI视觉一致性和用户体验优化
#### 🔧 技术改进
* **优化内存使用** - 改进内存管理机制
* **提升播放稳定性** - 增强播放器稳定性
* **文件结构重组** - 按版本号重新组织发布文件结构
### v3.0.5 (2025-08-20)
#### 🎨 界面优化
- 优化导航栏历史记录图标,采用 Material Design 3 规范的列表图标
- 改进设置页面的图标显示效果
- 优化用户界面视觉体验
### v3.0.4 (2025-07-30)
#### 🐛 修复
- 修复设置页面源管理模块中切换视频源时的随机闪退问题
- 增强VodConfig.setHome()方法的空指针异常处理
@@ -219,6 +252,28 @@ GET http://127.0.0.1:9978/cache?do=del&key=xxx
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 创建 Pull Request
### ⚖️ 许可协议
XMBOX软件许可协议:
- 以下是对[GPL-3.0](LICENSE.md)开源协议的补充,如有冲突,以以下协议为准。
- 词语约定: 本协议中的“本软件”指“XMBOX软件”,“用户”指签署本协议的使用者,“版权数据”指包括但不限于视频、图像、音频、名字等在内的他人拥有所属版权的数据。
1. 本软件仅为技术性多媒体播放器外壳(“空壳播放器”),核心功能限于基础媒体文件解析与播放。
2. 本软件自身不包含、不预装、不内置、不集成、不主动推荐、不直接或间接提供任何音视频、直播、图文等媒体资源内容。软件播放的任何资源均非由本软件或其开发者提供。
3. 用户通过本软件播放的任何内容均完全来源于用户自行配置、输入、添加、获取或选择的第三方来源(如网络地址、本地文件、用户安装的插件/扩展/配置源等)。本软件仅作为访问用户自行指定内容的技术工具。
4. 本软件无法控制、筛选、审查或保证用户访问的任何第三方内容的合法性、版权状态、准确性、安全性或适宜性。用户对其播放的内容负全部责任。
5. 关于用户责任与风险承担:
* 用户必须确保其通过本软件配置、访问或播放的所有内容均已获相关权利人合法授权,或属于法律允许的自由使用范畴。
* 用户理解并同意,使用本软件访问第三方资源可能涉及侵犯版权、传播非法信息、隐私泄露、网络安全等风险。因用户使用本软件访问、播放或传播内容产生的一切法律责任、纠纷、损失及后果(包括法律诉讼、行政处罚、民事赔偿等),均由用户自行承担,与本软件及其开发者无涉。
* 开发者不认可、不支持任何利用本软件规避技术保护措施(如DRM)的行为,此类行为导致的侵权责任由用户全权承担。
6. 用户承诺并保证不利用本软件从事任何侵犯他人知识产权或其他合法权益的活动,或进行任何违反法律法规的行为。严禁使用本软件播放、传播盗版、色情、暴力、赌博、诈骗、危害国家安全、危害社会稳定等非法或侵权内容。
7. 在任何情况下,本软件开发者均不就因用户使用或无法使用本软件、用户配置或访问的第三方资源、用户违反本协议或法律法规的行为导致的任何直接、间接、偶然、特殊、惩罚性或结果性损害(包括利润损失、数据丢失、业务中断、声誉损害等)承担任何责任(无论基于合同、侵权、严格责任或其他法律理论)。
8. 本软件运行可能依赖第三方库、服务或技术。开发者不对这些第三方组件的可用性、准确性、功能或合法性负责。
9. 用户理解并同意,使用本软件(包括下载、安装、运行)存在固有技术风险(如软件缺陷、兼容性问题、系统不稳定等),用户应自行承担此风险。
10. 本软件仅用于对技术可行性的探索及研究,不接受任何商业(包括但不限于广告等)合作及捐赠。
11. 本软件内使用的部分包括但不限于字体、图片等资源来源于互联网。如果出现侵权可联系开发者移除。
12. 使用本软件的过程中可能会产生版权数据。对于这些版权数据,本软件不拥有它们的所有权。为了避免侵权,用户务必在 24 小时内 清除使用本项目的过程中所产生的版权数据。
13. 本协议受中华人民共和国法律管辖并据其解释。若用户所在地法律强制规定特定责任条款,应以当地法律要求为准,但其他条款仍保持有效。任何由本协议或使用本软件引起的争议,应首先通过友好协商解决。
14. 若你使用了本软件,即代表你接受本协议。
## ⚖️ 免责声明
1. **学习用途**: 本项目仅供学习和技术交流使用,不得用于商业用途
@@ -249,4 +304,4 @@ GET http://127.0.0.1:9978/cache?do=del&key=xxx
Made with ❤️ by XMBOX Team
</div>
</div>
+62
View File
@@ -0,0 +1,62 @@
# XMBOX Release Files
## 📁 文件结构
```
apk/release/
├── mobile.json # 最新版本信息 (手机版)
├── leanback.json # 最新版本信息 (TV版)
├── v3.0.7/ # v3.0.7版本文件
│ ├── mobile.json # v3.0.7版本信息
│ ├── leanback.json # v3.0.7版本信息
│ ├── mobile-arm64_v8a.apk
│ ├── mobile-armeabi_v7a.apk
│ ├── leanback-arm64_v8a.apk
│ └── leanback-armeabi_v7a.apk
└── v3.0.8/ # v3.0.8版本文件
├── mobile.json # v3.0.8版本信息
├── leanback.json # v3.0.8版本信息
├── mobile-arm64_v8a-v3.0.8.apk
├── mobile-armeabi_v7a-v3.0.8.apk
├── leanback-arm64_v8a-v3.0.8.apk
└── leanback-armeabi_v7a-v3.0.8.apk
```
## 📱 版本说明
### v3.0.8 (最新版本)
- **发布时间**: 2025-10-14
- **版本代码**: 308
- **主要更新**: UI交互体验全面优化
### v3.0.7
- **发布时间**: 2025-09-26
- **版本代码**: 307
- **主要更新**: 全面优化稳定性和用户体验
## 🔗 下载链接
### 最新版本 (v3.0.8)
- **手机版 ARM64**: [mobile-arm64_v8a-v3.0.8.apk](v3.0.8/mobile-arm64_v8a-v3.0.8.apk)
- **手机版 ARMv7**: [mobile-armeabi_v7a-v3.0.8.apk](v3.0.8/mobile-armeabi_v7a-v3.0.8.apk)
- **TV版 ARM64**: [leanback-arm64_v8a-v3.0.8.apk](v3.0.8/leanback-arm64_v8a-v3.0.8.apk)
- **TV版 ARMv7**: [leanback-armeabi_v7a-v3.0.8.apk](v3.0.8/leanback-armeabi_v7a-v3.0.8.apk)
### 历史版本
- **v3.0.7**: [查看v3.0.7版本文件](v3.0.7/)
## 📋 版本信息
每个版本目录都包含对应的JSON配置文件,包含:
- `name`: 版本号
- `desc`: 版本描述和更新内容
- `code`: 版本代码
- `downloads`: 下载链接映射 (仅根目录文件)
## 🔐 签名信息
所有APK文件均使用多重签名保护:
- ✅ v1 (JAR签名) - 最佳兼容性
- ✅ v2 (APK签名方案v2) - 全文件签名
- ✅ v3 (APK签名方案v3) - 支持密钥轮换
- ✅ v4 (APK签名方案v4) - 增量签名
+9
View File
@@ -0,0 +1,9 @@
{
"name": "3.0.8",
"desc": "XMBOX TV版 v3.0.8 (Android TV/机顶盒专用)\n\n✨ UI优化:\n• 修复按钮点击效果过于明显的问题\n• 统一使用自定义背景替代系统selectableItemBackgroundBorderless\n• 移除Control.Action样式中的文字阴影效果\n• 优化直播页面选择按钮颜色为主题黄色\n• 调整许可协议页面按钮区域上间距为8dp\n• 修复跨类和换源按钮的文字重叠问题\n• 提升整体UI视觉一致性和用户体验\n\n🔧 改进优化:\n• 优化大屏界面体验\n• 提升播放稳定性\n\n📺 专为电视优化:遥控器导航 | 10-foot UI | ARM64/ARMv7",
"code": 308,
"downloads": {
"arm64_v8a": "v3.0.8/leanback-arm64_v8a-v3.0.8.apk",
"armeabi_v7a": "v3.0.8/leanback-armeabi_v7a-v3.0.8.apk"
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"name": "3.0.8",
"desc": "XMBOX 手机版 v3.0.8\n\n✨ UI优化:\n• 修复按钮点击效果过于明显的问题\n• 统一使用自定义背景替代系统selectableItemBackgroundBorderless\n• 移除Control.Action样式中的文字阴影效果\n• 优化直播页面选择按钮颜色为主题黄色\n• 调整许可协议页面按钮区域上间距为8dp\n• 修复跨类和换源按钮的文字重叠问题\n• 提升整体UI视觉一致性和用户体验\n\n🔧 改进优化:\n• 优化内存使用\n• 提升播放稳定性\n\n📱 支持架构:ARM64-v8a | ARMv7a",
"code": 308,
"downloads": {
"arm64_v8a": "v3.0.8/mobile-arm64_v8a-v3.0.8.apk",
"armeabi_v7a": "v3.0.8/mobile-armeabi_v7a-v3.0.8.apk"
}
}
@@ -0,0 +1,5 @@
{
"name": "3.0.7",
"desc": "XMBOX TV版 v3.0.7 (Android TV/机顶盒专用)\n\n✨ UI优化:\n• 全新自定义开关按钮(黄色/黑色Material Design风格)\n• 优化电量百分比显示(16sp字号,2dp间距)\n• 精简设置页面,隐藏壁纸功能\n\n🔒 安全增强:\n• 启用v1/v2/v3/v4多重签名保护\n• 提升应用安全性和兼容性\n\n🔧 改进优化:\n• 修复设置页面崩溃问题\n• 优化大屏界面体验\n• 提升播放稳定性\n\n📺 专为电视优化:遥控器导航 | 10-foot UI | ARM64/ARMv7",
"code": 307
}
@@ -0,0 +1,5 @@
{
"name": "3.0.7",
"desc": "XMBOX 手机版 v3.0.7\n\n✨ UI优化:\n• 全新自定义开关按钮(黄色/黑色Material Design风格)\n• 优化电量百分比显示(16sp字号,2dp间距)\n• 精简设置页面,隐藏壁纸功能\n\n🔒 安全增强:\n• 启用v1/v2/v3/v4多重签名保护\n• 提升应用安全性和兼容性\n\n🔧 改进优化:\n• 修复设置页面崩溃问题\n• 优化内存使用\n• 提升播放稳定性\n\n📱 支持架构:ARM64-v8a | ARMv7a",
"code": 307
}
+62
View File
@@ -0,0 +1,62 @@
# XMBOX Release Files
## 📁 文件结构
```
apk/release/
├── mobile.json # 最新版本信息 (手机版)
├── leanback.json # 最新版本信息 (TV版)
├── v3.0.7/ # v3.0.7版本文件
│ ├── mobile.json # v3.0.7版本信息
│ ├── leanback.json # v3.0.7版本信息
│ ├── mobile-arm64_v8a.apk
│ ├── mobile-armeabi_v7a.apk
│ ├── leanback-arm64_v8a.apk
│ └── leanback-armeabi_v7a.apk
└── v3.0.8/ # v3.0.8版本文件
├── mobile.json # v3.0.8版本信息
├── leanback.json # v3.0.8版本信息
├── mobile-arm64_v8a-v3.0.8.apk
├── mobile-armeabi_v7a-v3.0.8.apk
├── leanback-arm64_v8a-v3.0.8.apk
└── leanback-armeabi_v7a-v3.0.8.apk
```
## 📱 版本说明
### v3.0.8 (最新版本)
- **发布时间**: 2025-10-14
- **版本代码**: 308
- **主要更新**: UI交互体验全面优化
### v3.0.7
- **发布时间**: 2025-09-26
- **版本代码**: 307
- **主要更新**: 全面优化稳定性和用户体验
## 🔗 下载链接
### 最新版本 (v3.0.8)
- **手机版 ARM64**: [mobile-arm64_v8a-v3.0.8.apk](v3.0.8/mobile-arm64_v8a-v3.0.8.apk)
- **手机版 ARMv7**: [mobile-armeabi_v7a-v3.0.8.apk](v3.0.8/mobile-armeabi_v7a-v3.0.8.apk)
- **TV版 ARM64**: [leanback-arm64_v8a-v3.0.8.apk](v3.0.8/leanback-arm64_v8a-v3.0.8.apk)
- **TV版 ARMv7**: [leanback-armeabi_v7a-v3.0.8.apk](v3.0.8/leanback-armeabi_v7a-v3.0.8.apk)
### 历史版本
- **v3.0.7**: [查看v3.0.7版本文件](v3.0.7/)
## 📋 版本信息
每个版本目录都包含对应的JSON配置文件,包含:
- `name`: 版本号
- `desc`: 版本描述和更新内容
- `code`: 版本代码
- `downloads`: 下载链接映射 (仅根目录文件)
## 🔐 签名信息
所有APK文件均使用多重签名保护:
- ✅ v1 (JAR签名) - 最佳兼容性
- ✅ v2 (APK签名方案v2) - 全文件签名
- ✅ v3 (APK签名方案v3) - 支持密钥轮换
- ✅ v4 (APK签名方案v4) - 增量签名
+9
View File
@@ -0,0 +1,9 @@
{
"name": "3.0.9",
"desc": "XMBOX TV版 v3.0.9 (Android TV/机顶盒专用)\n\n✨ 新功能:\n• 新增直播开关控制功能,可隐藏/显示直播tab\n• 新增实时倍速显示功能,播放控制对话框显示当前倍速\n• 优化源管理模块间距动态调整\n\n🎨 UI优化:\n• 滑杆圆球大小优化至20dp直径,提升操作体验\n• 改进滑杆刻度显示,非激活轨道显示刻度\n• 增强播放进度条动态大小调整功能\n• 修复播放进度条圆球跳回问题\n• 完善直播开关逻辑和UI交互\n\n🔧 改进优化:\n• 优化大屏界面体验\n• 提升播放稳定性\n• 增强UI交互体验\n\n📺 专为电视优化:遥控器导航 | 10-foot UI | ARM64/ARMv7",
"code": 309,
"downloads": {
"arm64_v8a": "v3.0.9/leanback-arm64_v8a-v3.0.9.apk",
"armeabi_v7a": "v3.0.9/leanback-armeabi_v7a-v3.0.9.apk"
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"name": "3.0.9",
"desc": "XMBOX 手机版 v3.0.9\n\n✨ 新功能:\n• 新增直播开关控制功能,可隐藏/显示直播tab\n• 新增实时倍速显示功能,播放控制对话框显示当前倍速\n• 优化源管理模块间距动态调整\n\n🎨 UI优化:\n• 滑杆圆球大小优化至20dp直径,提升操作体验\n• 改进滑杆刻度显示,非激活轨道显示刻度\n• 增强播放进度条动态大小调整功能\n• 修复播放进度条圆球跳回问题\n• 完善直播开关逻辑和UI交互\n\n🔧 改进优化:\n• 优化内存使用\n• 提升播放稳定性\n• 增强UI交互体验\n\n📱 支持架构:ARM64-v8a | ARMv7a",
"code": 309,
"downloads": {
"arm64_v8a": "v3.0.9/mobile-arm64_v8a-v3.0.9.apk",
"armeabi_v7a": "v3.0.9/mobile-armeabi_v7a-v3.0.9.apk"
}
}
+5
View File
@@ -0,0 +1,5 @@
{
"name": "3.0.7",
"desc": "XMBOX TV版 v3.0.7 (Android TV/机顶盒专用)\n\n✨ UI优化:\n• 全新自定义开关按钮(黄色/黑色Material Design风格)\n• 优化电量百分比显示(16sp字号,2dp间距)\n• 精简设置页面,隐藏壁纸功能\n\n🔒 安全增强:\n• 启用v1/v2/v3/v4多重签名保护\n• 提升应用安全性和兼容性\n\n🔧 改进优化:\n• 修复设置页面崩溃问题\n• 优化大屏界面体验\n• 提升播放稳定性\n\n📺 专为电视优化:遥控器导航 | 10-foot UI | ARM64/ARMv7",
"code": 307
}
+5
View File
@@ -0,0 +1,5 @@
{
"name": "3.0.7",
"desc": "XMBOX 手机版 v3.0.7\n\n✨ UI优化:\n• 全新自定义开关按钮(黄色/黑色Material Design风格)\n• 优化电量百分比显示(16sp字号,2dp间距)\n• 精简设置页面,隐藏壁纸功能\n\n🔒 安全增强:\n• 启用v1/v2/v3/v4多重签名保护\n• 提升应用安全性和兼容性\n\n🔧 改进优化:\n• 修复设置页面崩溃问题\n• 优化内存使用\n• 提升播放稳定性\n\n📱 支持架构:ARM64-v8a | ARMv7a",
"code": 307
}
Binary file not shown.
Binary file not shown.
-6466
View File
@@ -1,6466 +0,0 @@
Manifest-Version: 1.0
Created-By: 21.0.5 (Eclipse Adoptium)
Name: res/Wr.xml
SHA-384-Digest: FeAkoiaPoF5YvAo8aUjaAXtB1MVdnVtBQraON8VOaekL5JNzvnQCXj9p
bDx6K0yo
Name: res/Hd.xml
SHA-384-Digest: AHWZWIqNT/CxfnhY61oLJvRYY3a4U+e3PFZGTBzFYL6LS/sXpakRifuD
otX8UG5y
Name: res/9V.xml
SHA-384-Digest: wm9MBE4JMYxF5HdcHFD39/KKOsrRg5fTaL9snzci7kHisXvkqgZMaXiK
FIkYXMUN
Name: res/color/mtrl_navigation_bar_colored_item_tint.xml
SHA-384-Digest: KMw2PzElS+30umtOmqFkVq5ny/MJWk+60n3Q781K312XfV35a1gSheOr
q2l5saWn
Name: res/uT.xml
SHA-384-Digest: fNTm98/bW7GXlde1vfsjR3frZ424pxGSLwP+M7qc549yTJE9lx1DMFvO
34KeCEWn
Name: META-INF/versions/21/OSGI-INF/MANIFEST.MF
SHA-384-Digest: TbyJ6qCRxCt/AybFjT/s7Kmwy4DxLE9BLAftCH11F6CbFHOduIhi1E8L
feqYEqHJ
Name: res/color/material_on_primary_disabled.xml
SHA-384-Digest: YesuHUuFqEjUqsq4V677Oj+vNWlWEy69qQIigKho3+TuNFRjFzhRcKLm
gqOAKU74
Name: res/bN.xml
SHA-384-Digest: Ep7zVkOgJ/JZ6ODeFxFLTlpMAGt27J+E/LHm0QCgyAKHSffAtiisT0vN
GenoHYQb
Name: res/Jd.png
SHA-384-Digest: Oqb0UknipYMIpk1ZU0j0Q1H0pd3jUfX4yU8dTgT9IsoLGLog+ATptxCY
eAhTFGuL
Name: res/th.png
SHA-384-Digest: KLRp/Q5xLQfrH8V0nCHSFJ4ikFpB7A1b6YWTEBqa79ZUrTu44LWe4zh2
VOoAyQSA
Name: res/wP.xml
SHA-384-Digest: CFuZ1t/AepikV2wHgjObm8Kr3FPfDAtUqldxDQ/F7wshB3g0KOA1H9Wj
XP5dn9XU
Name: res/33.9.png
SHA-384-Digest: IVf1Qf7BIIfnQFstpAKRqkElX2/fI+wVFLypUvOMcYKCz1VkNcQ4DgxH
foNFQ62N
Name: res/7I.9.png
SHA-384-Digest: 9G0UTP23Y6nDUdioQ5UNGJiupUfgQv8ukk963j6JDvdWoiOcrw4ze2UX
5r6KyLAN
Name: res/NA.9.png
SHA-384-Digest: B8KJ11miYm9JCfIC+A936hlIxbYk+hQFpW/R84b1jJAs7ETiu9BsrwxO
kJom3art
Name: res/Q5.xml
SHA-384-Digest: Dl+pzUm6/haDzZ6hBrtAF8VRURax1MVCHcy4Lvp+0u6bSznNKAnnW4gt
yJn2Ke0E
Name: res/QD.xml
SHA-384-Digest: k9Q7nPSdEdHo/jtnXBJjOui1BGFkGOnFeWwzf4tRcuXY69UixciZfjCF
P1yBKVkw
Name: assets/js/lib/http.js
SHA-384-Digest: TP64BIjKKOqmCaCzQ2qx4sPuijAHUZCKbOBMzNfIDmtc8/Duzkfdmjyv
BE7opfYV
Name: META-INF/services/org.xmlpull.v1.XmlPullParserFactory
SHA-384-Digest: oWMKhOVUCmOjRwR5xH7R6FS251zd/F5rRXXlLWopfw+bma/ESQ2Lgg4e
FY7cbhI8
Name: res/OH.xml
SHA-384-Digest: 6PLWkXdcE+5OdB1cGWjQ9UBOtBlpxkhTjdA9x+vZn+wm30tzqhaABINV
6xDIeip0
Name: res/color/m3_bottom_sheet_drag_handle_color.xml
SHA-384-Digest: UOvLdh8LVd0Oewu21tYILT5eFSX2R2XYTSgUyEquixG43H8cjWg7hkNn
1hzXjXZu
Name: res/Da.png
SHA-384-Digest: wzFng1EDL7kjdg17qp2oyinT2LjNz0IRhzv5pxk00AtLh3G7Z1P7+rUK
LsB/tz/X
Name: res/5O.xml
SHA-384-Digest: eVra7HdB8a34FKh93BGI7RkNBquDhNwMRTRzdOIYSrETaKp9W7fu3B/X
tQzJY6Gy
Name: META-INF/androidx.customview_customview.version
SHA-384-Digest: w9IE1UH/gUEbdNJkdvd4BXL4yAaceGr8xqlagTmnOQfkG69IuErYq8ZN
m27DHrb4
Name: res/tw.png
SHA-384-Digest: NO87qio2f2gAD8Uf1LJIzLyrnKRqRaB/xqdZK2ccsQodEfPVG5taf6Vu
o9o5W2Nf
Name: res/uX.png
SHA-384-Digest: Kdx6cWrpF713zuAqoIjDhCHAs+A9ATE2nNrlSYDY5c6A3dvgV4STlVnW
srSq2COy
Name: res/1K1.png
SHA-384-Digest: aoJRQ3O4Bi3sqiG0FPmTqRW0x1K63uS6fGDbr/kDE3ScHJAwwjLV/NCC
l4/cjZz4
Name: META-INF/androidx.room_room-runtime.version
SHA-384-Digest: UV0/8VeF1BuHFKPPnZIqWGT2E7jYc/X6I1fP+H83pY8Me+l+DQRK0YpH
I0kTqXfT
Name: res/TL.xml
SHA-384-Digest: cWL+WiEGL/JWjqoDcyDZjKUPcitN6SBg99/NrTISSmVt3On2mYhvm/Vs
QyQcGzSY
Name: res/0K.xml
SHA-384-Digest: J7go12UHfiaPOl2H2TjZjRCcvSK7BmBHGwM/rw+L7yd98hDPLyQpCCZJ
Wi4iZ1xo
Name: res/color/abc_primary_text_material_light.xml
SHA-384-Digest: +KA798NtG+9aolNa9CrCeiiZe/lee4rQI5TTgAXTLai4yDT1cnWzqOFd
Jlkpm0Xf
Name: res/hm.xml
SHA-384-Digest: ZAp+uPvMfr5YYgaQQD96XsRWOkUi7pEcO+3LJh2uqCAybj4oj3HgYqt2
EAXmz3FC
Name: res/et.xml
SHA-384-Digest: kBYNwIPJ3YvdFjWNWaWn2zrD+aKWv3IKTZ567YEHh/hjUnj24SyhXd3h
qnKD1AKs
Name: res/cZ.xml
SHA-384-Digest: +Ev0didhwzfMXeOgl8ZM2XFZyaBQvvElzD3bYyENofjfHagBfqA/zCvA
j7J4g3oo
Name: res/B6.xml
SHA-384-Digest: aXOzJMkWx7O+xgplQezZTIjnzCq8peJFz0Y2eESzP8hUn8ObWC8OlRCF
YCAumDFh
Name: res/color/abc_primary_text_disable_only_material_light.xml
SHA-384-Digest: F2OQR9AOmaBufltABYRUjljPN58yi9Bpyg86Pi3RC4d8Niy5nzux5CM1
FLtaC/CH
Name: assets/test_base_module1.mjs
SHA-384-Digest: 2KaxZADKC51gWa714TbU38Vt7i5vfV0wUXFhChg4O4sC3obCOMpD8YaL
51biqOg+
Name: res/_7.xml
SHA-384-Digest: LcFsY3sWrskIg/lREszJIFaYDsl8Ui2t7PNp6P58LVLQg6Wn2AgOQi5X
6qbFlNxk
Name: res/color/m3_slider_thumb_color.xml
SHA-384-Digest: 7tbkIz6usR6THg4cM8fYICNQqNZXFHmqZ0gl7S5zuco5P/0lQqP7NUgR
vR7G8f02
Name: res/sX.xml
SHA-384-Digest: zv8rLcj8yhP8n7jpPtbQ1+xuQOiNDGJ7Ni4vulKLGm2YVxYLudY4sOzD
e1Scsk7M
Name: res/color/m3_timepicker_button_text_color.xml
SHA-384-Digest: v+9HkQ3B/5/yFrlFRyIY2s5RT0/WoMkWkP1DXQQ0s8B+QAdIWSv1oVPK
WEo4wgJ0
Name: res/jx.xml
SHA-384-Digest: AzKMuVQKyn8CZr663gvWC3rHUFeVbN/R1DkaP/KZ/dhwsMKiXUA1OFfd
hi40whny
Name: res/color/m3_slider_thumb_color_legacy.xml
SHA-384-Digest: OYF8ianCI1qfFryxqtQVB6g4Bj76e3vA51TGHUnqRSWMlj1LdWpjX0FR
2uncfnbM
Name: res/UX.xml
SHA-384-Digest: OYOKppsyj7G2Vtjfnw+7/UxWYNGvzvcs+ILm9DbLnkXIN2z05/6ZN2IQ
bxbcTzE2
Name: res/df.xml
SHA-384-Digest: 6+bRiFf3ZlwdQrq5CH9Ce+ZDfNJKQ38vAhBkuqIChUmi+mw7O4qlFKFc
r568pbNL
Name: res/5z.xml
SHA-384-Digest: jWlO5VVu7nJ0jjpbnhXMreHbw/CRfZYMrtgHpjkK3R2BJXTRA7SK/PXL
agnizA6q
Name: res/bj.xml
SHA-384-Digest: 9Ntk83v3uZIfZdnX2wKLpu2icOwNXX/Q8duriJH/Uy1sQtSLthAGB/DX
yw80MyK1
Name: res/color/text.xml
SHA-384-Digest: Xwrwje5d+CAbRivca2/PWjp4f8WzB03qatA8rCkr5DY6orT3YkiQC6Xl
HeIxR7yP
Name: META-INF/androidx.savedstate_savedstate-ktx.version
SHA-384-Digest: GKqkS0cvyjjgH1wxhzzW5U7S04+7atOY/hnmeP/2ShskJ+QcyWqyhIai
b/q/Jwoe
Name: res/4_.xml
SHA-384-Digest: mQ2QaJRDZWGArOB5VMp4LBNDixpZzjwWWAYUjdSddmtVeiKGNpIYw+k2
PLotOj5j
Name: res/color/material_on_primary_emphasis_medium.xml
SHA-384-Digest: O5cas8KBMg0v+OJHvW7MQPomgu5ejvFuACtz/ea1Bred+ldhNnyYyufU
c9/17sj+
Name: res/hZ.9.png
SHA-384-Digest: nCGpqni5PhvfilXFqTcZFqMHuecWmpOBBxo9qT33++to8FC7lHET8mme
CRhYvSF+
Name: res/nT.xml
SHA-384-Digest: uILCPcedOXKSiiMOTkFCyDrMPUSJQVGH+2Ym1xtDbpK2o4RnEQwMBFI5
aybiWEAo
Name: assets/images/ic_search.svg
SHA-384-Digest: /YqoVkuc+3Up7l65fDsdHmNwrW52N0GMUs19bHnIF/8XhbFA3/Pv47Q2
+xTqScup
Name: res/s3.9.png
SHA-384-Digest: RoYKlQTVPOxcdgOWQ1C83DWuDr3zditDKyI8mpLMTzM/GTqZ3yxegHGF
uA8Zsh9F
Name: res/aF.png
SHA-384-Digest: n9OweBXMmsKvavT81W56dg+DMy62M4pPV1JERYQyIQih7b59/Mi0AgHA
7XF/lpin
Name: res/up.xml
SHA-384-Digest: z9DGAVXviRdft4lf+UCkJ+3fVwCz+tn2Wh7vqyen2IPMDv9fTpGrSiAY
n0nQ4ZxB
Name: res/yn.png
SHA-384-Digest: Bp+ncxW+44yXFegXfxklvpr3EwVodWtZVlYRs2pXzF1anWUPfVVVQ93J
KBJ932bP
Name: assets/css/style.css
SHA-384-Digest: 25SWlfGdpPLqDl5oicXGnamLLQivbL5xLxLSxXc2Bb6oKrfDBoQZ9HKE
ZwHr1ZQY
Name: XPP3_1.1.3.2_VERSION
SHA-384-Digest: OLBgp1GsljhM2TJ+sbHjaiH9txEUvgdDTAzHv2P24donTt6/529l+9Ua
0vFImLlb
Name: res/P8.xml
SHA-384-Digest: KcmcKcHEJW7BYIEf10ceNbDUuT0c6xqAxy3Txrs5lMbeZzzd9AMpADw/
NCjkcRB1
Name: res/color/m3_slider_active_track_color_legacy.xml
SHA-384-Digest: dQ5r949jJvVphOFnkCQr2ZDH4tYwgIl1REMLpru78OOT3vQrgIRoWPJx
miJXNokv
Name: res/gr.png
SHA-384-Digest: j7KzS1tdRqP5iiOnZUdEydx6ER97Rn7+H5ibVq56ixT11oxtRhIQEALd
9MY3U3UD
Name: res/i4.png
SHA-384-Digest: 14Q+WIAO3mPU+og8nQpE38Pvdq5y21Qs3ZUms7DqNaiLzl2+6F9HWtXb
IxoOqCaP
Name: res/oF.png
SHA-384-Digest: LImcqq2kod5mC6MfrhbmYyk94R0cRDJ4ELIZxfzpc+SsqseQKHylCcgn
l6Tw95EC
Name: res/gR.xml
SHA-384-Digest: 1yqpH/6IxymCJRKLiDj+WjpVjXLL8eAHBnnDUwWyHiSCP4RhUHxjZGXb
DnGGZuBW
Name: res/UO.png
SHA-384-Digest: uZCUKm10coNOiaAS3vVWsQlXO3BQDzNVlKPfGdRPFn86N5IRhM2qEnaj
gOKLWiyz
Name: res/color-v31/m3_ref_palette_dynamic_neutral96.xml
SHA-384-Digest: 1v9oEBEaT2F/B4S706RiRXc51Q+a66wkpzKOaOUWItNRgZFlAeSO2/pc
MibJzemw
Name: res/L1.xml
SHA-384-Digest: aiUV66RF+3I2z8lySBPW4ZW+1+dbF64gvn0PtC7u2ffoqxetsYwx+XXW
HLMd+8gw
Name: res/color/abc_tint_switch_track.xml
SHA-384-Digest: fR6CskVfknr/NLBqConi+kxVEUaQ8RE8x7WbA4uNIhZWbI6HCmW+I6Hh
nSFIEA2J
Name: res/op.9.png
SHA-384-Digest: 2mHHlTQgZ9qd97/zL8SY+wYgJYRXd0Ca72Igc4iOMUXkdkQm8O1XUN3b
DLfFumKK
Name: res/kh.xml
SHA-384-Digest: 8fP0GswmPAUOpSmZ4pbEq5q/p6mWFGOwy3LiUoU44bsQKDg+NeJCQCCv
Z6PLzvFu
Name: res/M2.png
SHA-384-Digest: MGbEeg3Tu6gA6C79pNs6OgzvqVaeXrXkHNipcBQ/wHK0Vfvzyh3AptVQ
+Fj3hY/W
Name: res/gn.xml
SHA-384-Digest: AJbY63dxr6yjSHZhLlOGJ00CiCbcSv178pMoANeW17ZpWksVZUBIMibm
6a0OsCQB
Name: res/5D.png
SHA-384-Digest: DF1wS5SuWtTn8q3UTfNhvBvi89B1qdfU7Qu/UtswZPjwgVOGvQOQsAe7
fTbrEfCw
Name: res/qz.xml
SHA-384-Digest: 7iC/kauCAZRBGzdo0GYLenSkn01v552Hbl3y2l6/+m3ySIWKRfwN7yYw
N5xc4raV
Name: res/Mh.xml
SHA-384-Digest: RrrWIvXaJvCxyegmSNubE66BcOCY0iK0lWK3+pk7qd7EbOTHas9AzsXy
4S5rNSQ1
Name: res/color/m3_textfield_filled_background_color.xml
SHA-384-Digest: I5tjWF3tU6iYm3NzT3RI6qZ2sM9uC9i/2N3OAj9/ICY7/OVKWbDALsPI
H4p9xr07
Name: res/color-v31/m3_dynamic_dark_default_color_secondary_text.xml
SHA-384-Digest: /lty1GRN1Yo70zrjcI6F6jAB8eJqha1iUzSKRKWQus1xbcQzcHZTKH4c
HMXiZcFT
Name: res/oB.xml
SHA-384-Digest: 5d8Qo9B57aYwqBd+2gYdHBYVwoq+g1x0m/1ZLZTsUJ07n2JK2MMvi4Vr
vCavlHZn
Name: res/GM.png
SHA-384-Digest: yxAVrJXab24sZzkD/NnFm3h1YjjvERO/j00PtsZ1Uskx1qA2zpEuXXnf
F+DrP4iK
Name: res/fd.xml
SHA-384-Digest: fikEx1M9FJ+DapXNbaV+okkupGMAMssIFp4zX92bWPTY3bPd7qkS95qm
EWNs2Cd4
Name: res/2T.xml
SHA-384-Digest: RZnX85Me8QAezbSECuX0LHh5qsxyCn9wl3OIFXqorcZSmTk20yTsV2Jz
ikD8GeQr
Name: res/color/m3_popupmenu_overlay_color.xml
SHA-384-Digest: i0wGxbpQnziUY52oGnfJq5ruD+yjjwiYZk2UQ7CQR6Qyky0+bE5nKlbp
I8hsvfKM
Name: res/YV.png
SHA-384-Digest: rMiiTC7VuprDcGQPduQFLXQnskUlMrZmlcS2awkDI2QRY/Ps7+S+zhi3
SnnAaK/5
Name: res/Z7.png
SHA-384-Digest: u245Lf57NuB2CcWL/a0Fdw/MEm9nsE6fcgHbt48YHp4Oe2DSU63nt68i
EOu4k6hT
Name: assets/dexopt/baseline.prof
SHA-384-Digest: WN5SfC5zU5Tbkb7NNJzd6Jqywip+h3qEra3zaFRAl8jMdJpDPddGCpIa
UPJhAIC1
Name: META-INF/androidx.exifinterface_exifinterface.version
SHA-384-Digest: JSbQbclh2jKclz7IkGQq8Am5k+8z/fT/NGDXNjG76E/9UXFMKo1B0JfE
J09pvEqz
Name: res/E5.png
SHA-384-Digest: roUVOU3lWjYIu0ufxMqCdQAhG6Vj+JbxSudwLlL1o4YXzOVihxS0w3A7
0JuT0Zah
Name: res/Fu.xml
SHA-384-Digest: a2JRJaznkW9zbTYWaJ2WgnY5pJrskfawQiOQZzz3aKsUU4p1nxkJSL+j
Lf/BNX6h
Name: res/QZ1.xml
SHA-384-Digest: Svjexdh2oPS5KrAk+x6/phnAhpVklCWm5t+82ihPVPSkFzYt+LT2jeyD
hkV0li5Q
Name: res/tj.png
SHA-384-Digest: 8Z2ILIeh/ef4SRx/+mG6egFCU93eDapgDOIfxYyh+PlagyuaUPqv9bL/
ss7lfrIf
Name: res/Gt.9.png
SHA-384-Digest: Rx6cEGyWnpiDMzb2l9CyUM2PXOvElEvmNcOmbvR1ka1rR9Te8oLymht2
UL9RaV+J
Name: res/Yp.png
SHA-384-Digest: 4Fn4D83eQlZ+bREJCW4+AsnWfA6jtVn95pi6Q+sAWDYGuLU93Bc2Hs1z
bFdHykHT
Name: res/lv.xml
SHA-384-Digest: fRlgJAhCENJPc6m1ZfeF1BIcwQzKB4yxOV5xqr75MaotGBjUriC5dv6l
zGJmKxRm
Name: res/_o.xml
SHA-384-Digest: HuWBFlf876klFny//Rgc7EfL331YgPBbLivfTPnqDyLgbfZM3X/1P+WG
/IEVoFSU
Name: res/a1.xml
SHA-384-Digest: UYlNBlEHUQ/iCU35pmss0i0lqUbWakuj6t+62J1GKaHDgjmUKSuXa8u6
GPZQAhM/
Name: res/jz.xml
SHA-384-Digest: kFSL3btGDtxiozxA5yyd7Y8SormB/YQqvDXU4tLpZY+X9vhEGT83rbjU
H18znDTh
Name: res/PV.xml
SHA-384-Digest: Wdim9MiZ8C8WgzvQu8RDttuxwZn36cPKztaXvtbzUtyIsAxr+qN1odnn
m1sid9/r
Name: res/Q7.xml
SHA-384-Digest: 7KOyrg/v2gKgmTH3fgs9+eqEqXw9g2S3wUIUNmKR6V3J4+SbuYPI0gVZ
rpQVd/NK
Name: org/fourthline/cling/support/contentdirectory/descriptor/didl-lite
-1.0.xsd
SHA-384-Digest: 0WBLD7oI+t42TzR1++lY32QUFmLeDSoQoCveG1+gUubvsUX/s7+6gEU5
1cSeQiem
Name: res/3U.xml
SHA-384-Digest: g5nnTaKRQlcAjOLEn0aBbGMLIcj+QqEANG+A2cnJ9NAC2PXmQSXlvKX/
X3Hx3xoZ
Name: res/46.xml
SHA-384-Digest: TxCetxaAWg63BiErctiZGpUxfJ3DG4/wu4bnKFrdtKKV+sGqEi80kRGU
dh66/GON
Name: res/color/mtrl_tabs_ripple_color.xml
SHA-384-Digest: 56r7LtTtHv5UbmtHSyTvLdw/7Lk6A8gp45sW1o1A7pprM5InyXMZ3miR
osclmmhV
Name: res/My.png
SHA-384-Digest: Y5WU1ffZ7NEOS2MsJG1TXc9RUe4iNlwvf0jOieiqmElAwdrvS4TdiA8p
5FmaxRJb
Name: res/uR.xml
SHA-384-Digest: xn0hHZptLlC3Md2l8AN5P8WIeBnPjlo7ikVjWYEJjP9FvsTJPP+UtSHt
8vfDokCA
Name: res/ec.xml
SHA-384-Digest: OjYxlix2hptDp+uKTl5ffvjEYFq4YExBG2Jfk9Xf1i8vm8xrMHDCMQl9
VttbnWtB
Name: res/pn.xml
SHA-384-Digest: pX4NdvOwcig10llXsx3bpu9MuuACaHdsQlqajDTjl8YkNzJvLLFkCLpj
d18lSkt4
Name: lib/arm64-v8a/libjpa.so
SHA-384-Digest: xt5vpJuLid1NjkUDpoYj5Bqig+hoptx/k+il+CdPlCeEiMXxZO81Tzvl
E0hGK6DY
Name: res/5U.png
SHA-384-Digest: LDpNnOBGQEQ7LArP33nwEVsY4PIKCvWc6VacJ9Wn6vqXKxZul9fY85Qx
ekFnoEOv
Name: res/YW1.xml
SHA-384-Digest: kuqc3W+bteryOxjPXQuLlxOA0HCywrLJCnaV5IbXzLLc0xHARDFQrR3H
g9UAfMaD
Name: res/GK.xml
SHA-384-Digest: wN25YKIx3RuMvZ1SI/98UYNqLn1EcOZDZcWnUINe8wypd6pJj0ma9iwP
e1jesWFf
Name: res/ZM.xml
SHA-384-Digest: jJBBaY9/Vsb60zxv/1KweGi1Vo9MLDN01zH1GqQBLwDncLZyoeOoCNGK
0hvGTkvp
Name: res/Ui.xml
SHA-384-Digest: bXYSx5E2G6GP/t9R4xumxUNTJYLPmvXLfzq4mZsdhHWZko+K+E6aOsMJ
MGT7a5C0
Name: res/8s.xml
SHA-384-Digest: vwPOyn9EKUjvLLqfSgIl1LvOOpgwYBB7vnY9F7id6FGVkS7iqecKVmuq
PppMNGmV
Name: res/9T.xml
SHA-384-Digest: FYmHbSuXyGKX/nwewD/dokhrBRkG2stWV1vTgRM9LQnvVUuxZ/fzrTlq
iHSIWFDM
Name: res/color/control.xml
SHA-384-Digest: OFg809tgpX70ka6nLYGrXCYdXCZjsiN0XgBJwXflSOPVP5KiS94zVvco
0IRFIUZj
Name: res/n4.xml
SHA-384-Digest: MxNb5UJZ1jWck8uhwREmAx/CR7KikqDp7xCP8GcQmYfbmVkUWYLr7r2N
07m5ImAf
Name: res/color-v31/m3_dynamic_dark_primary_text_disable_only.xml
SHA-384-Digest: qR6pgd6+pLD2ulXMzQ8ReuXGP+oxhJwP9hv6NHDu6aAC8/ZqI7VsOkgk
dZKCs3Qj
Name: res/42.9.png
SHA-384-Digest: mPSo5bc65hWHDMNm404QqLkiTzN7o91H6pvf/wWJI+r5s/KgbBIM10os
K29UkTHN
Name: res/rJ.xml
SHA-384-Digest: zlMa0A/AL/qNnzwF2kZC+/fyQJVMS5dDaGwujDBrYjLpVir+qHSy8zIY
ZXaHzYgL
Name: res/EZ.xml
SHA-384-Digest: XLp9dqT9dsqcWQO81eTeReawmfs28CMLmed+f7Dm1ZBn5f9AUN6eF6KF
4kxCod56
Name: META-INF/native-image/okhttp/okhttp/native-image.properties
SHA-384-Digest: zoA9KmEQ27nYb73akBKARExO8NXH/TambAFsa4m/FTv7keWTOeP3IP4O
TPWGMve8
Name: res/mf.xml
SHA-384-Digest: Abe/380hXlxRFuCMI1hdhNrdj8RsLSNw5pUsZmptTYlDZQjXe9nLdlYK
M8Fnx9cO
Name: res/JS.xml
SHA-384-Digest: cyGojguDoy2TZDXoBpdfSDP6cu6yM8ip+N8wJlvU22Esb3qEg+hsZy8n
Layj68Zk
Name: res/color/material_on_background_disabled.xml
SHA-384-Digest: k4jU/7IJi24ZHkfD3zEGtOLX3mspQlfhyXsCC/3g3s/p7l4AIB8CbItC
PNCm82LN
Name: res/-6.xml
SHA-384-Digest: 95OQ1AeTyf3TqdZ7PbIISt1BaaodRiYAT1vgcWZzASGr2+aO7z2Zkdq4
49An+f0u
Name: res/9T1.xml
SHA-384-Digest: 9zBKtI3bYheXQsE8zWwwMnhhz56eEMOy6dQ+IXciP7g71ZDUP7nx19yk
PV1qASYP
Name: res/color/channel.xml
SHA-384-Digest: OjiL0+LkUy+96LJhhzb3WK5lp7FnqCmWYFQl7JBjfsl4v4XfolDObF1H
Lh77ATYK
Name: res/ue.xml
SHA-384-Digest: 84xKNIV8UeBUQ2Y/Nr4WWVuLjFF+ncAMBcq3bzF8sHU6Q7ZoW6L73euB
fFpMG0Qa
Name: res/vF.xml
SHA-384-Digest: ROaU9LjrLYWPQvTsB7RkCQ3L/xjPU71N35zBknFPVRaU1H6dQPDfe2Al
affI2n0a
Name: res/k0.xml
SHA-384-Digest: 9KtC5L3WqzEOtDU7ctTpV6UTVfnAbQAjXYPB8bBzp02hTMALVQZDEVe+
OworOwtV
Name: res/color-v26/biometric_error_color.xml
SHA-384-Digest: QJWZUZr8qxJDBzbKQRU02yBWVgKPNzt/ssA2UTKVjs64qGeg7zHZzQa+
iwxYY2kq
Name: res/Tl.xml
SHA-384-Digest: VshqJqLJyEYJ2aW1+DeTM02cKzCOED4siTM6iF1fuF6QuZCiD8GGHc3G
TeOHv8Nn
Name: res/color-v31/m3_ref_palette_dynamic_neutral24.xml
SHA-384-Digest: +DUAziz7hhwERxiMV0zPxc5V5Ui7Y+H0sW5m4um0UqXvmTNnVJSRKW+x
Bj22UCLZ
Name: res/fS.xml
SHA-384-Digest: /GIIpYe90jtbk0TAy8w8Gze9oIq6fxoBohc4/gxnD13MuzHbG18q0+R+
+3y/3PfB
Name: res/vq.xml
SHA-384-Digest: nef+/IEF5DYoEQ575wsVqCqEQLURvrGxaaxnnFSfFPNLYxts9RgqrfU/
nBm5QK2X
Name: res/Dn.png
SHA-384-Digest: YzSqbpxgBKCSDW4xgow5bnb+5Gja1FDMhL17/GnTWWVb04aCa46ySiBn
EQox/Qed
Name: res/R2.xml
SHA-384-Digest: MkWWt9ABSbm3lwVxA3Mn+Q2KEpMPMkwo+rTtfJM5HTapEqZlSGadnQsI
/RZdU/Nh
Name: res/bP.xml
SHA-384-Digest: d0vGs4aP2Gmw8z00JY1B5T8JOz87KPAE277WV/XW9/2m4ci2xCryl2ZQ
wnjiIva8
Name: res/A5.xml
SHA-384-Digest: CcL3K3IhPejDL7vlF125QEGIkQMK32QpWslU36sxM+MY05+xNSp1RS7z
scnRJEVG
Name: res/color/m3_filled_icon_button_container_color_selector.xml
SHA-384-Digest: eEaqCehgVA/tYJc9HgiDwjg+UccPlJBWy1Q8bwyiXIzHJpl7EWOmwDE8
Y0FQ80Ir
Name: res/PC.xml
SHA-384-Digest: Kr1ULgonhmGHIXVBdvT8cDe61scWRfn7N5b5qIBmGio6+YJXAYVPoWQQ
2mX/Li2Z
Name: res/q3.xml
SHA-384-Digest: nOyrsDhw5Bc4Fc3/Jc5bmm0Oi/ih6Cq3C4iSQ5YfuMnePMiPEwZcNGlO
xBew8p9y
Name: res/DC.xml
SHA-384-Digest: 17po52XCQq1Rq1mrUJmFnHXAJDM+2uNyueqyGeMpFA8hb8+b90FQCW1U
gi+1JrsH
Name: res/K_.9.png
SHA-384-Digest: eESJ87PAB5imn5TEymPNi4LyMWKZMbqnHg8B6hdx/zBfU5/NV+TcB9mx
jakNa3SV
Name: res/color/m3_radiobutton_ripple_tint.xml
SHA-384-Digest: Y1TOlSl3i/wpkShqGFzlPW0hFc/6wtGQfo82GORYjV1afJv3yMm02m0r
q+FTRExW
Name: res/Pd1.xml
SHA-384-Digest: VjvhwXiXMtxlPTfYH4hKWOMAhD4MLpFjcId99dFMXUb2U8SBMzSrL/pn
999mmEkl
Name: res/Ge.xml
SHA-384-Digest: Eez5R13kFSBv9eUf8OqiITYTzTtyglGXciKCNuf5XjhxILp/tdvfHsZK
lOvYRMfx
Name: res/ue1.xml
SHA-384-Digest: Hx6xFtfcyii3PcntfUZAlltKDKakh5WDilAUjBsYsYbQTcXFVnKf9T4a
qP+rRr7c
Name: res/d5.9.png
SHA-384-Digest: 1pJffwQDbudFW0UT7IW3Mrpy4VWJkYAOWaVYQ76NE2vqjWL1F9BZtBnd
5zzsSr2h
Name: res/color-v31/m3_dynamic_dark_hint_foreground.xml
SHA-384-Digest: hAPyndSThJroXhvhge/Zg3/eqVwwuK2+RaN5pqkcymYdoXIiU1mhcsvY
h+O+82xd
Name: res/J7.xml
SHA-384-Digest: Bw4DTZDYI2WAZBh5mXbUAv1hJRffbHTGYgNPndtLWn9bRo0W+wr3xWEn
81qp3r+D
Name: res/aH.png
SHA-384-Digest: 3fFbapzioLu/jthBJbI4KV+Nb0xEEM+UR5IwRv2DrlPvt6T3GXyDokRN
PZrAK+41
Name: res/ZN.9.png
SHA-384-Digest: yrP9TXwDnxlVlFaEEvBiLDs0fYQtDMFeNMmEOoCjzdxG5q+jqvYDn/8f
WpV7G2ol
Name: res/color/m3_tabs_ripple_color.xml
SHA-384-Digest: in97cW982x4QbaP48PYftYvfJPIzcZtSEhKQ6XQKclD8yowEHr5C2Qwg
h3fqWXDG
Name: res/6P.png
SHA-384-Digest: mrmjw0mjbAxELlnDFOv3s9ZgyCPOrIjFmejcU+xPQKPqQXmDft4eLUXr
bkn7FPub
Name: res/71.png
SHA-384-Digest: XEJB7J/SZcKhwhAdCOZVJ3njoYJPs8yO8Fkn4jM/6gAMmjwJMa4IGobL
EaEzvX/p
Name: res/color-v31/m3_ref_palette_dynamic_neutral94.xml
SHA-384-Digest: PUCn1qXxIc2PGgK8lMWdRkiuX7xwQSHJEMcK+jyVAgsZedoZl73shdVl
J09/UiYO
Name: res/0Z.xml
SHA-384-Digest: kb/0ytJQEf1UBoMoL9/H3RtiroSryOW7rqv/SdwEEdXiDjWHJ1spT2YF
DKqAzkZi
Name: res/iZ2.xml
SHA-384-Digest: 7wCEzRceKWHz3CnKXM6UhfP3tkm5siSBRLZ/VriSrQqq0sD5KZXNvowM
hlCXP3JM
Name: res/ui.png
SHA-384-Digest: QlSK28TFVjCMcwQ2C/XhV3nQDqGuhE6HzHlwpqGutsBMrCKPR+2DmVyd
yzOsIonj
Name: res/BT.xml
SHA-384-Digest: IFDOZ9flIvGTjisQn89cmhSWDxtXY9Z16zTXEgG3y0jo63/SDhKTE8Sw
FpApqGfp
Name: res/C5.xml
SHA-384-Digest: eFXG9PFQusOcIhhj27lN70xscVTy6nAJjCfI6wnzO5Diu3IaiE8WKouO
vPvKulOW
Name: res/m9.xml
SHA-384-Digest: oSLbN8D/cQt7i1iwAYXBBzpWGdGI3z3bNQV22sjY1/RyornOY+Tgfgcl
B3xChOch
Name: res/WV.xml
SHA-384-Digest: fq8xhJnyIpgfZ6PgjdLJBxpKyktIv0rmjlQDB48mAzPh79QdG3tp/D5v
kLZzWuMT
Name: res/je.9.png
SHA-384-Digest: GM6DropB1WPtGKZaNfFGVgWaCZpeeUB/FVYtaRDaT+/kCwdqpYHOw66l
I3z+1LjQ
Name: res/zZ.xml
SHA-384-Digest: DziOQYus0Go+hBX014pq5eUXHNvSHn6arLGt+2SCn/vOR3tggj26LLYG
jcCuQHti
Name: org/eclipse/jetty/http/useragents
SHA-384-Digest: OLBgp1GsljhM2TJ+sbHjaiH9txEUvgdDTAzHv2P24donTt6/529l+9Ua
0vFImLlb
Name: res/color-v31/m3_ref_palette_dynamic_neutral87.xml
SHA-384-Digest: qISo5KNF0qtO7ou/8owkcbHscTSw6zqM7uSLL1I9VCv2ysfIcRn6EDar
F+702Xq2
Name: res/F81.xml
SHA-384-Digest: VtY1IQ3fkY7ApGaadFL2Cc2y1Ah3ytZdf8RhgznvQwO+Zfaw7iJRovDT
swXL5uLw
Name: res/H0.png
SHA-384-Digest: IXo9hdWzW4Gez46KG4pE6RUVNvndxX9EnsjV4k9EPRkohCtdxYtcKYXV
7VWq0l6s
Name: res/gt.9.png
SHA-384-Digest: Aym71FO2CVqw2AZ7Uv9UVclTisH74z5fkTdgSBfn1Tzpl7sp6G8I2rta
xJWuM3Ek
Name: res/i6.9.png
SHA-384-Digest: 5saK/9F86JOU3TF87QIF3GPAcUqcpHSarhssZo7Pxq0sU7rkA0v/uKgG
4V8qv6ij
Name: res/Gk.png
SHA-384-Digest: yltiAYUxIm+8Aa1A0aJ2HMIfWePzx7x9P8xv7B+etjAUTOcOBXg36z7f
A9JfQeh9
Name: res/JQ.xml
SHA-384-Digest: EjyVvgfkkLyIuLucLL6itRzwcEEFmBrxxeJ1HQAbQfJgb09H/gN/OC7g
wGZTIFcZ
Name: res/K2.xml
SHA-384-Digest: Qip9yidSomcdPnhbQQNxCCdLNCmH9H6a3sFruxWuxx0+Mq1CXC0tP4tH
QxjBSrEE
Name: res/LO.png
SHA-384-Digest: VB2bOfx3LZk/iZWlV6iTomOQvnajY6scS8Sh3E+8GDCjoRRnQ5jLptsI
X01k/gJN
Name: res/SV.9.png
SHA-384-Digest: d2WYfSqhipZtFz/10oM9aQ+SrnEdLsoXqdl+acV0KAYDEeTPfyYora31
fJEFQcZM
Name: res/Ei1.png
SHA-384-Digest: IxN6cbnj2iWExNMYr9xtK+Idt+s4Qa2XnfYgwIUyv0AAZqwOphyM3FEn
yggggzCx
Name: res/2R.xml
SHA-384-Digest: VSw2P+6IW43elTUAHvQEUFYWxFdGjVOCuvJdSOQr5pV+XvJbd06Nu02E
JXEiEuQ6
Name: res/color/material_on_background_emphasis_medium.xml
SHA-384-Digest: 6zIgHcajUOFX1vPXhDtbwAKRGcfpHr1TPDdhU2zAc8duVQPbE0vdK61b
A06ZpyrZ
Name: res/color/mtrl_chip_surface_color.xml
SHA-384-Digest: FO7XDf8k2xCEmr4rDdkvfQPlWrSXSnxMR4UeQxyBrzO+yF/24q0cC9vo
YrjGTR2H
Name: res/hQ.png
SHA-384-Digest: oxPEplp0ad+5ArJlMcMtdKtxfX79OqOcCUHuGz8ylZeVJs+8By5/3gut
94hbrPfO
Name: res/zz.png
SHA-384-Digest: NVOpsBUTPuIsAZWR2l+ot4esv0pPIb86Y3AuVluQmdCJYYGLdFCLuDSl
BUMPoqEF
Name: res/gG.xml
SHA-384-Digest: l4JE9QWHG9QLhX/VEUUH0tDl6LYILisVGM2UClhFnLM4L9b2lO4/S/I9
P2ZgAv6v
Name: res/Qd.xml
SHA-384-Digest: Miya4lxGrxH3l+TFD/dUzqLtEluOXIc3iyEU7h502RhWlZAByMt15uct
6JZDTye8
Name: res/color-v31/m3_ref_palette_dynamic_neutral17.xml
SHA-384-Digest: u+415B7NXRUkxSlNWa6CVsLKfoy+9fhUAndnGwZTSzW2iFBJ3weoxJ00
Gkk4hf/7
Name: res/qD.9.png
SHA-384-Digest: r7PMJQkxoif1yuWmFAG3geHHjf/7rZtL22unZ2L8LSgiTInCzEtZW+eo
Nqam95mL
Name: res/dw.xml
SHA-384-Digest: /zAMDAxqV7lRB0YfEbayd1r+zsFYq5C2kAb1Nj0ez1FZD0i+EJoBDj1V
Nhu5oTZt
Name: res/hq.xml
SHA-384-Digest: RZoi+OZDvb3rG2RGQK9XaXK31aqWuCTjgpREG0Xd3carex5ph6M6ij9J
KfmROVdu
Name: res/iR.xml
SHA-384-Digest: x/7//Q9D+h8PFVNYAKljiSUp1QWx3KtyYBtnkhL8mNV7+23n886UnUrD
593ckCNr
Name: res/j3.xml
SHA-384-Digest: V7EgaVVsyPUduOpE59I+YkbMBhsfy7o7K/AdXFdxemmFusirdrAqJzcB
7GlUEyTS
Name: res/color/mtrl_chip_text_color.xml
SHA-384-Digest: uXvqwuZMhuEtKH7Waek+fugWAGMpmcDnKnIrYi9iuGn4rvsv5JJ2H0/F
Cw1r1PGY
Name: res/color-v31/m3_dynamic_dark_highlighted_text.xml
SHA-384-Digest: Tny/3kKc2UKPW3nlUFtIa5ILvdB7m3G3EipIwFOkvx1rh2UQXR4t37ja
Hj7h1YRy
Name: res/color-v31/m3_dynamic_default_color_secondary_text.xml
SHA-384-Digest: swKf/VGzGcYMqcNDlDDxhTbR/SJVdGJDuj8yFsN1G7Z2+9UmjWaLkmFR
XpQcP5sn
Name: res/color/m3_assist_chip_icon_tint_color.xml
SHA-384-Digest: 1VnvM5IwXEepy3/Y41yZQWx8Sgvl34URlVexVW+Kll3Ybe0Ed5fcddpd
FsjzuEO0
Name: res/Af.png
SHA-384-Digest: gVWqh5SeslkT0fAiH1h7NEazWYt7JZbc2ZhxKx2grDUi529J43dr7927
tbi+z6O+
Name: res/vz.9.png
SHA-384-Digest: P90hzyqp0rUqUS7IY+wMiK9H89oKMOEZz80/vCmVQ1LWdjB4WDbYjHCm
2sDPLz8W
Name: res/color/m3_navigation_item_text_color.xml
SHA-384-Digest: 3K69gXMZwRsFDF7sK0GpWziPCLH5vlecGMkesoIaih1/OMBjL4wrgAps
HN4kCxJQ
Name: lib/arm64-v8a/librtmp-jni.so
SHA-384-Digest: wCFm0zIepO7lFh3NRnbfXKl7jouYe6c7RTB0VEc2gbPQumbEEZe19awH
kezd2j/2
Name: res/LU.png
SHA-384-Digest: UPuajBV5lf8qhW8VfeuMi9nJHhB+/+W7WUuZVfhMKNzbqKATc1Gl51cg
0LzUKmYL
Name: res/color/m3_textfield_input_text_color.xml
SHA-384-Digest: J5Pt9S0OfEBa8XdOmccj6RuXTFeml8DteYLi/lrfZhGQZ/hcjLMyIOho
Zcy6jOBy
Name: res/color-v31/m3_ref_palette_dynamic_neutral22.xml
SHA-384-Digest: YkMWn4Z2kgNIPNk9VAgTJOi90XiA8Yap+MQVo9uq+LCC65TnQrU1Ewci
1hoajbOv
Name: res/GI.png
SHA-384-Digest: UPg6JipGtnVqa+V9pAxlvUlX2qZ2vIHu+cjbprpR5edk86p6kynologh
heIOlUE3
Name: res/80.xml
SHA-384-Digest: R1a/37fjMlKvwGDfcGRswZLvV3n4vqfxOB7lEVq7aLr+GZcHa6/Qy/3Y
qPP/pOzy
Name: res/GT.xml
SHA-384-Digest: 7dldggjbq9ZzB/ueuGr2WLEKimcct0o4b6HswbAMaR56quGKfuTlvzme
HJFDMS+I
Name: res/pw.xml
SHA-384-Digest: GFJDS+Chl+xho4AZA/OouCL7Yy0LBU1W1tZRUislA42IA6sqOtUwSOC9
mPNQfLbr
Name: res/lE.xml
SHA-384-Digest: 3lPKnTSobiE8Rr+uXofw+vjIBGCKB61dkTIKTuq40BrObDWkpgzoo18T
/ilHlm+r
Name: res/M2.xml
SHA-384-Digest: eCwlJl+yBlOzL6Dq8XzWpgYUdZOdvG6+Qc/UnAZbVIC4/a568DxHPjP9
JN8dURZh
Name: res/Tf.xml
SHA-384-Digest: aTgijDl3TYd8qiM3bXA2bO8mhG1qmwehQeYL9ieIgHrVP7N+s3KwsinJ
cFig/7VP
Name: res/kN.xml
SHA-384-Digest: f8DCT47F+3+KpTX9WBxbeXun5G2sXtETk1HZ2UTLwdb1q9+YfpqNS3C/
fd7Xf0w2
Name: res/color/mtrl_card_view_ripple.xml
SHA-384-Digest: JprCdnqYc0z0fkk353xqVPQESv6+mfkFhx+kol8ueuPwtZ1aln1otSfs
yQB6Z7xO
Name: assets/shaders/fragment_shader_oetf_es3.glsl
SHA-384-Digest: I555BTwdOdG5C+6IbgTSfDYAy3EVcJI8mDM1AGs6N6Ry+RJvEzqPuNf9
nMjBHrxu
Name: res/U8.xml
SHA-384-Digest: XzXjsj6MdJ/8uYRa5s3Dz2afgp7RAw05vLJoTdnU6PLgWZAQSlH4URGW
yX6Hf8C5
Name: res/IP.xml
SHA-384-Digest: GV/yWMExpCXKNlj7hHgL1XuibbSIyQUZAJblmUSkjxGqk7dRKG2uf15v
PuT3+qS2
Name: res/color/mtrl_tabs_icon_color_selector_colored.xml
SHA-384-Digest: kDZ0EzWPsJymrOf7iHTxejP8w4Hw9Q2NVFU5RECHrSYsbWzOsueoiIAX
hkP0n7v6
Name: res/gl.xml
SHA-384-Digest: puRbJCWKKi7WBRqcp1d1+JXxgE1HBswvtnzGX4ybIBhnMFnXLEgtbABz
R5eqxwqG
Name: res/hM.xml
SHA-384-Digest: 19+yZawccs9EhweUprGAB0S8Sk4fhpVIYddpivJax8tVd5d+Gs25v8Uo
bKUfD04c
Name: res/L-.xml
SHA-384-Digest: XfEsi8CzW0/9H0/RykbKushhj9HIXmUXL/PEFLcUkzi8jzzgTJ4EfZTl
Als8pedY
Name: res/Yw.9.png
SHA-384-Digest: +m6ZqWwLgdXDiGcyKo0XI4By0/S2iG+wTVRQqaOMzu8FrJ1TciZSZkNr
o6rwJG5Y
Name: res/3b.png
SHA-384-Digest: fOAbd4RDej3QAWMUPlUDr8eiYnKG7aNX5NQdPgwYn0psI+blI7R49k7Q
hELxC81d
Name: assets/test_polyfill_date.js
SHA-384-Digest: rZevJ4OmeBb5grF0xMDi1r+PHvfWkCXulKcGQqMkbrlUvgryv0NFGsD7
0UhI/FQ0
Name: res/li.xml
SHA-384-Digest: wifOwUz97P57yPB10FoU3l1CXj9CLjh14iIMxS1vZ2330lXlv9AqJagY
AvQl4O6Q
Name: res/4v.png
SHA-384-Digest: Vo/H1KPwwZl7iD1bfKUOSOqJKZtYA/TlhOwwDXvLdkSxXngVTgLb/wql
ehZ6brz+
Name: res/68.png
SHA-384-Digest: hQRh5HUFiA5AuM/gN4dVxOi6QbT8Gvd8Nyy4N/lS44EQTNgS0ddgK/aU
hPs1SKtX
Name: res/Be.xml
SHA-384-Digest: cbsHPko2qi6jZAv/Tkx2DxkIHa3LnNHBOVUDaQSmtthVQPx+C9QDyPsO
0PdQ3rk9
Name: kotlin/coroutines/coroutines.kotlin_builtins
SHA-384-Digest: BV/rIw7CDHnfA2MxlxbjgEmEsZdBFOPYQKPAsEpw7o3dvz7T1cD19aP7
CX5X32Ao
Name: res/color/m3_switch_thumb_tint.xml
SHA-384-Digest: LJYo+gBbMsP5UltcJ9L4uK9IDsvTqfyNK0+z1jFWL5SLCI5QprbAv3Y5
LSLAkkun
Name: AndroidManifest.xml
SHA-384-Digest: gQ9Yh4M6b04d6P2wg290FJreIU7eIeXrb2Z//z+tCdCtVRN3eRsc2tZ3
5SYXNfKv
Name: res/Lv.xml
SHA-384-Digest: 43xlTnVLP07ihYDfccdNOgtRhefsFvFu8NqpAUHkvo51uYYpLQK+IIMe
H61WeCfg
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant6.xml
SHA-384-Digest: 7Pn6Z6Dt55aJZVKYKCIqlAAoP3uDOYqwYKbGB960kb+8+r2nZGLPV2gn
bl2TFtA7
Name: assets/test_module_import_dynamic.js
SHA-384-Digest: V6MYs8J2sBlAAeIW+Hwkxq/7xsIrJlk6gZB/bIg/Q210vI2zHit2onyS
qwQGabhI
Name: res/uc.png
SHA-384-Digest: gzwPBjACFbPqEr8wch2aqn2jpPrkXsaHtftCiMl+Jw224yQI7xjetxKB
7hxFGDKc
Name: META-INF/androidx.lifecycle_lifecycle-runtime.version
SHA-384-Digest: D5nfep90WrYsvDzvvnuP9x5FaR35vJoZd33iLK7B3aAUGw09y+vyIxqi
ZJb4T5Hg
Name: res/aU.9.png
SHA-384-Digest: D/KxEae9Aej6UMMIJYpdHwxflvFXtaz0bWifAhQp16hdpdv2+xZo7/4B
10wOJxPh
Name: res/nP.xml
SHA-384-Digest: EKoqvWZQNKuSm2iwEeaJ/ik2OSPI7e4LCONojMNlNUzhRnaabQ4KACg1
I6mrCUmH
Name: res/zG.xml
SHA-384-Digest: 9cokK9Rh35T/S1d7gwbt9ja1ZcdQO4X3eGbfNjEmIPWo8+ubkxLg6WTM
xb3mT+QM
Name: res/1W.png
SHA-384-Digest: 4Fn4D83eQlZ+bREJCW4+AsnWfA6jtVn95pi6Q+sAWDYGuLU93Bc2Hs1z
bFdHykHT
Name: res/8y.xml
SHA-384-Digest: hma8R0P0TPX6tkq+OdpnjmXnIaLuGGhR6DQI4w2DgtIXCWODbFbxFc+p
A3Ei7E7R
Name: res/k9.xml
SHA-384-Digest: pzaKE/xabnJ7eq5Pl4OoV/Zl6AVviaLcu8sLqxfGSNPA8t2LR8rZbma/
+bZBenOY
Name: res/4R.png
SHA-384-Digest: iDMACIh/ZFo9Bu1Nu3dmYjW+IKQWjy3VqvqVIIpjwYejszHBLo86b+kv
hjxvo3yD
Name: res/hb.xml
SHA-384-Digest: LGweY1oloIF5hzE65beVmHeohlK2F0+aFlFCkzpcNLfBRUxQ60rlXeEE
eoLlcLnn
Name: res/V7.xml
SHA-384-Digest: TyHiItUEWNLpkF8eVqxZrW4snDcWAlM1A8qwKo9bzb0EFwKLk7gj4x4b
zOtosNHg
Name: res/QH.xml
SHA-384-Digest: jtILNQutsgRVbcxi58oZ2Gawb9NYlzrrBEbinO4NAS3FqynaXmr2x5qJ
C/ZA9Cwk
Name: res/YN.xml
SHA-384-Digest: KCpXAZQe9igKYZ9N8N2m1ooO69plVoMNMnAkk/zBcLlxoiW+UW4T2SKE
YZDcjNwx
Name: res/Wz.png
SHA-384-Digest: utYBU6cEmoAuSC1sLKuKvgNUvhyI2Hvgx9ijZ2hiatLVXNn0Xb1t34lO
KFByLOeF
Name: res/vz.xml
SHA-384-Digest: 23PmqzXhNMCQeIkzAmk4vo/K4v36SuOPs++OvDRA+1YGHHe1F3VXwEz0
+15YkWh0
Name: res/Xf.xml
SHA-384-Digest: PsFutxiYSsKggPHsl/yIUL1ebQfhXF3CwRQdGu9YYyxL5kdgZMwROwMA
QSULvCtH
Name: res/YG.xml
SHA-384-Digest: G5s0YwakAcz7484LkYgyTUb6AY/fIg/L1oc/sHbD34me5WAGCm4axH1d
dj++pwf6
Name: res/Od.png
SHA-384-Digest: muFfaPQuDwjqSnou+MhzQa1RMPtKzFnt6MupiP7NBulPj49K7YzI7zod
dYfQ3WRz
Name: res/aM.xml
SHA-384-Digest: 4Z0TXq6E4XdOxD+DDgVCQIdlNMEVlcdeut5di7ogfTIln20b0Jn4VAk7
UDxX8vFr
Name: res/qI.xml
SHA-384-Digest: vMVVEbJiQWaIEcV8oeMWoDd7DM2TuU+NmtJEEVH2ifWKnRI7JJPFaxNl
cmA1Vml2
Name: res/Aq.png
SHA-384-Digest: p9ap95Frx9FJIcQ/QLAHLNhaHAF61/XR26LozJZvH0OS4TZ0p8aaRT/w
mo3Ogi6I
Name: res/Xz.xml
SHA-384-Digest: tC2rk6/JP5UCo+4aPcvUSfUgp0DoIEwzRZyxVNiJvNawECS5M94q4Ctz
RyOUNNqR
Name: res/_H.xml
SHA-384-Digest: Gl2ctVAuHD74hU2Vs8Dk2D3XeB9Z2TvPRpaquJFAWrj73aTU0l9DHm1l
7rij4oER
Name: res/color/mtrl_switch_thumb_tint.xml
SHA-384-Digest: /N7DRj++oLymD0w8VQYD+IU1IVC1oFKVE8GlF8zk0H10QSccFlGX5Oso
tpipI9Cx
Name: res/Mh.png
SHA-384-Digest: qf6oq1SoHavj/pg+4JCIriXCMXa5lsg3z2CtjBitEuzr6SeKpE/UYlUe
p9IfNC2p
Name: res/YD1.png
SHA-384-Digest: F+Fs4tx6W9EwPq8wivkTVNI0YltwmdP8cQef/ZVZukYOJhEX3IM/cAK6
4snlPLJD
Name: res/color/material_timepicker_clockface.xml
SHA-384-Digest: KDQR+qHhWTdIPyGSgdVR77cu0RnpW9zW01nk2XOXIY7gn7K1/F7baIkq
0HD7F4Jq
Name: res/color/text_episode.xml
SHA-384-Digest: WoiU999svLIhMXPeKMECXn61BFjLKvgZBeI7FuRN+b6OV4t7Asnbzt/S
RLfwucFi
Name: res/EU.png
SHA-384-Digest: 0J1qaEoGWuDO+RXEvcZBPd/4PfzwYWlR8LiLhk73A2nt7iH75mL02GtY
YqcmVkW3
Name: res/eI.png
SHA-384-Digest: Fp7ZVrAK11ZsFwSxmEQuQ+c6glaJodLOF8vc3s+92eSyPr0wuls+BJnr
I8IGsKqe
Name: res/Eb.png
SHA-384-Digest: 07pBxshWqedU9qIM3d+gkh7ZAdc8kBf0gY5m46vKSqeJXAlqPECcDvay
hjj3xiww
Name: res/color/mtrl_filled_stroke_color.xml
SHA-384-Digest: PDVGpvQB+ck/z0k6KLG2rGNwrRaOLR/gE3p/qcU4jSPadPURG4kjCD6v
0MxUuHpc
Name: res/fN.png
SHA-384-Digest: XGmUMVGZ0wkLiBvuSAsMSRostPFaeK/YKpTk3K5raStN4Uu5Bmk7HQ3T
OwJ09tKx
Name: res/hS.xml
SHA-384-Digest: 0IeEo1PCk3jnhr9ZDC6ZR18UToVDRxvhutf/YjzrJk901PUTI7xpRfZj
+UdQAYuZ
Name: DebugProbesKt.bin
SHA-384-Digest: hMb0bxEzuDdxfE0FfXVa7Yuh+BNBZHiz38tqSNXiHGspjNTSFutqo5S4
/U7PkoSG
Name: res/fW.xml
SHA-384-Digest: 485yX8XR3aSNG+xQ5AwS3YMz53eigYi1JZEqpNwhlSCbi+TTr7HrRRgt
0dgdgRhr
Name: res/wy.xml
SHA-384-Digest: NUykPKL9XDCFOTfs2GC2rK8A5yM2zk3WV1xk7DaqDHZQylqpRv/766Up
W887aMZO
Name: res/Ci.xml
SHA-384-Digest: t5hRYNVwRt0QLlIQlNiHarelVlDQetmBC8uQjM9U2fusIQ86WLnrnP0x
oFM2e25t
Name: res/color/material_slider_active_tick_marks_color.xml
SHA-384-Digest: jE1Bm9sIil0lh5NeaLO/+T2sTzYAfxMLLZ88KevAlzzF2Sgx+rozRmRP
RlQLU5jq
Name: res/dP.png
SHA-384-Digest: 00mOqYMUdabdLug0fbefv238V/vcYZiJa2ORHXBfA09NekvpWpytcvt/
+NcpXlBT
Name: res/color-v31/m3_ref_palette_dynamic_neutral92.xml
SHA-384-Digest: 41FIZyYMIAGrxx7i3hqrqT5dhg+e4/yHsLLel851LIaH9vSAMm8Pn3n+
/+08R5pB
Name: res/color/material_personalized_color_secondary_text_inverse.xml
SHA-384-Digest: aDWeZU3WruaPxQOVVS41JqzDpABakZwSTlpSpf8Z5qIoIORE43T9Qgrc
m3x2s1OE
Name: res/color/m3_textfield_label_color.xml
SHA-384-Digest: N4roLM6tX1FYK44KQV4Ze3/uEPPw0wsR7AN24iAr/l2ljBKwcXdsapAg
66SkTh7K
Name: res/o9.9.png
SHA-384-Digest: TbpszmwOaMIqHHj0hiXt9c6GI2Qtx14yNkwoIodNYZTbXcKPCz6cLCIA
j+oQJX4e
Name: res/zo.png
SHA-384-Digest: /s7jcciEKtORt8YgDl/NLF33zO6usqzOJaILB+zbEh1Os3mvTAukovgq
M+m440S1
Name: res/1w.xml
SHA-384-Digest: teHYrO9BdF46xvjHEGQBCxkpSu29G6wzf6giiIzaMEe0mfcUkw8LJr8b
xIvAxxbE
Name: res/WP.xml
SHA-384-Digest: P/8Xf0ZzfY/vvkE+ittYF+Y5rJSOJfgr2DLfMQoMebs/gwAnF6CfMhFz
lArZ6DjE
Name: res/X1.xml
SHA-384-Digest: hRpEHN8JmbThtwpcxGpLxQ5kjnRaZd/BeEapVZxzWSYwG8e/Ww/RwDkx
R6OA77zl
Name: res/p0.xml
SHA-384-Digest: XxKzXOv1Fkx3bUo+S6u3DGW4ojbf2DQZ7OC8IBukAjW7adfs/6g82EHa
glUdRvta
Name: res/5m.png
SHA-384-Digest: cSzGIXqcGrPZAp4Q56KuEAboswzFxk3aAHrhs0tdR2eQKpjbRe3v03Np
It7JwLkD
Name: res/color/m3_slider_inactive_track_color_legacy.xml
SHA-384-Digest: omHpwEgPLZIfpOceeCQvVw64LZFkah9J3RZkdcuAVRJ3wpoF1xSf8lrg
ckXKJ6It
Name: res/NZ.9.png
SHA-384-Digest: Bk+CQ2CHamGxvIvmGiFKQzA9/4P4nqFMSYMI4AUhoh1ORzzcGK4Fqefq
qTnzzmad
Name: res/lV.png
SHA-384-Digest: 7dpe6bVm/M3YhdARygOAfgwdT7SegWJQBvHz8Ul7nVgKpCfc/0YpMQ42
9uBRxZ6j
Name: res/color/m3_tabs_text_color_secondary.xml
SHA-384-Digest: 6Frh9d8825buIgMA4BrcJiQpR+GqNnP1g/ILbRYCkzuPdqZiIAv4eWhY
NEHJeu0T
Name: res/w_.png
SHA-384-Digest: Ka3EFjev1s6JHxmdHmkviSyAAFLLXbmov8d9cAk6HC2PAKMEB+0z3xlc
uKpM2Etp
Name: res/color/abc_tint_seek_thumb.xml
SHA-384-Digest: bwTo68E4j69gcCuwD0gsYzXqH5p6NxFty46jhD7jvDN8nbD2bc1cSBbH
AOEbgH35
Name: res/5U1.png
SHA-384-Digest: h8hL/ASXrpOVbYm+s9+Y2aDnu0Bz9iX7czctpYGd6UhHi7A/dsWJzzmk
eRMO3b0H
Name: res/lR.xml
SHA-384-Digest: GwdQ6fkcWu4cbrFarAdxrYYEtMtVMOVBbHPhJAj87c3TkQ8FAiipKg1u
+v+HgpQn
Name: res/color/abc_secondary_text_material_dark.xml
SHA-384-Digest: fSVEbBvD/gPPyB+ApaEKI0eaX3YrlVlToV8ePGpfDJsapCfuA48VYmd0
G8m8IOsv
Name: res/JF.xml
SHA-384-Digest: R1bHw30/3wmuyVwOk5aV1R9ut/aID48lFOeI9V62gOEusB7BsDfrawyS
jV0Gp+ip
Name: res/xM.png
SHA-384-Digest: 7V0cOc4bSkXcUrxXrtvmuJOzHcfXzS9wZ17oOBs+bOhAKJB8a9ylAUyU
x0yS/VpH
Name: res/ck.xml
SHA-384-Digest: fR8RblbussxzThpVxi821IXQMc4n/o3apmXHrUSzkVK1HINHGH6MKnAX
5qNZG17c
Name: res/e-.xml
SHA-384-Digest: OCEbqI5SysGxJwgbNP91blYPktPVH3/73UbhzJnMJrepO3mBREzJys2y
IhAy3Rqc
Name: res/rd.xml
SHA-384-Digest: i/zIKXLdFD6KJuv+TaIsE0I/ZAVCqjbQBhOsPXy++Y8zy3n0Pi3jAvX/
XXvR06Ce
Name: res/color/material_divider_color.xml
SHA-384-Digest: GKsSur55lbUddGyC0Kc0WMBJTmCpIf4RG//xrz2tYmKfpkTv2oq3B8+I
ovir7bHZ
Name: res/D4.xml
SHA-384-Digest: KuwCUNqEYkb9+jyvou2vZgVJdeBxTnNFM/x/uSBhrJ4fDXguHV2BrrE6
sP+M4yuQ
Name: res/_q.png
SHA-384-Digest: 7r1sGU+JYTdS0vq2KC+a7IEpHxawokSKJOtaEXVqHdvPYuzSUFPEfuMy
aCpCk8xF
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant87.xml
SHA-384-Digest: zDjaL6/eaHt5rXQVoaUGt+YWF0p0+BmKNB+xTZWIVM6sjFDwCtnfWN6R
ehsIawAY
Name: res/Wt.xml
SHA-384-Digest: W9sUET4Ro0yYwdp8e+b1L5r2pQgOAN/WOfikOzQoEyZF255DAU1mAmUm
CPdn0fRV
Name: res/fm.xml
SHA-384-Digest: qbmeXmNbdAvcZuIkhmBUGU5i26EquhwBEnG3vzLq3crf6xLcJTD0wPbM
AiQStuuS
Name: res/78.xml
SHA-384-Digest: pVhRcl+uVZTvCgFKUO0RhQKVy8l3shEEAvbMMcSErEMz10Nx8Sqd0+nT
kMiYqLNF
Name: javax/servlet/http/LocalStrings_fr.properties
SHA-384-Digest: hFPW776Oz2fARjAaGOvmOPEESMDYsXgySiKiF5tdoiod4VXQrUnQ2Iq4
hZTaJH8R
Name: res/XJ.png
SHA-384-Digest: jED8Pi6QOLXlT01Jv12IsYRDTkyheWOex58j1F1ZQLOEnIQ3xro5O+M5
Ekikanrw
Name: assets/shaders/fragment_shader_transformation_sdr_oetf_es2.glsl
SHA-384-Digest: 1+yVIplWRqu6/xzh2dyqBS0n8TCbYL7/MSyLDmpeCF7lUSzZnLNMef96
yIZiKWmO
Name: res/color/mtrl_calendar_selected_range.xml
SHA-384-Digest: av/HXXNgnoS85eOu4Zdhzxl5wBCPFgZl6kA51z5aKNJlsegY8w93aRqQ
XmY1UpXZ
Name: res/gc.png
SHA-384-Digest: jiKOQoVbg5TnCMjRGRtziY+qu6mwqLyORQ7qeaa55r8pUe2zDQqB4fXH
tTvhHfqW
Name: res/color/m3_timepicker_secondary_text_button_text_color.xml
SHA-384-Digest: IeBzDNcilNYH2mW4BGbqKlQu8uh21pfHi85rWCRS9Ia8rPKIjyyzVcGU
KADmSOyY
Name: res/yH.9.png
SHA-384-Digest: WSQFTT0DWa8mGGJ2/0OWocAxp946p5YZvgPxaJX/LCK8hBldcBwagL66
iyB47A8P
Name: res/vf.xml
SHA-384-Digest: e0xoDqf9kkP3f8N0qwycLHiYJtUyZ97wldk1s9qHNDCzOfqZ68WyJnW0
efYwfJ2x
Name: res/color-night-v8/material_timepicker_modebutton_tint.xml
SHA-384-Digest: Ns1zo5hrT0C6xUlwPFBx/Jb7I/i58IH/T5NLdNAQaJ/xzj4WgNKBLK7y
nGl23H+m
Name: res/Ra.png
SHA-384-Digest: mAtGMgYy9gP7RfEXql5A3u/VYOQbTQJiOGIPLLQPzN3dFawhUMxG5hUe
y8LVCJHL
Name: res/color/mtrl_navigation_item_background_color.xml
SHA-384-Digest: 6C1YpmjYeWNqsxnqSCf3j0nymkF5h6qYbryh6MPRkgGMKYEr3KaV8YjW
XXaMHf7d
Name: res/color/m3_navigation_item_icon_tint.xml
SHA-384-Digest: 1WdP20aVTZdbcfJCow0XGx94rQBNHb9GXD6U3Ew+6c52QkyH3SOjXqWg
C/xsZGIx
Name: res/nN.xml
SHA-384-Digest: lMuzYFP1XEGp8WXvuGKm+3ApvYOU9ofKtlVmO4/2JFJ+irAILoRD8xpL
Dgwm49MB
Name: res/ua.xml
SHA-384-Digest: HkgEO2MMe6xslP7PZVR56cf/A4VTypjcreWWZRBETBDaTtWJabYNmiw7
Fk6w+oHS
Name: res/gj.9.png
SHA-384-Digest: ABW0mFpGYZ/rzFiyQeqgKYibIL6Kzc+NxsUYLEKemR/L7ruECYg2UJlo
53VLOlom
Name: META-INF/versions/11/OSGI-INF/MANIFEST.MF
SHA-384-Digest: O6gP4FG/kE89FNRQ3B1mQOZcCkZuaApzHGHlzEJIAka9TnsnrUqN/ZXc
NNg0GsUx
Name: res/p8.png
SHA-384-Digest: aO68KUChTAZdPyPaQ5+N1n2dKj106a3WJXg0OpJgv9JgKiCOBBONUlgh
7KugHcnD
Name: res/X4.9.png
SHA-384-Digest: tGjk+HpqbG3ItIM57Ps+nSDfa8ES8opKVA74PrTHJzweMLomajtpU9DZ
WwYm/Oi+
Name: res/W3.png
SHA-384-Digest: 1joWL8UMgZss2bF+EDZ0rd705NvLAP/U94V32p0dmULkR3FxpbEc6E0t
yPt/dmNo
Name: kotlin/kotlin.kotlin_builtins
SHA-384-Digest: z/ppmGaa1+V/hMi69B7TdBGjCtLdi/nW2KwuJpEwVbYnN9xOqtO/U/8j
LPooYK5j
Name: res/2i.xml
SHA-384-Digest: 4YGU2r+KHfl8BXI0G2oin8DWTsx5RnnNJkU+zQEXNx26Q1bWlw2IknoX
FrK9oTVL
Name: res/3J.xml
SHA-384-Digest: WOIC2i0j55M556+YpYlirI+Kaj5QBaZ3r3txVJVm2NhbyuVtaCednl2c
QnyjufOD
Name: res/o3.png
SHA-384-Digest: Xmj344sFfdLW7M2tZTB+8z++sFIAE4ZF3QpI0+wgS5q/X6tG0ltS5BHh
4P+ssQF6
Name: res/vJ1.xml
SHA-384-Digest: hpZneoGDvzuDTwvciWUM2Lln6LPbtKewI6S/SPvsvO0uZq3c48kzBFxb
yVf33AOO
Name: lib/arm64-v8a/libxl_stat.so
SHA-384-Digest: E99YvCKJFW6e/pdQSyRffJNIOiQBeic6Jpuxd7cKK87Two3jZDpbI/X3
FgcaRGSA
Name: res/color/mtrl_navigation_bar_colored_ripple_color.xml
SHA-384-Digest: jJeH6LXNLqENkr/SBbacOYHncMjvPX/5w6VRZBxCNrlX6pyKOqwGrgfh
JPVUqb7q
Name: res/g-.png
SHA-384-Digest: aGEEWej6SQn+DMQ00N0IcZ4mE1Tr3NHdJhNmEuFaoOWvaZTWgc+CUHPc
aCbtZb6t
Name: META-INF/androidx.lifecycle_lifecycle-livedata.version
SHA-384-Digest: YUH6peOmaO6YUrh4dlFXGdtWBzPcPuIh1a+fAEwmyHs8ELMG8cRjfI0J
OchFaFJ1
Name: res/0M.xml
SHA-384-Digest: a2PkaC/yAxu9Akv2rhIYFxhkTJL/B2/KhnxM3sJxgHCwLHdo9M4DqV+t
gUun16vB
Name: res/4P.xml
SHA-384-Digest: W2Q5jskdcgzicdpTVwJd+R+CBykG2qriChMSTbA4NjrpygiTquem7gcV
RGcaAOdb
Name: res/51.xml
SHA-384-Digest: hOzXB1/zvHYvWqKDXVDM31svdx95fCM0jxjRlPl6wwj5Ap65+RPphZmv
5Fmy7t1P
Name: res/xa.9.png
SHA-384-Digest: vQ4fKp6NCzKa4FTEER0NggSzSXJ8nWFPPjEezQxjFhDwdMLDqg+CFxDW
i8sHGI/U
Name: res/TC.xml
SHA-384-Digest: 2fui9v6hsppxtUmFVREwTS4P8RKgN0qBZofhIu1TlD94ilke7ZxzVbVT
lVt40m7r
Name: res/qK.xml
SHA-384-Digest: shc+gYPo7K7etJgaPQ+p8zxdOpBWYxKastZVUfJCU9hvFfI1G15V0CxN
Rp8+cNH/
Name: res/G21.xml
SHA-384-Digest: lm2wOnF9q2fxwATi8c7fbVkYUoYfbUBRSCYHuqIrcRsmi0EjNxoNAfa9
fa90UBhH
Name: res/YG.9.png
SHA-384-Digest: tLOjtLs7DsMFl5m6FWchPNGk9cOLhU6UPJkSisfIKbU7NWOD4GXlbzrg
XUjDUmBe
Name: res/Lt.xml
SHA-384-Digest: mdtiVKBHdMeDDlYV7OZrtQbdJJzEX2foV1K+hsegUp9UeI30kuH921/K
81B3BIDZ
Name: res/MU.xml
SHA-384-Digest: HTxiHxtqlHLrFAouEXdUnd6vqWpYGine+WfJoR0ToNAKIOJDEgk+BrCN
O40WcRva
Name: res/color-v21/abc_btn_colored_borderless_text_material.xml
SHA-384-Digest: K1Az9rfl5yhxpLZQoeCinClo7G+dCACiVvnTepmfS3OWrz56DiBT5ZcK
e4TS//vD
Name: res/xu.png
SHA-384-Digest: atzxwJUg+1DuoQlW+8cN/2np2agi5d4wOdlzx014rYPccKrBIosd/gTW
m+BDHx32
Name: res/66.xml
SHA-384-Digest: vpwXM3Vvp/r2uTBYhHZQ6pc1Ts8MLFtBY0RZuYxOzZJeeX8jsemqYB+Z
zSImH7km
Name: res/IR.xml
SHA-384-Digest: qHkYEsrYz6QSn6dENfRhILE6ro0akAXteL+BeUuu51P5cpT7ogEqXrnK
q+eWslUU
Name: res/color/mtrl_chip_close_icon_tint.xml
SHA-384-Digest: pqU6EpYupXUyrvtXAaY7xn3xWVDLN8jVoCho1pUQlUhLHqe/AmB6q4+u
/8J0sEX2
Name: res/BJ1.xml
SHA-384-Digest: IsOql7MlG8CzfCkPD42vqs4Zx5tUeGD477rqd5WN5NOHPFeUgZy4FkiC
JZqj2fJH
Name: res/EA.9.png
SHA-384-Digest: mTG9i9uc4C+bAfRKfl1qzD+f7/C+dCOWZzKqTTjZv+UgEDlVdH6u/hxp
0NkOmCcO
Name: res/VN.xml
SHA-384-Digest: 5uWPG6yrzf0NKk8/XK1SXu9lejgXO3XBRXFteVPYhR81bomElNVlACxl
YD9oQ8W9
Name: res/zV.9.png
SHA-384-Digest: QdGDWUe8CXPi1rtnO5E2hVVgeOVTj0nZoHMp3uMHAEdyomlOAHgF7x4V
7kbVvCV1
Name: res/U81.xml
SHA-384-Digest: a3LBBE9iA8aA19Tv7dKRa3PAzQpxdqNp5jlzYg0sphAl+HF86DBdEm7N
/FWthtvR
Name: res/color/m3_navigation_rail_item_with_indicator_label_tint.xml
SHA-384-Digest: ivP+JboSn/+yixCXRw0Dc7M/bILvcKaw9yk4wNTbjBHPUP9W6iYyuUsp
xbDB4ylF
Name: res/fY.xml
SHA-384-Digest: eMYYduhj+T2NKSZqNHYOIT9UDd4IGrUzK6EuHnqlRtsDWwE1j/1BJT9c
1y+LORQ2
Name: META-INF/androidx.window_window.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/JD.xml
SHA-384-Digest: 6iVvxSefUStOvrUd4ccvJluRkhCJbNrDxKY55x7G23kHHIGClscqZbBV
qvbLYe4u
Name: res/color/m3_dark_hint_foreground.xml
SHA-384-Digest: yIiatCHu7IckHqDirPzA78ggXhC3f3JyFekfG3g8siV1U65Jx2rHcDE9
vLhiiqGw
Name: res/Bz.png
SHA-384-Digest: A3Kh5aSP6vwazMvCtNDXxvuA9GOkbkzdFfZObDehUdnvK5hWJCekdBc1
jPs+tG6Z
Name: META-INF/androidx.media_media.version
SHA-384-Digest: eaHeL1EfjzVJf22et7imyaY2wksxjKFFqnVvKnq96leidLMUZIg+yR8I
k7wnMpIm
Name: jetty-dir.css
SHA-384-Digest: BCs4kpE8ES9w+HhvUr10mPRKxyxBdTT0dlguNejm1DPCSzU5DGqrAZ6C
V+Mos0o3
Name: res/color-night-v8/material_timepicker_button_stroke.xml
SHA-384-Digest: FK3354RTOTCemUhpJ3IEEf/saSBAuE288M7LWJolMweJPGE+w6b6yJ5e
bpOAZX4y
Name: res/1u.xml
SHA-384-Digest: H78AoOAc729fET5hsK6F26qV7YID64lf5Wy0MylOCikwoLN2Zg2QUlTy
DMCwVoN7
Name: res/Lf.png
SHA-384-Digest: NWW8T0rtoM4yH1kN2H8ZhxILlh+vWPs7FVkMzvuD/mz5xpcz18LOa5Vq
VH2VKeal
Name: res/2K.9.png
SHA-384-Digest: vVKnhgcH3EyVvA0AtGfvJAPZqUWeja2Bve/pj3FuqUQTkTILioVM7zl5
+zCaJudI
Name: META-INF/androidx.savedstate_savedstate.version
SHA-384-Digest: GKqkS0cvyjjgH1wxhzzW5U7S04+7atOY/hnmeP/2ShskJ+QcyWqyhIai
b/q/Jwoe
Name: res/color/switch_thumb_material_dark.xml
SHA-384-Digest: xP9pOKtGxdl4K7gARvtKpeeJl84XmMh/sH7nzuxocX4mcLqUYRABQfr5
F/t0+VOy
Name: res/Pv.xml
SHA-384-Digest: 3q7BOR7AokNNSiFFLei8qHnE8KyEnwlRMonVOCla8/oezrostQhpLW8h
LtbAdlx+
Name: res/G2.9.png
SHA-384-Digest: kGO7QjNlxe5vVBRstRnOcgygB0fKDRGGZKIV6p2Q1Z+coVwf/0pndBsh
tw0XddvP
Name: res/wL.9.png
SHA-384-Digest: fJQGU1WMS4uG2iXMLtgQsL6ueBOej/mu1n6wg+OpRtVJDJgrvqmSnXXA
lDggdeJ8
Name: res/eH1.xml
SHA-384-Digest: dWWl1H4/HbyyW+nuOO0pl4+1MKQDrwCEz+ZEE6DEmSrBCwLdWJkyhJ+f
6uAFf/Ej
Name: assets/shaders/vertex_shader_thumbnail_strip_es2.glsl
SHA-384-Digest: 8HfXFGvN0+uUiwMfOypbK7SBx9PXd5Gyoj2o4aEV2HrYvkH5wGxmxanR
Own4QMuI
Name: res/-A.png
SHA-384-Digest: wjF8QKy4zx5whRaLu3Cdl+7RkRDSSUrExjGnUKI+3Mh87BX+Y9xf7iEf
L734weB6
Name: res/BT.png
SHA-384-Digest: VB2bOfx3LZk/iZWlV6iTomOQvnajY6scS8Sh3E+8GDCjoRRnQ5jLptsI
X01k/gJN
Name: res/hv.xml
SHA-384-Digest: dJnlUbeVJH61WH7QnA2mCoNI0eewn1Ux5wrzPv4dzc4j03DN4SCLfUQZ
cgVEXSHD
Name: res/D_.9.png
SHA-384-Digest: cXzRtyk07J57pWW/C53cz4hLqcksWq2myaCINMOWI/PU3zcO8tseUMjy
QFTLgikF
Name: assets/test_assert_define.js
SHA-384-Digest: ZHDn/P/TUamgTmAjOCLD0arrD/nuzSub4OOXfGbEU0OO91vYYhewQ6aK
gy7CbvGb
Name: res/FW.png
SHA-384-Digest: uYFKqQSQRDYIF6lDIGxD34p/+cTXnDBg9cKOscdXR0l8l54523Lcsugi
QArIpOoG
Name: res/color/m3_navigation_bar_item_with_indicator_label_tint.xml
SHA-384-Digest: G6cEkgqGDOEzxnqQSt6viOnb8CLg5QRfujV0PSGYmVApa5q5wP2QAmd3
pTIDFPpG
Name: res/IV.png
SHA-384-Digest: 72Am2p3Kpfha/NpTy/NCYdqsIb+fwTjKxymSgg/mBNARm3+YRAcf6nzZ
o9jL31dH
Name: res/v_.webp
SHA-384-Digest: +QZaazfBgn9VeEqkU9PEkjbtrICv6SvqCe/lBxEeLLJA7lO9Ca+T5b0f
xvprpEvy
Name: res/F4.png
SHA-384-Digest: x0PAcO+7yLrLtCf42jGb7r3Ak9UnoQzOf0s7InffgM6qnozgwNY8+TuG
kWIgWj9V
Name: res/12.png
SHA-384-Digest: 1dnsht12KfTj+CVDO3Pw8uyLWXCNRoRZc207NlQ0EzZxAQASSzs1dWMF
tfPS8zkp
Name: META-INF/androidx.vectordrawable_vectordrawable.version
SHA-384-Digest: w9IE1UH/gUEbdNJkdvd4BXL4yAaceGr8xqlagTmnOQfkG69IuErYq8ZN
m27DHrb4
Name: res/m5.xml
SHA-384-Digest: a3qhEErGvXVzF2n09HoW2rJLq/TUvTx6aPCbiS+GYo6tB1wHw//iyBEv
cIupZIgZ
Name: res/cm.xml
SHA-384-Digest: Qooha/oiCHqraPY2vsrIqCj0lAuoDdTXzoJct/NSckt+6wqUvLz1u+6Z
W7tWMVs/
Name: res/8h.png
SHA-384-Digest: I05yZ5087L2n9G/kAHTkZSLGw5WKXK0+XkBIWOZa2seTrxwmrbHJA3eW
Q1A70FGj
Name: META-INF/androidx.fragment_fragment-ktx.version
SHA-384-Digest: JSbQbclh2jKclz7IkGQq8Am5k+8z/fT/NGDXNjG76E/9UXFMKo1B0JfE
J09pvEqz
Name: res/Cg.xml
SHA-384-Digest: cmLjE0tDCkV2p5CCH2zKTpf3Tx9OIaflnPQlFe0ZDH88xX1p70tWnmiQ
DiRoiQmO
Name: res/eA.xml
SHA-384-Digest: 5/SUhlgi2o96Tnxo3t9TPXIqp9LV7PqDMYQS1Jqnbde0ttFVjFqtvFuV
txMWnTWA
Name: res/GC1.xml
SHA-384-Digest: Z7IcDCDXnYgmzER/Q/1VpiOXlwfVuQBrSEFImUq0TrNWK361FcoD9t/s
1/iluKjr
Name: res/D6.xml
SHA-384-Digest: p98S/bb46KkP/lfdhRgUrDkoeioQIyPSjcifztyuhlLOLoTY0hNLcPLh
k67yYrHH
Name: res/color/m3_textfield_stroke_color.xml
SHA-384-Digest: EeYy4Jq9AAp7RQkA/bCxI0CezpnYjMBErpO8+aJHS5xDLJPaFs9L425w
LHQ25SL1
Name: META-INF/androidx.core_core.version
SHA-384-Digest: rhLazMexU+PpVIUOOPSPBvmtfstRSlMkT38j5NLxiqmKwgYkKSNIitqq
I28eUHut
Name: res/XW.xml
SHA-384-Digest: 4MjBqsB+CoXKTgtI1pWyZgFpFSOToDFT+h+IVgB0KbnkDGlcmkwWOXpw
VoalQzN8
Name: assets/parse.html
SHA-384-Digest: d1wGlDUmpfIVck0O8Gvp16rRNNremxwyptc5kn8N6ieCSKHnv8b+7Mn0
C3rIqvXP
Name: res/wN.9.png
SHA-384-Digest: JjCRnHAV4Mz+NItlg2FXf1daT+0kwJhPdPo7FO6qGcxo12YugPAgabhF
8UZ251rX
Name: META-INF/androidx.vectordrawable_vectordrawable-animated.version
SHA-384-Digest: w9IE1UH/gUEbdNJkdvd4BXL4yAaceGr8xqlagTmnOQfkG69IuErYq8ZN
m27DHrb4
Name: res/SO.xml
SHA-384-Digest: 7ita8wVV5vZ8AokMusWsp0U+HPGzR3St2N9RuSwg57aq9rkPdtEFnr8u
Sn3n5mqP
Name: org/eclipse/jetty/server/jmx/Connector-mbean.properties
SHA-384-Digest: xGSm/or+2LlQNGI+UTK4y7SxTLdFUnlvjrxHg51Ay6J8HLjnpB+MpeeL
VZzdTvBA
Name: res/5k.png
SHA-384-Digest: U2DiMjUlHruUWJP4rRfTwXkLgXGcDB/IV/BxdWpqp7CfR/tEzC28Tli/
qj4B8roo
Name: res/color/mtrl_chip_background_color.xml
SHA-384-Digest: 9N+FqNNTi/hQHJPFSPBn7lL1FRBkjOo/AdiPEAmz2aXdvGaAFzF8srpV
2JbbNCCS
Name: res/vX1.xml
SHA-384-Digest: 1BvuuNVdkErtAd6yc9YqSCIqwnc6wMIQB1ojOeyMebVtiNPHPLdhkhq/
4SKuT89c
Name: res/aU.png
SHA-384-Digest: wYpL447eMcdZIg+lyOcvqlpgGsFBZLnlOXEMaX0sDBqxwLu3yvz84Z9A
qgqeRUid
Name: res/color/text_control.xml
SHA-384-Digest: OFg809tgpX70ka6nLYGrXCYdXCZjsiN0XgBJwXflSOPVP5KiS94zVvco
0IRFIUZj
Name: res/xo.xml
SHA-384-Digest: Q4fcoWsO3bpr6pK5GRRxFf+RRwVKUwxf10iNw4PuqgtV6OZfsvmOl5iq
JK7gtQ2D
Name: classes.dex
SHA-384-Digest: HJWEHlMELvQQZh7BW7VLEGYbYYKJtAETqlJoqsDBqDOBYf0bAZxUHH74
9QXHP4qN
Name: res/color/design_icon_tint.xml
SHA-384-Digest: cxJ2aAGB6E/SZxOt0tAxaJaiLJHXAGkOSpevJGOMrDKIzQJqHKBGYiiq
sjU5jKO7
Name: res/FS.xml
SHA-384-Digest: QRbWx4j/py5r1FKmsyeI2ccrkmLaqznsLyv4zCy1+Kmbv9nm4SEsP6Fe
4bkMgyh5
Name: res/color/material_on_surface_disabled.xml
SHA-384-Digest: xS7CUHg2gZDWplD29jEzbxd0UE0qdSo/5lIDvfXpGHfHh5omN7e5mrwW
BHc+0W9T
Name: res/Ol.xml
SHA-384-Digest: Gb2TApfG0pYUHYu6eTu46CCVY9++853+10HBEwAogLxOKtdavinjeXsO
Ml8sUnEj
Name: res/EU1.png
SHA-384-Digest: Qi8a5cdw90qIZrIMZM1XaobrSWVWQb3wVWVMKtQgwvfMwuWhw3I9DfWt
gYwjNPge
Name: res/Nn.xml
SHA-384-Digest: B87BF2ccGuCRsJ968yiZoKjKqNtovzHAfaj4HUB/C3cAGVd2ONWtLff+
QEap4SJS
Name: res/pe.xml
SHA-384-Digest: 2/b8jjkH6ZWtj+rx47J8pFXIddCYQE5yyGHGtfg7/OZzQP99eLPlRAyp
okfCWbKv
Name: META-INF/androidx.localbroadcastmanager_localbroadcastmanager.vers
ion
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/8c.png
SHA-384-Digest: q4lIWdHxuDE1nNVcSwYB7zcyF7AFPghEE0BeBnaaI4WuJaHPdFtIf05P
dXrHuIBa
Name: res/nL.xml
SHA-384-Digest: IywTxSlxOx9Y1Kf/ruPYUZ47KZSThVr7mLDjQgncyRnZPKST+gG8s6OZ
MGRHQ0jW
Name: res/SG.xml
SHA-384-Digest: VwJEojrlmaxOs1B1xZwn4ioUPdHBxh1xjGUzEtPUSfx35SbCEWJWilci
oUCw/MSL
Name: res/color/mtrl_fab_bg_color_selector.xml
SHA-384-Digest: LOBwJ4hVo+kec4K87tMlBPPDx3diTLtGVqbaplYte1gjLuVPqFFx1A38
Wk4oZC0u
Name: res/color/m3_tabs_ripple_color_secondary.xml
SHA-384-Digest: GN6HJANId21radQt1cLEjB+v2gjrJ6Xr74tktUB2VieNVqySACgebPe2
UUQwBehy
Name: res/Li.9.png
SHA-384-Digest: miLIS9IaXKW+848QkOPmShQNfKqSobV2iElOC8yk3e6v+bVkOjZPEEWg
kj7tDTSk
Name: res/4k.png
SHA-384-Digest: 5+BhOy0tnsg2mXOGGlVvsV9sNp3ylSru/BV3TIehq8eAWaabWOWKcMjT
Ty2gn9O7
Name: res/el.xml
SHA-384-Digest: BtRI0F/NwOVzxvpsB6iSS10CCj1g7oRtYAISpqRg45qUXNv0KhrUKyQN
w+L3bRwa
Name: res/J1.png
SHA-384-Digest: +ua0viHjVWfBce4n186HwKHONDaK/VP1YdULrBXbA0oPlLfedVR0KgNG
EAdwc966
Name: res/color/m3_slider_halo_color_legacy.xml
SHA-384-Digest: p3CbxhJdoP8IMVGoZ/WPa2j1Brw8Cc4YITeJfG//9frCLBpdUu+Y7z1x
5myFwdQS
Name: res/fj.xml
SHA-384-Digest: dGdZX6cocHkSMBuXdeLF+2vyR1XAtqDeyBqGQIeJ2w6zsg0lrRbSuRz+
BfeDfPXU
Name: res/Ke.xml
SHA-384-Digest: PA0REJId1SSR/7LkjEyxSYtq9VAgrjxOvM+5bFd4OO5VG8SmGfPf/rGW
kmYWTBw+
Name: res/N4.xml
SHA-384-Digest: OlawSt0Vu3tECYnk8Uu65W3h3l0onq9HJPI+HetKmfAQgeX6bdpRn6dI
hBlDKsLK
Name: res/jI.png
SHA-384-Digest: 6vOhdEWwJUuEDJGlQoPp6sIthLWMW1PAqJMyRUuDhI5EA7FyDuD2bF15
RdcpQg4s
Name: res/JD1.xml
SHA-384-Digest: 6OC1OkDY6X7rOifL7P0/lyNpz4XTpi7GmJAaPCUxIvx0QOgtU3VS/okI
bubo4OP2
Name: res/No.9.png
SHA-384-Digest: 3PhdH6l4ZVLcaIVTxODY9duKFcilsduA9WATLoAjllxxWIpWS3L+hOQI
6lcAtsga
Name: res/color/mtrl_filled_icon_tint.xml
SHA-384-Digest: 35xND/H1nQwVzjo2IsfTyoOL4NxJR3tyDhJucIi+3SjvguciAzE2g9RP
LqdghcEc
Name: assets/js/lib/crypto-js.js
SHA-384-Digest: p4S5Ok8jC6EYwHG0MeGzzkgxsphF6h9HgXEyhRKLCH0wR2Nq1L9WfD5F
x0PbG6hQ
Name: org/eclipse/jetty/server/jmx/HandlerContainer-mbean.properties
SHA-384-Digest: limSfIrrX9xMuLQVhT9zAyf/yrkp1whTMpGd+e/lxJ7TmQxeP1b2ieDm
e+c1bMFK
Name: res/68.xml
SHA-384-Digest: pX4NdvOwcig10llXsx3bpu9MuuACaHdsQlqajDTjl8YkNzJvLLFkCLpj
d18lSkt4
Name: org/bouncycastle/pqc/crypto/picnic/lowmcL5.bin.properties
SHA-384-Digest: DtBLdajnXhHufgIh5c+HpFTjxzhSYWfEiHgSeoiDhqs3AJ1u+nm+t2+E
XustgZFG
Name: res/pV.xml
SHA-384-Digest: M5Ubl8tuUzskM6DfNNUilsYEnfAynbW3jpZrSfEtPRzqZ+zP9+uJxeXu
yAda7Q1k
Name: res/MW.png
SHA-384-Digest: g28G6+13JYz9R88JIdAI2SdBJS8BFNYSJbMTTobucUn2ypwasGe0e/sP
FCmvRMV7
Name: res/65.9.png
SHA-384-Digest: 8kitJ2jvKwP1gqfTSUK3j/OGoFF/3okUg7DU1Jj1MpihIfltxcqhGiMV
78fJnSMY
Name: META-INF/androidx.biometric_biometric.version
SHA-384-Digest: w9IE1UH/gUEbdNJkdvd4BXL4yAaceGr8xqlagTmnOQfkG69IuErYq8ZN
m27DHrb4
Name: res/color/mtrl_fab_icon_text_color_selector.xml
SHA-384-Digest: Xb4v1VQLs3f9oVcbKYfer2+sadg76KwCbYziyRc7L88xvO97RXSCcbGH
Sm/+7nTe
Name: res/color/m3_button_foreground_color_selector.xml
SHA-384-Digest: XcONovWw2P9NaPXhEAOBQEo4KP+jlpzrCGNPDCgOyh8bU170qbotOYkY
z5xw/pNd
Name: res/A1.xml
SHA-384-Digest: okhMO0U+rqRyy1HaPSHeQMistmnaNESMAlmAfg8Ro4uSLOmTJGh2wJkr
RuppJfr0
Name: res/_P.png
SHA-384-Digest: 3sZjTZbMqwMW8DGZnJqBw3pAJ7iXgffNJSDygftmHR7vjZUdbg8IMLXL
BONZMpQi
Name: res/7R.xml
SHA-384-Digest: p78QFhNS7IWdXjymJUOcCiNK3fc8qSR/0WaTaJtAepP8oz8ll0UY2Bln
lbVubhte
Name: res/Eq.xml
SHA-384-Digest: 1Qr2Ktq+dzGJa62sduaAWUSxHTC0Mp2eSxxq4PwnxiIZVjypWSpQO3K1
hLUH4vRV
Name: res/FR.xml
SHA-384-Digest: QDDnkFh8HeR76j0TOnGMC+V7/Vt5Wv1m5CTKY936pDcUtrpr3uC0NJSk
yIlRkmAf
Name: res/XK.xml
SHA-384-Digest: rUSET19NXHVoYfboULO7lXEjQ5fLBnZIze5Y08zVvlhnMOmn0/PC3Zuq
MWpya8TT
Name: res/tZ.9.png
SHA-384-Digest: hN+E6rB+RDb6ft5PXTr+bZVVk8wpGXaHZYeejllJ+sN7iv6eTwuT5ZGf
52pd500J
Name: res/7_.9.png
SHA-384-Digest: +SloTJHYf0JnLzQg9kM0Jto9gYgmWgaVi0jIh5kFvmcil0eNFReizG8Y
08okamCt
Name: res/br.xml
SHA-384-Digest: YCE/VtqlVjgGUaGKlABBVm5M/EVzuF+B15ncdlRHww/0rvyMDzYVDX89
uzZh5WCn
Name: res/gK.9.png
SHA-384-Digest: aicBCHn1XDdQfK4J0MyguK32p7rL2+/YxrmifjY5PMKuQgi3bj1iAWcK
htIBLpwy
Name: res/color/m3_button_background_color_selector.xml
SHA-384-Digest: Ry1ojnu9ZPAVI6+v4gUBaFKxIpORl3V2AlXXfMmBLNAB8tx3knPSi7xG
8TFPsHhd
Name: res/eP.xml
SHA-384-Digest: 5laWod/xId3GuEgrzMVOGEJWAhychY01s3aHTxyGnD6Idyr89JbCLWNP
iLXgA3dq
Name: res/_i.xml
SHA-384-Digest: k9Q7nPSdEdHo/jtnXBJjOui1BGFkGOnFeWwzf4tRcuXY69UixciZfjCF
P1yBKVkw
Name: res/9O.xml
SHA-384-Digest: nfPn5jjAkqcCqGdsDJ9DDD8msODi+fBPIh39COKszL4cp6Vr/ufhAWpj
xtsajJdY
Name: res/Ud.png
SHA-384-Digest: +T040gguG79bKdExZyF1SMMeNi60c7shXHfpwcgfU8S7COJP5QKKnDQS
sj4T2IYF
Name: res/Ck.png
SHA-384-Digest: aO68KUChTAZdPyPaQ5+N1n2dKj106a3WJXg0OpJgv9JgKiCOBBONUlgh
7KugHcnD
Name: res/5e.xml
SHA-384-Digest: bo1qOTMiGtqRrXQ9TtE7IIk1brRLwI5mqqFNm2oB6ZRSU+ECYdlPoFBw
otTrX4/a
Name: res/o1.png
SHA-384-Digest: bpcATAC/SqWUJ69a+pD9R808lg1WPPDjpMgWLjQ90dHfG5N0tTZZf23M
8BAefGcb
Name: res/rE.xml
SHA-384-Digest: CLGmIJuBVWqwqRkxeGVvnZUbU3MmD3RGT3RQMeM6kfNLmfDLPOHta45U
xVWM6UGn
Name: assets/shaders/fragment_shader_copy_es2.glsl
SHA-384-Digest: 3ay2yrOwYwQ5GeKsQzqyu0iIvq3MmQccLut079GQZWOr2soSX2mX2jtU
yQ6pH1Ze
Name: org/eclipse/jetty/server/jmx/NCSARequestLog-mbean.properties
SHA-384-Digest: DLp1YE6FpvrNyrjCYo54bdVcAlauzl68zvxKCnHISlXKxl/zqEcrib5N
zws/qsCv
Name: res/eR.png
SHA-384-Digest: dR3U1E4cjbkVqeL199quLcpibr00qU0TNZbGH18dLC63OsWRZkmKjW56
WSa+dIu6
Name: res/3u.9.png
SHA-384-Digest: 5+OW0oVUijxYNH87RRPJm+WxschOgTkMuKWKoSWrd0fPqmeAkSLWUCuk
4JxGCXfV
Name: res/ya.xml
SHA-384-Digest: kuqc3W+bteryOxjPXQuLlxOA0HCywrLJCnaV5IbXzLLc0xHARDFQrR3H
g9UAfMaD
Name: res/hN.png
SHA-384-Digest: +r+ebk29mL915VybwgYx+FuT5zk1fJ4a/9No2Za9Y9E3X9AfKXix6Dap
LjotAoWs
Name: res/Zd.xml
SHA-384-Digest: sU2o43P2OF65jtPRDU+yWhhPPfLM2L/fj/+MuoMF02PNdhnqJWrHTLqr
R5WfFHSM
Name: META-INF/androidx.lifecycle_lifecycle-livedata-core.version
SHA-384-Digest: XOqA/6uD+38Okz+pytXiIKfRhrbLZcfmoIOiYR0xlOXNPpABG8PzPkwA
9k3ohMWd
Name: res/ev.9.png
SHA-384-Digest: uaHN8UCRxLRcoW7T9ljRFkSd7AdMDHuNWsCKH/zvk5tkAdpK99gD7zky
mAgerRjl
Name: res/Qk.png
SHA-384-Digest: 2Q0JXf+l6TNoII8xKCosP326VwkUA9cE5DlA6Xgdws1PrSvFkOrrB7h6
Uid8gzu8
Name: res/RL.png
SHA-384-Digest: SZK625JCkzpT9RU7ruADcGDGyrK0SXlFXDVbpY8UWWxEHRk3wZScWCqg
24XVRWWo
Name: res/S-.png
SHA-384-Digest: 4v3nIarNDUEcqhbNCz7kbDpF0bQk4rn71P+KO/WHT11ykj6omL76ozlr
YgXMUWy/
Name: res/20.xml
SHA-384-Digest: iChgeT74FxRjgZusZQkSlfql/o0A0sN721qkLKme5bNBL1nczOUaSxkU
EHljRwoz
Name: res/gv.xml
SHA-384-Digest: GWeyxWJIT68+HmJdA/zVZ5hTxq4SuKEhBnzu59cgMwQfYxpPHVDpF9Xp
QZ1/sEiV
Name: res/ZW.xml
SHA-384-Digest: VVZ3IOqrRKFCjD1ueBQsZHX7G8Xvscr5OuCzQbdfWaGRN03oN6qdh7Uy
5Y7bYdf5
Name: res/tU.9.png
SHA-384-Digest: ZugrMXo+1f3eeOOTuIWJIzn4EN38003eJHlqZ+NrerNV5PzGLsb1j0G1
/qYK9fKY
Name: org/eclipse/jetty/http/encoding.properties
SHA-384-Digest: HE7HiEkhWfj8bm5F13m/6iL1hSgk2qkvGL0VWES+HRLptKoCdgz9V5Zg
kZevqz5o
Name: res/Sc.xml
SHA-384-Digest: pcCQMUbtzJXD0dK/82TKvxncsovQJ2lGyQ4xwEDfHeJv/qo7yED08kmt
zfRsupDS
Name: res/0S.xml
SHA-384-Digest: WytAbSAiiv9QqkQxOwCkuAqyMnzcUig5Al59BVCq2tyxouzMKIojYuMS
NEMCsAzM
Name: res/color/mtrl_navigation_item_text_color.xml
SHA-384-Digest: ceU58PHHS47LYAjLBqlYJFqv/wAbFCkRKUTbATjMpt+ZSd9gCq8+zof8
030WUmZb
Name: res/2j.xml
SHA-384-Digest: TGNZ7cGPeGRQNi1NT2OnkradoaGsaOOPrElVDSzms1BsX8ODJ5bIkD2P
GYFC0W4z
Name: res/sA.xml
SHA-384-Digest: ZxDU7uzS0FPVKVlu6smjLYe2X3aQYVXvh2lhlBiV8IXszmEC7sXKLdfK
2pCKanAD
Name: res/color/m3_timepicker_button_background_color.xml
SHA-384-Digest: n0mbHRW840O59Dys+KXVH2pyHrsywCrQ3/emSRBmCSuoSHv//2MfmqAO
I1caZ+h8
Name: res/9b.png
SHA-384-Digest: s/RfDbD42++z8qZNgNe+35uvxn5riTSKB66L+bJqnOkhAs36eu3xIRCu
HzdU2kx1
Name: res/nn.png
SHA-384-Digest: W0VbBUe+LN9niP+DjJil7jPG+zXyjPYTAy+L6jlYz4yx/lrEwqRFGtL5
r+pPTfRj
Name: res/RH.xml
SHA-384-Digest: ZeEwVkZ80687gCLEEJhBRb6EJy14Xtmz2YYKePP/pIj/CpkoC91iKxL4
5NvP9nqz
Name: res/GQ.xml
SHA-384-Digest: Fu8qJRBVS7j11Nxwyd7URJCNeltJ1thOKJ2tMs6JSS1uYHA467l/tn/w
sRfPildE
Name: res/N01.xml
SHA-384-Digest: oAKi2Xwr8w4j0+db46/Mq3DUMfMFE4Qriw9oR87J1KVHfx5/xE5UHGql
2YTOTd3u
Name: res/kD.xml
SHA-384-Digest: Croy9LoPhtRfnJCZAJXbKjary5MSz0/i2VtR5OPwd04WBEE2X7C0yI9z
B56s4fJK
Name: res/bT.xml
SHA-384-Digest: rUPaPDPChCEZBoHIHPMK8rLJNHD7SLHpMDCUoej8vCR0YomI4qB9rsfh
xuvvNWK6
Name: res/c5.xml
SHA-384-Digest: HuWBFlf876klFny//Rgc7EfL331YgPBbLivfTPnqDyLgbfZM3X/1P+WG
/IEVoFSU
Name: META-INF/androidx.legacy_legacy-support-core-utils.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/t3.xml
SHA-384-Digest: v+9LUsJHm50msPvunrrA8K7C84XJa9ZExukox0tCto5/FD3UYtrMLMhs
O9kx6ROZ
Name: res/Bi.xml
SHA-384-Digest: /68Fgmx+X/PDMB7DF3f4Nqluepzdn+1h6RGPktCz32hP5inviylaVjT5
ulerrpqE
Name: res/k_.xml
SHA-384-Digest: nH/aUwhC+D7bh4XEuzCjAvuE/IC7gYtt1spuN26BzGcQoUQ45yV+agLq
nVcf8Q7I
Name: res/color/m3_text_button_foreground_color_selector.xml
SHA-384-Digest: YtbCcmCemZEn6j0qAHyvnHX6RqFQ8VUVjPBy//FE57bXBpXUZTDTCkCc
BfETU3w8
Name: res/5v.png
SHA-384-Digest: 6/b1pOnM5TsmZQ1MBcorb1VyHq/l8q23mym5thNUmkHKMNpYgEVvDwpc
hKLG6mSB
Name: res/sn.xml
SHA-384-Digest: +avoxOFPBghiXTfWJx/nJ9/6lN5slI7pkZbH5Tb5DAx3WjnfCR1tunlK
+LGU9KwB
Name: res/u0.xml
SHA-384-Digest: vpWKe4xkpFHO9f9yfQ3ec4+qXVd3FCOlQ+OCceW5Vf5Og3c9gafZ6cCF
H2AR5TIO
Name: res/tS.png
SHA-384-Digest: x4dr8WLLRU1+tOVdpCRSp7arLNzMTrDJt8gY2N4SN1oBuYi6e4Qh/J55
O5W5Zfce
Name: assets/js/lib/cheerio.min.js
SHA-384-Digest: 6YP6D+mRUl84EmklTZYVCeXpTSqATW7K7E9rv9nRLAXHPTgqkNwPbWOg
Z6kkPZYo
Name: res/Wp.png
SHA-384-Digest: 3Atlil2rulzSZcAkI9XPfy+RoxX9R22e0cwhw5RkhUsKR6oTG9a2ArJB
OjsAJ2uP
Name: res/color-v23/abc_tint_spinner.xml
SHA-384-Digest: 1LKEAPN57/exQ3tqYm/anMab6GIjX5YpsYzryjZwNQDIBr0NdspSg5ct
UKDtrYoG
Name: org/eclipse/jetty/servlet/jmx/FilterMapping-mbean.properties
SHA-384-Digest: GU+pmTaTlhRA3B6yotzZHKVmYWgXhJkqE11z1yxV9Q3hiZy55Hfcd0+a
Smicn+VS
Name: res/2x.xml
SHA-384-Digest: VvDMk5id0/dKLkup9YdEflCqxea+AVWzoF3BzbVfhaFY1NR6TILTa8JQ
pQ8xJf7Q
Name: res/dC.xml
SHA-384-Digest: E5n0o20/vzRKhKZy1VvWiiFBpQftV9oc87S7N882Y3M4yBnDOs4+28g0
ddvIBp0d
Name: res/color/abc_background_cache_hint_selector_material_dark.xml
SHA-384-Digest: P4j8GHPyVOPgwaUoduJDb0jGuMmZCloYgPDOe5Nqgldjrri+hW59Pyhg
sWGQg3vE
Name: res/Fg2.xml
SHA-384-Digest: 2n1/PxUa9FNAzF/725PwZaCorh4OdjH/Oij2x3BU1ML4Pifvf8UCQvoF
49bO1gVz
Name: res/W5.png
SHA-384-Digest: j7KzS1tdRqP5iiOnZUdEydx6ER97Rn7+H5ibVq56ixT11oxtRhIQEALd
9MY3U3UD
Name: res/Ce.xml
SHA-384-Digest: JfnyeE2EhoGtx/dDwmHB+TNnNX6ne8SteliSYA9b5nmwZFx1onnqgcBa
zdwSSW0k
Name: assets/js/lib/spider.js
SHA-384-Digest: ilzMS93WLHNL8cv9xG9gGFgkc/AJnWGYVDGr5hF+MMs3a4gCtzeBpSTr
TN0GrE43
Name: res/1e.9.png
SHA-384-Digest: IEmjoduErLEyLx6LI0HYddYJXVVSlmgBT6ToKFV54sGoaml+IGCWgERa
PKFZB8X/
Name: res/wu.xml
SHA-384-Digest: Z8T9qW6mvto0O7/Jp/ci1eQtbz7xPcHmtCi5/BV/2GYxgOfdPwScH0iw
7xk7GPEC
Name: classes6.dex
SHA-384-Digest: Uh73FVrm9LkSU01uCSicwnWkq0DawFzZlRfGerckI1L9v10VYB+9Y9kM
0K/77Gvr
Name: org/seamless/swing/logging/img/pause.png
SHA-384-Digest: 1Ykw2RaP5yvnLRawyW11o3Sy5aVcOY1jKcrId3jnWEDTIcZTLjAPGE1j
C6VFUtxO
Name: res/color/material_on_primary_emphasis_high_type.xml
SHA-384-Digest: y8O9iKZ70x0eBEKFOAMheOY2LiTZluvoCuWaImI1LJecQeF/5gHL0Gpl
FZlb2J05
Name: res/color/material_timepicker_clock_text_color.xml
SHA-384-Digest: +pwvszGqU0oHI8VvF/opBAFPn9qud8ZhGrX4hrbvPkpVWcKhljEA1X3z
iUbMMYmE
Name: res/1d.png
SHA-384-Digest: mu0ZrlpC8hDg8vJ49eKUnBrKsV9iicWEhiu6eVksw0AzCOdwjuIJ4m5T
syBX0rjf
Name: res/color/m3_navigation_rail_ripple_color_selector.xml
SHA-384-Digest: 9fRCKRuk4sDb/8v4iNNSG8ai5d3EI1g96Tn709nYx4RuS0kNcomty1Md
HUb+kW1B
Name: res/Lp.xml
SHA-384-Digest: ZrOMbbtAkEuz6ws+LvaTxLb1WNW4cmbis9zkMrL6W5/uMHQeLnYVgACi
iC/cfMbp
Name: res/IN.xml
SHA-384-Digest: coP95n5l3l2s67hpltbRfxiogRXzKdJQbyN/ME4C0nJ8l7xL0NKtCCTC
emtJvNBe
Name: res/iI.xml
SHA-384-Digest: wDJy/YxecuuznsKUszQE6qNMldfwTBz7FHHRHrKJnTV6/u/HGNKd75d9
gtRiK7QP
Name: res/n-.xml
SHA-384-Digest: tNBy/rZn155BQydH0e8RjSy99ds3Xi9iRLO8CgOikVVz0Te1rTmPGDWU
0hYeYI18
Name: org/seamless/swing/logging/img/removetext.png
SHA-384-Digest: 2DQtIRBR48b/g2oTv6uILo53CTj2t/SRblCvN2dh2rk+pcZCYeIloIBB
cbPSwMlY
Name: res/bt.xml
SHA-384-Digest: Dk/ghmK56Q6qbm7iUmw90sbWXX+mhtjF/84p+18MmaJ0MT/wkoSjJc5p
0b5TUbui
Name: META-INF/androidx.print_print.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: org/bouncycastle/pqc/crypto/picnic/lowmcL3.bin.properties
SHA-384-Digest: 4mpCpviRAOoLhhgdEDDWo1A2P+U7ZNBSMqBYljLS/4QPi88nGWONxQTS
aqeFIpCs
Name: res/mA.xml
SHA-384-Digest: i9b+lAuRGgyPMLDlmJoawuZsGrlBhyYFnpO+H69kwWSSjaWXCLKyw052
DR7AMDE8
Name: res/fO.png
SHA-384-Digest: 3onyFSJ9cSNILnoc01eDgcZSK1gV1GNduUiF41sxO1yGPXWn70r6lWBM
Eeh85t+l
Name: res/hl.png
SHA-384-Digest: A49PPC6xh813FZQpKxFzsM0VQDTvsLEx/r4m3f8a/ybvxVnbnzvuaCGA
fRoNxpav
Name: res/sl.xml
SHA-384-Digest: AWwKQiHa+SVzRybXKPfvu6MEgMljNlsnwHRAmAWuPu48U5EXO2uoIg9N
OMfx5zQj
Name: assets/libmitv.so
SHA-384-Digest: A05bvIn+yv/dIjXvWBs9XYCPMeDkQwxU/NmkOyieDsCCSRdVyTADJuIH
XiYx338P
Name: res/Lt1.xml
SHA-384-Digest: sU2o43P2OF65jtPRDU+yWhhPPfLM2L/fj/+MuoMF02PNdhnqJWrHTLqr
R5WfFHSM
Name: res/MU1.xml
SHA-384-Digest: W+2g1Uh2zS1qYYsWhbPevI4jMiYdelGZgQ2Ccg63KTp6BsY0ZnDLY5eS
9uaD8BGk
Name: res/pk.png
SHA-384-Digest: 9bHxMuASK/WODGdlWo5/6vL9GZQgrF1A3ysiIhsVPCrOYNRq6oEbHz/Z
vapiU+5Q
Name: res/8p.xml
SHA-384-Digest: 74ZcazQd+5Z2YjhPvb2i79NfJ0XSoHqdmI6KrbhDfOsvlOkF2ZXfCrge
02aQxkRN
Name: res/kB.xml
SHA-384-Digest: cV7tBB0Lq3RHYpPr55hTgh84ww09MjcNkkCgabztCvX1NceLc/jmjKw8
YY4HN27E
Name: res/Nk.9.png
SHA-384-Digest: dHZvW/9I0/OlMhq2DBEwnHWJ2hSZyIeIOttamFdPt2nRmS3dGwxO8gVj
Bjq/0U+k
Name: res/color/mtrl_error.xml
SHA-384-Digest: xlJZe4bfHpQ2CtQXhSEswsgVzn8ATw7FDnEv6vpe88WqBQVF+1/tqGbV
sRKv8UoL
Name: res/eC.png
SHA-384-Digest: 2QYl2xDHzCd5v8MNcU2PeD7iDZqoq3hGLiU5cnUO64GoeROG522ewIhR
am5gdKAR
Name: lib/arm64-v8a/libquickjs-android-wrapper.so
SHA-384-Digest: s8eDOHARHWtE0tQJIgFWqgy2WlwsJDmnRZwYTP4PR8AhxLCait659Q3p
hvQgvauw
Name: META-INF/androidx.core_core-ktx.version
SHA-384-Digest: rhLazMexU+PpVIUOOPSPBvmtfstRSlMkT38j5NLxiqmKwgYkKSNIitqq
I28eUHut
Name: res/color/m3_button_ripple_color_selector.xml
SHA-384-Digest: TOcVEP2bRG/ECOSWdZopFTfkCPbmOOXwSP7VNBB08l2zFGSNzpAt11fi
DM+D6jLE
Name: res/color/m3_text_button_background_color_selector.xml
SHA-384-Digest: NkfbVCmYx+NKEXElAXPUl5bU2jmzlC0NdRtzh6CmKsPJGtuZwFWAespK
Dxuuormg
Name: res/0k1.xml
SHA-384-Digest: m+Gk3os5PfvF5OfPHZV3I10HQXvjXeBdFKPioGY3K7TtofyD4t+vHaFJ
EUF7D0Oc
Name: res/bi.png
SHA-384-Digest: MmaFD17dtpaPXkJT/pCsDcJsK/FN0qwoenyTImnqk6/R6oa3AhOF2zaA
5WEf5lwH
Name: res/color/mtrl_popupmenu_overlay_color.xml
SHA-384-Digest: pbwmnjkSBqXF6plQnu98scPzxA+TSDYhGtaJLz0qaCAriwXu5A6mC+qA
WgvoQbSZ
Name: res/color/mtrl_tabs_icon_color_selector.xml
SHA-384-Digest: XLVU1pEnhqbl9UBicQOTDScAwgUIeSIMs/adFD14D+hl79rh/S8cNsB9
A1shw8WG
Name: res/zb.xml
SHA-384-Digest: CsbqW7jx1pJpL/jOqI0n9pWAosGzzycICMe6MehhyPj5jJrms2XMF4tZ
lsn0X6CK
Name: res/Dq.webp
SHA-384-Digest: L/6ms+/E+vElPj29qtEPPAlP/Hn6Mcu5ReChZCgYPY6UwU/Fsefcmawd
M0WqM8zr
Name: res/Jw.xml
SHA-384-Digest: Ti4PC07uwGZHL5CgxvEREhwtBr0kLqQi2h3IF0BgtsLoSwZ9I614opdk
k3Q+y6SF
Name: res/color/m3_checkbox_button_tint.xml
SHA-384-Digest: c5xOkSOoJMRw2flDyC29Y5O0No70BlpFY7zt3itcqibbEWdqagOVYlUU
blqfmQG5
Name: res/color/material_slider_inactive_tick_marks_color.xml
SHA-384-Digest: D59uuAlKV3/Q5pmFXYfpC4ZqM85bGzUtADDxzdR/hDrDVrD81IzYSqnX
aWKX0QI3
Name: res/color/abc_tint_edittext.xml
SHA-384-Digest: Q19VCvM/4a2NLSpHg3JUBRGiEdg8yfplpHiHWrpNZsV9duEGRr7NcqCz
+ZGMaQoK
Name: lib/arm64-v8a/libswresample.so
SHA-384-Digest: 1opA4ofTJKQDE20jBLim4gsAjT8uu19Tdmjmn/Tf5jEu5Xdf36plu0qC
0AS9/L+k
Name: res/io.9.png
SHA-384-Digest: Hu4PjavXIUPCIQ7KeHnKJQRN0wK56uNuMyb+R8nekaYUbjthQgZGMGY6
IJq8xWL7
Name: res/3h.xml
SHA-384-Digest: NxJVm2MBcJfVQjTeacvZIFFOWvkvCRuhSBYdXkVK82nhNUKYWYUi1wEv
7fIA6bYb
Name: res/4I.xml
SHA-384-Digest: 0erq4wpxCjkZIJzrkPgUNICvHwhX2oAPqcKXomwl1ZyLxxiV5sfElV9M
z33mPkA+
Name: res/yF.png
SHA-384-Digest: Kp08K1zQjKVf6DvLnrV6AfxH1REmHSQiezWaRrHWfzYvSjgdi2EaQhR5
4TCfKR3O
Name: res/sV.png
SHA-384-Digest: 6kkZDLlrazbXgz8E8irwfCBJ+wkj8vBLD/K0Fx3Fj/xQlXDoaanE+D69
fG1wP/MJ
Name: res/kn.xml
SHA-384-Digest: WLOSqNl6XrUidLnmgm03CRVgb7HfZmsiHkzjaF++zKhaNEXWbruprAyK
u5DgWf/h
Name: res/color/mtrl_indicator_text_color.xml
SHA-384-Digest: uw2mPuTdXo4+U+rcFCfQwi3681SW5BEY1rlEXkAdXbdqBssZpGVaq3pE
w+ciUfGY
Name: res/-N.png
SHA-384-Digest: OocfZHgarJAG9ZYj8RftjtCafKYDgDs6lFhFlEFH3YwVxZCNuHdbaSCz
c3laFHJv
Name: res/5v1.png
SHA-384-Digest: uWdHKPEyjGMV2lURz9QPadtbarOJ6Te9dxlUDebj03DJ/jwrrfDZA1lD
yOfNBQps
Name: org/fourthline/cling/support/contentdirectory/descriptor/dc-elemen
ts-1.1.xsd
SHA-384-Digest: rjJl2Q6Ol8uV7EyRk8EyjIDhvPgX3kyTYQHxwhJTXEoHA6/eaZnROTBt
/h59SyTT
Name: res/mc.png
SHA-384-Digest: WV+MmMreZY7YSsipOlvMeTzBRWLhy47E3qxuHCBL0Zt9mOA5paVAFffZ
bRKAQW6B
Name: res/y9.xml
SHA-384-Digest: 0hldjDuXbMsMvi5Ito3jKM0eDW+ZVc6Nw7zo4a9dPVhpfX5LSDe3QvTe
Kab6oyPO
Name: res/Ju.xml
SHA-384-Digest: Te/WmtYz5ZEwXxvhuctotHOg9SXUSql89C9jJg6hzso1cB0BXNkaipfw
AYR5Foyt
Name: res/gZ.9.png
SHA-384-Digest: 2q1HPd/sYkP84VWeiliA8Sfaa1bfpSUPVGTY1kUxzAishcYlI4LFSCOC
5EQvAwp3
Name: res/7G.xml
SHA-384-Digest: OrkPSzMATBQd0yeQ8YjfS12NK0+hW1tsUOEdxD3EV9vG6ampsUMaCbm3
QsBn0/XF
Name: res/Fr.xml
SHA-384-Digest: 44FpcCS2Q5LjlRcsV+zBXHQ9zUN3xefLPY4/umgCpG54X9fHH71lTCrW
TsvbQDMo
Name: res/H4.xml
SHA-384-Digest: FgQR/3yP9SIH88ud47+1rwj1Xb8vnRdNO6lfCutNTBiCR8YZ9uzCtW3t
HVtbkNH6
Name: res/Lf.xml
SHA-384-Digest: h1xqqTXym4B+EVkQnfEtzL3a5s2w9wDLjSG2Y6szBUjypZY3DhxGZ5rC
VkG305Oi
Name: org/seamless/swing/logging/img/debug.png
SHA-384-Digest: QRQPu0RlvbFi4vln6Kxm96u8pY8yh4zerHs8p/UcucvwvPK89xQOoz1R
CfF93w3G
Name: res/UH.png
SHA-384-Digest: A6wxvMwcOYTzy+fzjPWfCl1YtPO7TIMk1F6G43AUw2dcdl0wjFcmglKb
PhF/nGt9
Name: META-INF/androidx.customview_customview-poolingcontainer.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/4x.xml
SHA-384-Digest: hZaJp7KRJQeDH0IlPsnym0TzAYWLwFSSS2AJz0GuqitkeBUvjNdEh/3G
jJFD+i38
Name: res/5Y.xml
SHA-384-Digest: HwAOHwKl/A2Rh8dx8dVPZNKUaI1pJgzqDXRa7Bn9G0AJNzWYqh6q/cLA
ilJtb4eI
Name: res/xa.xml
SHA-384-Digest: l4JE9QWHG9QLhX/VEUUH0tDl6LYILisVGM2UClhFnLM4L9b2lO4/S/I9
P2ZgAv6v
Name: res/yj.webp
SHA-384-Digest: 49E9/fTMbeg0OrUIEjXQRUVaToO2jT8OOqLH06RusPxwq6C+BzsVtBpl
kUTLz4S2
Name: META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version
SHA-384-Digest: QBIX4+pun5+j2rsbsQYH71JP/JTfAlW+GglRW4D6q3yzlRdP67BucXlu
BCjmdTXz
Name: res/9m.xml
SHA-384-Digest: C0MBAPHSPQlCSj3rfnNMNSbL7MzTGfRzGH1CEmP43uyPN/YWSBl09yxj
bSskJMmX
Name: org/eclipse/jetty/servlet/jmx/ServletContextHandler-mbean.properti
es
SHA-384-Digest: ORfST6zy7cL4D1WMSboBBB8lCTy3qfRHe9VODvd44Y0mp7oyuAtG33rf
EZB9JjGV
Name: res/Iy.xml
SHA-384-Digest: Qym4qMpcnX0yAUI3u0b4WwVkXr4jpUDr+z2ixZhjV8AAzXdashsBf6fQ
ZPg+NGgA
Name: res/gt.xml
SHA-384-Digest: g5nnTaKRQlcAjOLEn0aBbGMLIcj+QqEANG+A2cnJ9NAC2PXmQSXlvKX/
X3Hx3xoZ
Name: assets/shaders/fragment_shader_lut_es2.glsl
SHA-384-Digest: cfsP9Tw9Mj7V35nVYRgr3nDSDehvs0hojTbfZO4WKmrN8+ZMfm+Bkhfu
C7+6OLIy
Name: res/7V.png
SHA-384-Digest: V6nscHa0+d0uudqsPbvUMuPchE7C2YKZMKAxbUS6y4lZXxIhMCUp5ZiT
iM5C8T4C
Name: res/um.xml
SHA-384-Digest: un1zVa1WFEjQePPp9VamlPKKBD3cBcM7lM51qQ38qFvELUAko/OGuNap
7+kLsq3N
Name: res/NN2.xml
SHA-384-Digest: IGPpL6P7yHcIJ4QxdU2DUevtUPu8vKcDk6SPh73R0ZcZp/kOw91eMD6d
sVmdvI7U
Name: res/S8.xml
SHA-384-Digest: tv6Dv8vsHdQnGxH5UyhQqabyYSyGdMlZWIuaUVG/kp2T+1J7L4hk4+18
h4lt8xTH
Name: res/0c.9.png
SHA-384-Digest: qeXDnYVw8AcEBoW513qFxxPpzcyUe2eu5LTwwrfLpFdEiqf+gkcOxYyC
y65JD2EI
Name: res/color/abc_secondary_text_material_light.xml
SHA-384-Digest: QohKa9qDD5mxD4vEjIrKgnXvl8F2NXi1OfJMwUmMASGcdkgrW2czPmKJ
K22elw4h
Name: res/color/switch_thumb_material_light.xml
SHA-384-Digest: bdVsg9yVcNtoan73F3Ke8E+Cjt5PLsP+mcGqllNByjHL4eStUG593i07
aPU2rxqS
Name: META-INF/androidx.arch.core_core-runtime.version
SHA-384-Digest: DjY0iMTq31Ov3mFfL8psdEY0t0ga6uGVYaIJHakMF7ruCcUn7bUi20jv
Jlg1NMUp
Name: META-INF/androidx.emoji2_emoji2.version
SHA-384-Digest: dtT+kMaBn7mC0I5Zw2DO5bf//DqPWE7jsnjxasKo+dXF1wFxba3xTVXy
iU0DEX70
Name: res/nu.xml
SHA-384-Digest: OzMr9mKkS/eqsEo076nIj6jTpXoQ53CVZT0MT1dbT8vdohJ+qXcqGGWC
X9XYHgfN
Name: res/color-v23/abc_tint_seek_thumb.xml
SHA-384-Digest: FCldXp4OIiBhGxmarKKko8+efFjdLIL14CqSur8SyyLuQB3CdtwndQPK
FuqPaCR9
Name: META-INF/androidx.lifecycle_lifecycle-runtime-ktx.version
SHA-384-Digest: VS0EgJ1djxb2TyJBiHIGNFXRHoFdCKQ1d/O4Rgv0dM5cg7MNqDNM01oG
pdFvKqLN
Name: res/50.png
SHA-384-Digest: XRVeTLd5U97xSsTh2cDg6dPNmqUfH8cOORzdKQ89+GdAGzKe+/YeU917
jtTAGyiZ
Name: res/nl.xml
SHA-384-Digest: OPvuL5kH/nJgq5IUC/BeabfEPBZs0rtV+lsWdXYIc3ZyK1r54h2e+2aH
h89InU/G
Name: XPP3_1.1.3.3_VERSION
SHA-384-Digest: OLBgp1GsljhM2TJ+sbHjaiH9txEUvgdDTAzHv2P24donTt6/529l+9Ua
0vFImLlb
Name: res/t1.xml
SHA-384-Digest: cKj1KIeSr/7jNMHemIfDeCoS3yy6VcJezQotuODu9RBqGXyWJ/4tczKP
CkE9ltLH
Name: res/color-v23/abc_tint_edittext.xml
SHA-384-Digest: 1LKEAPN57/exQ3tqYm/anMab6GIjX5YpsYzryjZwNQDIBr0NdspSg5ct
UKDtrYoG
Name: res/Ei.png
SHA-384-Digest: bIEIRorq52Lg8UlgcG1IGymf9OEV/xWfeFoyZkR2TTHL5fjT7NyVb9uS
wOkrAjpw
Name: res/color/m3_slider_inactive_track_color.xml
SHA-384-Digest: SKDJZrRRI89mJFEMb3bVs0r7D7csM4FC7xvYtsEruxVXAH2J21rYxZ/o
olOw5aDV
Name: res/ea.xml
SHA-384-Digest: 9Jb3pROMEN+d1SHKD7BQfl2vTUHVNwLsL0AxrpbSaPI5NIwEYic1fYaQ
pYdFEBtv
Name: res/3W.xml
SHA-384-Digest: OChVqCXBh9lszIRngFSTms3fIzkvP+QtZFGh6J8W6sYgVkaouqP7fNZ3
Lg7gKq3e
Name: res/RJ.png
SHA-384-Digest: mG6LFePPcDLQN32Du+Xu9/tkD0X4xrFBKNwK6uZEaN7/uc89LTj/4vP+
A7mIl7eU
Name: res/NG.png
SHA-384-Digest: u9Ozg/g2iFat3y/oi3JPUx+OXCMruxh9kBTSgpoFNVDDpKYBqG7Lk/DX
DnTYmxtf
Name: res/ej.xml
SHA-384-Digest: k4fGpPaWRISUUQAc9VIxAyZJfiCinZk56PJQhMnVsHN0dg/ufyyP7U/z
3MEmFmwJ
Name: res/jS.9.png
SHA-384-Digest: mdmLt8qTppFPwsF8MeQVSCWQEcroFxczi8gS68qMJ0Nk/TAtQdsQKHMb
NtUIwwPW
Name: res/6Q.xml
SHA-384-Digest: bReVkup7pwfShwmKNG/0KnIN9rp1xGqNxYSHB8ldIM/M+VBBspeh0699
aFrNKlc0
Name: res/r2.xml
SHA-384-Digest: joksTGeKg3WaoxwZRKOU0Igo/+46gAaSqml9KAQ9JZ3S9b1PA47+e8V4
2AIuEVEa
Name: res/OD.xml
SHA-384-Digest: B9coxgbZ+YqXuALXblRJ6lfUgyUhUq25mpF1zU691zQhHcVy+gZhAVVU
Oen1RHlN
Name: res/am.png
SHA-384-Digest: Doe8b+SA8D2iXjde7oxdAxuHEqp4LodsQNWLqbFpgGk8Le+s5MPE9FGS
RfngJc6U
Name: res/yW.xml
SHA-384-Digest: rkEWDARRtpBGvwnT8rxnlmvSN/qZYptahm8uweURXiY0woorLGiI7wuf
8dfX0xi2
Name: org/eclipse/jetty/server/jmx/Server-mbean.properties
SHA-384-Digest: qOIVvjj8rUDKzAKPh+aPH0a0OvVNr95R4szW8ZBg584sTEgosV+1Pe8u
K+X4m812
Name: res/1I.9.png
SHA-384-Digest: kcBeUvFFhja7k53x3pPHWezTpNClTqp+mGJwp4FbAxFuzaAfKqmcEv1k
3Rf9R7Ur
Name: res/PX.xml
SHA-384-Digest: U4x8Yi9NEE10Svx2gSaz9ZNaveMFRO1YEy3lysHBfwop80wlE5icqd2P
L/A2cp71
Name: res/color/design_error.xml
SHA-384-Digest: hCu5j123WlGBCjtDy855XiRO8VlkzzPVw7Kfsy+6zWKEZRMwrSZjsciN
brWAoMkD
Name: res/nW.xml
SHA-384-Digest: N3Crqe2NgfEvPpQvxZtP6nEApOzU0HyVxefKdFCYPnAJO5uuD4qTgO9q
dpFQmoe9
Name: res/I3.xml
SHA-384-Digest: mh9n1+Yhn+OQLAF17zYUvcUzPDwZU/rhebjVdR/wFJjSJTFYBfkE44r3
kjAJdm3e
Name: res/Y3.webp
SHA-384-Digest: mUNq5zwbQzqFZIe7NF9KkLrWKo6ctDB2NXNmmJ+L/mqow0kcCfV2AgnQ
l2wNOnsv
Name: classes4.dex
SHA-384-Digest: KfIQBiWIoOkHwao5xmuIh/5ucyFXHGqw2bfVAQbEPU37acDX5hisfkj8
ojrQ/U5/
Name: res/z-.png
SHA-384-Digest: nvbPZjj3pQdmNdFkYrnVdGjtMAm33fn1RLNjkQBjZV7+j8TGwqP5pcSt
eBg9T6LI
Name: org/eclipse/jetty/servlet/jmx/ServletMapping-mbean.properties
SHA-384-Digest: Kphhz1j59fWDy4DQrGCZo3mPik5SdvGMBzYjTKWHVNetyDhZespZeSCf
xFye9Nfl
Name: res/BG.9.png
SHA-384-Digest: K5CFR7XoMf+vNYann5LEh/Nu3H8A/9J0dVEG7q4VFfp7++HgqygQAsHn
t7TwiSEg
Name: org/seamless/swing/logging/img/copyclipboard.png
SHA-384-Digest: w8eNz10nVXx+vGXQh+4b+55HBzl9L599wpz12gv+d5nyqJx9s4r/84P9
/m4V5hmh
Name: res/-7.xml
SHA-384-Digest: fXwQvi493P3dybyUOZxBPzwwmIx8yDcjHFwAo5QsQU17ADvKomoG8Ewq
BoKCl57p
Name: res/h7.9.png
SHA-384-Digest: jBCel3YdhwioeXK44svc8mz9L1SOtvuEDGAXSMpQ0o2v7pcEM+CI7V/a
Hqa0g2m/
Name: res/Yc.xml
SHA-384-Digest: dFEW2u3VJOAvdc4YwBH5AgOcsQx97Gb4T9Mq2Am4R9pZ/KOEzV22jY/z
9fVW6wm1
Name: res/ZD.xml
SHA-384-Digest: jh5I+LMCNLTZJhFCDKqkI7RtBiIZA5+radEhieOAbgmKljahWcaFKD+f
qdL1Scvp
Name: res/iO.png
SHA-384-Digest: 3ZxnFzQkEVdT4hrO3gI8RmBmTvOWcy/C5iWUJL2ACbdHvnHZWwYVSU3u
5fhnoqFw
Name: res/mm.9.png
SHA-384-Digest: E2enolKjJJ3UjwMpoM+6iPQuzSKlTVAwdj+P9yJ58qxS9IoI2V7Poq7k
QGZECAHe
Name: META-INF/androidx.activity_activity.version
SHA-384-Digest: 6XIsDSwtqh+9mYPN6NPMA0XzFB9/VtvGpOi33AC3zJC12Gpr8cTWgr2A
SLm28X7C
Name: res/o-.png
SHA-384-Digest: MoumWh0MBBkxUlHKhXAjkiSH8ft0xby+3tKvOofRHTRQDWPOR5nyPpUO
SXExWjYx
Name: res/8j.xml
SHA-384-Digest: WVtVVuaNyQQ3mhZLfUffKgsTr9mwnRWyq2mMqidbsRwp5S9rWWMUsn0J
pqSxJFTG
Name: res/color/m3_card_ripple_color.xml
SHA-384-Digest: bPy+JkTxYNKlEcJ2Ktm9FoTPSYWJ5ZyRBWCg/exszTdM4tx/9mdyCJtV
EmrahM5G
Name: res/qU.png
SHA-384-Digest: akr4fn+kVJUplhLexksFE/VeCR+4+7nqBNEp4FN7Yt8zdwe5tmKE3OQW
ed/dljAR
Name: org/eclipse/jetty/server/handler/jmx/StatisticsHandler-mbean.prope
rties
SHA-384-Digest: z724U/PSCymX+KzZhugQIRsi/vv0CQfgYYeWUeJeeAsJBN9QpCVYXwn3
8VfRRy16
Name: res/HC.xml
SHA-384-Digest: CFuZ1t/AepikV2wHgjObm8Kr3FPfDAtUqldxDQ/F7wshB3g0KOA1H9Wj
XP5dn9XU
Name: res/hP1.xml
SHA-384-Digest: 5zIcP/ggYitIuNp7ysE/o2q5crTUOeVsv3jjrTMBBnVJdf6bcXBPPdEd
fF3Qn5W4
Name: res/7i.png
SHA-384-Digest: FDd8XrEdMWGzMO7kuLStul44egD/5bS7/pW+Tka+4lrijolMJf8CimUV
UHy6aeP3
Name: res/color/m3_dark_default_color_primary_text.xml
SHA-384-Digest: rWi7nSZ3l92G3UWXzzFUbyOUIic4dBs2PIi36fxnBUBDihUERl4MTysv
El3Nydme
Name: res/Oh.xml
SHA-384-Digest: 7rGW7tX2zl4JWi3hvQleft+n8wbI2WzE2s2HNIbb9WylfzZrqc2Sttlx
RcTVUZGX
Name: res/td.png
SHA-384-Digest: mrmjw0mjbAxELlnDFOv3s9ZgyCPOrIjFmejcU+xPQKPqQXmDft4eLUXr
bkn7FPub
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant24.xml
SHA-384-Digest: u4p8OxJ2lauOsmAv7TycvYC+ylXtjHw76clgrN4l+rLByCp2uC46G1T+
uiWwPL23
Name: res/DS.xml
SHA-384-Digest: ihr+tvwRTe0fIuGrFdCVySfkM0kFLSXme6lmetIyMnftER2SC+Lh1NqC
bqLwdvx4
Name: res/np.png
SHA-384-Digest: smM3f3aBURb95ceU2Rq5RR/fXxJXFtNy40u2arYFFjlFyBIBuu1sVjGY
jVrJZTYM
Name: res/Zl.png
SHA-384-Digest: mUWaVL+1ModLNekRMhsus3aFR5QjPN4Tp5mHG5uK4/Hip4ZWnXYSQBFp
pjkyL/X9
Name: res/do.png
SHA-384-Digest: 51xFzqO8sZnDQsyjOg6snpRIoLVrWPtKpM0pkbXvp9p0tCUlVqde6ovJ
n3iZVk1l
Name: res/2n.xml
SHA-384-Digest: FljTbkCxgLQY+e31M673SWthy7kC6JAwtRmcQK6MpXz3b9KYXnkdDihP
psr0vMdC
Name: res/color-v31/m3_dynamic_highlighted_text.xml
SHA-384-Digest: 8wiGNGgwaHn1ewFAwXntQyWEYt7/oLKnefSdcG2Uvet/4mddHh/xR5lB
ipA02bIU
Name: META-INF/services/javax.script.ScriptEngineFactory
SHA-384-Digest: S93rVkxx4dVVbOaLLUQLogiigDH+wAmm+daT9lEB+8nhubCKgVShej43
FfHFfU1W
Name: res/TH.xml
SHA-384-Digest: UEObsYcR/sX/Z4g55KXSm2C1W5WDKQ+MmzwuCJDLaJXkFu1PNZjCk/81
UgEuYmKD
Name: org/eclipse/jetty/server/session/jmx/AbstractSessionManager-mbean.
properties
SHA-384-Digest: C3OEP+/t+dkcARXc/iC7ljvcwjLzXVIyOR4MiC/EqSZj/OhRpl8n3K9X
aicuC/9+
Name: res/fu.xml
SHA-384-Digest: yEsy7FCt/RgjgmWqiwi0wibRuJ5aAf1T61JOcJEGDBS4ruWLWzXpJZGt
oXwOf5sI
Name: res/_P.xml
SHA-384-Digest: ouv61mTLlPF5ajzpeTDOiSyVrdJYGoH19oLGwMs9GptBojHneT1mgwzh
zQbekPgK
Name: res/nI.9.png
SHA-384-Digest: phospCQzOVnXNVVLwpHBV7fDFPfpIdPFpGIlgp7llmc1pUxpMQzaESKY
1fRdyjoO
Name: res/color/m3_assist_chip_stroke_color.xml
SHA-384-Digest: /QHXwplqhD30lKLsfFcWqLQV6VPv+7O1T5Wqluu2rnZV4T/MOoIDA+Ho
kVBr7SYM
Name: res/YI.png
SHA-384-Digest: pThBCwr8dmZZyutLRtvF4S6WScIQVK/Ik577jP/vuh1VeHdyjaXNsYIL
zqqLsxzT
Name: res/Pb.png
SHA-384-Digest: zGfZsY/EqkpRTWi5Sd2iQ8CHH0tmEu1WDBTSl6n7DDz+3P3oNfV0Hjz6
eEjZJgAd
Name: res/vH.xml
SHA-384-Digest: hP5KmCZqXQCEUewm9TwzaQoAVrn+kDElLcMaZa7weKfiuBvUzqj3U0lm
IbBDPjgV
Name: res/xR.9.png
SHA-384-Digest: qQm0oxY7TIJ+joita2pQ1ZkWmmLZ4aVFS/mZhLJKWDSXyd9RHFj1j43c
sDMVBkdQ
Name: res/rm.xml
SHA-384-Digest: +TMcGORE8mfr9MPoFlbmTY6jfYI+jniCo4BZ+ol0myiC1A2xlpHBJvOx
0viRvs0W
Name: res/Tn.xml
SHA-384-Digest: 7wMI2iWwq84A1OG3/5NSfCF18bJ8ZM6GanJF+xhX3VwIVQjwoTwUHnpe
ldAQUdQA
Name: res/UO.xml
SHA-384-Digest: zUHwxov8vukbVgOC69QCzAZg6qx9UDjsofnnXhufeMCZE9haYTievh5C
kA+I7qns
Name: res/gE.png
SHA-384-Digest: meE4XA+HUud/+C7Risj9phhu/m4uT4h3U+XIWfOvJRriqw4pQ6lzNYWF
zQm6uDxa
Name: META-INF/androidx.profileinstaller_profileinstaller.version
SHA-384-Digest: ol2CZjpsqyGYOOT7lxWWeM9CnDbrzbgf6/9ZZli7/ju2h7IvhX/0bMwf
dn89wFTr
Name: res/7o.png
SHA-384-Digest: mjcbINOCwnLd5a6+juiROyJLj1RHU5Td81WAsQcL/7JDOcnyB0yToo13
QV1EMlKE
Name: res/8P.png
SHA-384-Digest: rI9OLeXzmgXweA1DFf6lGZ9Yg1FpnYI1uO4/Hp8quo7IhOtXvDu7vSOM
1L5PP0Pc
Name: res/color/design_box_stroke_color.xml
SHA-384-Digest: Y01w/ZP7fIcYND3fQ3Z2VAW8EeW9mUYavKxbr/KvjDSa62MVQBIhqaVx
DU1NufiL
Name: META-INF/androidx.databinding_viewbinding.version
SHA-384-Digest: vOzfDZrW/FWpp1GBpQQ9t7eNu1Np/OU+6S3MlLr1j43o6t1UrZIPgZ5b
f+ffYuZ7
Name: res/4z.xml
SHA-384-Digest: 1iagN375H5lH0FxgTbwvKMIXUJM/+bRxAVE0L/vJLJelYRJP9BR8bovB
DtULPtew
Name: res/kp.png
SHA-384-Digest: WusWKDA1ri42DEVTYwDWZ+b9+T+4rPcGRNAT8Lz7PSUoHVgqodltRoiF
vHcVykYO
Name: res/Eg.xml
SHA-384-Digest: u1Qqwcek12hy+19y2f1HWTQsc3BbKMf+y83GkqS1LMesZKWjD9/q+82w
9yo9gUsM
Name: res/Mq.png
SHA-384-Digest: 8FzYFzze63IrOKRRPdrOfrjkoqtPl/Nd0rN6bqRAWR7G0YqmatUF/WXb
tnT4hu27
Name: res/ya.png
SHA-384-Digest: Afkswb79B7Hzr5bo3yJZ8dTpeADoY8EwiwtsO0/kNU1xA/kTqkpuQY3R
3x+OYrcy
Name: res/zB.png
SHA-384-Digest: HBgbUCIXot6YI3Yoq2awqomkAHCsYgSN0KQWyJwowi0eqBZksJFsFTNu
sNM1cVTn
Name: javax/servlet/LocalStrings.properties
SHA-384-Digest: 5cJ1nUN2WM/Hqf/hhBRDElmUM5xmDfQC+EbzrymxtkHsiCsOsiWWOHrG
aq2DwI6y
Name: res/color/material_on_surface_stroke.xml
SHA-384-Digest: kaVvmTFEnQzU3DdTEXiRx7OGeQDMb4owTCkcfuEBeHKxBsJ/0bjW031t
zVa2YNFG
Name: res/VT.xml
SHA-384-Digest: GhPENJPFVGCPvT7EANTglY7yOkS7TRjRw+IGjA2fnMqnG7qFp50lXOKu
6zJV9zIe
Name: res/NN.xml
SHA-384-Digest: qv60rwvarubQPif+sR4OQxUw0S7CXRyYpTiCi1X4gOLV6eM25M9Yu442
Uvv3kn6U
Name: res/6d.png
SHA-384-Digest: L8uKgWzyVF5UGDNNA/sHlc5Ay1r3x+yoQT1Tj0sJ5w/9pUzL7V87XipD
kPlwUZlY
Name: res/7E.png
SHA-384-Digest: xKo71og2f6Hj0CDJ9uvZARmg5NgQ5OdaZnM3I3o6T70M5RL2gozzgMWL
rkZ9osJN
Name: META-INF/androidx.interpolator_interpolator.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/color/mtrl_outlined_stroke_color.xml
SHA-384-Digest: gXiVjHahKlOS/iP8Xv0hPalDTAKDkNp4Lvq3SbAM7ZkG4cjZfY3yofLa
7T/aCrrl
Name: res/vl.xml
SHA-384-Digest: 7T5DrHOFh/UQO7OtB43AOZDlIYlY5iFLICPIMYycsTqnIApJLdKd/MgX
cGuO9Z54
Name: res/py.9.png
SHA-384-Digest: omKIalk3ytT/Ij7al3mpJp3PjAN3Xk3hw7MBW3Ks+j/rO6GDW1t7/4QQ
QZYoKVbW
Name: res/as.png
SHA-384-Digest: /3dnVnLtaUvmHBUoKQNBnB0QnxC+C6MpU5WFoss9x36DNgdD4DlkniC1
LcZ7dY1l
Name: res/-1.xml
SHA-384-Digest: EJAJqridbS1uoQ6ZojaflhgPcehNpOp0Xpw7G3QPO/u0z8enRAGwKHQL
c4z5zrBK
Name: res/KT.xml
SHA-384-Digest: t7LkzS71Eer4g3zPkjeP9mMgDYYEpu2wzOlEuN1QueVWpvQx4IhoxRXg
CwSLE/Yy
Name: res/rz.xml
SHA-384-Digest: Ud1+QaHGgulD2cKdv+MZB6HMP4B/qrdrk7qNlMRVd4vLuRk3hHgBpcku
ZISP47yH
Name: res/kL.png
SHA-384-Digest: NJUCMGqxFGeO/WDVWnQkD0LTiNTRcULVTvTHjn9Kf72Ugf1ZVzt+A9WY
YUX0ZfLH
Name: res/color-night-v8/material_timepicker_clockface.xml
SHA-384-Digest: GKsSur55lbUddGyC0Kc0WMBJTmCpIf4RG//xrz2tYmKfpkTv2oq3B8+I
ovir7bHZ
Name: res/5T1.xml
SHA-384-Digest: dgZhHHYpi7YPSR4iOPsFmtDfJCtgeeABZw9iUY+eQNn02dKD/Y3fxaEN
AbxMMG9r
Name: META-INF/com/android/build/gradle/app-metadata.properties
SHA-384-Digest: /DIR4un3SJRrJ3IkotVSMX2NYxm0pWQ7sF2VZJqqdG2b1FvtCXSsYCLG
7OLIFh33
Name: res/35.png
SHA-384-Digest: xKo71og2f6Hj0CDJ9uvZARmg5NgQ5OdaZnM3I3o6T70M5RL2gozzgMWL
rkZ9osJN
Name: res/rI.xml
SHA-384-Digest: C8ABUvAeOj1NeB1w4ptCiwLrL/CPgpan8ODGYrL0msOaxOR++15bXu8/
x4ePe1Zo
Name: META-INF/androidx.lifecycle_lifecycle-viewmodel.version
SHA-384-Digest: gW32UzoEwOs5wB7LqclnmoO/dSIk72HFxlPGyyLkR0FqHPjnpEUP7zxq
0Jf58UkL
Name: res/color/material_slider_halo_color.xml
SHA-384-Digest: HoLUeqOzaAZWcLD6NljLqirvV9t3tuA9RDjB4xgsncw8eRRWD/lqJ6vy
2XIgyEul
Name: res/ge.xml
SHA-384-Digest: yjpbhXp6fHPOB2LSkwoArgsSXlogJ7dh/mk/7VY5XjinVcNReYCL8XJf
Um3w1964
Name: res/io.xml
SHA-384-Digest: QP4QcdaGdyASlkaJFdg8obDy8v6aKMkmjp9041e6wuxZBgjgDfQzelmv
9tSPB1nL
Name: assets/shaders/fragment_shader_hsl_es2.glsl
SHA-384-Digest: 3mODAq8ghs2ui2O8gRwfCoksWCgyRBZxcT84kjCiNZSWHdBguDZvVJ+X
/XaybXLq
Name: res/color/material_cursor_color.xml
SHA-384-Digest: RgWS9LRYp2qCsYPkSL/24W4JMCQd1LqkVYk8pxmGTheDefgKzWIMoZ7a
im2qRm/O
Name: res/0n.png
SHA-384-Digest: AFsqb4gEBUUucHnBdXzfhoBSQYCmNRe6yFcsGNSO4zHvl1cG+XZn3FBB
D8VQJpZ9
Name: res/5D.9.png
SHA-384-Digest: 8kAkOKrm/JXoYVWbwDLXi/0N7G43OtH7ZU92KSnYz7R479JSEF6hajjC
y5WoDqud
Name: res/Qt.xml
SHA-384-Digest: +zX8fDC9HhmH4Jh4c8HmqhgSz51Gtw8936DbnpFCLQSHV1ne2oPoP1xz
N08NiIQk
Name: res/S6.xml
SHA-384-Digest: skN89GDXuPFeCP2HRI+zb5uWDRsv2om8/GbYfuN3UQjIHOxcldqhSQxK
E0Wj4+nr
Name: res/In.xml
SHA-384-Digest: OUUqjYTAM+6N8yQaGu+p/GSaKfSMp3yRFJRHjRxd/QRAioJT1rugVTK8
HzE1zoL0
Name: res/tS.xml
SHA-384-Digest: Kdrlq8BHUmrNZUqJLyfIZxBAWdJQ+GwyjmoJZwpJGaexNQoNdTsCvexc
R5yNCIoY
Name: res/e_.png
SHA-384-Digest: esS8thcT3uyXETvXoiTML5dzfC+2g1fjVsfNB35BaLEp6gHi4LfhxjSi
bL7j/T6d
Name: res/3h1.xml
SHA-384-Digest: HaVM1VH9c5UGtE2PxBe9WdzDtqLj5KOM26H9jwbPevGOBrmVa8xvcT2x
MXuI/jAe
Name: res/4I1.xml
SHA-384-Digest: gfFbVmLK6bsPh2B1UYqR7sm3TRNjTxJbS+Az/ep9JoGNUoI+h7v6uSPI
QE6QI8Px
Name: lib/arm64-v8a/libavif_android.so
SHA-384-Digest: N6UPiwx+AEIbQr/VKfdSxHpvz5P4rfM0JsBhV3hdZF2harLwVAA712je
Ee29gn5C
Name: res/7o.9.png
SHA-384-Digest: w8aEJ9gIfk9eUjb9CwbHgMjQrhDgGtBouy1EkGbHHd2g3cEcxsLOIjdK
xtC3iLiI
Name: res/Tr.png
SHA-384-Digest: V6nscHa0+d0uudqsPbvUMuPchE7C2YKZMKAxbUS6y4lZXxIhMCUp5ZiT
iM5C8T4C
Name: res/V4.png
SHA-384-Digest: lALn6d3rY/ZAFAaCn58xpeFbGJI7ToJVpAPj61qAZ+4kqBEW2cRfz8K7
j4sgObeN
Name: res/ba.xml
SHA-384-Digest: n9JRC+PZungYIOzsv6WbtS2Fppsuva9/wjwUbdFOuwNVa/6Lmzjed0M+
gIZNQGi1
Name: res/pg.png
SHA-384-Digest: Oy8MiuyGSC5CU8bu05Pl2hbCflRrcaLF00EFuOX3jgqsIlG/indRHzf1
Yd70JxLk
Name: res/ak.xml
SHA-384-Digest: JsfBe+RogtHbtjC4Uz+S0G0089UfExglSJkdz8oaoUbVktzTge9u4RoA
iB/X1sSW
Name: res/bL.xml
SHA-384-Digest: dNLL19wTUn1St+ec3kQ8gRVQhTLaeQOvtnvaD7gwoiCpsyPekZKopmeQ
fGbCpjdK
Name: res/color/m3_tabs_text_color.xml
SHA-384-Digest: 4uGZVHO0zdW75WoKB2AJc7g97k8rhq9P26bbk/ZP1+4UkqxBqziKqLy1
3aqW2uqZ
Name: res/D-1.xml
SHA-384-Digest: nyk/HWgyoEfcNC536MDtrHY1ScGLO0RX1sQIjedr+zCdDWC0b4/l8UBR
j3K140FY
Name: res/mt.xml
SHA-384-Digest: lGV6a4WRaWXLl/MvOgL9qS9SazVaTTHko/RLR2HFb5R7zQmafGQ8Z//y
uhnrJ2lS
Name: res/gX.png
SHA-384-Digest: dQv5PfpVjN+JfjJiZdnCCnUOxtYEIkh9oeTnIJVhahTwJsGLavnhNyfR
0bh3/GWV
Name: res/qw.xml
SHA-384-Digest: l82qGuMazNOKJsvxgnpmNydbtkSfwwK38VE9jithjzKRgDPc78ej22y7
hqHejOw/
Name: kotlin/internal/internal.kotlin_builtins
SHA-384-Digest: EQRe4HHUfQueqZlkzllnTujmU/QkeX3AQH2jQznoX28HmvBIuos9eiJh
dhknL3AF
Name: res/-D.xml
SHA-384-Digest: dPZeFLSfEpuxxJD5LkBjIT/UX8Hh/otSd6pK8oX0Jq6hCaBc/DGs+Sgk
utETvdcd
Name: res/color/abc_btn_colored_text_material.xml
SHA-384-Digest: BzaphXIuHitxxEclMEy7KNiD9ZCmO6x7NCV7OVesUKmb/Q6UotXGUIwM
B/TeAGdo
Name: res/2P.png
SHA-384-Digest: sxzCf/OD01V37siTF2bQRQvKXFPR/IN5RD3Qps+xyIETuJAU9nWrm66l
c7FRCxho
Name: res/color/mtrl_btn_text_btn_ripple_color.xml
SHA-384-Digest: o+a5rMhOKUqelj7pVK0ZC3Q0wpuHmpMxszcohpiM58R+HPHx/vTcQcrl
25dNNU2s
Name: res/Sq.png
SHA-384-Digest: DtVy8maRR2Mz/CKIrNgqSqwZmQJB2fuCicfqO76zpK1JoMY1C0wfDTm4
nXizTgsk
Name: res/SJ1.png
SHA-384-Digest: uFB4xKivx8hdShq+ert0PPHaJCQcPu0xKpGwXM+ErzzemivdilXs3/WV
MZxIeEkT
Name: res/color-night-v8/nav.xml
SHA-384-Digest: E5jAlU3XjQwqMRslQcVdOZsKS50zUA7usgPqay97qIEY8Ahnehj/DjKq
utIGRFvs
Name: classes2.dex
SHA-384-Digest: zBygOmM3fo4EtAqe2/Pq1lyslfeGH6JudMl2tTu5GFkah/RuqbJEWRGt
V0q0sL43
Name: res/bA.png
SHA-384-Digest: +lIyJJsnd8Z6wv4Dv2lLJnGoGs7xvQMAJrK+eAgVGVcTAmqP8seBQ/lH
uOoE8kH9
Name: res/color/material_timepicker_button_stroke.xml
SHA-384-Digest: 5XDLNWtUVngQsgp+KJ7YkkSH3ae7hJJ217yvloGWgTcn8UmMqVXiWz4X
GJA064jM
Name: res/DQ.xml
SHA-384-Digest: a3bW2ofNkCxORiJCNE/Gxowzhid5gLemXAD3PLcA2BpKpPFtTPa3RM/s
Jbkn3ExI
Name: res/1K.png
SHA-384-Digest: 86klyYQRlx/LqIg9ZLQCL9Y198Ggs0BC1yRr092SJSkTgoRrFu4CYKuO
WRyddYEe
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant22.xml
SHA-384-Digest: E/OU/lw5NsENIzlvsNbn5YS0QJlOCUVUkjA2Y3FGC33vB3rLES/gyci4
tAcpdFbG
Name: org/eclipse/jetty/http/mime.properties
SHA-384-Digest: hvmSxkgvxUmC7Lfsmvfgk55N5p2n1ySYc39V8ptiR6pGxR0lvnhVu4be
Lc51+vTW
Name: res/uG.png
SHA-384-Digest: asIbd2dn/F99jQwHQXZs0hJW4Ex1MLjYax/GkIkAA4/F4bT9r4lpglJX
uGu1o/PA
Name: res/MQ.png
SHA-384-Digest: H3vM/qAtDZK1XSLUOtBj7Sjyal7HEeMQ1h/W708F4XRw2aolnpXU5f7p
QJHR847R
Name: META-INF/androidx.loader_loader.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/5c.png
SHA-384-Digest: vfy5PTkuTyxNPWc4yTKJhnyWNlI6fx9T5WfuYnivvKn5vuyNUgTsWhU1
NJY9bEh8
Name: res/color/m3_navigation_rail_item_with_indicator_icon_tint.xml
SHA-384-Digest: w9VdtEqyFcPy6EhlcHw3QNr0UHyOrLmgQI+OSlLbCFkeNoQDF/nHI8/n
uMrqU/3s
Name: res/BM.png
SHA-384-Digest: EG4JX+0lyzD/oIjbzmu6TEgy8FcRSi53V4oevUwFMR7jHlNYx9q4Fkgt
iJ7uMVc0
Name: res/mT.png
SHA-384-Digest: P2nTd58C9y7io46WWsfzXzQyrH+HuO4FbfhKmbwI/pleg7RslZyPgpKH
M2ftYrAi
Name: res/TJ.xml
SHA-384-Digest: 6ZxTvZQQPzAmLo8uFln3SFmqEJlllxCZMZNN4BWAo4ZCFs1CObtboHXO
AvPhWhHR
Name: res/color/m3_elevated_chip_background_color.xml
SHA-384-Digest: YfLQ4Is7Gu+TGBbd7A45xFJAWjfTFz3H+KrsDoS6DBOpLAZyhBESXkoB
x9ONxMSW
Name: res/ps.9.png
SHA-384-Digest: WrcIKdF9C/z2hye1cw6dqr8v9hMkmVKyMi7yfXW7smiL5EPNFDotu+EB
PPsGzFCW
Name: res/d2.xml
SHA-384-Digest: ZIQVgzXKrd5t2nsLBJHoSk9YMIa2MS8m7rQFzQ4qr75Iz8lwfa/I+vBc
2xz7eUqG
Name: res/Ir.png
SHA-384-Digest: nwMzJvCrThYqswqiaUrEI85IlHsnBv2fRTpnurv7A8ppKwJkYDaxVhm6
ZWcNsgF0
Name: res/JS.png
SHA-384-Digest: KQzp3spgtyJ0UWOtYbzMiELshvT3u+NJxBrRYbCi/mKG0PNkCkcK279D
GgKXysNs
Name: res/Mu.png
SHA-384-Digest: yUi3KR6v9mMSp+KXYVNnf0d2Oassr29Ce0xmwmpLgny+wxFYdWOekwIG
ib5MEh8g
Name: res/Qc.png
SHA-384-Digest: IvQaNVuZzMEHS2xaDi57ylBIoui45BV0B5MqIOW6O3uFXXVel+CtncYh
Snb0ZgeD
Name: res/nY.png
SHA-384-Digest: FUjWD6oYWBOgJXgpGPaUEW3hauu8OUckcTX/uboJUxi2mrToTzJRXY32
2DIn92+f
Name: res/WH.xml
SHA-384-Digest: mVKAL7ZitfzLrWcE3rgUs6pDJ6zisJIAjemLUQE71eEsQWzfM0gGVnLx
f6sYARfP
Name: res/HX.png
SHA-384-Digest: fccyU4YfHKwloTIxVaDKcbk+kyGtHfCSMYwYtFGWEEXvMDPrViBBYZeD
joJII+RV
Name: res/Qt1.xml
SHA-384-Digest: dEwQpQCu4DJIh3O3t4sR7o/X6pJWxjKGQwAZJok7TX6gbiCshbRwMkCP
/xv90Li2
Name: res/color/m3_timepicker_time_input_stroke_color.xml
SHA-384-Digest: gqSjzq2Eo6qtLdIQ3ZFNZkbw+ehCY10LZRXVOTF5nuzfIiREZB0a9UZk
kQfG9Bbn
Name: res/color/m3_chip_text_color.xml
SHA-384-Digest: jhYYkGvBq/xCJaQup8studUHEe2mv1lRalkbQDKRGpnT1+9LXziQ4Z6c
hFHtDAYZ
Name: res/color/mtrl_fab_ripple_color.xml
SHA-384-Digest: nsyajdUMGa8JVw5X96lfPm6jVOUo7wimSJQtz9h+m/ZZ+A7Cmz+dBL2w
GxZCDYtw
Name: assets/js/lib/similarity.js
SHA-384-Digest: W3s1FfCDbhxQjqRepLkQV86C4Mf5DdxdldR9jgaaIuRdpZKvRwDXF5yy
Tk4wowmP
Name: res/color/material_slider_thumb_color.xml
SHA-384-Digest: QhMGykS0IvQVMLCZa0jexdtabf10gQ4/G8ELM78arvYdp2zewwWEJ51l
d/dM1Sg0
Name: kotlin/ranges/ranges.kotlin_builtins
SHA-384-Digest: dKW2fBppykb1Cw5BnB9myZvGt5GqtpWnU8S6AEOs6FGQCnJ+FjEgAxDC
kGvlei4i
Name: res/e7.xml
SHA-384-Digest: 8l3IQGxqNcRfmyTkdlQ0cS7x6WeESKfaIT1EsRh8JSaOSAWHdzfE5T05
NhnqiKNu
Name: res/color/material_personalized__highlighted_text_inverse.xml
SHA-384-Digest: wzbjjvLi4RZcZ9TAAavGPm6yZFrwNzYEzCt0dZrSrps4OksC1+FfXSef
hA9XLx81
Name: res/NP.xml
SHA-384-Digest: f4/H4KgIvUIMFcAsg+c0bgw5VG7pVbuuSKtoF5fCFPRhBo2zrgKqX9BB
n4xWcljq
Name: META-INF/androidx/room/room-common/LICENSE.txt
SHA-384-Digest: SS7625cNsh5VzhuqEjVcgZjBQsIthBX1srfNVFSvaVKkDBfXx8GFQoGX
soOOD9z0
Name: res/Bo.png
SHA-384-Digest: ydGeryldXzUcEnmedUpxEyfN3wf71nfB6N+FvwfP9b2uueXFGZJ5lWDr
teJUfsDW
Name: org/bouncycastle/pqc/crypto/picnic/lowmcL1.bin.properties
SHA-384-Digest: n4c8k0z7ObFbsZFUPGnNkVm8vpNPWs5vujqtWKjRZ/FoFa11sWs0utAe
cxKMk1cP
Name: assets/shaders/vertex_shader_transformation_es2.glsl
SHA-384-Digest: nGJ4vktnkKk02Y/oBhti4YQzeMHiiYT6vCuT7Wi2zbOsGAOEkZihmRz+
TBsxNC9J
Name: res/sL.xml
SHA-384-Digest: pqvbEfPq5/Enxb9M+UkKA3doqg1vd6h2KbqVh5It1siv75Ja7lRGs0K+
35ktipyZ
Name: res/gC.xml
SHA-384-Digest: t2cxJ+lTbULqxyywJFKL0xf9h06l1oolBI/Yx9n5qYQxbdf3gAYPSS0j
t0awYX6c
Name: res/Nx.png
SHA-384-Digest: Dg0p38A8UZFJfjmSRHLlLFha+zuSo39c8yivESKY/W+txwfPDotHHrO3
QUsi3df2
Name: org/seamless/swing/logging/img/configure.png
SHA-384-Digest: N2L/sVEmll4I8eo5rD/GJ9KT1UhsHgohDrcO3JAQ1pMKFyjAhUp/9RPD
Fza6npN8
Name: res/JQ.png
SHA-384-Digest: yAZLODW/GA54edm6NOKoC8O862pSXNGyw/Gfy1/IYDr31zlGgvqBAzJf
Mqn9s6Yh
Name: res/Xs.xml
SHA-384-Digest: jLxUWJxAoCGlcrHuxNtlz0BJcXOT94qg7de2Yl4oAEMvGLNJw9IjgBw8
0Mjp7c1L
Name: res/Em.png
SHA-384-Digest: VNHoaHNntgh/AwarYW8WOr2l1Rqi0p6NdFpidPmiBKO8Q0pT+nFI1o4f
eHjn0eZs
Name: res/vJ.xml
SHA-384-Digest: +W30nTBVknZ4Bw1so84zK/KyMopWV81rDRCDDPfqN/0wEMiEQVz8V7He
GlMyrxDv
Name: res/Lj.xml
SHA-384-Digest: 0mhgmJ+nG1RkKMIuyfONr5I8X7LkBW3Ok02WKtZyYLrnifx+npH9vcn8
bBcnqWxe
Name: org/eclipse/jetty/servlet/jmx/Holder-mbean.properties
SHA-384-Digest: HqK+OsxH9pVX9VzTa6MPP//QU1XiZDwFdZi4GL0atvSv2BScifx8Rp6/
3bfbKQ8q
Name: res/QN.xml
SHA-384-Digest: 5SjKFLLT/wB4C3nqatGtJYD31hLocEPV2yTCrpZ3EQOsgrJGLW6t6vNd
9ls0ldOC
Name: res/7m.png
SHA-384-Digest: NVOpsBUTPuIsAZWR2l+ot4esv0pPIb86Y3AuVluQmdCJYYGLdFCLuDSl
BUMPoqEF
Name: res/8N.png
SHA-384-Digest: c7vJ0c0MFo5eIIvB7koD7PxDYTOf/IHBngCY8LqjolFkv2jlC7r0CN+B
IMeZVSVb
Name: res/color/mtrl_card_view_foreground.xml
SHA-384-Digest: 3BgLXCyLCWDNAYzRgBdDS2IaH2k4IDzWgvwpG8mXcG+oMUh3CJ619KP/
D5OI7x71
Name: res/zq.xml
SHA-384-Digest: qcm48DBf+4qOGR7YbNB4vbBmmvCYbJruFa2q6i2o2D64ko1lV+MSpj32
9peSjpRb
Name: res/0H.png
SHA-384-Digest: Dg+zhvf8SNL3tT9z0U2GBUhVUbYe+R0rehgGxjRXMq6XT0k1Vq5teLfs
4Sn+Rdjd
Name: res/m0.png
SHA-384-Digest: QWZnw5IPKHqg0RFuXCBYh6gzMHHsKxh8NrmZM6adCmMKb/z+70pnUCHR
fI/s7gne
Name: META-INF/androidx.sqlite_sqlite.version
SHA-384-Digest: hIAGvtefmZQC+5iwoWLsS8O4/kGacdmbLOceBNC+qlQ1u8Ze/oEJR6ZE
tF3jNbux
Name: res/color/m3_calendar_item_disabled_text.xml
SHA-384-Digest: ir+kqLtsy1HK7yHVwI58jGLcL0wmlqjioueD/eIXmNoOeRVoVJ0CWA+N
C4Z4crc+
Name: org/eclipse/jetty/server/jmx/Handler-mbean.properties
SHA-384-Digest: jZ9kVyf/GAtmMYAgHfhyFbQWpSuStyjm6+pc9Fq1uFvhKJ8C+0I6H43H
Nhjq6Clz
Name: res/5P.png
SHA-384-Digest: wYpL447eMcdZIg+lyOcvqlpgGsFBZLnlOXEMaX0sDBqxwLu3yvz84Z9A
qgqeRUid
Name: res/-3.xml
SHA-384-Digest: rzoIcdjJZhSwpq5b6Rh0b/PEaWdCWVZsjGfZpmqK5BAWFksXguvluZuv
iObieVEy
Name: res/OX1.png
SHA-384-Digest: XKz1Ni2y1mtyoNJPVru7dLnGYgCzZM5LpsCyo6p51piYFCFMobSWvJ0M
U870KjdC
Name: res/-J.png
SHA-384-Digest: cMCRmVQSbQBC+AbrmJJ1daGAzDPA+dAJXm8o0wTI6uK9j9h+DsKC7aeI
GPUVDoOO
Name: res/59.xml
SHA-384-Digest: p98S/bb46KkP/lfdhRgUrDkoeioQIyPSjcifztyuhlLOLoTY0hNLcPLh
k67yYrHH
Name: res/QR.png
SHA-384-Digest: JvKHQv67XaNDSnB7TCaIr+1dLCHFOWSLmM0jkM/Ea2RrPH/GizhgSBnk
rxfu4SsJ
Name: res/AB.xml
SHA-384-Digest: lErTF01cKXrqSdb68LVAE8d4jMOTbUwieaEEnMF909nd9KS+ZhZjBW39
ZmhKdpJn
Name: res/BL.9.png
SHA-384-Digest: DgC8C4272vCh/XrOEuk4+jI+RAYQZiMqCzkp07eye2O2AjXJd/lSaFsJ
X5BzcFHj
Name: res/Bk.xml
SHA-384-Digest: R9j3iWJTV6WE9oP43oRLEl16Vt+FkrcSlgBoKtXAE7idz8nyLo2nrWlH
bAi5Xzad
Name: res/D-.xml
SHA-384-Digest: 6Bccl1LH4KVPvuJidxGaVX9DKMUACZutq+p7JOA1sJZfqvagsys8TJ+z
4Gu67c3y
Name: res/aG.xml
SHA-384-Digest: Zgxm0Xxgvhwe8aQap/Bd5JtH7bXBy3d5VsSENfhgKEuvaAYIM1KFYKBw
aFYUov33
Name: res/color/mtrl_choice_chip_background_color.xml
SHA-384-Digest: AMOfNtbTOtqF+ZvJO9atqhCKcHCXFzui1WvRLuFoLunbWzDCfyv9DOPC
iBFL8uPm
Name: org/eclipse/jetty/server/handler/jmx/AbstractHandler-mbean.propert
ies
SHA-384-Digest: 9NXRCXkZscqUchmq2TuDa2AzxBBSDD0tt79wWTmSvzeFttweFQF+pT+x
z3bWeRtz
Name: res/5t.png
SHA-384-Digest: iMX1G4yVKNRIwXkEZbdSB5/HJGbUCjlpS8EV2v9sfL8J2vQ/VwUqPfjK
/iuKEYQ5
Name: res/color-v31/m3_ref_palette_dynamic_neutral12.xml
SHA-384-Digest: enJN8CEqvMwbXrTFUnmg3R96CPx3C6jrbo1apx2CRoE1hIA/kblFovED
DpT1u20c
Name: res/color-v31/m3_ref_palette_dynamic_neutral98.xml
SHA-384-Digest: dmZRSKLGawfCoQ/VSNsV8/1jy8l2cVO2hY9y0A4gPozglihbJccy02BY
ZkaNvsTh
Name: res/9w.png
SHA-384-Digest: 2p2e+ciifYz78mAqM47poHUymW6kckP82y4lKn1y8MnUHwXHA4JhsCW7
Pji7M2Qu
Name: res/yY.xml
SHA-384-Digest: U9x0aAexJXAtPMzwtXkP7ev7etAxhBVNdzHcm2do7b14kSukcwMuSh2G
gXTYCapR
Name: res/kj.xml
SHA-384-Digest: qaBexvqBsLdSFIZM3XM57wGmu9KxNb2AOvOerXU08mrW078vwizRT8CF
yJgOAKPr
Name: res/Gf.png
SHA-384-Digest: 8zFYnVEc4EqOU2t3PpadRDVrA80KY523bUEBTkBh+ukPYqw0ejia9OjN
2IgWmx03
Name: res/W4.9.png
SHA-384-Digest: 4Io7n2RjarI2dduPYW9hJsLy/UizBy1b4dgCjWDrbrDSxjDx8k9zVP+P
8HGa5mo2
Name: res/Wr.png
SHA-384-Digest: qcKuHLufjWOZtJI9UiugcYS/fM4mk0RxV5zgGbDr3SzOBCNX/ts1EqF+
LFDrSwsQ
Name: res/vR.xml
SHA-384-Digest: RVAhE6kCzH8uvxsfvgygJXq+fv7PboQr/HRd18BCrLAonU5EtHaYCes0
AkZeeWkY
Name: res/QJ.9.png
SHA-384-Digest: xEi4ev8OW6bRnnMAcCscppmXcsB3d+AWrPvDz01jpEJek139v2YFsTb2
fzBEts4S
Name: res/wm.xml
SHA-384-Digest: JD58F1P/S+85tknr872aLcD92rBEQsrHU98g23OFvMV3LJWxqa45GGDi
Pu2G2yK/
Name: res/xN.xml
SHA-384-Digest: KXkwTYVbSDEVdP53E70y359Y3XlBR6+VkuQNtR3PaIPWv6MQuH2XfiTT
6TvQsqVV
Name: res/X6.xml
SHA-384-Digest: wLEy37gEnPST267goZd5J3KL40QKDpsUX0PNJHGgZiy4K/qSAyIEXhtU
UgzP8z4g
Name: res/gD.xml
SHA-384-Digest: eQsbtHz9ISiAJYEvl9yMY+X283KW6pNnDAt1t5BSqhq4HxXtGqtRuVmC
L2dy0YBv
Name: res/-B.xml
SHA-384-Digest: M7drcmMz7zhnudo+pJjxFjS8qXPxnRgWJRSQGx7pclrXT8GYgK9W/xrg
rON46Tg1
Name: res/yg.9.png
SHA-384-Digest: G6u4CnYZDsGX5RMKLIfaFvMKpfpXykzVXv+R60IF/eeqFiObCfFilLf+
fncyPdNu
Name: res/cL.xml
SHA-384-Digest: pvulbtjEeYMS35xm0FSnE+/eooCcTirDS9lDBX4SeyIacMFYRR/Otl6l
TpiZN/Ad
Name: res/d-.xml
SHA-384-Digest: SBqgzk1KvAUcV1EoKwsueL0varu5M7hJI7GzioSJ26WQD3UqYajxJ6WM
MPwmeunr
Name: res/color-v23/abc_btn_colored_text_material.xml
SHA-384-Digest: U9EkkxNDv1I9cD1dCgJU15nn91B1KtghbbtxmjHigXtXyTivuBJ+HLL/
HGipPUd6
Name: res/Ib.xml
SHA-384-Digest: nm6rk7dtkzscu44o30h+9dHxhBh1gIp+jB47Q8LB+gdiaNnzZcKOX91r
hjqW4m4s
Name: res/JC.xml
SHA-384-Digest: qPMca+ZjasHFj/jr+OEEbUFLVZvPMXNSl1emDsVXtnZTJydFf8+eBabV
UKCgQa9k
Name: res/Ag.png
SHA-384-Digest: XKz1Ni2y1mtyoNJPVru7dLnGYgCzZM5LpsCyo6p51piYFCFMobSWvJ0M
U870KjdC
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant12.xml
SHA-384-Digest: BzQ5iTvi7cQ8ZoajTiIcTN6H/u/iqbpADZW21v/UBo3feSP7DY684ykU
8qwa/+nC
Name: res/1x.png
SHA-384-Digest: EMrDDFLEnUmgfLGqd5S6jnFg5cF6oSq38XuPi3tWt299IReT/VGDvOKC
SsdW+QqH
Name: res/Nu.xml
SHA-384-Digest: yX9iMOKiZ3O8nuEJwqltBRZNLc653AYl6pekwe5319Uhbx6XYKnNzXtI
8Suj/rpt
Name: res/eK1.xml
SHA-384-Digest: xXn9rF/Ef7ur3CNny/vrsYxwI2rWHXe3fy2WKHFSc85KMMJ+jtO7/x3W
sQhbszWJ
Name: res/tK.png
SHA-384-Digest: 3Yam8zWxXrn+9ETq0ifRtM1PPUjcfPM/wqk2A7PCMPx2ilS0kj4jLXjI
uj1RAv9Z
Name: res/color/abc_primary_text_disable_only_material_dark.xml
SHA-384-Digest: OUV+GH1BnKiususlBB9AbVcJQoEM+FUQ0P06ajUSf+RMciOH26LilrM3
mnFVg3mT
Name: res/Ac.xml
SHA-384-Digest: wqz8eDUXmdDljkoXiv4jnUnseaLUVcSpUXu4bw75ahXIHRGQrIXbpb7s
RKJvnX60
Name: res/zN.png
SHA-384-Digest: 44TNjbuvHTMu+uku4w2f0kOtNPKZvzrTC0Dbx/yYk8UoZEonsfYRgHAE
UZr299VB
Name: res/MZ.xml
SHA-384-Digest: CFuZ1t/AepikV2wHgjObm8Kr3FPfDAtUqldxDQ/F7wshB3g0KOA1H9Wj
XP5dn9XU
Name: res/T3.png
SHA-384-Digest: zfyCnC4oLsx4w0zgJbrK5Fz1ObHxCpXfaqr/6zValOkYQ3BxPFpyg5wH
iSZJKtSt
Name: res/gs.png
SHA-384-Digest: +KGKU/N/Vxsz1FBCudP0ENLktJB/5FP/S4yC+wZNF14/ntkYW019GN2Z
IF6nlXRs
Name: res/s0.png
SHA-384-Digest: nf9cNdWVjZhQEVFF8OKge/TbsdyvaU0iRhXyWvkfrvXKjZIRyGZuSCYP
PuSFe7J6
Name: res/color/m3_fab_efab_foreground_color_selector.xml
SHA-384-Digest: XcONovWw2P9NaPXhEAOBQEo4KP+jlpzrCGNPDCgOyh8bU170qbotOYkY
z5xw/pNd
Name: res/-Q.xml
SHA-384-Digest: yO77M+XVq7e/o6wgojfveaxj8YMcyWcornn2NEWBgd2pnGpXsl+FhL0b
SKz71YuO
Name: res/eW.xml
SHA-384-Digest: 8Zh54igPFbf/whk0e3qFmiouH+np2ENPMzDXV3jeBC6QAsYQwGLkdVl9
a3zm4lyX
Name: res/color/m3_timepicker_button_ripple_color.xml
SHA-384-Digest: 8HsWYQp68/xydck5YNBXoDx6RDCLiOx8HurkZxE/LwwSvMZ8Rpf7B+TA
1Q8UpoWQ
Name: res/5l.xml
SHA-384-Digest: Gi5U5uLrLgec54ea9r7v0+XeeAQrdqG56LSryMukKqxTqfd8MZ16PlAp
uU0hEUoo
Name: res/9H.xml
SHA-384-Digest: M2aL9kkCXk0vdVd6FtJ7CRXt7YjNdhMagLUdTvaV3J2EZ6pVaPXjwSY5
9tnyZ8vZ
Name: res/NJ.xml
SHA-384-Digest: eFVBed+rhPyl7FRs160bCh5NU4A1BBqbnxrTzdK6Gnkqu+f0FRTKVjQk
0K1aIbP2
Name: res/color/m3_appbar_overlay_color.xml
SHA-384-Digest: Pn0kbO0S7R6rCgGt1wD+S3nac8Do130YiH4CqH9eMJhDZvXENa74vl7X
3mm22AJ7
Name: res/xy.xml
SHA-384-Digest: 9LqV1zCvphEN6YF/MJhI7Fx1veX143KrEa3YpnjmgOhk4H35aJUJ5d0F
3lS7QseA
Name: assets/shaders/fragment_shader_transformation_external_yuv_es3.gls
l
SHA-384-Digest: LF/GIMUkyaAojDhBSOWQzcYfU6nezvVkHXHkmUjBmwg3iq3CGrsW8fv/
0bS4upX4
Name: res/dX.xml
SHA-384-Digest: Mz/BgtjyG9RTWR0f51KdAXoDMIgLFmhTFOkXms1GmAda+FKLqzDuchu3
/ZXp4FG8
Name: res/j4.png
SHA-384-Digest: 4lPcHNIT1QuAQ+AQmDPx2mzkd91pF5qDY0DZroaHkHrwy9yVhbF+xSlS
T+WJf3I2
Name: res/H-.png
SHA-384-Digest: nTOpWy8C2zJIdHR9wn/mB+Z7qP53y8lAC6vqYYXNi5LI+B9o906lolg/
jLRIur4A
Name: res/w7.png
SHA-384-Digest: BkP02V9ONzspsPwrSNlnP25XUVpkKULYVrJk4arsVBb3ZleWTkZqKSaf
wUs04Knh
Name: assets/shaders/fragment_shader_transformation_sdr_external_es2.gls
l
SHA-384-Digest: fWK3273Xu6ghUW6TPS0GRxVxflH3RxIHfPzJRQwjMdAVr4bEXISoRvEL
a3Uc/zuj
Name: res/1I.xml
SHA-384-Digest: wtEsKTeE4yshJlqOXcozBWb1hg9s4sYLI9E5hgf/dgKr0qSqbyHUVje1
7TGJAIFp
Name: res/C_.9.png
SHA-384-Digest: Z+QlwCOk1uEvGjtO2VvpjkG5y1W9rc5fPoAwSwV/dgmhDNYt9KIkcrj8
1o5+Orty
Name: assets/images/ic_local.svg
SHA-384-Digest: 8vWOObavSIP6+5fk3hcmb2UV+WQqb3ILhOnbif0KLHCnIIH/JwJh4vMA
3kGZP07d
Name: res/color/m3_fab_efab_background_color_selector.xml
SHA-384-Digest: Ry1ojnu9ZPAVI6+v4gUBaFKxIpORl3V2AlXXfMmBLNAB8tx3knPSi7xG
8TFPsHhd
Name: res/go.xml
SHA-384-Digest: MKDLuHvuhGWO4/e7Ut6YciqjBK8SAO3IXRdd8e08dEr754n5JW2JVrj+
L681agJh
Name: res/hP.xml
SHA-384-Digest: y+n/lj9kvCHWFezgXXhOSWxo5cZDwKOLgj92oYA8rG/AX7eHC1y8Zp2H
D39aoGOd
Name: res/SN.xml
SHA-384-Digest: T7GwTvHp90gD6AjanAPBaSswc1f2ucoZXF/7CL1lDZT49GGoMmHrmqZr
K1GfuJtz
Name: res/wb.png
SHA-384-Digest: 0xyxGrI38r67apMVpMWaJi0EWSfbNT66OZBlYLqDkrlJUTMlaMz/9mV1
IFeVCY9Z
Name: res/rj.9.png
SHA-384-Digest: VsVVW0eDg7oxBmfvLuXAT78iVKcZlouKFkfLuCIrMP4ZyDuJQFArUZFG
MxWbA6/h
Name: META-INF/com.google.android.material_material.version
SHA-384-Digest: N5xJ/3/5IuujFLFLlnVXu3lit0K48s5k7kM7GRnzVKtOHBnwJNsNjgmb
yvVFx4M1
Name: res/t8.xml
SHA-384-Digest: JoRa2mrvHK9zMM0cTbPn2sP+lgTA3emwErTtoStw8e8nZm7cBePItPdD
Q2HCHqcg
Name: res/XW1.xml
SHA-384-Digest: Svjexdh2oPS5KrAk+x6/phnAhpVklCWm5t+82ihPVPSkFzYt+LT2jeyD
hkV0li5Q
Name: res/color-v31/m3_ref_palette_dynamic_neutral6.xml
SHA-384-Digest: tVb+FcPbgJnML2JydgbEbVoFQcIBEpakhz7GTVUNpIkOdp1IquVl8+XG
mOF9f8ga
Name: res/Fg.xml
SHA-384-Digest: 01S44LSuVVZPcWLdc3/ip0wlKdwaF9Ct5BLR+NfKswDpTS9L8Iv2AljS
32K4/qau
Name: res/color/mtrl_outlined_icon_tint.xml
SHA-384-Digest: FhWG/B0RyTfDtC3WkGStJolH1JLWvHO/bVM3XwNk2pYPaT/y1fbFexAk
umO83ros
Name: res/AI.png
SHA-384-Digest: lWBKtFFb1zXBBEG25mtOpR3nQpjP5nLt0UKyesgTNFhfFq5p6cKrkx0N
gLngqqnx
Name: org/fourthline/cling/support/avtransport/metadata-1.01-avt.xsd
SHA-384-Digest: 8cRfvTw8xArlxnGc1BYUUX2T3747uf+H7yRMQbuLjSyEJF90hnp0YYl5
EYDNNQmF
Name: res/8k.png
SHA-384-Digest: LUQd58RART329VEsOrb6d/KQH+xyN6xY2Jaf1POMGIkt0azDmhCplB75
IvQD7iel
Name: res/x3.9.png
SHA-384-Digest: h5qGWhSfvI8o6QxJw7TZFllOrY1VW4rwOX/rSZHCxDvF8f6vGjZDMQNs
6B/J4sgg
Name: res/h8.png
SHA-384-Digest: pt0hawIg/0C1GtJrZS0oMvULvUfPgjrkgMe7qlvnJB/bHptBss60ZQuh
MWuy3I0Q
Name: res/uS.xml
SHA-384-Digest: 4v7KwhOgXXtZtyDLYeRx5WAwWK+jsF9mHGAt1qVCBNIyX9lA+HPOYoWm
29u0jcsG
Name: res/color/mtrl_tabs_legacy_text_color_selector.xml
SHA-384-Digest: dlX6w0q4JLNkNkiwSmAolXf9vMWIQOoZj4Ro6cxcQaGA/SkaOFFbxlkn
lCEuhfZ1
Name: res/Ja.xml
SHA-384-Digest: n4/mSFpwVeWeZFUKUT+xa8Yg4XL1rxnncjiNWlzyjOW9pUWIEq9s4VFn
Tq34mvlS
Name: res/0x.9.png
SHA-384-Digest: BJF9jriH5l9IE1TEoEcTNGd276enFI8gUSPMCRcxLA860IgBy93LCl/l
BLgydu43
Name: res/8t.xml
SHA-384-Digest: c+5aAgiBRH7xXH6iPnRQjSWwJ4UUdcNe2GwMYGQBBJWma/rT8jzmMxcz
uCi9p0nP
Name: org/eclipse/jetty/server/nio/jmx/SelectChannelConnector-mbean.prop
erties
SHA-384-Digest: adW0/S3okDeqP+YjeZn5SU8ZrGdQKaVaeBm2yXlCFYByPlUaxYuX2yFz
CzeWRSHt
Name: res/color/m3_textfield_indicator_text_color.xml
SHA-384-Digest: dVZPl0AhjHdoSZ4E7I7aywOK2YXAIQcpGMPNXQuE7y95Gcp9W+T/Q+lU
C+efPu6w
Name: META-INF/androidx.activity_activity-ktx.version
SHA-384-Digest: 6XIsDSwtqh+9mYPN6NPMA0XzFB9/VtvGpOi33AC3zJC12Gpr8cTWgr2A
SLm28X7C
Name: res/color/nav.xml
SHA-384-Digest: E5jAlU3XjQwqMRslQcVdOZsKS50zUA7usgPqay97qIEY8Ahnehj/DjKq
utIGRFvs
Name: res/color/m3_default_color_primary_text.xml
SHA-384-Digest: EdcYR02UduSDsKoOMDHgZwbLQG6rzC+vzuegoeAOQa2HAQvN1+EEKfoi
OA2JXPtk
Name: res/7s1.xml
SHA-384-Digest: waUMSteYxVkNzYU6JoSq8JBd/hyLY/hHV6J8jbvhOZ3RqXasT8AfZFd+
3wcVPnq8
Name: res/kg.xml
SHA-384-Digest: 2ZfJ56S/vUpqBHjO3c7Uv1zWStT97hyIpu5SjmwpI3frduuEaEnODC/B
A0kBRBaz
Name: res/Qp.xml
SHA-384-Digest: M6TVT7J+LS9BiMxVGYzsm2Yv2xQJ0zf1HiCqFYg73YXgW/kiQ/Jh4jKQ
CQ1NrcFa
Name: res/2F.xml
SHA-384-Digest: hf8rEiawqDM0BRQrARjvdU4cMki28yRynukQB0+7Ko88YzHlj9VpG0vs
Il0S3TOC
Name: res/no.xml
SHA-384-Digest: eHyVrtNosHW/u6VbA3pnKRQfi3bmOGt6a9PkIjo0hyi7OUocQQVJ1lBW
/I4/FjyB
Name: res/oP.xml
SHA-384-Digest: Z/YAq2ZQWJ6ZM9deyzeOI8qf7NCWxrghluL9Dz5tRfYiUXNnbx0qo6sA
VYpwCcvH
Name: res/ZN.xml
SHA-384-Digest: RTvJ1txSPAQ4HjghBsU6Hw7MidMucRxA3rWpTZ/lmAgpfgwexpwYCge9
09id4KIe
Name: res/oa.xml
SHA-384-Digest: ULU1Yi5WahFmQCOrZKrjsZHka7jun/1CCJ4W1BA0gpgmKPp/9936PI38
RulLP4tH
Name: res/pB.xml
SHA-384-Digest: hRpEHN8JmbThtwpcxGpLxQ5kjnRaZd/BeEapVZxzWSYwG8e/Ww/RwDkx
R6OA77zl
Name: org/eclipse/jetty/server/handler/jmx/HandlerCollection-mbean.prope
rties
SHA-384-Digest: KwhqxzsYYuRu2fGzx9TtHF0qFshcQ6zrJdG18jXK3cynUPsJtsr3VazZ
VMfVoREC
Name: res/62.9.png
SHA-384-Digest: E1iwiqBYeG3BQyCphW/neyngX8yuVafNDGV7Op7VXVCRzPcLZ5UuSmAV
kARShvjG
Name: res/color/m3_primary_text_disable_only.xml
SHA-384-Digest: P56pjdplPihlT3ktiZgopEp5/pGYSG60CBg7XkMIHyklKlO8zHu02OYS
Nc/fGxSe
Name: res/K5.png
SHA-384-Digest: qRc/ZHqRSawoYs2gjjq/3abGps61JQAz0cIf/b+0Tl1ojf+/wXwm3hHF
7OL7x6tx
Name: res/-5.xml
SHA-384-Digest: IgzKpIybHAS5H0ciEUGA97aqEGYLXZrQbRmcFubyDnlYqvv69ov4GBH0
KA/wzhHh
Name: res/nf.png
SHA-384-Digest: AmNwLljlUKBGxWw7HywNZxQIqUjRTNhRsLpBr/+l9oVTD1q6UzckiyYX
TRMIN50c
Name: res/1J.9.png
SHA-384-Digest: 4rFXuE4U9es13mg+45R9PD80Eof+HXAi7Ra8IJcK+KqCyV4o7zsPY6jN
q+vneuMS
Name: res/color/abc_hint_foreground_material_light.xml
SHA-384-Digest: pH8G032JRxCu2MwgK/uUfmbGMopNWlvhAAz+j/x2dxWO1cJvlAcC3CRD
bn0JOcDm
Name: res/h4.xml
SHA-384-Digest: rGVqy7qLlVIWlnFBMiTar/0kRYSWiqSbt1RnHNSSyH4zh95TTz/IQ4UW
IK+Zik/N
Name: res/By1.xml
SHA-384-Digest: IL1qGi8N+0tpKZLU4D6gnmep+HJJ/D7CJERnFuoFHk9BH7cB890vLsEl
rwTh9zMI
Name: res/te.xml
SHA-384-Digest: hVHsEPmrEqfKGmQ5z68SOiTaFJ409SOoO+03ps7r9a7k5Et1ZoiMVsxD
7idrbjct
Name: res/color/material_on_surface_emphasis_high_type.xml
SHA-384-Digest: u8aFG/TRw4c4XtA6RogVkUQ9r3OUMd+31VKEbyTj2NhkFxRzvDhXiZj+
Tnj7QMWz
Name: res/Mv.xml
SHA-384-Digest: HmtSxPRoYAOy3BahIr6gBvL6bXF36D+hBWhThmVY3R6CR90U/r+KlvC/
mnXESmKj
Name: res/color/mtrl_filled_background_color.xml
SHA-384-Digest: ENu/Vu0ichY0Xb+8uIjgzLmnoOZZ2LKtVaLV9zxX209yRWSDGbkya2CU
YD++0x+m
Name: res/mr.xml
SHA-384-Digest: gjfyouDmPz48F7EerJsKHFhK5pkyqKeQDzmpq4PmpWFz9HcmConqHJ+/
fVvymJtM
Name: META-INF/androidx.slidingpanelayout_slidingpanelayout.version
SHA-384-Digest: My7SclyusH8gdCbsiQ5IlNIcU3BGBnA7xcj3jsVjMmNPyWevtmjnelRu
frBBek6e
Name: res/EP.png
SHA-384-Digest: /Bdfc9LGU/FG9J2atjlk8xuzGi445rKRtpdGXWscesjXf4k3A11hzmm0
+N3lY5EI
Name: res/8K.xml
SHA-384-Digest: Hra24uxhfaooUsRYsPKkBj1OIRrpKrSWHFPMP8HeRYngoVz8nBF0QNc+
cLYXYV8m
Name: res/M-.xml
SHA-384-Digest: QmJjgTAnRS/PBGTNv0P2rIkCh4kyZ/nRp7NhfBf0q5fHHTTonzkPLSYv
H6WGQOlZ
Name: res/an.xml
SHA-384-Digest: selVhFFufntqPDNUdhLMg5ebeI7SuRtRXGqsHtJrL71jgUZKkFdnutPc
C12ZVq1V
Name: res/c0.xml
SHA-384-Digest: a3Mi6zGp+XsCNuVloXjgPSN2SEdA2kaEWQ91xC3tUuR0mk7oeH0WQuvM
l3IxT8QP
Name: res/yi.xml
SHA-384-Digest: /E5eYQff2QVy0VJgLdi3x38YRNTb+S8F7LKmIhdErpso4RYBTdodKIXz
xk6301Vq
Name: META-INF/androidx.dynamicanimation_dynamicanimation.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/color/m3_tonal_button_ripple_color_selector.xml
SHA-384-Digest: TOcVEP2bRG/ECOSWdZopFTfkCPbmOOXwSP7VNBB08l2zFGSNzpAt11fi
DM+D6jLE
Name: res/color/material_on_background_emphasis_high_type.xml
SHA-384-Digest: AyHj7E5HXaIQsJGt/QyiZ3Z1IrN6DpoFsyJjbEubaF35PGRDCTrC+jR5
ydqrbC2Q
Name: res/sA.9.png
SHA-384-Digest: YpBpURel+q3N6QVXkBX+d5/8KbIMm5GMMvBUt0A4Y2isow9Ycpcle9g0
bfm0Kb/f
Name: res/PF.xml
SHA-384-Digest: sub6d++fK9vUtIkpn2/nbw2oZESoZ1E6/4PpQHP/mq5gN25eO/PmJgF1
h2UBkaqH
Name: res/z9.9.png
SHA-384-Digest: KGRFTyJ62Lzr1W9uucCICy/4SpGFfz/D9wtpTQNhwLRm2+Mfx+LN+t7Y
tVNjnwkq
Name: res/eH.xml
SHA-384-Digest: em61gYbaTGC+gnfDVGG50jYbGXOIZg3YFFC24SdjSkxOhYydFJdFRpmw
F+MfGZpb
Name: res/4Q.xml
SHA-384-Digest: wELXa9QW5XbGfkWfKkrcoZYkhKFq7c3i16ITzyq/zLrQjbULQHZR6lyd
97kSLN8l
Name: res/Av.png
SHA-384-Digest: xwVy1iYl+Pgg5e2L1rYrzFvDGQltdb0h6Uxytm98RlkcwfeAJV7g32OL
o9T4Sl0T
Name: res/color-v31/m3_dynamic_hint_foreground.xml
SHA-384-Digest: sRnnD47Yr95n3t7FGvUFCRlJ/Pyl+uJQE89jJZCYdK12V8gaYOqYjSWj
JLqeTnhV
Name: res/zL.png
SHA-384-Digest: M9bScFtrwa9aBvoxY7EdHYRBWClDBZYUWDdWxsBzKTfa1aPSc/GQiZgQ
FO0pBHao
Name: res/uh.png
SHA-384-Digest: QgIONFcr9YOZwMMkvhW6yC3YBAtIno52oRX/QyhO37+uRICA2pjHFIco
G6uLzGrf
Name: res/UP.png
SHA-384-Digest: AulsM3ZcxloJXUOwRXQCidOeQ25O9EXUyavnvHScgOifg74AB+r25K24
fYQH9Cte
Name: res/V1.png
SHA-384-Digest: QCXHTaIafD9ddgyyfkGhM/WgsXH9F812oj7+cnFrp3nxUzPi/aRHED4z
b0409nZ9
Name: res/q2.xml
SHA-384-Digest: o3XawdYwNlZgP1qFGPK2osKjzNSN/aT/Q2i3+mzBNp5iTDe3aWheyyu2
e5j4/M7R
Name: res/4S.xml
SHA-384-Digest: dJzi+3EOtXEUBtod78a8XgWD/q55D+Ww7oy+s8uJH5a5RwgtbxDTnLlc
JLykNu9e
Name: res/97.xml
SHA-384-Digest: LcFsY3sWrskIg/lREszJIFaYDsl8Ui2t7PNp6P58LVLQg6Wn2AgOQi5X
6qbFlNxk
Name: res/Hx.png
SHA-384-Digest: 8E6n8I9te3x9EBxE1qXUm1ojWh27nG9cLhLKQsltE8U7ixrB+vxdsVZJ
YQ848Cn/
Name: res/color/material_personalized__highlighted_text.xml
SHA-384-Digest: /O86Bji8Hp6ueEscGewFkn4qMlcXgNmeUoWgGzCzRoGJTIlDK/ZDl4Ai
bFpsUiDo
Name: res/qp.png
SHA-384-Digest: 5r3pT9xZGjYs0x0erbfB+A2Th06zedBsx0WDDA3qdVKp+dcFBR/YG1jB
U26j8iF9
Name: res/cy.xml
SHA-384-Digest: i2HDgyO8Gh6AwqC+BfRMNZtCHKH9T0GV6RNPDkIU7a16i/sbAfL470vn
mfsoGUMA
Name: res/Cp.png
SHA-384-Digest: L7uF1VW+jgyXg51KJVMNgmjIrAuDYm5pWNGmo2JP+zRCWej0V9d7YDD7
jNxcN/Js
Name: lib/arm64-v8a/libavcodec.so
SHA-384-Digest: Gjk1qNWU27hfomK+/4P1VKUUlXgn/0K2GViERLf/9jecmrbHn+xmgFkb
vjFWkIva
Name: res/Ro.png
SHA-384-Digest: eWGrTI1GyexdfEgas/1eLnbi8Z+XNMtQcQbOqPrWS/EoTJsC3T2UTU2L
jFj0/h3G
Name: res/Nl.png
SHA-384-Digest: bfOyJ8MGuwbPB8Q7p74f0Av7DAI0xY3xtLhJ9+//h7Yu4/t5wNPjKDP6
cQG7Y6Q/
Name: res/OM.png
SHA-384-Digest: PlW+A3hCM024xgRfFXVkj+DhbSvd5mn+4qea3GGHvN0uKBHR75s8LQgY
Eexh30B2
Name: res/fp.xml
SHA-384-Digest: bV5rIkVxV1nNFY9mQkTkoQx20cImCC7IuUxktdNqGwdvTDBny/s8ZwTo
eO7575aN
Name: res/Kd.png
SHA-384-Digest: cmqZV+joCsoZ5rlFxny7xGnlwHN6vjcRrLId3Ha10gTFMZ/5rs6EeIbD
F50l//nb
Name: res/uj.9.png
SHA-384-Digest: LIC/772c4l42Gx47AjMZ8oxTJ5TLLiFy+QGGxf88JSXA/8I+k60sL3np
hZovYUxK
Name: res/bm.xml
SHA-384-Digest: J95UY6K5s5wwOweIkqU7TdPAsq1DkUApoYS3VuMrvTxad7nBStWr5rOc
TlUQAuIV
Name: res/ej.9.png
SHA-384-Digest: nCGpqni5PhvfilXFqTcZFqMHuecWmpOBBxo9qT33++to8FC7lHET8mme
CRhYvSF+
Name: res/Fx.png
SHA-384-Digest: nFoYQyhtudi+28+gb4oxBm9H251uHwY/DdFpPtaXIwGYwKVkV+GZH+eg
E/cHrZ24
Name: res/GY.png
SHA-384-Digest: XEJB7J/SZcKhwhAdCOZVJ3njoYJPs8yO8Fkn4jM/6gAMmjwJMa4IGobL
EaEzvX/p
Name: res/D7.png
SHA-384-Digest: tSs46rj5U4lCXfnOZXxuRi+ycHb7/ZdbLWHPvidKEz10nXO6Ht3aN5nn
4Px1AYCi
Name: res/OX.xml
SHA-384-Digest: p98S/bb46KkP/lfdhRgUrDkoeioQIyPSjcifztyuhlLOLoTY0hNLcPLh
k67yYrHH
Name: res/color/material_timepicker_modebutton_tint.xml
SHA-384-Digest: VYTdPULKYZKR1m/NIFvWkolFxakR9ZPbO9A1qOLmBr61TWQfxVza8M6o
UotbYMKJ
Name: res/5N.xml
SHA-384-Digest: j4wXXpCjw+uLvH+wSOdOpJsSGT8Rx7W9JvJNR7xDEseiwEX+xeA/AA7w
RtccHiHP
Name: res/color/m3_highlighted_text.xml
SHA-384-Digest: NbKRnSQam26NpocRJ6Jy1z5ANNPW/1xW1HIuj1dCR150z7VFDnwCADau
vrUYEIPp
Name: res/color/material_slider_active_track_color.xml
SHA-384-Digest: Wk4MKTFpLX6rTo/mImK5IgVtD8r0/aaxA5phu2fh7pJQYmj/QdyjCvEE
xEHhw7wI
Name: res/sH.xml
SHA-384-Digest: C0MUdjZnVnfiZz4MCfYgv9LeC4DxgxF+E7mQXqCyL0xCdNvAVzhuuT8q
n/tNkKEQ
Name: res/RD.xml
SHA-384-Digest: O87vIPFgyoFjbbLsU6VuiCRa7AHWtOFUnAZKeJnto0Nu6WvaaLH3SmCN
HtoIP3Dh
Name: res/iZ1.xml
SHA-384-Digest: PNHzF0wB5hvjLCuXjCFCVaRvlRT34lrqmrpWdzt42NNz952Y9Qdr6QeK
QKsBLhu8
Name: res/Uf.xml
SHA-384-Digest: hKHiawrf9oDCFZ5AFJWZmUNbeWRFs34q0Pxu2j7MsGB3ipyMYjKg4fqc
KUYrTy9/
Name: res/color/abc_tint_default.xml
SHA-384-Digest: +cEAKrYwxe08txliaECcfiT8j7nJ3dTXS1Ow26P99gzH/Q5btStAvPVg
QmpIX9Ql
Name: res/hp.xml
SHA-384-Digest: jP4xcn6itWt3JYYB9smTtsd/DpN7bGJWl+vwykP52Ivm5EB4ixCrTE54
3MdyqMHJ
Name: res/iQ.xml
SHA-384-Digest: 5GACwHumBU/D6t7x1aXjSsHoNXJ4DJDpy4Yli7M9So3AkcuXN/6wCA1I
+tsrxO9J
Name: res/JP.xml
SHA-384-Digest: TBTPPmSqAaokBshQLbhyM9pY87T2VHDKrmNI0LXYJy6h1QJQ7aT2p7FV
j8aK2xmW
Name: res/ZC.xml
SHA-384-Digest: 85VUeF8N4BgRZiy32CQ5KEbpohcTbISUHcXKyE/AEGuinKsyB7ezH8fk
OlKtdoww
Name: res/Fm.png
SHA-384-Digest: 1N/9Ka8cugGI4poe/fFFuoHbzBYhTXZvYbCyrx75VuULL7LQYo6OJ0yJ
XAJU8aq5
Name: res/aR.png
SHA-384-Digest: ixG4AlR77XgbHgqltV8tQzO1OcKYp0ud1GLqeNg2QzjT6Ewrqemg6hfL
MDOvC24D
Name: res/3-.png
SHA-384-Digest: efP32L0TVK2LOQWJzKXma5zPqJZTrx4MNXyjzb7O8Zh+d0pTm+qLFN4Y
Eni/cyon
Name: res/color/m3_button_ripple_color.xml
SHA-384-Digest: 6mNkhk+5L5hM0GYIhA8so0FeKkJzhbY5GjLvnLTJc5ajPUQftN2E8NYL
ZIXF1NMK
Name: res/color/epg.xml
SHA-384-Digest: JgOXwRw8vpWNjHTB+/qP7HliA7eaJrmWNC8cE2VzkcCkIwGuk3Ldevj5
Fzsuh99c
Name: res/color/mtrl_btn_stroke_color_selector.xml
SHA-384-Digest: 4btJMMudcXw9wc6HFOTVPFDLHVhRFW79ZsQAxggE1o4boxHHv4DtB6ez
QROls5eb
Name: res/AE.xml
SHA-384-Digest: STCsBM7uAi7RAcpWDY1cTqS8pJsapCeKtsInTKElC7ESbegBg28iZmy9
gcA2snNR
Name: res/Ws.xml
SHA-384-Digest: VmyGzUaYiBT871UQ0XU+nkrhxFpKHGggG2Pv+syS+Z2WZzJJisVBDpAe
1a7X10Cb
Name: res/XT.xml
SHA-384-Digest: CtL6cAt/cDGsqs+9RZExHl3g1tMEudpaaoSej4P8l6DqbWc0Eayz7WGX
NXPNQLbx
Name: org/seamless/swing/logging/img/trace.png
SHA-384-Digest: 8CiW3HiZBYHjabJjE/OQReHmwk9ANZxpB/6cbcltfSDZt+xGfEfNAfhe
LG1vdoi7
Name: res/color/m3_fab_ripple_color_selector.xml
SHA-384-Digest: eg6jMYelAq46XEu2ubT0nrC2iYREG20EWtHpfO6GQ1++JAVGBuTPNOoZ
71ulXMmG
Name: res/bD.png
SHA-384-Digest: CgT03T0ti93Ko32vRf9R0JQUvUuCJlc84ymc/iFnhtD+3EsPDdRuzuFA
Qo82J8RC
Name: res/a0.xml
SHA-384-Digest: CgC7OKmsdbjnkysHsjVhqXvwg12RgqlAXuUk50tAAPiyGRuzovDXE3Ja
0Z4Vq4gZ
Name: org/seamless/swing/logging/img/warn.png
SHA-384-Digest: yuSioLxPoJZvz4qTayHzQyFM5CFDrbouYwvRicjY+0OIZt8SuFgY758I
saS0mReV
Name: res/6x.xml
SHA-384-Digest: DLmSQ0R2D3PCjeTBzMjY1VIOmkHT/zDKl7bW13sis/ufcu0UZJpOpL5N
/tGYCoMC
Name: res/4B.xml
SHA-384-Digest: 89vkhsXw3ZATt8egcEuT76/8tqvkHiCOmtC4Ruz3gqZILQoYbnZsazDh
R8hwLwK2
Name: res/AG.xml
SHA-384-Digest: Vc4LW7zzK685t5Pv81BkmByKGACiGeh4uge2CP/Fooo4enGxX0nouyks
X4K8thaL
Name: res/U0.xml
SHA-384-Digest: aWwxY4d9OSu9C0hcVvm4Mj7o8vEt3d7wl4RGNUgth/Ov83xx1uO9LVyo
+WGhj0Gi
Name: res/XR.xml
SHA-384-Digest: Qxc5/InaTxNheA5XEJLyKiTRihYKE2R9bsbBQyNfqSKEAI1AfLlA+9gj
q7H0+ti7
Name: res/Y3.xml
SHA-384-Digest: 4iteQY+nvmmzcDKYfX4YEez4NmVlfrZdp26dgmO9dGV5fsm5V/on+moe
eIs49sI1
Name: org/eclipse/jetty/server/handler/jmx/ContextHandler-mbean.properti
es
SHA-384-Digest: 7jxuX7aC0VZxWC3BJ4iOK1s1dp7NHJxJLqF/FPkfcWYAbF0MU/SpP2vE
REIUm6LK
Name: org/mozilla/javascript/resources/Messages.properties
SHA-384-Digest: 6W25lH3ydRSnGB+pRHth139LbnOTgrodTLmhZO+WUlQ2UNCMDOqiSLK2
oixbMokV
Name: javax/servlet/http/LocalStrings_ja.properties
SHA-384-Digest: cmdcgbA7fV8TE67neoojD2Yx9jw1VSKV2MdK5HRiz2X0K+avqBgPIiym
JMo8G/fl
Name: res/color/nav_item.xml
SHA-384-Digest: r3Y5O13b3dPeM6S6OhIDkCavzbc9plah32dPCD/apVB0JRftvE2v6px3
kBKmr0u9
Name: META-INF/androidx.versionedparcelable_versionedparcelable.version
SHA-384-Digest: ITmiWuAF+c+Pj4UAzIIJAQIn3XFvV1dCIdAHYoSmOJvKd6lWT5XSw1mI
zzCA0Q64
Name: res/tp.xml
SHA-384-Digest: K+Ng/iqk4ylzhaDiy2x9l1NSCpsR8wbhc44SM26QRr3+PcGSPJ6hKjgv
RY6m8NQL
Name: res/color/m3_card_stroke_color.xml
SHA-384-Digest: fVkycqTQHDkdVwYWIqfhwA1kRvwtydXi9r7M6eehacjP6DOSKtUVNJrX
oX9xPbfX
Name: res/color/mtrl_text_btn_text_color_selector.xml
SHA-384-Digest: 4aB1eTF+1KMws8nZIfYt7exV2Au5fBPJooATECId1s9fb2gWQaKo+5u4
k9Pzo1sw
Name: res/ls.xml
SHA-384-Digest: mmfdN8K0BTrHT4weF+1QDBcuJtNQF7gLtcSxOLnEshKKD7QDHNyM54Dv
8JFuqfVo
Name: res/uL.9.png
SHA-384-Digest: Ytayy12mP65CsWIk6holCaxxlt9Uq8iiYgEQPPa10v6XQrz0xU5xXKxu
P3b9mBSK
Name: res/27.xml
SHA-384-Digest: J/oS46CJQerPsxT4fwfyvFW4mlM4B5z32Gw4org9bmiNqlepe1SFOp8j
LVtD+RO7
Name: res/2H.xml
SHA-384-Digest: zSDqiRllATYoaJ1DlXvM4sBzgRt0WBLwmoJI8dEfhqpPexqHgeZBrVJT
X1cZ7Z7J
Name: res/color/m3_dark_primary_text_disable_only.xml
SHA-384-Digest: 7BXSdqbaKlmLte7ucuQAOIOGK9lqgGGtiI8LkOKcyLfz+/O4ByDxjAXY
62DV2nVP
Name: res/Y9.png
SHA-384-Digest: ixG4AlR77XgbHgqltV8tQzO1OcKYp0ud1GLqeNg2QzjT6Ewrqemg6hfL
MDOvC24D
Name: res/Jl.xml
SHA-384-Digest: EbzS8ugfZb74oqfYIyVUFId5uh6s8Wld5DdWGpFTmwykPspEx/4aMH7q
ck+cxFG4
Name: res/xj.xml
SHA-384-Digest: 0FC5f690i8x0RbTCbM3JMts/aoArXTS6tTmnUCYxxL1IFiR+C5K6p02b
md//Rdzu
Name: res/XY1.xml
SHA-384-Digest: hreTfFKV0wCmb3EpFOk/bYWTZkOzLVT9g/d2q4WiFciGZqq0SYaZc3kC
aomnG5X1
Name: res/4o.xml
SHA-384-Digest: mqI9DvoN4Mf+xdDOlj0QL1PBJVJxRGj8MYiDtkKlbnvuN/J40nCL5JW7
M3Hj1wXG
Name: res/61.xml
SHA-384-Digest: EuhTzI6TSc9BxQ7QAtefxvUOGdl1KDBaxR7EvhJlSU1ETgbgIZxdQH62
Mc1Zo+0c
Name: res/ly.png
SHA-384-Digest: t8j0+3o34MDNWsrvlbz8NMs6hEImU9enkScJ6873pNqb7bznYEHppW6J
f2qwDaNs
Name: res/tg.xml
SHA-384-Digest: RsHxOjyRzKPYWFsl78I9KNBuXZKcwRbFf7RVtp1vxlwIvrpJZaFv4E6n
y5qws6YI
Name: res/Aa.xml
SHA-384-Digest: XEeDLJ872ybiFFppBQwodAklQyFCaoMBMQWVtbrRBxdLTev7dPOwLoFq
bZ8fAe4m
Name: res/c2.xml
SHA-384-Digest: W28kAUa53Xq7pK28hBphrLOqVKVnc06rXNwZRDGdh+Xh46pqY3JO20R3
eE35vpKK
Name: res/color/material_on_surface_emphasis_medium.xml
SHA-384-Digest: XhOBVNP5h7KcrI7ceuMjS22a6V3JkjP9TUlH6cg9VP/5HMLhX/4yFDb4
Pw/3SwhC
Name: res/Y7.9.png
SHA-384-Digest: Gqs7POVW+neU7vEVU6o9Luffs3InQraH2EvdYFpX4w/1fRNo8fIaEvRE
dprXcN/j
Name: res/4F.png
SHA-384-Digest: f0xepWz23AgkFXG2phToRkYmCXEufIHjJGotxZlTm/MYOb/eUGlsESpe
YJZFM8u6
Name: res/Bb.png
SHA-384-Digest: Aw9tasy3yIAucr6N7QxJahCAowF1MdB7duiSPMuJxn9ULPtkKbPUqvoJ
JuzSvp3f
Name: res/xo1.xml
SHA-384-Digest: 9FUdZvQ7qvH8nBYnh5N/U8CW8QmNmbv/KUBzzQCqahBHeGVmGk02z/EI
gdfHJYkJ
Name: res/ay.xml
SHA-384-Digest: x9fqsGVobxLfYxeMBkspfUxp+BFQEXKrkfQAcfJprPln8mHljA+tl4Ei
FlcfYN6N
Name: res/TB.png
SHA-384-Digest: 4xtU22z3rtlpW3X0ktCR/XHIkdugMJiL3KEaOTxjT5/JK8MrziXUG1iZ
kG/cRs9L
Name: res/ud.xml
SHA-384-Digest: XnPS7KOIl7x19GlaN4Z/ATetY8T5Feo1g1U/dLPZ4AncbfOBFd7OtyMv
wXLs//8z
Name: res/Wd.png
SHA-384-Digest: il3cEnwWODS5BlYyxz54rHsKkj0uIaXRFhcht+pHqXjb/xVAr25ghGqT
gFfSp+zo
Name: assets/shaders/fragment_shader_transformation_hdr_internal_es3.gls
l
SHA-384-Digest: UVK8w0JXUHwo3hu/2uv3wNKb0zjOtdwtGp0m/+BAOtk0sbdKPVp1WuRK
M0yWUfxp
Name: res/7H.xml
SHA-384-Digest: OmitWUC3XbxRwRiXsTVHTkoCZdRf8YFwefEfUE/jDgP3H+5TRiZWbkAu
6OD+ZjlG
Name: res/Z0.xml
SHA-384-Digest: aJ0wxOlVIJNuDhf9sfOFwyqCOSekm5EAtCrsAF0IdDeEsVO/408im4rs
BzDanItl
Name: res/rx.xml
SHA-384-Digest: 72VL8zOvSD3AdDr7cCh9vKr/VQoHhurnRaCQpUTO+Q3lma7V01I16CpX
L3mQmCdp
Name: res/color/abc_hint_foreground_material_dark.xml
SHA-384-Digest: US+8sZcjR0nd6pCzeZd6r/OmcsFIObPuAko90SManh5YfqHh6ye67eu0
4+kNL0v8
Name: res/MO.xml
SHA-384-Digest: RW5+K5faVH0ivr0nYQhaAAdllFXybP/GKj2eEFq+AxFfHN/jlIQoy0gY
QRxYaxeg
Name: res/N0.xml
SHA-384-Digest: r1HXVe8eHB9VfUTT7pI0OruoK1BJcHmJuevEZAPLkLwml/g1PzNHgI7v
FxUGrV/c
Name: res/d3.png
SHA-384-Digest: zFefJChzivE8neVIAIvoy8EoUhdA0ei0cILbDkyyZQ2b1gqB7PlbqXs6
VcKCztP/
Name: res/NP.png
SHA-384-Digest: oSNu//U+Pjxfr7vcmaSIFA3ukotcDwa/d/CfmBAOkMJ1/YMfOEYl6duU
ykN0A9TA
Name: res/Xe.xml
SHA-384-Digest: Mw65DnIGGAmcoBiHvFLvI6O8Kymydieub4RduoOx4cOiqN6NUI5MrgSv
vOdB0adc
Name: res/Mq1.png
SHA-384-Digest: +uyF085+Mj5DOD9NaOzIzHu5xve+FIpIL4D1y4Q33BQGczkyuKdqdB8K
plNZryAT
Name: res/S4.png
SHA-384-Digest: iFdjCiZUjlyjqFoG6flvAK9HrIdqjL1eWobQ/pZP7pZYv+qH1M4BWz6A
VFuAvEpE
Name: res/jN.xml
SHA-384-Digest: Abe/380hXlxRFuCMI1hdhNrdj8RsLSNw5pUsZmptTYlDZQjXe9nLdlYK
M8Fnx9cO
Name: META-INF/androidx.preference_preference.version
SHA-384-Digest: GKqkS0cvyjjgH1wxhzzW5U7S04+7atOY/hnmeP/2ShskJ+QcyWqyhIai
b/q/Jwoe
Name: res/Cc.xml
SHA-384-Digest: LC5xrim1iwFEkMdAGhwV6pRWVs/naSWAag1F0g3kGtJKfUnE4aeUIm11
JwCBzgwp
Name: res/tK.xml
SHA-384-Digest: HxJMmPCg/Q8yM4JZbFi739dCZQupuxUBIZIV1Gc1beGOLcKfqWfkS4ET
WlfyJ4fJ
Name: META-INF/jsoup/LICENSE
SHA-384-Digest: ViHsbIXV5dTBU9sOu1ugX7WMZ8YkTf+papnZSWe/O7VJiEAr5Y9cQFkg
4wu68l7o
Name: res/LJ.xml
SHA-384-Digest: rwkmmcburSsXGuERMX+sNrbjvnvb4dqy7pO0cvzbopW9c5HicWlv/Uth
9NdCz48S
Name: res/qn.xml
SHA-384-Digest: 2pCH2Nw7mY6I7zhlhhZ1zYahP60a0DcE/RPaICJAvs6u+bBRAuS/iJr5
2rMoy7c1
Name: res/sg.9.png
SHA-384-Digest: AiAyJDO+qO2Yf442izLR7o3JPdGvjg0hZxLdP80/GlBkaM1sp9vm0Oyf
cIsBkHm2
Name: res/Ny.xml
SHA-384-Digest: yE8PTKZ2mjQA4+cl11chd6f8d+DcU1xT6ia0aXzfmhacWVw6vB4WIgpS
IXiAF6sx
Name: res/OZ.xml
SHA-384-Digest: yD9/k6dYGIU5c4j1GcNHb6krKYAovfxTe26aWMfRLnSOifV6jVhVuHBu
Ey2IkNPi
Name: res/_I.xml
SHA-384-Digest: OK1B0jksOt2ow6xS6EzNPj6ZXlohqyzctpHv1WCk53qK7K8Hjs6f0Zma
LvT2/2EX
Name: res/NF.xml
SHA-384-Digest: HG4o3ZXR5ZGdW8KWBGvGgVjCS9ofybrz4rfPJO15cRt5IAV/DHhVjCwk
kVtMCwqH
Name: res/Bw.png
SHA-384-Digest: v58rkf2BuRaPVe9ENSB34zklVw3fjmzOx4X0V1/WF5yIQdnvljvQATOT
CB5YuXy4
Name: res/-B.png
SHA-384-Digest: uP+RKCPNYv/hnZypY/E3sY8sxTcRyN8pVIIpMoFfALrQFhZruiBDn6wM
V3PRDg2C
Name: res/Ec.png
SHA-384-Digest: M9bScFtrwa9aBvoxY7EdHYRBWClDBZYUWDdWxsBzKTfa1aPSc/GQiZgQ
FO0pBHao
Name: res/8h.9.png
SHA-384-Digest: xDIHONZDaO44ZoidA//Tq44Kwx6kaD0+q2dimEjfhnsVOZI7dwIvX/M1
ba7GemcK
Name: res/1x.xml
SHA-384-Digest: hl9fMBXqXbJKnt90FNZO7se4+OC/cSfXB77sMVqwxEIIFOXD9kRO7Xx2
uKA2Oemn
Name: res/QK.png
SHA-384-Digest: jOnxz+QpZ3aNZFYnQuC872fBQGm1VhaUv5AG88wYaLDCi7QZQ7+5idP8
cjF3esyP
Name: res/eD.xml
SHA-384-Digest: vTMINW8ChyCqn7vRIsvJ6ge1fHgZpl4IWXuluXoR1JDRBnkooW8JU0FN
j5Td/X+a
Name: res/DZ.xml
SHA-384-Digest: d4RtPmKf6rNI3eI8tfSIY35zGAYjSLiu4twfoN/0IQBDOo9dfAreUhG8
lv5Af4Z0
Name: res/7C.9.png
SHA-384-Digest: H5viSNbscgmAQfeWRNZ6cf2lkJqD2RdywALYU92x0/a0YB3N0swApG49
+NLAEm3q
Name: res/8K1.xml
SHA-384-Digest: 8JRvsrI1nqlGTSUOLw10++AoaRwu/0lFexgR/aLa8Rk+4mIvupFpsXii
5VO/RwtJ
Name: res/color/m3_tabs_icon_color_secondary.xml
SHA-384-Digest: 6Frh9d8825buIgMA4BrcJiQpR+GqNnP1g/ILbRYCkzuPdqZiIAv4eWhY
NEHJeu0T
Name: res/Mt.xml
SHA-384-Digest: RLjtZ031TiPR/kqGUTNqKgi9Xhu6+rcjFF1AiwFgy6cEgRQJEFlXRHNu
G2977KFh
Name: res/D5.xml
SHA-384-Digest: +FytlO28nUviow0fmJrPud2owt2mXZkt4fE1sUONqlkoNSTtWL2nf7+u
bEtQ2ONC
Name: lib/arm64-v8a/libavutil.so
SHA-384-Digest: 3l7puU488sFyoI8ANVfrzQcS4yjmyukXK5mzm6I+5uJQPRO6shnwbY4r
PLxfTQBQ
Name: res/color/m3_chip_assist_text_color.xml
SHA-384-Digest: fSlT0iRm/TgSFTcq+cs9gSNXXeVSKbtPVeY2CaYY/w89p/4sFGYClhVR
7/4jXcK0
Name: res/dv.png
SHA-384-Digest: O9R8a6v3whFVK+WEunyWZ5pFPoNu7Fm88ZwQu1s97PtnzIskxodfBAzD
kcOC3nYc
Name: assets/shaders/fragment_shader_alpha_scale_es2.glsl
SHA-384-Digest: fkULVpGYaZwAnvFy+Nz9f7Rt8d5d44QScof8ZvtlDqrW8cssPQNWE9Yf
3D4+TF4A
Name: res/fg.xml
SHA-384-Digest: RhIx5iOsSp6/gpe/bVfNxL3jSjYz0VGfBO017N24uIkxobAg5E9pj0rT
9NYRxQiZ
Name: res/kr.xml
SHA-384-Digest: m4M5gJirmYiD1dVBUhlZ7CVDA8yZbGAoMTEgLYYc51/OZKLA1NJS5hOS
R409nSJd
Name: org/seamless/swing/logging/img/info.png
SHA-384-Digest: Eduy+0FYIVYttTxaoVLCUqS582Gx92F4aRJS95c9oEsPyPpdNithrRJ+
MNcnc+4J
Name: res/QZ.png
SHA-384-Digest: WCFoNf9Yv1lMuKScbwtVIGF5bi6yFMkFwuPMQoMzG8sA91TF597crAL/
ueoYvhso
Name: res/ZL.xml
SHA-384-Digest: SuqCzbPi4AJJ3KWWxN4SfklV9sUyrygsTHQWrMpxbDwApaUEr/eYuhxA
m4IW2CCm
Name: res/iZ.xml
SHA-384-Digest: EZhsoEtVLCGgnrK70UeP21cDKml0DgofTqd+DP6MpLWn6XaK37fhO9Eb
Vbpfrjn9
Name: res/RM.xml
SHA-384-Digest: VaeXv2DYn5jn/W2FzJH3rh6UyW7KqYgLRGEXAJD1VCW3Ybyzt9O4oYIL
GAn5t8UM
Name: res/w7.xml
SHA-384-Digest: rkEWDARRtpBGvwnT8rxnlmvSN/qZYptahm8uweURXiY0woorLGiI7wuf
8dfX0xi2
Name: res/aT.xml
SHA-384-Digest: ZeJVqlT7qHrzzVUj6fC9oo+Flx4DQO5JAr7oKXHDfwPz9t5rp7i1LNtn
Cpob4gQX
Name: res/color/mtrl_navigation_bar_ripple_color.xml
SHA-384-Digest: 56r7LtTtHv5UbmtHSyTvLdw/7Lk6A8gp45sW1o1A7pprM5InyXMZ3miR
osclmmhV
Name: res/nm.xml
SHA-384-Digest: skN89GDXuPFeCP2HRI+zb5uWDRsv2om8/GbYfuN3UQjIHOxcldqhSQxK
E0Wj4+nr
Name: res/kJ.9.png
SHA-384-Digest: gU1brKsptY+eqlKVBwSRMira+gfhBTzRfkoGFY3v0MW3Jz41+DnHPYlE
YbxH7PLu
Name: lib/arm64-v8a/libxl_thunder_sdk.so
SHA-384-Digest: KAmd0g+GJBnS6qsrxYh48e0SfMRcNSmZZrVS18gglwlMnwVkFqJjBdXB
oh3RvDh7
Name: res/color/m3_timepicker_clock_text_color.xml
SHA-384-Digest: G3kGrZMi5itk/o0FhncF76K8wC2mcGJry2fsgy1iyx0fNO2XOPs2CM5y
JWcuMtmK
Name: res/yO.xml
SHA-384-Digest: HhvWKpoADSombJJnYd8a9tTTZ1WoF+xHSSEDUm+r5aPZRdEI9lCa/HZF
otY2MD+K
Name: res/9N.9.png
SHA-384-Digest: ggR+zN/xoRl8E9KG8cUaTHDgS82KCy7GAAI7nw/6rX93U3nihupNxGF4
G4lS38oh
Name: res/Ha.xml
SHA-384-Digest: QQm4O43EVMCiYo2pc1C6eyOMXwA14izV7HHKZpUCuAReUOSPQy+ygiHQ
2reXEeAe
Name: res/s4.png
SHA-384-Digest: 2OwLZAobfG15CgdiNAMv47TdB5k66yM2l50fLuoiy2FJWmmYG72iTJH6
SwRCKLhX
Name: res/uU.png
SHA-384-Digest: LKn/uz/4hCrcfXJgwQCexQ3md//jDtCeQbuohYCNSFoNK4v75U/Lcigx
+ZHe6LLu
Name: res/AI.xml
SHA-384-Digest: Evdb0kT1ggdtli17h5dPWybwoebhasmCPAUihLUFp1J2W8dCbYvvNda+
zZZJOCxC
Name: res/_p.png
SHA-384-Digest: YO3nwOv7zwgGdijpktjr8EcVt3G22SmAnRw1nZLLGbUz7gRlgpDD5G2C
iGAhJ+95
Name: res/aa.xml
SHA-384-Digest: 2Oo/fB1gz6O/SN8WIFxUo5Ox3/aIq+bEo+WeACqC6qfzCM0wvX4YLUWm
55PgKD/c
Name: res/Bd.xml
SHA-384-Digest: dVr1FaOzMZijrw4vn2wh+iT5KR6vl2tpy3a0gE9hk/1zl++qQu4XxoTK
fVoPy5TN
Name: res/VO.png
SHA-384-Digest: A2r2n7eYEqEv2s5ZuOdpejvC0rA2PsKuP8COl2sOjxhyNam5eUPsMmpA
7onV8pPJ
Name: res/UF.xml
SHA-384-Digest: 4rN42XxYRgN6KaqIJErng3XB0+rYKS5vtxMfPvRyf4v/21zb6XmA7LpT
9jQy2GsS
Name: res/ln.png
SHA-384-Digest: ySHTAqavGGBtIBLhAJsSnJvuAVt5RFEaZQXJMlf3UdjyilpHh9ZzwThv
bLFM1OsX
Name: res/ti.xml
SHA-384-Digest: P3SywT53jXo/lgiFDbhQ8Lo1PXIhl6bAKdvG4SkuMH7YkzEiGkayOenP
UdAWU298
Name: res/uJ.xml
SHA-384-Digest: D5URXOCqC9eHPUckNhPGqNFt+u68oJ1QSRNynpH1noFH171SMfLJ/2Pe
/OhOvNYj
Name: res/MF.9.png
SHA-384-Digest: 2ad2Qv8xmkNXf4xgeYfM3vuEbGsu7Kb5khx2v9+8rWr4qJqZjwHCAEgC
uPKw9Vf0
Name: assets/dexopt/baseline.profm
SHA-384-Digest: IZ1dIeQZ/1IR81sTqPgCbTVjvhWD3RPb6Mdjcnb2pzsjQu1nWz0bTU51
UVJSw5m5
Name: res/L_.xml
SHA-384-Digest: IjDZ1Dv47Cqf38nRtJM//o1BeDKkAnEjNzAzpq+hssCZw6q9zuH7pWK9
5b4lO2so
Name: res/color/mtrl_choice_chip_text_color.xml
SHA-384-Digest: wk1r68gBTOfcGkMw9fN/PBVPowMFRv5bN24b60iAXWalEIMLU7sVhqTj
cE+iW4Zj
Name: res/7N.xml
SHA-384-Digest: R82W2SlnSoR/7xRQ5J+hQed/kFqXQdGXEVzSJDP3e2Gi2/F6jAPhUEtp
MmR4Nf7n
Name: res/TV.xml
SHA-384-Digest: MIGDf/pDZ5PZiKRfzuSpMNg5xKLh/Alto1Rvu9IZniMXEcl9/hUpXKk6
XIFCf0o6
Name: res/U7.xml
SHA-384-Digest: /WGGFmM8PBQyCLVI5ZvpT6kZCdvld1JFCrh5lQVEamuooumbOTWlY9ec
E58wH7Pb
Name: res/color/mtrl_btn_ripple_color.xml
SHA-384-Digest: zOPxzh4xhLNq+vcYs6NubGkXZpkUp9/9TB+/l5UTNTWKgy/RDEgv0NVC
8mPCq4fi
Name: res/sS.xml
SHA-384-Digest: uJ/vbsBCYG9hHtXcnUzLFdL1ht9QUTfjCjb/5vNpjhVzkFHuMij5sJ1j
wqhPXkcJ
Name: res/uO.xml
SHA-384-Digest: hoE/TUVgAnofPmM54c8VXvJkri1DNqkN5NgW3nkTHB2BbkR5TM/zhkPl
IHiL2fde
Name: res/yS.png
SHA-384-Digest: XyTbF9rGkMJGrlkRbMTYUw4jxdi0DFqQw3CQ9ji9zyMrNtAn7miVDdih
AFye0d2z
Name: res/271.xml
SHA-384-Digest: r9HBwxF42YYQaLucu9ilwJV1NXo+pVDe2NTwRZmeAvRtCjZZ4FaWeGdL
H0pbYTVs
Name: res/GD.xml
SHA-384-Digest: wO4MOGh/SINeks1VkQRPYf4u8HQj/5n8rho30ahBHiMKvDMcQHBRmhUt
Ob7f3gqz
Name: res/2f.xml
SHA-384-Digest: epyEEoOMNbpXNSjCQxyAjB5B0smUTNtX8+0fr97glP5wlCRnG5w5NJL8
FCV7KUh2
Name: res/zn.png
SHA-384-Digest: LoOYvTsK2SfJXsq5kYIEUOkuQpPZT4pVaj9xtp3ScT15d22zib7GhNzt
vCRwRtdR
Name: META-INF/androidx.appcompat_appcompat-resources.version
SHA-384-Digest: eaHeL1EfjzVJf22et7imyaY2wksxjKFFqnVvKnq96leidLMUZIg+yR8I
k7wnMpIm
Name: res/color/material_personalized_primary_inverse_text_disable_only.
xml
SHA-384-Digest: Gzv3NlUxRP0LxyFNStTyIMwk0aFgSn7CilTSRihK0SN+vK+XbrB5ZK6k
8Ylv3uwt
Name: org/mozilla/javascript/resources/Messages_fr.properties
SHA-384-Digest: k7pKBttUFThviqjg9AH9Pbpe3uctVDSmATdIzSc7x6HStdzNULsjaDwe
E4gPBCmw
Name: res/color/m3_icon_button_icon_color_selector.xml
SHA-384-Digest: /IdHLQMg73o7p3TTDegeqW7cZ5cR8vOVVLjALqBBRviGEsnMCyhwJNH6
w7Fz/TWT
Name: res/JT.xml
SHA-384-Digest: sU2o43P2OF65jtPRDU+yWhhPPfLM2L/fj/+MuoMF02PNdhnqJWrHTLqr
R5WfFHSM
Name: res/K5.xml
SHA-384-Digest: drYIOc4Dh1IarwVtUPFCWq6MlyOOkF9juR49Ccv5KiS9ooFMVKlrOX1U
PpEZ2JEC
Name: META-INF/version-control-info.textproto
SHA-384-Digest: gGFOh1MU6tB9eTGE4jZBVqAFNy6FGv4HMC2TBzd3zD2h7/u8/OQba6Hp
NzoIRdev
Name: res/7s.xml
SHA-384-Digest: 1SkZFgR4Hd4l/xB4NY4AHd3iZDzKDMj9UZbmfYz0WZszz+1lGqvwVe6W
mgP4E+fN
Name: res/IX.9.png
SHA-384-Digest: doHE9wiuzOYqprBdiDFnxEz2Sbwr7amez5Ph453BA5pODIcq4w6HLCj4
/bxOzvAQ
Name: res/color/m3_efab_ripple_color_selector.xml
SHA-384-Digest: eT68LMacvXC1fj60Vj8tehhVlx7l/Usk/ffoJnO5CgvNRh6ShNllUOV2
qsZuUUDL
Name: res/ha.xml
SHA-384-Digest: 19IyIjiOD1EpyjfO+Y1hxgthY1mvMMyyjnFZC62N7WZWeDKqkq022y6n
Egd0lEDg
Name: res/MD.png
SHA-384-Digest: xXapRsGlAta1YZCxwRFqQkwPko5MZuXnZbeg7ODlRYbZaKsow/yH4dp7
n+44SiVv
Name: res/LA.png
SHA-384-Digest: XWlrxDpAS8u7Q1l1QxxAIE2wlxuuMI0fyYX6cGkyYikN8oQ8AfbZgVcX
Q9TbaD9J
Name: res/gM.xml
SHA-384-Digest: tuKEO3w2ja/9W8kMEh8cJugCaJqpUrEYuSLl5hOFfaQ4x8fVsNpR1OCp
uvd1ubmQ
Name: res/Ap.xml
SHA-384-Digest: zq6SkWRC1VN0GhrAzgube6RgbplPj9Ya8IH+Cf9L608G1Xci0Kgd+KAx
ndJjfeSa
Name: javax/servlet/LocalStrings_ja.properties
SHA-384-Digest: 0whv59La2MnhC2tszdRmkEaiAdM+8rvu9F6VEXD0Ga06TW6VExR5/aY8
YWnNT7dJ
Name: org/mozilla/javascript/resources/Messages_en.properties
SHA-384-Digest: UNJ6T6tczbXhkCoG3dkevMdcLg+sp67LzXRm1UPRDh82KXm61u2riQxF
8Jpujl8W
Name: res/1v.xml
SHA-384-Digest: T1ZZhjeMmfT6X4VlqcV6qFnKVxbfJxDDLGkLkTxwiARIt1MwWxbhJRC4
sw8l5iQV
Name: res/FT.xml
SHA-384-Digest: /Tn4jkhptLDU21Sm9af5refLpcucMgf5J04NDVoJcSUz++517+qAU+mB
yU8Q7R4D
Name: META-INF/androidx.appcompat_appcompat.version
SHA-384-Digest: eaHeL1EfjzVJf22et7imyaY2wksxjKFFqnVvKnq96leidLMUZIg+yR8I
k7wnMpIm
Name: res/OM.xml
SHA-384-Digest: Pk3ZZFc7vs9Fk61XaaJqB2t2NE9eh67HkVdY61Rs4DvccO4CaLqqSPj8
OtFi3Zny
Name: res/color/m3_navigation_bar_ripple_color_selector.xml
SHA-384-Digest: j3gJqwBJWKv88cbE1SvQ1RevlfZPNRcF2TtaZ0T+J1ZUj9tqQ8qBiIfz
Rec6cSrh
Name: res/Ro.xml
SHA-384-Digest: vXzH6kDbv7f8tSB9N5BkQ3Dd8SH8u/ZXL6yhyJ9zP+7OAxQ7T5b34bem
twya4uGz
Name: res/color/abc_primary_text_material_dark.xml
SHA-384-Digest: IIL1IBbOcY5V5UzxPUMpreYsOLgdSk1rG3jfQJKyk2mIgMXEAtiWZ8eB
uHzEIEXd
Name: res/Vv.png
SHA-384-Digest: 8QLkFuMKDYWz22Glwf3/2E+aqx0kl7dasq7BvizRtiw2b5UNWzgqW/zO
eMMi6as9
Name: META-INF/nanohttpd/default-mimetypes.properties
SHA-384-Digest: nD23dZkeklqjuHt5QiNIEXhqmaL+PQiIUhJ/epn+ZjxhAXoXoPZaPD8I
xPfp/5b9
Name: res/vT.xml
SHA-384-Digest: 0RY35aGEjCZJ5HPx7FZ7Z8SBAzHRobGw6bRX8tVi138eUZkT3oE5VmA8
Nt3yMese
Name: res/Yt.9.png
SHA-384-Digest: kzU9y2sfutUNRkdGSA9/zgHNuE62c9b3o46DN2rw5C6xonDzIDq0CpDP
bzHkhkH4
Name: res/color-v31/m3_dynamic_default_color_primary_text.xml
SHA-384-Digest: TO6QRxCe/6nvHhcsRCSkFP9gC6dRkVbCx2141h64UM/c1DB/S0jkpQhW
svPFvYZf
Name: res/color-v31/m3_dynamic_primary_text_disable_only.xml
SHA-384-Digest: orANmbwP+rU7s2LtWP28VC8CqIl0fOneFG4dlz7oCSUvW/hZba4aKpIy
ndm9o+zV
Name: org/eclipse/jetty/server/handler/jmx/ContextHandlerCollection-mbea
n.properties
SHA-384-Digest: OGl1mLRR80KPNpLNZ3bqYNyu0I1oO4XraGM2FP26SM+CxZH26NXF+AWJ
gnpk+eDA
Name: org/fourthline/cling/support/contentdirectory/descriptor/upnp-cds-
1.0.xsd
SHA-384-Digest: vbtYZM5z7uQijNziwK1o1DkJZLMkMVNXzwO5TuCOy0s7yb4Y80srOKKd
sVlSX3zP
Name: res/dt.xml
SHA-384-Digest: F9XN9mEK5wNjDqp+PBbsuYKtmTJ95PdX2A53ZYzNwN6p8fS+oLq4mZY+
5K+1HSEf
Name: res/f6.xml
SHA-384-Digest: 6yggPWwwqX59t70cqYIrWl6zj6rEuhxEC/jAqrVWDwZhLb5plgwIqAHW
2mS3G0PZ
Name: res/DG1.xml
SHA-384-Digest: ezq/LvuRslx+WqdI41S3Yk7KS/oI803o0ePQnN6/FZg4/lXfbuALFtnv
NDxQF6Fi
Name: res/v4.9.png
SHA-384-Digest: 79T+Vgai5qCGcFJv1JUkpr/EkWgcrEExz0vkFuRDf89YiA+LbHz7V9Le
IqNzJFBh
Name: res/j9.xml
SHA-384-Digest: mHCm8zcVMpbqks6I1INjWs540gs3JvV6FSHQJXAapTy7oTxARJukcbxt
YXD4AHCF
Name: res/hR.xml
SHA-384-Digest: ljlc6ecB01NtKyh3tA2787k8xtGk+o0v0VEU5FKV/82H36N9avuq/fDc
/ncO/91z
Name: res/X3.9.png
SHA-384-Digest: xzLmZKP6rLKmCEFGTrym4C/8Ng+Rouj6MlL6CKhVAby8FFrt79JWZ/xg
f0t6Y0GT
Name: res/yQ.xml
SHA-384-Digest: U7MtcDWKOdwud7QPrldkJhRZVk4fwjdTl3fKXIJQwTJtWWaAYVVNXMug
ZQAz6KSc
Name: org/fourthline/cling/support/avtransport/metadata-1.0-avt.xsd
SHA-384-Digest: 7tHhYdaGyq5fLuFLJj3/1z/oHFiRgrd9T1tR6PPFr6wPJba9RvnnJAkl
Yo7FocP6
Name: res/color-v23/abc_tint_default.xml
SHA-384-Digest: TuBN2yq04BjMfVeUdZZ2Y46TSd55fm78LKjiUZ99FfyKklWMOkDRsByr
pysiUGnh
Name: res/dO.xml
SHA-384-Digest: 7U1TFI7WQ0QfRiZMl0dmhpK/3xSHN5LMJte05WhrVRpG33Af+aCkPMEN
gUHT5Ss/
Name: res/e0.xml
SHA-384-Digest: MxXwdYD/nzmyu+H1K1VCv3Puon0iMrdPigvP5G+kc7OWBvFxEwwSboXr
VI/FSw+6
Name: res/E5.ogg
SHA-384-Digest: pesmkgsmSvw3VnqjX7CkkiYqpqpScINItj/oQ4ECrI4ckORao+xRNGO9
Hb1LGOb3
Name: res/tI.xml
SHA-384-Digest: M9z61ZS+71HaIQESAdGSnB3OrJsQlT3FmEZvmysE66+4UKrJjCN4FMKq
ouJvFh3W
Name: assets/images/ic_push.svg
SHA-384-Digest: vTSiCvxE/OigXXlx5oa7Go1Yivk138lH3DuURD3Ioyyw6wOvFaTIKk/c
Uo8Ev+NY
Name: javax/servlet/http/LocalStrings_es.properties
SHA-384-Digest: HYhyrC+zKUyUh1TGLwLW+liAiiBJep4UIo7OaB2klraOTxf0VEDgpX51
JUiBR3Bw
Name: res/y-.xml
SHA-384-Digest: pt/D2JIvAwGE/mcAz1TE7MrosLvJJEf2eGMOeOP3sPLEwlJabiH5/QSr
7fHXoXdz
Name: res/Zu.xml
SHA-384-Digest: 2oYDM7k0HpKBOJIYYmM553hlYdhmmdUnSt+sOJguAyycfFcvXCCjeCWE
H+WSMO18
Name: res/1R.xml
SHA-384-Digest: dbo9YreIw9FvDO+IAi7S1jIf8MNOIyRll5oZLhL17hu9+s7Mo6yp6r+S
/nv24S6w
Name: res/color/material_personalized_hint_foreground.xml
SHA-384-Digest: 3psFY0cItHmAcHZP9BR32aNf6qfTubzXhC/8Kw0Q/J2sr8qzQD7Dl/iJ
1XrSQalY
Name: org/eclipse/jetty/servlet/jmx/ServletHolder-mbean.properties
SHA-384-Digest: ZDTBPn5ffe1Nig2+f01GuT9wUTAZ3dQzkDaMecbri+Hi2Uw1qu9Y61bz
eCtqRST3
Name: res/NH.xml
SHA-384-Digest: Q9MY/IubMWW2SCjzuf3ORNJ33GSJG46WgOHGRm7dKNKnWlK/Q89Vxf06
prujjUCP
Name: res/color/m3_timepicker_secondary_text_button_ripple_color.xml
SHA-384-Digest: 51fPiBaGB7KnSWeOHoNG5cx3C5tmYQUsCHVdxPrAJgvv2qqbiS058wHJ
L1aXwrZN
Name: res/Id.xml
SHA-384-Digest: uYctzZyXBSk3xJgFY5MHVg/Q4fuf+B/merJWC/6T16T4weQ9ZdooiX1S
k50NEReE
Name: res/_G.xml
SHA-384-Digest: lsbWydKreQNE+AOITXWCCowRxWcRK9+wZo2Mw3+SCCuQQTVCaLmP/xbl
ynVUZZFh
Name: res/oe.xml
SHA-384-Digest: A7fLgYlQTa/CsYdswuhpqR6Zpboqm+XF4pI0gHodH9v0DYzUOqMHOxlk
6uAwPKNv
Name: res/pF.xml
SHA-384-Digest: 9q7+ocL+zBucqnA29irC2643jApt8NNb4Nb+8iacUy7tfdHt7aSRk6A3
9RwJheVo
Name: res/Zc.xml
SHA-384-Digest: EhOrezFJMJ6JYGOBr32Tm8JcRS12ageu8Yec0c6m/RYYavM59l0hT/fF
Q0RM5BLx
Name: res/bV.xml
SHA-384-Digest: 9VwdIpAiU2qi+wWbQe3l+wiDlUrPj+ium0yOKSMLUk3YiAxdGR06jyfd
TL7F1RSz
Name: res/CK.9.png
SHA-384-Digest: RgJYONI3xwSvgLI5NfoZOh8K6z0gG/du/2g/F9EuaJRsyWznBeWfweRY
vJWweHLg
Name: res/KM.png
SHA-384-Digest: 8PePXpJHALzLpkBJ5ltlT0cS7rq7AWQ9eIV4ENY9sRIBFHabMsKrJlqE
0mhSvD8v
Name: res/3a.png
SHA-384-Digest: BXYUW6quMcuZ7j4emaCFqTXNzVOh5ZlDHCEpA0Du7jR6sd0dqAssJePv
ZarRo5ty
Name: res/kS.png
SHA-384-Digest: bhmOg8yE/9EcycrtrEDJR3F8G5zoH0kCjDk8eSuz6v2gWFLl4LHWPz0k
yH3Km2yK
Name: res/7R.png
SHA-384-Digest: nbTnan7PqJc0qx7X0Yw1a6XUa++cAyLlcl3AQBQ4QBEyeffe6l3vBBAV
YasoELbD
Name: META-INF/androidx.cursoradapter_cursoradapter.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/t6.xml
SHA-384-Digest: Dle+AYBy66QI3rPYpySdwd6gicj369o7IxbU6rJpxMGbXgeKzWUcxGjy
6lugNIJe
Name: res/HQ.png
SHA-384-Digest: r+pLCLUIxDEdlJyqfvbw9AOfEyTuBCAZfloU2C0j0JXZr1CzKHMkcAix
8pCn7poJ
Name: res/jn.xml
SHA-384-Digest: M/uDVJIcrwUZAF8o97zOBDZwFmMnTgZJSQvvSGIq9ObziP88fMhKhgrT
cLe4N1Bm
Name: res/VM.xml
SHA-384-Digest: HG4o3ZXR5ZGdW8KWBGvGgVjCS9ofybrz4rfPJO15cRt5IAV/DHhVjCwk
kVtMCwqH
Name: res/ZP.xml
SHA-384-Digest: lg83nkFGmAorU7qPGwxJuMDzg8Xnfx6PQg/QJIA/ASu4QIrbBrZH7I9B
/BT0I8UK
Name: res/IQ.xml
SHA-384-Digest: at7S+bdv2P94uDPm24ZtiTPBQpLDenv1yV7bS2xfR2n3CQoQAEbNssqf
6Hv36x4N
Name: res/Wh.png
SHA-384-Digest: ZzG2Alp2KZKcRAudYZfmEhJZmuMIs31jitaoXR9lp2kDJSl2km/S7HW2
y6pTwCEM
Name: res/color/m3_tabs_icon_color.xml
SHA-384-Digest: 4uGZVHO0zdW75WoKB2AJc7g97k8rhq9P26bbk/ZP1+4UkqxBqziKqLy1
3aqW2uqZ
Name: res/wX.xml
SHA-384-Digest: ZOQlnNRHtdrXDp/tfxrSzIUs6jwiY8FWS6DhjuicPR/OGmJ5QdbOXdEr
iUUO7ec2
Name: META-INF/androidx.fragment_fragment.version
SHA-384-Digest: SgEyC8oI3kP3pBB8vNbHBLZooRV7Qd6PJ7eUDbpK/nQQpgE/XPX/Qi6O
djfAjuVq
Name: res/0c.png
SHA-384-Digest: fqjDF7fozAXZ1wNF5m6Y6XeCGg0QTJVtyWnxqIYZ7qmReHBJYiuxQoF1
ganZnaU8
Name: res/UH.xml
SHA-384-Digest: Ur7VSMwsbFf/1cn+XPt9cVjhaqBs65Rz8EKVxJseZ5p1skYdSo6GYcil
c6GAMtga
Name: res/Pd.xml
SHA-384-Digest: QPC72b4phRdkAVypGjda4O4ZpyWnPBqspXenj71ETlonVqebzlx27GNJ
ilslOq7x
Name: res/PQ.xml
SHA-384-Digest: ArxN0w/SzjhsLkvN4lEwWy3ChPvYcRdlQ0bsdqKrNi9TqjaU2xe7K8ux
Rawb7vxQ
Name: res/Gj.xml
SHA-384-Digest: VzRWplErkcS4R4WNk+3QkcV63epWZdJrC+5KGDb8M0EvE8Heq8N8nJGc
HTj2VfKi
Name: res/hc.xml
SHA-384-Digest: nDsX1Zm0WuKYL6OMNLXVpug6LuWdK8HZ1aoJ+esGN8nCbIiIpsq4DAog
7BZO7oPX
Name: res/iD.xml
SHA-384-Digest: mb9/hf26oAkBKevn74P1cQgI26aea1THNlU3craKDQhxK0YaYMvyE9dF
xtNwplHL
Name: META-INF/androidx.sqlite_sqlite-framework.version
SHA-384-Digest: hIAGvtefmZQC+5iwoWLsS8O4/kGacdmbLOceBNC+qlQ1u8Ze/oEJR6ZE
tF3jNbux
Name: res/TB.xml
SHA-384-Digest: qT4ZRK+o4zHpepwgRpXk9LP2FR/c9UBcZsV+vLr2/ksqNkMYf1raYHsc
eUPq+RVQ
Name: javax/servlet/http/LocalStrings.properties
SHA-384-Digest: v3Zi5/SgqtXgnHRq6hN4IFQpb2SljTKMIgPKaQtINKSo/u8uPlmMjy9m
qmmPov9g
Name: res/C6.png
SHA-384-Digest: a4fjY9tJSFgTWO3+AkgPzDqaBjsBWyYwgFMTBoccDC0VCXyogQ71DJ3/
JYc+fod1
Name: res/color-v31/m3_ref_palette_dynamic_neutral4.xml
SHA-384-Digest: uPgUpUcA0LvqPexkGKxaJ69GcDo6e54IFUPo5uVsYpwScVwIu04s/1/2
Uaf3wZZv
Name: res/mG.xml
SHA-384-Digest: EhOrezFJMJ6JYGOBr32Tm8JcRS12ageu8Yec0c6m/RYYavM59l0hT/fF
Q0RM5BLx
Name: res/GF.xml
SHA-384-Digest: 5vtSFSA5Yb6elr7JzAbEEi2n0UwUt9N+5PQM92TXvav7dpI6WOnEEkCp
69daLrDT
Name: res/5T.xml
SHA-384-Digest: vO9lNsHjlyNJhZX083AyxVRd9iachv0M0o6+rcJu1rz0EQAqPLV6IxVh
yhDNagh1
Name: res/JT1.xml
SHA-384-Digest: FVsdgF5RESz5ZsGrKqvfrUuGoLKUSUkQIdqVX2VvL/4dYNvKtkTbxzTt
RHEOlAlm
Name: res/K51.xml
SHA-384-Digest: zP6D6gPAt8m7ZsFSuEw7t3g9Yyy/dJTZeDwxDUzcb60acF9e82km4t7N
7UNs+Vuq
Name: assets/test_base_module2.mjs
SHA-384-Digest: kpJPjK8VH5T6ehwFAQtgVBwMctt9ZPAuZAcbPGB6UkvwA/IKU1UtNYRz
Xk1v/bF6
Name: res/color/mtrl_navigation_bar_item_tint.xml
SHA-384-Digest: qO+T1tQSYE2LEdBVxHPRFb5tjjjURqmP86Jr6icxfM2ausToH7MP4wJc
N5i0wgBp
Name: res/RI.xml
SHA-384-Digest: HMyv/VF0IyoWWCWdwaBts483rhdfbChGjMA7o/+1s3RHVWdR9Wc/LMhe
iiMir5GX
Name: assets/js/jquery.min.js
SHA-384-Digest: 1H217gwSVyLSIfaLxHbE7dRb3v4mYCKbpQvzx0cegeju1MVsGrX5xXxA
vs/HgeFs
Name: res/aW.xml
SHA-384-Digest: Svjexdh2oPS5KrAk+x6/phnAhpVklCWm5t+82ihPVPSkFzYt+LT2jeyD
hkV0li5Q
Name: res/wx.png
SHA-384-Digest: 0xyKN7xr40C14ePJ/jAQVgu10gw+ER0nxZevuPq2+dWafKLskoWH2aCB
w76uys/P
Name: res/21.xml
SHA-384-Digest: StYNefStVeHnOrSjDL7Ns21+VlyeilLJKK1g28vim870xAmJme8Aukmo
D6/1lmXM
Name: META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version
SHA-384-Digest: paydoQqBb47xqyFYbn0pCKy7lEvXH1LUpOSWvrco5oTPnChe8y4Heb/Z
mCeD4wX0
Name: kotlin/reflect/reflect.kotlin_builtins
SHA-384-Digest: SvHcuBU/bxDoAYpvLLu8c9iZzJ13OD8wJ+cGvz85OKA+i06EDw2GMGqX
mVD90qZG
Name: res/rH.png
SHA-384-Digest: DMWIJ2CznDu7Qk3SteQ2QilM2vbZm40u/BmkzJ24krXxkdD0EwRLiXQF
55B304U3
Name: okhttp3/internal/publicsuffix/NOTICE
SHA-384-Digest: 2YfsuyG46Kf5Pg4EDgMB7Z+ynxfnPKHFEIX0GQgrp2SEhuYwIk7iH6Mx
+AQd+QHc
Name: res/color/mtrl_btn_text_btn_bg_color_selector.xml
SHA-384-Digest: bBCrHdAsTLTQzBcZwPMvclEo55v9tzLkSouJgXa7afYkJUHaoHTujiYo
QAlNmTbG
Name: res/4N.png
SHA-384-Digest: znP3h2cfB9eDaMKqpfVggBUNBte7+OgSxEuSfemizuk5KlgWYIElNua7
Mr7e8Rm+
Name: res/xd.xml
SHA-384-Digest: Ch8fPztJbjXDv5zh71x4uBgXU+07S7pFZ26rYJYeoarz4iT0vmrES8uS
5psew8AS
Name: res/hu.xml
SHA-384-Digest: 7AD7+IX3g46X1CgRjc7k+2R+uGz9NdpkCF++mBenx0byeovYA/hiT14y
rFpvNPEb
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant98.xml
SHA-384-Digest: /1Q02oEkKb0mJEI8EPijfCkdYzAUKm1ceBJI03+RS61aVGRkx4XGjMK0
1d0YKoyg
Name: org/eclipse/jetty/server/handler/jmx/HandlerWrapper-mbean.properti
es
SHA-384-Digest: vOdadktvdqRqhR5g75zrA1n1kQOpZVFO83alN1pIU8/4UJTZ3qg2s4SD
ewn/wFMP
Name: META-INF/nanohttpd/mimetypes.properties
SHA-384-Digest: N5uqu2rdDoUb43P3sCMflvQTwtQzsdl2nASe8E5FI6QWaBwpMBvUjDFA
3ppZI8Vx
Name: res/oN.png
SHA-384-Digest: Qjm7NULoTeauHRj6u2jpI4XF5fPqZb2hhD7ZNlDONhdXmXCm4IDVRGvS
x0RpZGQa
Name: res/Ix.xml
SHA-384-Digest: wes2AfE1+asMXgWqp+/Zg5tXomA4aA2f7IBstelU1WQELej+onBAhI+3
fhrSGYdG
Name: res/color/mtrl_btn_bg_color_selector.xml
SHA-384-Digest: 4s9ZJYnexQk0+qbz3REQrQV8ii001f7EVP/SmRohXrPWOAU1jssr9Ave
Yv93V+wH
Name: res/0G.png
SHA-384-Digest: OxzqeOsNLXiKPk2pcI34rmrsIC6u8v2nHVaw5cwEu/aS1ja6psbDotPA
uTUHmS2S
Name: res/color/m3_navigation_bar_item_with_indicator_icon_tint.xml
SHA-384-Digest: pORV+f810Xo3OItxEcP43hRmEehNU1neDmjnsW99y97fd0/aRN8B5Wqw
z0Zf/z4e
Name: res/c6.xml
SHA-384-Digest: 1/paPRyiiHsOXEqnTzHjzUkAOyIpMWFVIoISzD/ooKLb16+lALdvkxJn
jZSI3Hth
Name: res/color/m3_hint_foreground.xml
SHA-384-Digest: TLIo3vzr9nFi+uJ5G3UGzv95PmGsAoFJmCussDxVnCob8E2XSJdnsWNl
P+SGEHYB
Name: res/dQ.xml
SHA-384-Digest: 8ct+k+Jh5YfRocutZiWnTDp+xaLAxCpSKnG5xSmNOQyhM3K2TQnfS/m4
G7C4aJ+h
Name: res/MH.png
SHA-384-Digest: /3TmBSzi2RL8ruLFUoUa1R7lP/vdj/T80iFjQVo2DSvMd3sWT1kYxzpe
zxl3nENT
Name: resources.arsc
SHA-384-Digest: IFAf+LlWu/Kb4//r6P+9m8y9MGXVYB4ow3ajF0GJ7No8JCi9dFcrHVHR
w1rWycNG
Name: res/color/m3_selection_control_ripple_color_selector.xml
SHA-384-Digest: csrGrC39OkK+Ft7nDGNsYU475s/goyaE+1WMnVONewmlSU0vwdtbzpZp
0oln7tWK
Name: res/QZ.xml
SHA-384-Digest: xntcofMmd+qDGmm0EZQgrBf4bInN85cQmgyxoC4R1mosZkxn7Bb54roq
Y3kDPGw6
Name: res/u3.png
SHA-384-Digest: nk4lZoWbyjz//pMVW7ipQZ4AImVUWoUBlQsjK8KKQ+h+Bn/4AftU4keV
WiyJIO/c
Name: res/color/abc_tint_spinner.xml
SHA-384-Digest: /lt7D2L0tGtxFpUbFEU8keY2secM+KIbUp+nSw/dObnsjXhMz3IBWXSN
WdUykEKm
Name: res/SY.png
SHA-384-Digest: dq4UWmjfsCFi+TWg4SW/yZjniEEeojAUdSddMT1XxM941sbS9IDvGXcq
MK5g92W8
Name: res/96.png
SHA-384-Digest: jHuJBgZ+MSJZn1juXvSUwWYd/G2VMAtRHl6pDcLmAjDg8PrYjc6Z2aq9
PQKKXaUE
Name: res/DG.xml
SHA-384-Digest: Ix7FR17XC3Tdkass8PclhaXLxoAtB1pLDxZgi3JRUhEkb8eEjgxeECD4
3GZFfpLR
Name: res/V3.xml
SHA-384-Digest: zaVKhftS0bFQmVr9cvQeiuVRVORxyy8oYcGl1LxXj+qm+FYRqhL0n7Nn
sRQd5gJ8
Name: res/U-.9.png
SHA-384-Digest: hlNrbYgebC2pTjH2IZrqn1DTuAkhjHB2nLr+BJc4bCf4WWj8CbNwauXp
/2/9BVFW
Name: res/Gc.png
SHA-384-Digest: JujN02JdbdnMTe8J4WoGaHV9pgX19V49s9m6XbNiaZJO7yqcdqiEJJ8W
r/bWB+vb
Name: res/6X.png
SHA-384-Digest: h+/gXL3gJcIyS16DZQVW9x74mhIrreueV5wsm69WGoOW+Fm2g5J7B1M/
Hz9ZgEQy
Name: res/DL.9.png
SHA-384-Digest: 9A35CpQtXADkrqPBZdsbY6bDq8jEgneG9RwMiuFfCBGfzRUWftfcD/pf
Flwe9EQv
Name: res/color/m3_button_outline_color_selector.xml
SHA-384-Digest: dj+Xetk8hrt6Sk7vvCdQFc4tmyiSR6YaeZ76Szm05nX08gWZOiHFrgZE
v48eZNL5
Name: res/rp.xml
SHA-384-Digest: 3F8HRFOszXQI3TWrdPv5wH4fYXLuMz1hrWeAif3wyMBd51DuBd4323Re
QbX98AvN
Name: res/tk.xml
SHA-384-Digest: T7vht1DqWpR7QY/Qlt+WUr0VmPWP/68h6pdlzT3J9dzLPgrOITHSU8bW
alkpcPvq
Name: res/v-.xml
SHA-384-Digest: 84czgnn6tKfOddlZkCKBh3HzOCuzOc9qNjEzSgMCmss5LrM+bqqMYx2t
FQQ6ky80
Name: res/Xx.xml
SHA-384-Digest: mXCq3s51/ODXxzq/o2mxD/Ty+xN6bjsmT9Fdz78zPqmEfwKiSXYSH3v6
B6EbslCh
Name: assets/shaders/vertex_shader_transformation_es3.glsl
SHA-384-Digest: k/PqmBVvhE9twSv1DjHUckCMS4H3fIb8TCCqjomTMcGUJpuag7KIa2Zk
O/xmyXy9
Name: res/Sr.xml
SHA-384-Digest: /YSUHrjVC6WfhT34Q/XcTb6VeOyl6EI/Ex5ov4BLg5wyXjXiyf6chJ7s
SGE45PuO
Name: res/9z.xml
SHA-384-Digest: PPXdQpg6eL2DFENVtvCyTHbwOqXQv9LcZ8du/hzhpGBkzmztC5PflCwD
zjNARbFB
Name: res/zr.png
SHA-384-Digest: n04rh6Zn+VAb5TZh9BTjqh8AyaydGlq2owhIhrDru353HMPVSUXt+cbc
pPqHQzZ7
Name: res/l3.xml
SHA-384-Digest: tnV0YzqqQwdzJvY0tmST09Hkq/VGAQqWN1amkOJ56FEg0pUUFOJOKLd1
Xvk4BQXW
Name: res/color/abc_search_url_text.xml
SHA-384-Digest: BD602017vILgbGqItW+PrIIhGuBx2qALu8hCx3+hZ2PZtM0jvo96Fh2H
kSKioBFH
Name: res/lc.png
SHA-384-Digest: ef8vKgCPVt279q6rQ7CEfLJCWoyHAjA4IZ/k1VS2kh968QW7jdgDnCzz
RUx/bBPO
Name: res/Yy.png
SHA-384-Digest: S3x1pjdkgjoqB/GyDYZv1ddpYNqCQpnmWF7Am2jns57jg9XdgKTzfBqW
ewR3zMFp
Name: res/zR.xml
SHA-384-Digest: e4prutPwerCkjPhfYc5WbSAC8WmP84urK4cDDnJpnGmgMDMdvtJbMQ5i
P08oTbnk
Name: res/Mp.xml
SHA-384-Digest: dWnpG/yiaFh9H+xRv1oBSVWfU3chprrc4fiXqA6xXppudOMM7R6QZM+3
eDX3je+Z
Name: META-INF/services/kotlinx.coroutines.CoroutineExceptionHandler
SHA-384-Digest: 0j/xSukYae23QZglmIbEaIYDJhjb1Wup2XnoqgJ4y7UwsydB5c0PB9hd
yT9nwAyj
Name: res/xU.xml
SHA-384-Digest: 2gMqnjCTA+lFtZV9VkAynbEoqbdodd9JQphZB75mI6Yg1SnTNsMxDKgv
WLyWr8lx
Name: res/SH.xml
SHA-384-Digest: NhayUlUVTKJsnmSt7VoIRRn8PPG+5aMY9BwEPT4WiPpmWEbje/KJBNX+
B2YhphZ8
Name: org/bouncycastle/x509/CertPathReviewerMessages_de.properties
SHA-384-Digest: DvKUx2fznT6HHp2tT7ons8xUSonqgGSlgAGK5gLnm7yhViWXXme8Z7Ti
d+f2xzyy
Name: res/pF1.xml
SHA-384-Digest: CXrW5aQUN3uz63ghaCJHY8spUBJ3Vg+IHM+m9YbaImtxjItAZQbAQ35/
ukCdnb+U
Name: res/ph.png
SHA-384-Digest: s1HZgpF0frUyXb5hdhxFe55/FlQavWXBEGbB+HjiIFUQK4uP8fsufWeP
Tw5h9odO
Name: res/_y.xml
SHA-384-Digest: 7PPodzHGikaDJpiPQ47uozRqPFOTJ1PqoERBbo30PtugdXKAF531kMnh
pyoy48K5
Name: res/Sr1.xml
SHA-384-Digest: uoMl0WcMd6ozCtOszjYU23Xfj5+SpVs5PW3FCftNmfTRB9oSOgynIoNT
nQnYYqGJ
Name: res/vg.xml
SHA-384-Digest: UagfrwkxLcjEt0iADFDHdNrhN5S2LLoGD8oUYJi3OMCeRBk6F28cVqmn
eA+jeoDC
Name: assets/shaders/fragment_shader_transformation_es2.glsl
SHA-384-Digest: 6Fu3uQbvaS0yaGRyrfbwet16Jm4dR5tMIDx2sg0hCUOS4fjpGCZyBwv6
t9X5M54P
Name: res/WB.png
SHA-384-Digest: 7jSsPzLKNFNMQgegSv6jawOCTmNV+7aqHL/QksIpsgeG35L2JFb3AxXu
yv5AafWq
Name: res/eT.9.png
SHA-384-Digest: Fng/GAqtcF66YBczIbRx0WhxhcSTbbtQuqL8VY1BVZt/9I6vaCSPFwqx
ddsLKQjF
Name: res/vZ.xml
SHA-384-Digest: IWueyC0ihbyC1wosp6APZRfLGqV3KByYRHtdQTeSdb9rtAFxBSoCwvS5
6CG2CM4v
Name: res/M7.xml
SHA-384-Digest: Rk573PDwO+I9HasC8vN/H/uPbSoLxv5yzAsueBkMeileVoEX+LdPbVBY
26U7Hd67
Name: res/d9.png
SHA-384-Digest: PrBRAeeDb7ZGUKKJLTgLmLPNHT5FP7g05lYnXgLX+ioYBb8NNra3tyM+
hetY+LJY
Name: META-INF/services/kotlinx.coroutines.internal.MainDispatcherFactor
y
SHA-384-Digest: xSSEPWjh7L6lB3iSzSxlYgOX67JS6gNSt1ePv17NmMZterMimX5+It5L
mQTMLHVc
Name: res/z-.9.png
SHA-384-Digest: zkFhTjE4E+1LCsh0fvNNms30N9Nfjhuv0HLFXlB6H5r4kn21I7JoQTm1
/seFV8OJ
Name: res/color/mtrl_tabs_colored_ripple_color.xml
SHA-384-Digest: jJeH6LXNLqENkr/SBbacOYHncMjvPX/5w6VRZBxCNrlX6pyKOqwGrgfh
JPVUqb7q
Name: kotlin/collections/collections.kotlin_builtins
SHA-384-Digest: tJbtXDbzgHqEd/bQDlfqgj2SYPoeqACMYrd+E9KzhatQufNc7bAZUEna
q3FyU20u
Name: org/seamless/schemas/xml.xsd
SHA-384-Digest: FxYZFS/hR9sgbPXe+4Eui4FlrX9rW+QXAtNgVuci1vxaCs0kE6tA5xwY
uiYHITjV
Name: META-INF/kotlinx_coroutines_android.version
SHA-384-Digest: WiL9gsoIjr0zczM6o/MWDl4bC9gpKlyXdruiClOZ4naudqPgSkfvMEIp
CXbD7y72
Name: res/color-v23/abc_btn_colored_borderless_text_material.xml
SHA-384-Digest: L7auAoVosVBKrSyL2JLLB2s0uDg5Abtxjicoe2BJHq70kp6q0uuhhUd0
/JATFBIa
Name: res/2O.xml
SHA-384-Digest: 7QSiyCOXwWlbYEUrz+sCjByHyFxTeahXpTo3Nd45Q3N5SvaYVrGSRH2e
FE9HbBQ5
Name: res/color/m3_timepicker_display_text_color.xml
SHA-384-Digest: F+BEm/k3xsaJsiaAliFy4fS3v4RUFRd6BnX11hg7eGqRU7DfTVJ6VNXh
qHwoEKU/
Name: res/XY.xml
SHA-384-Digest: OvdWgCKwAiGpX8ITMt1aNgcKdCBzojny611P3hET+1XiVqOlP3BmqFh2
iCv3DLcr
Name: res/Su.9.png
SHA-384-Digest: OEDDyUtbs6Nc43Zd64URaWsK/y9YMdxbR3kUPPQUkhHX+O6Z6s/lpiTa
dRvTl10Z
Name: res/oY.xml
SHA-384-Digest: JYIBowuA5M7ylCdbUGVCYDP1FshsY3fLPmQZPzri+4J0NhfdY0mTmXL9
1LVrfe1z
Name: res/eD.png
SHA-384-Digest: SaAuxJTOrCnsYgPLabohjzv2L+YdnCCEfZF7e0u35Z3U6kXEclJOV26p
phFtAffQ
Name: res/pY.png
SHA-384-Digest: O8oAwxDymw/cFIYoflpBQINcCPHD3HUYrW62FlN06I3KdT4DFDv0Ph/A
ujDprQ1V
Name: res/color/m3_simple_item_ripple_color.xml
SHA-384-Digest: l1VEE/fU6XnJlHnU/MNuIro45Bx6c+/vKJAvX9/jNSI8YKZzxAL29gBX
+0fokarN
Name: res/UE.9.png
SHA-384-Digest: rtZcfa4QLx+PaXmiTAj2ImIAUrAShE08pV5bnqGSMRgWgICRcxn1O6GF
PsIQ8iCY
Name: res/9P.xml
SHA-384-Digest: StRXb273fFWwTzQFw4bcAVr0XfnzF9YNDfdUjtUVjMPlp2iFnGTbdRx2
g9GcaFtp
Name: res/aJ.xml
SHA-384-Digest: uK6DQYMPHp59AVyAJ+Xca/2VVDpZJX19kPxsiOe1GPdExVRDOCUCzWFv
bty3YJfS
Name: res/OA.xml
SHA-384-Digest: 6I5TE50SLP8xZ9O/EOhIz4ssDAwUwJUEUt1aQXdIUi8d/l1oUA6dHzfi
onoz4c23
Name: res/_M.xml
SHA-384-Digest: zplsnr0vHBYtl/FQyqgIAN5RmPxovEhLzfk8c+zuQ6eZoTbPlZhVNww3
DtR13Bnp
Name: res/4u.xml
SHA-384-Digest: s/eeUBlXOOZnoGS06CT150pU95dZUkBoStjo2JG8NOJQXto8RdhDauZb
37+aXgja
Name: res/G2.xml
SHA-384-Digest: 157D0+Igldvzy4QvmDkdJoe1w/+T1rlrEWMJ8hLhowjUbAD5PEUs7yEV
pY7osiSr
Name: res/pU.xml
SHA-384-Digest: R/4UcR/9IN9qwVeXi7K/vjIVHULRS94pfV654dS0ympysKgFfC2+JSkF
gzvqePkI
Name: res/q6.xml
SHA-384-Digest: /cISK1PIv9rHAnr5sbsz5bYoQOksS8vcC/8czaAbCEHQ11iMRJQX9II0
Q+0Ob2Ph
Name: lib/arm64-v8a/libswscale.so
SHA-384-Digest: hLVPCYdZuq47V/+zUazp18e7s3Ri0CShgcUTDo232XzHT2RA9E4zRNPe
DU4TzBa+
Name: res/0E.xml
SHA-384-Digest: FFGicYxeNWhx0+xhQ7ih3Bx4Vp2D9x4sUTmEooj2UVE5eXAgk7wO7Fjm
HHr0o/XQ
Name: res/fM.9.png
SHA-384-Digest: DMkB4xejzz3bGZHVYzERvHoywPXfd6rVkalCBSPYf4qXh97Kgvu/uW6T
DMVgrP1c
Name: res/A2.xml
SHA-384-Digest: zozjrCwJ6u1Ij5P0iKCmxBOy6G/X76UYzP1TO9zoQHcARasvbKnsgVT9
mD6ABdml
Name: org/seamless/schemas/xhtml1-strict.xsd
SHA-384-Digest: 7+iP7JT0e0TBDrM7XZ9lizHzDH2vs6W+CWLMs+0fbsHVMICKrz/LLTfp
FyNeCeLB
Name: res/_h.xml
SHA-384-Digest: YCE/VtqlVjgGUaGKlABBVm5M/EVzuF+B15ncdlRHww/0rvyMDzYVDX89
uzZh5WCn
Name: res/color/m3_navigation_item_ripple_color.xml
SHA-384-Digest: YVd0gpIjol6nV0Np2fCw6c22RLmJw5eABY3IEOO/B03CblwSwrFvguLs
2Z81yiO4
Name: res/color/material_personalized_color_primary_text.xml
SHA-384-Digest: xUAb2QS0DkWDbGm/vKbeg0OqwtcpyXZE15c76hYX0181huhZu7xGHaAy
ZiIEcTM/
Name: res/hX.xml
SHA-384-Digest: JkgjrIVZO9OvxcfOXSLAMefrf6uNlbQlJj7S16ubhy0jt9KDADAmtT71
jDmbsMqo
Name: assets/js/lib/cat.js
SHA-384-Digest: xpLD4C6rahgehwup3ZvqdWaaP5OjEMCBts4rtAP4ncgyjeOygF7uwtDa
GOzLQBdF
Name: META-INF/androidx.viewpager2_viewpager2.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/BN.png
SHA-384-Digest: tFQaCkXdbSYFDoMVQX/i/QIPs0UdENtJwwKNbIz4P67BJeq5cs0fBxlH
5Kr/gPVX
Name: res/Y-.xml
SHA-384-Digest: b45Z+WZtAI9kwGyBZCBfcdHiE9tTGeEQKy8IWEhFToqu/IdsrlihoIZc
zxRvMn5W
Name: res/color/m3_card_foreground_color.xml
SHA-384-Digest: g++vDdn7lK2QnSfYy/BOLep2ST1HxZBGk0FPx0Vh5xRprAHsoxQna2E/
gpFFXnBA
Name: res/fR.png
SHA-384-Digest: +jjrVEqVhoaSRmfFr/lnEBZOPcGCt+13ZxA0hmCZVaHb2pWKrTuqGrx4
0qqV7Cle
Name: res/Fq.xml
SHA-384-Digest: AlKrIulo58Z57BQdZaCO8ly4orGH+Qnj9g3UJBoFK0SsHI1e3FPKHhNG
TB4On8Pm
Name: res/GR.xml
SHA-384-Digest: H7MmL3qqBHv95GCYSfGUEqArEuk2YXMp2SRzwMdjt4zdMSXGPjp+RFIg
TDueaqhY
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant96.xml
SHA-384-Digest: sYFqAaOrqg8W9CmBNz0HccxzdEiPjHDoB6exuzxIoBK9Aq1u29WY0bG3
2LWkrDXe
Name: res/9n.9.png
SHA-384-Digest: qY9IhvO/WQFpyf/886AHNpdIQAtVJTfmZtp52Iem45pAxr3UTirjRmvI
cVMLUacx
Name: res/UE.xml
SHA-384-Digest: yS5XbfKzXzHUzefeXrw55mRoxQnDfUL0m4FhCThb30EB4a3ClNpkvNkp
E8Yh6nGi
Name: org/eclipse/jetty/servlet/jmx/ServletHandler-mbean.properties
SHA-384-Digest: d7oM9zbtR0tF6g03M5cKjcHLvYzAL1+8GqjDXs1KmSy84j/oeB4H7Z6G
YEGw3kKB
Name: res/cr.xml
SHA-384-Digest: AicVMJDM7V9ehJ+T8Ys1wtOLwiBu6DQksH3E9Ph2jJM3Nllm1fWqaq7a
y2yd0ceQ
Name: res/dS.xml
SHA-384-Digest: tkWrSjjdasHlFcIcZehtt9IQlYSohahhHAsEE2Ww8IgalP2vAri4cCbk
TWiyJH74
Name: res/color/material_personalized_color_secondary_text.xml
SHA-384-Digest: X4nhM4KJFZ2PcikJK+krESccYp6Kt03MwF/VbaAiKnQKgjwlvdNLTtzH
4lAlDjJ3
Name: META-INF/androidx.transition_transition.version
SHA-384-Digest: dWwedGvhEw8ghxjll5AOUtPdfFQcYce9hFUHcj63aAr76xV82vJn3sLm
jJrBXhA6
Name: res/By.xml
SHA-384-Digest: bo/7yK53jiJNlFE1/DP6Gf310mo+LE2ChQNkq0OgCgrbi4LMBA9DF+tP
7uh+m/Ae
Name: res/color/m3_radiobutton_button_tint.xml
SHA-384-Digest: q9lmjZUKhF4HJJZzHmEJ0ILwDcRKHqL1i+qP6t6/o5Qgs0ONYNBXEj6U
kCJ4TfTK
Name: res/JJ.9.png
SHA-384-Digest: ei2t9upv29AdXePkYTk8YIrRMmf+OOaPJMi1wQ1jdP9CxHRLEWPGD969
2MnQyTGP
Name: res/lN.xml
SHA-384-Digest: d4RtPmKf6rNI3eI8tfSIY35zGAYjSLiu4twfoN/0IQBDOo9dfAreUhG8
lv5Af4Z0
Name: res/23.png
SHA-384-Digest: O6FvMtAEysBdxIByijyyjEFApYrFj920WiZ+XdVxxWSxopR2aVEWGbXw
pw912eF+
Name: res/TG.xml
SHA-384-Digest: YZ5l4kY2+vLA4VGgKmY82qMd6KUZVyBzRImRBIHsP/A66wQkOV77tbpB
4aMCZwnS
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant17.xml
SHA-384-Digest: y57oA7x4I20wZIpIU/XsLCNiC8DOte3Vr7yj3JwV3dCF6b6NV5uKlJUN
WJ6c9k4+
Name: res/u01.xml
SHA-384-Digest: ElzU1vZ52WV5PF5C55C61N3PL9hY7AGY+vRMV/LN1XtaRgQ1FubWYWYG
y1i04Seq
Name: res/ua.png
SHA-384-Digest: 0J1qaEoGWuDO+RXEvcZBPd/4PfzwYWlR8LiLhk73A2nt7iH75mL02GtY
YqcmVkW3
Name: res/dt.png
SHA-384-Digest: 1RlEClNS3+WEsYvW7KNpewvKntZynEzYjqCNFl9X8PhYuXOHH9rnT+os
aJhpMzsc
Name: res/color/m3_dark_default_color_secondary_text.xml
SHA-384-Digest: SSg5RttNrxpHQ8YAf/GFiec4x4oeEGjAN2CbbvRcPFPDKLzrKy/b0iKx
QUKblkNM
Name: res/zE.png
SHA-384-Digest: FEvlnQD0t/SdhU0EE0nVV088nMEN7oDheGieLNr5H/dljpa2I1kKwQgC
9GmNL9nf
Name: res/BJ.xml
SHA-384-Digest: B+hTVsAe9EZnSfO1zOAqCqgV5fXr7YUuCSdGT8yScsrgo7oqyIO6PQTA
l6KKOx84
Name: res/c4.xml
SHA-384-Digest: LcFsY3sWrskIg/lREszJIFaYDsl8Ui2t7PNp6P58LVLQg6Wn2AgOQi5X
6qbFlNxk
Name: res/Ff.png
SHA-384-Digest: MmaFD17dtpaPXkJT/pCsDcJsK/FN0qwoenyTImnqk6/R6oa3AhOF2zaA
5WEf5lwH
Name: res/4L.xml
SHA-384-Digest: Cmsb/R7kzb/9gnO1Xt4auvmTuWC2NYiMcBJjEc8Mzp6erZt+59C+UyCc
C1SyV2He
Name: res/Ga.png
SHA-384-Digest: TapI0UJoAnH7Pxj0POZB/ggn8UW2LfxBz1CmKcX3bvjjQ1Uap8RFLRfu
Hb30c/jK
Name: res/Zg.xml
SHA-384-Digest: 662Qb3RyUfrmb53drp2IBJ+I2aLl8JQ3vZFYMhAVmKUyZPQiT7NbOxTT
SgAOkyuE
Name: META-INF/androidx.documentfile_documentfile.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/6t.png
SHA-384-Digest: M84CWmDYaSHJk2sb23H+dk7BOi0h7PDNOS0QXAIGSMZazVQHWhHyczeA
YcVWdXjV
Name: res/jS1.9.png
SHA-384-Digest: nCGpqni5PhvfilXFqTcZFqMHuecWmpOBBxo9qT33++to8FC7lHET8mme
CRhYvSF+
Name: res/color/m3_checkbox_button_icon_tint.xml
SHA-384-Digest: cIFP39G49StsBbTMAcXAtcQnkgJRXg6ngJG1fg+UszVnxP24OLW+06w2
VYO0805i
Name: res/color/m3_switch_track_tint.xml
SHA-384-Digest: jAEcIvZ8WCKGK237jkwHr1nbNbDXn+5lW4NMv0/YTHTeDW4yACTFrP2t
VFnXCTnu
Name: res/6Z.png
SHA-384-Digest: MWWLloI8+mHABZrHDt0PsfwDCaSeiq65QyZsfCjHfQ7cmRGPlAIXB1kI
4HE6Y/cn
Name: res/77.xml
SHA-384-Digest: vet9yEjnxlq4ZREgE17v1AhtkC/Yo01r8uGdn6IYKEF7XXH3pEbiPWf5
9mANMCac
Name: res/color/mtrl_switch_track_tint.xml
SHA-384-Digest: stjR7K1MA7de7c876hNOnh4KdmQTJ4SYQAenyrXHDBNluIU3YoLw8cNe
GSaIlyoS
Name: res/NN1.xml
SHA-384-Digest: qiofZS4JclIjm5OmR/Y5r/NVbP69ov4y013r/yencfLmsHhsNyY7vd1K
aQGNpO57
Name: res/color-v23/abc_color_highlight_material.xml
SHA-384-Digest: nhR8+6QO6Kn6IH3tM/v652SoKit+3BAo7wl4ZV8G4omZ8HoWi6Zzz/rV
owa6mRzd
Name: res/color/material_timepicker_button_background.xml
SHA-384-Digest: r+o0vZSJ6iPhdnLXtRuqlxhMGYY4BQoPC2Ah6Ajk/miJQthsRJsT7kp+
dGusR2iv
Name: res/Pa.9.png
SHA-384-Digest: dAp/FlkgnD482z++wKKW/6YbuQWZdOCxOwIk7YajYEX/5ekg/UG/eY4s
SbBpIJqF
Name: META-INF/androidx.emoji2_emoji2-views-helper.version
SHA-384-Digest: dtT+kMaBn7mC0I5Zw2DO5bf//DqPWE7jsnjxasKo+dXF1wFxba3xTVXy
iU0DEX70
Name: META-INF/androidx.recyclerview_recyclerview.version
SHA-384-Digest: dtT+kMaBn7mC0I5Zw2DO5bf//DqPWE7jsnjxasKo+dXF1wFxba3xTVXy
iU0DEX70
Name: res/X4.png
SHA-384-Digest: gchrxn2h3BRgegzUIOqt5OVdsUhagjHPwM1nkQLgCjvRLGJlbvQRubX+
fEUuyeRO
Name: res/Th.png
SHA-384-Digest: fON1RmNqXUwLQYSuQQxrYQORlt7aEI0lM0ZKoj2OskMLJO4pxjRv+ASY
zC/1sO4m
Name: res/GC.xml
SHA-384-Digest: tdoU97l53185qOwAMcwEAqMXvkc10TSLmTQ/w0Jg5zf92y2KyaSFPNeh
oGZkL7fa
Name: res/Qu.xml
SHA-384-Digest: F97PwotwQWnOWQYkMXQ1RDDzT+zOJ03jpNAkLOOYVUJjto592IyPx73d
okEA7oal
Name: res/jd.png
SHA-384-Digest: MwQOsfph1zOxhThFYjg4qj9HrOK/Ihjm/clUUDHh1q6OqnYkYwwj/PWs
sbHCKidS
Name: META-INF/androidx.tracing_tracing.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/06.xml
SHA-384-Digest: YYGNWCrjRZ8sRFnQfq1fxwq7Ab2DRqkQ0RdGGclvjDLh12GwY93ubAnA
P+l4Hvb4
Name: res/g-.xml
SHA-384-Digest: D18xqYCfGgXWiRpF32nsLgVFvRGC4daWCjEz/OYMj1Ws318586qwP+vv
K48x0XgF
Name: res/2w.xml
SHA-384-Digest: 6RLkpEv8nCvSp7SWZMSxzYwVK+du4pd1W97oFLI4w6DQ3Msi9VIThvbP
otD96tXh
Name: res/49.xml
SHA-384-Digest: 2S2rSgomeIbRoz2BSvExkyArJj6IA5d+moRp0E6BZe9/d0Z5H6LFkW1t
Q3kKf1kC
Name: res/bb.xml
SHA-384-Digest: OChVqCXBh9lszIRngFSTms3fIzkvP+QtZFGh6J8W6sYgVkaouqP7fNZ3
Lg7gKq3e
Name: res/Pg.9.png
SHA-384-Digest: hc0NpBVLZiGL2F64y/Hru8vVQCmzG3xnj+D2C6svKxw5nIFKcFU1cUq0
epLIG1ea
Name: res/vX.xml
SHA-384-Digest: XA+251TrsP1BCsS+5CEhSho7Vjiw7cUqq0CjIcES7qTVeSswzNLYsnPs
dWg3bcKF
Name: res/w9.xml
SHA-384-Digest: pESIaOGKXaNBA4KCdCzoe7pjgPjbfSFFolNMU7rYspgObs2T7f5YrOLO
Rpd0IZQn
Name: META-INF/androidx.startup_startup-runtime.version
SHA-384-Digest: ITmiWuAF+c+Pj4UAzIIJAQIn3XFvV1dCIdAHYoSmOJvKd6lWT5XSw1mI
zzCA0Q64
Name: assets/css/ui.css
SHA-384-Digest: UmMe0Qo5t0+TkgW9+zmFL5HRQLE8at/LRwjJ47x2QzxoOaWuc5oUVk3e
muM3RUWU
Name: res/PN.xml
SHA-384-Digest: nfUlgdQl8Czd9n04jgcFy6Pd/yo/i0T9zUICg9N1BahOkwkkHxc27Fa3
Z/kAeDrd
Name: res/YW.xml
SHA-384-Digest: OC8A+M2FQOn8L141aokUK5fWTziIlxjpyMCEJbmv0qgbB8Bv4FZSdeLn
3jjmX4gn
Name: res/sO.xml
SHA-384-Digest: JmPt0PNvloFsmHZmE+CYuaJvl73I5zb96VOGRSWeUskFJiDmB5OqOYdY
2NDcxuWG
Name: res/RA.png
SHA-384-Digest: z4SlUfwjecJbBBDD7dq86/m/DTpnfpmijoOu5m302hshYxWTd30mdLvz
UPQHD1wK
Name: res/ii.png
SHA-384-Digest: ZdMWwCBr65jSVvTuU7/tshC/VYOC41WjLFrUuOuDdN1GdS8McxOuF5fk
Hrz8GCS0
Name: res/LT.xml
SHA-384-Digest: pX4NdvOwcig10llXsx3bpu9MuuACaHdsQlqajDTjl8YkNzJvLLFkCLpj
d18lSkt4
Name: res/M5.xml
SHA-384-Digest: 4d7Ea5l0l+ZPq7Y600+yH2unvjwnjuzodLNRzj9RxyKJ2QNjaoXwrmK9
cBmEj0E4
Name: res/HQ.xml
SHA-384-Digest: 2Rmb2gXqRyDgl9byuvpIAaP9V5Bz/H79iqnePLUil6OC9xDPY5bYMzm0
EueTERYM
Name: res/tL.xml
SHA-384-Digest: xOsRMYRC77kYzukz4oEBd95avuVQ8SGP6S4mlxAxMDBNTDQx36NsEQgi
40ce2m+W
Name: org/fourthline/cling/support/renderingcontrol/metadata-1.0-rcs.xsd
SHA-384-Digest: gGvjNfvyqiWjvxMC/XwCUM1Xu0W4v97oKz/BfSTejY5wXW6+q3dPorGU
Qe+bfElJ
Name: res/a9.xml
SHA-384-Digest: BtkyktbfH4Xzi4BO1XIFpIfeM5Bcuvx+imhvarj/2qke2JoWi8Vl5rtM
7abnffQf
Name: res/color/m3_calendar_item_stroke_color.xml
SHA-384-Digest: gXAEr8HsSsOMUK9WRDT00zEn/b7E1+D8yiFrJCD0+xukwe3st1LBR7Xk
gUrwyIAo
Name: res/Lo.xml
SHA-384-Digest: 1S4XSbRm/1qhkswzpfplJh5b9tbXrRHTx0xkna/lRWN4pQRAtyWyjmQ6
kvicTASH
Name: res/eo.png
SHA-384-Digest: 8ioR9Xc7V5ALhxWsATM23+Yu+zIzFazK1UCHFJzEY4UbTuazl2dWXzYs
bgmTyXPj
Name: res/1c.png
SHA-384-Digest: w9W4/fc/36IDLln5jrflut1f+WcNqXdCbMRf4F3ce3TcgHndD+hzTtb/
jJlwzN8Y
Name: res/6G.png
SHA-384-Digest: cyIEAqU6xummUg+uCOd+aBNr6AS3No2BbK0E8lTxZyRNF/EKfMg0LCFZ
il/0rcVL
Name: res/LI.xml
SHA-384-Digest: mw57q61bY7WJABffTru26yGi0hkc/s3EcnILR6xCqiUtip0jHXdaoyFq
frvIO1rN
Name: res/color/m3_chip_stroke_color.xml
SHA-384-Digest: vwh/Of3pEttoRqaJnnjPC4Iz1FCvm/iKodJ8+wXEtINg/uczbTk810of
z98VWPyZ
Name: org/seamless/swing/logging/img/viewtext.png
SHA-384-Digest: ML/+IPPw5ArW9euVRk/fCVwhav8V8XtDiuLnXzj7O7eVe5lIUQc4CITG
VfYoa5ti
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant4.xml
SHA-384-Digest: fCIVS/4alcX6NdwJk5k4ALTHz3u/XBUv5eVANDNGomZFX89sV09609oJ
w4ZdEr5W
Name: res/yT.xml
SHA-384-Digest: 770DQ4qXR/vUjBvdSxsYO70twT+7v3aJhajI7mmJe+E/lRYOJFyuk1xm
rHLbCco5
Name: res/z5.xml
SHA-384-Digest: v8AYKEQIZwxldzTPi47cxgzc1FyK11PbC1B/bKxtRIMtl19yonJWn9Ra
5dzKQ9d3
Name: res/LX.png
SHA-384-Digest: QS5NhWA0sy7Gxpuz9tL6TTiT0gwQQ2X7T4gEpbMxQ9XaBy5WbEFAkLtY
cmy0t9cJ
Name: res/cV.xml
SHA-384-Digest: xLIdrUt2UqNz1OHjIE6YyaA9HSGxsWoKgQ+Nx5QXVThRxv0Y6GkNMPej
IwJEP4nk
Name: res/2w1.xml
SHA-384-Digest: GFJDS+Chl+xho4AZA/OouCL7Yy0LBU1W1tZRUislA42IA6sqOtUwSOC9
mPNQfLbr
Name: res/color/m3_navigation_item_background_color.xml
SHA-384-Digest: VbTcpXlmzWXPbyI0DlbCVCzNcHwwbDMDbVU2KNEGyDmnmtwGvs9AANO8
gbsahhkz
Name: res/T4.xml
SHA-384-Digest: 1/w8Td0sI1x+5CbM6N2N3fEETZCgU4TeZG9+2BWT3Yd4JNWT5dW024lB
sX9D+hzi
Name: res/-8.xml
SHA-384-Digest: YLpKAeHNrBpQfCiOay7t96fz1hI0xy7+B7cC1YNQi4hEwkgVBabjD9Vx
lwZJqLA1
Name: res/color/group.xml
SHA-384-Digest: 9kQOGfzvak2H5fOFsJ5vvYzmL9MPdH4mSaVEt5I/kVWnuJtYfkNlk3ZT
YT6HrchO
Name: res/FO.xml
SHA-384-Digest: spBoG38cpkaZG86gKeofQ1Gu3CnJ2mJP0XF6xmYEOvN615fgiTdR+4Tl
mRlFwKE/
Name: res/G0.xml
SHA-384-Digest: JwhlYWrYXej5xJzS6v9LE0h3WWmGsJVaWNZz8YwADpZUdPc8kI6QW3AB
rAaZYeZ9
Name: res/Yj.xml
SHA-384-Digest: hhFOIF8t7uyTc2j8rWZ/LF4RqcczQ96zKK5x2eZXiLcmJKP7cZf+Fq3Y
WgOfEnlm
Name: res/color/mtrl_on_surface_ripple_color.xml
SHA-384-Digest: Bt//xtfFy31ZJiJw3jR1gKv6xDRagoT/zYY4A5KKsDY5IoyjWZ2/b6yh
3deiHJEZ
Name: kotlin/annotation/annotation.kotlin_builtins
SHA-384-Digest: XZyHISmUiAqIovmipIY+z1tjhg/T0SVIq54KTq/IRwZX/7uXtDSdVjKz
dEk6ks95
Name: res/iv.xml
SHA-384-Digest: QlIjmLlxmW7e4jNO2N6WACDuHITv/EPCjlBpZrz942wIWp5O8wrtiTe3
RO7QD1fy
Name: res/k8.xml
SHA-384-Digest: Av2GI7tPM+aH8+EmovqAemTK4BFWZNcyRq08NYBaotuDVQeqEohODx+r
azUbDS2o
Name: res/color/m3_timepicker_display_ripple_color.xml
SHA-384-Digest: MKdfszcTmon4ssfEFEyyfing2Ob9vBwEl78uPrYub0fG4pSKQI39QiHg
wrYwCkZJ
Name: res/color/m3_dark_highlighted_text.xml
SHA-384-Digest: BjVtlmbDIQXNVBO8WGQ/sBdgqPC0+BXEYlxtiaXqy2nNBfcSzMpXgCHZ
cpaPHeUv
Name: res/wX.png
SHA-384-Digest: F+MuunS5IR+p3FVO+5DsfNm5TroREqQ6uG/QstAfsCWXyFcw+axVB8U5
Ft7qcuqP
Name: res/dW.png
SHA-384-Digest: +lwxAUYfra71yJ8Ce0gbick4E5NkHTDYUl7d68hyoZ9P15MP7a4vK4/J
SAnjQfdl
Name: res/NB.xml
SHA-384-Digest: l9Wj1LmDoCvlcwjmrEv05RzK/VbNe2lqaHWX69L06mTwJ3HV4cbtkEgv
im9cBnvW
Name: res/Ao.png
SHA-384-Digest: kIe//JqBVvLrBAHE/RB9RKCdcwYC1l11Wki2fgDmgcB3DZxdfCsRBvXy
bX4/+r0H
Name: META-INF/androidx.lifecycle_lifecycle-viewmodel-ktx.version
SHA-384-Digest: 9hzn8ktC2/lvE+T8yjBMZ6IgDGezETQciFc46t7rvGaeXOy6QJDexdkU
N1w18cW3
Name: res/KH.9.png
SHA-384-Digest: pHQ53glPsOjfRub3o3O2wYYZMvWgEydxLjquLwNd9nXZBkYqhdZOA3Zs
HhU44Crz
Name: res/b-.xml
SHA-384-Digest: bWMQQOgNsgXR2q2exT92ui5gJvH9OlRfpNKFItdMglgwKehRnhzq856G
+NxpBjch
Name: res/iR.9.png
SHA-384-Digest: 4mtcDRT0zqOT66v5NEDO+KdqGdQR4CSobrZqi9wZU8UQEdq2h9FxzzvF
PQ+XOG2c
Name: res/OC.png
SHA-384-Digest: HbsbVdJWNIbmLrAMn9ZB+0rPI9vM/H4MEA++Gi9NSwTqQMyr0/j/5/kQ
0kPUQGrk
Name: res/f0.xml
SHA-384-Digest: aNkKz6dHB5RwzupsXzwjjGb8/Nl2hZbxFsCM/M24yxz5D+iTxkGkoK1f
5p0mtMjv
Name: res/FS.png
SHA-384-Digest: OUtZWY1OxvAZ6KFQKWD9I/VxTVM2BiSozAwlrdEWfZyBZDRPPcxYQL7J
yN8NtWCj
Name: res/l9.png
SHA-384-Digest: AUpkNwcTpDB0pLFzTzoMJxUvI7w1RPkBJl1oCv9gY/Jz9sXs3o5sndDe
msrD3uIA
Name: res/6p.xml
SHA-384-Digest: v9Xcd7JAjvULTaUTNf5c/UKZBlnGOSTWxFOCbBIGW3Qb1+TCR9uTr46t
e7ZCjpV3
Name: res/7Q.xml
SHA-384-Digest: N/CsayMd38IZr67AL2VeCWMVnH30Ea/umWP1SiJn1F9IAZR/WIRdl/Iy
IkabFEHF
Name: res/A4.xml
SHA-384-Digest: 7DS7D4TEDqYQymPpKAltK6h3TdwSN7vNB7nzQvC8K0hMu+rEb3VOerNT
HrEgBKob
Name: res/DV.xml
SHA-384-Digest: 6hO2K20RA6sFC8Q0r3kBmzZNKomtmxTeLW4QzFBSUY6Zc41Q62Vzeyvr
6wr4s7KJ
Name: res/zc.xml
SHA-384-Digest: ShA0fJg/Ji35gj/3hkcXSBvZ34TJ8WlwOqOq7yjtzWniqlqMSsVQnCTX
Mrjne1eW
Name: res/p01.xml
SHA-384-Digest: U22lqmcDkxK/aAhnomkE2AiqvDX/1PDiNKtdN0FbFlbRfr73xfnHyMVq
8pEoCYUX
Name: res/B5.png
SHA-384-Digest: +bw2sNvxZ+diftj9RlPaLhbt7KLjZ+9pXC3/NADV/1ODs68Y0vsqB6II
ukv2eM9I
Name: res/Tj.9.png
SHA-384-Digest: wsNnM5I+mZcd/hjnOW7WnGg33MbG97VLGDQZ20NAVFU0m8Pg6kuzMZI5
6Md8YxPk
Name: res/color/m3_timepicker_display_background_color.xml
SHA-384-Digest: gmYYWqmSZkmoIq+8mK3seHElpc/N/lj5a6jXuHDLTERNVw0UIrXSG6xk
YqHwEiRg
Name: res/ZZ.xml
SHA-384-Digest: h2SM9kubUfolX0zRQRE4RpWVsYFXvk4qHN2ckxidu7ghfedLaeJE76gx
7/wP/x+X
Name: res/lP.png
SHA-384-Digest: vznK6MlmTgjxcINelh5zFs6zqcPwCUuFoLIfzKe/h+T868fZ/RBgrjRQ
pNcU//IX
Name: res/hu.png
SHA-384-Digest: XV4MLgGaYSIu0Qz+R27NTedZdbWYbhx9zi689jxwY5BUmRroHQP+WJj0
vwBnwdKJ
Name: res/tV.png
SHA-384-Digest: eWGrTI1GyexdfEgas/1eLnbi8Z+XNMtQcQbOqPrWS/EoTJsC3T2UTU2L
jFj0/h3G
Name: res/eZ.xml
SHA-384-Digest: iUwHBKFY737HIYrCYvSm2AxJ05uccit8Fw0SzeocDpd8w/IJdAkrxIc7
OwQhCxEn
Name: res/VW.png
SHA-384-Digest: L8uKgWzyVF5UGDNNA/sHlc5Ay1r3x+yoQT1Tj0sJ5w/9pUzL7V87XipD
kPlwUZlY
Name: res/Mp.png
SHA-384-Digest: TKRC25HZdEf924pkTo0hglViLTAOZoctLXQUk+K+GYJlsEjcbhmO0PRy
qacMQ2k/
Name: res/cA.xml
SHA-384-Digest: /T5aOMLdteODUAOdt3xO1BcwzZSwU58rgUOeYqnn2d6sBVDT6fsjx2J9
sfMWO0t0
Name: META-INF/androidx/annotation/annotation/LICENSE.txt
SHA-384-Digest: SS7625cNsh5VzhuqEjVcgZjBQsIthBX1srfNVFSvaVKkDBfXx8GFQoGX
soOOD9z0
Name: res/9a.xml
SHA-384-Digest: WqWKuhvnbBcJY7aixSheNo3wfqy83qYEzGIzZYWpu3dOPBHqQw6PLLw2
8P0V+7Mu
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant94.xml
SHA-384-Digest: ixVlRMOPh2xsCV07QASItXyxb4ks5yXm4CpJ6h2eIJGwOi/p6rYS13ku
tdUiHc2O
Name: res/color/mtrl_switch_track_decoration_tint.xml
SHA-384-Digest: 1Yjjpmo4TMEiPbliosHvRuo5f1tXFtrEQWMHSkfprv3nRUT6aeNmczYi
9ZwF7PZl
Name: res/Tm.xml
SHA-384-Digest: PAfYHNi/22oQVpFj/HBVZWHhXihGYmY7wirKuAF9Ntt/TaJKh70zQoO1
ZTnx97U7
Name: res/rp.png
SHA-384-Digest: ++s9OfQLxCfmj/6JW1VGvaDMi5Y32CsiKPrekXlBOTJe8ZsxGBqxlpVw
EHVNIcXj
Name: res/jB.xml
SHA-384-Digest: XyU8ZMfIMZW0U6k/dgERymM62PVNk7YUNcMFFEiYCjZHs+mZoxBTriaw
nAuPCShA
Name: okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz
SHA-384-Digest: rpBWd1vTeNi3xeRnpCM4n1GSiT50T01rwJwHKNNhX1fF6Wr9eFo/LaTO
oDGJu7O9
Name: res/0k.xml
SHA-384-Digest: pe1iOw67jlhBXBjBroO8NT5ahzrIOF9v5QOSXTKXb71wRvfWxfjArqbo
ocic9IIT
Name: res/3A.xml
SHA-384-Digest: 4Ck2sEZZWR3HNVl6YWq2adeZRNeSJDlULaOKP74T/TA+rYxopSxuPcBs
uWf4/SZS
Name: assets/favicon.ico
SHA-384-Digest: xMByfva4S/BaKuS+IoGmYDkEB1dT0pW80c81hCs0qWV+LlqAY5pPHa6x
26kOuANH
Name: res/56.xml
SHA-384-Digest: aiUV66RF+3I2z8lySBPW4ZW+1+dbF64gvn0PtC7u2ffoqxetsYwx+XXW
HLMd+8gw
Name: res/color-v31/m3_dynamic_dark_default_color_primary_text.xml
SHA-384-Digest: THStCi2fBFPiPiBq6fU7gi9DKVjkGaRyWeqDTpvl7uRvlZ/2YyFgzohK
9nwp8Zam
Name: res/Ml.xml
SHA-384-Digest: HT6D3RDfgwZYi2apG4vdLBxdgIWCPRCTk8ofuVfPQIGgZy7YHFfuih9X
+KXUeiWH
Name: res/NM.xml
SHA-384-Digest: +kMUu56UHtP50iIVccJkIoZVtKJCUh3CtojzNoZA0oq3ATOSQqvc8wKz
rvnC7ZMY
Name: org/eclipse/jetty/server/jmx/AbstractConnector-mbean.properties
SHA-384-Digest: VL85MMaFxR1L+07cTaUEPXwCUtPlssMeR6ErqOrPe6ZHysrT6ow8bu6n
/Zj9OcJT
Name: res/bX.9.png
SHA-384-Digest: m9r7I0o2l7c545Z8CUY+zg46ARq4t3Aq9WvGL2G3a8dKzEpPrh2s1XUb
nYvqhLWR
Name: res/color/material_personalized_color_primary_text_inverse.xml
SHA-384-Digest: C28J8+a4l8o6W9S05kKh02wkFWfnoCf0DeMyJcavvHBQg9JvLqTa+GF1
Mosf8aoP
Name: res/0V.xml
SHA-384-Digest: PAyo6asKyww/IC9alWi2fLnCaa6Q3MB4ZbBLR8Eewq8BlsKncM3o+Af/
RmBExN6d
Name: res/J71.xml
SHA-384-Digest: Q0qs8UfE4ikcHQc3xHx9m/cLDL7SRsmn5lnKsQNtZTAj+raU065n6hS/
wmPFwwyo
Name: res/zR.png
SHA-384-Digest: Bn1+mO7yw3L/fopLvsFzeyxzFM2MIYgQDJGm3oQWWC6w0oNuR/Pr9Azr
zmShxDwn
Name: res/tG.png
SHA-384-Digest: BI+txq8ktpbtFhQ2GCSd3LBLMRAGu/qxGcYeaipMuIKlOkFJurwEqK+C
6hvvjqJ2
Name: res/dj.xml
SHA-384-Digest: uoLwuyBPw23Zw73fQ8Q0UiTKp1xH1yILtjeGKZHYRxpvIZhY1RzrzwYZ
sMGEEXT5
Name: res/eK.xml
SHA-384-Digest: 2wkZQfzxSwnpZdn/XGpye6VSaPwUslFoCCpLMCiReXulzhZyPIVM9KdG
dUPXxtZt
Name: assets/shaders/fragment_shader_transformation_sdr_internal_es2.gls
l
SHA-384-Digest: dtludXok2W/Hw+fnd5R58pu+dqdgMkcsKhFZOnQKGqxyx2pKbGrnXT+q
gJOVa7o2
Name: res/color/m3_chip_background_color.xml
SHA-384-Digest: YZAGSUzWnZHPS/BPIsHNua+QWrVvWTw7OPmtpetd8pMZcRQ/X2s/yqhf
Bb6rY9rp
Name: res/color/mtrl_choice_chip_ripple_color.xml
SHA-384-Digest: vtQ+aMxHGqPLmIVF12z5n20KZqS6DhuQYJWKhFMzAJ1wvdxSxtNfUHKd
/ssoeTEp
Name: res/9z.png
SHA-384-Digest: 0L44wweRKhmuyoeq8CABTd6CacvEbVztt/vdBz97aJPu6WkDnT6G2Rhc
bFQMUaMg
Name: res/Ma.9.png
SHA-384-Digest: VU5xX3jIN+eU2BIAecXbhP33ppMikY9F5nkPrREKHp9AQo2Tf/BCrv2L
cjXteSNJ
Name: res/UR.png
SHA-384-Digest: 6vAYw7KaFGEYB18vX/Bk7W56Oa370EHTBZfMWYOEN/ZEIz4v3/wfWPGX
eX5spCO5
Name: res/color/abc_background_cache_hint_selector_material_light.xml
SHA-384-Digest: kU9JRj/jJ2BvcphnzBZtsCbYpJnLQLwZVPzSLrDo1GX3PQFDoqtMPU2O
wndOSlHJ
Name: res/color/m3_slider_active_track_color.xml
SHA-384-Digest: BlobBkkbJ7M9eEmDFjhmo7IYH9keEDCAMrFc2bQgT0qa8ZmZF+QKkgjZ
LFYDyIn1
Name: META-INF/native-image/okhttp/okhttp/reflect-config.json
SHA-384-Digest: 4UJPL6+US147r8N0KssUKyE0COUVMRkogTGYoRXC5wccXw0KP+OfJhZA
I/lj7xA5
Name: res/6_.xml
SHA-384-Digest: eZyX1IIUvJQUbkrxf/Wi+egMy/eNz/Ls/1zEplx3loActVVcdma7KGCn
sW+12f5o
Name: res/_y.png
SHA-384-Digest: 3szr5oFV8IeC6ekbSWuGJ/Ky8BtIrzFGcVnkhn9kMEhs3D0E6QQ96S8Q
Od2uJFgj
Name: res/WK.xml
SHA-384-Digest: yetDbIcPC74JHb4eBH0rkXhTrDYl+NUTtRAGoUknNiB0+Kiiyge3JMtN
pDnAojDM
Name: res/_Q.xml
SHA-384-Digest: EXZ4DJSZddp8GSZGFghemGrP1mYy9pLoxvoAOJbF4UG7uy5pR738DpCL
6yCXnMMa
Name: classes5.dex
SHA-384-Digest: YspVPNj8iza2d3yhpC1fSGD4y2d22uq7ILww9yRSJA/8d33NN0m2bOME
7XEq/ZsB
Name: res/color/material_personalized_primary_text_disable_only.xml
SHA-384-Digest: w8KeFUGLZSVEy4hE4vSUlvNaom47BiS6xeXNT8SFP9onUr77sSmMl8bs
xrB3hRDY
Name: res/hh.9.png
SHA-384-Digest: eXnKgcsBtt0o59q+bL2QY1OHtTLkLxwZviIAuSXyoAwCdJeH0XX7Vsh3
7/+TSTEw
Name: res/fv.xml
SHA-384-Digest: hPsrQCkf7m+79vPB7qPSwVWQsWflSPRlWYhd5IlkMVCLYjsAHoS9iS6X
HqoeYR+U
Name: res/jQ.xml
SHA-384-Digest: /r0U3rsg4tDulr4hfSQrPU8QIetDdGex3c0o/+jXkpqzHtHNZZVjFWvr
+4/tt4io
Name: res/d_.png
SHA-384-Digest: nDmQzLeR9O/S/jPu2wKc63iDX9FnGsz/d73xNQpUox0z7uzdm1Drs5WX
R8UmoVlS
Name: res/qv.xml
SHA-384-Digest: N9lwkJjHapZ61iALAwsNJTWLUMaXmbBMN+uqwRHzfQtPWebv06qzbopX
cPf9nd7k
Name: res/rW.xml
SHA-384-Digest: CrZdfP232WzqvtKjqkjJWzebb5GDq0f9u7hrYNJ2QrkHesZ11ze4AE4b
tbFpL6Av
Name: javax/servlet/LocalStrings_fr.properties
SHA-384-Digest: 24IaPuPt9VZGclBsTrt4cMuVfBL5eg4RntZMl/Lhp3MBbXS2SPe3Vn2i
lXBrHd8r
Name: res/yV.xml
SHA-384-Digest: OE94SOzuwg3EBgpxtUKaHM4+U3DE3KrYs8q3VQJwAkcr10Dx/nGd9dC2
shFxJcYj
Name: META-INF/androidx.drawerlayout_drawerlayout.version
SHA-384-Digest: ITmiWuAF+c+Pj4UAzIIJAQIn3XFvV1dCIdAHYoSmOJvKd6lWT5XSw1mI
zzCA0Q64
Name: res/xQ.xml
SHA-384-Digest: 3TUDmZsLXMj7RRzY6oSWC7cUF/eptafLQNocffRE26iTgUyLfpAwXJxv
lMZxPne4
Name: res/Ox.xml
SHA-384-Digest: z4kiaD34jNnH1/bQjrcP0/JUp8U6sRoYFcYpTGFzmEqkhUe8v2Z4ZR3Y
IaHb2fEJ
Name: res/fz.png
SHA-384-Digest: PyvyvI+9xLfjdzWfJEWVzoA6uJdXuONCohmfsmnU61t7FE+eDVoMEvIK
BNy84d8g
Name: res/2y.png
SHA-384-Digest: mtBBh2hrnoAYjzVQlEKHpQpwNovieObL0Ca3o7ALWh4vMeMm/FCI2m53
1PcHadcz
Name: res/3Z.png
SHA-384-Digest: 5gTAzGv28wNcYGJE+Zto9cRiePS9nC52EHAUpe/rB+gn2+rFGDdRjUpo
dNAiFtY8
Name: res/xH.png
SHA-384-Digest: 3PYkHnc62hVzOsM7Rf5cIh+WdJ/d3AZcFzUbnuo7DdhfGKwxAU3FAP2w
ABWVWoc7
Name: res/_u.xml
SHA-384-Digest: g9X5IlUci/Fd3ZB06JgrIVo1xJPwnaTg4pSvNubVDqZbKppLP7go8SNd
B2uD9r10
Name: res/a7.xml
SHA-384-Digest: 9JTYwvAcuPO0FG7FSoIaaUTeBWftv/UBDqh4rO5Zwfi9F4NlCIeGTsk2
UDDnkSyb
Name: META-INF/versions/15/OSGI-INF/MANIFEST.MF
SHA-384-Digest: kA5UWTKxwj5eBUpT3CSRAvcGwkdM+dG855kywwUZpmXyaVZsaJBRKJpk
dU/k4GVS
Name: res/Lq.png
SHA-384-Digest: V3GWnfnLZf9LNDch9gJzr+d0mJQWefBoWE5YFEnooLjsdsdP84SEJT19
Xs58rXSG
Name: res/N3.png
SHA-384-Digest: denpgRQktH8DWSmz32XGwdi8Djt+dQSQjKGzkw/r7pKK1z3Puk+IbaX6
PbtQPt/r
Name: res/ZE.xml
SHA-384-Digest: edmchZ91NqqMcy6fXRANL8jcNIK60354eglS5XjRU4BS6ZdlLgoF/4a7
+kn6wH90
Name: res/dY.png
SHA-384-Digest: ScUT37ov7znEq4nFQSLcg3e+mckZjqObq49xYlrXCFYjLBgJaqeVlJkl
f2I+kMJB
Name: res/Oi.xml
SHA-384-Digest: s1XWv+1YZS3Ob0BHunLoKtSOT/wejtGPY834tmaegXdQeSZLXoleKaa5
0yAh0wlF
Name: res/YD.png
SHA-384-Digest: 6/b1pOnM5TsmZQ1MBcorb1VyHq/l8q23mym5thNUmkHKMNpYgEVvDwpc
hKLG6mSB
Name: res/color/m3_default_color_secondary_text.xml
SHA-384-Digest: IttvdJHwGwqeWogsROD7EaDVrbUSmjJljlKYNhARlanLlwQKN+fr2pmF
SkDLg+jb
Name: res/te.png
SHA-384-Digest: MXvS5f20WE/LirhgaaQ12gWcyuXn1EhGcQ4/iV+QtfeTvhv+aX78jMWI
GLr5ci1b
Name: res/9T2.xml
SHA-384-Digest: jZBU3hMLIgA6N6cDKT9LOlolM0GrfC2Udtu0scC2EJGfjrg3R08mH358
Uj2UT+pq
Name: lib/arm64-v8a/libmedia3ext.so
SHA-384-Digest: RltHLY9mDNgBJjpN45cBeY2daDOdi29oY2yrVIbtpTjpo2DFgyruGydp
H0cwj+1Z
Name: res/NW.png
SHA-384-Digest: W1T5ULQRWGH9RETOUfi5DJz746EzJ5y/EB32R9YakH26gTBfqiK30FM5
ti+Vzhsm
Name: res/pu.png
SHA-384-Digest: a0elcJFBLcc6cVz6OcekUxqh38y9Ld4dpDnLkDmkEGs360ARabbqGWYU
ixIAhTRG
Name: assets/images/ic_setting.svg
SHA-384-Digest: HQnDJzxSZGRalxfvb2zjqhORdqN+68wg/iMK6AP/1s2PSFhBP5GED+7c
kVQVTcnD
Name: res/Ep.png
SHA-384-Digest: JTmUuMK51FgBKmHUxxYywowL5WaNAcI7CrQK2PbLUkEyUUR+on9X7YY2
rAou6csy
Name: res/vu.png
SHA-384-Digest: /qj1WwRvCwd9adnkR6qph9ScDmC7ORq8EERbnyb2LfBcj64hurBG0EZJ
1vtzQ0DH
Name: res/x7.png
SHA-384-Digest: BptDn7ZqkZ5yD5AeDifBvxZlj7aUY44+kekmeKt5FXjsd3Tsr8Bs2QOU
20qugGOw
Name: res/QN1.xml
SHA-384-Digest: YYzXztm7vpc02LaHBHtLIpsghbKCVd3Uz+MNL46+x+kVXRnrLrtSR2UF
SK8D9tLX
Name: res/eM.xml
SHA-384-Digest: Q/5BMvJaU1y5hOe2ALECWyHtJY11TfgwdBHqbkEhwuTKwvKD+redkjZ6
bC9T6YVN
Name: res/f_.xml
SHA-384-Digest: h3Q3g9gx3fnzJydSGMt0d3FzqU/rERQpkcUJR+87ep2XssbLMNVJvOAa
hp3e1Rb3
Name: org/mozilla/javascript/resources/Messages_zh_CN.properties
SHA-384-Digest: 0F50qwdm8H6b+bExwqCPVZduhRbw4asvzEyxUeMgPkiExoqg6HV3TH5A
kvXCoox7
Name: res/kz.xml
SHA-384-Digest: APkfPDGwiSskvN+V64f1NWJmx08Jf4/mkG1jzln64v8+UY21KksNVSmc
Gov1UMjr
Name: res/color/material_personalized_hint_foreground_inverse.xml
SHA-384-Digest: HCbMtCSaYpcliYpdjfbAikMpZY2iohIYabr0qMY0RSOdHw5O+upd6+2C
MP00vu9V
Name: res/4H.xml
SHA-384-Digest: zDyLOzxm13M8k6jvkPjXozpQbwRo3e1p25ghy7T+DnzfZXhZ7HZNLvqn
9ie2hV5A
Name: res/nX.xml
SHA-384-Digest: LgSFR0Vn60Uz9F7QCLqqLsfzlO5Vu+i4b9eL4+cWGeYYQvOn5K1HtDoI
15G9R6AS
Name: res/9p.xml
SHA-384-Digest: RACxylC8oQ1xCF1Zc6BIhaF6fGDnOEl3zO4JuEVnlWTBAJDDk00nn5OA
OGcKfak7
Name: res/vL.9.png
SHA-384-Digest: KIHp3PZzTcgn8RgLXtpFhM0REWWwltS6GIjXsLO7FRAn2rfdxYOMdU4f
t38g4ux8
Name: res/g3.xml
SHA-384-Digest: d3zJxym1gGbECrVaoAjSWKWrE6gOn6FCUr+peVBjxuQ6Igd3SUhu67X1
nySNxnNu
Name: res/Av.xml
SHA-384-Digest: GgpLyWncsRIolhRK0gjzbg8fFPegIp9uxkjTHbdytYSwY4xdtxsFxew5
WyKLGv+a
Name: res/BW.xml
SHA-384-Digest: J7go12UHfiaPOl2H2TjZjRCcvSK7BmBHGwM/rw+L7yd98hDPLyQpCCZJ
Wi4iZ1xo
Name: res/9X.9.png
SHA-384-Digest: kKxYfBYUrMaQfe3MIeDzH5hMtx60vY6IETUiEh+tmCqqeeuQ/Qd5nyyD
jBHkDR5j
Name: res/vG.xml
SHA-384-Digest: YhuJ4JF1s1VzbqVLZi4iMfJN2h1PXnhOnzCv4YuKQvzOthdjhrNgPN/j
KnxqxGgk
Name: org/bouncycastle/x509/CertPathReviewerMessages.properties
SHA-384-Digest: BVGcQGS4hu/zfqSVVjZJNDVPPXkNg39qQ62a0QS1q7g7YYFb/O+f0WEe
z/snsYun
Name: res/color/mtrl_navigation_item_icon_tint.xml
SHA-384-Digest: ceU58PHHS47LYAjLBqlYJFqv/wAbFCkRKUTbATjMpt+ZSd9gCq8+zof8
030WUmZb
Name: res/color/mtrl_calendar_item_stroke_color.xml
SHA-384-Digest: MmsSpS8vhsHwKkhr7DSzAY2mA+275xe/A7dZQHyY8UDRxO9yPHTG7hTB
3UAjhza6
Name: res/Sh.xml
SHA-384-Digest: XYNEGLLFFAar3cUhLRdtUqMiNSRZRVNqBrMI6gCQeVEzxkBCPj/1gkjm
oRU9ECRO
Name: res/yY.9.png
SHA-384-Digest: 3H3QaLlLRhzZrYiBvUITlOVJ4VSArxbVz8Dea09LB3xOHW1YA4uGekME
t15x+XRJ
Name: res/uu.9.png
SHA-384-Digest: VjPICQ289rOcJD8keHqnNLEoZMzQKeVpSJ1vVFRyzVbDGH80PJNms36x
ahGS+qMP
Name: res/color/abc_tint_btn_checkable.xml
SHA-384-Digest: DBUwP+qibmHo991xVW6kxmA8McsP5OJsHvZqadFaqrIDqqEMymROyErq
uI1ldcOC
Name: META-INF/androidx.swiperefreshlayout_swiperefreshlayout.version
SHA-384-Digest: w9IE1UH/gUEbdNJkdvd4BXL4yAaceGr8xqlagTmnOQfkG69IuErYq8ZN
m27DHrb4
Name: res/f2.png
SHA-384-Digest: 9bRe5ns0wsOPvIa5uhUsVThMFEJ0tiF0On9/yAfM7idKEyLduUVcq+CX
jo1Q583K
Name: res/W51.png
SHA-384-Digest: Xyvbv0PkdK6Q9u1i2Hx/FfJyGZQa1feVrtlclYwxriVrK5mjCf8uQ6GW
vSK2Uhle
Name: res/color/m3_chip_ripple_color.xml
SHA-384-Digest: CpHbJB4ezisNXYpBcY39H+RH2bTQ/DZBZKOSFspGPy5E7wQSpJ/NNp9S
lEYpKQaZ
Name: res/OX.png
SHA-384-Digest: bhmOg8yE/9EcycrtrEDJR3F8G5zoH0kCjDk8eSuz6v2gWFLl4LHWPz0k
yH3Km2yK
Name: res/RV.png
SHA-384-Digest: 6FECSxTejC7LxgYgGASZatHMnghakGoe7iANBgsQd2AxjwZuV7PR31wb
ExWha8eZ
Name: META-INF/androidx.lifecycle_lifecycle-process.version
SHA-384-Digest: iLyjWruT6+tRask7Zsf13Og5Iw5MzTYcx3vpWkoN/Sytw8+J1QDZJvKf
eIH5vPee
Name: res/color/mtrl_on_primary_text_btn_text_color_selector.xml
SHA-384-Digest: dMqE6mGo0ZR3hRwIB33IiHzfFLBsTs8Lu8mkOEZKun/u0lENBWUE7MJU
CxjXyDnZ
Name: res/ZM.png
SHA-384-Digest: T22N9KyTgK19fAun+GujpT/UKGuoZ2vtqZ4FG/TFqofqgpI5ehXhjqO2
AhJgSWxq
Name: res/ar.png
SHA-384-Digest: 6+TYhwWE9hZ+kjKS2BFNyIiwfoezXl8FrWdkaR1r4/W22KFWWTJWCiwD
XBxw1A3B
Name: res/UP.xml
SHA-384-Digest: x2vlwvnyN6yKtQMmOo+qp3p6CxsgNpoqULaTIALJziAHYc8hq2K2OtTe
I3U63br7
Name: res/V1.xml
SHA-384-Digest: 2EkCIEGDIuuP7HA31V602My4piQVdBJ7ey+AKxogLRhCWKn9x59eG0qv
+N1YVrrT
Name: META-INF/services/java.security.Provider
SHA-384-Digest: AZixVK1zrBtjHJiG/VcRam6axCdV8MWZrijORgUWzIqaMMiTYeG4uzKH
jygMzDKq
Name: res/zp.xml
SHA-384-Digest: FwOLxbxuHK+SkhTAvqxW3nVn90RC7QvI0bJqYKkuG4PHtzCfX6jTYKXk
sS38ce8d
Name: res/hG.xml
SHA-384-Digest: WAkrHnVfi7VVIkFq11Fcup6+qpcuzYTWxQwZrrO8IQ7Y/lp9Tifn6Dx+
z5fWjm7+
Name: res/cc.xml
SHA-384-Digest: wXcjpNBPgnRuDbsJ683lVBjZ0/uMxPwAxgiKnxaVku2LN9YkE5N5dh9B
XvgYeQGT
Name: res/3z.png
SHA-384-Digest: 0O0OaVEloG5Ah5JTY0wGripR3pCDedA6mFihbx9VVQikPUof+Jxl2jqT
VBjMzs+7
Name: res/0X.png
SHA-384-Digest: lOze27+I1NUKbo5q8uN4EVR+NwRUBNH/dmgZ2HgH8Tti40Vl5MN2wiA1
MAgFZXLP
Name: res/EH.png
SHA-384-Digest: 4nOg5igbKQEud2cogSGWhJFl9cT55MKhyNXjzUy3K0if4UHl+yh/Utd5
Eiealime
Name: res/Z8.png
SHA-384-Digest: LDxcvzhFCeaT3p2ZPz1vnPByvXMqfJrmKwPIKnvcsnfghxxKcOdWV9Pz
5ERTbZsW
Name: res/o_.9.png
SHA-384-Digest: g6DwdDNUgmvD13XB5GfmDGizS4XqqNIg3aQmdsF1uPj0zuxb/O+UurRS
vPHMsDwc
Name: res/V5.png
SHA-384-Digest: 2E9k2cBeqt0/WG3ildnYdmLhFHhoUhnhvf1OUpr5GE3G9IYIrsM0vS6f
lcRDBjRv
Name: res/Fg1.xml
SHA-384-Digest: 8Cqrn9tPTm9PAhq+pEADz25VD+zZ3sVrWCiL13i95q6swLB3NG3AoSV1
FXrW3XJT
Name: res/color/mtrl_switch_thumb_icon_tint.xml
SHA-384-Digest: hp0N6me2TYXB1HrI27efVDgjOy3DAh7ZnW3b6DJ90zRCImSjW2iYh6QN
FkE/s4EP
Name: META-INF/androidx.viewpager_viewpager.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/y4.xml
SHA-384-Digest: NZCHeHFCfR0DJVTJx3/BkZBx69lAA9XvKWROhsjy6/SxJATEB9FJ5Pl9
1agJ/QcD
Name: res/Y3.png
SHA-384-Digest: PlW+A3hCM024xgRfFXVkj+DhbSvd5mn+4qea3GGHvN0uKBHR75s8LQgY
Eexh30B2
Name: res/_U.png
SHA-384-Digest: Lo2pcALp4a1nky2s2ABL7IZpNdyGrenbScuU7XkBWItcEWGsishntB30
imUTRSex
Name: META-INF/androidx.cardview_cardview.version
SHA-384-Digest: giSg6p4ocy3N9b2NhrG/1pULpQTeSuhfZ7tVatNSqySJN0+q+9qU5XEM
DvLEeIHO
Name: res/n0.xml
SHA-384-Digest: SSeCg1RkvV1ZuMy/5+8HemYkiUh0DHSIfelhgEVbOtQHFpo/ZZh6w36L
ZOVJOXoK
Name: res/RV.ttf
SHA-384-Digest: efrBKhmOGewKhbaybaFQ6kJtfGoYFM94aXtBpYSNFgZJ6JDLnMJXPAFp
hksqKnfV
Name: res/color/mtrl_btn_text_color_selector.xml
SHA-384-Digest: vgiDRv3Hh36oWIJZZinvQMfJLZXJ884uIX1PEEBo/z2tJK3Y2vFsoVYV
/SN3GWIe
Name: res/vM.png
SHA-384-Digest: wVYWOVQrFNQr7tiXgpJm2USLiTIo9onVStaE4wawB7/UF7AFJqMWRfue
SVhur5nN
Name: res/PL.png
SHA-384-Digest: c/dQhIj/0JR7e3+29veVUy45zd99fFmCInZ6LnpIla0QOp+tC4ptCXt/
BQzRzPpW
Name: res/Q-.png
SHA-384-Digest: BkP02V9ONzspsPwrSNlnP25XUVpkKULYVrJk4arsVBb3ZleWTkZqKSaf
wUs04Knh
Name: lib/arm64-v8a/libcronet.76.0.3809.111.so
SHA-384-Digest: p+X8+fwtcyeIb3b6Kse2zs4YOl30skkeCFsZlB1cG+3+020TPrpajHK3
uz4H/rGr
Name: res/2S.png
SHA-384-Digest: U/gCV4afyRdXFu8Kuo6+6dfFfOsFVbi2XTlrba9xUfP70wwb9c9MHTyw
ULatK0bx
Name: META-INF/androidx.coordinatorlayout_coordinatorlayout.version
SHA-384-Digest: w9IE1UH/gUEbdNJkdvd4BXL4yAaceGr8xqlagTmnOQfkG69IuErYq8ZN
m27DHrb4
Name: res/47.png
SHA-384-Digest: JoWkzNDaPOokdeRpFXY/XCfdcvf2tu2i6Nk7pqJ2xU3eO1UNsZM0mocu
Y8fxU+XO
Name: res/GN.xml
SHA-384-Digest: v2IP+y6P/pWb8v8KHhc8NDFx8NAuaIK7byKa/Oiko2tAG7iKqjykNYpw
3kCBdlvG
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant92.xml
SHA-384-Digest: 2IyyuZrYsMX1TfXJ1fzwPDl7xTxgyogBiCYSNwm7/zDWx4Iu1UHVH+H9
KJ8jGDxy
Name: res/9x.png
SHA-384-Digest: T5Jri7YRmOR3pREn21CTh3mq+aHYLnFPArTdDk17vd1GRUpdxOdWnNps
N/Y6nL3E
Name: res/o_.png
SHA-384-Digest: mETO+CZOjNfdKsoh3P9WMYE+qSs+NZtK7ib9Y+sGxk/DpCKoE/RlYFv8
2e7YiGqO
Name: META-INF/kotlinx_coroutines_core.version
SHA-384-Digest: WiL9gsoIjr0zczM6o/MWDl4bC9gpKlyXdruiClOZ4naudqPgSkfvMEIp
CXbD7y72
Name: res/SJ.png
SHA-384-Digest: dO+YNL2DL6PlFPeuSU8axqV3TyEMzhIrT2qet9m3I0Z44JClLHyGjU1y
ao8ijrAO
Name: res/g-1.png
SHA-384-Digest: mwsgQdq2V7J+tR0M/yKgOUpEC8XFxNJqcQdRQRGZNaYEsTTi44JOI0Yy
3pB2eGE6
Name: res/VN1.xml
SHA-384-Digest: R8fn5wbfZZ7w5znAlRLSkKIKXPoZvxrRYns6BnLN+mW+EchkBRqSiEBX
u57vLW9+
Name: res/F8.xml
SHA-384-Digest: OSrI1JxHnRzmOn7VA9UuwWuHNafmPYL4AcOSqT3BfrRE9aXbYvUSt9Kj
hT7hEWKw
Name: res/GA.png
SHA-384-Digest: KFMappF9t9dqMx4wKxSZ0WYHkLBXXbW8kfIsNqq15PMqAlJPYvfcCPjh
MBgqRmAL
Name: META-INF/androidx.annotation_annotation-experimental.version
SHA-384-Digest: 8beLkkbbTfzYQ5PfZ+mnJ1+6IQ0SPJBx8JCfXfJOs5S7MjsvxG08OaDe
iYhcH1kK
Name: res/49.png
SHA-384-Digest: 4SyWRFB1aO+fizSiIn1CsiecFDzb1DWhM6Ij5GTHeMidTWC/P2H4CmaZ
09fygBAH
Name: res/6z.png
SHA-384-Digest: 4M9VwvopBzykoiBh15SuRb81h+72GC6gX3CbwZe0cIceYDJvpKXAGyLY
1zWEDvZe
Name: res/color/material_slider_inactive_track_color.xml
SHA-384-Digest: ltydCcugD87Ou79VRz6jIzUwM1GHrVTPswOmA26Q4gNHxgize3bkCnlM
ytYHu2re
Name: res/color/m3_text_button_ripple_color_selector.xml
SHA-384-Digest: hj85u4Fa5PrhT3ZdtiXs108t0UmLahFGxTpo2+62WQGD11Aw8+HaOlDL
LE+wB7t5
Name: res/0Z.png
SHA-384-Digest: xXapRsGlAta1YZCxwRFqQkwPko5MZuXnZbeg7ODlRYbZaKsow/yH4dp7
n+44SiVv
Name: assets/js/script.js
SHA-384-Digest: G8dbNdy1ZzgVd7PFtrpSvP16MU4sUP9jRL6RLCQQ7k/xXHBzcTgNlYiV
nCVko463
Name: classes3.dex
SHA-384-Digest: SpEjh8lyIU+xwzxvOtQx0sN/BEFTiXaaqlM3oe3ec6jEbU0JJV5URgBM
HxGABhcA
Name: res/YN.webp
SHA-384-Digest: QYaFKiUvsXYkplsb1ScurhYhDo7658n4/nODP/RgS5xE5ZcLoh/mimF2
whZgGxXM
Name: res/ut.9.png
SHA-384-Digest: Ic9uhNAVXr86RoelV8yr0/JZAZxX7u82IYcahyWFh+xObKKuifhLjDNJ
9RFW0Miw
Name: res/3R.xml
SHA-384-Digest: x172q0EFCfcexeAhQVZGo8WGOC+iRQ0gHzd1borVeopWYbvqPRWiGhMZ
D059svz4
Name: res/color-v23/abc_tint_switch_track.xml
SHA-384-Digest: RcCXo2k7szne1Z1INL9VUI2boXaU0pn4TVvIxgqFclB+K+S6Zo0VJ833
qqABfQ0r
Name: META-INF/native-image/okhttp/okhttp/resource-config.json
SHA-384-Digest: n4NRny3FGdXpIx6xOl0gAnx5MuYf/LYwHxfhl5C90QetnzN6oQSx/9tX
p5dIypeP
Name: res/qx.xml
SHA-384-Digest: tocHoFvWGALlCWCCxkUiGWDHfRBC34C3MrCITiZI5FWX10tZqCyfboHH
G40wl675
Name: res/rY.xml
SHA-384-Digest: munFCYS1G5Fr4u7wIRrZa2qbyaOf7iD4QSjwy5rPkyCWsl9kGAGUPDi8
TYy/abMX
Name: assets/index.html
SHA-384-Digest: AVGABh08ekKABN0XC/8pBdj1FczMZtxcuJjNMM/6FkwEqv9oEpEkAFlB
uDV96Nsy
Name: res/d7.png
SHA-384-Digest: a5046bDW5rOPCLjIKfKJ+CAhf3G70YwLatr+p3Jqg/Y7u088k12GAK/s
zwaR4WgZ
Name: org/eclipse/jetty/favicon.ico
SHA-384-Digest: uwg9rjA/DNOQThlho4p+d8/6ul0+QrZ50l1p081P+vXVhsDBa2ORh/IU
oTf+BQwT
Name: res/A0.xml
SHA-384-Digest: 6C0e/TmgR8Im9sEONB9bq6yf/K8MR7PtfrBe2Mgyqi5Q5cyisDKFZlef
CK5xuV8o
Name: res/0C.xml
SHA-384-Digest: LWIdUZrz9rG3uN5Z4cCGPUdreZ3ocW1zvZ89y4DJpFEUbbrvgy4KP1hs
NcRY307A
Name: res/Gt.xml
SHA-384-Digest: KAJccf5Z896P1NklWnXfkvh78oCnOMxRDXOG5v3anJb9F2CEZPbEBiv9
D8qfCH99
Name: res/4F.xml
SHA-384-Digest: gpKctNgb2kTVNAWUDKA12a0yIzjYhb+7Hf+mTs3QXgqAOs2iBZRMFnW6
FVqAe+SP
Name: res/gy.xml
SHA-384-Digest: QWDFwubKkzul6y94K6jndOCmtFtBp24/8CS2U1Pm/09hNRVnLjFaZtxQ
O+2wp8Vr
Name: res/a5.xml
SHA-384-Digest: kuqc3W+bteryOxjPXQuLlxOA0HCywrLJCnaV5IbXzLLc0xHARDFQrR3H
g9UAfMaD
Name: res/cv.xml
SHA-384-Digest: hZRngROezTSUwYUCk4k6c0HJ2w6tTsm7N/32eJtiXZRb6qfvdbl84V+1
vJpCmaUw
Name: res/jW.png
SHA-384-Digest: Q8dfVTlza1X2mkmFxPh3wNqXKeJo531YntBgsb8Xl2driIxHBbPqsg+b
jJnzpjdr
Name: res/my.png
SHA-384-Digest: QtSh+g9dw5Ss6A9oJJGB7UfUHe6nDOOqObuxan1M1CNF5J2wHypV4VWt
nBGUfZQa
Name: res/YF.png
SHA-384-Digest: mMdasgblyPTdKs4bOyKenakpKhSJ3UlfYNc2mglBAJ53k4WgqycZr6Jy
wv7621kR
Name: res/nz.xml
SHA-384-Digest: fTfgM7966CCGxK+EeIuhEEdZ/kvpbzBBx9hH6I5X7X7DRJhWfZ47g+my
cXWH+5ia
Name: res/color-v23/abc_tint_btn_checkable.xml
SHA-384-Digest: dYqKoJ+YMO9w117fZCA/nUXci06bZelw2B3yFTGjxyJ6bBb7842i1XPD
pDSlKH/1
Name: res/2d.png
SHA-384-Digest: 9BZsFwJmH1O3qxEWF6y8hFw/H/712eSmdn+7UyWLYeVG123rewRm2XJD
kFfisaOY
Name: res/3E.png
SHA-384-Digest: GD5dyD3h/T8CV/GSOjlwTUnwGlMZcQmsZrdgI9DhFlSArYIBWK0VS16v
4TeumVTK
Name: res/qA.xml
SHA-384-Digest: TEbsguqQ4TmDrhRRIeaEskxPgq84/MuwAMpFPSa/hBJbAChB8Z1YHSbU
6+R8HxFn
Name: res/lP.9.png
SHA-384-Digest: spi5A2b45rMlgjg/+dhrtGwHhr2eD5W+81PRshtlQewBJwkWCM3izdlL
vUEyMgST
Name: res/CQ.png
SHA-384-Digest: ad7di9iRqobZV3Zf4eHvLUxpmIEPYKPexITsfn5S7XkWyQ545TGHsoZx
9TS7ncIl
Name: res/WI.xml
SHA-384-Digest: IRUQvhNEzl80evXzIdGCEPfuYvZXPkc8+IMarIwclXYFQ/+E0plAMSsK
evgb4YAr
Name: res/color/type_text_color.xml
SHA-384-Digest: 0zQXu4klACjVNR4gEZOSc0oq811BfkUD1ufz/AElK4F9KeG4g2JW8yhF
qzcKUyji
Name: res/eO.png
SHA-384-Digest: FFq7b0ooP5BRXc6yXmfZiTNTyNDMwkXsIHaD/uSbwmVNWVE9oMGqPWYd
9MYhMZnA
Binary file not shown.
-6470
View File
@@ -1,6470 +0,0 @@
Signature-Version: 1.0
Created-By: 21.0.5 (Eclipse Adoptium)
SHA-384-Digest-Manifest: spU8j1yBPQECTKA+qk1Y6RHFwI+KNqDeRHs4+SaAg9LbKdW
R5UsdVGNvNQsfo+yb
SHA-384-Digest-Manifest-Main-Attributes: wtCK1yIPZiLzrTFRWjUnfq7a8dH+bD3
8TZht8j65teAMH0MXNB4GMak7Di0Ugr/P
Name: res/Wr.xml
SHA-384-Digest: idTnOuJ+4grSYpaMiUJmPr/ySHMp45l4/tfdQGr8k5nxyvLiPKYdcJ+z
BgDzRTQO
Name: res/Hd.xml
SHA-384-Digest: MAP8elVjqLDNOu07lEabbXyNrfacbdt0EioBTAVGkTSEJ+aZvW5duIiJ
Oq2UoXwy
Name: res/9V.xml
SHA-384-Digest: WNuDxjBOfnTSZoR2UB7ja+ur4qSU60KlerDjhOjQuHHCUKGEqDh4iqj+
g6YMSLTM
Name: res/color/mtrl_navigation_bar_colored_item_tint.xml
SHA-384-Digest: 5O51i7bR7hHN4u6FEvUxNI2rYRxX4WPlTjKLS/baSvyQ4mmtw25s/TUT
XRmRu1h/
Name: res/uT.xml
SHA-384-Digest: rwkhfhxpL1XetnlL1OPa4n1G5CMiM+hH50gN+eFbVGUJdUoSArYFpY8K
3u/TUxSs
Name: META-INF/versions/21/OSGI-INF/MANIFEST.MF
SHA-384-Digest: RTY0VA7xSQCJau8y2puTRr4E3RR26MQrHZpn/fA1bDwxKqSqe+ltBzHj
6fjBW8S+
Name: res/color/material_on_primary_disabled.xml
SHA-384-Digest: 812krOUQQlHQ1W5eiP94jDVisX6OgWHHpmk9Ye/yyK2Jc8Mev5g9C0Ea
9WUQTzuC
Name: res/bN.xml
SHA-384-Digest: unWOJwMEVf2StH55I3eIn4ql0iCN8ES6t+pwd/Jw87gdyn6HRn9VjOus
OkwBcUgd
Name: res/Jd.png
SHA-384-Digest: 28lz0AkhLR0mWLfgwkDa4EblbDAQqIqLmxUcmGCtdqQKkNSusXrwA6g2
cQIRWssW
Name: res/th.png
SHA-384-Digest: 5cD/sZe06NVCv24+fRTn8BHYV3m6HyRNgwzoCkbuxKLy3VqQOq9vx4w9
SJdJP/Xa
Name: res/wP.xml
SHA-384-Digest: 8up5bQwmCC75bKXVKT7ogGglDOhuPT49vjfeYPR17yZ3KSGf76V2eByS
cjUXS9HN
Name: res/33.9.png
SHA-384-Digest: Hkl4P7KAsPANxS1KHEJJpRGQMUTAwQBycDhFv97MNqh93ALE4PqfxUyO
tLp0jm+f
Name: res/7I.9.png
SHA-384-Digest: B8bojrlczZOQScuXZT+Mvns3TymoZ4kEe1I+og4RtmQjdu6XYdUREcjB
xM4oIFql
Name: res/NA.9.png
SHA-384-Digest: RjqWhQBclkzHfbOKxMFSxqQiiInLdN+eu9+6YzkgH+Xyq+p7/xzR+QJR
G9jcYg8y
Name: res/Q5.xml
SHA-384-Digest: ofdPTqGA/dalRcQ6FiwllNpfYB2zg9KXbrpYnBpi5duVYH3uUXUrmgXX
4Vro1T3r
Name: res/QD.xml
SHA-384-Digest: PypiGJL58dHbN5fJIaROaQ2n1XJKduHzgLr12PYKMlPkHAzBsUfwpjSJ
+sdq+U0F
Name: assets/js/lib/http.js
SHA-384-Digest: R0zDXgt8QaUZuwEkc/JGOEIZeV5D6XNCQETIu3lvIwHs5BP/4ePv9biS
RGMC5MbW
Name: META-INF/services/org.xmlpull.v1.XmlPullParserFactory
SHA-384-Digest: cmI/fwhpVkXzfbvV8K/llYXLqlCS2kpDaoThS1b2ByP6QYg9g2fRrUu2
ocwVdDFW
Name: res/OH.xml
SHA-384-Digest: zkYCB3dHhVO0C7WihbnNh/ytSYRfH/L2K17xODRuAwcww39BLTLbI43+
6DabCvOb
Name: res/color/m3_bottom_sheet_drag_handle_color.xml
SHA-384-Digest: ZwTfd6tk6+pqIHaNET/1mNePFnrYBrNgUQ+jEGa2d36Cb/ZXL/FbJKGl
7Mnykd/9
Name: res/Da.png
SHA-384-Digest: K2zeuJnvYSI6ViEW47YWSvIizXpmWL4yk8LXrUuDbP5wzxl09ge5ritZ
qs1zeBC0
Name: res/5O.xml
SHA-384-Digest: He5teL95AdBR2qG77zN4e4mdy7jkJPsVEN5O7mjP27G35joXirUMjm0P
mezMrkid
Name: META-INF/androidx.customview_customview.version
SHA-384-Digest: x+f6M3NBbU7KqnJew83LI2yu6yGAE8+1Q4zf0D1gNgAAapV7gdqQfEMl
dXDy13OK
Name: res/tw.png
SHA-384-Digest: VrzmhZkubMKTZYAc6DUO8iODfZON4TuQClxfqEmLlVcTWPxs0WzO0K8O
NLorURJr
Name: res/uX.png
SHA-384-Digest: wg/SgrbR/J54RUKYdWa/XfRM8F7mPyZqU0mIv3i+F7tu+0AmZVlWkXNL
GEFvfXgn
Name: res/1K1.png
SHA-384-Digest: Om1Kth7elJxHA03HUt+55ci5ojTFkKafvZI+4ugdH7bWZsMaQ6HyUPEG
ijcCDkYQ
Name: META-INF/androidx.room_room-runtime.version
SHA-384-Digest: uCBAcGCirOmvVwGsX/q8kA9krcqAiJYKY3khx9QugSU4YcE1MJA/YSyz
3q3qPIBp
Name: res/TL.xml
SHA-384-Digest: YjmWzoCzItdMBEFwytN2D59MdjjAwmS0nz+3aae6/sYM64f7HWgP14If
SFpS9/8Y
Name: res/0K.xml
SHA-384-Digest: c/KQOp4kqBasOx+kZTVjiHGZVqJwWH/8zgjaQCartsAqFmfiShS0ANBK
FXsdust2
Name: res/color/abc_primary_text_material_light.xml
SHA-384-Digest: 2ohgYgi+nmmC1/NR+p78dEtn1ZlZakiPutOyjAhVt95NSpeEq1jFYt1l
gQko9YUx
Name: res/hm.xml
SHA-384-Digest: GRITB98YSXLsOSqt9sGUfajSdiWqDD3DiuM7Puci3im5UwHSQ1ogDmNg
7FGso5Z3
Name: res/et.xml
SHA-384-Digest: izfxCEsQ38h7PhB0b2bZ4BBJWP0xeXkeNxrp7hy4B7KCPHlJR/z8IDv/
HBqGmXoN
Name: res/cZ.xml
SHA-384-Digest: 7tHOHDOH/+AsgrXArICu8CM926flbrvfwzdpovj46XKQ6xIfKL3jfuQV
T8S1nK6U
Name: res/B6.xml
SHA-384-Digest: +LkxO7KeA068p9VUNy4BnUD6oS+AbhyAGIbEdAoPV3Mfifo+h/AGdVtO
MWg1YcPx
Name: res/color/abc_primary_text_disable_only_material_light.xml
SHA-384-Digest: MYu4UABn3I8QBVJKP0PRytb8mPGmd72+4fU4fp0Ob+Mddj4iMv7oQMnq
vARjTLB3
Name: assets/test_base_module1.mjs
SHA-384-Digest: 72e1vHdyew76EmHADCNdu8V2Xv3LmFllVn/PHepuM2XETBX7LZaZ1c6e
PMpez2ys
Name: res/_7.xml
SHA-384-Digest: JSfzjsI2QUcHYmDLDlF0NCmu10Oqpa8z6jL12MGBp8dlP91VT4vhHjr1
qbMx+Jkx
Name: res/color/m3_slider_thumb_color.xml
SHA-384-Digest: wC5s+umUZMmJWK25/RQ4A6weH63RhlK00G64BZeIiXeln7cKJQM3Y0l8
cm2nLKff
Name: res/sX.xml
SHA-384-Digest: TciRkUBmVfUX0Sa4V4PPyH7dWEbuFdPM9YSppHCvzTpCw20Xyff7j2gA
VRz/0O1E
Name: res/color/m3_timepicker_button_text_color.xml
SHA-384-Digest: h5yIIlyDATg0DbwPI83NGGPEVwWyEnA2hI+IAZPC9LTIOlm2cIZ12JRn
Ly6q0veo
Name: res/jx.xml
SHA-384-Digest: TLwwIeFcxelkkhB/ZO+8E5Bq4kevV0UEkvFeYGx+cCVOoXQpty4+9DAl
RvG98WoJ
Name: res/color/m3_slider_thumb_color_legacy.xml
SHA-384-Digest: h8icCKEa7s+n1s5qSuGrhGsYvcoNWH2T0T7Jeertd99nPw5QsLpVLjbk
irxsOnP6
Name: res/UX.xml
SHA-384-Digest: hm7XMXjcBztx7JQWZjad4LBRw9UzI0IsU0ZsyaZMOdEmyemNWkxjGy2M
kEoT+xbx
Name: res/df.xml
SHA-384-Digest: EY6I1KqZWfzZ449A9RlsgxpHoPMuWxVUocqkt5e7UfGuKtR9Gvf9mFyB
Leio0A7j
Name: res/5z.xml
SHA-384-Digest: VESPhmZHV6tAv/riFsnQk+5VU1OXLq1m1Tlw+YBsNEnQLuFlNwaFKir1
3cnPsqEx
Name: res/bj.xml
SHA-384-Digest: GmWETGi9c3O9fywSoL1DZ2hxB/Ks6KkaU7qDmHffLpqPZZ27XyCEqz6V
WF27lQAx
Name: res/color/text.xml
SHA-384-Digest: u8UGls2ZbZHPkAx8FTE4Lv3Owli0t9ux2OrwAT1m/168y0OrZxOylWV3
zfN4M25s
Name: META-INF/androidx.savedstate_savedstate-ktx.version
SHA-384-Digest: 7zmS78TrX5a58R4pBlbYv6d0B1yGt9W0FiyDGymt9o5tyJe1tGfQ866g
iPzm/oZe
Name: res/4_.xml
SHA-384-Digest: 5A2AxdigI0LY8h53fmVPGKZKX7zhid1QPHzOf+MY9fGozufQEigrYa6f
EkY7zYex
Name: res/color/material_on_primary_emphasis_medium.xml
SHA-384-Digest: PAMjzknPyJ88ZJnNINTrmNtlAP5RnZMU/b30b26Z+rOPmdZ8dR49d8aO
XzfKIU2B
Name: res/hZ.9.png
SHA-384-Digest: AU9czvte0gBRCEoZnj7JDHnaxdEuhGZK+eeCFXb7xPEFhl0IjudvAs5r
dHIeBA5C
Name: res/nT.xml
SHA-384-Digest: DCmxeg+RxdYXvAxd5fiE+vdCoOOseYqe57XsU5BfetpQuM7hTrbScmLv
Z3i3AEsX
Name: assets/images/ic_search.svg
SHA-384-Digest: Bp0D+tB7X16P/euiUZOi18tGvw7qcIRQviey36CgQh+LQVm/dvLEIOPg
6vvM+ZWQ
Name: res/s3.9.png
SHA-384-Digest: Dt/ioJBnluUzC89qTVvLK5RGAmtNMf7sNQS7eMgEi1NraHNa/QXO+eOP
51wTeNxQ
Name: res/aF.png
SHA-384-Digest: UARBNlMr7q/CYts0FYpfyhfL2kWMciknjSO6nX1Q8OgLkx73EDHFgZqO
p/OcYqjC
Name: res/up.xml
SHA-384-Digest: KpXtWSv8fstwU59XQLRDVCU8Ft+qwjGtWqlVIxE4VO70TQ6z3fYfNW8D
8l2/hSlk
Name: res/yn.png
SHA-384-Digest: 8KoVS2e6NUdBlSfslYx5UQhsVeW/BTamgMf4ZAO9hyS/FAw3KUOOQYwm
rsA+T6ip
Name: assets/css/style.css
SHA-384-Digest: /PGLdCTpDXNz9NUD3+EM4PmSh35IgPWLlO4uBwKjdqphPRoKyiMnmx5m
LAuzLZe2
Name: XPP3_1.1.3.2_VERSION
SHA-384-Digest: 9mnZXYTIecUCW0kADWNdurGs5q/02NSxnW++TFzvv8FSylIibhithNAj
HIquBEpm
Name: res/P8.xml
SHA-384-Digest: AOZCtguTP16GgAk2EjwlOECOAGX20auOPJM/Fzbcn7XMyi1RFTkRKVF8
5LHF58mi
Name: res/color/m3_slider_active_track_color_legacy.xml
SHA-384-Digest: cc1LdFeqq7g1M6uPs3y4ZfEmRmaCsYYHUB9nS5/Yxp9dfJy4QyOIZqMD
XhR2nByM
Name: res/gr.png
SHA-384-Digest: i5wOCrYQopHnOfr3UUgaYScCIoLYXtvTGBlbxXDr+mJEDe5VVWyCUydS
ILi0QhJ6
Name: res/i4.png
SHA-384-Digest: V1uxZqfnrBqlX6WGnx/Bg1c1rE7klA9RZ5H4sjEBk+MqLrGLXrmzCmAC
KMcurWT/
Name: res/oF.png
SHA-384-Digest: scY1ph3dHbHdmA7PTheUY44nq9yikbuU1YovskxOjArGngn4m9T8LeRj
mfXA+Itl
Name: res/gR.xml
SHA-384-Digest: 0+IBvj9URyv4MvLW0MieHGgaWRnZbBBCX/24REWxYF0Z455zs7mueG96
Cxt9yYZN
Name: res/UO.png
SHA-384-Digest: v9pqI3aMZXOaaEZv0uNEbopjerSOqQPZWHRvcvsab4PZaQZt/yOsQJnY
NONpaS4Y
Name: res/color-v31/m3_ref_palette_dynamic_neutral96.xml
SHA-384-Digest: Br7LOo5vW9SiiN+jkuAdVjFqyx6TjIztcrTA2qan1LEL1abAINxePkfq
PkQP6nR3
Name: res/L1.xml
SHA-384-Digest: bURkmznNDf7O9m8koBAjhXann3NT+lZidVrCmUFQ2lQO/whTc2/xNzAB
uwu2xpam
Name: res/color/abc_tint_switch_track.xml
SHA-384-Digest: uKfCb/8bnIPswVD8itZ4pZ6BpScs2jflNcz0oW1FhGGuk36nO5p+xrC/
R4ullaYz
Name: res/op.9.png
SHA-384-Digest: vIltv5PI/CqP1oi6v7B1NTNMfAO8PwGECOB9nr0Am3MpxCL4wzclGvau
Vxf3nnm2
Name: res/kh.xml
SHA-384-Digest: cA0lQXjqjnXpoIeEieSEKsykThjBEiNsAdwLuRHmdzeh17YPsWiB8qYa
85YaaqIw
Name: res/M2.png
SHA-384-Digest: 8EJkhukB3mkLLtxMLZu0AR7Kdbr+MT5nKw3oF1ABLjxDa0IF9snhJYHv
Bmavi2Nw
Name: res/gn.xml
SHA-384-Digest: zQMivYEJQAj85p3KvSktTmbE3WevN2JiKgcDr8OF+X7Kycjgh/tJMcXd
AhzPiv1G
Name: res/5D.png
SHA-384-Digest: C9f9gIzNbvNC7UovAS+FkaDSEkmR+2nPgw7tiFsNMiMnX8NAUpUc1OOc
9YI1IMej
Name: res/qz.xml
SHA-384-Digest: 5zSc7iEsYpHyfPdyKFjwUBSEiHcCRnqj3JpU2xFZxtmlMLrrYtH1LlaB
gsbdwKCK
Name: res/Mh.xml
SHA-384-Digest: kgbwySrB5PCZleoja4wsl8FbT9+4+Lb3R6QAhELJQ2+cNSAtnwB7zGYQ
97/JgrJ/
Name: res/color/m3_textfield_filled_background_color.xml
SHA-384-Digest: YYfSj75C0JyMxh5E3+gS6A69AYGCmmxcS+Tgg/x5w+VRRzfmsT5KUpW8
3UGw+eZa
Name: res/color-v31/m3_dynamic_dark_default_color_secondary_text.xml
SHA-384-Digest: KhB+OyvfCQB5w+FjwT2TWhC60TWIVpXYK2j8vCOVr3/z58jFNJwdu5g4
eomRKyus
Name: res/oB.xml
SHA-384-Digest: rPodO/iwhF3EHey9cDSWi3N3v3W7duRMxoSGpR3sj+EkRJmmyOSrKED1
vYu4/pUx
Name: res/GM.png
SHA-384-Digest: 4nhnigZ+9+I8nRB1sKbGzyvJoysUq0v+d939tdvt/QIVakyM2t/KAIyH
zE0PkKsA
Name: res/fd.xml
SHA-384-Digest: h9efeQJOzHJ83bSFsJao+zZLWghH3dX9zTTccMcrhcGmGjIZlOVb1WHE
fnOi1GGy
Name: res/2T.xml
SHA-384-Digest: cbeLDXIQE+6kiOkzLLNZwA4C6Yy95Bcj3mECGi6sVrfU3LDxBFjgjfL3
CXbVtcvU
Name: res/color/m3_popupmenu_overlay_color.xml
SHA-384-Digest: rb86ouj4hGlMSeaLztUC2SwS6yzzrvCdTwkR0Nm3Xc1RLsiSFCCQ8YaP
v26S013b
Name: res/YV.png
SHA-384-Digest: NfXyBZyih5gpxvusb4BgHBUmsJYaSMzodterzIEtDfVinNGYnXOItlfP
i17hIg8D
Name: res/Z7.png
SHA-384-Digest: ppS7cxpIAx6qG0+C2I6iSIOKaJE5o+C30camajS7fT4i3VqRGLke1ZkV
Z+gi60Eg
Name: assets/dexopt/baseline.prof
SHA-384-Digest: kICzefqwPPnczaeRAcxPWkMLMCmsDKWHV5uDvuOlkYCz6OZHKVNyAKlE
nbnofmIX
Name: META-INF/androidx.exifinterface_exifinterface.version
SHA-384-Digest: LoQjyhn6Ol9ftQRXpE5hvIjmPuaYcD5/TgRG4juO7ls9TJxnfYaHNLHH
2uP2QNBv
Name: res/E5.png
SHA-384-Digest: BwRClQlB6ZZ/3YnW9NFCxOiP9jYked3U70wBSQQrNf0asP1Es0cdfIUF
pEota9tm
Name: res/Fu.xml
SHA-384-Digest: 1mshigY4lh5No6qjqPUaU/lJlW3ykwLB9xeb6S3crT3AdIB1flFsQLz5
NmMq0uiW
Name: res/QZ1.xml
SHA-384-Digest: ueDG5c4XrX46OZep2gygT99JpLdpt/5MHlUoGEev0WxQ7DATKE5ekBFm
y6gwQYs3
Name: res/tj.png
SHA-384-Digest: k43/4BzhIrZTOhqMXL967XDQbhG2+KET5miH0C4LN4NAqIgBtuwrORcU
sop6y6iC
Name: res/Gt.9.png
SHA-384-Digest: ZwKa+WpCC75muylnbMmih6hi/13RDv9vCyVqpZsHMfZZzudbP44W5syK
2M74Fhup
Name: res/Yp.png
SHA-384-Digest: NW8Meyx7/C5tDBVLDYmMvUIcOwsKQXcwGa8jmpJqly0n7ysrBmfHNs/w
FUae7FnW
Name: res/lv.xml
SHA-384-Digest: j81ejnJA7RO3dCYmwxHIyqmwlnLQuhi/iFZgisY7tsNp2HdkvbnPrlf8
pp/VGfC8
Name: res/_o.xml
SHA-384-Digest: oZS2JTAc7seSC3dPy0GtNXJ+008ZJsK7p9KVUlrzH/quR4sHbdrDQb2a
AwH6MvVz
Name: res/a1.xml
SHA-384-Digest: wKHyELLKnP6pSHxm7TCV1SR7/Z7RWSzdXhArIr7aOBRKUBtqaZt39l63
bwt0hVYj
Name: res/jz.xml
SHA-384-Digest: iPWl8c6NeUY0xY4M3/8ewEZ3SkDvNpzW/zCg/wTZ+lsii2ZDaJxybNDQ
ZL75G527
Name: res/PV.xml
SHA-384-Digest: VFWTPZJdyv8l1myZC+vXlCrcDm5tZNzBkOt0R+jT7/6dxuIfsVAhsH/H
I0GQhwFJ
Name: res/Q7.xml
SHA-384-Digest: garSwj5BJNaS2vanJnOQjfYEOKZpU/1ZaPd1m75N610IHrwr5zIzgEyW
g/FDjNaz
Name: org/fourthline/cling/support/contentdirectory/descriptor/didl-lite
-1.0.xsd
SHA-384-Digest: Vqb70kZmHnDRzop0smQmY9Y3BgnZCz27eL/AIaPbOqhqtNy3OWXyXNkm
v2w0HzMS
Name: res/3U.xml
SHA-384-Digest: se2NQciu1B0r5QwSzysXHnJjMyE7vlnmreCR+/YlFcC3LB83zqfEowZW
itXOsvLs
Name: res/46.xml
SHA-384-Digest: ChRep6I9RgOfNK/XYk8gCFKBGhJQKCQbw+utUpnRPmm/3OEuz4pIotRL
enT+Vdvm
Name: res/color/mtrl_tabs_ripple_color.xml
SHA-384-Digest: 8tqR3zp05LTPs/pZFyDx0aaS9w76L0Zt02COGUeS7Nka65w80C56LcOp
WicuJRfv
Name: res/My.png
SHA-384-Digest: 75tQGUj+Ysvc0Qw3muI0A8+5SNd5BVNsHKcMThG/zOZvCu4k4b2LpUJB
sdeh0hX8
Name: res/uR.xml
SHA-384-Digest: wU/Oj7Xdn+fHguJmQqqtsK29roFGJg6g6bV0XHffo8APA2hyxk8RAVAt
Eavh/ok0
Name: res/ec.xml
SHA-384-Digest: ZVI6aJQlKeJFXtPfhdqs0tXTCRMXYBSdZZLXvKb3Mowp7d7uv6rW+cmT
D4CwXAPp
Name: res/pn.xml
SHA-384-Digest: afPkCFsQyNYMSf11nrkoylATUQD14CT8vbXCziiqVKsb/LmZK+sonrOL
QEUkTtnp
Name: lib/arm64-v8a/libjpa.so
SHA-384-Digest: CpJl9DxsVk4xaQ81SZQrBUme7YdJwV+52MMLF+knOWhS1QfHvt9ak8LU
VxDXP8A3
Name: res/5U.png
SHA-384-Digest: JjtlHcMnxqCDqS8YfLz+YhITLzZ9wqVnCiQ9K0TiHgiI3GV55P06XgPe
iZbxALqb
Name: res/YW1.xml
SHA-384-Digest: sib+Mckva+HIR4byA8sgzN7HG4UBBFrWcQrnbURruuPnycef3Yhwukqg
k69YV10y
Name: res/GK.xml
SHA-384-Digest: uXF/Wpw9VHf1j1T9NrSAetu8WpfD4Wtfi3bH0MCwkDhlOmpf6eTV61bw
gVuFGh/P
Name: res/ZM.xml
SHA-384-Digest: aInpUVU+UfO+tjSzzs2TJ1H6V33/kGUrty/3oBAYZKz2YfAZjyDdSylb
wLZqNyYb
Name: res/Ui.xml
SHA-384-Digest: FnfIYnxsx43thUfT8LkcOZs/l46P2w8vHQJ4NKRHeAOS//ZCD7BSYPw4
EZZeBbbj
Name: res/8s.xml
SHA-384-Digest: xZGdhAVuscat98fzp8qodw9yRtND7Dw0Nj3j1wr+lQ6w3NKRK3/Iu01Z
U7G65hSJ
Name: res/9T.xml
SHA-384-Digest: wSG+2vBlec3rHuuxhoBBTBwviMT9XtTneSMFIPlp6b8qxYIsJQyyd43w
l8GscwB3
Name: res/color/control.xml
SHA-384-Digest: IRqk/+EBRvpg3LLtqTzXDw7UyKj03Zw+aCuDAJMib1Zg0URFuVyIxScm
hnRSlZwE
Name: res/n4.xml
SHA-384-Digest: /dfE31ox/0sb4TQ24p90ZakwjT5aQCffLMdL0P49HJEI9WbN8Gu+DxYV
XO9s4+zL
Name: res/color-v31/m3_dynamic_dark_primary_text_disable_only.xml
SHA-384-Digest: 6gnvATWMZ/mXFN9tx5VcRkaiw4oB9WR+XfK6H8NDppoieZklahcBRKs3
FiOVZeCt
Name: res/42.9.png
SHA-384-Digest: bAxFePiHYhFiWs1wN1VTkcMvbsNJrnE9E1XfGafI5bizXdjHiTiu6uVV
t9WuI+jC
Name: res/rJ.xml
SHA-384-Digest: 8K+ZwxrVpParOpZi3HhUWXiFmo1IEQn8JuVAoeAt/7nGLdO72UeOvKVo
CfG8jVlp
Name: res/EZ.xml
SHA-384-Digest: UQ9M//aLi26z9X2gkAsNrNn+nSFX8Z6PVsyZOzjFO4hHCFqlod4l7u6U
iZrSY8n/
Name: META-INF/native-image/okhttp/okhttp/native-image.properties
SHA-384-Digest: Eyatm+51aFgovEp+zn/7H/ypoCJz15NM2olB5dmhtXDcVip+14xPITFb
HF0iik86
Name: res/mf.xml
SHA-384-Digest: BpDzrB0nsmUpwv6TjM+GDKuX//b+fzwKKijRmwN8yvU26nBLqEPJT+XZ
4XQH/PSN
Name: res/JS.xml
SHA-384-Digest: SSQZalJOsxkBbs6/tc7InJlsVzL3RkloL0Jnk3dgT+pUlmsg9naHJAiG
LajJ+B8n
Name: res/color/material_on_background_disabled.xml
SHA-384-Digest: umPhq2p2BVem958gaaJG3oIGY6fbVROB7hH8aNhkoG+7pP+I0yuts9mR
WiyylvL6
Name: res/-6.xml
SHA-384-Digest: mP0W3Ov/CkPlzgMWw6Hn4kgfskjr0z8J+KWu9fAlGfv/nb92EU7cYD5y
5PqQTrXQ
Name: res/9T1.xml
SHA-384-Digest: IM0gBPCa2y/fdCRP0B+rgmDbIc5jS/4Kc9AAaJd929+jEKM1MWqaWtHG
NAP/dvwi
Name: res/color/channel.xml
SHA-384-Digest: y5VqiKPYMz1vfwZXTcEb95JEiU0syDDDB04K1+ySeZdrJUzm3w0Fy/ak
w+PYs6IJ
Name: res/ue.xml
SHA-384-Digest: GGrQqAn28XRAQpL+ziGT9NyhpHsZ70UTAQ7kufw7cfRbeSUkULkNMzbm
TsLw+p4G
Name: res/vF.xml
SHA-384-Digest: +ZtTifknSu9b0sb46XqF6IRR2nElxiEGeX8VzI1uSBUrtC3xvvzfaibm
sei/pklh
Name: res/k0.xml
SHA-384-Digest: /aW++hejWwRi1WvbQjLfvaT0iOnYi64JbV02BHDTUavIfoaE+cgLyGht
BeQutnbo
Name: res/color-v26/biometric_error_color.xml
SHA-384-Digest: AwmZ9HIL0BkXwmkpvBopJ9oxM5I4ApB7pw/baonNaM6fS/YVwVLaGL+v
lzoczjw4
Name: res/Tl.xml
SHA-384-Digest: RDRQJK1M1lFaxCYQ+3tQaWzl+X396Y3n6g/cVB3IeV4rharlfVXRTELQ
L6eardVu
Name: res/color-v31/m3_ref_palette_dynamic_neutral24.xml
SHA-384-Digest: e5/elpvU1k49A8NCseOjzyiwXWEzEYmv20Z+L+qtkDZqJWNIWZxfzMEL
7PIDBgGR
Name: res/fS.xml
SHA-384-Digest: nmbnLWWm4rcACBeu0qZ1TQhz3E2arv74HBhUAD3RAHtiAuHVmdzBV3Zn
M9PIg5yN
Name: res/vq.xml
SHA-384-Digest: YChTCqT98mJMdpmQFtipDTPiuukGnxUGjEIUhEdlOswfRZpd/OXmWx1h
XlB5w5oh
Name: res/Dn.png
SHA-384-Digest: wpxafCZIJXA5YIQppyn5kITVn7tKE8wgVMy2xnxvc1YQC3dVBdVe37+s
ffClZXAj
Name: res/R2.xml
SHA-384-Digest: faFaU+S7e+rRU2il/5WjUg7VJRD+SVM4B6WeeEz6Bf41JOZWqlJRwuW9
LS9nwG/z
Name: res/bP.xml
SHA-384-Digest: EK7Wxx6fHUkeIHLbWzx3ZVCpZOmEREnUvzzgrD+YNeoer3/KaUDJXN5w
3WoFlS/9
Name: res/A5.xml
SHA-384-Digest: PelWQfnT5tLHaC4kitZjkZYJvPQY+wFKu+N+PpWQm0+X7AHdR1W4/6Dw
V//nthOo
Name: res/color/m3_filled_icon_button_container_color_selector.xml
SHA-384-Digest: MKPmNd8DDK8R8ub/1kLcZqx6faCMzLqKwkNmttrgxMKcp5afDJ8sWbqz
KytJZCdc
Name: res/PC.xml
SHA-384-Digest: QHeHxlhNiTrsMHwKbiHfIAL1TUTIxRcIg+7dLiAVioEZTisicX3KMC57
USlzcxj1
Name: res/q3.xml
SHA-384-Digest: Z27fl42kubfXX0AvLpgy0JNTdNRwrMwceKqxE4JtuDR8PGyLtyZBkP3F
CkRPXUqZ
Name: res/DC.xml
SHA-384-Digest: oxlmE0Oc/tQ4yqXA6w0PPOwuSIfR7Gr/ODsd50WcMyRnPPgdqhxhkxLC
0eyAVJo8
Name: res/K_.9.png
SHA-384-Digest: ACTxR8JLkV6foffYYRJwLAJyo7EPbGZv9hxY8JFOeLKJtMZz6qm+gxd8
wdyUfF2p
Name: res/color/m3_radiobutton_ripple_tint.xml
SHA-384-Digest: VRR5L5AlMU1W3adMnZs4lnRf6slbVFTYuqFKuNRIU2PNQnGL5iWPy9JR
X7BU+EVG
Name: res/Pd1.xml
SHA-384-Digest: JTu3XKFUKcKOwnXfMtXE/kDQyaMDqSegTmVGLnZomBvTbaweiO6mQNPx
1DsZ5fn7
Name: res/Ge.xml
SHA-384-Digest: KkhnoqJNWcdkkPId84rbEKqrIr5NRICLWou3xU0Uz7CGeJSogxjxivGn
NFSy93fR
Name: res/ue1.xml
SHA-384-Digest: NR94HjiOaC1fO5bsZ2AwbR/81jg8LTg4TuuKkMR3LirV3oWsRmzVwaLH
8NyGiaMQ
Name: res/d5.9.png
SHA-384-Digest: sKmulFpsmp31dpCj3gjcs4ZMNq8xNXOBsfWgJ6aNbcbSnrfBW8gJlGJg
d7RVJWM5
Name: res/color-v31/m3_dynamic_dark_hint_foreground.xml
SHA-384-Digest: CpEE+Je0rTaCtwOwZ01zCQSJ7JrZgLhdBF3dTOCGYH6jAZKzGuK02poo
TQBRKQPA
Name: res/J7.xml
SHA-384-Digest: /cfDEUlCbKuu7pXkeI88i/sdNuIxir90iLkgoBClaMf+sgIoPcviB07g
Tf7DEjS9
Name: res/aH.png
SHA-384-Digest: NPE9bC4qSGbpxGUphXY5XTDQ03NWi2SDwgk1fpGVUSE4XJL0HfHPgnet
xj3p9USl
Name: res/ZN.9.png
SHA-384-Digest: yzhhWYyTkGj9gNJPMFlTpISk5Y49P2AaMDF/yOwTStQ1XUGS2au4fQtK
gZKDjcdk
Name: res/color/m3_tabs_ripple_color.xml
SHA-384-Digest: 9mbqMy3xWdd6omDSflqGk6lT14cH3Gd2pwmXPUeT4zdrWwfTIlVs4TpD
rABSKR5c
Name: res/6P.png
SHA-384-Digest: RAdbkupbHKux/35Tr8HnP3cZkiADP8lbkoszl/ptaaN3ZKXDrw8UguiB
CZh2iKTK
Name: res/71.png
SHA-384-Digest: KbCCz+wZ+qXpKYa1z4s+7KfG6skRE8J74g7d6EwzfkhqzuPGRK6VrY7j
my11+0zi
Name: res/color-v31/m3_ref_palette_dynamic_neutral94.xml
SHA-384-Digest: S9nTRzkkfQopRNTOqIOoE/szAUXAI4V/vGLoSYa6CkkDlRpJwqS/AMG1
J+S5/Bn1
Name: res/0Z.xml
SHA-384-Digest: dQPqz28jHL7iLXp75b4e7KX48IvTPh8cv9tMPcZQfv8Ztj4/z3v5ks8k
L3xIIHsS
Name: res/iZ2.xml
SHA-384-Digest: Qjo0dvw4LXJSvOguNpqReL227zoPgfK8lzh7Qg+9Mq8L8h+F75RFxRSS
WqeanUQL
Name: res/ui.png
SHA-384-Digest: qbY8DQ1gSoL/45RYCNr+63djWcuaSiQZTpSSS3VzeTVmQz6KcInZsvFU
ojcCyVFT
Name: res/BT.xml
SHA-384-Digest: QzSRuMFSrpkDBJRhN0ohVVUl279rAlPaVJj0gRCfX5hrnOpped+FyknB
9qbpsUGf
Name: res/C5.xml
SHA-384-Digest: MGWjrKLPdbUzutGlj/0ba+SNRhq1XAiI0BOxUD2w3IjIWdzNcBwNEvzM
57bflCPP
Name: res/m9.xml
SHA-384-Digest: YuurX5hICHsM1OAM+yfl9tjL8N9xfLW8CWDSNjWWWOoHH7v2xUjBXndB
152Qd5DQ
Name: res/WV.xml
SHA-384-Digest: cepUTQvEb3alYDeq2xs1u+Q2Q9OWvPX93dQG4cSEJZbBi7H/WUUrbeHp
YJk4Io5y
Name: res/je.9.png
SHA-384-Digest: hqbntdCQ0hWmkquXaCseqSsIraYyC9OekgPOE2n/u3T/8xpt+ChXM+YH
yx13lNJ3
Name: res/zZ.xml
SHA-384-Digest: xbT8rJTeVmc5qUBFSctbBLu8FFlaNeDg+UxkOZoxAzsbc/MdFI84QQm9
QuJZq7+1
Name: org/eclipse/jetty/http/useragents
SHA-384-Digest: TFMYpqSFDN18/vIKeEsA8vrhQC3+tLGM43SYcqzYO7tRCOiGzU2IqxC9
IN+m3VGI
Name: res/color-v31/m3_ref_palette_dynamic_neutral87.xml
SHA-384-Digest: DVBIpNTuMTd2j8KJHxj8WDhw2IBxZAdOsFiPiPW3ebrTXBGHn984zwL6
ofLReAJ6
Name: res/F81.xml
SHA-384-Digest: e2NgP74AScgEji6o7xK/TIjFXzYen8P/gjNLiqwr6Wg7iK1+KUqoMAow
KCv8oxzT
Name: res/H0.png
SHA-384-Digest: J0hg1uZamR/HJZ8GPLwjQqAIl3zTIVDffR69TqQpazgyoE+DaTb4vPPn
/K30BW3a
Name: res/gt.9.png
SHA-384-Digest: yL2eNsPZCyr4z3cmial47gsVWGqhs9SNd6PC40bPRksl5JiBDHUXuaw8
g0dXPlG7
Name: res/i6.9.png
SHA-384-Digest: N63wXjQz4QMebNN0msM5tIQDgACAi/IrwMMYrXZEDu4Gm5fZAUwA9zEL
iyldY0Yp
Name: res/Gk.png
SHA-384-Digest: cRu2qM2zgEslYXehBIXY3pv1LJk/yrNqxNK0khn/04MJSb0i2E01RI8K
QXBcYWht
Name: res/JQ.xml
SHA-384-Digest: piqKhG8lpXvfB+2gfFMPjVsOR+YJm3E17gHpVjDx5OKA0cCNw6KX+Lf/
+3J1pTza
Name: res/K2.xml
SHA-384-Digest: htl9Otk0Fpo6R41LYRg1ga9P9/YZPWKpUnFmISzTlQvo7NIVbhL9dPir
BXzgu0fn
Name: res/LO.png
SHA-384-Digest: SeoYt28PRSoln6hj4oVM5ntxJOKnaP74Uiney7Hxgom/+Ws3UEkH6ZC9
G6BfsiDa
Name: res/SV.9.png
SHA-384-Digest: Jbnlp6UqEocAviJLUH2q9uijEJw4eCNGlqoDVj+Huh3EdpIsphRMB7dk
Ue+uyy7o
Name: res/Ei1.png
SHA-384-Digest: +n1o1LFzSHzt22PY2uHgWvj8QLC2sggl4Lat2Qb+97neiNZ5U96fGAT/
E75J4NLu
Name: res/2R.xml
SHA-384-Digest: e1pY27f11XRrqx2iMFk3WjAK6f7kHZ42DOPisE8ioTtlyuABp7ODLAyE
tn5HZLhr
Name: res/color/material_on_background_emphasis_medium.xml
SHA-384-Digest: hMlfv2lttlpq3zmfhsDQdCG9r8R4dLXs3YH3ib9P4hx5+qHbNeXiPE7q
I7UmLcfl
Name: res/color/mtrl_chip_surface_color.xml
SHA-384-Digest: EBF/iWmbYfsEdETb6BMO9mrcaLNH1z8+UZZaIeAm9HhQMx0qTHzKCtRY
lWtATdp3
Name: res/hQ.png
SHA-384-Digest: 5IXghwsBUwafpqWxs9mnPA2DQH5RP2jxgzVku1gh/+4v0IrlqgxDhdzY
YToUvXlC
Name: res/zz.png
SHA-384-Digest: r2haUUwTBB0xEsz67QY4JI/dkrcYAoz+p3YGY2ivhesCHX5NQjCl42c+
zS0561Fi
Name: res/gG.xml
SHA-384-Digest: 7S3SVbl/xYGOD37ftLvR5rfIt9OlvHz1TPsllTyFNH4dSckmB5RoyqLB
tyiYaZvQ
Name: res/Qd.xml
SHA-384-Digest: hD5RM8tA/4u7nUJQtpLxy8CqW2ixH5EModvNm05yY7BbMPRznBOrlR/a
Bt8YNb6v
Name: res/color-v31/m3_ref_palette_dynamic_neutral17.xml
SHA-384-Digest: yt3e0YN7lcSYLEcaMY/dxM6EnkZC13qxyjf1EEHT+6z6RGqOhj3pP6/B
q8z3mKWd
Name: res/qD.9.png
SHA-384-Digest: SgBpzbcWxKT+19HhkwqkE3xX6ndIbQBmXrQuA6Sd4XnUW6f3X0oEDu+Y
yIAaE5q5
Name: res/dw.xml
SHA-384-Digest: 4ksUgdz+hniSfwJcXvIn5LqbEcUDlz040mN8uBfoBFP7osF2knARDxju
KFKk3sSP
Name: res/hq.xml
SHA-384-Digest: RolpMcC3NJ15hDWL0ylVxu/wxFqljxPpVw4IWROz1OWFWThDxT7dPVmf
nRgf1Od5
Name: res/iR.xml
SHA-384-Digest: 8bf7VHrya4ELV/DrPdNU8r1Gktg81KDCCqUsUAHeCAu1zdNxRhhk+Vg8
8cG9xqEc
Name: res/j3.xml
SHA-384-Digest: haIkyttXBtrDQGjSgz8kmcUB+a3kF8ZsEncOlRu1t77O+GKjPuKwXi+e
p9AyLgxO
Name: res/color/mtrl_chip_text_color.xml
SHA-384-Digest: TKqIsMI/qAbNcJY0W7Oq+HsCAVAf50WsNujvDg7ezOpsefAuTnk+MpmX
BheL2cs5
Name: res/color-v31/m3_dynamic_dark_highlighted_text.xml
SHA-384-Digest: rQO24bTVC0zJK1pDt41OiKz2JYCSYRlIesdIjOGTLFB0i4/Zb4VKI0ZH
bqcxCp26
Name: res/color-v31/m3_dynamic_default_color_secondary_text.xml
SHA-384-Digest: E4IUZyaWsFH7ypRB1//gEJwWxW9KFC9TYrHVW83kwihj9Gxn/yI/yY3U
mo/Q1qNY
Name: res/color/m3_assist_chip_icon_tint_color.xml
SHA-384-Digest: yR0LbyDan8IwchldvR6gH9gd+x+0KqH0PvRTLAkZZn0XjVP1MELtcBvh
LaCbzD65
Name: res/Af.png
SHA-384-Digest: gRQF5dhXpTN3r8r7CldnCak4GeB2tFqvI0eviGlLG154TT7fhxTCoQ5r
lH4lUq4y
Name: res/vz.9.png
SHA-384-Digest: XuCRZxgoNVWVIcag1YsfslqNM/Vf1eLX8y5GrDuqcfJ3XkLa+7ZJ7sLN
15lWtnTc
Name: res/color/m3_navigation_item_text_color.xml
SHA-384-Digest: TL5C0WPWqMw03DnQ0LBPTBBU9g/a/5ma2OuPNjbtsAOWaYsVAKHlhXAS
qiyJCjfJ
Name: lib/arm64-v8a/librtmp-jni.so
SHA-384-Digest: dMSj7/IaH5He/Kp/5EpTsY0ib56tb8bxX/U0skNOS+mEOi0zSRgxxvsn
jd4yf2vs
Name: res/LU.png
SHA-384-Digest: lXIxThxpZU1jkZKu1Vx8n+DemNj+wyEIlsHc86C+0KBKQM+6vpShleRe
YEcCMPPR
Name: res/color/m3_textfield_input_text_color.xml
SHA-384-Digest: 9cRBhHTKCJTL7StDRMkQiFLabHpuUpXQfTLCqg/LPCHQLF4EY+/9UzPc
+C/EOeO6
Name: res/color-v31/m3_ref_palette_dynamic_neutral22.xml
SHA-384-Digest: XbjRNtVcQynvqOcHbzO6LVlMnLFFfxsaMlkhA+SYzZaxtNLUTkoWllrj
fHW6L+Jf
Name: res/GI.png
SHA-384-Digest: G7Zq3TbPOg856Ro23K+YhA2HerZmBDhWj6X+HEumnfTBUEZBVlfHccr9
p6q7Bgc0
Name: res/80.xml
SHA-384-Digest: YzRr91TZPgvhqVEGol5P3j+UTozTotYH80Hw4svQJBNs0yBXJJHmu6nc
NA3rFhn4
Name: res/GT.xml
SHA-384-Digest: pEVABE2XyM4shv3HGM9+VELB7NmLhvjwzzeX61wYGYUTop1IUaQ427SM
bLK1XMh0
Name: res/pw.xml
SHA-384-Digest: OqD2BpNOKJtRfselfNljai2oJclbZBvLWimh6lFoaNSqciforqs4yVGw
aia98jK2
Name: res/lE.xml
SHA-384-Digest: bIuJlFxJenmuEWMhU4R5URXjUH5FG/1one01ghuhXhiKhlSfu1LX0CJH
h99mH3ch
Name: res/M2.xml
SHA-384-Digest: OWdTDOCJUrIFqBIB16t7PHzyLpCuNOWdhmrQUcySIphr8Dq6cgTfIGd2
HwRsaViC
Name: res/Tf.xml
SHA-384-Digest: SNRbwZfbYNjevLcKgi1CT6NNXQdyh739+jx4kWttjmmV5Zb7LgNO0LXN
hGWgTYjk
Name: res/kN.xml
SHA-384-Digest: pOv1rqENVipdRxqrFaBSCbGC3CqBZsYn2OPzCJWDpuIHRFzbNdkzAgzI
KCJYkTlT
Name: res/color/mtrl_card_view_ripple.xml
SHA-384-Digest: LP1KwU6DoYN2hlhv5ZlkxCYPlpMzUAGzOHKwbHJwulse1mj3w49Pi4dQ
gEz3gt7a
Name: assets/shaders/fragment_shader_oetf_es3.glsl
SHA-384-Digest: rZr+0elJV8z/f3AcHlbfu+EArWpdncKr++xcZvJWry5Q/VK4Cam8seoQ
swN0x0bE
Name: res/U8.xml
SHA-384-Digest: pTVgltJPQklL6ayPkC4PTkUcWDPW7U8hCH1hd6J76wupRhtiHX29mSU/
Hqw6e3K0
Name: res/IP.xml
SHA-384-Digest: 98W3s8Bl3KJmmRWbUhv29cuSxtEfR3jnBooEzZxxub+uQ+HWQOzTSHB1
LFgHSuOS
Name: res/color/mtrl_tabs_icon_color_selector_colored.xml
SHA-384-Digest: Bwp5RIP5rglJ6071TV2Rh68U1fJJoE+X+4RxrTlpD438/gMOKphKOFZO
7JPA98mp
Name: res/gl.xml
SHA-384-Digest: 1WnYZ7SS8agO94k1UsIPRfgQbecbxsIifJsUQHOGXIck1buSgmL8NUsP
aYvaltkW
Name: res/hM.xml
SHA-384-Digest: be9Cw3MxaHWFG8oq6wVTGWZ7/eNht04u3HF1HT2mLRWZRMr3E6/7IVn1
2ypStUdR
Name: res/L-.xml
SHA-384-Digest: 524aIDKHDV3QBXA9eN0FOP7GemUOxdipgTelJqz36ThU4e6Uic31Ecwg
4CfGAFuu
Name: res/Yw.9.png
SHA-384-Digest: TCD1g+djTcu7cqXqffkOB4QKgq99vYlhw0qta0aKmWYNgllpQXboW1fl
Xvu5Kdmo
Name: res/3b.png
SHA-384-Digest: ok2B+0Kvv+dYGUXZUv9lPtWHb3wbNRqGtnrkfZKSouP1kcZJN3pGkQGu
cybOlX+l
Name: assets/test_polyfill_date.js
SHA-384-Digest: ufzUMKu5lhenAWlK8pFvf80KvJHmHX+G+mfxQ3dA4IOOuL3m8O9+2/AP
syurURE+
Name: res/li.xml
SHA-384-Digest: G14ONZW82nrRmBgvXzex4P5yg9ZdOvXCdMEOyUTUpbU3TxO0l89ffb4m
RmUt5w2G
Name: res/4v.png
SHA-384-Digest: 1R9gjkJhNNd/pZL1KlAcEC7lFpJ1xIklX4iH6ASRJ2uPBVpft4fqelyd
nDnCHpRx
Name: res/68.png
SHA-384-Digest: LqravoC/brjJb1k4PdsKmk7W096g1nzWl9DX7/svlFLWZxHBFVtvC+i5
BQKH7Vvh
Name: res/Be.xml
SHA-384-Digest: p7cpRGXRQpm9f/zCWikT+Z+39xDVMRxX6K1vfreE/DqmW9dZFu4zX0Du
ojo6qPIE
Name: kotlin/coroutines/coroutines.kotlin_builtins
SHA-384-Digest: Yxy8O4XTB7f5KjCF164NhyA5nc3MA2UaJDs48FsEmOe6s7r/DGqS47eq
YdWFQ7fX
Name: res/color/m3_switch_thumb_tint.xml
SHA-384-Digest: KgJXXlUGUNomuH55/O6pNEzpP+RcJfblDgpVfhTK3Vf3ew6zC+/W8vTf
hcmlwnlm
Name: AndroidManifest.xml
SHA-384-Digest: HydzKdG97Xkb0jmilvqk/zXv7RpXeZ/FqYIkjV63EkBBxZN+au15o3jB
yUfDX5Si
Name: res/Lv.xml
SHA-384-Digest: dFTVzwCwsxXEkUGUqaARVB+LhhdM6GFZW4PNNx0bUMK3AatQYIGChxPy
5mcdpzn5
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant6.xml
SHA-384-Digest: sqlfS6E21mz0I04zZteL7xu1xN0AyG4FckLLnCy3aDlMLnvSMQw/yoUM
YQC8h0y7
Name: assets/test_module_import_dynamic.js
SHA-384-Digest: KsKkSM9GnMdAZxaLAvxsOJPG3xVNu8OeGGbPFrbv3AVUKAidGv7rGxvn
6vHXK+j5
Name: res/uc.png
SHA-384-Digest: 0rGeP5kR/e0r/nQpbg9Yr2NUTRjK/u13e+csVUeElMhU3YES0AIt6nri
Yto4uMkU
Name: META-INF/androidx.lifecycle_lifecycle-runtime.version
SHA-384-Digest: yaAB6eagCLWmL9/WQCnCuN6WQF5HZExKlrmZiLx0ug4YvS+CMpBcyYBD
5ywx7JDc
Name: res/aU.9.png
SHA-384-Digest: p12FTugYakzlErr8gj807IVsFsEwLiPN+FniDg9e7vqVocxdrPVL8zeF
WVilZu2K
Name: res/nP.xml
SHA-384-Digest: BcWd2YoOM3Yagic9RqW6qsi3HSRmSClDnZPD3H0i1lr56yXolG6lePrD
53QZ2NXY
Name: res/zG.xml
SHA-384-Digest: s3j9IRuSRe16TDt52X0pSPUCEpcZ/nUgNEprZP67FYAndmh3iVTzJRmJ
NU1b8Jr+
Name: res/1W.png
SHA-384-Digest: sxPsSE6JTEg6stjGYFip8kR4MGESnNeqxlVMSP8I5VsQTz5TbdQ18sav
JXFJTI3i
Name: res/8y.xml
SHA-384-Digest: wIsgZVbAb9GtQ8yZDLh1IYUBq+lMd4ZIfof2i8pr4sktW0Rmmu2nurV7
HqtVbkx5
Name: res/k9.xml
SHA-384-Digest: gLCF2I/aAyr0gPnff4tL01Sy+gTOudRYsnewX/I6bWqSmD2FJvNJ72Ja
Or7OObXz
Name: res/4R.png
SHA-384-Digest: Px/AxBCvwDFFYNV46XilxY7MufmVdy6j9PbTb8FTMbtvTPHTW4EBG5yH
Qui6cxWa
Name: res/hb.xml
SHA-384-Digest: Ia2G/FGD3m2l7oWJRVE4bHwocAmL/nK6P91Qjt9BmQmSMcnYEmsbqgtq
als+2Nqs
Name: res/V7.xml
SHA-384-Digest: /8z5xySz3jnWHCaTBntghaT8S6Tc690+65TmEZPykXElHq96En3juD8J
vDrzaHiv
Name: res/QH.xml
SHA-384-Digest: xNt3CdfZ+AtiZ8/7XPx9Fak/46WJJoQzPI80YqxMHo67v0Vh0+w/0xpk
CPIUmnVR
Name: res/YN.xml
SHA-384-Digest: 2rGNcObUVtUWuaDBnEUAAFR9t2Y/VrGKfvE+pgWJF/SklJfT2rkzXlv8
ZMCcbxVC
Name: res/Wz.png
SHA-384-Digest: DblED9inSYszV+iGRcrceP8EZ4cFvzf9Vfg4l/7e0vQ6K/3BT8Mz8oOP
gr99yyba
Name: res/vz.xml
SHA-384-Digest: x/3bZEId5HOhe7mR6uKKK5HLP7lncV70W8d9uDw3YEo2d0fJ7GPjVpZT
tyYj/2U7
Name: res/Xf.xml
SHA-384-Digest: 99bCKlf/JEhFk+3qxhmJeYL+SoPT++3n21nohhIVDmzK5jQ8AFTatXLw
JAdHtoPW
Name: res/YG.xml
SHA-384-Digest: ZQv3Fk/RrViVhG7CmqLI7b5guEqrtuOMjCb1mg4vAdyJ1uFifcCI57nX
gE+VQ+m3
Name: res/Od.png
SHA-384-Digest: K/YBkClD+1vifO/NKCxecfkGmOlKmxpKTPKEOmHJ3uyhSTAWtB/KVPYG
jeLwPWlB
Name: res/aM.xml
SHA-384-Digest: PBD2njqFIZEIFaNg5Kv0a8zzmOSuvlw7w0N2Hk8GxCfqQE1Mp1jt6a8z
PbYNvmVg
Name: res/qI.xml
SHA-384-Digest: yXOZMD1NNVow2MSl5545G1xQ5r3BkzvVuTjkOMu1tie/X+BvQr/vzJBt
3rTmiNmD
Name: res/Aq.png
SHA-384-Digest: gudBWfAFJagdxTpkd+3RQq2ZSOB5sdX9XX53jeT2x9crRKNnFnRSp/c+
sKTFA5FZ
Name: res/Xz.xml
SHA-384-Digest: Lxgl7AaW1XF01UCgWsmzNijU9lM+9O14DWsP1T4WlEZa3e7jMr2Q0CXl
AMMdrAcl
Name: res/_H.xml
SHA-384-Digest: 6k2Y6RdflAAu/5MBmh9aA3A0mGwem2IJdZLBLfHqUj+faz5Ye+cijBwt
+u3jI/t+
Name: res/color/mtrl_switch_thumb_tint.xml
SHA-384-Digest: ip5+l7mXhXTe3oBqzootdWZ/nxWMGYvtfaMdG6hFo7VrVOcLRrp56rrL
BIGWj0FL
Name: res/Mh.png
SHA-384-Digest: k6V8Y6wj3bxNtVJwj6Cn7/1FKl5FSoukMG07kcFBeIlEFOPg8TIHdGx5
a+Xd7YlN
Name: res/YD1.png
SHA-384-Digest: CZdVfTUyBOldmchvO/3MMxaRT9bwvOFrKi7zzRJ+OsJncbjuGk2vxuJ+
2eKvIKhy
Name: res/color/material_timepicker_clockface.xml
SHA-384-Digest: fLIK+GSrKtwDJ64Ts+X3y66wVcqzsKvWlzVrv9F4g0oyR7kINpfjKExm
NcR8BdjA
Name: res/color/text_episode.xml
SHA-384-Digest: 6pDD5wKQNsS46LDs8hCEJ9737iBZpA4s+djZewNSoiQLojysbVUvJ8g/
Uruo5NKz
Name: res/EU.png
SHA-384-Digest: 4cIIhAcnkubmh9ns3zErFnt9h89VIwSmdFdwZIaSdNPl2XTYBce4ErjI
qZVB5teP
Name: res/eI.png
SHA-384-Digest: 5oitDL1BGiwSViEUkU7T3JYPrzeXJXOBoNDL1eR2YvaJkC+WfAyHEhWI
WYUsfTn6
Name: res/Eb.png
SHA-384-Digest: fMoUvrf8IRMfCWg3myVyK/x1Xy6wCfL3meSekfjOv389M7HB4kHIrI1b
rqus1P5Z
Name: res/color/mtrl_filled_stroke_color.xml
SHA-384-Digest: GgNufGCgYMsy7+VnzuFK9n2HaXu+y/zFZkm/fduebi8SvWS13zakD3wb
xUw6t9t2
Name: res/fN.png
SHA-384-Digest: Cxifa7MlxCfPcVkVW9d193W0XJmQPtd4zWJ6wVT/1B4sQtrvwPk68Yyr
tBY/Ipjh
Name: res/hS.xml
SHA-384-Digest: 15K3XF/8P1wAZUGwv6ucTzyuvP7tNCg8T1H0cyMg8BoWZCE0SQOrJYE5
ZUIOP2Gx
Name: DebugProbesKt.bin
SHA-384-Digest: +I6t+9bBNLukGTkuW0QM1GSInoixxsGSLyv6+bzzCg98kneNpoKPjlq0
Zrgnd24w
Name: res/fW.xml
SHA-384-Digest: su6glkqpeb332zcTARn79iezSLDM5t6RHZUhtdqgBOcDC8j/xWD6sFS3
tBJAQfXc
Name: res/wy.xml
SHA-384-Digest: E7h74b98RSoRvHfhkK8oytREiNc5qosu6jCD7oRzunPdRJQaphT61lgi
8tGNYbjp
Name: res/Ci.xml
SHA-384-Digest: sMhQCoxwjI7pT3/FdkVFfRF3d9vzVAl57BO+CG5L098a3JRjL3P3dhl6
f7vs8Tft
Name: res/color/material_slider_active_tick_marks_color.xml
SHA-384-Digest: 6ThEuZRsA9ZQiWyeAU4+Ie1PiRt1GXbpiA5WxARtfTdhE6k0/8NEvdOh
dX4vcPEc
Name: res/dP.png
SHA-384-Digest: QX4lMGGFILUtCyfvz4LPl3RLVYUX1R/7kJZE6KANKQs/Z3hTEp1qldFK
4GSeIRJZ
Name: res/color-v31/m3_ref_palette_dynamic_neutral92.xml
SHA-384-Digest: XUKWSkrQlOXPGkocaqxTfFQmrMeA8ZRAox5lm26mM/CEpqiGejYJPp0E
aPZwmn5C
Name: res/color/material_personalized_color_secondary_text_inverse.xml
SHA-384-Digest: C0Uj+FOWLTs73sORb/HpoYMGKG/X4Org712kJm5LU6TPRc3CHmKGYF4b
wHqKmRsC
Name: res/color/m3_textfield_label_color.xml
SHA-384-Digest: cZxV6kbRB30Ge/T42XRbLcR/nYOqQSAA3QSxZQbcsWQJGXsxLvh6+IYZ
xg8nzvhO
Name: res/o9.9.png
SHA-384-Digest: wEaQJeS/2f1x4e61XcFA9Yz3EBjAbKfyPQWjWZJHyNsjncSEfPOZ0uPr
mUWojXgw
Name: res/zo.png
SHA-384-Digest: plwRg21oS4bpA0F/oEFHbqKDIv3yQtve6pjXPKYAL3wZeo286iWj/UqH
zQSJL154
Name: res/1w.xml
SHA-384-Digest: gA+8W51sCIkHUrOvz89YE4rjpM0+h2TXEWWKT9SGsMSrT5AG7MRER36d
S46DHMlP
Name: res/WP.xml
SHA-384-Digest: INADClAANC78JHcHLGZ4PWM3fhZb4R4O5k5VUCeMCrmO9SC9Dgkdx1AQ
N0KvwP0j
Name: res/X1.xml
SHA-384-Digest: z10yS44TvKcw2zEuS72decZd2K09klcmWD7UVj9ieTroWf8mfES8S562
KYFAXpwP
Name: res/p0.xml
SHA-384-Digest: ujVc+VQV1KE24l/bNCVVGbLRRYZ4erIawtLM/p4HsIWiTV26jmu9MSHO
LoAQyiSm
Name: res/5m.png
SHA-384-Digest: 69o1L2KD/PffMCTkPRDGbqSfu8/G1XAMsMH4ibaKX3u+prny1Uh2cld/
fL280fK1
Name: res/color/m3_slider_inactive_track_color_legacy.xml
SHA-384-Digest: l7yAiawORObJXiDfDHj4kdRg7zFXWYfcFgr5a4Y9A+Ok8cRaUZb8ioaL
PUzNwUHV
Name: res/NZ.9.png
SHA-384-Digest: lbhPYxpNFWWXgEyXoRkeVyTcCPVMODUAsG6y2M+mMmV8Rx3rT1vH2akq
xJ0J9NU2
Name: res/lV.png
SHA-384-Digest: zvCEGC9HBf6J21pYYH0DgZeIGPQno+pZ8K0knDlxVVFxn66j/N5GZuI3
CYSMW8iR
Name: res/color/m3_tabs_text_color_secondary.xml
SHA-384-Digest: uCpBjQXS8vy9EDWYo9gX8Tuyz8mv/7KFwYJRpUcakJab9xJIe4NoyxW3
I1F65QiP
Name: res/w_.png
SHA-384-Digest: 2pIXb+TxMD2TJHOowb3Cm+LQ+rEkC6/WXk0zX+k9dah+puF9t2RX9PsE
d6NX2gOz
Name: res/color/abc_tint_seek_thumb.xml
SHA-384-Digest: h85rz/cIeHYgUsvPdBYl421PD2KMs8VoIiwy4h5xIGYb1yDfjmmE6DL1
CG14VY9U
Name: res/5U1.png
SHA-384-Digest: ZCfE+UJQua5bdJ5obOWZ3qkmiW0BFicCGBtUnQG2QPEOeSI+WxRCPd+R
nqfoTxD+
Name: res/lR.xml
SHA-384-Digest: J7KR61VfAMUADUAXs1knbQ7siE9l5p/6RMfkmSIeh0SjR55ICJUqaye2
EkYX46Q4
Name: res/color/abc_secondary_text_material_dark.xml
SHA-384-Digest: PifmH4QaJTwS/zWyMkZHKOSTeQVmmt0PBKqHrjdcwDyS/lyf3U6/utTJ
0PQE4/wD
Name: res/JF.xml
SHA-384-Digest: eY3c6wCiHDxvUftBn1A9MlsO+gncgby/NGR7/ruddOCeRs6QXrbeUgNP
omhK1kpG
Name: res/xM.png
SHA-384-Digest: fu89R/DUJnZKjNsY/5yTIM6WlKw4EEOQuyELbw867QUk/VHPVv0R0A5B
+kz+oUWx
Name: res/ck.xml
SHA-384-Digest: frMaorVmG/3l00muYRVzoo6DUWcpDsejnjyjJQ5LgV2uFcHaOh2IO0XF
v0JlQoqW
Name: res/e-.xml
SHA-384-Digest: aVj5j0oCPO0GSoUDeP4eu5QzOMKEztumj17IRyCUzeT0XM3uTTdcjVIi
LD1QxeuQ
Name: res/rd.xml
SHA-384-Digest: +a+FFnar4TcNfp2A6M8Pm2E7XBRmK5NOegOxdHa59hvE3kEUoZZO/Q69
GLZZQpgS
Name: res/color/material_divider_color.xml
SHA-384-Digest: TjoU7G88WbzJFqtpDvNZFANSo9fx9mu7v/GUXrDTcqL8bn+YhFjeFDLG
ByKomgRj
Name: res/D4.xml
SHA-384-Digest: y64M2hrRi+YQfsksX3NuJ+QCZrZF8VOXuT80SczeIL9+dEv+daWx69CH
E0JP8rhL
Name: res/_q.png
SHA-384-Digest: /afRLwIQlk3rL4VICmla3v1hxToa8agYlWmvKN5a2PEryvV2vK1uihea
D6v7LRuz
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant87.xml
SHA-384-Digest: 8OmGjzUGqFYFibb4aLlRIz7AYM7TSk6yuKeyUcu+SMESSKyMJh/5TqaC
pi2uVf0D
Name: res/Wt.xml
SHA-384-Digest: kzEU4NfqJQxS/cs2z/MRGftjhuquoaA33EqQ8J0qnfCO+x4qLMpP+B0/
HrGLEREw
Name: res/fm.xml
SHA-384-Digest: EuMyQUj1lZGKa6w67Pic+1A22+ToYb1jLvjKJHYn4a7o9V0hzjETOKit
Ctk/+zkv
Name: res/78.xml
SHA-384-Digest: nKXulsnznr4QBTwh6dO5JK887VlKMxQmi59UXTyN5zwPKT/imZb1AejC
NElQfQRN
Name: javax/servlet/http/LocalStrings_fr.properties
SHA-384-Digest: hMTSFBPtpfkcQN7yuGoER8NsghXffiSIErCHiWNo1ehpvJqsE4ZU+f4S
JoEd1/59
Name: res/XJ.png
SHA-384-Digest: K+vW884CTc842dE5nejSJjFg4ST/OoPAy1/Rv2gtiV/Ch66ZnWUtjgDf
MVqqxfmQ
Name: assets/shaders/fragment_shader_transformation_sdr_oetf_es2.glsl
SHA-384-Digest: NytODzzloULyLR1gPboxuuxilD+s1wZn5F5fWXxvDrbC71RQNhgjNxGS
C8SUfiX9
Name: res/color/mtrl_calendar_selected_range.xml
SHA-384-Digest: zKBeSmC3fmOZs+zDYvo1urAEY8zQ/cMSWEquikgrIYZH4h0Ci96rapmL
UHb9sK7w
Name: res/gc.png
SHA-384-Digest: ZjXa4TN8of6oZ3gBH+/aOUT2P21PIsAa8FqAATon2E+bfPX1VX6Nfkxm
Sy7vJ4gD
Name: res/color/m3_timepicker_secondary_text_button_text_color.xml
SHA-384-Digest: rMZDLvZONiQZ0v9TVmvRItz/M7K3+3PIuhKPveONMHCcM2o5QTRBd1Rc
3VCfDLSy
Name: res/yH.9.png
SHA-384-Digest: Z/IWW8ZWw2gO43Jm+3aNWu+C6uarK+kv+Qi5F8ohjX7CEMgtvuTr2knt
bfQQv26H
Name: res/vf.xml
SHA-384-Digest: AvL5OabN0Zi9AcMNNBWEIPftzyjRAnJLiUK1HDg/f8sFATHCqzuHAhX9
Hw8j7/d0
Name: res/color-night-v8/material_timepicker_modebutton_tint.xml
SHA-384-Digest: 4FIE5FviiAOKAR6a8eSFKwtD2kjUeCS7RO/KpjL2dNPhf/N5bxiXFyiX
HlJ4fEsd
Name: res/Ra.png
SHA-384-Digest: Tr8tJASUKpW0EwB/k0bh+9VrtPgXtuKKX1rXGPlJXqCap+Zb0oVHG8HP
Tej9sGXH
Name: res/color/mtrl_navigation_item_background_color.xml
SHA-384-Digest: eqE9g6yxzIZTRtcZyIdweMh3rwWFN9QvmCkRXandoY+DTDnR1HZWNSJA
6FyKujba
Name: res/color/m3_navigation_item_icon_tint.xml
SHA-384-Digest: /AWZoWCnF0csAUCtKDJuMynCKRpCPWB5nNLpnDKLG5k+RFOAFKik3eSP
jryIgTKc
Name: res/nN.xml
SHA-384-Digest: bHYRFj2PMGQGZ6WiouraUUI3Qr2jvMgWn6R0zbcfSJ5817ncBTqK6sD0
9dXQrKmB
Name: res/ua.xml
SHA-384-Digest: U0bGqXxxznKRVSWjFKJIi3zWySYM7xOcJ3rEMgtRaEGNSnZ5NNq8zdnP
FSizWNhn
Name: res/gj.9.png
SHA-384-Digest: 8hyJtLsSQKJvC23VCJ61OcyA5K5W+Q0NW8lmwHMMDPHwS4x3eZNKE98V
EfGtikIV
Name: META-INF/versions/11/OSGI-INF/MANIFEST.MF
SHA-384-Digest: VTx5uIR8bxx/gBT7SXcGbuYdGJU0xmrYxz+0wVGRPf3BJIZ4lPuT1zCD
7sNpGc1U
Name: res/p8.png
SHA-384-Digest: qLE25rP5R9pZoqbzqB+mLljYF1Li++1LQayZlJUKMgU9MlHsAYrSEcyO
sHJHwiQw
Name: res/X4.9.png
SHA-384-Digest: XAK/ybwCqwgqe201nWFgdLeiQTiSc9bqvLc+qODQygy5ypRC6bQ6vuDo
ddP/ZLVr
Name: res/W3.png
SHA-384-Digest: NmZnJavXaJLFFRAYIoF1EaQG+EPe3OTDjJgwppUAM2KCFw9sOKyJBvvX
asVUcVsa
Name: kotlin/kotlin.kotlin_builtins
SHA-384-Digest: vWDFjzd8cNvGLYY+XWfmrG5ZTXmWcMBdDihc4DQBPfsMFnhiJp2oCfBD
ATYEdtv4
Name: res/2i.xml
SHA-384-Digest: hnx0IpMaH/4ARdnAdCfoKiBlGBiA8W8g00EGA0pXmU3wAMXrEzLo4Xwp
ato1k4s1
Name: res/3J.xml
SHA-384-Digest: Bk0svZE5wZOBqjWh+l/bfkb3D4Xsjy5YDOA0HAtllTJSVRezK2t1a+3k
PJ/aQBXd
Name: res/o3.png
SHA-384-Digest: VW5bmjSCUR6eKiyiMBtJ7LjAXBqfC18aay+dKTtRzjHfjvDBp6uaKuhz
MYstwmj9
Name: res/vJ1.xml
SHA-384-Digest: dSXRtUjmCxqE2spe82/szFyVq1C5wlPQisAzN+YKV/JKyJ5Xj5eDHpuY
WW47GBWy
Name: lib/arm64-v8a/libxl_stat.so
SHA-384-Digest: OcyK2blKnQYGzXngIAxpt82sBBBx+hZcnmzAXyzR+3OGN3LTHVtZex2e
Ce4b4Kof
Name: res/color/mtrl_navigation_bar_colored_ripple_color.xml
SHA-384-Digest: XlsQSd408HOGKEkaJYyzKyvTDRwr6MtbeKqfbmOTT7i8yegLzn6sNzpM
uzzIdXRY
Name: res/g-.png
SHA-384-Digest: 2AG4Dr8nPOmpAc4yEWCe2k/YW9bl8hDo0Dn2F9Hd0v0+DlZ4DC0sMw9/
ZpZL9WQ1
Name: META-INF/androidx.lifecycle_lifecycle-livedata.version
SHA-384-Digest: c0W5ZSoXCl+WxLGxK5D1k2FgCuPgbQ7Sbx3hroVlPaKlXHKLZcrK8D3n
ykGOwL+x
Name: res/0M.xml
SHA-384-Digest: yP5YwMOKPfwLAsa15CDAaW6OookJ3DCqGBGdZNXbWUU0PIu2o4bdzY3W
jzjrC864
Name: res/4P.xml
SHA-384-Digest: ySY0srSOyAJrWFatZR9SEhIDr6bUJMRxnTLuqaNfzP+3msrLs38tV9Fg
M9yP51by
Name: res/51.xml
SHA-384-Digest: avHlH453/Om7+Ev9zVTM9NjYPgsv/UHO1A4kOP9TMjQZV8j1r6FGKxhE
joObH6HR
Name: res/xa.9.png
SHA-384-Digest: 1wPBd3D5o7RCHJzHplvk3Yuvcb5SjdwUw+Jpc8ixG2rsxAexrBQIx/py
wosXPYkb
Name: res/TC.xml
SHA-384-Digest: MAJ8xLEPA8Zz9f2nqUKtkJ7i2UR1P76CcWNov0C+s5e4sxRY4CdfcTFf
F8YJ1OD1
Name: res/qK.xml
SHA-384-Digest: 4xhf+MQdLB8FR2SlGi6h3OZo7CYBZo77pbOgTP14Si0B7gDhWCi5O9Pc
aXV2orzb
Name: res/G21.xml
SHA-384-Digest: bZFW+uM0DAFNXrE/evmEJ9WAaiAth0igNUicOvX03IPvRioP7Mk3Ybq8
YRRMIlSo
Name: res/YG.9.png
SHA-384-Digest: H5u9RxEJ7Jw/1VX7NDPS6ZDsGCm4IlJIDH61hbERsdBx9Q2AT9+LjxAL
r68a32ve
Name: res/Lt.xml
SHA-384-Digest: BMx36C04rGsqx+drs9+eanCIw0givyfXIoULQU2k0tdehLuNy+CKI8Uz
WzBk46gv
Name: res/MU.xml
SHA-384-Digest: 9C2gCZCX7LpmiYhtNPszsO+l04pM4VRZSzBBxEQL6j2tPg2VaahM0hDX
e1vWUrNn
Name: res/color-v21/abc_btn_colored_borderless_text_material.xml
SHA-384-Digest: n+YHGVvulm+8zX0slTideovwzQ3qS2stZUoGSXwKdgagyoahcW+x2em+
3LjJIBa9
Name: res/xu.png
SHA-384-Digest: L8jIolZ6L9OClMEgkQQ+Rf5xqq/+evwzbpY3PXlab8JeX35p6r4nrMV7
C7BrcUsz
Name: res/66.xml
SHA-384-Digest: 1JbA6t5QiGugyK1gZ49v1jL7NmEt+jMs0co1LkocAqzmS4z1OpPkg0pB
bK3gEr8q
Name: res/IR.xml
SHA-384-Digest: 8m57CiFwyxYhbxipvEFMYaRlw1bRc0BtjHtBhIClVitMygiTD5KjH7BJ
7bfEElJ5
Name: res/color/mtrl_chip_close_icon_tint.xml
SHA-384-Digest: SNnChWNvli7Yl6Oi1vc4yOYrUjwdL25cVkBytPBkI0E1fGn2a0HUhJAE
G88i4Kw4
Name: res/BJ1.xml
SHA-384-Digest: Fj9FqSnRPE3p85tQ2kk+TVu/fI/dRcOYzZusmBFLRbbVVKFfMpisQJ4W
q9k84ylc
Name: res/EA.9.png
SHA-384-Digest: AKhfZQ1XO4/hUz/MMqc+/2KMmJx3fvanFPLQXMT4d6hgf97I08eCuZvE
2BaKoROV
Name: res/VN.xml
SHA-384-Digest: y+jB1Ks14PGTKSr4RaEdwFxCudqcNNJsDVgd96Tu3DSIPmts9m9Ruqgd
HvIuVwgP
Name: res/zV.9.png
SHA-384-Digest: ZuSsXaooIGNOvp17FG4bsrCBn0ArbBQGkG7IlPycd8NDLuVs06ZjzLaP
oB/CQwDX
Name: res/U81.xml
SHA-384-Digest: 0THq/SqxPz0UJ2Y4lMXMeYJdX2LBobXsk78DbxNnFn0QDtk0OLrtevku
FfUXz3eo
Name: res/color/m3_navigation_rail_item_with_indicator_label_tint.xml
SHA-384-Digest: zAOHE49MRnjxgncCEiQqxv1l3XvGXRPO6eaJV1Pttbm6FSPxDabVcPqf
R7BTp8V7
Name: res/fY.xml
SHA-384-Digest: Q1LNFrHQK3WdRKm8ZGKEApiGXoyOJd+krqbaANe4yQlrIsT32uzLrc66
1iBuWXJ0
Name: META-INF/androidx.window_window.version
SHA-384-Digest: NCJWomCrDsQXflxx/D1CuJsR0kxQWTkrOmEzObcJ0J7i+L067hJeXB7y
W/t8EmeA
Name: res/JD.xml
SHA-384-Digest: P4Mr/JqsYU9pLP11tV/t1fgEZWZphKyYBM/YtaQP2b0eG/o+ioC5/fSw
TicvZKpC
Name: res/color/m3_dark_hint_foreground.xml
SHA-384-Digest: 7VOvH1hqEjI8dPB4ApqRTHyKwxxpNOZfVRbzVssSpcPs2yLtrPbXSYCo
dN3cY07c
Name: res/Bz.png
SHA-384-Digest: tV+HJ7C/zlz64QwiEGKuP9aADieMRuQLNriexpKlA9QQYMxgdQTjM7zr
SmT4WkEw
Name: META-INF/androidx.media_media.version
SHA-384-Digest: ZEAFSZQkLs5nTPt8JejRcIj15pnGek6KRV7dVMyAEWD7gqVHJD/+9RXx
3el/aZPK
Name: jetty-dir.css
SHA-384-Digest: KrgFnZ0fR3W+NwpvHRSA61cB96kkKuQmfZvr4NDg0+kFQoSfTmrOuei2
e1NZTxsK
Name: res/color-night-v8/material_timepicker_button_stroke.xml
SHA-384-Digest: /dkxUxPXbzoC4NFL+qF61nfcE8i4NsdYwG/sCtEfsmulZiWgKal6S8Xq
p7D34jdt
Name: res/1u.xml
SHA-384-Digest: vPvbGKIx/G2zdxRXAAWzKy4qPc6n5jqv+/rCNPwjuTTTcDlteTJ69EB9
AGtUq2r3
Name: res/Lf.png
SHA-384-Digest: 30a08Ik5/RB+vuTCB+xySM0JLB0h79sIKgdeuVR0ZE1I8LwI/jpGS4An
llwPBU5i
Name: res/2K.9.png
SHA-384-Digest: aM68IUMF5t86EI53Iej6oB5zZ5w7emSPmVKF9BKvaygxAJyAwtEsEZKN
dQkC7l/U
Name: META-INF/androidx.savedstate_savedstate.version
SHA-384-Digest: K1SOaWtvl6HKxgzXY8r8SxHSWDV6kyknhfyKArwzu4xV4KIeluaWNZB4
HccgUhNB
Name: res/color/switch_thumb_material_dark.xml
SHA-384-Digest: 33dewl+lou8dxMQgyrqbC4yXVoBSMozn61lRUe+SnAKd4Hnkv8gZLcZ6
6B0ZesMM
Name: res/Pv.xml
SHA-384-Digest: tlRXn/VKVSeId+FPME9auF7xuMGv45NlSzsCxwEz0QOIiUd6U+jGuBOO
rvDemjV+
Name: res/G2.9.png
SHA-384-Digest: LITrKCuBPvYbmtLA0VrAwzuWJ1Pb7/KgpQnww7u03klmvlFJ93qQ/0lP
cg1tqZvI
Name: res/wL.9.png
SHA-384-Digest: sFX803rQMJQBfL2FjDAHOhZXNqn0xN9BMl6qg6VBf6xkt+RB+tWAGNKk
bLGJAO6u
Name: res/eH1.xml
SHA-384-Digest: 2OQjq8K3RV+l7NlFmVekrbiGni7KKo2fvqbOc3zLAj3N8oPGgh7chNya
ngxRZTIY
Name: assets/shaders/vertex_shader_thumbnail_strip_es2.glsl
SHA-384-Digest: n25xCpgsdkQgsOLydpFMBT3Tv5Jx5XfBkpwT3ORDO+JdGVjRIXaSHw7+
pwyH++B7
Name: res/-A.png
SHA-384-Digest: EUlo41ZqPFy6e9mBQav/H1fvUOoZbQ56G9ObRZ84WengTGlZ89LR/3MC
jCS0S0fN
Name: res/BT.png
SHA-384-Digest: L4IbF7pwTdDDAYV+sOTCNat+bM6OR4A3LKMX2SH5QD77xdUoTdt4wqa5
CidDmGm5
Name: res/hv.xml
SHA-384-Digest: +sX8PGbVpiCUsd364kuktNmc+j8pdo5iIbcNt7tUnX6LOOSPQtOxoU3U
EnNgwqlY
Name: res/D_.9.png
SHA-384-Digest: cZlu813tnb8P8nD+4HSz/ft7zHGqjZRGhlaJsVyAgFsIQJggvmzK4mW2
wc9Yi7XZ
Name: assets/test_assert_define.js
SHA-384-Digest: 8vkjAB/LdCxYTlcZsP7JUtpISXlVGTGhHsVpQlo4jQ16U30ZSJKWovnv
6SgkgQC8
Name: res/FW.png
SHA-384-Digest: ATHQVWAisvGB5ZYFGnHPKVE7XsvOevABh+2zpRe3wvQnTnCCxTTxp4FA
fuj91Tqu
Name: res/color/m3_navigation_bar_item_with_indicator_label_tint.xml
SHA-384-Digest: qbsiumfd2BdFgTAo/GAiT9qiTAG5uFKAAR9w6thD1HNzZnnDkQ/jkMj8
YxQYm1hg
Name: res/IV.png
SHA-384-Digest: hBuw83hFADyo0K4+4Kd0j8djop78Aks+xBoXqyDIu86w734AwU3j7ps3
w1GxVjTY
Name: res/v_.webp
SHA-384-Digest: zW6kz7qCmqkAXkGi1d8hiAVeFAF4P+YZZxLPIa9Typ/VXNF9HPzHfE7s
4eWTqKQh
Name: res/F4.png
SHA-384-Digest: yiqt8lQSn77074CgLNygShqFt7iH8buusUx5UdVo3ji/iZ1Z54ATMLJq
vQpQJ2cD
Name: res/12.png
SHA-384-Digest: /J3JLtdIrMgCvir3tCCQybBwsqQrRvdwgLt13S+/6VreOPSH4Qwhpgad
q+JW5/nQ
Name: META-INF/androidx.vectordrawable_vectordrawable.version
SHA-384-Digest: D/RfPHtVIGKOe3ViN8XqcmWF0bNzRDhBL/aH8nRY3vISiHz+mMnzdc04
3zqxtvzs
Name: res/m5.xml
SHA-384-Digest: Ht76irWQrfh3u1feT6x6u6ia2fY3w/HKqEEMe5YEctGzFjyL+4a4Hwfi
6+0+rdgN
Name: res/cm.xml
SHA-384-Digest: JV5Wh0REmzT04j0WM6vsi9o4ZnxvqQmAB73S8d+I67OXhw9jTEyd08zP
RR9IIt5X
Name: res/8h.png
SHA-384-Digest: /g2ttcxW2yeTyh5fyUK2x8y2nGIiAKDLfTGy7IV5vQxP7jPtlVujlhiX
y88+pzxe
Name: META-INF/androidx.fragment_fragment-ktx.version
SHA-384-Digest: FsnZhU27FydVoF4i7HKB1p3N+qAtEXPQJS5rhx8Hclk7d64PBF0YA6mG
sRFJvARF
Name: res/Cg.xml
SHA-384-Digest: vtvH7WPwWWtj3T+U3FTF40MKQ22LvPeLnzym5AlbqIGY/Blymb8UNclV
ybZdYl3D
Name: res/eA.xml
SHA-384-Digest: Mt4/lJ1Vo+4tcJv52N6IMNvRIe1RtCsnfDyuAhd2sSEAMPnVrcMeWgFr
ENEyNe9D
Name: res/GC1.xml
SHA-384-Digest: Us5WPu9xpLFHGFRqeNS+Dhj5CZPe1g3i6vuaJcq4kJlIt2ILP5cpQhU0
Ne0k3HBp
Name: res/D6.xml
SHA-384-Digest: JHJQYnz3nh7KUrscSQ4UXgi7M4CuwxueycEN9FYDvvM1LwHZW1OagVl3
sSF/NhvM
Name: res/color/m3_textfield_stroke_color.xml
SHA-384-Digest: W0FO2K5jlG8ynDpHCg5h7cjoj5sEev4bvQJuf1K6uHcbB9C9ogTwTiNf
Y2uQ/K+t
Name: META-INF/androidx.core_core.version
SHA-384-Digest: /Lom5MWwqIO8lo7G8G0+pF8doQtl1jet+H5YtaCv3EOIFde+QAFQJzK9
IwnJZbaW
Name: res/XW.xml
SHA-384-Digest: 8OwQQDjTvi7ije00zXS8GMqrrvyWGkzEM0Z3nQ7NHIiKNefTUCSYibd2
rWMCKC+X
Name: assets/parse.html
SHA-384-Digest: IgOjrVsRfWytvGeU2QM+TeOBpXLT4lFoDiGUIfL73lHVOj58rxME0viP
HKcduXSb
Name: res/wN.9.png
SHA-384-Digest: jneMdIfyfk9wnXfYQRK/DN+9NvVf/tJd5VHg/lUvBLiDYq5PO8tSITm1
KX+IhWan
Name: META-INF/androidx.vectordrawable_vectordrawable-animated.version
SHA-384-Digest: G88zdjHn3p1Bx2OCYI9K+j6qTSa7n0JOCw5XW3htvO7gGYFYXFTx6hxp
6XD6YPb1
Name: res/SO.xml
SHA-384-Digest: MPTV3RsZqLsCabQuQxbKdjlHxICJ12iBkAK2NCssXUsgVB+8maCWwK6F
/SXPhCtr
Name: org/eclipse/jetty/server/jmx/Connector-mbean.properties
SHA-384-Digest: 5LCt6LyTK7Z0CHTxskqFmrHHIp918zopUSrqvrBXCsLTj95wVtWnkr+u
HAu1u8MV
Name: res/5k.png
SHA-384-Digest: 6JNebBo/o4MiB2ETWcP3SYyT3LQ62kcUQzFM4rKE/6osARKHNvhvO8qe
Gj6LEdpe
Name: res/color/mtrl_chip_background_color.xml
SHA-384-Digest: 83VD2SQ7+WyrwFTYJgRgs1zjUPySj/umijRL7L++ea/rBv0FH9A7yTL6
N36Q2Osg
Name: res/vX1.xml
SHA-384-Digest: gfKhaxYH6n/4gxz6EQF1QXJY19uCHjMALwwLWmx9DKQeEz//HdlklKSe
zaIjFan5
Name: res/aU.png
SHA-384-Digest: 5OJmmB5xYy1N4jKpgD9U8teTd0TO8C0R4INiIffQtzilQAO89FfCqW1t
5fohpXC/
Name: res/color/text_control.xml
SHA-384-Digest: VW0GtVq+smnjhyx5Ja7LSLksn9AX+pYfqF8L8zpsCXxr1VcUsd7jZnmo
wfRqjw8v
Name: res/xo.xml
SHA-384-Digest: L9+9t6Gxz76KAnDVgAujREMTFmMgz98YAS3YjcrvB73jc/LDrJt4Xb5X
hynxc29P
Name: classes.dex
SHA-384-Digest: vBCC9PcStoC80XE1ctTTLEA9WIt3GctgFS/PdOEBnYspyzChVcAucEA0
4rvIr6jN
Name: res/color/design_icon_tint.xml
SHA-384-Digest: e6KPvBR1eIC/cbLNApa8VI+RWB9hf/JglrL2D/8LQSh3FIYXt8UayZqB
5k1ltq0F
Name: res/FS.xml
SHA-384-Digest: vJHPN6HRBkg/pf+hrQ5lhIYllC6nOOuWTU4cr4CdmYXgPx3ivaOHPh3C
s5zu+PKp
Name: res/color/material_on_surface_disabled.xml
SHA-384-Digest: x29Fa6ru6w3G3FqNfjky6gd62IdWlitA1Sul5ahB7QqgkzPmGIH2cwhS
npNe90jL
Name: res/Ol.xml
SHA-384-Digest: HKF4sWmRCSbREHrIYB2ExEaZc3Q6FICkyFxoUzfvw4NWW6liaEObHQFh
EwCTNZ6e
Name: res/EU1.png
SHA-384-Digest: 9cmDiHetgHf78Zjkfv+0+tnWTO+96as1sHZAqPHmQeuuaZPZUwmGHQXK
qsUJCjT0
Name: res/Nn.xml
SHA-384-Digest: KHBnKQfCoWdLCZmqJSxM0NyaN4yuKSllMlS7RXUGNK6wopSyPlG4Q1d+
Ca1aYHT/
Name: res/pe.xml
SHA-384-Digest: HCznO6hCdG/xkLF7qhxa7rvEJqIDP4BNycF6QXpYnlyBsL9IDWq0CmD1
Vy/1Ihad
Name: META-INF/androidx.localbroadcastmanager_localbroadcastmanager.vers
ion
SHA-384-Digest: qYDQXLMLyA+k/gKv7an2M1x8LHrES5ZyGAFU6sAY0s5SLb2gc+VQpByD
4IN0FqlH
Name: res/8c.png
SHA-384-Digest: KwDgW5HepptLVE5D2BcAnynQPjidp3RSuKXUhbhlAJYFRLm+RMsKIdcv
em6vBpx4
Name: res/nL.xml
SHA-384-Digest: NJ6xaD/DyG5XgDFq4HShS4rCTmMAyqUM6oxv7thdvbpIZ2u+IJV8/hcv
l9BUSe0X
Name: res/SG.xml
SHA-384-Digest: qFQ2BITJMccFj/B0QAuQNqxWEGo/ir3bj+lp5zP8500jINVHfgBifBfE
7pQSwAm+
Name: res/color/mtrl_fab_bg_color_selector.xml
SHA-384-Digest: D0AdiCfH4enX/N5iXr9gkujzOX1uDfk5Nv+SWMteQhDO9A6/nZ14xALu
C0nen1Ih
Name: res/color/m3_tabs_ripple_color_secondary.xml
SHA-384-Digest: q9mHCz3SjXsMGPzL1CLvabPogVa9e7qktBcTrGrdu0MQ4hepBhn9sxJd
HYv8Iv/k
Name: res/Li.9.png
SHA-384-Digest: BG8mk0jRvBQFdnCuOXHrYlTgFuR3/9UNF4EWvnC43S+0CUkB6/dOCc8q
YXrpZjd+
Name: res/4k.png
SHA-384-Digest: Ne/+gMCWDtZWlmDIM2yV7GCiPquk3HBpwjNk03GGxudCTAEfHxsR8seH
TVMzGyGf
Name: res/el.xml
SHA-384-Digest: ko1I2qlhdHE4Q3mP7/m8Uz4BMxSVgz1icDeKIp8Ef3cKBbz5iAE4nOCF
9MZ9vMeC
Name: res/J1.png
SHA-384-Digest: 0DB28FyDRduq/j/DMzLVFdhgfbklQ73ndtHlr1iC5oePkIico3YPmuxy
ncW9kMsd
Name: res/color/m3_slider_halo_color_legacy.xml
SHA-384-Digest: 9JlW04on7UZTtdrdyMjPbN9ArtFI99VowYzmS0jCoVj12r5vrJfeH8+3
vt4C87ad
Name: res/fj.xml
SHA-384-Digest: CdtY9zTQqdCdNOjZmL6mRcE94OSSgB7RXGek9V8Da5ZdUWOFKQZrgk2d
il+gyA2v
Name: res/Ke.xml
SHA-384-Digest: Qh0vysTzene1naPbTzTpJHlh/pdLfLqkU6/tfACNqxatw6UTbFDqhoU9
XDNPBoQC
Name: res/N4.xml
SHA-384-Digest: UONjHxE7g7OgIdTp7g19w8c9Aiigmx1ELS/Y7kRi7m8/a8vxOz6CPBRc
tai3tTIO
Name: res/jI.png
SHA-384-Digest: CFihOZrZqZYoluebu90RaAEfrj/1UXdE8hpTGgw7U61YJGtRkOH8z62w
rpXWqVRf
Name: res/JD1.xml
SHA-384-Digest: kGEWSxRohy4mn8InQOOqxH4xW1YMsRJjcCOpoJVTdalXfx8LQQ9uTnjA
Wk1s2tEg
Name: res/No.9.png
SHA-384-Digest: broJ/4K7App8GBh9L9aa+Jk6eHl23ygJT5JGoa7mv2j3MqDaXc2lsJ5U
ZYsjWI1w
Name: res/color/mtrl_filled_icon_tint.xml
SHA-384-Digest: c/ZbtepidEWtzvETDSGXgG8kfQNOHt50IaCLefMcUT5/ndlPq0Y+rAU/
NE7l6J/q
Name: assets/js/lib/crypto-js.js
SHA-384-Digest: ac2+ERgnipN8YBmKFNo2crjX+M7aMkKW/vYSp+hxUjZx4m7P1isJ088T
H1CZwFIK
Name: org/eclipse/jetty/server/jmx/HandlerContainer-mbean.properties
SHA-384-Digest: EBzV7g80C9MWxW5TdcLX7EVjf4jt61unoEtboA7DcfkpCwEHSgvX1ULV
eJPvifoY
Name: res/68.xml
SHA-384-Digest: EaBslk9Bcnb6vOFUfI2iWY+aXsJY0Hb+h6/qjv7ZS8QPNUdl8+TuV3t/
99X4XwUq
Name: org/bouncycastle/pqc/crypto/picnic/lowmcL5.bin.properties
SHA-384-Digest: mP/dep8juYRLJdz3YGW4OJUtfXnG8YQjNEtD9CVbAJ5jTHXv3t8dFoa1
aXAV1NPT
Name: res/pV.xml
SHA-384-Digest: IpFjjDJ4Uj+UM6j0/N1k3vs+k0hK5sj4MsGzAlk+JDzXixZr30elpyK8
2A72oQCh
Name: res/MW.png
SHA-384-Digest: 2qZT998EqC3sTa2sE+KltPojmhQY8fObsLzDzstcHpzrSBxtEj7y1+3M
H4MmRCmt
Name: res/65.9.png
SHA-384-Digest: JJyMElPaGtLH3SbRr9J70exRpy1dvQnep31nt59hsxVkPHXJgsVEY0mO
f/JnSPuL
Name: META-INF/androidx.biometric_biometric.version
SHA-384-Digest: pwEtshogJZKHab6O1YiSiNblzEds6oj3aBVfjYF3llrpy47Vygjm25mR
2Hm7iaHN
Name: res/color/mtrl_fab_icon_text_color_selector.xml
SHA-384-Digest: fIk8Xaaa6CEuL90L+MflkstduSqb1kTSznC0OlJegG0DvswgzrH/kPwb
cLw6xZ2F
Name: res/color/m3_button_foreground_color_selector.xml
SHA-384-Digest: ZZ/g21W+yCJtJqbMEc9KReDzZPDzmUZun5h5IDPTbWJdYKRE/IjHqFeY
PjMN7y7F
Name: res/A1.xml
SHA-384-Digest: Z/fuw6pfadcFhUsuRW0fH3mc03gq+oWHF2YsX5qT1cJh0kX8rG2qoXTx
h8+om4pq
Name: res/_P.png
SHA-384-Digest: fHM1vfWedXQnbVFyAlHb9xwjHazjWb0fVPlcQaokOL9u98sVkRDAebSj
5jYXuKYe
Name: res/7R.xml
SHA-384-Digest: wDXrCkjtDclaUXIHs2cpwIhGH/OoV9uONQJUUdiFPUFL+ZQi92CyeAYk
4ZId6/a7
Name: res/Eq.xml
SHA-384-Digest: 5hDYY1MxiAAydii0hE9i+AfHlJ4twgIEogZj4bWD/Jvze+yyVlEtsdRK
GmmsZo1y
Name: res/FR.xml
SHA-384-Digest: 31nFfCKu4iM1JFNCXVNsdQTu5bq1FJDowH8MBbg6McBtllmQCuFS+k/s
UHtJHiLj
Name: res/XK.xml
SHA-384-Digest: CxWi73ZF+G2Kj0HAvxbBcuUiSP62ytBLsTm4FtMqfpqyZIj5+8ApCicx
HR0/9x2o
Name: res/tZ.9.png
SHA-384-Digest: /WQ8N6vPHW2XToo1fpxts//gMI3xZcJ77z0iQ78oyovBRCbGYjnVPxT4
ZDsoQfKb
Name: res/7_.9.png
SHA-384-Digest: DQfSYgQJziwEz7Egzm2DMk/vHuXc/zhE+ROq/4928uNUORD8aH0ytmph
zkBTry86
Name: res/br.xml
SHA-384-Digest: mRwp2gB0BnCsVbsYRiKsH2+SXrAJz7Ko+YXim2vPnGJO954BWh1sVug5
U3xWS9hx
Name: res/gK.9.png
SHA-384-Digest: MkbBmI5p87hw4i6y0HbN1Gv+adQ+ClA8mQm9k+bRzy7vtupH8kXqm7J7
euiowSJ8
Name: res/color/m3_button_background_color_selector.xml
SHA-384-Digest: NmmdpNWDm29rdUAO3nJhdt0z4JWJGZX/xAyn1DNjmgMupTaJz3E/8wTv
RVL8zT67
Name: res/eP.xml
SHA-384-Digest: w0xzhbwP87B5kCnPvLWlScnATd+1cKT3Vxg6gncqicsaSK5dMLa8L9hY
DY9G0lKY
Name: res/_i.xml
SHA-384-Digest: gzp/LNs4s55YgwOZoEpMA71BIIcQPco/5R2Oa/Rxm97Yxf+NX7TyVmpo
p/0Mhc8N
Name: res/9O.xml
SHA-384-Digest: igx+9Er22VJVlozMA5Lj14TCQsCAXq6bzk1bdxmFsg6a93KcBHD/b28z
R0WV+J8G
Name: res/Ud.png
SHA-384-Digest: fJwrciqJvpYpxZ2/Wek++fysesI/N/H7P7Ozh9XyHln1hVJVnsr/6lkO
9INnEbs7
Name: res/Ck.png
SHA-384-Digest: +ZkWkEwqfsqMns6Op0s+z5j3M2WjifjyjUUS1tSPNkRe9gl7S7q2W31e
XwwNPHY2
Name: res/5e.xml
SHA-384-Digest: xdCcRi9q9nZRdq0GvWIEIB68BsOtd4RNGCK8kVnBbSej7SsfvObM14Ef
ZmZiMRVb
Name: res/o1.png
SHA-384-Digest: kraxHIeRJjldzCy/LvqTAfeMyyVWKqY/yJKrRM6vHJ+Np7z5BZzqerTw
eQBL/Z5Q
Name: res/rE.xml
SHA-384-Digest: PJZ2u1viJULvk4PSuquxRcY25LIamVhdUJ54zBUPSO3A7H3qzqVZ2VgQ
/Rr95WZW
Name: assets/shaders/fragment_shader_copy_es2.glsl
SHA-384-Digest: MR9S0bUUVuD4PfYZ6xiBNBHh0bd//FfkpyYVSIZY5n2AS/AKL0lb0LEu
V8whCZUT
Name: org/eclipse/jetty/server/jmx/NCSARequestLog-mbean.properties
SHA-384-Digest: ucMpqTbHvBJiWxPvzBStLDj3iDEjTUnqznwQeWglo+Hi5N+47LOpuCzX
NbDRgmpB
Name: res/eR.png
SHA-384-Digest: 2UnF0wvkctUmuCrvcslA1BmkETngpcK3JC8lBLQHfDFXIbDsM6/aZmUJ
W0nXr9lo
Name: res/3u.9.png
SHA-384-Digest: 1wcmqJVXO4cw7wWSwJgYZ5zUkoX0WQ9I2tDOCyREaEqoJ9os4PugHJdl
ADPhIcMG
Name: res/ya.xml
SHA-384-Digest: 5TfjqWjPmXPwkb0isgBAKrtoz2sftWknWvH+IonyRbgVrfeE26anKfbN
UGhHOfrm
Name: res/hN.png
SHA-384-Digest: mra1EHhwUR+YgaSCaoLYVt57tiA3FaEDYZe1EpJKvKBUlw5RV6vVLBmX
GBK61LVC
Name: res/Zd.xml
SHA-384-Digest: E97aJPEK25vLxtVuMDzi8RpF78/JCUIhULupNXm59PDJ+MUjhXlmwd+m
CSpa+bkc
Name: META-INF/androidx.lifecycle_lifecycle-livedata-core.version
SHA-384-Digest: /sdECTOCxbC8anAoy+b5Be+s4sOxKa2lcCfAbSmHQRtFTXBTQ/FgNWV4
EhYYNmwt
Name: res/ev.9.png
SHA-384-Digest: c0l/WwgV/X7eLtEhedoLy4eEYMEMSO8jWdsAgWbBweoMioHMKD6+CA7W
vHFt+Zyg
Name: res/Qk.png
SHA-384-Digest: wQKT+E5rQoMUpJNlYqRmaI/CV/wTJ3FObXh7yldotsN0ReOfRspmeYbC
RxVXXhRM
Name: res/RL.png
SHA-384-Digest: JVgGtQO+W4rXyE/Stywig4SW2HPVTCgVVY3A1V3F3u0pIgO7BhuC248N
1iec/7vm
Name: res/S-.png
SHA-384-Digest: OQ21b4BRzMS4xIg1W7oMRWOcqrzAMxPdN+cJ7V4EMaZpHLUJgxgUx+mS
ZJ9cVKB1
Name: res/20.xml
SHA-384-Digest: KjY/x1IL4c9iklYaqQrhKupvc6HdR+7VDRQ1ubRxXp3LdgnJI3cLkYq0
0/j/v/zi
Name: res/gv.xml
SHA-384-Digest: PrMTDziGjfcJktvtG1roeZjcY1DaTBfJkEt/o+WEO4ny23l+r4Kdu3tF
QhTgJw1p
Name: res/ZW.xml
SHA-384-Digest: JqBEvIxaFUtHa15M8x766vAqeMEsd/8zwEPwZYHCdqfHh01YqT0E2t2b
5wi3QKCQ
Name: res/tU.9.png
SHA-384-Digest: HbjCQvZY9suVo2kLeAXTiBldga8iKs4vfOj2fpokZQQrKWcYDToKUOD6
nWW2GNkQ
Name: org/eclipse/jetty/http/encoding.properties
SHA-384-Digest: rOL62ZVNE6fH92hBGqxbXxLWIlr+R96mA1ricxYhkbDXDEIuuX+h9SAR
G2N1M6Nj
Name: res/Sc.xml
SHA-384-Digest: 9RDN7ASx1UIGG4WrLpUw0kVQ1NnFb7BgTRfVUYiE4vey+cYtG5e6K7pz
bnChAgE5
Name: res/0S.xml
SHA-384-Digest: CwY3AhJzZADyUta5AWi4GJvVXTQqTRHt2cgdw9tZbI6JDqENd4R6wwmG
S1Uj6leo
Name: res/color/mtrl_navigation_item_text_color.xml
SHA-384-Digest: V1p84HU/Z5lCFQ0Qr87ray9ywin6SZ6TpR1KZye630LjZhEVdc71o1es
hxbu74ta
Name: res/2j.xml
SHA-384-Digest: TZO0oOQkMySrrzp8c4oBwFE9JCN5nAyDDbjDcNQaiirFjsiB6XRNvzY/
HZ/objJi
Name: res/sA.xml
SHA-384-Digest: 7sVAUj6iXilyPo8tzJifa0guJ1cuhmhSgoMZBGf/1gw+TQAb5DHCGIAd
cxSRhokl
Name: res/color/m3_timepicker_button_background_color.xml
SHA-384-Digest: WCcHdpO1nUFDiciJ3YDjUE/4NpLGHeEVL46CcDaSE4jGcUw+k6oFK1+I
SuWYJBbC
Name: res/9b.png
SHA-384-Digest: NIkaE03/9mY+3TpWx9lMi3CeDGhpk/DQwirQq1wQ/9D1NFz1w2c31b0K
bdrbc6od
Name: res/nn.png
SHA-384-Digest: RlVDqZiw/iLj6PCuLFFmnK1xf/IusFHYkGvZDnPxNdui9mUigsCdckfd
v0A9J0Lz
Name: res/RH.xml
SHA-384-Digest: sylgWJhsfi9/eoYbZEaQQgLSo0IASLe0JxnXPy1XNsECAbT7wBPjmu4K
AZIOO7fv
Name: res/GQ.xml
SHA-384-Digest: 7bvL8xqwFDpH5Yoz+PSwzmMNiz6Ejos4/UOaZiem4gS1cdF8UjH6hIP2
NzUkDZxM
Name: res/N01.xml
SHA-384-Digest: eTdL+deiDDqooZndWumKhn/9JJSd3TxoPH7Rkc9DWMZVULVGRVSySSHB
YK40mXfY
Name: res/kD.xml
SHA-384-Digest: 8jePPxgNaqJ0sf4DvylwMzUoFDdoEeE9Dyhxgj0UApd7QKkhWuV5qY9r
Wz6MbQ0T
Name: res/bT.xml
SHA-384-Digest: hAfyCP+aTm4tNApOlCTJQ+CdLVg7vAgwzU4+XhlnGTZzMXj/VThhJIvQ
d1TlRA5y
Name: res/c5.xml
SHA-384-Digest: 8tyu3Ds02yxTG42G9ZmbvHLz0a0zUP12uNf2gN7pFMmUEqJp34IVXWwN
Fl2QvNtR
Name: META-INF/androidx.legacy_legacy-support-core-utils.version
SHA-384-Digest: nQdIi7fW7R8B64OMhUbRlmQ61FxVQ+vZVRbQHbtotQO9UHBsBiHg70l3
1t/QXmiG
Name: res/t3.xml
SHA-384-Digest: 6dopup/NAfhY6QB45ghuP9e4b5ArZbgVC3el7w8lNjjkPFIw3xi1Ifn/
wrnUqQo0
Name: res/Bi.xml
SHA-384-Digest: XhfrMjpjjgse2on2mTq86a5xa2b+4KXwp5TBS89ZeQHpsVs6XZIA4y1s
lVm+t6x4
Name: res/k_.xml
SHA-384-Digest: KXYe5tchI2kw+euj0Xi71ohBhcFaD+uUDfRjXv+cnBr6Job59HH1+OMh
/Z6mZp/E
Name: res/color/m3_text_button_foreground_color_selector.xml
SHA-384-Digest: p7jtp4KQhwVPtjLi3V6gdNZiYfUbU+dU1PHizOUeDteVZa/vstlkDgCS
r4ARaSj+
Name: res/5v.png
SHA-384-Digest: nSts7qLPlxfu394w4IoQmREekPODKQZNlx8EBqpgVovJfZIloQhVFWKQ
rXd4BXnQ
Name: res/sn.xml
SHA-384-Digest: SNWZRK8cyqUQj508M3LX1bQxhjf8wL7mf3J+hd0BdoZ0NMCU6nbL8+cS
SuX5flBq
Name: res/u0.xml
SHA-384-Digest: 1fIB9O/ZO8E6NE/kH/TsecCxPv2ybxa27mHMhiBvLE8XC/LPiq4PfOqG
wsMh5/00
Name: res/tS.png
SHA-384-Digest: l+eTKr/NotMUYWQKX7xz52bGYj5+KDiAT56GTfatqDsmb5XwuN6D/ynk
f3W/kRwh
Name: assets/js/lib/cheerio.min.js
SHA-384-Digest: RWjDmdwwoZ1WQ+lz+AgxFyFoIxXkbX2Yv3ERksXnHCQ0MN5+tza/MP7G
7PFoaBXP
Name: res/Wp.png
SHA-384-Digest: H18eLd+yPj3CHXkTV01LQrZCsj8+KW1ntOpIsidKzdvApy6URYkQs5PB
mhYKEmhb
Name: res/color-v23/abc_tint_spinner.xml
SHA-384-Digest: Rgm2Os9V5eW5NvADidkWeSZM0+LXD0zRl+xDZcXUuBblxeRtnTYdjW+H
IkRIhszA
Name: org/eclipse/jetty/servlet/jmx/FilterMapping-mbean.properties
SHA-384-Digest: Nqx6m8GIvng0RITQd3DcKuH0FwmVomIqHEKle98ayy68Cv8wFMxoMF2n
ZNRHsHV+
Name: res/2x.xml
SHA-384-Digest: HFidUmxFmP4aMO+1YTShwsgucCDFM12FLcnn65ZKjZULCHipppuS8mtW
MVeZ+naf
Name: res/dC.xml
SHA-384-Digest: UoYTWbUupEn/iTe6LRjGvCxRcPmwY6NUOUVNScgtxOt3Z6bCdYv3WVzl
qMFC3W7b
Name: res/color/abc_background_cache_hint_selector_material_dark.xml
SHA-384-Digest: Liin6VIqzQBYjLGIEmaxCzSMn1g9eaFDsRlxotwlQ6rHJgeYTZh6PXbG
ixtjuBoD
Name: res/Fg2.xml
SHA-384-Digest: sVx+Nv6KhB2Yk51jQ8ZGzZ3XntsBUOr9gDFBHUdZPwx6MMjUlRnYiYMn
5AzYvo/X
Name: res/W5.png
SHA-384-Digest: R3ZqJIAmHE+yPZkZUSnS7mqG5QorIXoMklg/NNHZ60fKlzUN9ZFL4z0b
Qx1MO5eB
Name: res/Ce.xml
SHA-384-Digest: gEdfg95cCnF3avKJO7EtP0SulVCG52Bvp6wH1BRG/wb3noAVUQWqf8LB
YdM/AsAs
Name: assets/js/lib/spider.js
SHA-384-Digest: VKciyavudqpU2lmimGH/6OJcZp4pOy5HxwnSulg3swLzPNEO3Ccy//Kn
y8JwXZj5
Name: res/1e.9.png
SHA-384-Digest: Z9InkZ7V/avYQO7ju0HFzx4cNkCYxy2OQY0JRiw/SPf0ppVPX7dKd+mi
AMfR03To
Name: res/wu.xml
SHA-384-Digest: hhqmMukvbP37vMpCldAVWCyQaADPMqVcxET5pC+x683pZKax9OCB712u
XBcR66cY
Name: classes6.dex
SHA-384-Digest: h/htoWA8A6bv7Czj/e2zEYdu9oGezqB5DxGvbaDHk4bmK+5seo3Sou5c
wqhRELA2
Name: org/seamless/swing/logging/img/pause.png
SHA-384-Digest: xqwy6t31g68CBSv6T1qMmwN9w85QPv+nK6+RnF8PALUGTlzSWO1oge3t
Bq5FO6V3
Name: res/color/material_on_primary_emphasis_high_type.xml
SHA-384-Digest: rC41WLMtHMrQe0Mq0Wf1+rSZK0bz/RRJbU5iKglOZ2ANWtLL8v8jUkjd
/cPhzSlT
Name: res/color/material_timepicker_clock_text_color.xml
SHA-384-Digest: KccJorsRjtUzowqAe4OdfeWUvC0gRCB2BD3ycFZzzNpUxbgjGN+A7wel
b/jNaWJt
Name: res/1d.png
SHA-384-Digest: 3p6lO6uI6CeKanpthry1PcFDojZoYMAMLFN/6gonsY+RmUPQATCwyShV
SpRVkYdF
Name: res/color/m3_navigation_rail_ripple_color_selector.xml
SHA-384-Digest: 1zhZk0SRANvndRHb5vF3VtxWtzBfWYgqIfmD+DDgzc3V3/704+DNUbE5
u2+f761o
Name: res/Lp.xml
SHA-384-Digest: rh3QTLkrJsY1fUkFXSsv6JVStZFChDP9eaLn27mHF2WcgBWkJlxto4dR
ii3dBA2C
Name: res/IN.xml
SHA-384-Digest: LGsB5i0p0fpKqYcvC1muMFEd0BDO3xA9uCZJZtvb0t6tj/mnXJdz5ZpV
xo8r2MNX
Name: res/iI.xml
SHA-384-Digest: RVQFl6XsPaNwJQPriRIOFs0e7tXhFiT6Tbb7nCuiXkWyrk+WvD3QfUpf
J1h4ZJc+
Name: res/n-.xml
SHA-384-Digest: yZu1SpULWR2DOR5u/JYUJ+VLdOh0ttFfwqEPeHdxAP/yHvdGIBChX8G2
hjqwWr8q
Name: org/seamless/swing/logging/img/removetext.png
SHA-384-Digest: 8BscRJnUosjbdivDuaPhzd117ytOQIthaoy+frS0gQgedB/Gq66EENQp
rDPQFqlv
Name: res/bt.xml
SHA-384-Digest: dDOyMBhZr4WvmAQkYO+lweQzp+OG0sVIDzh4Y6yRdaqzvOKaDD02GIlb
5atlneVm
Name: META-INF/androidx.print_print.version
SHA-384-Digest: qP0uelGkXIaO8grIIlpo0dHCZW5b0GkcPWrJNqS1syuFI55bKupNPD/f
hUmFm+N9
Name: org/bouncycastle/pqc/crypto/picnic/lowmcL3.bin.properties
SHA-384-Digest: KNpGqyaJ+qkzFbEPHhKuTEvByvYlbKUjCEl3Zj+5y+WDzPxBZaqME1FX
Oq0rl0lk
Name: res/mA.xml
SHA-384-Digest: kNB8G7k3pkc68jceVraTMS3dJFeJ/MVv5ks3QfGFjvknCGHCYGh7CaRS
kKxHjcbK
Name: res/fO.png
SHA-384-Digest: ePoN4rg/Mq+V8BRCMcAVsTYeI0AyZgvDOsv6IEd7eK6Z9HKA7AgLq2Qj
JdD2WrQS
Name: res/hl.png
SHA-384-Digest: 6XhKfzV9jnfZvR6sZ8uX1F96M/fg4KMw3EhVwiPLQELM3+c/W5OdKC0S
TkJSctWA
Name: res/sl.xml
SHA-384-Digest: t7QwssCYMdJT8GAd1SOkre6NY8180Pz8RQy1j0JXowJdMCg+4Fa0i3Mf
Yee2z69P
Name: assets/libmitv.so
SHA-384-Digest: DMv1ogovxJIwbBgmF1MBPFF5Ved4OOqGhxChGtZEsMU9w+f8JhGq/oxr
pJaQEgeL
Name: res/Lt1.xml
SHA-384-Digest: ISaIouDvHXY51ELluEe8dihPFFVf2FFiRDg2g6K0DKhEs5zuwebHZ3EL
66Trihkc
Name: res/MU1.xml
SHA-384-Digest: 36rB2sus+WA5ItAcKTpnulURLEzzc22R7XqRnvyZzmBsO9yzExpgWs4G
GzY6MYe0
Name: res/pk.png
SHA-384-Digest: c7KNn0m3JBfI0+i5QoMUpIrcwYs8Qk84smcNivGnlk8bR3pRkoON8QuB
3ts2cEU9
Name: res/8p.xml
SHA-384-Digest: niAFZGIRwQT1sJOiorwJRt4n5u8egMIQ4PE/GDRnDHjp53X0O8xW+koB
uaz/UKbX
Name: res/kB.xml
SHA-384-Digest: aBeO7gb6VBKbz1Knp9Tttb5kqilyVvcRUDLqEFt1O5trnMf87f7+TplN
AJHgeSsL
Name: res/Nk.9.png
SHA-384-Digest: 6iFJjl8JbBqq32IHrYFLlAGKxd6uS1zJZc40HRcGV4ACfrXSNlgyyH95
p4AuUpiI
Name: res/color/mtrl_error.xml
SHA-384-Digest: M0Ki4n2bk00vinCLAeUlSeWa9+1trN69do9cNS7iNkyi1xgY5Q5DFF6H
WW9wSsxP
Name: res/eC.png
SHA-384-Digest: 3e1Em+LhXWmToTQdMxSnpmIJWOW098nmoKcRXsSNg6+qpXb+EwcfhkkS
4aCVi6HY
Name: lib/arm64-v8a/libquickjs-android-wrapper.so
SHA-384-Digest: ndJGg1tqMM+kfhxn189iIUK9fPYhXg38cOg1qvlk6Vn98lbESj6u9gJk
XLcgZMCT
Name: META-INF/androidx.core_core-ktx.version
SHA-384-Digest: Q3gEnY5WNL6zdjRW90bEstC5SX9HH05ew5ShztAlmVpkhry9zUyXvW7n
Mrvf97Ov
Name: res/color/m3_button_ripple_color_selector.xml
SHA-384-Digest: LC3q2+iys+sDWfGW4/tEmSxSafCbLIYjSYkO+NwVTSolMU+KsdVWpCn2
BlzN4xNt
Name: res/color/m3_text_button_background_color_selector.xml
SHA-384-Digest: 2K4bH+LmIKJbyqdv+5VRgE4tOKEMc0t7Qo8qxwh8NAnZ5fSmW/dQ6Svb
FJOOJX+S
Name: res/0k1.xml
SHA-384-Digest: gkFTEGYnN85XlSCGva6GNZrkH+NhliZMMd0ODyuDpUD49tOr6W+Ffibk
KtuKjKTF
Name: res/bi.png
SHA-384-Digest: FbKqtTUaxD17zFUpw3a6Mnw3cf2k+2O6gEFyBVyQDAlPLmQaQrAa8hiC
OkYvyKNu
Name: res/color/mtrl_popupmenu_overlay_color.xml
SHA-384-Digest: P5BULWmCqL4KB/sbKwzE91Z4AZVlrI2HE6cwXhW90nAipOItIbyc9G+o
EbQqueU+
Name: res/color/mtrl_tabs_icon_color_selector.xml
SHA-384-Digest: bpTxQZsCZu3lDsbwl9vDaDEm9QEbo7fyd7Dh1YkkTyGheTShCqOFBV2y
bQ/0sSE2
Name: res/zb.xml
SHA-384-Digest: z9XcuznmTM703Pd18O1cN7OUc8yOteyMD/xL9EtNBlFHZPGeziu1W1kW
/GmfI9O5
Name: res/Dq.webp
SHA-384-Digest: EHx2Q4VwZBqb2FxSqx2AiiORZ2N9M97Op9lgNG7ZVImsOyvIv9KNGzpD
4acVIv4O
Name: res/Jw.xml
SHA-384-Digest: oD/iHhAxq8z1dlGqxEaBgyvwPQF7auXB9HIlO1ZjtCFfOf1RGzw0grZW
0YlgxIbC
Name: res/color/m3_checkbox_button_tint.xml
SHA-384-Digest: 3qdLIIVbAi4u81ha0nZoFDFC9CFP66iEoJW6d9sh/vrxcaDdB/64hcr4
eBozWmRh
Name: res/color/material_slider_inactive_tick_marks_color.xml
SHA-384-Digest: RCYQFn98+3cERzfNejJxKqmVAjeeJSW5D8AbtAU8Z9GPNSIfvzx2c+Ty
CZAEeZ3T
Name: res/color/abc_tint_edittext.xml
SHA-384-Digest: HAP4EN2LeRyd9wAfYozgvx+gTNBGRIbvAR+0Ko3z9GXvIHmh/iD80bT0
R/KOFPRt
Name: lib/arm64-v8a/libswresample.so
SHA-384-Digest: +4igPJZ2YnzWfosJqtGklx80HZ/vXO444c05F/itXceX9bBZMzZevV4e
QrnIMasz
Name: res/io.9.png
SHA-384-Digest: ZJ9dceOSCXBSVMCsGc+zXTQEZb6ZE/pLSv+0Z4KA34F7xcsbxEPvbO/o
5kDYGoHe
Name: res/3h.xml
SHA-384-Digest: 4UO1tunBKQ6qK9aV1a4k8+p6q86uEPo2oEa20dXRbiFaUf/QiNZeGPIx
+++P/l/U
Name: res/4I.xml
SHA-384-Digest: F6dFQvziAtbpFV2Y8TaEAL0EEG6Ca5KrsRvtwskfwD8Vd3w/y4aLz05W
NkK0tUax
Name: res/yF.png
SHA-384-Digest: QLUIqzGoXcxHNbRVluaubDQ856+KdgGh40DlWjTWXEdLxidi6E54HH8k
ngSxL/iB
Name: res/sV.png
SHA-384-Digest: hBL/1DhvWB5RI5mE3Fg1f4e8rVWQdi1O9biUk6tuwqXWKVUbM3UdXiAD
NqhLAPHB
Name: res/kn.xml
SHA-384-Digest: HVOhGStVYVHizUDTkP/0eusPbj7Lb5AGMz0gv8ZIqM2zWqYcwAE/BoYR
IG7PWaPA
Name: res/color/mtrl_indicator_text_color.xml
SHA-384-Digest: APoN4wIFclMVh8wpb9xqUVlVp6mVz3Vdsds+wesiW+08mZ9CS3NYAfXK
L2hpcVnu
Name: res/-N.png
SHA-384-Digest: Bc/jESRcwAnthZAH+x4m2cJPRpTuR7Pe22hMeAV/84BF2IY3oskKlPS1
xSHftgOo
Name: res/5v1.png
SHA-384-Digest: PtTOWcdfSqPhaIXln1j7iMWPBRmiiVA5xMFye0GK9a9qPZwEi+HVKnYx
KZiKhLRh
Name: org/fourthline/cling/support/contentdirectory/descriptor/dc-elemen
ts-1.1.xsd
SHA-384-Digest: Nc3uuyHt9pqLxNoUVpH+bJB1wcDHoj71BtdXkgW8s5V1ftlAgBFmK7Ih
i4J+o/aE
Name: res/mc.png
SHA-384-Digest: /FiR2pIKTh8WhXS1OdSh/Za+Oyp/CyWM7F38ahAzqp2LOtBeaEpMuzux
FypG2FMx
Name: res/y9.xml
SHA-384-Digest: c8c3shB7vkZijqDLMOB9zOm13mO9Tu3BE5USZvxrlxsUsdjhHDk8duhx
gpWUzP+Q
Name: res/Ju.xml
SHA-384-Digest: NVFlZpf97wikDko+mLM8GhL94pFxPIvzka12m0GP5ryx2MOTAbyNMZqF
MOduLfay
Name: res/gZ.9.png
SHA-384-Digest: oUV2pU8/uPS+NzL1tXrQfUXRXGqBw3cKSCFMK4bzGNFg6QEe18lPqmqe
LL8X68gq
Name: res/7G.xml
SHA-384-Digest: betyP9FbEhW5FeXZU78k1U+hMqhYUeH86Ikdda4eTGv4crVVc2+GdqVG
oSb/L+L4
Name: res/Fr.xml
SHA-384-Digest: 4dCZr9/psbdMaD7aH7qhPv8eWhUESZRHFz3rCebyBqfniSla8u23E0qs
9/SlNm6Q
Name: res/H4.xml
SHA-384-Digest: 3/QJPnQ2ITfmbF8thoiNpstJB2tvzBmDCe2CWOBMVkcnjis0ZAPxdRqy
d0Jchy8b
Name: res/Lf.xml
SHA-384-Digest: F8HQrEQ+HZGQu1KqzpyjM6m6BTw+gnC9PX2jy9ZGtZcNzyFHLpR1SA8e
cyxYQHDB
Name: org/seamless/swing/logging/img/debug.png
SHA-384-Digest: Sb9czHpxlu1Hx2fWhONVwhN/DMB40Kesz1inOL09bOCOW19UBCfRL6+D
/03XadX6
Name: res/UH.png
SHA-384-Digest: /Vt9o6rigIeUD3IVqvpqxn+qSogtDkaKbaZZ6OGsQmJs6+9CpOCd0ZmF
KYJ1O2o/
Name: META-INF/androidx.customview_customview-poolingcontainer.version
SHA-384-Digest: EHf5MBesNj06gp+GpvENR3LtSvpSorFvIGQZBYtVzhv9c1TbnMLoP47p
U0wo49PE
Name: res/4x.xml
SHA-384-Digest: 4nISmwysAAm8FbDppatAoLH4yIbQ7vSBm9D9NkZZ/tAYJa0Evx6eWxHP
6Ruf2qxo
Name: res/5Y.xml
SHA-384-Digest: zvoGkkTWABOufda/RxBsZOj62Tcq2nC+/b/sHMeOlqbuYyvky52H6HJG
Hvz/aHpB
Name: res/xa.xml
SHA-384-Digest: //hHlGoAnYsX3EWaBXa5h5ABk80/l43NdUpXgCR2u+eUH+xGEMGSk69p
IVesc7ke
Name: res/yj.webp
SHA-384-Digest: EeuI0cz5cTo2SV2Fyt/95r47bHyDxjt3Q9DAijTb7Wq1TqHzIPY9aHN/
dVLDxlkR
Name: META-INF/androidx.lifecycle_lifecycle-livedata-core-ktx.version
SHA-384-Digest: UutrFl0STXKxAaMcmggEj71td0a3E1WYlT0hVl7uktCUdfPDabIf/BPX
dh4QJJ6r
Name: res/9m.xml
SHA-384-Digest: EMPXGShM/cwfrrrncGl9/k+HQ9YnEuAHJVf9wtKs1By1Ukk4N9lQIx9Z
6QsStGdT
Name: org/eclipse/jetty/servlet/jmx/ServletContextHandler-mbean.properti
es
SHA-384-Digest: I2eLzwMiqnHmfcOiXAjz2SQrqjR+6b/2wQFlz6rXZLgMdwIsf54x4uRE
DDk/EAxj
Name: res/Iy.xml
SHA-384-Digest: FPGUYUXuCzwDxAgu733yM3RKhOxS0pbNwVtq7VTr9WEeTX3SWp0m8tV7
ojuYb60L
Name: res/gt.xml
SHA-384-Digest: xLHkm2GQZ9YBUj+LxZGleumlPp/QoMGz6gaIWhaK3522deS6kIeAqLvh
ILVLSQWU
Name: assets/shaders/fragment_shader_lut_es2.glsl
SHA-384-Digest: ue47uo2x26US8QgrJR3t0re3A4ykcfvHd2V/nuzYDk6YBIq2m8M6RKjW
xmQX7sRL
Name: res/7V.png
SHA-384-Digest: SLUS+3uVbYMgChJtsCSr15cRmNkV9uxrGZSodjooeIup0MjDaB2AcudP
C7jL1GFn
Name: res/um.xml
SHA-384-Digest: SHuGyGQUOhXlDrL6/ENAb+RLHIfz1bP7zPDf/cymqiV0zUhJh0aiKh+5
S+keld8l
Name: res/NN2.xml
SHA-384-Digest: Mc/+NpaWyPQUUpLUqP5g4iQ52hLPiOmkPvKy9/rnX6Pa7jyVlFG6Zddu
fBd5GjS6
Name: res/S8.xml
SHA-384-Digest: oiHaMOhXwfRCoL+kb6E0DiSAFfnR9vJJIjPtAVbN6zcsioxcsxouFsZG
qYqsDKju
Name: res/0c.9.png
SHA-384-Digest: ZLGj0Q1IfT+WcJ4O2nMdEZaclTyDCDRa13GFQ+XaOzrztRhlDGjuWWla
nmuRF+/3
Name: res/color/abc_secondary_text_material_light.xml
SHA-384-Digest: qqS0FBbU9oCUtR1JZZbff0ZcYX2AJh9ASRot1bVsPHushJVLVYlve5Dx
vsWKfRoe
Name: res/color/switch_thumb_material_light.xml
SHA-384-Digest: DutYsEpVhJTRXLHvG6avUxz6fc5X+QsxGO3oVpAPV4QIHW0t6MrKOSN6
6m4srKpB
Name: META-INF/androidx.arch.core_core-runtime.version
SHA-384-Digest: jz6TlJYSdS28mB0Ilz92tFyeLbqcQ2STqN9LqRUkqQh3RLNCrlHEEmFI
VFExA/hZ
Name: META-INF/androidx.emoji2_emoji2.version
SHA-384-Digest: q8zZlSP2PzcXI6eq42Mb5OFNcipRKtcDkkM7svIY0+yBMlUn3lRYABWq
TgYe2efF
Name: res/nu.xml
SHA-384-Digest: okG2dR4xTQOekrB3E6KWzAu8IUBrDyML/WthnJYeWLFcOIuczs9fjbkj
JvNRTIN4
Name: res/color-v23/abc_tint_seek_thumb.xml
SHA-384-Digest: 3qlsgXepFKEGUo6rfgNRveu522IwEdMuvCjZS6P59WOEsRzK+/Rqsx1l
f91y+3co
Name: META-INF/androidx.lifecycle_lifecycle-runtime-ktx.version
SHA-384-Digest: wsaNMsWb6RQIy6WzraFZHnYm1auw2qAXCS9mKbQVshTwQm0yxwd1ZfCU
cJ3MdSkp
Name: res/50.png
SHA-384-Digest: YmYvWxSjy80Yth1HpagG/zmciOJBcyChYs8FLODRHFIvQK1aUJPJTV6o
sdkVZnX4
Name: res/nl.xml
SHA-384-Digest: PqNKGDZxRIYm83tqOnjxtKW86tQ4XgophH0vO9djCQxjwGkut3c3Zlj+
Q/0Pi0cS
Name: XPP3_1.1.3.3_VERSION
SHA-384-Digest: CklPlpd76s1tDOgGr6hghx4bk9MTNUMrG+9XNruXbsG8osCd+oOSg2Os
sM6tCrjt
Name: res/t1.xml
SHA-384-Digest: 5ZgzD8rur8eYk3DJo9kqEw3G2JOJH8+l0km0Am90AEPtpYa/E8xwVrxW
Vir2xgxP
Name: res/color-v23/abc_tint_edittext.xml
SHA-384-Digest: 8eOAxWZOG/KOMWLwZahIpLd77AJV9IN9diddiADllGCFlC6bNX7CmPre
wQVsppoe
Name: res/Ei.png
SHA-384-Digest: 6xH5N/pmcBrzDYuMBYCZcV5A3hcEUKx28dDuRTuFlthpqPCvcKd1JJ1C
CmgEKGf7
Name: res/color/m3_slider_inactive_track_color.xml
SHA-384-Digest: r7h9WzlZOpNHJm2z82BjnVNVNG5uDmqv0vc2q3PoysqYj/Ialx2s/RIn
BDObfS/k
Name: res/ea.xml
SHA-384-Digest: LcyZY3b5j0la3PP6BpBuZxWhwNVpe8uRmcF2BHwjc/pDJqwbQl8YkvsX
embJg6HW
Name: res/3W.xml
SHA-384-Digest: alKJL222zabrY1FEqf2HHjZ3B9U7kNt5tZfnshyOLrQPRs1icqGaX4cm
JIMqIcX7
Name: res/RJ.png
SHA-384-Digest: u7Tr5M9AIJIFeXvvoBGL1wJYMw/8SZK4hAa5/K49/FGhWBJm6G2LHtJn
jUmutXA6
Name: res/NG.png
SHA-384-Digest: jOBMfDdS3YEjkXGa2zzE8rYb6fx4aTlBaz3T7sT6GJ+c8s+jD+Hq+ifs
jsoR6ZtS
Name: res/ej.xml
SHA-384-Digest: O8fSx7s/qrQfriote4OhMR9Pl/6cLlw6POD0DFqXaqxVaz0hAoTShGXr
d+VcV8xH
Name: res/jS.9.png
SHA-384-Digest: xLXYmQU9/B/GjycWsZpdYxnjdz+NCePGwpgwFQ8gJE0frGxOpwNfp6nZ
EcrKVwCc
Name: res/6Q.xml
SHA-384-Digest: no0nNL/fQnceDCisUceJzBxii8Ah+nMkKyXtNr2TIqfNW7gMGZ9gnUJn
HOqzeYrC
Name: res/r2.xml
SHA-384-Digest: fsJM0DF8pPCTA6YkBL3unbmcoWyOnH1etJjvbKQ04198WRi+O0qxZC9p
nGtE4Gzu
Name: res/OD.xml
SHA-384-Digest: 8iNXVyOf4UNlWv2Nog+CCc9X4cMGe4s2ciKZFA47ahMpgcqauoGmvOBz
3dCJyJKI
Name: res/am.png
SHA-384-Digest: ZztAmq0S64scRq7lgDzu10DJEmSs4Ee7mzSnw/Xyt9gSuJp7UFY3k849
LY0nKeBy
Name: res/yW.xml
SHA-384-Digest: YIhvcj/YuH5FYYGQV9Qo60dF/Xpnlw6qrYlcPSZQ6nBa5t3i6FGTjSkI
Ww1Qpglz
Name: org/eclipse/jetty/server/jmx/Server-mbean.properties
SHA-384-Digest: +otYDh+ipBi+66uE6tHoO/L6SASFmSbIfJn/eXU6iNKzYT9dEDFIp9ED
Qg9WjXmz
Name: res/1I.9.png
SHA-384-Digest: N4dm0HQgAfNtvI84X5y7WuOrfgLOVNU6Ksq2aDVsU3a631fA03wnPeH0
66/m0l+s
Name: res/PX.xml
SHA-384-Digest: 7rSehPSLe4wa17Cso7Ls04dnEDw6NmbW3OwLOQNUIXE/RffjVnwDCRAj
pyvmvtD1
Name: res/color/design_error.xml
SHA-384-Digest: eBoYAU+4fQpV5fDoQP0jpkHO4E1Y/sYUHxv3jBoxQdyigtvD6Ea00hh7
CKapEHjZ
Name: res/nW.xml
SHA-384-Digest: Ai5qnK6mYzwaHlsVTDP2KLtWh/aZ3+amcwI3s2SHy1q8/3S2AmqZesGw
eyD2pUU6
Name: res/I3.xml
SHA-384-Digest: BmXRBDrX5ugujpMhoF/ql7AKxvjRaEY7avbQ/0jSnucFJOGxVjhavYM2
mIpy0xB4
Name: res/Y3.webp
SHA-384-Digest: PhwzK6ITtggp9IgyuD5rxyoAzpZEGz3WyqcFnfZRrNCKJhrkw3D1QKF2
3nIpFVxv
Name: classes4.dex
SHA-384-Digest: A3QI/aOWxp9D1Dh4/wLQBy2BMNeKGb+mHAHCTkiqoFWJFO/zMapb5yv2
PBqtpGiQ
Name: res/z-.png
SHA-384-Digest: sydD0tUuy+dXyE2ob3N84GLS2Ry2hAJZnY86Woil0Gtx2PhpmcxsXB4A
OFZTSbB9
Name: org/eclipse/jetty/servlet/jmx/ServletMapping-mbean.properties
SHA-384-Digest: h8Zef6V9LA3ArtEXM0mTdQAi5n1Gl5sA5klnEUDqA2XupjBxc7FlrUju
2WlH6i45
Name: res/BG.9.png
SHA-384-Digest: vOyGqXu6t3b61r/EiVwpteTXDnGOff5Imf1VDrSLb8xzVbDPN3Q+OeQ6
/hYpenDM
Name: org/seamless/swing/logging/img/copyclipboard.png
SHA-384-Digest: /YO+oecgTyW9vadyc68upsmPDJG6/9pATZG8KTIK2Q6B+cgKjXiKIfvE
9eEFcmjJ
Name: res/-7.xml
SHA-384-Digest: 68g6FAjS1GonrRxOnTwQA0ydahGzKJCJzHi54d4VrA55ggRXfoWGnpWk
QZWoIA6k
Name: res/h7.9.png
SHA-384-Digest: GrolqyQRU8MlxS0AhahO91YGLuaDhxe8YCn3dKhqBuXLH51hyjTvgfDf
Px/7qaAI
Name: res/Yc.xml
SHA-384-Digest: riY7i9nq0JPfRqafLUbMf2QLP0dvsOPcOzEDUQsPIe6ZswIFEva+dBX6
h1TrBNCV
Name: res/ZD.xml
SHA-384-Digest: lPsS9fi2Xha++ZwBCS/Nw7mpbGlUrXxtjZ4t03vND4hnlF+kwgsdURaJ
hn+0Obi6
Name: res/iO.png
SHA-384-Digest: 6J38quWjrp7tu3/+kGl+00HpAzRslZN5HxFGtFReullkROqmpNbEnsKJ
G8x3ZauF
Name: res/mm.9.png
SHA-384-Digest: KDHJeGAT/E5o5Zt/JALkhwWZYmDtGxxBjMpMYgQRShT2s11RAsmk1sV5
NDCpaMI1
Name: META-INF/androidx.activity_activity.version
SHA-384-Digest: GAUzqROBqSNEOdKTgEYNH9FtP3gEM37QyKL0uj7CnogPXyqU/2ZCmyPZ
OeyGd7Kx
Name: res/o-.png
SHA-384-Digest: h6i2zRQXyiGrAu5TgTaMXgQOYdybRcAnLEsCK7aw2bInkmtm42YWn/KC
R1jJVAX5
Name: res/8j.xml
SHA-384-Digest: XAA5a7LJMHzgrH2f6UAao/6vSKxFrtmG8riWU/4spQzLuGWkc3hgDZOQ
r4kgg+kb
Name: res/color/m3_card_ripple_color.xml
SHA-384-Digest: nignLKrB2vyDjiUxkU7FPjbNvKESyBosb+5GJPF96VLOJEepfVIJ/+3y
9jyWLNlQ
Name: res/qU.png
SHA-384-Digest: Fz/zZ+9mX/3S6c4CGSmjrho8AKren1RY8tXl5+9J34x7X1cWwmgrV0eJ
Mqc8bV/q
Name: org/eclipse/jetty/server/handler/jmx/StatisticsHandler-mbean.prope
rties
SHA-384-Digest: xmIUW1P2T+KgsuOaGEitU03nTCySeQWnIErFRTtwA4R14LtQZvAgPdpJ
65Ka25qM
Name: res/HC.xml
SHA-384-Digest: J0RMBATR7KIXCRINtgFt1ipwhJzJEtf12Nhq2sAkuV97querK8Qdz2XQ
8RqIifVz
Name: res/hP1.xml
SHA-384-Digest: R52InEuA9XvAaY+Ea8iKuS9fm5Ymmh1TA8q+3TpAbIHu/TyKSUFP6L1e
ztfO2zgO
Name: res/7i.png
SHA-384-Digest: 5MCqNCKOeC59rlNzOJVsmdh0dtUdr9Yng3tAtXja2b2M2tt3R0BWPdtd
FZZz6YFn
Name: res/color/m3_dark_default_color_primary_text.xml
SHA-384-Digest: qPueOlWtmoGxaYh7MIqSFl1j6HKVzkBibSiD8SLpVzT5emRAEuguTcgz
L091HP10
Name: res/Oh.xml
SHA-384-Digest: P5QW9+fu66NCVS8ZWDv2cKOWiBJVRwj3/scQ3knzmDVEw0GPDBByFFyY
/+0RiKkX
Name: res/td.png
SHA-384-Digest: Iu6bxT3nx+aT6WxkHdmjf3mVAzE1w845r9RfJZy405YHqQQ4KhhLC6TJ
WeyCE7h3
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant24.xml
SHA-384-Digest: 94fcwkT8obJKw9fS+Rn2k0rA9tgtfP6zJDZZ6bS5UE5N9Ux8rTcFZ8GG
t9IdZ37k
Name: res/DS.xml
SHA-384-Digest: 0snZ9vKD0mb30ICkhzdni9SXm9FYDVSyqUoK026s516lKLNDBwYwQiO9
I+L2c3sU
Name: res/np.png
SHA-384-Digest: IdmPK6h99jD2CDHH68FL845mUxqK5QqjzOOMSn/Jq97pNaStpc0q/L9s
ocDUoFry
Name: res/Zl.png
SHA-384-Digest: HPP/U0YFc5YJooj777FQ+oeNJ/637Gtw9X1FAvFavy7t8na8Ps+tgGNe
ow6+Y+4i
Name: res/do.png
SHA-384-Digest: 1hcg6+NassUaYEG8AspaqrTLLne1Vw1NlrMoCkA78wIkdXwVYafdG14+
SMi3uNGR
Name: res/2n.xml
SHA-384-Digest: HheL6yHO4bGvejqa54UWsGE7xvr1ITG4/QrkMBs9uiY1xj//2Mudg85h
cijqJKzY
Name: res/color-v31/m3_dynamic_highlighted_text.xml
SHA-384-Digest: aO6QKy5iliRw/iELo3f0BovG8nhyYxE4AOYN1s2a1dOIJ99zgQSt+QSo
+r1y6pPl
Name: META-INF/services/javax.script.ScriptEngineFactory
SHA-384-Digest: E2xSOQUho8OXNU2x7fYtWlCrStjZSae2njau6GXa33bL/JVvo9mrHy9R
YRMQMGlt
Name: res/TH.xml
SHA-384-Digest: p0KeAxa2m600nZuAppt1RTtH9ZXPLUUYqSOHwOqRwRVek/LoO2bAFEO7
dtDqqGZI
Name: org/eclipse/jetty/server/session/jmx/AbstractSessionManager-mbean.
properties
SHA-384-Digest: f9a4CzUeIwClEGm6hmVQqLRSF8LQKUo9uY0pmUw6k+WmYuZPlu6u6+vQ
RW6hp5d0
Name: res/fu.xml
SHA-384-Digest: ZQGtmO/8csMHJzcG4DRi4ivBb6DrctIORuwKowN8GCVJdHh/fYGkF2so
O1u7zF/t
Name: res/_P.xml
SHA-384-Digest: bZMcPCwIzmiIKjZMEyieZLJYxs9hTJja/9pAJI95JZSb+hgprDpQc5Gv
HsXpzaJS
Name: res/nI.9.png
SHA-384-Digest: Y3kdCKGKYPggfIyBjLPNsEL5/MeTKlLzib2vsoRYhK7P6jJ/6I4ZtXaH
M/UK7g2f
Name: res/color/m3_assist_chip_stroke_color.xml
SHA-384-Digest: 7e7q8xCzKKh4XPuDWIFI+dRkqfPKadJ6YQREhdqKYK4bj/uV2dpLv3s2
9T9ygGWk
Name: res/YI.png
SHA-384-Digest: WeHdQpDUkKNDw7SED691wHkcY0eECmSofF7Pg6mHn57e5lPnBu9K7YPg
+WwaV0np
Name: res/Pb.png
SHA-384-Digest: E8qgI//n1u/CTx5MaoN4JO+y6N6S03xCdNjb89wl2JGLARoQ/KdXFnVM
Xu5ItNb8
Name: res/vH.xml
SHA-384-Digest: /rey/FsBEyFWJda6pl5jRo0WPKn/7d+s/vsQAb48jtpuJbxiLE5pROQv
jmGqBCNq
Name: res/xR.9.png
SHA-384-Digest: BZqYwOOJ+HpY87MG1ekiidzC6QBR1tGSii6j3twEG84LpXa1p/mNxDCa
Xy8TxLWv
Name: res/rm.xml
SHA-384-Digest: Qltu5c06zjLEe/6Ys/gtGLXm9LiOXcRLyvnFvyVoaQ/FPCemAilsZvDp
i5VwDVqS
Name: res/Tn.xml
SHA-384-Digest: sVoz92HUrs00cI4fgXFkQiVP0FX321vBTS7xAuAFRGW1HMJsAT2CjalG
22ebz7nm
Name: res/UO.xml
SHA-384-Digest: EpC+3G6VpKub2ZbNi46X6XEoQ371QlKP6YlqHyFyme+/Im9RvwwkSosx
axwqv0eO
Name: res/gE.png
SHA-384-Digest: iWSZiPL/E+x2tm4oJaTq0SLZbBYj8RTRXi7PHTrmMH+wFOTYsN96GWhh
PpGVRN1S
Name: META-INF/androidx.profileinstaller_profileinstaller.version
SHA-384-Digest: P7PmzhZ8RItkxD31oFb/94LYLyWWoVAzFfwhMFNWhIBxHCCJJkR/UaVu
etA/VFdg
Name: res/7o.png
SHA-384-Digest: vr/EGSGlDE7tE0PZuNHYRHfP5B2mmk9uw6Qe6C3XGgk9ZkgGw4ESrZQ1
vWr1li0z
Name: res/8P.png
SHA-384-Digest: DWRoKEQTMIGQLY0l4fte8lxbO2xSq1ySt+fClZ87hognwMrgmf/7+V8J
nBTlRd5+
Name: res/color/design_box_stroke_color.xml
SHA-384-Digest: YGOP1FSZ9rfKr3bWc5ADc60veW1722RKmaIhP/CAtit0lfNbxFFDw7MY
J4RNmn02
Name: META-INF/androidx.databinding_viewbinding.version
SHA-384-Digest: JL5FDdf5FlA2LIe7bfx+vvLeaFni4rGviy8ZHUQsbozFJZzd/O4TfLdU
Aya8Shl3
Name: res/4z.xml
SHA-384-Digest: b+4Y8W/fv1btY6J3d8SQUlQV31JXazKZdP8U2ob0ROp/wsVThv8O60dK
2gKVy2HB
Name: res/kp.png
SHA-384-Digest: 8PtWv/V7slu48av6AG90Six7hNsper/kZLe8kukEEOdirqNJR+N80xm/
zJqocs5P
Name: res/Eg.xml
SHA-384-Digest: f3FQjFioH06Vos/MartQp3m+2bVeWMPRUusnxXc3ekkgPaUdL/Pn81Hz
tsbUy6fa
Name: res/Mq.png
SHA-384-Digest: jUsdDA7TkGoeCe1Tj/vSA6Ib9S92vjdQYIqf25rUkhf86EdPR4SIjIJn
ukdsw+El
Name: res/ya.png
SHA-384-Digest: lCuyflhb2WupPjEsc1x+BevEFqvsy/hpjskVg0eW3fJrQrixWv58bFAn
Ytky25xB
Name: res/zB.png
SHA-384-Digest: 8Y5A8CIXDLyng9UABBh8+M0U9r1Hp86mu6iKA1rKhA5LrnYubGEiPdAF
EcAbjwms
Name: javax/servlet/LocalStrings.properties
SHA-384-Digest: JwmvqB2OuQhvjkYmECAlPPojI7qF6qH7RzealBsgOjr3TdPeu2BxjzE3
riVn7f4l
Name: res/color/material_on_surface_stroke.xml
SHA-384-Digest: QQaxaquMqQRDqmIUpIX6qEnzf78VbWSsXv/V7V+IYExuP4b8WyVIYWa3
SVGbX+2q
Name: res/VT.xml
SHA-384-Digest: isQS5auzDqo1g07ahR5Th2G2ng50r8XJXoAnGCFnFU9I11ByiNCyivgk
t6obIo9Y
Name: res/NN.xml
SHA-384-Digest: DLj8o6fD5BXk+sAdGD99UklbTHKP910yKV76aOlwG3sjXYx9iSXS9CDk
lyIjaKYq
Name: res/6d.png
SHA-384-Digest: 85nqfnR9nymKEaE3LPp85rWYafpon575wUekktXbx7H6rPRyCawKdGHR
pDH3Audy
Name: res/7E.png
SHA-384-Digest: HTGk69DlbQzaAhWFf1YluLKRo5peTkHZnLcSeGcTWgowPn5eZD1MVfY7
14MXoCcY
Name: META-INF/androidx.interpolator_interpolator.version
SHA-384-Digest: Y3rGBi6XAW/5GC4bIZyUKaf7kUBkQnImZdlmfb1WeNkFlHnjtxck6HqB
w2ok7ALQ
Name: res/color/mtrl_outlined_stroke_color.xml
SHA-384-Digest: xIN7lobzcPAoILNwlq0EdI5rFK0jpMn23aHkKLNXtqBlRFCfC6yKaM0l
2lxxfhu8
Name: res/vl.xml
SHA-384-Digest: iU3EdrlYux/9dKozhgaCY2W9hOroJBv6stLI/yGgYB36IUTIBEv/9hKu
Lx8EcZEE
Name: res/py.9.png
SHA-384-Digest: yI51a33VvgIiJHETBbAqUoZ+ZBk6OVxSR0+I8acdrqRQ1CM3rwmwTkV+
g1UxdtNV
Name: res/as.png
SHA-384-Digest: bg5pTRurRAX3CSyvd6Qyu1Vl9uv4EKC8Gc0BEkPYmQIhXOG8YWZ0ujLd
AZok9he0
Name: res/-1.xml
SHA-384-Digest: blqMG8cgJoAt9lINeLx2uWeBOFbbxjOA6RxfCL2lD2A2aPqoczJXTLcy
dBM4DRI5
Name: res/KT.xml
SHA-384-Digest: RDvryT2Fxn7JXglR8aCQEtuEcPlashsYFG79ELrY1s1qxsz422yW6opH
gZGjKn2p
Name: res/rz.xml
SHA-384-Digest: A3HGWQwWg5dAM95fScjeSySHsPTt63mU8ZAOgUzAZdayE/rzQ2a4Agmw
R5glldLV
Name: res/kL.png
SHA-384-Digest: lcMlu8xM1HbVl/OL0c25HKmzcsOPFV2OCEyruNsAnFomqY1VEK0gNQSU
fPey+lPP
Name: res/color-night-v8/material_timepicker_clockface.xml
SHA-384-Digest: oFTfmKGjDFvAzR8vm2Y0Ns3XcTR4leLo+6yXCnGsDTjfjmvOti0kBpzC
XLz3JnM6
Name: res/5T1.xml
SHA-384-Digest: U/9BvVIgWH2lZv0oCVKM+lvn89fFqwJRobrzk3nMhZqTOV0beuhzGwVr
W+IoT6w1
Name: META-INF/com/android/build/gradle/app-metadata.properties
SHA-384-Digest: 4BxvuT+9Ja228Jy5CsCTEBTyvwsygj4VbPV8jciLdVFvjg19UhCMhTyT
cdfrK+tP
Name: res/35.png
SHA-384-Digest: HpYdt/Yte6gbgseUy3Bdwz3XEh9fqd34ImT6cyULnOK2HzSm7zmZxfCm
SNvZ/r3v
Name: res/rI.xml
SHA-384-Digest: 9WEdrn1qu8GYXQhusK9NFqrDTS+Jsu1d1LzLKCvmMtpXRbPHu7wCVcKo
Cu+4mbmd
Name: META-INF/androidx.lifecycle_lifecycle-viewmodel.version
SHA-384-Digest: 6/ZbxWLH/SBCMX5Rq6/U9d/IsQt+rYw1pg8pTLiLxEY4A3aFaNca83Ph
64apomWE
Name: res/color/material_slider_halo_color.xml
SHA-384-Digest: TzX6Jg2Yd3PpWyJ2/JFpAGa+gyeKzQZZQBBywCO3jMnQwYkCJnF4Ot7I
SarmCcBk
Name: res/ge.xml
SHA-384-Digest: xWmifnmXNWIvgnH70/XpfhyQpK6zDGsNsEEnFehzp3TuxtYpygCsQsww
9peE7Z0g
Name: res/io.xml
SHA-384-Digest: AQDQbOV67PRWu6BNK5ZgUbTU2W2yE87xRbqUbgj3erEOa337ENfigbum
HzdOPaD+
Name: assets/shaders/fragment_shader_hsl_es2.glsl
SHA-384-Digest: IMJjrTFGtbAoXtyroOKcKhFU1jeiO9+Sv0neui5SMm3p69047e4xuEGw
PCau5ylj
Name: res/color/material_cursor_color.xml
SHA-384-Digest: SYJQcJW1n6snxCH1pfSPnJS6iClnEggqtrAmLGDiUA3v7Duq3V/9IwHW
X4Rbm1ro
Name: res/0n.png
SHA-384-Digest: 1Rz32E4inL8A6GIlcx/Vk355dN/W/vwh3KzHgjsg91BMYx0gDIvv9/vy
jwwZVZkO
Name: res/5D.9.png
SHA-384-Digest: XggJxokx/UetdePIxBZSsetbxYbP71HvCwp0plHpjUysXQIn4+O9B1gU
qZ4y+55s
Name: res/Qt.xml
SHA-384-Digest: hgN/yQL7LaMfzonM1NsPl/2XFwezyVmDedoSt7mabuZI2LoPsz9Yo1OZ
lTPPImIh
Name: res/S6.xml
SHA-384-Digest: HlBXKy+tRJPsRzLgezd9s4WkO1eQimLbD0pfBxi4zja148Svl2O8daii
yTubj4Fa
Name: res/In.xml
SHA-384-Digest: XnVzdMDqjudyJccVVIyQ/SM0XBdF3W+wH+XOdRs4QDy4bmQRtEsPcDUa
87EoXMSC
Name: res/tS.xml
SHA-384-Digest: cld5jKfjmB7Ax0Ub/Gj40JoExFKX3M2Fe801XhyPB4K57l3EQJm3S8oH
ZA7CF9VT
Name: res/e_.png
SHA-384-Digest: U0TikzXaJmPvs1sLWNdmS7mMIop2zC5wU5hhs3Ses79X8ND/i5hi6Q16
j5I2Kce4
Name: res/3h1.xml
SHA-384-Digest: qNrJZU4/t3frzVnzHXfAn36VCGhx4stoKxBDtf7/f0iu7IFpGTFmJHPa
feV1dZgJ
Name: res/4I1.xml
SHA-384-Digest: P7nniohIPoscfk3dPOm55iGrNPwlSEpLEUsz3qWia/705wm1hlUTHAlu
P6rmyo+J
Name: lib/arm64-v8a/libavif_android.so
SHA-384-Digest: FmAKaKFgYdUwCr2zGW5burQ+PyLCiExxHoFrEVKAOxnf8JRvRV4YxxD4
HKndhiI6
Name: res/7o.9.png
SHA-384-Digest: bAJzSpc6ew2tRXqJNC6HHrNyNB8dmL8UnGtALWrBVoTsYW+lACyIfnXn
Oi8MOueV
Name: res/Tr.png
SHA-384-Digest: sTpZUeZHUXrU16ZLl+Eld2YD2+FClir3AvfxmwaeCagZ6ZP5F/+1tUjA
LvKj6WRh
Name: res/V4.png
SHA-384-Digest: R7rxsMFMAXMvlk0xYz78JdZIoDpA7MQlbIhumOOa8Ju3bjTu66cikiFH
nuK54RY0
Name: res/ba.xml
SHA-384-Digest: kq8MnvvXk8oIaT4YVSEcaUkMYN0eEw6LBggpqS3S5knui+lvripCjfpf
OsCytlv1
Name: res/pg.png
SHA-384-Digest: 93X7ircnZWDvFgUe/jyUK0vRsg8Jgj5duZywbGKzl+m6f3B/a3bAiOt2
lhzmXqYG
Name: res/ak.xml
SHA-384-Digest: kkhSSudzQwAyRMjGk3kNkt5M917BjzXkzD9onhrkw+es/AVP3aGRYPQF
KgpB08uq
Name: res/bL.xml
SHA-384-Digest: IHkKu/AnqZmyZUjGyaTQKXt5cBJB4rRgTTzJnNAgCDy+6Or/zBlKNL5w
slrfxtmA
Name: res/color/m3_tabs_text_color.xml
SHA-384-Digest: E0rWvj9GMON+DoMqPlcgAWiOO0ujJ0eznHuiTJwopnyauy2nhFk1K+Lw
u24QQEiO
Name: res/D-1.xml
SHA-384-Digest: hqdyX7ImYBWmYjjF6/FD7KWgMyD/QtfyE/3RKuDjd3DJC+sIire/E78A
ZkITMWl4
Name: res/mt.xml
SHA-384-Digest: BObLIyrWBXGDvC675jI6k9u7aRS7uOm64Dc5KdSd6JsHvIVhhfpktwr1
DQ6tUFrh
Name: res/gX.png
SHA-384-Digest: XkERqurKNIyGzjHyztvc5nc+mU3tcKGSHnQU2wB1FAjeOQhOpEA5zqY8
2FF5WjTP
Name: res/qw.xml
SHA-384-Digest: RH3ELUBI5NtOhDpIk9XUIZ4TD6BbKntwM5WeeiDdqvtJAWK41c7o05G6
95xkV3/N
Name: kotlin/internal/internal.kotlin_builtins
SHA-384-Digest: V4E/ddV/uwTGbBWUdI2xiNHGyMqerrWNlE+rWLDwMF8l9WeL7uXeiusr
PtOZ7+dQ
Name: res/-D.xml
SHA-384-Digest: a4LwZ9jkgtWDjdrlKVMVgUGjTgpog3W1+l/+xd1P2LysV8rGPVA17InX
xgWvzLJ+
Name: res/color/abc_btn_colored_text_material.xml
SHA-384-Digest: gq0uCw3r6HL38KxnusB9hXv1x9ijOcUGcfAX9kythhGjTEsEb2oNLbps
jI4aRlge
Name: res/2P.png
SHA-384-Digest: IlN0jgbCMECXaY/6+J8N2M7IqSU/7AmeM7D9wcfcOMeldx1N4zMD+d4K
6aptQMgz
Name: res/color/mtrl_btn_text_btn_ripple_color.xml
SHA-384-Digest: gCc2MFaoKDgWbpoGZZN+F1VaAAMr0L2hGNMU/BHVbyjwjFbCcwfjQoBO
QZaytJ7Q
Name: res/Sq.png
SHA-384-Digest: yXDz72AASy5MpFgMeyymr2gQ2kAiyTfVt1RPZNHGd9bH3WaTjr/+vlii
i8zLe1PG
Name: res/SJ1.png
SHA-384-Digest: Bav08UvOVRY+YN1heckVx/pIK53kF5q6Oc1iA4VC9UUNzVYCH7wZYEMY
NS4lHqpB
Name: res/color-night-v8/nav.xml
SHA-384-Digest: gSiYnG8MFZa+/eR4gp98rOx0e0JOKr3/iQNeypJ1uTFaCh/gQLy+GVns
cNZMKUyB
Name: classes2.dex
SHA-384-Digest: 1iPfGzAgMs9OFFbpVdOz0ehSBxxcGdWu+cxtbLUIl8mV8JntJwjBA3nB
ToCwORkP
Name: res/bA.png
SHA-384-Digest: lj6zNAG/f9aOKUsV3h8C2mgeOt74Ynd6rsVIoxXNohlp03kMuft2axxv
9aO+PjF2
Name: res/color/material_timepicker_button_stroke.xml
SHA-384-Digest: 41lgxZXOpQko2x8HdYY8HThT3QJCVPnwx1tOEmfcylgiLxkVhgC9Xg86
XfW22pu6
Name: res/DQ.xml
SHA-384-Digest: EOnedGLOR3ywAfviA+poKRrJCwtEaMG2IJTNnPyQqcBD8HvGdrJQ2YC7
PJN8mCRj
Name: res/1K.png
SHA-384-Digest: C+Hkj2IP/ZwYhbwYAG2RIdNvzkvzQSutQkoPZALEbVPPObBqJzR8M9ZX
dHqX4/FL
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant22.xml
SHA-384-Digest: dve/noeM1123blSR82by/tBFwSKQSCwekalQ2iyTeepNaCD3KRQn2NU+
QuQYMisV
Name: org/eclipse/jetty/http/mime.properties
SHA-384-Digest: xjOLYaJGSTOEinsr8GM2hbokAAyu9xbVnepVbNrxgDDhsGzxGfxUWbAV
OdDHZxb3
Name: res/uG.png
SHA-384-Digest: 9xYV4q17e+I53SGSv9qzp6zAFN+Hg7Ws3EuibJHYSdKtFfLfgGCmBrNV
bsqLmNz2
Name: res/MQ.png
SHA-384-Digest: X35ggX8nfQyJjFeo/BEc58z/Rm2zB3ibPEu1uTq/IeUHJGr6Df5w5ya/
q4BEQ1Ea
Name: META-INF/androidx.loader_loader.version
SHA-384-Digest: 3FVKjjKI0+5vNFqCn7e/gbN2NNbN7Evx6sKWCA/NHoGQzrQcTJH44GQF
vh0zCyd+
Name: res/5c.png
SHA-384-Digest: u4jWVofeerYqq44Lr7q4XZAGotaNRzzjUdvSYiqTP16OGT8IImCFWE8I
dTuypovb
Name: res/color/m3_navigation_rail_item_with_indicator_icon_tint.xml
SHA-384-Digest: YKl6NYraAjC4Nf9zPS1bOrT3ZbB3QlDR6CXOzQwx9P23i5zPOAZmbNDR
3J73vUXe
Name: res/BM.png
SHA-384-Digest: Ub53axTxtcG2cJwIorEiEppUPw1IcVCxEtc+DFjMzbwE7aeB6uI9OmsW
cCJVNv0T
Name: res/mT.png
SHA-384-Digest: LfpV6f4edILN0u4nU/0VP906H7M4+t+iosVli6l9kAio1lIPK5B2Qt1w
BV9hHiwZ
Name: res/TJ.xml
SHA-384-Digest: 8Zv13ZdKlu9FfUiIJG+iKal+USGDBn7VawZIJkG4Hh1bkJjS46c0HGRl
8CdRMdzD
Name: res/color/m3_elevated_chip_background_color.xml
SHA-384-Digest: 0JUXkSTIHg8DvY9077t950hgpHLATVO4g7EP04VG8lVSYxfm8ZGe6qMZ
G7kD40fR
Name: res/ps.9.png
SHA-384-Digest: hWFn66ENn37HROlGhd6MAchdQzU2Q6F2LrHsWOJIhNXy4XK32k5Emk0m
PYNGkkTN
Name: res/d2.xml
SHA-384-Digest: AcrOw6S/WxrnDu8m5KAtfp1d34iab/T1WqNTmEs5IbOJUOCt0Pp54qy+
gdz4MI67
Name: res/Ir.png
SHA-384-Digest: V4CeFo29P8w3GV2Wy+5RHhQPi4x/VSMegX3x+0/77oiZKW1RJZrpocvq
7KJrCAR7
Name: res/JS.png
SHA-384-Digest: 6YzJuCwcLWoY3HiSLmZ/DaRExwL6eIDDBSDpyiYWur8fdgjvO4aLcwVa
EKNUfoSf
Name: res/Mu.png
SHA-384-Digest: hVPY+KmyW8M3cH09IP7HZbs6GJhyTLA+DD6hq/0YjC0PUDnq0nAfyLG6
CZ1ujFGr
Name: res/Qc.png
SHA-384-Digest: USW01KAEcIxASMDhAhLB5dGl4noqmYn4IKch7MRYFpS/EoFaZNDExvW9
MjETDmzd
Name: res/nY.png
SHA-384-Digest: uvfRBGgfXGEuO8PqpfijWWve50dJThJwg+bLsaJVVgxffZfkjjPmj2XS
d2rlowZm
Name: res/WH.xml
SHA-384-Digest: /htTVQxlpsRhwEsKkn5FDQ8TY54Ah69EQ+hRXrWCY1f+ZrefYJ3o+qkv
cUc8TJv8
Name: res/HX.png
SHA-384-Digest: gbQN/iJ5+6gmr/3b5Pwc76kInyLqToo+NRnIhm++iDSI7B7nD3AF5tsz
0HacnJ/Z
Name: res/Qt1.xml
SHA-384-Digest: REMBnTYJ3qU2nQe3yn/NFWzKYtqd+ONAmMXiGam8BbbGMJX/QUPZMNIY
LA+b2Iu1
Name: res/color/m3_timepicker_time_input_stroke_color.xml
SHA-384-Digest: zcrE/Q3grFZIQWV9dS7lgPPEVgjOKRCMHa8dpxmjehPpb3yzq3FAyYjM
+2cX0uGU
Name: res/color/m3_chip_text_color.xml
SHA-384-Digest: eFLpa2jwAYYSGcPj/cldJwfw/HRUOdCy+CCBNFqFawQ6VGt8cSUxv1p1
NwjrRcFl
Name: res/color/mtrl_fab_ripple_color.xml
SHA-384-Digest: 8nYCjnttq3EEbbBKKqG6uz9IdU6prR4an9lb3B9MbPkbmZyu5P7s5I1R
Mnrfgeov
Name: assets/js/lib/similarity.js
SHA-384-Digest: ivf4Ko9W4Vmm3RBBKeH67zhCLJlkmyEJbOqI3oysJ4scbdFedodTVaMb
I9JWmWM4
Name: res/color/material_slider_thumb_color.xml
SHA-384-Digest: ZfoM5bbFHQbOgBfGKnF1Ajc5hdUhqk3G4QcP0WGRbn44ZsRtBHL/ObTl
+1JIYJCy
Name: kotlin/ranges/ranges.kotlin_builtins
SHA-384-Digest: ozNqkNPNooivSbSAAg88ciEosWvTQ5Ill1LhO9mRJpDD5drjBGNo4D8q
5h3700sR
Name: res/e7.xml
SHA-384-Digest: nO0PgogfaL2wNcFM4gmUVpltE3yL/irSBeqrn4FUL/vzIHllFQHNi8uQ
CbxZURnE
Name: res/color/material_personalized__highlighted_text_inverse.xml
SHA-384-Digest: im+A0u1qePntbfclJzDEAeQUWeeu0osftExY71v9Wh4K54k9Dyot1Osz
yHRR3sFf
Name: res/NP.xml
SHA-384-Digest: El5Gt49cBzeAAfTcz0yFArAxWqJ5JuoaXDgcv/stVNWv22IArUQQzDCA
T8dNNk41
Name: META-INF/androidx/room/room-common/LICENSE.txt
SHA-384-Digest: nWi/9WgpBxubU1ELDgCyHd2/z06F1guukclvhIuyxwhVuJTe/GuZdHTm
1yti5fie
Name: res/Bo.png
SHA-384-Digest: xfI2VfmQEr2gbYv3a5NAcZR8UccH4+DWTtkKY1QRDreGMgMRKHXMnELW
ywY+JncX
Name: org/bouncycastle/pqc/crypto/picnic/lowmcL1.bin.properties
SHA-384-Digest: ntU/2KuqqZsDkmri/pNQMIIiDocnYPMuscCNsdkZLbVmiKo0bX+bTCrU
LT7/oiSE
Name: assets/shaders/vertex_shader_transformation_es2.glsl
SHA-384-Digest: 6nZ/ZQZ2Hf7msOEfNJmHGn+c+dkqVJzO3kdb/dspwF7rhUDcJgChKQ0U
8bUwGktC
Name: res/sL.xml
SHA-384-Digest: OlGIeNzEyA86x3X7fvpoa4v0/dSDogfqYbpToNRBGeL/ns3gJs2kKjLH
qw8du3Yx
Name: res/gC.xml
SHA-384-Digest: XxneGLYt6nvT/qmjqvsILBkf9eaCcu5cZTsN5TUwfDGR79yiQfHVgGeq
LLojSip7
Name: res/Nx.png
SHA-384-Digest: 8xYnLDW2/bChPHQw8Q3Ds08oBqgbUYfb/+2/XtEDHtNT/CUeDxTdtkbr
A6CdMyij
Name: org/seamless/swing/logging/img/configure.png
SHA-384-Digest: gboPLyYH+IZ9yFFOtpIRuT/RD+V03B47hsTALvfkq3zPnpt2z4nhG4Ij
ClM3UT37
Name: res/JQ.png
SHA-384-Digest: 7d7EKtEPdePPZXBadXNfa0TWIA0bO8IasS5QuGwRDuds4AMPWMPV5Jm4
1MYOvMuF
Name: res/Xs.xml
SHA-384-Digest: /uvDgibr4nJGSrDaA6zmJKIOM13U2rgaWkwZUfMDiYxaDw2x+0TfTuK1
8KQN0lbT
Name: res/Em.png
SHA-384-Digest: iIMIKuMhNf7WaquQGCA2DEB5L+AcA4zgqpjCS+M6m8j2Dept/F1fpbkZ
QKTk3HjD
Name: res/vJ.xml
SHA-384-Digest: QBVPLAG8+781QYuVM+Sc5La7PMS0t/k4BBlJPHQcKMW04YTFImHO+hz0
iK43o+vf
Name: res/Lj.xml
SHA-384-Digest: nS4GyaWLi7ykOo28cTavlGwFb4pftWJduXz3pgrPgFBPFFB0wXhwQtoZ
kiBkLc01
Name: org/eclipse/jetty/servlet/jmx/Holder-mbean.properties
SHA-384-Digest: uQPz05ZSqNXOdJKbU3JD02g80BBK7asi3cipuZo5mMhSYV9M6/w4IO0e
6R5iTTkR
Name: res/QN.xml
SHA-384-Digest: 3vqkuvwFxTeT7HEjdjT/mzHA6FXXMZKoCf4bt0dWnyMWtX4IfouNYUo2
kYGK+bLT
Name: res/7m.png
SHA-384-Digest: fZFxudy01lLBj3i+85UCLry5IjjQB186w0StKSQdY8Z+lPuJnHRpDgiM
zhkZ1UMs
Name: res/8N.png
SHA-384-Digest: KVSY2BTM+lOa06UOiK5CCgV9duDxenCXlF4CS+Xpdk15lhcBLFUYtz3u
ecmyoYsh
Name: res/color/mtrl_card_view_foreground.xml
SHA-384-Digest: WY8Lx3ocIzpYcb1x7jl6HSwiQfAx/sj/KG3Jm2yHs8VVPDGBoWgIdxLT
IGsdyww2
Name: res/zq.xml
SHA-384-Digest: 55Xr3VGJAqFDVZAGpkuZwYm5oV7FojVtBUWMaUWz2Lw8gsRBjBuRKFiz
mbR8PWV7
Name: res/0H.png
SHA-384-Digest: 3rwatU4H7Idlf8b8md6HxynHSLXhKr1Nps4sn66I/v5RDxljsPJf0wZh
5r5zBto+
Name: res/m0.png
SHA-384-Digest: mjgFzZY0X6rC7aoInFbqZYUXXyfnhzYwLNJewPJXEDrXhJ4rD3zYvPHi
aH3BKb6m
Name: META-INF/androidx.sqlite_sqlite.version
SHA-384-Digest: jtSk/Otl8g8HbDsV26HauAY6CfpKUS0i0HmAJ4m92qBuHpvAQcRKTqr0
sL0OopQn
Name: res/color/m3_calendar_item_disabled_text.xml
SHA-384-Digest: kgjRiSgzoI+zK1Fkpz70+M5vbCjtfG/YIzl1Hym300xO39PaDEOnHtJt
iDlAbdLH
Name: org/eclipse/jetty/server/jmx/Handler-mbean.properties
SHA-384-Digest: yjktctPxZ3A3DJ/Lthbmvs/0CJl02O6r9E1+zlZZYugDMpeNZYigub/6
Yqs0zvyJ
Name: res/5P.png
SHA-384-Digest: /M4nOH2PyFyOcpjTbJBZBs9PUGBCFsUYts2SMgvHSXIwTjH2WzOwMbOp
0yBXgWSW
Name: res/-3.xml
SHA-384-Digest: xHEiaw/qB2ryt89TX/wnR3BgkHoddkMpGKTIaXRTEq/sI2JQKgAxcHok
OTzTMWkw
Name: res/OX1.png
SHA-384-Digest: +sBkFPMIK5XgSVJeCkzoqOW0VdReMpPNggLGs46sowzTp6Ew6ET1ZwXz
vyBMpHCh
Name: res/-J.png
SHA-384-Digest: b8CjvtggHDVTeAUsvr3SlxgyyWOtQ4i5NwsfqSubL3VHs56bixGoBTmV
7GSCvEnA
Name: res/59.xml
SHA-384-Digest: RR0exfu5Ny/2GY2+N8wV+noGfLZ4E78C44WVmhborGXDtFGBxZM8awrV
fG8CMoqn
Name: res/QR.png
SHA-384-Digest: wfPyM46hv7UYJ/87CMlx7Ig8Hu/d8W/DAkbDGmWkCr2K+r47MrerJ8Wf
uSrAjpl2
Name: res/AB.xml
SHA-384-Digest: 7OXnagBgCQhC/dhd7OeYSFxLItkHJaaocmcPeCS8069xcQ9lFqZDg/bu
8iQDRfAB
Name: res/BL.9.png
SHA-384-Digest: DfkETnkG7ZCj//gIsduhyKdGwCZiMYntDB2aNLigua+6x5sYGTt94m2Z
whQ8rPYc
Name: res/Bk.xml
SHA-384-Digest: qZWk28Qnojgkr75zg2hv6xJkR5cUdahYy2q/VxM4Enix/3MgFeTc4V9Q
3Y7yNCID
Name: res/D-.xml
SHA-384-Digest: uQaco2mv57lI6meg6aJy5qsEaUMJVnKZv/n/Phjux2aZ9od4imTlJGO/
kIy1bSeH
Name: res/aG.xml
SHA-384-Digest: uVMlZ+hXpER8KoGf5ZSDVVPZbRz2P2F2h23V1MAA4xUZHQU7dgdJN9a+
D5BnQuF4
Name: res/color/mtrl_choice_chip_background_color.xml
SHA-384-Digest: //OWqfuAqv+2qy4NJeHVa6/3xk+vVw/HJOLE+VfJIPq4X64UUfrPKEmn
UaEAJ/+e
Name: org/eclipse/jetty/server/handler/jmx/AbstractHandler-mbean.propert
ies
SHA-384-Digest: KCQ2klYNRNUnS3odDhN5tUpGDSVlQp04wtz5KlQTqgnVyLHscoB+RTyw
Fkl7gGfn
Name: res/5t.png
SHA-384-Digest: GoBSdbCHEiN4S+w+RahPawQtsUfDkk/Vv3u4a5SNc6ZRZYrNJ37DawdJ
t4x/66dy
Name: res/color-v31/m3_ref_palette_dynamic_neutral12.xml
SHA-384-Digest: BOVvbnBwjSBwyFD7GBZKRtHzj+2ZC/Hbp2hBt4nuHypSOQdCciiLuQ5g
WZKfiKWA
Name: res/color-v31/m3_ref_palette_dynamic_neutral98.xml
SHA-384-Digest: UpgWCcBT33XaDuGiXTjwgolrxuqb9xWjRQt3hKtQqKaRIqQ9AX8MsTUw
lY3rHRjM
Name: res/9w.png
SHA-384-Digest: 5c4ghbjRa1Qvw9cHk7iaD0WdJVwV/etjgQVIB1OxN7EYqba3/t0rHfdD
0Ak0P3XS
Name: res/yY.xml
SHA-384-Digest: KHMaf1KCeqfZW+VEGbHeKIPJZlA7HsXmC84zHLq8Tk/uoCCEFWHQsxeH
OcUnhQEN
Name: res/kj.xml
SHA-384-Digest: XydmqAp6z8k/mfPcacGTX3U+XYY5tFhJi0HK+KAfd0q7/Cafc39/2Ezt
8EFbI7eS
Name: res/Gf.png
SHA-384-Digest: uDbEnRVE4kFZKp7r6hz8puKTsMsUaigdwUaWvJ+ObBd73pvzjpEbik8Q
byI+ZJ9i
Name: res/W4.9.png
SHA-384-Digest: EdxVrJjpD4IkDRnu8LJxQ3snoaoUACTAyxhjLHFRP5B1bQ9ohKqOMj1+
60t5m7FL
Name: res/Wr.png
SHA-384-Digest: b2JjMGltLTEEKSb6uPQABv4RH47Q6rVIgCSJP+jr1j/wz0MBCoVYjH3W
29E2PvxZ
Name: res/vR.xml
SHA-384-Digest: ku/ybutiu4a4LOqwgID/18ByODDg/4FnfqmpjbsHe4SSJXjyZkzb7O1G
MhrmgUQu
Name: res/QJ.9.png
SHA-384-Digest: TajNi0oWQhlmAYPI09NNdmdw0IxIjrQnJF9H0cXVTAGEQScyWGwqzVVG
phw/GUaw
Name: res/wm.xml
SHA-384-Digest: Pswg3aP0zOxYo0JtPw1MFjfIGEjbBiwV+GkBZEdMLFk48LD9O71yMDBq
R+juYtyN
Name: res/xN.xml
SHA-384-Digest: zdIm/Jqr2wBEZ3PMejHIYVpXEYJ/8bUjmJF1L7JbHAMLM9hCe3824MKK
XDywKxpa
Name: res/X6.xml
SHA-384-Digest: ejdKw1f5EWhBaUCEcCb2HoDFELYs1EWPtefTptRy3qXLa7zwp+GKkaaa
lpmpC0J8
Name: res/gD.xml
SHA-384-Digest: lK3KTIjBjFEucJvvq45I534Qq4o3S+n+Fe++5OvwQKbQ8/hz/RqAOQTB
u94aSdFM
Name: res/-B.xml
SHA-384-Digest: AKB05SRjE1eB9Fc5pODir/8TKHeeCw9vSIA/5Bxv2QL8mpL2pa2Qt3B2
k9V/usow
Name: res/yg.9.png
SHA-384-Digest: tA2bYSBYlMEaQNwzg4CY6UvppcmOPabwZQUfOfClp+Uh06zUkdzvB8il
EcNKljau
Name: res/cL.xml
SHA-384-Digest: 1JGavcM9lDqgMH8IaPVKDFYWYkZESYNjkArtx9RzyxK0aXsFhdzhmvT+
LsqMqWRF
Name: res/d-.xml
SHA-384-Digest: GfA1iczwwMkCjKYIOdnSZrAym9LR3PoYA+W98qd4ojBxode+JUNviSsZ
NgSJPU/l
Name: res/color-v23/abc_btn_colored_text_material.xml
SHA-384-Digest: vSpsy5+SSCD8qX1VTNT1kJkssmBoOnQToeVEuiZx1O0POQ7k8GFgHWhY
4hA6ks8+
Name: res/Ib.xml
SHA-384-Digest: VB7atY1Pc7PlCus5ebBhoTZ0S95oOVVmZo94fRulH5uv0Eryo8u4y8F7
HuE2uBMJ
Name: res/JC.xml
SHA-384-Digest: gZvA2o20wrqm9reBGByyln4p/ycElbsme/0vZSFF+1mN/CofB3K1aBDK
jwdbfVKy
Name: res/Ag.png
SHA-384-Digest: 3KEh44n9+WxbCDBkQ+GFIT0sXiJEXedGp3A6nhgqXmQ4g6ftc5VtfAEx
JBet2NIl
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant12.xml
SHA-384-Digest: vG9eXcNi5XeTEp3ny68nPMV4v15CqB2Lguo9anWYu0u1LM0G3CNd3lQY
N0jpn6es
Name: res/1x.png
SHA-384-Digest: eWZyHHbDz/EEO4sVoMYYXADAGLZ41znVkQu/Dkf+8m8hXlRlVG47+bCx
0GMzycSr
Name: res/Nu.xml
SHA-384-Digest: GiIZIcpySrSHyUTmKU/Xunfm7bjnm3yDzwS8ZmEjycggp8xxXkccr+W3
eg5hcl1k
Name: res/eK1.xml
SHA-384-Digest: SSAVog/ypEUzhcQhIlngW+Gh22XPcm+l/pNjezgI+4x6YGnSAB9MiNoq
b/h+cktV
Name: res/tK.png
SHA-384-Digest: zz18+EeY73xS1pwPDiti6/eKFZtDVcP0eYiJiY5650l3fzLkV+sNBJrT
Yt5ymmjD
Name: res/color/abc_primary_text_disable_only_material_dark.xml
SHA-384-Digest: eX4xI7D24a10xohVO4x735Lz8mUzyAPC8K4B3t6fdzN+ayh1zGDyT+6v
eMu4YFTb
Name: res/Ac.xml
SHA-384-Digest: Zp3rwvuo/W08Swv8HuFcKytTZBRVFv2jp6Iu/NXebRF7bFh+P9Iagtrg
1SlrFpWg
Name: res/zN.png
SHA-384-Digest: 8jdEm/tunyKc6JcUb/k9hDsgBQBUci925NDYVkIhZs7whBHWPAEC7h+E
vnfcreQ3
Name: res/MZ.xml
SHA-384-Digest: 2/vmuWhWT8KXCAlv2gsUpw49HPIMt4nV8GxCvLQBFLlbHNq9cq678V8g
TdlmjGjp
Name: res/T3.png
SHA-384-Digest: kQEjZ/hnBtJKjnoCmBXFg2pHcncl3DQoLK97j/3MVDcTkBQzuSG7fyYe
z/3/q7V7
Name: res/gs.png
SHA-384-Digest: ZD5he/DxwbI+6pRiUEyMjLUzgvLUCts4wzbYZHuc2PV1oP+fxPJMHktE
BUXkmny2
Name: res/s0.png
SHA-384-Digest: 8mrNJDy2uw5Xns+Q56VnyZyMPB5Rh9I+dczH3p7EtbHIh6SLcIF4d1fa
UaiitHS3
Name: res/color/m3_fab_efab_foreground_color_selector.xml
SHA-384-Digest: IoaCuqoamQeAdaTmQPFTnmUdbfoThZuxf7cEbUEYN2q1MDjv9CJEybDW
JpUEwjby
Name: res/-Q.xml
SHA-384-Digest: sZRO66D5/mquO/IVzGlgWsZtS3b7IECnfacFqPT6udAF+hp53QPzcrZ2
kDNw6efi
Name: res/eW.xml
SHA-384-Digest: TVxyerYTCZv4hlX8QFxkkAKSyCQxktOU/40wS1IWZEBMAWnSu0v1wRyG
glem3vxO
Name: res/color/m3_timepicker_button_ripple_color.xml
SHA-384-Digest: O8wb7HBbPrZZPT+h8x+a74nJRWZuqLHi/EY0Kn0jLEYvVpJRtcgKH63T
/C6SY/aV
Name: res/5l.xml
SHA-384-Digest: DxEizlOchFr2RG4x6UAVGmalm098VKZRZYs9lbur0ApaPVwsaYn+tFbL
FaDCuiOv
Name: res/9H.xml
SHA-384-Digest: i9oZsU+8rTYEzpo4iypda4Rv5xQeO97Kca/3bUr0VGSjUpi0Njp4L3T0
m0FiurS5
Name: res/NJ.xml
SHA-384-Digest: 3+jwgsE4fyb1PpCTXhnpIJDr3gHz9XzUTmZzl12QixlsKGXbXIr2I5jh
RiY2zON6
Name: res/color/m3_appbar_overlay_color.xml
SHA-384-Digest: aO8v3bQuj8d++jfdnj2vkck9/m73dA9CBMM3mhHhnjhxZCaZO3azA1Ku
Xy0jeyus
Name: res/xy.xml
SHA-384-Digest: Q8isUz7N3qK8txu0ppQGF5VS7YsjwwWKcQcP+WCCx6jucdp+iEdPS5pD
GHv9YfDD
Name: assets/shaders/fragment_shader_transformation_external_yuv_es3.gls
l
SHA-384-Digest: k95lkyRl36JI+2CX6gGahqcoUB3Vtwa3rIFT52XQZwA3T9Y61t+BDTpJ
AP1ZwvK+
Name: res/dX.xml
SHA-384-Digest: RmzM3zq22oIwumYeZHZEMqySe+V3dH8dOUaxJVTlQTaVG/HhVKSys7ea
TmRGMAGv
Name: res/j4.png
SHA-384-Digest: X+2ZBI1L6hWmOwNjxi+z9P4nXp89FFYsHJr+6FGPIl3vjHD4tNiYecxj
VUlBMfHr
Name: res/H-.png
SHA-384-Digest: R4cBTEiiao9Mv6m5GK4v2k+97juIBLJN4DM5wpdH5v3oGiWqCHKZWxXm
B9BsgZug
Name: res/w7.png
SHA-384-Digest: WjtXUSljTfOiwex64g6pKV620Qg2atCBICF8uzB8c9zvecIkPD4CeYf6
QNCmiFhU
Name: assets/shaders/fragment_shader_transformation_sdr_external_es2.gls
l
SHA-384-Digest: 9mOTsdDk9p9O98ms7qu/Q5hnB7jqANIp/J/ffzRxS5t2A9+PAYEnzPPl
NCBZcooD
Name: res/1I.xml
SHA-384-Digest: 2/WjqwpR2XcD5UqIFQ4b3Oz1+EIl82HRZCUZU/4gMZ1mzlJQMn6iL74e
psN4XNoh
Name: res/C_.9.png
SHA-384-Digest: CZP617rR4YSyBFVL6FU0ssKNtEMQaRU7JQlWKGJhnlnZ6vJ0+v6+lBwH
4gyQthv2
Name: assets/images/ic_local.svg
SHA-384-Digest: tm8vbYmzxwyyydXgymUqab8YULpDPhf9ej65Ao9KGP5+4iA+86QwzWCR
m4VuFZJf
Name: res/color/m3_fab_efab_background_color_selector.xml
SHA-384-Digest: QfmY23lBp7OedzkBxOK7A3zuMkqGzq6x8sPw7wbmigqYuLlGTZG0TuZC
Fb5ad6+a
Name: res/go.xml
SHA-384-Digest: wPblYisHzm5Ix9h01+UQKLsqCtVMxTRfcZQ+5LwNrQduZt9yIUeKZZHE
+f9rZY6M
Name: res/hP.xml
SHA-384-Digest: hDrF49wu9IROTNLbqR9sx34SO3l5/63+CEY9xyHPxGE44tMgAjTV3qHV
Pxzv0BvK
Name: res/SN.xml
SHA-384-Digest: BjKj+dehrF4c0jY6aHTtPJI7oQKX1oGqPfEnwJS+xcqXFzBwOrythWz8
g/KA7cCr
Name: res/wb.png
SHA-384-Digest: Q5AxDeP9ZMhCkvHzeaeYmzzmjhWd6ZOxayku8ITGn6jREZH4Qra5sbEa
EziEPHqf
Name: res/rj.9.png
SHA-384-Digest: gL+uB9ipRWZLXXV/Hu0LNbNhFMQ6jSbMt215aw6FkdiIndifHGCwOCkL
GU7hDW05
Name: META-INF/com.google.android.material_material.version
SHA-384-Digest: vJ5t02iGXaOXx4BGVoGmMEbO7yKcaiFfLR47/8pv2nMnohoxhBwnnct7
MKtI1u+y
Name: res/t8.xml
SHA-384-Digest: nkLDiPAqeBCb7SLgpWvyWVQB8bHfRYge3cBvhkVlQPmwprm8/Mnv5S+y
Zd7UWXz9
Name: res/XW1.xml
SHA-384-Digest: DgCMQ98svcOQsKaVgK93TboRk3lT1baemQd55lNEGwHyrs/F+jQDsDbt
Alt5PfyF
Name: res/color-v31/m3_ref_palette_dynamic_neutral6.xml
SHA-384-Digest: sAR0+JgfZtKshgx97Zt24h4Y2pGDu4E9QGxmdZPREhN2V5CXDRYRSlTQ
kOeEPaJH
Name: res/Fg.xml
SHA-384-Digest: NU+ugRcplEQyWWQOB5Wg4DeDnlZrm3AR0JiWJxiQW0kjTXmqYMjy9aCN
R3yOljcV
Name: res/color/mtrl_outlined_icon_tint.xml
SHA-384-Digest: L4QoYzdNWfbE8bwCO5DTdPlhaWPjG0XC4ffQNVM2tPxFWijVs6cg4J2p
oZtqRCjY
Name: res/AI.png
SHA-384-Digest: Od/YEyJ8I+onv/TEqQ22aOf+bfASdZAhEhPiHLxyDP6oKWfAk9ykIRCr
O0LOfusn
Name: org/fourthline/cling/support/avtransport/metadata-1.01-avt.xsd
SHA-384-Digest: 62ceA1lTUROX0zvfCeyCaPVBrqbMbSRvKtScevrdlfLuqYBtemkUsoHj
g6x2FAqJ
Name: res/8k.png
SHA-384-Digest: K3YEuiYsIZO6OJ5qTZznPzjNN+WXGajn4VVyy8AQGYUjeTThRSv8Sr63
9W7V5T3A
Name: res/x3.9.png
SHA-384-Digest: CHZckXZKKkxNaLfZ2DpQLId6h683OqRz+rNUxptwZ+sk8GKuDtwmccov
tCckQsTu
Name: res/h8.png
SHA-384-Digest: kQ+Ak1QuFDF4gYog7UTU/3sNEkImFTUKH1BAhuGcrZ1NhAJbp5XcqU59
jf4UghbE
Name: res/uS.xml
SHA-384-Digest: NS+3p8yf5ZpOCvSK0BDCaATD0uqFDXrB2h27fZXq9ONerkcgJWSJ5PWT
zBcGFhlh
Name: res/color/mtrl_tabs_legacy_text_color_selector.xml
SHA-384-Digest: w59Iurugc3+eZHiJEo1ywqCdP6V0JlXfdRgT0VRAX0NHeWtL/G2Ynr0C
duKoAWsm
Name: res/Ja.xml
SHA-384-Digest: 39GdJlievBr+stZHvjssN+TNSIxqecy3Nb1D0vG+K70of5YdrJcVHF+7
MAqLvdqd
Name: res/0x.9.png
SHA-384-Digest: yJxtwFdQo+VA8l265KbFBrkOSvtWzxy4j/5OYdDwhizaoNwUuqbitvFk
+fWBdz/2
Name: res/8t.xml
SHA-384-Digest: skAswrqbAJaRyPRyPThIMrlhOHwP0d9IaXLtJHEWVv5CrthIL6a2Nl/X
GHacXHCd
Name: org/eclipse/jetty/server/nio/jmx/SelectChannelConnector-mbean.prop
erties
SHA-384-Digest: DyT/8YScke5gSciaRtHBxv+CMiUj9U+QMF5K5uJDNIdLGk1bF+nTCKzE
ndMRxmky
Name: res/color/m3_textfield_indicator_text_color.xml
SHA-384-Digest: SYuhR5vVNjGJDnvDsnLZwDjzyP8lZ5bkxOhvPLXqVP9VmVx8WznIso3f
qyLUEOk/
Name: META-INF/androidx.activity_activity-ktx.version
SHA-384-Digest: 4XuTjFSAD7rFUMU5gZ7xonfmbEe3GRU5HNpYjCMkL5wY3eSlIHnn97A9
mTSEpnxF
Name: res/color/nav.xml
SHA-384-Digest: Ed6sjtUTtuJMYqsMWzr07Iz9in7Py5nxcCEr+e6A+jnNENkp3FWbShn6
pryYytth
Name: res/color/m3_default_color_primary_text.xml
SHA-384-Digest: ELpd8WS6jV2RiixAY0Xn6f4UdeYjvdXAO9dnS+9620IVf8XmvP/gtqNR
z6AO6Vp6
Name: res/7s1.xml
SHA-384-Digest: deowbf3xB5WjsjW69MdylmvShiKYIiKEvKA6lpuYnM3VY5judZPCG7qL
ofpG2RQg
Name: res/kg.xml
SHA-384-Digest: oIwYA0L8wBzodQHxhbf7M0Tx7z5gmmbPdkZcgdQ8TxHA1wxejHWCZjtT
OQsp7BAc
Name: res/Qp.xml
SHA-384-Digest: T5DRfGgRmm9BWzIJVxuDDRoB3pP6AMHuCZcJO0x8aLk4GcN1O6dRikh0
xBD5h81n
Name: res/2F.xml
SHA-384-Digest: SBaWSg68lABevIE98LVDrbvCF2IogYR25eTRFrj3DdJqMxNU4SGHWudZ
KY+/5l6+
Name: res/no.xml
SHA-384-Digest: mHnTi46bsLk+rfZYs/KHWO7RYhFFT1A7VEdBwSGGWW/htEIHirhy2rFg
W/DAXmLH
Name: res/oP.xml
SHA-384-Digest: GiH+Y6aQ4ZCjirC5pOyddRbLK4LdWXsNLa0ILmi4/KCN1a6JRt6Aa8qN
ByqC24CR
Name: res/ZN.xml
SHA-384-Digest: 9Z6cwzm4GQlQ3SumRfi1P6nVJwJOtF5PafkLmdsjT112SnAtgAYdg/tn
oJtZBbVN
Name: res/oa.xml
SHA-384-Digest: dkSj7rfKr5L7gW3Tm3BoF6W7a25+M0Z1yc1ITYvrUYh/rTPhMorcaM/8
ojcwPba1
Name: res/pB.xml
SHA-384-Digest: NNamUuZH/UMnZzVWznwCUG6IG4bQWgwHNeXcuMFDBE/ut+tFvp1XXdX7
cSO85BxL
Name: org/eclipse/jetty/server/handler/jmx/HandlerCollection-mbean.prope
rties
SHA-384-Digest: kdlaIvm1+yL6Nn5AOIKF/Y2zGxoNVGs9Jnflxd4rNptuT6H0weOu9Gxu
vV4IxDcW
Name: res/62.9.png
SHA-384-Digest: zfWqrszC6JHBM40kcMmgXxVJqyod9T6u4wk5dfORf6OmAbgOZQ8+TDC7
7V5kQAk4
Name: res/color/m3_primary_text_disable_only.xml
SHA-384-Digest: /QKq1vsGLNtm3bSmOUbYf+iIJw6JOmTl391aaiEGpTYQJ20fu3DLr7sR
er0qnAEl
Name: res/K5.png
SHA-384-Digest: VVxKo4/1+8QT8yPElObXVmqarUIgOFuX4Z2kW1d/rwAVkqTqNnITSRKS
Avk1M1GJ
Name: res/-5.xml
SHA-384-Digest: pHEyKW2r/JKM/UblJL5/lSLrGKySxbYZGC/Syo2LgkPvMvS+Y/a9oYZF
JNntZ4p6
Name: res/nf.png
SHA-384-Digest: rRGmzG/T1sO4GnG2GYfHD11pwxBqa5M7JuXefgQ9iOQixZDGdU059Xo7
noQwykbP
Name: res/1J.9.png
SHA-384-Digest: v6Tb6Ro2pb4umhL3wXGS4P6lwuD//EFerLUT3tyJFG8wWEK/JPJ8X4Th
Wdui3m1y
Name: res/color/abc_hint_foreground_material_light.xml
SHA-384-Digest: v49eKtp2cQCxB7PbN+KOZbakXa8e8WWIEvdVCk6PK7y4ISOdYcFcurdU
05kuq7i+
Name: res/h4.xml
SHA-384-Digest: +ymWhEaXMUC/4tpYphDVnEwEW3i7h4ZKHIsukJ6nVIKFpbPkKGhxy6UU
AnuG/4nN
Name: res/By1.xml
SHA-384-Digest: ulZiS+zIWuAIAI3amNZoZ1LcSpHM3LidwP1qDUyyNc04EyGqlZSDwqBO
mVfaXHTC
Name: res/te.xml
SHA-384-Digest: Iv68Gh5yGmQ71UQIRBjGMsOvtIroCHfy+lh0MKmo0KyyRmjGf68183Fs
w7p/V0e/
Name: res/color/material_on_surface_emphasis_high_type.xml
SHA-384-Digest: oL4lPxAjxvArTnpmHYGMUEpqnUjRW6JJPk5Teu91fsyTaoVeE9Xp45To
iFihb3I6
Name: res/Mv.xml
SHA-384-Digest: VHJt6toQ/Jw7pUdz8VDDNf66J16Yaui3lFE8i2R2tmQapAqAlIDqsmjn
f6mXSeNe
Name: res/color/mtrl_filled_background_color.xml
SHA-384-Digest: g2GNIbZbuWtJSpOwrckfXxx4WMXp802ocdeLIO87bL8xfIzfLD6niMdr
9qeteLei
Name: res/mr.xml
SHA-384-Digest: 5llFwJdc8vZWIVrZhBcnlZXrjH8xmQENkq/b+duUDt/s7y5jXwTgjrni
/BL0pZlh
Name: META-INF/androidx.slidingpanelayout_slidingpanelayout.version
SHA-384-Digest: dZWsYPKcBB3hLWSKo7dk89yFwE8EGTmAkXXaN7mSWo6ZtatcGQ7lp2cl
Qg5ZpkAa
Name: res/EP.png
SHA-384-Digest: RBlkK+AxkX41eu4FrVVmB8zg0ysZoolN6zPYlmmAlfL1uVYG2MP+3D75
nBOZUAL7
Name: res/8K.xml
SHA-384-Digest: qcbRzO+AoPbFnzwuOAh61FUWYosoZhf9xNjyaPFy/xN46xLgiXjN56W6
9GRICopu
Name: res/M-.xml
SHA-384-Digest: fXc0PPqA+IDKf7Ly51BHqxlfv1pTgQhrNxfbk5UYuc5ciJc5JCtKe4L1
34KzhDhy
Name: res/an.xml
SHA-384-Digest: 2ARvLBn56s82XWU+/hg+UewJVqYlmQZJTp9r6ST0RmXY5nflYCsfCYXC
acRY5RUF
Name: res/c0.xml
SHA-384-Digest: pzuDv4z5jCsasdkzlmXo+NRDafLgB9dCcgWymvu7SyhzKBSjgjyKhC9M
UWzAtZfu
Name: res/yi.xml
SHA-384-Digest: wxQQkkCVrGsV8BxQmIdMm+YRu/gyG90hRDlF7Ff697/FSVbgWbD4idiz
EQQ/t8wa
Name: META-INF/androidx.dynamicanimation_dynamicanimation.version
SHA-384-Digest: mckGVV5yZITcGfKBEb9sMNyo8RcMd8EdHV+ZDpmrhxBBU+cFqAWsmsbB
c6ylutdd
Name: res/color/m3_tonal_button_ripple_color_selector.xml
SHA-384-Digest: u1MsJPyrUt4dKaAXCm20K7B4uPaQo/MdzxooNzSlEdEUkR/A4rWgxta3
iHsxCf7V
Name: res/color/material_on_background_emphasis_high_type.xml
SHA-384-Digest: 8vr2px+mchHzH9PAAoGVobPGnYkLHAeBeRDHzzWABOvI+fAmk0gOtHgI
jvsO3J46
Name: res/sA.9.png
SHA-384-Digest: 09wT/gUp+Zpns2JXR1vzJLyEewLMOgz91k6+YONlpdmI3cOYFtqNy1ki
0Nx55o38
Name: res/PF.xml
SHA-384-Digest: FElgFZexzq68de/3qy8gp/2rVjLVWGu5JdThOcmxZbRUSEYvNkqICpxV
vBNGMM/N
Name: res/z9.9.png
SHA-384-Digest: 91WtN61BumX3ieflMnb5ZHGm2N9imhl6TjsWRVJMFhoKYhUAL15g7Bz2
acDF+RhN
Name: res/eH.xml
SHA-384-Digest: T8XbtoR2sgfbzAul7ffF2aHjhFCRAuSb9WIWmCQhe8Zis6EVwXnhDTLM
+qURR9NM
Name: res/4Q.xml
SHA-384-Digest: roiZHirNbd2Kj835FaZA84powRoLJcmg9IoMstuVl+hp4lC6qRkgtaqX
xTP2Iegy
Name: res/Av.png
SHA-384-Digest: 28gwjBDJNC3yJzJwG128vY0BdyfHdXsbm5kkfxx0m7A8iZXowuHbczoW
7BUGaQqf
Name: res/color-v31/m3_dynamic_hint_foreground.xml
SHA-384-Digest: /eXBcmiLVMFVp+5WDp67T2Da6WQPjz5/sQf1kfmYtcT7VOHe6jwyU+Cf
4+RKk2ek
Name: res/zL.png
SHA-384-Digest: 9CjS5bXNUCnh0wjeOuJJannRvVGw5PlYRKq6TRPvePZCpQO3nuQQg+Rq
Wzg7m1US
Name: res/uh.png
SHA-384-Digest: tmkAx6MXuQLwgJigjL6pzWdl8twmo0DxT9qhu+HqD7S6wX1rrj6KRCeh
rGH90kCi
Name: res/UP.png
SHA-384-Digest: 62X638Saq55d+EVU7Ij4UpvdT+w37BWVBEDhsNilWvSdUwUcqeVcrIfh
OJB66yb1
Name: res/V1.png
SHA-384-Digest: Jwm7CU6ZDfRh4ieBH7TPHuAsTsQxHuyqMp8HgBR+sZ7tObpuQp4zvr1S
coAlPfG3
Name: res/q2.xml
SHA-384-Digest: o1ngKwk+bXP1LmzVtqMKaP5w5x7as4cWlvYqbMnClIoyU2VvN/D2G821
fmx+NpJH
Name: res/4S.xml
SHA-384-Digest: 0oaa/Bq5LumCFxaz6Ywu3f8DY9RCQxUnSajlPRrUBdUhg5DEdEIEbmNL
/oOz7W/r
Name: res/97.xml
SHA-384-Digest: FenBwP2VGx/l/DY4JaVITKNy6/+5oAWqNQgpcEbiW3iqFrJ79Er3hcX/
ubXvkc80
Name: res/Hx.png
SHA-384-Digest: tRKYTUHRxSNDC39q7BZpFp50a8kzbBUiV2OhQWl+uxuWQlxQjwO2zymQ
l+sGDQPH
Name: res/color/material_personalized__highlighted_text.xml
SHA-384-Digest: ohqAziUdlIpGymNmLe2xkc4QvuJ6cwgkPTamCN31tnc70oAqwAN387Rg
2S1R4WTB
Name: res/qp.png
SHA-384-Digest: K5WRJ7e3vUjzKOQ/Y4vnVLPtwhmMc2adknT27SjqaCRNEGzG+toIAobo
BXLnqawY
Name: res/cy.xml
SHA-384-Digest: s4KFa0LTLabHcNejhohstLiZbWU4MGQpVCCgsOzMfitNC4/EaoosFneY
j+HPR9lp
Name: res/Cp.png
SHA-384-Digest: fiE6wfepbTVdf90VznXwO6wZftFC5Q9lrBkZx8jTkRtBvLw9Duaxnt6B
m7HUdH02
Name: lib/arm64-v8a/libavcodec.so
SHA-384-Digest: UhLMJkjwxTId/9KShbdept/usPSqIldAcKesiGHkqjjGw7OXk+KTZ2PS
OS4YLViF
Name: res/Ro.png
SHA-384-Digest: EKD6a2NvMXtTfll1NYpROvB+0nWCswEoBlVGvUuFGj+wBMBErNlAY2T3
IDRSE/St
Name: res/Nl.png
SHA-384-Digest: xtGFonmU++H8YmrF0kPYZ3fTCo2o6TN92abnNpADLlz55NnAw/P7fCgC
FqsDZpwL
Name: res/OM.png
SHA-384-Digest: /VMV5kXiU1jcoHhz/I1WINpoN+i/swFxXx+ogG6SEJGYVe/MApvNBN9f
e9Sa21AF
Name: res/fp.xml
SHA-384-Digest: Nub/5XDdrlMVKmhUPjW7MhWgfNjLG2g0xYjWL0h4E0tY2jhxoIznLF5O
9UZFLn3z
Name: res/Kd.png
SHA-384-Digest: m79Lic2BV1NgROwLmnY9Aei4db1uMzIlnXBvUk+tuKZE/9rvV1ykzfqd
iFL31tbT
Name: res/uj.9.png
SHA-384-Digest: 9rQTPAeU/7einiVSppbaAQRgK3u0y2m8fUhbHm5DZtS8gYFwvIfXWDqa
0Dea6XpO
Name: res/bm.xml
SHA-384-Digest: ZmgbQEdcFA7STKWimhNsXcXHOLe4FkuQh9TYNw5oLL6NNP+DMFX7QqFU
gYAkuCYA
Name: res/ej.9.png
SHA-384-Digest: itQLYheUPSVjyqev/myV1PB9NUgouleUiCEayMM32mD6frV30zz8lTJx
HU4b2kBP
Name: res/Fx.png
SHA-384-Digest: an2zjF1kW+ABwB3G4UKVGDi1Z60jn0o4yOP3lVCpz/GNrPMfwfFQ4tEy
TM9Xin+U
Name: res/GY.png
SHA-384-Digest: rjO7yTkjTdngvDr1YmzjLuK+ofIQRJCoRDs4mMwsSBd0D+b463grfkpZ
N1CAvuBA
Name: res/D7.png
SHA-384-Digest: MvDU9l06C1hrDSMBD435+zLrTGvTPUy16uCfd7QdUu6Tqq7TVT5X+xqZ
I8GoiZD6
Name: res/OX.xml
SHA-384-Digest: CSZ3UlmOYZ7CPXjQO5Q5WUaQzBWNEePvKs3Pks7Z+Y8+A6rM5h2/ZKnF
U6isWEVH
Name: res/color/material_timepicker_modebutton_tint.xml
SHA-384-Digest: WJcjJAzEKJM0cMgs4kwyaWXf3e3F2TA2UDeeo+CZ3huDPGvN1AO+miDy
ht3wO/rN
Name: res/5N.xml
SHA-384-Digest: ACygKz1FhnIbHrKNAt9gjL3VwCBwRe5DWMOhh46Bjo1RBmA+kOnyXyZu
Fv2lXZwI
Name: res/color/m3_highlighted_text.xml
SHA-384-Digest: bviuvfuHXYP4V6IIRyWq58DHBfzY43O27wCu8I+M3pSQH0GfyAvetQCO
OYijAPEM
Name: res/color/material_slider_active_track_color.xml
SHA-384-Digest: KG+hY2fpbNBUYjtJgyEvqZrcUdFn7iOb5qgntgR8jZLoXHYsr+w5YdkM
OD6XqQ2G
Name: res/sH.xml
SHA-384-Digest: PGaPV5X9hJdMlQ4QC6cBDcXDtnXX3CTVSQCY1JBQ0XQKLjKSeWYnjpNz
2SNrEBko
Name: res/RD.xml
SHA-384-Digest: 9qBKiHRi1cTEf7ArFaWT0xkO12l617ccsjFnzG93rscTuBsR5Mt7o4Fo
Qa3NO3F/
Name: res/iZ1.xml
SHA-384-Digest: DDOB9KPs2/XqkX45q604bUgow/J2CBqZwI4b/70EYCqhicZoHZvzeuYf
1qNAycvd
Name: res/Uf.xml
SHA-384-Digest: bRAtBLDFkz8XQOurXDUq6EY08LHQai24r+TbFd4ECzVL16UXYejoor6T
gbcof36H
Name: res/color/abc_tint_default.xml
SHA-384-Digest: 9yGIoNFXCUexT4K/G19OuczooHkRlGtkc+uS8w+habOrrEYNrw+7w7cc
emBtDcw0
Name: res/hp.xml
SHA-384-Digest: ULyoYzQvL4nH0jgDju883QTWScud68hxjsNnIPtb1k8s+WugZWkBC92k
k+Ztt7Gn
Name: res/iQ.xml
SHA-384-Digest: nUyIf6r6iLjBXg6zHOtit4ThVLa2udMrELE1al7QCEKkMl6H3ZSQU8sW
HBcvcMFj
Name: res/JP.xml
SHA-384-Digest: OUTuGwJHqFg7TiinzvFUm/Dtxv7aUjUVDjzyjhiRz0O7gRWNDdiWGA99
ihCIpDAo
Name: res/ZC.xml
SHA-384-Digest: ZntYVS7Fkp0bicqhtfBG8gasrKotzEMibi8d6C0zO6jTi/XfHkIAJwyU
GvXvSXMx
Name: res/Fm.png
SHA-384-Digest: AvWR8M+hukSbWfn4I3ZVL7n3RC4T8U3igynXfV2DBin6R3d8Mcy6HenQ
5MAOHfIB
Name: res/aR.png
SHA-384-Digest: dcpq8SDbUltUByshOBJ9mMAtAFWOe6OPRFJYCPa8e8O/OCAinBDYoxPy
bLc4mgP3
Name: res/3-.png
SHA-384-Digest: Ny7KV+9W8KmhFZqa01cntI145FIGVkA7MgO5OrtfKPXSW5kOfzGY0aNI
C/fzG38k
Name: res/color/m3_button_ripple_color.xml
SHA-384-Digest: rDx2n4+q3zeesMh6U/89L08SFy6zai3HsOUvdqOkjvWZOZ4HE9R7wE/M
9NB/XL/i
Name: res/color/epg.xml
SHA-384-Digest: gQgeD3GqsxIYL+9DHfERsTHTbiwjKvNAU5hBt7JsN4+zx7pEFyHKDz0S
8zh5Jy3t
Name: res/color/mtrl_btn_stroke_color_selector.xml
SHA-384-Digest: nITYRAamc51koJi72baQ2m3JZLeDl7aqJs9yolWNheJ4iNzUuM7Fhr8v
d/lzEcy1
Name: res/AE.xml
SHA-384-Digest: EQm1OEY3a3do9cLvcdh9qGcTVnayFaTqpIPxA1js0oqH3MA/3N1Q8yA3
iI2S60oe
Name: res/Ws.xml
SHA-384-Digest: /FuXzlNmR/KfDE6zFnN0Fp1RFBi0i2uiac1ysVFBppOxfUkLkdd4p2BU
wMJP65ga
Name: res/XT.xml
SHA-384-Digest: PtA7qpFYJQ9hOaOiX8bnaru7d+gVHykHicL5PX2HC4vogp7kFwsdPDf/
EUlqPo6H
Name: org/seamless/swing/logging/img/trace.png
SHA-384-Digest: Q1C4lFWPH+OF8tKRU1X/AhifcvQR+On68GKE0363LdXUMUepgsrIyxif
a7Efn7Mu
Name: res/color/m3_fab_ripple_color_selector.xml
SHA-384-Digest: eptQ6QcJOT3CZMJUo2aFQzUXG3Pnc+q98w6GVxBEaaR590Kf26lTLOaD
REq1Uxvl
Name: res/bD.png
SHA-384-Digest: dSDKwxvFa6DcrbVyg1fW5e9UIAMj8vgdXrLDW/Qqs6LOEF6EnU0k23jg
XdABOqcf
Name: res/a0.xml
SHA-384-Digest: Yaqjwqhn/uzNgAKfeAEif34+p6hqiNd3rQtlOVBN7ik0Uad58Ehd30UV
/HcqbqdJ
Name: org/seamless/swing/logging/img/warn.png
SHA-384-Digest: lnIX9FKS9qBuweUEmgIR4aMIX3RBiy8rEQrM2xpmRYmXZKmmdg7/bFKZ
jp1TkEuu
Name: res/6x.xml
SHA-384-Digest: Seo5uahO3tYwYlYdMVVTWE/bSd0A7VhJ/AJb6Iz8yGs50ZiwBhBPWeT8
NzawOxHn
Name: res/4B.xml
SHA-384-Digest: PvBIMN7DoCQ4WCtVG6cdtPVsW5hhrBHy0drgyLM0sA7NOiNuxWl/NXnb
VykLk/O4
Name: res/AG.xml
SHA-384-Digest: WBmsuN6n60lkh137dAo7KGZsTuxSQHLgxGGDXjnBZUluSlPUUJTB0/c+
sdQruhJu
Name: res/U0.xml
SHA-384-Digest: DD87CZ9e6oIqfirryo5kXehZ3vz1QYAxIUS4jSNjH65aLdUTt85BOi4A
PdbcZK2H
Name: res/XR.xml
SHA-384-Digest: zpdSFgQyhcbSDBzBwlUkJWEPSx2SSBoNPU+SnjJZ+vgCmWEWl+nihsIE
dJdosY7j
Name: res/Y3.xml
SHA-384-Digest: zi6g+CSY/hlfHRhhwb9oRtXuH6aqqactW5ba92NMR3zDaRfKQJ7sRCnZ
7qmsQrkH
Name: org/eclipse/jetty/server/handler/jmx/ContextHandler-mbean.properti
es
SHA-384-Digest: bKD2wv18sylO8tn/pJ9dhBZWfl2lP80oxsEXyDQjBUsMLsuzk3Dsjp14
c9dyW5yT
Name: org/mozilla/javascript/resources/Messages.properties
SHA-384-Digest: eVR0+DOhgUYdWJUt2L+MLMX3VaMhQEMZv4GMBBXZzrun4hxrs7liVwJu
B6KLUPss
Name: javax/servlet/http/LocalStrings_ja.properties
SHA-384-Digest: d39wJjrPg5aiT3ecHez02jrkBRJDCqpzvZXGrb3ubz1QQWPP86KKDLaU
V74ciBHn
Name: res/color/nav_item.xml
SHA-384-Digest: EHlz9hfdZ52gomful9X2bp88ZR0PZZ97GzhrIJrE4F41zjV0GE7UDOqI
fEj32OJu
Name: META-INF/androidx.versionedparcelable_versionedparcelable.version
SHA-384-Digest: Vwo+5qnrRWD+fBGRDh7y4g/OJLq8uwZIy5Spg1Awa7ID23DP+X5mwx6L
MHVvh9t8
Name: res/tp.xml
SHA-384-Digest: H6hePGNlpNf7iIr8crNtY+wacAGbJNZa+Vz/YIiBRLv3uniYbpUzkWcT
FrBCb/N4
Name: res/color/m3_card_stroke_color.xml
SHA-384-Digest: cc+JbJodQSs5iJ8zjH1qUQHGHbR9N1djFf9o+zzqHkK4wRgBn+pu9LDQ
ZQW+pjZU
Name: res/color/mtrl_text_btn_text_color_selector.xml
SHA-384-Digest: dwT2+ThbqS4/P+DbyR4ngcYu4gh/qmoAWF9NWf7WgkGmRb450/jBDx8c
IUa4CAGQ
Name: res/ls.xml
SHA-384-Digest: 2tyCsFT94quXQ38zJlAT06GCykrZnvnu33AfJ9sukREXKgx23Um+M0wi
YOfdtXwI
Name: res/uL.9.png
SHA-384-Digest: SNRb84Pi67o7Un5BMOgk0kXeYO48KzxgfMQ+AGH6j3ln77nCeONZB8fA
vXAfrR/3
Name: res/27.xml
SHA-384-Digest: qCdUdZ00nWR1KGXjgBC0JVTu5ZuS5YgNfZ+cf30VoVBNcERIW/o928K1
Y5JfF5Sw
Name: res/2H.xml
SHA-384-Digest: WeAMlCweuLcew/8ocA/Aei7qrbpQyhKcxHTImsqtncjja65TRC5F/jAF
Bjv/dIvI
Name: res/color/m3_dark_primary_text_disable_only.xml
SHA-384-Digest: E58bmeYvgwEmcq3qAV24aL3srvbOh5Lz68F7k3y7c5kU0DSIwXyy7UdB
gQPNx1yI
Name: res/Y9.png
SHA-384-Digest: sy9A7yR+zCpRXYfFzH5/yiSFVla+frPhVUUVjwK9Yu+rtFY1Evfn4vgd
EnaO/RBc
Name: res/Jl.xml
SHA-384-Digest: YVkNeKFTj5wFJi/M7FTNUAFzvh6+Xebnv6RU/hySn/6u62KmkdXCWl3s
qGf50Ar3
Name: res/xj.xml
SHA-384-Digest: vPjJtZ1xzsDRyjnQkIXyeG3Ybm1J4w0JgIws+bcoFVWuUGc8scKc67MQ
+6tDaD0j
Name: res/XY1.xml
SHA-384-Digest: gaEUL/EadLxkgMRN1D5RRzZ5+V3q23odkqk7GnKjjPMkrVcPzcHk2Ph0
pf9duKoN
Name: res/4o.xml
SHA-384-Digest: 1dPkFluuAcjNUmQW+1LSJSdDgxHcnMytJU3SVv6E5eBGeX1HjMJrI/Tp
dRCiRnbT
Name: res/61.xml
SHA-384-Digest: gKGwnQ4wzxV9eJCSuz9aIUcPRP9JAsotZ/0JI4BCABEDWyVJb1+ErvLk
re4I9xdR
Name: res/ly.png
SHA-384-Digest: y+LZF4qY5D0KMDs1FzNlYPZEOrsIpdq6uZojtT+M9oQLP1B9c7KM8Z3/
0LO7MIKp
Name: res/tg.xml
SHA-384-Digest: IRmJg0dWSSpdsf5wdcepmJUmS6zp7nNgxoZrYZpcZa28jFaL0PgCk3qq
nH9yM9nx
Name: res/Aa.xml
SHA-384-Digest: 9O56xMWRJq7i1+2fpfAxOCCULIF6SG0JjzS511nz28qpmmcGBlijTDBv
+yzPkObV
Name: res/c2.xml
SHA-384-Digest: PBzmrIlNtAlqMktI7r5lA5d05gtfNACnhpXIrHSK3DbHM1kI8l+Wdq1L
/ASZ0gNw
Name: res/color/material_on_surface_emphasis_medium.xml
SHA-384-Digest: nnuBMGP0cnHUhDcnT/eHT38igBM96CkjxZlN0K49pWUdsbBESmRIGwbR
e59lUNa7
Name: res/Y7.9.png
SHA-384-Digest: 48F/ofMcKR0Es2Uo71hPzN/m4T/6+dPJzJD0DyGBYRWwCUbRZ4mkdcRB
zWCotySb
Name: res/4F.png
SHA-384-Digest: 1tzxn4JdG+iDfaJpiSnK6qW3f6TbpvVr2w66rGjS39zkgQHDjtrNc/U7
9mV+qk3d
Name: res/Bb.png
SHA-384-Digest: Dp1juMUnIarkgy34T6dyNV4OlMtE1mDheGW/Xee36MxoVoWoN0pgfMNM
luSgiAxS
Name: res/xo1.xml
SHA-384-Digest: gIMxE/Q041247Weip+tn+IGAM+pWi1lbQV3o2chzuwf0sNvsZps2vU5j
ccMEOuco
Name: res/ay.xml
SHA-384-Digest: BY4bbXAxd5g05o8d7n+uEoPqP9SNP3F33rWlUvfKkwLT4V1+9hoVAaWF
a0nAR23z
Name: res/TB.png
SHA-384-Digest: 0k8xeYC10DsNpQt3Bt/P0BGfc1TTcKm10+GDdq8/XFdrwH8cWEG+/8f+
avk6qtZR
Name: res/ud.xml
SHA-384-Digest: DMtpDfVgEhxMtRXMZj2zNMwwDz/ica8H7UtJyLnDFDd573n9IOnjB7BH
V9GMPAeF
Name: res/Wd.png
SHA-384-Digest: luOOzKNuA53xyPfG/pcB4Sm+opyvusRGgEO3LzKJuoTI0+wOCpovaB29
s/rDQC8f
Name: assets/shaders/fragment_shader_transformation_hdr_internal_es3.gls
l
SHA-384-Digest: 9/lNM5IkMAV39nbQWZf1fAuXgMI5ADGBe7n6pVQqsJMyJG5ESnpCWZhx
aJ46OKzm
Name: res/7H.xml
SHA-384-Digest: D6siyHUTPx6I0Eh060mnT3WkFrAMIondcC8L+Lt62LIgt2TtpITXlhhF
aYddchvG
Name: res/Z0.xml
SHA-384-Digest: S+5WMTKxvxOYUdkDNp2aHx1Yd/mTl3+XuuqbDlRB+2RdNyT0SGQ+gKji
m1SSKZ3m
Name: res/rx.xml
SHA-384-Digest: eaby9ehdKrEVE6eSAuqsXW3tqbRs+MsISyWuxbyRJDovFnVpLREXv1wo
juZKGeUb
Name: res/color/abc_hint_foreground_material_dark.xml
SHA-384-Digest: oS6BS216IwoejClzS9qDSu5SapTxf5oyuS25+elCnbDdtP9JoUA74O0Z
amoetMEE
Name: res/MO.xml
SHA-384-Digest: DHm7yKJMbQlCHCldKlFDKCRJWW4tZDUyf+VgpWZkwl0oNftyG4Wlhkym
j84mzyj8
Name: res/N0.xml
SHA-384-Digest: qI1A5qGje8n1/aDb2wghLG2jLyJqUVs4J4qbF8GAXWzLmdAjBHkiazl5
k949EdHj
Name: res/d3.png
SHA-384-Digest: aNw8aswpauwS3eXPyOKEfejvuS4O5eu8ecg7nyxuIYcLxXUNxj8I7OWm
qimWXP4F
Name: res/NP.png
SHA-384-Digest: J2Mj7HtSeBZ5YYps7oczdKXJI6rRfBmEjs6W8xoQI1BGwOZiadv67R/+
o99aNDaQ
Name: res/Xe.xml
SHA-384-Digest: CxVOuS15BeeEG2VxpP/rcKm/hzgFxeM1odSDQ4X9gXQQnfLOH/aW3rb0
Z226xPyj
Name: res/Mq1.png
SHA-384-Digest: uhgwoFVU8Le3xrV9bCEUyavb286sVkIr81YLTtTqIw2UfWEd4K2VssM4
/eiGzKYk
Name: res/S4.png
SHA-384-Digest: hAwbLrcNRUJHhdNeA6yCs6uD24/XIcnpv1ocFr/QxKN16jDLoOSHlQA9
rDeV1Zia
Name: res/jN.xml
SHA-384-Digest: EjDLl60kcOl9j+BQBYCS3qIOsLpA2aSlV9hnrh+nevWGCOB9sC0S00IO
/cGE/5QC
Name: META-INF/androidx.preference_preference.version
SHA-384-Digest: Wq5o6BYc/OOTgZoWqpNZmsuUTDCi9YRat3rMZdyEKxxSG8+nDNsqU/OH
fQqHXINc
Name: res/Cc.xml
SHA-384-Digest: aBWfd6n9ScV9r6UchGkI2+SZDHCiZ105vNWonKixUX6aBTeBzLoUXfte
+YsTM/nK
Name: res/tK.xml
SHA-384-Digest: c/clC4Kj7rs2Q+pz75AnjhOBy+IZlNb64OA8AveSrEMOz4XbWt3+IzAG
oTmW10Qg
Name: META-INF/jsoup/LICENSE
SHA-384-Digest: o8tNii50A/JFotn5jvM24abE1v1Sdomwl80tLa4KP9vVbSz0LX8x6xso
20R8SBGf
Name: res/LJ.xml
SHA-384-Digest: RM0PRzIvZenHxiVZAM0RCxQR8XNvhcZun1pxkwO4zlwtX6iSm20hSI5q
mpzZh3s3
Name: res/qn.xml
SHA-384-Digest: vc8uW3coB1BkXgO8MQ4rJCTxYMylCKndBAKC39tU4PRSjxLxYQsG5CfA
iRRUkLFt
Name: res/sg.9.png
SHA-384-Digest: x6DUu5WYGhx6rmDBkj3qyp9thUr1EzMD1t4VOK5jNiZOo3NTVh3eE7VL
gvUogPAi
Name: res/Ny.xml
SHA-384-Digest: f6rm2zvzKDMMwglbSGXor2m1Cfa6e2g1ZzLrgVNcVNtj3RQJVBq24PKh
oWkwxYbp
Name: res/OZ.xml
SHA-384-Digest: mfyvU8CCgyk7inKHevhiwmJCZ0vkgxCni6k6r8eL5zvjjdcTY88uHCWg
Z/ht6Pcx
Name: res/_I.xml
SHA-384-Digest: 4j9LjdQFMtmABkOoMnwcKxR+gjzd5sZaRUU7OfPgwWfobRWCPX6er5/T
9LimDevS
Name: res/NF.xml
SHA-384-Digest: ZkonzqoYV17K+LCjiTEJeVKO+MmiGuRiys4hCBJQIwXQ5onmf/VnHwzV
NZvQdlBf
Name: res/Bw.png
SHA-384-Digest: e5HIiFxL173r0QZsj4IrdW9qmQhIyMsTp6UCZP47IPArKEAI7Ypvwfk9
+ZHCNXoH
Name: res/-B.png
SHA-384-Digest: B85dv7Dj2aEWw4uCp0he1xujICQMlbhA/nwwebklnLhAtnTM1TNCwYuR
TlCgn9as
Name: res/Ec.png
SHA-384-Digest: NRTN+m2YL0AAAe4I1OAgbAYN1jHaiQoMsm3hPVknzkllbZS9strxDLAJ
nyMJalYU
Name: res/8h.9.png
SHA-384-Digest: qpQM/wg1kAHEHGhpCGKevLHVYky5qaoR9SrR0KiaXW/8a3hWq+7PoBMV
UuPBXpf1
Name: res/1x.xml
SHA-384-Digest: Pru/fmTQzrm47xLsmAnK7j2QSC/V/BKhDl5X7ig07n6G2ceunfNb0RvC
zirIi5lX
Name: res/QK.png
SHA-384-Digest: cW8WhhnuGPjD4Xig1nFRvqDxOgirvNbU2hSPDjEeR3G/CscLAlv+86Xh
yRxmduA/
Name: res/eD.xml
SHA-384-Digest: S8N9ilZSWZOw4JkuCDXS2CtBpP8m0Lb6BsxfxOV8svyDml/1vaStimA7
0jpUTyY+
Name: res/DZ.xml
SHA-384-Digest: 5vk6RZw4BQN+jPVFjVe84qTAnJjnqIg2lk226kq7Cz38PF2Q3JLxiXSm
ey8qzXFN
Name: res/7C.9.png
SHA-384-Digest: AJA0hcLEVfnJMp0WwwBJdSp7F0ruRZQ6zeNsCk8LVA3u3oOY7MTn+LfB
nblRV/9X
Name: res/8K1.xml
SHA-384-Digest: A2LLkgX4p51YFusHP/dQzZRy75bh42XnshmnhnLi1chFR3c0tZ4fCNYY
zx0HasqP
Name: res/color/m3_tabs_icon_color_secondary.xml
SHA-384-Digest: dSS0qj3cW14q6xL3CrWglE2XuR3LPiVZZ2rpSiCOYk0l6S5sNSDN6H6V
SfIfezGB
Name: res/Mt.xml
SHA-384-Digest: Bw8G7KXXXcwnjDDp7vcGzWPTiCn5/VVAMcKz7kEOe2Ya82JG3mSfQ55/
rR9LBNHT
Name: res/D5.xml
SHA-384-Digest: Qu/6Ebf9F3kujmLdgVCbHvskvpgvI004t7YZ2OkRJoVKj1elg0wIQMgK
MQgBwsOQ
Name: lib/arm64-v8a/libavutil.so
SHA-384-Digest: ZyvZvd0U09NznovolDkRCG2mcNdfYjVLJjmlz9EGBfdt/MvHm6FmhqWF
X0NEabMG
Name: res/color/m3_chip_assist_text_color.xml
SHA-384-Digest: MzamUoX7+e5LZpdeBX3xcZmWrJFgf01NqLtFMp2SV/CDjiMotvKUtvxP
5BYF4aKg
Name: res/dv.png
SHA-384-Digest: AJMiJ51DqzGMhI4mx10q490lJ2CmFIH7zVBSx8n0wwM3QdCZ+3TTL6mg
ybubvaOC
Name: assets/shaders/fragment_shader_alpha_scale_es2.glsl
SHA-384-Digest: 7hk6suC/CfRwjqRDpTaKLP8hJ7Bm/8YNjCNeKzUfmDpAsDPNU0GgFHvT
BkOpzhj/
Name: res/fg.xml
SHA-384-Digest: +Isir4Ts/wdvrWy+tKU7dobZky6r5RxOyQdz42yXmANc0A7pNeibMVzu
HGkt9sRb
Name: res/kr.xml
SHA-384-Digest: vR8+S6GMbHbMCu3BmwiTCdp7uDuQMIqQ+QUQhmeSDKKb2NQz7VFOr8u5
5AN7ed92
Name: org/seamless/swing/logging/img/info.png
SHA-384-Digest: 2iz8IhKVMAwBOGywx8UTXDIj5mgvxUALe3+ONLjr0K5eVZ5V/f65Og5Z
19VBJnNB
Name: res/QZ.png
SHA-384-Digest: 4UGx6bXNH2m/nlSB77M6Ird0fMYc70G9v3BpuCz3ylQCfQVCRLeKIKqj
FWkVIZqn
Name: res/ZL.xml
SHA-384-Digest: 1gEeX2THigamNCVIUvFGEfDJpGbcNcPblVUKnnBWOgGbEwWEpakYSYZa
XmDv96qf
Name: res/iZ.xml
SHA-384-Digest: 5Wjt+iCcSs+HBEbdgT6INggbfb95FMRbQY8JLinJTjFYB6Nqx+ejTVWD
ASrGKfxT
Name: res/RM.xml
SHA-384-Digest: xOGPgV0deTgmvR34nIVP4nqX+gHoHpX3g1csMY4wXAg2SBD7h2H9jtTt
Wp6pcvXC
Name: res/w7.xml
SHA-384-Digest: /3/ndqZ4FYSBLWjUGqKVmYO3lGvQIjQdbUlwFOBF9vuKOi/6XKUeE3J2
ha3C1gvi
Name: res/aT.xml
SHA-384-Digest: xX6hiFQVErXSd72zAyOFeZij55OstDLRxTDXf2jcApTuYp3PaY3X7gH+
kkZRGbvd
Name: res/color/mtrl_navigation_bar_ripple_color.xml
SHA-384-Digest: lm3EwsJBw9jqnY3+g/3CPNg1JUBH1OTOjM6fJFQ0wVQAmiDiI6Vpfthe
fZ4rDGwP
Name: res/nm.xml
SHA-384-Digest: vVgqAO+YCCXMKxZffgSHbORVL5VfHBucazMn65YINLbuaNei7eG5JPR4
Zfn4PbJD
Name: res/kJ.9.png
SHA-384-Digest: 1Yq1PgfOaZIwDnSj7jNoglM3RcYP1H1oEiurtSkPuNaTncsfjB1VQByp
LXEe7B/p
Name: lib/arm64-v8a/libxl_thunder_sdk.so
SHA-384-Digest: hl0hFhQER+Rycfsb40+0UTM9vvAmrWk0WiEIKlEydQyJ4y6ejDnD/Wlj
hEWUImdi
Name: res/color/m3_timepicker_clock_text_color.xml
SHA-384-Digest: rJWyI1oJyQxyp+gR8SFHXKnC6n4nqWq+71ez9+wzmPDxH6tOBv32yGxo
tBOKXPKg
Name: res/yO.xml
SHA-384-Digest: T1PFozcJiT/2XZPzjL7DHUR2GgAQuchwt9BcpVa0cDlwtX026Xz4Nc/V
4JIzvvw3
Name: res/9N.9.png
SHA-384-Digest: dF3DOBMD41IgaZ6F5o9cV6cWn2aXAPV5wfywf7LcNX6YhXk1TkhvLABa
ubMtgiUL
Name: res/Ha.xml
SHA-384-Digest: gnXu4n0g/+/E37aWO1pn9C7OmPkKo87REj2QZ209ksY9LR1DAdvbWKTD
n1Fvtco+
Name: res/s4.png
SHA-384-Digest: T2X0yP9gITsDx+j1CL2gROKFamPCYLJILgi5Utx3DWn2s4hhkjzfYwu8
qXRR3SLO
Name: res/uU.png
SHA-384-Digest: 1UYiF0c8wCSvy6omkQ8LAqtFA9+thk2OQeR1EyWTCkGflDLTqIaA7nP8
RLX+ewBD
Name: res/AI.xml
SHA-384-Digest: NYO/dYndev+C/RlmiGgi6s0Sp+cVxAAOQbRc1Q5IGJb9wHn+OyjKzQMY
jkMhztwm
Name: res/_p.png
SHA-384-Digest: YsB1vhd/pelAJhSRz4Hg5fobx/Tn9TWr2npi3nnHB+ApX0XaN40sBlEi
Tn48Wn3V
Name: res/aa.xml
SHA-384-Digest: Jc1TxLKsyn5i2t+d2WgZgkKLKYLB1Js0/+Dv23iiP0DzFPLevtobCu4g
7fomzofB
Name: res/Bd.xml
SHA-384-Digest: QulHIkQUglTz4pdNeovEaaLGqmet3kHOU8dV63b03f/vnmmo2S4T0wtf
Jf/Czm/o
Name: res/VO.png
SHA-384-Digest: PHighKEEGnh4eR+8my3jpa8JxmLn+4KOwQQhmEr0vVubTwsm3h+iFkgH
pszStuVK
Name: res/UF.xml
SHA-384-Digest: xqm1+S85CIH0SYtx45ZPFMVLdrLnut25x2cOk3/ccgr8+5CLVXSrdjAD
LR8WU+jM
Name: res/ln.png
SHA-384-Digest: vdh8eKziwRyWOQ+a37Xe5xrMhRsI7PjVe0Fk1cUQTlRZDsu0BFf0XAR2
0lv53imZ
Name: res/ti.xml
SHA-384-Digest: 98PXSqXmWTXkaMvXkSBcNM2ulBFPF2VPoXCRoWpvH+ooSxQfWHbbrM/s
PaxfJ2Q2
Name: res/uJ.xml
SHA-384-Digest: 0g7DOKLgvrvy1LdI2c9sz7fV65BRuJs5mfdo5AFjV8i47sottA20EhNB
oaLms7sN
Name: res/MF.9.png
SHA-384-Digest: hhcvZfo4Z89OZzuGhkRSh2Z5SbNlO1oynoXtOlTgNODJ+dSxsBLt7y/y
fMLWwhYD
Name: assets/dexopt/baseline.profm
SHA-384-Digest: qD6Hu9f81hsDXFvB8fKfAtsjXn2/Y1NUrM/ug1F6cbXmN8v1W0VYDZLh
8C5WpuBJ
Name: res/L_.xml
SHA-384-Digest: LRhms+ng1wfhig0jlz4bVkMUm8TXjOTUSLX0XxaG3tA0baKv6352HKI1
1RNo1SdL
Name: res/color/mtrl_choice_chip_text_color.xml
SHA-384-Digest: V9ajQKFq0bq0HF7gUJx9fhJUBahA9ZUK137tqfYj7I47khQzlPXaXmOC
gRycSrAl
Name: res/7N.xml
SHA-384-Digest: Zsg5fdbunYUT7kuu3P4gbQI2kuMOee4htMxE7rOrihIj1I/UaqyE7AI9
sLyXBf1m
Name: res/TV.xml
SHA-384-Digest: lFNUy/RsgiHe+vdymzKz3nMLUsUnS8VBxXC1sMMeA6GNfv6W8E06Gr8L
TLLkGjTE
Name: res/U7.xml
SHA-384-Digest: PIQ2IFrn63YxxacPV/oke5n69DaSkQ0ukmNTfLE277L8EKhxvYiHkPYn
zgmlumzr
Name: res/color/mtrl_btn_ripple_color.xml
SHA-384-Digest: oF/nm6tdsOyygE65HkONxMKn/qimJUQBGJTN4EPFYfdCT8Kk0vdKspgv
BqXgeLn8
Name: res/sS.xml
SHA-384-Digest: BBah3KG+UDpPdETmCcpWLEa/Z/qFqXPY0IP6/zAJwq5kJKmuQcIPCz2o
Lmj0kUSf
Name: res/uO.xml
SHA-384-Digest: /HNbBdIu/OcgPaBg4kh9xKzK9wNK6KW4IjVEgN6lEzHq5YVnaWVIEhRv
yxOh6Kom
Name: res/yS.png
SHA-384-Digest: AMbwox1IT70FrlBjfTEWwBHMLgdmL/1aNcbqBRLVJRr7p9cvhisKUKxP
Q5RiuBs4
Name: res/271.xml
SHA-384-Digest: DEa+qXk4rmD8OtM/TZ7H+DfFYBRdCSQENiyOhmKFoAtz1gO5LNhcvmL5
68g0Ob22
Name: res/GD.xml
SHA-384-Digest: usPdgpTP6CmtKwjF2OQ6EmPxxm7EDdhH6oE7XNribeJMhTNsyuPRy7MY
KFmMOwy5
Name: res/2f.xml
SHA-384-Digest: oj2cTk3F4addP8BuUyvdXoC57UvTqzKEqSW4MN6WFcuwf2rmSsPVEdK4
yyFfmddT
Name: res/zn.png
SHA-384-Digest: aUYrbXuyRzf0i053TP+p1u1cfhLOoNnEISljCtR5enXGMXtwAu0k+V4+
ig9EPLWU
Name: META-INF/androidx.appcompat_appcompat-resources.version
SHA-384-Digest: OJdKqS7BPvMDv6kg86pDe2iIdWwRyndLoE905Go0NVlmkCVwueaF6s8F
ScPMFpv3
Name: res/color/material_personalized_primary_inverse_text_disable_only.
xml
SHA-384-Digest: yyO9Q91DyiZRVbz40krRnbZUpG42a2Wb60DZnLje8TLgOLEgmrt9PKPW
l6Kyombl
Name: org/mozilla/javascript/resources/Messages_fr.properties
SHA-384-Digest: EeLPboQ+1AoD1r7LYmcoUejNrSFv6ZenOlLA0gnkw8LBt/6mI48ue8sx
mzdnnGfq
Name: res/color/m3_icon_button_icon_color_selector.xml
SHA-384-Digest: 1bSxdLHe4o022jUV02QxZLgSBK8LzgcgdfkZa0ZCVPVVNJAFcx+yeqMw
vJFnXmJ4
Name: res/JT.xml
SHA-384-Digest: wqHI24BmsrAr4W0Rywyik0xx/RxeArZ/o/B4DWByEw9GPqlLhQBlXAJ+
lwUfjMun
Name: res/K5.xml
SHA-384-Digest: IYLMcbEYIrlfIK/t1h1At598TcbLTaf1a/436I5vgrXfUaCBe8qrNc4l
rip6mdcf
Name: META-INF/version-control-info.textproto
SHA-384-Digest: 8BGGu05iYQawPwReB6cgR80rn0SsXmLFoiAbTxjCNXqRu3VEtPr/9c/x
spX4ieUG
Name: res/7s.xml
SHA-384-Digest: gGqIL+TWb2rUGvVi2SxxCAqnoJ0YX42k0cdGCUrkdN3hJ4tIsPVPYs5+
XfwPTZep
Name: res/IX.9.png
SHA-384-Digest: BU1xjQwqtHeUQIe9Wdo6k5lYh0EjhckBmz530dPfQlSJKkjq/VyP30xg
WWGhdsGz
Name: res/color/m3_efab_ripple_color_selector.xml
SHA-384-Digest: kZ9G++ybPkQFCDP8F/WO17vI8wU3tt8HSTYrQZ1C8JpSo25YYDsaA0+W
XV9ytY8b
Name: res/ha.xml
SHA-384-Digest: xjwVjOQd2ksc8hoo4qAwp7XQyTQqmAPrSCsgZgMbM8hqQ/1/BzLBBU0w
dye47D7d
Name: res/MD.png
SHA-384-Digest: a4v823Cast7TPrKJhcK2tl8xIm5x9H9vIUcMy7HcsbPWZZ6h/7OjNF7t
eyIoJ7tK
Name: res/LA.png
SHA-384-Digest: lxqCvKBjtUnfalnmb8+Yq64lJ5eaWnepBpznDdqj0Kc7jYq/TT7KKL9T
NipHBCVD
Name: res/gM.xml
SHA-384-Digest: a7TG8YT998crIDMlqpx438qm0DT1eULBcDpvirEAw59yJSOUI2yb4AeQ
0Xi7OdYP
Name: res/Ap.xml
SHA-384-Digest: J6gUIRhBMqQ+pM/9zRm+xiQCcK6WnULJDRJnej5t2tCTunqTRlUho4Ii
QuxrisID
Name: javax/servlet/LocalStrings_ja.properties
SHA-384-Digest: ldPOPoZW5jwIhF+AuIGd8oDzz/6DFBGUKm37f+bLyd58PfMu8Kg23xIP
+9XSfCId
Name: org/mozilla/javascript/resources/Messages_en.properties
SHA-384-Digest: cdnmdGqgjmEgQpRH7E2k0sB+UYKPY4Gtt3fO+Aja3Le6gQQEX1ujXC5Y
il3op8sX
Name: res/1v.xml
SHA-384-Digest: WgmAikX2LxhHIiJRdUcDgT8Gz8b/5ehfDyhJYvz+bQwRnMGqmdM946hE
CRnkQier
Name: res/FT.xml
SHA-384-Digest: bB0EwZaxCR55heU3xJ+oHHZMbf3GY0IIhsYhCiTS3icAgNpe74GYBrZC
j9bqlVfQ
Name: META-INF/androidx.appcompat_appcompat.version
SHA-384-Digest: kAeVEStR/hlSCxBeSIj8tg6KO5B6H2ciuyj/wYR9+2vK7KfRYlxbTPvg
+NI45wJ9
Name: res/OM.xml
SHA-384-Digest: G5QhNGMLKoLHDCktlDUOZ8vl6isZWMXYQXulFur4QjZU4Jq6LyAwAM3y
GEquz9Kl
Name: res/color/m3_navigation_bar_ripple_color_selector.xml
SHA-384-Digest: 8uLD0TJySMfJWUXyB6Z7LlZc7f5wNO3DULqPr0Ts3KABbzKzTBmo/xr0
8gJe6rkg
Name: res/Ro.xml
SHA-384-Digest: YDOD3u5VYMEx0ZhsL6fSWIQRAmw2Wa2rm3WLEmth9kQVGLalGyv5Jukk
59dRWW3a
Name: res/color/abc_primary_text_material_dark.xml
SHA-384-Digest: eox6hNOdHqEnMFmI+vrvoYfc89FtHyRptzu9PrtclELJoWJ+pPC4ZOGR
FYgReGt5
Name: res/Vv.png
SHA-384-Digest: 2tTsPlvPCvusU3oTN8sFCUq5qHpeHsIqc+SnaUwYKnV/PrH6jiasAWB5
F1FNBv95
Name: META-INF/nanohttpd/default-mimetypes.properties
SHA-384-Digest: 4gHl/iwjjc3Lr5hOpPr/Lc6luYV9cwnnLwbCt1QOI0SJqkb/QnbXAOSo
G0ghhheF
Name: res/vT.xml
SHA-384-Digest: n823EEjy8z4oJ2nPKYfriMYwlmcEfRwORPjBIqMkDPyehzSxEf4S5fEX
xNxaoggK
Name: res/Yt.9.png
SHA-384-Digest: c6DDAvYGRUAqbaD3GisSQiSTuhsRyuWcCMQAA7kVCzhvPpv+bSO7dq7C
mu48wDfX
Name: res/color-v31/m3_dynamic_default_color_primary_text.xml
SHA-384-Digest: JA/qTwNlDgJBICXe73GsLlm6bOiSeDfjFZ8ZW8y9ekfOkHOIAo2jonWg
9Asaxk9W
Name: res/color-v31/m3_dynamic_primary_text_disable_only.xml
SHA-384-Digest: BE7E/tTYXXshSDVgX8mNwpRNoAGKqzfXD1suTho5JppJFUxP5sBSEBuF
ONW/0tNL
Name: org/eclipse/jetty/server/handler/jmx/ContextHandlerCollection-mbea
n.properties
SHA-384-Digest: 9zCcSmWDnDwXsCSZNjvdp+WDmXB/3hy7lngaqD/JIxxHelsQN0d9D0fL
rB7cX3DM
Name: org/fourthline/cling/support/contentdirectory/descriptor/upnp-cds-
1.0.xsd
SHA-384-Digest: kTgDYvz2lTwrxTIzRwSozH3bkWKPBHYkv/E9BprEvUz50Uz35UDIh4MA
WZVYriVH
Name: res/dt.xml
SHA-384-Digest: kBn6WPeVXuFtmRxcjyXTCNhjMJuLw/Beo9ijYwOxq+3g0AAconJZQeky
KinrSIZ/
Name: res/f6.xml
SHA-384-Digest: tqMCWPsj4Am/3wgUzMSspZ/Cu/CDMfzkV+9LQXTa93VYH7ZRl3Xp/DAE
LiFxRula
Name: res/DG1.xml
SHA-384-Digest: E56ySTGoIObm0PgTyfaVC52ti/dGLpb2yWGz7cg+dVVB7ZiuPYGQcWY3
y7JzV8OM
Name: res/v4.9.png
SHA-384-Digest: S1xOWZG/PBejufz7COaUpPJ3yGSfYkU3KtoHCiYPpf014JmphyEivR49
wNCU8PV4
Name: res/j9.xml
SHA-384-Digest: hAWfboxeI3prFYkXi2LDck8SQqu1fMPZLLRqFjxCZnWUL6Xxwxe9klAp
HtUDbplX
Name: res/hR.xml
SHA-384-Digest: AuXrT1SE6PVBWEVfWeqyz1BktVmUcyzPIn8zqp0ltxYrEnGPodbV+71a
lc6dwJ6T
Name: res/X3.9.png
SHA-384-Digest: WvaqHpN2Bnb0xp3MFKdIdJI2ZipXg3roGP7coIkB+XrkEdOAdyJU8CeH
QWOe9NAg
Name: res/yQ.xml
SHA-384-Digest: ebO9zr3IR36wMMFlteXamhYOH3FdtmUbib61Vxa3YLV/NJXi6nf7pEGM
AMD4k02v
Name: org/fourthline/cling/support/avtransport/metadata-1.0-avt.xsd
SHA-384-Digest: bGfABkBPwkZ8D41yi2V8QnPAcULZ097m5hMlbDETwHVV0MZ/1LPpoR9/
eQ02DP1Y
Name: res/color-v23/abc_tint_default.xml
SHA-384-Digest: 2n2HOLN/UCDLk/4wfgKNdJd2/DiOgNM7Jm6pPcgcwQL3o7Rg4cvsMWyV
D0u6QXsx
Name: res/dO.xml
SHA-384-Digest: AAz4MTFvE4SMWxIaV2aTm9U5CBGXnG3JqYhQCC7NSY3sDEYga55IiS9F
rI7hNCjl
Name: res/e0.xml
SHA-384-Digest: ROSebSjhRGNfCIm6y4EdgxYQCLnbl3FJlAigpOcdE1Lonv9wdyFiueQ+
vp/3KzmG
Name: res/E5.ogg
SHA-384-Digest: CXzByAtuwXNwesTZSSC9tHO2B983WpGzlu4Kq+OqEV4ZwRPccGm2JYx/
ycrw4WO7
Name: res/tI.xml
SHA-384-Digest: 1V6QpVRKttjD0w3ORjaMXq8iauxGAT9zTro1ji6BPqHhYyHifouXW+Qf
YczWyuHd
Name: assets/images/ic_push.svg
SHA-384-Digest: 956E0YnoN/UhIzgAMIj39oB1wWY+yMkX47sMQ9q/5id5CtoI7kVRwdMf
ohAAPrwH
Name: javax/servlet/http/LocalStrings_es.properties
SHA-384-Digest: pDXy6tM1dLDm/4diyYtl/mbl/7JQNZhfmMxvBgKfrc8qArByZkQbQt5T
mYUmcKgg
Name: res/y-.xml
SHA-384-Digest: tk8VStD3XV0PAOmRNdlgKMsN9UVjct05SHiI+j0dN8/zapcauM9n43o1
gsT/4Pg0
Name: res/Zu.xml
SHA-384-Digest: fSCBWD1OvLX2l5i8cEn3kq6EhB1EGIIKR7mWdxreub9awV6mmy2+QyDN
EPfXAfnO
Name: res/1R.xml
SHA-384-Digest: BRv/2LFCbDWXBmIPIsmgpshgNZdfBmwJYj9JXRm6RippDLPSwLYBlFVZ
15a36gz2
Name: res/color/material_personalized_hint_foreground.xml
SHA-384-Digest: mi8LUXnGIbpdAeF83QgV40ekbIoY2dofKTOuqd/Tiz6w7ayDveqPdonB
QYDsbms0
Name: org/eclipse/jetty/servlet/jmx/ServletHolder-mbean.properties
SHA-384-Digest: 5x/1ar+n5q1XAbNHOn8LlMurA1DiTuOQZf+WhBmfA5N4FB/XQZj/ecpa
glnSFEM6
Name: res/NH.xml
SHA-384-Digest: +4VXJe5WVGJDIxkcuExdyiuLtt1p/WDfHhQ64U4ZWuroL7qKnl3L6ad8
/pdm5n/u
Name: res/color/m3_timepicker_secondary_text_button_ripple_color.xml
SHA-384-Digest: sHF+aMBDCwro4Q2nnBdkt779E9wmeefmp/SFb5z/3Tqk2nexRdXJ2JJd
Kz//FYtG
Name: res/Id.xml
SHA-384-Digest: VIYJAgRXDNlZRs/F+/6S4oYKY/vW8cAqxlIb60N9usunqypEsWFd8o4n
TF72Zzzy
Name: res/_G.xml
SHA-384-Digest: ZgK22yB6xbSDEZFvSepqq1yh7Nn6xdwP9zCcnGZ4oVJM/8BDHPd/cmuL
8IE6lW60
Name: res/oe.xml
SHA-384-Digest: nMftZv7ybY0LATGQj62DJl5USk2GAVt59nuAOCAARWWXXvFu0uxhMYAp
Q3xGl1/o
Name: res/pF.xml
SHA-384-Digest: ijytAkmxTNCVTfPe7LSBX6fpyxUVbLwrKQSCZtK+Dc62s4CK7bEg5D3U
o/NRaWwk
Name: res/Zc.xml
SHA-384-Digest: dJZJ5Of3LgANMmKmuBNe5zpzdFiddTdoF4j6L7O19cYS+VEcyirs5zxH
U05Zvjn0
Name: res/bV.xml
SHA-384-Digest: ffvKKHyBwY9cA1EBvcjIJq2jvH2tEe6NdUavxFOHIon8nlsgqYVEp6pd
0R/X8G6r
Name: res/CK.9.png
SHA-384-Digest: Ddxrc+DRv65I1IJo3eZNA9N7l/kSkriVgMET0n/Vo2saT2q2eUnHkpGI
LjXO2o5B
Name: res/KM.png
SHA-384-Digest: jsz28lJFi0YLCCnkeBC3LL/mbRWWtYOJtaMa9wX35iUo/Dzs9wIiYSSC
IZsojq5k
Name: res/3a.png
SHA-384-Digest: 9OvixzYh0jUCkkjpGCd2PdU6z+EoAinhAs49Ryt0+6PEhOQ2AZ2bgq4M
HNeDOOaE
Name: res/kS.png
SHA-384-Digest: njdTYNcGfjv8yBv89aupB2Si8U86NlCE2+lCFWr2zFEwTWv6Wtg32nex
+UgWkMZ6
Name: res/7R.png
SHA-384-Digest: NamsrZ5G/58ofFDWlMm+ZCXGaJNHmPiDmC6fi8iIlh1V/rHN75Vh8y0w
ZUWkVJCB
Name: META-INF/androidx.cursoradapter_cursoradapter.version
SHA-384-Digest: iwEbL14KRTjjGGSDLpcoAQLYeIY7pP5kGYGf0Udn+Kf4tShyz+RN1Wm+
YvDKq8jD
Name: res/t6.xml
SHA-384-Digest: HT2W/formBf/E7fHypvmsOFUUFWMPPh52r9qoorKNyzAQZrjF6npoOMF
/2ZsXHE4
Name: res/HQ.png
SHA-384-Digest: 1xhlGiog30L9vr7Q3tCZg37wqjfRTBj+5MONRhzZ7EIAxbuotLcvclG/
uN+mryMs
Name: res/jn.xml
SHA-384-Digest: kEGvDwW79oD+EsFc/I296fSS2ygDy5i72P9tiU4BTf647wocL766Uho3
XjpNCMGg
Name: res/VM.xml
SHA-384-Digest: WimHL3t5ShkUGDlszcg6B9RsWemepqyaEAC5EhUXLQi/EbfrT4WdpXyn
LZwdUD9V
Name: res/ZP.xml
SHA-384-Digest: 7LQ8bcqEztRPU7g3oK7TMCEVJr4pVjdhky6QtRb78tZamTGCcpJpb92f
vcfZjfIn
Name: res/IQ.xml
SHA-384-Digest: vxuDeBHkVfMuiRMhztgaTiYw9jHnXGPiw4zIYrwCn82dr/lqiYGkLRML
qwnjcbiq
Name: res/Wh.png
SHA-384-Digest: Z5rIEDCCGzcRoeTNuHTWWUjRIejbsTi9Eo79vqtCF+RkpfIQMiGWxJnU
WOzPy1Ur
Name: res/color/m3_tabs_icon_color.xml
SHA-384-Digest: S6QzIrEVdABYH8PCDoGSqUFPdUXBc50650ggFxnRw8eiPFmsKbFz6F06
Id7CJcEl
Name: res/wX.xml
SHA-384-Digest: tG8A5UzkOZ9n/2O0TJiHJZcGzxDzJCa2TcATkr4m/5mn/uA2QsZeX5nC
ZGKZ5728
Name: META-INF/androidx.fragment_fragment.version
SHA-384-Digest: WaypCM+yE0/1Lb+EMCSkzaNk57favewOEwmzffOQoEvRXfArrgTV79aQ
8FdxRAee
Name: res/0c.png
SHA-384-Digest: HUzNT619ucHhlP+lzbNxxWWQ0ZTizT7kfCoTny4Mo9n63rq2QDh1Am8R
oabzJHQB
Name: res/UH.xml
SHA-384-Digest: Ms4XJ0ploThzV9AY03Px9yxMBd4mQ47D6QV4CNHbi0QgKKtrORJpqCSj
XfzqPCmH
Name: res/Pd.xml
SHA-384-Digest: 2JQdwJ9CfsSc6nZCc9xbjV3Xvg8KOhZYBCKOqR6gQOdkQESqkYHCUDE+
ibt+UqWZ
Name: res/PQ.xml
SHA-384-Digest: S1r5g93s5Tw4dXq7pcG/4XnzDvDmOi868kqZKW01RzRNU43TmwOW31gC
UnkLtH21
Name: res/Gj.xml
SHA-384-Digest: NoH2AGgnlgs60cZpd5A7VL4AiqLR11kXwgQWOQSW5ZSjo1BOMZKM8cUX
A6j/NVYJ
Name: res/hc.xml
SHA-384-Digest: sj6CBD0OZ4A8/Gl0Paz3yFMycve2D6ERIS7FhshHRDN/Yt4vxhz4+Xzc
qqiX4AVp
Name: res/iD.xml
SHA-384-Digest: OMbiyTOd/SxON8IVpjWoK1xMWUfFuM9uXjjYTBliybT0lq6DdMBthvm3
wrRO9Gju
Name: META-INF/androidx.sqlite_sqlite-framework.version
SHA-384-Digest: 6IDSDC1vT4Ya5La7JtumIJqHtTGPA5F9/XHq5plrXZWR1V4XSJQwJJj2
EiGhrl42
Name: res/TB.xml
SHA-384-Digest: 3pbZnUcuOIEuh0xTm5ehooDVajdrvYqIXU20TmHQDZqQBBoniStswmZL
RSwQQYS5
Name: javax/servlet/http/LocalStrings.properties
SHA-384-Digest: OxW36VtLaudlgmgQzRrDaSqud0gf9Im7DN61MynEuzxj8rD4PWGEi7TG
Mxu7gCz/
Name: res/C6.png
SHA-384-Digest: 1zMQeWRqm7kbVz4Plfzbmik+MoJl6kgHIMkrZbjOhBD+oTIgv0H3VZcf
ltExU26R
Name: res/color-v31/m3_ref_palette_dynamic_neutral4.xml
SHA-384-Digest: DwEsuxTKLU6j9FDv7/z2aXCTV+hkhtVzPwXHxefroY8RJ4nCb2ude9fb
vqtTt91Q
Name: res/mG.xml
SHA-384-Digest: 0I9XlNIH2gWJqIaAfdZX1n09KWn3mEkqABohcaGomkWcI2QtidOpwXXy
B7QhlaXC
Name: res/GF.xml
SHA-384-Digest: Mf9AdZzw7FI1nJAK8YKck+stePQ0FsvVcQDA61GL7Y4n3TNndWHhXIo8
AiRf0FQ0
Name: res/5T.xml
SHA-384-Digest: 5POTljojGKsj/0k0xCt5qziElBDcwLMeGQ/bZ6ZNBV0th29wjTMdZKhy
V74yeHZE
Name: res/JT1.xml
SHA-384-Digest: Jfgai8ZTqgy6TFVA642Grq0iTa9nJypicRGJl0a6ZEyZzQL2nyMgq1EE
8tovTs+i
Name: res/K51.xml
SHA-384-Digest: JG3DUO7Kt3zo9DuDGVC365SscNLDZ2O0uynCPFd6j50coVZNqX1pTVJK
eyelECqG
Name: assets/test_base_module2.mjs
SHA-384-Digest: TPBfnFeHeut9Gr6DuVkG9rf/0I8H4G9OG9rVnraL5X9PutmKlFrP2IJ+
2R7o4SJr
Name: res/color/mtrl_navigation_bar_item_tint.xml
SHA-384-Digest: vPPCSuEglGsc7tikrWOZFZ8y0K1D5I5yWgu6f69gC+rQObQM2aI1GRsx
18FMejWc
Name: res/RI.xml
SHA-384-Digest: LhlZawi2x9MiED2Eabg02315gsZMWSQtD1AOvOsLT7vZ9xbPX1b38QLk
ZXc0CgR6
Name: assets/js/jquery.min.js
SHA-384-Digest: HPjBztVW0JXRtVcaiYJnhiydSEza3czwe0ZsznS6GSvqHJx7LUHCpXsq
i/YacynG
Name: res/aW.xml
SHA-384-Digest: Gy9iSmufS1vSUCjW3cZVkCgQUwBOSn71sOp2pHe4T1Vc7miPYWpVPZ2r
bFuHJYAe
Name: res/wx.png
SHA-384-Digest: ub5qu0BaWbXRFvNYhmX0aPJWTHSZYdP4fA1qTCEHsiNvQRhn6GOE4sO+
ZB717gWL
Name: res/21.xml
SHA-384-Digest: 3Qu0jrxgtr6qnA87w1YR7TbIhFuY6/sk8KVxlAZF82+GzBrzPVp4bqk6
wGhnEIfn
Name: META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version
SHA-384-Digest: bFAhyh9d3V1d0FXWgCKZvHdVZN7em8znzQq2nqmY81U5FbJflNIuw4fS
Wo85aqvI
Name: kotlin/reflect/reflect.kotlin_builtins
SHA-384-Digest: gHv4UYWuNoxyS3oQXI6iRtEN7p8OEhziLIWy/KaBiiFld5NGBLWkoTxf
5gvvieZ0
Name: res/rH.png
SHA-384-Digest: GhI5GTelH0bsUxoz4vEoRFeV8zqEzrfkMQOS1L6Afo2TMw9nn7HFjngB
EmeSALs8
Name: okhttp3/internal/publicsuffix/NOTICE
SHA-384-Digest: E2IcMHFXtxCg6EaUkh/2/MIvgHaPppEDXt5W/wmFfBoQ2+UkKOF62Oi1
r5mDC+NI
Name: res/color/mtrl_btn_text_btn_bg_color_selector.xml
SHA-384-Digest: XgBP0M3I5ArmybDFI4nzvBegpOa69VP9VmO2VEU+q6B0o34BehpXx+Kv
6anh5Q2i
Name: res/4N.png
SHA-384-Digest: Nen8rucT+wT9qEQJEsSb24mt6X7iBE96niN+Q20FU65bgXl9MpupwM4/
ef/4cNk9
Name: res/xd.xml
SHA-384-Digest: v+fj5MexJd7Yktmmr9TSKxT1Kr0+LIEmmr5xYNBZk0yzf743eoKbukpY
l/1kytG2
Name: res/hu.xml
SHA-384-Digest: iRF2EYIFIFU3UCsN50SbueM5Tp3CQAy+mqOCa8lswlIDn4bldyfPiZWk
sgJWvxyZ
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant98.xml
SHA-384-Digest: tPn0QsldesaIz3f0ENQO2pfUyikqSQgSggKwya7HG87SMhODkstOcf7t
vOjzTvx9
Name: org/eclipse/jetty/server/handler/jmx/HandlerWrapper-mbean.properti
es
SHA-384-Digest: ziIMndzJMWCjUWEaQacoDnbHjV/Y4hk/80m3v2G9OIMDO/3vYLEomFG5
Gpggc6fy
Name: META-INF/nanohttpd/mimetypes.properties
SHA-384-Digest: oytHJyDvafvInI1qt8z/2ps1P5EgDihBK8PrqDYVO1DZIs43fK+WhSZc
qEnvhqOV
Name: res/oN.png
SHA-384-Digest: nltuuuKF+gscYuWUsmMJgOu6hddDxvm5GZhH52PYladwXzLVpyKTJWwM
/9IsmZN3
Name: res/Ix.xml
SHA-384-Digest: GthjlHbSlUPlenRvioR2OPo1ysY5EyJYV00kkWmqVi+3PM/WLiws+0YX
KLc2MtV7
Name: res/color/mtrl_btn_bg_color_selector.xml
SHA-384-Digest: /AzX7wlEQGjinFVOeZJxErvV5TnPHLygMxQ6HJ/s5yew08aokP9XWzFs
ZkQYtj9k
Name: res/0G.png
SHA-384-Digest: iMIrO9A1aduR/kLkPBnOglmhVn9WYIisz4ype6dqWjrAx2VsH78RNTJT
Ds/JxWoB
Name: res/color/m3_navigation_bar_item_with_indicator_icon_tint.xml
SHA-384-Digest: nGCX8F2NCgOsWuXeFy+WGvw9z1XPtQ0Hh+sIXRwdWtZhvAQO8LC8nnbY
yzuQKS46
Name: res/c6.xml
SHA-384-Digest: DYo25oURnmxdolIgUywysb8/Xb1fjDDAz5NsjK4tDp8eOCLdTlwdFIUb
L9HtrgVB
Name: res/color/m3_hint_foreground.xml
SHA-384-Digest: odaQx7ihuQhmseYmzZz12NjiiVlc4wD2LsHhT1k0EXSxsmRMrgxQm4fV
OCZAcQWC
Name: res/dQ.xml
SHA-384-Digest: UR1ZwTHm0AEHmuMNjfk1lyXO2NYLZj00lqBz7JXRL2UWg7fNjGXS7One
HQIBiZ1t
Name: res/MH.png
SHA-384-Digest: vGdzcYlOhjDqTv1Yuso72u3JQA/xGJhzz675bR8qaxWymzCJbHluvigR
6PkBqR+8
Name: resources.arsc
SHA-384-Digest: tyC1sRThyB6d/GSSxOQ2LnU/RrAat+0JZRmS8IeoIaoRGT9+X6/EzH+4
MbZ1UtEH
Name: res/color/m3_selection_control_ripple_color_selector.xml
SHA-384-Digest: JYFmYxtHEQnfmx6Pd6hVA24uKPBNdX8mUqR1UQTizpKd0nMC8U1iGrW8
BrbpXA6p
Name: res/QZ.xml
SHA-384-Digest: Bi8eTgF7LaTRqdpdt/kCzKlxZzzMHdqSXNiXLPUL7UILzDu2WtzCNrvc
ERDM6tUn
Name: res/u3.png
SHA-384-Digest: Ni5BMUKFdqjLbYatiZDPKP5u0co2w5R5fVVdKfNcbP6YFclU8FRvjeFP
E/5UjILF
Name: res/color/abc_tint_spinner.xml
SHA-384-Digest: eAg4pl09lgDPpJCCBlaE65lv8XaTgXsgdinWtmaMSDm/4QYy2evleEaY
ZZPxan4l
Name: res/SY.png
SHA-384-Digest: OMwQtZEHsTdjD4taciTPFrsz45rr8CiUh4EZxFFnSeL1Kh2hGzmyQ4f6
YRS7K5Ls
Name: res/96.png
SHA-384-Digest: O3JYNMBWEXrM5x26qN+I6jkrDy6DcFLndD9r4OHR83EVSlPl5qVqPCt3
kit8vQkj
Name: res/DG.xml
SHA-384-Digest: Kx8M4Vc1tf5d8+rmems1FunfCCvf//6rzK73BcduB/ww9743GnhcprfT
cBtwVMHT
Name: res/V3.xml
SHA-384-Digest: atyAo03JilNgUOosMMvYm/qO7AprKtuH02ezuG1E3+fqPWk/HcRTyaRs
JsQBWUuA
Name: res/U-.9.png
SHA-384-Digest: 2qoazX7Mc37+3d6CY+zy9pCncnoEBU/6Dhrl9TPiycsiwxr/Bu1qyWrJ
NlKQX+bg
Name: res/Gc.png
SHA-384-Digest: /dQdbuKUp5GdfOZ8LnvMwupW8dTt7w0LVjDAVJ1jYZ1VC6jIqeCPDFps
7UJ9lU+S
Name: res/6X.png
SHA-384-Digest: zYNiojAB0QzsxIjyii/e3aFEtDY2BWwjPfl1JHOI9PkL49tdsER6Uiaz
Hf3953QD
Name: res/DL.9.png
SHA-384-Digest: dHAA36PO+M7bwUmf0Ylhc5qzmKQDD/ovE5LIT5AZz0WmReENQljJYtl1
pbs0ten9
Name: res/color/m3_button_outline_color_selector.xml
SHA-384-Digest: cyZsztrW8jLoR7n6uNVw+sTFgMWXInwGap8G+/skWpudp+MRIkLapXJx
+kzFP6iQ
Name: res/rp.xml
SHA-384-Digest: E8/L9LrdKFsIUXe1TlkkIRGysciP+qpQ7MdcIJCqV+13KP1q19KjTxcA
nA781RkI
Name: res/tk.xml
SHA-384-Digest: OqsxyB7nyp+uP3To1H8PROWaZ1Foriu26UxbDjr2hp1dj34+sgHJNtKP
5rNxAMoT
Name: res/v-.xml
SHA-384-Digest: Fg0uPt/LUllf8KXBBqxJeMJXJ623anxsAu0OVnTOzjHUEev+GS5lB1NY
ECiX2JoM
Name: res/Xx.xml
SHA-384-Digest: p5qLJBy51gX8KtwckvyKmtmuvTQMLPb9VwPMOB4iUCWH3ikapVosCtGi
yfDL7KYq
Name: assets/shaders/vertex_shader_transformation_es3.glsl
SHA-384-Digest: cUqWwE9xXk3lIqoFDfnY90UH6g3pQu9sdZjuXb2wQTohG+hBDN5dSgBU
8LwLD+QD
Name: res/Sr.xml
SHA-384-Digest: QJNbfHq/JwTL521i+GR14Za1il94Fj1oKx1IUtgenAPNtQTl8MqN24e2
uceym5dC
Name: res/9z.xml
SHA-384-Digest: 3cCYU7RRZy1IMOaawsX2eBi8unDxp5AtuKYggoNcCEH+FiJZDFOG0FJK
B0K6DoS8
Name: res/zr.png
SHA-384-Digest: K8aK80xg1H1D53r/D5BR07To94+U11iwUKF1bfDNBmZ09EHbWCiJvKD3
KZqpF+W4
Name: res/l3.xml
SHA-384-Digest: 1AjY+/1eGSCa4vDQB6VMYQWgJcx6n1EDBuudxw3xEY3eBT/3dNL7Fb/x
ze3lZmPq
Name: res/color/abc_search_url_text.xml
SHA-384-Digest: 1nB4WI4X7s8UrJXE9DPK6MxmJQ/aIYroNbOqCk/Tqe+2PQs7plboErbh
ra0c8Qc5
Name: res/lc.png
SHA-384-Digest: LUIQG9tlwE8pHOl0WVnkZpJBhhiLl3eqcnQSGKFNdOKYkVovnyJku4ay
3ejoyyd5
Name: res/Yy.png
SHA-384-Digest: H3CZhaRLR4BVlYbXwaWpf8byUJDXttvcCl8u2aP3hvFgYgc27ECteM1x
EwPTH4J9
Name: res/zR.xml
SHA-384-Digest: gKRmrMoWdS4+eTJzsR0sdQiXJ8crjclnH9QhYUQzyGn248mKN0LrUFuH
sp9Gjw9L
Name: res/Mp.xml
SHA-384-Digest: vRKGiDJAaKeNfyCXLyRmkyjWvHYErZz11PgiGv74fLicLhCQ1nfACEv5
GyNfttx2
Name: META-INF/services/kotlinx.coroutines.CoroutineExceptionHandler
SHA-384-Digest: 2a9u9oJnx6kIglXq4S1thFvGrUtj97Z+ZK85s9n67MlnFbVDB5FLiFRi
I/OAHwlb
Name: res/xU.xml
SHA-384-Digest: 6b0UpuIflcFA/T69dX6jJfYSE0wzzsHMj5wcdsfLKcUqqpaFtqK0geHf
ZH+tAW7a
Name: res/SH.xml
SHA-384-Digest: BeIilzRrjDbkCvOOpcs6gp0q6XEwlSPYObyc2LSL3rzGB4ltDRcp6OtA
ONJF/imK
Name: org/bouncycastle/x509/CertPathReviewerMessages_de.properties
SHA-384-Digest: f0P/drivzgQ6N6XTXHJlwQcF4ILYTS8wr0jYE2Izuy57CUCBcPlyXuAQ
FFr68w0Z
Name: res/pF1.xml
SHA-384-Digest: EWR0a9WIbRyNI4qi0qAyTCDIS3mHP15xyi+3P5HKZQi3ZugmWB4MOF4x
W+Ynl0vM
Name: res/ph.png
SHA-384-Digest: wsp7Lbvf9Xz3Ftmy7xHe8VIIXo9diV2IbuJxckgEtwH/u2tUtnVUeu0L
dRKBaXyJ
Name: res/_y.xml
SHA-384-Digest: 1/A0np51w7f9QWJsGv7oCU9bsPsal/fLd7MyRPX6XbII2liRMmIwWvqM
4ULZuIas
Name: res/Sr1.xml
SHA-384-Digest: BlFQIqfWy8A/lRTYOX+kT2l/lp/YZ/lYi7/57PrXpBvcYlYgY7ZVPtYE
GO7ZCcf5
Name: res/vg.xml
SHA-384-Digest: buq8+i3uR9yC/IhI+q0lLZvJc/jajC2vgDTsovTKINoMPKbk6DsutHad
o3l9R4Gi
Name: assets/shaders/fragment_shader_transformation_es2.glsl
SHA-384-Digest: 5MHjB2xLCPW5wqBXCJEqyvZdMvf1m48/zx9BpCIUVDjBVHbMN3b5fdgd
rFTuF4fl
Name: res/WB.png
SHA-384-Digest: n92KbkQ9zWPkMgJe6/cC08h91NCYmNvwwF6TySShKy1Ezon5oFkFtPm+
w1QjFbjU
Name: res/eT.9.png
SHA-384-Digest: yfF79aK9spwev7yeA3MIGOKskuC3+77nVMB+w9F1KUz77Dd0xCJ7OhJi
qXWKRfim
Name: res/vZ.xml
SHA-384-Digest: AsKL7lVTnRufDZcu+M4r+kLpSZwyTa5beAJe+t6b8Le5LQd94oIk1HSp
E4wKetLx
Name: res/M7.xml
SHA-384-Digest: 1lO3krEbpP2qvHRu0nav6u2NFwlDLkDFMGteN0xibwICmp0xuBpCMavS
+GhglUbm
Name: res/d9.png
SHA-384-Digest: IylMdufLlJy9wSRssRXdcxh0emUCuIp9W0SZPLnNGs83pXuWkD6NyWap
p9AbgR0X
Name: META-INF/services/kotlinx.coroutines.internal.MainDispatcherFactor
y
SHA-384-Digest: SvKtmQd2cD/F3QykpRUeTmKsZQLsWxe2S6oUWxd0S3hxJxH/DFDOYxxf
IBdxXt/Q
Name: res/z-.9.png
SHA-384-Digest: 6SaZ1z0WAnb3sHKq52j5PHUc5/dUlrf991KCYhzGDgse/geqg0+tWU08
FgowcVlu
Name: res/color/mtrl_tabs_colored_ripple_color.xml
SHA-384-Digest: 9bYdH329Bf4WSx597aSELNM2dkd7U2aCy7zpyMGE0pZ52epOCxdmCK/W
4vPfHi2P
Name: kotlin/collections/collections.kotlin_builtins
SHA-384-Digest: XEvrbLScsVo3XLonuMHA9n7AAtw1MmWwcW6NeSRf0hQhkKuojlzYu5uJ
IRBUi6QP
Name: org/seamless/schemas/xml.xsd
SHA-384-Digest: PalDupgU6uwToZBdzyv/U3d7fGAvoFvf/A8aR1wPnP61lUUX3fEBy4sD
+l2qtXGu
Name: META-INF/kotlinx_coroutines_android.version
SHA-384-Digest: E2tNDK/xEDe7KULnVhHhi4DR1gg+xx7i/MXJvLOghOc2VeyXxxxKgIsH
Sbd2dnfI
Name: res/color-v23/abc_btn_colored_borderless_text_material.xml
SHA-384-Digest: CQVZpPRpaqnQVCbCFuHADU2xN/kUNRpjXYPXSlVs7I0EOzJ0/8Jv4YJC
AxcusXIi
Name: res/2O.xml
SHA-384-Digest: HmalxxLeUnn/Iaz1qbVzU3nfklv4xLmOwkzJ4tIWSJ9/giL2oi1//fB7
EQxFMI3I
Name: res/color/m3_timepicker_display_text_color.xml
SHA-384-Digest: SZTdmUV6dcBaz7pnhuZsDelrJE0MPXEXf87mEEFuexZvZaQOGOgtqs2/
+bMLpPUp
Name: res/XY.xml
SHA-384-Digest: qQAlpB2Ko9aAnLuOqGkgyYWSjhS4SSNR2jxJXcI61u94VbOHNVtTsVmI
cU2D4ixM
Name: res/Su.9.png
SHA-384-Digest: zoG6eMmtdC1kM4IBkYmRyfS1KhwtX0D2HjMIoORSz5o8mIyatzfHMzKg
ENav8A/e
Name: res/oY.xml
SHA-384-Digest: HwTu151RyKm5REtuvZhWm22VaQQETC5EP+uj8VYaa5klcPdsbzTm5xbE
rtDgMBBL
Name: res/eD.png
SHA-384-Digest: KVdl+csGHMT3ts6f7fPoG36oIAymmMPAp/oQpQRcnASLDpHik+c93bnU
rOkcK38k
Name: res/pY.png
SHA-384-Digest: UthyXdFYYTigCoOinZRAmZROBZ3nFMVE9lzVULycn8AC3QeGc0Xqv4bZ
f1kDCBqh
Name: res/color/m3_simple_item_ripple_color.xml
SHA-384-Digest: Q82ehkaT+gNE5zjSS8wpylZiYs+baperM2nc3m1ib3tkIT9zvbuaLOND
SA+h0TBa
Name: res/UE.9.png
SHA-384-Digest: 9Jif6Uiq5VoTS52o31XniOgmrtpm3oDUTqmpIOQSMfTXp2lYykrHEzM8
tOgFil3N
Name: res/9P.xml
SHA-384-Digest: fpqdjsuo56u0RY5wj7sajCRkZB/w3ddMdYT5WqpSoTtCvijqljSGY/SZ
jPEiHpWY
Name: res/aJ.xml
SHA-384-Digest: TdeeTz3M0RyxsbwrkwkIQMwqN4ydLPKZy2P49jvm8P/XG/KaqwlMrggV
tsiUYKYf
Name: res/OA.xml
SHA-384-Digest: QhBBEULO4jNzfGQL76gEFASLMrfnWemzslL8EaCXaqiO6rojpb3ZPsr+
gU3T1DT4
Name: res/_M.xml
SHA-384-Digest: qNiBXagfa/SX1It3vY5wUZ1Q3AtHy369SJcSPoo0DPscGP6quHa7ioHt
YDjnjF5v
Name: res/4u.xml
SHA-384-Digest: nlNI58L2r1yGAMnqA2dxfbBnbVYLuKHk4VlTnui22qDfD8AzxGq7YRbt
+i65ElDn
Name: res/G2.xml
SHA-384-Digest: ksVtYXHwkWMQj7qIhQ0Tuw6Bho8ceUJRpEh32GbnKlsb8Sjkk388plIB
r0mYBmlm
Name: res/pU.xml
SHA-384-Digest: EuzhvELdLV8hn3naZRRNoqVWvtvXDtF0P2ltI4d17Lr6538X/rN9FEbQ
IJfE7DZ5
Name: res/q6.xml
SHA-384-Digest: 8a4NIlNqnX3kLoGwW8+E3LnCo+Z/rx+b23FHDJVqkvPUehoPn9ZoZpso
RARJ4Td1
Name: lib/arm64-v8a/libswscale.so
SHA-384-Digest: FBmuOSIVEVnaXtqTaEwStjHL4hDYK5aCP09ok97sBfgp/Nb5R26IrWZP
hvrndQ4u
Name: res/0E.xml
SHA-384-Digest: AUrFVHjbnZnWQBr9iX8UxZVbj8JhZGjPhyVkWWYVZp6K1y6ZTmX9We8J
FDDi6Tf5
Name: res/fM.9.png
SHA-384-Digest: GN1Y8cnvdD4O5S8yhrFSAeUy2p8YrXqHpiebwGXeNEKPLd7u5qtCi6u1
9gpZmFNT
Name: res/A2.xml
SHA-384-Digest: +8N9+DVZ6ijvvFjoIyOuSpL/68wwoaEYrxY+XBjxxivJ3KdbniXsPxGv
MemJMKFq
Name: org/seamless/schemas/xhtml1-strict.xsd
SHA-384-Digest: FlX68nGnFfC2i4abn9WmW7n0+BCdyv0RiINdAuW3IeJA4YTbcfdTgJg5
waYodP+6
Name: res/_h.xml
SHA-384-Digest: uyu3u4MUt5S3f50PcDbRp25IYTK0H2j0cFlZZW5lo/M+mrKxYECmtQgt
lKwhavq8
Name: res/color/m3_navigation_item_ripple_color.xml
SHA-384-Digest: 739IT64H7oPonQfLPgG9JqBHLNlUmKmT0ivzELrXNPuoW2ucG+QjpD7K
HT0JWjD8
Name: res/color/material_personalized_color_primary_text.xml
SHA-384-Digest: wD5PfJm1aLvT67Awz+oXBFmPsLGVa6aDQcZjlSaOcyOmVJnn9gRRrqUd
czX7eDJ9
Name: res/hX.xml
SHA-384-Digest: 7xPzIXx0Kg5BBI7+lPyJoSnaAbLjpa1oT9uV86s1nblVxDPZJbFxgnH9
UCTpg7V4
Name: assets/js/lib/cat.js
SHA-384-Digest: hORSn/8IrZK8DC5OL/ZovIu3Oh0zqKqrHGFc2NmdKpIYkci3s0G3CRle
6xXgB2bZ
Name: META-INF/androidx.viewpager2_viewpager2.version
SHA-384-Digest: 06Z7BpcrmLDRxSNmu3rjzKNpJA/lJSra2enFEuDoDmidzYXhNuiQy/ox
dkJitN2o
Name: res/BN.png
SHA-384-Digest: oqMJ6GdTPTkptVOZD1ftHQxOb7LRpeqxiTGNrPVFi86zfwzhYVFHpSAU
17OBzCak
Name: res/Y-.xml
SHA-384-Digest: br97xqkfpQcqE8ay7CELE7ArpcnRWAe2Ma2SFpE0+EXn1jWSo9uJHbxO
OIjoxMIF
Name: res/color/m3_card_foreground_color.xml
SHA-384-Digest: 8WaoUIO7O0eBhmWN+bKW/nC9UvsKAtMU0+2ilSgqJ1IfoT25DyCzE+4f
QzgUof1o
Name: res/fR.png
SHA-384-Digest: C/wG3Ulm7smlpss+jA0fN2Xk9dGFX3Ipp3syugR5RXG8JNOif68gffch
8HZhUkqE
Name: res/Fq.xml
SHA-384-Digest: o0a0VeNtfPFk/RxewE90gj7tZf4HM94u9pCwz+muDm7pS1qUngSpmj3T
Q1TDEHod
Name: res/GR.xml
SHA-384-Digest: 64SV5E7exL+5JyUCAJWFCMyROjbcCC6vKpSV1xjjJFVwE3PJewgM6Fn9
RU3Bhumf
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant96.xml
SHA-384-Digest: Si28kFVzFijuQbc0Ga1tMtEMbrqCrZe7qcluIUC+LLRXssnovQZf0nt2
CIaFDEPu
Name: res/9n.9.png
SHA-384-Digest: LLLzU9mI4vNUCdWARRxZauITwJUjwfttzE/NdDWodPniOlj4hCdlySQO
vMZjiVyP
Name: res/UE.xml
SHA-384-Digest: VOaenWSf2c8R1giPFCiiAqje0bFMPyxwDW7hPqRZbBPjvMlw9RBaoQB1
NSrLH8tI
Name: org/eclipse/jetty/servlet/jmx/ServletHandler-mbean.properties
SHA-384-Digest: NvS/IWi5B9Ok6bdlI0lnoW/6a9IHBim2QVEW72pJjde4G1KVmxKsw3tR
+RZdqhAi
Name: res/cr.xml
SHA-384-Digest: D3V1r7NWKPUqdfdR/AIl3QNuS0Wzm60Nc7UA9YMQzBg8Yj5p+D2MmQUe
STyyX7FF
Name: res/dS.xml
SHA-384-Digest: tOkjcedgmvBKXLvWEq8URhvgs8Rd/1Gt9eolCXLDQFUSq4re87rb2KIv
BYe7ZkWE
Name: res/color/material_personalized_color_secondary_text.xml
SHA-384-Digest: eA7+BFPpOqfitYZILrE1rkAXZyyvqMD9ziNITXffOzMp0P/mizWDN+v8
9T6gJ7X2
Name: META-INF/androidx.transition_transition.version
SHA-384-Digest: GvR8UHp/YwDMBARXx8WHytVwBltlxxZTHrhWhzcL780JGryvIq5dmp9d
g93lndjc
Name: res/By.xml
SHA-384-Digest: L+SsXawroHqfB1/7MBRgKX5KLCw01R5DjiChBJefYrW0c/jU+/8c5wVc
IjurQxUj
Name: res/color/m3_radiobutton_button_tint.xml
SHA-384-Digest: 3PqOQvIOnz0bmkp7FeNBgczjlwUZ6tOM7emsd8Lz2RpkVRlF/tB1h9hB
QZKd3DBQ
Name: res/JJ.9.png
SHA-384-Digest: +Gd9PQiz5aA6tiZ5KEcp4fRiBas3Zu+QWWiRESFxJ5OhUQpxMXouzcw5
u6780AsM
Name: res/lN.xml
SHA-384-Digest: 1MNPp0x+ZdvedxATRo7SeF0PPkaUl+4Uxu6yonZuYQE99XtmkzOPUli+
9x6OWx05
Name: res/23.png
SHA-384-Digest: q1lGeTbi8gcNm1bNVPp4ajWjsOm65YTZeESEYeCR5NDdnka7z6vjOeEi
RKU15a78
Name: res/TG.xml
SHA-384-Digest: oHmI1iasm16Yx2LMaM9dsVFbyiAgk/4UYDu7LwLjkbODy/1lxZOkEkpm
P4EE3Yim
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant17.xml
SHA-384-Digest: 7I5ONIjRzJEz0DeGNiZ6k/ew1nHnpAd/a9J7Oe9ffnvXtw+J/4X16bwl
ikAs92Tx
Name: res/u01.xml
SHA-384-Digest: yPZOQWrgS1NoSDZ97oe78Q9BaRZK1UXQcnFzmhz7mV25e2LL0VxErDdM
9Q5fjcdy
Name: res/ua.png
SHA-384-Digest: 3LWa3UaUPiPYPIl/AQPLu+xve60xiKLKMYOebFlsoz12V7dkg2OvLRc2
dZ6zMqoc
Name: res/dt.png
SHA-384-Digest: PY0yrKsSE09N/TTsdS69gOotihsZoERfeKSIP/S/FHndcus26aST6+p+
NARCZE05
Name: res/color/m3_dark_default_color_secondary_text.xml
SHA-384-Digest: ucPZQzK2gYCO70t7cAhaqS599eZWslh39dh5rGgPuY4qvJqq7M7cw/PU
joRER6Nl
Name: res/zE.png
SHA-384-Digest: 8Z1LdiuMWs/4t7sqGbr7aI0V7SSgiGUwIre89HyaV1MK0IQegxhSykhl
iAjmtKZi
Name: res/BJ.xml
SHA-384-Digest: PGv/FwdxOqxVz+G3qoHA46zbbiQXX6S23hg3yXTbfEM5t7hWdmtjHSV/
/Y9MlGMI
Name: res/c4.xml
SHA-384-Digest: vJB8SwocZi2/Ob21RoRDxOnrcf9emDpC/YgM5pozX0Zst/FNIr+ai14b
N3a/ZiOJ
Name: res/Ff.png
SHA-384-Digest: qEZtTXcCVWri6e+jM8NETRYdONhE3HKeCNdWrkHKyF+Iieyuv3qTbTUY
Q5JEKOu4
Name: res/4L.xml
SHA-384-Digest: VturCPEmsSk38GDJpob2gO/FaQH3o16XZc7ZQCvi280n0EZo1Wu1r1wn
wErd+2CN
Name: res/Ga.png
SHA-384-Digest: eQb7cnup1PXy3OVYZB0DmQFU7/AB3bE/a3gNbCtETqy/PDKafvnePp3J
k5JK0LSS
Name: res/Zg.xml
SHA-384-Digest: seulcfFIevrF9TeSosKD5nqaD1BmlsA2dggczNXP5ukUgp9OEAsWomqa
p5XDeNmN
Name: META-INF/androidx.documentfile_documentfile.version
SHA-384-Digest: 33mUbTHzEhENUML6ontTV1+8qf4+/6oamJwi/TI39u73alvTcJapwKRy
QLiO0XxD
Name: res/6t.png
SHA-384-Digest: J+RTEPzuBRyUDKZtQaFsiwB5KBe8Ws43wmlefJq6d8CVbdOs98wA4ogU
i3HwsGbt
Name: res/jS1.9.png
SHA-384-Digest: OTfWD2qkmZOfAhE89zFXf/x1Kq6CrPIPCPjdDSAlIQKQMU3rXFyd8c/1
dq4ezrAM
Name: res/color/m3_checkbox_button_icon_tint.xml
SHA-384-Digest: hggqFCnbW+oqlau8+Kxb/dq08sjRdOz/C5ynJjdcVFusLVzZitb1FGOC
1WarYnEs
Name: res/color/m3_switch_track_tint.xml
SHA-384-Digest: qaWtRyA+xyvtZRvzl2Xpc4KdBZZrFumxWlODKKb6UnT6g36qNr8f0Uad
5Qd7TZ06
Name: res/6Z.png
SHA-384-Digest: zRh3Mp3M0Ki8vScW2+kdaNg0nTaf3WMrc1yiQ/kF1HoPw1j9ws8YS0VK
SeN7dI5T
Name: res/77.xml
SHA-384-Digest: QVaBtjHmI++duVD9IsWBB0aFuVTAaQIorE2SMxAV9woF7V0mz7K669Fa
8QGOP1b8
Name: res/color/mtrl_switch_track_tint.xml
SHA-384-Digest: eSJ6ZyXf3LDdIbYPQwU8K++vF2lCZBaX/Iw8xZ3Wn/zv6Oj2cHkddEEU
OQ3hHEZW
Name: res/NN1.xml
SHA-384-Digest: W7W1csmWiHN4M8ULFtvySTRBI8s5tvJ5Sk8LUdRxg0trE8WGhmFOCBJJ
d+VlNdRd
Name: res/color-v23/abc_color_highlight_material.xml
SHA-384-Digest: Al7OBfblD4jyAhRvzfspchNOEOWLFC15th8CcaTpcm6z37iZ2yUCWkVN
O4lwkbCI
Name: res/color/material_timepicker_button_background.xml
SHA-384-Digest: ll2mD0HPR+ILrINjHxgnh3BBqmjXdjJhhd9NXwpdg/ewC4BzN45KIIiY
Uocuxwe5
Name: res/Pa.9.png
SHA-384-Digest: S+VEtmqT2Qy27Kp8YqlbCmR4zh/abtRpJA0qz27IC+arrR9q0u8PnWCc
XAn7kwv0
Name: META-INF/androidx.emoji2_emoji2-views-helper.version
SHA-384-Digest: 6ZhGj7EwIC6cKUzr5pbIgsJC2l4oRznFyLhA6sBCwgCF4aD3ydvJ3SOe
gR7JAGIY
Name: META-INF/androidx.recyclerview_recyclerview.version
SHA-384-Digest: 0Dhh56ybPWynqrKupTKEZuWVJEQB/hhyixvsWy8LWcJj8JoM5whgj/8d
NRWGA9pW
Name: res/X4.png
SHA-384-Digest: 6MF20yZmbIwRd705/friLFAsFU5IkJ2DpnB81ssnPgo7sJmObjInOi/L
muhCzLOV
Name: res/Th.png
SHA-384-Digest: 2CzT/72xJbPermQ/nVTOljKuK4Tbxy6NmT+mVSQWkXFxcCmolROx+/8D
BmXlaciE
Name: res/GC.xml
SHA-384-Digest: VCKMz5G5XCgVTZMCro+Gb5vQ7lDwaDJjXsMJODULrDBJFAT+rZOUSM6R
pQq0noTs
Name: res/Qu.xml
SHA-384-Digest: wOvq/THrbpvPqEdSGU7PGxcvYOuL/3+iyEua844X6R6n5+nI6mIKebt4
0RgIFvsB
Name: res/jd.png
SHA-384-Digest: Qlsq0GLUtJo7FVL2Hy//tgfu5WE+0xnOlVkMKGFdQ1epWA0SPNRtQd3F
qMPikreO
Name: META-INF/androidx.tracing_tracing.version
SHA-384-Digest: KDxWnCoe731MScRwjJBcuG63E0YZyU7HYWy4LL2RE2ZCt/GFd05MtGcn
eIq+AlL/
Name: res/06.xml
SHA-384-Digest: IFcJak/Vli5VgK9nsE8hx3P0Bj8SgM3SB++GrAIQVUm8RXdruBtZf3D6
RRo0b5wt
Name: res/g-.xml
SHA-384-Digest: o7skI+Gdw4x5c3985zwQxUoOUtnI09enEfxO6ja1w54bC5eXjcoWVJJm
RFrL4s/M
Name: res/2w.xml
SHA-384-Digest: fh2RsAqAzPclVvSSfof01o1/qyhvYGXoYprEH24r7766UaK0cxYQFFO9
1c0tpOrn
Name: res/49.xml
SHA-384-Digest: dFr2jLx7r3StCVmhMXOEY0IElJ2j5iWaD2i5Wm70ImTCLmUJp6vq4anu
Hf8NRUQQ
Name: res/bb.xml
SHA-384-Digest: aoOkHkClwvU6IEcbdMuiJfEbf4phkeGVDSe8p/7wSbPzuhe8QXjdzO8i
X1VpwGPq
Name: res/Pg.9.png
SHA-384-Digest: g7QAjG408IYx2xl7VOdB2XnAN0rqx6XiH83D2ldCS1eKwo6Tm8Xgwyze
DoTTq+Gf
Name: res/vX.xml
SHA-384-Digest: F1Ycf2pdUwKH0aRGxP3ttQLlKbidBEsad8PK2qR13NS465JS8opo1SGk
USMEv/h7
Name: res/w9.xml
SHA-384-Digest: 3Noo+mBZoSQfD9chbcOv4/Zw1+3c5fCmXkg088ocjVXtR4ye8VIICEMn
lN9m1qZv
Name: META-INF/androidx.startup_startup-runtime.version
SHA-384-Digest: lUjgzEoqD7sexrgdVT9WSy8v1xVo86FcKoahBjv8rel5C1OB37BCw6KX
7B0ZkqAq
Name: assets/css/ui.css
SHA-384-Digest: zVEtZX4aCDbYDRU1et1oUv5oBWmxw+s99W8JBB9m+mmjRUfUQw0rlyhz
ReBIoMrR
Name: res/PN.xml
SHA-384-Digest: Cc07NPh8afKaSU2KS3E/9UPqv+UQlxba1Y1sBFsqmRAEBYMZtAR7CjHO
f2L7hFqf
Name: res/YW.xml
SHA-384-Digest: 22YDnt1GrFAKqKijTzNCFHAWD7nxYYahuvvWZVhXTNvI2bFcO79HH04D
WW5XITMt
Name: res/sO.xml
SHA-384-Digest: rpY7EaleF8sNZ6JUQ6SX2SmGXfojXt+g2Tewzsmpai6lb4eSk4qi/+lo
T9wfmv5T
Name: res/RA.png
SHA-384-Digest: CSahgYHE3ftj9Of1evNe2lTIDKZ7nif9l8Ri4gRpCcar71hkYdkmiVxB
hcf2SzQw
Name: res/ii.png
SHA-384-Digest: cmHbUbuVmt6y1y40ogs/2libGcEZ7L/9RdPb/P+zGXlAoTBQIlimxvAw
YfRSd02M
Name: res/LT.xml
SHA-384-Digest: eiOhJsAsXc681jKvAm1IccuJ44i0Xz+OgrfXXCr7iZzCN54ggxIOm4E9
9yPAqKaB
Name: res/M5.xml
SHA-384-Digest: jFKiKig/Mg7Y22ixY8DRlV6gVM5y8JqLEFsa+cMfVddWzqDyWBZjuNYD
RmQNK+A7
Name: res/HQ.xml
SHA-384-Digest: lRiDgxlBgI4oW0/hvaOTmY0UwAdQObKJt2RCRJkoLH1L03JFfV51+VPk
+STXY++C
Name: res/tL.xml
SHA-384-Digest: AhAwzxVAo5EZpHg73DOS188jLJCKtqeXAO/aGu7jZhGtmpv5a0TRbYPm
OwvSTUBk
Name: org/fourthline/cling/support/renderingcontrol/metadata-1.0-rcs.xsd
SHA-384-Digest: hqkRzk6HLjVaY4NDZ56hn9tDR5npsWP66J0Xwq6LsES+P7owuQuhhUMy
vt1cg00M
Name: res/a9.xml
SHA-384-Digest: dZjEHNeLBi/sAYX+QiWnZK0d3PLHmqwZGYsASgLWJ16Ex7pw7T1Y0zTB
Rh7VkWr6
Name: res/color/m3_calendar_item_stroke_color.xml
SHA-384-Digest: QGwZXnx4+eXdD0z5S8y/a8cvad015NLwsoNEjtbU0dVkQuFU+d1qIVmA
HUZg5+aj
Name: res/Lo.xml
SHA-384-Digest: rSgb8S5udleuefaJCNkQBTH7S713Gdhvl8E66+1GhPL/9dB2PfYOkAFp
NWTtWY99
Name: res/eo.png
SHA-384-Digest: DO3iHVEjX0VVauCz/8im7Kq1wfNwk9w2XpuMp2h/WIcwhve+thxQKcFr
k+yXdKH8
Name: res/1c.png
SHA-384-Digest: yC7eBdyCxPGXZLLAR0RroyNyHhpzXbEvCKtarpHNBhmyrI7PREQ8cPRK
zFhKXRJs
Name: res/6G.png
SHA-384-Digest: WX+hMGFnTOwmjvN84XPSuyPKSCHxHqOqIXBfh0N8AAVZJVHTtzYqBIL1
Zi/7aFm/
Name: res/LI.xml
SHA-384-Digest: qUTf95+d2tDIneaOjiYVKHv9v2przAJ5X7fTlf2Z2/6/zREnquC6LXc3
25qAZhz5
Name: res/color/m3_chip_stroke_color.xml
SHA-384-Digest: SHCm13+yRLvUeGxaC+MFrkDe92s/cTzjSLH2+5C2qoK3lt6ZhSbXm/hK
ZeAU9c2B
Name: org/seamless/swing/logging/img/viewtext.png
SHA-384-Digest: p47pw2JjXZnYYmwudhk527O0xvIR+7GD/1V2OGi5H478/R+LvPMA3jXD
LIe6U6Ck
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant4.xml
SHA-384-Digest: AbGKAe2HC+QTHYvXpor8sKu/7FD8R1RrW5PmZI1+6RZq8BbVQiHTOx4H
hz0MlNph
Name: res/yT.xml
SHA-384-Digest: MXZ2eqI/NbBsb9qZE1C1VrMoATl+QRAW+8GMMJZG4HFqMV3PCu7R0f/q
JAD5jDOJ
Name: res/z5.xml
SHA-384-Digest: vDEqn9O/y5o3XdCBjSDe99hNvoN0MzLZfeyefF3xJduuhmMYzhEo4PtW
7NbrjgsD
Name: res/LX.png
SHA-384-Digest: 6IarMkumCDH8CDYzxi5qC7cBnI5zxmypTo0zZbhOe7YnV/o9x1gs7UZV
UvrD6bUj
Name: res/cV.xml
SHA-384-Digest: DkO9dYD3WzM4dcVdqOQSs432mlQAIGYuAwrg9GdGgO9IOA3B+5D94dOf
7XurgPjZ
Name: res/2w1.xml
SHA-384-Digest: 3XC8GC9DuJ39I1YCzjkzUWzZ9NI1ngS/JVP+wDUSAKWtYPbdAqdrzO+7
2PDufUNU
Name: res/color/m3_navigation_item_background_color.xml
SHA-384-Digest: R+x4TBzIiFAShBoe2II95ajho7mtyqI1kANeXOMfKF8VL3r/axUKzwRj
YOLRN4d4
Name: res/T4.xml
SHA-384-Digest: MKNbAwYOmuXzzn8ilLzV6IQtjNdkfgzCvFI1LjABZGz1K0oCv5sv6V5p
odzLTEjE
Name: res/-8.xml
SHA-384-Digest: bdjNGJd6Nt9LUnkPB9yDzOrqtfg+F0K/ZZUddrB4ht7v3Tw5sQkYAuoh
V2Q5yTIq
Name: res/color/group.xml
SHA-384-Digest: 8p+MCuttEz1lWdi52/JPWL4ibwyVR3Fy63xjzMYcTbi+vmfgOYHvsi3a
4Egx6ehK
Name: res/FO.xml
SHA-384-Digest: tSLTEUpdaLvOVqcZK4oCPAHWpLEh7qAK03LJkdtLlec3J1/U0lfdaybX
T6lMUeCU
Name: res/G0.xml
SHA-384-Digest: pTyjc63zZ997FHdNot93zROGrsJUUIpWtApc5D6FWF+d/fuMpxxi65nr
QN+au5ul
Name: res/Yj.xml
SHA-384-Digest: fzdgOROPrnMoG2dy5rTadUBmuvwpmcD7daDVVBLf+fhYr1T+J1fvENsa
Poo6pRXW
Name: res/color/mtrl_on_surface_ripple_color.xml
SHA-384-Digest: CVofN0Kk1KMiye8OoChPqLxIb2ByLOPXQaCvQcWEjhnxHcfbSotgjMoS
xbmywhiw
Name: kotlin/annotation/annotation.kotlin_builtins
SHA-384-Digest: 6uKoko8b2hrrpzfbHh+lB0hqDd9W8ya9PCSFDyt7BrxXeQDoohpFNU3K
5IwBP/Sk
Name: res/iv.xml
SHA-384-Digest: pZMkj45xcB1r5GicO9FM5YgTDLPfqwQhZa4BVeCKgvMd04zmZL1gxsIE
CPEMI1/Q
Name: res/k8.xml
SHA-384-Digest: nn8F9AOIole/Ng2LpPLvPg9D9OKeQw7O0gpe3MtKGDCyRJJuFKgkn6tI
A35lDJJv
Name: res/color/m3_timepicker_display_ripple_color.xml
SHA-384-Digest: W5WFc1g0rm4Y7muzbFoozc6ABAA6C4RxuooBa9SjooxN08L/mf7SJLMz
Xt7lZDar
Name: res/color/m3_dark_highlighted_text.xml
SHA-384-Digest: cExXSqrLlc+OXsTYy6ytbNWO+XBzq/7NPuEIKPlIdZ9A2+KhM6mgPc/I
sGb3RANy
Name: res/wX.png
SHA-384-Digest: dDK8Vze6Grr0A75s4p3KAoky8qGaZI2aAuQFxAQMqq0v+Rrg/arP7Zrl
l92zn33A
Name: res/dW.png
SHA-384-Digest: NCXMJiaJtsRIpTLEyN+ypvB+4Jkf0tkbxjvhqvxAimW0sFRb4KdHuQ+J
GNXDpGUu
Name: res/NB.xml
SHA-384-Digest: UXUmeZmnInzSQfWbLAo33KDenRy7pjdRpLqAJEZrxuYXbmV1GYi9zIfp
9IHGvPpU
Name: res/Ao.png
SHA-384-Digest: XG93j0iuZAlhDOSVyvgWp8T5jUMcHtCK5KR0GqoSDSGjsZf2bPgE78ss
qP1VhRUW
Name: META-INF/androidx.lifecycle_lifecycle-viewmodel-ktx.version
SHA-384-Digest: W9f/dl83UYP6UGja2F7eqPDsmepKXW8kMZe+BXZh948EQ7kEqbuBQpoW
alx7kw/u
Name: res/KH.9.png
SHA-384-Digest: q26+Hdwqi3sblqWxFeC0J+q9pkrf25f0UnbWfF5eWQEZDGYVsjcBpROP
G+eTxGIT
Name: res/b-.xml
SHA-384-Digest: 0zrkjeQye7+hRiQMr8ml8wCvIVxoDofGHV2E684qU9CDA+UcP5+lQuWc
WyK14VV+
Name: res/iR.9.png
SHA-384-Digest: N9t5yA88XLRn4hlTtTkYP2+JjeLZgPDis/bpNfmUKfwja/DmYXV2qgup
S7hjMi5z
Name: res/OC.png
SHA-384-Digest: 25pFGq/9jzkSUxCqRux5pIaylvQJoMtSomvy9FIxL3At0sp9Cijf3a1U
weOPRf0Y
Name: res/f0.xml
SHA-384-Digest: lWSPDn6HT6yo0OJSW9MtdpvF6GCVMGSUpYvFpb10epfRVoa8l4mjtdy7
uTAJc2zh
Name: res/FS.png
SHA-384-Digest: k7dUPkU/LecfarpfqdnuuVAES6efsVikYqP5wOLP9yrtk0al9zEMAvDF
7ZDfkzhn
Name: res/l9.png
SHA-384-Digest: JUSqBi8c/uxwI/0qrYuHL2WC45Eqc6H8bWpepw+VeZ8YrEUNqB6Iexh7
eS436nN9
Name: res/6p.xml
SHA-384-Digest: ct6nMhTucFMq8t7t3zmdvWqBoHyAuXkm89Wjk/Amugu1uDDUuXWzTKCq
vf8BebeA
Name: res/7Q.xml
SHA-384-Digest: pSokxccb2DqJk3ZkI7kn/xT/oTk5AKuKmh0q2zu952mO2kpdcHVSlblM
HUQANpNa
Name: res/A4.xml
SHA-384-Digest: Dsu1rSV/ajG4j729PkTpLuYcMjswI6T7U/hn8QoWFPgOC+HgXFoooAbG
DQuF2eKv
Name: res/DV.xml
SHA-384-Digest: 3cjQHYuZBR04pHwouGI18ik6xDu/ZlnMd3wPRvcCjodS1/lz7U8lwvk0
gUtqdzxb
Name: res/zc.xml
SHA-384-Digest: 2mWbdqeFDXnHiN0Zva7dxzPSpwU8nBdj/kpph3r8zsYZfNyRN3yYC4Lk
tl0N3leJ
Name: res/p01.xml
SHA-384-Digest: Zp/6JOe2mpt0cIizfrWlxX9B0fbH49UX1QgctBax0ed8lqGDTJQOi/g5
eo3dJkGh
Name: res/B5.png
SHA-384-Digest: wNu3hRK6dlQR6s3F8yQEWzwKe2XHNns2SYo7QswGCbAOiJlgQ2NwURrI
vvwTGLFO
Name: res/Tj.9.png
SHA-384-Digest: iLVooKsmMkvUSSG1R/DsFiXVxY8O0/PHaVeLOjGdMCXimQe2TDe73V/P
E543lEEa
Name: res/color/m3_timepicker_display_background_color.xml
SHA-384-Digest: b75pSFq9AAQDSnEqBVIxEPWQ+MjZG3a5iZi/4uSKUwK+7uipNYXKaC+g
8clof9te
Name: res/ZZ.xml
SHA-384-Digest: p06vyDlT/AvlArLYNcFuFEL4yzPKDhymUar+ct3QlyAeR+eX7rxVL/0Y
F6wS917k
Name: res/lP.png
SHA-384-Digest: BDyqk6eW7gD/HJEjmOkQ4RFKJfi1Oa9pHeddUjS4lUbBfyGhhpXEgP2r
Jz7mO5z4
Name: res/hu.png
SHA-384-Digest: VNxECb6Tb1xDHBq/NrqewwksiTg419T3MSKnQBWwJWfVnMSXWERCgjss
Ips7TkUw
Name: res/tV.png
SHA-384-Digest: Pl2Q2rV6KBQK882/1Qbtk0AMMTHr11znujTM1aB6kGIOQgZyOzAaMvr6
5E8UlM4L
Name: res/eZ.xml
SHA-384-Digest: upko7Xep6oiXs+epp/zZl/cCsQY1ybg4wQao76sKMkZfOLMXdhucuucT
mMm/NAG2
Name: res/VW.png
SHA-384-Digest: IlZC3mJARzUHTnZ1jJE3Bs0pa3/SwPeaB/MByh4pTWRTJsX3w0D8kBE4
4M5mukNG
Name: res/Mp.png
SHA-384-Digest: lRIBg46BvEIAntc/YMKcSYQrAu50LWk36d86xTC0UH9N8EVKpWBs3OzN
wWpW02fA
Name: res/cA.xml
SHA-384-Digest: n3znHivnBPYtl1xJdVtFBJwqXwQh6Ro6wSoHDUTxrakGNKpWZVGd4WqP
NzOV48+o
Name: META-INF/androidx/annotation/annotation/LICENSE.txt
SHA-384-Digest: FijqHNoFUwK86F8kufPzQ2/09IKehkYJkBCAoTxjshm6lP9e/cfN6Mse
gV29zS9m
Name: res/9a.xml
SHA-384-Digest: ZOPpD1YDkhtvYwoCqC81V7kMDx26PXaGddaSQZ/lczhsAjhyJpXTrbmA
6v9mHQf1
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant94.xml
SHA-384-Digest: 7MqDONc0BqUPQDnHQhY2LTCNlxMA3k0BFOUdZh5Ry3ovGOl7laF7lzEQ
hduRBkMX
Name: res/color/mtrl_switch_track_decoration_tint.xml
SHA-384-Digest: +oDe/c5CnTn1JVNYRIRUfA11vJ0zq4iCYF1CXMHVQ3Hdansm3blTit9V
02OrHdzy
Name: res/Tm.xml
SHA-384-Digest: pcbt9KQgK3lV9rJmVLvylr0b70g/5zDK8elEJguRmkhTyDdXyqfTbBcP
W3YeIoPW
Name: res/rp.png
SHA-384-Digest: 9EqQGuuDpq4LzoOY9HQXjXa9yCrkcmdJA0yQENcozxrkkRpedGMIkbL7
I8YLY8FZ
Name: res/jB.xml
SHA-384-Digest: ZBC0biVVkEo8D3CoOYmIJOLeYFMLP1nQSo6RSjjlHRmHWWO9NgJS65hq
RgKNAl5N
Name: okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz
SHA-384-Digest: Pg1KS7TNjYq3xdGSv9sZkh6a7Zr9UnEH07c4HiBQlahD+1grAN1boXms
44ZoOY19
Name: res/0k.xml
SHA-384-Digest: fOv8R1+oUY1ZJwk0RD7bGiKC31jNROzY003x97a3e+cQE+r9yDlercw/
SwNrtMPW
Name: res/3A.xml
SHA-384-Digest: iDqYUbkJ3i2oyVd2wJ3K5su6tSO8QA07umLwVOGJwWhTAOSr7vV8g+9L
AwIkJ2KW
Name: assets/favicon.ico
SHA-384-Digest: JKh/H5vzjFzgvqW5EB5eviCsilDgsmcNny2PAksMefso4wfp5sAlfrHB
Ckx1JcIo
Name: res/56.xml
SHA-384-Digest: 2fOG1gywd4JwNEN1a6vSB5kTFIlu3fr88FcyAjHeNY7YB7xfcLEeFycw
Pxkj3rPB
Name: res/color-v31/m3_dynamic_dark_default_color_primary_text.xml
SHA-384-Digest: RR0AIjrErmyXBFx/YRh5j8yzPjoRX42dst3Oh5s0awnD6KTfa9bFbarS
yb0/ggn2
Name: res/Ml.xml
SHA-384-Digest: a6Nk5pzf1VootQ+NOjyvlq2YHidd3foyZHD6q/Rw//o71jE/JhLU+O4+
+rt+JV8s
Name: res/NM.xml
SHA-384-Digest: 1IX/h414UNObmSD6S6RwP+avXKyjzkQRORFT2QPVfoI0SWus6wmn0Zy2
vUzzCWzt
Name: org/eclipse/jetty/server/jmx/AbstractConnector-mbean.properties
SHA-384-Digest: WJJ2rYtQ9yXHjMXecU7IUVPU7oIkS3iG5qWbxW/KimBvB6BEKYob3lCs
frxtjS4D
Name: res/bX.9.png
SHA-384-Digest: qbCk2b41WywWLBC+IGHHEHvko/qVY7GGARUnKLgISO02OLq8D7+MqQDk
RZePLvAk
Name: res/color/material_personalized_color_primary_text_inverse.xml
SHA-384-Digest: IaYhMEksecT8sK9WR4cGysFb+3vzYVcT7SU7gN4hqRRqWc4b4/o44v2e
nHk7N7Pl
Name: res/0V.xml
SHA-384-Digest: 4eUxDShqG1fABqSwo7CWSliKUJ7MTSGgCVRDfiS0OEgFkGB6PdRPuMIH
+NqbNKU7
Name: res/J71.xml
SHA-384-Digest: D4iSuNofMHv8cbouq/I/y6/QFJdT0Q7nBvhwyQV/BPF+ntXZ/kqQWBvM
lLJ/Q4/S
Name: res/zR.png
SHA-384-Digest: z+gxk6FIZ2xCfZ0CY23uzZULZoDL8kGeTkHHKvuRutbxdjVRRz5sjUUR
m5up1ghe
Name: res/tG.png
SHA-384-Digest: GLPzrytgCvsQInLmXmPYS08WrNjY3AFp/ofr0bQZoBLtTkJM4QlpMyle
I9md5eqo
Name: res/dj.xml
SHA-384-Digest: l922YMhM1pJbr8aYblEWxIdf0EjYCLV5An9+Y3Ayv+QywzS9OpiYLje6
VuStwESa
Name: res/eK.xml
SHA-384-Digest: i94SKSuGbla4vloRi1Eywi6sJHo7UhEPOAyUhlVZtudfkCLB9qDp/4O2
2MEuDCKU
Name: assets/shaders/fragment_shader_transformation_sdr_internal_es2.gls
l
SHA-384-Digest: 72aGI36CHTGMr3GqHWCK1dJ4KbR/aj+rSQq8aevW+d/ENxhf/z89CaS3
DDxjcK8R
Name: res/color/m3_chip_background_color.xml
SHA-384-Digest: uDqHvVbO1+SF/If9AyU61ajbKkrsKicV45lCkyQyp8hp1xyikdNlog2o
BozsjfTQ
Name: res/color/mtrl_choice_chip_ripple_color.xml
SHA-384-Digest: eeObOePG7obzKa5fiU9EAYbbL0vC8d6aAhTZgy0z/5RVrJ0EkZ0xFSMl
+/HPWVO3
Name: res/9z.png
SHA-384-Digest: 37qXfpz2kvyiB7Iu/5gfYGME0wFh8XdLDJ3UWO4nIvmcT+OJuE2BeQ58
fHR1yzQx
Name: res/Ma.9.png
SHA-384-Digest: aGToD4lK9H4bN4aDCFRZCndRhptFz9HbFEygTqTFIP742XfLozP49+ND
cZNXdib8
Name: res/UR.png
SHA-384-Digest: tBPO3wC/I5Bgt0QGwkvgvEHfYtFKLVdB35RsFq/sUTwXxYjp3MDO8ogD
iJsLnYjY
Name: res/color/abc_background_cache_hint_selector_material_light.xml
SHA-384-Digest: HVfiPiHWwKDhHLsQsGhaVAhdpvA0nRc4UkMqReZtWtoCJWY6hIBgNlNh
XZb1LBBu
Name: res/color/m3_slider_active_track_color.xml
SHA-384-Digest: hu1BJgeyrwTnnrQLBty5DLrlSbQrxONFbZTodWXa9tW4f+kyzWwH+Hp8
3GIgKIy8
Name: META-INF/native-image/okhttp/okhttp/reflect-config.json
SHA-384-Digest: gIYIt554iTBloK5VIJX+fO+OGuWtZSG4SeB9uGq3qha4n9DSJmKlLtfs
2rf73RGJ
Name: res/6_.xml
SHA-384-Digest: /08yUm14zXOjgw3LKbs9UHgv6yz+8/4wdCN+jLOFTqKcH+xsU+vzV+Qn
p7lU/Ilr
Name: res/_y.png
SHA-384-Digest: nHakG8QaxKgLSiX2UNTsMF9BJwEBe9z2ilZOODulwbY8Y4gIP9sgniKo
AZEj1K4g
Name: res/WK.xml
SHA-384-Digest: UAfYdPrh+r8tH6Fru3NUTZtIOZKlChR/001IBe9SzxXjABOMbtBYiud6
Mst6skmo
Name: res/_Q.xml
SHA-384-Digest: pMrrQD/lq5VnjYVTmqwsHAh4e5BtujTo+HdteQ6tp+MTb5VLrWxAA87H
6XKUNgRn
Name: classes5.dex
SHA-384-Digest: t0hswY9BeYc2Mv+TyENKfmzhpRbzgvdcZB6lHtFMYyoQpNK4z/VftG7P
cVwTPTEI
Name: res/color/material_personalized_primary_text_disable_only.xml
SHA-384-Digest: gA3Xnbvq9nkfExy3OZaLEw5SQDr6yOWp87VtkmO0JFf69frEztu5YDDs
7+r46HCU
Name: res/hh.9.png
SHA-384-Digest: XsnEsYpojO7OuhFTxJwdNX/3vv609iFKtpnxwnSvQYOvo0ZSdKwWXnbS
lDDMBRXZ
Name: res/fv.xml
SHA-384-Digest: fU9dlG4J7iRzrlYKHI/2GWaxHRIKZSqVQyZ2OrpjCBxqPtpXe2o/JenX
Z0v4Xx6f
Name: res/jQ.xml
SHA-384-Digest: OoRCoiD0wSIjmFBKMWPnNmEtGwzB6u7QpWyET/A9jfwcjaATbLjH3Xic
9wKJF428
Name: res/d_.png
SHA-384-Digest: qpz0ve+dlgi2HzDZ5/6z+9VqslolIA8uzxpHU+D99XjQCoDFBpHG6VVU
7+pr3Kwe
Name: res/qv.xml
SHA-384-Digest: NoUKneaI8K2gPriIpsAkihPwCTm+FJ9Bk+gxZm0yzIxkR3D6bfNslQhq
vvlQ3naG
Name: res/rW.xml
SHA-384-Digest: 3vjYf2U1sOXgC9BVDmYvqYwBi9kiWaAf8UkjwZrbVuwH4y8QtNCfP0AS
FGrjraJ2
Name: javax/servlet/LocalStrings_fr.properties
SHA-384-Digest: YkBy01l99wbg5RDqWMZHwf68JH0R1A+OQSnLoZrAjsy+z5IzLWKvFlez
He9q0U+D
Name: res/yV.xml
SHA-384-Digest: m0FjF5KdEjtvN1GSRDezjqg3cife30+KEoHoEVEzyTo4C0onGVuhpVKW
I1atx5HR
Name: META-INF/androidx.drawerlayout_drawerlayout.version
SHA-384-Digest: fZO4/HsIi59dYMIMktb/SLoGcUGGpfZLFHU8oBbj76VYEEBmG4fQD4w/
+S0EAa39
Name: res/xQ.xml
SHA-384-Digest: XAgHMlYD/sUktn2h+n53J8ZP4FPEKPfK26gF5nRSNMkRPi7jWJrJZKwj
IRZMioUZ
Name: res/Ox.xml
SHA-384-Digest: eZqYi55DnnWrkn8No6iVsywWb2HAPNC5uWkXtOFJEFqwd09qs8xI97uc
48Ug/Pjl
Name: res/fz.png
SHA-384-Digest: /ch3M42AHrKZnwjHSgXSykdFc9t3hTn1cG3uADxPC3LkDVoIt2Bdd9Dq
MFjopWqk
Name: res/2y.png
SHA-384-Digest: UNt/0AlNtunAZ278K+XanmS5kuGwJb7Tyuthoi7uK/YPGxnRrOAGecbE
SxKzAjPK
Name: res/3Z.png
SHA-384-Digest: M1LIlyhI0gvBdeuSuv+OTh0K3TVH7LQp2+rbPXToRPDCJ2aykrjG17ml
l2GYweMZ
Name: res/xH.png
SHA-384-Digest: VDjRGdd9h6saAj0o8ZC8ryf4VZgSE0jOZSv0JKvk6LIWymIzQx6bHqkR
jOfPyU5L
Name: res/_u.xml
SHA-384-Digest: NPFeFjHZpwJMyFVxEj7TTL004OFPtnbOXP550JqTOgBcpisLQXPrrY0N
vEMYITdm
Name: res/a7.xml
SHA-384-Digest: gVuRJkAQFbDF9fsv3zjDXKLyOZs1eQ8yBIg+Hzzhuoup/3IFi7GnyIZq
/4/YLCwH
Name: META-INF/versions/15/OSGI-INF/MANIFEST.MF
SHA-384-Digest: ti0zZFKptjThWq/TfPyTeQAmowQrjfXGZBzS58IvnwqnVN+HioTB1qI7
QqpfQ+MZ
Name: res/Lq.png
SHA-384-Digest: 5w1RIHtdG0wT89UpToXOiouAVbG/LgkyoGNGdstSDDcBpYYE3Ap+9OBX
QNJvJ6Iv
Name: res/N3.png
SHA-384-Digest: NhnqVtv/KUPL9ZOQrN5f4Fo5QCJZcNYe2NrTafO+uxvQ86WQd/e8p3Bg
Ey0Wd88p
Name: res/ZE.xml
SHA-384-Digest: 0mSJC9F0MPD81awTJRvCTFRCjl5VZP4SKHrNJ9YHgGfOauf4T7Rqi9GL
O7VMFkNc
Name: res/dY.png
SHA-384-Digest: taeRThDuhnoVjZHfwbBn0WLH1njcCtGjF2Rkn0tkl5EG0OiRo3hxyfgt
VS1SuHY0
Name: res/Oi.xml
SHA-384-Digest: bGRUqRqsIFlcZEiRGUKGTd30+J6UTRfie2oEjrVni0oOioik34a+fjeF
GrDWdIHC
Name: res/YD.png
SHA-384-Digest: jDMEytsvDGFUffMefn/56ByL0YMqFrCB1tgDtYgT2kOKFwn8fCagmKRe
MiVWoyvf
Name: res/color/m3_default_color_secondary_text.xml
SHA-384-Digest: /wqoOwswyCK8PIzt71yl8Bj2kc/RB9BMk52YMf8f+ahmFLg0xlhbXpUg
kkMzWy3P
Name: res/te.png
SHA-384-Digest: eWrXL1nlt6Xnx591L2ZN/dV+mDuSUhnLHjv28eROJAW9YFOrOb17NcVM
mWexk8R2
Name: res/9T2.xml
SHA-384-Digest: sCgojscAz22Pc6BoQRLvnbZypSjlR3XoNgvHe1yfZz03u3Oldvkncy+l
SlXqBbGf
Name: lib/arm64-v8a/libmedia3ext.so
SHA-384-Digest: sjCKJRaVOjPOUFWRMKwkBlUgJ2sPZHjKVPj0jp76oa7IMbUDA2ZgRPp/
odOQrSyG
Name: res/NW.png
SHA-384-Digest: jthvkhevVGKzsOf0XChFOlmw/SIliujAjlyAmGBIUSZtTW25sc2jdgZM
R5GOW+TU
Name: res/pu.png
SHA-384-Digest: Odnk7y7M22cukHGMnq6xppVbOBGSPhc8lGilUkHDsMeSFXo4gwAw+pac
X+EEvbW3
Name: assets/images/ic_setting.svg
SHA-384-Digest: YUW7csCLmXQ/sVc4XcM3vA5rArNsmjRXAEC3p8PZOza2EcSAvAUgtEcU
UEAUM175
Name: res/Ep.png
SHA-384-Digest: XQ5vfXXFZqaQleQvX9QJ/GVs+Df4WWtp10JVWQUMD6CJDrI6zJyxf7Z/
eOEo8/ji
Name: res/vu.png
SHA-384-Digest: gUMgkYdfRG00msqJBJnFgIZ6MJFD9mCuSasJ0pDgc/4bnF7y/TWAGaLk
xKFqEQdm
Name: res/x7.png
SHA-384-Digest: +0MZom83oLStwTauEYlIMDfNmVdnWVp0/0GtD50bzI5sl75rlkPCn/wu
G1xMv+rK
Name: res/QN1.xml
SHA-384-Digest: YD9lxm/Q+V8VYo9sB+Zy9hSKiMLf+jEwk/yJaV/fY2WbMUVciPnoQOop
fjSJK2nT
Name: res/eM.xml
SHA-384-Digest: CoOsRmp78MLvkF4P9p+mDSQK1tIj5zwh3zV+h6YtMU3J2Syuw4i0fNwh
FBObrC2H
Name: res/f_.xml
SHA-384-Digest: 7AF6MSPU+lUeKcs3+1aIH+VEp5nBPZbcV8KFQmvkbTyJTYoGXdVzUgNP
NF2RYpnl
Name: org/mozilla/javascript/resources/Messages_zh_CN.properties
SHA-384-Digest: DazikSii+NdyQUbrbFMSVsPrJmRbhWLjxBb835JpNQ3yiRJqpU4fKVdg
WiFJQU+R
Name: res/kz.xml
SHA-384-Digest: R+sMSdZLrMy3GHPiu0NLkX7GLmO71vEiT6xJVOc7CtMPd36LGcuRKN1+
4TnhsTkn
Name: res/color/material_personalized_hint_foreground_inverse.xml
SHA-384-Digest: GwHHDDhtilyCoM6ORUk/XtW+ifwGy9F6fsmW02o1zi7GWUeVgTImNipR
tw3W5jRR
Name: res/4H.xml
SHA-384-Digest: qoGkmbOhKMRJD+Ia55gNCFp8MSbnBta8eZ1jngBf4h2JmzCONGGYorm8
bhVB8h69
Name: res/nX.xml
SHA-384-Digest: qHDvZm67et9V5cH5n41Iri7sZeh/J8c8C7actjSqg/bn51JCaI1oHZqP
b4+0rPeh
Name: res/9p.xml
SHA-384-Digest: 51lSNPpOYTP9GdWgWM0T10zjYtzUrieP9MVJ9+a2qUa2yDFmGDPL5nfI
ErcjO6Fr
Name: res/vL.9.png
SHA-384-Digest: PgU2SAFvgniXEsZPNd8/4vcAjMZLdpPxllLAni6F90BtyNVAGbbL4E5Q
1i6U63x8
Name: res/g3.xml
SHA-384-Digest: bANqkZwha/GoXIbJV2VZdpAoJS43ByqoHMgSVWhcr2BN7dMh/26W853n
yiYARC1d
Name: res/Av.xml
SHA-384-Digest: BkE8hodQYtv/3VxskdhodLhrf+HYZWdFFWye/tFAzbvwHWdJmXAaJFZb
u7wvTxpl
Name: res/BW.xml
SHA-384-Digest: NnbWr9LpN2cyBSWOtxfOS8HCzm/41X9jyKd6zX3RKWuhqgJioSqCbNap
guPBLEk1
Name: res/9X.9.png
SHA-384-Digest: ayKVlQ6QlmDlLO/qMtCpHiFDl9icQx10foh0mPNKHhzTwXhCmlEJRThT
rnxBPL3V
Name: res/vG.xml
SHA-384-Digest: aV3RImJbR72JnehyhgD+gChEcUU4+cNuwK+Fp86gfoYeAlKlRCvddO0P
XEaXDQgy
Name: org/bouncycastle/x509/CertPathReviewerMessages.properties
SHA-384-Digest: q2eJ99gIk/wDO2JKAPjwBWgK5u2NsmXlsodFSa0/fLZntoI7F2Vou30c
NDKW/Jfb
Name: res/color/mtrl_navigation_item_icon_tint.xml
SHA-384-Digest: AcBTGF+zMYn1BVyP9pdULFH605dDIAmhQGugeQ28N9DgtijZ0DRol/PC
fazwuM1a
Name: res/color/mtrl_calendar_item_stroke_color.xml
SHA-384-Digest: rEx9VyCjBoozAm9JUMsmutc09tlJLjYFvNuHT2KIybKJR49qiKNZgd3f
wWvCE0Bo
Name: res/Sh.xml
SHA-384-Digest: COCRKF/YXSrOIw79EG2WdDZ7m/ehqEpjDpJV92qPRZJIKBgznXIzHm8F
/lnW4ShJ
Name: res/yY.9.png
SHA-384-Digest: 5+bxfMC2U93waFWwH9MwCXeNTi+FGsXdqWoDdox/oobBc0nBwXcUE2O3
2BHtGW7r
Name: res/uu.9.png
SHA-384-Digest: WjZiIce0tzYeaQ4e+sdO47GyVTZNuIuk9ykbPtmaDuB+fuvsFyiHgs50
FB8m86bN
Name: res/color/abc_tint_btn_checkable.xml
SHA-384-Digest: VNE7f8HgWX8izVoB/t0eWg7pFnj3ZujChzqjrCV5Jnoz9SIgnPsKqRYu
jOLjeQsx
Name: META-INF/androidx.swiperefreshlayout_swiperefreshlayout.version
SHA-384-Digest: PXzK2spioJlSlZRBDGoLaM6Z2YO/aKwbuyz9WLXVQ8gg5wroeYXW2v2L
UKZ9Ma+k
Name: res/f2.png
SHA-384-Digest: 88JP2whB7GTOCWBD+4+5DMXLJfJiuW2E66NnUU6jqgSEk+ydwOupNrzi
8TDEsDEA
Name: res/W51.png
SHA-384-Digest: cwNTjCOytzKoLYSrm8KIOYa8QRCuY1YJwWsgxSBEHaesocxGMByPI63m
GdqpxMTm
Name: res/color/m3_chip_ripple_color.xml
SHA-384-Digest: 2ZBFY2c1PBQBeQlk+ripRJ/ChnyKKOgohhOE0ekkwZIy1RvhP3gVNY06
17I+YvX4
Name: res/OX.png
SHA-384-Digest: QzPJN2C1dIpXdG1+qSyVyrGKjmE7koPhJvVqp1/5qG+HKsjzE5Fu4S4a
/05n/r/5
Name: res/RV.png
SHA-384-Digest: SyxsH1NUo2ukaKfbfSMIaLLheLocoUu/Zh2CWAeqGpgETrlC/0wAmAxO
7AQ7Cbxf
Name: META-INF/androidx.lifecycle_lifecycle-process.version
SHA-384-Digest: tb4zvrKyt+xD3SBimsm9zyBy8bwKU6SXKnmc/Jz97d0UsyAumnGQOQWY
rjLUNZOV
Name: res/color/mtrl_on_primary_text_btn_text_color_selector.xml
SHA-384-Digest: L7fSGmHopoYZJQsPjzZkXBjDPV17wnPU9KooPO8dAixLloe6mlTdTfH7
3LH0L0vA
Name: res/ZM.png
SHA-384-Digest: 58XCczHX1r1XyyPEPSsqqx4Xnuu5OZ01uEYQjw+coFmsKq5Js9720Cbf
MdNj2QmX
Name: res/ar.png
SHA-384-Digest: On1U7cA9ZzzIrsFR1zBZTj7FxpWYLbk+nzgsaJoZPXV8a+bYwAb5Fsu6
HkWE9HDA
Name: res/UP.xml
SHA-384-Digest: BlkJQJiwCWEda9+zsqkb95AvVYDHJB+nxQVbD7A7pR/ZR81LvJCmMoeh
nTgzEQCV
Name: res/V1.xml
SHA-384-Digest: eT50vpMM9SefBugS8haAfJyYQl9umQOxue0y5oIwz/neRe1Qkwokbhek
0R2ooDGu
Name: META-INF/services/java.security.Provider
SHA-384-Digest: rNzpHZ9RvVTqROYb/UEuShmZFaoY6/2S97fItrm/bVHmFeZfQ6RqXGSN
qz7xlZ69
Name: res/zp.xml
SHA-384-Digest: b7DBEEKAVpPb4FrSml7bo8GNS9LflrU60LpB16Kxqfq4aRPkULzDrPGh
nn4HhfTP
Name: res/hG.xml
SHA-384-Digest: vzF4mfxUsmXzAN9sfYsgtv5PR3m6IgngTkWk2hBwIaAn3lXDqkQbIG35
9T4Q2197
Name: res/cc.xml
SHA-384-Digest: OYKdNG6llrFjlzYHQh5SIy4Z68tmRFenqfPi6nqqDNEJW0El2bSAPDAv
HnBzsTLd
Name: res/3z.png
SHA-384-Digest: bUfIbUn5+0ho7BpB9xUBxS2PYLAsAdHqFJBB9r4iff3t3rZefp2SP3UK
3dCK6+Sy
Name: res/0X.png
SHA-384-Digest: nG5UM96OwhjhVD6GR8TcaoUkj/IEk5be2cTMtRETIgE1+shrO7QNRVsE
+kmtj+9I
Name: res/EH.png
SHA-384-Digest: TZzuGJclMHHLTd9kJGnzv5jryDq5lCgJAbpE9aIfIgFIy1RPYr8XxOWx
VyZ3fZ05
Name: res/Z8.png
SHA-384-Digest: jTcBitc6etJaSS8EU3Yczn0psI6wJVzyzsHLECmaWhua1OoZTYDy3df5
1z45r9Ha
Name: res/o_.9.png
SHA-384-Digest: P24U0g1+yxSCQKtCLJeLh2GoKU8QAq3++MpfOdFTyia94CB3MumFSxK3
Pyzvr+uQ
Name: res/V5.png
SHA-384-Digest: Eq9HN2Mm5yKqOpww+RwRiN5rJ/A1OS3l+omHJdBb2Q0Hd1f2Jo40SDdR
3wtOg1ow
Name: res/Fg1.xml
SHA-384-Digest: clKubaOp6BfbZ+J/DZol1zyt+u1keemFyX1Hxw6vTZ4NXri1i2uyy4Hp
fRxNd6Fv
Name: res/color/mtrl_switch_thumb_icon_tint.xml
SHA-384-Digest: ttA2Ga0ZSNcsZWoTSIJOLpLsI7+VXWx47ha/aapTOSXElppc6URcu5uh
Dtvj4GBS
Name: META-INF/androidx.viewpager_viewpager.version
SHA-384-Digest: eTlY+O+SF4rzkafvD0RbGgC2MIz0yLg6L2Y0RaGdrcML03buuVbD+KFS
YXiiEv8T
Name: res/y4.xml
SHA-384-Digest: eFvvGIC/pa78C7p6+EbXCfMmERH+AnNaHgp2yGClPHG2a8bq5GfJ+DxM
iwJKBnQC
Name: res/Y3.png
SHA-384-Digest: +KsHZKNK4FX7svi07SyrT0Zv8OHkqD61cJhDJt04GwiWv6ouAtrQVRUg
pNrgYurQ
Name: res/_U.png
SHA-384-Digest: QkjavLoPqkHm555GjrYRYhYKZ/TXE8ZTW8AiXck0kQOS2FQ87kDhR97q
3OvrbKM8
Name: META-INF/androidx.cardview_cardview.version
SHA-384-Digest: VlWO/SAPFtUyoIeWVHUdy+65wUvbFYIGSSBw51w/9d52gmTToaRS8qpR
gi95Yv2W
Name: res/n0.xml
SHA-384-Digest: XI3vI0bCWbAhSz0qCm54YzWWLLyOLewQEg8YNzdzzwX3bYgljt/dc3xs
eTKWfxzi
Name: res/RV.ttf
SHA-384-Digest: xOTLd2+7QLw0XGhi33wDzGaTSTUdJls4TrbyKiSJoQSSimr0eGiz0Pla
yShHNI/A
Name: res/color/mtrl_btn_text_color_selector.xml
SHA-384-Digest: kNWWbt/OF2HCPAnRPLEzOCr0/fy5PwMrLh7bIxjbINt1dACbAzOeku26
uCpgwiRw
Name: res/vM.png
SHA-384-Digest: RtOC9HwgslPlR1Jl5TBG9KhEOvU2101UpNUWjHlXN3B62FMM2M5kXqix
XZ3GykAK
Name: res/PL.png
SHA-384-Digest: u50XejDXUtgmYJUy7isJbxklOEJcaLLlg7GTF4H5Pn2t61jWTSq7IA7Y
ivo7s126
Name: res/Q-.png
SHA-384-Digest: huxCWvIiZs5WG9U+1d3b+bEOr+FMdCpn+wgQT2aGjELRZTvKGoJPV0Hu
9sbKSCMf
Name: lib/arm64-v8a/libcronet.76.0.3809.111.so
SHA-384-Digest: 0PgmQEAn6r5jyp1BXBWcmRb4CVoaS1+IY3Q5Hxe+SseFyDOgqi9MIQ5A
YhNGS8MX
Name: res/2S.png
SHA-384-Digest: sZGG4BK6IlBgOLGzbvRAcQCR1+FN9bIOK5zFoVA3m8fDQ1SNOKkzJFwn
7VepkYEB
Name: META-INF/androidx.coordinatorlayout_coordinatorlayout.version
SHA-384-Digest: sNC3JJf9bXEFwzgax/iNZpcn0rC14jw9lm2kYx705tAo9d8hsIChNijf
kkDpBVyB
Name: res/47.png
SHA-384-Digest: UkhQOVOl4JIM96qxa3U8H7I3JA6F3FUKmJhNqTa/YqJHDsHfZFimuCrT
/UWE0KVf
Name: res/GN.xml
SHA-384-Digest: imL2GlZzmlcOeJaGghXsL/DY1dvRdT0DTYD3EM3mqLLlgeAblLTBhQad
fPoSNC53
Name: res/color-v31/m3_ref_palette_dynamic_neutral_variant92.xml
SHA-384-Digest: eE6trX2Ga/RmOhTaGy+AGg6Iegz/fCIRqL8J8iC0/80EcUYy6NUD0UAl
se9gNL6u
Name: res/9x.png
SHA-384-Digest: yjUNPEwtrDZM4I6X6r/9nplSHYyVqjSVW0UfM0/PZwoAoV++kZIbDv01
q2v4oBkA
Name: res/o_.png
SHA-384-Digest: x6wT0aZmSGqCuDkZeaOrmsEnnJ4hYjxgELGio4q5AOyoWiZ2s0QQog3t
ItTg2JTa
Name: META-INF/kotlinx_coroutines_core.version
SHA-384-Digest: 7jc5+d6JMuR0MBxtFsrj4EPPVd9Is4Qdq5KPSfcxh30VgyIIqJT2HeiP
UxkYCrnv
Name: res/SJ.png
SHA-384-Digest: 5S6f64TgVvDC7Lsu11XHQxtsCoug7HdpERLrOu0K0WvKI1ESyiWqtaW0
5fZnsgmk
Name: res/g-1.png
SHA-384-Digest: ZT29IxX8OA+rHxbW6+K9D7spAZgV8gnRZH44+L8pSfQab/FLbnjdw4Y4
LdYTg0CW
Name: res/VN1.xml
SHA-384-Digest: uswy8+CnUbbYtY10/4HLGw4GwzG6qxE8xI4LY0VxwnNJdvCjqnzsn1ve
v8kcdpw4
Name: res/F8.xml
SHA-384-Digest: lBtxrt7Z0fewmXazsXYOvFsjOBBSFwDKknhZjOndcDi+jzdUYgxhSABL
/UjZw1L5
Name: res/GA.png
SHA-384-Digest: lgB/et99CU8Ht0DcGJ4Y0iWLuVGqPIjRyxl/f5bcy9lhqGjsA2Fe/32o
fthZ623y
Name: META-INF/androidx.annotation_annotation-experimental.version
SHA-384-Digest: xjLWgfsCrtsNEmxBI3BJ/RmFPP/B6EoJnh9yDZ46ruMMQjt0yAV+cEzZ
sGf0AawA
Name: res/49.png
SHA-384-Digest: ItM7NNq7Mslq5vEOoHb9SfcFFisfDUEwNeKPGXawf6AcmC+8nCaq2ZlP
0rsicy28
Name: res/6z.png
SHA-384-Digest: wKocOUiLriw1ymDNgCVX2tcCxcrGl84ZLKJQsgmtqTCtQsrZ0GEgWrEU
oS6Ih4Uz
Name: res/color/material_slider_inactive_track_color.xml
SHA-384-Digest: ookzSC19C0xOgk1r2YvEl/jzdBmWmygiDBS/CXpmXeL+w6UiCBlD1xmE
uEnu8JiH
Name: res/color/m3_text_button_ripple_color_selector.xml
SHA-384-Digest: SIFdg1P7B5bzUKdGSjgPK3/zY4eKJ27ooIifNmo0q0r92lnKTg1zgAtu
OR2SR/5n
Name: res/0Z.png
SHA-384-Digest: +G7d+7QrSESKqyWF5cXLY43PEGO/Xn1c2ItWfV04KoPjoESsFFOq0jwX
9rsUTSiV
Name: assets/js/script.js
SHA-384-Digest: ewBhBji8NMKsk/xBfZVGyfN7VtNOGsdKDtSCysVrwFweRlYfzjPcZk23
zeGYK4u1
Name: classes3.dex
SHA-384-Digest: xWazOD16BzKwwYtbvwTFBobv3e0R47tPNnYYVEeVscE6Bme/d4hldGK6
hxCWEZZQ
Name: res/YN.webp
SHA-384-Digest: rd0XtlUtXib1eYG/E2Lz0ZjlLtXTkoHiefT5TVuTjhFLFEp0CDMxwhXE
1YkQv3o1
Name: res/ut.9.png
SHA-384-Digest: JYhDfObetmr5m9IG/OHKfj9YEt6bLBGpn2CuM9T7y+q9dQPckne/LuHq
xWecLo0n
Name: res/3R.xml
SHA-384-Digest: eKBRPtyoMOBfAzJaLUNK3lXrueOj2F6/OF0bPsiK/bfHctJKfYCvHRff
uJty28tt
Name: res/color-v23/abc_tint_switch_track.xml
SHA-384-Digest: M7UXgI0otjK3oTkQbLeRYAYyy/SLgSslgik/nAOP5DZsD7+VFwT7Ta0X
CrDpRZff
Name: META-INF/native-image/okhttp/okhttp/resource-config.json
SHA-384-Digest: 1Slfz83Mk94Dhaxr58hMlyRKBewuHu67p9ydJpcgQdeXJUhOskKqW990
C98W33ZD
Name: res/qx.xml
SHA-384-Digest: ucCTY2wotRSa19DuL18N6EmrDVDPccpKqt82xA6qgOIfo2QGtMqC7f1K
rta6EWfD
Name: res/rY.xml
SHA-384-Digest: H+Ix4/OPK8RPOSc64+GhDJey8LwTiyiNL4Ebto2Hoq85Y2ABxiTPzxrB
KdfQk5L3
Name: assets/index.html
SHA-384-Digest: +J8RJ2w2SV3g5KDb9YTYo9joCUukEYYnR8myOulFSZtIfdCBGIUVoadY
ccBv2ccr
Name: res/d7.png
SHA-384-Digest: Fa46LatTcXENwKpguod4OHf5WWQtFPPMNTS0ocxP6Am0ettCAD17762K
+8xfo9QN
Name: org/eclipse/jetty/favicon.ico
SHA-384-Digest: weucH7CvvkaODAvjpvsmAijW5M0wYj1A7NpzhWF3Q1WmRFjaLGWtmdcb
J3+b6WiF
Name: res/A0.xml
SHA-384-Digest: +A35ndfeyjxMLjJfjkmALpA8i1v5OEQW3rMahQLdTK9Akf0SBvlBKvT8
UHAcNVP+
Name: res/0C.xml
SHA-384-Digest: GGJMBO+zlUwCw2T8VN9ysR0OQal8WlwmalLVNYTELNq7W42r03bkySdU
OtlJWT+p
Name: res/Gt.xml
SHA-384-Digest: Jrmoh6HtdSE+4CJGCWtxJb9+ulJ8VlgKkRPTNgJJ1TXjQm+2tC9wNVAJ
W7hPi7E6
Name: res/4F.xml
SHA-384-Digest: HiPuHkA66+FBOImrNvF7nSvUmyzAKhFjNCtK/W0qdvci0pglGgnzNXKj
iYfI3y7t
Name: res/gy.xml
SHA-384-Digest: wdBAfUrPJhhQctnSgxyxNb6ds3kCmtVtAhJle4Sm+3mfIZn8EiacJfSp
N7yGnl8J
Name: res/a5.xml
SHA-384-Digest: onorOSxgDb8XUer6ilN0pB8r4CUxzl3UxcNmjfUgbpfsDtNdrJ4CJtyF
+J7SBtoO
Name: res/cv.xml
SHA-384-Digest: w5rAYu8sWOkoSFJo/eI2kk7U77PysBeLvvXHTrN/thFiJVVbw1sZu3WZ
8Oqtzl8p
Name: res/jW.png
SHA-384-Digest: Blr8BQnLYd4GzBV/eBApjOwWjEBNdnApcGtXxZ/y+/vkUG09/yQin3CG
N24IcZui
Name: res/my.png
SHA-384-Digest: bWh2JInly/E+xkkanFmAXvahy4myKkc5AvlxYKjo3Zkx6+jghqP8eDtQ
PcnytmzU
Name: res/YF.png
SHA-384-Digest: 9ovNByAzuQ4p4umNC1FtFUgp5DiVFIU7r4UnGvajC4GicV6DNHm9jGUX
UX2fvkzY
Name: res/nz.xml
SHA-384-Digest: zl0Pj89bZDSfGCHXpxSMuTiTEJ8ylNjBkISI+54tzdV0rvePCPNl/Ulj
OeRjURlu
Name: res/color-v23/abc_tint_btn_checkable.xml
SHA-384-Digest: FQuIsAdY0f8ZeS9ncAuE+nFwEwHymBMCHNzwO1Mhq2Q1vWvi9x8nwc47
t18lyUCk
Name: res/2d.png
SHA-384-Digest: +sp/LnbRwGY4+W/ItbZLm8LRvmOaa9KSCZHQVjCXuMNSB8ezcF6xKPDw
KI3nUNtk
Name: res/3E.png
SHA-384-Digest: DuX0tfObMeIx37dbDwoWJmClExNvGkGXKKC2mJTt4Ryl+7bp8Cu1j3gn
kVJPPBs5
Name: res/qA.xml
SHA-384-Digest: bEb8F9PEJHSzTK6RlPZJDnh1qcaiVQ7lnR8bTZNMb2X6V1YzqNjaUGKn
2MX2WFSz
Name: res/lP.9.png
SHA-384-Digest: yefbBYp1Csh3wATSA1QNwzihN2XYXsCb1illIXqujsrBxdaUh+9m4Q4T
Ybw+LTRd
Name: res/CQ.png
SHA-384-Digest: 0oPf3U0tvPWVD9idBg7YBArtkrBT799+Ts3mDXPToPluS8I6z80P3bGW
yTKJEVqf
Name: res/WI.xml
SHA-384-Digest: J26qqdMvtlMd33NfQwBSIjeppfMwDLTAmnnUJfI3nITwKJ7Veg5Yx6LE
6ShdEJw0
Name: res/color/type_text_color.xml
SHA-384-Digest: fMnpdzeImHuSE5xkMsFUJ+oZfJo/RctO5j9WnmByZD7mjURxQb+jxi1+
Rvo+o8N0
Name: res/eO.png
SHA-384-Digest: eCiTz5pcXbuGXAOcyQ8Xuni/mDyo5wGfRclH+HtIK5OOmx4b+wZhMklQ
4BERCLgx
@@ -1 +0,0 @@
1.8.0
@@ -1 +0,0 @@
1.8.0
@@ -1 +0,0 @@
1.7.0
@@ -1 +0,0 @@
1.7.0
@@ -1 +0,0 @@
task ':arch:core:core-runtime:writeVersionFile' property 'version'
@@ -1 +0,0 @@
1.1.0
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
1.13.1
@@ -1 +0,0 @@
1.13.1
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
1.1.0
@@ -1 +0,0 @@
8.8.2
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
1.1.1
@@ -1 +0,0 @@
1.3.0
@@ -1 +0,0 @@
1.3.0
@@ -1 +0,0 @@
1.3.6
@@ -1 +0,0 @@
1.3.6
@@ -1 +0,0 @@
1.5.4
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-livedata-core-ktx:writeVersionFile' property 'version'
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-livedata-core:writeVersionFile' property 'version'
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-livedata:writeVersionFile' property 'version'
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-process:writeVersionFile' property 'version'
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-runtime-ktx:writeVersionFile' property 'version'
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-runtime:writeVersionFile' property 'version'
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-viewmodel-ktx:writeVersionFile' property 'version'
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-viewmodel-savedstate:writeVersionFile' property 'version'
@@ -1 +0,0 @@
task ':lifecycle:lifecycle-viewmodel:writeVersionFile' property 'version'
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
1.7.0
@@ -1 +0,0 @@
1.2.1
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
1.3.0
@@ -1 +0,0 @@
2.7.1
@@ -1 +0,0 @@
1.2.1
@@ -1 +0,0 @@
1.2.1
@@ -1 +0,0 @@
2.5.0
@@ -1 +0,0 @@
2.5.0
@@ -1 +0,0 @@
1.1.1
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
1.5.0
@@ -1 +0,0 @@
1.1.0
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
1.0.0
@@ -1 +0,0 @@
1.0.0
@@ -1,178 +0,0 @@
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
@@ -1,178 +0,0 @@
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
@@ -1 +0,0 @@
1.12.0
-21
View File
@@ -1,21 +0,0 @@
The MIT License
Copyright (c) 2009-2025 Jonathan Hedley <https://jsoup.org/>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -1 +0,0 @@
1.7.3
@@ -1 +0,0 @@
1.7.3
@@ -1,30 +0,0 @@
#default mime types for nanohttpd, use META-INF/mimetypes.properties for user defined mimetypes
css=text/css
htm=text/html
html=text/html
xml=text/xml
java=text/x-java-source, text/java
md=text/plain
txt=text/plain
asc=text/plain
gif=image/gif
jpg=image/jpeg
jpeg=image/jpeg
png=image/png
svg=image/svg+xml
mp3=audio/mpeg
m3u=audio/mpeg-url
mp4=video/mp4
ogv=video/ogg
flv=video/x-flv
mov=video/quicktime
swf=application/x-shockwave-flash
js=application/javascript
pdf=application/pdf
doc=application/msword
ogg=application/x-ogg
zip=application/octet-stream
exe=application/octet-stream
class=application/octet-stream
m3u8=application/vnd.apple.mpegurl
ts=video/mp2t
@@ -1 +0,0 @@
#mime types for nanohttpd, use a file like this for user defined mimetypes
@@ -1 +0,0 @@
Args = -H:+AddAllCharsets -H:EnableURLProtocols=http,https --enable-https --features=okhttp3.internal.graal.OkHttpFeature
@@ -1,22 +0,0 @@
[
{
"name": "kotlin.internal.jdk8.JDK8PlatformImplementations",
"allDeclaredConstructors":true
},
{
"name": "kotlin.KotlinVersion",
"allPublicMethods": true,
"allDeclaredFields":true,
"allDeclaredMethods":true,
"allDeclaredConstructors":true
},
{
"name": "kotlin.KotlinVersion[]"
},
{
"name": "kotlin.KotlinVersion$Companion"
},
{
"name": "kotlin.KotlinVersion$Companion[]"
}
]
@@ -1,5 +0,0 @@
{
"resources": [
{"pattern": "okhttp3/internal/publicsuffix/publicsuffixes.gz"}
]
}
@@ -1,2 +0,0 @@
org.bouncycastle.jce.provider.BouncyCastleProvider
org.bouncycastle.pqc.jcajce.provider.BouncyCastlePQCProvider
@@ -1 +0,0 @@
org.mozilla.javascript.engine.RhinoScriptEngineFactory
@@ -1 +0,0 @@
kotlinx.coroutines.android.AndroidExceptionPreHandler
@@ -1 +0,0 @@
kotlinx.coroutines.android.AndroidDispatcherFactory
@@ -1 +0,0 @@
org.xmlpull.mxp1.MXParserFactory
@@ -1,5 +0,0 @@
repositories {
system: GIT
local_root_path: "$PROJECT_DIR"
revision: "a03ac275211c5afa5764e9cd7724de5405f4d029"
}
@@ -1,20 +0,0 @@
Manifest-Version: 1.0
Import-Package: java.io;resolution:=optional,java.lang;resolution:=opt
ional,java.lang.invoke;resolution:=optional,java.lang.ref;resolution:
=optional,java.lang.reflect;resolution:=optional,java.math;resolution
:=optional,java.net;resolution:=optional,java.nio;resolution:=optiona
l,java.nio.channels;resolution:=optional,java.nio.charset;resolution:
=optional,java.security;resolution:=optional,java.security.cert;resol
ution:=optional,java.security.interfaces;resolution:=optional,java.se
curity.spec;resolution:=optional,java.sql;resolution:=optional,java.t
ext;resolution:=optional,java.util;resolution:=optional,java.util.con
current;resolution:=optional,java.util.concurrent.atomic;resolution:=
optional,java.util.logging;resolution:=optional,java.util.zip;resolut
ion:=optional,javax.crypto;resolution:=optional,javax.crypto.interfac
es;resolution:=optional,javax.crypto.spec;resolution:=optional,javax.
naming;resolution:=optional,javax.naming.directory;resolution:=option
al,javax.security.auth;resolution:=optional,javax.security.auth.callb
ack;resolution:=optional,javax.security.auth.x500;resolution:=optiona
l
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=11))"
@@ -1,20 +0,0 @@
Manifest-Version: 1.0
Import-Package: java.io;resolution:=optional,java.lang;resolution:=opt
ional,java.lang.invoke;resolution:=optional,java.lang.ref;resolution:
=optional,java.lang.reflect;resolution:=optional,java.math;resolution
:=optional,java.net;resolution:=optional,java.nio;resolution:=optiona
l,java.nio.channels;resolution:=optional,java.nio.charset;resolution:
=optional,java.security;resolution:=optional,java.security.cert;resol
ution:=optional,java.security.interfaces;resolution:=optional,java.se
curity.spec;resolution:=optional,java.sql;resolution:=optional,java.t
ext;resolution:=optional,java.util;resolution:=optional,java.util.con
current;resolution:=optional,java.util.concurrent.atomic;resolution:=
optional,java.util.logging;resolution:=optional,java.util.zip;resolut
ion:=optional,javax.crypto;resolution:=optional,javax.crypto.interfac
es;resolution:=optional,javax.crypto.spec;resolution:=optional,javax.
naming;resolution:=optional,javax.naming.directory;resolution:=option
al,javax.security.auth;resolution:=optional,javax.security.auth.callb
ack;resolution:=optional,javax.security.auth.x500;resolution:=optiona
l
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=15))"
@@ -1,20 +0,0 @@
Manifest-Version: 1.0
Import-Package: java.io;resolution:=optional,java.lang;resolution:=opt
ional,java.lang.invoke;resolution:=optional,java.lang.ref;resolution:
=optional,java.lang.reflect;resolution:=optional,java.math;resolution
:=optional,java.net;resolution:=optional,java.nio;resolution:=optiona
l,java.nio.channels;resolution:=optional,java.nio.charset;resolution:
=optional,java.security;resolution:=optional,java.security.cert;resol
ution:=optional,java.security.interfaces;resolution:=optional,java.se
curity.spec;resolution:=optional,java.sql;resolution:=optional,java.t
ext;resolution:=optional,java.util;resolution:=optional,java.util.con
current;resolution:=optional,java.util.concurrent.atomic;resolution:=
optional,java.util.logging;resolution:=optional,java.util.zip;resolut
ion:=optional,javax.crypto;resolution:=optional,javax.crypto.interfac
es;resolution:=optional,javax.crypto.spec;resolution:=optional,javax.
naming;resolution:=optional,javax.naming.directory;resolution:=option
al,javax.security.auth;resolution:=optional,javax.security.auth.callb
ack;resolution:=optional,javax.security.auth.x500;resolution:=optiona
l
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=21))"
View File
View File
-5576
View File
@@ -1,5576 +0,0 @@
body {
--weui-BTN-DISABLED-FONT-COLOR: rgba(0, 0, 0, 0.2);
}
body[data-weui-theme="dark"] {
--weui-BTN-DISABLED-FONT-COLOR: hsla(0, 0%, 100%, 0.2);
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) {
--weui-BTN-DISABLED-FONT-COLOR: hsla(0, 0%, 100%, 0.2);
}
}
body {
--weui-BTN-DEFAULT-BG: #f2f2f2;
}
body[data-weui-theme="dark"] {
--weui-BTN-DEFAULT-BG: hsla(0, 0%, 100%, 0.08);
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) {
--weui-BTN-DEFAULT-BG: hsla(0, 0%, 100%, 0.08);
}
}
body {
--weui-BTN-DEFAULT-COLOR: #06ae56;
}
body[data-weui-theme="dark"] {
--weui-BTN-DEFAULT-COLOR: hsla(0, 0%, 100%, 0.8);
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) {
--weui-BTN-DEFAULT-COLOR: hsla(0, 0%, 100%, 0.8);
}
}
body {
--weui-BTN-DEFAULT-ACTIVE-BG: #e6e6e6;
}
body[data-weui-theme="dark"] {
--weui-BTN-DEFAULT-ACTIVE-BG: hsla(0, 0%, 100%, 0.126);
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) {
--weui-BTN-DEFAULT-ACTIVE-BG: hsla(0, 0%, 100%, 0.126);
}
}
body {
--weui-BTN-ACTIVE-MASK: rgba(0, 0, 0, 0.1);
}
body[data-weui-theme="dark"] {
--weui-BTN-ACTIVE-MASK: hsla(0, 0%, 100%, 0.05);
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) {
--weui-BTN-ACTIVE-MASK: hsla(0, 0%, 100%, 0.05);
}
}
body[data-weui-mode="care"] {
--weui-BTN-DEFAULT-COLOR: #018942;
}
body[data-weui-mode="care"][data-weui-theme="dark"] {
--weui-BTN-DEFAULT-COLOR: hsla(0, 0%, 100%, 0.8);
}
@media (prefers-color-scheme: dark) {
body[data-weui-mode="care"]:not([data-weui-theme="light"]) {
--weui-BTN-DEFAULT-COLOR: hsla(0, 0%, 100%, 0.8);
}
}
body {
--weui-DIALOG-LINE-COLOR: rgba(0, 0, 0, 0.1);
}
body[data-weui-theme="dark"] {
--weui-DIALOG-LINE-COLOR: hsla(0, 0%, 100%, 0.1);
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) {
--weui-DIALOG-LINE-COLOR: hsla(0, 0%, 100%, 0.1);
}
}
html {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body {
line-height: 1.6;
font-family: system-ui, -apple-system, Helvetica Neue, sans-serif;
}
* {
margin: 0;
padding: 0;
outline: 0;
}
a img {
border: 0;
}
a {
text-decoration: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
input,
textarea {
caret-color: #07c160;
caret-color: var(--weui-BRAND);
}
::-webkit-input-placeholder {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
}
::placeholder {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
}
body {
--weui-BG-0: #ededed;
--weui-BG-1: #f7f7f7;
--weui-BG-2: #fff;
--weui-BG-3: #f7f7f7;
--weui-BG-4: #4c4c4c;
--weui-BG-5: #fff;
--weui-FG-0: rgba(0, 0, 0, 0.9);
--weui-FG-HALF: rgba(0, 0, 0, 0.9);
--weui-FG-1: rgba(0, 0, 0, 0.5);
--weui-FG-2: rgba(0, 0, 0, 0.3);
--weui-FG-3: rgba(0, 0, 0, 0.1);
--weui-FG-4: rgba(0, 0, 0, 0.15);
--weui-RED: #fa5151;
--weui-ORANGE: #fa9d3b;
--weui-YELLOW: #ffc300;
--weui-GREEN: #91d300;
--weui-LIGHTGREEN: #95ec69;
--weui-BRAND: #07c160;
--weui-BLUE: #10aeff;
--weui-INDIGO: #1485ee;
--weui-PURPLE: #6467f0;
--weui-WHITE: #fff;
--weui-LINK: #576b95;
--weui-TEXTGREEN: #06ae56;
--weui-FG: #000;
--weui-BG: #fff;
--weui-TAG-TEXT-ORANGE: #fa9d3b;
--weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, 0.1);
--weui-TAG-TEXT-GREEN: #06ae56;
--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, 0.1);
--weui-TAG-TEXT-BLUE: #10aeff;
--weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, 0.1);
--weui-TAG-TEXT-BLACK: rgba(0, 0, 0, 0.5);
--weui-TAG-BACKGROUND-BLACK: rgba(0, 0, 0, 0.05);
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) {
--weui-BG-0: #111;
--weui-BG-1: #1e1e1e;
--weui-BG-2: #191919;
--weui-BG-3: #202020;
--weui-BG-4: #404040;
--weui-BG-5: #2c2c2c;
--weui-FG-0: hsla(0, 0%, 100%, 0.8);
--weui-FG-HALF: hsla(0, 0%, 100%, 0.6);
--weui-FG-1: hsla(0, 0%, 100%, 0.5);
--weui-FG-2: hsla(0, 0%, 100%, 0.3);
--weui-FG-3: hsla(0, 0%, 100%, 0.1);
--weui-FG-4: hsla(0, 0%, 100%, 0.15);
--weui-RED: #fa5151;
--weui-ORANGE: #c87d2f;
--weui-YELLOW: #cc9c00;
--weui-GREEN: #74a800;
--weui-LIGHTGREEN: #3eb575;
--weui-BRAND: #07c160;
--weui-BLUE: #10aeff;
--weui-INDIGO: #1196ff;
--weui-PURPLE: #8183ff;
--weui-WHITE: hsla(0, 0%, 100%, 0.8);
--weui-LINK: #7d90a9;
--weui-TEXTGREEN: #259c5c;
--weui-FG: #fff;
--weui-BG: #000;
--weui-TAG-TEXT-ORANGE: rgba(250, 157, 59, 0.6);
--weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, 0.1);
--weui-TAG-TEXT-GREEN: rgba(6, 174, 86, 0.6);
--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, 0.1);
--weui-TAG-TEXT-BLUE: rgba(16, 174, 255, 0.6);
--weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, 0.1);
--weui-TAG-TEXT-BLACK: hsla(0, 0%, 100%, 0.5);
--weui-TAG-BACKGROUND-BLACK: hsla(0, 0%, 100%, 0.05);
}
}
body[data-weui-theme="dark"] {
--weui-BG-0: #111;
--weui-BG-1: #1e1e1e;
--weui-BG-2: #191919;
--weui-BG-3: #202020;
--weui-BG-4: #404040;
--weui-BG-5: #2c2c2c;
--weui-FG-0: hsla(0, 0%, 100%, 0.8);
--weui-FG-HALF: hsla(0, 0%, 100%, 0.6);
--weui-FG-1: hsla(0, 0%, 100%, 0.5);
--weui-FG-2: hsla(0, 0%, 100%, 0.3);
--weui-FG-3: hsla(0, 0%, 100%, 0.1);
--weui-FG-4: hsla(0, 0%, 100%, 0.15);
--weui-RED: #fa5151;
--weui-ORANGE: #c87d2f;
--weui-YELLOW: #cc9c00;
--weui-GREEN: #74a800;
--weui-LIGHTGREEN: #3eb575;
--weui-BRAND: #07c160;
--weui-BLUE: #10aeff;
--weui-INDIGO: #1196ff;
--weui-PURPLE: #8183ff;
--weui-WHITE: hsla(0, 0%, 100%, 0.8);
--weui-LINK: #7d90a9;
--weui-TEXTGREEN: #259c5c;
--weui-FG: #fff;
--weui-BG: #000;
--weui-TAG-TEXT-ORANGE: rgba(250, 157, 59, 0.6);
--weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, 0.1);
--weui-TAG-TEXT-GREEN: rgba(6, 174, 86, 0.6);
--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, 0.1);
--weui-TAG-TEXT-BLUE: rgba(16, 174, 255, 0.6);
--weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, 0.1);
--weui-TAG-TEXT-BLACK: hsla(0, 0%, 100%, 0.5);
--weui-TAG-BACKGROUND-BLACK: hsla(0, 0%, 100%, 0.05);
}
body[data-weui-mode="care"] {
--weui-BG-0: #ededed;
--weui-BG-1: #f7f7f7;
--weui-BG-2: #fff;
--weui-BG-3: #f7f7f7;
--weui-BG-4: #4c4c4c;
--weui-BG-5: #fff;
--weui-FG-0: #000;
--weui-FG-HALF: #000;
--weui-FG-1: rgba(0, 0, 0, 0.6);
--weui-FG-2: rgba(0, 0, 0, 0.42);
--weui-FG-3: rgba(0, 0, 0, 0.1);
--weui-FG-4: rgba(0, 0, 0, 0.15);
--weui-RED: #dc3636;
--weui-ORANGE: #e17719;
--weui-YELLOW: #bb8e00;
--weui-GREEN: #4f8400;
--weui-LIGHTGREEN: #2e8800;
--weui-BRAND: #018942;
--weui-BLUE: #007dbb;
--weui-INDIGO: #0075e2;
--weui-PURPLE: #6265f1;
--weui-WHITE: #fff;
--weui-LINK: #576b95;
--weui-TEXTGREEN: #06ae56;
--weui-FG: #000;
--weui-BG: #fff;
--weui-TAG-TEXT-ORANGE: #e17719;
--weui-TAG-BACKGROUND-ORANGE: rgba(225, 119, 25, 0.1);
--weui-TAG-TEXT-GREEN: #06ae56;
--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, 0.1);
--weui-TAG-TEXT-BLUE: #007dbb;
--weui-TAG-BACKGROUND-BLUE: rgba(0, 125, 187, 0.1);
--weui-TAG-TEXT-BLACK: rgba(0, 0, 0, 0.5);
--weui-TAG-BACKGROUND-BLACK: rgba(0, 0, 0, 0.05);
}
@media (prefers-color-scheme: dark) {
body[data-weui-mode="care"]:not([data-weui-theme="light"]) {
--weui-BG-0: #111;
--weui-BG-1: #1e1e1e;
--weui-BG-2: #191919;
--weui-BG-3: #202020;
--weui-BG-4: #404040;
--weui-BG-5: #2c2c2c;
--weui-FG-0: hsla(0, 0%, 100%, 0.85);
--weui-FG-HALF: hsla(0, 0%, 100%, 0.65);
--weui-FG-1: hsla(0, 0%, 100%, 0.55);
--weui-FG-2: hsla(0, 0%, 100%, 0.35);
--weui-FG-3: hsla(0, 0%, 100%, 0.1);
--weui-FG-4: hsla(0, 0%, 100%, 0.15);
--weui-RED: #fa5151;
--weui-ORANGE: #c87d2f;
--weui-YELLOW: #cc9c00;
--weui-GREEN: #74a800;
--weui-LIGHTGREEN: #3eb575;
--weui-BRAND: #07c160;
--weui-BLUE: #10aeff;
--weui-INDIGO: #1196ff;
--weui-PURPLE: #8183ff;
--weui-WHITE: hsla(0, 0%, 100%, 0.8);
--weui-LINK: #7d90a9;
--weui-TEXTGREEN: #259c5c;
--weui-FG: #fff;
--weui-BG: #000;
--weui-TAG-TEXT-ORANGE: rgba(250, 157, 59, 0.6);
--weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, 0.1);
--weui-TAG-TEXT-GREEN: rgba(6, 174, 86, 0.6);
--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, 0.1);
--weui-TAG-TEXT-BLUE: rgba(16, 174, 255, 0.6);
--weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, 0.1);
--weui-TAG-TEXT-BLACK: hsla(0, 0%, 100%, 0.5);
--weui-TAG-BACKGROUND-BLACK: hsla(0, 0%, 100%, 0.05);
}
}
body[data-weui-mode="care"][data-weui-theme="dark"] {
--weui-BG-0: #111;
--weui-BG-1: #1e1e1e;
--weui-BG-2: #191919;
--weui-BG-3: #202020;
--weui-BG-4: #404040;
--weui-BG-5: #2c2c2c;
--weui-FG-0: hsla(0, 0%, 100%, 0.85);
--weui-FG-HALF: hsla(0, 0%, 100%, 0.65);
--weui-FG-1: hsla(0, 0%, 100%, 0.55);
--weui-FG-2: hsla(0, 0%, 100%, 0.35);
--weui-FG-3: hsla(0, 0%, 100%, 0.1);
--weui-FG-4: hsla(0, 0%, 100%, 0.15);
--weui-RED: #fa5151;
--weui-ORANGE: #c87d2f;
--weui-YELLOW: #cc9c00;
--weui-GREEN: #74a800;
--weui-LIGHTGREEN: #3eb575;
--weui-BRAND: #07c160;
--weui-BLUE: #10aeff;
--weui-INDIGO: #1196ff;
--weui-PURPLE: #8183ff;
--weui-WHITE: hsla(0, 0%, 100%, 0.8);
--weui-LINK: #7d90a9;
--weui-TEXTGREEN: #259c5c;
--weui-FG: #fff;
--weui-BG: #000;
--weui-TAG-TEXT-ORANGE: rgba(250, 157, 59, 0.6);
--weui-TAG-BACKGROUND-ORANGE: rgba(250, 157, 59, 0.1);
--weui-TAG-TEXT-GREEN: rgba(6, 174, 86, 0.6);
--weui-TAG-BACKGROUND-GREEN: rgba(6, 174, 86, 0.1);
--weui-TAG-TEXT-BLUE: rgba(16, 174, 255, 0.6);
--weui-TAG-BACKGROUND-BLUE: rgba(16, 174, 255, 0.1);
--weui-TAG-TEXT-BLACK: hsla(0, 0%, 100%, 0.5);
--weui-TAG-BACKGROUND-BLACK: hsla(0, 0%, 100%, 0.05);
}
body {
--weui-BG-COLOR-ACTIVE: #ececec;
}
body[data-weui-theme="dark"] {
--weui-BG-COLOR-ACTIVE: #373737;
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) {
--weui-BG-COLOR-ACTIVE: #373737;
}
}
[class*=" weui-icon-"][class*=" weui-icon-"],
[class*=" weui-icon-"][class^="weui-icon-"],
[class^="weui-icon-"][class*=" weui-icon-"],
[class^="weui-icon-"][class^="weui-icon-"] {
display: inline-block;
vertical-align: middle;
font-size: 10px;
width: 2.4em;
height: 2.4em;
-webkit-mask-position: 50% 50%;
mask-position: 50% 50%;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: 100%;
mask-size: 100%;
background-color: currentColor;
}
.weui-icon-circle {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-download {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M11.25%2012.04l-1.72-1.72-1.06%201.06%202.828%202.83a1%201%200%20001.414-.001l2.828-2.828-1.06-1.061-1.73%201.73V7h-1.5v5.04zm0-5.04V2h1.5v5h6.251c.55%200%20.999.446.999.996v13.008a.998.998%200%2001-.996.996H4.996A.998.998%200%20014%2021.004V7.996A1%201%200%20014.999%207h6.251z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M11.25%2012.04l-1.72-1.72-1.06%201.06%202.828%202.83a1%201%200%20001.414-.001l2.828-2.828-1.06-1.061-1.73%201.73V7h-1.5v5.04zm0-5.04V2h1.5v5h6.251c.55%200%20.999.446.999.996v13.008a.998.998%200%2001-.996.996H4.996A.998.998%200%20014%2021.004V7.996A1%201%200%20014.999%207h6.251z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-info {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-.75-12v7h1.5v-7h-1.5zM12%209a1%201%200%20100-2%201%201%200%20000%202z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-.75-12v7h1.5v-7h-1.5zM12%209a1%201%200%20100-2%201%201%200%20000%202z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-safe-success {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201000%201000%22%3E%3Cpath%20d%3D%22M500.9%204.6C315.5%2046.7%20180.4%2093.1%2057.6%20132c0%20129.3.2%20231.7.2%20339.7%200%20304.2%20248.3%20471.6%20443.1%20523.7C695.7%20943.3%20944%20775.9%20944%20471.7c0-108%20.2-210.4.2-339.7C821.4%2093.1%20686.3%2046.7%20500.9%204.6zm248.3%20349.1l-299.7%20295c-2.1%202-5.3%202-7.4-.1L304.4%20506.1c-2-2.1-2.3-5.7-.6-8l18.3-24.9c1.7-2.3%205-2.8%207.2-1l112.2%2086c2.3%201.8%206%201.7%208.1-.1l274.7-228.9c2.2-1.8%205.7-1.7%207.7.3l17%2016.8c2.2%202.1%202.2%205.3.2%207.4z%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23070202%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201000%201000%22%3E%3Cpath%20d%3D%22M500.9%204.6C315.5%2046.7%20180.4%2093.1%2057.6%20132c0%20129.3.2%20231.7.2%20339.7%200%20304.2%20248.3%20471.6%20443.1%20523.7C695.7%20943.3%20944%20775.9%20944%20471.7c0-108%20.2-210.4.2-339.7C821.4%2093.1%20686.3%2046.7%20500.9%204.6zm248.3%20349.1l-299.7%20295c-2.1%202-5.3%202-7.4-.1L304.4%20506.1c-2-2.1-2.3-5.7-.6-8l18.3-24.9c1.7-2.3%205-2.8%207.2-1l112.2%2086c2.3%201.8%206%201.7%208.1-.1l274.7-228.9c2.2-1.8%205.7-1.7%207.7.3l17%2016.8c2.2%202.1%202.2%205.3.2%207.4z%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23070202%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-safe-warn {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201000%201000%22%3E%3Cpath%20d%3D%22M500.9%204.5c-185.4%2042-320.4%2088.4-443.2%20127.3%200%20129.3.2%20231.7.2%20339.6%200%20304.1%20248.2%20471.4%20443%20523.6%20194.7-52.2%20443-219.5%20443-523.6%200-107.9.2-210.3.2-339.6C821.3%2092.9%20686.2%2046.5%20500.9%204.5zm-26.1%20271.1h52.1c5.8%200%2010.3%204.7%2010.1%2010.4l-11.6%20313.8c-.1%202.8-2.5%205.2-5.4%205.2h-38.2c-2.9%200-5.3-2.3-5.4-5.2L464.8%20286c-.2-5.8%204.3-10.4%2010-10.4zm26.1%20448.3c-20.2%200-36.5-16.3-36.5-36.5s16.3-36.5%2036.5-36.5%2036.5%2016.3%2036.5%2036.5-16.4%2036.5-36.5%2036.5z%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23020202%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201000%201000%22%3E%3Cpath%20d%3D%22M500.9%204.5c-185.4%2042-320.4%2088.4-443.2%20127.3%200%20129.3.2%20231.7.2%20339.6%200%20304.1%20248.2%20471.4%20443%20523.6%20194.7-52.2%20443-219.5%20443-523.6%200-107.9.2-210.3.2-339.6C821.3%2092.9%20686.2%2046.5%20500.9%204.5zm-26.1%20271.1h52.1c5.8%200%2010.3%204.7%2010.1%2010.4l-11.6%20313.8c-.1%202.8-2.5%205.2-5.4%205.2h-38.2c-2.9%200-5.3-2.3-5.4-5.2L464.8%20286c-.2-5.8%204.3-10.4%2010-10.4zm26.1%20448.3c-20.2%200-36.5-16.3-36.5-36.5s16.3-36.5%2036.5-36.5%2036.5%2016.3%2036.5%2036.5-16.4%2036.5-36.5%2036.5z%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20fill%3D%22%23020202%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-success {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-success-circle {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zm-1.172-6.242l5.809-5.808.848.849-5.95%205.95a1%201%200%2001-1.414%200L7%2012.426l.849-.849%202.98%202.98z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zm-1.172-6.242l5.809-5.808.848.849-5.95%205.95a1%201%200%2001-1.414%200L7%2012.426l.849-.849%202.98%202.98z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-success-no-circle {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-waiting {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.75%2011.38V6h-1.5v6l4.243%204.243%201.06-1.06-3.803-3.804zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.75%2011.38V6h-1.5v6l4.243%204.243%201.06-1.06-3.803-3.804zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-waiting-circle {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.6%2011.503l3.891%203.891-.848.849L11.4%2012V6h1.2v5.503zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.6%2011.503l3.891%203.891-.848.849L11.4%2012V6h1.2v5.503zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-warn {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-.763-15.864l.11%207.596h1.305l.11-7.596h-1.525zm.759%2010.967c.512%200%20.902-.383.902-.882%200-.5-.39-.882-.902-.882a.878.878%200%2000-.896.882c0%20.499.396.882.896.882z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-.763-15.864l.11%207.596h1.305l.11-7.596h-1.525zm.759%2010.967c.512%200%20.902-.383.902-.882%200-.5-.39-.882-.902-.882a.878.878%200%2000-.896.882c0%20.499.396.882.896.882z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-info-circle {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zM11.4%2010h1.2v7h-1.2v-7zm.6-1a1%201%200%20110-2%201%201%200%20010%202z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zM11.4%2010h1.2v7h-1.2v-7zm.6-1a1%201%200%20110-2%201%201%200%20010%202z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-cancel {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6z%22%20fill-rule%3D%22nonzero%22%2F%3E%3Cpath%20d%3D%22M12.849%2012l3.11%203.111-.848.849L12%2012.849l-3.111%203.11-.849-.848L11.151%2012l-3.11-3.111.848-.849L12%2011.151l3.111-3.11.849.848L12.849%2012z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20fill-rule%3D%22evenodd%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6z%22%20fill-rule%3D%22nonzero%22%2F%3E%3Cpath%20d%3D%22M12.849%2012l3.11%203.111-.848.849L12%2012.849l-3.111%203.11-.849-.848L11.151%2012l-3.11-3.111.848-.849L12%2011.151l3.111-3.11.849.848L12.849%2012z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E);
}
.weui-icon-search {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M16.31%2015.561l4.114%204.115-.848.848-4.123-4.123a7%207%200%2011.857-.84zM16.8%2011a5.8%205.8%200%2010-11.6%200%205.8%205.8%200%200011.6%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M16.31%2015.561l4.114%204.115-.848.848-4.123-4.123a7%207%200%2011.857-.84zM16.8%2011a5.8%205.8%200%2010-11.6%200%205.8%205.8%200%200011.6%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-clear {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M13.06%2012l3.006-3.005-1.06-1.06L12%2010.938%208.995%207.934l-1.06%201.06L10.938%2012l-3.005%203.005%201.06%201.06L12%2013.062l3.005%203.005%201.06-1.06L13.062%2012zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M13.06%2012l3.006-3.005-1.06-1.06L12%2010.938%208.995%207.934l-1.06%201.06L10.938%2012l-3.005%203.005%201.06%201.06L12%2013.062l3.005%203.005%201.06-1.06L13.062%2012zM12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-back {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm1.999-6.563L10.68%2012%2014%208.562%2012.953%207.5%209.29%2011.277a1.045%201.045%200%20000%201.446l3.663%203.777L14%2015.437z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm1.999-6.563L10.68%2012%2014%208.562%2012.953%207.5%209.29%2011.277a1.045%201.045%200%20000%201.446l3.663%203.777L14%2015.437z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-delete {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M6.774%206.4l.812%2013.648a.8.8%200%2000.798.752h7.232a.8.8%200%2000.798-.752L17.226%206.4H6.774zm11.655%200l-.817%2013.719A2%202%200%200115.616%2022H8.384a2%202%200%2001-1.996-1.881L5.571%206.4H3.5v-.7a.5.5%200%2001.5-.5h16a.5.5%200%2001.5.5v.7h-2.071zM14%203a.5.5%200%2001.5.5v.7h-5v-.7A.5.5%200%200110%203h4zM9.5%209h1.2l.5%209H10l-.5-9zm3.8%200h1.2l-.5%209h-1.2l.5-9z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M6.774%206.4l.812%2013.648a.8.8%200%2000.798.752h7.232a.8.8%200%2000.798-.752L17.226%206.4H6.774zm11.655%200l-.817%2013.719A2%202%200%200115.616%2022H8.384a2%202%200%2001-1.996-1.881L5.571%206.4H3.5v-.7a.5.5%200%2001.5-.5h16a.5.5%200%2001.5.5v.7h-2.071zM14%203a.5.5%200%2001.5.5v.7h-5v-.7A.5.5%200%200110%203h4zM9.5%209h1.2l.5%209H10l-.5-9zm3.8%200h1.2l-.5%209h-1.2l.5-9z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-success-no-circle-thin {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.864%2016.617l-5.303-5.303-1.061%201.06%205.657%205.657a1%201%200%20001.414%200L21.238%206.364l-1.06-1.06L8.864%2016.616z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.864%2016.617l-5.303-5.303-1.061%201.06%205.657%205.657a1%201%200%20001.414%200L21.238%206.364l-1.06-1.06L8.864%2016.616z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-arrow {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-arrow-bold {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20height%3D%2224%22%20width%3D%2212%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.157%2012.711L4.5%2018.368l-1.414-1.414%204.95-4.95-4.95-4.95L4.5%205.64l5.657%205.657a1%201%200%20010%201.414z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20height%3D%2224%22%20width%3D%2212%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.157%2012.711L4.5%2018.368l-1.414-1.414%204.95-4.95-4.95-4.95L4.5%205.64l5.657%205.657a1%201%200%20010%201.414z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-back-arrow {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M3.343%2012l7.071%207.071L9%2020.485l-7.778-7.778a1%201%200%20010-1.414L9%203.515l1.414%201.414L3.344%2012z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M3.343%2012l7.071%207.071L9%2020.485l-7.778-7.778a1%201%200%20010-1.414L9%203.515l1.414%201.414L3.344%2012z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-back-arrow-thin {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-close {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2010.586l5.657-5.657%201.414%201.414L13.414%2012l5.657%205.657-1.414%201.414L12%2013.414l-5.657%205.657-1.414-1.414L10.586%2012%204.929%206.343%206.343%204.93%2012%2010.586z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2010.586l5.657-5.657%201.414%201.414L13.414%2012l5.657%205.657-1.414%201.414L12%2013.414l-5.657%205.657-1.414-1.414L10.586%2012%204.929%206.343%206.343%204.93%2012%2010.586z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-close-thin {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-back-circle {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zm1.999-5.363L12.953%2016.5%209.29%2012.723a1.045%201.045%200%20010-1.446L12.953%207.5%2014%208.563%2010.68%2012%2014%2015.438z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm0-1.2a8.8%208.8%200%20100-17.6%208.8%208.8%200%20000%2017.6zm1.999-5.363L12.953%2016.5%209.29%2012.723a1.045%201.045%200%20010-1.446L12.953%207.5%2014%208.563%2010.68%2012%2014%2015.438z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-icon-success {
color: #07c160;
color: var(--weui-BRAND);
}
.weui-icon-waiting {
color: #10aeff;
color: var(--weui-BLUE);
}
.weui-icon-warn {
color: #fa5151;
color: var(--weui-RED);
}
.weui-icon-info {
color: #10aeff;
color: var(--weui-BLUE);
}
.weui-icon-success-circle,
.weui-icon-success-no-circle,
.weui-icon-success-no-circle-thin {
color: #07c160;
color: var(--weui-BRAND);
}
.weui-icon-waiting-circle {
color: #10aeff;
color: var(--weui-BLUE);
}
.weui-icon-circle {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
}
.weui-icon-download {
color: #07c160;
color: var(--weui-BRAND);
}
.weui-icon-info-circle {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
}
.weui-icon-safe-success {
color: #07c160;
color: var(--weui-BRAND);
}
.weui-icon-safe-warn {
color: #ffc300;
color: var(--weui-YELLOW);
}
.weui-icon-cancel {
color: #fa5151;
color: var(--weui-RED);
}
.weui-icon-search {
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
.weui-icon-clear {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
}
.weui-icon-clear:active {
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
.weui-icon-delete.weui-icon_gallery-delete {
color: #fff;
color: var(--weui-WHITE);
}
.weui-icon-arrow-bold.weui-icon-arrow,
.weui-icon-arrow-bold.weui-icon-arrow-bold,
.weui-icon-arrow-bold.weui-icon-back-arrow,
.weui-icon-arrow-bold.weui-icon-back-arrow-thin,
.weui-icon-arrow.weui-icon-arrow,
.weui-icon-arrow.weui-icon-arrow-bold,
.weui-icon-arrow.weui-icon-back-arrow,
.weui-icon-arrow.weui-icon-back-arrow-thin,
.weui-icon-back-arrow-thin.weui-icon-arrow,
.weui-icon-back-arrow-thin.weui-icon-arrow-bold,
.weui-icon-back-arrow-thin.weui-icon-back-arrow,
.weui-icon-back-arrow-thin.weui-icon-back-arrow-thin,
.weui-icon-back-arrow.weui-icon-arrow,
.weui-icon-back-arrow.weui-icon-arrow-bold,
.weui-icon-back-arrow.weui-icon-back-arrow,
.weui-icon-back-arrow.weui-icon-back-arrow-thin {
width: 1.2em;
}
.weui-icon-arrow,
.weui-icon-arrow-bold {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
}
.weui-icon-back,
.weui-icon-back-arrow,
.weui-icon-back-arrow-thin,
.weui-icon-back-circle {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-icon_msg.weui-icon_msg {
width: 6.4em;
height: 6.4em;
}
.weui-icon_msg.weui-icon_msg.weui-icon-warn {
color: #fa5151;
color: var(--weui-RED);
}
.weui-icon_msg.weui-icon_msg.weui-icon-info-circle {
color: #10aeff;
color: var(--weui-BLUE);
}
.weui-icon_msg-primary.weui-icon_msg-primary {
width: 6.4em;
height: 6.4em;
}
.weui-icon_msg-primary.weui-icon_msg-primary.weui-icon-warn {
color: #ffc300;
color: var(--weui-YELLOW);
}
.weui-hidden_abs {
opacity: 0;
}
.weui-hidden-space:empty:before,
.weui-hidden_abs {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
}
.weui-hidden-space:empty:before {
content: "\00A0";
}
.weui-a11y-combo {
position: relative;
}
.weui-a11y-combo__helper {
opacity: 0;
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
}
.weui-a11y-combo__content {
position: relative;
z-index: 1;
}
.weui-wa-hotarea-el {
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
min-width: 44px;
min-height: 44px;
width: 100%;
height: 100%;
}
.weui-wa-hotarea,
.weui-wa-hotarea-el__wrp,
.weui-wa-hotarea_before {
position: relative;
}
.weui-wa-hotarea-el__wrp a,
.weui-wa-hotarea-el__wrp navigator,
.weui-wa-hotarea_before a,
.weui-wa-hotarea_before navigator,
.weui-wa-hotarea a,
.weui-wa-hotarea navigator {
position: relative;
z-index: 1;
}
.weui-wa-hotarea:after,
.weui-wa-hotarea_before:before {
content: "";
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
min-width: 44px;
min-height: 44px;
width: 100%;
height: 100%;
}
.weui-link {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.weui-link,
.weui-link:visited {
color: #576b95;
color: var(--weui-LINK);
}
.weui-link:active {
opacity: 0.5;
}
.weui-btn {
position: relative;
display: block;
width: 184px;
margin-left: auto;
margin-right: auto;
padding: 8px 24px;
box-sizing: border-box;
font-weight: 700;
font-size: 17px;
text-align: center;
text-decoration: none;
color: #fff;
line-height: 1.88235294;
border-radius: 8px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-user-select: none;
user-select: none;
}
.weui-btn:before {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.1);
background-color: var(--weui-BTN-ACTIVE-MASK);
border-radius: 8px;
}
.weui-btn:not(.weui-btn_disabled):not(.weui-btn_loading):active:before,
.weui-btn:not([disabled]):not(.weui-btn_loading):active:before {
content: "";
}
.weui-btn_block {
width: auto;
}
.weui-btn_inline {
display: inline-block;
}
.weui-btn_default {
background-color: #f2f2f2;
background-color: var(--weui-BTN-DEFAULT-BG);
}
.weui-btn_default,
.weui-btn_default:not(.weui-btn_disabled):visited {
color: #06ae56;
color: var(--weui-BTN-DEFAULT-COLOR);
}
.weui-btn_primary {
background-color: #07c160;
background-color: var(--weui-BRAND);
}
.weui-btn_primary:not(.weui-btn_disabled):visited {
color: #fff;
}
.weui-btn_warn {
background-color: #f2f2f2;
background-color: var(--weui-BTN-DEFAULT-BG);
}
.weui-btn_warn,
.weui-btn_warn:not(.weui-btn_disabled):visited {
color: #fa5151;
color: var(--weui-RED);
}
.weui-btn[disabled],
.weui-btn_disabled {
color: rgba(0, 0, 0, 0.2);
color: var(--weui-BTN-DISABLED-FONT-COLOR);
background-color: #f2f2f2;
background-color: var(--weui-BTN-DEFAULT-BG);
}
.weui-btn_loading .weui-loading {
margin: -0.2em 0.34em 0 0;
}
.weui-btn_loading .weui-primary-loading {
margin: -0.2em 8px 0 0;
vertical-align: middle;
color: currentColor;
}
.weui-btn_loading .weui-primary-loading:before {
content: "";
}
.weui-btn_loading.weui-btn_primary {
color: #fff;
color: var(--weui-WHITE);
}
.weui-btn_cell {
position: relative;
display: block;
margin-left: auto;
margin-right: auto;
box-sizing: border-box;
font-size: 17px;
text-align: center;
text-decoration: none;
color: #fff;
line-height: 1.41176471;
padding: 16px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
overflow: hidden;
background-color: #fff;
background-color: var(--weui-BG-5);
}
.weui-btn_cell+.weui-btn_cell {
margin-top: 16px;
}
.weui-btn_cell:active {
background-color: #ececec;
background-color: var(--weui-BG-COLOR-ACTIVE);
}
.weui-btn_cell__icon {
display: inline-block;
vertical-align: middle;
width: 24px;
height: 24px;
margin: -0.2em 0.34em 0 0;
}
.weui-btn_cell-default {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-btn_cell-primary {
color: #576b95;
color: var(--weui-LINK);
}
.weui-btn_cell-warn {
color: #fa5151;
color: var(--weui-RED);
}
.weui-bottom-fixed-opr-page {
height: 100%;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
}
.weui-bottom-fixed-opr-page__content {
min-height: 0;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
padding-bottom: 80px;
box-sizing: border-box;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
}
.weui-bottom-fixed-opr {
padding: 16px 32px 24px;
padding: 16px calc(32px + constant(safe-area-inset-right)) calc(24px + constant(safe-area-inset-bottom)) calc(32px + constant(safe-area-inset-left));
padding: 16px calc(32px + env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) calc(32px + env(safe-area-inset-left));
background: #fff;
position: relative;
}
.weui-bottom-fixed-opr:before {
content: "";
height: 80px;
background: -webkit-linear-gradient(bottom, #fff, hsla(0, 0%, 100%, 0));
background: linear-gradient(0deg, #fff, hsla(0, 0%, 100%, 0));
position: absolute;
bottom: calc(100% - 1px);
left: 0;
right: 0;
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
body[data-weui-theme="dark"] .weui-bottom-fixed-opr {
background: #191919;
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) .weui-bottom-fixed-opr {
background: #191919;
}
}
body[data-weui-theme="dark"] .weui-bottom-fixed-opr:before {
background: -webkit-linear-gradient(bottom, #191919, rgba(25, 25, 25, 0));
background: linear-gradient(0deg, #191919, rgba(25, 25, 25, 0));
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) .weui-bottom-fixed-opr:before {
background: -webkit-linear-gradient(bottom, #191919, rgba(25, 25, 25, 0));
background: linear-gradient(0deg, #191919, rgba(25, 25, 25, 0));
}
}
.weui-bottom-fixed-opr-page .weui-bottom-fixed-opr {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
.weui-bottom-fixed-opr-page .weui-bottom-fixed-opr .weui-btn {
width: 184px;
padding-left: 16px;
padding-right: 16px;
}
.weui-bottom-fixed-opr-page .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2),
.weui-bottom-fixed-opr-page .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2)+.weui-btn {
margin: 0 8px;
width: 136px;
}
.weui-bottom-fixed-opr-page .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2)+.weui-btn:first-child,
.weui-bottom-fixed-opr-page .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2):first-child {
margin-left: 0;
}
.weui-bottom-fixed-opr-page .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2)+.weui-btn:last-child,
.weui-bottom-fixed-opr-page .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2):last-child {
margin-right: 0;
}
.weui-bottom-fixed-opr-page_btn-wrap .weui-bottom-fixed-opr {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
}
.weui-bottom-fixed-opr-page_btn-wrap .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2),
.weui-bottom-fixed-opr-page_btn-wrap .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2)+.weui-btn {
width: 184px;
margin: 16px 0 0;
}
.weui-bottom-fixed-opr-page_btn-wrap .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2)+.weui-btn:first-child,
.weui-bottom-fixed-opr-page_btn-wrap .weui-bottom-fixed-opr .weui-btn:nth-last-child(n + 2):first-child {
margin-top: 0;
}
.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed {
padding: 0;
}
.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-half-screen-dialog__hd {
padding: 0 24px;
padding: 0 calc(24px + constant(safe-area-inset-right)) 0 calc(24px + constant(safe-area-inset-left));
padding: 0 calc(24px + env(safe-area-inset-right)) 0 calc(24px + env(safe-area-inset-left));
}
.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-half-screen-dialog__bd {
padding-bottom: 0;
}
.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-half-screen-dialog__ft {
padding: 0;
}
.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-bottom-fixed-opr-page {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
min-height: 0;
}
.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-bottom-fixed-opr-page__content {
padding: 0 24px;
padding: 0 calc(24px + constant(safe-area-inset-right)) 0 calc(24px + constant(safe-area-inset-left));
padding: 0 calc(24px + env(safe-area-inset-right)) 0 calc(24px + env(safe-area-inset-left));
}
.weui-half-screen-dialog.weui-half-screen-dialog_bottom-fixed .weui-bottom-fixed-opr {
padding: 16px 0 64px;
padding: 16px 0 calc(64px + constant(safe-area-inset-bottom));
padding: 16px 0 calc(64px + env(safe-area-inset-bottom));
}
button.weui-btn,
input.weui-btn {
border-width: 0;
outline: 0;
-webkit-appearance: none;
}
button.weui-btn:focus,
input.weui-btn:focus {
outline: 0;
}
button.weui-btn_inline,
button.weui-btn_mini,
input.weui-btn_inline,
input.weui-btn_mini {
width: auto;
}
.weui-btn_mini {
font-size: 16px;
border-radius: 6px;
}
.weui-btn_mini,
.weui-btn_xmini {
display: inline-block;
width: auto;
padding: 0 12px;
line-height: 2;
}
.weui-btn_xmini {
font-size: 14px;
font-weight: 500;
border-radius: 2.8px;
}
.weui-btn+.weui-btn {
margin-top: 16px;
}
.weui-btn.weui-btn_mini+.weui-btn.weui-btn_mini,
.weui-btn.weui-btn_xmini+.weui-btn.weui-btn_xmini {
margin-top: auto;
}
.weui-btn.weui-btn_inline+.weui-btn.weui-btn_inline {
margin-left: 16px;
}
.weui-btn-area {
margin: 48px 16px 8px;
}
.weui-btn-area_inline {
display: -webkit-box;
display: -webkit-flex;
display: flex;
}
.weui-btn-area_inline .weui-btn {
margin-top: auto;
margin-right: 16px;
width: 100%;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.weui-btn-area_inline .weui-btn:last-child {
margin-right: 0;
}
.weui-btn_icon,
.weui-btn_reset {
background: transparent;
border: 0;
padding: 0;
outline: 0;
}
.weui-btn_icon {
font-size: 0;
}
.weui-btn_icon:active [class*="weui-icon-"] {
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
.weui-cells {
margin-top: 8px;
background-color: #fff;
background-color: var(--weui-BG-2);
overflow: hidden;
position: relative;
}
.weui-cells:before {
top: 0;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-cells:after,
.weui-cells:before {
content: " ";
position: absolute;
left: 0;
right: 0;
height: 1px;
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
z-index: 2;
}
.weui-cells:after {
bottom: 0;
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-cells__title {
margin-top: 16px;
margin-bottom: 3px;
padding-left: 16px;
padding-right: 16px;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
font-size: 14px;
line-height: 1.4;
}
.weui-cells__title+.weui-cells {
margin-top: 0;
}
.weui-cells__tips {
margin-top: 8px;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
padding-left: 16px;
padding-right: 16px;
font-size: 14px;
line-height: 1.4;
}
.weui-cells__tips a,
.weui-cells__tips navigator {
color: #576b95;
color: var(--weui-LINK);
}
.weui-cells__tips navigator {
display: inline;
}
.weui-cell {
padding: 16px;
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
line-height: 1.41176471;
font-size: 17px;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-cell:before {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
left: 16px;
z-index: 2;
}
.weui-cell:first-child:before {
display: none;
}
.weui-cell_active:active:after {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.1);
background: var(--weui-FG-3);
pointer-events: none;
}
.weui-cell_primary {
-webkit-box-align: start;
-webkit-align-items: flex-start;
align-items: flex-start;
}
.weui-cell__bd {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
min-width: 0;
}
.weui-cell__ft {
text-align: right;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
.weui-cell__ft button {
vertical-align: bottom;
}
.weui-cell__name {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-cell__desc {
font-size: 12px;
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
line-height: 1.4;
padding-top: 4px;
}
.weui-cell_swiped {
display: block;
padding: 0;
}
.weui-cell_swiped>.weui-cell__bd {
position: relative;
z-index: 1;
background-color: #fff;
background-color: var(--weui-BG-2);
}
.weui-cell_swiped>.weui-cell__ft {
position: absolute;
right: 0;
top: 0;
bottom: 0;
color: #fff;
}
.weui-cell_swiped>.weui-cell__ft,
.weui-swiped-btn {
display: -webkit-box;
display: -webkit-flex;
display: flex;
}
.weui-swiped-btn {
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
padding: 16px 1em;
line-height: 1.41176471;
color: inherit;
}
.weui-swiped-btn_default {
background-color: #ededed;
background-color: var(--weui-BG-0);
}
.weui-swiped-btn_warn {
background-color: #fa5151;
background-color: var(--weui-RED);
}
.weui-cell_access {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
color: inherit;
}
.weui-cell_access:active:after {
content: "";
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.1);
background: var(--weui-FG-3);
pointer-events: none;
}
.weui-cell_access .weui-cell__ft {
padding-right: 24px;
position: relative;
}
.weui-cell_access .weui-cell__ft:after {
content: " ";
width: 12px;
height: 24px;
-webkit-mask-position: 0 0;
mask-position: 0 0;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: 100%;
mask-size: 100%;
background-color: currentColor;
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
position: absolute;
top: 50%;
right: 0;
margin-top: -12px;
}
.weui-cell_link {
color: #576b95;
color: var(--weui-LINK);
}
.weui-cell_link:first-child:before {
display: block;
}
.weui-check__label {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.weui-check__label.weui-cell_disabled,
.weui-check__label.weui-cell_readonly {
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
}
.weui-check {
opacity: 0;
position: absolute;
width: 0;
height: 0;
overflow: hidden;
}
.weui-check[disabled]+.weui-icon-checked {
opacity: 0.1;
}
.weui-cells_radio .weui-cell__ft {
padding-left: 16px;
font-size: 0;
}
.weui-cells_radio .weui-check+.weui-icon-checked {
min-width: 16px;
color: transparent;
}
.weui-cells_radio .weui-check:checked+.weui-icon-checked,
.weui-cells_radio .weui-check[aria-checked="true"]+.weui-icon-checked {
color: #07c160;
color: var(--weui-BRAND);
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M8.657%2018.435L3%2012.778l1.414-1.414%204.95%204.95L20.678%205l1.414%201.414-12.02%2012.021a1%201%200%2001-1.415%200z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
}
.weui-cells_checkbox .weui-check__label:before {
left: 55px;
}
.weui-cells_checkbox .weui-cell__hd {
padding-right: 16px;
font-size: 0;
}
.weui-cells_checkbox .weui-icon-checked {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);
}
.weui-cells_checkbox .weui-check:checked+.weui-icon-checked,
.weui-cells_checkbox .weui-check[aria-checked="true"]+.weui-icon-checked {
color: #07c160;
color: var(--weui-BRAND);
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);
}
.weui-label {
display: block;
width: 105px;
word-wrap: break-word;
word-break: break-all;
}
.weui-input {
width: 100%;
border: 0;
outline: 0;
-webkit-appearance: none;
background-color: transparent;
font-size: inherit;
color: inherit;
height: 1.41176471em;
line-height: 1.41176471;
}
.weui-input::-webkit-inner-spin-button,
.weui-input::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
.weui-input:focus:not(:placeholder-shown)+.weui-btn_input-clear {
display: inline;
}
.weui-textarea {
display: block;
border: 0;
resize: none;
background: transparent;
width: 100%;
color: inherit;
font-size: 1em;
line-height: inherit;
height: 80px;
outline: 0;
}
.weui-textarea-counter {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
text-align: right;
font-size: 14px;
}
.weui-cell_warn,
.weui-cell_warn .weui-textarea-counter {
color: #fa5151;
color: var(--weui-RED);
}
.weui-cell_warn .weui-icon-warn {
display: inline-block;
}
.weui-cell_disabled .weui-input:disabled,
.weui-cell_disabled .weui-textarea:disabled,
.weui-cell_readonly .weui-input:disabled,
.weui-cell_readonly .weui-textarea:disabled {
opacity: 1;
-webkit-text-fill-color: rgba(0, 0, 0, 0.5);
-webkit-text-fill-color: var(--weui-FG-1);
}
.weui-cell_disabled .weui-input[disabled],
.weui-cell_disabled .weui-input[readonly],
.weui-cell_disabled .weui-textarea[disabled],
.weui-cell_disabled .weui-textarea[readonly],
.weui-cell_readonly .weui-input[disabled],
.weui-cell_readonly .weui-input[readonly],
.weui-cell_readonly .weui-textarea[disabled],
.weui-cell_readonly .weui-textarea[readonly] {
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
.weui-btn_input-clear {
display: none;
padding-left: 8px;
}
.weui-btn_input-clear [class*="weui-icon-"] {
width: 18px;
}
.weui-cells_form .weui-cell_disabled:active,
.weui-cells_form .weui-cell_readonly:active,
.weui-cells_form .weui-cell_switch:active,
.weui-cells_form .weui-cell_vcode:active {
background-color: transparent;
}
.weui-cells_form .weui-cell__ft {
font-size: 0;
}
.weui-cells_form .weui-icon-warn {
display: none;
}
.weui-cells_form input,
.weui-cells_form label[for],
.weui-cells_form textarea {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.weui-form-preview {
position: relative;
background-color: #fff;
background-color: var(--weui-BG-2);
}
.weui-form-preview:before {
top: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-form-preview:after,
.weui-form-preview:before {
content: " ";
position: absolute;
left: 0;
right: 0;
height: 1px;
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
}
.weui-form-preview:after {
bottom: 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-form-preview__hd {
position: relative;
padding: 16px;
text-align: right;
line-height: 2.5em;
}
.weui-form-preview__hd:after {
content: " ";
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
left: 16px;
}
.weui-form-preview__hd .weui-form-preview__value {
font-style: normal;
font-size: 1.6em;
}
.weui-form-preview__bd {
padding: 16px;
font-size: 0.9em;
text-align: right;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
line-height: 2;
}
.weui-form-preview__ft {
position: relative;
line-height: 50px;
display: -webkit-box;
display: -webkit-flex;
display: flex;
}
.weui-form-preview__ft:before {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-DIALOG-LINE-COLOR);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-DIALOG-LINE-COLOR);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-form-preview__item {
overflow: hidden;
}
.weui-form-preview__label {
float: left;
margin-right: 1em;
min-width: 4em;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
text-align: justify;
text-align-last: justify;
}
.weui-form-preview__value {
display: block;
overflow: hidden;
word-break: normal;
word-wrap: break-word;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-form-preview__btn {
position: relative;
display: block;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
color: #576b95;
color: var(--weui-LINK);
text-align: center;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
button.weui-form-preview__btn {
background-color: transparent;
border: 0;
outline: 0;
line-height: inherit;
font-size: inherit;
}
.weui-form-preview__btn:active {
background-color: #ececec;
background-color: var(--weui-BG-COLOR-ACTIVE);
}
.weui-form-preview__btn:after {
content: " ";
position: absolute;
left: 0;
top: 0;
width: 1px;
bottom: 0;
border-left: 1px solid rgba(0, 0, 0, 0.1);
border-left: 1px solid var(--weui-DIALOG-LINE-COLOR);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-DIALOG-LINE-COLOR);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}
.weui-form-preview__btn:first-child:after {
display: none;
}
.weui-form-preview__btn_default {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-HALF);
}
.weui-form-preview__btn_primary {
color: #576b95;
color: var(--weui-LINK);
}
.weui-form-preview__list {
padding-top: 24px;
padding-bottom: 24px;
line-height: 1.4;
font-size: 14px;
position: relative;
}
.weui-form-preview__list:before {
content: "";
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-form-preview__list:last-child {
padding-bottom: 0;
}
.weui-form-preview__list .weui-form-preview__label {
text-align: left;
text-align-last: unset;
width: 6em;
}
.weui-form-preview__list .weui-form-preview__value {
-webkit-hyphens: auto;
hyphens: auto;
}
.weui-form-preview__list .weui-form-preview__item {
margin-top: 12px;
}
.weui-form-preview__list .weui-form-preview__item:first-child,
.weui-form-preview__list>.weui-cells__title:first-child {
margin-top: 0;
}
.weui-cell_select {
padding: 0;
}
.weui-cell_select .weui-cell__bd:after {
content: " ";
width: 12px;
height: 24px;
-webkit-mask-position: 0 0;
mask-position: 0 0;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: 100%;
mask-size: 100%;
background-color: currentColor;
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
position: absolute;
top: 50%;
right: 16px;
margin-top: -12px;
}
.weui-select {
-webkit-appearance: none;
border: 0;
outline: 0;
background-color: transparent;
width: 100%;
font-size: inherit;
min-height: 56px;
line-height: 56px;
position: relative;
z-index: 1;
padding-left: 16px;
padding-right: 40px;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
vertical-align: bottom;
box-sizing: border-box;
}
.weui-cell_select-before .weui-cell__hd {
padding-left: 0;
position: relative;
}
.weui-cell_select-before .weui-cell__hd:after {
content: " ";
position: absolute;
right: 0;
top: 0;
width: 1px;
bottom: 0;
border-right: 1px solid rgba(0, 0, 0, 0.1);
border-right: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 100% 0;
transform-origin: 100% 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}
.weui-cell_select-before .weui-cell__hd:before {
content: " ";
width: 12px;
height: 24px;
-webkit-mask-position: 0 0;
mask-position: 0 0;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: 100%;
mask-size: 100%;
background-color: currentColor;
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
position: absolute;
top: 50%;
right: 16px;
margin-top: -12px;
}
.weui-cell_select-before .weui-cell__bd {
padding-left: 16px;
}
.weui-cell_select-before .weui-cell__bd:after {
display: none;
}
.weui-cell_select-before .weui-select {
max-width: 5em;
width: 105px;
box-sizing: content-box;
}
.weui-cell_select-after .weui-cell__hd {
padding-left: 16px;
}
.weui-cell_select-after .weui-select {
padding-left: 0;
}
.weui-cell_vcode {
padding-top: 0;
padding-right: 0;
padding-bottom: 0;
}
.weui-vcode-btn,
.weui-vcode-img {
margin-left: 5px;
height: 56px;
vertical-align: middle;
}
.weui-vcode-btn {
display: inline-block;
padding: 0 0.6em 0 0.7em;
line-height: 56px;
font-size: 17px;
color: #576b95;
color: var(--weui-LINK);
position: relative;
}
.weui-vcode-btn:before {
content: " ";
position: absolute;
left: 0;
top: 0;
width: 1px;
bottom: 0;
border-left: 1px solid rgba(0, 0, 0, 0.1);
border-left: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}
button.weui-vcode-btn {
background-color: transparent;
border: 0;
outline: 0;
}
.weui-vcode-btn:active {
color: var(--weui-LINK-ACTIVE);
}
.weui-gallery {
display: none;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: #000;
z-index: 1000;
}
.weui-gallery__img,
.weui-gallery__opr {
position: absolute;
left: 0;
left: constant(safe-area-inset-left);
left: env(safe-area-inset-left);
right: 0;
right: constant(safe-area-inset-right);
right: env(safe-area-inset-right);
}
.weui-gallery__img {
top: 0;
top: constant(safe-area-inset-top);
top: env(safe-area-inset-top);
bottom: 60px;
bottom: calc(60px + constant(safe-area-inset-bottom));
bottom: calc(60px + env(safe-area-inset-bottom));
width: 100%;
background: 50% no-repeat;
background-size: contain;
}
.weui-gallery__opr {
position: absolute;
bottom: 0;
background-color: #0d0d0d;
color: #fff;
color: var(--weui-WHITE);
line-height: 60px;
text-align: center;
}
.weui-gallery__del {
display: block;
padding-bottom: 0;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
.weui-gallery__del:active {
opacity: 0.5;
}
.weui-cell_switch {
padding-top: 12px;
padding-bottom: 12px;
}
.weui-cell_switch.weui-cell_disabled,
.weui-cell_switch.weui-cell_readonly {
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
}
.weui-switch {
-webkit-appearance: none;
appearance: none;
}
.weui-switch,
.weui-switch-cp__box {
vertical-align: bottom;
position: relative;
width: 52px;
height: 32px;
background-color: rgba(0, 0, 0, 0.1);
background-color: var(--weui-FG-3);
border: 0;
padding: 2px;
outline: 0;
border-radius: 16px;
box-sizing: border-box;
-webkit-transition: background-color 0.1s, border 0.1s;
transition: background-color 0.1s, border 0.1s;
}
.weui-switch-cp__box:after,
.weui-switch:after {
content: " ";
position: absolute;
top: 2px;
left: 2px;
width: 28px;
height: 28px;
border-radius: 15px;
background-color: #fff;
box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.06);
-webkit-transition: -webkit-transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35);
transition: -webkit-transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35);
transition: transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35);
transition: transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35),
-webkit-transform 0.35s cubic-bezier(0.4, 0.4, 0.25, 1.35);
}
.weui-switch-cp__input:checked+.weui-switch-cp__box,
.weui-switch-cp__input[aria-checked="true"]+.weui-switch-cp__box,
.weui-switch:checked {
background-color: #07c160;
background-color: var(--weui-BRAND);
}
.weui-switch-cp__input:checked+.weui-switch-cp__box:after,
.weui-switch-cp__input[aria-checked="true"]+.weui-switch-cp__box:after,
.weui-switch:checked:after {
-webkit-transform: translateX(20px);
transform: translateX(20px);
}
.weui-switch-cp__input[aria-disabled="true"]+.weui-switch-cp__box,
.weui-switch-cp__input[disabled]+.weui-switch-cp__box,
.weui-switch[disabled] {
opacity: 0.1;
}
.weui-switch-cp__input {
position: absolute;
width: 0;
height: 0;
opacity: 0;
overflow: hidden;
}
.weui-switch-cp__box {
display: block;
}
.weui-cell_uploader {
padding-bottom: 24px;
}
.weui-uploader {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.weui-uploader__hd {
display: -webkit-box;
display: -webkit-flex;
display: flex;
padding-bottom: 16px;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.weui-uploader__title {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.weui-uploader__info {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
}
.weui-uploader__bd {
margin-bottom: -8px;
margin-right: -8px;
overflow: hidden;
}
.weui-uploader__files {
list-style: none;
}
.weui-uploader__file {
float: left;
margin-right: 8px;
margin-bottom: 8px;
width: 96px;
height: 96px;
background: no-repeat 50%;
background-size: cover;
}
.weui-uploader__file_status {
position: relative;
}
.weui-uploader__file_status:before {
content: " ";
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.5);
}
.weui-uploader__file_status .weui-uploader__file-content {
display: block;
}
.weui-uploader__file-content {
display: none;
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
color: #fff;
color: var(--weui-WHITE);
}
.weui-uploader__file-content .weui-icon-warn {
display: inline-block;
}
.weui-uploader__input-box {
float: left;
position: relative;
margin-right: 8px;
margin-bottom: 8px;
width: 96px;
height: 96px;
box-sizing: border-box;
background-color: #ededed;
}
body[data-weui-theme="dark"] .weui-uploader__input-box {
background-color: #2e2e2e;
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) .weui-uploader__input-box {
background-color: #2e2e2e;
}
}
.weui-uploader__input-box:after,
.weui-uploader__input-box:before {
content: " ";
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
background-color: #a3a3a3;
}
body[data-weui-theme="dark"] .weui-uploader__input-box:after,
body[data-weui-theme="dark"] .weui-uploader__input-box:before {
background-color: #6d6d6d;
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) .weui-uploader__input-box:after,
body:not([data-weui-theme="light"]) .weui-uploader__input-box:before {
background-color: #6d6d6d;
}
}
.weui-uploader__input-box:before {
width: 2px;
height: 32px;
}
.weui-uploader__input-box:after {
width: 32px;
height: 2px;
}
.weui-uploader__input-box:active:after,
.weui-uploader__input-box:active:before {
opacity: 0.7;
}
.weui-uploader__input {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.weui-msg__desc-primary a,
.weui-msg__desc a,
.weui-msg__tips a {
color: #576b95;
color: var(--weui-LINK);
display: inline-block;
vertical-align: baseline;
}
.weui-msg {
padding-top: 48px;
padding: calc(48px + constant(safe-area-inset-top)) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left);
padding: calc(48px + env(safe-area-inset-top)) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
text-align: center;
line-height: 1.4;
min-height: 100%;
box-sizing: border-box;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
background-color: #fff;
background-color: var(--weui-BG-2);
}
.weui-msg__icon-area {
margin-bottom: 32px;
}
.weui-msg__text-area {
margin-bottom: 32px;
padding: 0 32px;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
line-height: 1.6;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
}
.weui-msg__text-area:first-child {
padding-top: 96px;
}
.weui-msg__title {
font-weight: 500;
font-size: 22px;
}
.weui-msg__desc,
.weui-msg__title {
margin-bottom: 16px;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-msg__desc {
font-size: 17px;
font-weight: 400;
}
.weui-msg__desc-primary {
font-size: 14px;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
margin-bottom: 16px;
}
.weui-msg__custom-area {
text-align: left;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
margin-bottom: 16px;
}
.weui-msg__title+.weui-msg__custom-area {
margin-top: 48px;
}
.weui-msg__desc+.weui-msg__custom-area,
.weui-msg__desc-primary+.weui-msg__custom-area {
margin-top: 40px;
}
.weui-msg__custom-area .weui-cells__group_form .weui-cells {
margin: 0;
}
.weui-msg__opr-area {
margin-bottom: 16px;
}
.weui-msg__opr-area .weui-btn-area {
margin: 0;
}
.weui-msg__opr-area .weui-btn+.weui-btn {
margin-bottom: 16px;
}
.weui-msg__opr-area:last-child {
margin-bottom: 96px;
}
.weui-msg__opr-area+.weui-msg__extra-area {
margin-top: 48px;
}
.weui-msg__tips-area {
margin-bottom: 16px;
padding: 0 40px;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
}
.weui-msg__opr-area+.weui-msg__tips-area {
margin-bottom: 48px;
}
.weui-msg__tips-area:last-child {
margin-bottom: 64px;
}
.weui-msg__extra-area,
.weui-msg__tips {
font-size: 12px;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
.weui-msg__extra-area {
margin-bottom: 24px;
padding: 0 32px;
box-sizing: border-box;
}
.weui-msg__extra-area a,
.weui-msg__extra-area navigator {
color: #576b95;
color: var(--weui-LINK);
}
.weui-msg__extra-area navigator {
display: inline;
}
.weui-msg_align-top .weui-msg__text-area:first-child {
padding-top: 0;
}
body,
page {
--weui-STEPS-DEFAULT-COLOR: var(--weui-FG-3);
--weui-STEPS-HIGHLIGHT-COLOR: var(--weui-BRAND);
--weui-STEPS-FONT-SIZE: 17;
--weui-STEPS-LINEHEIGHT: 1.4;
--weui-STEPS-DOT-SIZE: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
--weui-STEPS-ICON-SIZE: 40;
--weui-STEPS-VERTICAL-DOT-GAP: calc((1em - var(--weui-STEPS-DOT-SIZE)) / 2);
--weui-STEPS-HORIZONAL-DOT-GAP: 4px;
}
.weui-steps {
line-height: 1.4;
line-height: var(--weui-STEPS-LINEHEIGHT);
font-size: 17px;
font-size: calc(1px * var(--weui-STEPS-FONT-SIZE));
}
.weui-steps__item__desc,
.weui-steps__item__title {
display: block;
}
.weui-steps__item__title {
font-weight: 500;
}
.weui-steps__item__desc {
font-size: 14px;
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
margin-top: 4px;
}
.weui-steps_vertical {
position: relative;
}
.weui-steps_vertical .weui-steps__item {
position: relative;
padding-bottom: 32px;
}
.weui-steps_vertical .weui-steps__item:before {
content: "";
content: " ";
position: absolute;
left: 0;
top: 0;
width: 1px;
bottom: 0;
border-left: 1px solid var(--weui-FG-3);
border-left: 1px solid var(--weui-STEPS-DEFAULT-COLOR);
color: var(--weui-FG-3);
color: var(--weui-STEPS-DEFAULT-COLOR);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
top: 1.2em;
top: calc((var(--weui-STEPS-LINEHEIGHT) - (var(--weui-STEPS-LINEHEIGHT) - 1) / 2) * 1em);
bottom: -0.2em;
bottom: calc((var(--weui-STEPS-LINEHEIGHT) - 1) / 2 * -1em);
}
.weui-steps_vertical .weui-steps__item:first-child:not(.weui-steps__item_success) .weui-steps__item__inner:before {
background-color: var(--weui-BRAND);
background-color: var(--weui-STEPS-HIGHLIGHT-COLOR);
}
.weui-steps_vertical .weui-steps__item:last-child:before {
display: none;
}
.weui-steps_vertical .weui-steps__item__inner {
position: relative;
z-index: 1;
padding-left: 36px;
}
.weui-steps_vertical .weui-steps__item__inner:before {
content: "";
width: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
width: var(--weui-STEPS-DOT-SIZE);
height: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
height: var(--weui-STEPS-DOT-SIZE);
border-radius: 100%;
background-color: var(--weui-FG-3);
background-color: var(--weui-STEPS-DEFAULT-COLOR);
}
.weui-steps_vertical .weui-steps__icon,
.weui-steps_vertical .weui-steps__item__inner:before {
position: absolute;
z-index: 1;
left: 0;
top: 0.7em;
top: calc(var(--weui-STEPS-LINEHEIGHT) / 2 * 1em);
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.weui-steps_vertical .weui-steps__icon {
font-size: 17px;
font-size: calc(1px * var(--weui-STEPS-FONT-SIZE));
width: 2.35294em;
width: calc(var(--weui-STEPS-ICON-SIZE) / var(--weui-STEPS-FONT-SIZE) * 1em);
height: 2.35294em;
height: calc(var(--weui-STEPS-ICON-SIZE) / var(--weui-STEPS-FONT-SIZE) * 1em);
margin-top: 0.39647em;
margin-top: calc((var(--weui-STEPS-ICON-SIZE) / var(--weui-STEPS-FONT-SIZE) * 1em - 1em) / 2 - 0.28em);
}
.weui-steps_vertical .weui-steps__item_icon:before {
top: calc(((1em - var(--weui-STEPS-DOT-SIZE)) / 2) + 40 / 17 * 1em - 0.14em);
top: calc(var(--weui-STEPS-VERTICAL-DOT-GAP) + var(--weui-STEPS-ICON-SIZE) / var(--weui-STEPS-FONT-SIZE) * 1em - 0.14em);
}
.weui-steps_vertical .weui-steps__item_icon .weui-steps__item__inner:before {
display: none;
}
.weui-steps_vertical .weui-steps__item_icon-prev:before {
bottom: calc(((1em - var(--weui-STEPS-DOT-SIZE)) / 2) - 0.4 / 2 * 1em + 0.14em);
bottom: calc(var(--weui-STEPS-VERTICAL-DOT-GAP) - (var(--weui-STEPS-LINEHEIGHT) - 1) / 2 * 1em + 0.14em);
}
.weui-steps_vertical .weui-steps__item_success:before {
border-color: var(--weui-BRAND);
border-color: var(--weui-STEPS-HIGHLIGHT-COLOR);
}
.weui-steps_vertical .weui-steps__item_success+.weui-steps__item .weui-steps__item__inner:before,
.weui-steps_vertical .weui-steps__item_success .weui-steps__item__inner:before {
background-color: var(--weui-BRAND);
background-color: var(--weui-STEPS-HIGHLIGHT-COLOR);
}
.weui-steps_horizonal,
.weui-steps_horizonal .weui-steps__item {
display: -webkit-box;
display: -webkit-flex;
display: flex;
}
.weui-steps_horizonal .weui-steps__item {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.weui-steps_horizonal .weui-steps__item:before {
content: "";
display: block;
width: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
width: var(--weui-STEPS-DOT-SIZE);
height: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
height: var(--weui-STEPS-DOT-SIZE);
border-radius: 100%;
background-color: var(--weui-FG-3);
background-color: var(--weui-STEPS-DEFAULT-COLOR);
-webkit-flex-shrink: 0;
flex-shrink: 0;
}
.weui-steps_horizonal .weui-steps__item:after {
content: "";
height: 0.5px;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
margin: 0 4px;
margin: 0 var(--weui-STEPS-HORIZONAL-DOT-GAP);
background: var(--weui-FG-3);
background: var(--weui-STEPS-DEFAULT-COLOR);
}
.weui-steps_horizonal .weui-steps__item:last-child {
-webkit-box-flex: 0;
-webkit-flex: none;
flex: none;
}
.weui-steps_horizonal .weui-steps__item:last-child:after {
display: none;
}
.weui-steps_horizonal .weui-steps__item:first-child:not(.weui-steps__item_success):before {
background: var(--weui-BRAND);
background: var(--weui-STEPS-HIGHLIGHT-COLOR);
}
.weui-steps_horizonal .weui-steps__item__inner {
margin-left: 8px;
}
.weui-steps_horizonal .weui-steps__item_success+.weui-steps__item:before,
.weui-steps_horizonal .weui-steps__item_success:after,
.weui-steps_horizonal .weui-steps__item_success:before {
background: var(--weui-BRAND);
background: var(--weui-STEPS-HIGHLIGHT-COLOR);
}
.weui-steps_horizonal-primary {
display: -webkit-box;
display: -webkit-flex;
display: flex;
}
.weui-steps_horizonal-primary .weui-steps__item {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
position: relative;
}
.weui-steps_horizonal-primary .weui-steps__item:before {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid var(--weui-FG-3);
border-top: 1px solid var(--weui-STEPS-DEFAULT-COLOR);
color: var(--weui-FG-3);
color: var(--weui-STEPS-DEFAULT-COLOR);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-steps_horizonal-primary .weui-steps__item:last-child {
-webkit-box-flex: 0;
-webkit-flex: none;
flex: none;
}
.weui-steps_horizonal-primary .weui-steps__item:last-child:before {
display: none;
}
.weui-steps_horizonal-primary .weui-steps__item__inner {
position: relative;
padding-top: 36px;
}
.weui-steps_horizonal-primary .weui-steps__item__inner:before {
content: "";
position: absolute;
z-index: 1;
width: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
width: var(--weui-STEPS-DOT-SIZE);
height: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
height: var(--weui-STEPS-DOT-SIZE);
border-radius: 100%;
background-color: var(--weui-FG-3);
background-color: var(--weui-STEPS-DEFAULT-COLOR);
top: 0;
left: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.weui-steps_horizonal-primary .weui-steps__item__inner:after {
content: "";
background-color: #fff;
background-color: var(--weui-BG-2);
width: calc((8 / var(--weui-STEPS-FONT-SIZE) * 1em) + 2 * 4px);
width: calc(var(--weui-STEPS-DOT-SIZE) + 2 * var(--weui-STEPS-HORIZONAL-DOT-GAP));
height: calc((8 / var(--weui-STEPS-FONT-SIZE) * 1em) + 2 * 4px);
height: calc(var(--weui-STEPS-DOT-SIZE) + 2 * var(--weui-STEPS-HORIZONAL-DOT-GAP));
position: absolute;
top: 0;
left: 0;
-webkit-transform: translate(calc(-50% + (8 / var(--weui-STEPS-FONT-SIZE) * 1em) / 2),
-50%);
-webkit-transform: translate(calc(-50% + var(--weui-STEPS-DOT-SIZE) / 2),
-50%);
transform: translate(calc(-50% + (8 / var(--weui-STEPS-FONT-SIZE) * 1em) / 2),
-50%);
transform: translate(calc(-50% + var(--weui-STEPS-DOT-SIZE) / 2), -50%);
}
.weui-steps_horizonal-primary .weui-steps__item_success:before {
border-color: var(--weui-BRAND);
border-color: var(--weui-STEPS-HIGHLIGHT-COLOR);
}
.weui-steps_horizonal-primary .weui-steps__item_success+.weui-steps__item .weui-steps__item__inner:before,
.weui-steps_horizonal-primary .weui-steps__item_success .weui-steps__item__inner:before {
background: var(--weui-BRAND);
background: var(--weui-STEPS-HIGHLIGHT-COLOR);
}
.weui-steps_horizonal-center {
display: -webkit-box;
display: -webkit-flex;
display: flex;
text-align: center;
}
.weui-steps_horizonal-center .weui-steps__item {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
position: relative;
}
.weui-steps_horizonal-center .weui-steps__item:after,
.weui-steps_horizonal-center .weui-steps__item:before {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid var(--weui-FG-3);
border-top: 1px solid var(--weui-STEPS-DEFAULT-COLOR);
color: var(--weui-FG-3);
color: var(--weui-STEPS-DEFAULT-COLOR);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-steps_horizonal-center .weui-steps__item:before {
right: 50%;
}
.weui-steps_horizonal-center .weui-steps__item:after {
left: 50%;
}
.weui-steps_horizonal-center .weui-steps__item:first-child:before,
.weui-steps_horizonal-center .weui-steps__item:last-child:after {
display: none;
}
.weui-steps_horizonal-center .weui-steps__item__inner {
position: relative;
z-index: 1;
padding-top: 36px;
}
.weui-steps_horizonal-center .weui-steps__item__inner:before {
content: "";
position: absolute;
z-index: 1;
width: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
width: var(--weui-STEPS-DOT-SIZE);
height: calc(8 / var(--weui-STEPS-FONT-SIZE) * 1em);
height: var(--weui-STEPS-DOT-SIZE);
border-radius: 100%;
background-color: var(--weui-FG-3);
background-color: var(--weui-STEPS-DEFAULT-COLOR);
top: 0;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.weui-steps_horizonal-center .weui-steps__item__inner:after {
content: "";
background-color: #fff;
background-color: var(--weui-BG-2);
width: calc((8 / var(--weui-STEPS-FONT-SIZE) * 1em) + 2 * 4px);
width: calc(var(--weui-STEPS-DOT-SIZE) + 2 * var(--weui-STEPS-HORIZONAL-DOT-GAP));
height: calc((8 / var(--weui-STEPS-FONT-SIZE) * 1em) + 2 * 4px);
height: calc(var(--weui-STEPS-DOT-SIZE) + 2 * var(--weui-STEPS-HORIZONAL-DOT-GAP));
position: absolute;
top: 0;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
.weui-steps_horizonal-center .weui-steps__item_success+.weui-steps__item .weui-steps__item__inner:before,
.weui-steps_horizonal-center .weui-steps__item_success+.weui-steps__item:before,
.weui-steps_horizonal-center .weui-steps__item_success .weui-steps__item__inner:before,
.weui-steps_horizonal-center .weui-steps__item_success:after,
.weui-steps_horizonal-center .weui-steps__item_success:before {
background: var(--weui-BRAND);
background: var(--weui-STEPS-HIGHLIGHT-COLOR);
}
body,
page {
--weui-cellMarginLR: 16px;
--weui-cellPaddingLR: 16px;
}
.weui-cells__group {
border: 0;
}
.weui-cells__group:first-child {
margin-top: 0;
}
.weui-cells__group_form {
margin-top: 24px;
}
.weui-cells__group_form .weui-cells {
margin-left: 16px;
margin-left: var(--weui-cellMarginLR);
margin-right: 16px;
margin-right: var(--weui-cellMarginLR);
}
.weui-cells__group_form .weui-cells:after,
.weui-cells__group_form .weui-cells:before {
left: 16px;
left: var(--weui-cellPaddingLR);
right: 16px;
right: var(--weui-cellPaddingLR);
}
.weui-cells__group_form .weui-cell {
padding: 16px;
padding: 16px var(--weui-cellPaddingLR);
}
.weui-cells__group_form .weui-cell:before {
left: 16px;
left: var(--weui-cellPaddingLR);
right: 16px;
right: var(--weui-cellPaddingLR);
}
.weui-cells__group_form .weui-cell__hd {
padding-right: 16px;
}
.weui-cells__group_form .weui-cell__ft {
padding-left: 16px;
}
.weui-cells__group_form .weui-cells__title {
margin-top: 24px;
margin-bottom: 8px;
padding: 0 32px;
}
.weui-cells__group_form:first-child .weui-cells__title {
margin-top: 0;
}
.weui-cells__group_form .weui-cells__tips {
margin-top: 8px;
padding: 0 32px;
padding: 0 calc(var(--weui-cellMarginLR) + var(--weui-cellPaddingLR));
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
}
.weui-cells__group_form .weui-cells__tips a {
font-weight: 700;
}
.weui-cells__group_form .weui-cells__tips_warn {
color: #fa5151;
color: var(--weui-RED);
}
.weui-cells__group_form .weui-label {
max-width: 5em;
margin-right: 8px;
}
.weui-cells__group_form .weui-cell_access:active:after,
.weui-cells__group_form .weui-cell_active:active:after {
border-radius: 8px;
}
.weui-cells__group_form .weui-cell_warn input {
color: #fa5151;
color: var(--weui-RED);
}
.weui-cells__group_form .weui-cell_disabled:active:after,
.weui-cells__group_form .weui-cell_readonly:active:after,
.weui-cells__group_form .weui-cell_switch:active:after,
.weui-cells__group_form .weui-cell_vcode:active:after,
.weui-cells__group_form .weui-icon-warn {
display: none;
}
.weui-cells__group_form input,
.weui-cells__group_form label[for],
.weui-cells__group_form textarea {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.weui-cells__group_form .weui-cell_wrap {
-webkit-box-align: initial;
-webkit-align-items: initial;
align-items: initial;
padding-top: 8px;
padding-bottom: 8px;
}
.weui-cells__group_form .weui-cell_wrap .weui-cell__hd {
padding-right: 0;
}
.weui-cells__group_form .weui-cell_wrap .weui-label {
margin-top: 8px;
}
.weui-cells__group_form .weui-cell_wrap .weui-cell__bd {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-flex-wrap: wrap;
flex-wrap: wrap;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.weui-cells__group_form .weui-cell__control {
margin: 8px 0 8px 0;
}
.weui-cells__group_form .weui-cell__control_flex {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
min-width: 30vw;
}
.weui-cells__group_form .weui-vcode-btn {
font-size: 16px;
padding: 0 12px;
height: auto;
width: auto;
line-height: 2;
border-radius: 6px;
color: #06ae56;
color: var(--weui-BTN-DEFAULT-COLOR);
background-color: #f2f2f2;
background-color: var(--weui-BTN-DEFAULT-BG);
}
.weui-cells__group_form .weui-vcode-btn:before {
display: none;
}
.weui-cells__group_form .weui-cell_vcode.weui-cell_wrap {
padding-top: 4px;
padding-bottom: 4px;
}
.weui-cells__group_form .weui-cell_vcode.weui-cell_wrap .weui-label {
margin-top: 12px;
}
.weui-cells__group_form .weui-cell_vcode.weui-cell_wrap .weui-input {
font-size: 17px;
min-height: 1.88235294em;
}
.weui-cells__group_form .weui-cells_checkbox .weui-check__label:before {
left: 56px;
left: calc(40px + var(--weui-cellPaddingLR));
}
.weui-cells__group_form .weui-cell_select {
padding: 0;
}
.weui-cells__group_form .weui-cell_select-before .weui-cell__hd {
padding-right: 0;
}
.weui-cells__group_form .weui-cell_switch {
padding: 12px 16px;
}
.weui-cells__group_form-primary {
margin-top: 32px;
}
.weui-cells__group_form-primary .weui-cells {
background: #f7f7f7;
background: var(--weui-BG-1);
border-radius: 8px;
overflow: hidden;
}
.weui-cells__group_form-primary .weui-cells:after,
.weui-cells__group_form-primary .weui-cells:before {
display: none;
}
.weui-cells__group_form-primary .weui-cell_access:active:after,
.weui-cells__group_form-primary .weui-cell_active:active:after {
border-radius: 0;
}
.weui-form {
padding: 56px 0 0;
padding: calc(56px + constant(safe-area-inset-top)) constant(safe-area-inset-right) constant(safe-area-inset-bottom) constant(safe-area-inset-left);
padding: calc(56px + env(safe-area-inset-top)) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
line-height: 1.4;
min-height: 100%;
box-sizing: border-box;
background-color: #fff;
background-color: var(--weui-BG-2);
}
.weui-form .weui-footer,
.weui-form .weui-footer__link {
font-size: 14px;
}
.weui-form .weui-agree {
padding: 0;
display: -webkit-box;
display: -webkit-flex;
display: flex;
text-align: justify;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
line-height: 1.6;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
}
.weui-form .weui-agree__checkbox {
-webkit-flex-shrink: 0;
flex-shrink: 0;
margin-top: 0;
}
.weui-form .weui-agree__text {
min-width: 0;
}
.weui-form__text-area {
padding: 0 32px;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
text-align: center;
}
.weui-form__control-area {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
margin: 48px 0;
}
.weui-form__extra-area,
.weui-form__tips-area {
margin-bottom: 24px;
padding: 0 32px;
text-align: center;
}
.weui-form__extra-area {
margin-top: 52px;
}
.weui-form__opr-area {
padding: 0 32px;
}
.weui-form__opr-area:last-child {
margin-bottom: 96px;
}
.weui-form__opr-area+.weui-form__tips-area {
margin-top: 16px;
margin-bottom: 0;
}
.weui-form__tips-area+.weui-form__extra-area {
margin-top: 32px;
}
.weui-form__tips-area:last-child {
margin-bottom: 60px;
}
.weui-form__title {
font-size: 22px;
font-weight: 700;
line-height: 1.36;
}
.weui-form__desc {
font-size: 17px;
margin-top: 16px;
}
.weui-form__tips {
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
font-size: 14px;
}
.weui-form__tips a,
.weui-form__tips navigator {
color: #576b95;
color: var(--weui-LINK);
}
.weui-form__tips navigator {
display: inline;
}
.weui-article {
padding: 48px 24px;
padding: 48px calc(24px + constant(safe-area-inset-right)) calc(48px + constant(safe-area-inset-bottom)) calc(24px + constant(safe-area-inset-left));
padding: 48px calc(24px + env(safe-area-inset-right)) calc(48px + env(safe-area-inset-bottom)) calc(24px + env(safe-area-inset-left));
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
font-size: 17px;
line-height: 1.6;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
}
.weui-article section {
margin-bottom: 48px;
}
.weui-article section section {
margin-bottom: 32px;
}
.weui-article section section section {
margin-bottom: 24px;
}
.weui-article h1,
.weui-article h2,
.weui-article h3,
.weui-article h4,
.weui-article h5,
.weui-article h6 {
line-height: 1.4;
}
.weui-article h1 {
font-size: 22px;
font-weight: 500;
margin-bottom: 48px;
text-align: center;
}
.weui-article h2 {
font-size: 20px;
font-weight: 500;
margin-bottom: 16px;
}
.weui-article h3 {
font-size: 17px;
font-weight: 500;
margin-bottom: 8px;
}
.weui-article h4 {
font-size: 17px;
font-weight: 400;
margin-bottom: 4px;
}
.weui-article h5,
.weui-article h6 {
font-weight: 400;
}
.weui-article * {
max-width: 100%;
box-sizing: border-box;
word-wrap: break-word;
}
.weui-article img {
vertical-align: bottom;
}
.weui-article p {
margin: 0 0 24px;
}
.weui-article ol,
.weui-article ul {
list-style: none;
margin-bottom: 24px;
}
.weui-article ol ol,
.weui-article ol ul,
.weui-article ul ol,
.weui-article ul ul {
padding-left: 16px;
margin-bottom: 0;
}
.weui-tabbar {
display: -webkit-box;
display: -webkit-flex;
display: flex;
position: relative;
z-index: 500;
background-color: #f7f7f7;
background-color: var(--weui-BG-1);
}
.weui-tabbar:before {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-tabbar__item {
display: block;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
font-size: 0;
padding-top: 8px;
padding-bottom: 8px;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
text-align: center;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.weui-tabbar__item:first-child {
padding-left: constant(safe-area-inset-left);
padding-left: env(safe-area-inset-left);
}
.weui-tabbar__item:last-child {
padding-right: constant(safe-area-inset-right);
padding-right: env(safe-area-inset-right);
}
.weui-tabbar__item.weui-bar__item_on .weui-tabbar__icon,
.weui-tabbar__item.weui-bar__item_on .weui-tabbar__label {
color: #07c160;
color: var(--weui-BRAND);
svg {
fill: #07c160;
}
svg {
fill: var(--weui-BRAND);
}
}
.weui-tabbar__icon {
display: inline-block;
margin-bottom: 6px;
svg {
fill: rgba(0, 0, 0, 0.9);
}
svg {
fill: var(--weui-FG-0);
}
}
.weui-tabbar__label {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
font-size: 12px;
line-height: 1.4;
font-weight: bold;
}
.weui-navbar {
display: -webkit-box;
display: -webkit-flex;
display: flex;
position: relative;
z-index: 500;
background-color: #fff;
background-color: var(--weui-BG-2);
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
}
.weui-navbar:after {
content: " ";
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-navbar+.weui-tab__panel {
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
.weui-navbar__item {
position: relative;
display: block;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
padding: 16px 0;
padding-top: calc(16px + constant(safe-area-inset-top));
padding-top: calc(16px + env(safe-area-inset-top));
text-align: center;
font-size: 17px;
line-height: 1.41176471;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.weui-navbar__item.weui-bar__item_on,
.weui-navbar__item:active {
background-color: #ececec;
background-color: var(--weui-BG-COLOR-ACTIVE);
}
.weui-navbar__item:after {
content: " ";
position: absolute;
right: 0;
top: 0;
width: 1px;
bottom: 0;
border-right: 1px solid rgba(0, 0, 0, 0.1);
border-right: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 100% 0;
transform-origin: 100% 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}
.weui-navbar__item:first-child {
padding-left: constant(safe-area-inset-left);
padding-left: env(safe-area-inset-left);
}
.weui-navbar__item:last-child {
padding-right: constant(safe-area-inset-right);
padding-right: env(safe-area-inset-right);
}
.weui-navbar__item:last-child:after {
display: none;
}
.weui-tab {
display: -webkit-box;
display: -webkit-flex;
display: flex;
height: 100%;
box-sizing: border-box;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
}
.weui-tab__panel {
box-sizing: border-box;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.weui-tab__content {
display: none;
}
.weui-progress {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.weui-progress__bar {
background-color: #ededed;
background-color: var(--weui-BG-0);
height: 3px;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.weui-progress__inner-bar {
width: 0;
height: 100%;
background-color: #07c160;
background-color: var(--weui-BRAND);
}
.weui-progress__opr {
display: block;
margin-left: 15px;
font-size: 0;
}
.weui-panel {
background-color: #fff;
background-color: var(--weui-BG-2);
margin-top: 10px;
position: relative;
overflow: hidden;
}
.weui-panel:first-child {
margin-top: 0;
}
.weui-panel:before {
top: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-panel:after,
.weui-panel:before {
content: " ";
position: absolute;
left: 0;
right: 0;
height: 1px;
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
}
.weui-panel:after {
bottom: 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-panel .weui-cells:after {
display: none;
}
.weui-panel__hd {
padding: 16px 16px 13px;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
font-size: 15px;
font-weight: 500;
position: relative;
}
.weui-panel__hd:after {
content: " ";
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
left: 15px;
}
.weui-media-box {
padding: 16px;
position: relative;
}
.weui-media-box:before {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
left: 16px;
}
.weui-media-box:first-child:before {
display: none;
}
a.weui-media-box {
color: #000;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
a.weui-media-box:active {
background-color: #ececec;
background-color: var(--weui-BG-COLOR-ACTIVE);
}
.weui-media-box__title {
display: block;
font-weight: 400;
font-size: 17px;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
width: auto;
white-space: nowrap;
word-wrap: normal;
}
.weui-media-box__desc,
.weui-media-box__title {
line-height: 1.4;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
}
.weui-media-box__desc {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
font-size: 14px;
padding-top: 4px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.weui-media-box__info {
display: block;
margin-top: 16px;
padding-bottom: 4px;
font-size: 13px;
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
line-height: 1em;
list-style: none;
overflow: hidden;
}
.weui-media-box__info__meta {
float: left;
padding-right: 1em;
}
.weui-media-box__info__meta_extra {
padding-left: 1em;
border-left: 1px solid rgba(0, 0, 0, 0.3);
border-left: 1px solid var(--weui-FG-2);
}
.weui-media-box_appmsg {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.weui-media-box_appmsg .weui-media-box__hd {
margin-right: 16px;
width: 60px;
height: 60px;
line-height: 60px;
text-align: center;
}
.weui-media-box_appmsg .weui-media-box__thumb {
width: 100%;
max-height: 100%;
vertical-align: top;
}
.weui-media-box_appmsg .weui-media-box__bd {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
min-width: 0;
}
.weui-media-box_small-appmsg {
padding: 0;
}
.weui-media-box_small-appmsg .weui-cells {
margin-top: 0;
}
.weui-media-box_small-appmsg .weui-cells:before {
display: none;
}
.weui-grids {
position: relative;
overflow: hidden;
}
.weui-grids:before {
right: 0;
height: 1px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-grids:after,
.weui-grids:before {
content: " ";
position: absolute;
left: 0;
top: 0;
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
}
.weui-grids:after {
width: 1px;
bottom: 0;
border-left: 1px solid rgba(0, 0, 0, 0.1);
border-left: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}
.weui-grid {
position: relative;
float: left;
padding: 20px 10px;
width: 33.33333333%;
box-sizing: border-box;
}
.weui-grid:before {
top: 0;
width: 1px;
border-right: 1px solid rgba(0, 0, 0, 0.1);
border-right: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 100% 0;
transform-origin: 100% 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}
.weui-grid:after,
.weui-grid:before {
content: " ";
position: absolute;
right: 0;
bottom: 0;
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
}
.weui-grid:after {
left: 0;
height: 1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-grid:active {
background-color: #ececec;
background-color: var(--weui-BG-COLOR-ACTIVE);
}
.weui-grid__icon {
width: 28px;
height: 28px;
margin: 0 auto;
}
.weui-grid__icon img {
display: block;
width: 100%;
height: 100%;
}
.weui-grid__icon+.weui-grid__label {
margin-top: 4px;
}
.weui-grid__label {
display: block;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.weui-footer,
.weui-grid__label {
text-align: center;
font-size: 14px;
}
.weui-footer {
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
line-height: 1.4;
}
.weui-footer a,
.weui-footer navigator {
color: #576b95;
color: var(--weui-LINK);
}
.weui-footer navigator {
display: inline;
}
.weui-footer_fixed-bottom {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding-top: 16px;
padding-bottom: 16px;
padding-bottom: calc(16px + constant(safe-area-inset-bottom));
padding-bottom: calc(16px + env(safe-area-inset-bottom));
left: constant(safe-area-inset-left);
left: env(safe-area-inset-left);
right: constant(safe-area-inset-right);
right: env(safe-area-inset-right);
}
.weui-footer__links {
font-size: 0;
}
.weui-footer__link {
display: inline-block;
vertical-align: top;
margin: 0 8px;
position: relative;
font-size: 14px;
}
.weui-footer__link:before {
content: " ";
position: absolute;
left: 0;
top: 0;
width: 1px;
bottom: 0;
border-left: 1px solid rgba(0, 0, 0, 0.1);
border-left: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
left: -8px;
top: 0.36em;
bottom: 0.36em;
}
.weui-footer__link:first-child:before {
display: none;
}
.weui-footer__text {
padding: 0 16px;
font-size: 12px;
}
.weui-flex {
display: -webkit-box;
display: -webkit-flex;
display: flex;
}
.weui-flex__item {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.weui-dialog {
position: fixed;
z-index: 5000;
top: 50%;
left: 16px;
right: 16px;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
background-color: #fff;
background-color: var(--weui-BG-2);
text-align: center;
border-radius: 12px;
overflow: hidden;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-flex-direction: column;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
flex-direction: column;
max-height: 90%;
}
.weui-dialog__hd {
padding: 32px 24px 16px;
}
.weui-dialog__title {
font-weight: 700;
font-size: 20px;
line-height: 1.4;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-dialog__bd {
overflow-y: auto;
-webkit-overflow-scrolling: touch;
padding: 0 24px;
margin-bottom: 32px;
font-size: 17px;
line-height: 1.4;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
.weui-dialog__bd:first-child {
min-height: 40px;
padding: 32px 24px 0;
font-weight: 700;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
-webkit-flex-direction: column;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
flex-direction: column;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
.weui-dialog__bd:first-child,
.weui-dialog__ft {
display: -webkit-box;
display: -webkit-flex;
display: flex;
}
.weui-dialog__ft {
position: relative;
}
.weui-dialog__ft:after {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-DIALOG-LINE-COLOR);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-DIALOG-LINE-COLOR);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-dialog__btn {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
display: block;
line-height: 1.41176471;
padding: 16px 0;
font-size: 17px;
color: #576b95;
color: var(--weui-LINK);
font-weight: 700;
text-decoration: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-webkit-user-select: none;
user-select: none;
position: relative;
overflow: hidden;
}
.weui-dialog__btn:active {
background-color: #ececec;
background-color: var(--weui-BG-COLOR-ACTIVE);
}
.weui-dialog__btn:after {
content: " ";
position: absolute;
left: 0;
top: 0;
width: 1px;
bottom: 0;
border-left: 1px solid rgba(0, 0, 0, 0.1);
border-left: 1px solid var(--weui-DIALOG-LINE-COLOR);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-DIALOG-LINE-COLOR);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}
.weui-dialog__btn:first-child:after {
display: none;
}
.weui-dialog__btn_default {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-HALF);
}
.weui-skin_android .weui-dialog {
text-align: left;
box-shadow: 0 6px 30px 0 rgba(0, 0, 0, 0.1);
}
.weui-skin_android .weui-dialog__title {
font-size: 22px;
line-height: 1.4;
}
.weui-skin_android .weui-dialog__hd {
text-align: left;
}
.weui-skin_android .weui-dialog__bd {
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
text-align: left;
}
.weui-skin_android .weui-dialog__bd:first-child {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-skin_android .weui-dialog__ft {
display: block;
text-align: right;
line-height: 40px;
min-height: 40px;
padding: 0 24px 16px;
}
.weui-skin_android .weui-dialog__ft:after {
display: none;
}
.weui-skin_android .weui-dialog__btn {
display: inline-block;
vertical-align: top;
padding: 0 0.8em;
}
.weui-skin_android .weui-dialog__btn:after {
display: none;
}
.weui-skin_android .weui-dialog__btn:last-child {
margin-right: -0.8em;
}
.weui-skin_android .weui-dialog__btn_default {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-HALF);
}
@media screen and (min-width: 352px) {
.weui-dialog {
width: 320px;
margin: 0 auto;
}
}
.weui-half-screen-dialog {
position: fixed;
left: 0;
right: 0;
bottom: 0;
min-height: 255px;
max-height: 75%;
z-index: 5000;
line-height: 1.4;
background-color: #fff;
background-color: var(--weui-BG-2);
border-top-left-radius: 12px;
border-top-right-radius: 12px;
overflow: hidden;
padding: 0 24px;
padding: 0 calc(24px + constant(safe-area-inset-right)) constant(safe-area-inset-bottom) calc(24px + constant(safe-area-inset-left));
padding: 0 calc(24px + env(safe-area-inset-right)) env(safe-area-inset-bottom) calc(24px + env(safe-area-inset-left));
box-sizing: border-box;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
}
@media only screen and (max-device-height: 558px) {
.weui-half-screen-dialog {
max-height: calc(100% - 16px);
}
}
.weui-half-screen-dialog__hd {
min-height: 64px;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-flex-shrink: 0;
flex-shrink: 0;
}
.weui-half-screen-dialog__hd .weui-btn_icon,
.weui-half-screen-dialog__hd .weui-icon-btn {
position: absolute;
top: 50%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
color: inherit;
}
.weui-half-screen-dialog__hd .weui-btn_icon:active,
.weui-half-screen-dialog__hd .weui-icon-btn:active {
opacity: 0.5;
}
.weui-half-screen-dialog__hd__side {
position: relative;
left: -8px;
}
.weui-half-screen-dialog__hd__main {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.weui-half-screen-dialog__hd__side+.weui-half-screen-dialog__hd__main {
text-align: center;
padding: 0 40px;
}
.weui-half-screen-dialog__hd__main+.weui-half-screen-dialog__hd__side {
right: -8px;
left: auto;
}
.weui-half-screen-dialog__hd__main+.weui-half-screen-dialog__hd__side .weui-btn_icon,
.weui-half-screen-dialog__hd__main+.weui-half-screen-dialog__hd__side .weui-icon-btn {
right: 0;
}
.weui-half-screen-dialog__title {
display: block;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
font-weight: 700;
font-size: 15px;
}
.weui-half-screen-dialog__subtitle {
display: block;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
font-size: 10px;
}
.weui-half-screen-dialog__bd {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
min-height: 0;
overflow-y: auto;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
padding-bottom: 56px;
font-size: 14px;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-half-screen-dialog__desc {
font-size: 17px;
font-weight: 700;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
line-height: 1.4;
}
.weui-half-screen-dialog__tips {
padding-top: 16px;
font-size: 14px;
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
line-height: 1.4;
}
.weui-half-screen-dialog__ft {
padding: 0 0 64px;
text-align: center;
}
.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n + 2),
.weui-half-screen-dialog__ft .weui-btn:nth-last-child(n + 2)+.weui-btn {
display: inline-block;
vertical-align: top;
margin: 0 8px;
width: 120px;
}
.weui-half-screen-dialog__btn-area {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
}
.weui-half-screen-dialog__btn-area .weui-btn {
width: 184px;
padding-left: 16px;
padding-right: 16px;
}
.weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2),
.weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2)+.weui-btn {
margin: 0 8px;
width: 136px;
}
.weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2)+.weui-btn:first-child,
.weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2):first-child {
margin-left: 0;
}
.weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2)+.weui-btn:last-child,
.weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2):last-child {
margin-right: 0;
}
.weui-half-screen-dialog__btn-area+.weui-half-screen-dialog__attachment-area {
margin-top: 24px;
margin-bottom: -34px;
}
.weui-half-screen-dialog_btn-wrap .weui-half-screen-dialog__btn-area {
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
}
.weui-half-screen-dialog_btn-wrap .weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2),
.weui-half-screen-dialog_btn-wrap .weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2)+.weui-btn {
width: 184px;
margin: 16px 0 0;
}
.weui-half-screen-dialog_btn-wrap .weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2)+.weui-btn:first-child,
.weui-half-screen-dialog_btn-wrap .weui-half-screen-dialog__btn-area .weui-btn:nth-last-child(n + 2):first-child {
margin-top: 0;
}
.weui-half-screen-dialog_large {
max-height: none;
top: 16px;
}
.weui-icon-more {
-webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M5 10.25a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5z'/%3E%3C/svg%3E") no-repeat 50% 50%;
mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M5 10.25a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5zm7 0a1.75 1.75 0 1 1 0 3.5 1.75 1.75 0 0 1 0-3.5z'/%3E%3C/svg%3E") no-repeat 50% 50%;
}
.weui-icon-slide-down {
-webkit-mask-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24' height='24' viewBox='0 0 24 24'%3E %3Cdefs%3E %3Crect id='dda90263-a290-4594-926f-6aba8cb4779f-a' width='24' height='24' x='0' y='0' rx='12'/%3E %3C/defs%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Cmask id='dda90263-a290-4594-926f-6aba8cb4779f-b' fill='%23fff'%3E %3Cuse xlink:href='%23dda90263-a290-4594-926f-6aba8cb4779f-a'/%3E %3C/mask%3E %3Cuse fill='%23000' fill-opacity='.05' xlink:href='%23dda90263-a290-4594-926f-6aba8cb4779f-a'/%3E %3Cg fill-opacity='.9' mask='url(%23dda90263-a290-4594-926f-6aba8cb4779f-b)'%3E %3Cpath fill='%23000' d='M11.407 15.464L6.693 10.75l1.179-1.179 4.125 4.125 4.124-4.125L17.3 10.75l-4.714 4.714a.833.833 0 0 1-1.179 0z'/%3E %3C/g%3E %3C/g%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='24' height='24' viewBox='0 0 24 24'%3E %3Cdefs%3E %3Crect id='dda90263-a290-4594-926f-6aba8cb4779f-a' width='24' height='24' x='0' y='0' rx='12'/%3E %3C/defs%3E %3Cg fill='none' fill-rule='evenodd'%3E %3Cmask id='dda90263-a290-4594-926f-6aba8cb4779f-b' fill='%23fff'%3E %3Cuse xlink:href='%23dda90263-a290-4594-926f-6aba8cb4779f-a'/%3E %3C/mask%3E %3Cuse fill='%23000' fill-opacity='.05' xlink:href='%23dda90263-a290-4594-926f-6aba8cb4779f-a'/%3E %3Cg fill-opacity='.9' mask='url(%23dda90263-a290-4594-926f-6aba8cb4779f-b)'%3E %3Cpath fill='%23000' d='M11.407 15.464L6.693 10.75l1.179-1.179 4.125 4.125 4.124-4.125L17.3 10.75l-4.714 4.714a.833.833 0 0 1-1.179 0z'/%3E %3C/g%3E %3C/g%3E%3C/svg%3E");
}
.weui-icon-btn.weui-icon-btn {
outline: 0;
-webkit-appearance: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
border-width: 0;
background-color: transparent;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
font-size: 0;
width: auto;
height: auto;
}
.weui-icon-btn_goback.weui-icon-btn_goback {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
width: 1.2em;
height: 2.4em;
-webkit-mask: url("data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%;
mask: url("data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10%2019.438L8.955%2020.5l-7.666-7.79a1.02%201.02%200%20010-1.42L8.955%203.5%2010%204.563%202.682%2012%2010%2019.438z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%;
}
.weui-icon-btn_close.weui-icon-btn_close {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
width: 1.4em;
height: 2.4em;
-webkit-mask: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%;
mask: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12.25%2010.693L6.057%204.5%205%205.557l6.193%206.193L5%2017.943%206.057%2019l6.193-6.193L18.443%2019l1.057-1.057-6.193-6.193L19.5%205.557%2018.443%204.5z%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E") no-repeat 50% 50%;
}
.weui-toast {
position: fixed;
z-index: 5000;
font-size: 10px;
width: 13.6em;
height: 13.6em;
top: 40%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
text-align: center;
border-radius: 12px;
color: #333333;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
background-color: #1A1A1A;
box-sizing: border-box;
line-height: 1.4;
}
.weui-toast_text {
width: auto;
height: auto;
min-width: 152px;
max-width: 216px;
padding: 12px 0;
}
.weui-toast_text .weui-toast__content {
font-size: 14px;
}
.weui-icon_toast {
display: block;
margin-bottom: 16px;
}
.weui-icon_toast.weui-icon_toast {
width: 4em;
height: 4em;
}
.weui-icon_toast.weui-icon-success-no-circle,
.weui-icon_toast.weui-icon-warn {
color: #FFEB3B;
}
.weui-icon_toast.weui-loading {
width: 3.6em;
height: 3.6em;
}
.weui-icon_toast.weui-primary-loading {
width: 1em;
height: 1em;
font-size: 40px;
color: #FFEB3B;
}
.weui-icon_toast.weui-primary-loading:before {
border-width: 4px 0 4px 4px;
}
.weui-icon_toast.weui-primary-loading:after {
border-width: 4px 4px 4px 0;
}
.weui-icon_toast.weui-primary-loading .weui-primary-loading__dot {
width: 4px;
height: 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
.weui-toast__content {
font-size: 17px;
padding: 0 12px;
word-wrap: break-word;
-webkit-hyphens: auto;
hyphens: auto;
}
.weui-toast_text-more .weui-icon_toast {
margin-bottom: 12px;
}
.weui-toast_text-more .weui-toast__content {
font-size: 14px;
line-height: 1.6;
}
.weui-mask {
background: rgba(0, 0, 0, 0.6);
}
.weui-mask,
.weui-mask_transparent {
position: fixed;
z-index: 1000;
top: 0;
right: 0;
left: 0;
bottom: 0;
}
.weui-actionsheet {
position: fixed;
left: 0;
bottom: 0;
-webkit-transform: translateY(100%);
transform: translateY(100%);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
z-index: 5000;
width: 100%;
background-color: #f7f7f7;
background-color: var(--weui-BG-1);
-webkit-transition: -webkit-transform 0.3s;
transition: -webkit-transform 0.3s;
transition: transform 0.3s;
transition: transform 0.3s, -webkit-transform 0.3s;
border-top-left-radius: 12px;
border-top-right-radius: 12px;
overflow: hidden;
}
.weui-actionsheet__title {
position: relative;
height: 56px;
padding: 8px 24px;
padding: 8px calc(24px + constant(safe-area-inset-right)) 8px calc(24px + constant(safe-area-inset-left));
padding: 8px calc(24px + env(safe-area-inset-right)) 8px calc(24px + env(safe-area-inset-left));
box-sizing: border-box;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
flex-direction: column;
text-align: center;
font-size: 12px;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
line-height: 1.4;
background: #fff;
background: var(--weui-BG-2);
}
.weui-actionsheet__title:before {
content: " ";
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-actionsheet__title .weui-actionsheet__title-text {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.weui-actionsheet__action,
.weui-actionsheet__menu {
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
background-color: #fff;
background-color: var(--weui-BG-2);
}
.weui-actionsheet__action {
margin-top: 8px;
}
.weui-actionsheet__action .weui-actionsheet__cell:last-child {
padding-bottom: calc(16px + constant(safe-area-inset-bottom));
padding-bottom: calc(16px + env(safe-area-inset-bottom));
}
.weui-actionsheet__cell {
position: relative;
padding: 16px;
padding: 16px calc(16px + constant(safe-area-inset-right)) 16px calc(16px + constant(safe-area-inset-left));
padding: 16px calc(16px + env(safe-area-inset-right)) 16px calc(16px + env(safe-area-inset-left));
text-align: center;
font-size: 17px;
line-height: 1.41176471;
overflow: hidden;
}
.weui-actionsheet__cell:before {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-actionsheet__cell:active {
background-color: #ececec;
background-color: var(--weui-BG-COLOR-ACTIVE);
}
.weui-actionsheet__cell:first-child:before {
display: none;
}
.weui-actionsheet__cell_warn {
color: #fa5151;
color: var(--weui-RED);
}
.weui-skin_android .weui-actionsheet {
position: fixed;
left: 50%;
top: 50%;
bottom: auto;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
width: 274px;
box-sizing: border-box;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
background: transparent;
-webkit-transition: -webkit-transform 0.3s;
transition: -webkit-transform 0.3s;
transition: transform 0.3s;
transition: transform 0.3s, -webkit-transform 0.3s;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.weui-skin_android .weui-actionsheet__action {
display: none;
}
.weui-skin_android .weui-actionsheet__menu {
border-radius: 2px;
box-shadow: 0 6px 30px 0 rgba(0, 0, 0, 0.1);
}
.weui-skin_android .weui-actionsheet__cell {
padding: 16px;
font-size: 17px;
line-height: 1.41176471;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
text-align: left;
}
.weui-skin_android .weui-actionsheet__cell:first-child {
border-top-left-radius: 2px;
border-top-right-radius: 2px;
}
.weui-skin_android .weui-actionsheet__cell:last-child {
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
.weui-actionsheet_toggle {
-webkit-transform: translate(0);
transform: translate(0);
}
.weui-loadmore {
width: 65%;
margin: 20px auto;
text-align: center;
font-size: 0;
}
.weui-loadmore .weui-loading,
.weui-loadmore .weui-primary-loading {
margin-right: 8px;
}
.weui-loadmore__tips {
display: inline-block;
vertical-align: middle;
font-size: 14px;
line-height: 1.6;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-loadmore_line {
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
margin-top: 32px;
}
.weui-loadmore_line .weui-loadmore__tips {
position: relative;
top: -0.9em;
padding: 0 0.55em;
background-color: #fff;
background-color: var(--weui-BG-2);
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
.weui-loadmore_dot .weui-loadmore__tips {
padding: 0 0.16em;
}
.weui-loadmore_dot .weui-loadmore__tips:before {
content: " ";
width: 4px;
height: 4px;
border-radius: 50%;
background-color: rgba(0, 0, 0, 0.1);
background-color: var(--weui-FG-3);
display: inline-block;
position: relative;
vertical-align: 0;
top: -0.16em;
}
.weui-badge {
display: inline-block;
padding: 0.15em 0.4em;
min-width: 0.66666667em;
border-radius: 18px;
background-color: #fa5151;
background-color: var(--weui-RED);
color: #fff;
line-height: 1.2;
text-align: center;
font-size: 12px;
vertical-align: middle;
}
.weui-badge_dot {
padding: 0.4em;
min-width: 0;
}
.weui-toptips {
display: none;
position: fixed;
-webkit-transform: translateZ(0);
transform: translateZ(0);
top: 8px;
left: 8px;
right: 8px;
padding: 10px;
border-radius: 8px;
font-size: 14px;
text-align: center;
color: #fff;
z-index: 5000;
word-wrap: break-word;
word-break: break-all;
}
.weui-toptips_warn {
background-color: #fa5151;
background-color: var(--weui-RED);
}
.weui-list-tips {
list-style: none;
padding-top: 24px;
padding-bottom: 24px;
line-height: 1.4;
font-size: 14px;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
position: relative;
}
.weui-list-tips:before {
content: "";
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-list-tips:last-child {
padding-bottom: 0;
}
.weui-list-tips__item {
position: relative;
padding-left: 15px;
margin: 16px 0;
}
.weui-list-tips__item:before {
content: "\2022";
position: absolute;
left: 0;
top: -0.1em;
}
.weui-list-tips__item:first-child {
margin-top: 0;
}
.weui-form-preview__list+.weui-list-tips>.weui-list-tips__item:first-child {
margin-top: 6px;
}
.weui-search-bar {
position: relative;
padding: 8px;
display: -webkit-box;
display: -webkit-flex;
display: flex;
box-sizing: border-box;
background-color: #ededed;
background-color: var(--weui-BG-0);
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.weui-search-bar.weui-search-bar_focusing .weui-search-bar__cancel-btn {
display: block;
}
.weui-search-bar.weui-search-bar_focusing .weui-search-bar__label {
display: none;
}
.weui-search-bar .weui-icon-search {
font-size: 10px;
width: 1.6em;
height: 1.6em;
margin-left: 8px;
margin-right: 4px;
-webkit-flex-shrink: 0;
flex-shrink: 0;
}
.weui-search-bar__form {
position: relative;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
min-width: 0;
background-color: #fff;
background-color: var(--weui-BG-2);
border-radius: 4px;
}
.weui-search-bar__box {
position: relative;
z-index: 1;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.weui-search-bar__box .weui-search-bar__input {
padding: 8px 0;
width: 100%;
height: 1.14285714em;
border: 0;
font-size: 14px;
line-height: 1.14285714em;
box-sizing: content-box;
background: transparent;
caret-color: #07c160;
caret-color: var(--weui-BRAND);
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
}
.weui-search-bar__box .weui-search-bar__input:focus {
outline: none;
}
.weui-search-bar__box .weui-icon-clear {
-webkit-flex-shrink: 0;
flex-shrink: 0;
font-size: 10px;
width: 2em;
height: 2em;
margin-left: 8px;
-webkit-mask-size: 2em;
mask-size: 2em;
-webkit-mask-position: calc(100% - 8px) 0;
mask-position: calc(100% - 8px) 0;
min-width: 44px;
}
.weui-search-bar__box .weui-icon-clear:after {
content: "";
position: absolute;
top: 0;
bottom: 0;
width: 44px;
}
.weui-search-bar__label {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 2;
font-size: 0;
border-radius: 4px;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
-webkit-box-pack: center;
-webkit-justify-content: center;
justify-content: center;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
background: #fff;
background: var(--weui-BG-2);
}
.weui-search-bar__label span {
display: inline-block;
font-size: 14px;
vertical-align: middle;
}
.weui-search-bar__cancel-btn {
-webkit-flex-shrink: 0;
flex-shrink: 0;
display: none;
margin-left: 8px;
line-height: 28px;
color: #576b95;
color: var(--weui-LINK);
}
.weui-search-bar__input:not(:valid)+.weui-icon-clear {
display: none;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-results-button,
input[type="search"]::-webkit-search-results-decoration {
display: none;
}
.weui-picker {
position: fixed;
width: 100%;
box-sizing: border-box;
left: 0;
bottom: 0;
z-index: 5000;
background-color: #fff;
background-color: var(--weui-BG-2);
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-transform: translateY(100%);
transform: translateY(100%);
-webkit-transition: -webkit-transform 0.3s;
transition: -webkit-transform 0.3s;
transition: transform 0.3s;
transition: transform 0.3s, -webkit-transform 0.3s;
}
.weui-picker__hd {
display: -webkit-box;
display: -webkit-flex;
display: flex;
padding: 16px;
padding: 16px calc(16px + constant(safe-area-inset-right)) 16px calc(16px + constant(safe-area-inset-left));
padding: 16px calc(16px + env(safe-area-inset-right)) 16px calc(16px + env(safe-area-inset-left));
position: relative;
text-align: center;
font-size: 17px;
line-height: 1.4;
}
.weui-picker__hd:after {
content: " ";
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 1px;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-picker__bd {
display: -webkit-box;
display: -webkit-flex;
display: flex;
position: relative;
background-color: #fff;
background-color: var(--weui-BG-2);
height: 240px;
overflow: hidden;
}
.weui-picker__group {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
position: relative;
height: 100%;
}
.weui-picker__group:first-child .weui-picker__item {
padding-left: constant(safe-area-inset-left);
padding-left: env(safe-area-inset-left);
}
.weui-picker__group:last-child .weui-picker__item {
padding-right: constant(safe-area-inset-right);
padding-right: env(safe-area-inset-right);
}
.weui-picker__mask {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin: 0 auto;
z-index: 3;
background-image: -webkit-linear-gradient(top,
hsla(0, 0%, 100%, 0.95),
hsla(0, 0%, 100%, 0.6)),
-webkit-linear-gradient(bottom, hsla(0, 0%, 100%, 0.95), hsla(0, 0%, 100%, 0.6));
background-image: linear-gradient(180deg,
hsla(0, 0%, 100%, 0.95),
hsla(0, 0%, 100%, 0.6)),
linear-gradient(0deg, hsla(0, 0%, 100%, 0.95), hsla(0, 0%, 100%, 0.6));
background-position: top, bottom;
background-size: 100% 92px;
background-repeat: no-repeat;
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
body[data-weui-theme="dark"] .weui-picker__mask {
background-image: -webkit-linear-gradient(top,
rgba(25, 25, 25, 0.95),
rgba(25, 25, 25, 0.6)),
-webkit-linear-gradient(bottom, rgba(25, 25, 25, 0.95), rgba(25, 25, 25, 0.6));
background-image: linear-gradient(180deg,
rgba(25, 25, 25, 0.95),
rgba(25, 25, 25, 0.6)),
linear-gradient(0deg, rgba(25, 25, 25, 0.95), rgba(25, 25, 25, 0.6));
}
@media (prefers-color-scheme: dark) {
body:not([data-weui-theme="light"]) .weui-picker__mask {
background-image: -webkit-linear-gradient(top,
rgba(25, 25, 25, 0.95),
rgba(25, 25, 25, 0.6)),
-webkit-linear-gradient(bottom, rgba(25, 25, 25, 0.95), rgba(25, 25, 25, 0.6));
background-image: linear-gradient(180deg,
rgba(25, 25, 25, 0.95),
rgba(25, 25, 25, 0.6)),
linear-gradient(0deg, rgba(25, 25, 25, 0.95), rgba(25, 25, 25, 0.6));
}
}
.weui-picker__indicator {
width: 100%;
height: 56px;
position: absolute;
left: 0;
top: 92px;
z-index: 3;
}
.weui-picker__indicator:before {
top: 0;
border-top: 1px solid rgba(0, 0, 0, 0.1);
border-top: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-picker__indicator:after,
.weui-picker__indicator:before {
content: " ";
position: absolute;
left: 0;
right: 0;
height: 1px;
color: rgba(0, 0, 0, 0.1);
color: var(--weui-FG-3);
}
.weui-picker__indicator:after {
bottom: 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
border-bottom: 1px solid var(--weui-FG-3);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.weui-picker__content {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
.weui-picker__item {
height: 48px;
line-height: 48px;
text-align: center;
color: rgba(0, 0, 0, 0.9);
color: var(--weui-FG-0);
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.weui-picker__item_disabled {
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
}
@-webkit-keyframes a {
0% {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
to {
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
}
@keyframes a {
0% {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
to {
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
}
.weui-animate-slide-up,
.weui-animate_slide-up {
-webkit-animation: a ease 0.3s forwards;
animation: a ease 0.3s forwards;
}
@-webkit-keyframes b {
0% {
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
to {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
}
@keyframes b {
0% {
-webkit-transform: translateZ(0);
transform: translateZ(0);
}
to {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
}
.weui-animate-slide-down,
.weui-animate_slide-down {
-webkit-animation: b ease 0.3s forwards;
animation: b ease 0.3s forwards;
}
@-webkit-keyframes c {
0% {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes c {
0% {
opacity: 0;
}
to {
opacity: 1;
}
}
.weui-animate-fade-in,
.weui-animate_fade-in {
-webkit-animation: c ease 0.3s forwards;
animation: c ease 0.3s forwards;
}
@-webkit-keyframes d {
0% {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes d {
0% {
opacity: 1;
}
to {
opacity: 0;
}
}
.weui-animate-fade-out,
.weui-animate_fade-out {
-webkit-animation: d ease 0.3s forwards;
animation: d ease 0.3s forwards;
}
.weui-transition.weui-mask {
-webkit-transition: opacity 0.3s, visibility 0.3s;
transition: opacity 0.3s, visibility 0.3s;
opacity: 0;
visibility: hidden;
}
.weui-transition.weui-half-screen-dialog {
-webkit-transition: -webkit-transform 0.3s;
transition: -webkit-transform 0.3s;
transition: transform 0.3s;
transition: transform 0.3s, -webkit-transform 0.3s;
-webkit-transform: translateY(100%);
transform: translateY(100%);
}
.weui-transition_show.weui-mask {
opacity: 1;
visibility: visible;
}
.weui-transition_show.weui-half-screen-dialog {
-webkit-transform: translateY(0);
transform: translateY(0);
}
.weui-agree {
display: block;
padding: 8px 15px 0;
font-size: 14px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
.weui-agree a,
.weui-agree navigator {
color: #576b95;
color: var(--weui-LINK);
}
.weui-agree navigator {
display: inline;
}
.weui-agree__text {
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
margin-left: 2px;
}
.weui-agree__checkbox {
-webkit-appearance: none;
appearance: none;
display: inline-block;
border: 0;
outline: 0;
vertical-align: middle;
background-color: currentColor;
-webkit-mask-position: 0 0;
mask-position: 0 0;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: 100%;
mask-size: 100%;
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%221000%22%20height%3D%221000%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M500%20916.667C269.881%20916.667%2083.333%20730.119%2083.333%20500%2083.333%20269.881%20269.881%2083.333%20500%2083.333c230.119%200%20416.667%20186.548%20416.667%20416.667%200%20230.119-186.548%20416.667-416.667%20416.667zm0-50c202.504%200%20366.667-164.163%20366.667-366.667%200-202.504-164.163-366.667-366.667-366.667-202.504%200-366.667%20164.163-366.667%20366.667%200%20202.504%20164.163%20366.667%20366.667%20366.667z%22%20fill-rule%3D%22evenodd%22%20fill-opacity%3D%22.9%22%2F%3E%3C%2Fsvg%3E);
color: rgba(0, 0, 0, 0.3);
color: var(--weui-FG-2);
width: 1em;
height: 1em;
font-size: 17px;
margin-top: -0.2em;
}
.weui-agree__checkbox-check {
opacity: 0;
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
}
.weui-agree__checkbox-check[aria-checked="true"]+.weui-agree__checkbox,
.weui-agree__checkbox:checked {
-webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);
mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M12%2022C6.477%2022%202%2017.523%202%2012S6.477%202%2012%202s10%204.477%2010%2010-4.477%2010-10%2010zm-1.177-7.86l-2.765-2.767L7%2012.431l3.119%203.121a1%201%200%20001.414%200l5.952-5.95-1.062-1.062-5.6%205.6z%22%2F%3E%3C%2Fsvg%3E);
color: #07c160;
color: var(--weui-BRAND);
}
.weui-agree_animate {
-webkit-animation: e 0.3s 1;
animation: e 0.3s 1;
}
@-webkit-keyframes e {
0% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
16% {
-webkit-transform: translateX(-8px);
transform: translateX(-8px);
}
28% {
-webkit-transform: translateX(-16px);
transform: translateX(-16px);
}
44% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
59% {
-webkit-transform: translateX(-16px);
transform: translateX(-16px);
}
73% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
82% {
-webkit-transform: translateX(16px);
transform: translateX(16px);
}
94% {
-webkit-transform: translateX(8px);
transform: translateX(8px);
}
to {
-webkit-transform: translateX(0);
transform: translateX(0);
}
}
@keyframes e {
0% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
16% {
-webkit-transform: translateX(-8px);
transform: translateX(-8px);
}
28% {
-webkit-transform: translateX(-16px);
transform: translateX(-16px);
}
44% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
59% {
-webkit-transform: translateX(-16px);
transform: translateX(-16px);
}
73% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
82% {
-webkit-transform: translateX(16px);
transform: translateX(16px);
}
94% {
-webkit-transform: translateX(8px);
transform: translateX(8px);
}
to {
-webkit-transform: translateX(0);
transform: translateX(0);
}
}
.weui-primary-loading {
font-size: 16px;
display: -webkit-inline-box;
display: -webkit-inline-flex;
display: inline-flex;
position: relative;
width: 1em;
height: 1em;
vertical-align: middle;
color: #606060;
-webkit-animation: f 1s steps(60) infinite;
animation: f 1s steps(60) infinite;
}
.weui-primary-loading:after,
.weui-primary-loading:before {
content: "";
display: block;
width: 0.5em;
height: 1em;
box-sizing: border-box;
border: 0.125em solid;
border-color: currentColor;
}
.weui-primary-loading:before {
border-right-width: 0;
border-top-left-radius: 1em;
border-bottom-left-radius: 1em;
-webkit-mask-image: -webkit-linear-gradient(top,
#000 8%,
rgba(0, 0, 0, 0.3) 95%);
}
.weui-primary-loading:after {
border-left-width: 0;
border-top-right-radius: 1em;
border-bottom-right-radius: 1em;
-webkit-mask-image: -webkit-linear-gradient(top,
transparent 8%,
rgba(0, 0, 0, 0.3) 95%);
}
.weui-primary-loading__dot {
position: absolute;
top: 0;
left: 50%;
margin-left: -0.0625em;
width: 0.125em;
height: 0.125em;
border-top-right-radius: 0.125em;
border-bottom-right-radius: 0.125em;
background: currentColor;
}
.weui-primary-loading_brand {
color: #07c160;
color: var(--weui-BRAND);
}
.weui-primary-loading_transparent {
color: #ededed;
}
.weui-loading {
font-size: 10px;
width: 2em;
height: 2em;
display: inline-block;
vertical-align: middle;
-webkit-animation: f 1s steps(12) infinite;
animation: f 1s steps(12) infinite;
background: transparent url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E9E9E9' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23989697' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%239B999A' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23A3A1A2' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23ABA9AA' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23B2B2B2' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23BAB8B9' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23C2C0C1' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23CBCBCB' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23D2D2D2' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23DADADA' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='%23E2E2E2' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E") no-repeat;
background-size: 100%;
}
.weui-btn_loading.weui-btn_primary .weui-loading,
.weui-loading.weui-loading_transparent {
background-image: url("data:image/svg+xml;charset=utf8, %3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 100 100'%3E%3Cpath fill='none' d='M0 0h100v100H0z'/%3E%3Crect xmlns='http://www.w3.org/2000/svg' width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.56)' rx='5' ry='5' transform='translate(0 -30)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.5)' rx='5' ry='5' transform='rotate(30 105.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.43)' rx='5' ry='5' transform='rotate(60 75.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.38)' rx='5' ry='5' transform='rotate(90 65 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.32)' rx='5' ry='5' transform='rotate(120 58.66 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.28)' rx='5' ry='5' transform='rotate(150 54.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.25)' rx='5' ry='5' transform='rotate(180 50 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.2)' rx='5' ry='5' transform='rotate(-150 45.98 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.17)' rx='5' ry='5' transform='rotate(-120 41.34 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.14)' rx='5' ry='5' transform='rotate(-90 35 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.1)' rx='5' ry='5' transform='rotate(-60 24.02 65)'/%3E%3Crect width='7' height='20' x='46.5' y='40' fill='rgba(255,255,255,.03)' rx='5' ry='5' transform='rotate(-30 -5.98 65)'/%3E%3C/svg%3E");
}
@-webkit-keyframes f {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(1turn);
transform: rotate(1turn);
}
}
@keyframes f {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
to {
-webkit-transform: rotate(1turn);
transform: rotate(1turn);
}
}
.weui-slider {
padding: 15px 18px;
-webkit-user-select: none;
user-select: none;
}
.weui-slider__inner {
position: relative;
height: 2px;
background-color: rgba(0, 0, 0, 0.1);
background-color: var(--weui-FG-3);
}
.weui-slider__track {
height: 100%;
background-color: #07c160;
background-color: var(--weui-BRAND);
width: 0;
}
.weui-slider__handler {
position: absolute;
left: 0;
top: 50%;
width: 28px;
height: 28px;
margin-left: -14px;
margin-top: -14px;
border-radius: 50%;
background-color: #fff;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 4px var(--weui-FG-3);
}
.weui-slider-box {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
}
.weui-slider-box .weui-slider {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
}
.weui-slider-box__value {
margin-left: 0.5em;
min-width: 24px;
color: rgba(0, 0, 0, 0.5);
color: var(--weui-FG-1);
text-align: center;
font-size: 14px;
}
-26
View File
@@ -1,26 +0,0 @@
body,
html {
height: 100%;
-webkit-tap-highlight-color: transparent;
}
body {
font-family: system-ui, -apple-system, Helvetica Neue, sans-serif;
}
.page,
body {
background-color: var(--weui-BG-0);
}
.page {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
box-sizing: border-box;
z-index: 1;
}
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z"/></svg>

Before

Width:  |  Height:  |  Size: 276 B

-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4 0-2.05 1.53-3.76 3.56-3.97l1.07-.11.5-.95C8.08 7.14 9.94 6 12 6c2.62 0 4.88 1.86 5.39 4.43l.3 1.5 1.53.11c1.56.1 2.78 1.41 2.78 2.96 0 1.65-1.35 3-3 3zM8 13h2.55v3h2.9v-3H16l-4-4z"/></svg>

Before

Width:  |  Height:  |  Size: 518 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>

Before

Width:  |  Height:  |  Size: 393 B

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19.43 12.98c.04-.32.07-.64.07-.98 0-.34-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.09-.16-.26-.25-.44-.25-.06 0-.12.01-.17.03l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.06-.02-.12-.03-.18-.03-.17 0-.34.09-.43.25l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98 0 .33.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.09.16.26.25.44.25.06 0 .12-.01.17-.03l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.06.02.12.03.18.03.17 0 .34-.09.43-.25l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zm-1.98-1.71c.04.31.05.52.05.73 0 .21-.02.43-.05.73l-.14 1.13.89.7 1.08.84-.7 1.21-1.27-.51-1.04-.42-.9.68c-.43.32-.84.56-1.25.73l-1.06.43-.16 1.13-.2 1.35h-1.4l-.19-1.35-.16-1.13-1.06-.43c-.43-.18-.83-.41-1.23-.71l-.91-.7-1.06.43-1.27.51-.7-1.21 1.08-.84.89-.7-.14-1.13c-.03-.31-.05-.54-.05-.74s.02-.43.05-.73l.14-1.13-.89-.7-1.08-.84.7-1.21 1.27.51 1.04.42.9-.68c.43-.32.84-.56 1.25-.73l1.06-.43.16-1.13.2-1.35h1.39l.19 1.35.16 1.13 1.06.43c.43.18.83.41 1.23.71l.91.7 1.06-.43 1.27-.51.7 1.21-1.07.85-.89.7.14 1.13zM12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

-215
View File
@@ -1,215 +0,0 @@
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<title>影視</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,viewport-fit=cover">
<meta name="wechat-enable-text-zoom-em" content="true">
<meta name="layoutmode" content="standard">
<link rel="stylesheet" type="text/css" href="css/style.css">
<link rel="stylesheet" type="text/css" href="css/ui.css">
<script src="js/jquery.min.js"></script>
<script src="js/script.js"></script>
</head>
<body>
<div class="page">
<div class="page__bd" style="height: 100%;">
<div class="weui-tab">
<div id="panel1" role="tabpanel" aria-labelledby="tab1" class="weui-tab__panel">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">搜尋</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="keyword" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入關鍵字..." />
</div>
</div>
</div>
<div style="text-align: center;margin-top: 16px;">
<button onclick="search(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
</div>
</div>
</div>
<div id="panel2" role="tabpanel" aria-labelledby="tab2" class="weui-tab__panel" style="display: none;">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">推送</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="push_url" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入播放網址..." />
</div>
</div>
</div>
<div style="text-align: center;margin-top: 16px;">
<button onclick="push(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
</div>
</div>
</div>
<div id="panel3" role="tabpanel" aria-labelledby="tab3" class="weui-tab__panel" style="display: none;">
<div class="weui-form">
<div class="weui-form__text-area">
<h2 class="weui-form__title">設定</h2>
</div>
<div class="weui-form__control-area">
<div class="weui-cells__group weui-cells__group_form">
<div class="weui-cells">
<div class="weui-cell weui-cell_active weui-cell_vcode weui-cell_wrap">
<div class="weui-cell__bd weui-flex">
<input id="setting_name" class="weui-input weui-cell__control" type="text" value="" placeholder="請輸入名稱" />
<input id="setting_text" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入接口/Proxy/User-Agent..." />
</div>
</div>
</div>
<div style="text-align: center;margin-top: 16px;">
<button onclick="setting(); return false;" class="weui-cell__control weui-btn weui-btn_default weui-vcode-btn">確定</button>
</div>
</div>
</div>
</div>
</div>
<div id="panel4" role="tabpanel" aria-labelledby="tab4" class="weui-tab__panel" style="display: none;">
<div class="weui-form" style="min-height: 0;">
<div class="weui-form__text-area">
<h2 class="weui-form__title">本地</h2>
</div>
<input type="file" id="file_uploader" style="display:none;" onchange="uploadTip()" multiple />
<div class="weui-form__control-area" style="text-align: center;margin-bottom: 8px !important;">
<div>
<a href="javascript:void(0)" role="button" class="weui-btn weui-btn_mini weui-btn_default weui-wa-hotarea" href="javascript:void(0)" onclick="uploadFile()">上傳檔案</a>&nbsp;
<a href="javascript:void(0)" role="button" class="weui-btn weui-btn_mini weui-btn_default weui-wa-hotarea" href="javascript:void(0)" onclick="newFolder()">新增資料夾</a>&nbsp;
<a id="delCurFolder" href="javascript:void(0)" role="button" class="weui-btn weui-btn_mini weui-btn_warn weui-wa-hotarea" href="javascript:void(0)" onclick="delFolder()" style="display: none;">刪除資料夾</a>
</div>
</div>
<div class="weui-cells" id="file_list"></div>
</div>
</div>
<div role="tablist" class="weui-tabbar">
<div id="tab1" role="tab" aria-labelledby="t1_title" aria-selected="true" aria-controls="panel1" class="weui-tabbar__item weui-bar__item_on">
<div class="weui-tabbar__icon">
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" />
</svg>
</div>
<p id="t1_title" aria-hidden="true" class="weui-tabbar__label">搜尋</p>
</div>
<div id="tab2" role="tab" aria-labelledby="t2_title" aria-selected="false" aria-controls="panel2" class="weui-tabbar__item">
<div class="weui-tabbar__icon">
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM19 18H6c-2.21 0-4-1.79-4-4 0-2.05 1.53-3.76 3.56-3.97l1.07-.11.5-.95C8.08 7.14 9.94 6 12 6c2.62 0 4.88 1.86 5.39 4.43l.3 1.5 1.53.11c1.56.1 2.78 1.41 2.78 2.96 0 1.65-1.35 3-3 3zM8 13h2.55v3h2.9v-3H16l-4-4z" />
</svg>
</div>
<p id="t2_title" aria-hidden="true" class="weui-tabbar__label">推送</p>
</div>
<div id="tab3" role="tab" aria-labelledby="t3_title" aria-selected="false" aria-controls="panel3" class="weui-tabbar__item">
<div class="weui-tabbar__icon">
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M19.43 12.98c.04-.32.07-.64.07-.98 0-.34-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.09-.16-.26-.25-.44-.25-.06 0-.12.01-.17.03l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.06-.02-.12-.03-.18-.03-.17 0-.34.09-.43.25l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98 0 .33.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.09.16.26.25.44.25.06 0 .12-.01.17-.03l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.06.02.12.03.18.03.17 0 .34-.09.43-.25l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zm-1.98-1.71c.04.31.05.52.05.73 0 .21-.02.43-.05.73l-.14 1.13.89.7 1.08.84-.7 1.21-1.27-.51-1.04-.42-.9.68c-.43.32-.84.56-1.25.73l-1.06.43-.16 1.13-.2 1.35h-1.4l-.19-1.35-.16-1.13-1.06-.43c-.43-.18-.83-.41-1.23-.71l-.91-.7-1.06.43-1.27.51-.7-1.21 1.08-.84.89-.7-.14-1.13c-.03-.31-.05-.54-.05-.74s.02-.43.05-.73l.14-1.13-.89-.7-1.08-.84.7-1.21 1.27.51 1.04.42.9-.68c.43-.32.84-.56 1.25-.73l1.06-.43.16-1.13.2-1.35h1.39l.19 1.35.16 1.13 1.06.43c.43.18.83.41 1.23.71l.91.7 1.06-.43 1.27-.51.7 1.21-1.07.85-.89.7.14 1.13zM12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 6c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z" />
</svg>
</div>
<p id="t3_title" aria-hidden="true" class="weui-tabbar__label">設定</p>
</div>
<div id="tab4" role="tab" aria-labelledby="t4_title" aria-selected="false" aria-controls="panel4" class="weui-tabbar__item">
<div class="weui-tabbar__icon">
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000">
<path d="M0 0h24v24H0V0z" fill="none" />
<path d="M9.17 6l2 2H20v10H4V6h5.17M10 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2h-8l-2-2z" />
</svg>
</div>
<p id="t4_title" aria-hidden="true" class="weui-tabbar__label">本地</p>
</div>
</div>
</div>
</div>
</div>
<div role="dialog" aria-hidden="true" aria-modal="true" id="fileInfoDialog" style="display: none;">
<div class="weui-mask"></div>
<div class="weui-dialog">
<div class="weui-dialog__hd"><strong class="weui-dialog__title">本地路徑</strong></div>
<div class="weui-dialog__bd" id="fileUrl"></div>
<div class="weui-dialog__ft">
<a role="button" href="javascript:void(0)" onclick="pushFile(0)" class="weui-dialog__btn weui-dialog__btn_default">關閉</a>
<a role="button" href="javascript:void(0)" onclick="pushFile(1)" class="weui-dialog__btn weui-dialog__btn_primary">使用</a>
<a role="button" href="javascript:void(0)" onclick="delFile()" class="weui-dialog__btn weui-dialog__btn_primary" id="delFileBtn">刪除</a>
</div>
</div>
</div>
<div role="dialog" aria-hidden="true" aria-modal="true" id="uploadTip" style="display: none;">
<div class="weui-mask"></div>
<div class="weui-dialog">
<div class="weui-dialog__hd"><strong class="weui-dialog__title">確認上傳?</strong></div>
<div class="weui-dialog__bd" id="uploadTipContent"></div>
<div class="weui-dialog__ft">
<a role="button" href="javascript:void(0)" onclick="doUpload(0)" class="weui-dialog__btn weui-dialog__btn_default">取消</a>
<a role="button" href="javascript:void(0)" onclick="doUpload(1)" class="weui-dialog__btn weui-dialog__btn_primary">確定</a>
</div>
</div>
</div>
<div role="dialog" aria-hidden="true" aria-modal="true" id="newFolder" style="display: none;">
<div class="weui-mask"></div>
<div class="weui-dialog">
<div class="weui-dialog__hd"><strong class="weui-dialog__title">新增資料夾</strong></div>
<div class="weui-dialog__bd">
<input id="newFolderContent" class="weui-input weui-cell__control weui-cell__control_flex" type="text" value="" placeholder="請輸入資料夾名稱..." />
</div>
<div class="weui-dialog__ft">
<a role="button" href="javascript:void(0)" onclick="doNewFolder(0)" class="weui-dialog__btn weui-dialog__btn_default">取消</a>
<a role="button" href="javascript:void(0)" onclick="doNewFolder(1)" class="weui-dialog__btn weui-dialog__btn_primary">確定</a>
</div>
</div>
</div>
<div role="dialog" aria-hidden="true" aria-modal="true" id="delFolder" style="display: none;">
<div class="weui-mask"></div>
<div class="weui-dialog">
<div class="weui-dialog__hd"><strong class="weui-dialog__title">刪除資料夾</strong></div>
<div class="weui-dialog__bd" id="delFolderContent"></div>
<div class="weui-dialog__ft">
<a role="button" href="javascript:void(0)" onclick="doDelFolder(0)" class="weui-dialog__btn weui-dialog__btn_default">取消</a>
<a role="button" href="javascript:void(0)" onclick="doDelFolder(1)" class="weui-dialog__btn weui-dialog__btn_primary">確定</a>
</div>
</div>
</div>
<div role="dialog" aria-hidden="true" aria-modal="true" id="delFile" style="display: none;">
<div class="weui-mask"></div>
<div class="weui-dialog">
<div class="weui-dialog__hd"><strong class="weui-dialog__title">刪除檔案</strong></div>
<div class="weui-dialog__bd" id="delFileContent"></div>
<div class="weui-dialog__ft">
<a role="button" href="javascript:void(0)" onclick="doDelFile(0)" class="weui-dialog__btn weui-dialog__btn_default">取消</a>
<a role="button" href="javascript:void(0)" onclick="doDelFile(1)" class="weui-dialog__btn weui-dialog__btn_primary">確定</a>
</div>
</div>
</div>
<div role="alert" id="warnToast" style="display: none;">
<div class="weui-mask_transparent"></div>
<div class="weui-toast">
<i class="weui-icon-warn weui-icon_toast"></i>
<p class="weui-toast__content" id="warnToastContent"></p>
</div>
</div>
<div role="alert" id="loadingToast" style="display: none;">
<div class="weui-mask_transparent"></div>
<div class="weui-toast">
<span class="weui-primary-loading weui-icon_toast"><span class="weui-primary-loading__dot"></span></span>
<p class="weui-toast__content">載入中</p>
</div>
</div>
</body>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-6191
View File
@@ -1,6191 +0,0 @@
;(function (root, factory) {
if (typeof exports === "object") {
// CommonJS
module.exports = exports = factory();
}
else if (typeof define === "function" && define.amd) {
// AMD
define([], factory);
}
else {
// Global (browser)
globalThis.CryptoJS = factory();
}
}(this, function () {
/*globals window, global, require*/
/**
* CryptoJS core components.
*/
var CryptoJS = CryptoJS || (function (Math, undefined) {
var crypto;
// Native crypto from window (Browser)
if (typeof window !== 'undefined' && window.crypto) {
crypto = window.crypto;
}
// Native crypto in web worker (Browser)
if (typeof self !== 'undefined' && self.crypto) {
crypto = self.crypto;
}
// Native crypto from worker
if (typeof globalThis !== 'undefined' && globalThis.crypto) {
crypto = globalThis.crypto;
}
// Native (experimental IE 11) crypto from window (Browser)
if (!crypto && typeof window !== 'undefined' && window.msCrypto) {
crypto = window.msCrypto;
}
// Native crypto from global (NodeJS)
if (!crypto && typeof global !== 'undefined' && global.crypto) {
crypto = global.crypto;
}
// Native crypto import via require (NodeJS)
if (!crypto && typeof require === 'function') {
try {
crypto = require('crypto');
} catch (err) {}
}
/*
* Cryptographically secure pseudorandom number generator
*
* As Math.random() is cryptographically not safe to use
*/
var cryptoSecureRandomInt = function () {
if (crypto) {
// Use getRandomValues method (Browser)
if (typeof crypto.getRandomValues === 'function') {
try {
return crypto.getRandomValues(new Uint32Array(1))[0];
} catch (err) {}
}
// Use randomBytes method (NodeJS)
if (typeof crypto.randomBytes === 'function') {
try {
return crypto.randomBytes(4).readInt32LE();
} catch (err) {}
}
}
throw new Error('Native crypto module could not be used to get secure random number.');
};
/*
* Local polyfill of Object.create
*/
var create = Object.create || (function () {
function F() {}
return function (obj) {
var subtype;
F.prototype = obj;
subtype = new F();
F.prototype = null;
return subtype;
};
}());
/**
* CryptoJS namespace.
*/
var C = {};
/**
* Library namespace.
*/
var C_lib = C.lib = {};
/**
* Base object for prototypal inheritance.
*/
var Base = C_lib.Base = (function () {
return {
/**
* Creates a new object that inherits from this object.
*
* @param {Object} overrides Properties to copy into the new object.
*
* @return {Object} The new object.
*
* @static
*
* @example
*
* var MyType = CryptoJS.lib.Base.extend({
* field: 'value',
*
* method: function () {
* }
* });
*/
extend: function (overrides) {
// Spawn
var subtype = create(this);
// Augment
if (overrides) {
subtype.mixIn(overrides);
}
// Create default initializer
if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {
subtype.init = function () {
subtype.$super.init.apply(this, arguments);
};
}
// Initializer's prototype is the subtype object
subtype.init.prototype = subtype;
// Reference supertype
subtype.$super = this;
return subtype;
},
/**
* Extends this object and runs the init method.
* Arguments to create() will be passed to init().
*
* @return {Object} The new object.
*
* @static
*
* @example
*
* var instance = MyType.create();
*/
create: function () {
var instance = this.extend();
instance.init.apply(instance, arguments);
return instance;
},
/**
* Initializes a newly created object.
* Override this method to add some logic when your objects are created.
*
* @example
*
* var MyType = CryptoJS.lib.Base.extend({
* init: function () {
* // ...
* }
* });
*/
init: function () {
},
/**
* Copies properties into this object.
*
* @param {Object} properties The properties to mix in.
*
* @example
*
* MyType.mixIn({
* field: 'value'
* });
*/
mixIn: function (properties) {
for (var propertyName in properties) {
if (properties.hasOwnProperty(propertyName)) {
this[propertyName] = properties[propertyName];
}
}
// IE won't copy toString using the loop above
if (properties.hasOwnProperty('toString')) {
this.toString = properties.toString;
}
},
/**
* Creates a copy of this object.
*
* @return {Object} The clone.
*
* @example
*
* var clone = instance.clone();
*/
clone: function () {
return this.init.prototype.extend(this);
}
};
}());
/**
* An array of 32-bit words.
*
* @property {Array} words The array of 32-bit words.
* @property {number} sigBytes The number of significant bytes in this word array.
*/
var WordArray = C_lib.WordArray = Base.extend({
/**
* Initializes a newly created word array.
*
* @param {Array} words (Optional) An array of 32-bit words.
* @param {number} sigBytes (Optional) The number of significant bytes in the words.
*
* @example
*
* var wordArray = CryptoJS.lib.WordArray.create();
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);
* var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);
*/
init: function (words, sigBytes) {
words = this.words = words || [];
if (sigBytes != undefined) {
this.sigBytes = sigBytes;
} else {
this.sigBytes = words.length * 4;
}
},
/**
* Converts this word array to a string.
*
* @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex
*
* @return {string} The stringified word array.
*
* @example
*
* var string = wordArray + '';
* var string = wordArray.toString();
* var string = wordArray.toString(CryptoJS.enc.Utf8);
*/
toString: function (encoder) {
return (encoder || Hex).stringify(this);
},
/**
* Concatenates a word array to this word array.
*
* @param {WordArray} wordArray The word array to append.
*
* @return {WordArray} This word array.
*
* @example
*
* wordArray1.concat(wordArray2);
*/
concat: function (wordArray) {
// Shortcuts
var thisWords = this.words;
var thatWords = wordArray.words;
var thisSigBytes = this.sigBytes;
var thatSigBytes = wordArray.sigBytes;
// Clamp excess bits
this.clamp();
// Concat
if (thisSigBytes % 4) {
// Copy one byte at a time
for (var i = 0; i < thatSigBytes; i++) {
var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);
}
} else {
// Copy one word at a time
for (var j = 0; j < thatSigBytes; j += 4) {
thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];
}
}
this.sigBytes += thatSigBytes;
// Chainable
return this;
},
/**
* Removes insignificant bits.
*
* @example
*
* wordArray.clamp();
*/
clamp: function () {
// Shortcuts
var words = this.words;
var sigBytes = this.sigBytes;
// Clamp
words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);
words.length = Math.ceil(sigBytes / 4);
},
/**
* Creates a copy of this word array.
*
* @return {WordArray} The clone.
*
* @example
*
* var clone = wordArray.clone();
*/
clone: function () {
var clone = Base.clone.call(this);
clone.words = this.words.slice(0);
return clone;
},
/**
* Creates a word array filled with random bytes.
*
* @param {number} nBytes The number of random bytes to generate.
*
* @return {WordArray} The random word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.lib.WordArray.random(16);
*/
random: function (nBytes) {
var words = [];
for (var i = 0; i < nBytes; i += 4) {
words.push(cryptoSecureRandomInt());
}
return new WordArray.init(words, nBytes);
}
});
/**
* Encoder namespace.
*/
var C_enc = C.enc = {};
/**
* Hex encoding strategy.
*/
var Hex = C_enc.Hex = {
/**
* Converts a word array to a hex string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The hex string.
*
* @static
*
* @example
*
* var hexString = CryptoJS.enc.Hex.stringify(wordArray);
*/
stringify: function (wordArray) {
// Shortcuts
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
// Convert
var hexChars = [];
for (var i = 0; i < sigBytes; i++) {
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
hexChars.push((bite >>> 4).toString(16));
hexChars.push((bite & 0x0f).toString(16));
}
return hexChars.join('');
},
/**
* Converts a hex string to a word array.
*
* @param {string} hexStr The hex string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Hex.parse(hexString);
*/
parse: function (hexStr) {
// Shortcut
var hexStrLength = hexStr.length;
// Convert
var words = [];
for (var i = 0; i < hexStrLength; i += 2) {
words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);
}
return new WordArray.init(words, hexStrLength / 2);
}
};
/**
* Latin1 encoding strategy.
*/
var Latin1 = C_enc.Latin1 = {
/**
* Converts a word array to a Latin1 string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The Latin1 string.
*
* @static
*
* @example
*
* var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);
*/
stringify: function (wordArray) {
// Shortcuts
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
// Convert
var latin1Chars = [];
for (var i = 0; i < sigBytes; i++) {
var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
latin1Chars.push(String.fromCharCode(bite));
}
return latin1Chars.join('');
},
/**
* Converts a Latin1 string to a word array.
*
* @param {string} latin1Str The Latin1 string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Latin1.parse(latin1String);
*/
parse: function (latin1Str) {
// Shortcut
var latin1StrLength = latin1Str.length;
// Convert
var words = [];
for (var i = 0; i < latin1StrLength; i++) {
words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);
}
return new WordArray.init(words, latin1StrLength);
}
};
/**
* UTF-8 encoding strategy.
*/
var Utf8 = C_enc.Utf8 = {
/**
* Converts a word array to a UTF-8 string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The UTF-8 string.
*
* @static
*
* @example
*
* var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
*/
stringify: function (wordArray) {
try {
return decodeURIComponent(escape(Latin1.stringify(wordArray)));
} catch (e) {
throw new Error('Malformed UTF-8 data');
}
},
/**
* Converts a UTF-8 string to a word array.
*
* @param {string} utf8Str The UTF-8 string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Utf8.parse(utf8String);
*/
parse: function (utf8Str) {
return Latin1.parse(unescape(encodeURIComponent(utf8Str)));
}
};
/**
* Abstract buffered block algorithm template.
*
* The property blockSize must be implemented in a concrete subtype.
*
* @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0
*/
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({
/**
* Resets this block algorithm's data buffer to its initial state.
*
* @example
*
* bufferedBlockAlgorithm.reset();
*/
reset: function () {
// Initial values
this._data = new WordArray.init();
this._nDataBytes = 0;
},
/**
* Adds new data to this block algorithm's buffer.
*
* @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.
*
* @example
*
* bufferedBlockAlgorithm._append('data');
* bufferedBlockAlgorithm._append(wordArray);
*/
_append: function (data) {
// Convert string to WordArray, else assume WordArray already
if (typeof data == 'string') {
data = Utf8.parse(data);
}
// Append
this._data.concat(data);
this._nDataBytes += data.sigBytes;
},
/**
* Processes available data blocks.
*
* This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.
*
* @param {boolean} doFlush Whether all blocks and partial blocks should be processed.
*
* @return {WordArray} The processed data.
*
* @example
*
* var processedData = bufferedBlockAlgorithm._process();
* var processedData = bufferedBlockAlgorithm._process(!!'flush');
*/
_process: function (doFlush) {
var processedWords;
// Shortcuts
var data = this._data;
var dataWords = data.words;
var dataSigBytes = data.sigBytes;
var blockSize = this.blockSize;
var blockSizeBytes = blockSize * 4;
// Count blocks ready
var nBlocksReady = dataSigBytes / blockSizeBytes;
if (doFlush) {
// Round up to include partial blocks
nBlocksReady = Math.ceil(nBlocksReady);
} else {
// Round down to include only full blocks,
// less the number of blocks that must remain in the buffer
nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);
}
// Count words ready
var nWordsReady = nBlocksReady * blockSize;
// Count bytes ready
var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);
// Process blocks
if (nWordsReady) {
for (var offset = 0; offset < nWordsReady; offset += blockSize) {
// Perform concrete-algorithm logic
this._doProcessBlock(dataWords, offset);
}
// Remove processed words
processedWords = dataWords.splice(0, nWordsReady);
data.sigBytes -= nBytesReady;
}
// Return processed words
return new WordArray.init(processedWords, nBytesReady);
},
/**
* Creates a copy of this object.
*
* @return {Object} The clone.
*
* @example
*
* var clone = bufferedBlockAlgorithm.clone();
*/
clone: function () {
var clone = Base.clone.call(this);
clone._data = this._data.clone();
return clone;
},
_minBufferSize: 0
});
/**
* Abstract hasher template.
*
* @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)
*/
var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({
/**
* Configuration options.
*/
cfg: Base.extend(),
/**
* Initializes a newly created hasher.
*
* @param {Object} cfg (Optional) The configuration options to use for this hash computation.
*
* @example
*
* var hasher = CryptoJS.algo.SHA256.create();
*/
init: function (cfg) {
// Apply config defaults
this.cfg = this.cfg.extend(cfg);
// Set initial values
this.reset();
},
/**
* Resets this hasher to its initial state.
*
* @example
*
* hasher.reset();
*/
reset: function () {
// Reset data buffer
BufferedBlockAlgorithm.reset.call(this);
// Perform concrete-hasher logic
this._doReset();
},
/**
* Updates this hasher with a message.
*
* @param {WordArray|string} messageUpdate The message to append.
*
* @return {Hasher} This hasher.
*
* @example
*
* hasher.update('message');
* hasher.update(wordArray);
*/
update: function (messageUpdate) {
// Append
this._append(messageUpdate);
// Update the hash
this._process();
// Chainable
return this;
},
/**
* Finalizes the hash computation.
* Note that the finalize operation is effectively a destructive, read-once operation.
*
* @param {WordArray|string} messageUpdate (Optional) A final message update.
*
* @return {WordArray} The hash.
*
* @example
*
* var hash = hasher.finalize();
* var hash = hasher.finalize('message');
* var hash = hasher.finalize(wordArray);
*/
finalize: function (messageUpdate) {
// Final message update
if (messageUpdate) {
this._append(messageUpdate);
}
// Perform concrete-hasher logic
var hash = this._doFinalize();
return hash;
},
blockSize: 512/32,
/**
* Creates a shortcut function to a hasher's object interface.
*
* @param {Hasher} hasher The hasher to create a helper for.
*
* @return {Function} The shortcut function.
*
* @static
*
* @example
*
* var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);
*/
_createHelper: function (hasher) {
return function (message, cfg) {
return new hasher.init(cfg).finalize(message);
};
},
/**
* Creates a shortcut function to the HMAC's object interface.
*
* @param {Hasher} hasher The hasher to use in this HMAC helper.
*
* @return {Function} The shortcut function.
*
* @static
*
* @example
*
* var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);
*/
_createHmacHelper: function (hasher) {
return function (message, key) {
return new C_algo.HMAC.init(hasher, key).finalize(message);
};
}
});
/**
* Algorithm namespace.
*/
var C_algo = C.algo = {};
return C;
}(Math));
(function (undefined) {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var X32WordArray = C_lib.WordArray;
/**
* x64 namespace.
*/
var C_x64 = C.x64 = {};
/**
* A 64-bit word.
*/
var X64Word = C_x64.Word = Base.extend({
/**
* Initializes a newly created 64-bit word.
*
* @param {number} high The high 32 bits.
* @param {number} low The low 32 bits.
*
* @example
*
* var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);
*/
init: function (high, low) {
this.high = high;
this.low = low;
}
/**
* Bitwise NOTs this word.
*
* @return {X64Word} A new x64-Word object after negating.
*
* @example
*
* var negated = x64Word.not();
*/
// not: function () {
// var high = ~this.high;
// var low = ~this.low;
// return X64Word.create(high, low);
// },
/**
* Bitwise ANDs this word with the passed word.
*
* @param {X64Word} word The x64-Word to AND with this word.
*
* @return {X64Word} A new x64-Word object after ANDing.
*
* @example
*
* var anded = x64Word.and(anotherX64Word);
*/
// and: function (word) {
// var high = this.high & word.high;
// var low = this.low & word.low;
// return X64Word.create(high, low);
// },
/**
* Bitwise ORs this word with the passed word.
*
* @param {X64Word} word The x64-Word to OR with this word.
*
* @return {X64Word} A new x64-Word object after ORing.
*
* @example
*
* var ored = x64Word.or(anotherX64Word);
*/
// or: function (word) {
// var high = this.high | word.high;
// var low = this.low | word.low;
// return X64Word.create(high, low);
// },
/**
* Bitwise XORs this word with the passed word.
*
* @param {X64Word} word The x64-Word to XOR with this word.
*
* @return {X64Word} A new x64-Word object after XORing.
*
* @example
*
* var xored = x64Word.xor(anotherX64Word);
*/
// xor: function (word) {
// var high = this.high ^ word.high;
// var low = this.low ^ word.low;
// return X64Word.create(high, low);
// },
/**
* Shifts this word n bits to the left.
*
* @param {number} n The number of bits to shift.
*
* @return {X64Word} A new x64-Word object after shifting.
*
* @example
*
* var shifted = x64Word.shiftL(25);
*/
// shiftL: function (n) {
// if (n < 32) {
// var high = (this.high << n) | (this.low >>> (32 - n));
// var low = this.low << n;
// } else {
// var high = this.low << (n - 32);
// var low = 0;
// }
// return X64Word.create(high, low);
// },
/**
* Shifts this word n bits to the right.
*
* @param {number} n The number of bits to shift.
*
* @return {X64Word} A new x64-Word object after shifting.
*
* @example
*
* var shifted = x64Word.shiftR(7);
*/
// shiftR: function (n) {
// if (n < 32) {
// var low = (this.low >>> n) | (this.high << (32 - n));
// var high = this.high >>> n;
// } else {
// var low = this.high >>> (n - 32);
// var high = 0;
// }
// return X64Word.create(high, low);
// },
/**
* Rotates this word n bits to the left.
*
* @param {number} n The number of bits to rotate.
*
* @return {X64Word} A new x64-Word object after rotating.
*
* @example
*
* var rotated = x64Word.rotL(25);
*/
// rotL: function (n) {
// return this.shiftL(n).or(this.shiftR(64 - n));
// },
/**
* Rotates this word n bits to the right.
*
* @param {number} n The number of bits to rotate.
*
* @return {X64Word} A new x64-Word object after rotating.
*
* @example
*
* var rotated = x64Word.rotR(7);
*/
// rotR: function (n) {
// return this.shiftR(n).or(this.shiftL(64 - n));
// },
/**
* Adds this word with the passed word.
*
* @param {X64Word} word The x64-Word to add with this word.
*
* @return {X64Word} A new x64-Word object after adding.
*
* @example
*
* var added = x64Word.add(anotherX64Word);
*/
// add: function (word) {
// var low = (this.low + word.low) | 0;
// var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;
// var high = (this.high + word.high + carry) | 0;
// return X64Word.create(high, low);
// }
});
/**
* An array of 64-bit words.
*
* @property {Array} words The array of CryptoJS.x64.Word objects.
* @property {number} sigBytes The number of significant bytes in this word array.
*/
var X64WordArray = C_x64.WordArray = Base.extend({
/**
* Initializes a newly created word array.
*
* @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.
* @param {number} sigBytes (Optional) The number of significant bytes in the words.
*
* @example
*
* var wordArray = CryptoJS.x64.WordArray.create();
*
* var wordArray = CryptoJS.x64.WordArray.create([
* CryptoJS.x64.Word.create(0x00010203, 0x04050607),
* CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
* ]);
*
* var wordArray = CryptoJS.x64.WordArray.create([
* CryptoJS.x64.Word.create(0x00010203, 0x04050607),
* CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)
* ], 10);
*/
init: function (words, sigBytes) {
words = this.words = words || [];
if (sigBytes != undefined) {
this.sigBytes = sigBytes;
} else {
this.sigBytes = words.length * 8;
}
},
/**
* Converts this 64-bit word array to a 32-bit word array.
*
* @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.
*
* @example
*
* var x32WordArray = x64WordArray.toX32();
*/
toX32: function () {
// Shortcuts
var x64Words = this.words;
var x64WordsLength = x64Words.length;
// Convert
var x32Words = [];
for (var i = 0; i < x64WordsLength; i++) {
var x64Word = x64Words[i];
x32Words.push(x64Word.high);
x32Words.push(x64Word.low);
}
return X32WordArray.create(x32Words, this.sigBytes);
},
/**
* Creates a copy of this word array.
*
* @return {X64WordArray} The clone.
*
* @example
*
* var clone = x64WordArray.clone();
*/
clone: function () {
var clone = Base.clone.call(this);
// Clone "words" array
var words = clone.words = this.words.slice(0);
// Clone each X64Word object
var wordsLength = words.length;
for (var i = 0; i < wordsLength; i++) {
words[i] = words[i].clone();
}
return clone;
}
});
}());
(function () {
// Check if typed arrays are supported
if (typeof ArrayBuffer != 'function') {
return;
}
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
// Reference original init
var superInit = WordArray.init;
// Augment WordArray.init to handle typed arrays
var subInit = WordArray.init = function (typedArray) {
// Convert buffers to uint8
if (typedArray instanceof ArrayBuffer) {
typedArray = new Uint8Array(typedArray);
}
// Convert other array views to uint8
if (
typedArray instanceof Int8Array ||
(typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) ||
typedArray instanceof Int16Array ||
typedArray instanceof Uint16Array ||
typedArray instanceof Int32Array ||
typedArray instanceof Uint32Array ||
typedArray instanceof Float32Array ||
typedArray instanceof Float64Array
) {
typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);
}
// Handle Uint8Array
if (typedArray instanceof Uint8Array) {
// Shortcut
var typedArrayByteLength = typedArray.byteLength;
// Extract bytes
var words = [];
for (var i = 0; i < typedArrayByteLength; i++) {
words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);
}
// Initialize this word array
superInit.call(this, words, typedArrayByteLength);
} else {
// Else call normal init
superInit.apply(this, arguments);
}
};
subInit.prototype = WordArray;
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var C_enc = C.enc;
/**
* UTF-16 BE encoding strategy.
*/
var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {
/**
* Converts a word array to a UTF-16 BE string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The UTF-16 BE string.
*
* @static
*
* @example
*
* var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);
*/
stringify: function (wordArray) {
// Shortcuts
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
// Convert
var utf16Chars = [];
for (var i = 0; i < sigBytes; i += 2) {
var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;
utf16Chars.push(String.fromCharCode(codePoint));
}
return utf16Chars.join('');
},
/**
* Converts a UTF-16 BE string to a word array.
*
* @param {string} utf16Str The UTF-16 BE string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Utf16.parse(utf16String);
*/
parse: function (utf16Str) {
// Shortcut
var utf16StrLength = utf16Str.length;
// Convert
var words = [];
for (var i = 0; i < utf16StrLength; i++) {
words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);
}
return WordArray.create(words, utf16StrLength * 2);
}
};
/**
* UTF-16 LE encoding strategy.
*/
C_enc.Utf16LE = {
/**
* Converts a word array to a UTF-16 LE string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The UTF-16 LE string.
*
* @static
*
* @example
*
* var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);
*/
stringify: function (wordArray) {
// Shortcuts
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
// Convert
var utf16Chars = [];
for (var i = 0; i < sigBytes; i += 2) {
var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);
utf16Chars.push(String.fromCharCode(codePoint));
}
return utf16Chars.join('');
},
/**
* Converts a UTF-16 LE string to a word array.
*
* @param {string} utf16Str The UTF-16 LE string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);
*/
parse: function (utf16Str) {
// Shortcut
var utf16StrLength = utf16Str.length;
// Convert
var words = [];
for (var i = 0; i < utf16StrLength; i++) {
words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));
}
return WordArray.create(words, utf16StrLength * 2);
}
};
function swapEndian(word) {
return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);
}
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var C_enc = C.enc;
/**
* Base64 encoding strategy.
*/
var Base64 = C_enc.Base64 = {
/**
* Converts a word array to a Base64 string.
*
* @param {WordArray} wordArray The word array.
*
* @return {string} The Base64 string.
*
* @static
*
* @example
*
* var base64String = CryptoJS.enc.Base64.stringify(wordArray);
*/
stringify: function (wordArray) {
// Shortcuts
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
var map = this._map;
// Clamp excess bits
wordArray.clamp();
// Convert
var base64Chars = [];
for (var i = 0; i < sigBytes; i += 3) {
var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
}
}
// Add padding
var paddingChar = map.charAt(64);
if (paddingChar) {
while (base64Chars.length % 4) {
base64Chars.push(paddingChar);
}
}
return base64Chars.join('');
},
/**
* Converts a Base64 string to a word array.
*
* @param {string} base64Str The Base64 string.
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Base64.parse(base64String);
*/
parse: function (base64Str) {
// Shortcuts
var base64StrLength = base64Str.length;
var map = this._map;
var reverseMap = this._reverseMap;
if (!reverseMap) {
reverseMap = this._reverseMap = [];
for (var j = 0; j < map.length; j++) {
reverseMap[map.charCodeAt(j)] = j;
}
}
// Ignore padding
var paddingChar = map.charAt(64);
if (paddingChar) {
var paddingIndex = base64Str.indexOf(paddingChar);
if (paddingIndex !== -1) {
base64StrLength = paddingIndex;
}
}
// Convert
return parseLoop(base64Str, base64StrLength, reverseMap);
},
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
};
function parseLoop(base64Str, base64StrLength, reverseMap) {
var words = [];
var nBytes = 0;
for (var i = 0; i < base64StrLength; i++) {
if (i % 4) {
var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);
var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);
var bitsCombined = bits1 | bits2;
words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);
nBytes++;
}
}
return WordArray.create(words, nBytes);
}
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var C_enc = C.enc;
/**
* Base64url encoding strategy.
*/
var Base64url = C_enc.Base64url = {
/**
* Converts a word array to a Base64url string.
*
* @param {WordArray} wordArray The word array.
*
* @param {boolean} urlSafe Whether to use url safe
*
* @return {string} The Base64url string.
*
* @static
*
* @example
*
* var base64String = CryptoJS.enc.Base64url.stringify(wordArray);
*/
stringify: function (wordArray, urlSafe=true) {
// Shortcuts
var words = wordArray.words;
var sigBytes = wordArray.sigBytes;
var map = urlSafe ? this._safe_map : this._map;
// Clamp excess bits
wordArray.clamp();
// Convert
var base64Chars = [];
for (var i = 0; i < sigBytes; i += 3) {
var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;
var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;
var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;
var triplet = (byte1 << 16) | (byte2 << 8) | byte3;
for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {
base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));
}
}
// Add padding
var paddingChar = map.charAt(64);
if (paddingChar) {
while (base64Chars.length % 4) {
base64Chars.push(paddingChar);
}
}
return base64Chars.join('');
},
/**
* Converts a Base64url string to a word array.
*
* @param {string} base64Str The Base64url string.
*
* @param {boolean} urlSafe Whether to use url safe
*
* @return {WordArray} The word array.
*
* @static
*
* @example
*
* var wordArray = CryptoJS.enc.Base64url.parse(base64String);
*/
parse: function (base64Str, urlSafe=true) {
// Shortcuts
var base64StrLength = base64Str.length;
var map = urlSafe ? this._safe_map : this._map;
var reverseMap = this._reverseMap;
if (!reverseMap) {
reverseMap = this._reverseMap = [];
for (var j = 0; j < map.length; j++) {
reverseMap[map.charCodeAt(j)] = j;
}
}
// Ignore padding
var paddingChar = map.charAt(64);
if (paddingChar) {
var paddingIndex = base64Str.indexOf(paddingChar);
if (paddingIndex !== -1) {
base64StrLength = paddingIndex;
}
}
// Convert
return parseLoop(base64Str, base64StrLength, reverseMap);
},
_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
_safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',
};
function parseLoop(base64Str, base64StrLength, reverseMap) {
var words = [];
var nBytes = 0;
for (var i = 0; i < base64StrLength; i++) {
if (i % 4) {
var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);
var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);
var bitsCombined = bits1 | bits2;
words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);
nBytes++;
}
}
return WordArray.create(words, nBytes);
}
}());
(function (Math) {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
// Constants table
var T = [];
// Compute constants
(function () {
for (var i = 0; i < 64; i++) {
T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;
}
}());
/**
* MD5 hash algorithm.
*/
var MD5 = C_algo.MD5 = Hasher.extend({
_doReset: function () {
this._hash = new WordArray.init([
0x67452301, 0xefcdab89,
0x98badcfe, 0x10325476
]);
},
_doProcessBlock: function (M, offset) {
// Swap endian
for (var i = 0; i < 16; i++) {
// Shortcuts
var offset_i = offset + i;
var M_offset_i = M[offset_i];
M[offset_i] = (
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
);
}
// Shortcuts
var H = this._hash.words;
var M_offset_0 = M[offset + 0];
var M_offset_1 = M[offset + 1];
var M_offset_2 = M[offset + 2];
var M_offset_3 = M[offset + 3];
var M_offset_4 = M[offset + 4];
var M_offset_5 = M[offset + 5];
var M_offset_6 = M[offset + 6];
var M_offset_7 = M[offset + 7];
var M_offset_8 = M[offset + 8];
var M_offset_9 = M[offset + 9];
var M_offset_10 = M[offset + 10];
var M_offset_11 = M[offset + 11];
var M_offset_12 = M[offset + 12];
var M_offset_13 = M[offset + 13];
var M_offset_14 = M[offset + 14];
var M_offset_15 = M[offset + 15];
// Working varialbes
var a = H[0];
var b = H[1];
var c = H[2];
var d = H[3];
// Computation
a = FF(a, b, c, d, M_offset_0, 7, T[0]);
d = FF(d, a, b, c, M_offset_1, 12, T[1]);
c = FF(c, d, a, b, M_offset_2, 17, T[2]);
b = FF(b, c, d, a, M_offset_3, 22, T[3]);
a = FF(a, b, c, d, M_offset_4, 7, T[4]);
d = FF(d, a, b, c, M_offset_5, 12, T[5]);
c = FF(c, d, a, b, M_offset_6, 17, T[6]);
b = FF(b, c, d, a, M_offset_7, 22, T[7]);
a = FF(a, b, c, d, M_offset_8, 7, T[8]);
d = FF(d, a, b, c, M_offset_9, 12, T[9]);
c = FF(c, d, a, b, M_offset_10, 17, T[10]);
b = FF(b, c, d, a, M_offset_11, 22, T[11]);
a = FF(a, b, c, d, M_offset_12, 7, T[12]);
d = FF(d, a, b, c, M_offset_13, 12, T[13]);
c = FF(c, d, a, b, M_offset_14, 17, T[14]);
b = FF(b, c, d, a, M_offset_15, 22, T[15]);
a = GG(a, b, c, d, M_offset_1, 5, T[16]);
d = GG(d, a, b, c, M_offset_6, 9, T[17]);
c = GG(c, d, a, b, M_offset_11, 14, T[18]);
b = GG(b, c, d, a, M_offset_0, 20, T[19]);
a = GG(a, b, c, d, M_offset_5, 5, T[20]);
d = GG(d, a, b, c, M_offset_10, 9, T[21]);
c = GG(c, d, a, b, M_offset_15, 14, T[22]);
b = GG(b, c, d, a, M_offset_4, 20, T[23]);
a = GG(a, b, c, d, M_offset_9, 5, T[24]);
d = GG(d, a, b, c, M_offset_14, 9, T[25]);
c = GG(c, d, a, b, M_offset_3, 14, T[26]);
b = GG(b, c, d, a, M_offset_8, 20, T[27]);
a = GG(a, b, c, d, M_offset_13, 5, T[28]);
d = GG(d, a, b, c, M_offset_2, 9, T[29]);
c = GG(c, d, a, b, M_offset_7, 14, T[30]);
b = GG(b, c, d, a, M_offset_12, 20, T[31]);
a = HH(a, b, c, d, M_offset_5, 4, T[32]);
d = HH(d, a, b, c, M_offset_8, 11, T[33]);
c = HH(c, d, a, b, M_offset_11, 16, T[34]);
b = HH(b, c, d, a, M_offset_14, 23, T[35]);
a = HH(a, b, c, d, M_offset_1, 4, T[36]);
d = HH(d, a, b, c, M_offset_4, 11, T[37]);
c = HH(c, d, a, b, M_offset_7, 16, T[38]);
b = HH(b, c, d, a, M_offset_10, 23, T[39]);
a = HH(a, b, c, d, M_offset_13, 4, T[40]);
d = HH(d, a, b, c, M_offset_0, 11, T[41]);
c = HH(c, d, a, b, M_offset_3, 16, T[42]);
b = HH(b, c, d, a, M_offset_6, 23, T[43]);
a = HH(a, b, c, d, M_offset_9, 4, T[44]);
d = HH(d, a, b, c, M_offset_12, 11, T[45]);
c = HH(c, d, a, b, M_offset_15, 16, T[46]);
b = HH(b, c, d, a, M_offset_2, 23, T[47]);
a = II(a, b, c, d, M_offset_0, 6, T[48]);
d = II(d, a, b, c, M_offset_7, 10, T[49]);
c = II(c, d, a, b, M_offset_14, 15, T[50]);
b = II(b, c, d, a, M_offset_5, 21, T[51]);
a = II(a, b, c, d, M_offset_12, 6, T[52]);
d = II(d, a, b, c, M_offset_3, 10, T[53]);
c = II(c, d, a, b, M_offset_10, 15, T[54]);
b = II(b, c, d, a, M_offset_1, 21, T[55]);
a = II(a, b, c, d, M_offset_8, 6, T[56]);
d = II(d, a, b, c, M_offset_15, 10, T[57]);
c = II(c, d, a, b, M_offset_6, 15, T[58]);
b = II(b, c, d, a, M_offset_13, 21, T[59]);
a = II(a, b, c, d, M_offset_4, 6, T[60]);
d = II(d, a, b, c, M_offset_11, 10, T[61]);
c = II(c, d, a, b, M_offset_2, 15, T[62]);
b = II(b, c, d, a, M_offset_9, 21, T[63]);
// Intermediate hash value
H[0] = (H[0] + a) | 0;
H[1] = (H[1] + b) | 0;
H[2] = (H[2] + c) | 0;
H[3] = (H[3] + d) | 0;
},
_doFinalize: function () {
// Shortcuts
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes * 8;
var nBitsLeft = data.sigBytes * 8;
// Add padding
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);
var nBitsTotalL = nBitsTotal;
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (
(((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |
(((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)
);
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
(((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |
(((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)
);
data.sigBytes = (dataWords.length + 1) * 4;
// Hash final blocks
this._process();
// Shortcuts
var hash = this._hash;
var H = hash.words;
// Swap endian
for (var i = 0; i < 4; i++) {
// Shortcut
var H_i = H[i];
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
}
// Return final computed hash
return hash;
},
clone: function () {
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();
return clone;
}
});
function FF(a, b, c, d, x, s, t) {
var n = a + ((b & c) | (~b & d)) + x + t;
return ((n << s) | (n >>> (32 - s))) + b;
}
function GG(a, b, c, d, x, s, t) {
var n = a + ((b & d) | (c & ~d)) + x + t;
return ((n << s) | (n >>> (32 - s))) + b;
}
function HH(a, b, c, d, x, s, t) {
var n = a + (b ^ c ^ d) + x + t;
return ((n << s) | (n >>> (32 - s))) + b;
}
function II(a, b, c, d, x, s, t) {
var n = a + (c ^ (b | ~d)) + x + t;
return ((n << s) | (n >>> (32 - s))) + b;
}
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.MD5('message');
* var hash = CryptoJS.MD5(wordArray);
*/
C.MD5 = Hasher._createHelper(MD5);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacMD5(message, key);
*/
C.HmacMD5 = Hasher._createHmacHelper(MD5);
}(Math));
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
// Reusable object
var W = [];
/**
* SHA-1 hash algorithm.
*/
var SHA1 = C_algo.SHA1 = Hasher.extend({
_doReset: function () {
this._hash = new WordArray.init([
0x67452301, 0xefcdab89,
0x98badcfe, 0x10325476,
0xc3d2e1f0
]);
},
_doProcessBlock: function (M, offset) {
// Shortcut
var H = this._hash.words;
// Working variables
var a = H[0];
var b = H[1];
var c = H[2];
var d = H[3];
var e = H[4];
// Computation
for (var i = 0; i < 80; i++) {
if (i < 16) {
W[i] = M[offset + i] | 0;
} else {
var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];
W[i] = (n << 1) | (n >>> 31);
}
var t = ((a << 5) | (a >>> 27)) + e + W[i];
if (i < 20) {
t += ((b & c) | (~b & d)) + 0x5a827999;
} else if (i < 40) {
t += (b ^ c ^ d) + 0x6ed9eba1;
} else if (i < 60) {
t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;
} else /* if (i < 80) */ {
t += (b ^ c ^ d) - 0x359d3e2a;
}
e = d;
d = c;
c = (b << 30) | (b >>> 2);
b = a;
a = t;
}
// Intermediate hash value
H[0] = (H[0] + a) | 0;
H[1] = (H[1] + b) | 0;
H[2] = (H[2] + c) | 0;
H[3] = (H[3] + d) | 0;
H[4] = (H[4] + e) | 0;
},
_doFinalize: function () {
// Shortcuts
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes * 8;
var nBitsLeft = data.sigBytes * 8;
// Add padding
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
data.sigBytes = dataWords.length * 4;
// Hash final blocks
this._process();
// Return final computed hash
return this._hash;
},
clone: function () {
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();
return clone;
}
});
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.SHA1('message');
* var hash = CryptoJS.SHA1(wordArray);
*/
C.SHA1 = Hasher._createHelper(SHA1);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacSHA1(message, key);
*/
C.HmacSHA1 = Hasher._createHmacHelper(SHA1);
}());
(function (Math) {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
// Initialization and round constants tables
var H = [];
var K = [];
// Compute constants
(function () {
function isPrime(n) {
var sqrtN = Math.sqrt(n);
for (var factor = 2; factor <= sqrtN; factor++) {
if (!(n % factor)) {
return false;
}
}
return true;
}
function getFractionalBits(n) {
return ((n - (n | 0)) * 0x100000000) | 0;
}
var n = 2;
var nPrime = 0;
while (nPrime < 64) {
if (isPrime(n)) {
if (nPrime < 8) {
H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));
}
K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));
nPrime++;
}
n++;
}
}());
// Reusable object
var W = [];
/**
* SHA-256 hash algorithm.
*/
var SHA256 = C_algo.SHA256 = Hasher.extend({
_doReset: function () {
this._hash = new WordArray.init(H.slice(0));
},
_doProcessBlock: function (M, offset) {
// Shortcut
var H = this._hash.words;
// Working variables
var a = H[0];
var b = H[1];
var c = H[2];
var d = H[3];
var e = H[4];
var f = H[5];
var g = H[6];
var h = H[7];
// Computation
for (var i = 0; i < 64; i++) {
if (i < 16) {
W[i] = M[offset + i] | 0;
} else {
var gamma0x = W[i - 15];
var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^
((gamma0x << 14) | (gamma0x >>> 18)) ^
(gamma0x >>> 3);
var gamma1x = W[i - 2];
var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^
((gamma1x << 13) | (gamma1x >>> 19)) ^
(gamma1x >>> 10);
W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];
}
var ch = (e & f) ^ (~e & g);
var maj = (a & b) ^ (a & c) ^ (b & c);
var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));
var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));
var t1 = h + sigma1 + ch + K[i] + W[i];
var t2 = sigma0 + maj;
h = g;
g = f;
f = e;
e = (d + t1) | 0;
d = c;
c = b;
b = a;
a = (t1 + t2) | 0;
}
// Intermediate hash value
H[0] = (H[0] + a) | 0;
H[1] = (H[1] + b) | 0;
H[2] = (H[2] + c) | 0;
H[3] = (H[3] + d) | 0;
H[4] = (H[4] + e) | 0;
H[5] = (H[5] + f) | 0;
H[6] = (H[6] + g) | 0;
H[7] = (H[7] + h) | 0;
},
_doFinalize: function () {
// Shortcuts
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes * 8;
var nBitsLeft = data.sigBytes * 8;
// Add padding
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;
data.sigBytes = dataWords.length * 4;
// Hash final blocks
this._process();
// Return final computed hash
return this._hash;
},
clone: function () {
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();
return clone;
}
});
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.SHA256('message');
* var hash = CryptoJS.SHA256(wordArray);
*/
C.SHA256 = Hasher._createHelper(SHA256);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacSHA256(message, key);
*/
C.HmacSHA256 = Hasher._createHmacHelper(SHA256);
}(Math));
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var C_algo = C.algo;
var SHA256 = C_algo.SHA256;
/**
* SHA-224 hash algorithm.
*/
var SHA224 = C_algo.SHA224 = SHA256.extend({
_doReset: function () {
this._hash = new WordArray.init([
0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
]);
},
_doFinalize: function () {
var hash = SHA256._doFinalize.call(this);
hash.sigBytes -= 4;
return hash;
}
});
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.SHA224('message');
* var hash = CryptoJS.SHA224(wordArray);
*/
C.SHA224 = SHA256._createHelper(SHA224);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacSHA224(message, key);
*/
C.HmacSHA224 = SHA256._createHmacHelper(SHA224);
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var Hasher = C_lib.Hasher;
var C_x64 = C.x64;
var X64Word = C_x64.Word;
var X64WordArray = C_x64.WordArray;
var C_algo = C.algo;
function X64Word_create() {
return X64Word.create.apply(X64Word, arguments);
}
// Constants
var K = [
X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),
X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),
X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),
X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),
X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),
X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),
X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),
X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),
X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),
X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),
X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),
X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),
X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),
X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),
X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),
X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),
X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),
X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),
X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),
X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),
X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),
X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),
X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),
X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),
X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),
X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),
X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),
X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),
X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),
X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),
X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),
X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),
X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),
X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),
X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),
X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),
X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),
X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),
X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),
X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)
];
// Reusable objects
var W = [];
(function () {
for (var i = 0; i < 80; i++) {
W[i] = X64Word_create();
}
}());
/**
* SHA-512 hash algorithm.
*/
var SHA512 = C_algo.SHA512 = Hasher.extend({
_doReset: function () {
this._hash = new X64WordArray.init([
new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),
new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),
new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),
new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)
]);
},
_doProcessBlock: function (M, offset) {
// Shortcuts
var H = this._hash.words;
var H0 = H[0];
var H1 = H[1];
var H2 = H[2];
var H3 = H[3];
var H4 = H[4];
var H5 = H[5];
var H6 = H[6];
var H7 = H[7];
var H0h = H0.high;
var H0l = H0.low;
var H1h = H1.high;
var H1l = H1.low;
var H2h = H2.high;
var H2l = H2.low;
var H3h = H3.high;
var H3l = H3.low;
var H4h = H4.high;
var H4l = H4.low;
var H5h = H5.high;
var H5l = H5.low;
var H6h = H6.high;
var H6l = H6.low;
var H7h = H7.high;
var H7l = H7.low;
// Working variables
var ah = H0h;
var al = H0l;
var bh = H1h;
var bl = H1l;
var ch = H2h;
var cl = H2l;
var dh = H3h;
var dl = H3l;
var eh = H4h;
var el = H4l;
var fh = H5h;
var fl = H5l;
var gh = H6h;
var gl = H6l;
var hh = H7h;
var hl = H7l;
// Rounds
for (var i = 0; i < 80; i++) {
var Wil;
var Wih;
// Shortcut
var Wi = W[i];
// Extend message
if (i < 16) {
Wih = Wi.high = M[offset + i * 2] | 0;
Wil = Wi.low = M[offset + i * 2 + 1] | 0;
} else {
// Gamma0
var gamma0x = W[i - 15];
var gamma0xh = gamma0x.high;
var gamma0xl = gamma0x.low;
var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);
var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));
// Gamma1
var gamma1x = W[i - 2];
var gamma1xh = gamma1x.high;
var gamma1xl = gamma1x.low;
var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);
var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));
// W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
var Wi7 = W[i - 7];
var Wi7h = Wi7.high;
var Wi7l = Wi7.low;
var Wi16 = W[i - 16];
var Wi16h = Wi16.high;
var Wi16l = Wi16.low;
Wil = gamma0l + Wi7l;
Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);
Wil = Wil + gamma1l;
Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);
Wil = Wil + Wi16l;
Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);
Wi.high = Wih;
Wi.low = Wil;
}
var chh = (eh & fh) ^ (~eh & gh);
var chl = (el & fl) ^ (~el & gl);
var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));
var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));
// t1 = h + sigma1 + ch + K[i] + W[i]
var Ki = K[i];
var Kih = Ki.high;
var Kil = Ki.low;
var t1l = hl + sigma1l;
var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
var t1l = t1l + chl;
var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
var t1l = t1l + Kil;
var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);
var t1l = t1l + Wil;
var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);
// t2 = sigma0 + maj
var t2l = sigma0l + majl;
var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
// Update working variables
hh = gh;
hl = gl;
gh = fh;
gl = fl;
fh = eh;
fl = el;
el = (dl + t1l) | 0;
eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
dh = ch;
dl = cl;
ch = bh;
cl = bl;
bh = ah;
bl = al;
al = (t1l + t2l) | 0;
ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
}
// Intermediate hash value
H0l = H0.low = (H0l + al);
H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));
H1l = H1.low = (H1l + bl);
H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));
H2l = H2.low = (H2l + cl);
H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));
H3l = H3.low = (H3l + dl);
H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));
H4l = H4.low = (H4l + el);
H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));
H5l = H5.low = (H5l + fl);
H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));
H6l = H6.low = (H6l + gl);
H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));
H7l = H7.low = (H7l + hl);
H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));
},
_doFinalize: function () {
// Shortcuts
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes * 8;
var nBitsLeft = data.sigBytes * 8;
// Add padding
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);
dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;
data.sigBytes = dataWords.length * 4;
// Hash final blocks
this._process();
// Convert hash to 32-bit word array before returning
var hash = this._hash.toX32();
// Return final computed hash
return hash;
},
clone: function () {
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();
return clone;
},
blockSize: 1024/32
});
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.SHA512('message');
* var hash = CryptoJS.SHA512(wordArray);
*/
C.SHA512 = Hasher._createHelper(SHA512);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacSHA512(message, key);
*/
C.HmacSHA512 = Hasher._createHmacHelper(SHA512);
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_x64 = C.x64;
var X64Word = C_x64.Word;
var X64WordArray = C_x64.WordArray;
var C_algo = C.algo;
var SHA512 = C_algo.SHA512;
/**
* SHA-384 hash algorithm.
*/
var SHA384 = C_algo.SHA384 = SHA512.extend({
_doReset: function () {
this._hash = new X64WordArray.init([
new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),
new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),
new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),
new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)
]);
},
_doFinalize: function () {
var hash = SHA512._doFinalize.call(this);
hash.sigBytes -= 16;
return hash;
}
});
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.SHA384('message');
* var hash = CryptoJS.SHA384(wordArray);
*/
C.SHA384 = SHA512._createHelper(SHA384);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacSHA384(message, key);
*/
C.HmacSHA384 = SHA512._createHmacHelper(SHA384);
}());
(function (Math) {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_x64 = C.x64;
var X64Word = C_x64.Word;
var C_algo = C.algo;
// Constants tables
var RHO_OFFSETS = [];
var PI_INDEXES = [];
var ROUND_CONSTANTS = [];
// Compute Constants
(function () {
// Compute rho offset constants
var x = 1, y = 0;
for (var t = 0; t < 24; t++) {
RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;
var newX = y % 5;
var newY = (2 * x + 3 * y) % 5;
x = newX;
y = newY;
}
// Compute pi index constants
for (var x = 0; x < 5; x++) {
for (var y = 0; y < 5; y++) {
PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;
}
}
// Compute round constants
var LFSR = 0x01;
for (var i = 0; i < 24; i++) {
var roundConstantMsw = 0;
var roundConstantLsw = 0;
for (var j = 0; j < 7; j++) {
if (LFSR & 0x01) {
var bitPosition = (1 << j) - 1;
if (bitPosition < 32) {
roundConstantLsw ^= 1 << bitPosition;
} else /* if (bitPosition >= 32) */ {
roundConstantMsw ^= 1 << (bitPosition - 32);
}
}
// Compute next LFSR
if (LFSR & 0x80) {
// Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1
LFSR = (LFSR << 1) ^ 0x71;
} else {
LFSR <<= 1;
}
}
ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);
}
}());
// Reusable objects for temporary values
var T = [];
(function () {
for (var i = 0; i < 25; i++) {
T[i] = X64Word.create();
}
}());
/**
* SHA-3 hash algorithm.
*/
var SHA3 = C_algo.SHA3 = Hasher.extend({
/**
* Configuration options.
*
* @property {number} outputLength
* The desired number of bits in the output hash.
* Only values permitted are: 224, 256, 384, 512.
* Default: 512
*/
cfg: Hasher.cfg.extend({
outputLength: 512
}),
_doReset: function () {
var state = this._state = []
for (var i = 0; i < 25; i++) {
state[i] = new X64Word.init();
}
this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;
},
_doProcessBlock: function (M, offset) {
// Shortcuts
var state = this._state;
var nBlockSizeLanes = this.blockSize / 2;
// Absorb
for (var i = 0; i < nBlockSizeLanes; i++) {
// Shortcuts
var M2i = M[offset + 2 * i];
var M2i1 = M[offset + 2 * i + 1];
// Swap endian
M2i = (
(((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |
(((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)
);
M2i1 = (
(((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |
(((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)
);
// Absorb message into state
var lane = state[i];
lane.high ^= M2i1;
lane.low ^= M2i;
}
// Rounds
for (var round = 0; round < 24; round++) {
// Theta
for (var x = 0; x < 5; x++) {
// Mix column lanes
var tMsw = 0, tLsw = 0;
for (var y = 0; y < 5; y++) {
var lane = state[x + 5 * y];
tMsw ^= lane.high;
tLsw ^= lane.low;
}
// Temporary values
var Tx = T[x];
Tx.high = tMsw;
Tx.low = tLsw;
}
for (var x = 0; x < 5; x++) {
// Shortcuts
var Tx4 = T[(x + 4) % 5];
var Tx1 = T[(x + 1) % 5];
var Tx1Msw = Tx1.high;
var Tx1Lsw = Tx1.low;
// Mix surrounding columns
var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));
var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));
for (var y = 0; y < 5; y++) {
var lane = state[x + 5 * y];
lane.high ^= tMsw;
lane.low ^= tLsw;
}
}
// Rho Pi
for (var laneIndex = 1; laneIndex < 25; laneIndex++) {
var tMsw;
var tLsw;
// Shortcuts
var lane = state[laneIndex];
var laneMsw = lane.high;
var laneLsw = lane.low;
var rhoOffset = RHO_OFFSETS[laneIndex];
// Rotate lanes
if (rhoOffset < 32) {
tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));
tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));
} else /* if (rhoOffset >= 32) */ {
tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));
tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));
}
// Transpose lanes
var TPiLane = T[PI_INDEXES[laneIndex]];
TPiLane.high = tMsw;
TPiLane.low = tLsw;
}
// Rho pi at x = y = 0
var T0 = T[0];
var state0 = state[0];
T0.high = state0.high;
T0.low = state0.low;
// Chi
for (var x = 0; x < 5; x++) {
for (var y = 0; y < 5; y++) {
// Shortcuts
var laneIndex = x + 5 * y;
var lane = state[laneIndex];
var TLane = T[laneIndex];
var Tx1Lane = T[((x + 1) % 5) + 5 * y];
var Tx2Lane = T[((x + 2) % 5) + 5 * y];
// Mix rows
lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);
lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);
}
}
// Iota
var lane = state[0];
var roundConstant = ROUND_CONSTANTS[round];
lane.high ^= roundConstant.high;
lane.low ^= roundConstant.low;
}
},
_doFinalize: function () {
// Shortcuts
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes * 8;
var nBitsLeft = data.sigBytes * 8;
var blockSizeBits = this.blockSize * 32;
// Add padding
dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);
dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;
data.sigBytes = dataWords.length * 4;
// Hash final blocks
this._process();
// Shortcuts
var state = this._state;
var outputLengthBytes = this.cfg.outputLength / 8;
var outputLengthLanes = outputLengthBytes / 8;
// Squeeze
var hashWords = [];
for (var i = 0; i < outputLengthLanes; i++) {
// Shortcuts
var lane = state[i];
var laneMsw = lane.high;
var laneLsw = lane.low;
// Swap endian
laneMsw = (
(((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |
(((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)
);
laneLsw = (
(((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |
(((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)
);
// Squeeze state to retrieve hash
hashWords.push(laneLsw);
hashWords.push(laneMsw);
}
// Return final computed hash
return new WordArray.init(hashWords, outputLengthBytes);
},
clone: function () {
var clone = Hasher.clone.call(this);
var state = clone._state = this._state.slice(0);
for (var i = 0; i < 25; i++) {
state[i] = state[i].clone();
}
return clone;
}
});
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.SHA3('message');
* var hash = CryptoJS.SHA3(wordArray);
*/
C.SHA3 = Hasher._createHelper(SHA3);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacSHA3(message, key);
*/
C.HmacSHA3 = Hasher._createHmacHelper(SHA3);
}(Math));
/** @preserve
(c) 2012 by Cédric Mesnil. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
(function (Math) {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var Hasher = C_lib.Hasher;
var C_algo = C.algo;
// Constants table
var _zl = WordArray.create([
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);
var _zr = WordArray.create([
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);
var _sl = WordArray.create([
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);
var _sr = WordArray.create([
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);
var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);
var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);
/**
* RIPEMD160 hash algorithm.
*/
var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({
_doReset: function () {
this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);
},
_doProcessBlock: function (M, offset) {
// Swap endian
for (var i = 0; i < 16; i++) {
// Shortcuts
var offset_i = offset + i;
var M_offset_i = M[offset_i];
// Swap
M[offset_i] = (
(((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
(((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
);
}
// Shortcut
var H = this._hash.words;
var hl = _hl.words;
var hr = _hr.words;
var zl = _zl.words;
var zr = _zr.words;
var sl = _sl.words;
var sr = _sr.words;
// Working variables
var al, bl, cl, dl, el;
var ar, br, cr, dr, er;
ar = al = H[0];
br = bl = H[1];
cr = cl = H[2];
dr = dl = H[3];
er = el = H[4];
// Computation
var t;
for (var i = 0; i < 80; i += 1) {
t = (al + M[offset+zl[i]])|0;
if (i<16){
t += f1(bl,cl,dl) + hl[0];
} else if (i<32) {
t += f2(bl,cl,dl) + hl[1];
} else if (i<48) {
t += f3(bl,cl,dl) + hl[2];
} else if (i<64) {
t += f4(bl,cl,dl) + hl[3];
} else {// if (i<80) {
t += f5(bl,cl,dl) + hl[4];
}
t = t|0;
t = rotl(t,sl[i]);
t = (t+el)|0;
al = el;
el = dl;
dl = rotl(cl, 10);
cl = bl;
bl = t;
t = (ar + M[offset+zr[i]])|0;
if (i<16){
t += f5(br,cr,dr) + hr[0];
} else if (i<32) {
t += f4(br,cr,dr) + hr[1];
} else if (i<48) {
t += f3(br,cr,dr) + hr[2];
} else if (i<64) {
t += f2(br,cr,dr) + hr[3];
} else {// if (i<80) {
t += f1(br,cr,dr) + hr[4];
}
t = t|0;
t = rotl(t,sr[i]) ;
t = (t+er)|0;
ar = er;
er = dr;
dr = rotl(cr, 10);
cr = br;
br = t;
}
// Intermediate hash value
t = (H[1] + cl + dr)|0;
H[1] = (H[2] + dl + er)|0;
H[2] = (H[3] + el + ar)|0;
H[3] = (H[4] + al + br)|0;
H[4] = (H[0] + bl + cr)|0;
H[0] = t;
},
_doFinalize: function () {
// Shortcuts
var data = this._data;
var dataWords = data.words;
var nBitsTotal = this._nDataBytes * 8;
var nBitsLeft = data.sigBytes * 8;
// Add padding
dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);
dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
(((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
(((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
);
data.sigBytes = (dataWords.length + 1) * 4;
// Hash final blocks
this._process();
// Shortcuts
var hash = this._hash;
var H = hash.words;
// Swap endian
for (var i = 0; i < 5; i++) {
// Shortcut
var H_i = H[i];
// Swap
H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
(((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);
}
// Return final computed hash
return hash;
},
clone: function () {
var clone = Hasher.clone.call(this);
clone._hash = this._hash.clone();
return clone;
}
});
function f1(x, y, z) {
return ((x) ^ (y) ^ (z));
}
function f2(x, y, z) {
return (((x)&(y)) | ((~x)&(z)));
}
function f3(x, y, z) {
return (((x) | (~(y))) ^ (z));
}
function f4(x, y, z) {
return (((x) & (z)) | ((y)&(~(z))));
}
function f5(x, y, z) {
return ((x) ^ ((y) |(~(z))));
}
function rotl(x,n) {
return (x<<n) | (x>>>(32-n));
}
/**
* Shortcut function to the hasher's object interface.
*
* @param {WordArray|string} message The message to hash.
*
* @return {WordArray} The hash.
*
* @static
*
* @example
*
* var hash = CryptoJS.RIPEMD160('message');
* var hash = CryptoJS.RIPEMD160(wordArray);
*/
C.RIPEMD160 = Hasher._createHelper(RIPEMD160);
/**
* Shortcut function to the HMAC's object interface.
*
* @param {WordArray|string} message The message to hash.
* @param {WordArray|string} key The secret key.
*
* @return {WordArray} The HMAC.
*
* @static
*
* @example
*
* var hmac = CryptoJS.HmacRIPEMD160(message, key);
*/
C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);
}(Math));
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var C_enc = C.enc;
var Utf8 = C_enc.Utf8;
var C_algo = C.algo;
/**
* HMAC algorithm.
*/
var HMAC = C_algo.HMAC = Base.extend({
/**
* Initializes a newly created HMAC.
*
* @param {Hasher} hasher The hash algorithm to use.
* @param {WordArray|string} key The secret key.
*
* @example
*
* var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);
*/
init: function (hasher, key) {
// Init hasher
hasher = this._hasher = new hasher.init();
// Convert string to WordArray, else assume WordArray already
if (typeof key == 'string') {
key = Utf8.parse(key);
}
// Shortcuts
var hasherBlockSize = hasher.blockSize;
var hasherBlockSizeBytes = hasherBlockSize * 4;
// Allow arbitrary length keys
if (key.sigBytes > hasherBlockSizeBytes) {
key = hasher.finalize(key);
}
// Clamp excess bits
key.clamp();
// Clone key for inner and outer pads
var oKey = this._oKey = key.clone();
var iKey = this._iKey = key.clone();
// Shortcuts
var oKeyWords = oKey.words;
var iKeyWords = iKey.words;
// XOR keys with pad constants
for (var i = 0; i < hasherBlockSize; i++) {
oKeyWords[i] ^= 0x5c5c5c5c;
iKeyWords[i] ^= 0x36363636;
}
oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;
// Set initial values
this.reset();
},
/**
* Resets this HMAC to its initial state.
*
* @example
*
* hmacHasher.reset();
*/
reset: function () {
// Shortcut
var hasher = this._hasher;
// Reset
hasher.reset();
hasher.update(this._iKey);
},
/**
* Updates this HMAC with a message.
*
* @param {WordArray|string} messageUpdate The message to append.
*
* @return {HMAC} This HMAC instance.
*
* @example
*
* hmacHasher.update('message');
* hmacHasher.update(wordArray);
*/
update: function (messageUpdate) {
this._hasher.update(messageUpdate);
// Chainable
return this;
},
/**
* Finalizes the HMAC computation.
* Note that the finalize operation is effectively a destructive, read-once operation.
*
* @param {WordArray|string} messageUpdate (Optional) A final message update.
*
* @return {WordArray} The HMAC.
*
* @example
*
* var hmac = hmacHasher.finalize();
* var hmac = hmacHasher.finalize('message');
* var hmac = hmacHasher.finalize(wordArray);
*/
finalize: function (messageUpdate) {
// Shortcut
var hasher = this._hasher;
// Compute HMAC
var innerHash = hasher.finalize(messageUpdate);
hasher.reset();
var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));
return hmac;
}
});
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var WordArray = C_lib.WordArray;
var C_algo = C.algo;
var SHA1 = C_algo.SHA1;
var HMAC = C_algo.HMAC;
/**
* Password-Based Key Derivation Function 2 algorithm.
*/
var PBKDF2 = C_algo.PBKDF2 = Base.extend({
/**
* Configuration options.
*
* @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
* @property {Hasher} hasher The hasher to use. Default: SHA1
* @property {number} iterations The number of iterations to perform. Default: 1
*/
cfg: Base.extend({
keySize: 128/32,
hasher: SHA1,
iterations: 1
}),
/**
* Initializes a newly created key derivation function.
*
* @param {Object} cfg (Optional) The configuration options to use for the derivation.
*
* @example
*
* var kdf = CryptoJS.algo.PBKDF2.create();
* var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });
* var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });
*/
init: function (cfg) {
this.cfg = this.cfg.extend(cfg);
},
/**
* Computes the Password-Based Key Derivation Function 2.
*
* @param {WordArray|string} password The password.
* @param {WordArray|string} salt A salt.
*
* @return {WordArray} The derived key.
*
* @example
*
* var key = kdf.compute(password, salt);
*/
compute: function (password, salt) {
// Shortcut
var cfg = this.cfg;
// Init HMAC
var hmac = HMAC.create(cfg.hasher, password);
// Initial values
var derivedKey = WordArray.create();
var blockIndex = WordArray.create([0x00000001]);
// Shortcuts
var derivedKeyWords = derivedKey.words;
var blockIndexWords = blockIndex.words;
var keySize = cfg.keySize;
var iterations = cfg.iterations;
// Generate key
while (derivedKeyWords.length < keySize) {
var block = hmac.update(salt).finalize(blockIndex);
hmac.reset();
// Shortcuts
var blockWords = block.words;
var blockWordsLength = blockWords.length;
// Iterations
var intermediate = block;
for (var i = 1; i < iterations; i++) {
intermediate = hmac.finalize(intermediate);
hmac.reset();
// Shortcut
var intermediateWords = intermediate.words;
// XOR intermediate with block
for (var j = 0; j < blockWordsLength; j++) {
blockWords[j] ^= intermediateWords[j];
}
}
derivedKey.concat(block);
blockIndexWords[0]++;
}
derivedKey.sigBytes = keySize * 4;
return derivedKey;
}
});
/**
* Computes the Password-Based Key Derivation Function 2.
*
* @param {WordArray|string} password The password.
* @param {WordArray|string} salt A salt.
* @param {Object} cfg (Optional) The configuration options to use for this computation.
*
* @return {WordArray} The derived key.
*
* @static
*
* @example
*
* var key = CryptoJS.PBKDF2(password, salt);
* var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });
* var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });
*/
C.PBKDF2 = function (password, salt, cfg) {
return PBKDF2.create(cfg).compute(password, salt);
};
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var WordArray = C_lib.WordArray;
var C_algo = C.algo;
var MD5 = C_algo.MD5;
/**
* This key derivation function is meant to conform with EVP_BytesToKey.
* www.openssl.org/docs/crypto/EVP_BytesToKey.html
*/
var EvpKDF = C_algo.EvpKDF = Base.extend({
/**
* Configuration options.
*
* @property {number} keySize The key size in words to generate. Default: 4 (128 bits)
* @property {Hasher} hasher The hash algorithm to use. Default: MD5
* @property {number} iterations The number of iterations to perform. Default: 1
*/
cfg: Base.extend({
keySize: 128/32,
hasher: MD5,
iterations: 1
}),
/**
* Initializes a newly created key derivation function.
*
* @param {Object} cfg (Optional) The configuration options to use for the derivation.
*
* @example
*
* var kdf = CryptoJS.algo.EvpKDF.create();
* var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });
* var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });
*/
init: function (cfg) {
this.cfg = this.cfg.extend(cfg);
},
/**
* Derives a key from a password.
*
* @param {WordArray|string} password The password.
* @param {WordArray|string} salt A salt.
*
* @return {WordArray} The derived key.
*
* @example
*
* var key = kdf.compute(password, salt);
*/
compute: function (password, salt) {
var block;
// Shortcut
var cfg = this.cfg;
// Init hasher
var hasher = cfg.hasher.create();
// Initial values
var derivedKey = WordArray.create();
// Shortcuts
var derivedKeyWords = derivedKey.words;
var keySize = cfg.keySize;
var iterations = cfg.iterations;
// Generate key
while (derivedKeyWords.length < keySize) {
if (block) {
hasher.update(block);
}
block = hasher.update(password).finalize(salt);
hasher.reset();
// Iterations
for (var i = 1; i < iterations; i++) {
block = hasher.finalize(block);
hasher.reset();
}
derivedKey.concat(block);
}
derivedKey.sigBytes = keySize * 4;
return derivedKey;
}
});
/**
* Derives a key from a password.
*
* @param {WordArray|string} password The password.
* @param {WordArray|string} salt A salt.
* @param {Object} cfg (Optional) The configuration options to use for this computation.
*
* @return {WordArray} The derived key.
*
* @static
*
* @example
*
* var key = CryptoJS.EvpKDF(password, salt);
* var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });
* var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });
*/
C.EvpKDF = function (password, salt, cfg) {
return EvpKDF.create(cfg).compute(password, salt);
};
}());
/**
* Cipher core components.
*/
CryptoJS.lib.Cipher || (function (undefined) {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var Base = C_lib.Base;
var WordArray = C_lib.WordArray;
var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;
var C_enc = C.enc;
var Utf8 = C_enc.Utf8;
var Base64 = C_enc.Base64;
var C_algo = C.algo;
var EvpKDF = C_algo.EvpKDF;
/**
* Abstract base cipher template.
*
* @property {number} keySize This cipher's key size. Default: 4 (128 bits)
* @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)
* @property {number} _ENC_XFORM_MODE A constant representing encryption mode.
* @property {number} _DEC_XFORM_MODE A constant representing decryption mode.
*/
var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({
/**
* Configuration options.
*
* @property {WordArray} iv The IV to use for this operation.
*/
cfg: Base.extend(),
/**
* Creates this cipher in encryption mode.
*
* @param {WordArray} key The key.
* @param {Object} cfg (Optional) The configuration options to use for this operation.
*
* @return {Cipher} A cipher instance.
*
* @static
*
* @example
*
* var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });
*/
createEncryptor: function (key, cfg) {
return this.create(this._ENC_XFORM_MODE, key, cfg);
},
/**
* Creates this cipher in decryption mode.
*
* @param {WordArray} key The key.
* @param {Object} cfg (Optional) The configuration options to use for this operation.
*
* @return {Cipher} A cipher instance.
*
* @static
*
* @example
*
* var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });
*/
createDecryptor: function (key, cfg) {
return this.create(this._DEC_XFORM_MODE, key, cfg);
},
/**
* Initializes a newly created cipher.
*
* @param {number} xformMode Either the encryption or decryption transormation mode constant.
* @param {WordArray} key The key.
* @param {Object} cfg (Optional) The configuration options to use for this operation.
*
* @example
*
* var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });
*/
init: function (xformMode, key, cfg) {
// Apply config defaults
this.cfg = this.cfg.extend(cfg);
// Store transform mode and key
this._xformMode = xformMode;
this._key = key;
// Set initial values
this.reset();
},
/**
* Resets this cipher to its initial state.
*
* @example
*
* cipher.reset();
*/
reset: function () {
// Reset data buffer
BufferedBlockAlgorithm.reset.call(this);
// Perform concrete-cipher logic
this._doReset();
},
/**
* Adds data to be encrypted or decrypted.
*
* @param {WordArray|string} dataUpdate The data to encrypt or decrypt.
*
* @return {WordArray} The data after processing.
*
* @example
*
* var encrypted = cipher.process('data');
* var encrypted = cipher.process(wordArray);
*/
process: function (dataUpdate) {
// Append
this._append(dataUpdate);
// Process available blocks
return this._process();
},
/**
* Finalizes the encryption or decryption process.
* Note that the finalize operation is effectively a destructive, read-once operation.
*
* @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.
*
* @return {WordArray} The data after final processing.
*
* @example
*
* var encrypted = cipher.finalize();
* var encrypted = cipher.finalize('data');
* var encrypted = cipher.finalize(wordArray);
*/
finalize: function (dataUpdate) {
// Final data update
if (dataUpdate) {
this._append(dataUpdate);
}
// Perform concrete-cipher logic
var finalProcessedData = this._doFinalize();
return finalProcessedData;
},
keySize: 128/32,
ivSize: 128/32,
_ENC_XFORM_MODE: 1,
_DEC_XFORM_MODE: 2,
/**
* Creates shortcut functions to a cipher's object interface.
*
* @param {Cipher} cipher The cipher to create a helper for.
*
* @return {Object} An object with encrypt and decrypt shortcut functions.
*
* @static
*
* @example
*
* var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);
*/
_createHelper: (function () {
function selectCipherStrategy(key) {
if (typeof key == 'string') {
return PasswordBasedCipher;
} else {
return SerializableCipher;
}
}
return function (cipher) {
return {
encrypt: function (message, key, cfg) {
return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);
},
decrypt: function (ciphertext, key, cfg) {
return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);
}
};
};
}())
});
/**
* Abstract base stream cipher template.
*
* @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)
*/
var StreamCipher = C_lib.StreamCipher = Cipher.extend({
_doFinalize: function () {
// Process partial blocks
var finalProcessedBlocks = this._process(!!'flush');
return finalProcessedBlocks;
},
blockSize: 1
});
/**
* Mode namespace.
*/
var C_mode = C.mode = {};
/**
* Abstract base block cipher mode template.
*/
var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({
/**
* Creates this mode for encryption.
*
* @param {Cipher} cipher A block cipher instance.
* @param {Array} iv The IV words.
*
* @static
*
* @example
*
* var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);
*/
createEncryptor: function (cipher, iv) {
return this.Encryptor.create(cipher, iv);
},
/**
* Creates this mode for decryption.
*
* @param {Cipher} cipher A block cipher instance.
* @param {Array} iv The IV words.
*
* @static
*
* @example
*
* var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);
*/
createDecryptor: function (cipher, iv) {
return this.Decryptor.create(cipher, iv);
},
/**
* Initializes a newly created mode.
*
* @param {Cipher} cipher A block cipher instance.
* @param {Array} iv The IV words.
*
* @example
*
* var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);
*/
init: function (cipher, iv) {
this._cipher = cipher;
this._iv = iv;
}
});
/**
* Cipher Block Chaining mode.
*/
var CBC = C_mode.CBC = (function () {
/**
* Abstract base CBC mode.
*/
var CBC = BlockCipherMode.extend();
/**
* CBC encryptor.
*/
CBC.Encryptor = CBC.extend({
/**
* Processes the data block at offset.
*
* @param {Array} words The data words to operate on.
* @param {number} offset The offset where the block starts.
*
* @example
*
* mode.processBlock(data.words, offset);
*/
processBlock: function (words, offset) {
// Shortcuts
var cipher = this._cipher;
var blockSize = cipher.blockSize;
// XOR and encrypt
xorBlock.call(this, words, offset, blockSize);
cipher.encryptBlock(words, offset);
// Remember this block to use with next block
this._prevBlock = words.slice(offset, offset + blockSize);
}
});
/**
* CBC decryptor.
*/
CBC.Decryptor = CBC.extend({
/**
* Processes the data block at offset.
*
* @param {Array} words The data words to operate on.
* @param {number} offset The offset where the block starts.
*
* @example
*
* mode.processBlock(data.words, offset);
*/
processBlock: function (words, offset) {
// Shortcuts
var cipher = this._cipher;
var blockSize = cipher.blockSize;
// Remember this block to use with next block
var thisBlock = words.slice(offset, offset + blockSize);
// Decrypt and XOR
cipher.decryptBlock(words, offset);
xorBlock.call(this, words, offset, blockSize);
// This block becomes the previous block
this._prevBlock = thisBlock;
}
});
function xorBlock(words, offset, blockSize) {
var block;
// Shortcut
var iv = this._iv;
// Choose mixing block
if (iv) {
block = iv;
// Remove IV for subsequent blocks
this._iv = undefined;
} else {
block = this._prevBlock;
}
// XOR blocks
for (var i = 0; i < blockSize; i++) {
words[offset + i] ^= block[i];
}
}
return CBC;
}());
/**
* Padding namespace.
*/
var C_pad = C.pad = {};
/**
* PKCS #5/7 padding strategy.
*/
var Pkcs7 = C_pad.Pkcs7 = {
/**
* Pads data using the algorithm defined in PKCS #5/7.
*
* @param {WordArray} data The data to pad.
* @param {number} blockSize The multiple that the data should be padded to.
*
* @static
*
* @example
*
* CryptoJS.pad.Pkcs7.pad(wordArray, 4);
*/
pad: function (data, blockSize) {
// Shortcut
var blockSizeBytes = blockSize * 4;
// Count padding bytes
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
// Create padding word
var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;
// Create padding
var paddingWords = [];
for (var i = 0; i < nPaddingBytes; i += 4) {
paddingWords.push(paddingWord);
}
var padding = WordArray.create(paddingWords, nPaddingBytes);
// Add padding
data.concat(padding);
},
/**
* Unpads data that had been padded using the algorithm defined in PKCS #5/7.
*
* @param {WordArray} data The data to unpad.
*
* @static
*
* @example
*
* CryptoJS.pad.Pkcs7.unpad(wordArray);
*/
unpad: function (data) {
// Get number of padding bytes from last byte
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
// Remove padding
data.sigBytes -= nPaddingBytes;
}
};
/**
* Abstract base block cipher template.
*
* @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)
*/
var BlockCipher = C_lib.BlockCipher = Cipher.extend({
/**
* Configuration options.
*
* @property {Mode} mode The block mode to use. Default: CBC
* @property {Padding} padding The padding strategy to use. Default: Pkcs7
*/
cfg: Cipher.cfg.extend({
mode: CBC,
padding: Pkcs7
}),
reset: function () {
var modeCreator;
// Reset cipher
Cipher.reset.call(this);
// Shortcuts
var cfg = this.cfg;
var iv = cfg.iv;
var mode = cfg.mode;
// Reset block mode
if (this._xformMode == this._ENC_XFORM_MODE) {
modeCreator = mode.createEncryptor;
} else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
modeCreator = mode.createDecryptor;
// Keep at least one block in the buffer for unpadding
this._minBufferSize = 1;
}
if (this._mode && this._mode.__creator == modeCreator) {
this._mode.init(this, iv && iv.words);
} else {
this._mode = modeCreator.call(mode, this, iv && iv.words);
this._mode.__creator = modeCreator;
}
},
_doProcessBlock: function (words, offset) {
this._mode.processBlock(words, offset);
},
_doFinalize: function () {
var finalProcessedBlocks;
// Shortcut
var padding = this.cfg.padding;
// Finalize
if (this._xformMode == this._ENC_XFORM_MODE) {
// Pad data
padding.pad(this._data, this.blockSize);
// Process final blocks
finalProcessedBlocks = this._process(!!'flush');
} else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {
// Process final blocks
finalProcessedBlocks = this._process(!!'flush');
// Unpad data
padding.unpad(finalProcessedBlocks);
}
return finalProcessedBlocks;
},
blockSize: 128/32
});
/**
* A collection of cipher parameters.
*
* @property {WordArray} ciphertext The raw ciphertext.
* @property {WordArray} key The key to this ciphertext.
* @property {WordArray} iv The IV used in the ciphering operation.
* @property {WordArray} salt The salt used with a key derivation function.
* @property {Cipher} algorithm The cipher algorithm.
* @property {Mode} mode The block mode used in the ciphering operation.
* @property {Padding} padding The padding scheme used in the ciphering operation.
* @property {number} blockSize The block size of the cipher.
* @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.
*/
var CipherParams = C_lib.CipherParams = Base.extend({
/**
* Initializes a newly created cipher params object.
*
* @param {Object} cipherParams An object with any of the possible cipher parameters.
*
* @example
*
* var cipherParams = CryptoJS.lib.CipherParams.create({
* ciphertext: ciphertextWordArray,
* key: keyWordArray,
* iv: ivWordArray,
* salt: saltWordArray,
* algorithm: CryptoJS.algo.AES,
* mode: CryptoJS.mode.CBC,
* padding: CryptoJS.pad.PKCS7,
* blockSize: 4,
* formatter: CryptoJS.format.OpenSSL
* });
*/
init: function (cipherParams) {
this.mixIn(cipherParams);
},
/**
* Converts this cipher params object to a string.
*
* @param {Format} formatter (Optional) The formatting strategy to use.
*
* @return {string} The stringified cipher params.
*
* @throws Error If neither the formatter nor the default formatter is set.
*
* @example
*
* var string = cipherParams + '';
* var string = cipherParams.toString();
* var string = cipherParams.toString(CryptoJS.format.OpenSSL);
*/
toString: function (formatter) {
return (formatter || this.formatter).stringify(this);
}
});
/**
* Format namespace.
*/
var C_format = C.format = {};
/**
* OpenSSL formatting strategy.
*/
var OpenSSLFormatter = C_format.OpenSSL = {
/**
* Converts a cipher params object to an OpenSSL-compatible string.
*
* @param {CipherParams} cipherParams The cipher params object.
*
* @return {string} The OpenSSL-compatible string.
*
* @static
*
* @example
*
* var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);
*/
stringify: function (cipherParams) {
var wordArray;
// Shortcuts
var ciphertext = cipherParams.ciphertext;
var salt = cipherParams.salt;
// Format
if (salt) {
wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);
} else {
wordArray = ciphertext;
}
return wordArray.toString(Base64);
},
/**
* Converts an OpenSSL-compatible string to a cipher params object.
*
* @param {string} openSSLStr The OpenSSL-compatible string.
*
* @return {CipherParams} The cipher params object.
*
* @static
*
* @example
*
* var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);
*/
parse: function (openSSLStr) {
var salt;
// Parse base64
var ciphertext = Base64.parse(openSSLStr);
// Shortcut
var ciphertextWords = ciphertext.words;
// Test for salt
if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {
// Extract salt
salt = WordArray.create(ciphertextWords.slice(2, 4));
// Remove salt from ciphertext
ciphertextWords.splice(0, 4);
ciphertext.sigBytes -= 16;
}
return CipherParams.create({ ciphertext: ciphertext, salt: salt });
}
};
/**
* A cipher wrapper that returns ciphertext as a serializable cipher params object.
*/
var SerializableCipher = C_lib.SerializableCipher = Base.extend({
/**
* Configuration options.
*
* @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL
*/
cfg: Base.extend({
format: OpenSSLFormatter
}),
/**
* Encrypts a message.
*
* @param {Cipher} cipher The cipher algorithm to use.
* @param {WordArray|string} message The message to encrypt.
* @param {WordArray} key The key.
* @param {Object} cfg (Optional) The configuration options to use for this operation.
*
* @return {CipherParams} A cipher params object.
*
* @static
*
* @example
*
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });
* var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });
*/
encrypt: function (cipher, message, key, cfg) {
// Apply config defaults
cfg = this.cfg.extend(cfg);
// Encrypt
var encryptor = cipher.createEncryptor(key, cfg);
var ciphertext = encryptor.finalize(message);
// Shortcut
var cipherCfg = encryptor.cfg;
// Create and return serializable cipher params
return CipherParams.create({
ciphertext: ciphertext,
key: key,
iv: cipherCfg.iv,
algorithm: cipher,
mode: cipherCfg.mode,
padding: cipherCfg.padding,
blockSize: cipher.blockSize,
formatter: cfg.format
});
},
/**
* Decrypts serialized ciphertext.
*
* @param {Cipher} cipher The cipher algorithm to use.
* @param {CipherParams|string} ciphertext The ciphertext to decrypt.
* @param {WordArray} key The key.
* @param {Object} cfg (Optional) The configuration options to use for this operation.
*
* @return {WordArray} The plaintext.
*
* @static
*
* @example
*
* var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });
* var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });
*/
decrypt: function (cipher, ciphertext, key, cfg) {
// Apply config defaults
cfg = this.cfg.extend(cfg);
// Convert string to CipherParams
ciphertext = this._parse(ciphertext, cfg.format);
// Decrypt
var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);
return plaintext;
},
/**
* Converts serialized ciphertext to CipherParams,
* else assumed CipherParams already and returns ciphertext unchanged.
*
* @param {CipherParams|string} ciphertext The ciphertext.
* @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.
*
* @return {CipherParams} The unserialized ciphertext.
*
* @static
*
* @example
*
* var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);
*/
_parse: function (ciphertext, format) {
if (typeof ciphertext == 'string') {
return format.parse(ciphertext, this);
} else {
return ciphertext;
}
}
});
/**
* Key derivation function namespace.
*/
var C_kdf = C.kdf = {};
/**
* OpenSSL key derivation function.
*/
var OpenSSLKdf = C_kdf.OpenSSL = {
/**
* Derives a key and IV from a password.
*
* @param {string} password The password to derive from.
* @param {number} keySize The size in words of the key to generate.
* @param {number} ivSize The size in words of the IV to generate.
* @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.
*
* @return {CipherParams} A cipher params object with the key, IV, and salt.
*
* @static
*
* @example
*
* var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);
* var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');
*/
execute: function (password, keySize, ivSize, salt) {
// Generate random salt
if (!salt) {
salt = WordArray.random(64/8);
}
// Derive key and IV
var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
// Separate key and IV
var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);
key.sigBytes = keySize * 4;
// Return params
return CipherParams.create({ key: key, iv: iv, salt: salt });
}
};
/**
* A serializable cipher wrapper that derives the key from a password,
* and returns ciphertext as a serializable cipher params object.
*/
var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({
/**
* Configuration options.
*
* @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL
*/
cfg: SerializableCipher.cfg.extend({
kdf: OpenSSLKdf
}),
/**
* Encrypts a message using a password.
*
* @param {Cipher} cipher The cipher algorithm to use.
* @param {WordArray|string} message The message to encrypt.
* @param {string} password The password.
* @param {Object} cfg (Optional) The configuration options to use for this operation.
*
* @return {CipherParams} A cipher params object.
*
* @static
*
* @example
*
* var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');
* var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });
*/
encrypt: function (cipher, message, password, cfg) {
// Apply config defaults
cfg = this.cfg.extend(cfg);
// Derive key and other params
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);
// Add IV to config
cfg.iv = derivedParams.iv;
// Encrypt
var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);
// Mix in derived params
ciphertext.mixIn(derivedParams);
return ciphertext;
},
/**
* Decrypts serialized ciphertext using a password.
*
* @param {Cipher} cipher The cipher algorithm to use.
* @param {CipherParams|string} ciphertext The ciphertext to decrypt.
* @param {string} password The password.
* @param {Object} cfg (Optional) The configuration options to use for this operation.
*
* @return {WordArray} The plaintext.
*
* @static
*
* @example
*
* var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });
* var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });
*/
decrypt: function (cipher, ciphertext, password, cfg) {
// Apply config defaults
cfg = this.cfg.extend(cfg);
// Convert string to CipherParams
ciphertext = this._parse(ciphertext, cfg.format);
// Derive key and other params
var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);
// Add IV to config
cfg.iv = derivedParams.iv;
// Decrypt
var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);
return plaintext;
}
});
}());
/**
* Cipher Feedback block mode.
*/
CryptoJS.mode.CFB = (function () {
var CFB = CryptoJS.lib.BlockCipherMode.extend();
CFB.Encryptor = CFB.extend({
processBlock: function (words, offset) {
// Shortcuts
var cipher = this._cipher;
var blockSize = cipher.blockSize;
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
// Remember this block to use with next block
this._prevBlock = words.slice(offset, offset + blockSize);
}
});
CFB.Decryptor = CFB.extend({
processBlock: function (words, offset) {
// Shortcuts
var cipher = this._cipher;
var blockSize = cipher.blockSize;
// Remember this block to use with next block
var thisBlock = words.slice(offset, offset + blockSize);
generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);
// This block becomes the previous block
this._prevBlock = thisBlock;
}
});
function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {
var keystream;
// Shortcut
var iv = this._iv;
// Generate keystream
if (iv) {
keystream = iv.slice(0);
// Remove IV for subsequent blocks
this._iv = undefined;
} else {
keystream = this._prevBlock;
}
cipher.encryptBlock(keystream, 0);
// Encrypt
for (var i = 0; i < blockSize; i++) {
words[offset + i] ^= keystream[i];
}
}
return CFB;
}());
/**
* Counter block mode.
*/
CryptoJS.mode.CTR = (function () {
var CTR = CryptoJS.lib.BlockCipherMode.extend();
var Encryptor = CTR.Encryptor = CTR.extend({
processBlock: function (words, offset) {
// Shortcuts
var cipher = this._cipher
var blockSize = cipher.blockSize;
var iv = this._iv;
var counter = this._counter;
// Generate keystream
if (iv) {
counter = this._counter = iv.slice(0);
// Remove IV for subsequent blocks
this._iv = undefined;
}
var keystream = counter.slice(0);
cipher.encryptBlock(keystream, 0);
// Increment counter
counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0
// Encrypt
for (var i = 0; i < blockSize; i++) {
words[offset + i] ^= keystream[i];
}
}
});
CTR.Decryptor = Encryptor;
return CTR;
}());
/** @preserve
* Counter block mode compatible with Dr Brian Gladman fileenc.c
* derived from CryptoJS.mode.CTR
* Jan Hruby jhruby.web@gmail.com
*/
CryptoJS.mode.CTRGladman = (function () {
var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();
function incWord(word)
{
if (((word >> 24) & 0xff) === 0xff) { //overflow
var b1 = (word >> 16)&0xff;
var b2 = (word >> 8)&0xff;
var b3 = word & 0xff;
if (b1 === 0xff) // overflow b1
{
b1 = 0;
if (b2 === 0xff)
{
b2 = 0;
if (b3 === 0xff)
{
b3 = 0;
}
else
{
++b3;
}
}
else
{
++b2;
}
}
else
{
++b1;
}
word = 0;
word += (b1 << 16);
word += (b2 << 8);
word += b3;
}
else
{
word += (0x01 << 24);
}
return word;
}
function incCounter(counter)
{
if ((counter[0] = incWord(counter[0])) === 0)
{
// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8
counter[1] = incWord(counter[1]);
}
return counter;
}
var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({
processBlock: function (words, offset) {
// Shortcuts
var cipher = this._cipher
var blockSize = cipher.blockSize;
var iv = this._iv;
var counter = this._counter;
// Generate keystream
if (iv) {
counter = this._counter = iv.slice(0);
// Remove IV for subsequent blocks
this._iv = undefined;
}
incCounter(counter);
var keystream = counter.slice(0);
cipher.encryptBlock(keystream, 0);
// Encrypt
for (var i = 0; i < blockSize; i++) {
words[offset + i] ^= keystream[i];
}
}
});
CTRGladman.Decryptor = Encryptor;
return CTRGladman;
}());
/**
* Output Feedback block mode.
*/
CryptoJS.mode.OFB = (function () {
var OFB = CryptoJS.lib.BlockCipherMode.extend();
var Encryptor = OFB.Encryptor = OFB.extend({
processBlock: function (words, offset) {
// Shortcuts
var cipher = this._cipher
var blockSize = cipher.blockSize;
var iv = this._iv;
var keystream = this._keystream;
// Generate keystream
if (iv) {
keystream = this._keystream = iv.slice(0);
// Remove IV for subsequent blocks
this._iv = undefined;
}
cipher.encryptBlock(keystream, 0);
// Encrypt
for (var i = 0; i < blockSize; i++) {
words[offset + i] ^= keystream[i];
}
}
});
OFB.Decryptor = Encryptor;
return OFB;
}());
/**
* Electronic Codebook block mode.
*/
CryptoJS.mode.ECB = (function () {
var ECB = CryptoJS.lib.BlockCipherMode.extend();
ECB.Encryptor = ECB.extend({
processBlock: function (words, offset) {
this._cipher.encryptBlock(words, offset);
}
});
ECB.Decryptor = ECB.extend({
processBlock: function (words, offset) {
this._cipher.decryptBlock(words, offset);
}
});
return ECB;
}());
/**
* ANSI X.923 padding strategy.
*/
CryptoJS.pad.AnsiX923 = {
pad: function (data, blockSize) {
// Shortcuts
var dataSigBytes = data.sigBytes;
var blockSizeBytes = blockSize * 4;
// Count padding bytes
var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;
// Compute last byte position
var lastBytePos = dataSigBytes + nPaddingBytes - 1;
// Pad
data.clamp();
data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);
data.sigBytes += nPaddingBytes;
},
unpad: function (data) {
// Get number of padding bytes from last byte
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
// Remove padding
data.sigBytes -= nPaddingBytes;
}
};
/**
* ISO 10126 padding strategy.
*/
CryptoJS.pad.Iso10126 = {
pad: function (data, blockSize) {
// Shortcut
var blockSizeBytes = blockSize * 4;
// Count padding bytes
var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;
// Pad
data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).
concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));
},
unpad: function (data) {
// Get number of padding bytes from last byte
var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;
// Remove padding
data.sigBytes -= nPaddingBytes;
}
};
/**
* ISO/IEC 9797-1 Padding Method 2.
*/
CryptoJS.pad.Iso97971 = {
pad: function (data, blockSize) {
// Add 0x80 byte
data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));
// Zero pad the rest
CryptoJS.pad.ZeroPadding.pad(data, blockSize);
},
unpad: function (data) {
// Remove zero padding
CryptoJS.pad.ZeroPadding.unpad(data);
// Remove one more byte -- the 0x80 byte
data.sigBytes--;
}
};
/**
* Zero padding strategy.
*/
CryptoJS.pad.ZeroPadding = {
pad: function (data, blockSize) {
// Shortcut
var blockSizeBytes = blockSize * 4;
// Pad
data.clamp();
data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);
},
unpad: function (data) {
// Shortcut
var dataWords = data.words;
// Unpad
var i = data.sigBytes - 1;
for (var i = data.sigBytes - 1; i >= 0; i--) {
if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {
data.sigBytes = i + 1;
break;
}
}
}
};
/**
* A noop padding strategy.
*/
CryptoJS.pad.NoPadding = {
pad: function () {
},
unpad: function () {
}
};
(function (undefined) {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var CipherParams = C_lib.CipherParams;
var C_enc = C.enc;
var Hex = C_enc.Hex;
var C_format = C.format;
var HexFormatter = C_format.Hex = {
/**
* Converts the ciphertext of a cipher params object to a hexadecimally encoded string.
*
* @param {CipherParams} cipherParams The cipher params object.
*
* @return {string} The hexadecimally encoded string.
*
* @static
*
* @example
*
* var hexString = CryptoJS.format.Hex.stringify(cipherParams);
*/
stringify: function (cipherParams) {
return cipherParams.ciphertext.toString(Hex);
},
/**
* Converts a hexadecimally encoded ciphertext string to a cipher params object.
*
* @param {string} input The hexadecimally encoded string.
*
* @return {CipherParams} The cipher params object.
*
* @static
*
* @example
*
* var cipherParams = CryptoJS.format.Hex.parse(hexString);
*/
parse: function (input) {
var ciphertext = Hex.parse(input);
return CipherParams.create({ ciphertext: ciphertext });
}
};
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var BlockCipher = C_lib.BlockCipher;
var C_algo = C.algo;
// Lookup tables
var SBOX = [];
var INV_SBOX = [];
var SUB_MIX_0 = [];
var SUB_MIX_1 = [];
var SUB_MIX_2 = [];
var SUB_MIX_3 = [];
var INV_SUB_MIX_0 = [];
var INV_SUB_MIX_1 = [];
var INV_SUB_MIX_2 = [];
var INV_SUB_MIX_3 = [];
// Compute lookup tables
(function () {
// Compute double table
var d = [];
for (var i = 0; i < 256; i++) {
if (i < 128) {
d[i] = i << 1;
} else {
d[i] = (i << 1) ^ 0x11b;
}
}
// Walk GF(2^8)
var x = 0;
var xi = 0;
for (var i = 0; i < 256; i++) {
// Compute sbox
var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);
sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;
SBOX[x] = sx;
INV_SBOX[sx] = x;
// Compute multiplication
var x2 = d[x];
var x4 = d[x2];
var x8 = d[x4];
// Compute sub bytes, mix columns tables
var t = (d[sx] * 0x101) ^ (sx * 0x1010100);
SUB_MIX_0[x] = (t << 24) | (t >>> 8);
SUB_MIX_1[x] = (t << 16) | (t >>> 16);
SUB_MIX_2[x] = (t << 8) | (t >>> 24);
SUB_MIX_3[x] = t;
// Compute inv sub bytes, inv mix columns tables
var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);
INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);
INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);
INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);
INV_SUB_MIX_3[sx] = t;
// Compute next counter
if (!x) {
x = xi = 1;
} else {
x = x2 ^ d[d[d[x8 ^ x2]]];
xi ^= d[d[xi]];
}
}
}());
// Precomputed Rcon lookup
var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
/**
* AES block cipher algorithm.
*/
var AES = C_algo.AES = BlockCipher.extend({
_doReset: function () {
var t;
// Skip reset of nRounds has been set before and key did not change
if (this._nRounds && this._keyPriorReset === this._key) {
return;
}
// Shortcuts
var key = this._keyPriorReset = this._key;
var keyWords = key.words;
var keySize = key.sigBytes / 4;
// Compute number of rounds
var nRounds = this._nRounds = keySize + 6;
// Compute number of key schedule rows
var ksRows = (nRounds + 1) * 4;
// Compute key schedule
var keySchedule = this._keySchedule = [];
for (var ksRow = 0; ksRow < ksRows; ksRow++) {
if (ksRow < keySize) {
keySchedule[ksRow] = keyWords[ksRow];
} else {
t = keySchedule[ksRow - 1];
if (!(ksRow % keySize)) {
// Rot word
t = (t << 8) | (t >>> 24);
// Sub word
t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
// Mix Rcon
t ^= RCON[(ksRow / keySize) | 0] << 24;
} else if (keySize > 6 && ksRow % keySize == 4) {
// Sub word
t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];
}
keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;
}
}
// Compute inv key schedule
var invKeySchedule = this._invKeySchedule = [];
for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {
var ksRow = ksRows - invKsRow;
if (invKsRow % 4) {
var t = keySchedule[ksRow];
} else {
var t = keySchedule[ksRow - 4];
}
if (invKsRow < 4 || ksRow <= 4) {
invKeySchedule[invKsRow] = t;
} else {
invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^
INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];
}
}
},
encryptBlock: function (M, offset) {
this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);
},
decryptBlock: function (M, offset) {
// Swap 2nd and 4th rows
var t = M[offset + 1];
M[offset + 1] = M[offset + 3];
M[offset + 3] = t;
this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);
// Inv swap 2nd and 4th rows
var t = M[offset + 1];
M[offset + 1] = M[offset + 3];
M[offset + 3] = t;
},
_doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {
// Shortcut
var nRounds = this._nRounds;
// Get input, add round key
var s0 = M[offset] ^ keySchedule[0];
var s1 = M[offset + 1] ^ keySchedule[1];
var s2 = M[offset + 2] ^ keySchedule[2];
var s3 = M[offset + 3] ^ keySchedule[3];
// Key schedule row counter
var ksRow = 4;
// Rounds
for (var round = 1; round < nRounds; round++) {
// Shift rows, sub bytes, mix columns, add round key
var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];
var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];
var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];
var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];
// Update state
s0 = t0;
s1 = t1;
s2 = t2;
s3 = t3;
}
// Shift rows, sub bytes, add round key
var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];
var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];
var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];
var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];
// Set output
M[offset] = t0;
M[offset + 1] = t1;
M[offset + 2] = t2;
M[offset + 3] = t3;
},
keySize: 256/32
});
/**
* Shortcut functions to the cipher's object interface.
*
* @example
*
* var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);
* var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);
*/
C.AES = BlockCipher._createHelper(AES);
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var WordArray = C_lib.WordArray;
var BlockCipher = C_lib.BlockCipher;
var C_algo = C.algo;
// Permuted Choice 1 constants
var PC1 = [
57, 49, 41, 33, 25, 17, 9, 1,
58, 50, 42, 34, 26, 18, 10, 2,
59, 51, 43, 35, 27, 19, 11, 3,
60, 52, 44, 36, 63, 55, 47, 39,
31, 23, 15, 7, 62, 54, 46, 38,
30, 22, 14, 6, 61, 53, 45, 37,
29, 21, 13, 5, 28, 20, 12, 4
];
// Permuted Choice 2 constants
var PC2 = [
14, 17, 11, 24, 1, 5,
3, 28, 15, 6, 21, 10,
23, 19, 12, 4, 26, 8,
16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55,
30, 40, 51, 45, 33, 48,
44, 49, 39, 56, 34, 53,
46, 42, 50, 36, 29, 32
];
// Cumulative bit shift constants
var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];
// SBOXes and round permutation constants
var SBOX_P = [
{
0x0: 0x808200,
0x10000000: 0x8000,
0x20000000: 0x808002,
0x30000000: 0x2,
0x40000000: 0x200,
0x50000000: 0x808202,
0x60000000: 0x800202,
0x70000000: 0x800000,
0x80000000: 0x202,
0x90000000: 0x800200,
0xa0000000: 0x8200,
0xb0000000: 0x808000,
0xc0000000: 0x8002,
0xd0000000: 0x800002,
0xe0000000: 0x0,
0xf0000000: 0x8202,
0x8000000: 0x0,
0x18000000: 0x808202,
0x28000000: 0x8202,
0x38000000: 0x8000,
0x48000000: 0x808200,
0x58000000: 0x200,
0x68000000: 0x808002,
0x78000000: 0x2,
0x88000000: 0x800200,
0x98000000: 0x8200,
0xa8000000: 0x808000,
0xb8000000: 0x800202,
0xc8000000: 0x800002,
0xd8000000: 0x8002,
0xe8000000: 0x202,
0xf8000000: 0x800000,
0x1: 0x8000,
0x10000001: 0x2,
0x20000001: 0x808200,
0x30000001: 0x800000,
0x40000001: 0x808002,
0x50000001: 0x8200,
0x60000001: 0x200,
0x70000001: 0x800202,
0x80000001: 0x808202,
0x90000001: 0x808000,
0xa0000001: 0x800002,
0xb0000001: 0x8202,
0xc0000001: 0x202,
0xd0000001: 0x800200,
0xe0000001: 0x8002,
0xf0000001: 0x0,
0x8000001: 0x808202,
0x18000001: 0x808000,
0x28000001: 0x800000,
0x38000001: 0x200,
0x48000001: 0x8000,
0x58000001: 0x800002,
0x68000001: 0x2,
0x78000001: 0x8202,
0x88000001: 0x8002,
0x98000001: 0x800202,
0xa8000001: 0x202,
0xb8000001: 0x808200,
0xc8000001: 0x800200,
0xd8000001: 0x0,
0xe8000001: 0x8200,
0xf8000001: 0x808002
},
{
0x0: 0x40084010,
0x1000000: 0x4000,
0x2000000: 0x80000,
0x3000000: 0x40080010,
0x4000000: 0x40000010,
0x5000000: 0x40084000,
0x6000000: 0x40004000,
0x7000000: 0x10,
0x8000000: 0x84000,
0x9000000: 0x40004010,
0xa000000: 0x40000000,
0xb000000: 0x84010,
0xc000000: 0x80010,
0xd000000: 0x0,
0xe000000: 0x4010,
0xf000000: 0x40080000,
0x800000: 0x40004000,
0x1800000: 0x84010,
0x2800000: 0x10,
0x3800000: 0x40004010,
0x4800000: 0x40084010,
0x5800000: 0x40000000,
0x6800000: 0x80000,
0x7800000: 0x40080010,
0x8800000: 0x80010,
0x9800000: 0x0,
0xa800000: 0x4000,
0xb800000: 0x40080000,
0xc800000: 0x40000010,
0xd800000: 0x84000,
0xe800000: 0x40084000,
0xf800000: 0x4010,
0x10000000: 0x0,
0x11000000: 0x40080010,
0x12000000: 0x40004010,
0x13000000: 0x40084000,
0x14000000: 0x40080000,
0x15000000: 0x10,
0x16000000: 0x84010,
0x17000000: 0x4000,
0x18000000: 0x4010,
0x19000000: 0x80000,
0x1a000000: 0x80010,
0x1b000000: 0x40000010,
0x1c000000: 0x84000,
0x1d000000: 0x40004000,
0x1e000000: 0x40000000,
0x1f000000: 0x40084010,
0x10800000: 0x84010,
0x11800000: 0x80000,
0x12800000: 0x40080000,
0x13800000: 0x4000,
0x14800000: 0x40004000,
0x15800000: 0x40084010,
0x16800000: 0x10,
0x17800000: 0x40000000,
0x18800000: 0x40084000,
0x19800000: 0x40000010,
0x1a800000: 0x40004010,
0x1b800000: 0x80010,
0x1c800000: 0x0,
0x1d800000: 0x4010,
0x1e800000: 0x40080010,
0x1f800000: 0x84000
},
{
0x0: 0x104,
0x100000: 0x0,
0x200000: 0x4000100,
0x300000: 0x10104,
0x400000: 0x10004,
0x500000: 0x4000004,
0x600000: 0x4010104,
0x700000: 0x4010000,
0x800000: 0x4000000,
0x900000: 0x4010100,
0xa00000: 0x10100,
0xb00000: 0x4010004,
0xc00000: 0x4000104,
0xd00000: 0x10000,
0xe00000: 0x4,
0xf00000: 0x100,
0x80000: 0x4010100,
0x180000: 0x4010004,
0x280000: 0x0,
0x380000: 0x4000100,
0x480000: 0x4000004,
0x580000: 0x10000,
0x680000: 0x10004,
0x780000: 0x104,
0x880000: 0x4,
0x980000: 0x100,
0xa80000: 0x4010000,
0xb80000: 0x10104,
0xc80000: 0x10100,
0xd80000: 0x4000104,
0xe80000: 0x4010104,
0xf80000: 0x4000000,
0x1000000: 0x4010100,
0x1100000: 0x10004,
0x1200000: 0x10000,
0x1300000: 0x4000100,
0x1400000: 0x100,
0x1500000: 0x4010104,
0x1600000: 0x4000004,
0x1700000: 0x0,
0x1800000: 0x4000104,
0x1900000: 0x4000000,
0x1a00000: 0x4,
0x1b00000: 0x10100,
0x1c00000: 0x4010000,
0x1d00000: 0x104,
0x1e00000: 0x10104,
0x1f00000: 0x4010004,
0x1080000: 0x4000000,
0x1180000: 0x104,
0x1280000: 0x4010100,
0x1380000: 0x0,
0x1480000: 0x10004,
0x1580000: 0x4000100,
0x1680000: 0x100,
0x1780000: 0x4010004,
0x1880000: 0x10000,
0x1980000: 0x4010104,
0x1a80000: 0x10104,
0x1b80000: 0x4000004,
0x1c80000: 0x4000104,
0x1d80000: 0x4010000,
0x1e80000: 0x4,
0x1f80000: 0x10100
},
{
0x0: 0x80401000,
0x10000: 0x80001040,
0x20000: 0x401040,
0x30000: 0x80400000,
0x40000: 0x0,
0x50000: 0x401000,
0x60000: 0x80000040,
0x70000: 0x400040,
0x80000: 0x80000000,
0x90000: 0x400000,
0xa0000: 0x40,
0xb0000: 0x80001000,
0xc0000: 0x80400040,
0xd0000: 0x1040,
0xe0000: 0x1000,
0xf0000: 0x80401040,
0x8000: 0x80001040,
0x18000: 0x40,
0x28000: 0x80400040,
0x38000: 0x80001000,
0x48000: 0x401000,
0x58000: 0x80401040,
0x68000: 0x0,
0x78000: 0x80400000,
0x88000: 0x1000,
0x98000: 0x80401000,
0xa8000: 0x400000,
0xb8000: 0x1040,
0xc8000: 0x80000000,
0xd8000: 0x400040,
0xe8000: 0x401040,
0xf8000: 0x80000040,
0x100000: 0x400040,
0x110000: 0x401000,
0x120000: 0x80000040,
0x130000: 0x0,
0x140000: 0x1040,
0x150000: 0x80400040,
0x160000: 0x80401000,
0x170000: 0x80001040,
0x180000: 0x80401040,
0x190000: 0x80000000,
0x1a0000: 0x80400000,
0x1b0000: 0x401040,
0x1c0000: 0x80001000,
0x1d0000: 0x400000,
0x1e0000: 0x40,
0x1f0000: 0x1000,
0x108000: 0x80400000,
0x118000: 0x80401040,
0x128000: 0x0,
0x138000: 0x401000,
0x148000: 0x400040,
0x158000: 0x80000000,
0x168000: 0x80001040,
0x178000: 0x40,
0x188000: 0x80000040,
0x198000: 0x1000,
0x1a8000: 0x80001000,
0x1b8000: 0x80400040,
0x1c8000: 0x1040,
0x1d8000: 0x80401000,
0x1e8000: 0x400000,
0x1f8000: 0x401040
},
{
0x0: 0x80,
0x1000: 0x1040000,
0x2000: 0x40000,
0x3000: 0x20000000,
0x4000: 0x20040080,
0x5000: 0x1000080,
0x6000: 0x21000080,
0x7000: 0x40080,
0x8000: 0x1000000,
0x9000: 0x20040000,
0xa000: 0x20000080,
0xb000: 0x21040080,
0xc000: 0x21040000,
0xd000: 0x0,
0xe000: 0x1040080,
0xf000: 0x21000000,
0x800: 0x1040080,
0x1800: 0x21000080,
0x2800: 0x80,
0x3800: 0x1040000,
0x4800: 0x40000,
0x5800: 0x20040080,
0x6800: 0x21040000,
0x7800: 0x20000000,
0x8800: 0x20040000,
0x9800: 0x0,
0xa800: 0x21040080,
0xb800: 0x1000080,
0xc800: 0x20000080,
0xd800: 0x21000000,
0xe800: 0x1000000,
0xf800: 0x40080,
0x10000: 0x40000,
0x11000: 0x80,
0x12000: 0x20000000,
0x13000: 0x21000080,
0x14000: 0x1000080,
0x15000: 0x21040000,
0x16000: 0x20040080,
0x17000: 0x1000000,
0x18000: 0x21040080,
0x19000: 0x21000000,
0x1a000: 0x1040000,
0x1b000: 0x20040000,
0x1c000: 0x40080,
0x1d000: 0x20000080,
0x1e000: 0x0,
0x1f000: 0x1040080,
0x10800: 0x21000080,
0x11800: 0x1000000,
0x12800: 0x1040000,
0x13800: 0x20040080,
0x14800: 0x20000000,
0x15800: 0x1040080,
0x16800: 0x80,
0x17800: 0x21040000,
0x18800: 0x40080,
0x19800: 0x21040080,
0x1a800: 0x0,
0x1b800: 0x21000000,
0x1c800: 0x1000080,
0x1d800: 0x40000,
0x1e800: 0x20040000,
0x1f800: 0x20000080
},
{
0x0: 0x10000008,
0x100: 0x2000,
0x200: 0x10200000,
0x300: 0x10202008,
0x400: 0x10002000,
0x500: 0x200000,
0x600: 0x200008,
0x700: 0x10000000,
0x800: 0x0,
0x900: 0x10002008,
0xa00: 0x202000,
0xb00: 0x8,
0xc00: 0x10200008,
0xd00: 0x202008,
0xe00: 0x2008,
0xf00: 0x10202000,
0x80: 0x10200000,
0x180: 0x10202008,
0x280: 0x8,
0x380: 0x200000,
0x480: 0x202008,
0x580: 0x10000008,
0x680: 0x10002000,
0x780: 0x2008,
0x880: 0x200008,
0x980: 0x2000,
0xa80: 0x10002008,
0xb80: 0x10200008,
0xc80: 0x0,
0xd80: 0x10202000,
0xe80: 0x202000,
0xf80: 0x10000000,
0x1000: 0x10002000,
0x1100: 0x10200008,
0x1200: 0x10202008,
0x1300: 0x2008,
0x1400: 0x200000,
0x1500: 0x10000000,
0x1600: 0x10000008,
0x1700: 0x202000,
0x1800: 0x202008,
0x1900: 0x0,
0x1a00: 0x8,
0x1b00: 0x10200000,
0x1c00: 0x2000,
0x1d00: 0x10002008,
0x1e00: 0x10202000,
0x1f00: 0x200008,
0x1080: 0x8,
0x1180: 0x202000,
0x1280: 0x200000,
0x1380: 0x10000008,
0x1480: 0x10002000,
0x1580: 0x2008,
0x1680: 0x10202008,
0x1780: 0x10200000,
0x1880: 0x10202000,
0x1980: 0x10200008,
0x1a80: 0x2000,
0x1b80: 0x202008,
0x1c80: 0x200008,
0x1d80: 0x0,
0x1e80: 0x10000000,
0x1f80: 0x10002008
},
{
0x0: 0x100000,
0x10: 0x2000401,
0x20: 0x400,
0x30: 0x100401,
0x40: 0x2100401,
0x50: 0x0,
0x60: 0x1,
0x70: 0x2100001,
0x80: 0x2000400,
0x90: 0x100001,
0xa0: 0x2000001,
0xb0: 0x2100400,
0xc0: 0x2100000,
0xd0: 0x401,
0xe0: 0x100400,
0xf0: 0x2000000,
0x8: 0x2100001,
0x18: 0x0,
0x28: 0x2000401,
0x38: 0x2100400,
0x48: 0x100000,
0x58: 0x2000001,
0x68: 0x2000000,
0x78: 0x401,
0x88: 0x100401,
0x98: 0x2000400,
0xa8: 0x2100000,
0xb8: 0x100001,
0xc8: 0x400,
0xd8: 0x2100401,
0xe8: 0x1,
0xf8: 0x100400,
0x100: 0x2000000,
0x110: 0x100000,
0x120: 0x2000401,
0x130: 0x2100001,
0x140: 0x100001,
0x150: 0x2000400,
0x160: 0x2100400,
0x170: 0x100401,
0x180: 0x401,
0x190: 0x2100401,
0x1a0: 0x100400,
0x1b0: 0x1,
0x1c0: 0x0,
0x1d0: 0x2100000,
0x1e0: 0x2000001,
0x1f0: 0x400,
0x108: 0x100400,
0x118: 0x2000401,
0x128: 0x2100001,
0x138: 0x1,
0x148: 0x2000000,
0x158: 0x100000,
0x168: 0x401,
0x178: 0x2100400,
0x188: 0x2000001,
0x198: 0x2100000,
0x1a8: 0x0,
0x1b8: 0x2100401,
0x1c8: 0x100401,
0x1d8: 0x400,
0x1e8: 0x2000400,
0x1f8: 0x100001
},
{
0x0: 0x8000820,
0x1: 0x20000,
0x2: 0x8000000,
0x3: 0x20,
0x4: 0x20020,
0x5: 0x8020820,
0x6: 0x8020800,
0x7: 0x800,
0x8: 0x8020000,
0x9: 0x8000800,
0xa: 0x20800,
0xb: 0x8020020,
0xc: 0x820,
0xd: 0x0,
0xe: 0x8000020,
0xf: 0x20820,
0x80000000: 0x800,
0x80000001: 0x8020820,
0x80000002: 0x8000820,
0x80000003: 0x8000000,
0x80000004: 0x8020000,
0x80000005: 0x20800,
0x80000006: 0x20820,
0x80000007: 0x20,
0x80000008: 0x8000020,
0x80000009: 0x820,
0x8000000a: 0x20020,
0x8000000b: 0x8020800,
0x8000000c: 0x0,
0x8000000d: 0x8020020,
0x8000000e: 0x8000800,
0x8000000f: 0x20000,
0x10: 0x20820,
0x11: 0x8020800,
0x12: 0x20,
0x13: 0x800,
0x14: 0x8000800,
0x15: 0x8000020,
0x16: 0x8020020,
0x17: 0x20000,
0x18: 0x0,
0x19: 0x20020,
0x1a: 0x8020000,
0x1b: 0x8000820,
0x1c: 0x8020820,
0x1d: 0x20800,
0x1e: 0x820,
0x1f: 0x8000000,
0x80000010: 0x20000,
0x80000011: 0x800,
0x80000012: 0x8020020,
0x80000013: 0x20820,
0x80000014: 0x20,
0x80000015: 0x8020000,
0x80000016: 0x8000000,
0x80000017: 0x8000820,
0x80000018: 0x8020820,
0x80000019: 0x8000020,
0x8000001a: 0x8000800,
0x8000001b: 0x0,
0x8000001c: 0x20800,
0x8000001d: 0x820,
0x8000001e: 0x20020,
0x8000001f: 0x8020800
}
];
// Masks that select the SBOX input
var SBOX_MASK = [
0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,
0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f
];
/**
* DES block cipher algorithm.
*/
var DES = C_algo.DES = BlockCipher.extend({
_doReset: function () {
// Shortcuts
var key = this._key;
var keyWords = key.words;
// Select 56 bits according to PC1
var keyBits = [];
for (var i = 0; i < 56; i++) {
var keyBitPos = PC1[i] - 1;
keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;
}
// Assemble 16 subkeys
var subKeys = this._subKeys = [];
for (var nSubKey = 0; nSubKey < 16; nSubKey++) {
// Create subkey
var subKey = subKeys[nSubKey] = [];
// Shortcut
var bitShift = BIT_SHIFTS[nSubKey];
// Select 48 bits according to PC2
for (var i = 0; i < 24; i++) {
// Select from the left 28 key bits
subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);
// Select from the right 28 key bits
subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);
}
// Since each subkey is applied to an expanded 32-bit input,
// the subkey can be broken into 8 values scaled to 32-bits,
// which allows the key to be used without expansion
subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);
for (var i = 1; i < 7; i++) {
subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);
}
subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);
}
// Compute inverse subkeys
var invSubKeys = this._invSubKeys = [];
for (var i = 0; i < 16; i++) {
invSubKeys[i] = subKeys[15 - i];
}
},
encryptBlock: function (M, offset) {
this._doCryptBlock(M, offset, this._subKeys);
},
decryptBlock: function (M, offset) {
this._doCryptBlock(M, offset, this._invSubKeys);
},
_doCryptBlock: function (M, offset, subKeys) {
// Get input
this._lBlock = M[offset];
this._rBlock = M[offset + 1];
// Initial permutation
exchangeLR.call(this, 4, 0x0f0f0f0f);
exchangeLR.call(this, 16, 0x0000ffff);
exchangeRL.call(this, 2, 0x33333333);
exchangeRL.call(this, 8, 0x00ff00ff);
exchangeLR.call(this, 1, 0x55555555);
// Rounds
for (var round = 0; round < 16; round++) {
// Shortcuts
var subKey = subKeys[round];
var lBlock = this._lBlock;
var rBlock = this._rBlock;
// Feistel function
var f = 0;
for (var i = 0; i < 8; i++) {
f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];
}
this._lBlock = rBlock;
this._rBlock = lBlock ^ f;
}
// Undo swap from last round
var t = this._lBlock;
this._lBlock = this._rBlock;
this._rBlock = t;
// Final permutation
exchangeLR.call(this, 1, 0x55555555);
exchangeRL.call(this, 8, 0x00ff00ff);
exchangeRL.call(this, 2, 0x33333333);
exchangeLR.call(this, 16, 0x0000ffff);
exchangeLR.call(this, 4, 0x0f0f0f0f);
// Set output
M[offset] = this._lBlock;
M[offset + 1] = this._rBlock;
},
keySize: 64/32,
ivSize: 64/32,
blockSize: 64/32
});
// Swap bits across the left and right words
function exchangeLR(offset, mask) {
var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;
this._rBlock ^= t;
this._lBlock ^= t << offset;
}
function exchangeRL(offset, mask) {
var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;
this._lBlock ^= t;
this._rBlock ^= t << offset;
}
/**
* Shortcut functions to the cipher's object interface.
*
* @example
*
* var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);
* var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);
*/
C.DES = BlockCipher._createHelper(DES);
/**
* Triple-DES block cipher algorithm.
*/
var TripleDES = C_algo.TripleDES = BlockCipher.extend({
_doReset: function () {
// Shortcuts
var key = this._key;
var keyWords = key.words;
// Make sure the key length is valid (64, 128 or >= 192 bit)
if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {
throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');
}
// Extend the key according to the keying options defined in 3DES standard
var key1 = keyWords.slice(0, 2);
var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);
var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);
// Create DES instances
this._des1 = DES.createEncryptor(WordArray.create(key1));
this._des2 = DES.createEncryptor(WordArray.create(key2));
this._des3 = DES.createEncryptor(WordArray.create(key3));
},
encryptBlock: function (M, offset) {
this._des1.encryptBlock(M, offset);
this._des2.decryptBlock(M, offset);
this._des3.encryptBlock(M, offset);
},
decryptBlock: function (M, offset) {
this._des3.decryptBlock(M, offset);
this._des2.encryptBlock(M, offset);
this._des1.decryptBlock(M, offset);
},
keySize: 192/32,
ivSize: 64/32,
blockSize: 64/32
});
/**
* Shortcut functions to the cipher's object interface.
*
* @example
*
* var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);
* var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);
*/
C.TripleDES = BlockCipher._createHelper(TripleDES);
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var StreamCipher = C_lib.StreamCipher;
var C_algo = C.algo;
/**
* RC4 stream cipher algorithm.
*/
var RC4 = C_algo.RC4 = StreamCipher.extend({
_doReset: function () {
// Shortcuts
var key = this._key;
var keyWords = key.words;
var keySigBytes = key.sigBytes;
// Init sbox
var S = this._S = [];
for (var i = 0; i < 256; i++) {
S[i] = i;
}
// Key setup
for (var i = 0, j = 0; i < 256; i++) {
var keyByteIndex = i % keySigBytes;
var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;
j = (j + S[i] + keyByte) % 256;
// Swap
var t = S[i];
S[i] = S[j];
S[j] = t;
}
// Counters
this._i = this._j = 0;
},
_doProcessBlock: function (M, offset) {
M[offset] ^= generateKeystreamWord.call(this);
},
keySize: 256/32,
ivSize: 0
});
function generateKeystreamWord() {
// Shortcuts
var S = this._S;
var i = this._i;
var j = this._j;
// Generate keystream word
var keystreamWord = 0;
for (var n = 0; n < 4; n++) {
i = (i + 1) % 256;
j = (j + S[i]) % 256;
// Swap
var t = S[i];
S[i] = S[j];
S[j] = t;
keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);
}
// Update counters
this._i = i;
this._j = j;
return keystreamWord;
}
/**
* Shortcut functions to the cipher's object interface.
*
* @example
*
* var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);
* var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);
*/
C.RC4 = StreamCipher._createHelper(RC4);
/**
* Modified RC4 stream cipher algorithm.
*/
var RC4Drop = C_algo.RC4Drop = RC4.extend({
/**
* Configuration options.
*
* @property {number} drop The number of keystream words to drop. Default 192
*/
cfg: RC4.cfg.extend({
drop: 192
}),
_doReset: function () {
RC4._doReset.call(this);
// Drop
for (var i = this.cfg.drop; i > 0; i--) {
generateKeystreamWord.call(this);
}
}
});
/**
* Shortcut functions to the cipher's object interface.
*
* @example
*
* var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);
* var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);
*/
C.RC4Drop = StreamCipher._createHelper(RC4Drop);
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var StreamCipher = C_lib.StreamCipher;
var C_algo = C.algo;
// Reusable objects
var S = [];
var C_ = [];
var G = [];
/**
* Rabbit stream cipher algorithm
*/
var Rabbit = C_algo.Rabbit = StreamCipher.extend({
_doReset: function () {
// Shortcuts
var K = this._key.words;
var iv = this.cfg.iv;
// Swap endian
for (var i = 0; i < 4; i++) {
K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |
(((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);
}
// Generate initial state values
var X = this._X = [
K[0], (K[3] << 16) | (K[2] >>> 16),
K[1], (K[0] << 16) | (K[3] >>> 16),
K[2], (K[1] << 16) | (K[0] >>> 16),
K[3], (K[2] << 16) | (K[1] >>> 16)
];
// Generate initial counter values
var C = this._C = [
(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
(K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
(K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
(K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
];
// Carry bit
this._b = 0;
// Iterate the system four times
for (var i = 0; i < 4; i++) {
nextState.call(this);
}
// Modify the counters
for (var i = 0; i < 8; i++) {
C[i] ^= X[(i + 4) & 7];
}
// IV setup
if (iv) {
// Shortcuts
var IV = iv.words;
var IV_0 = IV[0];
var IV_1 = IV[1];
// Generate four subvectors
var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
var i3 = (i2 << 16) | (i0 & 0x0000ffff);
// Modify counter values
C[0] ^= i0;
C[1] ^= i1;
C[2] ^= i2;
C[3] ^= i3;
C[4] ^= i0;
C[5] ^= i1;
C[6] ^= i2;
C[7] ^= i3;
// Iterate the system four times
for (var i = 0; i < 4; i++) {
nextState.call(this);
}
}
},
_doProcessBlock: function (M, offset) {
// Shortcut
var X = this._X;
// Iterate the system
nextState.call(this);
// Generate four keystream words
S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
for (var i = 0; i < 4; i++) {
// Swap endian
S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
(((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
// Encrypt
M[offset + i] ^= S[i];
}
},
blockSize: 128/32,
ivSize: 64/32
});
function nextState() {
// Shortcuts
var X = this._X;
var C = this._C;
// Save old counter values
for (var i = 0; i < 8; i++) {
C_[i] = C[i];
}
// Calculate new counter values
C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
// Calculate the g-values
for (var i = 0; i < 8; i++) {
var gx = X[i] + C[i];
// Construct high and low argument for squaring
var ga = gx & 0xffff;
var gb = gx >>> 16;
// Calculate high and low result of squaring
var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
// High XOR low
G[i] = gh ^ gl;
}
// Calculate new state values
X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
}
/**
* Shortcut functions to the cipher's object interface.
*
* @example
*
* var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);
* var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);
*/
C.Rabbit = StreamCipher._createHelper(Rabbit);
}());
(function () {
// Shortcuts
var C = CryptoJS;
var C_lib = C.lib;
var StreamCipher = C_lib.StreamCipher;
var C_algo = C.algo;
// Reusable objects
var S = [];
var C_ = [];
var G = [];
/**
* Rabbit stream cipher algorithm.
*
* This is a legacy version that neglected to convert the key to little-endian.
* This error doesn't affect the cipher's security,
* but it does affect its compatibility with other implementations.
*/
var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({
_doReset: function () {
// Shortcuts
var K = this._key.words;
var iv = this.cfg.iv;
// Generate initial state values
var X = this._X = [
K[0], (K[3] << 16) | (K[2] >>> 16),
K[1], (K[0] << 16) | (K[3] >>> 16),
K[2], (K[1] << 16) | (K[0] >>> 16),
K[3], (K[2] << 16) | (K[1] >>> 16)
];
// Generate initial counter values
var C = this._C = [
(K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),
(K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),
(K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),
(K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)
];
// Carry bit
this._b = 0;
// Iterate the system four times
for (var i = 0; i < 4; i++) {
nextState.call(this);
}
// Modify the counters
for (var i = 0; i < 8; i++) {
C[i] ^= X[(i + 4) & 7];
}
// IV setup
if (iv) {
// Shortcuts
var IV = iv.words;
var IV_0 = IV[0];
var IV_1 = IV[1];
// Generate four subvectors
var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);
var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);
var i1 = (i0 >>> 16) | (i2 & 0xffff0000);
var i3 = (i2 << 16) | (i0 & 0x0000ffff);
// Modify counter values
C[0] ^= i0;
C[1] ^= i1;
C[2] ^= i2;
C[3] ^= i3;
C[4] ^= i0;
C[5] ^= i1;
C[6] ^= i2;
C[7] ^= i3;
// Iterate the system four times
for (var i = 0; i < 4; i++) {
nextState.call(this);
}
}
},
_doProcessBlock: function (M, offset) {
// Shortcut
var X = this._X;
// Iterate the system
nextState.call(this);
// Generate four keystream words
S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
for (var i = 0; i < 4; i++) {
// Swap endian
S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |
(((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);
// Encrypt
M[offset + i] ^= S[i];
}
},
blockSize: 128/32,
ivSize: 64/32
});
function nextState() {
// Shortcuts
var X = this._X;
var C = this._C;
// Save old counter values
for (var i = 0; i < 8; i++) {
C_[i] = C[i];
}
// Calculate new counter values
C[0] = (C[0] + 0x4d34d34d + this._b) | 0;
C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;
C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;
C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;
C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;
C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;
C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;
C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;
this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;
// Calculate the g-values
for (var i = 0; i < 8; i++) {
var gx = X[i] + C[i];
// Construct high and low argument for squaring
var ga = gx & 0xffff;
var gb = gx >>> 16;
// Calculate high and low result of squaring
var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;
var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);
// High XOR low
G[i] = gh ^ gl;
}
// Calculate new state values
X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;
X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;
X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;
X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;
X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;
X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;
X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;
X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;
}
/**
* Shortcut functions to the cipher's object interface.
*
* @example
*
* var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);
* var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);
*/
C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);
}());
return CryptoJS;
}));
-17
View File
@@ -1,17 +0,0 @@
let req = (url, options) => http(url, Object.assign({
async: false
}, options));
function http(url, options = {}) {
if (options?.async === false) return _http(url, options)
return new Promise(resolve => _http(url, Object.assign({
complete: res => resolve(res)
}, options))).catch(err => {
console.error(err.name, err.message, err.stack)
return {
ok: false,
status: 500,
url
}
})
}
@@ -1 +0,0 @@
function compareTwoStrings(first,second){if((first=first.replace(/\s+/g,""))===(second=second.replace(/\s+/g,"")))return 1;if(first.length<2||second.length<2)return 0;var firstBigrams=new Map;for(let i=0;i<first.length-1;i++){var bigram=first.substring(i,i+2),count=firstBigrams.has(bigram)?firstBigrams.get(bigram)+1:1;firstBigrams.set(bigram,count)}let intersectionSize=0;for(let i=0;i<second.length-1;i++){const bigram=second.substring(i,i+2),count=firstBigrams.has(bigram)?firstBigrams.get(bigram):0;0<count&&(firstBigrams.set(bigram,count-1),intersectionSize++)}return 2*intersectionSize/(first.length+second.length-2)}function findBestMatch(mainString,targetStrings){var ratings=[];let bestMatchIndex=0;for(let i=0;i<targetStrings.length;i++){var currentTargetString=targetStrings[i],currentRating=compareTwoStrings(mainString,currentTargetString);ratings.push({target:currentTargetString,rating:currentRating}),currentRating>ratings[bestMatchIndex].rating&&(bestMatchIndex=i)}return{ratings:ratings,bestMatch:ratings[bestMatchIndex],bestMatchIndex:bestMatchIndex}}function lcs(str1,str2){if(!str1||!str2)return{length:0,sequence:"",offset:0};for(var sequence="",str1Length=str1.length,str2Length=str2.length,num=new Array(str1Length),maxlen=0,lastSubsBegin=0,i=0;i<str1Length;i++){for(var subArray=new Array(str2Length),j=0;j<str2Length;j++)subArray[j]=0;num[i]=subArray}for(var thisSubsBegin=null,i=0;i<str1Length;i++)for(j=0;j<str2Length;j++)str1[i]!==str2[j]?num[i][j]=0:(num[i][j]=0===i||0===j?1:1+num[i-1][j-1],num[i][j]>maxlen&&(maxlen=num[i][j],lastSubsBegin===(thisSubsBegin=i-num[i][j]+1)?sequence+=str1[i]:(lastSubsBegin=thisSubsBegin,sequence="",sequence+=str1.substr(lastSubsBegin,i+1-lastSubsBegin))));return{length:maxlen,sequence:sequence,offset:thisSubsBegin}}function findBestLCS(mainString,targetStrings){var results=[];let bestMatchIndex=0;for(let i=0;i<targetStrings.length;i++){var currentTargetString=targetStrings[i],currentLCS=lcs(mainString,currentTargetString);results.push({target:currentTargetString,lcs:currentLCS}),currentLCS.length>results[bestMatchIndex].lcs.length&&(bestMatchIndex=i)}return{allLCS:results,bestMatch:results[bestMatchIndex],bestMatchIndex:bestMatchIndex}}export{compareTwoStrings,findBestMatch,findBestLCS};
-10
View File
@@ -1,10 +0,0 @@
import * as spider from '%s'
if (!globalThis.__JS_SPIDER__) {
if (spider.__jsEvalReturn) {
globalThis.req = http
globalThis.__JS_SPIDER__ = spider.__jsEvalReturn()
} else if (spider.default) {
globalThis.__JS_SPIDER__ = typeof spider.default === 'function' ? spider.default() : spider.default
}
}
-250
View File
@@ -1,250 +0,0 @@
let ic_dir = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAA7AAAAOwBeShxvQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIoSURBVFiF7Ze/T9RgGMc/T9/WO+74IXdRNKCJxETPQaOJi8LoxiouTurmv+DAYvwH3JzVhOhgSHByMTqY6GBCCBFMcJFwURC4O1rbvo8DoIg9rvHuYOGTdGjfb/J88vZpn1Z0bKw7JjsiaCcJqMiCKQ1OyuhonLTeLG5MZlLQq/UCooqd/nwfuNcOAUfgSorcbR0fN20RACRF7hgzc0PtEJB47IGmCSq8EXjbOKjG+VG54Buv531puK/WkfO2L0cY+ZI5ksVfD84vTt91U5vCEBvH7qxU0GqV18PX+Xg2+e6GFmZXhPlc3zOX5dW0Do2xMbIeEBuXmVMX68Y8BwxQzhXFlWqtdQKbzA+cIch0pMq630vgX55DTJgY+Bn18ql8hyAqphb4VjjeMLPVeG722nOKztddw0EPTARPUws0ohqB3TRw8w2KAwyaCRara/i2u+niCqxHf85TPQWe+Jw2L3kX3GhaYCdip5xU74FV28dSPNB8QZR8VEbCiCe1h+kFWopCVLH42oWz58Xh98s/y9o+CWzjQOBA4EBg3wX+mgWxdwlrTtSJRrjBK0T99glUC49R52jdcG75Fp7/on0C4BGGIeWFMtsHRL4zT2/hMCoerebfHkgYTWm+2/+XHTsQ4h3y6D/ZnxgWjRKvt0wgv3QTa+rN/I0mbDVipxxLe3c5kWjNgqIOSOO/nRajMVu99kF0hi4iM4LQtSfVrWbigHMa21k35NEvWSq4Cnb1Ay8AAAAASUVORK5CYII=';
let ic_file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAA7AAAAOwBeShxvQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJdSURBVFiF7ZfLaxNRFMa/c+8MbZO0xAgmGIIxUmtsQCkobsSNO12I7v0PXAjuBDeCCN0I/gvdu3HhQlHBBwouTA1UUoulKXmYSDp59TEzx4XUpmFm0tsMTRd+u5l7uN9vvnvunRmCh+r1+km2+CWAlFedm5byP79PIHRx8tKk4VYjvCawTfvafs0BoN1qThWNYn7h3cK4EgDPI23P07Ox5pM7+zXfVqPRPFbulPO517nQngBmv3JwkwIPQXQDXDs9KAAANI1WtLpVXcx9yEU8AWY/WU95nRvL1tVbfhgLKXcgGq1oZe3XajabPdJdo3VfMOg2AAL7YQ8kUyewIiQs0wQAbG5sjHbqnUUARx0BAMi/IP4oEAxganpnFcuFEggU7q7x3AUHoaED9C6Bp5gZlmUpGQgSENL9OR0B2KUJCssFFAslJQAShPMXzkHX9b0DuCmRTCCRTCgB9JPzSeirhbeUEjDqBgyjoWQgiBCLxyCEcx8494DLZLZtwzbVmpAFeUaqlEA4EkY4Eu5fqKBDeg64bsNVVEoVJQMCITOTga47WznfJefJ4onjiMWjygBSk67jSgcRCYImlNqmr4beA0M/iP4ncDgT+BfBAUThmQDbpv+OPZ+8ngBa+xWEWfbFt9PqgJmh6/r7XR5OxduIkpcw9uMsWE4MZM7QMKoFq2uBF2dS6VO1vgArWzPIjDwHSUCOA2DXf0sFit9z6XS61nu7F8AEgLfrD/CtfQUhWR3YNzZS+ngzdPc+ps03TuO7Xjuzn61HzHQPDL1pAvaAu4AZJYvo+uPL9MWt5g/5NsVsHsMO8wAAAABJRU5ErkJggg==';
let current_root = '';
let current_file = '';
let current_parent = '';
function search() {
doAction('search', { word: $('#keyword').val() });
}
function push() {
doAction('push', { url: $('#push_url').val() });
}
function setting() {
doAction('setting', { text: $('#setting_text').val(), name: $('#setting_name').val() });
}
function file(path) {
doAction('file', { path: path });
}
function doAction(action, kv) {
kv['do'] = action;
$.post('/action', kv, function (data) {
console.log(data);
});
return false;
}
function tpl_top(path) {
return `<a class="weui-cell weui-cell_access" href="javascript:void(0)" onclick="listFile('` + path + `')">
<div class="weui-cell__hd"><img src="` + ic_dir + `" alt="" style="width: 32px; margin-right: 16px; display: block;"></div>
<span class="weui-cell__bd">
<span class="weui-cell__name">..</span>
</span>
<span class="weui-cell__ft">
</span>
</a>`;
}
function tpl_dir(name, time, path) {
return `<a class="weui-cell weui-cell_access" href="#" onclick="listFile('` + path + `')">
<div class="weui-cell__hd"><img src="` + ic_dir + `" alt="" style="width: 32px; margin-right: 16px; display: block;"></div>
<span class="weui-cell__bd">
<span class="weui-cell__name">` + name + `</span>
<div class="weui-cell__desc">` + time + `</div>
</span>
<span class="weui-cell__ft">
</span>
</a>`;
}
function tpl_file(name, time, path, canDel) {
return `<a class="weui-cell weui-cell_access" href="javascript:void(0)" onclick="selectFile('` + path + `', ` + canDel + `)">
<div class="weui-cell__hd"><img src="` + ic_file + `" alt="" style="width: 32px; margin-right: 16px; display: block;"></div>
<span class="weui-cell__bd">
<span class="weui-cell__name">` + name + `</span>
<div class="weui-cell__desc">` + time + `</div>
</span>
</a>`;
}
function clear_list() {
$('#file_list').html('');
}
function add_file(node) {
$('#file_list').append(node);
}
function selectFile(path, canDel) {
current_file = path;
if (canDel) $("#delFileBtn").show();
else $("#delFileBtn").hide();
$("#fileUrl").html("file:/" + current_file);
$("#fileInfoDialog").show();
}
function pushFile(yes) {
hideFileInfo();
if (yes == 1) {
file("file:/" + current_file);
}
}
function hideFileInfo() {
$("#fileInfoDialog").hide();
}
function listFile(path) {
$('#loadingToast').show();
$.get('/file' + path, function (res) {
let info = JSON.parse(res);
let parent = info.parent;
let canDel = info.parent != '.';
current_root = path;
current_parent = parent;
let array = info.files;
if (path === '' && array.length == 0) {
warnToast('可能沒有存儲權限');
}
clear_list();
if (parent !== '.') {
add_file(tpl_top(parent));
}
if (canDel) {
$('#delCurFolder').show();
} else {
$('#delCurFolder').hide();
}
array.forEach(node => {
if (node.dir === 1) {
add_file(tpl_dir(node.name, node.time, node.path));
} else {
add_file(tpl_file(node.name, node.time, node.path, canDel));
}
});
$('#loadingToast').hide();
})
}
function uploadFile() {
$('#file_uploader').click();
}
function uploadTip() {
let files = $('#file_uploader')[0].files;
if (files.length <= 0) return false;
let tip = '';
for (var i = 0; i < files.length; i++) {
tip += (files[i].name) + ',';
}
tip = tip.substring(0, tip.length - 1);
$('#uploadTipContent').html(tip);
$('#uploadTip').show();
}
function doUpload(yes) {
$('#uploadTip').hide();
if (yes == 1) {
let files = $('#file_uploader')[0].files;
if (files.length <= 0) return false;
var formData = new FormData();
formData.append('path', current_root);
for (i = 0; i < files.length; i++) {
formData.append("files-" + i, files[i]);
}
$('#loadingToast').show();
$.ajax({
url: '/upload',
type: 'post',
data: formData,
processData: false,
contentType: false,
complete: function () {
$('#loadingToast').hide();
listFile(current_root);
}
});
}
}
function newFolder() {
$('#newFolder').show();
}
function doNewFolder(yes) {
$('#newFolder').hide();
if (yes == 1) {
let name = $('#newFolderContent')[0].value.trim();
if (name.length <= 0) return false;
$('#loadingToast').show();
$.post('/newFolder', { path: current_root, name: name }, function (data) {
$('#loadingToast').hide();
listFile(current_root);
});
}
}
function delFolder() {
$('#delFolderContent').html('是否刪除 ' + current_root);
$('#delFolder').show();
}
function doDelFolder(yes) {
$('#delFolder').hide();
if (yes == 1) {
$('#loadingToast').show();
$.post('/delFolder', { path: current_root }, function (data) {
$('#loadingToast').hide();
listFile(current_parent);
});
}
}
function delFile() {
$('#delFileContent').html('是否刪除 ' + current_file);
$('#delFile').show();
hideFileInfo();
}
function doDelFile(yes) {
$('#delFile').hide();
if (yes == 1) {
$('#loadingToast').show();
$.post('/delFile', { path: current_file }, function (data) {
$('#loadingToast').hide();
listFile(current_root);
});
}
}
function warnToast(msg) {
$('#warnToastContent').html(msg);
$('#warnToast').show();
setTimeout(() => {
$('#warnToast').hide();
}, 1000);
}
function showPanel(id) {
let tab = $('#tab' + id);
$(tab).attr('aria-selected', 'true').addClass('weui-bar__item_on');
$(tab).siblings('.weui-bar__item_on').removeClass('weui-bar__item_on').attr('aria-selected', 'false');
var panelId = '#' + $(tab).attr('aria-controls');
$(panelId).css('display', 'block');
$(panelId).siblings('.weui-tab__panel').css('display', 'none');
if (id === 4) listFile('')
}
$(function () {
$('.weui-tabbar__item').on('click', function () {
showPanel(parseInt($(this).attr('id').substr(3)));
});
});
$(document).ready(function () {
var url = window.location.search;
if (url.indexOf('tab=2') > 0) {
showPanel(2);
} else if (url.indexOf('tab=3') > 0) {
showPanel(3);
} else if (url.indexOf('tab=4') > 0) {
showPanel(4);
} else {
showPanel(1);
}
});
Binary file not shown.
-26
View File
@@ -1,26 +0,0 @@
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=yes">
<title>解析</title>
</head>
<body>
<div id="container"></div>
<script>
const jxs = "%s";
const url = "%s";
const list = jxs.split(";");
const container = document.getElementById('container');
list.forEach(item => {
const iframe = document.createElement('iframe');
iframe.src = item + url;
iframe.sandbox = 'allow-scripts allow-same-origin allow-forms';
container.appendChild(iframe);
});
</script>
</body>
</html>
@@ -1,27 +0,0 @@
#version 100
// Copyright 2023 The Android Open Source Project
//
// 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.
// ES 2 fragment shader that samples from a (non-external) texture with
// uTexSampler, and multiplies its alpha value by uAlphaScale.
precision mediump float;
uniform sampler2D uTexSampler;
uniform float uAlphaScale;
varying vec2 vTexSamplingCoord;
void main() {
vec4 src = texture2D(uTexSampler, vTexSamplingCoord);
gl_FragColor = vec4(src.rgb, src.a * uAlphaScale);
}
@@ -1,25 +0,0 @@
#version 100
// Copyright 2023 The Android Open Source Project
//
// 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.
// ES 2 fragment shader that samples from a (non-external) texture with
// uTexSampler and copies this to the output.
precision mediump float;
uniform sampler2D uTexSampler;
varying vec2 vTexSamplingCoord;
void main() {
gl_FragColor = texture2D(uTexSampler, vTexSamplingCoord);
}
@@ -1,74 +0,0 @@
#version 100
// Copyright 2022 The Android Open Source Project
//
// 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.
// ES 2 fragment shader that samples from a (non-external) texture with
// uTexSampler. It then converts the RGB color input into HSL and adjusts
// the Hue, Saturation, and Lightness and converts it then back to RGB.
// We use the algorithm based on the work by Sam Hocevar, which optimizes
// for an efficient branchless RGB <-> HSL conversion. A blog post is
// at https://www.chilliant.com/rgb2hsv.html and it is further explained at
// http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv.
precision highp float;
uniform sampler2D uTexSampler;
// uHueAdjustmentDegrees, uSaturationAdjustment, and uLightnessAdjustment
// are normalized to the unit interval [0, 1].
uniform float uHueAdjustmentDegrees;
uniform float uSaturationAdjustment;
uniform float uLightnessAdjustment;
varying vec2 vTexSamplingCoord;
const float epsilon = 1e-10;
vec3 rgbToHcv(vec3 rgb) {
vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0)
: vec4(rgb.gb, 0.0, -1.0 / 3.0);
vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx);
float c = q.x - min(q.w, q.y);
float h = abs((q.w - q.y) / (6.0 * c + epsilon) + q.z);
return vec3(h, c, q.x);
}
vec3 rgbToHsl(vec3 rgb) {
vec3 hcv = rgbToHcv(rgb);
float l = hcv.z - hcv.y * 0.5;
float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + epsilon);
return vec3(hcv.x, s, l);
}
vec3 hueToRgb(float hue) {
float r = abs(hue * 6.0 - 3.0) - 1.0;
float g = 2.0 - abs(hue * 6.0 - 2.0);
float b = 2.0 - abs(hue * 6.0 - 4.0);
return clamp(vec3(r, g, b), 0.0, 1.0);
}
vec3 hslToRgb(vec3 hsl) {
vec3 rgb = hueToRgb(hsl.x);
float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y;
return (rgb - 0.5) * c + hsl.z;
}
void main() {
vec4 inputColor = texture2D(uTexSampler, vTexSamplingCoord);
vec3 hslColor = rgbToHsl(inputColor.rgb);
hslColor.x = mod(hslColor.x + uHueAdjustmentDegrees, 1.0);
hslColor.y = clamp(hslColor.y + uSaturationAdjustment, 0.0, 1.0);
hslColor.z = clamp(hslColor.z + uLightnessAdjustment, 0.0, 1.0);
gl_FragColor = vec4(hslToRgb(hslColor), inputColor.a);
}
@@ -1,97 +0,0 @@
#version 100
// Copyright 2022 The Android Open Source Project
//
// 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.
// ES2 fragment shader that samples from a (non-external) texture with
// uTexSampler, copying from this texture to the current output while
// applying a 3D color lookup table to change the pixel colors.
precision highp float;
uniform sampler2D uTexSampler;
// The uColorLut texture is a N x N^2 2D texture where each z-plane of the 3D
// LUT is vertically stacked on top of each other. The red channel of the input
// color (z-axis in LUT[R][G][B] = LUT[z][y][x]) points to the plane to sample
// from. For more information check the
// androidx/media3/effect/SingleColorLut.java class, especially the function
// #transformCubeIntoBitmap with a provided example.
uniform sampler2D uColorLut;
uniform float uColorLutLength;
varying vec2 vTexSamplingCoord;
// Applies the color lookup using uLut based on the input colors.
vec3 applyLookup(vec3 color) {
// Reminder: Inside OpenGL vector.xyz is the same as vector.rgb.
// Here we use mentions of x and y coordinates to references to
// the position to sample from inside the 2D LUT plane and
// rgb to create the 3D coordinates based on the input colors.
// To sample from the 3D LUT we interpolate bilinearly twice in the 2D LUT
// to replicate the trilinear interpolation in a 3D LUT. Thus we sample
// from the plane of position redCoordLow and on the plane above.
// redCoordLow points to the lower plane to sample from.
float redCoord = color.r * (uColorLutLength - 1.0);
// Clamping to uColorLutLength - 2 is only needed if redCoord points to the
// most upper plane. In this case there would not be any plane above
// available to sample from.
float redCoordLow = clamp(floor(redCoord), 0.0, uColorLutLength - 2.0);
// lowerY is indexed in two steps. First redCoordLow defines the plane to
// sample from. Next the green color component is added to index the row in
// the found plane. As described in the NVIDIA blog article about LUTs
// https://developer.nvidia.com/gpugems/gpugems2/part-iii-high-quality-rendering/chapter-24-using-lookup-tables-accelerate-color
// (Section 24.2), we sample from color * scale + offset, where offset is
// defined by 1 / (2 * uColorLutLength) and the scale is defined by
// (uColorLutLength - 1.0) / uColorLutLength.
// The following derives the equation of lowerY. For this let
// N = uColorLutLenght. The general formula to sample at row y
// is defined as y = N * r + g.
// Using the offset and scale as described in NVIDIA's blog article we get:
// y = offset + (N * r + g) * scale
// y = 1 / (2 * N) + (N * r + g) * (N - 1) / N
// y = 1 / (2 * N) + N * r * (N - 1) / N + g * (N - 1) / N
// We have defined redCoord as r * (N - 1) if we excluded the clamping for
// now, giving us:
// y = 1 / (2 * N) + N * redCoord / N + g * (N - 1) / N
// This simplifies to:
// y = 0.5 / N + (N * redCoord + g * (N - 1)) / N
// y = (0.5 + N * redCoord + g * (N - 1)) / N
// This formula now assumes a coordinate system in the range of [0, N] but
// OpenGL uses a [0, 1] unit coordinate system internally. Thus dividing
// by N gives us the final formula for y:
// y = ((0.5 + N * redCoord + g * (N - 1)) / N) / N
// y = (0.5 + redCoord * N + g * (N - 1)) / (N * N)
float lowerY = (0.5 + redCoordLow * uColorLutLength +
color.g * (uColorLutLength - 1.0)) /
(uColorLutLength * uColorLutLength);
// The upperY is the same position moved up by one LUT plane.
float upperY = lowerY + 1.0 / uColorLutLength;
// The x position is the blue color channel (x-axis in LUT[R][G][B]).
float x = (0.5 + color.b * (uColorLutLength - 1.0)) / uColorLutLength;
vec3 lowerRgb = texture2D(uColorLut, vec2(x, lowerY)).rgb;
vec3 upperRgb = texture2D(uColorLut, vec2(x, upperY)).rgb;
// Linearly interpolate between lowerRgb and upperRgb based on the
// distance of the actual in the plane and the lower sampling position.
return mix(lowerRgb, upperRgb, redCoord - redCoordLow);
}
void main() {
vec4 inputColor = texture2D(uTexSampler, vTexSamplingCoord);
gl_FragColor.rgb = applyLookup(inputColor.rgb);
gl_FragColor.a = inputColor.a;
}
@@ -1,96 +0,0 @@
#version 300 es
// Copyright 2022 The Android Open Source Project
//
// 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.
// ES 3 fragment shader that:
// 1. Samples optical linear BT.2020 RGB from a (non-external) texture with
// uTexSampler.
// 2. Applies a 4x4 RGB color matrix to change the pixel colors.
// 3. Outputs electrical (HLG or PQ) BT.2020 RGB based on uOutputColorTransfer,
// via an OETF.
// The output will be red if an error has occurred.
precision mediump float;
uniform sampler2D uTexSampler;
in vec2 vTexSamplingCoord;
out vec4 outColor;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_ST2084 and COLOR_TRANSFER_HLG are allowed.
uniform int uOutputColorTransfer;
uniform mat3 uColorTransform;
uniform mat4 uRgbMatrix;
// TODO(b/227624622): Consider using mediump to save precision, if it won't lead
// to noticeable quantization.
// HLG OETF for one channel.
highp float hlgOetfSingleChannel(highp float linearChannel) {
// Specification:
// https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_HLG
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=529-543;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float a = 0.17883277;
const highp float b = 0.28466892;
const highp float c = 0.55991073;
return linearChannel <= 1.0 / 12.0 ? sqrt(3.0 * linearChannel)
: a * log(12.0 * linearChannel - b) + c;
}
// BT.2100 / BT.2020 HLG OETF.
highp vec3 hlgOetf(highp vec3 linearColor) {
return vec3(hlgOetfSingleChannel(linearColor.r),
hlgOetfSingleChannel(linearColor.g),
hlgOetfSingleChannel(linearColor.b));
}
// BT.2100 / BT.2020, PQ / ST2084 OETF.
highp vec3 pqOetf(highp vec3 linearColor) {
// Specification:
// https://registry.khronos.org/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_PQ
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=514-527;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float m1 = (2610.0 / 16384.0);
const highp float m2 = (2523.0 / 4096.0) * 128.0;
const highp float c1 = (3424.0 / 4096.0);
const highp float c2 = (2413.0 / 4096.0) * 32.0;
const highp float c3 = (2392.0 / 4096.0) * 32.0;
highp vec3 temp = pow(linearColor, vec3(m1));
temp = (c1 + c2 * temp) / (1.0 + c3 * temp);
return pow(temp, vec3(m2));
}
// Applies the appropriate OETF to convert linear optical signals to nonlinear
// electrical signals. Input and output are both normalized to [0, 1].
highp vec3 applyOetf(highp vec3 linearColor) {
// LINT.IfChange(color_transfer)
const int COLOR_TRANSFER_ST2084 = 6;
const int COLOR_TRANSFER_HLG = 7;
if (uOutputColorTransfer == COLOR_TRANSFER_ST2084) {
return pqOetf(linearColor);
} else if (uOutputColorTransfer == COLOR_TRANSFER_HLG) {
return hlgOetf(linearColor);
} else {
// Output red as an obviously visible error.
return vec3(1.0, 0.0, 0.0);
}
}
void main() {
vec4 inputColor = texture(uTexSampler, vTexSamplingCoord);
// transformedColors is an optical color.
vec4 transformedColors = uRgbMatrix * vec4(inputColor.rgb, 1);
outColor = vec4(applyOetf(transformedColors.rgb), inputColor.a);
}
@@ -1,29 +0,0 @@
#version 100
// Copyright 2022 The Android Open Source Project
//
// 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.
// ES 2 fragment shader that samples from a (non-external) texture with
// uTexSampler, copying from this texture to the current output while
// applying a 4x4 RGB color matrix to change the pixel colors.
precision mediump float;
uniform sampler2D uTexSampler;
uniform mat4 uRgbMatrix;
varying vec2 vTexSamplingCoord;
void main() {
vec4 inputColor = texture2D(uTexSampler, vTexSamplingCoord);
gl_FragColor = uRgbMatrix * vec4(inputColor.rgb, 1);
gl_FragColor.a = inputColor.a;
}
@@ -1,240 +0,0 @@
#version 300 es
// Copyright 2022 The Android Open Source Project
//
// 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.
// ES 3 fragment shader that:
// 1. Samples electrical (HLG or PQ) BT.2020 YUV from an external texture with
// uTexSampler, where the sampler uses the EXT_YUV_target extension specified
// at
// https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_YUV_target.txt,
// 2. Applies a YUV to RGB conversion using the specified color transform
// uYuvToRgbColorTransform, yielding electrical (HLG or PQ) BT.2020 RGB,
// 3. Applies an EOTF based on uInputColorTransfer, yielding optical linear
// BT.2020 RGB.
// 4. Optionally applies a BT2020 to BT709 OOTF, if OpenGL tone-mapping is
// requested via uApplyHdrToSdrToneMapping.
// 5. Applies a 4x4 RGB color matrix to change the pixel colors.
// 6. Outputs as requested by uOutputColorTransfer. Use COLOR_TRANSFER_LINEAR
// for outputting to intermediate shaders, or COLOR_TRANSFER_ST2084 /
// COLOR_TRANSFER_HLG to output electrical colors via an OETF (e.g. to an
// encoder).
// The output will be red or blue if an error has occurred.
#extension GL_OES_EGL_image_external : require
#extension GL_EXT_YUV_target : require
precision mediump float;
uniform __samplerExternal2DY2YEXT uTexSampler;
uniform mat3 uYuvToRgbColorTransform;
uniform mat4 uRgbMatrix;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_ST2084 and COLOR_TRANSFER_HLG are allowed.
uniform int uInputColorTransfer;
uniform int uApplyHdrToSdrToneMapping;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_LINEAR, COLOR_TRANSFER_GAMMA_2_2, COLOR_TRANSFER_ST2084,
// and COLOR_TRANSFER_HLG are allowed.
uniform int uOutputColorTransfer;
in vec2 vTexSamplingCoord;
out vec4 outColor;
// LINT.IfChange(color_transfer)
const int COLOR_TRANSFER_LINEAR = 1;
const int COLOR_TRANSFER_GAMMA_2_2 = 10;
const int COLOR_TRANSFER_ST2084 = 6;
const int COLOR_TRANSFER_HLG = 7;
// TODO(b/227624622): Consider using mediump to save precision, if it won't lead
// to noticeable quantization errors.
// BT.2100 / BT.2020 HLG EOTF for one channel.
highp float hlgEotfSingleChannel(highp float hlgChannel) {
// Specification:
// https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_HLG
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=265-279;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float a = 0.17883277;
const highp float b = 0.28466892;
const highp float c = 0.55991073;
return hlgChannel <= 0.5 ? hlgChannel * hlgChannel / 3.0
: (b + exp((hlgChannel - c) / a)) / 12.0;
}
// BT.2100 / BT.2020 HLG EOTF.
highp vec3 hlgEotf(highp vec3 hlgColor) {
return vec3(hlgEotfSingleChannel(hlgColor.r),
hlgEotfSingleChannel(hlgColor.g),
hlgEotfSingleChannel(hlgColor.b));
}
// BT.2100 / BT.2020 PQ EOTF.
highp vec3 pqEotf(highp vec3 pqColor) {
// Specification:
// https://registry.khronos.org/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_PQ
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=250-263;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float m1 = (2610.0 / 16384.0);
const highp float m2 = (2523.0 / 4096.0) * 128.0;
const highp float c1 = (3424.0 / 4096.0);
const highp float c2 = (2413.0 / 4096.0) * 32.0;
const highp float c3 = (2392.0 / 4096.0) * 32.0;
highp vec3 temp = pow(clamp(pqColor, 0.0, 1.0), 1.0 / vec3(m2));
temp = max(temp - c1, 0.0) / (c2 - c3 * temp);
return pow(temp, 1.0 / vec3(m1));
}
// Applies the appropriate EOTF to convert nonlinear electrical values to linear
// optical values. Input and output are both normalized to [0, 1].
highp vec3 applyEotf(highp vec3 electricalColor) {
if (uInputColorTransfer == COLOR_TRANSFER_ST2084) {
return pqEotf(electricalColor);
} else if (uInputColorTransfer == COLOR_TRANSFER_HLG) {
return hlgEotf(electricalColor);
} else {
// Output red as an obviously visible error.
return vec3(1.0, 0.0, 0.0);
}
}
// Apply the HLG BT2020 to BT709 OOTF.
highp vec3 applyHlgBt2020ToBt709Ootf(highp vec3 linearRgbBt2020) {
// Reference ("HLG Reference OOTF" section):
// https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2100-2-201807-I!!PDF-E.pdf
// Matrix values based on computeXYZMatrix(BT2020Primaries, BT2020WhitePoint)
// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/libs/hwui/utils/HostColorSpace.cpp;l=200-232;drc=86bd214059cd6150304888a285941bf74af5b687
const mat3 RGB_TO_XYZ_BT2020 =
mat3(0.63695805f, 0.26270021f, 0.00000000f, 0.14461690f, 0.67799807f,
0.02807269f, 0.16888098f, 0.05930172f, 1.06098506f);
// Matrix values based on computeXYZMatrix(BT709Primaries, BT709WhitePoint)
const mat3 XYZ_TO_RGB_BT709 =
mat3(3.24096994f, -0.96924364f, 0.05563008f, -1.53738318f, 1.87596750f,
-0.20397696f, -0.49861076f, 0.04155506f, 1.05697151f);
// hlgGamma is 1.2 + 0.42 * log10(nominalPeakLuminance/1000);
// nominalPeakLuminance was selected to use a 500 as a typical value, used
// in
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/tonemap/tonemap.cpp;drc=7a577450e536aa1e99f229a0cb3d3531c82e8a8d;l=62,
// b/199162498#comment35, and
// https://www.microsoft.com/applied-sciences/uploads/projects/investigation-of-hdr-vs-tone-mapped-sdr/investigation-of-hdr-vs-tone-mapped-sdr.pdf.
const float hlgGamma = 1.0735674018211279;
vec3 linearXyzBt2020 = RGB_TO_XYZ_BT2020 * linearRgbBt2020;
vec3 linearXyzBt709 =
linearXyzBt2020 * pow(linearXyzBt2020[1], hlgGamma - 1.0);
vec3 linearRgbBt709 = clamp((XYZ_TO_RGB_BT709 * linearXyzBt709), 0.0, 1.0);
return linearRgbBt709;
}
// Apply the PQ BT2020 to BT709 OOTF.
highp vec3 applyPqBt2020ToBt709Ootf(highp vec3 linearRgbBt2020) {
float pqPeakLuminance = 10000.0;
float sdrPeakLuminance = 500.0;
return linearRgbBt2020 * pqPeakLuminance / sdrPeakLuminance;
}
highp vec3 applyBt2020ToBt709Ootf(highp vec3 linearRgbBt2020) {
if (uInputColorTransfer == COLOR_TRANSFER_ST2084) {
return applyPqBt2020ToBt709Ootf(linearRgbBt2020);
} else if (uInputColorTransfer == COLOR_TRANSFER_HLG) {
return applyHlgBt2020ToBt709Ootf(linearRgbBt2020);
} else {
// Output green as an obviously visible error.
return vec3(0.0, 1.0, 0.0);
}
}
// BT.2100 / BT.2020 HLG OETF for one channel.
highp float hlgOetfSingleChannel(highp float linearChannel) {
// Specification:
// https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_HLG
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=529-543;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float a = 0.17883277;
const highp float b = 0.28466892;
const highp float c = 0.55991073;
return linearChannel <= 1.0 / 12.0 ? sqrt(3.0 * linearChannel)
: a * log(12.0 * linearChannel - b) + c;
}
// BT.2100 / BT.2020 HLG OETF.
highp vec3 hlgOetf(highp vec3 linearColor) {
return vec3(hlgOetfSingleChannel(linearColor.r),
hlgOetfSingleChannel(linearColor.g),
hlgOetfSingleChannel(linearColor.b));
}
// BT.2100 / BT.2020, PQ / ST2084 OETF.
highp vec3 pqOetf(highp vec3 linearColor) {
// Specification:
// https://registry.khronos.org/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_PQ
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=514-527;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float m1 = (2610.0 / 16384.0);
const highp float m2 = (2523.0 / 4096.0) * 128.0;
const highp float c1 = (3424.0 / 4096.0);
const highp float c2 = (2413.0 / 4096.0) * 32.0;
const highp float c3 = (2392.0 / 4096.0) * 32.0;
highp vec3 temp = pow(linearColor, vec3(m1));
temp = (c1 + c2 * temp) / (1.0 + c3 * temp);
return pow(temp, vec3(m2));
}
// BT.709 gamma 2.2 OETF for one channel.
float gamma22OetfSingleChannel(highp float linearChannel) {
// Reference:
// https://developer.android.com/reference/android/hardware/DataSpace#TRANSFER_GAMMA2_2
return pow(linearChannel, (1.0 / 2.2));
}
// BT.709 gamma 2.2 OETF.
vec3 gamma22Oetf(highp vec3 linearColor) {
return vec3(gamma22OetfSingleChannel(linearColor.r),
gamma22OetfSingleChannel(linearColor.g),
gamma22OetfSingleChannel(linearColor.b));
}
// Applies the appropriate OETF to convert linear optical signals to nonlinear
// electrical signals. Input and output are both normalized to [0, 1].
highp vec3 applyOetf(highp vec3 linearColor) {
if (uOutputColorTransfer == COLOR_TRANSFER_ST2084) {
return pqOetf(linearColor);
} else if (uOutputColorTransfer == COLOR_TRANSFER_HLG) {
return hlgOetf(linearColor);
} else if (uOutputColorTransfer == COLOR_TRANSFER_GAMMA_2_2) {
return gamma22Oetf(linearColor);
} else if (uOutputColorTransfer == COLOR_TRANSFER_LINEAR) {
return linearColor;
} else {
// Output blue as an obviously visible error.
return vec3(0.0, 0.0, 1.0);
}
}
vec3 yuvToRgb(vec3 yuv) {
const vec3 yuvOffset = vec3(0.0625, 0.5, 0.5);
return clamp(uYuvToRgbColorTransform * (yuv - yuvOffset), 0.0, 1.0);
}
void main() {
vec3 srcYuv = texture(uTexSampler, vTexSamplingCoord).xyz;
vec3 opticalColorBt2020 = applyEotf(yuvToRgb(srcYuv));
vec4 opticalColor =
(uApplyHdrToSdrToneMapping == 1)
? vec4(applyBt2020ToBt709Ootf(opticalColorBt2020), 1.0)
: vec4(opticalColorBt2020, 1.0);
vec4 transformedColors = uRgbMatrix * opticalColor;
outColor = vec4(applyOetf(transformedColors.rgb), 1.0);
}
@@ -1,227 +0,0 @@
#version 300 es
// Copyright 2022 The Android Open Source Project
//
// 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.
// ES 3 fragment shader that:
// 1. Samples electrical (HLG or PQ) BT.2020 RGB from an internal texture.
// 2. Applies an EOTF based on uInputColorTransfer, yielding optical linear
// BT.2020 RGB.
// 3. Optionally applies a BT2020 to BT709 OOTF, if OpenGL tone-mapping is
// requested via uApplyHdrToSdrToneMapping.
// 4. Applies a 4x4 RGB color matrix to change the pixel colors.
// 5. Outputs as requested by uOutputColorTransfer. Use COLOR_TRANSFER_LINEAR
// for outputting to intermediate shaders, or COLOR_TRANSFER_ST2084 /
// COLOR_TRANSFER_HLG to output electrical colors via an OETF (e.g. to an
// encoder).
// The output will be red or blue if an error has occurred.
precision mediump float;
uniform sampler2D uTexSampler;
uniform mat4 uRgbMatrix;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_ST2084 and COLOR_TRANSFER_HLG are allowed.
uniform int uInputColorTransfer;
uniform int uApplyHdrToSdrToneMapping;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_LINEAR, COLOR_TRANSFER_GAMMA_2_2, COLOR_TRANSFER_ST2084,
// and COLOR_TRANSFER_HLG are allowed.
uniform int uOutputColorTransfer;
in vec2 vTexSamplingCoord;
out vec4 outColor;
// LINT.IfChange(color_transfer)
const int COLOR_TRANSFER_LINEAR = 1;
const int COLOR_TRANSFER_GAMMA_2_2 = 10;
const int COLOR_TRANSFER_ST2084 = 6;
const int COLOR_TRANSFER_HLG = 7;
// TODO(b/227624622): Consider using mediump to save precision, if it won't lead
// to noticeable quantization errors.
// BT.2100 / BT.2020 HLG EOTF for one channel.
highp float hlgEotfSingleChannel(highp float hlgChannel) {
// Specification:
// https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_HLG
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=265-279;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float a = 0.17883277;
const highp float b = 0.28466892;
const highp float c = 0.55991073;
return hlgChannel <= 0.5 ? hlgChannel * hlgChannel / 3.0
: (b + exp((hlgChannel - c) / a)) / 12.0;
}
// BT.2100 / BT.2020 HLG EOTF.
highp vec3 hlgEotf(highp vec3 hlgColor) {
return vec3(hlgEotfSingleChannel(hlgColor.r),
hlgEotfSingleChannel(hlgColor.g),
hlgEotfSingleChannel(hlgColor.b));
}
// BT.2100 / BT.2020 PQ EOTF.
highp vec3 pqEotf(highp vec3 pqColor) {
// Specification:
// https://registry.khronos.org/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_PQ
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=250-263;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float m1 = (2610.0 / 16384.0);
const highp float m2 = (2523.0 / 4096.0) * 128.0;
const highp float c1 = (3424.0 / 4096.0);
const highp float c2 = (2413.0 / 4096.0) * 32.0;
const highp float c3 = (2392.0 / 4096.0) * 32.0;
highp vec3 temp = pow(clamp(pqColor, 0.0, 1.0), 1.0 / vec3(m2));
temp = max(temp - c1, 0.0) / (c2 - c3 * temp);
return pow(temp, 1.0 / vec3(m1));
}
// Applies the appropriate EOTF to convert nonlinear electrical values to linear
// optical values. Input and output are both normalized to [0, 1].
highp vec3 applyEotf(highp vec3 electricalColor) {
if (uInputColorTransfer == COLOR_TRANSFER_ST2084) {
return pqEotf(electricalColor);
} else if (uInputColorTransfer == COLOR_TRANSFER_HLG) {
return hlgEotf(electricalColor);
} else {
// Output red as an obviously visible error.
return vec3(1.0, 0.0, 0.0);
}
}
// Apply the HLG BT2020 to BT709 OOTF.
highp vec3 applyHlgBt2020ToBt709Ootf(highp vec3 linearRgbBt2020) {
// Reference ("HLG Reference OOTF" section):
// https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2100-2-201807-I!!PDF-E.pdf
// Matrix values based on computeXYZMatrix(BT2020Primaries, BT2020WhitePoint)
// https://cs.android.com/android/platform/superproject/+/master:frameworks/base/libs/hwui/utils/HostColorSpace.cpp;l=200-232;drc=86bd214059cd6150304888a285941bf74af5b687
const mat3 RGB_TO_XYZ_BT2020 =
mat3(0.63695805f, 0.26270021f, 0.00000000f, 0.14461690f, 0.67799807f,
0.02807269f, 0.16888098f, 0.05930172f, 1.06098506f);
// Matrix values based on computeXYZMatrix(BT709Primaries, BT709WhitePoint)
const mat3 XYZ_TO_RGB_BT709 =
mat3(3.24096994f, -0.96924364f, 0.05563008f, -1.53738318f, 1.87596750f,
-0.20397696f, -0.49861076f, 0.04155506f, 1.05697151f);
// hlgGamma is 1.2 + 0.42 * log10(nominalPeakLuminance/1000);
// nominalPeakLuminance was selected to use a 500 as a typical value, used
// in
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/tonemap/tonemap.cpp;drc=7a577450e536aa1e99f229a0cb3d3531c82e8a8d;l=62,
// b/199162498#comment35, and
// https://www.microsoft.com/applied-sciences/uploads/projects/investigation-of-hdr-vs-tone-mapped-sdr/investigation-of-hdr-vs-tone-mapped-sdr.pdf.
const float hlgGamma = 1.0735674018211279;
vec3 linearXyzBt2020 = RGB_TO_XYZ_BT2020 * linearRgbBt2020;
vec3 linearXyzBt709 =
linearXyzBt2020 * pow(linearXyzBt2020[1], hlgGamma - 1.0);
vec3 linearRgbBt709 = clamp((XYZ_TO_RGB_BT709 * linearXyzBt709), 0.0, 1.0);
return linearRgbBt709;
}
// Apply the PQ BT2020 to BT709 OOTF.
highp vec3 applyPqBt2020ToBt709Ootf(highp vec3 linearRgbBt2020) {
float pqPeakLuminance = 10000.0;
float sdrPeakLuminance = 500.0;
return linearRgbBt2020 * pqPeakLuminance / sdrPeakLuminance;
}
highp vec3 applyBt2020ToBt709Ootf(highp vec3 linearRgbBt2020) {
if (uInputColorTransfer == COLOR_TRANSFER_ST2084) {
return applyPqBt2020ToBt709Ootf(linearRgbBt2020);
} else if (uInputColorTransfer == COLOR_TRANSFER_HLG) {
return applyHlgBt2020ToBt709Ootf(linearRgbBt2020);
} else {
// Output green as an obviously visible error.
return vec3(0.0, 1.0, 0.0);
}
}
// BT.2100 / BT.2020 HLG OETF for one channel.
highp float hlgOetfSingleChannel(highp float linearChannel) {
// Specification:
// https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_HLG
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=529-543;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float a = 0.17883277;
const highp float b = 0.28466892;
const highp float c = 0.55991073;
return linearChannel <= 1.0 / 12.0 ? sqrt(3.0 * linearChannel)
: a * log(12.0 * linearChannel - b) + c;
}
// BT.2100 / BT.2020 HLG OETF.
highp vec3 hlgOetf(highp vec3 linearColor) {
return vec3(hlgOetfSingleChannel(linearColor.r),
hlgOetfSingleChannel(linearColor.g),
hlgOetfSingleChannel(linearColor.b));
}
// BT.2100 / BT.2020, PQ / ST2084 OETF.
highp vec3 pqOetf(highp vec3 linearColor) {
// Specification:
// https://registry.khronos.org/DataFormat/specs/1.3/dataformat.1.3.inline.html#TRANSFER_PQ
// Reference implementation:
// https://cs.android.com/android/platform/superproject/+/master:frameworks/native/libs/renderengine/gl/ProgramCache.cpp;l=514-527;drc=de09f10aa504fd8066370591a00c9ff1cafbb7fa
const highp float m1 = (2610.0 / 16384.0);
const highp float m2 = (2523.0 / 4096.0) * 128.0;
const highp float c1 = (3424.0 / 4096.0);
const highp float c2 = (2413.0 / 4096.0) * 32.0;
const highp float c3 = (2392.0 / 4096.0) * 32.0;
highp vec3 temp = pow(linearColor, vec3(m1));
temp = (c1 + c2 * temp) / (1.0 + c3 * temp);
return pow(temp, vec3(m2));
}
// BT.709 gamma 2.2 OETF for one channel.
float gamma22OetfSingleChannel(highp float linearChannel) {
// Reference:
// https://developer.android.com/reference/android/hardware/DataSpace#TRANSFER_GAMMA2_2
return pow(linearChannel, (1.0 / 2.2));
}
// BT.709 gamma 2.2 OETF.
vec3 gamma22Oetf(highp vec3 linearColor) {
return vec3(gamma22OetfSingleChannel(linearColor.r),
gamma22OetfSingleChannel(linearColor.g),
gamma22OetfSingleChannel(linearColor.b));
}
// Applies the appropriate OETF to convert linear optical signals to nonlinear
// electrical signals. Input and output are both normalized to [0, 1].
highp vec3 applyOetf(highp vec3 linearColor) {
if (uOutputColorTransfer == COLOR_TRANSFER_ST2084) {
return pqOetf(linearColor);
} else if (uOutputColorTransfer == COLOR_TRANSFER_HLG) {
return hlgOetf(linearColor);
} else if (uOutputColorTransfer == COLOR_TRANSFER_GAMMA_2_2) {
return gamma22Oetf(linearColor);
} else if (uOutputColorTransfer == COLOR_TRANSFER_LINEAR) {
return linearColor;
} else {
// Output blue as an obviously visible error.
return vec3(0.0, 0.0, 1.0);
}
}
void main() {
vec3 opticalColorBt2020 =
applyEotf(texture(uTexSampler, vTexSamplingCoord).xyz);
vec4 opticalColor =
(uApplyHdrToSdrToneMapping == 1)
? vec4(applyBt2020ToBt709Ootf(opticalColorBt2020), 1.0)
: vec4(opticalColorBt2020, 1.0);
vec4 transformedColors = uRgbMatrix * opticalColor;
outColor = vec4(applyOetf(transformedColors.rgb), 1.0);
}
@@ -1,109 +0,0 @@
#version 100
// Copyright 2021 The Android Open Source Project
//
// 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.
// ES 2 fragment shader that:
// 1. Samples from an external texture with uTexSampler copying from this
// texture to the current output.
// 2. Transforms the electrical colors to optical colors using the SMPTE 170M
// EOTF.
// 3. Applies a 4x4 RGB color matrix to change the pixel colors.
// 4. Outputs as requested by uOutputColorTransfer. Use COLOR_TRANSFER_LINEAR
// for outputting to intermediate shaders, or COLOR_TRANSFER_SDR_VIDEO to
// output electrical colors via an OETF (e.g. to an encoder).
#extension GL_OES_EGL_image_external : require
precision mediump float;
uniform samplerExternalOES uTexSampler;
uniform mat4 uRgbMatrix;
varying vec2 vTexSamplingCoord;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_LINEAR and COLOR_TRANSFER_SDR_VIDEO are allowed.
uniform int uOutputColorTransfer;
uniform int uEnableColorTransfer;
const float inverseGamma = 0.4500;
const float gamma = 1.0 / inverseGamma;
const int GL_FALSE = 0;
const int GL_TRUE = 1;
// Transforms a single channel from electrical to optical SDR using the SMPTE
// 170M OETF.
float smpte170mEotfSingleChannel(float electricalChannel) {
// Specification:
// https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en
return electricalChannel < 0.0812
? electricalChannel / 4.500
: pow((electricalChannel + 0.099) / 1.099, gamma);
}
// Transforms electrical to optical SDR using the SMPTE 170M EOTF.
vec3 smpte170mEotf(vec3 electricalColor) {
return vec3(smpte170mEotfSingleChannel(electricalColor.r),
smpte170mEotfSingleChannel(electricalColor.g),
smpte170mEotfSingleChannel(electricalColor.b));
}
// Transforms a single channel from optical to electrical SDR.
float smpte170mOetfSingleChannel(float opticalChannel) {
// Specification:
// https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en
return opticalChannel < 0.018
? opticalChannel * 4.500
: 1.099 * pow(opticalChannel, inverseGamma) - 0.099;
}
// Transforms optical SDR colors to electrical SDR using the SMPTE 170M OETF.
vec3 smpte170mOetf(vec3 opticalColor) {
return vec3(smpte170mOetfSingleChannel(opticalColor.r),
smpte170mOetfSingleChannel(opticalColor.g),
smpte170mOetfSingleChannel(opticalColor.b));
}
// Applies the appropriate OETF to convert linear optical signals to nonlinear
// electrical signals. Input and output are both normalized to [0, 1].
highp vec3 applyOetf(highp vec3 linearColor) {
// LINT.IfChange(color_transfer)
const int COLOR_TRANSFER_LINEAR = 1;
const int COLOR_TRANSFER_SDR_VIDEO = 3;
if (uOutputColorTransfer == COLOR_TRANSFER_LINEAR ||
uEnableColorTransfer == GL_FALSE) {
return linearColor;
} else if (uOutputColorTransfer == COLOR_TRANSFER_SDR_VIDEO) {
return smpte170mOetf(linearColor);
} else {
// Output red as an obviously visible error.
return vec3(1.0, 0.0, 0.0);
}
}
vec3 applyEotf(vec3 electricalColor) {
if (uEnableColorTransfer == GL_TRUE) {
return smpte170mEotf(electricalColor);
} else if (uEnableColorTransfer == GL_FALSE) {
return electricalColor;
} else {
// Output blue as an obviously visible error.
return vec3(0.0, 0.0, 1.0);
}
}
void main() {
vec4 inputColor = texture2D(uTexSampler, vTexSamplingCoord);
vec3 linearInputColor = applyEotf(inputColor.rgb);
vec4 transformedColors = uRgbMatrix * vec4(linearInputColor, 1);
gl_FragColor = vec4(applyOetf(transformedColors.rgb), inputColor.a);
}
@@ -1,150 +0,0 @@
#version 100
// Copyright 2023 The Android Open Source Project
//
// 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.
// ES 2 fragment shader that:
// 1. Samples from an input texture created from an internal texture (e.g. a
// texture created from a bitmap), with uTexSampler copying from this texture
// to the current output.
// 2. Transforms the electrical colors to optical colors using the SMPTE 170M
// EOTF or the sRGB EOTF, as requested by uInputColorTransfer.
// 3. Applies a 4x4 RGB color matrix to change the pixel colors.
// 4. Outputs as requested by uOutputColorTransfer. Use COLOR_TRANSFER_LINEAR
// for outputting to intermediate shaders, or COLOR_TRANSFER_SDR_VIDEO to
// output electrical colors via an OETF (e.g. to an encoder).
precision mediump float;
uniform sampler2D uTexSampler;
uniform mat4 uRgbMatrix;
varying vec2 vTexSamplingCoord;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_SRGB and COLOR_TRANSFER_SDR_VIDEO are allowed.
uniform int uInputColorTransfer;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_LINEAR and COLOR_TRANSFER_SDR_VIDEO are allowed.
uniform int uOutputColorTransfer;
uniform int uEnableColorTransfer;
const float inverseGamma = 0.4500;
const float gamma = 1.0 / inverseGamma;
const int GL_FALSE = 0;
const int GL_TRUE = 1;
// LINT.IfChange(color_transfer)
const int COLOR_TRANSFER_LINEAR = 1;
const int COLOR_TRANSFER_SRGB = 2;
const int COLOR_TRANSFER_SDR_VIDEO = 3;
// Transforms a single channel from electrical to optical SDR using the sRGB
// EOTF.
float srgbEotfSingleChannel(float electricalChannel) {
// Specification:
// https://developer.android.com/ndk/reference/group/a-data-space#group___a_data_space_1gga2759ad19cae46646cc5f7002758c4a1cac1bef6aa3a72abbf4a651a0bfb117f96
return electricalChannel <= 0.04045
? electricalChannel / 12.92
: pow((electricalChannel + 0.055) / 1.055, 2.4);
}
// Transforms electrical to optical SDR using the sRGB EOTF.
vec3 srgbEotf(const vec3 electricalColor) {
return vec3(srgbEotfSingleChannel(electricalColor.r),
srgbEotfSingleChannel(electricalColor.g),
srgbEotfSingleChannel(electricalColor.b));
}
// Transforms a single channel from electrical to optical SDR using the SMPTE
// 170M OETF.
float smpte170mEotfSingleChannel(float electricalChannel) {
// Specification:
// https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en
return electricalChannel < 0.0812
? electricalChannel / 4.500
: pow((electricalChannel + 0.099) / 1.099, gamma);
}
// Transforms electrical to optical SDR using the SMPTE 170M EOTF.
vec3 smpte170mEotf(vec3 electricalColor) {
return vec3(smpte170mEotfSingleChannel(electricalColor.r),
smpte170mEotfSingleChannel(electricalColor.g),
smpte170mEotfSingleChannel(electricalColor.b));
}
// Transforms a single channel from optical to electrical SDR.
float smpte170mOetfSingleChannel(float opticalChannel) {
// Specification:
// https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en
return opticalChannel < 0.018
? opticalChannel * 4.500
: 1.099 * pow(opticalChannel, inverseGamma) - 0.099;
}
// Transforms optical SDR colors to electrical SDR using the SMPTE 170M OETF.
vec3 smpte170mOetf(vec3 opticalColor) {
return vec3(smpte170mOetfSingleChannel(opticalColor.r),
smpte170mOetfSingleChannel(opticalColor.g),
smpte170mOetfSingleChannel(opticalColor.b));
}
// Applies the appropriate EOTF to convert nonlinear electrical signals to
// linear optical signals. Input and output are both normalized to [0, 1].
vec3 applyEotf(vec3 electricalColor) {
if (uEnableColorTransfer == GL_TRUE) {
if (uInputColorTransfer == COLOR_TRANSFER_SRGB) {
return srgbEotf(electricalColor);
} else if (uInputColorTransfer == COLOR_TRANSFER_SDR_VIDEO) {
return smpte170mEotf(electricalColor);
} else {
// Output blue as an obviously visible error.
return vec3(0.0, 0.0, 1.0);
}
} else if (uEnableColorTransfer == GL_FALSE) {
return electricalColor;
} else {
// Output blue as an obviously visible error.
return vec3(0.0, 0.0, 1.0);
}
}
// Applies the appropriate OETF to convert linear optical signals to nonlinear
// electrical signals. Input and output are both normalized to [0, 1].
highp vec3 applyOetf(highp vec3 linearColor) {
if (uOutputColorTransfer == COLOR_TRANSFER_LINEAR ||
uEnableColorTransfer == GL_FALSE) {
return linearColor;
} else if (uOutputColorTransfer == COLOR_TRANSFER_SDR_VIDEO) {
return smpte170mOetf(linearColor);
} else {
// Output red as an obviously visible error.
return vec3(1.0, 0.0, 0.0);
}
}
vec2 getAdjustedTexSamplingCoord(vec2 originalTexSamplingCoord) {
if (uInputColorTransfer == COLOR_TRANSFER_SRGB) {
// Whereas the Android system uses the top-left corner as (0,0) of the
// coordinate system, OpenGL uses the bottom-left corner as (0,0), so the
// texture gets flipped. We flip the texture vertically to ensure the
// orientation of the output is correct.
return vec2(originalTexSamplingCoord.x, 1.0 - originalTexSamplingCoord.y);
} else {
return originalTexSamplingCoord;
}
}
void main() {
vec4 inputColor =
texture2D(uTexSampler, getAdjustedTexSamplingCoord(vTexSamplingCoord));
vec3 linearInputColor = applyEotf(inputColor.rgb);
vec4 transformedColors = uRgbMatrix * vec4(linearInputColor, 1);
gl_FragColor = vec4(applyOetf(transformedColors.rgb), inputColor.a);
}
@@ -1,85 +0,0 @@
#version 100
// Copyright 2022 The Android Open Source Project
//
// 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.
// ES 2 fragment shader that:
// 1. Samples from uTexSampler, copying from this texture to the current
// output.
// 2. Applies a 4x4 RGB color matrix to change the pixel colors.
// 3. Transforms the optical colors to electrical colors using the SMPTE
// 170M OETF.
precision mediump float;
uniform sampler2D uTexSampler;
uniform mat4 uRgbMatrix;
varying vec2 vTexSamplingCoord;
// C.java#ColorTransfer value.
// Only COLOR_TRANSFER_SDR and COLOR_TRANSFER_GAMMA_2_2 are allowed.
uniform int uOutputColorTransfer;
const float inverseGamma = 0.4500;
// Transforms a single channel from optical to electrical SDR using the SMPTE
// 170M OETF.
float smpte170mOetfSingleChannel(float opticalChannel) {
// Specification:
// https://www.itu.int/rec/R-REC-BT.1700-0-200502-I/en
return opticalChannel < 0.018
? opticalChannel * 4.500
: 1.099 * pow(opticalChannel, inverseGamma) - 0.099;
}
// Transforms optical SDR colors to electrical SDR using the SMPTE 170M OETF.
vec3 smpte170mOetf(vec3 opticalColor) {
return vec3(smpte170mOetfSingleChannel(opticalColor.r),
smpte170mOetfSingleChannel(opticalColor.g),
smpte170mOetfSingleChannel(opticalColor.b));
}
// BT.709 gamma 2.2 OETF for one channel.
float gamma22OetfSingleChannel(highp float linearChannel) {
// Reference:
// https://developer.android.com/reference/android/hardware/DataSpace#TRANSFER_gamma22
return pow(linearChannel, (1.0 / 2.2));
}
// BT.709 gamma 2.2 OETF.
vec3 gamma22Oetf(highp vec3 linearColor) {
return vec3(gamma22OetfSingleChannel(linearColor.r),
gamma22OetfSingleChannel(linearColor.g),
gamma22OetfSingleChannel(linearColor.b));
}
// Applies the appropriate OETF to convert linear optical signals to nonlinear
// electrical signals. Input and output are both normalized to [0, 1].
highp vec3 applyOetf(highp vec3 linearColor) {
// LINT.IfChange(color_transfer_oetf)
const int COLOR_TRANSFER_SDR_VIDEO = 3;
const int COLOR_TRANSFER_GAMMA_2_2 = 10;
if (uOutputColorTransfer == COLOR_TRANSFER_SDR_VIDEO) {
return smpte170mOetf(linearColor);
} else if (uOutputColorTransfer == COLOR_TRANSFER_GAMMA_2_2) {
return gamma22Oetf(linearColor);
} else {
// Output red as an obviously visible error.
return vec3(1.0, 0.0, 0.0);
}
}
void main() {
vec4 inputColor = texture2D(uTexSampler, vTexSamplingCoord);
vec4 transformedColors = uRgbMatrix * vec4(inputColor.rgb, 1);
gl_FragColor = vec4(applyOetf(transformedColors.rgb), inputColor.a);
}
@@ -1,35 +0,0 @@
#version 100
// Copyright 2023 The Android Open Source Project
//
// 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.
// ES2 vertex shader that tiles frames horizontally.
attribute vec4 aFramePosition;
uniform int uIndex;
uniform int uCount;
varying vec2 vTexSamplingCoord;
void main() {
// Translate the coordinates from -1,+1 to 0,+2.
float x = aFramePosition.x + 1.0;
// Offset the frame by its index times its width (2).
x += float(uIndex) * 2.0;
// Shrink the frame to fit the thumbnail strip.
x /= float(uCount);
// Translate the coordinates back to -1,+1.
x -= 1.0;
gl_Position = vec4(x, aFramePosition.yzw);
vTexSamplingCoord = aFramePosition.xy * 0.5 + 0.5;
}
@@ -1,28 +0,0 @@
#version 100
// Copyright 2021 The Android Open Source Project
//
// 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.
// ES 2 vertex shader that applies the 4 * 4 transformation matrices
// uTransformationMatrix and the uTexTransformationMatrix.
attribute vec4 aFramePosition;
uniform mat4 uTransformationMatrix;
uniform mat4 uTexTransformationMatrix;
varying vec2 vTexSamplingCoord;
void main() {
gl_Position = uTransformationMatrix * aFramePosition;
vec4 texturePosition = vec4(aFramePosition.x * 0.5 + 0.5,
aFramePosition.y * 0.5 + 0.5, 0.0, 1.0);
vTexSamplingCoord = (uTexTransformationMatrix * texturePosition).xy;
}
@@ -1,28 +0,0 @@
#version 300 es
// Copyright 2021 The Android Open Source Project
//
// 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.
// ES 3 vertex shader that applies the 4 * 4 transformation matrices
// uTransformationMatrix and the uTexTransformationMatrix.
in vec4 aFramePosition;
uniform mat4 uTransformationMatrix;
uniform mat4 uTexTransformationMatrix;
out vec2 vTexSamplingCoord;
void main() {
gl_Position = uTransformationMatrix * aFramePosition;
vec4 texturePosition = vec4(aFramePosition.x * 0.5 + 0.5,
aFramePosition.y * 0.5 + 0.5, 0.0, 1.0);
vTexSamplingCoord = (uTexTransformationMatrix * texturePosition).xy;
}
@@ -1,25 +0,0 @@
function fail(message) {
if (message == null) {
throw Error("❌assert error.")
}
throw Error(message);
}
export function assertEquals(expected, actual) {
if (expected !== actual) {
fail(`❌assert failed, expected:[${expected}] but was:[${actual}]`)
}
}
export function assertTrue(condition) {
if (!condition) {
fail()
}
}
export function assertFalse(condition) {
if (condition) {
fail()
}
}
@@ -1,5 +0,0 @@
import {name, age} from './test_base_module2.mjs';
import {assertEquals} from "./test_assert_define.js";
assertEquals(name, "Jack")
assertEquals(age, 18)
@@ -1,2 +0,0 @@
export var name = 'Jack';
export var age = 18;
@@ -1,7 +0,0 @@
import {assertEquals} from "./test_assert_define.js";
// dynamic import
import("test_base_module2.mjs").then((res) => {
assertEquals(res.name, "Jack")
assertEquals(res.age, 18)
})
@@ -1,20 +0,0 @@
function assertDate(expected, actual) {
if ((Date.parse(expected) === new Date(expected).getTime()) && (Date.parse(expected) === actual)) {
console.log('✅assert passed with ' + expected, 'Date.parse = ' + Date.parse(expected), 'Date.construct = ' + new Date(expected).getTime(), 'actual = ' + actual);
} else {
console.log('❌assert failed with ' + expected, 'Date.parse = ' + Date.parse(expected), 'Date.construct = ' + new Date(expected).getTime(), 'actual = ' + actual);
throw Error('parse failed.');
}
}
assertDate('20130108', 1357603200000);
assertDate('2018-04-24', 1524528000000);
assertDate('2018-04-24 11:12', 1524539520000);
assertDate('2018-05-02 11:12:13', 1525230733000);
assertDate('2018-05-02 11:12:13.998', 1525230733998);
assertDate('2018-4-1', 1522540800000);
assertDate('2018-4-1 11:12', 1522552320000);
assertDate('2018-4-1 1:1:1:223', 1522515661223);
assertDate('2018-01', 1514764800000);
assertDate('2018', 1514764800000);
assertDate('2018-05-02T11:12:13Z', 1525259533000);
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,65 +0,0 @@
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License"). You
# may not use this file except in compliance with the License. You can
# obtain a copy of the License at
# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
# or packager/legal/LICENSE.txt. See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at packager/legal/LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license." If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above. However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#
#
# This file incorporates work covered by the following copyright and
# permission notice:
#
# Copyright 2004 The Apache Software Foundation
#
# 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.
#
# Default localized string information
# Localized for Locale en_US
err.not_iso8859_1=Not an ISO 8859-1 character: {0}
err.servlet_config_not_initialized=ServletConfig has not been initialized
value.true=true
value.false=false
@@ -1,66 +0,0 @@
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License"). You
# may not use this file except in compliance with the License. You can
# obtain a copy of the License at
# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
# or packager/legal/LICENSE.txt. See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at packager/legal/LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license." If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above. However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#
#
# This file incorporates work covered by the following copyright and
# permission notice:
#
# Copyright 2004 The Apache Software Foundation
#
# 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.
#
# Default localized string information
# Localized for Locale fr_FR
err.not_iso8859_1={0} n''est pas un caractère ISO 8859-1
value.true=true
value.false=false
@@ -1,64 +0,0 @@
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License"). You
# may not use this file except in compliance with the License. You can
# obtain a copy of the License at
# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
# or packager/legal/LICENSE.txt. See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at packager/legal/LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license." If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above. However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#
#
# This file incorporates work covered by the following copyright and
# permission notice:
#
# Copyright 2004 The Apache Software Foundation
#
# 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.
#
# Default localized string information
# Localized for Locale ja_JP
err.not_iso8859_1=ISO 8859-1 \u306e\u6587\u5b57\u3067\u306f\u3042\u308a\u307e\u305b\u3093: {0}
value.true=true
value.false=false
@@ -1,75 +0,0 @@
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 1997-2013 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License"). You
# may not use this file except in compliance with the License. You can
# obtain a copy of the License at
# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
# or packager/legal/LICENSE.txt. See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at packager/legal/LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license." If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above. However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#
#
# This file incorporates work covered by the following copyright and
# permission notice:
#
# Copyright 2004 The Apache Software Foundation
#
# 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.
#
# Default localized string information
# Localized for Locale en_US
err.cookie_name_is_token=Cookie name \"{0}\" is a reserved token
err.cookie_name_blank=Cookie name must not be null or empty
err.io.nullArray=Null passed for byte array in write method
err.io.indexOutOfBounds=Invalid offset [{0}] and / or length [{1}] specified for array of size [{2}]
err.io.short_read=Short Read
err.ise.getWriter=Illegal to call getWriter() after getOutputStream() has been called
err.ise.getOutputStream=Illegal to call getOutputStream() after getWriter() has been called
http.method_not_implemented=Method {0} is not defined in RFC 2068 and is not supported by the Servlet API
http.method_get_not_supported=HTTP method GET is not supported by this URL
http.method_post_not_supported=HTTP method POST is not supported by this URL
http.method_put_not_supported=HTTP method PUT is not supported by this URL
http.method_delete_not_supported=Http method DELETE is not supported by this URL
@@ -1,73 +0,0 @@
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License"). You
# may not use this file except in compliance with the License. You can
# obtain a copy of the License at
# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
# or packager/legal/LICENSE.txt. See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at packager/legal/LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license." If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above. However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#
#
# This file incorporates work covered by the following copyright and
# permission notice:
#
# Copyright 2004 The Apache Software Foundation
#
# 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.
#
# $Id: LocalStrings_es.properties,v 1.1.1.1 2003/01/27 16:07:47 ja120114 Exp $
#
# Default localized string information
# Localized para Locale es_ES
err.cookie_name_is_token=El Nombre de Cookie {0} es una palabra reservada
err.io.negativelength=Longitud Negativa en el metodo write
err.io.short_read=Lectura Corta
http.method_not_implemented=El Metodo {0} no esta definido en la especificacion RFC 2068 y no es soportado por la API Servlet
http.method_get_not_supported=El Metodo HTTP GET no es soportado por esta URL
http.method_post_not_supported=El Metodo HTTP POST no es soportado por esta URL
http.method_put_not_supported=El Metodo HTTP PUT no es soportado por esta URL
http.method_delete_not_supported=El Metodo HTTP DELETE no es soportado por esta URL
@@ -1,71 +0,0 @@
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License"). You
# may not use this file except in compliance with the License. You can
# obtain a copy of the License at
# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
# or packager/legal/LICENSE.txt. See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at packager/legal/LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license." If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above. However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#
#
# This file incorporates work covered by the following copyright and
# permission notice:
#
# Copyright 2004 The Apache Software Foundation
#
# 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.
#
# Default localized string information
# Localized for Locale fr_FR
err.cookie_name_is_token=Le nom de cookie \"{0}\" est un \"token\" réservé
err.io.negativelength=Taille négative donnée dans la méthode \"write\"
err.io.short_read=Lecture partielle
http.method_not_implemented=Le méthode {0} n''est pas définie dans la RFC 2068 et n''est pas supportée par l''API Servlet
http.method_get_not_supported=La méthode HTTP GET n''est pas supportée par cette URL
http.method_post_not_supported=La méthode HTTP POST n''est pas supportée par cette URL
http.method_put_not_supported=La méthode HTTP PUT n''est pas supportée par cette URL
http.method_delete_not_supported=La méthode HTTP DELETE n''est pas supportée par cette URL
@@ -1,71 +0,0 @@
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License"). You
# may not use this file except in compliance with the License. You can
# obtain a copy of the License at
# https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
# or packager/legal/LICENSE.txt. See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at packager/legal/LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license." If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above. However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#
#
# This file incorporates work covered by the following copyright and
# permission notice:
#
# Copyright 2004 The Apache Software Foundation
#
# 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.
#
# Default localized string information
# Localized for Locale ja_JP
err.cookie_name_is_token=\u30af\u30c3\u30ad\u30fc\u540d \"{0}\" \u306f\u4e88\u7d04\u6e08\u306e\u30c8\u30fc\u30af\u30f3\u3067\u3059\u3002
err.io.negativelength=write\u30e1\u30bd\u30c3\u30c9\u306b\u8ca0\u306e\u9577\u3055\u304c\u6307\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002
err.io.short_read=\u8aad\u307f\u8fbc\u307f\u304c\u3059\u3050\u306b\u7d42\u308f\u308a\u307e\u3057\u305f\u3002
http.method_not_implemented=\u30e1\u30bd\u30c3\u30c9 {0} \u306fRFC 2068\u306b\u306f\u5b9a\u7fa9\u3055\u308c\u3066\u304a\u3089\u305a\u3001\u30b5\u30fc\u30d6\u30ec\u30c3\u30c8API\u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u307e\u305b\u3093\u3002
http.method_get_not_supported=HTTP\u306eGET\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u3053\u306eURL\u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
http.method_post_not_supported=HTTP\u306ePOST\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u3053\u306eURL\u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
http.method_put_not_supported=HTTP\u306ePUT\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u3053\u306eURL\u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
http.method_delete_not_supported=HTTP\u306eDELETE\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u3053\u306eURL\u3067\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-31
View File
@@ -1,31 +0,0 @@
body
{
background-color: #FFFFFF;
margin: 10px;
padding: 5px;
}
h1
{
text-shadow: #000000 -1px -1px 1px;
color: #FC390E;
font-weight: bold;
}
a
{
color: #7036be;
font-weight: bold;
font-style: normal;
text-decoration: none;
font-size:inherit;
}
td
{
font-style: italic;
padding: 2px 15px 2px 0px;
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +0,0 @@
Note that PublicSuffixDatabase.gz is compiled from The Public Suffix List:
https://publicsuffix.org/list/public_suffix_list.dat
It is subject to the terms of the Mozilla Public License, v. 2.0:
https://mozilla.org/MPL/2.0/
@@ -1,616 +0,0 @@
## constructor exceptions
# cert path is empty
CertPathReviewer.emptyCertPath.title = CertPath is empty
CertPathReviewer.emptyCertPath.text = PKIXCertPathReviewer: the CertPath is empty.
CertPathReviewer.emptyCertPath.summary = PKIXCertPathReviewer: the CertPath is empty.
CertPathReviewer.emptyCertPath.details = PKIXCertPathReviewer: the CertPath is empty.
## name constraints processing errors
# cert DN is not in the permitted tree
# {0} DN as String
CertPathReviewer.notPermittedDN.title = Name constraint error: certificate DN is not permitted
CertPathReviewer.notPermittedDN.text = Name constraint error: the certificate DN {0} is not permitted.
CertPathReviewer.notPermittedDN.summary = Name constraint error: certificate DN is not permitted.
CertPathReviewer.notPermittedDN.details = Name constraint checking error. The certificate DN {0} is not in the permitted set of DNs.
# cert DN is in the excluded tree
# {0} DN as String
CertPathReviewer.excludedDN.title = Name constraint error: certificate DN is excluded
CertPathReviewer.excludedDN.text = Name constraint error: The certificate DN {0} is excluded.
CertPathReviewer.excludedDN.summary = Name constraint error: certificate DN is excluded.
CertPathReviewer.excludedDN.details = Name constraint checking error. The certificate DN {0} is inside of the excluded set of DNs.
# cert email is not in the permitted tree
# {0} email address as String
CertPathReviewer.notPermittedEmail.title = Name constraint error: not permitted email address
CertPathReviewer.notPermittedEmail.text = Name constraint error: certificate contains the not permitted email address {0}.
CertPathReviewer.notPermittedEmail.summary = Name constraint error: not permitted email address.
CertPathReviewer.notPermittedEmail.details = Name constraint checking error. The certificate contains the email address {0} which is not in the permitted set of email addresses.
# cert email is in the excluded tree
# {0} email as String
CertPathReviewer.excludedEmail.title = Name constraint error: excluded email address
CertPathReviewer.excludedEmail.text = Name constraint error: certificate contains the excluded email address {0}.
CertPathReviewer.excludedEmail.summary = Name constraint error: excluded email address.
CertPathReviewer.excludedEmail.details = Name constraint checking error. The certificate contains the email address {0} which is in the excluded set of email addresses.
# cert IP is not in the permitted tree
# {0} ip address as String
CertPathReviewer.notPermittedIP.title = Name constraint error: not permitted IP address
CertPathReviewer.notPermittedIP.text = Name constraint error: certificate contains the not permitted IP address {0}.
CertPathReviewer.notPermittedIP.summary = Name constraint error: not permitted IP address.
CertPathReviewer.notPermittedIP.details = Name constraint checking error. The certificate contains the IP address {0} which is not in the permitted set of IP addresses.
# cert ip is in the excluded tree
# {0} ip address as String
CertPathReviewer.excludedIP.title = Name constraint error: excluded IP address
CertPathReviewer.excludedIP.text = Name constraint error: certificate contains the excluded IP address {0}.
CertPathReviewer.excludedIP.summary = Name constraint error: excluded IP address.
CertPathReviewer.excludedIP.details = Name constraint checking error. The certificate contains the IP address {0} which is in the excluded set of IP addresses.
# error processing the name constraints extension
CertPathReviewer.ncExtError.title = Name constraint checking failed
CertPathReviewer.ncExtError.text = Name constraint checking failed: there was an error processing the name constraints extension of the certificate.
CertPathReviewer.ncExtError.summary = Error processing the name constraints extension.
CertPathReviewer.ncExtError.details = Name constraint checking failed: there was an error processing the name constraints extension of the certificate.
# error processing the subject alternative name extension
CertPathReviewer.subjAltNameExtError.title = Name constraint checking failed
CertPathReviewer.subjAltNameExtError.text = Name constraint checking failed: there was an error processing the subject alternative name extension of the certificate.
CertPathReviewer.subjAltNameExtError.summary = Error processing the subject alternative name extension.
CertPathReviewer.subjAltNameExtError.details = Name constraint checking failed: there was an error processing the subject alternative name extension of the certificate.
# exception extracting subject name when checking subtrees
# {0} subject Principal
CertPathReviewer.ncSubjectNameError.title = Name constraint checking failed
CertPathReviewer.ncSubjectNameError.text = Name constraint checking failed: there was an exception extracting the DN from the certificate.
CertPathReviewer.ncSubjectNameError.summary = Name constraint checking failed: exception extracting the DN.
CertPathReviewer.ncSubjectNameError.details = Name constraint checking failed: there was an exception extracting the DN from the certificate.
## path length errors
# max path length extended
CertPathReviewer.pathLengthExtended.title = Maximum path length extended
CertPathReviewer.pathLengthExtended.text = Certificate path invalid: Maximum path length extended.
CertPathReviewer.pathLengthExtended.summary = Certificate path invalid: Maximum path length extended.
CertPathReviewer.pathLengthExtended.details = Certificate path invalid: Maximum path length extended.
# error reading length constraint from basic constraint extension
CertPathReviewer.processLengthConstError.title = Path length checking failed
CertPathReviewer.processLengthConstError.text = Path length checking failed: there was an error processing the basic constraint extension of the certificate.
CertPathReviewer.processLengthConstError.summary = Error processing the subject alternative name extension.
CertPathReviewer.processLengthConstError.details = Path length checking failed: there was an error processing the basic constraint extension of the certificate.
## path length notifications
# total path length as defined in rfc 3280
# {0} the path length as Integer
CertPathReviewer.totalPathLength.title = Total path length
CertPathReviewer.totalPathLength.text = The total path length without self-signed certificates is {0}.
CertPathReviewer.totalPathLength.summary = The total path length without self-signed certificates is {0}.
CertPathReviewer.totalPathLength.details = The total path length without self-signed certificates, as defined in RFC 3280, is {0}.
## critical extensions errors
# one unknown critical extension
# {0} extension as String
CertPathReviewer.unknownCriticalExt.title = Unknown critical extension
CertPathReviewer.unknownCriticalExt.text = The certificate contains the unknown critical extension {0}.
CertPathReviewer.unknownCriticalExt.summary = Unknown critical extension: {0}.
CertPathReviewer.unknownCriticalExt.details = The certificate contains the unknown critical extension with the OID {0}.
# more unknown critical extensions
# {0} extensions as Set of Strings
CertPathReviewer.unknownCriticalExts.title = Unknown critical extensions
CertPathReviewer.unknownCriticalExts.text = The certificate contains two or more unknown critical extensions: {0}.
CertPathReviewer.unknownCriticalExts.summary = Unknown critical extensions: {0}.
CertPathReviewer.unknownCriticalExts.details = The certificate contains two or more unknown critical extensions with the OIDs: {0}.
# error processing critical extension
# {0} the message of the underlying exception
# {1} the underlying exception
# {2} the name of the exception
CertPathReviewer.criticalExtensionError.title = Error processing a critical extension
CertPathReviewer.criticalExtensionError.text = Error processing a critical extension. A {0} occurred.
CertPathReviewer.criticalExtensionError.summary = Error processing a critical extension. A {0} occurred.
CertPathReviewer.criticalExtensionError.details = Error processing a critical extension. A {0} occurred. Cause: {0}.
# error initializing the certpath checkers
# {0} the message of the underlying exception
# {1} the underlying exception
# {2} the name of the exception
CertPathReviewer.certPathCheckerError.title = Checking critical extensions failed
CertPathReviewer.certPathCheckerError.text = Checking critical extensions failed: there was a {2} initializing a CertPathChecker.
CertPathReviewer.certPathCheckerError.summary = Checking critical extensions failed: {2} initializing a CertPathChecker
CertPathReviewer.certPathCheckerError.details = Checking critical extensions failed: there was an {2} initializing a CertPathChecker. Cause: {0}
## check signature errors
CertPathReviewer.rootKeyIsValidButNotATrustAnchor.title = Root key with valid signature but no trust anchor
CertPathReviewer.rootKeyIsValidButNotATrustAnchor.text = The certificate has a valid signature, but is no trust anchor
CertPathReviewer.rootKeyIsValidButNotATrustAnchor.summary = The certificate has a valid signature, but is no trust anchor
CertPathReviewer.rootKeyIsValidButNotATrustAnchor.details = The certificate has a valid signature, but is no trust anchor
# trustanchor found, but certificate validation failed
CertPathReviewer.trustButInvalidCert.title = Trust anchor found, but different public key
CertPathReviewer.trustButInvalidCert.text = A trust anchor was found. But it has a different public key, than was used to issue the first certificate of the cert path.
CertPathReviewer.trustButInvalidCert.summary = A trust anchor was found. But it has a different public key, than was used to issue the first certificate of the cert path.
CertPathReviewer.trustButInvalidCert.details = A trust anchor was found. But it has a different public key, than was used to issue the first certificate of the cert path.
# trustanchor - cannot extract issuer
CertPathReviewer.trustAnchorIssuerError.title = Finding trust anchor failed
CertPathReviewer.trustAnchorIssuerError.text = Finding trust anchor failed: cannot extract issuer from certificate.
CertPathReviewer.trustAnchorIssuerError.summary = Finding trust anchor failed: cannot extract issuer from certificate.
CertPathReviewer.trustAnchorIssuerError.details = Finding trust anchor failed: cannot extract issuer from certificate.
# no trustanchor was found for the certificate path
# {0} issuer of the root certificate of the path
# {1} number of trusted root certificates (trustanchors) provided
CertPathReviewer.noTrustAnchorFound.title = No trusted root certificate found
CertPathReviewer.noTrustAnchorFound.text = The root certificate of the certificate path was issued by a CA that is not in the the trusted-root-certificate-store used for the path validation. The name of the CA is "{0}".
CertPathReviewer.noTrustAnchorFound.summary = The root certificate of the certificate path was issued by a CA that is not in the the trusted-root-certificate-store used for the path validation.
CertPathReviewer.noTrustAnchorFound.details = The root certificate of the certificate path was issued by a CA that is not in the the trusted-root-certificate-store used for the path validation. The name of the CA is "{0}". The trusted-root-certificate store contains {1} CA(s).
# conflicting trust anchors
# {0} number of trustanchors found (Integer)
# {1} the ca name
CertPathReviewer.conflictingTrustAnchors.title = Corrupt trust root store
CertPathReviewer.conflictingTrustAnchors.text = Warning: corrupt trust root store: There are {0} trusted public keys for the CA "{1}" - please ensure with CA which is the correct key.
CertPathReviewer.conflictingTrustAnchors.summary = Warning: corrupt trust root store: There are {0} trusted public keys for the CA "{1}" - please ensure with CA which is the correct key.
CertPathReviewer.conflictingTrustAnchors.details = Warning: corrupt trust root store: There are {0} trusted public keys for the CA "{1}" - please ensure with CA which is the correct key.
# trustanchor DN is invalid
# {0} DN of the Trustanchor
CertPathReviewer.trustDNInvalid.title = DN of TrustAnchor is improperly specified
CertPathReviewer.trustDNInvalid.text = The DN of the TrustAnchor is improperly specified: {0}.
CertPathReviewer.trustDNInvalid.summary = The DN of the TrustAnchor is improperly specified.
CertPathReviewer.trustDNInvalid.details = The DN of the TrustAnchor is improperly specified: {0}. It's not a valid X.500 name. See RFC 1779 or RFC 2253.
# trustanchor public key algorithm error
CertPathReviewer.trustPubKeyError.title = Error processing public key of the trust anchor
CertPathReviewer.trustPubKeyError.text = Error processing public key of the trust anchor.
CertPathReviewer.trustPubKeyError.summary = Error processing public key of the trust anchor.
CertPathReviewer.trustPubKeyError.details = Error processing public key of the trust anchor. Could not extract the AlorithmIdentifier for the key.
# can not verifiy signature: issuer public key unknown
CertPathReviewer.NoIssuerPublicKey.title = Can not verify the certificate signature
CertPathReviewer.NoIssuerPublicKey.text = Can not verify the certificate signature: Issuer public key is unknown.
CertPathReviewer.NoIssuerPublicKey.summary = Can not verify the certificate signature: Issuer public key is unknown.
CertPathReviewer.NoIssuerPublicKey.details = Can not verify the certificate signature: Issuer public key is unknown.
# signature can not be verified
# {0} message of the underlying exception (english)
# {1} the underlying exception
# {2} the name of the exception
CertPathReviewer.signatureNotVerified.title = Certificate signature invalid
CertPathReviewer.signatureNotVerified.text = The certificate signature is invalid. A {2} occurred.
CertPathReviewer.signatureNotVerified.summary = The certificate signature is invalid.
CertPathReviewer.signatureNotVerified.details = The certificate signature is invalid. A {2} occurred. Cause: {0}
# certificate expired
# {0} the date the certificate expired
CertPathReviewer.certificateExpired.title = Certificate is expired
CertPathReviewer.certificateExpired.text = Could not validate the certificate. Certificate expired on {0,date} {0,time,full}.
CertPathReviewer.certificateExpired.summary = Certificate expired on {0,date} {0,time,full}.
CertPathReviewer.certificateExpired.details = Could not validate the certificate. Certificate expired on {0,date} {0,time,full}.
# certificate not yet valid
# {0} the date from which on the certificate is valid
CertPathReviewer.certificateNotYetValid.title = Certificate is not yet valid
CertPathReviewer.certificateNotYetValid.text = Could not validate the certificate. Certificate is not valid until {0,date} {0,time,full}.
CertPathReviewer.certificateNotYetValid.summary = Certificate is not valid until {0,date} {0,time,full}.
CertPathReviewer.certificateNotYetValid.details = Could not validate the certificate. Certificate is not valid until {0,date} {0,time,full}.
# certificate invalid issuer DN
# {0} expected issuer DN as String
# {1} found issuer DN as String
CertPathReviewer.certWrongIssuer.title = Issuer of certificate not valid
CertPathReviewer.certWrongIssuer.text = Issuer of certificate is not valid. Expected {0}, but found {1}.
CertPathReviewer.certWrongIssuer.summary = Issuer of certificate is not valid.
CertPathReviewer.certWrongIssuer.details = Issuer of certificate is not valid. Expected {0}, but found {1}.
# intermediate certificate is no ca cert
CertPathReviewer.noCACert.title = Certificate is no CA certificate
CertPathReviewer.noCACert.text = Intermediate certificate is no CA certificate.
CertPathReviewer.noCACert.summary = The certificate is no CA certificate.
CertPathReviewer.noCACert.details = The certificate is no CA certificate but used as one.
# cert laks basic constraints
CertPathReviewer.noBasicConstraints.title = Certificate has no basic constraints
CertPathReviewer.noBasicConstraints.text = Intermediate certificate has no basic constraints.
CertPathReviewer.noBasicConstraints.summary = Intermediate certificate has no basic constraints.
CertPathReviewer.noBasicConstraints.details = Intermediate certificate has no basic constraints.
# error processing basic constraints
CertPathReviewer.errorProcesingBC.title = Error processing the basic constraints extension
CertPathReviewer.errorProcesingBC.text = There was an error while processing the basic constraints extension of this certificate.
CertPathReviewer.errorProcesingBC.summary = Error processing the basic constraints extension.
CertPathReviewer.errorProcesingBC.details = There was an error while processing the basic constraints extension of this certificate.
# certificate not usable for signing certs
CertPathReviewer.noCertSign.title = Key not usable for signing certificates
CertPathReviewer.noCertSign.text = The key usage constraint does not allow the use of this certificate key for signing certificates.
CertPathReviewer.noCertSign.summary = The certificate key can not be used for signing certificates.
CertPathReviewer.noCertSign.details = The key usage constraint does not allow the use of this certificate key for signing certificates.
# error processing public key
CertPathReviewer.pubKeyError.title = Error processing public key
CertPathReviewer.pubKeyError.text = Error processing public key of the certificate.
CertPathReviewer.pubKeyError.summary = Error processing public key of the certificate.
CertPathReviewer.pubKeyError.details = Error processing public key of the certificate. Could not extract the AlorithmIdentifier for the key.
## check signatures notifications
#
# trust anchor has no keyusage certSign
CertPathReviewer.trustKeyUsage.title = Trust anchor key usage
CertPathReviewer.trustKeyUsage.text = The trust anchor is not alloed to sign certificates.
CertPathReviewer.trustKeyUsage.summary = The trust anchor is not alloed to sign certificates.
CertPathReviewer.trustKeyUsage.details = The trust anchor is not alloed to sign certificates.
# certificate path validation date
# {0} date for which the cert path is validated
# {1} current date
CertPathReviewer.certPathValidDate.title = Certificate path validation date
CertPathReviewer.certPathValidDate.text = The certificate path was applied on {0,date} {0,time,full}. It was checked at {1,date} {1,time,full}.
CertPathReviewer.certPathValidDate.summary = The certificate path was validated for {0,date} {0,time,full}. It was checked at {1,date} {1,time,full}.
CertPathReviewer.certPathValidDate.details = The certificate path was validated for {0,date} {0,time,full}. It was checked at {1,date} {1,time,full}.
## check policy errors
# error processing certificate policy extension
CertPathReviewer.policyExtError.title = Policy checking failed
CertPathReviewer.policyExtError.text = Policy checking failed: there was an error processing the certificate policy extension.
CertPathReviewer.policyExtError.summary = Error processing the certificate policy extension.
CertPathReviewer.policyExtError.details = Policy checking failed: there was an error processing the certificate policy extension.
# error processing policy constraints extension
CertPathReviewer.policyConstExtError.title = Policy checking failed
CertPathReviewer.policyConstExtError.text = Policy checking failed: there was an error processing the policy constraints extension.
CertPathReviewer.policyConstExtError.summary = Error processing the policy constraints extension.
CertPathReviewer.policyConstExtError.details = Policy checking failed: there was an error processing the policy constraints extension.
# error processing policy mapping extension
CertPathReviewer.policyMapExtError.title = Policy checking failed
CertPathReviewer.policyMapExtError.text = Policy checking failed: there was an error processing the policy mapping extension.
CertPathReviewer.policyMapExtError.summary = Error processing the policy mapping extension.
CertPathReviewer.policyMapExtError.details = Policy checking failed: there was an error processing the policy mapping extension.
# error processing inhibit any policy extension
CertPathReviewer.policyInhibitExtError.title = Policy checking failed
CertPathReviewer.policyInhibitExtError.text = Policy checking failed: there was an error processing the inhibit any policy extension.
CertPathReviewer.policyInhibitExtError.summary = Error processing the inhibit any policy extension.
CertPathReviewer.policyInhibitExtError.details = Policy checking failed: there was an error processing the inhibit any policy extension.
# error building qualifier set
CertPathReviewer.policyQualifierError.title = Policy checking failed
CertPathReviewer.policyQualifierError.text = Policy checking failed: error building the policy qualifier set.
CertPathReviewer.policyQualifierError.summary = Policy checking failed: error building the policy qualifier set.
CertPathReviewer.policyQualifierError.details = Policy checking failed: error building the policy qualifier set.
# no valid policy tree - explicit policy required
CertPathReviewer.noValidPolicyTree.title = Policy checking failed
CertPathReviewer.noValidPolicyTree.text = Policy checking failed: no valid policy tree found when one expected.
CertPathReviewer.noValidPolicyTree.summary = Policy checking failed: no valid policy tree found when one expected.
CertPathReviewer.noValidPolicyTree.details = Policy checking failed: no valid policy tree found when one expected.
# expicit policy requested, but no policy available
CertPathReviewer.explicitPolicy.title = Policy checking failed
CertPathReviewer.explicitPolicy.text = Policy checking failed: explicit policy requested but no policy available.
CertPathReviewer.explicitPolicy.summary = Policy checking failed: explicit policy requested but no policy available.
CertPathReviewer.explicitPolicy.details = Policy checking failed: explicit policy requested but no policy available.
# path processing failed on policy
CertPathReviewer.invalidPolicy.title = Path processing failed on policy
CertPathReviewer.invalidPolicy.text = Path processing failed on policy.
CertPathReviewer.invalidPolicy.summary = Path processing failed on policy.
CertPathReviewer.invalidPolicy.details = Path processing failed on policy.
# invalid policy mapping
CertPathReviewer.invalidPolicyMapping.title = Invalid policy mapping
CertPathReviewer.invalidPolicyMapping.text = Certificate contains an invalid policy mapping.
CertPathReviewer.invalidPolicyMapping.summary = Certificate contains an invalid policy mapping.
CertPathReviewer.invalidPolicyMapping.details = Certificate contains a policy mapping including the value any policy which is invalid.
## check CRL notifications
# found local valid CRL
# {0} thisUpdate of the CRL
# {1} nextUpdate of the CRL
CertPathReviewer.localValidCRL.title = Found valid local CRL
CertPathReviewer.localValidCRL.text = Found a valid CRL in local certstore. Issued on {0,date}, next update {1,date}.
CertPathReviewer.localValidCRL.summary = Found a valid CRL in local certstore. Issued on {0,date}, next update {1,date}.
CertPathReviewer.localValidCRL.details = Found a valid CRL in local certstore. Issued on {0,date}, next update {1,date}.
# found matching CRL, but not valid
# {0} thisUpdate of the CRL
# {1} nextUpdate of the CRL
CertPathReviewer.localInvalidCRL.title = Local CRL outdated
CertPathReviewer.localInvalidCRL.text = Did not use a matching CRL in a local certstore, because it is outdated. Issued on {0,date}, next update {1,date}.
CertPathReviewer.localInvalidCRL.summary = Did not use a matching CRL in a local certstore, because it is outdated. Issued on {0,date}, next update {1,date}.
CertPathReviewer.localInvalidCRL.details = Did not use a matching CRL in a local certstore, because it is outdated. Issued on {0,date}, next update {1,date}.
# found a valid crl at crl distribution point
# {0} thisUpdate of the CRL
# {1} nextUpdate of the CRL
# {2} the url of the distribution point
CertPathReviewer.onlineValidCRL.title = Found valid CRL at CRL distribution point
CertPathReviewer.onlineValidCRL.text = Found a valid CRL at: {2}. Issued on {0,date}, next update on {1,date}.
CertPathReviewer.onlineValidCRL.summary = Found a valid CRL at: {2}. Issued on {0,date}, next update on {1,date}.
CertPathReviewer.onlineValidCRL.details = Found a valid CRL at: {2}. Issued on {0,date}, next update on {1,date}.
# found an invalid CRL at crl distribution point
# {0} thisUpdate of the CRL
# {1} nextUpdate of the CRL
# {2} the url of the distribution point
CertPathReviewer.onlineInvalidCRL.title = Outdated CRL at CRL distribution point
CertPathReviewer.onlineInvalidCRL.text = The CRL loaded from {2} was outdated. Issued on {0,date}, next update on {1,date}.
CertPathReviewer.onlineInvalidCRL.summary = The CRL loaded from {2} was outdated. Issued on {0,date}, next update on {1,date}.
CertPathReviewer.onlineInvalidCRL.details = The CRL loaded from {2} was outdated. Issued on {0,date}, next update on {1,date}.
#found a CRL at a crl distribution point, but issued by another CA
# {0} issuer of the CRL
# {1} expected issuer
# {2} the url of the distribution point
CertPathReviewer.onlineCRLWrongCA.title = CRL from wrong issuer at CRL distribution point
CertPathReviewer.onlineCRLWrongCA.text = The CRL loaded from {2} has was issued by {0}, excpected {1}.
CertPathReviewer.onlineCRLWrongCA.summary = The CRL loaded from {2} has a wrong issuer.
CertPathReviewer.onlineCRLWrongCA.details = The CRL loaded from {2} has was issued by {0}, excpected {1}.
# Certificate not revoked
CertPathReviewer.notRevoked.title = Certificate not revoked
CertPathReviewer.notRevoked.text = The certificate was not revoked.
CertPathReviewer.notRevoked.summary = The certificate was not revoked.
CertPathReviewer.notRevoked.details = The certificate was not revoked.
# CRL found: certificate was revoked, but after the validationDate
# {0} the date the certificate was revoked
# {1} the reason for revoking the certificate
CertPathReviewer.revokedAfterValidation.title = Certificate was revoked after the validation date
CertPathReviewer.revokedAfterValidation.text = The certificate was revoked after the validation date at {0,date} {0,time,full}. Reason: {1}.
CertPathReviewer.revokedAfterValidation.summary = The certificate was revoked after the validation date at {0,date} {0,time,full}.
CertPathReviewer.revokedAfterValidation.details = The certificate was revoked after the validation date at {0,date} {0,time,full}. Reason: {1}.
# updated crl available
# {0} date since when the update is available
CertPathReviewer.crlUpdateAvailable.title = CRL update available
CertPathReviewer.crlUpdateAvailable.text = An update for the CRL of this certificate is available since {0,date} {0,time,full}.
CertPathReviewer.crlUpdateAvailable.summary = An update for the CRL of this certificate is available since {0,date} {0,time,full}.
CertPathReviewer.crlUpdateAvailable.details = An update for the CRL of this certificate is available since {0,date} {0,time,full}.
# crl distribution point url
# {0} the crl distribution point url as String
CertPathReviewer.crlDistPoint.title = CRL distribution point
CertPathReviewer.crlDistPoint.text = A CRL can be obtained from: {0}.
CertPathReviewer.crlDistPoint.summary = A CRL can be obtained from: {0}.
CertPathReviewer.crlDistPoint.details = A CRL can be obtained from: {0}.
# ocsp location
# {0} the url on which the ocsp service can be found
CertPathReviewer.ocspLocation.title = OCSP responder location
CertPathReviewer.ocspLocation.text = OCSP responder location: {0}.
CertPathReviewer.ocspLocation.summary = OCSP responder location: {0}.
CertPathReviewer.ocspLocation.details = OCSP responder location: {0}.
# unable to get crl from crl distribution point
# {0} the url of the distribution point
# {1} the message of the occurred exception
# {2} the occurred exception
# {3} the name of the exception
CertPathReviewer.loadCrlDistPointError.title = Cannot load CRL from CRL distribution point
CertPathReviewer.loadCrlDistPointError.text = Unable to load a CRL from: {0}. A {3} occurred.
CertPathReviewer.loadCrlDistPointError.summary = Unable to load a CRL from: {0}. A {3} occurred.
CertPathReviewer.loadCrlDistPointError.details = Unable to load a CRL from: {0}. A {3} occurred. Cause: {1}.
# no crl found in certstores
# {0} the issuers which we searched for
# {1} list of crl issuer names that are found in the certstores
# {2} number of crls in the certstores
CertPathReviewer.noCrlInCertstore.title = No matching CRL found in local CRL store
CertPathReviewer.noCrlInCertstore.text = No matching CRL was found in the provided local CRL store.
CertPathReviewer.noCrlInCertstore.summary = No matching CRL was found in the provided local CRL store.
CertPathReviewer.noCrlInCertstore.details = No matching CRL was found in the provided local CRL store. \
No CRL was found for the selector "{0}". The {2} CRL(s) in the certstores are from "{1}".
## check CRL exceptions
# cannot extract issuer from certificate
CertPathReviewer.crlIssuerException.title = CRL checking failed
CertPathReviewer.crlIssuerException.text = CRL checking failed: cannot extract issuer from certificate.
CertPathReviewer.crlIssuerException.summary = CRL checking failed: cannot extract issuer from certificate.
CertPathReviewer.crlIssuerException.details = CRL checking failed: cannot extract issuer from certificate.
# cannot extract crls
# {0} message from the underlying exception
# {1} the underlying exception
# {2} the name of the exception
CertPathReviewer.crlExtractionError.title = CRL checking failed
CertPathReviewer.crlExtractionError.text = CRL checking failed: Cannot extract CRL from CertStore. There was a {2}.
CertPathReviewer.crlExtractionError.summary = CRL checking failed: Cannot extract CRL from CertStore. There was a {2}.
CertPathReviewer.crlExtractionError.details = CRL checking failed: Cannot extract CRL from CertStore. There was a {2}. Cause: {0}.
# Issuer certificate key usage extension does not permit crl signing
CertPathReviewer.noCrlSigningPermited.title = CRL checking failed
CertPathReviewer.noCrlSigningPermited.text = CRL checking failed: issuer certificate does not permit CRL signing.
CertPathReviewer.noCrlSigningPermited.summary = CRL checking failed: issuer certificate does not permit CRL signing.
CertPathReviewer.noCrlSigningPermited.details = CRL checking failed: issuer certificate does not permit CRL signing.
# can not verify crl: issuer public key unknown
CertPathReviewer.crlNoIssuerPublicKey.title = CRL checking failed
CertPathReviewer.crlNoIssuerPublicKey.text = CRL checking failed: Can not verify the CRL: Issuer public key is unknown.
CertPathReviewer.crlNoIssuerPublicKey.summary = CRL checking failed: Can not verify the CRL: Issuer public key is unknown.
CertPathReviewer.crlNoIssuerPublicKey.details = CRL checking failed: Can not verify the CRL: Issuer public key is unknown.
# crl verification failed
CertPathReviewer.crlVerifyFailed.title = CRL checking failed
CertPathReviewer.crlVerifyFailed.text = CRL checking failed: CRL signature is invalid.
CertPathReviewer.crlVerifyFailed.summary = CRL checking failed: CRL signature is invalid.
CertPathReviewer.crlVerifyFailed.details = CRL checking failed: CRL signature is invalid.
# no valid CRL found
CertPathReviewer.noValidCrlFound.title = CRL checking failed
CertPathReviewer.noValidCrlFound.text = CRL checking failed: no valid CRL found.
CertPathReviewer.noValidCrlFound.summary = CRL checking failed: no valid CRL found.
CertPathReviewer.noValidCrlFound.details = CRL checking failed: no valid CRL found.
# No base CRL for delta CRL
CertPathReviewer.noBaseCRL.title = CRL checking failed
CertPathReviewer.noBaseCRL.text = CRL checking failed: no base CRL found for delta CRL.
CertPathReviewer.noBaseCRL.summary = CRL checking failed: no base CRL found for delta CRL.
CertPathReviewer.noBaseCRL.details = CRL checking failed: no base CRL found for delta CRL.
# certificate revoked
# {0} the date the certificate was revoked
# {1} the reason for revoking the certificate
CertPathReviewer.certRevoked.title = Certificate was revoked
CertPathReviewer.certRevoked.text = The certificate was revoked at {0,date} {0,time,full}. Reason: {1}.
CertPathReviewer.certRevoked.summary = The certificate was revoked at {0,date} {0,time,full}.
CertPathReviewer.certRevoked.details = The certificate was revoked at {0,date} {0,time,full}. Reason: {1}.
# error processing issuing distribution point extension
CertPathReviewer.distrPtExtError.title = CRL checking failed
CertPathReviewer.distrPtExtError.text = CRL checking failed: there was an error processing the issuing distribution point extension.
CertPathReviewer.distrPtExtError.summary = Error processing the issuing distribution point extension.
CertPathReviewer.distrPtExtError.details = CRL checking failed: there was an error processing the issuing distribution point extension.
# error processing crl distribution points extension
CertPathReviewer.crlDistPtExtError.title = CRL checking failed
CertPathReviewer.crlDistPtExtError.text = CRL checking failed: there was an error processing the crl distribution points extension.
CertPathReviewer.crlDistPtExtError.summary = Error processing the crl distribution points extension.
CertPathReviewer.crlDistPtExtError.details = CRL checking failed: there was an error processing the crl distribution points extension.
# error processing the authority info access extension
CertPathReviewer.crlAuthInfoAccError.title = CRL checking failed
CertPathReviewer.crlAuthInfoAccError.text = CRL checking failed: there was an error processing the authority info access extension.
CertPathReviewer.crlAuthInfoAccError.summary = Error processing the authority info access extension.
CertPathReviewer.crlAuthInfoAccError.details = CRL checking failed: there was an error processing the authority info access extension.
# error processing delta crl indicator extension
CertPathReviewer.deltaCrlExtError.title = CRL checking failed
CertPathReviewer.deltaCrlExtError.text = CRL checking failed: there was an error processing the delta CRL indicator extension.
CertPathReviewer.deltaCrlExtError.summary = Error processing the delta CRL indicator extension.
CertPathReviewer.deltaCrlExtError.details = CRL checking failed: there was an error processing the delta CRL indicator extension.
# error porcessing crl number extension
CertPathReviewer.crlNbrExtError.title = CRL checking failed
CertPathReviewer.crlNbrExtError.text = CRL checking failed: there was an error processing the CRL number extension.
CertPathReviewer.crlNbrExtError.summary = Error processing the CRL number extension.
CertPathReviewer.crlNbrExtError.details = CRL checking failed: there was an error processing the CRL number extension.
# error processing crl reason code extension
CertPathReviewer.crlReasonExtError.title = CRL checking failed
CertPathReviewer.crlReasonExtError.text = CRL checking failed: there was an error processing the CRL reason code extension.
CertPathReviewer.crlReasonExtError.summary = Error processing the CRL reason code extension.
CertPathReviewer.crlReasonExtError.details = CRL checking failed: there was an error processing the CRL reason code extension.
# error processing basic constraints extension
CertPathReviewer.crlBCExtError.title = CRL checking failed
CertPathReviewer.crlBCExtError.text = CRL checking failed: there was an error processing the basic constraints extension.
CertPathReviewer.crlBCExtError.summary = Error processing the basic constraints extension.
CertPathReviewer.crlBCExtError.details = CRL checking failed: there was an error processing the basic constraints extension.
# CA Cert CRL only contains user certificates
CertPathReviewer.crlOnlyUserCert.title = CRL checking failed
CertPathReviewer.crlOnlyUserCert.text = CRL checking failed: CRL only contains user certificates.
CertPathReviewer.crlOnlyUserCert.summary = CRL checking failed: CRL only contains user certificates.
CertPathReviewer.crlOnlyUserCert.details = CRL checking failed: CRL for CA certificate only contains user certificates.
# End CRL only contains CA certificates
CertPathReviewer.crlOnlyCaCert.title = CRL checking failed
CertPathReviewer.crlOnlyCaCert.text = CRL checking failed: CRL only contains CA certificates.
CertPathReviewer.crlOnlyCaCert.summary = CRL checking failed: CRL only contains CA certificates.
CertPathReviewer.crlOnlyCaCert.details = CRL checking failed: CRL for end certificate only contains CA certificates.
# onlyContainsAttributeCerts boolean is asserted
CertPathReviewer.crlOnlyAttrCert.title = CRL checking failed
CertPathReviewer.crlOnlyAttrCert.text = CRL checking failed: CRL only contains attribute certificates.
CertPathReviewer.crlOnlyAttrCert.summary = CRL checking failed: CRL only contains attribute certificates.
CertPathReviewer.crlOnlyAttrCert.details = CRL checking failed: CRL only contains attribute certificates.
## QcStatement notifications
# unkown statement
# {0} statement OID
# {1} statement as ANS1Sequence
CertPathReviewer.QcUnknownStatement.title = Unknown statement in QcStatement extension
CertPathReviewer.QcUnknownStatement.text = Unknown statement in QcStatement extension: OID = {0}
CertPathReviewer.QcUnknownStatement.summary = Unknown statement in QcStatement extension: OID = {0}
CertPathReviewer.QcUnknownStatement.details = Unknown statement in QcStatement extension: OID = {0}, statement = {1}
# QcLimitValue Alpha currency code
# {0} currency code
# {1} limit value
# {2} monetary value as MonetaryValue
CertPathReviewer.QcLimitValueAlpha.title = Transaction Value Limit
CertPathReviewer.QcLimitValueAlpha.text = This certificate has a limit for the transaction value: {1,number, ###,###,###,##0.00#} {0}.
CertPathReviewer.QcLimitValueAlpha.summary = Transaction value limit: {1,number, ###,###,###,##0.00#} {0}.
CertPathReviewer.QcLimitValueAlpha.details = This certificate has a limitation on the value of transaction for which this certificate can be used to the specified amount, according to the Directive 1999/93/EC of the European Parliament and of the Council of 13 December 1999 on a Community framework for electronic signatures, as implemented in the law of the country specified in the issuer field of this certificate. The limit for this certificate is {1,number, ###,###,###,##0.00#} {0}.
# QcLimitValue Numeric currency code
# {0} currency code
# {1} limit value
# {2} monetary value as MonetaryValue
CertPathReviewer.QcLimitValueNum.title = Transaction Value Limit
CertPathReviewer.QcLimitValueNum.text = This certificate has a limit for the transaction value: {1,number, ###,###,###,##0.00#} of currency {0} (See RFC 4217 for currency codes).
CertPathReviewer.QcLimitValueNum.summary = Transaction value limit: {1,number, ###,###,###,##0.00#} of currency {0} (See RFC 4217 for currency codes).
CertPathReviewer.QcLimitValueNum.details = This certificate has a limitation on the value of transaction for which this certificate can be used to the specified amount, according to the Directive 1999/93/EC of the European Parliament and of the Council of 13 December 1999 on a Community framework for electronic signatures, as implemented in the law of the country specified in the issuer field of this certificate. The limit for this certificate is {1,number, ###,###,###,##0.00#} of currency {0} (See RFC 4217 for currency codes).
# QcSSCD
CertPathReviewer.QcSSCD.title = QcSSCD Statement
CertPathReviewer.QcSSCD.text = (SSCD) The issuer claims that for the certificate where this statement appears that the private key associated with the public key in the certificate is protected according to Annex III of the Directive 1999/93/EC of the European Parliament and of the Council of 13 December 1999 on a Community framework for electronic signatures.
CertPathReviewer.QcSSCD.summary = (SSCD) The issuer claims that for the certificate where this statement appears that the private key associated with the public key in the certificate is protected according to Annex III of the Directive 1999/93/EC of the European Parliament and of the Council of 13 December 1999 on a Community framework for electronic signatures.
CertPathReviewer.QcSSCD.details = (SSCD) The issuer claims that for the certificate where this statement appears that the private key associated with the public key in the certificate is protected according to Annex III of the Directive 1999/93/EC of the European Parliament and of the Council of 13 December 1999 on a Community framework for electronic signatures.
# QcEuCompliance
CertPathReviewer.QcEuCompliance.title = Qualified Certificate
CertPathReviewer.QcEuCompliance.text = This certificate is issued as a Qualified Certificate according Annex I and II of the Directive 1999/93/EC of the European Parliament and of the Council of 13 December 1999 on a Community framework for electronic signatures, as implemented in the law of the country specified in the issuer field of this certificate.
CertPathReviewer.QcEuCompliance.summary = This certificate is issued as a Qualified Certificate according Annex I and II of the Directive 1999/93/EC of the European Parliament and of the Council of 13 December 1999 on a Community framework for electronic signatures, as implemented in the law of the country specified in the issuer field of this certificate.
CertPathReviewer.QcEuCompliance.details = This certificate is issued as a Qualified Certificate according Annex I and II of the Directive 1999/93/EC of the European Parliament and of the Council of 13 December 1999 on a Community framework for electronic signatures, as implemented in the law of the country specified in the issuer field of this certificate.
## QcStatement errors
# error processing the QcStatement extension
CertPathReviewer.QcStatementExtError.title = Error processing the qc statements extension
CertPathReviewer.QcStatementExtError.text = Error processing the qc statements extension.
CertPathReviewer.QcStatementExtError.summary = Error processing the qc statements extension.
CertPathReviewer.QcStatementExtError.details = Error processing the qc statements extension.
## unknown/generic errors
CertPathReviewer.unknown.title = Unexpected Error
CertPathReviewer.unknown.text = Unexpected Error {0}
CertPathReviewer.unknown.summary = Unexpected Error
CertPathReviewer.unknown.details = Unexpected Error {0}
#
# crl reasons
#
unspecified = Unspecified
keyCompromise = Key Compromise
cACompromise = CA Compromise
affiliationChanged = Affiliation Changed
superseded = Superseded
cessationOfOperation = Cessation of Operation
certificateHold = Certificate Hold
unknown = Unknown
removeFromCRL = Remove from CRL
privilegeWithdrawn = Privilege Withdrawn
aACompromise = AA Compromise
#
#
#
missingIssuer = The missing certificate was issued by
missingSerial = with the serial number
@@ -1,621 +0,0 @@
## constructor exceptions
# cert path is empty
CertPathReviewer.emptyCertPath.title = Zertifizierungspfad ist leer
CertPathReviewer.emptyCertPath.text = PKIXCertPathReviewer: der Zertifizierungspfad ist leer.
CertPathReviewer.emptyCertPath.summary = PKIXCertPathReviewer: der Zertifizierungspfad ist leer.
CertPathReviewer.emptyCertPath.details = PKIXCertPathReviewer: der Zertifizierungspfad ist leer.
## name constraints processing errors
# cert DN is not in the permitted tree
# {0} DN as String
CertPathReviewer.notPermittedDN.title = Fehler bei der Namensbeschränkung: Zertifikats DN ist nicht erlaubt
CertPathReviewer.notPermittedDN.text = Fehler bei der Namensbeschränkung: Der Zertifikats DN {0} ist nicht erlaubt.
CertPathReviewer.notPermittedDN.summary = Fehler bei der Namensbeschränkung: Der Zertifikats DN ist nicht erlaubt.
CertPathReviewer.notPermittedDN.details = Fehler bei der Namensbeschränkung: Der Zertifikats DN {0} ist nicht im Set der erlaubten DNs.
# cert DN is in the excluded tree
# {0} DN as String
CertPathReviewer.excludedDN.title = Fehler bei der Namensbeschränkung: Zertifikats DN ist ausgeschlossen
CertPathReviewer.excludedDN.text = Fehler bei der Namensbeschränkung: Der Zertifikats DN {0} ist ausgeschlossen.
CertPathReviewer.excludedDN.summary = Fehler bei der Namensbeschränkung: Der Zertifikats DN ist ausgeschlossen
CertPathReviewer.excludedDN.details = Fehler bei der Namensbeschränkung: Der Zertifikats DN ist {0} is innerhalb des Sets von ausgeschlossenen DNs.
# cert email is not in the permitted tree
# {0} email address as String
CertPathReviewer.notPermittedEmail.title = Fehler bei der Namensbeschränkung: nicht erlaubte Email Addresse
CertPathReviewer.notPermittedEmail.text = Fehler bei der Namensbeschränkung: Das Zertifikat enthält die nicht erlaubte Email Addresse {0}.
CertPathReviewer.notPermittedEmail.summary = Fehler bei der Namensbeschränkung: Die Email Addresse ist nicht erlaubt.
CertPathReviewer.notPermittedEmail.details = Fehler bei der Namensbeschränkung: Das Zertifikat enthält die Email Addresse {0}, welche nicht im Set der erlaubten Email Addressen ist.
# cert email is in the excluded tree
# {0} email as String
CertPathReviewer.excludedEmail.title = Fehler bei der Namensbeschränkung: Email Addresse ausgeschlossen
CertPathReviewer.excludedEmail.text = Fehler bei der Namensbeschränkung: Die Email Addresse {0} im Zertifikat ist ausgeschlossen.
CertPathReviewer.excludedEmail.summary = Fehler bei der Namensbeschränkung: Die Email Addresse ist ausgeschlossen.
CertPathReviewer.excludedEmail.details = Fehler bei der Namensbeschränkung: Das Zertifikat enthält die Email Addresse {0}, welche im Set der ausgeschlossenen Email Addressen ist.
# cert IP is not in the permitted tree
# {0} ip address as String
CertPathReviewer.notPermittedIP.title = Fehler bei der Namensbeschränkung: nicht erlaubte IP Addresse
CertPathReviewer.notPermittedIP.text = Fehler bei der Namensbeschränkung: Das Zertifikat enthält die nicht erlaubte IP Addresse {0}.
CertPathReviewer.notPermittedIP.summary = Fehler bei der Namensbeschränkung: Die IP Addresse ist nicht erlaubt.
CertPathReviewer.notPermittedIP.details = Fehler bei der Namensbeschränkung: Das Zertifikat enthält die IP Addresse {0}, welche nicht im Set der erlaubten IP Addressen ist.
# cert ip is in the excluded tree
# {0} ip address as String
CertPathReviewer.excludedIP.title = Fehler bei der Namensbeschränkung: Ausgeschlossene IP Addresse
CertPathReviewer.excludedIP.text = Fehler bei der Namensbeschränkung: Das Zertifikat enhält die ausgeschlossene IP Addresse {0}.
CertPathReviewer.excludedIP.summary = Fehler bei der Namensbeschränkung: Die IP Addresse im Zertifikat ist ausgeschlossen.
CertPathReviewer.excludedIP.details = Fehler bei der Namensbeschränkung: Das Zertifikat enthält die IP Addresse {0}, welche im Set der ausgeschlossenen IP Addressen ist.
# error processing the name constraints extension
CertPathReviewer.ncExtError.title = Prüfen der Namensbeschränkungen fehlgeschlagen
CertPathReviewer.ncExtError.text = Prüfen der Namensbeschränkungen fehlgeschlagen: Es gab Fehler bei der Verarbeitung der Name Constraints Erweiterung des Zertifikats.
CertPathReviewer.ncExtError.summary = Prüfen der Namensbeschränkungen fehlgeschlagen: Fehler bei der Verarbeitung der Name Constraints Erweiterung.
CertPathReviewer.ncExtError.details = Prüfen der Namensbeschränkungen fehlgeschlagen: Es gab Fehler bei der Verarbeitung der Name Constraints Erweiterung des Zertifikats.
# error processing the subject alternative name extension
CertPathReviewer.subjAltNameExtError.title = Prüfen der Namensbeschränkungen fehlgeschlagen
CertPathReviewer.subjAltNameExtError.text = Prüfen der Namensbeschränkungen fehlgeschlagen: Es gab Fehler bei der Verarbeitung der Subject Alternative Name Erweiterung des Zertifikats.
CertPathReviewer.subjAltNameExtError.summary = Prüfen der Namensbeschränkungen fehlgeschlagen: Fehler bei der Verarbeitung der Subject Alternative Name Erweiterung.
CertPathReviewer.subjAltNameExtError.details = Prüfen der Namensbeschränkungen fehlgeschlagen: Es gab Fehler bei der Verarbeitung der Subject Alternative Name Erweiterung des Zertifikats.
# exception extracting subject name when checking subtrees
# {0} subject Principal
CertPathReviewer.ncSubjectNameError.title = Prüfen der Namensbeschränkungen fehlgeschlagen
CertPathReviewer.ncSubjectNameError.text = Prüfen der Namensbeschränkungen fehlgeschlagen: Es gab einen Fehler beim auslesen des DN des Zertifikats.
CertPathReviewer.ncSubjectNameError.summary = Prüfen der Namensbeschränkungen fehlgeschlagen: Fehler beim auslesen des DNs.
CertPathReviewer.ncSubjectNameError.details = Prüfen der Namensbeschränkungen fehlgeschlagen: Es gab einen Fehler beim auslesen des DN des Zertifikats.
## path length errors
# max path length extended
CertPathReviewer.pathLengthExtended.title = Maximale Pfadlänge überschritten
CertPathReviewer.pathLengthExtended.text = Zertifizierungspfad ungültig: die Maximale Pfadlänge ist überschritten.
CertPathReviewer.pathLengthExtended.summary = Zertifizierungspfad ungültig: die Maximale Pfadlänge ist überschritten.
CertPathReviewer.pathLengthExtended.details = Zertifizierungspfad ungültig: die Maximale Pfadlänge ist überschritten.
# error reading length constraint from basic constraint extension
CertPathReviewer.processLengthConstError.title = Prüfen der Pfadlänge fehlgeschlagen
CertPathReviewer.processLengthConstError.text = Prüfen der Pfadlänge fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der subject alternative name Erweiterung des Zertifikats.
CertPathReviewer.processLengthConstError.summary = Fehler bei der Verarbeitung der subject alternative name Erweiterung.
CertPathReviewer.processLengthConstError.details = Prüfen der Pfadlänge fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der subject alternative name Erweiterung des Zertifikats.
## path length notifications
# total path length as defined in rfc 3280
# {0} the path length as Integer
CertPathReviewer.totalPathLength.title = Totale Pfadlänge
CertPathReviewer.totalPathLength.text = Die totale Pfadlänge ohne self-signed Zertifikate ist {0}.
CertPathReviewer.totalPathLength.summary = Die totale Pfadlänge ohne self-signed Zertifikate ist {0}.
CertPathReviewer.totalPathLength.details = Die totale Pfadlänge ohne self-signed Zertifikate, wie beschrieben in RFC 3280, ist {0}.
## critical extensions errors
# one unknown critical extension
# {0} extension as String
CertPathReviewer.unknownCriticalExt.title = Unbekannte kritische Erweiterung
CertPathReviewer.unknownCriticalExt.text = Das Zertifikat enhält eine unbekannte kritische Erweiterung mit der OID {0}.
CertPathReviewer.unknownCriticalExt.summary = Unbekannte kritische Erweiterung: {0}.
CertPathReviewer.unknownCriticalExt.details = Das Zertifikat enhält eine unbekannte kritische Erweiterung mit der OID {0}.
# more unknown critical extensions
# {0} extensions as Set of Strings
CertPathReviewer.unknownCriticalExts.title = Unbekannte kritische Erweiterung
CertPathReviewer.unknownCriticalExts.text = Das Zertifikat enhält zwei oder mehr unbekannte kritische Erweiterungen mit den OIDs {0}.
CertPathReviewer.unknownCriticalExts.summary = Unbekannte kritische Erweiterungen: {0}.
CertPathReviewer.unknownCriticalExts.details = Das Zertifikat enhält zwei oder mehr unbekannte kritische Erweiterungen mit den OIDs {0}.
# error processing critical extension
# {0} the message of the underlying exception
# {1} the underlying exception
# {2} the name of the exception
CertPathReviewer.criticalExtensionError.title = Fehler bei der Verarbeitung einer kritischen Erweiterung
CertPathReviewer.criticalExtensionError.text = Fehler bei der Verarbeitung einer kritischen Erweiterung. Es gab eine {2}.
CertPathReviewer.criticalExtensionError.summary = Fehler bei der Verarbeitung einer kritischen Erweiterung. Es gab eine {2}.
CertPathReviewer.criticalExtensionError.details = Fehler bei der Verarbeitung einer kritischen Erweiterung. Es gab eine {2}. Grund: {0}.
# error initializing the certpath checkers
# {0} the message of the underlying exception
# {1} the underlying exception
# {2} the name of the exception
CertPathReviewer.certPathCheckerError.title = Prüfen der kritischen Erweiterungen fehlgeschlagen
CertPathReviewer.certPathCheckerError.text = Prüfen der kritischen Erweiterungen fehlgeschlagen: Es gab eine {2} bei der Initialisierung eines CertPathChecker.
CertPathReviewer.certPathCheckerError.summary = Prüfen der kritischen Erweiterungen fehlgeschlagen: {2} bei der Initialisierung eines CertPathChecker.
CertPathReviewer.certPathCheckerError.details = Prüfen der kritischen Erweiterungen fehlgeschlagen: Es gab eine {2} bei der Initialisierung eines CertPathChecker. Grund: {0}
## check signature errors
CertPathReviewer.rootKeyIsValidButNotATrustAnchor.title = rootKeyIsValidButNotATrustAnchor
CertPathReviewer.rootKeyIsValidButNotATrustAnchor.text = Das Zertifikat hat eine gültige Signatur, ist aber kein vertrauenswürdiges Root Zertifikat.
CertPathReviewer.rootKeyIsValidButNotATrustAnchor.summary = Das Zertifikat hat eine gültige Signatur, ist aber kein vertrauenswürdiges Root Zertifikat.
CertPathReviewer.rootKeyIsValidButNotATrustAnchor.details = Das Zertifikat hat eine gültige Signatur, ist aber kein vertrauenswürdiges Root Zertifikat.
# trustanchor found, but certificate validation failed
CertPathReviewer.trustButInvalidCert.title = Vertrauenswürdiges Root Zertifikat invalid
CertPathReviewer.trustButInvalidCert.text = Ein Root Zertifikat wurde gefunden. Es hat aber einen anderen öffentlichen Schlüssel als verwendet wurde um das erste Zertifikat des Zertifizierungspfades zu signieren.
CertPathReviewer.trustButInvalidCert.summary = Ein Root Zertifikat wurde gefunden. Es hat aber einen anderen öffentlichen Schlüssel als verwendet wurde um das erste Zertifikat des Zertifizierungspfades zu signieren.
CertPathReviewer.trustButInvalidCert.details = Ein Root Zertifikat wurde gefunden. Es hat aber einen anderen öffentlichen Schlüssel als verwendet wurde um das erste Zertifikat des Zertifizierungspfades zu signieren.
# trustanchor - cannot extract issuer
CertPathReviewer.trustAnchorIssuerError.title = Kann kein vertrauenswürdiges Root Zertifikat finden
CertPathReviewer.trustAnchorIssuerError.text = Kann kein vertrauenswürdiges Root Zertifikat finden: Der Herausgeber vom Zertifikat kann nicht auslesen werden.
CertPathReviewer.trustAnchorIssuerError.summary = Kann kein vertrauenswürdiges Root Zertifikat finden: Der Herausgeber vom Zertifikat kann nicht auslesen werden.
CertPathReviewer.trustAnchorIssuerError.details = Kann kein vertrauenswürdiges Root Zertifikat finden: Der Herausgeber vom Zertifikat kann nicht auslesen werden.
# no trustanchor was found for the certificate path
# {0} issuer of the root certificate of the path
# {1} number of trusted root certificates (trustanchors) provided
CertPathReviewer.noTrustAnchorFound.title = Kein vertrauenswürdiges Root Zertifikat gefunden
CertPathReviewer.noTrustAnchorFound.text = Das Root Zertifikat der Zertifizierungspfads wurde nicht von einer vertrauenswürdigen CA ausgestellt. Der Name der CA ist "{0}".
CertPathReviewer.noTrustAnchorFound.summary = Das Root Zertifikat der Zertifizierungspfads wurde nicht von einer vertrauenswürdigen CA ausgestellt.
CertPathReviewer.noTrustAnchorFound.details = Das Root Zertifikat der Zertifizierungspfads wurde nicht von einer vertrauenswürdigen CA ausgestellt. Der Name der CA ist "{0}". Der Root-Zertifikat-Speicher enthält {1} CA(s).
# conflicting trust anchors
# {0} number of trustanchors found (Integer)
# {1} the ca name
CertPathReviewer.conflictingTrustAnchors.title = Korrupter Root-Zertifikat-Speicher
CertPathReviewer.conflictingTrustAnchors.text = Warnung: Es sind {0} öffentliche Schlüssel für die CA "{1}" im Root-Zertifikat-Speicher vorhanden - bitte prüfen Sie mit der CA welches der richtige Schlüssel ist.
CertPathReviewer.conflictingTrustAnchors.summary = Warnung: Es sind {0} öffentliche Schlüssel für die CA "{1}" im Root-Zertifikat-Speicher vorhanden - bitte prüfen Sie mit der CA welches der richtige Schlüssel ist.
CertPathReviewer.conflictingTrustAnchors.details = Warnung: Es sind {0} öffentliche Schlüssel für die CA "{1}" im Root-Zertifikat-Speicher vorhanden - bitte prüfen Sie mit der CA welches der richtige Schlüssel ist.
# trustanchor DN is invalid
# {0} DN of the Trustanchor
CertPathReviewer.trustDNInvalid.title = DN des vertrauenswürdigen Root Zertifikats mit falschem Format.
CertPathReviewer.trustDNInvalid.text = Der DN des vertrauenswürdigen Root Zertifikats hat ein falsches Format: {0}.
CertPathReviewer.trustDNInvalid.summary = Der DN des vertrauenswürdigen Root Zertifikats hat ein falsches Format: {0}.
CertPathReviewer.trustDNInvalid.details = Der DN des vertrauenswürdigen Root Zertifikats hat ein falsches Format: {0}. Es ist kein gültiger X.500 Name. Siehe RFC 1779 oder RFC 2253.
# trustanchor public key algorithm error
CertPathReviewer.trustPubKeyError.title = Fehler bei der Verarbeitung des öffentlichen Schlüssels der vertrauenswürdigen Root Zertifikats
CertPathReviewer.trustPubKeyError.text = Fehler bei der Verarbeitung des öffentlichen Schlüssels der vertrauenswürdigen Root Zertifikats.
CertPathReviewer.trustPubKeyError.summary = Fehler bei der Verarbeitung des öffentlichen Schlüssels der vertrauenswürdigen Root Zertifikats.
CertPathReviewer.trustPubKeyError.details = Fehler bei der Verarbeitung des öffentlichen Schlüssels der vertrauenswürdigen Root Zertifikats. Der AlorithmIdentifier vom Schlüssel kann nicht ausgelesen werden.
# can not verifiy signature: issuer public key unknown
CertPathReviewer.NoIssuerPublicKey.title = Zertifikats Signatur kann nicht geprüft werden
CertPathReviewer.NoIssuerPublicKey.text = Die Zertifikats Signatur kann nicht geprüft werden: Der öffentliche Schlüssel des Herausgebers ist unbekannt.
CertPathReviewer.NoIssuerPublicKey.summary = Die Zertifikats Signatur kann nicht geprüft werden: Der öffentliche Schlüssel des Herausgebers ist unbekannt.
CertPathReviewer.NoIssuerPublicKey.details = Die Zertifikats Signatur kann nicht geprüft werden: Der öffentliche Schlüssel des Herausgebers ist unbekannt.
# signature can not be verified
# {0} message of the underlying exception (english)
# {1} the underlying exception
# {2} the name of the exception
CertPathReviewer.signatureNotVerified.title = Zertifikats Signatur ist ungültig
CertPathReviewer.signatureNotVerified.text = Die Zertifikats Signatur ist ungültig. Es gab eine {2}.
CertPathReviewer.signatureNotVerified.summary = Die Zertifikats Signatur ist ungültig.
CertPathReviewer.signatureNotVerified.details = Die Zertifikats Signatur ist ungültig. Es gab eine {2}. Grund: {0}
# certificate expired
# {0} the date the certificate expired
CertPathReviewer.certificateExpired.title = Zertifikat ist abgelaufen
CertPathReviewer.certificateExpired.text = Das Zertifikat ist ungültig. Es ist am {0,date} {0,time,full} abgelaufen.
CertPathReviewer.certificateExpired.summary = Das Zertifikat ist abgelaufen am {0,date} {0,time,full}.
CertPathReviewer.certificateExpired.details = Das Zertifikat ist ungültig. Es ist am {0,date} {0,time,full} abgelaufen.
# certificate not yet valid
# {0} the date from which on the certificate is valid
CertPathReviewer.certificateNotYetValid.title = Das Zertifikat ist noch nicht gültig
CertPathReviewer.certificateNotYetValid.text = Das Zertifikat ist ungültig. Es ist erst gültig ab {0,date} {0,time,full}.
CertPathReviewer.certificateNotYetValid.summary = Das Zertifikat ist nicht gültig bis {0,date} {0,time,full}.
CertPathReviewer.certificateNotYetValid.details = Das Zertifikat ist ungültig. Es ist erst gültig ab {0,date} {0,time,full}.
# certificate invalid issuer DN
# {0} expected issuer DN as String
# {1} found issuer DN as String
CertPathReviewer.certWrongIssuer.title = Falscher Herausgeber
CertPathReviewer.certWrongIssuer.text = Das Herausgeber des Zertifikats ist ungültig. Erwartet {0}, gefunden {1}.
CertPathReviewer.certWrongIssuer.summary = Das Herausgeber des Zertifikats ist ungültig.
CertPathReviewer.certWrongIssuer.details = Das Herausgeber des Zertifikats ist ungültig. Erwartet {0}, gefunden {1}.
# intermediate certificate is no ca cert
CertPathReviewer.noCACert.title = Zertifikat ist kein CA Zertifikat
CertPathReviewer.noCACert.text = Das Zertifikat ist kein CA Zertifikat.
CertPathReviewer.noCACert.summary = Das Zertifikat ist kein CA Zertifikat.
CertPathReviewer.noCACert.details = Das Zertifikat ist kein CA Zertifikat, wird aber wie eines gebraucht.
# cert laks basic constraints
CertPathReviewer.noBasicConstraints.title = Zertifikat hat keine Basiseinschränkungen
CertPathReviewer.noBasicConstraints.text = Das Zertifikat hat keine Basiseinschränkungen.
CertPathReviewer.noBasicConstraints.summary = Das Zertifikat hat keine Basiseinschränkungen.
CertPathReviewer.noBasicConstraints.details = Das Zertifikat hat keine Basiseinschränkungen.
# error processing basic constraints
CertPathReviewer.errorProcesingBC.title = Fehler bei der Verarbeitung der Basiseinschränkungen
CertPathReviewer.errorProcesingBC.text = Es gab einen Fehler bei der Verarbeitung der Basiseinschränkungen des Zertifikats.
CertPathReviewer.errorProcesingBC.summary = Fehler bei der Verarbeitung der Basiseinschränkungen
CertPathReviewer.errorProcesingBC.details = Es gab einen Fehler bei der Verarbeitung der Basiseinschränkungen des Zertifikats.
# certificate not usable for signing certs
CertPathReviewer.noCertSign.title = Schlüssel nicht nutzbar für Zertifikatssignaturen
CertPathReviewer.noCertSign.text = Der Schlüssel kann nicht zum Signieren von Zertifikaten verwendet werden.
CertPathReviewer.noCertSign.summary = Der Schlüssel kann nicht zum Signieren von Zertifikaten verwendet werden.
CertPathReviewer.noCertSign.details = Der Schlüssel kann nicht zum Signieren von Zertifikaten verwendet werden.
# error processing public key
CertPathReviewer.pubKeyError.title = Fehler bei der Verarbeitung des öffentlichen Schlüssels
CertPathReviewer.pubKeyError.text = Fehler bei der Verarbeitung des öffentlichen Schlüssels des Zertifikats.
CertPathReviewer.pubKeyError.summary = Fehler bei der Verarbeitung des öffentlichen Schlüssels des Zertifikats.
CertPathReviewer.pubKeyError.details = Fehler bei der Verarbeitung des öffentlichen Schlüssels des Zertifikats. Der AlorithmIdentifier konnte nicht extrahiert werden.
## check signatures notifications
#
# trust anchor has no keyusage certSign
CertPathReviewer.trustKeyUsage.title = Root-Zertifikat Schlüsselverwendung
CertPathReviewer.trustKeyUsage.text = Das Root-Zertifikat darf nicht zum Signieren von Zertifikaten verwendet werden.
CertPathReviewer.trustKeyUsage.summary = Das Root-Zertifikat darf nicht zum Signieren von Zertifikaten verwendet werden.
CertPathReviewer.trustKeyUsage.details = Das Root-Zertifikat darf nicht zum Signieren von Zertifikaten verwendet werden.
# certificate path validation date
# {0} date for which the cert path is validated
# {1} current date
CertPathReviewer.certPathValidDate.title = Datum der Zertifikatspfad Validierung
CertPathReviewer.certPathValidDate.text = Der Zertifikatspfad wurde am {0,date} {0,time,full} angewendet. Er wurde am {1,date} {1,time,full} geprüft.
CertPathReviewer.certPathValidDate.summary = Der Zertifikatspfad wurde am {0,date} {0,time,full} angewendet. Er wurde am {1,date} {1,time,full} geprüft.
CertPathReviewer.certPathValidDate.details = Der Zertifikatspfad wurde am {0,date} {0,time,full} angewendet. Er wurde am {1,date} {1,time,full} geprüft.
## check policy errors
# error processing certificate policy extension
CertPathReviewer.policyExtError.title = Prüfen der Policy fehlgeschlagen
CertPathReviewer.policyExtError.text = Prüfen der Policy fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Policy Erweiterung.
CertPathReviewer.policyExtError.summary = Fehler bei der Verarbeitung der Policy Erweiterung.
CertPathReviewer.policyExtError.details = Prüfen der Policy fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Policy Erweiterung.
# error processing policy constraints extension
CertPathReviewer.policyConstExtError.title = Prüfen der Policy fehlgeschlagen
CertPathReviewer.policyConstExtError.text = Prüfen der Policy fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Policy Constraints Erweiterung.
CertPathReviewer.policyConstExtError.summary = Fehler bei der Verarbeitung der Policy Constraints Erweiterung.
CertPathReviewer.policyConstExtError.details = Prüfen der Policy fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Policy Constraints Erweiterung.
# error processing policy mapping extension
CertPathReviewer.policyMapExtError.title = Prüfen der Policy fehlgeschlagen
CertPathReviewer.policyMapExtError.text = Prüfen der Policy fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Policy Mapping Erweiterung.
CertPathReviewer.policyMapExtError.summary = Fehler bei der Verarbeitung der Policy Mapping Erweiterung.
CertPathReviewer.policyMapExtError.details = Prüfen der Policy fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Policy Mapping Erweiterung.
# error processing inhibit any policy extension
CertPathReviewer.policyInhibitExtError.title = Prüfen der Policy fehlgeschlagen
CertPathReviewer.policyInhibitExtError.text = Prüfen der Policy fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Inhibit Any Policy Erweiterung.
CertPathReviewer.policyInhibitExtError.summary = Fehler bei der Verarbeitung der Inhibit Any Policy Erweiterung.
CertPathReviewer.policyInhibitExtError.details = Prüfen der Policy fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Inhibit Any Policy Erweiterung.
# error building qualifier set
CertPathReviewer.policyQualifierError.title = Prüfen der Policy fehlgeschlagen
CertPathReviewer.policyQualifierError.text = Prüfen der Policy fehlgeschlagen: Fehler beim erstellen des Policy Qualifier Set.
CertPathReviewer.policyQualifierError.summary = Prüfen der Policy fehlgeschlagen: Fehler beim erstellen des Policy Qualifier Set.
CertPathReviewer.policyQualifierError.details = Prüfen der Policy fehlgeschlagen: Fehler beim erstellen des Policy Qualifier Set.
# no valid policy tree - explicit policy required
CertPathReviewer.noValidPolicyTree.title = Prüfen der Policy fehlgeschlagen
CertPathReviewer.noValidPolicyTree.text = Prüfen der Policy fehlgeschlagen: Kein gültiger Policy Baum gefunden, als einer erwartet wurde.
CertPathReviewer.noValidPolicyTree.summary = Prüfen der Policy fehlgeschlagen: Kein gültiger Policy Baum gefunden, als einer erwartet wurde.
CertPathReviewer.noValidPolicyTree.details = Prüfen der Policy fehlgeschlagen: Kein gültiger Policy Baum gefunden, als einer erwartet wurde.
# expicit policy requested, but no policy available
CertPathReviewer.explicitPolicy.title = Prüfen der Policy fehlgeschlagen
CertPathReviewer.explicitPolicy.text = Prüfen der Policy fehlgeschlagen: Policy verlang, aber keine Policy vorhanden.
CertPathReviewer.explicitPolicy.summary = Prüfen der Policy fehlgeschlagen: Policy verlang, aber keine Policy vorhanden.
CertPathReviewer.explicitPolicy.details = Prüfen der Policy fehlgeschlagen: Policy verlang, aber keine Policy vorhanden.
# path processing failed on policy
CertPathReviewer.invalidPolicy.title = Pfad Validierung wegen der Policy fehlgeschlagen
CertPathReviewer.invalidPolicy.text = Pfad Validierung wegen der Policy fehlgeschlagen.
CertPathReviewer.invalidPolicy.summary = Pfad Validierung wegen der Policy fehlgeschlagen.
CertPathReviewer.invalidPolicy.details = Pfad Validierung wegen der Policy fehlgeschlagen.
# invalid policy mapping
CertPathReviewer.invalidPolicyMapping.title = Ungültiges Policy Mapping
CertPathReviewer.invalidPolicyMapping.text = Das Zertifikat enthält ein Ungültiges Policy Mapping.
CertPathReviewer.invalidPolicyMapping.summary = Das Zertifikat enthält ein Ungültiges Policy Mapping.
CertPathReviewer.invalidPolicyMapping.details = Das Zertifikat enthält ein Ungültiges Policy Mapping, das den Wert Any Policy enthält.
## check CRL notifications
# found local valid CRL
# {0} thisUpdate of the CRL
# {1} nextUpdate of the CRL
CertPathReviewer.localValidCRL.title = Gültige Zertifikatssperrliste (CRL) gefunden
CertPathReviewer.localValidCRL.text = Gültige Zertifikatssperrliste (CRL) im lokalen Speicher gefunden. Herausgegeben am {0,date}, nächstes Update am {1,date}.
CertPathReviewer.localValidCRL.summary = Gültige Zertifikatssperrliste (CRL) im lokalen Speicher gefunden. Herausgegeben am {0,date}, nächstes Update am {1,date}.
CertPathReviewer.localValidCRL.details = Gültige Zertifikatssperrliste (CRL) im lokalen Speicher gefunden. Herausgegeben am {0,date}, nächstes Update am {1,date}.
# found matching CRL, but not valid
# {0} thisUpdate of the CRL
# {1} nextUpdate of the CRL
CertPathReviewer.localInvalidCRL.title = Lokale Zertifikatssperrliste (CRL) veraltet
CertPathReviewer.localInvalidCRL.text = Eine lokale Zertifikatssperrliste (CRL) wurde nicht genutzt, da sie veraltet ist. Herausgegeben am {0,date}, nächstes Update am {1,date}.
CertPathReviewer.localInvalidCRL.summary = Eine lokale Zertifikatssperrliste (CRL) wurde nicht genutzt, da sie veraltet ist. Herausgegeben am {0,date}, nächstes Update am {1,date}.
CertPathReviewer.localInvalidCRL.details = Eine lokale Zertifikatssperrliste (CRL) wurde nicht genutzt, da sie veraltet ist. Herausgegeben am {0,date}, nächstes Update am {1,date}.
# found a valid crl at crl distribution point
# {0} thisUpdate of the CRL
# {1} nextUpdate of the CRL
# {2} the url of the distribution point
CertPathReviewer.onlineValidCRL.title = Gültige Zertifikatssperrliste (CRL) von einem CDP
CertPathReviewer.onlineValidCRL.text = Gültige Zertifikatssperrliste (CRL) gefunden von: {2}. Herausgegeben am {0,date}, nächstes Update am {1,date}.
CertPathReviewer.onlineValidCRL.summary = Gültige Zertifikatssperrliste (CRL) gefunden von: {2}. Herausgegeben am {0,date}, nächstes Update am {1,date}.
CertPathReviewer.onlineValidCRL.details = Gültige Zertifikatssperrliste (CRL) gefunden von: {2}. Herausgegeben am {0,date}, nächstes Update am {1,date}.
# found an invalid CRL at crl distribution point
# {0} thisUpdate of the CRL
# {1} nextUpdate of the CRL
# {2} the url of the distribution point
CertPathReviewer.onlineInvalidCRL.title = Veraltete Zertifikatssperrliste (CRL) von einem CDP
CertPathReviewer.onlineInvalidCRL.text = Die Zertifikatssperrliste (CRL) von {2} ist veraltet. Herausgegeben am {0,date}, nächstes Update am {1,date}.
CertPathReviewer.onlineInvalidCRL.summary = Die Zertifikatssperrliste (CRL) von {2} ist veraltet. Herausgegeben am {0,date}, nächstes Update am {1,date}.
CertPathReviewer.onlineInvalidCRL.details = Die Zertifikatssperrliste (CRL) von {2} ist veraltet. Herausgegeben am {0,date}, nächstes Update am {1,date}.
#found a CRL at a crl distribution point, but issued by another CA
# {0} issuer of the CRL
# {1} expected issuer
# {2} the url of the distribution point
CertPathReviewer.onlineCRLWrongCA.title = Zertifikatssperrliste (CRL) von CDP mit falschem Herausgeber
CertPathReviewer.onlineCRLWrongCA.text = Die Zertifikatssperrliste (CRL) von {2} wurde von {0} herausgegeben, erwartet wurde {1}.
CertPathReviewer.onlineCRLWrongCA.summary = Die Zertifikatssperrliste (CRL) von {2} hat einen falschen Herausgeber.
CertPathReviewer.onlineCRLWrongCA.details = Die Zertifikatssperrliste (CRL) von {2} wurde von {0} herausgegeben, erwartet wurde {1}.
# Certificate not revoked
CertPathReviewer.notRevoked.title = Zertifikat nicht revoziert
CertPathReviewer.notRevoked.text = Das Zertifikat ist nicht revoziert.
CertPathReviewer.notRevoked.summary = Das Zertifikat ist nicht revoziert.
CertPathReviewer.notRevoked.details = Das Zertifikat ist nicht revoziert.
# CRL found: certificate was revoked, but after the validationDate
# {0} the date the certificate was revoked
# {1} the reason for revoking the certificate
CertPathReviewer.revokedAfterValidation.title = Zertifikat revoziert nach dem Validierungdatum
CertPathReviewer.revokedAfterValidation.text = Das Zertifikat wurde nach dem Validierungdatum am {0,date} {0,time,full} revoziert. Grund: {1}.
CertPathReviewer.revokedAfterValidation.summary = Das Zertifikat wurde nach dem Validierungdatum am {0,date} {0,time,full} revoziert.
CertPathReviewer.revokedAfterValidation.details = Das Zertifikat wurde nach dem Validierungdatum am {0,date} {0,time,full} revoziert. Grund: {1}.
# updated crl available
# {0} date since when the update is available
CertPathReviewer.crlUpdateAvailable.title = Zertifikatssperrlisten (CRL) Update erhältlich
CertPathReviewer.crlUpdateAvailable.text = Ein Update für die Zertifikatssperrliste (CRL) für dieses Zertifikat ist erhältlich seit {0,date} {0,time,full}.
CertPathReviewer.crlUpdateAvailable.summary = Ein Update für die Zertifikatssperrliste (CRL) für dieses Zertifikat ist erhältlich seit {0,date} {0,time,full}.
CertPathReviewer.crlUpdateAvailable.details = Ein Update für die Zertifikatssperrliste (CRL) für dieses Zertifikat ist erhältlich seit {0,date} {0,time,full}.
# crl distribution point url
# {0} the crl distribution point url as String
CertPathReviewer.crlDistPoint.title = CDP
CertPathReviewer.crlDistPoint.text = Eine Zertifikatssperrliste (CRL) kann von {0} geladen werden.
CertPathReviewer.crlDistPoint.summary = Eine Zertifikatssperrliste (CRL) kann von {0} geladen werden.
CertPathReviewer.crlDistPoint.details = Eine Zertifikatssperrliste (CRL) kann von {0} geladen werden.
# ocsp location
# {0} the url on which the ocsp service can be found
CertPathReviewer.ocspLocation.title = OCSP Server
CertPathReviewer.ocspLocation.text = OCSP Server: {0}.
CertPathReviewer.ocspLocation.summary = OCSP Server: {0}.
CertPathReviewer.ocspLocation.details = OCSP Server: {0}.
# unable to get crl from crl distribution point
# {0} the url of the distribution point
# {1} the message of the occurred exception
# {2} the occurred exception
# {3} the name of the exception
CertPathReviewer.loadCrlDistPointError.title = Kann Zertifikatssperrliste (CRL) nicht von CDP laden
CertPathReviewer.loadCrlDistPointError.text = Kann die Zertifikatssperrliste (CRL) von {0} nicht laden. Es gab eine {2}.
CertPathReviewer.loadCrlDistPointError.summary = Kann die Zertifikatssperrliste (CRL) von {0} nicht laden. Es gab eine {2}.
CertPathReviewer.loadCrlDistPointError.details = Kann die Zertifikatssperrliste (CRL) von {0} nicht laden. Es gab eine {2}. Grund: {1}.
# no crl found in certstores
# {0} the issuers which we searched for
# {1} list of crl issuer names that are found in the certstores
# {2} number of crls in the certstores
CertPathReviewer.noCrlInCertstore.title = Keine Zertifikatssperrliste (CRL) im lokalen Speicher
CertPathReviewer.noCrlInCertstore.text = Es wurde keine Zertifikatssperrliste (CRL) im lokalen Speicher gefunden.
CertPathReviewer.noCrlInCertstore.summary = Es wurde keine Zertifikatssperrliste (CRL) im lokalen Speicher gefunden.
CertPathReviewer.noCrlInCertstore.details = Es wurde keine Zertifikatssperrliste (CRL) für den Herausgeber {0} im lokalen Speicher gefunden. \
Die {2} Zertifikatssperrlisten im lokalen Speicher wurden hearusgegeben von {1}.
## check CRL exceptions
# cannot extract issuer from certificate
CertPathReviewer.crlIssuerException.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlIssuerException.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Kann den Herausgeber vom Zertifikat nicht extrahieren.
CertPathReviewer.crlIssuerException.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Kann den Herausgeber vom Zertifikat nicht extrahieren.
CertPathReviewer.crlIssuerException.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Kann den Herausgeber vom Zertifikat nicht extrahieren.
# cannot extract crls
# {0} message from the underlying exception
# {1} the underlying exception
# {2} the name of the exception
CertPathReviewer.crlExtractionError.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlExtractionError.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab eine {2} beim laden der Zertifikatssperrliste (CRL) aus dem lokalen Speicher.
CertPathReviewer.crlExtractionError.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab eine {2} beim laden der Zertifikatssperrliste (CRL) aus dem lokalen Speicher.
CertPathReviewer.crlExtractionError.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab eine {2} beim laden der Zertifikatssperrliste (CRL) aus dem lokalen Speicher. Grund: {0}.
# Issuer certificate key usage extension does not permit crl signing
CertPathReviewer.noCrlSigningPermited.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.noCrlSigningPermited.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Das Herausgeber Zertifikat erlaubt keine Signieren von Zertifikatssperrlisten (CRL).
CertPathReviewer.noCrlSigningPermited.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Das Herausgeber Zertifikat erlaubt keine Signieren von Zertifikatssperrlisten (CRL).
CertPathReviewer.noCrlSigningPermited.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Das Herausgeber Zertifikat erlaubt keine Signieren von Zertifikatssperrlisten (CRL).
# can not verify crl: issuer public key unknown
CertPathReviewer.crlNoIssuerPublicKey.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlNoIssuerPublicKey.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Kann die Zertifikatssperrliste (CRL) nicht verifizieren. Der öffentliche Schlüssel des Herausgebers ist unbekannt.
CertPathReviewer.crlNoIssuerPublicKey.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Kann die Zertifikatssperrliste (CRL) nicht verifizieren. Der öffentliche Schlüssel des Herausgebers ist unbekannt.
CertPathReviewer.crlNoIssuerPublicKey.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Kann die Zertifikatssperrliste (CRL) nicht verifizieren. Der öffentliche Schlüssel des Herausgebers ist unbekannt.
# crl verification failed
CertPathReviewer.crlVerifyFailed.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlVerifyFailed.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Signatur der Zertifikatssperrliste (CRL) ist ungültig.
CertPathReviewer.crlVerifyFailed.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Signatur der Zertifikatssperrliste (CRL) ist ungültig.
CertPathReviewer.crlVerifyFailed.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Signatur der Zertifikatssperrliste (CRL) ist ungültig.
# no valid CRL found
CertPathReviewer.noValidCrlFound.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.noValidCrlFound.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: keine gültige Zertifikatssperrliste (CRL) gefunden.
CertPathReviewer.noValidCrlFound.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: keine gültige Zertifikatssperrliste (CRL) gefunden.
CertPathReviewer.noValidCrlFound.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: keine gültige Zertifikatssperrliste (CRL) gefunden.
# No base CRL for delta CRL
CertPathReviewer.noBaseCRL.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.noBaseCRL.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: keine Basis CRL für die Delta CRL gefunden.
CertPathReviewer.noBaseCRL.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: keine Basis CRL für die Delta CRL gefunden.
CertPathReviewer.noBaseCRL.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: keine Basis CRL für die Delta CRL gefunden.
# certificate revoked
# {0} the date the certificate was revoked
# {1} the reason for revoking the certificate
CertPathReviewer.certRevoked.title = Zertifikat wurde revoziert
CertPathReviewer.certRevoked.text = Das Zertifikat wurde am {0,date} {0,time,full} revoziert. Grund: {1}.
CertPathReviewer.certRevoked.summary = Das Zertifikat wurde am {0,date} {0,time,full} revoziert.
CertPathReviewer.certRevoked.details = Das Zertifikat wurde am {0,date} {0,time,full} revoziert. Grund: {1}.
# error processing issuing distribution point extension
CertPathReviewer.distrPtExtError.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.distrPtExtError.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Issuing Distribution Point Erweiterung.
CertPathReviewer.distrPtExtError.summary = Fehler bei der Verarbeitung der Issuing Distribution Point Erweiterung.
CertPathReviewer.distrPtExtError.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Issuing Distribution Point Erweiterung.
# error processing crl distribution points extension
CertPathReviewer.crlDistPtExtError.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlDistPtExtError.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der CRL Distribution Points Erweiterung.
CertPathReviewer.crlDistPtExtError.summary = Fehler bei der Verarbeitung der CRL Distribution Points Erweiterung.
CertPathReviewer.crlDistPtExtError.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der CRL Distribution Points Erweiterung.
# error processing the authority info access extension
CertPathReviewer.crlAuthInfoAccError.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlAuthInfoAccError.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Authority Info Access Erweiterung.
CertPathReviewer.crlAuthInfoAccError.summary = Fehler bei der Verarbeitung der Authority Info Access Erweiterung.
CertPathReviewer.crlAuthInfoAccError.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Authority Info Access Erweiterung.
# error processing delta crl indicator extension
CertPathReviewer.deltaCrlExtError.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.deltaCrlExtError.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Delta CRL Indicator Erweiterung.
CertPathReviewer.deltaCrlExtError.summary = Fehler bei der Verarbeitung der Delta CRL Indicator Erweiterung.
CertPathReviewer.deltaCrlExtError.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der Delta CRL Indicator Erweiterung.
# error porcessing crl number extension
CertPathReviewer.crlNbrExtError.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlNbrExtError.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der CRL Number Erweiterung.
CertPathReviewer.crlNbrExtError.summary = Fehler bei der Verarbeitung der CRL Number Erweiterung.
CertPathReviewer.crlNbrExtError.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der CRL Number Erweiterung.
# error processing crl reason code extension
CertPathReviewer.crlReasonExtError.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlReasonExtError.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der CRL Reason Code Erweiterung.
CertPathReviewer.crlReasonExtError.summary = Fehler bei der Verarbeitung der CRL Reason Code Erweiterung.
CertPathReviewer.crlReasonExtError.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der CRL Reason Code Erweiterung.
# error processing basic constraints extension
CertPathReviewer.crlBCExtError.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlBCExtError.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der CRL Reason Code Erweiterung.
CertPathReviewer.crlBCExtError.summary = Fehler bei der Verarbeitung der CRL Reason Code Erweiterung.
CertPathReviewer.crlBCExtError.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Es gab einen Fehler bei der Verarbeitung der CRL Reason Code Erweiterung.
# CA Cert CRL only contains user certificates
CertPathReviewer.crlOnlyUserCert.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlOnlyUserCert.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur User Zertifikate.
CertPathReviewer.crlOnlyUserCert.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur User Zertifikate.
CertPathReviewer.crlOnlyUserCert.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur User Zertifikate.
# End CRL only contains CA certificates
CertPathReviewer.crlOnlyCaCert.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlOnlyCaCert.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur CA Zertifikate.
CertPathReviewer.crlOnlyCaCert.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur CA Zertifikate.
CertPathReviewer.crlOnlyCaCert.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur CA Zertifikate.
# onlyContainsAttributeCerts boolean is asserted
CertPathReviewer.crlOnlyAttrCert.title = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen
CertPathReviewer.crlOnlyAttrCert.text = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur Attribut Zertifikate.
CertPathReviewer.crlOnlyAttrCert.summary = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur Attribut Zertifikate.
CertPathReviewer.crlOnlyAttrCert.details = Prüfung der Zertifikatssperrliste (CRL) fehlgeschlagen: Die Zertifikatssperrliste (CRL) enthält nur Attribut Zertifikate.
## QcStatement notifications
# unkown statement
# {0} statement OID
# {1} statement as ANS1Sequence
CertPathReviewer.QcUnknownStatement.title = Unbekanntes Statement in der QcStatement Erweiterung
CertPathReviewer.QcUnknownStatement.text = Unbekanntes Statement in der QcStatement Erweiterung: OID = {0}
CertPathReviewer.QcUnknownStatement.summary = Unbekanntes Statement in der QcStatement Erweiterung: OID = {0}
CertPathReviewer.QcUnknownStatement.details = Unbekanntes Statement in der QcStatement Erweiterung: OID = {0}, statement = {1}
# QcLimitValue Alpha currency code
# {0} currency code
# {1} limit value
# {2} monetary value as MonetaryValue
CertPathReviewer.QcLimitValueAlpha.title = Transaction Value Limit
CertPathReviewer.QcLimitValueAlpha.text = Dieses Zertifikat hat ein Wertlimite von {1,number, ###,###,###,##0.00#} {0} für Transaktionen.
CertPathReviewer.QcLimitValueAlpha.summary = Wertlimite von {1,number, ###,###,###,##0.00#} {0} für Transaktionen.
CertPathReviewer.QcLimitValueAlpha.details = Dieses Zertifikat hat eine Wertlimite für Transaktionen für welche\
das Zertifikat genutzt werden kann, gemäss der Richtlinie 1999/93/EG des Europäischen Parlaments und\
des Rates über gemeinschaftliche Rahmenbedingungen für elektronische Signaturen und gemäss der Umsetzung der\
Richtlinie im Land, das im Herausgeber dieses Zertifikats angegeben ist. Die Limite für diese Zertifikat ist {1,number, ###,###,###,##0.00#} {0}.
# QcLimitValue Numeric currency code
# {0} currency code
# {1} limit value
# {2} monetary value as MonetaryValue
CertPathReviewer.QcLimitValueNum.title = Transaction Value Limit
CertPathReviewer.QcLimitValueNum.text = Dieses Zertifikat hat eine Wertlimite für Transaktionen von {1,number, ###,###,###,##0.00#} der Währung {0} (Siehe RFC 4217 für Währungscodes).
CertPathReviewer.QcLimitValueNum.summary = Wertlimite für Transaktionen von {1,number, ###,###,###,##0.00#} der Währung {0} (Siehe RFC 4217 für Währungscodes).
CertPathReviewer.QcLimitValueNum.details = Dieses Zertifikat hat eine Wertlimite für Transaktionen für welche\
das Zertifikat genutzt werden kann, gemäss der Richtlinie 1999/93/EG des Europäischen Parlaments und\
des Rates über gemeinschaftliche Rahmenbedingungen für elektronische Signaturen und gemäss der Umsetzung der\
Richtlinie im Land, das im Herausgeber dieses Zertifikats angegeben ist. Die Limite für diese Zertifikat ist {1,number, ###,###,###,##0.00#} der Währung {0} (Siehe RFC 4217 für Währungscodes).
# QcSSCD
CertPathReviewer.QcSSCD.title = QcSSCD Statement
CertPathReviewer.QcSSCD.text = (SSCD) Der Herausgeber macht geltend, dass der Private Schlüssel, der mit diesem Zertifikat verbunden ist, nach den Anforderungen die im Anhang III der Richtlinie 1999/93/EG des Europäischen Parlaments und des Rates über gemeinschaftliche Rahmenbedingungen für elektronische Signaturen geschützt ist.
CertPathReviewer.QcSSCD.summary = (SSCD) Der Herausgeber macht geltend, dass der Private Schlüssel, der mit diesem Zertifikat verbunden ist, nach den Anforderungen die im Anhang III der Richtlinie 1999/93/EG des Europäischen Parlaments und des Rates über gemeinschaftliche Rahmenbedingungen für elektronische Signaturen geschützt ist.
CertPathReviewer.QcSSCD.details = (SSCD) Der Herausgeber macht geltend, dass der Private Schlüssel, der mit diesem Zertifikat verbunden ist, nach den Anforderungen die im Anhang III der Richtlinie 1999/93/EG des Europäischen Parlaments und des Rates über gemeinschaftliche Rahmenbedingungen für elektronische Signaturen geschützt ist.
# QcEuCompliance
CertPathReviewer.QcEuCompliance.title = Qualifiziertes Zertifikat
CertPathReviewer.QcEuCompliance.text = Dieses Zertifikat wurde als Qualifiziertes Zertifikat herausgegeben gemäss Anhang I und II der Richtlinie 1999/93/EG des Europäischen Parlaments und des Rates über gemeinschaftliche Rahmenbedingungen für elektronische Signaturen und gemäss der Umsetzung der Richtlinie im Land, das im Herausgeber dieses Zertifikats angegeben ist.
CertPathReviewer.QcEuCompliance.summary = Dieses Zertifikat wurde als Qualifiziertes Zertifikat herausgegeben gemäss Anhang I und II der Richtlinie 1999/93/EG des Europäischen Parlaments und des Rates über gemeinschaftliche Rahmenbedingungen für elektronische Signaturen und gemäss der Umsetzung der Richtlinie in dem Land, das im Herausgeber dieses Zertifikats angegeben ist.
CertPathReviewer.QcEuCompliance.details = Dieses Zertifikat wurde als Qualifiziertes Zertifikat herausgegeben gemäss Anhang I und II der Richtlinie 1999/93/EG des Europäischen Parlaments und des Rates über gemeinschaftliche Rahmenbedingungen für elektronische Signaturen und gemäss der Umsetzung der Richtlinie in dem Land, das im Herausgeber dieses Zertifikats angegeben ist.
## QcStatement errors
# error processing the QcStatement extension
CertPathReviewer.QcStatementExtError.title = Fehler bei der Verarbeitung der QcStatement Erweiterung
CertPathReviewer.QcStatementExtError.text = Fehler bei der Verarbeitung der QcStatement Erweiterung.
CertPathReviewer.QcStatementExtError.summary = Fehler bei der Verarbeitung der QcStatement Erweiterung.
CertPathReviewer.QcStatementExtError.details = Fehler bei der Verarbeitung der QcStatement Erweiterung.
## unknown/generic errors
CertPathReviewer.unknown.title = Unbekannter Fehler
CertPathReviewer.unknown.text = Unbekannter Fehler {0}
CertPathReviewer.unknown.summary = Unbekannter Fehler
CertPathReviewer.unknown.details = Unbekannter Fehler {0}
#
# crl reasons
#
unspecified = Nicht spezifiziert
keyCompromise = Schlüssel Kompromittierung
cACompromise = CA Kompromittierung
affiliationChanged = Veränderte Zugehörigkeit
superseded = Ersetzt
cessationOfOperation = Einstellen der Tätigkeiten
certificateHold = Zertifikat vorübergehend gesperrt
unknown = Unbekannt
removeFromCRL = Entferne von der CRL
privilegeWithdrawn = Zurückgezogene Rechte
aACompromise = AA Kompromittierung
#
#
#
missingIssuer = The missing certificate was issued by
missingSerial = with the serial number
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

@@ -1,4 +0,0 @@
text/html = ISO-8859-1
text/plain = ISO-8859-1
text/xml = UTF-8
text/json = UTF-8
@@ -1,181 +0,0 @@
ai = application/postscript
aif = audio/x-aiff
aifc = audio/x-aiff
aiff = audio/x-aiff
apk = application/vnd.android.package-archive
asc = text/plain
asf = video/x.ms.asf
asx = video/x.ms.asx
au = audio/basic
avi = video/x-msvideo
bcpio = application/x-bcpio
bin = application/octet-stream
cab = application/x-cabinet
cdf = application/x-netcdf
class = application/java-vm
cpio = application/x-cpio
cpt = application/mac-compactpro
crt = application/x-x509-ca-cert
csh = application/x-csh
css = text/css
csv = text/comma-separated-values
dcr = application/x-director
dir = application/x-director
dll = application/x-msdownload
dms = application/octet-stream
doc = application/msword
dtd = application/xml-dtd
dvi = application/x-dvi
dxr = application/x-director
eps = application/postscript
etx = text/x-setext
exe = application/octet-stream
ez = application/andrew-inset
gif = image/gif
gtar = application/x-gtar
gz = application/gzip
gzip = application/gzip
hdf = application/x-hdf
hqx = application/mac-binhex40
htc = text/x-component
htm = text/html
html = text/html
ice = x-conference/x-cooltalk
ico = image/x-icon
ief = image/ief
iges = model/iges
igs = model/iges
jad = text/vnd.sun.j2me.app-descriptor
jar = application/java-archive
java = text/plain
jnlp = application/x-java-jnlp-file
jpe = image/jpeg
jpeg = image/jpeg
jpg = image/jpeg
js = application/x-javascript
jsp = text/html
kar = audio/midi
latex = application/x-latex
lha = application/octet-stream
lzh = application/octet-stream
man = application/x-troff-man
mathml = application/mathml+xml
me = application/x-troff-me
mesh = model/mesh
mid = audio/midi
midi = audio/midi
mif = application/vnd.mif
mol = chemical/x-mdl-molfile
mov = video/quicktime
movie = video/x-sgi-movie
mp2 = audio/mpeg
mp3 = audio/mpeg
mpe = video/mpeg
mpeg = video/mpeg
mpg = video/mpeg
mpga = audio/mpeg
ms = application/x-troff-ms
msh = model/mesh
msi = application/octet-stream
nc = application/x-netcdf
oda = application/oda
odb = application/vnd.oasis.opendocument.database
odc = application/vnd.oasis.opendocument.chart
odf = application/vnd.oasis.opendocument.formula
odg = application/vnd.oasis.opendocument.graphics
odi = application/vnd.oasis.opendocument.image
odm = application/vnd.oasis.opendocument.text-master
odp = application/vnd.oasis.opendocument.presentation
ods = application/vnd.oasis.opendocument.spreadsheet
odt = application/vnd.oasis.opendocument.text
ogg = application/ogg
otc = application/vnd.oasis.opendocument.chart-template
otf = application/vnd.oasis.opendocument.formula-template
otg = application/vnd.oasis.opendocument.graphics-template
oth = application/vnd.oasis.opendocument.text-web
oti = application/vnd.oasis.opendocument.image-template
otp = application/vnd.oasis.opendocument.presentation-template
ots = application/vnd.oasis.opendocument.spreadsheet-template
ott = application/vnd.oasis.opendocument.text-template
pbm = image/x-portable-bitmap
pdb = chemical/x-pdb
pdf = application/pdf
pgm = image/x-portable-graymap
pgn = application/x-chess-pgn
png = image/png
pnm = image/x-portable-anymap
ppm = image/x-portable-pixmap
pps = application/vnd.ms-powerpoint
ppt = application/vnd.ms-powerpoint
ps = application/postscript
qt = video/quicktime
ra = audio/x-pn-realaudio
ram = audio/x-pn-realaudio
ras = image/x-cmu-raster
rdf = application/rdf+xml
rgb = image/x-rgb
rm = audio/x-pn-realaudio
roff = application/x-troff
rpm = application/x-rpm
rtf = application/rtf
rtx = text/richtext
rv = video/vnd.rn-realvideo
ser = application/java-serialized-object
sgm = text/sgml
sgml = text/sgml
sh = application/x-sh
shar = application/x-shar
silo = model/mesh
sit = application/x-stuffit
skd = application/x-koan
skm = application/x-koan
skp = application/x-koan
skt = application/x-koan
smi = application/smil
smil = application/smil
snd = audio/basic
spl = application/x-futuresplash
src = application/x-wais-source
sv4cpio = application/x-sv4cpio
sv4crc = application/x-sv4crc
svg = image/svg+xml
swf = application/x-shockwave-flash
t = application/x-troff
tar = application/x-tar
tar.gz = application/x-gtar
tcl = application/x-tcl
tex = application/x-tex
texi = application/x-texinfo
texinfo = application/x-texinfo
tgz = application/x-gtar
tif = image/tiff
tiff = image/tiff
tr = application/x-troff
tsv = text/tab-separated-values
txt = text/plain
ustar = application/x-ustar
vcd = application/x-cdlink
vrml = model/vrml
vxml = application/voicexml+xml
wav = audio/x-wav
wbmp = image/vnd.wap.wbmp
wml = text/vnd.wap.wml
wmlc = application/vnd.wap.wmlc
wmls = text/vnd.wap.wmlscript
wmlsc = application/vnd.wap.wmlscriptc
wrl = model/vrml
wtls-ca-certificate = application/vnd.wap.wtls-ca-certificate
xbm = image/x-xbitmap
xht = application/xhtml+xml
xhtml = application/xhtml+xml
xls = application/vnd.ms-excel
xml = application/xml
xpm = image/x-xpixmap
xsd = application/xml
xsl = application/xml
xslt = application/xslt+xml
xul = application/vnd.mozilla.xul+xml
xwd = image/x-xwindowdump
xyz = chemical/x-xyz
z = application/compress
zip = application/zip
@@ -1 +0,0 @@
AbstractHandler: Jetty Handler.
@@ -1,24 +0,0 @@
ContextHandler: URI Context
aliases: True if alias checking is performed on resource
allowNullPathInfo: Checks if the /context is not redirected to /context/
classPath: RO: The file classpath
compactPath: True if URLs are compacted to replace the multiple '/'s with a single '/'
connectorNames: Names and ports of accepted connectors
contextAttributes: RO:MBean: Map of context attributes
contextPath: URI prefix of context
displayName: RO: Display name of the Context
errorHandler: MObject: The error handler to use for the context
initParams: Initial Parameter map for the context
maxFormContentSize: The maximum content size
removeContextAttribute(java.lang.String): MBean:ACTION: remove context attribute
removeContextAttribute(java.lang.String)[0]: name: The attribute name
resourceBase: Document root for the context
setContextAttribute(java.lang.String,java.lang.Object): MBean:ACTION: Set context attribute
setContextAttribute(java.lang.String,java.lang.Object)[0]: name: The attribute name
setContextAttribute(java.lang.String,java.lang.Object)[1]: value: The attribute value
setContextAttribute(java.lang.String,java.lang.String): MBean:ACTION: Set context attribute
setContextAttribute(java.lang.String,java.lang.String)[0]: name: The attribute name
setContextAttribute(java.lang.String,java.lang.String)[1]: value: The attribute value
shutdown: False if this context is accepting new requests. True for graceful shutdown, which allows existing requests to complete
virtualHosts: Virtual hosts accepted by the context
welcomeFiles: Partial URIs of directory welcome files
@@ -1,2 +0,0 @@
ContextHandlerCollection: Context Handler Collection
mapContexts(): Update the mapping of context path to context
@@ -1,2 +0,0 @@
HandlerCollection: Handler of multiple Handlers
handlers: MObject:Wrapped handlers
@@ -1,2 +0,0 @@
HandlerWrapper: Handler wrapping another Handler
handler: MObject:Wrapped handler
@@ -1,28 +0,0 @@
StatisticsHandler: Request Statistics gathering
statsOnMs: Time in milliseconds stats have been collected for.
statsReset(): Resets statistics.
requests: Number of requests since statsReset() called.
requestsActive: Number of requests currently active since statsReset() called.
requestsActiveMax: Maximum number of active requests since statsReset() called.
requestTimeMax: Maximum time in milliseconds of request handling since statsReset() called.
requestTimeTotal: Total time in milliseconds of all request handling since statsReset() called.
requestTimeMean: Mean of time in milliseconds of request handling since statsReset() called.
requestTimeStdDev: Standard deviation of time in milliseconds of request handling since statsReset() called.
dispatched: Number of dispatches since statsReset() called.
dispatchedActive: Number of dispatches currently active since statsReset() called.
dispatchedActiveMax: Maximum number of active dispatches since statsReset() called.
dispatchedTimeMax: Maximum time in milliseconds of dispatched handling since statsReset() called.
dispatchedTimeTotal: Total time in milliseconds of all dispatched handling since statsReset() called.
dispatchedTimeMean: Mean of time in milliseconds of dispatch handling since statsReset() called.
dispatchedTimeStdDev: Standard deviation of time in milliseconds of dispatch handling since statsReset() called.
suspends: Number of requests suspended since statsReset() called.
suspendsActive: Number of dispatches currently active since statsReset() called.
suspendsActiveMax: Maximum number of active dispatches since statsReset() called.
resumes: Number of requests resumed since statsReset() called.
expires: Number of requests expired since statsReset() called.
responses1xx: Number of responses with a 1xx status since statsReset() called.
responses2xx: Number of responses with a 2xx status since statsReset() called.
responses3xx: Number of responses with a 3xx status since statsReset() called.
responses4xx: Number of responses with a 4xx status since statsReset() called.
responses5xx: Number of responses with a 5xx status since statsReset() called.
responsesBytesTotal: Total number of bytes of all responses since statsReset() called.
@@ -1,19 +0,0 @@
AbstractConnector: Abstract implementation of the Connector interface.
acceptors: The number of acceptor threads.
acceptQueueSize: The size of the accept queue.
acceptorPriorityOffset: Priority offset of the acceptor threads. The priority is adjusted by this amount to either favor the acceptance of new threads and newly active connections or to favor the handling of already dispatched connections.
forwardedForHeader: The header name for forwarded for (default x-forwarded-for).
forwardedHostHeader: The header name for forwarded hosts (default x-forwarded-host)
forwardedServerHeader: The header name for forwarded server (default x-forwarded-server)
forwarded: Whether reverse proxy handling is on. True if this connector is checking the forwarded for/host/server headers.
host: Host name of the server.
hostHeader: Forced value for the host header. Only used if forwarded is true.
soLingerTime: Enable or disable SO_LINGER with the specified linger time in seconds.
reuseAddress: Whether the server socket will be opened in SO_REUSEADDR mode.
name: Name of the connector.
resolveNames: Whether or not to use DNS when handling forwards.
confidentialPort: Port to use for confidential redirections.
confidentialScheme: Scheme to use for confidential redirections.
integralPort: Port to use for integral redirections.
integralScheme: Scheme to use for integral redirections.
lowResourcesMaxIdleTime: The period in ms that a connection may be idle when the connector has low resources, before it is closed.
@@ -1,29 +0,0 @@
Connector: HTTP Connector.
server: MObject:RO:The server for this connector
requestHeaderSize: The size of a request header buffer
requestBufferSize: The size of a request content buffer
responseHeaderSize: The size of a response header buffer
responseBufferSize: The size of a response content buffer
integralPort: Port to use for integral redirections
integralScheme: Scheme to use for integral redirections
confidentialPort: Port to use for confidential redirections
confidentialScheme: Scheme to use for confidential redirections
host: Host name to accept connections on
port: TCP/IP port to accept connections on
maxIdleTime: Maximum time in ms that a connection can be idle before being closed
statsOn: True if statistics collection is turned on.
statsOnMs: Time in milliseconds stats have been collected for.
statsReset(): Reset statistics.
connections: Number of connections accepted by the server since statsReset() called. Undefined if setStatsOn(false).
connectionsOpen: Number of connections currently open that were opened since statsReset() called. Undefined if setStatsOn(false).
connectionsOpenMax: Maximum number of connections opened simultaneously since statsReset() called. Undefined if setStatsOn(false).
connectionsDurationMean: Mean duration in milliseconds of open connections since statsReset() called. Undefined if setStatsOn(false).
connectionsDurationStdDev: Standard deviation of duration in milliseconds of an open connection since statsReset() called. Undefined if setStatsOn(false).
connectionsDurationMax: Maximum duration in milliseconds of an open connection since statsReset() called. Undefined if setStatsOn(false).
connectionsDurationTotal: Total duration in milliseconds of all open connection since statsReset() called. Undefined if setStatsOn(false).
connectionsRequestsMean: Mean number of requests per connection since statsReset() called. Undefined if setStatsOn(false).
connectionsRequestsStdDev: Standard deviation of number of requests per connection since statsReset() called. Undefined if setStatsOn(false).
connectionsRequestsMax: Maximum number of requests per connection since statsReset() called. Undefined if setStatsOn(false).
requests: Number of requests since statsReset() called. Undefined if setStatsOn(false).
open(): Open the listening port
close(): Close the listening port (but allow existing connections to continue for graceful shutdown)
@@ -1,3 +0,0 @@
Handler: Jetty Handler.
server: MObject:RO:The Jetty server for this handler
destroy(): destroy associated resources (eg MBean)
@@ -1,3 +0,0 @@
HandlerContainer: Handler of multiple Handlers
handlers: MObject:RO:Handlers in this container
childHandlers: MObject:RO:All contained handlers
@@ -1,6 +0,0 @@
NCSARequestLog : NCSA standard format request log
filename : Filename of log
retainDays : Number of days that the log files are kept
append : Existing log files are appended to the new one
extended : Use the extended NCSA format
LogTimeZone : The timezone
@@ -1,9 +0,0 @@
Server: Jetty HTTP Servlet server
connectors: MObject:HTTP Connectors for this server
version: RO: The version of this server
sendServerVersion: If true include the server version in HTTP headers
threadPool: MObject:The server Thread Pool
contexts: MMBean:RO:The contexts of this server
startupTime: MBean:RO:The startup time, in milliseconds, since January 1st 1970
dumpAfterStart: RW:Dump state to stderr after start
dumpBeforeStop: RW:Dump state to stderr before stop
@@ -1,2 +0,0 @@
SelectChannelConnector: HTTP connector using NIO ByteChannels and Selectors
lowResourcesConnections: The number of connections, which if exceeded represents low resources
@@ -1,19 +0,0 @@
AbstractSessionManager: Abstract Session Manager
httpOnly: True if cookies use the http only flag
idManager: MObject:RO:The ID Manager instance
maxCookieAge: if greater than zero, the time in seconds a session cookie will last for
maxInactiveInterval: default maximum time in seconds a session may be idle
refreshCookieAge: The time in seconds after which a session cookie is re-set
secureCookies: If true, the secure cookie flag is set on session cookies
sessionCookie: The set session cookie
sessionDomain: The domain of the session cookie or null for the default
sessionPath: The path of the session cookie or null for the default
sessionsTotal: The total number of sessions
sessionIdPathParameterName: The name to use for URL session tracking
statsReset(): Reset statistics
sessions: Current instantaneous number of sessions
sessionsMax: Maximum number of simultaneous sessions since statsReset() was called
sessionTimeMax: Maximum amount of time in seconds session remained valid since statsReset() was called
sessionTimeTotal: Total amount of time in seconds sessions remained valid since statsReset() was called
sessionTimeMean: Mean amount of time in seconds a session remained valid since statsReset() was called
sessionTimeStdDev: Standard deviation of amount of time in seconds a session remained valid since statsReset() was called
@@ -1,4 +0,0 @@
FilterMapping: Filter Mapping
filterName: RO:Filter Name
pathSpecs: RO:URL patterns
servletNames: RO:Servlet Names
@@ -1,5 +0,0 @@
Holder: Holder
name: RO:Name
displayName: RO:Display Name
className: RO:Class Name
initParameters: RO:Initial parameters
@@ -1,4 +0,0 @@
ServletContextHandler: Servlet Context Handler
securityHandler: MObject: The context's security handler
servletHandler: MObject: The context's servlet handler
sessionHandler: MObject: The context's session handler
@@ -1,5 +0,0 @@
ServletHandler: Servlet Handler
servlets: MObject:RO:Servlets
servletMappings: MObject:RO:Mappings of servlets
filters: MObject:RO:Filters
filterMappings: MObject:RO:Mappings of filters
@@ -1,4 +0,0 @@
ServletHolder: Servlet Holder
initOrder: Initialization order
runAsRole: Role to run servlet as
forcedPath: Forced servlet path
@@ -1,3 +0,0 @@
ServletMapping: Servlet Mapping
servletName: RO:Servlet Name
pathSpecs: RO:URL patterns
@@ -1,354 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/AVT/"
xmlns:avt="urn:schemas-upnp-org:metadata-1-0/AVT/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--
TODO: This schema was copied from AVTransport1.0.pdf.
Apparently the UPnP clowns couldn't agree if it is *Metadata or *MetaData.
So I've made changes and now all elements are called *MetaData, like the
state variables in the spec. That _will_ break if someone really uses
the original schema.
-->
<xsd:annotation>
<xsd:documentation xml:lang="en">
Schema for UPnP A/V AVTransport Service events, version 0.1(sic!)
</xsd:documentation>
</xsd:annotation>
<!--============================================================
'Event' is the root element of AVTransport event document fragments.
'InstanceID' is the only valid child of 'Event'.
============================================================-->
<xsd:element name="Event">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>Event is the root
element
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="avt:InstanceID"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<!--============================================================
'InstanceID' elements identify an individual event instance.
============================================================-->
<xsd:group name="allowed-under-InstanceID">
<xsd:annotation>
<xsd:documentation>
This group defines the elements allowed under the InstanceID element
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="avt:TransportState"/>
<xsd:element ref="avt:TransportStatus"/>
<xsd:element ref="avt:PlaybackStorageMedium"/>
<xsd:element ref="avt:RecordStorageMedium"/>
<xsd:element ref="avt:PossiblePlaybackStorageMedia"/>
<xsd:element ref="avt:PossibleRecordStorageMedia"/>
<xsd:element ref="avt:CurrentPlayMode"/>
<xsd:element ref="avt:TransportPlaySpeed"/>
<xsd:element ref="avt:RecordMediumWriteStatus"/>
<xsd:element ref="avt:CurrentRecordQualityMode"/>
<xsd:element ref="avt:PossibleRecordQualityModes"/>
<xsd:element ref="avt:NumberOfTracks"/>
<xsd:element ref="avt:CurrentTransportActions"/>
<xsd:element ref="avt:CurrentTrack"/>
<xsd:element ref="avt:CurrentTrackDuration"/>
<xsd:element ref="avt:CurrentMediaDuration"/>
<xsd:element ref="avt:CurrentTrackURI"/>
<xsd:element ref="avt:CurrentTrackMetaData"/>
<xsd:element ref="avt:AVTransportURI"/>
<xsd:element ref="avt:AVTransportURIMetaData"/>
<xsd:element ref="avt:NextAVTransportURI"/>
<xsd:element ref="avt:NextAVTransportURIMetaData"/>
</xsd:choice>
</xsd:group>
<xsd:element name="InstanceID">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
InstanceID elements identify an individual event instance.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="avt:allowed-under-InstanceID"/>
</xsd:choice>
<!-- TODO: That attribute was missing in the spec! -->
<xsd:attribute name="val" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportState
============================================================-->
<xsd:element name="TransportState">
<xsd:complexType>
<xsd:attribute name="val" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="STOPPED"/>
<xsd:enumeration value="PLAYING"/>
<xsd:enumeration value="TRANSITIONING"/>
<xsd:enumeration value="PAUSED_PLAYBACK"/>
<xsd:enumeration value="PAUSED_RECORDING"/>
<xsd:enumeration value="RECORDING"/>
<xsd:enumeration value="NO_MEDIA_PRESENT"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportStatus
============================================================-->
<xsd:element name="TransportStatus">
<xsd:complexType>
<xsd:attribute name="val" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="OK"/>
<xsd:enumeration value="ERROR_OCCURRED"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--============================================================
PlaybackStorageMedium
============================================================-->
<xsd:element name="PlaybackStorageMedium">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RecordStorageMedium
============================================================-->
<xsd:element name="RecordStorageMedium">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossiblePlaybackStorageMedia
============================================================-->
<xsd:element name="PossiblePlaybackStorageMedia">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossibleRecordStorageMedia
============================================================-->
<xsd:element name="PossibleRecordStorageMedia">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentPlayMode
============================================================-->
<xsd:element name="CurrentPlayMode">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportPlaySpeed
============================================================-->
<xsd:element name="TransportPlaySpeed">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RecordMediumWriteStatus
============================================================-->
<xsd:element name="RecordMediumWriteStatus">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentRecordQualityMode
============================================================-->
<xsd:element name="CurrentRecordQualityMode">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossibleRecordQualityModes (!!! TYPO IN SPEC !!!)
============================================================-->
<xsd:element name="PossibleRecordQualityModes">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NumberOfTracks
============================================================-->
<xsd:element name="NumberOfTracks">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrack
============================================================-->
<xsd:element name="CurrentTrack">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackDuration
============================================================-->
<xsd:element name="CurrentTrackDuration">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentMediaDuration
============================================================-->
<xsd:element name="CurrentMediaDuration">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackMetaData
============================================================-->
<xsd:element name="CurrentTrackMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackURI
============================================================-->
<xsd:element name="CurrentTrackURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AVTransportURI
============================================================-->
<xsd:element name="AVTransportURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AVTransportURIMetaData
============================================================-->
<xsd:element name="AVTransportURIMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NextAVTransportURI
============================================================-->
<xsd:element name="NextAVTransportURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NextAVTransportURIMetaData
============================================================-->
<xsd:element name="NextAVTransportURIMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTransportActions
============================================================-->
<xsd:element name="CurrentTransportActions">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
@@ -1,403 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/AVT/"
xmlns:avt="urn:schemas-upnp-org:metadata-1-0/AVT/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!--
TODO: This schema was copied from AVTransport1.0.pdf.
Apparently the UPnP clowns couldn't agree if it is *Metadata or *MetaData.
So I've made changes and now all elements are called *MetaData, like the
state variables in the spec. That _will_ break if someone really uses
the original schema.
-->
<xsd:annotation>
<xsd:documentation xml:lang="en">
Schema for UPnP A/V AVTransport Service events, version 0.1(sic!)
</xsd:documentation>
</xsd:annotation>
<!--============================================================
'Event' is the root element of AVTransport event document fragments.
'InstanceID' is the only valid child of 'Event'.
============================================================-->
<xsd:element name="Event">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>Event is the root
element
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="avt:InstanceID"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<!--============================================================
'InstanceID' elements identify an individual event instance.
============================================================-->
<xsd:group name="allowed-under-InstanceID">
<xsd:annotation>
<xsd:documentation>
This group defines the elements allowed under the InstanceID element
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="avt:TransportState"/>
<xsd:element ref="avt:TransportStatus"/>
<xsd:element ref="avt:PlaybackStorageMedium"/>
<xsd:element ref="avt:RecordStorageMedium"/>
<xsd:element ref="avt:PossiblePlaybackStorageMedia"/>
<xsd:element ref="avt:PossibleRecordStorageMedia"/>
<xsd:element ref="avt:CurrentPlayMode"/>
<xsd:element ref="avt:TransportPlaySpeed"/>
<xsd:element ref="avt:RecordMediumWriteStatus"/>
<xsd:element ref="avt:CurrentRecordQualityMode"/>
<xsd:element ref="avt:PossibleRecordQualityModes"/>
<xsd:element ref="avt:NumberOfTracks"/>
<xsd:element ref="avt:CurrentTransportActions"/>
<xsd:element ref="avt:CurrentTrack"/>
<xsd:element ref="avt:CurrentTrackDuration"/>
<xsd:element ref="avt:CurrentMediaDuration"/>
<xsd:element ref="avt:CurrentTrackURI"/>
<xsd:element ref="avt:CurrentTrackMetaData"/>
<xsd:element ref="avt:AVTransportURI"/>
<xsd:element ref="avt:AVTransportURIMetaData"/>
<xsd:element ref="avt:NextAVTransportURI"/>
<xsd:element ref="avt:NextAVTransportURIMetaData"/>
<xsd:element ref="avt:RelativeTimePosition"/>
<xsd:element ref="avt:AbsoluteTimePosition"/>
<xsd:element ref="avt:RelativeCounterPosition"/>
<xsd:element ref="avt:AbsoluteCounterPosition"/>
</xsd:choice>
</xsd:group>
<xsd:element name="InstanceID">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
InstanceID elements identify an individual event instance.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="avt:allowed-under-InstanceID"/>
</xsd:choice>
<!-- TODO: That attribute was missing in the spec! -->
<xsd:attribute name="val" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportState
============================================================-->
<xsd:element name="TransportState">
<xsd:complexType>
<xsd:attribute name="val" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="STOPPED"/>
<xsd:enumeration value="PLAYING"/>
<xsd:enumeration value="TRANSITIONING"/>
<xsd:enumeration value="PAUSED_PLAYBACK"/>
<xsd:enumeration value="PAUSED_RECORDING"/>
<xsd:enumeration value="RECORDING"/>
<xsd:enumeration value="NO_MEDIA_PRESENT"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportStatus
============================================================-->
<xsd:element name="TransportStatus">
<xsd:complexType>
<xsd:attribute name="val" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="OK"/>
<xsd:enumeration value="ERROR_OCCURRED"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<!--============================================================
PlaybackStorageMedium
============================================================-->
<xsd:element name="PlaybackStorageMedium">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RecordStorageMedium
============================================================-->
<xsd:element name="RecordStorageMedium">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossiblePlaybackStorageMedia
============================================================-->
<xsd:element name="PossiblePlaybackStorageMedia">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossibleRecordStorageMedia
============================================================-->
<xsd:element name="PossibleRecordStorageMedia">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentPlayMode
============================================================-->
<xsd:element name="CurrentPlayMode">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
TransportPlaySpeed
============================================================-->
<xsd:element name="TransportPlaySpeed">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RecordMediumWriteStatus
============================================================-->
<xsd:element name="RecordMediumWriteStatus">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentRecordQualityMode
============================================================-->
<xsd:element name="CurrentRecordQualityMode">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PossibleRecordQualityModes (!!! TYPO IN SPEC !!!)
============================================================-->
<xsd:element name="PossibleRecordQualityModes">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NumberOfTracks
============================================================-->
<xsd:element name="NumberOfTracks">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrack
============================================================-->
<xsd:element name="CurrentTrack">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackDuration
============================================================-->
<xsd:element name="CurrentTrackDuration">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentMediaDuration
============================================================-->
<xsd:element name="CurrentMediaDuration">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackMetaData
============================================================-->
<xsd:element name="CurrentTrackMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTrackURI
============================================================-->
<xsd:element name="CurrentTrackURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AVTransportURI
============================================================-->
<xsd:element name="AVTransportURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AVTransportURIMetaData
============================================================-->
<xsd:element name="AVTransportURIMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NextAVTransportURI
============================================================-->
<xsd:element name="NextAVTransportURI">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
NextAVTransportURIMetaData
============================================================-->
<xsd:element name="NextAVTransportURIMetaData">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
CurrentTransportActions
============================================================-->
<xsd:element name="CurrentTransportActions">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RelativeTimePosition
============================================================-->
<xsd:element name="RelativeTimePosition">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AbsoluteTimePosition
============================================================-->
<xsd:element name="AbsoluteTimePosition">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RelativeCounterPosition
============================================================-->
<xsd:element name="RelativeCounterPosition">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
AbsoluteTimePosition
============================================================-->
<xsd:element name="AbsoluteCounterPosition">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
@@ -1,60 +0,0 @@
<xsd:schema
targetNamespace="http://purl.org/dc/elements/1.1/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1">
<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="org.fourthline.cling.support.contentdirectory.descriptor.dc"/>
</jaxb:schemaBindings>
</xsd:appinfo>
</xsd:annotation>
<xsd:annotation>
<xsd:documentation xml:lang="en">
Simple DC XML Schema, 2002-10-09
by Pete Johnston (p.johnston@ukoln.ac.uk),
Carl Lagoze (lagoze@cs.cornell.edu), Andy Powell (a.powell@ukoln.ac.uk),
Herbert Van de Sompel (hvdsomp@yahoo.com).
This schema defines terms for Simple Dublin Core, i.e. the 15
elements from the http://purl.org/dc/elements/1.1/ namespace, with
no use of encoding schemes or element refinements.
Default content type for all elements is xsd:string with xml:lang attribute available.
Supercedes version of 2002-03-12.
Amended to remove namespace declaration for http://www.w3.org/XML/1998/namespace namespace,
and to reference lang attribute via built-in xml: namespace prefix.
xsd:appinfo also removed.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="creator" type="xsd:string"/>
<xsd:element name="description" type="xsd:string"/>
<xsd:element name="publisher" type="xsd:string"/>
<xsd:element name="contributor" type="xsd:string"/>
<xsd:element name="date" type="xsd:string"/>
<xsd:element name="language" type="xsd:string"/>
<xsd:element name="relation" type="xsd:string"/>
<xsd:element name="rights" type="xsd:string"/>
<!-- TODO
<xsd:complexType name="elementType">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute ref="xml:lang" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
-->
</xsd:schema>
@@ -1,298 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"
xmlns:didl-lite="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"
xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified" version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1">
<!--
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc"
-->
<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="org.fourthline.cling.support.contentdirectory.descriptor.didl"/>
</jaxb:schemaBindings>
<jaxb:globalBindings generateElementClass="true" typesafeEnumMaxMembers="100">
<!--
<xjc:superClass name="org.fourthline.cling.support.didl.DidlObject"/>
-->
</jaxb:globalBindings>
</xsd:appinfo>
</xsd:annotation>
<xsd:annotation>
<xsd:documentation xml:lang="en">
DIDL-Lite schema for UPnP A/V Content Directory Services, version 1.0.
</xsd:documentation>
</xsd:annotation>
<xsd:import namespace="urn:schemas-upnp-org:metadata-1-0/upnp/" schemaLocation="upnp-cds-1.0.xsd"/>
<xsd:import namespace="http://purl.org/dc/elements/1.1/" schemaLocation="dc-elements-1.1.xsd"/>
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
<xsd:element name="DIDL-Lite">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
'DIDL-Lite' is the root element of DIDL-Lite documents.
&lt;p>
Attributes:
&lt;p>
xml:lang use: optional
&lt;p>
The 'xml:lang' attribute may optionally be used to specify the language of text
in the DIDL-Lite document.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<jaxb:property name="children"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:element ref="didl-lite:item"/>
<xsd:element ref="didl-lite:container"/>
<xsd:element ref="didl-lite:desc"/>
</xsd:choice>
<!-- TODO
<xsd:attribute ref="xml:lang" use="optional"/>
-->
</xsd:complexType>
</xsd:element>
<xsd:element name="container">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
A 'container' element may contain any number of
&lt;p>
1. Dublin Core,&lt;br/>
2. upnp,&lt;br/>
3. res,&lt;br/>
4. ref,&lt;br/>
5 item,&lt;br/>
6. container&lt;br/>
and 7. desc elements.&lt;br/>
&lt;p>
In all cases, the first element in each container child element sequence is
required to be "dc:title". The 'upnp:class' element must also appear under
container. Each container is required to specify a value for the 'id'
and 'parentID' attributes. Each container is also required to specify a value for
the 'restricted' attribute (true, false, 1, 0). When restricted="true", the ability to
change or delete the container is restricted.
&lt;p>
Other optional container element attributes are 'parentID', 'childCount',
and 'searchable'.
&lt;p>
Other optional attributes are 'parentID' and 'childCount'.
&lt;p>
Attributes:
&lt;p>
id type: string use: required&lt;br/>
parentID type: string use: required&lt;br/>
childCount type: int use: optional&lt;br/>
restricted type: boolean use: required&lt;br/>
&lt;p>
The equivalent MPEG21 DIDL element is 'CONTAINER'
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="dc:title"/>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<jaxb:property name="children"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:any namespace="urn:schemas-upnp-org:metadata-1-0/upnp/" processContents="strict"/>
<xsd:any namespace="http://purl.org/dc/elements/1.1/" processContents="strict"/>
<xsd:element ref="didl-lite:desc"/>
<xsd:element ref="didl-lite:item"/>
<xsd:element ref="didl-lite:res"/>
<!--
Section 2.8.3: Incremental navigation i.e. the full hierarchy is never returned
in one call since this is likely to flood the resources available to the control
point (memory, network bandwidth, etc.).
So... why is this recursive then?
-->
<xsd:element ref="didl-lite:container"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="parentID" type="xsd:string" use="required"/>
<xsd:attribute name="childCount" type="xsd:int"/>
<xsd:attribute name="restricted" type="xsd:boolean" use="required"/>
<xsd:attribute name="searchable" type="xsd:boolean"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="item">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
An 'item' element contains any number of
&lt;p/>
1. Dublin Core,&lt;br/>
2. upnp,&lt;br/>
3. res, and&lt;br/>
4. desc elements.&lt;br/>
&lt;p/>
In all cases, the first element in each item child element sequence is required
to be "dc:title". The 'upnp:class' element must also appear under item. Each item
is additionally required to specify a value for the 'id' attribute. If the item
is actually a reference to another item, a value for 'refID' is specified.
Each item is also required to specify a value for the 'parentID attribute, as well
as the 'restricted' attribute (true, false, 1, 0). When restricted="true", the
ability to change or delete the item is restricted.
&lt;p/>
Attributes:
&lt;p/>
id type: string use: required&lt;br/>
parentID type: string use: required&lt;br/>
refID type: string use: optional&lt;br/>
restricted type: boolean use: required&lt;br/>
&lt;p/>
The equivalent MPEG21 DIDL element is 'ITEM'.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="dc:title"/>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:appinfo>
<jaxb:property name="children"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:any namespace="urn:schemas-upnp-org:metadata-1-0/upnp/" processContents="strict"/>
<xsd:any namespace="http://purl.org/dc/elements/1.1/" processContents="strict"/>
<xsd:element ref="didl-lite:desc"/>
<xsd:element ref="didl-lite:res"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="refID" type="xsd:string"/>
<xsd:attribute name="parentID" type="xsd:string" use="required"/>
<xsd:attribute name="restricted" type="xsd:boolean" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="res">
<xsd:complexType mixed="true">
<xsd:annotation>
<xsd:documentation>
A 'res' element indentifies a resource. A resource is typically some type of a
binary asset, such as photo, song, video, etc. A 'res' element contains a uri
that identifies the resource.
&lt;p/>
Attributes:
&lt;p/>
'importUri' type: anyURI use: optional&lt;br/>
The 'importUri' attribute is the optional uri locator for resource update.
&lt;p/>
'protocolInfo' type: string use: required&lt;br/>
The 'protocolInfo' attribute is a string that identifies the streaming or
transport protocol for transmitting the resource. If not present then the
content has not yet been fully imported by the ContentDirectory and is not yet
accesible for playback purposes.
&lt;p/>
'size' type: unsignedLong use: optional&lt;br/>
The size, in bytes, of the resource.
&lt;p/>
'duration' type: string use: optional&lt;br/>
The 'duration' attribute identifies the duration of the playback of the resource, at normal speed.
The form of the duration string is: H*:MM:SS.F*, or H*:MM:SS.F0/F1 where :
H* means any number of digits (including no digits) to indicate elapsed hours
MM means exactly 2 digits to indicate minutes (00 to 59)
SS means exactly 2 digits to indicate seconds (00 to 59)
F* means any number of digits (including no digits) to indicate fractions of seconds
F0/F1 means a fraction, with F0 and F1 at least one digit long, and F0 &lt; F1
The string may be preceded by an optional + or - sign, and the decimal point itself may
be omitted if there are no fractional second digits.
&lt;p/>
'bitrate' type: unsignedInt use: optional&lt;br/>
The bitrate in bytes/second of the resource.
&lt;p/>
'sampleFrequency' type: unsignedInt use: optional&lt;br/>
The sample frequency of the resource in Hz
&lt;p/>
'bitsPerSample' type: unsignedInt use: optional&lt;br/>
The bits per sample of the resource.
&lt;p/>
'nrAudioChannels' type: unsignedInt use: optional&lt;br/>
Number of audio channels of the resource, e.g. 1 for mono, 2 for stereo, 6 for Dolby surround, etc.
&lt;p/>
'resolution' type: pattern-string use: optional&lt;br/>
X*Y resolution of the resource (image or video). The string pattern is restricted to strings of the
form: [0-9]+x[0-9]+ (one or more digits,'x', followed by one or more digits).
&lt;p/>
'colorDepth' type: unsignedInt use: optional&lt;br/>
The color depth in bits of the resource (image or video).
&lt;p/>
'protection' type: string use: optional&lt;br/>
Some statement of the protection type of the resource (not standardized).
&lt;p/>
The equivalent MPEG21 DIDL element is 'RESOURCE'.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="importUri" type="xsd:anyURI"/>
<xsd:attribute name="protocolInfo" type="xsd:string" use="required"/>
<xsd:attribute name="size" type="xsd:unsignedLong"/>
<xsd:attribute name="duration" type="xsd:string"/>
<xsd:attribute name="bitrate" type="xsd:unsignedInt"/>
<xsd:attribute name="sampleFrequency" type="xsd:unsignedInt"/>
<xsd:attribute name="bitsPerSample" type="xsd:unsignedInt"/>
<xsd:attribute name="nrAudioChannels" type="xsd:unsignedInt"/>
<xsd:attribute name="colorDepth" type="xsd:unsignedInt"/>
<xsd:attribute name="protection" type="xsd:string"/>
<xsd:attribute name="resolution">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[0-9]+x[0-9]+"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="desc">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
A 'desc' element identifies a descriptor. A descriptor is intended to contain a block of metadata. A
bio
of a music artist is an example use of 'desc'. A 'desc' element may possess child elements from any
namespace except the DIDL-Lite namespace. Values for 'id' and 'nameSpace' is required. An optional
'type' attribute allows designation of the metadata type, e.g. 'ratings', 'rights', etc.
Attributes:
'id' type: string use: optional
'name' type: string use: optional
'nameSpace' type: uri use: optional
The equivalent MPEG21 DIDL element is 'DESCRIPTOR'.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:any namespace="##other"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="nameSpace" type="xsd:anyURI" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
@@ -1,225 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
targetNamespace="urn:schemas-upnp-org:metadata-1-0/upnp/"
xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="1.0"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1">
<xsd:annotation>
<xsd:appinfo>
<jaxb:schemaBindings>
<jaxb:package name="org.fourthline.cling.support.contentdirectory.descriptor.upnp"/>
</jaxb:schemaBindings>
</xsd:appinfo>
</xsd:annotation>
<xsd:annotation>
<xsd:documentation xml:lang="en">
UPnP Content Directory Service 1.0 schema, derived from the crude examples in the PDF document.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="class">
<xsd:complexType mixed="true">
<!-- TODO: That causes weird namespace errors in marshalled XML output...
<xsd:annotation>
<xsd:appinfo>
<jaxb:class name="Clazz"/>
</xsd:appinfo>
</xsd:annotation>
-->
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="searchClass">
<xsd:complexType mixed="true">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string" use="optional"/>
<xsd:attribute name="includeDerived" type="xsd:boolean" use="required"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="createClass">
<xsd:complexType mixed="true">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="name" type="xsd:string" use="optional"/>
<xsd:attribute name="includeDerived" type="xsd:boolean" use="required"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="writeStatus" type="upnp:writeStatusValue"/>
<xsd:simpleType name="writeStatusValue">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="WRITABLE"/>
<xsd:enumeration value="PROTECTED"/>
<xsd:enumeration value="NOT_WRITABLE"/>
<xsd:enumeration value="UNKNOWN"/>
<xsd:enumeration value="MIXED"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="genre" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Name of the genre to which an object belongs.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="album" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Title of the album to which the item belongs.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="playlist" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Name of a playlist to which the item belongs.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageUsed" type="xsd:long" default="-1">
<xsd:annotation>
<xsd:documentation>
Combined space, in bytes, used by all the objects held in the storage
represented by the container.
Value 1 is reserved to indicate that the capacity is 'unknown'
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageTotal" type="xsd:long" default="-1">
<xsd:annotation>
<xsd:documentation>
Total capacity, in bytes, of the storage represented by the
container.
Value 1 is reserved to indicate that the capacity is 'unknown'
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageFree" type="xsd:long" default="-1">
<xsd:annotation>
<xsd:documentation>
Total free capacity, in bytes, of the storage represented by the container
Value 1 is reserved to indicate that the capacity is 'unknown'
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageMaxPartition" type="xsd:long" default="-1">
<xsd:annotation>
<xsd:documentation>
Largest amount of space, in bytes, available for storing a single resource
in the container.
Value 1 is reserved to indicate that the capacity is 'unknown'
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="storageMedium" type="upnp:storageMediumValue">
<xsd:annotation>
<xsd:documentation>
Indicates the type of storage medium used for the content. Potentially useful
for user-interface purposes.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:simpleType name="storageMediumValue">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="UNKNOWN"/>
<xsd:enumeration value="DV"/>
<xsd:enumeration value="MINI-DV"/>
<xsd:enumeration value="VHS"/>
<xsd:enumeration value="W-VHS"/>
<xsd:enumeration value="S-VHS"/>
<xsd:enumeration value="D-VHS"/>
<xsd:enumeration value="VHSC"/>
<xsd:enumeration value="VIDEO8"/>
<xsd:enumeration value="HI8"/>
<xsd:enumeration value="CD-ROM"/>
<xsd:enumeration value="CD-DA"/>
<xsd:enumeration value="CD-R"/>
<xsd:enumeration value="CD-RW"/>
<xsd:enumeration value="VIDEO-CD"/>
<xsd:enumeration value="SACD"/>
<xsd:enumeration value="MD-AUDIO"/>
<xsd:enumeration value="MD-PICTURE"/>
<xsd:enumeration value="DVD-ROM"/>
<xsd:enumeration value="DVD-VIDEO"/>
<xsd:enumeration value="DVD-R"/>
<xsd:enumeration value="DVD+RW">
<xsd:annotation>
<xsd:appinfo>
<jaxb:typesafeEnumMember name="DVD_PLUS_RW"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:enumeration>
<xsd:enumeration value="DVD-RW"/>
<xsd:enumeration value="DVD-RAM"/>
<xsd:enumeration value="DVD-AUDIO"/>
<xsd:enumeration value="DAT"/>
<xsd:enumeration value="LD"/>
<xsd:enumeration value="HDD"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="longDescription" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
A few lines of description of the content item (longer than
DublinCore's description element).
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="icon" type="xsd:anyURI">
<xsd:annotation>
<xsd:documentation>
Some icon that a control point can use in its UI to display the
content, e.g. a CNN logo for a Tuner channel. Recommend same format
as the icon element in the UPnP device description document schema.
(PNG). Values must be properly escaped URIs as described in [RFC 2396].
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="region" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Some identification of the region, associated with the
"source" of the object, e.g. "US", "Latin America",
"Seattlle".
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="rating" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Rating of the object's resource, for 'parental control' filtering purposes,
such as "R", "PG-13", "X", etc.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:schema>
@@ -1,284 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
TODO: UPNP VIOLATION: RenderingControl 1.0 specification schema says "/RCS/" but examples
in the spec say "/AVT_RCS". We had "/AVT_RCS", then "/RCS", now we have "/RCS/", let's
see who complains.
-->
<xsd:schema targetNamespace="urn:schemas-upnp-org:metadata-1-0/RCS/"
xmlns:rcs="urn:schemas-upnp-org:metadata-1-0/RCS/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Schema for UPnP A/V Rendering Control Service events, version 0.1 (sic!)
</xsd:documentation>
</xsd:annotation>
<!--============================================================
'Event' is the root element of Rendering Control event document fragments.
'InstanceID' is the only valid child of 'Event'.
============================================================-->
<xsd:element name="Event">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
Event is the root element
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="rcs:InstanceID"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<!--============================================================
'InstanceID' elements identify an individual event instance.
============================================================-->
<xsd:group name="allowed-under-InstanceID">
<xsd:annotation>
<xsd:documentation>
This group defines the elements allowed under the InstanceID element
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="rcs:PresetNameList"/>
<xsd:element ref="rcs:Brightness"/>
<xsd:element ref="rcs:Contrast"/>
<xsd:element ref="rcs:Sharpness"/>
<xsd:element ref="rcs:RedVideoGain"/>
<xsd:element ref="rcs:GreenVideoGain"/>
<xsd:element ref="rcs:BlueVideoGain"/>
<xsd:element ref="rcs:RedVideoBlackLevel"/>
<xsd:element ref="rcs:GreenVideoBlackLevel"/>
<xsd:element ref="rcs:BlueVideoBlackLevel"/>
<xsd:element ref="rcs:ColorTemperature"/>
<xsd:element ref="rcs:HorizontalKeystone"/>
<xsd:element ref="rcs:VerticalKeystone"/>
<xsd:element ref="rcs:Mute"/>
<xsd:element ref="rcs:Volume"/>
<xsd:element ref="rcs:VolumeDB"/>
<xsd:element ref="rcs:Loudness"/>
</xsd:choice>
</xsd:group>
<xsd:element name="InstanceID">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
InstanceID elements identify an individual event instance.
</xsd:documentation>
</xsd:annotation>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:group ref="rcs:allowed-under-InstanceID"/>
</xsd:choice>
<xsd:attribute name="val" type="xsd:unsignedInt" use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
PresetNameList
============================================================-->
<xsd:element name="PresetNameList">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Brightness
============================================================-->
<xsd:element name="Brightness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Contrast
============================================================-->
<xsd:element name="Contrast">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Sharpness
============================================================-->
<xsd:element name="Sharpness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RedVideoGain
============================================================-->
<xsd:element name="RedVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
GreenVideoGain
============================================================-->
<xsd:element name="GreenVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
BlueVideoGain
============================================================-->
<xsd:element name="BlueVideoGain">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
RedVideoBlackLevel
============================================================-->
<xsd:element name="RedVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
GreenVideoBlackLevel
============================================================-->
<xsd:element name="GreenVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
BlueVideoBlackLevel
============================================================-->
<xsd:element name="BlueVideoBlackLevel">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
ColorTemperature
============================================================-->
<xsd:element name="ColorTemperature">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
HorizontalKeystone
============================================================-->
<xsd:element name="HorizontalKeystone">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
VerticalKeystone
============================================================-->
<xsd:element name="VerticalKeystone">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Mute
============================================================-->
<xsd:element name="Mute">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:boolean"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Volume
============================================================-->
<xsd:element name="Volume">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:unsignedInt"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
VolumeDB
============================================================-->
<xsd:element name="VolumeDB">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:integer"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
<!--============================================================
Loudness
============================================================-->
<xsd:element name="Loudness">
<xsd:complexType>
<xsd:attribute name="val" type="xsd:boolean"
use="required"/>
<xsd:attribute name="channel" type="xsd:string"
use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
@@ -1,1030 +0,0 @@
#
# Default JavaScript messages file.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# This is replaced during jar assembly from property string
# and should not be translated
implementation.version = @IMPLEMENTATION.VERSION@
#
# To add JavaScript error messages for a particular locale, create a
# new Messages_[locale].properties file, where [locale] is the Java
# string abbreviation for that locale. For example, JavaScript
# messages for the Polish locale should be located in
# Messages_pl.properties, and messages for the Italian Swiss locale
# should be located in Messages_it_CH.properties. Message properties
# files should be accessible through the classpath under
# org.mozilla.javascript.resources
#
# See:
# java.util.ResourceBundle
# java.text.MessageFormat
#
# SomeJavaClassWhereUsed
params.omit.non.js.object.warning = true
msg.non.js.object.warning =\
RHINO USAGE WARNING: Missed Context.javaToJS() conversion: Rhino runtime detected object "{0}" of class "{1}" where it expected String, Number, Boolean or Scriptable instance. Please check your code for missing Context.javaToJS() call.
# Codegen
msg.dup.parms =\
Duplicate parameter name "{0}".
msg.too.big.jump =\
Program too complex: too big jump offset.
msg.too.big.index =\
Program too complex: internal index exceeds 64K limit.
msg.while.compiling.fn =\
Encountered code generation error while compiling function "{0}": {1}
msg.while.compiling.script =\
Encountered code generation error while compiling script: {0}
# Context
msg.ctor.not.found =\
Constructor for "{0}" not found.
msg.not.ctor =\
"{0}" is not a constructor.
# FunctionObject
msg.varargs.ctor =\
Method or constructor "{0}" must be static with the signature \
"(Context cx, Object[] args, Function ctorObj, boolean inNewExpr)" \
to define a variable arguments constructor.
msg.varargs.fun =\
Method "{0}" must be static with the signature \
"(Context cx, Scriptable thisObj, Object[] args, Function funObj)" \
to define a variable arguments function.
msg.incompat.call =\
Method "{0}" called on incompatible object.
msg.incompat.call.details =\
Method "{0}" called on incompatible object ({1} is not an instance of {2}).
msg.bad.parms =\
Unsupported parameter type "{0}" in method "{1}".
msg.bad.method.return =\
Unsupported return type "{0}" in method "{1}".
msg.bad.ctor.return =\
Construction of objects of type "{0}" is not supported.
msg.no.overload =\
Method "{0}" occurs multiple times in class "{1}".
msg.method.not.found =\
Method "{0}" not found in "{1}".
msg.method.missing.parameter =\
{0}: At least {1} arguments required, but only {2} passed
# IRFactory
msg.bad.for.in.lhs =\
Invalid left-hand side of for..in loop.
msg.mult.index =\
Only one variable allowed in for..in loop.
msg.bad.for.in.destruct =\
Left hand side of for..in loop must be an array of length 2 to accept \
key/value pair.
msg.bad.computed.property.in.destruct =\
Unsupported computed property in destructuring.
msg.cant.convert =\
Can''t convert to type "{0}".
msg.bad.assign.left =\
Invalid assignment left-hand side.
msg.bad.decr =\
Invalid decrement operand.
msg.bad.incr =\
Invalid increment operand.
msg.bad.yield =\
yield must be in a function.
msg.yield.parenthesized =\
yield expression must be parenthesized.
msg.nullish.bad.token =\
Syntax Error: Unexpected token.
# NativeGlobal
msg.cant.call.indirect =\
Function "{0}" must be called directly, and not by way of a \
function of another name.
msg.eval.nonstring =\
Calling eval() with anything other than a primitive string value will \
simply return the value. Is this what you intended?
msg.eval.nonstring.strict =\
Calling eval() with anything other than a primitive string value is not \
allowed in strict mode.
msg.bad.destruct.op =\
Invalid destructuring assignment operator
# NativeCall
msg.only.from.new =\
"Constructor {0}" may only be invoked from a "new" expression.
msg.deprec.ctor =\
The "{0}" constructor is deprecated.
# NativeFunction
msg.no.function.ref.found =\
no source found to decompile function reference {0}
msg.arg.isnt.array =\
second argument to Function.prototype.apply must be an array
# NativeGlobal
msg.bad.esc.mask =\
invalid string escape mask
# NativeJavaClass
msg.cant.instantiate =\
error instantiating ({0}): class {1} is interface or abstract
msg.bad.ctor.sig =\
Found constructor with wrong signature: \
{0} calling {1} with signature {2}
msg.not.java.obj =\
Expected argument to getClass() to be a Java object.
msg.no.java.ctor =\
Java constructor for "{0}" with arguments "{1}" not found.
# NativeJavaMethod
msg.method.ambiguous =\
The choice of Java method {0}.{1} matching JavaScript argument types ({2}) is ambiguous; \
candidate methods are: {3}
msg.constructor.ambiguous =\
The choice of Java constructor {0} matching JavaScript argument types ({1}) is ambiguous; \
candidate constructors are: {2}
# NativeJavaObject
msg.conversion.not.allowed =\
Cannot convert {0} to {1}
msg.no.empty.interface.conversion =\
Cannot convert function to interface {0} with no methods
msg.no.function.interface.conversion =\
Cannot convert function to interface {0} since it contains methods with \
different names
msg.undefined.function.interface =\
Property "{0}" is not defined in interface adapter
msg.not.function.interface =\
Property "{0}" is not a function in interface adapter
# NativeJavaPackage
msg.not.classloader =\
Constructor for "Packages" expects argument of type java.lang.Classloader
# NativeRegExp
msg.bad.quant =\
Invalid quantifier {0}
msg.overlarge.backref =\
Overly large back reference {0}
msg.overlarge.min =\
Overly large minimum {0}
msg.overlarge.max =\
Overly large maximum {0}
msg.zero.quant =\
Zero quantifier {0}
msg.max.lt.min =\
Invalid regular expression: The quantifier maximum ''{0}'' is less than the minimum ''{1}''.
msg.unterm.quant =\
Unterminated quantifier {0}
msg.unterm.paren =\
Unterminated parenthetical {0}
msg.unterm.class =\
Unterminated character class {0}
msg.bad.range =\
Invalid range in character class.
msg.trail.backslash =\
Trailing \\ in regular expression.
msg.re.unmatched.right.paren =\
unmatched ) in regular expression.
msg.no.regexp =\
Regular expressions are not available.
msg.bad.backref =\
back-reference exceeds number of capturing parentheses.
msg.bad.regexp.compile =\
Only one argument may be specified if the first argument to \
RegExp.prototype.compile is a RegExp object.
msg.arg.not.object =\
Expected argument of type object, but instead had type {0}
msg.str.match.all.no.global.flag =\
String.prototype.matchAll called with a non-global RegExp argument
# NativeDate
msg.invalid.date =\
Date is invalid.
msg.toisostring.must.return.primitive =\
toISOString must return a primitive value, but instead returned "{0}"
msg.invalid.toprimitive.hint =\
[Symbol.toPrimitive]: expected "string", "number", or "default", but got "{0}"
# NativeJSON
msg.json.cant.serialize =\
Do not know how to serialize a {0}
# Parser
msg.got.syntax.errors = \
Compilation produced {0} syntax errors.
msg.var.redecl =\
redeclaration of var {0}.
msg.const.redecl =\
redeclaration of const {0}.
msg.let.redecl =\
redeclaration of variable {0}.
msg.parm.redecl =\
redeclaration of formal parameter {0}.
msg.fn.redecl =\
redeclaration of function {0}.
msg.let.decl.not.in.block =\
let declaration not directly within block
msg.bad.object.init =\
invalid object initializer
# NodeTransformer
msg.dup.label =\
duplicated label
msg.undef.label =\
undefined label
msg.bad.break =\
unlabelled break must be inside loop or switch
msg.continue.outside =\
continue must be inside loop
msg.continue.nonloop =\
continue can only use labeles of iteration statements
msg.bad.throw.eol =\
Line terminator is not allowed between the throw keyword and throw \
expression.
msg.no.paren.parms =\
missing ( before function parameters.
msg.no.parm =\
missing formal parameter
msg.no.paren.after.parms =\
missing ) after formal parameters
msg.parm.after.rest =\
parameter after rest parameter
msg.no.brace.body =\
missing '{' before function body
msg.no.brace.after.body =\
missing } after function body
msg.no.paren.cond =\
missing ( before condition
msg.no.paren.after.cond =\
missing ) after condition
msg.no.semi.stmt =\
missing ; before statement
msg.missing.semi =\
missing ; after statement
msg.no.name.after.dot =\
missing name after . operator
msg.no.name.after.coloncolon =\
missing name after :: operator
msg.no.name.after.dotdot =\
missing name after .. operator
msg.no.name.after.xmlAttr =\
missing name after .@
msg.no.bracket.index =\
missing ] in index expression
msg.no.paren.switch =\
missing ( before switch expression
msg.no.paren.after.switch =\
missing ) after switch expression
msg.no.brace.switch =\
missing '{' before switch body
msg.bad.switch =\
invalid switch statement
msg.no.colon.case =\
missing : after case expression
msg.double.switch.default =\
double default label in the switch statement
msg.no.while.do =\
missing while after do-loop body
msg.no.paren.for =\
missing ( after for
msg.no.semi.for =\
missing ; after for-loop initializer
msg.no.semi.for.cond =\
missing ; after for-loop condition
msg.in.after.for.name =\
missing in after for
msg.no.paren.for.ctrl =\
missing ) after for-loop control
msg.no.paren.with =\
missing ( before with-statement object
msg.no.paren.after.with =\
missing ) after with-statement object
msg.no.with.strict =\
with statements not allowed in strict mode
msg.no.paren.after.let =\
missing ( after let
msg.no.paren.let =\
missing ) after variable list
msg.no.curly.let =\
missing } after let statement
msg.bad.return =\
invalid return
msg.no.brace.block =\
missing } in compound statement
msg.bad.label =\
invalid label
msg.bad.var =\
missing variable name
msg.bad.var.init =\
invalid variable initialization
msg.no.colon.cond =\
missing : in conditional expression
msg.no.paren.arg =\
missing ) after argument list
msg.no.bracket.arg =\
missing ] after element list
msg.bad.prop =\
invalid property id
msg.no.colon.prop =\
missing : after property id
msg.no.brace.prop =\
missing } after property list
msg.no.paren =\
missing ) in parenthetical
msg.reserved.id =\
identifier is a reserved word: {0}
msg.super.shorthand.function =\
super should be inside a shorthand function
msg.optional.super =\
super is not allowed in an optional chaining expression
msg.super.delete =\
cannot delete a super property
msg.no.paren.catch =\
missing ( before catch-block condition
msg.bad.catchcond =\
invalid catch block condition
msg.catch.unreachable =\
any catch clauses following an unqualified catch are unreachable
msg.no.brace.try =\
missing '{' before try block
msg.no.brace.catchblock =\
missing '{' before catch-block body
msg.try.no.catchfinally =\
''try'' without ''catch'' or ''finally''
msg.no.return.value =\
function {0} does not always return a value
msg.anon.no.return.value =\
anonymous function does not always return a value
msg.return.inconsistent =\
return statement is inconsistent with previous usage
msg.generator.returns =\
generator function {0} returns a value
msg.anon.generator.returns =\
anonymous generator function returns a value
msg.syntax.invalid.assignment.lhs =\
syntax error: Invalid left-hand side in assignment
msg.syntax =\
syntax error
msg.unexpected.eof =\
Unexpected end of file
msg.XML.bad.form =\
illegally formed XML syntax
msg.XML.not.available =\
XML runtime not available
msg.too.deep.parser.recursion =\
Too deep recursion while parsing
msg.too.many.constructor.args =\
Too many constructor arguments
msg.too.many.function.args =\
Too many function arguments
msg.no.side.effects =\
Code has no side effects
msg.extra.trailing.semi =\
Extraneous trailing semicolon
msg.extra.trailing.comma =\
Trailing comma is not legal in an ECMA-262 object initializer
msg.trailing.array.comma =\
Trailing comma in array literal has different cross-browser behavior
msg.equal.as.assign =\
Test for equality (==) mistyped as assignment (=)?
msg.var.hides.arg =\
Variable {0} hides argument
msg.destruct.assign.no.init =\
Missing = in destructuring declaration
msg.default.args =\
Default values are only supported in version >= 200
msg.no.old.octal.strict =\
Old octal numbers prohibited in strict mode.
msg.no.old.octal.bigint =\
Old octal numbers prohibited in BigInt.
msg.dup.obj.lit.prop.strict =\
Property "{0}" already defined in this object literal.
msg.dup.param.strict =\
Parameter "{0}" already declared in this function.
msg.bad.id.strict =\
"{0}" is not a valid identifier for this use in strict mode.
msg.no.unary.expr.on.left.exp =\
"{0}" is not allowed on the left-hand side of "**".
# ScriptRuntime
# is there a better message for this?
# it's currently only used as a poison pill for caller, caller and arguments properties
msg.op.not.allowed =\
This operation is not allowed.
msg.no.properties =\
{0} has no properties.
msg.invalid.iterator =\
Invalid iterator value
msg.iterator.primitive =\
__iterator__ returned a primitive value
msg.not.iterable = \
{0} is not iterable
msg.invalid.for.each = \
invalid for each loop
msg.assn.create.strict =\
Assignment to undeclared variable {0}
msg.ref.undefined.prop =\
Reference to undefined property "{0}"
msg.prop.not.found =\
Property {0} not found.
msg.set.prop.no.setter =\
Cannot set property {0} that has only a getter to value ''{1}''.
msg.invalid.type =\
Invalid JavaScript value of type {0}
msg.primitive.expected =\
Primitive type expected (had {0} instead)
msg.namespace.expected =\
Namespace object expected to left of :: (found {0} instead)
msg.null.to.object =\
Cannot convert null to an object.
msg.undef.to.object =\
Cannot convert undefined to an object.
msg.cant.convert.to.bigint =\
Cannot convert {0} to an BigInt.
msg.cant.convert.to.bigint.isnt.integer =\
Cannot convert {0} to an BigInt. It isn\'t an integer.
msg.bigint.bad.form =\
illegally formed BigInt syntax
msg.cyclic.value =\
Cyclic {0} value not allowed.
msg.is.not.defined =\
"{0}" is not defined.
msg.undef.prop.read =\
Cannot read property "{1}" from {0}
msg.undef.prop.write =\
Cannot set property "{1}" of {0} to "{2}"
msg.undef.prop.delete =\
Cannot delete property "{1}" of {0}
msg.undef.method.call =\
Cannot call method "{1}" of {0}
msg.undef.with =\
Cannot apply "with" to {0}
msg.isnt.function =\
{0} is not a function, it is {1}.
msg.isnt.function.in =\
Cannot call property {0} in object {1}. It is not a function, it is "{2}".
msg.function.not.found =\
Cannot find function {0}.
msg.function.not.found.in =\
Cannot find function {0} in object {1}.
msg.isnt.xml.object =\
{0} is not an xml object.
msg.no.ref.to.get =\
{0} is not a reference to read reference value.
msg.no.ref.to.set =\
{0} is not a reference to set reference value to {1}.
msg.no.ref.from.function =\
Function {0} can not be used as the left-hand side of assignment \
or as an operand of ++ or -- operator.
msg.bad.default.value =\
Object''s getDefaultValue() method returned an object.
msg.instanceof.not.object = \
Can''t use ''instanceof'' on a non-object.
msg.instanceof.bad.prototype = \
''prototype'' property of {0} is not an object.
msg.in.not.object = \
Can''t use ''in'' on a non-object.
msg.bad.radix = \
illegal radix {0}.
msg.division.zero = \
Division by zero.
msg.bigint.negative.exponent = \
BigInt negative exponent.
msg.bigint.out.of.range.arithmetic = \
BigInt is too large.
msg.cant.convert.to.primitive = \
Cannot convert object to primitive value.
# ScriptableObject
msg.default.value =\
Cannot find default value for object.
msg.zero.arg.ctor =\
Cannot load class "{0}" which has no zero-parameter constructor.
duplicate.defineClass.name =\
Invalid method "{0}": name "{1}" is already in use.
msg.ctor.multiple.parms =\
Can''t define constructor or class {0} since more than one \
constructor has multiple parameters.
msg.extend.scriptable =\
{0} must extend ScriptableObject in order to define property {1}.
msg.bad.getter.parms =\
In order to define a property, getter {0} must have zero parameters \
or a single ScriptableObject parameter.
msg.obj.getter.parms =\
Expected static or delegated getter {0} to take a ScriptableObject parameter.
msg.getter.static =\
Getter and setter must both be static or neither be static.
msg.setter.return =\
Setter must have void return type: {0}
msg.setter2.parms =\
Two-parameter setter must take a ScriptableObject as its first parameter.
msg.setter1.parms =\
Expected single parameter setter for {0}
msg.setter2.expected =\
Expected static or delegated setter {0} to take two parameters.
msg.setter.parms =\
Expected either one or two parameters for setter.
msg.setter.bad.type =\
Unsupported parameter type "{0}" in setter "{1}".
msg.add.sealed =\
Cannot add a property to a sealed object: {0}.
msg.remove.sealed =\
Cannot remove a property from a sealed object: {0}.
msg.modify.sealed =\
Cannot modify a property of a sealed object: {0}.
msg.modify.readonly =\
Cannot modify readonly property: {0}.
msg.both.data.and.accessor.desc =\
Cannot be both a data and an accessor descriptor.
msg.change.configurable.false.to.true =\
Cannot change the configurable attribute of "{0}" from false to true.
msg.change.enumerable.with.configurable.false =\
Cannot change the enumerable attribute of "{0}" because configurable is false.
msg.change.writable.false.to.true.with.configurable.false =\
Cannot change the writable attribute of "{0}" from false to true because configurable is false.
msg.change.value.with.writable.false =\
Cannot change the value of attribute "{0}" because writable is false.
msg.change.getter.with.configurable.false =\
Cannot change the get attribute of "{0}" because configurable is false.
msg.change.setter.with.configurable.false =\
Cannot change the set attribute of "{0}" because configurable is false.
msg.change.property.data.to.accessor.with.configurable.false =\
Cannot change "{0}" from a data property to an accessor property because configurable is false.
msg.change.property.accessor.to.data.with.configurable.false =\
Cannot change "{0}" from an accessor property to a data property because configurable is false.
msg.not.extensible =\
Cannot add properties to this object because extensible is false.
msg.delete.property.with.configurable.false =\
Cannot delete "{0}" property because configurable is false.
# TokenStream
msg.missing.exponent =\
missing exponent
msg.caught.nfe =\
number format error
msg.unterminated.string.lit =\
unterminated string literal
msg.unterminated.comment =\
unterminated comment
msg.unterminated.re.lit =\
unterminated regular expression literal
msg.invalid.re.flag =\
invalid flag ''{0}'' after regular expression
msg.no.re.input.for =\
no input for {0}
msg.illegal.character =\
illegal character: {0}
msg.invalid.escape =\
invalid Unicode escape sequence
msg.bad.namespace =\
not a valid default namespace statement. \
Syntax is: default xml namespace = EXPRESSION;
# TokensStream warnings
msg.bad.octal.literal =\
illegal octal literal digit {0}; interpreting it as a decimal digit
msg.reserved.keyword =\
illegal usage of future reserved keyword {0}; interpreting it as ordinary identifier
# LiveConnect errors
msg.java.internal.field.type =\
Internal error: type conversion of {0} to assign to {1} on {2} failed.
msg.java.conversion.implicit_method =\
Can''t find converter method "{0}" on class {1}.
msg.java.method.assign =\
Java method "{0}" cannot be assigned to.
msg.java.internal.private =\
Internal error: attempt to access private/protected field "{0}".
msg.java.no_such_method =\
Can''t find method {0}.
msg.script.is.not.constructor =\
Script objects are not constructors.
msg.nonjava.method =\
Java method "{0}" was invoked with {1} as "this" value that can not be converted to Java type {2}.
msg.java.member.not.found =\
Java class "{0}" has no public instance field or method named "{1}".
msg.java.array.index.out.of.bounds =\
Array index {0} is out of bounds [0..{1}].
msg.java.array.member.not.found =\
Java arrays have no public instance fields or methods named "{0}".
msg.pkg.int =\
Java package names may not be numbers.
msg.access.prohibited =\
Access to Java class "{0}" is prohibited.
# ImporterTopLevel
msg.ambig.import =\
Ambiguous import: "{0}" and and "{1}".
msg.not.pkg =\
Function importPackage must be called with a package; had "{0}" instead.
msg.not.class =\
Function importClass must be called with a class; had "{0}" instead.
msg.not.class.not.pkg =\
"{0}" is neither a class nor a package.
msg.prop.defined =\
Cannot import "{0}" since a property by that name is already defined.
#JavaAdapter
msg.adapter.zero.args =\
JavaAdapter requires at least one argument.
msg.not.java.class.arg = \
Argument {0} is not Java class: {1}.
#JavaAdapter
msg.only.one.super = \
Only one class may be extended by a JavaAdapter. Had {0} and {1}.
# Arrays
msg.arraylength.bad =\
Inappropriate array length.
# Arrays
msg.arraylength.too.big =\
Array length {0} exceeds supported capacity limit.
msg.empty.array.reduce =\
Reduce of empty array with no initial value
# URI
msg.bad.uri =\
Malformed URI sequence.
# Number
msg.bad.precision =\
Precision {0} out of range.
# NativeGenerator
msg.send.newborn =\
Attempt to send value to newborn generator
msg.already.exec.gen =\
Already executing generator
msg.StopIteration.invalid =\
StopIteration may not be changed to an arbitrary object.
msg.generator.executing =\
The generator is still executing from a previous invocation.
# Interpreter
msg.yield.closing =\
Yield from closing generator
msg.called.null.or.undefined=\
{0}.prototype.{1} method called on null or undefined
msg.first.arg.not.regexp=\
First argument to {0}.prototype.{1} must not be a regular expression
msg.arrowfunction.generator =\
arrow function can not become generator
# Arguments
msg.arguments.not.access.strict =\
Cannot access "{0}" property of the arguments object in strict mode.
msg.object.cyclic.prototype =\
Cyclic prototype "{0}" value not allowed.
msg.default.args.use.strict =\
A function cannot have "use strict" directive with default arguments
# Symbol support
msg.object.not.symbolscriptable =\
Object {0} does not support Symbol keys
msg.no.assign.symbol.strict =\
Symbol objects may not be assigned properties in strict mode
msg.not.a.string =\
The object is not a string
msg.not.a.number =\
The object is not a number
msg.cant.convert.to.number =\
Cannot convert {0} to a number
msg.no.symbol.new =\
Symbol objects may not be constructed using \"new\"
msg.compare.symbol =\
Symbol objects may not be compared
msg.no.new =\
{0} objects may not be constructed using \"new\"
msg.map.function.not =\
Map function is not actually a function
msg.constructor.no.function =\
The constructor for {0} may not be invoked as a function
msg.this.not.instance =\
\"this\" is not an instance of the class
# Promises
msg.function.expected =\
Expecting the first argument to be a function
msg.constructor.expected =\
Expecting the first argument to be a constructor
msg.promise.self.resolution =\
Promise is being self-resolved
msg.promise.capability.state =\
Invalid promise capability state
msg.promise.all.toobig =\
Too many inputs to Promise.all
msg.promise.any.toobig =\
Too many inputs to Promise.any
msg.typed.array.ctor.incompatible = \
Method %TypedArray%.prototype.{0} called on incompatible receiver
msg.typed.array.bad.offset = \
offset {0} out of range
msg.typed.array.bad.length = \
length {0} out of range
msg.typed.array.bad.offset.byte.size = \
offset {0} must be a multiple of the byte size {1}
msg.typed.array.bad.buffer.length.byte.size = \
used buffer length {0} must be a multiple of the byte size {1}
msg.typed.array.bad.source.array = \
source array is too long
msg.typed.array.index.out.of.bounds =\
index {0} is out of bounds [{1}..{2}]
# Error
msg.iterable.expected =\
Expected the first argument to be iterable
# ArrayBuffer
msg.species.invalid.ctor =\
The [Symbol.species] property of object's constructor is not a constructor
msg.arraybuf.smaller.len =\
Expected ArrayBuffer with at least {0} bytes, but got {1} bytes instead
msg.arraybuf.same =\
Expected different ArrayBuffer
@@ -1,10 +0,0 @@
#
# English JavaScript messages file.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# The base messages file is used for all messages, but this file is
# here so that English is selectable as a language when the default
# Locale also has a translation.
@@ -1,821 +0,0 @@
#
# French JavaScript messages file.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# Codegen
msg.dup.parms =\
Le nom de param\u00E8tre "{0}" existe d\u00E9j\u00E0.
msg.too.big.jump =\
Programme trop complexe: d\u00E9calage de saut trop important
msg.too.big.index =\
Programme trop complexe: l''indice interne d\u00E9passe la limite de 64\u00a0ko
msg.while.compiling.fn =\
Une erreur de g\u00e9n\u00e9ration de code a \u00e9t\u00e9 rencontr\u00e9e \u00e0 la compilation de la fonction "{0}": {1}
msg.while.compiling.script =\
Une erreur de g\u00e9n\u00e9ration de code a \u00e9t\u00e9 rencontr\u00e9e \u00e0 la compilation du script: {0}
# Context
msg.ctor.not.found =\
Le constructeur de "{0}" est introuvable
msg.not.ctor =\
{0} n''est pas un constructeur
# FunctionObject
msg.varargs.ctor =\
La m\u00E9thode ou le constructeur "{0}" doit \u00EAtre statique avec la signature \
"(Context cx, Object[] args, Function ctorObj, boolean inNewExpr)" \
pour d\u00E9finir un constructeur d''arguments de variable.
msg.varargs.fun =\
La m\u00E9thode "{0}" doit \u00EAtre statique avec la signature \
"(Context cx, Scriptable thisObj, Object[] args, Function funObj)" \
pour d\u00E9finir une fonction d''arguments de variable
msg.incompat.call =\
La m\u00E9thode "{0}" a \u00E9t\u00E9 appel\u00E9e dans un objet non compatible
msg.bad.parms =\
Les param\u00E8tres de la m\u00E9thode sont incorrects pour "{0}"
msg.bad.method.return =\
Le type de retour "{0}" de la m\u00e9thode "{1}" est incorrect.
msg.bad.ctor.return =\
La construction d''objets du type "{0}" n''est pas possible.
msg.no.overload =\
La m\u00E9thode "{0}" appara\u00EEt plusieurs fois dans la classe "{1}"
msg.method.not.found =\
La m\u00E9thode "{0}" est introuvable dans "{1}"
# IRFactory
msg.bad.for.in.lhs =\
La partie gauche de la boucle for..in est incorrecte
msg.mult.index =\
Une seule variable est autoris\u00E9e dans la boucle for..in
msg.bad.for.in.destruct =\
La partie gauche de la boucle for..in doit \u00eatre un tableau de longueur 2 pour accepter \
une paire clef/valeur.
msg.cant.convert =\
La conversion en type "{0}" est impossible
msg.bad.assign.left =\
La partie gauche de l''affectation est incorrecte
msg.bad.decr =\
L''op\u00e9rande d\u00e9cr\u00e9ment\u00e9e est incorrecte.
msg.bad.incr =\
L''op\u00e9rande incr\u00e9ment\u00e9e est incorrecte.
msg.bad.yield =\
''yield'' doit \u00eatre dans une fonction.
msg.yield.parenthesized =\
L''expression suivant ''yield'' doit \u00eatre entre parenth\u00e8ses.
msg.nullish.bad.token =\
Erreur de syntaxe: Jeton inattendu.
# NativeGlobal
msg.cant.call.indirect =\
La fonction "{0}" doit \u00EAtre appel\u00E9e directement et non par l''interm\u00E9diaire \
d''une fonction portant un autre nom
msg.eval.nonstring =\
Si vous appelez la fonction eval() avec une valeur qui n''est pas \u00E0 une cha\u00EEne primitive, \
c''est la valeur en question qui est renvoy\u00E9e. \u00E9tait-ce votre intention?
msg.eval.nonstring.strict =\
La fonction eval() ne peut \u00eatre appel\u00e9e avec une valeur autre qu''une cha\u00EEne primitive \
en mode strict
msg.bad.destruct.op =\
L''op\u00e9rateur de l''assignation d\u00e9structurante est incorrect
# NativeCall
msg.only.from.new =\
{0} ne peut \u00EAtre appel\u00E9e qu''\u00E0 partir d''une "nouvelle" expression.
msg.deprec.ctor =\
Le constructeur "{0}" est d\u00E9conseill\u00E9
# NativeFunction
msg.no.function.ref.found =\
aucune source n''a \u00E9t\u00E9 trouv\u00E9e pour d\u00E9compiler la r\u00E9f\u00E9rence de fonction {0}
msg.arg.isnt.array =\
le second argument de la m\u00E9thode Function.prototype.apply doit \u00EAtre un tableau
# NativeGlobal
msg.bad.esc.mask =\
le masque d''\u00E9chappement de cha\u00EEne est incorrect
# NativeJavaClass
msg.cant.instantiate =\
erreur lors de l''instanciation ({0}): la classe {1} est une classe interface ou abstract
msg.bad.ctor.sig =\
Un constructeur avec une signature incorrecte a \u00E9t\u00E9 d\u00E9tect\u00E9: \
{0} qui appelle {1} avec la signature {2}
msg.not.java.obj =\
L''argument attendu pour la fonction getClass() doit \u00EAtre un objet Java
msg.no.java.ctor =\
Le constructeur Java de "{0}" avec les arguments "{1}" est introuvable
# NativeJavaMethod
msg.method.ambiguous =\
Le choix de la m\u00E9thode Java {0}.{1} correspondant aux types d''argument JavaScript ({2}) est ambigu. \
Les m\u00E9thodes propos\u00E9es sont les suivantes: {3}
msg.constructor.ambiguous =\
Le choix du constructeur Java {0} correspondant aux types d''argument JavaScript ({1}) est ambigu. \
Les constructeurs propos\u00E9s sont les suivants: {2}
# NativeJavaObject
msg.conversion.not.allowed =\
Impossible de convertir {0} en {1}
msg.no.empty.interface.conversion =\
Impossible de convertir la fonction en interface {0} sans aucune m\u00e9thode
msg.no.function.interface.conversion =\
Impossible de convertir la fonction {0} en interface puisqu''elle contient des m\u00e9thodes avec \
des noms diff\u00e9rents
msg.undefined.function.interface =\
La propri\u00E9t\u00E9 "{0}" n''est pas d\u00E9finie dans l''adaptateur d''interface
msg.not.function.interface =\
La propri\u00E9t\u00E9 "{0}" n''est pas une fonction dans l''adaptateur d''interface
# NativeJavaPackage
msg.not.classloader =\
Le constructeur de "Packages" attend un argument de type java.lang.Classloader
# NativeRegExp
msg.bad.quant =\
Le quantificateur {0} est incorrect
msg.overlarge.backref =\
La r\u00e9f\u00e9rence ant\u00e9rieure est trop importante {0}
msg.overlarge.min =\
Le minimum {0} est trop important
msg.overlarge.max =\
Le maximum {0} est trop important
msg.zero.quant =\
Le quantificateur {0} est nul
msg.max.lt.min =\
Expression r\u00e9guli\u00e8re invalide : Le quantificateur maximum ''{0}'' est inf\u00e9rieur au minimum ''{1}''.
msg.unterm.quant =\
Le quantificateur {0} n''a pas de limite
msg.unterm.paren =\
Les parenth\u00E8ses {0} n''ont pas de limite
msg.unterm.class =\
La classe de caract\u00E8res {0} n''a pas de limite
msg.bad.range =\
La classe de caract\u00E8res contient une plage de valeurs incorrecte
msg.trail.backslash =\
\\ \u00e0 la fin d''une expression rationnelle
msg.re.unmatched.right.paren =\
Parenth\u00e8se fermante orpheline dans l''expression rationnelle
msg.no.regexp =\
Les expressions rationnelles ne sont pas disponibles
msg.bad.backref =\
la r\u00E9f\u00E9rence ant\u00E9rieure d\u00E9passe le nombre de parenth\u00E8ses de capture
msg.bad.regexp.compile =\
Un seul argument peut \u00eatre sp\u00e9cifi\u00e9 si le premier argument de \
RegExp.prototype.compile est un objet de type RegExp.
msg.arg.not.object =\
L''argument attendu est de type ''object'' au lieu de ''{0}''
# NativeDate
msg.invalid.date =\
Date incorrecte.
msg.toisostring.must.return.primitive =\
toISOString doit renvoyer une valeur primitive, mais a retourn\u00e9 \u00e0 la place "{0}"
# Parser
msg.got.syntax.errors = \
La compilation a produit {0} erreur(s) de syntaxe.
msg.var.redecl =\
Erreur de type: la variable "{0}" a \u00e9t\u00e9 de nouveau d\u00e9clar\u00e9e.
msg.const.redecl =\
Erreur de type: la constante "{0}" a \u00e9t\u00e9 de nouveau d\u00e9clar\u00e9e.
msg.let.redecl =\
Erreur de type: la variable "{0}" a \u00e9t\u00e9 de nouveau d\u00e9clar\u00e9e.
msg.parm.redecl =\
Erreur de type: le param\u00e8tre formel "{0}" a \u00e9t\u00e9 de nouveau d\u00e9clar\u00e9.
msg.fn.redecl =\
Erreur de type: la fonction "{0}" a \u00E9t\u00E9 de nouveau d\u00E9clar\u00E9e.
msg.let.decl.not.in.block =\
Erreur de syntaxe: la d\u00e9claration ''let'' n''est pas directement dans un block
msg.bad.object.init =\
Erreur de syntaxe: initialiseur d''objet incorrect
# NodeTransformer
msg.dup.label =\
Le libell\u00E9 {0} existe d\u00E9j\u00E0
msg.undef.label =\
Le libell\u00E9 {0} n''est pas d\u00E9fini
msg.bad.break =\
Le saut non libell\u00E9 doit se trouver dans une boucle ou un switch
msg.continue.outside =\
continue doit se trouver dans la boucle
msg.continue.nonloop =\
Il n''est possible de continuer que dans l''instruction d''it\u00E9ration libell\u00E9e
msg.bad.throw.eol =\
Un retour \u00e0 la ligne n''est pas autoris\u00e9 entre un mot-clef throw et son \
expression.
msg.no.paren.parms =\
il manque ''('' avant les param\u00E8tres de la fonction
msg.no.parm =\
il manque un param\u00E8tre formel
msg.no.paren.after.parms =\
il manque '')'' apr\u00E8s les param\u00E8tres formels
msg.no.brace.body =\
il manque ''{'' avant le corps d''une fonction
msg.no.brace.after.body =\
il manque ''}'' apr\u00E8s le corps d''une fonction
msg.no.paren.cond =\
il manque ''('' avant une condition
msg.no.paren.after.cond =\
il manque '')'' apr\u00E8s une condition
msg.no.semi.stmt =\
il manque '';'' avant une instruction
msg.missing.semi =\
il manque '';'' apr\u00e8s une instruction
msg.no.name.after.dot =\
il manque un nom apr\u00E8s un op\u00E9rateur ''.''
msg.no.name.after.coloncolon =\
il manque un nom apr\u00e8s un op\u00e9rateur ''::''
msg.no.name.after.dotdot =\
il manque un nom apr\u00e8s un op\u00e9rateur ''..''
msg.no.name.after.xmlAttr =\
il manque un nom apr\u00e8s ''.@''
msg.no.bracket.index =\
il manque '']'' dans l''expression de l''indice
msg.no.paren.switch =\
il manque ''('' avant l''expression du switch
msg.no.paren.after.switch =\
il manque '')'' apr\u00E8s l''expression du switch
msg.no.brace.switch =\
il manque ''{'' avant le corps du switch
msg.bad.switch =\
l''instruction switch est incorrecte
msg.no.colon.case =\
il manque '':'' apr\u00E8s l''expression d''un cas
msg.double.switch.default =\
le libell\u00e9 ''default'' appara\u00eet plusieurs fois dans le bloc switch
msg.no.while.do =\
il manque ''while'' apr\u00E8s le corps d''une boucle do-loop
msg.no.paren.for =\
il manque ''('' apr\u00E8s for
msg.no.semi.for =\
Il manque '';'' apr\u00E8s l''initialiseur for-loop
msg.no.semi.for.cond =\
il manque '';'' apr\u00E8s la condition for-loop
msg.in.after.for.name =\
il manque le mot-clef ''in'' apr\u00e8s ''for''
msg.no.paren.for.ctrl =\
il manque '')'' apr\u00E8s le contr\u00f4le for-loop
msg.no.paren.with =\
il manque ''('' avant un objet with-statement
msg.no.paren.after.with =\
il manque '')'' apr\u00E8s un objet with-statement
msg.no.with.strict =\
L''instruction with n''est pas autoris\u00e9e en mode strict
msg.no.paren.after.let =\
il manque ''('' apr\u00e8s let
msg.no.paren.let =\
il manque '')'' apr\u00e8s la liste de variables
msg.no.curly.let =\
il manque ''}'' apr\u00e8s l''instruction let
msg.bad.return =\
la valeur renvoy\u00E9e est incorrecte
msg.no.brace.block =\
il manque ''}'' dans une instruction compos\u00E9e
msg.bad.label =\
le libell\u00E9 est incorrect
msg.bad.var =\
il manque un nom de variable
msg.bad.var.init =\
l''initialisation de la variable est incorrecte
msg.no.colon.cond =\
il manque '':'' dans une expression conditionnelle
msg.no.paren.arg =\
il manque '')'' apr\u00E8s une liste d''arguments
msg.no.bracket.arg =\
il manque '']'' apr\u00E8s une liste d''\u00E9l\u00E9ments
msg.bad.prop =\
l''identifiant de propri\u00E9t\u00E9 est incorrect
msg.no.colon.prop =\
il manque '':'' apr\u00E8s un identifiant de propri\u00E9t\u00E9
msg.no.brace.prop =\
il manque ''}'' apr\u00E8s une liste de propri\u00E9t\u00E9s
msg.no.paren =\
il manque '')'' dans des parenth\u00E8ses
msg.reserved.id =\
l''identifiant est un mot r\u00E9serv\u00E9
msg.no.paren.catch =\
il manque ''('' avant une condition catch-block
msg.bad.catchcond =\
la condition catch-block est incorrecte
msg.catch.unreachable =\
aucune clause catch suivant une interception non qualifi\u00E9e ne peut \u00EAtre atteinte
msg.no.brace.try =\
il manque ''{'' avant le bloc try
msg.no.brace.catchblock =\
il manque ''{'' avant le corps catch-block
msg.try.no.catchfinally =\
''try'' a \u00E9t\u00E9 d\u00E9tect\u00E9 sans ''catch'' ni ''finally''
msg.no.return.value =\
la fonction {0} ne renvoie pas toujours de valeur
msg.anon.no.return.value =\
la fonction anonyme ne renvoie pas toujours de valeur
msg.return.inconsistent =\
l''instruction return est incoh\u00e9rente avec les usages pr\u00e9c\u00e9dents
msg.generator.returns =\
Erreur de type: la fonction g\u00e9n\u00e9ratrice {0} renvoie une valeur
msg.anon.generator.returns =\
Erreur de type: la fonction g\u00e9n\u00e9ratrice anonyme renvoie une valeur
msg.syntax =\
erreur de syntaxe
msg.unexpected.eof =\
Fin de fichier inattendue
msg.XML.bad.form =\
la syntaxe XML est mal form\u00e9e
msg.XML.not.available =\
L''interpr\u00e9tation du XML n''est pas disponible
msg.too.deep.parser.recursion =\
R\u00e9cursion trop profonde pendant l''analyse
msg.too.many.constructor.args =\
Le constructeur a trop d''arguments
msg.too.many.function.args =\
La fonction a trop d''arguments
msg.no.side.effects =\
Le code n''a pas de valeur de retour
msg.extra.trailing.semi =\
Point virgule superflux \u00e0 la fin
msg.extra.trailing.comma =\
Une virgule \u00e0 la fin d''un initialiseur d''objet n''est pas autoris\u00e9 par le standard ECMA-262
msg.trailing.array.comma =\
Une virgule \u00e0 la fin d''un tableau lit\u00e9ral a un comportement diff\u00e9rent suivant le navigateur utilis\u00e9
msg.equal.as.assign =\
Le test d''\u00e9galit\u00e9 (==) a t''il \u00e9t\u00e9 saisi par erreur comme une assignation (=) ?
msg.var.hides.arg =\
La variable {0} masque un argument
msg.destruct.assign.no.init =\
Il manque ''='' dans l''assignation d\u00e9structurante
msg.no.octal.strict =\
Les nombres octaux ne sont pas autoris\u00e9s en mode strict.
msg.dup.obj.lit.prop.strict =\
La propri\u00e9t\u00e9 "{0}" est d\u00e9j\u00e0 d\u00e9finie dans cet objet lit\u00e9ral.
msg.dup.param.strict =\
Le param\u00e8tre "{0}" est d\u00e9j\u00e0 d\u00e9clar\u00e9 dans cette fonction.
msg.bad.id.strict =\
"{0}" n''est pas un identifiant valide pour cet usage en mode strict.
# ScriptRuntime
# is there a better message for this?
# it's currently only used as a poison pill for caller, caller and arguments properties
msg.op.not.allowed =\
Cette op\u00e9ration n''est pas autoris\u00e9e.
msg.no.properties =\
{0} n''a pas de propri\u00e9t\u00e9s.
msg.invalid.iterator =\
La valeur n''est pas un it\u00e9rateur valide
msg.iterator.primitive =\
__iterator__ a renvoy\u00e9 une valeur primitive
msg.assn.create.strict =\
Assignation d''une variable non d\u00e9clar\u00e9e: {0}
msg.ref.undefined.prop =\
R\u00e9f\u00e9rence \u00e0 une propri\u00e9t\u00e9 non d\u00e9finie "{0}"
msg.prop.not.found =\
La propri\u00E9t\u00E9 est introuvable
msg.set.prop.no.setter =\
Impossible de changer la propri\u00e9t\u00e9 ''{0}'' en l''absence de m\u00e9thode de d\u00e9finition.
msg.invalid.type =\
Valeur JavaScript de type {0} incorrecte
msg.primitive.expected =\
Un type primitif \u00E9tait attendu (et non {0})
msg.namespace.expected =\
Un espace de nom est attendu \u00e0 gauche de :: ({0} trouv\u00e9 \u00e0 la place)
msg.null.to.object =\
Il est impossible de convertir la valeur null en objet
msg.undef.to.object =\
Il est impossible de convertir une valeur non d\u00E9finie en objet
msg.cyclic.value =\
La valeur cyclique {0} n''est pas autoris\u00E9e
msg.is.not.defined =\
"{0}" n''est pas d\u00E9fini
msg.undef.prop.read =\
Impossible de lire la propri\u00e9t\u00e9 "{1}" de {0}
msg.undef.prop.write =\
Impossible de changer la propri\u00e9t\u00e9 "{1}" de {0} en "{2}"
msg.undef.prop.delete =\
Impossible de supprimer la propri\u00e9t\u00e9 "{1}" de {0}
msg.undef.method.call =\
Impossible d''appeler la m\u00e9thode "{1}" de {0}
msg.undef.with =\
Impossible d''appliquer "with" \u00e0 {0}
msg.isnt.function =\
{0} n''est pas une fonction, c''est un {1}
msg.isnt.function.in =\
Impossible d''appeler la propri\u00e9t\u00e9 {0} de l''objet {1}. Ce n''est pas une fonction, c''est un "{2}".
msg.function.not.found =\
Impossible de trouver la fonction {0}.
msg.function.not.found.in =\
Impossible de trouver la fonction {0} dans l''objet {1}.
msg.isnt.xml.object =\
{0} n''est pas un objet xml.
msg.no.ref.to.get =\
{0} n''est pas une r\u00e9f\u00e9rence vers une m\u00e9thode d''obtention.
msg.no.ref.to.set =\
{0} n''est pas une r\u00e9f\u00e9rence vers une m\u00e9thode de d\u00e9finition.
msg.no.ref.from.function =\
La fonction {0} ne peut pas \u00eatre utilis\u00e9e comme la partie gauche de l''assignation \
ou comme l''op\u00e9rande de l''op\u00e9rateur ++ ou --.
msg.bad.default.value =\
La m\u00E9thode getDefaultValue() de l''objet a renvoy\u00E9 un objet
msg.instanceof.not.object =\
Il est impossible d''utiliser une instance d''un \u00E9l\u00E9ment autre qu''un objet
msg.instanceof.bad.prototype =\
La propri\u00E9t\u00E9 ''prototype'' de {0} n''est pas un objet
msg.in.not.object = \
Il est impossible d''utiliser une instance d''un \u00E9l\u00E9ment autre qu''un objet
msg.bad.radix =\
la base {0} n''est pas autoris\u00E9e
# ScriptableObject
msg.default.value =\
La valeur par d\u00E9faut de l''objet est introuvable
msg.zero.arg.ctor =\
Il est impossible de charger la classe "{0}", qui ne poss\u00E8de pas de constructeur de param\u00E8tre z\u00E9ro
duplicate.defineClass.name =\
M\u00e9thode "{0}" incorrecte: le nom "{1}" est d\u00e9j\u00e0 utilis\u00e9.
msg.ctor.multiple.parms =\
Il est impossible de d\u00E9finir le constructeur ou la classe {0} car plus d''un \
constructeur poss\u00E8de plusieurs param\u00E8tres
msg.extend.scriptable =\
{0} doit \u00E9tendre ScriptableObject afin de d\u00E9finir la propri\u00E9t\u00E9 {1}
msg.bad.getter.parms =\
Pour d\u00E9finir une propri\u00E9t\u00E9, la m\u00E9thode d''obtention {0} doit avoir des param\u00E8tres z\u00E9ro \
ou un seul param\u00E8tre ScriptableObject
msg.obj.getter.parms =\
La m\u00E9thode d''obtention statique ou d\u00E9l\u00E9gu\u00E9e {0} doit utiliser un param\u00E8tre ScriptableObject
msg.getter.static =\
La m\u00E9thode d''obtention et la m\u00E9thode de d\u00E9finition doivent toutes deux avoir le m\u00EAme \u00E9tat (statique ou non)
msg.setter.return =\
La m\u00e9thode de d\u00e9finition doit avoir un type de retour vide: {0}
msg.setter2.parms =\
La m\u00E9thode de d\u00E9finition \u00E0 deux param\u00E8tres doit utiliser un param\u00E8tre ScriptableObject comme premier param\u00E8tre
msg.setter1.parms =\
Une m\u00E9thode d''obtention \u00E0 param\u00E8tre unique est attendue pour {0}
msg.setter2.expected =\
La m\u00E9thode de d\u00E9finition statique ou d\u00E9l\u00E9gu\u00E9e {0} doit utiliser deux param\u00E8tres
msg.setter.parms =\
Un ou deux param\u00E8tres sont attendus pour la m\u00E9thode de d\u00E9finition
msg.setter.bad.type =\
Le type de param\u00e8tre "{0}" est incorrect dans la m\u00e9thode de d\u00e9finition "{1}".
msg.add.sealed =\
Il est impossible d''ajouter une propri\u00E9t\u00E9 \u00E0 un objet scell\u00E9: {0}.
msg.remove.sealed =\
Il est impossible de supprimer une propri\u00E9t\u00E9 d''un objet scell\u00E9: {0}.
msg.modify.sealed =\
Il est impossible de modifier une propri\u00e9t\u00e9 d''un objet scell\u00E9: {0}.
msg.modify.readonly =\
Il est impossible de modifier une propri\u00e9t\u00e9 en lecture seule: {0}.
msg.both.data.and.accessor.desc =\
Le descripteur ne peut pas d\u00e9finir \u00e0 la fois un accesseur et une donn\u00e9e.
msg.change.configurable.false.to.true =\
Impossible de changer de false \u00e0 true l''attribut ''configurable'' de "{0}".
msg.change.enumerable.with.configurable.false =\
Impossible de changer l''attribut ''enumerable'' de "{0}" car ''configurable'' est ''false''.
msg.change.writable.false.to.true.with.configurable.false =\
Impossible de changer de false \u00e0 true l''attribut ''writable'' de "{0}" car ''configurable'' est ''false''.
msg.change.value.with.writable.false =\
Impossible de changer la valeur de l''attribut "{0}" car ''writable'' est ''false''.
msg.change.getter.with.configurable.false =\
Impossible de changer l''attribut get de "{0}" car ''configurable'' est ''false''.
msg.change.setter.with.configurable.false =\
Impossible de changer l''attribut set de "{0}" car ''configurable'' est ''false''.
msg.change.property.data.to.accessor.with.configurable.false =\
Impossible de changer la propri\u00e9t\u00e9 par donn\u00e9e "{0}" en propri\u00e9t\u00e9 par accesseur car ''configurable'' est ''false''
msg.change.property.accessor.to.data.with.configurable.false =\
Impossible de changer la propri\u00e9t\u00e9 par accesseur "{0}" en propri\u00e9t\u00e9 par donn\u00e9e car ''configurable'' est ''false''
msg.not.extensible =\
Impossible d''ajouter des propri\u00e9t\u00e9s \u00e0 cet objet car ''extensible'' est ''false''.
# TokenStream
msg.missing.exponent =\
il manque un exposant
msg.caught.nfe =\
erreur de format de nombre: {0}
msg.unterminated.string.lit =\
le litt\u00E9ral de la cha\u00EEne n''a pas de limite
msg.unterminated.comment =\
le commentaire n''a pas de limite
msg.unterminated.re.lit =\
le litt\u00E9ral de l''expression rationnelle n''a pas de limite
msg.invalid.re.flag =\
une expression rationnelle est suivie d''un indicateur incorrect ''{0}''
msg.no.re.input.for =\
il n''y a pas d''entr\u00E9e pour {0}
msg.illegal.character =\
caract\u00E8re non autoris\u00E9
msg.invalid.escape =\
la s\u00E9quence d''\u00E9chappement Unicode est incorrecte
msg.bad.namespace =\
L''instruction ''default xml namespace'' est incorrecte. \
La syntaxe est: default xml namespace = EXPRESSION;
# TokensStream warnings
msg.bad.octal.literal =\
le chiffre octal du litt\u00E9ral, {0}, n''est pas autoris\u00E9 et sera interpr\u00E9t\u00E9 comme un chiffre d\u00E9cimal
msg.reserved.keyword =\
l''utilisation du futur mot-cl\u00E9 r\u00E9serv\u00E9 {0} n''est pas autoris\u00E9e et celui-ci sera interpr\u00E9t\u00E9 comme un identifiant ordinaire
# LiveConnect errors
msg.java.internal.field.type =\
Erreur interne: la conversion de type de {0} afin d''affecter {1} \u00E0 {2} a \u00E9chou\u00E9
msg.java.conversion.implicit_method =\
La m\u00E9thode de conversion "{0}" est introuvable dans la classe {1}
msg.java.method.assign =\
La m\u00E9thode Java "{0}" ne peut pas \u00EAtre affect\u00E9e \u00E0
msg.java.internal.private =\
Erreur interne: une tentative d''acc\u00E9der \u00E0 un champ "{0}" priv\u00E9/prot\u00E9g\u00E9 a \u00E9t\u00E9 d\u00E9tect\u00E9e
msg.java.no_such_method =\
La m\u00E9thode ''{0}'' est introuvable
msg.script.is.not.constructor =\
Les objets Script ne sont pas des constructeurs
msg.nonjava.method =\
La m\u00E9thode Java "{0}" a \u00E9t\u00E9 appel\u00E9e avec une valeur ''this'' qui n''est pas un objet Java
msg.java.member.not.found =\
La classe Java "{0}" ne poss\u00E8de aucun champ ou aucune m\u00E9thode d''instance publique appel\u00E9 "{1}"
msg.java.array.index.out.of.bounds =\
L''indice {0} du tableau est en dehors de l''intervalle [0..{1}].
msg.java.array.member.not.found =\
Les tableaux Java n''ont pas de champs ou de m\u00e9thodes publiques "{0}".
msg.pkg.int =\
Les noms de package Java ne peuvent pas \u00EAtre des nombres
msg.access.prohibited =\
L''acc\u00e8s \u00e0 la classe Java "{0}" est prohib\u00e9.
# ImporterTopLevel
msg.ambig.import =\
Importation ambigu\u00EB: "{0}" et "{1}"
msg.not.pkg =\
La fonction importPackage doit \u00EAtre appel\u00E9e avec un package et non avec "{0}"
msg.not.class =\
La fonction importClass doit \u00EAtre appel\u00E9e avec une classe et non avec "{0}"
msg.not.class.not.pkg =\
"{0}" n''est ni une classe ni un package.
msg.prop.defined =\
Il est impossible d''importer "{0}" car une propri\u00E9t\u00E9 portant le m\u00EAme nom a d\u00E9j\u00E0 \u00E9t\u00E9 d\u00E9finie
#JavaAdapter
msg.adapter.zero.args =\
JavaAdapter n\u00e9cessite au moins un argument.
msg.not.java.class.arg = \
L''argument {0} n''est pas une classe Java: {1}.
#JavaAdapter
msg.only.one.super = \
Un JavaAdapter ne peut \u00e9tendre qu''une seule classe. Les classes {0} et {1} ont \u00e9t\u00e9 donn\u00e9es.
# Arrays
msg.arraylength.bad =\
La longueur du tableau n''est pas appropri\u00E9e
# Arrays
msg.arraylength.too.big =\
La longueur du tableau {0} d\u00e9passe la capacit\u00e9 limite.
msg.empty.array.reduce =\
La m\u00e9thode ''reduce'' ne fonctionne pas sans valeur initiale sur un tableau vide
# URI
msg.bad.uri =\
La s\u00E9quence URI n''est pas form\u00E9e correctement
# Number
msg.bad.precision =\
La pr\u00E9cision {0} ne se trouve pas dans la plage de valeurs
# NativeGenerator
msg.send.newborn =\
La m\u00e9thode send() d''un g\u00e9n\u00e9rateur ne peut \u00eatre appel\u00e9e avant un premier appel \u00e0 next()
msg.already.exec.gen =\
Le g\u00e9n\u00e9rateur est d\u00e9j\u00e0 en cours d''ex\u00e9cution
msg.StopIteration.invalid =\
L''exception StopIteration ne peut pas \u00eatre chang\u00e9e en un objet arbitraire.
# Interpreter
msg.yield.closing =\
yield impossible quand le g\u00e9n\u00e9rateur est en train de se fermer
@@ -1,879 +0,0 @@
#
# Default JavaScript messages file.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# This is replaced during jar assembly from property string
# and should not be translated
implementation.version = @IMPLEMENTATION.VERSION@
#
# To add JavaScript error messages for a particular locale, create a
# new Messages_[locale].properties file, where [locale] is the Java
# string abbreviation for that locale. For example, JavaScript
# messages for the Polish locale should be located in
# Messages_pl.properties, and messages for the Italian Swiss locale
# should be located in Messages_it_CH.properties. Message properties
# files should be accessible through the classpath under
# org.mozilla.javascript.resources
#
# See:
# java.util.ResourceBundle
# java.text.MessageFormat
#
# SomeJavaClassWhereUsed
params.omit.non.js.object.warning = true
msg.non.js.object.warning =\
Rhino用法警告:缺少 Context.javaToJS() 转换:Rhino 运行时检测到类 “{1}” 的对象 “{0}”,它需要字符串、数字、布尔值或可编写脚本的实例。请检查您的代码是否缺少 Context.javaToJS() 调用。
# Codegen
msg.dup.parms =\
参数名称 “{0}” 已存在。
msg.too.big.jump =\
程序太复杂:跳转偏移量太大。
msg.too.big.index =\
程序太复杂:内部索引超过 64KB 限制。
msg.while.compiling.fn =\
编译函数 “{0}” 时遇到代码生成错误:{1}
msg.while.compiling.script =\
编译脚本时遇到代码生成错误:{0}
# Context
msg.ctor.not.found =\
未找到 “{0}” 的构造函数。
msg.not.ctor =\
“{0}” 不是构造函数。
# FunctionObject
msg.varargs.ctor =\
方法或构造函数 “{0}” 必须是带有签名的静态 \
“(Context cx, Object[] args, Function ctorObj, boolean inNewExpr)” \
以定义可变参数的构造函数。
msg.varargs.fun =\
方法 “{0}” 必须是带有签名的静态 \
“(Context cx, Scriptable thisObj, Object[] args, Function funObj)” \
以定义可变参数的函数。
msg.incompat.call =\
在不兼容的对象中调用了方法 “{0}”。
msg.incompat.call.details =\
对不兼容对象调用的方法 “{0}”({1} 不是 {2} 的实例)。
msg.bad.parms =\
方法 “{1}” 中不支持参数类型 “{0}”。
msg.bad.method.return =\
方法 “{1}” 中不支持返回类型 “{0}”。
msg.bad.ctor.return =\
无法构造 “{0}” 类型的对象。
msg.no.overload =\
方法 “{0}” 在类 “{1}” 中出现多次。
msg.method.not.found =\
在 “{1}” 中找不到方法 “{0}” 。
msg.method.missing.parameter =\
{0}:至少需要 {1} 个参数,但仅通过了 {2} 个
# IRFactory
msg.bad.for.in.lhs =\
for..in 循环的左边部分不正确。
msg.mult.index =\
for..in 循环中只允许有一个变量
msg.bad.for.in.destruct =\
for..in 循环的左侧必须是一个长度为 2 的数组才能接受一个键值对。
msg.cant.convert =\
无法转换为类型 “{0}”。
msg.bad.assign.left =\
左侧分配无效。
msg.bad.decr =\
递减的操作数无效。
msg.bad.incr =\
递增的操作数无效。
msg.bad.yield =\
yield 必须在函数内部。
msg.yield.parenthesized =\
yield 后面的表达式必须放在括号中。
# NativeGlobal
msg.cant.call.indirect =\
必须直接调用函数 “{0}”,而不是通过具有其他名称的函数。
msg.eval.nonstring =\
如果您使用不是原始字符串的值调用 eval() 函数,\
则返回有问题的值。那是你的意图吗?
msg.eval.nonstring.strict =\
在严格模式下,不能使用原始字符串以外的值调用 eval() 函数。
msg.bad.destruct.op =\
无效的解构赋值运算符
# NativeCall
msg.only.from.new =\
“构造函数 {0}”只能从 “new” 表达式调用。
msg.deprec.ctor =\
“{0}” 构造函数已弃用。
# NativeFunction
msg.no.function.ref.found =\
未找到反编译函数引用 {0} 的源
msg.arg.isnt.array =\
Function.prototype.apply 方法的第二个参数必须是一个数组
# NativeGlobal
msg.bad.esc.mask =\
字符串转义掩码不正确
# NativeJavaClass
msg.cant.instantiate =\
实例化错误 ({0}):类 {1} 是接口或抽象类
msg.bad.ctor.sig =\
检测到具有不正确签名的构造函数:\
{0} 调用带有签名 {2} 的 {1}
msg.not.java.obj =\
getClass() 函数的预期参数必须是 Java 对象。
msg.no.java.ctor =\
未找到带有参数 “{1}” 的 “{0}” 的 Java 构造函数。
# NativeJavaMethod
msg.method.ambiguous =\
对应于 JavaScript 参数类型 ({2}) 的 Java 方法 {0}.{1} 的选择不明确。 \
建议的方法是:{3}
msg.constructor.ambiguous =\
对应于 JavaScript 参数类型 ({1}) 的 Java 构造函数 {0} 的选择不明确。 \
建议的构造函数是:{2}
# NativeJavaObject
msg.conversion.not.allowed =\
无法将 {0} 转换为 {1}
msg.no.empty.interface.conversion =\
无法在没有任何方法的情况下将函数转换为接口 {0}
msg.no.function.interface.conversion =\
无法将函数 {0} 转换为接口,因为它包含具有不同名称的方法
msg.undefined.function.interface =\
接口适配器中未设置属性“{0}”
msg.not.function.interface =\
属性 “{0}” 不是接口适配器中的函数
# NativeJavaPackage
msg.not.classloader =\
“Packages” 的构造函数需要 java.lang.Classloader 类型的参数
# NativeRegExp
msg.bad.quant =\
量词 {0} 不正确
msg.overlarge.backref =\
过大的反向引用 {0}
msg.overlarge.min =\
最小值 {0} 太大
msg.overlarge.max =\
最大值 {0} 太大
msg.zero.quant =\
量词 {0} 为空
msg.max.lt.min =\
最大值 {0} 小于最小值
msg.unterm.quant =\
量词 {0} 没有限制
msg.unterm.paren =\
{0} 括号没有限制
msg.unterm.class =\
字符类 {0} 没有限制
msg.bad.range =\
字符类包含不正确的值范围。
msg.trail.backslash =\
“\\” 在正则表达式的末尾。
msg.re.unmatched.right.paren =\
只有一个 “)” 在正则表达式中。
msg.no.regexp =\
正则表达式不可用。
msg.bad.backref =\
反向引用超过了捕获括号的数量。
msg.bad.regexp.compile =\
如果 RegExp.prototype.compile 的第一个参数是 RegExp 类型的对象,则只能指定一个参数。
msg.arg.not.object =\
预期参数的类型是 “object” 而不是 “{0}”
# NativeDate
msg.invalid.date =\
日期不正确。
msg.toisostring.must.return.primitive =\
toISOString 应该返回一个原始值,而不是返回 “{0}”
# NativeJSON
msg.json.cant.serialize =\
不知道如何序列化 {0}
# Parser
msg.got.syntax.errors = \
编译产生 {0} 个语法错误。
msg.var.redecl =\
类型错误:变量 {0} 被重新声明。
msg.const.redecl =\
类型错误:重新声明了常量 {0}。
msg.let.redecl =\
类型错误:变量 {0} 被重新声明。
msg.parm.redecl =\
类型错误:重新声明了形式参数 {0} 。
msg.fn.redecl =\
类型错误:重新声明了函数 {0}。
msg.let.decl.not.in.block =\
语法错误:let 语句不能直接在块中
msg.bad.object.init =\
语法错误:无效的对象初始化程序
# NodeTransformer
msg.dup.label =\
标签 {0} 已存在
msg.undef.label =\
标签 {0} 未定义
msg.bad.break =\
未标记的 break 必须在 loop 或 switch 内
msg.continue.outside =\
只能在循环语句中使用 continue
msg.continue.nonloop =\
只能在迭代语句中使用 continue
msg.bad.throw.eol =\
在关键字 throw 与 throw 表达式之间不允许使用换行符表示。
msg.no.paren.parms =\
在函数参数前面缺少 “(”。
msg.no.parm =\
缺少形式参数
msg.no.paren.after.parms =\
在形式参数后面缺少 “)”
msg.no.brace.body =\
在函数体前面缺少 “{”
msg.no.brace.after.body =\
在函数体后面缺少 “}”
msg.no.paren.cond =\
在条件前面缺少 “(”
msg.no.paren.after.cond =\
在字符 “)” 后面缺少条件
msg.no.semi.stmt =\
在语句前面缺少 “;”
msg.missing.semi =\
在语句后面缺少 “;”
msg.no.name.after.dot =\
在运算符 “.” 后面缺少名称
msg.no.name.after.coloncolon =\
在运算符 “::” 后面缺少名称
msg.no.name.after.dotdot =\
在运算符 “..” 后面缺少名称
msg.no.name.after.xmlAttr =\
在 “.@” 后面缺少名称
msg.no.bracket.index =\
在索引表达式中缺少 “]”
msg.no.paren.switch =\
在 switch 表达式的前面缺少 “(”
msg.no.paren.after.switch =\
在 switch 表达式的后面缺少 “)”
msg.no.brace.switch =\
在 switch 正文的前面缺少 “{”
msg.bad.switch =\
switch 语句不正确
msg.no.colon.case =\
在 case 表达式的后面缺少 “:”
msg.double.switch.default =\
default 标签在 switch 语句中重复出现
msg.no.while.do =\
在 do-loop 的后面缺少 while
msg.no.paren.for =\
在 for 之后缺少 “(”
msg.no.semi.for =\
在 for-loop 初始化程序的后面缺少 “;”
msg.no.semi.for.cond =\
在 for-loop 条件的后面缺少 “;”
msg.in.after.for.name =\
在 for 的后面缺少 “in”
msg.no.paren.for.ctrl =\
在 for-loop 控件的后面缺少 “)”
msg.no.paren.with =\
在 With-Statement 对象的前面缺少 “(”
msg.no.paren.after.with =\
在 With-Statement 对象的后面面缺少 “(”
msg.no.with.strict =\
严格模式下不允许使用 with 语句
msg.no.paren.after.let =\
在 let 的后面缺少 “(”
msg.no.paren.let =\
在变量列表后面缺少 “)”
msg.no.curly.let =\
在 let 语句的后面缺少 “}”
msg.bad.return =\
返回的值无效
msg.no.brace.block =\
复合语句中缺少 “}”
msg.bad.label =\
无效标签
msg.bad.var =\
缺少变量名
msg.bad.var.init =\
变量初始化不正确
msg.no.colon.cond =\
在条件表达式中缺少 “:”
msg.no.paren.arg =\
在参数列表的后面缺少 “)”
msg.no.bracket.arg =\
在元素列表的后面缺少 “]”
msg.bad.prop =\
属性 ID 不正确
msg.no.colon.prop =\
在属性 ID 的后面缺少 “:”
msg.no.brace.prop =\
在属性列表的后面缺少 “}”
msg.no.paren =\
在括号中缺少 “)”
msg.reserved.id =\
标识符是保留字: {0}
msg.no.paren.catch =\
在 catch-block 条件的前面缺少 “(”
msg.bad.catchcond =\
无效的 catch-block 条件
msg.catch.unreachable =\
不合格的 catch 后面的任何 catch 子句都是到达不了的
msg.no.brace.try =\
在 try 的前面缺少 “{”
msg.no.brace.catchblock =\
在 catch-block 主体的前面缺少 “{”
msg.try.no.catchfinally =\
try 被检测到没有 catch 或 finally
msg.no.return.value =\
函数 {0} 并不总是返回值
msg.anon.no.return.value =\
匿名函数并不总是返回值
msg.return.inconsistent =\
return 语句与之前的用法不一致
msg.generator.returns =\
类型错误:生成器函数 {0} 返回一个值
msg.anon.generator.returns =\
类型错误:匿名生成器函数返回一个值
msg.syntax =\
语法错误
msg.unexpected.eof =\
文件意外结束
msg.XML.bad.form =\
XML 语法格式错误
msg.XML.not.available =\
XML 解析不可用
msg.too.deep.parser.recursion =\
解析期间递归太深
msg.too.many.constructor.args =\
构造函数的参数太多
msg.too.many.function.args =\
函数的参数太多
msg.no.side.effects =\
代码没有返回值
msg.extra.trailing.semi =\
末尾有多余的分号
msg.extra.trailing.comma =\
按照 ECMA-262 的标准不允许对象初始值设定项末尾的逗号
msg.trailing.array.comma =\
数组文字末尾的逗号根据所使用的浏览器表现不同
msg.equal.as.assign =\
判断相等性 “==” 错误地输入成为赋值 “=” ?
msg.var.hides.arg =\
变量 {0} 隐藏了一个参数
msg.destruct.assign.no.init =\
解构赋值中缺少 “=”
msg.destruct.default.vals =\
解构声明中的默认值不支持
msg.no.old.octal.strict =\
严格模式下不允许使用旧的八进制数。
msg.no.old.octal.bigint =\
BigInt 中不允许使用旧的八进制数。
msg.dup.obj.lit.prop.strict =\
此对象文字中已定义属性 “{0}”。
msg.dup.param.strict =\
此函数中已声明参数 “{0}”。
msg.bad.id.strict =\
“{0}” 不是严格模式下此用途的有效标识符。
msg.no.unary.expr.on.left.exp =\
“{0}” 不允许出现在 “**” 的左侧。
# 脚本运行时(ScriptRuntime)
# is there a better message for this?
# it's currently only used as a poison pill for caller, caller and arguments properties
msg.op.not.allowed =\
不允许此操作。
msg.no.properties =\
{0} 没有属性。
msg.invalid.iterator =\
值不是有效的迭代器
msg.iterator.primitive =\
__iterator__ 返回一个原始值
msg.not.iterable = \
{0} 不可迭代
msg.invalid.for.each = \
对每个循环无效
msg.assn.create.strict =\
未声明变量的赋值 {0}
msg.ref.undefined.prop =\
对未定义属性 “{0}” 的引用
msg.prop.not.found =\
未找到属性 {0}。
msg.set.prop.no.setter =\
无法将只有 getter 的属性 {0} 的值设置为 “{1}”。
msg.invalid.type =\
{0} 类型的 JavaScript 值无效
msg.primitive.expected =\
需要使用原始类型,而不是使用 {0}
msg.namespace.expected =\
命名空间对象应该位于 “::” 左侧(找到 {0} 代替)
msg.null.to.object =\
无法将 null 转换为对象。
msg.undef.to.object =\
无法将未定义的值转换为对象。
msg.cant.convert.to.bigint =\
无法将 {0} 转换为 BigInt。
msg.cant.convert.to.bigint.isnt.integer =\
无法将 {0} 转换为 BigInt,它不是整数。
msg.bigint.bad.form =\
不允许形成的 BigInt 语法
msg.cyclic.value =\
不允许使用循环 “{0}” 值。
msg.is.not.defined =\
“{0}” 未定义。
msg.undef.prop.read =\
无法读取 {0} 的属性 “{1}”
msg.undef.prop.write =\
无法将 {0} 的属性 “{1}” 设置为 “{2}”
msg.undef.prop.delete =\
无法删除 {0} 的属性 “{1}”
msg.undef.method.call =\
无法调用 {0} 的方法 “{1}”
msg.undef.with =\
无法将 “with” 应用于 {0}
msg.isnt.function =\
{0} 不是函数,它是 {1}。
msg.isnt.function.in =\
无法调用对象 {1} 中的属性 {0}。它不是一个函数,而是 “{2}”。
msg.function.not.found =\
找不到函数 {0}。
msg.function.not.found.in =\
在对象 {1} 中找不到函数 {0} 。
msg.isnt.xml.object =\
{0} 不是 XML 对象。
msg.no.ref.to.get =\
{0} 不是对读取参考值的引用。
msg.no.ref.to.set =\
{0} 不是将引用值设置为 {1} 的引用。
msg.no.ref.from.function =\
函数 {0} 不能用作赋值的左侧部分,也不能用作 “++” 或 “--” 运算符的操作数。
msg.bad.default.value =\
Object 的 getDefaultValue() 方法返回了一个对象。
msg.instanceof.not.object = \
不能在非对象上使用 “instanceof”。
msg.instanceof.bad.prototype = \
{0} 的 “prototype” 属性不是对象。
msg.in.not.object = \
不能在非对象上使用 “in”。
msg.bad.radix = \
不允许的基数 {0}。
msg.division.zero = \
除以零。
msg.bigint.negative.exponent = \
BigInt 负指数。
msg.bigint.out.of.range.arithmetic = \
BigInt 的数过大。
# ScriptableObject
msg.default.value =\
未找到对象默认值。
msg.zero.arg.ctor =\
无法加载没有零参数构造函数的类 “{0}”。
duplicate.defineClass.name =\
方法 “{0}” 无效:名称 “{1}” 已在使用中。
msg.ctor.multiple.parms =\
无法定义构造函数或类 {0},因为多个构造函数具有多个参数。
msg.extend.scriptable =\
{0} 必须扩展 ScriptableObject 才能定义属性 {1}。
msg.bad.getter.parms =\
为了定义一个属性,getter {0} 必须有零个参数或一个 ScriptableObject 参数。
msg.obj.getter.parms =\
静态或委托 getter 方法 {0} 必须使用 ScriptableObject 参数。
msg.getter.static =\
getter 方法和 setter 方法必须具有相同的状态(静态或非静态)。
msg.setter.return =\
setter 方法的返回类型必须为空:{0}
msg.setter2.parms =\
双参数 setter 方法必须使用 ScriptableObject 参数作为第一个参数。
msg.setter1.parms =\
{0} 需要一个参数 getter 方法
msg.setter2.expected =\
静态或委托设置方法 {0} 必须采用两个参数。
msg.setter.parms =\
setter 方法需要一个或两个参数。
msg.setter.bad.type =\
setter 方法 “{1}” 中的参数类型 “{0}” 不正确。
msg.add.sealed =\
无法将属性添加到密封对象: {0}。
msg.remove.sealed =\
无法从密封对象中删除属性: {0}。
msg.modify.sealed =\
无法修改密封对象的属性: {0}。
msg.modify.readonly =\
无法修改只读属性: {0}。
msg.both.data.and.accessor.desc =\
描述符不能同时定义访问器和数据。
msg.change.configurable.false.to.true =\
无法将 “{0}” 的可配置属性从 false 更改为 true。
msg.change.enumerable.with.configurable.false =\
无法更改 “{0}” 的可枚举属性,因为 configurable 为 false。
msg.change.writable.false.to.true.with.configurable.false =\
无法将 “{0}” 的可写属性从 false 更改为 true,因为 configurable 为 false。
msg.change.value.with.writable.false =\
无法更改属性 “{0}” 的值,因为 writable 为 false。
msg.change.getter.with.configurable.false =\
无法更改 “{0}” 的获取属性,因为 configurable 为 false。
msg.change.setter.with.configurable.false =\
无法更改 “{0}” 的设置属性,因为 configurable 为 false。
msg.change.property.data.to.accessor.with.configurable.false =\
无法将数据 “{0}” 的属性更改为访问者的属性,因为 configurable 为 false。
msg.change.property.accessor.to.data.with.configurable.false =\
无法将访问器 “{0}” 的属性更改为数据的属性,因为 configurable 为 false。
msg.not.extensible =\
无法向此对象添加属性,因为 extensible 为 false。
msg.delete.property.with.configurable.false =\
无法删除 “{0}” 属性,因为可配置为 false。
# TokenStream
msg.missing.exponent =\
缺少一个指数
msg.caught.nfe =\
数字格式错误 {0}
msg.unterminated.string.lit =\
字符串文字没有限制
msg.unterminated.comment =\
注释没有限制
msg.unterminated.re.lit =\
正则表达式文字没有限制
msg.invalid.re.flag =\
正则表达式后的标志 “{0}” 无效
msg.no.re.input.for =\
{0} 没有输入
msg.illegal.character =\
不允许的字符:“{0}”
msg.invalid.escape =\
Unicode 转义序列不正确
msg.bad.namespace =\
不是有效的默认命名空间语句。 \
语法是:默认 xml 命名空间 = EXPRESSION;
# TokensStream warnings
msg.bad.octal.literal =\
字面量 {0} 的八进制数字是不允许的,将被解释为十进制数字
msg.reserved.keyword =\
不允许使用将来的保留关键字 {0},这将被解释为普通标识符
# LiveConnect errors
msg.java.internal.field.type =\
内部错误:将 {1} 分配给 {2} 的 {0} 类型转换失败。
msg.java.conversion.implicit_method =\
在类 {1} 中找不到转换方法 “{0}”。
msg.java.method.assign =\
无法分配 Java 方法 “{0}”。
msg.java.internal.private =\
内部错误:检测到尝试访问受保护的私有字段 “{0}”。
msg.java.no_such_method =\
找不到方法 “{0}”。
msg.script.is.not.constructor =\
脚本对象不是构造函数。
msg.nonjava.method =\
Java 方法 “{0}” 被调用,{1} 作为“this”值,无法转换为 Java 类型 {2}。
msg.java.member.not.found =\
Java 类 “{0}” 没有名为 “{1}” 的公共实例字段或方法。
msg.java.array.index.out.of.bounds =\
数组索引 {0} 超出范围 [0..{1}]。
msg.java.array.member.not.found =\
Java 数组没有名为 “{0}” 的公共实例字段或方法。
msg.pkg.int =\
Java 中的包名不能以数字开头。
msg.access.prohibited =\
禁止访问 Java 类 “{0}”。
# ImporterTopLevel
msg.ambig.import =\
不明确的导入:“{0}” 和 “{1}”。
msg.not.pkg =\
调用 importPackage 函数必须使用包而不是 “{0}”。
msg.not.class =\
调用 importClass 函数必须使用类而不是 “{0}”。
msg.not.class.not.pkg =\
“{0}” 既不是类也不是包。
msg.prop.defined =\
无法导入 “{0}”,因为该名称的属性已定义。
#JavaAdapter
msg.adapter.zero.args =\
JavaAdapter 至少需要一个参数。
msg.not.java.class.arg = \
参数 {0} 不是 Java 类:{1}。
#JavaAdapter
msg.only.one.super = \
JavaAdapter 只能扩展一个类。已给出类 {0} 和 {1}。
# Arrays
msg.arraylength.bad =\
数组长度不合适。
# Arrays
msg.arraylength.too.big =\
数组 {0} 的长度超出了支持的容量限制。
msg.empty.array.reduce =\
“reduce” 方法在空数组上没有初始值时不起作用
# URI
msg.bad.uri =\
URI 序列的格式不正确。
# Number
msg.bad.precision =\
精度 {0} 超出范围。
# NativeGenerator
msg.send.newborn =\
在第一次调用 next() 之前不能调用生成器的 send() 方法
msg.already.exec.gen =\
生成器已经在运行
msg.StopIteration.invalid =\
StopIteration 异常不能更改为任意对象。
msg.generator.executing =\
生成器仍在执行先前的调用。
@@ -1,2244 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema version="1.0" xml:lang="en"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
elementFormDefault="qualified">
<!--
THIS IS A MODIFIED VERSION THAT DROPS ALL DEFAULT ATTRIBUTES! THEY ARE EVIL! (cb)
See: http://www.xmlplease.com/shaperect
-->
<xs:annotation>
<xs:documentation>
XHTML 1.0 (Second Edition) Strict in XML Schema
This is the same as HTML 4 Strict except for
changes due to the differences between XML and SGML.
Namespace = http://www.w3.org/1999/xhtml
For further information, see: http://www.w3.org/TR/xhtml1
Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
All Rights Reserved.
The DTD version is identified by the PUBLIC and SYSTEM identifiers:
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
$Id: xhtml1-strict.xsd,v 1.2 2002/08/28 08:05:44 mimasa Exp $
</xs:documentation>
</xs:annotation>
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
<xs:annotation>
<xs:documentation>
================ Character mnemonic entities =========================
XHTML entity sets are identified by the PUBLIC and SYSTEM identifiers:
PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
================== Imported Names ====================================
</xs:documentation>
</xs:annotation>
<xs:simpleType name="ContentType">
<xs:annotation>
<xs:documentation>
media type, as per [RFC2045]
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="ContentTypes">
<xs:annotation>
<xs:documentation>
comma-separated list of media types, as per [RFC2045]
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Charset">
<xs:annotation>
<xs:documentation>
a character encoding, as per [RFC2045]
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Charsets">
<xs:annotation>
<xs:documentation>
a space separated list of character encodings, as per [RFC2045]
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="LanguageCode">
<xs:annotation>
<xs:documentation>
a language code, as per [RFC3066]
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:language"/>
</xs:simpleType>
<xs:simpleType name="Character">
<xs:annotation>
<xs:documentation>
a single character, as per section 2.2 of [XML]
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:length value="1" fixed="true"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Number">
<xs:annotation>
<xs:documentation>
one or more digits
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:nonNegativeInteger">
<xs:pattern value="[0-9]+"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="tabindexNumber">
<xs:annotation>
<xs:documentation>
tabindex attribute specifies the position of the current element
in the tabbing order for the current document. This value must be
a number between 0 and 32767. User agents should ignore leading zeros.
</xs:documentation>
</xs:annotation>
<xs:restriction base="Number">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="32767"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="LinkTypes">
<xs:annotation>
<xs:documentation>
space-separated list of link types
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:NMTOKENS"/>
</xs:simpleType>
<xs:simpleType name="MediaDesc">
<xs:annotation>
<xs:documentation>
single or comma-separated list of media descriptors
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[^,]+(,\s*[^,]+)*"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="URI">
<xs:annotation>
<xs:documentation>
a Uniform Resource Identifier, see [RFC2396]
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:anyURI"/>
</xs:simpleType>
<xs:simpleType name="UriList">
<xs:annotation>
<xs:documentation>
a space separated list of Uniform Resource Identifiers
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Datetime">
<xs:annotation>
<xs:documentation>
date and time information. ISO date format
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:dateTime"/>
</xs:simpleType>
<xs:simpleType name="Script">
<xs:annotation>
<xs:documentation>
script expression
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="StyleSheet">
<xs:annotation>
<xs:documentation>
style sheet data
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Text">
<xs:annotation>
<xs:documentation>
used for titles etc.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="Length">
<xs:annotation>
<xs:documentation>
nn for pixels or nn% for percentage length
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="MultiLength">
<xs:annotation>
<xs:documentation>
pixel, percentage, or relative
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)|[1-9]?(\d+)?\*"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Pixels">
<xs:annotation>
<xs:documentation>
integer representing length in pixels
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:nonNegativeInteger"/>
</xs:simpleType>
<xs:annotation>
<xs:documentation>
these are used for image maps
</xs:documentation>
</xs:annotation>
<xs:simpleType name="Shape">
<xs:restriction base="xs:token">
<xs:enumeration value="rect"/>
<xs:enumeration value="circle"/>
<xs:enumeration value="poly"/>
<xs:enumeration value="default"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Coords">
<xs:annotation>
<xs:documentation>
comma separated list of lengths
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern
value="[-+]?(\d+|\d+(\.\d+)?%)(,\s*[-+]?(\d+|\d+(\.\d+)?%))*"/>
</xs:restriction>
</xs:simpleType>
<xs:annotation>
<xs:documentation>
=================== Generic Attributes ===============================
</xs:documentation>
</xs:annotation>
<xs:attributeGroup name="coreattrs">
<xs:annotation>
<xs:documentation>
core attributes common to most elements
id document-wide unique id
class space separated list of classes
style associated style info
title advisory title/amplification
</xs:documentation>
</xs:annotation>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="class" type="xs:NMTOKENS"/>
<xs:attribute name="style" type="StyleSheet"/>
<xs:attribute name="title" type="Text"/>
</xs:attributeGroup>
<xs:attributeGroup name="i18n">
<xs:annotation>
<xs:documentation>
internationalization attributes
lang language code (backwards compatible)
xml:lang language code (as per XML 1.0 spec)
dir direction for weak/neutral text
</xs:documentation>
</xs:annotation>
<xs:attribute name="lang" type="LanguageCode"/>
<xs:attribute ref="xml:lang"/>
<xs:attribute name="dir">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="ltr"/>
<xs:enumeration value="rtl"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:attributeGroup name="events">
<xs:annotation>
<xs:documentation>
attributes for common UI events
onclick a pointer button was clicked
ondblclick a pointer button was double clicked
onmousedown a pointer button was pressed down
onmouseup a pointer button was released
onmousemove a pointer was moved onto the element
onmouseout a pointer was moved away from the element
onkeypress a key was pressed and released
onkeydown a key was pressed down
onkeyup a key was released
</xs:documentation>
</xs:annotation>
<xs:attribute name="onclick" type="Script"/>
<xs:attribute name="ondblclick" type="Script"/>
<xs:attribute name="onmousedown" type="Script"/>
<xs:attribute name="onmouseup" type="Script"/>
<xs:attribute name="onmouseover" type="Script"/>
<xs:attribute name="onmousemove" type="Script"/>
<xs:attribute name="onmouseout" type="Script"/>
<xs:attribute name="onkeypress" type="Script"/>
<xs:attribute name="onkeydown" type="Script"/>
<xs:attribute name="onkeyup" type="Script"/>
</xs:attributeGroup>
<xs:attributeGroup name="focus">
<xs:annotation>
<xs:documentation>
attributes for elements that can get the focus
accesskey accessibility key character
tabindex position in tabbing order
onfocus the element got the focus
onblur the element lost the focus
</xs:documentation>
</xs:annotation>
<xs:attribute name="accesskey" type="Character"/>
<xs:attribute name="tabindex" type="tabindexNumber"/>
<xs:attribute name="onfocus" type="Script"/>
<xs:attribute name="onblur" type="Script"/>
</xs:attributeGroup>
<xs:attributeGroup name="attrs">
<xs:attributeGroup ref="coreattrs"/>
<xs:attributeGroup ref="i18n"/>
<xs:attributeGroup ref="events"/>
</xs:attributeGroup>
<xs:annotation>
<xs:documentation>
=================== Text Elements ====================================
</xs:documentation>
</xs:annotation>
<xs:group name="special.pre">
<xs:choice>
<xs:element ref="br"/>
<xs:element ref="span"/>
<xs:element ref="bdo"/>
<xs:element ref="map"/>
</xs:choice>
</xs:group>
<xs:group name="special">
<xs:choice>
<xs:group ref="special.pre"/>
<xs:element ref="object"/>
<xs:element ref="img"/>
</xs:choice>
</xs:group>
<xs:group name="fontstyle">
<xs:choice>
<xs:element ref="tt"/>
<xs:element ref="i"/>
<xs:element ref="b"/>
<xs:element ref="big"/>
<xs:element ref="small"/>
</xs:choice>
</xs:group>
<xs:group name="phrase">
<xs:choice>
<xs:element ref="em"/>
<xs:element ref="strong"/>
<xs:element ref="dfn"/>
<xs:element ref="code"/>
<xs:element ref="q"/>
<xs:element ref="samp"/>
<xs:element ref="kbd"/>
<xs:element ref="var"/>
<xs:element ref="cite"/>
<xs:element ref="abbr"/>
<xs:element ref="acronym"/>
<xs:element ref="sub"/>
<xs:element ref="sup"/>
</xs:choice>
</xs:group>
<xs:group name="inline.forms">
<xs:choice>
<xs:element ref="input"/>
<xs:element ref="select"/>
<xs:element ref="textarea"/>
<xs:element ref="label"/>
<xs:element ref="button"/>
</xs:choice>
</xs:group>
<xs:group name="misc.inline">
<xs:choice>
<xs:element ref="ins"/>
<xs:element ref="del"/>
<xs:element ref="script"/>
</xs:choice>
</xs:group>
<xs:group name="misc">
<xs:annotation>
<xs:documentation>
these can only occur at block level
</xs:documentation>
</xs:annotation>
<xs:choice>
<xs:element ref="noscript"/>
<xs:group ref="misc.inline"/>
</xs:choice>
</xs:group>
<xs:group name="inline">
<xs:choice>
<xs:element ref="a"/>
<xs:group ref="special"/>
<xs:group ref="fontstyle"/>
<xs:group ref="phrase"/>
<xs:group ref="inline.forms"/>
</xs:choice>
</xs:group>
<xs:complexType name="Inline" mixed="true">
<xs:annotation>
<xs:documentation>
"Inline" covers inline or "text-level" elements
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="inline"/>
<xs:group ref="misc.inline"/>
</xs:choice>
</xs:complexType>
<xs:annotation>
<xs:documentation>
================== Block level elements ==============================
</xs:documentation>
</xs:annotation>
<xs:group name="heading">
<xs:choice>
<xs:element ref="h1"/>
<xs:element ref="h2"/>
<xs:element ref="h3"/>
<xs:element ref="h4"/>
<xs:element ref="h5"/>
<xs:element ref="h6"/>
</xs:choice>
</xs:group>
<xs:group name="lists">
<xs:choice>
<xs:element ref="ul"/>
<xs:element ref="ol"/>
<xs:element ref="dl"/>
</xs:choice>
</xs:group>
<xs:group name="blocktext">
<xs:choice>
<xs:element ref="pre"/>
<xs:element ref="hr"/>
<xs:element ref="blockquote"/>
<xs:element ref="address"/>
</xs:choice>
</xs:group>
<xs:group name="block">
<xs:choice>
<xs:element ref="p"/>
<xs:group ref="heading"/>
<xs:element ref="div"/>
<xs:group ref="lists"/>
<xs:group ref="blocktext"/>
<xs:element ref="fieldset"/>
<xs:element ref="table"/>
</xs:choice>
</xs:group>
<xs:complexType name="Block">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="block"/>
<xs:element ref="form"/>
<xs:group ref="misc"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="Flow" mixed="true">
<xs:annotation>
<xs:documentation>
"Flow" mixes block and inline and is used for list items etc.
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="block"/>
<xs:element ref="form"/>
<xs:group ref="inline"/>
<xs:group ref="misc"/>
</xs:choice>
</xs:complexType>
<xs:annotation>
<xs:documentation>
================== Content models for exclusions =====================
</xs:documentation>
</xs:annotation>
<xs:complexType name="a.content" mixed="true">
<xs:annotation>
<xs:documentation>
a elements use "Inline" excluding a
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="special"/>
<xs:group ref="fontstyle"/>
<xs:group ref="phrase"/>
<xs:group ref="inline.forms"/>
<xs:group ref="misc.inline"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="pre.content" mixed="true">
<xs:annotation>
<xs:documentation>
pre uses "Inline" excluding big, small, sup or sup
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="a"/>
<xs:group ref="fontstyle"/>
<xs:group ref="phrase"/>
<xs:group ref="special.pre"/>
<xs:group ref="misc.inline"/>
<xs:group ref="inline.forms"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="form.content">
<xs:annotation>
<xs:documentation>
form uses "Block" excluding form
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="block"/>
<xs:group ref="misc"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="button.content" mixed="true">
<xs:annotation>
<xs:documentation>
button uses "Flow" but excludes a, form and form controls
</xs:documentation>
</xs:annotation>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="p"/>
<xs:group ref="heading"/>
<xs:element ref="div"/>
<xs:group ref="lists"/>
<xs:group ref="blocktext"/>
<xs:element ref="table"/>
<xs:group ref="special"/>
<xs:group ref="fontstyle"/>
<xs:group ref="phrase"/>
<xs:group ref="misc"/>
</xs:choice>
</xs:complexType>
<xs:annotation>
<xs:documentation>
================ Document Structure ==================================
</xs:documentation>
</xs:annotation>
<xs:element name="html">
<xs:complexType>
<xs:sequence>
<xs:element ref="head"/>
<xs:element ref="body"/>
</xs:sequence>
<xs:attributeGroup ref="i18n"/>
<xs:attribute name="id" type="xs:ID"/>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
================ Document Head =======================================
</xs:documentation>
</xs:annotation>
<xs:group name="head.misc">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="script"/>
<xs:element ref="style"/>
<xs:element ref="meta"/>
<xs:element ref="link"/>
<xs:element ref="object"/>
</xs:choice>
</xs:sequence>
</xs:group>
<xs:element name="head">
<xs:annotation>
<xs:documentation>
content model is "head.misc" combined with a single
title and an optional base element in any order
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:group ref="head.misc"/>
<xs:choice>
<xs:sequence>
<xs:element ref="title"/>
<xs:group ref="head.misc"/>
<xs:sequence minOccurs="0">
<xs:element ref="base"/>
<xs:group ref="head.misc"/>
</xs:sequence>
</xs:sequence>
<xs:sequence>
<xs:element ref="base"/>
<xs:group ref="head.misc"/>
<xs:element ref="title"/>
<xs:group ref="head.misc"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="i18n"/>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="profile" type="URI"/>
</xs:complexType>
</xs:element>
<xs:element name="title">
<xs:annotation>
<xs:documentation>
The title element is not considered part of the flow of text.
It should be displayed, for example as the page header or
window title. Exactly one title is required per document.
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:attributeGroup ref="i18n"/>
<xs:attribute name="id" type="xs:ID"/>
</xs:complexType>
</xs:element>
<xs:element name="base">
<xs:annotation>
<xs:documentation>
document base URI
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="href" use="required" type="URI"/>
<xs:attribute name="id" type="xs:ID"/>
</xs:complexType>
</xs:element>
<xs:element name="meta">
<xs:annotation>
<xs:documentation>
generic metainformation
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attributeGroup ref="i18n"/>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="http-equiv"/>
<xs:attribute name="name"/>
<xs:attribute name="content" use="required"/>
<xs:attribute name="scheme"/>
</xs:complexType>
</xs:element>
<xs:element name="link">
<xs:annotation>
<xs:documentation>
Relationship values can be used in principle:
a) for document specific toolbars/menus when used
with the link element in document head e.g.
start, contents, previous, next, index, end, help
b) to link to a separate style sheet (rel="stylesheet")
c) to make a link to a script (rel="script")
d) by stylesheets to control how collections of
html nodes are rendered into printed documents
e) to make a link to a printable version of this document
e.g. a PostScript or PDF version (rel="alternate" media="print")
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="charset" type="Charset"/>
<xs:attribute name="href" type="URI"/>
<xs:attribute name="hreflang" type="LanguageCode"/>
<xs:attribute name="type" type="ContentType"/>
<xs:attribute name="rel" type="LinkTypes"/>
<xs:attribute name="rev" type="LinkTypes"/>
<xs:attribute name="media" type="MediaDesc"/>
</xs:complexType>
</xs:element>
<xs:element name="style">
<xs:annotation>
<xs:documentation>
style info, which may include CDATA sections
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:attributeGroup ref="i18n"/>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="type" use="required" type="ContentType"/>
<xs:attribute name="media" type="MediaDesc"/>
<xs:attribute name="title" type="Text"/>
<xs:attribute ref="xml:space" fixed="preserve"/>
</xs:complexType>
</xs:element>
<xs:element name="script">
<xs:annotation>
<xs:documentation>
script statements, which may include CDATA sections
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="charset" type="Charset"/>
<xs:attribute name="type" use="required" type="ContentType"/>
<xs:attribute name="src" type="URI"/>
<xs:attribute name="defer">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="defer"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute ref="xml:space" fixed="preserve"/>
</xs:complexType>
</xs:element>
<xs:element name="noscript">
<xs:annotation>
<xs:documentation>
alternate content container for non script-based rendering
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:complexContent>
<xs:extension base="Block">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Document Body ====================================
</xs:documentation>
</xs:annotation>
<xs:element name="body">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Block">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="onload" type="Script"/>
<xs:attribute name="onunload" type="Script"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="div">
<xs:annotation>
<xs:documentation>
generic language/style container
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Flow">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Paragraphs =======================================
</xs:documentation>
</xs:annotation>
<xs:element name="p">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Headings =========================================
There are six levels of headings from h1 (the most important)
to h6 (the least important).
</xs:documentation>
</xs:annotation>
<xs:element name="h1">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="h2">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="h3">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="h4">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="h5">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="h6">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Lists ============================================
</xs:documentation>
</xs:annotation>
<xs:element name="ul">
<xs:annotation>
<xs:documentation>
Unordered list
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="li"/>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
</xs:complexType>
</xs:element>
<xs:element name="ol">
<xs:annotation>
<xs:documentation>
Ordered (numbered) list
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="li"/>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
</xs:complexType>
</xs:element>
<xs:element name="li">
<xs:annotation>
<xs:documentation>
list item
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Flow">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
definition lists - dt for term, dd for its definition
</xs:documentation>
</xs:annotation>
<xs:element name="dl">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="dt"/>
<xs:element ref="dd"/>
</xs:choice>
<xs:attributeGroup ref="attrs"/>
</xs:complexType>
</xs:element>
<xs:element name="dt">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="dd">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Flow">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Address ==========================================
</xs:documentation>
</xs:annotation>
<xs:element name="address">
<xs:annotation>
<xs:documentation>
information on author
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Horizontal Rule ==================================
</xs:documentation>
</xs:annotation>
<xs:element name="hr">
<xs:complexType>
<xs:attributeGroup ref="attrs"/>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Preformatted Text ================================
</xs:documentation>
</xs:annotation>
<xs:element name="pre">
<xs:annotation>
<xs:documentation>
content is "Inline" excluding "img|object|big|small|sub|sup"
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="pre.content">
<xs:attributeGroup ref="attrs"/>
<xs:attribute ref="xml:space" fixed="preserve"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Block-like Quotes ================================
</xs:documentation>
</xs:annotation>
<xs:element name="blockquote">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Block">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="cite" type="URI"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Inserted/Deleted Text ============================
ins/del are allowed in block and inline content, but its
inappropriate to include block content within an ins element
occurring in inline content.
</xs:documentation>
</xs:annotation>
<xs:element name="ins">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Flow">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="cite" type="URI"/>
<xs:attribute name="datetime" type="Datetime"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="del">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Flow">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="cite" type="URI"/>
<xs:attribute name="datetime" type="Datetime"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
================== The Anchor Element ================================
</xs:documentation>
</xs:annotation>
<xs:element name="a">
<xs:annotation>
<xs:documentation>
content is "Inline" except that anchors shouldn't be nested
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="a.content">
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="focus"/>
<xs:attribute name="charset" type="Charset"/>
<xs:attribute name="type" type="ContentType"/>
<xs:attribute name="name" type="xs:NMTOKEN"/>
<xs:attribute name="href" type="URI"/>
<xs:attribute name="hreflang" type="LanguageCode"/>
<xs:attribute name="rel" type="LinkTypes"/>
<xs:attribute name="rev" type="LinkTypes"/>
<!--
<xs:attribute name="shape" default="rect" type="Shape"/>
-->
<xs:attribute name="coords" type="Coords"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
===================== Inline Elements ================================
</xs:documentation>
</xs:annotation>
<xs:element name="span">
<xs:annotation>
<xs:documentation>
generic language/style container
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="bdo">
<xs:annotation>
<xs:documentation>
I18N BiDi over-ride
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="coreattrs"/>
<xs:attributeGroup ref="events"/>
<xs:attribute name="lang" type="LanguageCode"/>
<xs:attribute ref="xml:lang"/>
<xs:attribute name="dir" use="required">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="ltr"/>
<xs:enumeration value="rtl"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="br">
<xs:annotation>
<xs:documentation>
forced line break
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attributeGroup ref="coreattrs"/>
</xs:complexType>
</xs:element>
<xs:element name="em">
<xs:annotation>
<xs:documentation>
emphasis
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="strong">
<xs:annotation>
<xs:documentation>
strong emphasis
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="dfn">
<xs:annotation>
<xs:documentation>
definitional
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="code">
<xs:annotation>
<xs:documentation>
program code
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="samp">
<xs:annotation>
<xs:documentation>
sample
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="kbd">
<xs:annotation>
<xs:documentation>
something user would type
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="var">
<xs:annotation>
<xs:documentation>
variable
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="cite">
<xs:annotation>
<xs:documentation>
citation
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="abbr">
<xs:annotation>
<xs:documentation>
abbreviation
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="acronym">
<xs:annotation>
<xs:documentation>
acronym
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="q">
<xs:annotation>
<xs:documentation>
inlined quote
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="cite" type="URI"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="sub">
<xs:annotation>
<xs:documentation>
subscript
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="sup">
<xs:annotation>
<xs:documentation>
superscript
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="tt">
<xs:annotation>
<xs:documentation>
fixed pitch font
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="i">
<xs:annotation>
<xs:documentation>
italic font
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="b">
<xs:annotation>
<xs:documentation>
bold font
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="big">
<xs:annotation>
<xs:documentation>
bigger font
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="small">
<xs:annotation>
<xs:documentation>
smaller font
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
==================== Object ======================================
object is used to embed objects as part of HTML pages.
param elements should precede other content. Parameters
can also be expressed as attribute/value pairs on the
object element itself when brevity is desired.
</xs:documentation>
</xs:annotation>
<xs:element name="object">
<xs:complexType mixed="true">
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="param"/>
<xs:group ref="block"/>
<xs:element ref="form"/>
<xs:group ref="inline"/>
<xs:group ref="misc"/>
</xs:choice>
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="declare">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="declare"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="classid" type="URI"/>
<xs:attribute name="codebase" type="URI"/>
<xs:attribute name="data" type="URI"/>
<xs:attribute name="type" type="ContentType"/>
<xs:attribute name="codetype" type="ContentType"/>
<xs:attribute name="archive" type="UriList"/>
<xs:attribute name="standby" type="Text"/>
<xs:attribute name="height" type="Length"/>
<xs:attribute name="width" type="Length"/>
<xs:attribute name="usemap" type="URI"/>
<xs:attribute name="name" type="xs:NMTOKEN"/>
<xs:attribute name="tabindex" type="tabindexNumber"/>
</xs:complexType>
</xs:element>
<xs:element name="param">
<xs:annotation>
<xs:documentation>
param is used to supply a named property value.
In XML it would seem natural to follow RDF and support an
abbreviated syntax where the param elements are replaced
by attribute value pairs on the object start tag.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="id" type="xs:ID"/>
<xs:attribute name="name"/>
<xs:attribute name="value"/>
<xs:attribute name="valuetype" default="data">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="data"/>
<xs:enumeration value="ref"/>
<xs:enumeration value="object"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="type" type="ContentType"/>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
=================== Images ===========================================
To avoid accessibility problems for people who aren't
able to see the image, you should provide a text
description using the alt and longdesc attributes.
In addition, avoid the use of server-side image maps.
Note that in this DTD there is no name attribute. That
is only available in the transitional and frameset DTD.
</xs:documentation>
</xs:annotation>
<xs:element name="img">
<xs:complexType>
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="src" use="required" type="URI"/>
<xs:attribute name="alt" use="required" type="Text"/>
<xs:attribute name="longdesc" type="URI"/>
<xs:attribute name="height" type="Length"/>
<xs:attribute name="width" type="Length"/>
<xs:attribute name="usemap" type="URI">
<xs:annotation>
<xs:documentation>
usemap points to a map element which may be in this document
or an external document, although the latter is not widely supported
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ismap">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="ismap"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
================== Client-side image maps ============================
These can be placed in the same document or grouped in a
separate document although this isn't yet widely supported
</xs:documentation>
</xs:annotation>
<xs:element name="map">
<xs:complexType>
<xs:choice>
<xs:choice maxOccurs="unbounded">
<xs:group ref="block"/>
<xs:element ref="form"/>
<xs:group ref="misc"/>
</xs:choice>
<xs:element maxOccurs="unbounded" ref="area"/>
</xs:choice>
<xs:attributeGroup ref="i18n"/>
<xs:attributeGroup ref="events"/>
<xs:attribute name="id" use="required" type="xs:ID"/>
<xs:attribute name="class"/>
<xs:attribute name="style" type="StyleSheet"/>
<xs:attribute name="title" type="Text"/>
<xs:attribute name="name" type="xs:NMTOKEN"/>
</xs:complexType>
</xs:element>
<xs:element name="area">
<xs:complexType>
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="focus"/>
<xs:attribute name="shape" type="Shape"/>
<!--
<xs:attribute name="shape" default="rect" type="Shape"/>
-->
<xs:attribute name="coords" type="Coords"/>
<xs:attribute name="href" type="URI"/>
<xs:attribute name="nohref">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="nohref"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="alt" use="required" type="Text"/>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
================ Forms ===============================================
</xs:documentation>
</xs:annotation>
<xs:element name="form">
<xs:complexType>
<xs:complexContent>
<xs:extension base="form.content">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="action" use="required" type="URI"/>
<!--
<xs:attribute name="method" default="get">
-->
<xs:attribute name="method">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="get"/>
<xs:enumeration value="post"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<!--
<xs:attribute name="enctype" type="ContentType"
default="application/x-www-form-urlencoded"/>
-->
<xs:attribute name="enctype" type="ContentType"/>
<xs:attribute name="onsubmit" type="Script"/>
<xs:attribute name="onreset" type="Script"/>
<xs:attribute name="accept" type="ContentTypes"/>
<xs:attribute name="accept-charset" type="Charsets"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="label">
<xs:annotation>
<xs:documentation>
Each label must not contain more than ONE field
Label elements shouldn't be nested.
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="for" type="xs:IDREF"/>
<xs:attribute name="accesskey" type="Character"/>
<xs:attribute name="onfocus" type="Script"/>
<xs:attribute name="onblur" type="Script"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:simpleType name="InputType">
<xs:restriction base="xs:token">
<xs:enumeration value="text"/>
<xs:enumeration value="password"/>
<xs:enumeration value="checkbox"/>
<xs:enumeration value="radio"/>
<xs:enumeration value="submit"/>
<xs:enumeration value="reset"/>
<xs:enumeration value="file"/>
<xs:enumeration value="hidden"/>
<xs:enumeration value="image"/>
<xs:enumeration value="button"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="input">
<xs:annotation>
<xs:documentation>
form control
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="focus"/>
<xs:attribute name="type" default="text" type="InputType"/>
<xs:attribute name="name">
<xs:annotation>
<xs:documentation>
the name attribute is required for all but submit &amp; reset
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="value"/>
<xs:attribute name="checked">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="checked"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="disabled">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="disabled"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="readonly">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="readonly"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="size"/>
<xs:attribute name="maxlength" type="Number"/>
<xs:attribute name="src" type="URI"/>
<xs:attribute name="alt"/>
<xs:attribute name="usemap" type="URI"/>
<xs:attribute name="onselect" type="Script"/>
<xs:attribute name="onchange" type="Script"/>
<xs:attribute name="accept" type="ContentTypes"/>
</xs:complexType>
</xs:element>
<xs:element name="select">
<xs:annotation>
<xs:documentation>
option selector
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="optgroup"/>
<xs:element ref="option"/>
</xs:choice>
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="name"/>
<xs:attribute name="size" type="Number"/>
<xs:attribute name="multiple">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="multiple"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="disabled">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="disabled"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="tabindex" type="tabindexNumber"/>
<xs:attribute name="onfocus" type="Script"/>
<xs:attribute name="onblur" type="Script"/>
<xs:attribute name="onchange" type="Script"/>
</xs:complexType>
</xs:element>
<xs:element name="optgroup">
<xs:annotation>
<xs:documentation>
option group
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="option"/>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="disabled">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="disabled"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="label" use="required" type="Text"/>
</xs:complexType>
</xs:element>
<xs:element name="option">
<xs:annotation>
<xs:documentation>
selectable choice
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="selected">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="selected"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="disabled">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="disabled"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="label" type="Text"/>
<xs:attribute name="value"/>
</xs:complexType>
</xs:element>
<xs:element name="textarea">
<xs:annotation>
<xs:documentation>
multi-line text field
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="focus"/>
<xs:attribute name="name"/>
<xs:attribute name="rows" use="required" type="Number"/>
<xs:attribute name="cols" use="required" type="Number"/>
<xs:attribute name="disabled">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="disabled"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="readonly">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="readonly"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="onselect" type="Script"/>
<xs:attribute name="onchange" type="Script"/>
</xs:complexType>
</xs:element>
<xs:element name="fieldset">
<xs:annotation>
<xs:documentation>
The fieldset element is used to group form fields.
Only one legend element should occur in the content
and if present should only be preceded by whitespace.
NOTE: this content model is different from the XHTML 1.0 DTD,
closer to the intended content model in HTML4 DTD
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:sequence>
<xs:element ref="legend"/>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:group ref="block"/>
<xs:element ref="form"/>
<xs:group ref="inline"/>
<xs:group ref="misc"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
</xs:complexType>
</xs:element>
<xs:element name="legend">
<xs:annotation>
<xs:documentation>
fieldset label
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="accesskey" type="Character"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="button">
<xs:annotation>
<xs:documentation>
Content is "Flow" excluding a, form and form controls
</xs:documentation>
</xs:annotation>
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="button.content">
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="focus"/>
<xs:attribute name="name"/>
<xs:attribute name="value"/>
<!--
<xs:attribute name="type" default="submit">
-->
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="button"/>
<xs:enumeration value="submit"/>
<xs:enumeration value="reset"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="disabled">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="disabled"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
======================= Tables =======================================
Derived from IETF HTML table standard, see [RFC1942]
</xs:documentation>
</xs:annotation>
<xs:simpleType name="TFrame">
<xs:annotation>
<xs:documentation>
The border attribute sets the thickness of the frame around the
table. The default units are screen pixels.
The frame attribute specifies which parts of the frame around
the table should be rendered. The values are not the same as
CALS to avoid a name clash with the valign attribute.
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="void"/>
<xs:enumeration value="above"/>
<xs:enumeration value="below"/>
<xs:enumeration value="hsides"/>
<xs:enumeration value="lhs"/>
<xs:enumeration value="rhs"/>
<xs:enumeration value="vsides"/>
<xs:enumeration value="box"/>
<xs:enumeration value="border"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TRules">
<xs:annotation>
<xs:documentation>
The rules attribute defines which rules to draw between cells:
If rules is absent then assume:
"none" if border is absent or border="0" otherwise "all"
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="none"/>
<xs:enumeration value="groups"/>
<xs:enumeration value="rows"/>
<xs:enumeration value="cols"/>
<xs:enumeration value="all"/>
</xs:restriction>
</xs:simpleType>
<xs:attributeGroup name="cellhalign">
<xs:annotation>
<xs:documentation>
horizontal alignment attributes for cell contents
char alignment char, e.g. char=':'
charoff offset for alignment char
</xs:documentation>
</xs:annotation>
<xs:attribute name="align">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="left"/>
<xs:enumeration value="center"/>
<xs:enumeration value="right"/>
<xs:enumeration value="justify"/>
<xs:enumeration value="char"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="char" type="Character"/>
<xs:attribute name="charoff" type="Length"/>
</xs:attributeGroup>
<xs:attributeGroup name="cellvalign">
<xs:annotation>
<xs:documentation>
vertical alignment attributes for cell contents
</xs:documentation>
</xs:annotation>
<xs:attribute name="valign">
<xs:simpleType>
<xs:restriction base="xs:token">
<xs:enumeration value="top"/>
<xs:enumeration value="middle"/>
<xs:enumeration value="bottom"/>
<xs:enumeration value="baseline"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<xs:element name="table">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" ref="caption"/>
<xs:choice>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="colgroup"/>
</xs:choice>
<xs:element minOccurs="0" ref="thead"/>
<xs:element minOccurs="0" ref="tfoot"/>
<xs:choice>
<xs:element maxOccurs="unbounded" ref="tbody"/>
<xs:element maxOccurs="unbounded" ref="tr"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="summary" type="Text"/>
<xs:attribute name="width" type="Length"/>
<xs:attribute name="border" type="Pixels"/>
<xs:attribute name="frame" type="TFrame"/>
<xs:attribute name="rules" type="TRules"/>
<xs:attribute name="cellspacing" type="Length"/>
<xs:attribute name="cellpadding" type="Length"/>
</xs:complexType>
</xs:element>
<xs:element name="caption">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Inline">
<xs:attributeGroup ref="attrs"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:annotation>
<xs:documentation>
Use thead to duplicate headers when breaking table
across page boundaries, or for static headers when
tbody sections are rendered in scrolling panel.
Use tfoot to duplicate footers when breaking table
across page boundaries, or for static footers when
tbody sections are rendered in scrolling panel.
Use multiple tbody sections when rules are needed
between groups of table rows.
</xs:documentation>
</xs:annotation>
<xs:element name="thead">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="tr"/>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="cellhalign"/>
<xs:attributeGroup ref="cellvalign"/>
</xs:complexType>
</xs:element>
<xs:element name="tfoot">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="tr"/>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="cellhalign"/>
<xs:attributeGroup ref="cellvalign"/>
</xs:complexType>
</xs:element>
<xs:element name="tbody">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="tr"/>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="cellhalign"/>
<xs:attributeGroup ref="cellvalign"/>
</xs:complexType>
</xs:element>
<xs:element name="colgroup">
<xs:annotation>
<xs:documentation>
colgroup groups a set of col elements. It allows you to group
several semantically related columns together.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/>
</xs:sequence>
<xs:attributeGroup ref="attrs"/>
<!--
<xs:attribute name="span" default="1" type="Number"/>
-->
<xs:attribute name="span" type="Number"/>
<xs:attribute name="width" type="MultiLength"/>
<xs:attributeGroup ref="cellhalign"/>
<xs:attributeGroup ref="cellvalign"/>
</xs:complexType>
</xs:element>
<xs:element name="col">
<xs:annotation>
<xs:documentation>
col elements define the alignment properties for cells in
one or more columns.
The width attribute specifies the width of the columns, e.g.
width=64 width in screen pixels
width=0.5* relative width of 0.5
The span attribute causes the attributes of one
col element to apply to more than one column.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attributeGroup ref="attrs"/>
<!--
<xs:attribute name="span" default="1" type="Number"/>
-->
<xs:attribute name="span" type="Number"/>
<xs:attribute name="width" type="MultiLength"/>
<xs:attributeGroup ref="cellhalign"/>
<xs:attributeGroup ref="cellvalign"/>
</xs:complexType>
</xs:element>
<xs:element name="tr">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element ref="th"/>
<xs:element ref="td"/>
</xs:choice>
<xs:attributeGroup ref="attrs"/>
<xs:attributeGroup ref="cellhalign"/>
<xs:attributeGroup ref="cellvalign"/>
</xs:complexType>
</xs:element>
<xs:simpleType name="Scope">
<xs:annotation>
<xs:documentation>
Scope is simpler than headers attribute for common tables
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:token">
<xs:enumeration value="row"/>
<xs:enumeration value="col"/>
<xs:enumeration value="rowgroup"/>
<xs:enumeration value="colgroup"/>
</xs:restriction>
</xs:simpleType>
<xs:annotation>
<xs:documentation>
th is for headers, td for data and for cells acting as both
</xs:documentation>
</xs:annotation>
<xs:element name="th">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Flow">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="abbr" type="Text"/>
<xs:attribute name="axis"/>
<xs:attribute name="headers" type="xs:IDREFS"/>
<xs:attribute name="scope" type="Scope"/>
<!--
<xs:attribute name="rowspan" default="1" type="Number"/>
<xs:attribute name="colspan" default="1" type="Number"/>
-->
<xs:attribute name="rowspan" type="Number"/>
<xs:attribute name="colspan" type="Number"/>
<xs:attributeGroup ref="cellhalign"/>
<xs:attributeGroup ref="cellvalign"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="td">
<xs:complexType mixed="true">
<xs:complexContent>
<xs:extension base="Flow">
<xs:attributeGroup ref="attrs"/>
<xs:attribute name="abbr" type="Text"/>
<xs:attribute name="axis"/>
<xs:attribute name="headers" type="xs:IDREFS"/>
<xs:attribute name="scope" type="Scope"/>
<!--
<xs:attribute name="rowspan" default="1" type="Number"/>
<xs:attribute name="colspan" default="1" type="Number"/>
-->
<xs:attribute name="rowspan" type="Number"/>
<xs:attribute name="colspan" type="Number"/>
<xs:attributeGroup ref="cellhalign"/>
<xs:attributeGroup ref="cellvalign"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>
-287
View File
@@ -1,287 +0,0 @@
<?xml version='1.0'?>
<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns ="http://www.w3.org/1999/xhtml"
xml:lang="en">
<xs:annotation>
<xs:documentation>
<div>
<h1>About the XML namespace</h1>
<div class="bodytext">
<p>
This schema document describes the XML namespace, in a form
suitable for import by other schema documents.
</p>
<p>
See <a href="http://www.w3.org/XML/1998/namespace.html">
http://www.w3.org/XML/1998/namespace.html</a> and
<a href="http://www.w3.org/TR/REC-xml">
http://www.w3.org/TR/REC-xml</a> for information
about this namespace.
</p>
<p>
Note that local names in this namespace are intended to be
defined only by the World Wide Web Consortium or its subgroups.
The names currently defined in this namespace are listed below.
They should not be used with conflicting semantics by any Working
Group, specification, or document instance.
</p>
<p>
See further below in this document for more information about <a
href="#usage">how to refer to this schema document from your own
XSD schema documents</a> and about <a href="#nsversioning">the
namespace-versioning policy governing this schema document</a>.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:attribute name="lang">
<xs:annotation>
<xs:documentation>
<div>
<h3>lang (as an attribute name)</h3>
<p>
denotes an attribute whose value
is a language code for the natural language of the content of
any element; its value is inherited. This name is reserved
by virtue of its definition in the XML specification.</p>
</div>
<div>
<h4>Notes</h4>
<p>
Attempting to install the relevant ISO 2- and 3-letter
codes as the enumerated possible values is probably never
going to be a realistic possibility.
</p>
<p>
See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
and the IANA language subtag registry at
<a href="http://www.iana.org/assignments/language-subtag-registry">
http://www.iana.org/assignments/language-subtag-registry</a>
for further information.
</p>
<p>
The union allows for the 'un-declaration' of xml:lang with
the empty string.
</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:union memberTypes="xs:language">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="space">
<xs:annotation>
<xs:documentation>
<div>
<h3>space (as an attribute name)</h3>
<p>
denotes an attribute whose
value is a keyword indicating what whitespace processing
discipline is intended for the content of the element; its
value is inherited. This name is reserved by virtue of its
definition in the XML specification.</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:NCName">
<xs:enumeration value="default"/>
<xs:enumeration value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
<xs:documentation>
<div>
<h3>base (as an attribute name)</h3>
<p>
denotes an attribute whose value
provides a URI to be used as the base for interpreting any
relative URIs in the scope of the element on which it
appears; its value is inherited. This name is reserved
by virtue of its definition in the XML Base specification.</p>
<p>
See <a
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="id" type="xs:ID">
<xs:annotation>
<xs:documentation>
<div>
<h3>id (as an attribute name)</h3>
<p>
denotes an attribute whose value
should be interpreted as if declared to be of type ID.
This name is reserved by virtue of its definition in the
xml:id specification.</p>
<p>
See <a
href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attributeGroup name="specialAttrs">
<xs:attribute ref="xml:base"/>
<xs:attribute ref="xml:lang"/>
<xs:attribute ref="xml:space"/>
<xs:attribute ref="xml:id"/>
</xs:attributeGroup>
<xs:annotation>
<xs:documentation>
<div>
<h3>Father (in any context at all)</h3>
<div class="bodytext">
<p>
denotes Jon Bosak, the chair of
the original XML Working Group. This name is reserved by
the following decision of the W3C XML Plenary and
XML Coordination groups:
</p>
<blockquote>
<p>
In appreciation for his vision, leadership and
dedication the W3C XML Plenary on this 10th day of
February, 2000, reserves for Jon Bosak in perpetuity
the XML name "xml:Father".
</p>
</blockquote>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div xml:id="usage" id="usage">
<h2><a name="usage">About this schema document</a></h2>
<div class="bodytext">
<p>
This schema defines attributes and an attribute group suitable
for use by schemas wishing to allow <code>xml:base</code>,
<code>xml:lang</code>, <code>xml:space</code> or
<code>xml:id</code> attributes on elements they define.
</p>
<p>
To enable this, such a schema must import this schema for
the XML namespace, e.g. as follows:
</p>
<pre>
&lt;schema . . .>
. . .
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
</pre>
<p>
or
</p>
<pre>
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
</pre>
<p>
Subsequently, qualified reference to any of the attributes or the
group defined below will have the desired effect, e.g.
</p>
<pre>
&lt;type . . .>
. . .
&lt;attributeGroup ref="xml:specialAttrs"/>
</pre>
<p>
will define a type which will schema-validate an instance element
with any of those attributes.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div id="nsversioning" xml:id="nsversioning">
<h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
<div class="bodytext">
<p>
In keeping with the XML Schema WG's standard versioning
policy, this schema document will persist at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a>.
</p>
<p>
At the date of issue it can also be found at
<a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd</a>.
</p>
<p>
The schema document at that URI may however change in the future,
in order to remain compatible with the latest version of XML
Schema itself, or with the XML namespace itself. In other words,
if the XML Schema or XML namespaces change, the version of this
document at <a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd
</a>
will change accordingly; the version at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd
</a>
will not change.
</p>
<p>
Previous dated (and unchanging) versions of this schema
document are at:
</p>
<ul>
<li><a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a></li>
<li><a href="http://www.w3.org/2007/08/xml.xsd">
http://www.w3.org/2007/08/xml.xsd</a></li>
<li><a href="http://www.w3.org/2004/10/xml.xsd">
http://www.w3.org/2004/10/xml.xsd</a></li>
<li><a href="http://www.w3.org/2001/03/xml.xsd">
http://www.w3.org/2001/03/xml.xsd</a></li>
</ul>
</div>
</div>
</xs:documentation>
</xs:annotation>
</xs:schema>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 825 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 827 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 484 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 B

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

+15 -9
View File
@@ -14,6 +14,11 @@ android {
storePassword "xmbox123"
keyAlias "xmbox"
keyPassword "xmbox123"
// 同时启用v1、v2、v3、v4签名以确保最佳兼容性
enableV1Signing true
enableV2Signing true
enableV3Signing true
enableV4Signing true
}
}
@@ -22,8 +27,8 @@ android {
minSdk 24
//noinspection ExpiredTargetSdkVersion
targetSdk 28
versionCode 305
versionName "3.0.5"
versionCode 309
versionName "3.0.9"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString(), "eventBusIndex": "com.fongmi.android.tv.event.EventIndex"]
@@ -108,7 +113,7 @@ dependencies {
implementation project(':catvod')
// implementation project(':chaquo') // 移除Python支持减少8-10MB体积
implementation project(':quickjs')
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.media:media:1.7.0'
implementation 'androidx.media3:media3-common:' + media3Version
implementation 'androidx.media3:media3-container:' + media3Version
@@ -125,7 +130,7 @@ dependencies {
implementation 'androidx.media3:media3-exoplayer-smoothstreaming:' + media3Version
implementation 'androidx.media3:media3-extractor:' + media3Version
implementation 'androidx.media3:media3-ui:' + media3Version
implementation 'androidx.room:room-runtime:2.7.2'
implementation 'androidx.room:room-runtime:2.6.1'
implementation 'cat.ereza:customactivityoncrash:2.4.0'
implementation 'io.github.anilbeesetti:nextlib-media3ext:1.8.0-0.9.0'
implementation 'com.github.bassaer:materialdesigncolors:1.0.0'
@@ -136,11 +141,11 @@ dependencies {
implementation 'com.github.jahirfiquitiva:TextDrawable:1.0.3'
implementation 'com.github.thegrizzlylabs:sardine-android:0.9'
implementation 'com.github.teamnewpipe:NewPipeExtractor:v0.24.8'
implementation 'com.google.android.material:material:1.12.0'
implementation 'com.google.android.material:material:1.11.0'
implementation 'com.google.zxing:core:3.5.3'
implementation 'com.guolindev.permissionx:permissionx:1.8.1'
implementation 'com.hierynomus:smbj:0.14.0'
implementation 'io.antmedia:rtmp-client:3.2.0'
implementation 'com.guolindev.permissionx:permissionx:1.7.1'
implementation 'com.hierynomus:smbj:0.13.0'
implementation 'io.antmedia:rtmp-client:3.1.0'
implementation 'javax.servlet:javax.servlet-api:3.1.0'
implementation 'org.aomedia.avif.android:avif:1.1.1.14d8e3c4'
implementation 'org.eclipse.jetty:jetty-client:8.1.21.v20160908'
@@ -157,9 +162,10 @@ dependencies {
mobileImplementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
mobileImplementation 'com.google.android.flexbox:flexbox:3.0.0'
mobileImplementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false }
annotationProcessor 'androidx.room:room-compiler:2.7.2'
annotationProcessor 'androidx.room:room-compiler:2.6.1'
// annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.3.1'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.5'
implementation 'io.noties.markwon:core:4.6.2'
implementation 'com.airbnb.android:lottie:5.2.0'
}
@@ -1,11 +1,14 @@
package com.fongmi.android.tv;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import androidx.appcompat.app.AlertDialog;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.databinding.DialogUpdateBinding;
import com.fongmi.android.tv.utils.Download;
import com.fongmi.android.tv.utils.FileUtil;
@@ -13,6 +16,7 @@ import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.ResUtil;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Github;
import com.github.catvod.utils.Logger;
import com.github.catvod.utils.Path;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -27,9 +31,10 @@ public class Updater implements Download.Callback {
private final Download download;
private AlertDialog dialog;
private boolean dev;
private boolean forceCheck; // 是否为手动检查
private File getFile() {
return Path.cache("update.apk");
return Path.root("Download", "XMBOX-update.apk");
}
private String getJson() {
@@ -37,6 +42,26 @@ public class Updater implements Download.Callback {
}
private String getApk() {
// 使用JSON中指定的具体下载路径
try {
String response = OkHttp.string(getJson());
JSONObject object = new JSONObject(response);
JSONObject downloads = object.optJSONObject("downloads");
if (downloads != null) {
String abi = BuildConfig.FLAVOR_abi;
String downloadPath = downloads.optString(abi);
if (!downloadPath.isEmpty()) {
// 直接构建完整URL,不通过Github.getApk()避免重复添加路径
String baseUrl = Github.useCnMirror() ?
"https://gitee.com/ochenoktochen/XMBOX-Release/raw/main" :
"https://raw.githubusercontent.com/Tosencen/XMBOX-Release/main";
return baseUrl + "/apk/" + (dev ? "dev" : "release") + "/" + downloadPath;
}
}
} catch (Exception e) {
Logger.e("Failed to get download path from JSON: " + e.getMessage());
}
// 回退到原来的方式
return Github.getApk(dev, BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_abi);
}
@@ -46,11 +71,13 @@ public class Updater implements Download.Callback {
public Updater() {
this.download = Download.create(getApk(), getFile(), this);
this.forceCheck = false;
}
public Updater force() {
Notify.show(R.string.update_check);
Setting.putUpdate(true);
this.forceCheck = true; // 标记为手动检查
return this;
}
@@ -79,13 +106,82 @@ public class Updater implements Download.Callback {
private void doInBackground(Activity activity) {
try {
JSONObject object = new JSONObject(OkHttp.string(getJson()));
String name = object.optString("name");
String desc = object.optString("desc");
int code = object.optInt("code");
if (need(code, name)) App.post(() -> show(activity, name, desc));
// 直接使用GitHub Releases API检测最新版本
String releasesUrl = "https://api.github.com/repos/Tosencen/XMBOX/releases/latest";
String response = OkHttp.string(releasesUrl);
// 检查响应是否包含错误信息
if (response.contains("rate limit exceeded")) {
if (forceCheck) {
App.post(() -> Notify.show("检查更新失败:API请求过于频繁,请稍后重试"));
}
return;
}
if (response.contains("Not Found") || response.contains("404")) {
if (forceCheck) {
App.post(() -> Notify.show("检查更新失败:更新服务暂时不可用"));
}
return;
}
JSONObject release = new JSONObject(response);
String tagName = release.optString("tag_name");
String body = release.optString("body");
// 提取版本号(去掉v前缀)
String version = tagName.startsWith("v") ? tagName.substring(1) : tagName;
if (needUpdate(version)) {
App.post(() -> show(activity, version, body));
} else {
if (forceCheck) {
App.post(() -> Notify.show("已是最新版本 " + version));
}
}
} catch (Exception e) {
e.printStackTrace();
if (forceCheck) {
App.post(() -> {
String errorMsg = "检查更新失败";
if (e.getMessage() != null && e.getMessage().contains("rate limit")) {
errorMsg = "检查更新失败:请求过于频繁,请稍后重试";
} else if (e.getMessage() != null && e.getMessage().contains("Not Found")) {
errorMsg = "检查更新失败:更新服务暂时不可用";
} else {
errorMsg = "检查更新失败,请稍后重试";
}
Notify.show(errorMsg);
});
}
}
}
private boolean needUpdate(String remoteVersion) {
if (!Setting.getUpdate()) return false;
try {
// 简单的版本号比较,假设版本格式为 x.y.z
String[] remoteParts = remoteVersion.split("\\.");
String[] localParts = BuildConfig.VERSION_NAME.split("\\.");
// 确保两个版本号都有足够的段
int maxLength = Math.max(remoteParts.length, localParts.length);
for (int i = 0; i < maxLength; i++) {
int remotePart = i < remoteParts.length ? Integer.parseInt(remoteParts[i]) : 0;
int localPart = i < localParts.length ? Integer.parseInt(localParts[i]) : 0;
if (remotePart > localPart) {
return true;
} else if (remotePart < localPart) {
return false;
}
}
return false; // 版本相同
} catch (Exception e) {
Logger.e("Updater: Version comparison error: " + e.getMessage());
return false;
}
}
@@ -109,8 +205,31 @@ public class Updater implements Download.Callback {
}
private void confirm(View view) {
binding.confirm.setEnabled(false);
download.start();
// 跳转到GitHub Releases页面而不是直接下载
try {
String url = "https://github.com/Tosencen/XMBOX/releases/tag/v3.0.8";
Logger.d("Updater: Attempting to open URL: " + url);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 检查是否有应用可以处理这个Intent
if (intent.resolveActivity(App.get().getPackageManager()) != null) {
App.get().startActivity(intent);
Logger.d("Updater: Successfully started browser intent");
dismiss();
} else {
Logger.e("Updater: No app can handle the URL");
Notify.show("没有找到可以打开链接的应用,请手动访问GitHub下载");
dismiss();
}
} catch (Exception e) {
Logger.e("Updater: Failed to open GitHub releases page: " + e.getMessage());
e.printStackTrace();
Notify.show("无法打开更新页面,请手动访问GitHub下载");
dismiss();
}
}
private void dismiss() {
@@ -99,8 +99,17 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
mBinding.dohText.setText(getDohList()[getDohIndex()]);
mBinding.proxyText.setText(getProxy(Setting.getProxy()));
mBinding.incognitoText.setText(getSwitch(Setting.isIncognito()));
mBinding.liveTabVisibleText.setText(getSwitch(Setting.isLiveTabVisible()));
mBinding.sizeText.setText((size = ResUtil.getStringArray(R.array.select_size))[Setting.getSize()]);
mBinding.qualityText.setText((quality = ResUtil.getStringArray(R.array.select_quality))[Setting.getQuality()]);
setLiveSettingsVisibility();
}
private void setLiveSettingsVisibility() {
boolean isLiveTabVisible = !Setting.isLiveTabVisible(); // 注意:这里取反,因为开关是"隐藏直播"
mBinding.live.setVisibility(isLiveTabVisible ? View.VISIBLE : View.GONE);
mBinding.liveHome.setVisibility(isLiveTabVisible ? View.VISIBLE : View.GONE);
mBinding.liveHistory.setVisibility(isLiveTabVisible ? View.VISIBLE : View.GONE);
}
private void setCacheText() {
@@ -134,6 +143,7 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
mBinding.wallDefault.setOnClickListener(this::setWallDefault);
mBinding.wallRefresh.setOnClickListener(this::setWallRefresh);
mBinding.incognito.setOnClickListener(this::setIncognito);
mBinding.liveTabVisible.setOnClickListener(this::setLiveTabVisible);
mBinding.quality.setOnClickListener(this::setQuality);
mBinding.size.setOnClickListener(this::setSize);
mBinding.doh.setOnClickListener(this::setDoh);
@@ -304,6 +314,15 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
mBinding.incognitoText.setText(getSwitch(Setting.isIncognito()));
}
private void setLiveTabVisible(View view) {
Setting.putLiveTabVisible(!Setting.isLiveTabVisible());
mBinding.liveTabVisibleText.setText(getSwitch(Setting.isLiveTabVisible()));
// 发送刷新事件,通知主界面更新导航栏
RefreshEvent.config();
// 更新直播设置项的可见性
setLiveSettingsVisibility();
}
private void setQuality(View view) {
int index = Setting.getQuality();
Setting.putQuality(index = index == quality.length - 1 ? 0 : ++index);
@@ -98,8 +98,8 @@ public class SiteDialog implements SiteAdapter.OnClickListener {
if (!binding.mode.hasFocus()) {
binding.recycler.post(() -> {
binding.recycler.scrollToPosition(VodConfig.getHomeIndex());
// 清除焦点,避免滚动后自动获得焦点显示黄色背景
binding.recycler.post(() -> binding.recycler.clearFocus());
// 请求焦点,确保选中项保持高亮状态
binding.recycler.post(() -> binding.recycler.requestFocus());
});
}
}
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/black" android:state_focused="true" />
<item android:color="@color/black" android:state_activated="true" />
<item android:color="@color/black" android:state_selected="true" />
<item android:color="@color/black" android:state_pressed="true" />
<item android:color="@color/white" />
</selector>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/primary" android:state_activated="true" />
<item android:color="@color/white" />
</selector>
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_focused="true" android:state_selected="true" />
<item android:color="@color/green_400" android:state_selected="true" />
<item android:color="@color/primary" android:state_selected="true" />
<item android:color="@color/white" />
</selector>
@@ -2,6 +2,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/green_400" />
<solid android:color="@color/primary" />
</shape>
@@ -4,7 +4,7 @@
<solid android:color="@color/black_20" />
<corners android:radius="4dp" />
<corners android:radius="12dp" />
<padding
android:bottom="8dp"
@@ -2,7 +2,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/black_60" />
<solid android:color="@color/primary" />
<corners android:radius="4dp" />
@@ -265,6 +265,36 @@
</LinearLayout>
<LinearLayout
android:id="@+id/liveTabVisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:nextFocusDown="@id/quality"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_live_tab_visible"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/liveTabVisibleText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end"
android:textColor="@color/white"
android:textSize="18sp"
tools:text="On" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -12,6 +12,6 @@
android:nextFocusUp="@id/flag"
android:nextFocusDown="@id/array"
android:singleLine="true"
android:textColor="@color/text"
android:textColor="@color/episode_text"
android:textSize="16sp"
tools:text="20" />
@@ -24,7 +24,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:singleLine="true"
android:textColor="@color/green_a_400"
android:textColor="@color/primary"
android:textSize="14sp"
tools:text="泥巴"
tools:visibility="visible" />
@@ -19,6 +19,7 @@
android:singleLine="true"
android:textColor="@color/button_text"
android:textSize="18sp"
android:duplicateParentState="true"
tools:text="泥巴" />
<com.google.android.material.checkbox.MaterialCheckBox
@@ -14,8 +14,11 @@
android:valueFrom="1"
android:valueTo="10"
app:thumbColor="@color/primary"
app:tickVisible="false"
app:thumbRadius="10dp"
app:tickVisible="true"
app:tickColor="@color/black_50"
app:trackColorActive="@color/primary"
app:trackColorInactive="@color/white_30" />
app:trackColorInactive="@color/white_20"
app:trackHeight="4dp" />
</FrameLayout>
+5 -2
View File
@@ -14,8 +14,11 @@
android:valueFrom="2"
android:valueTo="5"
app:thumbColor="@color/primary"
app:tickVisible="false"
app:thumbRadius="10dp"
app:tickVisible="true"
app:tickColor="@color/black_50"
app:trackColorActive="@color/primary"
app:trackColorInactive="@color/white_30" />
app:trackColorInactive="@color/white_20"
app:trackHeight="4dp" />
</FrameLayout>
@@ -29,6 +29,8 @@
android:nextFocusUp="@id/next"
android:nextFocusDown="@id/timeBar"
app:bar_height="2dp"
app:scrubber_enabled_size="12dp"
app:scrubber_disabled_size="12dp"
app:played_color="#FFEB3B"
app:scrubber_color="#FFEB3B"
app:buffered_color="#80FFEB3B"
+1
View File
@@ -10,6 +10,7 @@
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorAccent">@color/accent</item>
<item name="colorControlHighlight">@color/primary</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@null</item>
<item name="android:windowDisablePreview">true</item>
File diff suppressed because one or more lines are too long
@@ -126,7 +126,6 @@ public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
Notify.createChannel();
Logger.addLogAdapter(getLogAdapter());
OkHttp.get().setProxy(Setting.getProxy());
OkHttp.get().setDoh(Doh.objectFrom(Setting.getDoh()));
@@ -201,6 +201,14 @@ public class Setting {
Prefers.put("update", update);
}
public static boolean getAutoUpdateCheck() {
return Prefers.getBoolean("auto_update_check", false);
}
public static void putAutoUpdateCheck(boolean autoUpdateCheck) {
Prefers.put("auto_update_check", autoUpdateCheck);
}
public static boolean getUseCnMirror() {
return Prefers.getBoolean("use_cn_mirror", false);
}
@@ -308,4 +316,20 @@ public class Setting {
public static boolean hasCaption() {
return new Intent(Settings.ACTION_CAPTIONING_SETTINGS).resolveActivity(App.get().getPackageManager()) != null;
}
public static boolean isPrivacyAgreed() {
return Prefers.getBoolean("privacy_agreed_v1", false);
}
public static void setPrivacyAgreed(boolean agreed) {
Prefers.put("privacy_agreed_v1", agreed);
}
public static boolean isLiveTabVisible() {
return Prefers.getBoolean("live_tab_visible", true);
}
public static void putLiveTabVisible(boolean visible) {
Prefers.put("live_tab_visible", visible);
}
}
@@ -40,6 +40,13 @@ public class LiveConfig {
private boolean sync;
private Live home;
private LiveConfig() {
// 在构造函数中初始化列表,防止空指针异常
this.ads = new ArrayList<>();
this.rules = new ArrayList<>();
this.lives = new ArrayList<>();
}
private static class Loader {
static volatile LiveConfig INSTANCE = new LiveConfig();
}
@@ -97,9 +104,9 @@ public class LiveConfig {
public LiveConfig clear() {
this.home = null;
this.ads.clear();
this.rules.clear();
this.lives.clear();
if (this.ads != null) this.ads.clear();
if (this.rules != null) this.rules.clear();
if (this.lives != null) this.lives.clear();
return this;
}
@@ -39,6 +39,16 @@ public class VodConfig {
private Site home;
private volatile boolean isLoading = false; // 添加加载状态标记
private VodConfig() {
// 在构造函数中初始化列表防止空指针异常
this.ads = new ArrayList<>();
this.doh = new ArrayList<>();
this.rules = new ArrayList<>();
this.sites = new ArrayList<>();
this.flags = new ArrayList<>();
this.parses = new ArrayList<>();
}
private static class Loader {
static volatile VodConfig INSTANCE = new VodConfig();
}
@@ -123,12 +133,12 @@ public class VodConfig {
this.wall = null;
this.home = null;
this.parse = null;
this.ads.clear();
this.doh.clear();
this.rules.clear();
this.sites.clear();
this.flags.clear();
this.parses.clear();
if (this.ads != null) this.ads.clear();
if (this.doh != null) this.doh.clear();
if (this.rules != null) this.rules.clear();
if (this.sites != null) this.sites.clear();
if (this.flags != null) this.flags.clear();
if (this.parses != null) this.parses.clear();
this.loadLive = true;
BaseLoader.get().clear();
return this;
@@ -17,7 +17,7 @@ public abstract class ConfigDao extends BaseDao<Config> {
@Query("SELECT * FROM Config WHERE type = :type ORDER BY time DESC")
public abstract List<Config> findByType(int type);
@SuppressWarnings(RoomWarnings.QUERY_MISMATCH)
@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
@Query("SELECT id, name, url, type, time FROM Config WHERE type = :type ORDER BY time DESC")
public abstract List<Config> findUrlByType(int type);
@@ -2,7 +2,9 @@ package com.fongmi.android.tv.ui.custom;
import android.content.Context;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.widget.FrameLayout;
import android.widget.TextView;
@@ -33,6 +35,7 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen
private long currentPosition;
private long currentBuffered;
private boolean scrubbing;
private boolean isPressed;
public CustomSeekView(Context context) {
this(context, null);
@@ -55,11 +58,93 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen
timeBar = findViewById(R.id.timeBar);
timeBar.addListener(this);
refresh = this::refresh;
// 设置触摸事件监听器实现动态尺寸调整
timeBar.setOnTouchListener((v, event) -> {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (!isPressed) {
isPressed = true;
// 按下时滑杆4dp圆球16dp
setTimeBarSize(4, 16);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if (isPressed) {
isPressed = false;
// 松开时滑杆2dp圆球12dp
setTimeBarSize(2, 12);
}
break;
}
return false; // 不拦截事件让DefaultTimeBar正常处理
});
}
public void setListener(Players player) {
this.player = player;
}
public void setPosition(long position) {
timeBar.setPosition(position);
}
public void setDuration(long duration) {
timeBar.setDuration(duration);
}
/**
* 动态设置进度条高度和拖拽手柄大小
* @param barHeightDp 滑杆高度值dp
* @param scrubberSizeDp 拖拽手柄大小dp
*/
private void setTimeBarSize(int barHeightDp, int scrubberSizeDp) {
// 设置滑杆高度
int barHeightPx = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
barHeightDp,
getContext().getResources().getDisplayMetrics()
);
// 设置拖拽手柄大小
int scrubberSizePx = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
scrubberSizeDp,
getContext().getResources().getDisplayMetrics()
);
// 通过反射设置DefaultTimeBar的内部属性
try {
// 设置滑杆高度
java.lang.reflect.Field barHeightField = timeBar.getClass().getDeclaredField("barHeight");
barHeightField.setAccessible(true);
barHeightField.setInt(timeBar, barHeightPx);
// 设置拖拽手柄大小 - 尝试多个可能的字段名
String[] scrubberFields = {"scrubberSize", "scrubberEnabledSize", "scrubberDisabledSize"};
for (String fieldName : scrubberFields) {
try {
java.lang.reflect.Field scrubberField = timeBar.getClass().getDeclaredField(fieldName);
scrubberField.setAccessible(true);
scrubberField.setInt(timeBar, scrubberSizePx);
break; // 成功设置后退出循环
} catch (NoSuchFieldException e) {
// 继续尝试下一个字段名
}
}
// 刷新视图
timeBar.requestLayout();
timeBar.invalidate();
} catch (Exception e) {
// 如果反射失败使用备用方案
e.printStackTrace();
// 备用方案重新设置布局参数
timeBar.getLayoutParams().height = barHeightPx;
timeBar.requestLayout();
}
}
private void start() {
removeCallbacks(refresh);
@@ -102,7 +187,7 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen
}
}
private void setKeyTimeIncrement(long duration) {
public void setKeyTimeIncrement(long duration) {
if (duration > TimeUnit.HOURS.toMillis(3)) {
timeBar.setKeyTimeIncrement(TimeUnit.MINUTES.toMillis(5));
} else if (duration > TimeUnit.MINUTES.toMillis(30)) {
@@ -124,8 +209,22 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen
}
private void seekToTimeBarPosition(long positionMs) {
// 先设置播放位置
player.seekTo(positionMs);
refresh();
// 延迟刷新进度条确保播放器已经处理了跳转操作
removeCallbacks(refresh);
postDelayed(() -> {
// 只有在非拖动状态下才刷新进度条位置
if (!scrubbing) {
refresh();
// 确保进度条位置与实际播放位置一致
long actualPosition = player.getPosition();
if (Math.abs(actualPosition - positionMs) > 100) { // 如果差异超过100ms再次调整
timeBar.setPosition(actualPosition);
positionView.setText(player.stringToTime(actualPosition));
}
}
}, 50); // 延迟50ms刷新
}
@Override
@@ -148,6 +247,17 @@ public class CustomSeekView extends FrameLayout implements TimeBar.OnScrubListen
@Override
public void onScrubStop(@NonNull TimeBar timeBar, long position, boolean canceled) {
scrubbing = false;
if (!canceled) seekToTimeBarPosition(position);
if (!canceled) {
// 立即设置进度条位置到目标位置避免圆球跳回原始位置
timeBar.setPosition(position);
positionView.setText(player.stringToTime(position));
// 调整播放位置
seekToTimeBarPosition(position);
// 确保播放状态正确
if (!player.isPlaying()) {
player.play();
}
}
}
}
@@ -9,6 +9,7 @@ import android.widget.RelativeLayout;
import com.fongmi.android.tv.databinding.ViewEmptyBinding;
import com.fongmi.android.tv.databinding.ViewProgressBinding;
import com.airbnb.lottie.LottieAnimationView;
import java.util.ArrayList;
import java.util.List;
@@ -47,7 +48,8 @@ public class ProgressLayout extends RelativeLayout {
}
private void initView() {
mEmptyView = ViewEmptyBinding.inflate(LayoutInflater.from(getContext())).getRoot();
// 使用新的Lottie动画空状态布局
mEmptyView = LayoutInflater.from(getContext()).inflate(com.fongmi.android.tv.R.layout.view_empty_lottie, null);
mEmptyView.setTag(TAG_PROGRESS);
mEmptyView.setVisibility(GONE);
mProgressView = ViewProgressBinding.inflate(LayoutInflater.from(getContext())).getRoot();
@@ -103,21 +105,46 @@ public class ProgressLayout extends RelativeLayout {
case CONTENT:
mEmptyView.setVisibility(GONE);
mProgressView.setVisibility(GONE);
pauseLottieAnimation();
setContentVisibility(true);
break;
case PROGRESS:
mEmptyView.setVisibility(GONE);
mProgressView.setVisibility(VISIBLE);
pauseLottieAnimation();
setContentVisibility(false);
break;
case EMPTY:
mEmptyView.setVisibility(VISIBLE);
mProgressView.setVisibility(GONE);
playLottieAnimation();
setContentVisibility(false);
break;
}
}
private void playLottieAnimation() {
try {
LottieAnimationView lottieView = mEmptyView.findViewById(com.fongmi.android.tv.R.id.lottieAnimation);
if (lottieView != null) {
lottieView.playAnimation();
}
} catch (Exception e) {
// 忽略错误保持兼容性
}
}
private void pauseLottieAnimation() {
try {
LottieAnimationView lottieView = mEmptyView.findViewById(com.fongmi.android.tv.R.id.lottieAnimation);
if (lottieView != null) {
lottieView.pauseAnimation();
}
} catch (Exception e) {
// 忽略错误保持兼容性
}
}
private void setContentVisibility(boolean visible) {
for (View view : mContentViews) {
if (visible) showView(view);
@@ -2,11 +2,13 @@ package com.fongmi.android.tv.utils;
import com.fongmi.android.tv.App;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Logger;
import com.github.catvod.utils.Path;
import com.google.common.net.HttpHeaders;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
@@ -47,14 +49,22 @@ public class Download {
private void doInBackground() {
try (Response res = OkHttp.newCall(url, url).execute()) {
Path.create(file);
download(res.body().byteStream(), Double.parseDouble(res.header(HttpHeaders.CONTENT_LENGTH, "1")));
long expectedLength = Long.parseLong(res.header(HttpHeaders.CONTENT_LENGTH, "0"));
download(res.body().byteStream(), expectedLength);
// 验证下载的文件
if (!verifyDownloadedFile(file, expectedLength)) {
App.post(() -> {if (callback != null) callback.error("下载的文件可能已损坏,请重试");});
return;
}
App.post(() -> {if (callback != null) callback.success(file);});
} catch (Exception e) {
App.post(() -> {if (callback != null) callback.error(e.getMessage());});
}
}
private void download(InputStream is, double length) throws Exception {
private void download(InputStream is, long length) throws Exception {
try (BufferedInputStream input = new BufferedInputStream(is); FileOutputStream os = new FileOutputStream(file)) {
byte[] buffer = new byte[4096];
int readBytes;
@@ -68,6 +78,45 @@ public class Download {
}
}
private boolean verifyDownloadedFile(File file, long expectedLength) {
try {
// 检查文件大小
if (file.length() != expectedLength) {
Logger.e("File size mismatch: expected " + expectedLength + ", actual " + file.length());
return false;
}
// 检查APK文件头 (ZIP文件头)
if (file.length() < 4) return false;
try (FileInputStream fis = new FileInputStream(file)) {
byte[] header = new byte[4];
fis.read(header);
// ZIP文件头应该是 0x504B0304 (PK..)
if (header[0] != 0x50 || header[1] != 0x4B || header[2] != 0x03 || header[3] != 0x04) {
Logger.e("Invalid APK file header");
return false;
}
// 额外验证检查APK文件是否完整
// 尝试读取ZIP文件结构
fis.getChannel().position(0);
byte[] buffer = new byte[1024];
int bytesRead = fis.read(buffer);
if (bytesRead < 4) {
Logger.e("APK file too small or corrupted");
return false;
}
}
Logger.d("APK file verification passed: " + file.getName() + " (" + file.length() + " bytes)");
return true;
} catch (Exception e) {
Logger.e("File verification failed: " + e.getMessage());
return false;
}
}
public interface Callback {
void progress(int progress);
@@ -11,6 +11,7 @@ import androidx.core.content.FileProvider;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.impl.Callback;
import com.github.catvod.utils.Logger;
import com.github.catvod.utils.Path;
import java.io.BufferedInputStream;
@@ -34,11 +35,35 @@ public class FileUtil {
}
public static void openFile(File file) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(getShareUri(file), FileUtil.getMimeType(file.getName()));
App.get().startActivity(intent);
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// 对于APK文件使用特定的MIME类型
String mimeType = file.getName().toLowerCase().endsWith(".apk") ?
"application/vnd.android.package-archive" : getMimeType(file.getName());
intent.setDataAndType(getShareUri(file), mimeType);
// 添加额外的安装权限检查
if (file.getName().toLowerCase().endsWith(".apk")) {
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
App.get().startActivity(intent);
} catch (Exception e) {
Logger.e("Failed to open file: " + e.getMessage());
// 如果失败尝试使用通用方式
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(getShareUri(file), "*/*");
App.get().startActivity(intent);
} catch (Exception ex) {
Logger.e("Fallback open file also failed: " + ex.getMessage());
}
}
}
public static void gzipCompress(File target) {
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M13,2L3,14h8l-1,8l10,-12h-8l1,-8z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3S9,9.66 9,8S10.34,5 12,5zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22c0.03,-1.99 4,-3.08 6,-3.08c1.99,0 5.97,1.09 6,3.08C16.71,17.92 14.5,19.2 12,19.2z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5 5,-2.24 5,-5 -2.24,-5 -5,-5zM15.19,14.85L13.2,12.86c.5,-1.19.25,-2.58 -0.73,-3.55 -1.17,-1.18 -3.01,-1.39 -4.39,-0.51l1.99,1.99c0.22,0.22 0.22,0.57 0,0.79l-0.79,0.79c-0.22,0.22 -0.57,0.22 -0.79,0L6.5,10.38c-0.88,1.37 -0.67,3.22 0.51,4.39 0.97,0.98 2.36,1.23 3.55,0.73l1.99,1.99c0.22,0.22 0.57,0.22 0.79,0l0.79,-0.79c0.22,-0.22 0.22,-0.57 0,-0.79z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,19c1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3s-3,1.34 -3,3S10.34,19 12,19zM12,17c-0.55,0 -1,-0.45 -1,-1s0.45,-1 1,-1s1,0.45 1,1S12.55,17 12,17zM17,9c0,-2.76 -2.24,-5 -5,-5S7,6.24 7,9c0,1.59 0.76,3 1.95,3.91C7.58,13.71 6.5,15.27 6.5,17c0,0.55 0.45,1 1,1s1,-0.45 1,-1c0,-1.65 1.35,-3 3,-3s3,1.35 3,3c0,0.55 0.45,1 1,1s1,-0.45 1,-1c0,-1.73 -1.08,-3.29 -2.45,-4.09C15.24,12 16,10.59 16,9zM12,12c-1.66,0 -3,-1.34 -3,-3s1.34,-3 3,-3s3,1.34 3,3S13.66,12 12,12z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M19,5v14L5,19L5,5h14m1.1,-2L3.9,3c-0.5,0 -0.9,0.4 -0.9,0.9v16.2c0,0.4 0.4,0.9 0.9,0.9h16.2c0.4,0 0.9,-0.5 0.9,-0.9L21,3.9c0,-0.5 -0.4,-0.9 -0.9,-0.9zM11,7h6v2h-6L11,7zM11,11h6v2h-6v-2zM11,15h6v2h-6zM7,7h2v2L7,9zM7,11h2v2L7,13zM7,15h2v2L7,17z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,3C8.69,3 6,5.69 6,9s2.69,6 6,6s6,-2.69 6,-6S15.31,3 12,3zM12,13c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4s4,1.79 4,4S14.21,13 12,13zM21,18h-2v2h-1.5v-2h-2v-1.5h2v-2h1.5v2h2V18zM11,18c0,-0.28 0.05,-0.54 0.12,-0.8c-0.87,-0.54 -1.89,-0.88 -3,-0.99C5.73,15.91 3,16.71 3,18.5V20h8.26C11.1,19.36 11,18.69 11,18z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M21,15h2v2h-2v-2zM21,11h2v2h-2v-2zM23,19h-2v2c1,0 2,-1 2,-2zM13,3h2v2h-2L13,3zM21,7h2v2h-2L21,7zM21,3v2h2c0,-1 -1,-2 -2,-2zM1,7h2v2L1,9L1,7zM17,3h2v2h-2L17,3zM17,19h2v2h-2v-2zM3,3C2,3 1,4 1,5h2L3,3zM9,3h2v2L9,5L9,3zM5,3h2v2L5,5L5,3zM1,11v8c0,1.1 0.9,2 2,2h12L15,11L1,11zM3,19l2.5,-3.21 1.79,2.15 2.5,-3.22L13,19L3,19z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M21,3H3C2,3 1,4 1,5v14c0,1.1 0.9,2 2,2h18c1,0 2,-1 2,-2V5c0,-1 -1,-2 -2,-2zM21,19H3V5h18v14zM14.5,11.5c0,0.83 -0.67,1.5 -1.5,1.5h-2v2h2v1h-3v-4c0,-0.83 0.67,-1.5 1.5,-1.5h2c0.83,0 1.5,0.67 1.5,1.5zM11.5,8.5H13v1h-2V7h2v1h-1.5zM16,13.5c0,0.83 -0.67,1.5 -1.5,1.5h-2v-2h2v-1h-2v-2h2c0.83,0 1.5,0.67 1.5,1.5v2z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M18.5,8C19.88,8 21,6.88 21,5.5C21,4.12 19.88,3 18.5,3C17.12,3 16,4.12 16,5.5C16,6.88 17.12,8 18.5,8zM5.5,8C6.88,8 8,6.88 8,5.5C8,4.12 6.88,3 5.5,3C4.12,3 3,4.12 3,5.5C3,6.88 4.12,8 5.5,8zM7.5,17H16.5C17.6,17 18.5,16.1 18.5,15V11.41C18.5,10.08 16.92,9.43 16,10.36C14.55,11.8 13.45,11.8 12,10.36C10.55,8.91 9.45,8.91 8,10.36C7.07,11.29 5.5,10.64 5.5,9.31V15C5.5,16.1 6.4,17 7.5,17z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M15,8v8H5V8h10m1,-2H4C3.45,6 3,6.45 3,7v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4V7c0,-0.55 -0.45,-1 -1,-1z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,16c-1.79,0 -3.23,-1.43 -3.23,-3.23 0,-0.36 0.06,-0.7 0.17,-1.02l4.08,4.08c-0.32,0.11 -0.66,0.17 -1.02,0.17zM12,8c1.79,0 3.23,1.43 3.23,3.23 0,0.36 -0.06,0.7 -0.17,1.02L10.98,8.17C11.3,8.06 11.64,8 12,8zM19.94,19.5L17.77,17.33C16.68,18.15 15.39,18.75 14,19.08v-2.11c0.63,-0.23 1.21,-0.54 1.73,-0.92l-1.4,-1.4c-0.64,0.51 -1.44,0.81 -2.33,0.81 -2.09,0 -3.77,-1.68 -3.77,-3.77 0,-0.89 0.31,-1.69 0.81,-2.33L7.65,8.97c-0.92,0.74 -1.73,1.61 -2.38,2.57C5.09,11.83 5,12.15 5,12.5s0.09,0.67 0.27,0.96c1.87,2.95 5.07,4.77 8.73,4.77 1.35,0 2.63,-0.22 3.83,-0.61l-0.39,-0.39 2.5,2.5c0.39,0.39 1.02,0.39 1.41,0 0.4,-0.39 0.4,-1.02 0,-1.41l-1.41,-1.41zM5.06,4.5l2.18,2.18c1.09,-0.82 2.37,-1.42 3.76,-1.76L11,7.03c-0.63,0.23 -1.21,0.54 -1.73,0.92l1.4,1.4c0.64,-0.51 1.44,-0.81 2.33,-0.81 2.09,0 3.77,1.68 3.77,3.77 0,0.89 -0.31,1.69 -0.81,2.33l1.4,1.4c0.92,-0.74 1.73,-1.61 2.38,-2.57 0.18,-0.29 0.27,-0.61 0.27,-0.96s-0.09,-0.67 -0.27,-0.96C18.87,8.6 15.67,6.78 12,6.78c-1.35,0 -2.63,0.22 -3.83,0.61L5.06,4.27c-0.39,-0.39 -1.02,-0.39 -1.41,0s-0.39,1.02 0,1.41l1.41,1.41z"/>
</vector>
@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:fitsSystemWindows="true"
android:orientation="vertical">
<!-- 标题栏 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/privacy_agreement_title"
android:textColor="@color/white"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/privacy_agreement_tip"
android:textColor="@color/white"
android:textSize="14sp"
android:alpha="0.8" />
</LinearLayout>
<!-- 协议内容滚动区域 -->
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingStart="24dp"
android:paddingEnd="24dp"
android:paddingBottom="16dp">
<TextView
android:id="@+id/contentText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/privacy_agreement_content"
android:textColor="@color/white"
android:textSize="14sp"
android:lineSpacingMultiplier="1.4"
android:padding="16dp"
android:background="@drawable/selector_item_round"
android:alpha="0.9" />
</ScrollView>
<!-- 按钮区域 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="8dp"
android:paddingBottom="24dp"
android:paddingStart="24dp"
android:paddingEnd="24dp">
<Button
android:id="@+id/disagreeButton"
android:layout_width="0dp"
android:layout_height="56dp"
android:layout_weight="1"
android:layout_marginEnd="12dp"
android:text="@string/privacy_agreement_disagree"
android:textColor="@color/white"
android:backgroundTint="@color/black_60"
android:textSize="13sp"
android:maxLines="2"
android:gravity="center" />
<Button
android:id="@+id/agreeButton"
android:layout_width="0dp"
android:layout_height="56dp"
android:layout_weight="1"
android:layout_marginStart="12dp"
android:text="@string/privacy_agreement_agree"
android:textColor="@color/black"
android:backgroundTint="@color/primary"
android:textSize="13sp"
android:maxLines="2"
android:gravity="center" />
</LinearLayout>
</LinearLayout>
+1 -1
View File
@@ -19,6 +19,6 @@
android:layout_marginTop="16dp"
android:text="@string/error_empty"
android:textColor="@color/white"
android:textSize="16sp" />
android:textSize="14sp" />
</LinearLayout>
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottieAnimation"
android:layout_width="180dp"
android:layout_height="180dp"
app:lottie_fileName="lottie_empty_1.json"
app:lottie_loop="true"
app:lottie_autoPlay="true" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/error_keep_empty"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottieAnimation"
android:layout_width="180dp"
android:layout_height="180dp"
app:lottie_fileName="lottie_empty_1.json"
app:lottie_loop="true"
app:lottie_autoPlay="true" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/error_empty"
android:textColor="@color/white"
android:textSize="14sp"
android:alpha="0.8" />
</LinearLayout>
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottieAnimation"
android:layout_width="180dp"
android:layout_height="180dp"
app:lottie_fileName="lottie_empty_1.json"
app:lottie_loop="true"
app:lottie_autoPlay="true" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/error_search_empty"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
+2 -1
View File
@@ -73,6 +73,7 @@
<string name="setting_subscription">订阅管理</string>
<string name="setting_player">播放设置</string>
<string name="setting_incognito">无痕模式</string>
<string name="setting_live_tab_visible">隐藏直播</string>
<string name="setting_quality">图片品质</string>
<string name="setting_size">图片尺寸</string>
<string name="setting_doh">DoH</string>
@@ -125,7 +126,7 @@
<string name="dialog_edit">修改</string>
<string name="dialog_positive">确定</string>
<string name="dialog_negative">取消</string>
<string name="dialog_paste">从剪贴板粘贴</string>
<string name="dialog_paste">点我粘贴</string>
<string name="dialog_config_hint">请输入接口…</string>
<string name="dialog_config_name">请输入名称…</string>
<string name="dialog_config_url">请输入地址…</string>
+1 -1
View File
@@ -141,7 +141,7 @@
<string name="error_play_flag">暫無線路資料</string>
<string name="error_play_timeout">連線逾時</string>
<string name="error_detail">暫無播放資料</string>
<string name="error_empty">找不到資料</string>
<string name="error_empty">這裡撒子內容都沒得~</string>
<string name="error_cast_file">不支持的檔案格式</string>
<string name="error_device_limit">設備授權數已達上限</string>
<string name="error_live_empty">該訂閱無直播內容</string>
+13 -3
View File
@@ -78,6 +78,7 @@
<string name="setting_data">Data Management</string>
<string name="setting_player">Player setting</string>
<string name="setting_incognito">Incognito mode</string>
<string name="setting_live_tab_visible">Hide Live Tab</string>
<string name="setting_quality">Image quality</string>
<string name="setting_size">Image size</string>
<string name="setting_doh">DoH</string>
@@ -91,7 +92,7 @@
<string name="setting_choose">Choose</string>
<string name="setting_off">Off</string>
<string name="setting_on">On</string>
<string name="app_version">v3.0.3</string>
<string name="app_version">v3.0.6</string>
<string name="about_github">View on GitHub</string>
<!-- Backup & Restore -->
@@ -126,7 +127,7 @@
<string name="dialog_edit">Edit</string>
<string name="dialog_positive">OK</string>
<string name="dialog_negative">Cancel</string>
<string name="dialog_paste">Paste from clipboard</string>
<string name="dialog_paste">Click to paste</string>
<string name="dialog_config_hint">Please enter the config…</string>
<string name="dialog_config_name">Please enter the name…</string>
<string name="dialog_config_url">Please enter the url…</string>
@@ -151,7 +152,9 @@
<string name="error_device_limit">Device authorization limit reached</string>
<string name="error_live_empty">This subscription has no live content</string>
<string name="error_no_live">Current source has no live content</string>
<string name="error_empty">Not found</string>
<string name="error_empty">这里撒子内容都没得~</string>
<string name="error_keep_empty">老表~没得收藏哈</string>
<string name="error_search_empty">搜索无结果,换个关键词试试</string>
<string name="error_detail">No play data</string>
<string name="error_play_flag">No flag data</string>
<string name="error_play_code">Error code: <xliff:g name="name">%s</xliff:g></string>
@@ -237,6 +240,13 @@
<string name="source_hint">No video sources added yet\nClick the button below to add</string>
<string name="add_source">Add Source</string>
<!-- 隐私协议相关 -->
<string name="privacy_agreement_title">XMBOX软件许可协议</string>
<string name="privacy_agreement_tip">请仔细阅读以下协议条款</string>
<string name="privacy_agreement_agree">我已阅读并同意</string>
<string name="privacy_agreement_disagree">不同意并退出</string>
<string name="privacy_agreement_content">XMBOX软件许可协议:\n\n- 以下是对[GPL-3.0](LICENSE.md)开源协议的补充,如有冲突,以以下协议为准。\n- 词语约定: 本协议中的"本软件"指"XMBOX软件""用户"指签署本协议的使用者,"版权数据"指包括但不限于视频、图像、音频、名字等在内的他人拥有所属版权的数据。\n\n1. 本软件仅为技术性多媒体播放器外壳("空壳播放器"),核心功能限于基础媒体文件解析与播放。\n\n2. 本软件自身不包含、不预装、不内置、不集成、不主动推荐、不直接或间接提供任何音视频、直播、图文等媒体资源内容。软件播放的任何资源均非由本软件或其开发者提供。\n\n3. 用户通过本软件播放的任何内容均完全来源于用户自行配置、输入、添加、获取或选择的第三方来源(如网络地址、本地文件、用户安装的插件/扩展/配置源等)。本软件仅作为访问用户自行指定内容的技术工具。\n\n4. 本软件无法控制、筛选、审查或保证用户访问的任何第三方内容的合法性、版权状态、准确性、安全性或适宜性。用户对其播放的内容负全部责任。\n\n5. 关于用户责任与风险承担:\n • 用户必须确保其通过本软件配置、访问或播放的所有内容均已获相关权利人合法授权,或属于法律允许的自由使用范畴。\n • 用户理解并同意,使用本软件访问第三方资源可能涉及侵犯版权、传播非法信息、隐私泄露、网络安全等风险。因用户使用本软件访问、播放或传播内容产生的一切法律责任、纠纷、损失及后果(包括法律诉讼、行政处罚、民事赔偿等),均由用户自行承担,与本软件及其开发者无涉。\n • 开发者不认可、不支持任何利用本软件规避技术保护措施(如DRM)的行为,此类行为导致的侵权责任由用户全权承担。\n\n6. 用户承诺并保证不利用本软件从事任何侵犯他人知识产权或其他合法权益的活动,或进行任何违反法律法规的行为。严禁使用本软件播放、传播盗版、色情、暴力、赌博、诈骗、危害国家安全、危害社会稳定等非法或侵权内容。\n\n7. 在任何情况下,本软件开发者均不就因用户使用或无法使用本软件、用户配置或访问的第三方资源、用户违反本协议或法律法规的行为导致的任何直接、间接、偶然、特殊、惩罚性或结果性损害(包括利润损失、数据丢失、业务中断、声誉损害等)承担任何责任(无论基于合同、侵权、严格责任或其他法律理论)。\n\n8. 本软件运行可能依赖第三方库、服务或技术。开发者不对这些第三方组件的可用性、准确性、功能或合法性负责。\n\n9. 用户理解并同意,使用本软件(包括下载、安装、运行)存在固有技术风险(如软件缺陷、兼容性问题、系统不稳定等),用户应自行承担此风险。\n\n10. 本软件仅用于对技术可行性的探索及研究,不接受任何商业(包括但不限于广告等)合作及捐赠。\n\n11. 本软件内使用的部分包括但不限于字体、图片等资源来源于互联网。如果出现侵权可联系开发者移除。\n\n12. 使用本软件的过程中可能会产生版权数据。对于这些版权数据,本软件不拥有它们的所有权。为了避免侵权,用户务必在 24 小时内 清除使用本项目的过程中所产生的版权数据。\n\n13. 本协议受中华人民共和国法律管辖并据其解释。若用户所在地法律强制规定特定责任条款,应以当地法律要求为准,但其他条款仍保持有效。任何由本协议或使用本软件引起的争议,应首先通过友好协商解决。\n\n14. 若你使用了本软件,即代表你接受本协议。\n\n15. 本协议更新后,继续使用视为接受新协议。</string>
<string name="source_hint_setting">Add Source</string>
<string name="source_hint_live">Add Live Source</string>
<string name="source_hint_wall">Add Wallpaper Source</string>
+7
View File
@@ -10,6 +10,13 @@
<application>
<activity
android:name=".ui.activity.PrivacyAgreementActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|uiMode|orientation"
android:exported="false"
android:screenOrientation="fullUser"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".ui.activity.HomeActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|uiMode|orientation"
@@ -2,6 +2,8 @@ package com.fongmi.android.tv;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
@@ -14,11 +16,10 @@ import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.ResUtil;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Github;
import com.github.catvod.utils.Logger;
import com.github.catvod.utils.Path;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.orhanobut.logger.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.File;
@@ -27,25 +28,45 @@ import java.util.Locale;
public class Updater implements Download.Callback {
private DialogUpdateBinding binding;
private Download download;
private final Download download;
private AlertDialog dialog;
private boolean dev;
private String downloadUrl;
private boolean forceCheck; // 是否为手动检查
private File getFile() {
return Path.cache("update.apk");
}
private String getApkName() {
return "mobile-" + BuildConfig.FLAVOR_abi + ".apk";
return Path.root("Download", "XMBOX-update.apk");
}
private String getJson() {
String url = Github.getReleaseApi();
boolean usingCnMirror = Github.useCnMirror();
Logger.d("Using CN Mirror: " + usingCnMirror);
Logger.d("Update check URL: " + url);
return url;
return Github.getJson(dev, BuildConfig.FLAVOR_mode);
}
private String getApk() {
// 使用JSON中指定的具体下载路径
try {
String response = OkHttp.string(getJson());
JSONObject object = new JSONObject(response);
JSONObject downloads = object.optJSONObject("downloads");
if (downloads != null) {
String abi = BuildConfig.FLAVOR_abi;
String downloadPath = downloads.optString(abi);
if (!downloadPath.isEmpty()) {
// 直接构建完整URL不通过Github.getApk()避免重复添加路径
String baseUrl = Github.useCnMirror() ?
"https://gitee.com/ochenoktochen/XMBOX-Release/raw/main" :
"https://raw.githubusercontent.com/Tosencen/XMBOX-Release/main";
String fullUrl = baseUrl + "/apk/" + (dev ? "dev" : "release") + "/" + downloadPath;
Logger.d("APK download URL: " + fullUrl);
return fullUrl;
}
}
} catch (Exception e) {
Logger.e("Failed to get download path from JSON: " + e.getMessage());
}
// 回退到原来的方式
String fallbackUrl = Github.getApk(dev, BuildConfig.FLAVOR_mode + "-" + BuildConfig.FLAVOR_abi);
Logger.d("APK fallback URL: " + fallbackUrl);
return fallbackUrl;
}
public static Updater create() {
@@ -53,12 +74,14 @@ public class Updater implements Download.Callback {
}
public Updater() {
this.download = Download.create("", getFile(), this);
this.download = Download.create(getApk(), getFile(), this);
this.forceCheck = false;
}
public Updater force() {
Notify.show(R.string.update_check);
Setting.putUpdate(true);
this.forceCheck = true; // 标记为手动检查
return this;
}
@@ -81,73 +104,91 @@ public class Updater implements Download.Callback {
App.execute(() -> doInBackground(activity));
}
private boolean need(String tagName) {
Logger.d("Current version: " + BuildConfig.VERSION_NAME);
Logger.d("Latest version: " + tagName);
if (tagName.startsWith("v")) tagName = tagName.substring(1);
// 版本比较逻辑
try {
String[] currentParts = BuildConfig.VERSION_NAME.split("\\.");
String[] remoteParts = tagName.split("\\.");
// 比较主版本号
for (int i = 0; i < Math.min(currentParts.length, remoteParts.length); i++) {
int current = Integer.parseInt(currentParts[i]);
int remote = Integer.parseInt(remoteParts[i]);
if (remote > current) {
return Setting.getUpdate(); // 远程版本高于当前版本需要更新
} else if (remote < current) {
return false; // 远程版本低于当前版本不需要更新
}
// 如果相等继续比较下一级版本号
}
// 如果前面的版本号都相等但远程版本有更多的版本号视为更新
if (remoteParts.length > currentParts.length) {
return Setting.getUpdate();
}
return false; // 版本相同或远程版本较低不需要更新
} catch (NumberFormatException e) {
// 如果版本号解析失败退回到简单字符串比较
Logger.e("Version parsing failed", e);
return Setting.getUpdate() && !tagName.equals(BuildConfig.VERSION_NAME);
}
private boolean need(int code, String name) {
return Setting.getUpdate() && (dev ? !name.equals(BuildConfig.VERSION_NAME) && code >= BuildConfig.VERSION_CODE : code > BuildConfig.VERSION_CODE);
}
private void doInBackground(Activity activity) {
Logger.d("Updater: Starting update check...");
try {
String jsonUrl = getJson();
Logger.d("Fetching update info from: " + jsonUrl);
String response = OkHttp.string(jsonUrl);
Logger.d("Update check response: " + response);
// 直接使用GitHub Releases API检测最新版本
String releasesUrl = "https://api.github.com/repos/Tosencen/XMBOX/releases/latest";
Logger.d("Updater: GitHub Releases API URL: " + releasesUrl);
String response = OkHttp.string(releasesUrl);
Logger.d("Updater: API response length: " + response.length());
// 检查响应是否包含错误信息
if (response.contains("rate limit exceeded")) {
Logger.e("Updater: Rate limit exceeded");
if (forceCheck) {
App.post(() -> Notify.show("检查更新失败:API请求过于频繁,请稍后重试"));
}
return;
}
if (response.contains("Not Found") || response.contains("404")) {
Logger.e("Updater: Release not found");
if (forceCheck) {
App.post(() -> Notify.show("检查更新失败:更新服务暂时不可用"));
}
return;
}
JSONObject release = new JSONObject(response);
String tagName = release.getString("tag_name");
String body = release.getString("body");
JSONArray assets = release.getJSONArray("assets");
String tagName = release.optString("tag_name");
String body = release.optString("body");
// Find the correct APK asset
String apkName = getApkName();
for (int i = 0; i < assets.length(); i++) {
JSONObject asset = assets.getJSONObject(i);
if (asset.getString("name").equals(apkName)) {
downloadUrl = asset.getString("browser_download_url");
break;
// 提取版本号去掉v前缀
String version = tagName.startsWith("v") ? tagName.substring(1) : tagName;
Logger.d("Updater: Remote version: " + version);
Logger.d("Updater: Local version: " + BuildConfig.VERSION_NAME);
// 比较版本号
if (needUpdate(version)) {
Logger.d("Updater: Update needed, showing dialog");
App.post(() -> show(activity, version, body));
} else {
Logger.d("Updater: No update needed");
if (forceCheck) {
App.post(() -> Notify.show("已是最新版本 " + version));
}
}
if (downloadUrl != null && need(tagName)) {
download = Download.create(downloadUrl, getFile(), this);
App.post(() -> show(activity, tagName, body));
} else {
Logger.d("No update needed or APK not found");
}
} catch (Exception e) {
Logger.e("Update check failed", e);
Logger.e("Updater: Exception during update check: " + e.getMessage());
e.printStackTrace();
if (forceCheck) {
App.post(() -> Notify.show("检查更新失败:网络连接异常"));
}
}
}
private boolean needUpdate(String remoteVersion) {
if (!Setting.getUpdate()) return false;
try {
// 简单的版本号比较假设版本格式为 x.y.z
String[] remoteParts = remoteVersion.split("\\.");
String[] localParts = BuildConfig.VERSION_NAME.split("\\.");
// 确保两个版本号都有足够的段
int maxLength = Math.max(remoteParts.length, localParts.length);
for (int i = 0; i < maxLength; i++) {
int remotePart = i < remoteParts.length ? Integer.parseInt(remoteParts[i]) : 0;
int localPart = i < localParts.length ? Integer.parseInt(localParts[i]) : 0;
if (remotePart > localPart) {
return true;
} else if (remotePart < localPart) {
return false;
}
}
return false; // 版本相同
} catch (Exception e) {
Logger.e("Updater: Version comparison error: " + e.getMessage());
return false;
}
}
@@ -170,8 +211,31 @@ public class Updater implements Download.Callback {
}
private void confirm(View view) {
view.setEnabled(false);
download.start();
// 跳转到GitHub Releases页面而不是直接下载
try {
String url = "https://github.com/Tosencen/XMBOX/releases/tag/v3.0.8";
Logger.d("Updater: Attempting to open URL: " + url);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 检查是否有应用可以处理这个Intent
if (intent.resolveActivity(App.get().getPackageManager()) != null) {
App.get().startActivity(intent);
Logger.d("Updater: Successfully started browser intent");
dismiss();
} else {
Logger.e("Updater: No app can handle the URL");
Notify.show("没有找到可以打开链接的应用,请手动访问GitHub下载");
dismiss();
}
} catch (Exception e) {
Logger.e("Updater: Failed to open GitHub releases page: " + e.getMessage());
e.printStackTrace();
Notify.show("无法打开更新页面,请手动访问GitHub下载");
dismiss();
}
}
private void dismiss() {
@@ -188,7 +252,6 @@ public class Updater implements Download.Callback {
@Override
public void error(String msg) {
Logger.e("Download error: " + msg);
Notify.show(msg);
dismiss();
}
@@ -198,4 +261,4 @@ public class Updater implements Download.Callback {
FileUtil.openFile(file);
dismiss();
}
}
}
@@ -44,6 +44,7 @@ import com.fongmi.android.tv.utils.Util;
import com.github.catvod.net.OkHttp;
import com.google.android.flexbox.FlexDirection;
import com.google.android.flexbox.FlexboxLayoutManager;
import com.airbnb.lottie.LottieAnimationView;
import java.io.IOException;
import java.net.URLEncoder;
@@ -151,12 +152,14 @@ public class CollectActivity extends BaseActivity implements CustomScroller.Call
if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addAll(result.getList());
mCollectAdapter.add(Collect.create(result.getList()));
mCollectAdapter.add(result.getList());
updateEmptyState();
});
mViewModel.result.observe(this, result -> {
boolean same = !result.getList().isEmpty() && mCollectAdapter.getActivated().getSite().equals(result.getList().get(0).getSite());
if (same) mCollectAdapter.getActivated().getList().addAll(result.getList());
if (same) mSearchAdapter.addAll(result.getList());
mScroller.endLoading(result);
updateEmptyState();
});
}
@@ -187,6 +190,7 @@ public class CollectActivity extends BaseActivity implements CustomScroller.Call
mBinding.agent.setVisibility(View.GONE);
mBinding.view.setVisibility(View.VISIBLE);
mBinding.result.setVisibility(View.VISIBLE);
updateEmptyState(); // 搜索开始时显示空状态
if (mExecutor != null) mExecutor.shutdownNow();
mExecutor = new PauseExecutor(20);
String keyword = mBinding.keyword.getText().toString().trim();
@@ -194,6 +198,27 @@ public class CollectActivity extends BaseActivity implements CustomScroller.Call
App.post(() -> mRecordAdapter.add(keyword), 250);
}
private void updateEmptyState() {
// 只有在结果页面可见且搜索结果为空时才显示空状态动画
boolean isResultVisible = isVisible(mBinding.result);
boolean isEmpty = mSearchAdapter.getItemCount() == 0;
boolean shouldShowEmpty = isResultVisible && isEmpty;
mBinding.emptyLayout.getRoot().setVisibility(shouldShowEmpty ? View.VISIBLE : View.GONE);
// 控制Lottie动画播放
if (shouldShowEmpty) {
try {
LottieAnimationView lottieView = mBinding.emptyLayout.getRoot().findViewById(R.id.lottieAnimation);
if (lottieView != null) {
lottieView.playAnimation();
}
} catch (Exception e) {
// 忽略错误
}
}
}
private void search(Site site, String keyword) {
try {
mViewModel.searchContent(site, keyword, false);
@@ -235,6 +260,7 @@ public class CollectActivity extends BaseActivity implements CustomScroller.Call
mBinding.result.setVisibility(View.GONE);
mBinding.site.setVisibility(View.VISIBLE);
mBinding.agent.setVisibility(View.VISIBLE);
mBinding.emptyLayout.getRoot().setVisibility(View.GONE); // 隐藏空状态动画
if (mExecutor != null) mExecutor.shutdownNow();
}
@@ -17,6 +17,7 @@ import com.fongmi.android.tv.ui.adapter.HistoryAdapter;
import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.dialog.SyncDialog;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.airbnb.lottie.LottieAnimationView;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
@@ -59,6 +60,25 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl
private void getHistory() {
mAdapter.addAll(History.get());
mBinding.delete.setVisibility(mAdapter.getItemCount() > 0 ? View.VISIBLE : View.GONE);
updateEmptyState();
}
private void updateEmptyState() {
boolean isEmpty = mAdapter.getItemCount() == 0;
mBinding.emptyLayout.getRoot().setVisibility(isEmpty ? View.VISIBLE : View.GONE);
mBinding.recycler.setVisibility(isEmpty ? View.GONE : View.VISIBLE);
// 控制Lottie动画播放
if (isEmpty) {
try {
LottieAnimationView lottieView = mBinding.emptyLayout.getRoot().findViewById(R.id.lottieAnimation);
if (lottieView != null) {
lottieView.playAnimation();
}
} catch (Exception e) {
// 忽略错误
}
}
}
private void onSync(View view) {
@@ -67,7 +87,10 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl
private void onDelete(View view) {
if (mAdapter.isDelete()) {
new MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_delete_record).setMessage(R.string.dialog_delete_history).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> mAdapter.clear()).show();
new MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_delete_record).setMessage(R.string.dialog_delete_history).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> {
mAdapter.clear();
updateEmptyState();
}).show();
} else if (mAdapter.getItemCount() > 0) {
mAdapter.setDelete(true);
} else {
@@ -91,6 +114,7 @@ public class HistoryActivity extends BaseActivity implements HistoryAdapter.OnCl
if (mAdapter.getItemCount() > 0) return;
mBinding.delete.setVisibility(View.GONE);
mAdapter.setDelete(false);
updateEmptyState();
}
@Override
@@ -16,6 +16,7 @@ import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.Updater;
import com.fongmi.android.tv.api.config.LiveConfig;
import com.fongmi.android.tv.api.config.VodConfig;
@@ -62,6 +63,18 @@ public class HomeActivity extends BaseActivity implements NavigationBarView.OnIt
@Override
protected void initView(Bundle savedInstanceState) {
// 检查隐私协议
if (!Setting.isPrivacyAgreed()) {
Intent intent = new Intent(this, PrivacyAgreementActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
return;
}
// 确保通知渠道已创建用户已同意协议的情况
com.fongmi.android.tv.utils.Notify.createChannel();
orientation = getResources().getConfiguration().orientation;
Updater.create().release().start(this);
initFragment(savedInstanceState);
@@ -141,7 +154,7 @@ public class HomeActivity extends BaseActivity implements NavigationBarView.OnIt
private void setNavigation() {
mBinding.navigation.getMenu().findItem(R.id.vod).setVisible(true);
mBinding.navigation.getMenu().findItem(R.id.setting).setVisible(true);
mBinding.navigation.getMenu().findItem(R.id.live).setVisible(LiveConfig.hasUrl());
mBinding.navigation.getMenu().findItem(R.id.live).setVisible(LiveConfig.hasUrl() && !Setting.isLiveTabVisible());
}
private boolean openLive() {
@@ -21,6 +21,7 @@ import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.dialog.SyncDialog;
import com.fongmi.android.tv.utils.Notify;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.airbnb.lottie.LottieAnimationView;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
@@ -63,6 +64,25 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis
private void getKeep() {
mAdapter.addAll(Keep.getVod());
mBinding.delete.setVisibility(mAdapter.getItemCount() > 0 ? View.VISIBLE : View.GONE);
updateEmptyState();
}
private void updateEmptyState() {
boolean isEmpty = mAdapter.getItemCount() == 0;
mBinding.emptyLayout.getRoot().setVisibility(isEmpty ? View.VISIBLE : View.GONE);
mBinding.recycler.setVisibility(isEmpty ? View.GONE : View.VISIBLE);
// 控制Lottie动画播放
if (isEmpty) {
try {
LottieAnimationView lottieView = mBinding.emptyLayout.getRoot().findViewById(R.id.lottieAnimation);
if (lottieView != null) {
lottieView.playAnimation();
}
} catch (Exception e) {
// 忽略错误
}
}
}
private void onSync(View view) {
@@ -71,7 +91,10 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis
private void onDelete(View view) {
if (mAdapter.isDelete()) {
new MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_delete_record).setMessage(R.string.dialog_delete_keep).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> mAdapter.clear()).show();
new MaterialAlertDialogBuilder(this).setTitle(R.string.dialog_delete_record).setMessage(R.string.dialog_delete_keep).setNegativeButton(R.string.dialog_negative, null).setPositiveButton(R.string.dialog_positive, (dialog, which) -> {
mAdapter.clear();
updateEmptyState();
}).show();
} else if (mAdapter.getItemCount() > 0) {
mAdapter.setDelete(true);
} else {
@@ -114,6 +137,7 @@ public class KeepActivity extends BaseActivity implements KeepAdapter.OnClickLis
if (mAdapter.getItemCount() > 0) return;
mBinding.delete.setVisibility(View.GONE);
mAdapter.setDelete(false);
updateEmptyState();
}
@Override
@@ -0,0 +1,92 @@
package com.fongmi.android.tv.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.Setting;
import com.fongmi.android.tv.databinding.ActivityPrivacyAgreementBinding;
import com.fongmi.android.tv.ui.base.BaseActivity;
public class PrivacyAgreementActivity extends BaseActivity {
private ActivityPrivacyAgreementBinding mBinding;
@Override
protected ViewBinding getBinding() {
return mBinding = ActivityPrivacyAgreementBinding.inflate(getLayoutInflater());
}
@Override
protected void initView(Bundle savedInstanceState) {
// 隐私协议页面初始化完成
}
@Override
protected void initEvent() {
if (mBinding != null) {
if (mBinding.agreeButton != null) {
mBinding.agreeButton.setOnClickListener(this::onAgree);
}
if (mBinding.disagreeButton != null) {
mBinding.disagreeButton.setOnClickListener(this::onDisagree);
}
}
}
private void onAgree(View view) {
// 用户同意协议
Setting.setPrivacyAgreed(true);
// 创建通知渠道此时才请求通知权限
com.fongmi.android.tv.utils.Notify.createChannel();
// 跳转到主界面清除任务栈避免用户通过任务管理器回到协议页面
Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
}
private void onDisagree(View view) {
// 用户不同意协议退出应用
try {
// 清除隐私协议状态可选确保下次启动重新询问
Setting.setPrivacyAgreed(false);
// 优雅地退出应用
finishAffinity();
// 延迟退出 Activity 完成销毁
new android.os.Handler(android.os.Looper.getMainLooper()).postDelayed(() -> {
System.exit(0);
}, 100);
} catch (Exception e) {
e.printStackTrace();
// 备选退出方案
System.exit(0);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 禁用返回键用户必须做出选择
if (keyCode == KeyEvent.KEYCODE_BACK) {
onDisagree(null);
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onDestroy() {
// 清理 binding 引用
mBinding = null;
super.onDestroy();
}
}
@@ -59,45 +59,25 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
mBinding.renderText.setText((render = ResUtil.getStringArray(R.array.select_render))[Setting.getRender()]);
mBinding.captionText.setText((caption = ResUtil.getStringArray(R.array.select_caption))[Setting.isCaption() ? 1 : 0]);
mBinding.backgroundText.setText((background = ResUtil.getStringArray(R.array.select_background))[Setting.getBackground()]);
// 设置开关的颜色为黄色
int accentColor = getResources().getColor(R.color.accent);
android.content.res.ColorStateList colorStateList = new android.content.res.ColorStateList(
new int[][]{
new int[]{-android.R.attr.state_checked},
new int[]{android.R.attr.state_checked}
},
new int[]{
0x66FFFFFF, // 未选中时的颜色
accentColor // 选中时的颜色
}
);
mBinding.tunnelSwitch.setThumbTintList(android.content.res.ColorStateList.valueOf(android.graphics.Color.WHITE));
mBinding.tunnelSwitch.setTrackTintList(colorStateList);
mBinding.audioDecodeSwitch.setThumbTintList(android.content.res.ColorStateList.valueOf(android.graphics.Color.WHITE));
mBinding.audioDecodeSwitch.setTrackTintList(colorStateList);
mBinding.aacSwitch.setThumbTintList(android.content.res.ColorStateList.valueOf(android.graphics.Color.WHITE));
mBinding.aacSwitch.setTrackTintList(colorStateList);
mBinding.danmakuLoadSwitch.setThumbTintList(android.content.res.ColorStateList.valueOf(android.graphics.Color.WHITE));
mBinding.danmakuLoadSwitch.setTrackTintList(colorStateList);
}
@Override
protected void initEvent() {
mBinding.back.setOnClickListener(v -> finish());
mBinding.ua.setOnClickListener(this::onUa);
mBinding.aac.setOnClickListener(this::setAAC);
mBinding.scale.setOnClickListener(this::onScale);
mBinding.speed.setOnClickListener(this::onSpeed);
mBinding.buffer.setOnClickListener(this::onBuffer);
mBinding.render.setOnClickListener(this::setRender);
mBinding.tunnel.setOnClickListener(this::setTunnel);
mBinding.caption.setOnClickListener(this::setCaption);
mBinding.caption.setOnLongClickListener(this::onCaption);
mBinding.background.setOnClickListener(this::onBackground);
mBinding.audioDecode.setOnClickListener(this::setAudioDecode);
mBinding.danmakuLoad.setOnClickListener(this::setDanmakuLoad);
// 直接给开关按钮设置点击监听器避免双重点击冲突
mBinding.tunnelSwitch.setOnClickListener(this::setTunnel);
mBinding.audioDecodeSwitch.setOnClickListener(this::setAudioDecode);
mBinding.aacSwitch.setOnClickListener(this::setAAC);
mBinding.danmakuLoadSwitch.setOnClickListener(this::setDanmakuLoad);
}
private void onUa(View view) {
@@ -113,7 +93,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
private void setAAC(View view) {
boolean isChecked = !Setting.isPreferAAC();
Setting.putPreferAAC(isChecked);
mBinding.aacSwitch.setChecked(isChecked);
// 不需要再次调用 setChecked因为点击已经触发了状态变化
}
private void onScale(View view) {
@@ -154,7 +134,7 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
private void setTunnel(View view) {
boolean isChecked = !Setting.isTunnel();
Setting.putTunnel(isChecked);
mBinding.tunnelSwitch.setChecked(isChecked);
// 不需要再次调用 setChecked因为点击已经触发了状态变化
if (isChecked && Setting.getRender() == 1) setRender(view);
}
@@ -179,12 +159,12 @@ public class SettingPlayerActivity extends BaseActivity implements UaCallback, B
private void setAudioDecode(View view) {
boolean isChecked = !Setting.isAudioPrefer();
Setting.putAudioPrefer(isChecked);
mBinding.audioDecodeSwitch.setChecked(isChecked);
// 不需要再次调用 setChecked因为点击已经触发了状态变化
}
private void setDanmakuLoad(View view) {
boolean isChecked = !Setting.isDanmakuLoad();
Setting.putDanmakuLoad(isChecked);
mBinding.danmakuLoadSwitch.setChecked(isChecked);
// 不需要再次调用 setChecked因为点击已经触发了状态变化
}
}
@@ -30,6 +30,7 @@ import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.concurrent.TimeUnit;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -162,6 +163,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private Runnable mTimeUpdateRunnable;
private BroadcastReceiver mBatteryReceiver;
private int mBatteryLevel = -1;
private boolean mIsCharging = false;
public static void push(FragmentActivity activity, String text) {
if (FileChooser.isValid(activity, Uri.parse(text))) file(activity, FileChooser.getPathFromUri(activity, Uri.parse(text)));
@@ -327,8 +329,12 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
if (Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction())) {
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
if (level != -1 && scale != -1) {
mBatteryLevel = (int) ((level / (float) scale) * 100);
mIsCharging = (status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL);
updateTimeBattery();
}
}
@@ -345,18 +351,41 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void updateTimeBattery() {
TextView timeBattery = mBinding.getRoot().findViewById(R.id.time_battery);
if (timeBattery == null) return;
TextView timeBattery = findViewById(R.id.time_battery);
TextView batteryText = findViewById(R.id.battery_icon);
android.widget.ImageView chargingIndicator = findViewById(R.id.charging_indicator);
// 只在屏模式下显示
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
String time = DateFormat.getTimeFormat(this).format(System.currentTimeMillis());
String battery = mBatteryLevel >= 0 ? mBatteryLevel + "%" : "";
String text = time + (battery.isEmpty() ? "" : " | " + battery);
timeBattery.setText(text);
timeBattery.setVisibility(View.VISIBLE);
// 只在屏模式下显示
if (isFullscreen()) {
// 更新时间
if (timeBattery != null) {
String time = DateFormat.getTimeFormat(this).format(System.currentTimeMillis());
timeBattery.setText(time);
timeBattery.setVisibility(View.VISIBLE);
}
// 更新充电图标
if (chargingIndicator != null) {
chargingIndicator.setVisibility(mIsCharging && mBatteryLevel >= 0 ? View.VISIBLE : View.GONE);
}
// 更新电池百分比文字
if (batteryText != null && mBatteryLevel >= 0) {
batteryText.setText(mBatteryLevel + "%");
batteryText.setVisibility(View.VISIBLE);
} else if (batteryText != null) {
batteryText.setVisibility(View.GONE);
}
} else {
timeBattery.setVisibility(View.GONE);
if (timeBattery != null) {
timeBattery.setVisibility(View.GONE);
}
if (batteryText != null) {
batteryText.setVisibility(View.GONE);
}
if (chargingIndicator != null) {
chargingIndicator.setVisibility(View.GONE);
}
}
}
@@ -1465,6 +1494,55 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
this.rotate = rotate;
if (fullscreen && rotate) noPadding(mBinding.control.getRoot());
if (fullscreen && !rotate) setPadding(mBinding.control.getRoot());
// 检测屏幕方向变化并处理
onOrientationChanged();
}
// 添加屏幕方向变化处理方法
private void onOrientationChanged() {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 切换到横屏模式
onLandscapeMode();
} else {
// 切换到竖屏模式
onPortraitMode();
}
}
private void onLandscapeMode() {
// 横屏模式下的特殊处理
// 调整进度条的敏感度
if (mPlayers != null) {
long duration = mPlayers.getDuration();
if (duration > TimeUnit.MINUTES.toMillis(30)) {
mBinding.control.seek.setKeyTimeIncrement(TimeUnit.MINUTES.toMillis(1));
} else if (duration > TimeUnit.MINUTES.toMillis(10)) {
mBinding.control.seek.setKeyTimeIncrement(TimeUnit.SECONDS.toMillis(30));
} else if (duration > 0) {
mBinding.control.seek.setKeyTimeIncrement(TimeUnit.SECONDS.toMillis(15));
}
}
// 确保进度条状态正确
if (mPlayers != null) {
long position = mPlayers.getPosition();
long duration = mPlayers.getDuration();
if (position > 0 && duration > 0) {
mBinding.control.seek.setPosition(position);
mBinding.control.seek.setDuration(duration);
}
}
}
private void onPortraitMode() {
// 竖屏模式下的处理
// 恢复进度条的默认敏感度
if (mPlayers != null) {
long duration = mPlayers.getDuration();
if (duration > 0) {
mBinding.control.seek.setKeyTimeIncrement(duration);
}
}
}
public boolean isStop() {
@@ -1566,10 +1644,40 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
@Override
public void onSeekEnd(long time) {
mBinding.widget.seek.setVisibility(View.GONE);
mPlayers.seek(time);
showProgress();
onPlay();
handleLandscapeSeek(time);
}
// 添加新的方法处理横屏模式下的特殊逻辑
private void handleLandscapeSeek(long time) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 横屏模式下的特殊处理
mBinding.widget.seek.setVisibility(View.GONE);
mPlayers.pause();
mPlayers.seek(time);
showProgress();
App.post(() -> {
long actualPosition = mPlayers.getPosition();
if (Math.abs(actualPosition - time) > 500) {
mPlayers.seek(time);
}
onPlay();
hideProgress();
}, 150); // 横屏模式下延迟更长确保跳转完成
} else {
// 竖屏模式使用原有逻辑
mBinding.widget.seek.setVisibility(View.GONE);
mPlayers.pause();
mPlayers.seek(time);
showProgress();
App.post(() -> {
long actualPosition = mPlayers.getPosition();
if (Math.abs(actualPosition - time) > 500) {
mPlayers.seek(time);
}
onPlay();
hideProgress();
}, 100); // 竖屏模式下延迟较短
}
}
@Override
@@ -8,6 +8,7 @@ import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
import android.view.WindowManager;
import android.content.res.Configuration;
import androidx.annotation.NonNull;
@@ -109,6 +110,17 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener im
if (isEdge(e1) || changeScale || lock || e1.getPointerCount() > 1) return true;
float deltaX = e2.getX() - e1.getX();
float deltaY = e1.getY() - e2.getY();
// 在横屏模式下调整触摸事件的处理逻辑
if (activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 横屏模式下增加对水平滑动的敏感度
if (Math.abs(deltaX) > Math.abs(deltaY) * 0.5f) {
if (touch) checkFunc(distanceX, distanceY, e2);
if (changeTime) listener.onSeek(time = (long) (deltaX * 50));
return true;
}
}
if (touch) checkFunc(distanceX, distanceY, e2);
if (changeTime) listener.onSeek(time = (long) (deltaX * 50));
if (changeBright) setBright(deltaY);
@@ -145,9 +157,32 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener im
private void checkFunc(float distanceX, float distanceY, MotionEvent e2) {
int four = ResUtil.getScreenWidth(activity) / 4;
if (e2.getX() > four && e2.getX() < four * 3) center = true;
else if (Math.abs(distanceX) < Math.abs(distanceY)) checkSide(e2);
if (Math.abs(distanceX) >= Math.abs(distanceY)) changeTime = true;
// 在横屏模式下调整中心区域的判断
if (activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// 横屏模式下扩大中心区域更容易触发进度条调整
int centerStart = ResUtil.getScreenWidth(activity) / 3;
int centerEnd = ResUtil.getScreenWidth(activity) * 2 / 3;
if (e2.getX() > centerStart && e2.getX() < centerEnd) {
center = true;
} else if (Math.abs(distanceX) < Math.abs(distanceY)) {
checkSide(e2);
}
// 横屏模式下降低触发进度条调整的阈值
if (Math.abs(distanceX) >= Math.abs(distanceY) * 0.7f) {
changeTime = true;
}
} else {
// 竖屏模式保持原有逻辑
if (e2.getX() > four && e2.getX() < four * 3) {
center = true;
} else if (Math.abs(distanceX) < Math.abs(distanceY)) {
checkSide(e2);
}
if (Math.abs(distanceX) >= Math.abs(distanceY)) {
changeTime = true;
}
}
touch = false;
}
@@ -0,0 +1,137 @@
package com.fongmi.android.tv.ui.custom;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
import androidx.appcompat.widget.AppCompatCheckBox;
public class CustomSwitch extends AppCompatCheckBox {
private Paint trackPaint;
private Paint thumbPaint;
private RectF trackRect;
private RectF thumbRect;
private float thumbPosition = 0f; // 0 = 左边, 1 = 右边
private int currentTrackColor;
private int currentThumbColor;
private static final int TRACK_COLOR_OFF = 0xFF555555; // 灰色
private static final int TRACK_COLOR_ON = 0xFFFFEB3B; // 黄色
private static final int THUMB_COLOR_OFF = 0xFFFFFFFF; // 白色
private static final int THUMB_COLOR_ON = 0xFF000000; // 黑色
private ValueAnimator animator;
public CustomSwitch(Context context) {
super(context);
init();
}
public CustomSwitch(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CustomSwitch(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
// 隐藏默认的checkbox样式
setButtonDrawable(null);
trackPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
thumbPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
trackRect = new RectF();
thumbRect = new RectF();
currentTrackColor = TRACK_COLOR_OFF;
currentThumbColor = THUMB_COLOR_OFF;
// 监听状态变化
setOnCheckedChangeListener((buttonView, isChecked) -> animateSwitch(isChecked));
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 固定尺寸50dp × 30dp
int width = (int) (50 * getResources().getDisplayMetrics().density);
int height = (int) (30 * getResources().getDisplayMetrics().density);
setMeasuredDimension(width, height);
}
@Override
protected void onDraw(Canvas canvas) {
int width = getWidth();
int height = getHeight();
float radius = height / 2f;
// 绘制轨道
trackRect.set(0, 0, width, height);
trackPaint.setColor(currentTrackColor);
canvas.drawRoundRect(trackRect, radius, radius, trackPaint);
// 计算小圆位置
float thumbSize = height - 8 * getResources().getDisplayMetrics().density; // 22dp
float padding = 4 * getResources().getDisplayMetrics().density;
float thumbLeft = padding + thumbPosition * (width - thumbSize - 2 * padding);
float thumbTop = padding;
// 绘制小圆
thumbRect.set(thumbLeft, thumbTop, thumbLeft + thumbSize, thumbTop + thumbSize);
thumbPaint.setColor(currentThumbColor);
canvas.drawOval(thumbRect, thumbPaint);
}
private void animateSwitch(boolean isChecked) {
if (animator != null && animator.isRunning()) {
animator.cancel();
}
float targetPosition = isChecked ? 1f : 0f;
int targetTrackColor = isChecked ? TRACK_COLOR_ON : TRACK_COLOR_OFF;
int targetThumbColor = isChecked ? THUMB_COLOR_ON : THUMB_COLOR_OFF;
animator = ValueAnimator.ofFloat(thumbPosition, targetPosition);
animator.setDuration(250); // 250ms动画时长
final ArgbEvaluator colorEvaluator = new ArgbEvaluator();
animator.addUpdateListener(animation -> {
thumbPosition = (float) animation.getAnimatedValue();
// 颜色渐变
currentTrackColor = (int) colorEvaluator.evaluate(
thumbPosition, TRACK_COLOR_OFF, TRACK_COLOR_ON
);
currentThumbColor = (int) colorEvaluator.evaluate(
thumbPosition, THUMB_COLOR_OFF, THUMB_COLOR_ON
);
invalidate();
});
animator.start();
}
@Override
public void setChecked(boolean checked) {
super.setChecked(checked);
// 初始化时不播放动画
if (!isAttachedToWindow()) {
thumbPosition = checked ? 1f : 0f;
currentTrackColor = checked ? TRACK_COLOR_ON : TRACK_COLOR_OFF;
currentThumbColor = checked ? THUMB_COLOR_ON : THUMB_COLOR_OFF;
}
}
}
@@ -21,6 +21,7 @@ import com.fongmi.android.tv.api.config.WallConfig;
import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.databinding.DialogConfigBinding;
import com.fongmi.android.tv.impl.ConfigCallback;
import com.fongmi.android.tv.impl.Callback;
import com.fongmi.android.tv.ui.custom.CustomTextListener;
import com.fongmi.android.tv.utils.FileChooser;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -156,7 +157,63 @@ public class ConfigDialog {
}
// 只有URL不为空时才设置配置
// 保存原始URL以便在添加失败时恢复
String originalUrl = ori;
callback.setConfig(Config.find(url, type));
// 添加一个延迟检查如果配置没有成功加载则恢复原始URL
new android.os.Handler().postDelayed(() -> {
// 检查配置是否成功加载
Config currentConfig = getConfig();
if (currentConfig == null || !currentConfig.getUrl().equals(url)) {
// 配置加载失败恢复原始URL
if (!TextUtils.isEmpty(originalUrl)) {
// 如果有原始URL恢复原始URL
callback.setConfig(Config.find(originalUrl, type));
} else {
// 如果没有原始URL设置为空
switch (type) {
case 0:
VodConfig.get().clear().config(Config.vod()).load(new Callback() {
@Override
public void success() {}
@Override
public void success(String result) {}
@Override
public void error(String msg) {}
});
break;
case 1:
LiveConfig.get().clear().config(Config.live()).load(new Callback() {
@Override
public void success() {}
@Override
public void success(String result) {}
@Override
public void error(String msg) {}
});
break;
case 2:
WallConfig.get().clear().config(Config.wall()).load(new Callback() {
@Override
public void success() {}
@Override
public void success(String result) {}
@Override
public void error(String msg) {}
});
break;
}
}
}
}, 2000); // 2秒后检查
dialog.dismiss();
}
@@ -126,6 +126,8 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
private void setSpeed(@NonNull Slider slider, float value, boolean fromUser) {
parent.control.action.speed.setText(player.setSpeed(value));
if (history != null) history.setSpeed(player.getSpeed());
// 实时更新倍速数值显示
binding.speedValue.setText(String.format("%.1fx", value));
}
private void setScaleText() {
@@ -179,6 +181,8 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
binding.player.setText(parent.control.action.player.getText());
binding.decode.setVisibility(parent.control.action.decode.getVisibility());
binding.danmaku.setVisibility(parent.control.action.danmaku.getVisibility());
// 初始化倍速数值显示
binding.speedValue.setText(String.format("%.1fx", Math.max(player.getSpeed(), 0.5f)));
}
public void setParseVisible(boolean visible) {
@@ -60,6 +60,8 @@ public class TimerDialog extends BaseDialog implements Timer.Callback {
binding.time2.setOnClickListener(this::setTimer);
binding.time3.setOnClickListener(this::setTimer);
binding.time4.setOnClickListener(this::setTimer);
binding.time5.setOnClickListener(this::setTimer);
binding.time6.setOnClickListener(this::setTimer);
}
private void setTimer(View view) {
@@ -8,9 +8,11 @@ import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -101,24 +103,9 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
protected void initView() {
setSourceHintText(mBinding.vodUrl, VodConfig.getDesc(), R.string.source_hint_setting);
setSourceHintText(mBinding.liveUrl, LiveConfig.getDesc(), R.string.source_hint_live);
setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall);
// setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall); // 壁纸功能已移除
mBinding.versionText.setText(getString(R.string.setting_version) + " " + BuildConfig.VERSION_NAME);
// 设置开关的颜色为黄色
int accentColor = getResources().getColor(R.color.accent);
android.content.res.ColorStateList colorStateList = new android.content.res.ColorStateList(
new int[][]{
new int[]{-android.R.attr.state_checked},
new int[]{android.R.attr.state_checked}
},
new int[]{
0x66FFFFFF, // 未选中时的颜色
accentColor // 选中时的颜色
}
);
mBinding.incognitoSwitch.setThumbTintList(android.content.res.ColorStateList.valueOf(android.graphics.Color.WHITE));
mBinding.incognitoSwitch.setTrackTintList(colorStateList);
setOtherText();
setCacheText();
String[] quotes = getResources().getStringArray(R.array.motivational_quotes);
@@ -130,7 +117,30 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
mBinding.dohText.setText(getDohList()[getDohIndex()]);
mBinding.proxyText.setText(getProxy(Setting.getProxy()));
mBinding.incognitoSwitch.setChecked(Setting.isIncognito());
mBinding.liveTabVisibleSwitch.setChecked(Setting.isLiveTabVisible());
mBinding.sizeText.setText((size = ResUtil.getStringArray(R.array.select_size))[Setting.getSize()]);
setLiveSettingsVisibility();
}
private void setLiveSettingsVisibility() {
boolean isLiveTabVisible = !Setting.isLiveTabVisible(); // 注意这里取反因为开关是"隐藏直播"
// 获取直播容器的布局参数
LinearLayout.LayoutParams liveContainerParams = (LinearLayout.LayoutParams) mBinding.liveContainer.getLayoutParams();
if (isLiveTabVisible) {
// 直播开关打开显示直播模块间距为12dp
mBinding.liveContainer.setVisibility(View.VISIBLE);
liveContainerParams.topMargin = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 12, getResources().getDisplayMetrics());
} else {
// 直播开关关闭隐藏直播模块间距为0dp这样视频模块和下一个模块之间会有正常间距
mBinding.liveContainer.setVisibility(View.GONE);
liveContainerParams.topMargin = 0;
}
// 应用布局参数
mBinding.liveContainer.setLayoutParams(liveContainerParams);
}
private void setCacheText() {
@@ -146,7 +156,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
protected void initEvent() {
mBinding.vod.setOnClickListener(this::onVod);
mBinding.live.setOnClickListener(this::onLive);
mBinding.wall.setOnClickListener(this::onWall);
// mBinding.wall.setOnClickListener(this::onWall); // 壁纸功能已移除
mBinding.proxy.setOnClickListener(this::onProxy);
mBinding.cache.setOnClickListener(this::onCache);
mBinding.backup.setOnClickListener(this::onBackup);
@@ -158,13 +168,14 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
mBinding.vodHome.setOnClickListener(this::onVodHome);
mBinding.live.setOnLongClickListener(this::onLiveEdit);
mBinding.liveHome.setOnClickListener(this::onLiveHome);
mBinding.wall.setOnLongClickListener(this::onWallEdit);
// mBinding.wall.setOnLongClickListener(this::onWallEdit); // 壁纸功能已移除
mBinding.vodHistory.setOnClickListener(this::onVodHistory);
mBinding.version.setOnLongClickListener(this::onVersionDev);
mBinding.liveHistory.setOnClickListener(this::onLiveHistory);
mBinding.wallDefault.setOnClickListener(this::setWallDefault);
mBinding.wallRefresh.setOnClickListener(this::setWallRefresh);
mBinding.incognito.setOnClickListener(this::setIncognito);
// mBinding.wallDefault.setOnClickListener(this::setWallDefault); // 壁纸功能已移除
// mBinding.wallRefresh.setOnClickListener(this::setWallRefresh); // 壁纸功能已移除
mBinding.incognitoSwitch.setOnClickListener(this::setIncognito);
mBinding.liveTabVisibleSwitch.setOnClickListener(this::setLiveTabVisible);
mBinding.size.setOnClickListener(this::setSize);
mBinding.doh.setOnClickListener(this::setDoh);
}
@@ -215,9 +226,9 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
case 2:
Notify.progress(getActivity());
WallConfig.load(config, getCallback(2));
if (mBinding != null && mBinding.wallUrl != null) {
mBinding.wallUrl.setText(config.getDesc());
}
// if (mBinding != null && mBinding.wallUrl != null) { // 壁纸功能已移除
// mBinding.wallUrl.setText(config.getDesc());
// }
break;
}
} catch (Exception e) {
@@ -256,7 +267,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
setSourceHintText(mBinding.liveUrl, LiveConfig.getDesc(), R.string.source_hint_live);
break;
case 2:
setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall);
// setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall); // 壁纸功能已移除
break;
}
}
@@ -272,7 +283,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
RefreshEvent.config();
setSourceHintText(mBinding.vodUrl, VodConfig.getDesc(), R.string.source_hint_setting);
setSourceHintText(mBinding.liveUrl, LiveConfig.getDesc(), R.string.source_hint_live);
setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall);
// setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall); // 壁纸功能已移除
break;
case 1:
setCacheText();
@@ -283,7 +294,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
case 2:
setCacheText();
Notify.dismiss();
setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall);
// setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall); // 壁纸功能已移除
break;
}
}
@@ -394,7 +405,17 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
private void setIncognito(View view) {
boolean isChecked = !Setting.isIncognito();
Setting.putIncognito(isChecked);
mBinding.incognitoSwitch.setChecked(isChecked);
// 不需要再次调用 setChecked因为点击已经触发了状态变化
}
private void setLiveTabVisible(View view) {
boolean isChecked = !Setting.isLiveTabVisible();
Setting.putLiveTabVisible(isChecked);
// 发送刷新事件通知主界面更新导航栏
RefreshEvent.config();
// 更新直播设置项的可见性
setLiveSettingsVisibility();
// 不需要再次调用 setChecked因为点击已经触发了状态变化
}
private void setSize(View view) {
@@ -488,7 +509,7 @@ public class SettingFragment extends BaseFragment implements ConfigCallback, Sit
if (hidden) return;
setSourceHintText(mBinding.vodUrl, VodConfig.getDesc(), R.string.source_hint_setting);
setSourceHintText(mBinding.liveUrl, LiveConfig.getDesc(), R.string.source_hint_live);
setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall);
// setSourceHintText(mBinding.wallUrl, WallConfig.getDesc(), R.string.source_hint_wall); // 壁纸功能已移除
setCacheText();
}
@@ -45,6 +45,7 @@ import com.fongmi.android.tv.ui.activity.CollectActivity;
import com.fongmi.android.tv.ui.activity.HistoryActivity;
import com.fongmi.android.tv.ui.activity.KeepActivity;
import com.fongmi.android.tv.ui.activity.VideoActivity;
import com.airbnb.lottie.LottieAnimationView;
import com.fongmi.android.tv.ui.adapter.TypeAdapter;
import com.fongmi.android.tv.ui.base.BaseFragment;
import com.fongmi.android.tv.ui.dialog.ConfigDialog;
@@ -265,6 +266,15 @@ public class VodFragment extends BaseFragment implements SiteCallback, FilterCal
}
// 空源状态下隐藏所有悬浮按钮
hideFabButtons();
// 启动Lottie动画
try {
LottieAnimationView lottieView = mBinding.emptySourceHint.findViewById(R.id.lottieAnimation);
if (lottieView != null) {
lottieView.playAnimation();
}
} catch (Exception e) {
// 忽略错误
}
}
}
}
@@ -59,7 +59,7 @@ public class Timer {
public void delay() {
cancel();
set(TimeUnit.MINUTES.toMillis(5) + tick);
set(TimeUnit.MINUTES.toMillis(15) + tick);
}
public void reset() {
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_focused="true" android:state_selected="true" />
<item android:color="@color/green_400" android:state_selected="true" />
<item android:color="@color/primary" android:state_selected="true" />
<item android:color="@color/white" />
</selector>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 703 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 890 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 869 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 B

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 开启状态:黄色底 + 黑色圆在右边 -->
<item android:state_checked="true">
<layer-list>
<!-- 黄色轨道 -->
<item>
<shape android:shape="rectangle">
<solid android:color="#FFEB3B" />
<corners android:radius="15dp" />
</shape>
</item>
<!-- 黑色小圆(右边,精确定位 22dp) -->
<item android:top="4dp" android:bottom="4dp" android:right="4dp" android:left="24dp">
<shape android:shape="oval">
<solid android:color="#000000" />
</shape>
</item>
</layer-list>
</item>
<!-- 关闭状态:灰色底 + 白色圆在左边 -->
<item>
<layer-list>
<!-- 灰色轨道 -->
<item>
<shape android:shape="rectangle">
<solid android:color="#555555" />
<corners android:radius="15dp" />
</shape>
</item>
<!-- 白色小圆(左边,精确定位 22dp) -->
<item android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="24dp">
<shape android:shape="oval">
<solid android:color="#FFFFFF" />
</shape>
</item>
</layer-list>
</item>
</selector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M480,595Q553,595 604.5,543.5Q656,492 656,419Q656,346 604.5,294.5Q553,243 480,243Q407,243 355.5,294.5Q304,346 304,419Q304,492 355.5,543.5Q407,595 480,595ZM480,420ZM480,760Q587,760 693,724.5Q799,689 896,619Q902,615 905,608.5Q908,602 908,595Q908,588 905,582Q902,576 896,572Q758,474 658,447.5Q558,421 480,421Q402,421 302,447.5Q202,474 64,572Q58,576 55,582Q52,588 52,595Q52,602 55,608.5Q58,615 64,619Q161,689 267,724.5Q373,760 480,760Z"/>
</vector>
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M312,720Q261,720 214.5,702Q168,684 131,649Q83,604 61.5,542.5Q40,481 40,415Q40,337 78,288.5Q116,240 189,240Q203,240 215.5,242.5Q228,245 241,250L480,339L719,250Q732,245 744.5,242.5Q757,240 771,240Q844,240 882,288.5Q920,337 920,415Q920,481 898.5,542.5Q877,604 829,649Q792,684 745.5,702Q699,720 648,720Q582,720 536,690Q490,660 490,660L470,660Q470,660 424,690Q378,720 312,720ZM312,640Q349,640 381,622.5Q413,605 440,580L520,580Q547,605 579,622.5Q611,640 648,640Q684,640 717.5,627.5Q751,615 777,589Q811,555 825.5,509Q840,463 840,415Q840,374 823,346.5Q806,319 769,320Q766,320 747,324L480,424L213,324Q208,322 202.5,321Q197,320 191,320Q154,320 137,347Q120,374 120,415Q120,464 134.5,510Q149,556 184,590Q210,615 243,627.5Q276,640 312,640ZM361,580Q398,580 419,563.5Q440,547 440,518Q440,469 375.5,424.5Q311,380 239,380Q202,380 181,396.5Q160,413 160,442Q160,491 224.5,535.5Q289,580 361,580ZM355,520Q317,520 272.5,495Q228,470 220,444Q225,442 231.5,440.5Q238,439 245,439Q283,439 327.5,464.5Q372,490 380,516Q375,518 368.5,519Q362,520 355,520ZM599,581Q671,581 735.5,536Q800,491 800,442Q800,413 779.5,396Q759,379 721,379Q649,379 584.5,424Q520,469 520,518Q520,547 541,564Q562,581 599,581ZM605,520Q598,520 592,519Q586,518 581,516Q589,490 633.5,465Q678,440 716,440Q723,440 729,441Q735,442 740,444Q732,470 687.5,495Q643,520 605,520ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>
+10
View File
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M480,840Q363,840 281.5,758.5Q200,677 200,560Q200,483 225.5,405Q251,327 291.5,263.5Q332,200 382,160Q432,120 480,120Q529,120 578.5,160Q628,200 668.5,263.5Q709,327 734.5,405Q760,483 760,560Q760,677 678.5,758.5Q597,840 480,840ZM480,760Q563,760 621.5,701.5Q680,643 680,560Q680,503 660.5,440Q641,377 611.5,323.5Q582,270 547,235Q512,200 480,200Q449,200 413.5,235Q378,270 348.5,323.5Q319,377 299.5,440Q280,503 280,560Q280,643 338.5,701.5Q397,760 480,760ZM520,720Q537,720 548.5,708.5Q560,697 560,680Q560,663 548.5,651.5Q537,640 520,640Q470,640 435,605Q400,570 400,520Q400,503 388.5,491.5Q377,480 360,480Q343,480 331.5,491.5Q320,503 320,520Q320,603 378.5,661.5Q437,720 520,720ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M123,520Q122,510 121.5,500Q121,490 121,480Q121,405 149,339.5Q177,274 226,225.5Q275,177 340,148.5Q405,120 480,120Q555,120 620.5,148.5Q686,177 734.5,225.5Q783,274 811.5,339.5Q840,405 840,480Q840,490 839.5,500Q839,510 838,520L757,520Q759,510 759.5,500Q760,490 760,480Q760,470 759.5,460Q759,450 757,440L639,440Q640,450 640,460Q640,470 640,480Q640,490 640,500Q640,510 639,520L560,520Q560,512 560,503.5Q560,495 560,487Q560,475 559.5,463Q559,451 558,440L403,440Q402,451 401.5,463Q401,475 401,487Q401,495 401,503.5Q401,512 401,520L322,520Q321,510 321,500Q321,490 321,480Q321,470 321,460Q321,450 322,440L204,440Q202,450 201.5,460Q201,470 201,480Q201,490 201.5,500Q202,510 204,520L123,520ZM228,360L331,360Q339,317 351,282.5Q363,248 377,220Q329,238 290,274.5Q251,311 228,360ZM414,360L546,360Q536,317 521,276Q506,235 480,200Q454,235 438.5,276Q423,317 414,360ZM630,360L733,360Q710,311 670.5,274.5Q631,238 583,220Q597,250 609.5,283.5Q622,317 630,360ZM440,840L440,800Q440,750 405,715Q370,680 320,680L80,680L80,600L320,600Q368,600 409.5,621Q451,642 480,680Q509,642 550.5,621Q592,600 640,600L880,600L880,680L640,680Q590,680 555,715Q520,750 520,800L520,840L440,840Z"/>
</vector>
+10
View File
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M390,880L322,760L190,760L100,600L168,480L100,360L190,200L322,200L390,80L570,80L638,200L770,200L860,360L792,480L860,600L770,760L638,760L570,880L390,880ZM638,440L724,440L768,360L724,280L638,280L593,360L638,440ZM438,560L522,560L567,480L522,400L438,400L393,480L438,560ZM438,320L522,320L568,239L523,160L437,160L392,239L438,320ZM237,440L322,440L367,360L322,280L237,280L192,360L237,440ZM237,680L322,680L367,600L322,520L236,520L192,600L237,680ZM437,800L523,800L568,721L522,640L438,640L392,721L437,800ZM638,680L723,680L768,600L723,520L638,520L593,600L638,680Z"/>
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5s5,-2.24 5,-5S14.76,7 12,7L12,7zM17,15c0.75,-1.06 1.19,-2.36 1.19,-3.77c0,-3.61 -2.92,-6.54 -6.54,-6.54c-0.84,0 -1.65,0.16 -2.39,0.45L12,7.78L12,7.78c2.33,0 4.22,1.89 4.22,4.22c0,1.04 -0.38,1.99 -1,2.73V15zM2,4.27l2.28,2.28l0.46,0.46C3.08,8.3 1.78,10.02 1,12c1.73,4.39 6,7.5 11,7.5c1.55,0 3.03,-0.3 4.38,-0.84l0.42,0.42L19.73,22L21,20.73L3.27,3L2,4.27zM7.53,9.8l1.55,1.55c-0.05,0.21 -0.08,0.43 -0.08,0.65c0,1.66 1.34,3 3,3c0.22,0 0.44,-0.03 0.65,-0.08l1.55,1.55c-0.67,0.33 -1.41,0.53 -2.2,0.53c-2.76,0 -5,-2.24 -5,-5C7,11.21 7.2,10.47 7.53,9.8z"/>
</vector>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF0000"
android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>
+10
View File
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M480,880Q346,880 253,787Q160,694 160,560L160,360Q160,238 256,159Q352,80 480,80Q608,80 704,159Q800,238 800,360L800,880L480,880ZM480,800L560,800Q541,775 530.5,744.5Q520,714 520,680L520,638Q510,639 500,639.5Q490,640 480,640Q413,640 350.5,616.5Q288,593 240,545L240,560Q240,660 310,730Q380,800 480,800ZM600,680Q600,730 635,765Q670,800 720,800L720,545Q694,571 664,589.5Q634,608 600,620L600,680ZM440,400Q440,334 395,289Q350,244 286,241Q264,265 252,295Q240,325 240,360Q240,449 312.5,504.5Q385,560 480,560Q575,560 647.5,504.5Q720,449 720,360Q720,325 708,294.5Q696,264 674,240Q610,242 565,288Q520,334 520,400L440,400ZM340,400Q323,400 311.5,388.5Q300,377 300,360Q300,343 311.5,331.5Q323,320 340,320Q357,320 368.5,331.5Q380,343 380,360Q380,377 368.5,388.5Q357,400 340,400ZM620,400Q603,400 591.5,388.5Q580,377 580,360Q580,343 591.5,331.5Q603,320 620,320Q637,320 648.5,331.5Q660,343 660,360Q660,377 648.5,388.5Q637,400 620,400ZM370,182Q404,196 432,219Q460,242 480,271Q500,242 527.5,219Q555,196 589,182Q564,171 536.5,165.5Q509,160 480,160Q451,160 423.5,165.5Q396,171 370,182ZM800,800L800,800L720,800Q670,800 635,800Q600,800 600,800L600,800Q580,800 560,800Q540,800 520,800L520,800Q520,800 578.5,800Q637,800 720,800L800,800ZM480,800Q380,800 310,730Q240,660 240,560L240,560Q240,660 310,730Q380,800 480,800Q540,800 550,800Q560,800 560,800L560,800Q560,800 560,800Q560,800 560,800L480,800ZM600,680L600,680Q600,730 635,765Q670,800 720,800L720,800Q670,800 635,765Q600,730 600,680ZM480,271Q480,271 480,271Q480,271 480,271Q480,271 480,271Q480,271 480,271Q480,271 480,271Q480,271 480,271Q480,271 480,271Q480,271 480,271Z"/>
</vector>
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M508,760L732,760Q725,786 708,802Q691,818 664,822L228,875Q195,880 168.5,859.5Q142,839 138,806L85,369Q81,336 101,310Q121,284 154,280L200,274L200,354L164,359Q164,359 164,359Q164,359 164,359L218,796Q218,796 218,796Q218,796 218,796L508,760ZM360,680Q327,680 303.5,656.5Q280,633 280,600L280,160Q280,127 303.5,103.5Q327,80 360,80L800,80Q833,80 856.5,103.5Q880,127 880,160L880,600Q880,633 856.5,656.5Q833,680 800,680L360,680ZM360,600L800,600Q800,600 800,600Q800,600 800,600L800,160Q800,160 800,160Q800,160 800,160L360,160Q360,160 360,160Q360,160 360,160L360,600Q360,600 360,600Q360,600 360,600ZM580,380Q580,380 580,380Q580,380 580,380L580,380Q580,380 580,380Q580,380 580,380L580,380Q580,380 580,380Q580,380 580,380L580,380Q580,380 580,380Q580,380 580,380ZM218,796L218,796L218,796L218,796L218,796Q218,796 218,796Q218,796 218,796ZM581,560Q649,560 696.5,513Q744,466 749,400Q681,400 632.5,447Q584,494 581,560ZM581,560Q578,494 529.5,447Q481,400 413,400Q418,466 465.5,513Q513,560 581,560ZM581,440Q598,440 609.5,428.5Q621,417 621,400L621,390L631,394Q646,400 661.5,397Q677,394 685,380Q694,365 691,348Q688,331 671,324L661,320L671,316Q688,309 690.5,291.5Q693,274 685,260Q676,245 661,242.5Q646,240 631,246L621,250L621,240Q621,223 609.5,211.5Q598,200 581,200Q564,200 552.5,211.5Q541,223 541,240L541,250L531,246Q516,240 501,242.5Q486,245 477,260Q469,274 471.5,291.5Q474,309 491,316L501,320L491,324Q474,331 471,348Q468,365 477,380Q485,394 500.5,397Q516,400 531,394L541,390L541,400Q541,417 552.5,428.5Q564,440 581,440ZM581,360Q564,360 552.5,348.5Q541,337 541,320Q541,303 552.5,291.5Q564,280 581,280Q598,280 609.5,291.5Q621,303 621,320Q621,337 609.5,348.5Q598,360 581,360Z"/>
</vector>
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M342,800L618,800Q618,800 618,800Q618,800 618,800L658,640L302,640L342,800Q342,800 342,800Q342,800 342,800ZM342,880Q314,880 293,863Q272,846 265,819L220,640L740,640L695,819Q688,846 667,863Q646,880 618,880L342,880ZM200,560L760,560Q760,560 760,560Q760,560 760,560L760,480L200,480L200,560Q200,560 200,560Q200,560 200,560ZM480,320Q480,220 550,150Q620,80 720,80Q720,170 663,236Q606,302 520,316L520,400L840,400L840,560Q840,593 816.5,616.5Q793,640 760,640L200,640Q167,640 143.5,616.5Q120,593 120,560L120,400L440,400L440,316Q354,302 297,236Q240,170 240,80Q340,80 410,150Q480,220 480,320Z"/>
</vector>
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M280,680L280,280L680,280L680,680L280,680ZM360,600L600,600L600,360L360,360L360,600ZM200,760L200,840Q167,840 143.5,816.5Q120,793 120,760L200,760ZM120,680L120,600L200,600L200,680L120,680ZM120,520L120,440L200,440L200,520L120,520ZM120,360L120,280L200,280L200,360L120,360ZM200,200L120,200Q120,167 143.5,143.5Q167,120 200,120L200,200ZM280,840L280,760L360,760L360,840L280,840ZM280,200L280,120L360,120L360,200L280,200ZM440,840L440,760L520,760L520,840L440,840ZM440,200L440,120L520,120L520,200L440,200ZM600,840L600,760L680,760L680,840L600,840ZM600,200L600,120L680,120L680,200L600,200ZM760,840L760,760L840,760Q840,793 816.5,816.5Q793,840 760,840ZM760,680L760,600L840,600L840,680L760,680ZM760,520L760,440L840,440L840,520L760,520ZM760,360L760,280L840,280L840,360L760,360ZM760,200L760,120Q793,120 816.5,143.5Q840,167 840,200L760,200Z"/>
</vector>
@@ -3,7 +3,7 @@
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/yellow_500" />
<solid android:color="@color/primary" />
<corners android:radius="8dp" />
<padding
android:bottom="14dp"
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="#f5f5f5" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/black_20" />
<corners android:radius="8dp" />
<padding
android:bottom="8dp"
android:left="12dp"
android:right="12dp"
android:top="8dp" />
</shape>
</item>
</ripple>
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
</ripple>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#802196F3">
android:color="#80FFEB3B">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#f5f5f5" />
@@ -3,7 +3,7 @@
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/yellow_500" />
<solid android:color="@color/primary" />
<corners android:radius="8dp" />
<padding
android:bottom="10dp"
@@ -3,7 +3,7 @@
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/yellow_500" />
<solid android:color="@color/primary" />
<corners android:radius="8dp" />
<padding
android:bottom="18dp"
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#8066BB6A">
android:color="#80FFEB3B">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="#f5f5f5" />
+1 -1
View File
@@ -4,7 +4,7 @@
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/black_20" />
<corners android:radius="8dp" />
<corners android:radius="12dp" />
<padding
android:bottom="14dp"
android:left="16dp"
@@ -3,7 +3,7 @@
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/yellow_500" />
<solid android:color="@color/primary" />
<corners android:radius="8dp" />
<padding
android:bottom="18dp"
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/primary" />
<corners android:radius="8dp" />
<padding
android:bottom="12dp"
android:left="16dp"
android:right="16dp"
android:top="12dp" />
</shape>
</item>
</ripple>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?attr/colorControlHighlight">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/black_20" />
<corners android:radius="8dp" />
<padding
android:bottom="12dp"
android:left="16dp"
android:right="16dp"
android:top="12dp" />
</shape>
</item>
</ripple>
@@ -56,7 +56,30 @@
android:paddingEnd="8dp"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="21:30 | 85%" />
tools:text="21:30" />
<ImageView
android:id="@+id/charging_indicator"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_marginEnd="4dp"
android:src="@drawable/ic_charging_bolt"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/battery_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingEnd="8dp"
android:textColor="@color/white"
android:textSize="14sp"
android:visibility="gone"
tools:text="85%"
tools:visibility="visible" />
<ImageView
android:id="@+id/cast"
@@ -154,5 +154,15 @@
app:spanCount="2"
tools:listitem="@layout/adapter_vod_rect" />
<!-- 搜索结果空状态Lottie动画 -->
<include
android:id="@+id/emptyLayout"
layout="@layout/view_empty_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="-40dp"
android:visibility="gone" />
</RelativeLayout>
</LinearLayout>
+13 -3
View File
@@ -18,7 +18,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_back" />
<TextView
@@ -35,7 +35,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_action_sync" />
<ImageView
@@ -43,7 +43,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_action_delete"
android:visibility="gone"
tools:visibility="visible" />
@@ -65,5 +65,15 @@
android:paddingEnd="8dp"
android:paddingBottom="8dp" />
<!-- 空状态Lottie动画 -->
<include
android:id="@+id/emptyLayout"
layout="@layout/view_empty_lottie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="-40dp"
android:visibility="gone" />
</FrameLayout>
</LinearLayout>
+12 -3
View File
@@ -18,7 +18,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_back" />
<TextView
@@ -35,7 +35,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_action_sync" />
<ImageView
@@ -43,7 +43,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_action_delete"
android:visibility="gone"
tools:visibility="visible" />
@@ -65,5 +65,14 @@
android:paddingEnd="8dp"
android:paddingBottom="8dp" />
<include
android:id="@+id/emptyLayout"
layout="@layout/view_empty_keep"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="-40dp"
android:visibility="gone" />
</FrameLayout>
</LinearLayout>
@@ -19,7 +19,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_back" />
<TextView
@@ -222,11 +222,10 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/tunnelSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_height="wrap_content" />
</LinearLayout>
@@ -249,11 +248,10 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/audioDecodeSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_height="wrap_content" />
</LinearLayout>
@@ -276,11 +274,10 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/aacSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_height="wrap_content" />
</LinearLayout>
@@ -303,11 +300,10 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/danmakuLoadSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_height="wrap_content" />
</LinearLayout>
@@ -4,11 +4,14 @@
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:layout_marginStart="6dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="6dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_item"
android:gravity="center"
android:padding="8dp"
android:singleLine="true"
android:textColor="@color/text"
android:textSize="14sp"
android:textSize="12sp"
tools:text="泥巴" />
+1 -1
View File
@@ -54,7 +54,7 @@
android:layout_marginTop="24dp"
android:background="@drawable/shape_about_button"
android:text="我的GitHub"
android:textColor="#212121"
android:textColor="@color/black"
android:textSize="14sp"
android:padding="12dp"/>
+7 -4
View File
@@ -15,9 +15,12 @@
android:stepSize="1"
android:valueFrom="1"
android:valueTo="10"
app:thumbColor="@color/yellow_500"
app:tickVisible="false"
app:trackColorActive="@color/yellow_500"
app:trackColorInactive="@color/yellow_50" />
app:thumbColor="@color/accent"
app:thumbRadius="10dp"
app:tickVisible="true"
app:tickColor="@color/black_50"
app:trackColorActive="@color/accent"
app:trackColorInactive="@color/white_20"
app:trackHeight="6dp" />
</LinearLayout>
+30 -9
View File
@@ -8,12 +8,30 @@
android:padding="16dp"
tools:background="@color/white">
<TextView
android:layout_width="wrap_content"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/control_speed"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp" />
android:orientation="horizontal"
android:gravity="center_vertical">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/control_speed"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp" />
<TextView
android:id="@+id/speedValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1.0x"
android:textColor="?android:attr/textColorPrimary"
android:textSize="16sp"
android:textStyle="bold" />
</LinearLayout>
<com.google.android.material.slider.Slider
android:id="@+id/speed"
@@ -24,10 +42,13 @@
android:stepSize="0.25"
android:valueFrom="0.5"
android:valueTo="5"
app:thumbColor="@color/yellow_500"
app:tickVisible="false"
app:trackColorActive="@color/yellow_500"
app:trackColorInactive="@color/yellow_50" />
app:thumbColor="@color/accent"
app:thumbRadius="10dp"
app:tickVisible="true"
app:tickColor="@color/black_50"
app:trackColorActive="@color/accent"
app:trackColorInactive="@color/white_20"
app:trackHeight="6dp" />
<TextView
android:id="@+id/parseText"
+6 -2
View File
@@ -15,8 +15,12 @@
android:stepSize="0.5"
android:valueFrom="2"
android:valueTo="5"
app:tickVisible="false"
app:thumbColor="@color/accent"
app:thumbRadius="10dp"
app:tickVisible="true"
app:tickColor="@color/black_50"
app:trackColorActive="@color/accent"
app:trackColorInactive="@color/yellow_50" />
app:trackColorInactive="@color/white_20"
app:trackHeight="6dp" />
</LinearLayout>
+64 -18
View File
@@ -29,50 +29,80 @@
<TextView
android:id="@+id/time1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="56dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_accent"
android:background="@drawable/shape_accent_no_border"
android:tag="5"
android:text="@string/timer_5"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" />
android:textSize="14sp"
android:gravity="center" />
<TextView
android:id="@+id/time2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="56dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_accent"
android:background="@drawable/shape_accent_no_border"
android:tag="15"
android:text="@string/timer_15"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" />
android:textSize="14sp"
android:gravity="center" />
<TextView
android:id="@+id/time3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="56dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_accent"
android:background="@drawable/shape_accent_no_border"
android:tag="30"
android:text="@string/timer_30"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" />
android:textSize="14sp"
android:gravity="center" />
<TextView
android:id="@+id/time4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="56dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_accent"
android:background="@drawable/shape_accent_no_border"
android:tag="60"
android:text="@string/timer_60"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" />
android:textSize="14sp"
android:gravity="center" />
<TextView
android:id="@+id/time5"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_accent_no_border"
android:tag="120"
android:text="@string/timer_120"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp"
android:gravity="center" />
<TextView
android:id="@+id/time6"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_accent_no_border"
android:tag="180"
android:text="@string/timer_180"
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp"
android:gravity="center" />
</LinearLayout>
@@ -96,25 +126,41 @@
android:textStyle="bold"
tools:text="5:00" />
<com.google.android.material.button.MaterialButton
<TextView
android:id="@+id/delay"
style="?attr/materialButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:background="@drawable/shape_timer_delay_button"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:paddingStart="30dp"
android:paddingEnd="30dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:singleLine="true"
android:text="@string/timer_delay"
android:textColor="@color/white" />
android:textColor="@color/black"
android:textSize="14sp" />
<com.google.android.material.button.MaterialButton
<TextView
android:id="@+id/reset"
style="?attr/materialButtonOutlinedStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:background="@drawable/shape_timer_reset_button"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:paddingStart="30dp"
android:paddingEnd="30dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:singleLine="true"
android:text="@string/timer_cancel"
android:textColor="?android:attr/textColorPrimary" />
android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
+51 -72
View File
@@ -44,6 +44,7 @@
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:fillViewport="true"
android:overScrollMode="never"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
@@ -78,7 +79,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:text="(长按输入框可改源名)"
android:text="(单击视频输入框可加源)"
android:textColor="@color/white"
android:textSize="12sp"
android:alpha="0.5" />
@@ -129,7 +130,8 @@
android:background="@drawable/shape_item"
android:padding="16dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_setting_home" />
android:src="@drawable/potted_plant_24px"
android:tint="@color/white" />
<ImageView
android:id="@+id/vodHistory"
@@ -138,11 +140,13 @@
android:background="@drawable/shape_item"
android:padding="16dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_setting_history" />
android:src="@drawable/ic_m3_list_alt"
android:tint="@color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/liveContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
@@ -188,7 +192,8 @@
android:background="@drawable/shape_item"
android:padding="16dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_setting_home" />
android:src="@drawable/potted_plant_24px"
android:tint="@color/white" />
<ImageView
android:id="@+id/liveHistory"
@@ -197,68 +202,11 @@
android:background="@drawable/shape_item"
android:padding="16dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_setting_history" />
android:src="@drawable/ic_m3_list_alt"
android:tint="@color/white" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/wall"
android:layout_width="0dp"
android:layout_height="56dp"
android:layout_marginEnd="12dp"
android:layout_weight="1"
android:background="@drawable/shape_item"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="@string/setting_wall"
android:textColor="@color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/wallUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:gravity="end"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="https://" />
</LinearLayout>
<ImageView
android:id="@+id/wallDefault"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_marginEnd="12dp"
android:background="@drawable/shape_item"
android:padding="16dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_setting_switch" />
<ImageView
android:id="@+id/wallRefresh"
android:layout_width="56dp"
android:layout_height="56dp"
android:background="@drawable/shape_item"
android:padding="16dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_setting_refresh" />
</LinearLayout>
<!-- 应用设置分组 -->
<TextView
@@ -292,7 +240,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_setting_player"
android:src="@drawable/hive_24px"
android:tint="@color/white" />
<TextView
@@ -318,7 +266,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_setting_incognito"
android:src="@drawable/domino_mask_24px"
android:tint="@color/white" />
<TextView
@@ -329,11 +277,42 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/incognitoSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<!-- 显示直播 -->
<LinearLayout
android:id="@+id/liveTabVisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingTop="16dp"
android:paddingBottom="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_nav_live"
android:tint="@color/white" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_weight="1"
android:text="@string/setting_live_tab_visible"
android:textColor="@color/white"
android:textSize="16sp" />
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/liveTabVisibleSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
@@ -350,7 +329,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_setting_size"
android:src="@drawable/select_all_24px"
android:tint="@color/white" />
<TextView
@@ -405,7 +384,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_setting_doh"
android:src="@drawable/globe_book_24px"
android:tint="@color/white" />
<TextView
@@ -475,7 +454,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_folder"
android:src="@drawable/owl_24px"
android:tint="@color/white" />
<TextView
@@ -529,7 +508,7 @@
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_file"
android:src="@drawable/photo_prints_24px"
android:tint="@color/white" />
<TextView
@@ -610,7 +589,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:src="@drawable/ic_control_info"
android:src="@drawable/egg_24px"
android:tint="@color/white" />
<TextView
@@ -354,11 +354,10 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/tunnelSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_height="wrap_content" />
</LinearLayout>
@@ -387,11 +386,10 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/audioDecodeSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_height="wrap_content" />
</LinearLayout>
@@ -420,11 +418,10 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/aacSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_height="wrap_content" />
</LinearLayout>
@@ -453,11 +450,10 @@
android:textColor="@color/white"
android:textSize="16sp" />
<androidx.appcompat.widget.SwitchCompat
<com.fongmi.android.tv.ui.custom.CustomSwitch
android:id="@+id/danmakuLoadSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/M3SwitchStyle" />
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
+16 -13
View File
@@ -28,7 +28,7 @@
android:id="@+id/logo"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_logo" />
<LinearLayout
@@ -66,14 +66,14 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_action_keep" />
<ImageView
android:id="@+id/history"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_action_history" />
</LinearLayout>
@@ -112,11 +112,13 @@
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginBottom="16dp"
android:src="@drawable/ic_logo" />
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottieAnimation"
android:layout_width="180dp"
android:layout_height="180dp"
app:lottie_fileName="lottie_empty_1.json"
app:lottie_loop="true"
app:lottie_autoPlay="true" />
<TextView
android:layout_width="wrap_content"
@@ -124,16 +126,17 @@
android:gravity="center"
android:text="@string/source_hint"
android:textColor="@color/white"
android:textSize="16sp" />
android:textSize="14sp" />
<Button
android:id="@+id/add_source_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="200dp"
android:layout_height="48dp"
android:layout_marginTop="16dp"
android:backgroundTint="@color/primary"
android:text="@string/add_source"
android:textColor="@color/black" />
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
<ImageView
@@ -141,7 +144,7 @@
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_gravity="center"
android:background="?attr/selectableItemBackgroundBorderless"
android:background="@drawable/shape_action_background"
android:src="@drawable/ic_action_retry"
android:visibility="gone" />
@@ -23,6 +23,8 @@
android:layout_marginEnd="8dp"
android:layout_weight="1"
app:bar_height="2dp"
app:scrubber_enabled_size="12dp"
app:scrubber_disabled_size="12dp"
app:played_color="#FFEB3B"
app:scrubber_color="#FFEB3B"
app:buffered_color="#80FFEB3B" />
+23 -1
View File
@@ -56,8 +56,30 @@
android:paddingEnd="8dp"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="21:30" />
<ImageView
android:id="@+id/charging_indicator"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_marginEnd="2dp"
android:src="@drawable/ic_charging_bolt"
android:visibility="gone"
tools:text="21:30 | 85%" />
tools:visibility="visible" />
<TextView
android:id="@+id/battery_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:paddingEnd="8dp"
android:textColor="@color/white"
android:textSize="16sp"
android:visibility="gone"
tools:text="85%"
tools:visibility="visible" />
<ImageView
android:id="@+id/cast"
+3 -1
View File
@@ -43,7 +43,9 @@
<string name="timer_15">15 分钟</string>
<string name="timer_30">30 分钟</string>
<string name="timer_60">1 小时</string>
<string name="timer_delay">延长 5 分钟</string>
<string name="timer_120">2 小时</string>
<string name="timer_180">3 小时</string>
<string name="timer_delay">延长 15 分钟</string>
<string name="timer_cancel">取消定时器</string>
<!-- Hint -->
+3 -1
View File
@@ -41,7 +41,9 @@
<string name="timer_15">15 分鐘</string>
<string name="timer_30">30 分鐘</string>
<string name="timer_60">1 小時</string>
<string name="timer_delay">延長 5 分鐘</string>
<string name="timer_120">2 小時</string>
<string name="timer_180">3 小時</string>
<string name="timer_delay">延長 15 分鐘</string>
<string name="timer_cancel">取消定時器</string>
<!-- Hint -->
+3
View File
@@ -5,5 +5,8 @@
<color name="accent">#FFEB3B</color>
<color name="indicator">@color/white_80</color>
<color name="yellow_50">#4DFFEB3B</color>
<color name="white_50">#80FFFFFF</color>
<color name="black_50">#80000000</color>
<color name="white_30">#4DFFFFFF</color>
</resources>
+3 -1
View File
@@ -43,7 +43,9 @@
<string name="timer_15">15 minutes</string>
<string name="timer_30">30 minutes</string>
<string name="timer_60">1 hour</string>
<string name="timer_delay">Add 5 minutes</string>
<string name="timer_120">2 hours</string>
<string name="timer_180">3 hours</string>
<string name="timer_delay">Add 15 minutes</string>
<string name="timer_cancel">Cancel timer</string>
<!-- Hint -->
+8 -13
View File
@@ -17,6 +17,7 @@
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primaryDark</item>
<item name="colorAccent">@color/accent</item>
<item name="colorControlHighlight">@color/white_20</item>
<item name="android:windowBackground">@null</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:navigationBarColor">@color/transparent</item>
@@ -30,12 +31,8 @@
<style name="Control.Action">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
<item name="android:background">@drawable/shape_action_background</item>
<item name="android:padding">8dp</item>
<item name="android:shadowColor">@color/grey_200</item>
<item name="android:shadowDx">1</item>
<item name="android:shadowDy">1</item>
<item name="android:shadowRadius">0.5</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">14sp</item>
</style>
@@ -78,14 +75,12 @@
<item name="android:background">@null</item>
</style>
<!-- M3 Switch Style -->
<style name="M3SwitchStyle" parent="Widget.AppCompat.CompoundButton.Switch">
<item name="android:thumb">@drawable/m3_switch_thumb</item>
<item name="track">@drawable/m3_switch_track</item>
<item name="android:switchMinWidth">52dp</item>
<item name="android:switchPadding">8dp</item>
<item name="android:colorControlActivated">#FFEB3B</item>
<item name="android:colorControlHighlight">@android:color/transparent</item>
<!-- M3 Switch Style (Material Design) - 使用CustomSwitch完全自定义 -->
<style name="M3SwitchStyle" parent="Widget.AppCompat.CompoundButton.CheckBox">
<item name="android:button">@null</item>
<item name="android:background">@drawable/custom_switch_bg</item>
<item name="android:minHeight">30dp</item>
<item name="android:minWidth">50dp</item>
</style>
<!-- 自定义数据源按钮样式 -->
+3 -3
View File
@@ -9,7 +9,7 @@ tasks.register('clean', Delete) {
}
project.ext {
gsonVersion = '2.13.1'
media3Version = '1.8.0'
okhttpVersion = '5.1.0'
gsonVersion = '2.11.0'
media3Version = '1.4.1'
okhttpVersion = '4.12.0'
}
@@ -14,12 +14,10 @@ import okhttp3.Response;
public class Github {
public static final String URL = "https://raw.githubusercontent.com/Tosencen/XMBOX/main";
public static final String API_URL = "https://api.github.com/repos/Tosencen/XMBOX/releases/latest";
public static final String URL = "https://raw.githubusercontent.com/Tosencen/XMBOX-Release/main";
// 国内镜像地址 - 使用Gitee作为示例实际应替换为您的镜像地址
public static final String CN_URL = "https://gitee.com/tosencen/XMBOX/raw/main";
public static final String CN_API_URL = "https://gitee.com/api/v5/repos/tosencen/XMBOX/releases/latest";
// 国内镜像地址 - 使用Gitee作为镜像
public static final String CN_URL = "https://gitee.com/ochenoktochen/XMBOX-Release/raw/main";
// 存储测速结果
private static Boolean useCnMirror = null;
@@ -34,9 +32,6 @@ public class Github {
return CN_URL + "/" + path + "/" + name;
}
public static String getReleaseApi() {
return useCnMirror() ? CN_API_URL : API_URL;
}
public static String getJson(boolean dev, String name) {
if (useCnMirror()) {
@@ -72,33 +67,44 @@ public class Github {
private static boolean testMirrorSpeed() {
try {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(3, TimeUnit.SECONDS)
.readTimeout(3, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS) // 增加超时时间
.readTimeout(5, TimeUnit.SECONDS)
.build();
// 测试国际源
long startTime = System.currentTimeMillis();
boolean intlSuccess = testUrl(client, URL + "/README.md");
long intlTime = System.currentTimeMillis() - startTime;
Logger.d("Github: International mirror test - success: " + intlSuccess + ", time: " + intlTime + "ms");
// 测试国内源
startTime = System.currentTimeMillis();
boolean cnSuccess = testUrl(client, CN_URL + "/README.md");
long cnTime = System.currentTimeMillis() - startTime;
Logger.d("Github: Chinese mirror test - success: " + cnSuccess + ", time: " + cnTime + "ms");
// 如果两个都成功选择更快的
if (intlSuccess && cnSuccess) {
return cnTime < intlTime;
boolean useCn = cnTime < intlTime;
Logger.d("Github: Both mirrors work, choosing " + (useCn ? "Chinese" : "International") + " mirror");
return useCn;
}
// 如果只有一个成功选择成功的那个
if (intlSuccess) return false;
if (cnSuccess) return true;
if (intlSuccess) {
Logger.d("Github: Only international mirror works, using it");
return false;
}
if (cnSuccess) {
Logger.d("Github: Only Chinese mirror works, using it");
return true;
}
// 如果都失败默认国际源
Logger.e("Github: Both mirrors failed, defaulting to international");
return false;
} catch (Exception e) {
e.printStackTrace();
Logger.e("Github: Mirror test exception: " + e.getMessage());
return false; // 出错时默认使用国际源
}
}
@@ -0,0 +1,35 @@
package com.github.catvod.utils;
import android.util.Log;
public class Logger {
private static final String TAG = "XMBOX";
public static void d(String msg) {
Log.d(TAG, msg);
}
public static void e(String msg) {
Log.e(TAG, msg);
}
public static void e(String msg, Throwable tr) {
Log.e(TAG, msg, tr);
}
public static void i(String msg) {
Log.i(TAG, msg);
}
public static void v(String msg) {
Log.v(TAG, msg);
}
public static void w(String msg) {
Log.w(TAG, msg);
}
public static void w(String msg, Throwable tr) {
Log.w(TAG, msg, tr);
}
}
+18
View File
@@ -0,0 +1,18 @@
#!/bin/bash
# GitHub CLI 创建 Release 脚本
# 使用前请先运行: gh auth login
echo "创建 XMBOX v3.0.8 Release..."
gh release create v3.0.8 \
--title "XMBOX v3.0.8 - UI交互体验全面优化" \
--notes-file RELEASE_NOTES_v3.0.8.md \
--draft \
~/Desktop/mobile-arm64_v8a-v3.0.8.apk \
~/Desktop/mobile-armeabi_v7a-v3.0.8.apk \
~/Desktop/leanback-arm64_v8a-v3.0.8.apk \
~/Desktop/leanback-armeabi_v7a-v3.0.8.apk
echo "Release 创建完成(草稿状态)"
echo "请在 GitHub 上检查并发布"
-1
View File
@@ -1 +0,0 @@
-42
View File
@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 主题颜色 -->
<color name="primary">#FFEB3B</color>
<color name="primaryDark">#FDD835</color>
<color name="accent">#FFEB3B</color>
<!-- 基本颜色 -->
<color name="white">#FFFFFFFF</color>
<color name="black">#FF000000</color>
<color name="transparent">#00000000</color>
<!-- 带透明度的颜色 -->
<color name="white_10">#1AFFFFFF</color>
<color name="white_80">#CCFFFFFF</color>
<color name="white_90">#E6FFFFFF</color>
<color name="black_10">#1A000000</color>
<color name="black_20">#33000000</color>
<color name="black_50">#80000000</color>
<color name="black_60">#99000000</color>
<color name="black_80">#CC000000</color>
<color name="black_90">#E6000000</color>
<!-- 文本颜色 -->
<color name="text_primary">#FFFFFFFF</color>
<color name="text_secondary">#B3FFFFFF</color>
<color name="text_dark">#FF212121</color>
<!-- 背景颜色 -->
<color name="bg_dark">#FF121212</color>
<color name="bg_light">#FFFAFAFA</color>
<!-- 控件颜色 -->
<color name="ripple">#33FFFFFF</color>
<color name="divider">#1FFFFFFF</color>
<color name="scrim">#52000000</color>
<!-- 状态颜色 -->
<color name="success">#FF4CAF50</color>
<color name="warning">#FFFFEB3B</color>
<color name="error">#FFF44336</color>
</resources>
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-175
View File
@@ -1,175 +0,0 @@
plugins {
id 'com.android.application'
}
android {
namespace 'com.fongmi.android.tv'
compileSdk 35
flavorDimensions = ["mode", "abi"]
signingConfigs {
release {
storeFile file("../keystore/release.jks")
storePassword "xmbox123"
keyAlias "xmbox"
keyPassword "xmbox123"
}
}
defaultConfig {
applicationId "com.fongmi.android.tv"
minSdk 21
//noinspection ExpiredTargetSdkVersion
targetSdk 28
versionCode 303
versionName "3.0.3"
// EventBus索引生成问题
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
}
productFlavors {
leanback {
dimension "mode"
}
mobile {
dimension "mode"
}
arm64_v8a {
dimension "abi"
ndk { abiFilters "arm64-v8a" }
}
armeabi_v7a {
dimension "abi"
ndk { abiFilters "armeabi-v7a" }
}
}
buildFeatures {
buildConfig true
viewBinding true
}
buildTypes {
debug {
//
debuggable true
minifyEnabled false
shrinkResources false
}
release {
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
resources {
exclude 'META-INF/beans.xml'
exclude 'META-INF/versions/9/OSGI-INF/MANIFEST.MF'
}
}
android.applicationVariants.configureEach { variant ->
variant.outputs.configureEach { output ->
outputFileName = "${variant.productFlavors[0].name}-${variant.productFlavors[1].name}.apk"
}
}
configurations.configureEach {
resolutionStrategy {
force 'com.squareup.okhttp3:okhttp:' + okhttpVersion
}
}
lint {
disable 'UnsafeOptInUsageError'
}
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// EventIndex类
sourceSets {
main {
java.srcDirs += ['../extracted_files/java']
jniLibs.srcDirs += ['../extracted_files/libs']
}
}
}
dependencies {
// EventBus注解处理器EventIndex类的问题
implementation 'org.greenrobot:eventbus:3.3.1'
implementation fileTree(dir: "libs", include: ["*.aar"])
implementation project(':catvod')
//implementation project(':chaquo')
implementation project(':quickjs')
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.media:media:1.7.0'
implementation 'androidx.media3:media3-common:' + media3Version
implementation 'androidx.media3:media3-container:' + media3Version
implementation 'androidx.media3:media3-database:' + media3Version
implementation 'androidx.media3:media3-datasource:' + media3Version
implementation 'androidx.media3:media3-datasource-okhttp:' + media3Version
implementation 'androidx.media3:media3-datasource-rtmp:' + media3Version
implementation 'androidx.media3:media3-decoder:' + media3Version
implementation 'androidx.media3:media3-effect:' + media3Version
implementation 'androidx.media3:media3-exoplayer:' + media3Version
implementation 'androidx.media3:media3-exoplayer-dash:' + media3Version
implementation 'androidx.media3:media3-exoplayer-hls:' + media3Version
implementation 'androidx.media3:media3-exoplayer-rtsp:' + media3Version
implementation 'androidx.media3:media3-exoplayer-smoothstreaming:' + media3Version
implementation 'androidx.media3:media3-extractor:' + media3Version
implementation 'androidx.media3:media3-ui:' + media3Version
implementation 'androidx.room:room-runtime:2.7.1'
implementation 'cat.ereza:customactivityoncrash:2.4.0'
implementation('com.github.anilbeesetti.nextlib:nextlib-media3ext:0.8.4') { exclude group: 'androidx.media3' }
implementation 'com.github.bassaer:materialdesigncolors:1.0.0'
implementation 'com.github.bumptech.glide:glide:4.16.0'
implementation 'com.github.bumptech.glide:annotations:4.16.0'
implementation('com.github.bumptech.glide:avif-integration:4.16.0') { exclude group: 'org.aomedia.avif.android', module: 'avif' }
implementation 'com.github.bumptech.glide:okhttp3-integration:4.16.0'
implementation 'com.github.jahirfiquitiva:TextDrawable:1.0.3'
implementation 'com.github.thegrizzlylabs:sardine-android:0.9'
implementation 'com.github.teamnewpipe:NewPipeExtractor:v0.24.6'
implementation 'com.google.android.material:material:1.12.0'
implementation 'com.google.zxing:core:3.5.3'
implementation 'com.guolindev.permissionx:permissionx:1.8.0'
implementation 'com.hierynomus:smbj:0.14.0'
implementation 'io.antmedia:rtmp-client:3.2.0'
implementation 'javax.servlet:javax.servlet-api:3.1.0'
implementation 'org.aomedia.avif.android:avif:1.1.1.14d8e3c4'
implementation 'org.eclipse.jetty:jetty-client:8.1.21.v20160908'
implementation('org.eclipse.jetty:jetty-server:8.1.21.v20160908') { exclude group: 'org.eclipse.jetty.orbit', module: 'javax.servlet' }
implementation('org.eclipse.jetty:jetty-servlet:8.1.21.v20160908') { exclude group: 'org.eclipse.jetty.orbit', module: 'javax.servlet' }
implementation 'org.fourthline.cling:cling-core:2.1.1'
implementation 'org.fourthline.cling:cling-support:2.1.1'
implementation 'org.nanohttpd:nanohttpd:2.3.1'
implementation('org.simpleframework:simple-xml:2.7.1') { exclude group: 'stax', module: 'stax-api' exclude group: 'xpp3', module: 'xpp3' }
leanbackImplementation 'androidx.leanback:leanback:1.2.0'
leanbackImplementation 'com.github.JessYanCoding:AndroidAutoSize:1.2.1'
mobileImplementation 'androidx.biometric:biometric:1.1.0'
mobileImplementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
mobileImplementation 'com.google.android.flexbox:flexbox:3.0.0'
mobileImplementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false }
// EventBus的
annotationProcessor 'androidx.room:room-compiler:2.7.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.4'
implementation 'io.noties.markwon:core:4.6.2'
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 B

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

-82
View File
@@ -1,82 +0,0 @@
#!/bin/bash
# XMBOX项目设置脚本
# 这个脚本会自动复制提取的文件到正确的位置
echo "开始设置XMBOX项目..."
# 确保我们在正确的目录
cd "$(dirname "$0")"
EXTRACT_DIR=$(pwd)
PROJECT_DIR=$(dirname "$EXTRACT_DIR")
echo "提取目录: $EXTRACT_DIR"
echo "项目目录: $PROJECT_DIR"
# 创建必要的目录
echo "创建必要的目录..."
mkdir -p "$PROJECT_DIR/app/libs/arm64-v8a"
mkdir -p "$PROJECT_DIR/app/src/main/java/com/fongmi/android/tv/event"
mkdir -p "$PROJECT_DIR/app/src/main/res/values"
# 复制native库文件
echo "复制native库文件..."
if [ -d "$EXTRACT_DIR/libs/arm64-v8a" ]; then
cp -R "$EXTRACT_DIR/libs/arm64-v8a/"* "$PROJECT_DIR/app/libs/arm64-v8a/" || echo "复制native库失败"
echo "Native库复制完成"
else
echo "libs/arm64-v8a 目录不存在"
fi
# 复制EventIndex类
echo "复制EventIndex类..."
if [ -f "$EXTRACT_DIR/java/com/fongmi/android/tv/event/EventIndex.java" ]; then
cp "$EXTRACT_DIR/java/com/fongmi/android/tv/event/EventIndex.java" "$PROJECT_DIR/app/src/main/java/com/fongmi/android/tv/event/" || echo "复制EventIndex类失败"
echo "EventIndex类复制完成"
else
echo "EventIndex.java 文件不存在"
fi
# 复制颜色资源文件
echo "复制颜色资源文件..."
if [ -f "$EXTRACT_DIR/colors.xml" ]; then
cp "$EXTRACT_DIR/colors.xml" "$PROJECT_DIR/app/src/main/res/values/" || echo "复制颜色资源文件失败"
echo "颜色资源文件复制完成"
else
echo "colors.xml 文件不存在"
fi
# 备份原有的build.gradle文件
echo "备份原有的build.gradle文件..."
if [ -f "$PROJECT_DIR/app/build.gradle" ]; then
cp "$PROJECT_DIR/app/build.gradle" "$PROJECT_DIR/app/build.gradle.bak" || echo "备份build.gradle失败"
echo "build.gradle备份完成"
else
echo "app/build.gradle 文件不存在"
fi
# 将修改后的build.gradle复制到项目中
echo "复制修改后的build.gradle文件..."
if [ -f "$EXTRACT_DIR/modified_build.gradle" ]; then
cp "$EXTRACT_DIR/modified_build.gradle" "$PROJECT_DIR/app/build.gradle" || echo "复制build.gradle失败"
echo "build.gradle复制完成"
else
echo "modified_build.gradle 文件不存在"
fi
# 修改gradle.properties文件
echo "修改gradle.properties文件..."
if [ -f "$PROJECT_DIR/gradle.properties" ]; then
# 添加Java兼容性配置
echo "" >> "$PROJECT_DIR/gradle.properties"
echo "# 允许访问JDK内部API" >> "$PROJECT_DIR/gradle.properties"
echo "android.injected.testOnly=false" >> "$PROJECT_DIR/gradle.properties"
echo "android.enableR8.fullMode=false" >> "$PROJECT_DIR/gradle.properties"
echo "org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED" >> "$PROJECT_DIR/gradle.properties"
echo "gradle.properties修改完成"
else
echo "gradle.properties 文件不存在"
fi
echo "设置完成!您现在可以尝试构建项目了。"
echo "请运行: ./gradlew assembleMobileArm64_v8aDebug --info"
+1 -1
View File
@@ -499,6 +499,6 @@ public class Hook extends PackageManager {
@Override
public boolean canRequestPackageInstalls() {
return false;
return true; // 允许请求安装包权限
}
}