[
  {
    "path": ".editorconfig",
    "content": "﻿root = true\n\n[*]\ncharset = utf-8\n\n\n[*.cs]\n\ndotnet_diagnostic.CS8600.severity = none\ndotnet_diagnostic.CA1416.severity = none\ndotnet_diagnostic.CS8602.severity = none\ndotnet_diagnostic.CS8851.severity = none\ndotnet_diagnostic.CA1822.severity = none\ndotnet_diagnostic.CA1839.severity = none\ndotnet_diagnostic.IDE0090.severity = none\ndotnet_diagnostic.IDE0220.severity = none\ndotnet_diagnostic.IDE0044.severity = none\n\n# CS8601: 引用类型赋值可能为 null。\ndotnet_diagnostic.CS8601.severity = none\n\n# CS8603: 可能返回 null 引用。\ndotnet_diagnostic.CS8603.severity = none\n\n# CS8625: 无法将 null 字面量转换为非 null 的引用类型。\ndotnet_diagnostic.CS8625.severity = none\n\n# CS8618: 在退出构造函数时，不可为 null 的字段必须包含非 null 值。请考虑声明为可以为 null。\ndotnet_diagnostic.CS8618.severity = none\n\n# IDE1006: 命名样式\ndotnet_diagnostic.IDE1006.severity = none\n\n# CS8612: 类型中引用类型的为 Null 性与隐式实现的成员不匹配。\ndotnet_diagnostic.CS8612.severity = none\n\n# CS8767: 参数类型中引用类型的为 Null 性与隐式实现的成员不匹配(可能是由于为 Null 性特性)。\ndotnet_diagnostic.CS8767.severity = none\n\n# CS0642: 空语句可能有错误\ndotnet_diagnostic.CS0642.severity = none\n\n# IDE0063: 使用简单的 \"using\" 语句\ndotnet_diagnostic.IDE0063.severity = none\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto eol=lf charset=utf-8\n\n*.axaml text charset=utf-8\n*.cs text charset=utf-8"
  },
  {
    "path": ".github/workflows/publish.yml",
    "content": "name: Publish\n\non:\n  workflow_dispatch:\n  push:\n    branches: [\"main\"]\n\nenv:\n  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true\n  DOTNET_CLI_TELEMETRY_OPTOUT: true\n\njobs:\n  time:\n    runs-on: ubuntu-latest\n    outputs:\n      v: ${{ steps.date.outputs.time }}\n      y: ${{ steps.date.outputs.y }}\n      md: ${{ steps.date.outputs.md }}\n      hm: ${{ steps.date.outputs.hm }}\n      sv: ${{ steps.date.outputs.sv }}\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - name: Generate Version\n        id: date\n        run: |\n          echo \"time=$(TZ='Asia/Shanghai' date +'%Y.%m.%d.%H.%M')\" >> $GITHUB_OUTPUT\n          echo \"y=$(TZ='Asia/Shanghai' date +'%Y')\" >> $GITHUB_OUTPUT\n          echo \"md=$(TZ='Asia/Shanghai' date +'%m%d')\" >> $GITHUB_OUTPUT\n          echo \"hm=$(TZ='Asia/Shanghai' date +'%H%M')\" >> $GITHUB_OUTPUT\n          echo \"sv=$(TZ='Asia/Shanghai' date +'%Y.%m.%d.%H%M')\" >> $GITHUB_OUTPUT\n\n      - name: Display Version\n        run: |\n          echo \"Version: ${{ steps.date.outputs.time }}\"\n\n  linux-appimage:\n    runs-on: ubuntu-22.04\n    needs: time\n    strategy:\n      matrix:\n        arch: [x64, arm, arm64]\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: \"8.0.x\"\n      - name: Write Version\n        run: echo \"${{ needs.time.outputs.v }}\" > ./YMCL.Main/YMCL/Public/Texts/DateTime.txt\n      - name: Install Dependencies\n        run: |\n          dotnet tool install -g KuiperZone.PupNet --version 1.8.0\n          sudo apt-get update -qq\n          sudo apt-get install -y fuse\n      - name: Build AppImage (${{ matrix.arch }})\n        run: |\n          cd ./YMCL.Main/YMCL.Desktop\n          ~/.dotnet/tools/pupnet --runtime linux-${{ matrix.arch }} --kind appimage -o YMCL.Desktop.linux.${{ matrix.arch }}.AppImage -y --app-version ${{ needs.time.outputs.y }}.${{ needs.time.outputs.md }}.${{ needs.time.outputs.hm }}\n      - name: Upload Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: linux-appimage-${{ matrix.arch }}\n          path: YMCL.Main/YMCL.Desktop/Deploy/OUT/*\n          retention-days: 1\n\n  linux-macos:\n    runs-on: ubuntu-22.04\n    needs: time\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: \"8.0.x\"\n      - name: Write Version\n        run: echo \"${{ needs.time.outputs.v }}\" > ./YMCL.Main/YMCL/Public/Texts/DateTime.txt\n      - name: Build macOS App (x64)\n        run: |\n          cd ./YMCL.Main/YMCL.Desktop\n          dotnet restore -r osx-x64\n          dotnet msbuild -t:BundleApp -p:RuntimeIdentifier=osx-x64 -property:Configuration=Release -p:SelfContained=true -p:Version=${{ needs.time.outputs.sv }}\n          cp ./Icon-Border.icns \"./bin/Release/net8.0/osx-x64/publish/YMCL.app/Contents/Resources/Icon-Border.icns\"\n          cd ./bin/Release/net8.0/osx-x64/publish/\n          zip -9 -r ../../YMCL.Desktop.osx.mac.x64.app.zip \"./YMCL.app\"\n      - name: Upload Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: linux-macos-artifacts\n          path: YMCL.Main/YMCL.Desktop/bin/Release/net8.0/YMCL.Desktop.osx.mac.x64.app.zip\n          retention-days: 1\n\n  linux-windows:\n    runs-on: ubuntu-22.04\n    needs: time\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: \"8.0.x\"\n      - name: Write Version\n        run: echo \"${{ needs.time.outputs.v }}\" > ./YMCL.Main/YMCL/Public/Texts/DateTime.txt\n      - name: Build Windows Executables\n        run: |\n          cd ./YMCL.Main/YMCL.Desktop\n          for arch in win-x86 win-x64 win-arm64; do\n            dotnet publish -c Release -r $arch /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true /p:SelfContained=false /p:Version=${{ needs.time.outputs.sv }}\n            mv ./bin/Release/net8.0/$arch/publish/YMCL.Desktop.exe ./bin/Release/net8.0/YMCL.win.${arch#win-}.portable.exe\n          done\n      - name: Upload Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: linux-windows-artifacts\n          path: YMCL.Main/YMCL.Desktop/bin/Release/net8.0/*.exe\n          retention-days: 1\n\n  win:\n    runs-on: windows-latest\n    needs: time\n    strategy:\n      matrix:\n        arch: [x64, x86, arm64]\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n      - name: Setup .NET\n        uses: actions/setup-dotnet@v4\n        with:\n          dotnet-version: \"8.0.x\"\n      - name: Install Inno Setup\n        uses: ConorMacBride/install-package@v1\n        with:\n          choco: innosetup --version 6.7.0\n      - name: Apply Chinese Localization\n        run: Copy-Item \"./Assets/Default.isl\" \"C:\\Program Files (x86)\\Inno Setup 6\\Default.isl\" -Force\n      - name: Install PupNet\n        run: dotnet tool install -g KuiperZone.PupNet --version 1.8.0\n      - name: Write Version\n        run: echo \"${{ needs.time.outputs.v }}\" > ./YMCL.Main/YMCL/Public/Texts/DateTime.txt\n        shell: bash\n      - name: Build Installer (${{ matrix.arch }})\n        run: |\n          cd ./YMCL.Main/YMCL.Desktop\n          pupnet -r win-${{ matrix.arch }} -k setup -y -o YMCL.Desktop.win.${{ matrix.arch }}.installer.exe --app-version ${{ needs.time.outputs.y }}.${{ needs.time.outputs.md }}.${{ needs.time.outputs.hm }}\n      - name: Upload Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: win-artifacts-${{ matrix.arch }}\n          path: ./YMCL.Main/YMCL.Desktop/Deploy/OUT/*\n          retention-days: 1\n\n  mac:\n    needs: [linux-macos]\n    runs-on: macos-latest\n    steps:\n      - name: Download macOS App\n        uses: actions/download-artifact@v4\n        with:\n          name: linux-macos-artifacts\n          path: ./YMCL.Release/\n      - name: Extract macOS App\n        run: unzip -n ./YMCL.Release/YMCL.Desktop.osx.mac.x64.app.zip -d ./app.x64\n      - name: Create DMG (x64)\n        uses: L-Super/create-dmg-actions@v1.0.3\n        with:\n          dmg_name: \"YMCL.Desktop.osx.mac.x64\"\n          src_dir: \"./app.x64/YMCL.app\"\n      - name: Upload Artifacts\n        uses: actions/upload-artifact@v4\n        with:\n          name: osx-artifacts\n          path: ./YMCL.Desktop.osx.mac.x64.dmg\n          retention-days: 1\n\n  publish:\n    needs: [linux-appimage, linux-macos, linux-windows, win, mac, time]\n    runs-on: ubuntu-latest\n    steps:\n      - name: Generate Release Date\n        id: gdate\n        run: |\n          echo \"date=$(date +'%Y-%m-%d.%H-%M-%S')\" >> $GITHUB_OUTPUT\n          echo \"title=$(date +'%Y.%m.%d.%H.%M')\" >> $GITHUB_OUTPUT\n      - name: Download All Artifacts\n        uses: actions/download-artifact@v4\n        with:\n          path: ./YMCL.Release/\n      - name: List Release Files\n        run: find ./YMCL.Release/ -type f -name \"*.exe\" -o -name \"*.dmg\" -o -name \"*.AppImage\" -o -name \"*.zip\"\n      - name: Rename Artifacts (Remove Desktop)\n        run: |\n          cd ./YMCL.Release/\n          find . -type f \\( -name \"*.exe\" -o -name \"*.dmg\" -o -name \"*.AppImage\" -o -name \"*.zip\" \\) | while read file; do\n            newname=$(echo \"$file\" | sed 's/YMCL\\.Desktop\\./YMCL./g')\n            if [ \"$file\" != \"$newname\" ]; then\n              mv \"$file\" \"$newname\"\n            fi\n          done\n      - name: Publish Release\n        uses: marvinpinto/action-automatic-releases@latest\n        with:\n          repo_token: \"${{ secrets.TOKEN }}\"\n          title: \"v${{ needs.time.outputs.v }}\"\n          automatic_release_tag: \"AutoPublish\"\n          prerelease: false\n          files: |\n            YMCL.Release/**/*.exe\n            YMCL.Release/**/*.dmg\n            YMCL.Release/**/*.AppImage\n            YMCL.Release/**/*.zip\n"
  },
  {
    "path": ".gitignore",
    "content": "bin/\nobj/\n.vs/*\n.idea/*\n*.suo\n*.bin\n*.user"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n}\n"
  },
  {
    "path": "Assets/Default.isl",
    "content": "; *** Inno Setup 版本 6.5.0+ 中文消息 ***\n;\n; 要下载此文件的用户贡献翻译，请访问：\n;   https://jrsoftware.org/files/istrans/\n;\n; 注意：翻译此文本时，不要在原本没有句号 (.) 的消息末尾添加句号，\n; 因为 Inno Setup 会自动添加句号（添加句号会导致显示两个句号）\n\n[LangOptions]\n; 以下三个条目非常重要。请务必阅读并理解\n; 帮助文件中的\"[LangOptions] 部分\"主题。\nLanguageName=简体中文\nLanguageID=$0804\n; 应尽可能设置 LanguageCodePage，即使此文件是 Unicode\n; 对于中文简体，设置为 936（GBK 编码）\nLanguageCodePage=936\n; 如果您要翻译的语言需要特殊的字体或\n; 大小，请取消注释以下任何条目并相应更改。\n;DialogFontName=\n;DialogFontSize=9\n;DialogFontBaseScaleWidth=7\n;DialogFontBaseScaleHeight=15\n;WelcomeFontName=Segoe UI\n;WelcomeFontSize=14\n\n[Messages]\n\n; *** 应用程序标题\nSetupAppTitle=安装\nSetupWindowTitle=安装 - %1\nUninstallAppTitle=卸载\nUninstallAppFullTitle=%1 卸载\n\n; *** 杂项常见\nInformationTitle=信息\nConfirmTitle=确认\nErrorTitle=错误\n\n; *** SetupLdr 消息\nSetupLdrStartupMessage=这将安装 %1。您想继续吗？\nLdrCannotCreateTemp=无法创建临时文件。安装已中止\nLdrCannotExecTemp=无法在临时目录中执行文件。安装已中止\nHelpTextNote=\n\n; *** 启动错误消息\nLastErrorMessage=%1。%n%n错误 %2: %3\nSetupFileMissing=安装目录中缺少文件 %1。请更正问题或获取程序的新副本。\nSetupFileCorrupt=安装文件已损坏。请获取程序的新副本。\nSetupFileCorruptOrWrongVer=安装文件已损坏或与此版本的安装程序不兼容。请更正问题或获取程序的新副本。\nInvalidParameter=在命令行上传递了无效参数：%n%n%1\nSetupAlreadyRunning=安装程序已在运行。\nWindowsVersionNotSupported=此程序不支持您的计算机运行的 Windows 版本。\nWindowsServicePackRequired=此程序需要 %1 Service Pack %2 或更高版本。\nNotOnThisPlatform=此程序不会在 %1 上运行。\nOnlyOnThisPlatform=此程序必须在 %1 上运行。\nOnlyOnTheseArchitectures=此程序只能安装在为以下处理器架构设计的 Windows 版本上：%n%n%1\nWinVersionTooLowError=此程序需要 %1 版本 %2 或更高版本。\nWinVersionTooHighError=此程序无法安装在 %1 版本 %2 或更高版本上。\nAdminPrivilegesRequired=安装此程序时必须以管理员身份登录。\nPowerUserPrivilegesRequired=安装此程序时必须以管理员身份或作为 Power Users 组成员登录。\nSetupAppRunningError=安装程序检测到 %1 当前正在运行。%n%n请立即关闭它的所有实例，然后单击\"确定\"继续，或单击\"取消\"退出。\nUninstallAppRunningError=卸载程序检测到 %1 当前正在运行。%n%n请立即关闭它的所有实例，然后单击\"确定\"继续，或单击\"取消\"退出。\n\n; *** 启动问题\nPrivilegesRequiredOverrideTitle=选择安装模式\nPrivilegesRequiredOverrideInstruction=选择安装模式\nPrivilegesRequiredOverrideText1=%1 可以为所有用户安装（需要管理员权限），或仅为您安装。\nPrivilegesRequiredOverrideText2=%1 可以仅为您安装，或为所有用户安装（需要管理员权限）。\nPrivilegesRequiredOverrideAllUsers=为 &所有用户安装\nPrivilegesRequiredOverrideAllUsersRecommended=为 &所有用户安装（推荐）\nPrivilegesRequiredOverrideCurrentUser=仅为 &我安装\nPrivilegesRequiredOverrideCurrentUserRecommended=仅为 &我安装（推荐）\n\n; *** 杂项错误\nErrorCreatingDir=安装程序无法创建目录\"%1\"\nErrorTooManyFilesInDir=无法在目录\"%1\"中创建文件，因为它包含太多文件\n\n; *** 安装常见消息\nExitSetupTitle=退出安装\nExitSetupMessage=安装未完成。如果现在退出，程序将不会被安装。%n%n您可以在另一个时间再次运行安装程序以完成安装。%n%n退出安装？\nAboutSetupMenuItem=&关于安装(&A)...\nAboutSetupTitle=关于安装\nAboutSetupMessage=%1 版本 %2%n%3%n%n%1 主页：%n%4\nAboutSetupNote=\nTranslatorNote=\n\n; *** 按钮\nButtonBack=< &返回\nButtonNext=&下一步 >\nButtonInstall=&安装\nButtonOK=确定\nButtonCancel=取消\nButtonYes=&是\nButtonYesToAll=全部 &是(&A)\nButtonNo=&否\nButtonNoToAll=全部 &否(&O)\nButtonFinish=&完成\nButtonBrowse=&浏览...\nButtonWizardBrowse=浏览(&R)...\nButtonNewFolder=&新建文件夹\n\n; *** \"选择语言\"对话框消息\nSelectLanguageTitle=选择安装语言\nSelectLanguageLabel=选择安装期间要使用的语言。\n\n; *** 常见向导文本\nClickNext=单击\"下一步\"继续，或单击\"取消\"退出安装。\nBeveledLabel=\nBrowseDialogTitle=浏览文件夹\nBrowseDialogLabel=从下面的列表中选择一个文件夹，然后单击\"确定\"。\nNewFolderName=新建文件夹\n\n; *** \"欢迎\"向导页面\nWelcomeLabel1=欢迎使用 [name] 安装向导\nWelcomeLabel2=这将在您的计算机上安装 [name/ver]。%n%n建议您在继续之前关闭所有其他应用程序。\n\n; *** \"密码\"向导页面\nWizardPassword=密码\nPasswordLabel1=此安装受密码保护。\nPasswordLabel3=请提供密码，然后单击\"下一步\"继续。密码区分大小写。\nPasswordEditLabel=&密码：\nIncorrectPassword=您输入的密码不正确。请重试。\n\n; *** \"许可协议\"向导页面\nWizardLicense=许可协议\nLicenseLabel=请在继续之前阅读以下重要信息。\nLicenseLabel3=请阅读以下许可协议。您必须接受此协议的条款才能继续安装。\nLicenseAccepted=我 &接受协议(&A)\nLicenseNotAccepted=我 &不接受协议(&D)\n\n; *** \"信息\"向导页面\nWizardInfoBefore=信息\nInfoBeforeLabel=请在继续之前阅读以下重要信息。\nInfoBeforeClickLabel=当您准备好继续安装时，单击\"下一步\"。\nWizardInfoAfter=信息\nInfoAfterLabel=请在继续之前阅读以下重要信息。\nInfoAfterClickLabel=当您准备好继续安装时，单击\"下一步\"。\n\n; *** \"用户信息\"向导页面\nWizardUserInfo=用户信息\nUserInfoDesc=请输入您的信息。\nUserInfoName=&用户名：\nUserInfoOrg=&组织：\nUserInfoSerial=&序列号：\nUserInfoNameRequired=您必须输入名称。\n\n; *** \"选择目标位置\"向导页面\nWizardSelectDir=选择目标位置\nSelectDirDesc=[name] 应该安装在哪里？\nSelectDirLabel3=安装程序将把 [name] 安装到以下文件夹中。\nSelectDirBrowseLabel=要继续，单击\"下一步\"。如果您想选择其他文件夹，单击\"浏览\"。\nDiskSpaceGBLabel=至少需要 [gb] GB 的可用磁盘空间。\nDiskSpaceMBLabel=至少需要 [mb] MB 的可用磁盘空间。\nCannotInstallToNetworkDrive=安装程序无法安装到网络驱动器。\nCannotInstallToUNCPath=安装程序无法安装到 UNC 路径。\nInvalidPath=您必须输入带有驱动器号的完整路径；例如：%n%nC:\\APP%n%n或 UNC 路径形式：%n%n\\\\server\\share\nInvalidDrive=您选择的驱动器或 UNC 共享不存在或无法访问。请选择另一个。\nDiskSpaceWarningTitle=磁盘空间不足\nDiskSpaceWarning=安装程序需要至少 %1 KB 的可用空间来安装，但所选驱动器只有 %2 KB 可用。%n%n您想继续吗？\nDirNameTooLong=文件夹名称或路径太长。\nInvalidDirName=文件夹名称无效。\nBadDirName32=文件夹名称不能包含以下任何字符：%n%n%1\nDirExistsTitle=文件夹已存在\nDirExists=文件夹：%n%n%1%n%n已存在。您想安装到该文件夹吗？\nDirDoesntExistTitle=文件夹不存在\nDirDoesntExist=文件夹：%n%n%1%n%n不存在。您想创建该文件夹吗？\n\n; *** \"选择组件\"向导页面\nWizardSelectComponents=选择组件\nSelectComponentsDesc=应该安装哪些组件？\nSelectComponentsLabel2=选择要安装的组件；清除不想安装的组件。准备好后单击\"下一步\"。\nFullInstallation=完全安装\n; 如果可能，不要将\"Compact\"翻译为\"最小\"\nCompactInstallation=紧凑安装\nCustomInstallation=自定义安装\nNoUninstallWarningTitle=组件已存在\nNoUninstallWarning=安装程序检测到以下组件已安装在您的计算机上：%n%n%1%n%n取消选择这些组件不会卸载它们。%n%n您想继续吗？\nComponentSize1=%1 KB\nComponentSize2=%1 MB\nComponentsDiskSpaceGBLabel=当前选择需要至少 [gb] GB 的磁盘空间。\nComponentsDiskSpaceMBLabel=当前选择需要至少 [mb] MB 的磁盘空间。\n\n; *** \"选择其他任务\"向导页面\nWizardSelectTasks=选择其他任务\nSelectTasksDesc=应该执行哪些其他任务？\nSelectTasksLabel2=选择您希望安装程序在安装 [name] 时执行的其他任务，然后单击\"下一步\"。\n\n; *** \"选择开始菜单文件夹\"向导页面\nWizardSelectProgramGroup=选择开始菜单文件夹\nSelectStartMenuFolderDesc=安装程序应该在哪里放置程序的快捷方式？\nSelectStartMenuFolderLabel3=安装程序将在以下开始菜单文件夹中创建程序的快捷方式。\nSelectStartMenuFolderBrowseLabel=要继续，单击\"下一步\"。如果您想选择其他文件夹，单击\"浏览\"。\nMustEnterGroupName=您必须输入文件夹名称。\nGroupNameTooLong=文件夹名称或路径太长。\nInvalidGroupName=文件夹名称无效。\nBadGroupName=文件夹名称不能包含以下任何字符：%n%n%1\nNoProgramGroupCheck2=&不创建开始菜单文件夹\n\n; *** \"准备安装\"向导页面\nWizardReady=准备安装\nReadyLabel1=安装程序现在已准备好开始在您的计算机上安装 [name]。\nReadyLabel2a=单击\"安装\"继续安装，或单击\"返回\"如果您想查看或更改任何设置。\nReadyLabel2b=单击\"安装\"继续安装。\nReadyMemoUserInfo=用户信息：\nReadyMemoDir=目标位置：\nReadyMemoType=安装类型：\nReadyMemoComponents=选定的组件：\nReadyMemoGroup=开始菜单文件夹：\nReadyMemoTasks=其他任务：\n\n; *** TDownloadWizardPage 向导页面和 DownloadTemporaryFile\nDownloadingLabel2=正在下载文件...\nButtonStopDownload=&停止下载\nStopDownload=您确定要停止下载吗？\nErrorDownloadAborted=下载已中止\nErrorDownloadFailed=下载失败：%1 %2\nErrorDownloadSizeFailed=获取大小失败：%1 %2\nErrorProgress=无效的进度：%1 / %2\nErrorFileSize=无效的文件大小：预期 %1，找到 %2\n\n; *** TExtractionWizardPage 向导页面和 ExtractArchive\nExtractingLabel=正在提取文件...\nButtonStopExtraction=&停止提取\nStopExtraction=您确定要停止提取吗？\nErrorExtractionAborted=提取已中止\nErrorExtractionFailed=提取失败：%1\n\n; *** 存档提取失败详情\nArchiveIncorrectPassword=密码不正确\nArchiveIsCorrupted=存档已损坏\nArchiveUnsupportedFormat=不支持的存档格式\n\n; *** \"准备安装\"向导页面\nWizardPreparing=准备安装\nPreparingDesc=安装程序正在准备在您的计算机上安装 [name]。\nPreviousInstallNotCompleted=之前程序的安装/删除未完成。您需要重新启动计算机以完成该安装。%n%n重新启动计算机后，再次运行安装程序以完成 [name] 的安装。\nCannotContinue=安装程序无法继续。请单击\"取消\"退出。\nApplicationsFound=以下应用程序正在使用需要由安装程序更新的文件。建议您允许安装程序自动关闭这些应用程序。\nApplicationsFound2=以下应用程序正在使用需要由安装程序更新的文件。建议您允许安装程序自动关闭这些应用程序。安装完成后，安装程序将尝试重新启动应用程序。\nCloseApplications=&自动关闭应用程序\nDontCloseApplications=&不关闭应用程序\nErrorCloseApplications=安装程序无法自动关闭所有应用程序。建议您在继续之前关闭所有使用需要由安装程序更新的文件的应用程序。\nPrepareToInstallNeedsRestart=安装程序必须重新启动您的计算机。重新启动计算机后，再次运行安装程序以完成 [name] 的安装。%n%n您想立即重新启动吗？\n\n; *** \"安装\"向导页面\nWizardInstalling=安装\nInstallingLabel=请等待安装程序在您的计算机上安装 [name]。\n\n; *** \"安装完成\"向导页面\nFinishedHeadingLabel=完成 [name] 安装向导\nFinishedLabelNoIcons=安装程序已完成在您的计算机上安装 [name]。\nFinishedLabel=安装程序已完成在您的计算机上安装 [name]。可以通过选择已安装的快捷方式来启动应用程序。\nClickFinish=单击\"完成\"退出安装。\nFinishedRestartLabel=要完成 [name] 的安装，安装程序必须重新启动您的计算机。您想立即重新启动吗？\nFinishedRestartMessage=要完成 [name] 的安装，安装程序必须重新启动您的计算机。%n%n您想立即重新启动吗？\nShowReadmeCheck=是的，我想查看 README 文件\nYesRadio=&是的，立即重新启动计算机\nNoRadio=&否，我稍后重新启动计算机\n; 用于例如\"运行 MyProg.exe\"\nRunEntryExec=运行 %1\n; 用于例如\"查看 Readme.txt\"\nRunEntryShellExec=查看 %1\n\n; *** \"安装程序需要下一张磁盘\"内容\nChangeDiskTitle=安装程序需要下一张磁盘\nSelectDiskLabel2=请插入磁盘 %1 并单击\"确定\"。%n%n如果此磁盘上的文件可以在下面显示的文件夹以外的其他文件夹中找到，请输入正确的路径或单击\"浏览\"。\nPathLabel=&路径：\nFileNotInDir2=文件\"%1\"无法在\"%2\"中找到。请插入正确的磁盘或选择另一个文件夹。\nSelectDirectoryLabel=请指定下一张磁盘的位置。\n\n; *** 安装阶段消息\nSetupAborted=安装未完成。%n%n请更正问题并再次运行安装程序。\nAbortRetryIgnoreSelectAction=选择操作\nAbortRetryIgnoreRetry=&重试\nAbortRetryIgnoreIgnore=&忽略错误并继续\nAbortRetryIgnoreCancel=取消安装\nRetryCancelSelectAction=选择操作\nRetryCancelRetry=&重试\nRetryCancelCancel=取消\n\n; *** 安装状态消息\nStatusClosingApplications=正在关闭应用程序...\nStatusCreateDirs=正在创建目录...\nStatusExtractFiles=正在提取文件...\nStatusDownloadFiles=正在下载文件...\nStatusCreateIcons=正在创建快捷方式...\nStatusCreateIniEntries=正在创建 INI 条目...\nStatusCreateRegistryEntries=正在创建注册表条目...\nStatusRegisterFiles=正在注册文件...\nStatusSavingUninstall=正在保存卸载信息...\nStatusRunProgram=完成安装...\nStatusRestartingApplications=正在重新启动应用程序...\nStatusRollback=正在回滚更改...\n\n; *** 杂项错误\nErrorInternal2=内部错误：%1\nErrorFunctionFailedNoCode=%1 失败\nErrorFunctionFailed=%1 失败；代码 %2\nErrorFunctionFailedWithMessage=%1 失败；代码 %2。%n%3\nErrorExecutingProgram=无法执行文件：%n%1\n\n; *** 注册表错误\nErrorRegOpenKey=打开注册表项时出错：%n%1\\%2\nErrorRegCreateKey=创建注册表项时出错：%n%1\\%2\nErrorRegWriteKey=写入注册表项时出错：%n%1\\%2\n\n; *** INI 错误\nErrorIniEntry=在文件\"%1\"中创建 INI 条目时出错。\n\n; *** 文件复制错误\nFileAbortRetryIgnoreSkipNotRecommended=&跳过此文件（不推荐）\nFileAbortRetryIgnoreIgnoreNotRecommended=&忽略错误并继续（不推荐）\nSourceIsCorrupted=源文件已损坏\nSourceDoesntExist=源文件\"%1\"不存在\nSourceVerificationFailed=源文件验证失败：%1\nVerificationSignatureDoesntExist=签名文件\"%1\"不存在\nVerificationSignatureInvalid=签名文件\"%1\"无效\nVerificationKeyNotFound=签名文件\"%1\"使用未知密钥\nVerificationFileNameIncorrect=文件名不正确\nVerificationFileTagIncorrect=文件标记不正确\nVerificationFileSizeIncorrect=文件大小不正确\nVerificationFileHashIncorrect=文件哈希不正确\nExistingFileReadOnly2=无法替换现有文件，因为它被标记为只读。\nExistingFileReadOnlyRetry=&删除只读属性并重试\nExistingFileReadOnlyKeepExisting=&保留现有文件\nErrorReadingExistingDest=尝试读取现有文件时出错：\nFileExistsSelectAction=选择操作\nFileExists2=文件已存在。\nFileExistsOverwriteExisting=&覆盖现有文件\nFileExistsKeepExisting=&保留现有文件\nFileExistsOverwriteOrKeepAll=&对后续冲突执行此操作\nExistingFileNewerSelectAction=选择操作\nExistingFileNewer2=现有文件比安装程序尝试安装的文件更新。\nExistingFileNewerOverwriteExisting=&覆盖现有文件\nExistingFileNewerKeepExisting=&保留现有文件（推荐）\nExistingFileNewerOverwriteOrKeepAll=&对后续冲突执行此操作\nErrorChangingAttr=尝试更改现有文件的属性时出错：\nErrorCreatingTemp=尝试在目标目录中创建文件时出错：\nErrorReadingSource=尝试读取源文件时出错：\nErrorCopying=尝试复制文件时出错：\nErrorDownloading=尝试下载文件时出错：\nErrorExtracting=尝试提取存档时出错：\nErrorReplacingExistingFile=尝试替换现有文件时出错：\nErrorRestartReplace=RestartReplace 失败：\nErrorRenamingTemp=尝试在目标目录中重命名文件时出错：\nErrorRegisterServer=无法注册 DLL/OCX：%1\nErrorRegSvr32Failed=RegSvr32 失败，退出代码 %1\nErrorRegisterTypeLib=无法注册类型库：%1\n\n; *** 卸载显示名称标记\n; 用于例如\"我的程序 (32 位)\"\nUninstallDisplayNameMark=%1 (%2)\n; 用于例如\"我的程序 (32 位，所有用户)\"\nUninstallDisplayNameMarks=%1 (%2, %3)\nUninstallDisplayNameMark32Bit=32 位\nUninstallDisplayNameMark64Bit=64 位\nUninstallDisplayNameMarkAllUsers=所有用户\nUninstallDisplayNameMarkCurrentUser=当前用户\n\n; *** 安装后错误\nErrorOpeningReadme=尝试打开 README 文件时出错。\nErrorRestartingComputer=安装程序无法重新启动计算机。请手动执行此操作。\n\n; *** 卸载程序消息\nUninstallNotFound=文件\"%1\"不存在。无法卸载。\nUninstallOpenError=文件\"%1\"无法打开。无法卸载\nUninstallUnsupportedVer=卸载日志文件\"%1\"的格式不被此版本的卸载程序识别。无法卸载\nUninstallUnknownEntry=在卸载日志中遇到未知条目 (%1)\nConfirmUninstall=您确定要完全删除 %1 及其所有组件吗？\nUninstallOnlyOnWin64=此安装只能在 64 位 Windows 上卸载。\nOnlyAdminCanUninstall=此安装只能由具有管理员权限的用户卸载。\nUninstallStatusLabel=请等待 %1 从您的计算机中删除。\nUninstalledAll=%1 已成功从您的计算机中删除。\nUninstalledMost=%1 卸载完成。%n%n某些元素无法删除。这些可以手动删除。\nUninstalledAndNeedsRestart=要完成 %1 的卸载，必须重新启动您的计算机。%n%n您想立即重新启动吗？\nUninstallDataCorrupted=\"%1\"文件已损坏。无法卸载\n\n; *** 卸载阶段消息\nConfirmDeleteSharedFileTitle=删除共享文件？\nConfirmDeleteSharedFile2=系统指示以下共享文件不再被任何程序使用。您想让卸载程序删除此共享文件吗？%n%n如果任何程序仍在使用此文件并将其删除，这些程序可能无法正常运行。如果您不确定，请选择\"否\"。将文件保留在系统上不会造成任何伤害。\nSharedFileNameLabel=文件名：\nSharedFileLocationLabel=位置：\nWizardUninstalling=卸载状态\nStatusUninstalling=正在卸载 %1...\n\n; *** 关闭阻止原因\nShutdownBlockReasonInstallingApp=正在安装 %1。\nShutdownBlockReasonUninstallingApp=正在卸载 %1。\n\n; 下面的自定义消息不被安装程序本身使用，但如果您在\n; 脚本中使用它们，您需要翻译它们。\n\n[CustomMessages]\n\nNameAndVersion=%1 版本 %2\nAdditionalIcons=其他快捷方式：\nCreateDesktopIcon=创建 &桌面快捷方式\nCreateQuickLaunchIcon=创建 &快速启动快捷方式\nProgramOnTheWeb=%1 网站\nUninstallProgram=卸载 %1\nLaunchProgram=启动 %1\nAssocFileExtension=&将 %1 与 %2 文件扩展名关联\nAssocingFileExtension=正在将 %1 与 %2 文件扩展名关联...\nAutoStartProgramGroupDescription=启动：\nAutoStartProgram=自动启动 %1\nAddonHostProgramNotFound=在您选择的文件夹中找不到 %1。%n%n您想继续吗？\n"
  },
  {
    "path": "Assets/Icon.ai",
    "content": "%PDF-1.5\r%\r\n1 0 obj\r<</Metadata 2 0 R/OCProperties<</D<</OFF[28 0 R 29 0 R 30 0 R]/ON[31 0 R]/Order 32 0 R/RBGroups[]>>/OCGs[28 0 R 29 0 R 31 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>>\rendobj\r2 0 obj\r<</Length 42568/Subtype/XML/Type/Metadata>>stream\r\n<?xpacket begin=\"﻿\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\n<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"Adobe XMP Core 7.1-c000 79.b0f8be9, 2021/12/08-19:11:22        \">\n   <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n      <rdf:Description rdf:about=\"\"\n            xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n            xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\"\n            xmlns:xmpGImg=\"http://ns.adobe.com/xap/1.0/g/img/\"\n            xmlns:xmpMM=\"http://ns.adobe.com/xap/1.0/mm/\"\n            xmlns:stRef=\"http://ns.adobe.com/xap/1.0/sType/ResourceRef#\"\n            xmlns:stEvt=\"http://ns.adobe.com/xap/1.0/sType/ResourceEvent#\"\n            xmlns:stMfs=\"http://ns.adobe.com/xap/1.0/sType/ManifestItem#\"\n            xmlns:illustrator=\"http://ns.adobe.com/illustrator/1.0/\"\n            xmlns:xmpTPg=\"http://ns.adobe.com/xap/1.0/t/pg/\"\n            xmlns:stDim=\"http://ns.adobe.com/xap/1.0/sType/Dimensions#\"\n            xmlns:xmpG=\"http://ns.adobe.com/xap/1.0/g/\"\n            xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\">\n         <dc:format>application/pdf</dc:format>\n         <dc:title>\n            <rdf:Alt>\n               <rdf:li xml:lang=\"x-default\">Icon</rdf:li>\n            </rdf:Alt>\n         </dc:title>\n         <xmp:CreatorTool>Adobe Illustrator 26.2 (Windows)</xmp:CreatorTool>\n         <xmp:CreateDate>2025-03-14T22:47:45+09:00</xmp:CreateDate>\n         <xmp:ModifyDate>2025-03-14T22:47:46+08:00</xmp:ModifyDate>\n         <xmp:MetadataDate>2025-03-14T22:47:46+08:00</xmp:MetadataDate>\n         <xmp:Thumbnails>\n            <rdf:Alt>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xmpGImg:width>256</xmpGImg:width>\n                  <xmpGImg:height>200</xmpGImg:height>\n                  <xmpGImg:format>JPEG</xmpGImg:format>\n                  <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAyAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FVC9ujbQGYJ6gUjkK0oDtXocsxw4jTRqM3hx4qtC2+u2chCvW&#xA;Inu24+8ZZLTSHLdxsXaOOWx9KYI6OgdGDIwqrKagg9wRlBBGxc8EEWG8CXYq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVO4iE0EkR/bUjJQlRBa8sOOJj&#xA;3sQYFSVIoQaEZtw8oRWyJsNQms5Pg+KFvtxHp8x4HKsuITHm5el1csR749zJLS8gu4vUhao6Mp2Z&#xA;T4EZrsmMxNF3+LNHILirZBtdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiq&#xA;ySeGP7bhfY9fuwEgNc8sY8yoNqdqDsSfcD+uQ8QNB1uNtNStW6sV+Y/pXCMgTHWYz1pXSWN/sOG+&#xA;RrkgQXIjOMuRXYWTsVdirGNYg9K+koKLJ8Y+nr+ObPTyuDzmux8OU+e6Cy5w1SGeaCQSwtwcd+xH&#xA;gR3GCURIUWzFmljNxZHp2qw3g4EcJ1FWj8R4qe4zXZsBhv0eh02rjlHdLuRuUOU7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUFf3pi/dxn95+0fDK5zrYODqtTw+mPNKySxJJqT1Jy&#xA;h1RN82sVdirsVVku7lPsyGngdx+OSEiG2OonHkUQmqzD7aq34HJDKXIjr5DmLV01WA/aVlP3jJjK&#xA;HJjroHmKQOutbzRRSxuCyniR3od+h+WZ2jyAkhw+0ZQnESieSTZnupdirYJBDKSrDcMDQg+xGKYy&#xA;INjmnum62snCC6IWU7LL0Vj2r4E/d+AzBzaat48neaTXifpntL702zEdk7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FVC8uRBFUfbbZB/HIzlQcfUZvDj5pKSWJJNSdycxnSE2bLWKuxV2Ku&#xA;xV2KuxV2KsS/NO5uLXybc3FvI0U8UsDRyKaMpEq0IOb72agJayIIsES+4uJrSRjJHklXkTz/AG2v&#xA;QrZ3hEOrovxL0WYDqye/iv8ADpvu0+y5YDxR3x/d73EwagT2PNmGadynYq4gEUPTFUy03WZLekVx&#xA;WSD9l9yyf81L+P6sxs2nEtxzdnpNeY+mfLvZCjo6B0YMjCqspqCD3BGYBBGxd2CCLDeBLsVdirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirTuqKWY0UCpOJKJSAFlI7mdp5S56dFHgMxZSsuizZTOVqWBqd&#xA;irsVdirsVdirsVdirDfzc/5Qa8/4yQ/8nVzoPZj/AB2Pul9xcPX/AN0XgUE80EyTQu0c0bBo5FNG&#xA;VhuCCM9QlESFHcF0INPavIPn6HXYVsb5lj1aNfksyj9pf8r+ZfpHtxnanZZwHijvjP2O00+o49jz&#xA;Znmmcp2KuxVF6fqM1m44/FAT8cXz7r4H9f45VlxCY83M0usliNc4/jkyS1uoLqISwtyXoR0IPgR2&#xA;Oa6cDE0Xf4ssZi4nZVyDY7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUs1O65N6Kn4V+37nwynJLo6&#xA;vW57PCEBlTgOxV2KuxV2KuxV2KuxV2KsL/N+QL5HuVP7csKj/gw38M6H2Wjetj5CX3OFrz+6LwHP&#xA;UXQr4J5oJkmhdo5o2DRyKaMrDcEEZGURIUdwUg09n8gfmBHrca6fqLLHqyD4W2VZwO6joHHcfSPb&#xA;ju1OyjhPHD+7+79js9PqOLY82bZpHLdirsVVLe4ntpfVhbi/QjqrDwYd8jOAkKLbhzyxm4sl0/U4&#xA;bxKD4JgKvETUj3B7jNdlwmHueh0+qjlG3PuReUuS7FXYq7FXYq7FXYq7FXYq7FXYq7FUPe3PoRVH&#xA;222X+uQnKg4+pzcEfMpMSSanrmO6RrFXYq7FXYq7FXYq7FXYq7FWD/nH/wAoVL/xnh/Wc6P2V/xw&#xA;f1S4PaH938Xguenuidiq6KWSKRJYnMckZDI6mjBhuCCMEogijySC9m8g/mFDrEaadqTiPVVFEc7L&#xA;OAOo7B/Efd7cb2p2UcJ44b4/u/Y7PT6ji2PNnGaRy3Yq7FW0Z0dXRiroaqw6g4kWKLKEzE2Nin+m&#xA;ays5EFxRJ+it0V/6N7fd4DAzafh3HJ3uk1wyemW0vvTTMV2DsVdirsVdirsVdirsVdirsVU7i4ht&#xA;oJLidxHDEpeRz0CqKk5KEDIgDmWvLljjiZSNRiLLCrDztp2s3TRmtvNyKwxydGWvw0P83iMytf2V&#xA;lxDi+qPl0/He8dg7fxauZH0y6A9R+vyTfNQ7J2KuxV2KuxV2KuxV2KuxV2KsH/OP/lCpf+M8P6zn&#xA;R+yv+OD+qXB7Q/u/i8Fz090TsVdiraO8bq6MUdCGVlNCCNwQRgIBFFL2T8vvzBTVkTTNTcJqiCkU&#xA;p2E4H/G/iO+cf2r2UcR44fR937HZafUcWx5s7zROY7FXYq4gEUPTFU/0bVPVAtZ2rMAfTc/tgdq/&#xA;zD/PvmDqMNeocnfaHV8Y4ZfV96a5iOxdirsVdirsVdirsVdirsVea/mb5o9ST9B2j/AhDXrDu3VY&#xA;/o6n3zpOxtFQ8WXw/W+fe1va/Efy0DsPr9/SPw5l59m/eFZToHne5teNvqPK4t+izdZEHvX7Q/HN&#xA;Dr+xI5PVj9Mu7of1PRdndvTx+nL6o9/Ufr+9ndrd213As9tIssT9HU1H9hzk8uGWOXDIUXscOaGS&#xA;IlA3EquVtrsVdirsVdirsVdirsVYP+cjAeS3BNC1xCB7mpP8M6T2UH+GD+qXB7Q/u/i8Fz050TsV&#xA;dirsVbR3jdXRijoQyspoQRuCCMBAIopew/l9+Yi6pw0vVnC6iNoJzsJvY+D/AK/nnI9q9k+F+8x/&#xA;R1Hd+x2Wn1PFtLmz7NA5jsVdirYLAgqSrA1Vh1BG4IxTGRBsc2T6Xfi8t6tQTptKo8ezAeDf2ZrM&#xA;2LgPk9LpdQMsL69UZlLkuxV2KuxV2KuxV2KpF5x8xpoektMpBvJqx2qH+am7U8F65ndn6Q58lfwj&#xA;m6Xt3tQaPAZD+8ltH39/weJySPJI0kjF5HJZ2O5JJqSTnaAACg+QSkZEk7krcLF2Ko3StYv9Mn9W&#xA;1k41pzjO6MB2YZjarR488amPj1Dl6TW5NPLigfh0L0LQvNVhqqiMkQXneBj1p3Q9/wBecdr+ysmD&#xA;f6od/wCt7fs/tfHqNvpn3fq706zVu2dirsVdirsVdirsVYF+dX/KHp/zFxf8RfOn9kv8bP8AUP3h&#xA;wO0f7v4vCs9LdG7FXYq7FXYq5WZWDKSrKagjYgjARavYPy+/MRNRSPStXkC6gtFt7hjQTdgrf5f6&#xA;/nnI9q9knHeTGPR1Hd+z7nZafU8W0ub0DNA5rsVdiqJ067NrdxyVpGTwlFaDixpU1/l65XlhxRIc&#xA;rRZvDyDuOxZXmqeldirsVdirsVdiqyaaKCF5pWCRRqXkc9AqipJwxiZGhzLDJkjCJlI1Ebl4h5r8&#xA;wS65q8l0ai3T4LWM/sxj+LdTnb6HSjBjEevV8d7Z7TlrM5n/AAjaI8v28yk2ZbqXYq7FXYq2CQQQ&#xA;aEbgjEhINMt0DzzLDxt9UJli2C3I3df9cftD36/POd1/YYl6sWx7unw7vu9z03Z3tBKPpzbj+d1+&#xA;Pf8Af72bwXEFxCs0DrJE4qrqag5y2THKB4ZCiHrceSM4iUTYKpkGx2KuxV2KuxVgX51f8oen/MXF&#xA;/wARfOn9kv8AGz/UP3hwO0f7v4vCs9LdG7FXYq7FXYq7FXAkEEGhHQ4q9c/Lv8xBfCPSNXkpeii2&#xA;t0x/vfBHP8/gf2vn15LtbsngvJjHp6ju/Z93udlptTfplzeiZzzmuxVxAIoemKsn0i6NxYoWJMkf&#xA;7uQnckr0JPuCDms1EOGXkXpdHm8TGD15FG5S5TsVdirsVdirzz8z/MvFRodq/wATUe9Ydh1SP6ft&#xA;H6M6HsbR/wCVl8P1vB+13a1D8tA+c/0D9J+DzfOieAdirsVdirsVdirsVTDSNd1DSpeds/7s/bhb&#xA;dG+jx9xmHq9Dj1AqQ37+rnaLtDLpzcDt3dHoeieZdP1ZOMZ9K5Aq9u5+L5qf2hnG67s3JpzZ3j3/&#xA;AI5Pb6DtTFqRQ2n/ADf1d6bZr3ZuxV2KuxVgX51f8oen/MXF/wARfOn9kv8AGz/UP3hwO0f7v4vC&#xA;s9LdG7FXYq7FXYq7FXYq4Eggg0I6HFXrP5e/mP8AWzHpGsyAXOyWt43+7OwSQn9vwPf59eU7V7I4&#xA;LyYx6eo7vd5fc7HT6m/TJ6PnOOc7FUfolyIL0Kxok4CGtPtD7HX5kfTlGphxR9zsOzs3DPhPKX3s&#xA;lzWu/dirsVdiqWeY9bh0XSZr6ShdRxgjP7cjfZX+J9sydJpjmyCI+Pudd2p2hHSYJZDz6DvPT8dz&#xA;wy5uZ7q4kuJ3LzTMXkc9SzGpzuIQEQAOQfGc2WWSZnI3KRsqWSa3Yq7FXYq7FXYq7FXYquR3jdXR&#xA;ijqaqymhBHcEYJRBFHkyjIg2NizHQPPRXjbaruOi3QG/+zA/WM5rX9hX6sP+l/V+p6ns72gqoZv9&#xA;N+v9bNI5I5Y1kjYPGwqrqQQR7EZzEomJoii9XGQkLBsLsDJ2KvPfzwJHlO1oet/GD/yJlzqvY/8A&#xA;xqX/AAs/7qLr+0v7se/9bw/PSHSOxV2KuxV2KuxV2KuxV2KvV/y8/MUXAj0fWpaTii2t452cdkkJ&#xA;/a8D3+fXle1uyeG8mIbdR+kOx02pv0yek5zbnO37Eg9iNiD4jFQaNhlmn3X1q0jm2DkUkA7MNj9H&#xA;h7ZqssOGRD1ODL4kBJEZW3OxV2KvIfzH19tR1k2UTf6LYExgDo0v7bfR9nOt7I0vh4+I/VL7uj5Z&#xA;7VdpePqPDj9GPb/O6/qYlm2eXdirsVdirsVdirsVdirsVdirsVTTRfMWoaTJ+5bnbk1kt2+yfcfy&#xA;n3zB1vZ2PUD1bS73Y6DtPLpj6d49R0/Y9D0bzBp+rRVgfjMBWS3b7a/1HuM43W9n5NOfUPT39Ht9&#xA;D2li1I9J9XUdUyzBdg88/PD/AJRO0/5j4/8AkzNnV+x/+NS/4Wf91F1/aX92Pf8AreIZ6O6R2Kux&#xA;V2KuxV2KuxV2KuxV2KvUvy6/MXn6WjazL8eyWd4569hHIT3/AJWzl+1uyavJjHvH6Q7DTan+GT07&#xA;OZc9NNAuvTuWtz9mfdf9dRv27qPwzG1ULjfc7TszNUjA9WQZr3duxV2KvnaWR5ZXlc1d2LMfEk1O&#xA;ehRAAoPg05mRJPMrcLF2KuxV2KuxV2KuxV2KuxV2KuxV2Kr4ppYZFlicxyIaq6mhB9iMjOAkKIsF&#xA;nCZiQYmiGa6B56STjb6rRH6LdAUU/wCuB0+Y2+Wcxr+wiPVh/wBL+p6zs72gB9GbY/zv1/j5If8A&#xA;N3TL7VPJ6yafEblbSdLub0/ipCsbqXFOoHMdO2+H2WzRxasiZ4eKJjv32Nvsd5rMZyYrhvW/w73g&#xA;2emOhdirsVdirsVdirsVdirsVdirsVeofl9+ZBrFo+tybbJa3zn6AkpP4N9/jnMdq9kc8mIe8fpH&#xA;6nP0+p/hk9RDMrBkNHUhkbrRgag0+ecxXe7KMjEgjmGX204nt45gKeooYrUGhPUVHh0zUTjwkh6r&#xA;HMTiJDqqZFm7FXgevac+nazeWTCghlYJ/qE1Q/SpGd5pcviY4y7w+I9o6U4NRPGf4ZH5dPsQGXuE&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqi9M0q/1O6W1sYWmmbcgdAPFidgPnlWbPDHHikaDlaTR5dR&#xA;Pgxx4pfjn3PXvJ/laXRLJo7m5NxLKKNF1hQHchAd9+/6s5DX6uOafFGNefU+99T7D7Hlo8dTlxSP&#xA;T+Ee78fB5J+bn5VHSpJNe0KD/cW/xXtqm/1did3Qf77P/C/Lp13YPbfigYsp9fQ/zv2/f73X9r9l&#xA;eH+8xj0dR3fs+55RnVPPuxV2KuxV2KuxV2KuxV2KuxV2KvTfy6/MXh6WjazL8GyWd456dhHIT2/l&#xA;bOZ7W7Ju8mMe8fpDn6bU/wAMnvGhAjS4q71Mh+gyMRnC6n6z8Puez0H9zH4/ej8ocx2Ksf8ANnlC&#xA;z1625CkOoRikFzT/AIR6dV/Vmw0OvlgPfDqHR9tdh49bC/pyjlL9B8vueO6jp15p15JaXkZinjNG&#xA;U9COxB7g9jnX4c0ckRKJsF8o1WlyYMhx5BUghsscd2KuxV2KuxV2KuxV2KuxV2KuxVlXlfyBqOr8&#xA;Lm5raaedxIR8cg/yFPb/ACj+OavW9qQxemPqn93vel7H9msuqqc/Ri7+p936/veqaTo2m6Tai2sY&#xA;RFH+0erMfFmO5Octn1E8suKZt9K0Wgw6aHBijwj7T7yjcpcxbJHHLG0Uqh43BV0YAqykUIIPUHCC&#xA;QbHNBAIovnj82fytk8v3D6xo8TPocprLGKk2zseh/wCKz+ye3Q9q+g9hdtDUDw8h/ej/AGX7Xju1&#xA;uy/BPHAej7v2PNM6V0bsVdirsVdirsVdirsVdirsVdir6y/Lq0ubTyPosNyWab6qjtzNWAk/eBTX&#xA;+UNTPKe1piWqyGPLi+7Z9B7OgY6eAPd9+7Is1zmuxV2KpP5m8sWGvWfpTjhcRg/V7kD4kJ8fFT3G&#xA;Zmj1s8ErHLqHU9rdkYtbj4ZbSH0y7v2eTxvWdFv9HvXtL2Pi4+w4+w6/zKe4zsNPqIZo8US+T6/Q&#xA;ZdLkOPIN/sPmEBl7hOxV2KuxV2KuxV2KuxVEWGn3uoXK21nC0879EUfiT0A9zleXLHHHikaDkabS&#xA;5M8xDHEykXp/lb8uLKwCXWqhbq8G6w9YkPyP2z89v15zWt7XlP04/TH7T+p9E7H9lceGp56nk7v4&#xA;R+s/Z97NM0r17sVdirsVWTwQ3EEkE6LJDKpSSNhVWVhQgg9iMlGRiQRsQiUQRR5PnD80/wAr5vK9&#xA;ydR04NLoVw9FrVmt3bpG57qf2W+g79fRexO2hqY8E9so/wBl5/rDxXanZhwHij/dn7HnudA6d2Ku&#xA;xV2KuxV2KuxV2KuxVm/5Y/l3feaNWiuJ4mTQ7Zw11OwosnEg+iniW706D6M0nbPa0dNjIB/enkO7&#xA;zdp2Z2fLPMEj92Of6n04qqqhVACgUAGwAGeZkvdN4q7FXYq7FUv1zQdP1qyNreJUdYpR9uNv5lOZ&#xA;Gm1U8MuKP9rgdo9nYtXj4Mg9x6j3PG/MflnUdCu/RuV5wuT6FyoPBx/BvEZ2Gk1kM8bjz6h8n7V7&#xA;Jy6PJwz3ieUuh/b5JRmW6t2KuxV2KuxV2Ksl8seRtT1plnkBtdP7zsN3H/Fa9/n0zW63tOGHYeqf&#xA;d+t6Hsj2dzaupH0Yu/v/AKo/TyeraLoOl6NbehYwhAf7yQ7yOfFm7/qzltRqp5pXMvpmg7Nw6SHD&#xA;iFd56n3lMMx3OdirsVdirsVdiqleWdre2stpdxLPbTqUlicVVlOxBByePJKEhKJohjOAkCCLBfNn&#xA;5oflnceVLz65ZcptDuWIhkNS0LHf0pD/AMRbv889G7F7ZGqjwy2yj7fMfpeJ7U7MOnlxR3xn7PJg&#xA;eb51LsVdirsVdirsVROnaZqGp3aWen28l1dSfYhiUsx99u3vlWbNDHHimRGI72zHilM8MRZez+SP&#xA;yFhiMd95qcSyCjLpkLfAD4SyD7XyXb3Ocb2l7Tk3HBsP5x/QP1/J6XRdggerN/pf1vYLa2t7WCO3&#xA;tokhgiULFFGoVFUdAqjYDORnMyJMjZL0cYiIoCgqZFk7FXYq7FXYq7FUNqGnWWo2j2l5EJoJPtKf&#xA;HsQeoI8RlmLNLHLiiaLj6rS488DDIOKJeR+bPJN9ochnircaax+GcD4kr+zIB0+fQ51uh7SjnFHa&#xA;fd+p8t7a9n8mjPFH1Yu/u/rfr5MZzZPPOxV2Kq1pZ3V5cJb2sTTTuaLGgqTkMmSMBcjQbsGCeWQh&#xA;AGUj0D0vyv8AlrbWvC71njcXHVbUbxIf8r+c/h885vW9sSl6cew7+v7H0Lsf2Thjqeo9U/5v8I9/&#xA;f93vZ0AAAAKAbADNG9mBTsVdirsVdirsVdirsVdiqhf2FnqFnNZXsK3FrcKUmhcVVlOWYssschKJ&#xA;qQYZMcZxMZCwXzb+Zf5X33lS4a9tOVzoUz0im6vCT0SX9St3+eejdj9tR1Q4ZbZR9vmP1PFdpdly&#xA;054hvjP2e9gmb11LsVdirccckjrHGpeRyFVFBJJPQADASALKQL2D07yb+Reu6p6d3rrHS7E0IgoD&#xA;cuP9U7R/7Lf/ACc5ntD2lxYvTi9cu/8Ah/b8Pm7zR9h5Mm+T0x+39n42e3+XPKmgeXbT6rpNolup&#xA;/vJftSyHxdz8R/VnFavXZdRLiySv7h7g9Tp9JjwioCk2zEch2KuxV2KuxV2KuxV2KuxVqSNJEaOR&#xA;Q6OCrIwqCD1BBwgkGwxlESFEWCwLX/ytgnkafR5Vt2Y1NtLX06/5LCpX5UOb3S9tGIrIL8xzeK7S&#xA;9j4zJlpzw/0Ty+B5j7WNt+WvmsPxEEbD+YSpT8SDmyHbGn7z8nnz7Ka4GuEf6YJhp/5UatIwN9dR&#xA;W8fcR1kf/jVfxzHy9uYx9IJ+xz9N7GZ5H95OMR5bn9A+1n+heXNK0S39Kyio7D97O28j/M/wG2aH&#xA;U6vJmNyPw6Pb9ndlYdHDhxjfqep/HdyTPMV2LsVdirsVdirsVdirsVdirsVdiqncW9vcwSW9xGs0&#xA;EqlJYpAGVlOxDKdiDkoTMSCDRCJREhR3Dy/zF/zj/wCXr2V59Hu5NLdjUwMvrw/JQSrr/wAEc6fS&#xA;e1OaArJET8+R/V9jodR2BjkbgeH7QxZv+cdvMoY8NTsivYn1Qfu4HNoPazD/ADJfZ+twD7PZf50f&#xA;tRdh/wA4537MDqGsxRr3WCJpCfpdo6fdlOX2th/BjJ95r9bZj9nZfxTHwD0zyl+XXlfyvGrWFsJL&#xA;2lHv56PMa9aGlEHsoGc3r+1s+pPrPp/mjl+34u80nZ2LB9I9XeebJs1jnOxV2KuxV2KuxV2Kv//Z</xmpGImg:image>\n               </rdf:li>\n            </rdf:Alt>\n         </xmp:Thumbnails>\n         <xmpMM:OriginalDocumentID>uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7</xmpMM:OriginalDocumentID>\n         <xmpMM:DocumentID>xmp.did:d5f62d1b-7efe-4d05-b1f8-644cb847dfa0</xmpMM:DocumentID>\n         <xmpMM:InstanceID>uuid:81d003dd-8fcc-47a2-b243-c3815ba123fd</xmpMM:InstanceID>\n         <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>\n         <xmpMM:DerivedFrom rdf:parseType=\"Resource\">\n            <stRef:instanceID>uuid:419d3a9b-55bd-cb4b-8139-14cb80982081</stRef:instanceID>\n            <stRef:documentID>xmp.did:834d4cc7-02d9-4757-a180-d79ec67c6416</stRef:documentID>\n            <stRef:originalDocumentID>uuid:9E3E5C9A8C81DB118734DB58FDDE4BA7</stRef:originalDocumentID>\n            <stRef:renditionClass>proof:pdf</stRef:renditionClass>\n         </xmpMM:DerivedFrom>\n         <xmpMM:History>\n            <rdf:Seq>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <stEvt:action>saved</stEvt:action>\n                  <stEvt:instanceID>xmp.iid:d5f62d1b-7efe-4d05-b1f8-644cb847dfa0</stEvt:instanceID>\n                  <stEvt:when>2025-03-14T22:23:46+08:00</stEvt:when>\n                  <stEvt:softwareAgent>Adobe Illustrator 29.3 (Macintosh)</stEvt:softwareAgent>\n                  <stEvt:changed>/</stEvt:changed>\n               </rdf:li>\n            </rdf:Seq>\n         </xmpMM:History>\n         <xmpMM:Manifest>\n            <rdf:Seq>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <stMfs:linkForm>EmbedByReference</stMfs:linkForm>\n                  <stMfs:reference rdf:parseType=\"Resource\">\n                     <stRef:filePath>empty_icon.png</stRef:filePath>\n                  </stMfs:reference>\n               </rdf:li>\n            </rdf:Seq>\n         </xmpMM:Manifest>\n         <xmpMM:Ingredients>\n            <rdf:Bag>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <stRef:filePath>empty_icon.png</stRef:filePath>\n               </rdf:li>\n            </rdf:Bag>\n         </xmpMM:Ingredients>\n         <illustrator:StartupProfile>Basic RGB</illustrator:StartupProfile>\n         <illustrator:Type>Document</illustrator:Type>\n         <illustrator:CreatorSubTool>AIRobin</illustrator:CreatorSubTool>\n         <xmpTPg:NPages>1</xmpTPg:NPages>\n         <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>\n         <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>\n         <xmpTPg:MaxPageSize rdf:parseType=\"Resource\">\n            <stDim:w>512.000000</stDim:w>\n            <stDim:h>512.000000</stDim:h>\n            <stDim:unit>Pixels</stDim:unit>\n         </xmpTPg:MaxPageSize>\n         <xmpTPg:PlateNames>\n            <rdf:Seq>\n               <rdf:li>Cyan</rdf:li>\n               <rdf:li>Magenta</rdf:li>\n               <rdf:li>Yellow</rdf:li>\n            </rdf:Seq>\n         </xmpTPg:PlateNames>\n         <xmpTPg:SwatchGroups>\n            <rdf:Seq>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xmpG:groupName>默认色板组</xmpG:groupName>\n                  <xmpG:groupType>0</xmpG:groupType>\n                  <xmpG:Colorants>\n                     <rdf:Seq>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>白色</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>255</xmpG:green>\n                           <xmpG:blue>255</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>黑色</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB 红</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB 黄</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>255</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB 绿</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>255</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB 青</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>255</xmpG:green>\n                           <xmpG:blue>255</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB 蓝</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>255</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB 洋红</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>255</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>193</xmpG:red>\n                           <xmpG:green>39</xmpG:green>\n                           <xmpG:blue>45</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>237</xmpG:red>\n                           <xmpG:green>28</xmpG:green>\n                           <xmpG:blue>36</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>241</xmpG:red>\n                           <xmpG:green>90</xmpG:green>\n                           <xmpG:blue>36</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>247</xmpG:red>\n                           <xmpG:green>147</xmpG:green>\n                           <xmpG:blue>30</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>251</xmpG:red>\n                           <xmpG:green>176</xmpG:green>\n                           <xmpG:blue>59</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>252</xmpG:red>\n                           <xmpG:green>238</xmpG:green>\n                           <xmpG:blue>33</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>217</xmpG:red>\n                           <xmpG:green>224</xmpG:green>\n                           <xmpG:blue>33</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>140</xmpG:red>\n                           <xmpG:green>198</xmpG:green>\n                           <xmpG:blue>63</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>57</xmpG:red>\n                           <xmpG:green>181</xmpG:green>\n                           <xmpG:blue>74</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>146</xmpG:green>\n                           <xmpG:blue>69</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>104</xmpG:green>\n                           <xmpG:blue>55</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>34</xmpG:red>\n                           <xmpG:green>181</xmpG:green>\n                           <xmpG:blue>115</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>169</xmpG:green>\n                           <xmpG:blue>157</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>41</xmpG:red>\n                           <xmpG:green>171</xmpG:green>\n                           <xmpG:blue>226</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>113</xmpG:green>\n                           <xmpG:blue>188</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>46</xmpG:red>\n                           <xmpG:green>49</xmpG:green>\n                           <xmpG:blue>146</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>27</xmpG:red>\n                           <xmpG:green>20</xmpG:green>\n                           <xmpG:blue>100</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>102</xmpG:red>\n                           <xmpG:green>45</xmpG:green>\n                           <xmpG:blue>145</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>147</xmpG:red>\n                           <xmpG:green>39</xmpG:green>\n                           <xmpG:blue>143</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>158</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>93</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>212</xmpG:red>\n                           <xmpG:green>20</xmpG:green>\n                           <xmpG:blue>90</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>237</xmpG:red>\n                           <xmpG:green>30</xmpG:green>\n                           <xmpG:blue>121</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>199</xmpG:red>\n                           <xmpG:green>178</xmpG:green>\n                           <xmpG:blue>153</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>153</xmpG:red>\n                           <xmpG:green>134</xmpG:green>\n                           <xmpG:blue>117</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>115</xmpG:red>\n                           <xmpG:green>99</xmpG:green>\n                           <xmpG:blue>87</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>83</xmpG:red>\n                           <xmpG:green>71</xmpG:green>\n                           <xmpG:blue>65</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>198</xmpG:red>\n                           <xmpG:green>156</xmpG:green>\n                           <xmpG:blue>109</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>166</xmpG:red>\n                           <xmpG:green>124</xmpG:green>\n                           <xmpG:blue>82</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>140</xmpG:red>\n                           <xmpG:green>98</xmpG:green>\n                           <xmpG:blue>57</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>117</xmpG:red>\n                           <xmpG:green>76</xmpG:green>\n                           <xmpG:blue>36</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>96</xmpG:red>\n                           <xmpG:green>56</xmpG:green>\n                           <xmpG:blue>19</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>66</xmpG:red>\n                           <xmpG:green>33</xmpG:green>\n                           <xmpG:blue>11</xmpG:blue>\n                        </rdf:li>\n                     </rdf:Seq>\n                  </xmpG:Colorants>\n               </rdf:li>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xmpG:groupName>冷光</xmpG:groupName>\n                  <xmpG:groupType>1</xmpG:groupType>\n                  <xmpG:Colorants>\n                     <rdf:Seq>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>C=56 M=0 Y=20 K=0</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>101</xmpG:red>\n                           <xmpG:green>200</xmpG:green>\n                           <xmpG:blue>208</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>C=51 M=43 Y=0 K=0</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>131</xmpG:red>\n                           <xmpG:green>139</xmpG:green>\n                           <xmpG:blue>197</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>C=26 M=41 Y=0 K=0</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>186</xmpG:red>\n                           <xmpG:green>155</xmpG:green>\n                           <xmpG:blue>201</xmpG:blue>\n                        </rdf:li>\n                     </rdf:Seq>\n                  </xmpG:Colorants>\n               </rdf:li>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xmpG:groupName>灰色</xmpG:groupName>\n                  <xmpG:groupType>1</xmpG:groupType>\n                  <xmpG:Colorants>\n                     <rdf:Seq>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>26</xmpG:red>\n                           <xmpG:green>26</xmpG:green>\n                           <xmpG:blue>26</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>51</xmpG:red>\n                           <xmpG:green>51</xmpG:green>\n                           <xmpG:blue>51</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>77</xmpG:red>\n                           <xmpG:green>77</xmpG:green>\n                           <xmpG:blue>77</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>102</xmpG:red>\n                           <xmpG:green>102</xmpG:green>\n                           <xmpG:blue>102</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>128</xmpG:red>\n                           <xmpG:green>128</xmpG:green>\n                           <xmpG:blue>128</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>153</xmpG:red>\n                           <xmpG:green>153</xmpG:green>\n                           <xmpG:blue>153</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>179</xmpG:red>\n                           <xmpG:green>179</xmpG:green>\n                           <xmpG:blue>179</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>204</xmpG:red>\n                           <xmpG:green>204</xmpG:green>\n                           <xmpG:blue>204</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>230</xmpG:red>\n                           <xmpG:green>230</xmpG:green>\n                           <xmpG:blue>230</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>242</xmpG:red>\n                           <xmpG:green>242</xmpG:green>\n                           <xmpG:blue>242</xmpG:blue>\n                        </rdf:li>\n                     </rdf:Seq>\n                  </xmpG:Colorants>\n               </rdf:li>\n            </rdf:Seq>\n         </xmpTPg:SwatchGroups>\n         <pdf:Producer>Adobe PDF library 16.04</pdf:Producer>\n      </rdf:Description>\n   </rdf:RDF>\n</x:xmpmeta>\n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                           \n<?xpacket end=\"w\"?>\r\nendstream\rendobj\r3 0 obj\r<</Count 1/Kids[5 0 R]/Type/Pages>>\rendobj\r5 0 obj\r<</ArtBox[0.0 0.0 512.0 512.0]/BleedBox[0.0 0.0 512.0 512.0]/Contents 33 0 R/CropBox[0.0 0.0 512.0 512.0]/LastModified(D:20250314224745+09'00')/MediaBox[0.0 0.0 512.0 512.0]/Parent 3 0 R/PieceInfo<</Illustrator 7 0 R>>/Resources<</ColorSpace<</CS0 34 0 R>>/ExtGState<</GS0 35 0 R/GS1 36 0 R>>/Properties<</MC0 28 0 R/MC1 29 0 R/MC2 31 0 R/MC3 30 0 R>>/XObject<</Fm0 37 0 R>>>>/Thumb 38 0 R/TrimBox[0.0 0.0 512.0 512.0]/Type/Page>>\rendobj\r33 0 obj\r<</Filter/FlateDecode/Length 807>>stream\r\nHTn\u00141\f)\u0002㍝Nl\u000b\u0005\"qFRPo̊\u0010\u0019O|6oN%8ٞ˜\u000b:m_.iokK]YEnұ\u001c\u001fr{>\u001bmR)4x\u000biW,\u0017'k{4\u0000xwS~\u0019x\u0005U'߰q#W#W^\u001cR\u000eY -]jp5y\u0019Oz\u0007AkTpdАx#q;OL0\nm8Zh4|䇴h1J8`\nt\u0016K3\u00196}\u0000g\u0012\u0007V9W\u0013v$T+)Ri\u000e9d4ڈ7OAkiA7b\u0000a4\tv@\u001d\u0004 \u0019!bhS+JA\u0001.\u0003P\\\f=\u0014(\u0012\f9E\u0019d\u0003\b2vAVql\u001b`!\u00054\u0017)5c1\n+\u0017N\f\t\u0018@5\u0012)\u0015\u0010a\u0003L\u0005\u0002$\u001e\"\u0011P9TXՂ:s\"\u0012}\u0010\\(\u001c{l4dZT iI䬵-\u0018\u001dy8A߶,`2<# \u0013\u0006\\F@F\u000f+b\u0000_PE^0Rd2\u0000\u00007Ɗ@\u0014\t\u001e\u001b3K\n\u0018V\u0000\u0016z!.6AhX8?\u0001>J0\u00192R{[KLxŪBV=J\"BV,\u0012Ց<\u00067?*\u000e5^@L\u00024\"1\u001d1\u00012\u0015\u0006\u0019UT\u0014#\\f`\u001bz\"ץD=f\u000f\u001c\u001f\u0007#0\u001cwB}ލ\u0018͊P\u0010\u0010\u001c\u0019ׁw̶U\t\u0014Hj\u0010-!Ej8Hc|GX}n?\b\u0014ly0Iǎ@Y\u0018\u000b\u001bz^\t9\u0016k\u0006Μ&\fi\u0003~Nr\u0014^}/\u0001\u0006\u0000r[\r\nendstream\rendobj\r38 0 obj\r<</BitsPerComponent 8/ColorSpace 39 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 64/Length 442/Width 64>>stream\r\n8;Z\\s40AZ/$q1t$W`8L@VFm2_$rjPF.V:DOkF\"OO!mF<&#[:AfKKSt=G-kS\\@`>MT\n(]:');k2jBrl9L8:f;:EIi\\G$W(Y[Qgf9FOgucTD.E1QB693*#8_/H&IKCd]\\Sf[n\ne6I8oDo?PKHSG*nWCUpn)*F9ofEo7UD^TKVN4TaL`Ad_1jrH]mUu/$5T6\\dpGZFB.\n4rHD3'23WNGBc[DJEr70pcI\\a!:Tuep<TfBCjZJ3E(TdG-g3Vl0*!B2J*,;]0,XO.\nZN\"`m[gmqb%jLl]lJ+XtpIY'cHI/K9/k#R&%L2Q3jo10\"(sqFuAG#*r7eE)V[(l3_\nelVLkKn;MF5n-*D]sOs=RgH+k#!L*m<=Y\\U)kcG&l3SBjAd9W1HDqlten[mL@\\UIn\nYoli)e%[K\\4K)RqpJ/,VGL1SSjSe?Y.oq$rr!`YTVOj1~>\r\nendstream\rendobj\r39 0 obj\r[/Indexed/DeviceRGB 255 40 0 R]\rendobj\r40 0 obj\r<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream\r\n8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@\"pJ+EP(%0\nb]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\\Ulg9dhD*\"iC[;*=3`oP1[!S^)?1)IZ4dup`\nE1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\\.?d>Mn\n6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1\nVNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<\nPO7r\\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(\nl[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\\~>\r\nendstream\rendobj\r37 0 obj\r<</BBox[54.5574 457.443 457.443 54.5574]/Group 41 0 R/Length 0/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<<>>/Subtype/Form>>stream\r\n\r\nendstream\rendobj\r41 0 obj\r<</I false/K false/S/Transparency/Type/Group>>\rendobj\r28 0 obj\r<</Intent 42 0 R/Name(V\\\\B\u0000 \u00002)/Type/OCG/Usage 43 0 R>>\rendobj\r29 0 obj\r<</Intent 44 0 R/Name(V\\\\B\u0000 \u00001)/Type/OCG/Usage 45 0 R>>\rendobj\r31 0 obj\r<</Intent 46 0 R/Name(V\\\\B\u0000 \u00003)/Type/OCG/Usage 47 0 R>>\rendobj\r30 0 obj\r<</Intent 48 0 R/Name(V\\\\B\u0000 \u00004)/Type/OCG/Usage 49 0 R>>\rendobj\r48 0 obj\r[/View/Design]\rendobj\r49 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 26.2)/Subtype/Artwork>>>>\rendobj\r46 0 obj\r[/View/Design]\rendobj\r47 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 26.2)/Subtype/Artwork>>>>\rendobj\r44 0 obj\r[/View/Design]\rendobj\r45 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 26.2)/Subtype/Artwork>>>>\rendobj\r42 0 obj\r[/View/Design]\rendobj\r43 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 26.2)/Subtype/Artwork>>>>\rendobj\r35 0 obj\r<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>\rendobj\r36 0 obj\r<</AIS false/BM/Normal/CA 0.5/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 0.5/op false>>\rendobj\r34 0 obj\r[/ICCBased 50 0 R]\rendobj\r50 0 obj\r<</Filter/FlateDecode/Length 2574/N 3>>stream\r\nHyTSw\u0016oɞc\r[\u00065la\u001d\u0004Q\bI\b\u0001\u0012BH\u0005AD\u0005\u0014ED2mtFOE.c\u000e}\u000308\u0016׎\u00178GNg\u001f9w߽\u0000'0\u000b\u0000֠J\u0016\u0015\u0014b\t\u0000\u0003\n \u0002\u0011\u00002y.-;!\u0007KZ\t^\u0007i\"L0-\r\u0000@\u00198\u0007(r;q7L\u0019y&Q\u0013\u0004q4j|9\nV)gB0iW\u00198#8wթ8_٥ʨQ\u0014Qj\u0001@&A)/\u000fg>'K\u0002\u0000t;\\\u000e\u001b\r\u0006ӥ$պFZUn\u001e(4T%)뫔\u00060C&\u0015Zi\u001b\u00018bxEB\u001f;Pӓ̹A\u000bom?W=\nx\u0016-\u0000\u0004[\u00000\u001d}y)7\u0018ta>jT7\u000e@tܛ`q2ʀ&6ZLĄ?\u001d_\u001dyxg)˔z\u0016çLU*\u0006u\u0016SkS\u0013eO4?׸c\u0001\u0007.\u0000\u000b\u0000\u0000R\r߁-\u000725\tS>ӣVd`rn~Y\u0002\u0002\u0002&\u0001+`\u000f;\u0010\u0002\u0010\u0002A4\u0007 \u001d\u0002\u0014A9\u0000=\u0007-\u001dt\u001e\u001el\u0002`;\u0018\u0003~p\u0010\tGp\u001e|\t[`\u0012L`\u0006<\u0005 \b\"A\f\u000bYA\u000e+\u0005Cb(\u0012R,\u0000*T\u00162B-\n\u0007ꇆ\u001dnQ\u0004t\u000e\u0004}\u0005MA\u000f0\u0002a\u001el\u0007\u0018S\u001cx\tk&\u0013^\u0007\u000f>0|\u0002>\u000f_',\u0002\u0010\u001aG\u001c\u0011!\"F$H:R!z\u0015F\u0006Qd?r\f9\\A&G\u000brQ\f\u0015h\u0012\u001a\u0015E]a4z\u0005Bg\u0004\u0006E\b#H\t\b*B=0HIpp0MxJ$\u0012D\u00011D, V\u0010ĭ\u0003KĻY\u0012dE\"EI2EBGt4MzN\u001d\u0004r!YK \u000f?%_&#(0J:EAiQ((\u0017)ӔWT6U@P+!~\u0019m\u0013\u001aD\u000beԴ!hӦh/\u001c']B/\u001b\u001fҏӿ?a0\u0018nhF!X8܌kc&5S\u001d6lIa2cKMA!E#\u0016ƒdV\b(\u0006kel\r}}Cq9\nN'\u0003)].uJr\n\u0018\fwG\txR^\u0005[\u0004oƜc\u001ehg`>b$\u001f*~\u001f :Eb~\u0016,m,-ݖ\u0007,Y¬*6X[ݱF=3뭷Y~dó\tt\u001ci\u000bzf6~`{v.Ng#{}}\u000f\u001c\u000e\u000ej\u0001\u001cc1X\u00156f\u001cm\u001d\u001c;\u001c'\u001c_9\tr:\u000e8q:˜\u0007O:ϸ8uJq\u0015nv=MmR \u00154\t\nn3ܣkGݯz\u0010=\u001e\u001e[==<=G</z^^j^\tޡZQ\u001bB0FX'+t<u-{__ߘ-\u0011G,\u0010\u001d\u0013}/\u001f\u001a\bH\bh\u000b8\u0012mW2p[AiAN\u0006#8$X\u001f?AKHI{!7<qWy(!46-\u0017aaa\u000f\u0017W\t@@`l\b\bYĎH,$((Yh7ъb<b*b<~\u0014L\u0012&Y&9\u001e%uMssNpJP%MI\fJlN<DHJIڐtCj'KwKgC%Nd\f|ꙪO=\u0006%mLuvx:HoL!ȨC&13#s$/Y=Osbsrn\u001asO1v=ˏϟ\\h٢\u0005\u0005#¼\u0017oZ<]\u0014TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7\u001f*\u0015\u0003\u0007\be^YDY}UjAyT`#D=\"b{ų\u000f+ʯ:!kJ4G\u001cmt}uC%K7Y\u0013VfFY\u000b.=b?S\u0017ƕƩȺy\u001a\rچ\u000bk\u001a5%4\u0019m7lqlioZ\u0016lG+Zz͹mzy]?uuw|\"űNwW&e֥ﺱ*|j5\u0001kyݭǯg^y\u0017kEklD_p߶7Dmo꿻1m\u0001l{Mś\r\u0006\u000enLl<9O\u0000\u0001[$h՛B\u001cdҞ@\u001diءG&\u0006vVǥ8\u001anRĩ7\u001c\u0002u\\ЭD-\u0016\u0000u`ֲK³8%\u0013\u0001yhYѹJº;.!\u0015\nzpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\\dlvۀ\u0005܊\u0010ݖ\u001cޢ)߯6DScs\r\u001f2F[p\u0011(@Xr\u00194Pm\u00198Ww\u0007)Km\u0002\f\u0000\r\nendstream\rendobj\r7 0 obj\r<</LastModified(D:20250314224745+09'00')/Private 22 0 R>>\rendobj\r22 0 obj\r<</AIMetaData 23 0 R/AIPrivateData1 24 0 R/AIPrivateData2 25 0 R/AIPrivateData3 26 0 R/ContainerVersion 11/CreatorVersion 26/NumBlock 3/RoundtripStreamType 1/RoundtripVersion 17>>\rendobj\r23 0 obj\r<</Length 1110>>stream\r\n%!PS-Adobe-3.0 \r\n%%Creator: Adobe Illustrator(R) 17.0\r\n%%AI8_CreatorVersion: 26.2.1\r\n%%For: (Administrator) ()\r\n%%Title: (Icon.ai)\r\n%%CreationDate: 3/14/2025 10:47 PM\r\n%%Canvassize: 16383\r\n%%BoundingBox: 70 -391 477 -76\r\n%%HiResBoundingBox: 70.1853025442697 -390.731834029115 476.640686035156 -76.9185647838622\r\n%%DocumentProcessColors: Cyan Magenta Yellow\r\n%AI5_FileFormat 13.0\r\n%AI12_BuildNumber: 197\r\n%AI3_ColorUsage: Color\r\n%AI7_ImageSettings: 0\r\n%%RGBProcessColor: 0 0 0 ([套版色])\r\n%AI3_Cropmarks: 0 -512 512 0\r\n%AI3_TemplateBox: 256.5 -256.5 256.5 -256.5\r\n%AI3_TileBox: -50 -652 562 140\r\n%AI3_DocumentPreview: None\r\n%AI5_ArtSize: 14400 14400\r\n%AI5_RulerUnits: 6\r\n%AI9_ColorModel: 1\r\n%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0\r\n%AI5_TargetResolution: 800\r\n%AI5_NumLayers: 4\r\n%AI9_OpenToView: -329 139 1.03660278536935 1096 808 18 0 0 46 86 0 0 0 1 1 0 1 1 0 0\r\n%AI5_OpenViewLayers: 6722\r\n%%PageOrigin:-144 -556\r\n%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142\r\n%AI9_Flatten: 1\r\n%AI12_CMSettings: 00.MS\r\n%%EndComments\r\n\r\nendstream\rendobj\r24 0 obj\r<</Length 11552>>stream\r\n%%BoundingBox: 70 -391 477 -76\r\n%%HiResBoundingBox: 70.1853025442697 -390.731834029115 476.640686035156 -76.9185647838622\r\n%AI7_Thumbnail: 128 100 8\r\n%%BeginData: 11361 Hex Bytes\r\n%0000330000660000990000CC0033000033330033660033990033CC0033FF\r\n%0066000066330066660066990066CC0066FF009900009933009966009999\r\n%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66\r\n%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333\r\n%3333663333993333CC3333FF3366003366333366663366993366CC3366FF\r\n%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99\r\n%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033\r\n%6600666600996600CC6600FF6633006633336633666633996633CC6633FF\r\n%6666006666336666666666996666CC6666FF669900669933669966669999\r\n%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33\r\n%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF\r\n%9933009933339933669933999933CC9933FF996600996633996666996699\r\n%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33\r\n%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF\r\n%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399\r\n%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933\r\n%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF\r\n%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC\r\n%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699\r\n%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33\r\n%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100\r\n%000011111111220000002200000022222222440000004400000044444444\r\n%550000005500000055555555770000007700000077777777880000008800\r\n%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB\r\n%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF\r\n%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF\r\n%524C45FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFD57FF85AFAF\r\n%FD7CFFAF8B618B85AFA9FD7AFFFD048B858BAFFD79FFAF858B858B858B85\r\n%FD79FF8B858B8B8B858B85FD78FF858B858B858B858B85AFFD76FFAF85AF\r\n%8B8B8BAF8B8B85AFFD75FFAF8B858B858B858B858B61AFFD5FFFAEFFAFFD\r\n%13FF8B8B858B8B8B858B8B8B858BAFFD58FFAEAE8AAE8AAE8AAE8AAEAEFF\r\n%AEFD0EFFAF858B858B858B858B858B858BA9FD56FFAEAE8AAFAEAF8AAFAE\r\n%AE8AAF8AAFAEFFAFFD0BFFAF8B8BAF8B8B8BAF8B8B8BAF8B8BA9FD52FFAF\r\n%AE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAEAEFFAEFD07FF858B85\r\n%8B858B858B858B858B858B85FD51FFAF8AAE8AAFAEAE8AAFAEAE8AAFAEAE\r\n%8AAFAEAE8AAFAEAE8AAFAEAFAEFD04FFAF8B8B858B8B8B858B8B8B858B8B\r\n%8B85FD4FFFAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE848B858B858B858B858B858B858B858B61AFFD4CFFAF\r\n%8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAF\r\n%AEAEAE8B37AF8BAF8B8B8BAF8B8B8BAFFD058BAFFD4BFF8AAE8AAE8AAE8A\r\n%AE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE840F37\r\n%8B858B858B858B858B858B858B858B858BFD49FF8AAFAEAE8AAFAEAE8AAF\r\n%AEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAE8B0F0F37AF\r\n%FD048B858B8B8B858B8B8B858B8B8BAFFD46FFAEAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE840F0F0F37\r\n%8B858B858B858B858B858B858B858B858BA9FD44FFAEAE8AAFAEAF8AAFAE\r\n%AF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAE8B0F\r\n%150F0F37AF8B8B8BAF8B8B8BAF8B8B8BAFFD048BAFFD42FFAEAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE84FD050F378B858B858B858B858B858B858B858B858B85FD41FFAF8A\r\n%AFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAE\r\n%AE8AAFAEAEAE8B0F0F0F150F0F37AF8B8B858B8B8B858B8B8B858B8B8B85\r\n%8B85FD3FFFAF8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE8AAE8AAE8AAE84FD070F378B858B858B858B858B858B\r\n%858B858B858B85AFFD3DFFAEAE8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8A\r\n%AFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAFAEAF0F150F150F150F0F37\r\n%AF8BAF8B8B8BAF8B8B8BAF8B8B8BAF8B8B85AFFD3BFF8AAE8AAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE84FD090F378B858B858B858B858B858B858B858B858B61AFFD39FFAE\r\n%AE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8A\r\n%AFAEAE8AAFAEAE8AAFAE8B0F150F0F0F15FD040F37FD058B858B8B8B858B\r\n%8B8B858B8B8B85AFFD37FFAEAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE60FD0C0F8B858B\r\n%858B858B858B858B858B858B858B618BA9FD35FFAFAEAF8AAFAEAF8AAFAE\r\n%AF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8A\r\n%AFAE8B0F150F150F150F150F150F0F37AF8B8B8BAF8B8B8BAF8B8B8BAF8B\r\n%8B8BAF8B8BAFFD33FFAF8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE60FD0E0F8B8B8B85\r\n%8B858B858B858B858B858B858B858B85FD32FF8AAE8AAFAEAE8AAFAEAE8A\r\n%AFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAE\r\n%AEAE8B0F0F0F150F0F0F150F0F0F150F0F378B8B8B858B8B8B858B8B8B85\r\n%8B8B8B858B8B8B85FD30FF8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE60FD100F8B\r\n%858B858B858B858B858B858B858B858B858B85FD2EFFAEAFAEAF8AAFAEAF\r\n%8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAF\r\n%AEAF8AAFAEAFAE8B0F150F150F150F150F150F150F150F0F158B8BAF8B8B\r\n%8BAF8B8B8BAF8B8B8BAFFD048B85FD2CFFAFAE8AAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE60FD120F8B858B858B858B858B858B858B858B858B858B85FD2BFF\r\n%673DAEAEAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAE\r\n%AE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAE8B0F150F0F0F150F0F0F150F0F0F\r\n%15FD040F15FD058B858B8B8B858B8B8B858B8B8B858B85FD29FF8B151B1B\r\n%8AAEAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE8AAE8AAE8AAE8AAE8AAE60FD140F8B858B858B858B858B858B858B\r\n%858B858B858B85FD28FFFD051B67AEAE8AAFAEAF8AAFAEAF8AAFAEAF8AAF\r\n%AEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAE8B0F150F15\r\n%0F150F150F150F150F150F150F150F0F0FFD048BAF8B8B8BAF8B8B8BAF8B\r\n%8B8BAF8B8BA9FD26FF3DFD061B438AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE60FD160F8B8B\r\n%8B858B858B858B858B858B858B858B858BA9FD24FF61FD091B66AEAEAFAE\r\n%AE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8A\r\n%AFAEAEAE8B0F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F8B8B\r\n%8B858B8B8B858B8B8B858B8B8B858B8B8BFD23FFA9FD0B1B3C8AAEAE8AAE\r\n%8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE60FD180F858B8B858B858B858B858B858B858B858B858BFD22FF431B\r\n%FB1B1B1BFB1B1B1BFB1B1B1B8BAEAE8AAFAEAF8AAFAEAF8AAFAEAF8AAFAE\r\n%AF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAFAE850F150F150F150F150F150F\r\n%150F150F150F150F150F150F150F8B8BAF8B8B8BAF8B8B8BAF8B8B8BAF8B\r\n%8B85FD21FF8BFD0F1B438AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE8AAE8AAE8AAE60FD1A0F85858B858B858B858B858B85\r\n%8B858B858B85FD20FFFD111B3D66AEAEAFAEAE8AAFAEAE8AAFAEAE8AAFAE\r\n%AE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAE850F150F0F0F150F0F0F150F0F0F\r\n%150F0F0F150F0F0F15FD050FFD058B858B8B8B858B8B8B858B8B8BA9FD1E\r\n%FF3DFD131B3CAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE8AAE8AAE60FD1C0F61858B858B858B858B858B858B858B858BFD1D\r\n%FF8B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1B8BAEAE8AAFAE\r\n%AF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAF8AAFAE850F150F150F\r\n%150F150F150F150F150F150F150F150F150F150F150F0F0FFD048BAF8B8B\r\n%8BAF8B8B8BAF8B8B85FD1CFFAFFD181B678AAE8AAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE8AAE8AAE8AAE8AAE8AAE8AAE60FD1E0F858B8B858B858B858B858B\r\n%858B858B85FD1BFF67FD191B438AAEAEAFAEAE8AAFAEAE8AAFAEAE8AAFAE\r\n%AE8AAFAEAE8AAFAEAEAE850F0F0F150F0F0F150F0F0F150F0F0F150F0F0F\r\n%150F0F0F150F0F0F150F0F0F858B8B858B8B8B858B8B8B858B8B8BFD1AFF\r\n%8BFD1C1B3CAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE\r\n%5AFD200F858B8B858B858B858B858B858B85AFFD19FF1B1B1BFB1B1B1BFB\r\n%1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1B8BAEAE8AAFAEAF\r\n%8AAFAEAF8AAFAEAF8AAFAEAF8AAFAEAFAE850F150F150F150F150F150F15\r\n%0F150F150F150F150F150F150F150F150F150F150F858BAF8B8B8BAF8B8B\r\n%8BAF8B8B85FD18FF3DFD201B678AAE8AAE8AAE8AAE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE8AAE60FD220F61858B858B858B858B858B858BA9FD16FFAFFD221B\r\n%438AAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAEAE8AAFAE850F150F0F0F150F\r\n%0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F15FD050F61FD048B\r\n%858B8B8B858B8BAFFD15FFAF3DFD221B151B60AE8AAE8AAE8AAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE60FD240F61858B858B858B858B858B85AFFD14FF8B1B\r\n%1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1B\r\n%FB1B1B1BFB1B1B3DAFAEAE8AAFAEAF8AAFAEAF8AAFAEAF8AAFAE610F150F\r\n%150F150F150F150F150F150F150F150F150F150F150F150F150F150F150F\r\n%150F0F0F858B8B8BAF8B8B8BAF8B8B85FD13FFAFFD291B67AEAE8AAE8AAE\r\n%8AAE8AAE8AAE8AAE8AAE36FD260F618B8B858B858B858B858BA9FD12FF3D\r\n%FD2A1B438AAE8AAFAEAE8AAFAEAE8AAFAEAEAE610F0F0F150F0F0F150F0F\r\n%0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F61\r\n%8B8B858B8B8B858B8BAFFD11FF85FD2B1B151B60AE8AAE8AAE8AAE8AAE8A\r\n%AE8AAE36FD280F618B8B858B858B858B85FD11FF431B1B1BFB1B1B1BFB1B\r\n%1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1B\r\n%FB1B1B1BFB1B1B3DAFAEAF8AAFAEAF8AAFAEAFAE610F150F150F150F150F\r\n%150F150F150F150F150F150F150F150F150F150F150F150F150F150F150F\r\n%150F618BAF8B8B8BAF8B8BA9FD0FFF8BFD311B8BAEAE8AAE8AAE8AAE8AAE\r\n%36FD2A0F61858B858B858B858BA9FD0EFFFD331B678AAE8AAFAEAE8AAFAE\r\n%610F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F\r\n%150F0F0F150F0F0F150F0F0F150F618BAF8B8B858B8BAFFD0DFF61FD331B\r\n%153D60AE8AAE8AAE8AAE36FD2C0F61858B858B858B85FD0DFF671B1B1BFB\r\n%1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B\r\n%1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B3CAFAEAF8AAFAE610F15\r\n%0F150F150F150F150F150F150F150F150F150F150F150F150F150F150F15\r\n%0F150F150F150F150F150F150F618B8B8BAF8B8BAFFD0CFFFD391B8BAEAE\r\n%8AAE36FD2E0F618B8B858B858BFD0CFFFD3A1B67AEAEAE610F0F0F150F0F\r\n%0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F15\r\n%0F0F0F150F0F0F150F0F0F618B8B858B85AFFD0BFFFD3A1B153D84AEAE5B\r\n%FD2F0F5B858B858B85FD0BFF3D1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1B\r\n%FB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B\r\n%1B1BFB1B1B1BFB1B1B1BFB1B1B3CFFFF5B0F150F150F150F150F150F150F\r\n%150F150F150F150F150F150F150F150F150F150F150F150F150F150F150F\r\n%150F150F618BAF8B8BFD0BFF3DFD3C1B3DAFFFFF37FD2F0F37858B85FD0B\r\n%FF8BFD3B1B8BFD05FF370F150F0F0F150F0F0F150F0F0F150F0F0F150F0F\r\n%0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F618BAF\r\n%FD0BFFA9FD391B3DFD07FFA93709FD2E0F3785FD0CFF8B1B1BFB1B1B1BFB\r\n%1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B\r\n%1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1B438BFD09FFA9370F150F150F15\r\n%0F150F150F150F150F150F150F150F150F150F150F150F150F150F150F15\r\n%0F150F150F150F150F150F61FD0DFF85FD341B3DA9FD0BFFA937FD2F0FFD\r\n%0EFFAF3DFD311B8BFD0EFFA9150F150F150F0F0F150F0F0F150F0F0F150F\r\n%0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F5BFD\r\n%0FFFAF3D15FD2D1B3DAFFD10FF85FD2D0F85FD10FFAF431B1B1BFB1B1B1B\r\n%FB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B\r\n%1B1BFB1B1B1BFB61FD13FFA90F0F150F150F150F150F150F150F150F150F\r\n%150F150F150F150F150F150F150F150F150F150F150F150F150FFD12FFAF\r\n%43FD291B3DA9FD15FF85FD2A0F85FD14FF67FD271B8BFD18FF850F0F150F\r\n%0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F150F0F0F\r\n%150F0F0F150F5BFD16FF67FD251BAFFD1AFF7FFD260F5BFD18FF8BFD051B\r\n%FB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFBFD041B61FD\r\n%1DFF850F0F150F150F150F150F150F150F150F150F150F150F150F150F15\r\n%0F150F150F150F0F0FAFFD1AFF8BFD1F1B3D85FD1FFF5BFD210F5BFD1DFF\r\n%AFFD1D1B67FD22FF7FFD040F150F0F0F150F0F0F150F0F0F150F0F0F150F\r\n%0F0F15FD050F37A9FD1FFFAFFD1B1BAFFD24FF5BFD1C0F85FD23FF3D1B1B\r\n%FB1B1B1BFB1B1B1BFB1B1B1BFB1B1B1BFBFD041B61FD27FF5B0F0F150F15\r\n%0F150F150F150F150F150F150F150F150F150F155BFD26FF3DFD151B85FD\r\n%29FF5BFD160F5BA9FD28FF61FD121B67FD2CFF610F0F150F0F0F150F0F0F\r\n%150F0F0F15FD040F37AFFD2BFF85FD101B8BFD2EFF5BFD100F3785FD2EFF\r\n%AF431B1B1BFB1B1B1BFBFD041B3DFD31FF85370F0F0F150F150F150F150F\r\n%0F0F85FD31FFAF67FD091B3D85FD33FFA98531FD080F375BFD36FF61673D\r\n%433D6761AFFD38FFAFA9FD0585FD3CFFAFFD64FFFF\r\n%%EndData\r\n\r\nendstream\rendobj\r25 0 obj\r<</Length 65536>>stream\r\n%AI12_CompressedDataxO&Iv޷o\u0005\u0019A}?b,\u0018[\u001a#\u000efHFh\u0014Ò\u0006ݢ\u001f2\u0017\u0017\u000bm#Q\u0016>D[3=\f%ݗ7#3223~wt]>~ׯ~\u0007\u0017\u001d/\u001cO\tng?3_y\u0007X]%_yf^O\u001f޽{-W_[S?n\\.?y_7\u0011jꉃy?pi4%vU񛟼椻Ksu4.Z\n=-\u0010]_jj[*T:\u001bvUͭ^cw}_^w_{\u000f.G~n-./xv\u001fO_⵽/_}}\tI/\u000fC7_|O^+\u000bxTW֑\u000fC?}@v;}q\u0014vTgWu/|_r\u0012f\u001f\u0017_7Лޕ'u=NXWXW5^B^]__O޽}=ų_ԿdM?훯mUǆ\u001f\u0017vŵ_;_{ǯ6\u0001}ך}?||<oGxS\r\u0014}%-պfsĔ\u001cul>{݈^sݭ6>?G\u001f|bo/ϯ_K;{\u0006\tam(呡Z\r\u001c͑Z%ی}~Sϟ\u0016k{2_lPu/;ҁOmztG?\u001bk\u000f?%\u001b\u0017o5Ѣ&V~_s?x,R?Kwj~\u0016sYlv,5;6?39h\u001fٿ\u001fvݨXgv`7giK?KeMrS\u000e\u0002~cfz.:i_q¡<Џ\u0019^^|\u0006s~/͟}ū\\V\ro\u001bK\u0016~_f\b_}śx7_߽<\u001a54}ؒ̑o1-t\u0007nf//_7_>ft\u001fmSv߯o-}\ruoD-\u001fW==ȝ}Z>~=jo1#뷟u\\l\u001cǕn&潗o\u001a~埽W_l<1܊|_\u001f6i\u0000\u001dO~?.ogW1\f?y՗|\u001e\u0004SGM]?}?#Dqu[l\u001e\u0017`Rbhg><\u000f\u000fExiVHѾp5j]{\nb}uFϽCI2{\u001ez=}\u001f\u001f/_x^e{Y_ez\u0019_ۋ/\u001e^<qًh/\"H/b{xb\r[W[)_~]/fw\u0004\u001e\t\u0015-\u001e\u000e]O=\u001d<]s[Ͽ\u00045\u0016N3P\u0014mN'\u000f/m=7oޭ\u001co6m\u001e<\u0019lV!f2a=s~S~ٛ罅cuLޮq×[oQ>'\u001f^;F}f_y׾`_&\bCyQl~4'35m\tk\u000f\u001f\u001e\u001e^z}\u000fo4KC\u001e(|d]K(\u0011[XrMӼkloiPL7<c#J\u001c9V81\u0016A\u0019(3\u000fյ\u001d\fd)\u0019\\v~?|y_l57\u001e/3?6\u0005EK\u000fU5u\u001bkZ,%e''I\u000bRK˳ro\f0_jQSW*4Y}GAW6{M\u00004-5N73\u001e\u001a{;Q>\u0005}w^KP\u0019\u000fzL.>l_\u0019l~ڟ/\u0013NR\u000b^.\u001fg7:ض\u0006z{h@7`\u0012@\u001fyg@R[mp&~۴{0lc،(6?͔`b͢\u0007S6Æ=BXl\u001e&\u0017Olyl_8r\u0000-E[ul9\u000e-m.g=R>|\u001c{-%PZ*eZlP(m훗6#)O>ʒ.\u0014Zga՟VV:\u001bONu6M*y\u0016MHRLɌ)=LR6-lC!|oSDe'\u0013Vv\u0015j}2\u001f\t2W\u001fUsg\u001eOiE<F\u0018}}(HӮc:ԫzntEeL\u001fXoG_c1o:i oVvLv\u00136|}q\u001eGz\u001cq\u001eGl/0)'5Oc?8~=imy3қw]7}x5%}mG};n\u001b#~\u001f=`\u001f:e6M9\\[\u0019Tl\u0002/7Թ+a`b0sۆ\u0012c\u000bVq6\u001bG\u001a\u001d?\u001029=)ӭ\u0002y/g9z/9bt*K]սGGl7UTh1Wu|Lɫ<\u000bR4Te1lzl}{L8\t.{II)mgh6F\fy|gϞ=\u001b5{\tY~L\u0007\u001bK)\u000fR\u0014>\u000b徨\u001f}i]\u0018%e^hrn/z\u0017UÃ\u0016]\u0000ؒ\u0018HðY\u001br\r䀪GO:Lj)/Uf9,\\ǥ^}[|\t\u001eǭ\u0015TQ6(Mm}/ǵb\u001e7\u0007\riO[8\u001f鸆sm\u001fw}4\u00036.kΒfʙ\u001b\rIr56\f2&\u0000iӘ4Fl\r`Fcئx&`_#)U̬jfZ/MT\u0004r\fj\u0014g2\u001fl4\u0011lŚ[l\r7[ִ\u0018\u001flAjP0LͰ4)k2`\u0012\t3hĻ\t/[׌eĻ\t0滛I2h\u001fZW?y\no=jW]ʗYbs\u00028W\u000eܙ37jk,m\u001fWD):{>hΟ5{;/\u000eg\u001d3љ;\u000fs0{? *3\u000exqGQ(!3fi._L7ɞZf&i\u001eYp\u0002-\u0007͜5cs8o|3[\u0013kV,a`\u0017*DO͋p[lN\\5\u001dx\u001b>;κq~,Ԯh\f|qK\u0017˜!ȗ]9bsb\u001940JY\u0012,sLJybs*uA\u001c!y0>7\u000fbʒӜ\b\u000f\u001d\u000ezz\f_ܝeAg\u0013*H;i&V@N\ny0㑃욶gZQ{`8jo\u001em>Y\u001bHmfhC~Ծb\u000e\u0017%Ͷ{f0PaVI\u00195gS3|-\u001d\u0000A;\u0015po_7ϧ\u0013\u001dIm:ni;O6U\u001b]9[؎U6)/ly=7̤M7SMdPE6$ӃI{T8q\u0017ڦ<Km\u000f&MT\fzͤ_l\u00043^`sfH6F$i6\u001aMn;Ϲw\u00140`@)\fx\u000e)xg+\u001c\u000e\u0001ws9ݜVsv\u0018\u001esFϊ7X߉]wk4\u0016J!\b\u001941wwvʿS70_xO_1o|gggggggv{NNδnN|7'\u0013ߙ{s?\u0019ooݕÿCr\u001d \u001cOΣ\u0010N@i;|\tps3\u001d@\u001c;]\u001e\u0003;:wz'P%?\r77xQg\b4{.{A\b\u000b&jZ-\u001d֝\u0003\\Cw\u0017I'\t@n\t)\u0012)f\u001dn'X%A,15\u0005\f\u0006Ae#i\u001dPⳟkhG_ɒ\u0019\rؐi\u001fC\r,mSfI֢Yk\u0002=Wjу c/gҒ)m?\u0012nL\u0019jڟ&ɺNKre\u0000;.,\u000e{!v;*Q]ン1Ʒ]ۇ\u0003t3Y\u0011E?\\l}7у\u001643]\u0016t?:jA\u000bv\u0014U$\\Iǿ=s[/F7\rJ\u0017*\u0014.)[Zf*\u0016\u0005\n*I2jWv_Dx:#VM?9\u001c\u001d\u001d׷n(Nr\u001a]\u001dF/w\u0003??\u001d__h\u001cZWJ\u0013\u0005\\NV\\E.ȱ\u001f_y\riXW9צ^YsMZgAJ?jۓOvSWVTD4)\u0004.\u0014ﳉ]^yy; 7m#L|x0!l{I?:Xy\u0007E{\u001e+\\\u001e\nW~~\u0002*+Dy_p٨g\u001fv󻟙~/vo\u001e=kϴ%gwޯ[;\u001fǿ\u0002\u001eZ\u0016œ\u001e;6\u001f;}\u0015\u0005pzu\u0004$Lmtg#R>=yy<^4q4NưVS\u000ey\u000e]8\t+S\u0000Mv\u0005).RF~j!f\fvy$\u0018DG\u0000ޕP\txn@1yݳ\u0007m\bmJK\u001e٬O{9ڸ[ûJ\u000ei!rgF)?(%|W۰ƥ {lVOax53f])B\u001f^\rˁ\u0014*?f%7g.eF]M&ZMzW7l\r$Şv\u000f[\\613>$\u001eOrZݧ0]\u000bK\u0017v/n\u001f]?.\tk(7|\u0013n<?|G\u000f{֧oAO\u001f|FWyWwﾸ|\u000f+Kx}zi\u001fF>ʘCo\u0013oo\u0007?G]3ֆRl\u0017\u001aH\u0000S\u001a=f4\u001eFlc\u0014ei\rGI&mO_i\u0004QqT;p$ah%Ck)\u0017\u001aBt٧\u0006jk\u0006p\u001bb|r\u000b\u0004}=3\u00073#( N]Z'CgX}b/\u000f!3\\p\u0017cD3Bpg_F]\n6BS.m(laTC<sN_߇gx\u0015i5˻u\"c\r߃=TTC\fv\u001aLdB\rԺV\u001eLp\u0003\rxГ\u0019մ\u00117x}kv\u001emsLy,v\u0017=<%[C\u001aM\u0018).MeD}RFI\u001b\u0014(k\u001czޥ=hiٗʛ\nM_hw)@ofwshOk蜥r\u0017\u001d1\rycv}lgl,f+/%4\u0012\u00066w*Zvɨ\u001b\u001dM&f\u0017w>mG\r\u0014m\bۙ(\u00126.'^6ݪgJVkH5wal\u0002n;{/jU6\u0017l\u0004<\u0013ߘ3L#hc#3l lG;\u0004f7iԢY&2ww*6xyvI\u000e\u000bf\u0001]U\u0011\u0019;!}tn\u0015i|26̺:ҧ\u0016B\u0019؜\u001bDgؽ9ĆΰA\fyޒNG[(M\fXvF0)ǔ0\tQ<<0SE^1gQ3=Uy~Zs0)>]\u0016`\u0012οi\nYOi\u001dUǤyF!lf>=Cl{\u000f\u0016cd)E'Φ\u000f'\r1By\u000e&\u0016z&/\u0013\u000bd\u001a.c!jg\u001e\u0003IطLز.&\u000f\f|nVkį,\u000bHWf\t@NKX\u0011D\r]sSQ\u0003\\P۲\tj']mҳmVtyǀ6\u000fׁ60WgP3J\u001a\u001a`}v\u001a6Hm \u001b\u001b̹X\u0019_,VОG\n \u0013\u0015$\t\u0019\u000e\u0001q\\ZC\u00124\tLGM\u0002sؤs\u0018[&9zvF-\u001fFtY4Ff3}$aqd^\u0014\u000356ۆcHQwɶ\u0006ga\u0016$AOְ-}\u000b\u0000VN*7>ưI?آM۽أ͌.߄=*'؇OfBB[\u000b\tx\u0006dIOP\u0017\t\u0018Ce\u0013(\"\\j;\u001ech*\u0006,\u001aiHr)ƶU\u001al\u0005;5X>8W\n/CV8\u0006\u001c\u001e?nS{\u0006\u001b\u001a\u001f\f\f[\tk+&\"HwMӰ-?۴C\u0017\u000fn2\u0016'\u001e\u0000=;\u001b|cóly\tu3II'DN2NЀi\u001efa9ն>l6uY&ٲ>Ŕ-{(\u0003{!|-\u001a섔!tk/RۘPLegkV&˘l\u001b0\u000bbrVo6Ziy95;\u000bstm4Sdֹm&|X0P\u001a7)p1/\u0007]lO0\u0011K=7FK䗡[Z\u0006S\u000f\u001aF>AUf\u0012Fj;*z\rg]D\\\u0006<{4}'E\u0012dmWL*\u0013{ȁb{-M^ꆚ\u00069_]o3jmf&\"wMy2\u001eljj0L2=goUto}~~k@M`\u001fq֐ЀP3jKI6k]iM\u000bw0<@wwg;?~i7w6C=b4eVeE62?ӞܦV\r1>1%\u0015\u0004]f0)TI\u001a]^f{Ծ6\u00134\u0017MWF\b\u0002\b@|-PWL\u001d,DNZmaiΠ\u001aoӼlNׅIf\u001a\u001c`F\u001aLJ\u001c2*7ZsVv*5Z\u0015~w,\u0010L\u0006Ҁ\u0006T밬i^Tfc%\r\u0006I\u001b{ymǷI\u0007\t\u001bbr/wfUӨ&j\fy++oڤ6Z*a\"\u0007*\u001f{X3iMY\u001b&MHZ\u001aQ>M\u000e\u0013]\u001b/\u001f4۟\u0003v[{]㚶>Mik5qĄ4{>h4XWtt^W#MVT4\u0004 p\u000ed\u001a܎\u0001K\u001d\u000be\r_V\f\u0003\u0010ѓlFIGAw$dll֝7|\\4RN\t;2\u0015Q!7@,\u00176kQ1S\u0006d\r\u0011`%\rK64y\u001fٕZ\u0016LJ\tP3c#\u0010ì\u0014fD\u001bɌ\u000f/,ZHjݲ?ԆCk:\u001e\u000f\u0014\u00051Sv\u000fu\u0016F1Ԭhg-WMIU\u0016`j˩,i&?m)R$f0x\u0012~\u0014O\u001cLrf,}K=le8.^d\u0003l\u0000}Msi\"`M\\&\tj20ۋ'F[`\n\r_6شvgb[+ZمՐ\u001dH0\u001al-\u001fs+l o={\u001dM\"6\b\u001b0y7{^?\"\u001bj\u0011 t1\n\u001b\bB\u0011oYR.~Y\u0002\u0015f\r8n@o\r%Zm\u0018A\u00185Et8n4634\u001c\u0006\\1@aןX\u0001sŌoo%lezn^l!71\t_Ko5a2/J#VB\u0017&]\\k>\u001a\u000eGSlvʫ\r.\u001d\u000f6\u001bFOe\u0013Tf(c&<aJ/[*g)Tl\u000ex)\u0016Sۖ`nk%9xi\u001b:'7FECAX\u0003|\u001d4.=\u001flwc#ǔě*MHMݙ\r\u001a^ŉ=oL#ޢ,%ߎcU%܏\u0006-/Hő&8\u0005}PG:\"[u\u000fkMQoo8\\L~\u0014^@)3K[3}l</3<5\u0006\u0005u7\"lj;\u001aMŶ\u0007Iu$)GQ\u0017F\\\u0017Pbl:[\u0013m\n\u001b\u001bqּ\r{<uʼX0sR\f\u001aLk\u0003e\u001dZ}`\u001a\u001apr#BQCY)m\u001fߴt&tvXsKaG\\ߴ\\\u0016bfk\u001aQj\u0002غـltB\u001e߽5Ԛaɦ\\o>Bd\u0006G[p'_7Xkհ*`ש%\u001c#\u000bĄ\u001d7!&wt'h\u001cmXRyvT\u0003\u0006\ryV&\"\r&\u0005\u001fӶ_x3\f\u0002y,rЊ;vǣ6뮏6%1x4!#LRn\u0012\n6'_E\u0006X\u0011\u001aAB|q_z|!`Lk׺m%Ѐǌ9*\u0011\u0010\txMtͲM\u000f^vm\u001d[KKfƞ(fn\u0010̛F#ێar\u0014X͆a`\u001aJq[M.\u001f<aݥ&\u001f\f .^Um_e6\u0004=|6\u001f\u0010nW\u001eө@aVn\u001c\r$Sa\tq\u0016.sQEm]t.2\u0015&D<&\u0010\u0012|h\nCE\u00161\u0015o'\u0019*\"kU\r\f\tPҖ3!rnc߶\fL(5Td5ӳ\u00063=R@\u000e1.ji\u0007IdSSƀƦ\u001a\u0000N=.KU\u0012 \u0017\t\u0018L\u0015[W\u0006S\u0004\u0017S^b[F\u001d)F]N\u0004JfӪM\u0016f\\FkY\"؂\u0001[+g6cFT\u0004bJ0U\u0016$au\u0011ˇj\n\u0019Ξ5* :x|rηFQoq-\u0013xp\\Z]\fPQhlp^\u0001:}lٻ\u001d\u0013\u001ec\u001bύJB\tbIi\u0018\u0010_7ֈ\u001f0wקFd\u001cXq;#\r~U=|吗ov\u0006Ӟ*\rUڻ7ζ\u0014Zu\u00164.uwJQ̒VlPu)e7t)#d<T6?Gn0m\u0017o\u001e #(\r\u001c\u0006Z&\u0014(+5\u0012\u000ehz\u0012^\u0012S\u0016\u001eoe΋A\u0002Cwf\u0013{\u001ds|ʿ\u0003S5 0ξh,\u001bR\u0013$Ă:*\u0002ᶼL\u0012G$ʧgV9mW\u001b8\u0010\u0003.\u00014kS,Y!\u0004GB沤Lr%5I\u00184m\u0013R=vVE\u001b\u0010Y\u001eO\u0001Vq\u0005\u0014\u001b\u001bt\u0006`U\u001b\u001e<C&HtN#f\"(\tAC>d~FܪΈ\u0011PhJ\u001b~U\u001f\u000f̴ϋU\u000b\fQ\u0017c\u0017IsEH&\u001d\u0013;,CUd<bj[r'A4|RTmQ53\u0006a7] \u0007b)\\\u0007d>\u000b\bvFv|.3g\u0007\u0019\u0014\u0003\t\u0004@8!q\u0006hX\u000bW/wcL!\u0019I毟rڇQtF$\u0000h»\u000fR\u00073psFSᬇG\u000144z\u001c\u001dKe\t9)[5Sxxk)\u00139`nOZ\u000fM(}aЫӸ7V=lS$-ǀM\u0016w\u000f(bGrN`(%xH4\u000f#^0]\tWUr'\u001c.Dl3f\u0017&m\u0018u^j\u0003\"%\u0018\u0012;vHq\u001d2q#%B-\u000e\u0010EQ\\<os\u0016O~\u0018\u0010=PLֲT\u0019 \u000e16\t!\t$\u001ddEtZXG(!\u00133lVG>?CK8c\u00003\u0018d\u0012\"`NqE쉍Eb\u0012M\u0003]\u0014\u0007\f\u001d#\u0002\u0018\rKx3\u000f\u001c30g/\u0005\u000bl\u0015O\u0019<\r\u0004P*M˲\"=\tuWQ:V]V\u0014ZC>4\u001eMЫ\u0001T%\u000eF\u0000}Kz\u0007(yqJzArUR\u0001Z%r!*\u000bRgH\u0019x\u0000/\u001ch\u001d\tTUv\u0001­S_~f5\\$UjQ;{\u0003!@\u001bAxe\u0010\b*\nok+֞Y0|MT+<\u001e<̠/\u000e)N4\bQ3F7\u0013錚\u0003;HtC8x[\u0018c\u0007Uiqtud\u000f$\u0002qޠ4:ͷ\u001e3t\u0002'p)T7\u0006b;u'\u0019<j\u000f!\u0004Hd{\n\b\u0007\f]bg\u0014gq2#mJ3i$j_]2y`ԕ-+lŞѐA\f\t@۝Lgd\u0019AX(Dz\rb\u000eeO\b-4DhU\u0003/k{N>r\u0013^+ي\u001dcּ5d-\u0002\u0006Q!\u0000}Dah#\\k\u0016,`ʊ\u001bE\u0011OvPXËfɸw$|#lM\toZ$̐(!\u0006Hio\u0001wLx\u0018\u0011<L\"\u001e}xa\u001c\u0006cvwPFWM\u0015\u001d\u0007`\r\u0005=\u0012-h<]e\u000ftq\u0002:nbRc~{\u0015\u0002J!`\u000b5j]aE\u001a\u0013ɮ+omJ^u\f\u001cΎm\u0002\u00036E7*6\u0010\u001bHqg}*EU;\u001doDFA\u0001\u000eҀ\u0014!jW\u0003½;f3kof\u001b].#\u0006|to, Nh8`3lfQ\u0006\u0006$&\u001a3ƃ#\u001d\u001eM\"5l-p\u0016\u001b\u0006vf\u0016]\u0006V\u000f+4Ci\u0007}T.Ij\u0013ݯi(L\u001emv\u0018ΏЛ0kX\nMq[*}D\u0011\u0019ݱpJ[\u000b\u000f\n\fedJU\u0003OR(\b=`<D\\_Ij\u0011\u000bǵ5&N4\u0000\b6p,]v1\bF?Yf5\u0010\fc\rҚXU}HFPӴ\u0001\u0005\t$ MyRxM<5U\u0017Lal5ي\u000f\"PO!H\u001du\u0000]d\r-&\u0014b\u001ceo.G%l9ӸqM@vWZ\n\u001f\u0000AP6\u000fZ\f.%nY1\u000e&\u0013\n1b\n\u0004y\u000516&a\u0002l:\r\bҶ\u0004\u0001U&x;dDp{\u0004AX5\u001b꾁\rž/\u0012\r\u000b\u0012Bw:4\u0012~ł}o\u001f\n\u001d3\u0010\u0001m㳛[\u0019R\u001a\u0013/9V\u0000)\nN\u0019\u0004f\u0019/8CG;\\QE& \u0019W^5CA0\u0014\u0013AyC13y6\u0007L%w\t\u00063iŘ!taţx9a\t\u0002E\u001f./.u\u0014\u0013j<y\u00185Q\n0B^>߹1iE6B5\u00021;dP\u0011/4\u0013*\u0010k}pZl(,\u0001x8e.\u001dw;v:=)\u0001\u0000lfK6]\u001a1z\u0002IO#\u001cjaq#w;$[%RãKtm~Fà3\u00053ھVrA\u0002H\u001am$6\u0014\"d\u001dg8C8\u001d`\u0003\u001bJ3\u001d<h-2+ubp\u0017\u001a\u0005+4Wh\t+S{\u001c6\tLj.Rوk\u001ai1\u0011'I\u0014׵\u001dB|xx\u001f'wB?\r\u001e{,&\u000e6h\fS\u0017\u001b\u0016ڇ\u001a\u0004A\u0003\u001deb7գHo!|\u001b\u0010*C\u0003]e\u001a\u0000e\"~\fqA\u001d+\u0002Esc(\u001c/\u0004Pg\u001dփi_YFC1p\t%.k_k\u001elrĂ/LXq\u0003+ <\u0019\f&239\t\u001cI ~\u0000\u0015\t\\ԌnKQzkk`;mf\u001a\u0014m-T\u001djm]%#SQ:Fݙh;G N\nCa)P\u0015PRQŎ\u000bӶ\u001c[BFJn\\L\u0004AE\r2\u0013\u001b%u\f\u0001/45gg\t]Ru;\u0007$\u0007\b\bj\u000fFU\u000f&$\u0014)\u0015\u001dm)u\"\u001bQ؛g$<`n\u0016C\u0006MY\u000b \u0007v`,B'M,\u00199`\u0013!ƦWŰ#E\r\u00161\tq$\u0017;\u0015\u0016ё@oh9z8DA\u0016L@\u000ev!2eZ\u0018\nW\\\u0004h\u000ehl:Y\u0013@(\u000fc6H\u001aCT\u0015\"R\rz\u0002\u0015e\u0003&w\toGe9gZm<U\tp%\u0002\u0004Y-e\u000b\rFqGۘYx\u0011)\u0017)p\\kzi\u0000 s\u0007n!L\u0016\u001arn\u0016\u001dم\rS\u0015\fzY\u001e)mJ<Cy vpĦD\u0000a؁Z8\u001a6@\n=Aa6:CruG\u0003aaYCzW\u001eI1R\rН'\r\u0002TP)Ҡ@ڃc7\u0007-\u001f%K\nK\u001ew?.+V\u0006H2f\f\u0010uG~\u0011NA5lQ||3^\u00055`/qr\\6}w\u0005\"d[|t\u0011\u0000\t\u000fc:u7m\u001fU\u0012OTH\u001d:I\u001e߲.#x6ն\u001a\u0015\u0002\u00135M1\u0003D[\u001a0PmOHS7el\u000fd'-\tFR ct=\u0005^P\u001ew.BQ\u0002CC\u0017&DxD5%0\u001bl,(z\u001dѦC\u0010+äiW\u0006O\u0015Ln\u0002w!Pۄ\\`Xku'\u0005\u0000A\u0002a뵗\u00049\u001c\u0003\u001cI\u0001~a\r\u0014\u0015Wh8\u0018Ę\u000b$Һs9TF\u0006amw6+\u0018a!̚tE\u0005\u0012v\u0010&\u0015d\\Rw\u0007Sp\u001fNܗܨG_04l8œ$=Mhyw9\t\u0001V~\u0002Q2\u000fh@Pح!\u0004\u0017\u0007h+j\u0015&*>(}\u001a7]EZ(\u0016>\u0006\u0004/\ru\u0001\u0019\u00033D#/\u001fO]@W!\t\u0016\u0007$cQtC\tX1[d\u0006'@ۥ\\Zo\u0002\n3-G>rDlM1\u0012dfӕwd,sVJ\u0013a8\u001di\u0015\u0016\u001brH\u00027=iJ72k;䂸{0\b'TLB)\u001aN\u000357JhՀM\t&2\u000fos;\u001b尩6\u0001Z)\u0002}x\u001b&OIwpDL+\u0012Zj-f\u0003\u000eX\u0006tvr<\"\u0006\u001e\u000fߪq\u0001׳E\u0017~ĠX/%^\b\u0010N@_\u0004iA)\u00027\u0019`\u0006 $IM!u\u0015/\u001a\u0004\u001ah.4_0:h\u0000*^0f\bXq[giJWT/DԨmA:hu;h\u0003%St܌`?tASiSl:{t@Y@\u001a\u0004pz?B~4UEǧ\u0013lC94¤ȨF\u0000&΅Di\u0005zP$\u001c?B\u0005>\fۻ}Qy(a\u001c(\u0004\u0019nP\u0016\u0000@(\u0015Y\nh*Od\u001d\u001f:0\"Ay$b)U#kwh-(0qph0f|gxT\n\u001cϖ/_\u0012J5\u0011\u0002\u0018\u0003ɤLŤ\u001c\t\b5^f\\re\u0005Q\u0019v?C^hNN\u0012u-7v\b@&#\u001cXT\u001fk\u000bs\u0004<I&]\b/\u0017D{kLmahq\u0003\u00144\u0001FwD,+<+GI]\n2\u001e\u0011\u0017Ѝ3-9>@\\u'2k4hAC\u001bw'$\bo\u001b\b4_?\txVPҒBɣ#l\u001dL!~\r׋B6xo$ZzgzFЫΑgઝmf\u0005\u0007\u000eCZm\u001bT+u\u0004En\u0015gRԔ\u0018\u001db\u0015nj\u0001wŭ#\u001dl\u0015\u0000QW\u0005Uiڃ\u001f.M\\~x!J4nϊt$DU\u0015-hz\u001eNv@D}\u0017\u0015E\"IO\u00015Y\t\u0003a6CE\u0010n{;X8K\u0010_EaUAc!ZN?AIݠ\u001a\u001cjWYaEQk\u0001A \u000eX\r;5\u0019\u0005)\u0013\u0019ۉyӔyHāy7\u0017RHSjh\u0007\u001eu\u0013y\u00134S\u0006\u000e\u001es\u00137U\"A\u0012Yâ\u0015EZ[_b\u0002cT͇\u001efq\u0010]w͟V\u0005\u001dg]lTjI\u001bƥtF\u001e6g%\u0018*\u0010\u001c\u000e{\u001bǢzJl*$)\u0003WBu0\u0012$x}4P܆\u001bmJ@#\u0015\u000bPk<Jqp*HhB\u000b\u001c\u001f~\u001c[\u0006O!M&x\u000fۓ\u001a\u001cK= \u0014\u000bJf-\u001a^u\u001eFip>kbqE2jf\u0004\u000b/ iAСL\u0018iBݶ \u0000|yO||\u0001YO\u0013G%Fh7Uj\nT.\\F͆Mł@i%\u0013R\u00004\fA{r\"\u001c<%qBZW\tZ\u0000vMTS\\v\u0015\\~\u0006Z\u0003\u0010#\u0012\u0019\u000e%m6h\\D\u001dU6D\fOktBn\r)YQY6lE\u0012I@g%DO;\u0018BuFPT^̺\u0013=P\u00066-5\bc\rB\u001aXFz%\u0004Ja[\u000ePcUwqEGU0\u0011h!8\u0001\u0004AFnQ(ē_uA\u001b띻d\u00110I\u000efq\u0000\u0016\u0016ٶ\u00059`\u0012\u0016UB1\u000e\u001arQ!@\u0012X7\r\u0005,8nA\u00052\t\">;o~,\u000e\u0010Mf|G\u001d\u0006m$\u001b\\T\u000ez67(UȎ+PA/\u0004_\u0005X&jȺoiͻߝ-*\u001enE6\u000fMO ;5\u0017\tXUK\"\u0004\bj.ʡ3(Kߑ\u000f[I\u0011*G$,2i)j 42]\u001f4Ѵ}\u0013rK߿O~/߻g|w_ǅ\u001eveĄ\f:\u0018qS\nhQӌ\u001612Cl!Bɂm݆\b*%Y3\u0017\u0010Q\u0017y{\"QP$\u0011\td(o:{\u0011 \u000b3CameS\u0004+L}\rgL\u0014ͬݵ\u0003\u0011\bIԃ\u0018mo\fz(0Up`\u0002D=\u001e=%YP\u001f1\u0015/\u001f\u001e\u0004g@K\u0017b*vz\u0001[YFզ\t\u001dNy\"2Q\u0002\u000bn:)](Q\u0002\tG~M\u0010F4Y\u0006ޠ\"=o\u0000A\u001aVd`T\u0007M\f\u001fяwPY>FNsF\u0011z\bGl⑙,\u0011wk+ɫeW썎E\u0014xnڌO#ٸǩ!>YXi\u0005\bKޖ0ӌLi\u0000EW\bj]\u0015i\u0018Uj>R\u001bx扬4(3l\u0010jI5x\f|.b\nyT\u0006\u001e\u001c|j\u0010\fa\b&LJVi\u000f0?\u0006L\u0017X<ʐm\u0004Є\u0014UPN\u0017\u0018\u0002WS!v[R%ѳu]eOjH(fk4C\u0003$q)ԢH|Uas\u001c\u0012'j|\\]f\u0006\bX>J\u000e;mܒg4>]R&zQ,\bCh\u00118k\u00074\u0006\t\u0011\r\u0013\"\n\u0010\u000b0R*4\u0013\u001b\u000e\u000fG%*\u001dN^ I\u001b\u0001fa\u0005k\rs7eͱc\\\u0019'h\u0012F:V\t\rݖU&\u0018♓'hj<X\u00036`w>Zw/mv\u000f\u001f\u0004\u001bO'OB\u0012ܩ\u0007:leO\u0001/=T\u000eRﬂ\u0016$R]\u0011\u001a\u0012\u0002+1!Ƶa{}vw\nT;GDY%b`0\n5nD$\u0014\fA\u0017\u0016xFz\u0000RUK⋶)o{Q\u0011+j*cmz4=\u0004VF!qђd\r\u0003ro\u001edS6C:;\u0000T\u0006\u0001i05oEIm\u000fe>fL*րF˘#^Lf\f07RD^&0\u0000Jw`\u001fo\u0018oA\u001509P:Q9!K5ȡcbc*\u0011:@gO79T\u0011Qv\u0000\u0002\n\rz\u000e!JW\u0015\rPh\u0018U4sJ\u001eO~\u0015/DE/\u000e'\u0006A!$<E.gM\u0017ӓ\u00183^\u000fo;\u0015'\u0017̓iz\tT+MQ\u0005\u0016 ͷ1\u0016(RT\u001cfzZa\u0010M9\u0006Jn^\u001c\u0011\u00054a\u0018ókFVܮE0#PH4Сde6j91ID\\v@&{a\u0000Yg\u0012F`O\u0015NɍtW\u0004@\u001bH\r.kPN6Kk&\u0004ܦ\u0011U7=\u0011\u0002\f6412AK\u0010\u0016\u0001\u0013!k1\u0013I\u0018%\u0014\u0015S5D?Mv_Oi\u001e\b\tY}\u0011'h2\u0003*ߣt,\u0001\u0011\u001c櫋cR\u0013ba\u0013Y\u001dH\u0000TXd7ULB>+Wi\u0012Lb&7m#\tp\u0019a\u0019sx,XުB5\u0000u\t\u00037^-agTQ+qd)\u0005\u000b\nr\u0012tʮʳ\u0012z\u0012cl\u0019n3\u0003\u0006\\)Il\u00127\u0015\u0001_\r!F2d:兂^¤ܨdXUXI\fXu)w \u0014Yh3\u0019I\u001aI.BXAJ)C8\u001c٨O3Y'\u001e<1ƭ+\\!#$yIP\u0000\u0007DZ\\wCϿA$3\fEْ$!\u0003\f LgQ\u000bVBG@PMYl;Zs%\u0007J!n\u001a\u0001\t띵\u0018\u0016.n:Pp^\u0011L\u0019b3ֆ\u0000\u001do!B/4g\u0010ӄ.wiPv1EY)\u000b\u0002a%\tc\u0015ZAP4DItF͞乜#\u0014\u001eHf%iڥS3\u000e<{MHđy|I$X!zY@Hқd'PO:C+\u0004耊\u0014\u0013\u001fT\u001d?:\u0003J\"mJb\u0016KUp\r)&\\rl+\bhz͚eiț\bOw\u0005*ǧU/fW\u0012\u0003\u0007΄_j{yT)]#7C]\u0018y\u0019\u0010<9\u0005\u0013\u0015*+\u0006\u00057\u0003~E}sfW\u0013^K\u0019 G\r^$2\u0005^Sj}TI{-~\u0001RJ.\b@Aot\nIyz}CU\u0003:5t\\\u00175=A\"F2\u001fG%}\u0018 \u001cըհT}Rf\u0016\t\u0012\fy\"~\u0001%zP\u0016uKAyK\u0013Y&3STbRP:Mep\u0007J,\u0012~2\u00125]\b*j#/TVU5L>\u001cq\u00057#O+2\u0007EG-[%\tKW)aXIgj4* dq}\u0000Zq9wWk*#ˉ$>YU\nY@J$\u001a\u001f8\u0017\u0014TL\u000bȮ1kk\u0006N\u0000$WPѳ\\<tY\u0013\u0019-{*w\u001dUA~\u0015\u0002\u001c(j%ZTgEfڋS\u000bx<\u0002*A4l\u000e\u000b>ˀ\u0013,\u00056M4\u0013>@C\r;\u0019UY5\u001e\u000b+(N\u0006\u0016Zߐ_RYu\u0006\u0012@tb\u00165ܒr\\\u001e,fGQeQ@\u00149쪽X%K*չ\u0011\u000b\u0004\u0017+\u0005Ĝ@?U/\u001d5\u001dɫ.pTȎzVpd*iП2\n\u0005>fw\u001do<ȮZTu9p\r)\tmT\u0017I_\u0000µO\"2\u0015<1M\tw\u0014U*P\u0017Gɣ];S\u0002\\\u0000\u0000, \u0012а217O\u001dZh\u0015\u0019T|\"pA|![֋\u001cJЪt\u0000\u0002%2SԠEj6\u000b(\u0001`Q4\f.\u0012f63\n#2J\u0014\u001b2f6.*\u0002/Py}yfZdVd\u00028eN7U1'{\n\trTv\u001aI\u001a}t`Ymg\u001a使FP\u00142i\u0005ۤ\u001d\u0000yjfcTs\u0019zm\rdq\u0019.3/)l\u001bp^\tlR>\u0004k\u0010@5̔<,,ΏJ\u0012\u0012G\u001ayDӪ]\r\u000b4\u001dy|d\u001aݑs\\C7?\\\t69L0@\u001eE\u0000-R0#Cj}'L\u0004gN\t\r5[=@f\u001f`4*ȡ\u0004\u0004_9٢s>&OBB\u001e\u0001\u0004V7\u0005OKi!Z2\u0000\tT\u00014e\u0015y\\=mwW#`{ˉ1V/\u0004VUw8\u0006N?U{R\u001bvڗ\u0017[BTeS٦\u0005Q\u0015#˪#_ɣ\u0002=72ƄSHHEBUl\n\u0016*\u0003,v$\b%|M\u0004H摴\t\u0006%Ҡ*4\u0000bB\u0005_JCgYrpJ\u001e|5,3+eoul\u0013YI-\\ir=7Υ4ݐХQ_14{oX]Z\u0006\bLނ*Nc\"\u001bb\u001a}6`\u0007n]Qh*ZYnwt\rV!jUyuԤ\u001f\u000fj^߽)WRG\u0005\u0010U;UnC\u000e4\fU\f\u0002<\u000e\\*\u000e\u001d\u000e\u001c\u001c\bBp\u001bm϶S6kVt uh{\u000eSM%\tU!lԊtho\r8j@RS?Z((\u001b)\u00158D\u0015ُ+GIaG{\u000b\u0000O\n݉\u0000Hi=\u001a9^\">z\u0011-,T\u0011!vun,>\u001cW/Ц\u0014cRz8j?VteS\u0015\tТZ\u000eDkMP\u0015Q>v\ngl]nettm\u000bYC.3h-7yaH੽jfieWz\u001c\u0000JDmPQќVK\u0016d.uwB7bG6\u0000E}E%U;pʕj@\t)\fɃ0)\ro)Ѷ!\u0004\u0004XhмXl>\u0003$\u001c D{\u0011)^JD\r`i]!\u0016\u001dK$}\u0012DBR 9\b}\u0003kŋ/\u0007@)̃WeU^~*\b[]\u0004\u0000!Ą*I]\u001fۂkb\u0002ZeSe$\u000fB^˓S\fZiClNVG\u0006T\u0017\u0001(u\u001fd7@vH[\u0012;ᡨZRfpf/r\u001cSdϬ\u0010B漆z`\f\fRBDM\u0006?3M]'\f<@&-\u0000/\u001a?Ff\u001b*ɇ]\t\u00034/NSp>LUg\u0006\u0001R\u0006Dd\u001f\u0014<k\u0019\u0002ɡ\fz\u0002m25\b\u000fA\u0010}ʰ#R\u0010hr]\u0004\u00056\"}o{M\u00014\tE\u0016mCϧnnZA\u0001Q(&K\u0017\u0011\u000f)\u0017BaW4l57q%\u0006Ƌ2\u000f1TU\rJǷC\u0016mcS\u001b\"DyJ(T9 \bd+#DCH\u0010.,\u0004$a78Km49Rݨig.\tB\u0010Mav<+e?:;\u001cͦ״\u001bR7^o\b\\IL\\\t_P4y&{OU\u0018p$'\u0006Q\u0013M%PS\u00138wK5*>d\u000fw{17\u0011'R?DUz\u0015c8\u001bg֨VQUZJР@Imە\u000bܓ\b2sf@}D\u0011 \u0016Y!O\u00023`{\u0013Zy.s6SؠV7/eJs*6$\u0000\u001a\u0014bbP\u001f%l>\u0010\">s\u001fy\u0007\u0007\u001d t\u000fbNC06/\rl'3t7lp\u001c\u0010e**q4#E_\bW(Tc4IBji\u0016Y\u0019D6&|\u001ah\u0014Rl>>ӂGEnS&\u000elw\u00049RM֎4o++b\u0019ր셔gɽ,rz\nl\u0007Cd\u0002p<Ok;3\u001aԸ'Y;\u0002\u0011(vtZ*ג\u0016Ն8TvVY1Jymi\u0014K<\u0016tʳ?&6\u0001=\u0014řt V|a\u0006\u0006htl\u0015+\u001e솺\u000f\u00071Yι\u0019sh[\n\u0013\u001d;JʂѤpg\u001e\u0010̷\u00013'\bյ\bH\u0011kn^@R@IT\u0016Q=&Pih^J#C6/B}(\u001d-N\tNaPZH+U4r5r\u0017귢nS0I,e\\(:Z\ns6GZls6\t.2T2\b\u000eXe\u001dz\b*(rP5v\u0011\u001e<R<G\u0013\u0012tB\"N)\u0002M~\u0015/^\u0012\u0016\u001cפx\bbJe#awD*\u00188\u0012vg{(gwjR\u0006_m1lDA \u0012DF¿۫fG\u001f=\u001dh+\t&=\u001bT\u0018@}h9IKʲ4\u0012:\t|\n&c P\tMArݻWs\\Ic^iM/[~\u0004bf\u001faف4%\u001btg\bG0\t\bkhMLs\u000b\r4m&E*}pa\\E ӸHi ;z\u0003ť;\t#jNaOL:/g\u001aOK3ڡ*ʋB=qܻU<\u0002a{X\u0018<b:K\u0015\u0018t&'z`g}q޳\u001f_~\u001f~O^_]1z\u001fz~O/>\u001f/n>.O\u00072M\u0001dg1}ٴ[\u0010\u001a\u000e S1%1\u0002.lA=d(n󿉱\bAk\u000bPNYvZr \u000b\u000eP,TE8I\u000e\u0007`{*1\u0014FpmbƜ\fb9\u0012\u0010:fqO\t5B0IUT\boOn<\u001a\u0005\r=H2%ÝJ݃SC JKUF\u0016\"O<^\u0014r(,z&'''\"4URx\u0018\u000f\u00191e#,>0D\u00015߇KXk\u0002ճ8R\u000bx\u001dZEN\u0013ZƖ\u0010+N7ig(j\u0015sܴ:o8\fLf\tBj\u0017u\u001fSk\u0000D3XtY\u000e\u0006絓<\u000e- Q\u0019w<- ڥ\u0000٫i#DH+\u001cCұN&$W-\"\\Ԗ\r}\u001dمX`\u0016=7Pg\u0010LD\u0016\u0000gRjuMܿ\"fbzՏ;L<4'\u0016\u0003\u0010T\u0017\u0019\u0007lBDF褱\u0000VHQwJʓBz\u0005\u0015b3;=I\u001b{kzOݯG\u001cV%^Y}iB{\\!<c0ZQ\u001e\u0001z\t6N<rUHIz/3ShoO\u0010ҷE$\u000f=ƷXo[\u000e[l\r_\u001cxaQˏY\u0014(OFBH~+\b\u001d7k']E4&M<\t\u001a\u001dN\nl\u0003\u0011\u0019;\u0013\u0005<yTx@\u0016*:JB{ag~Ԅ6gvf~wMESz/u~j\r\r¢~Hv~WYM캸ߕ>\u0016N$NF\u0013f[i\u0003SI/>\u0015:Qw\u0018]ЩH=\u001cqgx¥XQVBgU6]\\4!PwJͫ\u0005k<\u001daxR\\j3f|gn1\u0003ҝ\u0004\u0017;e:\r\"\u001d<e'k\u001f3nrh B`Q\"^쌣L~Ou+:9pGKe]V$WG\u0001`qT\u0019\u000fR/\u0017z\u0014\u0003'\u00062)f\u0017:\u0011\n8\n\u00185'`Niҩ*ʝ\u0016M:>\b itO\u0013+J&ذ\u0016\u0019:\\\u0017\u0007\u0018Bߩϫ\u0003\u00169q\\x'sݬqֲn[y.9gU\u001e\n;9Lr/2s\u0011(~0\u0007\u0012Õе䝱߈\u0013Qb\\a`9;\r<MAXȉ\u0019\u0018tv9.Hk<vQߪנ̸F\u000bD(Nq\u0011\"@^v\u001aq\u0019=+4\\(be&.fpT/qfBeݭyU:Dp\u0011?R\"9soؔGo\u0012Y\u001cT~*u`f\" #w>&_7c)g>vC5zɺMo;Rs\u0003,\u000e\u0012vTvk{yߦx\u0018\u001b6:Fdb(h\nߕd\u001bXdLuֆnyfuFZ\f\u0018j-l\u0018'ⵙ\u0017K6H\u001d\fE]\u0013˙\u0013s_w\" U\u001a\u0015\u0001/kX\u001f\u001a\u0002\u001a'nkS\fxRZ\u00069b\u0016*\u0015\u0004ny\u0006\u0000U\t\u0002i\u001afK\u001aZ\u0006[rRCG}N\u0017w.j+\u000558QOGT\u0010w35٥S=IAzNʉB\u001a *y;s4/shfq&~ \u0006+|Bo\t\rNH\u0002Vj\u0007#;\f]\u0004ϛ矟ya\u0000kJyEIٻ\u0018IMK^CeYC'fX7vzf߹^YS|ɘ\u0001lm'a&Jޙ6\u000b@I\u0005|'Nr\\K\u0012\u001e蕛˨U*QTy^lEy\u001d\\}2\u0000\u0019U<%Gdʯ\t0Oh\tWj\u0011y\u001d\\D\u0014xߝxN\u0013P}Ѽ\u001d'$pE\bs\"7!\u0018HY/2MI\u0014,ƬWAt\u0017'6NdEr\u0013ck<\u0016S\u000fN\u0011\u0018=ߓXR\u0001Rir\u0012ۼlܩH7\fĶZY\u0011y:ٝ8\t\u0012h+0Tb\u0018ޠT\u000e\u0014τ}\u0013<Z8R?\u0006\u0013\u0002^\u000bQ\u0000 2'I0\b3\r̆C\"\u0005<-\u0002\u001b\n`T\u00045G;/\u000e(C}b9Q\u001bpL*W>_\u0014˫$U/C\"\u000eδ\u0013{:H{vh路}I 6\u0017\u001eq1.f#3oEțf5\u000bZMpC \u0014\b\u00153$݅Wޑk\u0017)\u000b!#-܂+\u001cR`S\u0007ı\u001f\u001c#_uoܫ\u001eLpa\u0002[\u0016)j]b\u0013q*\u001d<˹gΞyC\u000b\u0006pjX\u0003nH\u0013:T)ۤ\r.+eA+亁\u0005(`i.\u0004R\bݖ\"/\u0001B\\7TN)}$\u0005Ϩ\u000eճ~#[N].P~R7,\u0015\u0019=%EQuR:&LRqjV%\u000eFq\u0000LWF]죥PWDdצ\u0019\u001f i`8cB]\u000e\u0019J>\u0011RL\u0016>@뼹YG\t>&Gz2sVotu vƶ>ˎ{>U4t\u0015\u0017\u0011H\u001ft5-]\u0015?@Kd\\\u0011|k\"eg;!-zg&]_j87xzO1\n@@W<\u0014\u0004_\u0004×&\u0004PO\u00112>U2P5\u0004.\u000f,\u0002\u0007\u00112jP\u0014qI9\u0000nB\n;c*]\u0001\u0001#\u0002\u0013=r\u0019\u0012v\u0006Ӝ\u0007SWg\u0010\u0001Ej{ĩ\u0019C\u0004\u0004Os\bv\u0013.Q\u0004\u0015iJZ$\u0007R]k\u0000\r\n<fՕWS\u001cjm(\u0013(3SIV]\u000b\u0003YP\u0006\u001c\u0010d{LKk2W\u0017)ی\u000fTN--\\ʷ#\\ޖpczx wwˋ;0\u0012Tj,i?b\u0013x\u0006t9o{\u001fT4\btKqBO3R\u001a|rl'Qz@\u0011L#}])>[vUuc\u001e\u0011jzL5\u0014\u0016H/OC&-gy'-1S\u001cK*+2\u001d(2jN3Gm\u0010\u000eO\u0004JVA>$o[jתLDj\u001b(P`j53ȴQc'3\u001c\u00181d\u0017NTr\u0010'ZЈ\u0017I\u001aT#;eቤ#\u0012\u001d\u0001g\b\u001e\u000eu'UB{gZ^gF1smԪ\u0010&\r՝\u0017l_SkĆu\"Ev\nH\u001f\u0019΋\u0016eESLp^l,{rfU#\u0018L\u0019eV5%\u0015fÓ\u0015ZKJJ\u0013\u0002PzbU$\rV;k\u001aT\u0015\u0002Ce쬵j(3kZUSbe\u000b\u001fP70e\u00106,X\u00031fT\f;}.ja)\\5k\u0014ڡf3-\u0011䝵\u001c);Jr\u0006 ~&'\u0010)xeU[\u0002fI3ת\u0001\u0017\rbvEp-s8|-'\u0012#:\u001be\u0014|UE\n՝Ö\u0006^\u001e\rԂ9lՠ2\u0010[8z+6kUf\u001b%e¢ϖH\u0002\u0018t\f\u00149b9\r2v>[WT@'-*D간lUV\u0003˯pap߿r\u001a{RIЖ\\V%\\)~\"UӋjȓΖr긊qj`lq~<V)V\u0013F\u0005>)3\u001eqzlY\u0015PrMm7\u0007ʋQ2V\u0006c:͖\u000f\u001aމ͖\u001cq\u001d/tGd\u0015j1-g(\u0005Πc2[A\u0000g(I6[G$\u001aI\u0000\u0018\u001eؒ-݃Ge\u001es55|a+\u0015ZvD%\u0001\u0011\b'2[1V\u0010VHlk\u0016Qw8EI$-\u0019iAfBĖhH1mP\u000bS>@b BnJ|Lb\u0019\u0013n5\u001c\u001ea\u0004HJX<تUBҏIl\f\u001e\u000fc\u0012_:x tm&D:z%Ȝ;-\u0012w)TGZlП@g6[\n\u0018f(<}6Q.cl4x-Tl\tZv:[5\u0006iS\\|@\u000b&>?0\u0010d;$cH;-j\u0016#{1\u000e\u0001/ZAbةh\u001c{!eer0#N~f7>rpsZ\u0014'~\ndcRA[\u0016l\u001eIS\u0007Gغڤ\f\r]\t'6>\tP1\u0012\u0000M,\u0012H\"\u001f$];\u0016.S\u0013el+N͋ v<®C\f\u0006TI\u00067H\u0001giE\u0001۷\t\u001ay07w\"/W\u0005ɲ^\u0019'W{\u0018\u0005\u001a\u0016kIΕj('\u0016Wa+y~s\u0012:T\u001cd1,V~\u00031+a`\b'>V\u0002\tM>V\t\u001fêp\fg՚b]e}h\u0013*\"ucuVQ}GFU\u001dTZ?\u0015,{\u0006\u000fd+\u0014|Xl\u0002.r&GU\n&'*)\u0015Q\\\nv@\u000520<k\\qHtP1eVNk*Z\u001a@G6SALM\u0012S\u0015aMk'\u0007Rd\u0014N6\u0011\f۾'/)\u0015\nsc#\u001cDI\r\u001e\u0002UE5:JN\f*Z\"\u0016'&\"\u0016]O|=;(k`LLxш³\nB\u001e:<\u00186]\\\"t?6Aw.I\b[3\r^ayq<r\u0006;vOv\u0015NԬU\u0017쟴\u001f<4\u0002xj\u0015U\u0013EOnu^8e\u001e>uc\u000e;\u0010Ҙ(98Wh\u0018gO6!)12xE0|3ىOۉ\u0013\u0007Oi)\u0015>BM)I/.b]sR!\u0005%KԴ>oqqc4v8Ӭhpf\u0016gS\n5'\u0014jPS`xps}~P'{ms}*\fِP3קZ\u0015l^\\\u001eJՃT윞\n)eό\u0014Sl\u000fߘ闩&\nȟȹ\fs:'O޻\u00171u\u0012\u000f\"|[Z$uJgOŵʢ;ǧ\u001a\u001dӺ|AC{U\u0013gXrZ$+=UG'h3).S.E@!\u0017\\îL=\u0015Ù%0=f\u0018k!\u0002=\u001f\u0019L'jϧZ\u0011Sv\n1V\u001c#\n}bTr;S3z\u0006F9*8d'¿GFO~l\u0010\\.Ź\\-JOgR)\r$\u0003%Z\u0000y:<I\u0002wd\u0004\u001aҳ;H#Q0n68Qs9uʱ P#ӳƪc'TC\u0019gN?XM\"TEfUPEܩaɢT\u0002\u001c;=|$Ӯ\f\u001c)\u0014\u0019e\u0002B\u000b1)<Gq\u00015\u000e\b;\u001eǙs2WLrWw'l^`Dɱt`Tٓw\u0002V&<ne \u0003{:iQ'f^\"Į}'l\u0000ҕK\u0013G4ĉC\u0011\u000buά\u0016[ة3F7n\u00183\u0003P9ɘ\toJML\b3=&ǈLV*/¬\u0013iub\u0014\"W#\u0004\u0002\u0002h\u0012_2t'K\u0011BRUQyBO\u0002DsYI\u0011\u0012\u0012o(,qi1Z̕؂ʣ&QDT\t\nO\t:]쓓\u0012\u0002|梤n\u0012EAY(ôNE&D7V4`Ki;\u001b$\u0018g\u0013d%Yję8sgeDN*\u001d\u0002hB!\u0002rqA\u000fD\u0001A\u001c\u0002\u0012\nc{Q?2\u0012urd|$3IXT\u001a\u0004|wyq*.ZG,cbs\u0014g'\u00121-ݨ#e씍1'N\u0003d[L$Y\u0004$\u0011\\>2E8oF;\u000bqϔY\u0018WTu/\u0013\"EeɘhcZ\u001c\n3\"d\u0015lNbKI;M\u0013ŢZ\u0015vM')\u0016ޢp\u0001vwEE$elY̵H\b\u001b^vE\u001cw1djP*n3\u001bo/fu\u0006n\u0001Ndؤ\n@\u0011P8.G2I-;뢰dYx&{[Y\u0017\u001dA(RgEḯ+Jy;\u0010UA`\b\u0018?_\u001de\u00021`O.\u000e\u0007?b[$\"fH\u0013\u0015ԳGc&=bR?@O\u0013(|N7q̊Slu⥏Ϙ\u0016޳{x,V3\u0004>'\u0013\u001f#\u001f<$\u0013\u001a4ga9&\u0011OXe|{svD=xrɉ-Q&TFG%+:E/@Nl/\u0015n\u001ei\u0013uFkW]'i\u0013ձQ\u0001-h\u0013QdQNI6Q/MaMja\u0000\u0013\u00032y\u0013\u00051\u0001\n(\u0013obMBE\u001836\u0017ei\u0013etfK\f̶wD{\u001c'j&f\":̖gHWD%k8^N\\!Δ\r|HTd-\f2\u0010\u0016I\u001a4@$j_b\u001b\bgD\u0019\tʍo\u0015ò)\u0005s#Ґ(/\u0003!+\u0015\u0007O$r.%G\u0004AĲ\u0012\u0005㕷TwD\u001e$5黐N^ǦW\u0018;ICCPN$*9\u001b(\u0004vD\u0007\r\u0012d\u001c\u0012\tν#\u00056\u0013]3MOɖqv\tugKح@+,gDlU\u001d\u001awD5\b9#\u0001Ŗʙ#\u0011\u0017ئ6vDQ\u0004aZ-D.'\u0003i\u0010\u0014@q7rS$\n/g\u0010|rk\u000e+\u0010^(zl`86XNH]T\fP'nDZ\u0005f~QR-L\u0016CjN\b\u0016a\u001657c?3I\u0018;X\u0012zHs$Ad\u0016IQ3Gj\u000b\u0016\u000fjL;G\u0017?\fB}E c!H\fd\u000b\u0013W)\u0012)\u0010mu.D1>k'D\u0007l\u00138N y5ĝ\"\u0011\u0015\u0013\u0005_)\u0012iAN\u0018Tt\"Q\r\u0012\u0004\u001a3G\"\"\u0014iR$*sQ$j\u0000¿3C\"` l*TraR%2MŧParaL|p\"O|:Y\u0014\u0019;Ye]i\u00147؎Ts>(\u0002\u0012ݫ]~,6jV)w\u0016GǏ$C185\u0005c*8\u0014b=Q'%\u0017=UÒlp\\7<Y4 Zr\u001b\t<\u0002NxMSt\u0010\u0010#ſ\u0017\u0018\u0003VP7EE\u00043[\u0016\bpT$%\n\u0002K\u0015y'D]QH(\"#BG\u000b\u001cO\u0003Ot\u0012a2#(:\u001e8Q\u0019[\\|\u000e\u0002;_\"\rnlc+^h%6\u0000iMTCU\u0015m4Qj\u0010\u0018pCgDM\u0006Gb\u0015\r\u0016q^JH\u0004l\\>\u0012'8$,7{ץz8ITϥ}\u0010'BlcWDe&V\u0003#oР|AA.\u0002ELCc\u0015!Pd}fqH1\u0001o\t\u00149I\\9U#\u0002Eg\u0012\u00077N\u0004:s8O=\"Px0T|p2ܟ\u0018\u0014\u0014FRAN\f\u0011'Jn'0*{IGǘ9Ñs~&*-GAm-yM|7Q\u001a\u0018uyěo\u0005ofǼ˘=]\u0016q\"\rN\u001eIs:Q\u0016p\u0006_z\u0007b\f۪myNt\u000eQ\u0011nD.H\u0014\u0019pNg<\"QTʔHJ̇#\u000eE\u0000ڇ(z\u001cJ\u001bQU1'\u0014\u0015}u\u000fwr<\"ST%%3P6\u0015QNܞ\u0003[a\u0007ZN\u001bdL\u0010%7\u0012?\u0012\u001d8aT\u0004!qERaCĩ\"_bA$~\"?9\u000fXT\u000b\u0013\u0019\u000e`\u0013$\"\u0004+3Coi\f\u00015MH\u0016g\u0012\u001co9\u000b)$\u0011J\u0014;U!6pP'B28\u0019\n\t,>\u001bE\u000bu#`\u0017\u0010\u0012!ڮd#\u0011Ndi\u0018\u0017 \u00071I5o.N\fu7\u0005C\u0007\u0014z'(xEi\u0004ɱڜ` \u0019\u0006\u001f\u0003A8\u0003\u0013oLD3? v1i\u0001E\\lP\u0002\u0003\u0019w?7\u00128@Q0J~H޹\u0012n(\u0012\u0014щlf\f8'\u001eU0v>\u0005`FY*և۩<LR\u000f\u0012gvb`\u0016\u0006٭E.\u001a=;#u3\u001e&۞%:ER\u0007\u0001lJ\u001f2\u0017\u001ehN$I\u000fj2]1\u0004T\u0010dQ*jk<Љ\"\u000f̞\u001fS1\u0016=\bF5G|x|OBF6xf#\u001dHEv+*\u00112\u0002X\u0004N\u001cwD}Rٙ\u0004s;{\u0004cA\u0014E_-:!\u0001mE\bzorE&5]NtdPj1Wf\"#\u0016=ϩ't\u0019-9~:{\" E\u0016\u001c;\u0005r\t$GL\u0013\"CFkYqTI\u0016'dQdU4x\u000b8H8H(zuD(wqڜI\u0001.7~S|vR\u0013\fW0dzKub&'\u001b9\u0011+Wb7ꂨF\u0017K\u001c6EF\u0011!ÏmJ`lWs\u0012\u0006H\u0007\u0018r\u0011$\u0013![^las\u00029Zg5̊jn>\u0005ٲH֘BG\u001e\\\u001c\u0012\f;'*RٍD6T.\\\u0019Բ5]\u0010fNDxK+^xI\u000bsGhL\u001ch&B''Zl.;\u0015\u001a{\u001eȀF=F@`O;~!;YIi\u0016g͐3M2\u0006;r\u000e\u0004fnxHW2Wv$pǙ%e\u00167\u0019VⓒLtD\\Y\fdq݋xLJ>\u0001DXO7e[ӳne5MC\u0014h\u0016Bn !:KYDD:-npy9\u001cD\u0007)f?\u0018+ނL_\\\fmn.\rS{=ŀql\u0012cMTDO\u0016b|h\b\u0015~<6\u0012~~LhzC$G`Sg҇9\u0018;^\u0013~\u0000X'\u00070B\u0004X\u0017*j\u0004W/?|1A!-L߼\u0011\u000b\u0014\u000bǹKlK鋡v͌8m!5Z\u0018-׵G#\u0010rB`\u001f-Ȣo{\u0014s\u000b7\u001e&?Ym#x\u001cP\u0010`\u001e{\u0006\u0001 rO3£1,,ʟܳl\u0013<\u001cLJ\f.ӬzXdQz\\f\u0012\u000b6\t3kOX`j}񱼚U$}f5\n>*k=qg5\u0002'\u001b+~ŤJ\u0014_zTg~\td\\3\u001a9\u0015\u0010~`v\u001eqi<{\u0017-&TW>SVR+UrYM]\u000f\u001c\u001eWcGG񓺮hQ\n\u001f{2iM+\no+?YDtu\\uP\u0010d\u0003\\\u0003O?5_'9G\u0013\"\u0000\u001eɻ*[>NF-o\\\u0001(޷.\u000f&!;\\[&*L4,$x2};+끦\u0003ӕ^c([=Gx-]O;9l\u0016[s%$N-hJ\u0007\u0006Fޒ@\tm?}T\u0005KoK҄x?͑>GIE\u0013imk﬐\u0006픹B\"ɎN7/wW3\u001f4J\u001f<\u001ȅoGpU\u0015z\bJa\u001f88~p6\"a;\u001eˣ\u001fFeШ]7\u001f#6\\U\u0000i_\t8\u001fE \u0006z\u0015=Y\u0011X\u0011RǣȬsf4rG\u0014K\"\u0019p\r#Q;`HDo\u001a\u00157Wlr7!6;745<o~Cj\u001f\u001f\u0019f*\u0003c 4Qxoe<06:Xau3\u0014\u0005w!\be\u001cq\u0007pIZ)RQn8=>/\u001d>ʨ\u000e$D*ǥu\u0018\u0005\u00005>\t>qG1mݜ\u0015m\u0015iE>\u0002\u001ef'0c\u000e8\u0015-\u0019\u000fe;mU\u001b\taGĭ|\u001c%\r G]C\u001a\tiO{o\u000bs[\u00052wa\u000b;\u0004\u0012)*CɭHY_(&\fF\u0017\u0002\u0011`6i\u0014\u0011\u001dSǈ8\u001d\u0014\u0011\u0000֗\u0019#\u0001LVM\u000e\u001eiZ[1ps9y\u001cFɗװ]%TP:}諴cy\u001d\u0002\u0007ن}]Z9މѮ`\u0011j\u0004$rz?F\u0011ǮՂ'??|E\u0010Y`]\u0019Q*>3\u0002b\u001a\u001e_gvBR\u001a\u0006m{z@H\u0011Tb\u001e:\rK꾖0^b\u0000I\u000f\u0014'mZw7-V)M\u000b)Sv\u0002o1\u0000PFf9A\u001c\tnة\u00101L6lK:q\u0012>\r$𱏏\u0002[\u0015ZYiA#u!Ur,=ؼwS5\u0002߁ʷv\fIx\t@\u0004\u000eEoҔX۵>x=H\u0019AG¿/\u000e^\u0017^n\u0000u\u0005\u000b\u0004Ǌ\u001ab^\u0011=\r1e^\u00186fk\u0011.!.3\u0011Uy\u001aG[/k\tmlTl}\fـxW\u0003m\u0011*Zo\u00069\u001caYV\\]n8l[\u000b\u0003p[r\u0016ƚ^[fO\u0011\u001fb\u0014)N\u0002~O\u0003lEtcZ|n7]bf߬\u001f\u0004\u0006Ԙ.\u0006rұѲ\u0010xgkj\rh%+dPf\u001b+q憸õ>\t_ۆ~95KϾe\u0018zp\u000e\u0018=$Z\u0016_#Έ\u00035B͈=ԕfM\u0006|q9籭|x\u0011lኮ\u0014d\u001e\u0017PwZf\u001fJOښ6\u001aM'\u0004o#ں\u0005\u001e_MC\u0013I\u0016\t'^Dp&\tBvMȠ\u000f\u0014\u001c\u001avl5o#P02\u000ew$\u0000\u0018lB\u0003; \u0012Øݿw_\rاR(\u00185QQ4\u00061p\u001c҆\u0017\u0001\u000bܡ\u0017_\u001a5»i\\\u000eHLf?J6H8lwԃa]S\u000f鮩3b,+\u000fDK\u0010\rs\u0003U\b\u0016^자Cr(i`svۉt{hC?C-\u00159lc2ZW\u000e\f@\f\u001d8V\u0005^*\u0001ak`w<F\u001c#\r\u0007MΨ\u001dn~AX\u0003^^;M'\f5\u0002)/Fr~\u0004\u0005p&\u0000Up3\ry}}Ǯ%\u00157/v\u0014E]*U\u0017ݏ08Yr\u0002|{#AAeu?\rX̃_\u000f`FsE\u001bj<w-/\u0016w\u00172\bE'x^2\u000e&-_n^\rK\f\u001a\tn|rg\u0004v$,\u001a\u000e\u0017nK=}?O\u001fW+:[\u000fjM+;\u0006[ k\u0017P\u000fR\u0003\u0004\u0005+rGʀJ1%~X@D\u0016\u001c0|\u0001\u0010U\u0004|QxHԳY\u000f;dv~.Fz\u0016,\fL@7k邜\t\u0012Lm\u0018g;S'hӔjۿ\u0012Waa9~dG\u001akؐ\rWU\u0005\u0011+rG\u0014p\u0019!g\u00003\"!\u0012hOz&\u0000O\t\u0006Շ\u00119vN\u001a{-\fE\rcݕdie_1\u0015=\u0018\u001dx0\r}3\bi׭J1\u0015\u0000\u001c@;sϚsV#p]ˑf-G\u0004S\u0019j=siԨY\u001a\u00181l\u0000[\u001e<v\u0002e\f<\u00186pO0tװ3b葉A．FƦ)\u0007\u0000Owklh)>ga,FaGq]xeR?C\u0014˩j\u001f8\u0000Z&bMqzMU<\u0014\u0013\u000b\u0001E:{Ak\u0002ѽ\u0016aCt;@q'r⓰ғ|e\u0000\\oJke\b\u001ac$h>O⭞\nz>1s;F\u0016 {YN\t`v\u0019\u000e\u0006v.߽KY_IW@Ndt\u001aFD0\u0000\u0018\u0011\u0005W*u72\u0002%#2#qǽa\u0019\u0004+1=hLu\u0015|TuT\u001aZ2@+\u000fu\\@ޗ\u0006t\u00028N\u0014a\u0007j]]*s\u0006\u0012B\u0012d#圵*>/1u!\u0001+\u0019\u001e?u*F'k}\u0006\u0003?'\u001f\u0002w\u0017Qפ\u0015`\u0007\rQ\u0010(F\u0004Q\u0019\"Z\b\fˏ\u001c㱸O[D M\r\u0006Wc\u0006\n\u0016\u0012\u0011|1y_\u001f\nN#\u0018F:\u00108s\u0004\u0005hX%7۽F. %\u000f\u000b9<!dH\u0011\u000bBz\u001ff-B\u0006ֹ5@n-yn\u0010~\u001aC6#cGQY:he\u0010k\u0019\u001c!tg6𤾝TSr\u001fѕs\u0005Wg'\u0017Au\u0001j(\u000b*c\u0014%\\*E|\u0017Vf}\u0011Z\u000et\u00002Uu\u001a?gF!@̨\u0002?JW\u0003\u0004#vW5\u0005x-\u0007_\u0005\u001f(l\u0015Z\tw`\u0012\b\u0001<\rYkh)}$W\ro6\nJߴ@!Yoh\u0018w]hó\"YF{\nTOó#\u0018IQxks>Fd\f&\u0013gv\"f'Cm4\u0012?́4j.,YJ4UZ\u0000i\u0001ÛY n[y\u000bu[V9NZ#@?8@O U-1\u0006PrWtM\u0013[!\u0005yh\b\u0017\u0013tM\u001du8Vq%>P~;\u0011ۋ0mt\u0007,]嘾C:^`L\tV}uh\u001c\u0011(G)@P\u001f5dQ\u0007Bvd\u001c\u00019r\u0000\n\u0005ޖ]`5CY#;*5\b\tJ7]^ܑ\u00145KH:0º$ꌐ'˲\u0005L\\?o>SѬ(CBH\u0000I[<\u001cHwv\"̺,TIXL\u000e\u0011s5\u0013<䚾\u0017muMR\fWZ\u0015iG\u001d.\\\rIa&uv\u001e\"mICdJ\u0010rݚ7kF\u0000S\u001d̂3\u0002Ed`͝lqv1MVD\u0015\\\u0019Ó8\t5r޾\twe\u000fsߦg7X<˯c.:e5`/y9H\fkϔ՜\u0001G!;KSŽ-ن\u0003\u0019y\u001a\u001aIG7VԴWɷ`p5*?Ԥ`\u001c\u000e>\u000b\u0006*\nG,mMm.χQeMV!q&\u0003\u001b\u000fd\u001d㫿\u0000\u000bxÊN=$V#\nb.\u000b:ovXI\u001c$\u0015X2s҈`\u0006-M\u0003\u0018U#c\u0019/l\u001bSi\"Y\u0000b\t\u0016|$H,DOW\u0003W|6G\to\nI<r\u0000\u0006\u0005--?}TUvGGH\r})FL\u0016?J\"\u0015`\u0018\u0007\u0015\b\u0001jtgG\u00181K\u001e`&#xFvZ\n^\fhy\u001b\u0019H Գh\u00151@\u0005a\u001cNE\u00009lȇS!\u001f\u001f9Q.m\u001b\u001fۊ0]ET֩\u0005u9)2\u001br\u001bSs\u0010l\u001a0|iZ\u0014'Ռ\u0015$\n \u0000V,\u0000\u001eɖ\u0014\u0012\u001d\"\u000b\u0019H#P\u00047`]\u0012sc\u001a\"ጸpS&y\u000f5\u0012;!%\tIg\u0017{\u001f.\b\u0017g\rڪ W\u0001'>vd>ꪮh܉'So\u00143ê2j\u0017ye\u00145oV\u0005yu\u001f{\u0019|\f\u0014$_5AifD\u0018$u[vpWXy\bnCV@af2C|\u0017iW\u0002k\t\u000e=c\u0007\u0000\u0011\r+4o\u0018TÊ\u000f΋s\u0015?w}+m5<5\u0005Zt\u0007<)Ϥ*Y(*\u0006bUx\u0018w \u0016WQ\u000ew~pG\u000f8i7:\u0012Pz_\u000f$\rc\u0010U-=\u0016jJ^8L\u001cJ\tLB8#\u0002ҳ;&{F@U%;ۦvvP\u001b)Go\u0011\u001e\u00105l^\u000e\u0000-r\u0002YsdS\u0001\fE)>_T:6#\u0011no\u00176\u001cGGA˲\u0015%c\f<z,Zz-qJ|\bgcH\u001c95&\u000e\u0015,LL\tkow\"!-!)sg&vy\u00180\rO=S +0RN35ɂ?I4V*,/\u0011!I?(\u000eŰa\"f,G,\u000eJ7F\u0005Nn>\\*!FN)\\\u0014S\u0003\u0004\u001ajw=Zy֦8NDf\u000f\u0013&vf\\#}{[KYA̡ĤoH0`ŚHm&\u001dD6R`rf\u0016@\u0013侫\u001a8\u001a{\u0016\u0014fu%Ɂ׀\rږ\u0005]PHiDP\u0014hS`)skn\u001dtD^d&Ԕψ\u0018<Lu!GƬ\t1kn^1<\u0000\u0010\u0004kdR5k 9zUgva#\u0014/Y7`\\N^v\tbgB\nD+\u0002(kS9\u001ceE\n+бU?[)ꜥs<XkY#T殷.\u0018YR!=ճ\u0002m)*o3[X4\u0007T-\u0002\u0011t!~\u0001-\u0018\u0011ڞ|A\u000e\rox$\u0015EPK}rw\u0003W\u000b~B]ޔ\n\u0014g\rHJCm+f'<<4?'7K1,r{e&Y8s^\u0019is7VX݆y:FIb~R[A%P5>a\u000eߩt\u0004,\u0004\u0013(ck?#UávQ#\u0003\u0007Q';[\u0019q} Nl\u001d\u0004\u0000\"Ϫ,\rW\u001er#\u001f)\u0017Ms\u0004!\u001fk)WwGPdc\u001f\u0019\u000fr~\u0000`0]^I=s0|\u0000d#$:\u001f\u0007\"L0ݎj4\u001doѝj%\u0011\u001c\bL\n^Z=\fl!\u0001҄\u00077ۊH*}}.\bBC#;l͚PI\u000f\b>\u0010\"Kf\u0019\u0016FC福{No\r\tk<!C\u0017\u0013\u0006\u0000\u0005r@{+/\u0005c\u0004\r-nG\u001aRouu\u0001\"d\u000eSE\u0004$\u001en:>3#\t|ր_.Ǳw5_QЕz\u00057Gvg{>\u001b-,ك\u0016`{u_[J{z<\u0010g\u0016\\\u0014\u00076\u0011Vkt *g\u0001k\u0017Qq\fh\u001b-çb\u0016\u0013\u0000n\u001a|Ќ\u0004̹\u0004Xw\rt\u0007Mu7\u000f\u001da\u0003˻[u=Ta@x]A\u0007_ã\u001f]|\u001em\u00037$Ql+Fݴ-;k\u0001gؕa\f\u0011\u0002\u0010bo4pl`NtD^~vl\u001d\bz\u0002\t\u001aO鐬\u0011\u0016O\u0018\u0003<\u0011 \u00025u=\u001d\u0002ݖj0y?t\u0014M9f\u001c|lbjK\u0019\u0014$\"G\u0002y&)5|\u0016HE(JG^\rZq\u000buj\u0011Ɇy\u0015J\u0014,k\u0004lġ>wTe\u0013ˡkFxgֲSB\u0001/9c!\u001bW\u001b\u0005DӟCc\u0004k #F@gg\b3wM\u000f׋\u0019 \u0007{\\Ι[ԝiY]\u001f+nn|y^ Y< itM'd5\u001erk\u0002\u0013;9\u001eX\u00002WAIN̙+[_\u0004>rN\u0010i\u0000(ӣr3\u0015蟁dp\u0004\u001aA\bυ)F\u001fu5\u0011K8\u001f_\u001a3P\u0016\u0014(\t\u001a\u0003#\u00004׀gH\u0004\u0018T\u001a7\u0014WBdܘs\u0000RX\u0007\u001dM#hit5\u0012\u0001~\u000eC\u000fGT}q\u0018\u0003\u0007\u0007끭23Q.d\"\u001fh\bW\u000fnwflqxYo\u0004v?gF\u0001\u0007\u0002C\u0012\b.\u00047.l>\r՛펰b\u001c`<(fp[ʮ4+\u00109Sp\u0000O\u001cXY`\u0017\n45\u0014bzJ$EF^saU\u0004\u0013LiA{˜mK\u00158c\tl=\u0007TnI\u0010crQv$J;[\u001b\fλgX]j@2B۞f\u0000z\u0005\u001d-N}\u001f<׾\u00052\u0005a\\9\u0000?\u000fLNR̝bM\u0006v|8`-;^\n5\u0011/\u000f#ӆ\u001dK\u001b\u000fѠ[\u0013\u000eVlvM\u001dl¬IPivES\u000e\u001b]Z-\u0000y\u001b$qc\u0001kvѝ\u0000/\u0005uZ fzA|\u0007d\u0005ѫV\u00191Zv\u0010WFeAc\u001d}l\u000fa^ְu\u001d\u0005\u0019]=i\nS\u0014_ur=\u001c̢s߼\u0003anU[.6$\u001a။a!\f\\NVy-\u001au\u001dX\u0003\rWt\u0012\u000fU\u0016z4]$XM\r`wdbX3\u0001$7\u001buOT@9{Gfe\u0000HY.oUwBD\u0014\u001a112B9@\nǊl^\u0015a\baW[\u0012\u0015ZN\u00146{\u0017T|\u001dia*\u0011T\"OSE\bE+rP+`JzLLL\u0011\u001cJ@~G܆à\u0017PWd\u001bF]g\rP^\u0011sDOBw j<l\\\u000f?wF\u0011LVW\u0019`\\\u00054\fE\u000f\u001f\u000f(\u0013L?S\"y<&\u0002V6Dw\u0003UH3\u000eh&\r0WfbʏpO\u001cVu:<^̬S򠶭\tN\u0018\u0019:\u0000\u0005B\u001eyI[z\u0016@\u0013H\u0013'X\u000f\u0005\u0000ա\u0007[\u001dh{裨\u0010t\u0002wN\u0016t\u0018tCCe$%9_hkՎhP'd\na\tTc\u0000­M1\u0007o$i@IXy8<\u0003\t8U}2[18nW\u0019F\u0019\u001e/2\tz\biZ)\u0004R\u001c\u0014Fyj\bs_ZƑWø8j`\t̝?\f3\rbFdDeCmb\u0017(Pdr=ϘiSa\"THd\t\f0Xt\u0012};\"t:+)uQ6Kh\"<\u000bK9\n\u0012JYM\u0005jk;\nM|*8մh%\u0013;\u0015Z;'֗\r]\n\rS7l\u0007el@jCCd\u0015Gw\u001c(I\u0011'Lu{GIydt^\u00010Ū\u001b\f\u0006V\u0017EsHrL5\u0013EK \f'>:Kxmo\u000e\u0010OOWjyd<~C;\u0011~AM\u0010 ]/\u0015TbN;_լ:mE:\"\u0011ӣ\u000fqEYܨ\bn\nz\u001eo\"\u001c4\u0006\u0007\f\t\u001bU:Alxޗ\ne@(g`4`8i\r\fzA}6T:\u0006LVw\u0000\\s=\u0012'g\u001cx/D!4gk3.Iy\u001d@\u001d\u0019\u000fW\\BPrJ2&L\u00011\u0007\u0012:-w\u001c\"LkN\u0015{r\f[Ӗb!`!\u000bDpHa\u0006U\u0012rF྿H\u0012\u00107{͎f+:\u000f\nl<rCD(&5e{\u001eA\u001aYiHH{\u001d15\u001e[\u0001ݎ\u0010\u0001\\>DD\u0011$KꔻdnEHqޅ?wEH =\u000bu/+\u0007Of|,eՑ\nX߭4DDۧygc\u001c\u0001o\u0014\u0002ph\u000fEɷ\u0011Un8\u0015\fq\u0011\u0002L\b收\u0006\fvO\u0000H\u001f\u001ean\u000e\rȊ\u0019\u00009D\u001fbg\n\u000fE#%;K\u001c\u0015M\u0011W>\u0016\u001728moFWT^\u0004u6ER[0`%Ay\u0015k\u0005<\u0018\u000e\u0011\n\u000fX.lmiߍ2\u0010#\u0006hLv҃0nלsu_ηQ@8\u001b\u0004dFg  !Ak\\K1G\u001c\u0019\\ZH*\t\u0016e\u000eV,DUksd\b@\u0016\u0006T\u0017\bNAA,\u0002635P3bˈk*J{!5\u001eqXo\u001f[)nU\u001c\n/\\\u0016A+\u0003་D]i*v\b <mRIC\t\u0017Ft-G\u0007*N9\f\bLYފ7)s\n/\r\u000e<Yi~\r\u001d3RĢ7\u0019i\u00165K\u0012Q\u001dGn\\8ݮ)\b/\u001f3ZR`'BW\u0002))>\t\u0003{\t[\nd\u000e\u0013x\\FvY0\u0002\nk^k\u0016F\u0017a\u001b}P\u0002f[aP2\u0007&\u0013\u001a\u0015\u0013w\u0000t\u0016(\u001dfg1Z P\u0001\u0007\r\u0001k\u000fP[\u000e;\r\u0001>$yqxv>\u0015\t۪Rb.+w33\u000bɬAze\u0000sP5x-\u0012ѪC>Lޗ#Q\u0012OI\u00180~.h͵ѦFzT׉<)_3[t(2\t\tSF\u0017.;:\u0012Cs&e\u0015ߏZ\u0015\r$\u001d<`+H\u001erMMhatxZm@Qr\u0005{DF\u000b}\u0006Ӕ=r.\u0007\u0007\u0015J^0\u001aLϟ#jEyy}Gw\u0019u\"\u001etj`J&m#b\u000fyZ\t\u001b򃅿ϼi25HF1\u000b5's\u0003\u0019\u0014\u0018c˻lVF\u001cK\\\"\u0006\u0017\u001d\u001c\u0015f&=Rֈ!\u000e!EΫ\u000fmK){\u0001\n=x*RF)q};[t\u0011U\u001f\u001b\u000e`ޚc?ݑq'+z_a4,(|\u0018ٔ\u0011[xޤ\n\u0018^)r$w<WS\rPNحPSg0#\u0018<\u0012t\u0001\u0005\u0016%Xh\u0003-?\b\u0017LqP\u000eRhݧulz#\u00048>d1}+;7*$G4\u00184[#[\u0010]MFJO\u0006H :0_}\u0004qHdv(S\b\u0006M!\\{ 1@\u0010ت}\"\u0014\u0010]8)\r\u0018q(Z1`to@}-\u0018\u0006ay%ZGgIy4߈rQ>*\u0016\u001eZiz+!h\u001dogW\u0001ٝ,*k;j\t.#ŷNJET\u0003\u0006_)\u0013mMOUg0cԅ\u001e\u0005\u000b\n8d\u0015WLi\u0006d׶LgdN\u00076$T\"x\u0016Q+tLCʫZtvz\u0003}w\u000196HY\u0018\u001dF1(`\\\n/Կ\u0000'եSզ[G:\u0000Lxۦ\bJq-j~\u0005\u0003\u000ek=\u001b\bI2C\u0005(D^/\u0010\u0012`H\u0011\u001c\u0010!pW?F\u001d4A\u0005\u0003]5\u0019\u0011l|\u001b\u0018j2){ދª\u0013[]E+F5w8\t\u001aGu+Ȟ\u000fN\u0004!.A\u0017zm`\u0000\u0019\b\u001e\u001eU\u001cIу\u0012;\u0018]G\u0014U\u0011%O\u0014G5aI\r\u001eq9R\u0017&fed\u0015dlu )<WI\u0015\u001d`t#הj*~NFF|b\"\u0006_beD\u00194w\u000f_\u000f+W\u0017H<\"-YY_*j<+vSm86ZH]oC5~\u0017\u0016C,k~:?]\u00157T\u0005:=%::엍jԐĪJf9iQ{\u000f\u0006T;YP\u0006m\u0012\u0012C\u0013\u000eHs\u0003r\u0016zz\u0018[\u0003ndyì\u0018Ց(s\n|\u0004i0QN\u0015\u0016C-6%M\u0019jW\u0010u;\u0013xx\tni5\u0018{X\u000bրF\u00031(Ж\u0002\u0016Sjgz\"|R*].\u000e\u0010#+4\u000e=\u0004r\u0017cG\u0017i\u0006\u001f;\u0012%\u0001\u001b0[h4Mq\u0016\r\u0001\u0017`YH\u0014\u0006\\G\\@R/z\u0017y=\u0007I\u0007\u0006y\u00196ZβSEZ\u0018\neRHi\fG\u0017\u0011ыvD\u001a9u\u0013\u0003>C(I[F^JlTgхifIq\n<(\u0017\u001dF\u0012\rGۜ\u0007\nDJM\r̺\bC\u000e\b\ntLIscE9\"\u0012Otm\u0013MvinղTC\u0011PF߶hqB<2R2\u0016z=eAgr\u00005\u0018 \u0007p\u0006z(\u001c9ޮ:_弈 vHY_\u0016\u000fjBA\u001bkd[L\u0002#\u0019\u001d\u0011\u0012O\u0015CmaWSs\u00176֕\u0002}j{\u0004\u001b\u001c3蒑c!Y?>%\u0000EFifTN'BV\t{4@G#d1{^ܯ\u0006HL\u0018,\ty\u0016ݻN9\u000b\u000ba,a\u0002\u0016_3d@\u001d]#$Q^ͷ\u0017-\u0014Gܒ;r0^RS6Bg\u0005gEk\u000f+\u0005\u0000G\u0016\u0002Y\u00125.GD\u0016<\u001eF^]{ \u000b\u0014C\\Vj\u000b\u0003<]hǶQ\u0002Y2W:z#]z}\u0011\u0011jw\u0006|ח#lR{9vSPcaz\u0018\u000fó'\fw\u001d\t\u0002@#a\r\u001e񎘋\u0000\b+*U\u0015)\u0000bpM\\`J?kDaGq֎.\u000f\u0003I\u0019{'\u0004\u001f\"߻2y>ϹW\u001bS`\u0002\u0005\u001b\u001c\u0014uNU\u0004b)P6n\u001b.A\"J\n0u~\u0011\u0010_ށQّ8\u001a)x\u000bM51C[HZC\u0012t/2`:]\u0010p*\u0005WgUϽ8B2ŷ\u0016x\u0019I X]-5t<F叧<ZgC@P\u0017U\bPt\u000fw*jN`Q5\u0002Ql<Kq\u001fUO&b:!ڨ\u0002/,3E\u0016\u0012YlQ)\u0011GZ7/3\u0006\n\u0017\u001cSYVne?9\rRoF=Iu!!=(Z\u0001\u0011GcEۊ\u0002\b-;C_CB$P_a\u001a\"\u001cjDdJawuڕ\u0006Y\u001fT_pTq*Q%> |\u001ee;(j\u0007nevQ\f%y]'*[\rRց\b\u0005,'>\u001c$n\rk\u0001\fo)w\u0016Fl\u0006K\u0006H)Ϥ7>\u00116@\u0013υ3\u0003q\u001coƻH\u001bg;֭?bG'OshR[P\nl\n\u0006+Nr]<#c\"֚\f/\u0001)?9\u001340̣ja\u0013|\u0006+ĜTu]]<J ݤfMr9߬(\u0011j҉\u0002i3[I\u0010\u0014kX{\u001cH'E%佊\u000b_J\u001d)-9E\u0002ɓ]\u0013=?[8\u000es\tV\u0012Y\u0000\"6<\u0012\u0014P'\u0004\u001eΎu\u0006%Ȱ\"{ayA?\n@\u0003*}΢Qa\n/㍤k݌\u001dyPYJ\u0001!avlzgBg;s[M;\u0004v\u0007 w3INuT\u00166p]ApdB\f\u0004M1\u0013\u0017qK\u001f~\u001aA2#x6#=9+r\u0017\u0000/pP\u00148x@p\u0004\u00066\u001f\u00115}< \u001d׈viqƭ\u0014f;\u00028ˁ\rւ~4ϊ4\nl$0Y[j8D^\u001d\u0018'-|x]K\u0000_X'(L5#\\Z\"^\u0002*@\u0016xT\tJ@բ,\u0010.Ż!HBAE\u0002rN\u001b2!\u001c$_l]k;p\u0016H\u0011v$v\u000e=N\u000bsۮ\u001cJ%51j\tC\u000b]\n/פ\u001bT|\u001fk>\u0000x\u000e2.f3j¥P<}\u0015}jwMr#\u0000\f_=iɊ\f_i\t-AF~=z(>\b[rT\u0002m|\u001eii\u0010\u0012G6Kܵ1\u001dL\u001e\u0019еi\"(ޖ\u0004>\"F\u001c鄞\n漫p\";e\u0006n\bnHC\\#\"\"IIJ\u0011\u0000E{ѹ\u0015#/\u0016S*'\"I**ԙ>y[I({\nmYB\n[R0޾\bSg1\u001fZ\r\u001eAgk\u0001kC\f\u0006`[hQ{qTr\u000bWp3I4E!\u00051`d?Oply\u0002SWiӅn}@\tC6c\b\u0002+\b̵ܴ\u000fU\r\foM#2Smk\u0016\u000e{\u0003\u0017\u0001#'j \u0017\nL8ф?ld9TkQqo)JC]U\\\nT\u0006mpi\u001fs\u00061\u0012\u0000PYyKBq\r]\u0019\u0007q2y\u0014*Jج*;]i\t(Pѥ\u001eN֟C4gԖ\u00178\f\u0003\u0010v#ws\u001c.r>|J%}5-&=7\u001b,Bz\u000f\\>W\bپ$*ۻ&\u0017P\u0002fԃ\u0002m8C'FMʊHѿopV\u0014I]f\u0019l9ߌ((\f}s{޿\u000fi\u0019!ق\u0006!7D'\u001ddnȘ\u00035\u001f7\n\u0016PQ'\u0003\u00183tTih\t\u0019ArÚ\u000e_\u0019ȊW;>Wr\u0017\u00066az\u001dL&\u0013,\u0015'hL#\u0011*`HjQ]\u000f.\u0000@UrX\u00113uf\u0019G$#R\u0010NYr(\u000e('+k\u001d2\\sjw0\u0003#eywi\u0005TLf \u001bAs8H`\u0013WzuTWOe\u001e}C:鄣o@~\u0017w<lzcNo\bW㬋N\\\u001cƺ.7:u?E뛔\b\u0010\u0004[媄\bun_\u000ep\u001anV6,/˟`-o@CP\u0006)9#lnJ\u0001_\u0001^%AMM \u001c.g\u001b{\u001ak\u00078<\\(Hsr^p:eg$\u0004, )2h\u001f;:гwF$WuߍV\n=4;~\u001fv䮥gh2RW[*\u0004W9Y?\u001d`\u0004\u0000\u0002fD%%Lr\u0007\u0014\rK\u0005R6\u00017W/\u001a\u0013\u001bj\u0001\u0011\u0002\u0015L>g_f{rtu`\"W5k `-;R\u0015Z{3/V\u0015PVLY%-e\u000fo~ɸ*\u0011,(\u0019V\t*\u0011azmӧdx<GR)<\u0016R\"dlE3\u0011~2٫$\u0018ZwP5#t\u0002~\fHav:B\tj\n\u001br)\b3j$\u0014C/c/ScYt\u0016q\u0006%(J\u0018\fH\u0014wKb\u000fˢ<\t\u0010mD>\u0012brF+E\u0006\rv\u0014Òkc3\u000bjᕁb!C@9\u0012G\u0013DfYGCB$;ʲtc\r\u0006QnGRI+PGZx3lWԂr\u0011T rJe:(\u0019mm\u001c(U$\u000b÷_I@2Q\b\u0007Z1,\u0002$\u000eP֩e\"\u00049Sh):|<\u0018u~CcqnqS\u000fؽAY|\u001ec\u0016t?=FP\u0014\u0003\"\u0018\u001eE0|A\u001f\b\u001f\u0014!KĩefX\u0014nRLq\"4ؖS\u001c)FB*`\u0018VQ\u0003\u0013\u0005TY\u0007ic<J\u0017m$mj\u0012֓\u0018\u0017\ti5Ghm\u0003+I#\u001fN^Z]JypK1E\u000b\u0001k|0\u0004<RGJ]yB:ە:JMz\u001c{edq2EaRlޑiߣB\u0014핽G#b\u0014\nB\u0012c-P۵\u001c\bL[W1Rյa&Ms&㡈gQ &\u000e'Bdv\u0019d\u0002A\u000e$|BQ\u0003\u0000ѬHFv-UW8ؐk\u0011\u001fP4ov\u001d\u000f4\u0006a^\u001d8oM)Ryq\u0005\u000e\u0019a#\u001a%A6\u0017_#s\tsοUYY\u0005\u001e_p'8\u001aȾm?w\u0003x#s-S~q;׏rG1\bzIKC\u0019+\u00054?V\u000bZW0ZO O5Ң\u00178z\u001b90\u0007mz[\u001eYZ\u0017e!n\n\u001du\u0016DwIh}/G\u001dj(x4(#dfM򦧋`ӳ\bE_ih|\u0006#@C؟\u0002\u0014 ~\u0019\u0011\\\u0006}\\_/FXʲQڡ\f(Ƞu\u0018Vg\u0013@\n/{=\u000fW+yM\r4\u000bFSsbm1o\u0017g\u0001\u0002^=\u0012k!\u000f9\u001f\u001f,I*\\H;r.G?\u0014}ֲ\t'\u001dC6Q>5\bGD\u001bi~V׈wO\u0006%\u0016)6\u0005\u000e##x\u000er1GX\u001b\u0013A+\\a\u0014SGngb\u001fK\r\u0005$aUoJ\u001e;@&ㅲc\bt:}+vU\u0017D-V\u000eVjLVܫ\u0001+\u0002O@3\u0002\u0006\u001a[\u000e\u0000\u0016\u000e}\n\u0015%^(Z(|/4_\u0016UE\u0000)Ͽ1\u0005M\u0001=qir?ƽm\u0007+,o\u0000=C06-A[\u00001mk\f|p\u0011K\u000bT!yjKc(<\nR`,pzG~O8jamm\u0006x \u0014Ty$\u0014U;S_/p\u000e-}w$\u001c\u0018t\t6\r\u0015P̫}\u0000~z)uhʒ\u0010#_.0#St[\u0007)\n*`HGbWTcҍ\u0015ϣ$\f\"8xCwԚEX#i(\u0005\u0019$*\b(\u0002B4\u001cJ>˺:@g:\u0001F\u0004\u0018Q@tWu\u0007Bl1A9\bZX.7\u0010\u001f\u0004n3)#FkcE寒/\u0002\u0012'\u0003Av\u001eZiJ~FLc/\u001aAT;*260\u001e)?\u001bf\f\u0014`tV\u0017q+\u0018GS'\u0014ڂqFr\u0014R&3P\u000bNW`sjZώeeuNT\u0001X3\u0019X\u0016\u001aˈSos\u0005\u0011\u0006!C# \new\r#*\u0001PHH/\u0001M`F k0eT\n\u0010zt\u0005\\sǫBwSUEyyIW(Fm+\u001ad7b)\"yHw\u0016I2M\t\u001an62yj.uZaͲ\u0017\u001czvR-f7p3\tz1\u0002ٛ\u001f\u0019k\u0007\u0006O\u001b-\b8\bq\f}~Z\u001di\u0003X.C\t%-\u00125_`1\u0002\u00151IT\u0007 J\u0017d;Q\u0014S+ރ7~D~-\u00045\nmn6$B/V\ruaxQjd\u0018wyy\u0007\u0015/\u0018xzY`\u0019˺}ڴ[\u0016\t]׈c\u0010qIv3)*oW\f%\tV4gzV\u00197W.*\u0017j/:p%B5Z\u0011߯;땍c\u0012;)挾gYeĕ\"\u001bcR\nm.\r\u0001VT_\u0005\b^\u000fRi{(:`\u00116`\u0019\u0017\u0010I\u0000\u001c@\t5o]+[`\u000eg\u0018e#\u0004\u0011\u00031\u001f'5\u0001-A0\u001d\u000e15W\u0018\u001f\u000f&\u0011=S\u001bY*̬\b\u0018ɻӄ(7\bF\nDǌb!(O6\t\u0014G^ݳ#\u0013\u0005Sx\u0018\rOκQ\n~@\u0015MmpV\u000bm؟+\u001d;`e\u001dy^ij\u0019#n\u001d׳\u000f񣓩\u001cʒ5[uuc(5&B\u0004Ccϩԁ{+!>6Y'\u0011'w\"\u000f:hӄlزNzhsQ.C)G\\ӇTc`.gK\u0019x=\u001b%}S4\u0004\u001a\u000fGh\nGE{\u001cI>3G~:\u0004@w\n~j0`TAU+r4.U;\u0002\u0014X>\t\u0011\u000f\"ݚ\\g6ס\u0001gcU߷L~\nF\u0005J\u0002gTw;1V\u0019v\u0004\u000ek\u0004I\u0004o)(u^`~A%]\u000f\u0014\rz>7[\u0005VJ<̊?;\u0012r/\tGIy\bNF{\u0011&\b0ց%+13R\u0019X\u0015Ĳ\u00111\u0001z\u0007/!VـIed8\u001f)\u001f\u00139V\u0012څ]GC^2\u0017APh@ݤl\u0019Q*J\rKA\b5\u0018~̀\u0017vt-<\u0012dD\u0003Y(BCJu\u0002r)?.l3`0\u001dQA\u001e(ܩ\u0003\u0014 \u001a#\u0000V@h`D[\u0002\rxl;m\u0011QHkAb\u001b1#/O!E\u0010\u001d\u001dڽ!WyvByrcZ-\ff\u0001N\u000f+3&=&.j&8̥OBuM!\u0012\u0002qX=\u0000%zh=`ީ\nnntQ91f\u00191H?Z\u0013O\u0011d5d]\u0019$\u0004gJPk\u0017聎]&k3\f/ɏ<\u0001cHE\u001cx:\u0014\u000622`/]Yւ/C!N\rN-5\fS\\3\u0002z~\u0012K\rbBVjͧ&\u000bM\u001bRTJޱ\u0000JO\u0013\u001f{>4\u0000\fs\"˦?l{RoCeA\u0019Vsև}+v\b%κ\u0013j$\r7\u0001\\`C\u0011O\"?;ÚD`\u0007|IVi&f&~g\u000f\u001fWP!\\ VY\u001bF|ކQLO\u001cX#(b(FW\u000f\u001e\u000f\u0003\u0019ǰV˄\u0019g\u0014]\u000f\nǃay3īQE^L&a\u001aΤ:)\u001a\u0011E\nߑ'\u001f3\u0019d7*':\u0000\u001an\u0003٩18[.*%\u0017m\u000bFԟ\u000e\u0019\u0011\b\u0011v%\u0011̛v{lNU\r:?;r,\bi\u0003׳EI61y3Yx_CbC]\u000fs\u000fJB?}DW\u001fGhRQ=$d<CX#\"7,>\n8fDnubUd2{z8Q^jU/8^~\u0004_tJoЎq,Fd\f۝!1Ə\u000fnq\u00060\fB3\\e\"%\u0014\u000597pGĿq\u00116e\u001c@\u0004ʀsChe;\tYr$=@\u0015|(<T\u001ai:J>)\u001fU\\ǙA$t+\u0002\u001au\u0015hZzM\rP%R6ˢNS\fV\u000b%\u0007\u001c'\u001d\u0011\u0003a*\bSy#M`Y=\u000b]NχW&z\u000e\u001b^<np!:P z3q\u0014kT@rfL\u0015t<<P!0\u0013s&go2^`\u0000qm_\n\u001e\u001fEjw+Cӓj([tD)\u000bNz\u001fW\u0000'_&?j\u001dH\t;\u0006-\u0000܅gQ̶BGh:^Y\nB9_!k\u0016w%]ȡ\u0013ˆz.\u0006kBkCxwu\n\u00114D>V,N\u001fyMwE\nq0OP3\u00020,eBm;^!l\u0004rq`bYhqꆬ%2WXȐ92TǸ\u0018M.\u000fu=pc<6,[^\u000f=\\\u0012>\n#\b@H+9{r{\u0014%c\n`q\u0007X/W\u001d@\u001a/FhŤꁱb\u0006ԋ-âr\u000b!Eo\u0006̑\u0013\u000bfs\u0014\u0011z%\u001eZ\u0014ȧ;hGMˑUPG.?iئ<ngcD=Vn\\r`6-Ų\u001c\tU]N/L&e+G\nB3V\u001fZxϐ2ꚋfG\u0004ʧ:i|q9O7ظJS/\u001d;dƸr\u0011CA\r]\u0017zh|x$E3/\u0010\u000eJN`\"\u0015*^ũŚ\u001aT_A\t`\u0011T\b0ֲ?\nm\u000f0C=/z{\u0010\u0015z\f(`샷\u0015dmܣ&\u0011N5[w\tjJ昶_I\u0017QSb]\u00029=\u000f\\?NS]\u0015\"/-5\u0014\u0012-\u00035\u0012;\u0007r%^;v~S\u0012JZ\u0000^(x ۺJ'}\u0012wٟY.\u0001l(ϡ\u001e\u0000WNUe(\u001fP\u0013*\u000f\n\"sPe>bR.@\\_OXx$\u000f~\u001dk;\u0014\u0013;V틐^RH\u0010h3\u000f\u0016Gc\"Иَj\u000e\u000e`\u0019e\u0010y\u000f=OkE%~|]n%QIWbkyM-d-S\u001d[\bҎ Y>L1\u001b.\u0011hnly!(jM86Y\u000bZQ\u0011ulEHHPl|\u0013UJ#`L͔+(\u0015=\u0005\u001dC4\u00179A[{i\"z՝_o\u001f\u000f?wO\u001f/jW\u001f?\u001fO?\u000f\u000f?/_o\u0014_l s\n\u0003K\u001f~U\u0012W溾kZ9$\u0003\u0016waűfN`+F\nx\u0001U@%v,lg@5#VN)˴=ҦH7\b}\u00004\"3S?VVv\"O{\"~{=N$__Q5%&\u001eA-H{ƿs\u0005Uxn(rCԊX\bݪӍ\\k.\u0001H\u0011wZ!p$zU\u001c&;crP\fgZV)\nқU(Me\\~\u001bo/$UzKY\u0010%rؠ\u0006of\u00167Rޫ\u0012%av@D\u0017}bu\u0011޺9\rǮ\u0013\u0006\u001bH\\󮭟\r=IH5)4a5\u0014e8:߀\u001f+\u0011߻܇VN痍\u0013\u0011G\u001ah\u0018nmP8L׳\u0013mX\u0018\u0019x-Lߝ\ro(NC-\u0013$\u001eYFq\u0012n/\u0015n\u001d\u0011\u0019$jǃ\u0019[L,R\u0014OSrR\u00119?,ٍ#rXA\u0003\u0015\f{ Z|F\u0003\u0000!_\u0012$n\u0005b#Ê\u00035\u0018\u0013c#u3E<\u000fJ\u0015Xc7\u0012\r4\u0007 JHՒ}\u001eW\n7!hHͩ=\u001dņq2ƃ\\\"!/r7w\b\u0006\u0015i!\u0000k\u001e؞^={\nFZI~\u0014\n[\u0006ِ\u0017N\n\u0001OTˢصѼZ\u00173YHgT\u0003bM|~FԼI=\\s.m=bia8֔ \u0011[v@.ԿĔ݋\u0001>ß\\\u0007%8\u0010I7~fP&ߊspN\u0014;?xi\\Zq\"\rR\u0019\u00176\u0017&XNZn\u0003\u001c9 \u0015_?~]\u001d0r|\u0014?{C_\u001aIr֚L@H(q]Win.\u0012\u0016bk\u0003CG\u0019\"$\u000bx̳tזvk3~yl3\u00192j;\u001bɇ\u001b\u000e&n\u0013Jz9{\u001bաn\u001bJЮs=}m\u0019G#Ɖj|jCӷ\u0000\u0015Sp\u0000>)\u001bTS\u0018\\MY\u000fy\u001d\u0012Ď\u00063\u0012t)tǲ\u0003{Jj+i+#D,NA49R\u001c\u0006ֈ\u0011 \u0002G\"qJhcI_K\rXՋ^hcժPBK\t\u0019_\t\\\u0005=Sw#\u0012\u0018\u001bF\"`Y>i\rt޴\u001d[R@\fF}#q.[\u001e\u0004\t^l$r8̉\u0013#BmS=څkČ,m{bN@}w*u%暻^KI;\r\"7ؚV\n\u0002\u0006i?O$\rئ+>٣%\u001eM\u0005gK\u001c\u0006l\u0019uΞjy \u001e95Ⱦ\u001cܜS=K*>\u0012Aϳ\u0004\u0006\b\f\u0007VmT\u00075\u0017-Y.NCS+u 0,ݮ][e롷ǉl\r?\u001b1&Hu5EB\u001b\bsY\u001auFs0\u0005\u0002+\u00114_@\u0017Ek\u0016g\u000e}\u001a!\u000bYŬ\u000e+`XX\\Q5ZoDM\u0012Sl\f\u001eWKV\u0012\u001a<\t\n\u0014ˆ3ڈݶvNJFZ/\u0007\u001bJ^zۓ;JD\u0017 2@t>\u0006E (/V*\u001f\u000bv{Y6\u0000\u0014\u0001íQH|j*\u001ddL\u0017p+\u0010]yЬ)\u0001\u0002׃\u0016\u00047\"Iu\u0001xK~\u000bO\u0010ԘUƅ\u0007_fbYh8G鿗\u001e\u0004#\u0004x.3鑥$x \"$[̶2lj>C\u0014\u001fGQ\u000fN%[adP\u001a\u0001:ªw<to\u001a5G(w=cGwu8&aߒI\n\u0006\u0019\u0002N;s\n\n͵tk\u001c\u0003(/bu2(Q;\u0018k\\ں\u0015PH\u000f\u0017uf5u5fCD\u0007\n9\u001e\u0010hV·?\u0019 tǄD7AHQӼ3P\u0011꽲f蓒&@\u0010>\u0007h8pFZ^CkCN\u0001\nk\u0003on7}Jw Sb\u0014kC'\r8N\u0015y\u0016(\u001f\bӒ-\u0005Ft\u0004F4k\u000687\"K>ӣՏ\u0014tY\u001bWqzQeG);-{\u001fTz\u000bF'Gac٭$y\u0016\u001fυ٠D\"52\t!-k\u000f/\n\u0019?*-e7{OX\u0006n|,$Oݤ6%l\tm=nzG?L9d>u\u000e\u0019VjݷC\u001eT\u0005{@ZH\u0011g0;k/t\u0019M\rc\u0010\u000f?J?ـ\u0013VK7b\\z(*\":%^W*-\u0012\u0000ky(l\u001eiH\u0003/y\u0017\u0011Bl\u0004W\u00020УXĕ=*\\\u001eBqte3u\u000bqx`j}A\u000fk\t\u000b\u0016tMn\u0000\u000fӼ\u0005\u001e(\u001d!\u000bE\u0012\u001f%)+\u0014\u0015W\u0018*\fN]l\u0006Hu\u001aB\u0007@\u001c\\U\u0001\u000f\u0005WEmͺ\u0011箈ܞ|+X,ZMN9oOŖP}\u0001\u0018T\u0001Ұ>\u000b\u001ej(sk8El\"\n^f+F\u0002e\"Ueqϟ\u0004_U3/Ik]؆)s\u0017ӁO\tG6\u0015ǣ<65&b\u0016L}BV.~ܐX\u000fsF\u001f\tc7v/CVg\u001445bCu\fEt|\u0018|]9.5X\u0001\u0010MJϤ)M[4t oA\u0014\nϸI\u0019z3V\u000fhm\u0000qo8S\u001b\u0015 ~\u0016\u0016\u0000Ĕ/%VSy\u0013zI5wiUP%\nkZ\u00108.lB\u0013W.0Z1h\u0004L(\u0001gdLF8$PusE;\t^\n[{z ]0Y3D\u000et!\u0012&\u001f\nM%x\u000fi93\u001b\u0004\u0005m0\u0017Y\n@jG\rR\n41M*z7i'u/%zUzE]\r\u0001Xixt\b߫\u0002H\u0012shW~M\u0000|\r|;rG~\u001dG\u001d?}͎#PrP8/wZZ\bŹ|˳-\u001dĕܴUI\u000f<[X4wdlj`R$TØ?6o7F^)\u000fBfA(W,{h?\u0017Uec\"\u001633x\u0013ĽnࠦT\u000eC\u0003)GK\u000fޟv(w/%^+'\u0012TJg\u0011\u0016ϟ<¶K7$=mewLC%fϔL6qE\u0013L\u000e\u000e\u0019'l\u0002\u0014@X'\u001asL\u0010?oI\t<5/Uo-h{qIGL^\u0011J\blcXBxM65c$\u0002-?\bgy&}\u001dа`.)E\\giʢUq\u001f\u001a\u0007g2\u0015}Y yqks#IS\\#?T9?\u001frȚ6X\u0016{1%nd=[7\u0012@B_D%ePpYXcݻ쒺z(UD@~rvƾW\u001dЗ\n\n}Rn=z6:\b0긮\\M.<J\u0004`v\u001es~BjS)r\u0016ty\u000bK)|fC\u0002\u0007?!\u0012dpLjA\"^\u0010hA\u0000(ss\\w\u0019`X\u0015ϻv$D̜ƙ1:tle(hnLlxRf뿰\u0016}Ó\\^oxH7z>[[\u0014w<)մ/M_\u0011|\t,1sMȇ\b\u0013q'5tPQٸbB\u0004u\\#GXB Ds\u001a\u0010͕a{0ۡ$^ .g\u0001\u0007-\u0019qs\u0005ugв\t%-䥐B6Z؄\u0018QR:Osӭk՚\"9zL,\u0012`\u000b[S1~8ˬ~Jy$|\u00051f\u0017v.\u0013Kj|#\u0016\u0017/Ƥ\u0005ṃWWΥ]B\u0007j!\u0012huF48\u0018^$\u00052$\"V\u0001<\u001e\u00022gnbLUjuF[ H+g}a|QR\\V\u0003GvֽL\u0000\u0005ɰM5놞\u001b*kw t\u0011<6\tI\u0015kxFŉ/\u0012J40:;\\'rz=\u000b\u0011\t\b\u0018Rֈy,]lJ9H\u0001G\u001a\u0018\b2Hz>Qܲ\t݊u_PH])vd#q\bՃ\u0000<棃\u000f\b3j5Q\u0019F\n4ATJ\u0018=\nDVW:\u00076݊\u00076iz<±\t\"U0ny/,m\u0012;KC\u0019\u0012Cw`*t\u0015B,f7)e-aHfE*\u001c\u0014\u000f8|I\u001550DCeAj{\u0014V\u000e7\t\u0010u\u0010˵\u0011\u0014\u000e\u0001NRWxm\u001e\u0012?TL\u0003\u00014\u0017\tb\u0018C\u0002\u0004)#PZ(1X$Q;\\T\u0012OE;Z\u001d;ԻQ\u0001lܷQUSJ\b2ϋv7r\u001d\u0000hct\bF/\f\u0002/\u0013݃!\b\u0015>\rNO\u000e\u0017#\fZ\\2\u001d-G\u000e]n\u0019߿;7aޚlDCn\u0018g\u0011@G\u0011\u000bAp\u000f\u0014Vj\u0003\u0014tT\u0016ZbӺ*.7\u0017>Kd1Ԧ]va/2\u000b:@\u001e!;\u0000\b\u000b|@z!.X\u0013\u001b\u000eS\bjR/[\u001b\u0002\u0011A47߮&\u0006mj\u001aHh<Cô\u0007d\t\u000e\u0004MK:\u0010\u0011I\u0011C%iuWQڸq\u001e\\Ϙw2\"Mg\u0014(RN\"}O O,i\"\u001f\u0005\u001d\u0005X3:2\u0015#$\u00140\u0010\u000fB6PQх\u0007>\u001a-\u001e\r\t\u0011v\u0011\u000e\u0013T%!\u0012e\r/x\u001a\u0018cd\u0013\nho9\u001d)s\u000bť:\u0002\u0019,g+FC\u0013<:\u0011(Ux/!Hd/tPi\u001eQOFs=$va}JJ\b\u001bYUEyk,\b\u0003@ղ0%\u0014@S1v7lG~\u001ac\nUP/;nNG?\u0007\u001fl\u001d#\"ō\u0000<\u0017]UA\u00035qψF|\b8䖔\"a'\u001b\u0015%c\u0014\u0013Y\u001d\\1r|_xp\u0004?-8ihy0{$ȷHBV\u0017f\u0016~\u000b+\\uZ8\u000eC4i\u000fi/=u\t;qMQƺx~\u0014 /=t\u0000.B<4_CE<Yzx=\u0014\u001aȩU\u001b\u0014<6\\z\bdJ˹sӝX\b۾Y\u0011ƿ\nQ )G1,qk\f)6L{\\$\u000f\u0011iBCvF~\u000f~Z\fч8K\u001f\b#p>M;vd\u0010~E|>4Q8Z\u0015CڬS\u00031/7\u0017dP.Vz\u0019+>B\u0013l@\u0005\u000es\u0019;.g_\u001co=K@Spڦw\u0001\t*\u0006iN\u001dkϩ:aD\u001azTl\u0003c\t\u000fAp(^\u001c-\u001caѸfDYhd\u0014@\u000fD{=tKXe14\u0018\u0019֝vԎxVB[s\u0006)=G|=Sl,{\u000b49T,7~\u0015/S%9\u0019\u0017vdN]M-lh\u0007]G&b-/FOxONYf>bPݶ\u0019\t\u000esԝ^A\u0014x\u000b$\u0019\u001a@lj,58Kc\u001b/3\t<\u001au]\u0017#\fEM.\u0011z;\u000f\b\u0019`\u0018ChN+O\u0014F-||hm3\r\nٍLΒQ\"zyڗ!&IMus\rĉ\u0014^x\u001aq_V\u0007\u000eQ6?aIim\u001bqdn͈R\u0002\t\"TtyBN\u0001_\u0002_W:*\u0016wUDl\u0011\u000fՄh rt&\n\u0018dVt4tӎL9lRim5wKxl\u001d\u0014E\"~>j\r\u001b]dQ-Fx-\u0019\u0005-p\u000fy߫vVwm雔fy)\u001d;\u0005wͼ\u0001\u0014(n4JL3t>Y@-lxNXllλ4\u000b\u0007Eu1Ai\u0015iih\u0010KTor=ӊn\b\u001f*gM=~ԯ\u000e\b\u0018n\u001c\u0000\u0013 \u000b}+]+\u0018,\t2?S\u0003EPP0D󎏟\u0004AP\u0001۠Eq\\!q0r8\r;\u0013\u0012\u0003\u0011\u0004\fR}WtN`\u0005@\u0011\u0012M$9\u0007\u0012NfEK\u0015ǁLECLoD\t\tJ.\nz\"a\u0010!\u000b\u0015\"Ei}3e\feմ\u001do\u001b#0/3\u001bkB\u0002\tFD<\t\u0015E\u0000\u0006_\u0002a\f0Yw\u001dEjŹ9U5\u0002\u0010zzN(TgYŀH\u000fؠ\b`Cl\u0019rzr\rэ_7\u0003VH\\*\u0004,$J\t[$\u001e$\u0011Rq\u001a\rq\u0000?m\u0018lJ~ۊPX\u000e\u000b#r\bw\u001f)A\u000eQ3x\u0014XغUS9\u001d\u000e6H>bڜ!l=\\PvRdBӟEgC\u000b=\u0007\u001aJ>%\u0016a\\o7\u00171/\fB!U\u001fV5)Q熤t߷\u0017Ky\t\u0006M5ЋL\u0007=*[?OK\u0010w~-if3P&\ryLS iه^+\u0004Բ\u0015yYIM\u0012R\"3*\u000b#\u0016#o\u0003\u0015\u0013H3H;\u0012e\u001cٰI)\u000b!~\u0005|ԍ}$IwvPKNgÑ\r/j\u0017\u001b^݄*\u0016䕬\u0007,qX\u0011M:\u00006yZ\u0007lR1\u0014WnU\u0017?\rY\r\u0006~\u001c<y\u0011GUrwSibJG\u0006=\b\n˺\u0005?Ǳױ\u0006|d&x,pZ68?7j\fl8Շ\u00038aJX\bFY\u000fz\fo/}\u0013Q Br\u0005to.%h;\r1\t굉Cx8B\u000bەQM^nGk\u001a=!&\u0012;Ɇ{1\u001fVzUeD\u0013W6w5\u0003At}~\u0003)yC FB\u000b;p_\u000eqLa\u0016u47u@Ǉ3?sL*\u0004$.P\u001ew\u00150Wf\u000f(K:S\u0011I\u0002v\u001fY\rh`\u0005۫aC(T\u001df\u0011cZrtJ\nl|ݿ\u0000lܩ\n\u0000\"ޯ\u000e<\u00076i\tk睵=\u001f%/Zf\bcŁSE?\u001dD_`)L}C 5ʄ~ٝ:4\u0019S1DM^-\\y]%\u0018acE\u001b\u0001\r\u0015#\u001be_\u000f\t'jU]\u00076\u001a i\u0017Ԕ],r+x#i{2<\r:ϧv\u00157Cmͥ\u0006|\u001b[8\u000f&q\rR>EauM\n_R\u0016,}s\u0006}͗o\u0014\u0015ml֩u[5Sm\u0011d:<}Q~sM[A/1v^!Yq\u001d\u0017@* 0\u0018Eޘ!rhW/\u0000:sz:\u001e)\u0011#Ϋ`ԂVH\u0010\b\u001cQ.\u000fO,zK%iKކ\u0015@\"\u001b\"PoޥP~\u0003%B\u0001\u0001\u0018dy!S\\43h\u001eQ=q\n;z_<\u0015=+\u001aYW\"MZvsr\u000b\\O<\u001ft\u000eʓy-7X\u0013\u0006(govr_k3\u0013\f\u000fA\u0017rƕ/N|) cAqc\u0005\u0003o:cA65\u001asD\u0003i\u000f*qdԎhB&P\u00137\u0013?ޤ.\"\u0019EFmHP\u0011\u0006*px\u0007/\u0005|[\u0003]\u000b\u001e$C\b\u0010\u0017b(\u0006n\t?ZΞWBBuWFb\u001dOB\u0012b\u00130(\u0006g#d\u0002=Ϙ;L8,\n\u0018Ž~e\u0013!8SP$)\u0003r\u0018`\u00116G|ħ3\f\f\u0013-mRT'\t\u0011 wt\u0019ZVZͬ\"OrJ:%\n\u0010!\u0003MxΏ?́{{M\bz!(wW(\u0015\u000fW(\u0019\f5+5<PY\u0001<r\u0013ϵM[S\u0011_WFcYU\u0014~\n\u000b\\CY^ڎ\bQ/$3\u0019EaWRNW\u001b*Hq_\u00181\u001a{т7=G4U1jJ9fu\\8\rQasď\")^_fu/!nQ>XeJօ,b\u001b\u000f>O5A\u0007$k5?î\n.LWʾm\u000eHo\n\u001eÌt+J/wG?il\u0019f/w(\u0012G*˓kD7fGR0\u0018-k*Eֈ:\u001eg),\u0019->la(g\u0006v/fZGuu0PoTò\u000b\u000eb]\t,@ۏL6ESY\b\u0013x8ͯJt\u0014uOL\nY\\(\u001cp\f\u0011nk\u0011p=\u0019Owzɤ}Fݺ\u0010ۻ^\u001d3z\u0019\u0014\u001b\u0014\u001b-ږ+Lx+[\u0007M<-j\n\u0018j\u000e\u0015n\u0006Es+bYCRB[\u0005}ƀ#C9\"WEuIBT\u001c\u0014Iaq\u000bo\u0001'\bhh5wltŎ!5\u001eTh\u001e0{I\u001e뾋=\u001f\u0004\u0013)Dq!ńD\n\u0010bt\u0013m\n6\u001a:p$nOZu\u001b\u001c^jZ1Ւr4\u001e!,q5q$y\rmiŇ\u0015\u0010֫\u0005\fyfB9c@\u001a\u0002%T҂*PȄqS'\u0015r\n\u000buGqHV'\u0002#2\u0005\u0019J\u000e%g#\u0006\u0002\u0002VѰ9eLuo=R6޶fZ2zrg9ĳ\r%\u001c\u001c;\u001b\u00042z|.t\u001a\u000f\u0003\u0001-\u0018~IQ׿7q](\u001a[Uc©\u0015XF\u0007|OHac]=~{L2.uǇc\u001b\ry\u0004ݱydТwC=\u0007kNb\u0003r\n`gmxAYN[K>B\u0006ΌfQ44\u0014\bPI@ZQI螁\u0006{`٬q\u0000L.7P\u0019pP|2\u0004@\t*3t0{\nG<+:J[4kFbTz\u0018[{|^e!\u0011Z֧I\n\u0002z\u0000zw];[\u001bkg6[\r?O,\u001dWr\u001cn,8\u0014=mCO\u0002Cv=.|:UNR8@\n=؝\u001ax2Z\b\u001axrrFu%\u0015\\u<\u0019FҞTl\u000et5\u000bc\"Ef~Vk\u0002\".iW=TFWA9\u0003\"Y\u0018\u000f\"}粺# pN\u000e\\ؠAfYU[f[,z5TVWL/5u\u000by\u001c%XS(AD\u0014sDFuFnʯ\u001fJ\b\"\u0006\"\u0004\u001a{\u0014[I\u0013Q\tK\u001e{Y}lxΊ\u000e\u001b\u000fr\u000f\u001b(A;\"ţy =5\u0007;wLPkRr\u0011L\u000e\"\u0006RI`?㯖\u00120h\u000f5Rt\u0017\u001dׇ\u0003\u0002\u0004Q\u0016#\njVbvr \u001cw\u0015K>b56Gab\u0019\u000f3D\")\u001ev\f\u001b+K\u0016՜Īqvbp~\u000ec\f/,\tJoIQץ\r\u0012!|L\u0012\u0018Ak\u0011N~H/x1O\u001dp\nJAꚪ\u000e'нDYk8\u0000\fO>G<jK40Y*30\u001e+|\u0015bF|WO\u0000HT)MHa(:pKi?z<=Z߬\u0018|z/u\t!\u0010U\u001ekkW_Ί\rf\u000f'έ45Cbl) @/\u0012qDo\u001f\u0013_GI\u00149\u0007B\u001fM5D\u0004~D\u0016H&r4\u0006݌\u0004s\u0013:C'<1!\u0014\u0014\u0015é7\u0011ac+CP߁sG\u001c$ ZP\u0010ԁ<K\u0007L`ph䟗)\u0000\u0002\u00193`8\u0017eS5Q\u0015_nj[l6\u0001$/\u001b\u00008+_9ZC!Խ\r\u001b=GО\u0004\u0014AD\t#V\u000fmL\u00191p\u001f\nr^?>L|W<K\u0013d]9\u0018YJk\u0011\u0011PSǈ4\bz\u0011\u000fSZwC;fM\b[i[\u001ew0];b6ʗgiWa\u001f\u001fHD\u0004|-2f\u0007Zk\u0017TRϑ\u00109\u0018R\u001eO!\u000e\u0013&=Ď\r\u001b3 %'#gސY~Grav\u001b񓅰ҝS2)Nס(Uܾ\beA)Gi\"Z%Zw\u0018b\u001e'Eb\u0012Z.TTQ(&2#+pl]FIةU<\b#Հ(D\u00028kĶ_y*4nؿ452O-\u0011^H8\u0019Gn\u001d\u0011N.#\u001d>]Qc\ttlGo,\u0018\t\u001eq6\u0002d\u001f\u0004\b\u0007\f\u0007\u0017\u0001Q)T?x\u0003<чA\u000b\u001eוa(Ekk-\b.Ȗ\u0011ZS7t%\rB\t4l\u001fTfx[-2f< =#]\u0019yaDe ϑZSIsK\u001d1xӶ\u0003fl#j\r;\u0000/\u001fGo\u001eˊ?0D\u001e\u0011e\" c(jɻ\u000e\u0011k{)$\u001fgry3V\u001cpz'LQ\n\u0011HK=\u0004\n0͐--o\u0016ZZޏStfjH\u0014o(|![\u0007\u0002/\u0019fD-\u0018 {܊R\u000fad|/!\u0012S@]\u001f\t`/}~\u0012==w\u0000WRxRh\u001e\\6C=\u0017\u0013\u001eF^\u0004֏أD\u0014t͑q\\\u0001ޣ+~\u00024#?EN1-\u001c#K󀄢'A\u0005=#RI$\u001fWyΦZ\u001f\u0003\u0016a\u001c\u0019\u001e#ƭ\u0011>0PVw奌^K\u0011Wd\u001c)[{\n|\u001bģk\u0001\ry+ݽX\u0001BB{B1\u0014QRܨ\bBDGq\u00040vo\u0014_u̝^^C$\u0011ڪΈM:+g;ۗ#4QK\u000b׀\u0017 T6\u0004K%\u001biwD\bD\u000e5`6LpC2z0h\u001az\\z\"/S$_#jB=l*O\u0003\u0018{\u0001?\u001di3!er yE\u00197nk%@:\u0016*\u0000rݿ1A5pI21)\f@\n\u000f\u0015BW\u001b^\u001a\u00169J\u0018O]{MК4:ݰ\u0016e)uݢOBЛsy6\n\u001a_5jo;o\"C\f7.+\u001f.-?\u000fѧR\\(Xf!_{\u0000\u0015ڨY^=ReN\u0001\"ü3[9i)\u0012mEgUӇEjݪ+D\n\u000elmim\u000e+j \u0012*]<q\nEi\u001d\u0001\u001b\u000bB}FכIXC\u001c`M\u001er\u0018Θ`_65g,,\u000f{odu\u0007#\u00020\u0002`%Ξ6\u000f\u0004 \u0004)!)*\u0012Y\tT9\bBOvے%mI<\u0014n۲-G{ݖ\u0018r\u0006@^\u001a9wʺ\u001anf]\u000e@ug\u000fkyo-E14K;\u0006F2<w\bR\u0007>\u0007\u001agY\u0013&y\nҝd }/9\b\u0002xf37\u0010EI\u0017i0g\u001f.¨\f\u0010MxoI\u0017\u0012I+\\\u0002\u001aԚ8\u0003\u001e%; i:>:9\u0006v\ty8!\u0018I;(RM\u001a\u0014@ur@\u0010\u001a=À˖\u000f]tAN\u0013\u0000q߼TYo#>\u0019\u001e0IC.7zHCVl\f\u0010 +V\u0019\u0007D\u000e\u001bL^d(N>J(.+TS\\\b\u0015,g\u0007\r)G\u0002!\u001aJRKqܠ$E'\u0006LQZ&\u0007#^;E3[D<B\fN\u0006!|Pţi3rqZI0M1?NEf\u0017:,0I#$6:#j\u001f{pn8!\u0013o\u0002\u0010\u001fsq\u0018c^\u0014d\u0002a2N\u001asg KIT\f\u0007JUHD<\u0014\u000fZ<\nq~\u0003ޖ@\u0016L-{S\u0012U ZZ= \"\u0016^Q0#،\u0013\u0004s˨A+Qn\u00139M\u0002\u0017g@ }%&\u0017}ӂHny`Y5i\u0010sD1cvQy\r35tv&\u0019&1\u0010>#\u0014TLg\u0017+\\\rF9BMvo^zU)s_)^xwy\\~L\u001c-;\u0000Z\u001c0\u0007;7~\u0001C'c\u001f\u001c\u001d5~cќ\u0003x\u0006I&\u0012FcavI9\u0018AN\u001328\u0016\u0015A5U7vJ\bJH55\"_/O\u001f:\u0007\tQB\u0001&iZ\u0017% C̫q*]\u00166\u0016;^<\u0001Z]\u001bv\u0002Q\u000e\u001aYv2GC\u0003$\u0004B\u0000\u000bߍT+\\wq\u0016/8|pqz+`'\u000eNܒ-\u001bW,L s\u0015o\u001aq\u0017W\u0017\u001bT\u0017;\\C`F-pyv\t4uG\u00000\u0017\u001667\b%ħ!\u0018-(R \u0001MapS%\u0011ٙ\u001cWX@ä[y\u0011\u000f\u000b.{r\u0007gxa:0\u0016#\u0003I\u000bKkp-He\u001fi|\r]\"qjP7\u000eEnnVzYJ\u0006t;%ao;\u0004>\u00059MW\u001f%>\u0007\u0011\nCCH&qe\u001eK{א\t4,6\u0006v's,\u001f\n\u0019@F\u000f\u001c/!l\u000f#\u0006P̓_<\u0010dhێT\t/6rd<\u0012\u001b\u0007q]B6zt/\u0018Qk%\u0000r= ȃF&1\\\r_  D\u001c\u0002|A\u0002\u001b7(F\u00191K\t\"P]\\\u000b/\u000eZtU8viT(pbpA#Χo\u001aDФ>\u0014\u0017Au@ ]\\\u0015h\u0016(|mI\u000eHA/9\u0001و\u001bq/)q4$ǡ.\u0015^Z\u001f.r3X8\u0003\u0018\u001b>zǑ8˒\u000b\u000eԘ\f^\u0010\u0012EE),dg_-sQ%k\u0015B\u0003uH盇+QY\u0003\u001a\\҄\u0000\tn9ɓc=0\u00032Zz\u0004H,n+%1J0\u000eR\u0011fPR\\3\u0011O\u0012lҁdu2oP,+\u0006\u00128IHZY\u0017\u0011V-\u0004݀漄\u0001\u00198H\tA/\u0016\u0005\u000e8F<*\\d\u0006-Pky)991\u0012\u0013-\t)B\u001cL\u0017$\t8z5&p+InlE/~1\u001coΓ#WhJ\u000fb/4#j\r;\u000bf!A\u0017|\t\u0010h^\u00144\u0000'&1\n$c/WpEq.̚\fU*}\u0001^pz\u001c*v#F*EzP,ΐ̰ena&?֝5;h\u001f\u0003Hv\u0012+$H::\u0012p΍]|Р^D\u001aiLy4/\u000efb/ Gѕ\u0004\u00183E4\u0002\u0019\u0001WC\u0005Ts\u0018\fK/zQ3'>\\ލuLβu !M\\U\rJ\u0014\rzgਜVHX\t\u001f=8qȕ\u001bjs\u001f^N-I:`\u0012zD|\u000bG\u0019ކjbྻ\u001ayK_\u0010ફS`1*#3\u0010\u0007!\u001a\u0019\u001ef*w\u001f\u001e \bB<pq\u001fuC[,a\u0007XB$\f\u0017B0\u0016uYH\u0002V\u0005\baO3\t)\u0018_\u0018ˡ\u000f7|\u001d@G/E'5pQd\"s9C:f$#K\u000eDV%NG{zEU\u0012\u0010\rubΤ%Bjyvv2.\u0003oaaI8L~p?\u0011\u0011\"4)(V\u0002\u000eZ\u001b\u000fqzs\"Y*88\u0005vD'̲̏3KjR1q4s溹9;\tUsQ\u000bTp2͌M\nNEVn;\tM:\nY\\BCCBLw[nI\u0012ᝥ\"ĨF\b\u0017C-ޤ]'rlC\u0003&\u0011q\f'2jjʬv[\u0002ca$d\u0016!I\u0004[AF\u001e\u001eQު.Ț\u0016e\u0011.49^s.CR&Z{\u000e\n\u0002UN\u001cD/E\u0018t\fR\f:0ݘʲX\u000b|,ׁ͝9\r\u0005i2Y\u0002ԥ4wVS/gJzA\u001e\bܘ@B\u001eXb:h_뜹F4H1e<oRS?0*{pl''&J\u00187t 3)jf\u001eoNFK1J:\\k\u0019\u000b\rz9TClBF!{<JʣrU%\\I]\u0004g\u0017\r\t_s\t1F i2\u0017A2O]n6x&\njZ:͆ȁ_g\u0006\r\u0005⬳-A\u0003\u0004R\u0004\u000fVfl\u001cN\u0001Vf\r\bVD(=\u001bRb\u0016%\r~hj\u001a\u0011:\u0014.oCp\u000bZ\rI t\tv/ڨ\u0005\u0011E\u0012e,r\u000b\u001f8\u0018q.zd42F\u000eSXQP;Y\u0019w\r\u0002B\u0005%0\u0017?P4]\u0014XUk'\\\bEu\tq\u0019ߕ6Ď}Jzs9v\u0004I\u000e'K9}<ϥU\u0016¦o#\u001b2Z\u0019\u001eP6\u001a`ojS\u0011ƶ\u001e5ӡH6AVy&E'\u0014\u000eǩ(҅d\u000bQ\u0006#\u0016\\ĺIKEd+a\u0000W~\u0002>2\u0005؜i%~R\rn,\u000bL!N\t6V\u0010\u0018^\u0007j/}!\u001d\u0010\u0002\u0014Pd\u0014\u000b0~\u001c$+(\u0019[CH\u0019xk*\u0017^AMC 8 zO5Hb7\u0019H?D\u0003\"\\R{Ϥ\u00042<ؒ\u000bfMׄ2$ۉ*\r3C\"\u001e<uς>:\u00172\u001e>ev ,b$\n[\n\u0001xަQn(@v\u0015NQ'>Lio7p4Ã\t]s0\tG4I\u001dCj8uD\u000fT`xjc^^\u0014iL<}F7\"lh\u0003\u0010\u0012Ѥ\u0000\u001c֘Hqc\rmUZ\u00117C\u0019a$2\u0019|q\\k8\u001e#ʨ[\u0004^eӊ֢E$\u0007jt06C9\bRVsbˣ\u0019#[vp(P\u0002\f0^=vC&\u000fr/\u00043I {Dˠ\u00061\\rAJ\u0016.\t\u0001ܻ\u0012QqQj2*418\u0006T0gqF7\u000e\u0004&\u0014{aE\u0012\u0012n\t?|\\\u0017up\u0003쵲mҀ\u0017_JA*2\"C\u000e\u0000Eؑ\u001bvlpv3X\fLB\u0000r#\u001a\u0011!E\u0019\u0001E槹 \u0017(\u000bpxb|\u0019r4\u0004\u0002ӷ\u001b\f*Ũ Q{8& \u0004vtB\u001dU\t%R\rl4B\u0019P\u0003U\u0010M±\u00030\"%5Q\u0003*eF4*6ދ_\u0018\u0016ⷈi21Rl\u0007$\u0016!5v\u00025ȇ\u0000<.\u0002z\u000e\u0003?]~aST,\u001fIJCnl\u0003F\u0000X@P\u0002\u0016_Eѳf\b5LÁME\u0019+$.G\u0018\u001ac\u0006Q\u0007XE~\n\bbA}\u0000\u0016z\u0012\r\u001dl{.^,Emj%\u001c!ݴ8PZDHEߋ9H)P\u001b)ꎨx=)r:Pp͢`Jl9}O\fȲ>M7D!(\u001a\u0001Ӑ\u0017\brc`;V\u0015rE\u0007BO/Y\u0010\n\u0016W١T\rqϊ\bvp\nz_\u0018y\u0011c5{h\u001c=@P\u001bb&RyX{\u0005\u0017MRaɢ\f\"\u0018\u001b\u001fZb\u001e\u0005\th(NcN9q۳EQ癘,\u000b6l!\u0019<\\H~.r?q]\u0018H˸\u0010Ģ \u00104T0\u00011WgMFKf45B!ͦM\u00005_\u001eQD\u0016UgHMg5ڥ[wΎgo\u000f/.\u000eO}ѽN='s\u000f\u0017\u0007m7ޜ}+뎏\u001d~rq^\u000b\u001dqv$;yZ[?8_\u001f\u001e\u001d\u001f\u0017\u000f엗g\u000f_3_\u0014o\u000f>}`Lwz\u000f\u000frt\u0019m#}6^,1\r;wvp\u000e?\u0017\f杣{\u001f\u001c\u001f\u001c^L~p<t\u0016\u001e]zߡOo/}9\u0003\u0012\u0000v\u0001!\u0005;\n{)_Cww\u001f?zzG'gׇۯ6>\fDesIaW g8{o>\u0000\u001f\u000edN\biAC{\u000b@\u0004A؛|%~~:7\u001fHjɐ+\r`,,\u001e@\u001b$\u0002$ؗ<5>Q\u000e\u0010v\u0015;Iyʖ\u0016?-À\u0003LPG\u0016IJ+*,`4\u0016 [CQ\u001c1X6\u00128VQIG@7\u000fشן\u0000\\)65TV\u001c@kYg\u001dmq+`Ѿ\u001a\u0002\u0013xQ\u000e۵+\u0002Dř@_%'D\u0017O+\u00162\b78F\u00108\u0019$@\u0002\\9qǊ8xxQ\u0006ؖ\u0003%(V]\u000e\u0013OJ\nD+\u001b\u001d\u0001Ю0$YfBX{\u0013d\u0004X\u0004(,\u0001;ԮVp,J\u0003f\u0003.,bO\u0014+\u0014\u001bn\\r@\u00136\u000f\u001e YVq\u001bҾ|v\fG2;ET9\u000b\u0012\"z@\u001fZ\u0007FGq=]{aLvi\u0010\u0003\u000fj{ǖS۝:\"l\u0004\u0014LTO½7\u0010\u0001x:<+\u0002\u001clոӃiy<\u0019|W\fؖ}!\u0014c_e\tzם}\u0017\"\u0003O\u000b0K~hjϐ\u0012\u000f\t8\\%~'bx\u0004R\\G3\u000b\u0007W`wB\r 4~\u0001\b?q$ %V{>M5y%eHT\u001a\u0016;\u0006\"r`\u000b\\܂\b+bf92I7˞*0;1T\u00136\"\"iHUF\u000e\u0002'\u0014\u0003WNm:wIX.J\u0011\rѱ[aцpTd-Kv\u0006\u0004\bt@mR5@(!a:AB]\u0012(Y\u000b$\u0010$\u0016uӹ/ڞtI9M#|a\u0015hc?.d'\u0006.\u0012:G\u0004l&\u001b\u0002(\u000b\bE%\u0002aX-tUh5!# O\u001c'\u001deg4\u001bpa\u0015#^WG'\u0006ZͥL8@DƉ.\u001e\u001e6d\fZ\u0010\n#r\u000e#F:s\u0014Y\t\r\u000b;7{#lz銍\u0000#\u0003\u000e\u001b<d\u001b9\u0017gf+66z\u001c\u0017'yK`,4 :G(\u0002QB[g[g\u0006_\fX0)0%\u0014'D⎌KW?ɫlKئLD\u0006yN\u0016f0&y\n'\u0006(R\u0011\u0015\u000e\fR7HAub\u001a\u001d&0Rݔ\u0004_R<U38l\u001c77#u\r69tj\bQ+.p>9d\u0005\"6t{SDN\u0014'DM'FKƙRE\u0004K*чsSŦP\f\u0017\fG\u0018K\r\u0002m$\u0018&\u0006\"(\u0018ADLfT\u0012\u0007\u0006,\u001376nS\u0003rV.`zu[(\f~_Џ!wK>,^;%Sډ\u0016pMrvEM^1ai\n@b4\"v'\u001d>Aq\u0000\b^ׁi\u0000.?Yl\u001apwu`r&0^\u0014Wr2*\u0010~\"н\u0019B*>ڂvF\u001fMDɹv=]\n|Aåӵ:pa\u0011S\u0006ںR[g\r-EUgKa\u0000\nY}ePY*7KS؝>eQKdIC\u0012\u0007 \"\u0001ҁ9\u0016\u0003N\u0017٥.8zLu\rUeBIvWZz2r\u0010o3b\u0001\u0019I5ux\u001abߡhD`]M<\u000bwVUa\u0011f\u0013^q^(IA\u0007!\u0001ܸ>l?\u00173U|w\\^\u0016T`v!dx\u001c!.[vYQW\u0005~:\u0002``)qB2؝\u001eE\u00150Wc jV*\u0004Er'Sh\u0006p* z5BLBU\u001a\u0003k)̟^\u0007\u001a\u001d\u0003Ef'\u000f˖!\n+N\fM/\u0005\u001dϷYW\u0005F@6h0Ll<Sx\\=L9\u0017H8\u0017inf+ٛ\u0012R\u0003^34rxo2\tjˀ@8|\tu#\u0019\u001eDWY\u0003\u0004ȿS!e$HE6\u0011z\u001fL#I\"]_p9;JAB +\u0014KęM7v\"Ν~$gХOwvt,\u0016^ݚ֟l0>h\u001e;\u0019\u001b(w\f\u000e}'v2Nة\u0015e\b';1˦)7?\u001c\u001b\u000bNara<2\u0001{mwlj\u0006\n\u001dF]\tp\u000e\u000eps\u0017e^NJ|_Bh\u001cb䅑|\u0016Q%\u0010+V7X6A\f¡\u001b\u0004`e'eݵj$\u001b\r-g+'0[\rE\ftnA\u000f줦>_Gy}?I\u0018BΦ)\f0.\u001b3npIWb'\u0005#uԡn5)ٌ\u0013}\u0012k\u001b\u0015Fua$U3LTDX\u0019[>]\u001b&#g\u0015\u001cꨶ\u000eBi\u0018I]yq͸>K]\\˵\u0005uH]DP\u0013\u001e?[\u000b\u000eM2\u001fAj<J\rVdNEF\u000eݎ=ѐDItn?RZ\u001addz \u0002/ `ͱQhځ_s=KW#i|=%z,\u0011C{\u0006O))|@qi\u0005\u0002@D\"\u001cy^\\~|\u0015\u000b\\\bC\u0018\u0006\u0011e=S\u0019WpP+v#rD^*LK\u00135\u000fB\u0001vAyv\"t\f.\u0001]lVqݢT\u0005u\u0000W\u0003F\u0015S\u0000S3Y=LI\u0002,&Wԅߵ\u0011\u0006\u00043Q%*2\u0000C\u001b)q\r\b\"\u000f\u001e!ê\r\u001dSw6*\u000bT?.-G\u0002\u0002mo{\u0006\u001fDAZ6VǩurN-:Ѽf\fbuC.\u0016KD;\u001cԚIU#wCQ\u0018)\u0005\u000e|K\u0001p\u0002QOMlTV|*VW\u0019Y\u0006\u0017\u000b\u0002\u001cw[yt55\u001eur\u0012Hfhـ}άI|\u0015\u0018L,dt\u0014K\u0013(/=18\u0015m\u0001\ff}\u001cuZ\u001bSLrFԷ7b\u000b8n,\u001f̧MS\u0014L^\fH%M%7;X;LY9dH\n#P_\u0000D\u0005.\ty\fpEz\\5>=i$3/vEq1\u000b\u0003\u0005:+NN\u0016\u001d`\u00116+\u0006]G\u0011;mߙ}3\u00184yk\u000bo7;\u0015Bxۗ~zБ%#HTjn\f\u0004\u0011QJ\u0018\"{\u0011;I*kg{֞Tv\u0018Ku\u000f-MoE-kDɵHr\b7I\u001dCG\u0007\u0002w\b \u0003=\\D]FQk\u0013\u0019a\u0002\u0013E\u001a\u001e~Z\u0006Ut[A\u0017&0/B6&ɠVP<ڃ\u0012\u0007&Fx8hg:$jP\u001cK=aq$T!6bQ+|\u0005é\ba\u0006\u001d쪔S=\u001c!w\"\u000elA\u0003B\u0010 \u0014\u0006@'VE\u000bW\u0003!(VZ\u0002p\u0007 K0J\r=bUȣC2l\u0013Wm\u00020\u0016lQpĳ\u00199{V\u0002\u0000`\u0012\u0002km2̺`?p'2si&VqtbVI)\b:BT\u001a$D\tlUp\tK/H%Z\u001eBD@j|\u0007U]B(\u001b^\u0004ę\u00057\u0004'0\u001c{\u0000D\u0019䤑!\u0018\u001dq,\u0019'A\fR\nG/\u0005z\u000f+ub\u0018\u00129\u0007.Q\\ƙP'\u001cMYJNX&\bN&Ha*lK5/{\u0019\u0019;rl\u0001`@\u0007Hs@bC\u001f2n\u0001^4Jt ]HI\u0014 3n\u001b?\u0015msjm#\u0015#T{26\u000e` מh\u0017 \rbeI--q ^polp\fLBב\u0010\u0007i\u001fU(`x-3#M\\4Н\u0019@iy\u0018>$#\u0004;Θf\u001bف\"9\f)\\1\u0014`So;.q\u0006AǚI\u0017kSض\u0010&\u000b`eiTtkd\r\\7N\u000bN,\u0002L9\\k\u0003'|dcC\rzp\u0010ITgU\u0012-\\\u0011gWʏb\tE:JѦGP[\r\u0007}\u0005D\u0005Y܂p;Rmm\u00068jR:i\u000fohܔ\r\nendstream\rendobj\r26 0 obj\r<</Length 65429>>stream\r\n\\\u0018\u0017o7'\u0001_U\u001e[UQ\u0005\u000bXlw\bMaʍSj\u0000|F7j\t\u001av̽2\u0002:°ct!I\f\u0016;̓RG$\u00036_bTU\\~]\u000e\u0002F'Sdy?Ƈl[\u0004F(3\u0016\u0000\u000eb`MP\u0018S\u0004^,j\u0004iv4J\nk-\u000em2@\u0010,ll\u0018^k5gsWY*\bo\u0016į:_Q\u00108\u0000)d&SuPT\u001c]8@S7UD{\u0014\u001e٥^\u000f(77x/\bui\tqa\u0007\u001dfU%B0YEV#wQ\u0000/\u0001$\u0017T9'k藔\u000e;#EAn~r\u001a\u0018\r\u0018q$\u0019\u0013\n/\u0013Ylv\r{ T\u0002,\u0019Wc3e1\"5$38>\u001a}R1ps]\u001c\u0005o\u001a\u0013\u0018\u001c°T\u0012+޶2\u000f3b>k\u001cl\u0010ü\u0000c.L&\u0010m\\bvald\u0013\u0012s\u0006Cg\u0000ز4\u0016\u0000\u000b>8e!\u0004dDE@`Y{r~$%!N~_K \u0004\f=X\u0015v\u0001Zb0at ԰\rj\b\u0007\u0003VT`u\u0011&%q\u001bo\ru\u0011\u0019\u00149q\u0004\u0011*<Ľa0 ?,Lw\u0018z(WT]Ӕr̺\u0011gK2e2;\f\u0016:X\u000fZ@Ͱz(=z Xiw.b潿B#U\u0014Ϟ\f9\u0019eգpd^#FjTk=֧@\u001ev:rZ\u0015{̴A5D\u0017W\u0006~jHnNcWX\u0007wA\u0015d-\u001b\u000b׭=\\\u0006\bc\t6*\u0007s}\rEbde!\u001bw\u0017f\rù\u0010ub#gb'[F۝Td\u0005A6֝=\b5\u0007\u0019\u0003\rVbN]W1Pf@`D~yD5SaҀIY!ț&\u0007B5\"D*dE\u000f\u001a\u0014r_]0}W\u0003X\u0017K{g\u001f\u0004&=\u0002\u001cI4\u0005\u0013r\u0010\u0000lB%Ɯl\u0015\u001a΂{F\fsdOlt\u001eì\u0002q\tt\u0010\t.;A>\u0002\u0014Ǆt2\u0015y\u001f=^C\u0002#z\\\u0000*xs\r#\u0014\u0001C,7@YM\u0002k=\u0013eQ$\u0016Y4 /\u001d#IuxSk<j!b04!X2oW{*v2\u000b\tG\u0011ݯ`}j\u0005.\u0002qo\u0011s)_\ts#bt\"217@-\u0012ֆnYE명>Z*\u000bE\u0015P\n(8ABI<\\c\tDjW!\u0018oB\"\n4:5IT`\u001eGW><7'\u0011L\u0015x\u0000kM=\u0001:\tb\u0012+t*Y\u0013\n뎍TC\u0017}5?GKҳOj5\u0004ȿD-UI\u0015YbA\u001d\u0012$tW!1\u0004`*&ڮ\u0000p\u0003p1;z\"'.\u0010\u0012Iٵ\u0001R(\u000f~ĢT(6ejIM0g$@n\\%6sQ\u001b.K>e?\u0006/FЁ>3\u0012F>B҈\u0016\u0010\u0019Vj[yc<d\u0013YNG\bfCMt6_\u00116\rP[Lga{Ӹ\r%k'ﮋm\u001ajRd\u001fm=f;gYizY3\u0006؂^ EPΦ\tM;d*7>H<!*\n$[\u0015jEϥ]f%aD2nNMD=\u000f`\u0014ht?L+\u0017cʠ}ҳnCThu\f\u0013\u0019\u0006[tv\u0017\u000eBK\u000b\u001cȤ#$KCi5=\u0013xh3&\u00176\f6\u00059ۭ\"2`\b3\u0015A\u00005i~\u001bx3H~\u001fy\u0015\u000ecSF\u0011\u0015]\u0014 \u000e\u0013o4RRCjg0~Q4vl\u001b3I&ply)POD\f&1^\u001b%Ľ=l):MEi4}\nln!L4TшM\u001a'g$|Qq\u0011,61wG;Ǉ*ĈWl@e,CP\u0016͡9sO-״\f.\fQ\u0011\u00045\u0013\u001a\u0003\u0007Muzú57\u0018\n\u001b>1YIM\u0018\u0016,K0ElaG\u001eb:#u\u0016s\u0002\u0019d\u001d#@G}u\nJ6@miX>$;Z,T!~<5ZSL#>I\u000e{O\u001a;-ɰ\ruLG}\u001b\u0013sٓZg,\u0018;ktD\u000e#X\"\u000e\u0016ĵ>{K_4\u0004<zQ譃T8B-O(%'\u0011`\u001c\u000bu\u000e\u0000SÄk\u0005\u000b_(\u0002^TE\u001c+G'9!~S\u0003x(vU`\u0014\u001c]Pyb\u0010Y\u0019;{\u000ev;BR\u001c3CW`+`\u0006ۋnOS\u0017/\fV\u0016QDR#HAD(;\"x4PRo?\u001e\u0007ꧦ1뙐Șdʉ\nlC(ΎΩ\u0014]\u001f̲*g:٢\u0016\u0006j0Z\u001bG\u0013Rjm\u00128\u0004\u001ffzzjY8D͵\bƂ\u0013q`\\в=Ķ\u001clęAs\u0004xhZuY$;s&<\rg-\u000fJی\u0005\rk+\u001bYѦSl^oja,6r>{E9[D%v\u0000\f}\u0006˝\u001cz\u0000SQ\u0010e=&\u0018Oʮ\u0010G%f2m}GrLi*I\u0010\u0000P૭U۝:{~|ߏQVPa,ɨT}:&΃\u000b\u0016ҵ<M{CbU\u001elY\u001e%p|7ek,\u0019֞T\u0019V\u0006T\u0019\n\u001aNM\u0015\\\u000fݴZ\nK؀Ad\u000eaE.#\u0002<NGdr2`JƻQ\u0000u4ݛ(V4y]bzU\u0003\u001dؔ{\":_\u0019޺+F\u001e\u0006>\u0019$]qO&Xwp4ZS(@\u0001k\u0003\t\u0019n\u0006u`/-m`@,w&w]\u0012p\u0012c8\u0015Ǩo\u0002\u00184}p 'f\u001aF\"lgIP\u000f\",&+M`ˢ\u0013`\\\tWt[ă!oҬ$>\u001d-u~1>vË#(\u0016oۊ`\u0011\bX'\fҢDsd\u000fViě\rѲ\bѮSh1q\\'w\u001cmM\u0012eS\u0005^0]&u\u000e>GKO\u000fDChe4EM\fT\u001b?99\u0011e\u0017 \u0005\u0019|4\u000b8\"y;nzTXL\\Ơ:\u0012fa67yIc1D~rP8\u000fm\u001cËĊhQ)AO=r ac(އM^UL:\u0001\"\u0019\u0012>\u001fMsz\u0002iZ\u00142$\u0001V\u0002=ǲ\u0011:[S\"r;\u0012F5\u000e-Eݶ\b+6@4&I\u0012HX\u001dŏ^{tH\u0001\u001c))@8\u0019$T˂``ٲ$a\"\tTD\b~hQ\\\u001e\u0003\u0016\u0012|\u0010bڥ\u0011ɵhV6LG[:\u0001^!<\u0010g-:}8LJ)s\bUetsnWP\u0016xϷcrji\u0013&t\u0016͌\u0015h\u0011Eeg\fC\u0012Sww@1WeK\u0013\u0011R_'[m/Dnd8w⓷\rBq1xyG^\u0010R\nTw;\u000360t)5z<\u0004cØS$\u001eL\u0004*\u001d\u001a\u001a>씃a~\u0001\u0011Cbh魐GVE\u000f7g\\\u000e\u0015`2UbMM*[AByX\rB(o6,ad̅\u0019\u000e#;L2\b:z\u0000\u0007#\\%JGN=L2Q$fW2P'o\u0011S\u001b\u0013&TJ\u000b5\u000e% jsd\tB@gby5°f\u0014c\u001a1͝f,vG4:jSj(\u000e\u0001LЀ>&j\u0011\u0006gW>\u000e>[\u001c~U$=_jH|ϭƎ#BMGRd'R)L\u0007\u0018̪G\u0019B]#\u001b\u00072\f\u000fl\u001e{\u0006\b5>\u0014GxsW\u0012\u0004fY^e\u0015\"΢(3S$?zT\u0004kQi\\\u001e\u001eGKB\n\u0011\f\"(\u0000B<0j\u0016xȪi;賃D.XZ\u0018\u0003\u0005cQ\u0005]Jg-j8\u0013 7͒ݭ㹳\u001f\u0012\u0013TW9EJq\u0002,ĦEex\rR;ꯛ\u00054h\u0006\u001f\n7sJb\u00129zGQ\u0002Ian$O\u0016sҥ4-l\u0017ΚF2;.G\rMA\\ݱQ|1\u000f\u0011xѢgeI\b;\u0015\u0002\u0001\u001c˲NC\n\u001e:g\u001d\u0001Q,Η.H{G\u001eL;7\u0000~\u0015JZ%NWh쁠k\u001aOP\u0011szέF!g?QB<\\|\u001f\u00178yzQhy>^T\u0000%Hp\u001aq=p ־析aZ8-&N8Н9\u0011,69V\u001b`v\\:@g\u0018rW*1\t\u0017\u0012B>\u0002|\u0016㍍ew_Qnf9JRn9J\r] \nX̞S\u0001^+ZB\u0004[\u0014\u0014ckn2-K>y֯:\u001eŮ>bΪ0\tw\u0001Sٺu\u0001Wل\u0016wcA|\u0000I$\u0011|Ϭ(ޛlݦ{`\u0011ZTgQq\u0010\u0005z<$\u001d2\tPW\u000fvꥮRNJ\u0012ja+z\u0016r\nѿp3rk;E4s\\\u001dG|d'zHrʲ2]\u001c:o{\u001c:\u001a\rwl\u001f\u000e3e&Z\u0000\u0018o\u0007MEh#TcD\u000e\u000f*-<nm&\u0013d3dUG\u001c'\u0017IM6cLq(S(3\u001b&$U&hL=oKG&HafCO8%xV\u0019\u0002~ڢ\u0019ڎp_\u0002j\u0013z\u000bɨX\u0010\u0015D@jW-\u00009p|\u000e\u0010\u000bQC\u001fz3QR\u0003'\u0019;5Fx4<ji\f\f>KC?(iaZa唈{&4I'I̡YTP\u000f\u001d{`\u001a\u000e,S19YiR3\u0003\r=QCN\u000e2%Ƀe% 3U`\u000f\r&\u0005:\"D&\u0016ٰ4\ff7^\t\u0014s'ta.D\fm$\u0010W4j+[\u001bVrgPSf_-s,\u0003NмsI:\u001e\u0007\u001dv<\u0015P&{=iWJ\u0017\u0012z :wՐMX!%Sb<,u\"\u0014\u0001ĲA\u001aW\"z\u00128?T+Ȳ6\u0007iLנYx`|\u0006\u001c\u000fB~G\u0010\u001aj+Zg𔌹eM\tZ ;\u000bD_`zH~\u0018tDK\u001cR@ʃ\u0019}HI\u001d K\u001cWB\u0016Ȋ\"$X:\u000fhbSHl%Cdi5\u0006\u000e\u0000.:\tYܱ)\u0013\u000fx;m\t,K\u0012\"_m\u001eS\u0003Pd\"s~i\u001f>\tA@NCը+D:d\u001c\\\u000fI&\u001b\u0002ZpF# \u0017\u0003\u001byص\u0011bOk#˅-*\u0018bÝ\u001f׫\n4;=S6is!έ\u001e&6.~Y\u001a\u001blo=)9sٙkveht\u000eMcu\rN\u00194\u001fVlyyOU|>X\"oCjO>\u0001WuٜJևM\u001c&\u0001\\=VNw\bp\u001bL\u001d@BR\u0007Ɖ\u0011\nMp[\b{FGqV\\21\n騋DK)a0\u0005R$1'E\u0015\u0017\u0018bSok4HVOR3X\u001d\u0018gH\u0010jY)\u0018Tהyy#q߫ˀ2\u0018Ffa\u001fZDJ+~#*^t/bMݫ:\u0010<\u001bmݑPz$3\t>a\u0012j4\u00069Y\u0011\u001bmX%\u0019Hj\b\u001d\b'Dg!l\u001e\u000b^&:>Iֱ,,h9F,t\u001eo\u0019\u00181\u0002Ǝca\u0001itj\u001cV]\\yh\u0019n\u0005h\u0011\u0006\b9m\u0012rU\u001f\u0001\u0017Jr5\u00197{\\oaJ٬\f7\u000f\u001dr9\r@cԺp:\u0002\u0003pwu5X\u0016,Ma)=4\tc?1xHf_<$)ruY\u001f3!^\u0014\u0015n0je2/Ma\tck\u001ay2F\u0017$\u001fK\rw5\u00001Ѳ\u0005B0\u001b￞V\nzu,JR\u001a{4v2ZA\u0012\u0001zX+\u0015g\u0010]L\u0003\u001e_}q\u0000\u001b<f\u000f\u0016\u00170MhDB'NȲҌ.ɘxi`y/z\u000enm\f5\u0015EՂs\u0014h\u0019\\G\u0013\u001bh#\u001e6\u0003q,0?im^\n\u0007\u0006Ó\u0011l̟\u0004\u0015Y/']Fh\u0001\u0003s\u0000\u0014|e\u0005U%\u0001Lȓ\u0004\u001egy\u0016\u0010zƣa\u0013rbϹԾ\u0005\u0018Ԫ+/ϡ_\u0002:\u001eI2$HQj\u000fZ\u001cX\u0014e6\u0007;:C.]U12i\u0016fk6:a4UQƦ\u0006\"OOVr<\\u\b%?汃!<l\u0019\u000fkh@ŁkO\\t}oy:Cl5W'\u001c\u0005\u0005\u0006`u\u001eSJ6X\u0011x'$O|I!c\u0010σ$FNq].\u0019pa\tr/-CMl4(tLGόla,I'L-f*ee.h\u0005;X{̰OcD`\u0000%$@-Œv\u00144-l\u0016h:%C2)VX\r*WcKVw\u0015\u001cKɧISq5\u0015eR\"4۷qYS*y\nt=%U&\b]i~X3\u0012<\u0007svT\u0003\t\u0013uD*C*?v_I=_\u001f\u000e\u001bν\u0010\u0005~l\u0000~\\\u0016\u0018{?V̯\u0013w4\u001b.\u0019g\u0019ji\u0003\u0013\u00036cqF\u001dmU䑹-U\u0011,H~k\u000eV\u0006i[Cd˪b9YZW\nF\u0000jw&0\u0004\r`Ec\u0016w\u001bgYZwo`S\u001f]{Ϫ\u0006_]h0#\u000b+}ƺ1s/&`\u000bs؝\u0004YoTm\u0012y:^UZYKk#|a\u0003HcV_ b\u001dl>\u0019+\u0015jq]\u001b`+`<r*dc8ӊ\u00193󽮞Vϥְ;Y}y-.v\u0001Wg&Ϊqj&\r~\u0014\u000b&Ҵ\u0014Rr^Im\u001f;Lhˣ­n~R\u0000F}\u001eݛ#/{Ŷ<WG5KC\u000f\u001d[_(1^Һ\n\\:quxwVѰTB\u0000\u0015sj%4B\u000f^fI>%Ìoʪl\u0013ss^#&\u00173x\u000b}\u0000g<1/@\u000e\u00146{G7^w\u001f?zB\u001e~zt:\u000fG'g\f\u0011ׇ\u000b?>C|tW g37ޛ\u000f~@,\r\t\u000eCȨNC+\u0017s7{AyEș&{+\u0007~\u001d&^\u000fxCt\r|ĺa\u0019%[q\u0019\b\u000f$[I nx-Z?сP|(dF%Q/E\u001a-C6~kq벲\u0010\u0019n:\r,~\u001b\u0002W9\b\u000fl\u0019:O\u0005J\u0010\u0013\u0013\u0007DE=uI;L\u0012:V<J?U$$\r\u000f\u001e\u001d\nm\f\u0012\u001e0DBw9\u0012\u0010\n|](\u0003:Ip.=SKo\u001dD\u0006\u0019~\u0015<!n#zaj&Z\b\u0003\u0005D\u000el\u00194\r&\u0019`l%\\Q۲yɖ\b_̧{j=L\b,&M\u0011%B\u0015w5D㭸zQZ4,6%_<Yn(Co&q\\;\u0019et\u000f-%U\r\u00014-Lɢ$&.Y<EQV,k\u0013I%kygV\r%|P<mp!92D{Rʊ\u0005ώ0Ƨ{j\u000f^W\u001a\u000f\u0013\u0011-&!+\u000f,;G*JOb$+n;O3!2Yk^f\\Z@\u0015R<PCUzKΫp2w\u0003k[7._ꭚeBoLz`h\bxw7\u001e_KOXÚ `4Oe_l B98\u0014YȼͪI\u000fb_\u001e=y@h~7݋oV.\u0013~\u0014\r>C^xKrWFI\u0000u&Pϗ-yqɗoƕ{9!X֍\u001a\"\u0012|ys5Ձ# geO-7.=aBLZޖ)ٛfB\u000292NH,l$64\fF^&LW\rW}7K4;Ǌ%LS}oV.ZPB`AD-].Z~\u0012c\u0012vw(ś7\u001b\u000f\u001e\u001dPV{WG}!~\u0013\u00069{GG\u0007\u0004tOOO\u001d\u0003Bӛo/>?|y\u001f>>#}k|Sy❣\u0017>>yb'&q\u001f}\u0002/\u0007^̿7'$`o.\u001f\u001e\u001do\u0012O>ɭҹ,.G=?\t}>ߴ\"uu.eq2f):w~&.p\"7'qU/YܸO\u000ewN\u001e=:x1d9\u001f\u001a\u00075.bq;N \u001bemڪ><{|~p\u0007G\u0007k-߯\\\u000bh\u0011\u0017\u001bt>ÃgOltݞ[\"R}vt\nVWK7Xaqi'L\u00157W_߻\u0007:@\r?./ѧ\u000f6N\bZF\"'~Of*/\u000e\tV9e:\u0006ꦟ\u0013\u000e\u001eV;j[t3pnӳvN7^;]Gj7F\"td\u0005U}m\u0016\nf*r\u000e\u000f\u0016\u0016\u0007\u0007O\u001e\u001f?z>3]\"?8-Z>q%˚w\u001eoFp+\u0015\u0005\u0015fq\u0007\u0007чM[磇Gka츐%߼St:D#b|g\u0005~M[Z+X\\\u0018?q\noa\u0012sEӿE_Xnɤst|ik>?<9-j]S_ѣӻϏ-s}|i'VֲOױRwܨ}|\u0001_<nyͅM\f7zf\u0019m5_ª4PWҒuc??xprx=xh:\u001f \u001f?\u0000\u0012tuV\u0014o\u0010__Xu^a\u0016\u0016\u0006Y`dѫL$?b6\u0017͛;<t}j\u0010|~!\f~w\u0018\t؀)#OU|+N,C&\u000bY=\u001b\u0015w/oNr֡uo\u001d[YЇ;\u001d\u000b֡\u0011+:oC=ue\u0013~'uoO\u001e?:C :t3>#TUƭU\u001c7g[V(i8n\u0015ǍZg}ow-\"5G}'GgǇ\u0017:?ӫ<[t[N/gr+\u000fiFNu,\u001bU,I3ytx\u0003s:xx-OH,\u0018I\u0019\\_j}#\u0017~%k\\GkzY\fl..gIn\u0014{iwc]ZʒfLj:[iU[m7ǰ\u0011\u001f><<x|5mMj[֤5mMj[[5\u0001MLjj_c֤5b)W\u001fP\rme^^\">m]=;èmw~\r<յn$gh L㚝ѶdK2mKF|)\u0010םy&e\b\u0014oKH^i3k\u0015Y֞y9K;fԝYnLݙ㣋\u000fҶn(V6Z^x͙-O~%x\u001e\rוo\u0004_/Zpא:n\u0006Oց{ƌ}sqw[\u0003n[\u0003\u0003ր\u001apWg\u0006ܶ\u001cFӄ\u0015F6Sx\u0016x\u000e?\t\u0012qm[׹]Wmq=NZъ\u001eI%\u0018If\b7Vl|ó/\u0017\u0019qt\u001b?k\u001c\nڳqNZoM+onܚ\u0007=߬0W&\n\u0015\nBNhA)`&盇Ѳ\u0007%\u0014ꚶ\u0002\u0016.onOWፊ?ͱ۸ӛ@@1.\u0018Ћm|K\u0014qqm6\u001e\\\u0003/^zՏat\u001b`K݀)\u001dgG7hC\u001c\u001a\u0016ojZZٰ??/N\rAwZ+\\P\u000f\u000e[\u0005].[$x\bD\u0004n6hax{\u0007۰\u0015xީC36-`ldZ2nt\u0003l\t\u001b0W>jÌ\u0002\u001f[1\u0007l[^zy3Eŭzy\u0003z˵VU/7k[UW:zU/z\u0010xɜvE\b1\u001aG6<6`s9\u0001a\u001b\u001b5ެ{f\u001dܘ\"&B\u001e6T=q^I,6ԶpMm=>;{n7y\tƺݽopnTqOZ\u001fk&\u0007G\u0017ag=؊UkMS맭qуg>\u0003i_ӱpcJW\"\"\\(HgUp$G&_ג]:6K+QOXF.r-q[E[f@6T\\Zko1k9u뭠\b[9sm\u0019\rY\f\u0013\u000f2دzn\u0005g&m&|^,\u0012հo3\u0005n\u0017-!V~e`U_Βaλ\u0019U:mUMXV\u0017^\u0015{˓_\tTq\u0003xu\u001b*n\u001c_~\u0015\rgF\u0015Ϙo\u001enpܨ6x:<\u001f\u001f\u001f\u001e\u0018D9}|O\u000e7Z2\u0016\u001f\u001e\u001do\u001aO>ɭV3YR?tÿg2cwu\u000bKY\\\fY\u000b|pgGk\u00007@\u001a~ZtCR3ۧ=ꍿm'O\u001b{ޥ<:詮\u0019?q\u0006謹:d:7\\x*-\u0006\\\u0001m&Ź7s\"܌wng_,\u001bc_ܺyyc8}Ac\u00122(QUwʯ֭S\\kҕȑG|}|z\u0017c&7g븓\u0016xDh\f\t_\u0016\u0002\u0011\u001bx;e6̶1+nK\u0012_8\"^\u00076Wb\u001eN_Ӷfm~̍2o--&v\bF\tx\u0001d\u0011MmS\rYKZz_şC[oFKN[Rݪz?|pv|s\t7BEtV-ԗb-_),\"z\u001f=85lySb\u001c4ĵ7&>-MT.~k:\u0019K7&І͎\u0004ۖ\u0002cZ'r[\tѕ\u0000DW\u0012\u00062\u0001nC|^O$y\\G\u000f\u000f\u000eO\u000eO/BXOw\u001f쟞\u001e\u001exx|x+µ\u0000KkY7|o㘺r\u001bH.(x%|0\u0017u\u0016hu\rZݜ pp۞\u0011oyfuz6cAR:˺Y5ƺB?ܟkl);\u001crR?=:ұHnߕxuOT=w\u000bkZ<'v]\f+:B\u0016yO6n燬-ʾ5T~Ӿ\u001aN\u000fi7.dq_k[^ǫ8^o,c\u0019l4d\u0013\nu\u000eLWt\\GW\f\u0013oC&e\u0011K8۴\f쟳\u0010w\u001dik{R\rX\u001b\u001bdZ˾\\zgs޺ȥ\u0019ֲn\u0010qhڰ\\2ibdtsC]LVxm\u000engZ˺9ln=d\u001b\u0001G]l71vV.ݜإX͉]Z\u000b\u0007\u0019m-]:Kk-.W*vi=9f.m]h7ǅvp;]hk-\u0006XBV|7+|<\u001cl\u0005\u001fφUGګVo]8Wzz\u00054oLx˪ſ_$y[:ts|x6\u001a\u001em\u001c6)S7fsq\u000e/ԋOt\u0013=~ԛ\u001cy6G?*\u001b\u000eR9e__\r{86\u0016YJmuۨ7A7]DojLS,V9*[tnӭrJ(_7\u0006qn╺U\u001bUeO)^mfӰ2nL0\u001b=XþW7c`R-U\u0011T1o*^*9[x3\u0006dq+,nd?[[aqK\u0016o1YJ[x=JJ_#e$f\u0015>\u0011\u000b\u0012WK\fu5R9:\u001b\u000b&}5\u000bݶٶy\u000bpuЫ\u001blbߘÓ\u001b3ub\r7s\u0006!o+\\MB\tB7R۶K)\u0014F/ፈ\u0014_.F\n~bfٜ˿7_E5-n\u001aUٰ\u001b/?}w]@ݪf{Ӯ\u0017uӾp;cX\u0002N?a.h;w\u0014~\u0017߼\u001f8Qώi_7_\u001ffo03_{lww}is>ǧJ\u0006>{_av\u0007^0\fivǹ\t>_{vgg\u0018vOwi;~ʇ2\u0013~VQ?\u0007<?sNkmh]~kOxz\u0006w#y՞ѿԟ`fӅ`}'Ou'gѿsyП:n\u001a\u0006z}uN'ˬ\u000e\r&i#Ïs:3|\"\u0019~W\u0017C\u000f\u0018'ƏNq\u001d>E!1i\u000e8;\rHz\t.MCz],~\u0015鍍\u001e(-G'˿a\u000bB={^>{\u0019\u0007ޥ\u001b_kaPe\u001a??\u0015%NuIݱC%l\u0012D۝ܪ?:\u001eH\"88m\u0011q>S.rD\n#\u0012=eqi%\"q_HOUTݛC$£o#w1۾qx\u0018\u0011\u00011\u000f|\u001e1gg\u000f||ʑq/-\u000f\u0003\b.Y^\f\u0018gN\u0012aѼc\u0000/\u0006h\u001f\u001e\u001f\u001d\u001c~xLt\u000e2Lf>8\u0007矐,\u001cH&8=ܦ7ޜ}+S֧\fk%\u000f\u0007՟<~=5\"n'\u0005\"#B}\u0019\u001c+;΃\u001b!\f\u0006\u0018[oL~yg2[vu:EO+\r4l\u0015\u0017ϕ7{k \u0013K\u0018i|Km;.4.Ɲ\u0012+\u0019\u000e9[\bMoI!Ś\u0019C\"va'Vbt^sb]>Zfo]]\u000f?9;?ee>>=ԇ\u0017\u001f\u001f\u001bg2ج/oj\t\u001boD6\nZ\u000f\u0017E+~՝V92d#`%aw\u000f\u0016\u0000j\f\u0001>T~\"{\"\u0001NDNhYLqN@&:=\u0002\u0014̥@\u0000\b$\b\u0011 {z@~=!\u001fB\u001c!7\u0010%#PJ\u0006۩~NY\u0015Iif~f\u0017\u0004!\u001c9\u001a*s?H\u0019䓸Xq:\u0000/'V\u0013JlӇB\u0002E;Ł\u0012bvVЏC\u0013}H`f~UX'UwB\u0010h\u0011!\u0015\u0000rt\u0010>9 u\u001a+`\u001fң\u0018\b\u0010KI\f 8\u00074L]^vJ \u0012hIW_hNw*\u0016tw&\u0018\u000eM=\u001609қ~\b\n#\u0012\u001aB$ɁΞ\u0012.v*\u0005^S<pu%_\u0015\u001aİh[}\u001bZCkt\u0007l\n!M$L t%)І\u0014cm<ѝ\u0014Ijy(\u000e3I'Ob\u0010ht\u000e\u001f3\u0000,\u0010Ov°\u001aiO:\f\u0018i\b\u0019DZE|V?ttt\"-eCVa\u0001&\u001fpϫTB(\u0016\u0019r:\u001d\tY \u0018Rq=\u0001m˅6=\u0001Z!ܕ>B(\u0005}p@\u0004#l|bahcvt\u000e\u0018#Ѿƹh:\b\u0000tc]\bGjD&Ty+>\u0010ۡ;_K|D\u0018\u0010sh\fH$\u001e\u0002SF\u0004k|V2@'V\u0014\u0002\u0001͟\"\r]UHw~r:IOs\u00195ke\u000e%ҿtj\u000e]+}%\u0016teވ\u0006bC\u001a\u0000)k$\u001a\u0010$@\u0001=N.cY\u001aJ>Th\u0019\u001f\n!\u0010Js`.;\u0007}5\u0004B\u0018F ЈHo\u0010;W\u0003\u0017aVv*QE\u001909\b-\n9*ښ#`>U#\u00120ny8=\u0013P~$\fU0\b_K\u001b~bcY:=-AWdPLd\u000eCW\u001b\u0000پ\u0016P\u0006[饳X<0\b%\u0002]J҄}A\u000b]@ƃ2x\u0014\u0006Q\u0014aB-V\u001fpM;᯳\b\u0001\"I\"\f:iձ0jB $\u0000ΡH\u0015\u00108zi\u001c4B9CL`z8\u0015\u0001\u000fc\u0001Cg}Ф\b2\u000eI:tCl@\u0012 $A!RE+J`\u0007\u0019S\u000eGu\u000eB6\u0001|E\u00147UR\u0019B\u0006h\u0002Ms5dLbG\u0019fi\u0003!?(\u001c+|<\u0013aA\u0017t2\u0019\u0010\t\u001aXH\u0006D\u001290!\u0018.CDaG\"\t\u0006\\P\u0003AA\u00042\u001a7\u0012v X\u001431\tP\u0016\f\"\u0001@2R`Au$:\u001cI\u00053/x\"~ %b ZwqeO_Ѕ\"U&&EUI4azzH{\u0015A#\n\u0014$9V%\u0010,\u000b\u0011$\f5\u0011\u0016E\u001e\u001d}A\u0003Y\u001f.\u001fˉK\u0014H*]j,(\u0012ծ\u0014\u000bhQuy\fHP\u0014}\u0001\"\u0013}\u00053\u0007<\u000bGt9@T\u0018&;@l\u0002 ٙ\t$\u0012i8y!& k\u0003(\u0001\u001d\u0003Io*qV\u00064\u001d2c\u000evB\r \u001e2\be(U$=~$`\u001b%ՀfL\u0014v\u0012Jɛ9\u001bK9\u0004\t\u0012 x\u001b\u0002c\u0013\b\u0004ք\f\u0014*iY2Q\u001b\b\u0000n\u0004LRU|ݬ^b!\u0018r%6\u0012\u0017\u0013WA\r!)V+0h\u000b\u0015\"k! \u0013,lzqKL\u00162e$=9\"\u000e\u0004hS6\u000e\u0010*у\u0005`Z}V\u0004^.V\u0006\bK\u0001\u001bb:{*N<Pd\u0016C1}\nQĻ\u0000\u0001ny-\u0003̓/Q\u0001l͉9Wяc\u0013:\fc\u00122;$x=0\u000f̭\u000fB \u001b\u0019VoR~\u0006w\u000ers#\u0013O\u00198\u0010XaM\u0004\u0002|\u00020xac\u0015\u001e?\u0015cnJ\f\nQeH,P6,I&\u00054\u0002D\fpA'c\u0005\u001e\t@*\u001dt9A7Af.\n7\"A1 \u0006H!>2y\b6C$3K!tAY\u0013\u0013\u0000@Le\u0012f7\u0002gC\u0001y\u0015>\u0017\u0000BE(\u001a\bs\u0004i4\u0001\u0017\u0001(\u0002CaxU\u001eg#?\u0012\u001f\u0002\u000brG\f\u001d2\u0001cDܘ\u0003KDJ\u0006c\"\u0018F3\\D'I\nrI\u0002Sɐ`r4*\u00029\u001c\u0005A8J'@B/@{%Y\u0006 zEd!1$\u0014zK\b\u000fÐ@v+jBU\u0010~\u0012QH\rm𩱦z':=H\u0005T/#Nw&\u0012\r&%!\biF;6=x,5d:'H%\u0001\u0005+\\\b\u00031.\b[s\u00042P<\u0013; тL\u0006O\bD\u000bgkT`b\u0003>\u0011ĸ\tPa!%v8{k\u000b\u0004;\u001e5;\u0011#$X\rr÷ڭ\u0002Ѥ3Ѹ²Œ(*L$D\u0000Q֝d%b#thL@T/\u0013\u0012\u000f=zAelἮžB\u0002[,NXNJ\u0010f{-\u0005Pb\u0016!E\u0004~\u0005H%Q$,'Cԁ$#b.\u0003D\u001cw\u000e(zc!qnz \u0018%-{\u000f\u0001!\u0007HXMzY\u0000\u001b7\u0003a#^1B\u0017oZg&\u0013]b6\u001aK\u000b\u0000\u0013efٝC\tIeLOЍÌEn~+\u0013p}b,\u0007J\b$y@\u0000y\u0012ΤlR\u0012A\u0010ĎYhz6bQE\u0006\t\u001d\u0003\t(f\u0005x7F\u000frJZ\u0012NF0\u0013)UY\u0018 vH=TG\u0013i_\u0006FG*h,\u0001\n1\fPza+,WFJ\rىhn&\r]\u0013B l\u0018\u0015\u0015ȸ+ݛ7p_\u000eóvY?\u000b^lNtm|\u001f/ϟ\u001c\u00036]Za|v8$\"\rUXb\\#=\u001dv9mFSt5\u0012\t\u0014ۗ\b=\"ܢ\u0014l=\u001fpg\u0015#F<D+!gjo\u001d}xi\u0001:HՃY\b/~__\u001awU\u0010\u001f\u0011oӈq'\u0002o\u0019 >ʟFl+>هV'FnR\u0005\u0007CáI\u001a#W?__\u0002y\u0006\u000fCyJ\u0014;=BT\u0007;\u000ba-äO$\"X&de\u0006H&eQ+޼{\u0015IG\u0014X|\u000f\u0013c61~O|_\u001a4_ߜ'\u001dn<[7=[tyӃ;A=X=~z\u0013PTٝ\"\r|eҿ]ǰ=ʗz\u0018=\u0010OMGXm\u0013\u0010zا\u0015!tR^\u000eWO'D_Ř\u001fMH\u0018\u001bV\u00172\u0019$dU:Rk%\\\u0013<ő\u0012\u0018\"\u0007!n =%{Bk$\u001c@%w@\u00170\u0004\u0011D`_K@f\u001aDnbuRv|c^%į?~`\u001fy՗3vwSȩV,~-k~拣ӯ\u0010s\u000b?ysv\u0007s\u0011Yh&%o\f4XJ\u001eg\u000f\u001e}-/4{h1|w\u000fw9vx\u000e].)3HLS|x>\u001aX9˻\u001d}}OtӖN\r:\t{\u0018l\u0010+_m#4~U2:6\u0010zs8Lx?670?|!_\u0015 J39[cޚ1q\u0003{˻\f+_ϋ+g\u0015Y\\\u0005%ٍ0\u000b\u0018.\rǋ܇%\u001c3/~g_\u0001\u001f\u0012G\b%{wωg\u001c\u001f\u0000{G\u001f\u0013!=\u0000iك{w\u001f^ؕ]Bfb3,~\u0019'\u001f\u0005+N\u000f'{Sy\u001f\u0016&<\u0007/h/~o͗_?7_?\u0019\u00115p,q믽Kg'NҷP\u000bX\u000fPM֮F\u0003}t:G\u0003XxgԿ|舤.\u001et \u001f^\u001f\u000eL?:: ُ\u000fgɣC\"$IC,Ȟ\u001c\u0014\u0007ć \\?\u0013\u0013\u000fׂĽH\"pĞs3^\u00130\t?<7z:o./bu!]~ #+-+p=K\n!~zSd^V+\u0000ѣǞOۆ<}:\u0018qZ8ĳx\u001b58b!._Ǔ\u0017{vz-h~rp1ܸO}\f%\u0006IAvG\u000e\u0010~\u001e\u001e<dK+ųJ\u0010\u0005,x\rze[f\u0002*\u0006vĖ\u0003n.\u0007\\;z\u001cn9\u0003n9\u0003\u0000\u000eVt\u0003n99gO~}\u0001?<:yx<r@ѡﯖ&qqC\u000bC\u001ev0a@\u0011zC\u0004\u0011#\u001d\u0002\n\\J\u001cwZ#ᭅ6≖mqz]hG\u0017O\\\u0017_~wf\u000f/n\u0006_Fe~k\f6||`\u000f/\u001aT+\u0016agHspCJC\u0000\u0006G\u001f|'9T{,sgK`ŏ'GXΞb\u000e\u0019Bۊ\u0003\u0006vǶD-\u001a; 2h>'r/\u001f?\u001ak0nԌ˿sK\u0016Sw\u001e>|YjدhwH-ѹ\u0000=7!?9Κt=\r\u00067і={{~[\fl0Pov\u0015v\f|Ufns`wC(S\tmh>[.QznE\u0017d[\\V\u0001rC-9̐FO\u001c犨cMF-!\u00050g4!U~}zx-$\u001c>?>8\u0014Ϛ_?/\u001f&,S\u0013}p\u0006W/%\u001bMGvdφ@\u00035%B׊+)\u000fwξ'\u0006\u0014n-\u0019gT_j\u0014\u0014\u0013_ogZ\u0004\u000ebbB^;goAѕxp\u00124G4b∶\u001b'[\u001aC!$U\u0017}#<>\u0000f\u0012ISMR{\u001fr)\u001e%wm\u0001\u0001ima(\u0003\u0019z_\u001dX[\u000e\u0013\u0001˱JKl/u\u0007Q9\u0010i\u0007Ǳ\u0013b%\u001eݘ\u000bzěcS~uJF!wMI.C\u0018\u001a!\u0019^\u0012\u0011\u001bPI`uL\u0017iÊ\u001a&vJ9yAnDH6\u0011~۾DB\u001e'\u0012](e7Z\t\u0010\u0001)#*k-Xt\"qd#ryG.\bw݆\u0010(kJDPE\u0003\u0001%J=O\u001c1PEdTZ8a͟8\u0011숣LLz'\u001c`cd#ܡ}:ryr\u000b~-\u0019GA(\u000e4ƔN *`3I\u0012sƙT\u0018\u0015\u0014yBv \u000b5\u0005\t\u0007TCd#jh14i@3;\u0007$gƅ0\u0003K\u0002I3F\u001a\u0011\t\f\u0011\u0005FZ.J;\f*ڴ\u0002-2I0\u0011芼D\"\u0010J\"-!2܈<zzM\u0014*exd\"e\tM34lI\u001eg\u0002K76%\u0004\u001c0~s\u001bx,5`(DO~X_@\u001cIb|Eo'R\u0001VuJ7N'xJ\u0018C\u0012H*{2b\"ބ_N7u#yDN6\u0017;\u0011E\t3\u0010\f\rD ]KQpE#\u000e\u0018\u0017d,\u0006C\u001a\t)-ԑő\u0011>\u0010'QR>BQ{\nB6҅X>:\u000fc;\u0005&3ɮF\u0011/w\u0014kJ\u001b\u0019\u001f\"\u001d\u00079EAk2\u001b\u0003\u0019x\u0004\u0011ǒRC-^Lxp\u000f]r\u0006D\bA׳\u00197_w_8}ܤB\u0003ޏ$\u001e0b\u0019`\t舐\u001b\u0012qs\u0015\u00155i\u00198G9\u0017Osn\u0007\\\u000e:\u001a\u0011$t=otBhF43VDpLA6`8#\u0010ֵ9[qGl\u00072M$Iq\u0003\u0007G2GWItKCyL\u00123VT2-@dF3L\bx'̌J2\u0004+u\nV\u0018 \"zގ\u0012Pq@=Zfit!nH$VُB\u0002\u0019Q\u0001\u0002\u0015\u000eh\u000bDl\f$b[Ic\u00105$~\u0012<\u0000J\u0011=[</%q\"k+}\u001eĨH¢Hrи%jg\u0006]\u0016ZMK\u0006G̔&Bd\u0012UM@XF\tsssͩқm(\u001dQDB\u0000 G!\u0004\u0014\u001ap(\u0019,/c,(MJ\r\u0000\u0005`\u0015\u0006,lHPMd\u0018t\u001f2˽cM\u0004Z⑴V'\u0011*\u0011 #./\u0017d'LJ\u0018ۼ|\u0019\u0018\u0017\u001b7\f\u001f\u0005bגt\b\u001fp\u0004\u0018\u000b鐌dsr.CF\u00191AL\u0019'H@\u000b\u000b[b\tO#\u0011G*9뇄݁@ c\u00165\u0018\u0018{w4X\u0000\u001e\u0017L\u0014.ڶF:\u0005\u001dKA\u0018@¡\u0004\u0000G藠@D2\"\u0013\u001aPvA\u000b\u0005mN\u0010q5dbZz#\u0015\u001a\u0006\u0006\u0017\u0015V\u0005\u0017f$4v/1':\u00111\u001ey$\u001c\u0012ih\"\u0019D\u0013sâ%F hOڛ*D\u001bh-qyn3hh\u000bLslh\u0016$b\u000e<\u00018҉\u00117SC\n,4T)MF-\u000f2h²ʦ\u0015\u0017)p\u0015QG\u000f\u0011\u0017Տ\u0015\u0003+$}ܕ'\u0002POV\u0014U,H 8\u0013%\u0003ܲ(\u001c4E!uN\u0014fIx\"\u0004:\u0010hb%kăI\u0018d\u0005\u0011IIk1\u0010kx\bM3-0`❿Dt-4)\u0013D\nJjhXbN$;\u0004~7f\u000bzz@+C@UE9`\tF\b\u0012\n(\u001c$\u00012(\u0013\t\u0019}<QXXԔ&\u0004O`)\bF\u000635OMb#\u0000\u001707/})\u0006\u0007~?c\u001a?w_x!\u001ed6x{V~fo|\u0017~~\u001cfR\u0019\u001be\u0012Y}c\u0010fm%̻\u0016t\u0016m|JH|k`޿w'4\u000f\u0019!=\u0001\u000e\u0018\u0014\u0016:oDy\u0004\\h$7'2E_єU,L_L\u0002:]ezޛ5dwb~V\u0004\u001f$\u0002;Y}ߊŭ6.ŭ,v}phdH,\u000e+\u0014X\u001e?Lؚ<y\u0019,\u001f}o\u0015\t\u0010$\u0000\"\u0004+\u001d\u0011U\u0004ɓgeCq\u0001K\u0001le\u0018<\u0019W\u0002\u0016;\u0016\u0013>X3>\u0012ۏ4\u0001\u0016\u0004ׯ_1\f˭\u0003o\u0001n\u0004_\u0007$B4$\u001eP\u001dڏеg$\u0007C\r~9\u0000R\u0016(\u001c \u0001\u0018IG\u0002\tgTLCq~ۘ`x\u0001u\u001e=\u0014yN\u0000fU^xϖ\u000bւ\u0000\u0014pF\u0002\u001d\u0002\u0006,Om`u\u0001?E>\u0011ϋ~X>F g\u0000\u0011(9;@*2%~\u0005~'2@[F\u0002N\u001fr&a\"T$\b-|@+\u0016\f>/pkOh\u0013/ؽ>MPձ$\u0004~5%\u0000Z\u0017zznvSLR\u0013n$4c0\u0001[hx!r\u0001\u000fh~~\u0006d\bG>\u0018\u0004cT\u001aQ>`4E\n|\u0007+Y\u0012Yzm`<\u001e0ذ\u0010\u001dk\u000b\u0018\u001dނ('\u0006O9Ĕ?FcwƉ\u001d&,\t\u0001a_`\u0003+\bs\u0003\u001dD}АpC{\u0015X?m#8IТ\u0002?*~7\r\u0004=L|\u0002\b\reU'ߘKE3S&L\u0015J\u001a\u001fu\u0006\u0004\u0003n2?\u0002f:0`\u001d\u0004vsb)r3\u001b:\u001fJ%~<;\u001c੻8l)ǬӌjA9#ԙ\u0017P$M\u0011_h\f\u0017wK撟5cU\u0017훕\u0019:`5om-M@R1SX^\fG_&p:\u000f\u001f\u001ca? cU3^[\u001am{C0\u001ajZ\r]\u001d\t\u001d\u001a'z4\u0012/\u0006\u0016m\u000f\u0006ra\u001e\u0002]o;'w*TpӃx\n/)bn~a\bI\u0013dof\n!'*7\u0015)2\u0013F,Tl_z>si\u0001^.3-|2\u001f!QxOFft4|1Gh$?\\ݒK{$]7_bfFn=\u0018aߛ2/@\u0015G\u0004\u0018}_yHgv8E\u000fw\u0000'y]~T>_fHM\u0017S{h\u0017ªMT/S\r&\u001b\u0003R\u0018ƣXͧn\u000fs<Gn2/@k2z\u0004.\u001f\u000e?|t\u0000gg\u0010&\u000b\u001b\u0003ߖhm3͘\u0000\"\"Wzm[\u000f\r\u0016\u001a5G\u001f\\!髷?&%a?,\u0017\u001c\\\u0007\r9͡\u0016qܷnVm$([\u0003M'\u0004JCAe/,ɾS\u00197\u0011\u0003\rhՃ $h\u0002D$l1HI\u0015J+~\u000bBCkYM.\u0006:0EbЛAN6:79ˍ23[{hml4\u0012y;qO\u0018P\u000f<k\u0017|9q\u001c$\n 9,^U\u0016 'De*FT/|ӈU\u0013\u0016Xvt\u0002wyV?vѷb[YFe=ڌߍG?~K\r'^2lY^\u001f?}x\u000b\t\u0001`PnK+`2o\\w\u000bs*1s_L6\u0010x=9\u0014X\u001bo+_<B^燭\u0003ʌ轷m/1_\nUࣀ(X\u001b8.pu4/_f\u0002G<\u000fm_+u\u001c-\u0016\r\u000e\u0006~c~Y\u0002\u0017\u001eGwe\r\u001d\n\u0007\\~{G~{8<uh'z{ߵ\u001c\u00122\u001eX8(Oy\"\u001baR~G\u0007Mr_R\u00004ҷf\u0001u\u0004\u001c1Ai~ˊL^ܮ{Ͳ\u00074\u0017\u0010(v8bụf| PV\u001dxZQq kƐt\u0018L\u0017-\u0018 3\\`$\u00120\u0016ATKto0?\u000er8Wی&_\u0006Gnym|㩟o\nPࡳ\u0018\u000e{Ve\\\u0006B\u0005PhSI!\u0019-)gZ8e\u0013v\u000eAA\u0017lƉ=N\u001d<=\u001a&]4\u001e~\u0019Рѣ.\u00003,Y~Q\bQ5⍖ƩhXY/'ѱ\u0017Z\ta׃8n4;8jlSM~uv\r\u0013;3q>'8m6FMo[\u00064/[V>Q[\nN?qZe*\u0017v^r0!]JP2L)Pl@7\u0012\u0000B \u0000*Er~U'^\u0007v\u000f*ŗ)p4Yo>bMxlAn͇'͉<\u0012Qi0,NǞ?\u0007:\u0003ZM+ʚ@@\u0000ӻ7\u001f }\u0003`\"\u001c#'[*\u000e\rύfU\u0003f\u0003DUލO6c\u0005\u0004W\bӋvS]b\nއoB3eft%\u0007?>\u001f9I#0wQ^<:1Lxl{\u001d؜~\u0006\u0006\u000e-|\u0001\u000f\u000f\u0004\u001e:\"\u001c.Z\u0005\u000eZrz\t\u0013Q6\u00076{HR\u0011g|7b$꡶\u0006\rf\u0006I\u0001m\u0011%_@'u_;F{!8-\n\"ipr˂ A}KUj$Tj\u001b\u0018r~.\u000e`Ύ\u0003\u0010o1]{xcou\rf`*/ʿN}@)\u00108k\u0015\u001b,p\u0018>NCo'Z7C\u0007w\u001f^ę_s7^XEhEAs&\u0006͙O$|\u000bF\u0014^گ^'\u0005V%\u001a$\u000e?:Ƽ\"f\u0013\nHM|:l\u0001C\u001d\u001e\u001b\u001d!W}7*f\tЭ1\u0011)ʻE\u001b'\u000bGL8Ĥ/elSa2\u001f5z\u0005!rۅ{7\rQ\u001fJve\rh\u001e\u000f`X\"./&2Cxo-\u000eǋuw4=\n]߭( hf\u0010v2\u0017X,ڨB\u000fۇ'O>ery7?7>w'?ſW7\u0005?_??\u001f\u001fѯ\u001fͿկӟO?v\u001fo~ݿ\u0002/;\u000f~ÿ=\u0001\t'\u001fo?_ѯ\u000f~?\u0006m\u000f?\u001e??m\u0017?\u0000o1x7b'}\u0018-`=Y\"(,\u0002U:NS\f\u0000\u0001\u0003\u0006\u0001+`>\u0004kA{F\tG~@\u001a\u0011Q\u001e\u0005j,Rg\u0001&C}{\u0019:ɬ{9yh\r) \u0011h8S\u0002\u0014\nV8\u0013/Ax܄XGMq1\u000e(t^h\u001a\u0000<GAr\u0018\n1\u0019܄Jb0^/F|%\u000b\u0019\u0007\u0014\r\u0000\nT#GxSr_`\u0004gL6;*nRz\u0004\b\u001bJ\u00032\u0001z*WZ\u0003tJ&\u00153\u0007\u001e\u001atP\u0017q|8b\u001aGv\u0014$!\tgu\u001dG\u0006E-~1:a$dǓERGjZU<\u0000\u0011Пg\u000e@Ng\u0016)7\u001f\u0000\u0006ӚS}b|Q&\u001cx\r\u0001M'\u0007w%:޹\u0016\u0000Ju(\u0006&|\b\r*lc\u0019\u001e\u0003\rǳa\u0012\u0000XDoɦ\u0002LF\u001c*\u001d\u0013\u0007S\u0018\f$h>/-\u0003@O<6%xa`q8p}Np`\\;X|A8棏\u001e\f\\j\u001d\u0006c3\u00187r`v|\u001d${:\u0014\u0013I\f\u001c7s,?\u0001\u0018\u0002\t^?\u001cc~t,\u001bɿϷ73J/0\"`kɤpq\u001cMw\f;yjͨ\u0001c/@\u0007sy\u0000ހYN\u0004W\u00061$\u000e\\\reY\u0011,6:\\*C\"\u0003Gc)%n\u001cnE\u000fe3Xd\u001c_jm7\u001b9}q,;F\u001b\\kuӯ?ݿ\u000f?\u000f\u000f__(OO\u0006|\u0001Zr\u000f\u0007\u0011qB>\\:\u00162\u0017\t%f3\u000e8\u0010a\u0010Amƽh=qJq;Nq<ᥐ/\u0014\u0017wl[a-\u001d͈.ͅh\u000eV\u0010̶cUb;\u0016eRX\u001fT\u0001H:#!\u0017\\\u0018J(g\u0005C\n}\u0012e^\u00196\u0003nvKx\u001d-\u0004MRq089Te[\u001be\u0005pxhE\u0000$\u0011]\u0017Jd[^8/ԥxGvɎ`Dd\u0019>\u001a\u0005\u0016kX}Ls\r;=<Q#\u0016iQ\u0012*k6$\u0018\n\"*ʼ\u000f\u0002CZ\tDC_tZ!\ni\bƱ<\u0014Xju{?\u0018Xi\b\n#\u0007ɋ\u0003Ǻguvt葽31|O(l1.\u001ch\u0006\u0007\u0002-n<-vP\u0018\u001c\u0012\u001f@d\u0001b+{dǚN\u000b~\u0016lgB]aue%=1!\u0001#*\rvm\u000b\u0007\fG>\u000e3_Z\u000eA;W#T1a*X\u0004=vVX\"o/Ș\u00021'`q\u000f\u0005Yԃ\"\u0001\u001b`\u001cN:h8}y\u0002YPIC\u0002F\u0012Z\u0015`ǾƮM6j\u0014\u00178sqȽ|:\u000e\b)Ɲ330)\u000b2ٷ3\\d0l\bP8cշɜVB5 ,\u001f>F\u001fBaF2dw\u000ft\u001eˉ\u001fu~\u001b2\u0000\u0003J\u0012\u0004Ƌe'X\u000fG\u0003`\u001c]G3UX3x\u0013;`5L\u001blc@F6\u000f\u0018(\u0018\t\u0017H\u0012ߓ\u001cAq<%\b\"\u000bT.\u001c\u000el ݬ\n\tbH\u0012\u0006w\u001a\rGI\u001b\r'\b[ ,F-AZЬSL\u000ftCC\u0002z_n\u001e\u000f?\u00132\fc'l\u001736!ϸ\u001f?ٗ/ s\u0019?\u0017\u00166~\u001bW>o;g\u001dt1:b6\u0005fne\u0017V_O%&\u0013\fՓtT\u001bb\u0013\nـSo\t\u0003?\u00028=?\u0004ؼ\u000b{{w9N6}\u001cb;X}I\u0016\u001aN1{,\\\u001dj\f=]yf\u00051\u001d19WN_[~a_G[?)\u001ewVnM?B%l2}a?=կ\u0001utZHkk\u0010~\u001d|\u0007S5\u0016:{Y\u001bKt\u0005Or}\f\u001fj\u0011UvPK5V\u001dF\fSfFdr|:dxz2,,x\u0016\u0006y\u0012qԱ{oe\u001e\t*إoӹ{0h&&w٠5U*RUd೦ץ\r9\u0017\bkx4\u0007c5[t|\fa\u0015v$G/Gϩnu^h<PnOI.Vxֽ큇dn3\u0015yn>s\u00079:\rF>AE#x~Ĩ\u001aM\u00181ݡM[dT\n\u0017v3=3SvB\u0007|B;~\u0012D\rw H~\u000bG/\u0012ӊ\u0004\u0003\u0016\u0005w\rҥM\u000b?>F7\u000f?|dLN\u0018\b\u001d$td>q\u0003pw\u0018$3)2{%̩ڂ\u0014B\u000e\u0013fI[Oѷ\t *\u000f\u0004\bn'\\\u0018nצ\u0010>&ђ\bY\" :Dh0D\u0019\u001e}D8'\"ͻ\u000f\":D<hI\u0012W]H\u0019z\"]YEͲE:`ňbK#V3Q1xsC?6!jhO\r\u0012O\u000b[xލa7<Z[c#j\u0018>-0\\$Ƌޖ\u001a,\u0015|^\u0011{GX\r\u001eWFgD\u0010\u0019SCkMDH}s%KE@7Zg0&m(8oiޭ6~^i\u0013jM\u0014\\;7\u0016[{Vg\u000fsmc۬kIP+6j5C9Z;i\u0006t˶vY`7[cëz\u001d\u0019̓^fuٯ\u0018\\Vݾu.Y52+>Ntփ[Wuf\u001dXjuJo\u001b}Ծtt\u0013tW\u0013c\u0010k#z-v2c=\u0019*|=DK\u001fhuWpaI\u0013IʨϺbv}Wm;#ѷ͊\u0017ԽK~ی\b@77rƺ3nro~Ƭ7eC&Nn2Mpg\u001cћg3n\u0013gr|\u001f|\u0019am0N\u000f\u0006kip!CB\u001a\ttcx\u0005Ci:7\r;Co\u0013cy5̓\u000en~4\u001a6v}|2m1\u0010j\u0019ㅅۘ\rV8b|n\\2{ƯbkN\u0011(\r;x\u000f<\u0001otߚRГ\u0004d>\u0019LVo`\u001aE,NzMxAk6G\u00033a}b\u001cl\u001c*1W\u001cӡ)x4-y\u0012n̫cI\u0016Ug+K$Z.`X,ϋQ\u0002ʖe:iZlh[ik\re}k|mə\u001bgnU\u001ff6:+nW[j\u0007\u001b]q\u0006o?}k~\u0013}A{\u001e+\u001e\\c>uT\u000b_K\u000e?sDK؍4=:[Whd\u001d|]N{w:3vw\u001d=U'M-jdKmEG6?d!c&g*n(lvRw5\u0012XhO%\u0016<[i7IV:HBL?Y\u001c\u0019\u001a>zU\u0019]dmoyW;>\u001f~\u0004ݸۄ}w3VɢߺG{o<֩e\t<L\"qi8͞l\u0016bG~-Mǝ5oZz3̻\n<\u001b|\u000bi2\u0019zamPٔ\u001f_Hp\u0014\u0001}\u000eУB%\u00107466҃￵\u0005-`0%dϣ28%A7!}a\b\u0013t(4nBd\u0018\u001a>捡m|%M:m49\u0007۞e]#ωeh+ƃnS_[=-SXv\\ݗ\u0012dr4D4\u0012.ۑe\u0012mz\u000bD\u0019g4s\u00195\r\u0011\u001d~M1Ӟ\\I,5|=~<>qx;\u0007\u001ev_\\;.\\\u000flq%bt1m{?LväﾼI\u001ddq\u001cK.J\u0010~9h\u00116>~n!8.t~\u0010A]cw29s\u0019vi\fJռΒB\"٧q*>rz!͟ \fdy.#5_qs\u0014._7N\u0000<\u0000\u0010m_?\u00174X3,qdf)<'JƄ.}CD\u0018ckѣ+n[{G)\u001dOvHUݯRSc\u001et\\t\u0003~=\u000b}t\u0003yxzUBV#O_wF_F\u001c\u0019\u001aگu:mYz^\t\u001f~2h\u001aBR>4дQ8\\j\u001bRx\ry}7\u001e_7{8Ͷ?Ǵ4x}v~/Do\u0012\u001c\u0017#/u[p2\u0017_\u000e;p|7 ZK_Da\u0000ݴC`x\u0015ۋq=ޙ,Hus&\u001d<ofwnSӷv^$|D+.Wy自J9lVkK:M͠^\u0007B7>>\u000f\u0003r=jG<\u0019U^Y\"T}weWǧ=pѮ}n\u00160\u000f+ίx6]'94yh\u0004_'r\u0011\u001a YkY>\u001fi0\u001bNɘo\\f\u0007yGO_mCs)`Tk>pw\u000bϱ]䳮Ÿ\u001f]nYuߖ\u000b+\u0007ݬoa1Ӯ\tc:ul76|\f-<ϖ=d.e\u0004\u000fĜ+o\f\u0016eo~81\rId*1A\r~c\u0018\u001eª\u0001#i\u001afI:%52޺o!:<x8<\b\"m<\u001eL]/N>IҴڷ/[\u001doɼ͗rR\u0016>kϓzY1̩A\u001e8M̵[2$\u000eƓ\r>nd˥֭?.j\b'u]*\u0019\u0014<Biv{\\%(K,\u0010\t\u0003T@!\u0018jؙ5\u001bg3]kN+Q!\u0012k:od&\u001alC\u0002zf,CU%Ʋ''\u001e7O?t@7wOS \u0013OF̌JVkb4\u0007\u000b\bܿ9\"aE\u0007I]Z*>&\u000b9\u001bNʖ*<\fo:\t\u0001~lhhwn(mr\u0015+}ͭo9r\u001475\u0011\u0017SfVa4$\u001dЗ\"\u0001I6\u0003WM:M`0E84\\\u0006FS6Ae\u001d\u0012m~:K\u0019>\\82\u0001$\tE/$\u001a2nm<I[샳H)`N\u0017ͯ\\2+Ё+[m'_\n9mGw:nC\u00035\u001dֻwnm>@;k8C\u0018(7%]\u0018ҽ3S\u0002}Ni\u0018ڼnPtk&\n2fi\\IgzO'qG4>JZu(FQf76?YCT[d%ޤz%d+=y\u001d{uz=E\u0007ɹjT\u0015tCft\"b^1_tPKX\u0006t\u001ej>]WƳ5\u0017\r^-XZwݗ\u0002\u0012맄f*+\u0006|94\u001fNcq\u001d{|\u0019{%Mкaze8M4\n$l|\u0018~\u0010zH\n\r`6%9]=nݕz%Ӆ8WD^g$K\u0017t\u00198\u001a7${<RB?\u000f\u001fp9>M\u000b5oQ\u001bCdIgeYWRk1Wn32n\u0012Mq8^{u׃Oלv/>\u000f^a7L\u0011'N{-8VK\u001bW+Y+vҽ\u0016\\b:\u001d!n=7!{7TIIv\u0002^a7lE>ZB6;w\u001bdMӨDZ\"\u001f\u0011o[LY\u001fuB\u0017[S[/E2ݰ\u001ddfܘL7edS\u0017b\u00141}t[%-ULJnPڧCNl{L<\u0003ʟ\u0006,)\u0017kO\b%Tps%Hث;Ӫz^֢^34n\u001dO\u0003\u0016ʻyղꝎ?S9k\u0006j?ղe~\nU@-+TkG\"R\u000e׈)e\u0013EкP.}0Q\u0010jّ_~:O{BU{͂h\u0004\u001d\u001f{\r>8Ds\\ܥlF(0ǟ\u0005e\u0019Mdr/\u000e\u0017\u0004Ow\u00065ZJ?uC0\u0019I=+5`\u0004\nOOO샗;\u0018uSa\u0012!Ո{=^az Kģ\u001f4E\u000frS\u0011/]n\u0011_@=uh$%ګl\u0010+o\tr#|R+K6\u001b\u001dTܯya\u001cvB|\u0007beћJV\u0017}|*&'~z w\u001bi4B.,ZQ\u0006\u0010_)\u0007)\u0011O{&*F\u0010O:*nDר6x:XP)=A<\u001dς\u0001I4Og^\u000fn_No*ќ/3Oicؔ\u0015>\u0011l4>\u0015JAhvFܺ\u0017XwZKӰn/6eV\u0014w۪P<\u0001\u0014::LcX:3C!\f4O/b*u\u0019Et{p\f\u0019~s\u0015*'\b;K!D\u0011d\u0011\u001e\b[wX'L\u001d\u0002i\u0017`5e\u0013[L\u0010EE#r#\u0005~1@廃$\u0005OF\u0014?\u0018\b\fvO/wMͬթM\u0001rD`ƻ\u00104O~u.WK-^1\u001d{}2\u001eY\u0016(k\u000e\u0004zun0\u0017t%ݱW?)\\Ӆ\n\u001bw9&p\nH\u0011uF5{izeM}\u001fz\u001d!ȹ2\u0014)\u0014N\u0017\u001caI/->.hƎU\u0014p1\u0019=@\"\u0018ϟ;G4#\u000b6h\u0016gtvtm:_F\u0000\u0005d\tm^zuRH\u0016X㚨W\u001e\u000b\u0000x{HzmY\u0019o^m\u001b2,46}^~\u0011A7;\\\u000bE,\n\u0018&xG\u0016\u00008\u0016\u0012!E8I)qƨ_,;(\u0014%֊\u001d\n\u0013\u0002/8*/\u0018Nְ\u001b\u0012\"̎dp66ztwLsߤI\u0014\f\u00072\u0015\u001d\u001a{-b\u00177pfVZ{`\\1Q\u001c\u0018\f\u0007Lnɾ\"\bPƝQ\u0012z\u0004̿G#\f\\\u001d\fQ\u0001\u001apaݸ\u0007f`mbX\u000bhȧ>0??*i\u001a\u001d8auwF\u001e%\u001bmc$p?6n\u001b1ۻxA\u0007\u0005@σ\u0000H`̐\\Cf62ִ\b\u000e3 gHz݆h\r9O\u001ac\u0019k`\u0018\u0015^LSdk%Y\u0003*d\u0016eZ+)C{j\u0007\u0015$K &Rl\u0004\u0012\\)j+|%\u0006V\nI:P\u00181\u001c[mO6Jg;\u0014=Sg<krH^\u001c6Grg\n\u0006\u0007%tҊ3Qa\u0010\u001d#P`)Msqw7\b8&)af6\u0001>%\u0011Ke[R=1ć\u0002\"!ъ{q\u001ct`h&(Mf'iM\u0001->ڜ\u0001{ڧj([\u0006?:\u0011i\u0018,VtI\u000fǃ#X\u0000LR$\u0012?0:xGx%\u0006\u00167i\n\r(B\u001cm\u001b\u0013LfY2̈Ȳ\u0011\b\"%)4ojJdJ2`}`ne\u0004R+Wk\u0019H6\u0019ԦyG\u0011Gz\u0016G]b<0m$\u0018}u?\u001c8) 9,wX>5\f\u001e!\u0011\bp~\\ý{ze*_9O4ak5\\\u001c\u0018\n=3&mKjo.#R&[xFε\u0018\"{ʚ\f\u001d\u001a\u0013F۞^NitE@\u0011Pt\u0006x9&'1#z\u001a.$Pxsh\t}44\u0004F#ăHD\u0013\f\u0006\u000bDD\u001e[l\bN\byQ\u0010\u0000\"ъPX\u001fY=x2S7}\u0016ݾI;x.\u001cd|0E\u0003\"\u0001LD\u0007#F\u000e\u0002SEp)(hoo$EI\\\u0000C\u0014Ԉ\u0004?qLFu\u000f4ՁoD+9|f!iR&\u001f\\S\u0010삱jꊣ\u001c\u0017ٱ\tݥ\u000fL͞\u0017mvi7\u000e4Ӟ\u001d`^Ap\u0018) 垌\b\u000b{t0Mʰ\u001bU0܉\"Ü,\u0017\bPPS|O \u0011`\u0015jJmDў\u0011$ʓYΣRt\u0013\nGO\u001a\u0011ށ\u0004b\u0010'\u0014\u0004!N{Ė6`\u0006]uf.c\u0003L\u0019\t4n1U+\u0019BR/웂X559hr\u0002\u001b\u001aSB\u0015NiEv?*i\u001e/\u000bb]x֔\u000e\u000eʊHƃ+\n}̕\f-V~(Մa.#94&x\u0002Nql\u0004\u0018\u0003\u001d*;v\u0013$]\u001a7m\u000b$4<#\u000e\u0011Fe\u0013Aϱ<!9*nhr(74i\bW\u0017+B))#:瀨\u0017Ih&k\u000e:qqd\t&\u001aW(5ڡǵ\u001cYD\u0004?4Wn(ݎl8ǀ\u0018\r\u0010&RZ\u001b\fP/{դ[R\u001b\u0003\u0006\u001b\u0014\u0000+wt\u0013\u0015\u001blEBIE\u0007\u001b).Ӑԉ\u0012wt\u00137\u001d\u000e;HhI\u0001c%\t#rGt\u0012U3=ʅG\n\bvh&\u0017\n\u0012/\u0005`kMLt`lS\\\\Tq#lr\u0011\u000f\u0015`\u000b9̆$*BC\u0018\rqaf4.\t\u001faSq/49\bfh\u0015[3\u000e:NUn.w\n\u001e\u0016\u0002MAi8Q^9\u001e#\nZZj\r.?lEJ9VkLC?Zc\u001a?rT\u0007\t}~l{\u001aԏSgr!\u00181h:v/odOM{ɑ4>0Si?a\u0019\b{J4ͮ쀂t\u001c;F\u001a\u001c\u0001$m:\u0002#@\f\u000bk(`kxL&eJ/K8c4\tT)=:4\u0014\u0013AD;>5\u0013\u000eyhvH&\n#s\u0000:LRw\u0004rC\u0014!|yr 2'vq\u001c,o $3k\u000e\u0005l!}t\"\u001a$[p\fd{TaOi.\u00198b\u0006洰ч'\f\rѦNu\u0015ek}EݸYzK.+H~q\u001eL=ج̬2K\u0003h']\u000fWRQ֘H#g^K\u0001>#Ӊc\u0000S\u0012qg\u0001f\u001e z\t)Acu.=D:\u000eٹ\n)\u0015AM}}uAg9dg<\u0001PzK<\u001cz@H\u0012-\u0014뵃\u0002\u0000Y\u0016\u001e\u0013\t\u0001z_F2[rs Ej82V2]f\b\u001c\u0014M7c{k\"{5\u000fT#\\##\u001c!{]o>:Z\u000f\b:xOH@a>Y\u0002n{\u0014V.UL/,H[fF\u0006!\tWzD]s\bICԫ\u0005ۺJ ז\u001c\u0006\u0012y\u0004vjWt[G\u0016A\u00153\u00052!\u000f\u0005:\u001b\u00143j\u001eC:0w \\EuCݬ\u0007L\nnNB\u0000YseQ{\\znWyC$3\u0000\"<\u0019;\u001cp\u001e\u0000h𔐱b3ԅ6!\u0018h\u0012\u0014\u0000f[DJ\u0011\\\u0003e*\u0018p\u0012\n\u0002\u001aL\\-\u0018CIe\u0006qR)m\u0010|\u0007e).\u0016'iv\u0000!I(\u0000̊\\%2L\u0011@B!\fO\u0006瞸9\u00149\u001d\u0013\f9TBv\u0013\b\u000f|SJb\u001fa\b+G\u001faJW\u001aȂ\u0015Q+9IU\u0016\"T\u0005!p\r\u001f\u001b\tR\u0015\u0002ܫ\u0010/\u000f4EQ\u0005\t)r!\u0019ؙ9\u0013f0\u0004\u0007]JK\u0004GxM8T5\n\b3\u001byX<\r%\u0018W\bpW\u0002_C\u0007E'\u0012\u000b\u0015x^+D08B\u00139j^_NN/iMe.$B)\u001c\u001al\u0002rk\u0003mx%:pO\u00120\u0006݆wJ~\u0018A\u0011Q@\u001d\u0006\u0001\"H9<Q̏K\u0010\u000bE\u001ec2\r[\n68ģ\f|?rp]%04\u0006`Ho\u000f\bĐ\u0002\u0014Q˓\u000324\u0002PMpp)JZ\u00010\u0016gNZ( \u001f\u000bS\"\u0016$\u0004\u0006\u0014ެ\u00048аVNCAHITVʑJix\rR%Rr\u00077nD)\u0017<(\u001a[ɐ\n#z\u000f+\u000fKU\u00045*\u0003\u001cŋހn\\\u0000W^>z\n\u001b<\u0002 ÙћӸ\u0000\u001cS(z\u0017P{#\u0014\u0017Go ޓӨ\u001c(<'nF#&\u0001)+\u0000fS\u0013\u001aґ`e+2!Z\u00109Y84tJ\"/\\\u000b-\u000bWʳ\u00013]\u0005\u001a-o\u000fpyƟ[S\u0007aGl7ũ\fa\u0018P@!\u0001\u00148\u0007msY^^T|Y^܀:[K0KP\u001c|+TP,Oq\u001d\u0006\nO {\u0013?Ĭ.\u0007_\u00148\u000bА2\u0003\u0007|\u0001\u001bt+ a<:(\u000eؚZ\u00000*F9~L'\u0018ϑBƢ\u001fvТ92d\u000f\u0010O9(O>5ks$5Eko.Ns\u000bd\u000e>[S\u0019Ű\u00135b\f\u0019Q\u0018\u0001F\u0015N,(F<\u0014Pb\u0006K1\u0018Q\u0015H(pvyQሼk\u001bu\u0016f\u0014\u0011j\u0006Qf<(q\\&\bD`Wdd\u001ar?6\u0003%LuH#T6\\ĊbC\u0000n9\u0017m(j\u0005\\Q\u0003\rG\u0004F\t\u0006\u0001[Sw\u000f>\u0014gun\u0000nA*\u0002|VT0nHdZ+,\u0006\u0014]\\84lͅk\u001c\u000fH\u00076\u0004iڑR(i\u0006vK_(\u0007ŷ1q/ǣ\u0005\u001dvmA;AI\b\u0011@_ڧ\u0018Yp?\u001a\u001a\r<\u0019LIQDG\u0000OU\"B{8;\nb=vAkcuh`Q\u0011S|\u0017D\"\\3|\u001a\u0006ʧ{\u0016V,F0&c\u001f0g(٨9?g)\u001a9ŊJ\n(.VT>\b\u0015\u0015Qj-\u001b!Ѱ\nB\u0015EdEqsOpQ\\ͣ7\u0014E%\u0019/\u000b\u0017<|v\u0015\u0018Ccn\u0019M{6Urּ+v-Rgj%UEX[3pQ\\(iEq\u001a\u0001L5\\Ԋ\u0015\b\u0001ejᢈ`E5\fl(.V\u0014ts\t\\\u0014ݫ\u0010+gsᢸXQ%pQ+&VT#)TF'ƊX@-\\\u0014\u0017+\nM\u000b^XQ1\u000bbE!\u000b\\\u0000\u0017Ŋl(.VT#\u0007+UJ\u0014+#Eq\u0004\u0018pуZQ2!E\u0015\u000eֈV\u0007\u0017Ŋ}sᢸXQRM/y(˶?,>\u0017.z:&iW\f(N.\u001e\u0003$l(.VT\u0011|;ClC|7\n]T}\u0010R-\\\u0014\u0017+zپY(xg\\tX\f\u000fI\u000eQٶ4Y|IJ'5QYlGYS6mK\u0013ͣ'\u0004\\QeM\u001aA[\b\\E\u0004nć^JD7CS\fZcɞhG!}%)?f>\t)c(@^)?xM$)(⤒q2(G2\\HU\u0006z2=zUΔ\u0019\u0013@))cAW׹)ch@]F}}sʘJ[\u0019\f`2$x\u0006)c&\u0012DEU\u0019ӽ\"d G\u0019 BE;\u0001\u0014#({\u0014CAVo#zE*n#\u001d*+\u001b吅z*U0:x홠FQ\u001b X/s\u0015Ő\u0002\u0014A\u001fc\u001bu>\"d&+\u0005Q\u0011QupL(}'\u0006טk1JP;!*QʵOGҨdm\u001cP\u0000\u0005\n\u0013$!\u001egNM?=D\u001cTIŌI\u0013z\u0004Jh:_)\u0015*şK\u0011N\u001c\"\u0012ԑJ*87r\bX,>1fES29N_kݜǭD\nz\u0006a\u000er\u0003#9(LU\u0013\u0000mA|\u001bacV%P?<OZ\u0005f\n\" f\f˼hJ\u0007S0S \u0017\u000fӞ2Q$W%!\u0010FZPWaHezYCBa`[`rAYŉ\u0010)Q>ìx\u0011 fB\u001d[vU\u0000/=hLmከs\r)<I\u0007\u0004aQd5\u001f[-UaRԽ\u0001G]ROPi@2qj\u001a\u0014B\u0012'^Tyщِ2\u0016eh.zi\u0012\u0005SU&_-Uá%\n\u0017'*#B}Q,sj)*zD\b*\u0019ҊBָKC}'Σ.)P\u0006\u0000bVq .\fb\u001aXȂn\u001bņl\fh\t4tсa8m$0\u0007\u001bBߣ'\u0014-D@ienKU]ʸ0, *h\\),\u0006^y܌\u001a+^\u0011\u000e[U\u0010z~\u0004\u0004t(U3\t?IK\\qh\u001b\rNcZ9\b\u0010\r\naOR\u0017&v\u001azbHހ/h\u001ai,\u0010UƏ\u0004];\n\u0017}\b`U) S\n[+\r{ń­7\u0018\r;\u001aJ\\y\u0013!=ʥ8ZLHw(q*\u0004\n6t ~TQ(\u0015\u0015/\u0015\n\"PZH\u0007BRDÿl\u0002P*\u001e..zPZJ-uB\f\u000bȶvB\u001cj\u001e\n\u001e|ǡQZ8xi,\t\u0007\u0005ԗ]UA\u0016@\\\"p\\\u0011Æ\u0006ZS\u0017 !(DD4UPg$1B*\u0016e4:)i|Q9s\u0014\n3ݵ#\u001cx]q\u0019Oe\b-(=ޖt\u001aOӹy>6ihq-u\",\u0010EؒG\b[wX',\u0017V!܇-a/t=ic'\u0012[LT\"\u0002\u0019\u001b|w\u0003j~\u0012U\u0013ֻ7\u000f\u0013,SF7\u0010g-7Btcl=ʲ\u0004^hV\u0010 4i)\u001dz\u0015gu+%\bt\t/rO\n=t\"Uïy.'Pvг\u001b7z\u0019KC\u0019\u0010P\f\u0019\u0014U#\tZ7^Y\u0019-qZ\u0016l},ҋ\u001b`(\u0003\u0013LX\u0006t\u001ex\fYL=<\u0016\u0010,\u001f尝:4zݦb\u00005\u0005\u0019\u000e\u0006PA\"3N\n\u0002vw\\ 3!-(\u0019O\u0002նbחGQݾ\\I0&.ʵPs\u001a+lR%^\u0005wx5(ϣB2Vq'-n\u001b~DJz8rHVL\u0014\u001f\u0013{\u0006):J+\ftw/xMbb!*ƴȵL\u0019\u001c(C5dF\u0012 \u0002\u0013\u0003\\+W=)>|@\u0016cgIa8\u0014{NBCIJ8\nQp,pC\u0001xSZ\u0014hI5le\f9\u0019J\u0014\u0012\u001b|c\u0010bć+\u000e\u000b}秺1Qr\u0011)e'OCC(AC9\u0013!#R0'϶u\u00138e\u000fp)\rn\u0010ٮP?\u0001\u001bVzqv\"Xx/&ᒩz[{U@EŢ\u0004\fV\u001a&Ll:OTŌ¦=mT:j컴basvT\u0006(lT޼\u0006ky1\u0010\u0011D)\u0006u\u0010vj\u001db6P'9Po\u0015j\"r\u001e\u0001\u001epSx\u0002ʀ?&\u00062ZN\u001d mT\f\u0015dT\u0003\u0005f0#\fޟӨM*݅\u0011k\u000f#i\u000b෦b~)2v-[S³\"\u001aٸ'!G*\u001eo1\u001bEI\u0016xLE\u0016\tv;iJq@z\u001an#h~P<j@/(g\u0014z\u001aܢ%\u001d劢*$`~%w(X\u0019]PUI)xru^\u0016ړotHY\r.B2,o6?%R$ e5\bk!eA7f\u0015\u001aq\u0006){\u0012i\u001aŻ\u001f\u0002?%Rv\u001f~\"e,N\u0015ۊ]asT\u000b\u0007~1B\u0012\u0018\u000f>h\u001e'T'Z\u0012DѸĒ3\u0010\u001a\u0011h\tb\\/M\u0016d\u0000B\r1\n \tFړ\"\u0019jk\u0010v$r!0,ɡ\f\u0010rZµF\u0015.D\u000f{\u0007/\u0003\"\r\u001fW\u0005#\u000e\\8\u0013'dh0?΂T\u0010X\u000bXxY\u0012I\f\u0002E\u0010\u0006;; \u0015\u0007F[i(\u0018\"Ֆ\u001d\u0004\u0002x%u\u00158\u00023w;#^t+ip+`z|\u0017|\u0007[\n\u0018\u000f\u0010\u000e(My8VbC\nh\u0003B!\u001cL\u000e</Әp\u0003Q~\u0012yzI&1\u0005^Ue\u000f\u0018-֡\u001bG\t\u0001\u0012WC8aP*\u0006y2x@檫+\u0007ZC\u001fpIѐ4d\u0019\u0014]F\u0005~:\u001450\u000eexgLCk -nTc6n8?Ueft-x޽Rԫ\\n\\)Taq#h\rk\u0007ή\u0005i\t5u>亦Z-Ag\u00106C#u-(eke\u0019)5q\u001fԚLC\n\u00113\u001c^4ľ\"\r\nC^l\u0004\n||+r`Jfig\u001a?Ҝx\u0017l\nBS<D)\u0006xN1:\b\u0013\u000eX9:찡˯aZAF\u001a\u0015uؙ+,\u0012!`\u0015Ä[\u000b?v\nw+ޏI6\u0016J5&NnGdԚ\f\u0011mfb$QB`J\u0017M\u001d{$p\u000f!Uٻu\nv\u0011\u001eP{B+'\u0010bOR\u0014EfL\nqL)0Ls?=E'#\u001c\u000f}2ReGߪqS;\"T0\n'J\\~\u001dh\u0012NH!Vp\u0014C2\u001aĥs\u0010}2^Ik'<O\u0019\u0013\u001aBZ{s\"\u001b\u0011t\u0000\u001bAX\u0002z\u0019SVd\u0019'[6ƪu\u0019D52\u001frQOO\u001fT[}1C¶Dܙ\f=IN\u0018vɈ5SaJ\u000ficXdi}\u0019G\u0016\u00106r\u0004#P<Lz@\u001fY\b<Z\u001bmRx@\rX~lш6\u001f{\u0003r, D>ˡ}N&\u0013aq\n\u001b\\nǞ\"`y.]ȹE.T\"/\u001f-'W+\u001e\u0015\u0012\u0019?^\u0010K2j\u0014!\u0003xh\r\r\fe\u0019\u0002~w\u0004r1֭\u0017[\u000e5\f݂(!\u0016)W+wgC6'%a,\u000b3\u0019G!`_\u00106RR\u0001\u0002'ܡz}땦X`\u001e}\u0006z]Y\u0011\u0014XO\u0002bzB.\nQ%fMRs0\u000e2u\u000bM\u0011%\u0019_\r޻׍D)B\\A/\u001b\u000e&^\u0011;H^\u0015Ǹ\f߆ۚn&օ\u0017^zH\u0019\u001cPDW\f1l\u00045&U2WRc\u0012xA-eL^Uʸ\u0016\u0005]\u0001\u0007:\u0015BrwI.cR\u0018I3t\u0012\bv\\e\u0007>W-p/j/eB8,<\u0018t4\u001fR/S*Rf1v\u00126p\u0003\u000bR* \"qVR\tT+@Y\u001d2S\u0014Vv\u0002#pwL\u0004q\u001dj:uj50쇫b\u0011qkc\u000f1\u001c89-gc5<\"J]\u0001c|d\u000bly\u0018c0|Ʌ|.\u0018+E\u0007e1\u000b^\f<\u0000\u0010%1g``E;HM\u001a\u0007\u00029T\u0014ӽfU%SU%]\u0015\u000b\u00015\u000b*\u0019&SLWb\u0003d\u001a \f\u001cH|drF\u0016mx%\u0016\"nQl\n7\u001e(hў\u0006\u001b@zΓ#!\u0014\fXCV\u0004k`$j\u00106WH3E\u0016\u0015_$LK\u0002\u000b\f-\no.?\u00049I\u001càK=\u0002.*)\u0015\u0012dz\u0007X6__Pi\u0012\u0017pn`\n\u0014\u0010m^YiUH24W'NW)DcޠuF\u001d6*|I`q1B찬k*=fhi.\nደ\u0014G~\u0002Rᇟ/)_Z\u0005~\u0013+\u0018v\u0003S0f\\K\u001fԢJEk\u0017N\r(&\u0017\u0006\u0000mU\u001cE v\u0018'J8^F\\\u000f-]8X*f/|N`\t¸L(!4t_8\u0018\t)ė\u0016\u000e􊅃S{V8Xj\u0007\u0005;`ѳ\n\u0007\u0004b\u0016\u0011ރ/U\u0004U+檋p\u0002\r>LPFx\"z\u001eaU\t\u0016]+\u0004U_v\u0005VFE\bqqZ\r?e,йl\u0018|p(O֠K_\u0013g\u0001\u001b׸ߠ6pV\u0004o (m\r,0\u001c]\u000e%\u0010q\u000e:@CvtTi\n;\b®F)̆pvF0\b⅀)}\u001aEè\nR8`#w5*p^\u0011ldS+\u0016F\u0012֮R\u0004[2z#\u00183j\u0000\u001cE(TV3\u001cy\u0004ВZRP4\u0017J5%:\u001eݝ\u0001R\u0012]bвM\f\u0007X#D!K\u001aW\u0017\u0011i=\u0012Q\u00044\u0014BcUWk'u\u0012r\u0002y`.=ن\u0017J\u0014\u001b\u00100xdk\u0001c\u000bҨ|4$ރ\u0015Ce]\u001b)(:[֬'x0J !1u!\t[@g\u001dr\r\b.\u000eeCD7Klh\u0019JR\u00155lh\u0010Nb\r\r\u001b8`]e[QCR:[ʸ8el蟠7\u0005~2<\tSF;\u001eW-G|\u001fo\u0019I|vFw\u0005B.\u0002%*\u0015ʱ??\u00070l=) vgFiC+j4ap(^\bf\u000373~(xb콵7ͼ8u\u0015XٜqYFB[sjl\\Տ6:ǾhOw\u0019\\Q}C`f7cX<OX_z^\u0011r|\u00149HӜp\u000e^nzOgCbC\u0018_G9[^\u001boo\u001b?5WUj8\u0003)(8քqūFdX+y\u001fQٳjFǘٝ֫ipv\u0018EL0еV7[&\u001e\u0011exo_s9n{u/Z T,y6ܨךډ\u0012Ǫiu\u0019d:^Ax\r-`Zoo<W\u000bwBz*\u0001-W\u0007ӹ޴\u0016\\p@'--xa2v\u001d\u0016fWe`%^\u001c1]YG=fMyQY\u0018\u001b6,\u0012[\u0018,\u0018gFB>A2]xHŤHf\u001enIVmǼ^:]f\u001d5ow]ic\u0019Q-S\u0014,/\u0018pľ*e_!\u0013\n\u00072uכtޏl\t\u001b\u0004\u00042}\u001dw\u0010or\u001c\u0006k\u001cX91\u001c<\u0002T\fE1Z?8\u0002U|\f{\u001ciݻ\u001c\u0011]tٴ\u0013wYN\u000f_+X\b\u00045*ǡf\u0002khkI.m\n\u0004o\u00133yTpv\u001dHgoePO7c;\u001a[L]]76\u001b63\u0002G9\u0000\u0006\u0014A[\u0002D޾\u0002މ~DCEb\rF^0YSͧl&&Sp?p\u0012Z\u00147̃\u0004\u0018\u000eGmg@z\u0017ܗ\u000eރ\u000e2\u001dRe!u\r\u0011)[5L}\r~\u001e\u001e\u001e8شج>J2䣲\u000b>\u0018QH\u0015oaul+pm\u0006z_p/5\u0007y)N\rw\u0014|\t_ ?\u000e\u001e\u001aL[\u001d$\u0015o54#\u0005,@#\u0010&\u0004Sl\u0012\fދB\u001d%,\u001bAM%n{lV\u001e\u0002\u00175P;4\u0019l+QvIeX!\u0018ɱ\u001bu)\u0004IUw\u001fgO'#\u0001hvt!\u0001k/<:ـ\u0001\r4oSGxRydv\u0002:fHϗ}\u0001/νy!\u000fx~;\u0013n8/L\r޳TߞO\u000f7\nY'Y&e\u000b;\u0010a~J\u001f\u000fj;\f{H6\bo4҇\u001b~\u0018C\ft7өRӿ\u0017/\u000f9\u0007`9J\u0001 ,\u0001:\u0019p8Jg\b}j)wDP\t!\r\u0001S\u0002\u0006ʘ6YZ@CvQ1s\rs?2=Z6]\u000f6}\u0003/Ԗ\u001cofFv[b~(\u001cufn+\u000bր\u0003G\b\u0001u8'ڊ\u000f|m\u001d#\u0005F\r[m\u0005\u0000 kf=ǘ?c/]D{/D\u0013\u000eWl`\u000b朓\rmOlnVK\u001fJ1A\u000fr\t\u001c\u0007\rЍ\u000fh԰\u0013\u000f\bYO[\u00127\u0001v\u000e;̯\u0000&ަ!u\u0019L\fIZ\u000b\u00032O$\u0005\u000f\u0016㞕\u0003bױ`Gaj2 AC$\u0004`\u001f1\u0006\r?0\b}\u0004߃ܛ{\r%$\u0007Nc\u0015k\u0014J\u000eI2MQex,d%XZu\u0016z\u0017&8\u000b+@,+n񷲮\u00194,-z:e\u0000/еt@\t\u00030벡G\u0016wM,\u00197n\u0006_v(\r0lw1[!\u000b(,mHy-\u0016c[|To1I\u000eoE'vhk]\u000e+g9 \u0018%\ro\\q\u0005h05ħ&C*[PU\u0019K&trF\u0016;9\u001buZᝁ8@Z=@!0ٛcFyH\u001b+zon\u001e4%s<P0&m6v\u001cDhz3ɰ75hF )&n\u0014H\u0010\t\r\"\u0012l\u0007ݨ'\u00017V\u00001,>V{0\u0017\t>oN\u0012!\u00138;+YC{\fҹ7GM:y\u0019uh\u0014XOo\u0016S\u0001l\f\u0012@_\u001d-Z>67l>\"\f\u000f\t_̂D-Aѵ W9H\u0000\u0000\u000b\b3\u0010\u0001xDR\bO\u001e\u0011I܊\u0007\"r\\\u0000T\\| 0Rg*Q\u001c,J\u0015u2\u000b8!Ԡz[]v\u0014A;H\u001a\b24nmK2\u001a\u001b<ɈՓ\u0016\r2\u001f\u001c+\u0003\fg}ԹUIr19Ky\u0012m\u001eϛ8hqv\"ѥ2OV3n\u0018\tr\u0014/,\tII'Ɂ6M*Ȯa\u0016[r0\"\u001dJ\u0001f\u0013@Z\u0001&:-\u0019eFo?dpɃv\u0007[Ordkt/FK\u001cH A\u0012\rݤNR&\\\u0007r}\u0010<>\u0013*>P/Ι\u0011\f\u0001ȯ4:_98*v&ub\u000f\u0005I[R#ǝzR\u0015Fu\u0000v\u0015UʌQx,p20\\1rn{a]OR\u0010]ohm\u001a6guкb\u0004\u0011я:A0}y5\u001e0_\u0002u\u001fqFZc?1[4aoji,y\u0001<\t[FQ\u0015\u001ba;y2\u000b\u0013C\u000b~/G?@D\u0000smk\u0018kFٻWef\r<\u001bLK24#t8n\u001f9ܦz:t\n-0\u001bp\u000e9Gz\f-1\u0007\u00159t\n3\u000f$\u0015\u0013*蓭d&s7\u0005supao0,bzLDhu^*0|\u0013\u000fv\u001dTsј}s-\u000f,ˆGa^\u001dZ06]Ui1tq%e\u0018AHcW.\u0015\u001dǑ\noSs)IƿHD\u0015_(:\u0019\fh]=\u0019}-8AZp'\u001bڅ@t^Vڙ\u0006Z\u0018um,\nԚ\u0001\u000f$k4a-\u0007\t[Co\u0002\u0017s!|Y¼^\b\u001bf\u000b\u0014&s&͒l)!}s\u001aR0D4\u001c_bd$&`\u000f\u000fP{u^&˅ؖ|T0@/R\nNʲSp\u0015\u0010S_UNǇ3ghY\rv\t\nD!\u001fQ܋\u001a?$^z\u0010\u0005Tu\u0017C\u0014L\tb6Y@a7\u0019'W^S粻\u0015O#\u000f>d'\u000eW2xX@\u0015civ\u00135!|YZξQ&\n\u001b:eܸ\f=e\u000bn^T*z\u001az\r\u001a/m[\u0014z\rE)[XR.X\r&\u000flu'\t\u0014aOXJF!\u0010﬙PΔ Ѯz\"\u001de}R2'=Vc6\u0010)\u0015t<21\u0013\"Pcj=Qw\u001d\u0013\u0018\u0004?B;#\u0004\u0014\tA٩~1gV\u0011L0E)\u0015wbZn!\u0007\u0005\u0012n,\u000b\u001c\u0012&O0D\u0002c/\fFЏ٨#1ws\u0001ml\u001c\u001eocYMB\r[]w\u000bo{\bؒU\u001aheb\u0002̝&la\u001ei\\\u0013|ǀgSΤ\u001d\u0015)1!^͸1z;>2ylPş^\u001eEVKrI|be\rXo\t35>\u0011\u000ev2D|DNPkt B\u001aI\u0004NظbFutPE\u0004́\u001f\u0010t;embkڊi\bZ7Ԙ90\u0007弁n_M#I`,ݝ,ج\u0011f~\u0003X\u001bͥgV'9BP&%!P\u001c\u0015\u0014r\u0004ZS\u0011Ҿ5\fGp\u0013yv\u001d\u0000݈l#V/\u0012U[O1{\u0012GV\u0012\u0000f\bhs#F\r\nN8gUoOY_FH!\u0004pYOLH:0G4\u0007\u0000L@y\"C\\\u000e\u0014\u0014V\u00196IJ.\u0007bO,D'$MN<ipKn*&\u0002<~:ȿ\\14\u001d<\u0018L\"M\u0015>3`)\u000f\u0002\u000574\\\u001c-FdԔH\u0005B\u0017\u001d[\fQ`9B&EQ\rG(\u0005+q\u0011\u0011 'ޞ\u001cGlO3x\u000eG\u0003I)#\u0003Ӡ4nHV2YtULS״Yء\u000bmtֲ:)OܑW\u00039OS\fO^a\u000b>\u0012\u0007m\u001aflDN\u001e\u00147a9\tϻ\u0012/K\u0004fߜr\u0004\f|'wX|\u0005s\fiK\u0014by8R\u0014H?.\u0012p{r'g\fy`Tq\u0004L?S#p<&\u001aa/c<\u0003&W|\u001b%Mch~#\u0019Wܹx-DMxNпa8ɽ#ukwe=z\u000f\u0003\n}?2\u000e;[w$\u0002k\u000b\\C\u0012+\u0006\u001c?3Kek~Hs7j\f\u0015\u0012P\\C:~{6.Ҽ\u0015\u001aR0%Hp|>*[D.\t:S#̌\b\r{\n߯oFg\u001bgf)d9fRӎ\u001b\u0016fK|:=e}?d'zE֍c^xt\u0006!\u001d3\u00072\u0007B𪮠4\u000b'&ZIYH^\u0018\u0013}f!\u000bH\fD\u0007!5\u0011yI\"\u0014s~N\"Y\b*\u00070\b$q\\=v,\u0004!'T\u0016i}/d@|\u001cj\u000bu\u0017LU\u0007a܊RC,tm\u001aҋ2\u001f֊u˨\u0016{g\u0019Szl\u0014yzozcl\u0016Կ2U\nJt/Q\u001f{_G;\u0018{?\t2ΓN+rk\u000e\b~{8I'Ϊsn U3=t\u000b3F\u0000n=\u001e\u0005\u0004\u001b\u0001\u0006\\%\rN\t,\u0011*\u0012\u001c\u0001]HC?q\u000ee2\u0010u(+z,\"H\u00046\u0011ʥ\u000f&\nV/!Ŏ\u0017A&q\u0002c'-}\u0013=|S\u00047E_űQ,\nGI]\u0005d'\u0017sZ\u0016\u000b$ma,\u0014DL{ؿͽmoo6IϤ$qiS%ОZm8§\b\u0014btJ\u001e\r泧J$\f\u0005b\u0015sj.C\u00020i2\u001dƯ\fZ\u001b¸VpuθO@?\u001e@`KN\n\rKvH-|, ^-GK\u000fH<mj{\u000fnlK\u0019rp瞂UefG\u001c/$ܛWkb!_\u000b(6\u0013-n.0ۍf&K,K\u001d\u0010\u0012hr\bh\u001e\u0004\u0019\u0001\u0002\u0004\u000fHBnEj_2\u0007e[@AK|\u001c\u0011922#S:Ճs2\u0015ܷ\\J-v\f&QD\u001dѷ.\u000bp\u0019PiQDXޝD1\u0012!~g\u000eyVGB\u0007\u0018~dfD\u0006[\\\u000e~{\u0016õD\u0007W\u000e8\u0013A*|K\u0003d)!KDUw\u001a\u0011{L\u0004i*?):B\u0018Jkâ#}\u0018GŔj\u001bq0N9\u001a\u0013IZm-h\u0013a\\dx>\u000e\u0012#\b_:\r\u0006\u0013!\u0012AG84\u000eh+2nvfګ1_ɯ6~8\u00027iu9-e*ٶn\"rZ؀lHp\u0001=%dN$\u000bj\u0019\u0006dö\u0014;m n<ּL$E~\u0010Ѝ݊h R\u0002D\u0018Z\u0017\u0013G\u00068m\u0010Ѝ=\u0007\u00121\u001d\rn#\u0006\u001eҤqX\fL0N.&s*\u000f&\u001aфp4cM\u001aO\u0019LAJs&%5\u0004{ٸ(o볇m>nU?N&]A-\u0015R~_0y\u001edG-v\u001bJD1AΧl\u0000\u001bRa\u0003'C\u00174)'\u00173B\u0002%\u0019\u001c|\u0018qD+!\t㔾v_ȉCte*fZχ7r\u001exf%֧eWw\u0007KVMI\u001f\u0018(σ.uhr]\u0002͒GAHh\u000fһ\u0004{Mi\u0017\u0013\u0006FIe9\u001e.rr\u001b`fWraBaeT^^7_\u001enKzg\fތNO+Fj/^rV`2\"/c\u0010'YyG\u000fGqR\u0006*B\rU̵f\n$\u0014mV)D34y\u001csjrTt\u001am\u000fˍײk+}6]\u001e\u0010H\u0007>;\u000e8*%\u0018~\u001bn_dوQ-!I87M^w\u0011L\"#U'rXm\u0018ˋ5<C\u000fE\u0017<F\u000b{.MRý8tث\u000bL\u0000T\\甑J\tJ?z\\\u001dJ\u001e@<WƳNJ\u0006{;&}\u001bǟ)e-L\u001eN]{ۙ_7Bs /@DXIx;\\̑\u001f\u0019-Jh(>1\u0014:DJLXqcK$*)ϧ+_${34!\f=բ\u00176/a\"c\nfC|,_E`\u00126R\u0004AjdI\u0019A\f˵o\u000f{s􀍇>ՉVni'\u001bC$Ԓ\u0014 RrruCE\r=IDC-\u0011$JW4I7\rrN._\u000f\u0010\u0007\\J! \u0018񹃜ǌ=\u001aϞ\u001fv\u0012grΖߣs\u0005lW|ȲIc6\u001a]Ӣ6yYƋV|^=<̊u%O\u001a[$di!\u0018}q6#\"\f_\u000f<Q?\u000e\u001e\u0017|㤃2rt˗yi7',.?/5O(V4\n+A\t?eḞ\u001b[tm{o'j\u001b'\u0015\u001c<lqhc}s_\\{5/ռI}f\nƾzU/w\u0018}D<T[mrKԊ;\u001c锊q%=UҮLu\u001fq\"%/6vJ\u0014DA4P\u001b*z{ȗ/K.yH\u001d7o|\u001frIߝ\r\u001a\u000e\u001fk<-vT.3\r\u001f\u001cU2>}Fwet9G޲(\n\u000f$\u0016\u000f\u00145\u0014GnǪinzJ~>ؗഁ\u00150\u001ch|\u001eؿ-g^Z\\jWE`&\u001fĂ(Q?\u0010\u001bK)OW1WS5Lz!wYzDB&t.\u0015D5-LO)#\u0015?FzbBdtJ.st,⧆\fLeoL\u0006/-\u0011\u001aZV[P\u001f\u0013ƥ\fFEjLyZ-\u0010\u0007\u001d\nO|ţ\u001f4ׁ8LmS\u0010Grn\u0000\u0017=wRL~\u0011<W\u001bݤ>n`b\u0005PL\u0011\\T7t pu+E}cj^_M0s\u00169Z\u0007T0BX\u0007䕛EI\u000eƠuYZRљu6]NI\"W5ӌ?]YO(\u000e76OW^߯s:hQ>-tw/'==`9^+\u001fSc\u001e<LOQv7#T\u0002\u0007}}zQ$dۈ4Y.zuP\u0011Ƭó6g\u0019i\u000fɹi>%\u0003~x|\u0013$k\t<#\fm#ι\u001b\u001b\u00179YحN\u0014:\u0002awIt\u0014&lf;8<X/rg@rqme&v,>S\u0018\u001d>Hn1W}iR!s\u0010:#^nzrxW?VBWaqrJuj8_v\u001c.\u0004H\u00131@\u0016sdn\u000f֫tTn|޵!\t\u001f\u001f_amF\t=XY~}DEo\"N\u0018ڄ9瘇\u0002O}yx(\u000b\u0013>$FY<a+\u00168mOp\u001c[.SLY\\4yo5bvq&A&\fz\u0018fsO\u0011s>4HOv\u0002/\u0013$<}?]՞@a~1*q먙m^JJ`\u0016]{Va\u001f}}Wf\u0016u\u0017\u0016߯\u0012A0\r\"#^>F,{\u001dT%W\u001ep;\u0016.2oR)Wa ,\t^\u0011\u000b\f+-t\u0005קwqI4Lg\u001aA\u0016*ǖ\u0011{ͤC^f\u000f;^!mgكی%gǉܫ!\u0000\bھh_H\u0005\u000e燭c{5¹\u000f̚\u0018h7<\u001c~p=n֡7Ifi/h)SǷ,\u0001F2%$P<,\u001e\b}4[>f\u001e\u0012r;/ko?\u0007>Fg&OU9!9\u0007۪7\u000f\u001dYm\u0015{kٻ\u0017\n\u0001\u000bL\u0007k-j~\u001186^pD\u001f\u001c\"dTEv[d=JL8V\u001e~nۿ}J}]\u000bb\".fZƫ\u0012GD2)[\f#\nhA79g\f^\t`Grbz\rz\t-\u0000I=QU>\u0014#n\u0001i!u\u001d\f1EjxLJȌ\nz|aJ{3}䓡Nm'\u0015Q+&l[i\\TNs\rp\u000f^\u0007^\u0011\u000b;D\"\u0019uqA.~|!:tht\u001ci0l\u000bɣ{WZ{$yi=3Q\u0018\u001f%p7yt'\u000f\u0019X\u0000Ϥ\u00016,X3^\u0018h\u001a]ci}f`\u0001|>\u0013{Es뭩W#\u000bdqƦW8\t,\u0000la뛉\u0005Lm\u001aG,0\u001b|I\u0007FE\"\u000b\u0014C2e\fׇ,{C0tt\u001cq犆U\u0016~$0\".<pȇ\u0013uzqm\u0013Q\u000eXVj\biZg\u0015|$KA 7Kh\u000eqǝ,V;)\u0018ΔD.\u0014{^RT\u000e\u0010;F\u0004s\u0018\u000eé\u0011\bw>5/{ՙr&&4+\u0000`MX7hf(~4\b$q\u0006:\u0014QՑHZ\u001b\u001cڏI}<&*^K?d\u0006/MV\u0018Bڍa0Þyr\u0011r5,O0)eD7%Sj\u00135\u0011i\u0019aKz)MZ5*oC=\u0006+!Cߞ\u000eME}\"R \u0014@b֠Q\n%'\u0014Rۃ~|jA%\u00154u\r+< BE|~8X?d)\u0006\u0005\fS/ĭdZLv%\u0002\u0014~h\\*]oA\u0019(8kW5?ewSO\u0007\u0006O\u00146rЀUYZ6D nd<H)1eJ U*禦T_']k\rNWԀgjXظ܀\r<Ye\b!{xRQZ1lpeC\\Us[Ye\u0010!6<\"Z\u0012\u001f[80tyg5M\u0006^89E]Y(v/+Ad8\u0002$UIh4KYI\u0004B6a02*EUr~cJ\u0014*Ƥ\u0005\u0002aiG_AEm\u0004l-\u0002\u001a\"]b\rL/\u0014p\u000eG\u000eiڟftl<\u0016\u001c\u001c\u0014>D{ˇo7D4tsO4!n-\u000e~M-Wy0#Fs~o[pf[˴\u0016rr(\r\u001fK\u0001\u0017\fl\u000e9-\u001dҒ\u0015!\u0012\u000f\u0016:]Z\u0002Y\r\u0007\u0013^`\u00101(u\u0006i6Nq$\u0018\u0003pHo\u0010Gb+\u000f}CC\u0016nH*\u0007\u001a\u00000_stq0:4k~i.j\u0005\u0010nL1o,7)\u001f\u0018QcV\u0017!VGf\u0016\u0001'\u0000(8\u0010\u0005\u001a9?`u\u0006\u00007XB\to5&`uޘ\u0017õ\u0005\u001biP\u0010\u001beߙ$]6\n\u000fq(ʆeӭ\u001ctuW9\u0002wcq'W7O۸\tf\u0017EpNf\u0007*(m\"+c\u0010)F_.arlhI\u0007O/^]\u001c9\u0011\u0007s\fq^l}!hm\u001c\u0018qJ:\u0006\u000e2\u001dDE4Jwx9FtT,\tޱ\u0015\n\u0006Q.{\u000b9ӍxCtV\u001dM&\u001bg\u0015/\u001dEI:\u001a;њ-EiL;ƣ#ڡPӎٜvZHo<\u000bMiG\u000eڊG'\n\fap\u0012mL%m\\D\u001dgh*57$Eh[Alnqls\r+PBk8$\r!/-4e\u0005JhyXn|cx:\u0001j+Q\u0015ˆbʭMC\u000b\u0007*>\u000bI%T\u000e{\u000e9A\u0013W)dКDc5)$RS\u0019H:NaIa4jF^\\K7ĵ\u000b\u0004s\u001dfrޣ6%ݮ&t@!6\t)kK\u0001\u001cMAi\r%[QcCdIB\u001bJ\u0011$~`\\6q\u00062eqdJK1,=GtU!<46-͕;abSMP@USE@\u0019}O=ZƵAg\"\u001eP+&in\u001a0BH\rYX\u0019N_7fO=\u001fqM8:<QHq>^jF!6KM\u0019\u000fG\"ќ\u0006|\u0010\u0018ݦ8\u001c\"\u001ckАiDyAC\bN\r{nZ\u001d_\bX9\u001c|̇+c>L\u001ah\u000f'>\u001fa0w\u000b(/-04\u001b\u0018\u001bj5PSۙ+<0$6ɒК\u001b%XZ\u001b>QsGތ\u0001\nye\bbM\u000e׳v\u0010aV\u0019v2b˚\u000e=rO\u000e=\u001cڱ)ow k90\u000f3eM5`vD\u0006;&\tF\u0016T\u0014\u0003ۻ(\u001c}ʸa5\u0004yka]\u000em\f-\u001c9Ⱦi-pc>\u0007_ђ`q6'\u001fK߭X8(r?hmʙC\u001bN\u00198sþ$K]uY0͜1]TO\u001f\u0014XT\u001aes:Gj.\u0012CUΣ/\\\"e\u001cSNq\\L4\u0006\u0019\rzc\u00073\u001b5a\u0015Q:\u001e}̘\u000ei%%\u0012\u0010 BƤģaB2Q\u0012\u00140\u001d0 $Qh\u000e%ϵ\u0011{nv\u0013\u0007;\\ ϵ\u0019z\u0011\u001d}z}snf|lNnR\u000f\r\t\b:\u0019rK\u0000?w}v l;B\u001ck\u0013\u0018/\u001e&_\rB\u000e!\u0019 g\u0003}L\u0015mm.&Ka~gk%lqn\b\u001dg\u0002uR\u0003;\fjx\u0005P\b\u0012\u000b4Q\u0012\tlk-*iF\u0018=-\u001b?Nd< P_S螿`h\u00198dJA\u0007;5\u0018\u0000&gr)\"ѡ\f0\u000b43N\u001cn\të.w5),:OSF\bt?(SVn\nkN:\nؘ.=\r6\u0019A|Ws\n\u001bt\\>Ps\u001dPtyar?mȸQ\u0005\u0014\u001bXF\u0019\u0001mgr\u0012H=C[O\r|)b?&s,\u0007\u001a\u0011FTF\u0005=ԝB\u000fο`ZvG/X7X)\u001a6_Yh\u00073\u0016ތ\u0005iN[\u0005Λ4\n\txW\u00021\n]\u0006\u0011ڨc'g\u0016\r]CMGu\u0016\b]ФC\u001atl\u000f/Zi3d|6PG=r\rV\u000b\u0017AM8y\ru36\b\u0005Gh7\u001e5'\u0013f&ս(\u0019hN\u0018&wDs#b\u00010έ\u0019/,\u001eZhMȤѩ~۫{hf\u0006M\r \u0000=Ǔ>F2\u0004M\u0011^Ml\u0000\t\nX\u000e6QQ\rE@\u0002˜\\%\u0019Ij(X\u001ci\u0011d\u0013a@ \n!I\u0007\u001ciJ\u001d5L\u0004^5E\u001d\u0018ϡ;_\u0010:ƕ/\u0011B\u0001=\u0006BJ\u001d\f!#\b4\u001bqItI\u0019차7cR\u001b\n{jc͆T1\r\u001a+\u001djTq?\u0004Ryoښ\u0016?\tzo\u0007U\u0007I+u\u0007\u0017h\u0013XL\ft1\u000b8=={ot\f\r\u000b\u0006=-7\u0018(*%\u0000%M\t @=\r\u0000fm34\t\u0005gTQ,ƨHwLAqHX#fP*\u001c:M=Al+\rBjz\u0019C^\r\u000b\u00164=!F!\u001b:\bcrFE\u0010<\u001dWmYsс\\ܜ|vQ8\u000eu<\u001d\u0011У8!\u001cַD\u0014ǹ~@u& {4bpx\u0003_\\aI!!7(\u000er+L}^\u001br\n\u0005\nFrS\u0012k~\u0001%\u0015'\u001e6c-v\u001d٠֪ĨqW\u0017w\u0018\u000bg7nOJFQ\nj^\u0014\u00185\"\u0018|\u0004sRM֚W(g&f F\u0001VZ[:R\u0005f\u00020S\u0007=cF7pYL\u0019\u0018\u000fg_\u000f3J\u0001\u0018Q{L\fތ{OoQ\u000e#Sn.A\u0013n\u0019bi؟$F\u0006{)VYJUĊsC\u001eъ\u001b62K\u001ek\rQxT! Pk7J\u001bB%,W]^\bifv#\u0016xc\n;Qp~7K'\u0013\u000fZ{fV~~\u0001ckԾ\u0005\nqm\"i6)\u00016\r\u001d\u0004`\u0016X7k\u001a\u001e1/\u0007j\tc\u001d\u001b噜mR$q?lf?3v2=/\u0006rd\n\u0005\u0004f\u001c\r+ks\u001c\r7ui$\u001aOi{\"(1Cp*0*,]aL&c~l͙ɰsbĊYM:\u001cS+^ᢴXQumEiNHWpQZ\u001f)ϭ=\\;\u0011\u0013\\z5WV\u0002`EB\u001b\u0013*\n.J\u0015UApѸUx\u0018.Z]\u0003\\27饎gR/TĬt(q㮿^\u000f.LXQ\u0006.\u001a(ࢲ\u0011+8pQZ(\u0002kEi\u0012*3\\\u0016+\nݬ\u0003\u0017Ŋʢ+\\\u0016+%=Ei\u0002\u0011.J\u0015b\nEi>\\3\\\u0016+*;!Ei\u0005EiJG(-V'\u0017\b\u0017Ŋ̰RwpQZ(\u0005րbExbEUF\u00125Kl\u0014z\u0010\u001fSybE)pQZ(eh=&k-\\\u0016\u000bN\u0002\u0017%<\u00155\\e0RNuࢴXQ\u000fȵIa\u0001\u001eDEUM\u0002\u001ekMƃ&ZI׭Pל9k\"*p&j)uM\t{ll(QSշ\u0003mȹh]S:Q&=\u00165)\u000e\u0014\u001866\u00122 C2K\u0019S\u001f\u0011٥t[\u0014\u0011\u0010*Rzhʘ\u0003.Acڔ1YgAz*cjy-W2\u0004PN.cB\u0013٣1)ʘJ\n\u0014Ͱ*c3WLi5W54\njteL}EQ,c:W*5MD,cJIu˘\u001a\bQZT9֬*ڡ2S8XgChP\u0001؀\u0016(Qr\u001b\u001b\u0016pՕ_&vS:AFk\u0013Ez\f왫xR[D\u0005\\ԡ̡3zF\n8Sġ!\u0015Nwc#\u00194\u0015`JCc\u0012)Ƥ4'7?'6\u0015Jfd3ʹQ\u0010@ַ]\u001cd\"E\u0000J\u00036t*`\u0011\bB1YR:)\u0006>h؏\"j;*}Bt\bX'rL\u0016\u0006E\u0015i^~\u001aM\nm/\fe.`6i\u0007\u0012\u000fA[\u0006\u000ev\u00146E0\u0003&'A|5eq:̪-Gs9aV׊)boE\u001bW઄>c\u001d@ \u001fi\"L^$\tͅ\u0012\u000fY?\u001a\u001e4V3V{\u0010_P\u0014\u0018Qv\u001ayg\u0003i\u001aYuBˁʎeW\fŢ\u0013aVE!*9K9=h\u0019unD^%\u001cI\u00106\f0}(\u0016aZj\u0006E\u0000jR7D8ʦګk,JikUK\u0019\u0010ƂބeUIِj\u0004\u0014enTNt]-6jcRu8\u0002pRIk\n޴+#]}[\u0017LWͫ\t>bA\u0016\u001ek:^;\u0018[J@Aeָ\u0000\u0010|l턴G\t]lcyM\u001bZ\u0018ҟҴymJ×\u0015(ۆ\u001ee\u0013+A(F\fs_\u0014vSN7\u001f5:}Kb_V>;ZAΉnPS\u0006TuD{\u0007\u001ek\tlOJۏV|XfU\u001d7Dޏ`\u0018W\u001aN\u00136Z3_\u0012@f71*x\u0003B(R8ʴ\u0014.9zsk+[wItf;wRAe\u001f9GtI\rQ\u001aZP\u001f\u000b\u0017C+oL\u000eEst.~gޏ8#tTcTⱶB+kF\tB\u001aѨx)jCM\u0016Juc{\u0012\u0018MTC\r\u0015J]JR7\u0017(\u0015Ju\u0001sMϺV]` 8\u001aA\n\u0016Qh;粫_#1\u0007xϠ\u0005M-v(*)Eu!aV)ȉfɔ͍\u0007d\f2TO\u001e6@aݹEX,p9\u000e\u001c+\u001f-\u000fv˙\u000e[\u001edh_gډ7=\u001a\\q\u001bNhatw<\u001c\u0004\u0004m_Ծj%վ\u0005FZ1v~?yfZ+\u0017:خ)\n\u00146\u0010_SأH\b՚-fTO_/VԀ}f4H\\гvu@!f\u0004\n?\u0006\rc%#݄~4W+tҟ<&E8\u000f@u೫ݘĹ2\u0005q\u0006|J}O?鵙ȑ{m\u0006n\ts(<\u0003X\f'Lڀ\u0018{-n\t?M\u001eɾߤ\u001bQC\u0000\\Y U伲;6qrH\u00046o6KgS\u0017\u001c'C\"gS\u0002\u000bdbaX0,0\u001b|IKi\u0004۵al!eo4\nVJfكۆ5a\u001ew'\u0002\t+\rfO\u0002#\u0003W|Vʞw}\u000eږ'\"_9v\u0016^\u000bY\r;h,M)Ic󓢾v%6^z\u0013\nT\u0004\u001d2>\u0012hx8(_c2{`XN\bJ\u0007V]hI\u001f5`B֎bǪY2D\u0015v;!\f\n`O'\u0010*KH%h:Zi}\u0006јl\u0019a9ZcһTaQ\u0014͡\u001bHtYU/I#rNLNVDW?>u\u0017\u0013]\u000fu2B }FeĺEK\u000e\u0019>ic3윐\u0014\u0017&4RdK_SJs;\u0006\\n$Kh]fD\u0004%D'bVpv4i>s\u0013v\u000e\u00166ϜeBS^O}X{Lέ),\u0000@eZנ\u0014bm{\u000eRFW^\u0019\u0006fs\\Ch=|\u0014P\u0013Q\u0001\u001a\u001c\"\tc)#sD7\u0001LJȁ\"_+ڮצc4_\u0001Wk$6\u00029\"㨣\u001fV\u0003֚JZ#ׅB4G+íjcFQ47&,)\u0013\u001b:#yJ4q[`\u000bV \u0017E]m9 \u0018i\u001b#vZJ\u000eO/(פ\u000bL!,\u0007s7H+M_ґr]B\u0011ră\u0000Tu9yHk\u001cw]W[E+\u001bF\u0011BʺtyET\u0011H]\r[\u0004i)f:\u0010+RG{n\u0012)K\u000565\u001f\f/k)\\ds)\u0007sSsqn*w`\u0018^xx7\u00131QXR\u0004;G\u0012BSN\r\u00148\\;X\u0010\u0001\\6\u001a&Rt\u0006;¸\u0015ɠ\u0005Z\u0005Y\u0005;@\u0004r\u0017\u001c]6\u0000r\u0005?uH\bH]7j\u0004`q@;\u0018=\u0006\u001fY׉\u0000v1E>R.\u00186%!8\ta\\׮!:E#l+\u000flmfA\u0004Z,&%GZ\u001d7\u0011;\u001dǑ:\u001b5ׁϩ@:j-\u001eoUR\u0015(h&6\u0011\bZ,\u0012q\u00118\bvt\u00068\u001b!\u001b측͔J9+6;ʟrg\f\"?\u001fo2\u001cK#7vO.(iZ\u0015y\u00131grU(5Qƪ;H\u001b\u000eګ$\u0002%\u0017ճ+[g=b\"z j\"M/\u0012&\u0010\u001d]A+\u001bɨ\u001brevl{\u0019<7&ŴͨjSeB\u000bI:\u001c˘\u000f\t~Eh\u0010\u0005H\nl 9\u0010ئTɾNZ*\r\u001f\u0015:NsӐ[BU\u001aQ\u0017DMUw>m\u001cal\\\u001e0_xMsMF$S~t\u0006m$E\u0004p5V7T\u0010Nj{N\u0019`P(T2VVּ6Dcd\u001cCCW\u0007wY\f\u00136U(i'~̇+1\u001f\ffq\u0013+n;#f+_f\u00033uH'A\u001b\u0018F\"\u001fٞ6N#;\u001b=%Է-_8/_.D\u0011ni|\u0019Zznqk\u001b(I4ڃM$k':ǟ\u0015r}j\u0005fZܭ#o.D\u001fg0谭i'4/\u0007&STI\u001dB\u0004q\u0011<y\u0010Ve\u000b++$WN`_R\\:tVRLe>JV7z_\u0003z@\f\u0015dw<N\\ؖ_\u0002\\NIg0C\bI~\u000fM\u000e\u001es\u000f^*y0\u001fSm[/m۹?\n>I\u0003__sA6&ʿ\u0011\u0000m%\u0012\u0011MBG$\\&!`O0yֈ0aQwMbutJ\u001fkYׇsa0i5]\u0019w[I=F/<*,Tu3ǌv|Nk:z6\u0015rOvUkirO54\ng>t{37b\u0007<j\\ycdBq\u0007\u0017\u0006\u0014͗\tmr\\'\u0001Q/\u0018Oelc\u0016#\u000epv<\u0012{K\f׾\u0005\bHve\u0006j\n7\u001f\u0002\u0005\n\u0007;Q׫3\u0002\u000bd8]\u001b6\u000fȌ7{HŮMt fz\u001cJWHD~q<Vxet?E\u001e_e\u0016'586wmwZ:\u001dI\u0015\t3Mgz1=#)Dq\f1\u0005i:ܮXU*%.rK1\u0019Ѧ0u\u001aEy\u0011ND-\u0006\u0005IkC$Uȱ\u0012\u001d&ܷZ{a\u0018qLP+**ҾA%a]_ڌM=)/}5\u001d\u0001,5b%Tj,h\u0018%Y\u000e\u0011řb\u001f\u001b)YL~|g%l\b(Ǎ]\u0013եH5'\u0000\u0002o(*\u0019\u001b\u000b\u001en\u0018cl~0z@\u0018'խ5\u0017\u0018c9.e\u0013\u0018cEf1&߅1Ƨ\u000bGh\u001b\u0018+X+cOύal(0&zh;b.\u000b\u0006nuEUIW&bk\u0017+뾒o*tt}\u0005kPw\u0005k麯.(+\u0012dB4X(&[.k\u0012ohuFH@\u001f4\u0016kJX,XD\u0017k\u0014\u0007n[\u0006\u001b{\u00106u+։ུv.\u0019{>&R\u000eJ?R[kV\u0002&\u001a*kD\u000e[\tS\u0012:Q:\u0015\t(B%@OئXҚ9\u001cxXU0\u00015s~f\n̙RV\u001cxG5t\b=4a\f0]rHVS\nCZ\tF9tLbM*KU\u001a\u0016mqo',e\u000e\u0012p\u001e;ز\u001e^\u000b\u0002\u0016G_7\u00175{\u001de'\u0005ʽ,\u0019[oioI樲=-%o\u00047c`>\u0011Md\u001dM)l6\u0016g:\u001eڹp0m5\u000b\u0007+|\u001e\u0001e6\"$F\u000b\u0007[`d`#\"V,\n\u0007[`\u001fUe?Wv~lp0e躅i\bW\u0002T)V=:V\b\u0005'y\n\u001b\u0004U\u001cq\u001eAվ\u001cSi\u001bpմ\"\"\r#[صkP5\u0001\u0015AU{\u0004U\u0003Ǽ5d\u0006x\u001e!tt!9Ia86\u001bZ\reC\u001b+)[<:$:㵷\"\u0012EgDyd3i+\u0019QUukC/UzN݊\u000eypCo\u000b}3lj\u001d\b\u0014F\u0015u\u001ae\rۢ\nN`S\b6Q\u0004R`f\u0011lcSK\u0000\u0017\u000bV`\u0013MH\b؀ŋ[\t36ѐӮ\u0014\u0013\\\u000fմ\u001dc}\u0013\u0004p\u0003\u001c\u0005(tw-0m\b:A\u0018>\f'\u001fR\b6b_C{K\u0006\u0014!T>\rO\u0003h\u00055}\t_3~&\f'Sjȁ\u0005\f\u0010ݸuRZA'\u0003!B>\u0017!\bfV\n\u0004k6W+307QPv3lfS]脁_MgGNc\u001dNY\u0017q5*8\rZ[;\u001d\"\\^^s:ʸ3ۋ\u000e}̶֡7rf_kgmE#GZ&/\u0004ɒdŚe]VZp\u00152zf\fm6e%6Zۆh,Med2ߺm:|8I!l\u0015\u000f}\u0006\u0003\u000fGj}\u000bk})zM\u000bJw\u0019\"88h'\u000bchU\u000ffx6H\u0003i62\u0018ة\u0017ʨS?\u001dLxNY˗?{lZ-pO\n.\u001f\u000bI~\u001e\u0006h\u0004\u0001lV̄\u0013N_W~JE\u0016\tϩJkೣvJ?\u001dr~\u000bV\u0007@7*X]7\u001b1\u0002\u000ep\u0016Y6­C߫~\u000eS,:\u0019/_94\u0004z3o\u0002-d\u0010\u0005$w\u0017_Nk2]*0\u0003\u001dLJ\u0014\"OX\u0004 v~RBs0\u001fo|po\tEt{`\u001d8\t\u0011My\u0016?<\u000f\u0007 >`t\u000f\u0012\u000f]7\u0011<]\u001et7\u001f/ꃄ4ϠR2\u0007\f\u0006tCJ_ÎiLzy&П\t\u0005\\ iRz%]E\r2(DqƾN\u001d\r\t=X\u0017.\u0005.ΫH,\u001b\tf\u0019|\u001eE\u001eJ\u0005*\u000fz\nHz\"6,2\bLݤ=F\u00156I6\u0015.\u000bp\\\f^xss;3˝'ɸK_Zk\u001f`]'j\u0001j/'%'{Goܻ\u0010\u0006\u001eoK$FSqߠ>.XZ\u000brO\u000feDnDO?\u0003A\u000e_~_Eb\u0017/\u0016g{{y:s\u001cH\u0001\u0015^U]!N~gy8Rz\u001d\u001d]\nxnN\r?xhO<ŠQ~)]܇ω5\u001e4bnԹ,j-J*5G\u0017A+\"y%E?Y<\nq6>\u0005'c*h긔sJйXIوdQ؃ڥ|Zr\u001cN,Er`&\u00040P5#\u0000\u0014\u00166\u00161E~\\K\u0012?6*G3Rm5\rca\u000f?g&d&ϥ\u0015DG@\u001a\b(\u0016\u000eث\u0019\u001a#'2g^\u0011do\u001fڰ\u0007\nDB7@Id;z\u0019Ɛ$$\u0005r9UkM\u0018&uHw2\u0011}W\r\u000b\tV:AL'Z.Ƥ\u0018#d\u0019 j6\u0013\u000ff7ňϝ,Q }h\ta4wu\u001bCS:.\u001f,39t~TSI(0\u0017')߸A\u000fl-m\u001f{IЏ?5?#{y\u0010/:Nws\u001f\u001fЍ?~tGf?\nJ3O$\u0000sdB(`zILf'؞`j|Q}zl鷜*C7ß9lv\"\\}\u0002\u00160COIg@T^2\u0005ƕ^i\u00004jT(\t\u000e2]+6x\u001cFxJVcg<\u0003>8\u0017&\u0000ͅu y7\u0010QڞS<T峅Nv_k6\u001750;kGu֭\u000fdu\u0003g/A\u0019RFɠLi\u00066YNL\u0004/]\b$h[\u001b[\u0012p\u0016,\u0010f:}Zn\u0018Ў\u0016Ъ́\u001d\u001f\u0004$\u0017\r6OR;+]n~K֬x\u0002.PD\bNg\u0007\u001a3ёGr۱dUsYC\u000f,%s9\u001a#}hI%\u001d\\\u0011\u0001I\u0001{:\u0014\u000b\u0007Vt\u0000\"|R\u0013\u0001u\u000e\b|yi!vĘƤX8!]鷒\u001cp?^h?\u000e>;޴$^]t,\u001ce?F\u0017qH.\r\u0016\u001a(\\\u001bk$\n\u0012\u0005\u001f^\u0006ѳ\u0013.h\u0012Hr\u001f\u0002bS`^}~/g\u0011gXn$ըt?l<..\u0007Նڿ\rXlҁ|\f$\u0015\u000eK\u0010IBkG\u001d\u0007\u0017#I\u001dT\u001f>տJ\u0013l>\u0016歃˫`B彐\u0011-3\rjcN!\u0015N_sdr\u001aV\n3:I_\u001bE\\H\u0012Z>n,@<\u001dV̄P7v!\u0017Ls\u000b*}8! ^\u0019wnR\u0000\u001ct\u0018'YÉ\u0005L[\u00119\\hc\u0001,~i:ҷ?_\u001epOOWIiZ\u0012;\\\u000e\u0016\u0007̶R/;|Ij%p`)S*\u001e7jŘ.'P\u0018`dbZ\u0006\b!~??\u0004]\\J\u00161w\u0005\u0003B.,\u000f╤0Bh$Ndٝ$5]7S\u0004훍6\u0010\u0007}-)\u000e4g8V^\u001ei=P\u000ebk6K0\u001b\u000fu\\Ċdw^^\u001ec-y4폟ݙ\u0005\u0016\u0012Dc͞c\u0018\u001aZ0\u0016\u0001q%ݟh$:ݘG5\u001b~g9lܨW\u000fSuGi4\u001bʳN\u001e4ԫDFs!\u001dS7o`f}iYYV\bQM \r\u0017a_8ք\nW=\u000b\u0007;GzR\u001c\u001fc풁zX+\u0014٫l-׊:߸(fz%^=\u001f\n1,}%1A\u0017H\u0003\u0012Y\u0017kIyGWVؠd'\u0013\u0019ꔳ4ɁM$ĭ%0\u000eOLin\\^wld${\u000f8\u001c\u0001?-\rv.F+psB7fwcv\u000f\u0014~/\u0016n6\u000b\u0014F\u0002\u001fI\u0001\n~{|6\u001cG仚\u0012OT,h1un`+\t{\u0018!^}on+Z\f\u0002uCs\u000bUU!2V\u001ff?|Z .ɿ/SǙ\u0011X(gJc=/g{M8Q8u^񥗍5\fUz<eeZ\u001dǣ }$Z\u000f?1>G_cw\u0016ݰKA\u000bguOmСin\u000e\u0018wj<4\"Cxb}2<n;\r{k\u001b\u0019ڵG\u0013ЫF\u001c\u0005wJmF\u001bvז$ 33GZ\u000e>\u0015\u0018qK%Ghf\u0010Ls\u001f9\u00027\u000bʒ%\u000eB:=7e#'E\u0006\u0018-BgόO參\u000f\u001c)'\u0004Or&\u001b)\\O=\u001fr`KcRy:\u000e\u001c?4\u001fI$v\u0004>ymP*\"bh\u0012ˍǯh=Cq*ߠXc|f 8Qc)`+hQ\fF\u0017~=Gq3y)\u0000fZ֨\u001d]\u0006:ѕ-\u001dB%D[Ít$B\u0010$J\fr\beD(\\Ehoe\u0005*\u0011URpenxH%D\u0018<y1(H\n\u0014Ϣ?\u000fT\u000b[\u000f\u001bC\fⵞzUb\u0004&v=G0\u001f:#tZ\u0014\u001cAe˭=8p\u001aѵI\rq`ѥ2Kj,\u001fѯ>WOʰh\u001fpFi?7|d\u0018\u000f#d˄\u0016\u0014㑒\u001f,7RHg\u000e\u001eo<6)X;o\u0015\u0013\u000fŽ\u001bY_u|Xt+X\\5uܭtH0\u001b^r~S/6\u0017\u001b\r0\u000f燶)wq\u001e\u001ekR!2t\u0017qJxX.\u0006h\u0015\u000e̪R)3\u000fVz$\u0005\\Y0^8B5,$ɷB$q\u00042(\u0004p[{:q\u0004\u001bgٔFN\b,:\u0015/\u0016\u0018B.\u0004:Cy\u0016yh*}8*\t,[m\u0007Xs[B7v\u0017re-0:#{\u0000;0\u0012WF\u000bvm\u0002\u0004#}sE\u0004ƣ\bx{\u0012w\u00133P\u001byhx;]\u0019y7\u0017#\u0010JX\u0006E\u0011Z\\[;\u0015G :u\bgs\u0014s\u0011HB\u001bc=Gh^uv\u001e㛑[cOך參\u000fdIsM\u0003\u0013}ILw6T\u000e\u001f(\u0002~du%\u000b\u000eL\u0013\u00012Kb\r?ڈ\u000eTEMKްo#\u0012A)ܐG$\u0016#\f64\u0016\f\u00162y)ۏ\u0016GG<yPXl?78\u001aZ#rOY#^0ٞT\u001fU&\u0001&O/:5/U>-I4\n1\u0017yJr|trV~D\u000f)PI\u0012_U\"Om~8,v[HK_B7O}\u001cV}U\u001bS:0Qc79D\u001cX\u000fZ9`q}4)\n\b1@ \"\u0010*hç\u0018~v\\=ib3\tR\r9&q|Fŵ>\u001bGmK\u0001\u0006_P\u0007\u0005khpDˀ\u0003|aӁ/p\u0007\"11&%\u0002r\u0005B\u00035xtyT`6'e\u0004\u0000փ_|~M\u001dKI\bN{tA\u0011|LD\u001b\u0017\u0007_؟?y`n(C\u001a_NjZ`\u0014?\u0004?:+]\u001bcn׋y%\u001a9>gAD\u0000-%nq2b\f\u001bgO\u000eY\u0017wAҝs8W\b?\f08%6&ل{zw\u0006\"*:\u000e7Y\\\u0005ªʇ\u001a\r_\u001a\u0001UEp\"1\u001f\u0014jߔ0|s?jwu[v4|L\u001e^+\u0007g\"v\u0010?*reW5>:\u001aѸų`\t?\u000eGJ\u001bO;6Ͻ_rmݔg*.$ҔX_\u0019\u0015'\rs\u001bƹԆ\\\u0002+e\u0005ʌњO%;;#D䏇Q1ڎ,9^Ф4SŻ\u0005ut\\$Q.DFŻoEÏ\u0015~@ؿY\"O@cc4m\u0006-iX[\u001bteS\u0019nױ3ҿӬs\u001e6Є\u0011I\u0003%'\nі~ԫ_0U\u001d7A@\u001bM\u0014:x\u001d\u001dvO\n\u001dF\u00074/\u001d{q\bJ{w;QpcC܊\u000e&\"pX&°xb B~S\u001dbG\u0007y\u0005*J Rc\u0006it01\u0003\u0012g˙/\u000eܒ3\u0011\u0019\u001aBK5ǽZ3m\u001b(-GJn6p]\u0004\rOs\u00044 \u0002n@]m-\u000fo\u0003K\"amE4֖voÆ\u0015o\u000f\u0007J\u000fFPDFDF\t \f{{Y7Ӫ?+mD{ʩhiW=r^\u0000{48!\u0006aik\u0012^9MOUALliOV}\u001b&N#\u00151\u001c4İ\u0019DDW\u0007\u001dkm\u0010>\"\"X+bVDoC&T5M$̃,@\u0018\u0007Fjr\u0003@TۨBƛ\u0014R`u\u001cVGAyӣ\\Z\u0011Q\n\u001frEiQ>v$Spg\u0014V\\yAf\u000f\u0014dp\b\u0001O\"q|]rϔդtaC]hl,y\u001e\u0007%X O7v,b_PZb2\u0014Ei1V\u0006\u0019\u0010eEޗ\u0012Eir\u001bO\u000b\u001f\u000f}<⥜zUIko76Vsw\u000f\u00195v'0jYc7o\u0014>>'o^wAM~&\u0015,ɎV,cVNz\\<rwƟcq9|0MDʷGiJH_<D;}9Dݜȧ\u0011P\\`&瑄\f\u000b\u001dmHTf%T;\u001fR\u0015.jݤ;X\u0011\u00179;ϗk\u000f`56\u0006ˇ\\g+Lv!\u00173*\\'Ք6)e\u0003\\C\u0003%f8\u0004ƫ\tR\u001bO\u001a||V&etoY}yA~\u001fԾ>#*MS\u0007҇\u001f6\u0013D\u0001_#oU\u001d\u000bl\u0006ňN\u001bOWj-4\u001a|\u0011s>\u00185wgќ$CJiGclvlB/;\u001b}\u0012}{\u0013Y|$Gyf%IƓsEt&%\u000e׆4;\u00021UPnA8)KW@$.\u0005\"\u0019Ee*nу\u0014:\u000e\b;г2\u0000z/\u000e~q\u0005\u000e]\r)_%\u0004AU}*rˢ\u0007]쁒\u0013wXԪacHr?\u001f)eyո$ɛ+^\u0004 X,\u0010\u000bh#)'851M\\>db\u0016g4FA;hWs\u001ds4l[\u0019_N\u001429?fKD\u001fu}-.\u001db]*\u0016ϗd<s+?9^\u001eֶ[\u001eK0\fyYd\u000b\u0001\u001eр\u001fqcͿ\u000f+|:E\u001fL2f\fye\u0005&>\u00119.2lF\u0014sYu\u000e7C\r\u0010\n3LgiN/e39N`fE>A\u0018\u0016\u001aD>Ê\"\u0007dr\\\u0016\u001aE.qLB*?_m\u000f|o[,uu7`^}\u0010:\u00179ͦs9V\u0001[\tbVb6c֏D:x1#H\u0016u^\u0013α\u000f\u0001%K\u001d>\u0013\u0017,㓙qtah\u0015\u001e~gp=Y_\u0004tR f9'|5|Xa\b/w`0\\\u0012XDLÒgY\u0019\fp\bI\u0013tp\u0018Ku2\u001bfg<Ç\f?_#[ut}W~6Y_?#@bs}\u001cΆc'*\u0019Gƻ\u001dui\\ev+UL,||jHzb]uƮZ[kk\"V\\~ct1DOzgmhº\u0007w[hv<\u0019\u00117\u001e݊|\u0011ODcrY|Yrt1N9)\r=|\u0019=\u0004ނcI9^\u00104D&+FO\u0013<$\fe,H-K璜 񖆗\u0001̙Ooe\u0005!\u0003o+'d-\u0001\u0005%&~>`ru4K_Rj75.\b6NN\u0011Tip|\u001dWo/_-2eK\u0002$\u0001QXR)Ns6Y\fѻ\u00167\u0013Cg9H-h{d\t$\u000f_&\u0006BڅH{^}kZce\r\u000bfYp\u001fEϠX<S䁡%Zt\u0003Kg\u0004\u0011`9\u0016L:\u0007T&#`=\u0007b&\u0005ˀ%[i\u0001>g@I\u0003 4k\u0005\r@KҗK4,m\u0019^JIt\u0016iY\u001eŋBRe2\u0019`\f\u00015'\u0003ZOg\u00056Coq\\M\u0000_\u001a\u0005d@Wʠh\u001d\u000eH1Ex덴V\nZ-p\u000b^$\u001aiPp\u0002\u001a+Rga\u0003dx\u0011x\u0018\u0000S\u001f\n<hjXz%s\u001fy\t\u0015\u0002\\6eY\u0000iNe`x]$\u0002\u0000-\u0005!Ǳ9\u0000\u001e\u0003D\r*\u0004`r\u0018U\ta2\"\u0013\u0013V\u0013a@ΈK,카\u0000\u0003\u0006i\u000b\\f\u0019@+\u001c~O򠞂.ρ\"\u0002q<z%1ְͷ^\u001ct\u000fʽ\u0016\u0005.\u0007k\u0000H2\u0002(y?.l\u00019af.\u000b\u001cE$4çyn0>\u0012\u0003\u0002y^\f\u0001\u0004L\u0001n\t,\u0004\u0001V@@,ȣWrIh\u0000\t0Ua\u001f\u0010\u0003=@ʊBZM%E\b[\u0002\u000f\u001f0\u001cp\fF\u00020\u0016Y\u0016Oj_\u0001Ƞq\u001cZ\u0004\u000f\u0014bwc\u001a^\u0001\u000b@\u0016/m,bRί$w\u0010*j[)\u000bd\u0011 Ĥ\u0005A~6O/\r\u001bQ\u0007<\f\u00047툻!d\u001cp-l\u000fQU2\u000bk\u0006;\u0001C\u0006\f%e'`\u001e\u0003ʠ$f\u0019,06t\u0016\r\u0016CPY +\u0001b\u0002\nh,\b\u0012<̈Ѡ\u001bx+\u00062\rM\u0003\f\u0012Cر\u0000v\u0007\b\u0013aY&˃\ng\u0005n`a\u000fk\r\u0003\u001c8$e\u0018p\u00055V\u0006F\tf\u001cVO劬7i_eОQl\u0000\u0007̀\u0007$C2&*\fZ<vK.\u0005\u0013\u0002@\u0010g94fFHf\u0000\u0007+ \u001a`@/0\u0000\u0012 1vb\u001a\u0000r W(r\u0002HH>I\u0015NcaB@g0rA*A]\u00123`\u000ehc\u0006'\u0012\u0010ϱE\u0010Iء0?\u0010@CB\u0003\u0016d\u0016\u000bqt&\u001cbBVYC\n,\u001d\u00017d5\bV,&\u001da#aXtdJ8t\u00142 ah1\u0017t\u0014\u0019\u00110E:\"\u0006\"xd\u0018\u0001M<\f\u0012?JG\u001e\u001c&\u001c-\u001a#|\bGjV {*\u001d<,\u0000JGX\u001e2@c< !\u0003:\u0003\bA\u000e\tm\u0011($\u0018n,g9h\bz\u0012yX4\u000b\u001eCC.\u000bǒNK#\u0002\u0004XCrb\u0016-\rL+(\u001c)`Wb@)V@s|\u000e \u001aA2VG8\u0007_}\t'\u0019d<N\"zes00`9\u000e\u00041\u0002rT@\u0011\u0011\r\u0007F\u0018\u0000\u001c\bL\u000bҀD\n`\u0017\u0001D\u0000\\\u0006\u001b\u0014$2\u000f\u0007%\bqDi$SX\u0011y,\u001a\u0010r n\u0001ڃ\f\u0002\u0012EP\u0016@<?\u0019;\u0014\u0006:0ȩ!Qm\u0011H\b{\u0006\u0014\bb%\u0005Y\u0011SN\u0014g\u000f\u0019Lw;+\u0005T\u0005B ّ)\u0007l`=`3^TmLҬ`\u0019 ':\u0003h-\t+3\u001bހ\u0013\u0007\u001dRHр7t\u0001\u0003/ѐ\u0015`wϠIt5e\u001e:tԔy\u0010\u0019ơ\u0002\u000b L8[H0\\\u000ex\f\u0011\u001bŦ\u000b;30:V@eO甅_:䱢l#8ߜ\u0004Y\u0011r\u001fӂC\":Vllı\u0002V/e\u0001\u0001-!j\\4\"grjJ\u001a`kCw-bB\u0016\u0005\"T\u0006T\u0005\u00004\u0011Mj\u001e\b\u000b:&,!rxr4\f\u0007&'\"HZF+z\u0019,Y.#sj\u001a\tcX$a᱉\u001d\u0006\u0016J\\\u0016(\u0003B\u0016Ǝ\bBK\b,\u00050\u00126[,rw`.fX\u0003-LH\u0013~ȡ;\u000b\u001c5~琩\u0000AuM\u001b\u0014\u00055}l$;\u001bUZ\u0019l+vlN*lsyr\u001bM;YE˷\u0004_ŗ-Px\u0013%Ǖwzl>\u001fc5\u001cGSx>\u001b\u0017hk17\tI\r~\\\u0013\u0017\r\nendstream\rendobj\r32 0 obj\r[30 0 R 31 0 R 29 0 R 28 0 R]\rendobj\r51 0 obj\r<</CreationDate(D:20250314224745+09'00')/Creator(Adobe Illustrator 26.2 \\(Windows\\))/ModDate(D:20250314224746+08'00')/Producer(Adobe PDF library 16.04)/Title(Icon)>>\rendobj\rxref\r\n0 52\r\n0000000004 65535 f\r\n0000000016 00000 n\r\n0000000194 00000 n\r\n0000042840 00000 n\r\n0000000000 00000 f\r\n0000042891 00000 n\r\n0000000000 00000 f\r\n0000049256 00000 n\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000049329 00000 n\r\n0000049525 00000 n\r\n0000050687 00000 n\r\n0000062292 00000 n\r\n0000127881 00000 n\r\n0000000000 00000 f\r\n0000045582 00000 n\r\n0000045657 00000 n\r\n0000045807 00000 n\r\n0000045732 00000 n\r\n0000193363 00000 n\r\n0000043337 00000 n\r\n0000046572 00000 n\r\n0000046346 00000 n\r\n0000046459 00000 n\r\n0000045360 00000 n\r\n0000044214 00000 n\r\n0000044798 00000 n\r\n0000044846 00000 n\r\n0000045519 00000 n\r\n0000046230 00000 n\r\n0000046261 00000 n\r\n0000046114 00000 n\r\n0000046145 00000 n\r\n0000045998 00000 n\r\n0000046029 00000 n\r\n0000045882 00000 n\r\n0000045913 00000 n\r\n0000046607 00000 n\r\n0000193409 00000 n\r\ntrailer\r\n<</Size 52/Root 1 0 R/Info 51 0 R/ID[<C9F524EB7DEFF2479ED88F7766D83F69><ACCB24AE38A651489D3E9C5DA665EABD>]>>\r\nstartxref\r\n193591\r\n%%EOF\r\n"
  },
  {
    "path": "Directory.Packages.props",
    "content": "<Project>\n  <!-- https://learn.microsoft.com/en-us/nuget/consume-packages/central-package-management -->\n  <PropertyGroup>\n    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>\n  </PropertyGroup>\n  <ItemGroup>\n    <!-- Avalonia packages -->\n    <!-- Important: keep version in sync! -->\n    <PackageVersion Include=\"Afdian.Sdk\" Version=\"0.3.1\" />\n    <PackageVersion Include=\"AsyncImageLoader.Avalonia\" Version=\"3.3.0\" />\n    <PackageVersion Include=\"Avalonia\" Version=\"11.2.5\" />\n    <PackageVersion Include=\"Avalonia.AvaloniaEdit\" Version=\"11.1.0\" />\n    <PackageVersion Include=\"Avalonia.Markup.Xaml.Loader\" Version=\"11.2.5\" />\n    <PackageVersion Include=\"Avalonia.Themes.Fluent\" Version=\"11.2.5\" />\n    <PackageVersion Include=\"Avalonia.Fonts.Inter\" Version=\"11.2.5\" />\n    <PackageVersion Include=\"Avalonia.Diagnostics\" Version=\"11.2.5\" />\n    <PackageVersion Include=\"Avalonia.Desktop\" Version=\"11.2.5\" />\n    <PackageVersion Include=\"Avalonia.iOS\" Version=\"11.2.3\" />\n    <PackageVersion Include=\"Avalonia.Browser\" Version=\"11.2.3\" />\n    <PackageVersion Include=\"Avalonia.Android\" Version=\"11.2.3\" />\n    <PackageVersion Include=\"CommunityToolkit.Mvvm\" Version=\"8.4.0\" />\n    <PackageVersion Include=\"CurseForge.APIClient\" Version=\"4.0.0\" />\n    <PackageVersion Include=\"Dotnet.Bundle\" Version=\"0.9.13\" />\n    <PackageVersion Include=\"F23.StringSimilarity\" Version=\"6.0.0\" />\n    <PackageVersion Include=\"FluentAvaloniaUI\" Version=\"2.2.0\" />\n    <PackageVersion Include=\"HtmlAgilityPack\" Version=\"1.11.74\" />\n    <PackageVersion Include=\"Irihi.Ursa\" Version=\"1.9.0\" />\n    <PackageVersion Include=\"Irihi.Ursa.Themes.Semi\" Version=\"1.9.0\" />\n    <PackageVersion Include=\"Microsoft.Toolkit.Uwp.Notifications\" Version=\"7.1.3\" />\n    <PackageVersion Include=\"MinecraftLaunch\" Version=\"4.0.1-preview05\" />\n    <PackageVersion Include=\"MinecraftLaunch.Skin\" Version=\"1.0.1\" />\n    <PackageVersion Include=\"Modrinth.Net\" Version=\"3.5.0\" />\n    <PackageVersion Include=\"NAudio\" Version=\"2.2.1\" />\n    <PackageVersion Include=\"Newtonsoft.Json\" Version=\"13.0.3\" />\n    <PackageVersion Include=\"ReactiveUI\" Version=\"20.1.63\" />\n    <PackageVersion Include=\"ReactiveUI.Fody\" Version=\"19.5.41\" />\n    <PackageVersion Include=\"Semi.Avalonia\" Version=\"11.2.1.5\" />\n    <PackageVersion Include=\"Semi.Avalonia.ColorPicker\" Version=\"11.2.1.5\" />\n    <PackageVersion Include=\"System.Management\" Version=\"9.0.2\" />\n    <PackageVersion Include=\"Tomlyn\" Version=\"0.18.0\" />\n    <PackageVersion Include=\"Xamarin.AndroidX.Core.SplashScreen\" Version=\"1.0.1.13\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "LICENSE",
    "content": "GNU GENERAL PUBLIC LICENSE\nVersion 3, 29 June 2007\n\nCopyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\n\nPreamble\nThe GNU General Public License is a free, copyleft license for software and other kinds of works.\n\nThe licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.\n\nWhen we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.\n\nTo protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.\n\nFor example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\n\nDevelopers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.\n\nFor the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.\n\nSome devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.\n\nFinally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.\n\nThe precise terms and conditions for copying, distribution and modification follow.\n\nTERMS AND CONDITIONS\n0. Definitions.\n“This License” refers to version 3 of the GNU General Public License.\n\n“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.\n\n“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.\n\nTo “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.\n\nA “covered work” means either the unmodified Program or a work based on the Program.\n\nTo “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.\n\nTo “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.\n\nAn interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.\n\n1. Source Code.\nThe “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.\n\nA “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.\n\nThe “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.\n\nThe “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.\n\nThe Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.\n\nThe Corresponding Source for a work in source code form is that same work.\n\n2. Basic Permissions.\nAll rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.\n\nYou may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.\n\nConveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.\n\n3. Protecting Users' Legal Rights From Anti-Circumvention Law.\nNo covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.\n\nWhen you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.\n\n4. Conveying Verbatim Copies.\nYou may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.\n\nYou may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.\n\n5. Conveying Modified Source Versions.\nYou may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:\n\na) The work must carry prominent notices stating that you modified it, and giving a relevant date.\nb) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.\nc) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.\nd) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.\nA compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.\n\n6. Conveying Non-Source Forms.\nYou may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:\n\na) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.\nb) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.\nc) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.\nd) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.\ne) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.\nA separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.\n\nA “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.\n\n“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.\n\nIf you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).\n\nThe requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.\n\nCorresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.\n\n7. Additional Terms.\n“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.\n\nWhen you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.\n\nNotwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:\n\na) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or\nb) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or\nc) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or\nd) Limiting the use for publicity purposes of names of licensors or authors of the material; or\ne) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or\nf) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.\nAll other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.\n\nIf you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.\n\nAdditional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.\n\n8. Termination.\nYou may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).\n\nHowever, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.\n\nMoreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.\n\nTermination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.\n\n9. Acceptance Not Required for Having Copies.\nYou are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.\n\n10. Automatic Licensing of Downstream Recipients.\nEach time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.\n\nAn “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.\n\nYou may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.\n\n11. Patents.\nA “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”.\n\nA contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.\n\nEach contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.\n\nIn the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.\n\nIf you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.\n\nIf, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.\n\nA patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.\n\nNothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.\n\n12. No Surrender of Others' Freedom.\nIf conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.\n\n13. Use with the GNU Affero General Public License.\nNotwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.\n\n14. Revised Versions of this License.\nThe Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.\n\nIf the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.\n\nLater license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.\n\n15. Disclaimer of Warranty.\nTHERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n16. Limitation of Liability.\nIN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n17. Interpretation of Sections 15 and 16.\nIf the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.\n\nEND OF TERMS AND CONDITIONS\n\nHow to Apply These Terms to Your New Programs\nIf you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\n\nTo do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\nThe hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”.\n\nYou should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.\n\nThe GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/licenses/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.en.md",
    "content": "<p align=\"center\">\n<img height=\"400\" width=\"400\" src=\"https://raw.githubusercontent.com/yiikooo/YMCL.Avalonia/refs/heads/main/Assets/Icon.Border.png\" alt=\"YMCL Logo\"/>\n</p>\n\n<div align=\"center\">\n\n# ⛏️ Yu Minecraft Launcher 🐳\n\n**Free, Cross-platform, Fully Open Source Minecraft Launcher**\n\n![Latest Release](https://img.shields.io/github/v/release/yiikooo/YMCL.Avalonia?logo=github&style=for-the-badge&color=007ec6&label=Latest%20Release)\n![Downloads](https://img.shields.io/github/downloads/yiikooo/YMCL.Avalonia/total?logo=github&label=Downloads&style=for-the-badge&color=44cc12)\n![Stars](https://img.shields.io/github/stars/yiikooo/YMCL.Avalonia?logo=github&label=Star&style=for-the-badge)\n![License](https://img.shields.io/badge/GPL%203.0%20License%20-%20?logo=github&label=License&style=for-the-badge&color=ff7a35)\n\n[中文](README.md)\n\n</div>\n\n### 📋 About\n\n**Yu Minecraft Launcher (YMCL)** is a modern, cross-platform Minecraft launcher built with Avalonia UI framework. It provides a smooth user experience and powerful features for both beginners and experienced players.\n\n### ✨ Features\n\n- **Mod Management** - Install, manage, and switch mods easily\n- **Auto Installation** - One-click installation of Forge, NeoForge, Fabric, Quilt, OptiFine, and more\n- **Game Customization** - Flexible configuration of game parameters and launch options\n- **UI Customization** - Personalize launcher appearance and themes\n- **Multi-Account Support** - Manage multiple game accounts\n- **Cross-Platform Sync** - Seamless switching between different operating systems\n\n### 🖥️ Platform Support\n\n| Architecture | Windows | Linux | macOS |\n| ------------ | :-----: | :---: | :---: |\n| x64          |   ✅    |  ✅   |  ✅   |\n| x86          |   ✅    |  ❌   |  ❌   |\n| ARM64        |   ❔    |  ❔   |  ❌   |\n| ARM32        |   ❌    |  ❔   |  ❌   |\n\n- ✅ Fully supported\n- ❔ Supported but not fully tested\n- ❌ Not supported\n\n### 📥 Download\n\nVisit the [Releases page](https://github.com/yiikooo/YMCL.Avalonia/releases) to download the latest version.\n\n**System Requirements:**\n\n- Windows 10 or later\n- Ubuntu 20.04 LTS or later\n- macOS 10.15 or later\n\n### 🚀 Quick Start\n\n1. Download the version for your system from the Releases page\n2. Install and launch YMCL\n3. Configure Java path (if needed)\n4. Add a game account\n5. Select a version and launch the game\n\n### 📖 Development\n\n**Tech Stack:**\n\n- Framework: .NET 8.0+\n- UI: Avalonia UI\n- Architecture: MVVM + Reactive\n\n**Build:**\n\n```bash\ndotnet build YMCL.sln\n```\n\n**Run:**\n\n```bash\ndotnet run --project YMCL.Main/YMCL.Desktop\n```\n\n### 📦 Dependencies\n\nThanks to these amazing open-source projects:\n\n| Project                                                                                 | Purpose                    |\n| --------------------------------------------------------------------------------------- | -------------------------- |\n| [FluentAvaloniaUI](https://github.com/amwx/FluentAvalonia)                              | UI Components              |\n| [MinecraftLaunch](https://github.com/Blessing-Studio/MinecraftLaunch)                   | Minecraft Launch Core      |\n| [CurseForge.APIClient](https://github.com/CurseForgeCommunity/.NET-APIClient)           | CurseForge API Integration |\n| [ReactiveUI](https://github.com/reactiveui/reactiveui)                                  | Reactive Programming       |\n| [Newtonsoft.Json](https://www.newtonsoft.com/json)                                      | JSON Processing            |\n| [NAudio](https://github.com/naudio/NAudio)                                              | Audio Processing           |\n| [HtmlAgilityPack](https://github.com/zzzprojects/html-agility-pack)                     | HTML Parsing               |\n| [Semi.Avalonia](https://github.com/irihitech/Semi.Avalonia)                             | UI Themes                  |\n| [Irihi.Ursa](https://github.com/irihitech/Ursa.Avalonia)                                | UI Components              |\n| [MinecraftLaunch.Skin](https://github.com/Blessing-Studio/MinecraftLaunch.Skin)         | Skin Rendering             |\n| [StarLight_Core](https://github.com/Ink-Marks-Studio/StarLight.Core)                    | Core Library               |\n| [Afdian.Sdk](https://github.com/yiyungent/Afdian.Sdk)                                   | Afdian SDK                 |\n| [AsyncImageLoader.Avalonia](https://github.com/AvaloniaUtils/AsyncImageLoader.Avalonia) | Async Image Loading        |\n| [CommunityToolkit.Mvvm](https://github.com/CommunityToolkit/dotnet)                     | MVVM Toolkit               |\n| [Tomlyn](https://github.com/xoofx/Tomlyn)                                               | TOML Parsing               |\n\n### 📄 License\n\nThis project is licensed under the **GPL 3.0** License. See [LICENSE](LICENSE) file for details.\n\n**GPL 3.0 Highlights:**\n\n- Freedom to use, modify, and distribute\n- Modified versions must remain GPL 3.0 licensed\n- Must retain original copyright notices\n- No warranty provided\n\n### 💬 Community\n\n- **QQ Group:** 475032328\n- **GitHub Issues:** Report bugs and suggest features\n\n### 🤝 Contributing\n\nPull requests and issues are welcome!\n\n### 📝 Changelog\n\nSee [Releases](https://github.com/yiikooo/YMCL.Avalonia/releases) page for details.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n<img height=\"400\" width=\"400\" src=\"https://raw.githubusercontent.com/yiikooo/YMCL.Avalonia/refs/heads/main/Assets/Icon.Border.png\" alt=\"YMCL Logo\"/>\n</p>\n\n<div align=\"center\">\n\n# ⛏️ Yu Minecraft Launcher 🐳\n\n**免费、跨平台、完全开源的 Minecraft 启动器**\n\n![Latest Release](https://img.shields.io/github/v/release/yiikooo/YMCL.Avalonia?logo=github&style=for-the-badge&color=007ec6&label=%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC)\n![Downloads](https://img.shields.io/github/downloads/yiikooo/YMCL.Avalonia/total?logo=github&label=%E4%B8%8B%E8%BD%BD%E9%87%8F&style=for-the-badge&color=44cc12)\n![Stars](https://img.shields.io/github/stars/yiikooo/YMCL.Avalonia?logo=github&label=Star&style=for-the-badge)\n![License](https://img.shields.io/badge/GPL%203.0%20License%20-%20?logo=github&label=%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE&style=for-the-badge&color=ff7a35)\n\n[English](README.en.md)\n\n</div>\n\n### 📋 项目简介\n\n**Yu Minecraft Launcher (YMCL)** 是一个现代化的跨平台 Minecraft 启动器，采用 Avalonia UI 框架开发，提供流畅的用户体验和强大的功能。无论你是 Minecraft 新手还是资深玩家，YMCL 都能满足你的需求。\n\n### ✨ 核心功能\n\n- **Mod 管理** - 轻松安装、管理和切换 Mod\n- **自动安装** - 一键安装 Forge、NeoForge、Fabric、Quilt、OptiFine 等加载器\n- **游戏自定义** - 灵活配置游戏参数和启动选项\n- **界面自定义** - 个性化启动器外观和主题\n- **多账户支持** - 管理多个游戏账户\n- **跨平台同步** - 在不同操作系统间无缝切换\n\n### 🖥️ 平台支持\n\n| 架构  | Windows | Linux | macOS |\n| ----- | :-----: | :---: | :---: |\n| x64   |   ✅    |  ✅   |  ✅   |\n| x86   |   ✅    |  ❌   |  ❌   |\n| ARM64 |   ❔    |  ❔   |  ❌   |\n| ARM32 |   ❌    |  ❔   |  ❌   |\n\n- ✅ 完全支持\n- ❔ 支持但未充分测试\n- ❌ 不支持\n\n### 📥 下载安装\n\n访问 [Releases 页面](https://github.com/yiikooo/YMCL.Avalonia/releases) 下载最新版本。\n\n**系统要求：**\n\n- Windows 10 或更高版本\n- Ubuntu 20.04 LTS 或更高版本\n- macOS 10.15 或更高版本\n\n### 🚀 快速开始\n\n1. 从 Releases 页面下载适合你系统的版本\n2. 安装并启动 YMCL\n3. 配置 Java 路径（如需要）\n4. 添加游戏账户\n5. 选择版本并启动游戏\n\n### 📖 开发\n\n**技术栈：**\n\n- 框架：.NET 8.0+\n- UI：Avalonia UI\n- 架构：MVVM + Reactive\n\n**构建项目：**\n\n```bash\ndotnet build YMCL.sln\n```\n\n**运行项目：**\n\n```bash\ndotnet run --project YMCL.Main/YMCL.Desktop\n```\n\n### 📦 依赖项目\n\n感谢以下开源项目的支持：\n\n| 项目                                                                                    | 用途                |\n| --------------------------------------------------------------------------------------- | ------------------- |\n| [FluentAvaloniaUI](https://github.com/amwx/FluentAvalonia)                              | UI 组件库           |\n| [MinecraftLaunch](https://github.com/Blessing-Studio/MinecraftLaunch)                   | Minecraft 启动核心  |\n| [CurseForge.APIClient](https://github.com/CurseForgeCommunity/.NET-APIClient)           | CurseForge API 集成 |\n| [ReactiveUI](https://github.com/reactiveui/reactiveui)                                  | 响应式编程框架      |\n| [Newtonsoft.Json](https://www.newtonsoft.com/json)                                      | JSON 处理           |\n| [NAudio](https://github.com/naudio/NAudio)                                              | 音频处理            |\n| [HtmlAgilityPack](https://github.com/zzzprojects/html-agility-pack)                     | HTML 解析           |\n| [Semi.Avalonia](https://github.com/irihitech/Semi.Avalonia)                             | UI 主题             |\n| [Irihi.Ursa](https://github.com/irihitech/Ursa.Avalonia)                                | UI 组件             |\n| [MinecraftLaunch.Skin](https://github.com/Blessing-Studio/MinecraftLaunch.Skin)         | 皮肤渲染            |\n| [StarLight_Core](https://github.com/Ink-Marks-Studio/StarLight.Core)                    | 核心库              |\n| [Afdian.Sdk](https://github.com/yiyungent/Afdian.Sdk)                                   | 爱发电 SDK          |\n| [AsyncImageLoader.Avalonia](https://github.com/AvaloniaUtils/AsyncImageLoader.Avalonia) | 异步图片加载        |\n| [CommunityToolkit.Mvvm](https://github.com/CommunityToolkit/dotnet)                     | MVVM 工具包         |\n| [Tomlyn](https://github.com/xoofx/Tomlyn)                                               | TOML 解析           |\n\n### 📄 许可证\n\n本项目采用 **GPL 3.0** 开源协议。详见 [LICENSE](LICENSE) 文件。\n\n**GPL 3.0 要点：**\n\n- 自由使用、修改和分发\n- 修改后的版本必须保持 GPL 3.0 许可\n- 必须保留原始版权声明\n- 不提供任何形式的保证\n\n### 💬 社区\n\n- **QQ 群：** 475032328\n- **GitHub Issues：** 报告 Bug 和功能建议\n\n### 🤝 贡献\n\n欢迎提交 Pull Request 和 Issue！\n\n### 📝 更新日志\n\n详见 [Releases](https://github.com/yiikooo/YMCL.Avalonia/releases) 页面。\n"
  },
  {
    "path": "YMCL.Main/YMCL/App.axaml",
    "content": "<Application\n    RequestedThemeVariant=\"Light\"\n    x:Class=\"YMCL.App\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:semi=\"https://irihi.tech/semi\"\n    xmlns:sty=\"using:FluentAvalonia.Styling\"\n    xmlns:system=\"clr-namespace:System;assembly=System.Runtime\"\n    xmlns:u-semi=\"https://irihi.tech/ursa/themes/semi\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Application.Resources>\n        <ResourceDictionary>\n            <ResourceDictionary.MergedDictionaries>\n                <ResourceInclude Source=\"/Public/Styles/IconPath.axaml\" />\n                <ResourceInclude Source=\"/Public/Styles/Theme.axaml\" />\n                <ResourceInclude Source=\"avares://FluentAvalonia/Styling/ControlThemes/BasicControls/ListBoxStyles.axaml\" />\n                <ResourceInclude Source=\"avares://FluentAvalonia/Styling/ControlThemes/BasicControls/HyperlinkButtonStyles.axaml\" />\n                <ResourceInclude Source=\"avares://FluentAvalonia/Styling/ControlThemes/BasicControls/ExpanderStyles.axaml\" />\n                <ResourceInclude Source=\"avares://FluentAvalonia/Styling/ControlThemes/BasicControls/ToggleSwitchStyles.axaml\" />\n            </ResourceDictionary.MergedDictionaries>\n            <Color x:Key=\"SystemAccentColor\">#00feff</Color>\n            <Color x:Key=\"SystemAccentColorLight1\">#00feff</Color>\n            <Color x:Key=\"SystemAccentColorLight2\">#00feff</Color>\n            <Color x:Key=\"SystemAccentColorLight3\">#00feff</Color>\n            <Color x:Key=\"SystemAccentColorDark1\">#00feff</Color>\n            <Color x:Key=\"SystemAccentColorDark2\">#00feff</Color>\n            <Color x:Key=\"SystemAccentColorDark3\">#00feff</Color>\n            <FontFamily x:Key=\"Font\">avares://YMCL/Public/Assets#MiSans</FontFamily>\n            <FontWeight x:Key=\"FontWeight\">Bold</FontWeight>\n            <system:Double x:Key=\"MainOpacity\">1</system:Double>\n            <CornerRadius x:Key=\"MainCornerRadius\">5</CornerRadius>\n        </ResourceDictionary>\n    </Application.Resources>\n    <Application.Styles>\n        <sty:FluentAvaloniaTheme />\n        <StyleInclude Source=\"/Public/Styles/Style.axaml\" />\n        <semi:SemiTheme Locale=\"zh-CN\" />\n        <u-semi:SemiTheme Locale=\"zh-CN\" />\n        <StyleInclude Source=\"avares://AsyncImageLoader.Avalonia/AdvancedImage.axaml\" />\n        <StyleInclude Source=\"avares://AvaloniaEdit/Themes/Fluent/AvaloniaEdit.xaml\" />\n    </Application.Styles>\n</Application>"
  },
  {
    "path": "YMCL.Main/YMCL/App.axaml.cs",
    "content": "using System.Diagnostics;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Data.Core.Plugins;\nusing Avalonia.Threading;\nusing YMCL.Public.Module.App.Init;\nusing YMCL.Public.Module.App.Init.SubModule;\nusing YMCL.ViewModels;\nusing YMCL.Views;\nusing YMCL.Views.Initialize;\nusing CrashWindow = YMCL.Views.CrashWindow;\nusing MainView = YMCL.Views.Main.MainView;\nusing MainWindow = YMCL.Views.Main.MainWindow;\n\nnamespace YMCL;\n\npublic class App : Application\n{\n    public static MainView? UiRoot { get; private set; }\n\n    public override void Initialize()\n    {\n        AvaloniaXamlLoader.Load(this);\n    }\n\n    public override async void OnFrameworkInitializationCompleted()\n    {\n        if (!Debugger.IsAttached)\n        {\n            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;\n            Dispatcher.UIThread.UnhandledException += UIThread_UnhandledException;\n        }\n        try\n        {\n            if (!await InitDispatcher.BeforeCreateUi()) return;\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            var win = new CrashWindow(e.ToString());\n            win.Show();\n            return;\n        }\n\n        var ifShowInit = Decision.WhetherToShowInitView();\n        if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)\n        {\n            DisableAvaloniaDataAnnotationValidation();\n            if (ifShowInit.ifShow)\n            {\n                var view = new InitializeWindow(ifShowInit.page);\n                Data.Notification = new Ursa.Controls.WindowNotificationManager(TopLevel.GetTopLevel(view));\n                Data.Toast = new Ursa.Controls.WindowToastManager(TopLevel.GetTopLevel(view));\n                desktop.MainWindow = view;\n            }\n            else\n            {\n                var view = new MainWindow(out var mainView);\n                UiRoot = mainView;\n                Data.Notification = new Ursa.Controls.WindowNotificationManager(TopLevel.GetTopLevel(view));\n                Data.Toast = new Ursa.Controls.WindowToastManager(TopLevel.GetTopLevel(view));\n                desktop.MainWindow = view;\n                view.Show();\n            }\n        }\n        else if (ApplicationLifetime is ISingleViewApplicationLifetime singleViewPlatform)\n        {\n            if (ifShowInit.ifShow)\n            {\n                var view = new InitializeView(ifShowInit.page);\n                Data.Notification = new Ursa.Controls.WindowNotificationManager(TopLevel.GetTopLevel(view));\n                Data.Toast = new Ursa.Controls.WindowToastManager(TopLevel.GetTopLevel(view));\n                singleViewPlatform.MainView = view;\n            }\n            else\n            {\n                var view = new MainView();\n                UiRoot = view;\n                Data.Notification = new Ursa.Controls.WindowNotificationManager(TopLevel.GetTopLevel(view));\n                Data.Toast = new Ursa.Controls.WindowToastManager(TopLevel.GetTopLevel(view));\n                singleViewPlatform.MainView = view;\n            }\n        }\n\n        Data.Notification.Position = NotificationPosition.BottomRight;\n        Data.Toast.MaxItems = 2;\n\n        base.OnFrameworkInitializationCompleted();\n    }\n\n    private void UIThread_UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)\n    {\n        Console.WriteLine(e.Exception);\n        try\n        {\n            var win = new CrashWindow(e.Exception.ToString());\n            win.Show();\n        }\n        finally\n        {\n            e.Handled = true;\n        }\n    }\n\n    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)\n    {\n        Console.WriteLine(e);\n        try\n        {\n            var win = new CrashWindow(e.ToString() ?? \"Unhandled Exception\");\n            win.Show();\n        }\n        catch\n        {\n            // ignored\n        }\n    }\n\n\n    private void DisableAvaloniaDataAnnotationValidation()\n    {\n        // Get an array of plugins to remove\n        var dataValidationPluginsToRemove =\n            BindingPlugins.DataValidators.OfType<DataAnnotationsValidationPlugin>().ToArray();\n\n        // remove each entry found\n        foreach (var plugin in dataValidationPluginsToRemove)\n        {\n            BindingPlugins.DataValidators.Remove(plugin);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/FodyWeavers.xml",
    "content": "﻿<Weavers xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"FodyWeavers.xsd\">\n  <ReactiveUI />\n</Weavers>"
  },
  {
    "path": "YMCL.Main/YMCL/FodyWeavers.xsd",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n  <!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->\n  <xs:element name=\"Weavers\">\n    <xs:complexType>\n      <xs:all>\n        <xs:element name=\"ReactiveUI\" minOccurs=\"0\" maxOccurs=\"1\" type=\"xs:anyType\" />\n      </xs:all>\n      <xs:attribute name=\"VerifyAssembly\" type=\"xs:boolean\">\n        <xs:annotation>\n          <xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n      <xs:attribute name=\"VerifyIgnoreCodes\" type=\"xs:string\">\n        <xs:annotation>\n          <xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n      <xs:attribute name=\"GenerateXsd\" type=\"xs:boolean\">\n        <xs:annotation>\n          <xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>\n        </xs:annotation>\n      </xs:attribute>\n    </xs:complexType>\n  </xs:element>\n</xs:schema>"
  },
  {
    "path": "YMCL.Main/YMCL/GlobalUsings.cs",
    "content": "﻿// global using 指令\n\nglobal using System;\nglobal using Avalonia;\nglobal using Avalonia.Controls;\nglobal using Avalonia.Markup.Xaml;\nglobal using YMCL.Public.Const;\nglobal using static YMCL.Public.Module.Ui.Shower;\nglobal using Task = System.Threading.Tasks.Task;\nglobal using JavaEntry = YMCL.Public.Classes.Data.JavaEntry;"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/AggregateSearchEntry.cs",
    "content": "﻿using MinecraftLaunch.Base.Models.Game;\nusing MinecraftLaunch.Base.Models.Network;\nusing YMCL.Public.Classes.Setting;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic class AggregateSearchEntry()\n{\n    public string Tag { get; set; }\n    public int Order { get; set; }\n    public string Type { get; set; }\n    public string Summary { get; set; }\n    public string Text { get; set; }\n    public string? Target { get; set; }\n    public MinecraftEntry? MinecraftEntry { get; set; }\n    public VersionManifestEntry? VersionManifestEntry { get; set; }\n    public string? Keyword { get; set; }\n    public AccountInfo? Account { get; set; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/FavouriteResourceEntry.cs",
    "content": "﻿using Newtonsoft.Json;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic record FavouriteResourceEntry\n{\n    public ResourceSource Source { get; set; } = ResourceSource.Unknown;\n    public ResourceType Type { get; set; } = ResourceType.Unknown;\n\n    [JsonIgnore]\n    public string DisplayType => Type switch\n    {\n        ResourceType.Mod => MainLang.Mod,\n        ResourceType.DataPack => MainLang.DataPack,\n        ResourceType.ResourcePack => MainLang.MaterialPack,\n        ResourceType.ShaderPack => MainLang.ShaderPack,\n        ResourceType.ModPack => MainLang.ModPack,\n        ResourceType.Plugin => MainLang.Plugin,\n        _ => MainLang.Unknown,\n    };\n\n    public string Id { get; set; }\n    public string Summary { get; set; }\n    public string Icon { get; set; }\n    public string Title { get; set; }\n\n    public virtual bool Equals(FavouriteResourceEntry? other)\n    {\n        return Source == other?.Source && Id == other?.Id;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/JavaEntry.cs",
    "content": "﻿namespace YMCL.Public.Classes.Data;\n\npublic sealed record JavaEntry\n{\n    public bool Is64bit { get; init; }\n    public string JavaPath { get; set; }\n    public string JavaType { get; init; }\n    public string JavaVersion { get; init; }\n    public string JavaFolder { get; init; }\n    public int MajorVersion { get; init; }\n\n    public bool Equals(JavaEntry? other)\n    {\n        if (other == null) return false;\n        if (other.JavaVersion == \"Auto\" && JavaVersion == \"Auto\") return true;\n        if (other.JavaVersion == \"Global\" && JavaVersion == \"Global\") return true;\n        return Is64bit == other.Is64bit && JavaPath == other.JavaPath && JavaType == other.JavaType;\n    }\n\n    public static JavaEntry MlToYmcl(MinecraftLaunch.Base.Models.Game.JavaEntry entry)\n    {\n        return new JavaEntry\n        {\n            Is64bit = entry.Is64bit,\n            JavaVersion = entry.JavaVersion,\n            JavaPath = entry.JavaPath,\n            JavaType = entry.JavaType,\n            JavaFolder = entry.JavaFolder,\n            MajorVersion = entry.MajorVersion\n        };\n    }\n\n    public static MinecraftLaunch.Base.Models.Game.JavaEntry YmclToMl(JavaEntry entry)\n    {\n        return new MinecraftLaunch.Base.Models.Game.JavaEntry\n        {\n            Is64bit = entry.Is64bit,\n            JavaVersion = entry.JavaVersion,\n            JavaPath = entry.JavaPath,\n            JavaType = entry.JavaType,\n            MajorVersion = entry.MajorVersion,\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/Language.cs",
    "content": "﻿namespace YMCL.Public.Classes.Data;\n\npublic record Language\n{\n    public string? Code { get; set; }\n    public string? Label { get; set; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/LocalModEntry.cs",
    "content": "﻿using System.IO;\nusing Avalonia.Media;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.VisualBasic.FileIO;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic class LocalModEntry : ReactiveObject\n{\n    [Reactive] public string FileName { get; set; }\n    [Reactive] public string Path { get; set; }\n    [Reactive] public bool IsEnable { get; set; }\n    [Reactive] public Action Callback { get; set; }\n\n    public TextDecorationCollection? Decoration => !IsEnable\n        ? TextDecorations.Strikethrough\n        : null;\n\n    [Reactive] public string DisplayText { get; set; }\n    [Reactive] public string Description { get; set; }\n    [Reactive] public bool ShouldTranslateDescription { get; set; } = false;\n    [Reactive] public bool ShouldTranslateInfoName { get; set; } = false;\n    [Reactive] public string ModInfoName { get; set; }\n\n    public void EnableOrDisable()\n    {\n        if (string.IsNullOrWhiteSpace(System.IO.Path.GetDirectoryName(Path))) return;\n        if (System.IO.Path.GetExtension(Path) == \".disabled\")\n            File.Move(Path, System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Path)!, $\"{FileName}.jar\"));\n        if (System.IO.Path.GetExtension(Path) == \".jar\")\n            File.Move(Path, Path + \".disabled\");\n        Callback?.Invoke();\n    }\n\n    public async Task Delete()\n    {\n        var text = $\"• {System.IO.Path.GetFileName(FileName)}\";\n\n        var title = YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows\n            ? MainLang.MoveToRecycleBin\n            : MainLang.DeleteSelect;\n        var dialog = await ShowDialogAsync(title, text, b_cancel: MainLang.Cancel,\n            b_primary: MainLang.Ok);\n        if (dialog != ContentDialogResult.Primary) return;\n\n        if (YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows)\n        {\n            FileSystem.DeleteFile(Path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin);\n        }\n        else\n        {\n            File.Delete(Path);\n        }\n\n        Callback?.Invoke();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/LocalResourcePackEntry.cs",
    "content": "﻿using Avalonia.Media.Imaging;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic class LocalResourcePackEntry : ReactiveObject\n{\n    [Reactive] public string Name { get; set; }\n    [Reactive] public string Path { get; set; }\n    [Reactive] public Bitmap Icon { get; set; }\n    [Reactive] public string Description { get; set; } = string.Empty;\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/LocalSaveEntry.cs",
    "content": "﻿using System.IO;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.VisualBasic.FileIO;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Disk;\nusing YMCL.Views.Main.Pages.LaunchPages.SubPages;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic class LocalSaveEntry : ReactiveObject\n{\n    [Reactive] public string Name { get; set; }\n    [Reactive] public string Path { get; set; }\n    [Reactive] public Bitmap Icon { get; set; }\n    [Reactive] public string Description { get; set; } = string.Empty;\n    [Reactive] public Save.SaveInfo SaveInfo { get; set; }\n    [Reactive] public Action Callback { get; set; }\n\n    public async Task Delete()\n    {\n        var text = $\"• {System.IO.Path.GetFileName(Name)}\";\n\n        var title = YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows\n            ? MainLang.MoveToRecycleBin\n            : MainLang.DeleteSelect;\n        var dialog = await ShowDialogAsync(title, text, b_cancel: MainLang.Cancel,\n            b_primary: MainLang.Ok);\n        if (dialog != ContentDialogResult.Primary) return;\n\n        if (YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows)\n        {\n            FileSystem.DeleteDirectory(Path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin);\n        }\n        else\n        {\n            Directory.Delete(Path);\n        }\n\n        Callback?.Invoke();\n    }\n\n    public async Task ShowInfo()\n    {\n        var text =\n            $\"{MainLang.Name}: {SaveInfo.FolderName}\\n\" +\n            $\"{MainLang.Seed}: {SaveInfo.Seed}\\n\" +\n            $\"{MainLang.GameVersion}: {SaveInfo.Version}\\n\" +\n            $\"{MainLang.AllowCommands}: {SaveInfo.AllowCommands}\\n\" +\n            $\"{MainLang.GameType}: {SaveInfo.GameType}\\n\" +\n            $\"{MainLang.CreateTime}: {SaveInfo.CreationTime}\\n\" +\n            $\"{MainLang.LastPlayTime}: {SaveInfo.LastPlayTime}\\n\" +\n            $\"{MainLang.LastModifiedTime}: {SaveInfo.LastWriteTime}\\n\" +\n            $\"{MainLang.PlayerCount}: {SaveInfo.DatFileCount}\\n\" +\n            $\"{MainLang.DataPackCount}: {SaveInfo.ZipFileCount}\";\n        await ShowDialogAsync(MainLang.SaveInfo, text, b_primary: MainLang.Ok);\n        Callback?.Invoke();\n    }\n    public void OpenFolder()\n    {\n        var path = SaveInfo.FolderPath;\n        YMCL.Public.Module.IO.Disk.Setter.TryCreateFolder(path);\n        _ = Opener.OpenFolder(path);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/LogItemEntry.cs",
    "content": "﻿using YMCL.Public.Enum;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic class LogItemEntry\n{\n    public string Message { get; set; } = string.Empty;\n    public string Original { get; set; }\n    public string Time { get; set; }\n    public LogType Type { get; set; }\n    public string Source { get; set; }\n\n    public void SetOriginal()\n    {\n        Original = $\"[{Time}] [{Source}/{Type}] {Message}\";\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/MinecraftFolder.cs",
    "content": "﻿namespace YMCL.Public.Classes.Data;\n\npublic sealed record MinecraftFolder\n{\n    public string Path { get; set; }\n    public string Name { get; set; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/ModrinthFile.cs",
    "content": "﻿using YMCL.Public.Module.Util.Extension;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic class ModrinthFile\n{\n    public int Size { get; set; }\n    public string DisplaySize => Size.ToByteUnit();\n    public string FileName { get; set; }\n    public string Title { get; set; }\n    public string Url { get; set; }\n    public int Downloads { get; set; }\n    public string DisplayDownloads => Convert.ToDouble(Downloads).ToUnit();\n    public DateTime UpdateTime { get; set; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/NewsDataListEntry.cs",
    "content": "namespace YMCL.Public.Classes.Data;\n\npublic class NewsDataListEntry()\n{\n    public string Url { get; set; }\n    public string Data { get; set; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/NotificationEntry.cs",
    "content": "﻿using Avalonia.Controls.Notifications;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic record NotificationEntry(object Content, NotificationType Type)\n{\n    public object Content { get; set; } = Content;\n    public NotificationType Type { get; set; } = Type;\n\n\n    public virtual bool Equals(NotificationEntry? other)\n    {\n        return Content == other?.Content;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/ResourceFetcher/CurseForgeResourceEntry.cs",
    "content": "﻿using System.Collections.Generic;\nusing CurseForge.APIClient.Models;\nusing CurseForge.APIClient.Models.Files;\nusing CurseForge.APIClient.Models.Mods;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Classes.Data.ResourceFetcher;\n\npublic class CurseForgeResourceEntry : IResourceEntry\n{\n    string IResourceEntry.Summary => Summary;\n    string IResourceEntry.Name => Name;\n    ResourceSource IResourceEntry.Source => ResourceSource.CurseForge;\n    DateTime IResourceEntry.LastUpdateTime => DateModified.DateTime;\n\n    public string DisplayType => Type switch\n    {\n        ResourceType.Mod => MainLang.Mod,\n        ResourceType.Map => MainLang.Map,\n        ResourceType.DataPack => MainLang.DataPack,\n        ResourceType.ResourcePack => MainLang.MaterialPack,\n        ResourceType.ShaderPack => MainLang.ShaderPack,\n        ResourceType.ModPack => MainLang.ModPack,\n        _ => MainLang.Unknown,\n    };\n\n    public ResourceType Type { get; set; } = ResourceType.Unknown;\n    ulong IResourceEntry.DownloadCount => Convert.ToUInt64(DownloadCount);\n    public int Id { get; set; }\n    public int GameId { get; set; }\n    public string Name { get; set; }\n    public string Slug { get; set; }\n    public ModLinks Links { get; set; }\n    public string Summary { get; set; }\n    string IResourceEntry.Pic => Logo?.Url;\n    public ModStatus Status { get; set; }\n    public double DownloadCount { get; set; }\n    public bool IsFeatured { get; set; }\n    public int PrimaryCategoryId { get; set; }\n    public List<Category> Categories { get; set; } = [];\n    public int? ClassId { get; set; }\n    public List<ModAuthor> Authors { get; set; } = [];\n    public ModAsset Logo { get; set; }\n    public List<ModAsset> Screenshots { get; set; } = [];\n    public int MainFileId { get; set; }\n    public List<File> LatestFiles { get; set; } = [];\n    public List<FileIndex> LatestFilesIndexes { get; set; } = [];\n    public DateTimeOffset DateCreated { get; set; }\n    public DateTimeOffset DateModified { get; set; }\n    public DateTimeOffset DateReleased { get; set; }\n    public bool? AllowModDistribution { get; set; }\n    public int GamePopularityRank { get; set; }\n    public bool IsAvailable { get; set; }\n    public int ThumbsUpCount { get; set; }\n    public double? Rating { get; set; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/ResourceFetcher/CurseForgeResourceFileEntry.cs",
    "content": "﻿using System.Collections.Generic;\nusing CurseForge.APIClient.Models.Files;\nusing CurseForge.APIClient.Models.Games;\n\nnamespace YMCL.Public.Classes.Data.ResourceFetcher;\n\npublic class CurseForgeResourceFileEntry : IResourceFileEntry\n{\n    public int Id { get; set; }\n\n    public int GameId { get; set; }\n\n    public int ModId { get; set; }\n\n    public bool IsAvailable { get; set; }\n\n    public string DisplayName { get; set; }\n\n    public string FileName { get; set; }\n\n    public FileReleaseType ReleaseType { get; set; }\n\n    public FileStatus FileStatus { get; set; }\n\n    public List<FileHash> Hashes { get; set; } = [];\n\n    public DateTimeOffset FileDate { get; set; }\n\n    public long FileLength { get; set; }\n\n    public long? FileSizeOnDisk { get; set; }\n\n    public string Name { get; set; }\n    public List<string> McVersions { get; set; }\n    public List<int> Dependency { get; set; }\n    public string Loader { get; set; }\n\n    ulong IResourceFileEntry.DownloadCount => Convert.ToUInt64(DownloadCount);\n\n    public long DownloadCount { get; set; }\n\n    public string DownloadUrl { get; set; }\n    public DateTime UpdateTime => FileDate.DateTime;\n\n    public List<string> GameVersions { get; set; } = [];\n\n    public List<SortableGameVersion> SortableGameVersions { get; set; } = [];\n\n    public List<FileDependency> Dependencies { get; set; } = [];\n\n    public bool? ExposeAsAlternative { get; set; }\n\n    public int? ParentProjectFileId { get; set; }\n\n    public int? AlternateFileId { get; set; }\n\n    public bool? IsServerPack { get; set; }\n\n    public int? ServerPackFileId { get; set; }\n\n    public bool? IsEarlyAccessContent { get; set; }\n\n    public DateTimeOffset? EarlyAccessEndDate { get; set; }\n\n    public long FileFingerprint { get; set; }\n\n    public List<FileModule> Modules { get; set; } = [];\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/ResourceFetcher/IResourceEntry.cs",
    "content": "﻿using YMCL.Public.Enum;\n\nnamespace YMCL.Public.Classes.Data.ResourceFetcher;\n\npublic interface IResourceEntry\n{\n    public string Name { get; }\n    public string Summary { get; }\n    public string Pic { get; }\n    public string DisplayType { get; }\n    public ulong DownloadCount { get; }\n    public DateTime LastUpdateTime { get; }\n    public ResourceSource Source { get; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/ResourceFetcher/IResourceFileEntry.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace YMCL.Public.Classes.Data.ResourceFetcher;\n\npublic interface IResourceFileEntry\n{\n    public string Name { get; set; }\n    public List<string> McVersions { get; set; }\n    public List<int> Dependency { get; set; }\n    public string Loader { get; set; }\n    public ulong DownloadCount { get; }\n    public string DownloadUrl { get; set; }\n    public DateTime UpdateTime { get; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/ResourceFetcher/ModFileUiEntry.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing CurseForge.APIClient.Models.Files;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Public.Classes.Data.ResourceFetcher;\n\npublic record ShortVersionEntry\n{\n    public ObservableCollection<VersionEntry> VersionEntries { get; set; } = [];\n    public string Version { get; set; }\n    public string DisplayVersion { get; set; }\n}\n\npublic record VersionEntry\n{\n    public string Name => $\"{Version} {Loader}\";\n    public string Version { get; set; }\n    public string Loader { get; set; }\n    public Control Expander { get; set; }\n}\n\npublic record ModFile\n{\n    public string GameVersion { get; set; }\n    public int FileId { get; set; }\n    public string Filename { get; set; }\n    public FileReleaseType ReleaseType { get; set; }\n    public ModLoaderType Loader { get; set; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/ResourceFetcher/ModrinthResourceEntry.cs",
    "content": "﻿using System.Runtime.CompilerServices;\nusing System.Text.Json.Serialization;\nusing Modrinth.Extensions;\nusing Modrinth.Models;\nusing Modrinth.Models.Enums;\nusing Modrinth.Models.Enums.Project;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Util.Extension;\n\nnamespace YMCL.Public.Classes.Data.ResourceFetcher;\n\npublic class ModrinthResourceEntry: IResourceEntry\n{\n    public string Url => this.GetDirectUrl();\n    public string? Slug { get; set; }\n    public string? Title { get; set; }\n    public string? Description { get; set; }\n    public string[] Categories { get; set; }\n    public Side? ClientSide { get; set; }\n    public Side? ServerSide { get; set; }\n    public ProjectType ProjectType { get; set; }\n    public int Downloads { get; set; }\n    public string? IconUrl { get; set; }\n    public string ProjectId { get; set; }\n    public string Author { get; set; }\n    public string[] DisplayCategories { get; set; }\n    public DateTime DateCreated { get; set; }\n    public DateTime DateModified { get; set; }\n    public int Followers { get; set; }\n    public string? LatestVersion { get; set; }\n    public string License { get; set; }\n    public string[] Versions { get; set; }\n    public string[] Gallery { get; set; }\n    public System.Drawing.Color? Color { get; set; }\n    public string? FeaturedGallery { get; set; }\n    public string[] Dependencies { get; set; }\n    public string Name => Title;\n    public string Summary => Description;\n    public string Pic => IconUrl;\n    public string DisplayType => ProjectType switch\n    {\n        ProjectType.Mod => MainLang.Mod,\n        ProjectType.Datapack => MainLang.DataPack,\n        ProjectType.Resourcepack => MainLang.MaterialPack,\n        ProjectType.Shader => MainLang.ShaderPack,\n        ProjectType.Modpack => MainLang.ModPack,\n        ProjectType.Plugin => MainLang.Plugin,\n        _ => MainLang.Unknown,\n    };\n\n    public ulong DownloadCount => Convert.ToUInt64(Downloads);\n    public DateTime LastUpdateTime => DateModified;\n    public ResourceSource Source => ResourceSource.Modrinth;\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/SearchTabViewItemEntry.cs",
    "content": "﻿using System.Linq;\n\nnamespace YMCL.Public.Classes.Data;\n\npublic record SearchTabViewItemEntry\n{\n    public UserControl Content { get; set; }\n    public string Title { get; set; }\n    public string Tag { get; set; }\n    public string Host { get; set; }\n    public bool CanClose { get; set; }\n\n    public void Close()\n    {\n        if (Host == nameof(Views.Main.Pages.DownloadPages.CurseForge))\n        {\n            if (YMCL.App.UiRoot.ViewModel.Download._curseForge.SelectedItem == this)\n            {\n                YMCL.App.UiRoot.ViewModel.Download._curseForge.Items.Remove(this);\n\n                YMCL.App.UiRoot.ViewModel.Download._curseForge.SelectedItem =\n                    YMCL.App.UiRoot.ViewModel.Download._curseForge.Items.LastOrDefault();\n            }\n            else\n            {\n                YMCL.App.UiRoot.ViewModel.Download._curseForge.Items.Remove(this);\n            }\n        }\n        else if (Host == nameof(Views.Main.Pages.DownloadPages.Modrinth))\n        {\n            if (YMCL.App.UiRoot.ViewModel.Download._modrinth.SelectedItem == this)\n            {\n                YMCL.App.UiRoot.ViewModel.Download._modrinth.Items.Remove(this);\n                YMCL.App.UiRoot.ViewModel.Download._modrinth.SelectedItem =\n                    YMCL.App.UiRoot.ViewModel.Download._modrinth.Items.LastOrDefault();\n            }\n            else\n            {\n                YMCL.App.UiRoot.ViewModel.Download._modrinth.Items.Remove(this);\n            }\n        }\n        else\n        {\n            throw new NotImplementedException();\n        }\n\n        GC.Collect(2, GCCollectionMode.Aggressive, true);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Data/Update.cs",
    "content": "﻿namespace YMCL.Public.Classes.Data;\n\npublic record CheckUpdateInfo\n{\n    public bool Success { get; init; }\n    public bool IsNeedUpdate { get; init; }\n    public string NewVersion { get; init; }\n    public string GithubUrl { get; init; }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Json/AfdianSponsor.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace YMCL.Public.Classes.Json;\n\npublic class AfdianSponsor\n{\n    public class Config\n    {\n    }\n\n    public class Sponsor_plansItem\n    {\n        public double can_ali_agreement { get; set; }\n        public string plan_id { get; set; }\n        public double rank { get; set; }\n        public string user_id { get; set; }\n        public double status { get; set; }\n        public string name { get; set; }\n        public string pic { get; set; }\n        public string desc { get; set; }\n        public string price { get; set; }\n        public double update_time { get; set; }\n        public Timing timing { get; set; }\n        public double pay_month { get; set; }\n        public string show_price { get; set; }\n        public string show_price_after_adjust { get; set; }\n        public double has_coupon { get; set; }\n        public List<string> coupon { get; set; }\n        public double favorable_price { get; set; }\n        public double independent { get; set; }\n        public double permanent { get; set; }\n        public double can_buy_hide { get; set; }\n        public double need_address { get; set; }\n        public double product_type { get; set; }\n        public double sale_limit_count { get; set; }\n        public string need_invite_code { get; set; }\n        public double bundle_stock { get; set; }\n        public double bundle_sku_select_count { get; set; }\n        public Config config { get; set; }\n        public double has_plan_config { get; set; }\n        public List<string> shipping_fee_info { get; set; }\n        public double expire_time { get; set; }\n        public List<string> sku_processed { get; set; }\n        public double rankType { get; set; }\n    }\n\n    public class Timing\n    {\n        public double timing_on { get; set; }\n        public double timing_off { get; set; }\n    }\n\n    public class Current_plan\n    {\n        public double can_ali_agreement { get; set; }\n        public string plan_id { get; set; }\n        public double rank { get; set; }\n        public string user_id { get; set; }\n        public double status { get; set; }\n        public string name { get; set; }\n        public string pic { get; set; }\n        public string desc { get; set; }\n        public string price { get; set; }\n        public double update_time { get; set; }\n        public Timing timing { get; set; }\n        public double pay_month { get; set; }\n        public string show_price { get; set; }\n        public string show_price_after_adjust { get; set; }\n        public double has_coupon { get; set; }\n        public List<string> coupon { get; set; }\n        public double favorable_price { get; set; }\n        public double independent { get; set; }\n        public double permanent { get; set; }\n        public double can_buy_hide { get; set; }\n        public double need_address { get; set; }\n        public double product_type { get; set; }\n        public double sale_limit_count { get; set; }\n        public string need_invite_code { get; set; }\n        public double bundle_stock { get; set; }\n        public double bundle_sku_select_count { get; set; }\n        public Config config { get; set; }\n        public double has_plan_config { get; set; }\n        public List<string> shipping_fee_info { get; set; }\n        public double expire_time { get; set; }\n        public List<string> sku_processed { get; set; }\n        public double rankType { get; set; }\n    }\n\n    public class User\n    {\n        public string user_id { get; set; }\n        public string name { get; set; }\n        public string avatar { get; set; }\n        public string user_private_id { get; set; }\n    }\n\n    public class ListItem\n    {\n        public List<Sponsor_plansItem> sponsor_plans { get; set; }\n        public Current_plan current_plan { get; set; }\n        public string all_sum_amount { get; set; }\n        public double first_pay_time { get; set; }\n        public double last_pay_time { get; set; }\n        public User user { get; set; }\n    }\n\n    public class Request\n    {\n        public string user_id { get; set; }\n        public string @params { get; set; }\n        public double ts { get; set; }\n        public string sign { get; set; }\n    }\n\n    public class Data\n    {\n        public double total_count { get; set; }\n        public double total_page { get; set; }\n        public List<ListItem> list { get; set; }\n        public Request request { get; set; }\n    }\n\n    public class Root\n    {\n        public double ec { get; set; }\n        public string em { get; set; }\n        public Data data { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Json/ModrinchVersionEntry.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Text.Json.Serialization;\n\nnamespace YMCL.Public.Classes.Json;\n\npublic class ModrinthVersionEntry\n{\n    public class Root\n    {\n        public List<string> game_versions { get; set; }\n        [JsonPropertyName(\"loaders\")] public List<string> Loaders { get; set; }\n\n        [JsonPropertyName(\"id\")] public string Id { get; set; }\n\n        [JsonPropertyName(\"project_id\")] public string ProjectId { get; set; }\n\n        [JsonPropertyName(\"author_id\")] public string AuthorId { get; set; }\n\n        [JsonPropertyName(\"featured\")] public bool Featured { get; set; }\n\n        [JsonPropertyName(\"name\")] public string Name { get; set; }\n\n        [JsonPropertyName(\"version_number\")] public string VersionNumber { get; set; }\n\n        [JsonPropertyName(\"changelog\")] public string Changelog { get; set; }\n\n        [JsonPropertyName(\"changelog_url\")] public string ChangelogUrl { get; set; }\n\n        public DateTime date_published { get; set; }\n\n        [JsonPropertyName(\"downloads\")] public int Downloads { get; set; }\n\n        [JsonPropertyName(\"version_type\")] public string VersionType { get; set; }\n\n        [JsonPropertyName(\"status\")] public string Status { get; set; }\n\n        [JsonPropertyName(\"requested_status\")] public object RequestedStatus { get; set; }\n\n        [JsonPropertyName(\"files\")] public List<File> Files { get; set; }\n\n        [JsonPropertyName(\"dependencies\")] public List<Dependency> Dependencies { get; set; }\n    }\n\n    public class File\n    {\n        [JsonPropertyName(\"hashes\")] public Dictionary<string, string> Hashes { get; set; }\n\n        [JsonPropertyName(\"url\")] public string Url { get; set; }\n\n        [JsonPropertyName(\"filename\")] public string Filename { get; set; }\n\n        [JsonPropertyName(\"primary\")] public bool Primary { get; set; }\n\n        [JsonPropertyName(\"size\")] public int Size { get; set; }\n\n        [JsonPropertyName(\"file_type\")] public object FileType { get; set; }\n    }\n\n    public class Dependency\n    {\n        [JsonPropertyName(\"version_id\")] public object VersionId { get; set; }\n\n        [JsonPropertyName(\"project_id\")] public string ProjectId { get; set; }\n\n        [JsonPropertyName(\"file_name\")] public object FileName { get; set; }\n\n        [JsonPropertyName(\"dependency_type\")] public string DependencyType { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Json/MojangJavaNews.cs",
    "content": "using System.Collections.Generic;\n\nnamespace YMCL.Public.Classes.Json;\n\npublic class MojangJavaNews()\n{\n    public class Image\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        public string title { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string url { get; set; }\n    }\n\n    public class EntriesItem\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        public string title { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string version { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string type { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public Image image { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string contentPath { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string id { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string date { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public string shortText { get; set; }\n    }\n\n    public class Root\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        public int version { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public List<EntriesItem> entries { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Netease/Availability.cs",
    "content": "﻿namespace YMCL.Public.Classes.Netease;\n\npublic class Availability\n{\n    public class Root\n    {\n        public bool success { get; set; }\n        public string message { get; set; }\n        public int code { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Netease/DefaultKeyword.cs",
    "content": "﻿namespace YMCL.Public.Classes.Netease;\n\npublic class DefaultKeyword\n{\n    public class StyleKeyword\n    {\n        public string keyWord { get; set; }\n        public object descWord { get; set; }\n    }\n\n    public class Data\n    {\n        public string showKeyword { get; set; }\n        public StyleKeyword styleKeyword { get; set; }\n        public string realkeyword { get; set; }\n        public int searchType { get; set; }\n        public int action { get; set; }\n        public string alg { get; set; }\n        public int gap { get; set; }\n        public object source { get; set; }\n        public string bizQueryInfo { get; set; }\n        public object logInfo { get; set; }\n        public object imageUrl { get; set; }\n        public object trp_type { get; set; }\n        public object trp_id { get; set; }\n    }\n\n    public class Root\n    {\n        public int code { get; set; }\n        public object message { get; set; }\n        public Data data { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Netease/Lyric.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace YMCL.Public.Classes.Netease;\n\npublic class Lyric\n{\n    public class LyricInfo\n    {\n        public int t { get; set; }\n        public List<LyricPart> c { get; set; }\n    }\n\n    public class LyricPart\n    {\n        public string tx { get; set; }\n        public string li { get; set; }\n        public string or { get; set; }\n    }\n\n    public class LyricItem\n    {\n        public int version { get; set; }\n        public string lyric { get; set; }\n    }\n\n    public class Root\n    {\n        public bool sgc { get; set; }\n        public bool sfy { get; set; }\n        public bool qfy { get; set; }\n        public User transUser { get; set; }\n        public User lyricUser { get; set; }\n        public LyricItem lrc { get; set; }\n        public LyricItem klyric { get; set; }\n        public LyricItem tlyric { get; set; }\n        public LyricItem romalrc { get; set; }\n        public LyricItem yrc { get; set; }\n        public LyricItem ytlrc { get; set; }\n        public LyricItem yromalrc { get; set; }\n        public int code { get; set; }\n    }\n\n    public class User\n    {\n        public int id { get; set; }\n        public int status { get; set; }\n        public int demand { get; set; }\n        public int userid { get; set; }\n        public string nickname { get; set; }\n        public long uptime { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Netease/PlayList.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace YMCL.Public.Classes.Netease;\n\npublic class PlayList\n{\n    public class Creator\n    {\n        public string nickname { get; set; }\n        public long userId { get; set; }\n        public int userType { get; set; }\n        public object avatarUrl { get; set; }\n        public int authStatus { get; set; }\n        public object expertTags { get; set; }\n        public object experts { get; set; }\n    }\n\n    public class Playlist\n    {\n        public long id { get; set; }\n        public string name { get; set; }\n        public string coverImgUrl { get; set; }\n        public Creator creator { get; set; }\n        public bool subscribed { get; set; }\n        public int trackCount { get; set; }\n        public long userId { get; set; }\n        public long playCount { get; set; }\n        public long bookCount { get; set; }\n        public int specialType { get; set; }\n        public object officialTags { get; set; }\n        public object action { get; set; }\n        public object actionType { get; set; }\n        public object recommendText { get; set; }\n        public object score { get; set; }\n        public string description { get; set; }\n        public bool highQuality { get; set; }\n    }\n\n    public class Result\n    {\n        public object searchQcReminder { get; set; }\n        public List<Playlist> playlists { get; set; }\n        public int playlistCount { get; set; }\n    }\n\n    public class Root\n    {\n        public Result result { get; set; }\n        public int code { get; set; }\n    }\n\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Netease/RecordSongEntry.cs",
    "content": "namespace YMCL.Public.Classes.Netease;\n\npublic class RecordSongEntry\n{\n    public Enum.SongType Type { get; set; } = Enum.SongType.Unknown;\n    public string SongPicUri { get; set; } = string.Empty;\n    public string DisplayNumber { get; set; }=string.Empty;\n    public uint Number { get; set; } = 0;\n    public string SongName { get; set; } = string.Empty;\n    public double SongId { get; set; } = -1;\n    public string SongAuthors { get; set; } = string.Empty;\n    public TimeSpan Duration { get; set; }\n    public string DisplayDuration { get; set; } = string.Empty;\n    public double AlbumId { get; set; } = -1;\n    public string AlbumName { get; set; } = string.Empty;\n    public string Path { get; set; } = string.Empty;\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Netease/SingleSong.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace YMCL.Public.Classes.Netease;\n\npublic class SearchSingleSong\n{\n    public class ArItem\n    {\n        /// <summary>\n        /// </summary>\n        public double id { get; set; }\n\n        /// <summary>\n        ///     葛雨晴\n        /// </summary>\n        public string name { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public List<string> tns { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public List<string> alias { get; set; }\n    }\n\n    public class Al\n    {\n        /// <summary>\n        /// </summary>\n        public double id { get; set; }\n\n        /// <summary>\n        ///     逃向宇宙\n        /// </summary>\n        public string name { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string picUrl { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public List<string> tns { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string pic_str { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double pic { get; set; }\n    }\n\n    public class H\n    {\n        /// <summary>\n        /// </summary>\n        public double br { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double fid { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double size { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double vd { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double sr { get; set; }\n    }\n\n    public class M\n    {\n        /// <summary>\n        /// </summary>\n        public double br { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double fid { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double size { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double vd { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double sr { get; set; }\n    }\n\n    public class L\n    {\n        /// <summary>\n        /// </summary>\n        public double br { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double fid { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double size { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double vd { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double sr { get; set; }\n    }\n\n    public class Sq\n    {\n        /// <summary>\n        /// </summary>\n        public double br { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double fid { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double size { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double vd { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double sr { get; set; }\n    }\n\n    public class FreeTrialPrivilege\n    {\n        /// <summary>\n        /// </summary>\n        public string resConsumable { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string userConsumable { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string listenType { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string cannotListenReason { get; set; }\n    }\n\n    public class ChargeInfoListItem\n    {\n        /// <summary>\n        /// </summary>\n        public double rate { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string chargeUrl { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string chargeMessage { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double chargeType { get; set; }\n    }\n\n    public class Privilege\n    {\n        /// <summary>\n        /// </summary>\n        public double id { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double fee { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double payed { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double st { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double pl { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double dl { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double sp { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double cp { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double subp { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string cs { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double maxbr { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double fl { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string toast { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double flag { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string preSell { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double playMaxbr { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double downloadMaxbr { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string maxBrLevel { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string playMaxBrLevel { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string downloadMaxBrLevel { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string plLevel { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string dlLevel { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string flLevel { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public string rscl { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public FreeTrialPrivilege freeTrialPrivilege { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double rightSource { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public List<ChargeInfoListItem> chargeInfoList { get; set; }\n    }\n\n    public class SongsItem\n    {\n        public string name { get; set; }\n        public double id { get; set; }\n        public List<ArItem> ar { get; set; }\n        public Al al { get; set; }\n        public double dt { get; set; }\n    }\n\n    public class Result\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        //public string searchQcReminder { get; set; }\n        /// <summary>\n        /// </summary>\n        public List<SongsItem> songs { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double songCount { get; set; }\n    }\n\n    public class Root\n    {\n        /// <summary>\n        /// </summary>\n        public Result result { get; set; }\n\n        /// <summary>\n        /// </summary>\n        public double code { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Netease/SongUrl.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace YMCL.Public.Classes.Netease;\n\npublic class SongUrl\n{\n    public class DataItem\n    {\n        public string url { get; set; }\n        public double time { get; set; }\n    }\n\n    public class Root\n    {\n        /// <summary>\n        /// \n        /// </summary>\n        public List<DataItem> data { get; set; }\n\n        /// <summary>\n        /// \n        /// </summary>\n        public int code { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Operate/FavouriteMinecraftEntry.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Layout;\nusing Avalonia.Media;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch.Components.Parser;\nusing Newtonsoft.Json;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Mc;\nusing YMCL.Public.Module.Mc.Launcher;\nusing YMCL.Public.Module.Value;\n\nnamespace YMCL.Public.Classes.Operate;\n\npublic sealed class FavouriteMinecraftEntry : INotifyPropertyChanged\n{\n    private string _iconBase64;\n    private string _minecraftPath;\n    private string _minecraftId;\n    private string _displayName;\n    private string _serverUrl;\n    private string _worldName;\n    private bool _isSupportJoinWorld = true;\n\n    [JsonIgnore] public Bitmap Bitmap => Converter.Base64ToBitmap(IconBase64);\n\n    [JsonProperty]\n    public string IconBase64\n    {\n        get => _iconBase64;\n        set\n        {\n            if (SetField(ref _iconBase64, value)) OnPropertyChanged(nameof(Bitmap));\n        }\n    }\n\n    [JsonProperty]\n    public string MinecraftPath\n    {\n        get => _minecraftPath;\n        set => SetField(ref _minecraftPath, value);\n    }\n\n    [JsonProperty]\n    public string MinecraftId\n    {\n        get => _minecraftId;\n        set => SetField(ref _minecraftId, value);\n    }\n\n    [JsonProperty]\n    public bool IsSupportJoinWorld\n    {\n        get => _isSupportJoinWorld;\n        set => SetField(ref _isSupportJoinWorld, value);\n    }\n\n    [JsonProperty]\n    public string DisplayName\n    {\n        get => _displayName;\n        set => SetField(ref _displayName, value);\n    }\n\n    [JsonProperty]\n    public string ServerUrl\n    {\n        get => _serverUrl;\n        set => SetField(ref _serverUrl, value);\n    }\n\n    [JsonProperty]\n    public string WorldName\n    {\n        get => _worldName;\n        set => SetField(ref _worldName, value);\n    }\n\n    public bool Equals(FavouriteMinecraftEntry? other)\n    {\n        return other != null && MinecraftPath == other?.MinecraftPath && MinecraftId == other.MinecraftId &&\n               DisplayName == other.DisplayName && ServerUrl == other.ServerUrl;\n    }\n\n    public async void Rename()\n    {\n        var textBox = new TextBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n            Text = DisplayName, HorizontalAlignment = HorizontalAlignment.Stretch, Width = 500\n        };\n        var cr = await ShowDialogAsync(MainLang.Rename, p_content: textBox, b_cancel: MainLang.Cancel,\n            b_primary: MainLang.Ok);\n        if (cr != ContentDialogResult.Primary) return;\n        DisplayName = textBox.Text ?? MinecraftId;\n\n        await File.WriteAllTextAsync(ConfigPath.FavouriteMinecraftDataPath,\n            JsonConvert.SerializeObject(Const.Data.FavouriteMinecraft, Formatting.Indented));\n    }\n\n    public void Del()\n    {\n        Const.Data.FavouriteMinecraft.Remove(this);\n\n        File.WriteAllText(ConfigPath.FavouriteMinecraftDataPath,\n            JsonConvert.SerializeObject(Const.Data.FavouriteMinecraft, Formatting.Indented));\n    }\n\n    public async void SetIcon()\n    {\n        var list = await TopLevel.GetTopLevel(App.UiRoot).StorageProvider.OpenFilePickerAsync(\n            new FilePickerOpenOptions\n                { AllowMultiple = false, FileTypeFilter = [FilePickerFileTypes.ImageAll] });\n        if (list.Count == 0) return;\n        try\n        {\n            var bitmap = new Bitmap(list[0].Path.LocalPath);\n            IconBase64 = Converter.BitmapToBase64(bitmap);\n            Notice(MainLang.OperateSuccess);\n        }\n        catch\n        {\n            Notice(MainLang.OperateFailed);\n        }\n\n        await File.WriteAllTextAsync(ConfigPath.FavouriteMinecraftDataPath,\n            JsonConvert.SerializeObject(Const.Data.FavouriteMinecraft, Formatting.Indented));\n    }\n\n    public async void SetServer()\n    {\n        var textBox = new TextBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n            Text = ServerUrl, HorizontalAlignment = HorizontalAlignment.Stretch, Width = 500,\n            Watermark = \"example.com:25565\"\n        };\n        var cr = await ShowDialogAsync(MainLang.Rename, MainLang.SetAutoJoinServerTip, p_content: textBox,\n            b_cancel: MainLang.Cancel,\n            b_primary: MainLang.Ok);\n        if (cr != ContentDialogResult.Primary) return;\n        ServerUrl = textBox.Text ?? string.Empty;\n        WorldName = string.Empty;\n\n        await File.WriteAllTextAsync(ConfigPath.FavouriteMinecraftDataPath,\n            JsonConvert.SerializeObject(Const.Data.FavouriteMinecraft, Formatting.Indented));\n    }\n\n    public async void SetWorld()\n    {\n        var textBox = new TextBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n            Text = WorldName, HorizontalAlignment = HorizontalAlignment.Stretch, Width = 500,\n            Watermark = MainLang.SavesName\n        };\n        var cr = await ShowDialogAsync(MainLang.Rename,\n            IsSupportJoinWorld\n                ? MainLang.SetAutoJoinWorldTip\n                : $\"{MainLang.CurrentVersionUnsupportOperation}\\n{MainLang.SetAutoJoinWorldTip}\", p_content: textBox,\n            b_cancel: MainLang.Cancel,\n            b_primary: MainLang.Ok);\n        if (cr != ContentDialogResult.Primary) return;\n        ServerUrl = string.Empty;\n        WorldName = textBox.Text ?? string.Empty;\n\n        await File.WriteAllTextAsync(ConfigPath.FavouriteMinecraftDataPath,\n            JsonConvert.SerializeObject(Const.Data.FavouriteMinecraft, Formatting.Indented));\n    }\n\n    public void Launch()\n    {\n        if (!Directory.Exists(MinecraftPath))\n        {\n            Notice(MainLang.FolderNotExist, NotificationType.Error);\n            return;\n        }\n\n        var parser = new MinecraftParser(MinecraftPath);\n        var entry = parser.GetMinecraft(MinecraftId);\n        if (entry == null)\n        {\n            Notice(MainLang.CreateGameEntryFail, NotificationType.Error);\n            return;\n        }\n\n        var setting = MinecraftSetting.GetGameSetting(entry);\n        MinecraftSetting.HandleGameSetting(setting);\n        if (setting.Java.JavaVersion == \"Auto\")\n        {\n            setting.Java =\n                YMCL.Public.Module.Value.Calculator.GetCurrentJava(Const.Data.JavaRuntimes.ToList(), entry);\n        }\n\n        if (setting.Java.JavaPath == \"Error\")\n        {\n            Notice($\"{MainLang.CannotFandRightJava}\\n{setting.Java.JavaVersion}\", NotificationType.Error);\n            return;\n        }\n\n        if (setting.Java.JavaPath == null)\n        {\n            Notice(MainLang.JavaRuntimeError, NotificationType.Error);\n            return;\n        }\n\n        _ = JavaClient.Launch(MinecraftId, entry.MinecraftFolderPath, setting.MaxMem,\n            JavaEntry.YmclToMl(setting.Java),\n            p_fullUrl: !string.IsNullOrWhiteSpace(ServerUrl) ? ServerUrl : setting.AutoJoinServerIp,\n            p_world: WorldName);\n    }\n\n    public event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return false;\n        field = value;\n        OnPropertyChanged(propertyName);\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Operate/MinecraftDataEntry.cs",
    "content": "﻿using System.IO;\nusing System.Linq;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Media.Imaging;\nusing MinecraftLaunch.Base.Models.Game;\nusing Newtonsoft.Json;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Mc;\nusing YMCL.Public.Module.Mc.Launcher;\nusing YMCL.Public.Module.Ui.Special;\n\nnamespace YMCL.Public.Classes.Operate;\n\npublic sealed record MinecraftDataEntry\n{\n    [JsonIgnore] public bool IsFavourite { get; }\n    [JsonIgnore] public Action? LaunchAction { get; set; }\n    [JsonIgnore] public bool IsSettingVisible { get; set; } = true;\n    [JsonIgnore] public string FavouriteIcon { get; set; }\n    public string ListTip { get; set; }\n    public string Loaders { get; set; }\n    public string Id { get; set; }\n    public string Type { get; set; }\n    [JsonIgnore] public Bitmap Icon => Public.Module.Mc.Icon.GetMinecraftIcon(this);\n    public MinecraftEntry MinecraftEntry { get; set; }\n\n    public async Task SettingCommand()\n    {\n        await YMCL.App.UiRoot.ViewModel.Launch.CloseGameList(false);\n        _ = YMCL.App.UiRoot.ViewModel.Launch.OpenGameSetting(MinecraftEntry);\n    }\n\n    public void LaunchCommand()\n    {\n        LaunchAction?.Invoke();\n    }\n\n    public void FavouriteCommand()\n    {\n        if (string.IsNullOrWhiteSpace(MinecraftEntry.ClientJarPath)) return;\n        var path = Path.Combine(MinecraftEntry.MinecraftFolderPath, \"versions\", MinecraftEntry.Id, \"YMCL.Favourite\");\n        YMCL.App.UiRoot.ViewModel.Launch._gameList.CanCloseGameList = false;\n        var favourite = File.Exists(path);\n        try\n        {\n            if (!favourite)\n            {\n                File.WriteAllText(path, string.Empty);\n            }\n            else\n            {\n                File.Delete(path);\n            }\n        }\n        catch\n        {\n        }\n\n        LaunchUi.LoadGames();\n        YMCL.App.UiRoot.ViewModel.Launch._gameList.CanCloseGameList = true;\n    }\n\n    public MinecraftDataEntry(MinecraftEntry minecraftEntry, bool favourite = false, bool isBedrock = false)\n    {\n        if (minecraftEntry == null && !isBedrock) return;\n        if (isBedrock)\n            Type = \"bedrock\";\n        IsFavourite = favourite;\n        if (Type != \"bedrock\")\n        {\n            Id = minecraftEntry.Id;\n            ListTip = minecraftEntry.Version.VersionId;\n            MinecraftEntry = minecraftEntry;\n            Loaders = MinecraftEntry.IsVanilla\n                ? \"Vanilla\"\n                : string.Join(\" , \",\n                    (MinecraftEntry as ModifiedMinecraftEntry)?.ModLoaders.Select(a => $\"{a.Type} {a.Version}\")!);\n            FavouriteIcon = favourite\n                ? \"F1 M 4.21875 19.53125 C 4.049479 19.53125 3.902995 19.467773 3.779297 19.34082 C 3.655599 19.213867 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 L 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.571939 0.633139 9.672852 0.571289 C 9.773763 0.509441 9.879557 0.478516 9.990234 0.478516 C 10.107422 0.478516 10.218099 0.507812 10.322266 0.566406 C 10.426432 0.625 10.504557 0.709637 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.082683 19.918619 8.232422 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.420573 19.505209 4.322917 19.53125 4.21875 19.53125 Z \"\n                : \"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \";\n        }\n        else\n        {\n            Id = MainLang.BedRockVersion;\n            ListTip = \"如未安装基岩版则无法启动\";\n            IsFavourite = true;\n        }\n\n        InitLaunchAction(minecraftEntry);\n    }\n\n    private void InitLaunchAction(MinecraftEntry? entry)\n    {\n        if (Type == \"bedrock\")\n        {\n            LaunchAction = () =>\n            {\n                if (YMCL.App.UiRoot != null)\n                    YMCL.Public.Module.Mc.Launcher.BedRock.Launch(YMCL.App.UiRoot);\n            };\n        }\n        else\n        {\n            if (entry == null) return;\n            LaunchAction = () =>\n            {\n                var setting = MinecraftSetting.GetGameSetting(entry);\n                MinecraftSetting.HandleGameSetting(setting);\n                if (setting.Java.JavaVersion == \"Auto\")\n                {\n                    setting.Java =\n                        YMCL.Public.Module.Value.Calculator.GetCurrentJava(Const.Data.JavaRuntimes.ToList<JavaEntry>(), entry);\n                }\n\n                \n                if (setting.Java.JavaPath == \"Error\")\n                {\n                    Notice($\"{MainLang.CannotFandRightJava}\\n{setting.Java.JavaVersion}\", NotificationType.Error);\n                    return;\n                }\n        \n                if (setting.Java.JavaPath == null)\n                {\n                    Notice(MainLang.JavaRuntimeError, NotificationType.Error);\n                    return;\n                }\n                \n                _ = JavaClient.Launch(Id, entry.MinecraftFolderPath, setting.MaxMem,\n                    JavaEntry.YmclToMl(setting.Java), p_fullUrl: setting.AutoJoinServerIp);\n            };\n        }\n    }\n\n    public bool Equals(MinecraftDataEntry? other)\n    {\n        return other != null && Id == other.Id;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Operate/PluginInfoEntry.cs",
    "content": "﻿using System.IO;\nusing Newtonsoft.Json;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Plugin.Base;\n\nnamespace YMCL.Public.Classes.Operate;\n\npublic class PluginInfoEntry : ReactiveObject\n{\n    public IPlugin Plugin { get; }\n    [Reactive] public bool IsEnable { get; set; }\n    public string Path { get; }\n\n    public PluginInfoEntry(IPlugin plugin, string path, bool isEnable = false)\n    {\n        Plugin = plugin;\n        Path = path;\n        IsEnable = isEnable;\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName != nameof(IsEnable)) return;\n            if (IsEnable)\n            {\n                Const.Data.EnablePlugins.Add(Path);\n            }\n            else\n            {\n                Const.Data.EnablePlugins.Remove(Path);\n            }\n\n            File.WriteAllText(ConfigPath.PluginDataPath,\n                JsonConvert.SerializeObject(Const.Data.EnablePlugins, Formatting.Indented));\n\n            try\n            {\n                Plugin.Execute(IsEnable);\n            }\n            catch\n            {\n            }\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Operate/RegisteredPage.cs",
    "content": "﻿using FluentAvalonia.UI.Controls;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Public.Classes.Operate;\n\npublic class RegisteredPage\n{\n    public NavigationView Host { get; init; }\n    public Control NavContent { get; init; }\n    public string Tag { get; init; }\n    public Control Page { get; init; }\n    private NavigationViewItem _item;\n    private EventHandler<NavigationViewSelectionChangedEventArgs> _handler;\n\n    public void Show()\n    {\n        Host.MenuItems.Add(_item);\n        Host.SelectionChanged += _handler;\n    }\n\n    public void Hide()\n    {\n        Host.MenuItems.Remove(_item);\n        Host.SelectionChanged -= _handler;\n    }\n\n    public RegisteredPage Build()\n    {\n        _item = new NavigationViewItem()\n        {\n            Tag = Tag,\n            Content = NavContent != null ? NavContent : Tag\n        };\n        _handler = (o, e) =>\n        {\n            var tag = ((e.SelectedItem as NavigationViewItem).Tag as string)!;\n            if (tag != Tag) return;\n            App.UiRoot.Frame.Content = Page;\n            _ = Animator.PageLoading.LevelTwoPage(Page);\n        };\n        return this;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Operate/SubTask.cs",
    "content": "﻿using Avalonia.Media;\nusing FluentAvalonia.UI.Controls;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Public.Classes.Operate;\n\npublic sealed class SubTask : ReactiveObject\n{\n    public SubTask(string name, int totalTask = 1, int finishedTask = 0)\n    {\n        Name = name;\n        TotalTask = totalTask;\n        FinishedTask = finishedTask;\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(State))\n            {\n                GetIcon();\n            }\n        };\n        State = TaskState.Waiting;\n        GetIcon();\n    }\n\n    [Reactive] public string Name { get; set; }\n    [Reactive] public int TotalTask { get; set; }\n    [Reactive] public int FinishedTask { get; set; }\n    [Reactive] public int FailedTask { get; set; }\n    [Reactive] public Control Icon { get; set; }\n    [Reactive] public TaskState State { get; set; }\n\n    private void GetIcon()\n    {\n        Icon = State switch\n        {\n            TaskState.Finished => new PathIcon\n            {\n                Width = 14, Height = 16,\n                Data = Geometry.Parse\n                    (\"F1 M 0 9.375 C 0 9.205729 0.061849 9.059245 0.185547 8.935547 C 0.309245 8.81185 0.455729 8.75 0.625 8.75 C 0.794271 8.75 0.940755 8.81185 1.064453 8.935547 L 6.875 14.736328 L 18.935547 2.685547 C 19.059244 2.56185 19.205729 2.5 19.375 2.5 C 19.54427 2.5 19.690754 2.56185 19.814453 2.685547 C 19.93815 2.809246 20 2.95573 20 3.125 C 20 3.294271 19.93815 3.440756 19.814453 3.564453 L 7.314453 16.064453 C 7.190755 16.188152 7.044271 16.25 6.875 16.25 C 6.705729 16.25 6.559244 16.188152 6.435547 16.064453 L 0.185547 9.814453 C 0.061849 9.690756 0 9.544271 0 9.375 Z \")\n            },\n            TaskState.Waiting => new PathIcon\n            {\n                Width = 12, Height = 16,\n                Data = Geometry.Parse\n                    (\"F1 M 3.125 10.625 C 2.955729 10.625 2.809245 10.563151 2.685547 10.439453 C 2.561849 10.315756 2.5 10.169271 2.5 10 C 2.5 9.830729 2.561849 9.684245 2.685547 9.560547 C 2.809245 9.43685 2.955729 9.375 3.125 9.375 L 16.875 9.375 C 17.04427 9.375 17.190754 9.43685 17.314453 9.560547 C 17.43815 9.684245 17.5 9.830729 17.5 10 C 17.5 10.169271 17.43815 10.315756 17.314453 10.439453 C 17.190754 10.563151 17.04427 10.625 16.875 10.625 Z \")\n            },\n            TaskState.Running => new ProgressRing { Width = 16, Height = 16 },\n            _ => null\n        };\n    }\n\n    public void Finish()\n    {\n        State = TaskState.Finished;\n        FinishedTask = TotalTask;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Operate/TaskEntryOperateButtonEntry.cs",
    "content": "﻿using ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\n\nnamespace YMCL.Public.Classes.Operate;\n\npublic class TaskEntryOperateButtonEntry : ReactiveObject\n{\n    [Reactive] public Action Action { get; set; }\n\n    public void ActionInvoke()\n    {\n        Action.Invoke();\n    }\n\n    [Reactive] public object Content { get; set; }\n\n    public TaskEntryOperateButtonEntry(object content, Action action)\n    {\n        Content = content;\n        Action = action;\n    }\n\n    public void UpdateAction(Action action)\n    {\n        Action = action;\n    }\n\n    public void UpdateContent(object context)\n    {\n        Content = context;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Setting/Account.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing Avalonia.Media.Imaging;\nusing MinecraftLaunch.Skin;\nusing Newtonsoft.Json;\nusing YMCL.Public.Module.Value;\n\nnamespace YMCL.Public.Classes.Setting;\n\npublic sealed record AccountInfo : INotifyPropertyChanged\n{\n    public Enum.Setting.AccountType AccountType { get; set; }\n\n    public string Name { get; set; } = \"Unnamed\";\n\n    public string AddTime { get; set; } = \"1970-01-01T00:00:00+08:00\";\n\n    public string? Data { get; set; }\n\n    public string Skin { get; set; } =\n        \"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFDUlEQVR42u2a20sUURzH97G0LKMotPuWbVpslj1olJXdjCgyisowsSjzgrB0gSKyC5UF1ZNQWEEQSBQ9dHsIe+zJ/+nXfM/sb/rN4ZwZ96LOrnPgyxzP/M7Z+X7OZc96JpEISfWrFhK0YcU8knlozeJKunE4HahEqSc2nF6zSEkCgGCyb+82enyqybtCZQWAzdfVVFgBJJNJn1BWFgC49/VpwGVlD0CaxQiA5HSYEwBM5sMAdKTqygcAG9+8coHKY/XXAZhUNgDYuBSPjJL/GkzVVhAEU5tqK5XZ7cnFtHWtq/TahdSw2l0HUisr1UKIWJQBAMehDuqiDdzndsP2EZECAG1ZXaWMwOCODdXqysLf++uXUGv9MhUHIByDOijjdiSAoH3ErANQD73C7TXXuGOsFj1d4YH4OTJAEy8y9Hd0mCaeZ5z8dfp88zw1bVyiYhCLOg1ZeAqC0ybaDttHRGME1DhDeVWV26u17lRAPr2+mj7dvULfHw2q65fhQRrLXKDfIxkau3ZMCTGIRR3URR5toU38HbaPiMwUcKfBAkoun09PzrbQ2KWD1JJaqswjdeweoR93rirzyCMBCmIQizqoizZkm2H7iOgAcHrMHbbV9KijkUYv7qOn55sdc4fo250e+vUg4329/Xk6QB/6DtOws+dHDGJRB3XRBve+XARt+4hIrAF4UAzbnrY0ve07QW8uHfB+0LzqanMM7qVb+3f69LJrD90/1axiEIs6qIs21BTIToewfcSsA+Bfb2x67OoR1aPPzu2i60fSNHRwCw221Suz0O3jO+jh6V1KyCMGse9721XdN5ePutdsewxS30cwuMjtC860T5JUKpXyKbSByUn7psi5l+juDlZYGh9324GcPKbkycaN3jUSAGxb46IAYPNZzW0AzgiQ5tVnzLUpUDCAbakMQXXrOtX1UMtHn+Q9/X5L4wgl7t37r85OSrx+TYl379SCia9KXjxRpiTjIZTBFOvrV1f8ty2eY/T7XJ81FQAwmA8ASH1ob68r5PnBsxA88/xAMh6SpqW4HRnLBrkOA9Xv5wPAZjAUgOkB+SHxgBgR0qSMh0zmZRsmwDJm1gFg2PMDIC8/nAHIMls8x8GgzOsG5WiaqREgYzDvpTwjLDy8NM15LpexDEA3LepjU8Z64my+8PtDCmUyRr+fFwA2J0eAFYA0AxgSgMmYBMZTwFQnO9RNAEaHOj2DXF5UADmvAToA2ftyxZYA5BqgmZZApDkdAK4mAKo8GzPlr8G8AehzMAyA/i1girUA0HtYB2CaIkUBEHQ/cBHSvwF0AKZFS5M0ZwMQtEaEAmhtbSUoDADH9ff3++QZ4o0I957e+zYAMt6wHkhzpjkuAcgpwNcpA7AZDLsvpwiuOkBvxygA6Bsvb0HlaeKIF2EbADZpGiGzBsA0gnwQHGOhW2snRpbpPexbAB2Z1oicAMQpTnGKU5ziFKc4xSlOcYpTnOIUpzgVmgo+XC324WfJAdDO/+ceADkCpuMFiFKbApEHkOv7BfzfXt+5gpT8V7rpfYJcDz+jAsB233r6yyBsJ0mlBCDofuBJkel4vOwBFPv8fyYAFPJ+wbSf/88UANNRVy4Awo6+Ig2gkCmgA5DHWjoA+X7AlM//owLANkX0w0359od++pvX8fdMAcj3/QJ9iJsAFPQCxHSnQt8vMJ3v2wCYpkhkAOR7vG7q4aCXoMoSgG8hFAuc/grMdAD4B/kHl9da7Ne9AAAAAElFTkSuQmCC\";\n\n    [JsonIgnore]\n    public Bitmap Bitmap => HandleHeadSkin();\n\n    public void UpdateSkin(byte[] data)\n    {\n        if (data == null) return;\n        Skin = Convert.ToBase64String(data);\n    }\n\n    private Bitmap HandleHeadSkin()\n    {\n        SkinResolver SkinResolver = new(Convert.FromBase64String(Skin));\n        var bytes = ImageHelper.ConvertToByteArray(SkinResolver.CropSkinHeadBitmap());\n        return Converter.Base64ToBitmap(Converter.BytesToBase64(bytes));\n    }\n\n    public bool Equals(AccountInfo? other)\n    {\n        return other != null && Skin == other.Skin && Name == other.Name && Data == other.Data;\n    }\n\n    public event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return false;\n        field = value;\n        OnPropertyChanged(propertyName);\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Setting/ExchangeSettingEntry.cs",
    "content": "﻿using System.Collections.Generic;\nusing Avalonia.Media;\nusing YMCL.Public.Classes.Data;\n\nnamespace YMCL.Public.Classes.Setting;\n\npublic record ExchangeSettingEntry\n{\n    public record Data\n    {\n        public NetworkSettings? NetworkSettings { get; set; }\n        public LaunchSettings? LaunchSettings { get; set; }\n        public UiSettings? UiSettings { get; set; }\n        public OtherSettings? OtherSettings { get; set; }\n        public IEnumerable<AccountInfo>? AccountSettings { get; set; }\n    }\n\n    public record NetworkSettings\n    {\n        public bool EnableAutoCheckUpdate { get; set; }\n        public int MaxDownloadThread { get; set; }\n        public string? CustomUpdateUrl { get; set; }\n        public bool EnableCustomUpdateUrl { get; set; }\n        public string? MusicApiWithIPAddress { get; set; }\n        public Enum.Setting.DownloadSource DownloadSource { get; set; }\n        public string? MusicApi { get; set; }\n        public int MaxFileFragmentation { get; set; }\n    }\n\n    public record LaunchSettings\n    {\n        public double MaxMem { get; set; }\n        public bool EnableAutoAllocateMem { get; set; }\n        public bool EnableIndependencyCore { get; set; }\n    }\n\n    public record UiSettings\n    {\n        public double TranslucentBackgroundOpacity { get; set; }\n        public Enum.Setting.Theme Theme { get; set; }\n        public Enum.Setting.LauncherVisibility LauncherVisibility { get; set; }\n        public string? SpecialControlEnableTranslucent { get; set; }\n        public int CornerRadius { get; set; }\n        public string? CustomHomePageUrl { get; set; }\n        public bool? EnableIndependencyWindowNotification { get; set; }\n        public Color DeskLyricColor { get; set; }\n        public Enum.Setting.NoticeWay NoticeWay { get; set; }\n        public Color AccentColor { get; set; }\n        public Language Language { get; set; }\n        public Enum.Setting.CustomBackGroundWay CustomBackGround { get; set; }\n        public double DeskLyricSize { get; set; }\n        public TextAlignment DeskLyricAlignment { get; set; }\n        public string? WindowBackGroundImgData { get; set; }\n    }\n    \n    public record OtherSettings\n    {\n        public double Volume { get; set; }\n        public Enum.Setting.Repeat Repeat { get; set; }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Setting/GameSettingEntry.cs",
    "content": "﻿using MinecraftLaunch.Base.Models.Game;\nusing Newtonsoft.Json;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Classes.Data;\n\nnamespace YMCL.Public.Classes.Setting;\n\npublic sealed class GameSettingEntry : ReactiveObject\n{\n    [Reactive]\n    [JsonProperty]\n    public Enum.Setting.VersionSettingEnableIndependencyCore EnableIndependencyCore { get; set; } =\n        Enum.Setting.VersionSettingEnableIndependencyCore.Global;\n\n    [Reactive] [JsonProperty] public JavaEntry Java { get; set; } = new() { JavaVersion = \"Global\" };\n    [Reactive] [JsonProperty] public double MaxMem { get; set; } = -2;\n    [Reactive] [JsonProperty] public string AutoJoinServerIp { get; set; } = string.Empty;\n    [Reactive] [JsonProperty] public Enum.Setting.MaxMemWay MaxMemWay { get; set; } = Enum.Setting.MaxMemWay.Global;\n    [Reactive] [JsonIgnore] public bool IsEnableIndependencyCore { get; set; }\n    [Reactive] [JsonIgnore] public MinecraftEntry MinecraftEntry { get; set; }\n\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Setting/SettingEntry.cs",
    "content": "﻿using Avalonia.Media;\nusing Avalonia.Threading;\nusing MinecraftLaunch;\nusing MinecraftLaunch.Components.Authenticator;\nusing Newtonsoft.Json;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.App;\nusing YMCL.Public.Module.App.Init.SubModule;\nusing YMCL.Public.Module.Ui.Special;\nusing YMCL.Views.Main;\nusing Language = YMCL.Public.Classes.Data.Language;\nusing MinecraftFolder = YMCL.Public.Classes.Data.MinecraftFolder;\nusing Setter = YMCL.Public.Module.Ui.Setter;\n\nnamespace YMCL.Public.Classes.Setting;\n\npublic class SettingEntry : ReactiveObject\n{\n    [Reactive] [JsonProperty] public string SkipUpdateVersion { get; set; } = string.Empty;\n    [Reactive] [JsonProperty] public bool EnableAutoCheckUpdate { get; set; } = true;\n    [Reactive] [JsonProperty] public int MaxDownloadThread { get; set; } = 64;\n    [Reactive] [JsonProperty] public double TranslucentBackgroundOpacity { get; set; } = 0.68;\n    [Reactive] [JsonProperty] public bool IsCompleteJavaInitialize { get; set; }\n    [Reactive] [JsonProperty] public bool IsCompleteMinecraftFolderInitialize { get; set; }\n    [Reactive] [JsonProperty] public bool IsCompleteAccountInitialize { get; set; }\n    [Reactive] [JsonProperty] public string? CustomHomePageUrl { get; set; }\n    [Reactive] [JsonProperty] public Enum.Setting.NoticeWay NoticeWay { get; set; } = Enum.Setting.NoticeWay.Bubble;\n\n    [Reactive]\n    [JsonProperty]\n    public Enum.Setting.DownloadSource DownloadSource { get; set; } = Enum.Setting.DownloadSource.Mojang;\n\n    [Reactive]\n    [JsonProperty]\n    public Enum.Setting.LauncherVisibility LauncherVisibility { get; set; } =\n        Enum.Setting.LauncherVisibility.AfterLaunchKeepLauncherVisible;\n\n    [Reactive] [JsonProperty] public Enum.Setting.Theme Theme { get; set; } = Enum.Setting.Theme.Dark;\n    [Reactive] [JsonProperty] public double MaxMem { get; set; } = 1024;\n    [Reactive] [JsonProperty] public int MaxFileFragmentation { get; set; } = 8;\n    [Reactive] [JsonProperty] public int CornerRadius { get; set; } = 5;\n    [Reactive] [JsonProperty] public double Volume { get; set; } = 50;\n    [Reactive] [JsonProperty] public double DeskLyricSize { get; set; } = 16;\n    [Reactive] [JsonProperty] public Enum.Setting.Repeat Repeat { get; set; } = Enum.Setting.Repeat.RepeatAll;\n    [Reactive] [JsonProperty] public TextAlignment DeskLyricAlignment { get; set; } = TextAlignment.Center;\n    [Reactive] [JsonProperty] public string? SelectedMinecraftId { get; set; }\n    [Reactive] [JsonProperty] public bool EnableIndependencyCore { get; set; } = true;\n    [Reactive] [JsonProperty] public bool EnableCustomUpdateUrl { get; set; }\n    [Reactive] [JsonProperty] public bool EnableAutoAllocateMem { get; set; }\n    [Reactive] [JsonProperty] public bool EnableIndependencyWindowNotification { get; set; } = true;\n    [Reactive] [JsonProperty] public string? CustomUpdateUrl { get; set; } = \"https://github.moeyy.xyz/{%url%}\";\n    [Reactive] [JsonProperty] public string? MusicApi { get; set; } = \"http://music.api.yik.at/\";\n\n    [Reactive]\n    [JsonProperty]\n    public string SpecialControlEnableTranslucent { get; set; } =\n        \"ContentDialog,NotificationCard,NotificationBubble,Popup\";\n\n    [Reactive]\n    [JsonProperty]\n    public Enum.Setting.CustomBackGroundWay CustomBackGround { get; set; } = Enum.Setting.CustomBackGroundWay.Default;\n\n    [Reactive]\n    [JsonProperty]\n    public Enum.Setting.CustomHomePageWay CustomHomePage { get; set; } = Enum.Setting.CustomHomePageWay.None;\n\n    [Reactive] [JsonProperty] public string? MusicApiWithIPAddress { get; set; } = \"120.230.112.69\";\n\n    [Reactive] [JsonProperty] public Language Language { get; set; } = new();\n    [Reactive] [JsonProperty] public MinecraftFolder MinecraftFolder { get; set; }\n\n    [Reactive] [JsonProperty] public Color AccentColor { get; set; } = Color.Parse(\"#00b2ff\");\n    [Reactive] [JsonProperty] public Color DeskLyricColor { get; set; } = Color.Parse(\"#00b2ff\");\n\n    [Reactive]\n    [JsonProperty]\n    public JavaEntry Java { get; set; } = new() { JavaPath = MainLang.LetYMCLChooseJava, JavaVersion = \"Auto\" };\n\n    [Reactive]\n    [JsonProperty]\n    public AccountInfo Account { get; set; } = new()\n    {\n        Name = \"Steve\",\n        AccountType = Enum.Setting.AccountType.Offline,\n        AddTime = DateTime.Now.ToString(\"yyyy-MM-ddTHH:mm:sszzz\"),\n        Data = JsonConvert.SerializeObject(new OfflineAuthenticator().Authenticate(\"Steve\"))\n    };\n\n    [Reactive] [JsonProperty] public string? WindowBackGroundImgData { get; set; } = string.Empty;\n\n    public SettingEntry()\n    {\n        var accentColorSetter = new Debouncer(() => { Public.Module.Ui.Setter.SetAccentColor(AccentColor); }, 5);\n        var _setBackGroundDebouncer = new Debouncer(\n            () => { Dispatcher.UIThread.Invoke(Public.Module.Ui.Setter.SetBackGround); },\n            500);\n        PropertyChanged += (o, e) =>\n        {\n            if (e.PropertyName == nameof(Language))\n            {\n                LangHelper.Current.ChangedCulture(Const.Data.SettingEntry.Language.Code);\n            }\n\n            if (e.PropertyName == nameof(AccentColor))\n            {\n                accentColorSetter.Trigger();\n            }\n\n            if (e.PropertyName == nameof(MinecraftFolder))\n            {\n                LaunchUi.LoadGames();\n            }\n\n            if (e.PropertyName == nameof(CustomHomePage))\n            {\n                _ = InitUi.SetCustomHomePage();\n            }\n\n            if (e.PropertyName == nameof(CustomBackGround))\n            {\n                try\n                {\n                    Setter.SetBackGround();\n                }\n                catch\n                {\n                }\n            }\n\n            if (e.PropertyName == nameof(EnableIndependencyWindowNotification))\n            {\n                if (EnableIndependencyWindowNotification)\n                {\n                    NoticeWindow(MainLang.ExampleNotification, MainLang.ExampleNotification);\n                }\n            }\n\n            if (e.PropertyName == nameof(TranslucentBackgroundOpacity))\n            {\n                Application.Current.Resources[\"MainOpacity\"] = TranslucentBackgroundOpacity;\n                if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is MainWindow window)\n                {\n                    try\n                    {\n                        (Public.Module.Ui.Getter.FindControlByName(window, \"PART_PaneRoot\") as Panel).Opacity =\n                            (double)Application.Current.Resources[\"MainOpacity\"]!;\n                    }\n                    catch\n                    {\n                    }\n                }\n\n                _setBackGroundDebouncer.Trigger();\n            }\n\n            if (e.PropertyName == nameof(CornerRadius))\n            {\n                Application.Current.Resources[\"MainCornerRadius\"] = new CornerRadius(CornerRadius);\n            }\n\n            if (e.PropertyName == nameof(SpecialControlEnableTranslucent))\n            {\n                Public.Module.Ui.Setter.DynamicStyle.SetDynamicStyle();\n            }\n\n            if (e.PropertyName == nameof(Theme))\n            {\n                Public.Module.Ui.Setter.ToggleTheme(Theme);\n            }\n\n            if (e.PropertyName == nameof(MaxDownloadThread))\n            {\n                DownloadMirrorManager.MaxThread = MaxDownloadThread;\n            }\n\n            AppMethod.SaveSetting();\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Classes/Setting/UiProperty.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing MinecraftLaunch.Base.Models.Network;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Netease;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Classes.Setting;\n\npublic sealed class UiProperty : ReactiveObject\n{\n    private static UiProperty? _instance;\n    public static ObservableCollection<NotificationEntry> NotificationCards { get; } = [];\n    public static ObservableCollection<VersionManifestEntry> AllInstallableGames { get; } = [];\n    public static ObservableCollection<VersionManifestEntry> FilteredAllInstallableGames { get; set; } = [];\n    public static ObservableCollection<VersionManifestEntry> ReleaseInstallableGames { get; set; } = [];\n    public static ObservableCollection<VersionManifestEntry> SnapshotInstallableGames { get; set; } = [];\n    public static ObservableCollection<VersionManifestEntry> OldInstallableGames { get; set; } = [];\n    public ObservableCollection<AggregateSearchEntry> FilteredAggregateSearchEntries { get; } = [];\n\n    [Reactive]\n    public VersionManifestEntry LatestReleaseGame { get; set; } = new()\n        { ReleaseTime = new DateTime(1970, 1, 1, 0, 0, 0), Id = MainLang.Loading, Type = null };\n\n    [Reactive]\n    public VersionManifestEntry LatestSnapshotGame { get; set; } = new()\n        { ReleaseTime = new DateTime(1970, 1, 1, 0, 0, 0), Id = MainLang.Loading, Type = null };\n\n    [Reactive] public bool InstallableRingIsVisible { get; set; } = true;\n    [Reactive] public bool IsAllImport { get; set; } = false;\n    [Reactive] public double TaskEntryHeaderWidth { get; set; }\n    [Reactive] public double SystemMaxMem { get; set; }\n    [Reactive] public double AutoMaxMem { get; set; }\n    [Reactive] public MinecraftDataEntry SelectedMinecraft { get; set; }\n    [Reactive] public string AggregateSearchFilter { get; set; } = string.Empty;\n    [Reactive] public double MusicTotalTime { get; set; } \n    [Reactive] public double MusicCurrentTime { get; set; } \n    [Reactive] public string InstallableGameSearchFilter { get; set; } = string.Empty;\n    [Reactive] public RecordSongEntry? SelectedRecordSong { get; set; } \n    [Reactive] public RecordSongEntry? SelectedSearchSong { get; set; }\n\n    public UiProperty()\n    {\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(AggregateSearchFilter))\n            {\n                YMCL.Public.Module.Ui.Special.AggregateSearchUi.Filter(AggregateSearchFilter);\n            }\n        };\n    }\n    \n    public static UiProperty Instance\n    {\n        get { return _instance ??= new UiProperty(); }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Const/Data.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing Avalonia.Controls.Notifications;\nusing MinecraftLaunch.Components.Parser;\nusing Newtonsoft.Json;\nusing ReactiveUI;\nusing Ursa.Controls;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Netease;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing Language = YMCL.Public.Classes.Data.Language;\nusing WindowNotificationManager = Ursa.Controls.WindowNotificationManager;\n\nnamespace YMCL.Public.Const;\n\npublic sealed class Data : ReactiveObject\n{\n    private static Data? _instance;\n    public static ObservableCollection<Language> Langs => LangHelper.Langs;\n    public static DesktopRunnerType DesktopType { get; set; } = DesktopRunnerType.Unknown;\n    public static WindowNotificationManager Notification { get; set; }\n    public static WindowToastManager Toast { get; set; }\n    public static ObservableCollection<MinecraftFolder> MinecraftFolders { get; set; }\n    public static ObservableCollection<JavaEntry> JavaRuntimes { get; set; } = [];\n    public static ObservableCollection<string> EnablePlugins { get; set; } = [];\n    public static ObservableCollection<PluginInfoEntry> IdentifiedPlugins { get; set; } = [];\n    public static ObservableCollection<AccountInfo> Accounts { get; set; }\n    public static ObservableCollection<FavouriteResourceEntry> FavouriteResources { get; set; } = [];\n    public static ObservableCollection<FavouriteMinecraftEntry> FavouriteMinecraft { get; set; }\n    public static ObservableCollection<MinecraftDataEntry> CurrentFolderGames { get; set; } = [];\n    public static ObservableCollection<TaskEntry> TaskEntries { get; set; } = [];\n    public static List<AggregateSearchEntry> AllAggregateSearchEntries { get; set; } = [];\n    public static ObservableCollection<RecordSongEntry> RecordSongEntries { get; set; } = [];\n    public static ObservableCollection<RecordSongEntry> SearchSongEntries { get; set; } = [];\n    public static List<NewsDataListEntry> NewsDataList { get; set; } = [];\n    public static SettingEntry SettingEntry { get; set; }\n    public static UiProperty UiProperty { get; } = new();\n    public static string TranslateToken { get; set; }\n    public static string[] AppArgs { get; set; }\n\n    public static Data Instance\n    {\n        get { return _instance ??= new Data(); }\n    }\n\n    public Data()\n    {\n        UiProperty.PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(UiProperty.SelectedMinecraft) &&\n                !string.IsNullOrEmpty(UiProperty.SelectedMinecraft?.Id))\n            {\n                if (UiProperty.SelectedMinecraft.Type == \"bedrock\")\n                {\n                    if (DesktopType == DesktopRunnerType.Windows && Environment.OSVersion.Version.Major >= 10)\n                    {\n                        SettingEntry.SelectedMinecraftId = \"bedrock\";\n                    }\n                }\n                else\n                {\n                    SettingEntry.SelectedMinecraftId = UiProperty.SelectedMinecraft.Id;\n                }\n            }\n        };\n        FavouriteResources.CollectionChanged += (_, _) =>\n        {\n            File.WriteAllText(ConfigPath.FavouriteResourceDataPath,\n                JsonConvert.SerializeObject(FavouriteResources, Formatting.Indented));\n        };\n        SettingEntry.PropertyChanged += (_, e) =>\n        {\n            try\n            {\n                if (e.PropertyName != nameof(SettingEntry.SelectedMinecraftId) ||\n                    string.IsNullOrEmpty(SettingEntry.SelectedMinecraftId)) return;\n                if (SettingEntry.SelectedMinecraftId == \"bedrock\")\n                {\n                    UiProperty.SelectedMinecraft = new MinecraftDataEntry(null, true, true)\n                        { IsSettingVisible = false, Type = \"bedrock\" };\n                }\n                else\n                {\n                    var parser = new MinecraftParser(SettingEntry.MinecraftFolder.Path);\n                    UiProperty.SelectedMinecraft =\n                        new MinecraftDataEntry(parser.GetMinecraft(SettingEntry.SelectedMinecraftId));\n                }\n            }\n            catch (Exception exception)\n            {\n                Console.WriteLine(exception);\n            }\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Const/Path.cs",
    "content": "﻿using System.IO;\n\nnamespace YMCL.Public.Const;\n\npublic class ConfigPath\n{\n    public static string UserDataRootPath { get; protected set; }\n    public static string SettingDataPath { get; protected set; }\n    public static string MinecraftFolderDataPath { get; protected set; }\n    public static string JavaDataPath { get; protected set; }\n    public static string AppPathDataPath { get; protected set; }\n    public static string PlayerDataPath { get; protected set; }\n    public static string CustomHomePageXamlDataPath { get; protected set; }\n    public static string AccountDataPath { get; protected set; }\n    public static string PluginDataPath { get; protected set; }\n    public static string FavouriteResourceDataPath { get; protected set; }\n    public static string PluginFolderPath { get; protected set; }\n    public static string TempFolderPath { get; protected set; }\n    public static string UpdateFolderPath { get; protected set; }\n    public static string LauncherClPath  { get; protected set; }\n    public static string FavouriteMinecraftDataPath  { get; protected set; }\n\n    public static void InitPath()\n    {\n        UserDataRootPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),\n            \"DaiYu.Platform.YMCL\");\n        SettingDataPath = Path.Combine(UserDataRootPath, \"YMCL.Setting.DaiYu\");\n        MinecraftFolderDataPath = Path.Combine(UserDataRootPath, \"YMCL.MinecraftFolder.DaiYu\");\n        JavaDataPath = Path.Combine(UserDataRootPath, \"YMCL.Java.DaiYu\");\n        AppPathDataPath = Path.Combine(UserDataRootPath, \"YMCL.AppPath.DaiYu\");\n        PlayerDataPath = Path.Combine(UserDataRootPath, \"YMCL.Player.DaiYu\");\n        CustomHomePageXamlDataPath = Path.Combine(UserDataRootPath, \"YMCL.CustomHomePageXaml.DaiYu\");\n        AccountDataPath = Path.Combine(UserDataRootPath, \"YMCL.Account.DaiYu\");\n        PluginDataPath = Path.Combine(UserDataRootPath, \"YMCL.Plugin.DaiYu\");\n        PluginFolderPath = Path.Combine(UserDataRootPath, \"Plugin\");\n        TempFolderPath = Path.Combine(UserDataRootPath, \"Temp\");\n        LauncherClPath = Path.Combine(UserDataRootPath, \"LauncherCl.bat\");\n        UpdateFolderPath = Path.Combine(UserDataRootPath, \"Update\");\n        FavouriteResourceDataPath = Path.Combine(UserDataRootPath, \"YMCL.FavouriteResource.DaiYu\");\n        FavouriteMinecraftDataPath = Path.Combine(UserDataRootPath, \"YMCL.FavouriteMinecraft.DaiYu\");\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Const/String.cs",
    "content": "﻿namespace YMCL.Public.Const;\n\npublic class String\n{\n    public static string AppTitle => \"Yu Minecraft Launcher\";\n    public static string AzureClientId => \"c06d4d68-7751-4a8a-a2ff-d1b46688f428\";\n    public static string CurseForgeApiKey => \"$2a$10$ndSPnOpYqH3DRmLTWJTf5Ofm7lz9uYoTGvhSj0OjJWJ8WdO4ZTsr.\";\n    public static string GithubUpdateApiUrl => \"https://api.github.com/repos/DaiYu-233/YMCL.Avalonia/releases?per_page=1\";\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/CourseForgeFileExpander.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Public.Controls.CurseForgeFileExpander\"\n    x:DataType=\"controls:CurseForgeFileExpander\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:controls=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:controls1=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:files=\"clr-namespace:CurseForge.APIClient.Models.Files;assembly=CurseForge.APIClient\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:resourceFetcher=\"clr-namespace:YMCL.Public.Classes.Data.ResourceFetcher\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:BoolToStringConverter x:Key=\"BoolToStringConverter\" />\n        <converter:CountToUnitConverter x:Key=\"CountToUnitConverter\" />\n    </UserControl.Resources>\n    <Border\n        Background=\"{DynamicResource 2x}\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        DockPanel.Dock=\"Top\"\n        VerticalAlignment=\"Top\">\n        <Expander Name=\"Expander\">\n            <Grid>\n                <StackPanel Spacing=\"10\">\n                    <Border\n                        Background=\"{DynamicResource 2x}\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        IsVisible=\"False\"\n                        Name=\"Dependencies\">\n                        <DockPanel>\n                            <TextBlock\n                                DockPanel.Dock=\"Top\"\n                                HorizontalAlignment=\"Left\"\n                                Margin=\"10\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DependencyItems}\"\n                                VerticalAlignment=\"Top\" />\n                            <Grid>\n                                <controls1:ProgressRing\n                                    Height=\"50\"\n                                    IsVisible=\"True\"\n                                    Margin=\"0,50,0,50\"\n                                    Name=\"DependenciesRing\"\n                                    Width=\"50\" />\n                                <ListBox\n                                    IsVisible=\"False\"\n                                    ItemsSource=\"{Binding DependencyItems}\"\n                                    Margin=\"10,0,10,10\"\n                                    Name=\"ListBox\">\n                                    <ListBox.ItemTemplate>\n                                        <DataTemplate DataType=\"resourceFetcher:IResourceEntry\">\n                                            <DockPanel Margin=\"0,5,0,5\">\n                                                <Border\n                                                    ClipToBounds=\"True\"\n                                                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                                                    Height=\"42\"\n                                                    Margin=\"0,0,10,0\"\n                                                    Width=\"42\">\n                                                    <asyncImageLoader:AdvancedImage Source=\"{Binding Pic}\" />\n                                                </Border>\n                                                <DockPanel LastChildFill=\"False\" VerticalAlignment=\"Center\">\n                                                    <SelectableTextBlock DockPanel.Dock=\"Top\" Text=\"{Binding Name}\" />\n                                                    <TextBlock\n                                                        DockPanel.Dock=\"Top\"\n                                                        FontSize=\"12\"\n                                                        Foreground=\"{DynamicResource GrayColor}\"\n                                                        Text=\"{Binding Summary}\"\n                                                        TextWrapping=\"Wrap\" />\n                                                    <TextBlock\n                                                        DockPanel.Dock=\"Top\"\n                                                        FontSize=\"12\"\n                                                        Foreground=\"{DynamicResource GrayColor}\">\n                                                        <Run Text=\"{Binding DisplayType, Mode=OneWay}\" />\n                                                        <Run Text=\",\" />\n                                                        <Run Text=\"{Binding DownloadCount, Mode=OneWay, Converter={StaticResource CountToUnitConverter}}\" />\n                                                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                                                        <Run Text=\",\" />\n                                                        <Run Text=\"{Binding LastUpdateTime, Mode=OneWay}\" />\n                                                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Update}\" />\n                                                    </TextBlock>\n                                                </DockPanel>\n                                            </DockPanel>\n                                        </DataTemplate>\n                                    </ListBox.ItemTemplate>\n                                </ListBox>\n                            </Grid>\n                        </DockPanel>\n                    </Border>\n                    <ListBox ItemsSource=\"{Binding Files}\" Name=\"ListView\">\n                        <ListBox.ItemTemplate>\n                            <DataTemplate DataType=\"files:File\">\n                                <StackPanel Margin=\"0,3\">\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"14\"\n                                        TextWrapping=\"Wrap\">\n                                        <Run FontFamily=\"{DynamicResource Font}\" Text=\"{Binding FileName}\" />\n                                    </TextBlock>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        TextWrapping=\"Wrap\">\n                                        <Run Text=\"{Binding ReleaseType}\" />\n                                        <Run Text=\",\" />\n                                        <Run Text=\"{Binding DownloadCount, Mode=OneWay, Converter={StaticResource CountToUnitConverter}}\" />\n                                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                                        <Run Text=\",\" />\n                                        <Run Text=\"{Binding FileDate.DateTime}\" />\n                                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Update}\" />\n                                        <Run Text=\"{Binding IsServerPack, Mode=OneWay, Converter={StaticResource BoolToStringConverter}, ConverterParameter=','}\" />\n                                        <Run Text=\"{Binding IsServerPack, Mode=OneWay, Converter={StaticResource BoolToStringConverter}, ConverterParameter={Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ServerPack}}\" />\n                                    </TextBlock>\n                                </StackPanel>\n                            </DataTemplate>\n                        </ListBox.ItemTemplate>\n                    </ListBox>\n                </StackPanel>\n                <controls1:ProgressRing\n                    Height=\"50\"\n                    IsVisible=\"True\"\n                    Margin=\"0,50,0,50\"\n                    Name=\"Ring\"\n                    Width=\"50\" />\n            </Grid>\n        </Expander>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/CourseForgeFileExpander.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Threading;\nusing CurseForge.APIClient;\nusing CurseForge.APIClient.Models.Files;\nusing DynamicData;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Enum;\nusing YMCL.Views.Main.Pages.DownloadPages.CurseForgePages;\nusing ModLoaderType = CurseForge.APIClient.Models.Mods.ModLoaderType;\n\nnamespace YMCL.Public.Controls;\n\npublic partial class CurseForgeFileExpander : UserControl\n{\n    private readonly string _version;\n    private bool _firstLoad = true;\n    public ObservableCollection<File> Files { get; } = [];\n    public ObservableCollection<CurseForgeResourceEntry> DependencyItems { get; } = [];\n    public ObservableCollection<int> DependencyIds { get; } = [];\n\n    public CurseForgeFileExpander(string version, int id, string name, ModLoaderType? loader, ResourceType type)\n    {\n        _version = version;\n        InitializeComponent();\n        Expander.Header = name;\n        DataContext = this;\n        Loaded += (_, _) =>\n        {\n            if (!_firstLoad) return;\n            _firstLoad = false;\n            _ = Init(version, id, loader);\n        };\n        ListView.SelectionChanged += async (_, _) =>\n        {\n            if (ListView.SelectedItem == null) return;\n            Public.Module.Op.DownloadResource.SaveCurseForge(type, ListView.SelectedItem as File);\n            await Task.Delay(300);\n            ListView.SelectedItem = null;\n        };\n        ListBox.SelectionChanged += (_, _) =>\n        {\n            if (ListBox.SelectedItem == null) return;\n            var item = ListBox.SelectedItem as CurseForgeResourceEntry;\n            YMCL.App.UiRoot.ViewModel.Download._curseForge.CreateNewPage(new SearchTabViewItemEntry()\n            {\n                CanClose = true, Host = nameof(Views.Main.Pages.DownloadPages.CurseForge),\n                Content = new ModFileResult(item!),\n                Title = $\"{item.DisplayType}: {item.Name}\"\n            });\n            ListBox.SelectedItem = null;\n        };\n    }\n\n    public CurseForgeFileExpander()\n    {\n    }\n\n    private async Task Init(string version, int id, ModLoaderType? type)\n    {\n        ApiClient apiClient = new(Const.String.CurseForgeApiKey);\n        var data = await apiClient.GetModFilesAsync(id, version, type ?? null);\n        data.Data.ForEach(x =>\n        {\n            Files.Add(x);\n            x.Dependencies.ForEach(y =>\n            {\n                if (y.RelationType == FileRelationType.RequiredDependency && !DependencyIds.Contains(y.ModId))\n                {\n                    DependencyIds.Add(y.ModId);\n                }\n            });\n        });\n        Ring.IsVisible = false;\n        if (DependencyIds.Count != 0)\n        {\n            var tasks = new List<Task>();\n            Dependencies.IsVisible = true;\n            DependencyIds.ToList().ForEach(x => { tasks.Add(GetProject(x)); });\n            await Task.WhenAll(tasks.ToArray());\n            ListBox.IsVisible = true;\n            DependenciesRing.IsVisible = false;\n        }\n\n        if (DependencyItems.Count == 0)\n            DependenciesRing.IsVisible = false;\n    }\n\n    private async Task GetProject(int id)\n    {\n        ApiClient apiClient = new(Public.Const.String.CurseForgeApiKey);\n        var res = await apiClient.GetModAsync(id);\n        var item = res.Data;\n        var conVersion = false;\n        item.LatestFiles.ForEach(x =>\n        {\n            if (x.GameVersions.All(y => y != _version)) return;\n            conVersion = true;\n        });\n        if (!conVersion) return;\n        var entry = new CurseForgeResourceEntry()\n        {\n            Id = item.Id,\n            GameId = item.GameId,\n            Name = item.Name,\n            Slug = item.Slug,\n            Summary = item.Summary,\n            Status = item.Status,\n            DownloadCount = item.DownloadCount,\n            IsFeatured = item.IsFeatured,\n            PrimaryCategoryId = item.PrimaryCategoryId,\n            ClassId = item.ClassId,\n            Authors = item.Authors,\n            Logo = item.Logo,\n            LatestFiles = item.LatestFiles,\n            LatestFilesIndexes = item.LatestFilesIndexes,\n            DateCreated = item.DateCreated,\n            DateModified = item.DateModified,\n            DateReleased = item.DateReleased,\n            AllowModDistribution = item.AllowModDistribution,\n            GamePopularityRank = item.GamePopularityRank,\n            IsAvailable = item.IsAvailable,\n            ThumbsUpCount = item.ThumbsUpCount,\n            Rating = item.Rating\n        };\n        entry.Type = item.ClassId switch\n        {\n            6 => ResourceType.Mod,\n            12 => ResourceType.ResourcePack,\n            17 => ResourceType.Map,\n            6552 => ResourceType.ShaderPack,\n            6945 => ResourceType.DataPack,\n            4471 => ResourceType.ModPack,\n            _ => ResourceType.Unknown\n        };\n        DependencyItems.Add(entry);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/Drawers/MsgHistory.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Public.Controls.Drawers.MsgHistory\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid>\n        <ItemsControl ItemsSource=\"{Binding UiProperty.NotificationCards}\">\n            <ItemsControl.ItemsPanel>\n                <ItemsPanelTemplate>\n                    <StackPanel Spacing=\"0\" />\n                </ItemsPanelTemplate>\n            </ItemsControl.ItemsPanel>\n            <ItemsControl.ItemTemplate>\n                <DataTemplate DataType=\"data:NotificationEntry\">\n                    <u:NotificationCard\n                        Classes=\"Light\"\n                        Content=\"{Binding Content}\"\n                        MessageClosed=\"MessageCard_OnMessageClosed\"\n                        NotificationType=\"{Binding Type}\"\n                        Width=\"362\" />\n                </DataTemplate>\n            </ItemsControl.ItemTemplate>\n        </ItemsControl>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/Drawers/MsgHistory.axaml.cs",
    "content": "﻿using System.Linq;\nusing Avalonia.Interactivity;\nusing Ursa.Controls;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Setting;\n\nnamespace YMCL.Public.Controls.Drawers;\n\npublic partial class MsgHistory : UserControl\n{\n    public MsgHistory()\n    {\n        InitializeComponent();\n        DataContext = Data.Instance;\n    }\n\n    private void MessageCard_OnMessageClosed(object? sender, RoutedEventArgs e)\n    {\n        var card = sender as NotificationCard;\n        var notification = UiProperty.NotificationCards\n            .FirstOrDefault(x => x.Content == card.Content);\n        if (notification is not null)\n        {\n            UiProperty.NotificationCards.Remove(notification);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/LogViewer.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Public.Controls.LogViewer\"\n    x:DataType=\"viewModels:LogViewerModel\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:controls=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:viewModels=\"clr-namespace:YMCL.ViewModels\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:LogTypeToColorConverter x:Key=\"LogTypeColorConverter\" />\n    </UserControl.Resources>\n    <DockPanel>\n        <DockPanel DockPanel.Dock=\"Top\">\n            <WrapPanel\n                DockPanel.Dock=\"Top\"\n                HorizontalAlignment=\"Right\"\n                Margin=\"0,10,10,0\"\n                Orientation=\"Horizontal\"\n                VerticalAlignment=\"Top\">\n                <ToggleButton\n                    Content=\"Error\"\n                    IsChecked=\"{Binding Error}\"\n                    Margin=\"4\" />\n                <ToggleButton\n                    Content=\"Info\"\n                    IsChecked=\"{Binding Info}\"\n                    Margin=\"4\" />\n                <ToggleButton\n                    Content=\"Debug\"\n                    IsChecked=\"{Binding Debug}\"\n                    Margin=\"4\" />\n                <ToggleButton\n                    Content=\"Fatal\"\n                    IsChecked=\"{Binding Fatal}\"\n                    Margin=\"4\" />\n                <ToggleButton\n                    Content=\"Warning\"\n                    IsChecked=\"{Binding Warning}\"\n                    Margin=\"4\" />\n                <ToggleButton\n                    Content=\"Exception\"\n                    IsChecked=\"{Binding Exception}\"\n                    Margin=\"4\" />\n                <ToggleButton\n                    Content=\"StackTrace\"\n                    IsChecked=\"{Binding StackTrace}\"\n                    Margin=\"4\" />\n                <ToggleButton\n                    Content=\"Unknown\"\n                    IsChecked=\"{Binding Unknown}\"\n                    Margin=\"4\" />\n            </WrapPanel>\n            <DockPanel\n                Dock=\"Bottom\"\n                LastChildFill=\"False\"\n                Margin=\"10,0,10,10\"\n                VerticalAlignment=\"Bottom\">\n                <Button\n                    Click=\"Button_OnClick\"\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ExportLogFile}\"\n                    DockPanel.Dock=\"Left\" />\n                <CheckBox\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoScrollToEnd}\"\n                    DockPanel.Dock=\"Right\"\n                    IsChecked=\"{Binding AutoScrollToEnd}\"\n                    Margin=\"0,5,10,0\" />\n            </DockPanel>\n            <ScrollViewer Margin=\"0,10,0,10\" Name=\"ScrollViewer\">\n                <ItemsControl\n                    ItemsSource=\"{Binding DisplayLogItems}\"\n                    Margin=\"10,10,10,10\"\n                    Name=\"Control\">\n                    <ItemsControl.ItemsPanel>\n                        <ItemsPanelTemplate>\n                            <VirtualizingStackPanel />\n                        </ItemsPanelTemplate>\n                    </ItemsControl.ItemsPanel>\n                    <ItemsControl.ItemTemplate>\n                        <DataTemplate DataType=\"data:LogItemEntry\">\n                            <SelectableTextBlock TextWrapping=\"Wrap\">\n                                <Run Text=\"[\" />\n                                <Run Foreground=\"#6a9955\" Text=\"{Binding Time}\" />\n                                <Run Text=\"] [\" />\n                                <Run Foreground=\"#48a8ff\" Text=\"{Binding Source}\" />\n                                <Run Text=\"/\" />\n                                <Run Foreground=\"{Binding Type, Converter={StaticResource LogTypeColorConverter}}\" Text=\"{Binding Type}\" />\n                                <Run Text=\"]\" />\n                                <Run Text=\"{Binding Message}\" />\n                            </SelectableTextBlock>\n                        </DataTemplate>\n                    </ItemsControl.ItemTemplate>\n                </ItemsControl>\n            </ScrollViewer>\n        </DockPanel>\n    </DockPanel>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/LogViewer.axaml.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.IO;\nusing System.Linq;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Interactivity;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Platform.Storage;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Langs;\nusing YMCL.ViewModels;\n\nnamespace YMCL.Public.Controls;\n\npublic partial class LogViewer : UserControl\n{\n    public LogViewerModel Model { get; }\n\n    public LogViewer()\n    {\n        InitializeComponent();\n        Model = new LogViewerModel(() => { ScrollViewer.ScrollToEnd(); });\n        DataContext = Model;\n    }\n\n    private async void Button_OnClick(object? sender, RoutedEventArgs e)\n    {\n        var time = DateTime.Now;\n        var path = (await TopLevel.GetTopLevel(YMCL.App.UiRoot).StorageProvider.SaveFilePickerAsync(\n            new FilePickerSaveOptions\n            {\n                Title = MainLang.ExportLogFile,\n                SuggestedFileName = $\"{time:yyyy-MM-ddTHH-mm-sszz}.log\",\n                FileTypeChoices =\n                [\n                    new FilePickerFileType(\"Log File\") { Patterns = [\"*.log\"] }\n                ]\n            }))?.Path.LocalPath;\n        if (string.IsNullOrWhiteSpace(path)) return;\n        _ = File.WriteAllTextAsync(path,\n            $\"---- Exported By Yu Minecraft Launcher (http://ymcl.yik.at) ----\\n\" +\n            $\"---- Exported Time : {time:yyyy-MM-ddTHH:mm:sszzz} ----\\n\\n\\n\" +\n            $\"{string.Join(\"\\n\", Model.LogItems.Select(a => a.Original))}\");\n    }\n\n    public void Dispose()\n    {\n        Model.LogItems.Clear();\n        Model.DisplayLogItems.Clear();\n        Control.ItemsSource = null;\n        Control.Items.Clear();\n        ScrollViewer.Content = null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/ModrinthFileExpander.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Public.Controls.ModrinthFileExpander\"\n    x:DataType=\"controls1:ModrinthFileExpander\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:controls1=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:resourceFetcher=\"clr-namespace:YMCL.Public.Classes.Data.ResourceFetcher\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:BoolToStringConverter x:Key=\"BoolToStringConverter\" />\n        <converter:CountToUnitConverter x:Key=\"CountToUnitConverter\" />\n    </UserControl.Resources>\n    <Border\n        Background=\"{DynamicResource 2x}\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        DockPanel.Dock=\"Top\"\n        VerticalAlignment=\"Top\">\n        <Expander Name=\"Expander\">\n            <Grid>\n                <StackPanel Spacing=\"10\">\n                    <Border\n                        Background=\"{DynamicResource 2x}\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        IsVisible=\"False\"\n                        Name=\"Dependencies\">\n                        <DockPanel>\n                            <TextBlock\n                                DockPanel.Dock=\"Top\"\n                                HorizontalAlignment=\"Left\"\n                                Margin=\"10\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DependencyItems}\"\n                                VerticalAlignment=\"Top\" />\n                            <Grid>\n                                <controls:ProgressRing\n                                    Height=\"50\"\n                                    IsVisible=\"True\"\n                                    Margin=\"0,50,0,50\"\n                                    Name=\"DependenciesRing\"\n                                    Width=\"50\" />\n                                <ListBox\n                                    IsVisible=\"False\"\n                                    ItemsSource=\"{Binding DependencyItems}\"\n                                    Margin=\"10,0,10,10\"\n                                    Name=\"ListBox\">\n                                    <ListBox.ItemTemplate>\n                                        <DataTemplate DataType=\"resourceFetcher:IResourceEntry\">\n                                            <DockPanel Margin=\"0,5,0,5\">\n                                                <Border\n                                                    ClipToBounds=\"True\"\n                                                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                                                    Height=\"42\"\n                                                    Margin=\"0,0,10,0\"\n                                                    Width=\"42\">\n                                                    <asyncImageLoader:AdvancedImage Source=\"{Binding Pic}\" />\n                                                </Border>\n                                                <DockPanel LastChildFill=\"False\" VerticalAlignment=\"Center\">\n                                                    <SelectableTextBlock DockPanel.Dock=\"Top\" Text=\"{Binding Name}\" />\n                                                    <TextBlock\n                                                        DockPanel.Dock=\"Top\"\n                                                        FontSize=\"12\"\n                                                        Foreground=\"{DynamicResource GrayColor}\"\n                                                        Text=\"{Binding Summary}\"\n                                                        TextWrapping=\"Wrap\" />\n                                                    <TextBlock\n                                                        DockPanel.Dock=\"Top\"\n                                                        FontSize=\"12\"\n                                                        Foreground=\"{DynamicResource GrayColor}\">\n                                                        <Run Text=\"{Binding DisplayType, Mode=OneWay}\" />\n                                                        <Run Text=\",\" />\n                                                        <Run Text=\"{Binding DownloadCount, Mode=OneWay, Converter={StaticResource CountToUnitConverter}}\" />\n                                                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                                                        <Run Text=\",\" />\n                                                        <Run Text=\"{Binding LastUpdateTime, Mode=OneWay}\" />\n                                                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Update}\" />\n                                                    </TextBlock>\n                                                </DockPanel>\n                                            </DockPanel>\n                                        </DataTemplate>\n                                    </ListBox.ItemTemplate>\n                                </ListBox>\n                            </Grid>\n                        </DockPanel>\n                    </Border>\n                    <ListBox ItemsSource=\"{Binding Files}\" Name=\"ListView\">\n                        <ListBox.ItemTemplate>\n                            <DataTemplate DataType=\"data:ModrinthFile\">\n                                <StackPanel Margin=\"0,3\">\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"14\"\n                                        TextWrapping=\"Wrap\">\n                                        <Run FontFamily=\"{DynamicResource Font}\" Text=\"{Binding Title}\" />\n                                    </TextBlock>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        TextWrapping=\"Wrap\">\n                                        <Run Text=\"{Binding FileName}\" />\n                                        <Run Text=\",\" />\n                                        <Run Text=\"{Binding DisplaySize}\" />\n                                        <Run Text=\",\" />\n                                        <Run Text=\"{Binding DisplayDownloads}\" />\n                                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                                        <Run Text=\",\" />\n                                        <Run Text=\"{Binding UpdateTime}\" />\n                                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Update}\" />\n                                    </TextBlock>\n                                </StackPanel>\n                            </DataTemplate>\n                        </ListBox.ItemTemplate>\n                    </ListBox>\n                </StackPanel>\n            </Grid>\n        </Expander>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/ModrinthFileExpander.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing DynamicData;\nusing Modrinth;\nusing Modrinth.Models;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Enum;\nusing YMCL.Views.Main.Pages.DownloadPages.ModrinthPages;\n\nnamespace YMCL.Public.Controls;\n\npublic partial class ModrinthFileExpander : UserControl\n{\n    private readonly string _version;\n    private readonly ResourceType _type;\n    public ObservableCollection<ModrinthResourceEntry> DependencyItems { get; } = [];\n    public ObservableCollection<string> DependencyIds { get; } = [];\n    public ObservableCollection<ModrinthFile> Files { get; } = [];\n    private bool _firstLoad = true;\n\n    public ModrinthFileExpander(string name, string version, ResourceType type, ModrinthResourceEntry entry)\n    {\n        _version = version;\n        _type = type;\n        InitializeComponent();\n        Expander.Header = name;\n        DataContext = this;\n        if (type == ResourceType.ModPack)\n        {\n            Dependencies.IsVisible = false;\n        }\n        ListView.SelectionChanged += async (_, _) =>\n        {\n            if (ListView.SelectedItem == null) return;\n            Public.Module.Op.DownloadResource.SaveModrinth(type, ListView.SelectedItem as ModrinthFile);\n            await Task.Delay(300);\n            ListView.SelectedItem = null;\n        };\n        ListBox.SelectionChanged += (_, _) =>\n        {\n            if (ListBox.SelectedItem == null) return;\n            var item = ListBox.SelectedItem as ModrinthResourceEntry;\n            YMCL.App.UiRoot.ViewModel.Download._modrinth.CreateNewPage(new SearchTabViewItemEntry()\n            {\n                CanClose = true, Host = nameof(Views.Main.Pages.DownloadPages.Modrinth),\n                Content = new ModFileResult(item.ProjectId, (item.Name, item.IconUrl, item.Summary)!),\n                Title = $\"{item.DisplayType}: {item.Name}\"\n            });\n            ListBox.SelectedItem = null;\n        };\n        Loaded += (_, _) =>\n        {\n            if (!_firstLoad) return;\n            _firstLoad = false;\n            _ = Init(entry);\n        };\n    }\n\n\n    private async Task Init(ModrinthResourceEntry entry)\n    {\n        if (_type == ResourceType.ModPack)\n        {\n            return;\n        }\n        Dependencies.IsVisible = true;\n        var client = new ModrinthClient();\n        var deps = await client.Project.GetDependenciesAsync(entry.ProjectId);\n        var tasks = new List<Task>();\n        deps.Projects.ToList().ForEach(x =>\n        {\n            tasks.Add(GetDepVersion(x));\n        });\n        await Task.WhenAll(tasks);\n        if (DependencyItems.Count != 0)\n        {\n            ListBox.IsVisible = true;\n            DependenciesRing.IsVisible = false;\n        }\n        else\n        {\n            Dependencies.IsVisible = false;\n        }\n    }\n\n    private async Task GetDepVersion(Project x)\n    {\n        var versions = await Module.IO.Network.Modrinth.GetVersionsById(x.Id);\n        var list = new List<string>();\n        versions.data.ForEach(y => list.AddRange(y.game_versions));\n        if (!list.Contains(_version)) return;\n        var item = new ModrinthResourceEntry()\n        {\n            Slug = x.Slug,\n            ProjectId = x.Id,\n            Categories = x.Categories,\n            ClientSide = x.ClientSide,\n            ServerSide = x.ServerSide,\n            Description = x.Description,\n            ProjectType = x.ProjectType,\n            Title = x.Title,\n            DateCreated = x.Published,\n            DateModified = x.Updated,\n            Followers = x.Followers,\n            Downloads = x.Downloads,\n            IconUrl = x.IconUrl,\n            License = x.License.ToString(),\n            Color = x.Color,\n            FeaturedGallery = x.FeaturedGallery,\n        };\n        DependencyItems.Add(item);\n    }\n\n    public ModrinthFileExpander()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/ScreenshotEntry.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Public.Controls.ScreenshotEntry\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Height=\"160\"\n        Margin=\"10,5,10,5\"\n        Name=\"Root\"\n        Width=\"230\">\n        <DockPanel>\n            <DockPanel\n                DockPanel.Dock=\"Top\"\n                HorizontalAlignment=\"Center\"\n                Margin=\"0,0,5,0\">\n                <StackPanel\n                    Margin=\"10,0,5,0\"\n                    Orientation=\"Horizontal\"\n                    Spacing=\"5\">\n                    <Button\n                        Classes=\"custom-button\"\n                        Click=\"Copy\"\n                        Content=\"F1 M 10.556641 15 C 10.146484 15 9.755859 14.916992 9.384766 14.750977 C 9.013672 14.584961 8.689778 14.363607 8.413086 14.086914 C 8.136393 13.810222 7.915039 13.486328 7.749023 13.115234 C 7.583007 12.744141 7.5 12.353516 7.5 11.943359 L 7.5 4.306641 C 7.5 3.896484 7.583007 3.505859 7.749023 3.134766 C 7.915039 2.763672 8.136393 2.439779 8.413086 2.163086 C 8.689778 1.886395 9.013672 1.665039 9.384766 1.499023 C 9.755859 1.333008 10.146484 1.25 10.556641 1.25 L 15.693359 1.25 C 16.103516 1.25 16.494141 1.333008 16.865234 1.499023 C 17.236328 1.665039 17.560221 1.886395 17.836914 2.163086 C 18.113605 2.439779 18.334961 2.763672 18.500977 3.134766 C 18.666992 3.505859 18.75 3.896484 18.75 4.306641 L 18.75 11.943359 C 18.75 12.353516 18.666992 12.744141 18.500977 13.115234 C 18.334961 13.486328 18.113605 13.810222 17.836914 14.086914 C 17.560221 14.363607 17.236328 14.584961 16.865234 14.750977 C 16.494141 14.916992 16.103516 15 15.693359 15 Z M 15.625 13.75 C 15.878906 13.75 16.119791 13.701172 16.347656 13.603516 C 16.57552 13.505859 16.775715 13.370769 16.948242 13.198242 C 17.120768 13.025717 17.255859 12.825521 17.353516 12.597656 C 17.451172 12.369792 17.5 12.128906 17.5 11.875 L 17.5 4.375 C 17.5 4.121094 17.451172 3.880209 17.353516 3.652344 C 17.255859 3.42448 17.120768 3.224285 16.948242 3.051758 C 16.775715 2.879232 16.57552 2.744141 16.347656 2.646484 C 16.119791 2.548828 15.878906 2.5 15.625 2.5 L 10.625 2.5 C 10.371094 2.5 10.130208 2.548828 9.902344 2.646484 C 9.674479 2.744141 9.474283 2.879232 9.301758 3.051758 C 9.129231 3.224285 8.994141 3.42448 8.896484 3.652344 C 8.798828 3.880209 8.75 4.121094 8.75 4.375 L 8.75 11.875 C 8.75 12.128906 8.798828 12.369792 8.896484 12.597656 C 8.994141 12.825521 9.129231 13.025717 9.301758 13.198242 C 9.474283 13.370769 9.674479 13.505859 9.902344 13.603516 C 10.130208 13.701172 10.371094 13.75 10.625 13.75 Z M 4.306641 18.75 C 3.896484 18.75 3.505859 18.666992 3.134766 18.500977 C 2.763672 18.334961 2.439779 18.113607 2.163086 17.836914 C 1.886393 17.560221 1.665039 17.236328 1.499023 16.865234 C 1.333008 16.494141 1.25 16.103516 1.25 15.693359 L 1.25 8.056641 C 1.25 7.646484 1.333008 7.255859 1.499023 6.884766 C 1.665039 6.513672 1.886393 6.189779 2.163086 5.913086 C 2.439779 5.636395 2.763672 5.41504 3.134766 5.249023 C 3.505859 5.083009 3.896484 5.000001 4.306641 5 L 6.25 5 L 6.25 6.25 L 4.375 6.25 C 4.121094 6.25 3.880208 6.298828 3.652344 6.396484 C 3.424479 6.494141 3.224284 6.629232 3.051758 6.801758 C 2.879232 6.974284 2.744141 7.174479 2.646484 7.402344 C 2.548828 7.630209 2.5 7.871094 2.5 8.125 L 2.5 15.625 C 2.5 15.878906 2.548828 16.119791 2.646484 16.347656 C 2.744141 16.575521 2.879232 16.775717 3.051758 16.948242 C 3.224284 17.120768 3.424479 17.255859 3.652344 17.353516 C 3.880208 17.451172 4.121094 17.5 4.375 17.5 L 9.375 17.5 C 9.576822 17.5 9.76888 17.470703 9.951172 17.412109 C 10.133463 17.353516 10.302734 17.268881 10.458984 17.158203 C 10.615234 17.047525 10.751953 16.915689 10.869141 16.762695 C 10.986328 16.609701 11.077474 16.438803 11.142578 16.25 L 12.441406 16.25 C 12.369791 16.608072 12.237955 16.940104 12.045898 17.246094 C 11.853841 17.552084 11.621094 17.815756 11.347656 18.037109 C 11.074219 18.258463 10.768229 18.432617 10.429688 18.55957 C 10.091146 18.686523 9.739583 18.75 9.375 18.75 Z \"\n                        Height=\"17\"\n                        HorizontalAlignment=\"Right\"\n                        VerticalAlignment=\"Center\"\n                        Width=\"17\" />\n                    <Button\n                        Classes=\"custom-button\"\n                        Click=\"OpenFileInFileExplore\"\n                        Content=\"F1 M 3.056641 18.75 C 2.646484 18.75 2.255859 18.666992 1.884766 18.500977 C 1.513672 18.334961 1.189779 18.113607 0.913086 17.836914 C 0.636393 17.560221 0.415039 17.236328 0.249023 16.865234 C 0.083008 16.494141 0 16.103516 0 15.693359 L 0 4.306641 C 0 3.896484 0.083008 3.505859 0.249023 3.134766 C 0.415039 2.763672 0.636393 2.439779 0.913086 2.163086 C 1.189779 1.886395 1.513672 1.665039 1.884766 1.499023 C 2.255859 1.333008 2.646484 1.25 3.056641 1.25 L 6.875 1.25 C 7.324219 1.25 7.709961 1.319988 8.032227 1.459961 C 8.354492 1.599936 8.644205 1.785482 8.901367 2.016602 C 9.158528 2.247723 9.397786 2.513021 9.619141 2.8125 C 9.840494 3.11198 10.071614 3.42448 10.3125 3.75 L 16.943359 3.75 C 17.353516 3.75 17.744141 3.833008 18.115234 3.999023 C 18.486328 4.165039 18.810221 4.386394 19.086914 4.663086 C 19.363605 4.939779 19.584961 5.263672 19.750977 5.634766 C 19.916992 6.005859 20 6.396484 20 6.806641 L 20 9.902344 C 19.817707 9.674479 19.622395 9.456381 19.414062 9.248047 C 19.205729 9.039714 18.984375 8.847656 18.75 8.671875 L 18.75 6.875 C 18.75 6.621095 18.701172 6.380209 18.603516 6.152344 C 18.505859 5.924479 18.370768 5.724284 18.198242 5.551758 C 18.025715 5.379232 17.82552 5.244142 17.597656 5.146484 C 17.369791 5.048829 17.128906 5.000001 16.875 5 L 10.185547 5 C 9.957682 5.156251 9.736328 5.309246 9.521484 5.458984 C 9.306641 5.608725 9.088541 5.742188 8.867188 5.859375 C 8.645833 5.976562 8.413086 6.070964 8.168945 6.142578 C 7.924805 6.214193 7.65625 6.25 7.363281 6.25 L 1.25 6.25 L 1.25 15.625 C 1.25 15.878906 1.298828 16.119791 1.396484 16.347656 C 1.494141 16.575521 1.629232 16.775717 1.801758 16.948242 C 1.974284 17.120768 2.174479 17.255859 2.402344 17.353516 C 2.630208 17.451172 2.871094 17.5 3.125 17.5 L 7.900391 17.5 C 8.011067 17.721354 8.129883 17.936197 8.256836 18.144531 C 8.383789 18.352865 8.522135 18.554688 8.671875 18.75 Z M 7.363281 5 C 7.539062 5.000001 7.70345 4.977215 7.856445 4.931641 C 8.009439 4.886068 8.154297 4.825847 8.291016 4.750977 C 8.427734 4.676107 8.562825 4.5931 8.696289 4.501953 C 8.829752 4.410808 8.964844 4.316406 9.101562 4.21875 C 8.951822 4.016928 8.805338 3.813477 8.662109 3.608398 C 8.51888 3.40332 8.36263 3.219402 8.193359 3.056641 C 8.024088 2.893881 7.833658 2.760418 7.62207 2.65625 C 7.410481 2.552084 7.161458 2.5 6.875 2.5 L 3.125 2.5 C 2.871094 2.5 2.630208 2.548828 2.402344 2.646484 C 2.174479 2.744141 1.974284 2.879232 1.801758 3.051758 C 1.629232 3.224285 1.494141 3.42448 1.396484 3.652344 C 1.298828 3.880209 1.25 4.121094 1.25 4.375 L 1.25 5 Z M 8.75 14.375 C 8.75 13.600261 8.898111 12.871094 9.194336 12.1875 C 9.49056 11.503906 9.892578 10.908203 10.400391 10.400391 C 10.908203 9.892578 11.503906 9.490561 12.1875 9.194336 C 12.871093 8.898112 13.60026 8.75 14.375 8.75 C 14.889322 8.75 15.385741 8.816732 15.864258 8.950195 C 16.342773 9.083659 16.790363 9.272461 17.207031 9.516602 C 17.623697 9.760742 18.004557 10.055339 18.349609 10.400391 C 18.69466 10.745443 18.989258 11.126303 19.233398 11.542969 C 19.477539 11.959636 19.66634 12.407227 19.799805 12.885742 C 19.933268 13.364258 20 13.860678 20 14.375 C 20 15.14974 19.851887 15.878906 19.555664 16.5625 C 19.259439 17.246094 18.857422 17.841797 18.349609 18.349609 C 17.841797 18.857422 17.246094 19.259439 16.5625 19.555664 C 15.878906 19.851889 15.149739 20 14.375 20 C 13.59375 20 12.861328 19.853516 12.177734 19.560547 C 11.494141 19.267578 10.898438 18.867188 10.390625 18.359375 C 9.882812 17.851562 9.482422 17.255859 9.189453 16.572266 C 8.896484 15.888672 8.75 15.15625 8.75 14.375 Z M 12.5 16.923828 C 12.688802 16.923828 12.848307 16.858725 12.978516 16.728516 L 16.25 13.457031 L 16.25 15.625 C 16.25 15.794271 16.311848 15.940756 16.435547 16.064453 C 16.559244 16.188152 16.705729 16.25 16.875 16.25 C 17.04427 16.25 17.190754 16.188152 17.314453 16.064453 C 17.43815 15.940756 17.5 15.794271 17.5 15.625 L 17.5 11.875 C 17.5 11.705729 17.43815 11.559245 17.314453 11.435547 C 17.190754 11.31185 17.04427 11.25 16.875 11.25 L 13.125 11.25 C 12.955729 11.25 12.809244 11.31185 12.685547 11.435547 C 12.561849 11.559245 12.5 11.705729 12.5 11.875 C 12.5 12.044271 12.561849 12.190756 12.685547 12.314453 C 12.809244 12.438151 12.955729 12.5 13.125 12.5 L 15.292969 12.5 L 12.021484 15.771484 C 11.891275 15.901693 11.826172 16.061197 11.826172 16.25 C 11.826172 16.438803 11.891275 16.598307 12.021484 16.728516 C 12.151691 16.858725 12.311197 16.923828 12.5 16.923828 Z \"\n                        Height=\"17\"\n                        HorizontalAlignment=\"Right\"\n                        VerticalAlignment=\"Center\"\n                        Width=\"17\" />\n                    <Button\n                        Classes=\"custom-button\"\n                        Click=\"DelFile\"\n                        Content=\"F1 M 19.375 3.125 C 19.375 3.26823 19.34733 3.382162 19.291992 3.466797 C 19.236652 3.551434 19.16341 3.61491 19.072266 3.657227 C 18.981119 3.699545 18.880207 3.727215 18.769531 3.740234 C 18.658854 3.753256 18.544922 3.759766 18.427734 3.759766 C 18.362629 3.759766 18.297525 3.758139 18.232422 3.754883 C 18.167316 3.751629 18.108723 3.75 18.056641 3.75 L 16.435547 17.783203 C 16.396484 18.095703 16.305338 18.387045 16.162109 18.657227 C 16.018879 18.927408 15.836588 19.161783 15.615234 19.360352 C 15.39388 19.55892 15.139974 19.71517 14.853516 19.829102 C 14.567057 19.943033 14.267578 20 13.955078 20 L 6.044922 20 C 5.732422 20 5.432942 19.943033 5.146484 19.829102 C 4.860026 19.71517 4.60612 19.55892 4.384766 19.360352 C 4.163411 19.161783 3.98112 18.927408 3.837891 18.657227 C 3.694661 18.387045 3.603516 18.095703 3.564453 17.783203 L 1.943359 3.75 C 1.878255 3.75 1.813151 3.751629 1.748047 3.754883 C 1.682943 3.758139 1.617839 3.759766 1.552734 3.759766 C 1.442057 3.759766 1.33138 3.753256 1.220703 3.740234 C 1.110026 3.727215 1.010742 3.697918 0.922852 3.652344 C 0.834961 3.606771 0.763346 3.541668 0.708008 3.457031 C 0.652669 3.372396 0.625 3.261719 0.625 3.125 C 0.625 2.95573 0.686849 2.809246 0.810547 2.685547 C 0.934245 2.56185 1.080729 2.5 1.25 2.5 L 6.933594 2.5 C 6.998697 2.141928 7.127278 1.809896 7.319336 1.503906 C 7.511393 1.197918 7.745768 0.932617 8.022461 0.708008 C 8.299153 0.483398 8.606771 0.309246 8.945312 0.185547 C 9.283854 0.06185 9.635416 0 10 0 C 10.364583 0 10.716146 0.06185 11.054688 0.185547 C 11.393229 0.309246 11.700846 0.483398 11.977539 0.708008 C 12.25423 0.932617 12.488605 1.197918 12.680664 1.503906 C 12.872721 1.809896 13.001302 2.141928 13.066406 2.5 L 18.75 2.5 C 18.91927 2.5 19.065754 2.56185 19.189453 2.685547 C 19.31315 2.809246 19.375 2.95573 19.375 3.125 Z M 8.232422 2.5 L 11.767578 2.5 C 11.702474 2.311199 11.611328 2.140301 11.494141 1.987305 C 11.376953 1.834311 11.240234 1.702475 11.083984 1.591797 C 10.927734 1.481121 10.758463 1.396484 10.576172 1.337891 C 10.39388 1.279297 10.201822 1.25 10 1.25 C 9.798177 1.25 9.606119 1.279297 9.423828 1.337891 C 9.241536 1.396484 9.072266 1.481121 8.916016 1.591797 C 8.759766 1.702475 8.623047 1.834311 8.505859 1.987305 C 8.388672 2.140301 8.297525 2.311199 8.232422 2.5 Z M 16.796875 3.75 L 3.203125 3.75 L 4.804688 17.646484 C 4.84375 17.972006 4.978841 18.237305 5.209961 18.442383 C 5.441081 18.647461 5.719401 18.75 6.044922 18.75 L 13.955078 18.75 C 14.111328 18.75 14.261067 18.72233 14.404297 18.666992 C 14.547525 18.611654 14.674479 18.535156 14.785156 18.4375 C 14.895833 18.339844 14.986979 18.222656 15.058594 18.085938 C 15.130208 17.949219 15.175781 17.802734 15.195312 17.646484 Z M 7.5 14.375 L 7.5 8.125 C 7.5 7.95573 7.561849 7.809246 7.685547 7.685547 C 7.809245 7.56185 7.955729 7.5 8.125 7.5 C 8.294271 7.5 8.440755 7.56185 8.564453 7.685547 C 8.68815 7.809246 8.75 7.95573 8.75 8.125 L 8.75 14.375 C 8.75 14.544271 8.68815 14.690756 8.564453 14.814453 C 8.440755 14.938151 8.294271 15 8.125 15 C 7.955729 15 7.809245 14.938151 7.685547 14.814453 C 7.561849 14.690756 7.5 14.544271 7.5 14.375 Z M 11.25 14.375 L 11.25 8.125 C 11.25 7.95573 11.311849 7.809246 11.435547 7.685547 C 11.559244 7.56185 11.705729 7.5 11.875 7.5 C 12.04427 7.5 12.190754 7.56185 12.314453 7.685547 C 12.43815 7.809246 12.5 7.95573 12.5 8.125 L 12.5 14.375 C 12.5 14.544271 12.43815 14.690756 12.314453 14.814453 C 12.190754 14.938151 12.04427 15 11.875 15 C 11.705729 15 11.559244 14.938151 11.435547 14.814453 C 11.311849 14.690756 11.25 14.544271 11.25 14.375 Z \"\n                        Height=\"16\"\n                        HorizontalAlignment=\"Right\"\n                        VerticalAlignment=\"Center\"\n                        Width=\"16\" />\n                </StackPanel>\n                <TextBlock\n                    HorizontalAlignment=\"Stretch\"\n                    Margin=\"0,0,0,0\"\n                    Name=\"FileNameTextBlock\"\n                    TextTrimming=\"LeadingCharacterEllipsis\"\n                    VerticalAlignment=\"Center\" />\n            </DockPanel>\n            <Border\n                ClipToBounds=\"True\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Margin=\"10,0,10,10\">\n                <Image HorizontalAlignment=\"Center\" Name=\"Image\" />\n            </Border>\n        </DockPanel>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/ScreenshotEntry.axaml.cs",
    "content": "﻿using System.IO;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Input;\nusing Avalonia.Interactivity;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.VisualBasic.FileIO;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Controls;\n\npublic partial class ScreenshotEntry : UserControl\n{\n    private readonly string _path;\n    private readonly Action _refreshAction;\n\n    public ScreenshotEntry(string name, string path, Action refreshAction, Action selectedAction)\n    {\n        _path = path;\n        _refreshAction = refreshAction;\n        InitializeComponent();\n        FileNameTextBlock.Text = name;\n        Image.Source = new Bitmap(path);\n        Image.PointerPressed += (_, _) => { selectedAction.Invoke(); };\n    }\n\n    public ScreenshotEntry()\n    {\n    }\n\n    private void OpenFileInFileExplore(object? sender, RoutedEventArgs e)\n    {\n        var launcher = TopLevel.GetTopLevel(this).Launcher;\n        launcher.LaunchFileInfoAsync(new FileInfo(_path));\n    }\n    \n    private void Copy(object? sender, RoutedEventArgs e)\n    {\n        var clipboard = TopLevel.GetTopLevel(this).Clipboard;\n        var obj = new DataObject();\n        using var ms = new MemoryStream();\n        new Bitmap(_path).Save(ms);\n        obj.Set(\"image/png\", ms);\n        // obj.Set(DataFormats.Files, _path);\n        clipboard.SetDataObjectAsync(obj);\n    }\n\n    private async void DelFile(object? sender, RoutedEventArgs e)\n    {\n        if (string.IsNullOrWhiteSpace(_path)) return;\n\n        var title = YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows\n            ? MainLang.MoveToRecycleBin\n            : MainLang.DeleteSelect;\n        var dialog = await ShowDialogAsync(title, $\"• {Path.GetFileName(_path)}\\n\", b_cancel: MainLang.Cancel,\n            b_primary: MainLang.Ok);\n        if (dialog != ContentDialogResult.Primary) return;\n\n        if (YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows)\n        {\n            FileSystem.DeleteFile(_path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin);\n        }\n        else\n        {\n            File.Delete(_path);\n        }\n\n        _refreshAction.Invoke();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/TaskEntry.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Public.Controls.TaskEntry\"\n    x:DataType=\"ta:TaskEntryModel\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:operate=\"clr-namespace:YMCL.Public.Classes.Operate\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:ta=\"clr-namespace:YMCL.ViewModels\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:TaskStateToColorConverter x:Key=\"TaskStateToColor\" />\n        <converter:TaskStateToTipConverter x:Key=\"TaskStateToTip\" />\n        <converter:MsToTimeConverter x:Key=\"MsToTimeConverter\" />\n    </UserControl.Resources>\n    <Border\n        Background=\"{DynamicResource 2x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Opacity=\"{DynamicResource MainOpacity}\">\n        <Expander IsExpanded=\"True\">\n            <Expander.Styles>\n                <Style Selector=\"Expander /template/ ToggleButton#ExpanderHeader /template/ ContentPresenter#ContentPresenter\">\n                    <Setter Property=\"Width\" Value=\"{x:Static x:Double.NaN}\" />\n                    <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                </Style>\n            </Expander.Styles>\n            <Expander.Header>\n                <Border Width=\"{Binding UiProperty.TaskEntryHeaderWidth}\" x:DataType=\"da:Data\">\n                    <DockPanel\n                        HorizontalAlignment=\"Stretch\"\n                        Margin=\"5,10,0,10\"\n                        Name=\"HeaderContent\"\n                        Width=\"{x:Static x:Double.NaN}\"\n                        x:DataType=\"ta:TaskEntryModel\">\n                        <ContentControl DockPanel.Dock=\"Left\">\n                            <PathIcon Data=\"F1 M 18.75 10 C 18.75 9.84375 18.719074 9.692383 18.657227 9.545898 C 18.595377 9.399414 18.512369 9.272461 18.408203 9.165039 C 18.304035 9.057617 18.181965 8.971354 18.041992 8.90625 C 17.902018 8.841146 17.75065 8.808594 17.587891 8.808594 L 17.519531 8.808594 L 12.929688 8.964844 L 8.017578 1.591797 C 7.972005 1.526693 7.906901 1.494141 7.822266 1.494141 C 7.763671 1.494141 7.714843 1.516928 7.675781 1.5625 C 7.636718 1.608074 7.617187 1.660156 7.617188 1.71875 L 7.617188 1.757812 L 9.189453 9.091797 L 3.095703 9.296875 L 1.875 6.445312 C 1.822917 6.315104 1.72526 6.25 1.582031 6.25 C 1.490885 6.25 1.414388 6.280925 1.352539 6.342773 C 1.29069 6.404623 1.259766 6.481121 1.259766 6.572266 C 1.259766 6.598309 1.276042 6.673178 1.308594 6.796875 C 1.341146 6.920573 1.381836 7.070312 1.430664 7.246094 C 1.479492 7.421875 1.534831 7.613933 1.59668 7.822266 C 1.658529 8.0306 1.715495 8.225912 1.767578 8.408203 C 1.819661 8.590495 1.866862 8.753256 1.90918 8.896484 C 1.951497 9.039714 1.979167 9.134115 1.992188 9.179688 C 1.901042 9.231771 1.811523 9.282227 1.723633 9.331055 C 1.635742 9.379883 1.557617 9.433594 1.489258 9.492188 C 1.420898 9.550781 1.363932 9.620769 1.318359 9.702148 C 1.272786 9.783529 1.25 9.882812 1.25 10 C 1.25 10.117188 1.272786 10.216472 1.318359 10.297852 C 1.363932 10.379232 1.420898 10.449219 1.489258 10.507812 C 1.557617 10.566406 1.635742 10.620117 1.723633 10.668945 C 1.811523 10.717773 1.901042 10.768229 1.992188 10.820312 C 1.979167 10.865886 1.951497 10.958659 1.90918 11.098633 C 1.866862 11.238607 1.819661 11.402995 1.767578 11.591797 C 1.715495 11.7806 1.658529 11.977539 1.59668 12.182617 C 1.534831 12.387695 1.479492 12.578125 1.430664 12.753906 C 1.381836 12.929688 1.341146 13.081055 1.308594 13.208008 C 1.276042 13.334961 1.259766 13.408203 1.259766 13.427734 C 1.259766 13.518881 1.29069 13.595378 1.352539 13.657227 C 1.414388 13.719076 1.490885 13.75 1.582031 13.75 C 1.72526 13.75 1.822917 13.684896 1.875 13.554688 L 3.095703 10.703125 L 9.189453 10.908203 L 7.617188 18.242188 L 7.617188 18.28125 C 7.617187 18.339844 7.636718 18.391928 7.675781 18.4375 C 7.714843 18.483072 7.763671 18.505859 7.822266 18.505859 C 7.906901 18.505859 7.972005 18.473307 8.017578 18.408203 L 12.929688 11.035156 L 17.519531 11.191406 L 17.587891 11.191406 C 17.75065 11.191406 17.902018 11.158854 18.041992 11.09375 C 18.181965 11.028646 18.304035 10.942383 18.408203 10.834961 C 18.512369 10.727539 18.595377 10.600586 18.657227 10.454102 C 18.719074 10.307617 18.75 10.15625 18.75 10 Z M 17.568359 7.568359 C 17.900391 7.568359 18.214518 7.631836 18.510742 7.758789 C 18.806965 7.885742 19.065754 8.059896 19.287109 8.28125 C 19.508463 8.502604 19.682617 8.761394 19.80957 9.057617 C 19.936523 9.353842 20 9.667969 20 10 C 20 10.338542 19.934895 10.655925 19.804688 10.952148 C 19.674479 11.248373 19.498697 11.507162 19.277344 11.728516 C 19.055988 11.94987 18.797199 12.124023 18.500977 12.250977 C 18.204752 12.37793 17.887369 12.441406 17.548828 12.441406 C 16.891275 12.441406 16.232096 12.425131 15.571289 12.392578 C 14.910481 12.360026 14.248047 12.330729 13.583984 12.304688 L 9.052734 19.101562 C 8.916016 19.303385 8.740234 19.462891 8.525391 19.580078 C 8.310547 19.697266 8.079427 19.755859 7.832031 19.755859 C 7.630208 19.755859 7.439778 19.716797 7.260742 19.638672 C 7.081706 19.560547 6.927083 19.454752 6.796875 19.321289 C 6.666667 19.187826 6.5625 19.031576 6.484375 18.852539 C 6.40625 18.673502 6.367188 18.483072 6.367188 18.28125 C 6.367188 18.177084 6.376953 18.076172 6.396484 17.978516 L 7.65625 12.109375 L 3.90625 11.982422 L 3.017578 14.052734 C 2.89388 14.345703 2.701823 14.576823 2.441406 14.746094 C 2.18099 14.915365 1.894531 15 1.582031 15 C 1.367188 15 1.163737 14.959311 0.97168 14.87793 C 0.779622 14.79655 0.611979 14.684245 0.46875 14.541016 C 0.325521 14.397787 0.213216 14.230144 0.131836 14.038086 C 0.050456 13.846029 0.009766 13.642578 0.009766 13.427734 C 0.009766 13.310547 0.030924 13.15918 0.073242 12.973633 C 0.11556 12.788086 0.166016 12.594401 0.224609 12.392578 C 0.283203 12.190756 0.341797 11.995443 0.400391 11.806641 C 0.458984 11.617839 0.507812 11.461589 0.546875 11.337891 C 0.371094 11.162109 0.236003 10.957031 0.141602 10.722656 C 0.047201 10.488281 0 10.247396 0 10 C 0 9.752604 0.047201 9.511719 0.141602 9.277344 C 0.236003 9.042969 0.371094 8.837891 0.546875 8.662109 C 0.507812 8.538412 0.458984 8.382162 0.400391 8.193359 C 0.341797 8.004558 0.283203 7.810873 0.224609 7.612305 C 0.166016 7.413738 0.11556 7.220053 0.073242 7.03125 C 0.030924 6.842448 0.009766 6.689453 0.009766 6.572266 C 0.009766 6.357422 0.050456 6.153972 0.131836 5.961914 C 0.213216 5.769857 0.325521 5.602215 0.46875 5.458984 C 0.611979 5.315756 0.779622 5.203451 0.97168 5.12207 C 1.163737 5.040691 1.367188 5.000001 1.582031 5 C 1.894531 5.000001 2.18099 5.084637 2.441406 5.253906 C 2.701823 5.423178 2.89388 5.654297 3.017578 5.947266 L 3.90625 8.017578 L 7.65625 7.890625 L 6.396484 2.021484 C 6.376953 1.923828 6.367188 1.822918 6.367188 1.71875 C 6.367188 1.516928 6.40625 1.326498 6.484375 1.147461 C 6.5625 0.968426 6.666667 0.812176 6.796875 0.678711 C 6.927083 0.545248 7.081706 0.439453 7.260742 0.361328 C 7.439778 0.283203 7.630208 0.244141 7.832031 0.244141 C 8.079427 0.244141 8.310547 0.302734 8.525391 0.419922 C 8.740234 0.537109 8.916016 0.696615 9.052734 0.898438 L 13.583984 7.695312 C 14.248047 7.675782 14.912109 7.64974 15.576172 7.617188 C 16.240234 7.584636 16.904297 7.568359 17.568359 7.568359 Z \" />\n                        </ContentControl>\n                        <Button\n                            Command=\"{Binding ButtonActionCommand}\"\n                            Content=\"{Binding ButtonDisplay}\"\n                            DockPanel.Dock=\"Right\"\n                            IsEnabled=\"{Binding ButtonIsEnable}\" />\n                        <Button\n                            Command=\"{Binding DestroyCommand}\"\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Destroy}\"\n                            DockPanel.Dock=\"Right\"\n                            IsVisible=\"{Binding IsDestroyButtonVisible}\"\n                            Margin=\"0,0,10,0\" />\n                        <StackPanel Margin=\"10,0\">\n                            <DockPanel>\n                                <TextBlock\n                                    DockPanel.Dock=\"Left\"\n                                    HorizontalAlignment=\"Left\"\n                                    Margin=\"1,0,0,0\"\n                                    Text=\"{Binding Name}\" />\n                                <StackPanel\n                                    DockPanel.Dock=\"Right\"\n                                    HorizontalAlignment=\"Right\"\n                                    Orientation=\"Horizontal\">\n                                    <TextBlock\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Margin=\"0,0,10,0\"\n                                        Text=\"{Binding TopRightInfo}\" />\n                                    <TextBlock\n                                        HorizontalAlignment=\"Right\"\n                                        IsVisible=\"{Binding NumberValue}\"\n                                        Margin=\"0,0,1,0\">\n                                        <Run Text=\"{Binding DisplayProgress}\" />\n                                        <Run Text=\"%\" />\n                                    </TextBlock>\n                                </StackPanel>\n                            </DockPanel>\n                            <ProgressBar\n                                Foreground=\"{Binding State, Converter={StaticResource TaskStateToColor}}\"\n                                IsIndeterminate=\"{Binding DisplayIsIndeterminate}\"\n                                MinWidth=\"0\"\n                                Value=\"{Binding DisplayProgress}\" />\n                            <DockPanel>\n                                <StackPanel\n                                    DockPanel.Dock=\"Left\"\n                                    HorizontalAlignment=\"Left\"\n                                    Orientation=\"Horizontal\">\n                                    <TextBlock\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Margin=\"1,0,0,0\"\n                                        Text=\"{Binding State, Converter={StaticResource TaskStateToTip}}\" />\n                                    <TextBlock\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Margin=\"10,0,0,0\"\n                                        Text=\"{Binding BottomLeftInfo}\" />\n                                </StackPanel>\n                                <StackPanel\n                                    DockPanel.Dock=\"Right\"\n                                    HorizontalAlignment=\"Right\"\n                                    Orientation=\"Horizontal\">\n                                    <TextBlock\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        HorizontalAlignment=\"Right\"\n                                        Text=\"{Binding Time, Converter={StaticResource MsToTimeConverter}}\" />\n                                </StackPanel>\n                            </DockPanel>\n                        </StackPanel>\n                    </DockPanel>\n                </Border>\n            </Expander.Header>\n            <StackPanel>\n                <Border Name=\"TopContainer\" />\n                <ItemsControl\n                    ItemsSource=\"{Binding OperateButtons}\"\n                    Margin=\"0,0,0,10\"\n                    Name=\"OperateButtonContainer\"\n                    x:DataType=\"ta:TaskEntryModel\">\n                    <ItemsControl.ItemsPanel>\n                        <ItemsPanelTemplate>\n                            <WrapPanel HorizontalAlignment=\"Left\" />\n                        </ItemsPanelTemplate>\n                    </ItemsControl.ItemsPanel>\n                    <ItemsControl.ItemTemplate>\n                        <DataTemplate DataType=\"operate:TaskEntryOperateButtonEntry\">\n                            <StackPanel Orientation=\"Horizontal\" Spacing=\"5\">\n                                <Button\n                                    Command=\"{Binding ActionInvoke}\"\n                                    Content=\"{Binding Content}\"\n                                    Margin=\"5\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ItemsControl.ItemTemplate>\n                </ItemsControl>\n                <ItemsControl\n                    ItemsSource=\"{Binding SubTasks}\"\n                    Name=\"SubTaskContainer\"\n                    x:DataType=\"ta:TaskEntryModel\">\n                    <ItemsControl.ItemsPanel>\n                        <ItemsPanelTemplate>\n                            <StackPanel Spacing=\"10\" />\n                        </ItemsPanelTemplate>\n                    </ItemsControl.ItemsPanel>\n                    <ItemsControl.ItemTemplate>\n                        <DataTemplate DataType=\"operate:SubTask\">\n                            <StackPanel Orientation=\"Horizontal\" Spacing=\"5\">\n                                <ContentControl\n                                    Content=\"{Binding Icon}\"\n                                    Height=\"16\"\n                                    Width=\"16\" />\n                                <TextBlock Margin=\"3,0,0,0\">\n                                    <Run Text=\"{Binding FinishedTask}\" />\n                                    <Run Text=\"/\" />\n                                    <Run Text=\"{Binding TotalTask}\" />\n                                </TextBlock>\n                                <TextBlock Margin=\"2,0,0,0\" Text=\"{Binding Name}\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </ItemsControl.ItemTemplate>\n                </ItemsControl>\n                <Border Name=\"BottomContainer\" />\n            </StackPanel>\n        </Expander>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/TaskEntry.axaml.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Splat.ModeDetection;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Enum;\nusing YMCL.ViewModels;\n\nnamespace YMCL.Public.Controls;\n\npublic partial class TaskEntry : UserControl\n{\n    public TaskEntryModel Model { get; }\n\n    public TaskEntry(string name, ObservableCollection<SubTask> subTasks = null, TaskState state = TaskState.Waiting)\n    {\n        InitializeComponent();\n        Model = new TaskEntryModel(this, state, subTasks);\n        HeaderContent.DataContext = Model;\n        SubTaskContainer.DataContext = Model;\n        OperateButtonContainer.DataContext = Model;\n        DataContext = Data.Instance;\n        Model.Name = name;\n        Data.TaskEntries.Add(this);\n        YMCL.App.UiRoot.ViewModel.Task.UpdateTasksTip();\n    }\n\n    public TaskEntry()\n    {\n    }\n\n    public void UpdateAction(Action action)\n    {\n        Model.ButtonAction = action;\n    }\n\n    public void UpdateDestoryAction(Action action)\n    {\n        Model.DestoryAction = action;\n    }\n    \n    public void Rename(string name)\n    {\n        Model.Name = name;\n    }\n\n    public void AddOperateButton(TaskEntryOperateButtonEntry entry)\n    {\n        Model.OperateButtons.Add(entry);\n    }\n\n    public void UpdateButtonText(string text)\n    {\n        Model.ButtonDisplay = text;\n    }\n\n    public void UpdateValue(double value)\n    {\n        Model.NumberValue = true;\n        Model.Value = value;\n        Model.GetIsIndeterminate();\n        Model.GetDisplayProgress();\n    }\n\n    public void UpdateSubFinishTask(SubTask task, int count)\n    {\n        task.FailedTask = count;\n    }\n\n    public void UpdateSubTotalTask(SubTask task, int count)\n    {\n        task.TotalTask = count;\n    }\n\n    public void AddSubTask(SubTask task)\n    {\n        Model.SubTasks.Add(task);\n    }\n\n    public void AddSubTaskRange(SubTask[] task)\n    {\n        foreach (var subTask in task)\n        {\n            Model.SubTasks.Add(subTask);\n        }\n    }\n\n    public void RemoveSubTask(SubTask task)\n    {\n        Model.SubTasks.Remove(task);\n    }\n\n    public void Destroy()\n    {\n        Data.TaskEntries.Remove(this);\n        YMCL.App.UiRoot.ViewModel.Task.UpdateTasksTip();\n    }\n\n    public void FinishWithSuccess()\n    {\n        Model.CanRemove = true;\n        Model.ButtonIsEnable = true;\n        Model.State = TaskState.Finished;\n        foreach (var task in Model.SubTasks)\n        {\n            task.Finish();\n        }\n    }\n\n    public void FinishWithError()\n    {\n        Model.CanRemove = true;\n        Model.State = TaskState.Error;\n    }\n\n    private int index;\n\n    public void AdvanceSubTask()\n    {\n        Model.SubTasks[index].Finish();\n        if (index <= Model.SubTasks.Count - 2)\n        {\n            Model.SubTasks[index + 1].State = TaskState.Running;\n        }\n\n        index++;\n    }\n\n    public void Cancel()\n    {\n        Model.State = TaskState.Canceled;\n        Model.CanRemove = true;\n    }\n\n    public void CancelWaitFinish()\n    {\n        Model.State = TaskState.Canceling;\n        Model.ButtonIsEnable = false;\n    }\n\n    public void CancelWithSuccess()\n    {\n        Model.State = TaskState.Canceling;\n        Model.ButtonIsEnable = false;\n        FinishWithSuccess();\n    }\n\n    public void CancelFinish()\n    {\n        Model.State = TaskState.Canceled;\n        Model.ButtonIsEnable = true;\n        Model.CanRemove = true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/TextWithIcon.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Public.Controls.TextWithIcon\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <PathIcon Name=\"Icon\" />\n        <TextBlock Name=\"Text\" />\n    </DockPanel>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/TextWithIcon.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace YMCL.Public.Controls;\n\npublic partial class TextWithIcon : UserControl\n{\n    public TextWithIcon()\n    {\n        InitializeComponent();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/TitleBar.axaml",
    "content": "<UserControl\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Public.Controls.TitleBar\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        Height=\"30\"\n        Name=\"Root\"\n        Opacity=\"{DynamicResource MainOpacity}\"\n        VerticalAlignment=\"Top\">\n        <Grid\n            Background=\"#00242424\"\n            Margin=\"8,0,8,0\"\n            Name=\"MoveDragArea\"\n            Opacity=\"{DynamicResource MainOpacity}\">\n            <TextBlock />\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                FontSize=\"16\"\n                HorizontalAlignment=\"Left\"\n                Name=\"TitleText\"\n                Text=\"\"\n                VerticalAlignment=\"Center\" />\n            <StackPanel HorizontalAlignment=\"Right\" Orientation=\"Horizontal\">\n                <StackPanel\n                    HorizontalAlignment=\"Right\"\n                    Name=\"Panel\"\n                    Orientation=\"Horizontal\" />\n                <Separator\n                    Background=\"{DynamicResource TextColor}\"\n                    Foreground=\"{DynamicResource TextColor}\"\n                    Height=\"16\"\n                    IsVisible=\"False\"\n                    Margin=\"5,0,5,0\"\n                    Name=\"Separator\"\n                    VerticalAlignment=\"Center\"\n                    Width=\"1\" />\n                <StackPanel\n                    HorizontalAlignment=\"Right\"\n                    Name=\"FunctionRoot\"\n                    Orientation=\"Horizontal\">\n                    <Button\n                        Classes=\"icon-button\"\n                        Content=\"{DynamicResource Minimize}\"\n                        HorizontalAlignment=\"Right\"\n                        Margin=\"0,5,0,0\"\n                        Name=\"MinimizeButton\"\n                        VerticalAlignment=\"Center\" />\n                    <Button\n                        Classes=\"icon-button\"\n                        Content=\"{DynamicResource Maximize}\"\n                        HorizontalAlignment=\"Right\"\n                        Name=\"MaximizeButton\"\n                        VerticalAlignment=\"Center\" />\n                    <Button\n                        Classes=\"icon-button\"\n                        Content=\"{DynamicResource Close}\"\n                        HorizontalAlignment=\"Right\"\n                        Name=\"CloseButton\"\n                        VerticalAlignment=\"Center\" />\n                </StackPanel>\n            </StackPanel>\n        </Grid>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Controls/TitleBar.axaml.cs",
    "content": "using Avalonia.Input;\nusing Avalonia.Interactivity;\nusing Avalonia.VisualTree;\n\nnamespace YMCL.Public.Controls;\n\npublic partial class TitleBar : UserControl\n{\n    public static readonly StyledProperty<string> TitleProperty =\n        AvaloniaProperty.Register<TitleBar, string>(nameof(Title), \"\");\n\n    public static readonly StyledProperty<bool> IsCloseBtnExitAppProperty =\n        AvaloniaProperty.Register<TitleBar, bool>(nameof(IsCloseBtnExitApp));\n\n    public static readonly StyledProperty<bool> IsCloseBtnShowProperty =\n        AvaloniaProperty.Register<TitleBar, bool>(nameof(IsCloseBtnShow), true);\n\n    public static readonly StyledProperty<bool> IsMaxBtnShowProperty =\n        AvaloniaProperty.Register<TitleBar, bool>(nameof(IsMaxBtnShow), true);\n    \n    public static readonly StyledProperty<bool> IsMinBtnShowProperty =\n        AvaloniaProperty.Register<TitleBar, bool>(nameof(IsMinBtnShow), true);\n\n    private DateTime? lastClickTime;\n\n    public TitleBar()\n    {\n        InitializeComponent();\n        CloseButton.Click += CloseButton_Click;\n        MaximizeButton.Click += MaximizeButton_Click;\n        MinimizeButton.Click += MinimizeButton_Click;\n        MoveDragArea.PointerPressed += MoveDragArea_PointerPressed;\n        Loaded += (_, _) =>\n        {\n            TitleText.Text = Title;\n            CloseButton.IsVisible = IsCloseBtnShow;\n            MaximizeButton.IsVisible = IsMaxBtnShow;\n            MinimizeButton.IsVisible = IsMinBtnShow;\n        };\n    }\n\n    public string Title\n    {\n        get => GetValue(TitleProperty);\n        set => SetValue(TitleProperty, value);\n    }\n\n    public bool IsCloseBtnExitApp\n    {\n        get => GetValue(IsCloseBtnExitAppProperty);\n        set => SetValue(IsCloseBtnExitAppProperty, value);\n    }\n\n    public bool IsCloseBtnShow\n    {\n        get => GetValue(IsCloseBtnShowProperty);\n        set => SetValue(IsCloseBtnShowProperty, value);\n    }\n\n    public bool IsMaxBtnShow\n    {\n        get => GetValue(IsMaxBtnShowProperty);\n        set => SetValue(IsMaxBtnShowProperty, value);\n    }\n    public bool IsMinBtnShow\n    {\n        get => GetValue(IsMinBtnShowProperty);\n        set => SetValue(IsMinBtnShowProperty, value);\n    }\n\n    private void MoveDragArea_PointerPressed(object? sender, PointerPressedEventArgs e)\n    {\n        if (e.Pointer.Type == PointerType.Mouse)\n        {\n            var control = sender as Grid;\n            if (control != null)\n            {\n                var window = control.GetVisualRoot() as Window;\n                window.BeginMoveDrag(e);\n            }\n\n            if (IsMaxBtnShow && lastClickTime.HasValue && (DateTime.Now - lastClickTime.Value).TotalMilliseconds < 300)\n            {\n                lastClickTime = null;\n                var window = this.GetVisualRoot() as Window;\n                if (window != null)\n                    window.WindowState = window.WindowState == WindowState.Maximized\n                        ? WindowState.Normal\n                        : WindowState.Maximized;\n            }\n            else\n            {\n                lastClickTime = DateTime.Now;\n            }\n\n            e.Handled = true;\n        }\n    }\n\n    private void MinimizeButton_Click(object? sender, RoutedEventArgs e)\n    {\n        var button = sender as Button;\n        if (button != null)\n        {\n            var window = button.GetVisualRoot() as Window;\n            if (window != null) window.WindowState = WindowState.Minimized;\n        }\n    }\n\n    private void MaximizeButton_Click(object? sender, RoutedEventArgs e)\n    {\n        var button = sender as Button;\n        if (button != null)\n        {\n            var window = button.GetVisualRoot() as Window;\n            if (window != null)\n            {\n                if (window.WindowState == WindowState.Maximized)\n                    window.WindowState = WindowState.Normal;\n                else\n                    window.WindowState = WindowState.Maximized;\n            }\n        }\n    }\n\n    private void CloseButton_Click(object? sender, RoutedEventArgs e)\n    {\n        var button = sender as Button;\n        if (button != null)\n        {\n            if (IsCloseBtnExitApp)\n            {\n                Environment.Exit(0);\n            }\n            else\n            {\n                var window = button.GetVisualRoot() as Window;\n                if (window != null) window.Hide();\n            }\n        }\n    }\n\n    public void AddButton(Button btn)\n    {\n        Panel.Children.Add(btn);\n        Separator.IsVisible = true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/GameSpecialFolder.cs",
    "content": "﻿namespace YMCL.Public.Enum;\n\npublic enum GameSpecialFolder\n{\n    GameFolder,\n    ShaderPacksFolder,\n    ResourcePacksFolder,\n    ModsFolder,\n    SavesFolder,\n    ScreenshotsFolder,\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/LogType.cs",
    "content": "﻿namespace YMCL.Public.Enum;\n\npublic enum LogType\n{\n    Fatal,\n    Error,\n    Warning,\n    Info,\n    Debug,\n    StackTrace,\n    Exception,\n    Unknown,\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/ModLoaderType.cs",
    "content": "﻿namespace YMCL.Public.Enum;\n\npublic enum ModLoaderType\n{\n    Any,\n    Forge,\n    Cauldron,\n    LiteLoader,\n    Fabric,\n    Quilt,\n    NeoForge,\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/ResourceSource.cs",
    "content": "﻿namespace YMCL.Public.Enum;\n\npublic enum ResourceSource\n{\n    Unknown,\n    CurseForge,\n    Modrinth,\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/ResourceType.cs",
    "content": "﻿namespace YMCL.Public.Enum;\n\npublic enum ResourceType\n{\n    Unknown,\n    Mod,\n    Map,\n    DataPack,\n    ResourcePack,\n    ShaderPack,\n    ModPack,\n    Plugin\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/RuntimeInfo.cs",
    "content": "﻿namespace YMCL.Public.Enum;\n\npublic enum RunnerType\n{\n    Desktop,\n    Android,\n    Browser,\n    Ios\n}\n\npublic enum DesktopRunnerType\n{\n    Windows,\n    MacOs,\n    Linux,\n    FreeBSD,\n    Unknown\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/Setting.cs",
    "content": "﻿namespace YMCL.Public.Enum;\n\npublic class Setting\n{\n    public enum Theme\n    {\n        System,\n        Light,\n        Dark\n    }\n\n    public enum Repeat\n    {\n        RepeatOff,\n        RepeatAll,\n        RepeatOne\n    }\n\n    public enum LaunchCore\n    {\n        MinecraftLaunch,\n        StarLight\n    }\n\n    public enum LauncherVisibility\n    {\n        AfterLaunchKeepLauncherVisible,\n        AfterLaunchMakeLauncherMinimize,\n        AfterLaunchMinimizeAndShowWhenGameExit,\n        AfterLaunchHideAndShowWhenGameExit,\n        AfterLaunchExitLauncher\n    }\n\n    public enum OpenFileWay\n    {\n        FileSelectWindow,\n        ManualInput\n    }\n\n    public enum DownloadSource\n    {\n        Mojang,\n        BmclApi\n    }\n\n\n    public enum WindowTitleBarStyle\n    {\n        System,\n        Ymcl,\n        Unset\n    }\n\n    public enum CustomHomePageWay\n    {\n        None,\n        Local,\n        Network,\n        Presetting_JavaNews\n    }\n\n\n    public enum CustomBackGroundWay\n    {\n        Default,\n        Image,\n        AcrylicBlur,\n        Transparent,\n        Mica\n    }\n\n    public enum AccountType\n    {\n        Offline,\n        Microsoft,\n        ThirdParty\n    }\n\n    public enum VersionSettingEnableIndependencyCore\n    {\n        Global,\n        Off,\n        On\n    }\n    public enum MaxMemWay\n    {\n        Global,\n        AutoAllocate,\n        Custom\n    }\n\n    public enum NoticeWay\n    {\n        Bubble,\n        Card\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/SongType.cs",
    "content": "namespace YMCL.Public.Enum;\n\npublic enum SongType\n{\n    Unknown,\n    Local,\n    Netease\n}\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Enum/TaskState.cs",
    "content": "﻿namespace YMCL.Public.Enum;\n\npublic enum TaskState\n{\n    Waiting,\n    Running,\n    Paused,\n    Error,\n    Canceled,\n    Canceling,\n    Finished\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Langs/LangHelper.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing System.Threading.Tasks;\nusing Avalonia.Media;\nusing Avalonia.VisualTree;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\n\nnamespace YMCL.Public.Langs;\n\npublic sealed class LangHelper : INotifyPropertyChanged\n{\n    public static ObservableCollection<Language> Langs { get; } =\n    [\n        new() { Label = \"简体中文\", Code = \"zh-CN\" },\n        new() { Label = \"繁體中文\", Code = \"zh-Hant\" },\n        new() { Label = \"English\", Code = \"en-US\" },\n        new() { Label = \"日本語\", Code = \"ja-JP\" },\n        new() { Label = \"Русский язык\", Code = \"ru-RU\" },\n    ];\n\n    public static LangHelper Current { get; } = new();\n\n    private MainLang _resources;\n\n    public MainLang Resources\n    {\n        get => _resources;\n        private set\n        {\n            if (_resources == value) return;\n            _resources = value;\n            OnPropertyChanged();\n        }\n    }\n\n    public event PropertyChangedEventHandler PropertyChanged;\n\n    private LangHelper()\n    {\n        _resources = new MainLang();\n    }\n\n    private void OnPropertyChanged([CallerMemberName] string propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    public void ChangedCulture(string? name)\n    {\n        MainLang.Culture = CultureInfo.GetCultureInfo(string.IsNullOrEmpty(name) ? \"zh-CN\" : name);\n        Resources = new MainLang();\n    }\n\n    public string GetString(string key)\n    {\n        return MainLang.ResourceManager.GetString(key, MainLang.Culture) ?? $\"[{key}]\";\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Langs/MainLang.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace YMCL.Public.Langs\n{\n    using System;\n\n\n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"17.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class MainLang\n    {\n\n        private static global::System.Resources.ResourceManager resourceMan;\n\n        private static global::System.Globalization.CultureInfo resourceCulture;\n\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal MainLang()\n        {\n        }\n\n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager\n        {\n            get\n            {\n                if (object.ReferenceEquals(resourceMan, null))\n                {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"YMCL.Public.Langs.MainLang\", typeof(MainLang).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n\n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture\n        {\n            get\n            {\n                return resourceCulture;\n            }\n            set\n            {\n                resourceCulture = value;\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 关于.\n        /// </summary>\n        public static string About\n        {\n            get\n            {\n                return ResourceManager.GetString(\"About\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 账户.\n        /// </summary>\n        public static string Account\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Account\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 账户错误.\n        /// </summary>\n        public static string AccountError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AccountError\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 账户名称.\n        /// </summary>\n        public static string AccountName\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AccountName\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 账户名称不可为空.\n        /// </summary>\n        public static string AccountNameCannotBeNull\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AccountNameCannotBeNull\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 账户密码.\n        /// </summary>\n        public static string AccountPassword\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AccountPassword\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动游戏至少需要一个账户，如使用离线账户将无法登入有正版验证的服务器。.\n        /// </summary>\n        public static string AccountTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AccountTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 亚克力.\n        /// </summary>\n        public static string AcrylicBlur\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AcrylicBlur\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 激活Windows/Office.\n        /// </summary>\n        public static string ActivateWinOffice\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ActivateWinOffice\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 添加.\n        /// </summary>\n        public static string Add\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Add\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 添加快捷启动.\n        /// </summary>\n        public static string AddFastLaunch\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AddFastLaunch\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 添加文件夹.\n        /// </summary>\n        public static string AddFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AddFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 添加音频文件.\n        /// </summary>\n        public static string AddLocalSong\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AddLocalSong\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 添加新账户.\n        /// </summary>\n        public static string AddNewAccount\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AddNewAccount\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Uuid，留空则自动生成.\n        /// </summary>\n        public static string AddNewAccountUuid\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AddNewAccountUuid\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 将以下文件作为模组添加至当前版本.\n        /// </summary>\n        public static string AddTheFollowingFilesAsModsToTheCurrentVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AddTheFollowingFilesAsModsToTheCurrentVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动完成后关闭.\n        /// </summary>\n        public static string AfterLaunchExitLauncher\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AfterLaunchExitLauncher\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动完成后隐藏，游戏退出后显示.\n        /// </summary>\n        public static string AfterLaunchHideAndShowWhenGameExit\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AfterLaunchHideAndShowWhenGameExit\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动完成后保持不变.\n        /// </summary>\n        public static string AfterLaunchKeepLauncherVisible\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AfterLaunchKeepLauncherVisible\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动完成后最小化.\n        /// </summary>\n        public static string AfterLaunchMakeLauncherMinimize\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AfterLaunchMakeLauncherMinimize\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动完成后最小化，游戏退出后显示.\n        /// </summary>\n        public static string AfterLaunchMinimizeAndShowWhenGameExit\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AfterLaunchMinimizeAndShowWhenGameExit\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 输入关键词以在YMCL中搜索.\n        /// </summary>\n        public static string AggregateSearchTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AggregateSearchTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 输入关键词以在YMCL中搜索.\n        /// </summary>\n        public static string AggregateSearchWatermark\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AggregateSearchWatermark\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 居中对齐.\n        /// </summary>\n        public static string AlignCenter\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AlignCenter\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 居左对齐.\n        /// </summary>\n        public static string AlignLeft\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AlignLeft\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 居右对齐.\n        /// </summary>\n        public static string AlignRight\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AlignRight\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 全部.\n        /// </summary>\n        public static string All\n        {\n            get\n            {\n                return ResourceManager.GetString(\"All\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 全部导入.\n        /// </summary>\n        public static string AllImport\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AllImport\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 允许命令.\n        /// </summary>\n        public static string AllowCommands\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AllowCommands\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 所有类型.\n        /// </summary>\n        public static string AllType\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AllType\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 所有版本.\n        /// </summary>\n        public static string AllVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AllVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已复制到剪切板.\n        /// </summary>\n        public static string AlreadyCopyToClipBoard\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AlreadyCopyToClipBoard\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 任意加载器.\n        /// </summary>\n        public static string AnyModLoader\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AnyModLoader\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 所有来源.\n        /// </summary>\n        public static string AnySource\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AnySource\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 应用程序接口.\n        /// </summary>\n        public static string Api\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Api\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Api错误.\n        /// </summary>\n        public static string ApiError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ApiError\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 作为资源包导入.\n        /// </summary>\n        public static string AsResourcePackImport\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AsResourcePackImport\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 作为光影包导入.\n        /// </summary>\n        public static string AsShaderPackImport\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AsShaderPackImport\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 作者.\n        /// </summary>\n        public static string Author\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Author\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自动分配.\n        /// </summary>\n        public static string AutoAllocate\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AutoAllocate\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自动安装.\n        /// </summary>\n        public static string AutoInstall\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AutoInstall\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自动加入服务器.\n        /// </summary>\n        public static string AutoJoinServer\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AutoJoinServer\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自动进入存档.\n        /// </summary>\n        public static string AutoJoinWorld\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AutoJoinWorld\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自动扫描.\n        /// </summary>\n        public static string AutoScan\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AutoScan\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自动滚动到末尾.\n        /// </summary>\n        public static string AutoScrollToEnd\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AutoScrollToEnd\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自动更新.\n        /// </summary>\n        public static string AutoUpdate\n        {\n            get\n            {\n                return ResourceManager.GetString(\"AutoUpdate\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 背景图.\n        /// </summary>\n        public static string BackGroundImg\n        {\n            get\n            {\n                return ResourceManager.GetString(\"BackGroundImg\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 基岩版.\n        /// </summary>\n        public static string BedRockVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"BedRockVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 开始下载.\n        /// </summary>\n        public static string BeginDownload\n        {\n            get\n            {\n                return ResourceManager.GetString(\"BeginDownload\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 开始安装.\n        /// </summary>\n        public static string BeginInstall\n        {\n            get\n            {\n                return ResourceManager.GetString(\"BeginInstall\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 构建启动配置项.\n        /// </summary>\n        public static string BuildLaunchConfig\n        {\n            get\n            {\n                return ResourceManager.GetString(\"BuildLaunchConfig\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 构建启动配置失败.\n        /// </summary>\n        public static string BuildLaunchConfigFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"BuildLaunchConfigFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 取消.\n        /// </summary>\n        public static string Cancel\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Cancel\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 取消激活Windows.\n        /// </summary>\n        public static string CancelActivateWin\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CancelActivateWin\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 此操作会移除Windows激活状态，导致Windows个性化等功能不可用，是否继续？.\n        /// </summary>\n        public static string CancelActivateWinTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CancelActivateWinTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已取消.\n        /// </summary>\n        public static string Canceled\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Canceled\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 更新已取消.\n        /// </summary>\n        public static string CanceledUpdate\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CanceledUpdate\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 取消中.\n        /// </summary>\n        public static string Canceling\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Canceling\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法找到合适Java.\n        /// </summary>\n        public static string CannotFandRightJava\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CannotFandRightJava\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法找到Minecraft文件夹.\n        /// </summary>\n        public static string CannotFindMinecraftFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CannotFindMinecraftFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法加载.\n        /// </summary>\n        public static string CannotLoad\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CannotLoad\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法加载版本设置.\n        /// </summary>\n        public static string CannotLoadVersionSetting\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CannotLoadVersionSetting\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法打开基岩版设置.\n        /// </summary>\n        public static string CannotOpenBedRockSetting\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CannotOpenBedRockSetting\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法打开浏览器.\n        /// </summary>\n        public static string CannotOpenBrowser\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CannotOpenBrowser\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法识别选中版本.\n        /// </summary>\n        public static string CannotRecognitionTheVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CannotRecognitionTheVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 检查启动参数.\n        /// </summary>\n        public static string CheckLaunchArg\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CheckLaunchArg\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 检查更新.\n        /// </summary>\n        public static string CheckUpdate\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CheckUpdate\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 检查更新失败.\n        /// </summary>\n        public static string CheckUpdateFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CheckUpdateFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 检查版本资源.\n        /// </summary>\n        public static string CheckVersionResource\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CheckVersionResource\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择平台.\n        /// </summary>\n        public static string ChooseArchitecture\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ChooseArchitecture\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择语言/Choose Language.\n        /// </summary>\n        public static string ChooseLanguage\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ChooseLanguage\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 色彩模式.\n        /// </summary>\n        public static string ColorMode\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ColorMode\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 冲突.\n        /// </summary>\n        public static string Conflict\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Conflict\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 复制.\n        /// </summary>\n        public static string Copy\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Copy\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 复制代码并打开浏览器.\n        /// </summary>\n        public static string CopyCodeAndOPenBrowser\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CopyCodeAndOPenBrowser\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 复制到剪贴板.\n        /// </summary>\n        public static string CopyToClipBoard\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CopyToClipBoard\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Ctrl + C 复制以下链接并粘贴至浏览器.\n        /// </summary>\n        public static string CopyUrlAndManualOpen\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CopyUrlAndManualOpen\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 圆角半径.\n        /// </summary>\n        public static string CornerRadius\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CornerRadius\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 覆盖.\n        /// </summary>\n        public static string Cover\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Cover\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 崩溃啦！ヾ(•ω•`)o.\n        /// </summary>\n        public static string CrashLa\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CrashLa\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 创建下载任务.\n        /// </summary>\n        public static string CreateDownloadTask\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CreateDownloadTask\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 创建游戏实例失败.\n        /// </summary>\n        public static string CreateGameEntryFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CreateGameEntryFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 创建时间.\n        /// </summary>\n        public static string CreateTime\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CreateTime\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 当前系统不支持自动更新\n        ///可前往 设置-下载 关闭自动更新\n        ///可手动下载最新版本并替换程序文件.\n        /// </summary>\n        public static string CurrectSystemNoSupportAutoUpdateTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CurrectSystemNoSupportAutoUpdateTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 当前列表为空.\n        /// </summary>\n        public static string CurrentListIsEmpty\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CurrentListIsEmpty\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 当前是最新版本.\n        /// </summary>\n        public static string CurrentlyTheLatestVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CurrentlyTheLatestVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 当前版本不支持此操作.\n        /// </summary>\n        public static string CurrentVersionUnsupportOperation\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CurrentVersionUnsupportOperation\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自定义.\n        /// </summary>\n        public static string Custom\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Custom\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自定义背景.\n        /// </summary>\n        public static string CustomBackground\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CustomBackground\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自定义背景图.\n        /// </summary>\n        public static string CustomBackGroundImg\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CustomBackGroundImg\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自定义下载.\n        /// </summary>\n        public static string CustomDownload\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CustomDownload\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自定义主页面.\n        /// </summary>\n        public static string CustomHomePage\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CustomHomePage\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自定义主页面源代码错误.\n        /// </summary>\n        public static string CustomHomePageSourceCodeError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CustomHomePageSourceCodeError\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 预设-Java新闻.\n        /// </summary>\n        public static string CustomHomePageWay_Presetting_JavaNews\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CustomHomePageWay_Presetting_JavaNews\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 自定义更新Url.\n        /// </summary>\n        public static string CustomUpdateUrl\n        {\n            get\n            {\n                return ResourceManager.GetString(\"CustomUpdateUrl\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 深色.\n        /// </summary>\n        public static string Dark\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Dark\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 数据包.\n        /// </summary>\n        public static string DataPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DataPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 数据包数量.\n        /// </summary>\n        public static string DataPackCount\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DataPackCount\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 默认.\n        /// </summary>\n        public static string Default\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Default\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 删除.\n        /// </summary>\n        public static string Delete\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Delete\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 删除选中项.\n        /// </summary>\n        public static string DeleteSelect\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DeleteSelect\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 删除选中项.\n        /// </summary>\n        public static string DelSelectedItem\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DelSelectedItem\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 依赖项.\n        /// </summary>\n        public static string DependencyItems\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DependencyItems\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 描述.\n        /// </summary>\n        public static string Description\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Description\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 全不选.\n        /// </summary>\n        public static string DeselectAll\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DeselectAll\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 桌面歌词对齐.\n        /// </summary>\n        public static string DeskLyricAlignment\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DeskLyricAlignment\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 桌面歌词颜色.\n        /// </summary>\n        public static string DeskLyricColor\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DeskLyricColor\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 桌面歌词大小.\n        /// </summary>\n        public static string DeskLyricSize\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DeskLyricSize\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 销毁.\n        /// </summary>\n        public static string Destroy\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Destroy\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 详细信息.\n        /// </summary>\n        public static string DetailedInfo\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DetailedInfo\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 禁用所有.\n        /// </summary>\n        public static string DisableAll\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DisableAll\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 禁用选中项.\n        /// </summary>\n        public static string DisableSelect\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DisableSelect\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 显示独立任务窗口.\n        /// </summary>\n        public static string DisplayIndependentTaskWindow\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DisplayIndependentTaskWindow\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 显示启动参数.\n        /// </summary>\n        public static string DisplayLaunchArguments\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DisplayLaunchArguments\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 显示名称.\n        /// </summary>\n        public static string DisplayName\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DisplayName\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载.\n        /// </summary>\n        public static string Download\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Download\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载失败.\n        /// </summary>\n        public static string DownloadFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 重新下载失败文件.\n        /// </summary>\n        public static string DownloadFailedFileAgain\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadFailedFileAgain\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载完成.\n        /// </summary>\n        public static string DownloadFinish\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadFinish\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载整合包模组.\n        /// </summary>\n        public static string DownloadModPackMod\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadModPackMod\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载资源.\n        /// </summary>\n        public static string DownloadResource\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadResource\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载源.\n        /// </summary>\n        public static string DownloadSource\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadSource\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载成功.\n        /// </summary>\n        public static string DownloadSuccess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadSuccess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载线程过大可能导致设备卡顿.\n        /// </summary>\n        public static string DownloadThreadTooBigTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadThreadTooBigTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载链接.\n        /// </summary>\n        public static string DownloadUrl\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadUrl\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 下载链接解析失败.\n        /// </summary>\n        public static string DownloadUrlParserFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"DownloadUrlParserFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 编辑.\n        /// </summary>\n        public static string Edit\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Edit\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 邮箱地址.\n        /// </summary>\n        public static string EmailAddress\n        {\n            get\n            {\n                return ResourceManager.GetString(\"EmailAddress\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启用所有.\n        /// </summary>\n        public static string EnableAll\n        {\n            get\n            {\n                return ResourceManager.GetString(\"EnableAll\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启用自动分配内存.\n        /// </summary>\n        public static string EnableAutoAllocateMem\n        {\n            get\n            {\n                return ResourceManager.GetString(\"EnableAutoAllocateMem\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启用独立核心.\n        /// </summary>\n        public static string EnableIndependencyCore\n        {\n            get\n            {\n                return ResourceManager.GetString(\"EnableIndependencyCore\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启用独立窗口通知.\n        /// </summary>\n        public static string EnableIndependencyWindowNotification\n        {\n            get\n            {\n                return ResourceManager.GetString(\"EnableIndependencyWindowNotification\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启用选中项.\n        /// </summary>\n        public static string EnableSelect\n        {\n            get\n            {\n                return ResourceManager.GetString(\"EnableSelect\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启用半透明特殊控件列表.\n        /// </summary>\n        public static string EnableTranslucentSpecialControlList\n        {\n            get\n            {\n                return ResourceManager.GetString(\"EnableTranslucentSpecialControlList\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 错误.\n        /// </summary>\n        public static string Error\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Error\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 调用Api时出错.\n        /// </summary>\n        public static string ErrorCallingApi\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ErrorCallingApi\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 示例通知.\n        /// </summary>\n        public static string ExampleNotification\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExampleNotification\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 账户数据(不含微软帐户).\n        /// </summary>\n        public static string ExchangeSetting_Account\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExchangeSetting_Account\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动设置.\n        /// </summary>\n        public static string ExchangeSetting_Launch\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExchangeSetting_Launch\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 网络设置.\n        /// </summary>\n        public static string ExchangeSetting_Net\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExchangeSetting_Net\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 其他设置.\n        /// </summary>\n        public static string ExchangeSetting_Other\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExchangeSetting_Other\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 界面设置.\n        /// </summary>\n        public static string ExchangeSetting_Ui\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExchangeSetting_Ui\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 现存账户.\n        /// </summary>\n        public static string ExistAccount\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExistAccount\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 现有的.\n        /// </summary>\n        public static string ExistingNow\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExistingNow\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 退出应用.\n        /// </summary>\n        public static string ExitApp\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExitApp\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导出.\n        /// </summary>\n        public static string Export\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Export\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导出日志文件.\n        /// </summary>\n        public static string ExportLogFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExportLogFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导出成功，数据量过大无法显示，点击复制以复制所有数据.\n        /// </summary>\n        public static string ExportSettingSuccessTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExportSettingSuccessTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择需要导出的设置项.\n        /// </summary>\n        public static string ExportSettingTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExportSettingTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导出成功.\n        /// </summary>\n        public static string ExportSuccess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ExportSuccess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 快捷启动.\n        /// </summary>\n        public static string FastLaunch\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FastLaunch\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 收藏.\n        /// </summary>\n        public static string Favourite\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Favourite\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 收藏夹.\n        /// </summary>\n        public static string Favourites\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Favourites\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已收藏.\n        /// </summary>\n        public static string Favourted\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Favourted\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 文件冲突，目标文件夹已存在相同名称文件，希望如何处理复制操作？.\n        /// </summary>\n        public static string FileConflictTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FileConflictTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 文件不存在.\n        /// </summary>\n        public static string FileNotExist\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FileNotExist\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 文件选择窗口.\n        /// </summary>\n        public static string FileSelectWindow\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FileSelectWindow\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已完成.\n        /// </summary>\n        public static string Finished\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Finished\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 解压整合包完成.\n        /// </summary>\n        public static string FinsihUnzipModPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FinsihUnzipModPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 在加载数据时遇到异常，这可能是由于数据发生损坏导致的。是否重置YMCL数据以解决此问题？.\n        /// </summary>\n        public static string FixLoadDataFailTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FixLoadDataFailTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 文件夹已存在.\n        /// </summary>\n        public static string FolderAlreadyExists\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FolderAlreadyExists\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 文件夹不存在.\n        /// </summary>\n        public static string FolderNotExist\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FolderNotExist\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 跟随系统.\n        /// </summary>\n        public static string FollowSystem\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FollowSystem\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 发现新版本.\n        /// </summary>\n        public static string FoundNewVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"FoundNewVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 游戏已退出.\n        /// </summary>\n        public static string GameExited\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GameExited\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 游戏主要文件缺失.\n        /// </summary>\n        public static string GameMainFileDeletion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GameMainFileDeletion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 游戏类型.\n        /// </summary>\n        public static string GameType\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GameType\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 更新日志.\n        /// </summary>\n        public static string GameUpdateLog\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GameUpdateLog\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 游戏版本.\n        /// </summary>\n        public static string GameVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GameVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 发生异常.\n        /// </summary>\n        public static string GetException\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GetException\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 获取失败.\n        /// </summary>\n        public static string GetFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GetFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 获取可安装列表失败.\n        /// </summary>\n        public static string GetInstallableVersionFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GetInstallableVersionFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 获取Java信息失败\n        ///可能此Java不正确/已损坏/无执行权限.\n        /// </summary>\n        public static string GetJavaInfoFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GetJavaInfoFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 获取整合包信息.\n        /// </summary>\n        public static string GetModPackInfo\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GetModPackInfo\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 获取更新统一资源定位器.\n        /// </summary>\n        public static string GetUpdateUrl\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GetUpdateUrl\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to YMCL 以 GPL 3.0 License 协议开放源代码，可以修改且分发，但软件必须包含原始代码的版权声明和许可声明，以及一个包含许可信息的通知文件。.\n        /// </summary>\n        public static string GPL3Text\n        {\n            get\n            {\n                return ResourceManager.GetString(\"GPL3Text\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 主页.\n        /// </summary>\n        public static string Home\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Home\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 希望如何处理此文件.\n        /// </summary>\n        public static string HopeHowToHandleTheFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"HopeHowToHandleTheFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 热门资源.\n        /// </summary>\n        public static string HotResource\n        {\n            get\n            {\n                return ResourceManager.GetString(\"HotResource\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 图标.\n        /// </summary>\n        public static string Icon\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Icon\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 如未安装基岩版则无法启动.\n        /// </summary>\n        public static string IfInstallBedRock\n        {\n            get\n            {\n                return ResourceManager.GetString(\"IfInstallBedRock\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 我知道了.\n        /// </summary>\n        public static string IKnow\n        {\n            get\n            {\n                return ResourceManager.GetString(\"IKnow\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导入.\n        /// </summary>\n        public static string Import\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Import\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导入失败.\n        /// </summary>\n        public static string ImportFailed\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ImportFailed\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导入完成.\n        /// </summary>\n        public static string ImportFinish\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ImportFinish\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导入整合包.\n        /// </summary>\n        public static string ImportModPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ImportModPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导入/导出设置.\n        /// </summary>\n        public static string ImportOrExportSetting\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ImportOrExportSetting\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 输入hex数据.\n        /// </summary>\n        public static string ImportSettingTextBoxWatermark\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ImportSettingTextBoxWatermark\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导入成功.\n        /// </summary>\n        public static string ImportSuccess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ImportSuccess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 导入时间.\n        /// </summary>\n        public static string ImportTime\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ImportTime\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 包含特殊字符.\n        /// </summary>\n        public static string IncludeSpecialWord\n        {\n            get\n            {\n                return ResourceManager.GetString(\"IncludeSpecialWord\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 初始化音频库失败.\n        /// </summary>\n        public static string InitAudioLibraryFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InitAudioLibraryFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 输入账户名称.\n        /// </summary>\n        public static string InputAccountName\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InputAccountName\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 输入文件路径.\n        /// </summary>\n        public static string InputFilePath\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InputFilePath\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 输入文件夹路径.\n        /// </summary>\n        public static string InputFolderPath\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InputFolderPath\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 输入皮肤文件路径.\n        /// </summary>\n        public static string InputSkinFilePath\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InputSkinFilePath\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 安装.\n        /// </summary>\n        public static string Install\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Install\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 安装失败.\n        /// </summary>\n        public static string InstallFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InstallFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 安装完成.\n        /// </summary>\n        public static string InstallFinish\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InstallFinish\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 安装整合包.\n        /// </summary>\n        public static string InstallModPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InstallModPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 安装预览.\n        /// </summary>\n        public static string InstallPreview\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InstallPreview\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 将以下文件作为整合包(CurseForge格式)安装.\n        /// </summary>\n        public static string InstallTheFollowingFilesAsAnIntegrationPackageCurseforgeFormat\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InstallTheFollowingFilesAsAnIntegrationPackageCurseforgeFormat\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 安装版本.\n        /// </summary>\n        public static string InstallVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InstallVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 尝试执行: \n        ///\n        ///sudo apt install libvlc-dev\n        ///sudo apt install vlc.\n        /// </summary>\n        public static string InstallVlcTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"InstallVlcTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Java运行时.\n        /// </summary>\n        public static string JavaRuntime\n        {\n            get\n            {\n                return ResourceManager.GetString(\"JavaRuntime\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Java运行时错误.\n        /// </summary>\n        public static string JavaRuntimeError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"JavaRuntimeError\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动游戏至少需要一个Java运行时。.\n        /// </summary>\n        public static string JavaRuntimeTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"JavaRuntimeTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 跳转搜索.\n        /// </summary>\n        public static string JumpSearch\n        {\n            get\n            {\n                return ResourceManager.GetString(\"JumpSearch\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 将会跳转到 {target} 搜索此关键词.\n        /// </summary>\n        public static string JumpToSearchTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"JumpToSearchTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 结束进程.\n        /// </summary>\n        public static string KillProcess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"KillProcess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 语言.\n        /// </summary>\n        public static string Language\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Language\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 在开始设置 Yu Minecraft Launcher 前，需要选择语言。.\n        /// </summary>\n        public static string LanguageTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LanguageTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 最后修改时间.\n        /// </summary>\n        public static string LastModifiedTime\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LastModifiedTime\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 最后游玩时间.\n        /// </summary>\n        public static string LastPlayTime\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LastPlayTime\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 最新版本.\n        /// </summary>\n        public static string LatestVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LatestVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动.\n        /// </summary>\n        public static string Launch\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Launch\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动参数.\n        /// </summary>\n        public static string LaunchArguments\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LaunchArguments\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动核心.\n        /// </summary>\n        public static string LaunchCore\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LaunchCore\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动器.\n        /// </summary>\n        public static string Launcher\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Launcher\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动器样式.\n        /// </summary>\n        public static string LauncherStyle\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LauncherStyle\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动器可见性.\n        /// </summary>\n        public static string LauncherVisibility\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LauncherVisibility\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动失败.\n        /// </summary>\n        public static string LaunchFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LaunchFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动完成.\n        /// </summary>\n        public static string LaunchFinish\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LaunchFinish\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动游戏.\n        /// </summary>\n        public static string LaunchGame\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LaunchGame\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动 Minecraft 进程.\n        /// </summary>\n        public static string LaunchMinecraftProcess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LaunchMinecraftProcess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 启动进度.\n        /// </summary>\n        public static string LaunchProgress\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LaunchProgress\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 让YMCL选择合适的Java.\n        /// </summary>\n        public static string LetYMCLChooseJava\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LetYMCLChooseJava\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 浅色.\n        /// </summary>\n        public static string Light\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Light\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 加载音频文件失败.\n        /// </summary>\n        public static string LoadAudioFileFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LoadAudioFileFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 从图像文件加载背景图失败 , 检查图片格式是否正确.\n        /// </summary>\n        public static string LoadBackGroudFromPicFailTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LoadBackGroudFromPicFailTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 加载失败.\n        /// </summary>\n        public static string LoadFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LoadFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 加载中....\n        /// </summary>\n        public static string Loading\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Loading\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 加载更多.\n        /// </summary>\n        public static string LoadMore\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LoadMore\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 加载插件错误.\n        /// </summary>\n        public static string LoadPluginError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LoadPluginError\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 本地资源.\n        /// </summary>\n        public static string LocalResource\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LocalResource\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 本地源代码.\n        /// </summary>\n        public static string LocalSourceCode\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LocalSourceCode\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 定位.\n        /// </summary>\n        public static string Locate\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Locate\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 登录失败.\n        /// </summary>\n        public static string LoginFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LoginFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 登录成功.\n        /// </summary>\n        public static string LoginSucess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LoginSucess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 今天的运气可能不太好，但别灰心，明天会更好！/n今天的运气有点差呢。/n今天的运气一般般。/n今天的运气还行。/n今天的运气不错呢！/n今天的运气非常好！/n今天的运气简直爆棚！/n.\n        /// </summary>\n        public static string LuckyValueTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LuckyValueTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 我是歌词 ヾ(≧▽≦*)o.\n        /// </summary>\n        public static string LyricTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"LyricTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 发现新版本 : {version}\n        ///MacOs 不支持自动更新\n        ///前往以下链接下载新版本 :  “{url}”\n        ///前往 设置-下载-自动更新 可关闭自动检查更新.\n        /// </summary>\n        public static string MacOsUpdateTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MacOsUpdateTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 手动添加.\n        /// </summary>\n        public static string ManualAdd\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ManualAdd\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 手动输入.\n        /// </summary>\n        public static string ManualInput\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ManualInput\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 手动打开.\n        /// </summary>\n        public static string ManualOpen\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ManualOpen\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 地图.\n        /// </summary>\n        public static string Map\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Map\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 匹配的版本.\n        /// </summary>\n        public static string MatchingVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MatchingVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 材质包.\n        /// </summary>\n        public static string MaterialPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MaterialPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 最大文件分片.\n        /// </summary>\n        public static string MaxFileFragmentation\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MaxFileFragmentation\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 最大下载线程.\n        /// </summary>\n        public static string MaximumDownloadThread\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MaximumDownloadThread\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 最大内存.\n        /// </summary>\n        public static string MaxMem\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MaxMem\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 云母.\n        /// </summary>\n        public static string Mica\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Mica\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 微软登录.\n        /// </summary>\n        public static string MicrosoftLogin\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MicrosoftLogin\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Minecraft文件夹.\n        /// </summary>\n        public static string MinecraftFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MinecraftFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 存放Minecraft数据的文件夹 (.minecraft).\n        /// </summary>\n        public static string MinecraftFolderTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MinecraftFolderTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Minecraft 版本.\n        /// </summary>\n        public static string MinecraftVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MinecraftVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Minecrat发生崩溃.\n        /// </summary>\n        public static string MineratCrashed\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MineratCrashed\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 模组.\n        /// </summary>\n        public static string Mod\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Mod\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 修改失败.\n        /// </summary>\n        public static string ModifyFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ModifyFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 修改皮肤(微软).\n        /// </summary>\n        public static string ModifyMicrosoftSkin\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ModifyMicrosoftSkin\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 修改成功.\n        /// </summary>\n        public static string ModifySuccess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ModifySuccess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 模组名称.\n        /// </summary>\n        public static string ModName\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ModName\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 整合包.\n        /// </summary>\n        public static string ModPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ModPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 整合包信息.\n        /// </summary>\n        public static string ModPackInfo\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ModPackInfo\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 模组文件夹.\n        /// </summary>\n        public static string ModsFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ModsFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 更多.\n        /// </summary>\n        public static string More\n        {\n            get\n            {\n                return ResourceManager.GetString(\"More\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 移动到回收站.\n        /// </summary>\n        public static string MoveToRecycleBin\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MoveToRecycleBin\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 音乐.\n        /// </summary>\n        public static string Music\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Music\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 音乐Api.\n        /// </summary>\n        public static string MusicApi\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MusicApi\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 音乐Api附带IP地址.\n        /// </summary>\n        public static string MusicApiWithIP\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MusicApiWithIP\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 音乐获取失败.\n        /// </summary>\n        public static string MusicGetFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MusicGetFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 音乐不可用.\n        /// </summary>\n        public static string MusicNotAvailable\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MusicNotAvailable\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 音乐播放器仅支持Windows.\n        /// </summary>\n        public static string MusicPlayerOnlySupportWindows\n        {\n            get\n            {\n                return ResourceManager.GetString(\"MusicPlayerOnlySupportWindows\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 名称.\n        /// </summary>\n        public static string Name\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Name\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 需要重启YMCL.\n        /// </summary>\n        public static string NeedRestartApp\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NeedRestartApp\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 需要手动打开终端执行以下命令.\n        /// </summary>\n        public static string NeedToManuallyOpenTheTerminalAndExecuteTheFollowingCommand\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NeedToManuallyOpenTheTerminalAndExecuteTheFollowingCommand\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 需选择&apos;.minecraft&apos;文件夹.\n        /// </summary>\n        public static string NeedToSelectMinecraftFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NeedToSelectMinecraftFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 网络错误.\n        /// </summary>\n        public static string NetWorkError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NetWorkError\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 网络源.\n        /// </summary>\n        public static string NetworkSource\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NetworkSource\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 千万别点.\n        /// </summary>\n        public static string NeverClick\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NeverClick\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 此操作可能会发生奇奇怪怪的问题，确定要继续吗？.\n        /// </summary>\n        public static string NeverClickTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NeverClickTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无附加安装.\n        /// </summary>\n        public static string NoAdditionalInstall\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoAdditionalInstall\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无可用项目.\n        /// </summary>\n        public static string NoAvailableItem\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoAvailableItem\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 未选择游戏.\n        /// </summary>\n        public static string NoChooseGame\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoChooseGame\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 未选择游戏或无法找到游戏.\n        /// </summary>\n        public static string NoChooseGameOrCannotFindGame\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoChooseGameOrCannotFindGame\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无崩溃信息.\n        /// </summary>\n        public static string NoCrashInfo\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoCrashInfo\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无描述信息.\n        /// </summary>\n        public static string NoDescription\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoDescription\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 暂无已识别插件.\n        /// </summary>\n        public static string NoIdentifiedPlugins\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoIdentifiedPlugins\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无匹配结果.\n        /// </summary>\n        public static string NoMatchResult\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoMatchResult\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 忽略错误 , 强制继续运行.\n        /// </summary>\n        public static string NoMatterErrorAndKeepOnRun\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoMatterErrorAndKeepOnRun\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 现不支持.\n        /// </summary>\n        public static string NoSupportNow\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoSupportNow\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 通知方式.\n        /// </summary>\n        public static string NoticeWay\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoticeWay\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 通知气泡.\n        /// </summary>\n        public static string NotificationBubble\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NotificationBubble\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 通知卡片.\n        /// </summary>\n        public static string NotificationCard\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NotificationCard\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 暂无运行中任务.\n        /// </summary>\n        public static string NoWorkingTask\n        {\n            get\n            {\n                return ResourceManager.GetString(\"NoWorkingTask\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 关闭.\n        /// </summary>\n        public static string Off\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Off\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 离线登录.\n        /// </summary>\n        public static string OfflineLogin\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OfflineLogin\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 确定.\n        /// </summary>\n        public static string Ok\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Ok\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 远古版本.\n        /// </summary>\n        public static string OldVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OldVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 开启.\n        /// </summary>\n        public static string On\n        {\n            get\n            {\n                return ResourceManager.GetString(\"On\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 一言.\n        /// </summary>\n        public static string OneSentence\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OneSentence\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 仅支持 Windows 10 以上系统.\n        /// </summary>\n        public static string OnlySupportsWindows10AndAboveSystems\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OnlySupportsWindows10AndAboveSystems\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 打开浏览器.\n        /// </summary>\n        public static string OpenBrowser\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OpenBrowser\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 打开文件.\n        /// </summary>\n        public static string OpenFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OpenFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 打开文件方式.\n        /// </summary>\n        public static string OpenFileWay\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OpenFileWay\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 打开文件夹.\n        /// </summary>\n        public static string OpenFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OpenFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 开源项目使用表.\n        /// </summary>\n        public static string OpenSourceProjectUsageTable\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OpenSourceProjectUsageTable\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 操作失败.\n        /// </summary>\n        public static string OperateFailed\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OperateFailed\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 操作成功.\n        /// </summary>\n        public static string OperateSuccess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OperateSuccess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 覆盖整合包.\n        /// </summary>\n        public static string OverrideModPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"OverrideModPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 概览.\n        /// </summary>\n        public static string Overview\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Overview\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已暂停.\n        /// </summary>\n        public static string Paused\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Paused\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 个性化.\n        /// </summary>\n        public static string Personalize\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Personalize\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 玩家数量.\n        /// </summary>\n        public static string PlayerCount\n        {\n            get\n            {\n                return ResourceManager.GetString(\"PlayerCount\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 播放列表.\n        /// </summary>\n        public static string PlayList\n        {\n            get\n            {\n                return ResourceManager.GetString(\"PlayList\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 插件.\n        /// </summary>\n        public static string Plugin\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Plugin\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 准备.\n        /// </summary>\n        public static string Prepare\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Prepare\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 准备安装.\n        /// </summary>\n        public static string PrepareInstall\n        {\n            get\n            {\n                return ResourceManager.GetString(\"PrepareInstall\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 预览版本.\n        /// </summary>\n        public static string PreviewVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"PreviewVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 项目信息.\n        /// </summary>\n        public static string ProjectInfo\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ProjectInfo\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 读取剪贴板.\n        /// </summary>\n        public static string ReadClipBoard\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ReadClipBoard\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 刷新.\n        /// </summary>\n        public static string Refresh\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Refresh\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 刷新用户令牌.\n        /// </summary>\n        public static string RefreshAccountToken\n        {\n            get\n            {\n                return ResourceManager.GetString(\"RefreshAccountToken\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 刷新皮肤.\n        /// </summary>\n        public static string RefreshMicrosoftSkin\n        {\n            get\n            {\n                return ResourceManager.GetString(\"RefreshMicrosoftSkin\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 释放鼠标让YMCL处理此文件.\n        /// </summary>\n        public static string ReleaseTheMouseAndLetYmclProcessThisFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ReleaseTheMouseAndLetYmclProcessThisFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 正式版本.\n        /// </summary>\n        public static string ReleaseVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ReleaseVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 重新加载.\n        /// </summary>\n        public static string Reload\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Reload\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 移除.\n        /// </summary>\n        public static string Remove\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Remove\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 重命名.\n        /// </summary>\n        public static string Rename\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Rename\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 重复的项目.\n        /// </summary>\n        public static string RepeatItem\n        {\n            get\n            {\n                return ResourceManager.GetString(\"RepeatItem\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 重置数据.\n        /// </summary>\n        public static string ResetData\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ResetData\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 资源包.\n        /// </summary>\n        public static string ResourcePacks\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ResourcePacks\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 资源包文件夹.\n        /// </summary>\n        public static string ResourcePacksFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ResourcePacksFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 重启应用.\n        /// </summary>\n        public static string RestartApp\n        {\n            get\n            {\n                return ResourceManager.GetString(\"RestartApp\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 返回.\n        /// </summary>\n        public static string Return\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Return\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to ← 返回.\n        /// </summary>\n        public static string ReturnWithIcon\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ReturnWithIcon\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 运行.\n        /// </summary>\n        public static string Run\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Run\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 运行激活.\n        /// </summary>\n        public static string RunActivate\n        {\n            get\n            {\n                return ResourceManager.GetString(\"RunActivate\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 运行命令失败.\n        /// </summary>\n        public static string RunCommandFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"RunCommandFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 运行中.\n        /// </summary>\n        public static string Running\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Running\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 另存为.\n        /// </summary>\n        public static string SaveAs\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SaveAs\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 保存音频文件.\n        /// </summary>\n        public static string SaveAudioFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SaveAudioFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 保存文件.\n        /// </summary>\n        public static string SaveFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SaveFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 保存完成.\n        /// </summary>\n        public static string SaveFinish\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SaveFinish\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 存档信息.\n        /// </summary>\n        public static string SaveInfo\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SaveInfo\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 存档.\n        /// </summary>\n        public static string Saves\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Saves\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 存档文件夹.\n        /// </summary>\n        public static string SavesFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SavesFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 保存皮肤文件.\n        /// </summary>\n        public static string SaveSkinFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SaveSkinFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 存档名称.\n        /// </summary>\n        public static string SavesName\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SavesName\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 扫描Java成功.\n        /// </summary>\n        public static string ScanJavaSuccess\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ScanJavaSuccess\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 截图.\n        /// </summary>\n        public static string Screenshots\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Screenshots\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 截图文件夹.\n        /// </summary>\n        public static string ScreenshotsFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ScreenshotsFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 搜索.\n        /// </summary>\n        public static string Search\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Search\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 在 {target} 中搜索.\n        /// </summary>\n        public static string SearchInTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SearchInTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 搜索关键词....\n        /// </summary>\n        public static string SearchKeyword\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SearchKeyword\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 搜索无结果.\n        /// </summary>\n        public static string SearchNoResult\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SearchNoResult\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 种子.\n        /// </summary>\n        public static string Seed\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Seed\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择账户类型.\n        /// </summary>\n        public static string SelectAccountType\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SelectAccountType\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 全选.\n        /// </summary>\n        public static string SelectAll\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SelectAll\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已选择项目: .\n        /// </summary>\n        public static string SelectedItem\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SelectedItem\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择图像文件.\n        /// </summary>\n        public static string SelectImgFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SelectImgFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择Java.\n        /// </summary>\n        public static string SelectJava\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SelectJava\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择&apos;.minecraft&apos;文件夹.\n        /// </summary>\n        public static string SelectMinecraftFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SelectMinecraftFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择音频文件.\n        /// </summary>\n        public static string SelectMusicFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SelectMusicFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 选择皮肤文件.\n        /// </summary>\n        public static string SelectSkinFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SelectSkinFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 服务器包.\n        /// </summary>\n        public static string ServerPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ServerPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 服务器Url错误.\n        /// </summary>\n        public static string ServerUrlError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ServerUrlError\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 此操作将会同时关闭自动进入存档.\n        /// </summary>\n        public static string SetAutoJoinServerTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SetAutoJoinServerTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 此操作将会同时关闭自动进入服务器.\n        /// </summary>\n        public static string SetAutoJoinWorldTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SetAutoJoinWorldTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 设置图标.\n        /// </summary>\n        public static string SetIcon\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SetIcon\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 设置服务器.\n        /// </summary>\n        public static string SetServer\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SetServer\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 设置.\n        /// </summary>\n        public static string Setting\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Setting\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 设置存档.\n        /// </summary>\n        public static string SetWorld\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SetWorld\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 光影包.\n        /// </summary>\n        public static string ShaderPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ShaderPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 光影包文件夹.\n        /// </summary>\n        public static string ShaderPacksFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ShaderPacksFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 显示游戏输出.\n        /// </summary>\n        public static string ShowGameOutput\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ShowGameOutput\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 皮肤模型.\n        /// </summary>\n        public static string SkinModel\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SkinModel\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 跳过此版本.\n        /// </summary>\n        public static string SkipThisVersion\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SkipThisVersion\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已跳过版本 : {version}\n        ///前往 设置-启动器-检查更新 可再次获取此版本.\n        /// </summary>\n        public static string SkipVersionTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SkipVersionTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 赞助.\n        /// </summary>\n        public static string Sponsor\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Sponsor\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 赞助者.\n        /// </summary>\n        public static string Sponsors\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Sponsors\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 以下是发电的赞助者，感谢对 Yu Minecraft Launcher 的支持 ！.\n        /// </summary>\n        public static string SponsorsTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SponsorsTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 添加成功.\n        /// </summary>\n        public static string SuccessAdd\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SuccessAdd\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 移除成功.\n        /// </summary>\n        public static string SuccessRemove\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SuccessRemove\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 确定导入此文件.\n        /// </summary>\n        public static string SureToImportTheFile\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SureToImportTheFile\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 确定要安装 Java : {Java}？.\n        /// </summary>\n        public static string SureToInstallTheJava\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SureToInstallTheJava\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已切换到.\n        /// </summary>\n        public static string SwitchedTo\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SwitchedTo\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 系统样式.\n        /// </summary>\n        public static string SystemStyle\n        {\n            get\n            {\n                return ResourceManager.GetString(\"SystemStyle\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 任务.\n        /// </summary>\n        public static string Task\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Task\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 任务中心.\n        /// </summary>\n        public static string TaskCenter\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TaskCenter\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已存在此项目.\n        /// </summary>\n        public static string TheItemAlreadyExist\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TheItemAlreadyExist\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Java不正确.\n        /// </summary>\n        public static string TheJavaIsError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TheJavaIsError\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 主题色.\n        /// </summary>\n        public static string ThemeColor\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ThemeColor\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 版本名称将被重命名为: .\n        /// </summary>\n        public static string TheVersionNameWillBeRenamedTo\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TheVersionNameWillBeRenamedTo\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 第三方登录.\n        /// </summary>\n        public static string ThirdPartyLogin\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ThirdPartyLogin\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 此平台不支持自动更新，打开以下路径手动替换.\n        /// </summary>\n        public static string ThisArchitectureCannotAutoUpdate\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ThisArchitectureCannotAutoUpdate\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 此功能正在开发中.\n        /// </summary>\n        public static string ThisFeatureIsCurrentlyUnderDevelopment\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ThisFeatureIsCurrentlyUnderDevelopment\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 该功能仅支持Windows10以上，低于此版本系统不保证激活成功.\n        /// </summary>\n        public static string ThisFeatureOnlySupportsWindows10AndAbove\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ThisFeatureOnlySupportsWindows10AndAbove\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 该功能仅支持Windows平台.\n        /// </summary>\n        public static string ThisFeatureOnlySupportsWindowsPlatform\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ThisFeatureOnlySupportsWindowsPlatform\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 提示.\n        /// </summary>\n        public static string Tip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Tip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 今日人品.\n        /// </summary>\n        public static string TodayLuckyValue\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TodayLuckyValue\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 今日的人品值是 : {value} !.\n        /// </summary>\n        public static string TodayLuckyValueTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TodayLuckyValueTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 切换导航.\n        /// </summary>\n        public static string ToggleNav\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ToggleNav\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 模组总数量.\n        /// </summary>\n        public static string TotalNumberOfMod\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TotalNumberOfMod\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 半透明背景控件不透明度.\n        /// </summary>\n        public static string TranslucentBackgroundOpacity\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TranslucentBackgroundOpacity\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 透明.\n        /// </summary>\n        public static string Transparent\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Transparent\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 百宝箱.\n        /// </summary>\n        public static string TreasureBox\n        {\n            get\n            {\n                return ResourceManager.GetString(\"TreasureBox\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法为基岩版添加模组.\n        /// </summary>\n        public static string UnableToAddModsForBedrockEdition\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UnableToAddModsForBedrockEdition\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Yu Minecraft Launcher 遇到了没有处理的异常 , 可能无法继续运行 , 下方为异常的详细信息.\n        /// </summary>\n        public static string UnhandledErrorTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UnhandledErrorTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 未处理的异常.\n        /// </summary>\n        public static string UnhandledException\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UnhandledException\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 未知.\n        /// </summary>\n        public static string Unknown\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Unknown\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 当前版本为非官方版本，可能遭受病毒攻击。\n        ///重定向至 https://ymcl.yik.at/ 下载官方版本。.\n        /// </summary>\n        public static string UnofficialTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UnofficialTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 无法识别.\n        /// </summary>\n        public static string Unrecognized\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Unrecognized\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 不支持的文件类型.\n        /// </summary>\n        public static string UnsupportedFileType\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UnsupportedFileType\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 解压.\n        /// </summary>\n        public static string Unzip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Unzip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 正在解压整合包.\n        /// </summary>\n        public static string UnzipingModPack\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UnzipingModPack\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 更新.\n        /// </summary>\n        public static string Update\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Update\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 更新失败.\n        /// </summary>\n        public static string UpdateFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UpdateFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 提升至管理员权限.\n        /// </summary>\n        public static string UpgradeToAdministratorPrivileges\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UpgradeToAdministratorPrivileges\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 提升至管理员权限失败.\n        /// </summary>\n        public static string UpgradeToAdministratorPrivilegesFail\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UpgradeToAdministratorPrivilegesFail\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 执行操作需要提升至管理员权限，点击确定以管理员权限重启程序.\n        /// </summary>\n        public static string UpgradeToAdministratorPrivilegesTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UpgradeToAdministratorPrivilegesTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 已用内存.\n        /// </summary>\n        public static string UsedMem\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UsedMem\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 使用全局设置.\n        /// </summary>\n        public static string UseGlobalSetting\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UseGlobalSetting\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 用户数据文件夹.\n        /// </summary>\n        public static string UserDataFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"UserDataFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 验证代码.\n        /// </summary>\n        public static string VerificationCode\n        {\n            get\n            {\n                return ResourceManager.GetString(\"VerificationCode\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 验证服务器.\n        /// </summary>\n        public static string VerificationServer\n        {\n            get\n            {\n                return ResourceManager.GetString(\"VerificationServer\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 正在验证账户.\n        /// </summary>\n        public static string VerifyingAccount\n        {\n            get\n            {\n                return ResourceManager.GetString(\"VerifyingAccount\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 版本.\n        /// </summary>\n        public static string Version\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Version\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 版本文件夹.\n        /// </summary>\n        public static string VersionFolder\n        {\n            get\n            {\n                return ResourceManager.GetString(\"VersionFolder\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 版本 Id 不可为空.\n        /// </summary>\n        public static string VersionIdCannotBeEmpty\n        {\n            get\n            {\n                return ResourceManager.GetString(\"VersionIdCannotBeEmpty\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 版本列表.\n        /// </summary>\n        public static string VersionList\n        {\n            get\n            {\n                return ResourceManager.GetString(\"VersionList\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 版本设置.\n        /// </summary>\n        public static string VersionSetting\n        {\n            get\n            {\n                return ResourceManager.GetString(\"VersionSetting\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 查看更新内容.\n        /// </summary>\n        public static string ViewUpdatedContent\n        {\n            get\n            {\n                return ResourceManager.GetString(\"ViewUpdatedContent\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 等待游戏窗口出现.\n        /// </summary>\n        public static string WaitForGameWindowAppear\n        {\n            get\n            {\n                return ResourceManager.GetString(\"WaitForGameWindowAppear\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 正在等待微软账户验证完成\n        ///跳转至浏览器完成验证.\n        /// </summary>\n        public static string WaitForMicrosoftVerification\n        {\n            get\n            {\n                return ResourceManager.GetString(\"WaitForMicrosoftVerification\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 等待中.\n        /// </summary>\n        public static string Waiting\n        {\n            get\n            {\n                return ResourceManager.GetString(\"Waiting\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 窗口标题栏样式.\n        /// </summary>\n        public static string WindowTitleBarStyle\n        {\n            get\n            {\n                return ResourceManager.GetString(\"WindowTitleBarStyle\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 设置启动器窗口标题栏的样式，在特定情况启动器样式不受支持。.\n        /// </summary>\n        public static string WindowTitleBarStyleTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"WindowTitleBarStyleTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 发现新版本 : {version}\n        ///win10 以下系统(不包括10)不支持自动更新\n        ///前往以下链接下载新版本 :  “{url}”\n        ///前往 设置-下载-自动更新 可关闭自动检查更新.\n        /// </summary>\n        public static string WinSevenAutoUpdateTip\n        {\n            get\n            {\n                return ResourceManager.GetString(\"WinSevenAutoUpdateTip\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 写入.\n        /// </summary>\n        public static string WriteIn\n        {\n            get\n            {\n                return ResourceManager.GetString(\"WriteIn\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 邮箱不可为空.\n        /// </summary>\n        public static string YggdrasilEmailIsEmpty\n        {\n            get\n            {\n                return ResourceManager.GetString(\"YggdrasilEmailIsEmpty\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 密码不可为空.\n        /// </summary>\n        public static string YggdrasilPasswordIsEmpty\n        {\n            get\n            {\n                return ResourceManager.GetString(\"YggdrasilPasswordIsEmpty\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to 验证服务器不可为空.\n        /// </summary>\n        public static string YggdrasilServerUrlIsEmpty\n        {\n            get\n            {\n                return ResourceManager.GetString(\"YggdrasilServerUrlIsEmpty\", resourceCulture);\n            }\n        }\n\n        /// <summary>\n        ///   Looks up a localized string similar to Yu Minecraft Launcher 发生未处理异常.\n        /// </summary>\n        public static string YMCLHappenError\n        {\n            get\n            {\n                return ResourceManager.GetString(\"YMCLHappenError\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Langs/MainLang.en-US.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Launch\" xml:space=\"preserve\">\n    <value>Launch</value>\n  </data>\n  <data name=\"MinecraftFolder\" xml:space=\"preserve\">\n    <value>Minecraft Folder</value>\n  </data>\n  <data name=\"DelSelectedItem\" xml:space=\"preserve\">\n    <value>Delete Selected</value>\n  </data>\n  <data name=\"AddFolder\" xml:space=\"preserve\">\n    <value>Add Folder</value>\n  </data>\n  <data name=\"SelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>Select the '.minecraft' folder</value>\n  </data>\n  <data name=\"NeedToSelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>The '.minecraft' folder needs to be selected</value>\n  </data>\n  <data name=\"SuccessAdd\" xml:space=\"preserve\">\n    <value>Layouts Added Successfully</value>\n  </data>\n  <data name=\"TheItemAlreadyExist\" xml:space=\"preserve\">\n    <value>This item already exists</value>\n  </data>\n  <data name=\"SuccessRemove\" xml:space=\"preserve\">\n    <value>Removed successfully</value>\n  </data>\n  <data name=\"AutoScan\" xml:space=\"preserve\">\n    <value>Automatic Scan</value>\n  </data>\n  <data name=\"LetYMCLChooseJava\" xml:space=\"preserve\">\n    <value>Let YMCL choose the right Java</value>\n  </data>\n  <data name=\"ScanJavaSuccess\" xml:space=\"preserve\">\n    <value>Scanning Java succeeded</value>\n  </data>\n  <data name=\"RepeatItem\" xml:space=\"preserve\">\n    <value>Repeating event</value>\n  </data>\n  <data name=\"OpenFileWay\" xml:space=\"preserve\">\n    <value>How to open a file</value>\n  </data>\n  <data name=\"FileSelectWindow\" xml:space=\"preserve\">\n    <value>File Selection Window</value>\n  </data>\n  <data name=\"ManualInput\" xml:space=\"preserve\">\n    <value>Manual input</value>\n  </data>\n  <data name=\"Ok\" xml:space=\"preserve\">\n    <value>Confirm</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"InputFolderPath\" xml:space=\"preserve\">\n    <value>Type the folder path</value>\n  </data>\n  <data name=\"FolderNotExist\" xml:space=\"preserve\">\n    <value>Folder does not exist</value>\n  </data>\n  <data name=\"InputFilePath\" xml:space=\"preserve\">\n    <value>input file path</value>\n  </data>\n  <data name=\"FileNotExist\" xml:space=\"preserve\">\n    <value>File does not exist</value>\n  </data>\n  <data name=\"ManualAdd\" xml:space=\"preserve\">\n    <value>Added manually</value>\n  </data>\n  <data name=\"SelectJava\" xml:space=\"preserve\">\n    <value>Choose Java</value>\n  </data>\n  <data name=\"TheJavaIsError\" xml:space=\"preserve\">\n    <value>Java is incorrect</value>\n  </data>\n  <data name=\"AddNewAccount\" xml:space=\"preserve\">\n    <value>Add New Account</value>\n  </data>\n  <data name=\"OfflineLogin\" xml:space=\"preserve\">\n    <value>Log in offline</value>\n  </data>\n  <data name=\"MicrosoftLogin\" xml:space=\"preserve\">\n    <value>Microsoft Login</value>\n  </data>\n  <data name=\"ThirdPartyLogin\" xml:space=\"preserve\">\n    <value>The third party signin</value>\n  </data>\n  <data name=\"SelectAccountType\" xml:space=\"preserve\">\n    <value>Choose account type</value>\n  </data>\n  <data name=\"AccountNameCannotBeNull\" xml:space=\"preserve\">\n    <value>Account name cannot be empty</value>\n  </data>\n  <data name=\"InputAccountName\" xml:space=\"preserve\">\n    <value>Enter Account Name</value>\n  </data>\n  <data name=\"VerificationCode\" xml:space=\"preserve\">\n    <value>Verification code</value>\n  </data>\n  <data name=\"Loading\" xml:space=\"preserve\">\n    <value>Loading...</value>\n  </data>\n  <data name=\"CopyCodeAndOPenBrowser\" xml:space=\"preserve\">\n    <value>Copy the code and open your browser</value>\n  </data>\n  <data name=\"WaitForMicrosoftVerification\" xml:space=\"preserve\">\n    <value>Waiting for Microsoft account verification to complete\n      Jump to the browser to complete verification</value>\n  </data>\n  <data name=\"LoginFail\" xml:space=\"preserve\">\n    <value>Login failed</value>\n  </data>\n  <data name=\"VerifyingAccount\" xml:space=\"preserve\">\n    <value>Verifying account</value>\n  </data>\n  <data name=\"VerificationServer\" xml:space=\"preserve\">\n    <value>Validation Server</value>\n  </data>\n  <data name=\"EmailAddress\" xml:space=\"preserve\">\n    <value>Email address</value>\n  </data>\n  <data name=\"AccountPassword\" xml:space=\"preserve\">\n    <value>Account Password</value>\n  </data>\n  <data name=\"YggdrasilServerUrlIsEmpty\" xml:space=\"preserve\">\n    <value>Verification server cannot be empty</value>\n  </data>\n  <data name=\"YggdrasilPasswordIsEmpty\" xml:space=\"preserve\">\n    <value>Password cannot be empty</value>\n  </data>\n  <data name=\"YggdrasilEmailIsEmpty\" xml:space=\"preserve\">\n    <value>Email cannot be empty</value>\n  </data>\n  <data name=\"Language\" xml:space=\"preserve\">\n    <value>Language</value>\n  </data>\n  <data name=\"ColorMode\" xml:space=\"preserve\">\n    <value>Color mode</value>\n  </data>\n  <data name=\"FollowSystem\" xml:space=\"preserve\">\n    <value>Follow the system</value>\n  </data>\n  <data name=\"Light\" xml:space=\"preserve\">\n    <value>Light</value>\n  </data>\n  <data name=\"Dark\" xml:space=\"preserve\">\n    <value>Dark</value>\n  </data>\n  <data name=\"MaxMem\" xml:space=\"preserve\">\n    <value>Maximum memory</value>\n  </data>\n  <data name=\"CannotOpenBrowser\" xml:space=\"preserve\">\n    <value>Unable to open browser</value>\n  </data>\n  <data name=\"ManualOpen\" xml:space=\"preserve\">\n    <value>Hand Open</value>\n  </data>\n  <data name=\"CopyUrlAndManualOpen\" xml:space=\"preserve\">\n    <value>Ctrl + C Copy and paste the following link into your browser</value>\n  </data>\n  <data name=\"VersionList\" xml:space=\"preserve\">\n    <value>version list</value>\n  </data>\n  <data name=\"VersionSetting\" xml:space=\"preserve\">\n    <value>Version Settings</value>\n  </data>\n  <data name=\"LaunchGame\" xml:space=\"preserve\">\n    <value>Start System</value>\n  </data>\n  <data name=\"NoChooseGame\" xml:space=\"preserve\">\n    <value>No game selected</value>\n  </data>\n  <data name=\"ReturnWithIcon\" xml:space=\"preserve\">\n    <value>← Go back</value>\n  </data>\n  <data name=\"CreateGameEntryFail\" xml:space=\"preserve\">\n    <value>Failed to create game instance</value>\n  </data>\n  <data name=\"NoChooseGameOrCannotFindGame\" xml:space=\"preserve\">\n    <value>No game selected or could not be found</value>\n  </data>\n  <data name=\"AccountError\" xml:space=\"preserve\">\n    <value>Account Error</value>\n  </data>\n  <data name=\"LaunchProgress\" xml:space=\"preserve\">\n    <value>Startup</value>\n  </data>\n  <data name=\"BuildLaunchConfigFail\" xml:space=\"preserve\">\n    <value>Failed to build startup configuration</value>\n  </data>\n  <data name=\"GameExited\" xml:space=\"preserve\">\n    <value>Game exited</value>\n  </data>\n  <data name=\"WaitForGameWindowAppear\" xml:space=\"preserve\">\n    <value>Wait for the game window to appear</value>\n  </data>\n  <data name=\"LaunchFinish\" xml:space=\"preserve\">\n    <value>Startup complete</value>\n  </data>\n  <data name=\"LaunchFail\" xml:space=\"preserve\">\n    <value>Start failure</value>\n  </data>\n  <data name=\"UserDataFolder\" xml:space=\"preserve\">\n    <value>User Data Folder</value>\n  </data>\n  <data name=\"OpenFolder\" xml:space=\"preserve\">\n    <value>Open Folder</value>\n  </data>\n  <data name=\"AutoInstall\" xml:space=\"preserve\">\n    <value>Automated Installation</value>\n  </data>\n  <data name=\"LatestVersion\" xml:space=\"preserve\">\n    <value>Latest Version</value>\n  </data>\n  <data name=\"PreviewVersion\" xml:space=\"preserve\">\n    <value>Pre release version</value>\n  </data>\n  <data name=\"ReleaseVersion\" xml:space=\"preserve\">\n    <value>Release version</value>\n  </data>\n  <data name=\"GetInstallableVersionFail\" xml:space=\"preserve\">\n    <value>Failed to get installable list</value>\n  </data>\n  <data name=\"OldVersion\" xml:space=\"preserve\">\n    <value>Ancient Version</value>\n  </data>\n  <data name=\"AllVersion\" xml:space=\"preserve\">\n    <value>All Builds</value>\n  </data>\n  <data name=\"SearchKeyword\" xml:space=\"preserve\">\n    <value>Keywords Search...</value>\n  </data>\n  <data name=\"InstallPreview\" xml:space=\"preserve\">\n    <value>Install Preview</value>\n  </data>\n  <data name=\"NoAdditionalInstall\" xml:space=\"preserve\">\n    <value>No additional installation</value>\n  </data>\n  <data name=\"BeginInstall\" xml:space=\"preserve\">\n    <value>Start Install</value>\n  </data>\n  <data name=\"ViewUpdatedContent\" xml:space=\"preserve\">\n    <value>What's New</value>\n  </data>\n  <data name=\"Reload\" xml:space=\"preserve\">\n    <value>Reloading</value>\n  </data>\n  <data name=\"GetFail\" xml:space=\"preserve\">\n    <value>Access failed</value>\n  </data>\n  <data name=\"NoAvailableItem\" xml:space=\"preserve\">\n    <value>no available items</value>\n  </data>\n  <data name=\"MineratCrashed\" xml:space=\"preserve\">\n    <value>Minecrat crashed</value>\n  </data>\n  <data name=\"TheVersionNameWillBeRenamedTo\" xml:space=\"preserve\">\n    <value>Version name will be renamed to: </value>\n  </data>\n  <data name=\"IncludeSpecialWord\" xml:space=\"preserve\">\n    <value>Contains Special Characters</value>\n  </data>\n  <data name=\"FolderAlreadyExists\" xml:space=\"preserve\">\n    <value>Folder already exists</value>\n  </data>\n  <data name=\"InstallFail\" xml:space=\"preserve\">\n    <value>Installation failled</value>\n  </data>\n  <data name=\"Install\" xml:space=\"preserve\">\n    <value>Installation</value>\n  </data>\n  <data name=\"InstallFinish\" xml:space=\"preserve\">\n    <value>Installation finished</value>\n  </data>\n  <data name=\"CannotFandRightJava\" xml:space=\"preserve\">\n    <value>Couldn't find the right Java</value>\n  </data>\n  <data name=\"Refresh\" xml:space=\"preserve\">\n    <value>Refresh</value>\n  </data>\n  <data name=\"Mod\" xml:space=\"preserve\">\n    <value>Module</value>\n  </data>\n  <data name=\"Overview\" xml:space=\"preserve\">\n    <value>Overview</value>\n  </data>\n  <data name=\"Setting\" xml:space=\"preserve\">\n    <value>Settings</value>\n  </data>\n  <data name=\"SavesFolder\" xml:space=\"preserve\">\n    <value>Archive Folder</value>\n  </data>\n  <data name=\"ModsFolder\" xml:space=\"preserve\">\n    <value>Module Folder</value>\n  </data>\n  <data name=\"ResourcePacksFolder\" xml:space=\"preserve\">\n    <value>Resource Pack Folder</value>\n  </data>\n  <data name=\"ShaderPacksFolder\" xml:space=\"preserve\">\n    <value>Light Pack Folder</value>\n  </data>\n  <data name=\"VersionFolder\" xml:space=\"preserve\">\n    <value>Version Folder</value>\n  </data>\n  <data name=\"EnableIndependencyCore\" xml:space=\"preserve\">\n    <value>Enable standalone cores</value>\n  </data>\n  <data name=\"UseGlobalSetting\" xml:space=\"preserve\">\n    <value>Use Global settings</value>\n  </data>\n  <data name=\"Off\" xml:space=\"preserve\">\n    <value>Off</value>\n  </data>\n  <data name=\"On\" xml:space=\"preserve\">\n    <value>On</value>\n  </data>\n  <data name=\"AutoJoinServer\" xml:space=\"preserve\">\n    <value>Automatically join the server</value>\n  </data>\n  <data name=\"EnableSelect\" xml:space=\"preserve\">\n    <value>Enable Checked</value>\n  </data>\n  <data name=\"DisableSelect\" xml:space=\"preserve\">\n    <value>Disable Selected</value>\n  </data>\n  <data name=\"DeleteSelect\" xml:space=\"preserve\">\n    <value>Delete Selected</value>\n  </data>\n  <data name=\"SelectAll\" xml:space=\"preserve\">\n    <value>Select All</value>\n  </data>\n  <data name=\"DeselectAll\" xml:space=\"preserve\">\n    <value>Deselect all</value>\n  </data>\n  <data name=\"SelectedItem\" xml:space=\"preserve\">\n    <value>Selected items: </value>\n  </data>\n  <data name=\"MoveToRecycleBin\" xml:space=\"preserve\">\n    <value>Move to trash</value>\n  </data>\n  <data name=\"WindowTitleBarStyle\" xml:space=\"preserve\">\n    <value>Window title bar style</value>\n  </data>\n  <data name=\"GetException\" xml:space=\"preserve\">\n    <value>An exception occurs</value>\n  </data>\n  <data name=\"UnhandledException\" xml:space=\"preserve\">\n    <value>Unhandled exception</value>\n  </data>\n  <data name=\"CustomHomePage\" xml:space=\"preserve\">\n    <value>Custom Home Page</value>\n  </data>\n  <data name=\"LocalSourceCode\" xml:space=\"preserve\">\n    <value>Local source code</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"CustomHomePageSourceCodeError\" xml:space=\"preserve\">\n    <value>Custom main page source code error</value>\n  </data>\n  <data name=\"CheckUpdate\" xml:space=\"preserve\">\n    <value>Check for updates</value>\n  </data>\n  <data name=\"ChooseArchitecture\" xml:space=\"preserve\">\n    <value>Select platform</value>\n  </data>\n  <data name=\"CheckUpdateFail\" xml:space=\"preserve\">\n    <value>Unable to check for updates</value>\n  </data>\n  <data name=\"FoundNewVersion\" xml:space=\"preserve\">\n    <value>Detect a newer version</value>\n  </data>\n  <data name=\"GetUpdateUrl\" xml:space=\"preserve\">\n    <value>Get Updated Uniform Resource Locator</value>\n  </data>\n  <data name=\"BeginDownload\" xml:space=\"preserve\">\n    <value>Start Download</value>\n  </data>\n  <data name=\"UpdateFail\" xml:space=\"preserve\">\n    <value>Update Failed</value>\n  </data>\n  <data name=\"ThisArchitectureCannotAutoUpdate\" xml:space=\"preserve\">\n    <value>This platform does not support automatic updates, open the following path to manually replace it</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Updated</value>\n  </data>\n  <data name=\"DownloadFinish\" xml:space=\"preserve\">\n    <value>Download completed</value>\n  </data>\n  <data name=\"CurrentlyTheLatestVersion\" xml:space=\"preserve\">\n    <value>The current version is up to date</value>\n  </data>\n  <data name=\"OpenSourceProjectUsageTable\" xml:space=\"preserve\">\n    <value>Open Source Project Usage Sheet</value>\n  </data>\n  <data name=\"GPL3Text\" xml:space=\"preserve\">\n    <value>The YMCL is open source under the GPL 3.0 License and may be modified and distributed, but the software must contain the copyright and license notices for the original code, as well as a notification file containing the license information.</value>\n  </data>\n  <data name=\"ShowGameOutput\" xml:space=\"preserve\">\n    <value>Show Game Output</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n  <data name=\"LoadMore\" xml:space=\"preserve\">\n    <value>Load More</value>\n  </data>\n  <data name=\"ErrorCallingApi\" xml:space=\"preserve\">\n    <value>Error calling Api</value>\n  </data>\n  <data name=\"SearchNoResult\" xml:space=\"preserve\">\n    <value>No result found</value>\n  </data>\n  <data name=\"AddLocalSong\" xml:space=\"preserve\">\n    <value>Add Audio File</value>\n  </data>\n  <data name=\"SelectMusicFile\" xml:space=\"preserve\">\n    <value>Choose an Audio File</value>\n  </data>\n  <data name=\"ThemeColor\" xml:space=\"preserve\">\n    <value>Theme color</value>\n  </data>\n  <data name=\"InitAudioLibraryFail\" xml:space=\"preserve\">\n    <value>Failed to initialize audio library</value>\n  </data>\n  <data name=\"InstallVlcTip\" xml:space=\"preserve\">\n    <value>Attempt to execute:\n\n      sudo apt install libvlc-dev\n      sudo apt install vlc</value>\n  </data>\n  <data name=\"ThisFeatureIsCurrentlyUnderDevelopment\" xml:space=\"preserve\">\n    <value>This feature is in development</value>\n  </data>\n  <data name=\"TreasureBox\" xml:space=\"preserve\">\n    <value>Treasure chest</value>\n  </data>\n  <data name=\"ActivateWinOffice\" xml:space=\"preserve\">\n    <value>Activate Windows/Office</value>\n  </data>\n  <data name=\"Run\" xml:space=\"preserve\">\n    <value>Run</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindowsPlatform\" xml:space=\"preserve\">\n    <value>This feature is only available on Windows</value>\n  </data>\n  <data name=\"RunCommandFail\" xml:space=\"preserve\">\n    <value>Failed to run command</value>\n  </data>\n  <data name=\"RunActivate\" xml:space=\"preserve\">\n    <value>Run activation</value>\n  </data>\n  <data name=\"CancelActivateWin\" xml:space=\"preserve\">\n    <value>Deactivate Windows</value>\n  </data>\n  <data name=\"CancelActivateWinTip\" xml:space=\"preserve\">\n    <value>This action will remove Windows activation status, making features such as Windows personalization unavailable. Do you want to continue?</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindows10AndAbove\" xml:space=\"preserve\">\n    <value>This feature only supports Windows 10 and above, and systems below this version are not guaranteed to be activated successfully</value>\n  </data>\n  <data name=\"PlayList\" xml:space=\"preserve\">\n    <value>Playlist</value>\n  </data>\n  <data name=\"ModName\" xml:space=\"preserve\">\n    <value>Module name</value>\n  </data>\n  <data name=\"GameVersion\" xml:space=\"preserve\">\n    <value>Game version</value>\n  </data>\n  <data name=\"AnyModLoader\" xml:space=\"preserve\">\n    <value>Any loader</value>\n  </data>\n  <data name=\"AnySource\" xml:space=\"preserve\">\n    <value>All sources</value>\n  </data>\n  <data name=\"Download\" xml:space=\"preserve\">\n    <value>Download</value>\n  </data>\n  <data name=\"SaveFile\" xml:space=\"preserve\">\n    <value>Save the file</value>\n  </data>\n  <data name=\"DownloadFail\" xml:space=\"preserve\">\n    <value>Download failed</value>\n  </data>\n  <data name=\"MatchingVersion\" xml:space=\"preserve\">\n    <value>Matching version</value>\n  </data>\n  <data name=\"ModifyMicrosoftSkin\" xml:space=\"preserve\">\n    <value>Modify Skin (Microsoft)</value>\n  </data>\n  <data name=\"SkinModel\" xml:space=\"preserve\">\n    <value>Skin model</value>\n  </data>\n  <data name=\"InputSkinFilePath\" xml:space=\"preserve\">\n    <value>Enter skin file path</value>\n  </data>\n  <data name=\"SelectSkinFile\" xml:space=\"preserve\">\n    <value>Select skin file</value>\n  </data>\n  <data name=\"RefreshMicrosoftSkin\" xml:space=\"preserve\">\n    <value>Refresh Skin (Microsoft)</value>\n  </data>\n  <data name=\"ModifySuccess\" xml:space=\"preserve\">\n    <value>modified</value>\n  </data>\n  <data name=\"ModifyFail\" xml:space=\"preserve\">\n    <value>Modify failed</value>\n  </data>\n  <data name=\"IfInstallBedRock\" xml:space=\"preserve\">\n    <value>If the bedrock version is not installed, it will not start</value>\n  </data>\n  <data name=\"BedRockVersion\" xml:space=\"preserve\">\n    <value>Bedrock Edition</value>\n  </data>\n  <data name=\"CannotOpenBedRockSetting\" xml:space=\"preserve\">\n    <value>Could not open bedrock settings</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivileges\" xml:space=\"preserve\">\n    <value>Upgrade to Admin Permissions</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesFail\" xml:space=\"preserve\">\n    <value>Failed to upgrade to admin permissions</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesTip\" xml:space=\"preserve\">\n    <value>To perform the operation, you need to upgrade to administrator privileges. Click OK to restart the program with administrator privileges</value>\n  </data>\n  <data name=\"ChooseLanguage\" xml:space=\"preserve\">\n    <value>Choose language/language</value>\n  </data>\n  <data name=\"ReleaseTheMouseAndLetYmclProcessThisFile\" xml:space=\"preserve\">\n    <value>Release the mouse to let YMCL process this file</value>\n  </data>\n  <data name=\"UnableToAddModsForBedrockEdition\" xml:space=\"preserve\">\n    <value>Modules cannot be added to the Bedrock Edition</value>\n  </data>\n  <data name=\"AddTheFollowingFilesAsModsToTheCurrentVersion\" xml:space=\"preserve\">\n    <value>Add the following files as a module to the current version</value>\n  </data>\n  <data name=\"UnsupportedFileType\" xml:space=\"preserve\">\n    <value>File type not supported</value>\n  </data>\n  <data name=\"InstallTheFollowingFilesAsAnIntegrationPackageCurseforgeFormat\" xml:space=\"preserve\">\n    <value>Install the following files as an integration package (CurseForge format)</value>\n  </data>\n  <data name=\"Unzip\" xml:space=\"preserve\">\n    <value>Unzip</value>\n  </data>\n  <data name=\"UnzipingModPack\" xml:space=\"preserve\">\n    <value>Unpacking the Integration Pack</value>\n  </data>\n  <data name=\"FinsihUnzipModPack\" xml:space=\"preserve\">\n    <value>Unpacking Integration Pack complete</value>\n  </data>\n  <data name=\"GetModPackInfo\" xml:space=\"preserve\">\n    <value>Get the Integration Pack Info</value>\n  </data>\n  <data name=\"ModPackInfo\" xml:space=\"preserve\">\n    <value>Integrate package information</value>\n  </data>\n  <data name=\"ImportFailed\" xml:space=\"preserve\">\n    <value>Import Fail</value>\n  </data>\n  <data name=\"ImportSuccess\" xml:space=\"preserve\">\n    <value>The tapes for indexing are imported successfully</value>\n  </data>\n  <data name=\"NoCrashInfo\" xml:space=\"preserve\">\n    <value>No crash information</value>\n  </data>\n  <data name=\"DownloadModPackMod\" xml:space=\"preserve\">\n    <value>Download the Integration Pack Module</value>\n  </data>\n  <data name=\"TotalNumberOfMod\" xml:space=\"preserve\">\n    <value>Total number of modules</value>\n  </data>\n  <data name=\"DownloadSuccess\" xml:space=\"preserve\">\n    <value>Downloaded successfully</value>\n  </data>\n  <data name=\"OverrideModPack\" xml:space=\"preserve\">\n    <value>Override the Integration Pack</value>\n  </data>\n  <data name=\"DownloadFailedFileAgain\" xml:space=\"preserve\">\n    <value>Failed to re-download file</value>\n  </data>\n  <data name=\"Plugin\" xml:space=\"preserve\">\n    <value>Plugins</value>\n  </data>\n  <data name=\"EnableAll\" xml:space=\"preserve\">\n    <value>Enable All</value>\n  </data>\n  <data name=\"DisableAll\" xml:space=\"preserve\">\n    <value>Disable All</value>\n  </data>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>Author</value>\n  </data>\n  <data name=\"Version\" xml:space=\"preserve\">\n    <value>Version</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Description</value>\n  </data>\n  <data name=\"NeedRestartApp\" xml:space=\"preserve\">\n    <value>YMCL needs to be restarted</value>\n  </data>\n  <data name=\"OnlySupportsWindows10AndAboveSystems\" xml:space=\"preserve\">\n    <value>Only supports Windows 10 and above</value>\n  </data>\n  <data name=\"TaskCenter\" xml:space=\"preserve\">\n    <value>task center</value>\n  </data>\n  <data name=\"AllType\" xml:space=\"preserve\">\n    <value>All Types</value>\n  </data>\n  <data name=\"MaterialPack\" xml:space=\"preserve\">\n    <value>Texture pack</value>\n  </data>\n  <data name=\"Map\" xml:space=\"preserve\">\n    <value>Maps</value>\n  </data>\n  <data name=\"CustomBackGroundImg\" xml:space=\"preserve\">\n    <value>Custom Background Image</value>\n  </data>\n  <data name=\"SelectImgFile\" xml:space=\"preserve\">\n    <value>Select an item for editing</value>\n  </data>\n  <data name=\"MusicNotAvailable\" xml:space=\"preserve\">\n    <value>Music not available</value>\n  </data>\n  <data name=\"MusicGetFail\" xml:space=\"preserve\">\n    <value>Failed to get music</value>\n  </data>\n  <data name=\"DownloadSource\" xml:space=\"preserve\">\n    <value>Download Source</value>\n  </data>\n  <data name=\"MaximumDownloadThread\" xml:space=\"preserve\">\n    <value>Max Download Threads</value>\n  </data>\n  <data name=\"DownloadThreadTooBigTip\" xml:space=\"preserve\">\n    <value>The download thread is too large and may cause the device to crash</value>\n  </data>\n  <data name=\"Unknown\" xml:space=\"preserve\">\n    <value>Unknown</value>\n  </data>\n  <data name=\"ShaderPack\" xml:space=\"preserve\">\n    <value>Light Pack</value>\n  </data>\n  <data name=\"DataPack\" xml:space=\"preserve\">\n    <value>Packs</value>\n  </data>\n  <data name=\"Api\" xml:space=\"preserve\">\n    <value>APIs</value>\n  </data>\n  <data name=\"ModPack\" xml:space=\"preserve\">\n    <value>Integration Package</value>\n  </data>\n  <data name=\"SaveAudioFile\" xml:space=\"preserve\">\n    <value>Save the audio file</value>\n  </data>\n  <data name=\"CustomUpdateUrl\" xml:space=\"preserve\">\n    <value>Custom Update Url</value>\n  </data>\n  <data name=\"LyricTip\" xml:space=\"preserve\">\n    <value>I am the lyrics (≧▽ ≦ *) o</value>\n  </data>\n  <data name=\"MusicPlayerOnlySupportWindows\" xml:space=\"preserve\">\n    <value>Music player only supports Windows</value>\n  </data>\n  <data name=\"LoadAudioFileFail\" xml:space=\"preserve\">\n    <value>Failed to load audio file</value>\n  </data>\n  <data name=\"LaunchCore\" xml:space=\"preserve\">\n    <value>Launch Core</value>\n  </data>\n  <data name=\"AfterLaunchKeepLauncherVisible\" xml:space=\"preserve\">\n    <value>Leave unchanged after startup is complete</value>\n  </data>\n  <data name=\"AfterLaunchMakeLauncherMinimize\" xml:space=\"preserve\">\n    <value>Minimize after startup is complete</value>\n  </data>\n  <data name=\"AfterLaunchExitLauncher\" xml:space=\"preserve\">\n    <value>Close when startup is complete</value>\n  </data>\n  <data name=\"AfterLaunchHideAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>Hide after startup is complete, show after game exits</value>\n  </data>\n  <data name=\"LauncherVisibility\" xml:space=\"preserve\">\n    <value>Launcher Visibility</value>\n  </data>\n  <data name=\"AfterLaunchMinimizeAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>Minimize after startup, show after game exits</value>\n  </data>\n  <data name=\"UnofficialTip\" xml:space=\"preserve\">\n    <value>The current version is unofficial and may be vulnerable to viruses.\n      Redirect to https://ymcl.yik.at/ to download the official version.</value>\n  </data>\n  <data name=\"LanguageTip\" xml:space=\"preserve\">\n    <value>You need to select a language before you can start setting up Yu Minecraft Launcher.</value>\n  </data>\n  <data name=\"Account\" xml:space=\"preserve\">\n    <value>Account</value>\n  </data>\n  <data name=\"WindowTitleBarStyleTip\" xml:space=\"preserve\">\n    <value>Set the style of the launcher window title bar, in certain cases the launcher style is not supported.</value>\n  </data>\n  <data name=\"SystemStyle\" xml:space=\"preserve\">\n    <value>System Style</value>\n  </data>\n  <data name=\"LauncherStyle\" xml:space=\"preserve\">\n    <value>Launcher style</value>\n  </data>\n  <data name=\"MinecraftFolderTip\" xml:space=\"preserve\">\n    <value>Folder for Minecraft data (.minecraft)</value>\n  </data>\n  <data name=\"ExistingNow\" xml:space=\"preserve\">\n    <value>Existing</value>\n  </data>\n  <data name=\"JavaRuntime\" xml:space=\"preserve\">\n    <value>Java Runtime</value>\n  </data>\n  <data name=\"JavaRuntimeTip\" xml:space=\"preserve\">\n    <value>At least one Java runtime is required to start the gam.</value>\n  </data>\n  <data name=\"AccountTip\" xml:space=\"preserve\">\n    <value>At least one account is required to launch the game. If you use an offline account, you will not be able to log in to a server with genuine authentication.</value>\n  </data>\n  <data name=\"MusicApi\" xml:space=\"preserve\">\n    <value>Music Apis</value>\n  </data>\n  <data name=\"ProjectInfo\" xml:space=\"preserve\">\n    <value>Project Info</value>\n  </data>\n  <data name=\"SaveAs\" xml:space=\"preserve\">\n    <value>Save as</value>\n  </data>\n  <data name=\"DeskLyricColor\" xml:space=\"preserve\">\n    <value>Desktop Lyrics Color</value>\n  </data>\n  <data name=\"DeskLyricAlignment\" xml:space=\"preserve\">\n    <value>Desktop Lyrics Align</value>\n  </data>\n  <data name=\"AlignLeft\" xml:space=\"preserve\">\n    <value>Align Left</value>\n  </data>\n  <data name=\"AlignCenter\" xml:space=\"preserve\">\n    <value>Align center</value>\n  </data>\n  <data name=\"AlignRight\" xml:space=\"preserve\">\n    <value>Align Right</value>\n  </data>\n  <data name=\"DeskLyricSize\" xml:space=\"preserve\">\n    <value>Desktop Lyrics Size</value>\n  </data>\n  <data name=\"AutoUpdate\" xml:space=\"preserve\">\n    <value>Auto Update</value>\n  </data>\n  <data name=\"SkipThisVersion\" xml:space=\"preserve\">\n    <value>Skip This Version</value>\n  </data>\n  <data name=\"SkipVersionTip\" xml:space=\"preserve\">\n    <value>Skip version:{version}.\n      Go to Settings-Launcher-Check Updates download this version</value>\n  </data>\n  <data name=\"WinSevenAutoUpdateTip\" xml:space=\"preserve\">\n    <value>New version:{version}\n      Above Windows 10 can't auto updates.\n      Go to \"{url}\" download new version.\n      Go to Settings-Download-Auto Update can disable auto check update</value>\n  </data>\n  <data name=\"OpenBrowser\" xml:space=\"preserve\">\n    <value>Open Browser</value>\n  </data>\n  <data name=\"CustomHomePageWay_Presetting_JavaNews\" xml:space=\"preserve\">\n    <value>Preset - Minecraft: Java Edition News</value>\n  </data>\n  <data name=\"NetworkSource\" xml:space=\"preserve\">\n    <value>Network Source</value>\n  </data>\n  <data name=\"NoSupportNow\" xml:space=\"preserve\">\n    <value>Not supported</value>\n  </data>\n  <data name=\"AggregateSearchTip\" xml:space=\"preserve\">\n    <value>Enter keyword to search in Ymcl</value>\n  </data>\n  <data name=\"CannotRecognitionTheVersion\" xml:space=\"preserve\">\n    <value>Can't Recognition The Version</value>\n  </data>\n  <data name=\"LocalResource\" xml:space=\"preserve\">\n    <value>Local Resources</value>\n  </data>\n  <data name=\"InstallVersion\" xml:space=\"preserve\">\n    <value>Install Version</value>\n  </data>\n  <data name=\"JumpSearch\" xml:space=\"preserve\">\n    <value>Jump Search</value>\n  </data>\n  <data name=\"AggregateSearchWatermark\" xml:space=\"preserve\">\n    <value>Enter keyword to search in Ymcl</value>\n  </data>\n  <data name=\"SwitchedTo\" xml:space=\"preserve\">\n    <value>Switched to</value>\n  </data>\n  <data name=\"JumpToSearchTip\" xml:space=\"preserve\">\n    <value>Jump to {target} to search</value>\n  </data>\n  <data name=\"SearchInTip\" xml:space=\"preserve\">\n    <value>Search in {target}</value>\n  </data>\n  <data name=\"Music\" xml:space=\"preserve\">\n    <value>Music</value>\n  </data>\n  <data name=\"ExistAccount\" xml:space=\"preserve\">\n    <value>Existing accounts</value>\n  </data>\n  <data name=\"DisplayIndependentTaskWindow\" xml:space=\"preserve\">\n    <value>Show independent task window</value>\n  </data>\n  <data name=\"Sponsor\" xml:space=\"preserve\">\n    <value>sponsored</value>\n  </data>\n  <data name=\"Sponsors\" xml:space=\"preserve\">\n    <value>Sponsors</value>\n  </data>\n  <data name=\"SponsorsTip\" xml:space=\"preserve\">\n    <value>Below are sponsors. Thank you for your support to Yu Minecraft Launcher!</value>\n  </data>\n  <data name=\"MacOsUpdateTip\" xml:space=\"preserve\">\n    <value>New version:{version}\n      macOS can't auto updates.\n      Go to \"{url}\" download new version.\n      Go to Settings-Download-Auto Update can disable auto check update</value>\n  </data>\n  <data name=\"AlreadyCopyToClipBoard\" xml:space=\"preserve\">\n    <value>Copied to clipboard</value>\n  </data>\n  <data name=\"UsedMem\" xml:space=\"preserve\">\n    <value>Used Memory</value>\n  </data>\n  <data name=\"CannotLoad\" xml:space=\"preserve\">\n    <value>Can't load</value>\n  </data>\n  <data name=\"LoadFail\" xml:space=\"preserve\">\n    <value>Loading failed</value>\n  </data>\n  <data name=\"ToggleNav\" xml:space=\"preserve\">\n    <value>Toggle Navigation</value>\n  </data>\n  <data name=\"NoWorkingTask\" xml:space=\"preserve\">\n    <value>No running tasks</value>\n  </data>\n  <data name=\"CrashLa\" xml:space=\"preserve\">\n    <value>Crash! Springtime `)o</value>\n  </data>\n  <data name=\"YMCLHappenError\" xml:space=\"preserve\">\n    <value>Unhandled exception by Yu Minecraft Launcher</value>\n  </data>\n  <data name=\"DetailedInfo\" xml:space=\"preserve\">\n    <value>Details</value>\n  </data>\n  <data name=\"UnhandledErrorTip\" xml:space=\"preserve\">\n    <value>Yu Minecraft Launcher encountered unhandled exceptions, may not continue to work, below for unusual details</value>\n  </data>\n  <data name=\"Copy\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"NoMatterErrorAndKeepOnRun\" xml:space=\"preserve\">\n    <value>Ignore Error, force to continue running</value>\n  </data>\n  <data name=\"ExitApp\" xml:space=\"preserve\">\n    <value>Exit app</value>\n  </data>\n  <data name=\"RestartApp\" xml:space=\"preserve\">\n    <value>Restart app</value>\n  </data>\n  <data name=\"LoadBackGroudFromPicFailTip\" xml:space=\"preserve\">\n    <value>Failed to load background image from image file, check that image format is correct</value>\n  </data>\n  <data name=\"CustomBackground\" xml:space=\"preserve\">\n    <value>Custom Background</value>\n  </data>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>Default</value>\n  </data>\n  <data name=\"BackGroundImg\" xml:space=\"preserve\">\n    <value>Background Graph</value>\n  </data>\n  <data name=\"AcrylicBlur\" xml:space=\"preserve\">\n    <value>Subsection</value>\n  </data>\n  <data name=\"Transparent\" xml:space=\"preserve\">\n    <value>Transparent</value>\n  </data>\n  <data name=\"CannotFindMinecraftFolder\" xml:space=\"preserve\">\n    <value>Could not find Minecraft folder</value>\n  </data>\n  <data name=\"OneSentence\" xml:space=\"preserve\">\n    <value>Hitokoto</value>\n  </data>\n  <data name=\"TodayLuckyValue\" xml:space=\"preserve\">\n    <value>Character of the day</value>\n  </data>\n  <data name=\"CannotLoadVersionSetting\" xml:space=\"preserve\">\n    <value>Unable to load version settings</value>\n  </data>\n  <data name=\"TodayLuckyValueTip\" xml:space=\"preserve\">\n    <value>Today's character value is: {value}!</value>\n  </data>\n  <data name=\"IKnow\" xml:space=\"preserve\">\n    <value>Okay then</value>\n  </data>\n  <data name=\"LuckyValueTip\" xml:space=\"preserve\">\n    <value>Today's luck may be bad, but don't be discouraged, tomorrow will be better!/nToday's luck is a little bad./nToday's luck is average./nToday's luck is good./nToday's luck is good!/nToday's luck is very good!/nToday's luck is busting!/n</value>\n  </data>\n  <data name=\"NeverClick\" xml:space=\"preserve\">\n    <value>Don't you dare</value>\n  </data>\n  <data name=\"NeverClickTip\" xml:space=\"preserve\">\n    <value>This operation may cause strange issues, are you sure you want to continue?</value>\n  </data>\n  <data name=\"Tip\" xml:space=\"preserve\">\n    <value>Notice</value>\n  </data>\n  <data name=\"GameMainFileDeletion\" xml:space=\"preserve\">\n    <value>The main game file is missing</value>\n  </data>\n  <data name=\"GameUpdateLog\" xml:space=\"preserve\">\n    <value>ChangeLog</value>\n  </data>\n  <data name=\"SureToInstallTheJava\" xml:space=\"preserve\">\n    <value>Are you sure you want to install Java: {Java}?</value>\n  </data>\n  <data name=\"MaxFileFragmentation\" xml:space=\"preserve\">\n    <value>Maximum File Fragmentation</value>\n  </data>\n  <data name=\"CreateDownloadTask\" xml:space=\"preserve\">\n    <value>Create a download task</value>\n  </data>\n  <data name=\"CustomDownload\" xml:space=\"preserve\">\n    <value>Custom Download</value>\n  </data>\n  <data name=\"Locate\" xml:space=\"preserve\">\n    <value>Location services</value>\n  </data>\n  <data name=\"DownloadUrl\" xml:space=\"preserve\">\n    <value>Download link</value>\n  </data>\n  <data name=\"DisplayName\" xml:space=\"preserve\">\n    <value>Display name</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>Mission</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"More\" xml:space=\"preserve\">\n    <value>More</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"About\" xml:space=\"preserve\">\n    <value>about</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Personalize\" xml:space=\"preserve\">\n    <value>Customization</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Launcher\" xml:space=\"preserve\">\n    <value>Starter</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerUrlError\" xml:space=\"preserve\">\n    <value>Server Url Error</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Waiting\" xml:space=\"preserve\">\n    <value>Waiting</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Running\" xml:space=\"preserve\">\n    <value>Running</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Paused\" xml:space=\"preserve\">\n    <value>Paused</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>Incorrect</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Finished\" xml:space=\"preserve\">\n    <value>Completed</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>Remove</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"BuildLaunchConfig\" xml:space=\"preserve\">\n    <value>Build startup configuration item</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckLaunchArg\" xml:space=\"preserve\">\n    <value>Check startup parameters</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"RefreshAccountToken\" xml:space=\"preserve\">\n    <value>Refresh user token</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchMinecraftProcess\" xml:space=\"preserve\">\n    <value>Start the Minecraft process</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceled\" xml:space=\"preserve\">\n    <value>Cancelled</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceling\" xml:space=\"preserve\">\n    <value>Cancelling</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckVersionResource\" xml:space=\"preserve\">\n    <value>Check version resources</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadResource\" xml:space=\"preserve\">\n    <value>downloadResources</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Return\" xml:space=\"preserve\">\n    <value>Back</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ScreenshotsFolder\" xml:space=\"preserve\">\n    <value>Screenshot Folder</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Saves\" xml:space=\"preserve\">\n    <value>Archive</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Screenshots\" xml:space=\"preserve\">\n    <value>Screenshot</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResourcePacks\" xml:space=\"preserve\">\n    <value>AssetBundle</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoMatchResult\" xml:space=\"preserve\">\n    <value>No matching results</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CreateTime\" xml:space=\"preserve\">\n    <value>Creation Time</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastModifiedTime\" xml:space=\"preserve\">\n    <value>last modified on</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveInfo\" xml:space=\"preserve\">\n    <value>Archive information</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Name</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PlayerCount\" xml:space=\"preserve\">\n    <value>No. of players</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DataPackCount\" xml:space=\"preserve\">\n    <value>Number of packets</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportTime\" xml:space=\"preserve\">\n    <value>Import Time</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CanceledUpdate\" xml:space=\"preserve\">\n    <value>Update was canceled</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ApiError\" xml:space=\"preserve\">\n    <value>Api Error</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NetWorkError\" xml:space=\"preserve\">\n    <value>Network error</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"KillProcess\" xml:space=\"preserve\">\n    <value>End Process</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchArguments\" xml:space=\"preserve\">\n    <value>Bootargs</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DisplayLaunchArguments\" xml:space=\"preserve\">\n    <value>Show startup parameters</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResetData\" xml:space=\"preserve\">\n    <value>Reset Data</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FixLoadDataFailTip\" xml:space=\"preserve\">\n    <value>An exception was encountered while loading data, which may be due to data corruption. Do you want to reset YMCL data to fix this?</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Export\" xml:space=\"preserve\">\n    <value>Export</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportLogFile\" xml:space=\"preserve\">\n    <value>Export log file</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoScrollToEnd\" xml:space=\"preserve\">\n    <value>Automatically scroll to the end</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GetJavaInfoFail\" xml:space=\"preserve\">\n    <value>Failed to get Java information\n      Possibly this Java is incorrect/corrupted/has no execute permissions</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Seed\" xml:space=\"preserve\">\n    <value>Seed pool</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllowCommands\" xml:space=\"preserve\">\n    <value>Allow commands</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GameType\" xml:space=\"preserve\">\n    <value>Game types</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastPlayTime\" xml:space=\"preserve\">\n    <value>Last Play Time</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoDescription\" xml:space=\"preserve\">\n    <value>No description</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Mica\" xml:space=\"preserve\">\n    <value>Mica</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"TranslucentBackgroundOpacity\" xml:space=\"preserve\">\n    <value>Semi-transparent background control opacity</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MusicApiWithIP\" xml:space=\"preserve\">\n    <value>Music Api comes with IP address</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoIdentifiedPlugins\" xml:space=\"preserve\">\n    <value>No plugins identified yet</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LoadPluginError\" xml:space=\"preserve\">\n    <value>Error loading plugin</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Unrecognized\" xml:space=\"preserve\">\n    <value>Not recognize</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportModPack\" xml:space=\"preserve\">\n    <value>Import Integration Package</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Prepare\" xml:space=\"preserve\">\n    <value>Prepare</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"VersionIdCannotBeEmpty\" xml:space=\"preserve\">\n    <value>Version Id cannot be empty</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"InstallModPack\" xml:space=\"preserve\">\n    <value>Install the Integration Pack</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PrepareInstall\" xml:space=\"preserve\">\n    <value>Preparing for Installation</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveSkinFile\" xml:space=\"preserve\">\n    <value>Save skin file</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveFinish\" xml:space=\"preserve\">\n    <value>Save Completed</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CornerRadius\" xml:space=\"preserve\">\n    <value>Fillet radius</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableTranslucentSpecialControlList\" xml:space=\"preserve\">\n    <value>Enable translucent special control list</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoticeWay\" xml:space=\"preserve\">\n    <value>Inform the way</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationCard\" xml:space=\"preserve\">\n    <value>Notification card</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationBubble\" xml:space=\"preserve\">\n    <value>Notification Bubbles</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExampleNotification\" xml:space=\"preserve\">\n    <value>Example Notice</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrentListIsEmpty\" xml:space=\"preserve\">\n    <value>Current list is empty</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Import\" xml:space=\"preserve\">\n    <value>Import</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HopeHowToHandleTheFile\" xml:space=\"preserve\">\n    <value>What do you want to do with this file</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsResourcePackImport\" xml:space=\"preserve\">\n    <value>Import as Asset Package</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsShaderPackImport\" xml:space=\"preserve\">\n    <value>Imported as a Light Package</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Conflict\" xml:space=\"preserve\">\n    <value>CONFLICT</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FileConflictTip\" xml:space=\"preserve\">\n    <value>File conflict, there is already a file with the same name in the destination folder, how do you want to handle the copy operation?</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Cover\" xml:space=\"preserve\">\n    <value>Overlay</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Rename\" xml:space=\"preserve\">\n    <value>Rename</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportFinish\" xml:space=\"preserve\">\n    <value>Imported</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SureToImportTheFile\" xml:space=\"preserve\">\n    <value>OK to import this file</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllImport\" xml:space=\"preserve\">\n    <value>Full Import</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MinecraftVersion\" xml:space=\"preserve\">\n    <value>Minecraft Version</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Home</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HotResource\" xml:space=\"preserve\">\n    <value>Top Resources</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"All\" xml:space=\"preserve\">\n    <value>All</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerPack\" xml:space=\"preserve\">\n    <value>Server Package</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadUrlParserFail\" xml:space=\"preserve\">\n    <value>Download link parsing failed</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Destroy\" xml:space=\"preserve\">\n    <value>Destroy</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourite\" xml:space=\"preserve\">\n    <value>Favourite</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourted\" xml:space=\"preserve\">\n    <value>Favourited</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourites\" xml:space=\"preserve\">\n    <value>Favorites</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrectSystemNoSupportAutoUpdateTip\" xml:space=\"preserve\">\n    <value>Automatic updates are not supported on the current system\n      Go to Settings - Downloads to turn off automatic updates\n      You can manually download the latest version and replace the program file</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DependencyItems\" xml:space=\"preserve\">\n    <value>dependent</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportOrExportSetting\" xml:space=\"preserve\">\n    <value>Import/Export settings</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingTip\" xml:space=\"preserve\">\n    <value>Select the settings you want to export</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Ui\" xml:space=\"preserve\">\n    <value>Interface Settings</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Net\" xml:space=\"preserve\">\n    <value>Network Settings</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Launch\" xml:space=\"preserve\">\n    <value>Launch Settings</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Account\" xml:space=\"preserve\">\n    <value>Account data (excluding Microsoft account)</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Other\" xml:space=\"preserve\">\n    <value>Other settings</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSuccess\" xml:space=\"preserve\">\n    <value>Exported Successfully</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingSuccessTip\" xml:space=\"preserve\">\n    <value>The export was successful, the amount of data is too large to display, click Copy to copy all the data</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportSettingTextBoxWatermark\" xml:space=\"preserve\">\n    <value>Enter hex data</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ReadClipBoard\" xml:space=\"preserve\">\n    <value>Read clipboard</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CopyToClipBoard\" xml:space=\"preserve\">\n    <value>Copy to clipboard</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OpenFile\" xml:space=\"preserve\">\n    <value>File To Load</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"WriteIn\" xml:space=\"preserve\">\n    <value>Write in</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateFailed\" xml:space=\"preserve\">\n    <value>Failed</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateSuccess\" xml:space=\"preserve\">\n    <value>Success</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NeedToManuallyOpenTheTerminalAndExecuteTheFollowingCommand\" xml:space=\"preserve\">\n    <value>You need to manually open the terminal to execute the following command</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AccountName\" xml:space=\"preserve\">\n    <value>Account Name</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AddNewAccountUuid\" xml:space=\"preserve\">\n    <value>Uuid, leave blank to auto-generate</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoAllocate\" xml:space=\"preserve\">\n    <value>Automatic allocation</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableAutoAllocateMem\" xml:space=\"preserve\">\n    <value>Enable automatic memory allocation</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Custom\" xml:space=\"preserve\">\n    <value>Custom</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FastLaunch\" xml:space=\"preserve\">\n    <value>Quick Launch</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>Add</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Icon\" xml:space=\"preserve\">\n    <value>Icon</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetIcon\" xml:space=\"preserve\">\n    <value>Set Icon</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetServer\" xml:space=\"preserve\">\n    <value>Set server</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>Delete</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"JavaRuntimeError\" xml:space=\"preserve\">\n    <value>Java Runtime Error</value>\n    <comment>#TODO#_</comment>\n  </data>\n</root>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Langs/MainLang.ja-JP.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Launch\" xml:space=\"preserve\">\n    <value>起動</value>\n  </data>\n  <data name=\"MinecraftFolder\" xml:space=\"preserve\">\n    <value>Minecraft フォルダ</value>\n  </data>\n  <data name=\"DelSelectedItem\" xml:space=\"preserve\">\n    <value>選択項目を削除</value>\n  </data>\n  <data name=\"AddFolder\" xml:space=\"preserve\">\n    <value>フォルダを追加</value>\n  </data>\n  <data name=\"SelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>ターゲットフォルダを選択 '.minecraft'フォルダ'</value>\n  </data>\n  <data name=\"NeedToSelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>ターゲットフォルダは「.minecraft'」フォルダを選択する必要があります</value>\n  </data>\n  <data name=\"SuccessAdd\" xml:space=\"preserve\">\n    <value>追加終了</value>\n  </data>\n  <data name=\"TheItemAlreadyExist\" xml:space=\"preserve\">\n    <value>このプロジェクトはすでに存在します</value>\n  </data>\n  <data name=\"SuccessRemove\" xml:space=\"preserve\">\n    <value>削除成功</value>\n  </data>\n  <data name=\"AutoScan\" xml:space=\"preserve\">\n    <value>自動スキャン</value>\n  </data>\n  <data name=\"LetYMCLChooseJava\" xml:space=\"preserve\">\n    <value>YMCLでのカスタム値 Java を利用する</value>\n  </data>\n  <data name=\"ScanJavaSuccess\" xml:space=\"preserve\">\n    <value>Javaのスキャンが完了しました</value>\n  </data>\n  <data name=\"RepeatItem\" xml:space=\"preserve\">\n    <value>プロジェクトの複製</value>\n  </data>\n  <data name=\"OpenFileWay\" xml:space=\"preserve\">\n    <value>ファイルを開く</value>\n  </data>\n  <data name=\"FileSelectWindow\" xml:space=\"preserve\">\n    <value>ファイル選択ウィンドウ</value>\n  </data>\n  <data name=\"ManualInput\" xml:space=\"preserve\">\n    <value>手入力</value>\n  </data>\n  <data name=\"Ok\" xml:space=\"preserve\">\n    <value>はい</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>キャンセル</value>\n  </data>\n  <data name=\"InputFolderPath\" xml:space=\"preserve\">\n    <value>フォルダパスを入力</value>\n  </data>\n  <data name=\"FolderNotExist\" xml:space=\"preserve\">\n    <value>フォルダーが存在しません</value>\n  </data>\n  <data name=\"InputFilePath\" xml:space=\"preserve\">\n    <value>ファイルパスを入力</value>\n  </data>\n  <data name=\"FileNotExist\" xml:space=\"preserve\">\n    <value>ファイルが存在しません</value>\n  </data>\n  <data name=\"ManualAdd\" xml:space=\"preserve\">\n    <value>手動で追加</value>\n  </data>\n  <data name=\"SelectJava\" xml:space=\"preserve\">\n    <value>Java の選択</value>\n  </data>\n  <data name=\"TheJavaIsError\" xml:space=\"preserve\">\n    <value>Javaが正しくない</value>\n  </data>\n  <data name=\"AddNewAccount\" xml:space=\"preserve\">\n    <value>新規アカウントを追加</value>\n  </data>\n  <data name=\"OfflineLogin\" xml:space=\"preserve\">\n    <value>オフラインでログイン</value>\n  </data>\n  <data name=\"MicrosoftLogin\" xml:space=\"preserve\">\n    <value>マイクロソフト ログイン</value>\n  </data>\n  <data name=\"ThirdPartyLogin\" xml:space=\"preserve\">\n    <value>サードパーティーログイン</value>\n  </data>\n  <data name=\"SelectAccountType\" xml:space=\"preserve\">\n    <value>アカウントの種類を選択</value>\n  </data>\n  <data name=\"AccountNameCannotBeNull\" xml:space=\"preserve\">\n    <value>アカウント名が空白にはできません</value>\n  </data>\n  <data name=\"InputAccountName\" xml:space=\"preserve\">\n    <value>アカウント名を入力</value>\n  </data>\n  <data name=\"VerificationCode\" xml:space=\"preserve\">\n    <value>認証コード</value>\n  </data>\n  <data name=\"Loading\" xml:space=\"preserve\">\n    <value>読み込んでいます...</value>\n  </data>\n  <data name=\"CopyCodeAndOPenBrowser\" xml:space=\"preserve\">\n    <value>コードをコピーしてブラウザを開く</value>\n  </data>\n  <data name=\"WaitForMicrosoftVerification\" xml:space=\"preserve\">\n    <value>Microsoftアカウントの認証が完了するのを待っています\n      ブラウザに移動して認証を完了してください</value>\n  </data>\n  <data name=\"LoginFail\" xml:space=\"preserve\">\n    <value>ログインに失敗しました</value>\n  </data>\n  <data name=\"VerifyingAccount\" xml:space=\"preserve\">\n    <value>アカウントを確認中</value>\n  </data>\n  <data name=\"VerificationServer\" xml:space=\"preserve\">\n    <value>サーバーを確認</value>\n  </data>\n  <data name=\"EmailAddress\" xml:space=\"preserve\">\n    <value>メールアドレス</value>\n  </data>\n  <data name=\"AccountPassword\" xml:space=\"preserve\">\n    <value>アカウントパスワード</value>\n  </data>\n  <data name=\"YggdrasilServerUrlIsEmpty\" xml:space=\"preserve\">\n    <value>確認サーバーは空欄にできません</value>\n  </data>\n  <data name=\"YggdrasilPasswordIsEmpty\" xml:space=\"preserve\">\n    <value>パスワードを空白にすることはできません</value>\n  </data>\n  <data name=\"YggdrasilEmailIsEmpty\" xml:space=\"preserve\">\n    <value>メールボックスは空欄にできません</value>\n  </data>\n  <data name=\"Language\" xml:space=\"preserve\">\n    <value>言語</value>\n  </data>\n  <data name=\"ColorMode\" xml:space=\"preserve\">\n    <value>カラーモード</value>\n  </data>\n  <data name=\"FollowSystem\" xml:space=\"preserve\">\n    <value>システムに従う</value>\n  </data>\n  <data name=\"Light\" xml:space=\"preserve\">\n    <value>ライト</value>\n  </data>\n  <data name=\"Dark\" xml:space=\"preserve\">\n    <value>ダーク</value>\n  </data>\n  <data name=\"MaxMem\" xml:space=\"preserve\">\n    <value>最大メモリ</value>\n  </data>\n  <data name=\"CannotOpenBrowser\" xml:space=\"preserve\">\n    <value>ブラウザを開くことができませんでした</value>\n  </data>\n  <data name=\"ManualOpen\" xml:space=\"preserve\">\n    <value>手動で開く</value>\n  </data>\n  <data name=\"CopyUrlAndManualOpen\" xml:space=\"preserve\">\n    <value>Ctrl + C は次のリンクをコピーしブラウザーに貼り付けてください</value>\n  </data>\n  <data name=\"VersionList\" xml:space=\"preserve\">\n    <value>リリース一覧</value>\n  </data>\n  <data name=\"VersionSetting\" xml:space=\"preserve\">\n    <value>バージョン設定</value>\n  </data>\n  <data name=\"LaunchGame\" xml:space=\"preserve\">\n    <value>ロード</value>\n  </data>\n  <data name=\"NoChooseGame\" xml:space=\"preserve\">\n    <value>ゲームが選択されていません</value>\n  </data>\n  <data name=\"ReturnWithIcon\" xml:space=\"preserve\">\n    <value>← 戻す</value>\n  </data>\n  <data name=\"CreateGameEntryFail\" xml:space=\"preserve\">\n    <value>ゲームインスタンスの作成に失敗しました</value>\n  </data>\n  <data name=\"NoChooseGameOrCannotFindGame\" xml:space=\"preserve\">\n    <value>ゲームが選択されていないか、ゲームが見つかりませんでした</value>\n  </data>\n  <data name=\"AccountError\" xml:space=\"preserve\">\n    <value>アカウントエラー</value>\n  </data>\n  <data name=\"LaunchProgress\" xml:space=\"preserve\">\n    <value>プログレスを起動</value>\n  </data>\n  <data name=\"BuildLaunchConfigFail\" xml:space=\"preserve\">\n    <value>構成のビルド開始に失敗しました</value>\n  </data>\n  <data name=\"GameExited\" xml:space=\"preserve\">\n    <value>ゲームが終了しました</value>\n  </data>\n  <data name=\"WaitForGameWindowAppear\" xml:space=\"preserve\">\n    <value>ゲームウィンドウ接近を待機中</value>\n  </data>\n  <data name=\"LaunchFinish\" xml:space=\"preserve\">\n    <value>開始終了</value>\n  </data>\n  <data name=\"LaunchFail\" xml:space=\"preserve\">\n    <value>起動に失敗しました</value>\n  </data>\n  <data name=\"UserDataFolder\" xml:space=\"preserve\">\n    <value>ユーザー データ フォルダ</value>\n  </data>\n  <data name=\"OpenFolder\" xml:space=\"preserve\">\n    <value>フォルダを開く</value>\n  </data>\n  <data name=\"AutoInstall\" xml:space=\"preserve\">\n    <value>自動インストール</value>\n  </data>\n  <data name=\"LatestVersion\" xml:space=\"preserve\">\n    <value>最新バージョン</value>\n  </data>\n  <data name=\"PreviewVersion\" xml:space=\"preserve\">\n    <value>バージョンをプレビュー</value>\n  </data>\n  <data name=\"ReleaseVersion\" xml:space=\"preserve\">\n    <value>リリースチャンネル</value>\n  </data>\n  <data name=\"GetInstallableVersionFail\" xml:space=\"preserve\">\n    <value>インストールできるリストの取得に失敗しました</value>\n  </data>\n  <data name=\"OldVersion\" xml:space=\"preserve\">\n    <value>古いバージョン</value>\n  </data>\n  <data name=\"AllVersion\" xml:space=\"preserve\">\n    <value>全てのバージョン</value>\n  </data>\n  <data name=\"SearchKeyword\" xml:space=\"preserve\">\n    <value>検索キーワード...</value>\n  </data>\n  <data name=\"InstallPreview\" xml:space=\"preserve\">\n    <value>インストールのプレビュー</value>\n  </data>\n  <data name=\"NoAdditionalInstall\" xml:space=\"preserve\">\n    <value>空のインストール</value>\n  </data>\n  <data name=\"BeginInstall\" xml:space=\"preserve\">\n    <value>インストールの開始</value>\n  </data>\n  <data name=\"ViewUpdatedContent\" xml:space=\"preserve\">\n    <value>更新を見る</value>\n  </data>\n  <data name=\"Reload\" xml:space=\"preserve\">\n    <value>再読み込み</value>\n  </data>\n  <data name=\"GetFail\" xml:space=\"preserve\">\n    <value>フェッチに失敗しました</value>\n  </data>\n  <data name=\"NoAvailableItem\" xml:space=\"preserve\">\n    <value>利用可能なプロジェクトがありません</value>\n  </data>\n  <data name=\"MineratCrashed\" xml:space=\"preserve\">\n    <value>Minecratrでクラッシュしました</value>\n  </data>\n  <data name=\"TheVersionNameWillBeRenamedTo\" xml:space=\"preserve\">\n    <value>バージョン名が変更されます: </value>\n  </data>\n  <data name=\"IncludeSpecialWord\" xml:space=\"preserve\">\n    <value>特殊文字が含まれています</value>\n  </data>\n  <data name=\"FolderAlreadyExists\" xml:space=\"preserve\">\n    <value>フォルダは既に存在します</value>\n  </data>\n  <data name=\"InstallFail\" xml:space=\"preserve\">\n    <value>インストールに失敗しました</value>\n  </data>\n  <data name=\"Install\" xml:space=\"preserve\">\n    <value>インストール</value>\n  </data>\n  <data name=\"InstallFinish\" xml:space=\"preserve\">\n    <value>インストール完了</value>\n  </data>\n  <data name=\"CannotFandRightJava\" xml:space=\"preserve\">\n    <value>該当するJavaは見つかりませんでした</value>\n  </data>\n  <data name=\"Refresh\" xml:space=\"preserve\">\n    <value>更新</value>\n  </data>\n  <data name=\"Mod\" xml:space=\"preserve\">\n    <value>モジュール</value>\n  </data>\n  <data name=\"Overview\" xml:space=\"preserve\">\n    <value>概要</value>\n  </data>\n  <data name=\"Setting\" xml:space=\"preserve\">\n    <value>設定</value>\n  </data>\n  <data name=\"SavesFolder\" xml:space=\"preserve\">\n    <value>アーカイブフォルダ</value>\n  </data>\n  <data name=\"ModsFolder\" xml:space=\"preserve\">\n    <value>MODフォルダー</value>\n  </data>\n  <data name=\"ResourcePacksFolder\" xml:space=\"preserve\">\n    <value>リソース パック フォルダ</value>\n  </data>\n  <data name=\"ShaderPacksFolder\" xml:space=\"preserve\">\n    <value>影パッケージフォルダ</value>\n  </data>\n  <data name=\"VersionFolder\" xml:space=\"preserve\">\n    <value>バージョンフォルダ</value>\n  </data>\n  <data name=\"EnableIndependencyCore\" xml:space=\"preserve\">\n    <value>スタンドアロンコアを有効化</value>\n  </data>\n  <data name=\"UseGlobalSetting\" xml:space=\"preserve\">\n    <value>グローバル設定を使用</value>\n  </data>\n  <data name=\"Off\" xml:space=\"preserve\">\n    <value>閉じる</value>\n  </data>\n  <data name=\"On\" xml:space=\"preserve\">\n    <value>オン</value>\n  </data>\n  <data name=\"AutoJoinServer\" xml:space=\"preserve\">\n    <value>サーバーを自動登録</value>\n  </data>\n  <data name=\"EnableSelect\" xml:space=\"preserve\">\n    <value>選択を有効</value>\n  </data>\n  <data name=\"DisableSelect\" xml:space=\"preserve\">\n    <value>選択項目の無効化</value>\n  </data>\n  <data name=\"DeleteSelect\" xml:space=\"preserve\">\n    <value>選択項目を削除</value>\n  </data>\n  <data name=\"SelectAll\" xml:space=\"preserve\">\n    <value>すべて選択</value>\n  </data>\n  <data name=\"DeselectAll\" xml:space=\"preserve\">\n    <value>選択を解除</value>\n  </data>\n  <data name=\"SelectedItem\" xml:space=\"preserve\">\n    <value>選択された項目: </value>\n  </data>\n  <data name=\"MoveToRecycleBin\" xml:space=\"preserve\">\n    <value>ゴミ箱に移動</value>\n  </data>\n  <data name=\"WindowTitleBarStyle\" xml:space=\"preserve\">\n    <value>ウインドウのタイトルバーのスタイル</value>\n  </data>\n  <data name=\"GetException\" xml:space=\"preserve\">\n    <value>例外が発生しました</value>\n  </data>\n  <data name=\"UnhandledException\" xml:space=\"preserve\">\n    <value>未処理例外</value>\n  </data>\n  <data name=\"CustomHomePage\" xml:space=\"preserve\">\n    <value>メインページ</value>\n  </data>\n  <data name=\"LocalSourceCode\" xml:space=\"preserve\">\n    <value>ローカルソースコード</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>編集</value>\n  </data>\n  <data name=\"CustomHomePageSourceCodeError\" xml:space=\"preserve\">\n    <value>メインページのソースの編集エラー</value>\n  </data>\n  <data name=\"CheckUpdate\" xml:space=\"preserve\">\n    <value>更新を確認</value>\n  </data>\n  <data name=\"ChooseArchitecture\" xml:space=\"preserve\">\n    <value>プラットフォームを選ぶ</value>\n  </data>\n  <data name=\"CheckUpdateFail\" xml:space=\"preserve\">\n    <value>更新のチェックに失敗しました</value>\n  </data>\n  <data name=\"FoundNewVersion\" xml:space=\"preserve\">\n    <value>新しいバージョンが利用可能</value>\n  </data>\n  <data name=\"GetUpdateUrl\" xml:space=\"preserve\">\n    <value>統一リソースの位置を更新</value>\n  </data>\n  <data name=\"BeginDownload\" xml:space=\"preserve\">\n    <value>ダウンロードを開始中</value>\n  </data>\n  <data name=\"UpdateFail\" xml:space=\"preserve\">\n    <value>更新に失敗しました</value>\n  </data>\n  <data name=\"ThisArchitectureCannotAutoUpdate\" xml:space=\"preserve\">\n    <value>このプラットフォームは自動的に更新されません。次のパスを手動で置き換えてください</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>アップデート</value>\n  </data>\n  <data name=\"DownloadFinish\" xml:space=\"preserve\">\n    <value>ダウンロード完了</value>\n  </data>\n  <data name=\"CurrentlyTheLatestVersion\" xml:space=\"preserve\">\n    <value>お使いのバージョンは最新です</value>\n  </data>\n  <data name=\"OpenSourceProjectUsageTable\" xml:space=\"preserve\">\n    <value>オープンソースプロジェクト用テーブル</value>\n  </data>\n  <data name=\"GPL3Text\" xml:space=\"preserve\">\n    <value>YMCLは GPL 3.0 License プロトコルのソースコードとしてオープンソース化できますが、ライセンスキーの登録およびライセンス規約を含める必要があります。また、ライセンス情報含む通知ファイルが必要です。</value>\n  </data>\n  <data name=\"ShowGameOutput\" xml:space=\"preserve\">\n    <value>ゲームエクスポートを表示</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>検索</value>\n  </data>\n  <data name=\"LoadMore\" xml:space=\"preserve\">\n    <value>もっと表示</value>\n  </data>\n  <data name=\"ErrorCallingApi\" xml:space=\"preserve\">\n    <value>API 呼び出し時にエラー</value>\n  </data>\n  <data name=\"SearchNoResult\" xml:space=\"preserve\">\n    <value>結果が見つかりませんでした</value>\n  </data>\n  <data name=\"AddLocalSong\" xml:space=\"preserve\">\n    <value>音声ファイルを追加</value>\n  </data>\n  <data name=\"SelectMusicFile\" xml:space=\"preserve\">\n    <value>オーディオファイルを選択してください</value>\n  </data>\n  <data name=\"ThemeColor\" xml:space=\"preserve\">\n    <value>アクセント色</value>\n  </data>\n  <data name=\"InitAudioLibraryFail\" xml:space=\"preserve\">\n    <value>オーディオライブラリの初期化に失敗しました</value>\n  </data>\n  <data name=\"InstallVlcTip\" xml:space=\"preserve\">\n    <value>実行を試みます：\n\n      sudo apt install libvlc - dev\n      sudo apt install vlc</value>\n  </data>\n  <data name=\"ThisFeatureIsCurrentlyUnderDevelopment\" xml:space=\"preserve\">\n    <value>この機能は現在開発中です</value>\n  </data>\n  <data name=\"TreasureBox\" xml:space=\"preserve\">\n    <value>百箱</value>\n  </data>\n  <data name=\"ActivateWinOffice\" xml:space=\"preserve\">\n    <value>Windows/Office の利用</value>\n  </data>\n  <data name=\"Run\" xml:space=\"preserve\">\n    <value>実行</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindowsPlatform\" xml:space=\"preserve\">\n    <value>この機能はWindowsプラットフォームでのみサポートされています</value>\n  </data>\n  <data name=\"RunCommandFail\" xml:space=\"preserve\">\n    <value>コマンドを実行できません</value>\n  </data>\n  <data name=\"RunActivate\" xml:space=\"preserve\">\n    <value>アクティベート</value>\n  </data>\n  <data name=\"CancelActivateWin\" xml:space=\"preserve\">\n    <value>Windows の有効化をキャンセル</value>\n  </data>\n  <data name=\"CancelActivateWinTip\" xml:space=\"preserve\">\n    <value>Windowsの有効化状態を削除し、Windows パーソナライゼーション機能では使用できません。続行しますか?</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindows10AndAbove\" xml:space=\"preserve\">\n    <value>この機能はWindows10以降でのみサポートされています。最新のバージョンでは有効にする必要があります</value>\n  </data>\n  <data name=\"PlayList\" xml:space=\"preserve\">\n    <value>プレイリスト</value>\n  </data>\n  <data name=\"ModName\" xml:space=\"preserve\">\n    <value>MOD名</value>\n  </data>\n  <data name=\"GameVersion\" xml:space=\"preserve\">\n    <value>ゲームバージョン</value>\n  </data>\n  <data name=\"AnyModLoader\" xml:space=\"preserve\">\n    <value>任意のローダー</value>\n  </data>\n  <data name=\"AnySource\" xml:space=\"preserve\">\n    <value>すべてのソース</value>\n  </data>\n  <data name=\"Download\" xml:space=\"preserve\">\n    <value>ダウンロード</value>\n  </data>\n  <data name=\"SaveFile\" xml:space=\"preserve\">\n    <value>ファイルを保存</value>\n  </data>\n  <data name=\"DownloadFail\" xml:space=\"preserve\">\n    <value>ダウンロードに失敗しました</value>\n  </data>\n  <data name=\"MatchingVersion\" xml:space=\"preserve\">\n    <value>一致するバージョン</value>\n  </data>\n  <data name=\"ModifyMicrosoftSkin\" xml:space=\"preserve\">\n    <value>スキン変更 (Microsoft)</value>\n  </data>\n  <data name=\"SkinModel\" xml:space=\"preserve\">\n    <value>皮膚モデル</value>\n  </data>\n  <data name=\"InputSkinFilePath\" xml:space=\"preserve\">\n    <value>スキンファイルパスを入力</value>\n  </data>\n  <data name=\"SelectSkinFile\" xml:space=\"preserve\">\n    <value>スキンファイルを選択</value>\n  </data>\n  <data name=\"RefreshMicrosoftSkin\" xml:space=\"preserve\">\n    <value>ウィンドウを更新 (Microsoft)</value>\n  </data>\n  <data name=\"ModifySuccess\" xml:space=\"preserve\">\n    <value>修正終了</value>\n  </data>\n  <data name=\"ModifyFail\" xml:space=\"preserve\">\n    <value>更新に失敗しました</value>\n  </data>\n  <data name=\"IfInstallBedRock\" xml:space=\"preserve\">\n    <value>Blect がインストールされていない場合は起動できません</value>\n  </data>\n  <data name=\"BedRockVersion\" xml:space=\"preserve\">\n    <value>BE版 バージョン</value>\n  </data>\n  <data name=\"CannotOpenBedRockSetting\" xml:space=\"preserve\">\n    <value>ベースロック設定を開けませんでした</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivileges\" xml:space=\"preserve\">\n    <value>管理者の権限を上げる</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesFail\" xml:space=\"preserve\">\n    <value>管理者への昇格が失敗しました</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesTip\" xml:space=\"preserve\">\n    <value>操作を実行するために管理者権限が必要です。OKを押すとアプリケーションを再起動します</value>\n  </data>\n  <data name=\"ChooseLanguage\" xml:space=\"preserve\">\n    <value>言語/Choose Language を選択してください</value>\n  </data>\n  <data name=\"ReleaseTheMouseAndLetYmclProcessThisFile\" xml:space=\"preserve\">\n    <value>YMCLを使用してこのファイルを処理するマウス</value>\n  </data>\n  <data name=\"UnableToAddModsForBedrockEdition\" xml:space=\"preserve\">\n    <value>Modを作成できませんでした</value>\n  </data>\n  <data name=\"AddTheFollowingFilesAsModsToTheCurrentVersion\" xml:space=\"preserve\">\n    <value>以下のファイルをMODとして追加</value>\n  </data>\n  <data name=\"UnsupportedFileType\" xml:space=\"preserve\">\n    <value>対応していないファイルタイプです</value>\n  </data>\n  <data name=\"InstallTheFollowingFilesAsAnIntegrationPackageCurseforgeFormat\" xml:space=\"preserve\">\n    <value>以下のファイルを統合パッケージ（ CurseForge形式）としてインストールしてください</value>\n  </data>\n  <data name=\"Unzip\" xml:space=\"preserve\">\n    <value>解凍</value>\n  </data>\n  <data name=\"UnzipingModPack\" xml:space=\"preserve\">\n    <value>Modパックを展開中</value>\n  </data>\n  <data name=\"FinsihUnzipModPack\" xml:space=\"preserve\">\n    <value>統合されたパックの解凍が完了しました</value>\n  </data>\n  <data name=\"GetModPackInfo\" xml:space=\"preserve\">\n    <value>Modパック情報の取得</value>\n  </data>\n  <data name=\"ModPackInfo\" xml:space=\"preserve\">\n    <value>バンドル情報</value>\n  </data>\n  <data name=\"ImportFailed\" xml:space=\"preserve\">\n    <value>インポートできません</value>\n  </data>\n  <data name=\"ImportSuccess\" xml:space=\"preserve\">\n    <value>インポート成功</value>\n  </data>\n  <data name=\"NoCrashInfo\" xml:space=\"preserve\">\n    <value>クラッシュ情報はありません</value>\n  </data>\n  <data name=\"DownloadModPackMod\" xml:space=\"preserve\">\n    <value>ModとModをダウンロード</value>\n  </data>\n  <data name=\"TotalNumberOfMod\" xml:space=\"preserve\">\n    <value>MOD合計</value>\n  </data>\n  <data name=\"DownloadSuccess\" xml:space=\"preserve\">\n    <value>ダウンロードに成功しました</value>\n  </data>\n  <data name=\"OverrideModPack\" xml:space=\"preserve\">\n    <value>Modパック</value>\n  </data>\n  <data name=\"DownloadFailedFileAgain\" xml:space=\"preserve\">\n    <value>失敗したファイルの再ダウンロード中</value>\n  </data>\n  <data name=\"Plugin\" xml:space=\"preserve\">\n    <value>プラグイン</value>\n  </data>\n  <data name=\"EnableAll\" xml:space=\"preserve\">\n    <value>すべて有効にする</value>\n  </data>\n  <data name=\"DisableAll\" xml:space=\"preserve\">\n    <value>すべて無効にする</value>\n  </data>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>著者</value>\n  </data>\n  <data name=\"Version\" xml:space=\"preserve\">\n    <value>バージョン</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>説明</value>\n  </data>\n  <data name=\"NeedRestartApp\" xml:space=\"preserve\">\n    <value>YMCL の再起動が必要です</value>\n  </data>\n  <data name=\"OnlySupportsWindows10AndAboveSystems\" xml:space=\"preserve\">\n    <value>Windows 10以降でのみ対応</value>\n  </data>\n  <data name=\"TaskCenter\" xml:space=\"preserve\">\n    <value>タスクセンター</value>\n  </data>\n  <data name=\"AllType\" xml:space=\"preserve\">\n    <value>すべてのタイプ</value>\n  </data>\n  <data name=\"MaterialPack\" xml:space=\"preserve\">\n    <value>テクスチャ パック</value>\n  </data>\n  <data name=\"Map\" xml:space=\"preserve\">\n    <value>地図</value>\n  </data>\n  <data name=\"CustomBackGroundImg\" xml:space=\"preserve\">\n    <value>背景をカスタマイズします</value>\n  </data>\n  <data name=\"SelectImgFile\" xml:space=\"preserve\">\n    <value>イメージ ファイルの選択</value>\n  </data>\n  <data name=\"MusicNotAvailable\" xml:space=\"preserve\">\n    <value>音楽は利用できません</value>\n  </data>\n  <data name=\"MusicGetFail\" xml:space=\"preserve\">\n    <value>音楽が取得できませんでした</value>\n  </data>\n  <data name=\"DownloadSource\" xml:space=\"preserve\">\n    <value>ソースをダウンロード</value>\n  </data>\n  <data name=\"MaximumDownloadThread\" xml:space=\"preserve\">\n    <value>スレッドの最大ダウンロード</value>\n  </data>\n  <data name=\"DownloadThreadTooBigTip\" xml:space=\"preserve\">\n    <value>スレッドが大きすぎる場合、デバイスカードトンネリングが発生します</value>\n  </data>\n  <data name=\"Unknown\" xml:space=\"preserve\">\n    <value>不明</value>\n  </data>\n  <data name=\"ShaderPack\" xml:space=\"preserve\">\n    <value>フォトパック</value>\n  </data>\n  <data name=\"DataPack\" xml:space=\"preserve\">\n    <value>パケット</value>\n  </data>\n  <data name=\"Api\" xml:space=\"preserve\">\n    <value>アプリケーション インターフェイス</value>\n  </data>\n  <data name=\"ModPack\" xml:space=\"preserve\">\n    <value>Modパック</value>\n  </data>\n  <data name=\"SaveAudioFile\" xml:space=\"preserve\">\n    <value>音声ファイルの保存</value>\n  </data>\n  <data name=\"CustomUpdateUrl\" xml:space=\"preserve\">\n    <value>カスタムアップデートURL</value>\n  </data>\n  <data name=\"LyricTip\" xml:space=\"preserve\">\n    <value>私が歌詞 ヾ(≧▽≦*)o</value>\n  </data>\n  <data name=\"MusicPlayerOnlySupportWindows\" xml:space=\"preserve\">\n    <value>音楽プレーヤーは Windows のみ対応です</value>\n  </data>\n  <data name=\"LoadAudioFileFail\" xml:space=\"preserve\">\n    <value>音声ファイルの読み込みに失敗しました</value>\n  </data>\n  <data name=\"LaunchCore\" xml:space=\"preserve\">\n    <value>コア</value>\n  </data>\n  <data name=\"AfterLaunchKeepLauncherVisible\" xml:space=\"preserve\">\n    <value>起動時に変更しない</value>\n  </data>\n  <data name=\"AfterLaunchMakeLauncherMinimize\" xml:space=\"preserve\">\n    <value>開始後に最小化</value>\n  </data>\n  <data name=\"AfterLaunchExitLauncher\" xml:space=\"preserve\">\n    <value>起動後に終了</value>\n  </data>\n  <data name=\"AfterLaunchHideAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>起動完了後に非表示にします。ゲームの終了後表示</value>\n  </data>\n  <data name=\"LauncherVisibility\" xml:space=\"preserve\">\n    <value>ランチャーの表示</value>\n  </data>\n  <data name=\"AfterLaunchMinimizeAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>ブート時に最小化して開始する時間</value>\n  </data>\n  <data name=\"UnofficialTip\" xml:space=\"preserve\">\n    <value>現在のバージョンは非公式であり、ウイルスに対して脆弱である可能性があります。\n      公式バージョンをダウンロードするには、https://ymcl.yik.at/にリダイレクトしてください。</value>\n  </data>\n  <data name=\"LanguageTip\" xml:space=\"preserve\">\n    <value>言語を選択するために Yu Minecraft ランチャーを準備します。</value>\n  </data>\n  <data name=\"Account\" xml:space=\"preserve\">\n    <value>アカウント</value>\n  </data>\n  <data name=\"WindowTitleBarStyleTip\" xml:space=\"preserve\">\n    <value>特定の場合においてランチャーウィンドウのタイトルバーに表示されるスタイルを設定します。特定のケースでは、ランチャー形式がサポートされません。</value>\n  </data>\n  <data name=\"SystemStyle\" xml:space=\"preserve\">\n    <value>システム</value>\n  </data>\n  <data name=\"LauncherStyle\" xml:space=\"preserve\">\n    <value>ランチャースタイル</value>\n  </data>\n  <data name=\"MinecraftFolderTip\" xml:space=\"preserve\">\n    <value>Minecraftデータフォルダ(.minecraft) をホストしています</value>\n  </data>\n  <data name=\"ExistingNow\" xml:space=\"preserve\">\n    <value>利用可能</value>\n  </data>\n  <data name=\"JavaRuntime\" xml:space=\"preserve\">\n    <value>テスト実行時に</value>\n  </data>\n  <data name=\"JavaRuntimeTip\" xml:space=\"preserve\">\n    <value>ゲームを起動するには少なくともJavaランタイムが必要です。</value>\n  </data>\n  <data name=\"AccountTip\" xml:space=\"preserve\">\n    <value>ゲームを起動するには最低1度以上アカウントが必要です。認証済みのサーバーにログインできません。</value>\n  </data>\n  <data name=\"MusicApi\" xml:space=\"preserve\">\n    <value>音楽Api</value>\n  </data>\n  <data name=\"ProjectInfo\" xml:space=\"preserve\">\n    <value>プロジェクト情報</value>\n  </data>\n  <data name=\"SaveAs\" xml:space=\"preserve\">\n    <value>名前を付けて保存</value>\n  </data>\n  <data name=\"DeskLyricColor\" xml:space=\"preserve\">\n    <value>デスクトップの歌詞の色</value>\n  </data>\n  <data name=\"DeskLyricAlignment\" xml:space=\"preserve\">\n    <value>デスクトップの歌詞整列</value>\n  </data>\n  <data name=\"AlignLeft\" xml:space=\"preserve\">\n    <value>左揃え</value>\n  </data>\n  <data name=\"AlignCenter\" xml:space=\"preserve\">\n    <value>中央揃え</value>\n  </data>\n  <data name=\"AlignRight\" xml:space=\"preserve\">\n    <value>右揃え</value>\n  </data>\n  <data name=\"DeskLyricSize\" xml:space=\"preserve\">\n    <value>デスクトップの歌詞のサイズ</value>\n  </data>\n  <data name=\"AutoUpdate\" xml:space=\"preserve\">\n    <value>自動更新</value>\n  </data>\n  <data name=\"SkipThisVersion\" xml:space=\"preserve\">\n    <value>このバージョンをスキップ</value>\n  </data>\n  <data name=\"SkipVersionTip\" xml:space=\"preserve\">\n    <value>スキップされたバージョン : {version}\n      設定へ移動-イニシエータ-更新をチェックしてこのバージョンを再取得します</value>\n  </data>\n  <data name=\"WinSevenAutoUpdateTip\" xml:space=\"preserve\">\n    <value>新しいバージョンが見つかりました: {version}\n      win 10以下のシステム（10を除く）は自動更新をサポートしていない\n      次のリンクに移動して新しいバージョンをダウンロードします:「{url}」\n      設定へ移動-ダウンロード-自動更新により自動チェック更新をオフにする</value>\n  </data>\n  <data name=\"OpenBrowser\" xml:space=\"preserve\">\n    <value>ブラウザーを開く</value>\n  </data>\n  <data name=\"CustomHomePageWay_Presetting_JavaNews\" xml:space=\"preserve\">\n    <value>プリセット - Javaニュース</value>\n  </data>\n  <data name=\"NetworkSource\" xml:space=\"preserve\">\n    <value>ネットワークプロバイダー</value>\n  </data>\n  <data name=\"NoSupportNow\" xml:space=\"preserve\">\n    <value>現在サポートされていません</value>\n  </data>\n  <data name=\"AggregateSearchTip\" xml:space=\"preserve\">\n    <value>キーワードを入力してYMCLで検索</value>\n  </data>\n  <data name=\"CannotRecognitionTheVersion\" xml:space=\"preserve\">\n    <value>選択したバージョンを認識できません</value>\n  </data>\n  <data name=\"LocalResource\" xml:space=\"preserve\">\n    <value>ローカルリソース</value>\n  </data>\n  <data name=\"InstallVersion\" xml:space=\"preserve\">\n    <value>バージョンをインストールする</value>\n  </data>\n  <data name=\"JumpSearch\" xml:space=\"preserve\">\n    <value>ジャンプ検索</value>\n  </data>\n  <data name=\"AggregateSearchWatermark\" xml:space=\"preserve\">\n    <value>キーワードを入力してYMCLで検索</value>\n  </data>\n  <data name=\"SwitchedTo\" xml:space=\"preserve\">\n    <value>切り替え済み</value>\n  </data>\n  <data name=\"JumpToSearchTip\" xml:space=\"preserve\">\n    <value>このキーワードは {target} にて検索されます</value>\n  </data>\n  <data name=\"SearchInTip\" xml:space=\"preserve\">\n    <value>{target} 内を検索</value>\n  </data>\n  <data name=\"Music\" xml:space=\"preserve\">\n    <value>音楽</value>\n  </data>\n  <data name=\"ExistAccount\" xml:space=\"preserve\">\n    <value>既存のアカウント</value>\n  </data>\n  <data name=\"DisplayIndependentTaskWindow\" xml:space=\"preserve\">\n    <value>独立タスクウィンドウを表示</value>\n  </data>\n  <data name=\"Sponsor\" xml:space=\"preserve\">\n    <value>スポンサー</value>\n  </data>\n  <data name=\"Sponsors\" xml:space=\"preserve\">\n    <value>サポーター</value>\n  </data>\n  <data name=\"SponsorsTip\" xml:space=\"preserve\">\n    <value>以下はローンチされた運営者です。YuMinecraft ランチャーへの感謝の意しを持ちます！</value>\n  </data>\n  <data name=\"MacOsUpdateTip\" xml:space=\"preserve\">\n    <value>新しいバージョンが見つかりました : {version}\n      MacOsは自動更新をサポートしていません\n      次のリンクに移動して新しいバージョンをダウンロードします:「{url}」\n      設定へ移動-ダウンロード-自動更新により自動チェック更新をオフにする</value>\n  </data>\n  <data name=\"AlreadyCopyToClipBoard\" xml:space=\"preserve\">\n    <value>クリップボードにコピーしました</value>\n  </data>\n  <data name=\"UsedMem\" xml:space=\"preserve\">\n    <value>使用メモリ</value>\n  </data>\n  <data name=\"CannotLoad\" xml:space=\"preserve\">\n    <value>読み込めませんでした</value>\n  </data>\n  <data name=\"LoadFail\" xml:space=\"preserve\">\n    <value>読み込みに失敗しました</value>\n  </data>\n  <data name=\"ToggleNav\" xml:space=\"preserve\">\n    <value>ナビゲーションの切り替え</value>\n  </data>\n  <data name=\"NoWorkingTask\" xml:space=\"preserve\">\n    <value>実行中のタスクはありません</value>\n  </data>\n  <data name=\"CrashLa\" xml:space=\"preserve\">\n    <value>おっと！解釈のための特殊ファイル (• ω • `) o</value>\n  </data>\n  <data name=\"YMCLHappenError\" xml:space=\"preserve\">\n    <value>YuMinecraft ランチャーが例外を処理していません</value>\n  </data>\n  <data name=\"DetailedInfo\" xml:space=\"preserve\">\n    <value>詳細</value>\n  </data>\n  <data name=\"UnhandledErrorTip\" xml:space=\"preserve\">\n    <value>YuMinecraft ランチャーで処理できない例外が発生しました。サーバを起動できないため、例外の詳細は動作しません</value>\n  </data>\n  <data name=\"Copy\" xml:space=\"preserve\">\n    <value>コピー</value>\n  </data>\n  <data name=\"NoMatterErrorAndKeepOnRun\" xml:space=\"preserve\">\n    <value>エラーを無視して、強制し続けます</value>\n  </data>\n  <data name=\"ExitApp\" xml:space=\"preserve\">\n    <value>アプリケーションを終了します</value>\n  </data>\n  <data name=\"RestartApp\" xml:space=\"preserve\">\n    <value>アプリを再起動</value>\n  </data>\n  <data name=\"LoadBackGroudFromPicFailTip\" xml:space=\"preserve\">\n    <value>画像ファイルの背景画像ファイルの読み込みに失敗。 画像が正しい形式になっているかどうかを確認してください</value>\n  </data>\n  <data name=\"CustomBackground\" xml:space=\"preserve\">\n    <value>カスタム背景</value>\n  </data>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>デフォルト</value>\n  </data>\n  <data name=\"BackGroundImg\" xml:space=\"preserve\">\n    <value>背景画像</value>\n  </data>\n  <data name=\"AcrylicBlur\" xml:space=\"preserve\">\n    <value>亜克力</value>\n  </data>\n  <data name=\"Transparent\" xml:space=\"preserve\">\n    <value>アルファ</value>\n  </data>\n  <data name=\"CannotFindMinecraftFolder\" xml:space=\"preserve\">\n    <value>Minecraftフォルダーが見つかりませんでした</value>\n  </data>\n  <data name=\"OneSentence\" xml:space=\"preserve\">\n    <value>一言で言えば</value>\n  </data>\n  <data name=\"TodayLuckyValue\" xml:space=\"preserve\">\n    <value>本日のキャラクター</value>\n  </data>\n  <data name=\"CannotLoadVersionSetting\" xml:space=\"preserve\">\n    <value>バージョン設定を読み込めません</value>\n  </data>\n  <data name=\"TodayLuckyValueTip\" xml:space=\"preserve\">\n    <value>今日のキャラクター値：{ value }！</value>\n  </data>\n  <data name=\"IKnow\" xml:space=\"preserve\">\n    <value>分かっている</value>\n  </data>\n  <data name=\"LuckyValueTip\" xml:space=\"preserve\">\n    <value>今日の運は悪いかもしれませんが、がっかりしないでください。明日の運は良くなります！/ n今日の運は少し悪いです。/n今日の運は平均的です。/n今日の運は良いです。/n今日の運は良いです！/ n今日の運はとても良いです！/ n今日の運は壊れています！/ n</value>\n  </data>\n  <data name=\"NeverClick\" xml:space=\"preserve\">\n    <value>ふざけるな</value>\n  </data>\n  <data name=\"NeverClickTip\" xml:space=\"preserve\">\n    <value>この操作は奇妙な問題を引き起こす可能性があります。続行してもよろしいですか？</value>\n  </data>\n  <data name=\"Tip\" xml:space=\"preserve\">\n    <value>ヒント</value>\n  </data>\n  <data name=\"GameMainFileDeletion\" xml:space=\"preserve\">\n    <value>メインゲームファイルがありません</value>\n  </data>\n  <data name=\"GameUpdateLog\" xml:space=\"preserve\">\n    <value>ログを更新します</value>\n  </data>\n  <data name=\"SureToInstallTheJava\" xml:space=\"preserve\">\n    <value>Javaをインストールしてもよろしいですか：{ Java }？</value>\n  </data>\n  <data name=\"MaxFileFragmentation\" xml:space=\"preserve\">\n    <value>最大のファイル断片化</value>\n  </data>\n  <data name=\"CreateDownloadTask\" xml:space=\"preserve\">\n    <value>ダウンロードタスクを作成してください</value>\n  </data>\n  <data name=\"CustomDownload\" xml:space=\"preserve\">\n    <value>カスタムダウンロード</value>\n  </data>\n  <data name=\"Locate\" xml:space=\"preserve\">\n    <value>ポジショニング</value>\n  </data>\n  <data name=\"DownloadUrl\" xml:space=\"preserve\">\n    <value>ダウンロードリンク： &lt;link&gt;</value>\n  </data>\n  <data name=\"DisplayName\" xml:space=\"preserve\">\n    <value>表示名</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>クエスト</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"More\" xml:space=\"preserve\">\n    <value>より多く</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"About\" xml:space=\"preserve\">\n    <value>について</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Personalize\" xml:space=\"preserve\">\n    <value>パーソナライズ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Launcher\" xml:space=\"preserve\">\n    <value>ランチャー</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerUrlError\" xml:space=\"preserve\">\n    <value>サーバーURLエラー</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Waiting\" xml:space=\"preserve\">\n    <value>待っています</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Running\" xml:space=\"preserve\">\n    <value>走っています</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Paused\" xml:space=\"preserve\">\n    <value>一時停止</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>不正解</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Finished\" xml:space=\"preserve\">\n    <value>完了済み</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>削除</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"BuildLaunchConfig\" xml:space=\"preserve\">\n    <value>スタートアップコンフィギュレーションアイテムを構築</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckLaunchArg\" xml:space=\"preserve\">\n    <value>起動パラメータを確認してください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"RefreshAccountToken\" xml:space=\"preserve\">\n    <value>ユーザートークンを更新してください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchMinecraftProcess\" xml:space=\"preserve\">\n    <value>Minecraftプロセスを開始してください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceled\" xml:space=\"preserve\">\n    <value>キャンセルしました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceling\" xml:space=\"preserve\">\n    <value>キャンセルしています</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckVersionResource\" xml:space=\"preserve\">\n    <value>バージョンリソースを確認してください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadResource\" xml:space=\"preserve\">\n    <value>資源をダウンロード</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Return\" xml:space=\"preserve\">\n    <value>戻る</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ScreenshotsFolder\" xml:space=\"preserve\">\n    <value>スクリーンショットフォルダ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Saves\" xml:space=\"preserve\">\n    <value>アーカイブ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Screenshots\" xml:space=\"preserve\">\n    <value>スクリーンショット</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResourcePacks\" xml:space=\"preserve\">\n    <value>資源パック</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoMatchResult\" xml:space=\"preserve\">\n    <value>一致する結果はありません</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CreateTime\" xml:space=\"preserve\">\n    <value>作成日時</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastModifiedTime\" xml:space=\"preserve\">\n    <value>最終更新日</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveInfo\" xml:space=\"preserve\">\n    <value>アーカイブ情報</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>名前</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PlayerCount\" xml:space=\"preserve\">\n    <value>プレイヤー数</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DataPackCount\" xml:space=\"preserve\">\n    <value>パケット数</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportTime\" xml:space=\"preserve\">\n    <value>インポート日時</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CanceledUpdate\" xml:space=\"preserve\">\n    <value>更新がキャンセルされました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ApiError\" xml:space=\"preserve\">\n    <value>APIエラー</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NetWorkError\" xml:space=\"preserve\">\n    <value>ネットワークにエラーが発生しました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"KillProcess\" xml:space=\"preserve\">\n    <value>プロセスを終了します</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchArguments\" xml:space=\"preserve\">\n    <value>スタートアップパラメータ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DisplayLaunchArguments\" xml:space=\"preserve\">\n    <value>スタートアップパラメータを表示</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResetData\" xml:space=\"preserve\">\n    <value>データをリセット</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FixLoadDataFailTip\" xml:space=\"preserve\">\n    <value>データの読み込み中に例外が発生しました。データが破損している可能性があります。これを修正するためにYMCLデータをリセットしますか？</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Export\" xml:space=\"preserve\">\n    <value>エクスポート</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportLogFile\" xml:space=\"preserve\">\n    <value>ログファイルをエクスポート</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoScrollToEnd\" xml:space=\"preserve\">\n    <value>最後まで自動的にスクロール</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GetJavaInfoFail\" xml:space=\"preserve\">\n    <value>Java情報の取得に失敗しました\n      このJavaが正しくない/破損している/実行権限がない可能性があります</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Seed\" xml:space=\"preserve\">\n    <value>種</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllowCommands\" xml:space=\"preserve\">\n    <value>コマンドを許可してください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GameType\" xml:space=\"preserve\">\n    <value>ゲームタイプ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastPlayTime\" xml:space=\"preserve\">\n    <value>ラストプレイタイム</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoDescription\" xml:space=\"preserve\">\n    <value>説明がありません</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Mica\" xml:space=\"preserve\">\n    <value>雲母</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"TranslucentBackgroundOpacity\" xml:space=\"preserve\">\n    <value>半透明の背景コントロールの不透明度</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MusicApiWithIP\" xml:space=\"preserve\">\n    <value>Music ApiにはIPアドレスが付属しています</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoIdentifiedPlugins\" xml:space=\"preserve\">\n    <value>プラグインがまだ識別されていません</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LoadPluginError\" xml:space=\"preserve\">\n    <value>プラグインの読み込み中にエラーが発生しました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Unrecognized\" xml:space=\"preserve\">\n    <value>認識されません</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportModPack\" xml:space=\"preserve\">\n    <value>インテグレーションパッケージをインポート</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Prepare\" xml:space=\"preserve\">\n    <value>準備</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"VersionIdCannotBeEmpty\" xml:space=\"preserve\">\n    <value>バージョンIDを空にすることはできません</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"InstallModPack\" xml:space=\"preserve\">\n    <value>インテグレーションパックをインストールしてください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PrepareInstall\" xml:space=\"preserve\">\n    <value>インストールの準備ができました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveSkinFile\" xml:space=\"preserve\">\n    <value>スキンファイルを保存</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveFinish\" xml:space=\"preserve\">\n    <value>保存しました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CornerRadius\" xml:space=\"preserve\">\n    <value>丸みを帯びた半径</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableTranslucentSpecialControlList\" xml:space=\"preserve\">\n    <value>半透明の特別なコントロールリストを有効にします</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoticeWay\" xml:space=\"preserve\">\n    <value>通知方法</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationCard\" xml:space=\"preserve\">\n    <value>通知カード</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationBubble\" xml:space=\"preserve\">\n    <value>通知バブル</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExampleNotification\" xml:space=\"preserve\">\n    <value>通知のサンプル</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrentListIsEmpty\" xml:space=\"preserve\">\n    <value>現在のリストは空です</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Import\" xml:space=\"preserve\">\n    <value>導入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HopeHowToHandleTheFile\" xml:space=\"preserve\">\n    <value>このファイルをどうしますか</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsResourcePackImport\" xml:space=\"preserve\">\n    <value>アセットパッケージとしてインポート</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsShaderPackImport\" xml:space=\"preserve\">\n    <value>軽量パッケージとしてインポートされました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Conflict\" xml:space=\"preserve\">\n    <value>衝突</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FileConflictTip\" xml:space=\"preserve\">\n    <value>ファイルが競合しています。コピー先フォルダーに同じ名前のファイルがすでにあります。コピー操作をどのように処理しますか？</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Cover\" xml:space=\"preserve\">\n    <value>重ね合わせ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Rename\" xml:space=\"preserve\">\n    <value>名前を変更</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportFinish\" xml:space=\"preserve\">\n    <value>インポートが完了しました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SureToImportTheFile\" xml:space=\"preserve\">\n    <value>このファイルをインポートできます</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllImport\" xml:space=\"preserve\">\n    <value>すべてインポート</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MinecraftVersion\" xml:space=\"preserve\">\n    <value>Minecraftバージョン</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>ホームページ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HotResource\" xml:space=\"preserve\">\n    <value>トップ資源</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"All\" xml:space=\"preserve\">\n    <value>すべて</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerPack\" xml:space=\"preserve\">\n    <value>サーバーパッケージ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadUrlParserFail\" xml:space=\"preserve\">\n    <value>ダウンロードリンクの解析に失敗しました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Destroy\" xml:space=\"preserve\">\n    <value>破壊しろ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourite\" xml:space=\"preserve\">\n    <value>コレクション</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourted\" xml:space=\"preserve\">\n    <value>お気に入り</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourites\" xml:space=\"preserve\">\n    <value>お気に入り</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrectSystemNoSupportAutoUpdateTip\" xml:space=\"preserve\">\n    <value>自動更新は現在のシステムではサポートされていません\n      [設定] - [ダウンロード]に移動して自動更新をオフにします\n      最新バージョンを手動でダウンロードして、プログラムファイルを置き換えることができます</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DependencyItems\" xml:space=\"preserve\">\n    <value>依存関係</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportOrExportSetting\" xml:space=\"preserve\">\n    <value>インポート/エクスポート設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingTip\" xml:space=\"preserve\">\n    <value>エクスポートする設定を選択してください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Ui\" xml:space=\"preserve\">\n    <value>インターフェース設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Net\" xml:space=\"preserve\">\n    <value>ネットワーク設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Launch\" xml:space=\"preserve\">\n    <value>設定を起動してください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Account\" xml:space=\"preserve\">\n    <value>アカウントデータ（ Microsoftアカウントを除く）</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Other\" xml:space=\"preserve\">\n    <value>その他の設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSuccess\" xml:space=\"preserve\">\n    <value>エクスポートに成功しました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingSuccessTip\" xml:space=\"preserve\">\n    <value>エクスポートに成功しました。データ量が大きすぎて表示できません。[コピー]をクリックしてすべてのデータをコピーします</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportSettingTextBoxWatermark\" xml:space=\"preserve\">\n    <value>16進数データを入力してください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ReadClipBoard\" xml:space=\"preserve\">\n    <value>クリップボードを読んでください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CopyToClipBoard\" xml:space=\"preserve\">\n    <value>クリップボードにコピーしました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OpenFile\" xml:space=\"preserve\">\n    <value>ファイルを開く</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"WriteIn\" xml:space=\"preserve\">\n    <value>書き込み処理</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateFailed\" xml:space=\"preserve\">\n    <value>操作に失敗しました</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateSuccess\" xml:space=\"preserve\">\n    <value>操作成功</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NeedToManuallyOpenTheTerminalAndExecuteTheFollowingCommand\" xml:space=\"preserve\">\n    <value>次のコマンドを実行するには、端末を手動で開く必要があります</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AccountName\" xml:space=\"preserve\">\n    <value>アカウント名</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AddNewAccountUuid\" xml:space=\"preserve\">\n    <value>UUID、自動生成するには空白のままにしてください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoAllocate\" xml:space=\"preserve\">\n    <value>自動分配</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableAutoAllocateMem\" xml:space=\"preserve\">\n    <value>自動メモリ割り当てを有効にしてください</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Custom\" xml:space=\"preserve\">\n    <value>ユーザ設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FastLaunch\" xml:space=\"preserve\">\n    <value>クイックスタート</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>登録</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Icon\" xml:space=\"preserve\">\n    <value>アイコン</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetIcon\" xml:space=\"preserve\">\n    <value>アイコンを設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetServer\" xml:space=\"preserve\">\n    <value>サーバーを設定しましょう</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>削除</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"JavaRuntimeError\" xml:space=\"preserve\">\n    <value>Javaランタイムエラー</value>\n    <comment>#TODO#_</comment>\n  </data>\n</root>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Langs/MainLang.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\"></xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>1.3</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Language\" xml:space=\"preserve\">\n    <value>语言</value>\n  </data>\n  <data name=\"Launch\" xml:space=\"preserve\">\n    <value>启动</value>\n  </data>\n  <data name=\"MinecraftFolder\" xml:space=\"preserve\">\n    <value>Minecraft文件夹</value>\n  </data>\n  <data name=\"DelSelectedItem\" xml:space=\"preserve\">\n    <value>删除选中项</value>\n  </data>\n  <data name=\"AddFolder\" xml:space=\"preserve\">\n    <value>添加文件夹</value>\n  </data>\n  <data name=\"SelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>选择'.minecraft'文件夹</value>\n  </data>\n  <data name=\"NeedToSelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>需选择'.minecraft'文件夹</value>\n  </data>\n  <data name=\"SuccessAdd\" xml:space=\"preserve\">\n    <value>添加成功</value>\n  </data>\n  <data name=\"TheItemAlreadyExist\" xml:space=\"preserve\">\n    <value>已存在此项目</value>\n  </data>\n  <data name=\"SuccessRemove\" xml:space=\"preserve\">\n    <value>移除成功</value>\n  </data>\n  <data name=\"AutoScan\" xml:space=\"preserve\">\n    <value>自动扫描</value>\n  </data>\n  <data name=\"LetYMCLChooseJava\" xml:space=\"preserve\">\n    <value>让YMCL选择合适的Java</value>\n  </data>\n  <data name=\"ScanJavaSuccess\" xml:space=\"preserve\">\n    <value>扫描Java成功</value>\n  </data>\n  <data name=\"RepeatItem\" xml:space=\"preserve\">\n    <value>重复的项目</value>\n  </data>\n  <data name=\"OpenFileWay\" xml:space=\"preserve\">\n    <value>打开文件方式</value>\n  </data>\n  <data name=\"FileSelectWindow\" xml:space=\"preserve\">\n    <value>文件选择窗口</value>\n  </data>\n  <data name=\"ManualInput\" xml:space=\"preserve\">\n    <value>手动输入</value>\n  </data>\n  <data name=\"Ok\" xml:space=\"preserve\">\n    <value>确定</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>取消</value>\n  </data>\n  <data name=\"InputFolderPath\" xml:space=\"preserve\">\n    <value>输入文件夹路径</value>\n  </data>\n  <data name=\"FolderNotExist\" xml:space=\"preserve\">\n    <value>文件夹不存在</value>\n  </data>\n  <data name=\"InputFilePath\" xml:space=\"preserve\">\n    <value>输入文件路径</value>\n  </data>\n  <data name=\"FileNotExist\" xml:space=\"preserve\">\n    <value>文件不存在</value>\n  </data>\n  <data name=\"ManualAdd\" xml:space=\"preserve\">\n    <value>手动添加</value>\n  </data>\n  <data name=\"SelectJava\" xml:space=\"preserve\">\n    <value>选择Java</value>\n  </data>\n  <data name=\"TheJavaIsError\" xml:space=\"preserve\">\n    <value>Java不正确</value>\n  </data>\n  <data name=\"AddNewAccount\" xml:space=\"preserve\">\n    <value>添加新账户</value>\n  </data>\n  <data name=\"OfflineLogin\" xml:space=\"preserve\">\n    <value>离线登录</value>\n  </data>\n  <data name=\"MicrosoftLogin\" xml:space=\"preserve\">\n    <value>微软登录</value>\n  </data>\n  <data name=\"ThirdPartyLogin\" xml:space=\"preserve\">\n    <value>第三方登录</value>\n  </data>\n  <data name=\"SelectAccountType\" xml:space=\"preserve\">\n    <value>选择账户类型</value>\n  </data>\n  <data name=\"AccountNameCannotBeNull\" xml:space=\"preserve\">\n    <value>账户名称不可为空</value>\n  </data>\n  <data name=\"InputAccountName\" xml:space=\"preserve\">\n    <value>输入账户名称</value>\n  </data>\n  <data name=\"VerificationCode\" xml:space=\"preserve\">\n    <value>验证代码</value>\n  </data>\n  <data name=\"Loading\" xml:space=\"preserve\">\n    <value>加载中...</value>\n  </data>\n  <data name=\"CopyCodeAndOPenBrowser\" xml:space=\"preserve\">\n    <value>复制代码并打开浏览器</value>\n  </data>\n  <data name=\"WaitForMicrosoftVerification\" xml:space=\"preserve\">\n    <value>正在等待微软账户验证完成\n      跳转至浏览器完成验证</value>\n  </data>\n  <data name=\"LoginFail\" xml:space=\"preserve\">\n    <value>登录失败</value>\n  </data>\n  <data name=\"VerifyingAccount\" xml:space=\"preserve\">\n    <value>正在验证账户</value>\n  </data>\n  <data name=\"VerificationServer\" xml:space=\"preserve\">\n    <value>验证服务器</value>\n  </data>\n  <data name=\"EmailAddress\" xml:space=\"preserve\">\n    <value>邮箱地址</value>\n  </data>\n  <data name=\"AccountPassword\" xml:space=\"preserve\">\n    <value>账户密码</value>\n  </data>\n  <data name=\"YggdrasilServerUrlIsEmpty\" xml:space=\"preserve\">\n    <value>验证服务器不可为空</value>\n  </data>\n  <data name=\"YggdrasilPasswordIsEmpty\" xml:space=\"preserve\">\n    <value>密码不可为空</value>\n  </data>\n  <data name=\"YggdrasilEmailIsEmpty\" xml:space=\"preserve\">\n    <value>邮箱不可为空</value>\n  </data>\n  <data name=\"ColorMode\" xml:space=\"preserve\">\n    <value>色彩模式</value>\n  </data>\n  <data name=\"FollowSystem\" xml:space=\"preserve\">\n    <value>跟随系统</value>\n  </data>\n  <data name=\"Light\" xml:space=\"preserve\">\n    <value>浅色</value>\n  </data>\n  <data name=\"Dark\" xml:space=\"preserve\">\n    <value>深色</value>\n  </data>\n  <data name=\"MaxMem\" xml:space=\"preserve\">\n    <value>最大内存</value>\n  </data>\n  <data name=\"CannotOpenBrowser\" xml:space=\"preserve\">\n    <value>无法打开浏览器</value>\n  </data>\n  <data name=\"ManualOpen\" xml:space=\"preserve\">\n    <value>手动打开</value>\n  </data>\n  <data name=\"CopyUrlAndManualOpen\" xml:space=\"preserve\">\n    <value>Ctrl + C 复制以下链接并粘贴至浏览器</value>\n  </data>\n  <data name=\"VersionList\" xml:space=\"preserve\">\n    <value>版本列表</value>\n  </data>\n  <data name=\"VersionSetting\" xml:space=\"preserve\">\n    <value>版本设置</value>\n  </data>\n  <data name=\"LaunchGame\" xml:space=\"preserve\">\n    <value>启动游戏</value>\n  </data>\n  <data name=\"NoChooseGame\" xml:space=\"preserve\">\n    <value>未选择游戏</value>\n  </data>\n  <data name=\"ReturnWithIcon\" xml:space=\"preserve\">\n    <value>← 返回</value>\n  </data>\n  <data name=\"CreateGameEntryFail\" xml:space=\"preserve\">\n    <value>创建游戏实例失败</value>\n  </data>\n  <data name=\"NoChooseGameOrCannotFindGame\" xml:space=\"preserve\">\n    <value>未选择游戏或无法找到游戏</value>\n  </data>\n  <data name=\"AccountError\" xml:space=\"preserve\">\n    <value>账户错误</value>\n  </data>\n  <data name=\"LaunchProgress\" xml:space=\"preserve\">\n    <value>启动进度</value>\n  </data>\n  <data name=\"BuildLaunchConfigFail\" xml:space=\"preserve\">\n    <value>构建启动配置失败</value>\n  </data>\n  <data name=\"GameExited\" xml:space=\"preserve\">\n    <value>游戏已退出</value>\n  </data>\n  <data name=\"WaitForGameWindowAppear\" xml:space=\"preserve\">\n    <value>等待游戏窗口出现</value>\n  </data>\n  <data name=\"LaunchFinish\" xml:space=\"preserve\">\n    <value>启动完成</value>\n  </data>\n  <data name=\"LaunchFail\" xml:space=\"preserve\">\n    <value>启动失败</value>\n  </data>\n  <data name=\"UserDataFolder\" xml:space=\"preserve\">\n    <value>用户数据文件夹</value>\n  </data>\n  <data name=\"OpenFolder\" xml:space=\"preserve\">\n    <value>打开文件夹</value>\n  </data>\n  <data name=\"AutoInstall\" xml:space=\"preserve\">\n    <value>自动安装</value>\n  </data>\n  <data name=\"LatestVersion\" xml:space=\"preserve\">\n    <value>最新版本</value>\n  </data>\n  <data name=\"PreviewVersion\" xml:space=\"preserve\">\n    <value>预览版本</value>\n  </data>\n  <data name=\"ReleaseVersion\" xml:space=\"preserve\">\n    <value>正式版本</value>\n  </data>\n  <data name=\"GetInstallableVersionFail\" xml:space=\"preserve\">\n    <value>获取可安装列表失败</value>\n  </data>\n  <data name=\"OldVersion\" xml:space=\"preserve\">\n    <value>远古版本</value>\n  </data>\n  <data name=\"AllVersion\" xml:space=\"preserve\">\n    <value>所有版本</value>\n  </data>\n  <data name=\"SearchKeyword\" xml:space=\"preserve\">\n    <value>搜索关键词...</value>\n  </data>\n  <data name=\"InstallPreview\" xml:space=\"preserve\">\n    <value>安装预览</value>\n  </data>\n  <data name=\"NoAdditionalInstall\" xml:space=\"preserve\">\n    <value>无附加安装</value>\n  </data>\n  <data name=\"BeginInstall\" xml:space=\"preserve\">\n    <value>开始安装</value>\n  </data>\n  <data name=\"ViewUpdatedContent\" xml:space=\"preserve\">\n    <value>查看更新内容</value>\n  </data>\n  <data name=\"Reload\" xml:space=\"preserve\">\n    <value>重新加载</value>\n  </data>\n  <data name=\"GetFail\" xml:space=\"preserve\">\n    <value>获取失败</value>\n  </data>\n  <data name=\"NoAvailableItem\" xml:space=\"preserve\">\n    <value>无可用项目</value>\n  </data>\n  <data name=\"MineratCrashed\" xml:space=\"preserve\">\n    <value>Minecrat发生崩溃</value>\n  </data>\n  <data name=\"TheVersionNameWillBeRenamedTo\" xml:space=\"preserve\">\n    <value>版本名称将被重命名为: </value>\n  </data>\n  <data name=\"IncludeSpecialWord\" xml:space=\"preserve\">\n    <value>包含特殊字符</value>\n  </data>\n  <data name=\"FolderAlreadyExists\" xml:space=\"preserve\">\n    <value>文件夹已存在</value>\n  </data>\n  <data name=\"InstallFail\" xml:space=\"preserve\">\n    <value>安装失败</value>\n  </data>\n  <data name=\"Install\" xml:space=\"preserve\">\n    <value>安装</value>\n  </data>\n  <data name=\"InstallFinish\" xml:space=\"preserve\">\n    <value>安装完成</value>\n  </data>\n  <data name=\"CannotFandRightJava\" xml:space=\"preserve\">\n    <value>无法找到合适Java</value>\n  </data>\n  <data name=\"Refresh\" xml:space=\"preserve\">\n    <value>刷新</value>\n  </data>\n  <data name=\"Mod\" xml:space=\"preserve\">\n    <value>模组</value>\n  </data>\n  <data name=\"Overview\" xml:space=\"preserve\">\n    <value>概览</value>\n  </data>\n  <data name=\"Setting\" xml:space=\"preserve\">\n    <value>设置</value>\n  </data>\n  <data name=\"SavesFolder\" xml:space=\"preserve\">\n    <value>存档文件夹</value>\n  </data>\n  <data name=\"ModsFolder\" xml:space=\"preserve\">\n    <value>模组文件夹</value>\n  </data>\n  <data name=\"ResourcePacksFolder\" xml:space=\"preserve\">\n    <value>资源包文件夹</value>\n  </data>\n  <data name=\"ShaderPacksFolder\" xml:space=\"preserve\">\n    <value>光影包文件夹</value>\n  </data>\n  <data name=\"VersionFolder\" xml:space=\"preserve\">\n    <value>版本文件夹</value>\n  </data>\n  <data name=\"EnableIndependencyCore\" xml:space=\"preserve\">\n    <value>启用独立核心</value>\n  </data>\n  <data name=\"UseGlobalSetting\" xml:space=\"preserve\">\n    <value>使用全局设置</value>\n  </data>\n  <data name=\"Off\" xml:space=\"preserve\">\n    <value>关闭</value>\n  </data>\n  <data name=\"On\" xml:space=\"preserve\">\n    <value>开启</value>\n  </data>\n  <data name=\"AutoJoinServer\" xml:space=\"preserve\">\n    <value>自动加入服务器</value>\n  </data>\n  <data name=\"EnableSelect\" xml:space=\"preserve\">\n    <value>启用选中项</value>\n  </data>\n  <data name=\"DisableSelect\" xml:space=\"preserve\">\n    <value>禁用选中项</value>\n  </data>\n  <data name=\"DeleteSelect\" xml:space=\"preserve\">\n    <value>删除选中项</value>\n  </data>\n  <data name=\"SelectAll\" xml:space=\"preserve\">\n    <value>全选</value>\n  </data>\n  <data name=\"DeselectAll\" xml:space=\"preserve\">\n    <value>全不选</value>\n  </data>\n  <data name=\"SelectedItem\" xml:space=\"preserve\">\n    <value>已选择项目: </value>\n  </data>\n  <data name=\"MoveToRecycleBin\" xml:space=\"preserve\">\n    <value>移动到回收站</value>\n  </data>\n  <data name=\"WindowTitleBarStyle\" xml:space=\"preserve\">\n    <value>窗口标题栏样式</value>\n  </data>\n  <data name=\"GetException\" xml:space=\"preserve\">\n    <value>发生异常</value>\n  </data>\n  <data name=\"UnhandledException\" xml:space=\"preserve\">\n    <value>未处理的异常</value>\n  </data>\n  <data name=\"CustomHomePage\" xml:space=\"preserve\">\n    <value>自定义主页面</value>\n  </data>\n  <data name=\"LocalSourceCode\" xml:space=\"preserve\">\n    <value>本地源代码</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>编辑</value>\n  </data>\n  <data name=\"CustomHomePageSourceCodeError\" xml:space=\"preserve\">\n    <value>自定义主页面源代码错误</value>\n  </data>\n  <data name=\"CheckUpdate\" xml:space=\"preserve\">\n    <value>检查更新</value>\n  </data>\n  <data name=\"ChooseArchitecture\" xml:space=\"preserve\">\n    <value>选择平台</value>\n  </data>\n  <data name=\"CheckUpdateFail\" xml:space=\"preserve\">\n    <value>检查更新失败</value>\n  </data>\n  <data name=\"FoundNewVersion\" xml:space=\"preserve\">\n    <value>发现新版本</value>\n  </data>\n  <data name=\"GetUpdateUrl\" xml:space=\"preserve\">\n    <value>获取更新统一资源定位器</value>\n  </data>\n  <data name=\"BeginDownload\" xml:space=\"preserve\">\n    <value>开始下载</value>\n  </data>\n  <data name=\"UpdateFail\" xml:space=\"preserve\">\n    <value>更新失败</value>\n  </data>\n  <data name=\"ThisArchitectureCannotAutoUpdate\" xml:space=\"preserve\">\n    <value>此平台不支持自动更新，打开以下路径手动替换</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>更新</value>\n  </data>\n  <data name=\"DownloadFinish\" xml:space=\"preserve\">\n    <value>下载完成</value>\n  </data>\n  <data name=\"CurrentlyTheLatestVersion\" xml:space=\"preserve\">\n    <value>当前是最新版本</value>\n  </data>\n  <data name=\"OpenSourceProjectUsageTable\" xml:space=\"preserve\">\n    <value>开源项目使用表</value>\n  </data>\n  <data name=\"GPL3Text\" xml:space=\"preserve\">\n    <value>YMCL 以 GPL 3.0 License 协议开放源代码，可以修改且分发，但软件必须包含原始代码的版权声明和许可声明，以及一个包含许可信息的通知文件。</value>\n  </data>\n  <data name=\"ShowGameOutput\" xml:space=\"preserve\">\n    <value>显示游戏输出</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>搜索</value>\n  </data>\n  <data name=\"LoadMore\" xml:space=\"preserve\">\n    <value>加载更多</value>\n  </data>\n  <data name=\"ErrorCallingApi\" xml:space=\"preserve\">\n    <value>调用Api时出错</value>\n  </data>\n  <data name=\"SearchNoResult\" xml:space=\"preserve\">\n    <value>搜索无结果</value>\n  </data>\n  <data name=\"AddLocalSong\" xml:space=\"preserve\">\n    <value>添加音频文件</value>\n  </data>\n  <data name=\"SelectMusicFile\" xml:space=\"preserve\">\n    <value>选择音频文件</value>\n  </data>\n  <data name=\"ThemeColor\" xml:space=\"preserve\">\n    <value>主题色</value>\n  </data>\n  <data name=\"InitAudioLibraryFail\" xml:space=\"preserve\">\n    <value>初始化音频库失败</value>\n  </data>\n  <data name=\"InstallVlcTip\" xml:space=\"preserve\">\n    <value>尝试执行:\n\n      sudo apt install libvlc-dev\n      sudo apt install vlc</value>\n  </data>\n  <data name=\"ThisFeatureIsCurrentlyUnderDevelopment\" xml:space=\"preserve\">\n    <value>此功能正在开发中</value>\n  </data>\n  <data name=\"TreasureBox\" xml:space=\"preserve\">\n    <value>百宝箱</value>\n  </data>\n  <data name=\"ActivateWinOffice\" xml:space=\"preserve\">\n    <value>激活Windows/Office</value>\n  </data>\n  <data name=\"Run\" xml:space=\"preserve\">\n    <value>运行</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindowsPlatform\" xml:space=\"preserve\">\n    <value>该功能仅支持Windows平台</value>\n  </data>\n  <data name=\"RunCommandFail\" xml:space=\"preserve\">\n    <value>运行命令失败</value>\n  </data>\n  <data name=\"RunActivate\" xml:space=\"preserve\">\n    <value>运行激活</value>\n  </data>\n  <data name=\"CancelActivateWin\" xml:space=\"preserve\">\n    <value>取消激活Windows</value>\n  </data>\n  <data name=\"CancelActivateWinTip\" xml:space=\"preserve\">\n    <value>此操作会移除Windows激活状态，导致Windows个性化等功能不可用，是否继续？</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindows10AndAbove\" xml:space=\"preserve\">\n    <value>该功能仅支持Windows10以上，低于此版本系统不保证激活成功</value>\n  </data>\n  <data name=\"PlayList\" xml:space=\"preserve\">\n    <value>播放列表</value>\n  </data>\n  <data name=\"ModName\" xml:space=\"preserve\">\n    <value>模组名称</value>\n  </data>\n  <data name=\"GameVersion\" xml:space=\"preserve\">\n    <value>游戏版本</value>\n  </data>\n  <data name=\"AnyModLoader\" xml:space=\"preserve\">\n    <value>任意加载器</value>\n  </data>\n  <data name=\"AnySource\" xml:space=\"preserve\">\n    <value>所有来源</value>\n  </data>\n  <data name=\"Download\" xml:space=\"preserve\">\n    <value>下载</value>\n  </data>\n  <data name=\"SaveFile\" xml:space=\"preserve\">\n    <value>保存文件</value>\n  </data>\n  <data name=\"DownloadFail\" xml:space=\"preserve\">\n    <value>下载失败</value>\n  </data>\n  <data name=\"MatchingVersion\" xml:space=\"preserve\">\n    <value>匹配的版本</value>\n  </data>\n  <data name=\"ModifyMicrosoftSkin\" xml:space=\"preserve\">\n    <value>修改皮肤(微软)</value>\n  </data>\n  <data name=\"SkinModel\" xml:space=\"preserve\">\n    <value>皮肤模型</value>\n  </data>\n  <data name=\"InputSkinFilePath\" xml:space=\"preserve\">\n    <value>输入皮肤文件路径</value>\n  </data>\n  <data name=\"SelectSkinFile\" xml:space=\"preserve\">\n    <value>选择皮肤文件</value>\n  </data>\n  <data name=\"RefreshMicrosoftSkin\" xml:space=\"preserve\">\n    <value>刷新皮肤</value>\n  </data>\n  <data name=\"ModifySuccess\" xml:space=\"preserve\">\n    <value>修改成功</value>\n  </data>\n  <data name=\"ModifyFail\" xml:space=\"preserve\">\n    <value>修改失败</value>\n  </data>\n  <data name=\"IfInstallBedRock\" xml:space=\"preserve\">\n    <value>如未安装基岩版则无法启动</value>\n  </data>\n  <data name=\"BedRockVersion\" xml:space=\"preserve\">\n    <value>基岩版</value>\n  </data>\n  <data name=\"CannotOpenBedRockSetting\" xml:space=\"preserve\">\n    <value>无法打开基岩版设置</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivileges\" xml:space=\"preserve\">\n    <value>提升至管理员权限</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesFail\" xml:space=\"preserve\">\n    <value>提升至管理员权限失败</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesTip\" xml:space=\"preserve\">\n    <value>执行操作需要提升至管理员权限，点击确定以管理员权限重启程序</value>\n  </data>\n  <data name=\"ChooseLanguage\" xml:space=\"preserve\">\n    <value>选择语言/Choose Language</value>\n  </data>\n  <data name=\"ReleaseTheMouseAndLetYmclProcessThisFile\" xml:space=\"preserve\">\n    <value>释放鼠标让YMCL处理此文件</value>\n  </data>\n  <data name=\"UnableToAddModsForBedrockEdition\" xml:space=\"preserve\">\n    <value>无法为基岩版添加模组</value>\n  </data>\n  <data name=\"AddTheFollowingFilesAsModsToTheCurrentVersion\" xml:space=\"preserve\">\n    <value>将以下文件作为模组添加至当前版本</value>\n  </data>\n  <data name=\"UnsupportedFileType\" xml:space=\"preserve\">\n    <value>不支持的文件类型</value>\n  </data>\n  <data name=\"InstallTheFollowingFilesAsAnIntegrationPackageCurseforgeFormat\" xml:space=\"preserve\">\n    <value>将以下文件作为整合包(CurseForge格式)安装</value>\n  </data>\n  <data name=\"Unzip\" xml:space=\"preserve\">\n    <value>解压</value>\n  </data>\n  <data name=\"UnzipingModPack\" xml:space=\"preserve\">\n    <value>正在解压整合包</value>\n  </data>\n  <data name=\"FinsihUnzipModPack\" xml:space=\"preserve\">\n    <value>解压整合包完成</value>\n  </data>\n  <data name=\"GetModPackInfo\" xml:space=\"preserve\">\n    <value>获取整合包信息</value>\n  </data>\n  <data name=\"ModPackInfo\" xml:space=\"preserve\">\n    <value>整合包信息</value>\n  </data>\n  <data name=\"ImportFailed\" xml:space=\"preserve\">\n    <value>导入失败</value>\n  </data>\n  <data name=\"ImportSuccess\" xml:space=\"preserve\">\n    <value>导入成功</value>\n  </data>\n  <data name=\"NoCrashInfo\" xml:space=\"preserve\">\n    <value>无崩溃信息</value>\n  </data>\n  <data name=\"DownloadModPackMod\" xml:space=\"preserve\">\n    <value>下载整合包模组</value>\n  </data>\n  <data name=\"TotalNumberOfMod\" xml:space=\"preserve\">\n    <value>模组总数量</value>\n  </data>\n  <data name=\"DownloadSuccess\" xml:space=\"preserve\">\n    <value>下载成功</value>\n  </data>\n  <data name=\"OverrideModPack\" xml:space=\"preserve\">\n    <value>覆盖整合包</value>\n  </data>\n  <data name=\"DownloadFailedFileAgain\" xml:space=\"preserve\">\n    <value>重新下载失败文件</value>\n  </data>\n  <data name=\"Plugin\" xml:space=\"preserve\">\n    <value>插件</value>\n  </data>\n  <data name=\"EnableAll\" xml:space=\"preserve\">\n    <value>启用所有</value>\n  </data>\n  <data name=\"DisableAll\" xml:space=\"preserve\">\n    <value>禁用所有</value>\n  </data>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>作者</value>\n  </data>\n  <data name=\"Version\" xml:space=\"preserve\">\n    <value>版本</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>描述</value>\n  </data>\n  <data name=\"NeedRestartApp\" xml:space=\"preserve\">\n    <value>需要重启YMCL</value>\n  </data>\n  <data name=\"OnlySupportsWindows10AndAboveSystems\" xml:space=\"preserve\">\n    <value>仅支持 Windows 10 以上系统</value>\n  </data>\n  <data name=\"TaskCenter\" xml:space=\"preserve\">\n    <value>任务中心</value>\n  </data>\n  <data name=\"AllType\" xml:space=\"preserve\">\n    <value>所有类型</value>\n  </data>\n  <data name=\"MaterialPack\" xml:space=\"preserve\">\n    <value>材质包</value>\n  </data>\n  <data name=\"Map\" xml:space=\"preserve\">\n    <value>地图</value>\n  </data>\n  <data name=\"CustomBackGroundImg\" xml:space=\"preserve\">\n    <value>自定义背景图</value>\n  </data>\n  <data name=\"SelectImgFile\" xml:space=\"preserve\">\n    <value>选择图像文件</value>\n  </data>\n  <data name=\"MusicNotAvailable\" xml:space=\"preserve\">\n    <value>音乐不可用</value>\n  </data>\n  <data name=\"MusicGetFail\" xml:space=\"preserve\">\n    <value>音乐获取失败</value>\n  </data>\n  <data name=\"DownloadSource\" xml:space=\"preserve\">\n    <value>下载源</value>\n  </data>\n  <data name=\"MaximumDownloadThread\" xml:space=\"preserve\">\n    <value>最大下载线程</value>\n  </data>\n  <data name=\"DownloadThreadTooBigTip\" xml:space=\"preserve\">\n    <value>下载线程过大可能导致设备卡顿</value>\n  </data>\n  <data name=\"Unknown\" xml:space=\"preserve\">\n    <value>未知</value>\n  </data>\n  <data name=\"ShaderPack\" xml:space=\"preserve\">\n    <value>光影包</value>\n  </data>\n  <data name=\"DataPack\" xml:space=\"preserve\">\n    <value>数据包</value>\n  </data>\n  <data name=\"Api\" xml:space=\"preserve\">\n    <value>应用程序接口</value>\n  </data>\n  <data name=\"ModPack\" xml:space=\"preserve\">\n    <value>整合包</value>\n  </data>\n  <data name=\"SaveAudioFile\" xml:space=\"preserve\">\n    <value>保存音频文件</value>\n  </data>\n  <data name=\"CustomUpdateUrl\" xml:space=\"preserve\">\n    <value>自定义更新Url</value>\n  </data>\n  <data name=\"LyricTip\" xml:space=\"preserve\">\n    <value>我是歌词 ヾ(≧▽≦*)o</value>\n  </data>\n  <data name=\"MusicPlayerOnlySupportWindows\" xml:space=\"preserve\">\n    <value>音乐播放器仅支持Windows</value>\n  </data>\n  <data name=\"LoadAudioFileFail\" xml:space=\"preserve\">\n    <value>加载音频文件失败</value>\n  </data>\n  <data name=\"LaunchCore\" xml:space=\"preserve\">\n    <value>启动核心</value>\n  </data>\n  <data name=\"AfterLaunchKeepLauncherVisible\" xml:space=\"preserve\">\n    <value>启动完成后保持不变</value>\n  </data>\n  <data name=\"AfterLaunchMakeLauncherMinimize\" xml:space=\"preserve\">\n    <value>启动完成后最小化</value>\n  </data>\n  <data name=\"AfterLaunchExitLauncher\" xml:space=\"preserve\">\n    <value>启动完成后关闭</value>\n  </data>\n  <data name=\"AfterLaunchHideAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>启动完成后隐藏，游戏退出后显示</value>\n  </data>\n  <data name=\"LauncherVisibility\" xml:space=\"preserve\">\n    <value>启动器可见性</value>\n  </data>\n  <data name=\"AfterLaunchMinimizeAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>启动完成后最小化，游戏退出后显示</value>\n  </data>\n  <data name=\"UnofficialTip\" xml:space=\"preserve\">\n    <value>当前版本为非官方版本，可能遭受病毒攻击。\n      重定向至 https://ymcl.yik.at/ 下载官方版本。</value>\n  </data>\n  <data name=\"LanguageTip\" xml:space=\"preserve\">\n    <value>在开始设置 Yu Minecraft Launcher 前，需要选择语言。</value>\n  </data>\n  <data name=\"Account\" xml:space=\"preserve\">\n    <value>账户</value>\n  </data>\n  <data name=\"WindowTitleBarStyleTip\" xml:space=\"preserve\">\n    <value>设置启动器窗口标题栏的样式，在特定情况启动器样式不受支持。</value>\n  </data>\n  <data name=\"SystemStyle\" xml:space=\"preserve\">\n    <value>系统样式</value>\n  </data>\n  <data name=\"LauncherStyle\" xml:space=\"preserve\">\n    <value>启动器样式</value>\n  </data>\n  <data name=\"MinecraftFolderTip\" xml:space=\"preserve\">\n    <value>存放Minecraft数据的文件夹 (.minecraft)</value>\n  </data>\n  <data name=\"ExistingNow\" xml:space=\"preserve\">\n    <value>现有的</value>\n  </data>\n  <data name=\"JavaRuntime\" xml:space=\"preserve\">\n    <value>Java运行时</value>\n  </data>\n  <data name=\"JavaRuntimeTip\" xml:space=\"preserve\">\n    <value>启动游戏至少需要一个Java运行时。</value>\n  </data>\n  <data name=\"AccountTip\" xml:space=\"preserve\">\n    <value>启动游戏至少需要一个账户，如使用离线账户将无法登入有正版验证的服务器。</value>\n  </data>\n  <data name=\"MusicApi\" xml:space=\"preserve\">\n    <value>音乐Api</value>\n  </data>\n  <data name=\"ProjectInfo\" xml:space=\"preserve\">\n    <value>项目信息</value>\n  </data>\n  <data name=\"SaveAs\" xml:space=\"preserve\">\n    <value>另存为</value>\n  </data>\n  <data name=\"DeskLyricColor\" xml:space=\"preserve\">\n    <value>桌面歌词颜色</value>\n  </data>\n  <data name=\"DeskLyricAlignment\" xml:space=\"preserve\">\n    <value>桌面歌词对齐</value>\n  </data>\n  <data name=\"AlignLeft\" xml:space=\"preserve\">\n    <value>居左对齐</value>\n  </data>\n  <data name=\"AlignCenter\" xml:space=\"preserve\">\n    <value>居中对齐</value>\n  </data>\n  <data name=\"AlignRight\" xml:space=\"preserve\">\n    <value>居右对齐</value>\n  </data>\n  <data name=\"DeskLyricSize\" xml:space=\"preserve\">\n    <value>桌面歌词大小</value>\n  </data>\n  <data name=\"AutoUpdate\" xml:space=\"preserve\">\n    <value>自动更新</value>\n  </data>\n  <data name=\"SkipThisVersion\" xml:space=\"preserve\">\n    <value>跳过此版本</value>\n  </data>\n  <data name=\"SkipVersionTip\" xml:space=\"preserve\">\n    <value>已跳过版本 : {version}\n      前往 设置-启动器-检查更新 可再次获取此版本</value>\n  </data>\n  <data name=\"WinSevenAutoUpdateTip\" xml:space=\"preserve\">\n    <value>发现新版本 : {version}\n      win10 以下系统(不包括10)不支持自动更新\n      前往以下链接下载新版本 : “{url}”\n      前往 设置-下载-自动更新 可关闭自动检查更新</value>\n  </data>\n  <data name=\"OpenBrowser\" xml:space=\"preserve\">\n    <value>打开浏览器</value>\n  </data>\n  <data name=\"CustomHomePageWay_Presetting_JavaNews\" xml:space=\"preserve\">\n    <value>预设-Java新闻</value>\n  </data>\n  <data name=\"NetworkSource\" xml:space=\"preserve\">\n    <value>网络源</value>\n  </data>\n  <data name=\"NoSupportNow\" xml:space=\"preserve\">\n    <value>现不支持</value>\n  </data>\n  <data name=\"AggregateSearchTip\" xml:space=\"preserve\">\n    <value>输入关键词以在YMCL中搜索</value>\n  </data>\n  <data name=\"CannotRecognitionTheVersion\" xml:space=\"preserve\">\n    <value>无法识别选中版本</value>\n  </data>\n  <data name=\"LocalResource\" xml:space=\"preserve\">\n    <value>本地资源</value>\n  </data>\n  <data name=\"InstallVersion\" xml:space=\"preserve\">\n    <value>安装版本</value>\n  </data>\n  <data name=\"JumpSearch\" xml:space=\"preserve\">\n    <value>跳转搜索</value>\n  </data>\n  <data name=\"AggregateSearchWatermark\" xml:space=\"preserve\">\n    <value>输入关键词以在YMCL中搜索</value>\n  </data>\n  <data name=\"SwitchedTo\" xml:space=\"preserve\">\n    <value>已切换到</value>\n  </data>\n  <data name=\"JumpToSearchTip\" xml:space=\"preserve\">\n    <value>将会跳转到 {target} 搜索此关键词</value>\n  </data>\n  <data name=\"SearchInTip\" xml:space=\"preserve\">\n    <value>在 {target} 中搜索</value>\n  </data>\n  <data name=\"Music\" xml:space=\"preserve\">\n    <value>音乐</value>\n  </data>\n  <data name=\"ExistAccount\" xml:space=\"preserve\">\n    <value>现存账户</value>\n  </data>\n  <data name=\"DisplayIndependentTaskWindow\" xml:space=\"preserve\">\n    <value>显示独立任务窗口</value>\n  </data>\n  <data name=\"Sponsor\" xml:space=\"preserve\">\n    <value>赞助</value>\n  </data>\n  <data name=\"Sponsors\" xml:space=\"preserve\">\n    <value>赞助者</value>\n  </data>\n  <data name=\"SponsorsTip\" xml:space=\"preserve\">\n    <value>以下是发电的赞助者，感谢对 Yu Minecraft Launcher 的支持 ！</value>\n  </data>\n  <data name=\"MacOsUpdateTip\" xml:space=\"preserve\">\n    <value>发现新版本 : {version}\n      MacOs 不支持自动更新\n      前往以下链接下载新版本 : “{url}”\n      前往 设置-下载-自动更新 可关闭自动检查更新</value>\n  </data>\n  <data name=\"CurrectSystemNoSupportAutoUpdateTip\" xml:space=\"preserve\">\n    <value>当前系统不支持自动更新\n      可前往 设置-下载 关闭自动更新\n      可手动下载最新版本并替换程序文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AlreadyCopyToClipBoard\" xml:space=\"preserve\">\n    <value>已复制到剪切板</value>\n  </data>\n  <data name=\"UsedMem\" xml:space=\"preserve\">\n    <value>已用内存</value>\n  </data>\n  <data name=\"CannotLoad\" xml:space=\"preserve\">\n    <value>无法加载</value>\n  </data>\n  <data name=\"LoadFail\" xml:space=\"preserve\">\n    <value>加载失败</value>\n  </data>\n  <data name=\"ToggleNav\" xml:space=\"preserve\">\n    <value>切换导航</value>\n  </data>\n  <data name=\"NoWorkingTask\" xml:space=\"preserve\">\n    <value>暂无运行中任务</value>\n  </data>\n  <data name=\"CrashLa\" xml:space=\"preserve\">\n    <value>崩溃啦！ヾ(•ω•`)o</value>\n  </data>\n  <data name=\"YMCLHappenError\" xml:space=\"preserve\">\n    <value>Yu Minecraft Launcher 发生未处理异常</value>\n  </data>\n  <data name=\"DetailedInfo\" xml:space=\"preserve\">\n    <value>详细信息</value>\n  </data>\n  <data name=\"UnhandledErrorTip\" xml:space=\"preserve\">\n    <value>Yu Minecraft Launcher 遇到了没有处理的异常 , 可能无法继续运行 , 下方为异常的详细信息</value>\n  </data>\n  <data name=\"Copy\" xml:space=\"preserve\">\n    <value>复制</value>\n  </data>\n  <data name=\"NoMatterErrorAndKeepOnRun\" xml:space=\"preserve\">\n    <value>忽略错误 , 强制继续运行</value>\n  </data>\n  <data name=\"ExitApp\" xml:space=\"preserve\">\n    <value>退出应用</value>\n  </data>\n  <data name=\"RestartApp\" xml:space=\"preserve\">\n    <value>重启应用</value>\n  </data>\n  <data name=\"LoadBackGroudFromPicFailTip\" xml:space=\"preserve\">\n    <value>从图像文件加载背景图失败 , 检查图片格式是否正确</value>\n  </data>\n  <data name=\"CustomBackground\" xml:space=\"preserve\">\n    <value>自定义背景</value>\n  </data>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>默认</value>\n  </data>\n  <data name=\"BackGroundImg\" xml:space=\"preserve\">\n    <value>背景图</value>\n  </data>\n  <data name=\"AcrylicBlur\" xml:space=\"preserve\">\n    <value>亚克力</value>\n  </data>\n  <data name=\"Transparent\" xml:space=\"preserve\">\n    <value>透明</value>\n  </data>\n  <data name=\"CannotFindMinecraftFolder\" xml:space=\"preserve\">\n    <value>无法找到Minecraft文件夹</value>\n  </data>\n  <data name=\"OneSentence\" xml:space=\"preserve\">\n    <value>一言</value>\n  </data>\n  <data name=\"TodayLuckyValue\" xml:space=\"preserve\">\n    <value>今日人品</value>\n  </data>\n  <data name=\"CannotLoadVersionSetting\" xml:space=\"preserve\">\n    <value>无法加载版本设置</value>\n  </data>\n  <data name=\"TodayLuckyValueTip\" xml:space=\"preserve\">\n    <value>今日的人品值是 : {value} !</value>\n  </data>\n  <data name=\"IKnow\" xml:space=\"preserve\">\n    <value>我知道了</value>\n  </data>\n  <data name=\"LuckyValueTip\" xml:space=\"preserve\">\n    <value>今天的运气可能不太好，但别灰心，明天会更好！/n今天的运气有点差呢。/n今天的运气一般般。/n今天的运气还行。/n今天的运气不错呢！/n今天的运气非常好！/n今天的运气简直爆棚！/n</value>\n  </data>\n  <data name=\"NeverClick\" xml:space=\"preserve\">\n    <value>千万别点</value>\n  </data>\n  <data name=\"NeverClickTip\" xml:space=\"preserve\">\n    <value>此操作可能会发生奇奇怪怪的问题，确定要继续吗？</value>\n  </data>\n  <data name=\"Tip\" xml:space=\"preserve\">\n    <value>提示</value>\n  </data>\n  <data name=\"GameMainFileDeletion\" xml:space=\"preserve\">\n    <value>游戏主要文件缺失</value>\n  </data>\n  <data name=\"GameUpdateLog\" xml:space=\"preserve\">\n    <value>更新日志</value>\n  </data>\n  <data name=\"SureToInstallTheJava\" xml:space=\"preserve\">\n    <value>确定要安装 Java : {Java}？</value>\n  </data>\n  <data name=\"MaxFileFragmentation\" xml:space=\"preserve\">\n    <value>最大文件分片</value>\n  </data>\n  <data name=\"CreateDownloadTask\" xml:space=\"preserve\">\n    <value>创建下载任务</value>\n  </data>\n  <data name=\"CustomDownload\" xml:space=\"preserve\">\n    <value>自定义下载</value>\n  </data>\n  <data name=\"Locate\" xml:space=\"preserve\">\n    <value>定位</value>\n  </data>\n  <data name=\"DownloadUrl\" xml:space=\"preserve\">\n    <value>下载链接</value>\n  </data>\n  <data name=\"DisplayName\" xml:space=\"preserve\">\n    <value>显示名称</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>任务</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"More\" xml:space=\"preserve\">\n    <value>更多</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"About\" xml:space=\"preserve\">\n    <value>关于</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Personalize\" xml:space=\"preserve\">\n    <value>个性化</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Launcher\" xml:space=\"preserve\">\n    <value>启动器</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerUrlError\" xml:space=\"preserve\">\n    <value>服务器Url错误</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Waiting\" xml:space=\"preserve\">\n    <value>等待中</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Running\" xml:space=\"preserve\">\n    <value>运行中</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Paused\" xml:space=\"preserve\">\n    <value>已暂停</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>错误</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Finished\" xml:space=\"preserve\">\n    <value>已完成</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>移除</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"BuildLaunchConfig\" xml:space=\"preserve\">\n    <value>构建启动配置项</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckLaunchArg\" xml:space=\"preserve\">\n    <value>检查启动参数</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"RefreshAccountToken\" xml:space=\"preserve\">\n    <value>刷新用户令牌</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchMinecraftProcess\" xml:space=\"preserve\">\n    <value>启动 Minecraft 进程</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceled\" xml:space=\"preserve\">\n    <value>已取消</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceling\" xml:space=\"preserve\">\n    <value>取消中</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckVersionResource\" xml:space=\"preserve\">\n    <value>检查版本资源</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadResource\" xml:space=\"preserve\">\n    <value>下载资源</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Return\" xml:space=\"preserve\">\n    <value>返回</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ScreenshotsFolder\" xml:space=\"preserve\">\n    <value>截图文件夹</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Saves\" xml:space=\"preserve\">\n    <value>存档</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Screenshots\" xml:space=\"preserve\">\n    <value>截图</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResourcePacks\" xml:space=\"preserve\">\n    <value>资源包</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoMatchResult\" xml:space=\"preserve\">\n    <value>无匹配结果</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CreateTime\" xml:space=\"preserve\">\n    <value>创建时间</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastModifiedTime\" xml:space=\"preserve\">\n    <value>最后修改时间</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveInfo\" xml:space=\"preserve\">\n    <value>存档信息</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>名称</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PlayerCount\" xml:space=\"preserve\">\n    <value>玩家数量</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DataPackCount\" xml:space=\"preserve\">\n    <value>数据包数量</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportTime\" xml:space=\"preserve\">\n    <value>导入时间</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CanceledUpdate\" xml:space=\"preserve\">\n    <value>更新已取消</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ApiError\" xml:space=\"preserve\">\n    <value>Api错误</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NetWorkError\" xml:space=\"preserve\">\n    <value>网络错误</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"KillProcess\" xml:space=\"preserve\">\n    <value>结束进程</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchArguments\" xml:space=\"preserve\">\n    <value>启动参数</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DisplayLaunchArguments\" xml:space=\"preserve\">\n    <value>显示启动参数</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResetData\" xml:space=\"preserve\">\n    <value>重置数据</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FixLoadDataFailTip\" xml:space=\"preserve\">\n    <value>在加载数据时遇到异常，这可能是由于数据发生损坏导致的。是否重置YMCL数据以解决此问题？</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Export\" xml:space=\"preserve\">\n    <value>导出</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportLogFile\" xml:space=\"preserve\">\n    <value>导出日志文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoScrollToEnd\" xml:space=\"preserve\">\n    <value>自动滚动到末尾</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GetJavaInfoFail\" xml:space=\"preserve\">\n    <value>获取Java信息失败\n      可能此Java不正确/已损坏/无执行权限</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Seed\" xml:space=\"preserve\">\n    <value>种子</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllowCommands\" xml:space=\"preserve\">\n    <value>允许命令</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GameType\" xml:space=\"preserve\">\n    <value>游戏类型</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastPlayTime\" xml:space=\"preserve\">\n    <value>最后游玩时间</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoDescription\" xml:space=\"preserve\">\n    <value>无描述信息</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Mica\" xml:space=\"preserve\">\n    <value>云母</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"TranslucentBackgroundOpacity\" xml:space=\"preserve\">\n    <value>半透明背景控件不透明度</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MusicApiWithIP\" xml:space=\"preserve\">\n    <value>音乐Api附带IP地址</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoIdentifiedPlugins\" xml:space=\"preserve\">\n    <value>暂无已识别插件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LoadPluginError\" xml:space=\"preserve\">\n    <value>加载插件错误</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Unrecognized\" xml:space=\"preserve\">\n    <value>无法识别</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportModPack\" xml:space=\"preserve\">\n    <value>导入整合包</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Prepare\" xml:space=\"preserve\">\n    <value>准备</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"VersionIdCannotBeEmpty\" xml:space=\"preserve\">\n    <value>版本 Id 不可为空</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"InstallModPack\" xml:space=\"preserve\">\n    <value>安装整合包</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PrepareInstall\" xml:space=\"preserve\">\n    <value>准备安装</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveSkinFile\" xml:space=\"preserve\">\n    <value>保存皮肤文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveFinish\" xml:space=\"preserve\">\n    <value>保存完成</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CornerRadius\" xml:space=\"preserve\">\n    <value>圆角半径</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableTranslucentSpecialControlList\" xml:space=\"preserve\">\n    <value>启用半透明特殊控件列表</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoticeWay\" xml:space=\"preserve\">\n    <value>通知方式</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationCard\" xml:space=\"preserve\">\n    <value>通知卡片</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationBubble\" xml:space=\"preserve\">\n    <value>通知气泡</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExampleNotification\" xml:space=\"preserve\">\n    <value>示例通知</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrentListIsEmpty\" xml:space=\"preserve\">\n    <value>当前列表为空</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Import\" xml:space=\"preserve\">\n    <value>导入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HopeHowToHandleTheFile\" xml:space=\"preserve\">\n    <value>希望如何处理此文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsResourcePackImport\" xml:space=\"preserve\">\n    <value>作为资源包导入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsShaderPackImport\" xml:space=\"preserve\">\n    <value>作为光影包导入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Conflict\" xml:space=\"preserve\">\n    <value>冲突</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FileConflictTip\" xml:space=\"preserve\">\n    <value>文件冲突，目标文件夹已存在相同名称文件，希望如何处理复制操作？</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Cover\" xml:space=\"preserve\">\n    <value>覆盖</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Rename\" xml:space=\"preserve\">\n    <value>重命名</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportFinish\" xml:space=\"preserve\">\n    <value>导入完成</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SureToImportTheFile\" xml:space=\"preserve\">\n    <value>确定导入此文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllImport\" xml:space=\"preserve\">\n    <value>全部导入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MinecraftVersion\" xml:space=\"preserve\">\n    <value>Minecraft 版本</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>主页</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HotResource\" xml:space=\"preserve\">\n    <value>热门资源</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"All\" xml:space=\"preserve\">\n    <value>全部</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerPack\" xml:space=\"preserve\">\n    <value>服务器包</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadUrlParserFail\" xml:space=\"preserve\">\n    <value>下载链接解析失败</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Destroy\" xml:space=\"preserve\">\n    <value>销毁</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourite\" xml:space=\"preserve\">\n    <value>收藏</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourted\" xml:space=\"preserve\">\n    <value>已收藏</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourites\" xml:space=\"preserve\">\n    <value>收藏夹</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DependencyItems\" xml:space=\"preserve\">\n    <value>依赖项</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportOrExportSetting\" xml:space=\"preserve\">\n    <value>导入/导出设置</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingTip\" xml:space=\"preserve\">\n    <value>选择需要导出的设置项</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Ui\" xml:space=\"preserve\">\n    <value>界面设置</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Net\" xml:space=\"preserve\">\n    <value>网络设置</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Launch\" xml:space=\"preserve\">\n    <value>启动设置</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Account\" xml:space=\"preserve\">\n    <value>账户数据(不含微软帐户)</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Other\" xml:space=\"preserve\">\n    <value>其他设置</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSuccess\" xml:space=\"preserve\">\n    <value>导出成功</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingSuccessTip\" xml:space=\"preserve\">\n    <value>导出成功，数据量过大无法显示，点击复制以复制所有数据</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportSettingTextBoxWatermark\" xml:space=\"preserve\">\n    <value>输入hex数据</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ReadClipBoard\" xml:space=\"preserve\">\n    <value>读取剪贴板</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CopyToClipBoard\" xml:space=\"preserve\">\n    <value>复制到剪贴板</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OpenFile\" xml:space=\"preserve\">\n    <value>打开文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"WriteIn\" xml:space=\"preserve\">\n    <value>写入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateFailed\" xml:space=\"preserve\">\n    <value>操作失败</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateSuccess\" xml:space=\"preserve\">\n    <value>操作成功</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NeedToManuallyOpenTheTerminalAndExecuteTheFollowingCommand\" xml:space=\"preserve\">\n    <value>需要手动打开终端执行以下命令</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AccountName\" xml:space=\"preserve\">\n    <value>账户名称</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AddNewAccountUuid\" xml:space=\"preserve\">\n    <value>Uuid，留空则自动生成</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoAllocate\" xml:space=\"preserve\">\n    <value>自动分配</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableAutoAllocateMem\" xml:space=\"preserve\">\n    <value>启用自动分配内存</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Custom\" xml:space=\"preserve\">\n    <value>自定义</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FastLaunch\" xml:space=\"preserve\">\n    <value>快捷启动</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>添加</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Icon\" xml:space=\"preserve\">\n    <value>图标</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetIcon\" xml:space=\"preserve\">\n    <value>设置图标</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetServer\" xml:space=\"preserve\">\n    <value>设置服务器</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>删除</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"JavaRuntimeError\" xml:space=\"preserve\">\n    <value>Java运行时错误</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SavesName\" xml:space=\"preserve\">\n    <value>存档名称</value>\n  </data>\n  <data name=\"AutoJoinWorld\" xml:space=\"preserve\">\n    <value>自动进入存档</value>\n  </data>\n  <data name=\"AddFastLaunch\" xml:space=\"preserve\">\n    <value>添加快捷启动</value>\n  </data>\n  <data name=\"SetAutoJoinServerTip\" xml:space=\"preserve\">\n    <value>此操作将会同时关闭自动进入存档</value>\n  </data>\n  <data name=\"SetAutoJoinWorldTip\" xml:space=\"preserve\">\n    <value>此操作将会同时关闭自动进入服务器</value>\n  </data>\n  <data name=\"SetWorld\" xml:space=\"preserve\">\n    <value>设置存档</value>\n  </data>\n  <data name=\"CurrentVersionUnsupportOperation\" xml:space=\"preserve\">\n    <value>当前版本不支持此操作</value>\n  </data>\n  <data name=\"EnableIndependencyWindowNotification\" xml:space=\"preserve\">\n    <value>启用独立窗口通知</value>\n  </data>\n  <data name=\"LoginSucess\" xml:space=\"preserve\">\n    <value>登录成功</value>\n  </data>\n</root>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Langs/MainLang.ru-RU.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Launch\" xml:space=\"preserve\">\n    <value>Активировать</value>\n  </data>\n  <data name=\"MinecraftFolder\" xml:space=\"preserve\">\n    <value>Папка Minecraft</value>\n  </data>\n  <data name=\"DelSelectedItem\" xml:space=\"preserve\">\n    <value>Удалить выбранное</value>\n  </data>\n  <data name=\"AddFolder\" xml:space=\"preserve\">\n    <value>Добавить папку</value>\n  </data>\n  <data name=\"SelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>Выберите папку'.minecraft'</value>\n  </data>\n  <data name=\"NeedToSelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>Необходимо выбрать папку'.minecraft'</value>\n  </data>\n  <data name=\"SuccessAdd\" xml:space=\"preserve\">\n    <value>Успешно добавлено</value>\n  </data>\n  <data name=\"TheItemAlreadyExist\" xml:space=\"preserve\">\n    <value>Этот элемент уже существует</value>\n  </data>\n  <data name=\"SuccessRemove\" xml:space=\"preserve\">\n    <value>Удаление выполнено успешно</value>\n  </data>\n  <data name=\"AutoScan\" xml:space=\"preserve\">\n    <value>Автоматическое сканирование</value>\n  </data>\n  <data name=\"LetYMCLChooseJava\" xml:space=\"preserve\">\n    <value>Пусть YMCL выберет правильную Java</value>\n  </data>\n  <data name=\"ScanJavaSuccess\" xml:space=\"preserve\">\n    <value>Сканирование Java выполнено успешно</value>\n  </data>\n  <data name=\"RepeatItem\" xml:space=\"preserve\">\n    <value>Дублировать элемент</value>\n  </data>\n  <data name=\"OpenFileWay\" xml:space=\"preserve\">\n    <value>Как открыть файл</value>\n  </data>\n  <data name=\"FileSelectWindow\" xml:space=\"preserve\">\n    <value>Окно выбора файла</value>\n  </data>\n  <data name=\"ManualInput\" xml:space=\"preserve\">\n    <value>Введите вручную</value>\n  </data>\n  <data name=\"Ok\" xml:space=\"preserve\">\n    <value>Подтвердить</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>Отмена</value>\n  </data>\n  <data name=\"InputFolderPath\" xml:space=\"preserve\">\n    <value>Введите путь к папке</value>\n  </data>\n  <data name=\"FolderNotExist\" xml:space=\"preserve\">\n    <value>Каталог не существует</value>\n  </data>\n  <data name=\"InputFilePath\" xml:space=\"preserve\">\n    <value>Введите путь к файлу</value>\n  </data>\n  <data name=\"FileNotExist\" xml:space=\"preserve\">\n    <value>Файл не существует</value>\n  </data>\n  <data name=\"ManualAdd\" xml:space=\"preserve\">\n    <value>Добавить вручную</value>\n  </data>\n  <data name=\"SelectJava\" xml:space=\"preserve\">\n    <value>Выбирайте Java</value>\n  </data>\n  <data name=\"TheJavaIsError\" xml:space=\"preserve\">\n    <value>Java неверна</value>\n  </data>\n  <data name=\"AddNewAccount\" xml:space=\"preserve\">\n    <value>Добавить новую учетную запись</value>\n  </data>\n  <data name=\"OfflineLogin\" xml:space=\"preserve\">\n    <value>Войти в автономном режиме</value>\n  </data>\n  <data name=\"MicrosoftLogin\" xml:space=\"preserve\">\n    <value>Microsoft Login</value>\n  </data>\n  <data name=\"ThirdPartyLogin\" xml:space=\"preserve\">\n    <value>Сторонний вход</value>\n  </data>\n  <data name=\"SelectAccountType\" xml:space=\"preserve\">\n    <value>Выберите тип счета</value>\n  </data>\n  <data name=\"AccountNameCannotBeNull\" xml:space=\"preserve\">\n    <value>Имя учетной записи не может быть пустым</value>\n  </data>\n  <data name=\"InputAccountName\" xml:space=\"preserve\">\n    <value>Введите имя учетной записи</value>\n  </data>\n  <data name=\"VerificationCode\" xml:space=\"preserve\">\n    <value>Проверьте код</value>\n  </data>\n  <data name=\"Loading\" xml:space=\"preserve\">\n    <value>Загрузка...</value>\n  </data>\n  <data name=\"CopyCodeAndOPenBrowser\" xml:space=\"preserve\">\n    <value>Скопируйте код и откройте браузер</value>\n  </data>\n  <data name=\"WaitForMicrosoftVerification\" xml:space=\"preserve\">\n    <value>Ожидание подтверждения учетной записи Майкрософт\n      Перейдите в браузер, чтобы завершить проверку</value>\n  </data>\n  <data name=\"LoginFail\" xml:space=\"preserve\">\n    <value>Ошибка входа в систему</value>\n  </data>\n  <data name=\"VerifyingAccount\" xml:space=\"preserve\">\n    <value>Подтверждение аккаунта</value>\n  </data>\n  <data name=\"VerificationServer\" xml:space=\"preserve\">\n    <value>Сервер аутентификации</value>\n  </data>\n  <data name=\"EmailAddress\" xml:space=\"preserve\">\n    <value>Адрес электронной почт</value>\n  </data>\n  <data name=\"AccountPassword\" xml:space=\"preserve\">\n    <value>Пароль учетной записи</value>\n  </data>\n  <data name=\"YggdrasilServerUrlIsEmpty\" xml:space=\"preserve\">\n    <value>Сервер верификации не может быть пустым</value>\n  </data>\n  <data name=\"YggdrasilPasswordIsEmpty\" xml:space=\"preserve\">\n    <value>Пароль не может быть пустым</value>\n  </data>\n  <data name=\"YggdrasilEmailIsEmpty\" xml:space=\"preserve\">\n    <value>Адрес электронной почты не может быть пустым</value>\n  </data>\n  <data name=\"Language\" xml:space=\"preserve\">\n    <value>Язык</value>\n  </data>\n  <data name=\"ColorMode\" xml:space=\"preserve\">\n    <value>Цветовой режим</value>\n  </data>\n  <data name=\"FollowSystem\" xml:space=\"preserve\">\n    <value>Следите за системой</value>\n  </data>\n  <data name=\"Light\" xml:space=\"preserve\">\n    <value>Светлый</value>\n  </data>\n  <data name=\"Dark\" xml:space=\"preserve\">\n    <value>Темный</value>\n  </data>\n  <data name=\"MaxMem\" xml:space=\"preserve\">\n    <value>Максимальный объем памяти</value>\n  </data>\n  <data name=\"CannotOpenBrowser\" xml:space=\"preserve\">\n    <value>Не удалось открыть браузер</value>\n  </data>\n  <data name=\"ManualOpen\" xml:space=\"preserve\">\n    <value>Открыть вручную</value>\n  </data>\n  <data name=\"CopyUrlAndManualOpen\" xml:space=\"preserve\">\n    <value>Ctrl + C Скопируйте и вставьте следующую ссылку в браузер</value>\n  </data>\n  <data name=\"VersionList\" xml:space=\"preserve\">\n    <value>Список версий</value>\n  </data>\n  <data name=\"VersionSetting\" xml:space=\"preserve\">\n    <value>Настройки версии</value>\n  </data>\n  <data name=\"LaunchGame\" xml:space=\"preserve\">\n    <value>Запустите игру</value>\n  </data>\n  <data name=\"NoChooseGame\" xml:space=\"preserve\">\n    <value>Игра не выбрана</value>\n  </data>\n  <data name=\"ReturnWithIcon\" xml:space=\"preserve\">\n    <value>← Назад</value>\n  </data>\n  <data name=\"CreateGameEntryFail\" xml:space=\"preserve\">\n    <value>Не удалось создать экземпляр игры</value>\n  </data>\n  <data name=\"NoChooseGameOrCannotFindGame\" xml:space=\"preserve\">\n    <value>Игра не выбрана или не может быть найдена</value>\n  </data>\n  <data name=\"AccountError\" xml:space=\"preserve\">\n    <value>Ошибка аккаунта</value>\n  </data>\n  <data name=\"LaunchProgress\" xml:space=\"preserve\">\n    <value>Прогресс запуска</value>\n  </data>\n  <data name=\"BuildLaunchConfigFail\" xml:space=\"preserve\">\n    <value>Не удалось создать конфигурацию запуска</value>\n  </data>\n  <data name=\"GameExited\" xml:space=\"preserve\">\n    <value>Игра завершена</value>\n  </data>\n  <data name=\"WaitForGameWindowAppear\" xml:space=\"preserve\">\n    <value>Дождитесь появления игрового окна</value>\n  </data>\n  <data name=\"LaunchFinish\" xml:space=\"preserve\">\n    <value>Запуск завершен</value>\n  </data>\n  <data name=\"LaunchFail\" xml:space=\"preserve\">\n    <value>удаление% 1 завершилось неудачно</value>\n  </data>\n  <data name=\"UserDataFolder\" xml:space=\"preserve\">\n    <value>Папка данных пользователя</value>\n  </data>\n  <data name=\"OpenFolder\" xml:space=\"preserve\">\n    <value>Открыть папку</value>\n  </data>\n  <data name=\"AutoInstall\" xml:space=\"preserve\">\n    <value>Автоматическая установка</value>\n  </data>\n  <data name=\"LatestVersion\" xml:space=\"preserve\">\n    <value>Последняя версия</value>\n  </data>\n  <data name=\"PreviewVersion\" xml:space=\"preserve\">\n    <value>Предварительная версия</value>\n  </data>\n  <data name=\"ReleaseVersion\" xml:space=\"preserve\">\n    <value>Официальный релиз</value>\n  </data>\n  <data name=\"GetInstallableVersionFail\" xml:space=\"preserve\">\n    <value>Не удалось получить список для установки</value>\n  </data>\n  <data name=\"OldVersion\" xml:space=\"preserve\">\n    <value>Древняя версия</value>\n  </data>\n  <data name=\"AllVersion\" xml:space=\"preserve\">\n    <value>Все версии</value>\n  </data>\n  <data name=\"SearchKeyword\" xml:space=\"preserve\">\n    <value>Поиск по ключевым словам...</value>\n  </data>\n  <data name=\"InstallPreview\" xml:space=\"preserve\">\n    <value>Установите предварительный просмотр</value>\n  </data>\n  <data name=\"NoAdditionalInstall\" xml:space=\"preserve\">\n    <value>Никакой дополнительной установки</value>\n  </data>\n  <data name=\"BeginInstall\" xml:space=\"preserve\">\n    <value>Начать установку</value>\n  </data>\n  <data name=\"ViewUpdatedContent\" xml:space=\"preserve\">\n    <value>Посмотрите, что нового</value>\n  </data>\n  <data name=\"Reload\" xml:space=\"preserve\">\n    <value>Перезагрузить</value>\n  </data>\n  <data name=\"GetFail\" xml:space=\"preserve\">\n    <value>Не удалось получить</value>\n  </data>\n  <data name=\"NoAvailableItem\" xml:space=\"preserve\">\n    <value>Нет доступных товаров</value>\n  </data>\n  <data name=\"MineratCrashed\" xml:space=\"preserve\">\n    <value>Минекрат разбился</value>\n  </data>\n  <data name=\"TheVersionNameWillBeRenamedTo\" xml:space=\"preserve\">\n    <value>Название версии будет переименовано в: </value>\n  </data>\n  <data name=\"IncludeSpecialWord\" xml:space=\"preserve\">\n    <value>Содержит специальных персонажей</value>\n  </data>\n  <data name=\"FolderAlreadyExists\" xml:space=\"preserve\">\n    <value>Папка уже существует</value>\n  </data>\n  <data name=\"InstallFail\" xml:space=\"preserve\">\n    <value>Ошибка установки</value>\n  </data>\n  <data name=\"Install\" xml:space=\"preserve\">\n    <value>Установка</value>\n  </data>\n  <data name=\"InstallFinish\" xml:space=\"preserve\">\n    <value>Установка завершена</value>\n  </data>\n  <data name=\"CannotFandRightJava\" xml:space=\"preserve\">\n    <value>Не удалось найти нужную Java</value>\n  </data>\n  <data name=\"Refresh\" xml:space=\"preserve\">\n    <value>Обновить</value>\n  </data>\n  <data name=\"Mod\" xml:space=\"preserve\">\n    <value>Моды</value>\n  </data>\n  <data name=\"Overview\" xml:space=\"preserve\">\n    <value>Обзор</value>\n  </data>\n  <data name=\"Setting\" xml:space=\"preserve\">\n    <value>Настройки</value>\n  </data>\n  <data name=\"SavesFolder\" xml:space=\"preserve\">\n    <value>Архивировать папку</value>\n  </data>\n  <data name=\"ModsFolder\" xml:space=\"preserve\">\n    <value>Папка модуля</value>\n  </data>\n  <data name=\"ResourcePacksFolder\" xml:space=\"preserve\">\n    <value>Папка пакета ресурсов</value>\n  </data>\n  <data name=\"ShaderPacksFolder\" xml:space=\"preserve\">\n    <value>Папка Light Pack</value>\n  </data>\n  <data name=\"VersionFolder\" xml:space=\"preserve\">\n    <value>Папка версий</value>\n  </data>\n  <data name=\"EnableIndependencyCore\" xml:space=\"preserve\">\n    <value>Включите автономные ядра</value>\n  </data>\n  <data name=\"UseGlobalSetting\" xml:space=\"preserve\">\n    <value>Использовать общие настройки</value>\n  </data>\n  <data name=\"Off\" xml:space=\"preserve\">\n    <value>закрыть</value>\n  </data>\n  <data name=\"On\" xml:space=\"preserve\">\n    <value>включать</value>\n  </data>\n  <data name=\"AutoJoinServer\" xml:space=\"preserve\">\n    <value>Автоматически присоединяться к серверу</value>\n  </data>\n  <data name=\"EnableSelect\" xml:space=\"preserve\">\n    <value>Включить Проверено</value>\n  </data>\n  <data name=\"DisableSelect\" xml:space=\"preserve\">\n    <value>Отключить выбранное</value>\n  </data>\n  <data name=\"DeleteSelect\" xml:space=\"preserve\">\n    <value>Удалить выбранное</value>\n  </data>\n  <data name=\"SelectAll\" xml:space=\"preserve\">\n    <value>Выбрать всё</value>\n  </data>\n  <data name=\"DeselectAll\" xml:space=\"preserve\">\n    <value>Не выбирайте ни одного</value>\n  </data>\n  <data name=\"SelectedItem\" xml:space=\"preserve\">\n    <value>Выбранные элементы: </value>\n  </data>\n  <data name=\"MoveToRecycleBin\" xml:space=\"preserve\">\n    <value>Переместить в корзину</value>\n  </data>\n  <data name=\"WindowTitleBarStyle\" xml:space=\"preserve\">\n    <value>Стиль строки заголовка окна</value>\n  </data>\n  <data name=\"GetException\" xml:space=\"preserve\">\n    <value>Что-то пошло не так</value>\n  </data>\n  <data name=\"UnhandledException\" xml:space=\"preserve\">\n    <value>Необработанное исключение</value>\n  </data>\n  <data name=\"CustomHomePage\" xml:space=\"preserve\">\n    <value>Настройте главную страницу</value>\n  </data>\n  <data name=\"LocalSourceCode\" xml:space=\"preserve\">\n    <value>Локальный исходный код</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>Редактировать</value>\n  </data>\n  <data name=\"CustomHomePageSourceCodeError\" xml:space=\"preserve\">\n    <value>Ошибка исходного кода пользовательской главной страницы</value>\n  </data>\n  <data name=\"CheckUpdate\" xml:space=\"preserve\">\n    <value>Проверить обновления</value>\n  </data>\n  <data name=\"ChooseArchitecture\" xml:space=\"preserve\">\n    <value>Выберите площадку</value>\n  </data>\n  <data name=\"CheckUpdateFail\" xml:space=\"preserve\">\n    <value>Не удалось проверить наличие обновлений</value>\n  </data>\n  <data name=\"FoundNewVersion\" xml:space=\"preserve\">\n    <value>Откройте для себя новые версии</value>\n  </data>\n  <data name=\"GetUpdateUrl\" xml:space=\"preserve\">\n    <value>Получите обновленный унифицированный локатор ресурсов</value>\n  </data>\n  <data name=\"BeginDownload\" xml:space=\"preserve\">\n    <value>Начать загрузку</value>\n  </data>\n  <data name=\"UpdateFail\" xml:space=\"preserve\">\n    <value>Ошибка обновления</value>\n  </data>\n  <data name=\"ThisArchitectureCannotAutoUpdate\" xml:space=\"preserve\">\n    <value>Эта платформа не поддерживает автоматические обновления, откройте следующий путь, чтобы заменить ее вручную</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>Обновить</value>\n  </data>\n  <data name=\"DownloadFinish\" xml:space=\"preserve\">\n    <value>Загрузка завершена</value>\n  </data>\n  <data name=\"CurrentlyTheLatestVersion\" xml:space=\"preserve\">\n    <value>Текущая версия обновлена</value>\n  </data>\n  <data name=\"OpenSourceProjectUsageTable\" xml:space=\"preserve\">\n    <value>Лист использования проекта с открытым исходным кодом</value>\n  </data>\n  <data name=\"GPL3Text\" xml:space=\"preserve\">\n    <value>Лицензия YMCL является открытым исходным кодом по лицензии GPL 3.0 и может быть изменена и распространена, но программное обеспечение должно содержать уведомления об авторских правах и лицензиях для исходного кода, а также файл уведомлений, содержащий информацию о лицензии.</value>\n  </data>\n  <data name=\"ShowGameOutput\" xml:space=\"preserve\">\n    <value>Показать результат игры</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>поиск</value>\n  </data>\n  <data name=\"LoadMore\" xml:space=\"preserve\">\n    <value>Загрузи больше</value>\n  </data>\n  <data name=\"ErrorCallingApi\" xml:space=\"preserve\">\n    <value>Ошибка при вызове Api</value>\n  </data>\n  <data name=\"SearchNoResult\" xml:space=\"preserve\">\n    <value>Нет результатов для поиска</value>\n  </data>\n  <data name=\"AddLocalSong\" xml:space=\"preserve\">\n    <value>Добавьте аудиофайлы</value>\n  </data>\n  <data name=\"SelectMusicFile\" xml:space=\"preserve\">\n    <value>Выберите аудиофайл</value>\n  </data>\n  <data name=\"ThemeColor\" xml:space=\"preserve\">\n    <value>Цвет темы</value>\n  </data>\n  <data name=\"InitAudioLibraryFail\" xml:space=\"preserve\">\n    <value>Не удалось инициализировать аудио библиотеку</value>\n  </data>\n  <data name=\"InstallVlcTip\" xml:space=\"preserve\">\n    <value>Попытка выполнения:\n\n      sudo apt install libvlc-dev\n      sudo apt install vlc</value>\n  </data>\n  <data name=\"ThisFeatureIsCurrentlyUnderDevelopment\" xml:space=\"preserve\">\n    <value>Эта функция находится в разработке</value>\n  </data>\n  <data name=\"TreasureBox\" xml:space=\"preserve\">\n    <value>Сундук с сокровищами</value>\n  </data>\n  <data name=\"ActivateWinOffice\" xml:space=\"preserve\">\n    <value>Активируйте Windows/Office</value>\n  </data>\n  <data name=\"Run\" xml:space=\"preserve\">\n    <value>Работа</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindowsPlatform\" xml:space=\"preserve\">\n    <value>Эта функция доступна только в Windows</value>\n  </data>\n  <data name=\"RunCommandFail\" xml:space=\"preserve\">\n    <value>Не удалось запустить команду</value>\n  </data>\n  <data name=\"RunActivate\" xml:space=\"preserve\">\n    <value>Запустите активацию</value>\n  </data>\n  <data name=\"CancelActivateWin\" xml:space=\"preserve\">\n    <value>Деактивируйте Windows</value>\n  </data>\n  <data name=\"CancelActivateWinTip\" xml:space=\"preserve\">\n    <value>Это действие удалит состояние активации Windows, сделав недоступными такие функции, как персонализация Windows. Продолжить?</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindows10AndAbove\" xml:space=\"preserve\">\n    <value>Эта функция поддерживает только Windows 10 и выше, и системы ниже этой версии не гарантируют успешной активации</value>\n  </data>\n  <data name=\"PlayList\" xml:space=\"preserve\">\n    <value>Воспроизвести список</value>\n  </data>\n  <data name=\"ModName\" xml:space=\"preserve\">\n    <value>Название модуля</value>\n  </data>\n  <data name=\"GameVersion\" xml:space=\"preserve\">\n    <value>Версия игры</value>\n  </data>\n  <data name=\"AnyModLoader\" xml:space=\"preserve\">\n    <value>Любой погрузчик</value>\n  </data>\n  <data name=\"AnySource\" xml:space=\"preserve\">\n    <value>Все источники</value>\n  </data>\n  <data name=\"Download\" xml:space=\"preserve\">\n    <value>Загрузить</value>\n  </data>\n  <data name=\"SaveFile\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"DownloadFail\" xml:space=\"preserve\">\n    <value>Загрузка не удалась</value>\n  </data>\n  <data name=\"MatchingVersion\" xml:space=\"preserve\">\n    <value>Соответствующая версия</value>\n  </data>\n  <data name=\"ModifyMicrosoftSkin\" xml:space=\"preserve\">\n    <value>Microsoft</value>\n  </data>\n  <data name=\"SkinModel\" xml:space=\"preserve\">\n    <value>Модель кожи</value>\n  </data>\n  <data name=\"InputSkinFilePath\" xml:space=\"preserve\">\n    <value>Введите путь к файлу скина</value>\n  </data>\n  <data name=\"SelectSkinFile\" xml:space=\"preserve\">\n    <value>Выберите файл скина</value>\n  </data>\n  <data name=\"RefreshMicrosoftSkin\" xml:space=\"preserve\">\n    <value>Microsoft</value>\n  </data>\n  <data name=\"ModifySuccess\" xml:space=\"preserve\">\n    <value>Модификация прошла успешно</value>\n  </data>\n  <data name=\"ModifyFail\" xml:space=\"preserve\">\n    <value>Ошибка изменения</value>\n  </data>\n  <data name=\"IfInstallBedRock\" xml:space=\"preserve\">\n    <value>Если версия коренной породы не установлена, она не запустится</value>\n  </data>\n  <data name=\"BedRockVersion\" xml:space=\"preserve\">\n    <value>Bedrock Edition</value>\n  </data>\n  <data name=\"CannotOpenBedRockSetting\" xml:space=\"preserve\">\n    <value>Не удалось открыть настройки коренной породы</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivileges\" xml:space=\"preserve\">\n    <value>Обновите до прав администратора</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesFail\" xml:space=\"preserve\">\n    <value>Не удалось обновить права администратора</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesTip\" xml:space=\"preserve\">\n    <value>Для выполнения операции необходимо обновить права администратора. Нажмите кнопку ОК, чтобы перезапустить программу с правами администратора</value>\n  </data>\n  <data name=\"ChooseLanguage\" xml:space=\"preserve\">\n    <value>选择语言/Choose Language</value>\n  </data>\n  <data name=\"ReleaseTheMouseAndLetYmclProcessThisFile\" xml:space=\"preserve\">\n    <value>Отпустите мышь, чтобы YMCL обработал этот файл</value>\n  </data>\n  <data name=\"UnableToAddModsForBedrockEdition\" xml:space=\"preserve\">\n    <value>Модули не могут быть добавлены в Bedrock Edition</value>\n  </data>\n  <data name=\"AddTheFollowingFilesAsModsToTheCurrentVersion\" xml:space=\"preserve\">\n    <value>Добавьте следующие файлы в качестве модуля в текущую версию</value>\n  </data>\n  <data name=\"UnsupportedFileType\" xml:space=\"preserve\">\n    <value>Неподдерживаемый тип файла</value>\n  </data>\n  <data name=\"InstallTheFollowingFilesAsAnIntegrationPackageCurseforgeFormat\" xml:space=\"preserve\">\n    <value>Установите следующие файлы в качестве пакета интеграции (формат CurseForge)</value>\n  </data>\n  <data name=\"Unzip\" xml:space=\"preserve\">\n    <value>Распакуйте</value>\n  </data>\n  <data name=\"UnzipingModPack\" xml:space=\"preserve\">\n    <value>Распаковка интеграционного пакета</value>\n  </data>\n  <data name=\"FinsihUnzipModPack\" xml:space=\"preserve\">\n    <value>Распаковка интеграционного пакета завершена</value>\n  </data>\n  <data name=\"GetModPackInfo\" xml:space=\"preserve\">\n    <value>Получите информацию о пакете интеграции</value>\n  </data>\n  <data name=\"ModPackInfo\" xml:space=\"preserve\">\n    <value>Интегрируйте информацию о пакете</value>\n  </data>\n  <data name=\"ImportFailed\" xml:space=\"preserve\">\n    <value>Импорт не удался</value>\n  </data>\n  <data name=\"ImportSuccess\" xml:space=\"preserve\">\n    <value>Импорт выполнен успешно</value>\n  </data>\n  <data name=\"NoCrashInfo\" xml:space=\"preserve\">\n    <value>Нет информации о ДТП</value>\n  </data>\n  <data name=\"DownloadModPackMod\" xml:space=\"preserve\">\n    <value>Загрузите модуль Интеграционного пакета</value>\n  </data>\n  <data name=\"TotalNumberOfMod\" xml:space=\"preserve\">\n    <value>Общее количество модулей</value>\n  </data>\n  <data name=\"DownloadSuccess\" xml:space=\"preserve\">\n    <value>Загрузка выполнена успешно</value>\n  </data>\n  <data name=\"OverrideModPack\" xml:space=\"preserve\">\n    <value>Переопределите интеграционный пакет</value>\n  </data>\n  <data name=\"DownloadFailedFileAgain\" xml:space=\"preserve\">\n    <value>Не удалось повторно загрузить файл</value>\n  </data>\n  <data name=\"Plugin\" xml:space=\"preserve\">\n    <value>Плагины</value>\n  </data>\n  <data name=\"EnableAll\" xml:space=\"preserve\">\n    <value>Активируйте все</value>\n  </data>\n  <data name=\"DisableAll\" xml:space=\"preserve\">\n    <value>Отключить все</value>\n  </data>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>автор</value>\n  </data>\n  <data name=\"Version\" xml:space=\"preserve\">\n    <value>Версия</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>Описание</value>\n  </data>\n  <data name=\"NeedRestartApp\" xml:space=\"preserve\">\n    <value>Необходимо перезапустить YMCL</value>\n  </data>\n  <data name=\"OnlySupportsWindows10AndAboveSystems\" xml:space=\"preserve\">\n    <value>Поддерживает только Windows 10 и выше</value>\n  </data>\n  <data name=\"TaskCenter\" xml:space=\"preserve\">\n    <value>Центр задач</value>\n  </data>\n  <data name=\"AllType\" xml:space=\"preserve\">\n    <value>Все типы</value>\n  </data>\n  <data name=\"MaterialPack\" xml:space=\"preserve\">\n    <value>Набор материалов</value>\n  </data>\n  <data name=\"Map\" xml:space=\"preserve\">\n    <value>Карта</value>\n  </data>\n  <data name=\"CustomBackGroundImg\" xml:space=\"preserve\">\n    <value>Пользовательское фоновое изображение</value>\n  </data>\n  <data name=\"SelectImgFile\" xml:space=\"preserve\">\n    <value>Выберите файл изображения</value>\n  </data>\n  <data name=\"MusicNotAvailable\" xml:space=\"preserve\">\n    <value>Музыка недоступна</value>\n  </data>\n  <data name=\"MusicGetFail\" xml:space=\"preserve\">\n    <value>Не удалось получить музыку</value>\n  </data>\n  <data name=\"DownloadSource\" xml:space=\"preserve\">\n    <value>Скачать исходный код</value>\n  </data>\n  <data name=\"MaximumDownloadThread\" xml:space=\"preserve\">\n    <value>Максимальное количество загружаемых потоков</value>\n  </data>\n  <data name=\"DownloadThreadTooBigTip\" xml:space=\"preserve\">\n    <value>Поток загрузки слишком велик и может привести к сбою устройства</value>\n  </data>\n  <data name=\"Unknown\" xml:space=\"preserve\">\n    <value>Неизвестны</value>\n  </data>\n  <data name=\"ShaderPack\" xml:space=\"preserve\">\n    <value>Легкий Набор</value>\n  </data>\n  <data name=\"DataPack\" xml:space=\"preserve\">\n    <value>Пакеты</value>\n  </data>\n  <data name=\"Api\" xml:space=\"preserve\">\n    <value>API</value>\n  </data>\n  <data name=\"ModPack\" xml:space=\"preserve\">\n    <value>Интеграционный пакет</value>\n  </data>\n  <data name=\"SaveAudioFile\" xml:space=\"preserve\">\n    <value>Сохраните аудиофайл</value>\n  </data>\n  <data name=\"CustomUpdateUrl\" xml:space=\"preserve\">\n    <value>Пользовательский URL-адрес обновления</value>\n  </data>\n  <data name=\"LyricTip\" xml:space=\"preserve\">\n    <value>I am the lyrics ヾ(≧▽≦*)o</value>\n  </data>\n  <data name=\"MusicPlayerOnlySupportWindows\" xml:space=\"preserve\">\n    <value>Музыкальный проигрыватель поддерживает только Windows</value>\n  </data>\n  <data name=\"LoadAudioFileFail\" xml:space=\"preserve\">\n    <value>Не удалось загрузить аудиофайл</value>\n  </data>\n  <data name=\"LaunchCore\" xml:space=\"preserve\">\n    <value>Запустите ядро</value>\n  </data>\n  <data name=\"AfterLaunchKeepLauncherVisible\" xml:space=\"preserve\">\n    <value>Оставьте без изменений после завершения запуска</value>\n  </data>\n  <data name=\"AfterLaunchMakeLauncherMinimize\" xml:space=\"preserve\">\n    <value>Свернуть после завершения запуска</value>\n  </data>\n  <data name=\"AfterLaunchExitLauncher\" xml:space=\"preserve\">\n    <value>Закрыть по завершении запуска</value>\n  </data>\n  <data name=\"AfterLaunchHideAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>Скрыть после завершения запуска, показать после выхода из игры</value>\n  </data>\n  <data name=\"LauncherVisibility\" xml:space=\"preserve\">\n    <value>Видимость пусковой установки</value>\n  </data>\n  <data name=\"AfterLaunchMinimizeAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>Свернуть после запуска, показать после выхода из игры</value>\n  </data>\n  <data name=\"UnofficialTip\" xml:space=\"preserve\">\n    <value>Текущая версия является неофициальной и может быть уязвима для вирусов.\n      Перенаправьте на https://ymcl.yik.at/, чтобы загрузить официальную версию.</value>\n  </data>\n  <data name=\"LanguageTip\" xml:space=\"preserve\">\n    <value>Вам нужно выбрать язык, прежде чем вы сможете начать настройку Yu Minecraft Launcher.</value>\n  </data>\n  <data name=\"Account\" xml:space=\"preserve\">\n    <value>Аккаунт</value>\n  </data>\n  <data name=\"WindowTitleBarStyleTip\" xml:space=\"preserve\">\n    <value>Установите стиль заголовка окна лаунчера, в некоторых случаях стиль лаунчера не поддерживается.</value>\n  </data>\n  <data name=\"SystemStyle\" xml:space=\"preserve\">\n    <value>Системный стиль</value>\n  </data>\n  <data name=\"LauncherStyle\" xml:space=\"preserve\">\n    <value>Стиль пусковой установки</value>\n  </data>\n  <data name=\"MinecraftFolderTip\" xml:space=\"preserve\">\n    <value>Папка для данных Minecraft (.minecraft)</value>\n  </data>\n  <data name=\"ExistingNow\" xml:space=\"preserve\">\n    <value>Существующий</value>\n  </data>\n  <data name=\"JavaRuntime\" xml:space=\"preserve\">\n    <value>Java Runtime</value>\n  </data>\n  <data name=\"JavaRuntimeTip\" xml:space=\"preserve\">\n    <value>Для запуска игры требуется хотя бы одна среда выполнения Java.</value>\n  </data>\n  <data name=\"AccountTip\" xml:space=\"preserve\">\n    <value>Для запуска игры требуется хотя бы одна учетная запись. Если вы используете автономную учетную запись, вы не сможете войти на сервер с подлинной аутентификацией.</value>\n  </data>\n  <data name=\"MusicApi\" xml:space=\"preserve\">\n    <value>Музыка Api</value>\n  </data>\n  <data name=\"ProjectInfo\" xml:space=\"preserve\">\n    <value>Информация о проекте</value>\n  </data>\n  <data name=\"SaveAs\" xml:space=\"preserve\">\n    <value>Сохранить как</value>\n  </data>\n  <data name=\"DeskLyricColor\" xml:space=\"preserve\">\n    <value>Цвет текста песни Desktop</value>\n  </data>\n  <data name=\"DeskLyricAlignment\" xml:space=\"preserve\">\n    <value>Выравнивание текста на рабочем столе</value>\n  </data>\n  <data name=\"AlignLeft\" xml:space=\"preserve\">\n    <value>Выровнять по левому краю</value>\n  </data>\n  <data name=\"AlignCenter\" xml:space=\"preserve\">\n    <value>Выравнивание по центру</value>\n  </data>\n  <data name=\"AlignRight\" xml:space=\"preserve\">\n    <value>Выровняйте по правому краю</value>\n  </data>\n  <data name=\"DeskLyricSize\" xml:space=\"preserve\">\n    <value>Размер текста на рабочем столе</value>\n  </data>\n  <data name=\"AutoUpdate\" xml:space=\"preserve\">\n    <value>Автоматическое обновление</value>\n  </data>\n  <data name=\"SkipThisVersion\" xml:space=\"preserve\">\n    <value>Пропустить эту версию</value>\n  </data>\n  <data name=\"SkipVersionTip\" xml:space=\"preserve\">\n    <value>Версия пропущена: {version}\n      Перейдите в Настройки - Средство запуска - Проверьте наличие обновлений, чтобы снова получить эту версию</value>\n  </data>\n  <data name=\"WinSevenAutoUpdateTip\" xml:space=\"preserve\">\n    <value>Найдена новая версия: {version}\n      автоматические обновления не поддерживаются на системах ниже Win10 (за исключением 10)\n      Скачайте новую версию по ссылке: «{url}»\n      Перейдите в Настройки - Загрузки - Автоматические обновления, чтобы отключить автоматическую проверку обновлений</value>\n  </data>\n  <data name=\"OpenBrowser\" xml:space=\"preserve\">\n    <value>Откройте браузер</value>\n  </data>\n  <data name=\"CustomHomePageWay_Presetting_JavaNews\" xml:space=\"preserve\">\n    <value>Предустановка - Новости Java</value>\n  </data>\n  <data name=\"NetworkSource\" xml:space=\"preserve\">\n    <value>Сетевой источник</value>\n  </data>\n  <data name=\"NoSupportNow\" xml:space=\"preserve\">\n    <value>Сейчас не поддерживается</value>\n  </data>\n  <data name=\"AggregateSearchTip\" xml:space=\"preserve\">\n    <value>Введите ключевые слова для поиска в YMCL</value>\n  </data>\n  <data name=\"CannotRecognitionTheVersion\" xml:space=\"preserve\">\n    <value>Выбранная версия не распознана</value>\n  </data>\n  <data name=\"LocalResource\" xml:space=\"preserve\">\n    <value>Местные ресурсы</value>\n  </data>\n  <data name=\"InstallVersion\" xml:space=\"preserve\">\n    <value>Installed version</value>\n  </data>\n  <data name=\"JumpSearch\" xml:space=\"preserve\">\n    <value>Перейти к поиску</value>\n  </data>\n  <data name=\"AggregateSearchWatermark\" xml:space=\"preserve\">\n    <value>Введите ключевые слова для поиска в YMCL</value>\n  </data>\n  <data name=\"SwitchedTo\" xml:space=\"preserve\">\n    <value>Переключено на</value>\n  </data>\n  <data name=\"JumpToSearchTip\" xml:space=\"preserve\">\n    <value>Вы будете перенаправлены на {target} для поиска по этому ключевому слову</value>\n  </data>\n  <data name=\"SearchInTip\" xml:space=\"preserve\">\n    <value>Искать в {target}</value>\n  </data>\n  <data name=\"Music\" xml:space=\"preserve\">\n    <value>Музыка</value>\n  </data>\n  <data name=\"ExistAccount\" xml:space=\"preserve\">\n    <value>Существующая учетная запись</value>\n  </data>\n  <data name=\"DisplayIndependentTaskWindow\" xml:space=\"preserve\">\n    <value>Показать отдельное окно задачи</value>\n  </data>\n  <data name=\"Sponsor\" xml:space=\"preserve\">\n    <value>Спонсировано</value>\n  </data>\n  <data name=\"Sponsors\" xml:space=\"preserve\">\n    <value>Спонсор</value>\n  </data>\n  <data name=\"SponsorsTip\" xml:space=\"preserve\">\n    <value>Ниже перечислены спонсоры производства электроэнергии, спасибо за поддержку Yu Minecraft Launcher!</value>\n  </data>\n  <data name=\"MacOsUpdateTip\" xml:space=\"preserve\">\n    <value>Найдена новая версия: {version}\n      MacO не поддерживают автоматические обновления\n      Скачайте новую версию по ссылке: «{url}»\n      Перейдите в Настройки - Загрузки - Автоматические обновления, чтобы отключить автоматическую проверку обновлений</value>\n  </data>\n  <data name=\"AlreadyCopyToClipBoard\" xml:space=\"preserve\">\n    <value>Скопировано в буфер обмена</value>\n  </data>\n  <data name=\"UsedMem\" xml:space=\"preserve\">\n    <value>Память использована</value>\n  </data>\n  <data name=\"CannotLoad\" xml:space=\"preserve\">\n    <value>Невозможно загрузить</value>\n  </data>\n  <data name=\"LoadFail\" xml:space=\"preserve\">\n    <value>Не удалось загрузить</value>\n  </data>\n  <data name=\"ToggleNav\" xml:space=\"preserve\">\n    <value>Переключить навигацию</value>\n  </data>\n  <data name=\"NoWorkingTask\" xml:space=\"preserve\">\n    <value>Пока нет текущих задач</value>\n  </data>\n  <data name=\"CrashLa\" xml:space=\"preserve\">\n    <value>Crash! (• ω • `) o</value>\n  </data>\n  <data name=\"YMCLHappenError\" xml:space=\"preserve\">\n    <value>Необработанное исключение в Yu Minecraft Launcher</value>\n  </data>\n  <data name=\"DetailedInfo\" xml:space=\"preserve\">\n    <value>Предоставляемая</value>\n  </data>\n  <data name=\"UnhandledErrorTip\" xml:space=\"preserve\">\n    <value>Запуск Yu Minecraft Launcher столкнулся с необработанным исключением и может не продолжаться. Ниже приведены подробности исключения</value>\n  </data>\n  <data name=\"Copy\" xml:space=\"preserve\">\n    <value>Копирование</value>\n  </data>\n  <data name=\"NoMatterErrorAndKeepOnRun\" xml:space=\"preserve\">\n    <value>Игнорируйте ошибку и вынудите операцию продолжить</value>\n  </data>\n  <data name=\"ExitApp\" xml:space=\"preserve\">\n    <value>Выйти из приложения</value>\n  </data>\n  <data name=\"RestartApp\" xml:space=\"preserve\">\n    <value>Перезапустите приложение</value>\n  </data>\n  <data name=\"LoadBackGroudFromPicFailTip\" xml:space=\"preserve\">\n    <value>Не удалось загрузить фоновое изображение из файла изображения, проверьте правильность формата изображения</value>\n  </data>\n  <data name=\"CustomBackground\" xml:space=\"preserve\">\n    <value>Пользовательский фон</value>\n  </data>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>По умолчанию</value>\n  </data>\n  <data name=\"BackGroundImg\" xml:space=\"preserve\">\n    <value>фоновое изображение</value>\n  </data>\n  <data name=\"AcrylicBlur\" xml:space=\"preserve\">\n    <value>Акрил</value>\n  </data>\n  <data name=\"Transparent\" xml:space=\"preserve\">\n    <value>Транспарентность</value>\n  </data>\n  <data name=\"CannotFindMinecraftFolder\" xml:space=\"preserve\">\n    <value>Не удалось найти папку Minecraft</value>\n  </data>\n  <data name=\"OneSentence\" xml:space=\"preserve\">\n    <value>Одним словом</value>\n  </data>\n  <data name=\"TodayLuckyValue\" xml:space=\"preserve\">\n    <value>Характер дня</value>\n  </data>\n  <data name=\"CannotLoadVersionSetting\" xml:space=\"preserve\">\n    <value>Не удалось загрузить настройки версии</value>\n  </data>\n  <data name=\"TodayLuckyValueTip\" xml:space=\"preserve\">\n    <value>Сегодняшнее значение символа: {value}!</value>\n  </data>\n  <data name=\"IKnow\" xml:space=\"preserve\">\n    <value>Я знаю это</value>\n  </data>\n  <data name=\"LuckyValueTip\" xml:space=\"preserve\">\n    <value>Сегодняшняя удача может быть плохой, но не расстраивайтесь, завтра будет лучше!/nСегодняшняя удача немного плохая./nСегодняшняя удача средняя./nСегодняшняя удача хорошая./nСегодняшняя удача хорошая!/nСегодняшняя удача очень хорошая!/nСегодняшняя удача ломается!/n</value>\n  </data>\n  <data name=\"NeverClick\" xml:space=\"preserve\">\n    <value>Не смей</value>\n  </data>\n  <data name=\"NeverClickTip\" xml:space=\"preserve\">\n    <value>Эта операция может вызвать странные проблемы, вы уверены, что хотите продолжить?</value>\n  </data>\n  <data name=\"Tip\" xml:space=\"preserve\">\n    <value>Указатель</value>\n  </data>\n  <data name=\"GameMainFileDeletion\" xml:space=\"preserve\">\n    <value>Отсутствует основной файл игры</value>\n  </data>\n  <data name=\"GameUpdateLog\" xml:space=\"preserve\">\n    <value>Журнал изменений</value>\n  </data>\n  <data name=\"SureToInstallTheJava\" xml:space=\"preserve\">\n    <value>Вы уверены, что хотите установить Java: {Java}?</value>\n  </data>\n  <data name=\"MaxFileFragmentation\" xml:space=\"preserve\">\n    <value>Максимальная фрагментация файла</value>\n  </data>\n  <data name=\"CreateDownloadTask\" xml:space=\"preserve\">\n    <value>Создайте задачу загрузки</value>\n  </data>\n  <data name=\"CustomDownload\" xml:space=\"preserve\">\n    <value>Пользовательская загрузка</value>\n  </data>\n  <data name=\"Locate\" xml:space=\"preserve\">\n    <value>Позиционирование</value>\n  </data>\n  <data name=\"DownloadUrl\" xml:space=\"preserve\">\n    <value>Ссылка для скачивания</value>\n  </data>\n  <data name=\"DisplayName\" xml:space=\"preserve\">\n    <value>Отображаемое имя</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>Миссии</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"More\" xml:space=\"preserve\">\n    <value>Больше</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"About\" xml:space=\"preserve\">\n    <value>ПО ВОПРОСАМ БЕЗОПАСНОСТИ В ЦЕНТРАЛЬНОЙ АФРИКЕ</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Personalize\" xml:space=\"preserve\">\n    <value>Персонализация</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Launcher\" xml:space=\"preserve\">\n    <value>Пусковая установка</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerUrlError\" xml:space=\"preserve\">\n    <value>Ошибка URL-адреса сервера</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Waiting\" xml:space=\"preserve\">\n    <value>Ожидание</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Running\" xml:space=\"preserve\">\n    <value>В процессе</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Paused\" xml:space=\"preserve\">\n    <value>Пауза</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>Ошибка</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Finished\" xml:space=\"preserve\">\n    <value>Завершено</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>Убрать</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"BuildLaunchConfig\" xml:space=\"preserve\">\n    <value>Создайте элемент конфигурации запуска</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckLaunchArg\" xml:space=\"preserve\">\n    <value>Проверьте параметры запуска</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"RefreshAccountToken\" xml:space=\"preserve\">\n    <value>Обновить маркер пользователя</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchMinecraftProcess\" xml:space=\"preserve\">\n    <value>Начните процесс Minecraft</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceled\" xml:space=\"preserve\">\n    <value>Отменено</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceling\" xml:space=\"preserve\">\n    <value>Отмена</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckVersionResource\" xml:space=\"preserve\">\n    <value>Проверьте ресурсы версии</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadResource\" xml:space=\"preserve\">\n    <value>Загрузите ресурсы</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Return\" xml:space=\"preserve\">\n    <value>Назад</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ScreenshotsFolder\" xml:space=\"preserve\">\n    <value>Папка скриншотов</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Saves\" xml:space=\"preserve\">\n    <value>файл сохранения</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Screenshots\" xml:space=\"preserve\">\n    <value>Скриншот</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResourcePacks\" xml:space=\"preserve\">\n    <value>Набор ресурсов</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoMatchResult\" xml:space=\"preserve\">\n    <value>Нет подходящих результатов</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CreateTime\" xml:space=\"preserve\">\n    <value>Время создания</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastModifiedTime\" xml:space=\"preserve\">\n    <value>Последнее изменение&amp;#xA0;%s</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveInfo\" xml:space=\"preserve\">\n    <value>Архивировать информацию</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>Название</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PlayerCount\" xml:space=\"preserve\">\n    <value>Количество игроков</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DataPackCount\" xml:space=\"preserve\">\n    <value>Количество пакетов</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportTime\" xml:space=\"preserve\">\n    <value>Импортировать время</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CanceledUpdate\" xml:space=\"preserve\">\n    <value>Обновление отменено</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ApiError\" xml:space=\"preserve\">\n    <value>Ошибка API</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NetWorkError\" xml:space=\"preserve\">\n    <value>Ошибка сети</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"KillProcess\" xml:space=\"preserve\">\n    <value>Завершите процесс</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchArguments\" xml:space=\"preserve\">\n    <value>Параметры запуска</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DisplayLaunchArguments\" xml:space=\"preserve\">\n    <value>Показать параметры запуска</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResetData\" xml:space=\"preserve\">\n    <value>Сбросить данные</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FixLoadDataFailTip\" xml:space=\"preserve\">\n    <value>При загрузке данных возникло исключение, которое может быть связано с повреждением данных. Вы хотите сбросить данные YMCL, чтобы исправить это?</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Export\" xml:space=\"preserve\">\n    <value>Экспорт</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportLogFile\" xml:space=\"preserve\">\n    <value>Экспортировать файл журнала</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoScrollToEnd\" xml:space=\"preserve\">\n    <value>Автоматически прокручивать до конца</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GetJavaInfoFail\" xml:space=\"preserve\">\n    <value>Не удалось получить информацию о Java\n      Возможно, эта Java неверна/повреждена/не имеет прав на выполнение</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Seed\" xml:space=\"preserve\">\n    <value>Семена</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllowCommands\" xml:space=\"preserve\">\n    <value>Разрешить команды</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GameType\" xml:space=\"preserve\">\n    <value>Тип игры</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastPlayTime\" xml:space=\"preserve\">\n    <value>Время последней игры</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoDescription\" xml:space=\"preserve\">\n    <value>Нет описания</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Mica\" xml:space=\"preserve\">\n    <value>Слюда</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"TranslucentBackgroundOpacity\" xml:space=\"preserve\">\n    <value>Непрозрачность полупрозрачного элемента управления фоном</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MusicApiWithIP\" xml:space=\"preserve\">\n    <value>Music Api поставляется с IP-адресом</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoIdentifiedPlugins\" xml:space=\"preserve\">\n    <value>Плагины еще не определены</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LoadPluginError\" xml:space=\"preserve\">\n    <value>Ошибка загрузки плагина</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Unrecognized\" xml:space=\"preserve\">\n    <value>Неизвестно</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportModPack\" xml:space=\"preserve\">\n    <value>Импортируйте интеграционный пакет</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Prepare\" xml:space=\"preserve\">\n    <value>Приготовиться</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"VersionIdCannotBeEmpty\" xml:space=\"preserve\">\n    <value>Идентификатор версии не может быть пустым</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"InstallModPack\" xml:space=\"preserve\">\n    <value>Установите интеграционный пакет</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PrepareInstall\" xml:space=\"preserve\">\n    <value>Готово к установке</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveSkinFile\" xml:space=\"preserve\">\n    <value>Сохранить файл скина</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveFinish\" xml:space=\"preserve\">\n    <value>Сохранено</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CornerRadius\" xml:space=\"preserve\">\n    <value>Радиус закругления</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableTranslucentSpecialControlList\" xml:space=\"preserve\">\n    <value>Включить полупрозрачный специальный контрольный список</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoticeWay\" xml:space=\"preserve\">\n    <value>Способ уведомления</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationCard\" xml:space=\"preserve\">\n    <value>Карта уведомлений</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationBubble\" xml:space=\"preserve\">\n    <value>Пузыри уведомлений</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExampleNotification\" xml:space=\"preserve\">\n    <value>Примеры уведомлений</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrentListIsEmpty\" xml:space=\"preserve\">\n    <value>Текущий список пуст</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Import\" xml:space=\"preserve\">\n    <value>Импорт</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HopeHowToHandleTheFile\" xml:space=\"preserve\">\n    <value>Что вы хотите сделать с этим файлом</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsResourcePackImport\" xml:space=\"preserve\">\n    <value>Импортировать как пакет активов</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsShaderPackImport\" xml:space=\"preserve\">\n    <value>Импортируется как легкий пакет</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Conflict\" xml:space=\"preserve\">\n    <value>Противоречит</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FileConflictTip\" xml:space=\"preserve\">\n    <value>Конфликт файлов, в папке назначения уже есть файл с таким именем, как вы хотите обработать операцию копирования?</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Cover\" xml:space=\"preserve\">\n    <value>Перезаписать</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Rename\" xml:space=\"preserve\">\n    <value>&amp;Переименовать</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportFinish\" xml:space=\"preserve\">\n    <value>Импорт завершен</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SureToImportTheFile\" xml:space=\"preserve\">\n    <value>ОК для импорта этого файла</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllImport\" xml:space=\"preserve\">\n    <value>Импортировать все</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MinecraftVersion\" xml:space=\"preserve\">\n    <value>Версия Minecraft</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>Стартовая страница</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HotResource\" xml:space=\"preserve\">\n    <value>Лучшие ресурсы</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"All\" xml:space=\"preserve\">\n    <value>полностью</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerPack\" xml:space=\"preserve\">\n    <value>Пакет сервера</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadUrlParserFail\" xml:space=\"preserve\">\n    <value>Не удалось выполнить разбор ссылок для загрузки</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Destroy\" xml:space=\"preserve\">\n    <value>Уничтожить</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourite\" xml:space=\"preserve\">\n    <value>Коллекционирование</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourted\" xml:space=\"preserve\">\n    <value>Сохранено</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourites\" xml:space=\"preserve\">\n    <value>Закладка</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrectSystemNoSupportAutoUpdateTip\" xml:space=\"preserve\">\n    <value>Автоматические обновления не поддерживаются в текущей системе\n      Откройте Настройки - Загрузки, чтобы отключить автоматические обновления.\n      Вы можете вручную загрузить последнюю версию и заменить файл программы</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DependencyItems\" xml:space=\"preserve\">\n    <value>Зависимости</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportOrExportSetting\" xml:space=\"preserve\">\n    <value>Настройки импорта/экспорта</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingTip\" xml:space=\"preserve\">\n    <value>Выберите настройки, которые вы хотите экспортировать</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Ui\" xml:space=\"preserve\">\n    <value>Настройки интерфейса</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Net\" xml:space=\"preserve\">\n    <value>Настройки сети</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Launch\" xml:space=\"preserve\">\n    <value>Запустите настройки</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Account\" xml:space=\"preserve\">\n    <value>Данные учетной записи (за исключением учетной записи Майкрософт)</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Other\" xml:space=\"preserve\">\n    <value>Другое</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSuccess\" xml:space=\"preserve\">\n    <value>Экспорт выполнен успешно</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingSuccessTip\" xml:space=\"preserve\">\n    <value>Экспорт выполнен успешно, объем данных слишком велик для отображения, нажмите «Копировать», чтобы скопировать все данные</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportSettingTextBoxWatermark\" xml:space=\"preserve\">\n    <value>Введите шестнадцатеричные данные</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ReadClipBoard\" xml:space=\"preserve\">\n    <value>Читать буфер обмена</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CopyToClipBoard\" xml:space=\"preserve\">\n    <value>Копировать в буфер обмена</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OpenFile\" xml:space=\"preserve\">\n    <value>&amp;Открыть файл</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"WriteIn\" xml:space=\"preserve\">\n    <value>Пишите</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateFailed\" xml:space=\"preserve\">\n    <value>Не удалось выполнить операцию</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateSuccess\" xml:space=\"preserve\">\n    <value>Операция выполнена успешно</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NeedToManuallyOpenTheTerminalAndExecuteTheFollowingCommand\" xml:space=\"preserve\">\n    <value>Вам необходимо вручную открыть терминал, чтобы выполнить следующую команд</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AccountName\" xml:space=\"preserve\">\n    <value>Наименование счёта</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AddNewAccountUuid\" xml:space=\"preserve\">\n    <value>Uuid, оставьте пустым для автоматической генерации</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoAllocate\" xml:space=\"preserve\">\n    <value>Автоматическое назначение</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableAutoAllocateMem\" xml:space=\"preserve\">\n    <value>Включить автоматическое выделение памяти</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Custom\" xml:space=\"preserve\">\n    <value>Пользовательское</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FastLaunch\" xml:space=\"preserve\">\n    <value>Быстрый старт</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>Добавить</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Icon\" xml:space=\"preserve\">\n    <value>Иконка</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetIcon\" xml:space=\"preserve\">\n    <value>Задать иконку</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetServer\" xml:space=\"preserve\">\n    <value>Настройте свой сервер</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>удалять</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"JavaRuntimeError\" xml:space=\"preserve\">\n    <value>Ошибка выполнения Java</value>\n    <comment>#TODO#_</comment>\n  </data>\n</root>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Langs/MainLang.zh-Hant.resx",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"Launch\" xml:space=\"preserve\">\n    <value>啟動</value>\n  </data>\n  <data name=\"MinecraftFolder\" xml:space=\"preserve\">\n    <value>Minecraft資料夾</value>\n  </data>\n  <data name=\"DelSelectedItem\" xml:space=\"preserve\">\n    <value>刪除選取項目</value>\n  </data>\n  <data name=\"AddFolder\" xml:space=\"preserve\">\n    <value>新增資料夾</value>\n  </data>\n  <data name=\"SelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>選擇'.minecraft'資料夾</value>\n  </data>\n  <data name=\"NeedToSelectMinecraftFolder\" xml:space=\"preserve\">\n    <value>需選擇'.minecraft'資料夾</value>\n  </data>\n  <data name=\"SuccessAdd\" xml:space=\"preserve\">\n    <value>添加成功</value>\n  </data>\n  <data name=\"TheItemAlreadyExist\" xml:space=\"preserve\">\n    <value>已存在此項目</value>\n  </data>\n  <data name=\"SuccessRemove\" xml:space=\"preserve\">\n    <value>刪除成功</value>\n  </data>\n  <data name=\"AutoScan\" xml:space=\"preserve\">\n    <value>自動掃描</value>\n  </data>\n  <data name=\"LetYMCLChooseJava\" xml:space=\"preserve\">\n    <value>讓YMCL選擇合適的Java</value>\n  </data>\n  <data name=\"ScanJavaSuccess\" xml:space=\"preserve\">\n    <value>掃描Java成功</value>\n  </data>\n  <data name=\"RepeatItem\" xml:space=\"preserve\">\n    <value>重複的項目</value>\n  </data>\n  <data name=\"OpenFileWay\" xml:space=\"preserve\">\n    <value>開啟檔案方式</value>\n  </data>\n  <data name=\"FileSelectWindow\" xml:space=\"preserve\">\n    <value>文件選擇視窗</value>\n  </data>\n  <data name=\"ManualInput\" xml:space=\"preserve\">\n    <value>手動輸入</value>\n  </data>\n  <data name=\"Ok\" xml:space=\"preserve\">\n    <value>確定</value>\n  </data>\n  <data name=\"Cancel\" xml:space=\"preserve\">\n    <value>取消</value>\n  </data>\n  <data name=\"InputFolderPath\" xml:space=\"preserve\">\n    <value>輸入資料夾路徑</value>\n  </data>\n  <data name=\"FolderNotExist\" xml:space=\"preserve\">\n    <value>資料夾不存在</value>\n  </data>\n  <data name=\"InputFilePath\" xml:space=\"preserve\">\n    <value>輸入檔路徑</value>\n  </data>\n  <data name=\"FileNotExist\" xml:space=\"preserve\">\n    <value>檔不存在</value>\n  </data>\n  <data name=\"ManualAdd\" xml:space=\"preserve\">\n    <value>手動添加</value>\n  </data>\n  <data name=\"SelectJava\" xml:space=\"preserve\">\n    <value>選擇Java</value>\n  </data>\n  <data name=\"TheJavaIsError\" xml:space=\"preserve\">\n    <value>Java不正確</value>\n  </data>\n  <data name=\"AddNewAccount\" xml:space=\"preserve\">\n    <value>新增帳戶</value>\n  </data>\n  <data name=\"OfflineLogin\" xml:space=\"preserve\">\n    <value>離線登入</value>\n  </data>\n  <data name=\"MicrosoftLogin\" xml:space=\"preserve\">\n    <value>微軟登入</value>\n  </data>\n  <data name=\"ThirdPartyLogin\" xml:space=\"preserve\">\n    <value>第三方登入</value>\n  </data>\n  <data name=\"SelectAccountType\" xml:space=\"preserve\">\n    <value>選擇帳戶類型</value>\n  </data>\n  <data name=\"AccountNameCannotBeNull\" xml:space=\"preserve\">\n    <value>帳戶名稱不可為空白</value>\n  </data>\n  <data name=\"InputAccountName\" xml:space=\"preserve\">\n    <value>輸入帳戶名稱</value>\n  </data>\n  <data name=\"VerificationCode\" xml:space=\"preserve\">\n    <value>驗證程式碼</value>\n  </data>\n  <data name=\"Loading\" xml:space=\"preserve\">\n    <value>載入中...</value>\n  </data>\n  <data name=\"CopyCodeAndOPenBrowser\" xml:space=\"preserve\">\n    <value>複製程式碼並開啟瀏覽器</value>\n  </data>\n  <data name=\"WaitForMicrosoftVerification\" xml:space=\"preserve\">\n    <value>正在等待微軟帳戶驗證完成\n      跳轉至瀏覽器完成驗證</value>\n  </data>\n  <data name=\"LoginFail\" xml:space=\"preserve\">\n    <value>登入失敗</value>\n  </data>\n  <data name=\"VerifyingAccount\" xml:space=\"preserve\">\n    <value>正在驗證帳戶</value>\n  </data>\n  <data name=\"VerificationServer\" xml:space=\"preserve\">\n    <value>驗證伺服器</value>\n  </data>\n  <data name=\"EmailAddress\" xml:space=\"preserve\">\n    <value>信箱地址</value>\n  </data>\n  <data name=\"AccountPassword\" xml:space=\"preserve\">\n    <value>帳戶密碼</value>\n  </data>\n  <data name=\"YggdrasilServerUrlIsEmpty\" xml:space=\"preserve\">\n    <value>驗證伺服器不可為空</value>\n  </data>\n  <data name=\"YggdrasilPasswordIsEmpty\" xml:space=\"preserve\">\n    <value>密碼不可為空</value>\n  </data>\n  <data name=\"YggdrasilEmailIsEmpty\" xml:space=\"preserve\">\n    <value>信箱不可為空</value>\n  </data>\n  <data name=\"Language\" xml:space=\"preserve\">\n    <value>語言</value>\n  </data>\n  <data name=\"ColorMode\" xml:space=\"preserve\">\n    <value>色彩模式</value>\n  </data>\n  <data name=\"FollowSystem\" xml:space=\"preserve\">\n    <value>跟隨系統</value>\n  </data>\n  <data name=\"Light\" xml:space=\"preserve\">\n    <value>淺色</value>\n  </data>\n  <data name=\"Dark\" xml:space=\"preserve\">\n    <value>深色</value>\n  </data>\n  <data name=\"MaxMem\" xml:space=\"preserve\">\n    <value>最大記憶體</value>\n  </data>\n  <data name=\"CannotOpenBrowser\" xml:space=\"preserve\">\n    <value>無法開啟瀏覽器</value>\n  </data>\n  <data name=\"ManualOpen\" xml:space=\"preserve\">\n    <value>手動打開</value>\n  </data>\n  <data name=\"CopyUrlAndManualOpen\" xml:space=\"preserve\">\n    <value>Ctrl + C 複製以下連結並貼上到瀏覽器</value>\n  </data>\n  <data name=\"VersionList\" xml:space=\"preserve\">\n    <value>版本清單</value>\n  </data>\n  <data name=\"VersionSetting\" xml:space=\"preserve\">\n    <value>版本設定</value>\n  </data>\n  <data name=\"LaunchGame\" xml:space=\"preserve\">\n    <value>啟動遊戲</value>\n  </data>\n  <data name=\"NoChooseGame\" xml:space=\"preserve\">\n    <value>未選擇遊戲</value>\n  </data>\n  <data name=\"ReturnWithIcon\" xml:space=\"preserve\">\n    <value>返回</value>\n  </data>\n  <data name=\"CreateGameEntryFail\" xml:space=\"preserve\">\n    <value>創建遊戲實例失敗</value>\n  </data>\n  <data name=\"NoChooseGameOrCannotFindGame\" xml:space=\"preserve\">\n    <value>未選擇遊戲或無法找到遊戲</value>\n  </data>\n  <data name=\"AccountError\" xml:space=\"preserve\">\n    <value>帳戶錯誤</value>\n  </data>\n  <data name=\"LaunchProgress\" xml:space=\"preserve\">\n    <value>啟動進度</value>\n  </data>\n  <data name=\"BuildLaunchConfigFail\" xml:space=\"preserve\">\n    <value>建置啟動配置失敗</value>\n  </data>\n  <data name=\"GameExited\" xml:space=\"preserve\">\n    <value>遊戲已退出</value>\n  </data>\n  <data name=\"WaitForGameWindowAppear\" xml:space=\"preserve\">\n    <value>等待遊戲視窗出現</value>\n  </data>\n  <data name=\"LaunchFinish\" xml:space=\"preserve\">\n    <value>啟動完成</value>\n  </data>\n  <data name=\"LaunchFail\" xml:space=\"preserve\">\n    <value>啟動失敗</value>\n  </data>\n  <data name=\"UserDataFolder\" xml:space=\"preserve\">\n    <value>使用者資料夾</value>\n  </data>\n  <data name=\"OpenFolder\" xml:space=\"preserve\">\n    <value>打開資料夾</value>\n  </data>\n  <data name=\"AutoInstall\" xml:space=\"preserve\">\n    <value>自動安裝</value>\n  </data>\n  <data name=\"LatestVersion\" xml:space=\"preserve\">\n    <value>最新版本</value>\n  </data>\n  <data name=\"PreviewVersion\" xml:space=\"preserve\">\n    <value>預覽版本</value>\n  </data>\n  <data name=\"ReleaseVersion\" xml:space=\"preserve\">\n    <value>正式版本</value>\n  </data>\n  <data name=\"GetInstallableVersionFail\" xml:space=\"preserve\">\n    <value>取得可安裝清單失敗</value>\n  </data>\n  <data name=\"OldVersion\" xml:space=\"preserve\">\n    <value>遠古版</value>\n  </data>\n  <data name=\"AllVersion\" xml:space=\"preserve\">\n    <value>所有版本</value>\n  </data>\n  <data name=\"SearchKeyword\" xml:space=\"preserve\">\n    <value>搜尋關鍵字...</value>\n  </data>\n  <data name=\"InstallPreview\" xml:space=\"preserve\">\n    <value>安裝預覽</value>\n  </data>\n  <data name=\"NoAdditionalInstall\" xml:space=\"preserve\">\n    <value>無附加安裝</value>\n  </data>\n  <data name=\"BeginInstall\" xml:space=\"preserve\">\n    <value>開始安裝</value>\n  </data>\n  <data name=\"ViewUpdatedContent\" xml:space=\"preserve\">\n    <value>查看更新內容</value>\n  </data>\n  <data name=\"Reload\" xml:space=\"preserve\">\n    <value>重新加載</value>\n  </data>\n  <data name=\"GetFail\" xml:space=\"preserve\">\n    <value>取得失敗</value>\n  </data>\n  <data name=\"NoAvailableItem\" xml:space=\"preserve\">\n    <value>無可用項目</value>\n  </data>\n  <data name=\"MineratCrashed\" xml:space=\"preserve\">\n    <value>Minecrat發生崩潰</value>\n  </data>\n  <data name=\"TheVersionNameWillBeRenamedTo\" xml:space=\"preserve\">\n    <value>版本名稱將被重新命名為: </value>\n  </data>\n  <data name=\"IncludeSpecialWord\" xml:space=\"preserve\">\n    <value>包含特殊字元</value>\n  </data>\n  <data name=\"FolderAlreadyExists\" xml:space=\"preserve\">\n    <value>資料夾已存在</value>\n  </data>\n  <data name=\"InstallFail\" xml:space=\"preserve\">\n    <value>安裝失敗</value>\n  </data>\n  <data name=\"Install\" xml:space=\"preserve\">\n    <value>安裝</value>\n  </data>\n  <data name=\"InstallFinish\" xml:space=\"preserve\">\n    <value>安裝完成</value>\n  </data>\n  <data name=\"CannotFandRightJava\" xml:space=\"preserve\">\n    <value>無法找到合適Java</value>\n  </data>\n  <data name=\"Refresh\" xml:space=\"preserve\">\n    <value>刷新</value>\n  </data>\n  <data name=\"Mod\" xml:space=\"preserve\">\n    <value>模組</value>\n  </data>\n  <data name=\"Overview\" xml:space=\"preserve\">\n    <value>概述</value>\n  </data>\n  <data name=\"Setting\" xml:space=\"preserve\">\n    <value>設置</value>\n  </data>\n  <data name=\"SavesFolder\" xml:space=\"preserve\">\n    <value>存檔資料夾</value>\n  </data>\n  <data name=\"ModsFolder\" xml:space=\"preserve\">\n    <value>模組資料夾</value>\n  </data>\n  <data name=\"ResourcePacksFolder\" xml:space=\"preserve\">\n    <value>資源包資料夾</value>\n  </data>\n  <data name=\"ShaderPacksFolder\" xml:space=\"preserve\">\n    <value>光影包資料夾</value>\n  </data>\n  <data name=\"VersionFolder\" xml:space=\"preserve\">\n    <value>版本資料夾</value>\n  </data>\n  <data name=\"EnableIndependencyCore\" xml:space=\"preserve\">\n    <value>啟用獨立核心</value>\n  </data>\n  <data name=\"UseGlobalSetting\" xml:space=\"preserve\">\n    <value>使用全域設定</value>\n  </data>\n  <data name=\"Off\" xml:space=\"preserve\">\n    <value>關閉</value>\n  </data>\n  <data name=\"On\" xml:space=\"preserve\">\n    <value>開啟</value>\n  </data>\n  <data name=\"AutoJoinServer\" xml:space=\"preserve\">\n    <value>自動加入伺服器</value>\n  </data>\n  <data name=\"EnableSelect\" xml:space=\"preserve\">\n    <value>啟用選取項目</value>\n  </data>\n  <data name=\"DisableSelect\" xml:space=\"preserve\">\n    <value>停用選取項目</value>\n  </data>\n  <data name=\"DeleteSelect\" xml:space=\"preserve\">\n    <value>刪除選取項目</value>\n  </data>\n  <data name=\"SelectAll\" xml:space=\"preserve\">\n    <value>全選</value>\n  </data>\n  <data name=\"DeselectAll\" xml:space=\"preserve\">\n    <value>全不選</value>\n  </data>\n  <data name=\"SelectedItem\" xml:space=\"preserve\">\n    <value>已選擇項目: </value>\n  </data>\n  <data name=\"MoveToRecycleBin\" xml:space=\"preserve\">\n    <value>移動到回收站</value>\n  </data>\n  <data name=\"WindowTitleBarStyle\" xml:space=\"preserve\">\n    <value>視窗標題欄樣式</value>\n  </data>\n  <data name=\"GetException\" xml:space=\"preserve\">\n    <value>發生異常</value>\n  </data>\n  <data name=\"UnhandledException\" xml:space=\"preserve\">\n    <value>未處理的異常</value>\n  </data>\n  <data name=\"CustomHomePage\" xml:space=\"preserve\">\n    <value>自訂主頁面</value>\n  </data>\n  <data name=\"LocalSourceCode\" xml:space=\"preserve\">\n    <value>本地原始碼</value>\n  </data>\n  <data name=\"Edit\" xml:space=\"preserve\">\n    <value>編輯</value>\n  </data>\n  <data name=\"CustomHomePageSourceCodeError\" xml:space=\"preserve\">\n    <value>自訂主頁面原始碼錯誤</value>\n  </data>\n  <data name=\"CheckUpdate\" xml:space=\"preserve\">\n    <value>檢查更新</value>\n  </data>\n  <data name=\"ChooseArchitecture\" xml:space=\"preserve\">\n    <value>選擇平台</value>\n  </data>\n  <data name=\"CheckUpdateFail\" xml:space=\"preserve\">\n    <value>檢查更新失敗</value>\n  </data>\n  <data name=\"FoundNewVersion\" xml:space=\"preserve\">\n    <value>發現新版本</value>\n  </data>\n  <data name=\"GetUpdateUrl\" xml:space=\"preserve\">\n    <value>取得更新統一資源定位器</value>\n  </data>\n  <data name=\"BeginDownload\" xml:space=\"preserve\">\n    <value>開始下載</value>\n  </data>\n  <data name=\"UpdateFail\" xml:space=\"preserve\">\n    <value>更新失敗</value>\n  </data>\n  <data name=\"ThisArchitectureCannotAutoUpdate\" xml:space=\"preserve\">\n    <value>此平台不支援自動更新，開啟以下路徑手動替換</value>\n  </data>\n  <data name=\"Update\" xml:space=\"preserve\">\n    <value>更新</value>\n  </data>\n  <data name=\"DownloadFinish\" xml:space=\"preserve\">\n    <value>下載完成</value>\n  </data>\n  <data name=\"CurrentlyTheLatestVersion\" xml:space=\"preserve\">\n    <value>目前是最新版本</value>\n  </data>\n  <data name=\"OpenSourceProjectUsageTable\" xml:space=\"preserve\">\n    <value>開源項目使用表</value>\n  </data>\n  <data name=\"GPL3Text\" xml:space=\"preserve\">\n    <value>YMCL 以GPL-3.0 協議開放原始碼，可以修改且分發，但不得刪除原作品的標記，修改後的作品必須也採用GPL 協定進行開源。</value>\n  </data>\n  <data name=\"ShowGameOutput\" xml:space=\"preserve\">\n    <value>顯示遊戲輸出</value>\n  </data>\n  <data name=\"Search\" xml:space=\"preserve\">\n    <value>搜尋</value>\n  </data>\n  <data name=\"LoadMore\" xml:space=\"preserve\">\n    <value>載入更多</value>\n  </data>\n  <data name=\"ErrorCallingApi\" xml:space=\"preserve\">\n    <value>呼叫Api時發生錯誤</value>\n  </data>\n  <data name=\"SearchNoResult\" xml:space=\"preserve\">\n    <value>搜尋無結果</value>\n  </data>\n  <data name=\"AddLocalSong\" xml:space=\"preserve\">\n    <value>新增音訊檔案</value>\n  </data>\n  <data name=\"SelectMusicFile\" xml:space=\"preserve\">\n    <value>選擇音訊檔案</value>\n  </data>\n  <data name=\"ThemeColor\" xml:space=\"preserve\">\n    <value>主題色</value>\n  </data>\n  <data name=\"InitAudioLibraryFail\" xml:space=\"preserve\">\n    <value>初始化音訊庫失敗</value>\n  </data>\n  <data name=\"InstallVlcTip\" xml:space=\"preserve\">\n    <value>嘗試執行:\n\n      sudo apt install libvlc-dev\n      sudo apt install vlc</value>\n  </data>\n  <data name=\"ThisFeatureIsCurrentlyUnderDevelopment\" xml:space=\"preserve\">\n    <value>此功能正在開發中</value>\n  </data>\n  <data name=\"TreasureBox\" xml:space=\"preserve\">\n    <value>百寶箱</value>\n  </data>\n  <data name=\"ActivateWinOffice\" xml:space=\"preserve\">\n    <value>激活Windows/Office</value>\n  </data>\n  <data name=\"Run\" xml:space=\"preserve\">\n    <value>運行</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindowsPlatform\" xml:space=\"preserve\">\n    <value>此功能僅支援Windows平台</value>\n  </data>\n  <data name=\"RunCommandFail\" xml:space=\"preserve\">\n    <value>運行命令失敗</value>\n  </data>\n  <data name=\"RunActivate\" xml:space=\"preserve\">\n    <value>運行激活</value>\n  </data>\n  <data name=\"CancelActivateWin\" xml:space=\"preserve\">\n    <value>取消激活Windows</value>\n  </data>\n  <data name=\"CancelActivateWinTip\" xml:space=\"preserve\">\n    <value>此操作會移除Windows啟動狀態，導致Windows個人化等功能無法使用，是否繼續？</value>\n  </data>\n  <data name=\"ThisFeatureOnlySupportsWindows10AndAbove\" xml:space=\"preserve\">\n    <value>此功能僅支援Windows10以上，低於此版本系統不保證啟動成功</value>\n  </data>\n  <data name=\"PlayList\" xml:space=\"preserve\">\n    <value>播放清單</value>\n  </data>\n  <data name=\"ModName\" xml:space=\"preserve\">\n    <value>模組名稱</value>\n  </data>\n  <data name=\"GameVersion\" xml:space=\"preserve\">\n    <value>遊戲版本</value>\n  </data>\n  <data name=\"AnyModLoader\" xml:space=\"preserve\">\n    <value>任意載入器</value>\n  </data>\n  <data name=\"AnySource\" xml:space=\"preserve\">\n    <value>所有來源</value>\n  </data>\n  <data name=\"Download\" xml:space=\"preserve\">\n    <value>下載</value>\n  </data>\n  <data name=\"SaveFile\" xml:space=\"preserve\">\n    <value>保存檔案</value>\n  </data>\n  <data name=\"DownloadFail\" xml:space=\"preserve\">\n    <value>下載失敗</value>\n  </data>\n  <data name=\"MatchingVersion\" xml:space=\"preserve\">\n    <value>匹配的版本</value>\n  </data>\n  <data name=\"ModifyMicrosoftSkin\" xml:space=\"preserve\">\n    <value>修改皮膚(微軟)</value>\n  </data>\n  <data name=\"SkinModel\" xml:space=\"preserve\">\n    <value>皮膚模型</value>\n  </data>\n  <data name=\"InputSkinFilePath\" xml:space=\"preserve\">\n    <value>輸入皮膚檔路徑</value>\n  </data>\n  <data name=\"SelectSkinFile\" xml:space=\"preserve\">\n    <value>選擇皮膚檔案</value>\n  </data>\n  <data name=\"RefreshMicrosoftSkin\" xml:space=\"preserve\">\n    <value>刷新皮膚(微軟)</value>\n  </data>\n  <data name=\"ModifySuccess\" xml:space=\"preserve\">\n    <value>修改成功</value>\n  </data>\n  <data name=\"ModifyFail\" xml:space=\"preserve\">\n    <value>修改失敗</value>\n  </data>\n  <data name=\"IfInstallBedRock\" xml:space=\"preserve\">\n    <value>如未安裝基岩版則無法啟動</value>\n  </data>\n  <data name=\"BedRockVersion\" xml:space=\"preserve\">\n    <value>基岩版</value>\n  </data>\n  <data name=\"CannotOpenBedRockSetting\" xml:space=\"preserve\">\n    <value>無法打開基岩版設定</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivileges\" xml:space=\"preserve\">\n    <value>提升至管理員權限</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesFail\" xml:space=\"preserve\">\n    <value>提升至管理員權限失敗</value>\n  </data>\n  <data name=\"UpgradeToAdministratorPrivilegesTip\" xml:space=\"preserve\">\n    <value>執行操作需要提升至管理員權限，點選確定以管理員權限重新啟動程式</value>\n  </data>\n  <data name=\"ChooseLanguage\" xml:space=\"preserve\">\n    <value>选择语言/Choose Language</value>\n  </data>\n  <data name=\"ReleaseTheMouseAndLetYmclProcessThisFile\" xml:space=\"preserve\">\n    <value>釋放滑鼠讓YMCL處理此檔案</value>\n  </data>\n  <data name=\"UnableToAddModsForBedrockEdition\" xml:space=\"preserve\">\n    <value>無法為基岩版添加模組</value>\n  </data>\n  <data name=\"AddTheFollowingFilesAsModsToTheCurrentVersion\" xml:space=\"preserve\">\n    <value>將以下文件作為模組新增至目前版本</value>\n  </data>\n  <data name=\"UnsupportedFileType\" xml:space=\"preserve\">\n    <value>不支援的文件類型</value>\n  </data>\n  <data name=\"InstallTheFollowingFilesAsAnIntegrationPackageCurseforgeFormat\" xml:space=\"preserve\">\n    <value>將下列檔案作為整合包(CurseForge格式)安裝</value>\n  </data>\n  <data name=\"Unzip\" xml:space=\"preserve\">\n    <value>解壓</value>\n  </data>\n  <data name=\"UnzipingModPack\" xml:space=\"preserve\">\n    <value>正在解壓縮整合包</value>\n  </data>\n  <data name=\"FinsihUnzipModPack\" xml:space=\"preserve\">\n    <value>解壓縮整合包完成</value>\n  </data>\n  <data name=\"GetModPackInfo\" xml:space=\"preserve\">\n    <value>取得整合包資訊</value>\n  </data>\n  <data name=\"ModPackInfo\" xml:space=\"preserve\">\n    <value>整合包資訊</value>\n  </data>\n  <data name=\"ImportFailed\" xml:space=\"preserve\">\n    <value>導入失敗</value>\n  </data>\n  <data name=\"ImportSuccess\" xml:space=\"preserve\">\n    <value>導入成功</value>\n  </data>\n  <data name=\"NoCrashInfo\" xml:space=\"preserve\">\n    <value>無崩潰訊息</value>\n  </data>\n  <data name=\"DownloadModPackMod\" xml:space=\"preserve\">\n    <value>下載整合包模組</value>\n  </data>\n  <data name=\"TotalNumberOfMod\" xml:space=\"preserve\">\n    <value>模組總數量</value>\n  </data>\n  <data name=\"DownloadSuccess\" xml:space=\"preserve\">\n    <value>下載成功</value>\n  </data>\n  <data name=\"OverrideModPack\" xml:space=\"preserve\">\n    <value>覆蓋整合包</value>\n  </data>\n  <data name=\"DownloadFailedFileAgain\" xml:space=\"preserve\">\n    <value>重新下載失敗檔</value>\n  </data>\n  <data name=\"Plugin\" xml:space=\"preserve\">\n    <value>外掛程式</value>\n  </data>\n  <data name=\"EnableAll\" xml:space=\"preserve\">\n    <value>啟用所有</value>\n  </data>\n  <data name=\"DisableAll\" xml:space=\"preserve\">\n    <value>停用所有</value>\n  </data>\n  <data name=\"Author\" xml:space=\"preserve\">\n    <value>作者</value>\n  </data>\n  <data name=\"Version\" xml:space=\"preserve\">\n    <value>版本</value>\n  </data>\n  <data name=\"Description\" xml:space=\"preserve\">\n    <value>課程描述</value>\n  </data>\n  <data name=\"NeedRestartApp\" xml:space=\"preserve\">\n    <value>需要重啟YMCL</value>\n  </data>\n  <data name=\"OnlySupportsWindows10AndAboveSystems\" xml:space=\"preserve\">\n    <value>僅支援Windows 10 以上系統</value>\n  </data>\n  <data name=\"TaskCenter\" xml:space=\"preserve\">\n    <value>任務中心</value>\n  </data>\n  <data name=\"AllType\" xml:space=\"preserve\">\n    <value>所有類型</value>\n  </data>\n  <data name=\"MaterialPack\" xml:space=\"preserve\">\n    <value>材質包</value>\n  </data>\n  <data name=\"Map\" xml:space=\"preserve\">\n    <value>地圖</value>\n  </data>\n  <data name=\"CustomBackGroundImg\" xml:space=\"preserve\">\n    <value>自訂背景圖</value>\n  </data>\n  <data name=\"SelectImgFile\" xml:space=\"preserve\">\n    <value>選擇圖像檔</value>\n  </data>\n  <data name=\"MusicNotAvailable\" xml:space=\"preserve\">\n    <value>音樂不可用</value>\n  </data>\n  <data name=\"MusicGetFail\" xml:space=\"preserve\">\n    <value>音樂獲取失敗</value>\n  </data>\n  <data name=\"DownloadSource\" xml:space=\"preserve\">\n    <value>下載來源</value>\n  </data>\n  <data name=\"MaximumDownloadThread\" xml:space=\"preserve\">\n    <value>最大下載線程</value>\n  </data>\n  <data name=\"DownloadThreadTooBigTip\" xml:space=\"preserve\">\n    <value>下載線程過大可能導致設備卡頓</value>\n  </data>\n  <data name=\"Unknown\" xml:space=\"preserve\">\n    <value>未知</value>\n  </data>\n  <data name=\"ShaderPack\" xml:space=\"preserve\">\n    <value>光影包</value>\n  </data>\n  <data name=\"DataPack\" xml:space=\"preserve\">\n    <value>數據包</value>\n  </data>\n  <data name=\"Api\" xml:space=\"preserve\">\n    <value>應用程式介面</value>\n  </data>\n  <data name=\"ModPack\" xml:space=\"preserve\">\n    <value>整合包</value>\n  </data>\n  <data name=\"SaveAudioFile\" xml:space=\"preserve\">\n    <value>儲存音訊檔案</value>\n  </data>\n  <data name=\"CustomUpdateUrl\" xml:space=\"preserve\">\n    <value>自訂更新Url</value>\n  </data>\n  <data name=\"LyricTip\" xml:space=\"preserve\">\n    <value>我是歌詞ヾ(≧▽≦*)o</value>\n  </data>\n  <data name=\"MusicPlayerOnlySupportWindows\" xml:space=\"preserve\">\n    <value>音樂播放器僅支援Windows</value>\n  </data>\n  <data name=\"LoadAudioFileFail\" xml:space=\"preserve\">\n    <value>載入音訊檔案失敗</value>\n  </data>\n  <data name=\"LaunchCore\" xml:space=\"preserve\">\n    <value>啟動核心</value>\n  </data>\n  <data name=\"AfterLaunchKeepLauncherVisible\" xml:space=\"preserve\">\n    <value>啟動完成後保持不變</value>\n  </data>\n  <data name=\"AfterLaunchMakeLauncherMinimize\" xml:space=\"preserve\">\n    <value>啟動完成後最小化</value>\n  </data>\n  <data name=\"AfterLaunchExitLauncher\" xml:space=\"preserve\">\n    <value>啟動完成後關閉</value>\n  </data>\n  <data name=\"AfterLaunchHideAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>啟動完成後隱藏，遊戲退出後顯示</value>\n  </data>\n  <data name=\"LauncherVisibility\" xml:space=\"preserve\">\n    <value>啟動器可見性</value>\n  </data>\n  <data name=\"AfterLaunchMinimizeAndShowWhenGameExit\" xml:space=\"preserve\">\n    <value>啟動完成後最小化，遊戲退出後顯示</value>\n  </data>\n  <data name=\"UnofficialTip\" xml:space=\"preserve\">\n    <value>目前版本為非官方版本，可能遭受病毒攻擊。\n      重定向至https://ymcl.yik.at/ 下載官方版本。</value>\n  </data>\n  <data name=\"LanguageTip\" xml:space=\"preserve\">\n    <value>在開始設定Yu Minecraft Launcher 前，需要選擇語言。</value>\n  </data>\n  <data name=\"Account\" xml:space=\"preserve\">\n    <value>帳戶</value>\n  </data>\n  <data name=\"WindowTitleBarStyleTip\" xml:space=\"preserve\">\n    <value>設定啟動器視窗標題列的樣式，在特定情況啟動器樣式不受支援。</value>\n  </data>\n  <data name=\"SystemStyle\" xml:space=\"preserve\">\n    <value>系統樣式</value>\n  </data>\n  <data name=\"LauncherStyle\" xml:space=\"preserve\">\n    <value>啟動器樣式</value>\n  </data>\n  <data name=\"MinecraftFolderTip\" xml:space=\"preserve\">\n    <value>存放Minecraft資料的資料夾(.minecraft)</value>\n  </data>\n  <data name=\"ExistingNow\" xml:space=\"preserve\">\n    <value>現有的</value>\n  </data>\n  <data name=\"JavaRuntime\" xml:space=\"preserve\">\n    <value>Java運行時</value>\n  </data>\n  <data name=\"JavaRuntimeTip\" xml:space=\"preserve\">\n    <value>啟動遊戲至少需要一個Java執行時。</value>\n  </data>\n  <data name=\"AccountTip\" xml:space=\"preserve\">\n    <value>啟動遊戲至少需要一個帳戶，例如使用離線帳戶將無法登錄有正版驗證的伺服器。</value>\n  </data>\n  <data name=\"MusicApi\" xml:space=\"preserve\">\n    <value>音樂Api</value>\n  </data>\n  <data name=\"ProjectInfo\" xml:space=\"preserve\">\n    <value>項目資訊</value>\n  </data>\n  <data name=\"SaveAs\" xml:space=\"preserve\">\n    <value>另存為</value>\n  </data>\n  <data name=\"DeskLyricColor\" xml:space=\"preserve\">\n    <value>桌面歌詞顏色</value>\n  </data>\n  <data name=\"DeskLyricAlignment\" xml:space=\"preserve\">\n    <value>桌面歌詞對齊</value>\n  </data>\n  <data name=\"AlignLeft\" xml:space=\"preserve\">\n    <value>居左對齊</value>\n  </data>\n  <data name=\"AlignCenter\" xml:space=\"preserve\">\n    <value>居中對齊</value>\n  </data>\n  <data name=\"AlignRight\" xml:space=\"preserve\">\n    <value>居右對齊</value>\n  </data>\n  <data name=\"DeskLyricSize\" xml:space=\"preserve\">\n    <value>桌面歌詞大小</value>\n  </data>\n  <data name=\"AutoUpdate\" xml:space=\"preserve\">\n    <value>自動更新</value>\n  </data>\n  <data name=\"SkipThisVersion\" xml:space=\"preserve\">\n    <value>跳過此版本</value>\n  </data>\n  <data name=\"SkipVersionTip\" xml:space=\"preserve\">\n    <value>已跳過版本: {version}\n      前往 設定-啟動器-檢查更新 可再次取得此版本</value>\n  </data>\n  <data name=\"WinSevenAutoUpdateTip\" xml:space=\"preserve\">\n    <value>發現新版本: {version}\n      win10 以下系統(不包括10)不支援自動更新\n      前往以下連結下載新版本: “{url}”\n      前往 設定-下載-自動更新 可關閉自動檢查更新</value>\n  </data>\n  <data name=\"OpenBrowser\" xml:space=\"preserve\">\n    <value>打開瀏覽器</value>\n  </data>\n  <data name=\"CustomHomePageWay_Presetting_JavaNews\" xml:space=\"preserve\">\n    <value>預設-Java新聞</value>\n  </data>\n  <data name=\"NetworkSource\" xml:space=\"preserve\">\n    <value>網路來源</value>\n  </data>\n  <data name=\"NoSupportNow\" xml:space=\"preserve\">\n    <value>現不支援</value>\n  </data>\n  <data name=\"AggregateSearchTip\" xml:space=\"preserve\">\n    <value>輸入關鍵字以在YMCL中搜尋</value>\n  </data>\n  <data name=\"CannotRecognitionTheVersion\" xml:space=\"preserve\">\n    <value>無法辨識選取版本</value>\n  </data>\n  <data name=\"LocalResource\" xml:space=\"preserve\">\n    <value>本地資源</value>\n  </data>\n  <data name=\"InstallVersion\" xml:space=\"preserve\">\n    <value>安裝版本</value>\n  </data>\n  <data name=\"JumpSearch\" xml:space=\"preserve\">\n    <value>跳轉搜尋</value>\n  </data>\n  <data name=\"AggregateSearchWatermark\" xml:space=\"preserve\">\n    <value>輸入關鍵字以在YMCL中搜尋</value>\n  </data>\n  <data name=\"SwitchedTo\" xml:space=\"preserve\">\n    <value>已切換到</value>\n  </data>\n  <data name=\"JumpToSearchTip\" xml:space=\"preserve\">\n    <value>將會跳到{target} 搜尋此關鍵字</value>\n  </data>\n  <data name=\"SearchInTip\" xml:space=\"preserve\">\n    <value>在{target} 中搜尋</value>\n  </data>\n  <data name=\"Music\" xml:space=\"preserve\">\n    <value>音樂</value>\n  </data>\n  <data name=\"ExistAccount\" xml:space=\"preserve\">\n    <value>現存帳戶</value>\n  </data>\n  <data name=\"DisplayIndependentTaskWindow\" xml:space=\"preserve\">\n    <value>顯示獨立任務視窗</value>\n  </data>\n  <data name=\"Sponsor\" xml:space=\"preserve\">\n    <value>贊助</value>\n  </data>\n  <data name=\"Sponsors\" xml:space=\"preserve\">\n    <value>贊助者</value>\n  </data>\n  <data name=\"SponsorsTip\" xml:space=\"preserve\">\n    <value>以下是發電的贊助者，感謝對Yu Minecraft Launcher 的支持！</value>\n  </data>\n  <data name=\"MacOsUpdateTip\" xml:space=\"preserve\">\n    <value>發現新版本: {version}&amp;#10; MacOs 不支援自動更新前往以下連結下載新版本: “{url}”&amp;#10;前往設定-下載-自動更新可關閉自動檢查更新</value>\n  </data>\n  <data name=\"AlreadyCopyToClipBoard\" xml:space=\"preserve\">\n    <value>已複製到剪切板</value>\n  </data>\n  <data name=\"UsedMem\" xml:space=\"preserve\">\n    <value>已用記憶體</value>\n  </data>\n  <data name=\"CannotLoad\" xml:space=\"preserve\">\n    <value>無法加載</value>\n  </data>\n  <data name=\"LoadFail\" xml:space=\"preserve\">\n    <value>載入失敗</value>\n  </data>\n  <data name=\"ToggleNav\" xml:space=\"preserve\">\n    <value>切換導航</value>\n  </data>\n  <data name=\"NoWorkingTask\" xml:space=\"preserve\">\n    <value>暫無運行中任務</value>\n  </data>\n  <data name=\"CrashLa\" xml:space=\"preserve\">\n    <value>崩潰啦！ヾ(•ω•`)o</value>\n  </data>\n  <data name=\"YMCLHappenError\" xml:space=\"preserve\">\n    <value>Yu Minecraft Launcher 發生未處理異常</value>\n  </data>\n  <data name=\"DetailedInfo\" xml:space=\"preserve\">\n    <value>詳細資料</value>\n  </data>\n  <data name=\"UnhandledErrorTip\" xml:space=\"preserve\">\n    <value>Yu Minecraft Launcher 遇到了沒有處理的異常, 可能無法繼續運行, 下方為異常的詳細信息</value>\n  </data>\n  <data name=\"Copy\" xml:space=\"preserve\">\n    <value>複製</value>\n  </data>\n  <data name=\"NoMatterErrorAndKeepOnRun\" xml:space=\"preserve\">\n    <value>忽略錯誤, 強制繼續運作</value>\n  </data>\n  <data name=\"ExitApp\" xml:space=\"preserve\">\n    <value>退出應用程式</value>\n  </data>\n  <data name=\"RestartApp\" xml:space=\"preserve\">\n    <value>重啟應用</value>\n  </data>\n  <data name=\"LoadBackGroudFromPicFailTip\" xml:space=\"preserve\">\n    <value>從圖片檔案載入背景圖失敗, 檢查圖片格式是否正確</value>\n  </data>\n  <data name=\"CustomBackground\" xml:space=\"preserve\">\n    <value>自訂背景</value>\n  </data>\n  <data name=\"Default\" xml:space=\"preserve\">\n    <value>預設</value>\n  </data>\n  <data name=\"BackGroundImg\" xml:space=\"preserve\">\n    <value>背景圖</value>\n  </data>\n  <data name=\"AcrylicBlur\" xml:space=\"preserve\">\n    <value>亞克力</value>\n  </data>\n  <data name=\"Transparent\" xml:space=\"preserve\">\n    <value>透明</value>\n  </data>\n  <data name=\"CannotFindMinecraftFolder\" xml:space=\"preserve\">\n    <value>無法找到Minecraft資料夾</value>\n  </data>\n  <data name=\"OneSentence\" xml:space=\"preserve\">\n    <value>一言API</value>\n  </data>\n  <data name=\"TodayLuckyValue\" xml:space=\"preserve\">\n    <value>今日人品</value>\n  </data>\n  <data name=\"CannotLoadVersionSetting\" xml:space=\"preserve\">\n    <value>無法載入版本設定</value>\n  </data>\n  <data name=\"TodayLuckyValueTip\" xml:space=\"preserve\">\n    <value>今日的人品值是: {value} !</value>\n  </data>\n  <data name=\"IKnow\" xml:space=\"preserve\">\n    <value>我知道了</value>\n  </data>\n  <data name=\"LuckyValueTip\" xml:space=\"preserve\">\n    <value>今天的運氣可能不太好，但別灰心，明天會更好！ /n今天的運氣有點差呢。 /n今天的運氣一般。 /n今天的運氣還好。 /n今天的運氣不錯呢！ /n今天的運氣非常好！ /n今天的運氣簡直爆棚！ /n</value>\n  </data>\n  <data name=\"NeverClick\" xml:space=\"preserve\">\n    <value>千萬別點</value>\n  </data>\n  <data name=\"NeverClickTip\" xml:space=\"preserve\">\n    <value>此操作可能會發生奇奇怪怪的問題，確定要繼續嗎？</value>\n  </data>\n  <data name=\"Tip\" xml:space=\"preserve\">\n    <value>提示</value>\n  </data>\n  <data name=\"GameMainFileDeletion\" xml:space=\"preserve\">\n    <value>遊戲主要檔案缺失</value>\n  </data>\n  <data name=\"GameUpdateLog\" xml:space=\"preserve\">\n    <value>更新日誌</value>\n  </data>\n  <data name=\"SureToInstallTheJava\" xml:space=\"preserve\">\n    <value>確定要安裝Java : {Java}？</value>\n  </data>\n  <data name=\"MaxFileFragmentation\" xml:space=\"preserve\">\n    <value>最大文件分片</value>\n  </data>\n  <data name=\"CreateDownloadTask\" xml:space=\"preserve\">\n    <value>建立下載任務</value>\n  </data>\n  <data name=\"CustomDownload\" xml:space=\"preserve\">\n    <value>自訂下載</value>\n  </data>\n  <data name=\"Locate\" xml:space=\"preserve\">\n    <value>定位</value>\n  </data>\n  <data name=\"DownloadUrl\" xml:space=\"preserve\">\n    <value>下載連結</value>\n  </data>\n  <data name=\"DisplayName\" xml:space=\"preserve\">\n    <value>顯示名稱</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Task\" xml:space=\"preserve\">\n    <value>任務</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"More\" xml:space=\"preserve\">\n    <value>更多</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"About\" xml:space=\"preserve\">\n    <value>關於</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Personalize\" xml:space=\"preserve\">\n    <value>個性化</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Launcher\" xml:space=\"preserve\">\n    <value>啟動器</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerUrlError\" xml:space=\"preserve\">\n    <value>伺服器Url錯誤</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Waiting\" xml:space=\"preserve\">\n    <value>等待中</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Running\" xml:space=\"preserve\">\n    <value>運行中</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Paused\" xml:space=\"preserve\">\n    <value>已暫停</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Error\" xml:space=\"preserve\">\n    <value>錯誤</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Finished\" xml:space=\"preserve\">\n    <value>已完成</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Remove\" xml:space=\"preserve\">\n    <value>移除</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"BuildLaunchConfig\" xml:space=\"preserve\">\n    <value>建置啟動配置項</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckLaunchArg\" xml:space=\"preserve\">\n    <value>檢查啟動參數</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"RefreshAccountToken\" xml:space=\"preserve\">\n    <value>刷新用戶令牌</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchMinecraftProcess\" xml:space=\"preserve\">\n    <value>啟動Minecraft 進程</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceled\" xml:space=\"preserve\">\n    <value>已取消</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Canceling\" xml:space=\"preserve\">\n    <value>取消中</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CheckVersionResource\" xml:space=\"preserve\">\n    <value>檢查版本資源</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadResource\" xml:space=\"preserve\">\n    <value>下載資源</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Return\" xml:space=\"preserve\">\n    <value>返回</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ScreenshotsFolder\" xml:space=\"preserve\">\n    <value>截圖資料夾</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Saves\" xml:space=\"preserve\">\n    <value>存檔</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Screenshots\" xml:space=\"preserve\">\n    <value>截圖</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResourcePacks\" xml:space=\"preserve\">\n    <value>資源包</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoMatchResult\" xml:space=\"preserve\">\n    <value>無匹配結果</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CreateTime\" xml:space=\"preserve\">\n    <value>創建時間</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastModifiedTime\" xml:space=\"preserve\">\n    <value>最後修改時間</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveInfo\" xml:space=\"preserve\">\n    <value>存檔資訊</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Name\" xml:space=\"preserve\">\n    <value>名稱</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PlayerCount\" xml:space=\"preserve\">\n    <value>玩家數量</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DataPackCount\" xml:space=\"preserve\">\n    <value>資料包數量</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportTime\" xml:space=\"preserve\">\n    <value>導入時間</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CanceledUpdate\" xml:space=\"preserve\">\n    <value>更新已取消</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ApiError\" xml:space=\"preserve\">\n    <value>Api錯誤</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NetWorkError\" xml:space=\"preserve\">\n    <value>網路錯誤</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"KillProcess\" xml:space=\"preserve\">\n    <value>結束進程</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LaunchArguments\" xml:space=\"preserve\">\n    <value>啟動參數</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DisplayLaunchArguments\" xml:space=\"preserve\">\n    <value>顯示啟動參數</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ResetData\" xml:space=\"preserve\">\n    <value>重置數據</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FixLoadDataFailTip\" xml:space=\"preserve\">\n    <value>在載入資料時遇到異常，這可能是由於資料發生損壞導致的。是否重置YMCL數據以解決此問題？</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Export\" xml:space=\"preserve\">\n    <value>導出</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportLogFile\" xml:space=\"preserve\">\n    <value>匯出日誌檔</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoScrollToEnd\" xml:space=\"preserve\">\n    <value>自動滾動到末尾</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GetJavaInfoFail\" xml:space=\"preserve\">\n    <value>取得Java資訊失敗可能此Java不正確/已損壞/無執行權限</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Seed\" xml:space=\"preserve\">\n    <value>種子</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllowCommands\" xml:space=\"preserve\">\n    <value>允許命令</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"GameType\" xml:space=\"preserve\">\n    <value>遊戲類型</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LastPlayTime\" xml:space=\"preserve\">\n    <value>最後遊玩時間</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoDescription\" xml:space=\"preserve\">\n    <value>無描述訊息</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Mica\" xml:space=\"preserve\">\n    <value>雲母</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"TranslucentBackgroundOpacity\" xml:space=\"preserve\">\n    <value>半透明背景控制不透明度</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MusicApiWithIP\" xml:space=\"preserve\">\n    <value>音樂Api附IP位址</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoIdentifiedPlugins\" xml:space=\"preserve\">\n    <value>暫無已辨識插件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"LoadPluginError\" xml:space=\"preserve\">\n    <value>載入插件錯誤</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Unrecognized\" xml:space=\"preserve\">\n    <value>無法辨識</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportModPack\" xml:space=\"preserve\">\n    <value>導入整合包</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Prepare\" xml:space=\"preserve\">\n    <value>準備</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"VersionIdCannotBeEmpty\" xml:space=\"preserve\">\n    <value>版本Id 不可為空白</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"InstallModPack\" xml:space=\"preserve\">\n    <value>安裝整合包</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"PrepareInstall\" xml:space=\"preserve\">\n    <value>準備安裝</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveSkinFile\" xml:space=\"preserve\">\n    <value>保存皮膚文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SaveFinish\" xml:space=\"preserve\">\n    <value>儲存完成</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CornerRadius\" xml:space=\"preserve\">\n    <value>圓角半徑</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableTranslucentSpecialControlList\" xml:space=\"preserve\">\n    <value>啟用半透明特殊控制項清單</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NoticeWay\" xml:space=\"preserve\">\n    <value>通知方式</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationCard\" xml:space=\"preserve\">\n    <value>通知卡片</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NotificationBubble\" xml:space=\"preserve\">\n    <value>通知氣泡</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExampleNotification\" xml:space=\"preserve\">\n    <value>範例通知</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrentListIsEmpty\" xml:space=\"preserve\">\n    <value>目前列表為空</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Import\" xml:space=\"preserve\">\n    <value>導入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HopeHowToHandleTheFile\" xml:space=\"preserve\">\n    <value>希望如何處理此文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsResourcePackImport\" xml:space=\"preserve\">\n    <value>作為資源包導入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AsShaderPackImport\" xml:space=\"preserve\">\n    <value>作為光影包導入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Conflict\" xml:space=\"preserve\">\n    <value>沖突</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FileConflictTip\" xml:space=\"preserve\">\n    <value>文件衝突，目標資料夾已存在相同名稱文件，希望如何處理複製操作？</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Cover\" xml:space=\"preserve\">\n    <value>覆蓋</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Rename\" xml:space=\"preserve\">\n    <value>重新命名</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportFinish\" xml:space=\"preserve\">\n    <value>導入完成</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SureToImportTheFile\" xml:space=\"preserve\">\n    <value>確定導入此文件</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AllImport\" xml:space=\"preserve\">\n    <value>全部導入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"MinecraftVersion\" xml:space=\"preserve\">\n    <value>Minecraft 版本</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Home\" xml:space=\"preserve\">\n    <value>主頁</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"HotResource\" xml:space=\"preserve\">\n    <value>熱門資源</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"All\" xml:space=\"preserve\">\n    <value>全部</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ServerPack\" xml:space=\"preserve\">\n    <value>伺服器包</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DownloadUrlParserFail\" xml:space=\"preserve\">\n    <value>下載連結解析失敗</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Destroy\" xml:space=\"preserve\">\n    <value>銷毀</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourite\" xml:space=\"preserve\">\n    <value>收藏</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourted\" xml:space=\"preserve\">\n    <value>已收藏</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Favourites\" xml:space=\"preserve\">\n    <value>收藏夾</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CurrectSystemNoSupportAutoUpdateTip\" xml:space=\"preserve\">\n    <value>目前系統不支援自動更新\n      可前往 設定-下載 關閉自動更新\n      可手動下載最新版本並取代程式檔案</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"DependencyItems\" xml:space=\"preserve\">\n    <value>依賴項</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportOrExportSetting\" xml:space=\"preserve\">\n    <value>導入/匯出設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingTip\" xml:space=\"preserve\">\n    <value>選擇需要匯出的設定項</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Ui\" xml:space=\"preserve\">\n    <value>介面設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Net\" xml:space=\"preserve\">\n    <value>網路設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Launch\" xml:space=\"preserve\">\n    <value>啟動設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Account\" xml:space=\"preserve\">\n    <value>帳戶資料(不含微軟帳戶)</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExchangeSetting_Other\" xml:space=\"preserve\">\n    <value>其他設定</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSuccess\" xml:space=\"preserve\">\n    <value>導出成功</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ExportSettingSuccessTip\" xml:space=\"preserve\">\n    <value>匯出成功，資料量過大無法顯示，點選複製以複製所有資料</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ImportSettingTextBoxWatermark\" xml:space=\"preserve\">\n    <value>輸入hex資料</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"ReadClipBoard\" xml:space=\"preserve\">\n    <value>讀取剪貼簿</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"CopyToClipBoard\" xml:space=\"preserve\">\n    <value>複製到剪貼簿</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OpenFile\" xml:space=\"preserve\">\n    <value>開啟檔案</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"WriteIn\" xml:space=\"preserve\">\n    <value>寫入</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateFailed\" xml:space=\"preserve\">\n    <value>操作失敗</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"OperateSuccess\" xml:space=\"preserve\">\n    <value>操作成功</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"NeedToManuallyOpenTheTerminalAndExecuteTheFollowingCommand\" xml:space=\"preserve\">\n    <value>需要手動打開終端機執行以下命令</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AccountName\" xml:space=\"preserve\">\n    <value>帳戶名稱</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AddNewAccountUuid\" xml:space=\"preserve\">\n    <value>Uuid，留空則自動產生</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"AutoAllocate\" xml:space=\"preserve\">\n    <value>自動分配</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"EnableAutoAllocateMem\" xml:space=\"preserve\">\n    <value>啟用自動分配記憶體</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Custom\" xml:space=\"preserve\">\n    <value>自訂</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"FastLaunch\" xml:space=\"preserve\">\n    <value>快速啟動</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Add\" xml:space=\"preserve\">\n    <value>添加</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Icon\" xml:space=\"preserve\">\n    <value>圖標</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetIcon\" xml:space=\"preserve\">\n    <value>設定圖標</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"SetServer\" xml:space=\"preserve\">\n    <value>設定伺服器</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"Delete\" xml:space=\"preserve\">\n    <value>刪除</value>\n    <comment>#TODO#_</comment>\n  </data>\n  <data name=\"JavaRuntimeError\" xml:space=\"preserve\">\n    <value>Java運行時錯誤</value>\n    <comment>#TODO#_</comment>\n  </data>\n</root>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/AppMethod.cs",
    "content": "﻿using System.Diagnostics;\nusing System.IO;\nusing Newtonsoft.Json;\n\nnamespace YMCL.Public.Module.App;\n\npublic class AppMethod\n{\n    private static readonly Debouncer _debouncer = new(() =>\n    {\n        if (Data.SettingEntry is null) return;\n        File.WriteAllText(ConfigPath.SettingDataPath,\n            JsonConvert.SerializeObject(Data.SettingEntry, Formatting.Indented));\n    }, 100);\n\n    public static void SaveSetting()\n    {\n        _debouncer.Trigger();\n    }\n\n    public static void RestartApp(bool isAdmin = false)\n    {\n        var startInfo = new ProcessStartInfo\n        {\n            UseShellExecute = true,\n            WorkingDirectory = Environment.CurrentDirectory,\n            FileName = Process.GetCurrentProcess().MainModule.FileName\n        };\n        if (isAdmin)\n        {\n            startInfo.Verb = \"runas\";\n        }\n        Process.Start(startInfo);\n        Environment.Exit(0);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/Dispatcher.cs",
    "content": "﻿using System.IO;\nusing System.Threading.Tasks;\nusing FluentAvalonia.UI.Controls;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.App.Init.SubModule;\nusing YMCL.Public.Module.App.Init.SubModule.GetDataFromNetwork;\nusing YMCL.Views;\n\nnamespace YMCL.Public.Module.App.Init;\n\npublic static class InitDispatcher\n{\n    public static async Task<bool> BeforeCreateUi()\n    {\n        DetectPlatform.Main();\n        InitData.InitSystemMaxMem();\n        InitConfig.Dispatch();\n        InitData.ClearTempFolder();\n        if (!await ActionInvokeWithCrash(InitData.GetSettingData)) return false;\n        InitLang.Dispatch();\n        if (!await ActionInvokeWithCrash(InitData.InitCollection)) return false;\n        if (!await ActionInvokeWithCrash(InitData.VerifyData)) return false;\n        InitData.InitMl();\n        TranslateToken.RefreshToken();\n        Public.Module.Ui.Special.AggregateSearchUi.UpdateAllAggregateSearchEntries();\n        Public.Module.Ui.Special.AggregateSearchUi.Filter(string.Empty);\n        Ui.Setter.ToggleTheme(Data.SettingEntry.Theme);\n        return true;\n    }\n\n    public static void OnMainViewLoaded()\n    {\n        _ = InitUi.Dispatch();\n        Dispatcher.Dispatch();\n        InitPlugin.Dispatch();\n        SettingChanged.Binding();\n        Op.Parser.Handle(Public.Const.Data.AppArgs);\n    }\n\n    public static async Task<bool> ActionInvokeWithCrash(Action action)\n    {\n        try\n        {\n            action.Invoke();\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            try\n            {\n                var win = new CrashWindow(e.ToString());\n                win.Show();\n                var dialog = await ShowDialogAsync(MainLang.ResetData, MainLang.FixLoadDataFailTip,\n                    b_primary: MainLang.Ok, b_cancel: MainLang.Cancel, p_host: TopLevel.GetTopLevel(win));\n                if (dialog == ContentDialogResult.Primary)\n                {\n                    IO.Disk.Setter.ClearFolder(ConfigPath.UserDataRootPath,\n                        [Path.Combine(ConfigPath.UserDataRootPath, \".minecraft\")]);\n                    AppMethod.RestartApp();\n                }\n            }\n            catch\n            {\n            }\n\n            return false;\n        }\n\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/Op/Parser.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing YMCL.Public.Module.App.Init.Op.SubModule;\n\nnamespace YMCL.Public.Module.App.Init.Op;\n\npublic class Parser\n{\n    public static readonly List<string> operations = [];\n    public static void Handle(string[] args)\n    {\n        if(args.Length==0) return;\n        if (args[0].StartsWith(\"ymcl://\"))\n        {\n            Notice(args[0]);\n            var urlDecode = System.Web.HttpUtility.UrlDecode(args[0]);\n            var replace = urlDecode.Replace(\"ymcl://\", \"\");\n            Parse(replace.Trim().TrimEnd('/').Split(' '));\n        }\n        else\n        {\n            Parse(args);\n        }\n    }\n    \n    public static void Parse(string[] args)\n    {\n        foreach (var a in args)\n        {\n            if (a.Trim().StartsWith(\"--\"))\n            {\n                operations.Add(a);\n            }\n            else\n            {\n                var str = operations.LastOrDefault();\n                if (string.IsNullOrWhiteSpace(str)) continue;\n                str += $\" {a}\";\n                operations[^1] = str.Trim();\n            }\n        }\n        foreach (var operation in operations)\n        {\n            switch (operation.Split(' ')[0])\n            {\n                case \"--import-setting\":\n                    _ = ImportSetting.Invoke(operation);\n                    break;\n                case \"--install-modpack\":\n                    InstallModPack.Invoke(operation);\n                    break;\n            }\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/Op/SubModule/ImportSetting.cs",
    "content": "﻿using System.IO;\nusing System.Threading;\nusing Avalonia.Controls.Notifications;\nusing FluentAvalonia.UI.Controls;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Network;\n\nnamespace YMCL.Public.Module.App.Init.Op.SubModule;\n\npublic class ImportSetting\n{\n    public static async Task Invoke(string text)\n    {\n        var url = text.Split(' ')[1];\n        var task = new TaskEntry($\"{MainLang.Download} - {url}\",\n            [new SubTask($\"{MainLang.Download} - {url}\") { State = TaskState.Running }]);\n        var cts = new CancellationTokenSource();\n        var cancellationToken = cts.Token;\n        task.UpdateAction(() =>\n        {\n            cts.Cancel();\n            task.CancelWaitFinish();\n        });\n        Notice($\"{MainLang.BeginDownload}: {url}\");\n        var path = Path.Combine(ConfigPath.TempFolderPath, $\"{DateTime.Now:yyyy-MM-dd-hh-mm-ss}.DaiYu\");\n        if (!await DownloadFileWithProgress.Download(url, path, task,\n                cancellationToken))\n        {\n            task.FinishWithError();\n            Notice($\"{MainLang.DownloadFail}: {url}\");\n            return;\n        }\n        var info = Public.Module.App.Setting.Import(await File.ReadAllTextAsync(path, cancellationToken));\n        if (!info.success || info.data == null)\n        {\n            Notice(MainLang.ImportFailed, NotificationType.Error);\n            return;\n        }\n\n\n        var data = JsonConvert.DeserializeObject<ExchangeSettingEntry.Data>(JsonConvert.SerializeObject(info.data));\n        if (data.UiSettings != null)\n        {\n            data.UiSettings.WindowBackGroundImgData = \" ( ...... ) \";\n        }\n\n        if (data.AccountSettings != null)\n        {\n            foreach (var a in data.AccountSettings)\n            {\n                a.Skin = \" ( ...... ) \";\n                a.Data = \" ( ...... ) \";\n            }\n        }\n            \n        var cr1 = await ShowDialogAsync(MainLang.Import,\n            JsonConvert.SerializeObject(data, Formatting.Indented), b_primary: MainLang.Import,\n            b_cancel: MainLang.Cancel);\n        if (cr1 != ContentDialogResult.Primary) return;\n        Public.Module.App.Setting.Replace(Data.SettingEntry, info.data);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/Op/SubModule/InstallModPack.cs",
    "content": "﻿namespace YMCL.Public.Module.App.Init.Op.SubModule;\n\npublic class InstallModPack\n{\n    public static void Invoke(string text)\n    {\n        var url = text.Split(' ')[1];\n        var extension = url.Contains(\"mrpack\") ? \".mrpack\" : \".zip\";\n        _ = Public.Module.Op.DownloadResource.ModPack(url, extension);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/Decision.cs",
    "content": "﻿namespace YMCL.Public.Module.App.Init.SubModule;\n\npublic class Decision\n{\n    public static (bool ifShow, int page) WhetherToShowInitView()\n    {\n        if (Data.SettingEntry.Language.Code == null)\n        {\n            return (true, 1);\n        }\n\n        if (!Data.SettingEntry.IsCompleteMinecraftFolderInitialize)\n        {\n            return (true, 2);\n        }\n\n        if (!Data.SettingEntry.IsCompleteJavaInitialize)\n        {\n            return (true, 3);\n        }\n\n        if (!Data.SettingEntry.IsCompleteAccountInitialize)\n        {\n            return (true, 4);\n        } \n        \n        return (false, 0);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/DetectPlatform.cs",
    "content": "﻿using System.Runtime.InteropServices;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Public.Module.App.Init.SubModule;\n\npublic class DetectPlatform\n{\n    public static void Main()\n    {\n        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n        {\n            Console.WriteLine(\"Running on Windows\");\n            Const.Data.DesktopType = DesktopRunnerType.Windows;\n        }\n        else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))\n        {\n            Console.WriteLine(\"Running on Linux\");\n            Const.Data.DesktopType = DesktopRunnerType.Linux;\n        }\n        else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))\n        {\n            Console.WriteLine(\"Running on macOS\");\n            Const.Data.DesktopType = DesktopRunnerType.MacOs;\n        }\n        else if (RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD))\n        {\n            Console.WriteLine(\"Running on FreeBSD\");\n            Const.Data.DesktopType = DesktopRunnerType.FreeBSD;\n        }\n        else\n        {\n            Console.WriteLine(\"Running on an unknown platform\");\n            Const.Data.DesktopType = DesktopRunnerType.Unknown;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/GetDataFromNetwork/Dispatcher.cs",
    "content": "﻿namespace YMCL.Public.Module.App.Init.SubModule.GetDataFromNetwork;\n\npublic class Dispatcher\n{\n    public static void Dispatch()\n    {\n        _ = InstallableGame.Load();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/GetDataFromNetwork/InstallPreviewModLoaders.cs",
    "content": "﻿using System.Linq;\nusing MinecraftLaunch.Components.Installer;\nusing YMCL.Views.Main.Pages.DownloadPages.AutoInstallPages;\n\nnamespace YMCL.Public.Module.App.Init.SubModule.GetDataFromNetwork;\n\npublic class InstallPreviewModLoaders\n{\n    public static void Load(InstallPreview view, string id)\n    {\n        _ = Task.Run(async () => // OptiFine\n        {\n            try\n            {\n                var list = await OptifineInstaller.EnumerableOptifineAsync(id).ToListAsync();\n                view.Model.OptifineLoading = false;\n                view.Model.NoOptiFine = list.Count == 0;\n                list.ForEach(item => { view.Model.OptiFines.Add(item); });\n            }\n            catch (Exception)\n            {\n                await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                {\n                    // ShowShortException($\"{MainLang.GetFail}: OptiFine\", ex);\n                    view.Model.OptifineLoading = false;\n                });\n            }\n        });\n        _ = Task.Run(async () => // Forge\n        {\n            try\n            {\n                var list = await ForgeInstaller.EnumerableForgeAsync(id).ToListAsync();\n                view.Model.ForgeLoading = false;\n                view.Model.NoForge = list.Count == 0;\n                list.ForEach(item => { view.Model.Forges.Add(item); });\n            }\n            catch (Exception)\n            {\n                await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                {\n                    // ShowShortException($\"{MainLang.GetFail}: Forge\", ex);\n                    view.Model.ForgeLoading = false;\n                });\n            }\n        });\n        _ = Task.Run(async () => // NeoForge\n        {\n            try\n            {\n                var list = await ForgeInstaller.EnumerableForgeAsync(id, true).ToListAsync();\n                view.Model.NeoForgeLoading = false;\n                view.Model.NoNeoForge = list.Count == 0;\n                list.ForEach(item => { view.Model.NeoForges.Add(item); });\n            }\n            catch (Exception)\n            {\n                await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                {\n                    // ShowShortException($\"{MainLang.GetFail}: NeoForge\", ex);\n                    view.Model.NeoForgeLoading = false;\n                });\n            }\n        });\n        _ = Task.Run(async () => // Quilt\n        {\n            try\n            {\n                var list = await QuiltInstaller.EnumerableQuiltAsync(id).ToListAsync();\n                view.Model.QuiltLoading = false;\n                view.Model.NoQuilt = list.Count == 0;\n                list.ForEach(item => { view.Model.Quilts.Add(item); });\n            }\n            catch (Exception)\n            {\n                await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                {\n                    // ShowShortException($\"{MainLang.GetFail}: Quilt\", ex);\n                    view.Model.QuiltLoading = false;\n                });\n            }\n        });\n        _ = Task.Run(async () => // Fabric\n        {\n            try\n            {\n                var list = await FabricInstaller.EnumerableFabricAsync(id).ToListAsync();\n                view.Model.FabricLoading = false;\n                view.Model.NoFabric = list.Count == 0;\n                list.ForEach(item => { view.Model.Fabrics.Add(item); });\n            }\n            catch (Exception)\n            {\n                await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                {\n                    // ShowShortException($\"{MainLang.GetFail}: Fabric\", ex);\n                    view.Model.FabricLoading = false;\n                });\n            }\n        });\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/GetDataFromNetwork/InstallableGames.cs",
    "content": "﻿using System.Linq;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Installer;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui.Special;\n\nnamespace YMCL.Public.Module.App.Init.SubModule.GetDataFromNetwork;\n\npublic class InstallableGame\n{\n    public static async Task Load()\n    {\n        await Task.Run(async () =>\n        {\n            try\n            {\n                var mcCoreList = await VanillaInstaller.EnumerableMinecraftAsync().ToListAsync();\n                var manifestEntries = mcCoreList.ToList();\n                UiProperty.Instance.LatestReleaseGame = manifestEntries.FirstOrDefault(item => item.Type == \"release\");\n                UiProperty.Instance.LatestSnapshotGame =\n                    manifestEntries.FirstOrDefault(item => item.Type == \"snapshot\");\n                foreach (var item in manifestEntries)\n                {\n                    UiProperty.AllInstallableGames.Add(item);\n                    if (item.Type == \"release\")\n                    {\n                        UiProperty.ReleaseInstallableGames.Add(item);\n                    }\n                    else if (item.Type == \"snapshot\")\n                    {\n                        UiProperty.SnapshotInstallableGames.Add(item);\n                    }\n                    else\n                    {\n                        UiProperty.OldInstallableGames.Add(item);\n                    }\n                }\n\n                AggregateSearchUi.UpdateAllAggregateSearchEntries();\n                UiProperty.Instance.InstallableRingIsVisible = false;\n            }\n            catch\n            {\n                await Task.Delay(700);\n                Avalonia.Threading.Dispatcher.UIThread.Invoke(() =>\n                {\n                    YMCL.App.UiRoot.ViewModel.Download._autoInstall.InstallableGames.LoadInstallableVersionListErrorInfoBar\n                        .IsVisible = true;\n                    UiProperty.Instance.LatestReleaseGame = new VersionManifestEntry\n                        { ReleaseTime = new DateTime(1970, 1, 1, 0, 0, 0), Id = MainLang.LoadFail, Type = null };\n                    UiProperty.Instance.LatestSnapshotGame = new VersionManifestEntry\n                        { ReleaseTime = new DateTime(1970, 1, 1, 0, 0, 0), Id = MainLang.LoadFail, Type = null };\n                });\n            }\n        });\n        YMCL.App.UiRoot.ViewModel.Download._autoInstall.InstallableGames.Filter();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/InitConfig.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\nusing MinecraftLaunch.Components.Authenticator;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Netease;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Classes.Setting;\n\nnamespace YMCL.Public.Module.App.Init.SubModule;\n\npublic static class InitConfig\n{\n    public static void Dispatch()\n    {\n        CreateFolder();\n        CreateFile();\n    }\n\n    public static void CreateFolder()\n    {\n        IO.Disk.Setter.TryCreateFolder(ConfigPath.UserDataRootPath);\n        IO.Disk.Setter.TryCreateFolder(ConfigPath.PluginFolderPath);\n        IO.Disk.Setter.TryCreateFolder(ConfigPath.TempFolderPath);\n        IO.Disk.Setter.TryCreateFolder(ConfigPath.UpdateFolderPath);\n    }\n\n    public static void CreateFile()\n    {\n        File.WriteAllText(ConfigPath.AppPathDataPath,\n            System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);\n        if (!File.Exists(ConfigPath.SettingDataPath))\n            File.WriteAllText(ConfigPath.SettingDataPath,\n                JsonConvert.SerializeObject(new SettingEntry(), Formatting.Indented));\n        if (!File.Exists(ConfigPath.FavouriteResourceDataPath))\n            File.WriteAllText(ConfigPath.FavouriteResourceDataPath,\n                JsonConvert.SerializeObject(new List<FavouriteResourceEntry>(), Formatting.Indented));\n        if (!File.Exists(ConfigPath.MinecraftFolderDataPath))\n        {\n            var path = Path.Combine(ConfigPath.UserDataRootPath, \".minecraft\");\n            IO.Disk.Setter.TryCreateFolder(path);\n            File.WriteAllText(ConfigPath.MinecraftFolderDataPath,\n                JsonConvert.SerializeObject(\n                    new List<MinecraftFolder>([\n                        new MinecraftFolder { Name = \"Minecraft Folder\", Path = path }\n                    ]), Formatting.Indented));\n            var setting1 = JsonConvert.DeserializeObject<SettingEntry>(File.ReadAllText(ConfigPath.SettingDataPath));\n            setting1.MinecraftFolder = new MinecraftFolder { Name = \"Minecraft Folder\", Path = path };\n            File.WriteAllText(ConfigPath.SettingDataPath,\n                JsonConvert.SerializeObject(setting1, Formatting.Indented));\n        }\n\n        if (!File.Exists(ConfigPath.JavaDataPath))\n            File.WriteAllText(ConfigPath.JavaDataPath,\n                JsonConvert.SerializeObject(new List<JavaEntry>(), Formatting.Indented));\n        if (!File.Exists(ConfigPath.FavouriteMinecraftDataPath))\n            File.WriteAllText(ConfigPath.FavouriteMinecraftDataPath,\n                JsonConvert.SerializeObject(new List<FavouriteMinecraftEntry>(), Formatting.Indented));\n        if (!File.Exists(ConfigPath.PluginDataPath))\n            File.WriteAllText(ConfigPath.PluginDataPath,\n                JsonConvert.SerializeObject(new List<string>(), Formatting.Indented));\n        if (!File.Exists(ConfigPath.PlayerDataPath))\n            File.WriteAllText(ConfigPath.PlayerDataPath,\n                JsonConvert.SerializeObject(new List<RecordSongEntry>(), Formatting.Indented));\n        if (!File.Exists(ConfigPath.AccountDataPath))\n            File.WriteAllText(ConfigPath.AccountDataPath,\n                JsonConvert.SerializeObject(\n                    new List<AccountInfo>\n                    {\n                        new()\n                        {\n                            Name = \"Steve\", AccountType = Enum.Setting.AccountType.Offline,\n                            AddTime = DateTime.Now.ToString(\"yyyy-MM-ddTHH:mm:sszzz\"),\n                            Data = JsonConvert.SerializeObject(new OfflineAuthenticator().Authenticate(\"Steve\"))\n                        }\n                    }, Formatting.Indented));\n        if (File.Exists(ConfigPath.CustomHomePageXamlDataPath)) return;\n        const string resourceName = \"YMCL.Public.Texts.CustomHomePageDefault.axaml\";\n        var _assembly = Assembly.GetExecutingAssembly();\n        var stream = _assembly.GetManifestResourceStream(resourceName);\n        using var reader = new StreamReader(stream!);\n        var result = reader.ReadToEnd();\n        File.WriteAllText(ConfigPath.CustomHomePageXamlDataPath, result);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/InitData.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.IO;\nusing System.Linq;\nusing System.Net;\nusing System.Threading.Tasks;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch;\nusing MinecraftLaunch.Components.Parser;\nusing MinecraftLaunch.Components.Provider;\nusing MinecraftLaunch.Utilities;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing CrashWindow = YMCL.Views.CrashWindow;\n\nnamespace YMCL.Public.Module.App.Init.SubModule;\n\npublic class InitData\n{\n    public static void GetSettingData()\n    {\n        Data.MinecraftFolders =\n            JsonConvert.DeserializeObject<ObservableCollection<MinecraftFolder>>(\n                File.ReadAllText(ConfigPath.MinecraftFolderDataPath));\n        Data.JavaRuntimes =\n            JsonConvert.DeserializeObject<ObservableCollection<JavaEntry>>(\n                File.ReadAllText(ConfigPath.JavaDataPath));\n        Data.FavouriteResources =\n            JsonConvert.DeserializeObject<ObservableCollection<FavouriteResourceEntry>>(\n                File.ReadAllText(ConfigPath.FavouriteResourceDataPath));\n        Data.FavouriteMinecraft =\n            JsonConvert.DeserializeObject<ObservableCollection<FavouriteMinecraftEntry>>(\n                File.ReadAllText(ConfigPath.FavouriteMinecraftDataPath));\n        Data.Accounts =\n            JsonConvert.DeserializeObject<ObservableCollection<AccountInfo>>(\n                File.ReadAllText(ConfigPath.AccountDataPath));\n        Data.EnablePlugins =\n            JsonConvert.DeserializeObject<ObservableCollection<string>>(\n                File.ReadAllText(ConfigPath.PluginDataPath));\n        Data.SettingEntry =\n            JsonConvert.DeserializeObject<SettingEntry>(File.ReadAllText(ConfigPath.SettingDataPath));\n        try\n        {\n            if (Data.SettingEntry.SelectedMinecraftId == \"bedrock\")\n            {\n                if (Data.DesktopType == DesktopRunnerType.Windows && Environment.OSVersion.Version.Major >= 10)\n                {\n                    Data.UiProperty.SelectedMinecraft = new MinecraftDataEntry(null, true, true)\n                        { IsSettingVisible = false, Type = \"bedrock\" };\n                }\n            }\n            else\n            {\n                var parser = new MinecraftParser(Data.SettingEntry.MinecraftFolder.Path);\n                Data.UiProperty.SelectedMinecraft =\n                    new MinecraftDataEntry(parser.GetMinecraft(Data.SettingEntry.SelectedMinecraftId));\n            }\n        }\n        catch\n        {\n        }\n    }\n\n    public static void InitCollection()\n    {\n        if (!Data.JavaRuntimes.Contains(new JavaEntry\n                { JavaPath = MainLang.LetYMCLChooseJava, JavaVersion = \"Auto\" }))\n        {\n            Data.JavaRuntimes.Insert(0,\n                new JavaEntry { JavaPath = MainLang.LetYMCLChooseJava, JavaVersion = \"Auto\" });\n        }\n        else\n        {\n            Data.JavaRuntimes.FirstOrDefault(java => java.JavaVersion == \"Auto\").JavaPath =\n                MainLang.LetYMCLChooseJava;\n        }\n    }\n\n    public static void VerifyData()\n    {\n        if (!Data.MinecraftFolders.Contains(Data.SettingEntry.MinecraftFolder))\n        {\n            Data.SettingEntry.MinecraftFolder = Data.MinecraftFolders[0];\n        }\n\n        if (!Data.Accounts.Contains(Data.SettingEntry.Account))\n        {\n            Data.SettingEntry.Account = Data.Accounts[0];\n        }\n\n        if (!Data.JavaRuntimes.Contains(Data.SettingEntry.Java))\n        {\n            Data.SettingEntry.Java = Data.JavaRuntimes[0];\n        }\n    }\n\n    public static void InitSystemMaxMem()\n    {\n        var totalMemory = Public.Module.IO.Disk.Getter.GetTotalMemory(Data.DesktopType);\n        if (totalMemory != 0)\n            UiProperty.Instance.SystemMaxMem = Math.Floor(totalMemory / 1024);\n        else\n            UiProperty.Instance.SystemMaxMem = 65536;\n    }\n\n    public static void InitMl()\n    {\n        HttpUtil.Initialize();\n        CurseforgeProvider.CurseforgeApiKey = Const.String.CurseForgeApiKey;\n        DownloadMirrorManager.MaxThread = Data.SettingEntry.MaxDownloadThread;\n        DownloadMirrorManager.IsEnableMirror = Data.SettingEntry.DownloadSource == Enum.Setting.DownloadSource.BmclApi;\n        ServicePointManager.DefaultConnectionLimit = int.MaxValue;\n    }\n\n    public static void ClearTempFolder()\n    {\n        try\n        {\n            IO.Disk.Setter.ClearFolder(ConfigPath.TempFolderPath);\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/InitLang.cs",
    "content": "﻿using YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.App.Init.SubModule;\n\npublic class InitLang\n{\n    public static void Dispatch()\n    {\n        if (Data.SettingEntry == null || Data.SettingEntry.Language == null || Data.SettingEntry.Language.Code == \"zh-CN\")\n            LangHelper.Current.ChangedCulture(\"\");\n        else\n            LangHelper.Current.ChangedCulture(Data.SettingEntry.Language.Code);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/InitPlugin.cs",
    "content": "﻿using System.Linq;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Disk;\nusing YMCL.Public.Plugin;\n\nnamespace YMCL.Public.Module.App.Init.SubModule;\n\npublic class InitPlugin\n{\n    public static void Dispatch()\n    {\n        ScanPlugin();\n        ExecuteEnablePlugin();\n    }\n\n    private static void ExecuteEnablePlugin()\n    {\n        foreach (var pluginInfoEntry in Data.IdentifiedPlugins)\n        {\n            try\n            {\n                if (pluginInfoEntry.IsEnable)\n                {\n                    pluginInfoEntry.Plugin.Execute(true);\n                }\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n                ShowShortException(MainLang.LoadPluginError ,e);\n            }\n        }\n    }\n\n    private static void ScanPlugin()\n    {\n        var dlls = Getter.GetAllFilesByExtension(ConfigPath.PluginFolderPath, \"*.dll\");\n        dlls.ForEach(dll =>\n        {\n            try\n            {\n                var pluginAssembly = Loader.LoadPlugin(dll);\n                var plugins = Loader.CreateCommands(pluginAssembly);\n                foreach (var plugin in plugins)\n                {\n                    if (Data.IdentifiedPlugins.All(x => x.Path != dll))\n                    {\n                        Data.IdentifiedPlugins.Add(new PluginInfoEntry(plugin, dll , Data.EnablePlugins.Contains(dll)));\n                    }\n                }\n            }\n            catch\n            {\n            }\n        });\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/InitUi.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Net.Http;\nusing Avalonia.Animation;\nusing Avalonia.Media;\nusing Avalonia.Styling;\nusing Avalonia.VisualTree;\nusing FluentAvalonia.Core;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Public.Module.App.Init.SubModule;\n\npublic class InitUi\n{\n    public static async Task Dispatch()\n    {\n        Ui.Setter.SetAccentColor(Data.SettingEntry.AccentColor);\n        Application.Current.Resources[\"MainOpacity\"] = 1.0;\n        DisplaceDefaultUi();\n        Ui.Setter.SetBackGround();\n        Ui.Setter.DynamicStyle.SetDynamicStyle();\n        _ = SetCustomHomePage();\n        Application.Current.ActualThemeVariantChanged += (_, _) => { UpdateTheme(); };\n        Ui.Setter.ToggleTheme(Data.SettingEntry.Theme);\n        // YMCL.App.UiRoot.ViewModel.Download.CurseForgeFetcher.SearchAction();\n        if (Data.SettingEntry.EnableAutoCheckUpdate)\n        {\n            var result = await IO.Network.Update.CheckUpdateAsync();\n            if (result is { Success: true, IsNeedUpdate: true })\n            {\n                _ = ShowAutoUpdateDialog(result);\n            }\n        }\n    }\n\n    public static void UpdateTheme()\n    {\n        YMCL.Public.Module.Ui.Setter.SetBackGround();\n        try\n        {\n            if (YMCL.App.UiRoot != null)\n            {\n                (Ui.Getter.FindControlByName(YMCL.App.UiRoot, \"PART_PaneRoot\") as Panel).Transitions =\n                [\n                    new BrushTransition()\n                    {\n                        Duration = TimeSpan.FromSeconds(0.3),\n                        Property = Panel.BackgroundProperty\n                    }\n                ];\n                (Ui.Getter.FindControlByName(YMCL.App.UiRoot, \"PART_PaneRoot\") as Panel).Background =\n                    Application.Current.ActualThemeVariant == ThemeVariant.Dark\n                        ? SolidColorBrush.Parse(\"#2c2c2c\")\n                        : SolidColorBrush.Parse(\"#FFE9F6FF\");\n            }\n\n            var visuals = new Queue<Visual>();\n            if (YMCL.App.UiRoot != null) visuals.Enqueue(YMCL.App.UiRoot);\n\n            while (visuals.Count > 0)\n            {\n                var current = visuals.Dequeue();\n\n                if (current is not Control control) continue;\n                foreach (var child in control.GetVisualChildren())\n                {\n                    visuals.Enqueue(child);\n                }\n\n                if (control is Image { Source: DrawingImage } imageControl)\n                {\n                    imageControl.InvalidateVisual();\n                }\n            }\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n        }\n\n        try\n        {\n            if (YMCL.App.UiRoot == null) return;\n            (Getter.FindControlByName(YMCL.App.UiRoot, \"PART_PaneRoot\") as Panel).Background =\n                Application.Current.ActualThemeVariant == ThemeVariant.Dark\n                    ? SolidColorBrush.Parse(\"#2c2c2c\")\n                    : SolidColorBrush.Parse(\"#FFE9F6FF\");\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n        }\n    }\n\n\n    public static void DisplaceDefaultUi()\n    {\n        if (YMCL.App.UiRoot is null) return;\n        try\n        {\n            (Getter.FindControlByName(YMCL.App.UiRoot, \"ContentGridBorder\") as Border).Background = null;\n            (Getter.FindControlByName(YMCL.App.UiRoot, \"ContentGridBorder\") as Border).BorderThickness =\n                new Thickness(0);\n            (Getter.FindControlByName(YMCL.App.UiRoot, \"PART_PaneRoot\") as Panel).Background =\n                Application.Current.ActualThemeVariant == ThemeVariant.Dark\n                    ? SolidColorBrush.Parse(\"#2c2c2c\")\n                    : SolidColorBrush.Parse(\"#FFE9F6FF\");\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n        }\n\n        FAUISettings.SetAnimationsEnabledAtAppLevel(false); //关闭 FA 动画\n    }\n\n    public static async Task SetCustomHomePage()\n    {\n        if (YMCL.App.UiRoot is null) return;\n        if (Data.SettingEntry.CustomHomePage == Enum.Setting.CustomHomePageWay.None)\n        {\n            YMCL.App.UiRoot.ViewModel.Launch.CustomPageRoot.Child = null;\n        }\n\n        if (Data.SettingEntry.CustomHomePage == Enum.Setting.CustomHomePageWay.Local)\n        {\n            try\n            {\n                var c = (Control)AvaloniaRuntimeXamlLoader.Load(\n                    await File.ReadAllTextAsync(ConfigPath.CustomHomePageXamlDataPath));\n                YMCL.App.UiRoot.ViewModel.Launch.CustomPageRoot.Child = c;\n            }\n            catch\n            {\n                //ShowLongException(MainLang.CustomHomePageSourceCodeError, ex);\n            }\n        }\n\n        if (Data.SettingEntry.CustomHomePage == Enum.Setting.CustomHomePageWay.Network)\n        {\n            if (!Uri.TryCreate(Data.SettingEntry.CustomUpdateUrl, UriKind.Absolute, out _)) return;\n            try\n            {\n                using var client = new HttpClient();\n                var code = await client.GetStringAsync(Data.SettingEntry.CustomUpdateUrl);\n                if (code is null) throw new ArgumentNullException(\"CustomHomePageSourceCode\");\n                var c = (Control)AvaloniaRuntimeXamlLoader.Load(code);\n                YMCL.App.UiRoot.ViewModel.Launch.CustomPageRoot.Child = c;\n            }\n            catch\n            {\n                //ShowLongException(MainLang.CustomHomePageSourceCodeError, ex);\n            }\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/SettingChanged.cs",
    "content": "﻿using System.Linq;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.App.Init.SubModule;\n\npublic class SettingChanged\n{\n    public static void Binding()\n    {\n        Data.SettingEntry.PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(SettingEntry.Language))\n            {\n                Data.JavaRuntimes.FirstOrDefault(java => java.JavaVersion == \"Auto\").JavaPath =\n                    MainLang.LetYMCLChooseJava;\n            }\n            \n            if (e.PropertyName == nameof(SettingEntry.NoticeWay))\n            {\n                Notice(MainLang.ExampleNotification);\n            }\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Init/SubModule/TranslateToken.cs",
    "content": "using System.Net.Http;\n\nnamespace YMCL.Public.Module.App.Init.SubModule;\n\npublic class TranslateToken\n{\n    public static async void RefreshToken()\n    {\n        await Task.Delay(200);\n        while (true)\n        {\n            try\n            {\n                var handler = new HttpClientHandler()\n                {\n                    ServerCertificateCustomValidationCallback = (_, _, _, _) => true\n                };\n                using var client = new HttpClient(handler);\n                client.DefaultRequestHeaders.Add(\"User-Agent\", \"Apifox/1.0.0 (https://apifox.com)\");\n                client.DefaultRequestHeaders.Add(\"Accept\", \"*/*\");\n                client.DefaultRequestHeaders.Add(\"Host\", \"edge.microsoft.com\");\n                client.DefaultRequestHeaders.Add(\"Connection\", \"keep-alive\");\n\n                HttpResponseMessage response =\n                    await client.GetAsync(\"https://edge.microsoft.com/translate/auth\");\n                response.EnsureSuccessStatusCode();\n                string responseBody = await response.Content.ReadAsStringAsync();\n                Const.Data.TranslateToken = responseBody;\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n            }\n\n            await Task.Delay(TimeSpan.FromMinutes(1));\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/App/Setting.cs",
    "content": "﻿using System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Module.App.Init.SubModule;\n\nnamespace YMCL.Public.Module.App;\n\npublic class Setting\n{\n    public static string Export(bool ui, bool net, bool launch, bool other, bool accounts)\n    {\n        var s = Data.SettingEntry;\n        var data = new ExchangeSettingEntry.Data()\n        {\n            NetworkSettings = net\n                ? new ExchangeSettingEntry.NetworkSettings()\n                {\n                    EnableAutoCheckUpdate = s.EnableAutoCheckUpdate,\n                    MaxDownloadThread = s.MaxDownloadThread,\n                    CustomUpdateUrl = s.CustomUpdateUrl,\n                    EnableCustomUpdateUrl = s.EnableCustomUpdateUrl,\n                    MusicApiWithIPAddress = s.MusicApiWithIPAddress,\n                    DownloadSource = s.DownloadSource,\n                    MusicApi = s.MusicApi,\n                    MaxFileFragmentation = s.MaxFileFragmentation\n                }\n                : null,\n\n            LaunchSettings = launch\n                ? new ExchangeSettingEntry.LaunchSettings()\n                {\n                    MaxMem = s.MaxMem,\n                    EnableIndependencyCore = s.EnableIndependencyCore,\n                    EnableAutoAllocateMem = s.EnableAutoAllocateMem\n                }\n                : null,\n\n            UiSettings = ui\n                ? new ExchangeSettingEntry.UiSettings()\n                {\n                    TranslucentBackgroundOpacity = s.TranslucentBackgroundOpacity, Theme = s.Theme,\n                    LauncherVisibility = s.LauncherVisibility,\n                    SpecialControlEnableTranslucent = s.SpecialControlEnableTranslucent,\n                    CornerRadius = s.CornerRadius,\n                    CustomHomePageUrl = s.CustomHomePageUrl,\n                    EnableIndependencyWindowNotification = s.EnableIndependencyWindowNotification,\n                    DeskLyricColor = s.DeskLyricColor,\n                    NoticeWay = s.NoticeWay,\n                    AccentColor = s.AccentColor,\n                    Language = s.Language,\n                    CustomBackGround = s.CustomBackGround,\n                    DeskLyricSize = s.DeskLyricSize,\n                    DeskLyricAlignment = s.DeskLyricAlignment,\n                    WindowBackGroundImgData = s.WindowBackGroundImgData\n                }\n                : null,\n\n            OtherSettings = other\n                ? new ExchangeSettingEntry.OtherSettings() { Volume = s.Volume, Repeat = s.Repeat }\n                : null,\n            AccountSettings = accounts\n                ? Data.Accounts.Where(x => x.AccountType != Enum.Setting.AccountType.Microsoft)\n                : null\n        };\n        var json = JsonConvert.SerializeObject(data, Formatting.None);\n        var bytes = Encoding.UTF8.GetBytes(json);\n        return BitConverter.ToString(bytes).Replace(\"-\", \"\");\n    }\n\n    public static (bool success, ExchangeSettingEntry.Data? data) Import(string hex)\n    {\n        try\n        {\n            if (hex.Length % 2 != 0)\n                return (false, null);\n\n            var bytes = new byte[hex.Length / 2];\n            for (var i = 0; i < hex.Length; i += 2)\n            {\n                bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);\n            }\n\n            var json = Encoding.UTF8.GetString(bytes);\n            return (true, JsonConvert.DeserializeObject<ExchangeSettingEntry.Data>(json));\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            return (false, null);\n        }\n    }\n\n    public static void Replace(SettingEntry s, ExchangeSettingEntry.Data data)\n    {\n        if (data.NetworkSettings != null)\n        {\n            var networkSettingsType = typeof(ExchangeSettingEntry.NetworkSettings);\n            var networkProperties = networkSettingsType.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n\n            var sType = s.GetType();\n            foreach (var prop in networkProperties)\n            {\n                var sProp = sType.GetProperty(prop.Name);\n                if (sProp != null && sProp.CanWrite)\n                {\n                    sProp.SetValue(s, prop.GetValue(data.NetworkSettings));\n                }\n            }\n        }\n\n        // 处理 LaunchSettings\n        if (data.LaunchSettings != null)\n        {\n            var launchSettingsType = typeof(ExchangeSettingEntry.LaunchSettings);\n            var launchProperties = launchSettingsType.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n\n            var sType = s.GetType();\n            foreach (var prop in launchProperties)\n            {\n                var sProp = sType.GetProperty(prop.Name);\n                if (sProp != null && sProp.CanWrite)\n                {\n                    sProp.SetValue(s, prop.GetValue(data.LaunchSettings));\n                }\n            }\n        }\n\n        // 处理 UiSettings\n        if (data.UiSettings != null)\n        {\n            var uiSettingsType = typeof(ExchangeSettingEntry.UiSettings);\n            var uiProperties = uiSettingsType.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n\n            var sType = s.GetType();\n            foreach (var prop in uiProperties)\n            {\n                var sProp = sType.GetProperty(prop.Name);\n                if (sProp != null && sProp.CanWrite)\n                {\n                    sProp.SetValue(s, prop.GetValue(data.UiSettings));\n                }\n            }\n        }\n\n        // 处理 OtherSettings\n        if (data.OtherSettings != null)\n        {\n            var otherSettingsType = typeof(ExchangeSettingEntry.OtherSettings);\n            var otherProperties = otherSettingsType.GetProperties(BindingFlags.Public | BindingFlags.Instance);\n\n            var sType = s.GetType();\n            foreach (var prop in otherProperties)\n            {\n                var sProp = sType.GetProperty(prop.Name);\n                if (sProp != null && sProp.CanWrite)\n                {\n                    sProp.SetValue(s, prop.GetValue(data.OtherSettings));\n                }\n            }\n        }\n\n        if (data.AccountSettings != null)\n        {\n            data.AccountSettings.ToList().ForEach(x =>\n            {\n                if (!Data.Accounts.Contains(x))\n                {\n                    Data.Accounts.Add(x);\n                }\n            });\n            File.WriteAllText(ConfigPath.AccountDataPath,\n                JsonConvert.SerializeObject(Data.Accounts, Formatting.Indented));\n            Public.Module.Ui.Special.AggregateSearchUi.UpdateAllAggregateSearchEntries();\n        }\n\n        _ = InitUi.Dispatch();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Debouncer.cs",
    "content": "﻿using System.Timers;\n\nnamespace YMCL.Public.Module;\n\npublic class Debouncer\n{\n    private readonly Timer _timer;\n    private readonly Action _action;\n\n    public Debouncer(Action action, double interval = 1000)\n    {\n        _action = action;\n        _timer = new Timer(interval);\n        _timer.Elapsed += OnTimerElapsed!;\n        _timer.AutoReset = false;\n    }\n\n    public void Trigger()\n    {\n        _timer.Stop();\n        _timer.Start();\n    }\n\n    private void OnTimerElapsed(object source, ElapsedEventArgs e)\n    {\n        _timer.Stop();\n        _action?.Invoke();\n    }\n\n    public void Dispose()\n    {\n        _timer?.Stop();\n        _timer?.Dispose();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Disk/Getter.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Management;\nusing System.Net.NetworkInformation;\nusing System.Runtime.InteropServices;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Public.Module.IO.Disk;\n\npublic class Getter\n{\n    public static double GetTotalMemory(DesktopRunnerType platform)\n    {\n        if (platform == DesktopRunnerType.Windows)\n            try\n            {\n                long totalMemory = 0;\n                using (var searcher =\n                       new ManagementObjectSearcher(\"select TotalVisibleMemorySize from Win32_OperatingSystem\"))\n                {\n                    foreach (var o in searcher.Get())\n                    {\n                        var share = (ManagementObject)o;\n                        totalMemory = Convert.ToInt64(share[\"TotalVisibleMemorySize\"]);\n                    }\n                }\n\n                Console.WriteLine(\"MaxMem: \" + totalMemory);\n\n                return totalMemory;\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine(\"Error: \" + ex.Message);\n                return 0;\n            }\n\n        if (platform == DesktopRunnerType.Linux)\n            // 尝试读取 /proc/meminfo 文件  \n            try\n            {\n                var meminfo = File.ReadAllText(\"/proc/meminfo\");\n\n                // 使用 LINQ 查询来找到 \"MemTotal\" 行  \n                var memTotalLine = meminfo.Split(new[] { Environment.NewLine }, StringSplitOptions.None)\n                    .FirstOrDefault(line => line.StartsWith(\"MemTotal:\"));\n\n                // 如果找到 MemTotal 行，解析其值  \n                if (memTotalLine == null) return 0;\n                // 提取 MemTotal 后面的数字，并转换为长整型  \n                var memTotalValueStr = memTotalLine.Split(':')[1].Trim().Split(' ')[0];\n                var memTotalValue = long.Parse(memTotalValueStr);\n\n                return memTotalValue;\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine(\"Error reading /proc/meminfo: \" + ex.Message);\n                return 0;\n            }\n\n        return 0;\n    }\n\n    public static string GetMacAddress()\n    {\n        var macAddress = string.Empty;\n        foreach (var ni in NetworkInterface.GetAllNetworkInterfaces())\n        {\n            if (ni.OperationalStatus != OperationalStatus.Up) continue;\n            macAddress = ni.GetPhysicalAddress().ToString();\n            break;\n        }\n\n        return macAddress.Replace(\"-\", \"\").ToLower(); // 移除MAC地址中的\"-\"并转为小写\n    }\n\n    public static double GetDirectoryLength(string dirPath)\n    {\n        //判断给定的路径是否存在,如果不存在则退出\n        if (!Directory.Exists(dirPath))\n            return 0;\n\n        //定义一个DirectoryInfo对象\n        var di = new DirectoryInfo(dirPath);\n\n        //通过GetFiles方法,获取di目录中的所有文件的大小\n        var len = di.GetFiles().Aggregate<FileInfo, double>(0, (current, fi) => current + fi.Length);\n\n        //获取di中所有的文件夹,并存到一个新的对象数组中,以进行递归\n        var dis = di.GetDirectories();\n        if (dis.Length <= 0) return len;\n        len += dis.Sum(t => GetDirectoryLength(t.FullName));\n        return len;\n    }\n\n    public static Bitmap LoadBitmapFromAppFile(string uri)\n    {\n        var memoryStream = new MemoryStream();\n        var stream = AssetLoader.Open(new Uri(\"resm:\" + uri));\n        stream.CopyTo(memoryStream);\n        memoryStream.Position = 0;\n        return new Bitmap(memoryStream);\n    }\n\n    public static string GetCurrentPlatformAndArchitecture()\n    {\n        // 检测操作系统  \n        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n        {\n            // 检测架构  \n            if (RuntimeInformation.ProcessArchitecture == Architecture.X64)\n                return \"win-x64\";\n            if (RuntimeInformation.ProcessArchitecture == Architecture.X86) return \"win-x86\";\n            // 其他的 Windows 架构可能也需要处理（比如 ARM）  \n        }\n        else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))\n        {\n                return \"osx\";\n        }\n        else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))\n        {\n            if (RuntimeInformation.ProcessArchitecture == Architecture.X64)\n                return \"linux-x64\";\n            if (RuntimeInformation.ProcessArchitecture == Architecture.Arm)\n                return \"linux-arm\"; // 注意: 这里应该是 linux-arm 而不是 liux-arm  \n            if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64) return \"linux-arm64\";\n        }\n        // 其他操作系统可能需要额外处理  \n\n        // 如果没有匹配项，返回未知或默认字符串  \n        return \"unknown\";\n    }\n\n    public static List<string> GetAllFilesByExtension(string folderPath, string fileExtension)\n    {\n        List<string> files = [];\n\n        // 检查路径是否存在\n        if (!Directory.Exists(folderPath))\n        {\n            Console.WriteLine(\"指定的文件夹路径不存在！\");\n            return files;\n        }\n\n        // 使用递归方法获取所有文件\n        var dirInfo = new DirectoryInfo(folderPath);\n        files.AddRange(GetFilesRecursive(dirInfo, fileExtension));\n\n        return files;\n\n        static List<string> GetFilesRecursive(DirectoryInfo dirInfo, string fileExtension)\n        {\n            List<string> files = [];\n\n            // 获取当前目录中的所有指定后缀的文件\n            var fileInfos = dirInfo.GetFiles(fileExtension, SearchOption.TopDirectoryOnly);\n            files.AddRange(fileInfos.Select(fileInfo => fileInfo.FullName));\n\n            // 递归获取子目录中的文件\n            var subDirs = dirInfo.GetDirectories();\n            foreach (var subDir in subDirs)\n            {\n                files.AddRange(GetFilesRecursive(subDir, fileExtension));\n            }\n\n            return files;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Disk/Opener.cs",
    "content": "﻿using System.Diagnostics;\nusing System.IO;\nusing Avalonia.Platform.Storage;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Public.Module.IO.Disk;\n\npublic class Opener\n{\n    public static async Task OpenFolder(string path)\n    {\n        if (Data.DesktopType == DesktopRunnerType.MacOs)\n        {\n            var process = new Process();\n            process.StartInfo.FileName = \"open\";\n            process.StartInfo.Arguments = $\"\\\"{path}\\\"\";\n            process.StartInfo.UseShellExecute = false;\n            process.StartInfo.CreateNoWindow = true;\n            process.Start();\n        }\n        else\n        {\n            var launcher = TopLevel.GetTopLevel(YMCL.App.UiRoot).Launcher;\n            await launcher.LaunchDirectoryInfoAsync(new DirectoryInfo(path));\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Disk/Setter.cs",
    "content": "﻿using System.IO;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Layout;\nusing Avalonia.Media;\nusing FluentAvalonia.Core;\nusing FluentAvalonia.UI.Controls;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.IO.Disk;\n\npublic class Setter\n{\n    public static void TryCreateFolder(string path)\n    {\n        if (Directory.Exists(path)) return;\n        var directoryInfo = new DirectoryInfo(path);\n        directoryInfo.Create();\n    }\n\n    public static void ClearFolder(string folderPath, string[]? ignore = null)\n    {\n        if (ignore != null && ignore.Contains(folderPath)) return;\n        if (!Directory.Exists(folderPath))\n        {\n            Console.WriteLine(MainLang.FolderNotExist + folderPath);\n            return;\n        }\n\n        foreach (var file in Directory.GetFiles(folderPath))\n        {\n            File.Delete(file);\n        }\n\n        foreach (var dir in Directory.GetDirectories(folderPath))\n        {\n            ClearFolder(dir, ignore);\n            Directory.Delete(dir);\n        }\n    }\n\n    public static async Task<bool> CopyFileWithDialog(string source, string target)\n    {\n        var path = target;\n        if (File.Exists(target))\n        {\n            var cr = await ShowDialogAsync($\"{MainLang.Conflict}: {Path.GetFileName(source)}\", MainLang.FileConflictTip,\n                b_primary: MainLang.Cover,\n                b_secondary: MainLang.Rename, b_cancel: MainLang.Cancel);\n            if (cr == ContentDialogResult.Primary)\n            {\n                if (source == path) return false;\n                File.Copy(source, target, true);\n            }\n            else if (cr == ContentDialogResult.None)\n            {\n                return false;\n            }\n            else\n            {\n                var textBox = new TextBox\n                {\n                    FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n                    Text = Path.GetFileName(target), HorizontalAlignment = HorizontalAlignment.Stretch, Width = 500\n                };\n                var cr1 = await ShowDialogAsync(MainLang.Rename, p_content: textBox, b_cancel: MainLang.Cancel,\n                    b_primary: MainLang.Ok);\n                if (cr1 != ContentDialogResult.Primary) return false;\n                path = Path.Combine(Path.GetDirectoryName(target)!, textBox.Text);\n                return await CopyFileWithDialog(source, path);\n            }\n        }\n        else\n        {\n            if (source == path) return false;\n            File.Copy(source, path, true);\n        }\n\n        if (!Data.UiProperty.IsAllImport)\n            Notice(MainLang.ImportFinish, NotificationType.Success);\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Network/CurseForge.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing CurseForge.APIClient;\nusing CurseForge.APIClient.Models.Files;\nusing CurseForge.APIClient.Models.Mods;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing ModLoaderType = CurseForge.APIClient.Models.Mods.ModLoaderType;\nusing String = System.String;\n\nnamespace YMCL.Public.Module.IO.Network;\n\npublic class CurseForge\n{\n    private static readonly ApiClient apiClient = new(Const.String.CurseForgeApiKey);\n\n    public static async Task<(List<IResourceFileEntry> data, bool success)> GetFiles(int id, int page = 1)\n    {\n        List<File> files;\n        List<IResourceFileEntry> items = [];\n        try\n        {\n            files = (await apiClient.GetModFilesAsync(id, pageSize: 100, index: (page - 1) * 100)).Data.ToList();\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            Console.WriteLine(e);\n            return ([], false);\n        }\n\n        files.ForEach(x =>\n        {\n            items.Add(new CurseForgeResourceFileEntry()\n            {\n                Id = x.Id,\n                GameId = x.GameId,\n                ModId = x.ModId,\n                IsAvailable = x.IsAvailable,\n                DisplayName = x.DisplayName,\n                FileName = x.FileName,\n                ReleaseType = x.ReleaseType,\n                FileStatus = x.FileStatus,\n                Hashes = x.Hashes,\n                FileDate = x.FileDate,\n                FileLength = x.FileLength,\n                FileSizeOnDisk = x.FileSizeOnDisk,\n                Name = x.FileName,\n                McVersions = x.SortableGameVersions.Where(y => !string.IsNullOrWhiteSpace(y.GameVersion))\n                    .Select(y => y.GameVersion).ToList(),\n                Dependency = x.Dependencies.Select(y => y.ModId).ToList(),\n                Loader = x.SortableGameVersions\n                    .FirstOrDefault(y => string.IsNullOrWhiteSpace(y.GameVersion) && y.GameVersionPadded == \"0\")\n                    .GameVersionName,\n                DownloadCount = x.DownloadCount,\n                DownloadUrl = x.DownloadUrl\n            });\n        });\n        return (items, true);\n    }\n\n    public static async Task<(List<CurseForgeResourceEntry> data, bool success)> Search(string? keyword,\n        int dataType, int page = 1,\n        string? mcVersion = \"\",\n        Enum.ModLoaderType loaderType = Enum.ModLoaderType.Any)\n    {\n        var type = (ModLoaderType)loaderType;\n        List<Mod> items;\n        try\n        {\n            if (type == ModLoaderType.Any)\n                items = (await apiClient.SearchModsAsync(432, gameVersion: mcVersion,\n                    searchFilter: keyword ?? string.Empty, index: page * 25, pageSize: 25, categoryId: -1,\n                    classId: dataType)).Data;\n            else\n                items = (await apiClient.SearchModsAsync(432, gameVersion: mcVersion,\n                    searchFilter: keyword ?? string.Empty, modLoaderType: type, index: page * 25, pageSize: 25,\n                    categoryId: -1, classId: dataType)).Data;\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            return ([], false);\n        }\n\n        var result = items.Select(item =>\n            {\n                var entry = new CurseForgeResourceEntry()\n                {\n                    Id = item.Id,\n                    GameId = item.GameId,\n                    Name = item.Name,\n                    Slug = item.Slug,\n                    Summary = item.Summary,\n                    Status = item.Status,\n                    DownloadCount = item.DownloadCount,\n                    IsFeatured = item.IsFeatured,\n                    PrimaryCategoryId = item.PrimaryCategoryId,\n                    ClassId = item.ClassId,\n                    Authors = item.Authors,\n                    Logo = item.Logo,\n                    LatestFiles = item.LatestFiles,\n                    LatestFilesIndexes = item.LatestFilesIndexes,\n                    DateCreated = item.DateCreated,\n                    DateModified = item.DateModified,\n                    DateReleased = item.DateReleased,\n                    AllowModDistribution = item.AllowModDistribution,\n                    GamePopularityRank = item.GamePopularityRank,\n                    IsAvailable = item.IsAvailable,\n                    ThumbsUpCount = item.ThumbsUpCount,\n                    Rating = item.Rating\n                };\n                entry.Type = item.ClassId switch\n                {\n                    6 => ResourceType.Mod,\n                    12 => ResourceType.ResourcePack,\n                    17 => ResourceType.Map,\n                    6552 => ResourceType.ShaderPack,\n                    6945 => ResourceType.DataPack,\n                    4471 => ResourceType.ModPack,\n                    _ => ResourceType.Unknown\n                };\n                return entry;\n            })\n            .ToList();\n        return (result, true);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Network/DownloadFileWithProgress.cs",
    "content": "﻿using System.IO;\nusing System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing YMCL.Public.Controls;\n\nnamespace YMCL.Public.Module.IO.Network;\n\npublic class DownloadFileWithProgress\n{\n    public static async Task<bool> Download(string url, string path, TaskEntry task, CancellationToken cancellationToken = default)\n    {\n        try\n        {\n            using var client = new HttpClient();\n            using var response =\n                await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, cancellationToken);\n            response.EnsureSuccessStatusCode();\n            var totalBytes = response.Content.Headers.ContentLength.GetValueOrDefault();\n            await using Stream contentStream = await response.Content.ReadAsStreamAsync(cancellationToken),\n                fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None,\n                    8192, true);\n            long totalBytesRead = 0;\n            var buffer = new byte[8192];\n            int bytesRead;\n            while ((bytesRead = await contentStream.ReadAsync(buffer, cancellationToken)) != 0)\n            {\n                await fileStream.WriteAsync(buffer.AsMemory(0, bytesRead), cancellationToken);\n                totalBytesRead += bytesRead;\n                var progressPercentage = (double)totalBytesRead / totalBytes * 100;\n                task.UpdateValue(progressPercentage);\n            }\n            return true;\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            task.FinishWithError();\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Network/Http/Get.cs",
    "content": "using System.Net.Http;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Threading;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.IO.Network.Http;\n\npublic class Get\n{\n    public static async Task<string?> GetStringAsync(string url)\n    {\n        try\n        {\n            using var client = new HttpClient();\n            var response = await client.GetAsync(url);\n            response.EnsureSuccessStatusCode();\n            var json = await response.Content.ReadAsStringAsync();\n            return json;\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            Dispatcher.UIThread.Invoke(() =>\n            {\n                Notice(MainLang.NetWorkError, NotificationType.Error);\n            });\n            return null!;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Network/Modrinch.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Modrinth;\nusing Modrinth.Models;\nusing Modrinth.Models.Enums.Project;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Classes.Json;\nusing YMCL.Public.Enum;\nusing Index = Modrinth.Models.Enums.Index;\n\nnamespace YMCL.Public.Module.IO.Network;\n\npublic class Modrinth\n{\n    private static readonly ModrinthClient apiClient = new();\n\n    public static async Task<(List<ModrinthResourceEntry> data, bool success)> Search(string? keyword,\n        int page = 1, string? mcVersion = \"\", int type = 0)\n    {\n        try\n        {\n            var list = new List<ModrinthResourceEntry>();\n            var facets = new FacetCollection();\n            if (!string.IsNullOrWhiteSpace(mcVersion))\n                facets.Add(Facet.Version(mcVersion));\n            if (type != 0)\n                facets.Add(Facet.ProjectType((ProjectType)(type - 1)));\n            var res = await apiClient.Project.SearchAsync(keyword!, Index.Downloads, (page - 1) * 25, 25, facets);\n\n            res.Hits.ToList().ForEach(x =>\n            {\n                list.Add(new ModrinthResourceEntry()\n                {\n                    Slug = x.Slug,\n                    ProjectId = x.ProjectId,\n                    Author = x.Author,\n                    Dependencies = x.Dependencies,\n                    Categories = x.Categories,\n                    ClientSide = x.ClientSide,\n                    ServerSide = x.ServerSide,\n                    Description = x.Description,\n                    ProjectType = x.ProjectType,\n                    Title = x.Title,\n                    DateCreated = x.DateCreated,\n                    DateModified = x.DateModified,\n                    Followers = x.Followers,\n                    LatestVersion = x.LatestVersion,\n                    Downloads = x.Downloads,\n                    IconUrl = x.IconUrl,\n                    License = x.License,\n                    Versions = x.Versions,\n                    Gallery = x.Gallery,\n                    Color = x.Color,\n                    FeaturedGallery = x.FeaturedGallery,\n                    DisplayCategories = x.DisplayCategories\n                });\n            });\n\n            return (list, true);\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            return ([], false);\n        }\n    }\n\n    public static async Task<(List<ModrinthVersionEntry.Root>? data, bool success)> GetVersionsById(string id)\n    {\n        try\n        {\n            using var client = new HttpClient();\n            var json = await client.GetStringAsync($\"https://api.modrinth.com/v2/project/{id}/version\");\n            var obj = JsonConvert.DeserializeObject<List<ModrinthVersionEntry.Root>>(json);\n            return (obj, true);\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            return ([], false);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Network/NeteaseMusic.cs",
    "content": "using System.Collections.Generic;\nusing System.Net;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Netease;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.IO.Network;\n\npublic class NeteaseMusic\n{\n    public static string realIP => Data.SettingEntry.MusicApiWithIPAddress;\n    public static async Task<List<SearchSingleSong.SongsItem>> SearchForSingleSong(string keyword, int page = 1)\n    {\n        var json = await Http.Get.GetStringAsync(\n            $\"{Value.Converter.StandardizeUrl(Data.SettingEntry.MusicApi)}cloudsearch?keywords={keyword}&offset={(page - 1) * 30}&realIP={realIP}\");\n        if (string.IsNullOrWhiteSpace(json))\n        {\n            return [];\n        }\n        var entry = JsonConvert.DeserializeObject<SearchSingleSong.Root>(json);\n        if (entry is { code: 200 }) return entry.result.songCount == 0 ? [] : entry.result.songs;\n        Notice(MainLang.ApiError, NotificationType.Error);\n        return [];\n    }\n\n    public static async Task<(string show, string real)> GetDefaultKeyword()\n    {\n        var json = await Http.Get.GetStringAsync(\n            $\"{Value.Converter.StandardizeUrl(Const.Data.SettingEntry.MusicApi)}search/default?realIP={realIP}\");\n        if (string.IsNullOrWhiteSpace(json))\n        {\n            return (string.Empty, string.Empty);\n        }\n        var entry = JsonConvert.DeserializeObject<DefaultKeyword.Root>(json);\n        if (entry is { code: 200 }) return (entry.data.showKeyword, entry.data.realkeyword);\n        Notice(MainLang.ApiError, NotificationType.Error);\n        return (string.Empty, string.Empty);\n    }\n\n    public static async Task<bool> GetMusicAvailabilityById(double id)\n    {\n        var json = await Http.Get.GetStringAsync(\n            $\"{Value.Converter.StandardizeUrl(Const.Data.SettingEntry.MusicApi)}check/music?id={id}&realIP={realIP}\");\n        if (string.IsNullOrWhiteSpace(json))\n        {\n            return false;\n        }\n        var entry = JsonConvert.DeserializeObject<Availability.Root>(json);\n        if (entry is { code: 200 }) return entry.success;\n        Notice(MainLang.ApiError, NotificationType.Error);\n        return false;\n    }\n\n    public static async Task<(string url, double ms)> GetSongUrlByIdAndLevel(double id, string level = \"standard\")\n    {\n        var json = await Http.Get.GetStringAsync(\n            $\"{Value.Converter.StandardizeUrl(Const.Data.SettingEntry.MusicApi)}song/url/v1?id={id}&level={level}&realIP={realIP}\");\n        if (string.IsNullOrWhiteSpace(json))\n        {\n            return (string.Empty, 0);\n        }\n        var entry = JsonConvert.DeserializeObject<SongUrl.Root>(json);\n        if (entry is { code: 200 }) return (entry.data[0].url, entry.data[0].time);\n        Notice(MainLang.ApiError, NotificationType.Error);\n        return (string.Empty, 0);\n    }\n    \n    public static async Task<Lyric.Root?> GetSongLyricById(double id)\n    {\n        var json = await Http.Get.GetStringAsync(\n            $\"{Value.Converter.StandardizeUrl(Const.Data.SettingEntry.MusicApi)}lyric?id={id}&realIP={realIP}\");\n        if (string.IsNullOrWhiteSpace(json))\n        {\n            return null;\n        }\n        var entry = JsonConvert.DeserializeObject<Lyric.Root>(json);\n        if (entry is { code: 200 }) return entry;\n        Notice(MainLang.ApiError, NotificationType.Error);\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/IO/Network/Update.cs",
    "content": "﻿using System.Diagnostics;\nusing System.IO;\nusing System.Net;\nusing System.Net.Http;\nusing System.Reflection;\nusing System.Runtime.InteropServices.JavaScript;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Layout;\nusing Avalonia.Media;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing Newtonsoft.Json.Linq;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.IO.Network;\n\npublic class Update\n{\n    public static async Task<CheckUpdateInfo> CheckUpdateAsync()\n    {\n        try\n        {\n            const string resourceName = \"YMCL.Public.Texts.DateTime.txt\";\n            var _assembly = Assembly.GetExecutingAssembly();\n            var stream = _assembly.GetManifestResourceStream(resourceName);\n            string version;\n            using (var reader = new StreamReader(stream!))\n            {\n                var result = await reader.ReadToEndAsync();\n                version = $\"v{result.Trim()}\";\n            }\n\n            var httpClient = new HttpClient();\n            httpClient.DefaultRequestHeaders.Add(\"User-Agent\",\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54\");\n            var githubApiJson = JArray.Parse(await httpClient.GetStringAsync(Const.String.GithubUpdateApiUrl));\n            var apiVersion = (string)githubApiJson[0][\"name\"]!;\n            return new CheckUpdateInfo()\n            {\n                Success = true,\n                NewVersion = apiVersion,\n                IsNeedUpdate = apiVersion != version,\n                GithubUrl = (string)githubApiJson[0][\"html_url\"]!\n            };\n        }\n        catch\n        {\n            return new CheckUpdateInfo { Success = false };\n        }\n    }\n\n    public static async Task<bool> UpdateAppAsync()\n    {\n        try\n        {\n            var architecture = IO.Disk.Getter.GetCurrentPlatformAndArchitecture();\n            if (string.IsNullOrWhiteSpace(architecture))\n                return false;\n            if (architecture is \"win-x64\" or \"win-arm64\" or \"win-x86\" && Environment.OSVersion.Version.Major >= 10)\n            {\n                return await UpdateByAutoInstaller(architecture);\n            }\n            else\n            {\n                return await UpdateByReplaceFile(architecture);\n            }\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            return false;\n        }\n    }\n\n    public static async Task<bool> UpdateByReplaceFile(string arch)\n    {\n        ContentDialogResult cr;\n        var comboBox = new ComboBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            HorizontalAlignment = HorizontalAlignment.Stretch\n        };\n        comboBox.Items.Add(\".app\");\n        comboBox.Items.Add(\".dmg\");\n        comboBox.SelectedIndex = 0;\n        if (Const.Data.DesktopType == DesktopRunnerType.MacOs)\n        {\n            cr = await ShowDialogAsync(MainLang.Update, MainLang.CurrectSystemNoSupportAutoUpdateTip, comboBox,\n                b_primary: MainLang.SaveAs, b_cancel: MainLang.Cancel);\n        }\n        else\n        {\n            cr = await ShowDialogAsync(MainLang.Update, MainLang.CurrectSystemNoSupportAutoUpdateTip,\n                b_primary: MainLang.SaveAs, b_cancel: MainLang.Cancel);\n        }\n\n        if (cr != ContentDialogResult.Primary)\n        {\n            return false;\n        }\n\n        var fn = arch switch\n        {\n            \"linux-arm\" => \"YMCL.Desktop.linux.arm.AppImage\",\n            \"linux-arm64\" => \"YMCL.Desktop.linux.arm64.AppImage\",\n            \"linux-x64\" => \"YMCL.Desktop.linux.x64.AppImage\",\n            \"osx\" => comboBox.SelectedIndex == 0\n                ? \"YMCL.Desktop.osx.mac.x64.app.zip\"\n                : \"YMCL.Desktop.osx.mac.x64.dmg\",\n            \"win-x64\" => Environment.OSVersion.Version.Major >= 10\n                ? \"YMCL.Desktop.win.x64.installer.exe\"\n                : \"YMCL.Desktop.win7.x64.exe.zip\",\n            \"win-x86\" => Environment.OSVersion.Version.Major >= 10\n                ? \"YMCL.Desktop.win.x86.installer.exe\"\n                : \"YMCL.Desktop.win7.x86.exe.zip\",\n            \"win-arm64\" => Environment.OSVersion.Version.Major >= 10\n                ? \"YMCL.Desktop.win.arm64.installer.exe\"\n                : \"YMCL.Desktop.win7.arm64.exe.zip\",\n            _ => \"File.unknown\"\n        };\n\n        var architecture = arch;\n        if (arch == \"osx\")\n        {\n            architecture = comboBox.SelectedIndex == 0\n                ? \"osx-app\"\n                : \"osx-dmg\";\n        }\n\n        var path = (await TopLevel.GetTopLevel(YMCL.App.UiRoot).StorageProvider.SaveFilePickerAsync(\n            new FilePickerSaveOptions\n            {\n                Title = MainLang.SaveAs,\n                SuggestedFileName = fn,\n            }))?.Path.LocalPath;\n        if (string.IsNullOrWhiteSpace(path))\n        {\n            Notice(MainLang.CanceledUpdate);\n            return true;\n        }\n\n        YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavTask;\n        var cts = new CancellationTokenSource();\n        var token = cts.Token;\n\n        var url = string.Empty;\n\n        var task = new TaskEntry(MainLang.CheckUpdate,\n        [\n            new SubTask(MainLang.CheckUpdate),\n            new SubTask(MainLang.GetUpdateUrl),\n            new SubTask(MainLang.DownloadResource),\n            new SubTask(MainLang.Update),\n        ], TaskState.Running);\n        task.UpdateAction(() => { cts.Cancel(); });\n        try\n        {\n            var httpClient = new HttpClient();\n            httpClient.DefaultRequestHeaders.Add(\"User-Agent\",\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54\");\n            var githubApiJson = JArray.Parse(await httpClient.GetStringAsync(Const.String.GithubUpdateApiUrl, token));\n            var assets = (JArray)githubApiJson[0][\"assets\"];\n            task.AdvanceSubTask();\n            foreach (var jToken in assets)\n            {\n                var asset = (JObject)jToken;\n                var name = (string)asset[\"name\"];\n                var browser_download_url = (string)asset[\"browser_download_url\"];\n                switch (name.Trim())\n                {\n                    case \"YMCL.Desktop.linux.arm.AppImage\" when architecture == \"linux-arm\":\n                    case \"YMCL.Desktop.linux.arm64.AppImage\" when architecture == \"linux-arm64\":\n                    case \"YMCL.Desktop.linux.x64.AppImage\" when architecture == \"linux-x64\":\n                    case \"YMCL.Desktop.osx.mac.x64.app.zip\" when architecture == \"osx-app\":\n                    case \"YMCL.Desktop.osx.mac.x64.dmg\" when architecture == \"osx-dmg\":\n                    case \"YMCL.Desktop.win.x64.installer.exe\"\n                        when architecture == \"win-x64\" && Environment.OSVersion.Version.Major >= 10:\n                    case \"YMCL.Desktop.win.x86.installer.exe\"\n                        when architecture == \"win-x86\" && Environment.OSVersion.Version.Major >= 10:\n                    case \"YMCL.Desktop.win.arm64.installer.exe\"\n                        when architecture == \"win-arm64\" && Environment.OSVersion.Version.Major >= 10:\n                    case \"YMCL.Desktop.win7.x64.exe.zip\"\n                        when architecture == \"win-x64\" && Environment.OSVersion.Version.Major < 10:\n                    case \"YMCL.Desktop.win7.x86.exe.zip\"\n                        when architecture == \"win-x86\" && Environment.OSVersion.Version.Major < 10:\n                    case \"YMCL.Desktop.win7.arm64.exe.zip\"\n                        when architecture == \"win-arm64\" && Environment.OSVersion.Version.Major < 10:\n                        url = browser_download_url;\n                        break;\n                }\n            }\n\n            task.AdvanceSubTask();\n            if (url == null)\n            {\n                task.FinishWithError();\n                return false;\n            }\n\n            var setting = Const.Data.SettingEntry;\n            var trueUrl = url;\n            if (setting.EnableCustomUpdateUrl)\n            {\n                trueUrl = setting.CustomUpdateUrl.Replace(\"{%url%}\", url);\n            }\n\n            try\n            {\n                var handler = new HttpClientHandler();\n                handler.ServerCertificateCustomValidationCallback =\n                    (_, _, _, _) => true;\n                ServicePointManager.SecurityProtocol =\n                    SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12;\n                using var client = new HttpClient(handler);\n                client.DefaultRequestHeaders.Add(\"User-Agent\",\n                    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0\");\n                using (var response =\n                       await client.GetAsync(trueUrl, HttpCompletionOption.ResponseHeadersRead, token))\n                {\n                    response.EnsureSuccessStatusCode();\n\n                    await using (var downloadStream = await response.Content.ReadAsStreamAsync(token))\n                    {\n                        await using (var fileStream = new FileStream(path, FileMode.Create,\n                                         FileAccess.Write))\n                        {\n                            var buffer = new byte[8192];\n                            int bytesRead;\n                            long totalBytesRead = 0;\n                            var totalBytes = response.Content.Headers.ContentLength ?? -1;\n\n                            while ((bytesRead =\n                                       await downloadStream.ReadAsync(buffer, token)) > 0)\n                            {\n                                await fileStream.WriteAsync(buffer.AsMemory(0, bytesRead), token);\n                                totalBytesRead += bytesRead;\n\n                                if (totalBytes <= 0) continue;\n                                var progress = (double)totalBytesRead / totalBytes * 100;\n                                task.UpdateValue(progress);\n                            }\n                        }\n                    }\n                }\n\n                task.AdvanceSubTask();\n                task.FinishWithSuccess();\n                return true;\n            }\n            catch (OperationCanceledException)\n            {\n                task.Cancel();\n                Notice(MainLang.CanceledUpdate, NotificationType.Warning);\n                return true;\n            }\n            catch (Exception ex)\n            {\n                ShowShortException(MainLang.UpdateFail, ex);\n            }\n\n            task.FinishWithError();\n            return false;\n        }\n        catch (OperationCanceledException)\n        {\n            task.Cancel();\n            Notice(MainLang.CanceledUpdate, NotificationType.Warning);\n            return true;\n        }\n        catch\n        {\n            task.FinishWithError();\n            return false;\n        }\n    }\n\n    public static async Task<bool> UpdateByAutoInstaller(string architecture)\n    {\n        YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavTask;\n        var cts = new CancellationTokenSource();\n        var token = cts.Token;\n\n        var url = string.Empty;\n        var fileName = string.Empty;\n\n        var task = new TaskEntry(MainLang.CheckUpdate,\n        [\n            new SubTask(MainLang.CheckUpdate),\n            new SubTask(MainLang.GetUpdateUrl),\n            new SubTask(MainLang.DownloadResource),\n            new SubTask(MainLang.Update),\n        ], TaskState.Running);\n        task.UpdateAction(() => { cts.Cancel(); });\n        try\n        {\n            var httpClient = new HttpClient();\n            httpClient.DefaultRequestHeaders.Add(\"User-Agent\",\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54\");\n            var githubApiJson = JArray.Parse(await httpClient.GetStringAsync(Const.String.GithubUpdateApiUrl, token));\n            var assets = (JArray)githubApiJson[0][\"assets\"];\n            task.AdvanceSubTask();\n            foreach (var jToken in assets)\n            {\n                var asset = (JObject)jToken;\n                var name = (string)asset[\"name\"];\n                var browser_download_url = (string)asset[\"browser_download_url\"];\n                switch (name)\n                {\n                    case \"YMCL.Desktop.linux.arm.AppImage\" when architecture == \"linux-arm\":\n                    case \"YMCL.Desktop.linux.arm64.AppImage\" when architecture == \"linux-arm64\":\n                    case \"YMCL.Desktop.linux.x64.AppImage\" when architecture == \"linux-x64\":\n                    case \"YMCL.Desktop.osx.mac.x64.app.zip\" when architecture == \"osx-x64\":\n                    case \"YMCL.Desktop.osx.mac.arm64.app.zip\" when architecture == \"osx-arm64\":\n                    case \"YMCL.Desktop.win.x64.installer.exe\"\n                        when architecture == \"win-x64\" && Environment.OSVersion.Version.Major >= 10:\n                    case \"YMCL.Desktop.win.x86.installer.exe\"\n                        when architecture == \"win-x86\" && Environment.OSVersion.Version.Major >= 10:\n                    case \"YMCL.Desktop.win.arm64.installer.exe\"\n                        when architecture == \"win-arm64\" && Environment.OSVersion.Version.Major >= 10:\n                    case \"YMCL.Desktop.win7.x64.exe.zip\"\n                        when architecture == \"win-x64\" && Environment.OSVersion.Version.Major < 10:\n                    case \"YMCL.Desktop.win7.x86.exe.zip\"\n                        when architecture == \"win-x86\" && Environment.OSVersion.Version.Major < 10:\n                    case \"YMCL.Desktop.win7.arm64.exe.zip\"\n                        when architecture == \"win-arm64\" && Environment.OSVersion.Version.Major < 10:\n                        url = browser_download_url;\n                        fileName = name;\n                        break;\n                }\n            }\n\n            task.AdvanceSubTask();\n            if (url == null)\n            {\n                task.FinishWithError();\n                return false;\n            }\n\n            IO.Disk.Setter.ClearFolder(ConfigPath.UpdateFolderPath);\n\n            var setting = Const.Data.SettingEntry;\n            var trueUrl = url;\n            if (setting.EnableCustomUpdateUrl)\n            {\n                trueUrl = setting.CustomUpdateUrl.Replace(\"{%url%}\", url);\n            }\n\n            try\n            {\n                var handler = new HttpClientHandler();\n                handler.ServerCertificateCustomValidationCallback =\n                    (_, _, _, _) => true;\n                ServicePointManager.SecurityProtocol =\n                    SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12;\n                using var client = new HttpClient(handler);\n                client.DefaultRequestHeaders.Add(\"User-Agent\",\n                    \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0\");\n                using (var response =\n                       await client.GetAsync(trueUrl, HttpCompletionOption.ResponseHeadersRead, token))\n                {\n                    response.EnsureSuccessStatusCode();\n\n                    await using (var downloadStream = await response.Content.ReadAsStreamAsync(token))\n                    {\n                        await using (var fileStream = new FileStream(\n                                         Path.Combine(ConfigPath.UpdateFolderPath, fileName), FileMode.Create,\n                                         FileAccess.Write))\n                        {\n                            var buffer = new byte[8192];\n                            int bytesRead;\n                            long totalBytesRead = 0;\n                            var totalBytes = response.Content.Headers.ContentLength ?? -1;\n\n                            while ((bytesRead =\n                                       await downloadStream.ReadAsync(buffer, token)) > 0)\n                            {\n                                await fileStream.WriteAsync(buffer.AsMemory(0, bytesRead), token);\n                                totalBytesRead += bytesRead;\n\n                                if (totalBytes <= 0) continue;\n                                var progress = (double)totalBytesRead / totalBytes * 100;\n                                task.UpdateValue(progress);\n                            }\n                        }\n                    }\n                }\n\n                task.AdvanceSubTask();\n                var startInfo = new ProcessStartInfo\n                {\n                    UseShellExecute = true,\n                    WorkingDirectory = Environment.CurrentDirectory,\n                    FileName = Path.Combine(ConfigPath.UpdateFolderPath, fileName)\n                };\n                Process.Start(startInfo);\n                Environment.Exit(0);\n            }\n            catch (OperationCanceledException)\n            {\n                task.Cancel();\n                Notice(MainLang.CanceledUpdate, NotificationType.Warning);\n                return true;\n            }\n            catch (Exception ex)\n            {\n                ShowShortException(MainLang.UpdateFail, ex);\n            }\n\n            task.FinishWithError();\n            return false;\n        }\n        catch (OperationCanceledException)\n        {\n            task.Cancel();\n            Notice(MainLang.CanceledUpdate, NotificationType.Warning);\n            return true;\n        }\n        catch\n        {\n            task.FinishWithError();\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Icon.cs",
    "content": "﻿using System.Linq;\nusing Avalonia.Media.Imaging;\nusing MinecraftLaunch.Base.Enums;\nusing MinecraftLaunch.Base.Models.Game;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\n\nnamespace YMCL.Public.Module.Mc;\n\npublic class Icon\n{\n    public static Bitmap GetMinecraftIcon(MinecraftDataEntry entry)\n    {\n        if (entry.Type == \"bedrock\")\n            return Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                \"YMCL.Public.Assets.McIcons.dirt_path_side.png\");\n        if (entry.MinecraftEntry.IsVanilla)\n        {\n            return entry.MinecraftEntry.Version.Type switch\n            {\n                MinecraftVersionType.Release => Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                    \"YMCL.Public.Assets.McIcons.grass_block_side.png\"),\n                MinecraftVersionType.Snapshot => Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                    \"YMCL.Public.Assets.McIcons.crafting_table_front.png\"),\n                _ => Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                    \"YMCL.Public.Assets.McIcons.grass_block_side.png\")\n            };\n        }\n\n        if (entry.MinecraftEntry is not ModifiedMinecraftEntry e)\n            return Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                \"YMCL.Public.Assets.McIcons.grass_block_side.png\");\n        if (e.ModLoaders.Any(a => a.Type == ModLoaderType.Forge))\n        {\n            return Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                \"YMCL.Public.Assets.McIcons.furnace_front.png\");\n        }\n\n        if (e.ModLoaders.Any(a => a.Type == ModLoaderType.NeoForge))\n        {\n            return Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                \"YMCL.Public.Assets.McIcons.NeoForgeIcon.png\");\n        }\n\n        if (e.ModLoaders.Any(a => a.Type == ModLoaderType.Fabric))\n        {\n            return Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                \"YMCL.Public.Assets.McIcons.FabricIcon.png\");\n        }\n\n        if (e.ModLoaders.Any(a => a.Type == ModLoaderType.Quilt))\n        {\n            return Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n                \"YMCL.Public.Assets.McIcons.QuiltIcon.png\");\n        }\n\n        return Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n            e.ModLoaders.Any(a => a.Type == ModLoaderType.OptiFine)\n                ? \"YMCL.Public.Assets.McIcons.OptiFineIcon.png\"\n                : \"YMCL.Public.Assets.McIcons.grass_block_side.png\");\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Importer/jar/Main.cs",
    "content": "﻿using System.IO;\nusing System.IO.Compression;\nusing Avalonia.Controls.Notifications;\nusing FluentAvalonia.UI.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Mc.Importer.zip;\n\nnamespace YMCL.Public.Module.Mc.Importer.jar;\n\npublic class Main\n{\n    public static async Task Import(string path)\n    {\n        if (Data.SettingEntry.SelectedMinecraftId == \"bedrock\") return;\n\n        if (!Data.UiProperty.IsAllImport)\n        {\n            var cr = await ShowDialogAsync(\n                $\"{MainLang.Import} → {Data.SettingEntry.SelectedMinecraftId}\",\n                $\"{MainLang.SureToImportTheFile}: {Path.GetFileName(path)}\", b_primary: MainLang.Ok,\n                b_cancel: MainLang.Cancel, b_secondary: MainLang.AllImport);\n\n            if (cr == ContentDialogResult.None) return;\n            if (cr == ContentDialogResult.Secondary) Data.UiProperty.IsAllImport = true;\n        }\n\n        await IO.Disk.Setter.CopyFileWithDialog(path,\n            Path.Combine(Mc.Utils.GetMinecraftSpecialFolder(Mc.Utils.GetCurrentMinecraft()!,\n                GameSpecialFolder.ModsFolder), Path.GetFileName(path)));\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Importer/mrpack/Main.cs",
    "content": "﻿using System.IO;\nusing System.IO.Compression;\nusing Avalonia.Controls.Notifications;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Importer.mrpack;\n\npublic class Main\n{\n    public static async Task Import(string path)\n    {\n        using var archive = ZipFile.OpenRead(path);\n        var modPackEntry = archive.GetEntry(\"modrinth.index.json\");\n        if (modPackEntry is not null)\n        {\n            await ModPack.Import(path);\n            return;\n        }\n\n        Notice($\"{MainLang.Unrecognized}: {Path.GetFileName(path)}\", NotificationType.Warning);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Importer/mrpack/ModPack.cs",
    "content": "﻿using System.IO;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Layout;\nusing Avalonia.Media;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Installer.Modpack;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Mc.Installer.ModPack;\n\nnamespace YMCL.Public.Module.Mc.Importer.mrpack;\n\npublic class ModPack\n{\n    public static async Task Import(string path, TaskEntry? p_task = null)\n    {\n        ModrinthModpackInstallEntry? entry = null;\n        try\n        {\n            entry = ModrinthModpackInstaller.ParseModpackInstallEntry(path);\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            p_task?.FinishWithError();\n            Notice($\"{MainLang.Unrecognized}: {Path.GetFileName(path)}\",NotificationType.Warning);\n        }\n\n        if (entry is null)\n        {\n            p_task?.FinishWithError();\n            Notice($\"{MainLang.Unrecognized}: {Path.GetFileName(path)}\",NotificationType.Warning);\n            return;\n        }\n\n        string? id = null;\n        var result = await ShowDialog(entry.Name);\n        \n        if (result)\n        {\n            YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavTask;\n            _ = Installer.ModPack.Modrinth.Install(path, entry, id ?? entry.Name, p_task);\n        }\n        else\n        {\n            p_task?.Cancel();\n        }\n\n        return;\n\n        async Task<bool> ShowDialog(string text)\n        {\n            var textbox = new TextBox\n            {\n                FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n                Text = text, HorizontalAlignment = HorizontalAlignment.Stretch, Width = 500\n            };\n            var dialog = await ShowDialogAsync(MainLang.ImportModPack, p_content: textbox, b_cancel: MainLang.Cancel,\n                b_primary: MainLang.Ok);\n            if (dialog != ContentDialogResult.Primary)\n                return false;\n            var regex = new Regex(@\"[\\\\/:*?\"\"<>|]\");\n            var matches = regex.Matches(textbox.Text);\n            if (matches.Count > 0)\n            {\n                var str = string.Empty;\n                foreach (Match match in matches) str += match.Value;\n                Notice($\"{MainLang.IncludeSpecialWord}: {str}\", NotificationType.Error);\n                var dr = await ShowDialog(textbox.Text);\n                if (!dr)\n                    return false;\n            }\n            else\n            {\n                if (string.IsNullOrWhiteSpace(textbox.Text))\n                {\n                    Notice($\"{MainLang.VersionIdCannotBeEmpty}\", NotificationType.Error);\n                    var dr = await ShowDialog(string.Empty);\n                    if (!dr)\n                        return false;\n                }\n\n                if (Directory.Exists(Path.Combine(Data.SettingEntry.MinecraftFolder.Path, \"versions\", textbox.Text)))\n                {\n                    Notice($\"{MainLang.FolderAlreadyExists}: {textbox.Text}\",\n                        NotificationType.Error);\n                    var dr = await ShowDialog(textbox.Text);\n                    if (!dr)\n                        return false;\n                }\n\n                id = textbox.Text;\n                return true;\n            }\n\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Importer/zip/Main.cs",
    "content": "﻿using System.IO;\nusing System.IO.Compression;\nusing Avalonia.Controls.Notifications;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Importer.zip;\n\npublic class Main\n{\n    public static async Task Import(string path)\n    {\n        using var archive = ZipFile.OpenRead(path);\n        var modPackEntry = archive.GetEntry(\"manifest.json\");\n        if (modPackEntry is not null)\n        {\n            await ModPack.Import(path);\n            return;\n        }\n\n        if (Data.SettingEntry.SelectedMinecraftId == \"bedrock\") return;\n\n        var selection = await ShowDialogWithComboBox([MainLang.AsResourcePackImport, MainLang.AsShaderPackImport],\n            $\"{MainLang.Import} → {Data.SettingEntry.SelectedMinecraftId}\",\n            $\"{MainLang.HopeHowToHandleTheFile}: {Path.GetFileName(path)}\");\n\n        if (selection == 0)\n        {\n            await IO.Disk.Setter.CopyFileWithDialog(path,\n                Path.Combine(Mc.Utils.GetMinecraftSpecialFolder(Mc.Utils.GetCurrentMinecraft()!,\n                    GameSpecialFolder.ResourcePacksFolder), Path.GetFileName(path)));\n        }\n\n        if (selection == 1)\n        {\n            await IO.Disk.Setter.CopyFileWithDialog(path,\n                Path.Combine(Mc.Utils.GetMinecraftSpecialFolder(Mc.Utils.GetCurrentMinecraft()!,\n                    GameSpecialFolder.ShaderPacksFolder), Path.GetFileName(path)));\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Importer/zip/ModPack.cs",
    "content": "﻿using System.IO;\nusing System.Text.RegularExpressions;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Layout;\nusing Avalonia.Media;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Installer.Modpack;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Mc.Installer.ModPack;\n\nnamespace YMCL.Public.Module.Mc.Importer.zip;\n\npublic class ModPack\n{\n    public static async Task Import(string path, TaskEntry? p_task = null)\n    {\n        CurseforgeModpackInstallEntry? entry = null;\n        try\n        {\n            entry = CurseforgeModpackInstaller.ParseModpackInstallEntry(path);\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            p_task?.FinishWithError();\n            Notice($\"{MainLang.Unrecognized}: {Path.GetFileName(path)}\", NotificationType.Warning);\n        }\n\n        if (entry is null)\n        {\n            p_task?.FinishWithError();\n            Notice($\"{MainLang.Unrecognized}: {Path.GetFileName(path)}\", NotificationType.Warning);\n            return;\n        }\n\n        string? id = null;\n        var result = await ShowDialog(entry.Id);\n\n        if (result)\n        {\n            YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavTask;\n            _ = Installer.ModPack.CurseForge.Install(path, entry, id ?? entry.Id, p_task);\n        }\n        else\n        {\n            p_task?.Cancel();\n        }\n\n        return;\n\n        async Task<bool> ShowDialog(string text)\n        {\n            var textbox = new TextBox\n            {\n                FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n                Text = text, HorizontalAlignment = HorizontalAlignment.Stretch, Width = 500\n            };\n            var dialog = await ShowDialogAsync(MainLang.ImportModPack, p_content: textbox, b_cancel: MainLang.Cancel,\n                b_primary: MainLang.Ok);\n            if (dialog != ContentDialogResult.Primary)\n                return false;\n            var regex = new Regex(@\"[\\\\/:*?\"\"<>|]\");\n            var matches = regex.Matches(textbox.Text);\n            if (matches.Count > 0)\n            {\n                var str = string.Empty;\n                foreach (Match match in matches) str += match.Value;\n                Notice($\"{MainLang.IncludeSpecialWord}: {str}\", NotificationType.Error);\n                var dr = await ShowDialog(textbox.Text);\n                if (!dr)\n                    return false;\n            }\n            else\n            {\n                if (string.IsNullOrWhiteSpace(textbox.Text))\n                {\n                    Notice($\"{MainLang.VersionIdCannotBeEmpty}\", NotificationType.Error);\n                    var dr = await ShowDialog(string.Empty);\n                    if (!dr)\n                        return false;\n                }\n\n                if (Directory.Exists(Path.Combine(Data.SettingEntry.MinecraftFolder.Path, \"versions\", textbox.Text)))\n                {\n                    Notice($\"{MainLang.FolderAlreadyExists}: {textbox.Text}\",\n                        NotificationType.Error);\n                    var dr = await ShowDialog(textbox.Text);\n                    if (!dr)\n                        return false;\n                }\n\n                id = textbox.Text;\n                return true;\n            }\n\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Importer/zip/Resource.cs",
    "content": "﻿namespace YMCL.Public.Module.Mc.Importer.zip;\n\npublic class Resource\n{\n    \n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/Minecraft/CompositeForgeAndOptiFine.cs",
    "content": "﻿using System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing MinecraftLaunch.Base.Enums;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Downloader;\nusing MinecraftLaunch.Components.Installer;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.Minecraft;\n\npublic class CompositeForgeAndOptiFine\n{\n    public static async Task<bool> Install(VersionManifestEntry versionManifestEntry, ForgeInstallEntry forgeEntry,\n        OptifineInstallEntry optifineEntry,\n        string customId, string mcPath, SubTask checkTask, SubTask vanillaTask, SubTask forgeTask, SubTask optifineTask,\n        TaskEntry task, CancellationToken cancellationToken)\n    {\n        var isSuccess = false;\n        var fCheck = false;\n        var fVanilla = false;\n        var fForge = false;\n        var fOptifine = false;\n        checkTask.State = TaskState.Running;\n        vanillaTask.State = TaskState.Waiting;\n        forgeTask.State = TaskState.Waiting;\n        optifineTask.State = TaskState.Waiting;\n        checkTask.FinishedTask = 0;\n        vanillaTask.FinishedTask = 0;\n        forgeTask.FinishedTask = 0;\n        optifineTask.FinishedTask = 0;\n\n        await Task.Run(async () =>\n        {\n            try\n            {\n                var installer = CompositeInstaller.Create([versionManifestEntry, forgeEntry, optifineEntry],\n                    mcPath, Data.JavaRuntimes.FirstOrDefault(x => x.MajorVersion != 0).JavaPath, customId);\n\n                installer.ProgressChanged += (_, x) =>\n                {\n                    var info = x.PrimaryStepName is InstallStep.Undefined\n                        ? $\"{x.StepName}\"\n                        : $\"{x.PrimaryStepName} {x.StepName}\";\n                    Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        task.UpdateValue(x.Progress * 100);\n                        task.Model.TopRightInfo =\n                            x.IsStepSupportSpeed ? FileDownloader.GetSpeedText(x.Speed) : string.Empty;\n                        task.Model.BottomLeftInfo = info;\n\n                        if (x.PrimaryStepName == InstallStep.InstallPrimaryModLoader)\n                        {\n                            checkTask.Finish();\n                            vanillaTask.Finish();\n                            fVanilla = true;\n                            fCheck = true;\n                            forgeTask.State = TaskState.Running;\n                        }\n\n                        if (x.PrimaryStepName == InstallStep.InstallSecondaryModLoader)\n                        {\n                            checkTask.Finish();\n                            vanillaTask.Finish();\n                            forgeTask.Finish();\n                            fVanilla = true;\n                            fCheck = true;\n                            fForge = true;\n                            optifineTask.State = TaskState.Running;\n                        }\n\n                        if (!fCheck)\n                        {\n                            if (x is { PrimaryStepName: InstallStep.InstallVanilla, IsStepSupportSpeed: true })\n                            {\n                                checkTask.Finish();\n                                fCheck = true;\n                                vanillaTask.State = TaskState.Running;\n                            }\n                            else return;\n                        }\n\n                        if (!fVanilla)\n                        {\n                            if (x.PrimaryStepName == InstallStep.InstallPrimaryModLoader)\n                            {\n                                vanillaTask.Finish();\n                                fVanilla = true;\n                                forgeTask.State = TaskState.Running;\n                            }\n                            else\n                            {\n                                if (!x.IsStepSupportSpeed) return;\n                                vanillaTask.FinishedTask = x.FinishedStepTaskCount;\n                                vanillaTask.TotalTask = x.TotalStepTaskCount;\n                                return;\n                            }\n                        }\n\n                        if (!fForge)\n                        {\n                            if (x.PrimaryStepName == InstallStep.InstallSecondaryModLoader)\n                            {\n                                forgeTask.Finish();\n                                fForge = true;\n                                optifineTask.State = TaskState.Running;\n                            }\n                            else\n                            {\n                                if (!x.IsStepSupportSpeed) return;\n                                forgeTask.FinishedTask = x.FinishedStepTaskCount;\n                                forgeTask.TotalTask = x.TotalStepTaskCount;\n                                return;\n                            }\n                        }\n\n                        if (!fOptifine)\n                        {\n                            if (x.PrimaryStepName == InstallStep.RanToCompletion)\n                            {\n                                optifineTask.Finish();\n                                fOptifine = true;\n                            }\n                            else\n                            {\n                                if (!x.IsStepSupportSpeed) return;\n                                optifineTask.FinishedTask = x.FinishedStepTaskCount;\n                                optifineTask.TotalTask = x.TotalStepTaskCount;\n                            }\n                        }\n                    });\n                };\n\n                await installer.InstallAsync(cancellationToken);\n                isSuccess = true;\n            }\n            catch (OperationCanceledException)\n            {\n                task.CancelFinish();\n            }\n            catch (Exception ex)\n            {\n                if (cancellationToken.IsCancellationRequested)\n                {\n                    task.CancelFinish();\n                }\n                else\n                {\n                    await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        ShowShortException($\"{MainLang.InstallFail}: Forge - {customId}\", ex);\n                    });\n                    task.FinishWithError();\n                }\n            }\n        }, cancellationToken);\n        if (!isSuccess) return isSuccess;\n        fVanilla = true;\n        fCheck = true;\n        fForge = true;\n        fOptifine = true;\n        checkTask.Finish();\n        vanillaTask.Finish();\n        forgeTask.Finish();\n        optifineTask.Finish();\n\n        return isSuccess;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/Minecraft/Dispatcher.cs",
    "content": "﻿using System.IO;\nusing System.Text.RegularExpressions;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing MinecraftLaunch;\nusing MinecraftLaunch.Base.Models.Network;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.Minecraft;\n\npublic class Dispatcher\n{\n    public static async Task<bool> Install(VersionManifestEntry versionManifestEntry, string? customId = null,\n        ForgeInstallEntry? forgeInstallEntry = null, ForgeInstallEntry? neoForgeInstallEntry = null,\n        FabricInstallEntry? fabricInstallEntry = null,\n        QuiltInstallEntry? quiltBuildEntry = null, OptifineInstallEntry? optiFineInstallEntity = null,\n        TaskEntry? p_task = null, bool closeTaskWhenFinish = true)\n    {\n        if (string.IsNullOrWhiteSpace(customId ?? versionManifestEntry.Id))\n        {\n            Notice($\"{MainLang.VersionIdCannotBeEmpty}\", NotificationType.Error);\n            return false;\n        }\n        \n        var cts = new CancellationTokenSource();\n        var cancellationToken = cts.Token;\n        var setting = Const.Data.SettingEntry;\n        \n        var regex = new Regex(@\"[\\\\/:*?\"\"<>|]\");\n        var matches = regex.Matches(customId ?? versionManifestEntry.Id);\n        if (matches.Count > 0)\n        {\n            var str = string.Empty;\n            foreach (Match match in matches) str += match.Value;\n            Notice($\"{MainLang.IncludeSpecialWord}: {str}\", NotificationType.Error);\n            return false;\n        }\n\n        if (optiFineInstallEntity != null || quiltBuildEntry != null || fabricInstallEntry != null ||\n            forgeInstallEntry != null)\n        {\n            if (Directory.Exists(Path.Combine(setting.MinecraftFolder.Path, \"versions\",\n                    customId ?? versionManifestEntry.Id)))\n            {\n                Notice($\"{MainLang.FolderAlreadyExists}: {customId ?? versionManifestEntry.Id}\", NotificationType.Error);\n                return false;\n            }\n        }\n\n        var mcPath = Data.SettingEntry.MinecraftFolder.Path;\n\n        var task = p_task ?? new TaskEntry($\"{MainLang.Install}: {customId} (Minecraft {versionManifestEntry.Id})\",\n            state: TaskState.Running);\n        YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavTask;\n        SubTask[] subTasks =\n        [\n            new(MainLang.CheckVersionResource),\n            new($\"{MainLang.Install}: Vanilla {versionManifestEntry.Id}\")\n        ];\n        task.AddSubTaskRange(subTasks);\n        task.UpdateAction(() =>\n        {\n            task.CancelWaitFinish();\n            cts.Cancel();\n        });\n\n        if (versionManifestEntry == null)\n        {\n            task.FinishWithError();\n            return false;\n        }\n\n        var forgeTask = new SubTask($\"{MainLang.Install}: Forge\");\n        var neoForgeTask = new SubTask($\"{MainLang.Install}: NeoForge\");\n        var optiFineTask = new SubTask($\"{MainLang.Install}: OptiFine\");\n        var fabricTask = new SubTask($\"{MainLang.Install}: Fabric\");\n        var quiltTask = new SubTask($\"{MainLang.Install}: Quilt\");\n\n        if (forgeInstallEntry != null)\n            task.AddSubTask(forgeTask);\n\n        if (neoForgeInstallEntry != null)\n            task.AddSubTask(neoForgeTask);\n\n        if (optiFineInstallEntity != null)\n            task.AddSubTask(optiFineTask);\n\n        if (fabricInstallEntry != null)\n            task.AddSubTask(fabricTask);\n\n        if (quiltBuildEntry != null)\n            task.AddSubTask(quiltTask);\n\n        Console.WriteLine($\"MaxThread: {DownloadMirrorManager.MaxThread}\");\n\n        if (optiFineInstallEntity != null && versionManifestEntry != null && forgeInstallEntry != null)\n        {\n            var composite = await CompositeForgeAndOptiFine.Install(versionManifestEntry, forgeInstallEntry, optiFineInstallEntity,\n                customId!, mcPath, subTasks[0], subTasks[1],\n                forgeTask, optiFineTask, task, cancellationToken);\n\n            if (!composite)\n            {\n                task.FinishWithError();\n                return false;\n            }\n\n            if (!closeTaskWhenFinish || cancellationToken.IsCancellationRequested) return true;\n            task.FinishWithSuccess();\n            Notice($\"{MainLang.InstallFinish} - {customId ?? versionManifestEntry.Id}\", NotificationType.Success);\n            if (Data.SettingEntry.EnableIndependencyWindowNotification)\n            {\n                NoticeWindow(MainLang.InstallFinish, customId ?? versionManifestEntry.Id);\n            }\n\n            return true;\n        }\n\n        var vanilla = await Vanilla.Install(versionManifestEntry!, mcPath, task, subTasks[0], subTasks[1],\n            cancellationToken);\n        if (!vanilla)\n        {\n            task.FinishWithError();\n            return false;\n        }\n\n        subTasks[0].Finish();\n        subTasks[1].Finish();\n        \n        if (forgeInstallEntry != null)\n        {\n            var forge = await Forge.Install(forgeInstallEntry, customId!, mcPath, forgeTask, task,\n                cancellationToken);\n            if (!forge)\n            {\n                task.FinishWithError();\n                return false;\n            }\n\n            forgeTask.Finish();\n        }\n\n        if (optiFineInstallEntity != null)\n        {\n            var optifine = await OptiFine.Install(optiFineInstallEntity, customId!, mcPath, optiFineTask, task,\n                cancellationToken);\n            if (!optifine)\n            {\n                task.FinishWithError();\n                return false;\n            }\n\n            optiFineTask.Finish();\n        }\n\n\n        if (neoForgeInstallEntry != null)\n        {\n            var neoForge = await Forge.Install(neoForgeInstallEntry, customId!, mcPath, neoForgeTask, task,\n                cancellationToken);\n            if (!neoForge)\n            {\n                task.FinishWithError();\n                return false;\n            }\n\n            neoForgeTask.Finish();\n        }\n\n        if (fabricInstallEntry != null)\n        {\n            var fabric = await Fabric.Install(fabricInstallEntry, customId!, mcPath, fabricTask, task,\n                cancellationToken);\n            if (!fabric)\n            {\n                task.FinishWithError();\n                return false;\n            }\n\n            fabricTask.Finish();\n        }\n\n        if (quiltBuildEntry != null)\n        {\n            var quilt = await Quilt.Install(quiltBuildEntry, customId!, mcPath, quiltTask, task,\n                cancellationToken);\n            if (!quilt)\n            {\n                task.FinishWithError();\n                return false;\n            }\n\n            quiltTask.Finish();\n        }\n\n        if (!closeTaskWhenFinish || cancellationToken.IsCancellationRequested) return true;\n        task.FinishWithSuccess();\n        Notice($\"{MainLang.InstallFinish} - {customId ?? versionManifestEntry.Id}\", NotificationType.Success);\n        if (Data.SettingEntry.EnableIndependencyWindowNotification)\n        {\n            NoticeWindow(MainLang.InstallFinish, customId ?? versionManifestEntry.Id);\n        }\n\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/Minecraft/Fabric.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Downloader;\nusing MinecraftLaunch.Components.Installer;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.Minecraft;\n\npublic class Fabric\n{\n    public static async Task<bool> Install(FabricInstallEntry entry, string customId, string mcPath, SubTask subTask,\n        TaskEntry task, CancellationToken cancellationToken)\n    {\n        var isSuccess = false;\n        subTask.State = TaskState.Running;\n        await Task.Run(async () =>\n        {\n            try\n            {\n                var installer = FabricInstaller.Create(mcPath, entry, customId);\n                installer.ProgressChanged += (_, x) =>\n                {\n                    Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        task.UpdateValue(x.Progress * 100);\n                        task.Model.TopRightInfo =\n                            x.IsStepSupportSpeed ? FileDownloader.GetSpeedText(x.Speed) : string.Empty;\n                        task.Model.BottomLeftInfo = x.StepName.ToString();\n\n                        if (!x.IsStepSupportSpeed) return;\n                        subTask.FinishedTask = x.FinishedStepTaskCount;\n                        subTask.TotalTask = x.TotalStepTaskCount;\n                    });\n                };\n\n                await installer.InstallAsync(cancellationToken);\n                isSuccess = true;\n            }\n            catch (OperationCanceledException)\n            {\n                task.CancelFinish();\n            }\n            catch (Exception ex)\n            {\n                if (cancellationToken.IsCancellationRequested)\n                {\n                    task.CancelFinish();\n                }\n                else\n                {\n                    await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        ShowShortException($\"{MainLang.InstallFail}: Fabric - {customId}\", ex);\n                    });\n                    task.FinishWithError();\n                }\n            }\n        }, cancellationToken);\n        if (isSuccess)\n        {\n            subTask.Finish();\n        }\n        return isSuccess;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/Minecraft/Forge.cs",
    "content": "﻿using System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Downloader;\nusing MinecraftLaunch.Components.Installer;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.Minecraft;\n\npublic class Forge\n{\n    public static async Task<bool> Install(ForgeInstallEntry entry, string customId, string mcPath, SubTask forgeTask,\n        TaskEntry task, CancellationToken cancellationToken)\n    {\n        var isSuccess = false;\n        forgeTask.State = TaskState.Running;\n        await Task.Run(async () =>\n        {\n            try\n            {\n                var installer = ForgeInstaller.Create(mcPath,\n                    Data.JavaRuntimes.FirstOrDefault(x => x.MajorVersion != 0).JavaPath, entry, customId);\n                installer.ProgressChanged += (_, x) =>\n                {\n                    Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        task.UpdateValue(x.Progress * 100);\n                        task.Model.TopRightInfo =\n                            x.IsStepSupportSpeed ? FileDownloader.GetSpeedText(x.Speed) : string.Empty;\n                        task.Model.BottomLeftInfo = x.StepName.ToString();\n\n                        if (!x.IsStepSupportSpeed) return;\n                        forgeTask.FinishedTask = x.FinishedStepTaskCount;\n                        forgeTask.TotalTask = x.TotalStepTaskCount;\n                    });\n                };\n                \n                await installer.InstallAsync(cancellationToken);\n                isSuccess = true;\n            }\n            catch (OperationCanceledException)\n            {\n                task.CancelFinish();\n            }\n            catch (Exception ex)\n            {\n                if (cancellationToken.IsCancellationRequested)\n                {\n                    task.CancelFinish();\n                }\n                else\n                {\n                    await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        ShowShortException($\"{MainLang.InstallFail}: Forge - {customId}\", ex);\n                    });\n                    task.FinishWithError();\n                }\n            }\n        }, cancellationToken);\n        if (isSuccess)\n        {\n            forgeTask.Finish();\n        }\n        return isSuccess;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/Minecraft/OptiFine.cs",
    "content": "﻿using System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Downloader;\nusing MinecraftLaunch.Components.Installer;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.Minecraft;\n\npublic class OptiFine\n{\n    public static async Task<bool> Install(OptifineInstallEntry entry, string customId, string mcPath, SubTask subTask,\n        TaskEntry task, CancellationToken cancellationToken)\n    {\n        var isSuccess = false;\n        subTask.State = TaskState.Running;\n        await Task.Run(async () =>\n        {\n            try\n            {\n                var installer = OptifineInstaller.Create(mcPath,\n                    Data.JavaRuntimes.FirstOrDefault(x => x.MajorVersion != 0).JavaPath, entry, customId);\n                installer.ProgressChanged += (_, x) =>\n                {\n                    Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        task.UpdateValue(x.Progress * 100);\n                        task.Model.TopRightInfo =\n                            x.IsStepSupportSpeed ? FileDownloader.GetSpeedText(x.Speed) : string.Empty;\n                        task.Model.BottomLeftInfo = x.StepName.ToString();\n\n                        if (!x.IsStepSupportSpeed) return;\n                        subTask.FinishedTask = x.FinishedStepTaskCount;\n                        subTask.TotalTask = x.TotalStepTaskCount;\n                    });\n                };\n                \n                await installer.InstallAsync(cancellationToken);\n                isSuccess = true;\n            }\n            catch (OperationCanceledException)\n            {\n                task.CancelFinish();\n            }\n            catch (Exception ex)\n            {\n                if (cancellationToken.IsCancellationRequested)\n                {\n                    task.CancelFinish();\n                }\n                else\n                {\n                    await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        ShowShortException($\"{MainLang.InstallFail}: OptiFine - {customId}\", ex);\n                    });\n                    task.FinishWithError();\n                }\n            }\n        }, cancellationToken);\n        if (isSuccess)\n        {\n            subTask.Finish();\n        }\n        return isSuccess;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/Minecraft/Quilt.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Downloader;\nusing MinecraftLaunch.Components.Installer;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.Minecraft;\n\npublic class Quilt\n{\n    public static async Task<bool> Install(QuiltInstallEntry entry, string customId, string mcPath, SubTask subTask,\n        TaskEntry task, CancellationToken cancellationToken)\n    {\n        var isSuccess = false;\n        subTask.State = TaskState.Running;\n        await Task.Run(async () =>\n        {\n            try\n            {\n                var installer = QuiltInstaller.Create(mcPath, entry, customId);\n                installer.ProgressChanged += (_, x) =>\n                {\n                    Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        task.UpdateValue(x.Progress * 100);\n                        task.Model.TopRightInfo =\n                            x.IsStepSupportSpeed ? FileDownloader.GetSpeedText(x.Speed) : string.Empty;\n                        task.Model.BottomLeftInfo = x.StepName.ToString();\n\n                        if (!x.IsStepSupportSpeed) return;\n                        subTask.FinishedTask = x.FinishedStepTaskCount;\n                        subTask.TotalTask = x.TotalStepTaskCount;\n                    });\n                };\n\n                await installer.InstallAsync(cancellationToken);\n                isSuccess = true;\n            }\n            catch (OperationCanceledException)\n            {\n                task.CancelFinish();\n            }\n            catch (Exception ex)\n            {\n                if (cancellationToken.IsCancellationRequested)\n                {\n                    task.CancelFinish();\n                }\n                else\n                {\n                    await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        ShowShortException($\"{MainLang.InstallFail}: Quilt - {customId}\", ex);\n                    });\n                    task.FinishWithError();\n                }\n            }\n        }, cancellationToken);\n        if (isSuccess)\n        {\n            subTask.Finish();\n        }\n        return isSuccess;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/Minecraft/Vanilla.cs",
    "content": "﻿using System.Threading;\nusing System.Threading.Tasks;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Downloader;\nusing MinecraftLaunch.Components.Installer;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.Minecraft;\n\npublic class Vanilla\n{\n    public static async Task<bool> Install(VersionManifestEntry entry, string mcPath, TaskEntry task,\n        SubTask checkSubTask = null,\n        SubTask downloadSubTask = null, CancellationToken cancellationToken = default)\n    {\n        var isSuccess = false;\n        var installer = VanillaInstaller.Create(mcPath, entry);\n        checkSubTask.State = TaskState.Running;\n        downloadSubTask.State = TaskState.Waiting;\n        await Task.Run(async () =>\n        {\n            try\n            {\n                var checkFinished = false;\n                installer.ProgressChanged += (_, x) =>\n                {\n                    Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        task.UpdateValue(x.Progress * 100);\n                        task.Model.TopRightInfo =\n                            x.IsStepSupportSpeed ? FileDownloader.GetSpeedText(x.Speed) : string.Empty;\n                        task.Model.BottomLeftInfo = x.StepName.ToString();\n\n                        if (x.IsStepSupportSpeed && !checkFinished)\n                        {\n                            checkSubTask.Finish();\n                            downloadSubTask.State = TaskState.Running;\n                            checkFinished = true;\n                        }\n\n                        if (!x.IsStepSupportSpeed) return;\n                        downloadSubTask.FinishedTask = x.FinishedStepTaskCount;\n                        downloadSubTask.TotalTask = x.TotalStepTaskCount;\n                    });\n                };\n\n                await installer.InstallAsync(cancellationToken);\n                isSuccess = true;\n            }\n            catch (OperationCanceledException)\n            {\n                await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(task.CancelFinish);\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine(ex);\n                if (cancellationToken.IsCancellationRequested)\n                {\n                    await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(task.CancelFinish);\n                }\n                else\n                {\n                    await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        ShowShortException($\"{MainLang.InstallFail}: Vanilla - {entry.Id}\", ex);\n                        task.FinishWithError();\n                    });\n                }\n            }\n        }, cancellationToken);\n        if (!isSuccess) return isSuccess;\n        checkSubTask.Finish();\n        downloadSubTask.Finish();\n        return isSuccess;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/ModPack/CurseForge.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Threading;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Downloader;\nusing MinecraftLaunch.Components.Installer;\nusing MinecraftLaunch.Components.Installer.Modpack;\nusing MinecraftLaunch.Components.Parser;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.ModPack;\n\npublic class CurseForge\n{\n    public static async Task<bool> Install(string path, CurseforgeModpackInstallEntry modpackEntry, string id,\n        TaskEntry? p_task = null)\n    {\n        var isSuccess = false;\n        p_task?.Rename($\"{MainLang.Install}: {id}\");\n        var task = p_task ?? new TaskEntry($\"{MainLang.Install}: {id}\", state: TaskState.Running);\n        var cts = new CancellationTokenSource();\n        var cancellationToken = cts.Token;\n        var mcPath = Data.SettingEntry.MinecraftFolder.Path;\n        task.UpdateAction(() =>\n        {\n            cts.Cancel();\n            task.CancelWaitFinish();\n            if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n        });\n        var installTask = new SubTask($\"{MainLang.InstallModPack}: {id}\");\n        var prepareTask = new SubTask($\"{MainLang.PrepareInstall}\");\n        var vanillaTask = new SubTask($\"{MainLang.Install}: Vanilla {modpackEntry.McVersion}\");\n        var checkTask = new SubTask(MainLang.CheckVersionResource);\n        var forgeTask = new SubTask($\"{MainLang.Install}: Forge\");\n        var neoForgeTask = new SubTask($\"{MainLang.Install}: NeoForge\");\n        var optiFineTask = new SubTask($\"{MainLang.Install}: OptiFine\");\n        var fabricTask = new SubTask($\"{MainLang.Install}: Fabric\");\n        var quiltTask = new SubTask($\"{MainLang.Install}: Quilt\");\n\n        task.AddSubTask(prepareTask);\n        prepareTask.State = TaskState.Running;\n\n        try\n        {\n            var installEntrys =\n                await CurseforgeModpackInstaller.ParseModLoaderEntryByManifestAsync(modpackEntry, cancellationToken)\n                    .ToListAsync(cancellationToken: cancellationToken);\n            if (installEntrys == null)\n            {\n                Notice($\"{MainLang.Unrecognized}: {Path.GetFileName(path)}\", NotificationType.Warning);\n                return false;\n            }\n\n            installEntrys.Insert(0,\n                await VanillaInstaller.EnumerableMinecraftAsync(cancellationToken)\n                    .FirstAsync(x => x.Id == modpackEntry.McVersion, cancellationToken: cancellationToken));\n\n            installEntrys.ForEach(entry =>\n            {\n                if (entry is VersionManifestEntry)\n                {\n                    task.AddSubTask(checkTask);\n                    task.AddSubTask(vanillaTask);\n                }\n                else if (entry is ForgeInstallEntry forgeInstallEntry)\n                {\n                    task.AddSubTask(forgeInstallEntry.IsNeoforge ? neoForgeTask : forgeTask);\n                }\n                else if (entry is OptifineInstallEntry)\n                {\n                    task.AddSubTask(optiFineTask);\n                }\n                else if (entry is QuiltInstallEntry)\n                {\n                    task.AddSubTask(quiltTask);\n                }\n                else if (entry is FabricInstallEntry)\n                {\n                    task.AddSubTask(fabricTask);\n                }\n            });\n\n            task.AddSubTask(installTask);\n            prepareTask.Finish();\n\n            foreach (var entry in installEntrys)\n            {\n                if (entry is VersionManifestEntry versionManifestEntry)\n                {\n                    await Installer.Minecraft.Vanilla.Install(versionManifestEntry, mcPath, task, checkTask,\n                        vanillaTask, cancellationToken: cancellationToken);\n                }\n                else if (entry is ForgeInstallEntry forgeInstallEntry)\n                {\n                    await Installer.Minecraft.Forge.Install(forgeInstallEntry, id, mcPath,\n                        forgeInstallEntry.IsNeoforge ? neoForgeTask : forgeTask, task, cancellationToken);\n                }\n                else if (entry is OptifineInstallEntry optifineInstallEntry)\n                {\n                    await Installer.Minecraft.OptiFine.Install(optifineInstallEntry, id, mcPath,\n                        optiFineTask, task, cancellationToken);\n                }\n                else if (entry is QuiltInstallEntry quiltInstallEntry)\n                {\n                    await Installer.Minecraft.Quilt.Install(quiltInstallEntry, id, mcPath,\n                        quiltTask, task, cancellationToken);\n                }\n                else if (entry is FabricInstallEntry fabricInstallEntry)\n                {\n                    await Installer.Minecraft.Fabric.Install(fabricInstallEntry, id, mcPath,\n                        fabricTask, task, cancellationToken);\n                }\n            }\n\n            installTask.State = TaskState.Running;\n\n            var cfModpackInstaller = CurseforgeModpackInstaller.Create(mcPath, path, modpackEntry,\n                new MinecraftParser(mcPath).GetMinecraft(id));\n            task.Model.BottomLeftInfo = string.Empty;\n            cfModpackInstaller.ProgressChanged += (_, x) =>\n            {\n                task.UpdateValue(x.Progress * 100);\n                task.Model.TopRightInfo =\n                    x.IsStepSupportSpeed ? FileDownloader.GetSpeedText(x.Speed) : string.Empty;\n                task.Model.BottomLeftInfo = x.StepName.ToString();\n                installTask.Name = $\"{MainLang.Install}: {id} ({x.StepName})\";\n                installTask.FinishedTask = x.FinishedStepTaskCount;\n                installTask.TotalTask = x.TotalStepTaskCount;\n            };\n            cancellationToken.ThrowIfCancellationRequested();\n            await Task.Run(async () =>\n            {\n                try\n                {\n                    await cfModpackInstaller.InstallAsync(cancellationToken);\n                }\n                catch (Exception e)\n                {\n                    Console.WriteLine(e);\n                    Dispatcher.UIThread.Invoke(() =>\n                    {\n                        if (cancellationToken.IsCancellationRequested)\n                        {\n                            task.CancelFinish();\n                            task.Cancel();\n                            if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                                Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n                        }\n                        else\n                        {\n                            ShowShortException($\"{MainLang.InstallFail}: {id}\", e);\n                            if (Data.SettingEntry.EnableIndependencyWindowNotification)\n                            {\n                                NoticeWindow(MainLang.InstallFail, id);\n                            }\n                        }\n                    });\n                    isSuccess = false;\n                }\n            });\n            cancellationToken.ThrowIfCancellationRequested();\n            isSuccess = true;\n        }\n        catch (Exception e)\n        {\n            if (cancellationToken.IsCancellationRequested)\n            {\n                task.CancelFinish();\n                task.Cancel();\n                if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                    Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n            }\n            else\n            {\n                ShowShortException($\"{MainLang.InstallFail}: {id}\", e);\n            }\n\n            isSuccess = false;\n        }\n\n\n        if (cancellationToken.IsCancellationRequested)\n        {\n            try\n            {\n                if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                    Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n            }\n            return false;\n        }\n        if (isSuccess)\n        {\n            Notice($\"{MainLang.InstallFinish}: {id}\", NotificationType.Success);\n            if (Data.SettingEntry.EnableIndependencyWindowNotification)\n            {\n                NoticeWindow(MainLang.InstallFinish, id);\n            }\n            task.FinishWithSuccess();\n        }\n        else\n        {\n            Notice($\"{MainLang.InstallFail}: {id}\", NotificationType.Success);\n            if (Data.SettingEntry.EnableIndependencyWindowNotification)\n            {\n                NoticeWindow(MainLang.InstallFail, id);\n            }\n            task.FinishWithError();\n        }\n\n        if (!isSuccess)\n        {\n            try\n            {\n                if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                    Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n            }\n            return isSuccess;\n        }\n        foreach (var modelSubTask in task.Model.SubTasks)\n        {\n            modelSubTask.Finish();\n        }\n\n        return isSuccess;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Installer/ModPack/Modrinth.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Threading;\nusing MinecraftLaunch.Base.Interfaces;\nusing MinecraftLaunch.Base.Models.Network;\nusing MinecraftLaunch.Components.Downloader;\nusing MinecraftLaunch.Components.Installer;\nusing MinecraftLaunch.Components.Installer.Modpack;\nusing MinecraftLaunch.Components.Parser;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Installer.ModPack;\n\npublic class Modrinth\n{\n    public static async Task<bool> Install(string path, ModrinthModpackInstallEntry modpackEntry, string id,\n        TaskEntry? p_task = null)\n    {\n        bool isSuccess;\n        var task = p_task ?? new TaskEntry($\"{MainLang.Install}: {id}\", state: TaskState.Running);\n        task.Rename($\"{MainLang.Install}: {id}\");\n        var cts = new CancellationTokenSource();\n        var cancellationToken = cts.Token;\n        var mcPath = Data.SettingEntry.MinecraftFolder.Path;\n        task.UpdateAction(() =>\n        {\n            cts.Cancel();\n            task.CancelWaitFinish();\n            if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n        });\n        var installTask = new SubTask($\"{MainLang.InstallModPack}: {id}\");\n        var prepareTask = new SubTask($\"{MainLang.PrepareInstall}\");\n        var vanillaTask = new SubTask($\"{MainLang.Install}: Vanilla {modpackEntry.McVersion}\");\n        var checkTask = new SubTask(MainLang.CheckVersionResource);\n        var forgeTask = new SubTask($\"{MainLang.Install}: Forge\");\n        var neoForgeTask = new SubTask($\"{MainLang.Install}: NeoForge\");\n        var optiFineTask = new SubTask($\"{MainLang.Install}: OptiFine\");\n        var fabricTask = new SubTask($\"{MainLang.Install}: Fabric\");\n        var quiltTask = new SubTask($\"{MainLang.Install}: Quilt\");\n\n        task.AddSubTask(prepareTask);\n        prepareTask.State = TaskState.Running;\n\n        try\n        {\n            List<IInstallEntry> installEntrys =\n            [\n                await ModrinthModpackInstaller.ParseModLoaderEntryAsync(modpackEntry, cancellationToken)\n            ];\n            if (installEntrys == null)\n            {\n                Notice($\"{MainLang.Unrecognized}: {Path.GetFileName(path)}\", NotificationType.Warning);\n                return false;\n            }\n\n            installEntrys.Insert(0,\n                await VanillaInstaller.EnumerableMinecraftAsync(cancellationToken)\n                    .FirstAsync(x => x.Id == modpackEntry.McVersion, cancellationToken: cancellationToken));\n\n            installEntrys.ForEach(entry =>\n            {\n                if (entry is VersionManifestEntry)\n                {\n                    task.AddSubTask(checkTask);\n                    task.AddSubTask(vanillaTask);\n                }\n                else if (entry is ForgeInstallEntry forgeInstallEntry)\n                {\n                    task.AddSubTask(forgeInstallEntry.IsNeoforge ? neoForgeTask : forgeTask);\n                }\n                else if (entry is OptifineInstallEntry)\n                {\n                    task.AddSubTask(optiFineTask);\n                }\n                else if (entry is QuiltInstallEntry)\n                {\n                    task.AddSubTask(quiltTask);\n                }\n                else if (entry is FabricInstallEntry)\n                {\n                    task.AddSubTask(fabricTask);\n                }\n            });\n\n            task.AddSubTask(installTask);\n            prepareTask.Finish();\n\n            foreach (var entry in installEntrys)\n            {\n                if (entry is VersionManifestEntry versionManifestEntry)\n                {\n                    await Installer.Minecraft.Vanilla.Install(versionManifestEntry, mcPath, task, checkTask,\n                        vanillaTask, cancellationToken: cancellationToken);\n                }\n                else if (entry is ForgeInstallEntry forgeInstallEntry)\n                {\n                    await Installer.Minecraft.Forge.Install(forgeInstallEntry, id, mcPath,\n                        forgeInstallEntry.IsNeoforge ? neoForgeTask : forgeTask, task, cancellationToken);\n                }\n                else if (entry is OptifineInstallEntry optifineInstallEntry)\n                {\n                    await Installer.Minecraft.OptiFine.Install(optifineInstallEntry, id, mcPath,\n                        optiFineTask, task, cancellationToken);\n                }\n                else if (entry is QuiltInstallEntry quiltInstallEntry)\n                {\n                    await Installer.Minecraft.Quilt.Install(quiltInstallEntry, id, mcPath,\n                        quiltTask, task, cancellationToken);\n                }\n                else if (entry is FabricInstallEntry fabricInstallEntry)\n                {\n                    await Installer.Minecraft.Fabric.Install(fabricInstallEntry, id, mcPath,\n                        fabricTask, task, cancellationToken);\n                }\n            }\n\n            installTask.State = TaskState.Running;\n\n            var mrModpackInstaller = ModrinthModpackInstaller.Create(mcPath, path, modpackEntry,\n                new MinecraftParser(mcPath).GetMinecraft(id));\n            task.Model.BottomLeftInfo = string.Empty;\n            mrModpackInstaller.ProgressChanged += (_, x) =>\n            {\n                task.UpdateValue(x.Progress * 100);\n                task.Model.TopRightInfo =\n                    x.IsStepSupportSpeed ? FileDownloader.GetSpeedText(x.Speed) : string.Empty;\n                task.Model.BottomLeftInfo = x.StepName.ToString();\n                installTask.Name = $\"{MainLang.Install}: {id} ({x.StepName})\";\n                installTask.FinishedTask = x.FinishedStepTaskCount;\n                installTask.TotalTask = x.TotalStepTaskCount;\n            };\n            cancellationToken.ThrowIfCancellationRequested();\n            await Task.Run(async () =>\n            {\n                try\n                {\n                    await mrModpackInstaller.InstallAsync(cancellationToken);\n                }\n                catch (Exception e)\n                {\n                    Console.WriteLine(e);\n                    Dispatcher.UIThread.Invoke(() =>\n                    {\n                        if (cancellationToken.IsCancellationRequested)\n                        {\n                            task.CancelFinish();\n                            task.Cancel();\n                            if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                                Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n                        }\n                        else\n                        {\n                            ShowShortException($\"{MainLang.InstallFail}: {id}\", e);\n                            if (Data.SettingEntry.EnableIndependencyWindowNotification)\n                            {\n                                NoticeWindow(MainLang.InstallFail, id);\n                            }\n                        }\n                    });\n                    isSuccess = false;\n                }\n            });\n            cancellationToken.ThrowIfCancellationRequested();\n            isSuccess = true;\n        }\n        catch (Exception e)\n        {\n            if (cancellationToken.IsCancellationRequested)\n            {\n                task.CancelFinish();\n                task.Cancel();\n                if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                    Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n            }\n            else\n            {\n                ShowShortException($\"{MainLang.InstallFail}: {id}\", e);\n            }\n\n            isSuccess = false;\n        }\n\n\n        if (cancellationToken.IsCancellationRequested)\n        {\n            try\n            {\n                if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                    Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n            }\n            return false;\n        }\n        if (isSuccess)\n        {\n            Notice($\"{MainLang.InstallFinish}: {id}\", NotificationType.Success);\n            if (Data.SettingEntry.EnableIndependencyWindowNotification)\n            {\n                NoticeWindow(MainLang.InstallFinish, id);\n            }\n            task.FinishWithSuccess();\n        }\n        else\n        {\n            Notice($\"{MainLang.InstallFail}: {id}\", NotificationType.Success);\n            if (Data.SettingEntry.EnableIndependencyWindowNotification)\n            {\n                NoticeWindow(MainLang.InstallFail, id);\n            }\n            task.FinishWithError();\n        }\n        \n        if (!isSuccess)\n        {\n            try\n            {\n                if (Directory.Exists(Path.Combine(mcPath, \"versions\", id)))\n                    Directory.Delete(Path.Combine(mcPath, \"versions\", id), true);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n            }\n            return isSuccess;\n        }\n        foreach (var modelSubTask in task.Model.SubTasks)\n        {\n            modelSubTask.Finish();\n        }\n\n        return isSuccess;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Launcher/BedRock.cs",
    "content": "﻿using Avalonia.Controls.Notifications;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Mc.Launcher;\n\npublic class BedRock\n{\n    public static void Launch(Control sender)\n    {\n        try\n        {\n            var launcher = TopLevel.GetTopLevel(sender).Launcher;\n            launcher.LaunchUriAsync(new Uri(\"minecraft://play\"));\n        }\n        catch\n        {\n            Notice($\"{MainLang.LaunchFail} - {MainLang.BedRockVersion}\", NotificationType.Error);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Launcher/JavaClient.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Linq;\nusing System.Text.RegularExpressions;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch.Base.Models.Authentication;\nusing MinecraftLaunch.Base.Models.Game;\nusing MinecraftLaunch.Components.Authenticator;\nusing MinecraftLaunch.Components.Parser;\nusing MinecraftLaunch.Extensions;\nusing MinecraftLaunch.Launch;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Value;\nusing LogWindow = YMCL.Views.LogWindow;\nusing Setting = YMCL.Public.Enum.Setting;\nusing String = YMCL.Public.Const.String;\n\nnamespace YMCL.Public.Module.Mc.Launcher;\n\npublic class JavaClient\n{\n    public static async Task<bool> Launch(string p_id, string p_mcPath, double p_maxMem,\n        MinecraftLaunch.Base.Models.Game.JavaEntry p_javaPath,\n        string? p_fullUrl = null, string? p_world = null, bool p_enableIndependencyCore = true, bool p_isDebug = false)\n    {\n        var cts = new CancellationTokenSource();\n        var token = cts.Token;\n\n        object[] args = [p_id, p_mcPath, p_maxMem, p_javaPath];\n        foreach (var t in args)\n        {\n            if (t != null) continue;\n            var exception = new ArgumentNullException(nameof(t), $\"{nameof(t)} cannot be null.\");\n            Notice($\"{MainLang.LaunchFail}\\n{exception.Message}\", NotificationType.Error);\n            return false;\n        }\n\n        var parser = new MinecraftParser(p_mcPath);\n        var entry = parser.GetMinecraft(p_id);\n        if (entry == null)\n        {\n            Notice(MainLang.CreateGameEntryFail, NotificationType.Error);\n            return false;\n        }\n\n        if (string.IsNullOrWhiteSpace(entry.ClientJarPath) || !File.Exists(entry.ClientJarPath))\n        {\n            Notice(MainLang.GameMainFileDeletion, NotificationType.Error);\n            return false;\n        }\n\n        string host = null;\n        int port = -1;\n\n        if (!string.IsNullOrWhiteSpace(p_fullUrl))\n        {\n            try\n            {\n                (host, port) = Converter.UrlToHostAndPort(p_fullUrl);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n                Notice(MainLang.ServerUrlError, NotificationType.Error);\n                return false;\n            }\n        }\n\n        if (Data.SettingEntry.Account == null)\n        {\n            Notice(MainLang.AccountError, NotificationType.Error);\n            return false;\n        }\n\n        ObservableCollection<SubTask> subTasks =\n        [\n            new(MainLang.CheckLaunchArg),\n            new(MainLang.RefreshAccountToken),\n            new(MainLang.BuildLaunchConfig),\n            new(MainLang.LaunchMinecraftProcess)\n        ];\n        var task = new TaskEntry($\"{MainLang.Launch}: {entry.Id}\", subTasks, TaskState.Running);\n        YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavTask;\n        var canceled = false;\n\n        task.UpdateAction(() =>\n        {\n            canceled = true;\n            task.CancelWaitFinish();\n            cts.Cancel();\n        });\n        task.AdvanceSubTask();\n\n        Account? account = null!;\n        switch (Data.SettingEntry.Account.AccountType)\n        {\n            case Setting.AccountType.Offline:\n                if (!string.IsNullOrWhiteSpace(Data.SettingEntry.Account.Name))\n                {\n                    account = JsonConvert.DeserializeObject<OfflineAccount>(Data.SettingEntry.Account.Data!);\n                }\n                else\n                {\n                    Notice(MainLang.AccountError, NotificationType.Error);\n                    task.FinishWithError();\n                    return false;\n                }\n\n                break;\n            case Setting.AccountType.Microsoft:\n                var profile = JsonConvert.DeserializeObject<MicrosoftAccount>(Data.SettingEntry.Account.Data!);\n                MicrosoftAuthenticator authenticator2 = new(String.AzureClientId);\n                try\n                {\n                    account = await authenticator2.RefreshAsync(profile, token);\n                }\n                catch (Exception ex)\n                {\n                    ShowShortException(MainLang.LoginFail, ex);\n                    task.FinishWithError();\n                    return false;\n                }\n\n                break;\n            case Setting.AccountType.ThirdParty:\n                account = JsonConvert.DeserializeObject<YggdrasilAccount>(Data.SettingEntry.Account.Data!);\n                break;\n        }\n\n        if (canceled)\n        {\n            Notice($\"{MainLang.Canceled}: {MainLang.Launch} - {entry.Id}\", NotificationType.Success);\n            task.CancelFinish();\n            return false;\n        }\n\n        if (account == null)\n        {\n            Notice(MainLang.AccountError, NotificationType.Error);\n            task.FinishWithError();\n            return false;\n        }\n\n        task.AdvanceSubTask();\n\n        var config = new LaunchConfig\n        {\n            Account = account,\n            JavaPath = p_javaPath,\n            MaxMemorySize = Convert.ToInt32(p_maxMem),\n            MinMemorySize = 512,\n            IsEnableIndependency = p_enableIndependencyCore,\n            JvmArguments = [],\n            LauncherName = \"YMCL\",\n        };\n\n        if (!string.IsNullOrWhiteSpace(host) && port > 0)\n        {\n            config.ServerInfo = new ServerInfo()\n            {\n                Address = host,\n                Port = port\n            };\n        }\n\n        if (string.IsNullOrWhiteSpace(p_fullUrl) && !string.IsNullOrWhiteSpace(p_world))\n        {\n            config.SaveName = p_world;\n        }\n\n        task.AdvanceSubTask();\n\n        MinecraftRunner runner = new(config, parser);\n\n        var window = new LogWindow();\n        task.UpdateDestoryAction(() => { window.Destory(); });\n\n        try\n        {\n            await Task.Run(async () =>\n            {\n                try\n                {\n                    var process = await runner.RunAsync(p_id, token);\n                    var copyArguments = string.Join(\" \", process.ArgumentList);\n                    process.Exited += async (_, arg) =>\n                    {\n                        await Dispatcher.UIThread.InvokeAsync(async () =>\n                        {\n                            if (Data.SettingEntry.LauncherVisibility !=\n                                Setting.LauncherVisibility.AfterLaunchMakeLauncherMinimize)\n                            {\n                                if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is Window window1)\n                                {\n                                    window1.Show();\n                                    window1.WindowState = WindowState.Normal;\n                                    window1.Activate();\n                                }\n                            }\n\n                            Notice($\"{MainLang.GameExited} - {p_id}\", NotificationType.Warning);\n\n                            task.FinishWithSuccess();\n                            await Task.Delay(2000);\n                            if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is Window window2)\n                            {\n                                window2.Activate();\n                                window2.Focus();\n                            }\n                        });\n                    };\n\n                    process.OutputLogReceived += (_, arg) =>\n                    {\n                        var regex = new Regex(@\"^\\[[^\\]]*\\]\\s*\\[([^\\]]*?)(\\]|$)(\\s*.*)\");\n                        var match = regex.Match(arg.Data.Source);\n                        var regStr = match.Groups[1].Value + match.Groups[3].Value;\n                        Dispatcher.UIThread.Invoke(\n                            () =>\n                            {\n                                window.Append(arg.Data.Log, arg.Data.Time, (LogType)arg.Data.LogLevel,\n                                    string.IsNullOrWhiteSpace(regStr) ? arg.Data.Source : regStr);\n                            },\n                            DispatcherPriority.ApplicationIdle);\n                    };\n\n                    await Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        task.AdvanceSubTask();\n                        Notice($\"{MainLang.LaunchFinish} - {p_id}\", NotificationType.Success);\n                        task.AddOperateButton(new TaskEntryOperateButtonEntry(MainLang.DisplayLaunchArguments,\n                            async () =>\n                            {\n                                var dialog = await ShowDialogAsync(MainLang.LaunchArguments,\n                                    string.Join(\" \\n\", process.ArgumentList), b_cancel: MainLang.Ok,\n                                    b_primary: MainLang.Copy);\n                                if (dialog != ContentDialogResult.Primary) return;\n                                var clipboard = TopLevel.GetTopLevel(YMCL.App.UiRoot)?.Clipboard;\n                                await clipboard.SetTextAsync(copyArguments);\n                                Notice(MainLang.AlreadyCopyToClipBoard, NotificationType.Success);\n                            }));\n                        task.AddOperateButton(new TaskEntryOperateButtonEntry(MainLang.KillProcess, async () =>\n                        {\n                            try\n                            {\n                                canceled = true;\n                                process.Process.Kill(true);\n                                task.CancelWithSuccess();\n                                await cts.CancelAsync();\n                            }\n                            catch\n                            {\n                            }\n                        }));\n                        task.AddOperateButton(new TaskEntryOperateButtonEntry(\"显示Minecraft日志\", () =>\n                        {\n                            window.Show();\n                            window.Activate();\n                        }));\n                    });\n                    _ = Task.Run(async () =>\n                    {\n                        task.UpdateButtonText(MainLang.KillProcess);\n                        task.UpdateAction(() =>\n                        {\n                            try\n                            {\n                                canceled = true;\n                                process.Process.Kill(true);\n                                task.CancelWithSuccess();\n                                cts.Cancel();\n                            }\n                            catch\n                            {\n                            }\n                        });\n                        await Task.Delay(8000);\n                        Dispatcher.UIThread.Invoke(() =>\n                        {\n                            switch (Data.SettingEntry.LauncherVisibility)\n                            {\n                                case Setting.LauncherVisibility.AfterLaunchExitLauncher:\n                                    Environment.Exit(0);\n                                    break;\n                                case Setting.LauncherVisibility.AfterLaunchMakeLauncherMinimize:\n                                case Setting.LauncherVisibility.AfterLaunchMinimizeAndShowWhenGameExit:\n                                    if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is Window window2)\n                                    {\n                                        window2.WindowState = WindowState.Minimized;\n                                    }\n\n                                    break;\n                                case Setting.LauncherVisibility.AfterLaunchHideAndShowWhenGameExit:\n                                    if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is Window window1)\n                                    {\n                                        window1.Hide();\n                                    }\n\n                                    break;\n                                case Setting.LauncherVisibility.AfterLaunchKeepLauncherVisible:\n                                default:\n                                    break;\n                            }\n                        });\n                    });\n                }\n                catch (Exception ex)\n                {\n                    await Dispatcher.UIThread.InvokeAsync(() =>\n                    {\n                        ShowShortException(MainLang.LaunchFail, ex);\n                        task.FinishWithError();\n                    });\n                }\n            }, token);\n        }\n        catch (OperationCanceledException)\n        {\n            Notice($\"{MainLang.Canceled}: {MainLang.Launch} - {entry.Id}\", NotificationType.Warning);\n            task.CancelFinish();\n            return false;\n        }\n\n        await Task.Delay(20);\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/MinecraftSetting.cs",
    "content": "﻿using System.IO;\nusing MinecraftLaunch.Base.Models.Game;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Public.Module.Mc;\n\npublic partial class MinecraftSetting\n{\n    public static void InitGameSetting(MinecraftEntry entry)\n    {\n        File.WriteAllText(Path.Combine(entry.MinecraftFolderPath, \"versions\", entry.Id, \"YMCL.GameSetting.DaiYu\"),\n            JsonConvert.SerializeObject(new GameSettingEntry(), Formatting.Indented));\n    }\n\n    public static GameSettingEntry GetGameSetting(MinecraftEntry entry)\n    {\n        if (!File.Exists(Path.Combine(entry.MinecraftFolderPath, \"versions\", entry.Id, \"YMCL.GameSetting.DaiYu\")))\n        {\n            InitGameSetting(entry);\n        }\n\n        try\n        {\n            return JsonConvert.DeserializeObject<GameSettingEntry>(File.ReadAllText(Path.Combine(\n                entry.MinecraftFolderPath, \"versions\",\n                entry.Id, \"YMCL.GameSetting.DaiYu\")));\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            File.Delete(Path.Combine(\n                entry.MinecraftFolderPath, \"versions\",\n                entry.Id, \"YMCL.GameSetting.DaiYu\"));\n            return GetGameSetting(entry);\n        }\n    }\n\n    public static void HandleGameSetting(GameSettingEntry entry)\n    {\n        if (entry.EnableIndependencyCore == Enum.Setting.VersionSettingEnableIndependencyCore.Global)\n        {\n            entry.IsEnableIndependencyCore = Data.SettingEntry.EnableIndependencyCore;\n        }\n        else\n        {\n            entry.IsEnableIndependencyCore =\n                entry.EnableIndependencyCore == Enum.Setting.VersionSettingEnableIndependencyCore.On;\n        }\n\n        if (entry.MaxMemWay == Setting.MaxMemWay.Global)\n        {\n            if (Data.SettingEntry.EnableAutoAllocateMem && Data.DesktopType == DesktopRunnerType.Windows)\n            {\n                entry.MaxMem = Data.UiProperty.AutoMaxMem;\n            }\n            else\n            {\n                entry.MaxMem = Data.SettingEntry.MaxMem;\n            }\n        }\n        else if (entry.MaxMemWay == Setting.MaxMemWay.AutoAllocate)\n        {\n            entry.MaxMem = Data.DesktopType == DesktopRunnerType.Windows ? Data.UiProperty.AutoMaxMem : Data.SettingEntry.MaxMem;\n        }\n        else if (entry.MaxMemWay == Setting.MaxMemWay.Custom)\n        {\n            entry.MaxMem = entry.MaxMem;\n        }\n\n        if (entry.Java.JavaVersion is null or \"Global\")\n        {\n            entry.Java = Data.SettingEntry.Java;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Mc/Utils.cs",
    "content": "﻿using System.IO;\nusing MinecraftLaunch.Base.Models.Game;\nusing MinecraftLaunch.Components.Parser;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Public.Module.Mc;\n\npublic class Utils\n{\n    public static string GetMinecraftSpecialFolder(MinecraftEntry entry, GameSpecialFolder folder,\n        bool isForceEnableIndependencyCore = false)\n    {\n        var setting = MinecraftSetting.GetGameSetting(entry);\n        MinecraftSetting.HandleGameSetting(setting);\n        var isEnableIndependencyCore = isForceEnableIndependencyCore || setting.IsEnableIndependencyCore;\n        var basePath = isEnableIndependencyCore\n            ? Path.Combine(entry.MinecraftFolderPath, \"versions\", entry.Id)\n            : entry.MinecraftFolderPath;\n        var path = folder switch\n        {\n            GameSpecialFolder.GameFolder => basePath,\n            GameSpecialFolder.ModsFolder => Path.Combine(basePath, \"mods\"),\n            GameSpecialFolder.ResourcePacksFolder => Path.Combine(basePath, \"resourcepacks\"),\n            GameSpecialFolder.SavesFolder => Path.Combine(basePath, \"saves\"),\n            GameSpecialFolder.ScreenshotsFolder => Path.Combine(basePath, \"screenshots\"),\n            GameSpecialFolder.ShaderPacksFolder => Path.Combine(basePath, \"shaderpacks\"),\n            _ => basePath\n        };\n        IO.Disk.Setter.TryCreateFolder(path);\n        return path;\n    }\n\n    public static MinecraftEntry? GetCurrentMinecraft()\n    {\n        if (Data.SettingEntry.SelectedMinecraftId == \"bedrock\") return null;\n        var parser = new MinecraftParser(Data.SettingEntry.MinecraftFolder.Path);\n        return parser.GetMinecraft(Data.SettingEntry.SelectedMinecraftId);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Op/Account.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Layout;\nusing Avalonia.Media;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch.Base.Models.Authentication;\nusing MinecraftLaunch.Components.Authenticator;\nusing MinecraftLaunch.Skin.Class.Fetchers;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Value;\nusing Setting = YMCL.Public.Enum.Setting;\nusing String = YMCL.Public.Const.String;\n\nnamespace YMCL.Public.Module.Op;\n\npublic class Account\n{\n    public static async Task AddByUi(Control sender)\n    {\n        var comboBox = new ComboBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            HorizontalAlignment = HorizontalAlignment.Stretch\n        };\n        comboBox.Items.Add(MainLang.OfflineLogin);\n        comboBox.Items.Add(MainLang.MicrosoftLogin);\n        comboBox.Items.Add(MainLang.ThirdPartyLogin);\n        comboBox.SelectedIndex = 0;\n        ContentDialog dialog = new()\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            Title = MainLang.SelectAccountType,\n            PrimaryButtonText = MainLang.Ok,\n            CloseButtonText = MainLang.Cancel,\n            DefaultButton = ContentDialogButton.Primary,\n            Content = comboBox\n        };\n        var dialogResult = await dialog.ShowAsync(TopLevel.GetTopLevel(sender));\n        if (dialogResult == ContentDialogResult.Primary)\n            switch (comboBox.SelectedIndex)\n            {\n                case 0:\n                    var textBox = new TextBox\n                    {\n                        FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                        TextWrapping = TextWrapping.Wrap, Watermark = MainLang.AccountName\n                    };\n                    var uuidTextBox = new TextBox\n                    {\n                        FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                        TextWrapping = TextWrapping.Wrap, Watermark = MainLang.AddNewAccountUuid\n                    };\n                    ContentDialog offlineDialog = new()\n                    {\n                        FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                        Title = MainLang.AddNewAccount,\n                        PrimaryButtonText = MainLang.Ok,\n                        CloseButtonText = MainLang.Cancel,\n                        DefaultButton = ContentDialogButton.Primary,\n                        Content = new StackPanel()\n                        {\n                            Spacing = 10,\n                            Children = { textBox, uuidTextBox }\n                        }\n                    };\n                    var dialogResult1 = await offlineDialog.ShowAsync(TopLevel.GetTopLevel(sender));\n                    if (dialogResult1 == ContentDialogResult.Primary)\n                    {\n                        if (!string.IsNullOrWhiteSpace(textBox.Text))\n                        {\n                            var now = DateTime.Now;\n                            OfflineAuthenticator authenticator3 = new();\n                            try\n                            {\n                                Data.Accounts.Add(new AccountInfo\n                                {\n                                    AccountType = Setting.AccountType.Offline,\n                                    AddTime = now.ToString(\"yyyy-MM-ddTHH:mm:sszzz\"),\n                                    Data = JsonConvert.SerializeObject(\n                                        authenticator3.Authenticate(textBox.Text,\n                                            uuidTextBox.Text == null ? Guid.NewGuid() : Guid.Parse(uuidTextBox.Text))),\n                                    Name = textBox.Text\n                                });\n                            }\n                            catch (Exception e)\n                            {\n                                Console.WriteLine(e);\n                                Notice(MainLang.OperateFailed, NotificationType.Error);\n                            }\n\n                            await File.WriteAllTextAsync(ConfigPath.AccountDataPath,\n                                JsonConvert.SerializeObject(Data.Accounts, Formatting.Indented));\n                        }\n                        else\n                        {\n                            Notice(MainLang.AccountNameCannotBeNull, NotificationType.Error);\n                        }\n                    }\n\n                    await File.WriteAllTextAsync(ConfigPath.AccountDataPath,\n                        JsonConvert.SerializeObject(Data.Accounts, Formatting.Indented));\n                    break;\n                case 1:\n                    var verificationUrl = string.Empty;\n                    var verificationCode = string.Empty;\n                    MicrosoftAccount userProfile;\n                    var textBlock = new TextBlock\n                    {\n                        FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                        TextWrapping = TextWrapping.Wrap, Text = MainLang.Loading,\n                        HorizontalAlignment = HorizontalAlignment.Center, FontSize = 16\n                    };\n                    ContentDialog microsoftDialog = new()\n                    {\n                        FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                        Title = MainLang.VerificationCode,\n                        PrimaryButtonText = MainLang.CopyCodeAndOPenBrowser,\n                        SecondaryButtonText = MainLang.ManualOpen,\n                        CloseButtonText = MainLang.Cancel,\n                        DefaultButton = ContentDialogButton.Primary,\n                        Content = textBlock,\n                        IsPrimaryButtonEnabled = false,\n                        IsSecondaryButtonEnabled = false\n                    };\n                    MicrosoftAuthenticator authenticator = new(String.AzureClientId);\n                    microsoftDialog.PrimaryButtonClick += async (_, _) =>\n                    {\n                        var clipboard = TopLevel.GetTopLevel(sender)?.Clipboard;\n                        await clipboard.SetTextAsync(textBlock.Text);\n                        var launcher = TopLevel.GetTopLevel(sender).Launcher;\n                        await launcher.LaunchUriAsync(new Uri(verificationUrl));\n                        Notice(MainLang.WaitForMicrosoftVerification);\n                    };\n                    microsoftDialog.SecondaryButtonClick += (_, _) =>\n                    {\n                        var urlBox = new TextBox\n                        {\n                            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                            TextWrapping = TextWrapping.Wrap, IsReadOnly = true\n                        };\n                        var tip = new TextBlock\n                        {\n                            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], FontSize = 14,\n                            Text = MainLang.CopyUrlAndManualOpen\n                        };\n                        var codeBox = new TextBox\n                        {\n                            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                            TextWrapping = TextWrapping.Wrap, IsReadOnly = true, Text = verificationCode\n                        };\n                        var codeTip = new TextBlock\n                        {\n                            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], FontSize = 14,\n                            Text = MainLang.VerificationCode\n                        };\n                        var stackPanel = new StackPanel { Spacing = 10 };\n                        stackPanel.Children.Add(tip);\n                        stackPanel.Children.Add(urlBox);\n                        stackPanel.Children.Add(codeTip);\n                        stackPanel.Children.Add(codeBox);\n                        ContentDialog urlDialog = new()\n                        {\n                            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                            Title = MainLang.ManualOpen,\n                            PrimaryButtonText = MainLang.Ok,\n                            DefaultButton = ContentDialogButton.Primary,\n                            Content = stackPanel\n                        };\n                        urlBox.Text = verificationUrl;\n                        _ = urlDialog.ShowAsync(TopLevel.GetTopLevel(sender));\n                    };\n                    _ = microsoftDialog.ShowAsync(TopLevel.GetTopLevel(sender));\n                    try\n                    {\n                        var token = await authenticator.DeviceFlowAuthAsync(device =>\n                        {\n                            textBlock.Text = device.UserCode;\n                            verificationUrl = device.VerificationUrl;\n                            verificationCode = device.UserCode;\n                            microsoftDialog.IsPrimaryButtonEnabled = true;\n                            microsoftDialog.IsSecondaryButtonEnabled = true;\n                        });\n                        userProfile = await authenticator.AuthenticateAsync(token);\n                    }\n                    catch (Exception ex)\n                    {\n                        ShowShortException(MainLang.LoginFail, ex);\n                        return;\n                    }\n\n                    try\n                    {\n                        Notice(MainLang.VerifyingAccount);\n                        MicrosoftSkinFetcher skinFetcher = new(userProfile.Uuid.ToString());\n                        var bytes = await skinFetcher.GetSkinAsync();\n                        var now = DateTime.Now;\n                        Data.Accounts.Add(new AccountInfo\n                        {\n                            AccountType = Setting.AccountType.Microsoft,\n                            AddTime = now.ToString(\"yyyy-MM-ddTHH:mm:sszzz\"),\n                            Data = JsonConvert.SerializeObject(userProfile, Formatting.Indented),\n                            Name = userProfile.Name,\n                            Skin = Converter.BytesToBase64(bytes)\n                        });\n                        await File.WriteAllTextAsync(ConfigPath.AccountDataPath,\n                            JsonConvert.SerializeObject(Data.Accounts, Formatting.Indented));\n                        if (TopLevel.GetTopLevel(sender) is Window window)\n                        {\n                            window.Activate();\n                        }\n                        if (Data.SettingEntry.EnableIndependencyWindowNotification)\n                        {\n                            NoticeWindow(MainLang.LoginSucess, userProfile.Name);\n                        }\n                    }\n                    catch (Exception ex)\n                    {\n                        ShowShortException(MainLang.LoginFail, ex);\n                    }\n\n                    await File.WriteAllTextAsync(ConfigPath.AccountDataPath,\n                        JsonConvert.SerializeObject(Data.Accounts, Formatting.Indented));\n                    break;\n                case 2:\n                    YggdrasilLogin(sender);\n                    break;\n            }\n\n        Public.Module.Ui.Special.AggregateSearchUi.UpdateAllAggregateSearchEntries();\n    }\n\n    public static async void YggdrasilLogin(Control sender, string server1 = \"\", string email1 = \"\",\n        string password1 = \"\")\n    {\n        var stackPanel = new StackPanel { Spacing = 10, Width = 580 };\n        var verificationSeverUrlTextBox = new TextBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n            Watermark = MainLang.VerificationServer, Text = server1, HorizontalAlignment = HorizontalAlignment.Stretch,\n            Width = 500\n        };\n        var emailTextBox = new TextBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n            Watermark = MainLang.EmailAddress, Text = email1, HorizontalAlignment = HorizontalAlignment.Stretch,\n            Width = 500\n        };\n        var passwordTextBox = new TextBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n            Watermark = MainLang.AccountPassword, Text = password1, HorizontalAlignment = HorizontalAlignment.Stretch,\n            Width = 500\n        };\n        stackPanel.Children.Add(verificationSeverUrlTextBox);\n        stackPanel.Children.Add(emailTextBox);\n        stackPanel.Children.Add(passwordTextBox);\n        ContentDialog thirdPartyDialog = new()\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            Title = MainLang.ThirdPartyLogin,\n            PrimaryButtonText = MainLang.Ok,\n            CloseButtonText = MainLang.Cancel,\n            DefaultButton = ContentDialogButton.Primary,\n            Content = stackPanel\n        };\n        var thirdPartyDialogResult = await thirdPartyDialog.ShowAsync(TopLevel.GetTopLevel(sender));\n        if (thirdPartyDialogResult == ContentDialogResult.Primary)\n        {\n            var server = verificationSeverUrlTextBox.Text;\n            var email = emailTextBox.Text;\n            var password = passwordTextBox.Text;\n            var reInput = false;\n            if (string.IsNullOrWhiteSpace(server) && string.IsNullOrWhiteSpace(server))\n            {\n                Notice(MainLang.YggdrasilServerUrlIsEmpty, NotificationType.Error);\n                reInput = true;\n            }\n\n            if (string.IsNullOrWhiteSpace(email) && string.IsNullOrWhiteSpace(email))\n            {\n                Notice(MainLang.YggdrasilEmailIsEmpty, NotificationType.Error);\n                reInput = true;\n            }\n\n            if (string.IsNullOrWhiteSpace(password) && string.IsNullOrWhiteSpace(password))\n            {\n                Notice(MainLang.YggdrasilPasswordIsEmpty, NotificationType.Error);\n                reInput = true;\n            }\n\n            if (reInput)\n            {\n                YggdrasilLogin(sender, server, email, password);\n            }\n            else\n            {\n                IEnumerable<YggdrasilAccount> yggdrasilAccounts;\n                try\n                {\n                    YggdrasilAuthenticator authenticator = new(server, email, password);\n                    Notice(MainLang.VerifyingAccount);\n                    yggdrasilAccounts = await authenticator.AuthenticateAsync().ToListAsync();\n                }\n                catch (Exception ex)\n                {\n                    ShowShortException(MainLang.LoginFail, ex);\n                    return;\n                }\n\n                try\n                {\n                    foreach (var account in yggdrasilAccounts)\n                    {\n                        var now = DateTime.Now;\n                        try\n                        {\n                            YggdrasilSkinFetcher skinFetcher = new(account.YggdrasilServerUrl, account.Uuid.ToString());\n                            var bytes = await skinFetcher.GetSkinAsync();\n                            await Dispatcher.UIThread.InvokeAsync(() =>\n                            {\n                                Data.Accounts.Add(new AccountInfo\n                                {\n                                    AccountType = Setting.AccountType.ThirdParty,\n                                    AddTime = now.ToString(\"yyyy-MM-ddTHH:mm:sszzz\"),\n                                    Data = JsonConvert.SerializeObject(account, Formatting.Indented),\n                                    Name = account.Name,\n                                    Skin = Converter.BytesToBase64(bytes)\n                                });\n                            });\n                        }\n                        catch\n                        {\n                            await Dispatcher.UIThread.InvokeAsync(() =>\n                            {\n                                Data.Accounts.Add(new AccountInfo\n                                {\n                                    AccountType = Setting.AccountType.ThirdParty,\n                                    AddTime = now.ToString(\"yyyy-MM-ddTHH:mm:sszzz\"),\n                                    Data = JsonConvert.SerializeObject(account, Formatting.Indented),\n                                    Name = account.Name\n                                });\n                            });\n                        }\n                    }\n\n                    await File.WriteAllTextAsync(ConfigPath.AccountDataPath,\n                        JsonConvert.SerializeObject(Data.Accounts, Formatting.Indented));\n                    if (TopLevel.GetTopLevel(sender) is Window window)\n                    {\n                        window.Activate();\n                    }\n                }\n                catch (Exception ex)\n                {\n                    ShowShortException(MainLang.LoginFail, ex);\n                }\n            }\n        }\n    }\n\n    public static void RemoveSelected()\n    {\n        var item = Data.SettingEntry.Account;\n        if (item == null) return;\n        Data.Accounts.Remove(item);\n        if (Data.Accounts.Count == 0)\n        {\n            var account = new AccountInfo\n            {\n                Name = \"Steve\", AccountType = Setting.AccountType.Offline,\n                AddTime = DateTime.Now.ToString(\"yyyy-MM-ddTHH:mm:sszzz\"),\n                Data = JsonConvert.SerializeObject(new OfflineAuthenticator().Authenticate(\"Steve\"))\n            };\n            Data.Accounts.Add(account);\n            Data.SettingEntry.Account = account;\n        }\n        else\n        {\n            Data.SettingEntry.Account = Data.Accounts[0];\n        }\n\n        File.WriteAllText(ConfigPath.AccountDataPath,\n            JsonConvert.SerializeObject(Data.Accounts, Formatting.Indented));\n        Public.Module.Ui.Special.AggregateSearchUi.UpdateAllAggregateSearchEntries();\n    }\n\n    public static async Task RefreshSelectedMicrosoftAccountSkin()\n    {\n        if (Data.SettingEntry.Account is not { AccountType: Setting.AccountType.Microsoft }) return;\n        if (Data.SettingEntry.Account.Data != null)\n        {\n            var obj = JObject.Parse(Data.SettingEntry.Account.Data);\n            var uuid = obj[\"Uuid\"].ToString();\n            MicrosoftSkinFetcher skinFetcher = new(uuid);\n            var skin = await skinFetcher.GetSkinAsync();\n            Data.SettingEntry.Account.UpdateSkin(skin);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Op/DownloadResource.cs",
    "content": "﻿using System.IO;\nusing System.Linq;\nusing System.Threading;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Network;\nusing File = CurseForge.APIClient.Models.Files.File;\n\nnamespace YMCL.Public.Module.Op;\n\npublic class DownloadResource\n{\n    public static void SaveCurseForge(ResourceType type, File? entry)\n    {\n        if (entry is null) return;\n        switch (type)\n        {\n            case ResourceType.ModPack:\n                _ = ModPack(entry.DownloadUrl, \".zip\");\n                break;\n            case ResourceType.Mod:\n            case ResourceType.ShaderPack:\n            case ResourceType.ResourcePack:\n            case ResourceType.DataPack:\n            case ResourceType.Map:\n                _ = DownloadFile(entry.DownloadUrl, entry.FileName, type);\n                break;\n        }\n    }\n\n    public static void SaveModrinth(ResourceType type, ModrinthFile? entry)\n    {\n        if (entry is null) return;\n        switch (type)\n        {\n            case ResourceType.ModPack:\n                _ = ModPack(entry.Url, \".mrpack\");\n                break;\n            case ResourceType.Mod:\n            case ResourceType.ShaderPack:\n            case ResourceType.ResourcePack:\n            case ResourceType.DataPack:\n            case ResourceType.Map:\n                _ = DownloadFile(entry.Url, entry.FileName, type);\n                break;\n        }\n    }\n\n    public static async Task DownloadFile(string url, string fileName, ResourceType type)\n    {\n        string folderPath = null;\n        if (string.IsNullOrWhiteSpace(url))\n        {\n            Notice($\"{MainLang.DownloadUrlParserFail}\", NotificationType.Error);\n            return;\n        }\n\n        if (Data.SettingEntry.SelectedMinecraftId != \"bedrock\")\n        {\n            folderPath = type switch\n            {\n                ResourceType.Mod => Mc.Utils.GetMinecraftSpecialFolder(Mc.Utils.GetCurrentMinecraft()!,\n                    GameSpecialFolder.ModsFolder),\n                ResourceType.Map => Mc.Utils.GetMinecraftSpecialFolder(Mc.Utils.GetCurrentMinecraft()!,\n                    GameSpecialFolder.SavesFolder),\n                ResourceType.DataPack => Mc.Utils.GetMinecraftSpecialFolder(Mc.Utils.GetCurrentMinecraft()!,\n                    GameSpecialFolder.SavesFolder),\n                ResourceType.ShaderPack => Mc.Utils.GetMinecraftSpecialFolder(Mc.Utils.GetCurrentMinecraft()!,\n                    GameSpecialFolder.ShaderPacksFolder),\n                ResourceType.ResourcePack => Mc.Utils.GetMinecraftSpecialFolder(Mc.Utils.GetCurrentMinecraft()!,\n                    GameSpecialFolder.ResourcePacksFolder),\n                _ => null\n            };\n        }\n\n        var suggest = !string.IsNullOrWhiteSpace(folderPath)\n            ? await TopLevel.GetTopLevel(YMCL.App.UiRoot).StorageProvider.TryGetFolderFromPathAsync\n                (new Uri(folderPath))\n            : null;\n        var path = (await TopLevel.GetTopLevel(YMCL.App.UiRoot).StorageProvider.SaveFilePickerAsync(\n            new FilePickerSaveOptions\n            {\n                Title = MainLang.Download,\n                SuggestedFileName = fileName,\n                SuggestedStartLocation = suggest,\n            }))?.Path.LocalPath;\n        if (string.IsNullOrWhiteSpace(path)) return;\n        var name = Path.GetFileName(path);\n        var task = new TaskEntry($\"{MainLang.Download} - {name}\",\n            [new SubTask($\"{MainLang.Download} - {name}\") { State = TaskState.Running }]);\n        var cts = new CancellationTokenSource();\n        var cancellationToken = cts.Token;\n        task.UpdateAction(() =>\n        {\n            cts.Cancel();\n            task.CancelWaitFinish();\n        });\n        Notice($\"{MainLang.BeginDownload}: {name}\");\n        if (!await DownloadFileWithProgress.Download(url, path, task,\n                cancellationToken))\n        {\n            Notice($\"{MainLang.DownloadFail}: {name}\");\n            task.FinishWithError();\n            await cts.CancelAsync();\n            return;\n        }\n\n        if (cancellationToken.IsCancellationRequested)\n        {\n            Notice($\"{MainLang.Canceled}: {name}\");\n            task.Cancel();\n            return;\n        }\n\n        task.Destroy();\n        Notice($\"{MainLang.DownloadFinish}: {name}\", NotificationType.Success);\n    }\n\n    public static async Task ModPack(string url, string extension)\n    {\n        var cr = await ShowDialogAsync(MainLang.Install, $\"{MainLang.InstallModPack}: {url}\", b_cancel: MainLang.Cancel,\n            b_primary: MainLang.Ok);\n        if (cr != ContentDialogResult.Primary) return;\n        YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavTask;\n        var task = new TaskEntry($\"{MainLang.Install}: {MainLang.ModPack}\", state: TaskState.Running);\n        var cts = new CancellationTokenSource();\n        var cancellationToken = cts.Token;\n        task.UpdateAction(() =>\n        {\n            cts.Cancel();\n            task.CancelWaitFinish();\n        });\n        var subTask = new SubTask($\"{MainLang.Download}: {url}\") { State = TaskState.Running };\n        task.AddSubTask(subTask);\n        var path = Path.Combine(ConfigPath.TempFolderPath, $\"{DateTime.Now:yyyy-MM-dd-hh-mm-ss}{extension}\");\n        subTask.State = TaskState.Running;\n        if (!await DownloadFileWithProgress.Download(url, path, task,\n                cancellationToken))\n        {\n            task.FinishWithError();\n            return;\n        }\n\n        if (cancellationToken.IsCancellationRequested)\n        {\n            task.Cancel();\n            return;\n        }\n\n        subTask.Finish();\n        if (extension == \".zip\")\n        {\n            _ = Mc.Importer.zip.ModPack.Import(path, task);\n        }\n        else if (extension == \".mrpack\")\n        {\n            _ = Mc.Importer.mrpack.ModPack.Import(path, task);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Op/JavaRuntime.cs",
    "content": "﻿using System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Platform.Storage;\nusing MinecraftLaunch.Utilities;\nusing Newtonsoft.Json;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui.Special;\n\nnamespace YMCL.Public.Module.Op;\n\npublic class JavaRuntime\n{\n    public static async void AddByAutoScan()\n    {\n        try\n        {\n            var repeatJavaCount = 0;\n            var successAddCount = 0;\n            var javaList = await JavaUtil.EnumerableJavaAsync().ToListAsync();\n            var convertedJavaList = javaList.Select(JavaEntry.MlToYmcl).ToList();\n\n            convertedJavaList.ForEach(java =>\n            {\n                if (!Data.JavaRuntimes.Contains(java))\n                {\n                    Data.JavaRuntimes.Add(java);\n                    successAddCount++;\n                }\n                else\n                {\n                    repeatJavaCount++;\n                }\n            });\n\n            Notice($\"{MainLang.ScanJavaSuccess}\\n{MainLang.SuccessAdd}: {successAddCount}\\n{MainLang.RepeatItem}: {repeatJavaCount}\",\n                NotificationType.Success);\n            await File.WriteAllTextAsync(ConfigPath.JavaDataPath,\n                JsonConvert.SerializeObject(Data.JavaRuntimes, Formatting.Indented));\n            AggregateSearchUi.UpdateAllAggregateSearchEntries();\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            Notice(MainLang.OperateFailed , NotificationType.Error);\n        }\n    }\n\n    public static async Task AddByUi(Control sender)\n    {\n        var list = await TopLevel.GetTopLevel(sender).StorageProvider.OpenFilePickerAsync(\n            new FilePickerOpenOptions { AllowMultiple = true, Title = MainLang.SelectJava });\n        if (list.Count == 0 || string.IsNullOrWhiteSpace(list[0].Path.LocalPath)) return;\n        MinecraftLaunch.Base.Models.Game.JavaEntry javaInfo = null;\n        try\n        {\n            if (Data.DesktopType is DesktopRunnerType.Linux or DesktopRunnerType.MacOs)\n            {\n                // 给Java赋予执行权限 (Linux和MacOs) 通过命令行 chmod +777\n                await Task.Run(() =>\n                {\n                    var process = new Process();\n                    process.StartInfo.FileName = \"chmod\";\n                    process.StartInfo.Arguments = \"+777 \" + list[0].Path.LocalPath;\n                    process.StartInfo.UseShellExecute = false;\n                    process.StartInfo.CreateNoWindow = true;\n                    process.Start();\n                    process.WaitForExit();\n                });\n            }\n            javaInfo = await JavaUtil.GetJavaInfoAsync(list[0].Path.LocalPath);\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            Notice(MainLang.GetJavaInfoFail, NotificationType.Error);\n        }\n        if (javaInfo == null)\n        {\n            Notice(MainLang.GetJavaInfoFail, NotificationType.Error);\n        }\n        else\n        {\n            if (Data.JavaRuntimes.Contains(JavaEntry.MlToYmcl(javaInfo!)))\n                Notice(MainLang.TheItemAlreadyExist, NotificationType.Error);\n            else\n                Data.JavaRuntimes.Add(JavaEntry.MlToYmcl(javaInfo!));\n        }\n\n        await File.WriteAllTextAsync(ConfigPath.JavaDataPath,\n            JsonConvert.SerializeObject(Data.JavaRuntimes, Formatting.Indented));\n        Public.Module.Ui.Special.AggregateSearchUi.UpdateAllAggregateSearchEntries();\n    }\n\n    public static void RemoveSelected()\n    {\n        if (Data.SettingEntry.Java == null || Data.SettingEntry.Java.JavaVersion == \"Auto\") return;\n        Data.JavaRuntimes.Remove(Data.SettingEntry.Java);\n        Data.SettingEntry.Java = new JavaEntry { JavaPath = MainLang.LetYMCLChooseJava, JavaVersion = \"Auto\" };\n        File.WriteAllText(ConfigPath.JavaDataPath,\n            JsonConvert.SerializeObject(Data.JavaRuntimes, Formatting.Indented));\n        Public.Module.Ui.Special.AggregateSearchUi.UpdateAllAggregateSearchEntries();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Op/MinecraftFolder.cs",
    "content": "﻿using System.IO;\nusing Avalonia.Media;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing Newtonsoft.Json;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Op;\n\npublic class MinecraftFolder\n{\n    public static async Task AddByUi(Control sender)\n    {\n        var list = await TopLevel.GetTopLevel(sender).StorageProvider.OpenFolderPickerAsync(\n            new FolderPickerOpenOptions { Title = MainLang.SelectMinecraftFolder, AllowMultiple = true });\n        if (list.Count < 1) return;\n        foreach (var storageFolder in list)\n        {\n            var path = storageFolder.Path.LocalPath;\n            path = path.Trim().TrimEnd(Path.DirectorySeparatorChar);\n            var folder = Path.GetFileName(path);\n            var parentDirectoryPath = Path.GetDirectoryName(path);\n            var name = string.Empty;\n            if (parentDirectoryPath != null)\n            {\n                name = Path.GetFileName(parentDirectoryPath);\n            }\n\n            if (folder != \".minecraft\")\n            {\n                if (Directory.Exists(Path.Combine(path, \".minecraft\")))\n                {\n                    path = Path.Combine(path, \".minecraft\");\n                    name = folder;\n                }\n            }\n\n            var textbox = new TextBox\n            {\n                Watermark = MainLang.DisplayName,\n                TextWrapping = TextWrapping.Wrap,\n                MaxLength = 60, Text = name\n            };\n            var textbox1 = new TextBox\n            {\n                Text = path,\n                TextWrapping = TextWrapping.Wrap\n            };\n            var dialog = new ContentDialog\n            {\n                Title = MainLang.AddFolder,\n                Content = new StackPanel\n                {\n                    Spacing = 10,\n                    Children =\n                    {\n                        textbox,\n                        textbox1\n                    }\n                },\n                PrimaryButtonText = MainLang.Ok,\n                CloseButtonText = MainLang.Cancel,\n                IsPrimaryButtonEnabled = false\n            };\n            dialog.IsPrimaryButtonEnabled = !string.IsNullOrWhiteSpace(textbox.Text);\n            textbox.TextChanged += (_, _) =>\n            {\n                dialog.IsPrimaryButtonEnabled = !string.IsNullOrWhiteSpace(textbox.Text);\n            };\n            var result = await dialog.ShowAsync();\n            if (result != ContentDialogResult.Primary) return;\n            var entry = new Classes.Data.MinecraftFolder\n                { Name = textbox.Text, Path = textbox1.Text };\n            Data.MinecraftFolders.Add(entry);\n            Data.SettingEntry.MinecraftFolder = entry;\n        }\n\n        await File.WriteAllTextAsync(ConfigPath.MinecraftFolderDataPath,\n            JsonConvert.SerializeObject(Data.MinecraftFolders, Formatting.Indented));\n        Public.Module.Ui.Special.AggregateSearchUi.UpdateAllAggregateSearchEntries();\n    }\n\n    public static void RemoveSelected()\n    {\n        var item = Data.SettingEntry.MinecraftFolder;\n        if (item == null) return;\n        Data.MinecraftFolders.Remove(item);\n        if (Data.MinecraftFolders.Count == 0)\n        {\n            var path = Path.Combine(ConfigPath.UserDataRootPath, \".minecraft\");\n            IO.Disk.Setter.TryCreateFolder(path);\n            var folder = new Classes.Data.MinecraftFolder { Name = \"Minecraft Folder\", Path = path };\n            Data.MinecraftFolders.Add(folder);\n            Data.SettingEntry.MinecraftFolder = folder;\n        }\n        else\n        {\n            Data.SettingEntry.MinecraftFolder = Data.MinecraftFolders[0];\n        }\n\n        File.WriteAllText(ConfigPath.MinecraftFolderDataPath,\n            JsonConvert.SerializeObject(Data.MinecraftFolders, Formatting.Indented));\n        Public.Module.Ui.Special.AggregateSearchUi.UpdateAllAggregateSearchEntries();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Player.cs",
    "content": "using System.IO;\nusing System.Net.Http;\nusing System.Timers;\nusing NAudio.Wave;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Setting;\n\nnamespace YMCL.Public.Module;\n\npublic class AudioPlayer : IDisposable\n{\n    private static AudioPlayer? _instance;\n    private static readonly object _lock = new object();\n    private IWavePlayer? _waveOut;\n    private AudioFileReader? _waveSource;\n    private Mp3FileReader? _waveStream;\n    private Timer? _timer;\n\n    public event EventHandler<ProgressEventArgs>? ProgressChanged;\n    public event EventHandler<StoppedEventArgs>? PlaybackCompleted;\n\n    private AudioPlayer()\n    {\n        Data.SettingEntry.PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName != nameof(SettingEntry.Volume)) return;\n            if (_waveOut == null) return;\n            try\n            {\n                _waveOut.Volume = Convert.ToSingle(Data.SettingEntry.Volume / 100);\n            }\n            catch (Exception exception)\n            {\n                Console.WriteLine(exception);\n            }\n        };\n    }\n\n    public static AudioPlayer Instance\n    {\n        get\n        {\n            if (_instance == null)\n            {\n                lock (_lock)\n                {\n                    if (_instance == null)\n                    {\n                        _instance = new AudioPlayer();\n                    }\n                }\n            }\n\n            return _instance;\n        }\n    }\n\n    public double PlayLocal(string localFilePath)\n    {\n        Stop();\n        _waveSource = new AudioFileReader(localFilePath);\n        InitializeAndPlay(_waveSource);\n        return _waveSource.TotalTime.TotalMilliseconds;\n    }\n\n    public async Task PlayNetwork(string networkUrl)\n    {\n        Stop();\n        using var client = new HttpClient();\n        var response = await client.GetAsync(networkUrl, HttpCompletionOption.ResponseHeadersRead);\n        response.EnsureSuccessStatusCode();\n        var stream = await response.Content.ReadAsStreamAsync();\n        var memoryStream = new MemoryStream();\n        stream.CopyTo(memoryStream);\n        memoryStream.Position = 0;\n        _waveStream = new Mp3FileReader(memoryStream);\n        InitializeAndPlay(_waveStream);\n    }\n\n    private void InitializeAndPlay(WaveStream? waveStream)\n    {\n        if (waveStream == null) return;\n        _waveOut = new WaveOutEvent();\n        _waveOut?.Init(waveStream);\n        _waveOut?.Play();\n        _waveOut.Volume = Convert.ToSingle(Data.SettingEntry.Volume / 100);\n        _timer = new Timer(10); \n        _timer.Elapsed += OnTimedEvent;\n        _timer.Start();\n\n        _waveOut.PlaybackStopped += (s, e) => { PlaybackCompleted?.Invoke(s, e); };\n    }\n\n    private void OnTimedEvent(object? sender, ElapsedEventArgs e)\n    {\n        if (_waveSource != null)\n        {\n            var progress = _waveSource.CurrentTime.TotalMilliseconds;\n            var totalDuration = _waveSource.TotalTime.TotalMilliseconds;\n            ProgressChanged?.Invoke(this, new ProgressEventArgs(progress, totalDuration));\n        }\n        else if (_waveStream != null)\n        {\n            var progress = _waveStream.CurrentTime.TotalMilliseconds;\n            var totalDuration = _waveStream.TotalTime.TotalMilliseconds;\n            ProgressChanged?.Invoke(this, new ProgressEventArgs(progress, totalDuration));\n        }\n    }\n\n    public void Pause()\n    {\n        _waveOut?.Pause();\n    }\n\n    public void Resume()\n    {\n        if (_waveOut == null) return;\n        try\n        {\n            _waveOut.Play();\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n        }\n    }\n\n    public void Stop()\n    {\n        _waveOut?.Stop();\n        _waveSource?.Dispose();\n        _waveStream?.Dispose();\n        _waveSource = null;\n        _waveStream = null;\n        _timer?.Stop();\n        _timer?.Dispose();\n        _timer = null;\n    }\n\n    public void Dispose()\n    {\n        _waveOut?.Dispose();\n        _waveSource?.Dispose();\n        _waveStream?.Dispose();\n        _timer?.Dispose();\n    }\n\n    public void UpdateProgress(double value)\n    {\n        if (_waveSource != null)\n            _waveSource.CurrentTime = TimeSpan.FromMilliseconds(value);\n        if (_waveStream != null)\n            _waveStream.CurrentTime = TimeSpan.FromMilliseconds(value);\n    }\n}\n\npublic class ProgressEventArgs : EventArgs\n{\n    public double CurrentTime { get; }\n    public double TotalDuration { get; }\n\n    public ProgressEventArgs(double currentTime, double totalDuration)\n    {\n        CurrentTime = currentTime;\n        TotalDuration = totalDuration;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Animator.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Avalonia.Animation;\nusing Avalonia.Animation.Easings;\nusing Avalonia.Layout;\n\nnamespace YMCL.Public.Module.Ui;\n\npublic class Animator\n{\n    public class PageLoading\n    {\n        public static async Task LevelOnePage(UserControl? control)\n        {\n            if (control != null)\n            {\n                control.IsVisible = false;\n                control.Transitions = [];\n                control.Margin = new Thickness(-50, 0, 50, 0);\n                control.Opacity = 0;\n                control.Transitions.Add(new ThicknessTransition\n                {\n                    Duration = TimeSpan.FromSeconds(0.35),\n                    Easing = new SineEaseInOut(),\n                    Property = Layoutable.MarginProperty\n                });\n                control.Transitions.Add(new DoubleTransition\n                {\n                    Duration = TimeSpan.FromSeconds(0.35),\n                    Easing = new SineEaseInOut(),\n                    Property = Visual.OpacityProperty\n                });\n                control.IsVisible = true;\n                control.Margin = new Thickness(0);\n                control.Opacity = 1;\n                await Task.Delay(TimeSpan.FromSeconds(0.35));\n            }\n        }\n        \n        public static async Task LevelTwoPage(Control? control)\n        {\n            if (control != null)\n            {\n                control.IsVisible = false;\n                control.Transitions = [];\n                control.Margin = new Thickness(0, 50, 0, -50);\n                control.Opacity = 0;\n                control.Transitions.Add(new ThicknessTransition\n                {\n                    Duration = TimeSpan.FromSeconds(0.35),\n                    Easing = new SineEaseInOut(),\n                    Property = Layoutable.MarginProperty\n                });\n                control.Transitions.Add(new DoubleTransition\n                {\n                    Duration = TimeSpan.FromSeconds(0.35),\n                    Easing = new SineEaseInOut(),\n                    Property = Visual.OpacityProperty\n                });\n                control.IsVisible = true;\n                control.Margin = new Thickness(0);\n                control.Opacity = 1;\n                await Task.Delay(TimeSpan.FromSeconds(0.35));\n            }\n        }\n        \n        public static async Task ReversalLevelTwoPage(Control? control)\n        {\n            if (control != null)\n            {\n                control.IsVisible = false;\n                control.Transitions = [];\n                control.Margin = new Thickness(0);\n                control.Opacity = (double)Application.Current.Resources[\"MainOpacity\"]!;\n                control.Transitions.Add(new ThicknessTransition\n                {\n                    Duration = TimeSpan.FromSeconds(0.45),\n                    Easing = new SineEaseInOut(),\n                    Property = Layoutable.MarginProperty\n                });\n                control.Transitions.Add(new DoubleTransition\n                {\n                    Duration = TimeSpan.FromSeconds(0.45),\n                    Easing = new SineEaseInOut(),\n                    Property = Visual.OpacityProperty\n                });\n                control.IsVisible = true;\n                control.Margin = new Thickness(0, 50, 0, -50);\n                control.Opacity = 0;\n                await Task.Delay(TimeSpan.FromSeconds(0.45));\n            }\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/AccountTypeIsMicrosoftConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Setting;\nusing Setting = YMCL.Public.Enum.Setting;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class AccountTypeIsMicrosoftConverter: IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is AccountInfo accountInfo)\n        {\n            return accountInfo.AccountType == Setting.AccountType.Microsoft;\n        }\n\n        return false;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return false;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/BoolReversalConverter.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class BoolReversalConverter : IMultiValueConverter\n{\n    public object? Convert(IList<object?> values, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (values.FirstOrDefault() is bool b)\n        {\n            return !b;\n        }\n\n        return false;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/BoolToDoubleConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class BoolToDoubleConverter : IValueConverter\n{\n    public static BoolToDoubleConverter Instance { get; } = new();\n        \n    public double TrueValue { get; set; } = 1.0;\n    public double FalseValue { get; set; } = 0.0;\n\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is bool boolValue)\n        {\n            return boolValue ? TrueValue : FalseValue;\n        }\n        return FalseValue;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is double doubleValue)\n        {\n            return Math.Abs(doubleValue - TrueValue) < 0.1;\n        }\n        return false;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/BoolToIntConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class BoolToIntConverter : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is bool boolValue)\n        {\n            return boolValue ? 1 : 0;\n        }\n\n        return false;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is int intValue)\n        {\n            return intValue == 1;\n        }\n        return false;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/BoolToStringConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class BoolToStringConverter: IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is bool b)\n        {\n            return b ? parameter : string.Empty;\n        }\n        return string.Empty;\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/CountToUnitConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\nusing YMCL.Public.Module.Util.Extension;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class CountToUnitConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return System.Convert.ToDouble(value).ToUnit();\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/DateTimeToStringConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class DateTimeToStringConverter : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is DateTime dateTime)\n        {\n            return dateTime.ToString(\"yyyy-MM-ddTHH:mm:sszzz\", culture);\n        }\n        return string.Empty;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/DoubleToIntByRoundConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class DoubleToIntByRoundConverter: IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is double d)\n        {\n            return System.Convert.ToInt32(Math.Round(d));\n        }\n\n        return 0;\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is int i)\n        {\n            return System.Convert.ToDouble(i);\n        }\n\n        return 0;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/DoubleToPercentageConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class DoubleToPercentageConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        var d = System.Convert.ToDouble(value);\n        return System.Convert.ToInt32(Math.Round(d * 100)) + \"%\";\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return 0;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/EnumIndexToBoolConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class EnumIndexToBoolConverter : IValueConverter\n{\n    public object? Convert(object value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        var index = (int)value;\n        return index == System.Convert.ToInt32(parameter);\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/GameSettingMaxMemConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class GameSettingMaxMemConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is not double maxMem) return null;\n        if (maxMem < 0)\n        {\n            return MainLang.UseGlobalSetting;\n        }\n        return Math.Round(maxMem);\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/ListCountToBoolConverter.cs",
    "content": "﻿using System.Collections;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Globalization;\nusing Avalonia.Data.Converters;\nusing FluentAvalonia.Core;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class ListCountToBoolConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is IEnumerable list)\n        {\n            var b = list.Count() > 0;\n            return b;\n        }\n\n        if (value is ObservableCollection<object> collection)\n        {\n            return collection.Count > 0;\n        }\n\n        return false;\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/ListDistinctConverter.cs",
    "content": "﻿using System.Collections;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class ListDistinctConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        var list = value as IEnumerable<object>;\n        return list?.Distinct().ToList();\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        var list = value as IEnumerable<object>;\n        return list?.Distinct().ToList();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/LogTypeToColorConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\nusing Avalonia.Media;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class LogTypeToColorConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is not LogType logType)\n            return new SolidColorBrush(Colors.Gray);\n\n        return logType switch\n        {\n            LogType.Error => new SolidColorBrush(Color.Parse(\"#B71C1C\")),\n            LogType.Info => new SolidColorBrush(Color.Parse(\"#00695C\")),\n            LogType.Debug => new SolidColorBrush(Color.Parse(\"#455A64\")),\n            LogType.Fatal => new SolidColorBrush(Color.Parse(\"#BF360C\")),\n            LogType.Warning => new SolidColorBrush(Color.Parse(\"#FF6F00\")),\n            LogType.Exception => new SolidColorBrush(Color.Parse(\"#F26689\")),\n            LogType.StackTrace => new SolidColorBrush(Color.Parse(\"#795548\")),\n            LogType.Unknown => new SolidColorBrush(Color.Parse(\"#616161\")),\n            _ => new SolidColorBrush(Colors.Gray)\n        };\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/MaxThreadOverSafeConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class MaxThreadOverSafeConverter: IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is int intValue)\n        {\n            return intValue > 128;\n        }\n        return false;\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        return false;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/MsToTimeConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class MsToTimeConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is double ms)\n        {\n            return Value.Converter.MsToTime(ms);\n        }\n        return string.Empty;\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/NoTaskIsVisibleConverter.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.Globalization;\nusing Avalonia.Data.Converters;\nusing YMCL.Public.Controls;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class NoTaskIsVisibleConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is ObservableCollection<TaskEntry> tasks)\n        {\n            return tasks.Count <= 0;\n        }\n        return false;\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/ReversalBoolConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class ReversalBoolConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return !(bool)value!;\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return !(bool)value!;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/SelectedGameIsNotBedrock.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class SelectedGameIsNotBedrock: IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is not MinecraftDataEntry entry) return false;\n        return entry != null && entry.Type != \"bedrock\";\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/SpecialControlEnableListConverter.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing Avalonia.Data.Converters;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class SpecialControlEnableListConverter : IValueConverter\n{\n    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is string str && !string.IsNullOrEmpty(str))\n        {\n            return str.Split(',').Select(x => x.Trim()).Distinct().ToList();\n        }\n        return new List<string>();\n    }\n\n    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n    {\n        if (value is IEnumerable<object> items)\n        {\n            var validItems = items.OfType<string>().Where(x => !string.IsNullOrWhiteSpace(x));\n            return string.Join(\",\", validItems.Distinct());\n        }\n        return string.Empty;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/TaskStateToColorConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\nusing Avalonia.Media;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class TaskStateToColorConverter: IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is TaskState state)\n        {\n            return state switch\n            {\n                TaskState.Paused => new SolidColorBrush(Color.Parse(\"#fce100\")),\n                TaskState.Canceled => new SolidColorBrush(Color.Parse(\"#fce100\")),\n                TaskState.Canceling => new SolidColorBrush(Color.Parse(\"#fce100\")),\n                TaskState.Error => new SolidColorBrush(Color.Parse(\"#ff99a4\")),\n                TaskState.Finished => new SolidColorBrush(Color.Parse(\"#00fc40\")),\n                _ => new SolidColorBrush((Color)Application.Current.Resources[\"SystemAccentColor\"]!),\n            };\n        }\n        return new SolidColorBrush((Color)Application.Current.Resources[\"SystemAccentColor\"]!);\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Converter/TaskStateToTipConverter.cs",
    "content": "﻿using System.Globalization;\nusing Avalonia.Data.Converters;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Ui.Converter;\n\npublic class TaskStateToTipConverter : IValueConverter\n{\n    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        if (value is TaskState state)\n        {\n            return state switch\n            {\n                TaskState.Waiting => MainLang.Waiting,\n                TaskState.Running => MainLang.Running,\n                TaskState.Paused => MainLang.Paused,\n                TaskState.Error => MainLang.Error,\n                TaskState.Canceled => MainLang.Canceled,\n                TaskState.Canceling => MainLang.Canceling,\n                TaskState.Finished => MainLang.Finished,\n                _ => state.ToString()\n            };\n        }\n        return string.Empty;\n    }\n\n    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)\n    {\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Getter.cs",
    "content": "﻿using System.Collections.Generic;\nusing Avalonia.VisualTree;\n\nnamespace YMCL.Public.Module.Ui;\n\npublic class Getter\n{\n    public static Control? FindControlByName(Visual parent, string name)\n    {\n        var visuals = new Queue<Visual>();\n        visuals.Enqueue(parent);\n\n        while (visuals.Count > 0)\n        {\n            var current = visuals.Dequeue();\n\n            if (current is not Control control) continue;\n            foreach (var child in control.GetVisualChildren())\n            {\n                visuals.Enqueue(child);\n            }\n\n            if (control.Name == name)\n            {\n                return control;\n            }\n        }\n\n        return null;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Setter.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Markup.Xaml.MarkupExtensions;\nusing Avalonia.Markup.Xaml.Styling;\nusing Avalonia.Media;\nusing Avalonia.Platform;\nusing Avalonia.Styling;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing Newtonsoft.Json;\nusing Ursa.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Value;\nusing YMCL.Views.Main;\nusing NotificationCard = Ursa.Controls.NotificationCard;\n\nnamespace YMCL.Public.Module.Ui;\n\npublic class Setter\n{\n    public static void SetAccentColor(Color color)\n    {\n        try\n        {\n            Application.Current.Resources[\"SystemAccentColor\"] = color;\n            Application.Current.Resources[\"ButtonDefaultPrimaryForeground\"] = color;\n            Application.Current.Resources[\"TextBoxFocusBorderBrush\"] = color;\n            Application.Current.Resources[\"ComboBoxSelectorPressedBorderBrush\"] = color;\n            Application.Current.Resources[\"ComboBoxSelectorFocusBorderBrush\"] = color;\n            Application.Current.Resources[\"TextBoxSelectionBackground\"] = color;\n            Application.Current.Resources[\"ProgressBarPrimaryForeground\"] = color;\n            Application.Current.Resources[\"ProgressBarIndicatorBrush\"] = color;\n            Application.Current.Resources[\"SliderThumbBorderBrush\"] = color;\n            Application.Current.Resources[\"SliderTrackForeground\"] = color;\n            Application.Current.Resources[\"HyperlinkButtonOverForeground\"] = color;\n            Application.Current.Resources[\"SliderThumbPressedBorderBrush\"] = color;\n            Application.Current.Resources[\"SliderThumbPointeroverBorderBrush\"] = color;\n            Application.Current.Resources[\"SystemAccentColorLight1\"] = Calculator.ColorVariant(color, 0.15f);\n            Application.Current.Resources[\"SystemAccentColorLight2\"] = Calculator.ColorVariant(color, 0.30f);\n            Application.Current.Resources[\"SystemAccentColorLight3\"] = Calculator.ColorVariant(color, 0.45f);\n            Application.Current.Resources[\"SystemAccentColorDark1\"] = Calculator.ColorVariant(color, -0.15f);\n            Application.Current.Resources[\"SystemAccentColorDark2\"] = Calculator.ColorVariant(color, -0.30f);\n            Application.Current.Resources[\"SystemAccentColorDark3\"] = Calculator.ColorVariant(color, -0.45f);\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n        }\n    }\n\n    public static void UpdateWindowStyle(UrsaWindow window, Action? action = null)\n    {\n        if (window == null) return;\n        if (Data.DesktopType == DesktopRunnerType.Linux ||\n            Data.DesktopType == DesktopRunnerType.FreeBSD ||\n            (Data.DesktopType == DesktopRunnerType.Windows &&\n             Environment.OSVersion.Version.Major < 10))\n        {\n            window.IsManagedResizerVisible = true;\n            window.SystemDecorations = SystemDecorations.None;\n        }\n\n        window.FindControl<Controls.TitleBar>(\"TitleBar\").IsVisible = true;\n        window.FindControl<Border>(\"Root\").CornerRadius = new CornerRadius(8);\n        // window.WindowState = WindowState.Maximized;\n        // window.WindowState = WindowState.Normal;\n        window.ExtendClientAreaChromeHints = ExtendClientAreaChromeHints.NoChrome;\n        window.ExtendClientAreaToDecorationsHint = true;\n        action?.Invoke();\n    }\n\n    public static void ToggleTheme(Setting.Theme theme)\n    {\n        if (theme == Setting.Theme.Light)\n        {\n            Application.Current.RequestedThemeVariant = ThemeVariant.Light;\n        }\n        else if (theme == Setting.Theme.Dark)\n        {\n            Application.Current.RequestedThemeVariant = ThemeVariant.Dark;\n        }\n        else if (theme == Setting.Theme.System)\n        {\n            Application.Current.RequestedThemeVariant = ThemeVariant.Default;\n        }\n    }\n\n    public static void SetBackGround()\n    {\n        if (Data.SettingEntry is null) return;\n        Application.Current.Resources[\"MainOpacity\"] =\n            Data.SettingEntry.CustomBackGround == Setting.CustomBackGroundWay.Default\n                ? 1.0\n                : Data.SettingEntry.TranslucentBackgroundOpacity;\n        if (YMCL.App.UiRoot == null) return;\n        var topLevel = TopLevel.GetTopLevel(YMCL.App.UiRoot);\n        Application.Current.TryGetResource(\"WindowBg\", Application.Current.ActualThemeVariant,\n            out var bg);\n        Application.Current.TryGetResource(\"1x\", Application.Current.ActualThemeVariant,\n            out var c1);\n\n        var setting = Const.Data.SettingEntry;\n\n        if (topLevel is not MainWindow window) return;\n\n        window.BackGroundBorder.Background =\n            Data.SettingEntry.CustomBackGround == Setting.CustomBackGroundWay.Default\n                ? (SolidColorBrush)bg : null;\n\n        window.BackGroundImg.Source = null;\n\n        window.TransparencyLevelHint = [WindowTransparencyLevel.Mica];\n        window.Root.Background = (SolidColorBrush)c1;\n        try\n        {\n            (Ui.Getter.FindControlByName(window, \"PART_PaneRoot\") as Panel).Opacity =\n                (double)Application.Current.Resources[\"MainOpacity\"]!;\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n        }\n\n        if (setting.CustomBackGround == Setting.CustomBackGroundWay.Default)\n        {\n            window.TransparencyLevelHint = [WindowTransparencyLevel.None];\n            YMCL.App.UiRoot.Nav.Background = (SolidColorBrush)c1;\n        }\n        else\n        {\n            YMCL.App.UiRoot.Nav.Background = Brushes.Transparent;\n        }\n\n        if (setting.CustomBackGround == Setting.CustomBackGroundWay.Image &&\n            !string.IsNullOrWhiteSpace(setting.WindowBackGroundImgData))\n        {\n            try\n            {\n                var bitmap = Value.Converter.Base64ToBitmap(setting.WindowBackGroundImgData);\n                window.BackGroundImg.Source = bitmap;\n            }\n            catch\n            {\n                Const.Data.SettingEntry.WindowBackGroundImgData = null;\n                Notice(MainLang.LoadBackGroudFromPicFailTip, type: NotificationType.Error);\n                window.BackGroundImg.Source = null;\n            }\n\n            return;\n        }\n\n        window.Background = Brushes.Transparent;\n        window.Root.Background = Brushes.Transparent;\n        (Ui.Getter.FindControlByName(window, \"PART_PaneRoot\") as Panel).Opacity =\n            (double)Application.Current.Resources[\"MainOpacity\"]!;\n\n        if (setting.CustomBackGround == Setting.CustomBackGroundWay.AcrylicBlur)\n        {\n            window.TransparencyLevelHint = [WindowTransparencyLevel.AcrylicBlur];\n        }\n\n        if (setting.CustomBackGround == Setting.CustomBackGroundWay.Transparent)\n        {\n            window.TransparencyLevelHint = [WindowTransparencyLevel.Transparent];\n        }\n\n        if (setting.CustomBackGround == Setting.CustomBackGroundWay.Mica)\n        {\n            window.TransparencyLevelHint = [WindowTransparencyLevel.Mica];\n        }\n    }\n\n    public static void AppStrangeEffect()\n    {\n        List<Action> methods =\n        [\n            //NeverGiveUp\n            () =>\n            {\n                var launcher = TopLevel.GetTopLevel(YMCL.App.UiRoot).Launcher;\n                launcher.LaunchUriAsync(new Uri(\"https://www.bilibili.com/video/BV1GJ411x7h7/\"));\n            },\n            //Transform180deg\n            () =>\n            {\n                if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is not MainWindow window) return;\n                var rotateTransform = new RotateTransform(180);\n                window.Root.RenderTransform = rotateTransform;\n            },\n            //WindowMove\n            () =>\n            {\n                if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is not MainWindow window) return;\n                double velocityX = 20; // 水平速度\n                double velocityY = 20; // 垂直速度\n\n                // 使用DispatcherTimer来周期性地更新窗口位置\n                var timer = new DispatcherTimer\n                {\n                    Interval = TimeSpan.FromMilliseconds(10) // 设置定时器的时间间隔\n                };\n                Screen? first = window.Screens.All.FirstOrDefault();\n\n                var _screenBounds = first?.WorkingArea ??\n                                    new PixelRect(0, 0, 800, 600);\n                timer.Tick += Timer_Tick!;\n                timer.Start();\n                return;\n\n                void Timer_Tick(object sender, EventArgs e)\n                {\n                    if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is not MainWindow mainWindow) return;\n                    var newPosition = new PixelPoint((int)(mainWindow.Position.X + velocityX),\n                        (int)(mainWindow.Position.Y + velocityY));\n\n                    // 检查窗口是否即将超出屏幕边界\n                    if (newPosition.X < _screenBounds.X || newPosition.X + mainWindow.Width >\n                        _screenBounds.X + _screenBounds.Width)\n                    {\n                        velocityX = -velocityX; // 改变水平方向\n                    }\n\n                    if (newPosition.Y < _screenBounds.Y || newPosition.Y + mainWindow.Height >\n                        _screenBounds.Y + _screenBounds.Height)\n                    {\n                        velocityY = -velocityY; // 改变垂直方向\n                    }\n\n                    // 设置新位置\n                    mainWindow.Position = newPosition;\n                }\n            },\n            //KeepSpinning\n            async () =>\n            {\n                var deg = 0;\n                if (TopLevel.GetTopLevel(YMCL.App.UiRoot) is not MainWindow window) return;\n                while (true)\n                {\n                    Dispatcher.UIThread.Invoke(() =>\n                    {\n                        if (deg > 360)\n                        {\n                            deg = 0;\n                        }\n\n                        var rotateTransform = new RotateTransform(deg);\n                        window.RenderTransform = rotateTransform;\n                        deg += 2;\n                    });\n                    await Task.Delay(10);\n                }\n            },\n        ];\n\n        Random random = new Random();\n        //methods[^1]();\n        methods[random.Next(methods.Count)]();\n    }\n\n    public static class DynamicStyle\n    {\n        private static readonly StyleInclude NotificationBubbleStyle =\n            new(new Uri(\"avares://YMCL/Public/Styles/Dynamic/NotificationBubble.axaml\"))\n                { Source = new Uri(\"avares://YMCL/Public/Styles/Dynamic/NotificationBubble.axaml\") };\n\n        private static readonly StyleInclude NotificationCardStyle =\n            new(new Uri(\"avares://YMCL/Public/Styles/Dynamic/NotificationCard.axaml\"))\n                { Source = new Uri(\"avares://YMCL/Public/Styles/Dynamic/NotificationCard.axaml\") };\n\n        private static readonly StyleInclude PopupStyle =\n            new(new Uri(\"avares://YMCL/Public/Styles/Dynamic/Popup.axaml\"))\n                { Source = new Uri(\"avares://YMCL/Public/Styles/Dynamic/Popup.axaml\") };\n\n        private static readonly StyleInclude ContentDialogStyle =\n            new(new Uri(\"avares://YMCL/Public/Styles/Dynamic/ContentDialog.axaml\"))\n                { Source = new Uri(\"avares://YMCL/Public/Styles/Dynamic/ContentDialog.axaml\") };\n\n        public static void SetDynamicStyle()\n        {\n            if (Data.SettingEntry is null) return;\n            var list = Data.SettingEntry.SpecialControlEnableTranslucent.Split(',').ToList();\n            //NotificationBubble,NotificationCard,Popup,ContentDialog\n            if (list.Contains(\"NotificationBubble\"))\n            {\n                if (!Application.Current.Styles.Contains(NotificationBubbleStyle))\n                    Application.Current.Styles.Add(NotificationBubbleStyle);\n            }\n            else\n            {\n                Application.Current.Styles.Remove(NotificationBubbleStyle);\n            }\n\n            if (list.Contains(\"NotificationCard\"))\n            {\n                if (!Application.Current.Styles.Contains(NotificationCardStyle))\n                    Application.Current.Styles.Add(NotificationCardStyle);\n            }\n            else\n            {\n                Application.Current.Styles.Remove(NotificationCardStyle);\n            }\n\n            if (list.Contains(\"Popup\"))\n            {\n                if (!Application.Current.Styles.Contains(PopupStyle))\n                    Application.Current.Styles.Add(PopupStyle);\n            }\n            else\n            {\n                Application.Current.Styles.Remove(PopupStyle);\n            }\n\n            if (list.Contains(\"ContentDialog\"))\n            {\n                if (!Application.Current.Styles.Contains(ContentDialogStyle))\n                    Application.Current.Styles.Add(ContentDialogStyle);\n            }\n            else\n            {\n                Application.Current.Styles.Remove(ContentDialogStyle);\n            }\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Shower.cs",
    "content": "﻿using System.Linq;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Layout;\nusing Avalonia.Media;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing Ursa.Controls;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Langs;\nusing YMCL.Views;\nusing Notification = Ursa.Controls.Notification;\nusing Setting = YMCL.Public.Enum.Setting;\n\nnamespace YMCL.Public.Module.Ui;\n\npublic class Shower\n{\n    public static void Notice(string msg, NotificationType type = NotificationType.Information,\n        bool time = true, string title = \"Yu Minecraft Launcher\")\n    {\n        var showTitle = Const.String.AppTitle;\n        if (!string.IsNullOrWhiteSpace(title)) showTitle = title;\n        if (time) showTitle += $\" - {DateTime.Now:HH:mm:ss}\";\n\n        var notification = new Notification(showTitle, msg, type);\n        UiProperty.NotificationCards.Insert(0, new NotificationEntry(notification, notification.Type));\n\n        switch (Data.SettingEntry.NoticeWay)\n        {\n            case Setting.NoticeWay.Bubble:\n                NotificationBubble(msg, type);\n                break;\n            case Setting.NoticeWay.Card:\n                NotificationCard(msg, type, showTitle);\n                break;\n        }\n    }\n\n    public static void NoticeWindow(string title, string msg)\n    {\n        var win = new NotificationWindow(title, msg, Public.Module.IO.Disk.Getter.LoadBitmapFromAppFile(\n            \"YMCL.Public.Assets.Icon.Shadow.Embedded.ico\"));\n        win.Show();\n    }\n\n    public static void NotificationBubble(string msg, NotificationType type)\n    {\n        var toast = new Toast(msg, type);\n        Data.Toast.Show(toast, toast.Type, classes: [\"Light\"]);\n    }\n\n    public static void NotificationCard(string msg, NotificationType type, string title)\n    {\n        var notification = new Notification(title, msg, type);\n        Data.Notification.Show(notification, notification.Type, classes: [\"Light\"]);\n    }\n\n    public static void ShowShortException(string msg, Exception ex)\n    {\n        Notice($\"{msg}\\n{ex.Message}\", NotificationType.Error);\n        if (Data.SettingEntry.EnableIndependencyWindowNotification)\n        {\n            NoticeWindow(msg, ex.Message);\n        }\n    }\n\n    public static async Task<ContentDialogResult> ShowDialogAsync(string title = \"Title\", string msg = null,\n        Control p_content = null, string b_primary = null, string b_cancel = null, string b_secondary = null,\n        TopLevel? p_host = null)\n    {\n        var content = p_content == null\n            ? new SelectableTextBlock()\n            {\n                TextWrapping = TextWrapping.Wrap,\n                FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                Text = msg\n            }\n            : p_content;\n        if (!string.IsNullOrWhiteSpace(msg) && p_content != null)\n        {\n            content = new StackPanel()\n            {\n                Spacing = 15,\n                Children =\n                {\n                    new SelectableTextBlock()\n                    {\n                        TextWrapping = TextWrapping.Wrap,\n                        FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                        Text = msg\n                    },\n                    content\n                }\n            };\n        }\n\n        if (string.IsNullOrWhiteSpace(msg) && p_content == null)\n        {\n            content = null;\n        }\n\n        var dialog = new ContentDialog\n        {\n            PrimaryButtonText = b_primary,\n            Content = content,\n            DefaultButton = ContentDialogButton.Primary,\n            CloseButtonText = b_cancel,\n            SecondaryButtonText = b_secondary,\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            Title = title\n        };\n        var result = await dialog.ShowAsync(p_host ?? TopLevel.GetTopLevel(YMCL.App.UiRoot));\n        return result;\n    }\n\n    public static async void ShowLongException(string msg, Exception ex)\n    {\n        var textBox = new TextBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            TextWrapping = TextWrapping.Wrap,\n            Text = $\"{msg} - {ex.Message}\\n\\n{ex}\",\n            HorizontalAlignment = HorizontalAlignment.Center,\n            IsReadOnly = true\n        };\n        await ShowDialogAsync(MainLang.GetException, p_content: textBox, b_primary: MainLang.Ok);\n    }\n\n    public static async Task ShowAutoUpdateDialog(CheckUpdateInfo info)\n    {\n        if (Const.Data.SettingEntry.SkipUpdateVersion == info.NewVersion) return;\n        var dialog = ContentDialogResult.None;\n\n        await Dispatcher.UIThread.Invoke(async () =>\n        {\n            dialog = await ShowDialogAsync(MainLang.FoundNewVersion,\n                $\"{info.NewVersion}\\n\\n{info.GithubUrl}\"\n                , b_cancel: MainLang.Cancel, b_secondary: MainLang.SkipThisVersion,\n                b_primary: MainLang.Update);\n        });\n\n        if (dialog == ContentDialogResult.Primary)\n        {\n            var updateAppAsync = await IO.Network.Update.UpdateAppAsync();\n            if (!updateAppAsync) Notice(MainLang.UpdateFail, NotificationType.Error);\n        }\n        else if (dialog == ContentDialogResult.Secondary)\n        {\n            Dispatcher.UIThread.Invoke(() =>\n            {\n                Const.Data.SettingEntry.SkipUpdateVersion = info.NewVersion;\n                Notice(MainLang.SkipVersionTip.Replace(\"{version}\", info.NewVersion), NotificationType.Success);\n            });\n        }\n    }\n\n    public static async Task<int> ShowDialogWithComboBox(string[] items, string title = \"Title\", string? msg = null,\n        TopLevel? p_host = null)\n    {\n        var comboBox = new ComboBox\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            HorizontalAlignment = HorizontalAlignment.Stretch\n        };\n        foreach (var item in items)\n        {\n            comboBox.Items.Add(item);\n        }\n\n        comboBox.SelectedIndex = 0;\n        Control content = string.IsNullOrWhiteSpace(msg)\n            ? comboBox\n            : new StackPanel\n            {\n                Spacing = 15,\n                Children =\n                {\n                    new TextBlock\n                    {\n                        FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                        TextWrapping = TextWrapping.Wrap,\n                        Text = msg\n                    },\n                    comboBox\n                }\n            };\n        ContentDialog dialog = new()\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            Title = title,\n            PrimaryButtonText = MainLang.Ok,\n            CloseButtonText = MainLang.Cancel,\n            DefaultButton = ContentDialogButton.Primary,\n            Content = content\n        };\n        var dialogResult =\n            await dialog.ShowAsync(TopLevel.GetTopLevel(p_host ?? TopLevel.GetTopLevel(YMCL.App.UiRoot)));\n        if (dialogResult == ContentDialogResult.Primary)\n            return comboBox.SelectedIndex;\n        return -1;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Special/AggregateSearchUi.cs",
    "content": "﻿using System.IO;\nusing System.Linq;\nusing Avalonia.Controls.Notifications;\nusing MinecraftLaunch.Components.Parser;\nusing Modrinth.Models;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing SearchResult = YMCL.Views.Main.Pages.DownloadPages.ModrinthPages.SearchResult;\n\nnamespace YMCL.Public.Module.Ui.Special;\n\npublic class AggregateSearchUi\n{\n    public static void UpdateAllAggregateSearchEntries()\n    {\n        Data.AllAggregateSearchEntries.Clear();\n        foreach (var entry in UiProperty.AllInstallableGames)\n        {\n            Data.AllAggregateSearchEntries.Add(new AggregateSearchEntry\n            {\n                Tag = \"jump\", Text = $\"{MainLang.ReleaseVersion} - {entry.Id}\",\n                Type = MainLang.InstallVersion, Target = \"auto-install\",\n                Summary =\n                    $\"{MainLang.JumpToSearchTip.Replace(\"{target}\", $\"{MainLang.Download}-{MainLang.AutoInstall}\")}\",\n                Order = 70, VersionManifestEntry = entry\n            });\n        }\n\n        foreach (var folder in Data.MinecraftFolders)\n        {\n            var parser = new MinecraftParser(folder.Path);\n            var entries = parser.GetMinecrafts();\n            foreach (var game in entries)\n            {\n                Data.AllAggregateSearchEntries.Add(new AggregateSearchEntry\n                {\n                    Tag = \"change-selection\", Text = $\"{MainLang.GameVersion} - {game.Id}\",\n                    Type = MainLang.LocalResource, Target = \"mc-version\",\n                    Summary = string.IsNullOrWhiteSpace(game.ClientJarPath)\n                        ? \"Unknown\"\n                        : Mc.Utils.GetMinecraftSpecialFolder(game, GameSpecialFolder.GameFolder),\n                    MinecraftEntry = game, Order = 30\n                });\n            }\n        }\n\n        foreach (var account in Data.Accounts)\n        {\n            Data.AllAggregateSearchEntries.Add(new AggregateSearchEntry\n            {\n                Tag = \"change-selection\", Text = $\"{MainLang.ExistAccount} - {account.Name}\",\n                Type = MainLang.LocalResource, Account = account,\n                Summary = $\"{account.AccountType} - {account.AddTime}\", Order = 20, Target = \"account\"\n            });\n        }\n\n        foreach (var java in Data.JavaRuntimes)\n        {\n            Data.AllAggregateSearchEntries.Add(new AggregateSearchEntry\n            {\n                Tag = \"change-selection\", Text = $\"Java - {java.JavaVersion}\", Type = MainLang.LocalResource,\n                Summary = java.JavaPath, Order = 50\n            });\n        }\n\n        Data.AllAggregateSearchEntries = Data.AllAggregateSearchEntries.OrderBy(x => x.Order).ToList();\n        Filter(Data.UiProperty.AggregateSearchFilter);\n    }\n\n    public static void Filter(string filter)\n    {\n        UiProperty.Instance.FilteredAggregateSearchEntries.Clear();\n        if (!string.IsNullOrWhiteSpace(filter))\n        {\n            UiProperty.Instance.FilteredAggregateSearchEntries.Add(new AggregateSearchEntry\n                {\n                    Tag = \"jump\", Text = $\"{MainLang.SearchInTip.Replace(\"{target}\", \"CurseForge\")} : {filter.Trim()}\",\n                    Type = MainLang.JumpSearch, Keyword = filter.Trim(),\n                    Summary = $\"{MainLang.JumpToSearchTip.Replace(\"{target}\", $\"{MainLang.Download}-CurseForge\")}\",\n                    Target = \"curse-forge\", Order = 10\n                }\n            );\n            UiProperty.Instance.FilteredAggregateSearchEntries.Add(new AggregateSearchEntry\n                {\n                    Tag = \"jump\", Text = $\"{MainLang.SearchInTip.Replace(\"{target}\", \"Modrinth\")} : {filter.Trim()}\",\n                    Type = MainLang.JumpSearch, Keyword = filter.Trim(),\n                    Summary = $\"{MainLang.JumpToSearchTip.Replace(\"{target}\", $\"{MainLang.Download}-Modrinth\")}\",\n                    Target = \"modrinth\", Order = 10\n                }\n            );\n            if (Data.DesktopType == DesktopRunnerType.Windows)\n                UiProperty.Instance.FilteredAggregateSearchEntries.Add(new AggregateSearchEntry\n                {\n                    Tag = \"jump\",\n                    Text = $\"{MainLang.SearchInTip.Replace(\"{target}\", MainLang.Music)} : {filter.Trim()}\",\n                    Type = MainLang.JumpSearch, Keyword = filter.Trim(),\n                    Summary = $\"{MainLang.JumpToSearchTip.Replace(\"{target}\", $\"{MainLang.Music}\")}\", Target = \"music\",\n                    Order = 10\n                });\n        }\n\n        Data.AllAggregateSearchEntries.Where(item =>\n                item.Text.ToLower().Contains(filter.ToLower(), StringComparison.OrdinalIgnoreCase))\n            .ToList().OrderBy(x => x.Order).ToList()\n            .ForEach(item => UiProperty.Instance.FilteredAggregateSearchEntries.Add(item));\n    }\n\n    public static void HandleSelectedEntry(AggregateSearchEntry entry)\n    {\n        if (entry.Tag == \"jump\" && !string.IsNullOrWhiteSpace(entry.Target))\n        {\n            var key = UiProperty.Instance.AggregateSearchFilter;\n            if (entry.Target == \"curse-forge\")\n            {\n                if (string.IsNullOrWhiteSpace(key)) return;\n                if (string.IsNullOrWhiteSpace(entry.Keyword)) return;\n                YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavDownload;\n                YMCL.App.UiRoot.ViewModel.Download.Nav.SelectedItem = YMCL.App.UiRoot.ViewModel.Download.NavCf;\n                YMCL.App.UiRoot.ViewModel.Download._curseForge.CreateNewPage(new SearchTabViewItemEntry()\n                {\n                    CanClose = true, Host = nameof(Views.Main.Pages.DownloadPages.CurseForge),\n                    Content = new Views.Main.Pages.DownloadPages.CurseForgePages.SearchResult(entry.Keyword,\n                        string.Empty, 0, 0),\n                    Title = $\"{MainLang.Search}({MainLang.AllType}): {entry.Keyword}\"\n                });\n            }\n\n            if (entry.Target == \"modrinth\")\n            {\n                if (string.IsNullOrWhiteSpace(key)) return;\n                if (string.IsNullOrWhiteSpace(entry.Keyword)) return;\n                YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavDownload;\n                YMCL.App.UiRoot.ViewModel.Download.Nav.SelectedItem = YMCL.App.UiRoot.ViewModel.Download.NavMr;\n                YMCL.App.UiRoot.ViewModel.Download._modrinth.CreateNewPage(new SearchTabViewItemEntry()\n                {\n                    CanClose = true, Host = nameof(Views.Main.Pages.DownloadPages.Modrinth),\n                    Content = new Views.Main.Pages.DownloadPages.ModrinthPages.SearchResult(entry.Keyword, string.Empty,\n                        0),\n                    Title = $\"{MainLang.Search}({MainLang.AllType}): {entry.Keyword}\"\n                });\n            }\n            else if (entry.Target == \"music\")\n            {\n                if (string.IsNullOrWhiteSpace(key)) return;\n                if (string.IsNullOrWhiteSpace(entry.Keyword)) return;\n                YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavMusic;\n                YMCL.App.UiRoot.ViewModel.Music.SearchFormCall(entry.Keyword);\n            }\n            else if (entry.Target == \"auto-install\")\n            {\n                if (string.IsNullOrWhiteSpace(entry.VersionManifestEntry.Id)) return;\n                YMCL.App.UiRoot.ViewModel.Download.Nav.SelectedItem = YMCL.App.UiRoot.ViewModel.Download.NavAuto;\n                YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavDownload;\n                YMCL.App.UiRoot.ViewModel.Download._autoInstall.JumpToInstallPreview(entry.VersionManifestEntry);\n            }\n        }\n        else if (entry.Tag == \"change-selection\" && !string.IsNullOrWhiteSpace(entry.Target))\n        {\n            if (entry is { Target: \"mc-version\", MinecraftEntry: not null })\n            {\n                if (entry.Summary == \"Unknown\")\n                {\n                    Notice(MainLang.CannotRecognitionTheVersion, NotificationType.Error);\n                }\n                else\n                {\n                    Const.Data.SettingEntry.MinecraftFolder =\n                        Data.MinecraftFolders.FirstOrDefault(x => x.Path == entry.MinecraftEntry.MinecraftFolderPath);\n                    Const.Data.UiProperty.SelectedMinecraft = new MinecraftDataEntry(entry.MinecraftEntry);\n                    YMCL.App.UiRoot.Nav.SelectedItem = YMCL.App.UiRoot.NavLaunch;\n                    Notice(\n                        $\"{MainLang.SwitchedTo} : {entry.MinecraftEntry.Id}\\n\" +\n                        $\"( {Mc.Utils.GetMinecraftSpecialFolder(entry.MinecraftEntry, GameSpecialFolder.GameFolder, true)} )\",\n                        type: NotificationType.Success);\n                }\n            }\n            else if (entry is { Target: \"account\" })\n            {\n                Const.Data.SettingEntry.Account = entry.Account;\n                Notice($\"{MainLang.SwitchedTo} : {entry.Text}\\n{entry.Summary}\",\n                    type: NotificationType.Success);\n            }\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Special/AutoInstallUi.cs",
    "content": "﻿namespace YMCL.Public.Module.Ui.Special;\n\npublic class AutoInstallUi\n{\n    \n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Special/DropHandler.cs",
    "content": "﻿using System.IO;\nusing System.Text.RegularExpressions;\nusing System.Web;\nusing Avalonia.Controls.Notifications;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Mc.Importer;\n\nnamespace YMCL.Public.Module.Ui.Special;\n\npublic class DropHandler\n{\n    public static async Task HandleFiles(string path)\n    {\n        var type = Path.GetExtension(path);\n        switch (type)\n        {\n            case \".mrpack\":\n                await Mc.Importer.mrpack.Main.Import(path);\n                return;\n            case \".jar\":\n                await Mc.Importer.jar.Main.Import(path);\n                return;\n            case \".zip\":\n                await Mc.Importer.zip.Main.Import(path);\n                return;\n            default:\n                Notice($\"{MainLang.UnsupportedFileType}: {Path.GetFileName(path)}\", NotificationType.Warning);\n                return;\n        }\n    }\n\n    public static void HandleText(string text)\n    {\n        if (text.Trim().StartsWith(\"authlib-injector:\"))\n        {\n            var match = Regex.Match(HttpUtility.UrlDecode(text.Trim()), @\"https?://[^\\s:]+\");\n            if (!match.Success) return;\n            var url = match.Value;\n            Op.Account.YggdrasilLogin(YMCL.App.UiRoot!, server1: url);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Ui/Special/LaunchUi.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Linq;\nusing Avalonia.Data;\nusing MinecraftLaunch.Base.Enums;\nusing MinecraftLaunch.Base.Models.Game;\nusing MinecraftLaunch.Components.Parser;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Public.Module.Ui.Special;\n\npublic class LaunchUi\n{\n    public static void LoadGames()\n    {\n        if (Data.SettingEntry == null) return;\n        if (Data.SettingEntry.MinecraftFolder == null) return;\n        MinecraftDataEntry? selected = null;\n        if (Data.CurrentFolderGames.Count > 0)\n        {\n            selected = Data.UiProperty.SelectedMinecraft;\n        }\n\n        List<MinecraftDataEntry> games = [];\n        var resolver = new MinecraftParser(Data.SettingEntry.MinecraftFolder.Path);\n        resolver.GetMinecrafts().ToList().ForEach(a =>\n        {\n            try\n            {\n                var favourite = File.Exists(Path.Combine(a.MinecraftFolderPath, \"versions\", a.Id, \"YMCL.Favourite\"));\n                games.Add(new MinecraftDataEntry(a, favourite));\n            }\n            catch\n            {\n            }\n        });\n        Data.CurrentFolderGames.Clear();\n        games.OrderBy(entry => !entry.IsFavourite).ToList().ForEach(a => { Data.CurrentFolderGames.Add(a); });\n        if (Data.DesktopType == DesktopRunnerType.Windows && Environment.OSVersion.Version.Major >= 10)\n        {\n            var bedrock = new MinecraftDataEntry(null, true, true) { IsSettingVisible = false, Type = \"bedrock\" };\n            Data.CurrentFolderGames.Insert(0, bedrock);\n        }\n        if (Data.UiProperty.SelectedMinecraft == null ||\n            !Data.CurrentFolderGames.Contains(Data.UiProperty.SelectedMinecraft))\n        {\n            Data.UiProperty.SelectedMinecraft = Data.CurrentFolderGames.FirstOrDefault();\n        }\n        else\n        {\n            var index = Data.CurrentFolderGames.IndexOf(Data.UiProperty.SelectedMinecraft);\n            Data.UiProperty.SelectedMinecraft = null;\n            Data.UiProperty.SelectedMinecraft = Data.CurrentFolderGames[index];\n        }\n\n        if (selected != null && Data.CurrentFolderGames.Contains(selected))\n        {\n            Data.UiProperty.SelectedMinecraft = selected;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Util/Extension/Extensions.cs",
    "content": "﻿using System.CodeDom;\nusing System.CodeDom.Compiler;\nusing System.IO;\nusing System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.Serialization;\nusing System.Runtime.Serialization.Formatters.Binary;\nusing System.Text.RegularExpressions;\nusing Modrinth.Extensions;\nusing Modrinth.Models;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing String = System.String;\n\nnamespace YMCL.Public.Module.Util.Extension;\n\npublic static class Extensions\n{\n    public static string GetDirectUrl(this ModrinthResourceEntry searchResult)\n    {\n        DefaultInterpolatedStringHandler interpolatedStringHandler = new DefaultInterpolatedStringHandler(2, 3);\n        interpolatedStringHandler.AppendFormatted(\"https://modrinth.com\");\n        interpolatedStringHandler.AppendLiteral(\"/\");\n        interpolatedStringHandler.AppendFormatted(searchResult.ProjectType.ToModrinthString());\n        interpolatedStringHandler.AppendLiteral(\"/\");\n        interpolatedStringHandler.AppendFormatted(searchResult.ProjectId);\n        return interpolatedStringHandler.ToStringAndClear();\n    }\n    \n    public static string ToByteUnit(this int bytes)\n    {\n        if (bytes == 0)\n        {\n            return \"0 Bytes\";\n        }\n\n        string[] units = [\"Bytes\", \"KiB\", \"MiB\", \"GiB\"];\n        double size = bytes;\n        var unitIndex = 0;\n        while (size >= 1024 && unitIndex < units.Length - 1)\n        {\n            size /= 1024;\n            unitIndex++;\n        }\n        return $\"{size:0.##} {units[unitIndex]}\";\n    }\n}\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Util/Extension/Number.cs",
    "content": "﻿namespace YMCL.Public.Module.Util.Extension;\n\npublic static class Number\n{\n    public static string ToUnit(this double number)\n    {\n        var isChinese = false;\n        if (Data.SettingEntry != null)\n            isChinese = Data.SettingEntry.Language.Code == \"zh-CN\";\n        if (isChinese)\n        {\n            if (number >= 100000000)\n            {\n                return $\"{number / 100000000:F2}亿\";\n            }\n\n            if (number >= 10000)\n            {\n                return $\"{number / 10000:F2}万\";\n            }\n            return number >= 1000 ? $\"{number / 1000:F2}千\" : number.ToString(\"F2\");\n        }\n\n        if (number >= 1000000000)\n        {\n            return $\"{number / 1000000000:F2}b\";\n        }\n\n        if (number >= 1000000)\n        {\n            return $\"{number / 1000000:F2}m\";\n        }\n        return number >= 1000 ? $\"{number / 1000:F2}k\" : number.ToString(\"F2\");\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Util/Permission.cs",
    "content": "﻿using System.Threading.Tasks;\nusing FluentAvalonia.UI.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.App;\n\nnamespace YMCL.Public.Module.Util;\n\npublic class Permission\n{\n    public static bool IsAdministrator()\n    {\n        if (Const.Data.DesktopType != DesktopRunnerType.Windows) return false;\n        var identity = System.Security.Principal.WindowsIdentity.GetCurrent();\n        var principal = new System.Security.Principal.WindowsPrincipal(identity);\n        return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);\n    }\n\n    public static async Task<bool> TryToUpgradePermission()\n    {\n        if (Const.Data.DesktopType != DesktopRunnerType.Windows) return true;\n        if (IsAdministrator()) return true;\n        var cr = await ShowDialogAsync(MainLang.UpgradeToAdministratorPrivileges,\n            MainLang.UpgradeToAdministratorPrivilegesTip, b_primary: MainLang.Ok, b_cancel: MainLang.Cancel);\n        if (cr == ContentDialogResult.Primary)\n        {\n            AppMethod.RestartApp(true);\n            return true;\n        }\n        else\n        {\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Util/Platform/MacOs/WindowHandler.cs",
    "content": "﻿using System.Runtime.InteropServices;\nusing System.Runtime.Versioning;\n\nnamespace YMCL.Public.Module.Util.Platform;\n\n[SupportedOSPlatform(\"MacOS\")]\npublic static class WindowHandler {\n    public static void HideZoomButton(IntPtr nsWindow) {\n        var selStandardWindowButton = sel_registerName(\"standardWindowButton:\");\n        var selSetHidden = sel_registerName(\"setHidden:\");\n\n        var zoomButton = objc_msgSend_IntPtr_IntPtr(nsWindow, selStandardWindowButton, (IntPtr)2);\n        objc_msgSend_Bool(zoomButton, selSetHidden, true);\n    }\n\n    public static void RefreshTitleBarButtonPosition(IntPtr nsWindow) {\n        var selStandardWindowButton = sel_registerName(\"standardWindowButton:\");\n        var selSetFrameOrigin = sel_registerName(\"setFrameOrigin:\");\n\n        if (selStandardWindowButton == IntPtr.Zero || selSetFrameOrigin == IntPtr.Zero) {\n            throw new NullReferenceException();\n        }\n\n        var closeButton = objc_msgSend_IntPtr_IntPtr(nsWindow, selStandardWindowButton, (IntPtr)0);\n        var minimizeButton = objc_msgSend_IntPtr_IntPtr(nsWindow, selStandardWindowButton, (IntPtr)1);\n        var zoomButton = objc_msgSend_IntPtr_IntPtr(nsWindow, selStandardWindowButton, (IntPtr)2);\n\n        var macButtonX = 20;\n        var macButtonY = -5;\n        var newCloseButtonPosition = new CGPoint(macButtonX, macButtonY);\n        var newMinimizeButtonPosition = new CGPoint(macButtonX + 20, macButtonY);\n        var newZoomButtonPosition = new CGPoint(macButtonX + 40, macButtonY);\n\n        objc_msgSend_CGPoint(closeButton, selSetFrameOrigin, newCloseButtonPosition);\n        objc_msgSend_CGPoint(minimizeButton, selSetFrameOrigin, newMinimizeButtonPosition);\n        objc_msgSend_CGPoint(zoomButton, selSetFrameOrigin, newZoomButtonPosition);\n\n    }\n\n    [DllImport(\"libobjc.dylib\", EntryPoint = \"objc_msgSend\")]\n    public static extern IntPtr objc_msgSend_IntPtr_IntPtr(IntPtr receiver, IntPtr selector, IntPtr arg1);\n\n    [DllImport(\"libobjc.dylib\", EntryPoint = \"objc_msgSend\")]\n    public static extern void objc_msgSend_CGPoint(IntPtr receiver, IntPtr selector, CGPoint arg1);\n\n    [DllImport(\"libobjc.dylib\", EntryPoint = \"objc_msgSend\")]\n    public static extern IntPtr objc_msgSend_Bool(IntPtr receiver, IntPtr selector, bool arg1);\n\n    [DllImport(\"libobjc.dylib\", EntryPoint = \"sel_registerName\")]\n    public static extern IntPtr sel_registerName(string name);\n}\n\n[StructLayout(LayoutKind.Sequential)]\npublic struct CGPoint {\n    public double X;\n    public double Y;\n\n    public CGPoint(double x, double y) {\n        X = x;\n        Y = y;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Util/VersionComparer.cs",
    "content": "﻿using System.Collections.Generic;\n\nnamespace YMCL.Public.Module.Util;\n\npublic class VersionComparer : IComparer<string>\n{\n    public int Compare(string x, string y)\n    {\n        var versionPartsX = x.Split('.');\n        var versionPartsY = y.Split('.');\n\n        var minLength = Math.Min(versionPartsX.Length, versionPartsY.Length);\n\n        for (var i = 0; i < minLength; i++)\n        {\n            var partX = int.Parse(versionPartsX[i]);\n            var partY = int.Parse(versionPartsY[i]);\n\n            if (partX != partY) return partX.CompareTo(partY);\n        }\n\n        // 如果所有相同位置的版本号都相同，但长度不同，则较长的版本号应该更大  \n        return versionPartsX.Length.CompareTo(versionPartsY.Length);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Value/Calculator.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing Avalonia.Media;\nusing MinecraftLaunch.Base.Models.Game;\nusing MinecraftLaunch.Extensions;\nusing MinecraftLaunch.Utilities;\n\nnamespace YMCL.Public.Module.Value;\n\npublic class Calculator\n{\n    public static Color ColorVariant(Color color, float percent)\n    {\n        // 确保百分比在-1到1之间  \n        percent = Math.Max(-1f, Math.Min(1f, percent));\n\n        // 计算调整后的RGB值  \n        var adjust = 1f + percent; // 亮化是1+percent，暗化是1+(negative percent)，即小于1  \n        var r = (int)Math.Round(color.R * adjust);\n        var g = (int)Math.Round(color.G * adjust);\n        var b = (int)Math.Round(color.B * adjust);\n\n        // 确保RGB值在有效范围内  \n        r = Math.Max(0, Math.Min(255, r));\n        g = Math.Max(0, Math.Min(255, g));\n        b = Math.Max(0, Math.Min(255, b));\n\n        // 创建一个新的颜色（保持Alpha通道不变）  \n        return Color.FromArgb(color.A, (byte)r, (byte)g, (byte)b);\n    }\n\n    public static JavaEntry? GetCurrentJava(List<JavaEntry> javaEntries, MinecraftEntry game)\n    {\n        var list = new List<MinecraftLaunch.Base.Models.Game.JavaEntry>();\n        javaEntries.ForEach(x =>\n        {\n            if (x.JavaVersion != \"Auto\")\n            {\n                list.Add(Classes.Data.JavaEntry.YmclToMl(x));\n            }\n        });\n        try\n        {\n            return JavaEntry.MlToYmcl(game.GetAppropriateJava(list));\n        }\n        catch (Exception e)\n        {\n            Console.WriteLine(e);\n            return new JavaEntry()\n            {\n                JavaPath = \"Error\",\n                JavaVersion = e.Message,\n            };\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Module/Value/Converter.cs",
    "content": "﻿using System.IO;\nusing System.Text.RegularExpressions;\nusing Avalonia.Media.Imaging;\n\nnamespace YMCL.Public.Module.Value;\n\npublic class Converter\n{\n    public static string BytesToBase64(byte[] imageBytes)\n    {\n        var base64String = Convert.ToBase64String(imageBytes);\n        return base64String;\n    }\n\n    public static byte[] Base64ToBytes(string base64String)\n    {\n        var bytes = Convert.FromBase64String(base64String);\n        return bytes;\n    }\n\n    public static string StandardizeUrl(string? url)\n    {\n        if (string.IsNullOrWhiteSpace(url))\n        {\n            return string.Empty;\n        }\n\n        // 检查字符串是否以协议开始，如果没有，则添加http协议\n        if (!url.StartsWith(\"http://\") && !url.StartsWith(\"https://\"))\n        {\n            url = \"http://\" + url; // 默认添加http协议\n        }\n\n        try\n        {\n            var uriResult = new Uri(url);\n            return uriResult.AbsoluteUri; // 返回绝对URI，这将标准化URL\n        }\n        catch (UriFormatException e)\n        {\n            Console.WriteLine(\"The URL is still not valid: \" + e.Message);\n            throw new FormatException(\"The URL is still not valid: \" + e.Message);\n        }\n    }\n\n    public static Bitmap? Base64ToBitmap(string base64)\n    {\n        if (string.IsNullOrWhiteSpace(base64))\n        {\n            return null;\n        }\n\n        var imageBytes = Convert.FromBase64String(base64);\n        using var ms = new MemoryStream(imageBytes);\n        var bitmap = new Bitmap(ms);\n        return bitmap;\n    }\n\n    public static (string host, int port) UrlToHostAndPort(string input)\n    {\n        var host = \"\";\n        var port = 25565; // 默认端口\n\n        if (Regex.IsMatch(input, @\"^(\\d{1,3}\\.){3}\\d{1,3}:(\\d+)$\"))\n        {\n            var parts = input.Split(':');\n            host = parts[0];\n            port = int.Parse(parts[1]);\n        }\n        else if (Regex.IsMatch(input, @\"^(.*):(\\d+)$\"))\n        {\n            var parts = input.Split(':');\n            host = parts[0];\n            port = int.Parse(parts[1]);\n        }\n        else\n        {\n            host = input;\n        }\n        return (host, port);\n    }\n\n    public static string MsToTime(double ms)\n    {\n        var minute = 0;\n        var second = (int)(ms / 1000);\n\n        if (second > 60)\n        {\n            minute = second / 60;\n            second = second % 60;\n        }\n\n        var secondStr = second < 10 ? $\"0{second}\" : $\"{second}\";\n        var minuteStr = minute < 10 ? $\"0{minute}\" : $\"{minute}\";\n\n        return $\"{minuteStr}:{secondStr}\";\n    }\n\n    public static string BitmapToBase64(Bitmap bitmap)\n    {\n        if (bitmap == null)\n            return string.Empty;\n        using var ms = new MemoryStream();\n        bitmap.Save(ms);\n        var imageBytes = ms.ToArray();\n        return Convert.ToBase64String(imageBytes);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Plugin/Helper/BuildNavItemContent.cs",
    "content": "﻿using Avalonia.Media;\n\nnamespace YMCL.Public.Plugin;\n\npublic class BuildNavItemContent\n{\n    public static Control Build(string title, string iconPath)\n    {\n        var icon = new PathIcon\n        {\n            Data = Geometry.Parse(iconPath),\n            Margin = new Thickness(0, 0, 6, 0),\n            Width = 16,\n            Height = 16\n        };\n        var text = new TextBlock\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            FontSize = 14,\n            Text = title\n        };\n        var root = new DockPanel();\n        root.Children.Add(icon);\n        root.Children.Add(text);\n        return root;\n    }\n    \n    public static Control Build(string title, Control icon)\n    {\n        var text = new TextBlock\n        {\n            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            FontSize = 14,\n            Text = title\n        };\n        var root = new DockPanel();\n        root.Children.Add(icon);\n        root.Children.Add(text);\n        return root;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Plugin/Helper/RegisterPage.cs",
    "content": "﻿using FluentAvalonia.UI.Controls;\nusing YMCL.Public.Classes.Operate;\n\nnamespace YMCL.Public.Plugin;\n\npublic static class Helper\n{\n    public static RegisteredPage RegisterPage(this NavigationView nav, Control page, string tag, Control content = null)\n    {\n        return new RegisteredPage\n        {\n            Host = nav,\n            Page = page,\n            Tag = tag,\n            NavContent = content\n        }.Build();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Plugin/Loader.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing System.Windows.Input;\nusing YMCL.Plugin.Base;\n\nnamespace YMCL.Public.Plugin;\n\npublic class Loader\n{\n    public static Assembly LoadPlugin(string path)\n    {\n        Console.WriteLine($\"Loading commands from: {path}\");\n        var loadContext = new PluginLoadContext(path);\n        return loadContext.LoadFromAssemblyName(new AssemblyName(Path.GetFileNameWithoutExtension(path)));\n    }\n\n    public static IEnumerable<IPlugin> CreateCommands(Assembly assembly)\n    {\n        var count = 0;\n\n        foreach (var type in assembly.GetTypes())\n        {\n            if (!typeof(IPlugin).IsAssignableFrom(type)) continue;\n            if (Activator.CreateInstance(type) is not IPlugin result) continue;\n            count++;\n            yield return result;\n        }\n\n        if (count != 0) yield break;\n        var availableTypes = string.Join(\",\", assembly.GetTypes().Select(t => t.FullName));\n        throw new ApplicationException(\n            $\"Can't find any type which implements ICommand in {assembly} from {assembly.Location}.\\n\" +\n            $\"Available types: {availableTypes}\");\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Plugin/PluginLoadContext.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.Loader;\n\nnamespace YMCL.Public.Plugin;\n\npublic class PluginLoadContext : AssemblyLoadContext\n{\n    private readonly AssemblyDependencyResolver _resolver;\n\n    public PluginLoadContext(string pluginPath)\n    {\n        _resolver = new AssemblyDependencyResolver(pluginPath);\n    }\n\n    protected override Assembly Load(AssemblyName assemblyName)\n    {\n        var assemblyPath = _resolver.ResolveAssemblyToPath(assemblyName);\n        return assemblyPath != null ? LoadFromAssemblyPath(assemblyPath) : null;\n    }\n\n    protected override IntPtr LoadUnmanagedDll(string unmanagedDllName)\n    {\n        var libraryPath = _resolver.ResolveUnmanagedDllToPath(unmanagedDllName);\n        return libraryPath != null ? LoadUnmanagedDllFromPath(libraryPath) : IntPtr.Zero;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Styles/Dynamic/ContentDialog.axaml",
    "content": "﻿<Styles\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Design.PreviewWith>\n        <Border Padding=\"20\">\n            <!--  Add Controls for Previewer Here  -->\n        </Border>\n    </Design.PreviewWith>\n\n    <!--  Add Styles Here  -->\n    <Style Selector=\"controls|ContentDialog\">\n        <Setter Property=\"Opacity\" Value=\"{DynamicResource MainOpacity}\" />\n    </Style>\n</Styles>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Styles/Dynamic/NotificationBubble.axaml",
    "content": "﻿<Styles\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Design.PreviewWith>\n        <Border Padding=\"20\">\n            <!--  Add Controls for Previewer Here  -->\n        </Border>\n    </Design.PreviewWith>\n\n    <Style Selector=\"u|ToastCard\">\n        <Setter Property=\"Opacity\" Value=\"{DynamicResource MainOpacity}\" />\n    </Style>\n</Styles>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Styles/Dynamic/NotificationCard.axaml",
    "content": "﻿<Styles\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Design.PreviewWith>\n        <Border Padding=\"20\">\n            <!--  Add Controls for Previewer Here  -->\n        </Border>\n    </Design.PreviewWith>\n\n    <!--  Add Styles Here  -->\n    <Style Selector=\"u|NotificationCard\">\n        <Setter Property=\"Opacity\" Value=\"{DynamicResource MainOpacity}\" />\n    </Style>\n</Styles>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Styles/Dynamic/Popup.axaml",
    "content": "﻿<Styles\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Design.PreviewWith>\n        <Border Padding=\"20\">\n            <!--  Add Controls for Previewer Here  -->\n        </Border>\n    </Design.PreviewWith>\n\n    <!--  Add Styles Here  -->\n    <Style Selector=\"Border#PopupBorder\">\n        <Setter Property=\"Opacity\" Value=\"{DynamicResource MainOpacity}\" />\n    </Style>\n    <Style Selector=\"u|MultiComboBox#MultiComboBox /template/ Popup\">\n        <Style Selector=\"^ PopupRoot\">\n            <Style Selector=\"^ LayoutTransformControl\">\n                <Style Selector=\"^ Panel\">\n                    <Style Selector=\"^ VisualLayerManager\">\n                        <Style Selector=\"^ LayoutTransformControl\">\n                            <Style Selector=\"^ ContentPresenter\">\n                                <Setter Property=\"Opacity\" Value=\"{DynamicResource MainOpacity}\" />\n                            </Style>\n                        </Style>\n                    </Style>\n                </Style>\n            </Style>\n        </Style>\n    </Style>\n</Styles>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Styles/IconPath.axaml",
    "content": "<ResourceDictionary xmlns=\"https://github.com/avaloniaui\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <PathGeometry x:Key=\"Logo\" Figures=\"M12,2L12,2C6.5,2,2,6.5,2,12s4.5,10,10,10s10-4.5,10-10C22,6.5,17.5,2,12,2z M17,12c0,2.8-2.2,5-5,5c-2.8,0-5-2.2-5-5c0-2.8,2.2-5,5-5C14.8,7,17,9.2,17,12L17,12z\" />\n    <PathGeometry x:Key=\"Minimize\" Figures=\"M19 13H5a1 1 0 0 1 0-2h14a1 1 0 0 1 0 2z\" />\n    <PathGeometry x:Key=\"Maximize\" Figures=\"M18 21H6a3 3 0 0 1-3-3V6a3 3 0 0 1 3-3h12a3 3 0 0 1 3 3v12a3 3 0 0 1-3 3zM6 5a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1z\" />\n    <PathGeometry x:Key=\"Close\" Figures=\"M13.41 12l4.3-4.29a1 1 0 1 0-1.42-1.42L12 10.59l-4.29-4.3a1 1 0 0 0-1.42 1.42l4.3 4.29-4.3 4.29a1 1 0 0 0 0 1.42 1 1 0 0 0 1.42 0l4.29-4.3 4.29 4.3a1 1 0 0 0 1.42 0 1 1 0 0 0 0-1.42z\" />\n    <PathGeometry x:Key=\"Return\" Figures=\"M298.5738220214844,298.4912109375C302.3008117675781,298.4829406738281 306.0587463378906,298.9615173339844 309.7547912597656,299.9518737792969 324.5389709472656,303.91326904296875 336.08673095703125,315.4610290527344 340.0481262207031,330.2452087402344C344.009521484375,345.0293884277344,339.7827453613281,360.8039245605469,328.9599914550781,371.6266784667969L230.82666015625,469.3333435058594 725.3333129882812,469.3333435058594C748.8974609375,469.33331298828125,768,488.43585205078125,768,512C768,535.5641479492188,748.8974609375,554.6666870117188,725.3333129882812,554.6666870117188L230.82666015625,554.6666870117188 328.9599914550781,652.3733520507812C337.037353515625,660.3847045898438,341.5807189941406,671.2901611328125,341.5807189941406,682.6666870117188C341.5807189941406,694.043212890625,337.037353515625,704.9486694335938,328.9599914550781,712.9600219726562C320.9486083984375,721.037353515625,310.0431823730469,725.5807495117188,298.6666564941406,725.5807495117188C287.2901306152344,725.5807495117188,276.38470458984375,721.037353515625,268.3733215332031,712.9600219726562L97.70665740966797,542.2933349609375C93.82227325439453,538.2355346679688 90.77735900878906,533.45068359375 88.74666595458984,528.2133178710938 84.47924041748047,517.8256225585938 84.47924041748047,506.1743469238281 88.74666595458984,495.78668212890625 90.77735900878906,490.5492858886719 93.82227325439453,485.764404296875 97.70665740966797,481.7066650390625L268.3733215332031,311.0400085449219C276.4903869628906,302.9229431152344,287.392822265625,298.51611328125,298.5738220214844,298.4912109375z M896,170.6666717529297C907.31591796875,170.6666717529297,918.1683959960938,175.16189575195312,926.169921875,183.16343688964844C934.1715087890625,191.1649932861328,938.666748046875,202.01742553710938,938.6666870117188,213.3333282470703L938.6666870117188,810.6666870117188C938.6666870117188,834.2308349609375,919.5641479492188,853.3333740234375,896,853.3333740234375C872.4358520507812,853.3333740234375,853.3333129882812,834.2308349609375,853.3333129882812,810.6666870117188L853.3333129882812,213.3333282470703C853.333251953125,202.01742553710938,857.8284912109375,191.1649932861328,865.830078125,183.16343688964844C873.8316040039062,175.16189575195312,884.68408203125,170.6666717529297,896,170.6666717529297z\" />\n\n    <PathGeometry x:Key=\"LaunchPageIcon\" Figures=\"M10.5495 2.53189C11.3874 1.82531 12.6126 1.82531 13.4505 2.5319L20.2005 8.224C20.7074 8.65152 21 9.2809 21 9.94406V19.7468C21 20.7133 20.2165 21.4968 19.25 21.4968H15.75C14.7835 21.4968 14 20.7133 14 19.7468V14.2468C14 14.1088 13.8881 13.9968 13.75 13.9968H10.25C10.1119 13.9968 9.99999 14.1088 9.99999 14.2468V19.7468C9.99999 20.7133 9.2165 21.4968 8.25 21.4968H4.75C3.7835 21.4968 3 20.7133 3 19.7468V9.94406C3 9.2809 3.29255 8.65152 3.79952 8.224L10.5495 2.53189ZM12.4835 3.6786C12.2042 3.44307 11.7958 3.44307 11.5165 3.6786L4.76651 9.37071C4.59752 9.51321 4.5 9.72301 4.5 9.94406V19.7468C4.5 19.8849 4.61193 19.9968 4.75 19.9968H8.25C8.38807 19.9968 8.49999 19.8849 8.49999 19.7468V14.2468C8.49999 13.2803 9.2835 12.4968 10.25 12.4968H13.75C14.7165 12.4968 15.5 13.2803 15.5 14.2468V19.7468C15.5 19.8849 15.6119 19.9968 15.75 19.9968H19.25C19.3881 19.9968 19.5 19.8849 19.5 19.7468V9.94406C19.5 9.72301 19.4025 9.51321 19.2335 9.37071L12.4835 3.6786Z\" />\n    <PathGeometry x:Key=\"SettingPageIcon\" Figures=\"M20.1 13.5l-1.9.2a5.8 5.8 0 0 1-.6 1.5l1.2 1.5c.4.4.3 1 0 1.4l-.7.7a1 1 0 0 1-1.4 0l-1.5-1.2a6.2 6.2 0 0 1-1.5.6l-.2 1.9c0 .5-.5.9-1 .9h-1a1 1 0 0 1-1-.9l-.2-1.9a5.8 5.8 0 0 1-1.5-.6l-1.5 1.2a1 1 0 0 1-1.4 0l-.7-.7a1 1 0 0 1 0-1.4l1.2-1.5a6.2 6.2 0 0 1-.6-1.5l-1.9-.2a1 1 0 0 1-.9-1v-1c0-.5.4-1 .9-1l1.9-.2a5.8 5.8 0 0 1 .6-1.5L5.2 7.3a1 1 0 0 1 0-1.4l.7-.7a1 1 0 0 1 1.4 0l1.5 1.2a6.2 6.2 0 0 1 1.5-.6l.2-1.9c0-.5.5-.9 1-.9h1c.5 0 1 .4 1 .9l.2 1.9a5.8 5.8 0 0 1 1.5.6l1.5-1.2a1 1 0 0 1 1.4 0l.7.7c.3.4.4 1 0 1.4l-1.2 1.5a6.2 6.2 0 0 1 .6 1.5l1.9.2c.5 0 .9.5.9 1v1c0 .5-.4 1-.9 1zM12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z\" />\n    <PathGeometry x:Key=\"DownloadPageIcon\" Figures=\"M5 16h14a2 2 0 0 1 2 2v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2c0-1.1.9-2 2-2zm0 2v2h14v-2H5zm10 0h2v2h-2v-2zm-4-6.4L8.7 9.3a1 1 0 1 0-1.4 1.4l4 4c.4.4 1 .4 1.4 0l4-4a1 1 0 1 0-1.4-1.4L13 11.6V4a1 1 0 0 0-2 0v7.6z\" />\n    <PathGeometry x:Key=\"MorePageIcon\" Figures=\"M6 10a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm12 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2zm-6 0a2 2 0 0 0-2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2 2 2 0 0 0-2-2z\" />\n\n    <PathGeometry x:Key=\"Music\" Figures=\"M229.92323303222656,711.099609375C207.1045379638672,710.6036376953125 184.53701782226562,719.2886962890625 167.77633666992188,736.0498046875 143.39715576171875,760.4295654296875 136.1046142578125,797.0944213867188 149.2992401123047,828.947509765625C162.49386596679688,860.800537109375,193.57717895507812,881.56884765625,228.05494689941406,881.5680541992188L228.0559539794922,881.5680541992188C275.117919921875,881.5294189453125,313.2590637207031,843.386962890625,313.2959899902344,796.3250122070312C313.2959899902344,761.8472290039062,292.5269775390625,730.764404296875,260.673583984375,717.570556640625C250.7194061279297,713.4474487304688,240.2953643798828,711.3250732421875,229.92323303222656,711.099609375z M796.3441772460938,540.5999145507812C749.2657470703125,540.5999145507812,711.1011352539062,578.7645263671875,711.1011352539062,625.8429565429688C711.1011352539062,672.92138671875 749.2657470703125,711.0859985351562 796.3441772460938,711.0859985351562 843.4071044921875,711.0485229492188 881.5497436523438,672.9058837890625 881.5872192382812,625.8429565429688C881.5872192382812,578.7645263671875,843.422607421875,540.5999145507812,796.3441772460938,540.5999145507812z M469.5780334472656,57.547767639160156L810.5501708984375,57.547767639160156C896.702880859375,57.547767639160156,966.8312377929688,127.67511749267578,966.833251953125,213.82781982421875L966.833251953125,625.8379516601562C966.833251953125,719.889892578125 890.340087890625,796.3250122070312 796.34619140625,796.3250122070312 702.293212890625,796.3250122070312 625.8590698242188,719.889892578125 625.8590698242188,625.8379516601562 625.8590698242188,531.843017578125 702.293212890625,455.3509216308594 796.34619140625,455.3509216308594 827.4871826171875,455.3509216308594 856.4140625,464.3867492675781 881.5891723632812,479.1055603027344L881.5891723632812,213.82882690429688C881.53466796875,174.61834716796875,849.7615966796875,142.84573364257812,810.5511474609375,142.7917938232422L469.57904052734375,142.7917938232422C430.3601379394531,142.82540893554688,398.5751953125,174.60992431640625,398.541015625,213.82882690429688L398.541015625,796.3240356445312C398.541015625,890.3759765625 322.0498962402344,966.8110961914062 228.0559539794922,966.8110961914062 134.00302124023438,966.8110961914062 57.56888961791992,890.3759765625 57.568885803222656,796.3240356445312 57.56888961791992,702.3291015625 134.00302124023438,625.8369750976562 228.0559539794922,625.8369750976562 259.1969909667969,625.8369750976562 288.121826171875,634.872802734375 313.2969970703125,649.5916137695312L313.2969970703125,213.82781982421875C313.2969970703125,127.67411041259766,383.36834716796875,57.547767639160156,469.5780334472656,57.547767639160156z\" />\n    <PathGeometry x:Key=\"Home\" Figures=\"M510.933349609375,129.06666564941406C508.26666259765625,129.06666564941406 505.6000061035156,130.13333129882812 503.4666748046875,132.26666259765625 347.73333740234375,266.6666564941406 226.13333129882812,371.20001220703125 140.8000030517578,441.6000061035156 140.8000030517578,443.73333740234375 138.6666717529297,445.8666687011719 138.6666717529297,448 138.6666717529297,452.26666259765625 140.8000030517578,454.3999938964844 145.06666564941406,454.3999938964844L202.6666717529297,454.3999938964844C232.53334045410156,454.3999938964844,256,477.8666687011719,256,507.73333740234375L256,868.2666625976562 394.6666564941406,868.2666625976562 394.6666564941406,661.3333129882812C394.6666564941406,631.4666748046875,418.1333312988281,608,448,608L576,608C605.8666381835938,608,629.3333129882812,631.4666748046875,629.3333129882812,661.3333129882812L629.3333129882812,866.1333618164062 768,866.1333618164062 768,507.73333740234375C768,477.8666687011719,791.4666748046875,454.3999938964844,821.3333129882812,454.3999938964844L878.933349609375,454.3999938964844C881.066650390625,454.3999938964844 885.3333129882812,452.26666259765625 883.2000122070312,445.8666687011719 883.2000122070312,443.73333740234375 883.2000122070312,443.73333740234375 881.066650390625,441.6000061035156 795.7333374023438,371.20001220703125 674.1333618164062,266.6666564941406 518.4000244140625,132.26666259765625 516.2667236328125,130.13333129882812 513.6000366210938,129.06666564941406 510.933349609375,129.06666564941406z M511.9999694824219,67.73333740234375C529.5999755859375,67.73333740234375 547.199951171875,73.60000610351562 561.066650390625,85.33333587646484 716.7999877929688,219.73333740234375 838.4000244140625,324.26666259765625 923.7333374023438,394.6666564941406 938.6666870117188,407.4666748046875 949.3333129882812,426.6666564941406 949.3333129882812,448 949.3333129882812,486.3999938964844 917.3333129882812,518.4000244140625 878.933349609375,518.4000244140625L832,518.4000244140625 832,876.7999877929688C832,906.6666870117188,808.5333251953125,930.1333618164062,778.6666870117188,930.1333618164062L618.6666870117188,930.1333618164062C588.7999877929688,930.1333618164062,565.3333129882812,906.6666870117188,565.3333129882812,876.7999877929688L565.3333129882812,669.8666381835938 458.6666564941406,669.8666381835938 458.6666564941406,876.7999877929688C458.6666564941406,906.6666870117188,435.20001220703125,930.1333618164062,405.3333435058594,930.1333618164062L245.3333282470703,930.1333618164062C215.46665954589844,930.1333618164062,192,906.6666870117188,192,876.7999877929688L192,518.4000244140625 145.06666564941406,518.4000244140625C106.66666412353516,518.4000244140625 74.66666412353516,486.3999938964844 74.66666412353516,448 74.66666412353516,428.79998779296875 85.33333587646484,409.6000061035156 100.26667022705078,394.6666564941406 185.60000610351562,324.26666259765625 307.20001220703125,219.73333740234375 462.9333190917969,85.33333587646484 476.79998779296875,73.60000610351562 494.3999938964844,67.73333740234375 511.9999694824219,67.73333740234375z\" />\n</ResourceDictionary>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Styles/Style.axaml",
    "content": "<Styles\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Design.PreviewWith>\n        <Border Padding=\"20\">\n            <!--  Add Controls for Previewer Here  -->\n        </Border>\n    </Design.PreviewWith>\n    <!--  Add Styles Here  -->\n    <Style Selector=\"ListBoxItem\">\n        <Setter Property=\"Margin\" Value=\"5,3\" />\n    </Style>\n    <Style Selector=\"Button.icon-button\">\n        <Setter Property=\"Background\" Value=\"Transparent\" />\n        <Setter Property=\"Cursor\" Value=\"Hand\" />\n        <Setter Property=\"BorderThickness\" Value=\"0\" />\n        <Setter Property=\"Height\" Value=\"25\" />\n        <Setter Property=\"Width\" Value=\"25\" />\n        <Setter Property=\"Template\">\n            <ControlTemplate>\n                <Border\n                    Background=\"{TemplateBinding Background}\"\n                    BorderThickness=\"{TemplateBinding BorderThickness}\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    Name=\"bd\">\n                    <Path\n                        Data=\"{TemplateBinding Content}\"\n                        Fill=\"{DynamicResource TextColor}\"\n                        Height=\"10\"\n                        Name=\"ico\"\n                        Stretch=\"Uniform\"\n                        Width=\"10\" />\n                </Border>\n            </ControlTemplate>\n        </Setter>\n    </Style>\n    <Style Selector=\"Button.content-button\">\n        <Setter Property=\"Background\" Value=\"Transparent\" />\n        <Setter Property=\"Cursor\" Value=\"Hand\" />\n        <Setter Property=\"BorderThickness\" Value=\"0\" />\n        <Setter Property=\"Template\">\n            <ControlTemplate>\n                <Border\n                    Background=\"{TemplateBinding Background}\"\n                    BorderThickness=\"{TemplateBinding BorderThickness}\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    Name=\"bd\">\n                    <ContentControl Content=\"{TemplateBinding Content}\" />\n                </Border>\n            </ControlTemplate>\n        </Setter>\n    </Style>\n    <Style Selector=\"Button.icon-custom-button\">\n        <Setter Property=\"Background\" Value=\"Transparent\" />\n        <Setter Property=\"Cursor\" Value=\"Hand\" />\n        <Setter Property=\"BorderThickness\" Value=\"0\" />\n        <Setter Property=\"Height\" Value=\"25\" />\n        <Setter Property=\"Width\" Value=\"25\" />\n        <Setter Property=\"Template\">\n            <ControlTemplate>\n                <Border\n                    Background=\"{TemplateBinding Background}\"\n                    BorderThickness=\"{TemplateBinding BorderThickness}\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    Name=\"bd\">\n                    <Path\n                        Data=\"{TemplateBinding Content}\"\n                        Fill=\"{DynamicResource TextColor}\"\n                        Height=\"12\"\n                        Name=\"ico\"\n                        Stretch=\"Uniform\"\n                        Width=\"12\" />\n                </Border>\n            </ControlTemplate>\n        </Setter>\n    </Style>\n    <Style Selector=\"Button.custom-button\">\n        <Setter Property=\"Background\" Value=\"Transparent\" />\n        <Setter Property=\"Cursor\" Value=\"Hand\" />\n        <Setter Property=\"BorderThickness\" Value=\"0\" />\n        <Setter Property=\"Height\" Value=\"15\" />\n        <Setter Property=\"Width\" Value=\"15\" />\n        <Setter Property=\"Template\">\n            <ControlTemplate>\n                <Border\n                    Background=\"{TemplateBinding Background}\"\n                    BorderThickness=\"{TemplateBinding BorderThickness}\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    Name=\"bd\">\n                    <Path\n                        Data=\"{TemplateBinding Content}\"\n                        Fill=\"{DynamicResource TextColor}\"\n                        Height=\"{TemplateBinding Height}\"\n                        Name=\"ico\"\n                        Stretch=\"Uniform\"\n                        Width=\"{TemplateBinding Width}\" />\n                </Border>\n            </ControlTemplate>\n        </Setter>\n    </Style>\n    <Style Selector=\"Button.transparent-btn\">\n        <Setter Property=\"Background\" Value=\"Transparent\" />\n        <Setter Property=\"Cursor\" Value=\"Hand\" />\n        <Setter Property=\"BorderThickness\" Value=\"0\" />\n    </Style>\n    <Style Selector=\"TextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource TextColor}\" />\n        <Setter Property=\"FontFamily\" Value=\"{DynamicResource Font}\" />\n        <Setter Property=\"FontWeight\" Value=\"{DynamicResource FontWeight}\" />\n        <Setter Property=\"Transitions\">\n            <Transitions>\n                <BrushTransition Duration=\"0:0:0.3\" Property=\"Foreground\" />\n            </Transitions>\n        </Setter>\n    </Style>\n    <Style Selector=\"SelectableTextBlock\">\n        <Setter Property=\"Foreground\" Value=\"{DynamicResource TextColor}\" />\n        <Setter Property=\"FontFamily\" Value=\"{DynamicResource Font}\" />\n        <Setter Property=\"FontWeight\" Value=\"{DynamicResource FontWeight}\" />\n        <Setter Property=\"Transitions\">\n            <Transitions>\n                <BrushTransition Duration=\"0:0:0.3\" Property=\"Foreground\" />\n            </Transitions>\n        </Setter>\n    </Style>\n    <Style Selector=\"CheckBox\">\n        <Setter Property=\"FontFamily\" Value=\"{DynamicResource Font}\" />\n        <Setter Property=\"FontWeight\" Value=\"{DynamicResource FontWeight}\" />\n    </Style>\n    <Style Selector=\"TextBox\">\n        <Setter Property=\"FontFamily\" Value=\"{DynamicResource Font}\" />\n        <Setter Property=\"Transitions\">\n            <Transitions>\n                <BrushTransition Duration=\"0:0:0.3\" Property=\"Foreground\" />\n            </Transitions>\n        </Setter>\n    </Style>\n    <Style Selector=\"PathIcon\">\n        <Setter Property=\"Transitions\">\n            <Transitions>\n                <BrushTransition Duration=\"0:0:0.3\" Property=\"Foreground\" />\n            </Transitions>\n        </Setter>\n    </Style>\n    <Style Selector=\"Rectangle#HCPaneBorder\">\n        <Setter Property=\"IsVisible\" Value=\"False\" />\n    </Style>\n    <Style Selector=\"u|NotificationCard\">\n        <Style Selector=\"^ SelectableTextBlock\">\n            <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n        </Style>\n    </Style>\n    <Style Selector=\"Border\">\n        <Setter Property=\"Transitions\">\n            <Transitions>\n                <BrushTransition Duration=\"0:0:0.3\" Property=\"Background\" />\n            </Transitions>\n        </Setter>\n    </Style>\n    <Style Selector=\"Button\">\n        <Setter Property=\"Transitions\">\n            <Transitions>\n                <BrushTransition Duration=\"0:0:0.3\" Property=\"Background\" />\n            </Transitions>\n        </Setter>\n    </Style>\n    <Style Selector=\"Panel#PART_PaneRoot\">\n        <Setter Property=\"Transitions\">\n            <Transitions>\n                <BrushTransition Duration=\"0:0:0.3\" Property=\"Background\" />\n            </Transitions>\n        </Setter>\n    </Style>\n</Styles>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Styles/Theme.axaml",
    "content": "<ResourceDictionary xmlns=\"https://github.com/avaloniaui\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <ResourceDictionary.ThemeDictionaries>\n        <ResourceDictionary x:Key=\"Dark\">\n            <SolidColorBrush Color=\"#2c2c2c\" x:Key=\"1x\" />\n            <SolidColorBrush Color=\"#941E1E1E\" x:Key=\"2x\" />\n            <SolidColorBrush Color=\"#ffffff\" x:Key=\"TextColor\" />\n            <SolidColorBrush Color=\"#242424\" x:Key=\"TitleBarColor\" />\n            <SolidColorBrush Color=\"#1e1e1e\" x:Key=\"WindowBg\" />\n            <SolidColorBrush Color=\"#7e7e7e\" x:Key=\"GrayColor\" />\n            <SolidColorBrush Color=\"#e1e9f0\" x:Key=\"BorderBrushColor\" />\n            <SolidColorBrush Color=\"#383838\" x:Key=\"ListBoxItemSelectedBackground\" />\n        </ResourceDictionary>\n        <ResourceDictionary x:Key=\"Light\">\n            <SolidColorBrush Color=\"#FFE9F6FF\" x:Key=\"1x\" />\n            <SolidColorBrush Color=\"#f6fafd\" x:Key=\"2x\" />\n            <SolidColorBrush Color=\"#f6fafd\" x:Key=\"WindowBg\" />\n            <SolidColorBrush Color=\"#333333\" x:Key=\"TextColor\" />\n            <SolidColorBrush Color=\"#e7f5ff\" x:Key=\"TitleBarColor\" />\n            <SolidColorBrush Color=\"#7e7e7e\" x:Key=\"GrayColor\" />\n            <SolidColorBrush Color=\"#e1e9f0\" x:Key=\"BorderBrushColor\" />\n            <SolidColorBrush Color=\"#DFEFFF\" x:Key=\"ListBoxItemSelectedBackground\" />\n        </ResourceDictionary>\n    </ResourceDictionary.ThemeDictionaries>\n</ResourceDictionary>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Texts/CustomHomePageDefault.axaml",
    "content": "<UserControl\n    FontFamily=\"{DynamicResource Font}\"\n    FontWeight=\"{DynamicResource FontWeight}\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    Welcome to Custom Ymcl Home Page !\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Texts/DateTime.txt",
    "content": "﻿Debug\n"
  },
  {
    "path": "YMCL.Main/YMCL/Public/Texts/IsAloneProgram.txt",
    "content": "﻿"
  },
  {
    "path": "YMCL.Main/YMCL/ViewModels/GameSettingModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Linq;\nusing Avalonia.Media.Imaging;\nusing DynamicData;\nusing MinecraftLaunch.Base.Models.Game;\nusing Newtonsoft.Json;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module;\n\nnamespace YMCL.ViewModels;\n\npublic class GameSettingModel : ReactiveObject\n{\n    private static GameSettingModel? _instance;\n    public ObservableCollection<JavaEntry> JavaRuntimes { get; set; } = [];\n    [Reactive] public GameSettingEntry GameSetting { get; set; }\n    [Reactive] public MinecraftEntry MinecraftEntry { get; set; }\n    [Reactive] public string LoaderType { get; set; }\n    public Bitmap Icon => Public.Module.Mc.Icon.GetMinecraftIcon(new MinecraftDataEntry(MinecraftEntry));\n    public static double SystemMaxMem => UiProperty.Instance.SystemMaxMem;\n\n    public static GameSettingModel Instance => _instance;\n\n    public GameSettingModel(MinecraftEntry entry)\n    {\n        MinecraftEntry = entry;\n        LoaderType = MinecraftEntry.IsVanilla\n            ? \"Vanilla\"\n            : string.Join(\" , \", (MinecraftEntry as ModifiedMinecraftEntry)?.ModLoaders.Select(a => $\"{a.Type} {a.Version}\")!);\n        GameSetting = YMCL.Public.Module.Mc.MinecraftSetting.GetGameSetting(entry);\n        JavaRuntimes.Add(new JavaEntry { JavaVersion = \"Global\", JavaPath = MainLang.UseGlobalSetting });\n        foreach (var javaRuntime in Data.JavaRuntimes)\n        {\n            JavaRuntimes.Add(javaRuntime);\n        }\n\n        _instance = this;\n        var debouncer = new Debouncer(() =>\n        {\n            File.WriteAllText(Path.Combine(entry.MinecraftFolderPath, \"versions\",\n                entry.Id, \"YMCL.GameSetting.DaiYu\"), JsonConvert.SerializeObject(GameSetting, Formatting.Indented));\n        }, 100);\n        GameSetting.PropertyChanged += (_, _) => { debouncer.Trigger(); };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/ViewModels/InstallPreviewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\nusing MinecraftLaunch.Base.Models.Network;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Views.Main.Pages.DownloadPages;\nusing InstallPreview = YMCL.Views.Main.Pages.DownloadPages.AutoInstallPages.InstallPreview;\n\nnamespace YMCL.ViewModels;\n\npublic sealed class InstallPreviewModel : ReactiveObject\n{\n    private readonly InstallPreview entry;\n\n    public InstallPreviewModel(InstallPreview entry)\n    {\n        this.entry = entry;\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(CustomId))\n            {\n                HandleCustomId();\n            }\n        };\n        UpdateSelection();\n    }\n\n    [Reactive] public string GameId { get; set; }\n    [Reactive] public string CustomId { get; set; }\n    [Reactive] public string DisplaceId { get; set; }\n    [Reactive] public bool IsDisplaceId { get; set; }\n    [Reactive] public bool OptifineLoading { get; set; } = true;\n    [Reactive] public bool ForgeLoading { get; set; } = true;\n    [Reactive] public bool NeoForgeLoading { get; set; } = true;\n    [Reactive] public bool QuiltLoading { get; set; } = true;\n    [Reactive] public bool FabricLoading { get; set; } = true;\n    [Reactive] public bool NoOptiFine { get; set; }\n    [Reactive] public bool NoForge { get; set; }\n    [Reactive] public bool NoQuilt { get; set; }\n    [Reactive] public bool NoFabric { get; set; }\n    [Reactive] public bool NoNeoForge { get; set; }\n    [Reactive] public string SelectedOptiFine { get; set; }\n    [Reactive] public string SelectedForge { get; set; }\n    [Reactive] public string SelectedNeoForge { get; set; }\n    [Reactive] public string SelectedQuilt { get; set; }\n    [Reactive] public string SelectedFabric { get; set; }\n    [Reactive] public ObservableCollection<OptifineInstallEntry> OptiFines { get; set; } = [];\n    [Reactive] public ObservableCollection<ForgeInstallEntry> Forges { get; set; } = [];\n    [Reactive] public ObservableCollection<ForgeInstallEntry> NeoForges { get; set; } = [];\n    [Reactive] public ObservableCollection<QuiltInstallEntry> Quilts { get; set; } = [];\n    [Reactive] public ObservableCollection<FabricInstallEntry> Fabrics { get; set; } = [];\n\n    public void HandleCustomId()\n    {\n        if (!ShouldUpdateCustomId())\n        {\n            IsDisplaceId = false;\n            return;\n        }\n\n        entry.CustomIdWarning.IsVisible = true;\n        DisplaceId = GenerateNewId();\n        IsDisplaceId = true;\n    }\n\n    private bool ShouldUpdateCustomId()\n    {\n        return (entry.ForgeListView.SelectedIndex >= 0 ||\n                entry.NeoForgeListView.SelectedIndex >= 0 ||\n                entry.FabricListView.SelectedIndex >= 0 ||\n                entry.QuiltListView.SelectedIndex >= 0 ||\n                entry.OptiFineListView.SelectedIndex >= 0) &&\n               CustomId == GameId;\n    }\n\n    private string GenerateNewId()\n    {\n        if (entry.ForgeListView.SelectedIndex >= 0 && entry.OptiFineListView.SelectedIndex >= 0)\n        {\n            var forge = (ForgeInstallEntry)entry.ForgeListView.SelectedItem;\n            var optifine = (OptifineInstallEntry)entry.OptiFineListView.SelectedItem;\n            return $\"{GameId}-Forge_{forge.ForgeVersion}-Optifine_{optifine.Type}_{optifine.Patch}\";\n        }\n\n        if (entry.ForgeListView.SelectedIndex >= 0)\n        {\n            var forge = (ForgeInstallEntry)entry.ForgeListView.SelectedItem;\n            return $\"{GameId}-Forge {forge.ForgeVersion}\";\n        }\n\n        if (entry.NeoForgeListView.SelectedIndex >= 0)\n        {\n            var neoforge = (ForgeInstallEntry)entry.NeoForgeListView.SelectedItem;\n            return $\"{GameId}-NeoForge {neoforge.ForgeVersion}\";\n        }\n\n        if (entry.OptiFineListView.SelectedIndex >= 0)\n        {\n            var optifine = (OptifineInstallEntry)entry.OptiFineListView.SelectedItem;\n            return $\"{GameId}-Optifine {optifine.Type} {optifine.Patch}\";\n        }\n\n        if (entry.FabricListView.SelectedIndex >= 0)\n        {\n            var fabric = (FabricInstallEntry)entry.FabricListView.SelectedItem;\n            return $\"{GameId}-Fabric {fabric.BuildVersion}\";\n        }\n\n        if (entry.QuiltListView.SelectedIndex < 0) return string.Empty;\n        var quilt = (QuiltInstallEntry)entry.QuiltListView.SelectedItem;\n        return $\"{GameId}-Quilt {quilt.BuildVersion}\";\n    }\n\n    public void UpdateSelection()\n    {\n        SelectedFabric = entry.FabricListView.SelectedItem as FabricInstallEntry != null\n            ? (entry.FabricListView.SelectedItem as FabricInstallEntry).BuildVersion\n            : \"Null\";\n        SelectedQuilt = entry.QuiltListView.SelectedItem as QuiltInstallEntry != null\n            ? (entry.QuiltListView.SelectedItem as QuiltInstallEntry).BuildVersion\n            : \"Null\";\n        SelectedForge = entry.ForgeListView.SelectedItem as ForgeInstallEntry != null\n            ? (entry.ForgeListView.SelectedItem as ForgeInstallEntry).ForgeVersion\n            : \"Null\";\n        SelectedNeoForge = entry.NeoForgeListView.SelectedItem as ForgeInstallEntry != null\n            ? (entry.NeoForgeListView.SelectedItem as ForgeInstallEntry).ForgeVersion\n            : \"Null\";\n        SelectedOptiFine = entry.OptiFineListView.SelectedItem as OptifineInstallEntry != null\n            ? $\"{(entry.OptiFineListView.SelectedItem as OptifineInstallEntry).Type} {(entry.OptiFineListView.SelectedItem as OptifineInstallEntry).Patch}\"\n            : \"Null\";\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/ViewModels/LogViewerModel.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.Collections.Specialized;\nusing System.IO;\nusing System.Linq;\nusing Avalonia.Platform.Storage;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing String = System.String;\n\nnamespace YMCL.ViewModels;\n\npublic class LogViewerModel : ReactiveObject\n{\n    public ObservableCollection<LogItemEntry> LogItems { get; } = [];\n    public ObservableCollection<LogItemEntry> DisplayLogItems { get; } = [];\n    [Reactive] public bool AutoScrollToEnd { get; set; } = true;\n    [Reactive] public bool Error { get; set; } = true;\n    [Reactive] public bool Info { get; set; } = true;\n    [Reactive] public bool Debug { get; set; } = true;\n    [Reactive] public bool Fatal { get; set; } = true;\n    [Reactive] public bool Warning { get; set; } = true;\n    [Reactive] public bool Exception { get; set; } = true;\n    [Reactive] public bool StackTrace { get; set; } = true;\n    [Reactive] public bool Unknown { get; set; } = true;\n\n    public LogViewerModel(Action scrollToEndAction)\n    {\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName is not (nameof(Error) or nameof(Info) or nameof(Debug) or nameof(Fatal)\n                or nameof(Warning) or nameof(Exception) or nameof(StackTrace) or nameof(Unknown))) return;\n            Filter();\n            if (AutoScrollToEnd)\n                scrollToEndAction?.Invoke();\n        };\n        LogItems.CollectionChanged += (_, e) =>\n        {\n            if (e is { Action: NotifyCollectionChangedAction.Add, NewItems: not null })\n            {\n                // 增量更新\n                var newItems = e.NewItems.Cast<LogItemEntry>()\n                    .Where(IsItemVisible)\n                    .ToList();\n\n                if (newItems.Count <= 0) return;\n                foreach (var item in newItems)\n                {\n                    DisplayLogItems.Add(item);\n                }\n            }\n            else\n            {\n                // 全量更新\n                Filter();\n            }\n\n            if (AutoScrollToEnd)\n                scrollToEndAction?.Invoke();\n        };\n    }\n\n\n    public void Filter()\n    {\n        DisplayLogItems.Clear();\n        LogItems.Where(a => a.Type switch\n            {\n                LogType.Error => Error,\n                LogType.Info => Info,\n                LogType.Debug => Debug,\n                LogType.Fatal => Fatal,\n                LogType.Warning => Warning,\n                LogType.Exception => Exception,\n                LogType.StackTrace => StackTrace,\n                LogType.Unknown => Unknown,\n                _ => true\n            })\n            .ToList().ForEach(a => { DisplayLogItems.Add(a); });\n    }\n\n    private bool IsItemVisible(LogItemEntry item)\n    {\n        return item.Type switch\n        {\n            LogType.Error => Error,\n            LogType.Info => Info,\n            LogType.Debug => Debug,\n            LogType.Fatal => Fatal,\n            LogType.Warning => Warning,\n            LogType.Exception => Exception,\n            LogType.StackTrace => StackTrace,\n            LogType.Unknown => Unknown,\n            _ => true\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/ViewModels/MainViewModel.cs",
    "content": "﻿using CommunityToolkit.Mvvm.ComponentModel;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Views.Main.Pages;\n\nnamespace YMCL.ViewModels;\n\npublic class MainViewModel : ReactiveObject\n{\n    public static Rect _frameBounds = new();\n    public static readonly About _about = new();\n    public static readonly Search _search = new(false);\n    public static readonly Download _download = new();\n    public static readonly More _more = new();\n    public static readonly Music _music = new();\n    public static readonly Setting _setting = new();\n    public static readonly YMCL.Views.Main.Pages.Task _task = new();\n    public static readonly Launch _launch = new();\n    public UserControl _currentPage = _launch;\n    [Reactive] public UserControl CurrentPage { get; set; }\n    public About About => _about;\n    public Search Search => _search;\n    public Download Download => _download;\n    public More More => _more;\n    public Music Music => _music;\n    public Setting Setting => _setting;\n    public YMCL.Views.Main.Pages.Task Task => _task;\n    public Launch Launch => _launch;\n\n    public void TogglePage(string page)\n    {\n        CurrentPage = page switch\n        {\n            \"about\" => _about,\n            \"search\" => _search,\n            \"download\" => _download,\n            \"more\" => _more,\n            \"music\" => _music,\n            \"setting\" => _setting,\n            \"task\" => _task,\n            \"launch\" => _launch,\n            _ => null\n        };\n        _ = Public.Module.Ui.Animator.PageLoading.LevelOnePage(CurrentPage);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/ViewModels/NotifyPropertyModelBase.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Runtime.CompilerServices;\n\nnamespace YMCL.ViewModels;\n\npublic class NotifyPropertyModelBase : INotifyPropertyChanged\n{\n    public event PropertyChangedEventHandler? PropertyChanged;\n\n    protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    protected bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return false;\n        field = value;\n        OnPropertyChanged(propertyName);\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/ViewModels/TaskEntryModel.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.Timers;\nusing ReactiveUI;\nusing ReactiveUI.Fody.Helpers;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.ViewModels;\n\npublic class TaskEntryModel : ReactiveObject\n{\n    private readonly Timer _timer = new();\n    private double _totalTime;\n    [Reactive] public ObservableCollection<SubTask> SubTasks { get; set; }\n    [Reactive] public ObservableCollection<TaskEntryOperateButtonEntry> OperateButtons { get; set; } = [];\n    [Reactive] public double Time { get; set; }\n    [Reactive] public TaskState State { get; set; }\n    [Reactive] public bool NumberValue { get; set; }\n    [Reactive] public bool IsDestroyButtonVisible { get; set; }\n    [Reactive] public bool CanRemove { get; set; }\n    [Reactive] public bool ButtonIsEnable { get; set; } = true;\n    [Reactive] public double Value { get; set; }\n    [Reactive] public string Name { get; set; }\n    [Reactive] public string TopRightInfo { get; set; }\n    [Reactive] public string BottomLeftInfo { get; set; }\n    [Reactive] public double DisplayProgress { get; set; }\n    [Reactive] public bool DisplayIsIndeterminate { get; set; }\n    [Reactive] public string ButtonDisplay { get; set; }\n    [Reactive] public Action ButtonAction { get; set; }\n    [Reactive] public Action DestoryAction { get; set; }\n    [Reactive] public TaskEntry Instance { get; set; }\n\n\n    public TaskEntryModel(TaskEntry entry, TaskState state, ObservableCollection<SubTask>? subTasks)\n    {\n        _timer.Interval = 500;\n        _timer.Elapsed += OnTimerElapsed!;\n        Instance = entry;\n        State = state;\n        SubTasks = subTasks ?? [];\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(State))\n            {\n                Refresh();\n            }\n            if (e.PropertyName == nameof(CanRemove))\n            {\n                UpdateButtonDisplay();\n            }\n        };\n        Refresh();\n    }\n\n    private void Refresh()\n    {\n        HandleStateChange(State);\n        GetDisplayProgress();\n        UpdateButtonDisplay();\n        GetIsIndeterminate();\n    }\n\n    private void HandleStateChange(TaskState newState)\n    {\n        switch (newState)\n        {\n            case TaskState.Running:\n            case TaskState.Canceling:\n            case TaskState.Waiting:\n                _timer.Start();\n                break;\n\n            case TaskState.Paused:\n            case TaskState.Error:\n            case TaskState.Finished:\n            case TaskState.Canceled:\n                _timer.Stop();\n                break;\n        }\n        IsDestroyButtonVisible = State is TaskState.Canceling or TaskState.Paused or TaskState.Canceled or TaskState.Error;\n    }\n\n    private void OnTimerElapsed(object sender, ElapsedEventArgs e)\n    {\n        _totalTime += _timer.Interval;\n        Time = _totalTime;\n    }\n\n    private void UpdateButtonDisplay()\n    {\n        ButtonDisplay = CanRemove ? MainLang.Remove : MainLang.Cancel;\n        if (CanRemove)\n        {\n            ButtonAction = () =>\n            {\n                Instance.Destroy();\n                DestoryAction?.Invoke();\n            };\n        }\n    }\n\n    public void GetDisplayProgress()\n    {\n        if (!NumberValue)\n        {\n            DisplayProgress = State switch\n            {\n                TaskState.Finished => 100,\n                TaskState.Error => 50,\n                TaskState.Canceled => 50,\n                TaskState.Paused => 50,\n                _ => Value\n            };\n        }\n        else\n        {\n            DisplayProgress = Math.Round(Value, 1);\n        }\n    }\n\n    public void GetIsIndeterminate()\n    {\n        if (!NumberValue)\n        {\n            DisplayIsIndeterminate = State switch\n            {\n                TaskState.Finished => false,\n                TaskState.Error => false,\n                TaskState.Canceled => false,\n                TaskState.Paused => false,\n                _ => true\n            };\n        }\n        else\n        {\n            DisplayIsIndeterminate = State switch\n            {\n                TaskState.Canceling => true,\n                _ => false\n            };\n        }\n    }\n\n    private TaskEntryModel GetEntry()\n    {\n        return this;\n    }\n\n    public void ButtonActionCommand()\n    {\n        ButtonAction?.Invoke();\n    }\n    public void DestroyCommand()\n    {\n        Instance.Destroy();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/ViewModels/ViewModelBase.cs",
    "content": "﻿using CommunityToolkit.Mvvm.ComponentModel;\n\nnamespace YMCL.ViewModels;\n\npublic abstract class ViewModelBase : ObservableObject\n{\n}\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/CrashWindow.axaml",
    "content": "﻿<u:UrsaWindow\n    FontFamily=\"{DynamicResource Font}\"\n    FontWeight=\"{DynamicResource FontWeight}\"\n    IsCloseButtonVisible=\"False\"\n    IsFullScreenButtonVisible=\"False\"\n    IsHitTestVisible=\"True\"\n    IsMinimizeButtonVisible=\"False\"\n    IsRestoreButtonVisible=\"False\"\n    IsTitleBarVisible=\"False\"\n    MinHeight=\"310\"\n    MinWidth=\"450\"\n    SystemDecorations=\"Full\"\n    Title=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.UnhandledException}\"\n    WindowStartupLocation=\"CenterScreen\"\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.CrashWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:uc=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:views=\"clr-namespace:YMCL.Views\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Window.Styles>\n        <Style Selector=\"Window\">\n            <Setter Property=\"Background\">\n                <Setter.Value>\n                    <SolidColorBrush Color=\"#00ACFF00\" Opacity=\"0\" />\n                </Setter.Value>\n            </Setter>\n        </Style>\n    </Window.Styles>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"8,8,8,8\"\n        x:Name=\"Root\">\n        <DockPanel>\n            <uc:TitleBar\n                DockPanel.Dock=\"Top\"\n                IsCloseBtnShow=\"True\"\n                IsMaxBtnShow=\"False\"\n                IsVisible=\"False\"\n                Name=\"TitleBar\"\n                Title=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.UnhandledException}\" />\n            <Border Background=\"{DynamicResource 2x}\" Opacity=\"{DynamicResource MainOpacity}\">\n                <DockPanel>\n                    <TextBlock\n                        DockPanel.Dock=\"Top\"\n                        FontSize=\"18\"\n                        Margin=\"20,10,15,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CrashLa}\"\n                        TextWrapping=\"Wrap\" />\n                    <TextBlock\n                        DockPanel.Dock=\"Top\"\n                        Margin=\"20,5,15,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.UnhandledErrorTip}\"\n                        TextWrapping=\"Wrap\" />\n                    <DockPanel DockPanel.Dock=\"Bottom\" VerticalAlignment=\"Bottom\">\n                        <Separator DockPanel.Dock=\"Top\" Margin=\"20,0\" />\n                        <DockPanel Margin=\"0,10\">\n                            <Button\n                                DockPanel.Dock=\"Left\"\n                                HorizontalAlignment=\"Left\"\n                                Margin=\"10,0,0,0\"\n                                Name=\"Copy\">\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <Image Margin=\"0,0,5,0\" Width=\"14\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource SystemAccentColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"F1 M 3.125 20 C 2.871094 20 2.630208 19.951172 2.402344 19.853516 C 2.174479 19.755859 1.974284 19.620768 1.801758 19.448242 C 1.629232 19.275717 1.494141 19.075521 1.396484 18.847656 C 1.298828 18.619791 1.25 18.378906 1.25 18.125 L 1.25 3.125 C 1.25 2.871094 1.298828 2.630209 1.396484 2.402344 C 1.494141 2.17448 1.629232 1.974285 1.801758 1.801758 C 1.974284 1.629232 2.174479 1.494141 2.402344 1.396484 C 2.630208 1.298828 2.871094 1.25 3.125 1.25 L 5.107422 1.25 C 5.172526 1.061199 5.263672 0.890301 5.380859 0.737305 C 5.498047 0.584311 5.634766 0.452475 5.791016 0.341797 C 5.947266 0.231121 6.116536 0.146484 6.298828 0.087891 C 6.48112 0.029297 6.673177 0 6.875 0 L 10.625 0 C 10.826822 0 11.01888 0.029297 11.201172 0.087891 C 11.383463 0.146484 11.552734 0.231121 11.708984 0.341797 C 11.865234 0.452475 12.001953 0.584311 12.119141 0.737305 C 12.236328 0.890301 12.327474 1.061199 12.392578 1.25 L 14.375 1.25 C 14.628906 1.25 14.869791 1.298828 15.097656 1.396484 C 15.32552 1.494141 15.525715 1.629232 15.698242 1.801758 C 15.870768 1.974285 16.005859 2.17448 16.103516 2.402344 C 16.201172 2.630209 16.25 2.871094 16.25 3.125 L 16.25 4.375 C 16.25 4.544271 16.18815 4.690756 16.064453 4.814453 C 15.940754 4.938152 15.79427 5.000001 15.625 5 C 15.488281 5.000001 15.377604 4.973959 15.292969 4.921875 C 15.208333 4.869792 15.144856 4.799805 15.102539 4.711914 C 15.060221 4.624023 15.030924 4.523112 15.014648 4.40918 C 14.998372 4.295248 14.990234 4.179688 14.990234 4.0625 C 14.990234 3.951824 14.993489 3.842773 15 3.735352 C 15.00651 3.62793 15.009766 3.528646 15.009766 3.4375 C 15.009766 3.320312 15.003255 3.206381 14.990234 3.095703 C 14.977213 2.985027 14.949543 2.885742 14.907227 2.797852 C 14.864908 2.709961 14.801432 2.638348 14.716797 2.583008 C 14.63216 2.52767 14.518229 2.5 14.375 2.5 L 12.392578 2.5 C 12.327474 2.688803 12.236328 2.859701 12.119141 3.012695 C 12.001953 3.165691 11.865234 3.297527 11.708984 3.408203 C 11.552734 3.518881 11.383463 3.603516 11.201172 3.662109 C 11.01888 3.720703 10.826822 3.75 10.625 3.75 L 6.875 3.75 C 6.673177 3.75 6.48112 3.720703 6.298828 3.662109 C 6.116536 3.603516 5.947266 3.518881 5.791016 3.408203 C 5.634766 3.297527 5.498047 3.165691 5.380859 3.012695 C 5.263672 2.859701 5.172526 2.688803 5.107422 2.5 L 3.125 2.5 C 2.955729 2.5 2.809245 2.56185 2.685547 2.685547 C 2.561849 2.809246 2.5 2.95573 2.5 3.125 L 2.5 18.125 C 2.5 18.294271 2.561849 18.440756 2.685547 18.564453 C 2.809245 18.68815 2.955729 18.75 3.125 18.75 L 6.875 18.75 C 7.044271 18.75 7.190755 18.81185 7.314453 18.935547 C 7.43815 19.059244 7.5 19.205729 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 Z M 10.625 2.5 C 10.794271 2.5 10.940755 2.438152 11.064453 2.314453 C 11.18815 2.190756 11.25 2.044271 11.25 1.875 C 11.25 1.70573 11.18815 1.559246 11.064453 1.435547 C 10.940755 1.31185 10.794271 1.25 10.625 1.25 L 6.875 1.25 C 6.705729 1.25 6.559244 1.31185 6.435547 1.435547 C 6.311849 1.559246 6.25 1.70573 6.25 1.875 C 6.25 2.044271 6.311849 2.190756 6.435547 2.314453 C 6.559244 2.438152 6.705729 2.5 6.875 2.5 Z M 10.625 20 C 10.371094 20 10.130208 19.951172 9.902344 19.853516 C 9.674479 19.755859 9.474283 19.620768 9.301758 19.448242 C 9.129231 19.275717 8.994141 19.075521 8.896484 18.847656 C 8.798828 18.619791 8.75 18.378906 8.75 18.125 L 8.75 8.125 C 8.75 7.871094 8.798828 7.630209 8.896484 7.402344 C 8.994141 7.174479 9.129231 6.974284 9.301758 6.801758 C 9.474283 6.629232 9.674479 6.494141 9.902344 6.396484 C 10.130208 6.298828 10.371094 6.25 10.625 6.25 L 16.875 6.25 C 17.128906 6.25 17.369791 6.298828 17.597656 6.396484 C 17.82552 6.494141 18.025715 6.629232 18.198242 6.801758 C 18.370768 6.974284 18.505859 7.174479 18.603516 7.402344 C 18.701172 7.630209 18.75 7.871094 18.75 8.125 L 18.75 18.125 C 18.75 18.378906 18.701172 18.619791 18.603516 18.847656 C 18.505859 19.075521 18.370768 19.275717 18.198242 19.448242 C 18.025715 19.620768 17.82552 19.755859 17.597656 19.853516 C 17.369791 19.951172 17.128906 20 16.875 20 Z M 16.875 18.75 C 17.04427 18.75 17.190754 18.68815 17.314453 18.564453 C 17.43815 18.440756 17.5 18.294271 17.5 18.125 L 17.5 8.125 C 17.5 7.95573 17.43815 7.809246 17.314453 7.685547 C 17.190754 7.56185 17.04427 7.5 16.875 7.5 L 10.625 7.5 C 10.455729 7.5 10.309244 7.56185 10.185547 7.685547 C 10.061849 7.809246 10 7.95573 10 8.125 L 10 18.125 C 10 18.294271 10.061849 18.440756 10.185547 18.564453 C 10.309244 18.68815 10.455729 18.75 10.625 18.75 Z \" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Copy}\" />\n                                </StackPanel>\n                            </Button>\n                            <StackPanel\n                                DockPanel.Dock=\"Right\"\n                                HorizontalAlignment=\"Right\"\n                                Margin=\"0,0,10,0\"\n                                Orientation=\"Horizontal\"\n                                Spacing=\"10\">\n                                <Button Name=\"Continue\">\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <Image Margin=\"0,0,5,0\" Width=\"14\">\n                                            <Image.Source>\n                                                <DrawingImage>\n                                                    <DrawingImage.Drawing>\n                                                        <GeometryDrawing Brush=\"{DynamicResource SystemAccentColor}\">\n                                                            <GeometryDrawing.Geometry>\n                                                                <PathGeometry Figures=\"F1 M 10 12.119141 L 2.558594 19.560547 C 2.421875 19.697266 2.260742 19.804688 2.075195 19.882812 C 1.889648 19.960938 1.699219 20 1.503906 20 C 1.295573 20 1.10026 19.960938 0.917969 19.882812 C 0.735677 19.804688 0.576172 19.697266 0.439453 19.560547 C 0.302734 19.423828 0.195312 19.264322 0.117188 19.082031 C 0.039062 18.89974 0 18.704428 0 18.496094 C 0 18.300781 0.039062 18.110352 0.117188 17.924805 C 0.195312 17.739258 0.302734 17.578125 0.439453 17.441406 L 7.880859 10 L 0.439453 2.558594 C 0.296224 2.415365 0.187174 2.250977 0.112305 2.06543 C 0.037435 1.879883 0 1.689453 0 1.494141 C 0 1.285809 0.039062 1.090496 0.117188 0.908203 C 0.195312 0.725912 0.302734 0.568035 0.439453 0.43457 C 0.576172 0.301107 0.735677 0.195312 0.917969 0.117188 C 1.10026 0.039062 1.295573 0 1.503906 0 C 1.699219 0 1.889648 0.039062 2.075195 0.117188 C 2.260742 0.195312 2.421875 0.302734 2.558594 0.439453 L 10 7.880859 L 17.441406 0.439453 C 17.734375 0.146484 18.089191 0 18.505859 0 C 18.707682 0 18.899738 0.039062 19.082031 0.117188 C 19.264322 0.195312 19.423828 0.302734 19.560547 0.439453 C 19.697266 0.576172 19.804688 0.735678 19.882812 0.917969 C 19.960938 1.100262 20 1.292318 20 1.494141 C 20 1.689453 19.962564 1.879883 19.887695 2.06543 C 19.812824 2.250977 19.703775 2.415365 19.560547 2.558594 L 12.119141 10 L 19.560547 17.441406 C 19.697266 17.578125 19.804688 17.739258 19.882812 17.924805 C 19.960938 18.110352 20 18.300781 20 18.496094 C 20 18.704428 19.960938 18.89974 19.882812 19.082031 C 19.804688 19.264322 19.697266 19.423828 19.560547 19.560547 C 19.423828 19.697266 19.264322 19.804688 19.082031 19.882812 C 18.899738 19.960938 18.704426 20 18.496094 20 C 18.300781 20 18.110352 19.960938 17.924805 19.882812 C 17.739258 19.804688 17.578125 19.697266 17.441406 19.560547 Z \" />\n                                                            </GeometryDrawing.Geometry>\n                                                        </GeometryDrawing>\n                                                    </DrawingImage.Drawing>\n                                                </DrawingImage>\n                                            </Image.Source>\n                                        </Image>\n                                        <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoMatterErrorAndKeepOnRun}\" />\n                                    </StackPanel>\n                                </Button>\n                                <Button Name=\"Exit\">\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <Image Margin=\"0,0,5,0\" Width=\"14\">\n                                            <Image.Source>\n                                                <DrawingImage>\n                                                    <DrawingImage.Drawing>\n                                                        <GeometryDrawing Brush=\"{DynamicResource SystemAccentColor}\">\n                                                            <GeometryDrawing.Geometry>\n                                                                <PathGeometry Figures=\"F1 M 11.25 15.625 C 11.25 15.455729 11.311849 15.309245 11.435547 15.185547 L 16.621094 10 L 1.875 10 C 1.705729 10 1.559245 9.938151 1.435547 9.814453 C 1.311849 9.690756 1.25 9.544271 1.25 9.375 C 1.25 9.205729 1.311849 9.059245 1.435547 8.935547 C 1.559245 8.81185 1.705729 8.75 1.875 8.75 L 16.621094 8.75 L 11.435547 3.564453 C 11.311849 3.440756 11.25 3.294271 11.25 3.125 C 11.25 2.95573 11.311849 2.809246 11.435547 2.685547 C 11.559244 2.56185 11.705729 2.5 11.875 2.5 C 12.04427 2.5 12.190754 2.56185 12.314453 2.685547 L 18.564453 8.935547 C 18.68815 9.059245 18.75 9.205729 18.75 9.375 C 18.75 9.544271 18.68815 9.690756 18.564453 9.814453 L 12.314453 16.064453 C 12.190754 16.188152 12.04427 16.25 11.875 16.25 C 11.705729 16.25 11.559244 16.188152 11.435547 16.064453 C 11.311849 15.940756 11.25 15.794271 11.25 15.625 Z M 1.875 18.75 C 1.705729 18.75 1.559245 18.68815 1.435547 18.564453 C 1.311849 18.440756 1.25 18.294271 1.25 18.125 C 1.25 17.955729 1.311849 17.809244 1.435547 17.685547 C 1.559245 17.56185 1.705729 17.5 1.875 17.5 L 9.375 17.5 C 9.544271 17.5 9.690755 17.56185 9.814453 17.685547 C 9.93815 17.809244 10 17.955729 10 18.125 C 10 18.294271 9.93815 18.440756 9.814453 18.564453 C 9.690755 18.68815 9.544271 18.75 9.375 18.75 Z \" />\n                                                            </GeometryDrawing.Geometry>\n                                                        </GeometryDrawing>\n                                                    </DrawingImage.Drawing>\n                                                </DrawingImage>\n                                            </Image.Source>\n                                        </Image>\n                                        <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ExitApp}\" />\n                                    </StackPanel>\n                                </Button>\n                                <Button\n                                    Classes=\"Primary\"\n                                    Name=\"Restart\"\n                                    Theme=\"{DynamicResource SolidButton}\">\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <Image Margin=\"0,0,5,0\" Width=\"14\">\n                                            <Image.Source>\n                                                <DrawingImage>\n                                                    <DrawingImage.Drawing>\n                                                        <GeometryDrawing Brush=\"White\">\n                                                            <GeometryDrawing.Geometry>\n                                                                <PathGeometry Figures=\"M256,768L384,768C392.6669921875,768 400.1669921875,771.1669921875 406.5,777.5 412.8330078125,783.8330078125 416,791.3330078125 416,800 416,808.6669921875 412.8330078125,816.1669921875 406.5,822.5 400.1669921875,828.8330078125 392.6669921875,832 384,832L256,832C247.33299255371094,832 239.83299255371094,828.8330078125 233.5,822.5 227.16700744628906,816.1669921875 224,808.6669921875 224,800 224,791.3330078125 227.16700744628906,783.8330078125 233.5,777.5 239.83299255371094,771.1669921875 247.33299255371094,768 256,768z M608,384C616.6669921875,384 624.1669921875,387.1669921875 630.5,393.5 636.8330078125,399.8330078125 640,407.3330078125 640,416 640,424.6669921875 636.8330078125,432.1669921875 630.5,438.5L557.5,512 773,512C807.6669921875,512 840.25,518.9169921875 870.75,532.75 901.25,546.5830078125 927.8330078125,565.25 950.5,588.75 973.1669921875,612.25 991.0830078125,639.4169921875 1004.25,670.25 1017.4199829101562,701.0830078125 1024,733.6669921875 1024,768 1024,803.3330078125 1017.3300170898438,836.5830078125 1004,867.75 990.6669921875,898.9169921875 972.4169921875,926.0830078125 949.25,949.25 926.0830078125,972.4169921875 898.9169921875,990.6669921875 867.75,1004 836.5830078125,1017.3300170898438 803.3330078125,1024 768,1024 733.6669921875,1024 701.0830078125,1017.4199829101562 670.25,1004.25 639.4169921875,991.0830078125 612.25,973.1669921875 588.75,950.5 565.25,927.8330078125 546.5830078125,901.25 532.75,870.75 518.9169921875,840.25 512,807.6669921875 512,773 512,763.3330078125 514.5830078125,754.75 519.75,747.25 524.9169921875,739.75 533,736 544,736 554.6669921875,736 562.6669921875,739.5830078125 568,746.75 573.3330078125,753.9169921875 576,762.3330078125 576,772 576,798 581.1669921875,822.4169921875 591.5,845.25 601.8330078125,868.0830078125 615.8330078125,888 633.5,905 651.1669921875,922 671.5830078125,935.4169921875 694.75,945.25 717.9169921875,955.0830078125 742.3330078125,960 768,960 794.6669921875,960 819.6669921875,955 843,945 866.3330078125,935 886.6669921875,921.3330078125 904,904 921.3330078125,886.6669921875 935,866.3330078125 945,843 955,819.6669921875 960,794.6669921875 960,768 960,742.3330078125 955.0830078125,717.9169921875 945.25,694.75 935.4169921875,671.5830078125 922,651.1669921875 905,633.5 888,615.8330078125 868.0830078125,601.8330078125 845.25,591.5 822.4169921875,581.1669921875 798,576 772,576L557.5,576 630.5,649.5C636.8330078125,655.8330078125 640,663.3330078125 640,672 640,680.6669921875 636.8330078125,688.1669921875 630.5,694.5 624.1669921875,700.8330078125 616.6669921875,704 608,704 599.3330078125,704 591.8330078125,700.8330078125 585.5,694.5L457.5,566.5C451.1669921875,560.1669921875 448,552.6669921875 448,544 448,535.3330078125 451.1669921875,527.8330078125 457.5,521.5L585.5,393.5C591.8330078125,387.1669921875,599.3330078125,384,608,384z M125.5,0L514.5,0C531.1669921875,0 547.0830078125,3.4166901111602783 562.25,10.25 577.4169921875,17.08340072631836 590.75,26.250099182128906 602.25,37.75 613.75,49.250099182128906 622.9169921875,62.58340072631836 629.75,77.75 636.5830078125,92.91670227050781 640,108.83300018310547 640,125.5L640,308.5C629.3330078125,305.5 618.6669921875,304 608,304 597,304 586.3330078125,305.5 576,308.5L576,128C576,119.33300018310547 574.3330078125,111.08300018310547 571,103.25 567.6669921875,95.41670227050781 563.0830078125,88.5833969116211 557.25,82.75 551.4169921875,76.91670227050781 544.5830078125,72.3333969116211 536.75,69 528.9169921875,65.66670227050781 520.6669921875,64.0000991821289 512,64L128,64C119,64.0000991821289 110.66699981689453,65.66670227050781 103,69 95.33329772949219,72.3333969116211 88.58329772949219,76.91670227050781 82.75,82.75 76.91670227050781,88.5833969116211 72.33329772949219,95.3333969116211 69,103 65.66670227050781,110.66699981689453 64,119 64,128L64,896C64,905 65.66670227050781,913.4169921875 69,921.25 72.33329772949219,929.0830078125 76.83329772949219,935.8330078125 82.5,941.5 88.16670227050781,947.1669921875 94.91670227050781,951.6669921875 102.75,955 110.58300018310547,958.3330078125 119,960 128,960L492,960C507.6669921875,982 525.5,1001.8300170898438 545.5,1019.5 534.5,1022.5 523.3330078125,1024 512,1024L125.5,1024C108.83300018310547,1024 92.91670227050781,1020.5800170898438 77.75,1013.75 62.58330154418945,1006.9199829101562 49.25,997.75 37.75,986.25 26.25,974.75 17.08329963684082,961.4169921875 10.25,946.25 3.416670083999634,931.0830078125 0,915.1669921875 0,898.5L0,125.5C0,108.83300018310547 3.416670083999634,92.91670227050781 10.25,77.75 17.08329963684082,62.58340072631836 26.25,49.250099182128906 37.75,37.75 49.25,26.250099182128906 62.58330154418945,17.08340072631836 77.75,10.25 92.91670227050781,3.4166901111602783 108.83300018310547,0 125.5,0z\" />\n                                                            </GeometryDrawing.Geometry>\n                                                        </GeometryDrawing>\n                                                    </DrawingImage.Drawing>\n                                                </DrawingImage>\n                                            </Image.Source>\n                                        </Image>\n                                        <TextBlock Foreground=\"White\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.RestartApp}\" />\n                                    </StackPanel>\n                                </Button>\n                            </StackPanel>\n                        </DockPanel>\n                    </DockPanel>\n                    <ScrollViewer DockPanel.Dock=\"Top\" Margin=\"20,10,0,10\">\n                        <SelectableTextBlock\n                            HorizontalAlignment=\"Left\"\n                            Margin=\"0,0,15,0\"\n                            Name=\"Info\"\n                            TextWrapping=\"Wrap\" />\n                    </ScrollViewer>\n                </DockPanel>\n            </Border>\n        </DockPanel>\n    </Border>\n</u:UrsaWindow>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/CrashWindow.axaml.cs",
    "content": "﻿using Ursa.Controls;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.App;\n\nnamespace YMCL.Views;\n\npublic partial class CrashWindow : UrsaWindow\n{\n    public CrashWindow(string exception)\n    {\n        InitializeComponent();\n        Public.Module.Ui.Setter.UpdateWindowStyle(this);\n        \n        Info.Text = exception;\n        Copy.Click += async (_, _) =>\n        {\n            var clipboard = GetTopLevel(this)?.Clipboard;\n            await clipboard.SetTextAsync(exception);\n        };\n        Continue.Click += (_, _) => { Close(); };\n        Restart.Click += (_, _) => { AppMethod.RestartApp(); };\n        Exit.Click += (_, _) => { Environment.Exit(0); };\n        Topmost = true;\n        Loaded += (_, _) =>\n        {\n            Public.Module.Ui.Setter.UpdateWindowStyle(this);\n        };\n        Show();\n        Activate();\n    }\n\n    public CrashWindow()\n    {\n    }\n\n    public sealed override void Show()\n    {\n        base.Show();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/InitializeView.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Initialize.InitializeView\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:vm=\"clr-namespace:YMCL.ViewModels\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid>\n        <ContentControl Name=\"Frame\" Opacity=\"0\">\n            <ContentControl.Transitions>\n                <Transitions>\n                    <DoubleTransition Duration=\"0:0:0.25\" Property=\"Opacity\" />\n                </Transitions>\n            </ContentControl.Transitions>\n        </ContentControl>\n        <Border\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            HorizontalAlignment=\"Left\"\n            Margin=\"20\"\n            VerticalAlignment=\"Bottom\">\n            <DockPanel DockPanel.Dock=\"Bottom\">\n                <Image\n                    Height=\"40\"\n                    HorizontalAlignment=\"Left\"\n                    Margin=\"8,0,0,0\"\n                    VerticalAlignment=\"Center\">\n                    <Image.Source>\n                        <DrawingImage>\n                            <DrawingImage.Drawing>\n                                <DrawingGroup>\n                                    <DrawingGroup.Children>\n                                        <DrawingGroup>\n                                            <DrawingGroup.Children>\n                                                <GeometryDrawing Brush=\"#FF00A0E9\">\n                                                    <GeometryDrawing.Geometry>\n                                                        <PathGeometry Figures=\"M469.5,42.9C470.6,41.5 472.5,42.1 474,41.9 492.8,42 511.7,41.8 530.5,42 534,44.1 538.6,42.3 542.5,43 545.5,45.6 550.4,42.3 553.5,44.9 556.2,45 558.9,44.9 561.5,45 563.3,46.8 566.2,45.6 568.5,46 570.3,48.1 573.7,45.8 575.5,47.8 577.2,47.9 578.9,47.9 580.6,48 581.8000000000001,49.5 583.9,48.8 585.6,49 587.4,51 590.7,48.8 592.5,50.8 593.5,50.9 594.5,50.9 595.6,51 597.1,52.8 600,51 601.5,52.8 602.5,52.9 603.5,52.9 604.6,53 606.1,54.8 609,53 610.5,54.8 611.5,54.9 612.5,54.9 613.6,55 614.9,56.4 617.2,55.4 618.6,56.8 619.1,56.9 620.1,57 620.7,57.099999999999994 622,58.49999999999999 624.3000000000001,57.49999999999999 625.6,58.8 626.1,58.9 627.1,59 627.6,59.099999999999994 628.9,60.49999999999999 631.2,59.49999999999999 632.5,60.8 633,60.9 634,61 634.6,61.099999999999994 635.5,61.699999999999996 636.5,62.099999999999994 637.6,62.199999999999996 639.1,63.3 641.2,62.49999999999999 642.5,63.8 643,63.9 644,64 644.6,64.1 645.5,64.69999999999999 646.5,65.1 647.6,65.19999999999999 648.9,65.69999999999999 650.2,66.1 651.4,66.69999999999999 653.1,67.49999999999999 654.8,67.99999999999999 656.5,68.69999999999999 657.5,68.89999999999999 658.5,69.19999999999999 659.5,69.69999999999999 661,69.99999999999999 662.3,70.6 663.6,71.19999999999999 664.9,71.69999999999999 666.2,72.19999999999999 667.5,72.69999999999999 669.2,73.1 671,73.69999999999999 672.4,74.79999999999998 674,75.49999999999999 675.6999999999999,75.99999999999999 677.4,76.69999999999999 679.4,77.79999999999998 681.6,78.29999999999998 683.6,79.19999999999999 684.1,79.49999999999999 685.1,79.99999999999999 685.6,80.19999999999999 687.7,81.6 690.4,81.99999999999999 692.6,83.19999999999999 693.1,83.39999999999999 694.1,83.99999999999999 694.6,84.19999999999999 695.9,84.89999999999999 697.2,85.6 698.6,86.19999999999999 699.5,86.69999999999999 700.4,87.19999999999999 701.4,87.69999999999999 702.5,88.19999999999999 703.6,88.69999999999999 704.6,89.19999999999999 705.5,89.69999999999999 706.4,90.19999999999999 707.4,90.69999999999999 708.5,91.19999999999999 709.6,91.69999999999999 710.6,92.19999999999999 712.5,93.29999999999998 714.6,94.29999999999998 716.6,95.19999999999999 717.5,95.69999999999999 718.5,96.19999999999999 719.4,96.6 720.8,97.39999999999999 722.1999999999999,98.39999999999999 723.6,99.19999999999999 725.2,99.99999999999999 726.8000000000001,100.79999999999998 728.5,101.6 730.2,102.6 731.7,103.8 733.5,104.69999999999999 735.2,105.6 736.7,106.79999999999998 738.5,107.69999999999999 741.3,109.1 743.6,111.29999999999998 746.5,112.69999999999999 756.4,118.99999999999999 766.2,125.49999999999999 775.4,132.7 780.1999999999999,136.5 785.6,139.7 789.9,144.2 793,145.6 794.6999999999999,148.79999999999998 797.6999999999999,150.29999999999998 799.8,151.49999999999997 800.9999999999999,153.7 802.9999999999999,155.2 807.0999999999999,157.6 809.8999999999999,161.6 813.3999999999999,164.7 818.3999999999999,167.79999999999998 822.0999999999999,172.7 826.3999999999999,176.7 829.5999999999999,180.2 833.5999999999999,183 835.8999999999999,187.1 839.0999999999999,190.9 843.3999999999999,193.7 845.8999999999999,198.1 847.4999999999999,200.2 849.8999999999999,201.5 851.0999999999999,203.9 852.3,206.3 854.8999999999999,207.5 856.0999999999999,209.9 857.1999999999999,212.1 859.4999999999999,213.20000000000002 860.6999999999999,215.3 867.1999999999999,224.4 874.4,233 880.4,242.4 883.6999999999999,247.4 887.1999999999999,252.3 890.3,257.4 891.1999999999999,259.5 892.8,261.2 893.6999999999999,263.2 894.5999999999999,264.9 895.9,266.4 896.6999999999999,268.2 897.4999999999999,269.59999999999997 898.4,271 899.3,272.4 899.5,272.9 900,273.9 900.1999999999999,274.4 900.6999999999999,275.29999999999995 901.1999999999999,276.29999999999995 901.5999999999999,277.2 902.3999999999999,278.59999999999997 903.3999999999999,279.9 904.3,281.3 904.5,281.8 905,282.8 905.1999999999999,283.3 905.3999999999999,283.8 905.9,284.8 906.1999999999999,285.3 906.9,286.6 907.5999999999999,287.90000000000003 908.1999999999999,289.3 908.9999999999999,290.6 909.5999999999999,291.90000000000003 910.1999999999999,293.3 910.6999999999999,294.2 911.1999999999999,295.2 911.6999999999999,296.1 911.9,296.6 912.4,297.6 912.6999999999999,298.1 913.3,299.5 913.9,300.8 914.6999999999999,302.1 915.6999999999999,304.1 916.5999999999999,306.20000000000005 917.6999999999999,308.1 918.5999999999999,310.1 919.1999999999999,312.3 920.1999999999999,314.3 920.4999999999999,314.8 920.9999999999999,315.8 921.1999999999999,316.3 922.8,318.7 922.9,321.8 924.6999999999999,324.1 925.5999999999999,326.1 926.0999999999999,328.3 927.1999999999999,330.3 927.6999999999999,331.2 927.9999999999999,332.2 928.1999999999999,333.3 928.8,335 929.4,336.7 930.1999999999999,338.40000000000003 930.6999999999999,339.70000000000005 931.0999999999999,341.00000000000006 931.6999999999999,342.20000000000005 931.9,343.30000000000007 932.1999999999999,344.30000000000007 932.6999999999999,345.20000000000005 932.9999999999999,346.70000000000005 933.5999999999999,348.00000000000006 934.3,349.30000000000007 934.6999999999999,350.20000000000005 935.0999999999999,351.20000000000005 935.3,352.20000000000005 935.6999999999999,353.1 936.0999999999999,354.1 936.3,355.20000000000005 936.8,356.1 937.0999999999999,357.1 937.3,358.20000000000005 938.3,359.70000000000005 937.6999999999999,361.70000000000005 938.8,363.1 938.9,364.20000000000005 939.3,365.20000000000005 939.9,366.1 940,366.6 940.1,367.6 940.1999999999999,368.1 941.4999999999999,369.5 940.5999999999999,371.70000000000005 941.9,373.1 942,373.6 942.1,374.6 942.1999999999999,375.1 943.4999999999999,376.5 942.5999999999999,378.70000000000005 943.9,380.1 944,380.6 944.1,381.6 944.1999999999999,382.1 945.3,383.1 944.9999999999999,384.70000000000005 945.1999999999999,386.1 946.3,387.1 945.9,388.70000000000005 946.1999999999999,390.1 947.3,391.1 946.9,392.70000000000005 947.1999999999999,394.1 948.8,395.70000000000005 947.1999999999999,398.5 948.9,400 948.9,401 949,402 949.1,403 950.5,404.3 949.8000000000001,406.3 950.1,408 952.1,409.8 949.9,413.1 951.9,414.9 952.1999999999999,416.59999999999997 951.5,418.59999999999997 952.9,419.9 953.1999999999999,421.9 952.3,424.29999999999995 953.9,425.9 954.1999999999999,427.9 953.3,430.4 954.9,431.9 955,434.2 954.9,436.59999999999997 955,438.9 956.8,440.7 955.6,443.59999999999997 956,445.9 958.6,449.29999999999995 955.2,454.5 957.9,457.9 958.1,461.59999999999997 957.9,465.29999999999995 958,468.9 959.4,470 958.8,471.9 959,473.4 958.9,491.09999999999997 958.9,508.7 959,526.4 958.8,527.9 959.5,529.8 958,530.9 957.8,534.6 958,538.3 957.9,541.9 955.3,545.3 958.6999999999999,550.5 956,553.9 955.5,556.5 956.9,559.6999999999999 955,561.9 954.9,563.9 954.9,565.9 954.9,567.9 953.3,569.4 954.1999999999999,571.9 953.9,573.9 952.3,575.4 953.1999999999999,577.9 952.9,579.9 951.1,581.4 952.9,584.3 951.1,585.9 950.8000000000001,587.9 951.7,590.3 950.1,591.9 949.8000000000001,593.6 950.5,595.6 949.1,596.9 949,597.9 949,598.9 948.9,599.9 947.1,601.4 948.8,604.1999999999999 947.1999999999999,605.8 946.9,607.0999999999999 947.3,608.6999999999999 946.1999999999999,609.8 945.9,611.0999999999999 946.3,612.6999999999999 945.1999999999999,613.8 944.9,615.0999999999999 945.3,616.8 944.1999999999999,617.8 944.0999999999999,618.3 943.9999999999999,619.3 943.9,619.8 942.5,621.0999999999999 943.5,623.4 942.1999999999999,624.8 942.0999999999999,625.3 941.9999999999999,626.3 941.9,626.9 940.5,628.1999999999999 941.5,630.5 940.1999999999999,631.8 940.0999999999999,632.3 939.9999999999999,633.3 939.9,633.8 939.3,634.6999999999999 938.9,635.6999999999999 938.8,636.8 937.6999999999999,638.3 938.5,640.4 937.1999999999999,641.8 937.0999999999999,642.3 936.9999999999999,643.3 936.9,643.8 936.3,644.6999999999999 935.9,645.6999999999999 935.8,646.8 935.0999999999999,648.5 934.5999999999999,650.1999999999999 933.8,651.9 933.3,653.1999999999999 932.9,654.5 932.1999999999999,655.8 932.0999999999999,656.3 931.9999999999999,657.3 931.9,657.8 931.1999999999999,659 930.8,660.4 930.3,661.6999999999999 929.5999999999999,662.9999999999999 929,664.4 928.6999999999999,665.8 928.1999999999999,667.0999999999999 927.8,668.4 927.3,669.6999999999999 926,671.9 925.8,674.5999999999999 924.1999999999999,676.6999999999999 923.3,678.6999999999999 922.6999999999999,680.9 921.8,682.9999999999999 921.3,683.8999999999999 920.6999999999999,684.7999999999998 920.1999999999999,685.6999999999999 919.3,687.6999999999999 918.6999999999999,689.9 917.6999999999999,691.9999999999999 917.4,692.4999999999999 916.9,693.4999999999999 916.6999999999999,693.9999999999999 915.8,695.5999999999999 915.0999999999999,697.1999999999999 914.1999999999999,698.7999999999998 913.6999999999999,699.8999999999999 913.1999999999999,700.8999999999999 912.6999999999999,701.9999999999999 911.9,703.1999999999999 911.3,704.5999999999999 910.6999999999999,705.9999999999999 909.4,708.1999999999999 908.4999999999999,710.5999999999999 907.1999999999999,712.7999999999998 906.5999999999999,714.1999999999998 905.9999999999999,715.4999999999999 905.1999999999999,716.7999999999998 904.9999999999999,717.2999999999998 904.4999999999999,718.2999999999998 904.3,718.7999999999998 903.4,720.1999999999998 902.5,721.4999999999999 901.6999999999999,722.8999999999999 901.1999999999999,723.7999999999998 900.6999999999999,724.7999999999998 900.3,725.6999999999998 899.5,727.9999999999998 897.9,729.7999999999998 896.8,731.8999999999999 895.9,733.9999999999999 894.3,735.6999999999998 893.4,737.6999999999998 892.5,739.3999999999999 891.1999999999999,740.8999999999999 890.4,742.6999999999998 885.6999999999999,750.1999999999998 880.6,757.3999999999999 875.8,764.7999999999998 869.1999999999999,772.9999999999999 863.5,781.8999999999999 856.5,789.6999999999998 855.3,792.2999999999998 852.5,793.6999999999998 851.2,796.1999999999998 849.8000000000001,798.7999999999998 847,800.0999999999998 845.8000000000001,802.7999999999998 843.0000000000001,806.2999999999998 839.5000000000001,809.1999999999998 836.4000000000001,812.4999999999999 833.1000000000001,817.6999999999999 828.1000000000001,821.4999999999999 823.9000000000001,825.9999999999999 820.6000000000001,828.9999999999999 817.9000000000001,832.7999999999998 814.0000000000001,834.9999999999999 810.7000000000002,837.7999999999998 808.1000000000001,841.2999999999998 804.7000000000002,843.8999999999999 801.1000000000001,845.6999999999998 799.2000000000002,849.7999999999998 795.6000000000001,851.5999999999999 794.1000000000001,852.3999999999999 793.2000000000002,854.0999999999999 791.7000000000002,854.8999999999999 788.9000000000002,856.1999999999998 787.4000000000002,859.1999999999998 784.6000000000001,860.5999999999999 772.0000000000001,870.3 759.3000000000002,879.6999999999999 745.7000000000002,887.9999999999999 742.9000000000002,889.4999999999999 740.6000000000001,891.6999999999999 737.7000000000002,892.9999999999999 736.0000000000001,893.8999999999999 734.5000000000001,895.1999999999999 732.7000000000002,895.9999999999999 731.2000000000002,896.7999999999998 729.9000000000002,897.7999999999998 728.5000000000001,898.5999999999999 728.0000000000001,898.8 727.0000000000001,899.3 726.5000000000001,899.4999999999999 725.6000000000001,899.9999999999999 724.6000000000001,900.4999999999999 723.7000000000002,900.8999999999999 720.9000000000002,902.8999999999999 717.8000000000002,904.3999999999999 714.7000000000002,905.8999999999999 713.6000000000001,906.3999999999999 712.5000000000001,906.8999999999999 711.5000000000001,907.3999999999999 709.6000000000001,908.4999999999999 707.5000000000001,909.4999999999999 705.5000000000001,910.3999999999999 704.6000000000001,910.8999999999999 703.7000000000002,911.3999999999999 702.7000000000002,911.8999999999999 701.6000000000001,912.3999999999999 700.5000000000001,912.8999999999999 699.5000000000001,913.3999999999999 698.2000000000002,914.1999999999998 696.9000000000001,914.7999999999998 695.5000000000001,915.3999999999999 694.6000000000001,915.8999999999999 693.7000000000002,916.3999999999999 692.8000000000001,916.8999999999999 690.7,917.7999999999998 688.6,918.3999999999999 686.5000000000001,919.3999999999999 686.0000000000001,919.6999999999998 685.0000000000001,920.1999999999998 684.5000000000001,920.3999999999999 682.3000000000001,921.7999999999998 679.7000000000002,922.1999999999998 677.5000000000001,923.3999999999999 675.8000000000001,924.0999999999999 674.1000000000001,924.5999999999999 672.5000000000001,925.2999999999998 670.8000000000001,926.5999999999998 668.6000000000001,926.9999999999999 666.7000000000002,927.7999999999998 665.2000000000002,928.0999999999998 663.9000000000002,928.6999999999998 662.6000000000001,929.3999999999999 661.3000000000002,929.8999999999999 660.0000000000001,930.2999999999998 658.7000000000002,930.7999999999998 657.6000000000001,930.9999999999999 656.6000000000001,931.2999999999998 655.7000000000002,931.7999999999998 654.7000000000002,931.9999999999999 653.7000000000002,932.2999999999998 652.8000000000002,932.7999999999998 651.2000000000002,933.5999999999998 649.4000000000002,934.0999999999998 647.7000000000002,934.7999999999998 646.6000000000001,934.8999999999999 645.6000000000001,935.2999999999998 644.7000000000002,935.8999999999999 644.2000000000002,935.9999999999999 643.2000000000002,936.0999999999999 642.7000000000002,936.1999999999998 641.3000000000002,937.4999999999998 639.2000000000002,936.6999999999998 637.8000000000002,937.7999999999998 636.7000000000002,937.8999999999999 635.7000000000002,938.2999999999998 634.8000000000002,938.8999999999999 634.3000000000002,938.9999999999999 633.3000000000002,939.0999999999999 632.8000000000002,939.1999999999998 631.4000000000002,940.4999999999998 629.2000000000002,939.5999999999998 627.8000000000002,940.8999999999999 627.3000000000002,940.9999999999999 626.3000000000002,941.0999999999999 625.8000000000002,941.1999999999998 624.4000000000002,942.4999999999998 622.2000000000002,941.5999999999998 620.8000000000002,942.8999999999999 620.3000000000002,942.9999999999999 619.3000000000002,943.0999999999999 618.7000000000002,943.1999999999998 617.4000000000002,944.5999999999998 615.1000000000001,943.4999999999998 613.8000000000002,944.9999999999998 612.8000000000002,945.0999999999998 611.8000000000002,945.0999999999998 610.8000000000002,945.1999999999998 609.2000000000002,946.9999999999998 606.4000000000002,945.1999999999998 604.9000000000002,946.9999999999998 603.9000000000002,946.9999999999998 602.8000000000002,947.0999999999998 601.8000000000002,947.1999999999998 600.3000000000002,948.9999999999998 597.4000000000002,947.1999999999998 595.9000000000002,948.9999999999998 594.9000000000002,948.9999999999998 593.9000000000002,949.0999999999998 592.9000000000002,949.1999999999998 591.3000000000002,950.7999999999998 588.9000000000002,949.8999999999999 586.9000000000002,950.1999999999998 585.6000000000003,951.6999999999998 583.6000000000003,950.8999999999999 581.9000000000002,951.1999999999998 580.3000000000002,952.7999999999998 577.9000000000002,951.8999999999999 575.9000000000002,952.1999999999998 574.1000000000003,954.2999999999998 570.7000000000002,951.8999999999999 569.0000000000002,954.0999999999998 566.7000000000003,954.4999999999998 563.8000000000002,953.2999999999998 562.0000000000002,955.0999999999998 559.6000000000003,955.1999999999998 557.3000000000002,955.0999999999998 555.0000000000002,955.1999999999998 551.9000000000002,957.2999999999998 547.6000000000003,955.4999999999998 544.0000000000002,956.1999999999998 540.3000000000002,958.8999999999999 534.7000000000003,955.3999999999999 531.0000000000002,958.0999999999998 511.0000000000002,958.1999999999998 491.0000000000002,958.1999999999998 471.0000000000002,958.0999999999998 467.30000000000024,955.3999999999997 461.7000000000002,958.8999999999997 458.0000000000002,956.1999999999998 454.60000000000025,955.9999999999998 451.30000000000024,956.1999999999998 448.0000000000002,956.0999999999998 445.9000000000002,953.7999999999998 442.10000000000025,956.4999999999998 440.0000000000002,954.1999999999998 437.7000000000002,954.0999999999998 435.30000000000024,954.0999999999998 433.0000000000002,954.0999999999998 431.2000000000002,951.9999999999998 427.80000000000024,954.2999999999998 426.0000000000002,952.2999999999998 424.30000000000024,952.1999999999998 422.60000000000025,952.1999999999998 421.0000000000002,952.0999999999998 419.7000000000002,950.5999999999998 417.60000000000025,951.2999999999998 416.0000000000002,951.0999999999998 414.2000000000002,949.0999999999998 410.9000000000002,951.2999999999998 409.0000000000002,949.2999999999998 408.0000000000002,949.1999999999998 407.0000000000002,949.1999999999998 406.0000000000002,949.0999999999998 404.4000000000002,947.2999999999998 401.60000000000025,949.0999999999998 400.0000000000002,947.2999999999998 399.0000000000002,947.1999999999998 398.0000000000002,947.1999999999998 397.0000000000002,947.0999999999998 395.4000000000002,945.2999999999998 392.7000000000002,946.9999999999998 391.0000000000002,945.3999999999997 389.60000000000025,945.0999999999998 388.0000000000002,945.4999999999998 387.0000000000002,944.3999999999997 385.60000000000025,944.0999999999998 384.0000000000002,944.4999999999998 383.0000000000002,943.3999999999997 382.5000000000002,943.2999999999997 381.5000000000002,943.1999999999997 381.0000000000002,943.0999999999998 379.60000000000025,941.6999999999998 377.4000000000002,942.6999999999998 376.0000000000002,941.3999999999997 375.5000000000002,941.2999999999997 374.5000000000002,941.1999999999997 374.0000000000002,941.0999999999998 372.60000000000025,939.6999999999998 370.4000000000002,940.6999999999998 369.0000000000002,939.3999999999997 368.5000000000002,939.2999999999997 367.5000000000002,939.1999999999997 367.0000000000002,939.0999999999998 366.10000000000025,938.4999999999998 365.10000000000025,938.0999999999998 364.0000000000002,937.9999999999998 362.5000000000002,936.8999999999997 360.4000000000002,937.6999999999998 359.0000000000002,936.3999999999997 358.5000000000002,936.2999999999997 357.5000000000002,936.1999999999997 357.0000000000002,936.0999999999998 356.10000000000025,935.4999999999998 355.10000000000025,935.0999999999998 354.0000000000002,934.9999999999998 352.7000000000002,934.4999999999998 351.4000000000002,934.0999999999998 350.10000000000025,933.5999999999998 348.80000000000024,932.8999999999997 347.40000000000026,932.2999999999998 346.0000000000002,931.9999999999998 345.0000000000002,931.4999999999998 344.0000000000002,931.1999999999998 343.0000000000002,930.9999999999998 341.7000000000002,930.4999999999998 340.4000000000002,930.0999999999998 339.10000000000025,929.4999999999998 337.80000000000024,928.7999999999997 336.40000000000026,928.1999999999998 335.0000000000002,927.8999999999997 333.30000000000024,927.1999999999997 331.60000000000025,926.6999999999997 329.9000000000002,925.9999999999998 328.2000000000002,924.6999999999998 326.0000000000002,924.2999999999997 324.1000000000002,923.4999999999998 321.9000000000002,922.1999999999998 319.2000000000002,921.8999999999997 317.1000000000002,920.4999999999998 316.6000000000002,920.2999999999997 315.6000000000002,919.6999999999998 315.1000000000002,919.4999999999998 313.1000000000002,918.4999999999998 310.9000000000002,917.9999999999998 308.9000000000002,916.9999999999998 307.4000000000002,915.9999999999998 305.7000000000002,915.3999999999997 304.1000000000002,914.4999999999998 302.3000000000002,913.6999999999998 300.6000000000002,912.7999999999997 298.9000000000002,911.9999999999998 297.6000000000002,911.1999999999998 296.3000000000002,910.5999999999998 294.9000000000002,909.9999999999998 293.6000000000002,909.1999999999998 292.3000000000002,908.5999999999998 290.9000000000002,907.9999999999998 289.3000000000002,907.0999999999998 287.7000000000002,906.3999999999997 286.1000000000002,905.4999999999998 284.7000000000002,904.8999999999997 283.4000000000002,904.1999999999998 282.1000000000002,903.5999999999998 280.7000000000002,902.6999999999998 279.4000000000002,901.7999999999998 278.00000000000017,900.9999999999998 277.00000000000017,900.4999999999998 276.1000000000002,899.9999999999998 275.20000000000016,899.5999999999998 274.70000000000016,899.3999999999997 273.70000000000016,898.8999999999997 273.20000000000016,898.6999999999998 271.50000000000017,897.6999999999998 270.00000000000017,896.4999999999998 268.20000000000016,895.5999999999998 266.8000000000002,894.7999999999998 265.40000000000015,893.7999999999998 264.00000000000017,892.9999999999998 261.1000000000002,891.6999999999998 258.8000000000002,889.4999999999998 256.00000000000017,887.9999999999998 242.40000000000018,879.7999999999997 229.70000000000016,870.2999999999997 217.10000000000016,860.5999999999998 214.50000000000017,859.3999999999997 213.10000000000016,856.5999999999998 210.60000000000016,855.2999999999998 208.20000000000016,854.0999999999998 207.00000000000017,851.4999999999999 204.60000000000016,850.2999999999998 202.20000000000016,849.0999999999998 200.90000000000018,846.5999999999998 198.80000000000015,845.0999999999998 194.20000000000016,842.4999999999998 191.40000000000015,837.7999999999998 187.20000000000016,834.6999999999998 184.70000000000016,833.3999999999999 182.90000000000015,830.9999999999998 180.90000000000015,829.0999999999998 176.40000000000015,824.5999999999998 171.80000000000015,820.0999999999998 167.40000000000015,815.4999999999998 164.20000000000016,809.8999999999997 158.10000000000014,806.6999999999998 154.90000000000015,801.0999999999998 153.70000000000016,799.5999999999998 152.00000000000014,798.4999999999998 151.00000000000014,796.8999999999997 149.50000000000014,793.8999999999997 146.30000000000015,792.1999999999997 144.90000000000015,789.0999999999998 140.80000000000015,785.1999999999998 137.80000000000015,780.1999999999998 134.30000000000015,775.7999999999998 125.80000000000015,764.9999999999999 118.20000000000016,753.4999999999999 110.90000000000015,741.8999999999999 110.00000000000014,740.1999999999998 108.70000000000014,738.6999999999998 107.90000000000015,736.8999999999999 107.10000000000015,735.4999999999999 106.10000000000015,734.0999999999999 105.30000000000015,732.6999999999998 104.50000000000016,730.8999999999999 103.20000000000016,729.3999999999999 102.20000000000016,727.6999999999998 102.00000000000016,727.1999999999998 101.50000000000016,726.1999999999998 101.30000000000015,725.6999999999998 100.80000000000015,724.7999999999998 100.30000000000015,723.7999999999998 99.90000000000015,722.8999999999999 99.10000000000015,721.4999999999999 98.10000000000015,720.0999999999999 97.30000000000015,718.6999999999998 96.50000000000016,717.0999999999998 95.80000000000015,715.3999999999999 94.90000000000015,713.8999999999999 94.30000000000015,712.4999999999999 93.70000000000014,711.1999999999998 92.90000000000015,709.8999999999999 92.30000000000015,708.4999999999999 91.70000000000014,707.1999999999998 90.90000000000015,705.8999999999999 90.70000000000014,705.3999999999999 90.10000000000015,704.3999999999999 89.90000000000015,703.8999999999999 89.30000000000015,702.4999999999999 88.60000000000015,701.1999999999998 87.90000000000015,699.8999999999999 87.40000000000015,698.7999999999998 86.90000000000015,697.6999999999998 86.40000000000015,696.6999999999998 85.50000000000014,695.1999999999998 84.80000000000015,693.4999999999998 83.90000000000015,691.8999999999999 82.80000000000015,689.5999999999999 82.40000000000015,686.9999999999999 81.00000000000014,684.8999999999999 80.70000000000014,684.3999999999999 80.20000000000014,683.3999999999999 80.00000000000014,682.8999999999999 79.00000000000014,680.8999999999999 78.50000000000014,678.6999999999998 77.50000000000014,676.6999999999998 76.20000000000014,674.9999999999998 75.80000000000014,672.8999999999999 75.00000000000014,670.8999999999999 74.30000000000014,669.5999999999999 73.70000000000014,668.1999999999998 73.40000000000015,666.7999999999998 72.80000000000015,665.0999999999998 72.20000000000014,663.3999999999999 71.40000000000015,661.6999999999998 70.90000000000015,660.3999999999999 70.40000000000015,659.0999999999998 69.80000000000015,657.7999999999998 69.70000000000016,657.2999999999998 69.60000000000015,656.2999999999998 69.50000000000016,655.7999999999998 68.70000000000016,654.1999999999998 68.20000000000016,652.3999999999999 67.40000000000016,650.6999999999998 66.90000000000016,649.7999999999998 66.60000000000016,648.7999999999998 66.40000000000016,647.7999999999998 65.90000000000016,646.8999999999999 65.60000000000016,645.8999999999999 65.40000000000016,644.7999999999998 64.90000000000016,643.7999999999998 64.60000000000016,642.7999999999998 64.40000000000016,641.7999999999998 63.40000000000016,640.2999999999998 63.90000000000016,638.2999999999998 62.90000000000016,636.8999999999999 62.80000000000016,635.7999999999998 62.40000000000016,634.7999999999998 61.80000000000016,633.8999999999999 61.70000000000016,633.3999999999999 61.60000000000016,632.3999999999999 61.50000000000016,631.8999999999999 60.200000000000166,630.4999999999999 61.100000000000165,628.2999999999998 59.80000000000016,626.9999999999999 59.70000000000016,626.4999999999999 59.60000000000016,625.4999999999999 59.50000000000016,624.8999999999999 58.200000000000166,623.4999999999999 59.100000000000165,621.2999999999998 57.80000000000016,619.8999999999999 57.70000000000016,619.3999999999999 57.60000000000016,618.3999999999999 57.50000000000016,617.7999999999998 56.100000000000165,616.4999999999999 57.200000000000166,614.1999999999998 55.700000000000166,612.8999999999999 55.600000000000165,611.8999999999999 55.600000000000165,610.8999999999999 55.50000000000016,609.8999999999999 53.700000000000166,608.2999999999998 55.50000000000016,605.4999999999999 53.700000000000166,603.8999999999999 53.600000000000165,602.8999999999999 53.600000000000165,601.8999999999999 53.50000000000016,600.8999999999999 51.700000000000166,599.2999999999998 53.50000000000016,596.4999999999999 51.700000000000166,594.8999999999999 51.600000000000165,593.8999999999999 51.600000000000165,592.8999999999999 51.50000000000016,591.8999999999999 49.90000000000016,590.2999999999998 50.80000000000016,587.8999999999999 50.50000000000016,585.8999999999999 48.700000000000166,584.3999999999999 50.50000000000016,581.4999999999999 48.700000000000166,579.8999999999999 48.600000000000165,578.1999999999998 48.600000000000165,576.4999999999999 48.50000000000016,574.8999999999999 46.40000000000016,573.0999999999999 48.700000000000166,569.6999999999998 46.600000000000165,567.8999999999999 46.200000000000166,565.5999999999999 47.40000000000016,562.6999999999998 45.600000000000165,560.8999999999999 45.50000000000016,558.1999999999998 45.600000000000165,555.4999999999999 45.50000000000016,552.7999999999998 42.90000000000016,549.7999999999998 46.200000000000166,544.8999999999999 43.600000000000165,541.8999999999999 43.40000000000016,538.1999999999998 43.600000000000165,534.4999999999999 43.50000000000016,530.7999999999998 42.100000000000165,529.6999999999998 42.700000000000166,527.7999999999998 42.50000000000016,526.2999999999998 42.600000000000165,507.59999999999985 42.40000000000016,488.99999999999983 42.600000000000165,470.29999999999984 42.80000000000017,469.89999999999986 43.30000000000017,469.09999999999985 43.50000000000016,468.6999999999998 43.700000000000166,464.99999999999983 43.50000000000016,461.29999999999984 43.600000000000165,457.6999999999998 46.200000000000166,454.5999999999998 42.90000000000016,449.79999999999984 45.50000000000016,446.6999999999998 46.00000000000016,444.0999999999998 44.600000000000165,440.8999999999998 46.50000000000016,438.6999999999998 46.600000000000165,436.3999999999998 46.50000000000016,433.99999999999983 46.600000000000165,431.6999999999998 48.200000000000166,430.1999999999998 47.30000000000017,427.6999999999998 47.600000000000165,425.6999999999998 49.700000000000166,423.8999999999998 47.40000000000016,420.49999999999983 49.40000000000016,418.6999999999998 49.50000000000016,417.29999999999984 49.50000000000016,415.99999999999983 49.600000000000165,414.5999999999998 51.600000000000165,412.7999999999998 49.40000000000016,409.4999999999998 51.40000000000016,407.5999999999998 51.50000000000016,406.5999999999998 51.50000000000016,405.5999999999998 51.600000000000165,404.5999999999998 53.40000000000016,402.9999999999998 51.600000000000165,400.1999999999998 53.40000000000016,398.5999999999998 53.50000000000016,397.5999999999998 53.50000000000016,396.5999999999998 53.600000000000165,395.5999999999998 55.40000000000016,393.9999999999998 53.600000000000165,391.1999999999998 55.40000000000016,389.5999999999998 55.50000000000016,388.5999999999998 55.50000000000016,387.5999999999998 55.600000000000165,386.5999999999998 57.00000000000016,385.2999999999998 56.00000000000016,382.9999999999998 57.40000000000016,381.5999999999998 57.50000000000016,381.0999999999998 57.600000000000165,380.0999999999998 57.70000000000016,379.5999999999998 59.10000000000016,378.2999999999998 58.10000000000016,375.9999999999998 59.40000000000016,374.5999999999998 59.50000000000016,374.0999999999998 59.600000000000165,373.0999999999998 59.70000000000016,372.5999999999998 61.000000000000156,371.1999999999998 60.20000000000016,369.0999999999998 61.30000000000016,367.5999999999998 61.50000000000016,366.4999999999998 61.80000000000016,365.4999999999998 62.40000000000016,364.5999999999998 62.50000000000016,364.0999999999998 62.600000000000165,363.0999999999998 62.70000000000016,362.5999999999998 64.10000000000016,361.1999999999998 63.10000000000016,358.9999999999998 64.40000000000016,357.6999999999998 64.50000000000016,357.1999999999998 64.60000000000016,356.1999999999998 64.70000000000016,355.6999999999998 65.30000000000015,354.79999999999984 65.70000000000016,353.79999999999984 65.80000000000015,352.6999999999998 66.50000000000016,350.99999999999983 67.00000000000016,349.29999999999984 67.80000000000015,347.5999999999998 68.30000000000015,346.2999999999998 68.80000000000015,344.9999999999998 69.30000000000015,343.7999999999998 69.50000000000016,342.69999999999976 69.80000000000015,341.69999999999976 70.30000000000015,340.7999999999998 70.50000000000016,339.7999999999998 70.80000000000015,338.7999999999998 71.30000000000015,337.8999999999998 72.00000000000016,336.5999999999998 72.60000000000015,335.1999999999998 72.90000000000015,333.7999999999998 73.70000000000014,331.7999999999998 74.10000000000015,329.69999999999976 75.40000000000015,327.9999999999998 76.10000000000015,326.39999999999975 76.60000000000015,324.5999999999998 77.30000000000015,322.9999999999998 78.30000000000015,320.9999999999998 78.90000000000015,318.7999999999998 79.80000000000015,316.7999999999998 80.30000000000015,315.8999999999998 80.90000000000015,314.9999999999998 81.40000000000015,314.0999999999998 82.30000000000015,311.9999999999998 82.90000000000015,309.8999999999998 83.80000000000015,307.7999999999998 84.80000000000015,306.2999999999998 85.40000000000015,304.5999999999998 86.30000000000015,302.9999999999998 86.80000000000015,301.89999999999975 87.30000000000015,300.89999999999975 87.80000000000015,299.7999999999998 88.60000000000015,298.4999999999998 89.20000000000016,297.19999999999976 89.80000000000015,295.7999999999998 90.70000000000016,294.19999999999976 91.40000000000015,292.5999999999998 92.30000000000015,290.9999999999998 92.50000000000016,290.4999999999998 93.00000000000016,289.4999999999998 93.30000000000015,288.9999999999998 93.60000000000015,288.4999999999998 94.10000000000015,287.4999999999998 94.30000000000015,286.9999999999998 94.80000000000015,285.89999999999975 95.30000000000015,284.7999999999998 95.80000000000015,283.7999999999998 96.30000000000015,282.8999999999998 96.80000000000015,281.8999999999998 97.20000000000016,280.9999999999998 98.00000000000016,279.5999999999998 99.00000000000016,278.19999999999976 99.90000000000016,276.89999999999975 100.10000000000016,276.39999999999975 100.60000000000016,275.39999999999975 100.80000000000017,274.89999999999975 101.30000000000017,273.9999999999998 101.80000000000017,272.9999999999998 102.20000000000017,272.09999999999974 103.20000000000017,270.39999999999975 104.40000000000018,268.89999999999975 105.20000000000017,267.09999999999974 106.10000000000018,265.39999999999975 107.40000000000018,263.89999999999975 108.20000000000017,262.09999999999974 109.00000000000017,260.69999999999976 110.00000000000017,259.2999999999997 110.80000000000017,257.89999999999975 116.70000000000017,248.49999999999974 122.80000000000017,239.19999999999976 129.30000000000018,230.29999999999976 134.6000000000002,223.59999999999977 139.30000000000018,216.29999999999976 145.1000000000002,209.99999999999974 146.30000000000018,207.39999999999975 149.1000000000002,205.99999999999974 150.4000000000002,203.39999999999975 151.6000000000002,200.99999999999974 154.0000000000002,199.69999999999976 155.6000000000002,197.59999999999974 158.5000000000002,192.39999999999975 164.2000000000002,189.49999999999974 167.1000000000002,184.19999999999973 173.0000000000002,178.09999999999974 179.1000000000002,172.09999999999974 185.2000000000002,166.19999999999973 190.40000000000018,163.29999999999973 193.30000000000018,157.59999999999974 198.6000000000002,154.69999999999973 200.5000000000002,153.29999999999973 201.80000000000018,151.09999999999974 203.9000000000002,149.79999999999973 206.9000000000002,148.29999999999973 208.6000000000002,145.09999999999974 211.70000000000022,143.69999999999973 216.00000000000023,139.29999999999973 221.4000000000002,136.09999999999974 226.20000000000022,132.19999999999973 235.4000000000002,124.89999999999974 245.20000000000022,118.49999999999973 255.10000000000022,112.19999999999973 258.0000000000002,110.89999999999974 260.30000000000024,108.59999999999974 263.10000000000025,107.19999999999973 264.90000000000026,106.29999999999973 266.40000000000026,105.09999999999974 268.10000000000025,104.19999999999973 269.90000000000026,103.39999999999974 271.40000000000026,102.09999999999974 273.10000000000025,101.19999999999973 274.0000000000002,100.69999999999973 275.0000000000002,100.29999999999973 275.90000000000026,99.79999999999973 276.40000000000026,99.59999999999972 277.40000000000026,99.09999999999972 277.90000000000026,98.89999999999972 279.30000000000024,97.99999999999972 280.60000000000025,97.09999999999972 282.0000000000003,96.19999999999972 283.6000000000003,95.39999999999972 285.3000000000003,94.69999999999972 286.8000000000003,93.79999999999971 287.9000000000003,93.29999999999971 288.9000000000003,92.79999999999971 290.0000000000003,92.29999999999971 291.3000000000003,91.49999999999972 292.6000000000003,90.89999999999971 294.0000000000003,90.29999999999971 295.3000000000003,89.49999999999972 296.6000000000003,88.89999999999971 298.0000000000003,88.29999999999971 299.6000000000003,87.39999999999971 301.2000000000003,86.69999999999972 302.8000000000003,85.79999999999971 304.8000000000003,84.79999999999971 306.9000000000003,83.89999999999971 308.8000000000003,82.79999999999971 310.8000000000003,81.89999999999971 313.0000000000003,81.29999999999971 315.1000000000003,80.39999999999971 316.0000000000003,79.89999999999971 316.9000000000003,79.29999999999971 317.8000000000003,78.79999999999971 319.8000000000003,77.89999999999971 322.0000000000003,77.39999999999971 324.0000000000003,76.29999999999971 325.90000000000026,75.49999999999972 328.1000000000003,75.09999999999971 329.8000000000003,73.79999999999971 331.5000000000003,73.09999999999971 333.2000000000003,72.49999999999972 334.9000000000003,71.89999999999971 336.4000000000003,71.59999999999971 337.70000000000033,70.9999999999997 339.00000000000034,70.29999999999971 340.30000000000035,69.79999999999971 341.60000000000036,69.29999999999971 342.9000000000003,68.79999999999971 344.00000000000034,68.59999999999971 345.00000000000034,68.29999999999971 345.9000000000003,67.79999999999971 346.9000000000003,67.59999999999971 347.9000000000003,67.29999999999971 348.8000000000003,66.79999999999971 350.1000000000003,66.09999999999971 351.5000000000003,65.49999999999972 352.9000000000003,65.19999999999972 354.20000000000033,64.69999999999972 355.6000000000003,64.29999999999971 356.8000000000003,63.59999999999972 357.3000000000003,63.499999999999716 358.3000000000003,63.399999999999714 358.8000000000003,63.29999999999972 360.2000000000003,61.99999999999972 362.3000000000003,62.79999999999972 363.7000000000003,61.69999999999972 364.8000000000003,61.59999999999972 365.8000000000003,61.19999999999972 366.7000000000003,60.59999999999972 367.2000000000003,60.499999999999716 368.2000000000003,60.399999999999714 368.7000000000003,60.29999999999972 370.10000000000025,58.89999999999972 372.3000000000003,59.89999999999972 373.7000000000003,58.59999999999972 374.2000000000003,58.499999999999716 375.2000000000003,58.399999999999714 375.7000000000003,58.29999999999972 377.0000000000003,56.89999999999972 379.3000000000003,57.89999999999972 380.60000000000025,56.59999999999972 381.10000000000025,56.499999999999716 382.10000000000025,56.399999999999714 382.60000000000025,56.29999999999972 384.0000000000002,54.89999999999972 386.2000000000003,55.99999999999972 387.60000000000025,54.49999999999972 388.60000000000025,54.39999999999972 389.60000000000025,54.29999999999972 390.60000000000025,54.29999999999972 392.10000000000025,52.49999999999972 395.0000000000002,54.29999999999972 396.5000000000002,52.49999999999972 397.5000000000002,52.39999999999972 398.5000000000002,52.39999999999972 399.5000000000002,52.29999999999972 401.10000000000025,50.49999999999972 403.9000000000002,52.29999999999972 405.5000000000002,50.49999999999972 406.5000000000002,50.39999999999972 407.5000000000002,50.39999999999972 408.5000000000002,50.29999999999972 410.30000000000024,48.29999999999972 413.60000000000025,50.49999999999972 415.5000000000002,48.49999999999972 417.2000000000002,48.199999999999726 419.2000000000002,48.89999999999972 420.5000000000002,47.49999999999972 422.5000000000002,47.199999999999726 424.9000000000002,48.099999999999724 426.5000000000002,46.49999999999972 428.5000000000002,46.199999999999726 431.0000000000002,47.099999999999724 432.5000000000002,45.49999999999972 435.10000000000025,44.99999999999972 438.30000000000024,46.39999999999972 440.5000000000002,44.49999999999972 442.80000000000024,44.39999999999972 445.2000000000002,44.49999999999972 447.5000000000002,44.39999999999972 450.60000000000025,41.89999999999972 455.4000000000002,45.099999999999724 458.5000000000002,42.49999999999972 462.2,42.9 465.8,43.1 469.5,42.9 M482.3,126.4C394.1,130.4 307.8,167 243.8,227.8 198.20000000000002,270.6 163.70000000000002,325.1 144.4,384.6 127.9,435.1 122.4,489.20000000000005 128.4,542.1 137.20000000000002,622.3000000000001 172.8,699.3 228.4,757.7 278.9,811.5 345.9,849.6 417.9,865.8000000000001 484.09999999999997,880.9000000000001 554.4,877.4000000000001 618.8,855.9000000000001 664.5999999999999,840.7 707.4,816.5000000000001 744.0999999999999,785.1000000000001 781.9999999999999,752.8000000000002 813.1999999999999,712.8000000000002 835.4999999999999,668.3000000000002 863.6999999999999,612.1000000000001 877.3999999999999,548.8000000000002 874.7999999999998,486.1000000000002 871.9999999999999,409.20000000000016 844.5999999999998,333.5000000000002 797.5999999999998,272.6000000000002 753.2999999999998,214.6000000000002 691.4999999999998,170.2000000000002 622.4999999999998,146.6000000000002 577.6,130.9 529.7,124.1 482.3,126.4z\" />\n                                                    </GeometryDrawing.Geometry>\n                                                </GeometryDrawing>\n                                            </DrawingGroup.Children>\n                                        </DrawingGroup>\n                                        <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                            <GeometryDrawing.Geometry>\n                                                <EllipseGeometry\n                                                    Center=\"500.8,500.6\"\n                                                    RadiusX=\"402.8\"\n                                                    RadiusY=\"402.8\" />\n                                            </GeometryDrawing.Geometry>\n                                        </GeometryDrawing>\n                                        <DrawingGroup>\n                                            <DrawingGroup.Children>\n                                                <GeometryDrawing Brush=\"#FF515151\">\n                                                    <GeometryDrawing.Geometry>\n                                                        <PathGeometry Figures=\"M404.6,172.5C414.1,165.2 426.20000000000005,161.1 438.20000000000005,161.2 483.00000000000006,161.2 527.9000000000001,161.2 572.8000000000001,161.2 578.5000000000001,161.2 584.3000000000001,161.1 589.8000000000001,162.39999999999998 605.4000000000001,165.59999999999997 619.2,176.09999999999997 626.6,190.09999999999997 633.8000000000001,203.59999999999997 634.8000000000001,220.29999999999995 629.2,234.59999999999997 622.1,253.59999999999997 603.6,267.2 583.3000000000001,268.99999999999994 583.3000000000001,323.99999999999994 583.3000000000001,379.19999999999993 583.3000000000001,434.19999999999993 583.4000000000001,444.79999999999995 582.4000000000001,455.69999999999993 584.6,466.0999999999999 588.7,485.8999999999999 596.1,504.8999999999999 603.9,523.4999999999999 608.8,534.2999999999998 613.1,545.5999999999999 619.6,555.5999999999999 649.2,603.9999999999999 678.9,652.5999999999999 708.3000000000001,700.9999999999999 712.7,708.2999999999998 717.5000000000001,715.5999999999999 720.9000000000001,723.2999999999998 727.8000000000001,738.9999999999999 730.8000000000001,756.8999999999999 726.7,773.6999999999998 723.9000000000001,785.8999999999999 717.2,796.9999999999998 707.5,804.9999999999998 698.4,812.3999999999997 687,816.8999999999997 675.2,817.3999999999997 565,817.6999999999997 454.70000000000005,817.7999999999997 344.50000000000006,818.1999999999997 329.70000000000005,818.2999999999997 314.90000000000003,812.4999999999997 304.40000000000003,801.9999999999997 294.00000000000006,791.6999999999997 288.20000000000005,777.3999999999996 287.3,762.8999999999996 286,743.8999999999996 292.7,725.1999999999996 303.1,709.6999999999996 333.70000000000005,658.4999999999995 364.20000000000005,607.3999999999996 394.8,556.0999999999996 401.6,545.2999999999996 407,533.4999999999995 412.1,521.7999999999996 418.5,507.39999999999964 424.3,492.89999999999964 428.6,477.89999999999964 430.90000000000003,470.0999999999996 432.5,461.99999999999966 432.5,453.7999999999996 432.9,422.6999999999996 432.5,391.5999999999996 432.4,360.39999999999964 432.4,329.7999999999996 432.4,299.49999999999966 432.4,268.89999999999964 418.7,267.69999999999965 405.29999999999995,260.89999999999964 396.4,250.49999999999963 386.7,239.49999999999963 381.7,224.39999999999964 383.4,209.89999999999964 384.9,195.4 392.7,181.4 404.6,172.5L404.6,172.5z M434.7,201.8C428.59999999999997,203 423.5,208.8 423.5,215.20000000000002 423.3,222.10000000000002 429.2,228.50000000000003 436.1,229.00000000000003 442.8,229.50000000000003 449.6,228.70000000000002 456.3,229.40000000000003 465.90000000000003,230.80000000000004 473.3,240.10000000000002 473,249.80000000000004 473.2,294.6 472.9,339.50000000000006 473.2,384.40000000000003 473.3,408.00000000000006 473.5,431.50000000000006 473.09999999999997,455.1 473.09999999999997,473.40000000000003 467.4,491 461.4,508.20000000000005 453.79999999999995,528.7 444.9,548.8000000000001 434.7,568.2 401,624.7 367.2,681.3000000000001 333.4,737.9000000000001 329.7,744.3000000000001 327.4,751.7 327.59999999999997,759.2 327.79999999999995,764.8000000000001 329.49999999999994,770.6 333.59999999999997,774.4000000000001 337.09999999999997,777.6000000000001 342.09999999999997,778.3000000000001 346.59999999999997,778.3000000000001 453.19999999999993,778.1 559.8,777.9000000000001 666.4,777.6 670.9,777.5 675.9,778.4 680,775.8000000000001 685.8,772.4000000000001 688.4,765.5000000000001 688.7,759.1 688.9000000000001,749.8000000000001 685.5,740.8000000000001 680.9000000000001,732.9 647.5000000000001,678.1999999999999 614.1000000000001,623.5 580.8000000000001,568.8 570.8000000000001,549.1999999999999 562.3000000000001,528.6999999999999 554.9000000000001,507.99999999999994 549.2,490.8999999999999 543.9000000000001,473.3999999999999 543.2,455.19999999999993 543.2,387.49999999999994 543.2,319.69999999999993 543.2,251.99999999999994 542.9000000000001,242.29999999999995 549.1,232.09999999999994 558.9000000000001,229.79999999999995 566.3000000000001,228.39999999999995 574.2,229.99999999999994 581.8000000000001,228.79999999999995 588.7,227.39999999999995 593.9000000000001,220.09999999999997 592.4000000000001,213.09999999999997 591.4000000000001,206.29999999999995 584.7,200.99999999999997 577.7,201.39999999999998 531.5,201.39999999999998 485.30000000000007,201.39999999999998 439.1,201.39999999999998 437.7,201.5 436.1,201.6 434.7,201.8z\" />\n                                                    </GeometryDrawing.Geometry>\n                                                </GeometryDrawing>\n                                                <GeometryDrawing Brush=\"#FF515151\">\n                                                    <GeometryDrawing.Geometry>\n                                                        <PathGeometry Figures=\"M461.5,629.2C483.6,629 505.8,629.2 527.9,629.1 533.6999999999999,628.9 539.6,630.9 543.6,635 549.5,640.7 551.2,650.1 547.7,657.5 544.6,664.4 537.4000000000001,669.3 529.7,669.3 507.50000000000006,669.3 485.20000000000005,669.3 462.90000000000003,669.3 456.50000000000006,669.4 450.3,666.0999999999999 446.70000000000005,661 442.30000000000007,655 441.70000000000005,646.4 445.30000000000007,639.9 448.5,634 454.7,629.6 461.5,629.2z\" />\n                                                    </GeometryDrawing.Geometry>\n                                                </GeometryDrawing>\n                                                <GeometryDrawing Brush=\"#FF515151\">\n                                                    <GeometryDrawing.Geometry>\n                                                        <PathGeometry Figures=\"M407.6,705.1C412.40000000000003,704 417.3,704.4 422.3,704.3000000000001 429.5,704.4000000000001 437,704.1 444.2,704.4000000000001 454.5,705.1000000000001 463,715.0000000000001 462.3,725.4000000000001 462.1,735.4000000000001 453.2,744.2 443.2,744.5000000000001 432.9,744.6000000000001 422.7,744.6000000000001 412.3,744.5000000000001 402.5,744.4000000000001 393.7,736.1000000000001 393,726.3000000000001 391.8,716.9 398.5,707.4 407.6,705.1z\" />\n                                                    </GeometryDrawing.Geometry>\n                                                </GeometryDrawing>\n                                                <GeometryDrawing Brush=\"#FF515151\">\n                                                    <GeometryDrawing.Geometry>\n                                                        <PathGeometry Figures=\"M507.4,705.9C511.09999999999997,704.8 515.1,705.1 519,705 545.5,705 572.1,705 598.8,705 605.5999999999999,704.8 612.3,708.4 615.9,714.1 620.3,720.7 620.1999999999999,729.8000000000001 615.8,736.2 612.1999999999999,741.8000000000001 605.5,745.3000000000001 598.8,745.1 570.5,745.1 542.3,745.1 514,745.1 508,745.2 501.9,742.7 498.1,738.1 493.5,732.8000000000001 492,725.1 494.40000000000003,718.5 496.2,712.7 501.4,707.9 507.4,705.9z\" />\n                                                    </GeometryDrawing.Geometry>\n                                                </GeometryDrawing>\n                                            </DrawingGroup.Children>\n                                        </DrawingGroup>\n                                    </DrawingGroup.Children>\n                                    <DrawingGroup.ClipGeometry>\n                                        <RectangleGeometry Rect=\"0,0,1000,1000\" />\n                                    </DrawingGroup.ClipGeometry>\n                                </DrawingGroup>\n                            </DrawingImage.Drawing>\n                        </DrawingImage>\n                    </Image.Source>\n                </Image>\n                <TextBlock\n                    FontSize=\"22\"\n                    Margin=\"15,0,0,0\"\n                    Text=\"Yu Minecraft Launcher\"\n                    VerticalAlignment=\"Center\" />\n            </DockPanel>\n        </Border>\n        <StackPanel\n            HorizontalAlignment=\"Right\"\n            Margin=\"25\"\n            Orientation=\"Horizontal\"\n            Spacing=\"10\"\n            VerticalAlignment=\"Bottom\">\n            <Button\n                Content=\"←\"\n                Name=\"Precious\"\n                Width=\"90\" />\n            <Button\n                Classes=\"Success\"\n                Content=\"→\"\n                Name=\"Next\"\n                Width=\"90\" />\n        </StackPanel>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/InitializeView.axaml.cs",
    "content": "﻿using System.IO;\nusing System.Threading.Tasks;\nusing Irihi.Avalonia.Shared.Helpers;\nusing Newtonsoft.Json;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.App;\nusing YMCL.Views.Initialize.Pages;\n\nnamespace YMCL.Views.Initialize;\n\npublic partial class InitializeView : UserControl\n{\n    private readonly Language _language = new();\n    private readonly MinecraftFolder _minecraftFolder = new();\n    private readonly JavaRuntime _javaRuntime = new();\n    private readonly Account _account = new();\n    private int _page = 1;\n\n    public InitializeView()\n    {\n        InitializeComponent();\n        BindingEvent();\n    }\n\n    public InitializeView(int page)\n    {\n        InitializeComponent();\n        BindingEvent();\n        UpdatePageAnimation(page);\n    }\n\n    public void UpdatePageAnimation(int page)\n    {\n        var animation = Frame.Transitions[0];\n        Frame.Transitions.Clear();\n        _page = page;\n        Frame.Opacity = 0;\n        Frame.Content = page switch\n        {\n            1 => _language,\n            2 => _minecraftFolder,\n            3 => _javaRuntime,\n            4 => _account,\n            _ => Frame.Content\n        };\n        if (page == 1 && Data.SettingEntry.Language == new Public.Classes.Data.Language())\n            Data.SettingEntry.Language = Data.Langs[0];\n        Frame.Transitions.Add(animation);\n        Frame.Opacity = 1;\n        FinishInit(page);\n    }\n\n    private void FinishInit(int page)\n    {\n        if (page == 2 && Data.SettingEntry.Language.Code == null)\n        {\n            Data.SettingEntry.Language = Data.Langs[0];\n            File.WriteAllText(ConfigPath.SettingDataPath,\n                JsonConvert.SerializeObject(Data.SettingEntry, Formatting.Indented));\n        }\n        if (page == 3)\n        {\n            Data.SettingEntry.IsCompleteMinecraftFolderInitialize = true;\n            File.WriteAllText(ConfigPath.SettingDataPath,\n                JsonConvert.SerializeObject(Data.SettingEntry, Formatting.Indented));\n        }\n        if (page == 4)\n        {\n            Data.SettingEntry.IsCompleteJavaInitialize = true;\n            File.WriteAllText(ConfigPath.SettingDataPath,\n                JsonConvert.SerializeObject(Data.SettingEntry, Formatting.Indented));\n        }\n        if (page == 5)\n        {\n            Data.SettingEntry.IsCompleteAccountInitialize = true;\n            File.WriteAllText(ConfigPath.SettingDataPath,\n                JsonConvert.SerializeObject(Data.SettingEntry, Formatting.Indented));\n            AppMethod.RestartApp();\n        }\n    }\n\n    private void BindingEvent()\n    {\n        Next.Click += (_, _) => { UpdatePageAnimation(int.Min(_page + 1, 5)); };\n        Precious.Click += (_, _) => { UpdatePageAnimation(int.Max(_page - 1, 1)); };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/InitializeWindow.axaml",
    "content": "﻿<u:UrsaWindow\n    FontFamily=\"{DynamicResource Font}\"\n    FontWeight=\"{DynamicResource FontWeight}\"\n    Height=\"450\"\n    IsCloseButtonVisible=\"False\"\n    IsFullScreenButtonVisible=\"False\"\n    IsHitTestVisible=\"True\"\n    IsMinimizeButtonVisible=\"False\"\n    IsRestoreButtonVisible=\"False\"\n    IsTitleBarVisible=\"False\"\n    IsVisible=\"True\"\n    SystemDecorations=\"Full\"\n    Title=\"Yu Minecraft Launcher\"\n    Width=\"860\"\n    WindowStartupLocation=\"CenterScreen\"\n    d:DesignHeight=\"0\"\n    d:DesignWidth=\"0\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Initialize.InitializeWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:init=\"clr-namespace:YMCL.Views.Initialize\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:uc=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Window.Styles>\n        <Style Selector=\"Window\">\n            <Setter Property=\"Background\">\n                <Setter.Value>\n                    <SolidColorBrush Color=\"#00ACFF00\" Opacity=\"0\" />\n                </Setter.Value>\n            </Setter>\n        </Style>\n    </Window.Styles>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"8\"\n        x:Name=\"Root\">\n        <Grid>\n            <DockPanel>\n                <uc:TitleBar\n                    DockPanel.Dock=\"Top\"\n                    IsCloseBtnExitApp=\"True\"\n                    IsCloseBtnShow=\"True\"\n                    IsMaxBtnShow=\"False\"\n                    IsVisible=\"False\"\n                    Name=\"TitleBar\"\n                    Title=\"Yu Minecraft Launcher\" />\n                <init:InitializeView Name=\"InitializeView\" />\n            </DockPanel>\n        </Grid>\n    </Border>\n</u:UrsaWindow>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/InitializeWindow.axaml.cs",
    "content": "﻿using Avalonia.Interactivity;\nusing Ursa.Controls;\n\nnamespace YMCL.Views.Initialize;\n\npublic partial class InitializeWindow : UrsaWindow\n{\n    public InitializeWindow(int page)\n    {\n        InitializeComponent();\n        InitializeView.UpdatePageAnimation(page);\n        Public.Module.Ui.Setter.UpdateWindowStyle(this);\n        Loaded += (_, _) =>\n        {\n            Public.Module.Ui.Setter.UpdateWindowStyle(this);\n        };\n    }\n    \n    public InitializeWindow()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/Pages/Account.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Initialize.Pages.Account\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:cl=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:setting=\"clr-namespace:YMCL.Public.Classes.Setting\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid\n        Margin=\"10\"\n        Name=\"AccountRoot\"\n        VerticalAlignment=\"Stretch\">\n        <Grid.Transitions>\n            <Transitions>\n                <DoubleTransition Duration=\"0:0:0.30\" Property=\"Opacity\" />\n            </Transitions>\n        </Grid.Transitions>\n        <DockPanel>\n            <DockPanel Margin=\"60,50,20,50\">\n                <TextBlock\n                    DockPanel.Dock=\"Top\"\n                    FontSize=\"24\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Account}\" />\n                <TextBlock\n                    DockPanel.Dock=\"Top\"\n                    FontSize=\"16\"\n                    Foreground=\"{DynamicResource GrayColor}\"\n                    HorizontalAlignment=\"Left\"\n                    Margin=\"5,5,0,0\"\n                    Name=\"AccountTipTextBlock\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AccountTip}\"\n                    TextWrapping=\"Wrap\"\n                    Width=\"270\" />\n                <WrapPanel\n                    Margin=\"-15,10,0,0\"\n                    Orientation=\"Horizontal\"\n                    VerticalAlignment=\"Top\"\n                    Width=\"270\">\n                    <HyperlinkButton Margin=\"3\" Name=\"AddAccountBtn\">\n                        <StackPanel Orientation=\"Horizontal\" Spacing=\"5\">\n                            <Image Margin=\"0,0,3,0\" Width=\"16\">\n                                <Image.Source>\n                                    <DrawingImage>\n                                        <DrawingImage.Drawing>\n                                            <DrawingGroup>\n                                                <DrawingGroup.Children>\n                                                    <GeometryDrawing Brush=\"{DynamicResource SystemAccentColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"M472.6,535.2C534.3,501.1 576,435.5 576,360 576,249.5 486.5,160 376,160 265.5,160 176,249.5 176,360 176,435.5 217.7,501.1 279.4,535.2 233.09999999999997,550.2 190.79999999999998,576 155.39999999999998,611.4000000000001 96.5,670.3 64,748.6 64,831.9 64,849.6 78.4,864 96.1,864 113.8,864 128.2,849.6 128.2,831.9 128.2,765.8 154,703.5 200.79999999999998,656.8 247.59999999999997,610.0999999999999 309.79999999999995,584.3 376,584.3 442.20000000000005,584.3 504.4,610 551.2,656.8 598,703.5 623.8000000000001,765.6999999999999 623.8000000000001,831.9 623.8000000000001,849.6 638.2,864 655.9000000000001,864 673.6000000000001,864 688.0000000000001,849.6 688.0000000000001,831.9 688.0000000000001,748.6 655.5000000000001,670.3 596.6000000000001,611.4 561.2000000000002,576 518.9000000000001,550.1999999999999 472.60000000000014,535.1999999999999z M280.9,264.9C306.29999999999995,239.49999999999997 340.09999999999997,225.49999999999997 376,225.49999999999997 411.9,225.49999999999997 445.7,239.49999999999997 471.1,264.9 496.5,290.29999999999995 510.5,324.09999999999997 510.5,360 510.5,395.9 496.5,429.7 471.1,455.1 445.70000000000005,480.5 411.90000000000003,494.5 376,494.5 340.1,494.5 306.3,480.5 280.9,455.1 255.49999999999997,429.70000000000005 241.49999999999997,395.90000000000003 241.49999999999997,360 241.49999999999997,324.1 255.49999999999997,290.3 280.9,264.9z M728,384L928,384C945.7,384 960,369.7 960,352 960,334.3 945.7,320 928,320L728,320C710.3,320 696,334.3 696,352 696,369.7 710.3,384 728,384z\" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource SystemAccentColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"M928,480L648,480C630.3,480 616,494.3 616,512 616,529.7 630.3,544 648,544L928,544C945.7,544 960,529.7 960,512 960,494.29999999999995 945.7,480 928,480z M928,640L760,640C742.3,640 728,654.3 728,672 728,689.7 742.3,704 760,704L928,704C945.7,704 960,689.7 960,672 960,654.3 945.7,640 928,640z\" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingGroup.Children>\n                                                <DrawingGroup.ClipGeometry>\n                                                    <RectangleGeometry Rect=\"0,0,1024,1024\" />\n                                                </DrawingGroup.ClipGeometry>\n                                            </DrawingGroup>\n                                        </DrawingImage.Drawing>\n                                    </DrawingImage>\n                                </Image.Source>\n                            </Image>\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AddNewAccount}\"\n                                TextDecorations=\"{x:Null}\" />\n                        </StackPanel>\n                    </HyperlinkButton>\n                </WrapPanel>\n            </DockPanel>\n            <DockPanel>\n                <StackPanel Margin=\"0,10,25,80\" VerticalAlignment=\"Center\">\n                    <TextBlock DockPanel.Dock=\"Top\" FontFamily=\"{DynamicResource Font}\">\n                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ExistingNow}\" />\n                        <Run Text=\":\" />\n                    </TextBlock>\n                    <ListBox\n                        DockPanel.Dock=\"Top\"\n                        Margin=\"0,10,20,0\"\n                        MaxHeight=\"320\"\n                        Name=\"AccountListBox\"\n                        SelectedIndex=\"0\"\n                        VerticalAlignment=\"Top\">\n                        <ListBox.ItemTemplate>\n                            <DataTemplate DataType=\"setting:AccountInfo\">\n                                <Border BorderThickness=\"0,6,0,6\">\n                                    <DockPanel>\n                                        <Border\n                                            ClipToBounds=\"True\"\n                                            CornerRadius=\"3,3,3,3\"\n                                            Height=\"28\"\n                                            Margin=\"2,0,6.5,0\"\n                                            Width=\"28\">\n                                            <Image Source=\"{Binding Bitmap}\" />\n                                        </Border>\n                                        <Grid>\n                                            <TextBlock\n                                                FontFamily=\"{DynamicResource Font}\"\n                                                FontSize=\"14\"\n                                                Text=\"{Binding Name}\" />\n                                            <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                                <TextBlock\n                                                    FontFamily=\"{DynamicResource Font}\"\n                                                    FontSize=\"11\"\n                                                    Foreground=\"{DynamicResource GrayColor}\"\n                                                    Margin=\"0,0,0,0\"\n                                                    Text=\"{Binding AccountType}\" />\n                                                <TextBlock\n                                                    FontFamily=\"{DynamicResource Font}\"\n                                                    FontSize=\"11\"\n                                                    Foreground=\"{DynamicResource GrayColor}\"\n                                                    Margin=\"5,0,0,0\"\n                                                    Text=\"{Binding AddTime}\" />\n                                            </StackPanel>\n                                        </Grid>\n                                    </DockPanel>\n                                </Border>\n                            </DataTemplate>\n                        </ListBox.ItemTemplate>\n                    </ListBox>\n                </StackPanel>\n            </DockPanel>\n        </DockPanel>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/Pages/Account.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Layout;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch.Components.Authenticator;\nusing MinecraftLaunch.Skin;\nusing MinecraftLaunch.Skin.Class.Fetchers;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui;\nusing YMCL.Public.Module.Value;\nusing Setting = YMCL.Public.Enum.Setting;\nusing String = YMCL.Public.Const.String;\n\nnamespace YMCL.Views.Initialize.Pages;\n\npublic partial class Account : UserControl\n{\n    public Account()\n    {\n        InitializeComponent();\n        BindingEvent();\n        AccountListBox.ItemsSource = Data.Accounts;\n    }\n    \n    private void BindingEvent()\n    {\n        AddAccountBtn.Click += async (_, _) =>\n        {\n            await Public.Module.Op.Account.AddByUi(this);\n            Data.SettingEntry.Account = Data.Accounts[^1];\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/Pages/JavaRuntime.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Initialize.Pages.JavaRuntime\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid\n        Margin=\"10\"\n        Name=\"JavaRuntimeRoot\"\n        VerticalAlignment=\"Stretch\">\n        <Grid.Transitions>\n            <Transitions>\n                <DoubleTransition Duration=\"0:0:0.30\" Property=\"Opacity\" />\n            </Transitions>\n        </Grid.Transitions>\n        <DockPanel>\n            <DockPanel Margin=\"60,50,5,50\">\n                <TextBlock\n                    DockPanel.Dock=\"Top\"\n                    FontSize=\"24\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.JavaRuntime}\" />\n                <TextBlock\n                    DockPanel.Dock=\"Top\"\n                    FontSize=\"16\"\n                    Foreground=\"{DynamicResource GrayColor}\"\n                    HorizontalAlignment=\"Left\"\n                    Margin=\"5,5,0,0\"\n                    Name=\"JavaRuntimeTipTextBlock\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.JavaRuntimeTip}\"\n                    TextWrapping=\"Wrap\"\n                    Width=\"240\" />\n                <WrapPanel\n                    Margin=\"-15,10,0,0\"\n                    Orientation=\"Horizontal\"\n                    VerticalAlignment=\"Top\"\n                    Width=\"270\">\n                    <HyperlinkButton Margin=\"3\" Name=\"AutoScanJavaRuntimeBtn\">\n                        <StackPanel Orientation=\"Horizontal\" Spacing=\"5\">\n                            <PathIcon\n                                Data=\"F1 M 18.75 18.125 C 18.75 18.294271 18.68815 18.440756 18.564453 18.564453 C 18.440754 18.68815 18.29427 18.75 18.125 18.75 C 17.955729 18.75 17.809244 18.68815 17.685547 18.564453 L 12.519531 13.398438 C 11.907552 13.912761 11.22233 14.308269 10.463867 14.584961 C 9.705403 14.861654 8.925781 15 8.125 15 C 7.493489 15 6.884765 14.91862 6.298828 14.755859 C 5.712891 14.5931 5.166016 14.361979 4.658203 14.0625 C 4.150391 13.763021 3.686523 13.40332 3.266602 12.983398 C 2.84668 12.563477 2.486979 12.099609 2.1875 11.591797 C 1.888021 11.083984 1.656901 10.537109 1.494141 9.951172 C 1.33138 9.365234 1.25 8.756511 1.25 8.125 C 1.25 7.49349 1.33138 6.884766 1.494141 6.298828 C 1.656901 5.712891 1.888021 5.166016 2.1875 4.658203 C 2.486979 4.150391 2.84668 3.686523 3.266602 3.266602 C 3.686523 2.84668 4.150391 2.48698 4.658203 2.1875 C 5.166016 1.888021 5.712891 1.656902 6.298828 1.494141 C 6.884765 1.331381 7.493489 1.25 8.125 1.25 C 8.75651 1.25 9.365234 1.331381 9.951172 1.494141 C 10.537109 1.656902 11.083984 1.888021 11.591797 2.1875 C 12.099609 2.48698 12.563477 2.84668 12.983398 3.266602 C 13.40332 3.686523 13.763021 4.150391 14.0625 4.658203 C 14.361979 5.166016 14.593099 5.712891 14.755859 6.298828 C 14.918619 6.884766 14.999999 7.49349 15 8.125 C 14.999999 8.925781 14.861652 9.705404 14.584961 10.463867 C 14.308268 11.222331 13.91276 11.907553 13.398438 12.519531 L 18.564453 17.685547 C 18.68815 17.809244 18.75 17.955729 18.75 18.125 Z M 13.75 8.125 C 13.75 7.610678 13.683268 7.114258 13.549805 6.635742 C 13.416341 6.157227 13.227539 5.709636 12.983398 5.292969 C 12.739258 4.876303 12.444661 4.495443 12.099609 4.150391 C 11.754557 3.80534 11.373697 3.510742 10.957031 3.266602 C 10.540364 3.022461 10.092773 2.83366 9.614258 2.700195 C 9.135742 2.566732 8.639322 2.5 8.125 2.5 C 7.35026 2.5 6.621094 2.648113 5.9375 2.944336 C 5.253906 3.240561 4.658203 3.642578 4.150391 4.150391 C 3.642578 4.658204 3.24056 5.253907 2.944336 5.9375 C 2.648112 6.621095 2.5 7.350262 2.5 8.125 C 2.5 8.90625 2.646484 9.638672 2.939453 10.322266 C 3.232422 11.005859 3.632812 11.601562 4.140625 12.109375 C 4.648438 12.617188 5.244141 13.017578 5.927734 13.310547 C 6.611328 13.603516 7.34375 13.75 8.125 13.75 C 8.899739 13.75 9.628906 13.601889 10.3125 13.305664 C 10.996094 13.00944 11.591797 12.607422 12.099609 12.099609 C 12.607421 11.591797 13.009439 10.996094 13.305664 10.3125 C 13.601888 9.628906 13.75 8.89974 13.75 8.125 Z \"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoScan}\"\n                                TextDecorations=\"{x:Null}\" />\n                        </StackPanel>\n                    </HyperlinkButton>\n                    <HyperlinkButton Margin=\"3\" Name=\"ManualAddJavaRuntimeBtn\">\n                        <StackPanel Orientation=\"Horizontal\" Spacing=\"5\">\n                            <PathIcon\n                                Data=\"F1 M 3.056641 18.75 C 2.646484 18.75 2.255859 18.666992 1.884766 18.500977 C 1.513672 18.334961 1.189779 18.113607 0.913086 17.836914 C 0.636393 17.560221 0.415039 17.236328 0.249023 16.865234 C 0.083008 16.494141 0 16.103516 0 15.693359 L 0 4.306641 C 0 3.896484 0.083008 3.505859 0.249023 3.134766 C 0.415039 2.763672 0.636393 2.439779 0.913086 2.163086 C 1.189779 1.886395 1.513672 1.665039 1.884766 1.499023 C 2.255859 1.333008 2.646484 1.25 3.056641 1.25 L 6.875 1.25 C 7.324219 1.25 7.709961 1.319988 8.032227 1.459961 C 8.354492 1.599936 8.644205 1.785482 8.901367 2.016602 C 9.158528 2.247723 9.397786 2.513021 9.619141 2.8125 C 9.840494 3.11198 10.071614 3.42448 10.3125 3.75 L 16.943359 3.75 C 17.353516 3.75 17.744141 3.833008 18.115234 3.999023 C 18.486328 4.165039 18.810221 4.386394 19.086914 4.663086 C 19.363605 4.939779 19.584961 5.263672 19.750977 5.634766 C 19.916992 6.005859 20 6.396484 20 6.806641 L 20 9.902344 C 19.817707 9.674479 19.622395 9.456381 19.414062 9.248047 C 19.205729 9.039714 18.984375 8.847656 18.75 8.671875 L 18.75 6.875 C 18.75 6.621095 18.701172 6.380209 18.603516 6.152344 C 18.505859 5.924479 18.370768 5.724284 18.198242 5.551758 C 18.025715 5.379232 17.82552 5.244142 17.597656 5.146484 C 17.369791 5.048829 17.128906 5.000001 16.875 5 L 10.185547 5 C 9.957682 5.156251 9.736328 5.309246 9.521484 5.458984 C 9.306641 5.608725 9.088541 5.742188 8.867188 5.859375 C 8.645833 5.976562 8.413086 6.070964 8.168945 6.142578 C 7.924805 6.214193 7.65625 6.25 7.363281 6.25 L 1.25 6.25 L 1.25 15.625 C 1.25 15.878906 1.298828 16.119791 1.396484 16.347656 C 1.494141 16.575521 1.629232 16.775717 1.801758 16.948242 C 1.974284 17.120768 2.174479 17.255859 2.402344 17.353516 C 2.630208 17.451172 2.871094 17.5 3.125 17.5 L 7.900391 17.5 C 8.011067 17.721354 8.129883 17.936197 8.256836 18.144531 C 8.383789 18.352865 8.522135 18.554688 8.671875 18.75 Z M 7.363281 5 C 7.539062 5.000001 7.70345 4.977215 7.856445 4.931641 C 8.009439 4.886068 8.154297 4.825847 8.291016 4.750977 C 8.427734 4.676107 8.562825 4.5931 8.696289 4.501953 C 8.829752 4.410808 8.964844 4.316406 9.101562 4.21875 C 8.951822 4.016928 8.805338 3.813477 8.662109 3.608398 C 8.51888 3.40332 8.36263 3.219402 8.193359 3.056641 C 8.024088 2.893881 7.833658 2.760418 7.62207 2.65625 C 7.410481 2.552084 7.161458 2.5 6.875 2.5 L 3.125 2.5 C 2.871094 2.5 2.630208 2.548828 2.402344 2.646484 C 2.174479 2.744141 1.974284 2.879232 1.801758 3.051758 C 1.629232 3.224285 1.494141 3.42448 1.396484 3.652344 C 1.298828 3.880209 1.25 4.121094 1.25 4.375 L 1.25 5 Z M 8.75 14.375 C 8.75 13.600261 8.898111 12.871094 9.194336 12.1875 C 9.49056 11.503906 9.892578 10.908203 10.400391 10.400391 C 10.908203 9.892578 11.503906 9.490561 12.1875 9.194336 C 12.871093 8.898112 13.60026 8.75 14.375 8.75 C 14.889322 8.75 15.385741 8.816732 15.864258 8.950195 C 16.342773 9.083659 16.790363 9.272461 17.207031 9.516602 C 17.623697 9.760742 18.004557 10.055339 18.349609 10.400391 C 18.69466 10.745443 18.989258 11.126303 19.233398 11.542969 C 19.477539 11.959636 19.66634 12.407227 19.799805 12.885742 C 19.933268 13.364258 20 13.860678 20 14.375 C 20 15.14974 19.851887 15.878906 19.555664 16.5625 C 19.259439 17.246094 18.857422 17.841797 18.349609 18.349609 C 17.841797 18.857422 17.246094 19.259439 16.5625 19.555664 C 15.878906 19.851889 15.149739 20 14.375 20 C 13.59375 20 12.861328 19.853516 12.177734 19.560547 C 11.494141 19.267578 10.898438 18.867188 10.390625 18.359375 C 9.882812 17.851562 9.482422 17.255859 9.189453 16.572266 C 8.896484 15.888672 8.75 15.15625 8.75 14.375 Z M 15 15 L 16.875 15 C 17.04427 15 17.190754 14.938151 17.314453 14.814453 C 17.43815 14.690756 17.5 14.544271 17.5 14.375 C 17.5 14.205729 17.43815 14.059245 17.314453 13.935547 C 17.190754 13.81185 17.04427 13.75 16.875 13.75 L 15 13.75 L 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 C 14.205729 11.25 14.059244 11.31185 13.935547 11.435547 C 13.811849 11.559245 13.75 11.705729 13.75 11.875 L 13.75 13.75 L 11.875 13.75 C 11.705729 13.75 11.559244 13.81185 11.435547 13.935547 C 11.311849 14.059245 11.25 14.205729 11.25 14.375 C 11.25 14.544271 11.311849 14.690756 11.435547 14.814453 C 11.559244 14.938151 11.705729 15 11.875 15 L 13.75 15 L 13.75 16.875 C 13.75 17.044271 13.811849 17.190756 13.935547 17.314453 C 14.059244 17.43815 14.205729 17.5 14.375 17.5 C 14.544271 17.5 14.690755 17.43815 14.814453 17.314453 C 14.93815 17.190756 14.999999 17.044271 15 16.875 Z \"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ManualAdd}\"\n                                TextDecorations=\"{x:Null}\" />\n                        </StackPanel>\n                    </HyperlinkButton>\n                </WrapPanel>\n            </DockPanel>\n            <DockPanel>\n                <StackPanel Margin=\"0,10,25,80\" VerticalAlignment=\"Center\">\n                    <TextBlock DockPanel.Dock=\"Top\" FontFamily=\"{DynamicResource Font}\">\n                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ExistingNow}\" />\n                        <Run Text=\":\" />\n                    </TextBlock>\n                    <ListBox\n                        DockPanel.Dock=\"Top\"\n                        Margin=\"0,10,0,0\"\n                        MaxHeight=\"320\"\n                        Name=\"JavaRuntimeListBox\"\n                        SelectedIndex=\"0\"\n                        VerticalAlignment=\"Top\">\n                        <ListBox.ItemTemplate>\n                            <DataTemplate DataType=\"data:JavaEntry\">\n                                <TextBlock\n                                    FontFamily=\"{DynamicResource Font}\"\n                                    Margin=\"0,5\"\n                                    TextWrapping=\"Wrap\">\n                                    <Run Text=\"[\" />\n                                    <Run Text=\"{Binding JavaType}\" />\n                                    <Run Text=\"{Binding JavaVersion}\" />\n                                    <Run Text=\"]\" />\n                                    <Run Text=\"{Binding JavaPath}\" />\n                                </TextBlock>\n                            </DataTemplate>\n                        </ListBox.ItemTemplate>\n                    </ListBox>\n                </StackPanel>\n            </DockPanel>\n        </DockPanel>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/Pages/JavaRuntime.axaml.cs",
    "content": "﻿using System.IO;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Platform.Storage;\nusing MinecraftLaunch.Utilities;\nusing Newtonsoft.Json;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Views.Initialize.Pages;\n\npublic partial class JavaRuntime : UserControl\n{\n    public JavaRuntime()\n    {\n        InitializeComponent();\n        BindingEvent();\n        JavaRuntimeListBox.ItemsSource = Data.JavaRuntimes;\n    }\n\n    private void BindingEvent()\n    {\n        AutoScanJavaRuntimeBtn.Click += (_, _) =>\n        {\n            Public.Module.Op.JavaRuntime.AddByAutoScan();\n        };\n        ManualAddJavaRuntimeBtn.Click += async (_, _) =>\n        {\n            await Public.Module.Op.JavaRuntime.AddByUi(this);\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/Pages/Language.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Initialize.Pages.Language\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:cl=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid\n        Margin=\"10\"\n        Name=\"LanguageRoot\"\n        VerticalAlignment=\"Stretch\">\n        <Grid.Transitions>\n            <Transitions>\n                <DoubleTransition Duration=\"0:0:0.30\" Property=\"Opacity\" />\n            </Transitions>\n        </Grid.Transitions>\n        <DockPanel>\n            <DockPanel Margin=\"60,50\">\n                <TextBlock\n                    DockPanel.Dock=\"Top\"\n                    FontSize=\"24\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Language}\" />\n                <TextBlock\n                    DockPanel.Dock=\"Top\"\n                    FontSize=\"16\"\n                    Foreground=\"{DynamicResource GrayColor}\"\n                    HorizontalAlignment=\"Left\"\n                    Margin=\"5,5,0,0\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LanguageTip}\"\n                    TextWrapping=\"Wrap\"\n                    Width=\"280\" />\n            </DockPanel>\n            <ListBox\n                ItemsSource=\"{Binding Langs}\"\n                Margin=\"0,25,50,0\"\n                Name=\"LanguageListBox\"\n                SelectedItem=\"{Binding SettingEntry.Language}\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate DataType=\"data:Language\">\n                        <StackPanel Margin=\"0,7,0,7\">\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"16\"\n                                Text=\"{Binding Label}\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Foreground=\"{DynamicResource GrayColor}\"\n                                Margin=\"0,-4,0,0\"\n                                Text=\"{Binding Code}\" />\n                        </StackPanel>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </DockPanel>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/Pages/Language.axaml.cs",
    "content": "﻿using CommunityToolkit.Mvvm.ComponentModel;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Views.Initialize.Pages;\n\npublic partial class Language : UserControl\n{\n    public Language()\n    {\n        InitializeComponent(); \n        DataContext = Data.SettingEntry;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/Pages/MinecraftFolder.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Initialize.Pages.MinecraftFolder\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:cl=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid\n        Margin=\"10\"\n        Name=\"MinecraftFolderRoot\"\n        VerticalAlignment=\"Stretch\">\n        <Grid.Transitions>\n            <Transitions>\n                <DoubleTransition Duration=\"0:0:0.30\" Property=\"Opacity\" />\n            </Transitions>\n        </Grid.Transitions>\n        <DockPanel>\n            <DockPanel Margin=\"60,50,5,50\">\n                <TextBlock\n                    DockPanel.Dock=\"Top\"\n                    FontSize=\"24\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MinecraftFolder}\" />\n                <TextBlock\n                    DockPanel.Dock=\"Top\"\n                    FontSize=\"16\"\n                    Foreground=\"{DynamicResource GrayColor}\"\n                    HorizontalAlignment=\"Left\"\n                    Margin=\"5,5,0,0\"\n                    Name=\"MinecraftFolderTipTextBlock\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MinecraftFolderTip}\"\n                    TextWrapping=\"Wrap\"\n                    Width=\"270\" />\n                <WrapPanel\n                    Margin=\"-15,10,0,0\"\n                    Orientation=\"Horizontal\"\n                    VerticalAlignment=\"Top\"\n                    Width=\"270\">\n                    <HyperlinkButton\n                        IsVisible=\"False\"\n                        Margin=\"3\"\n                        Name=\"AutoScanMinecraftFolderBtn\">\n                        <StackPanel Orientation=\"Horizontal\" Spacing=\"5\">\n                            <PathIcon\n                                Data=\"F1 M 18.75 18.125 C 18.75 18.294271 18.68815 18.440756 18.564453 18.564453 C 18.440754 18.68815 18.29427 18.75 18.125 18.75 C 17.955729 18.75 17.809244 18.68815 17.685547 18.564453 L 12.519531 13.398438 C 11.907552 13.912761 11.22233 14.308269 10.463867 14.584961 C 9.705403 14.861654 8.925781 15 8.125 15 C 7.493489 15 6.884765 14.91862 6.298828 14.755859 C 5.712891 14.5931 5.166016 14.361979 4.658203 14.0625 C 4.150391 13.763021 3.686523 13.40332 3.266602 12.983398 C 2.84668 12.563477 2.486979 12.099609 2.1875 11.591797 C 1.888021 11.083984 1.656901 10.537109 1.494141 9.951172 C 1.33138 9.365234 1.25 8.756511 1.25 8.125 C 1.25 7.49349 1.33138 6.884766 1.494141 6.298828 C 1.656901 5.712891 1.888021 5.166016 2.1875 4.658203 C 2.486979 4.150391 2.84668 3.686523 3.266602 3.266602 C 3.686523 2.84668 4.150391 2.48698 4.658203 2.1875 C 5.166016 1.888021 5.712891 1.656902 6.298828 1.494141 C 6.884765 1.331381 7.493489 1.25 8.125 1.25 C 8.75651 1.25 9.365234 1.331381 9.951172 1.494141 C 10.537109 1.656902 11.083984 1.888021 11.591797 2.1875 C 12.099609 2.48698 12.563477 2.84668 12.983398 3.266602 C 13.40332 3.686523 13.763021 4.150391 14.0625 4.658203 C 14.361979 5.166016 14.593099 5.712891 14.755859 6.298828 C 14.918619 6.884766 14.999999 7.49349 15 8.125 C 14.999999 8.925781 14.861652 9.705404 14.584961 10.463867 C 14.308268 11.222331 13.91276 11.907553 13.398438 12.519531 L 18.564453 17.685547 C 18.68815 17.809244 18.75 17.955729 18.75 18.125 Z M 13.75 8.125 C 13.75 7.610678 13.683268 7.114258 13.549805 6.635742 C 13.416341 6.157227 13.227539 5.709636 12.983398 5.292969 C 12.739258 4.876303 12.444661 4.495443 12.099609 4.150391 C 11.754557 3.80534 11.373697 3.510742 10.957031 3.266602 C 10.540364 3.022461 10.092773 2.83366 9.614258 2.700195 C 9.135742 2.566732 8.639322 2.5 8.125 2.5 C 7.35026 2.5 6.621094 2.648113 5.9375 2.944336 C 5.253906 3.240561 4.658203 3.642578 4.150391 4.150391 C 3.642578 4.658204 3.24056 5.253907 2.944336 5.9375 C 2.648112 6.621095 2.5 7.350262 2.5 8.125 C 2.5 8.90625 2.646484 9.638672 2.939453 10.322266 C 3.232422 11.005859 3.632812 11.601562 4.140625 12.109375 C 4.648438 12.617188 5.244141 13.017578 5.927734 13.310547 C 6.611328 13.603516 7.34375 13.75 8.125 13.75 C 8.899739 13.75 9.628906 13.601889 10.3125 13.305664 C 10.996094 13.00944 11.591797 12.607422 12.099609 12.099609 C 12.607421 11.591797 13.009439 10.996094 13.305664 10.3125 C 13.601888 9.628906 13.75 8.89974 13.75 8.125 Z \"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoScan}\"\n                                TextDecorations=\"{x:Null}\" />\n                        </StackPanel>\n                    </HyperlinkButton>\n                    <HyperlinkButton Margin=\"3\" Name=\"ManualAddMinecraftFolderBtn\">\n                        <StackPanel Orientation=\"Horizontal\" Spacing=\"5\">\n                            <PathIcon\n                                Data=\"F1 M 3.056641 18.75 C 2.646484 18.75 2.255859 18.666992 1.884766 18.500977 C 1.513672 18.334961 1.189779 18.113607 0.913086 17.836914 C 0.636393 17.560221 0.415039 17.236328 0.249023 16.865234 C 0.083008 16.494141 0 16.103516 0 15.693359 L 0 4.306641 C 0 3.896484 0.083008 3.505859 0.249023 3.134766 C 0.415039 2.763672 0.636393 2.439779 0.913086 2.163086 C 1.189779 1.886395 1.513672 1.665039 1.884766 1.499023 C 2.255859 1.333008 2.646484 1.25 3.056641 1.25 L 6.875 1.25 C 7.324219 1.25 7.709961 1.319988 8.032227 1.459961 C 8.354492 1.599936 8.644205 1.785482 8.901367 2.016602 C 9.158528 2.247723 9.397786 2.513021 9.619141 2.8125 C 9.840494 3.11198 10.071614 3.42448 10.3125 3.75 L 16.943359 3.75 C 17.353516 3.75 17.744141 3.833008 18.115234 3.999023 C 18.486328 4.165039 18.810221 4.386394 19.086914 4.663086 C 19.363605 4.939779 19.584961 5.263672 19.750977 5.634766 C 19.916992 6.005859 20 6.396484 20 6.806641 L 20 9.902344 C 19.817707 9.674479 19.622395 9.456381 19.414062 9.248047 C 19.205729 9.039714 18.984375 8.847656 18.75 8.671875 L 18.75 6.875 C 18.75 6.621095 18.701172 6.380209 18.603516 6.152344 C 18.505859 5.924479 18.370768 5.724284 18.198242 5.551758 C 18.025715 5.379232 17.82552 5.244142 17.597656 5.146484 C 17.369791 5.048829 17.128906 5.000001 16.875 5 L 10.185547 5 C 9.957682 5.156251 9.736328 5.309246 9.521484 5.458984 C 9.306641 5.608725 9.088541 5.742188 8.867188 5.859375 C 8.645833 5.976562 8.413086 6.070964 8.168945 6.142578 C 7.924805 6.214193 7.65625 6.25 7.363281 6.25 L 1.25 6.25 L 1.25 15.625 C 1.25 15.878906 1.298828 16.119791 1.396484 16.347656 C 1.494141 16.575521 1.629232 16.775717 1.801758 16.948242 C 1.974284 17.120768 2.174479 17.255859 2.402344 17.353516 C 2.630208 17.451172 2.871094 17.5 3.125 17.5 L 7.900391 17.5 C 8.011067 17.721354 8.129883 17.936197 8.256836 18.144531 C 8.383789 18.352865 8.522135 18.554688 8.671875 18.75 Z M 7.363281 5 C 7.539062 5.000001 7.70345 4.977215 7.856445 4.931641 C 8.009439 4.886068 8.154297 4.825847 8.291016 4.750977 C 8.427734 4.676107 8.562825 4.5931 8.696289 4.501953 C 8.829752 4.410808 8.964844 4.316406 9.101562 4.21875 C 8.951822 4.016928 8.805338 3.813477 8.662109 3.608398 C 8.51888 3.40332 8.36263 3.219402 8.193359 3.056641 C 8.024088 2.893881 7.833658 2.760418 7.62207 2.65625 C 7.410481 2.552084 7.161458 2.5 6.875 2.5 L 3.125 2.5 C 2.871094 2.5 2.630208 2.548828 2.402344 2.646484 C 2.174479 2.744141 1.974284 2.879232 1.801758 3.051758 C 1.629232 3.224285 1.494141 3.42448 1.396484 3.652344 C 1.298828 3.880209 1.25 4.121094 1.25 4.375 L 1.25 5 Z M 8.75 14.375 C 8.75 13.600261 8.898111 12.871094 9.194336 12.1875 C 9.49056 11.503906 9.892578 10.908203 10.400391 10.400391 C 10.908203 9.892578 11.503906 9.490561 12.1875 9.194336 C 12.871093 8.898112 13.60026 8.75 14.375 8.75 C 14.889322 8.75 15.385741 8.816732 15.864258 8.950195 C 16.342773 9.083659 16.790363 9.272461 17.207031 9.516602 C 17.623697 9.760742 18.004557 10.055339 18.349609 10.400391 C 18.69466 10.745443 18.989258 11.126303 19.233398 11.542969 C 19.477539 11.959636 19.66634 12.407227 19.799805 12.885742 C 19.933268 13.364258 20 13.860678 20 14.375 C 20 15.14974 19.851887 15.878906 19.555664 16.5625 C 19.259439 17.246094 18.857422 17.841797 18.349609 18.349609 C 17.841797 18.857422 17.246094 19.259439 16.5625 19.555664 C 15.878906 19.851889 15.149739 20 14.375 20 C 13.59375 20 12.861328 19.853516 12.177734 19.560547 C 11.494141 19.267578 10.898438 18.867188 10.390625 18.359375 C 9.882812 17.851562 9.482422 17.255859 9.189453 16.572266 C 8.896484 15.888672 8.75 15.15625 8.75 14.375 Z M 15 15 L 16.875 15 C 17.04427 15 17.190754 14.938151 17.314453 14.814453 C 17.43815 14.690756 17.5 14.544271 17.5 14.375 C 17.5 14.205729 17.43815 14.059245 17.314453 13.935547 C 17.190754 13.81185 17.04427 13.75 16.875 13.75 L 15 13.75 L 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 C 14.205729 11.25 14.059244 11.31185 13.935547 11.435547 C 13.811849 11.559245 13.75 11.705729 13.75 11.875 L 13.75 13.75 L 11.875 13.75 C 11.705729 13.75 11.559244 13.81185 11.435547 13.935547 C 11.311849 14.059245 11.25 14.205729 11.25 14.375 C 11.25 14.544271 11.311849 14.690756 11.435547 14.814453 C 11.559244 14.938151 11.705729 15 11.875 15 L 13.75 15 L 13.75 16.875 C 13.75 17.044271 13.811849 17.190756 13.935547 17.314453 C 14.059244 17.43815 14.205729 17.5 14.375 17.5 C 14.544271 17.5 14.690755 17.43815 14.814453 17.314453 C 14.93815 17.190756 14.999999 17.044271 15 16.875 Z \"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                Foreground=\"{DynamicResource SystemAccentColor}\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ManualAdd}\"\n                                TextDecorations=\"{x:Null}\" />\n                        </StackPanel>\n                    </HyperlinkButton>\n                </WrapPanel>\n            </DockPanel>\n            <DockPanel>\n                <StackPanel Margin=\"0,10,25,80\" VerticalAlignment=\"Center\">\n                    <TextBlock DockPanel.Dock=\"Top\" FontFamily=\"{DynamicResource Font}\">\n                        <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ExistingNow}\" />\n                        <Run Text=\":\" />\n                    </TextBlock>\n                    <ListBox\n                        DockPanel.Dock=\"Top\"\n                        Margin=\"0,10,0,0\"\n                        MaxHeight=\"320\"\n                        Name=\"MinecraftFolderListBox\"\n                        SelectedIndex=\"0\"\n                        VerticalAlignment=\"Top\">\n                        <ListBox.ItemTemplate>\n                            <DataTemplate DataType=\"data:MinecraftFolder\">\n                                <TextBlock\n                                    FontFamily=\"{DynamicResource Font}\"\n                                    Margin=\"0,5\"\n                                    TextWrapping=\"Wrap\">\n                                    <Run>[</Run>\n                                    <Run Text=\"{Binding Name}\" />\n                                    <Run>]</Run>\n                                    <Run Text=\"{Binding Path}\" />\n                                </TextBlock>\n                            </DataTemplate>\n                        </ListBox.ItemTemplate>\n                    </ListBox>\n                </StackPanel>\n            </DockPanel>\n        </DockPanel>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Initialize/Pages/MinecraftFolder.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing Avalonia.Media;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Views.Initialize.Pages;\n\npublic partial class MinecraftFolder : UserControl\n{\n    public MinecraftFolder()\n    {\n        InitializeComponent();\n        MinecraftFolderListBox.ItemsSource = Data.MinecraftFolders;\n        ManualAddMinecraftFolderBtn.Click += async (_, _) =>\n        {\n            await Public.Module.Op.MinecraftFolder.AddByUi(this);\n        };\n        MinecraftFolderListBox.SelectionChanged += (_, _) =>\n        {\n            Data.SettingEntry.MinecraftFolder = MinecraftFolderListBox.SelectedItem as Public.Classes.Data.MinecraftFolder;\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/LogWindow.axaml",
    "content": "﻿<u:UrsaWindow\n    FontFamily=\"{DynamicResource Font}\"\n    FontWeight=\"{DynamicResource FontWeight}\"\n    IsCloseButtonVisible=\"False\"\n    IsFullScreenButtonVisible=\"False\"\n    IsHitTestVisible=\"True\"\n    IsMinimizeButtonVisible=\"False\"\n    IsRestoreButtonVisible=\"False\"\n    IsTitleBarVisible=\"False\"\n    MinHeight=\"310\"\n    MinWidth=\"450\"\n    SystemDecorations=\"Full\"\n    Title=\"Yu Minecraft Launcher\"\n    WindowStartupLocation=\"CenterScreen\"\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.LogWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:uc=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:views=\"clr-namespace:YMCL.Views\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Window.Styles>\n        <Style Selector=\"Window\">\n            <Setter Property=\"Background\">\n                <Setter.Value>\n                    <SolidColorBrush Color=\"#00ACFF00\" Opacity=\"0\" />\n                </Setter.Value>\n            </Setter>\n        </Style>\n    </Window.Styles>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"8,8,8,8\"\n        x:Name=\"Root\">\n        <DockPanel>\n            <uc:TitleBar\n                DockPanel.Dock=\"Top\"\n                IsCloseBtnShow=\"True\"\n                IsMaxBtnShow=\"False\"\n                IsVisible=\"False\"\n                Name=\"TitleBar\"\n                Title=\"Yu Minecraft Launcher\" />\n            <ContentControl Name=\"ContentControl\" />\n        </DockPanel>\n    </Border>\n</u:UrsaWindow>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/LogWindow.axaml.cs",
    "content": "﻿using Ursa.Controls;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Controls;\nusing LogType = YMCL.Public.Enum.LogType;\n\nnamespace YMCL.Views;\n\npublic partial class LogWindow : UrsaWindow\n{\n    public LogViewer Viewer { get; set; }\n    public new bool CanClose { get; set; }\n\n    public LogWindow()\n    {\n        InitializeComponent();\n        Viewer = new LogViewer();\n        ContentControl.Content = Viewer;\n        Loaded += (_, _) =>\n        {\n            Public.Module.Ui.Setter.UpdateWindowStyle(this);\n        };\n        PropertyChanged += (_, _) =>\n        {\n            switch (WindowState)\n            {\n                case WindowState.Normal:\n                    Root.Margin = new Thickness(0);\n                    Root.BorderThickness = new Thickness(0);\n                    break;\n                case WindowState.Maximized:\n                    Root.Margin = new Thickness(20);\n                    Root.BorderThickness = new Thickness(2);\n                    break;\n            }\n        };\n        Application.Current.ActualThemeVariantChanged += (_, _) =>\n        {\n            Hide();\n            Show();\n        };\n    }\n    \n    public void Append(string message, string time, LogType logType , string source)\n    {\n        var log = new LogItemEntry\n        {\n            Time = string.IsNullOrWhiteSpace(time) ? DateTime.Now.ToString(\"HH:mm:ss\") : time,\n            Message = string.IsNullOrWhiteSpace(message) ? \"Empty Message\" : message,\n            Source = string.IsNullOrWhiteSpace(source) ? \"Unknown\" : source,\n            Type = string.IsNullOrWhiteSpace(logType.ToString()) ? LogType.Unknown : logType,\n        };\n        log.SetOriginal();\n        Viewer.Model.LogItems.Add(log);\n    }\n\n    protected override void OnClosing(WindowClosingEventArgs e)\n    {\n        if (CanClose)\n        {\n            base.OnClosing(e);\n        }\n        else\n        {\n            Hide();\n            e.Cancel = true;\n        }\n    }\n\n    public override void Show()\n    {\n        Public.Module.Ui.Setter.UpdateWindowStyle(this);\n        base.Show();\n    }\n\n    public void Destory()\n    {\n        CanClose = true;\n        Close();\n    }\n    \n    protected override void OnClosed(EventArgs e)\n    {\n        Dispose();\n        base.OnClosed(e);\n    }\n\n    public void Dispose()\n    {\n        Viewer.Dispose();\n        \n        Content = null; \n        DataContext = null; \n\n        PlatformImpl?.Dispose();\n    }\n\n    ~LogWindow()\n    {\n        Dispose();\n    }\n    \n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/MainView.axaml",
    "content": "<UserControl\n    FontFamily=\"{DynamicResource Font}\"\n    FontWeight=\"{DynamicResource FontWeight}\"\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.MainView\"\n    x:DataType=\"vm:MainViewModel\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:vm=\"clr-namespace:YMCL.ViewModels\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Design.DataContext>\n        <vm:MainViewModel />\n    </Design.DataContext>\n\n    <Grid>\n        <Border Margin=\"0\">\n            <DockPanel>\n                <Border\n                    ClipToBounds=\"True\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    Margin=\"10,10,0,10\">\n                    <ui:NavigationView\n                        AlwaysShowHeader=\"False\"\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        FontWeight=\"Bold\"\n                        IsBackButtonVisible=\"False\"\n                        IsBackEnabled=\"False\"\n                        IsPaneToggleButtonVisible=\"False\"\n                        IsSettingsVisible=\"False\"\n                        IsTabStop=\"False\"\n                        OpenPaneLength=\"140\"\n                        PaneDisplayMode=\"Left\"\n                        SelectionFollowsFocus=\"False\"\n                        x:Name=\"Nav\">\n                        <ui:NavigationView.MenuItems>\n                            <ui:NavigationViewItem\n                                FontFamily=\"{DynamicResource Font}\"\n                                IsSelected=\"True\"\n                                Name=\"NavLaunch\"\n                                Tag=\"launch\">\n                                <DockPanel>\n                                    <Image Height=\"16\" Width=\"16\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"M511.9999694824219,67.73333740234375C529.5999755859375,67.73333740234375,547.199951171875,73.60000610351562,561.066650390625,85.33333587646484L573.8666381835938,96C708.2666625976562,211.1999969482422,814.933349609375,302.9333190917969,893.8666381835938,369.0666809082031L925.8666381835938,396.79998779296875C940.7999877929688,409.6000061035156 949.3333129882812,426.6666564941406 949.3333129882812,448 949.3333129882812,486.3999938964844 917.3333129882812,518.4000244140625 878.933349609375,518.4000244140625L832,518.4000244140625 832,876.7999877929688C832,904.5333251953125,810.6666870117188,928,782.933349609375,930.1333618164062L618.6666870117188,930.1333618164062C588.7999877929688,930.1333618164062,565.3333129882812,906.6666870117188,565.3333129882812,876.7999877929688L565.3333129882812,691.2000122070312C565.3333129882812,678.4000244140625,556.7999877929688,669.8666381835938,544,669.8666381835938L480,669.8666381835938C467.20001220703125,669.8666381835938,458.6666564941406,678.4000244140625,458.6666564941406,691.2000122070312L458.6666564941406,876.7999877929688C458.6666564941406,904.5333251953125,437.3333435058594,928,409.6000061035156,930.1333618164062L245.3333282470703,930.1333618164062C215.46665954589844,930.1333618164062,192,906.6666870117188,192,876.7999877929688L192,518.4000244140625 145.06666564941406,518.4000244140625C108.80000305175781,518.4000244140625,76.80000305175781,490.6666564941406,74.66666412353516,452.26666259765625L74.66666412353516,448C74.66666412353516,426.6666564941406 83.19999694824219,407.4666748046875 100.26667022705078,394.6666564941406 155.73333740234375,347.73333740234375 226.13333129882812,288 311.4666748046875,215.46665954589844L462.9333190917969,85.33333587646484C476.79998779296875,73.60000610351562,494.3999938964844,67.73333740234375,511.9999694824219,67.73333740234375z\" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Margin=\"12,0,0,0\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Launch}\" />\n                                </DockPanel>\n                            </ui:NavigationViewItem>\n                            <ui:NavigationViewItem\n                                FontFamily=\"{DynamicResource Font}\"\n                                Name=\"NavSetting\"\n                                Tag=\"setting\">\n                                <DockPanel>\n                                    <Image Height=\"16\" Width=\"16\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"M20.1 13.5l-1.9.2a5.8 5.8 0 0 1-.6 1.5l1.2 1.5c.4.4.3 1 0 1.4l-.7.7a1 1 0 0 1-1.4 0l-1.5-1.2a6.2 6.2 0 0 1-1.5.6l-.2 1.9c0 .5-.5.9-1 .9h-1a1 1 0 0 1-1-.9l-.2-1.9a5.8 5.8 0 0 1-1.5-.6l-1.5 1.2a1 1 0 0 1-1.4 0l-.7-.7a1 1 0 0 1 0-1.4l1.2-1.5a6.2 6.2 0 0 1-.6-1.5l-1.9-.2a1 1 0 0 1-.9-1v-1c0-.5.4-1 .9-1l1.9-.2a5.8 5.8 0 0 1 .6-1.5L5.2 7.3a1 1 0 0 1 0-1.4l.7-.7a1 1 0 0 1 1.4 0l1.5 1.2a6.2 6.2 0 0 1 1.5-.6l.2-1.9c0-.5.5-.9 1-.9h1c.5 0 1 .4 1 .9l.2 1.9a5.8 5.8 0 0 1 1.5.6l1.5-1.2a1 1 0 0 1 1.4 0l.7.7c.3.4.4 1 0 1.4l-1.2 1.5a6.2 6.2 0 0 1 .6 1.5l1.9.2c.5 0 .9.5.9 1v1c0 .5-.4 1-.9 1zM12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6z\" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Margin=\"12,0,0,0\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Setting}\" />\n                                </DockPanel>\n                            </ui:NavigationViewItem>\n                            <ui:NavigationViewItem\n                                FontFamily=\"{DynamicResource Font}\"\n                                Name=\"NavSearch\"\n                                Tag=\"search\">\n                                <DockPanel>\n                                    <Image Height=\"16\" Width=\"16\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <DrawingGroup>\n                                                        <DrawingGroup.Children>\n                                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                                <GeometryDrawing.Geometry>\n                                                                    <PathGeometry Figures=\"M1499.4,1025.6C1499.4,1033.1999999999998 1497.9,1040.3 1495,1046.8 1492,1053.3 1488,1059 1483,1063.8999999999999 1477.9,1068.8 1472.1,1072.6 1465.6,1075.3 1459.1,1078 1452.1999999999998,1079.3999999999999 1445,1079.3999999999999 1430.2,1079.3999999999999 1417.6,1074.1 1407,1063.6L1115.8,772.3999999999999C1077.3999999999999,801.8999999999999 1035.7,824.4999999999999 990.8,840.0999999999999 945.9,855.6999999999999 899.0999999999999,863.4999999999999 850.5999999999999,863.4999999999999 810.8999999999999,863.4999999999999 772.5999999999999,858.2999999999998 735.6999999999999,847.9999999999999 698.8,837.6999999999999 664.4,823.0999999999999 632.4999999999999,804.2999999999998 600.5999999999999,785.4999999999999 571.4999999999999,762.9999999999999 545.0999999999999,736.8999999999999 518.6999999999999,710.7999999999998 496.19999999999993,681.5999999999999 477.69999999999993,649.4999999999999 459.0999999999999,617.3999999999999 444.69999999999993,582.8999999999999 434.29999999999995,545.9999999999999 423.99999999999994,509.0999999999999 418.79999999999995,470.7999999999999 418.79999999999995,431.0999999999999 418.79999999999995,391.3999999999999 423.99999999999994,353.19999999999993 434.29999999999995,316.4999999999999 444.59999999999997,279.7999999999999 459.19999999999993,245.3999999999999 477.99999999999994,213.2999999999999 496.79999999999995,181.1999999999999 519.3,152.0999999999999 545.4,125.89999999999989 571.6,99.69999999999989 600.6999999999999,77.2999999999999 632.8,58.499999999999886 664.9,39.69999999999989 699.3,25.19999999999989 736,14.799999999999883 772.6,4.5 810.8,-0.6 850.5,-0.6 910,-0.6 966,10.700000000000001 1018.6,33.3 1071.1,55.9 1116.9,86.8 1156,126 1195,165.2 1226,211 1248.7,263.4 1271.4,315.79999999999995 1282.9,371.7 1282.9,431.2 1282.9,479.7 1275.1000000000001,526.5 1259.5,571.4 1243.9,616.3 1221.3,658 1191.8,696.4L1483,987.5999999999999C1488.5,993.0999999999999 1492.6,998.8 1495.3,1004.6999999999999 1498,1010.6 1499.4,1017.5 1499.4,1025.6z M850.5,755.2L856.8,755.2C900.6999999999999,755.2 941.9,746.4000000000001 980.5999999999999,728.9000000000001 1019.1999999999999,711.4000000000001 1052.8999999999999,687.8000000000001 1081.6,658.0000000000001 1110.3,628.2000000000002 1133,593.8000000000001 1149.6999999999998,554.8000000000001 1166.3999999999996,515.8000000000001 1174.6999999999998,474.50000000000006 1174.6999999999998,431.00000000000006 1174.6999999999998,386.30000000000007 1166.2999999999997,344.20000000000005 1149.3999999999999,304.70000000000005 1132.4999999999998,265.20000000000005 1109.3999999999999,230.80000000000004 1080.1,201.50000000000006 1050.8,172.20000000000007 1016.3999999999999,149.10000000000005 976.8999999999999,132.20000000000005 937.3999999999999,115.30000000000004 895.2999999999998,106.90000000000005 850.5999999999999,106.90000000000005 805.8999999999999,106.90000000000005 763.8,115.30000000000005 724.3,132.20000000000005 684.8,149.10000000000002 650.4,172.20000000000005 621.0999999999999,201.50000000000006 591.8,230.80000000000007 568.6999999999999,265.20000000000005 551.8,304.70000000000005 534.9,344.20000000000005 526.5,386.30000000000007 526.5,431.00000000000006 526.5,475.70000000000005 534.9,517.8000000000001 551.8,557.3000000000001 568.6999999999999,596.8000000000001 591.8,631.2 621.0999999999999,660.5000000000001 650.3999999999999,689.8000000000001 684.8,712.9000000000001 724.3,729.8000000000001 763.6,746.8 805.7,755.2 850.5,755.2z\" />\n                                                                </GeometryDrawing.Geometry>\n                                                            </GeometryDrawing>\n                                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                                <GeometryDrawing.Geometry>\n                                                                    <EllipseGeometry\n                                                                        Center=\"850.5,431.1\"\n                                                                        RadiusX=\"373.7\"\n                                                                        RadiusY=\"373.7\" />\n                                                                </GeometryDrawing.Geometry>\n                                                            </GeometryDrawing>\n                                                        </DrawingGroup.Children>\n                                                        <DrawingGroup.ClipGeometry>\n                                                            <RectangleGeometry Rect=\"0,0,1920,1080\" />\n                                                        </DrawingGroup.ClipGeometry>\n                                                    </DrawingGroup>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Margin=\"12,0,0,0\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Search}\" />\n                                </DockPanel>\n                            </ui:NavigationViewItem>\n                            <ui:NavigationViewItem\n                                FontFamily=\"{DynamicResource Font}\"\n                                Name=\"NavDownload\"\n                                Tag=\"download\">\n                                <DockPanel>\n                                    <Image Height=\"16\" Width=\"16\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"M864,816C846.8512573242188,816 831.005126953125,825.1487426757812 822.4307861328125,840 813.8563842773438,854.8512573242188 813.8563842773438,873.1487426757812 822.4307861328125,888C831.005126953125,902.8512573242188,846.8512573242188,912,864,912C881.1487426757812,912 896.994873046875,902.8512573242188 905.5692138671875,888 914.1436157226562,873.1487426757812 914.1436157226562,854.8512573242188 905.5692138671875,840C896.994873046875,825.1487426757812,881.1487426757812,816,864,816z M128,704L331,704 421.3999938964844,794.5999755859375C471.3999938964844,844.5999755859375,552.4000244140625,844.5999755859375,602.4000244140625,794.5999755859375L693,704 896,704C966.5999755859375,704,1024,761.4000244140625,1024,832L1024,896C1024,966.5999755859375,966.5999755859375,1024,896,1024L128,1024C57.400001525878906,1024,0,966.5999755859375,0,896L0,832C0,761.4000244140625,57.400001525878906,704,128,704z M512,0C547.4000244140625,0,576,28.600000381469727,576,64L576,549.4000244140625 722.5999755859375,402.6000061035156C747.5999755859375,377.6000061035156 788.2000122070312,377.6000061035156 813.2000122070312,402.6000061035156 838.2000122070312,427.6000061035156 838.2000122070312,468.20001220703125 813.2000122070312,493.20001220703125L557.2000122070312,749.2000122070312C532.2000122070312,774.2000122070312,491.6000061035156,774.2000122070312,466.6000061035156,749.2000122070312L210.60000610351562,493.20001220703125C185.60000610351562,468.20001220703125 185.60000610351562,427.6000061035156 210.60000610351562,402.6000061035156 235.60000610351562,377.6000061035156 276.20001220703125,377.6000061035156 301.20001220703125,402.6000061035156L448,549.4000244140625 448,64C448,28.600000381469727,476.6000061035156,0,512,0z\" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Margin=\"12,0,0,0\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                                </DockPanel>\n                            </ui:NavigationViewItem>\n                            <ui:NavigationViewItem\n                                FontFamily=\"{DynamicResource Font}\"\n                                Name=\"NavTask\"\n                                Tag=\"task\">\n                                <ui:NavigationViewItem.InfoBadge>\n                                    <ui:InfoBadge\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        IsVisible=\"False\"\n                                        Value=\"0\"\n                                        x:Name=\"TaskInfoBadge\" />\n                                </ui:NavigationViewItem.InfoBadge>\n                                <DockPanel>\n                                    <Image Height=\"16\" Width=\"16\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"F1 M 15.693359 5 C 16.103516 5.000001 16.494141 5.083009 16.865234 5.249023 C 17.236328 5.41504 17.560221 5.636395 17.836914 5.913086 C 18.113605 6.189779 18.334961 6.513672 18.500977 6.884766 C 18.666992 7.255859 18.75 7.646484 18.75 8.056641 L 18.75 14.443359 C 18.75 14.853516 18.666992 15.244141 18.500977 15.615234 C 18.334961 15.986328 18.113605 16.310221 17.836914 16.586914 C 17.560221 16.863607 17.236328 17.084961 16.865234 17.250977 C 16.494141 17.416992 16.103516 17.5 15.693359 17.5 L 4.306641 17.5 C 3.896484 17.5 3.505859 17.416992 3.134766 17.250977 C 2.763672 17.084961 2.439779 16.863607 2.163086 16.586914 C 1.886393 16.310221 1.665039 15.986328 1.499023 15.615234 C 1.333008 15.244141 1.25 14.853516 1.25 14.443359 L 1.25 8.056641 C 1.25 7.633464 1.334635 7.236328 1.503906 6.865234 C 1.673177 6.494141 1.901042 6.170248 2.1875 5.893555 C 2.473958 5.616862 2.80599 5.398764 3.183594 5.239258 C 3.561198 5.079754 3.958333 5.000001 4.375 5 L 6.25 5 L 6.25 2.5 C 6.25 2.324219 6.282552 2.161459 6.347656 2.011719 C 6.41276 1.86198 6.502278 1.730145 6.616211 1.616211 C 6.730143 1.502279 6.861979 1.412762 7.011719 1.347656 C 7.161458 1.282553 7.324218 1.25 7.5 1.25 L 12.5 1.25 C 12.675781 1.25 12.840169 1.282553 12.993164 1.347656 C 13.146158 1.412762 13.277994 1.500652 13.388672 1.611328 C 13.499349 1.722006 13.587239 1.853842 13.652344 2.006836 C 13.717447 2.159832 13.75 2.324219 13.75 2.5 L 13.75 5 Z M 12.5 2.5 L 7.5 2.5 L 7.5 5 L 12.5 5 Z \" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Margin=\"12,0,0,0\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Task}\" />\n                                </DockPanel>\n                            </ui:NavigationViewItem>\n                            <ui:NavigationViewItem\n                                FontFamily=\"{DynamicResource Font}\"\n                                IsVisible=\"False\"\n                                Name=\"NavMusic\"\n                                Tag=\"music\">\n                                <DockPanel>\n                                    <Image\n                                        Height=\"16\"\n                                        Margin=\"0,0,0,0\"\n                                        Width=\"16\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"F1 M 4.384766 18.808594 C 4.124349 18.808594 3.880208 18.759766 3.652344 18.662109 C 3.424479 18.564453 3.224284 18.43099 3.051758 18.261719 C 2.879232 18.092447 2.744141 17.893881 2.646484 17.666016 C 2.548828 17.43815 2.5 17.19401 2.5 16.933594 L 2.5 3.066406 C 2.5 2.80599 2.548828 2.56185 2.646484 2.333984 C 2.744141 2.106121 2.877604 1.907553 3.046875 1.738281 C 3.216146 1.569012 3.414713 1.435547 3.642578 1.337891 C 3.870442 1.240234 4.114583 1.191406 4.375 1.191406 C 4.53125 1.191406 4.6875 1.210938 4.84375 1.25 C 5 1.289062 5.146484 1.347656 5.283203 1.425781 L 17.724609 8.359375 C 18.024088 8.528646 18.258463 8.758139 18.427734 9.047852 C 18.597004 9.337565 18.681641 9.654948 18.681641 10 C 18.681641 10.351562 18.598633 10.670573 18.432617 10.957031 C 18.266602 11.24349 18.030598 11.471354 17.724609 11.640625 L 5.292969 18.574219 C 5.15625 18.652344 5.009766 18.710938 4.853516 18.75 C 4.697266 18.789062 4.541016 18.808594 4.384766 18.808594 Z \" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Margin=\"12,0,0,0\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Music}\" />\n                                </DockPanel>\n                            </ui:NavigationViewItem>\n                            <ui:NavigationViewItem\n                                FontFamily=\"{DynamicResource Font}\"\n                                Name=\"NavMore\"\n                                Tag=\"more\">\n                                <DockPanel>\n                                    <Image Height=\"16\" Width=\"16\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <DrawingGroup>\n                                                        <DrawingGroup.Children>\n                                                            <DrawingGroup>\n                                                                <DrawingGroup.Children>\n                                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                                        <GeometryDrawing.Geometry>\n                                                                            <PathGeometry Figures=\"M221.867,375.571A102.40039,102.40039,0,0,1,324.26599999999996,477.97400000000005L324.26599999999996,597.4380000000001A102.40036,102.40036,0,0,1,221.86699999999996,699.8410000000001L102.398,699.8410000000001A102.40271,102.40271,0,0,1,0,597.43805L0,477.97405A102.40274,102.40274,0,0,1,102.398,375.571z M597.332,375.571A102.403,102.403,0,0,1,699.734,477.97400000000005L699.734,597.4380000000001A102.403,102.403,0,0,1,597.332,699.8410000000001L477.867,699.8410000000001A102.403,102.403,0,0,1,375.46500000000003,597.4380000000001L375.46500000000003,477.9740000000001A102.403,102.403,0,0,1,477.867,375.571z M221.86700000000002,426.774L102.398,426.774A51.196,51.196,0,0,0,51.285,474.97L51.199,477.97400000000005 51.199,597.4380000000001A51.20571,51.20571,0,0,0,99.395,648.5560000000002L102.398,648.6420000000002 221.867,648.6420000000002A51.201,51.201,0,0,0,272.98,600.4420000000001L273.06600000000003,597.4380000000001 273.06600000000003,477.9740000000001A51.19847,51.19847,0,0,0,224.87100000000004,426.8600000000001z M597.332,426.774L477.867,426.774A51.19331,51.19331,0,0,0,426.754,474.97L426.668,477.97400000000005 426.668,597.4380000000001A51.19706,51.19706,0,0,0,474.863,648.5560000000002L477.867,648.6420000000002 597.332,648.6420000000002A51.20331,51.20331,0,0,0,648.449,600.4420000000001L648.535,597.4380000000001 648.535,477.9740000000001A51.19971,51.19971,0,0,0,600.336,426.8600000000001z M221.867,0.10608A102.39952,102.39952,0,0,1,324.26599999999996,102.50508L324.26599999999996,221.97408000000001A102.39678,102.39678,0,0,1,221.86699999999996,324.37208L102.398,324.37208A102.39913,102.39913,0,0,1,0,221.97406L0,102.50506000000001A102.40187,102.40187,0,0,1,102.398,0.10608z M597.332,0.10608A102.40213,102.40213,0,0,1,699.734,102.50508L699.734,221.97408000000001A102.39939,102.39939,0,0,1,597.332,324.37208L477.867,324.37208A102.39938,102.39938,0,0,1,375.46500000000003,221.97408L375.46500000000003,102.50507999999999A102.40212,102.40212,0,0,1,477.867,0.10608z M221.86700000000002,51.30608L102.398,51.30608A51.201,51.201,0,0,0,51.285,99.50108L51.199,102.50508 51.199,221.97408000000001A51.20185,51.20185,0,0,0,99.395,273.08708L102.398,273.17308 221.867,273.17308A51.20033,51.20033,0,0,0,272.98,224.97808000000003L273.06600000000003,221.97408000000004 273.06600000000003,102.50508000000005A51.1996,51.1996,0,0,0,224.87100000000004,51.39208000000005z M597.332,51.30608L477.867,51.30608A51.19824,51.19824,0,0,0,426.754,99.50108L426.668,102.50508 426.668,221.97408000000001A51.19591,51.19591,0,0,0,474.863,273.08708L477.867,273.17308 597.332,273.17308A51.2054,51.2054,0,0,0,648.449,224.97808000000003L648.535,221.97408000000004 648.535,102.50508000000005A51.20084,51.20084,0,0,0,600.336,51.39208000000005z M597.332,51.30608\" />\n                                                                        </GeometryDrawing.Geometry>\n                                                                    </GeometryDrawing>\n                                                                </DrawingGroup.Children>\n                                                            </DrawingGroup>\n                                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                                <GeometryDrawing.Geometry>\n                                                                    <RectangleGeometry\n                                                                        RadiusX=\"0\"\n                                                                        RadiusY=\"0\"\n                                                                        Rect=\"46.12,43.4,238,252\" />\n                                                                </GeometryDrawing.Geometry>\n                                                            </GeometryDrawing>\n                                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                                <GeometryDrawing.Geometry>\n                                                                    <RectangleGeometry\n                                                                        RadiusX=\"0\"\n                                                                        RadiusY=\"0\"\n                                                                        Rect=\"425.12,48.4,232.5,232.5\" />\n                                                                </GeometryDrawing.Geometry>\n                                                            </GeometryDrawing>\n                                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                                <GeometryDrawing.Geometry>\n                                                                    <RectangleGeometry\n                                                                        RadiusX=\"0\"\n                                                                        RadiusY=\"0\"\n                                                                        Rect=\"419.12,413.4,247,252\" />\n                                                                </GeometryDrawing.Geometry>\n                                                            </GeometryDrawing>\n                                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                                <GeometryDrawing.Geometry>\n                                                                    <RectangleGeometry\n                                                                        RadiusX=\"0\"\n                                                                        RadiusY=\"0\"\n                                                                        Rect=\"46.12,413.4,238,244\" />\n                                                                </GeometryDrawing.Geometry>\n                                                            </GeometryDrawing>\n                                                        </DrawingGroup.Children>\n                                                        <DrawingGroup.ClipGeometry>\n                                                            <RectangleGeometry Rect=\"0,0,699.96002,700.80008\" />\n                                                        </DrawingGroup.ClipGeometry>\n                                                    </DrawingGroup>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Margin=\"12,0,0,0\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.More}\" />\n                                </DockPanel>\n                            </ui:NavigationViewItem>\n                            <ui:NavigationViewItem\n                                FontFamily=\"{DynamicResource Font}\"\n                                Name=\"NavAbout\"\n                                Tag=\"about\">\n                                <DockPanel>\n                                    <Image\n                                        Height=\"16\"\n                                        Margin=\"0,0,0,0\"\n                                        Width=\"16\">\n                                        <Image.Source>\n                                            <DrawingImage>\n                                                <DrawingImage.Drawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"F1 M 0 9.375 C 0 8.515625 0.112305 7.687175 0.336914 6.889648 C 0.561523 6.092123 0.877279 5.345053 1.28418 4.648438 C 1.691081 3.951824 2.179362 3.318686 2.749023 2.749023 C 3.318685 2.179363 3.951823 1.691082 4.648438 1.28418 C 5.345052 0.877279 6.092122 0.561523 6.889648 0.336914 C 7.687174 0.112305 8.515625 0 9.375 0 C 10.234375 0 11.062825 0.112305 11.860352 0.336914 C 12.657877 0.561523 13.40332 0.877279 14.09668 1.28418 C 14.790039 1.691082 15.423177 2.18099 15.996094 2.753906 C 16.56901 3.326824 17.058918 3.959961 17.46582 4.65332 C 17.872721 5.34668 18.188477 6.092123 18.413086 6.889648 C 18.637695 7.687175 18.75 8.515625 18.75 9.375 C 18.75 10.234375 18.637695 11.062826 18.413086 11.860352 C 18.188477 12.657878 17.872721 13.404948 17.46582 14.101562 C 17.058918 14.798178 16.570637 15.431315 16.000977 16.000977 C 15.431314 16.570639 14.798176 17.05892 14.101562 17.46582 C 13.404947 17.872721 12.657877 18.188477 11.860352 18.413086 C 11.062825 18.637695 10.234375 18.75 9.375 18.75 C 8.509114 18.75 7.677409 18.637695 6.879883 18.413086 C 6.082356 18.188477 5.336914 17.872721 4.643555 17.46582 C 3.950195 17.05892 3.318685 16.570639 2.749023 16.000977 C 2.179362 15.431315 1.691081 14.799805 1.28418 14.106445 C 0.877279 13.413086 0.561523 12.666016 0.336914 11.865234 C 0.112305 11.064453 0 10.234375 0 9.375 Z M 10.3125 5.625 C 10.3125 5.364584 10.221354 5.14323 10.039062 4.960938 C 9.856771 4.778646 9.635416 4.6875 9.375 4.6875 C 9.114583 4.6875 8.893229 4.778646 8.710938 4.960938 C 8.528646 5.14323 8.4375 5.364584 8.4375 5.625 C 8.4375 5.885417 8.528646 6.106771 8.710938 6.289062 C 8.893229 6.471354 9.114583 6.5625 9.375 6.5625 C 9.635416 6.5625 9.856771 6.471354 10.039062 6.289062 C 10.221354 6.106771 10.3125 5.885417 10.3125 5.625 Z M 10 13.125 L 10 8.125 C 10 7.95573 9.93815 7.809246 9.814453 7.685547 C 9.690755 7.56185 9.544271 7.5 9.375 7.5 C 9.205729 7.5 9.059244 7.56185 8.935547 7.685547 C 8.811849 7.809246 8.75 7.95573 8.75 8.125 L 8.75 13.125 C 8.75 13.294271 8.811849 13.440756 8.935547 13.564453 C 9.059244 13.688151 9.205729 13.75 9.375 13.75 C 9.544271 13.75 9.690755 13.688151 9.814453 13.564453 C 9.93815 13.440756 10 13.294271 10 13.125 Z \" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingImage.Drawing>\n                                            </DrawingImage>\n                                        </Image.Source>\n                                    </Image>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"15\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Margin=\"12,0,0,0\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.About}\" />\n                                </DockPanel>\n                            </ui:NavigationViewItem>\n                        </ui:NavigationView.MenuItems>\n                    </ui:NavigationView>\n                </Border>\n                <Border ClipToBounds=\"True\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n                    <ContentControl\n                        Content=\"{Binding CurrentPage}\"\n                        DockPanel.Dock=\"Right\"\n                        Name=\"FrameView\" />\n                </Border>\n            </DockPanel>\n        </Border>\n        <Button\n            Click=\"Button_OnClick\"\n            Content=\"Test\"\n            IsVisible=\"False\" />\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/MainView.axaml.cs",
    "content": "using Avalonia.Controls.Notifications;\nusing Avalonia.Input;\nusing Avalonia.Interactivity;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.Win32;\nusing ReactiveUI;\nusing Ursa.Common;\nusing Ursa.Controls;\nusing Ursa.Controls.Options;\nusing YMCL.Public.Controls.Drawers;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.App.Init;\nusing YMCL.Public.Module.Ui;\nusing YMCL.Public.Module.Ui.Special;\nusing YMCL.ViewModels;\nusing YMCL.Views.Main.Pages;\n\nnamespace YMCL.Views.Main;\n\npublic partial class MainView : UserControl\n{\n    public readonly MainViewModel ViewModel = new();\n    public NavigationView NavigationView => Nav;\n    public ContentControl Frame => FrameView;\n    public MainView()\n    {\n        InitializeComponent();\n        DataContext = ViewModel;\n        BindingEvent();\n        if (Data.DesktopType == DesktopRunnerType.Windows)\n        {\n            NavMusic.IsVisible = true;\n        }\n    }\n\n    private void BindingEvent()\n    {\n        Loaded += (_, _) => { InitDispatcher.OnMainViewLoaded(); };\n        Nav.SelectionChanged += (_, e) =>\n        {\n            ViewModel.TogglePage(((e.SelectedItem as NavigationViewItem).Tag as string)!);\n        };\n        SizeChanged += (_, e) => { Data.UiProperty.TaskEntryHeaderWidth = e.NewSize.Width - 230; };\n    }\n\n    private void Button_OnClick(object? sender, RoutedEventArgs e)\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/MainWindow.axaml",
    "content": "<u:UrsaWindow\n    DragDrop.AllowDrop=\"True\"\n    FontFamily=\"{DynamicResource Font}\"\n    FontWeight=\"{DynamicResource FontWeight}\"\n    Icon=\"../../../Public/Assets/Icon.Shadow.ico\"\n    IsCloseButtonVisible=\"False\"\n    IsFullScreenButtonVisible=\"False\"\n    IsHitTestVisible=\"True\"\n    IsMinimizeButtonVisible=\"False\"\n    IsRestoreButtonVisible=\"False\"\n    IsTitleBarVisible=\"False\"\n    MinHeight=\"310\"\n    MinWidth=\"450\"\n    SystemDecorations=\"Full\"\n    Title=\"Yu Minecraft Launcher\"\n    WindowStartupLocation=\"CenterScreen\"\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.MainWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:main=\"clr-namespace:YMCL.Views.Main\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:platform=\"clr-namespace:YMCL.Public.Module.Util.Platform\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:uc=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:views=\"clr-namespace:YMCL.Views\"\n    xmlns:vm=\"using:YMCL.ViewModels\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Window.Styles>\n        <Style Selector=\"Window\">\n            <Setter Property=\"Background\">\n                <Setter.Value>\n                    <SolidColorBrush Color=\"#00ACFF00\" Opacity=\"0\" />\n                </Setter.Value>\n            </Setter>\n        </Style>\n    </Window.Styles>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        BorderBrush=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"8\"\n        x:Name=\"Root\">\n        <Border ClipToBounds=\"True\">\n            <Grid>\n                <Border ClipToBounds=\"True\" Name=\"BackGroundBorder\">\n                    <Viewbox Stretch=\"UniformToFill\">\n                        <Image Name=\"BackGroundImg\" />\n                    </Viewbox>\n                </Border>\n                <DockPanel>\n                    <Border\n                        ClipToBounds=\"True\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        DockPanel.Dock=\"Top\"\n                        Margin=\"10,10,10,0\">\n                        <Grid>\n                            <uc:TitleBar\n                                DockPanel.Dock=\"Top\"\n                                IsCloseBtnExitApp=\"True\"\n                                IsCloseBtnShow=\"True\"\n                                IsMaxBtnShow=\"True\"\n                                IsVisible=\"False\"\n                                Name=\"TitleBar\"\n                                Title=\"\" />\n                            <DockPanel Name=\"TitleRoot\" Opacity=\"{DynamicResource MainOpacity}\">\n                                <TextBlock\n                                    FontFamily=\"{DynamicResource Font}\"\n                                    FontSize=\"16\"\n                                    HorizontalAlignment=\"Left\"\n                                    Margin=\"4,0,0,0\"\n                                    Text=\" Yu Minecraft Launcher\"\n                                    VerticalAlignment=\"Center\"\n                                    x:Name=\"TitleText\" />\n                            </DockPanel>\n                        </Grid>\n                    </Border>\n                    <main:MainView Margin=\"0,0,0,0\" Name=\"View\" />\n                </DockPanel>\n            </Grid>\n        </Border>\n    </Border>\n</u:UrsaWindow>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/MainWindow.axaml.cs",
    "content": "using Avalonia.Controls.Notifications;\nusing Avalonia.Input;\nusing Avalonia.Interactivity;\nusing Avalonia.Layout;\nusing Avalonia.Media;\nusing Avalonia.Platform;\nusing FluentAvalonia.UI.Controls;\nusing ReactiveUI;\nusing Ursa.Common;\nusing Ursa.Controls;\nusing Ursa.Controls.Options;\nusing YMCL.Public.Controls.Drawers;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Util.Platform;\nusing YMCL.Views.Main.Pages;\n\nnamespace YMCL.Views.Main;\n\npublic partial class MainWindow : UrsaWindow\n{\n    private DateTime _lastShiftPressTime;\n\n    public MainWindow(out MainView view)\n    {\n        InitializeComponent();\n        view = View;\n        Public.Module.Ui.Setter.UpdateWindowStyle(this, action: () => { TitleRoot.IsVisible = true; });\n        BindingEvent();\n        AddButtonToTitleBar();\n    }\n\n    public MainWindow()\n    {\n    }\n\n    private void AddButtonToTitleBar()\n    {\n        var msgHistory = new Button()\n        {\n            Classes = { \"icon-custom-button\" },\n            HorizontalAlignment = HorizontalAlignment.Right,\n            VerticalAlignment = VerticalAlignment.Center,\n            Content = PathGeometry.Parse(\n                \"F1 M 0 19.375 C 0 19.205729 0.027669 19.029947 0.083008 18.847656 C 0.138346 18.665365 0.185547 18.492838 0.224609 18.330078 C 0.374349 17.711588 0.530599 17.099609 0.693359 16.494141 C 0.85612 15.888672 1.01237 15.276693 1.162109 14.658203 C 0.777995 13.942058 0.488281 13.193359 0.292969 12.412109 C 0.097656 11.630859 0 10.833334 0 10.019531 C 0 9.101562 0.118815 8.214519 0.356445 7.358398 C 0.594076 6.502279 0.929362 5.703125 1.362305 4.960938 C 1.795247 4.21875 2.316081 3.543295 2.924805 2.93457 C 3.533528 2.325848 4.208984 1.803387 4.951172 1.367188 C 5.693359 0.93099 6.490885 0.594076 7.34375 0.356445 C 8.196614 0.118816 9.082031 0 10 0 C 10.917969 0 11.801758 0.118816 12.651367 0.356445 C 13.500977 0.594076 14.296875 0.93099 15.039062 1.367188 C 15.78125 1.803387 16.456705 2.324219 17.06543 2.929688 C 17.674152 3.535156 18.196613 4.208984 18.632812 4.951172 C 19.06901 5.693359 19.405924 6.489258 19.643555 7.338867 C 19.881184 8.188477 20 9.072266 20 9.990234 C 20 10.901693 19.881184 11.782227 19.643555 12.631836 C 19.405924 13.481445 19.072266 14.277344 18.642578 15.019531 C 18.212891 15.761719 17.695312 16.438803 17.089844 17.050781 C 16.484375 17.66276 15.812174 18.18685 15.073242 18.623047 C 14.33431 19.059244 13.541666 19.397787 12.695312 19.638672 C 11.848958 19.879557 10.966797 20 10.048828 20 C 9.241536 20 8.447266 19.907227 7.666016 19.72168 C 6.884766 19.536133 6.136067 19.257812 5.419922 18.886719 L 0.771484 19.980469 C 0.70638 19.99349 0.657552 20 0.625 20 C 0.449219 20 0.301107 19.939779 0.180664 19.819336 C 0.060221 19.698893 0 19.550781 0 19.375 Z M 9.960938 18.75 C 10.768229 18.75 11.546224 18.645834 12.294922 18.4375 C 13.043619 18.229166 13.743488 17.936197 14.394531 17.558594 C 15.045572 17.18099 15.639648 16.726889 16.176758 16.196289 C 16.713867 15.66569 17.172852 15.07487 17.553711 14.423828 C 17.93457 13.772787 18.229166 13.072917 18.4375 12.324219 C 18.645832 11.575521 18.75 10.797526 18.75 9.990234 C 18.75 9.182943 18.645832 8.406576 18.4375 7.661133 C 18.229166 6.91569 17.93457 6.220703 17.553711 5.576172 C 17.172852 4.931641 16.715494 4.342448 16.181641 3.808594 C 15.647785 3.27474 15.055338 2.819012 14.404297 2.441406 C 13.753255 2.063803 13.055013 1.770834 12.30957 1.5625 C 11.564127 1.354168 10.791016 1.25 9.990234 1.25 C 9.189453 1.25 8.416341 1.354168 7.670898 1.5625 C 6.925456 1.770834 6.228841 2.063803 5.581055 2.441406 C 4.933268 2.819012 4.344075 3.273113 3.813477 3.803711 C 3.282877 4.334311 2.827148 4.921875 2.446289 5.566406 C 2.06543 6.210938 1.770833 6.905925 1.5625 7.651367 C 1.354167 8.396811 1.25 9.169922 1.25 9.970703 C 1.25 10.393881 1.276042 10.784506 1.328125 11.142578 C 1.380208 11.500651 1.455078 11.850586 1.552734 12.192383 C 1.650391 12.53418 1.767578 12.87435 1.904297 13.212891 C 2.041016 13.551433 2.197266 13.90625 2.373047 14.277344 C 2.42513 14.381511 2.451172 14.482422 2.451172 14.580078 C 2.451172 14.651693 2.431641 14.785156 2.392578 14.980469 C 2.353516 15.175781 2.301432 15.400391 2.236328 15.654297 C 2.171224 15.908203 2.101237 16.181641 2.026367 16.474609 C 1.951497 16.767578 1.878255 17.047525 1.806641 17.314453 C 1.735026 17.581381 1.669922 17.823893 1.611328 18.041992 C 1.552734 18.260092 1.510417 18.421225 1.484375 18.525391 C 1.927083 18.421225 2.364909 18.317057 2.797852 18.212891 C 3.230794 18.108725 3.66862 18.001303 4.111328 17.890625 C 4.332682 17.838541 4.563802 17.776693 4.804688 17.705078 C 5.045573 17.633463 5.279948 17.597656 5.507812 17.597656 C 5.559896 17.597656 5.608724 17.605795 5.654297 17.62207 C 5.69987 17.638346 5.748698 17.65625 5.800781 17.675781 C 6.152343 17.838541 6.492513 17.986654 6.821289 18.120117 C 7.150065 18.25358 7.480469 18.365885 7.8125 18.457031 C 8.144531 18.548178 8.486328 18.619791 8.837891 18.671875 C 9.189453 18.723959 9.563802 18.75 9.960938 18.75 Z M 6.875 8.75 C 6.705729 8.75 6.559244 8.688151 6.435547 8.564453 C 6.311849 8.440756 6.25 8.294271 6.25 8.125 C 6.25 7.95573 6.311849 7.809246 6.435547 7.685547 C 6.559244 7.56185 6.705729 7.5 6.875 7.5 L 13.125 7.5 C 13.294271 7.5 13.440755 7.56185 13.564453 7.685547 C 13.68815 7.809246 13.75 7.95573 13.75 8.125 C 13.75 8.294271 13.68815 8.440756 13.564453 8.564453 C 13.440755 8.688151 13.294271 8.75 13.125 8.75 Z M 6.875 12.5 C 6.705729 12.5 6.559244 12.438151 6.435547 12.314453 C 6.311849 12.190756 6.25 12.044271 6.25 11.875 C 6.25 11.705729 6.311849 11.559245 6.435547 11.435547 C 6.559244 11.31185 6.705729 11.25 6.875 11.25 L 10.625 11.25 C 10.794271 11.25 10.940755 11.31185 11.064453 11.435547 C 11.18815 11.559245 11.25 11.705729 11.25 11.875 C 11.25 12.044271 11.18815 12.190756 11.064453 12.314453 C 10.940755 12.438151 10.794271 12.5 10.625 12.5 Z \")\n        };\n        msgHistory.Click += async (_, _) =>\n        {\n            var options = new DrawerOptions()\n            {\n                Position = Ursa.Common.Position.Right,\n                Buttons = DialogButton.None,\n                CanLightDismiss = true,\n                IsCloseButtonVisible = true,\n                MaxWidth = 420,\n                MinWidth = 420,\n                Title = \"消息历史\",\n                CanResize = true,\n            };\n            await Drawer.ShowModal<MsgHistory, Data>(Data.Instance, null, options);\n        };\n        TitleBar.AddButton(msgHistory);\n    }\n\n    private void BindingEvent()\n    {\n        PropertyChanged += (_, e) =>\n        {\n            if (Data.DesktopType == DesktopRunnerType.MacOs)\n            {\n                var platform = TryGetPlatformHandle();\n                if (platform is not null)\n                {\n                    var nsWindow = platform.Handle;\n                    if (nsWindow != IntPtr.Zero)\n                    {\n                        try\n                        {\n                            WindowHandler.RefreshTitleBarButtonPosition(nsWindow);\n                            WindowHandler.HideZoomButton(nsWindow);\n                            ExtendClientAreaChromeHints = ExtendClientAreaChromeHints.Default;\n                            TitleBar.MaximizeButton.IsVisible = false;\n                            TitleBar.MinimizeButton.IsVisible = false;\n                            TitleBar.CloseButton.IsVisible = false;\n                            TitleText.HorizontalAlignment = HorizontalAlignment.Right;\n                            TitleText.Margin = new Thickness(0, 0, 10, 0);\n                            TitleBar.FunctionRoot.Margin = new Thickness(0, 0, 175, 0);\n                        }\n                        catch (Exception exception)\n                        {\n                            Console.WriteLine(exception);\n                        }\n                    }\n                }\n            }\n            if (e.Property.Name != nameof(WindowState)) return;\n\n            switch (WindowState)\n            {\n                case WindowState.Normal:\n                    Root.CornerRadius = new CornerRadius(8);\n                    if (Data.DesktopType == DesktopRunnerType.Windows && Environment.OSVersion.Version.Major < 10)\n                    {\n                        Root.CornerRadius = new CornerRadius(0);\n                    }\n\n                    break;\n                case WindowState.Maximized:\n                    if (Data.DesktopType != DesktopRunnerType.MacOs)\n                    {\n                        Root.CornerRadius = new CornerRadius(0);\n                    }\n\n                    break;\n            }\n        };\n        Loaded += (_, _) => { Public.Module.Ui.Setter.UpdateWindowStyle(this); };\n        KeyDown += (_, e) =>\n        {\n            if (e.Key is not (Key.LeftShift or Key.RightShift)) return;\n            if ((DateTime.Now - _lastShiftPressTime).TotalMilliseconds < 300)\n            {\n                var options = new DialogOptions()\n                {\n                    ShowInTaskBar = true,\n                    IsCloseButtonVisible = true,\n                    StartupLocation = WindowStartupLocation.CenterOwner,\n                    CanDragMove = true\n                };\n                Dialog.ShowCustom<Search, Data>(Data.Instance, options: options);\n            }\n\n            _lastShiftPressTime = DateTime.Now;\n        };\n        AddHandler(DragDrop.DropEvent, DropHandler);\n        if (Data.DesktopType == DesktopRunnerType.Windows && Environment.OSVersion.Version.Major < 10)\n        {\n            Root.CornerRadius = new CornerRadius(0);\n        }\n    }\n\n    private static async void DropHandler(object? sender, DragEventArgs e)\n    {\n        if (e is null) return;\n        if (e.Data.Contains(DataFormats.Files))\n        {\n            foreach (var item in e.Data.GetFiles())\n            {\n                await Public.Module.Ui.Special.DropHandler.HandleFiles(item.Path.LocalPath);\n            }\n\n            if (Data.UiProperty.IsAllImport)\n                Notice(MainLang.ImportFinish, NotificationType.Success);\n            Data.UiProperty.IsAllImport = false;\n        }\n        else if (e.Data.Contains(DataFormats.Text))\n        {\n            var text = e.Data.GetText();\n            Public.Module.Ui.Special.DropHandler.HandleText(text!);\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/About.axaml",
    "content": "﻿<UserControl d:DesignHeight=\"450\" d:DesignWidth=\"800\" mc:Ignorable=\"d\" x:Class=\"YMCL.Views.Main.Pages.About\" xmlns=\"https://github.com/avaloniaui\" xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:properties=\"clr-namespace:YMCL.Public.Langs\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n  <ScrollViewer>\n    <StackPanel Margin=\"10\" Spacing=\"10\">\n      <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\" Opacity=\"{DynamicResource MainOpacity}\" Padding=\"6.5\">\n        <Grid>\n          <Image Height=\"34\" HorizontalAlignment=\"Left\" Margin=\"8,0,0,0\" VerticalAlignment=\"Center\" Width=\"35\">\n            <Image.Source>\n              <DrawingImage>\n                <DrawingImage.Drawing>\n                  <DrawingGroup>\n                    <DrawingGroup.Children>\n                      <DrawingGroup>\n                        <DrawingGroup.Children>\n                          <GeometryDrawing Brush=\"#FFFFFFFF\">\n                            <GeometryDrawing.Geometry>\n                              <PathGeometry Figures=\"M201.88,88.66C209.19,85.86 217.37,84.67 225.12,85.82 223.55,85.7 221.98,85.59 220.42,85.5 224.07,99.93 229.41,113.92 233.28,128.31 211.57,123.75 189.99,118.53 168.36,113.61 179.53,105.29 190.62,96.84 201.88,88.66z\" />\n                            </GeometryDrawing.Geometry>\n                          </GeometryDrawing>\n                        </DrawingGroup.Children>\n                      </DrawingGroup>\n                      <DrawingGroup>\n                        <DrawingGroup.Children>\n                          <GeometryDrawing Brush=\"#FF9EEEFF\">\n                            <GeometryDrawing.Geometry>\n                              <PathGeometry Figures=\"M233.28,128.31C229.41,113.92 224.07,99.93 220.42,85.5 221.98,85.59 223.55,85.7 225.12,85.82 233.6,86.54 240.49,92.04 246.81,97.24 278.8,122.53 310.35,148.37 342,174.07 346.48,177.91 351.49,181.2 355.1,185.96 363.08,195.81 372.17,205.4 376.23,217.67 384.52,237.15 393.51,256.32 402.52,275.46 404.82,279.52 404.95,284.26 405.65,288.76 406.02,292.47 406,296.26 405.12,299.91 405.15,299.19 405.2,297.76 405.22,297.04 348.15,241.11 291.08,185.18 234.01,129.25 233.82,129.01 233.46,128.54 233.28,128.31z\" />\n                            </GeometryDrawing.Geometry>\n                          </GeometryDrawing>\n                        </DrawingGroup.Children>\n                      </DrawingGroup>\n                      <DrawingGroup>\n                        <DrawingGroup.Children>\n                          <GeometryDrawing Brush=\"#FFBAFFD4\">\n                            <GeometryDrawing.Geometry>\n                              <PathGeometry Figures=\"M150.56,113.73C156.42,112.74 162.54,112.06 168.36,113.61 189.99,118.53 211.57,123.75 233.28,128.31 233.46,128.54 233.82,129.01 234.01,129.25 233.37,139.16 234.1,149.1 233.54,159.01 233.35,198.56 232.72,238.11 232.52,277.66 232.52,280.3 232.5,282.95 232.48,285.6 184.13,252.88 135.97,219.87 87.79,186.9L87.6,186.22C92.38,177.72 98.1,169.71 103.35,161.47 111.77,148.97 120.03,136.29 129.71,124.71 134.76,118.3 142.73,115.1 150.56,113.73z\" />\n                            </GeometryDrawing.Geometry>\n                          </GeometryDrawing>\n                        </DrawingGroup.Children>\n                      </DrawingGroup>\n                      <DrawingGroup>\n                        <DrawingGroup.Children>\n                          <GeometryDrawing Brush=\"#FF0071FF\">\n                            <GeometryDrawing.Geometry>\n                              <PathGeometry Figures=\"M234.01,129.25C291.08,185.18 348.15,241.11 405.22,297.04 405.2,297.76 405.15,299.19 405.12,299.91 404.71,304.98 402.84,309.9 399.92,314.06 396.76,318.62 391.71,321.23 387.18,324.2 371.53,333.83 355.43,342.73 339.17,351.28 328.74,354.22 317.26,354.71 306.94,351 300.5,348.76 295.65,343.78 290.94,339.09 273.72,321.95 257.13,304.2 240.48,286.5 237.91,283.48 234.84,280.88 232.52,277.66 232.72,238.11 233.35,198.56 233.54,159.01 234.1,149.1 233.37,139.16 234.01,129.25z\" />\n                            </GeometryDrawing.Geometry>\n                          </GeometryDrawing>\n                        </DrawingGroup.Children>\n                      </DrawingGroup>\n                      <DrawingGroup>\n                        <DrawingGroup.Children>\n                          <GeometryDrawing Brush=\"#FF00CFFF\">\n                            <GeometryDrawing.Geometry>\n                              <PathGeometry Figures=\"M87.19,186.92L87.79,186.9C135.97,219.87 184.13,252.88 232.48,285.6 200.37,307.05 168.61,329.04 136.6,350.63 129.1,354.32 120.39,355.52 112.13,354.4 104.19,353.28 98.09,347.68 92,342.96 73.4,327.58 55.6,311.24 37.96,294.77 32.82,285.18 32.55,272.79 38.26,263.34 49.72,242.8 62.85,223.25 75.76,203.61 79.62,198.08 82.99,192.2 87.19,186.92z\" />\n                            </GeometryDrawing.Geometry>\n                          </GeometryDrawing>\n                        </DrawingGroup.Children>\n                      </DrawingGroup>\n                    </DrawingGroup.Children>\n                    <DrawingGroup.ClipGeometry>\n                      <RectangleGeometry Rect=\"0,0,440,440\" />\n                    </DrawingGroup.ClipGeometry>\n                  </DrawingGroup>\n                </DrawingImage.Drawing>\n              </DrawingImage>\n            </Image.Source>\n          </Image>\n          <Grid Margin=\"50,0,0,0\">\n            <TextBlock FontFamily=\"{StaticResource Font}\" FontSize=\"17\" FontWeight=\"Thin\" Foreground=\"{DynamicResource TextColor}\" HorizontalAlignment=\"Left\" Margin=\"0,-15,0,0\" VerticalAlignment=\"Center\" x:Name=\"Version\" />\n            <Label Content=\" - By DaiYu\" FontFamily=\"{DynamicResource Font}\" FontSize=\"12\" Foreground=\"{DynamicResource GrayColor}\" HorizontalAlignment=\"Left\" Margin=\"0,20,0,0\" Name=\"AuthorLabel\" VerticalAlignment=\"Center\" />\n          </Grid>\n          <Button Classes=\"Primary\" Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CheckUpdate}\" FontFamily=\"{DynamicResource Font}\" Foreground=\"White\" Height=\"30.5\" HorizontalAlignment=\"Right\" Margin=\"200,0,9,0\" Theme=\"{DynamicResource SolidButton}\" x:Name=\"CheckUpdateBtn\" />\n        </Grid>\n\n      </Border>\n      <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\" Opacity=\"{DynamicResource MainOpacity}\" Padding=\"6.5\">\n        <StackPanel Margin=\"5\" Spacing=\"5\">\n          <Border Background=\"{DynamicResource 2x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\" Padding=\"8\">\n            <DockPanel>\n              <Image DockPanel.Dock=\"Left\" Height=\"24\" HorizontalAlignment=\"Left\" Margin=\"7,0,0,0\" Width=\"24\">\n                <Image.Source>\n                  <DrawingImage>\n                    <DrawingImage.Drawing>\n                      <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                        <GeometryDrawing.Geometry>\n                          <PathGeometry Figures=\"M521.5,256C509.8330078125,264 498.5830078125,271.8330078125 487.75,279.5 476.9169921875,287.1669921875 465.75,294 454.25,300 442.75,306 430.6669921875,310.8330078125 418,314.5 405.3330078125,318.1669921875 391.6669921875,320 377,320L64,320 64,800C64,813 66.5,825.3330078125 71.5,837 76.5,848.6669921875 83.41670227050781,858.9169921875 92.25,867.75 101.08300018310547,876.5830078125 111.33300018310547,883.5 123,888.5 134.66700744628906,893.5 147,896 160,896L864,896C877,896 889.3330078125,893.5 901,888.5 912.6669921875,883.5 922.9169921875,876.5830078125 931.75,867.75 940.5830078125,858.9169921875 947.5,848.6669921875 952.5,837 957.5,825.3330078125 960,813 960,800L960,352C960,339 957.5,326.6669921875 952.5,315 947.5,303.3330078125 940.5830078125,293.0830078125 931.75,284.25 922.9169921875,275.4169921875 912.6669921875,268.5 901,263.5 889.3330078125,258.5 877,256 864,256L521.5,256z M160,128C147,128 134.66700744628906,130.5 123,135.5 111.33300018310547,140.5 101.08300018310547,147.41700744628906 92.25,156.25 83.41670227050781,165.08299255371094 76.5,175.33299255371094 71.5,187 66.5,198.66700744628906 64,211 64,224L64,256 377,256C386,256 394.3330078125,254.83299255371094 402,252.5 409.6669921875,250.16700744628906 417.1669921875,247.08299255371094 424.5,243.25 431.8330078125,239.41700744628906 438.8330078125,235.16700744628906 445.5,230.5 452.1669921875,225.83299255371094 459,221 466,216 458.3330078125,205.66700744628906 450.8330078125,195.25 443.5,184.75 436.1669921875,174.25 428.1669921875,164.83299255371094 419.5,156.5 410.8330078125,148.16700744628906 401.0830078125,141.33299255371094 390.25,136 379.4169921875,130.66700744628906 366.6669921875,128 352,128L160,128z M156.5,64L352,64C375,64.0000991821289 394.75,67.5833969116211 411.25,74.75 427.75,81.91670227050781 442.6669921875,91.5 456,103.5 469.3330078125,115.5 481.6669921875,129.16700744628906 493,144.5 504.3330078125,159.83299255371094 516,175.66700744628906 528,192L867.5,192C888.5,192 908.5,196.25 927.5,204.75 946.5,213.25 963.0830078125,224.58299255371094 977.25,238.75 991.4169921875,252.91700744628906 1002.75,269.5 1011.25,288.5 1019.75,307.5 1024,327.5 1024,348.5L1024,803.5C1024,824.5 1019.75,844.5 1011.25,863.5 1002.75,882.5 991.4169921875,899.0830078125 977.25,913.25 963.0830078125,927.4169921875 946.5,938.75 927.5,947.25 908.5,955.75 888.5,960 867.5,960L156.5,960C135.5,960 115.5,955.75 96.5,947.25 77.5,938.75 60.91669845581055,927.4169921875 46.75,913.25 32.58330154418945,899.0830078125 21.25,882.5 12.75,863.5 4.25,844.5 0,824.5 0,803.5L0,220.5C0,199.5 4.25,179.5 12.75,160.5 21.25,141.5 32.58330154418945,124.91699981689453 46.75,110.75 60.91669845581055,96.5833969116211 77.5,85.2500991821289 96.5,76.75 115.5,68.2500991821289 135.5,64.0000991821289 156.5,64z\" />\n                        </GeometryDrawing.Geometry>\n                      </GeometryDrawing>\n                    </DrawingImage.Drawing>\n                  </DrawingImage>\n                </Image.Source>\n              </Image>\n              <Button Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OpenFolder}\" DockPanel.Dock=\"Right\" FontFamily=\"{DynamicResource Font}\" Name=\"OpenUserDataFolderBtn\" VerticalAlignment=\"Center\" />\n              <StackPanel DockPanel.Dock=\"Left\" Margin=\"10,0,0,0\">\n                <TextBlock FontFamily=\"{DynamicResource Font}\" FontSize=\"14\" HorizontalAlignment=\"Left\">\n                  <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.UserDataFolder}\" />\n                  <Run FontSize=\"12\" Foreground=\"{DynamicResource GrayColor}\" Name=\"UserDataSize\" Text=\"0 KiB\" />\n                </TextBlock>\n                <TextBlock FontFamily=\"{DynamicResource Font}\" FontSize=\"12\" Foreground=\"{DynamicResource GrayColor}\" HorizontalAlignment=\"Left\" Margin=\"-1,0,0,0\" Name=\"UserDataFolderPath\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.UserDataFolder}\" />\n              </StackPanel>\n            </DockPanel>\n          </Border>\n        </StackPanel>\n      </Border>\n      <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\" Opacity=\"{DynamicResource MainOpacity}\">\n        <DockPanel>\n          <WrapPanel DockPanel.Dock=\"Top\" HorizontalAlignment=\"Left\" Margin=\"8,10,10,0\" VerticalAlignment=\"Top\">\n            <HyperlinkButton Cursor=\"Hand\" FontFamily=\"{DynamicResource Font}\" HorizontalAlignment=\"Right\" Margin=\"0,0,2,0\" NavigateUri=\"https://ymcl.yik.at/\">\n              <Border Margin=\"-5,0,-6,0\" Padding=\"0,0,5,0\">\n                <DockPanel>\n                  <Border CornerRadius=\"{DynamicResource MainCornerRadius}\" Height=\"38\" Margin=\"4,0,0,0\" Width=\"38\">\n                    <Image HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\" Width=\"35\">\n                      <Image.Source>\n                        <DrawingImage>\n                          <DrawingImage.Drawing>\n                            <DrawingGroup>\n                              <DrawingGroup.Children>\n                                <DrawingGroup>\n                                  <DrawingGroup.Children>\n                                    <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                      <GeometryDrawing.Geometry>\n                                        <PathGeometry Figures=\"M201.88,88.66C209.19,85.86 217.37,84.67 225.12,85.82 223.55,85.7 221.98,85.59 220.42,85.5 224.07,99.93 229.41,113.92 233.28,128.31 211.57,123.75 189.99,118.53 168.36,113.61 179.53,105.29 190.62,96.84 201.88,88.66z\" />\n                                      </GeometryDrawing.Geometry>\n                                    </GeometryDrawing>\n                                  </DrawingGroup.Children>\n                                </DrawingGroup>\n                                <DrawingGroup>\n                                  <DrawingGroup.Children>\n                                    <GeometryDrawing Brush=\"#FF9EEEFF\">\n                                      <GeometryDrawing.Geometry>\n                                        <PathGeometry Figures=\"M233.28,128.31C229.41,113.92 224.07,99.93 220.42,85.5 221.98,85.59 223.55,85.7 225.12,85.82 233.6,86.54 240.49,92.04 246.81,97.24 278.8,122.53 310.35,148.37 342,174.07 346.48,177.91 351.49,181.2 355.1,185.96 363.08,195.81 372.17,205.4 376.23,217.67 384.52,237.15 393.51,256.32 402.52,275.46 404.82,279.52 404.95,284.26 405.65,288.76 406.02,292.47 406,296.26 405.12,299.91 405.15,299.19 405.2,297.76 405.22,297.04 348.15,241.11 291.08,185.18 234.01,129.25 233.82,129.01 233.46,128.54 233.28,128.31z\" />\n                                      </GeometryDrawing.Geometry>\n                                    </GeometryDrawing>\n                                  </DrawingGroup.Children>\n                                </DrawingGroup>\n                                <DrawingGroup>\n                                  <DrawingGroup.Children>\n                                    <GeometryDrawing Brush=\"#FFBAFFD4\">\n                                      <GeometryDrawing.Geometry>\n                                        <PathGeometry Figures=\"M150.56,113.73C156.42,112.74 162.54,112.06 168.36,113.61 189.99,118.53 211.57,123.75 233.28,128.31 233.46,128.54 233.82,129.01 234.01,129.25 233.37,139.16 234.1,149.1 233.54,159.01 233.35,198.56 232.72,238.11 232.52,277.66 232.52,280.3 232.5,282.95 232.48,285.6 184.13,252.88 135.97,219.87 87.79,186.9L87.6,186.22C92.38,177.72 98.1,169.71 103.35,161.47 111.77,148.97 120.03,136.29 129.71,124.71 134.76,118.3 142.73,115.1 150.56,113.73z\" />\n                                      </GeometryDrawing.Geometry>\n                                    </GeometryDrawing>\n                                  </DrawingGroup.Children>\n                                </DrawingGroup>\n                                <DrawingGroup>\n                                  <DrawingGroup.Children>\n                                    <GeometryDrawing Brush=\"#FF0071FF\">\n                                      <GeometryDrawing.Geometry>\n                                        <PathGeometry Figures=\"M234.01,129.25C291.08,185.18 348.15,241.11 405.22,297.04 405.2,297.76 405.15,299.19 405.12,299.91 404.71,304.98 402.84,309.9 399.92,314.06 396.76,318.62 391.71,321.23 387.18,324.2 371.53,333.83 355.43,342.73 339.17,351.28 328.74,354.22 317.26,354.71 306.94,351 300.5,348.76 295.65,343.78 290.94,339.09 273.72,321.95 257.13,304.2 240.48,286.5 237.91,283.48 234.84,280.88 232.52,277.66 232.72,238.11 233.35,198.56 233.54,159.01 234.1,149.1 233.37,139.16 234.01,129.25z\" />\n                                      </GeometryDrawing.Geometry>\n                                    </GeometryDrawing>\n                                  </DrawingGroup.Children>\n                                </DrawingGroup>\n                                <DrawingGroup>\n                                  <DrawingGroup.Children>\n                                    <GeometryDrawing Brush=\"#FF00CFFF\">\n                                      <GeometryDrawing.Geometry>\n                                        <PathGeometry Figures=\"M87.19,186.92L87.79,186.9C135.97,219.87 184.13,252.88 232.48,285.6 200.37,307.05 168.61,329.04 136.6,350.63 129.1,354.32 120.39,355.52 112.13,354.4 104.19,353.28 98.09,347.68 92,342.96 73.4,327.58 55.6,311.24 37.96,294.77 32.82,285.18 32.55,272.79 38.26,263.34 49.72,242.8 62.85,223.25 75.76,203.61 79.62,198.08 82.99,192.2 87.19,186.92z\" />\n                                      </GeometryDrawing.Geometry>\n                                    </GeometryDrawing>\n                                  </DrawingGroup.Children>\n                                </DrawingGroup>\n                              </DrawingGroup.Children>\n                              <DrawingGroup.ClipGeometry>\n                                <RectangleGeometry Rect=\"0,0,440,440\" />\n                              </DrawingGroup.ClipGeometry>\n                            </DrawingGroup>\n                          </DrawingImage.Drawing>\n                        </DrawingImage>\n\n\n                      </Image.Source>\n                    </Image>\n                  </Border>\n                  <StackPanel Margin=\"6.5,0,0,0\">\n                    <TextBlock FontSize=\"16\" Text=\"Yu Minecraft Launcher\" TextDecorations=\"{x:Null}\" />\n                    <TextBlock FontSize=\"13\" Foreground=\"{DynamicResource TextColor}\" Margin=\"1,0,0,0\" Text=\"ymcl.yik.at\" TextDecorations=\"{x:Null}\" />\n                  </StackPanel>\n                </DockPanel>\n              </Border>\n            </HyperlinkButton>\n            <HyperlinkButton Cursor=\"Hand\" FontFamily=\"{DynamicResource Font}\" HorizontalAlignment=\"Right\" Margin=\"0,0,2,0\" NavigateUri=\"https://afdian.com/a/DaiYui\">\n              <Border Margin=\"-5,0,-6,0\" Padding=\"0,0,5,0\">\n                <DockPanel>\n                  <Border ClipToBounds=\"True\" CornerRadius=\"{DynamicResource MainCornerRadius}\" Height=\"35\" Margin=\"4,0,0,0\" Width=\"35\">\n                    <Image HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                      <Image.Source>\n                        <DrawingImage>\n                          <DrawingImage.Drawing>\n                            <DrawingGroup>\n                              <DrawingGroup.Children>\n                                <GeometryDrawing Brush=\"#FF946CE6\">\n                                  <GeometryDrawing.Geometry>\n                                    <RectangleGeometry RadiusX=\"2\" RadiusY=\"2\" Rect=\"0,0,160,160\" />\n                                  </GeometryDrawing.Geometry>\n                                </GeometryDrawing>\n                                <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                  <GeometryDrawing.Geometry>\n                                    <StreamGeometry>M64.9999,90.5676C63.4307,90.5676 62.1621,91.8355 62.1621,93.4037 62.1621,94.9754 63.4307,96.2433 64.9999,96.2433 66.5691,96.2433 67.8378,94.9754 67.8378,93.4037 67.8378,91.8355 66.5691,90.5676 64.9999,90.5676z</StreamGeometry>\n                                  </GeometryDrawing.Geometry>\n                                </GeometryDrawing>\n                                <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                  <GeometryDrawing.Geometry>\n                                    <StreamGeometry>M91.7568,99.0811C90.1876,99.0811 88.9189,100.349 88.9189,101.917 88.9189,103.489 90.1876,104.757 91.7568,104.757 93.326,104.757 94.5946,103.489 94.5946,101.917 94.5946,100.349 93.326,99.0811 91.7568,99.0811z</StreamGeometry>\n                                  </GeometryDrawing.Geometry>\n                                </GeometryDrawing>\n                                <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                  <GeometryDrawing.Geometry>\n                                    <StreamGeometry>M133.76,106.248C132.813,106.722 131.453,106.747 130.197,106.313 129.349,106.014 128.434,105.732 127.523,105.451 125.832,104.935 123.006,104.074 122.468,103.422 121.585,102.244 119.908,102.009 118.73,102.899 117.552,103.785 117.317,105.455 118.207,106.633 118.502,107.032 118.901,107.359 119.303,107.676 115.224,113.321 97.3137,124.555 71.985,119.02 60.5719,116.525 52.8897,111.969 49.7641,105.85 47.5106,101.429 48.0233,96.8763 49.1019,94.4025 52.2026,87.9633 74.5837,73.1344 88.8732,64.7375 90.1405,63.9865 90.5641,62.3527 89.8166,61.0819 89.069,59.8147 87.3638,59.3057 86.1641,60.1351 85.0107,60.8114 81.0912,63.1393 76.0896,66.3073 74.3986,65.1718 71.4759,63.7693 66.7911,63.3102 59.3616,62.5734 42.1921,59.295 36.6458,56.9493 32.673,55.2692 23.6557,50.8199 25.6528,45.8116 26.1156,44.6441 28.2907,42.754 33.004,40.9529 36.6351,39.5683 40.2484,38.803 42.9789,38.4969 42.6122,38.6748 42.2562,38.8457 41.9216,39.0094 38.7106,40.5685 35.2076,42.3126 32.8545,44.3736 32.6836,44.2633 32.5056,44.1529 32.3846,44.0319 31.37,42.9712 29.6969,42.8928 28.6147,43.9465 27.5467,44.9645 27.5075,46.6552 28.5292,47.7195 29.4797,48.7162 30.8859,49.4673 32.6765,50.0403 32.7442,50.0617 32.8047,50.0937 32.8723,50.108 39.095,52.023 50.1592,51.7845 65.7587,51.1651 72.4834,50.9017 78.8343,50.6526 84.1314,50.7558 101.692,51.1046 114.889,58.0884 124.479,72.1093 130.371,80.7233 128.246,89.2091 124.875,96.5844 124.472,96.2748 124.042,95.8725 123.718,95.4739 122.796,94.3241 121.09,94.164 119.969,95.0503 118.816,95.9722 118.623,97.6487 119.542,98.802 120.083,99.4854 122.867,102.685 126.316,102.411 126.38,102.415 126.437,102.408 126.501,102.404 126.605,102.39 126.711,102.408 126.822,102.39 129.178,101.959 130.659,102.073 132.044,102.942 133.878,104.099 134.782,104.789 134.6,105.366 134.493,105.729 134.219,105.989 133.76,106.248z M60.9493,76.5124C60.4189,76.9004 59.8991,77.2848 59.3758,77.6692 58.8133,77.0641 58.3648,76.4875 58.1583,76.0674 58.7777,75.8823 59.8101,76.103 60.9493,76.5124z M134.614,98.2574C133.294,97.4209 131.909,97.0578 130.563,96.9083 133.724,89.202 135.736,79.1144 128.887,69.0944 118.406,53.7636 103.38,45.7974 84.2346,45.4165 78.7809,45.3097 72.3517,45.5625 65.5487,45.833 57.6493,46.1462 47.1369,46.5556 39.9921,45.9647 41.4161,45.1923 42.9326,44.4519 44.2462,43.8148 49.2728,41.3694 53.2314,39.465 51.9214,36.0871 51.2343,34.1151 49.1874,33.0793 45.8233,33.0045 38.7426,32.8444 23.4421,36.9378 20.6903,43.8397 19.1418,47.7267 18.8854,55.2301 34.5668,61.8615 41.0174,64.5952 59.237,67.9268 66.2678,68.6245 68.2542,68.8167 69.7743,69.219 70.9277,69.6461 69.3151,70.7068 67.6597,71.8209 65.9972,72.96 63.1102,71.3155 58.3897,69.3756 54.8654,71.7782 53.502,72.7001 52.7259,74.0599 52.6903,75.6083 52.6405,77.534 53.8081,79.4169 55.1217,80.9333 49.9314,85.073 45.7343,89.0846 44.2462,92.1778 42.5873,95.9793 41.9109,102.201 45.008,108.27 48.9382,115.973 57.6279,121.344 70.8423,124.235 88.1114,128.004 103.027,124.608 112.895,119.415 118.388,116.525 122.286,113.076 124.18,109.997 124.768,110.182 125.355,110.37 125.96,110.559 126.804,110.815 127.648,111.072 128.438,111.353 131.051,112.257 133.942,112.136 136.167,111.015 136.206,110.997 136.248,110.972 136.291,110.951 137.968,110.068 139.175,108.651 139.705,106.943 141.129,102.337 137.064,99.7915 134.614,98.2574z</StreamGeometry>\n                                  </GeometryDrawing.Geometry>\n                                </GeometryDrawing>\n                              </DrawingGroup.Children>\n                              <DrawingGroup.ClipGeometry>\n                                <RectangleGeometry Rect=\"0,0,160,160\" />\n                              </DrawingGroup.ClipGeometry>\n                            </DrawingGroup>\n                          </DrawingImage.Drawing>\n                        </DrawingImage>\n                      </Image.Source>\n                    </Image>\n                  </Border>\n                  <StackPanel Margin=\"6.5,0,0,0\">\n                    <TextBlock FontSize=\"16\" Text=\"Afdian\" TextDecorations=\"{x:Null}\" />\n                    <TextBlock FontSize=\"13\" Foreground=\"{DynamicResource TextColor}\" Text=\"afdian.com/a/DaiYui\" TextDecorations=\"{x:Null}\" />\n                  </StackPanel>\n                </DockPanel>\n              </Border>\n            </HyperlinkButton>\n            <HyperlinkButton Cursor=\"Hand\" FontFamily=\"{DynamicResource Font}\" HorizontalAlignment=\"Right\" Margin=\"0,0,2,0\" NavigateUri=\"https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0\">\n              <Border Margin=\"-5,0,-6,0\" Padding=\"0,0,5,0\">\n                <DockPanel>\n                  <Border ClipToBounds=\"True\" CornerRadius=\"{DynamicResource MainCornerRadius}\" Height=\"35\" Margin=\"4,0,0,0\" Width=\"35\">\n                    <Image HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                      <Image.Source>\n                        <DrawingImage>\n                          <DrawingImage.Drawing>\n                            <DrawingGroup>\n                              <DrawingGroup.ClipGeometry>\n                                <RectangleGeometry Rect=\"0,0,456,456\" />\n                              </DrawingGroup.ClipGeometry>\n                              <GeometryDrawing Brush=\"#FF512BD4\">\n                                <GeometryDrawing.Geometry>\n                                  <RectangleGeometry RadiusX=\"0\" RadiusY=\"0\" Rect=\"0,0,456,456\" />\n                                </GeometryDrawing.Geometry>\n                              </GeometryDrawing>\n                              <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                <GeometryDrawing.Geometry>\n                                  <PathGeometry Figures=\"M81.2738,291.333C78.0496,291.333 75.309,290.259 73.052,288.11 70.795,285.906 69.6665,283.289 69.6665,280.259 69.6665,277.173 70.795,274.529 73.052,272.325 75.309,270.121 78.0496,269.019 81.2738,269.019 84.5518,269.019 87.3193,270.121 89.5763,272.325 91.887,274.529 93.0424,277.173 93.0424,280.259 93.0424,283.289 91.887,285.906 89.5763,288.11 87.3193,290.259 84.5518,291.333 81.2738,291.333z\" />\n                                </GeometryDrawing.Geometry>\n                              </GeometryDrawing>\n                              <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                <GeometryDrawing.Geometry>\n                                  <PathGeometry Figures=\"M210.167,289.515L189.209,289.515 133.994,202.406C132.597,200.202,131.441,197.915,130.528,195.546L130.044,195.546C130.474,198.081,130.689,203.508,130.689,211.827L130.689,289.515 112.149,289.515 112.149,171 134.477,171 187.839,256.043C190.096,259.57,191.547,261.994,192.192,263.316L192.514,263.316C191.977,260.176,191.708,254.859,191.708,247.365L191.708,171 210.167,171 210.167,289.515z\" />\n                                </GeometryDrawing.Geometry>\n                              </GeometryDrawing>\n                              <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                <GeometryDrawing.Geometry>\n                                  <PathGeometry Figures=\"M300.449,289.515L235.561,289.515 235.561,171 297.87,171 297.87,187.695 254.746,187.695 254.746,221.249 294.485,221.249 294.485,237.861 254.746,237.861 254.746,272.903 300.449,272.903 300.449,289.515z\" />\n                                </GeometryDrawing.Geometry>\n                              </GeometryDrawing>\n                              <GeometryDrawing Brush=\"#FFFFFFFF\">\n                                <GeometryDrawing.Geometry>\n                                  <PathGeometry Figures=\"M392.667,187.695L359.457,187.695 359.457,289.515 340.272,289.515 340.272,187.695 307.143,187.695 307.143,171 392.667,171 392.667,187.695z\" />\n                                </GeometryDrawing.Geometry>\n                              </GeometryDrawing>\n                            </DrawingGroup>\n                          </DrawingImage.Drawing>\n                        </DrawingImage>\n                      </Image.Source>\n                    </Image>\n                  </Border>\n                  <StackPanel Margin=\"6.5,0,0,0\">\n                    <TextBlock FontSize=\"16\" Text=\".NET Core 8.0\" TextDecorations=\"{x:Null}\" />\n                    <TextBlock FontSize=\"13\" Foreground=\"{DynamicResource TextColor}\" Margin=\"2,0,0,0\" Text=\"dotnet.microsoft.com\" TextDecorations=\"{x:Null}\" />\n                  </StackPanel>\n                </DockPanel>\n              </Border>\n            </HyperlinkButton>\n            <HyperlinkButton Cursor=\"Hand\" FontFamily=\"{DynamicResource Font}\" HorizontalAlignment=\"Right\" Margin=\"0,0,2,0\" NavigateUri=\"https://docs.avaloniaui.net/\">\n              <Border Margin=\"-5,0,-6,0\" Padding=\"0,0,5,0\">\n                <DockPanel>\n                  <Border CornerRadius=\"{DynamicResource MainCornerRadius}\" Height=\"36\" Margin=\"4,0,0,0\" Width=\"36\">\n                    <Image HorizontalAlignment=\"Left\" VerticalAlignment=\"Center\">\n                      <Image.Source>\n                        <DrawingImage>\n                          <DrawingImage.Drawing>\n                            <DrawingGroup>\n                              <DrawingGroup.Children>\n                                <GeometryDrawing Brush=\"#FF0D6EFD\">\n                                  <GeometryDrawing.Geometry>\n                                    <PathGeometry Figures=\"M507.59,0L522.64,0C606.79,1.18 690.63,23.03 764.3,63.8 833.36,101.73 893.49,155.77 938.55,220.41 970.17,265.62 994.35,316.01 1009.83,368.97 1021.69,409.31 1028.12,451.13 1030,493.1L1030,749.99C1028.89,764.96 1029.56,780.01 1029.37,795.02 1029.24,827.69 1029.29,860.35 1029.13,893.02 1028.84,903.08 1030.06,913.32 1027.64,923.22 1021.45,955.61 1001.56,984.98 974.04,1003.08 954.66,1016.01 931.64,1023.21 908.38,1024L503.55,1024C438.64,1022.5 373.97,1008.94 314.16,983.6 254.72,958.52 200.02,922.18 153.98,876.98 98.54,822.93 55.61,756.12 29.64,683.18 -7.43,579.8 -9.59,464.35 23.35,359.6 46.35,285.87 86.61,217.67 139.67,161.58 182.42,116.29 233.44,78.8 289.51,51.66 357.22,18.62 432.3,1.11 507.59,0 M404.95,193.07C350.96,211.63 301.94,244.25 263.77,286.68 225.08,329.34 197.75,382.14 185.18,438.34 199.4,442.44 212.51,450.51 222.22,461.71 234.44,475.37 241.22,493.65 241.14,511.95 241.16,527.15 236.55,542.39 227.79,554.84 217.82,569.68 202.3,580.45 185.18,585.4 191.19,611.99 200.33,637.89 212.61,662.23 246.63,730.47 304.54,786.37 373.85,818.12 408.81,834.31 446.58,844.4 484.95,847.88 551.82,854.15 620.59,840.38 679.48,807.96 679.52,820.97 679.48,833.99 679.5,847 738.38,847 797.25,847 856.12,847 856.12,735.33 856.15,623.66 856.11,511.99 856.08,467.51 847.31,423.02 830.03,382.02 815.73,348 795.83,316.35 771.31,288.76 718.99,229.41 645.3,189.39 566.97,178.06 512.8,170.07 456.69,175.06 404.95,193.07 M152.53,458.6C134.28,461.84 118.33,475.32 111.89,492.67 107.67,503.91 107.32,516.58 111,528.01 115.26,541.44 125.02,553.11 137.63,559.46 148.67,565.36 161.85,567.05 174.07,564.47 188.17,561.6 200.95,552.77 208.62,540.6 216.34,528.72 218.95,513.72 215.83,499.91 212.74,485.81 203.64,473.24 191.35,465.71 179.9,458.59 165.76,456.02 152.53,458.6z\" />\n                                  </GeometryDrawing.Geometry>\n                                </GeometryDrawing>\n                                <GeometryDrawing Brush=\"#FF0D6EFD\">\n                                  <GeometryDrawing.Geometry>\n                                    <PathGeometry Figures=\"M510.29,350.32C550.39,348.6 590.88,362.4 621.51,388.36 650.87,412.85 671.1,448.09 677.11,485.88 683.9,526.56 674.25,569.69 650.58,603.49 628.68,635.15 595.25,658.65 557.94,668.25 517.67,678.82 473.34,673.38 437.05,652.87 403.51,634.27 376.94,603.37 363.8,567.31 349.87,529.59 350.78,486.61 366.51,449.58 381.56,413.47 410.28,383.25 445.61,366.44 465.7,356.56 487.94,351.19 510.29,350.32z\" />\n                                  </GeometryDrawing.Geometry>\n                                </GeometryDrawing>\n                              </DrawingGroup.Children>\n                            </DrawingGroup>\n                          </DrawingImage.Drawing>\n                        </DrawingImage>\n                      </Image.Source>\n                    </Image>\n                  </Border>\n                  <StackPanel Margin=\"6.5,0,0,0\">\n                    <TextBlock FontSize=\"16\" Text=\" AvaloniaUi\" TextDecorations=\"{x:Null}\" />\n                    <TextBlock FontSize=\"13\" Foreground=\"{DynamicResource TextColor}\" Margin=\"2,0,0,0\" Text=\"docs.avaloniaui.net\" TextDecorations=\"{x:Null}\" />\n                  </StackPanel>\n                </DockPanel>\n              </Border>\n            </HyperlinkButton>\n          </WrapPanel>\n          <StackPanel DockPanel.Dock=\"Top\" Margin=\"20,10,20,0\" VerticalAlignment=\"Top\">\n            <Grid VerticalAlignment=\"Top\">\n              <Image Height=\"25\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Top\" Width=\"25\">\n                <Image.Source>\n                  <DrawingImage>\n                    <DrawingImage.Drawing>\n                      <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                        <GeometryDrawing.Geometry>\n                          <PathGeometry Figures=\"M723.77001953125,333.55999755859375L642.9000244140625,574.8599853515625C681.3400268554688,595.4299926757812,749.510009765625,619.239990234375,806.6199951171875,572.3400268554688L723.77001953125,333.55999755859375z M299.55999755859375,333.55999755859375L218.69000244140625,574.8599853515625C257.1099853515625,595.4099731445312,325.2699890136719,619.239990234375,382.4100036621094,572.3400268554688L299.55999755859375,333.55999755859375z M509.24639892578125,67.12796020507812C513.7525024414062,67.17749786376953 518.324951171875,68.11250305175781 522.719970703125,70.02999877929688 523.9400024414062,70.55999755859375 525,71.29000091552734 526.1300048828125,71.94000244140625 535.1300048828125,74.91000366210938 542.9299926757812,81.41000366210938 547.0599975585938,90.76000213623047 589.8900146484375,187.75999450683594 644.2000122070312,206.74000549316406 723.5499877929688,206.74000549316406 803.3400268554688,206.74000549316406 858,187.30999755859375 901.27001953125,87.97000122070312 908.9099731445312,70.41000366210938 929.3300170898438,62.36000061035156 946.9199829101562,70.02999877929688 964.47998046875,77.66999816894531 972.510009765625,98.12000274658203 964.8599853515625,115.66999816894531 915.7899780273438,228.3300018310547 845.530029296875,263.2200012207031 776.1199951171875,272.7900085449219L876.8900146484375,563.280029296875C882.7999877929688,580.3400268554688 878.4600219726562,599.489990234375 865.8599853515625,612.0900268554688 825.4400024414062,652.5900268554688 778.2000122070312,668.3699951171875 731.3800048828125,668.3699951171875 680.9500122070312,668.3699951171875 631,650.0700073242188 590.5399780273438,624.6099853515625 572.2999877929688,613.1500244140625 564.4099731445312,590.6900024414062 571.3599853515625,570L670.97998046875,272.80999755859375C628.1300048828125,266.94000244140625,585.010009765625,251.3699951171875,546.7899780273438,213.99000549316406L546.7899780273438,887.75 719.47998046875,887.75C738.6300048828125,887.75 754.1599731445312,903.280029296875 754.1599731445312,922.4299926757812 754.1599731445312,941.5800170898438 738.6400146484375,957.1099853515625 719.47998046875,957.1099853515625L315.29998779296875,957.1099853515625C296.1499938964844,957.1099853515625 280.6199951171875,941.5800170898438 280.6199951171875,922.4299926757812 280.6199951171875,903.280029296875 296.1400146484375,887.75 315.29998779296875,887.75L477.4200134277344,887.75 477.4200134277344,212.42999267578125C438.79998779296875,250.8800048828125,395.2099914550781,266.82000732421875,351.9100036621094,272.7900085449219L452.69000244140625,563.280029296875C458.6099853515625,580.25 454.30999755859375,599.4199829101562 441.7200012207031,612.0399780273438 401.260009765625,652.5700073242188 354,668.3599853515625 307.1600036621094,668.3599853515625 256.739990234375,668.3599853515625 206.8000030517578,650.0599975585938 166.33999633789062,624.6099853515625 148.08999633789062,613.1199951171875 140.22000122070312,590.6699829101562 147.16000366210938,570L246.75999450683594,272.82000732421875C177.82000732421875,263.3800048828125 108.08999633789062,229.08999633789062 59.400001525878906,118.79000091552734 51.650001525878906,101.25 59.59000015258789,80.77999877929688 77.11000061035156,73.05000305175781 94.66999816894531,65.30000305175781 115.0999984741211,73.26000213623047 122.8499984741211,90.76000213623047 165.6699981689453,187.75999450683594 219.99000549316406,206.74000549316406 299.3500061035156,206.74000549316406 379.1300048828125,206.74000549316406 433.7799987792969,187.30999755859375 477.07000732421875,87.97000122070312 482.8074951171875,74.80000305175781 495.7281494140625,66.97937774658203 509.24639892578125,67.12796020507812z\" />\n                        </GeometryDrawing.Geometry>\n                      </GeometryDrawing>\n                    </DrawingImage.Drawing>\n                  </DrawingImage>\n                </Image.Source>\n              </Image>\n              <TextBlock FontFamily=\"{DynamicResource Font}\" FontSize=\"18\" Foreground=\"{DynamicResource TextColor}\" HorizontalAlignment=\"Left\" Margin=\"30,0,0,0\" Text=\"GPL 3.0 License\" TextDecorations=\"{x:Null}\" VerticalAlignment=\"Center\" />\n            </Grid>\n            <TextBlock DockPanel.Dock=\"Bottom\" FontFamily=\"{DynamicResource Font}\" FontSize=\"13\" Foreground=\"{DynamicResource TextColor}\" Margin=\"2,3,10,0\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.GPL3Text}\" TextDecorations=\"{x:Null}\" TextWrapping=\"Wrap\" />\n          </StackPanel>\n          <Grid DockPanel.Dock=\"Top\" Margin=\"10,12,10,10\">\n            <TextBlock FontFamily=\"{DynamicResource Font}\" FontSize=\"15\" Foreground=\"{DynamicResource TextColor}\" HorizontalAlignment=\"Left\" Margin=\"10,0,0,0\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OpenSourceProjectUsageTable}\" VerticalAlignment=\"Top\" />\n            <WrapPanel Margin=\"5,25,5,0\">\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/CurseForgeCommunity/.NET-APIClient\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" CurseForge.APIClient \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/amwx/FluentAvalonia\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" FluentAvaloniaUI \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/irihitech/Ursa.Avalonia\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" Irihi.Ursa \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/Blessing-Studio/MinecraftLaunch.Skin\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" MinecraftLaunch.Skin \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/naudio/NAudio\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" NAudio \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/irihitech/Semi.Avalonia\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" Semi.Avalonia \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/Ink-Marks-Studio/StarLight.Core\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" StarLight_Core \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/Blessing-Studio/MinecraftLaunch\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" MinecraftLaunch \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://www.newtonsoft.com/json\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" Newtonsoft.Json \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/yiyungent/Afdian.Sdk\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" Afdian.Sdk \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/AvaloniaUtils/AsyncImageLoader.Avalonia\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" AsyncImageLoader.Avalonia \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/CommunityToolkit/dotnet\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" CommunityToolkit.Mvvm \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/zzzprojects/html-agility-pack\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" HtmlAgilityPack \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/reactiveui/reactiveui\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" ReactiveUI \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n              <HyperlinkButton FontFamily=\"{DynamicResource Font}\" NavigateUri=\"https://github.com/xoofx/Tomlyn\">\n                <TextBlock Foreground=\"{DynamicResource SystemAccentColor}\" Text=\" Tomlyn \" TextDecorations=\"{x:Null}\" />\n              </HyperlinkButton>\n            </WrapPanel>\n          </Grid>\n        </DockPanel>\n      </Border>\n      <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\" Opacity=\"{DynamicResource MainOpacity}\" Padding=\"10\">\n        <StackPanel HorizontalAlignment=\"Stretch\" Margin=\"0\" Spacing=\"10\" VerticalAlignment=\"Stretch\">\n          <DockPanel HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\">\n            <StackPanel DockPanel.Dock=\"Left\" Margin=\"5,0,0,0\">\n              <TextBlock FontFamily=\"{DynamicResource Font}\" FontSize=\"16\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Sponsors}\" />\n              <TextBlock FontFamily=\"{DynamicResource Font}\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SponsorsTip}\" />\n            </StackPanel>\n            <HyperlinkButton DockPanel.Dock=\"Right\" HorizontalAlignment=\"Right\" Margin=\"3\" NavigateUri=\"https://afdian.com/a/DaiYui\">\n              <StackPanel Orientation=\"Horizontal\" Spacing=\"5\">\n                <PathIcon Data=\"F1 M 18.75 10 C 18.75 9.84375 18.719074 9.692383 18.657227 9.545898 C 18.595377 9.399414 18.512369 9.272461 18.408203 9.165039 C 18.304035 9.057617 18.181965 8.971354 18.041992 8.90625 C 17.902018 8.841146 17.75065 8.808594 17.587891 8.808594 L 17.519531 8.808594 L 12.929688 8.964844 L 8.017578 1.591797 C 7.972005 1.526693 7.906901 1.494141 7.822266 1.494141 C 7.763671 1.494141 7.714843 1.516928 7.675781 1.5625 C 7.636718 1.608074 7.617187 1.660156 7.617188 1.71875 L 7.617188 1.757812 L 9.189453 9.091797 L 3.095703 9.296875 L 1.875 6.445312 C 1.822917 6.315104 1.72526 6.25 1.582031 6.25 C 1.490885 6.25 1.414388 6.280925 1.352539 6.342773 C 1.29069 6.404623 1.259766 6.481121 1.259766 6.572266 C 1.259766 6.598309 1.276042 6.673178 1.308594 6.796875 C 1.341146 6.920573 1.381836 7.070312 1.430664 7.246094 C 1.479492 7.421875 1.534831 7.613933 1.59668 7.822266 C 1.658529 8.0306 1.715495 8.225912 1.767578 8.408203 C 1.819661 8.590495 1.866862 8.753256 1.90918 8.896484 C 1.951497 9.039714 1.979167 9.134115 1.992188 9.179688 C 1.901042 9.231771 1.811523 9.282227 1.723633 9.331055 C 1.635742 9.379883 1.557617 9.433594 1.489258 9.492188 C 1.420898 9.550781 1.363932 9.620769 1.318359 9.702148 C 1.272786 9.783529 1.25 9.882812 1.25 10 C 1.25 10.117188 1.272786 10.216472 1.318359 10.297852 C 1.363932 10.379232 1.420898 10.449219 1.489258 10.507812 C 1.557617 10.566406 1.635742 10.620117 1.723633 10.668945 C 1.811523 10.717773 1.901042 10.768229 1.992188 10.820312 C 1.979167 10.865886 1.951497 10.958659 1.90918 11.098633 C 1.866862 11.238607 1.819661 11.402995 1.767578 11.591797 C 1.715495 11.7806 1.658529 11.977539 1.59668 12.182617 C 1.534831 12.387695 1.479492 12.578125 1.430664 12.753906 C 1.381836 12.929688 1.341146 13.081055 1.308594 13.208008 C 1.276042 13.334961 1.259766 13.408203 1.259766 13.427734 C 1.259766 13.518881 1.29069 13.595378 1.352539 13.657227 C 1.414388 13.719076 1.490885 13.75 1.582031 13.75 C 1.72526 13.75 1.822917 13.684896 1.875 13.554688 L 3.095703 10.703125 L 9.189453 10.908203 L 7.617188 18.242188 L 7.617188 18.28125 C 7.617187 18.339844 7.636718 18.391928 7.675781 18.4375 C 7.714843 18.483072 7.763671 18.505859 7.822266 18.505859 C 7.906901 18.505859 7.972005 18.473307 8.017578 18.408203 L 12.929688 11.035156 L 17.519531 11.191406 L 17.587891 11.191406 C 17.75065 11.191406 17.902018 11.158854 18.041992 11.09375 C 18.181965 11.028646 18.304035 10.942383 18.408203 10.834961 C 18.512369 10.727539 18.595377 10.600586 18.657227 10.454102 C 18.719074 10.307617 18.75 10.15625 18.75 10 Z M 17.568359 7.568359 C 17.900391 7.568359 18.214518 7.631836 18.510742 7.758789 C 18.806965 7.885742 19.065754 8.059896 19.287109 8.28125 C 19.508463 8.502604 19.682617 8.761394 19.80957 9.057617 C 19.936523 9.353842 20 9.667969 20 10 C 20 10.338542 19.934895 10.655925 19.804688 10.952148 C 19.674479 11.248373 19.498697 11.507162 19.277344 11.728516 C 19.055988 11.94987 18.797199 12.124023 18.500977 12.250977 C 18.204752 12.37793 17.887369 12.441406 17.548828 12.441406 C 16.891275 12.441406 16.232096 12.425131 15.571289 12.392578 C 14.910481 12.360026 14.248047 12.330729 13.583984 12.304688 L 9.052734 19.101562 C 8.916016 19.303385 8.740234 19.462891 8.525391 19.580078 C 8.310547 19.697266 8.079427 19.755859 7.832031 19.755859 C 7.630208 19.755859 7.439778 19.716797 7.260742 19.638672 C 7.081706 19.560547 6.927083 19.454752 6.796875 19.321289 C 6.666667 19.187826 6.5625 19.031576 6.484375 18.852539 C 6.40625 18.673502 6.367188 18.483072 6.367188 18.28125 C 6.367188 18.177084 6.376953 18.076172 6.396484 17.978516 L 7.65625 12.109375 L 3.90625 11.982422 L 3.017578 14.052734 C 2.89388 14.345703 2.701823 14.576823 2.441406 14.746094 C 2.18099 14.915365 1.894531 15 1.582031 15 C 1.367188 15 1.163737 14.959311 0.97168 14.87793 C 0.779622 14.79655 0.611979 14.684245 0.46875 14.541016 C 0.325521 14.397787 0.213216 14.230144 0.131836 14.038086 C 0.050456 13.846029 0.009766 13.642578 0.009766 13.427734 C 0.009766 13.310547 0.030924 13.15918 0.073242 12.973633 C 0.11556 12.788086 0.166016 12.594401 0.224609 12.392578 C 0.283203 12.190756 0.341797 11.995443 0.400391 11.806641 C 0.458984 11.617839 0.507812 11.461589 0.546875 11.337891 C 0.371094 11.162109 0.236003 10.957031 0.141602 10.722656 C 0.047201 10.488281 0 10.247396 0 10 C 0 9.752604 0.047201 9.511719 0.141602 9.277344 C 0.236003 9.042969 0.371094 8.837891 0.546875 8.662109 C 0.507812 8.538412 0.458984 8.382162 0.400391 8.193359 C 0.341797 8.004558 0.283203 7.810873 0.224609 7.612305 C 0.166016 7.413738 0.11556 7.220053 0.073242 7.03125 C 0.030924 6.842448 0.009766 6.689453 0.009766 6.572266 C 0.009766 6.357422 0.050456 6.153972 0.131836 5.961914 C 0.213216 5.769857 0.325521 5.602215 0.46875 5.458984 C 0.611979 5.315756 0.779622 5.203451 0.97168 5.12207 C 1.163737 5.040691 1.367188 5.000001 1.582031 5 C 1.894531 5.000001 2.18099 5.084637 2.441406 5.253906 C 2.701823 5.423178 2.89388 5.654297 3.017578 5.947266 L 3.90625 8.017578 L 7.65625 7.890625 L 6.396484 2.021484 C 6.376953 1.923828 6.367188 1.822918 6.367188 1.71875 C 6.367188 1.516928 6.40625 1.326498 6.484375 1.147461 C 6.5625 0.968426 6.666667 0.812176 6.796875 0.678711 C 6.927083 0.545248 7.081706 0.439453 7.260742 0.361328 C 7.439778 0.283203 7.630208 0.244141 7.832031 0.244141 C 8.079427 0.244141 8.310547 0.302734 8.525391 0.419922 C 8.740234 0.537109 8.916016 0.696615 9.052734 0.898438 L 13.583984 7.695312 C 14.248047 7.675782 14.912109 7.64974 15.576172 7.617188 C 16.240234 7.584636 16.904297 7.568359 17.568359 7.568359 Z \" Foreground=\"{DynamicResource SystemAccentColor}\" Width=\"16\" />\n                <TextBlock FontFamily=\"{DynamicResource Font}\" Foreground=\"{DynamicResource SystemAccentColor}\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Sponsor}\" TextDecorations=\"{x:Null}\" />\n              </StackPanel>\n            </HyperlinkButton>\n          </DockPanel>\n          <WrapPanel Name=\"SponsorPanel\" />\n        </StackPanel>\n      </Border>\n    </StackPanel>\n  </ScrollViewer>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/About.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\nusing Afdian.Sdk;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Platform.Storage;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Json;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.IO.Disk;\n\nnamespace YMCL.Views.Main.Pages;\n\npublic partial class About : UserControl\n{\n    public About()\n    {\n        InitializeComponent();\n        InitViewData();\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        Loaded += (_, _) =>\n        {\n            var length = Public.Module.IO.Disk.Getter.GetDirectoryLength(ConfigPath.UserDataRootPath);\n            var userDataSize = Math.Round(length / 1024, 2) >= 512\n                ? $\"{Math.Round(length / 1024 / 1024, 2)} Mib\"\n                : $\"{Math.Round(length / 1024, 2)} Kib\";\n            UserDataSize.Text = userDataSize;\n        };\n        OpenUserDataFolderBtn.Click += async (_, _) =>\n        {\n            _ = Opener.OpenFolder(ConfigPath.UserDataRootPath);\n        };\n        CheckUpdateBtn.Click += async (_, _) =>\n        {\n            CheckUpdateBtn.IsEnabled = false;\n            var ring = new ProgressRing();\n            CheckUpdateBtn.Width = CheckUpdateBtn.Bounds.Width;\n            CheckUpdateBtn.Content = ring;\n            ring.Height = 17;\n            ring.Width = 17;\n            var info = await Public.Module.IO.Network.Update.CheckUpdateAsync();\n            if (!info.Success)\n            {\n                CheckUpdateBtn.IsEnabled = true;\n                CheckUpdateBtn.Content = MainLang.CheckUpdate;\n                Notice(MainLang.CheckUpdateFail, NotificationType.Error);\n                return;\n            }\n\n            if (!info.IsNeedUpdate)\n            {\n                CheckUpdateBtn.IsEnabled = true;\n                CheckUpdateBtn.Content = MainLang.CheckUpdate;\n                Notice(MainLang.CurrentlyTheLatestVersion, NotificationType.Success);\n                return;\n            }\n\n            CheckUpdateBtn.IsEnabled = true;\n            CheckUpdateBtn.Content = MainLang.CheckUpdate;\n            var dialog = ContentDialogResult.None;\n\n            await Dispatcher.UIThread.Invoke(async () =>\n            {\n                dialog = await ShowDialogAsync(MainLang.FoundNewVersion,\n                    $\"{info.NewVersion}\\n\\n{info.GithubUrl}\"\n                    , b_cancel: MainLang.Cancel, b_secondary: MainLang.SkipThisVersion,\n                    b_primary: MainLang.Update);\n            });\n\n            if (dialog == ContentDialogResult.Primary)\n            {\n                var updateAppAsync = await Public.Module.IO.Network.Update.UpdateAppAsync();\n                if (!updateAppAsync) Notice(MainLang.UpdateFail, NotificationType.Error);\n            }\n            else if (dialog == ContentDialogResult.Secondary)\n            {\n                Dispatcher.UIThread.Invoke(() =>\n                {\n                    Public.Const.Data.SettingEntry.SkipUpdateVersion = info.NewVersion;\n                    Notice(MainLang.SkipVersionTip.Replace(\"{version}\", info.NewVersion), NotificationType.Success);\n                });\n            }\n        };\n    }\n\n    private async void InitViewData()\n    {\n        UserDataFolderPath.Text = ConfigPath.UserDataRootPath;\n        const string resourceName = \"YMCL.Public.Texts.DateTime.txt\";\n        var _assembly = Assembly.GetExecutingAssembly();\n        var stream = _assembly.GetManifestResourceStream(resourceName);\n        using (var reader = new StreamReader(stream!))\n        {\n            var result = await reader.ReadToEndAsync();\n            Version.Text = $\"v{result.Trim()}\";\n        }\n\n        await System.Threading.Tasks.Task.Run(async () =>\n        {\n            try\n            {\n                var afdianClient =\n                    new AfdianClient(\"5f710d20e0aa11edb6cf5254001e7c00\", \"FseYBK8u9Vvr7CJxhk4Dw6aMN5WcqgUf\");\n                var page = 1;\n                List<AfdianSponsor.ListItem> list = [];\n                while (true)\n                {\n                    var json = await afdianClient.QuerySponsorAsync(page);\n                    if (string.IsNullOrWhiteSpace(json)) break;\n                    var data = JsonConvert.DeserializeObject<AfdianSponsor.Root>(json);\n                    if (data is not { ec: 200 } || data.data.list.Count == 0) break;\n                    data.data.list.ForEach(x => { list.Add(x); });\n                    if (page >= data.data.total_page) break;\n                    page++;\n                }\n\n                list.OrderBy(x => x.all_sum_amount).ToList().ForEach(x =>\n                {\n                    Dispatcher.UIThread.Invoke(() =>\n                    {\n                        var block = new TextBlock\n                        {\n                            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], FontSize = 14,\n                            TextWrapping = TextWrapping.Wrap, TextDecorations = null,\n                            Foreground = new SolidColorBrush(Data.SettingEntry.AccentColor),\n                            Text = $\"{x.user.name} ￥{x.all_sum_amount}\"\n                        };\n                        var link = new HyperlinkButton\n                        {\n                            Margin = new Thickness(3), Content = block\n                        };\n                        SponsorPanel.Children.Add(link);\n                    });\n                });\n            }\n            catch\n            {\n                Dispatcher.UIThread.Invoke(() =>\n                {\n                    var block = new TextBlock\n                    {\n                        FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], FontSize = 14,\n                        TextWrapping = TextWrapping.Wrap, TextDecorations = null,\n                        Foreground = new SolidColorBrush(Data.SettingEntry.AccentColor),\n                        Text = MainLang.LoadFail\n                    };\n                    var link = new HyperlinkButton\n                    {\n                        Margin = new Thickness(3), Content = block\n                    };\n                    SponsorPanel.Children.Add(link);\n                });\n            }\n        });\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Download.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.Download\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            DockPanel.Dock=\"Top\"\n            Height=\"40\"\n            Margin=\"10,10,10,0\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            VerticalAlignment=\"Top\">\n            <ui:NavigationView\n                AlwaysShowHeader=\"False\"\n                Background=\"{DynamicResource 1x}\"\n                IsBackButtonVisible=\"False\"\n                IsBackEnabled=\"False\"\n                IsPaneToggleButtonVisible=\"False\"\n                IsSettingsVisible=\"False\"\n                PaneDisplayMode=\"Top\"\n                SelectionFollowsFocus=\"False\"\n                x:Name=\"Nav\">\n                <ui:NavigationView.MenuItems>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavAuto\"\n                        Tag=\"autoInstall\">\n                        <DockPanel>\n                            <Image\n                                Height=\"15\"\n                                Margin=\"0,0,7,0\"\n                                Width=\"15\">\n                                <Image.Source>\n                                    <DrawingImage>\n                                        <DrawingImage.Drawing>\n                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                <GeometryDrawing.Geometry>\n                                                    <PathGeometry Figures=\"M544,640C552.6669921875,640 560.1669921875,643.1669921875 566.5,649.5 572.8330078125,655.8330078125 576,663.3330078125 576,672 576,680.6669921875 572.8330078125,688.1669921875 566.5,694.5 560.1669921875,700.8330078125 552.6669921875,704 544,704 535.3330078125,704 527.8330078125,700.8330078125 521.5,694.5 515.1669921875,688.1669921875 512,680.6669921875 512,672 512,663.3330078125 515.1669921875,655.8330078125 521.5,649.5 527.8330078125,643.1669921875 535.3330078125,640 544,640z M544,512C552.6669921875,512 560.1669921875,515.1669921875 566.5,521.5 572.8330078125,527.8330078125 576,535.3330078125 576,544 576,552.6669921875 572.8330078125,560.1669921875 566.5,566.5 560.1669921875,572.8330078125 552.6669921875,576 544,576 535.3330078125,576 527.8330078125,572.8330078125 521.5,566.5 515.1669921875,560.1669921875 512,552.6669921875 512,544 512,535.3330078125 515.1669921875,527.8330078125 521.5,521.5 527.8330078125,515.1669921875 535.3330078125,512 544,512z M672,448C677.6669921875,448 683.1669921875,449.5830078125 688.5,452.75 693.8330078125,455.9169921875 697.8330078125,460.1669921875 700.5,465.5L828.5,721.5C830.8330078125,726.1669921875 832,731 832,736 832,744.6669921875 828.8330078125,752.1669921875 822.5,758.5 816.1669921875,764.8330078125 808.6669921875,768 800,768 794.3330078125,768 788.8330078125,766.4169921875 783.5,763.25 778.1669921875,760.0830078125 774.1669921875,755.8330078125 771.5,750.5L643.5,494.5C641.1669921875,489.8330078125 640,485 640,480 640,471.3330078125 643.1669921875,463.8330078125 649.5,457.5 655.8330078125,451.1669921875 663.3330078125,448 672,448z M313.5,448C342.8330078125,448 367.4169921875,454.5 387.25,467.5 407.0830078125,480.5 421.3330078125,501.3330078125 430,530 431,533 431.5,536.3330078125 431.5,540 431.5,548 428.6669921875,555 423,561 417.3330078125,567 410.3330078125,570 402,570 393.3330078125,570 386.8330078125,567.6669921875 382.5,563 378.1669921875,558.3330078125 374.5,552.8330078125 371.5,546.5 368.5,540.1669921875 365.25,533.75 361.75,527.25 358.25,520.75 353.1669921875,515.8330078125 346.5,512.5 342.1669921875,510.5 337.5,509.25 332.5,508.75 327.5,508.25 322.5,508 317.5,508L312,508C300.6669921875,508 291.1669921875,510.9169921875 283.5,516.75 275.8330078125,522.5830078125 269.6669921875,530 265,539 260.3330078125,548 257,557.75 255,568.25 253,578.75 252,588.6669921875 252,598 252,610.3330078125 252.58299255371094,623 253.75,636 254.91700744628906,649 257.9169921875,660.9169921875 262.75,671.75 267.5830078125,682.5830078125 274.5830078125,691.4169921875 283.75,698.25 292.9169921875,705.0830078125 305.5,708.5 321.5,708.5 330.8330078125,708.5 338.4169921875,707.25 344.25,704.75 350.0830078125,702.25 355,699.1669921875 359,695.5 363,691.8330078125 366.4169921875,687.75 369.25,683.25 372.0830078125,678.75 374.9169921875,674.6669921875 377.75,671 380.5830078125,667.3330078125 383.8330078125,664.25 387.5,661.75 391.1669921875,659.25 396,658 402,658 410.3330078125,658 417.3330078125,660.9169921875 423,666.75 428.6669921875,672.5830078125 431.5,679.6669921875 431.5,688 431.5,692 430.6669921875,696.1669921875 429,700.5 419.3330078125,722.8330078125 404.8330078125,739.6669921875 385.5,751 366.1669921875,762.3330078125 344.5,768 320.5,768 293.8330078125,768 270.4169921875,761.1669921875 250.25,747.5 230.08299255371094,733.8330078125 215.16700744628906,714.6669921875 205.5,690 198.83299255371094,673.3330078125 194.91700744628906,657 193.75,641 192.58299255371094,625 192,608.3330078125 192,591 192,580.6669921875 193.25,569.9169921875 195.75,558.75 198.25,547.5830078125 201.33299255371094,537.1669921875 205,527.5 214,502.8330078125 227.66700744628906,483.4169921875 246,469.25 264.3330078125,455.0830078125 286.8330078125,448 313.5,448z M128,320.5L128,770.5C128,787.1669921875 131.41700744628906,803.0830078125 138.25,818.25 145.08299255371094,833.4169921875 154.25,846.75 165.75,858.25 177.25,869.75 190.58299255371094,878.9169921875 205.75,885.75 220.91700744628906,892.5830078125 236.83299255371094,896 253.5,896L770.5,896C787.1669921875,896 803.0830078125,892.5830078125 818.25,885.75 833.4169921875,878.9169921875 846.75,869.75 858.25,858.25 869.75,846.75 878.9169921875,833.4169921875 885.75,818.25 892.5830078125,803.0830078125 896,787.1669921875 896,770.5L896,320.5 128,320.5z M253.5,128C236.83299255371094,128 220.91700744628906,131.41700744628906 205.75,138.25 190.58299255371094,145.08299255371094 177.25,154.25 165.75,165.75 154.25,177.25 145.08299255371094,190.5 138.25,205.5 131.41700744628906,220.5 128,236.33299255371094 128,253L128,255.5 896,255.5 896,253C896,236.33299255371094 892.5830078125,220.5 885.75,205.5 878.9169921875,190.5 869.75,177.25 858.25,165.75 846.75,154.25 833.4169921875,145.08299255371094 818.25,138.25 803.0830078125,131.41700744628906 787.1669921875,128 770.5,128L253.5,128z M252,63.999996185302734L772,63.999996185302734C797,64.0000991821289 820.9169921875,69.0833969116211 843.75,79.25000762939453 866.5830078125,89.41670227050781 886.5830078125,103.08300018310547 903.75,120.25 920.9169921875,137.41700744628906 934.5830078125,157.41700744628906 944.75,180.25 954.9169921875,203.08299255371094 960,227 960,252L960,772C960,797 954.9169921875,820.9169921875 944.75,843.75 934.5830078125,866.5830078125 920.9169921875,886.5830078125 903.75,903.75 886.5830078125,920.9169921875 866.5830078125,934.5830078125 843.75,944.75 820.9169921875,954.9169921875 797,960 772,960L252,960C227,960 203.08299255371094,954.9169921875 180.25,944.75 157.41700744628906,934.5830078125 137.41700744628906,920.9169921875 120.25,903.75 103.08300018310547,886.5830078125 89.41670227050781,866.5830078125 79.25000762939453,843.75 69.08329772949219,820.9169921875 64,797 63.999996185302734,772L63.999996185302734,252C64,227 69.08329772949219,203.08299255371094 79.25000762939453,180.25 89.41670227050781,157.41700744628906 103.08300018310547,137.41700744628906 120.25,120.25 137.41700744628906,103.08300018310547 157.41700744628906,89.41670227050781 180.25,79.25000762939453 203.08299255371094,69.0833969116211 227,64.0000991821289 252,63.999996185302734z\" />\n                                                </GeometryDrawing.Geometry>\n                                            </GeometryDrawing>\n                                        </DrawingImage.Drawing>\n                                    </DrawingImage>\n                                </Image.Source>\n                            </Image>\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoInstall}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavFavourite\"\n                        Tag=\"favourite\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 4.228516 19.511719 C 4.059245 19.511719 3.911133 19.451498 3.78418 19.331055 C 3.657227 19.210611 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.8444 3.597005 18.808594 3.603516 18.789062 L 4.648438 12.675781 L 0.205078 8.339844 C 0.08138 8.222656 0.019531 8.072917 0.019531 7.890625 C 0.019531 7.740887 0.071615 7.605795 0.175781 7.485352 C 0.279948 7.364909 0.406901 7.294922 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.709637 9.571939 0.625 9.672852 0.566406 C 9.773763 0.507812 9.886067 0.478516 10.009766 0.478516 C 10.120442 0.478516 10.224609 0.509441 10.322266 0.571289 C 10.419922 0.633139 10.494791 0.709637 10.546875 0.800781 L 13.496094 6.25 L 19.375 6.25 C 19.54427 6.25 19.690754 6.31185 19.814453 6.435547 C 19.93815 6.559245 20 6.705729 20 6.875 C 20 7.044271 19.93815 7.190756 19.814453 7.314453 C 19.690754 7.438151 19.54427 7.5 19.375 7.5 L 13.125 7.5 C 13.014322 7.5 12.908528 7.469076 12.807617 7.407227 C 12.706705 7.345379 12.630207 7.265626 12.578125 7.167969 L 10.029297 2.460938 L 7.666016 7.236328 C 7.574869 7.431641 7.418619 7.545573 7.197266 7.578125 L 1.992188 8.330078 L 5.761719 12.011719 C 5.885417 12.135417 5.947266 12.281901 5.947266 12.451172 C 5.947266 12.496745 5.94401 12.532553 5.9375 12.558594 L 5.048828 17.753906 L 9.707031 15.302734 C 9.791666 15.257162 9.889322 15.234375 10 15.234375 C 10.169271 15.234375 10.315755 15.294597 10.439453 15.415039 C 10.56315 15.535482 10.625 15.680339 10.625 15.849609 C 10.625 15.966797 10.595703 16.075846 10.537109 16.176758 C 10.478516 16.27767 10.397135 16.354166 10.292969 16.40625 L 4.511719 19.443359 C 4.427083 19.488932 4.332682 19.511719 4.228516 19.511719 Z M 13.125 11.25 C 12.955729 11.25 12.809244 11.188151 12.685547 11.064453 C 12.561849 10.940756 12.5 10.794271 12.5 10.625 C 12.5 10.455729 12.561849 10.309245 12.685547 10.185547 C 12.809244 10.06185 12.955729 10 13.125 10 L 19.375 10 C 19.54427 10 19.690754 10.06185 19.814453 10.185547 C 19.93815 10.309245 20 10.455729 20 10.625 C 20 10.794271 19.93815 10.940756 19.814453 11.064453 C 19.690754 11.188151 19.54427 11.25 19.375 11.25 Z M 13.125 15 C 12.955729 15 12.809244 14.938151 12.685547 14.814453 C 12.561849 14.690756 12.5 14.544271 12.5 14.375 C 12.5 14.205729 12.561849 14.059245 12.685547 13.935547 C 12.809244 13.81185 12.955729 13.75 13.125 13.75 L 19.375 13.75 C 19.54427 13.75 19.690754 13.81185 19.814453 13.935547 C 19.93815 14.059245 20 14.205729 20 14.375 C 20 14.544271 19.93815 14.690756 19.814453 14.814453 C 19.690754 14.938151 19.54427 15 19.375 15 Z \"\n                                Margin=\"0,0,5,0\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Favourites}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavCf\"\n                        Tag=\"curseForge\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"M0,1.0969204595312476E-05L1082.4422607421875,1.0969204595312476E-05 1082.4422607421875,120.4263916015625 1575.095703125,120.4263916015625C1524.2740478515625,272.08636474609375 1202.6539306640625,324.142333984375 1202.6539306640625,324.142333984375 737.745849609375,488.68212890625 1257.3931884765625,803.0573120117188 1257.3931884765625,803.0573120117188L1324.905029296875,1023.40966796875 607.9278564453125,1023.40966796875C713.5961303710938,914.3604736328125 849.3173217773438,845.9900512695312 984.2871704101562,802.1986083984375 629.6089477539062,796.0270385742188 436.19683837890625,924.2886352539062 334.6608581542969,1023.40966796875L399.5966796875,803.0573120117188C399.5966796875,803.0573120117188 778.1026000976562,574.064697265625 599.931640625,404.6949462890625 469.84539794921875,303.4272766113281 133.35989379882812,321.3517150878906 133.35989379882812,321.3517150878906L133.35989379882812,158.74388122558594 0,1.0969204595312476E-05z\"\n                                Margin=\"0,0,5,0\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Text=\"CurseForge\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavMr\"\n                        Tag=\"modrinth\">\n                        <DockPanel>\n                            <Image Margin=\"0,0,5,0\" Width=\"16\">\n                                <Image.Source>\n                                    <DrawingImage>\n                                        <DrawingImage.Drawing>\n                                            <DrawingGroup>\n                                                <DrawingGroup.Children>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <StreamGeometry>M503.16,323.56C514.55,281.47 515.32,235.91 503.2,190.76 466.57,54.2299 326.04,-26.8001 189.33,9.77991 83.8101,38.0199 11.3899,128.07 0.689941,230.47L43.99,230.47C54.29,147.33 113.74,74.7298 199.75,51.7098 306.05,23.2598 415.13,80.6699 453.17,181.38L411.03,192.65C391.64,145.8,352.57,111.45,306.3,96.8198L298.56,140.66C335.09,154.13 364.72,184.5 375.56,224.91 391.36,283.8 361.94,344.14 308.56,369.17L320.09,412.16C390.25,383.21,432.4,310.3,422.43,235.14L464.41,223.91C468.91,252.62,467.35,281.16,460.55,308.07L503.16,323.56z</StreamGeometry>\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"M321.99,504.22C185.27,540.8 44.7501,459.77 8.11011,323.24 3.84011,307.31 1.17,291.33 0,275.46L43.27,275.46C44.36,287.37 46.4699,299.35 49.6799,311.29 53.0399,323.8 57.45,335.75 62.79,347.07L101.38,323.92C98.1299,316.42 95.39,308.6 93.21,300.47 69.17,210.87 122.41,118.77 212.13,94.7601 229.13,90.2101 246.23,88.4401 262.93,89.1501L255.19,133C244.73,133.05 234.11,134.42 223.53,137.25 157.31,154.98 118.01,222.95 135.75,289.09 136.85,293.16 138.13,297.13 139.59,300.99L188.94,271.38 174.07,231.95 220.67,184.08 279.57,171.39 296.62,192.38 269.47,219.88 245.79,227.33 228.87,244.72 237.16,267.79C237.16,267.79,253.95,285.63,253.98,285.64L277.7,279.33 294.58,260.79 331.44,249.12 342.42,273.82 304.39,320.45 240.66,340.63 212.08,308.81 162.26,338.7C187.8,367.78,226.2,383.93,266.01,380.56L277.54,423.55C218.13,431.41,160.1,406.82,124.05,361.64L85.6399,384.68C136.25,451.17 223.84,484.11 309.61,461.16 371.35,444.64 419.4,402.56 445.42,349.38L488.06,364.88C457.17,431.16,398.22,483.82,321.99,504.22z\" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingGroup.Children>\n                                                <DrawingGroup.ClipGeometry>\n                                                    <RectangleGeometry Rect=\"0,0,512,514\" />\n                                                </DrawingGroup.ClipGeometry>\n                                            </DrawingGroup>\n                                        </DrawingImage.Drawing>\n                                    </DrawingImage>\n                                </Image.Source>\n                            </Image>\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Text=\"Modrinth\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                </ui:NavigationView.MenuItems>\n                <!-- <ui:NavigationView.FooterMenuItems> -->\n                <!--     <ui:NavigationViewItem -->\n                <!--         HorizontalAlignment=\"Right\" -->\n                <!--         IsSelected=\"True\" -->\n                <!--         Margin=\"0,0,0,7\" -->\n                <!--         Tag=\"customDownload\"> -->\n                <!--         <DockPanel> -->\n                <!--             <PathIcon -->\n                <!--                 Data=\"F1 M 18.75 10 C 18.75 9.84375 18.719074 9.692383 18.657227 9.545898 C 18.595377 9.399414 18.512369 9.272461 18.408203 9.165039 C 18.304035 9.057617 18.181965 8.971354 18.041992 8.90625 C 17.902018 8.841146 17.75065 8.808594 17.587891 8.808594 L 17.519531 8.808594 L 12.929688 8.964844 L 8.017578 1.591797 C 7.972005 1.526693 7.906901 1.494141 7.822266 1.494141 C 7.763671 1.494141 7.714843 1.516928 7.675781 1.5625 C 7.636718 1.608074 7.617187 1.660156 7.617188 1.71875 L 7.617188 1.757812 L 9.189453 9.091797 L 3.095703 9.296875 L 1.875 6.445312 C 1.822917 6.315104 1.72526 6.25 1.582031 6.25 C 1.490885 6.25 1.414388 6.280925 1.352539 6.342773 C 1.29069 6.404623 1.259766 6.481121 1.259766 6.572266 C 1.259766 6.598309 1.276042 6.673178 1.308594 6.796875 C 1.341146 6.920573 1.381836 7.070312 1.430664 7.246094 C 1.479492 7.421875 1.534831 7.613933 1.59668 7.822266 C 1.658529 8.0306 1.715495 8.225912 1.767578 8.408203 C 1.819661 8.590495 1.866862 8.753256 1.90918 8.896484 C 1.951497 9.039714 1.979167 9.134115 1.992188 9.179688 C 1.901042 9.231771 1.811523 9.282227 1.723633 9.331055 C 1.635742 9.379883 1.557617 9.433594 1.489258 9.492188 C 1.420898 9.550781 1.363932 9.620769 1.318359 9.702148 C 1.272786 9.783529 1.25 9.882812 1.25 10 C 1.25 10.117188 1.272786 10.216472 1.318359 10.297852 C 1.363932 10.379232 1.420898 10.449219 1.489258 10.507812 C 1.557617 10.566406 1.635742 10.620117 1.723633 10.668945 C 1.811523 10.717773 1.901042 10.768229 1.992188 10.820312 C 1.979167 10.865886 1.951497 10.958659 1.90918 11.098633 C 1.866862 11.238607 1.819661 11.402995 1.767578 11.591797 C 1.715495 11.7806 1.658529 11.977539 1.59668 12.182617 C 1.534831 12.387695 1.479492 12.578125 1.430664 12.753906 C 1.381836 12.929688 1.341146 13.081055 1.308594 13.208008 C 1.276042 13.334961 1.259766 13.408203 1.259766 13.427734 C 1.259766 13.518881 1.29069 13.595378 1.352539 13.657227 C 1.414388 13.719076 1.490885 13.75 1.582031 13.75 C 1.72526 13.75 1.822917 13.684896 1.875 13.554688 L 3.095703 10.703125 L 9.189453 10.908203 L 7.617188 18.242188 L 7.617188 18.28125 C 7.617187 18.339844 7.636718 18.391928 7.675781 18.4375 C 7.714843 18.483072 7.763671 18.505859 7.822266 18.505859 C 7.906901 18.505859 7.972005 18.473307 8.017578 18.408203 L 12.929688 11.035156 L 17.519531 11.191406 L 17.587891 11.191406 C 17.75065 11.191406 17.902018 11.158854 18.041992 11.09375 C 18.181965 11.028646 18.304035 10.942383 18.408203 10.834961 C 18.512369 10.727539 18.595377 10.600586 18.657227 10.454102 C 18.719074 10.307617 18.75 10.15625 18.75 10 Z M 17.568359 7.568359 C 17.900391 7.568359 18.214518 7.631836 18.510742 7.758789 C 18.806965 7.885742 19.065754 8.059896 19.287109 8.28125 C 19.508463 8.502604 19.682617 8.761394 19.80957 9.057617 C 19.936523 9.353842 20 9.667969 20 10 C 20 10.338542 19.934895 10.655925 19.804688 10.952148 C 19.674479 11.248373 19.498697 11.507162 19.277344 11.728516 C 19.055988 11.94987 18.797199 12.124023 18.500977 12.250977 C 18.204752 12.37793 17.887369 12.441406 17.548828 12.441406 C 16.891275 12.441406 16.232096 12.425131 15.571289 12.392578 C 14.910481 12.360026 14.248047 12.330729 13.583984 12.304688 L 9.052734 19.101562 C 8.916016 19.303385 8.740234 19.462891 8.525391 19.580078 C 8.310547 19.697266 8.079427 19.755859 7.832031 19.755859 C 7.630208 19.755859 7.439778 19.716797 7.260742 19.638672 C 7.081706 19.560547 6.927083 19.454752 6.796875 19.321289 C 6.666667 19.187826 6.5625 19.031576 6.484375 18.852539 C 6.40625 18.673502 6.367188 18.483072 6.367188 18.28125 C 6.367188 18.177084 6.376953 18.076172 6.396484 17.978516 L 7.65625 12.109375 L 3.90625 11.982422 L 3.017578 14.052734 C 2.89388 14.345703 2.701823 14.576823 2.441406 14.746094 C 2.18099 14.915365 1.894531 15 1.582031 15 C 1.367188 15 1.163737 14.959311 0.97168 14.87793 C 0.779622 14.79655 0.611979 14.684245 0.46875 14.541016 C 0.325521 14.397787 0.213216 14.230144 0.131836 14.038086 C 0.050456 13.846029 0.009766 13.642578 0.009766 13.427734 C 0.009766 13.310547 0.030924 13.15918 0.073242 12.973633 C 0.11556 12.788086 0.166016 12.594401 0.224609 12.392578 C 0.283203 12.190756 0.341797 11.995443 0.400391 11.806641 C 0.458984 11.617839 0.507812 11.461589 0.546875 11.337891 C 0.371094 11.162109 0.236003 10.957031 0.141602 10.722656 C 0.047201 10.488281 0 10.247396 0 10 C 0 9.752604 0.047201 9.511719 0.141602 9.277344 C 0.236003 9.042969 0.371094 8.837891 0.546875 8.662109 C 0.507812 8.538412 0.458984 8.382162 0.400391 8.193359 C 0.341797 8.004558 0.283203 7.810873 0.224609 7.612305 C 0.166016 7.413738 0.11556 7.220053 0.073242 7.03125 C 0.030924 6.842448 0.009766 6.689453 0.009766 6.572266 C 0.009766 6.357422 0.050456 6.153972 0.131836 5.961914 C 0.213216 5.769857 0.325521 5.602215 0.46875 5.458984 C 0.611979 5.315756 0.779622 5.203451 0.97168 5.12207 C 1.163737 5.040691 1.367188 5.000001 1.582031 5 C 1.894531 5.000001 2.18099 5.084637 2.441406 5.253906 C 2.701823 5.423178 2.89388 5.654297 3.017578 5.947266 L 3.90625 8.017578 L 7.65625 7.890625 L 6.396484 2.021484 C 6.376953 1.923828 6.367188 1.822918 6.367188 1.71875 C 6.367188 1.516928 6.40625 1.326498 6.484375 1.147461 C 6.5625 0.968426 6.666667 0.812176 6.796875 0.678711 C 6.927083 0.545248 7.081706 0.439453 7.260742 0.361328 C 7.439778 0.283203 7.630208 0.244141 7.832031 0.244141 C 8.079427 0.244141 8.310547 0.302734 8.525391 0.419922 C 8.740234 0.537109 8.916016 0.696615 9.052734 0.898438 L 13.583984 7.695312 C 14.248047 7.675782 14.912109 7.64974 15.576172 7.617188 C 16.240234 7.584636 16.904297 7.568359 17.568359 7.568359 Z \" -->\n                <!--                 Margin=\"0,0,5,0\" -->\n                <!--                 Width=\"16\" /> -->\n                <!--             <TextBlock -->\n                <!--                 FontFamily=\"{DynamicResource Font}\" -->\n                <!--                 FontSize=\"14\" -->\n                <!--                 Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CustomDownload}\" /> -->\n                <!--         </DockPanel> -->\n                <!--     </ui:NavigationViewItem> -->\n                <!-- </ui:NavigationView.FooterMenuItems> -->\n            </ui:NavigationView>\n        </Border>\n        <ContentControl\n            DockPanel.Dock=\"Bottom\"\n            Margin=\"0,10,0,0\"\n            Name=\"FrameView\" />\n    </DockPanel>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Download.axaml.cs",
    "content": "﻿using FluentAvalonia.UI.Controls;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Views.Main.Pages;\n\npublic partial class Download : UserControl\n{\n    public readonly DownloadPages.AutoInstall _autoInstall = new();\n    public readonly DownloadPages.CurseForge _curseForge = new();\n    public readonly DownloadPages.Modrinth _modrinth = new();\n    public readonly DownloadPages.Favourites _favourites = new();\n    public NavigationView NavigationView => Nav;\n    public ContentControl Frame => FrameView;\n\n    public Download()\n    {\n        InitializeComponent();FrameView.Content = _autoInstall;\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        Nav.SelectionChanged += (o, e) =>\n        {\n            var tag = ((e.SelectedItem as NavigationViewItem).Tag as string)!;\n            UserControl page = tag switch\n            {\n                \"autoInstall\" => _autoInstall,\n                \"curseForge\" => _curseForge,\n                \"modrinth\" => _modrinth,\n                \"favourite\" => _favourites,\n                _ => null\n            };\n            if (page == null) return;\n            FrameView.Content = page;\n            _ = Animator.PageLoading.LevelTwoPage(page);\n        };\n        Loaded += (_, _) =>\n        {\n            _ = Animator.PageLoading.LevelTwoPage(FrameView.Content as UserControl);\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/AutoInstall.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.AutoInstall\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <ContentControl Name=\"Frame\" />\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/AutoInstall.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing MinecraftLaunch.Base.Models.Network;\nusing YMCL.Public.Module.Ui;\nusing YMCL.ViewModels;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages;\n\npublic partial class AutoInstall : UserControl\n{\n    public readonly AutoInstallPages.InstallableGames InstallableGames = new();\n\n    public AutoInstall()\n    {\n        InitializeComponent();\n        Frame.Content = InstallableGames;\n    }\n\n    public void JumpToInstallPreview(VersionManifestEntry entry)\n    {\n        var page = new AutoInstallPages.InstallPreview(() =>\n        {\n            Frame.Content = InstallableGames;\n            _ = Animator.PageLoading.LevelTwoPage(InstallableGames);\n        }, entry);\n        Frame.Content = page;\n        _ = Animator.PageLoading.LevelTwoPage(page);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/AutoInstallPages/InstallPreview.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.AutoInstallPages.InstallPreview\"\n    x:DataType=\"model:InstallPreviewModel\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:model=\"clr-namespace:YMCL.ViewModels\"\n    xmlns:network=\"clr-namespace:MinecraftLaunch.Base.Models.Network;assembly=MinecraftLaunch.Base\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <ScrollViewer Name=\"InstallPreviewRoot\">\n        <DockPanel Margin=\"10,0,10,10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                VerticalAlignment=\"Stretch\">\n                <StackPanel Margin=\"10\" Spacing=\"10\">\n                    <Border\n                        Background=\"{DynamicResource 2x}\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        Padding=\"10\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <TextBlock DockPanel.Dock=\"Top\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.InstallPreview}\" />\n                            <DockPanel DockPanel.Dock=\"Top\">\n                                <DockPanel DockPanel.Dock=\"Left\" Margin=\"0,0,0,5\">\n                                    <TextBlock\n                                        DockPanel.Dock=\"Top\"\n                                        FontSize=\"15\"\n                                        Margin=\"2,0,0,0\"\n                                        Name=\"InstallPreviewIdText\"\n                                        Text=\"1.12.2\" />\n                                    <TextBlock\n                                        DockPanel.Dock=\"Top\"\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Margin=\"2,0,0,0\"\n                                        Name=\"InstallPreviewAdditionalInstallText\"\n                                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoAdditionalInstall}\" />\n                                </DockPanel>\n                                <DockPanel\n                                    DockPanel.Dock=\"Right\"\n                                    HorizontalAlignment=\"Right\"\n                                    Margin=\"0,0,0,5\"\n                                    VerticalAlignment=\"Bottom\">\n                                    <Button Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ViewUpdatedContent}\" Name=\"ViewUpdatedContentBtn\" />\n                                    <Button\n                                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.BeginInstall}\"\n                                        Margin=\"5,0,0,0\"\n                                        Name=\"BeginInstallBtn\" />\n                                </DockPanel>\n                            </DockPanel>\n                            <TextBlock\n                                DockPanel.Dock=\"Bottom\"\n                                FontSize=\"12\"\n                                Foreground=\"Red\"\n                                IsVisible=\"{Binding IsDisplaceId}\"\n                                Margin=\"1,5,0,0\"\n                                Name=\"CustomIdWarning\">\n                                <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.TheVersionNameWillBeRenamedTo}\" />\n                                <Run Text=\"{Binding DisplaceId}\" />\n                            </TextBlock>\n                            <TextBox\n                                DockPanel.Dock=\"Bottom\"\n                                Name=\"InstallPreviewIdTextBox\"\n                                Text=\"{Binding CustomId}\" />\n                        </DockPanel>\n                    </Border>\n                    <Border\n                        Background=\"{DynamicResource 2x}\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        Name=\"ReturnToListRoot\"\n                        Padding=\"10\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <Image\n                                DockPanel.Dock=\"Right\"\n                                Height=\"12\"\n                                HorizontalAlignment=\"Right\"\n                                Margin=\"0,0,5,0\"\n                                Width=\"15\">\n                                <Image.Source>\n                                    <DrawingImage>\n                                        <DrawingImage.Drawing>\n                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                <GeometryDrawing.Geometry>\n                                                    <PathGeometry Figures=\"M384,170.5C395.6669921875,170.5,405.6669921875,174.66700744628906,414,183L713,482C721.3330078125,490.3330078125 725.5,500.3330078125 725.5,512 725.5,523.6669921875 721.3330078125,533.6669921875 713,542L414,841C405.6669921875,849.3330078125 395.6669921875,853.5 384,853.5 372,853.5 361.9169921875,849.25 353.75,840.75 345.5830078125,832.25 341.5,822.1669921875 341.5,810.5 341.5,798.8330078125 345.6669921875,788.8330078125 354,780.5L622.5,512 354,243.5C345.6669921875,235.16700744628906 341.5,225.16700744628906 341.5,213.5 341.5,201.83299255371094 345.5830078125,191.75 353.75,183.25 361.9169921875,174.75 372,170.5 384,170.5z\" />\n                                                </GeometryDrawing.Geometry>\n                                            </GeometryDrawing>\n                                        </DrawingImage.Drawing>\n                                    </DrawingImage>\n                                </Image.Source>\n                            </Image>\n                            <TextBlock\n                                DockPanel.Dock=\"Right\"\n                                Margin=\"2,0,0,0\"\n                                Name=\"MinecraftPreviewGameId\"\n                                Text=\"1.12.2\" />\n                            <TextBlock\n                                DockPanel.Dock=\"Right\"\n                                Margin=\"2,0,0,0\"\n                                Text=\"Minecraft\" />\n                        </DockPanel>\n                    </Border>\n                    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n                        <Expander>\n                            <Expander.Header>\n                                <TextBlock>\n                                    <Run Text=\"OptiFine\" />\n                                    <Run Text=\" - \" />\n                                    <Run Name=\"SelectedOptiFine\" Text=\"{Binding SelectedOptiFine}\" />\n                                </TextBlock>\n                            </Expander.Header>\n                            <Grid>\n                                <ListBox\n                                    Height=\"250\"\n                                    ItemsSource=\"{Binding OptiFines}\"\n                                    Name=\"OptiFineListView\"\n                                    Tag=\"optifine\">\n                                    <ListBox.Styles>\n                                        <Style Selector=\"ListBoxItem\">\n                                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                                        </Style>\n                                    </ListBox.Styles>\n                                    <ListBox.ItemTemplate>\n                                        <DataTemplate DataType=\"network:OptifineInstallEntry\">\n                                            <TextBlock Margin=\"0,2\">\n                                                <Run Text=\"{Binding Type}\" />\n                                                <Run Text=\"{Binding Patch}\" />\n                                            </TextBlock>\n                                        </DataTemplate>\n                                    </ListBox.ItemTemplate>\n                                </ListBox>\n                                <TextBlock\n                                    Foreground=\"{DynamicResource GrayColor}\"\n                                    IsVisible=\"{Binding NoOptiFine}\"\n                                    Name=\"NoOptifine\"\n                                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoAvailableItem}\" />\n                                <ui:ProgressRing\n                                    Height=\"50\"\n                                    IsVisible=\"{Binding OptifineLoading}\"\n                                    Name=\"OptiFineLoading\"\n                                    Width=\"50\" />\n                            </Grid>\n                        </Expander>\n                    </Border>\n                    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n                        <Expander>\n                            <Expander.Header>\n                                <TextBlock>\n                                    <Run Text=\"Forge\" />\n                                    <Run Text=\" - \" />\n                                    <Run Name=\"SelectedForge\" Text=\"{Binding SelectedForge}\" />\n                                </TextBlock>\n                            </Expander.Header>\n                            <Grid>\n                                <ListBox\n                                    Height=\"250\"\n                                    ItemsSource=\"{Binding Forges}\"\n                                    Name=\"ForgeListView\"\n                                    Tag=\"forge\">\n                                    <ListBox.Styles>\n                                        <Style Selector=\"ListBoxItem\">\n                                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                                        </Style>\n                                    </ListBox.Styles>\n                                    <ListBox.ItemTemplate>\n                                        <DataTemplate DataType=\"network:ForgeInstallEntry\">\n                                            <TextBlock Margin=\"0,2\" Text=\"{Binding ForgeVersion}\" />\n                                        </DataTemplate>\n                                    </ListBox.ItemTemplate>\n                                </ListBox>\n                                <TextBlock\n                                    Foreground=\"{DynamicResource GrayColor}\"\n                                    IsVisible=\"{Binding NoForge}\"\n                                    Name=\"NoForge\"\n                                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoAvailableItem}\" />\n                                <ui:ProgressRing\n                                    Height=\"50\"\n                                    IsVisible=\"{Binding ForgeLoading}\"\n                                    Name=\"ForgeLoading\"\n                                    Width=\"50\" />\n                            </Grid>\n                        </Expander>\n                    </Border>\n                    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n                        <Expander>\n                            <Expander.Header>\n                                <TextBlock>\n                                    <Run Text=\"NeoForge\" />\n                                    <Run Text=\" - \" />\n                                    <Run Name=\"SelectedNeoForge\" Text=\"{Binding SelectedNeoForge}\" />\n                                </TextBlock>\n                            </Expander.Header>\n                            <Grid>\n                                <ListBox\n                                    Height=\"250\"\n                                    ItemsSource=\"{Binding NeoForges}\"\n                                    Name=\"NeoForgeListView\"\n                                    Tag=\"neoforge\">\n                                    <ListBox.Styles>\n                                        <Style Selector=\"ListBoxItem\">\n                                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                                        </Style>\n                                    </ListBox.Styles>\n                                    <ListBox.ItemTemplate>\n                                        <DataTemplate DataType=\"network:ForgeInstallEntry\">\n                                            <TextBlock Margin=\"0,2\" Text=\"{Binding ForgeVersion}\" />\n                                        </DataTemplate>\n                                    </ListBox.ItemTemplate>\n                                </ListBox>\n                                <TextBlock\n                                    Foreground=\"{DynamicResource GrayColor}\"\n                                    IsVisible=\"{Binding NoNeoForge}\"\n                                    Name=\"NoNeoForge\"\n                                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoAvailableItem}\" />\n                                <ui:ProgressRing\n                                    Height=\"50\"\n                                    IsVisible=\"{Binding NeoForgeLoading}\"\n                                    Name=\"NeoForgeLoading\"\n                                    Width=\"50\" />\n                            </Grid>\n                        </Expander>\n                    </Border>\n                    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n                        <Expander>\n                            <Expander.Header>\n                                <TextBlock>\n                                    <Run Text=\"Fabric\" />\n                                    <Run Text=\" - \" />\n                                    <Run Name=\"SelectedFabric\" Text=\"{Binding SelectedFabric}\" />\n                                </TextBlock>\n                            </Expander.Header>\n                            <Grid>\n                                <ListBox\n                                    Height=\"250\"\n                                    ItemsSource=\"{Binding Fabrics}\"\n                                    Name=\"FabricListView\"\n                                    Tag=\"fabric\">\n                                    <ListBox.Styles>\n                                        <Style Selector=\"ListBoxItem\">\n                                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                                        </Style>\n                                    </ListBox.Styles>\n                                    <ListBox.ItemTemplate>\n                                        <DataTemplate DataType=\"network:FabricInstallEntry\">\n                                            <TextBlock Margin=\"0,2\" Text=\"{Binding BuildVersion}\" />\n                                        </DataTemplate>\n                                    </ListBox.ItemTemplate>\n                                </ListBox>\n                                <TextBlock\n                                    Foreground=\"{DynamicResource GrayColor}\"\n                                    IsVisible=\"{Binding NoFabric}\"\n                                    Name=\"NoFabric\"\n                                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoAvailableItem}\" />\n                                <ui:ProgressRing\n                                    Height=\"50\"\n                                    IsVisible=\"{Binding FabricLoading}\"\n                                    Name=\"FabricLoading\"\n                                    Width=\"50\" />\n                            </Grid>\n                        </Expander>\n                    </Border>\n                    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n                        <Expander>\n                            <Expander.Header>\n                                <TextBlock>\n                                    <Run Text=\"Quilt\" />\n                                    <Run Text=\" - \" />\n                                    <Run Name=\"SelectedQuilt\" Text=\"{Binding SelectedQuilt}\" />\n                                </TextBlock>\n                            </Expander.Header>\n                            <Grid>\n                                <ListBox\n                                    Height=\"250\"\n                                    ItemsSource=\"{Binding Quilts}\"\n                                    Name=\"QuiltListView\"\n                                    Tag=\"quilt\">\n                                    <ListBox.Styles>\n                                        <Style Selector=\"ListBoxItem\">\n                                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                                        </Style>\n                                    </ListBox.Styles>\n                                    <ListBox.ItemTemplate>\n                                        <DataTemplate DataType=\"network:QuiltInstallEntry\">\n                                            <TextBlock Margin=\"0,2\" Text=\"{Binding BuildVersion}\" />\n                                        </DataTemplate>\n                                    </ListBox.ItemTemplate>\n                                </ListBox>\n                                <TextBlock\n                                    Foreground=\"{DynamicResource GrayColor}\"\n                                    IsVisible=\"{Binding NoQuilt}\"\n                                    Name=\"NoQuilt\"\n                                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoAvailableItem}\" />\n                                <ui:ProgressRing\n                                    Height=\"50\"\n                                    IsVisible=\"{Binding QuiltLoading}\"\n                                    Name=\"QuiltLoading\"\n                                    Width=\"50\" />\n                            </Grid>\n                        </Expander>\n                    </Border>\n                </StackPanel>\n            </Border>\n        </DockPanel>\n    </ScrollViewer>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/AutoInstallPages/InstallPreview.axaml.cs",
    "content": "﻿using MinecraftLaunch.Base.Models.Network;\nusing YMCL.Public.Module.App.Init.SubModule.GetDataFromNetwork;\nusing YMCL.ViewModels;\nusing Dispatcher = YMCL.Public.Module.Mc.Installer.Minecraft.Dispatcher;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages.AutoInstallPages;\n\npublic sealed partial class InstallPreview : UserControl\n{\n    public readonly InstallPreviewModel Model;\n\n    public InstallPreview(Action action, VersionManifestEntry entry)\n    {\n        InitializeComponent();\n        InstallPreviewModLoaders.Load(this, entry.Id);\n        Model = new InstallPreviewModel(this);\n        DataContext = Model;\n        ReturnToListRoot.PointerPressed += (_, _) => action();\n        InstallPreviewIdText.Text = entry.Id;\n        MinecraftPreviewGameId.Text = entry.Id;\n        Model.CustomId = entry.Id;\n        Model.GameId = entry.Id;\n        CustomIdWarning.IsVisible = false;\n        FabricListView.SelectionChanged += OnSelectionChanged;\n        OptiFineListView.SelectionChanged += OnSelectionChanged;\n        ForgeListView.SelectionChanged += OnSelectionChanged;\n        NeoForgeListView.SelectionChanged += OnSelectionChanged;\n        QuiltListView.SelectionChanged += OnSelectionChanged;\n        ViewUpdatedContentBtn.Click += (_, _) =>\n        {\n            //$\"https://minecraft.wiki/w/Java_Edition_{id}\"\n            var launcher = TopLevel.GetTopLevel(this).Launcher;\n            launcher.LaunchUriAsync(new Uri($\"https://minecraft.wiki/w/Java_Edition_{entry.Id}\"));\n        };\n        BeginInstallBtn.Click += (_, _) =>\n        {\n            _ = Dispatcher.Install(entry, Model.IsDisplaceId ? Model.DisplaceId : Model.CustomId,\n                ForgeListView.SelectedItem as ForgeInstallEntry, NeoForgeListView.SelectedItem as ForgeInstallEntry,\n                FabricListView.SelectedItem as FabricInstallEntry, QuiltListView.SelectedItem as QuiltInstallEntry,\n                OptiFineListView.SelectedItem as OptifineInstallEntry);\n        };\n    }\n\n    public InstallPreview()\n    {\n    }\n\n    private void OnSelectionChanged(object? sender, SelectionChangedEventArgs e)\n    {\n        if (e.AddedItems.Count <= 0) return;\n        if (e.AddedItems[0] is OptifineInstallEntry)\n        {\n            QuiltListView.SelectedItem = null;\n            FabricListView.SelectedItem = null;\n            NeoForgeListView.SelectedItem = null;\n        }\n        else if (e.AddedItems[0] is ForgeInstallEntry { IsNeoforge: false })\n        {\n            QuiltListView.SelectedItem = null;\n            FabricListView.SelectedItem = null;\n            NeoForgeListView.SelectedItem = null;\n        }\n        else if (e.AddedItems[0] is QuiltInstallEntry)\n        {\n            ForgeListView.SelectedItem = null;\n            OptiFineListView.SelectedItem = null;\n            FabricListView.SelectedItem = null;\n            NeoForgeListView.SelectedItem = null;\n        }\n        else if (e.AddedItems[0] is FabricInstallEntry)\n        {\n            ForgeListView.SelectedItem = null;\n            OptiFineListView.SelectedItem = null;\n            QuiltListView.SelectedItem = null;\n            NeoForgeListView.SelectedItem = null;\n        }\n        else if (e.AddedItems[0] is ForgeInstallEntry { IsNeoforge: true })\n        {\n            QuiltListView.SelectedItem = null;\n            FabricListView.SelectedItem = null;\n            ForgeListView.SelectedItem = null;\n            OptiFineListView.SelectedItem = null;\n            QuiltListView.SelectedItem = null;\n        }\n\n        Model.HandleCustomId();\n        Model.UpdateSelection();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/AutoInstallPages/InstallableGames.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.AutoInstallPages.InstallableGames\"\n    x:DataType=\"setting:UiProperty\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:model=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:network=\"clr-namespace:MinecraftLaunch.Base.Models.Network;assembly=MinecraftLaunch.Base\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:setting=\"clr-namespace:YMCL.Public.Classes.Setting\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:DateTimeToStringConverter x:Key=\"DateTimeToStringConverter\" />\n    </UserControl.Resources>\n    <ScrollViewer Name=\"InstallableVersionListRoot\">\n        <StackPanel Margin=\"10,0,10,10\" Spacing=\"10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                IsVisible=\"False\"\n                Name=\"BedrockRoot\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"10\"\n                VerticalAlignment=\"Top\">\n                <DockPanel HorizontalAlignment=\"Stretch\">\n                    <Image\n                        DockPanel.Dock=\"Right\"\n                        Height=\"13\"\n                        HorizontalAlignment=\"Right\"\n                        Margin=\"0,0,5,0\"\n                        Width=\"15\">\n                        <Image.Source>\n                            <DrawingImage>\n                                <DrawingImage.Drawing>\n                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                        <GeometryDrawing.Geometry>\n                                            <PathGeometry Figures=\"M384,170.5C395.6669921875,170.5,405.6669921875,174.66700744628906,414,183L713,482C721.3330078125,490.3330078125 725.5,500.3330078125 725.5,512 725.5,523.6669921875 721.3330078125,533.6669921875 713,542L414,841C405.6669921875,849.3330078125 395.6669921875,853.5 384,853.5 372,853.5 361.9169921875,849.25 353.75,840.75 345.5830078125,832.25 341.5,822.1669921875 341.5,810.5 341.5,798.8330078125 345.6669921875,788.8330078125 354,780.5L622.5,512 354,243.5C345.6669921875,235.16700744628906 341.5,225.16700744628906 341.5,213.5 341.5,201.83299255371094 345.5830078125,191.75 353.75,183.25 361.9169921875,174.75 372,170.5 384,170.5z\" />\n                                        </GeometryDrawing.Geometry>\n                                    </GeometryDrawing>\n                                </DrawingImage.Drawing>\n                            </DrawingImage>\n                        </Image.Source>\n                    </Image>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"2\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.BedRockVersion}\" />\n                </DockPanel>\n            </Border>\n            <ui:InfoBar\n                DockPanel.Dock=\"Top\"\n                FontWeight=\"Light\"\n                IsClosable=\"False\"\n                IsOpen=\"True\"\n                IsVisible=\"False\"\n                Margin=\"0\"\n                Message=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.GetInstallableVersionFail}\"\n                Name=\"LoadInstallableVersionListErrorInfoBar\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Severity=\"Error\">\n                <ui:InfoBar.ActionButton>\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Reload}\"\n                        HorizontalAlignment=\"Right\"\n                        Name=\"ReloadInstallableGameListBtn\" />\n                </ui:InfoBar.ActionButton>\n            </ui:InfoBar>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                ClipToBounds=\"True\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                VerticalAlignment=\"Top\">\n                <DockPanel>\n                    <TextBlock\n                        DockPanel.Dock=\"Top\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"13\"\n                        Margin=\"10,10,0,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LatestVersion}\" />\n                    <StackPanel\n                        DockPanel.Dock=\"Bottom\"\n                        Margin=\"10,5,10,10\"\n                        Spacing=\"10\">\n                        <Border\n                            Background=\"{DynamicResource 2x}\"\n                            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                            Name=\"LatestReleaseVersionRoot\"\n                            Padding=\"5\">\n                            <DockPanel>\n                                <Image\n                                    DockPanel.Dock=\"Right\"\n                                    Height=\"13\"\n                                    HorizontalAlignment=\"Right\"\n                                    Margin=\"0,0,10,0\"\n                                    Width=\"15\">\n                                    <Image.Source>\n                                        <DrawingImage>\n                                            <DrawingImage.Drawing>\n                                                <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                    <GeometryDrawing.Geometry>\n                                                        <PathGeometry Figures=\"M384,170.5C395.6669921875,170.5,405.6669921875,174.66700744628906,414,183L713,482C721.3330078125,490.3330078125 725.5,500.3330078125 725.5,512 725.5,523.6669921875 721.3330078125,533.6669921875 713,542L414,841C405.6669921875,849.3330078125 395.6669921875,853.5 384,853.5 372,853.5 361.9169921875,849.25 353.75,840.75 345.5830078125,832.25 341.5,822.1669921875 341.5,810.5 341.5,798.8330078125 345.6669921875,788.8330078125 354,780.5L622.5,512 354,243.5C345.6669921875,235.16700744628906 341.5,225.16700744628906 341.5,213.5 341.5,201.83299255371094 345.5830078125,191.75 353.75,183.25 361.9169921875,174.75 372,170.5 384,170.5z\" />\n                                                    </GeometryDrawing.Geometry>\n                                                </GeometryDrawing>\n                                            </DrawingImage.Drawing>\n                                        </DrawingImage>\n                                    </Image.Source>\n                                </Image>\n                                <StackPanel DockPanel.Dock=\"Left\" Margin=\"2,0,0,0\">\n                                    <TextBlock>\n                                        <Run FontSize=\"15\" Text=\"{Binding LatestReleaseGame.Id}\" />\n                                        <Run\n                                            FontSize=\"12\"\n                                            Foreground=\"{DynamicResource GrayColor}\"\n                                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ReleaseVersion}\" />\n                                    </TextBlock>\n                                    <TextBlock\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Margin=\"1,0,0,0\"\n                                        Name=\"LatestReleaseVersionTime\"\n                                        Text=\"{Binding LatestReleaseGame.ReleaseTime, Converter={StaticResource DateTimeToStringConverter}}\" />\n                                </StackPanel>\n                            </DockPanel>\n                        </Border>\n                        <Border\n                            Background=\"{DynamicResource 2x}\"\n                            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                            Name=\"LatestPreviewVersionRoot\"\n                            Padding=\"5\">\n                            <DockPanel>\n                                <Image\n                                    DockPanel.Dock=\"Right\"\n                                    Height=\"12\"\n                                    HorizontalAlignment=\"Right\"\n                                    Margin=\"0,0,10,0\"\n                                    Width=\"15\">\n                                    <Image.Source>\n                                        <DrawingImage>\n                                            <DrawingImage.Drawing>\n                                                <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                    <GeometryDrawing.Geometry>\n                                                        <PathGeometry Figures=\"M384,170.5C395.6669921875,170.5,405.6669921875,174.66700744628906,414,183L713,482C721.3330078125,490.3330078125 725.5,500.3330078125 725.5,512 725.5,523.6669921875 721.3330078125,533.6669921875 713,542L414,841C405.6669921875,849.3330078125 395.6669921875,853.5 384,853.5 372,853.5 361.9169921875,849.25 353.75,840.75 345.5830078125,832.25 341.5,822.1669921875 341.5,810.5 341.5,798.8330078125 345.6669921875,788.8330078125 354,780.5L622.5,512 354,243.5C345.6669921875,235.16700744628906 341.5,225.16700744628906 341.5,213.5 341.5,201.83299255371094 345.5830078125,191.75 353.75,183.25 361.9169921875,174.75 372,170.5 384,170.5z\" />\n                                                    </GeometryDrawing.Geometry>\n                                                </GeometryDrawing>\n                                            </DrawingImage.Drawing>\n                                        </DrawingImage>\n                                    </Image.Source>\n                                </Image>\n                                <StackPanel DockPanel.Dock=\"Left\" Margin=\"2,0,0,0\">\n                                    <TextBlock>\n                                        <Run\n                                            FontSize=\"15\"\n                                            Name=\"LatestPreviewVersionId\"\n                                            Text=\"{Binding LatestSnapshotGame.Id}\" />\n                                        <Run\n                                            FontSize=\"12\"\n                                            Foreground=\"{DynamicResource GrayColor}\"\n                                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.PreviewVersion}\" />\n                                    </TextBlock>\n                                    <TextBlock\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Margin=\"1,0,0,0\"\n                                        Name=\"LatestPreviewVersionTime\"\n                                        Text=\"{Binding LatestSnapshotGame.ReleaseTime, Converter={StaticResource DateTimeToStringConverter}}\" />\n                                </StackPanel>\n                            </DockPanel>\n                        </Border>\n                    </StackPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                VerticalAlignment=\"Top\">\n                <Expander Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AllVersion}\">\n                    <Grid Height=\"300\">\n                        <ui:ProgressRing\n                            Foreground=\"{DynamicResource SystemAccentColor}\"\n                            Height=\"50\"\n                            IsVisible=\"{Binding InstallableRingIsVisible}\"\n                            Name=\"AllVersionLoadingRing\"\n                            Width=\"50\" />\n                        <DockPanel>\n                            <TextBox\n                                DockPanel.Dock=\"Top\"\n                                Name=\"AllVersionSearchBox\"\n                                Text=\"{Binding InstallableGameSearchFilter}\"\n                                Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\" />\n                            <ListBox\n                                DockPanel.Dock=\"Bottom\"\n                                FontFamily=\"{DynamicResource Font}\"\n                                ItemsSource=\"{Binding FilteredAllInstallableGames}\"\n                                Margin=\"0,10,0,0\"\n                                Name=\"AllVersionListView\">\n                                <ListBox.ItemTemplate>\n                                    <DataTemplate DataType=\"network:VersionManifestEntry\">\n                                        <Border Margin=\"0,3\">\n                                            <DockPanel>\n                                                <Grid>\n                                                    <TextBlock\n                                                        FontFamily=\"{DynamicResource Font}\"\n                                                        FontSize=\"14\"\n                                                        Text=\"{Binding Id}\" />\n                                                    <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                                        <TextBlock\n                                                            FontFamily=\"{DynamicResource Font}\"\n                                                            FontSize=\"12\"\n                                                            Foreground=\"{DynamicResource GrayColor}\"\n                                                            Margin=\"0,0,0,0\"\n                                                            Text=\"{Binding ReleaseTime}\" />\n                                                    </StackPanel>\n                                                </Grid>\n                                            </DockPanel>\n                                        </Border>\n                                    </DataTemplate>\n                                </ListBox.ItemTemplate>\n                            </ListBox>\n                        </DockPanel>\n                    </Grid>\n                </Expander>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                VerticalAlignment=\"Top\">\n                <Expander Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ReleaseVersion}\">\n                    <Grid Height=\"300\">\n                        <ui:ProgressRing\n                            Foreground=\"{DynamicResource SystemAccentColor}\"\n                            Height=\"50\"\n                            IsVisible=\"{Binding InstallableRingIsVisible}\"\n                            Name=\"ReleaseVersionLoadingRing\"\n                            Width=\"50\" />\n                        <ListBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            ItemsSource=\"{Binding ReleaseInstallableGames}\"\n                            Name=\"ReleaseVersionListView\">\n                            <ListBox.ItemTemplate>\n                                <DataTemplate DataType=\"network:VersionManifestEntry\">\n                                    <Border Margin=\"0,3\">\n                                        <DockPanel>\n                                            <Grid>\n                                                <TextBlock\n                                                    FontFamily=\"{DynamicResource Font}\"\n                                                    FontSize=\"14\"\n                                                    Text=\"{Binding Id}\" />\n                                                <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                                    <TextBlock\n                                                        FontFamily=\"{DynamicResource Font}\"\n                                                        FontSize=\"12\"\n                                                        Foreground=\"{DynamicResource GrayColor}\"\n                                                        Margin=\"0,0,0,0\"\n                                                        Text=\"{Binding ReleaseTime}\" />\n                                                </StackPanel>\n                                            </Grid>\n                                        </DockPanel>\n                                    </Border>\n                                </DataTemplate>\n                            </ListBox.ItemTemplate>\n                        </ListBox>\n                    </Grid>\n                </Expander>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                VerticalAlignment=\"Top\">\n                <Expander Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.PreviewVersion}\">\n                    <Grid Height=\"300\">\n                        <ui:ProgressRing\n                            Foreground=\"{DynamicResource SystemAccentColor}\"\n                            Height=\"50\"\n                            IsVisible=\"{Binding InstallableRingIsVisible}\"\n                            Name=\"PreviewVersionLoadingRing\"\n                            Width=\"50\" />\n                        <ListBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            ItemsSource=\"{Binding SnapshotInstallableGames}\"\n                            Name=\"PreviewVersionListView\">\n                            <ListBox.ItemTemplate>\n                                <DataTemplate DataType=\"network:VersionManifestEntry\">\n                                    <Border Margin=\"0,3\">\n                                        <DockPanel>\n                                            <Grid>\n                                                <TextBlock\n                                                    FontFamily=\"{DynamicResource Font}\"\n                                                    FontSize=\"14\"\n                                                    Text=\"{Binding Id}\" />\n                                                <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                                    <TextBlock\n                                                        FontFamily=\"{DynamicResource Font}\"\n                                                        FontSize=\"12\"\n                                                        Foreground=\"{DynamicResource GrayColor}\"\n                                                        Margin=\"0,0,0,0\"\n                                                        Text=\"{Binding ReleaseTime}\" />\n                                                </StackPanel>\n                                            </Grid>\n                                        </DockPanel>\n                                    </Border>\n                                </DataTemplate>\n                            </ListBox.ItemTemplate>\n                        </ListBox>\n                    </Grid>\n                </Expander>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                VerticalAlignment=\"Top\">\n                <Expander Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OldVersion}\">\n                    <Grid Height=\"300\">\n                        <ui:ProgressRing\n                            Foreground=\"{DynamicResource SystemAccentColor}\"\n                            Height=\"50\"\n                            IsVisible=\"{Binding InstallableRingIsVisible}\"\n                            Name=\"OldVersionLoadingRing\"\n                            Width=\"50\" />\n                        <ListBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            ItemsSource=\"{Binding OldInstallableGames}\"\n                            Name=\"OldVersionListView\">\n                            <ListBox.ItemTemplate>\n                                <DataTemplate DataType=\"network:VersionManifestEntry\">\n                                    <Border Margin=\"0,3\">\n                                        <DockPanel>\n                                            <Grid>\n                                                <TextBlock\n                                                    FontFamily=\"{DynamicResource Font}\"\n                                                    FontSize=\"14\"\n                                                    Text=\"{Binding Id}\" />\n                                                <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                                    <TextBlock\n                                                        FontFamily=\"{DynamicResource Font}\"\n                                                        FontSize=\"12\"\n                                                        Foreground=\"{DynamicResource GrayColor}\"\n                                                        Margin=\"0,0,0,0\"\n                                                        Text=\"{Binding ReleaseTime}\" />\n                                                </StackPanel>\n                                            </Grid>\n                                        </DockPanel>\n                                    </Border>\n                                </DataTemplate>\n                            </ListBox.ItemTemplate>\n                        </ListBox>\n                    </Grid>\n                </Expander>\n            </Border>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/AutoInstallPages/InstallableGames.axaml.cs",
    "content": "﻿using System.Linq;\nusing MinecraftLaunch.Base.Models.Network;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.App.Init.SubModule.GetDataFromNetwork;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages.AutoInstallPages;\n\npublic partial class InstallableGames : UserControl\n{\n    public InstallableGames()\n    {\n        InitializeComponent();\n        DataContext = UiProperty.Instance;\n        AllVersionListView.SelectionChanged += SelectionChanged;\n        ReleaseVersionListView.SelectionChanged += SelectionChanged;\n        PreviewVersionListView.SelectionChanged += SelectionChanged;\n        OldVersionListView.SelectionChanged += SelectionChanged;\n        LatestPreviewVersionRoot.PointerPressed += (_, _) =>\n        {\n            if (UiProperty.Instance.LatestSnapshotGame.Type == null) return;\n            YMCL.App.UiRoot.ViewModel.Download._autoInstall.JumpToInstallPreview(UiProperty.Instance.LatestSnapshotGame);\n        };\n        LatestReleaseVersionRoot.PointerPressed += (_, _) =>\n        {\n            if (UiProperty.Instance.LatestReleaseGame.Type == null) return;\n            YMCL.App.UiRoot.ViewModel.Download._autoInstall.JumpToInstallPreview(UiProperty.Instance.LatestReleaseGame);\n        };\n        UiProperty.Instance.PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(UiProperty.Instance.InstallableGameSearchFilter))\n            {\n                Filter();\n            }\n        };\n        ReloadInstallableGameListBtn.Click += (_, _) =>\n        {\n            LoadInstallableVersionListErrorInfoBar.IsVisible = false;\n            _ = InstallableGame.Load();\n            UiProperty.Instance.LatestReleaseGame = new VersionManifestEntry\n                { ReleaseTime = new DateTime(1970, 1, 1, 0, 0, 0), Id = MainLang.Loading, Type = null };\n            UiProperty.Instance.LatestSnapshotGame = new VersionManifestEntry\n                { ReleaseTime = new DateTime(1970, 1, 1, 0, 0, 0), Id = MainLang.Loading, Type = null };\n        };\n    }\n\n    private void SelectionChanged(object? sender, SelectionChangedEventArgs e)\n    {\n        if (e.AddedItems.Count <= 0) return;\n        (sender as ListBox).SelectedItem = null;\n        YMCL.App.UiRoot.ViewModel.Download._autoInstall.JumpToInstallPreview((e.AddedItems[0] as VersionManifestEntry)!);\n    }\n\n    public void Filter()\n    {\n        UiProperty.FilteredAllInstallableGames.Clear();\n        UiProperty.AllInstallableGames.Where(item =>\n                item.Id.Contains(UiProperty.Instance.InstallableGameSearchFilter, StringComparison.OrdinalIgnoreCase))\n            .ToList().ForEach(item => UiProperty.FilteredAllInstallableGames.Add(item));\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/CurseForge.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.CurseForge\"\n    x:DataType=\"downloadPages:CurseForge\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:downloadPages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            ClipToBounds=\"True\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            DockPanel.Dock=\"Top\"\n            Margin=\"10,0,10,0\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            VerticalAlignment=\"Top\">\n            <ScrollViewer HorizontalScrollBarVisibility=\"Auto\" VerticalScrollBarVisibility=\"Disabled\">\n                <u:SelectionList\n                    AutoScrollToSelectedItem=\"True\"\n                    ItemsSource=\"{Binding Items}\"\n                    Margin=\"5\"\n                    Name=\"NavMenu\"\n                    SelectedItem=\"{Binding SelectedItem}\"\n                    VerticalAlignment=\"Top\">\n                    <u:SelectionList.Styles>\n                        <Style Selector=\"u|SelectionListItem:not(:selected)\">\n                            <Style Selector=\"^ TextBlock\">\n                                <Setter Property=\"Foreground\" Value=\"{DynamicResource TextColor}\" />\n                            </Style>\n                        </Style>\n                    </u:SelectionList.Styles>\n                    <u:SelectionList.ItemsPanel>\n                        <ItemsPanelTemplate>\n                            <StackPanel Orientation=\"Horizontal\" />\n                        </ItemsPanelTemplate>\n                    </u:SelectionList.ItemsPanel>\n                    <u:SelectionList.Indicator>\n                        <Border\n                            Background=\"{DynamicResource 2x}\"\n                            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                            HorizontalAlignment=\"Stretch\"\n                            VerticalAlignment=\"Stretch\" />\n                    </u:SelectionList.Indicator>\n                    <u:SelectionList.ItemTemplate>\n                        <DataTemplate DataType=\"data:SearchTabViewItemEntry\">\n                            <StackPanel Margin=\"3,0,1,0\" Orientation=\"Horizontal\">\n                                <TextBlock Foreground=\"{DynamicResource TextColor}\" Text=\"{Binding Title}\" />\n                                <Button\n                                    Classes=\"icon-button\"\n                                    Command=\"{Binding Close}\"\n                                    Content=\"{DynamicResource Close}\"\n                                    HorizontalAlignment=\"Right\"\n                                    IsVisible=\"{Binding CanClose}\"\n                                    Margin=\"3,1,0,0\"\n                                    MaxHeight=\"14\"\n                                    MaxWidth=\"16\"\n                                    MinHeight=\"14\"\n                                    Name=\"CloseButton\"\n                                    VerticalAlignment=\"Center\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </u:SelectionList.ItemTemplate>\n                </u:SelectionList>\n            </ScrollViewer>\n        </Border>\n        <ContentControl\n            Content=\"{Binding SelectedItem.Content}\"\n            DockPanel.Dock=\"Bottom\"\n            Margin=\"10\"\n            Name=\"ContentControl\" />\n    </DockPanel>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/CurseForge.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui;\nusing YMCL.Views.Main.Pages.DownloadPages.CurseForgePages;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages;\n\npublic sealed partial class CurseForge : UserControl, INotifyPropertyChanged\n{\n    private SearchTabViewItemEntry _selectedItem;\n\n    public ObservableCollection<SearchTabViewItemEntry> Items { get; set; } =\n    [\n        new()\n        {\n            Content = new CurseForgeFetcher(),\n            Title = $\"{MainLang.Search}: {MainLang.Home}\",\n            Tag = \"Home\", Host = nameof(CurseForge),\n            CanClose = false\n        }\n    ];\n\n    public SearchTabViewItemEntry SelectedItem\n    {\n        get => _selectedItem;\n        set => SetField(ref _selectedItem, value);\n    }\n\n    public void CreateNewPage(SearchTabViewItemEntry entry)\n    {\n        Items.Add(entry);\n        SelectedItem = entry;\n    }\n\n    public CurseForge()\n    {\n        InitializeComponent();\n        DataContext = this;\n        SelectedItem = Items.FirstOrDefault();\n    }\n    \n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return false;\n        field = value;\n        OnPropertyChanged(propertyName);\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/CurseForgePages/Fetcher.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.CurseForgePages.CurseForgeFetcher\"\n    x:DataType=\"curseForgePages:CurseForgeFetcher\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:curseForgePages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages.CurseForgePages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:downloadPages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:resourceFetcher=\"clr-namespace:YMCL.Public.Classes.Data.ResourceFetcher\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            DockPanel.Dock=\"Top\"\n            Name=\"SearchRoot\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            Padding=\"10\"\n            VerticalAlignment=\"Top\">\n            <StackPanel HorizontalAlignment=\"Stretch\" Spacing=\"10\">\n                <DockPanel Dock=\"Top\">\n                    <Button\n                        DockPanel.Dock=\"Right\"\n                        Height=\"32\"\n                        Margin=\"10,0,0,0\"\n                        Name=\"SearchButton\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 15.966797 7.802734 C 16.533203 7.802734 17.062174 7.918295 17.553711 8.149414 C 18.045246 8.380534 18.47168 8.691406 18.833008 9.082031 C 19.194336 9.472656 19.479166 9.923503 19.6875 10.43457 C 19.895832 10.945639 20 11.477865 20 12.03125 C 20 12.584636 19.895832 13.115234 19.6875 13.623047 C 19.479166 14.130859 19.194336 14.580078 18.833008 14.970703 C 18.47168 15.361328 18.046875 15.672201 17.558594 15.90332 C 17.070312 16.134441 16.542969 16.25 15.976562 16.25 L 10.585938 16.25 L 9.824219 15.478516 L 10.009766 15 L 15.957031 15 C 16.354166 15 16.723633 14.916992 17.06543 14.750977 C 17.407227 14.584961 17.701822 14.365234 17.949219 14.091797 C 18.196613 13.818359 18.391926 13.502604 18.535156 13.144531 C 18.678385 12.786459 18.75 12.415365 18.75 12.03125 C 18.75 11.614584 18.675129 11.225586 18.525391 10.864258 C 18.37565 10.50293 18.168945 10.187175 17.905273 9.916992 C 17.641602 9.646811 17.330729 9.435222 16.972656 9.282227 C 16.614582 9.129232 16.227213 9.052734 15.810547 9.052734 C 15.472005 9.052734 15.192057 8.94694 14.970703 8.735352 C 14.749349 8.523764 14.61263 8.255209 14.560547 7.929688 C 14.527994 7.695313 14.49056 7.467449 14.448242 7.246094 C 14.405924 7.02474 14.342447 6.800131 14.257812 6.572266 C 14.088541 6.103516 13.862304 5.693359 13.579102 5.341797 C 13.295897 4.990234 12.970377 4.695639 12.602539 4.458008 C 12.2347 4.220378 11.831055 4.042969 11.391602 3.925781 C 10.952148 3.808594 10.488281 3.75 10 3.75 C 9.420572 3.75 8.885091 3.828125 8.393555 3.984375 C 7.902018 4.140625 7.464192 4.370117 7.080078 4.672852 C 6.695963 4.975586 6.37207 5.348308 6.108398 5.791016 C 5.844727 6.233725 5.651042 6.738281 5.527344 7.304688 C 5.31901 7.259115 5.110677 7.22819 4.902344 7.211914 C 4.69401 7.195639 4.485677 7.1875 4.277344 7.1875 C 4.407552 6.458334 4.641927 5.802409 4.980469 5.219727 C 5.31901 4.637045 5.737305 4.145508 6.235352 3.745117 C 6.733398 3.344727 7.301432 3.037109 7.939453 2.822266 C 8.577474 2.607422 9.264322 2.5 10 2.5 C 10.800781 2.5 11.541341 2.626953 12.22168 2.880859 C 12.902018 3.134766 13.496093 3.49284 14.003906 3.955078 C 14.511718 4.417318 14.921874 4.973959 15.234375 5.625 C 15.546874 6.276042 15.738932 7.001953 15.810547 7.802734 Z M 11.25 19.375 C 11.25 19.544271 11.18815 19.690756 11.064453 19.814453 C 10.940755 19.93815 10.794271 20 10.625 20 C 10.455729 20 10.309244 19.93815 10.185547 19.814453 L 6.992188 16.621094 C 6.595052 16.927084 6.171875 17.150064 5.722656 17.290039 C 5.273438 17.430014 4.798177 17.5 4.296875 17.5 C 3.704427 17.5 3.147786 17.381186 2.626953 17.143555 C 2.10612 16.905924 1.650391 16.586914 1.259766 16.186523 C 0.869141 15.786133 0.561523 15.320639 0.336914 14.790039 C 0.112305 14.25944 0 13.704428 0 13.125 C 0 12.526042 0.11556 11.961264 0.34668 11.430664 C 0.577799 10.900065 0.891927 10.436198 1.289062 10.039062 C 1.686198 9.641928 2.150065 9.3278 2.680664 9.09668 C 3.211263 8.865561 3.776042 8.75 4.375 8.75 C 4.954427 8.75 5.50944 8.862305 6.040039 9.086914 C 6.570638 9.311523 7.036133 9.619141 7.436523 10.009766 C 7.836914 10.400391 8.155924 10.85612 8.393555 11.376953 C 8.631185 11.897787 8.75 12.454428 8.75 13.046875 C 8.75 13.548178 8.680013 14.023438 8.540039 14.472656 C 8.400064 14.921875 8.177083 15.345053 7.871094 15.742188 L 11.064453 18.935547 C 11.18815 19.059244 11.25 19.205729 11.25 19.375 Z M 4.375 16.25 L 4.443359 16.25 C 4.866536 16.25 5.263672 16.165365 5.634766 15.996094 C 6.005859 15.826823 6.329752 15.598959 6.606445 15.3125 C 6.883138 15.026042 7.101237 14.694011 7.260742 14.316406 C 7.420247 13.938803 7.5 13.541667 7.5 13.125 C 7.5 12.688803 7.418619 12.281901 7.255859 11.904297 C 7.093099 11.526693 6.870117 11.196289 6.586914 10.913086 C 6.303711 10.629883 5.973307 10.406901 5.595703 10.244141 C 5.218099 10.081381 4.811198 10 4.375 10 C 3.938802 10 3.531901 10.081381 3.154297 10.244141 C 2.776693 10.406901 2.446289 10.629883 2.163086 10.913086 C 1.879883 11.196289 1.656901 11.526693 1.494141 11.904297 C 1.33138 12.281901 1.25 12.688803 1.25 13.125 C 1.25 13.561198 1.33138 13.9681 1.494141 14.345703 C 1.656901 14.723308 1.879883 15.053711 2.163086 15.336914 C 2.446289 15.620117 2.776693 15.8431 3.154297 16.005859 C 3.531901 16.168621 3.938802 16.25 4.375 16.25 Z \"\n                                Margin=\"0,2,5,0\"\n                                Width=\"20\" />\n                            <TextBlock\n                                Margin=\"0,1,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Search}\"\n                                VerticalAlignment=\"Center\" />\n                        </DockPanel>\n                    </Button>\n                    <TextBox\n                        DockPanel.Dock=\"Left\"\n                        Name=\"SearchKey\"\n                        UseFloatingWatermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\" />\n                </DockPanel>\n                <DockPanel Dock=\"Bottom\">\n                    <ComboBox\n                        DockPanel.Dock=\"Right\"\n                        Name=\"SearchType\"\n                        SelectedIndex=\"0\"\n                        Width=\"210\">\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AllType}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Mod}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MaterialPack}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Map}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ShaderPack}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DataPack}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ModPack}\" FontFamily=\"{DynamicResource Font}\" />\n                    </ComboBox>\n                    <ComboBox\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"0,0,10,0\"\n                        SelectedIndex=\"0\"\n                        VerticalAlignment=\"Center\"\n                        Width=\"160\"\n                        x:Name=\"SearchLoaderType\">\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AnyModLoader}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"Forge\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"Cauldron\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"LiteLoader\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"Fabric\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"Quilt\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"NeoForge\" FontFamily=\"{DynamicResource Font}\" />\n                    </ComboBox>\n                    <TextBox\n                        DockPanel.Dock=\"Left\"\n                        Margin=\"0,0,10,0\"\n                        Name=\"SearchMcVersion\"\n                        UseFloatingWatermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MinecraftVersion}\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MinecraftVersion}\" />\n                </DockPanel>\n            </StackPanel>\n        </Border>\n    </DockPanel>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/CurseForgePages/Fetcher.axaml.cs",
    "content": "﻿using Avalonia.Input;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages.CurseForgePages;\n\npublic partial class CurseForgeFetcher : UserControl\n{\n    public CurseForgeFetcher()\n    {\n        InitializeComponent();\n        DataContext = this;\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        SearchButton.Click += (_, _) => SearchAction();\n        SearchKey.KeyDown += (_, e) =>\n        {\n            if (e.Key != Key.Enter) return;\n            SearchAction();\n            e.Handled = true;\n        };\n        SearchMcVersion.KeyDown += (_, e) =>\n        {\n            if (e.Key != Key.Enter) return;\n            SearchAction();\n            e.Handled = true;\n        };\n        Loaded += (_, _) => { _ = Animator.PageLoading.LevelTwoPage(this); };\n    }\n\n    private void SearchAction()\n    {\n        YMCL.App.UiRoot.ViewModel.Download._curseForge.CreateNewPage(new SearchTabViewItemEntry()\n        {\n            CanClose = true, Host = nameof(DownloadPages.CurseForge),\n            Content = new SearchResult(string.IsNullOrWhiteSpace(SearchKey.Text) ? string.Empty : SearchKey.Text,\n                string.IsNullOrWhiteSpace(SearchMcVersion.Text) ? string.Empty : SearchMcVersion.Text,\n                SearchType.SelectedIndex, SearchLoaderType.SelectedIndex),\n            Title = string.IsNullOrWhiteSpace(SearchKey.Text)\n                ? $\"{MainLang.Search}({(SearchType.SelectedItem as ComboBoxItem).Content}): {MainLang.HotResource}\"\n                : $\"{MainLang.Search}({(SearchType.SelectedItem as ComboBoxItem).Content}): {SearchKey.Text}\"\n        });\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/CurseForgePages/ModFileResult.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.CurseForgePages.ModFileResult\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:curseForgePages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages.CurseForgePages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:resourceFetcher=\"clr-namespace:YMCL.Public.Classes.Data.ResourceFetcher\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:CountToUnitConverter x:Key=\"CountToUnitConverter\" />\n    </UserControl.Resources>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Opacity=\"{DynamicResource MainOpacity}\"\n        Padding=\"10\">\n        <DockPanel>\n            <Border\n                Background=\"{DynamicResource 2x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Padding=\"10,5,10,5\"\n                VerticalAlignment=\"Top\">\n                <DockPanel\n                    Margin=\"0,5,0,5\"\n                    Name=\"FileInfo\"\n                    x:DataType=\"resourceFetcher:IResourceEntry\">\n                    <Border\n                        ClipToBounds=\"True\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        Height=\"50\"\n                        Margin=\"0,0,10,0\"\n                        Width=\"50\">\n                        <asyncImageLoader:AdvancedImage Source=\"{Binding Pic}\" />\n                    </Border>\n                    <Button\n                        DockPanel.Dock=\"Right\"\n                        IsEnabled=\"False\"\n                        Name=\"Favourite\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \"\n                                Margin=\"0,0,0,1\"\n                                Name=\"Icon\"\n                                Width=\"15\" />\n                            <TextBlock\n                                Margin=\"5,1,0,0\"\n                                Name=\"Text\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Favourite}\" />\n                        </DockPanel>\n                    </Button>\n                    <DockPanel LastChildFill=\"False\" VerticalAlignment=\"Center\">\n                        <SelectableTextBlock DockPanel.Dock=\"Top\" Text=\"{Binding Name}\" />\n                        <SelectableTextBlock\n                            DockPanel.Dock=\"Top\"\n                            FontSize=\"12\"\n                            Foreground=\"{DynamicResource GrayColor}\"\n                            Text=\"{Binding Summary}\"\n                            TextWrapping=\"Wrap\" />\n                        <SelectableTextBlock\n                            DockPanel.Dock=\"Top\"\n                            FontSize=\"12\"\n                            Foreground=\"{DynamicResource GrayColor}\">\n                            <Run Text=\"{Binding DisplayType, Mode=OneWay}\" />\n                            <Run Text=\",\" />\n                            <Run Text=\"{Binding DownloadCount, Mode=OneWay, Converter={StaticResource CountToUnitConverter}}\" />\n                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                            <Run Text=\",\" />\n                            <Run Text=\"{Binding LastUpdateTime, Mode=OneWay}\" />\n                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Update}\" />\n                        </SelectableTextBlock>\n                    </DockPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 2x}\"\n                ClipToBounds=\"True\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Margin=\"0,10,0,0\"\n                Name=\"InfoBorder\"\n                VerticalAlignment=\"Top\"\n                x:DataType=\"curseForgePages:ModFileResult\">\n                <ScrollViewer HorizontalScrollBarVisibility=\"Auto\" VerticalScrollBarVisibility=\"Disabled\">\n                    <u:SelectionList\n                        AutoScrollToSelectedItem=\"True\"\n                        ItemsSource=\"{Binding Versions}\"\n                        Margin=\"10,5,10,5\"\n                        Name=\"NavMenu\"\n                        SelectedItem=\"{Binding SelectedShortVersion}\"\n                        VerticalAlignment=\"Top\">\n                        <u:SelectionList.Styles>\n                            <Style Selector=\"u|SelectionListItem:not(:selected)\">\n                                <Style Selector=\"^ TextBlock\">\n                                    <Setter Property=\"Foreground\" Value=\"{DynamicResource TextColor}\" />\n                                </Style>\n                            </Style>\n                        </u:SelectionList.Styles>\n                        <u:SelectionList.ItemsPanel>\n                            <ItemsPanelTemplate>\n                                <StackPanel Orientation=\"Horizontal\" />\n                            </ItemsPanelTemplate>\n                        </u:SelectionList.ItemsPanel>\n                        <u:SelectionList.Indicator>\n                            <Border\n                                Background=\"{DynamicResource SystemAccentColor}\"\n                                CornerRadius=\"99999\"\n                                Height=\"22\"\n                                HorizontalAlignment=\"Stretch\"\n                                VerticalAlignment=\"Stretch\" />\n                        </u:SelectionList.Indicator>\n                        <u:SelectionList.ItemTemplate>\n                            <DataTemplate DataType=\"resourceFetcher:ShortVersionEntry\">\n                                <StackPanel Margin=\"3,0,1,0\" Orientation=\"Horizontal\">\n                                    <TextBlock Foreground=\"{DynamicResource TextColor}\" Text=\"{Binding DisplayVersion}\" />\n                                </StackPanel>\n                            </DataTemplate>\n                        </u:SelectionList.ItemTemplate>\n                    </u:SelectionList>\n                </ScrollViewer>\n            </Border>\n            <Grid>\n                <ScrollViewer Margin=\"0,10,0,0\">\n                    <ItemsControl Name=\"ItemsControl\" x:DataType=\"curseForgePages:ModFileResult\">\n                        <ItemsControl.ItemsPanel>\n                            <ItemsPanelTemplate>\n                                <VirtualizingStackPanel />\n                            </ItemsPanelTemplate>\n                        </ItemsControl.ItemsPanel>\n                        <ItemsControl.ItemTemplate>\n                            <DataTemplate DataType=\"resourceFetcher:VersionEntry\">\n                                <ContentControl Content=\"{Binding Expander}\" Margin=\"0,0,0,10\" />\n                            </DataTemplate>\n                        </ItemsControl.ItemTemplate>\n                    </ItemsControl>\n                </ScrollViewer>\n                <controls:ProgressRing\n                    Height=\"50\"\n                    IsVisible=\"False\"\n                    Margin=\"0,50,0,50\"\n                    Name=\"Ring\"\n                    Width=\"50\" />\n            </Grid>\n        </DockPanel>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/CurseForgePages/ModFileResult.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Controls.Shapes;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing CurseForge.APIClient;\nusing CurseForge.APIClient.Models.Mods;\nusing DynamicData;\nusing FluentAvalonia.Core;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui;\nusing YMCL.Public.Module.Util;\nusing ModLoaderType = YMCL.Public.Enum.ModLoaderType;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages.CurseForgePages;\n\npublic partial class ModFileResult : UserControl, INotifyPropertyChanged\n{\n    private CurseForgeResourceEntry _entry;\n    private ShortVersionEntry _selectedShortVersion;\n    public ObservableCollection<ShortVersionEntry> Versions { get; set; } = [];\n\n    public ShortVersionEntry SelectedShortVersion\n    {\n        get\n        {\n            ItemsControl.ItemsSource = null;\n            ItemsControl.Items.Clear();\n            ItemsControl.ItemsSource = _selectedShortVersion?.VersionEntries;\n            return _selectedShortVersion;\n        }\n        set => SetField(ref _selectedShortVersion, value);\n    }\n\n    public ModFileResult(string id, (string name, string icon, string summary) tuple)\n    {\n        InitializeComponent();\n        InfoBorder.DataContext = this;\n        ItemsControl.DataContext = this;\n        FileInfo.DataContext = new CurseForgeResourceEntry()\n        {\n            Name = tuple.name,\n            Logo = new ModAsset() { Url = tuple.icon },\n            Summary = tuple.summary,\n        };\n        Ring.IsVisible = true;\n        _ = GetProject(id);\n    }\n\n    private async System.Threading.Tasks.Task GetProject(string id)\n    {\n        ApiClient apiClient = new(Public.Const.String.CurseForgeApiKey);\n        var res = await apiClient.GetModAsync(Convert.ToInt32(id));\n        Ring.IsVisible = false;\n        var item = res.Data;\n        var entry = new CurseForgeResourceEntry()\n        {\n            Id = item.Id,\n            GameId = item.GameId,\n            Name = item.Name,\n            Slug = item.Slug,\n            Summary = item.Summary,\n            Status = item.Status,\n            DownloadCount = item.DownloadCount,\n            IsFeatured = item.IsFeatured,\n            PrimaryCategoryId = item.PrimaryCategoryId,\n            ClassId = item.ClassId,\n            Authors = item.Authors,\n            Logo = item.Logo,\n            LatestFiles = item.LatestFiles,\n            LatestFilesIndexes = item.LatestFilesIndexes,\n            DateCreated = item.DateCreated,\n            DateModified = item.DateModified,\n            DateReleased = item.DateReleased,\n            AllowModDistribution = item.AllowModDistribution,\n            GamePopularityRank = item.GamePopularityRank,\n            IsAvailable = item.IsAvailable,\n            ThumbsUpCount = item.ThumbsUpCount,\n            Rating = item.Rating\n        };\n        entry.Type = item.ClassId switch\n        {\n            6 => ResourceType.Mod,\n            12 => ResourceType.ResourcePack,\n            17 => ResourceType.Map,\n            6552 => ResourceType.ShaderPack,\n            6945 => ResourceType.DataPack,\n            4471 => ResourceType.ModPack,\n            _ => ResourceType.Unknown\n        };\n        _entry = entry;\n        Init(entry);\n    }\n\n    public ModFileResult(CurseForgeResourceEntry entry)\n    {\n        _entry = entry;\n        InitializeComponent();\n        Init(entry);\n        InfoBorder.DataContext = this;\n        ItemsControl.DataContext = this;\n    }\n\n    private void Init(CurseForgeResourceEntry entry)\n    {\n        var favourite = new FavouriteResourceEntry()\n        {\n            Id = entry.Id.ToString(),\n            Source = ResourceSource.CurseForge,\n            Icon = entry.Logo.Url,\n            Summary = entry.Summary,\n            Title = entry.Name,\n            Type = entry.Type\n        };\n        Favourite.IsEnabled = true;\n        if (!Data.FavouriteResources.Contains(favourite))\n        {\n            Icon.Data = PathGeometry.Parse(\n                \"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \");\n            Text.Text = MainLang.Favourite;\n        }\n        else\n        {\n            Icon.Data = PathGeometry.Parse(\n                \"F1 M 4.21875 19.53125 C 4.049479 19.53125 3.902995 19.467773 3.779297 19.34082 C 3.655599 19.213867 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 L 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.571939 0.633139 9.672852 0.571289 C 9.773763 0.509441 9.879557 0.478516 9.990234 0.478516 C 10.107422 0.478516 10.218099 0.507812 10.322266 0.566406 C 10.426432 0.625 10.504557 0.709637 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.082683 19.918619 8.232422 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.420573 19.505209 4.322917 19.53125 4.21875 19.53125 Z \");\n            Text.Text = MainLang.Favourted;\n        }\n\n        Favourite.Click += (_, _) =>\n        {\n            if (Data.FavouriteResources.Contains(favourite))\n            {\n                Data.FavouriteResources.Remove(favourite);\n                Icon.Data = PathGeometry.Parse(\n                    \"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \");\n                Text.Text = MainLang.Favourite;\n            }\n            else\n            {\n                Data.FavouriteResources.Add(favourite);\n                Icon.Data = PathGeometry.Parse(\n                    \"F1 M 4.21875 19.53125 C 4.049479 19.53125 3.902995 19.467773 3.779297 19.34082 C 3.655599 19.213867 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 L 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.571939 0.633139 9.672852 0.571289 C 9.773763 0.509441 9.879557 0.478516 9.990234 0.478516 C 10.107422 0.478516 10.218099 0.507812 10.322266 0.566406 C 10.426432 0.625 10.504557 0.709637 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.082683 19.918619 8.232422 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.420573 19.505209 4.322917 19.53125 4.21875 19.53125 Z \");\n                Text.Text = MainLang.Favourted;\n            }\n        };\n\n        FileInfo.DataContext = entry;\n        Loaded += (_, _) =>\n        {\n            _ = Animator.PageLoading.LevelTwoPage(this);\n            if (!Data.FavouriteResources.Contains(favourite))\n            {\n                Icon.Data = PathGeometry.Parse(\n                    \"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \");\n                Text.Text = MainLang.Favourite;\n            }\n            else\n            {\n                Icon.Data = PathGeometry.Parse(\n                    \"F1 M 4.21875 19.53125 C 4.049479 19.53125 3.902995 19.467773 3.779297 19.34082 C 3.655599 19.213867 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 L 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.571939 0.633139 9.672852 0.571289 C 9.773763 0.509441 9.879557 0.478516 9.990234 0.478516 C 10.107422 0.478516 10.218099 0.507812 10.322266 0.566406 C 10.426432 0.625 10.504557 0.709637 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.082683 19.918619 8.232422 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.420573 19.505209 4.322917 19.53125 4.21875 19.53125 Z \");\n                Text.Text = MainLang.Favourted;\n            }\n        };\n        Versions.Add(new ShortVersionEntry { Version = \"All\", DisplayVersion = MainLang.All });\n        entry.LatestFilesIndexes.ForEach(x =>\n        {\n            var parts = x.GameVersion.Split('.');\n            if (parts.Length < 2) return;\n            var shortVersion = $\"{parts[0]}.{parts[1]}\";\n            var loader = x.ModLoader != null ? (ModLoaderType)x.ModLoader : ModLoaderType.Any;\n            var fileGroup = new VersionEntry\n            {\n                Version = x.GameVersion,\n                Loader = loader.ToString(),\n                Expander = new CurseForgeFileExpander(x.GameVersion, entry.Id,\n                    entry.Type is ResourceType.Mod or ResourceType.ModPack\n                        ? $\"{x.GameVersion} {loader}\"\n                        : x.GameVersion,\n                    x.ModLoader, entry.Type)\n            };\n            if (!Versions[0].VersionEntries.Any(z => z.Version == x.GameVersion && z.Loader == loader.ToString()))\n            {\n                Versions[0].VersionEntries.Add(fileGroup);\n            }\n\n            if (Versions.Any(y => y.Version == shortVersion)) return;\n            var shortEntry = new ShortVersionEntry { Version = shortVersion, DisplayVersion = shortVersion };\n            Versions.Add(shortEntry);\n        });\n        Versions.ToList().ForEach(x =>\n        {\n            entry.LatestFilesIndexes.ForEach(y =>\n            {\n                var parts = y.GameVersion.Split('.');\n                if (parts.Length < 2) return;\n                var shortVersion = $\"{parts[0]}.{parts[1]}\";\n                var loader = y.ModLoader != null ? (ModLoaderType)y.ModLoader : ModLoaderType.Any;\n                var fileGroup = new VersionEntry\n                {\n                    Version = y.GameVersion,\n                    Loader = loader.ToString(),\n                    Expander = new CurseForgeFileExpander(y.GameVersion, entry.Id,\n                        entry.Type is ResourceType.Mod or ResourceType.ModPack\n                            ? $\"{y.GameVersion} {loader}\"\n                            : y.GameVersion,\n                        y.ModLoader, entry.Type)\n                };\n                if (x.Version != shortVersion) return;\n                if (x.VersionEntries.Any(z =>\n                        z.Version == y.GameVersion && z.Loader == loader.ToString())) return;\n                x.VersionEntries.Add(fileGroup);\n            });\n            var list = x.VersionEntries.OrderByDescending(v => new Version(v.Version))\n                .ThenByDescending(v => v.Loader).ToList();\n            x.VersionEntries = new ObservableCollection<VersionEntry>(list);\n        });\n        var shortList = Versions\n            .OrderByDescending(s => s.Version == \"All\" ? 1 : 0)\n            .ThenByDescending(s => Version.TryParse(s.Version, out var version) ? version : new Version(0, 0))\n            .ToList();\n        Versions.Clear();\n        Versions.AddRange(shortList);\n        SelectedShortVersion = Versions[0];\n    }\n\n    public ModFileResult()\n    {\n        InitializeComponent();\n    }\n\n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return false;\n        field = value;\n        OnPropertyChanged(propertyName);\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/CurseForgePages/SearchResult.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.CurseForgePages.SearchResult\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:curseForgePages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages.CurseForgePages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:resourceFetcher=\"clr-namespace:YMCL.Public.Classes.Data.ResourceFetcher\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:CountToUnitConverter x:Key=\"CountToUnitConverter\" />\n    </UserControl.Resources>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Name=\"Container\"\n        Opacity=\"{DynamicResource MainOpacity}\"\n        Padding=\"10\">\n        <Grid>\n            <ScrollViewer>\n                <StackPanel>\n                    <ListBox Name=\"ListBox\">\n                        <ListBox.ItemTemplate>\n                            <DataTemplate DataType=\"resourceFetcher:IResourceEntry\">\n                                <DockPanel Margin=\"0,5,0,5\">\n                                    <Border\n                                        ClipToBounds=\"True\"\n                                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                                        Height=\"42\"\n                                        Margin=\"0,0,10,0\"\n                                        Width=\"42\">\n                                        <asyncImageLoader:AdvancedImage Source=\"{Binding Pic}\" />\n                                    </Border>\n                                    <DockPanel LastChildFill=\"False\" VerticalAlignment=\"Center\">\n                                        <SelectableTextBlock DockPanel.Dock=\"Top\" Text=\"{Binding Name}\" />\n                                        <TextBlock\n                                            DockPanel.Dock=\"Top\"\n                                            FontSize=\"12\"\n                                            Foreground=\"{DynamicResource GrayColor}\"\n                                            Text=\"{Binding Summary}\"\n                                            TextWrapping=\"Wrap\" />\n                                        <TextBlock\n                                            DockPanel.Dock=\"Top\"\n                                            FontSize=\"12\"\n                                            Foreground=\"{DynamicResource GrayColor}\">\n                                            <Run Text=\"{Binding DisplayType, Mode=OneWay}\" />\n                                            <Run Text=\",\" />\n                                            <Run Text=\"{Binding DownloadCount, Mode=OneWay, Converter={StaticResource CountToUnitConverter}}\" />\n                                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                                            <Run Text=\",\" />\n                                            <Run Text=\"{Binding LastUpdateTime, Mode=OneWay}\" />\n                                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Update}\" />\n                                        </TextBlock>\n                                    </DockPanel>\n                                </DockPanel>\n                            </DataTemplate>\n                        </ListBox.ItemTemplate>\n                    </ListBox>\n                    <controls:ProgressRing\n                        Height=\"50\"\n                        IsVisible=\"False\"\n                        Margin=\"0,50,0,50\"\n                        Name=\"Ring\"\n                        Width=\"50\" />\n                    <HyperlinkButton\n                        Classes=\"accent\"\n                        HorizontalAlignment=\"Center\"\n                        IsVisible=\"False\"\n                        Margin=\"0,50,0,50\"\n                        Name=\"LoadMoreBtn\">\n                        <TextBlock FontFamily=\"{DynamicResource Font}\" TextDecorations=\"{x:Null}\">\n                            <Run Text=\"→\" />\n                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LoadMore}\" />\n                            <Run Text=\"←\" />\n                        </TextBlock>\n                    </HyperlinkButton>\n                </StackPanel>\n            </ScrollViewer>\n        </Grid>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/CurseForgePages/SearchResult.axaml.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Markup.Xaml;\nusing DynamicData;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages.CurseForgePages;\n\npublic partial class SearchResult : UserControl\n{\n    private readonly string _keyword;\n    private readonly string _mcVersion;\n    private readonly int _type;\n    private readonly int _loader;\n    private int _page = 1;\n\n    public SearchResult()\n    {\n        InitializeComponent();\n    }\n\n    public SearchResult(string keyword, string mcVersion, int type, int loader)\n    {\n        InitializeComponent();\n        _keyword = keyword;\n        _mcVersion = mcVersion;\n        _type = type;\n        _loader = loader;\n        _page = 1;\n        ListBox.Items.Clear();\n        _ = Search();\n        LoadMoreBtn.Click += (_, _) =>\n        {\n            _page++;\n            _ = Search();\n        };\n        Loaded += (_, _) => { _ = Animator.PageLoading.LevelTwoPage(this); };\n        ListBox.SelectionChanged += (_, _) =>\n        {\n            if (ListBox.SelectedItem == null) return;\n            var item = ListBox.SelectedItem as CurseForgeResourceEntry;\n            YMCL.App.UiRoot.ViewModel.Download._curseForge.CreateNewPage(new SearchTabViewItemEntry()\n            {\n                CanClose = true, Host = nameof(DownloadPages.CurseForge),\n                Content = new ModFileResult(item!),\n                Title = $\"{item.DisplayType}: {item.Name}\"\n            });\n            ListBox.SelectedItem = null;\n        };\n    }\n\n    private async System.Threading.Tasks.Task Search()\n    {\n        Ring.IsVisible = true;\n        LoadMoreBtn.IsVisible = false;\n        var classId = _type switch\n        {\n            0 => 0, //Any\n            1 => 6, //Mod\n            2 => 12, //MaterialPack\n            3 => 17, //Map\n            4 => 6552, //ShaderPack\n            5 => 6945, //DataPack\n            6 => 4471, //ModPack\n            _ => 0\n        };\n        var data = await Public.Module.IO.Network.CurseForge.Search(_keyword, classId, _page, _mcVersion,\n            (ModLoaderType)_loader);\n        Ring.IsVisible = false;\n        if (!data.success)\n        {\n            Notice(MainLang.LoadFail, NotificationType.Error);\n            return;\n        }\n\n        if (data.data.Count == 0)\n        {\n            Notice(MainLang.SearchNoResult, NotificationType.Error);\n            return;\n        }\n\n        LoadMoreBtn.IsVisible = true;\n        data.data.ForEach(x => ListBox.Items.Add(x));\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/Favourites.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.Favourites\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Margin=\"10,0,10,10\"\n        Opacity=\"{DynamicResource MainOpacity}\">\n        <ListBox\n            ItemsSource=\"{Binding FavouriteResources}\"\n            Margin=\"10\"\n            x:Name=\"ListView\">\n            <ListBox.ItemTemplate>\n                <DataTemplate DataType=\"data:FavouriteResourceEntry\">\n                    <DockPanel Margin=\"0,5,0,5\">\n                        <Border\n                            ClipToBounds=\"True\"\n                            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                            Height=\"42\"\n                            Margin=\"0,0,10,0\"\n                            Width=\"42\">\n                            <asyncImageLoader:AdvancedImage Source=\"{Binding Icon}\" />\n                        </Border>\n                        <DockPanel LastChildFill=\"False\" VerticalAlignment=\"Center\">\n                            <SelectableTextBlock DockPanel.Dock=\"Top\" Text=\"{Binding Title}\" />\n                            <TextBlock\n                                DockPanel.Dock=\"Top\"\n                                FontSize=\"12\"\n                                Foreground=\"{DynamicResource GrayColor}\"\n                                Text=\"{Binding Summary}\"\n                                TextWrapping=\"Wrap\" />\n                            <TextBlock\n                                DockPanel.Dock=\"Top\"\n                                FontSize=\"12\"\n                                Foreground=\"{DynamicResource GrayColor}\">\n                                <Run Text=\"{Binding DisplayType, Mode=OneWay}\" />\n                                <Run Text=\",\" />\n                                <Run Text=\"{Binding Source, Mode=OneWay}\" />\n                            </TextBlock>\n                        </DockPanel>\n                    </DockPanel>\n                </DataTemplate>\n            </ListBox.ItemTemplate>\n        </ListBox>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/Favourites.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Enum;\nusing YMCL.Views.Main.Pages.DownloadPages.CurseForgePages;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages;\n\npublic partial class Favourites : UserControl\n{\n    public Favourites()\n    {\n        InitializeComponent();\n        ListView.SelectionChanged += (_, _) =>\n        {\n            if (ListView.SelectedItem is not FavouriteResourceEntry item) return;\n            if (item is { Source: ResourceSource.CurseForge })\n            {\n                YMCL.App.UiRoot.ViewModel.Download.Nav.SelectedItem = YMCL.App.UiRoot.ViewModel.Download.NavCf;\n                YMCL.App.UiRoot.ViewModel.Download._curseForge.CreateNewPage(new SearchTabViewItemEntry()\n                {\n                    CanClose = true, Host = nameof(DownloadPages.CurseForge),\n                    Content = new ModFileResult(item.Id, (item.Title, item.Icon , item.Summary)),\n                    Title = $\"{item.DisplayType}: {item.Title}\"\n                });\n            }\n            else if (item is { Source: ResourceSource.Modrinth })\n            {\n                YMCL.App.UiRoot.ViewModel.Download.Nav.SelectedItem = YMCL.App.UiRoot.ViewModel.Download.NavMr;\n                YMCL.App.UiRoot.ViewModel.Download._modrinth.CreateNewPage(new SearchTabViewItemEntry()\n                {\n                    CanClose = true, Host = nameof(DownloadPages.Modrinth),\n                    Content = new ModrinthPages.ModFileResult(item.Id, (item.Title, item.Icon , item.Summary)),\n                    Title = $\"{item.DisplayType}: {item.Title}\"\n                });\n            }\n\n            ListView.SelectedItem = null;\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/Modrinth.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.Modrinth\"\n    x:DataType=\"downloadPages:Modrinth\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:downloadPages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            ClipToBounds=\"True\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            DockPanel.Dock=\"Top\"\n            Margin=\"10,0,10,0\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            VerticalAlignment=\"Top\">\n            <ScrollViewer HorizontalScrollBarVisibility=\"Auto\" VerticalScrollBarVisibility=\"Disabled\">\n                <u:SelectionList\n                    AutoScrollToSelectedItem=\"True\"\n                    ItemsSource=\"{Binding Items}\"\n                    Margin=\"5\"\n                    Name=\"NavMenu\"\n                    SelectedItem=\"{Binding SelectedItem}\"\n                    VerticalAlignment=\"Top\">\n                    <u:SelectionList.Styles>\n                        <Style Selector=\"u|SelectionListItem:not(:selected)\">\n                            <Style Selector=\"^ TextBlock\">\n                                <Setter Property=\"Foreground\" Value=\"{DynamicResource TextColor}\" />\n                            </Style>\n                        </Style>\n                    </u:SelectionList.Styles>\n                    <u:SelectionList.ItemsPanel>\n                        <ItemsPanelTemplate>\n                            <StackPanel Orientation=\"Horizontal\" />\n                        </ItemsPanelTemplate>\n                    </u:SelectionList.ItemsPanel>\n                    <u:SelectionList.Indicator>\n                        <Border\n                            Background=\"{DynamicResource 2x}\"\n                            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                            HorizontalAlignment=\"Stretch\"\n                            VerticalAlignment=\"Stretch\" />\n                    </u:SelectionList.Indicator>\n                    <u:SelectionList.ItemTemplate>\n                        <DataTemplate DataType=\"data:SearchTabViewItemEntry\">\n                            <StackPanel Margin=\"3,0,1,0\" Orientation=\"Horizontal\">\n                                <TextBlock Foreground=\"{DynamicResource TextColor}\" Text=\"{Binding Title}\" />\n                                <Button\n                                    Classes=\"icon-button\"\n                                    Command=\"{Binding Close}\"\n                                    Content=\"{DynamicResource Close}\"\n                                    HorizontalAlignment=\"Right\"\n                                    IsVisible=\"{Binding CanClose}\"\n                                    Margin=\"3,1,0,0\"\n                                    MaxHeight=\"14\"\n                                    MaxWidth=\"16\"\n                                    MinHeight=\"14\"\n                                    Name=\"CloseButton\"\n                                    VerticalAlignment=\"Center\" />\n                            </StackPanel>\n                        </DataTemplate>\n                    </u:SelectionList.ItemTemplate>\n                </u:SelectionList>\n            </ScrollViewer>\n        </Border>\n        <ContentControl\n            Content=\"{Binding SelectedItem.Content}\"\n            DockPanel.Dock=\"Bottom\"\n            Margin=\"10\"\n            Name=\"ContentControl\" />\n    </DockPanel>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/Modrinth.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Langs;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages;\n\npublic partial class Modrinth : UserControl, INotifyPropertyChanged\n{\n    private SearchTabViewItemEntry _selectedItem;\n\n    public ObservableCollection<SearchTabViewItemEntry> Items { get; set; } =\n    [\n        new()\n        {\n            Content = new ModrinthPages.ModrinthFetcher(),\n            Title = $\"{MainLang.Search}: {MainLang.Home}\",\n            Tag = \"Home\",\n            CanClose = false,\n            Host = nameof(Modrinth)\n        }\n    ];\n\n    public SearchTabViewItemEntry SelectedItem\n    {\n        get => _selectedItem;\n        set => SetField(ref _selectedItem, value);\n    }\n\n    public void CreateNewPage(SearchTabViewItemEntry entry)\n    {\n        Items.Add(entry);\n        SelectedItem = entry;\n    }\n\n    public Modrinth()\n    {\n        InitializeComponent();\n        DataContext = this;\n        SelectedItem = Items.FirstOrDefault();\n    }\n\n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return false;\n        field = value;\n        OnPropertyChanged(propertyName);\n        return true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/ModrinthPages/Fetcher.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.ModrinthPages.ModrinthFetcher\"\n    x:DataType=\"modrinthPages:ModrinthFetcher\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:downloadPages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:modrinthPages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages.ModrinthPages\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:resourceFetcher=\"clr-namespace:YMCL.Public.Classes.Data.ResourceFetcher\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            DockPanel.Dock=\"Top\"\n            Name=\"SearchRoot\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            Padding=\"10\"\n            VerticalAlignment=\"Top\">\n            <StackPanel HorizontalAlignment=\"Stretch\" Spacing=\"10\">\n                <DockPanel Dock=\"Top\">\n                    <Button\n                        DockPanel.Dock=\"Right\"\n                        Height=\"32\"\n                        Margin=\"10,0,0,0\"\n                        Name=\"SearchButton\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 15.966797 7.802734 C 16.533203 7.802734 17.062174 7.918295 17.553711 8.149414 C 18.045246 8.380534 18.47168 8.691406 18.833008 9.082031 C 19.194336 9.472656 19.479166 9.923503 19.6875 10.43457 C 19.895832 10.945639 20 11.477865 20 12.03125 C 20 12.584636 19.895832 13.115234 19.6875 13.623047 C 19.479166 14.130859 19.194336 14.580078 18.833008 14.970703 C 18.47168 15.361328 18.046875 15.672201 17.558594 15.90332 C 17.070312 16.134441 16.542969 16.25 15.976562 16.25 L 10.585938 16.25 L 9.824219 15.478516 L 10.009766 15 L 15.957031 15 C 16.354166 15 16.723633 14.916992 17.06543 14.750977 C 17.407227 14.584961 17.701822 14.365234 17.949219 14.091797 C 18.196613 13.818359 18.391926 13.502604 18.535156 13.144531 C 18.678385 12.786459 18.75 12.415365 18.75 12.03125 C 18.75 11.614584 18.675129 11.225586 18.525391 10.864258 C 18.37565 10.50293 18.168945 10.187175 17.905273 9.916992 C 17.641602 9.646811 17.330729 9.435222 16.972656 9.282227 C 16.614582 9.129232 16.227213 9.052734 15.810547 9.052734 C 15.472005 9.052734 15.192057 8.94694 14.970703 8.735352 C 14.749349 8.523764 14.61263 8.255209 14.560547 7.929688 C 14.527994 7.695313 14.49056 7.467449 14.448242 7.246094 C 14.405924 7.02474 14.342447 6.800131 14.257812 6.572266 C 14.088541 6.103516 13.862304 5.693359 13.579102 5.341797 C 13.295897 4.990234 12.970377 4.695639 12.602539 4.458008 C 12.2347 4.220378 11.831055 4.042969 11.391602 3.925781 C 10.952148 3.808594 10.488281 3.75 10 3.75 C 9.420572 3.75 8.885091 3.828125 8.393555 3.984375 C 7.902018 4.140625 7.464192 4.370117 7.080078 4.672852 C 6.695963 4.975586 6.37207 5.348308 6.108398 5.791016 C 5.844727 6.233725 5.651042 6.738281 5.527344 7.304688 C 5.31901 7.259115 5.110677 7.22819 4.902344 7.211914 C 4.69401 7.195639 4.485677 7.1875 4.277344 7.1875 C 4.407552 6.458334 4.641927 5.802409 4.980469 5.219727 C 5.31901 4.637045 5.737305 4.145508 6.235352 3.745117 C 6.733398 3.344727 7.301432 3.037109 7.939453 2.822266 C 8.577474 2.607422 9.264322 2.5 10 2.5 C 10.800781 2.5 11.541341 2.626953 12.22168 2.880859 C 12.902018 3.134766 13.496093 3.49284 14.003906 3.955078 C 14.511718 4.417318 14.921874 4.973959 15.234375 5.625 C 15.546874 6.276042 15.738932 7.001953 15.810547 7.802734 Z M 11.25 19.375 C 11.25 19.544271 11.18815 19.690756 11.064453 19.814453 C 10.940755 19.93815 10.794271 20 10.625 20 C 10.455729 20 10.309244 19.93815 10.185547 19.814453 L 6.992188 16.621094 C 6.595052 16.927084 6.171875 17.150064 5.722656 17.290039 C 5.273438 17.430014 4.798177 17.5 4.296875 17.5 C 3.704427 17.5 3.147786 17.381186 2.626953 17.143555 C 2.10612 16.905924 1.650391 16.586914 1.259766 16.186523 C 0.869141 15.786133 0.561523 15.320639 0.336914 14.790039 C 0.112305 14.25944 0 13.704428 0 13.125 C 0 12.526042 0.11556 11.961264 0.34668 11.430664 C 0.577799 10.900065 0.891927 10.436198 1.289062 10.039062 C 1.686198 9.641928 2.150065 9.3278 2.680664 9.09668 C 3.211263 8.865561 3.776042 8.75 4.375 8.75 C 4.954427 8.75 5.50944 8.862305 6.040039 9.086914 C 6.570638 9.311523 7.036133 9.619141 7.436523 10.009766 C 7.836914 10.400391 8.155924 10.85612 8.393555 11.376953 C 8.631185 11.897787 8.75 12.454428 8.75 13.046875 C 8.75 13.548178 8.680013 14.023438 8.540039 14.472656 C 8.400064 14.921875 8.177083 15.345053 7.871094 15.742188 L 11.064453 18.935547 C 11.18815 19.059244 11.25 19.205729 11.25 19.375 Z M 4.375 16.25 L 4.443359 16.25 C 4.866536 16.25 5.263672 16.165365 5.634766 15.996094 C 6.005859 15.826823 6.329752 15.598959 6.606445 15.3125 C 6.883138 15.026042 7.101237 14.694011 7.260742 14.316406 C 7.420247 13.938803 7.5 13.541667 7.5 13.125 C 7.5 12.688803 7.418619 12.281901 7.255859 11.904297 C 7.093099 11.526693 6.870117 11.196289 6.586914 10.913086 C 6.303711 10.629883 5.973307 10.406901 5.595703 10.244141 C 5.218099 10.081381 4.811198 10 4.375 10 C 3.938802 10 3.531901 10.081381 3.154297 10.244141 C 2.776693 10.406901 2.446289 10.629883 2.163086 10.913086 C 1.879883 11.196289 1.656901 11.526693 1.494141 11.904297 C 1.33138 12.281901 1.25 12.688803 1.25 13.125 C 1.25 13.561198 1.33138 13.9681 1.494141 14.345703 C 1.656901 14.723308 1.879883 15.053711 2.163086 15.336914 C 2.446289 15.620117 2.776693 15.8431 3.154297 16.005859 C 3.531901 16.168621 3.938802 16.25 4.375 16.25 Z \"\n                                Margin=\"0,2,5,0\"\n                                Width=\"20\" />\n                            <TextBlock\n                                Margin=\"0,1,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Search}\"\n                                VerticalAlignment=\"Center\" />\n                        </DockPanel>\n                    </Button>\n                    <TextBox\n                        DockPanel.Dock=\"Left\"\n                        Name=\"SearchKey\"\n                        UseFloatingWatermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\" />\n                </DockPanel>\n                <DockPanel Dock=\"Bottom\">\n                    <ComboBox\n                        DockPanel.Dock=\"Right\"\n                        Name=\"SearchType\"\n                        SelectedIndex=\"0\"\n                        Width=\"210\">\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AllType}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Mod}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ModPack}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ResourcePacks}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ShaderPack}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DataPack}\" FontFamily=\"{DynamicResource Font}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Plugin}\" FontFamily=\"{DynamicResource Font}\" />\n                    </ComboBox>\n                    <TextBox\n                        DockPanel.Dock=\"Left\"\n                        Margin=\"0,0,10,0\"\n                        Name=\"SearchMcVersion\"\n                        UseFloatingWatermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MinecraftVersion}\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MinecraftVersion}\" />\n                </DockPanel>\n            </StackPanel>\n        </Border>\n    </DockPanel>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/ModrinthPages/Fetcher.axaml.cs",
    "content": "﻿using Avalonia.Input;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages.ModrinthPages;\n\npublic partial class ModrinthFetcher : UserControl\n{\n    public ModrinthFetcher()\n    {\n        InitializeComponent();\n        DataContext = this;\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        SearchButton.Click += (_, _) => SearchAction();\n        SearchKey.KeyDown += (_, e) =>\n        {\n            if (e.Key != Key.Enter) return;\n            SearchAction();\n            e.Handled = true;\n        };\n        SearchMcVersion.KeyDown += (_, e) =>\n        {\n            if (e.Key != Key.Enter) return;\n            SearchAction();\n            e.Handled = true;\n        };\n        Loaded += (_, _) => { _ = Animator.PageLoading.LevelTwoPage(this); };\n    }\n\n    private void SearchAction()\n    {\n        YMCL.App.UiRoot.ViewModel.Download._modrinth.CreateNewPage(new SearchTabViewItemEntry()\n        {\n            CanClose = true,Host = nameof(Modrinth),\n            Content = new SearchResult(string.IsNullOrWhiteSpace(SearchKey.Text) ? string.Empty : SearchKey.Text,\n                string.IsNullOrWhiteSpace(SearchMcVersion.Text) ? string.Empty : SearchMcVersion.Text,\n                SearchType.SelectedIndex),\n            Title = string.IsNullOrWhiteSpace(SearchKey.Text)\n                ? $\"{MainLang.Search}({(SearchType.SelectedItem as ComboBoxItem).Content}): {MainLang.HotResource}\"\n                : $\"{MainLang.Search}({(SearchType.SelectedItem as ComboBoxItem).Content}): {SearchKey.Text}\"\n        });\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/ModrinthPages/ModFileResult.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.ModrinthPages.ModFileResult\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:controls1=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:curseForgePages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages.CurseForgePages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:modrinthPages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages.ModrinthPages\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:resourceFetcher=\"clr-namespace:YMCL.Public.Classes.Data.ResourceFetcher\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:CountToUnitConverter x:Key=\"CountToUnitConverter\" />\n    </UserControl.Resources>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Opacity=\"{DynamicResource MainOpacity}\"\n        Padding=\"10\">\n        <DockPanel>\n            <Border\n                Background=\"{DynamicResource 2x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Padding=\"10,5,10,5\"\n                VerticalAlignment=\"Top\">\n                <DockPanel\n                    Margin=\"0,5,0,5\"\n                    Name=\"FileInfo\"\n                    x:DataType=\"resourceFetcher:IResourceEntry\">\n                    <Border\n                        ClipToBounds=\"True\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        Height=\"50\"\n                        Margin=\"0,0,10,0\"\n                        Width=\"50\">\n                        <asyncImageLoader:AdvancedImage Source=\"{Binding Pic}\" />\n                    </Border>\n                    <Button\n                        DockPanel.Dock=\"Right\"\n                        IsEnabled=\"False\"\n                        Name=\"Favourite\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \"\n                                Margin=\"0,0,0,1\"\n                                Name=\"Icon\"\n                                Width=\"15\" />\n                            <TextBlock\n                                Margin=\"5,1,0,0\"\n                                Name=\"Text\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Favourite}\" />\n                        </DockPanel>\n                    </Button>\n                    <DockPanel LastChildFill=\"False\" VerticalAlignment=\"Center\">\n                        <SelectableTextBlock DockPanel.Dock=\"Top\" Text=\"{Binding Name}\" />\n                        <SelectableTextBlock\n                            DockPanel.Dock=\"Top\"\n                            FontSize=\"12\"\n                            Foreground=\"{DynamicResource GrayColor}\"\n                            Text=\"{Binding Summary}\"\n                            TextWrapping=\"Wrap\" />\n                        <SelectableTextBlock\n                            DockPanel.Dock=\"Top\"\n                            FontSize=\"12\"\n                            Foreground=\"{DynamicResource GrayColor}\">\n                            <Run Text=\"{Binding DisplayType, Mode=OneWay}\" />\n                            <Run Text=\",\" />\n                            <Run Text=\"{Binding DownloadCount, Mode=OneWay, Converter={StaticResource CountToUnitConverter}}\" />\n                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                            <Run Text=\",\" />\n                            <Run Text=\"{Binding LastUpdateTime, Mode=OneWay}\" />\n                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Update}\" />\n                        </SelectableTextBlock>\n                    </DockPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 2x}\"\n                ClipToBounds=\"True\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Top\"\n                Margin=\"0,10,0,0\"\n                Name=\"InfoBorder\"\n                VerticalAlignment=\"Top\"\n                x:DataType=\"modrinthPages:ModFileResult\">\n                <ScrollViewer HorizontalScrollBarVisibility=\"Auto\" VerticalScrollBarVisibility=\"Disabled\">\n                    <u:SelectionList\n                        AutoScrollToSelectedItem=\"True\"\n                        ItemsSource=\"{Binding Versions}\"\n                        Margin=\"10,5,10,5\"\n                        Name=\"NavMenu\"\n                        SelectedItem=\"{Binding SelectedShortVersion}\"\n                        VerticalAlignment=\"Top\">\n                        <u:SelectionList.Styles>\n                            <Style Selector=\"u|SelectionListItem:not(:selected)\">\n                                <Style Selector=\"^ TextBlock\">\n                                    <Setter Property=\"Foreground\" Value=\"{DynamicResource TextColor}\" />\n                                </Style>\n                            </Style>\n                        </u:SelectionList.Styles>\n                        <u:SelectionList.ItemsPanel>\n                            <ItemsPanelTemplate>\n                                <StackPanel Orientation=\"Horizontal\" />\n                            </ItemsPanelTemplate>\n                        </u:SelectionList.ItemsPanel>\n                        <u:SelectionList.Indicator>\n                            <Border\n                                Background=\"{DynamicResource SystemAccentColor}\"\n                                CornerRadius=\"99999\"\n                                Height=\"22\"\n                                HorizontalAlignment=\"Stretch\"\n                                VerticalAlignment=\"Stretch\" />\n                        </u:SelectionList.Indicator>\n                        <u:SelectionList.ItemTemplate>\n                            <DataTemplate DataType=\"resourceFetcher:ShortVersionEntry\">\n                                <StackPanel Margin=\"3,0,1,0\" Orientation=\"Horizontal\">\n                                    <TextBlock Foreground=\"{DynamicResource TextColor}\" Text=\"{Binding DisplayVersion}\" />\n                                </StackPanel>\n                            </DataTemplate>\n                        </u:SelectionList.ItemTemplate>\n                    </u:SelectionList>\n                </ScrollViewer>\n            </Border>\n            <Grid>\n                <ScrollViewer Margin=\"0,10,0,0\">\n                    <ItemsControl Name=\"ItemsControl\" x:DataType=\"modrinthPages:ModFileResult\">\n                        <ItemsControl.ItemsPanel>\n                            <ItemsPanelTemplate>\n                                <VirtualizingStackPanel />\n                            </ItemsPanelTemplate>\n                        </ItemsControl.ItemsPanel>\n                        <ItemsControl.ItemTemplate>\n                            <DataTemplate DataType=\"resourceFetcher:VersionEntry\">\n                                <ContentControl Content=\"{Binding Expander}\" Margin=\"0,0,0,10\" />\n                            </DataTemplate>\n                        </ItemsControl.ItemTemplate>\n                    </ItemsControl>\n                </ScrollViewer>\n                <controls:ProgressRing\n                    Height=\"50\"\n                    IsVisible=\"True\"\n                    Margin=\"0,50,0,50\"\n                    Name=\"Ring\"\n                    Width=\"50\" />\n            </Grid>\n        </DockPanel>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/ModrinthPages/ModFileResult.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Avalonia.Media;\nusing DynamicData;\nusing Modrinth;\nusing Modrinth.Models.Enums.Project;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Classes.Json;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Network;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages.ModrinthPages;\n\npublic partial class ModFileResult : UserControl, INotifyPropertyChanged\n{\n    private ModrinthResourceEntry _entry;\n    private ShortVersionEntry _selectedShortVersion;\n    public ObservableCollection<ShortVersionEntry> Versions { get; set; } = [];\n\n    public ShortVersionEntry SelectedShortVersion\n    {\n        get\n        {\n            ItemsControl.ItemsSource = null;\n            ItemsControl.Items.Clear();\n            ItemsControl.ItemsSource = _selectedShortVersion?.VersionEntries;\n            return _selectedShortVersion;\n        }\n        set => SetField(ref _selectedShortVersion, value);\n    }\n\n\n    public ModFileResult(ModrinthResourceEntry entry)\n    {\n        _entry = entry;\n        InitializeComponent();\n        InfoBorder.DataContext = this;\n        ItemsControl.DataContext = this;\n        _ = Init(entry);\n    }\n\n    public ModFileResult(string id, (string name, string icon, string summary) tuple)\n    {\n        InitializeComponent();\n        InfoBorder.DataContext = this;\n        ItemsControl.DataContext = this;\n        FileInfo.DataContext = new ModrinthResourceEntry()\n        {\n            Title = tuple.name,\n            IconUrl = tuple.icon,\n            Description = tuple.summary,\n        };\n        _ = GetProject(id);\n    }\n\n    private async System.Threading.Tasks.Task GetProject(string id)\n    {\n        var client = new ModrinthClient();\n        var projectTask = client.Project.GetAsync(id);\n        var dependenciesTask = client.Project.GetDependenciesAsync(id);\n        var versionsTask = Public.Module.IO.Network.Modrinth.GetVersionsById(id);\n        await System.Threading.Tasks.Task.WhenAll(projectTask, dependenciesTask, versionsTask);\n        var x = await projectTask;\n        var deps = await dependenciesTask;\n        var versions = await versionsTask;\n        Ring.IsVisible = false;\n        var list = new List<string>();\n        versions.data.ForEach(y => list.AddRange(y.game_versions));\n        var entry = new ModrinthResourceEntry()\n        {\n            Slug = x.Slug,\n            ProjectId = x.Id,\n            Dependencies = deps.Projects.Select(y => y.Id).ToArray(),\n            Categories = x.Categories,\n            ClientSide = x.ClientSide,\n            ServerSide = x.ServerSide,\n            Description = x.Description,\n            ProjectType = x.ProjectType,\n            Title = x.Title,\n            DateCreated = x.Published,\n            DateModified = x.Updated,\n            Followers = x.Followers,\n            Downloads = x.Downloads,\n            IconUrl = x.IconUrl,\n            License = x.License.ToString(),\n            Versions = list.ToArray(),\n            Color = x.Color,\n            FeaturedGallery = x.FeaturedGallery,\n        };\n        _entry = entry;\n        _ = Init(entry, versions);\n    }\n\n    private async System.Threading.Tasks.Task Init(ModrinthResourceEntry entry,\n        (List<ModrinthVersionEntry.Root>? data, bool success)? p_versions = null)\n    {\n        FileInfo.DataContext = entry;\n        var favourite = new FavouriteResourceEntry()\n        {\n            Id = entry.ProjectId,\n            Source = ResourceSource.Modrinth,\n            Icon = entry.IconUrl,\n            Summary = entry.Summary,\n            Title = entry.Name,\n            Type = _projectToResourceMapping.GetValueOrDefault(entry.ProjectType, ResourceType.Unknown)\n        };\n        Favourite.IsEnabled = true;\n        if (!Data.FavouriteResources.Contains(favourite))\n        {\n            Icon.Data = PathGeometry.Parse(\n                \"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \");\n            Text.Text = MainLang.Favourite;\n        }\n        else\n        {\n            Icon.Data = PathGeometry.Parse(\n                \"F1 M 4.21875 19.53125 C 4.049479 19.53125 3.902995 19.467773 3.779297 19.34082 C 3.655599 19.213867 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 L 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.571939 0.633139 9.672852 0.571289 C 9.773763 0.509441 9.879557 0.478516 9.990234 0.478516 C 10.107422 0.478516 10.218099 0.507812 10.322266 0.566406 C 10.426432 0.625 10.504557 0.709637 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.082683 19.918619 8.232422 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.420573 19.505209 4.322917 19.53125 4.21875 19.53125 Z \");\n            Text.Text = MainLang.Favourted;\n        }\n\n        Favourite.Click += (_, _) =>\n        {\n            if (Data.FavouriteResources.Contains(favourite))\n            {\n                Data.FavouriteResources.Remove(favourite);\n                Icon.Data = PathGeometry.Parse(\n                    \"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \");\n                Text.Text = MainLang.Favourite;\n            }\n            else\n            {\n                Data.FavouriteResources.Add(favourite);\n                Icon.Data = PathGeometry.Parse(\n                    \"F1 M 4.21875 19.53125 C 4.049479 19.53125 3.902995 19.467773 3.779297 19.34082 C 3.655599 19.213867 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 L 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.571939 0.633139 9.672852 0.571289 C 9.773763 0.509441 9.879557 0.478516 9.990234 0.478516 C 10.107422 0.478516 10.218099 0.507812 10.322266 0.566406 C 10.426432 0.625 10.504557 0.709637 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.082683 19.918619 8.232422 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.420573 19.505209 4.322917 19.53125 4.21875 19.53125 Z \");\n                Text.Text = MainLang.Favourted;\n            }\n        };\n        Loaded += (_, _) =>\n        {\n            _ = Animator.PageLoading.LevelTwoPage(this);\n            if (!Data.FavouriteResources.Contains(favourite))\n            {\n                Icon.Data = PathGeometry.Parse(\n                    \"F1 M 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.573567 0.633139 9.677734 0.571289 C 9.7819 0.509441 9.889322 0.478516 10 0.478516 C 10.110677 0.478516 10.218099 0.509441 10.322266 0.571289 C 10.426432 0.633139 10.504557 0.716146 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.076172 19.918619 8.225912 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.427083 19.498697 4.329427 19.521484 4.21875 19.521484 C 4.049479 19.521484 3.902995 19.459635 3.779297 19.335938 C 3.655599 19.21224 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 Z M 5.048828 17.753906 L 10 15.146484 L 14.951172 17.753906 C 14.794922 16.829428 14.640299 15.909831 14.487305 14.995117 C 14.33431 14.080404 14.173177 13.160808 14.003906 12.236328 L 18.017578 8.330078 L 12.480469 7.529297 C 12.057291 6.689453 11.642252 5.852865 11.235352 5.019531 C 10.82845 4.186199 10.416666 3.349609 10 2.509766 C 9.583333 3.349609 9.171549 4.186199 8.764648 5.019531 C 8.357747 5.852865 7.942708 6.689453 7.519531 7.529297 L 1.982422 8.330078 L 5.996094 12.236328 C 5.826823 13.160808 5.66569 14.080404 5.512695 14.995117 C 5.3597 15.909831 5.205078 16.829428 5.048828 17.753906 Z \");\n                Text.Text = MainLang.Favourite;\n            }\n            else\n            {\n                Icon.Data = PathGeometry.Parse(\n                    \"F1 M 4.21875 19.53125 C 4.049479 19.53125 3.902995 19.467773 3.779297 19.34082 C 3.655599 19.213867 3.59375 19.065756 3.59375 18.896484 C 3.59375 18.850912 3.597005 18.815104 3.603516 18.789062 L 4.648438 12.675781 L 0.205078 8.349609 C 0.08138 8.225912 0.019531 8.079428 0.019531 7.910156 C 0.019531 7.760417 0.071615 7.623698 0.175781 7.5 C 0.279948 7.376303 0.406901 7.301434 0.556641 7.275391 L 6.689453 6.386719 L 9.443359 0.820312 C 9.495442 0.716146 9.571939 0.633139 9.672852 0.571289 C 9.773763 0.509441 9.879557 0.478516 9.990234 0.478516 C 10.107422 0.478516 10.218099 0.507812 10.322266 0.566406 C 10.426432 0.625 10.504557 0.709637 10.556641 0.820312 L 13.310547 6.386719 L 19.443359 7.275391 C 19.599609 7.301434 19.728189 7.373048 19.829102 7.490234 C 19.930012 7.607423 19.980469 7.744142 19.980469 7.900391 C 19.980469 8.082683 19.918619 8.232422 19.794922 8.349609 L 15.351562 12.675781 L 16.396484 18.789062 C 16.402994 18.815104 16.40625 18.850912 16.40625 18.896484 C 16.40625 19.065756 16.3444 19.21224 16.220703 19.335938 C 16.097004 19.459635 15.950521 19.521484 15.78125 19.521484 C 15.670572 19.521484 15.572916 19.498697 15.488281 19.453125 L 10 16.5625 L 4.511719 19.453125 C 4.420573 19.505209 4.322917 19.53125 4.21875 19.53125 Z \");\n                Text.Text = MainLang.Favourted;\n            }\n        };\n        Versions.Add(new ShortVersionEntry { Version = \"All\", DisplayVersion = MainLang.All });\n        entry.Versions.ToList().ForEach(x =>\n        {\n            var parts = x.Split('-').FirstOrDefault()?.Split('.');\n            if (parts.Length < 2) return;\n            var shortVersion = $\"{parts[0]}.{parts[1]}\";\n            if (Versions.Any(y => y.Version == shortVersion)) return;\n            var shortEntry = new ShortVersionEntry { Version = shortVersion, DisplayVersion = shortVersion };\n            Versions.Add(shortEntry);\n        });\n        var shortList = Versions\n            .OrderByDescending(s => s.Version == \"All\" ? 1 : 0)\n            .ThenByDescending(s => Version.TryParse(s.Version, out var version) ? version : new Version(0, 0))\n            .ToList();\n        Versions.Clear();\n        Versions.AddRange(shortList);\n        SelectedShortVersion = Versions[0];\n        await GetFiles(p_versions);\n    }\n\n    private async System.Threading.Tasks.Task GetFiles(\n        (List<ModrinthVersionEntry.Root>? data, bool success)? p_versions = null)\n    {\n        var versions = p_versions ?? await Public.Module.IO.Network.Modrinth.GetVersionsById(_entry.ProjectId);\n        Ring.IsVisible = false;\n        versions.data.ForEach(y =>\n        {\n            foreach (var fileGroup in from version in y.game_versions\n                     from loader in y.Loaders\n                     let fileGroup = new VersionEntry\n                     {\n                         Version = version,\n                         Loader = loader,\n                         Expander = new ModrinthFileExpander($\"{version} {loader}\", version,\n                             _projectToResourceMapping.GetValueOrDefault(_entry.ProjectType, ResourceType.Unknown),\n                             _entry)\n                     }\n                     where !Versions[0].VersionEntries.Any(z =>\n                         z.Version == version && z.Loader == loader)\n                     select fileGroup)\n            {\n                var disLoader = fileGroup.Loader;\n                if (!string.IsNullOrWhiteSpace(fileGroup.Loader))\n                {\n                    var charArray = fileGroup.Loader.ToCharArray();\n                    charArray[0] = char.ToUpper(charArray[0]);\n                    disLoader = new string(charArray);\n                }\n\n                if (fileGroup.Expander is ModrinthFileExpander expander)\n                    expander.Expander.Header = $\"{fileGroup.Version} {disLoader}\";\n                var files = new List<ModrinthFile>();\n                versions.data\n                    .Where(z => z.game_versions.Contains(fileGroup.Version) && z.Loaders.Contains(fileGroup.Loader))\n                    .ToList().ForEach(\n                        x =>\n                        {\n                            x.Files.ForEach(z =>\n                            {\n                                files.Add(new ModrinthFile\n                                {\n                                    Size = z.Size,\n                                    FileName = z.Filename,\n                                    Title = x.Name,\n                                    Downloads = x.Downloads,\n                                    UpdateTime = x.date_published,\n                                    Url = z.Url\n                                });\n                            });\n                        });\n                (fileGroup.Expander as ModrinthFileExpander)?.Files.AddRange(files);\n                Versions[0].VersionEntries.Add(fileGroup);\n            }\n\n            Versions.ToList().ForEach(x =>\n            {\n                if (x.Version == \"All\") return;\n                foreach (var version in y.game_versions)\n                {\n                    foreach (var loader in y.Loaders)\n                    {\n                        var disLoader = loader;\n                        if (!string.IsNullOrWhiteSpace(loader))\n                        {\n                            var charArray = loader.ToCharArray();\n                            charArray[0] = char.ToUpper(charArray[0]);\n                            disLoader = new string(charArray);\n                        }\n\n                        var fileGroup = new VersionEntry\n                        {\n                            Version = version,\n                            Loader = loader,\n                            Expander = new ModrinthFileExpander($\"{version} {disLoader}\", version,\n                                _projectToResourceMapping.GetValueOrDefault(_entry.ProjectType, ResourceType.Unknown),\n                                _entry)\n                        };\n                        if (!x.VersionEntries.Any(z =>\n                                z.Version == version && z.Loader == loader))\n                            if (!y.game_versions.Any(s => s.Contains(x.Version)))\n                                continue;\n                        if (x.VersionEntries.Any(z =>\n                                z.Version == version && z.Loader == loader)) continue;\n                        var files = new List<ModrinthFile>();\n                        versions.data\n                            .Where(z => z.game_versions.Contains(fileGroup.Version) &&\n                                        z.Loaders.Contains(fileGroup.Loader))\n                            .ToList().ForEach(\n                                x =>\n                                {\n                                    x.Files.ForEach(z =>\n                                    {\n                                        files.Add(new ModrinthFile\n                                        {\n                                            Size = z.Size,\n                                            FileName = z.Filename,\n                                            Title = x.Name,\n                                            Downloads = x.Downloads,\n                                            UpdateTime = x.date_published,\n                                            Url = z.Url\n                                        });\n                                    });\n                                });\n                        (fileGroup.Expander as ModrinthFileExpander)?.Files.AddRange(files);\n                        x.VersionEntries.Add(fileGroup);\n                    }\n                }\n            });\n        });\n        foreach (var shortVersionEntry in Versions)\n        {\n            var list = shortVersionEntry.VersionEntries.OrderByDescending(v => new Version(v.Version))\n                .ThenByDescending(v => v.Loader).ToList();\n            shortVersionEntry.VersionEntries = new ObservableCollection<VersionEntry>(list);\n        }\n\n        Ring.IsVisible = false;\n    }\n\n    public ModFileResult()\n    {\n        InitializeComponent();\n    }\n\n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return false;\n        field = value;\n        OnPropertyChanged(propertyName);\n        return true;\n    }\n\n    private static readonly Dictionary<ProjectType, ResourceType> _projectToResourceMapping = new()\n    {\n        { ProjectType.Mod, ResourceType.Mod },\n        { ProjectType.Modpack, ResourceType.ModPack },\n        { ProjectType.Resourcepack, ResourceType.ResourcePack },\n        { ProjectType.Shader, ResourceType.ShaderPack },\n        { ProjectType.Datapack, ResourceType.DataPack },\n        { ProjectType.Plugin, ResourceType.Plugin },\n        { ProjectType.Project, ResourceType.Unknown }\n    };\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/ModrinthPages/SearchResult.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.DownloadPages.ModrinthPages.SearchResult\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:curseForgePages=\"clr-namespace:YMCL.Views.Main.Pages.DownloadPages.CurseForgePages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:resourceFetcher=\"clr-namespace:YMCL.Public.Classes.Data.ResourceFetcher\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:CountToUnitConverter x:Key=\"CountToUnitConverter\" />\n    </UserControl.Resources>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Name=\"Container\"\n        Opacity=\"{DynamicResource MainOpacity}\"\n        Padding=\"10\">\n        <Grid>\n            <ScrollViewer>\n                <StackPanel>\n                    <ListBox Name=\"ListBox\">\n                        <ListBox.ItemTemplate>\n                            <DataTemplate DataType=\"resourceFetcher:IResourceEntry\">\n                                <DockPanel Margin=\"0,5,0,5\">\n                                    <Border\n                                        ClipToBounds=\"True\"\n                                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                                        Height=\"42\"\n                                        Margin=\"0,0,10,0\"\n                                        Width=\"42\">\n                                        <asyncImageLoader:AdvancedImage Source=\"{Binding Pic}\" />\n                                    </Border>\n                                    <DockPanel LastChildFill=\"False\" VerticalAlignment=\"Center\">\n                                        <SelectableTextBlock DockPanel.Dock=\"Top\" Text=\"{Binding Name}\" />\n                                        <TextBlock\n                                            DockPanel.Dock=\"Top\"\n                                            FontSize=\"12\"\n                                            Foreground=\"{DynamicResource GrayColor}\"\n                                            Text=\"{Binding Summary}\"\n                                            TextWrapping=\"Wrap\" />\n                                        <TextBlock\n                                            DockPanel.Dock=\"Top\"\n                                            FontSize=\"12\"\n                                            Foreground=\"{DynamicResource GrayColor}\">\n                                            <Run Text=\"{Binding DisplayType, Mode=OneWay}\" />\n                                            <Run Text=\",\" />\n                                            <Run Text=\"{Binding DownloadCount, Mode=OneWay, Converter={StaticResource CountToUnitConverter}}\" />\n                                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                                            <Run Text=\",\" />\n                                            <Run Text=\"{Binding LastUpdateTime, Mode=OneWay}\" />\n                                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Update}\" />\n                                        </TextBlock>\n                                    </DockPanel>\n                                </DockPanel>\n                            </DataTemplate>\n                        </ListBox.ItemTemplate>\n                    </ListBox>\n                    <controls:ProgressRing\n                        Height=\"50\"\n                        IsVisible=\"False\"\n                        Margin=\"0,50,0,50\"\n                        Name=\"Ring\"\n                        Width=\"50\" />\n                    <HyperlinkButton\n                        Classes=\"accent\"\n                        HorizontalAlignment=\"Center\"\n                        IsVisible=\"False\"\n                        Margin=\"0,50,0,50\"\n                        Name=\"LoadMoreBtn\">\n                        <TextBlock FontFamily=\"{DynamicResource Font}\" TextDecorations=\"{x:Null}\">\n                            <Run Text=\"→\" />\n                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LoadMore}\" />\n                            <Run Text=\"←\" />\n                        </TextBlock>\n                    </HyperlinkButton>\n                </StackPanel>\n            </ScrollViewer>\n        </Grid>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/DownloadPages/ModrinthPages/SearchResult.axaml.cs",
    "content": "﻿using System.Linq;\nusing Avalonia.Controls.Notifications;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Data.ResourceFetcher;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Views.Main.Pages.DownloadPages.ModrinthPages;\n\npublic partial class SearchResult : UserControl\n{\n    private readonly string _keyword;\n    private readonly string _mcVersion;\n    private readonly int _type;\n    private int _page = 1;\n\n    public SearchResult()\n    {\n        InitializeComponent();\n    }\n\n    public SearchResult(string keyword, string mcVersion, int type)\n    {\n        InitializeComponent();\n        _keyword = keyword;\n        _mcVersion = mcVersion;\n        _type = type;\n        _page = 1;\n        ListBox.Items.Clear();\n        _ = Search();\n        LoadMoreBtn.Click += (_, _) =>\n        {\n            _page++;\n            _ = Search();\n        };\n        Loaded += (_, _) => { _ = Animator.PageLoading.LevelTwoPage(this); };\n        ListBox.SelectionChanged += (_, _) =>\n        {\n            if (ListBox.SelectedItem == null) return;\n            var item = ListBox.SelectedItem as ModrinthResourceEntry;\n            YMCL.App.UiRoot.ViewModel.Download._modrinth.CreateNewPage(new SearchTabViewItemEntry()\n            {\n                CanClose = true, Host = nameof(DownloadPages.Modrinth),\n                Content = new ModFileResult(item!),\n                Title = $\"{item.DisplayType}: {item.Name}\"\n            });\n            ListBox.SelectedItem = null;\n        };\n    }\n\n    private async System.Threading.Tasks.Task Search()\n    {\n        Ring.IsVisible = true;\n        LoadMoreBtn.IsVisible = false;\n        var data = await Public.Module.IO.Network.Modrinth.Search(_keyword, _page, _mcVersion,_type);\n        Ring.IsVisible = false;\n        if (!data.success)\n        {\n            Notice(MainLang.LoadFail, NotificationType.Error);\n            return;\n        }\n\n        if (data.data.Count == 0)\n        {\n            Notice(MainLang.SearchNoResult, NotificationType.Error);\n            return;\n        }\n\n        LoadMoreBtn.IsVisible = true;\n        data.data.ForEach(x => \n            ListBox.Items.Add(x));\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Launch.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.Launch\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:operate=\"clr-namespace:YMCL.Public.Classes.Operate\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:setting=\"clr-namespace:YMCL.Public.Classes.Setting\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:SelectedGameIsNotBedrock x:Key=\"SelectedGameIsNotBedrock\" />\n    </UserControl.Resources>\n    <Grid>\n        <Border Name=\"LaunchConsoleRoot\" Opacity=\"{DynamicResource MainOpacity}\">\n            <Border.Transitions>\n                <Transitions>\n                    <DoubleTransition Duration=\"0:0:0.20\" Property=\"Opacity\" />\n                </Transitions>\n            </Border.Transitions>\n            <DockPanel>\n                <Border\n                    Background=\"{DynamicResource 1x}\"\n                    ClipToBounds=\"True\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    DockPanel.Dock=\"Right\"\n                    HorizontalAlignment=\"Right\"\n                    Margin=\"10\"\n                    Padding=\"10\"\n                    Width=\"270\">\n                    <DockPanel>\n                        <DockPanel\n                            DockPanel.Dock=\"Bottom\"\n                            HorizontalAlignment=\"Stretch\"\n                            VerticalAlignment=\"Bottom\">\n                            <ComboBox\n                                DockPanel.Dock=\"Top\"\n                                FontFamily=\"{DynamicResource Font}\"\n                                HorizontalAlignment=\"Stretch\"\n                                ItemsSource=\"{Binding Accounts}\"\n                                Margin=\"0,0,0,5\"\n                                Name=\"AccountComboBox\"\n                                SelectedItem=\"{Binding SettingEntry.Account}\">\n                                <ComboBox.ItemTemplate>\n                                    <DataTemplate DataType=\"setting:AccountInfo\">\n                                        <TextBlock>\n                                            <Run Text=\"[\" />\n                                            <Run Text=\"{Binding AccountType}\" />\n                                            <Run Text=\"]\" />\n                                            <Run Text=\"{Binding Name}\" />\n                                        </TextBlock>\n                                    </DataTemplate>\n                                </ComboBox.ItemTemplate>\n                            </ComboBox>\n                            <DockPanel\n                                DockPanel.Dock=\"Top\"\n                                HorizontalAlignment=\"Stretch\"\n                                VerticalAlignment=\"Bottom\">\n                                <Button\n                                    DockPanel.Dock=\"Top\"\n                                    HorizontalContentAlignment=\"Stretch\"\n                                    Margin=\"0,0,0,5\"\n                                    Name=\"LaunchBtn\"\n                                    Width=\"{Binding $parent.Bounds.Width}\">\n                                    <StackPanel Margin=\"0,7\">\n                                        <TextBlock\n                                            FontFamily=\"{DynamicResource Font}\"\n                                            FontSize=\"14\"\n                                            HorizontalAlignment=\"Center\"\n                                            Margin=\"0,3,0,0\"\n                                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LaunchGame}\"\n                                            VerticalAlignment=\"Center\" />\n                                        <TextBlock\n                                            FontFamily=\"{DynamicResource Font}\"\n                                            FontSize=\"12\"\n                                            HorizontalAlignment=\"Center\"\n                                            Margin=\"0,2,0,3\"\n                                            Text=\"{Binding UiProperty.SelectedMinecraft.Id}\"\n                                            TextAlignment=\"Center\"\n                                            TextWrapping=\"Wrap\"\n                                            VerticalAlignment=\"Center\"\n                                            x:Name=\"GameCoreText\" />\n                                    </StackPanel>\n                                </Button>\n                                <UniformGrid\n                                    Columns=\"2\"\n                                    DockPanel.Dock=\"Bottom\"\n                                    Height=\"34\"\n                                    Rows=\"1\">\n                                    <Button\n                                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.VersionList}\"\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        HorizontalAlignment=\"Stretch\"\n                                        Margin=\"0,0,3.25,0\"\n                                        Name=\"GameListBtn\"\n                                        VerticalAlignment=\"Stretch\" />\n                                    <Button\n                                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.VersionSetting}\"\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        HorizontalAlignment=\"Stretch\"\n                                        IsEnabled=\"{Binding UiProperty.SelectedMinecraft, Converter={StaticResource SelectedGameIsNotBedrock}}\"\n                                        Margin=\"3.25,0,0,0\"\n                                        Name=\"GameSettingBtn\"\n                                        VerticalAlignment=\"Stretch\" />\n                                </UniformGrid>\n                            </DockPanel>\n                        </DockPanel>\n                        <Border\n                            Background=\"{DynamicResource 2x}\"\n                            ClipToBounds=\"True\"\n                            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                            DockPanel.Dock=\"Top\"\n                            Height=\"90\"\n                            HorizontalAlignment=\"Center\"\n                            Name=\"HeadBorder\"\n                            VerticalAlignment=\"Center\"\n                            Width=\"90\">\n                            <Image Name=\"Head\" Source=\"{Binding SettingEntry.Account.Bitmap}\" />\n                            <Border.ContextFlyout>\n                                <MenuFlyout Placement=\"BottomEdgeAlignedRight\">\n                                    <MenuItem Click=\"SaveSkin\" Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SaveSkinFile}\">\n                                        <MenuItem.Icon>\n                                            <PathIcon Data=\"F1 M 18.75 6.40625 L 18.75 16.25 C 18.75 16.582031 18.684895 16.899414 18.554688 17.202148 C 18.424479 17.504883 18.248697 17.770182 18.027344 17.998047 C 17.805988 18.225912 17.547199 18.408203 17.250977 18.544922 C 16.954752 18.681641 16.637369 18.75 16.298828 18.75 L 3.75 18.75 C 3.417969 18.75 3.100586 18.684896 2.797852 18.554688 C 2.495117 18.424479 2.229818 18.248697 2.001953 18.027344 C 1.774089 17.80599 1.591797 17.547201 1.455078 17.250977 C 1.318359 16.954754 1.25 16.637371 1.25 16.298828 L 1.25 3.75 C 1.25 3.417969 1.315104 3.100586 1.445312 2.797852 C 1.575521 2.495117 1.751302 2.229818 1.972656 2.001953 C 2.19401 1.77409 2.452799 1.591797 2.749023 1.455078 C 3.045247 1.318359 3.36263 1.25 3.701172 1.25 L 13.59375 1.25 C 13.92578 1.25 14.244791 1.313477 14.550781 1.44043 C 14.856771 1.567383 15.126953 1.748047 15.361328 1.982422 L 18.017578 4.638672 C 18.251953 4.873047 18.432617 5.143229 18.55957 5.449219 C 18.686523 5.755209 18.75 6.07422 18.75 6.40625 Z M 17.5 6.40625 C 17.5 6.054688 17.379557 5.758465 17.138672 5.517578 L 14.482422 2.861328 C 14.280598 2.659506 14.036457 2.542318 13.75 2.509766 L 13.75 5.625 C 13.75 5.878906 13.701172 6.119792 13.603516 6.347656 C 13.505859 6.575521 13.370768 6.775717 13.198242 6.948242 C 13.025716 7.120769 12.825521 7.255859 12.597656 7.353516 C 12.369791 7.451172 12.128906 7.5 11.875 7.5 L 6.875 7.5 C 6.621094 7.5 6.380208 7.451172 6.152344 7.353516 C 5.924479 7.255859 5.724284 7.120769 5.551758 6.948242 C 5.379231 6.775717 5.244141 6.575521 5.146484 6.347656 C 5.048828 6.119792 5 5.878906 5 5.625 L 5 2.5 L 3.75 2.5 C 3.574219 2.5 3.411458 2.532553 3.261719 2.597656 C 3.111979 2.662762 2.980143 2.752279 2.866211 2.866211 C 2.752279 2.980145 2.66276 3.11198 2.597656 3.261719 C 2.532552 3.411459 2.5 3.574219 2.5 3.75 L 2.5 16.25 C 2.5 16.425781 2.532552 16.59017 2.597656 16.743164 C 2.66276 16.896158 2.750651 17.027994 2.861328 17.138672 C 2.972005 17.24935 3.103841 17.33724 3.256836 17.402344 C 3.409831 17.467447 3.574219 17.5 3.75 17.5 L 3.75 11.875 C 3.75 11.621094 3.798828 11.380209 3.896484 11.152344 C 3.99414 10.924479 4.129231 10.724284 4.301758 10.551758 C 4.474284 10.379232 4.674479 10.244141 4.902344 10.146484 C 5.130208 10.048828 5.371094 10 5.625 10 L 14.375 10 C 14.628906 10 14.869791 10.048828 15.097656 10.146484 C 15.32552 10.244141 15.525715 10.379232 15.698242 10.551758 C 15.870768 10.724284 16.005859 10.924479 16.103516 11.152344 C 16.201172 11.380209 16.25 11.621094 16.25 11.875 L 16.25 17.5 C 16.425781 17.5 16.588541 17.467447 16.738281 17.402344 C 16.88802 17.33724 17.019855 17.247721 17.133789 17.133789 C 17.247721 17.019857 17.337238 16.888021 17.402344 16.738281 C 17.467447 16.588543 17.5 16.425781 17.5 16.25 Z M 6.25 2.5 L 6.25 5.625 C 6.25 5.794271 6.311849 5.940756 6.435547 6.064453 C 6.559244 6.188151 6.705729 6.25 6.875 6.25 L 11.875 6.25 C 12.04427 6.25 12.190754 6.188151 12.314453 6.064453 C 12.43815 5.940756 12.5 5.794271 12.5 5.625 L 12.5 2.5 Z M 15 17.5 L 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 L 5.625 11.25 C 5.455729 11.25 5.309245 11.31185 5.185547 11.435547 C 5.061849 11.559245 5 11.705729 5 11.875 L 5 17.5 Z \" />\n                                        </MenuItem.Icon>\n                                    </MenuItem>\n                                </MenuFlyout>\n                            </Border.ContextFlyout>\n                        </Border>\n                    </DockPanel>\n                </Border>\n                <DockPanel>\n                    <Border\n                        Background=\"{DynamicResource 1x}\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        DockPanel.Dock=\"Top\"\n                        Margin=\"10,10,0,10\"\n                        Name=\"FastLaunchBorder\"\n                        VerticalAlignment=\"Top\">\n                        <Expander Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.FastLaunch}\">\n                            <ItemsControl ItemsSource=\"{Binding FavouriteMinecraft}\">\n                                <ItemsControl.ItemsPanel>\n                                    <ItemsPanelTemplate>\n                                        <WrapPanel />\n                                    </ItemsPanelTemplate>\n                                </ItemsControl.ItemsPanel>\n                                <ItemsControl.ItemTemplate>\n                                    <DataTemplate DataType=\"operate:FavouriteMinecraftEntry\">\n                                        <Button\n                                            Classes=\"content-button\"\n                                            Command=\"{Binding Launch}\"\n                                            Width=\"70\">\n                                            <Button.ContextFlyout>\n                                                <MenuFlyout Placement=\"BottomEdgeAlignedRight\">\n                                                    <MenuItem Command=\"{Binding Launch}\" Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Launch}\">\n                                                        <MenuItem.Icon>\n                                                            <PathIcon Data=\"F1 M 18.75 10 C 18.75 9.84375 18.719074 9.692383 18.657227 9.545898 C 18.595377 9.399414 18.512369 9.272461 18.408203 9.165039 C 18.304035 9.057617 18.181965 8.971354 18.041992 8.90625 C 17.902018 8.841146 17.75065 8.808594 17.587891 8.808594 L 17.519531 8.808594 L 12.929688 8.964844 L 8.017578 1.591797 C 7.972005 1.526693 7.906901 1.494141 7.822266 1.494141 C 7.763671 1.494141 7.714843 1.516928 7.675781 1.5625 C 7.636718 1.608074 7.617187 1.660156 7.617188 1.71875 L 7.617188 1.757812 L 9.189453 9.091797 L 3.095703 9.296875 L 1.875 6.445312 C 1.822917 6.315104 1.72526 6.25 1.582031 6.25 C 1.490885 6.25 1.414388 6.280925 1.352539 6.342773 C 1.29069 6.404623 1.259766 6.481121 1.259766 6.572266 C 1.259766 6.598309 1.276042 6.673178 1.308594 6.796875 C 1.341146 6.920573 1.381836 7.070312 1.430664 7.246094 C 1.479492 7.421875 1.534831 7.613933 1.59668 7.822266 C 1.658529 8.0306 1.715495 8.225912 1.767578 8.408203 C 1.819661 8.590495 1.866862 8.753256 1.90918 8.896484 C 1.951497 9.039714 1.979167 9.134115 1.992188 9.179688 C 1.901042 9.231771 1.811523 9.282227 1.723633 9.331055 C 1.635742 9.379883 1.557617 9.433594 1.489258 9.492188 C 1.420898 9.550781 1.363932 9.620769 1.318359 9.702148 C 1.272786 9.783529 1.25 9.882812 1.25 10 C 1.25 10.117188 1.272786 10.216472 1.318359 10.297852 C 1.363932 10.379232 1.420898 10.449219 1.489258 10.507812 C 1.557617 10.566406 1.635742 10.620117 1.723633 10.668945 C 1.811523 10.717773 1.901042 10.768229 1.992188 10.820312 C 1.979167 10.865886 1.951497 10.958659 1.90918 11.098633 C 1.866862 11.238607 1.819661 11.402995 1.767578 11.591797 C 1.715495 11.7806 1.658529 11.977539 1.59668 12.182617 C 1.534831 12.387695 1.479492 12.578125 1.430664 12.753906 C 1.381836 12.929688 1.341146 13.081055 1.308594 13.208008 C 1.276042 13.334961 1.259766 13.408203 1.259766 13.427734 C 1.259766 13.518881 1.29069 13.595378 1.352539 13.657227 C 1.414388 13.719076 1.490885 13.75 1.582031 13.75 C 1.72526 13.75 1.822917 13.684896 1.875 13.554688 L 3.095703 10.703125 L 9.189453 10.908203 L 7.617188 18.242188 L 7.617188 18.28125 C 7.617187 18.339844 7.636718 18.391928 7.675781 18.4375 C 7.714843 18.483072 7.763671 18.505859 7.822266 18.505859 C 7.906901 18.505859 7.972005 18.473307 8.017578 18.408203 L 12.929688 11.035156 L 17.519531 11.191406 L 17.587891 11.191406 C 17.75065 11.191406 17.902018 11.158854 18.041992 11.09375 C 18.181965 11.028646 18.304035 10.942383 18.408203 10.834961 C 18.512369 10.727539 18.595377 10.600586 18.657227 10.454102 C 18.719074 10.307617 18.75 10.15625 18.75 10 Z M 17.568359 7.568359 C 17.900391 7.568359 18.214518 7.631836 18.510742 7.758789 C 18.806965 7.885742 19.065754 8.059896 19.287109 8.28125 C 19.508463 8.502604 19.682617 8.761394 19.80957 9.057617 C 19.936523 9.353842 20 9.667969 20 10 C 20 10.338542 19.934895 10.655925 19.804688 10.952148 C 19.674479 11.248373 19.498697 11.507162 19.277344 11.728516 C 19.055988 11.94987 18.797199 12.124023 18.500977 12.250977 C 18.204752 12.37793 17.887369 12.441406 17.548828 12.441406 C 16.891275 12.441406 16.232096 12.425131 15.571289 12.392578 C 14.910481 12.360026 14.248047 12.330729 13.583984 12.304688 L 9.052734 19.101562 C 8.916016 19.303385 8.740234 19.462891 8.525391 19.580078 C 8.310547 19.697266 8.079427 19.755859 7.832031 19.755859 C 7.630208 19.755859 7.439778 19.716797 7.260742 19.638672 C 7.081706 19.560547 6.927083 19.454752 6.796875 19.321289 C 6.666667 19.187826 6.5625 19.031576 6.484375 18.852539 C 6.40625 18.673502 6.367188 18.483072 6.367188 18.28125 C 6.367188 18.177084 6.376953 18.076172 6.396484 17.978516 L 7.65625 12.109375 L 3.90625 11.982422 L 3.017578 14.052734 C 2.89388 14.345703 2.701823 14.576823 2.441406 14.746094 C 2.18099 14.915365 1.894531 15 1.582031 15 C 1.367188 15 1.163737 14.959311 0.97168 14.87793 C 0.779622 14.79655 0.611979 14.684245 0.46875 14.541016 C 0.325521 14.397787 0.213216 14.230144 0.131836 14.038086 C 0.050456 13.846029 0.009766 13.642578 0.009766 13.427734 C 0.009766 13.310547 0.030924 13.15918 0.073242 12.973633 C 0.11556 12.788086 0.166016 12.594401 0.224609 12.392578 C 0.283203 12.190756 0.341797 11.995443 0.400391 11.806641 C 0.458984 11.617839 0.507812 11.461589 0.546875 11.337891 C 0.371094 11.162109 0.236003 10.957031 0.141602 10.722656 C 0.047201 10.488281 0 10.247396 0 10 C 0 9.752604 0.047201 9.511719 0.141602 9.277344 C 0.236003 9.042969 0.371094 8.837891 0.546875 8.662109 C 0.507812 8.538412 0.458984 8.382162 0.400391 8.193359 C 0.341797 8.004558 0.283203 7.810873 0.224609 7.612305 C 0.166016 7.413738 0.11556 7.220053 0.073242 7.03125 C 0.030924 6.842448 0.009766 6.689453 0.009766 6.572266 C 0.009766 6.357422 0.050456 6.153972 0.131836 5.961914 C 0.213216 5.769857 0.325521 5.602215 0.46875 5.458984 C 0.611979 5.315756 0.779622 5.203451 0.97168 5.12207 C 1.163737 5.040691 1.367188 5.000001 1.582031 5 C 1.894531 5.000001 2.18099 5.084637 2.441406 5.253906 C 2.701823 5.423178 2.89388 5.654297 3.017578 5.947266 L 3.90625 8.017578 L 7.65625 7.890625 L 6.396484 2.021484 C 6.376953 1.923828 6.367188 1.822918 6.367188 1.71875 C 6.367188 1.516928 6.40625 1.326498 6.484375 1.147461 C 6.5625 0.968426 6.666667 0.812176 6.796875 0.678711 C 6.927083 0.545248 7.081706 0.439453 7.260742 0.361328 C 7.439778 0.283203 7.630208 0.244141 7.832031 0.244141 C 8.079427 0.244141 8.310547 0.302734 8.525391 0.419922 C 8.740234 0.537109 8.916016 0.696615 9.052734 0.898438 L 13.583984 7.695312 C 14.248047 7.675782 14.912109 7.64974 15.576172 7.617188 C 16.240234 7.584636 16.904297 7.568359 17.568359 7.568359 Z \" />\n                                                        </MenuItem.Icon>\n                                                    </MenuItem>\n                                                    <MenuItem Command=\"{Binding Rename}\" Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Rename}\">\n                                                        <MenuItem.Icon>\n                                                            <PathIcon Data=\"F1 M 10 0.625 C 10 0.45573 10.061849 0.309246 10.185547 0.185547 C 10.309244 0.06185 10.455729 0 10.625 0 L 15.625 0 C 15.79427 0 15.940754 0.06185 16.064453 0.185547 C 16.18815 0.309246 16.25 0.45573 16.25 0.625 C 16.25 0.794271 16.18815 0.940756 16.064453 1.064453 C 15.940754 1.188152 15.79427 1.25 15.625 1.25 L 13.75 1.25 L 13.75 18.75 L 15.625 18.75 C 15.79427 18.75 15.940754 18.81185 16.064453 18.935547 C 16.18815 19.059244 16.25 19.205729 16.25 19.375 C 16.25 19.544271 16.18815 19.690756 16.064453 19.814453 C 15.940754 19.93815 15.79427 20 15.625 20 L 10.625 20 C 10.455729 20 10.309244 19.93815 10.185547 19.814453 C 10.061849 19.690756 10 19.544271 10 19.375 C 10 19.205729 10.061849 19.059244 10.185547 18.935547 C 10.309244 18.81185 10.455729 18.75 10.625 18.75 L 12.5 18.75 L 12.5 1.25 L 10.625 1.25 C 10.455729 1.25 10.309244 1.188152 10.185547 1.064453 C 10.061849 0.940756 10 0.794271 10 0.625 Z M 0 6.25 C 0 5.735678 0.097656 5.250651 0.292969 4.794922 C 0.488281 4.339193 0.756836 3.94043 1.098633 3.598633 C 1.44043 3.256836 1.837565 2.988281 2.290039 2.792969 C 2.742513 2.597656 3.229167 2.5 3.75 2.5 L 11.25 2.5 L 11.25 3.75 L 3.75 3.75 C 3.404948 3.75 3.081055 3.815105 2.77832 3.945312 C 2.475586 4.075521 2.210286 4.254558 1.982422 4.482422 C 1.754557 4.710287 1.575521 4.975587 1.445312 5.27832 C 1.315104 5.581056 1.25 5.904949 1.25 6.25 L 1.25 13.75 C 1.25 14.095053 1.315104 14.418945 1.445312 14.72168 C 1.575521 15.024414 1.754557 15.289714 1.982422 15.517578 C 2.210286 15.745443 2.475586 15.924479 2.77832 16.054688 C 3.081055 16.184896 3.404948 16.25 3.75 16.25 L 11.25 16.25 L 11.25 17.5 L 3.75 17.5 C 3.229167 17.5 2.742513 17.402344 2.290039 17.207031 C 1.837565 17.011719 1.44043 16.743164 1.098633 16.401367 C 0.756836 16.05957 0.488281 15.662436 0.292969 15.209961 C 0.097656 14.757487 0 14.270834 0 13.75 Z M 15 3.75 L 15 2.5 L 16.25 2.5 C 16.764322 2.5 17.249348 2.597656 17.705078 2.792969 C 18.160807 2.988281 18.55957 3.256836 18.901367 3.598633 C 19.243164 3.94043 19.511719 4.339193 19.707031 4.794922 C 19.902344 5.250651 20 5.735678 20 6.25 L 20 13.75 C 20 14.270834 19.902344 14.757487 19.707031 15.209961 C 19.511719 15.662436 19.243164 16.05957 18.901367 16.401367 C 18.55957 16.743164 18.160807 17.011719 17.705078 17.207031 C 17.249348 17.402344 16.764322 17.5 16.25 17.5 L 15 17.5 L 15 16.25 L 16.25 16.25 C 16.595051 16.25 16.918945 16.184896 17.22168 16.054688 C 17.524414 15.924479 17.789713 15.745443 18.017578 15.517578 C 18.245441 15.289714 18.424479 15.024414 18.554688 14.72168 C 18.684895 14.418945 18.75 14.095053 18.75 13.75 L 18.75 6.25 C 18.75 5.904949 18.684895 5.581056 18.554688 5.27832 C 18.424479 4.975587 18.245441 4.710287 18.017578 4.482422 C 17.789713 4.254558 17.524414 4.075521 17.22168 3.945312 C 16.918945 3.815105 16.595051 3.75 16.25 3.75 Z M 7.441406 5.361328 C 7.389323 5.250651 7.312825 5.162761 7.211914 5.097656 C 7.111002 5.032553 6.998697 5.000001 6.875 5 C 6.751302 5.000001 6.638997 5.032553 6.538086 5.097656 C 6.437174 5.162761 6.360677 5.250651 6.308594 5.361328 L 2.871094 12.861328 C 2.799479 13.017578 2.792969 13.177084 2.851562 13.339844 C 2.910156 13.502604 3.017578 13.619792 3.173828 13.691406 C 3.330078 13.763021 3.489583 13.769531 3.652344 13.710938 C 3.815104 13.652344 3.932292 13.544922 4.003906 13.388672 L 4.84375 11.5625 L 8.896484 11.5625 L 8.90625 11.5625 L 9.746094 13.388672 C 9.817708 13.544922 9.934896 13.652344 10.097656 13.710938 C 10.260416 13.769531 10.419922 13.763021 10.576172 13.691406 C 10.732422 13.619792 10.839844 13.502604 10.898438 13.339844 C 10.957031 13.177084 10.950521 13.017578 10.878906 12.861328 Z M 5.410156 10.3125 L 6.875 7.128906 L 8.339844 10.3125 Z \" />\n                                                        </MenuItem.Icon>\n                                                    </MenuItem>\n                                                    <MenuItem Command=\"{Binding SetIcon}\" Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SetIcon}\">\n                                                        <MenuItem.Icon>\n                                                            <PathIcon Data=\"F1 M 15.078125 1.25 C 15.566406 1.25 16.033527 1.349285 16.479492 1.547852 C 16.925455 1.74642 17.31608 2.013348 17.651367 2.348633 C 17.986652 2.68392 18.25358 3.074545 18.452148 3.520508 C 18.650715 3.966473 18.75 4.433594 18.75 4.921875 L 18.75 15.078125 C 18.75 15.566406 18.650715 16.033529 18.452148 16.479492 C 18.25358 16.925455 17.986652 17.31608 17.651367 17.651367 C 17.31608 17.986654 16.925455 18.25358 16.479492 18.452148 C 16.033527 18.650717 15.566406 18.75 15.078125 18.75 L 4.921875 18.75 C 4.433594 18.75 3.966471 18.650717 3.520508 18.452148 C 3.074544 18.25358 2.683919 17.986654 2.348633 17.651367 C 2.013346 17.31608 1.746419 16.925455 1.547852 16.479492 C 1.349284 16.033529 1.25 15.566406 1.25 15.078125 L 1.25 4.921875 C 1.25 4.433594 1.349284 3.966473 1.547852 3.520508 C 1.746419 3.074545 2.013346 2.68392 2.348633 2.348633 C 2.683919 2.013348 3.074544 1.74642 3.520508 1.547852 C 3.966471 1.349285 4.433594 1.25 4.921875 1.25 Z M 2.851562 16.269531 L 8.457031 10.664062 C 8.665364 10.455729 8.901367 10.297852 9.165039 10.19043 C 9.428711 10.083008 9.707031 10.029297 10 10.029297 C 10.292969 10.029297 10.571289 10.083008 10.834961 10.19043 C 11.098633 10.297852 11.334635 10.455729 11.542969 10.664062 L 17.148438 16.269531 C 17.265625 16.08073 17.353516 15.878906 17.412109 15.664062 C 17.470703 15.449219 17.5 15.227865 17.5 15 L 17.5 4.951172 C 17.5 4.625651 17.433268 4.314779 17.299805 4.018555 C 17.16634 3.722332 16.987305 3.461914 16.762695 3.237305 C 16.538086 3.012695 16.277668 2.83366 15.981445 2.700195 C 15.685221 2.566732 15.374349 2.5 15.048828 2.5 L 4.951172 2.5 C 4.625651 2.5 4.314778 2.566732 4.018555 2.700195 C 3.722331 2.83366 3.461914 3.012695 3.237305 3.237305 C 3.012695 3.461914 2.833659 3.722332 2.700195 4.018555 C 2.566732 4.314779 2.5 4.625651 2.5 4.951172 L 2.5 15 C 2.5 15.227865 2.529297 15.449219 2.587891 15.664062 C 2.646484 15.878906 2.734375 16.08073 2.851562 16.269531 Z M 11.25 6.875 C 11.25 6.621095 11.298828 6.380209 11.396484 6.152344 C 11.494141 5.924479 11.629231 5.724284 11.801758 5.551758 C 11.974283 5.379232 12.174479 5.244142 12.402344 5.146484 C 12.630207 5.048829 12.871093 5.000001 13.125 5 C 13.378905 5.000001 13.619791 5.048829 13.847656 5.146484 C 14.075521 5.244142 14.275716 5.379232 14.448242 5.551758 C 14.620768 5.724284 14.755858 5.924479 14.853516 6.152344 C 14.951171 6.380209 14.999999 6.621095 15 6.875 C 14.999999 7.128907 14.951171 7.369793 14.853516 7.597656 C 14.755858 7.825521 14.620768 8.025717 14.448242 8.198242 C 14.275716 8.370769 14.075521 8.505859 13.847656 8.603516 C 13.619791 8.701172 13.378905 8.75 13.125 8.75 C 12.871093 8.75 12.630207 8.701172 12.402344 8.603516 C 12.174479 8.505859 11.974283 8.370769 11.801758 8.198242 C 11.629231 8.025717 11.494141 7.825521 11.396484 7.597656 C 11.298828 7.369793 11.25 7.128907 11.25 6.875 Z M 12.5 6.875 C 12.5 7.044271 12.561849 7.190756 12.685547 7.314453 C 12.809244 7.438151 12.955729 7.5 13.125 7.5 C 13.294271 7.5 13.440755 7.438151 13.564453 7.314453 C 13.68815 7.190756 13.75 7.044271 13.75 6.875 C 13.75 6.705729 13.68815 6.559245 13.564453 6.435547 C 13.440755 6.31185 13.294271 6.25 13.125 6.25 C 12.955729 6.25 12.809244 6.31185 12.685547 6.435547 C 12.561849 6.559245 12.5 6.705729 12.5 6.875 Z M 15 17.5 C 15.462239 17.5 15.885416 17.382812 16.269531 17.148438 L 10.664062 11.542969 C 10.481771 11.360678 10.260416 11.269531 10 11.269531 C 9.739583 11.269531 9.518229 11.360678 9.335938 11.542969 L 3.730469 17.148438 C 3.919271 17.265625 4.121094 17.353516 4.335938 17.412109 C 4.550781 17.470703 4.772135 17.5 5 17.5 Z \" />\n                                                        </MenuItem.Icon>\n                                                    </MenuItem>\n                                                    <MenuItem Command=\"{Binding SetServer}\" Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SetServer}\">\n                                                        <MenuItem.Icon>\n                                                            <PathIcon Data=\"F1 M 17.5 8.75 L 17.5 11.25 L 19.375 11.25 C 19.54427 11.25 19.690754 11.31185 19.814453 11.435547 C 19.93815 11.559245 20 11.705729 20 11.875 C 20 12.044271 19.93815 12.190756 19.814453 12.314453 C 19.690754 12.438151 19.54427 12.5 19.375 12.5 L 17.5 12.5 L 17.5 15 L 19.375 15 C 19.54427 15 19.690754 15.06185 19.814453 15.185547 C 19.93815 15.309245 20 15.455729 20 15.625 C 20 15.794271 19.93815 15.940756 19.814453 16.064453 C 19.690754 16.188152 19.54427 16.25 19.375 16.25 L 17.167969 16.25 C 16.940104 16.634115 16.634113 16.940104 16.25 17.167969 L 16.25 19.375 C 16.25 19.544271 16.18815 19.690756 16.064453 19.814453 C 15.940754 19.93815 15.79427 20 15.625 20 C 15.455729 20 15.309244 19.93815 15.185547 19.814453 C 15.061848 19.690756 14.999999 19.544271 15 19.375 L 15 17.5 L 12.5 17.5 L 12.5 19.375 C 12.5 19.544271 12.43815 19.690756 12.314453 19.814453 C 12.190754 19.93815 12.04427 20 11.875 20 C 11.705729 20 11.559244 19.93815 11.435547 19.814453 C 11.311849 19.690756 11.25 19.544271 11.25 19.375 L 11.25 17.5 L 8.75 17.5 L 8.75 19.375 C 8.75 19.544271 8.68815 19.690756 8.564453 19.814453 C 8.440755 19.93815 8.294271 20 8.125 20 C 7.955729 20 7.809245 19.93815 7.685547 19.814453 C 7.561849 19.690756 7.5 19.544271 7.5 19.375 L 7.5 17.5 L 5 17.5 L 5 19.375 C 5 19.544271 4.938151 19.690756 4.814453 19.814453 C 4.690755 19.93815 4.544271 20 4.375 20 C 4.205729 20 4.059245 19.93815 3.935547 19.814453 C 3.811849 19.690756 3.75 19.544271 3.75 19.375 L 3.75 17.167969 C 3.365885 16.940104 3.059896 16.634115 2.832031 16.25 L 0.625 16.25 C 0.455729 16.25 0.309245 16.188152 0.185547 16.064453 C 0.061849 15.940756 0 15.794271 0 15.625 C 0 15.455729 0.061849 15.309245 0.185547 15.185547 C 0.309245 15.06185 0.455729 15 0.625 15 L 2.5 15 L 2.5 12.5 L 0.625 12.5 C 0.455729 12.5 0.309245 12.438151 0.185547 12.314453 C 0.061849 12.190756 0 12.044271 0 11.875 C 0 11.705729 0.061849 11.559245 0.185547 11.435547 C 0.309245 11.31185 0.455729 11.25 0.625 11.25 L 2.5 11.25 L 2.5 8.75 L 0.625 8.75 C 0.455729 8.75 0.309245 8.688151 0.185547 8.564453 C 0.061849 8.440756 0 8.294271 0 8.125 C 0 7.95573 0.061849 7.809246 0.185547 7.685547 C 0.309245 7.56185 0.455729 7.5 0.625 7.5 L 2.5 7.5 L 2.5 5 L 0.625 5 C 0.455729 5.000001 0.309245 4.938152 0.185547 4.814453 C 0.061849 4.690756 0 4.544271 0 4.375 C 0 4.20573 0.061849 4.059246 0.185547 3.935547 C 0.309245 3.81185 0.455729 3.75 0.625 3.75 L 2.832031 3.75 C 3.059896 3.365887 3.365885 3.059896 3.75 2.832031 L 3.75 0.625 C 3.75 0.45573 3.811849 0.309246 3.935547 0.185547 C 4.059245 0.06185 4.205729 0 4.375 0 C 4.544271 0 4.690755 0.06185 4.814453 0.185547 C 4.938151 0.309246 5 0.45573 5 0.625 L 5 2.5 L 7.5 2.5 L 7.5 0.625 C 7.5 0.45573 7.561849 0.309246 7.685547 0.185547 C 7.809245 0.06185 7.955729 0 8.125 0 C 8.294271 0 8.440755 0.06185 8.564453 0.185547 C 8.68815 0.309246 8.75 0.45573 8.75 0.625 L 8.75 2.5 L 11.25 2.5 L 11.25 0.625 C 11.25 0.45573 11.311849 0.309246 11.435547 0.185547 C 11.559244 0.06185 11.705729 0 11.875 0 C 12.04427 0 12.190754 0.06185 12.314453 0.185547 C 12.43815 0.309246 12.5 0.45573 12.5 0.625 L 12.5 2.5 L 15 2.5 L 15 0.625 C 14.999999 0.45573 15.061848 0.309246 15.185547 0.185547 C 15.309244 0.06185 15.455729 0 15.625 0 C 15.79427 0 15.940754 0.06185 16.064453 0.185547 C 16.18815 0.309246 16.25 0.45573 16.25 0.625 L 16.25 2.832031 C 16.634113 3.059896 16.940104 3.365887 17.167969 3.75 L 19.375 3.75 C 19.54427 3.75 19.690754 3.81185 19.814453 3.935547 C 19.93815 4.059246 20 4.20573 20 4.375 C 20 4.544271 19.93815 4.690756 19.814453 4.814453 C 19.690754 4.938152 19.54427 5.000001 19.375 5 L 17.5 5 L 17.5 7.5 L 19.375 7.5 C 19.54427 7.5 19.690754 7.56185 19.814453 7.685547 C 19.93815 7.809246 20 7.95573 20 8.125 C 20 8.294271 19.93815 8.440756 19.814453 8.564453 C 19.690754 8.688151 19.54427 8.75 19.375 8.75 Z M 15 16.25 C 15.17578 16.25 15.338541 16.217449 15.488281 16.152344 C 15.638021 16.08724 15.769856 15.997722 15.883789 15.883789 C 15.997721 15.769857 16.087238 15.638021 16.152344 15.488281 C 16.217447 15.338542 16.25 15.175781 16.25 15 L 16.25 5 C 16.25 4.830729 16.217447 4.669597 16.152344 4.516602 C 16.087238 4.363607 15.997721 4.230144 15.883789 4.116211 C 15.769856 4.002279 15.636393 3.912762 15.483398 3.847656 C 15.330403 3.782553 15.169271 3.75 15 3.75 L 5 3.75 C 4.824219 3.75 4.661458 3.782553 4.511719 3.847656 C 4.361979 3.912762 4.230143 4.002279 4.116211 4.116211 C 4.002278 4.230144 3.91276 4.361979 3.847656 4.511719 C 3.782552 4.661459 3.75 4.82422 3.75 5 L 3.75 15 C 3.75 15.175781 3.782552 15.34017 3.847656 15.493164 C 3.91276 15.646159 4.000651 15.777995 4.111328 15.888672 C 4.222005 15.99935 4.353841 16.08724 4.506836 16.152344 C 4.659831 16.217449 4.824219 16.25 5 16.25 Z \" />\n                                                        </MenuItem.Icon>\n                                                    </MenuItem>\n                                                    <MenuItem Command=\"{Binding SetWorld}\" Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SetWorld}\">\n                                                        <MenuItem.Icon>\n                                                            <PathIcon Data=\"F1 M 18.75 6.40625 L 18.75 16.25 C 18.75 16.582031 18.684895 16.899414 18.554688 17.202148 C 18.424479 17.504883 18.248697 17.770182 18.027344 17.998047 C 17.805988 18.225912 17.547199 18.408203 17.250977 18.544922 C 16.954752 18.681641 16.637369 18.75 16.298828 18.75 L 3.75 18.75 C 3.417969 18.75 3.100586 18.684896 2.797852 18.554688 C 2.495117 18.424479 2.229818 18.248697 2.001953 18.027344 C 1.774089 17.80599 1.591797 17.547201 1.455078 17.250977 C 1.318359 16.954754 1.25 16.637371 1.25 16.298828 L 1.25 3.75 C 1.25 3.417969 1.315104 3.100586 1.445312 2.797852 C 1.575521 2.495117 1.751302 2.229818 1.972656 2.001953 C 2.19401 1.77409 2.452799 1.591797 2.749023 1.455078 C 3.045247 1.318359 3.36263 1.25 3.701172 1.25 L 13.59375 1.25 C 13.92578 1.25 14.244791 1.313477 14.550781 1.44043 C 14.856771 1.567383 15.126953 1.748047 15.361328 1.982422 L 18.017578 4.638672 C 18.251953 4.873047 18.432617 5.143229 18.55957 5.449219 C 18.686523 5.755209 18.75 6.07422 18.75 6.40625 Z M 17.5 6.40625 C 17.5 6.054688 17.379557 5.758465 17.138672 5.517578 L 14.482422 2.861328 C 14.280598 2.659506 14.036457 2.542318 13.75 2.509766 L 13.75 5.625 C 13.75 5.878906 13.701172 6.119792 13.603516 6.347656 C 13.505859 6.575521 13.370768 6.775717 13.198242 6.948242 C 13.025716 7.120769 12.825521 7.255859 12.597656 7.353516 C 12.369791 7.451172 12.128906 7.5 11.875 7.5 L 6.875 7.5 C 6.621094 7.5 6.380208 7.451172 6.152344 7.353516 C 5.924479 7.255859 5.724284 7.120769 5.551758 6.948242 C 5.379231 6.775717 5.244141 6.575521 5.146484 6.347656 C 5.048828 6.119792 5 5.878906 5 5.625 L 5 2.5 L 3.75 2.5 C 3.574219 2.5 3.411458 2.532553 3.261719 2.597656 C 3.111979 2.662762 2.980143 2.752279 2.866211 2.866211 C 2.752279 2.980145 2.66276 3.11198 2.597656 3.261719 C 2.532552 3.411459 2.5 3.574219 2.5 3.75 L 2.5 16.25 C 2.5 16.425781 2.532552 16.59017 2.597656 16.743164 C 2.66276 16.896158 2.750651 17.027994 2.861328 17.138672 C 2.972005 17.24935 3.103841 17.33724 3.256836 17.402344 C 3.409831 17.467447 3.574219 17.5 3.75 17.5 L 3.75 11.875 C 3.75 11.621094 3.798828 11.380209 3.896484 11.152344 C 3.99414 10.924479 4.129231 10.724284 4.301758 10.551758 C 4.474284 10.379232 4.674479 10.244141 4.902344 10.146484 C 5.130208 10.048828 5.371094 10 5.625 10 L 14.375 10 C 14.628906 10 14.869791 10.048828 15.097656 10.146484 C 15.32552 10.244141 15.525715 10.379232 15.698242 10.551758 C 15.870768 10.724284 16.005859 10.924479 16.103516 11.152344 C 16.201172 11.380209 16.25 11.621094 16.25 11.875 L 16.25 17.5 C 16.425781 17.5 16.588541 17.467447 16.738281 17.402344 C 16.88802 17.33724 17.019855 17.247721 17.133789 17.133789 C 17.247721 17.019857 17.337238 16.888021 17.402344 16.738281 C 17.467447 16.588543 17.5 16.425781 17.5 16.25 Z M 6.25 2.5 L 6.25 5.625 C 6.25 5.794271 6.311849 5.940756 6.435547 6.064453 C 6.559244 6.188151 6.705729 6.25 6.875 6.25 L 11.875 6.25 C 12.04427 6.25 12.190754 6.188151 12.314453 6.064453 C 12.43815 5.940756 12.5 5.794271 12.5 5.625 L 12.5 2.5 Z M 15 17.5 L 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 L 5.625 11.25 C 5.455729 11.25 5.309245 11.31185 5.185547 11.435547 C 5.061849 11.559245 5 11.705729 5 11.875 L 5 17.5 Z \" />\n                                                        </MenuItem.Icon>\n                                                    </MenuItem>\n                                                    <MenuItem Command=\"{Binding Del}\" Header=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Delete}\">\n                                                        <MenuItem.Icon>\n                                                            <PathIcon Data=\"F1 M 19.375 3.125 C 19.375 3.26823 19.34733 3.382162 19.291992 3.466797 C 19.236652 3.551434 19.16341 3.61491 19.072266 3.657227 C 18.981119 3.699545 18.880207 3.727215 18.769531 3.740234 C 18.658854 3.753256 18.544922 3.759766 18.427734 3.759766 C 18.362629 3.759766 18.297525 3.758139 18.232422 3.754883 C 18.167316 3.751629 18.108723 3.75 18.056641 3.75 L 16.435547 17.783203 C 16.396484 18.095703 16.305338 18.387045 16.162109 18.657227 C 16.018879 18.927408 15.836588 19.161783 15.615234 19.360352 C 15.39388 19.55892 15.139974 19.71517 14.853516 19.829102 C 14.567057 19.943033 14.267578 20 13.955078 20 L 6.044922 20 C 5.732422 20 5.432942 19.943033 5.146484 19.829102 C 4.860026 19.71517 4.60612 19.55892 4.384766 19.360352 C 4.163411 19.161783 3.98112 18.927408 3.837891 18.657227 C 3.694661 18.387045 3.603516 18.095703 3.564453 17.783203 L 1.943359 3.75 C 1.878255 3.75 1.813151 3.751629 1.748047 3.754883 C 1.682943 3.758139 1.617839 3.759766 1.552734 3.759766 C 1.442057 3.759766 1.33138 3.753256 1.220703 3.740234 C 1.110026 3.727215 1.010742 3.697918 0.922852 3.652344 C 0.834961 3.606771 0.763346 3.541668 0.708008 3.457031 C 0.652669 3.372396 0.625 3.261719 0.625 3.125 C 0.625 2.95573 0.686849 2.809246 0.810547 2.685547 C 0.934245 2.56185 1.080729 2.5 1.25 2.5 L 6.933594 2.5 C 6.998697 2.141928 7.127278 1.809896 7.319336 1.503906 C 7.511393 1.197918 7.745768 0.932617 8.022461 0.708008 C 8.299153 0.483398 8.606771 0.309246 8.945312 0.185547 C 9.283854 0.06185 9.635416 0 10 0 C 10.364583 0 10.716146 0.06185 11.054688 0.185547 C 11.393229 0.309246 11.700846 0.483398 11.977539 0.708008 C 12.25423 0.932617 12.488605 1.197918 12.680664 1.503906 C 12.872721 1.809896 13.001302 2.141928 13.066406 2.5 L 18.75 2.5 C 18.91927 2.5 19.065754 2.56185 19.189453 2.685547 C 19.31315 2.809246 19.375 2.95573 19.375 3.125 Z M 8.232422 2.5 L 11.767578 2.5 C 11.702474 2.311199 11.611328 2.140301 11.494141 1.987305 C 11.376953 1.834311 11.240234 1.702475 11.083984 1.591797 C 10.927734 1.481121 10.758463 1.396484 10.576172 1.337891 C 10.39388 1.279297 10.201822 1.25 10 1.25 C 9.798177 1.25 9.606119 1.279297 9.423828 1.337891 C 9.241536 1.396484 9.072266 1.481121 8.916016 1.591797 C 8.759766 1.702475 8.623047 1.834311 8.505859 1.987305 C 8.388672 2.140301 8.297525 2.311199 8.232422 2.5 Z M 16.796875 3.75 L 3.203125 3.75 L 4.804688 17.646484 C 4.84375 17.972006 4.978841 18.237305 5.209961 18.442383 C 5.441081 18.647461 5.719401 18.75 6.044922 18.75 L 13.955078 18.75 C 14.111328 18.75 14.261067 18.72233 14.404297 18.666992 C 14.547525 18.611654 14.674479 18.535156 14.785156 18.4375 C 14.895833 18.339844 14.986979 18.222656 15.058594 18.085938 C 15.130208 17.949219 15.175781 17.802734 15.195312 17.646484 Z M 7.5 14.375 L 7.5 8.125 C 7.5 7.95573 7.561849 7.809246 7.685547 7.685547 C 7.809245 7.56185 7.955729 7.5 8.125 7.5 C 8.294271 7.5 8.440755 7.56185 8.564453 7.685547 C 8.68815 7.809246 8.75 7.95573 8.75 8.125 L 8.75 14.375 C 8.75 14.544271 8.68815 14.690756 8.564453 14.814453 C 8.440755 14.938151 8.294271 15 8.125 15 C 7.955729 15 7.809245 14.938151 7.685547 14.814453 C 7.561849 14.690756 7.5 14.544271 7.5 14.375 Z M 11.25 14.375 L 11.25 8.125 C 11.25 7.95573 11.311849 7.809246 11.435547 7.685547 C 11.559244 7.56185 11.705729 7.5 11.875 7.5 C 12.04427 7.5 12.190754 7.56185 12.314453 7.685547 C 12.43815 7.809246 12.5 7.95573 12.5 8.125 L 12.5 14.375 C 12.5 14.544271 12.43815 14.690756 12.314453 14.814453 C 12.190754 14.938151 12.04427 15 11.875 15 C 11.705729 15 11.559244 14.938151 11.435547 14.814453 C 11.311849 14.690756 11.25 14.544271 11.25 14.375 Z \" />\n                                                        </MenuItem.Icon>\n                                                    </MenuItem>\n                                                </MenuFlyout>\n                                            </Button.ContextFlyout>\n                                            <Button.Content>\n                                                <DockPanel>\n                                                    <Border\n                                                        ClipToBounds=\"True\"\n                                                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                                                        DockPanel.Dock=\"Top\"\n                                                        Height=\"44\"\n                                                        Width=\"44\">\n                                                        <Image Source=\"{Binding Bitmap}\" />\n                                                    </Border>\n                                                    <TextBlock\n                                                        DockPanel.Dock=\"Bottom\"\n                                                        Margin=\"0,3,0,0\"\n                                                        Text=\"{Binding DisplayName}\"\n                                                        TextAlignment=\"Center\"\n                                                        TextTrimming=\"CharacterEllipsis\"\n                                                        VerticalAlignment=\"Center\" />\n                                                </DockPanel>\n                                            </Button.Content>\n                                        </Button>\n                                    </DataTemplate>\n                                </ItemsControl.ItemTemplate>\n                            </ItemsControl>\n                        </Expander>\n                    </Border>\n                    <Border\n                        ClipToBounds=\"True\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        HorizontalAlignment=\"Stretch\"\n                        Margin=\"10,0,0,10\"\n                        Name=\"CustomPageRoot\"\n                        VerticalAlignment=\"Stretch\">\n                        <Border.Transitions>\n                            <Transitions>\n                                <DoubleTransition Duration=\"0:0:0.20\" Property=\"Opacity\" />\n                            </Transitions>\n                        </Border.Transitions>\n                    </Border>\n                </DockPanel>\n            </DockPanel>\n        </Border>\n        <ContentControl\n            IsVisible=\"False\"\n            Margin=\"30\"\n            Name=\"GameListFrame\"\n            Opacity=\"{DynamicResource MainOpacity}\">\n            <ContentControl.Transitions>\n                <Transitions>\n                    <ThicknessTransition Duration=\"0:0:0.20\" Property=\"Margin\" />\n                    <DoubleTransition Duration=\"0:0:0.20\" Property=\"Opacity\" />\n                </Transitions>\n            </ContentControl.Transitions>\n        </ContentControl>\n        <ContentControl\n            IsVisible=\"False\"\n            Margin=\"30\"\n            Name=\"GameSettingFrame\"\n            Opacity=\"{DynamicResource MainOpacity}\">\n            <ContentControl.Transitions>\n                <Transitions>\n                    <ThicknessTransition Duration=\"0:0:0.20\" Property=\"Margin\" />\n                    <DoubleTransition Duration=\"0:0:0.20\" Property=\"Opacity\" />\n                </Transitions>\n            </ContentControl.Transitions>\n        </ContentControl>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Launch.axaml.cs",
    "content": "﻿using System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Input;\nusing Avalonia.Interactivity;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Platform.Storage;\nusing MinecraftLaunch.Base.Models.Game;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Value;\n\nnamespace YMCL.Views.Main.Pages;\n\npublic partial class Launch : UserControl\n{\n    public readonly LaunchPages.GameList _gameList = new();\n\n    public Launch()\n    {\n        InitializeComponent();\n        GameListFrame.Content = _gameList;\n        Public.Module.Ui.Special.LaunchUi.LoadGames();\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        GameListBtn.Click += (_, _) => { _ = OpenGameList(); };\n        GameSettingBtn.Click += (_, _) => { _ = OpenGameSetting(); };\n        Data.UiProperty.PropertyChanged += (o, e) =>\n        {\n            if (e.PropertyName != nameof(UiProperty.SelectedMinecraft)) return;\n            if (!_gameList.CanCloseGameList) return;\n            _ = CloseGameList();\n        };\n        LaunchBtn.Click += (_, _) =>\n        {\n            if (Data.UiProperty.SelectedMinecraft != null)\n            {\n                Data.UiProperty.SelectedMinecraft.LaunchAction?.Invoke();\n            }\n        };\n        Loaded += async (_, _) =>\n        {\n            if (!GameSettingFrame.IsVisible && !GameListFrame.IsVisible) return;\n            LaunchConsoleRoot.IsVisible = false;\n            LaunchConsoleRoot.Opacity = 0;\n            await System.Threading.Tasks.Task.Delay(210);\n            LaunchConsoleRoot.IsVisible = true;\n        };\n        Data.FavouriteMinecraft.CollectionChanged += (_, _) =>\n        {\n            FastLaunchBorder.IsVisible = Data.FavouriteMinecraft.Count > 0;\n        };\n        FastLaunchBorder.IsVisible = Data.FavouriteMinecraft.Count > 0;\n    }\n\n    public async System.Threading.Tasks.Task OpenGameList()\n    {\n        GameListFrame.IsVisible = true;\n        LaunchConsoleRoot.Opacity = 0;\n        GameListFrame.Margin = new Thickness(10);\n        GameListFrame.Opacity = (double)Application.Current.Resources[\"MainOpacity\"]!;\n        await System.Threading.Tasks.Task.Delay(210);\n    }\n\n    public async System.Threading.Tasks.Task CloseGameList(bool showControl = true)\n    {\n        GameListFrame.Margin = new Thickness(40);\n        GameListFrame.Opacity = 0;\n        await System.Threading.Tasks.Task.Delay(210);\n        if (showControl)\n        {\n            LaunchConsoleRoot.Opacity = (double)Application.Current.Resources[\"MainOpacity\"]!;\n        }\n        GameListFrame.IsVisible = false;\n    }\n\n    public async System.Threading.Tasks.Task OpenGameSetting(MinecraftEntry? entry = null)\n    {\n        GameSettingFrame.Content = new LaunchPages.GameSetting(entry);\n        GameSettingFrame.IsVisible = true;\n        LaunchConsoleRoot.Opacity = 0;\n        GameSettingFrame.Margin = new Thickness(10);\n        GameSettingFrame.Opacity = (double)Application.Current.Resources[\"MainOpacity\"]!;\n        await System.Threading.Tasks.Task.Delay(210);\n        LaunchConsoleRoot.IsVisible = false;\n    }\n\n    public async System.Threading.Tasks.Task CloseGameSetting()\n    {\n        GameSettingFrame.Margin = new Thickness(40);\n        GameSettingFrame.Opacity = 0;\n        await System.Threading.Tasks.Task.Delay(210);\n        LaunchConsoleRoot.Opacity = (double)Application.Current.Resources[\"MainOpacity\"]!;\n        GameSettingFrame.IsVisible = false;\n        LaunchConsoleRoot.IsVisible = true;\n    }\n\n    private async void SaveSkin(object? sender, RoutedEventArgs e)\n    {\n        var path = (await TopLevel.GetTopLevel(YMCL.App.UiRoot).StorageProvider.SaveFilePickerAsync(\n            new FilePickerSaveOptions\n            {\n                Title = MainLang.ExportLogFile,\n                SuggestedFileName = $\"{Data.SettingEntry.Account.Name}.png\",\n                FileTypeChoices =\n                [\n                    new FilePickerFileType(\"Image File\") { Patterns = [\"*.png\"] }\n                ]\n            }))?.Path.LocalPath;\n        if (string.IsNullOrWhiteSpace(path)) return;\n        await File.WriteAllBytesAsync(path, Converter.Base64ToBytes(Data.SettingEntry.Account.Skin));\n        Notice($\"{MainLang.SaveFinish} - {Path.GetFileName(path)}\", NotificationType.Success);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/GameList.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.GameList\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:operate=\"clr-namespace:YMCL.Public.Classes.Operate\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Name=\"VersionListRoot\"\n        Padding=\"10\">\n        <DockPanel>\n            <DockPanel DockPanel.Dock=\"Top\" VerticalAlignment=\"Top\">\n                <Button\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ReturnWithIcon}\"\n                    FontFamily=\"{DynamicResource Font}\"\n                    Margin=\"0,0,5,0\"\n                    Name=\"CloseBtn\" />\n                <Button\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OpenFolder}\"\n                    FontFamily=\"{DynamicResource Font}\"\n                    Margin=\"0,0,5,0\"\n                    Name=\"OpenSelectedMinecraftFolderBtn\" />\n                <Button\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Refresh}\"\n                    FontFamily=\"{DynamicResource Font}\"\n                    Margin=\"0,0,5,0\"\n                    Name=\"RefreshListBtn\" />\n                <ComboBox\n                    FontFamily=\"{DynamicResource Font}\"\n                    HorizontalAlignment=\"Stretch\"\n                    ItemsSource=\"{Binding MinecraftFolders}\"\n                    Name=\"MinecraftFolderComboBox\"\n                    SelectedItem=\"{Binding SettingEntry.MinecraftFolder}\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate DataType=\"data:MinecraftFolder\">\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                Margin=\"0,5\"\n                                TextWrapping=\"Wrap\">\n                                <Run>[</Run>\n                                <Run Text=\"{Binding Name}\" />\n                                <Run>]</Run>\n                                <Run Text=\"{Binding Path}\" />\n                            </TextBlock>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n            </DockPanel>\n            <ListBox\n                FontFamily=\"{DynamicResource Font}\"\n                ItemsSource=\"{Binding CurrentFolderGames}\"\n                Margin=\"0,5,0,0\"\n                Name=\"GameListView\"\n                SelectedItem=\"{Binding UiProperty.SelectedMinecraft}\">\n                <ListBox.Styles>\n                    <Style Selector=\"ListBoxItem\">\n                        <Setter Property=\"Margin\" Value=\"5,0\" />\n                    </Style>\n                </ListBox.Styles>\n                <ListBox.ItemTemplate>\n                    <DataTemplate DataType=\"operate:MinecraftDataEntry\">\n                        <DockPanel>\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Border\n                                    ClipToBounds=\"True\"\n                                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                                    DockPanel.Dock=\"Left\"\n                                    Height=\"38\"\n                                    Margin=\"0,5\"\n                                    Width=\"38\">\n                                    <Image Source=\"{Binding Icon}\" />\n                                </Border>\n                                <StackPanel\n                                    DockPanel.Dock=\"Right\"\n                                    Margin=\"10,0,0,0\"\n                                    VerticalAlignment=\"Center\">\n                                    <TextBlock FontFamily=\"{DynamicResource Font}\" Text=\"{Binding Id}\" />\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Margin=\"1,0,0,0\">\n                                        <Run Text=\"{Binding ListTip}\" />\n                                        <Run Text=\"{Binding Loaders}\" />\n                                    </TextBlock>\n                                </StackPanel>\n                            </StackPanel>\n                            <StackPanel\n                                DockPanel.Dock=\"Right\"\n                                HorizontalAlignment=\"Right\"\n                                Orientation=\"Horizontal\"\n                                Spacing=\"15\">\n                                <StackPanel.Styles>\n                                    <Style Selector=\"StackPanel\">\n                                        <Setter Property=\"Opacity\" Value=\"0\" />\n                                        <Setter Property=\"Transitions\">\n                                            <Transitions>\n                                                <DoubleTransition Duration=\"0:0:0.1\" Property=\"Opacity\" />\n                                            </Transitions>\n                                        </Setter>\n                                    </Style>\n                                </StackPanel.Styles>\n                                <StackPanel.IsVisible>\n                                    <Binding Path=\"IsPointerOver\" RelativeSource=\"{RelativeSource AncestorType=ListBoxItem}\" />\n                                </StackPanel.IsVisible>\n                                <StackPanel.Opacity>\n                                    <Binding Path=\"IsPointerOver\" RelativeSource=\"{RelativeSource AncestorType=ListBoxItem}\">\n                                        <Binding.Converter>\n                                            <converter:BoolToDoubleConverter FalseValue=\"0.5\" TrueValue=\"1\" />\n                                        </Binding.Converter>\n                                    </Binding>\n                                </StackPanel.Opacity>\n                                <Button\n                                    Classes=\"custom-button\"\n                                    Command=\"{Binding SettingCommand}\"\n                                    Content=\"F1 M 5.869141 15.986328 C 5.641276 15.986328 5.416667 16.028646 5.195312 16.113281 C 4.973958 16.197916 4.754231 16.289062 4.536133 16.386719 C 4.318034 16.484375 4.098307 16.575521 3.876953 16.660156 C 3.655599 16.744791 3.430989 16.787109 3.203125 16.787109 C 3.007812 16.787109 2.828776 16.74642 2.666016 16.665039 C 2.503255 16.58366 2.356771 16.4681 2.226562 16.318359 C 2.141927 16.220703 2.042643 16.090494 1.928711 15.927734 C 1.814779 15.764975 1.695963 15.585938 1.572266 15.390625 C 1.448568 15.195312 1.32487 14.988607 1.201172 14.770508 C 1.077474 14.552409 0.968424 14.34082 0.874023 14.135742 C 0.779622 13.930664 0.703125 13.736979 0.644531 13.554688 C 0.585938 13.372396 0.556641 13.219401 0.556641 13.095703 C 0.556641 12.861328 0.615234 12.651367 0.732422 12.46582 C 0.849609 12.280273 0.994466 12.111003 1.166992 11.958008 C 1.339518 11.805014 1.52832 11.660156 1.733398 11.523438 C 1.938477 11.386719 2.127279 11.241862 2.299805 11.088867 C 2.472331 10.935873 2.617188 10.773112 2.734375 10.600586 C 2.851562 10.428061 2.910156 10.227865 2.910156 10 C 2.910156 9.778646 2.851562 9.580078 2.734375 9.404297 C 2.617188 9.228516 2.470703 9.064128 2.294922 8.911133 C 2.119141 8.758139 1.930339 8.610026 1.728516 8.466797 C 1.526693 8.323568 1.337891 8.172201 1.162109 8.012695 C 0.986328 7.85319 0.839844 7.682292 0.722656 7.5 C 0.605469 7.317709 0.546875 7.109376 0.546875 6.875 C 0.546875 6.757813 0.577799 6.608074 0.639648 6.425781 C 0.701497 6.24349 0.78125 6.048178 0.878906 5.839844 C 0.976562 5.631512 1.088867 5.418295 1.21582 5.200195 C 1.342773 4.982097 1.469727 4.773764 1.59668 4.575195 C 1.723633 4.376628 1.845703 4.195964 1.962891 4.033203 C 2.080078 3.870443 2.18099 3.74349 2.265625 3.652344 C 2.395833 3.509115 2.543945 3.398438 2.709961 3.320312 C 2.875977 3.242188 3.053385 3.203125 3.242188 3.203125 C 3.470052 3.203125 3.691406 3.245443 3.90625 3.330078 C 4.121094 3.414715 4.335938 3.507488 4.550781 3.608398 C 4.765625 3.709311 4.982096 3.802084 5.200195 3.886719 C 5.418294 3.971355 5.641276 4.013672 5.869141 4.013672 C 6.162109 4.013672 6.414388 3.924154 6.625977 3.745117 C 6.837564 3.566082 6.9694 3.333334 7.021484 3.046875 C 7.080078 2.727865 7.138672 2.408855 7.197266 2.089844 C 7.255859 1.770834 7.314453 1.451824 7.373047 1.132812 C 7.42513 0.859375 7.543945 0.634766 7.729492 0.458984 C 7.915039 0.283203 8.144531 0.169271 8.417969 0.117188 C 8.678385 0.071615 8.942057 0.040691 9.208984 0.024414 C 9.475911 0.008139 9.739583 0 10 0 C 10.273438 0 10.546875 0.009766 10.820312 0.029297 C 11.09375 0.048828 11.363932 0.084637 11.630859 0.136719 C 11.904296 0.188803 12.128905 0.302734 12.304688 0.478516 C 12.480468 0.654297 12.5944 0.878906 12.646484 1.152344 C 12.705078 1.471355 12.760416 1.787109 12.8125 2.099609 C 12.864582 2.412109 12.919921 2.727865 12.978516 3.046875 C 13.030599 3.326824 13.164062 3.557943 13.378906 3.740234 C 13.59375 3.922527 13.8444 4.013672 14.130859 4.013672 C 14.358723 4.013672 14.583332 3.971355 14.804688 3.886719 C 15.026041 3.802084 15.245768 3.710938 15.463867 3.613281 C 15.681965 3.515625 15.901691 3.42448 16.123047 3.339844 C 16.3444 3.255209 16.56901 3.212891 16.796875 3.212891 C 16.998697 3.212891 17.179361 3.253582 17.338867 3.334961 C 17.498371 3.416342 17.643229 3.531902 17.773438 3.681641 C 17.858072 3.779297 17.957355 3.909506 18.071289 4.072266 C 18.185221 4.235026 18.304035 4.414062 18.427734 4.609375 C 18.551432 4.804688 18.675129 5.011394 18.798828 5.229492 C 18.922525 5.447592 19.031574 5.659181 19.125977 5.864258 C 19.220377 6.069337 19.296875 6.263021 19.355469 6.445312 C 19.414062 6.627604 19.443359 6.7806 19.443359 6.904297 C 19.443359 7.145183 19.384766 7.356771 19.267578 7.539062 C 19.150391 7.721355 19.005533 7.888998 18.833008 8.041992 C 18.66048 8.194987 18.47168 8.339844 18.266602 8.476562 C 18.061523 8.613281 17.872721 8.758139 17.700195 8.911133 C 17.527668 9.064128 17.382812 9.226889 17.265625 9.399414 C 17.148438 9.57194 17.089844 9.772136 17.089844 10 C 17.089844 10.221354 17.148438 10.419922 17.265625 10.595703 C 17.382812 10.771484 17.529297 10.935873 17.705078 11.088867 C 17.880859 11.241862 18.06966 11.389975 18.271484 11.533203 C 18.473307 11.676433 18.662109 11.8278 18.837891 11.987305 C 19.013672 12.146811 19.160156 12.317709 19.277344 12.5 C 19.394531 12.682292 19.453125 12.890625 19.453125 13.125 C 19.453125 13.255209 19.422199 13.409831 19.360352 13.588867 C 19.298502 13.767904 19.21875 13.961589 19.121094 14.169922 C 19.023438 14.378256 18.911133 14.589844 18.78418 14.804688 C 18.657227 15.019531 18.530273 15.224609 18.40332 15.419922 C 18.276367 15.615234 18.152668 15.794271 18.032227 15.957031 C 17.911783 16.119791 17.809244 16.25 17.724609 16.347656 C 17.5944 16.490885 17.449543 16.601562 17.290039 16.679688 C 17.130533 16.757812 16.956379 16.796875 16.767578 16.796875 C 16.552734 16.796875 16.333008 16.754557 16.108398 16.669922 C 15.883789 16.585287 15.660807 16.492514 15.439453 16.391602 C 15.218099 16.290689 14.996744 16.197916 14.775391 16.113281 C 14.554035 16.028646 14.339191 15.986328 14.130859 15.986328 C 13.8444 15.986328 13.623047 16.044922 13.466797 16.162109 C 13.310547 16.279297 13.190104 16.430664 13.105469 16.616211 C 13.020832 16.801758 12.960611 17.006836 12.924805 17.231445 C 12.888997 17.456055 12.851562 17.672525 12.8125 17.880859 C 12.779947 18.050131 12.749023 18.214518 12.719727 18.374023 C 12.69043 18.533529 12.659505 18.697916 12.626953 18.867188 C 12.574869 19.147135 12.457682 19.373373 12.275391 19.545898 C 12.093099 19.718424 11.861979 19.830729 11.582031 19.882812 C 11.321614 19.928385 11.05957 19.959311 10.795898 19.975586 C 10.532227 19.991861 10.266927 20 10 20 C 9.726562 20 9.453125 19.990234 9.179688 19.970703 C 8.90625 19.951172 8.636067 19.915365 8.369141 19.863281 C 8.095703 19.811197 7.871094 19.695639 7.695312 19.516602 C 7.519531 19.337564 7.405599 19.111328 7.353516 18.837891 C 7.294921 18.525391 7.239583 18.211264 7.1875 17.895508 C 7.135417 17.579752 7.080078 17.265625 7.021484 16.953125 C 6.9694 16.673178 6.835937 16.442057 6.621094 16.259766 C 6.40625 16.077475 6.155599 15.986328 5.869141 15.986328 Z M 11.396484 18.652344 C 11.422525 18.509115 11.451822 18.331705 11.484375 18.120117 C 11.516927 17.908529 11.552734 17.692057 11.591797 17.470703 C 11.630859 17.24935 11.673177 17.03776 11.71875 16.835938 C 11.764322 16.634115 11.809896 16.471354 11.855469 16.347656 C 12.03776 15.859375 12.330729 15.46875 12.734375 15.175781 C 13.138021 14.882812 13.603516 14.736328 14.130859 14.736328 C 14.306641 14.736328 14.510091 14.767253 14.741211 14.829102 C 14.97233 14.890951 15.20996 14.964193 15.454102 15.048828 C 15.698241 15.133464 15.934244 15.221354 16.162109 15.3125 C 16.389973 15.403646 16.591797 15.481771 16.767578 15.546875 C 17.073566 15.182292 17.34375 14.79655 17.578125 14.389648 C 17.8125 13.982748 18.017578 13.561198 18.193359 13.125 L 18.193359 13.115234 L 16.699219 11.845703 C 16.425781 11.617839 16.214191 11.342773 16.064453 11.020508 C 15.914713 10.698242 15.839844 10.358073 15.839844 10 C 15.839844 9.641928 15.916341 9.300131 16.069336 8.974609 C 16.22233 8.649089 16.435547 8.372396 16.708984 8.144531 L 18.183594 6.914062 L 18.183594 6.904297 C 18.183594 6.897787 18.170572 6.860352 18.144531 6.791992 C 18.118488 6.723633 18.102213 6.686198 18.095703 6.679688 C 17.939453 6.276042 17.752277 5.8903 17.53418 5.522461 C 17.31608 5.154623 17.070312 4.801434 16.796875 4.462891 L 16.787109 4.462891 L 14.951172 5.126953 C 14.690754 5.2181 14.423827 5.263673 14.150391 5.263672 C 13.707682 5.263673 13.300781 5.156251 12.929688 4.941406 C 12.617188 4.765626 12.358398 4.531251 12.15332 4.238281 C 11.948242 3.945312 11.81315 3.623047 11.748047 3.271484 L 11.416016 1.367188 C 10.947266 1.289062 10.47526 1.25 10 1.25 C 9.765625 1.25 9.53125 1.258139 9.296875 1.274414 C 9.0625 1.290691 8.83138 1.315105 8.603516 1.347656 C 8.544922 1.673178 8.489583 1.995443 8.4375 2.314453 C 8.385416 2.633465 8.323567 2.952475 8.251953 3.271484 C 8.193359 3.557943 8.092447 3.823242 7.949219 4.067383 C 7.805989 4.311523 7.630208 4.521484 7.421875 4.697266 C 7.213542 4.873047 6.979167 5.011394 6.71875 5.112305 C 6.458333 5.213217 6.178385 5.263673 5.878906 5.263672 C 5.585938 5.263673 5.309245 5.214845 5.048828 5.117188 L 5.039062 5.117188 L 3.242188 4.453125 L 3.232422 4.453125 C 2.932943 4.824219 2.66276 5.209961 2.421875 5.610352 C 2.18099 6.010742 1.975911 6.432292 1.806641 6.875 L 1.806641 6.884766 L 3.300781 8.154297 C 3.574219 8.382162 3.785807 8.657227 3.935547 8.979492 C 4.085286 9.301758 4.160156 9.641928 4.160156 10 C 4.160156 10.358073 4.083659 10.69987 3.930664 11.025391 C 3.777669 11.350912 3.564453 11.627604 3.291016 11.855469 L 1.816406 13.085938 L 1.816406 13.095703 C 1.816406 13.102214 1.829427 13.139648 1.855469 13.208008 C 1.88151 13.276367 1.897786 13.313803 1.904297 13.320312 C 2.060547 13.723959 2.247721 14.109701 2.46582 14.477539 C 2.683919 14.845378 2.929688 15.198568 3.203125 15.537109 L 3.212891 15.537109 L 5.048828 14.873047 C 5.309245 14.781901 5.576172 14.736328 5.849609 14.736328 C 6.292317 14.736328 6.699219 14.84375 7.070312 15.058594 C 7.382812 15.234375 7.641602 15.46875 7.84668 15.761719 C 8.051758 16.054688 8.186849 16.376953 8.251953 16.728516 L 8.583984 18.632812 C 9.052734 18.710938 9.524739 18.75 10 18.75 C 10.234375 18.75 10.46875 18.741861 10.703125 18.725586 C 10.9375 18.709311 11.168619 18.684896 11.396484 18.652344 Z M 6.25 10 C 6.25 9.479167 6.347656 8.990886 6.542969 8.535156 C 6.738281 8.079428 7.005208 7.682292 7.34375 7.34375 C 7.682291 7.005209 8.079427 6.738281 8.535156 6.542969 C 8.990885 6.347656 9.479166 6.25 10 6.25 C 10.520833 6.25 11.009114 6.347656 11.464844 6.542969 C 11.920572 6.738281 12.317708 7.005209 12.65625 7.34375 C 12.994791 7.682292 13.261719 8.079428 13.457031 8.535156 C 13.652344 8.990886 13.75 9.479167 13.75 10 C 13.75 10.520834 13.652344 11.009115 13.457031 11.464844 C 13.261719 11.920573 12.994791 12.317709 12.65625 12.65625 C 12.317708 12.994792 11.920572 13.261719 11.464844 13.457031 C 11.009114 13.652344 10.520833 13.75 10 13.75 C 9.479166 13.75 8.990885 13.652344 8.535156 13.457031 C 8.079427 13.261719 7.682291 12.994792 7.34375 12.65625 C 7.005208 12.317709 6.738281 11.920573 6.542969 11.464844 C 6.347656 11.009115 6.25 10.520834 6.25 10 Z M 12.5 10 C 12.5 9.654948 12.434896 9.331055 12.304688 9.02832 C 12.174479 8.725586 11.995442 8.460287 11.767578 8.232422 C 11.539713 8.004558 11.274414 7.825521 10.97168 7.695312 C 10.668945 7.565104 10.345052 7.5 10 7.5 C 9.654947 7.5 9.331055 7.565104 9.02832 7.695312 C 8.725586 7.825521 8.460286 8.004558 8.232422 8.232422 C 8.004557 8.460287 7.825521 8.725586 7.695312 9.02832 C 7.565104 9.331055 7.5 9.654948 7.5 10 C 7.5 10.345053 7.565104 10.668945 7.695312 10.97168 C 7.825521 11.274414 8.004557 11.539714 8.232422 11.767578 C 8.460286 11.995443 8.725586 12.174479 9.02832 12.304688 C 9.331055 12.434896 9.654947 12.5 10 12.5 C 10.345052 12.5 10.668945 12.434896 10.97168 12.304688 C 11.274414 12.174479 11.539713 11.995443 11.767578 11.767578 C 11.995442 11.539714 12.174479 11.274414 12.304688 10.97168 C 12.434896 10.668945 12.5 10.345053 12.5 10 Z \"\n                                    HorizontalAlignment=\"Right\"\n                                    IsVisible=\"{Binding IsSettingVisible}\"\n                                    VerticalAlignment=\"Center\" />\n                                <Button\n                                    Classes=\"custom-button\"\n                                    Command=\"{Binding FavouriteCommand}\"\n                                    CommandParameter=\"{Binding MinecraftEntry}\"\n                                    Content=\"{Binding FavouriteIcon}\"\n                                    HorizontalAlignment=\"Right\"\n                                    VerticalAlignment=\"Center\" />\n                                <Button\n                                    Classes=\"custom-button\"\n                                    Command=\"{Binding LaunchCommand}\"\n                                    CommandParameter=\"{Binding MinecraftEntry}\"\n                                    Content=\"F1 M 4.384766 18.808594 C 4.124349 18.808594 3.880208 18.759766 3.652344 18.662109 C 3.424479 18.564453 3.224284 18.43099 3.051758 18.261719 C 2.879232 18.092447 2.744141 17.893881 2.646484 17.666016 C 2.548828 17.43815 2.5 17.19401 2.5 16.933594 L 2.5 3.066406 C 2.5 2.80599 2.548828 2.56185 2.646484 2.333984 C 2.744141 2.106121 2.877604 1.907553 3.046875 1.738281 C 3.216146 1.569012 3.414713 1.435547 3.642578 1.337891 C 3.870442 1.240234 4.114583 1.191406 4.375 1.191406 C 4.53125 1.191406 4.6875 1.210938 4.84375 1.25 C 5 1.289062 5.146484 1.347656 5.283203 1.425781 L 17.724609 8.359375 C 18.024088 8.528646 18.258463 8.759766 18.427734 9.052734 C 18.597004 9.345703 18.681641 9.661459 18.681641 10 C 18.681641 10.345053 18.598633 10.662436 18.432617 10.952148 C 18.266602 11.241862 18.030598 11.471354 17.724609 11.640625 L 5.292969 18.574219 C 5.15625 18.652344 5.009766 18.710938 4.853516 18.75 C 4.697266 18.789062 4.541016 18.808594 4.384766 18.808594 Z M 17.431641 10 C 17.431641 9.889323 17.402344 9.783529 17.34375 9.682617 C 17.285156 9.581706 17.207031 9.505209 17.109375 9.453125 L 4.677734 2.519531 C 4.586588 2.467449 4.485677 2.441406 4.375 2.441406 C 4.205729 2.441406 4.059245 2.503256 3.935547 2.626953 C 3.811849 2.750652 3.75 2.897137 3.75 3.066406 L 3.75 16.933594 C 3.75 17.102865 3.811849 17.24935 3.935547 17.373047 C 4.059245 17.496744 4.205729 17.558594 4.375 17.558594 C 4.485677 17.558594 4.586588 17.532553 4.677734 17.480469 L 17.109375 10.546875 C 17.207031 10.494792 17.285156 10.418295 17.34375 10.317383 C 17.402344 10.216472 17.431641 10.110678 17.431641 10 Z \"\n                                    Height=\"13\"\n                                    HorizontalAlignment=\"Right\"\n                                    Margin=\"0,-2,0,0\"\n                                    VerticalAlignment=\"Center\"\n                                    Width=\"13\" />\n                            </StackPanel>\n                        </DockPanel>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </DockPanel>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/GameList.axaml.cs",
    "content": "﻿using System.IO;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Platform.Storage;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Module.IO.Disk;\nusing YMCL.Public.Module.Ui.Special;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages;\n\npublic partial class GameList : UserControl\n{\n    public bool CanCloseGameList;\n\n    public GameList()\n    {\n        InitializeComponent();\n        DataContext = Data.Instance;\n        CloseBtn.Click += (_, _) => { _ = YMCL.App.UiRoot.ViewModel.Launch.CloseGameList(); };\n        RefreshListBtn.Click += (_, _) => { LaunchUi.LoadGames(); };\n        GameListView.PointerEntered += (_, _) => CanCloseGameList = true;\n        GameListView.PointerExited += (_, _) => CanCloseGameList = false;\n        OpenSelectedMinecraftFolderBtn.Click+= (_, _) =>\n        {\n            var path = Data.SettingEntry.MinecraftFolder.Path;\n            YMCL.Public.Module.IO.Disk.Setter.TryCreateFolder(path);\n            _ = Opener.OpenFolder(path);\n        };\n        Loaded += (_, _) => { LaunchUi.LoadGames(); };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/GameSetting.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.GameSetting\"\n    x:DataType=\"model:GameSettingModel\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:model=\"clr-namespace:YMCL.ViewModels\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            DockPanel.Dock=\"Top\"\n            Height=\"40\"\n            VerticalAlignment=\"Top\">\n            <ui:NavigationView\n                AlwaysShowHeader=\"False\"\n                Background=\"{DynamicResource 1x}\"\n                IsBackButtonVisible=\"False\"\n                IsBackEnabled=\"False\"\n                IsPaneToggleButtonVisible=\"False\"\n                IsSettingsVisible=\"False\"\n                PaneDisplayMode=\"Top\"\n                SelectionFollowsFocus=\"False\"\n                x:Name=\"Nav\">\n                <ui:NavigationView.MenuItems>\n                    <ui:NavigationViewItem Margin=\"0,0,0,7\" Tag=\"return\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 20 9.375 C 20 9.544271 19.93815 9.690756 19.814453 9.814453 C 19.690754 9.938151 19.54427 10 19.375 10 L 2.138672 10 L 6.689453 14.560547 C 6.813151 14.684245 6.875 14.830729 6.875 15 C 6.875 15.169271 6.813151 15.315756 6.689453 15.439453 C 6.565755 15.563151 6.419271 15.625 6.25 15.625 C 6.080729 15.625 5.934245 15.563151 5.810547 15.439453 L 0.214844 9.84375 C 0.143229 9.772136 0.089518 9.700521 0.053711 9.628906 C 0.017904 9.557292 0 9.472656 0 9.375 C 0 9.277344 0.017904 9.192709 0.053711 9.121094 C 0.089518 9.049479 0.143229 8.977865 0.214844 8.90625 L 5.810547 3.310547 C 5.934245 3.18685 6.080729 3.125 6.25 3.125 C 6.419271 3.125 6.565755 3.18685 6.689453 3.310547 C 6.813151 3.434246 6.875 3.58073 6.875 3.75 C 6.875 3.919271 6.813151 4.065756 6.689453 4.189453 L 2.138672 8.75 L 19.375 8.75 C 19.54427 8.75 19.690754 8.81185 19.814453 8.935547 C 19.93815 9.059245 20 9.205729 20 9.375 Z \"\n                                Height=\"16\"\n                                Margin=\"0,0,3,0\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Return}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Tag=\"overView\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"M32,832L992,832C1000.6699829101562,832 1008.1699829101562,835.1669921875 1014.5,841.5 1020.8300170898438,847.8330078125 1024,855.3330078125 1024,864 1024,872.6669921875 1020.8300170898438,880.1669921875 1014.5,886.5 1008.1699829101562,892.8330078125 1000.6699829101562,896 992,896L32,896C23.33329963684082,896 15.83329963684082,892.8330078125 9.5,886.5 3.166670083999634,880.1669921875 0,872.6669921875 0,864 0,855.3330078125 3.166670083999634,847.8330078125 9.5,841.5 15.83329963684082,835.1669921875 23.33329963684082,832 32,832z M896,384C851.6669921875,384 810.0830078125,392.3330078125 771.25,409 732.4169921875,425.6669921875 698.5,448.5 669.5,477.5 640.5,506.5 617.6669921875,540.4169921875 601,579.25 584.3330078125,618.0830078125 576,659.6669921875 576,704L832,704C841,704 849.3330078125,702.3330078125 857,699 864.6669921875,695.6669921875 871.4169921875,691.0830078125 877.25,685.25 883.0830078125,679.4169921875 887.6669921875,672.6669921875 891,665 894.3330078125,657.3330078125 896,649 896,640L896,384z M192,256C183,256 174.66700744628906,257.6669921875 167,261 159.33299255371094,264.3330078125 152.58299255371094,268.9169921875 146.75,274.75 140.91700744628906,280.5830078125 136.33299255371094,287.3330078125 133,295 129.66700744628906,302.6669921875 128,311 128,320L128,640C128,649 129.66700744628906,657.4169921875 133,665.25 136.33299255371094,673.0830078125 140.83299255371094,679.8330078125 146.5,685.5 152.16700744628906,691.1669921875 158.91700744628906,695.6669921875 166.75,699 174.58299255371094,702.3330078125 183,704 192,704L512,704C512,651 522.0830078125,601.25 542.25,554.75 562.4169921875,508.25 589.9169921875,467.5830078125 624.75,432.75 659.5830078125,397.9169921875 700.25,370.4169921875 746.75,350.25 793.25,330.0830078125 843,320 896,320 896,311.3330078125 894.3330078125,303.0830078125 891,295.25 887.6669921875,287.4169921875 883.0830078125,280.5830078125 877.25,274.75 871.4169921875,268.9169921875 864.5830078125,264.3330078125 856.75,261 848.9169921875,257.6669921875 840.6669921875,256 832,256L192,256z M189.5,192L834.5,192C851.1669921875,192 867.0830078125,195.41700744628906 882.25,202.25 897.4169921875,209.08299255371094 910.75,218.25 922.25,229.75 933.75,241.25 942.9169921875,254.58299255371094 949.75,269.75 956.5830078125,284.9169921875 960,300.8330078125 960,317.5L960,642.5C960,659.1669921875 956.5830078125,675.0830078125 949.75,690.25 942.9169921875,705.4169921875 933.75,718.75 922.25,730.25 910.75,741.75 897.4169921875,750.9169921875 882.25,757.75 867.0830078125,764.5830078125 851.1669921875,768 834.5,768L189.5,768C172.83299255371094,768 156.91700744628906,764.5830078125 141.75,757.75 126.58300018310547,750.9169921875 113.25,741.75 101.75,730.25 90.25,718.75 81.08329772949219,705.4169921875 74.25,690.25 67.41670227050781,675.0830078125 64,659.1669921875 64,642.5L64,317.5C64,300.8330078125 67.41670227050781,284.9169921875 74.25,269.75 81.08329772949219,254.58299255371094 90.25,241.25 101.75,229.75 113.25,218.25 126.58300018310547,209.08299255371094 141.75,202.25 156.91700744628906,195.41700744628906 172.83299255371094,192 189.5,192z\"\n                                Height=\"16\"\n                                Margin=\"0,0,3,0\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Overview}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavAccount\"\n                        Tag=\"setting\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 5.869141 15.986328 C 5.641276 15.986328 5.416667 16.028646 5.195312 16.113281 C 4.973958 16.197916 4.754231 16.289062 4.536133 16.386719 C 4.318034 16.484375 4.098307 16.575521 3.876953 16.660156 C 3.655599 16.744791 3.430989 16.787109 3.203125 16.787109 C 3.007812 16.787109 2.828776 16.74642 2.666016 16.665039 C 2.503255 16.58366 2.356771 16.4681 2.226562 16.318359 C 2.141927 16.220703 2.042643 16.090494 1.928711 15.927734 C 1.814779 15.764975 1.695963 15.585938 1.572266 15.390625 C 1.448568 15.195312 1.32487 14.988607 1.201172 14.770508 C 1.077474 14.552409 0.968424 14.34082 0.874023 14.135742 C 0.779622 13.930664 0.703125 13.736979 0.644531 13.554688 C 0.585938 13.372396 0.556641 13.219401 0.556641 13.095703 C 0.556641 12.861328 0.615234 12.651367 0.732422 12.46582 C 0.849609 12.280273 0.994466 12.111003 1.166992 11.958008 C 1.339518 11.805014 1.52832 11.660156 1.733398 11.523438 C 1.938477 11.386719 2.127279 11.241862 2.299805 11.088867 C 2.472331 10.935873 2.617188 10.773112 2.734375 10.600586 C 2.851562 10.428061 2.910156 10.227865 2.910156 10 C 2.910156 9.778646 2.851562 9.580078 2.734375 9.404297 C 2.617188 9.228516 2.470703 9.064128 2.294922 8.911133 C 2.119141 8.758139 1.930339 8.610026 1.728516 8.466797 C 1.526693 8.323568 1.337891 8.172201 1.162109 8.012695 C 0.986328 7.85319 0.839844 7.682292 0.722656 7.5 C 0.605469 7.317709 0.546875 7.109376 0.546875 6.875 C 0.546875 6.757813 0.577799 6.608074 0.639648 6.425781 C 0.701497 6.24349 0.78125 6.048178 0.878906 5.839844 C 0.976562 5.631512 1.088867 5.418295 1.21582 5.200195 C 1.342773 4.982097 1.469727 4.773764 1.59668 4.575195 C 1.723633 4.376628 1.845703 4.195964 1.962891 4.033203 C 2.080078 3.870443 2.18099 3.74349 2.265625 3.652344 C 2.395833 3.509115 2.543945 3.398438 2.709961 3.320312 C 2.875977 3.242188 3.053385 3.203125 3.242188 3.203125 C 3.470052 3.203125 3.691406 3.245443 3.90625 3.330078 C 4.121094 3.414715 4.335938 3.507488 4.550781 3.608398 C 4.765625 3.709311 4.982096 3.802084 5.200195 3.886719 C 5.418294 3.971355 5.641276 4.013672 5.869141 4.013672 C 6.162109 4.013672 6.414388 3.924154 6.625977 3.745117 C 6.837564 3.566082 6.9694 3.333334 7.021484 3.046875 C 7.080078 2.727865 7.138672 2.408855 7.197266 2.089844 C 7.255859 1.770834 7.314453 1.451824 7.373047 1.132812 C 7.42513 0.859375 7.543945 0.634766 7.729492 0.458984 C 7.915039 0.283203 8.144531 0.169271 8.417969 0.117188 C 8.678385 0.071615 8.942057 0.040691 9.208984 0.024414 C 9.475911 0.008139 9.739583 0 10 0 C 10.273438 0 10.546875 0.009766 10.820312 0.029297 C 11.09375 0.048828 11.363932 0.084637 11.630859 0.136719 C 11.904296 0.188803 12.128905 0.302734 12.304688 0.478516 C 12.480468 0.654297 12.5944 0.878906 12.646484 1.152344 C 12.705078 1.471355 12.760416 1.787109 12.8125 2.099609 C 12.864582 2.412109 12.919921 2.727865 12.978516 3.046875 C 13.030599 3.326824 13.164062 3.557943 13.378906 3.740234 C 13.59375 3.922527 13.8444 4.013672 14.130859 4.013672 C 14.358723 4.013672 14.583332 3.971355 14.804688 3.886719 C 15.026041 3.802084 15.245768 3.710938 15.463867 3.613281 C 15.681965 3.515625 15.901691 3.42448 16.123047 3.339844 C 16.3444 3.255209 16.56901 3.212891 16.796875 3.212891 C 16.998697 3.212891 17.179361 3.253582 17.338867 3.334961 C 17.498371 3.416342 17.643229 3.531902 17.773438 3.681641 C 17.858072 3.779297 17.957355 3.909506 18.071289 4.072266 C 18.185221 4.235026 18.304035 4.414062 18.427734 4.609375 C 18.551432 4.804688 18.675129 5.011394 18.798828 5.229492 C 18.922525 5.447592 19.031574 5.659181 19.125977 5.864258 C 19.220377 6.069337 19.296875 6.263021 19.355469 6.445312 C 19.414062 6.627604 19.443359 6.7806 19.443359 6.904297 C 19.443359 7.145183 19.384766 7.356771 19.267578 7.539062 C 19.150391 7.721355 19.005533 7.888998 18.833008 8.041992 C 18.66048 8.194987 18.47168 8.339844 18.266602 8.476562 C 18.061523 8.613281 17.872721 8.758139 17.700195 8.911133 C 17.527668 9.064128 17.382812 9.226889 17.265625 9.399414 C 17.148438 9.57194 17.089844 9.772136 17.089844 10 C 17.089844 10.221354 17.148438 10.419922 17.265625 10.595703 C 17.382812 10.771484 17.529297 10.935873 17.705078 11.088867 C 17.880859 11.241862 18.06966 11.389975 18.271484 11.533203 C 18.473307 11.676433 18.662109 11.8278 18.837891 11.987305 C 19.013672 12.146811 19.160156 12.317709 19.277344 12.5 C 19.394531 12.682292 19.453125 12.890625 19.453125 13.125 C 19.453125 13.255209 19.422199 13.409831 19.360352 13.588867 C 19.298502 13.767904 19.21875 13.961589 19.121094 14.169922 C 19.023438 14.378256 18.911133 14.589844 18.78418 14.804688 C 18.657227 15.019531 18.530273 15.224609 18.40332 15.419922 C 18.276367 15.615234 18.152668 15.794271 18.032227 15.957031 C 17.911783 16.119791 17.809244 16.25 17.724609 16.347656 C 17.5944 16.490885 17.449543 16.601562 17.290039 16.679688 C 17.130533 16.757812 16.956379 16.796875 16.767578 16.796875 C 16.552734 16.796875 16.333008 16.754557 16.108398 16.669922 C 15.883789 16.585287 15.660807 16.492514 15.439453 16.391602 C 15.218099 16.290689 14.996744 16.197916 14.775391 16.113281 C 14.554035 16.028646 14.339191 15.986328 14.130859 15.986328 C 13.8444 15.986328 13.623047 16.044922 13.466797 16.162109 C 13.310547 16.279297 13.190104 16.430664 13.105469 16.616211 C 13.020832 16.801758 12.960611 17.006836 12.924805 17.231445 C 12.888997 17.456055 12.851562 17.672525 12.8125 17.880859 C 12.779947 18.050131 12.749023 18.214518 12.719727 18.374023 C 12.69043 18.533529 12.659505 18.697916 12.626953 18.867188 C 12.574869 19.147135 12.457682 19.373373 12.275391 19.545898 C 12.093099 19.718424 11.861979 19.830729 11.582031 19.882812 C 11.321614 19.928385 11.05957 19.959311 10.795898 19.975586 C 10.532227 19.991861 10.266927 20 10 20 C 9.726562 20 9.453125 19.990234 9.179688 19.970703 C 8.90625 19.951172 8.636067 19.915365 8.369141 19.863281 C 8.095703 19.811197 7.871094 19.695639 7.695312 19.516602 C 7.519531 19.337564 7.405599 19.111328 7.353516 18.837891 C 7.294921 18.525391 7.239583 18.211264 7.1875 17.895508 C 7.135417 17.579752 7.080078 17.265625 7.021484 16.953125 C 6.9694 16.673178 6.835937 16.442057 6.621094 16.259766 C 6.40625 16.077475 6.155599 15.986328 5.869141 15.986328 Z M 11.396484 18.652344 C 11.422525 18.509115 11.451822 18.331705 11.484375 18.120117 C 11.516927 17.908529 11.552734 17.692057 11.591797 17.470703 C 11.630859 17.24935 11.673177 17.03776 11.71875 16.835938 C 11.764322 16.634115 11.809896 16.471354 11.855469 16.347656 C 12.03776 15.859375 12.330729 15.46875 12.734375 15.175781 C 13.138021 14.882812 13.603516 14.736328 14.130859 14.736328 C 14.306641 14.736328 14.510091 14.767253 14.741211 14.829102 C 14.97233 14.890951 15.20996 14.964193 15.454102 15.048828 C 15.698241 15.133464 15.934244 15.221354 16.162109 15.3125 C 16.389973 15.403646 16.591797 15.481771 16.767578 15.546875 C 17.073566 15.182292 17.34375 14.79655 17.578125 14.389648 C 17.8125 13.982748 18.017578 13.561198 18.193359 13.125 L 18.193359 13.115234 L 16.699219 11.845703 C 16.425781 11.617839 16.214191 11.342773 16.064453 11.020508 C 15.914713 10.698242 15.839844 10.358073 15.839844 10 C 15.839844 9.641928 15.916341 9.300131 16.069336 8.974609 C 16.22233 8.649089 16.435547 8.372396 16.708984 8.144531 L 18.183594 6.914062 L 18.183594 6.904297 C 18.183594 6.897787 18.170572 6.860352 18.144531 6.791992 C 18.118488 6.723633 18.102213 6.686198 18.095703 6.679688 C 17.939453 6.276042 17.752277 5.8903 17.53418 5.522461 C 17.31608 5.154623 17.070312 4.801434 16.796875 4.462891 L 16.787109 4.462891 L 14.951172 5.126953 C 14.690754 5.2181 14.423827 5.263673 14.150391 5.263672 C 13.707682 5.263673 13.300781 5.156251 12.929688 4.941406 C 12.617188 4.765626 12.358398 4.531251 12.15332 4.238281 C 11.948242 3.945312 11.81315 3.623047 11.748047 3.271484 L 11.416016 1.367188 C 10.947266 1.289062 10.47526 1.25 10 1.25 C 9.765625 1.25 9.53125 1.258139 9.296875 1.274414 C 9.0625 1.290691 8.83138 1.315105 8.603516 1.347656 C 8.544922 1.673178 8.489583 1.995443 8.4375 2.314453 C 8.385416 2.633465 8.323567 2.952475 8.251953 3.271484 C 8.193359 3.557943 8.092447 3.823242 7.949219 4.067383 C 7.805989 4.311523 7.630208 4.521484 7.421875 4.697266 C 7.213542 4.873047 6.979167 5.011394 6.71875 5.112305 C 6.458333 5.213217 6.178385 5.263673 5.878906 5.263672 C 5.585938 5.263673 5.309245 5.214845 5.048828 5.117188 L 5.039062 5.117188 L 3.242188 4.453125 L 3.232422 4.453125 C 2.932943 4.824219 2.66276 5.209961 2.421875 5.610352 C 2.18099 6.010742 1.975911 6.432292 1.806641 6.875 L 1.806641 6.884766 L 3.300781 8.154297 C 3.574219 8.382162 3.785807 8.657227 3.935547 8.979492 C 4.085286 9.301758 4.160156 9.641928 4.160156 10 C 4.160156 10.358073 4.083659 10.69987 3.930664 11.025391 C 3.777669 11.350912 3.564453 11.627604 3.291016 11.855469 L 1.816406 13.085938 L 1.816406 13.095703 C 1.816406 13.102214 1.829427 13.139648 1.855469 13.208008 C 1.88151 13.276367 1.897786 13.313803 1.904297 13.320312 C 2.060547 13.723959 2.247721 14.109701 2.46582 14.477539 C 2.683919 14.845378 2.929688 15.198568 3.203125 15.537109 L 3.212891 15.537109 L 5.048828 14.873047 C 5.309245 14.781901 5.576172 14.736328 5.849609 14.736328 C 6.292317 14.736328 6.699219 14.84375 7.070312 15.058594 C 7.382812 15.234375 7.641602 15.46875 7.84668 15.761719 C 8.051758 16.054688 8.186849 16.376953 8.251953 16.728516 L 8.583984 18.632812 C 9.052734 18.710938 9.524739 18.75 10 18.75 C 10.234375 18.75 10.46875 18.741861 10.703125 18.725586 C 10.9375 18.709311 11.168619 18.684896 11.396484 18.652344 Z M 6.25 10 C 6.25 9.479167 6.347656 8.990886 6.542969 8.535156 C 6.738281 8.079428 7.005208 7.682292 7.34375 7.34375 C 7.682291 7.005209 8.079427 6.738281 8.535156 6.542969 C 8.990885 6.347656 9.479166 6.25 10 6.25 C 10.520833 6.25 11.009114 6.347656 11.464844 6.542969 C 11.920572 6.738281 12.317708 7.005209 12.65625 7.34375 C 12.994791 7.682292 13.261719 8.079428 13.457031 8.535156 C 13.652344 8.990886 13.75 9.479167 13.75 10 C 13.75 10.520834 13.652344 11.009115 13.457031 11.464844 C 13.261719 11.920573 12.994791 12.317709 12.65625 12.65625 C 12.317708 12.994792 11.920572 13.261719 11.464844 13.457031 C 11.009114 13.652344 10.520833 13.75 10 13.75 C 9.479166 13.75 8.990885 13.652344 8.535156 13.457031 C 8.079427 13.261719 7.682291 12.994792 7.34375 12.65625 C 7.005208 12.317709 6.738281 11.920573 6.542969 11.464844 C 6.347656 11.009115 6.25 10.520834 6.25 10 Z M 12.5 10 C 12.5 9.654948 12.434896 9.331055 12.304688 9.02832 C 12.174479 8.725586 11.995442 8.460287 11.767578 8.232422 C 11.539713 8.004558 11.274414 7.825521 10.97168 7.695312 C 10.668945 7.565104 10.345052 7.5 10 7.5 C 9.654947 7.5 9.331055 7.565104 9.02832 7.695312 C 8.725586 7.825521 8.460286 8.004558 8.232422 8.232422 C 8.004557 8.460287 7.825521 8.725586 7.695312 9.02832 C 7.565104 9.331055 7.5 9.654948 7.5 10 C 7.5 10.345053 7.565104 10.668945 7.695312 10.97168 C 7.825521 11.274414 8.004557 11.539714 8.232422 11.767578 C 8.460286 11.995443 8.725586 12.174479 9.02832 12.304688 C 9.331055 12.434896 9.654947 12.5 10 12.5 C 10.345052 12.5 10.668945 12.434896 10.97168 12.304688 C 11.274414 12.174479 11.539713 11.995443 11.767578 11.767578 C 11.995442 11.539714 12.174479 11.274414 12.304688 10.97168 C 12.434896 10.668945 12.5 10.345053 12.5 10 Z \"\n                                Height=\"15\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Setting}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem Margin=\"0,0,0,7\" Tag=\"mod\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"M481.5360107421875,160C448.725341796875,160,422.101318359375,186.62399291992188,422.101318359375,219.43466186523438L422.101318359375,274.3039855957031C422.101318359375,291.97711181640625,407.7744445800781,306.3039855957031,390.101318359375,306.3039855957031L243.79733276367188,306.3039855957031C221.1840057373047,306.3039855957031,203.05067443847656,324.5653381347656,203.05067443847656,347.4773254394531L202.8800048828125,454.3573303222656 225.4933319091797,454.3999938964844C294.71527099609375,454.41339111328125,351.9443054199219,508.350830078125,356.0533447265625,577.45068359375L356.26666259765625,585.1306762695312C356.2196044921875,657.3117065429688,297.717041015625,715.8142700195312,225.53599548339844,715.861328125L202.79466247558594,715.861328125 202.6666717529297,822.8693237304688C202.65521240234375,843.7451171875,218.2842254638672,861.3185424804688,239.01866149902344,863.7440185546875L243.79733276367188,864 350.7626647949219,864 350.7626647949219,841.17333984375C350.77740478515625,771.9359130859375,404.7393493652344,714.7007446289062,473.8559875488281,710.6133422851562L481.5360107421875,710.4000244140625C553.7171020507812,710.4471435546875,612.2196044921875,768.9496459960938,612.2666625976562,841.1306762695312L612.2666625976562,864 719.2319946289062,864C740.1077880859375,864.0114135742188,757.6812133789062,848.3824462890625,760.106689453125,827.6480102539062L760.3626708984375,822.8693237304688 760.3626708984375,676.5653076171875C760.3626708984375,658.8922119140625,774.6895751953125,644.5653076171875,792.3626708984375,644.5653076171875L847.2319946289062,644.5653076171875C879.1809692382812,643.3543701171875,904.4567260742188,617.1025390625,904.4567260742188,585.130615234375C904.4567260742188,553.15869140625,879.1809692382812,526.9068603515625,847.2319946289062,525.6959838867188L792.3626708984375,525.6959838867188C774.6986694335938,525.6959838867188,760.3626708984375,511.4026794433594,760.3626708984375,493.6960144042969L760.3626708984375,347.4346618652344C760.3626708984375,324.6506652832031,741.9733276367188,306.3039855957031,719.2319946289062,306.3039855957031L572.9706420898438,306.3039855957031C555.2639770507812,306.3039855957031,540.9706420898438,291.9679870605469,540.9706420898438,274.3039855957031L540.9706420898438,219.43466186523438C540.9706420898438,186.62399291992188,514.3040161132812,160,481.5360107421875,160z M481.5360107421875,96C549.6806640625,96.04710388183594,604.9044189453125,151.2899932861328,604.927978515625,219.43466186523438L604.927978515625,242.26133728027344 719.2319946289062,242.3040008544922C774.6163330078125,242.29653930664062,820.5079956054688,285.2581787109375,824.1493530273438,340.5226745605469L824.3626708984375,347.4346618652344 824.3626708984375,461.6960144042969 847.2319946289062,461.6960144042969C912.5772705078125,461.71734619140625,966.5921630859375,512.6461791992188,970.4533081054688,577.8773193359375L970.6666870117188,585.1306762695312C970.64306640625,653.2919921875,915.393310546875,708.5418090820312,847.2319946289062,708.5653076171875L824.3626708984375,708.5653076171875 824.3626708984375,822.82666015625C824.392578125,878.2273559570312,781.4248657226562,924.1442260742188,726.1439819335938,927.7866821289062L719.2319946289062,928 580.2666625976562,928C562.6026611328125,928,548.2666625976562,913.6640014648438,548.2666625976562,896L548.2666625976562,841.17333984375C546.7015991210938,805.4431762695312,517.279052734375,777.2811889648438,481.5146484375,777.2811889648438C445.7502746582031,777.2811889648438,416.32769775390625,805.4431762695312,414.7626647949219,841.17333984375L414.7626647949219,896.0426635742188C414.7626647949219,913.7157592773438,400.435791015625,928.0426635742188,382.7626647949219,928.0426635742188L243.79733276367188,928.0426635742188C215.90756225585938,928.0426635742188,189.16067504882812,916.9605712890625,169.44363403320312,897.2354736328125C149.72659301757812,877.5104370117188,138.6553497314453,850.7590942382812,138.6666717529297,822.8693237304688L138.8373260498047,683.9039916992188C138.86087036132812,666.24755859375,153.1808624267578,651.9466552734375,170.8373260498047,651.9466552734375L225.57867431640625,651.9466552734375C262.3999938964844,651.9466552734375 292.309326171875,621.9946899414062 292.309326171875,585.17333984375 292.309326171875,548.3519897460938 262.3999938964844,518.4426879882812 225.57867431640625,518.4426879882812L170.8800048828125,518.4426879882812C162.38568115234375,518.4426879882812,154.2398681640625,515.0654296875,148.2374725341797,509.0550231933594C142.23507690429688,503.04461669921875,138.86866760253906,494.8943176269531,138.8800048828125,486.3999938964844L139.0933380126953,347.4773254394531C138.9913330078125,319.6298522949219,149.97344970703125,292.8861083984375,169.61663818359375,273.1468505859375C189.25982666015625,253.40762329101562,215.94969177246094,242.295166015625,243.79733276367188,242.26133728027344L358.05865478515625,242.26133728027344 358.101318359375,219.43466186523438C358.12261962890625,154.08934020996094,409.0514831542969,100.07444763183594,474.28265380859375,96.21332550048828L481.5360107421875,96z\"\n                                Height=\"15\"\n                                Margin=\"0,0,0,1\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Mod}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem Margin=\"0,0,0,7\" Tag=\"saves\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 18.75 6.40625 L 18.75 16.25 C 18.75 16.582031 18.684895 16.899414 18.554688 17.202148 C 18.424479 17.504883 18.248697 17.770182 18.027344 17.998047 C 17.805988 18.225912 17.547199 18.408203 17.250977 18.544922 C 16.954752 18.681641 16.637369 18.75 16.298828 18.75 L 3.75 18.75 C 3.417969 18.75 3.100586 18.684896 2.797852 18.554688 C 2.495117 18.424479 2.229818 18.248697 2.001953 18.027344 C 1.774089 17.80599 1.591797 17.547201 1.455078 17.250977 C 1.318359 16.954754 1.25 16.637371 1.25 16.298828 L 1.25 3.75 C 1.25 3.417969 1.315104 3.100586 1.445312 2.797852 C 1.575521 2.495117 1.751302 2.229818 1.972656 2.001953 C 2.19401 1.77409 2.452799 1.591797 2.749023 1.455078 C 3.045247 1.318359 3.36263 1.25 3.701172 1.25 L 13.59375 1.25 C 13.92578 1.25 14.244791 1.313477 14.550781 1.44043 C 14.856771 1.567383 15.126953 1.748047 15.361328 1.982422 L 18.017578 4.638672 C 18.251953 4.873047 18.432617 5.143229 18.55957 5.449219 C 18.686523 5.755209 18.75 6.07422 18.75 6.40625 Z M 17.5 6.40625 C 17.5 6.054688 17.379557 5.758465 17.138672 5.517578 L 14.482422 2.861328 C 14.280598 2.659506 14.036457 2.542318 13.75 2.509766 L 13.75 5.625 C 13.75 5.878906 13.701172 6.119792 13.603516 6.347656 C 13.505859 6.575521 13.370768 6.775717 13.198242 6.948242 C 13.025716 7.120769 12.825521 7.255859 12.597656 7.353516 C 12.369791 7.451172 12.128906 7.5 11.875 7.5 L 6.875 7.5 C 6.621094 7.5 6.380208 7.451172 6.152344 7.353516 C 5.924479 7.255859 5.724284 7.120769 5.551758 6.948242 C 5.379231 6.775717 5.244141 6.575521 5.146484 6.347656 C 5.048828 6.119792 5 5.878906 5 5.625 L 5 2.5 L 3.75 2.5 C 3.574219 2.5 3.411458 2.532553 3.261719 2.597656 C 3.111979 2.662762 2.980143 2.752279 2.866211 2.866211 C 2.752279 2.980145 2.66276 3.11198 2.597656 3.261719 C 2.532552 3.411459 2.5 3.574219 2.5 3.75 L 2.5 16.25 C 2.5 16.425781 2.532552 16.59017 2.597656 16.743164 C 2.66276 16.896158 2.750651 17.027994 2.861328 17.138672 C 2.972005 17.24935 3.103841 17.33724 3.256836 17.402344 C 3.409831 17.467447 3.574219 17.5 3.75 17.5 L 3.75 11.875 C 3.75 11.621094 3.798828 11.380209 3.896484 11.152344 C 3.99414 10.924479 4.129231 10.724284 4.301758 10.551758 C 4.474284 10.379232 4.674479 10.244141 4.902344 10.146484 C 5.130208 10.048828 5.371094 10 5.625 10 L 14.375 10 C 14.628906 10 14.869791 10.048828 15.097656 10.146484 C 15.32552 10.244141 15.525715 10.379232 15.698242 10.551758 C 15.870768 10.724284 16.005859 10.924479 16.103516 11.152344 C 16.201172 11.380209 16.25 11.621094 16.25 11.875 L 16.25 17.5 C 16.425781 17.5 16.588541 17.467447 16.738281 17.402344 C 16.88802 17.33724 17.019855 17.247721 17.133789 17.133789 C 17.247721 17.019857 17.337238 16.888021 17.402344 16.738281 C 17.467447 16.588543 17.5 16.425781 17.5 16.25 Z M 6.25 2.5 L 6.25 5.625 C 6.25 5.794271 6.311849 5.940756 6.435547 6.064453 C 6.559244 6.188151 6.705729 6.25 6.875 6.25 L 11.875 6.25 C 12.04427 6.25 12.190754 6.188151 12.314453 6.064453 C 12.43815 5.940756 12.5 5.794271 12.5 5.625 L 12.5 2.5 Z M 15 17.5 L 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 L 5.625 11.25 C 5.455729 11.25 5.309245 11.31185 5.185547 11.435547 C 5.061849 11.559245 5 11.705729 5 11.875 L 5 17.5 Z \"\n                                Height=\"15\"\n                                Width=\"14\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Saves}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem Margin=\"0,0,0,7\" Tag=\"screenshots\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 2.5 7.490234 C 2.278646 7.56185 2.063802 7.644857 1.855469 7.739258 C 1.647135 7.833659 1.445312 7.945964 1.25 8.076172 L 1.25 4.921875 C 1.25 4.433594 1.349284 3.966473 1.547852 3.520508 C 1.746419 3.074545 2.013346 2.68392 2.348633 2.348633 C 2.683919 2.013348 3.074544 1.74642 3.520508 1.547852 C 3.966471 1.349285 4.433594 1.25 4.921875 1.25 L 12.578125 1.25 C 13.066406 1.25 13.533528 1.349285 13.979492 1.547852 C 14.425455 1.74642 14.81608 2.013348 15.151367 2.348633 C 15.486653 2.68392 15.75358 3.074545 15.952148 3.520508 C 16.150715 3.966473 16.25 4.433594 16.25 4.921875 L 16.25 12.578125 C 16.25 13.066406 16.150715 13.533529 15.952148 13.979492 C 15.75358 14.425456 15.486653 14.816081 15.151367 15.151367 C 14.81608 15.486654 14.425455 15.753581 13.979492 15.952148 C 13.533528 16.150717 13.066406 16.25 12.578125 16.25 L 10.595703 16.25 L 9.824219 15.478516 L 10.009766 15 L 12.5 15 C 12.962239 15 13.385416 14.886068 13.769531 14.658203 L 9.775391 10.664062 C 9.62565 10.332031 9.448242 10.019531 9.243164 9.726562 C 9.038086 9.433594 8.808594 9.160156 8.554688 8.90625 C 8.587239 8.90625 8.618164 8.904623 8.647461 8.901367 C 8.676758 8.898112 8.707682 8.896484 8.740234 8.896484 C 9.072266 8.896484 9.392903 8.961589 9.702148 9.091797 C 10.011393 9.222006 10.283203 9.404297 10.517578 9.638672 L 14.658203 13.769531 C 14.886066 13.385417 14.999999 12.96224 15 12.5 L 15 4.951172 C 14.999999 4.625651 14.933268 4.314779 14.799805 4.018555 C 14.666341 3.722332 14.487305 3.461914 14.262695 3.237305 C 14.038086 3.012695 13.777669 2.83366 13.481445 2.700195 C 13.185221 2.566732 12.874348 2.5 12.548828 2.5 L 4.951172 2.5 C 4.61263 2.5 4.295247 2.568359 3.999023 2.705078 C 3.702799 2.841797 3.44401 3.02409 3.222656 3.251953 C 3.001302 3.479818 2.825521 3.745117 2.695312 4.047852 C 2.565104 4.350587 2.5 4.66797 2.5 5 Z M 11.875 6.875 C 11.699219 6.875001 11.53483 6.842449 11.381836 6.777344 C 11.228841 6.71224 11.097005 6.62435 10.986328 6.513672 C 10.87565 6.402996 10.78776 6.27116 10.722656 6.118164 C 10.657552 5.96517 10.625 5.800781 10.625 5.625 C 10.625 5.449219 10.657552 5.286459 10.722656 5.136719 C 10.78776 4.98698 10.877278 4.855145 10.991211 4.741211 C 11.105143 4.627279 11.236979 4.537761 11.386719 4.472656 C 11.536458 4.407553 11.699219 4.375 11.875 4.375 C 12.04427 4.375 12.205402 4.407553 12.358398 4.472656 C 12.511393 4.537761 12.644856 4.627279 12.758789 4.741211 C 12.872721 4.855145 12.962239 4.988607 13.027344 5.141602 C 13.092447 5.294597 13.124999 5.455729 13.125 5.625 C 13.124999 5.800781 13.092447 5.963542 13.027344 6.113281 C 12.962239 6.263021 12.872721 6.394857 12.758789 6.508789 C 12.644856 6.622722 12.513021 6.71224 12.363281 6.777344 C 12.213541 6.842449 12.050781 6.875001 11.875 6.875 Z M 17.5 4.707031 C 17.903645 5.058595 18.212891 5.478517 18.427734 5.966797 C 18.642578 6.455079 18.75 6.966146 18.75 7.5 L 18.75 13.125 C 18.75 13.626303 18.684895 14.114584 18.554688 14.589844 C 18.424479 15.065104 18.237305 15.512695 17.993164 15.932617 C 17.749023 16.352539 17.454426 16.738281 17.109375 17.089844 C 16.764322 17.441406 16.373697 17.744141 15.9375 17.998047 C 15.670572 18.147787 15.410156 18.271484 15.15625 18.369141 C 14.902344 18.466797 14.645182 18.543295 14.384766 18.598633 C 14.124349 18.653971 13.857422 18.693033 13.583984 18.71582 C 13.310547 18.738607 13.024088 18.75 12.724609 18.75 C 12.633463 18.470053 12.514648 18.242188 12.368164 18.066406 C 12.22168 17.890625 12.047525 17.701822 11.845703 17.5 L 13.193359 17.5 C 13.785807 17.5 14.344075 17.382812 14.868164 17.148438 C 15.392252 16.914062 15.849609 16.59668 16.240234 16.196289 C 16.630859 15.795898 16.938477 15.332031 17.163086 14.804688 C 17.387695 14.277344 17.5 13.717448 17.5 13.125 Z M 11.25 19.375 C 11.25 19.544271 11.18815 19.690756 11.064453 19.814453 C 10.940755 19.93815 10.794271 20 10.625 20 C 10.455729 20 10.309244 19.93815 10.185547 19.814453 L 6.992188 16.621094 C 6.595052 16.927084 6.170247 17.150064 5.717773 17.290039 C 5.265299 17.430014 4.791667 17.5 4.296875 17.5 C 3.710938 17.5 3.157552 17.381186 2.636719 17.143555 C 2.115885 16.905924 1.660156 16.586914 1.269531 16.186523 C 0.878906 15.786133 0.569661 15.322266 0.341797 14.794922 C 0.113932 14.267578 0 13.710938 0 13.125 C 0 12.526042 0.11556 11.961264 0.34668 11.430664 C 0.577799 10.900065 0.891927 10.436198 1.289062 10.039062 C 1.686198 9.641928 2.150065 9.3278 2.680664 9.09668 C 3.211263 8.865561 3.776042 8.75 4.375 8.75 C 4.960938 8.75 5.517578 8.863933 6.044922 9.091797 C 6.572266 9.319662 7.036133 9.628906 7.436523 10.019531 C 7.836914 10.410156 8.155924 10.865886 8.393555 11.386719 C 8.631185 11.907553 8.75 12.460938 8.75 13.046875 C 8.75 13.541667 8.680013 14.0153 8.540039 14.467773 C 8.400064 14.920248 8.177083 15.345053 7.871094 15.742188 L 11.064453 18.935547 C 11.18815 19.059244 11.25 19.205729 11.25 19.375 Z M 4.443359 16.25 C 4.866536 16.25 5.263672 16.165365 5.634766 15.996094 C 6.005859 15.826823 6.329752 15.598959 6.606445 15.3125 C 6.883138 15.026042 7.101237 14.694011 7.260742 14.316406 C 7.420247 13.938803 7.5 13.541667 7.5 13.125 C 7.5 12.688803 7.418619 12.281901 7.255859 11.904297 C 7.093099 11.526693 6.870117 11.196289 6.586914 10.913086 C 6.303711 10.629883 5.973307 10.406901 5.595703 10.244141 C 5.218099 10.081381 4.811198 10 4.375 10 C 3.938802 10 3.531901 10.081381 3.154297 10.244141 C 2.776693 10.406901 2.446289 10.629883 2.163086 10.913086 C 1.879883 11.196289 1.656901 11.526693 1.494141 11.904297 C 1.33138 12.281901 1.25 12.688803 1.25 13.125 C 1.25 13.574219 1.333008 13.989258 1.499023 14.370117 C 1.665039 14.750977 1.892904 15.081381 2.182617 15.361328 C 2.472331 15.641276 2.810872 15.859375 3.198242 16.015625 C 3.585612 16.171875 4.000651 16.25 4.443359 16.25 Z \"\n                                Height=\"16\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Screenshots}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem Margin=\"0,0,0,7\" Tag=\"resourcePacks\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 18.75 15.078125 C 18.75 15.566406 18.650715 16.033529 18.452148 16.479492 C 18.25358 16.925455 17.986652 17.31608 17.651367 17.651367 C 17.31608 17.986654 16.925455 18.25358 16.479492 18.452148 C 16.033527 18.650717 15.566406 18.75 15.078125 18.75 L 4.921875 18.75 C 4.433594 18.75 3.966471 18.650717 3.520508 18.452148 C 3.074544 18.25358 2.683919 17.986654 2.348633 17.651367 C 2.013346 17.31608 1.746419 16.925455 1.547852 16.479492 C 1.349284 16.033529 1.25 15.566406 1.25 15.078125 L 1.25 10 C 1.25 9.824219 1.282552 9.661459 1.347656 9.511719 C 1.41276 9.361979 1.502279 9.230144 1.616211 9.116211 C 1.730143 9.002279 1.861979 8.912761 2.011719 8.847656 C 2.161458 8.782553 2.324219 8.75 2.5 8.75 L 5 8.75 L 5 6.25 L 2.5 6.25 C 2.324219 6.25 2.159831 6.217448 2.006836 6.152344 C 1.853841 6.08724 1.722005 5.99935 1.611328 5.888672 C 1.500651 5.777995 1.41276 5.646159 1.347656 5.493164 C 1.282552 5.34017 1.25 5.175782 1.25 5 L 1.25 2.5 C 1.25 2.324219 1.282552 2.161459 1.347656 2.011719 C 1.41276 1.86198 1.502279 1.730145 1.616211 1.616211 C 1.730143 1.502279 1.861979 1.412762 2.011719 1.347656 C 2.161458 1.282553 2.324219 1.25 2.5 1.25 L 5 1.25 C 5.169271 1.25 5.330403 1.282553 5.483398 1.347656 C 5.636393 1.412762 5.769856 1.502279 5.883789 1.616211 C 5.997721 1.730145 6.087239 1.863607 6.152344 2.016602 C 6.217448 2.169598 6.25 2.33073 6.25 2.5 L 6.25 5 L 8.75 5 L 8.75 2.5 C 8.75 2.324219 8.782552 2.161459 8.847656 2.011719 C 8.91276 1.86198 9.002278 1.730145 9.116211 1.616211 C 9.230143 1.502279 9.361979 1.412762 9.511719 1.347656 C 9.661458 1.282553 9.824219 1.25 10 1.25 L 15.078125 1.25 C 15.566406 1.25 16.033527 1.349285 16.479492 1.547852 C 16.925455 1.74642 17.31608 2.013348 17.651367 2.348633 C 17.986652 2.68392 18.25358 3.074545 18.452148 3.520508 C 18.650715 3.966473 18.75 4.433594 18.75 4.921875 Z M 17.5 4.951172 C 17.5 4.625651 17.433268 4.314779 17.299805 4.018555 C 17.16634 3.722332 16.987305 3.461914 16.762695 3.237305 C 16.538086 3.012695 16.277668 2.83366 15.981445 2.700195 C 15.685221 2.566732 15.374349 2.5 15.048828 2.5 L 13.75 2.5 L 13.75 5 C 13.75 5.358073 13.626302 5.654297 13.378906 5.888672 C 13.125 6.129558 12.832031 6.25 12.5 6.25 L 10 6.25 L 10 8.75 C 10 9.108073 9.876302 9.404297 9.628906 9.638672 C 9.375 9.879558 9.082031 10 8.75 10 L 6.25 10 L 6.25 12.5 C 6.25 12.858073 6.126302 13.154297 5.878906 13.388672 C 5.625 13.629558 5.332031 13.75 5 13.75 L 2.5 13.75 L 2.5 15 C 2.5 15.332031 2.565104 15.649414 2.695312 15.952148 C 2.825521 16.254883 3.001302 16.520182 3.222656 16.748047 C 3.44401 16.975912 3.702799 17.158203 3.999023 17.294922 C 4.295247 17.431641 4.61263 17.5 4.951172 17.5 L 15.048828 17.5 C 15.374349 17.5 15.685221 17.433268 15.981445 17.299805 C 16.277668 17.166342 16.538086 16.987305 16.762695 16.762695 C 16.987305 16.538086 17.16634 16.27767 17.299805 15.981445 C 17.433268 15.685222 17.5 15.37435 17.5 15.048828 Z M 2.5 2.5 L 2.5 5 L 5 5 L 5 2.5 Z M 12.5 2.5 L 10 2.5 L 10 5 L 12.5 5 Z M 8.75 8.75 L 8.75 6.25 L 6.25 6.25 L 6.25 8.75 Z M 5 10 L 2.5 10 L 2.5 12.5 L 5 12.5 Z \"\n                                Height=\"14\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ResourcePacks}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem Margin=\"0,0,0,7\" Tag=\"shaderPack\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 8.75 1.875 L 8.75 0.625 C 8.75 0.45573 8.811849 0.309246 8.935547 0.185547 C 9.059244 0.06185 9.205729 0 9.375 0 C 9.544271 0 9.690755 0.06185 9.814453 0.185547 C 9.93815 0.309246 10 0.45573 10 0.625 L 10 1.875 C 10 2.044271 9.93815 2.190756 9.814453 2.314453 C 9.690755 2.438152 9.544271 2.5 9.375 2.5 C 9.205729 2.5 9.059244 2.438152 8.935547 2.314453 C 8.811849 2.190756 8.75 2.044271 8.75 1.875 Z M 2.5 3.125 C 2.5 2.95573 2.561849 2.809246 2.685547 2.685547 C 2.809245 2.56185 2.955729 2.5 3.125 2.5 C 3.294271 2.5 3.440755 2.56185 3.564453 2.685547 L 4.814453 3.935547 C 4.938151 4.059246 5 4.20573 5 4.375 C 5 4.544271 4.938151 4.690756 4.814453 4.814453 C 4.690755 4.938152 4.544271 5.000001 4.375 5 C 4.205729 5.000001 4.059245 4.938152 3.935547 4.814453 L 2.685547 3.564453 C 2.561849 3.440756 2.5 3.294271 2.5 3.125 Z M 13.75 4.375 C 13.75 4.20573 13.811849 4.059246 13.935547 3.935547 L 15.185547 2.685547 C 15.309244 2.56185 15.455729 2.5 15.625 2.5 C 15.79427 2.5 15.940754 2.56185 16.064453 2.685547 C 16.18815 2.809246 16.25 2.95573 16.25 3.125 C 16.25 3.294271 16.18815 3.440756 16.064453 3.564453 L 14.814453 4.814453 C 14.690755 4.938152 14.544271 5.000001 14.375 5 C 14.205729 5.000001 14.059244 4.938152 13.935547 4.814453 C 13.811849 4.690756 13.75 4.544271 13.75 4.375 Z M 15 14.375 L 15 16.875 C 14.999999 17.044271 14.93815 17.190756 14.814453 17.314453 C 14.690755 17.43815 14.544271 17.5 14.375 17.5 L 12.5 17.5 L 12.5 19.375 C 12.5 19.544271 12.43815 19.690756 12.314453 19.814453 C 12.190754 19.93815 12.04427 20 11.875 20 C 11.705729 20 11.559244 19.93815 11.435547 19.814453 C 11.311849 19.690756 11.25 19.544271 11.25 19.375 L 11.25 17.5 L 7.5 17.5 L 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 C 6.705729 20 6.559244 19.93815 6.435547 19.814453 C 6.311849 19.690756 6.25 19.544271 6.25 19.375 L 6.25 17.5 L 4.375 17.5 C 4.205729 17.5 4.059245 17.43815 3.935547 17.314453 C 3.811849 17.190756 3.75 17.044271 3.75 16.875 L 3.75 14.375 C 3.75 14.231771 3.777669 14.119467 3.833008 14.038086 C 3.888346 13.956706 3.959961 13.894857 4.047852 13.852539 C 4.135742 13.810222 4.233398 13.782553 4.34082 13.769531 C 4.448242 13.756511 4.557292 13.75 4.667969 13.75 L 5 13.75 L 5 8.046875 C 5 7.454428 5.118815 6.897787 5.356445 6.376953 C 5.594075 5.85612 5.913086 5.400391 6.313477 5.009766 C 6.713867 4.619141 7.179361 4.311523 7.709961 4.086914 C 8.24056 3.862305 8.795572 3.75 9.375 3.75 C 9.973958 3.75 10.538736 3.865561 11.069336 4.09668 C 11.599935 4.327801 12.063802 4.641928 12.460938 5.039062 C 12.858072 5.436198 13.1722 5.900065 13.40332 6.430664 C 13.634439 6.961264 13.75 7.526043 13.75 8.125 L 13.75 13.75 L 14.082031 13.75 C 14.192708 13.75 14.301758 13.756511 14.40918 13.769531 C 14.516602 13.782553 14.614258 13.810222 14.702148 13.852539 C 14.790039 13.894857 14.861653 13.956706 14.916992 14.038086 C 14.97233 14.119467 14.999999 14.231771 15 14.375 Z M 6.25 13.75 L 12.5 13.75 L 12.5 8.056641 C 12.5 7.633464 12.415364 7.236328 12.246094 6.865234 C 12.076822 6.494141 11.848958 6.170248 11.5625 5.893555 C 11.276041 5.616862 10.94401 5.398764 10.566406 5.239258 C 10.188802 5.079754 9.791666 5.000001 9.375 5 C 8.958333 5.000001 8.561197 5.079754 8.183594 5.239258 C 7.805989 5.398764 7.473958 5.616862 7.1875 5.893555 C 6.901042 6.170248 6.673177 6.494141 6.503906 6.865234 C 6.334635 7.236328 6.25 7.633464 6.25 8.056641 Z M 3.125 7.5 C 3.294271 7.5 3.440755 7.56185 3.564453 7.685547 C 3.688151 7.809246 3.75 7.95573 3.75 8.125 C 3.75 8.294271 3.688151 8.440756 3.564453 8.564453 C 3.440755 8.688151 3.294271 8.75 3.125 8.75 L 1.875 8.75 C 1.705729 8.75 1.559245 8.688151 1.435547 8.564453 C 1.311849 8.440756 1.25 8.294271 1.25 8.125 C 1.25 7.95573 1.311849 7.809246 1.435547 7.685547 C 1.559245 7.56185 1.705729 7.5 1.875 7.5 Z M 16.875 7.5 C 17.04427 7.5 17.190754 7.56185 17.314453 7.685547 C 17.43815 7.809246 17.5 7.95573 17.5 8.125 C 17.5 8.294271 17.43815 8.440756 17.314453 8.564453 C 17.190754 8.688151 17.04427 8.75 16.875 8.75 L 15.625 8.75 C 15.455729 8.75 15.309244 8.688151 15.185547 8.564453 C 15.061848 8.440756 14.999999 8.294271 15 8.125 C 14.999999 7.95573 15.061848 7.809246 15.185547 7.685547 C 15.309244 7.56185 15.455729 7.5 15.625 7.5 Z M 5 16.25 L 13.75 16.25 L 13.75 15 L 5 15 Z \"\n                                Height=\"16\"\n                                Margin=\"0,0,0,1\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ShaderPack}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                </ui:NavigationView.MenuItems>\n            </ui:NavigationView>\n        </Border>\n        <ContentControl\n            DockPanel.Dock=\"Bottom\"\n            Margin=\"0,10,0,0\"\n            Name=\"FrameView\" />\n    </DockPanel>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/GameSetting.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch.Base.Models.Game;\nusing MinecraftLaunch.Components.Parser;\nusing YMCL.Public.Module.Ui;\nusing YMCL.ViewModels;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages;\n\npublic partial class GameSetting : UserControl\n{\n    public readonly GameSettingModel Model;\n    private readonly SubPages.Setting _setting;\n    private readonly SubPages.Mod _mod;\n    private readonly SubPages.OverView _overView;\n    private readonly SubPages.ResourcePack _resourcePack;\n    private readonly SubPages.ShaderPack _shaderPack;\n    private readonly SubPages.Save _save;\n    private readonly SubPages.Screenshot _screenshot;\n\n    public GameSetting(MinecraftEntry? entry = null)\n    {\n        InitializeComponent();\n        if (entry != null)\n        {\n            Model = new GameSettingModel(entry);\n        }\n        else\n        {\n            var resolver = new MinecraftParser(Data.SettingEntry.MinecraftFolder.Path);\n            Model = new GameSettingModel(resolver.GetMinecraft(Data.UiProperty.SelectedMinecraft.Id));\n        }\n\n        DataContext = Model;\n        _setting = new SubPages.Setting(Model);\n        _mod = new SubPages.Mod(Model.MinecraftEntry);\n        _overView = new SubPages.OverView(Model);\n        _resourcePack = new SubPages.ResourcePack(Model.MinecraftEntry);\n        _save = new SubPages.Save(Model.MinecraftEntry);\n        _shaderPack = new SubPages.ShaderPack(Model.MinecraftEntry);\n        _screenshot = new SubPages.Screenshot(Model.MinecraftEntry);\n        Nav.SelectionChanged += (o, e) =>\n        {\n            var tag = ((e.SelectedItem as NavigationViewItem).Tag as string)!;\n            if (tag == \"return\")\n            {\n                _ = YMCL.App.UiRoot.ViewModel.Launch.CloseGameSetting();\n                return;\n            }\n\n            UserControl page = tag switch\n            {\n                \"overView\" => _overView,\n                \"setting\" => _setting,\n                \"mod\" => _mod,\n                \"saves\" => _save,\n                \"resourcePacks\" => _resourcePack,\n                \"screenshots\" => _screenshot,\n                \"shaderPack\" => _shaderPack,\n                _ => null\n            };\n            if (page == null) return;\n            FrameView.Content = page;\n            _ = Animator.PageLoading.LevelTwoPage(page);\n        };\n    }\n\n    public GameSetting()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/Mod.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.SubPages.Mod\"\n    x:DataType=\"mod:Mod\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:mod=\"clr-namespace:YMCL.Views.Main.Pages.LaunchPages.SubPages\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n        <Grid>\n            <DockPanel>\n                <DockPanel\n                    DockPanel.Dock=\"Top\"\n                    Margin=\"5\"\n                    VerticalAlignment=\"Top\">\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SelectAll}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Name=\"SelectAllModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeselectAll}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DeselectAllModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.EnableSelect}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"EnableSelectModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DisableSelect}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DisableSelectModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeleteSelect}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DeleteSelectModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Refresh}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"RefreshModBtn\" />\n                    <TextBox\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"ModSearchBox\"\n                        Text=\"{Binding Filter}\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\" />\n                </DockPanel>\n                <ListBox\n                    DockPanel.Dock=\"Bottom\"\n                    ItemsSource=\"{Binding FilteredMods}\"\n                    Margin=\"5\"\n                    Name=\"ModManageList\"\n                    SelectionMode=\"Multiple,Toggle\">\n                    <ListBox.Styles>\n                        <Style Selector=\"ListBoxItem\">\n                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                        </Style>\n                    </ListBox.Styles>\n                    <ListBox.ItemTemplate>\n                        <DataTemplate DataType=\"data:LocalModEntry\">\n                            <Grid>\n                                <StackPanel Margin=\"0,2,0,4\">\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontWeight=\"{DynamicResource FontWeight}\"\n                                        Foreground=\"{DynamicResource TextColor}\"\n                                        Text=\"{Binding DisplayText}\"\n                                        TextDecorations=\"{Binding Decoration}\"\n                                        VerticalAlignment=\"Center\" />\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"12\"\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Text=\"{Binding Description}\" />\n                                </StackPanel>\n                                <StackPanel\n                                    DockPanel.Dock=\"Right\"\n                                    HorizontalAlignment=\"Right\"\n                                    Orientation=\"Horizontal\"\n                                    Spacing=\"15\">\n                                    <StackPanel.Styles>\n                                        <Style Selector=\"StackPanel\">\n                                            <Setter Property=\"Opacity\" Value=\"0\" />\n                                            <Setter Property=\"Transitions\">\n                                                <Transitions>\n                                                    <DoubleTransition Duration=\"0:0:0.1\" Property=\"Opacity\" />\n                                                </Transitions>\n                                            </Setter>\n                                        </Style>\n                                    </StackPanel.Styles>\n                                    <StackPanel.IsVisible>\n                                        <Binding Path=\"IsPointerOver\" RelativeSource=\"{RelativeSource AncestorType=ListBoxItem}\" />\n                                    </StackPanel.IsVisible>\n                                    <StackPanel.Opacity>\n                                        <Binding Path=\"IsPointerOver\" RelativeSource=\"{RelativeSource AncestorType=ListBoxItem}\">\n                                            <Binding.Converter>\n                                                <converter:BoolToDoubleConverter FalseValue=\"0.5\" TrueValue=\"1\" />\n                                            </Binding.Converter>\n                                        </Binding>\n                                    </StackPanel.Opacity>\n                                    <Button\n                                        Classes=\"custom-button\"\n                                        Command=\"{Binding EnableOrDisable}\"\n                                        Content=\"F1 M 2.5 5.625 C 2.5 5.455729 2.561849 5.309245 2.685547 5.185547 C 2.809245 5.06185 2.955729 5.000001 3.125 5 L 15.371094 5 L 11.435547 1.064453 C 11.311849 0.940756 11.25 0.794271 11.25 0.625 C 11.25 0.45573 11.311849 0.309246 11.435547 0.185547 C 11.559244 0.06185 11.705729 0 11.875 0 C 12.04427 0 12.190754 0.06185 12.314453 0.185547 L 17.285156 5.15625 C 17.35677 5.227865 17.41048 5.29948 17.446289 5.371094 C 17.482096 5.442709 17.5 5.527344 17.5 5.625 C 17.5 5.722656 17.482096 5.807292 17.446289 5.878906 C 17.41048 5.950521 17.35677 6.022136 17.285156 6.09375 L 12.314453 11.064453 C 12.190754 11.188151 12.04427 11.25 11.875 11.25 C 11.705729 11.25 11.559244 11.188151 11.435547 11.064453 C 11.311849 10.940756 11.25 10.794271 11.25 10.625 C 11.25 10.455729 11.311849 10.309245 11.435547 10.185547 L 15.371094 6.25 L 3.125 6.25 C 2.955729 6.25 2.809245 6.188151 2.685547 6.064453 C 2.561849 5.940756 2.5 5.794271 2.5 5.625 Z M 17.5 14.375 C 17.5 14.544271 17.43815 14.690756 17.314453 14.814453 C 17.190754 14.938151 17.04427 15 16.875 15 L 4.638672 15 L 8.564453 18.935547 C 8.68815 19.059244 8.75 19.205729 8.75 19.375 C 8.75 19.544271 8.68815 19.690756 8.564453 19.814453 C 8.440755 19.93815 8.294271 20 8.125 20 C 7.955729 20 7.809245 19.93815 7.685547 19.814453 L 2.714844 14.84375 C 2.643229 14.772136 2.589518 14.700521 2.553711 14.628906 C 2.517904 14.557292 2.5 14.472656 2.5 14.375 C 2.5 14.277344 2.517904 14.192709 2.553711 14.121094 C 2.589518 14.049479 2.643229 13.977865 2.714844 13.90625 L 7.685547 8.935547 C 7.809245 8.81185 7.955729 8.75 8.125 8.75 C 8.294271 8.75 8.440755 8.81185 8.564453 8.935547 C 8.68815 9.059245 8.75 9.205729 8.75 9.375 C 8.75 9.544271 8.68815 9.690756 8.564453 9.814453 L 4.638672 13.75 L 16.875 13.75 C 17.04427 13.75 17.190754 13.81185 17.314453 13.935547 C 17.43815 14.059245 17.5 14.205729 17.5 14.375 Z \"\n                                        HorizontalAlignment=\"Right\"\n                                        VerticalAlignment=\"Center\" />\n                                    <Button\n                                        Classes=\"custom-button\"\n                                        Command=\"{Binding Delete}\"\n                                        Content=\"F1 M 19.375 3.125 C 19.375 3.26823 19.34733 3.382162 19.291992 3.466797 C 19.236652 3.551434 19.16341 3.61491 19.072266 3.657227 C 18.981119 3.699545 18.880207 3.727215 18.769531 3.740234 C 18.658854 3.753256 18.544922 3.759766 18.427734 3.759766 C 18.362629 3.759766 18.297525 3.758139 18.232422 3.754883 C 18.167316 3.751629 18.108723 3.75 18.056641 3.75 L 16.435547 17.783203 C 16.396484 18.095703 16.305338 18.387045 16.162109 18.657227 C 16.018879 18.927408 15.836588 19.161783 15.615234 19.360352 C 15.39388 19.55892 15.139974 19.71517 14.853516 19.829102 C 14.567057 19.943033 14.267578 20 13.955078 20 L 6.044922 20 C 5.732422 20 5.432942 19.943033 5.146484 19.829102 C 4.860026 19.71517 4.60612 19.55892 4.384766 19.360352 C 4.163411 19.161783 3.98112 18.927408 3.837891 18.657227 C 3.694661 18.387045 3.603516 18.095703 3.564453 17.783203 L 1.943359 3.75 C 1.878255 3.75 1.813151 3.751629 1.748047 3.754883 C 1.682943 3.758139 1.617839 3.759766 1.552734 3.759766 C 1.442057 3.759766 1.33138 3.753256 1.220703 3.740234 C 1.110026 3.727215 1.010742 3.697918 0.922852 3.652344 C 0.834961 3.606771 0.763346 3.541668 0.708008 3.457031 C 0.652669 3.372396 0.625 3.261719 0.625 3.125 C 0.625 2.95573 0.686849 2.809246 0.810547 2.685547 C 0.934245 2.56185 1.080729 2.5 1.25 2.5 L 6.933594 2.5 C 6.998697 2.141928 7.127278 1.809896 7.319336 1.503906 C 7.511393 1.197918 7.745768 0.932617 8.022461 0.708008 C 8.299153 0.483398 8.606771 0.309246 8.945312 0.185547 C 9.283854 0.06185 9.635416 0 10 0 C 10.364583 0 10.716146 0.06185 11.054688 0.185547 C 11.393229 0.309246 11.700846 0.483398 11.977539 0.708008 C 12.25423 0.932617 12.488605 1.197918 12.680664 1.503906 C 12.872721 1.809896 13.001302 2.141928 13.066406 2.5 L 18.75 2.5 C 18.91927 2.5 19.065754 2.56185 19.189453 2.685547 C 19.31315 2.809246 19.375 2.95573 19.375 3.125 Z M 8.232422 2.5 L 11.767578 2.5 C 11.702474 2.311199 11.611328 2.140301 11.494141 1.987305 C 11.376953 1.834311 11.240234 1.702475 11.083984 1.591797 C 10.927734 1.481121 10.758463 1.396484 10.576172 1.337891 C 10.39388 1.279297 10.201822 1.25 10 1.25 C 9.798177 1.25 9.606119 1.279297 9.423828 1.337891 C 9.241536 1.396484 9.072266 1.481121 8.916016 1.591797 C 8.759766 1.702475 8.623047 1.834311 8.505859 1.987305 C 8.388672 2.140301 8.297525 2.311199 8.232422 2.5 Z M 16.796875 3.75 L 3.203125 3.75 L 4.804688 17.646484 C 4.84375 17.972006 4.978841 18.237305 5.209961 18.442383 C 5.441081 18.647461 5.719401 18.75 6.044922 18.75 L 13.955078 18.75 C 14.111328 18.75 14.261067 18.72233 14.404297 18.666992 C 14.547525 18.611654 14.674479 18.535156 14.785156 18.4375 C 14.895833 18.339844 14.986979 18.222656 15.058594 18.085938 C 15.130208 17.949219 15.175781 17.802734 15.195312 17.646484 Z M 7.5 14.375 L 7.5 8.125 C 7.5 7.95573 7.561849 7.809246 7.685547 7.685547 C 7.809245 7.56185 7.955729 7.5 8.125 7.5 C 8.294271 7.5 8.440755 7.56185 8.564453 7.685547 C 8.68815 7.809246 8.75 7.95573 8.75 8.125 L 8.75 14.375 C 8.75 14.544271 8.68815 14.690756 8.564453 14.814453 C 8.440755 14.938151 8.294271 15 8.125 15 C 7.955729 15 7.809245 14.938151 7.685547 14.814453 C 7.561849 14.690756 7.5 14.544271 7.5 14.375 Z M 11.25 14.375 L 11.25 8.125 C 11.25 7.95573 11.311849 7.809246 11.435547 7.685547 C 11.559244 7.56185 11.705729 7.5 11.875 7.5 C 12.04427 7.5 12.190754 7.56185 12.314453 7.685547 C 12.43815 7.809246 12.5 7.95573 12.5 8.125 L 12.5 14.375 C 12.5 14.544271 12.43815 14.690756 12.314453 14.814453 C 12.190754 14.938151 12.04427 15 11.875 15 C 11.705729 15 11.559244 14.938151 11.435547 14.814453 C 11.311849 14.690756 11.25 14.544271 11.25 14.375 Z \"\n                                        HorizontalAlignment=\"Right\"\n                                        VerticalAlignment=\"Center\" />\n                                </StackPanel>\n                            </Grid>\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </DockPanel>\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Right\"\n                Margin=\"0,40,10,0\"\n                Name=\"SelectedModCount\" />\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Center\"\n                Margin=\"0,100,0,0\"\n                Name=\"NoMatchResultTip\"\n                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoMatchResult}\" />\n            <controls:ProgressRing\n                Height=\"50\"\n                IsVisible=\"{Binding IsLoading}\"\n                Width=\"50\" />\n        </Grid>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/Mod.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Net.Http;\nusing System.Runtime.CompilerServices;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.VisualBasic.FileIO;\nusing MinecraftLaunch.Base.Models.Game;\nusing MinecraftLaunch.Utilities;\nusing Newtonsoft.Json.Linq;\nusing Tomlyn;\nusing Tomlyn.Model;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing SearchOption = System.IO.SearchOption;\nusing String = System.String;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages.SubPages;\n\npublic sealed partial class Mod : UserControl, INotifyPropertyChanged\n{\n    private readonly ObservableCollection<LocalModEntry> _mods = [];\n    public ObservableCollection<LocalModEntry> FilteredMods { get; set; } = [];\n\n    public bool IsLoading\n    {\n        get => _isLoading;\n        set => SetField(ref _isLoading, value);\n    }\n\n    private readonly MinecraftEntry _entry;\n    private string _filter = string.Empty;\n    private bool _isLoading;\n\n    public Mod(MinecraftEntry entry)\n    {\n        _entry = entry;\n        InitializeComponent();\n        LoadMods();\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(Filter))\n            {\n                FilterMods();\n            }\n        };\n        DataContext = this;\n        RefreshModBtn.Click += (_, _) => { LoadMods(); };\n        // Loaded += (_, _) => { LoadMods(); };\n        DeselectAllModBtn.Click += (_, _) => { ModManageList.SelectedIndex = -1; };\n        SelectAllModBtn.Click += (_, _) => { ModManageList.SelectAll(); };\n        DisableSelectModBtn.Click += (_, _) =>\n        {\n            var mods = ModManageList.SelectedItems;\n            foreach (var item in mods)\n            {\n                var mod = item as LocalModEntry;\n                if (mod.FileName.Length <= 0) continue;\n                if (Path.GetExtension(mod.Path) == \".jar\")\n                    File.Move(mod.Path, mod.Path + \".disabled\");\n            }\n\n            LoadMods();\n        };\n        EnableSelectModBtn.Click += (_, _) =>\n        {\n            var mods = ModManageList.SelectedItems;\n            foreach (var item in mods)\n            {\n                var mod = item as LocalModEntry;\n                if (mod.FileName.Length <= 0) continue;\n                if (string.IsNullOrWhiteSpace(Path.GetDirectoryName(mod.Path))) continue;\n                if (Path.GetExtension(mod.Path) == \".disabled\")\n                    File.Move(mod.Path, Path.Combine(Path.GetDirectoryName(mod.Path)!, $\"{mod.FileName}.jar\"));\n            }\n\n            LoadMods();\n        };\n        DeleteSelectModBtn.Click += async (_, _) =>\n        {\n            var mods = ModManageList.SelectedItems;\n            if (mods is null) return;\n            var text = (from object? item in mods select item as LocalModEntry).Aggregate(string.Empty,\n                (current, mod) => current + $\"• {Path.GetFileName(mod.FileName)}\\n\");\n\n            var title = YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows\n                ? MainLang.MoveToRecycleBin\n                : MainLang.DeleteSelect;\n            var dialog = await ShowDialogAsync(title, text, b_cancel: MainLang.Cancel,\n                b_primary: MainLang.Ok);\n            if (dialog != ContentDialogResult.Primary) return;\n\n            foreach (var item in mods)\n            {\n                var mod = item as LocalModEntry;\n                if (YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows)\n                {\n                    FileSystem.DeleteFile(mod.Path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin);\n                }\n                else\n                {\n                    File.Delete(mod.Path);\n                }\n            }\n\n            LoadMods();\n        };\n        ModManageList.SelectionChanged += (_, _) =>\n        {\n            SelectedModCount.Text = $\"{MainLang.SelectedItem} {ModManageList.SelectedItems.Count}\";\n        };\n        SelectedModCount.Text = $\"{MainLang.SelectedItem} 0\";\n    }\n\n    public string Filter\n    {\n        get => _filter;\n        set => SetField(ref _filter, value);\n    }\n\n    private async void LoadMods()\n    {\n        _mods.Clear();\n        IsLoading = true;\n        FilterMods();\n\n        var mods = Directory.GetFiles(\n            Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_entry, GameSpecialFolder.ModsFolder)\n            , \"*.*\", SearchOption.AllDirectories);\n        foreach (var mod in mods)\n        {\n            LocalModEntry? localModEntry = null;\n            if (Path.GetExtension(mod) == \".jar\")\n            {\n                localModEntry = new LocalModEntry\n                {\n                    FileName = Path.GetFileName(mod)[..(Path.GetFileName(mod).Length - 4)],\n                    IsEnable = true, Path = mod, Callback = LoadMods,\n                    DisplayText = Path.GetFileName(mod)[..(Path.GetFileName(mod).Length - 4)]\n                };\n            }\n\n            if (Path.GetExtension(mod) == \".disabled\")\n                localModEntry = new LocalModEntry\n                {\n                    FileName = Path.GetFileName(mod)[..(Path.GetFileName(mod).Length - 13)],\n                    IsEnable = false, Path = mod, Callback = LoadMods,\n                    DisplayText = Path.GetFileName(mod)[..(Path.GetFileName(mod).Length - 13)],\n                };\n\n            if (localModEntry == null) continue;\n\n            var (displayName, description) = await GetModInfo(mod);\n\n            if (!string.IsNullOrWhiteSpace(displayName))\n            {\n                localModEntry.DisplayText = $\"{displayName.Trim()} ({localModEntry.FileName})\";\n                localModEntry.ModInfoName = $\"{displayName.Trim()}\";\n                localModEntry.ShouldTranslateInfoName = true;\n            }\n\n            if (!string.IsNullOrWhiteSpace(description))\n            {\n                localModEntry.Description = description.Trim();\n                localModEntry.ShouldTranslateDescription = true;\n            }\n            else\n                localModEntry.Description = MainLang.NoDescription;\n\n            if (_mods.All(item => item.Path != localModEntry.Path))\n            {\n                _mods.Add(localModEntry);\n            }\n\n            // if (localModEntry.DisplayText.Contains(Filter, StringComparison.OrdinalIgnoreCase))\n            // {\n            //     if (FilteredMods.All(item => item.Path != localModEntry.Path))\n            //     {\n            //         FilteredMods.Add(localModEntry);\n            //     }\n            // }\n\n            Translate(localModEntry);\n        }\n\n        IsLoading = false;\n        FilterMods();\n    }\n\n    private async Task<(string? displayName, string? description)> GetModInfo(string path)\n    {\n        var result = await System.Threading.Tasks.Task.Run(async () =>\n        {\n            try\n            {\n                if (!File.Exists(path)) return (null, null);\n                using var archive = ZipFile.OpenRead(path);\n                if (archive.Entries.Count <= 0) return (null, null);\n                var type1 = archive.GetEntry(\"META-INF/mods.toml\");\n                if (type1 != null)\n                {\n                    try\n                    {\n                        await using var entryStream = type1.Open();\n                        using var memoryStream = new MemoryStream();\n                        await entryStream.CopyToAsync(memoryStream);\n                        memoryStream.Position = 0;\n                        var reader = new StreamReader(memoryStream);\n                        var text = await reader.ReadToEndAsync();\n                        var result = Toml.ToModel(text);\n\n                        if (result.TryGetValue(\"mods\", out var modsObj))\n                        {\n                            if (modsObj is TomlTableArray modsList)\n                                foreach (var modTable in modsList.OfType<TomlTable>())\n                                {\n                                    var displayName = modTable.TryGetValue(\"displayName\", out var nameObj)\n                                        ? !string.IsNullOrWhiteSpace(nameObj.ToString()) ? nameObj.ToString() : null\n                                        : null;\n                                    var description = modTable.TryGetValue(\"description\", out var descObj)\n                                        ? !string.IsNullOrWhiteSpace(descObj.ToString()) ? descObj.ToString() : null\n                                        : null;\n                                    if (!string.IsNullOrWhiteSpace(displayName) ||\n                                        !string.IsNullOrWhiteSpace(description))\n                                    {\n                                        return (displayName, description);\n                                    }\n                                }\n                        }\n                    }\n                    catch (Exception e)\n                    {\n                        Console.WriteLine(e);\n                    }\n                }\n\n                var type2 = archive.GetEntry(\"fabric.mod.json\");\n                if (type2 != null)\n                {\n                    try\n                    {\n                        await using var entryStream = type2.Open();\n                        using var memoryStream = new MemoryStream();\n                        await entryStream.CopyToAsync(memoryStream);\n                        memoryStream.Position = 0;\n                        var reader = new StreamReader(memoryStream);\n                        var text = await reader.ReadToEndAsync();\n                        var json = JObject.Parse(text);\n\n                        var displayName = !string.IsNullOrWhiteSpace(json[\"name\"]?.ToString())\n                            ? json[\"name\"]?.ToString()\n                            : null;\n                        var description = !string.IsNullOrWhiteSpace(json[\"description\"]?.ToString())\n                            ? json[\"description\"]?.ToString()\n                            : null;\n                        if (!string.IsNullOrWhiteSpace(displayName) ||\n                            !string.IsNullOrWhiteSpace(description))\n                        {\n                            return (displayName, description);\n                        }\n                    }\n                    catch (Exception e)\n                    {\n                        Console.WriteLine(e);\n                    }\n                }\n\n                var type3 = archive.GetEntry(\"mcmod.info\");\n                if (type3 != null)\n                {\n                    try\n                    {\n                        await using var entryStream = type3.Open();\n                        using var memoryStream = new MemoryStream();\n                        await entryStream.CopyToAsync(memoryStream);\n                        memoryStream.Position = 0;\n                        var reader = new StreamReader(memoryStream);\n                        var text = await reader.ReadToEndAsync();\n                        var obj = JArray.Parse(text).FirstOrDefault();\n                        if (obj is not JObject o)\n                            throw new Exception(\"mcmod.info is not a valid json array\");\n\n                        var displayName = !string.IsNullOrWhiteSpace(o[\"name\"]?.ToString())\n                            ? o[\"name\"]?.ToString()\n                            : null;\n                        var description = !string.IsNullOrWhiteSpace(o[\"description\"]?.ToString())\n                            ? o[\"description\"]?.ToString()\n                            : null;\n                        if (!string.IsNullOrWhiteSpace(displayName) ||\n                            !string.IsNullOrWhiteSpace(description))\n                        {\n                            return (displayName, description);\n                        }\n                    }\n                    catch (Exception e)\n                    {\n                        Console.WriteLine(e);\n                    }\n                }\n\n                var type4 = archive.GetEntry(\"META-INF/neoforge.mods.toml\");\n                if (type4 != null)\n                {\n                    try\n                    {\n                        await using var entryStream = type4.Open();\n                        using var memoryStream = new MemoryStream();\n                        await entryStream.CopyToAsync(memoryStream);\n                        memoryStream.Position = 0;\n                        var reader = new StreamReader(memoryStream);\n                        var text = await reader.ReadToEndAsync();\n                        var result = Toml.ToModel(text);\n\n                        if (result.TryGetValue(\"mods\", out var modsObj))\n                        {\n                            if (modsObj is TomlTableArray modsList)\n                                foreach (var modTable in modsList.OfType<TomlTable>())\n                                {\n                                    var displayName = modTable.TryGetValue(\"displayName\", out var nameObj)\n                                        ? !string.IsNullOrWhiteSpace(nameObj.ToString()) ? nameObj.ToString() : null\n                                        : null;\n                                    var description = modTable.TryGetValue(\"description\", out var descObj)\n                                        ? !string.IsNullOrWhiteSpace(descObj.ToString()) ? descObj.ToString() : null\n                                        : null;\n                                    if (!string.IsNullOrWhiteSpace(displayName) ||\n                                        !string.IsNullOrWhiteSpace(description))\n                                    {\n                                        return (displayName, description);\n                                    }\n                                }\n                        }\n                    }\n                    catch (Exception e)\n                    {\n                        Console.WriteLine(e);\n                    }\n                }\n\n                return (null, null);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n                return (null, null);\n            }\n        });\n        return (result.displayName, result.description);\n    }\n\n    private void FilterMods()\n    {\n        FilteredMods.Clear();\n        _mods.Where(item => item.DisplayText.Contains(Filter, StringComparison.OrdinalIgnoreCase))\n            .ToList().OrderBy(mod => mod.IsEnable).ToList().ForEach(mod =>\n            {\n                if (FilteredMods.All(item => item.Path != mod.Path))\n                {\n                    FilteredMods.Add(mod);\n                }\n            });\n        NoMatchResultTip.IsVisible = FilteredMods.Count == 0 && !IsLoading;\n        SelectedModCount.Text = $\"{MainLang.SelectedItem} {ModManageList.SelectedItems.Count}\";\n    }\n\n\n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private void SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return;\n        field = value;\n        OnPropertyChanged(propertyName);\n    }\n\n    private void Translate(LocalModEntry entry)\n    {\n        if (string.IsNullOrWhiteSpace(Data.TranslateToken)) return;\n        _ = System.Threading.Tasks.Task.Run(async () =>\n        {\n            if (!entry.ShouldTranslateInfoName) return;\n            try\n            {\n                var handler = new HttpClientHandler();\n                handler.ServerCertificateCustomValidationCallback =\n                    (_, _, _, _) => true;\n                using var client = new HttpClient(handler);\n                client.DefaultRequestHeaders.Add(\"Authorization\", Data.TranslateToken);\n                var response =\n                    await client.PostAsync(\n                        $\"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to={Data.SettingEntry.Language.Code}&textType=plain\",\n                        new StringContent($\"[{{\\\"Text\\\": \\\"{entry.ModInfoName}\\\"}}]\", Encoding.UTF8,\n                            \"application/json\"));\n                var responseContent = await response.Content.ReadAsStringAsync();\n                var translatedText =\n                    ((JObject)JArray.Parse(responseContent)[0][\"translations\"][0])[\"text\"].ToString();\n                entry.DisplayText = $\"{translatedText} ({entry.ModInfoName}) ({entry.FileName})\";\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n            }\n        });\n        _ = System.Threading.Tasks.Task.Run(async () =>\n        {\n            if (!entry.ShouldTranslateDescription) return;\n            try\n            {\n                var handler = new HttpClientHandler();\n                handler.ServerCertificateCustomValidationCallback =\n                    (_, _, _, _) => true;\n                using var client = new HttpClient(handler);\n                client.DefaultRequestHeaders.Add(\"Authorization\", Data.TranslateToken);\n                var response =\n                    await client.PostAsync(\n                        $\"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to={Data.SettingEntry.Language.Code}&textType=plain\",\n                        new StringContent($\"[{{\\\"Text\\\": \\\"{entry.ModInfoName}\\\"}}]\", Encoding.UTF8,\n                            \"application/json\"));\n                var responseContent = await response.Content.ReadAsStringAsync();\n                var translatedText =\n                    ((JObject)JArray.Parse(responseContent)[0][\"translations\"][0])[\"text\"].ToString();\n                entry.Description = translatedText.Trim();\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n            }\n        });\n    }\n\n    public Mod()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/OverView.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.SubPages.OverView\"\n    x:DataType=\"viewModels:GameSettingModel\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:viewModels=\"clr-namespace:YMCL.ViewModels\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        HorizontalAlignment=\"Stretch\"\n        VerticalAlignment=\"Stretch\">\n        <StackPanel Spacing=\"10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                ClipToBounds=\"True\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Padding=\"10\">\n                <StackPanel Orientation=\"Horizontal\">\n                    <Border\n                        ClipToBounds=\"True\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        DockPanel.Dock=\"Left\"\n                        Height=\"38\"\n                        Margin=\"5,0,5,0\"\n                        VerticalAlignment=\"Center\"\n                        Width=\"38\">\n                        <Image Source=\"{Binding Icon}\" />\n                    </Border>\n                    <StackPanel Margin=\"2,0,0,0\" VerticalAlignment=\"Center\">\n                        <TextBlock FontFamily=\"{DynamicResource Font}\" Text=\"{Binding MinecraftEntry.Id}\" />\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"12\"\n                            Foreground=\"{DynamicResource GrayColor}\">\n                            <Run Text=\"{Binding MinecraftEntry.Version.Type}\" />\n                            <Run Text=\"{Binding MinecraftEntry.Version.VersionId}\" />\n                            <Run Text=\",\" />\n                            <Run Text=\"{Binding LoaderType}\" />\n                        </TextBlock>\n                    </StackPanel>\n                </StackPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                ClipToBounds=\"True\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Padding=\"10\">\n                <WrapPanel>\n                    <Button\n                        Click=\"OpenVersionFolder\"\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.VersionFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"13\"\n                        Margin=\"0,0,5,0\"\n                        Tag=\"\" />\n                    <Button\n                        Click=\"OpenVersionFolder\"\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SavesFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"13\"\n                        Margin=\"5,0,5,0\"\n                        Tag=\"saves\" />\n                    <Button\n                        Click=\"OpenVersionFolder\"\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ModsFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"13\"\n                        Margin=\"5,0,5,0\"\n                        Tag=\"mods\" />\n                    <Button\n                        Click=\"OpenVersionFolder\"\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ResourcePacksFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"13\"\n                        Margin=\"5,0,5,0\"\n                        Tag=\"resourcepacks\" />\n                    <Button\n                        Click=\"OpenVersionFolder\"\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ShaderPacksFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"13\"\n                        Margin=\"5,0,5,0\"\n                        Tag=\"shaderpacks\" />\n                    <Button\n                        Click=\"OpenVersionFolder\"\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ScreenshotsFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"13\"\n                        Margin=\"5,0,5,0\"\n                        Tag=\"screenshots\" />\n                </WrapPanel>\n            </Border>\n        </StackPanel>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/OverView.axaml.cs",
    "content": "﻿using System.IO;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Interactivity;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Platform.Storage;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Module.IO.Disk;\nusing YMCL.ViewModels;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages.SubPages;\n\npublic partial class OverView : UserControl\n{\n    private GameSettingModel _model;\n\n    public OverView(GameSettingModel model)\n    {\n        InitializeComponent();\n        _model = model;\n        DataContext = model;\n    }\n\n    private void OpenVersionFolder(object? sender, RoutedEventArgs e)\n    {\n        var tag = ((Button)sender).Tag.ToString();\n        var path = tag switch\n        {\n            \"mods\" => Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_model.MinecraftEntry,\n                GameSpecialFolder.ModsFolder),\n            \"saves\" => Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_model.MinecraftEntry,\n                GameSpecialFolder.SavesFolder),\n            \"resourcepacks\" => Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_model.MinecraftEntry,\n                GameSpecialFolder.ResourcePacksFolder),\n            \"shaderpacks\" => Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_model.MinecraftEntry,\n                GameSpecialFolder.ShaderPacksFolder),\n            \"screenshots\" => Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_model.MinecraftEntry,\n                GameSpecialFolder.ScreenshotsFolder),\n            _ => Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_model.MinecraftEntry, GameSpecialFolder.GameFolder,\n                true)\n        };\n        YMCL.Public.Module.IO.Disk.Setter.TryCreateFolder(path);\n        _ = Opener.OpenFolder(path);\n    }\n\n    public OverView()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/ResourcePack.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.SubPages.ResourcePack\"\n    x:DataType=\"mod:ResourcePack\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:mod=\"clr-namespace:YMCL.Views.Main.Pages.LaunchPages.SubPages\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n        <Grid>\n            <DockPanel>\n                <DockPanel\n                    DockPanel.Dock=\"Top\"\n                    Margin=\"5\"\n                    VerticalAlignment=\"Top\">\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SelectAll}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Name=\"SelectAllModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeselectAll}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DeselectAllModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OpenFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"OpenFolderBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeleteSelect}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DeleteSelectModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Refresh}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"RefreshModBtn\" />\n                    <TextBox\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"ModSearchBox\"\n                        Text=\"{Binding Filter}\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\" />\n                </DockPanel>\n                <ListBox\n                    DockPanel.Dock=\"Bottom\"\n                    ItemsSource=\"{Binding FilteredItems}\"\n                    Margin=\"5\"\n                    Name=\"ModManageList\"\n                    SelectionMode=\"Multiple,Toggle\">\n                    <ListBox.Styles>\n                        <Style Selector=\"ListBoxItem\">\n                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                        </Style>\n                    </ListBox.Styles>\n                    <ListBox.ItemTemplate>\n                        <DataTemplate DataType=\"data:LocalResourcePackEntry\">\n                            <Border Margin=\"0,6\">\n                                <DockPanel>\n                                    <Border\n                                        ClipToBounds=\"True\"\n                                        CornerRadius=\"3,3,3,3\"\n                                        Height=\"28\"\n                                        Margin=\"2,0,6.5,0\"\n                                        Width=\"28\">\n                                        <Image Source=\"{Binding Icon}\" />\n                                    </Border>\n                                    <Grid>\n                                        <TextBlock\n                                            FontFamily=\"{DynamicResource Font}\"\n                                            FontSize=\"14\"\n                                            Text=\"{Binding Name}\" />\n                                        <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                            <TextBlock\n                                                FontFamily=\"{DynamicResource Font}\"\n                                                FontSize=\"11\"\n                                                Foreground=\"{DynamicResource GrayColor}\"\n                                                Margin=\"0,0,0,0\"\n                                                Text=\"{Binding Description}\" />\n                                        </StackPanel>\n                                    </Grid>\n                                </DockPanel>\n                            </Border>\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </DockPanel>\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Right\"\n                Margin=\"0,40,10,0\"\n                Name=\"SelectedModCount\" />\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Center\"\n                Margin=\"0,100,0,0\"\n                Name=\"NoMatchResultTip\"\n                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoMatchResult}\" />\n        </Grid>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/ResourcePack.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform.Storage;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.VisualBasic.FileIO;\nusing MinecraftLaunch.Base.Models.Game;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Disk;\nusing JsonElement = System.Text.Json.JsonElement;\nusing SearchOption = Microsoft.VisualBasic.FileIO.SearchOption;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages.SubPages;\n\npublic partial class ResourcePack : UserControl, INotifyPropertyChanged\n{\n    private readonly ObservableCollection<LocalResourcePackEntry> _items = [];\n    public ObservableCollection<LocalResourcePackEntry> FilteredItems { get; set; } = [];\n    private readonly MinecraftEntry _entry;\n    private string _filter = string.Empty;\n\n    public string Filter\n    {\n        get => _filter;\n        set => SetField(ref _filter, value);\n    }\n\n    public ResourcePack(MinecraftEntry entry)\n    {\n        _entry = entry;\n        InitializeComponent();\n        LoadItems();\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(Filter))\n            {\n                FilterItems();\n            }\n        };\n        Loaded += (_, _) => { LoadItems(); };\n        DataContext = this;\n        RefreshModBtn.Click += (_, _) => { LoadItems(); };\n        DeselectAllModBtn.Click += (_, _) => { ModManageList.SelectedIndex = -1; };\n        SelectAllModBtn.Click += (_, _) => { ModManageList.SelectAll(); };\n        OpenFolderBtn.Click += (_, _) =>\n        {\n            var path = Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_entry, GameSpecialFolder.ResourcePacksFolder);\n            YMCL.Public.Module.IO.Disk.Setter.TryCreateFolder(path);\n            _ = Opener.OpenFolder(path);\n        };\n        DeleteSelectModBtn.Click += async (_, _) =>\n        {\n            var items = ModManageList.SelectedItems;\n            if (items is null) return;\n            var text = (from object? item in items select item as LocalResourcePackEntry).Aggregate(string.Empty,\n                (current, mod) => current + $\"• {Path.GetFileName(mod.Name)}\\n\");\n\n            var title = YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows\n                ? MainLang.MoveToRecycleBin\n                : MainLang.DeleteSelect;\n            var dialog = await ShowDialogAsync(title, text, b_cancel: MainLang.Cancel,\n                b_primary: MainLang.Ok);\n            if (dialog != ContentDialogResult.Primary) return;\n\n            foreach (var item in items)\n            {\n                var file = item as LocalResourcePackEntry;\n                if (YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows)\n                {\n                    try\n                    {\n                        FileSystem.DeleteFile(file.Path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin);\n                    }\n                    catch (OperationCanceledException)\n                    {\n                    }\n                }\n                else\n                {\n                    File.Delete(file.Path);\n                }\n            }\n\n            LoadItems();\n        };\n        ModManageList.SelectionChanged += (_, _) =>\n        {\n            SelectedModCount.Text = $\"{MainLang.SelectedItem} {ModManageList.SelectedItems.Count}\";\n        };\n        SelectedModCount.Text = $\"{MainLang.SelectedItem} 0\";\n    }\n\n    private void LoadItems()\n    {\n        _items.Clear();\n\n        var files = Directory.GetFiles(\n            Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_entry, GameSpecialFolder.ResourcePacksFolder)\n            , \"*.*\", System.IO.SearchOption.AllDirectories);\n        foreach (var file in files)\n\n            if (Path.GetExtension(file) == \".zip\")\n                _items.Add(new LocalResourcePackEntry\n                {\n                    Name = Path.GetFileName(file)[..(Path.GetFileName(file).Length - 4)], Path = file,\n                    Icon = GetIconFromZip(file), Description = GetDescriptionFromZip(file)\n                });\n\n        FilterItems();\n    }\n\n    private void FilterItems()\n    {\n        FilteredItems.Clear();\n        _items.Where(item => item.Name.Contains(Filter, StringComparison.OrdinalIgnoreCase))\n            .ToList().OrderBy(mod => mod.Name).ToList().ForEach(mod => FilteredItems.Add(mod));\n        NoMatchResultTip.IsVisible = FilteredItems.Count == 0;\n        SelectedModCount.Text = $\"{MainLang.SelectedItem} {ModManageList.SelectedItems.Count}\";\n    }\n\n\n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private void SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return;\n        field = value;\n        OnPropertyChanged(propertyName);\n    }\n\n    public Bitmap GetIconFromZip(string zipFilePath)\n    {\n        if (!File.Exists(zipFilePath))\n        {\n            return null;\n        }\n\n        using var archive = ZipFile.OpenRead(zipFilePath);\n        foreach (var entry in archive.Entries)\n        {\n            if (entry.FullName != \"pack.png\") continue;\n\n            try\n            {\n                using var entryStream = entry.Open();\n                using var memoryStream = new MemoryStream();\n                entryStream.CopyTo(memoryStream);\n                memoryStream.Position = 0;\n                return new Bitmap(memoryStream);\n            }\n            catch\n            {\n                return null;\n            }\n        }\n\n        return null;\n    }\n\n    public string GetDescriptionFromZip(string zipFilePath)\n    {\n        if (!File.Exists(zipFilePath))\n        {\n            return \"string.Empty\";\n        }\n\n        using var archive = ZipFile.OpenRead(zipFilePath);\n        foreach (var entry in archive.Entries)\n        {\n            if (entry.FullName != \"pack.mcmeta\") continue;\n            using var entryStream = entry.Open();\n            using var reader = new StreamReader(entryStream);\n            var jsonContent = reader.ReadToEnd();\n            var packData = JObject.Parse(jsonContent);\n            var descriptionToken = packData[\"pack\"]?[\"description\"];\n            return descriptionToken != null ? descriptionToken.ToString() : \"string.Empty\";\n        }\n\n        return \"string.Empty\";\n    }\n\n    public ResourcePack()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/Save.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.SubPages.Save\"\n    x:DataType=\"model:Save\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:model=\"clr-namespace:YMCL.Views.Main.Pages.LaunchPages.SubPages\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n        <Grid>\n            <DockPanel>\n                <DockPanel\n                    DockPanel.Dock=\"Top\"\n                    Margin=\"5\"\n                    VerticalAlignment=\"Top\">\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SelectAll}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Name=\"SelectAllModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeselectAll}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DeselectAllModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OpenFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"OpenFolderBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeleteSelect}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DeleteSelectModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Refresh}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"RefreshModBtn\" />\n                    <TextBox\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"ModSearchBox\"\n                        Text=\"{Binding Filter}\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\" />\n                </DockPanel>\n                <ListBox\n                    DockPanel.Dock=\"Bottom\"\n                    ItemsSource=\"{Binding FilteredItems}\"\n                    Margin=\"5\"\n                    Name=\"ModManageList\"\n                    SelectionMode=\"Multiple,Toggle\">\n                    <ListBox.Styles>\n                        <Style Selector=\"ListBoxItem\">\n                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                        </Style>\n                    </ListBox.Styles>\n                    <ListBox.ItemTemplate>\n                        <DataTemplate DataType=\"data:LocalSaveEntry\">\n                            <Grid>\n                                <Border Margin=\"0,6\">\n                                    <DockPanel>\n                                        <Border\n                                            ClipToBounds=\"True\"\n                                            CornerRadius=\"3,3,3,3\"\n                                            Height=\"28\"\n                                            Margin=\"2,0,6.5,0\"\n                                            Width=\"28\">\n                                            <Image Source=\"{Binding Icon}\" />\n                                        </Border>\n                                        <Grid>\n                                            <TextBlock\n                                                FontFamily=\"{DynamicResource Font}\"\n                                                FontSize=\"14\"\n                                                Text=\"{Binding Name}\" />\n                                            <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                                <TextBlock\n                                                    FontFamily=\"{DynamicResource Font}\"\n                                                    FontSize=\"11\"\n                                                    Foreground=\"{DynamicResource GrayColor}\"\n                                                    Margin=\"0,0,0,0\"\n                                                    Text=\"{Binding Description}\" />\n                                            </StackPanel>\n                                        </Grid>\n                                    </DockPanel>\n                                </Border>\n                                <StackPanel\n                                    DockPanel.Dock=\"Right\"\n                                    HorizontalAlignment=\"Right\"\n                                    Orientation=\"Horizontal\"\n                                    Spacing=\"15\">\n                                    <StackPanel.Styles>\n                                        <Style Selector=\"StackPanel\">\n                                            <Setter Property=\"Opacity\" Value=\"0\" />\n                                            <Setter Property=\"Transitions\">\n                                                <Transitions>\n                                                    <DoubleTransition Duration=\"0:0:0.1\" Property=\"Opacity\" />\n                                                </Transitions>\n                                            </Setter>\n                                        </Style>\n                                    </StackPanel.Styles>\n                                    <StackPanel.IsVisible>\n                                        <Binding Path=\"IsPointerOver\" RelativeSource=\"{RelativeSource AncestorType=ListBoxItem}\" />\n                                    </StackPanel.IsVisible>\n                                    <StackPanel.Opacity>\n                                        <Binding Path=\"IsPointerOver\" RelativeSource=\"{RelativeSource AncestorType=ListBoxItem}\">\n                                            <Binding.Converter>\n                                                <converter:BoolToDoubleConverter FalseValue=\"0.5\" TrueValue=\"1\" />\n                                            </Binding.Converter>\n                                        </Binding>\n                                    </StackPanel.Opacity>\n                                    <Button\n                                        Classes=\"custom-button\"\n                                        Command=\"{Binding OpenFolder}\"\n                                        Content=\"F1 M 3.056641 18.75 C 2.646484 18.75 2.255859 18.666992 1.884766 18.500977 C 1.513672 18.334961 1.189779 18.113607 0.913086 17.836914 C 0.636393 17.560221 0.415039 17.236328 0.249023 16.865234 C 0.083008 16.494141 0 16.103516 0 15.693359 L 0 4.306641 C 0 3.896484 0.083008 3.505859 0.249023 3.134766 C 0.415039 2.763672 0.636393 2.439779 0.913086 2.163086 C 1.189779 1.886395 1.513672 1.665039 1.884766 1.499023 C 2.255859 1.333008 2.646484 1.25 3.056641 1.25 L 6.875 1.25 C 7.324219 1.25 7.709961 1.319988 8.032227 1.459961 C 8.354492 1.599936 8.644205 1.785482 8.901367 2.016602 C 9.158528 2.247723 9.397786 2.513021 9.619141 2.8125 C 9.840494 3.11198 10.071614 3.42448 10.3125 3.75 L 16.943359 3.75 C 17.353516 3.75 17.744141 3.833008 18.115234 3.999023 C 18.486328 4.165039 18.810221 4.386394 19.086914 4.663086 C 19.363605 4.939779 19.584961 5.263672 19.750977 5.634766 C 19.916992 6.005859 20 6.396484 20 6.806641 L 20 9.902344 C 19.817707 9.674479 19.622395 9.456381 19.414062 9.248047 C 19.205729 9.039714 18.984375 8.847656 18.75 8.671875 L 18.75 6.875 C 18.75 6.621095 18.701172 6.380209 18.603516 6.152344 C 18.505859 5.924479 18.370768 5.724284 18.198242 5.551758 C 18.025715 5.379232 17.82552 5.244142 17.597656 5.146484 C 17.369791 5.048829 17.128906 5.000001 16.875 5 L 10.185547 5 C 9.957682 5.156251 9.736328 5.309246 9.521484 5.458984 C 9.306641 5.608725 9.088541 5.742188 8.867188 5.859375 C 8.645833 5.976562 8.413086 6.070964 8.168945 6.142578 C 7.924805 6.214193 7.65625 6.25 7.363281 6.25 L 1.25 6.25 L 1.25 15.625 C 1.25 15.878906 1.298828 16.119791 1.396484 16.347656 C 1.494141 16.575521 1.629232 16.775717 1.801758 16.948242 C 1.974284 17.120768 2.174479 17.255859 2.402344 17.353516 C 2.630208 17.451172 2.871094 17.5 3.125 17.5 L 7.900391 17.5 C 8.011067 17.721354 8.129883 17.936197 8.256836 18.144531 C 8.383789 18.352865 8.522135 18.554688 8.671875 18.75 Z M 7.363281 5 C 7.539062 5.000001 7.70345 4.977215 7.856445 4.931641 C 8.009439 4.886068 8.154297 4.825847 8.291016 4.750977 C 8.427734 4.676107 8.562825 4.5931 8.696289 4.501953 C 8.829752 4.410808 8.964844 4.316406 9.101562 4.21875 C 8.951822 4.016928 8.805338 3.813477 8.662109 3.608398 C 8.51888 3.40332 8.36263 3.219402 8.193359 3.056641 C 8.024088 2.893881 7.833658 2.760418 7.62207 2.65625 C 7.410481 2.552084 7.161458 2.5 6.875 2.5 L 3.125 2.5 C 2.871094 2.5 2.630208 2.548828 2.402344 2.646484 C 2.174479 2.744141 1.974284 2.879232 1.801758 3.051758 C 1.629232 3.224285 1.494141 3.42448 1.396484 3.652344 C 1.298828 3.880209 1.25 4.121094 1.25 4.375 L 1.25 5 Z M 8.75 14.375 C 8.75 13.600261 8.898111 12.871094 9.194336 12.1875 C 9.49056 11.503906 9.892578 10.908203 10.400391 10.400391 C 10.908203 9.892578 11.503906 9.490561 12.1875 9.194336 C 12.871093 8.898112 13.60026 8.75 14.375 8.75 C 14.889322 8.75 15.385741 8.816732 15.864258 8.950195 C 16.342773 9.083659 16.790363 9.272461 17.207031 9.516602 C 17.623697 9.760742 18.004557 10.055339 18.349609 10.400391 C 18.69466 10.745443 18.989258 11.126303 19.233398 11.542969 C 19.477539 11.959636 19.66634 12.407227 19.799805 12.885742 C 19.933268 13.364258 20 13.860678 20 14.375 C 20 15.14974 19.851887 15.878906 19.555664 16.5625 C 19.259439 17.246094 18.857422 17.841797 18.349609 18.349609 C 17.841797 18.857422 17.246094 19.259439 16.5625 19.555664 C 15.878906 19.851889 15.149739 20 14.375 20 C 13.59375 20 12.861328 19.853516 12.177734 19.560547 C 11.494141 19.267578 10.898438 18.867188 10.390625 18.359375 C 9.882812 17.851562 9.482422 17.255859 9.189453 16.572266 C 8.896484 15.888672 8.75 15.15625 8.75 14.375 Z M 12.5 16.923828 C 12.688802 16.923828 12.848307 16.858725 12.978516 16.728516 L 16.25 13.457031 L 16.25 15.625 C 16.25 15.794271 16.311848 15.940756 16.435547 16.064453 C 16.559244 16.188152 16.705729 16.25 16.875 16.25 C 17.04427 16.25 17.190754 16.188152 17.314453 16.064453 C 17.43815 15.940756 17.5 15.794271 17.5 15.625 L 17.5 11.875 C 17.5 11.705729 17.43815 11.559245 17.314453 11.435547 C 17.190754 11.31185 17.04427 11.25 16.875 11.25 L 13.125 11.25 C 12.955729 11.25 12.809244 11.31185 12.685547 11.435547 C 12.561849 11.559245 12.5 11.705729 12.5 11.875 C 12.5 12.044271 12.561849 12.190756 12.685547 12.314453 C 12.809244 12.438151 12.955729 12.5 13.125 12.5 L 15.292969 12.5 L 12.021484 15.771484 C 11.891275 15.901693 11.826172 16.061197 11.826172 16.25 C 11.826172 16.438803 11.891275 16.598307 12.021484 16.728516 C 12.151691 16.858725 12.311197 16.923828 12.5 16.923828 Z \"\n                                        HorizontalAlignment=\"Right\"\n                                        VerticalAlignment=\"Center\" />\n                                    <Button\n                                        Classes=\"custom-button\"\n                                        Command=\"{Binding ShowInfo}\"\n                                        Content=\"F1 M 0 9.375 C 0 8.509115 0.110677 7.677409 0.332031 6.879883 C 0.553385 6.082357 0.867513 5.335287 1.274414 4.638672 C 1.681315 3.942059 2.169596 3.30892 2.739258 2.739258 C 3.308919 2.169598 3.942057 1.681316 4.638672 1.274414 C 5.335286 0.867514 6.082356 0.553387 6.879883 0.332031 C 7.677409 0.110678 8.509114 0 9.375 0 C 10.240885 0 11.072591 0.110678 11.870117 0.332031 C 12.667643 0.553387 13.414713 0.867514 14.111328 1.274414 C 14.807942 1.681316 15.44108 2.169598 16.010742 2.739258 C 16.580402 3.30892 17.068684 3.942059 17.475586 4.638672 C 17.882486 5.335287 18.196613 6.082357 18.417969 6.879883 C 18.639322 7.677409 18.75 8.509115 18.75 9.375 C 18.75 10.240886 18.637695 11.072592 18.413086 11.870117 C 18.188477 12.667644 17.872721 13.413086 17.46582 14.106445 C 17.058918 14.799805 16.570637 15.431315 16.000977 16.000977 C 15.431314 16.570639 14.799804 17.05892 14.106445 17.46582 C 13.413085 17.872721 12.666015 18.188477 11.865234 18.413086 C 11.064453 18.637695 10.234375 18.75 9.375 18.75 C 8.509114 18.75 7.675781 18.639322 6.875 18.417969 C 6.074219 18.196615 5.327148 17.882486 4.633789 17.475586 C 3.94043 17.068686 3.308919 16.580404 2.739258 16.010742 C 2.169596 15.441081 1.681315 14.80957 1.274414 14.116211 C 0.867513 13.422852 0.553385 12.675781 0.332031 11.875 C 0.110677 11.074219 0 10.240886 0 9.375 Z M 17.5 9.375 C 17.5 8.626303 17.403971 7.905273 17.211914 7.211914 C 17.019855 6.518556 16.746418 5.87077 16.391602 5.268555 C 16.036783 4.666342 15.613606 4.119467 15.12207 3.62793 C 14.630533 3.136395 14.083658 2.713217 13.481445 2.358398 C 12.879231 2.003582 12.231445 1.730145 11.538086 1.538086 C 10.844727 1.346029 10.123697 1.25 9.375 1.25 C 8.626302 1.25 7.905273 1.346029 7.211914 1.538086 C 6.518555 1.730145 5.870768 2.003582 5.268555 2.358398 C 4.666341 2.713217 4.119466 3.136395 3.62793 3.62793 C 3.136393 4.119467 2.713216 4.666342 2.358398 5.268555 C 2.003581 5.87077 1.730143 6.518556 1.538086 7.211914 C 1.346029 7.905273 1.25 8.626303 1.25 9.375 C 1.25 10.123698 1.346029 10.844727 1.538086 11.538086 C 1.730143 12.231445 2.001953 12.879232 2.353516 13.481445 C 2.705078 14.083659 3.128255 14.632162 3.623047 15.126953 C 4.117838 15.621745 4.666341 16.044922 5.268555 16.396484 C 5.870768 16.748047 6.518555 17.019857 7.211914 17.211914 C 7.905273 17.403971 8.626302 17.5 9.375 17.5 C 10.123697 17.5 10.844727 17.403971 11.538086 17.211914 C 12.231445 17.019857 12.879231 16.748047 13.481445 16.396484 C 14.083658 16.044922 14.63216 15.621745 15.126953 15.126953 C 15.621744 14.632162 16.044922 14.083659 16.396484 13.481445 C 16.748047 12.879232 17.019855 12.231445 17.211914 11.538086 C 17.403971 10.844727 17.5 10.123698 17.5 9.375 Z M 8.4375 5.625 C 8.4375 5.364584 8.528646 5.14323 8.710938 4.960938 C 8.893229 4.778646 9.114583 4.6875 9.375 4.6875 C 9.635416 4.6875 9.856771 4.778646 10.039062 4.960938 C 10.221354 5.14323 10.3125 5.364584 10.3125 5.625 C 10.3125 5.885417 10.221354 6.106771 10.039062 6.289062 C 9.856771 6.471354 9.635416 6.5625 9.375 6.5625 C 9.114583 6.5625 8.893229 6.471354 8.710938 6.289062 C 8.528646 6.106771 8.4375 5.885417 8.4375 5.625 Z M 8.75 13.125 L 8.75 8.125 C 8.75 7.95573 8.811849 7.809246 8.935547 7.685547 C 9.059244 7.56185 9.205729 7.5 9.375 7.5 C 9.544271 7.5 9.690755 7.56185 9.814453 7.685547 C 9.93815 7.809246 10 7.95573 10 8.125 L 10 13.125 C 10 13.294271 9.93815 13.440756 9.814453 13.564453 C 9.690755 13.688151 9.544271 13.75 9.375 13.75 C 9.205729 13.75 9.059244 13.688151 8.935547 13.564453 C 8.811849 13.440756 8.75 13.294271 8.75 13.125 Z \"\n                                        HorizontalAlignment=\"Right\"\n                                        VerticalAlignment=\"Center\" />\n                                    <Button\n                                        Classes=\"custom-button\"\n                                        Command=\"{Binding Delete}\"\n                                        Content=\"F1 M 19.375 3.125 C 19.375 3.26823 19.34733 3.382162 19.291992 3.466797 C 19.236652 3.551434 19.16341 3.61491 19.072266 3.657227 C 18.981119 3.699545 18.880207 3.727215 18.769531 3.740234 C 18.658854 3.753256 18.544922 3.759766 18.427734 3.759766 C 18.362629 3.759766 18.297525 3.758139 18.232422 3.754883 C 18.167316 3.751629 18.108723 3.75 18.056641 3.75 L 16.435547 17.783203 C 16.396484 18.095703 16.305338 18.387045 16.162109 18.657227 C 16.018879 18.927408 15.836588 19.161783 15.615234 19.360352 C 15.39388 19.55892 15.139974 19.71517 14.853516 19.829102 C 14.567057 19.943033 14.267578 20 13.955078 20 L 6.044922 20 C 5.732422 20 5.432942 19.943033 5.146484 19.829102 C 4.860026 19.71517 4.60612 19.55892 4.384766 19.360352 C 4.163411 19.161783 3.98112 18.927408 3.837891 18.657227 C 3.694661 18.387045 3.603516 18.095703 3.564453 17.783203 L 1.943359 3.75 C 1.878255 3.75 1.813151 3.751629 1.748047 3.754883 C 1.682943 3.758139 1.617839 3.759766 1.552734 3.759766 C 1.442057 3.759766 1.33138 3.753256 1.220703 3.740234 C 1.110026 3.727215 1.010742 3.697918 0.922852 3.652344 C 0.834961 3.606771 0.763346 3.541668 0.708008 3.457031 C 0.652669 3.372396 0.625 3.261719 0.625 3.125 C 0.625 2.95573 0.686849 2.809246 0.810547 2.685547 C 0.934245 2.56185 1.080729 2.5 1.25 2.5 L 6.933594 2.5 C 6.998697 2.141928 7.127278 1.809896 7.319336 1.503906 C 7.511393 1.197918 7.745768 0.932617 8.022461 0.708008 C 8.299153 0.483398 8.606771 0.309246 8.945312 0.185547 C 9.283854 0.06185 9.635416 0 10 0 C 10.364583 0 10.716146 0.06185 11.054688 0.185547 C 11.393229 0.309246 11.700846 0.483398 11.977539 0.708008 C 12.25423 0.932617 12.488605 1.197918 12.680664 1.503906 C 12.872721 1.809896 13.001302 2.141928 13.066406 2.5 L 18.75 2.5 C 18.91927 2.5 19.065754 2.56185 19.189453 2.685547 C 19.31315 2.809246 19.375 2.95573 19.375 3.125 Z M 8.232422 2.5 L 11.767578 2.5 C 11.702474 2.311199 11.611328 2.140301 11.494141 1.987305 C 11.376953 1.834311 11.240234 1.702475 11.083984 1.591797 C 10.927734 1.481121 10.758463 1.396484 10.576172 1.337891 C 10.39388 1.279297 10.201822 1.25 10 1.25 C 9.798177 1.25 9.606119 1.279297 9.423828 1.337891 C 9.241536 1.396484 9.072266 1.481121 8.916016 1.591797 C 8.759766 1.702475 8.623047 1.834311 8.505859 1.987305 C 8.388672 2.140301 8.297525 2.311199 8.232422 2.5 Z M 16.796875 3.75 L 3.203125 3.75 L 4.804688 17.646484 C 4.84375 17.972006 4.978841 18.237305 5.209961 18.442383 C 5.441081 18.647461 5.719401 18.75 6.044922 18.75 L 13.955078 18.75 C 14.111328 18.75 14.261067 18.72233 14.404297 18.666992 C 14.547525 18.611654 14.674479 18.535156 14.785156 18.4375 C 14.895833 18.339844 14.986979 18.222656 15.058594 18.085938 C 15.130208 17.949219 15.175781 17.802734 15.195312 17.646484 Z M 7.5 14.375 L 7.5 8.125 C 7.5 7.95573 7.561849 7.809246 7.685547 7.685547 C 7.809245 7.56185 7.955729 7.5 8.125 7.5 C 8.294271 7.5 8.440755 7.56185 8.564453 7.685547 C 8.68815 7.809246 8.75 7.95573 8.75 8.125 L 8.75 14.375 C 8.75 14.544271 8.68815 14.690756 8.564453 14.814453 C 8.440755 14.938151 8.294271 15 8.125 15 C 7.955729 15 7.809245 14.938151 7.685547 14.814453 C 7.561849 14.690756 7.5 14.544271 7.5 14.375 Z M 11.25 14.375 L 11.25 8.125 C 11.25 7.95573 11.311849 7.809246 11.435547 7.685547 C 11.559244 7.56185 11.705729 7.5 11.875 7.5 C 12.04427 7.5 12.190754 7.56185 12.314453 7.685547 C 12.43815 7.809246 12.5 7.95573 12.5 8.125 L 12.5 14.375 C 12.5 14.544271 12.43815 14.690756 12.314453 14.814453 C 12.190754 14.938151 12.04427 15 11.875 15 C 11.705729 15 11.559244 14.938151 11.435547 14.814453 C 11.311849 14.690756 11.25 14.544271 11.25 14.375 Z \"\n                                        HorizontalAlignment=\"Right\"\n                                        VerticalAlignment=\"Center\" />\n                                </StackPanel>\n                            </Grid>\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </DockPanel>\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Right\"\n                Margin=\"0,40,10,0\"\n                Name=\"SelectedModCount\" />\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Center\"\n                Margin=\"0,100,0,0\"\n                Name=\"NoMatchResultTip\"\n                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoMatchResult}\" />\n        </Grid>\n    </Border>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/Save.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing System.Threading.Tasks;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform.Storage;\nusing Avalonia.Threading;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.VisualBasic.FileIO;\nusing MinecraftLaunch.Base.Models.Game;\nusing MinecraftLaunch.Components.Parser;\nusing MinecraftLaunch.Extensions;\nusing Newtonsoft.Json.Linq;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Disk;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages.SubPages;\n\npublic partial class Save : UserControl, INotifyPropertyChanged\n{\n    private readonly ObservableCollection<LocalSaveEntry> _items = [];\n    public ObservableCollection<LocalSaveEntry> FilteredItems { get; set; } = [];\n    private readonly MinecraftEntry _entry;\n    private string _filter = string.Empty;\n\n    public string Filter\n    {\n        get => _filter;\n        set => SetField(ref _filter, value);\n    }\n\n    public Save(MinecraftEntry entry)\n    {\n        _entry = entry;\n        InitializeComponent();\n        LoadItems();\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(Filter))\n            {\n                FilterItems();\n            }\n        };\n        Loaded += (_, _) => { LoadItems(); };\n        DataContext = this;\n        RefreshModBtn.Click += (_, _) => { LoadItems(); };\n        DeselectAllModBtn.Click += (_, _) => { ModManageList.SelectedIndex = -1; };\n        SelectAllModBtn.Click += (_, _) => { ModManageList.SelectAll(); };\n        OpenFolderBtn.Click += (_, _) =>\n        {\n            var path = Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_entry, GameSpecialFolder.SavesFolder);\n            YMCL.Public.Module.IO.Disk.Setter.TryCreateFolder(path);\n            _ = Opener.OpenFolder(path);\n        };\n        DeleteSelectModBtn.Click += async (_, _) =>\n        {\n            var items = ModManageList.SelectedItems;\n            if (items is null) return;\n            var text = (from object? item in items select item as LocalSaveEntry).Aggregate(string.Empty,\n                (current, mod) => current + $\"• {Path.GetFileName(mod.Name)}\\n\");\n\n            var title = YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows\n                ? MainLang.MoveToRecycleBin\n                : MainLang.DeleteSelect;\n            var dialog = await ShowDialogAsync(title, text, b_cancel: MainLang.Cancel,\n                b_primary: MainLang.Ok);\n            if (dialog != ContentDialogResult.Primary) return;\n\n            foreach (var item in items)\n            {\n                var file = item as LocalSaveEntry;\n                if (YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows)\n                {\n                    FileSystem.DeleteDirectory(file.Path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin);\n                }\n                else\n                {\n                    Directory.Delete(file.Path);\n                }\n            }\n\n            LoadItems();\n        };\n        ModManageList.SelectionChanged += (_, _) =>\n        {\n            SelectedModCount.Text = $\"{MainLang.SelectedItem} {ModManageList.SelectedItems.Count}\";\n        };\n        SelectedModCount.Text = $\"{MainLang.SelectedItem} 0\";\n    }\n\n    private async void LoadItems()\n    {\n        _items.Clear();\n\n        var saves = await GetSaves(_entry);\n        saves.ForEach(save =>\n        {\n            _items.Add(new LocalSaveEntry\n            {\n                Name = save.FolderName, Path = Path.Combine(Public.Module.Mc.Utils.GetMinecraftSpecialFolder\n                    (_entry, GameSpecialFolder.SavesFolder), save.FolderName),\n                Icon = save.IconBitmap, Callback = LoadItems, SaveInfo = save,\n                Description =\n                    $\"{MainLang.CreateTime}: {save.CreationTime}, {MainLang.LastModifiedTime}: {save.LastWriteTime}\"\n            });\n        });\n        FilterItems();\n    }\n\n    private void FilterItems()\n    {\n        FilteredItems.Clear();\n        _items.Where(item => item.Name.Contains(Filter, StringComparison.OrdinalIgnoreCase))\n            .ToList().OrderBy(mod => mod.Name).ToList().ForEach(mod => FilteredItems.Add(mod));\n        NoMatchResultTip.IsVisible = FilteredItems.Count == 0;\n        SelectedModCount.Text = $\"{MainLang.SelectedItem} {ModManageList.SelectedItems.Count}\";\n    }\n\n    public static async Task<List<SaveInfo>> GetSaves(MinecraftEntry entry)\n    {\n        var folderInfos = new List<SaveInfo>();\n        var parentPath = Public.Module.Mc.Utils.GetMinecraftSpecialFolder(entry, GameSpecialFolder.SavesFolder);\n        var folders = Directory.GetDirectories(parentPath);\n        foreach (var folderPath in folders)\n        {\n            try\n            {\n                var folderName = Path.GetFileName(folderPath);\n                if (!File.Exists(Path.Combine(folderPath, \"level.dat\"))) continue;\n                var creationTime = Directory.GetCreationTime(folderPath);\n                var lastWriteTime = Directory.GetLastWriteTime(folderPath);\n                Avalonia.Media.Imaging.Bitmap iconBitmap = null;\n                SaveEntry? saveNBTEntry = null;\n                string iconPath = null;\n                try\n                {\n                    saveNBTEntry = await entry.GetNBTParser().ParseSaveAsync(folderName);\n                    iconPath = saveNBTEntry.IconFilePath;\n                }\n                catch\n                {\n                }\n\n                if (File.Exists(iconPath ?? Path.Combine(folderPath, \"icon.png\")))\n                {\n                    try\n                    {\n                        using var stream =\n                            new System.IO.MemoryStream(\n                                await File.ReadAllBytesAsync(iconPath ?? Path.Combine(folderPath, \"icon.png\")));\n                        iconBitmap = new Avalonia.Media.Imaging.Bitmap(stream);\n                    }\n                    catch\n                    {\n                        iconBitmap = null;\n                    }\n                }\n\n                var datFileCount = 0;\n                var playerDataPath = Path.Combine(folderPath, \"playerdata\");\n                if (Directory.Exists(playerDataPath))\n                {\n                    try\n                    {\n                        datFileCount = Directory.GetFiles(playerDataPath, \"*.dat\").Length;\n                    }\n                    catch\n                    {\n                        datFileCount = 0;\n                    }\n                }\n\n                var zipFileCount = 0;\n                var datapacksPath = Path.Combine(folderPath, \"datapacks\");\n                if (Directory.Exists(datapacksPath))\n                {\n                    try\n                    {\n                        zipFileCount = Directory.GetFiles(datapacksPath, \"*.zip\").Length;\n                    }\n                    catch\n                    {\n                        zipFileCount = 0;\n                    }\n                }\n\n                if (saveNBTEntry == null)\n                {\n                    saveNBTEntry = new SaveEntry\n                    {\n                        LastPlayed = new DateTime(1970, 1, 1, 0, 0, 0),\n                        Version = \"Unknown\",\n                        AllowCommands = false,\n                        GameType = -1,\n                    };\n                }\n\n                folderInfos.Add(new SaveInfo\n                {\n                    FolderName = folderName,\n                    CreationTime = creationTime,\n                    LastWriteTime = lastWriteTime,\n                    LastPlayTime = saveNBTEntry.LastPlayed,\n                    Version = saveNBTEntry.Version,\n                    Seed = saveNBTEntry.Seed,\n                    AllowCommands = saveNBTEntry.AllowCommands,\n                    GameType = saveNBTEntry.GameType,\n                    IconBitmap = iconBitmap,\n                    DatFileCount = datFileCount,\n                    ZipFileCount = zipFileCount,\n                    FolderPath = folderPath\n                });\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine($\"Error processing folder {folderPath}: {ex.Message}\");\n            }\n        }\n\n        return folderInfos;\n    }\n\n\n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private void SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return;\n        field = value;\n        OnPropertyChanged(propertyName);\n    }\n\n    public class SaveInfo\n    {\n        public string FolderName { get; set; }\n        public string FolderPath { get; set; }\n        public DateTime CreationTime { get; set; }\n        public DateTime LastWriteTime { get; set; }\n        public DateTime LastPlayTime { get; set; }\n        public Avalonia.Media.Imaging.Bitmap IconBitmap { get; set; }\n        public int DatFileCount { get; set; }\n        public int ZipFileCount { get; set; }\n        public string Version { get; set; }\n        public long Seed { get; set; }\n        public int GameType { get; set; }\n        public bool AllowCommands { get; set; }\n    }\n\n    public Save()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/Screenshot.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.SubPages.Screenshot\"\n    x:DataType=\"model:Screenshot\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:model=\"clr-namespace:YMCL.Views.Main.Pages.LaunchPages.SubPages\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid>\n        <Grid Name=\"ListView\">\n            <DockPanel>\n                <Border\n                    Background=\"{DynamicResource 1x}\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    DockPanel.Dock=\"Top\"\n                    Margin=\"0,0,0,10\">\n                    <DockPanel Margin=\"5\" VerticalAlignment=\"Top\">\n                        <Button\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OpenFolder}\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            Name=\"OpenFolderBtn\" />\n                        <Button\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Refresh}\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            Margin=\"5,0,0,0\"\n                            Name=\"RefreshModBtn\" />\n                        <TextBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            HorizontalAlignment=\"Stretch\"\n                            Margin=\"5,0,0,0\"\n                            Name=\"ModSearchBox\"\n                            Text=\"{Binding Filter}\"\n                            Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\" />\n                    </DockPanel>\n                </Border>\n                <ScrollViewer>\n                    <WrapPanel\n                        HorizontalAlignment=\"Center\"\n                        Margin=\"10,0,10,10\"\n                        Name=\"Container\"\n                        VerticalAlignment=\"Top\">\n                        <WrapPanel.Transitions>\n                            <Transitions>\n                                <DoubleTransition Duration=\"0:0:0.3\" Property=\"Opacity\" />\n                            </Transitions>\n                        </WrapPanel.Transitions>\n                    </WrapPanel>\n                </ScrollViewer>\n            </DockPanel>\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Center\"\n                Margin=\"0,100,0,0\"\n                Name=\"NoMatchResultTip\"\n                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoMatchResult}\" />\n        </Grid>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            IsVisible=\"False\"\n            Margin=\"10,0,10,10\"\n            Name=\"ViewerRoot\"\n            Opacity=\"0\">\n            <DockPanel>\n                <DockPanel DockPanel.Dock=\"Top\">\n                    <Button\n                        Classes=\"custom-button\"\n                        Content=\"F1 M 20 8.75 C 20 8.925781 19.967447 9.088542 19.902344 9.238281 C 19.837238 9.388021 19.747721 9.519857 19.633789 9.633789 C 19.519855 9.747722 19.38802 9.83724 19.238281 9.902344 C 19.088541 9.967448 18.925781 10 18.75 10 L 4.267578 10 L 9.638672 15.361328 C 9.749349 15.472006 9.838867 15.605469 9.907227 15.761719 C 9.975586 15.917969 10.009766 16.077475 10.009766 16.240234 C 10.009766 16.409506 9.975586 16.570639 9.907227 16.723633 C 9.838867 16.876629 9.747721 17.010092 9.633789 17.124023 C 9.519856 17.237955 9.386393 17.329102 9.233398 17.397461 C 9.080403 17.46582 8.919271 17.5 8.75 17.5 C 8.411458 17.5 8.118489 17.376303 7.871094 17.128906 L 0.371094 9.628906 C 0.123698 9.381511 0 9.085287 0 8.740234 C 0 8.577475 0.03418 8.417969 0.102539 8.261719 C 0.170898 8.105469 0.260417 7.972006 0.371094 7.861328 L 7.871094 0.361328 C 8.118489 0.113934 8.414713 -0.009766 8.759766 -0.009766 C 8.929036 -0.009766 9.088541 0.024414 9.238281 0.092773 C 9.388021 0.161133 9.519856 0.252279 9.633789 0.366211 C 9.747721 0.480145 9.838867 0.61198 9.907227 0.761719 C 9.975586 0.911459 10.009766 1.070965 10.009766 1.240234 C 10.009766 1.585287 9.886067 1.881512 9.638672 2.128906 L 4.267578 7.5 L 18.75 7.5 C 18.91927 7.5 19.080402 7.532553 19.233398 7.597656 C 19.386393 7.662762 19.519855 7.752279 19.633789 7.866211 C 19.747721 7.980144 19.837238 8.113607 19.902344 8.266602 C 19.967447 8.419597 20 8.580729 20 8.75 Z \"\n                        HorizontalAlignment=\"Left\"\n                        Margin=\"8,2,0,0\"\n                        Name=\"CloseButton\"\n                        VerticalAlignment=\"Top\" />\n                    <TextBlock\n                        DockPanel.Dock=\"Right\"\n                        HorizontalAlignment=\"Right\"\n                        Margin=\"0,0,10,0\"\n                        Name=\"FileName\"\n                        VerticalAlignment=\"Center\" />\n                </DockPanel>\n                <u:ImageViewer\n                    Background=\"Transparent\"\n                    MinScale=\"0.5\"\n                    Name=\"Viewer\" />\n            </DockPanel>\n        </Border>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/Screenshot.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Layout;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.VisualBasic.FileIO;\nusing MinecraftLaunch.Base.Models.Game;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Disk;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages.SubPages;\n\npublic partial class Screenshot : UserControl, INotifyPropertyChanged\n{\n    private readonly ObservableCollection<LocalResourcePackEntry> _items = [];\n    private readonly MinecraftEntry _entry;\n    private string _filter = string.Empty;\n\n    public string Filter\n    {\n        get => _filter;\n        set => SetField(ref _filter, value);\n    }\n\n    public Screenshot(MinecraftEntry entry)\n    {\n        _entry = entry;\n        InitializeComponent();\n        LoadItems();\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(Filter))\n            {\n                FilterItems();\n            }\n        };\n        Loaded += (_, _) =>\n        {\n            LoadItems();\n            Viewer.TranslateY = 0;\n            Viewer.TranslateX = 0;\n            Viewer.Scale = 0.6;\n        };\n        DataContext = this;\n        RefreshModBtn.Click += (_, _) => { LoadItems(); };\n        OpenFolderBtn.Click += (_, _) =>\n        {\n            var path = Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_entry, GameSpecialFolder.ScreenshotsFolder);\n            YMCL.Public.Module.IO.Disk.Setter.TryCreateFolder(path);\n            _ = Opener.OpenFolder(path);\n        };\n        CloseButton.Click += (_, _) =>\n        {\n            _ = Public.Module.Ui.Animator.PageLoading.LevelTwoPage(ListView);\n            ListView.IsVisible = true;\n            ListView.Opacity = 1.0;\n            ViewerRoot.Opacity = 0;\n            ViewerRoot.IsVisible = false;\n        };\n    }\n\n    private void LoadItems()\n    {\n        _items.Clear();\n\n        var files = Directory.GetFiles(\n            Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_entry, GameSpecialFolder.ScreenshotsFolder)\n            , \"*.*\", System.IO.SearchOption.AllDirectories);\n        foreach (var file in files)\n\n            if (Path.GetExtension(file) == \".png\")\n                _items.Add(new LocalResourcePackEntry\n                {\n                    Name = Path.GetFileName(file), Path = file,\n                    Icon = null, Description = $\"{MainLang.ImportTime}: {new FileInfo(file).CreationTime}\"\n                });\n\n        FilterItems();\n    }\n\n    private void FilterItems()\n    {\n        Container.Children.Clear();\n        _items.Where(item => item.Name.Contains(Filter, StringComparison.OrdinalIgnoreCase))\n            .ToList().OrderBy(mod => mod.Name).ToList().ForEach(mod => Container.Children.Add(\n                new ScreenshotEntry(mod.Name, mod.Path, LoadItems, () => { ShowImageViewer(mod.Path); })));\n        NoMatchResultTip.IsVisible = Container.Children.Count == 0;\n    }\n\n\n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private void SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return;\n        field = value;\n        OnPropertyChanged(propertyName);\n    }\n\n    private void ShowImageViewer(string path)\n    {\n        FileName.Text = Path.GetFileName(path);\n        Viewer.Source = new Bitmap(path);\n        Viewer.TranslateY = 0;\n        Viewer.TranslateX = 0;\n        Viewer.Scale = 0.6;\n        _ = Public.Module.Ui.Animator.PageLoading.LevelTwoPage(ViewerRoot);\n        ViewerRoot.IsVisible = true;\n        ViewerRoot.Opacity = 1.0;\n        ListView.Opacity = 0;\n    }\n\n    public Screenshot()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/Setting.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.SubPages.Setting\"\n    x:DataType=\"viewModels:GameSettingModel\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:viewModels=\"clr-namespace:YMCL.ViewModels\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:GameSettingMaxMemConverter x:Key=\"GameSettingMaxMemConverter\" />\n        <converter:EnumIndexToBoolConverter x:Key=\"EnumIndexToBoolConverter\" />\n    </UserControl.Resources>\n    <ScrollViewer>\n        <StackPanel Spacing=\"10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"45\">\n                <DockPanel>\n                    <Label\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.EnableIndependencyCore}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Foreground=\"{DynamicResource TextColor}\"\n                        HorizontalAlignment=\"Left\"\n                        Margin=\"18,0,0,0\"\n                        VerticalAlignment=\"Center\" />\n                    <ComboBox\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        Margin=\"18,0,6.5,0\"\n                        SelectedIndex=\"{Binding GameSetting.EnableIndependencyCore}\"\n                        VerticalAlignment=\"Center\"\n                        x:Name=\"EnableIndependencyCoreComboBox\">\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.UseGlobalSetting}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Off}\" />\n                        <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.On}\" />\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"45\">\n                <DockPanel>\n                    <Label\n                        Content=\"Java\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"15\"\n                        Foreground=\"{DynamicResource TextColor}\"\n                        HorizontalAlignment=\"Left\"\n                        Margin=\"18,0,0,0\"\n                        VerticalAlignment=\"Center\" />\n                    <ComboBox\n                        FontFamily=\"{DynamicResource Font}\"\n                        Height=\"32\"\n                        HorizontalAlignment=\"Stretch\"\n                        ItemsSource=\"{Binding JavaRuntimes}\"\n                        Margin=\"18,0,6.5,0\"\n                        SelectedItem=\"{Binding GameSetting.Java}\"\n                        VerticalAlignment=\"Stretch\"\n                        x:Name=\"JavaComboBox\">\n                        <ComboBox.ItemTemplate>\n                            <DataTemplate DataType=\"data:JavaEntry\">\n                                <TextBlock>\n                                    <Run Text=\"[\" />\n                                    <Run Text=\"{Binding JavaType}\" />\n                                    <Run Text=\"{Binding JavaVersion}\" />\n                                    <Run Text=\"]\" />\n                                    <Run Text=\"{Binding JavaPath}\" />\n                                </TextBlock>\n                            </DataTemplate>\n                        </ComboBox.ItemTemplate>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n                <DockPanel LastChildFill=\"False\">\n                    <DockPanel DockPanel.Dock=\"Top\" Margin=\"0,6.5,6.5,6.5\">\n                        <Label\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MaxMem}\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"15\"\n                            Foreground=\"{DynamicResource TextColor}\"\n                            HorizontalAlignment=\"Left\"\n                            Margin=\"18,0,20,0\"\n                            VerticalAlignment=\"Center\" />\n                        <ComboBox HorizontalAlignment=\"Stretch\" SelectedIndex=\"{Binding GameSetting.MaxMemWay}\">\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.UseGlobalSetting}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoAllocate}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Custom}\" />\n                        </ComboBox>\n                    </DockPanel>\n                    <DockPanel\n                        DockPanel.Dock=\"Top\"\n                        IsVisible=\"{Binding GameSetting.MaxMemWay, Converter={StaticResource EnumIndexToBoolConverter}, ConverterParameter=2}\"\n                        Margin=\"0,6.5,6.5,15\">\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Foreground=\"{DynamicResource TextColor}\"\n                            HorizontalAlignment=\"Right\"\n                            Margin=\"0,0,18,0\"\n                            RenderTransformOrigin=\"0.5,0.5\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\">\n                            <Run Text=\"{Binding GameSetting.MaxMem, Converter={StaticResource GameSettingMaxMemConverter}}\" />\n                            <Run Text=\"Mib\" />\n                        </TextBlock>\n                        <Slider\n                            HorizontalAlignment=\"Stretch\"\n                            IsSnapToTickEnabled=\"True\"\n                            Margin=\"18,0,18,0\"\n                            Maximum=\"{Binding SystemMaxMem}\"\n                            Minimum=\"1\"\n                            TickFrequency=\"1\"\n                            Value=\"{Binding GameSetting.MaxMem}\"\n                            VerticalAlignment=\"Center\"\n                            x:Name=\"SliderBox\" />\n                    </DockPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"45\">\n                <DockPanel>\n                    <Label\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoJoinServer}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"15\"\n                        Foreground=\"{DynamicResource TextColor}\"\n                        HorizontalAlignment=\"Left\"\n                        Margin=\"18,0,0,0\"\n                        VerticalAlignment=\"Center\" />\n                    <TextBox\n                        FontFamily=\"{DynamicResource Font}\"\n                        Height=\"32\"\n                        Margin=\"18,0,6.5,0\"\n                        Text=\"{Binding GameSetting.AutoJoinServerIp}\"\n                        VerticalAlignment=\"Center\"\n                        Watermark=\"example.com:25565\"\n                        x:Name=\"AutoJoinServerTextBox\" />\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"45\">\n                <DockPanel>\n                    <Label\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.FastLaunch}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"15\"\n                        Foreground=\"{DynamicResource TextColor}\"\n                        HorizontalAlignment=\"Left\"\n                        Margin=\"18,0,0,0\"\n                        VerticalAlignment=\"Center\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AddFastLaunch}\"\n                        DockPanel.Dock=\"Right\"\n                        HorizontalAlignment=\"Right\"\n                        Margin=\"18,0,6.5,0\"\n                        Name=\"FastLaunchButton\" />\n                </DockPanel>\n            </Border>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/Setting.axaml.cs",
    "content": "﻿using System.IO;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Controls.Shapes;\nusing Avalonia.Layout;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.Core;\nusing FluentAvalonia.UI.Controls;\nusing MinecraftLaunch.Base.Models.Game;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing Ursa.Controls;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Value;\nusing YMCL.ViewModels;\nusing String = System.String;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages.SubPages;\n\npublic partial class Setting : UserControl\n{\n    private readonly GameSettingModel _model;\n\n    public Setting(GameSettingModel model)\n    {\n        _model = model;\n        InitializeComponent();\n        DataContext = _model;\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        FastLaunchButton.Click += async (_, _) =>\n        {\n            var base64 = Converter.BitmapToBase64(_model.Icon);\n            var name = new TextBox\n            {\n                FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n                Text = _model.MinecraftEntry.Id, HorizontalAlignment = HorizontalAlignment.Stretch,\n            };\n            FormItem.SetLabel(name, MainLang.DisplayName);\n            FormItem.SetIsRequired(name, true);\n            var server = new TextBox\n            {\n                FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n                Text = string.Empty, HorizontalAlignment = HorizontalAlignment.Stretch, Watermark = \"example.com:25565\"\n            };\n            FormItem.SetLabel(server, MainLang.AutoJoinServer);\n            var icon = new Button\n            {\n                FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n                Content = MainLang.SelectImgFile, HorizontalAlignment = HorizontalAlignment.Stretch,\n            };\n            icon.Click += async (_, _) =>\n            {\n                var list = await TopLevel.GetTopLevel(this).StorageProvider.OpenFilePickerAsync(\n                    new FilePickerOpenOptions\n                        { AllowMultiple = false, FileTypeFilter = [FilePickerFileTypes.ImageAll] });\n                if (list.Count == 0) return;\n                try\n                {\n                    var bitmap = new Bitmap(list[0].Path.LocalPath);\n                    base64 = Converter.BitmapToBase64(bitmap);\n                    Notice(MainLang.OperateSuccess);\n                }\n                catch\n                {\n                    Notice(MainLang.OperateFailed);\n                }\n            };\n\n            TextBox world = null;\n            if (!string.IsNullOrWhiteSpace(_model.MinecraftEntry.ClientJsonPath) &&\n                File.Exists(_model.MinecraftEntry.ClientJsonPath))\n            {\n                try\n                {\n                    var obj = JObject.Parse(await File.ReadAllTextAsync(_model.MinecraftEntry.ClientJsonPath));\n                    var time = DateTime.Parse(obj[\"releaseTime\"].ToString());\n                    if (time > new DateTime(2023, 4, 4))\n                    {\n                        world = new TextBox\n                        {\n                            FontFamily = (FontFamily)Application.Current.Resources[\"Font\"], TextWrapping = TextWrapping.Wrap,\n                            Text = string.Empty, HorizontalAlignment = HorizontalAlignment.Stretch, Watermark = MainLang.SavesName\n                        };\n                    }\n                }\n                catch\n                {\n                }\n            }\n\n            if (world != null)\n            {\n                server.TextChanged += (_, _) => { world.IsEnabled = string.IsNullOrWhiteSpace(server.Text); };\n                world.TextChanged += (_, _) => { server.IsEnabled = string.IsNullOrWhiteSpace(world.Text); };\n            }\n            \n            FormItem.SetLabel(icon, MainLang.Icon);\n            var form = new Form()\n            {\n                Items =\n                {\n                    name, server\n                },\n                MinWidth = 300,\n                FontFamily = (FontFamily)Application.Current.Resources[\"Font\"],\n            };\n            if (world != null)\n            {\n                FormItem.SetLabel(world, MainLang.AutoJoinWorld);\n                form.Items.Add(world);\n            }\n            form.Items.Add(icon);\n\n            var cr = await ShowDialogAsync(MainLang.FastLaunch, p_content: form, b_cancel: MainLang.Cancel,\n                b_primary: MainLang.Ok);\n            if (cr != ContentDialogResult.Primary) return;\n            Data.FavouriteMinecraft.Add(new FavouriteMinecraftEntry\n            {\n                MinecraftPath = _model.MinecraftEntry.MinecraftFolderPath, MinecraftId = _model.MinecraftEntry.Id,\n                DisplayName = name.Text ?? _model.MinecraftEntry.Id, ServerUrl = server.Text ?? string.Empty,\n                IconBase64 = base64, WorldName = world?.Text ?? string.Empty, IsSupportJoinWorld = world != null\n            });\n            await File.WriteAllTextAsync(ConfigPath.FavouriteMinecraftDataPath,\n                JsonConvert.SerializeObject(Public.Const.Data.FavouriteMinecraft, Formatting.Indented));\n        };\n    }\n\n    public Setting()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/ShaderPack.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.LaunchPages.SubPages.ShaderPack\"\n    x:DataType=\"model:ShaderPack\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:model=\"clr-namespace:YMCL.Views.Main.Pages.LaunchPages.SubPages\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border Background=\"{DynamicResource 1x}\" CornerRadius=\"{DynamicResource MainCornerRadius}\">\n        <Grid>\n            <DockPanel>\n                <DockPanel\n                    DockPanel.Dock=\"Top\"\n                    Margin=\"5\"\n                    VerticalAlignment=\"Top\">\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SelectAll}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Name=\"SelectAllModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeselectAll}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DeselectAllModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OpenFolder}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"OpenFolderBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeleteSelect}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"DeleteSelectModBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Refresh}\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"RefreshModBtn\" />\n                    <TextBox\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"ModSearchBox\"\n                        Text=\"{Binding Filter}\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SearchKeyword}\" />\n                </DockPanel>\n                <ListBox\n                    DockPanel.Dock=\"Bottom\"\n                    ItemsSource=\"{Binding FilteredItems}\"\n                    Margin=\"5\"\n                    Name=\"ModManageList\"\n                    SelectionMode=\"Multiple,Toggle\">\n                    <ListBox.Styles>\n                        <Style Selector=\"ListBoxItem\">\n                            <Setter Property=\"Margin\" Value=\"5,1\" />\n                        </Style>\n                    </ListBox.Styles>\n                    <ListBox.ItemTemplate>\n                        <DataTemplate DataType=\"data:LocalResourcePackEntry\">\n                            <Border Margin=\"0,6\">\n                                <DockPanel>\n                                    <Grid>\n                                        <TextBlock\n                                            FontFamily=\"{DynamicResource Font}\"\n                                            FontSize=\"14\"\n                                            Text=\"{Binding Name}\" />\n                                        <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                            <TextBlock\n                                                FontFamily=\"{DynamicResource Font}\"\n                                                FontSize=\"11\"\n                                                Foreground=\"{DynamicResource GrayColor}\"\n                                                Margin=\"0,0,0,0\"\n                                                Text=\"{Binding Description}\" />\n                                        </StackPanel>\n                                    </Grid>\n                                </DockPanel>\n                            </Border>\n                        </DataTemplate>\n                    </ListBox.ItemTemplate>\n                </ListBox>\n            </DockPanel>\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Right\"\n                Margin=\"0,40,10,0\"\n                Name=\"SelectedModCount\" />\n            <TextBlock\n                FontFamily=\"{DynamicResource Font}\"\n                Foreground=\"{DynamicResource GrayColor}\"\n                HorizontalAlignment=\"Center\"\n                Margin=\"0,100,0,0\"\n                Name=\"NoMatchResultTip\"\n                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoMatchResult}\" />\n        </Grid>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/LaunchPages/SubPages/ShaderPack.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.ComponentModel;\nusing System.IO;\nusing System.IO.Compression;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform.Storage;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.VisualBasic.FileIO;\nusing MinecraftLaunch.Base.Models.Game;\nusing Newtonsoft.Json.Linq;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Disk;\n\nnamespace YMCL.Views.Main.Pages.LaunchPages.SubPages;\n\npublic partial class ShaderPack : UserControl, INotifyPropertyChanged\n{\n    private readonly ObservableCollection<LocalResourcePackEntry> _items = [];\n    public ObservableCollection<LocalResourcePackEntry> FilteredItems { get; set; } = [];\n    private readonly MinecraftEntry _entry;\n    private string _filter = string.Empty;\n\n    public string Filter\n    {\n        get => _filter;\n        set => SetField(ref _filter, value);\n    }\n\n    public ShaderPack(MinecraftEntry entry)\n    {\n        _entry = entry;\n        _entry = entry;\n        InitializeComponent();\n        LoadItems();\n        PropertyChanged += (_, e) =>\n        {\n            if (e.PropertyName == nameof(Filter))\n            {\n                FilterItems();\n            }\n        };\n        Loaded += (_, _) => { LoadItems(); };\n        DataContext = this;\n        RefreshModBtn.Click += (_, _) => { LoadItems(); };\n        DeselectAllModBtn.Click += (_, _) => { ModManageList.SelectedIndex = -1; };\n        SelectAllModBtn.Click += (_, _) => { ModManageList.SelectAll(); };\n        OpenFolderBtn.Click += (_, _) =>\n        {\n            var path = Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_entry, GameSpecialFolder.ShaderPacksFolder);\n            YMCL.Public.Module.IO.Disk.Setter.TryCreateFolder(path);\n            _ = Opener.OpenFolder(path);\n        };\n        DeleteSelectModBtn.Click += async (_, _) =>\n        {\n            var items = ModManageList.SelectedItems;\n            if (items is null) return;\n            var text = (from object? item in items select item as LocalResourcePackEntry).Aggregate(string.Empty,\n                (current, mod) => current + $\"• {Path.GetFileName(mod.Name)}\\n\");\n\n            var title = YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows\n                ? MainLang.MoveToRecycleBin\n                : MainLang.DeleteSelect;\n            var dialog = await ShowDialogAsync(title, text, b_cancel: MainLang.Cancel,\n                b_primary: MainLang.Ok);\n            if (dialog != ContentDialogResult.Primary) return;\n\n            foreach (var item in items)\n            {\n                var file = item as LocalResourcePackEntry;\n                if (YMCL.Public.Const.Data.DesktopType == DesktopRunnerType.Windows)\n                {\n                    try\n                    {\n                        FileSystem.DeleteFile(file.Path, UIOption.AllDialogs, RecycleOption.SendToRecycleBin);\n                    }\n                    catch (OperationCanceledException)\n                    {\n                    }\n                }\n                else\n                {\n                    File.Delete(file.Path);\n                }\n            }\n\n            LoadItems();\n        };\n        ModManageList.SelectionChanged += (_, _) =>\n        {\n            SelectedModCount.Text = $\"{MainLang.SelectedItem} {ModManageList.SelectedItems.Count}\";\n        };\n        SelectedModCount.Text = $\"{MainLang.SelectedItem} 0\";\n    }\n\n    private void LoadItems()\n    {\n        _items.Clear();\n\n        var files = Directory.GetFiles(\n            Public.Module.Mc.Utils.GetMinecraftSpecialFolder(_entry, GameSpecialFolder.ShaderPacksFolder)\n            , \"*.*\", System.IO.SearchOption.AllDirectories);\n        foreach (var file in files)\n\n            if (Path.GetExtension(file) == \".zip\")\n                _items.Add(new LocalResourcePackEntry\n                {\n                    Name = Path.GetFileName(file)[..(Path.GetFileName(file).Length - 4)], Path = file,\n                    Icon = null, Description = $\"{MainLang.ImportTime}: {new FileInfo(file).CreationTime}\"\n                });\n\n        FilterItems();\n    }\n\n    private void FilterItems()\n    {\n        FilteredItems.Clear();\n        _items.Where(item => item.Name.Contains(Filter, StringComparison.OrdinalIgnoreCase))\n            .ToList().OrderBy(mod => mod.Name).ToList().ForEach(mod => FilteredItems.Add(mod));\n        NoMatchResultTip.IsVisible = FilteredItems.Count == 0;\n        SelectedModCount.Text = $\"{MainLang.SelectedItem} {ModManageList.SelectedItems.Count}\";\n    }\n\n\n    public new event PropertyChangedEventHandler? PropertyChanged;\n\n    private void OnPropertyChanged([CallerMemberName] string? propertyName = null)\n    {\n        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));\n    }\n\n    private void SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)\n    {\n        if (EqualityComparer<T>.Default.Equals(field, value)) return;\n        field = value;\n        OnPropertyChanged(propertyName);\n    }\n\n    public ShaderPack()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/More.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.More\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            DockPanel.Dock=\"Top\"\n            Height=\"40\"\n            Margin=\"10,10,10,0\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            VerticalAlignment=\"Top\">\n            <ui:NavigationView\n                AlwaysShowHeader=\"False\"\n                Background=\"{DynamicResource 1x}\"\n                IsBackButtonVisible=\"False\"\n                IsBackEnabled=\"False\"\n                IsPaneToggleButtonVisible=\"False\"\n                IsSettingsVisible=\"False\"\n                PaneDisplayMode=\"Top\"\n                SelectionFollowsFocus=\"False\"\n                x:Name=\"Nav\">\n                <ui:NavigationView.MenuItems>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavTreasureBox\"\n                        Tag=\"treasureBox\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 11.25 3.125 C 11.25 2.929688 11.289062 2.775066 11.367188 2.661133 C 11.445312 2.547201 11.546224 2.454428 11.669922 2.382812 C 11.793619 2.311199 11.931966 2.246094 12.084961 2.1875 C 12.237955 2.128906 12.392578 2.055664 12.548828 1.967773 C 12.705078 1.879883 12.854817 1.764324 12.998047 1.621094 C 13.141275 1.477865 13.261718 1.282553 13.359375 1.035156 L 13.544922 0.566406 C 13.616535 0.397137 13.72884 0.268555 13.881836 0.180664 C 14.03483 0.092773 14.199219 0.048828 14.375 0.048828 C 14.557291 0.048828 14.724934 0.094402 14.87793 0.185547 C 15.030924 0.276693 15.143229 0.406902 15.214844 0.576172 L 15.390625 1.035156 C 15.48177 1.276043 15.59733 1.466473 15.737305 1.606445 C 15.877278 1.74642 16.025391 1.860352 16.181641 1.948242 C 16.337891 2.036133 16.494141 2.111004 16.650391 2.172852 C 16.806641 2.234701 16.948242 2.303061 17.075195 2.37793 C 17.202148 2.452801 17.304688 2.547201 17.382812 2.661133 C 17.460938 2.775066 17.5 2.929688 17.5 3.125 C 17.5 3.307293 17.447916 3.473309 17.34375 3.623047 C 17.239582 3.772787 17.102863 3.883465 16.933594 3.955078 L 16.464844 4.140625 C 16.217447 4.238281 16.023762 4.358725 15.883789 4.501953 C 15.743814 4.645183 15.628254 4.794922 15.537109 4.951172 C 15.445963 5.107422 15.372721 5.262045 15.317383 5.415039 C 15.262043 5.568035 15.196939 5.706381 15.12207 5.830078 C 15.0472 5.953776 14.952799 6.054688 14.838867 6.132812 C 14.724935 6.210938 14.570312 6.25 14.375 6.25 C 14.192708 6.25 14.026692 6.197917 13.876953 6.09375 C 13.727213 5.989584 13.616535 5.852865 13.544922 5.683594 C 13.466797 5.501303 13.395182 5.332032 13.330078 5.175781 C 13.264974 5.019532 13.188477 4.877931 13.100586 4.750977 C 13.012695 4.624024 12.905273 4.510092 12.77832 4.40918 C 12.651367 4.308269 12.486979 4.21875 12.285156 4.140625 C 12.161457 4.088543 12.03776 4.038087 11.914062 3.989258 C 11.790364 3.94043 11.679688 3.878582 11.582031 3.803711 C 11.484375 3.728842 11.404622 3.637695 11.342773 3.530273 C 11.280924 3.422852 11.25 3.287762 11.25 3.125 Z M 0.15625 3.125 C 0.15625 2.994793 0.201823 2.884115 0.292969 2.792969 C 0.384115 2.701824 0.494792 2.65625 0.625 2.65625 C 0.729167 2.65625 0.825195 2.631836 0.913086 2.583008 C 1.000977 2.53418 1.080729 2.473959 1.152344 2.402344 C 1.25 2.304688 1.315104 2.197266 1.347656 2.080078 C 1.380208 1.962891 1.411133 1.853842 1.44043 1.75293 C 1.469727 1.65202 1.512044 1.569012 1.567383 1.503906 C 1.622721 1.438803 1.72526 1.40625 1.875 1.40625 C 2.005208 1.40625 2.115885 1.451824 2.207031 1.542969 C 2.298177 1.634115 2.34375 1.744793 2.34375 1.875 C 2.34375 1.979168 2.368164 2.075195 2.416992 2.163086 C 2.46582 2.250977 2.526042 2.33073 2.597656 2.402344 C 2.695312 2.5 2.802734 2.565105 2.919922 2.597656 C 3.037109 2.630209 3.146159 2.661133 3.24707 2.69043 C 3.347981 2.719727 3.430989 2.762045 3.496094 2.817383 C 3.561198 2.872723 3.59375 2.975262 3.59375 3.125 C 3.59375 3.255209 3.548177 3.365887 3.457031 3.457031 C 3.365885 3.548178 3.255208 3.59375 3.125 3.59375 C 3.020833 3.59375 2.924805 3.618164 2.836914 3.666992 C 2.749023 3.71582 2.669271 3.776043 2.597656 3.847656 C 2.5 3.945312 2.434896 4.052734 2.402344 4.169922 C 2.369792 4.287109 2.338867 4.396159 2.30957 4.49707 C 2.280273 4.597982 2.237956 4.68099 2.182617 4.746094 C 2.127279 4.811198 2.02474 4.84375 1.875 4.84375 C 1.751302 4.84375 1.642253 4.79655 1.547852 4.702148 C 1.45345 4.607748 1.40625 4.498699 1.40625 4.375 C 1.40625 4.283855 1.383464 4.191082 1.337891 4.09668 C 1.292318 4.002279 1.232096 3.917645 1.157227 3.842773 C 1.082357 3.767904 0.997721 3.707684 0.90332 3.662109 C 0.808919 3.616537 0.716146 3.59375 0.625 3.59375 C 0.501302 3.59375 0.392253 3.546551 0.297852 3.452148 C 0.203451 3.357748 0.15625 3.248699 0.15625 3.125 Z M 15.683594 3.125 C 15.403645 2.981771 15.151366 2.797852 14.926758 2.573242 C 14.702147 2.348633 14.518229 2.096355 14.375 1.816406 C 14.0625 2.376303 13.626302 2.8125 13.066406 3.125 C 13.346354 3.26823 13.597005 3.453777 13.818359 3.681641 C 14.039713 3.909506 14.22526 4.160156 14.375 4.433594 C 14.518229 4.153646 14.702147 3.901367 14.926758 3.676758 C 15.151366 3.452148 15.403645 3.26823 15.683594 3.125 Z M 6.162109 11.855469 C 6.162109 11.71875 6.199544 11.601562 6.274414 11.503906 C 6.349283 11.40625 6.445312 11.331381 6.5625 11.279297 C 7.024739 11.064453 7.464192 10.818686 7.880859 10.541992 C 8.297525 10.2653 8.662109 9.946289 8.974609 9.584961 C 9.287109 9.223633 9.536133 8.819987 9.72168 8.374023 C 9.907227 7.928061 10 7.428386 10 6.875 C 10 6.55599 9.969075 6.214193 9.907227 5.849609 C 9.845377 5.485026 9.739583 5.146484 9.589844 4.833984 C 9.440104 4.521484 9.233398 4.262695 8.969727 4.057617 C 8.706055 3.852539 8.37565 3.75 7.978516 3.75 C 7.73112 3.75 7.503255 3.774414 7.294922 3.823242 C 7.086588 3.87207 6.904297 3.951824 6.748047 4.0625 C 6.591797 4.173178 6.469727 4.319662 6.381836 4.501953 C 6.293945 4.684245 6.25 4.912109 6.25 5.185547 C 6.25 5.302734 6.269531 5.424805 6.308594 5.551758 C 6.347656 5.678711 6.404622 5.792644 6.479492 5.893555 C 6.554361 5.994467 6.645507 6.079102 6.75293 6.147461 C 6.860351 6.21582 6.982421 6.25 7.119141 6.25 C 7.307942 6.25 7.451172 6.214193 7.548828 6.142578 C 7.646484 6.070964 7.732747 5.991211 7.807617 5.90332 C 7.882487 5.81543 7.960612 5.73405 8.041992 5.65918 C 8.123372 5.584311 8.242188 5.546875 8.398438 5.546875 C 8.574219 5.546875 8.72233 5.608725 8.842773 5.732422 C 8.963216 5.85612 9.023438 6.002604 9.023438 6.171875 C 9.023438 6.24349 9.010416 6.31185 8.984375 6.376953 C 8.958333 6.442058 8.925781 6.503906 8.886719 6.5625 C 8.678385 6.86849 8.419596 7.101238 8.110352 7.260742 C 7.801106 7.420248 7.460937 7.5 7.089844 7.5 C 6.796875 7.5 6.523437 7.434896 6.269531 7.304688 C 6.015625 7.17448 5.794271 7.003582 5.605469 6.791992 C 5.416667 6.580404 5.268555 6.341146 5.161133 6.074219 C 5.053711 5.807293 5 5.533855 5 5.253906 C 5 4.804688 5.07487 4.40918 5.224609 4.067383 C 5.374349 3.725586 5.581055 3.4375 5.844727 3.203125 C 6.108398 2.96875 6.422525 2.792969 6.787109 2.675781 C 7.151692 2.558594 7.548828 2.5 7.978516 2.5 C 8.369141 2.5 8.720703 2.558594 9.033203 2.675781 C 9.345703 2.792969 9.624023 2.95573 9.868164 3.164062 C 10.112305 3.372396 10.320638 3.61491 10.493164 3.891602 C 10.665689 4.168295 10.808919 4.466146 10.922852 4.785156 C 11.036783 5.104168 11.119791 5.434571 11.171875 5.776367 C 11.223958 6.118165 11.25 6.458334 11.25 6.796875 C 11.25 7.330729 11.191406 7.84017 11.074219 8.325195 C 10.957031 8.810222 10.742188 9.277344 10.429688 9.726562 C 10.188802 10.078125 9.921875 10.408529 9.628906 10.717773 C 9.335938 11.027019 9.013672 11.298828 8.662109 11.533203 C 8.583984 11.585287 8.458658 11.665039 8.286133 11.772461 C 8.113606 11.879883 7.932942 11.985678 7.744141 12.089844 C 7.555338 12.194011 7.373047 12.285156 7.197266 12.363281 C 7.021484 12.441406 6.888021 12.480469 6.796875 12.480469 C 6.621093 12.480469 6.471354 12.420248 6.347656 12.299805 C 6.223958 12.179362 6.162109 12.03125 6.162109 11.855469 Z M 16.40625 6.875 C 16.40625 6.744792 16.451822 6.634115 16.542969 6.542969 C 16.634113 6.451824 16.744791 6.406251 16.875 6.40625 C 16.979166 6.406251 17.075195 6.381837 17.163086 6.333008 C 17.250977 6.284181 17.330729 6.223959 17.402344 6.152344 C 17.5 6.054688 17.565104 5.947266 17.597656 5.830078 C 17.630207 5.712891 17.661133 5.603842 17.69043 5.50293 C 17.719727 5.40202 17.762043 5.319012 17.817383 5.253906 C 17.872721 5.188803 17.97526 5.15625 18.125 5.15625 C 18.255207 5.15625 18.365885 5.201823 18.457031 5.292969 C 18.548176 5.384115 18.59375 5.494792 18.59375 5.625 C 18.59375 5.729167 18.618164 5.825195 18.666992 5.913086 C 18.71582 6.000977 18.776041 6.080729 18.847656 6.152344 C 18.945312 6.25 19.052734 6.315104 19.169922 6.347656 C 19.287109 6.380209 19.396158 6.411133 19.49707 6.44043 C 19.59798 6.469727 19.680988 6.512045 19.746094 6.567383 C 19.811197 6.622722 19.84375 6.725261 19.84375 6.875 C 19.84375 7.005209 19.798176 7.115886 19.707031 7.207031 C 19.615885 7.298178 19.505207 7.343751 19.375 7.34375 C 19.270832 7.343751 19.174805 7.368165 19.086914 7.416992 C 18.999023 7.465821 18.91927 7.526043 18.847656 7.597656 C 18.75 7.695312 18.684895 7.802734 18.652344 7.919922 C 18.619791 8.037109 18.588867 8.146159 18.55957 8.24707 C 18.530273 8.347982 18.487955 8.43099 18.432617 8.496094 C 18.377277 8.561198 18.274738 8.59375 18.125 8.59375 C 18.001301 8.59375 17.892252 8.54655 17.797852 8.452148 C 17.703449 8.357748 17.65625 8.248698 17.65625 8.125 C 17.65625 8.033855 17.633463 7.941082 17.587891 7.84668 C 17.542316 7.752279 17.482096 7.667644 17.407227 7.592773 C 17.332355 7.517904 17.247721 7.457683 17.15332 7.412109 C 17.058918 7.366537 16.966145 7.343751 16.875 7.34375 C 16.751301 7.343751 16.642252 7.296551 16.547852 7.202148 C 16.453449 7.107748 16.40625 6.998698 16.40625 6.875 Z M 5.556641 20 C 5.133463 20 4.736328 19.915365 4.365234 19.746094 C 3.99414 19.576822 3.670247 19.348959 3.393555 19.0625 C 3.116862 18.776041 2.898763 18.44401 2.739258 18.066406 C 2.579752 17.688803 2.5 17.291666 2.5 16.875 L 2.5 10.888672 L 1.064453 12.314453 C 0.940755 12.438151 0.794271 12.5 0.625 12.5 C 0.455729 12.5 0.309245 12.438151 0.185547 12.314453 C 0.061849 12.190756 0 12.044271 0 11.875 C 0 11.705729 0.061849 11.559245 0.185547 11.435547 L 2.685547 8.935547 C 2.809245 8.81185 2.955729 8.75 3.125 8.75 L 8.027344 8.75 C 7.552083 9.277344 6.995442 9.694011 6.357422 10 L 3.75 10 L 3.75 16.875 C 3.75 17.128906 3.798828 17.369791 3.896484 17.597656 C 3.99414 17.825521 4.129231 18.025717 4.301758 18.198242 C 4.474284 18.370768 4.674479 18.505859 4.902344 18.603516 C 5.130208 18.701172 5.371094 18.75 5.625 18.75 L 14.375 18.75 C 14.628906 18.75 14.869791 18.701172 15.097656 18.603516 C 15.32552 18.505859 15.525715 18.370768 15.698242 18.198242 C 15.870768 18.025717 16.005859 17.825521 16.103516 17.597656 C 16.201172 17.369791 16.25 17.128906 16.25 16.875 L 16.25 10 L 11.699219 10 C 11.809896 9.804688 11.90918 9.601237 11.99707 9.389648 C 12.08496 9.178061 12.161457 8.964844 12.226562 8.75 L 16.875 8.75 C 17.04427 8.75 17.190754 8.81185 17.314453 8.935547 L 19.814453 11.435547 C 19.93815 11.559245 20 11.705729 20 11.875 C 20 12.044271 19.93815 12.190756 19.814453 12.314453 C 19.690754 12.438151 19.54427 12.5 19.375 12.5 C 19.205729 12.5 19.059244 12.438151 18.935547 12.314453 L 17.5 10.888672 L 17.5 16.943359 C 17.5 17.353516 17.416992 17.744141 17.250977 18.115234 C 17.084961 18.486328 16.863605 18.810221 16.586914 19.086914 C 16.310221 19.363607 15.986327 19.584961 15.615234 19.750977 C 15.24414 19.916992 14.853515 20 14.443359 20 Z \"\n                                Height=\"15\"\n                                Width=\"15\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"6,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.TreasureBox}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavGameUpdateLog\"\n                        Tag=\"gameUpdateLog\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 15.078125 1.25 C 15.566406 1.25 16.033527 1.349285 16.479492 1.547852 C 16.925455 1.74642 17.31608 2.013348 17.651367 2.348633 C 17.986652 2.68392 18.25358 3.074545 18.452148 3.520508 C 18.650715 3.966473 18.75 4.433594 18.75 4.921875 L 18.75 15.078125 C 18.75 15.566406 18.650715 16.033529 18.452148 16.479492 C 18.25358 16.925455 17.986652 17.31608 17.651367 17.651367 C 17.31608 17.986654 16.925455 18.25358 16.479492 18.452148 C 16.033527 18.650717 15.566406 18.75 15.078125 18.75 L 4.921875 18.75 C 4.433594 18.75 3.966471 18.650717 3.520508 18.452148 C 3.074544 18.25358 2.683919 17.986654 2.348633 17.651367 C 2.013346 17.31608 1.746419 16.925455 1.547852 16.479492 C 1.349284 16.033529 1.25 15.566406 1.25 15.078125 L 1.25 4.921875 C 1.25 4.433594 1.349284 3.966473 1.547852 3.520508 C 1.746419 3.074545 2.013346 2.68392 2.348633 2.348633 C 2.683919 2.013348 3.074544 1.74642 3.520508 1.547852 C 3.966471 1.349285 4.433594 1.25 4.921875 1.25 Z M 4.951172 2.5 C 4.619141 2.5 4.303385 2.568359 4.003906 2.705078 C 3.704427 2.841797 3.44401 3.02409 3.222656 3.251953 C 3.001302 3.479818 2.825521 3.745117 2.695312 4.047852 C 2.565104 4.350587 2.5 4.66797 2.5 5 L 17.5 5 L 17.5 4.951172 C 17.5 4.625651 17.433268 4.314779 17.299805 4.018555 C 17.16634 3.722332 16.987305 3.461914 16.762695 3.237305 C 16.538086 3.012695 16.277668 2.83366 15.981445 2.700195 C 15.685221 2.566732 15.374349 2.5 15.048828 2.5 Z M 15.048828 17.5 C 15.374349 17.5 15.685221 17.433268 15.981445 17.299805 C 16.277668 17.166342 16.538086 16.987305 16.762695 16.762695 C 16.987305 16.538086 17.16634 16.27767 17.299805 15.981445 C 17.433268 15.685222 17.5 15.37435 17.5 15.048828 L 17.5 6.25 L 2.5 6.25 L 2.5 15.048828 C 2.5 15.37435 2.566732 15.685222 2.700195 15.981445 C 2.833659 16.27767 3.012695 16.538086 3.237305 16.762695 C 3.461914 16.987305 3.722331 17.166342 4.018555 17.299805 C 4.314778 17.433268 4.625651 17.5 4.951172 17.5 Z M 5 10 C 5 9.824219 5.032552 9.661459 5.097656 9.511719 C 5.16276 9.361979 5.252278 9.230144 5.366211 9.116211 C 5.480143 9.002279 5.613606 8.912761 5.766602 8.847656 C 5.919596 8.782553 6.083984 8.75 6.259766 8.75 C 6.435547 8.75 6.598307 8.782553 6.748047 8.847656 C 6.897786 8.912761 7.027994 9.000651 7.138672 9.111328 C 7.249349 9.222006 7.337239 9.352214 7.402344 9.501953 C 7.467447 9.651693 7.5 9.814453 7.5 9.990234 C 7.5 10.166016 7.467447 10.330404 7.402344 10.483398 C 7.337239 10.636394 7.247721 10.769857 7.133789 10.883789 C 7.019856 10.997722 6.888021 11.08724 6.738281 11.152344 C 6.588542 11.217448 6.425781 11.25 6.25 11.25 C 6.074219 11.25 5.909831 11.217448 5.756836 11.152344 C 5.603841 11.08724 5.472005 10.99935 5.361328 10.888672 C 5.250651 10.777995 5.16276 10.646159 5.097656 10.493164 C 5.032552 10.34017 5 10.175781 5 10 Z M 8.75 10 C 8.75 9.824219 8.782552 9.661459 8.847656 9.511719 C 8.91276 9.361979 9.002278 9.230144 9.116211 9.116211 C 9.230143 9.002279 9.363606 8.912761 9.516602 8.847656 C 9.669596 8.782553 9.833984 8.75 10.009766 8.75 C 10.185547 8.75 10.348307 8.782553 10.498047 8.847656 C 10.647786 8.912761 10.777994 9.000651 10.888672 9.111328 C 10.999349 9.222006 11.087239 9.352214 11.152344 9.501953 C 11.217447 9.651693 11.25 9.814453 11.25 9.990234 C 11.25 10.166016 11.217447 10.330404 11.152344 10.483398 C 11.087239 10.636394 10.997721 10.769857 10.883789 10.883789 C 10.769856 10.997722 10.638021 11.08724 10.488281 11.152344 C 10.338541 11.217448 10.175781 11.25 10 11.25 C 9.824219 11.25 9.65983 11.217448 9.506836 11.152344 C 9.353841 11.08724 9.222005 10.99935 9.111328 10.888672 C 9.00065 10.777995 8.91276 10.646159 8.847656 10.493164 C 8.782552 10.34017 8.75 10.175781 8.75 10 Z M 15 9.990234 C 14.999999 10.166016 14.967447 10.330404 14.902344 10.483398 C 14.837239 10.636394 14.747721 10.769857 14.633789 10.883789 C 14.519856 10.997722 14.388021 11.08724 14.238281 11.152344 C 14.088541 11.217448 13.925781 11.25 13.75 11.25 C 13.574219 11.25 13.40983 11.217448 13.256836 11.152344 C 13.103841 11.08724 12.972005 10.99935 12.861328 10.888672 C 12.75065 10.777995 12.66276 10.646159 12.597656 10.493164 C 12.532552 10.34017 12.5 10.175781 12.5 10 C 12.5 9.824219 12.532552 9.661459 12.597656 9.511719 C 12.66276 9.361979 12.752278 9.230144 12.866211 9.116211 C 12.980143 9.002279 13.113605 8.912761 13.266602 8.847656 C 13.419596 8.782553 13.583984 8.75 13.759766 8.75 C 13.935547 8.75 14.098307 8.782553 14.248047 8.847656 C 14.397785 8.912761 14.527994 9.000651 14.638672 9.111328 C 14.749349 9.222006 14.837239 9.352214 14.902344 9.501953 C 14.967447 9.651693 14.999999 9.814453 15 9.990234 Z M 7.5 13.75 C 7.5 13.925781 7.467447 14.088542 7.402344 14.238281 C 7.337239 14.388021 7.247721 14.519857 7.133789 14.633789 C 7.019856 14.747722 6.886393 14.83724 6.733398 14.902344 C 6.580403 14.967448 6.416015 15 6.240234 15 C 6.064453 15 5.901692 14.967448 5.751953 14.902344 C 5.602213 14.83724 5.472005 14.74935 5.361328 14.638672 C 5.250651 14.527995 5.16276 14.397787 5.097656 14.248047 C 5.032552 14.098308 5 13.935547 5 13.759766 C 5 13.583984 5.032552 13.419597 5.097656 13.266602 C 5.16276 13.113607 5.252278 12.980144 5.366211 12.866211 C 5.480143 12.752279 5.611979 12.662761 5.761719 12.597656 C 5.911458 12.532553 6.074219 12.5 6.25 12.5 C 6.425781 12.5 6.590169 12.532553 6.743164 12.597656 C 6.896158 12.662761 7.027994 12.750651 7.138672 12.861328 C 7.249349 12.972006 7.337239 13.103842 7.402344 13.256836 C 7.467447 13.409831 7.5 13.574219 7.5 13.75 Z M 11.25 13.75 C 11.25 13.925781 11.217447 14.088542 11.152344 14.238281 C 11.087239 14.388021 10.997721 14.519857 10.883789 14.633789 C 10.769856 14.747722 10.636393 14.83724 10.483398 14.902344 C 10.330403 14.967448 10.166016 15 9.990234 15 C 9.814453 15 9.651692 14.967448 9.501953 14.902344 C 9.352213 14.83724 9.222005 14.74935 9.111328 14.638672 C 9.00065 14.527995 8.91276 14.397787 8.847656 14.248047 C 8.782552 14.098308 8.75 13.935547 8.75 13.759766 C 8.75 13.583984 8.782552 13.419597 8.847656 13.266602 C 8.91276 13.113607 9.002278 12.980144 9.116211 12.866211 C 9.230143 12.752279 9.361979 12.662761 9.511719 12.597656 C 9.661458 12.532553 9.824219 12.5 10 12.5 C 10.175781 12.5 10.340169 12.532553 10.493164 12.597656 C 10.646158 12.662761 10.777994 12.750651 10.888672 12.861328 C 10.999349 12.972006 11.087239 13.103842 11.152344 13.256836 C 11.217447 13.409831 11.25 13.574219 11.25 13.75 Z \"\n                                Height=\"15\"\n                                Width=\"15\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.GameUpdateLog}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                </ui:NavigationView.MenuItems>\n            </ui:NavigationView>\n        </Border>\n        <ContentControl\n            DockPanel.Dock=\"Bottom\"\n            Margin=\"0,10,0,0\"\n            Name=\"FrameView\" />\n    </DockPanel>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/More.axaml.cs",
    "content": "﻿using FluentAvalonia.UI.Controls;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Views.Main.Pages;\n\npublic partial class More : UserControl\n{\n    public readonly MorePages.TreasureBox _treasureBox = new();\n    public readonly MorePages.GameUpdateLog _gameUpdateLog = new();\n    public NavigationView NavigationView => Nav;\n    public ContentControl Frame => FrameView;\n\n    public More()\n    {\n        InitializeComponent();\n        FrameView.Content = _treasureBox;\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        Nav.SelectionChanged += (o, e) =>\n        {\n            var tag = ((e.SelectedItem as NavigationViewItem).Tag as string)!;\n            UserControl page = tag switch\n            {\n                \"treasureBox\" => _treasureBox,\n                \"gameUpdateLog\" => _gameUpdateLog,\n                _ => null\n            };\n            if (page == null) return;\n            FrameView.Content = page;\n            _ = Animator.PageLoading.LevelTwoPage(page);\n        };\n        Loaded += (_, _) =>\n        {\n            _ = Animator.PageLoading.LevelTwoPage(FrameView.Content as UserControl);\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MorePages/GameUpdateLog.axaml",
    "content": "<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.MorePages.GameUpdateLog\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid Opacity=\"{DynamicResource MainOpacity}\">\n        <ScrollViewer>\n            <WrapPanel\n                HorizontalAlignment=\"Center\"\n                Margin=\"10,0,10,10\"\n                Name=\"Container\"\n                VerticalAlignment=\"Top\">\n                <WrapPanel.Transitions>\n                    <Transitions>\n                        <DoubleTransition Duration=\"0:0:0.3\" Property=\"Opacity\" />\n                    </Transitions>\n                </WrapPanel.Transitions>\n            </WrapPanel>\n        </ScrollViewer>\n        <ui:ProgressRing\n            Height=\"48\"\n            Name=\"Loading\"\n            Width=\"48\" />\n        <ui:InfoBar\n            FontWeight=\"Light\"\n            IsClosable=\"False\"\n            IsOpen=\"True\"\n            IsVisible=\"False\"\n            Margin=\"10,0\"\n            Message=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LoadFail}\"\n            Name=\"LoadErrorInfoBar\"\n            Severity=\"Error\">\n            <ui:InfoBar.ActionButton>\n                <Button\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Reload}\"\n                    HorizontalAlignment=\"Right\"\n                    Name=\"ReloadBtn\" />\n            </ui:InfoBar.ActionButton>\n        </ui:InfoBar>\n        <Border\n            IsVisible=\"False\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            x:Name=\"Detail\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"8\"\n                Margin=\"10,0,10,10\">\n                <Grid>\n                    <Button\n                        Classes=\"custom-button\"\n                        Content=\"F1 M 20 8.75 C 20 8.925781 19.967447 9.088542 19.902344 9.238281 C 19.837238 9.388021 19.747721 9.519857 19.633789 9.633789 C 19.519855 9.747722 19.38802 9.83724 19.238281 9.902344 C 19.088541 9.967448 18.925781 10 18.75 10 L 4.267578 10 L 9.638672 15.361328 C 9.749349 15.472006 9.838867 15.605469 9.907227 15.761719 C 9.975586 15.917969 10.009766 16.077475 10.009766 16.240234 C 10.009766 16.409506 9.975586 16.570639 9.907227 16.723633 C 9.838867 16.876629 9.747721 17.010092 9.633789 17.124023 C 9.519856 17.237955 9.386393 17.329102 9.233398 17.397461 C 9.080403 17.46582 8.919271 17.5 8.75 17.5 C 8.411458 17.5 8.118489 17.376303 7.871094 17.128906 L 0.371094 9.628906 C 0.123698 9.381511 0 9.085287 0 8.740234 C 0 8.577475 0.03418 8.417969 0.102539 8.261719 C 0.170898 8.105469 0.260417 7.972006 0.371094 7.861328 L 7.871094 0.361328 C 8.118489 0.113934 8.414713 -0.009766 8.759766 -0.009766 C 8.929036 -0.009766 9.088541 0.024414 9.238281 0.092773 C 9.388021 0.161133 9.519856 0.252279 9.633789 0.366211 C 9.747721 0.480145 9.838867 0.61198 9.907227 0.761719 C 9.975586 0.911459 10.009766 1.070965 10.009766 1.240234 C 10.009766 1.585287 9.886067 1.881512 9.638672 2.128906 L 4.267578 7.5 L 18.75 7.5 C 18.91927 7.5 19.080402 7.532553 19.233398 7.597656 C 19.386393 7.662762 19.519855 7.752279 19.633789 7.866211 C 19.747721 7.980144 19.837238 8.113607 19.902344 8.266602 C 19.967447 8.419597 20 8.580729 20 8.75 Z \"\n                        HorizontalAlignment=\"Left\"\n                        Margin=\"8,2,0,0\"\n                        Name=\"CloseButton\"\n                        VerticalAlignment=\"Top\" />\n                    <ScrollViewer Margin=\"80,30,20,20\">\n                        <StackPanel Name=\"DataPanel\" />\n                    </ScrollViewer>\n                    <ui:ProgressRing\n                        Height=\"48\"\n                        Name=\"DetailLoading\"\n                        Width=\"48\" />\n                </Grid>\n            </Border>\n        </Border>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MorePages/GameUpdateLog.axaml.cs",
    "content": "using System.Collections.Generic;\nusing System.Net.Http;\nusing System.Text;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Input;\nusing Avalonia.Layout;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Threading;\nusing HtmlAgilityPack;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Classes.Json;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.Util.Extension;\n\nnamespace YMCL.Views.Main.Pages.MorePages;\n\npublic partial class GameUpdateLog : UserControl\n{\n    private readonly List<SelectableTextBlock> _translateList = [];\n    private readonly List<SelectableTextBlock> _tbList = [];\n    private readonly List<Border> _bList = [];\n    private string _nowJsonPath = \"\";\n\n    public GameUpdateLog()\n    {\n        InitializeComponent();\n        ControlProperty();\n        BindingEvent();\n        _ = LoadNews();\n    }\n\n    public async System.Threading.Tasks.Task LoadNews()\n    {\n        try\n        {\n            _tbList.Clear();\n            _bList.Clear();\n            LoadErrorInfoBar.IsVisible = false;\n            Loading.IsVisible = true;\n            using var client = new HttpClient();\n            var json = await client.GetStringAsync(\"https://launchercontent.mojang.com/v2/javaPatchNotes.json\");\n            var news = JsonConvert.DeserializeObject<MojangJavaNews.Root>(json);\n            // var news = JsonConvert.DeserializeObject<MojangJavaNews.Root>(File.ReadAllText(\"E:\\\\Untitled-3.json\"));\n            foreach (var item in news.entries)\n            {\n                await Dispatcher.UIThread.InvokeAsync(() =>\n                {\n                    Application.Current.TryGetResource(\"1x\", Application.Current.ActualThemeVariant, out var c);\n                    var root = new Border()\n                    {\n                        Width = 200, Height = 235, Tag = item.contentPath,\n                        Background = c as SolidColorBrush, Margin = new Thickness(0, 0, 10, 10),\n                        CornerRadius = new CornerRadius(8), ClipToBounds = true,\n                        Opacity = 1.0\n                    };\n                    _bList.Add(root);\n                    root.PointerPressed += NewsEntryClick;\n                    var panel = new StackPanel();\n                    root.Child = panel;\n                    panel.Children.Add(new Border()\n                    {\n                        CornerRadius = new CornerRadius(8), ClipToBounds = true, Width = 160, Height = 160,\n                        Margin = new Thickness(20, 20, 20, 10),\n                        Child = new AsyncImageLoader.AdvancedImage(new Uri(\"https://launchercontent.mojang.com\" +\n                                                                           item.image.url))\n                        {\n                            Width = 160, Height = 160,\n                            Source = \"https://launchercontent.mojang.com\" + item.image.url\n                        }\n                    });\n                    var tb = new SelectableTextBlock()\n                    {\n                        Text = item.title, FontSize = 14, Margin = new Thickness(5, 10, 5, 5),\n                        HorizontalAlignment = HorizontalAlignment.Center, MaxWidth = 170,\n                        TextTrimming = TextTrimming.LeadingCharacterEllipsis\n                    };\n                    _tbList.Add(tb);\n                    panel.Children.Add(tb);\n                    Container.Children.Add(root);\n                });\n            }\n\n            Loading.IsVisible = false;\n        }\n        catch\n        {\n            LoadErrorInfoBar.IsVisible = true;\n            Loading.IsVisible = false;\n        }\n    }\n\n    private SelectableTextBlock AddToTranslate(SelectableTextBlock textBlock)\n    {\n        _translateList.Add(textBlock);\n        return textBlock;\n    }\n\n    private void StartTranslate()\n    {\n        if (Data.SettingEntry.Language.Code == \"en-US\") return;\n\n        async System.Threading.Tasks.Task Translate(SelectableTextBlock textBlock)\n        {\n            if (string.IsNullOrWhiteSpace(Data.TranslateToken)) return;\n            try\n            {\n                var handler = new HttpClientHandler();\n                handler.ServerCertificateCustomValidationCallback =\n                    (_, _, _, _) => true;\n                using var client = new HttpClient(handler);\n                client.DefaultRequestHeaders.Add(\"Authorization\", Data.TranslateToken);\n                var response =\n                    await client.PostAsync(\n                        $\"https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to={Data.SettingEntry.Language.Code}&textType=plain\",\n                        new StringContent($\"[{{\\\"Text\\\": \\\"{textBlock.Text}\\\"}}]\", Encoding.UTF8, \"application/json\"));\n                var responseContent = await response.Content.ReadAsStringAsync();\n                var translatedText =\n                    ((JObject)JArray.Parse(responseContent)[0][\"translations\"][0])[\"text\"].ToString();\n                if (!string.IsNullOrWhiteSpace(translatedText))\n                {\n                    textBlock.Text = translatedText;\n                }\n            }\n            catch\n            {\n            }\n        }\n\n        System.Threading.Tasks.Task.Run(() =>\n        {\n            Dispatcher.UIThread.Invoke(() =>\n            {\n                var task = new List<System.Threading.Tasks.Task>();\n                _translateList.ForEach(x => { task.Add(Translate(x)); });\n                System.Threading.Tasks.Task.WhenAll(task.ToArray());\n            }, DispatcherPriority.ApplicationIdle);\n        });\n    }\n\n\n    private async void NewsEntryClick(object? sender, PointerPressedEventArgs e)\n    {\n        try\n        {\n            DetailLoading.IsVisible = true;\n            _ = Public.Module.Ui.Animator.PageLoading.LevelTwoPage(Detail);\n            Detail.IsVisible = true;\n            Detail.Opacity = 1.0;\n            Container.Opacity = 0;\n            _translateList.Clear();\n            DataPanel.Children.Clear();\n\n            _nowJsonPath = ((Border)sender).Tag.ToString();\n            var path = _nowJsonPath;\n            using var client = new HttpClient();\n            var json =\n                Data.NewsDataList.Find(a => a.Url == path)?.Data;\n            if (json == null)\n            {\n                json = await client.GetStringAsync(\"https://launchercontent.mojang.com/v2/\" + path);\n                Data.NewsDataList.Add(new NewsDataListEntry() { Url = path, Data = json });\n            }\n\n            if (path != _nowJsonPath) return;\n            JObject obj = JObject.Parse(json);\n\n            // 创建一个新的HtmlDocument对象\n            var htmlDoc = new HtmlDocument();\n            // 加载HTML内容\n            htmlDoc.LoadHtml(obj[\"body\"].ToString());\n            // 获取根节点\n            var rootNode = htmlDoc.DocumentNode;\n\n            // 创建StackPanel\n            var dataContainer = DataPanel!;\n\n            // 遍历所有节点\n            foreach (var node in rootNode.Descendants())\n            {\n                switch (node.Name)\n                {\n                    case \"p\":\n                        // 解析P标签\n                        dataContainer.Children.Add(AddToTranslate(new SelectableTextBlock\n                            { Text = node.InnerText, TextWrapping = TextWrapping.Wrap, Margin = new Thickness(0, 5) }));\n                        break;\n                    case \"h1\":\n                    case \"h2\":\n                    case \"h3\":\n                    case \"h4\":\n                    case \"h5\":\n                    case \"h6\":\n                        // 解析H1-H6标签，并根据H的级别调整文字大小\n                        var header = AddToTranslate(new SelectableTextBlock\n                            { Text = node.InnerText, Margin = new Thickness(0, 5), TextWrapping = TextWrapping.Wrap });\n                        switch (node.Name)\n                        {\n                            case \"h1\":\n                                header.FontSize = 24;\n                                break;\n                            case \"h2\":\n                                header.FontSize = 22;\n                                break;\n                            case \"h3\":\n                                header.FontSize = 20;\n                                break;\n                            case \"h4\":\n                                header.FontSize = 18;\n                                break;\n                            case \"h5\":\n                                header.FontSize = 16;\n                                break;\n                            case \"h6\":\n                                header.FontSize = 14;\n                                break;\n                        }\n\n                        dataContainer.Children.Add(header);\n                        break;\n                    case \"ul\":\n                    case \"ol\":\n                        // 解析UL和OL标签\n                        foreach (var listItem in node.Descendants(\"li\"))\n                        {\n                            var listParagraph = AddToTranslate(new SelectableTextBlock()\n                            {\n                                Margin = new Thickness(0, 5), Text = \"• \" + listItem.InnerText,\n                                TextWrapping = TextWrapping.Wrap\n                            });\n                            dataContainer.Children.Add(listParagraph);\n                        }\n\n                        break;\n                    case \"a\":\n                        // 解析A标签\n                        var hyperlink = new HyperlinkButton()\n                        {\n                            NavigateUri = new Uri(node.GetAttributeValue(\"href\", \"#\")),\n                            Content = new SelectableTextBlock\n                            {\n                                Text = node.InnerText, TextWrapping = TextWrapping.Wrap, TextDecorations = null,\n                                Foreground =\n                                    new SolidColorBrush((Color)Application.Current.Resources[\"SystemAccentColor\"]!)\n                            }\n                        };\n                        dataContainer.Children.Add(hyperlink);\n                        break;\n                }\n            }\n\n            DetailLoading.IsVisible = false;\n            StartTranslate();\n        }\n        catch (Exception exception)\n        {\n            Console.WriteLine(exception);\n        }\n    }\n\n    private void BindingEvent()\n    {\n        Application.Current.ActualThemeVariantChanged += (_, _) =>\n        {\n            Application.Current.TryGetResource(\"TextColor\", Application.Current.ActualThemeVariant,\n                out var c);\n            Application.Current.TryGetResource(\"1x\", Application.Current.ActualThemeVariant,\n                out var c1);\n            var color = (SolidColorBrush)c;\n            var color1 = (SolidColorBrush)c1;\n            _tbList.ForEach(a => { a.Foreground = color!; });\n            _bList.ForEach(a => { a.Background = color1!; });\n            _translateList.ForEach(a => { a.Foreground = color!; });\n        };\n        CloseButton.Click += (_, _) =>\n        {\n            _ = Public.Module.Ui.Animator.PageLoading.LevelTwoPage(Container);\n            Container.IsVisible = true;\n            Container.Opacity = 1.0;\n            Detail.Opacity = 0;\n            Detail.IsVisible = false;\n        };\n        ReloadBtn.Click += (_, _) => { _ = LoadNews(); };\n    }\n\n    private void ControlProperty()\n    {\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MorePages/TreasureBox.axaml",
    "content": "<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.MorePages.TreasureBox\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <ScrollViewer>\n        <StackPanel Margin=\"10,0,10,10\" Spacing=\"10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <StackPanel Margin=\"5,0,5,5\" Spacing=\"10\">\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"0,0,0,-5\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.TreasureBox}\" />\n                    <WrapPanel>\n                        <Button\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.TodayLuckyValue}\"\n                            Margin=\"0,0,10,0\"\n                            Name=\"TodayLuckyValueButton\" />\n                        <Button\n                            Classes=\"Danger\"\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NeverClick}\"\n                            Margin=\"0,0,10,0\"\n                            Name=\"NeverClickButton\" />\n                    </WrapPanel>\n                </StackPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <StackPanel Margin=\"5,0,5,5\" Spacing=\"10\">\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"0,0,0,-5\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.OneSentence}\" />\n                    <Border\n                        Background=\"{DynamicResource 2x}\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        Padding=\"6.5\">\n                        <DockPanel Margin=\"5,0,0,0\">\n                            <DockPanel DockPanel.Dock=\"Top\">\n                                <TextBlock Text=\"Hitokoto\" />\n                                <PathIcon\n                                    Data=\" F1 M 13.75 6.875 L 13.75 9.375 C 13.75 9.544271 13.68815 9.690756 13.564453 9.814453 C 13.440755 9.938151 13.294271 10 13.125 10 L 10.625 10 C 10.455729 10 10.309244 9.938151 10.185547 9.814453 C 10.061849 9.690756 10 9.544271 10 9.375 C 10 9.205729 10.061849 9.059245 10.185547 8.935547 C 10.309244 8.81185 10.455729 8.75 10.625 8.75 L 11.875 8.75 C 11.5625 8.359375 11.194661 8.053386 10.771484 7.832031 C 10.348307 7.610678 9.882812 7.5 9.375 7.5 C 9.016927 7.5 8.683268 7.552084 8.374023 7.65625 C 8.064778 7.760418 7.78483 7.908529 7.53418 8.100586 C 7.283528 8.292644 7.062174 8.522136 6.870117 8.789062 C 6.67806 9.05599 6.520182 9.352214 6.396484 9.677734 C 6.344401 9.807943 6.267903 9.912109 6.166992 9.990234 C 6.066081 10.068359 5.94401 10.107422 5.800781 10.107422 C 5.63151 10.107422 5.485026 10.047201 5.361328 9.926758 C 5.23763 9.806315 5.175781 9.661459 5.175781 9.492188 C 5.175781 9.433594 5.185547 9.36849 5.205078 9.296875 C 5.335286 8.847656 5.538737 8.435873 5.81543 8.061523 C 6.092122 7.687175 6.417643 7.364909 6.791992 7.094727 C 7.166341 6.824545 7.574869 6.616211 8.017578 6.469727 C 8.460286 6.323242 8.91276 6.25 9.375 6.25 C 9.960938 6.25 10.525716 6.362305 11.069336 6.586914 C 11.612955 6.811523 12.089844 7.135417 12.5 7.558594 C 12.5 7.5 12.498372 7.438151 12.495117 7.373047 C 12.491861 7.307943 12.490234 7.239584 12.490234 7.167969 C 12.490234 7.057292 12.496744 6.948242 12.509766 6.84082 C 12.522786 6.733398 12.550455 6.635742 12.592773 6.547852 C 12.63509 6.459961 12.698566 6.388347 12.783203 6.333008 C 12.867838 6.27767 12.981771 6.25 13.125 6.25 C 13.294271 6.25 13.440755 6.31185 13.564453 6.435547 C 13.68815 6.559245 13.75 6.705729 13.75 6.875 Z M 13.535156 11.894531 C 13.535155 11.959636 13.522135 12.027995 13.496094 12.099609 C 13.326822 12.542318 13.10384 12.942709 12.827148 13.300781 C 12.550455 13.658854 12.231445 13.963217 11.870117 14.213867 C 11.508789 14.464519 11.113281 14.658203 10.683594 14.794922 C 10.253906 14.931641 9.804688 15 9.335938 15 C 8.75651 15 8.199869 14.88444 7.666016 14.65332 C 7.132161 14.422201 6.660156 14.101562 6.25 13.691406 C 6.25 13.75 6.251627 13.81185 6.254883 13.876953 C 6.258138 13.942058 6.259766 14.010417 6.259766 14.082031 C 6.259766 14.192709 6.253255 14.303386 6.240234 14.414062 C 6.227213 14.52474 6.197917 14.624023 6.152344 14.711914 C 6.106771 14.799805 6.043294 14.869792 5.961914 14.921875 C 5.880534 14.973959 5.768229 15 5.625 15 C 5.455729 15 5.309245 14.938151 5.185547 14.814453 C 5.061849 14.690756 5 14.544271 5 14.375 L 5 11.875 C 5 11.770834 5.024414 11.676433 5.073242 11.591797 C 5.12207 11.507162 5.183919 11.437175 5.258789 11.381836 C 5.333659 11.326498 5.419922 11.28418 5.517578 11.254883 C 5.615234 11.225586 5.712891 11.210938 5.810547 11.210938 C 5.895182 11.210938 5.973307 11.223959 6.044922 11.25 L 8.125 11.25 C 8.294271 11.25 8.440755 11.31185 8.564453 11.435547 C 8.68815 11.559245 8.75 11.705729 8.75 11.875 C 8.75 12.044271 8.68815 12.190756 8.564453 12.314453 C 8.440755 12.438151 8.294271 12.5 8.125 12.5 L 6.875 12.5 C 7.19401 12.910156 7.569986 13.221029 8.00293 13.432617 C 8.435872 13.644206 8.91276 13.75 9.433594 13.75 C 9.759114 13.75 10.061849 13.701172 10.341797 13.603516 C 10.621744 13.505859 10.895182 13.365886 11.162109 13.183594 C 11.461588 12.975261 11.695963 12.755534 11.865234 12.524414 C 12.034505 12.293295 12.184244 12.011719 12.314453 11.679688 C 12.366535 11.55599 12.44466 11.455078 12.548828 11.376953 C 12.652994 11.298828 12.773438 11.259766 12.910156 11.259766 C 13.085938 11.259766 13.234049 11.323242 13.354492 11.450195 C 13.474934 11.577148 13.535155 11.725261 13.535156 11.894531 Z                                 \"\n                                    HorizontalAlignment=\"Left\"\n                                    Margin=\"5,0,0,0\"\n                                    Name=\"RefreshHitokoto\"\n                                    Width=\"12\" />\n                            </DockPanel>\n                            <StackPanel DockPanel.Dock=\"Bottom\">\n                                <SelectableTextBlock\n                                    Margin=\"5\"\n                                    Name=\"Hitokoto\"\n                                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Loading}\"\n                                    TextWrapping=\"Wrap\" />\n                            </StackPanel>\n                        </DockPanel>\n                    </Border>\n                    <Border\n                        Background=\"{DynamicResource 2x}\"\n                        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                        Padding=\"6.5\">\n                        <DockPanel Margin=\"5,0,0,0\">\n                            <DockPanel DockPanel.Dock=\"Top\">\n                                <TextBlock Text=\"CodeLife\" />\n                                <PathIcon\n                                    Data=\" F1 M 13.75 6.875 L 13.75 9.375 C 13.75 9.544271 13.68815 9.690756 13.564453 9.814453 C 13.440755 9.938151 13.294271 10 13.125 10 L 10.625 10 C 10.455729 10 10.309244 9.938151 10.185547 9.814453 C 10.061849 9.690756 10 9.544271 10 9.375 C 10 9.205729 10.061849 9.059245 10.185547 8.935547 C 10.309244 8.81185 10.455729 8.75 10.625 8.75 L 11.875 8.75 C 11.5625 8.359375 11.194661 8.053386 10.771484 7.832031 C 10.348307 7.610678 9.882812 7.5 9.375 7.5 C 9.016927 7.5 8.683268 7.552084 8.374023 7.65625 C 8.064778 7.760418 7.78483 7.908529 7.53418 8.100586 C 7.283528 8.292644 7.062174 8.522136 6.870117 8.789062 C 6.67806 9.05599 6.520182 9.352214 6.396484 9.677734 C 6.344401 9.807943 6.267903 9.912109 6.166992 9.990234 C 6.066081 10.068359 5.94401 10.107422 5.800781 10.107422 C 5.63151 10.107422 5.485026 10.047201 5.361328 9.926758 C 5.23763 9.806315 5.175781 9.661459 5.175781 9.492188 C 5.175781 9.433594 5.185547 9.36849 5.205078 9.296875 C 5.335286 8.847656 5.538737 8.435873 5.81543 8.061523 C 6.092122 7.687175 6.417643 7.364909 6.791992 7.094727 C 7.166341 6.824545 7.574869 6.616211 8.017578 6.469727 C 8.460286 6.323242 8.91276 6.25 9.375 6.25 C 9.960938 6.25 10.525716 6.362305 11.069336 6.586914 C 11.612955 6.811523 12.089844 7.135417 12.5 7.558594 C 12.5 7.5 12.498372 7.438151 12.495117 7.373047 C 12.491861 7.307943 12.490234 7.239584 12.490234 7.167969 C 12.490234 7.057292 12.496744 6.948242 12.509766 6.84082 C 12.522786 6.733398 12.550455 6.635742 12.592773 6.547852 C 12.63509 6.459961 12.698566 6.388347 12.783203 6.333008 C 12.867838 6.27767 12.981771 6.25 13.125 6.25 C 13.294271 6.25 13.440755 6.31185 13.564453 6.435547 C 13.68815 6.559245 13.75 6.705729 13.75 6.875 Z M 13.535156 11.894531 C 13.535155 11.959636 13.522135 12.027995 13.496094 12.099609 C 13.326822 12.542318 13.10384 12.942709 12.827148 13.300781 C 12.550455 13.658854 12.231445 13.963217 11.870117 14.213867 C 11.508789 14.464519 11.113281 14.658203 10.683594 14.794922 C 10.253906 14.931641 9.804688 15 9.335938 15 C 8.75651 15 8.199869 14.88444 7.666016 14.65332 C 7.132161 14.422201 6.660156 14.101562 6.25 13.691406 C 6.25 13.75 6.251627 13.81185 6.254883 13.876953 C 6.258138 13.942058 6.259766 14.010417 6.259766 14.082031 C 6.259766 14.192709 6.253255 14.303386 6.240234 14.414062 C 6.227213 14.52474 6.197917 14.624023 6.152344 14.711914 C 6.106771 14.799805 6.043294 14.869792 5.961914 14.921875 C 5.880534 14.973959 5.768229 15 5.625 15 C 5.455729 15 5.309245 14.938151 5.185547 14.814453 C 5.061849 14.690756 5 14.544271 5 14.375 L 5 11.875 C 5 11.770834 5.024414 11.676433 5.073242 11.591797 C 5.12207 11.507162 5.183919 11.437175 5.258789 11.381836 C 5.333659 11.326498 5.419922 11.28418 5.517578 11.254883 C 5.615234 11.225586 5.712891 11.210938 5.810547 11.210938 C 5.895182 11.210938 5.973307 11.223959 6.044922 11.25 L 8.125 11.25 C 8.294271 11.25 8.440755 11.31185 8.564453 11.435547 C 8.68815 11.559245 8.75 11.705729 8.75 11.875 C 8.75 12.044271 8.68815 12.190756 8.564453 12.314453 C 8.440755 12.438151 8.294271 12.5 8.125 12.5 L 6.875 12.5 C 7.19401 12.910156 7.569986 13.221029 8.00293 13.432617 C 8.435872 13.644206 8.91276 13.75 9.433594 13.75 C 9.759114 13.75 10.061849 13.701172 10.341797 13.603516 C 10.621744 13.505859 10.895182 13.365886 11.162109 13.183594 C 11.461588 12.975261 11.695963 12.755534 11.865234 12.524414 C 12.034505 12.293295 12.184244 12.011719 12.314453 11.679688 C 12.366535 11.55599 12.44466 11.455078 12.548828 11.376953 C 12.652994 11.298828 12.773438 11.259766 12.910156 11.259766 C 13.085938 11.259766 13.234049 11.323242 13.354492 11.450195 C 13.474934 11.577148 13.535155 11.725261 13.535156 11.894531 Z                                 \"\n                                    HorizontalAlignment=\"Left\"\n                                    Margin=\"5,0,0,0\"\n                                    Name=\"RefreshCodeLife\"\n                                    Width=\"12\" />\n                            </DockPanel>\n                            <StackPanel DockPanel.Dock=\"Bottom\">\n                                <SelectableTextBlock\n                                    Margin=\"5\"\n                                    Name=\"CodeLife\"\n                                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Loading}\"\n                                    TextWrapping=\"Wrap\" />\n                            </StackPanel>\n                        </DockPanel>\n                    </Border>\n                </StackPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                IsVisible=\"False\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ActivateWinOffice}\"\n                        VerticalAlignment=\"Center\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CancelActivateWin}\"\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Right\"\n                        Margin=\"6.5,0,0,0\"\n                        x:Name=\"CancelActivateWinBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.RunActivate}\"\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Right\"\n                        Margin=\"6.5,0,0,0\"\n                        x:Name=\"ActivateBtn\" />\n                </DockPanel>\n            </Border>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MorePages/TreasureBox.axaml.cs",
    "content": "using System.Linq;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json.Nodes;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module;\n\nnamespace YMCL.Views.Main.Pages.MorePages;\n\npublic partial class TreasureBox : UserControl\n{\n    public TreasureBox()\n    {\n        InitializeComponent();\n        BindingEvent(); \n        _ = LoadHitokoto();\n        _ = LoadCodeLife();\n    }\n\n    private void BindingEvent()\n    {\n        NeverClickButton.Click += async (_, _) =>\n        {\n            await ShowDialogAsync(MainLang.Tip, MainLang.NeverClickTip, b_primary: MainLang.Ok,\n                b_cancel: MainLang.Ok,\n                b_secondary: MainLang.Ok);\n            Public.Module.Ui.Setter.AppStrangeEffect();\n        };\n        TodayLuckyValueButton.Click += async (_, _) =>\n        {\n            var info = Public.Module.IO.Disk.Getter.GetMacAddress() + DateTime.Now.ToString(\"yyyyMMdd\");\n            var seed = Encoding.UTF8.GetBytes(info).Aggregate(0, (current, b) => current + b);\n\n            var random = new Random(seed);\n            var lucky = random.Next(0, 101);\n            Console.WriteLine(lucky);\n            var tips = MainLang.LuckyValueTip.Split(@\"/n\");\n            var tip = lucky switch\n            {\n                0 => tips[0],\n                < 20 => tips[1],\n                >= 20 and < 40 => tips[2],\n                >= 40 and < 60 => tips[3],\n                >= 60 and < 80 => tips[4],\n                >= 80 and < 100 => tips[5],\n                100 => tips[6],\n                _ => string.Empty\n            };\n            await ShowDialogAsync($\"{MainLang.TodayLuckyValue} - {DateTime.Now:yyyy/MM/dd}\",\n                MainLang.TodayLuckyValueTip.Replace(\"{value}\", lucky.ToString()) + \"\\n\" + tip,\n                b_primary: MainLang.IKnow);\n        };\n        RefreshHitokoto.PointerPressed += async (_, _) => await LoadHitokoto();\n        RefreshCodeLife.PointerPressed += async (_, _) => await LoadCodeLife();\n    }\n\n    private async System.Threading.Tasks.Task LoadHitokoto()\n    {\n        try\n        {\n            Hitokoto.Text = MainLang.Loading;\n            using var client = new HttpClient();\n            client.DefaultRequestHeaders.Add(\"User-Agent\",\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54\");\n            var hitokoto = await client.GetStringAsync(\"https://v1.hitokoto.cn/\");\n            var obj = JsonNode.Parse(hitokoto);\n            Hitokoto.Text = $\"{obj[\"hitokoto\"]}  \\u2014\\u2014  {obj[\"from_who\"] ?? obj[\"from\"]}\";\n        }\n        catch\n        {\n            Hitokoto.Text = MainLang.LoadFail;\n        }\n    }\n\n    private async System.Threading.Tasks.Task LoadCodeLife()\n    {\n        try\n        {\n            CodeLife.Text = MainLang.Loading;\n            using var client = new HttpClient();\n            client.DefaultRequestHeaders.Add(\"User-Agent\",\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.54\");\n            var codelife = await client.GetStringAsync(\"https://api.codelife.cc/yiyan/random?lang=cn\");\n            var obj = JsonNode.Parse(codelife);\n            CodeLife.Text = $\"{obj[\"data\"][\"hitokoto\"]}  \\u2014\\u2014  {obj[\"data\"][\"from\"].ToString().Trim('-')}\";\n        }\n        catch\n        {\n            CodeLife.Text = MainLang.LoadFail;\n        }\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Music.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.Music\"\n    x:DataType=\"model:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:asyncImageLoader=\"clr-namespace:AsyncImageLoader;assembly=AsyncImageLoader.Avalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:model=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:EnumIndexToBoolConverter x:Key=\"EnumIndexToBoolConverter\" />\n        <converter:MsToTimeConverter x:Key=\"MsToTimeConverter\" />\n        <converter:DoubleToIntByRoundConverter x:Key=\"DoubleToIntByRoundConverter\" />\n    </UserControl.Resources>\n    <Grid>\n        <DockPanel>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                DockPanel.Dock=\"Bottom\"\n                Height=\"60\"\n                Margin=\"10,0,10,10\"\n                Opacity=\"{DynamicResource MainOpacity}\">\n                <Grid>\n                    <ProgressBar\n                        Height=\"1\"\n                        IsIndeterminate=\"True\"\n                        IsVisible=\"False\"\n                        Margin=\"0,-3,0,0\"\n                        Name=\"LoadingBar\"\n                        VerticalAlignment=\"Top\" />\n                    <Slider\n                        Margin=\"0,-8,0,0\"\n                        Maximum=\"{Binding UiProperty.MusicTotalTime}\"\n                        Name=\"PlayerSlider\"\n                        Opacity=\"1\"\n                        Value=\"{Binding UiProperty.MusicCurrentTime, Mode=OneWay}\"\n                        VerticalAlignment=\"Top\" />\n                    <Slider\n                        Margin=\"0,-8,0,0\"\n                        Maximum=\"{Binding UiProperty.MusicTotalTime}\"\n                        Name=\"ControlPlayerSlider\"\n                        Opacity=\"0\"\n                        VerticalAlignment=\"Top\" />\n                    <DockPanel>\n                        <Border\n                            ClipToBounds=\"True\"\n                            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                            Height=\"38\"\n                            IsVisible=\"{Binding UiProperty.SelectedRecordSong.Type, Converter={StaticResource EnumIndexToBoolConverter}, ConverterParameter=2}\"\n                            Margin=\"10,0,0,0\"\n                            Width=\"38\">\n                            <asyncImageLoader:AdvancedImage Source=\"{Binding UiProperty.SelectedRecordSong.SongPicUri}\" />\n                        </Border>\n                        <StackPanel Margin=\"5,13,0,0\">\n                            <TextBlock Name=\"SongName\" Text=\"{Binding UiProperty.SelectedRecordSong.SongName}\" />\n                            <TextBlock\n                                FontSize=\"12\"\n                                Foreground=\"{DynamicResource GrayColor}\"\n                                Name=\"SongAuthors\"\n                                Text=\"{Binding UiProperty.SelectedRecordSong.SongAuthors}\" />\n                        </StackPanel>\n                        <DockPanel />\n                    </DockPanel>\n                    <DockPanel\n                        HorizontalAlignment=\"Center\"\n                        Margin=\"0,0,0,0\"\n                        VerticalAlignment=\"Center\">\n                        <PathIcon\n                            Data=\"F1 M 1.25 18.125 L 1.25 1.875 C 1.25 1.70573 1.311849 1.559246 1.435547 1.435547 C 1.559245 1.31185 1.705729 1.25 1.875 1.25 C 2.044271 1.25 2.190755 1.31185 2.314453 1.435547 C 2.438151 1.559246 2.5 1.70573 2.5 1.875 L 2.5 18.125 C 2.5 18.294271 2.438151 18.440756 2.314453 18.564453 C 2.190755 18.68815 2.044271 18.75 1.875 18.75 C 1.705729 18.75 1.559245 18.68815 1.435547 18.564453 C 1.311849 18.440756 1.25 18.294271 1.25 18.125 Z M 4.990234 10 C 4.990234 9.733073 5.052083 9.485678 5.175781 9.257812 C 5.299479 9.029948 5.472005 8.841146 5.693359 8.691406 L 16.328125 1.689453 C 16.595051 1.513672 16.875 1.425781 17.167969 1.425781 C 17.382812 1.425781 17.586262 1.466473 17.77832 1.547852 C 17.970377 1.629232 18.13802 1.73991 18.28125 1.879883 C 18.424479 2.019857 18.53841 2.184246 18.623047 2.373047 C 18.707682 2.56185 18.75 2.766928 18.75 2.988281 L 18.75 17.011719 C 18.75 17.226562 18.709309 17.428385 18.62793 17.617188 C 18.546549 17.80599 18.434244 17.972006 18.291016 18.115234 C 18.147785 18.258463 17.98177 18.370768 17.792969 18.452148 C 17.604166 18.533529 17.402344 18.574219 17.1875 18.574219 C 17.03776 18.574219 16.88802 18.549805 16.738281 18.500977 C 16.588541 18.452148 16.451822 18.388672 16.328125 18.310547 L 5.693359 11.308594 C 5.472005 11.158854 5.299479 10.970053 5.175781 10.742188 C 5.052083 10.514323 4.990234 10.266928 4.990234 10 Z \"\n                            Name=\"PreviousSongBtn\"\n                            Opacity=\"{DynamicResource MainOpacity}\"\n                            Width=\"22\" />\n                        <Border\n                            Background=\"{DynamicResource SystemAccentColor}\"\n                            CornerRadius=\"999\"\n                            Height=\"{Binding $self.Bounds.Width}\"\n                            Margin=\"15,0\"\n                            Name=\"PlayBtn\"\n                            Opacity=\"{DynamicResource MainOpacity}\"\n                            Width=\"42\">\n                            <Grid>\n                                <PathIcon\n                                    Data=\"F1 M 3.125 18.75 C 2.871094 18.75 2.630208 18.701172 2.402344 18.603516 C 2.174479 18.505859 1.974284 18.370768 1.801758 18.198242 C 1.629232 18.025717 1.494141 17.825521 1.396484 17.597656 C 1.298828 17.369791 1.25 17.128906 1.25 16.875 L 1.25 3.125 C 1.25 2.871094 1.298828 2.630209 1.396484 2.402344 C 1.494141 2.17448 1.629232 1.974285 1.801758 1.801758 C 1.974284 1.629232 2.174479 1.494141 2.402344 1.396484 C 2.630208 1.298828 2.871094 1.25 3.125 1.25 L 5.625 1.25 C 5.878906 1.25 6.119791 1.298828 6.347656 1.396484 C 6.575521 1.494141 6.775716 1.629232 6.948242 1.801758 C 7.120768 1.974285 7.255859 2.17448 7.353516 2.402344 C 7.451171 2.630209 7.5 2.871094 7.5 3.125 L 7.5 16.875 C 7.5 17.128906 7.451171 17.369791 7.353516 17.597656 C 7.255859 17.825521 7.120768 18.025717 6.948242 18.198242 C 6.775716 18.370768 6.575521 18.505859 6.347656 18.603516 C 6.119791 18.701172 5.878906 18.75 5.625 18.75 Z M 14.375 18.75 C 14.121094 18.75 13.880208 18.701172 13.652344 18.603516 C 13.424479 18.505859 13.224283 18.370768 13.051758 18.198242 C 12.879231 18.025717 12.744141 17.825521 12.646484 17.597656 C 12.548828 17.369791 12.5 17.128906 12.5 16.875 L 12.5 3.125 C 12.5 2.871094 12.548828 2.630209 12.646484 2.402344 C 12.744141 2.17448 12.879231 1.974285 13.051758 1.801758 C 13.224283 1.629232 13.424479 1.494141 13.652344 1.396484 C 13.880208 1.298828 14.121094 1.25 14.375 1.25 L 16.875 1.25 C 17.128906 1.25 17.369791 1.298828 17.597656 1.396484 C 17.82552 1.494141 18.025715 1.629232 18.198242 1.801758 C 18.370768 1.974285 18.505859 2.17448 18.603516 2.402344 C 18.701172 2.630209 18.75 2.871094 18.75 3.125 L 18.75 16.875 C 18.75 17.128906 18.701172 17.369791 18.603516 17.597656 C 18.505859 17.825521 18.370768 18.025717 18.198242 18.198242 C 18.025715 18.370768 17.82552 18.505859 17.597656 18.603516 C 17.369791 18.701172 17.128906 18.75 16.875 18.75 Z \"\n                                    IsVisible=\"False\"\n                                    Name=\"PlayingIcon\"\n                                    Opacity=\"{DynamicResource MainOpacity}\"\n                                    Width=\"20\" />\n                                <PathIcon\n                                    Data=\"F1 M 4.384766 18.808594 C 4.124349 18.808594 3.880208 18.759766 3.652344 18.662109 C 3.424479 18.564453 3.224284 18.43099 3.051758 18.261719 C 2.879232 18.092447 2.744141 17.893881 2.646484 17.666016 C 2.548828 17.43815 2.5 17.19401 2.5 16.933594 L 2.5 3.066406 C 2.5 2.80599 2.548828 2.56185 2.646484 2.333984 C 2.744141 2.106121 2.877604 1.907553 3.046875 1.738281 C 3.216146 1.569012 3.414713 1.435547 3.642578 1.337891 C 3.870442 1.240234 4.114583 1.191406 4.375 1.191406 C 4.53125 1.191406 4.6875 1.210938 4.84375 1.25 C 5 1.289062 5.146484 1.347656 5.283203 1.425781 L 17.724609 8.359375 C 18.024088 8.528646 18.258463 8.758139 18.427734 9.047852 C 18.597004 9.337565 18.681641 9.654948 18.681641 10 C 18.681641 10.351562 18.598633 10.670573 18.432617 10.957031 C 18.266602 11.24349 18.030598 11.471354 17.724609 11.640625 L 5.292969 18.574219 C 5.15625 18.652344 5.009766 18.710938 4.853516 18.75 C 4.697266 18.789062 4.541016 18.808594 4.384766 18.808594 Z \"\n                                    Margin=\"3,0,0,0\"\n                                    Name=\"PauseIcon\"\n                                    Opacity=\"{DynamicResource MainOpacity}\"\n                                    Width=\"20\" />\n                            </Grid>\n                        </Border>\n                        <PathIcon\n                            Data=\"F1 M 17.5 18.125 L 17.5 1.875 C 17.5 1.70573 17.561848 1.559246 17.685547 1.435547 C 17.809244 1.31185 17.955729 1.25 18.125 1.25 C 18.29427 1.25 18.440754 1.31185 18.564453 1.435547 C 18.68815 1.559246 18.75 1.70573 18.75 1.875 L 18.75 18.125 C 18.75 18.294271 18.68815 18.440756 18.564453 18.564453 C 18.440754 18.68815 18.29427 18.75 18.125 18.75 C 17.955729 18.75 17.809244 18.68815 17.685547 18.564453 C 17.561848 18.440756 17.5 18.294271 17.5 18.125 Z M 1.25 17.011719 L 1.25 2.988281 C 1.25 2.766928 1.292318 2.56185 1.376953 2.373047 C 1.461589 2.184246 1.575521 2.019857 1.71875 1.879883 C 1.861979 1.73991 2.029622 1.629232 2.22168 1.547852 C 2.413737 1.466473 2.617188 1.425781 2.832031 1.425781 C 3.125 1.425781 3.404948 1.513672 3.671875 1.689453 L 14.306641 8.691406 C 14.527994 8.841146 14.700521 9.029948 14.824219 9.257812 C 14.947916 9.485678 15.009766 9.733073 15.009766 10 C 15.009766 10.266928 14.947916 10.514323 14.824219 10.742188 C 14.700521 10.970053 14.527994 11.158854 14.306641 11.308594 L 3.671875 18.310547 C 3.541667 18.395182 3.40332 18.460287 3.256836 18.505859 C 3.110352 18.551432 2.958984 18.574219 2.802734 18.574219 C 2.587891 18.574219 2.387695 18.5319 2.202148 18.447266 C 2.016602 18.362631 1.852214 18.250326 1.708984 18.110352 C 1.565755 17.970377 1.45345 17.80599 1.37207 17.617188 C 1.29069 17.428385 1.25 17.226562 1.25 17.011719 Z \"\n                            Name=\"NextSongBtn\"\n                            Opacity=\"{DynamicResource MainOpacity}\"\n                            Width=\"22\" />\n                    </DockPanel>\n                    <DockPanel\n                        HorizontalAlignment=\"Right\"\n                        Margin=\"0,0,25,0\"\n                        VerticalAlignment=\"Center\">\n                        <StackPanel\n                            Margin=\"0,0,15,0\"\n                            Orientation=\"Horizontal\"\n                            Spacing=\"15\"\n                            VerticalAlignment=\"Center\">\n                            <PathIcon\n                                Data=\"F1 M 20 19.375 C 20 19.544271 19.93815 19.690756 19.814453 19.814453 C 19.690754 19.93815 19.54427 20 19.375 20 C 19.205729 20 19.059244 19.93815 18.935547 19.814453 L 0.185547 1.064453 C 0.061849 0.940756 0 0.794271 0 0.625 C 0 0.45573 0.061849 0.309246 0.185547 0.185547 C 0.309245 0.06185 0.455729 0 0.625 0 C 0.794271 0 0.940755 0.06185 1.064453 0.185547 L 19.814453 18.935547 C 19.93815 19.059244 20 19.205729 20 19.375 Z M 7.5 3.75 C 7.330729 3.75 7.161458 3.756512 6.992188 3.769531 C 6.822916 3.782553 6.653646 3.802084 6.484375 3.828125 L 5.439453 2.792969 C 6.103516 2.597656 6.790364 2.5 7.5 2.5 L 14.121094 2.5 L 12.685547 1.064453 C 12.561849 0.940756 12.5 0.794271 12.5 0.625 C 12.5 0.45573 12.561849 0.309246 12.685547 0.185547 C 12.809244 0.06185 12.955729 0 13.125 0 C 13.294271 0 13.440755 0.06185 13.564453 0.185547 L 16.064453 2.685547 C 16.18815 2.809246 16.25 2.95573 16.25 3.125 C 16.25 3.294271 16.18815 3.440756 16.064453 3.564453 L 13.564453 6.064453 C 13.440755 6.188151 13.294271 6.25 13.125 6.25 C 12.955729 6.25 12.809244 6.188151 12.685547 6.064453 C 12.561849 5.940756 12.5 5.794271 12.5 5.625 C 12.5 5.455729 12.561849 5.309245 12.685547 5.185547 L 14.121094 3.75 Z M 3.066406 3.955078 L 3.964844 4.84375 C 3.535156 5.130209 3.152669 5.463867 2.817383 5.844727 C 2.482096 6.225586 2.198893 6.63737 1.967773 7.080078 C 1.736654 7.522787 1.559245 7.991537 1.435547 8.486328 C 1.311849 8.98112 1.25 9.485678 1.25 10 C 1.25 10.709636 1.355794 11.363933 1.567383 11.962891 C 1.778971 12.56185 2.083333 13.151042 2.480469 13.730469 C 2.526042 13.795573 2.558594 13.852539 2.578125 13.901367 C 2.597656 13.950195 2.607422 14.016928 2.607422 14.101562 C 2.607422 14.270834 2.545573 14.418945 2.421875 14.545898 C 2.298177 14.672852 2.151693 14.736328 1.982422 14.736328 C 1.871745 14.736328 1.778971 14.713542 1.704102 14.667969 C 1.629232 14.622396 1.55599 14.560547 1.484375 14.482422 C 1.39974 14.391276 1.323242 14.287109 1.254883 14.169922 C 1.186523 14.052734 1.119792 13.942058 1.054688 13.837891 C 0.703125 13.251953 0.439453 12.635092 0.263672 11.987305 C 0.087891 11.339519 0 10.677084 0 10 C 0 8.769531 0.268555 7.638347 0.805664 6.606445 C 1.342773 5.574545 2.096354 4.690756 3.066406 3.955078 Z M 16.992188 14.345703 C 17.552082 13.759766 17.985025 13.092448 18.291016 12.34375 C 18.597004 11.595053 18.75 10.813803 18.75 10 C 18.75 9.290365 18.644205 8.636068 18.432617 8.037109 C 18.221027 7.438152 17.916666 6.848959 17.519531 6.269531 C 17.473957 6.204428 17.441406 6.147462 17.421875 6.098633 C 17.402344 6.049806 17.392578 5.983074 17.392578 5.898438 C 17.392578 5.729168 17.454426 5.581056 17.578125 5.454102 C 17.701822 5.327149 17.848307 5.263673 18.017578 5.263672 C 18.128254 5.263673 18.221027 5.286459 18.295898 5.332031 C 18.370768 5.377604 18.44401 5.439453 18.515625 5.517578 C 18.587238 5.602215 18.655598 5.694988 18.720703 5.795898 C 18.785807 5.896811 18.847656 5.996094 18.90625 6.09375 C 19.264322 6.686198 19.536133 7.312826 19.72168 7.973633 C 19.907227 8.63444 20 9.309896 20 10 C 20 10.976562 19.817707 11.91569 19.453125 12.817383 C 19.088541 13.719076 18.564453 14.521484 17.880859 15.224609 Z M 5.888672 16.25 L 12.5 16.25 C 13.320312 16.25 14.117838 16.090496 14.892578 15.771484 L 15.830078 16.71875 C 15.309244 16.972656 14.770508 17.166342 14.213867 17.299805 C 13.657227 17.433268 13.085938 17.5 12.5 17.5 L 5.888672 17.5 L 7.314453 18.935547 C 7.43815 19.059244 7.5 19.205729 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 C 6.705729 20 6.559244 19.93815 6.435547 19.814453 L 3.935547 17.314453 C 3.811849 17.190756 3.75 17.044271 3.75 16.875 C 3.75 16.705729 3.811849 16.559244 3.935547 16.435547 L 6.435547 13.935547 C 6.559244 13.81185 6.705729 13.75 6.875 13.75 C 7.044271 13.75 7.190755 13.81185 7.314453 13.935547 C 7.43815 14.059245 7.5 14.205729 7.5 14.375 C 7.5 14.544271 7.43815 14.690756 7.314453 14.814453 Z \"\n                                Name=\"RepeatBtn\"\n                                Opacity=\"{DynamicResource MainOpacity}\"\n                                Width=\"20\" />\n                            <PathIcon\n                                Data=\"F1 M 4.550781 12.265625 C 3.893229 12.089844 3.28776 11.808269 2.734375 11.420898 C 2.18099 11.033529 1.700846 10.576172 1.293945 10.048828 C 0.887044 9.521484 0.569661 8.938803 0.341797 8.300781 C 0.113932 7.662762 0 7.005209 0 6.328125 C 0 5.748698 0.073242 5.188803 0.219727 4.648438 C 0.366211 4.108073 0.572917 3.603516 0.839844 3.134766 C 1.106771 2.666016 1.429036 2.239584 1.806641 1.855469 C 2.184245 1.471355 2.604167 1.140951 3.066406 0.864258 C 3.528646 0.587566 4.02832 0.37435 4.56543 0.224609 C 5.102539 0.074871 5.664062 0 6.25 0 C 7.115885 0 7.92806 0.162762 8.686523 0.488281 C 9.444986 0.813803 10.107422 1.259766 10.673828 1.826172 C 11.240234 2.392578 11.686197 3.055014 12.011719 3.813477 C 12.337239 4.57194 12.5 5.384115 12.5 6.25 L 11.25 6.25 C 11.25 6.041668 11.236979 5.833334 11.210938 5.625 C 11.184896 5.416667 11.145833 5.208334 11.09375 5 L 8.701172 5 C 8.714192 5.208334 8.725586 5.416667 8.735352 5.625 C 8.745117 5.833334 8.75 6.041668 8.75 6.25 C 8.75 6.673178 8.732096 7.086589 8.696289 7.490234 C 8.660481 7.893881 8.616536 8.304037 8.564453 8.720703 L 8.564453 8.75 L 5.205078 8.75 C 5.23763 8.938803 5.275065 9.122722 5.317383 9.301758 C 5.3597 9.480795 5.406901 9.661459 5.458984 9.84375 L 5.449219 9.853516 C 5.299479 10.257162 5.149739 10.65918 5 11.05957 C 4.85026 11.459961 4.700521 11.861979 4.550781 12.265625 Z M 5.205078 3.75 L 7.294922 3.75 C 7.26888 3.613281 7.226562 3.416342 7.167969 3.15918 C 7.109375 2.90202 7.036133 2.641602 6.948242 2.37793 C 6.860352 2.114258 6.757812 1.875 6.640625 1.660156 C 6.523438 1.445312 6.396484 1.308594 6.259766 1.25 L 6.240234 1.25 C 6.103515 1.308594 5.976562 1.445312 5.859375 1.660156 C 5.742188 1.875 5.639648 2.114258 5.551758 2.37793 C 5.463867 2.641602 5.390625 2.90202 5.332031 3.15918 C 5.273438 3.416342 5.23112 3.613281 5.205078 3.75 Z M 1.914062 3.75 L 3.935547 3.75 C 4.052734 2.988281 4.251302 2.255859 4.53125 1.552734 C 3.977865 1.754559 3.476562 2.044271 3.027344 2.421875 C 2.578125 2.79948 2.207031 3.242188 1.914062 3.75 Z M 10.585938 3.75 C 10.292969 3.242188 9.921875 2.79948 9.472656 2.421875 C 9.023438 2.044271 8.522135 1.754559 7.96875 1.552734 C 8.248697 2.255859 8.447266 2.988281 8.564453 3.75 Z M 1.40625 5 C 1.354167 5.208334 1.315104 5.416667 1.289062 5.625 C 1.263021 5.833334 1.25 6.041668 1.25 6.25 C 1.25 6.458334 1.263021 6.666667 1.289062 6.875 C 1.315104 7.083334 1.354167 7.291667 1.40625 7.5 L 3.798828 7.5 C 3.785807 7.291667 3.774414 7.083334 3.764648 6.875 C 3.754883 6.666667 3.75 6.458334 3.75 6.25 C 3.75 6.041668 3.754883 5.833334 3.764648 5.625 C 3.774414 5.416667 3.785807 5.208334 3.798828 5 Z M 7.451172 5 L 5.048828 5 C 5.035807 5.208334 5.024414 5.416667 5.014648 5.625 C 5.004883 5.833334 5 6.041668 5 6.25 C 5 6.458334 5.004883 6.666667 5.014648 6.875 C 5.024414 7.083334 5.035807 7.291667 5.048828 7.5 L 7.451172 7.5 C 7.464192 7.291667 7.475585 7.083334 7.485352 6.875 C 7.495117 6.666667 7.5 6.458334 7.5 6.25 C 7.5 6.041668 7.495117 5.833334 7.485352 5.625 C 7.475585 5.416667 7.464192 5.208334 7.451172 5 Z M 20 8.125 L 20 10 C 20 10.169271 19.93815 10.315756 19.814453 10.439453 C 19.690754 10.563151 19.54427 10.625 19.375 10.625 C 19.205729 10.625 19.059244 10.563151 18.935547 10.439453 C 18.811848 10.315756 18.75 10.169271 18.75 10 L 18.75 8.75 L 11.25 8.75 L 11.25 10 C 11.25 10.169271 11.18815 10.315756 11.064453 10.439453 C 10.940755 10.563151 10.794271 10.625 10.625 10.625 C 10.455729 10.625 10.309244 10.563151 10.185547 10.439453 C 10.061849 10.315756 10 10.169271 10 10 L 10 8.125 C 10 7.95573 10.061849 7.809246 10.185547 7.685547 C 10.309244 7.56185 10.455729 7.5 10.625 7.5 L 14.375 7.5 C 14.375 7.447917 14.373372 7.394206 14.370117 7.338867 C 14.366861 7.283529 14.365234 7.226563 14.365234 7.167969 C 14.365234 7.057292 14.371744 6.948242 14.384766 6.84082 C 14.397786 6.733398 14.425455 6.635742 14.467773 6.547852 C 14.51009 6.459961 14.573566 6.388347 14.658203 6.333008 C 14.742838 6.27767 14.856771 6.25 15 6.25 C 15.143229 6.25 15.255533 6.27767 15.336914 6.333008 C 15.418294 6.388347 15.480143 6.459961 15.522461 6.547852 C 15.564777 6.635742 15.592447 6.733398 15.605469 6.84082 C 15.618489 6.948242 15.625 7.057292 15.625 7.167969 L 15.625 7.5 L 19.375 7.5 C 19.54427 7.5 19.690754 7.56185 19.814453 7.685547 C 19.93815 7.809246 20 7.95573 20 8.125 Z M 1.923828 8.75 C 2.216797 9.257812 2.587891 9.698894 3.037109 10.073242 C 3.486328 10.447592 3.984375 10.738933 4.53125 10.947266 C 4.251302 10.244141 4.052734 9.511719 3.935547 8.75 Z M 20 13.125 C 20 13.294271 19.93815 13.440756 19.814453 13.564453 C 19.690754 13.688151 19.54427 13.75 19.375 13.75 L 16.25 13.75 L 16.25 16.25 C 16.25 16.425781 16.217447 16.588543 16.152344 16.738281 C 16.087238 16.888021 15.997721 17.019857 15.883789 17.133789 C 15.769856 17.247721 15.638021 17.33724 15.488281 17.402344 C 15.338541 17.467447 15.17578 17.5 15 17.5 L 14.375 17.5 C 14.205729 17.5 14.059244 17.43815 13.935547 17.314453 C 13.811849 17.190756 13.75 17.044271 13.75 16.875 C 13.75 16.731771 13.777669 16.619467 13.833008 16.538086 C 13.888346 16.456705 13.95996 16.394857 14.047852 16.352539 C 14.135741 16.310221 14.233397 16.282553 14.34082 16.269531 C 14.448241 16.256512 14.557291 16.25 14.667969 16.25 L 15 16.25 L 15 13.75 L 11.875 13.75 C 11.705729 13.75 11.559244 13.688151 11.435547 13.564453 C 11.311849 13.440756 11.25 13.294271 11.25 13.125 C 11.25 12.955729 11.311849 12.809245 11.435547 12.685547 C 11.559244 12.56185 11.705729 12.5 11.875 12.5 L 15 12.5 C 14.999999 12.415365 15.027668 12.314453 15.083008 12.197266 C 15.138346 12.080078 15.205078 11.962891 15.283203 11.845703 C 15.361328 11.728516 15.439453 11.617839 15.517578 11.513672 C 15.595703 11.409506 15.657552 11.321615 15.703125 11.25 L 13.125 11.25 C 12.955729 11.25 12.809244 11.188151 12.685547 11.064453 C 12.561849 10.940756 12.5 10.794271 12.5 10.625 C 12.5 10.455729 12.561849 10.309245 12.685547 10.185547 C 12.809244 10.06185 12.955729 10 13.125 10 L 16.875 10 C 17.04427 10 17.190754 10.06185 17.314453 10.185547 C 17.43815 10.309245 17.5 10.455729 17.5 10.625 C 17.5 10.748698 17.464191 10.862631 17.392578 10.966797 L 16.376953 12.5 L 19.375 12.5 C 19.54427 12.5 19.690754 12.56185 19.814453 12.685547 C 19.93815 12.809245 20 12.955729 20 13.125 Z M 10.9375 18.125 C 10.9375 18.300781 10.877278 18.448893 10.756836 18.569336 C 10.636393 18.689779 10.488281 18.75 10.3125 18.75 C 10.182291 18.75 10.063477 18.712564 9.956055 18.637695 C 9.848633 18.562826 9.772135 18.463541 9.726562 18.339844 L 8.945312 16.25 L 6.054688 16.25 L 5.273438 18.339844 C 5.227864 18.463541 5.151367 18.562826 5.043945 18.637695 C 4.936523 18.712564 4.817708 18.75 4.6875 18.75 C 4.518229 18.75 4.371745 18.68815 4.248047 18.564453 C 4.124349 18.440756 4.0625 18.294271 4.0625 18.125 C 4.0625 18.033854 4.075521 17.958984 4.101562 17.900391 L 5.039062 15.419922 C 5.358073 14.580078 5.6722 13.74349 5.981445 12.910156 C 6.290689 12.076823 6.601562 11.240234 6.914062 10.400391 C 6.959635 10.276693 7.03776 10.185547 7.148438 10.126953 C 7.259114 10.068359 7.376302 10.039062 7.5 10.039062 C 7.630208 10.039062 7.747396 10.068359 7.851562 10.126953 C 7.955729 10.185547 8.033854 10.276693 8.085938 10.400391 C 8.398438 11.240234 8.707682 12.076823 9.013672 12.910156 C 9.319661 13.74349 9.635416 14.580078 9.960938 15.419922 L 10.898438 17.900391 C 10.924479 17.958984 10.9375 18.033854 10.9375 18.125 Z M 7.5 12.402344 L 6.523438 15 L 8.476562 15 Z \"\n                                Name=\"LyricBtn\"\n                                Opacity=\"{DynamicResource MainOpacity}\"\n                                Width=\"20\" />\n                            <PathIcon\n                                Data=\"F1 M 8.75 10.625 C 8.75 10.455729 8.811849 10.309245 8.935547 10.185547 L 16.621094 2.5 L 10.625 2.5 C 10.455729 2.5 10.309244 2.438152 10.185547 2.314453 C 10.061849 2.190756 10 2.044271 10 1.875 C 10 1.70573 10.061849 1.559246 10.185547 1.435547 C 10.309244 1.31185 10.455729 1.25 10.625 1.25 L 18.125 1.25 C 18.29427 1.25 18.440754 1.31185 18.564453 1.435547 C 18.68815 1.559246 18.75 1.70573 18.75 1.875 L 18.75 9.375 C 18.75 9.544271 18.68815 9.690756 18.564453 9.814453 C 18.440754 9.938151 18.29427 10 18.125 10 C 17.955729 10 17.809244 9.938151 17.685547 9.814453 C 17.561848 9.690756 17.5 9.544271 17.5 9.375 L 17.5 3.388672 L 9.814453 11.064453 C 9.749349 11.123047 9.682617 11.16862 9.614258 11.201172 C 9.545898 11.233725 9.466146 11.25 9.375 11.25 C 9.205729 11.25 9.059244 11.188151 8.935547 11.064453 C 8.811849 10.940756 8.75 10.794271 8.75 10.625 Z M 4.921875 18.75 C 4.433594 18.75 3.966471 18.650717 3.520508 18.452148 C 3.074544 18.25358 2.683919 17.986654 2.348633 17.651367 C 2.013346 17.31608 1.746419 16.925455 1.547852 16.479492 C 1.349284 16.033529 1.25 15.566406 1.25 15.078125 L 1.25 6.171875 C 1.25 5.683595 1.349284 5.216473 1.547852 4.770508 C 1.746419 4.324545 2.013346 3.93392 2.348633 3.598633 C 2.683919 3.263348 3.074544 2.99642 3.520508 2.797852 C 3.966471 2.599285 4.433594 2.5 4.921875 2.5 L 8.125 2.5 C 8.294271 2.5 8.440755 2.56185 8.564453 2.685547 C 8.68815 2.809246 8.75 2.95573 8.75 3.125 C 8.75 3.294271 8.68815 3.440756 8.564453 3.564453 C 8.440755 3.688152 8.294271 3.75 8.125 3.75 L 4.951172 3.75 C 4.625651 3.75 4.314778 3.816732 4.018555 3.950195 C 3.722331 4.08366 3.461914 4.262696 3.237305 4.487305 C 3.012695 4.711915 2.833659 4.972332 2.700195 5.268555 C 2.566732 5.564779 2.5 5.875651 2.5 6.201172 L 2.5 15.048828 C 2.5 15.37435 2.566732 15.685222 2.700195 15.981445 C 2.833659 16.27767 3.012695 16.538086 3.237305 16.762695 C 3.461914 16.987305 3.722331 17.166342 4.018555 17.299805 C 4.314778 17.433268 4.625651 17.5 4.951172 17.5 L 13.798828 17.5 C 14.137369 17.5 14.454752 17.431641 14.750977 17.294922 C 15.0472 17.158203 15.305989 16.975912 15.527344 16.748047 C 15.748697 16.520182 15.924479 16.254883 16.054688 15.952148 C 16.184895 15.649414 16.25 15.332031 16.25 15 L 16.25 11.875 C 16.25 11.705729 16.311848 11.559245 16.435547 11.435547 C 16.559244 11.31185 16.705729 11.25 16.875 11.25 C 17.04427 11.25 17.190754 11.31185 17.314453 11.435547 C 17.43815 11.559245 17.5 11.705729 17.5 11.875 L 17.5 15.078125 C 17.5 15.566406 17.400715 16.033529 17.202148 16.479492 C 17.00358 16.925455 16.736652 17.31608 16.401367 17.651367 C 16.06608 17.986654 15.675455 18.25358 15.229492 18.452148 C 14.783527 18.650717 14.316405 18.75 13.828125 18.75 Z \"\n                                IsVisible=\"False\"\n                                Name=\"DeskLyricBtn\"\n                                Opacity=\"{DynamicResource MainOpacity}\"\n                                Width=\"16\" />\n                            <PathIcon\n                                Data=\"F1 M 4.023438 13.75 C 3.476562 13.75 2.958984 13.636068 2.470703 13.408203 C 1.982422 13.180339 1.554362 12.875977 1.186523 12.495117 C 0.818685 12.114258 0.528971 11.674805 0.317383 11.176758 C 0.105794 10.678711 0 10.159506 0 9.619141 C 0 9.065756 0.094401 8.535156 0.283203 8.027344 C 0.472005 7.519531 0.737305 7.068686 1.079102 6.674805 C 1.420898 6.280926 1.829427 5.961915 2.304688 5.717773 C 2.779948 5.473634 3.304036 5.338543 3.876953 5.3125 L 4.189453 5.302734 C 4.261067 4.501953 4.453125 3.776043 4.765625 3.125 C 5.078125 2.473959 5.488281 1.915691 5.996094 1.450195 C 6.503906 0.984701 7.097981 0.626629 7.77832 0.375977 C 8.458658 0.125326 9.199219 0 10 0 C 10.800781 0 11.541341 0.126953 12.22168 0.380859 C 12.902018 0.634766 13.496093 0.99284 14.003906 1.455078 C 14.511718 1.917318 14.921874 2.473959 15.234375 3.125 C 15.546874 3.776043 15.738932 4.501953 15.810547 5.302734 L 15.966797 5.302734 C 16.513672 5.302734 17.032877 5.416667 17.524414 5.644531 C 18.015949 5.872396 18.44401 6.176758 18.808594 6.557617 C 19.173176 6.938477 19.462891 7.379558 19.677734 7.880859 C 19.892578 8.382162 20 8.902995 20 9.443359 L 20 9.667969 C 20 9.700521 20 9.736328 20 9.775391 C 20 9.814453 19.996744 9.850261 19.990234 9.882812 C 19.573566 9.375 19.108072 8.932292 18.59375 8.554688 C 18.489582 8.248698 18.346354 7.972006 18.164062 7.724609 C 17.98177 7.477214 17.770182 7.267253 17.529297 7.094727 C 17.28841 6.922201 17.021484 6.788737 16.728516 6.694336 C 16.435547 6.599936 16.129557 6.552735 15.810547 6.552734 C 15.472005 6.552735 15.192057 6.446941 14.970703 6.235352 C 14.749349 6.023764 14.61263 5.755209 14.560547 5.429688 C 14.527994 5.195312 14.49056 4.967448 14.448242 4.746094 C 14.405924 4.52474 14.342447 4.300131 14.257812 4.072266 C 14.088541 3.603516 13.862304 3.193359 13.579102 2.841797 C 13.295897 2.490234 12.970377 2.195639 12.602539 1.958008 C 12.2347 1.720379 11.831055 1.542969 11.391602 1.425781 C 10.952148 1.308594 10.488281 1.25 10 1.25 C 9.511719 1.25 9.047852 1.308594 8.608398 1.425781 C 8.168945 1.542969 7.765299 1.71875 7.397461 1.953125 C 7.029622 2.1875 6.704102 2.480469 6.420898 2.832031 C 6.137695 3.183594 5.911458 3.59375 5.742188 4.0625 C 5.657552 4.290365 5.594075 4.514975 5.551758 4.736328 C 5.50944 4.957683 5.472005 5.188803 5.439453 5.429688 C 5.38737 5.813803 5.236002 6.097006 4.985352 6.279297 C 4.7347 6.46159 4.423828 6.552735 4.052734 6.552734 C 3.655599 6.552735 3.286133 6.635743 2.944336 6.801758 C 2.602539 6.967774 2.306315 7.189129 2.055664 7.46582 C 1.805013 7.742514 1.608073 8.059896 1.464844 8.417969 C 1.321615 8.776042 1.25 9.147136 1.25 9.53125 C 1.25 9.928386 1.321615 10.30599 1.464844 10.664062 C 1.608073 11.022136 1.806641 11.337891 2.060547 11.611328 C 2.314453 11.884766 2.61556 12.101237 2.963867 12.260742 C 3.312174 12.420248 3.691406 12.5 4.101562 12.5 L 7.431641 12.5 C 7.373047 12.708334 7.327474 12.916667 7.294922 13.125 C 7.26237 13.333334 7.236328 13.541667 7.216797 13.75 Z M 8.75 14.375 C 8.75 13.600261 8.898111 12.871094 9.194336 12.1875 C 9.49056 11.503906 9.892578 10.908203 10.400391 10.400391 C 10.908203 9.892578 11.503906 9.490561 12.1875 9.194336 C 12.871093 8.898112 13.60026 8.75 14.375 8.75 C 14.889322 8.75 15.385741 8.816732 15.864258 8.950195 C 16.342773 9.083659 16.790363 9.272461 17.207031 9.516602 C 17.623697 9.760742 18.004557 10.055339 18.349609 10.400391 C 18.69466 10.745443 18.989258 11.126303 19.233398 11.542969 C 19.477539 11.959636 19.66634 12.407227 19.799805 12.885742 C 19.933268 13.364258 20 13.860678 20 14.375 C 20 15.14974 19.851887 15.878906 19.555664 16.5625 C 19.259439 17.246094 18.857422 17.841797 18.349609 18.349609 C 17.841797 18.857422 17.246094 19.259439 16.5625 19.555664 C 15.878906 19.851889 15.149739 20 14.375 20 C 13.59375 20 12.861328 19.853516 12.177734 19.560547 C 11.494141 19.267578 10.898438 18.867188 10.390625 18.359375 C 9.882812 17.851562 9.482422 17.255859 9.189453 16.572266 C 8.896484 15.888672 8.75 15.15625 8.75 14.375 Z M 14.375 17.578125 C 14.570312 17.578125 14.736328 17.509766 14.873047 17.373047 L 17.373047 14.873047 C 17.509766 14.736328 17.578125 14.570312 17.578125 14.375 C 17.578125 14.179688 17.509766 14.013672 17.373047 13.876953 C 17.236328 13.740234 17.070312 13.671875 16.875 13.671875 C 16.679688 13.671875 16.513672 13.740234 16.376953 13.876953 L 15 15.253906 L 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 C 14.205729 11.25 14.059244 11.31185 13.935547 11.435547 C 13.811849 11.559245 13.75 11.705729 13.75 11.875 L 13.75 15.253906 L 12.373047 13.876953 C 12.236328 13.740234 12.070312 13.671875 11.875 13.671875 C 11.679688 13.671875 11.513672 13.740234 11.376953 13.876953 C 11.240234 14.013672 11.171875 14.179688 11.171875 14.375 C 11.171875 14.570312 11.240234 14.736328 11.376953 14.873047 L 13.876953 17.373047 C 14.013672 17.509766 14.179688 17.578125 14.375 17.578125 Z \"\n                                Name=\"DownloadBtn\"\n                                Opacity=\"{DynamicResource MainOpacity}\"\n                                Width=\"20\" />\n                            <PathIcon\n                                Data=\"F1 M 4.121094 13.75 L 1.875 13.75 C 1.621094 13.75 1.380208 13.701172 1.152344 13.603516 C 0.924479 13.505859 0.724284 13.370769 0.551758 13.198242 C 0.379232 13.025717 0.244141 12.825521 0.146484 12.597656 C 0.048828 12.369792 0 12.128906 0 11.875 L 0 8.125 C 0 7.871094 0.048828 7.630209 0.146484 7.402344 C 0.244141 7.174479 0.379232 6.974284 0.551758 6.801758 C 0.724284 6.629232 0.924479 6.494141 1.152344 6.396484 C 1.380208 6.298828 1.621094 6.25 1.875 6.25 L 4.121094 6.25 L 7.148438 3.212891 C 7.239583 3.121746 7.342122 3.055014 7.456055 3.012695 C 7.569987 2.970379 7.688802 2.949219 7.8125 2.949219 C 8.079427 2.949219 8.302408 3.037109 8.481445 3.212891 C 8.660481 3.388672 8.75 3.610027 8.75 3.876953 L 8.75 16.123047 C 8.75 16.253256 8.725586 16.373697 8.676758 16.484375 C 8.62793 16.595053 8.561197 16.694336 8.476562 16.782227 C 8.391927 16.870117 8.292643 16.938477 8.178711 16.987305 C 8.064778 17.036133 7.942708 17.060547 7.8125 17.060547 C 7.552083 17.060547 7.330729 16.9694 7.148438 16.787109 Z M 12.539062 15.556641 C 12.539062 15.452475 12.556965 15.366211 12.592773 15.297852 C 12.62858 15.229492 12.682291 15.159506 12.753906 15.087891 C 13.470051 14.384766 14.023437 13.616537 14.414062 12.783203 C 14.804687 11.94987 14.999999 11.022136 15 10 C 14.999999 8.977865 14.804687 8.050131 14.414062 7.216797 C 14.023437 6.383465 13.470051 5.615235 12.753906 4.912109 C 12.682291 4.840495 12.62858 4.770508 12.592773 4.702148 C 12.556965 4.633789 12.539062 4.547526 12.539062 4.443359 C 12.539062 4.274089 12.602538 4.129232 12.729492 4.008789 C 12.856444 3.888348 13.004557 3.828125 13.173828 3.828125 C 13.264974 3.828125 13.339844 3.83952 13.398438 3.862305 C 13.457031 3.885092 13.522135 3.925781 13.59375 3.984375 C 13.795572 4.153646 13.992513 4.345704 14.18457 4.560547 C 14.376627 4.775392 14.557291 5.003256 14.726562 5.244141 C 14.895833 5.485026 15.050455 5.730795 15.19043 5.981445 C 15.330403 6.232097 15.452474 6.477865 15.556641 6.71875 C 16.018879 7.760417 16.25 8.854167 16.25 10 C 16.25 11.145834 16.018879 12.239584 15.556641 13.28125 C 15.458983 13.509115 15.338541 13.75 15.195312 14.003906 C 15.052083 14.257812 14.894205 14.508464 14.72168 14.755859 C 14.549153 15.003256 14.366861 15.236003 14.174805 15.454102 C 13.982746 15.672201 13.789062 15.859375 13.59375 16.015625 C 13.528646 16.067709 13.463541 16.106771 13.398438 16.132812 C 13.333332 16.158854 13.258463 16.171875 13.173828 16.171875 C 13.004557 16.171875 12.856444 16.111654 12.729492 15.991211 C 12.602538 15.870769 12.539062 15.725912 12.539062 15.556641 Z M 7.5 15.361328 L 7.5 4.628906 L 4.814453 7.314453 C 4.690755 7.438151 4.544271 7.5 4.375 7.5 L 1.875 7.5 C 1.705729 7.5 1.559245 7.56185 1.435547 7.685547 C 1.311849 7.809246 1.25 7.95573 1.25 8.125 L 1.25 11.875 C 1.25 12.044271 1.311849 12.190756 1.435547 12.314453 C 1.559245 12.438151 1.705729 12.5 1.875 12.5 L 4.375 12.5 C 4.544271 12.5 4.690755 12.56185 4.814453 12.685547 Z M 10.117188 13.173828 C 10.117188 13.089193 10.12858 13.017578 10.151367 12.958984 C 10.174153 12.900391 10.211588 12.838542 10.263672 12.773438 C 10.576172 12.34375 10.818685 11.90918 10.991211 11.469727 C 11.163736 11.030273 11.25 10.540365 11.25 10 C 11.25 9.459636 11.163736 8.969727 10.991211 8.530273 C 10.818685 8.090821 10.576172 7.656251 10.263672 7.226562 C 10.211588 7.161459 10.174153 7.099609 10.151367 7.041016 C 10.12858 6.982422 10.117188 6.910808 10.117188 6.826172 C 10.117188 6.656901 10.179036 6.510417 10.302734 6.386719 C 10.426432 6.263021 10.572916 6.201173 10.742188 6.201172 C 10.9375 6.201173 11.10026 6.279298 11.230469 6.435547 C 11.438802 6.676433 11.621094 6.938477 11.777344 7.22168 C 11.933593 7.504883 12.065429 7.799479 12.172852 8.105469 C 12.280272 8.411459 12.361652 8.725586 12.416992 9.047852 C 12.47233 9.370117 12.5 9.6875 12.5 10 C 12.5 10.30599 12.47233 10.620117 12.416992 10.942383 C 12.361652 11.264648 12.280272 11.580404 12.172852 11.889648 C 12.065429 12.198894 11.931965 12.496745 11.772461 12.783203 C 11.612955 13.069662 11.432291 13.330078 11.230469 13.564453 C 11.10026 13.714193 10.9375 13.789062 10.742188 13.789062 C 10.572916 13.789062 10.426432 13.730469 10.302734 13.613281 C 10.179036 13.496094 10.117188 13.349609 10.117188 13.173828 Z \"\n                                Name=\"VolumeBtn\"\n                                Opacity=\"{DynamicResource MainOpacity}\"\n                                Width=\"20\" />\n                        </StackPanel>\n                        <StackPanel Orientation=\"Horizontal\" Width=\"100\">\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"16\"\n                                Name=\"TotalTimeText\"\n                                Text=\"{Binding UiProperty.MusicTotalTime, Converter={StaticResource MsToTimeConverter}}\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"16\"\n                                Text=\"/\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"16\"\n                                Name=\"CurrentTimeText\"\n                                Text=\"{Binding UiProperty.MusicCurrentTime, Converter={StaticResource MsToTimeConverter}}\" />\n                        </StackPanel>\n                    </DockPanel>\n                </Grid>\n            </Border>\n\n            <Grid DockPanel.Dock=\"Top\" Margin=\"10,10,10,10\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition MinWidth=\"200\" Width=\"*\" />\n                    <ColumnDefinition Width=\"10\" />\n                    <ColumnDefinition MinWidth=\"300\" Width=\"300\" />\n                </Grid.ColumnDefinitions>\n                <Border\n                    ClipToBounds=\"True\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    Grid.Column=\"0\">\n                    <ContentControl Name=\"LeftControl\" />\n                </Border>\n                <GridSplitter\n                    Background=\"Transparent\"\n                    Grid.Column=\"1\"\n                    ResizeDirection=\"Columns\" />\n                <Border\n                    ClipToBounds=\"True\"\n                    CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                    Grid.Column=\"2\">\n                    <ContentControl Name=\"RightControl\" />\n                </Border>\n            </Grid>\n        </DockPanel>\n        <Border\n            Background=\"{DynamicResource 2x}\"\n            ClipToBounds=\"True\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            Height=\"30\"\n            HorizontalAlignment=\"Right\"\n            Margin=\"0,0,70,80\"\n            Name=\"VolumeRoot\"\n            Opacity=\"0\"\n            Padding=\"-5\"\n            VerticalAlignment=\"Bottom\">\n            <Border.Transitions>\n                <Transitions>\n                    <DoubleTransition Duration=\"0:0:0.15\" Property=\"Opacity\" />\n                </Transitions>\n            </Border.Transitions>\n            <DockPanel VerticalAlignment=\"Center\">\n                <StackPanel\n                    DockPanel.Dock=\"Right\"\n                    Margin=\"-5,0,15,0\"\n                    Orientation=\"Horizontal\"\n                    VerticalAlignment=\"Center\">\n                    <TextBlock\n                        Name=\"VolumeText\"\n                        Text=\"{Binding SettingEntry.Volume, Converter={StaticResource DoubleToIntByRoundConverter}}\"\n                        TextAlignment=\"Center\"\n                        Width=\"25\" />\n                    <TextBlock Text=\"%\" />\n                </StackPanel>\n                <Slider\n                    Margin=\"15,0\"\n                    Maximum=\"100\"\n                    Name=\"VolumeSlider\"\n                    Value=\"{Binding SettingEntry.Volume}\"\n                    Width=\"100\" />\n            </DockPanel>\n        </Border>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Music.axaml.cs",
    "content": "﻿using System.IO;\nusing System.Net.Http;\nusing System.Threading.Tasks;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Media;\nusing Avalonia.Platform.Storage;\nusing Avalonia.Threading;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Netease;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.IO.Network;\nusing YMCL.Public.Module.Ui;\nusing YMCL.ViewModels;\n\nnamespace YMCL.Views.Main.Pages;\n\npublic partial class Music : UserControl\n{\n    public readonly MusicPages.Lyric Lyric = new();\n    public readonly MusicPages.PlayList Playlist = new();\n    public readonly MusicPages.Search Search = new();\n    private bool _isPlaying;\n    private bool _isLyric;\n    private readonly Debouncer _debouncer;\n    private RecordSongEntry? _lastSongEntry;\n\n    public Music()\n    {\n        _debouncer =\n            new Debouncer(\n                () =>\n                {\n                    Dispatcher.UIThread.Invoke(() =>\n                    {\n                        AudioPlayer.Instance.UpdateProgress(ControlPlayerSlider.Value);\n                    });\n                }, 10);\n        InitializeComponent();\n        RightControl.Content = Playlist;\n        LeftControl.Content = Search;\n        DataContext = Data.Instance;\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        Data.UiProperty.PropertyChanged += async (o, e) =>\n        {\n            var song = Data.UiProperty.SelectedRecordSong;\n            if (e.PropertyName != nameof(UiProperty.SelectedRecordSong) ||\n                song == null) return;\n            if (_lastSongEntry == song) return;\n            _lastSongEntry = song;\n            AudioPlayer.Instance.Stop();\n            Data.UiProperty.MusicCurrentTime = 0;\n            Data.UiProperty.MusicTotalTime = 0;\n            ToggleLoadingUi(true);\n            PlayUi();\n            _ = Lyric.LoadLyric(song);\n            if (song.Type == SongType.Local)\n            {\n                Data.UiProperty.MusicTotalTime = AudioPlayer.Instance.PlayLocal(song.Path);\n                ToggleLoadingUi(false);\n            }\n            else if (song.Type == SongType.Netease)\n            {\n                var ava = await NeteaseMusic.GetMusicAvailabilityById(song.SongId);\n                if (!ava)\n                {\n                    Notice(MainLang.MusicNotAvailable, NotificationType.Error);\n                    Data.UiProperty.SelectedRecordSong = null;\n                    ToggleLoadingUi(false);\n                    return;\n                }\n\n                var url = await NeteaseMusic.GetSongUrlByIdAndLevel(song.SongId);\n                if (string.IsNullOrWhiteSpace(url.url))\n                {\n                    Notice(MainLang.NetWorkError, NotificationType.Error);\n                    Data.UiProperty.SelectedRecordSong = null;\n                    ToggleLoadingUi(false);\n                    return;\n                }\n                Data.UiProperty.MusicTotalTime = url.ms;\n                await AudioPlayer.Instance.PlayNetwork(url.url);\n                ToggleLoadingUi(false);\n            }\n        };\n        PlayBtn.PointerPressed += (_, e) =>\n        {\n            if (!e.GetCurrentPoint(this).Properties.IsLeftButtonPressed) return;\n            if (_isPlaying)\n                PauseUi();\n            else\n                PlayUi();\n        };\n        LyricBtn.PointerPressed += (o, e) =>\n        {\n            if (!e.GetCurrentPoint(this).Properties.IsLeftButtonPressed) return;\n            if (_isLyric)\n            {\n                LeftControl.Content = Search;\n                _isLyric = false;\n            }\n            else\n            {\n                LeftControl.Content = Lyric;\n                _isLyric = true;\n            }\n\n            _ = Animator.PageLoading.LevelTwoPage(LeftControl.Content as UserControl);\n        };\n        NextSongBtn.PointerPressed += (_, _) => Playlist.NextSong();\n        PreviousSongBtn.PointerPressed += (_, _) => Playlist.PreviousSong();\n        AudioPlayer.Instance.ProgressChanged += (_, e) => { Data.UiProperty.MusicCurrentTime = e.CurrentTime; };\n        ControlPlayerSlider.ValueChanged += (_, _) =>\n        {\n            _debouncer.Trigger();\n            Data.UiProperty.MusicCurrentTime = ControlPlayerSlider.Value;\n        };\n        AudioPlayer.Instance.PlaybackCompleted += (_, _) =>\n        {\n            if (Math.Abs(Data.UiProperty.MusicCurrentTime - Data.UiProperty.MusicTotalTime) > 1000 ||\n                Data.UiProperty.MusicTotalTime == 0) return;\n            switch (Data.SettingEntry.Repeat)\n            {\n                case Public.Enum.Setting.Repeat.RepeatAll:\n                    if (Data.RecordSongEntries.Count > 1)\n                        Playlist.NextSong();\n                    else\n                        AudioPlayer.Instance.UpdateProgress(0);\n                    // await System.Threading.Tasks.Task.Delay(1000);\n                    AudioPlayer.Instance.Resume();\n                    break;\n                case Public.Enum.Setting.Repeat.RepeatOne:\n                    AudioPlayer.Instance.UpdateProgress(0);\n                    // await System.Threading.Tasks.Task.Delay(1000);\n                    AudioPlayer.Instance.Resume();\n                    break;\n                default:\n                    PauseUi();\n                    break;\n            }\n        };\n        VolumeBtn.PointerPressed += (_, _) =>\n        {\n            if (VolumeRoot.Opacity == 0)\n                VolumeRoot.Opacity = (double)Application.Current.Resources[\"MainOpacity\"]!;\n            else\n                VolumeRoot.Opacity = 0;\n        };\n        RepeatBtn.PointerPressed += (_, _) =>\n        {\n            switch (Data.SettingEntry.Repeat)\n            {\n                case Public.Enum.Setting.Repeat.RepeatOff:\n                    Data.SettingEntry.Repeat = Public.Enum.Setting.Repeat.RepeatAll;\n                    RepeatBtn.Data = PathGeometry.Parse(\n                        \"F1 M 7.5 3.75 C 6.634114 3.75 5.82194 3.912762 5.063477 4.238281 C 4.305013 4.563803 3.642578 5.009766 3.076172 5.576172 C 2.509766 6.142578 2.063802 6.805014 1.738281 7.563477 C 1.41276 8.32194 1.25 9.134115 1.25 10 C 1.25 10.527344 1.318359 11.056315 1.455078 11.586914 C 1.591797 12.117514 1.79362 12.613933 2.060547 13.076172 C 2.099609 13.147787 2.150065 13.225912 2.211914 13.310547 C 2.273763 13.395183 2.333984 13.483073 2.392578 13.574219 C 2.451172 13.665365 2.501627 13.756511 2.543945 13.847656 C 2.586263 13.938803 2.607422 14.023438 2.607422 14.101562 C 2.607422 14.270834 2.545573 14.417318 2.421875 14.541016 C 2.298177 14.664714 2.151693 14.726562 1.982422 14.726562 C 1.871745 14.726562 1.778971 14.703776 1.704102 14.658203 C 1.629232 14.612631 1.55599 14.550781 1.484375 14.472656 C 1.24349 14.192709 1.030273 13.870443 0.844727 13.505859 C 0.65918 13.141276 0.504557 12.760417 0.380859 12.363281 C 0.257161 11.966146 0.16276 11.564128 0.097656 11.157227 C 0.032552 10.750326 0 10.364584 0 10 C 0 9.316406 0.089518 8.6556 0.268555 8.017578 C 0.447591 7.379558 0.69987 6.782227 1.025391 6.225586 C 1.350911 5.668945 1.741536 5.162761 2.197266 4.707031 C 2.652995 4.251303 3.157552 3.859051 3.710938 3.530273 C 4.264323 3.201498 4.861653 2.947592 5.50293 2.768555 C 6.144206 2.58952 6.809896 2.5 7.5 2.5 L 14.121094 2.5 L 12.685547 1.064453 C 12.561849 0.940756 12.5 0.794271 12.5 0.625 C 12.5 0.45573 12.561849 0.309246 12.685547 0.185547 C 12.809244 0.06185 12.955729 0 13.125 0 C 13.294271 0 13.440755 0.06185 13.564453 0.185547 L 16.064453 2.685547 C 16.18815 2.809246 16.25 2.95573 16.25 3.125 C 16.25 3.294271 16.18815 3.440756 16.064453 3.564453 L 13.564453 6.064453 C 13.440755 6.188151 13.294271 6.25 13.125 6.25 C 12.955729 6.25 12.809244 6.188151 12.685547 6.064453 C 12.561849 5.940756 12.5 5.794271 12.5 5.625 C 12.5 5.455729 12.561849 5.309245 12.685547 5.185547 L 14.121094 3.75 Z M 20 10 C 20 10.690104 19.91048 11.352539 19.731445 11.987305 C 19.552408 12.62207 19.300129 13.217773 18.974609 13.774414 C 18.649088 14.331055 18.258463 14.83724 17.802734 15.292969 C 17.347004 15.748698 16.842447 16.140951 16.289062 16.469727 C 15.735677 16.798502 15.138346 17.052408 14.49707 17.231445 C 13.855793 17.410482 13.190104 17.5 12.5 17.5 L 5.888672 17.5 L 7.314453 18.935547 C 7.43815 19.059244 7.5 19.205729 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 C 6.705729 20 6.559244 19.93815 6.435547 19.814453 L 3.935547 17.314453 C 3.811849 17.190756 3.75 17.044271 3.75 16.875 C 3.75 16.705729 3.811849 16.559244 3.935547 16.435547 L 6.435547 13.935547 C 6.559244 13.81185 6.705729 13.75 6.875 13.75 C 7.044271 13.75 7.190755 13.81185 7.314453 13.935547 C 7.43815 14.059245 7.5 14.205729 7.5 14.375 C 7.5 14.544271 7.43815 14.690756 7.314453 14.814453 L 5.888672 16.25 L 12.5 16.25 C 13.365885 16.25 14.178059 16.08724 14.936523 15.761719 C 15.694986 15.436198 16.357422 14.990234 16.923828 14.423828 C 17.490234 13.857422 17.936197 13.194987 18.261719 12.436523 C 18.587238 11.678061 18.75 10.865886 18.75 10 C 18.75 9.628906 18.723957 9.283854 18.671875 8.964844 C 18.619791 8.645834 18.541666 8.336589 18.4375 8.037109 C 18.333332 7.737631 18.204752 7.444662 18.051758 7.158203 C 17.898762 6.871746 17.721354 6.575521 17.519531 6.269531 C 17.473957 6.197917 17.441406 6.139323 17.421875 6.09375 C 17.402344 6.048178 17.392578 5.983074 17.392578 5.898438 C 17.392578 5.729168 17.452799 5.581056 17.573242 5.454102 C 17.693684 5.327149 17.841797 5.263673 18.017578 5.263672 C 18.128254 5.263673 18.221027 5.286459 18.295898 5.332031 C 18.370768 5.377604 18.44401 5.439453 18.515625 5.517578 C 18.75651 5.797527 18.969727 6.119793 19.155273 6.484375 C 19.34082 6.848959 19.495441 7.231445 19.619141 7.631836 C 19.742838 8.032227 19.837238 8.435873 19.902344 8.842773 C 19.967447 9.249675 20 9.635417 20 10 Z \");\n                    break;\n                case Public.Enum.Setting.Repeat.RepeatAll:\n                    Data.SettingEntry.Repeat = Public.Enum.Setting.Repeat.RepeatOne;\n                    RepeatBtn.Data = RepeatBtn.Data = PathGeometry.Parse(\n                        \"F1 M 7.5 3.75 C 6.634114 3.75 5.82194 3.912762 5.063477 4.238281 C 4.305013 4.563803 3.642578 5.009766 3.076172 5.576172 C 2.509766 6.142578 2.063802 6.805014 1.738281 7.563477 C 1.41276 8.32194 1.25 9.134115 1.25 10 C 1.25 10.384115 1.277669 10.73405 1.333008 11.049805 C 1.388346 11.365561 1.468099 11.669922 1.572266 11.962891 C 1.676432 12.255859 1.806641 12.543945 1.962891 12.827148 C 2.119141 13.110352 2.294922 13.411459 2.490234 13.730469 C 2.529297 13.795573 2.560221 13.855795 2.583008 13.911133 C 2.605794 13.966472 2.617188 14.029948 2.617188 14.101562 C 2.617188 14.270834 2.553711 14.417318 2.426758 14.541016 C 2.299805 14.664714 2.151693 14.726562 1.982422 14.726562 C 1.871745 14.726562 1.778971 14.703776 1.704102 14.658203 C 1.629232 14.612631 1.55599 14.550781 1.484375 14.472656 C 1.25 14.199219 1.040039 13.880209 0.854492 13.515625 C 0.668945 13.151042 0.512695 12.766928 0.385742 12.363281 C 0.258789 11.959636 0.16276 11.552734 0.097656 11.142578 C 0.032552 10.732422 0 10.351562 0 10 C 0 8.990886 0.188802 8.032227 0.566406 7.124023 C 0.94401 6.215821 1.48763 5.406902 2.197266 4.697266 C 2.906901 3.987631 3.71582 3.444012 4.624023 3.066406 C 5.532227 2.688803 6.490885 2.5 7.5 2.5 L 14.121094 2.5 L 12.685547 1.064453 C 12.561849 0.940756 12.5 0.794271 12.5 0.625 C 12.5 0.45573 12.561849 0.309246 12.685547 0.185547 C 12.809244 0.06185 12.955729 0 13.125 0 C 13.294271 0 13.440755 0.06185 13.564453 0.185547 L 16.064453 2.685547 C 16.18815 2.809246 16.25 2.95573 16.25 3.125 C 16.25 3.294271 16.18815 3.440756 16.064453 3.564453 L 13.564453 6.064453 C 13.440755 6.188151 13.294271 6.25 13.125 6.25 C 12.955729 6.25 12.809244 6.188151 12.685547 6.064453 C 12.561849 5.940756 12.5 5.794271 12.5 5.625 C 12.5 5.455729 12.561849 5.309245 12.685547 5.185547 L 14.121094 3.75 Z M 17.392578 5.898438 C 17.392578 5.729168 17.452799 5.581056 17.573242 5.454102 C 17.693684 5.327149 17.841797 5.263673 18.017578 5.263672 C 18.128254 5.263673 18.221027 5.286459 18.295898 5.332031 C 18.370768 5.377604 18.44401 5.439453 18.515625 5.517578 C 18.75 5.784506 18.958332 6.097006 19.140625 6.455078 C 19.322916 6.813152 19.47591 7.189129 19.599609 7.583008 C 19.723307 7.976889 19.819336 8.374023 19.887695 8.774414 C 19.956055 9.174805 19.993488 9.550781 20 9.902344 C 19.791666 9.648438 19.570312 9.405925 19.335938 9.174805 C 19.101562 8.943686 18.85091 8.733725 18.583984 8.544922 C 18.479816 8.115235 18.334961 7.721355 18.149414 7.363281 C 17.963867 7.005209 17.753906 6.640625 17.519531 6.269531 C 17.473957 6.197917 17.441406 6.139323 17.421875 6.09375 C 17.402344 6.048178 17.392578 5.983074 17.392578 5.898438 Z M 20 14.375 C 20 15.14974 19.851887 15.878906 19.555664 16.5625 C 19.259439 17.246094 18.857422 17.841797 18.349609 18.349609 C 17.841797 18.857422 17.246094 19.259439 16.5625 19.555664 C 15.878906 19.851889 15.149739 20 14.375 20 C 13.59375 20 12.861328 19.853516 12.177734 19.560547 C 11.494141 19.267578 10.898438 18.867188 10.390625 18.359375 C 9.882812 17.851562 9.482422 17.255859 9.189453 16.572266 C 8.896484 15.888672 8.75 15.15625 8.75 14.375 C 8.75 13.600261 8.898111 12.871094 9.194336 12.1875 C 9.49056 11.503906 9.892578 10.908203 10.400391 10.400391 C 10.908203 9.892578 11.503906 9.490561 12.1875 9.194336 C 12.871093 8.898112 13.60026 8.75 14.375 8.75 C 14.889322 8.75 15.385741 8.816732 15.864258 8.950195 C 16.342773 9.083659 16.790363 9.272461 17.207031 9.516602 C 17.623697 9.760742 18.004557 10.055339 18.349609 10.400391 C 18.69466 10.745443 18.989258 11.126303 19.233398 11.542969 C 19.477539 11.959636 19.66634 12.407227 19.799805 12.885742 C 19.933268 13.364258 20 13.860678 20 14.375 Z M 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 C 14.205729 11.25 14.059244 11.31185 13.935547 11.435547 L 12.685547 12.685547 C 12.561849 12.809245 12.5 12.955729 12.5 13.125 C 12.5 13.294271 12.561849 13.440756 12.685547 13.564453 C 12.809244 13.688151 12.955729 13.75 13.125 13.75 C 13.268229 13.75 13.385416 13.712565 13.476562 13.637695 C 13.567708 13.562826 13.658854 13.479818 13.75 13.388672 L 13.75 16.875 C 13.75 17.044271 13.811849 17.190756 13.935547 17.314453 C 14.059244 17.43815 14.205729 17.5 14.375 17.5 C 14.544271 17.5 14.690755 17.43815 14.814453 17.314453 C 14.93815 17.190756 14.999999 17.044271 15 16.875 Z M 7.431641 16.25 C 7.548828 16.686197 7.705078 17.102865 7.900391 17.5 L 5.888672 17.5 L 7.314453 18.935547 C 7.43815 19.059244 7.5 19.205729 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 C 6.705729 20 6.559244 19.93815 6.435547 19.814453 L 3.935547 17.314453 C 3.811849 17.190756 3.75 17.044271 3.75 16.875 C 3.75 16.705729 3.811849 16.559244 3.935547 16.435547 L 6.435547 13.935547 C 6.559244 13.81185 6.705729 13.75 6.875 13.75 C 7.005208 13.75 7.115885 13.782553 7.207031 13.847656 C 7.200521 13.938803 7.195638 14.02832 7.192383 14.116211 C 7.189127 14.204102 7.1875 14.29362 7.1875 14.384766 C 7.1875 14.475912 7.189127 14.56543 7.192383 14.65332 C 7.195638 14.741211 7.200521 14.830729 7.207031 14.921875 L 5.888672 16.25 Z \");\n                    break;\n                default:\n                    Data.SettingEntry.Repeat = Public.Enum.Setting.Repeat.RepeatOff;\n                    RepeatBtn.Data = RepeatBtn.Data = PathGeometry.Parse(\n                        \"F1 M 20 19.375 C 20 19.544271 19.93815 19.690756 19.814453 19.814453 C 19.690754 19.93815 19.54427 20 19.375 20 C 19.205729 20 19.059244 19.93815 18.935547 19.814453 L 0.185547 1.064453 C 0.061849 0.940756 0 0.794271 0 0.625 C 0 0.45573 0.061849 0.309246 0.185547 0.185547 C 0.309245 0.06185 0.455729 0 0.625 0 C 0.794271 0 0.940755 0.06185 1.064453 0.185547 L 19.814453 18.935547 C 19.93815 19.059244 20 19.205729 20 19.375 Z M 7.5 3.75 C 7.330729 3.75 7.161458 3.756512 6.992188 3.769531 C 6.822916 3.782553 6.653646 3.802084 6.484375 3.828125 L 5.439453 2.792969 C 6.103516 2.597656 6.790364 2.5 7.5 2.5 L 14.121094 2.5 L 12.685547 1.064453 C 12.561849 0.940756 12.5 0.794271 12.5 0.625 C 12.5 0.45573 12.561849 0.309246 12.685547 0.185547 C 12.809244 0.06185 12.955729 0 13.125 0 C 13.294271 0 13.440755 0.06185 13.564453 0.185547 L 16.064453 2.685547 C 16.18815 2.809246 16.25 2.95573 16.25 3.125 C 16.25 3.294271 16.18815 3.440756 16.064453 3.564453 L 13.564453 6.064453 C 13.440755 6.188151 13.294271 6.25 13.125 6.25 C 12.955729 6.25 12.809244 6.188151 12.685547 6.064453 C 12.561849 5.940756 12.5 5.794271 12.5 5.625 C 12.5 5.455729 12.561849 5.309245 12.685547 5.185547 L 14.121094 3.75 Z M 3.066406 3.955078 L 3.964844 4.84375 C 3.535156 5.130209 3.152669 5.463867 2.817383 5.844727 C 2.482096 6.225586 2.198893 6.63737 1.967773 7.080078 C 1.736654 7.522787 1.559245 7.991537 1.435547 8.486328 C 1.311849 8.98112 1.25 9.485678 1.25 10 C 1.25 10.709636 1.355794 11.363933 1.567383 11.962891 C 1.778971 12.56185 2.083333 13.151042 2.480469 13.730469 C 2.526042 13.795573 2.558594 13.852539 2.578125 13.901367 C 2.597656 13.950195 2.607422 14.016928 2.607422 14.101562 C 2.607422 14.270834 2.545573 14.418945 2.421875 14.545898 C 2.298177 14.672852 2.151693 14.736328 1.982422 14.736328 C 1.871745 14.736328 1.778971 14.713542 1.704102 14.667969 C 1.629232 14.622396 1.55599 14.560547 1.484375 14.482422 C 1.39974 14.391276 1.323242 14.287109 1.254883 14.169922 C 1.186523 14.052734 1.119792 13.942058 1.054688 13.837891 C 0.703125 13.251953 0.439453 12.635092 0.263672 11.987305 C 0.087891 11.339519 0 10.677084 0 10 C 0 8.769531 0.268555 7.638347 0.805664 6.606445 C 1.342773 5.574545 2.096354 4.690756 3.066406 3.955078 Z M 16.992188 14.345703 C 17.552082 13.759766 17.985025 13.092448 18.291016 12.34375 C 18.597004 11.595053 18.75 10.813803 18.75 10 C 18.75 9.290365 18.644205 8.636068 18.432617 8.037109 C 18.221027 7.438152 17.916666 6.848959 17.519531 6.269531 C 17.473957 6.204428 17.441406 6.147462 17.421875 6.098633 C 17.402344 6.049806 17.392578 5.983074 17.392578 5.898438 C 17.392578 5.729168 17.454426 5.581056 17.578125 5.454102 C 17.701822 5.327149 17.848307 5.263673 18.017578 5.263672 C 18.128254 5.263673 18.221027 5.286459 18.295898 5.332031 C 18.370768 5.377604 18.44401 5.439453 18.515625 5.517578 C 18.587238 5.602215 18.655598 5.694988 18.720703 5.795898 C 18.785807 5.896811 18.847656 5.996094 18.90625 6.09375 C 19.264322 6.686198 19.536133 7.312826 19.72168 7.973633 C 19.907227 8.63444 20 9.309896 20 10 C 20 10.976562 19.817707 11.91569 19.453125 12.817383 C 19.088541 13.719076 18.564453 14.521484 17.880859 15.224609 Z M 5.888672 16.25 L 12.5 16.25 C 13.320312 16.25 14.117838 16.090496 14.892578 15.771484 L 15.830078 16.71875 C 15.309244 16.972656 14.770508 17.166342 14.213867 17.299805 C 13.657227 17.433268 13.085938 17.5 12.5 17.5 L 5.888672 17.5 L 7.314453 18.935547 C 7.43815 19.059244 7.5 19.205729 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 C 6.705729 20 6.559244 19.93815 6.435547 19.814453 L 3.935547 17.314453 C 3.811849 17.190756 3.75 17.044271 3.75 16.875 C 3.75 16.705729 3.811849 16.559244 3.935547 16.435547 L 6.435547 13.935547 C 6.559244 13.81185 6.705729 13.75 6.875 13.75 C 7.044271 13.75 7.190755 13.81185 7.314453 13.935547 C 7.43815 14.059245 7.5 14.205729 7.5 14.375 C 7.5 14.544271 7.43815 14.690756 7.314453 14.814453 Z \");\n                    break;\n            }\n        };\n        Loaded += (_, _) =>\n        {\n            RepeatBtn.Data = Data.SettingEntry.Repeat switch\n            {\n                Public.Enum.Setting.Repeat.RepeatAll => PathGeometry.Parse(\n                    \"F1 M 7.5 3.75 C 6.634114 3.75 5.82194 3.912762 5.063477 4.238281 C 4.305013 4.563803 3.642578 5.009766 3.076172 5.576172 C 2.509766 6.142578 2.063802 6.805014 1.738281 7.563477 C 1.41276 8.32194 1.25 9.134115 1.25 10 C 1.25 10.527344 1.318359 11.056315 1.455078 11.586914 C 1.591797 12.117514 1.79362 12.613933 2.060547 13.076172 C 2.099609 13.147787 2.150065 13.225912 2.211914 13.310547 C 2.273763 13.395183 2.333984 13.483073 2.392578 13.574219 C 2.451172 13.665365 2.501627 13.756511 2.543945 13.847656 C 2.586263 13.938803 2.607422 14.023438 2.607422 14.101562 C 2.607422 14.270834 2.545573 14.417318 2.421875 14.541016 C 2.298177 14.664714 2.151693 14.726562 1.982422 14.726562 C 1.871745 14.726562 1.778971 14.703776 1.704102 14.658203 C 1.629232 14.612631 1.55599 14.550781 1.484375 14.472656 C 1.24349 14.192709 1.030273 13.870443 0.844727 13.505859 C 0.65918 13.141276 0.504557 12.760417 0.380859 12.363281 C 0.257161 11.966146 0.16276 11.564128 0.097656 11.157227 C 0.032552 10.750326 0 10.364584 0 10 C 0 9.316406 0.089518 8.6556 0.268555 8.017578 C 0.447591 7.379558 0.69987 6.782227 1.025391 6.225586 C 1.350911 5.668945 1.741536 5.162761 2.197266 4.707031 C 2.652995 4.251303 3.157552 3.859051 3.710938 3.530273 C 4.264323 3.201498 4.861653 2.947592 5.50293 2.768555 C 6.144206 2.58952 6.809896 2.5 7.5 2.5 L 14.121094 2.5 L 12.685547 1.064453 C 12.561849 0.940756 12.5 0.794271 12.5 0.625 C 12.5 0.45573 12.561849 0.309246 12.685547 0.185547 C 12.809244 0.06185 12.955729 0 13.125 0 C 13.294271 0 13.440755 0.06185 13.564453 0.185547 L 16.064453 2.685547 C 16.18815 2.809246 16.25 2.95573 16.25 3.125 C 16.25 3.294271 16.18815 3.440756 16.064453 3.564453 L 13.564453 6.064453 C 13.440755 6.188151 13.294271 6.25 13.125 6.25 C 12.955729 6.25 12.809244 6.188151 12.685547 6.064453 C 12.561849 5.940756 12.5 5.794271 12.5 5.625 C 12.5 5.455729 12.561849 5.309245 12.685547 5.185547 L 14.121094 3.75 Z M 20 10 C 20 10.690104 19.91048 11.352539 19.731445 11.987305 C 19.552408 12.62207 19.300129 13.217773 18.974609 13.774414 C 18.649088 14.331055 18.258463 14.83724 17.802734 15.292969 C 17.347004 15.748698 16.842447 16.140951 16.289062 16.469727 C 15.735677 16.798502 15.138346 17.052408 14.49707 17.231445 C 13.855793 17.410482 13.190104 17.5 12.5 17.5 L 5.888672 17.5 L 7.314453 18.935547 C 7.43815 19.059244 7.5 19.205729 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 C 6.705729 20 6.559244 19.93815 6.435547 19.814453 L 3.935547 17.314453 C 3.811849 17.190756 3.75 17.044271 3.75 16.875 C 3.75 16.705729 3.811849 16.559244 3.935547 16.435547 L 6.435547 13.935547 C 6.559244 13.81185 6.705729 13.75 6.875 13.75 C 7.044271 13.75 7.190755 13.81185 7.314453 13.935547 C 7.43815 14.059245 7.5 14.205729 7.5 14.375 C 7.5 14.544271 7.43815 14.690756 7.314453 14.814453 L 5.888672 16.25 L 12.5 16.25 C 13.365885 16.25 14.178059 16.08724 14.936523 15.761719 C 15.694986 15.436198 16.357422 14.990234 16.923828 14.423828 C 17.490234 13.857422 17.936197 13.194987 18.261719 12.436523 C 18.587238 11.678061 18.75 10.865886 18.75 10 C 18.75 9.628906 18.723957 9.283854 18.671875 8.964844 C 18.619791 8.645834 18.541666 8.336589 18.4375 8.037109 C 18.333332 7.737631 18.204752 7.444662 18.051758 7.158203 C 17.898762 6.871746 17.721354 6.575521 17.519531 6.269531 C 17.473957 6.197917 17.441406 6.139323 17.421875 6.09375 C 17.402344 6.048178 17.392578 5.983074 17.392578 5.898438 C 17.392578 5.729168 17.452799 5.581056 17.573242 5.454102 C 17.693684 5.327149 17.841797 5.263673 18.017578 5.263672 C 18.128254 5.263673 18.221027 5.286459 18.295898 5.332031 C 18.370768 5.377604 18.44401 5.439453 18.515625 5.517578 C 18.75651 5.797527 18.969727 6.119793 19.155273 6.484375 C 19.34082 6.848959 19.495441 7.231445 19.619141 7.631836 C 19.742838 8.032227 19.837238 8.435873 19.902344 8.842773 C 19.967447 9.249675 20 9.635417 20 10 Z \"),\n                Public.Enum.Setting.Repeat.RepeatOne => RepeatBtn.Data = PathGeometry.Parse(\n                    \"F1 M 7.5 3.75 C 6.634114 3.75 5.82194 3.912762 5.063477 4.238281 C 4.305013 4.563803 3.642578 5.009766 3.076172 5.576172 C 2.509766 6.142578 2.063802 6.805014 1.738281 7.563477 C 1.41276 8.32194 1.25 9.134115 1.25 10 C 1.25 10.384115 1.277669 10.73405 1.333008 11.049805 C 1.388346 11.365561 1.468099 11.669922 1.572266 11.962891 C 1.676432 12.255859 1.806641 12.543945 1.962891 12.827148 C 2.119141 13.110352 2.294922 13.411459 2.490234 13.730469 C 2.529297 13.795573 2.560221 13.855795 2.583008 13.911133 C 2.605794 13.966472 2.617188 14.029948 2.617188 14.101562 C 2.617188 14.270834 2.553711 14.417318 2.426758 14.541016 C 2.299805 14.664714 2.151693 14.726562 1.982422 14.726562 C 1.871745 14.726562 1.778971 14.703776 1.704102 14.658203 C 1.629232 14.612631 1.55599 14.550781 1.484375 14.472656 C 1.25 14.199219 1.040039 13.880209 0.854492 13.515625 C 0.668945 13.151042 0.512695 12.766928 0.385742 12.363281 C 0.258789 11.959636 0.16276 11.552734 0.097656 11.142578 C 0.032552 10.732422 0 10.351562 0 10 C 0 8.990886 0.188802 8.032227 0.566406 7.124023 C 0.94401 6.215821 1.48763 5.406902 2.197266 4.697266 C 2.906901 3.987631 3.71582 3.444012 4.624023 3.066406 C 5.532227 2.688803 6.490885 2.5 7.5 2.5 L 14.121094 2.5 L 12.685547 1.064453 C 12.561849 0.940756 12.5 0.794271 12.5 0.625 C 12.5 0.45573 12.561849 0.309246 12.685547 0.185547 C 12.809244 0.06185 12.955729 0 13.125 0 C 13.294271 0 13.440755 0.06185 13.564453 0.185547 L 16.064453 2.685547 C 16.18815 2.809246 16.25 2.95573 16.25 3.125 C 16.25 3.294271 16.18815 3.440756 16.064453 3.564453 L 13.564453 6.064453 C 13.440755 6.188151 13.294271 6.25 13.125 6.25 C 12.955729 6.25 12.809244 6.188151 12.685547 6.064453 C 12.561849 5.940756 12.5 5.794271 12.5 5.625 C 12.5 5.455729 12.561849 5.309245 12.685547 5.185547 L 14.121094 3.75 Z M 17.392578 5.898438 C 17.392578 5.729168 17.452799 5.581056 17.573242 5.454102 C 17.693684 5.327149 17.841797 5.263673 18.017578 5.263672 C 18.128254 5.263673 18.221027 5.286459 18.295898 5.332031 C 18.370768 5.377604 18.44401 5.439453 18.515625 5.517578 C 18.75 5.784506 18.958332 6.097006 19.140625 6.455078 C 19.322916 6.813152 19.47591 7.189129 19.599609 7.583008 C 19.723307 7.976889 19.819336 8.374023 19.887695 8.774414 C 19.956055 9.174805 19.993488 9.550781 20 9.902344 C 19.791666 9.648438 19.570312 9.405925 19.335938 9.174805 C 19.101562 8.943686 18.85091 8.733725 18.583984 8.544922 C 18.479816 8.115235 18.334961 7.721355 18.149414 7.363281 C 17.963867 7.005209 17.753906 6.640625 17.519531 6.269531 C 17.473957 6.197917 17.441406 6.139323 17.421875 6.09375 C 17.402344 6.048178 17.392578 5.983074 17.392578 5.898438 Z M 20 14.375 C 20 15.14974 19.851887 15.878906 19.555664 16.5625 C 19.259439 17.246094 18.857422 17.841797 18.349609 18.349609 C 17.841797 18.857422 17.246094 19.259439 16.5625 19.555664 C 15.878906 19.851889 15.149739 20 14.375 20 C 13.59375 20 12.861328 19.853516 12.177734 19.560547 C 11.494141 19.267578 10.898438 18.867188 10.390625 18.359375 C 9.882812 17.851562 9.482422 17.255859 9.189453 16.572266 C 8.896484 15.888672 8.75 15.15625 8.75 14.375 C 8.75 13.600261 8.898111 12.871094 9.194336 12.1875 C 9.49056 11.503906 9.892578 10.908203 10.400391 10.400391 C 10.908203 9.892578 11.503906 9.490561 12.1875 9.194336 C 12.871093 8.898112 13.60026 8.75 14.375 8.75 C 14.889322 8.75 15.385741 8.816732 15.864258 8.950195 C 16.342773 9.083659 16.790363 9.272461 17.207031 9.516602 C 17.623697 9.760742 18.004557 10.055339 18.349609 10.400391 C 18.69466 10.745443 18.989258 11.126303 19.233398 11.542969 C 19.477539 11.959636 19.66634 12.407227 19.799805 12.885742 C 19.933268 13.364258 20 13.860678 20 14.375 Z M 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 C 14.205729 11.25 14.059244 11.31185 13.935547 11.435547 L 12.685547 12.685547 C 12.561849 12.809245 12.5 12.955729 12.5 13.125 C 12.5 13.294271 12.561849 13.440756 12.685547 13.564453 C 12.809244 13.688151 12.955729 13.75 13.125 13.75 C 13.268229 13.75 13.385416 13.712565 13.476562 13.637695 C 13.567708 13.562826 13.658854 13.479818 13.75 13.388672 L 13.75 16.875 C 13.75 17.044271 13.811849 17.190756 13.935547 17.314453 C 14.059244 17.43815 14.205729 17.5 14.375 17.5 C 14.544271 17.5 14.690755 17.43815 14.814453 17.314453 C 14.93815 17.190756 14.999999 17.044271 15 16.875 Z M 7.431641 16.25 C 7.548828 16.686197 7.705078 17.102865 7.900391 17.5 L 5.888672 17.5 L 7.314453 18.935547 C 7.43815 19.059244 7.5 19.205729 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 C 6.705729 20 6.559244 19.93815 6.435547 19.814453 L 3.935547 17.314453 C 3.811849 17.190756 3.75 17.044271 3.75 16.875 C 3.75 16.705729 3.811849 16.559244 3.935547 16.435547 L 6.435547 13.935547 C 6.559244 13.81185 6.705729 13.75 6.875 13.75 C 7.005208 13.75 7.115885 13.782553 7.207031 13.847656 C 7.200521 13.938803 7.195638 14.02832 7.192383 14.116211 C 7.189127 14.204102 7.1875 14.29362 7.1875 14.384766 C 7.1875 14.475912 7.189127 14.56543 7.192383 14.65332 C 7.195638 14.741211 7.200521 14.830729 7.207031 14.921875 L 5.888672 16.25 Z \"),\n                Public.Enum.Setting.Repeat.RepeatOff => RepeatBtn.Data = PathGeometry.Parse(\n                    \"F1 M 20 19.375 C 20 19.544271 19.93815 19.690756 19.814453 19.814453 C 19.690754 19.93815 19.54427 20 19.375 20 C 19.205729 20 19.059244 19.93815 18.935547 19.814453 L 0.185547 1.064453 C 0.061849 0.940756 0 0.794271 0 0.625 C 0 0.45573 0.061849 0.309246 0.185547 0.185547 C 0.309245 0.06185 0.455729 0 0.625 0 C 0.794271 0 0.940755 0.06185 1.064453 0.185547 L 19.814453 18.935547 C 19.93815 19.059244 20 19.205729 20 19.375 Z M 7.5 3.75 C 7.330729 3.75 7.161458 3.756512 6.992188 3.769531 C 6.822916 3.782553 6.653646 3.802084 6.484375 3.828125 L 5.439453 2.792969 C 6.103516 2.597656 6.790364 2.5 7.5 2.5 L 14.121094 2.5 L 12.685547 1.064453 C 12.561849 0.940756 12.5 0.794271 12.5 0.625 C 12.5 0.45573 12.561849 0.309246 12.685547 0.185547 C 12.809244 0.06185 12.955729 0 13.125 0 C 13.294271 0 13.440755 0.06185 13.564453 0.185547 L 16.064453 2.685547 C 16.18815 2.809246 16.25 2.95573 16.25 3.125 C 16.25 3.294271 16.18815 3.440756 16.064453 3.564453 L 13.564453 6.064453 C 13.440755 6.188151 13.294271 6.25 13.125 6.25 C 12.955729 6.25 12.809244 6.188151 12.685547 6.064453 C 12.561849 5.940756 12.5 5.794271 12.5 5.625 C 12.5 5.455729 12.561849 5.309245 12.685547 5.185547 L 14.121094 3.75 Z M 3.066406 3.955078 L 3.964844 4.84375 C 3.535156 5.130209 3.152669 5.463867 2.817383 5.844727 C 2.482096 6.225586 2.198893 6.63737 1.967773 7.080078 C 1.736654 7.522787 1.559245 7.991537 1.435547 8.486328 C 1.311849 8.98112 1.25 9.485678 1.25 10 C 1.25 10.709636 1.355794 11.363933 1.567383 11.962891 C 1.778971 12.56185 2.083333 13.151042 2.480469 13.730469 C 2.526042 13.795573 2.558594 13.852539 2.578125 13.901367 C 2.597656 13.950195 2.607422 14.016928 2.607422 14.101562 C 2.607422 14.270834 2.545573 14.418945 2.421875 14.545898 C 2.298177 14.672852 2.151693 14.736328 1.982422 14.736328 C 1.871745 14.736328 1.778971 14.713542 1.704102 14.667969 C 1.629232 14.622396 1.55599 14.560547 1.484375 14.482422 C 1.39974 14.391276 1.323242 14.287109 1.254883 14.169922 C 1.186523 14.052734 1.119792 13.942058 1.054688 13.837891 C 0.703125 13.251953 0.439453 12.635092 0.263672 11.987305 C 0.087891 11.339519 0 10.677084 0 10 C 0 8.769531 0.268555 7.638347 0.805664 6.606445 C 1.342773 5.574545 2.096354 4.690756 3.066406 3.955078 Z M 16.992188 14.345703 C 17.552082 13.759766 17.985025 13.092448 18.291016 12.34375 C 18.597004 11.595053 18.75 10.813803 18.75 10 C 18.75 9.290365 18.644205 8.636068 18.432617 8.037109 C 18.221027 7.438152 17.916666 6.848959 17.519531 6.269531 C 17.473957 6.204428 17.441406 6.147462 17.421875 6.098633 C 17.402344 6.049806 17.392578 5.983074 17.392578 5.898438 C 17.392578 5.729168 17.454426 5.581056 17.578125 5.454102 C 17.701822 5.327149 17.848307 5.263673 18.017578 5.263672 C 18.128254 5.263673 18.221027 5.286459 18.295898 5.332031 C 18.370768 5.377604 18.44401 5.439453 18.515625 5.517578 C 18.587238 5.602215 18.655598 5.694988 18.720703 5.795898 C 18.785807 5.896811 18.847656 5.996094 18.90625 6.09375 C 19.264322 6.686198 19.536133 7.312826 19.72168 7.973633 C 19.907227 8.63444 20 9.309896 20 10 C 20 10.976562 19.817707 11.91569 19.453125 12.817383 C 19.088541 13.719076 18.564453 14.521484 17.880859 15.224609 Z M 5.888672 16.25 L 12.5 16.25 C 13.320312 16.25 14.117838 16.090496 14.892578 15.771484 L 15.830078 16.71875 C 15.309244 16.972656 14.770508 17.166342 14.213867 17.299805 C 13.657227 17.433268 13.085938 17.5 12.5 17.5 L 5.888672 17.5 L 7.314453 18.935547 C 7.43815 19.059244 7.5 19.205729 7.5 19.375 C 7.5 19.544271 7.43815 19.690756 7.314453 19.814453 C 7.190755 19.93815 7.044271 20 6.875 20 C 6.705729 20 6.559244 19.93815 6.435547 19.814453 L 3.935547 17.314453 C 3.811849 17.190756 3.75 17.044271 3.75 16.875 C 3.75 16.705729 3.811849 16.559244 3.935547 16.435547 L 6.435547 13.935547 C 6.559244 13.81185 6.705729 13.75 6.875 13.75 C 7.044271 13.75 7.190755 13.81185 7.314453 13.935547 C 7.43815 14.059245 7.5 14.205729 7.5 14.375 C 7.5 14.544271 7.43815 14.690756 7.314453 14.814453 Z \"),\n                _ => RepeatBtn.Data\n            };\n            _ = Animator.PageLoading.LevelTwoPage(LeftControl.Content as UserControl);\n            _ = Animator.PageLoading.LevelTwoPage(RightControl.Content as UserControl);\n        };\n        DownloadBtn.PointerPressed += async (_, _) =>\n        {\n            var song = Data.UiProperty.SelectedRecordSong;\n            if (song == null) return;\n            var path = (await TopLevel.GetTopLevel(this).StorageProvider.SaveFilePickerAsync(\n                new FilePickerSaveOptions\n                {\n                    Title = MainLang.SaveAudioFile,\n                    SuggestedFileName = $\"{song.SongName}.mp3\",\n                    FileTypeChoices =\n                    [\n                        new FilePickerFileType(\"Audio File\") { Patterns = [\"*.mp3\"] }\n                    ]\n                })).Path.LocalPath;\n            if (string.IsNullOrWhiteSpace(path)) return;\n            if (song.Type == SongType.Local)\n            {\n                try\n                {\n                    Notice($\"{MainLang.BeginDownload}: {song.SongName}.mp3\");\n                    File.Copy(song.Path, path);\n                    Notice($\"{MainLang.DownloadFinish}: {song.SongName}.mp3\", NotificationType.Success);\n                }\n                catch\n                {\n                    Notice($\"{MainLang.DownloadFail}: {song.SongName}.mp3\", NotificationType.Error);\n                }\n            }\n            else\n            {\n                var task = new TaskEntry($\"{MainLang.Download} - {song.SongName}.mp3\",\n                    [new SubTask($\"{MainLang.Download} - {song.SongName}.mp3\")]);\n                Notice($\"{MainLang.BeginDownload}: {song.SongName}.mp3\");\n                try\n                {\n                    var ava = await NeteaseMusic.GetMusicAvailabilityById(song.SongId);\n                    if (!ava)\n                    {\n                        Notice(MainLang.MusicNotAvailable, NotificationType.Error);\n                        task.FinishWithError();\n                        return;\n                    }\n\n                    var url = await NeteaseMusic.GetSongUrlByIdAndLevel(song.SongId);\n                    using var client1 = new HttpClient();\n                    using var response1 =\n                        await client1.GetAsync(url.url, HttpCompletionOption.ResponseHeadersRead);\n                    response1.EnsureSuccessStatusCode();\n                    var totalBytes = response1.Content.Headers.ContentLength.GetValueOrDefault();\n                    await using Stream contentStream = await response1.Content.ReadAsStreamAsync(),\n                        fileStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None,\n                            8192, true);\n                    long totalBytesRead = 0;\n                    var buffer = new byte[8192];\n                    int bytesRead;\n                    while ((bytesRead = await contentStream.ReadAsync(buffer, 0, buffer.Length)) != 0)\n                    {\n                        await fileStream.WriteAsync(buffer, 0, bytesRead);\n                        totalBytesRead += bytesRead;\n                        var progressPercentage = (double)totalBytesRead / totalBytes * 100;\n                        task.UpdateValue(progressPercentage);\n                    }\n\n                    Notice($\"{MainLang.DownloadFinish}: {song.SongName}.mp3\", NotificationType.Success);\n                    task.AdvanceSubTask();\n                    task.FinishWithSuccess();\n                    task.Destroy();\n                }\n                catch\n                {\n                    Notice($\"{MainLang.DownloadFail}: {song.SongName}.mp3\", NotificationType.Error);\n                    task.FinishWithError();\n                }\n            }\n        };\n    }\n\n    public void PlayUi()\n    {\n        _isPlaying = true;\n        PauseIcon.IsVisible = false;\n        PlayingIcon.IsVisible = true;\n        AudioPlayer.Instance.Resume();\n    }\n\n    public void PauseUi()\n    {\n        _isPlaying = false;\n        PauseIcon.IsVisible = true;\n        PlayingIcon.IsVisible = false;\n        AudioPlayer.Instance.Pause();\n    }\n\n    public void ToggleLoadingUi(bool isLoading)\n    {\n        if (isLoading)\n        {\n            LoadingBar.IsVisible = true;\n            PlayerSlider.IsVisible = false;\n            ControlPlayerSlider.IsVisible = false;\n        }\n        else\n        {\n            LoadingBar.IsVisible = false;\n            PlayerSlider.IsVisible = true;\n            ControlPlayerSlider.IsVisible = true;\n        }\n    }\n\n    public void SearchFormCall(string query)\n    {\n        if (_isLyric)\n        {\n            LeftControl.Content = Search;\n            _isLyric = false;\n        }\n        Search.SearchBox.Text = query;\n        _ = Search.SearchAction();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MusicPages/Lyric.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.MusicPages.Lyric\"\n    x:DataType=\"musicPages:Lyric\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:musicPages=\"clr-namespace:YMCL.Views.Main.Pages.MusicPages\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Name=\"LyricRoot\"\n        Opacity=\"{DynamicResource MainOpacity}\">\n        <Border.Transitions>\n            <Transitions>\n                <DoubleTransition Duration=\"0:0:0.25\" Property=\"Opacity\" />\n            </Transitions>\n        </Border.Transitions>\n        <Grid>\n            <StackPanel\n                IsVisible=\"True\"\n                Margin=\"10,10,10,10\"\n                Spacing=\"0\"\n                VerticalAlignment=\"Top\"\n                x:Name=\"LyricBlock\">\n                <StackPanel.Transitions>\n                    <Transitions>\n                        <ThicknessTransition\n                            Duration=\"0:0:0.2\"\n                            Easing=\"BounceEaseIn\"\n                            Property=\"Margin\" />\n                    </Transitions>\n                </StackPanel.Transitions>\n            </StackPanel>\n        </Grid>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MusicPages/Lyric.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing Avalonia;\nusing Avalonia.Animation;\nusing Avalonia.Animation.Easings;\nusing Avalonia.Controls;\nusing Avalonia.Input;\nusing Avalonia.Layout;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Styling;\nusing Avalonia.Threading;\nusing ReactiveUI;\nusing YMCL.Public.Classes.Netease;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.IO.Network;\n\nnamespace YMCL.Views.Main.Pages.MusicPages;\n\npublic partial class Lyric : UserControl\n{\n    public class Lyrics\n    {\n        public TimeSpan Time { get; set; }\n        public string Text { get; set; }\n        public double Index { get; set; }\n    }\n\n    public ObservableCollection<TextBlock> LyricRuns { get; set; } = [];\n    private List<Lyrics> _lyrics = [];\n    private DispatcherTimer _timerForLyric = new();\n    private SolidColorBrush _solidColorBrush;\n\n    public Lyric()\n    {\n        InitializeComponent();\n        Application.Current.ActualThemeVariantChanged += (_, _) => { SetColor(); };\n        SetColor();\n        _lyrics.Clear();\n        LyricRuns.Clear();\n        LyricBlock.Children.Clear();\n        Init();\n        DataContext = this;\n    }\n\n    public void Init()\n    {\n        LyricBlock.Children.Add(new TextBlock\n        {\n            Text = MainLang.LyricTip + \"\\n\",\n            Height = 22,\n            HorizontalAlignment = HorizontalAlignment.Center,\n            VerticalAlignment = VerticalAlignment.Center,\n            TextAlignment = TextAlignment.Center,\n            Foreground = _solidColorBrush\n        });\n    }\n\n    public async System.Threading.Tasks.Task LoadLyric(RecordSongEntry song)\n    {\n        _lyrics.Clear();\n        LyricRuns.Clear();\n        LyricBlock.Children.Clear();\n        Init();\n        if (song.Type != SongType.Netease) return;\n        var response = await NeteaseMusic.GetSongLyricById(song.SongId);\n        if (response == null) return;\n        _lyrics = ParseLyrics(response.lrc.lyric);\n        LyricBlock.Height = LyricRuns.Count * 22 + 30;\n        if(_lyrics.Count == 0) return;\n        LyricBlock.Children.Clear();\n        foreach (var lyric in _lyrics)\n        {\n            var tra = new Transitions();\n            var run = new TextBlock { Text = lyric.Text + \"\\n\", Height = 22 };\n            var milliseconds = (long)lyric.Time.TotalMilliseconds;\n            run.Tag = milliseconds.ToString();\n            run.HorizontalAlignment = HorizontalAlignment.Center;\n            run.Transitions = tra;\n            run.Transitions.Add(new DoubleTransition\n            {\n                Duration = TimeSpan.FromMilliseconds(200),\n                Easing = new SineEaseInOut(),\n                Property = FontSizeProperty\n            });\n            run.Transitions.Add(new DoubleTransition\n            {\n                Duration = TimeSpan.FromMilliseconds(200),\n                Easing = new SineEaseInOut(),\n                Property = OpacityProperty\n            });\n\n            run.VerticalAlignment = VerticalAlignment.Center;\n            run.TextAlignment = TextAlignment.Center;\n            run.Foreground = _solidColorBrush;\n            run.PointerPressed += RunOnPointerPressed;\n            LyricRuns.Add(run);\n            LyricBlock.Children.Add(run);\n        }\n\n        if (_timerForLyric != null) _timerForLyric.Stop();\n\n        _timerForLyric = new DispatcherTimer();\n        _timerForLyric.Interval = TimeSpan.FromSeconds(0.01);\n        _timerForLyric.Tick += TimerForLyric_Tick;\n        _timerForLyric.Start();\n    }\n\n    private async void TimerForLyric_Tick(object? sender, EventArgs e)\n    {\n        void DefaultUi(TextBlock x)\n        {\n            x.FontSize = 14;\n            x.Height = 22;\n            x.Foreground = _solidColorBrush;\n        }\n\n        void AccentUi(TextBlock x)\n        {\n            x.Foreground = new SolidColorBrush((Color)Application.Current.Resources[\"SystemAccentColor\"]!);\n            x.FontSize = 18;\n            x.Height = 30;\n        }\n\n        try\n        {\n            if (Data.UiProperty.SelectedRecordSong == null) return;\n            if (LyricBlock.Children.Count == 0) return;\n            TimeSpan currentTime;\n            try\n            {\n                currentTime = TimeSpan.FromMilliseconds(Data.UiProperty.MusicCurrentTime);\n            }\n            catch\n            {\n                return;\n            }\n\n            for (var i = 1; i < _lyrics.Count; i++)\n                if (_lyrics[i].Time > currentTime)\n                {\n                    if (i + 1 > LyricRuns.Count) return;\n                    foreach (var x in LyricRuns)\n                    {\n                        if (x == LyricRuns[i - 1]) continue;\n\n                        DefaultUi(x);\n                    }\n\n                    AccentUi(LyricRuns[i - 1]);\n                    await System.Threading.Tasks.Task.Delay(210);\n                    // var offset = LyricRoot.Bounds.Height / 2 - 22*i - 1;\n                    // Console.WriteLine($\"------\\n{i - 1}\\n{offset}\\n\");\n                    // var offset = _lyricRuns[i - 1].Bounds.Top * -1;\n                    var offset = LyricRoot.Bounds.Height / 2 - LyricRuns[i - 1].Bounds.Top;\n                    LyricBlock.Margin = new Thickness(0, offset, 0, 0);\n\n                    // if (last != i)\n                    // {\n                    //     last = i;\n                    //     lyricsViewer.Progress = TimeSpan.FromMilliseconds(PlayerSlider.Value).TotalSeconds;\n                    // }\n\n                    break;\n                }\n        }\n        catch\n        {\n        }\n    }\n\n    private void RunOnPointerPressed(object? sender, PointerPressedEventArgs e)\n    {\n        AudioPlayer.Instance.UpdateProgress(Convert.ToInt64(((TextBlock)sender).Tag));\n    }\n\n    public List<Lyrics> ParseLyrics(string lyricsText)\n    {\n        var lines = lyricsText.Split('\\n');\n        var lyrics = new List<Lyrics>();\n        for (var i = 0; i < lines.Length; i++)\n        {\n            var line = lines[i];\n            var parts = line.Split(']');\n            if (parts.Length < 2) continue;\n            var timeText = parts[0].TrimStart('[');\n            var time = ParseTime(timeText);\n            var text = parts[1];\n            if (!string.IsNullOrWhiteSpace(text))\n            {\n                lyrics.Add(new Lyrics { Time = time, Text = text, Index = i });\n            }\n        }\n\n        // lyricsViewer.Lyrics = lyrics1;\n        return lyrics;\n    }\n    \n    private TimeSpan ParseTime(string timeText)\n    {\n        var parts = timeText.Split(':');\n        var minutes = int.Parse(parts[0]);\n        var secondsAndMilliseconds = parts[1].Split('.');\n        var seconds = int.Parse(secondsAndMilliseconds[0]);\n        var milliseconds = int.Parse(secondsAndMilliseconds[1]);\n        return new TimeSpan(0, 0, minutes, seconds, milliseconds);\n    }\n\n    private void SetColor()\n    {\n        _solidColorBrush = Application.Current.ActualThemeVariant == ThemeVariant.Light\n            ? new SolidColorBrush(Color.FromArgb((byte)(255 * 0.3), 0x33, 0x33, 0x33))\n            : new SolidColorBrush(Color.FromArgb((byte)(255 * 0.3), 255, 255, 255));\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MusicPages/PlayList.axaml",
    "content": "<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.MusicPages.PlayList\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:cl=\"clr-namespace:YMCL.Public.Classes.Netease\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        DockPanel.Dock=\"Right\"\n        Opacity=\"{DynamicResource MainOpacity}\">\n        <DockPanel Margin=\"10\">\n            <DockPanel DockPanel.Dock=\"Top\">\n                <TextBlock\n                    FontSize=\"15\"\n                    Margin=\"10,5,0,0\"\n                    Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.PlayList}\" />\n                <StackPanel\n                    DockPanel.Dock=\"Right\"\n                    HorizontalAlignment=\"Right\"\n                    Margin=\"0,0,-5,0\"\n                    Orientation=\"Horizontal\"\n                    Spacing=\"5\">\n                    <Button\n                        DockPanel.Dock=\"Right\"\n                        Height=\"30\"\n                        Name=\"UpSong\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <PathIcon Data=\"F1 M 18.75 9.375 C 18.75 9.544271 18.68815 9.690756 18.564453 9.814453 C 18.440754 9.938151 18.29427 10 18.125 10 C 17.955729 10 17.809244 9.938151 17.685547 9.814453 L 10 2.138672 L 10 19.375 C 10 19.544271 9.93815 19.690756 9.814453 19.814453 C 9.690755 19.93815 9.544271 20 9.375 20 C 9.205729 20 9.059244 19.93815 8.935547 19.814453 C 8.811849 19.690756 8.75 19.544271 8.75 19.375 L 8.75 2.138672 L 1.064453 9.814453 C 0.940755 9.938151 0.794271 10 0.625 10 C 0.455729 10 0.309245 9.938151 0.185547 9.814453 C 0.061849 9.690756 0 9.544271 0 9.375 C 0 9.205729 0.061849 9.059245 0.185547 8.935547 L 8.90625 0.214844 C 8.977864 0.14323 9.047852 0.08952 9.116211 0.053711 C 9.18457 0.017904 9.270833 0 9.375 0 C 9.479166 0 9.56543 0.017904 9.633789 0.053711 C 9.702148 0.08952 9.772135 0.14323 9.84375 0.214844 L 18.564453 8.935547 C 18.68815 9.059245 18.75 9.205729 18.75 9.375 Z \" Width=\"15\" />\n                        </DockPanel>\n                    </Button>\n                    <Button\n                        DockPanel.Dock=\"Right\"\n                        Height=\"30\"\n                        Name=\"DownSong\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <PathIcon Data=\"F1 M 18.75 10.625 C 18.75 10.794271 18.68815 10.940756 18.564453 11.064453 L 9.84375 19.785156 C 9.772135 19.856771 9.702148 19.910482 9.633789 19.946289 C 9.56543 19.982096 9.479166 20 9.375 20 C 9.270833 20 9.18457 19.982096 9.116211 19.946289 C 9.047852 19.910482 8.977864 19.856771 8.90625 19.785156 L 0.185547 11.064453 C 0.061849 10.940756 0 10.794271 0 10.625 C 0 10.455729 0.061849 10.309245 0.185547 10.185547 C 0.309245 10.06185 0.455729 10 0.625 10 C 0.794271 10 0.940755 10.06185 1.064453 10.185547 L 8.75 17.861328 L 8.75 0.625 C 8.75 0.45573 8.811849 0.309246 8.935547 0.185547 C 9.059244 0.06185 9.205729 0 9.375 0 C 9.544271 0 9.690755 0.06185 9.814453 0.185547 C 9.93815 0.309246 10 0.45573 10 0.625 L 10 17.861328 L 17.685547 10.185547 C 17.809244 10.06185 17.955729 10 18.125 10 C 18.29427 10 18.440754 10.06185 18.564453 10.185547 C 18.68815 10.309245 18.75 10.455729 18.75 10.625 Z \" Width=\"15\" />\n                        </DockPanel>\n                    </Button>\n                    <Button\n                        DockPanel.Dock=\"Right\"\n                        Height=\"30\"\n                        Name=\"DelSelectedSong\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <PathIcon Data=\"F1 M 19.375 3.125 C 19.375 3.26823 19.34733 3.382162 19.291992 3.466797 C 19.236652 3.551434 19.16341 3.61491 19.072266 3.657227 C 18.981119 3.699545 18.880207 3.727215 18.769531 3.740234 C 18.658854 3.753256 18.544922 3.759766 18.427734 3.759766 C 18.362629 3.759766 18.297525 3.758139 18.232422 3.754883 C 18.167316 3.751629 18.108723 3.75 18.056641 3.75 L 16.435547 17.783203 C 16.396484 18.095703 16.305338 18.387045 16.162109 18.657227 C 16.018879 18.927408 15.836588 19.161783 15.615234 19.360352 C 15.39388 19.55892 15.139974 19.71517 14.853516 19.829102 C 14.567057 19.943033 14.267578 20 13.955078 20 L 6.044922 20 C 5.732422 20 5.432942 19.943033 5.146484 19.829102 C 4.860026 19.71517 4.60612 19.55892 4.384766 19.360352 C 4.163411 19.161783 3.98112 18.927408 3.837891 18.657227 C 3.694661 18.387045 3.603516 18.095703 3.564453 17.783203 L 1.943359 3.75 C 1.878255 3.75 1.813151 3.751629 1.748047 3.754883 C 1.682943 3.758139 1.617839 3.759766 1.552734 3.759766 C 1.442057 3.759766 1.33138 3.753256 1.220703 3.740234 C 1.110026 3.727215 1.010742 3.697918 0.922852 3.652344 C 0.834961 3.606771 0.763346 3.541668 0.708008 3.457031 C 0.652669 3.372396 0.625 3.261719 0.625 3.125 C 0.625 2.95573 0.686849 2.809246 0.810547 2.685547 C 0.934245 2.56185 1.080729 2.5 1.25 2.5 L 6.933594 2.5 C 6.998697 2.141928 7.127278 1.809896 7.319336 1.503906 C 7.511393 1.197918 7.745768 0.932617 8.022461 0.708008 C 8.299153 0.483398 8.606771 0.309246 8.945312 0.185547 C 9.283854 0.06185 9.635416 0 10 0 C 10.364583 0 10.716146 0.06185 11.054688 0.185547 C 11.393229 0.309246 11.700846 0.483398 11.977539 0.708008 C 12.25423 0.932617 12.488605 1.197918 12.680664 1.503906 C 12.872721 1.809896 13.001302 2.141928 13.066406 2.5 L 18.75 2.5 C 18.91927 2.5 19.065754 2.56185 19.189453 2.685547 C 19.31315 2.809246 19.375 2.95573 19.375 3.125 Z M 8.232422 2.5 L 11.767578 2.5 C 11.702474 2.311199 11.611328 2.140301 11.494141 1.987305 C 11.376953 1.834311 11.240234 1.702475 11.083984 1.591797 C 10.927734 1.481121 10.758463 1.396484 10.576172 1.337891 C 10.39388 1.279297 10.201822 1.25 10 1.25 C 9.798177 1.25 9.606119 1.279297 9.423828 1.337891 C 9.241536 1.396484 9.072266 1.481121 8.916016 1.591797 C 8.759766 1.702475 8.623047 1.834311 8.505859 1.987305 C 8.388672 2.140301 8.297525 2.311199 8.232422 2.5 Z M 16.796875 3.75 L 3.203125 3.75 L 4.804688 17.646484 C 4.84375 17.972006 4.978841 18.237305 5.209961 18.442383 C 5.441081 18.647461 5.719401 18.75 6.044922 18.75 L 13.955078 18.75 C 14.111328 18.75 14.261067 18.72233 14.404297 18.666992 C 14.547525 18.611654 14.674479 18.535156 14.785156 18.4375 C 14.895833 18.339844 14.986979 18.222656 15.058594 18.085938 C 15.130208 17.949219 15.175781 17.802734 15.195312 17.646484 Z M 7.5 14.375 L 7.5 8.125 C 7.5 7.95573 7.561849 7.809246 7.685547 7.685547 C 7.809245 7.56185 7.955729 7.5 8.125 7.5 C 8.294271 7.5 8.440755 7.56185 8.564453 7.685547 C 8.68815 7.809246 8.75 7.95573 8.75 8.125 L 8.75 14.375 C 8.75 14.544271 8.68815 14.690756 8.564453 14.814453 C 8.440755 14.938151 8.294271 15 8.125 15 C 7.955729 15 7.809245 14.938151 7.685547 14.814453 C 7.561849 14.690756 7.5 14.544271 7.5 14.375 Z M 11.25 14.375 L 11.25 8.125 C 11.25 7.95573 11.311849 7.809246 11.435547 7.685547 C 11.559244 7.56185 11.705729 7.5 11.875 7.5 C 12.04427 7.5 12.190754 7.56185 12.314453 7.685547 C 12.43815 7.809246 12.5 7.95573 12.5 8.125 L 12.5 14.375 C 12.5 14.544271 12.43815 14.690756 12.314453 14.814453 C 12.190754 14.938151 12.04427 15 11.875 15 C 11.705729 15 11.559244 14.938151 11.435547 14.814453 C 11.311849 14.690756 11.25 14.544271 11.25 14.375 Z \" />\n                        </DockPanel>\n                    </Button>\n                    <Button\n                        DockPanel.Dock=\"Right\"\n                        Height=\"30\"\n                        Margin=\"0,0,5,0\"\n                        Name=\"AddLocalSong\"\n                        VerticalAlignment=\"Top\">\n                        <DockPanel>\n                            <PathIcon Data=\"F1 M 17.5 7.65625 L 17.5 17.548828 C 17.5 17.87435 17.433268 18.185221 17.299805 18.481445 C 17.16634 18.77767 16.987305 19.038086 16.762695 19.262695 C 16.538086 19.487305 16.277668 19.666342 15.981445 19.799805 C 15.685221 19.933268 15.374349 20 15.048828 20 L 10.097656 20 C 10.325521 19.817709 10.543619 19.622396 10.751953 19.414062 C 10.960286 19.205729 11.152344 18.984375 11.328125 18.75 L 15 18.75 C 15.17578 18.75 15.338541 18.717447 15.488281 18.652344 C 15.638021 18.58724 15.769856 18.497721 15.883789 18.383789 C 15.997721 18.269857 16.087238 18.138021 16.152344 17.988281 C 16.217447 17.838541 16.25 17.675781 16.25 17.5 L 16.25 7.65625 C 16.25 7.630209 16.25 7.604167 16.25 7.578125 C 16.25 7.552084 16.246744 7.526042 16.240234 7.5 L 12.451172 7.5 C 12.11263 7.5 11.795247 7.431641 11.499023 7.294922 C 11.202799 7.158203 10.94401 6.975912 10.722656 6.748047 C 10.501302 6.520184 10.325521 6.254884 10.195312 5.952148 C 10.065104 5.649415 10 5.332032 10 5 L 10 1.259766 C 9.973958 1.253256 9.947916 1.25 9.921875 1.25 C 9.895833 1.25 9.869791 1.25 9.84375 1.25 L 5 1.25 C 4.824219 1.25 4.661458 1.282553 4.511719 1.347656 C 4.361979 1.412762 4.230143 1.502279 4.116211 1.616211 C 4.002278 1.730145 3.91276 1.86198 3.847656 2.011719 C 3.782552 2.161459 3.75 2.324219 3.75 2.5 L 3.75 7.431641 C 3.313802 7.548829 2.897135 7.705079 2.5 7.900391 L 2.5 2.451172 C 2.5 2.125652 2.566732 1.814779 2.700195 1.518555 C 2.833659 1.222332 3.012695 0.961914 3.237305 0.737305 C 3.461914 0.512695 3.722331 0.33366 4.018555 0.200195 C 4.314778 0.066732 4.625651 0 4.951172 0 L 9.84375 0 C 10.175781 0 10.494791 0.063477 10.800781 0.19043 C 11.106771 0.317383 11.376953 0.498047 11.611328 0.732422 L 16.767578 5.888672 C 17.001953 6.123047 17.182617 6.393229 17.30957 6.699219 C 17.436523 7.005209 17.5 7.324219 17.5 7.65625 Z M 11.25 5 C 11.25 5.175782 11.282552 5.34017 11.347656 5.493164 C 11.41276 5.646159 11.50065 5.777995 11.611328 5.888672 C 11.722005 5.99935 11.853841 6.08724 12.006836 6.152344 C 12.15983 6.217448 12.324219 6.25 12.5 6.25 L 15.371094 6.25 L 11.25 2.128906 Z M 11.25 14.375 C 11.25 15.14974 11.101888 15.878906 10.805664 16.5625 C 10.509439 17.246094 10.107422 17.841797 9.599609 18.349609 C 9.091797 18.857422 8.496094 19.259439 7.8125 19.555664 C 7.128906 19.851889 6.399739 20 5.625 20 C 4.84375 20 4.111328 19.853516 3.427734 19.560547 C 2.744141 19.267578 2.148438 18.867188 1.640625 18.359375 C 1.132812 17.851562 0.732422 17.255859 0.439453 16.572266 C 0.146484 15.888672 0 15.15625 0 14.375 C 0 13.600261 0.148112 12.871094 0.444336 12.1875 C 0.74056 11.503906 1.142578 10.908203 1.650391 10.400391 C 2.158203 9.892578 2.753906 9.490561 3.4375 9.194336 C 4.121094 8.898112 4.85026 8.75 5.625 8.75 C 6.139323 8.75 6.635742 8.816732 7.114258 8.950195 C 7.592773 9.083659 8.040364 9.272461 8.457031 9.516602 C 8.873697 9.760742 9.254557 10.055339 9.599609 10.400391 C 9.944661 10.745443 10.239258 11.126303 10.483398 11.542969 C 10.727539 11.959636 10.916341 12.407227 11.049805 12.885742 C 11.183268 13.364258 11.25 13.860678 11.25 14.375 Z M 8.75 11.875 C 8.75 11.705729 8.68815 11.559245 8.564453 11.435547 C 8.440755 11.31185 8.294271 11.25 8.125 11.25 L 4.375 11.25 C 4.205729 11.25 4.059245 11.31185 3.935547 11.435547 C 3.811849 11.559245 3.75 11.705729 3.75 11.875 C 3.75 12.044271 3.811849 12.190756 3.935547 12.314453 C 4.059245 12.438151 4.205729 12.5 4.375 12.5 L 6.542969 12.5 L 3.271484 15.771484 C 3.141276 15.901693 3.076172 16.061197 3.076172 16.25 C 3.076172 16.438803 3.141276 16.598307 3.271484 16.728516 C 3.401693 16.858725 3.561198 16.923828 3.75 16.923828 C 3.938802 16.923828 4.098307 16.858725 4.228516 16.728516 L 7.5 13.457031 L 7.5 15.625 C 7.5 15.794271 7.561849 15.940756 7.685547 16.064453 C 7.809245 16.188152 7.955729 16.25 8.125 16.25 C 8.294271 16.25 8.440755 16.188152 8.564453 16.064453 C 8.68815 15.940756 8.75 15.794271 8.75 15.625 Z \" />\n                        </DockPanel>\n                    </Button>\n                </StackPanel>\n            </DockPanel>\n            <ListBox\n                DockPanel.Dock=\"Bottom\"\n                ItemsSource=\"{Binding RecordSongEntries}\"\n                Margin=\"0,5,0,0\"\n                Name=\"PlayListView\"\n                SelectedItem=\"{Binding UiProperty.SelectedRecordSong}\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate DataType=\"cl:RecordSongEntry\">\n                        <StackPanel Margin=\"0,3\">\n                            <TextBlock TextWrapping=\"Wrap\">\n                                <Run FontFamily=\"{DynamicResource Font}\" Text=\"{Binding SongName}\" />\n                                <Run\n                                    FontFamily=\"{DynamicResource Font}\"\n                                    FontSize=\"12\"\n                                    Foreground=\"{DynamicResource GrayColor}\"\n                                    Text=\"{Binding DisplayDuration}\" />\n                            </TextBlock>\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"12\"\n                                Foreground=\"{DynamicResource GrayColor}\"\n                                TextWrapping=\"Wrap\">\n                                <Run Text=\"{Binding Type}\" />\n                                <Run Text=\"-\" />\n                                <Run Text=\"{Binding SongAuthors}\" />\n                            </TextBlock>\n                        </StackPanel>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </DockPanel>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MusicPages/PlayList.axaml.cs",
    "content": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing Avalonia.Platform.Storage;\nusing NAudio.Wave;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Netease;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.Value;\n\nnamespace YMCL.Views.Main.Pages.MusicPages;\n\npublic partial class PlayList : UserControl\n{\n    public PlayList()\n    {\n        InitializeComponent();\n        BindingEvent();\n        LoadPlayList();\n    }\n\n    private static void LoadPlayList()\n    {\n        var songs = JsonConvert.DeserializeObject<List<RecordSongEntry>>(File.ReadAllText(ConfigPath.PlayerDataPath));\n        songs.ForEach(song => Data.RecordSongEntries.Add(song));\n    }\n\n    private void BindingEvent()\n    {\n        UpSong.Click += (_, _) =>\n        {\n            var index = PlayListView.SelectedIndex;\n            if (index == 0) return;\n            var item = Data.UiProperty.SelectedRecordSong;\n            if (item == null) return;\n            Data.RecordSongEntries.Remove(item);\n            Data.RecordSongEntries.Insert(index - 1, item);\n            Data.UiProperty.SelectedRecordSong = item;\n            File.WriteAllText(ConfigPath.PlayerDataPath,\n                JsonConvert.SerializeObject(Data.RecordSongEntries, Formatting.Indented));\n        };\n        DownSong.Click += (_, _) =>\n        {\n            var index = PlayListView.SelectedIndex;\n            var count = Data.RecordSongEntries.Count;\n            if (index == count - 1) return;\n            var item = Data.UiProperty.SelectedRecordSong;\n            if (item == null) return;\n            Data.RecordSongEntries.Remove(item);\n            Data.RecordSongEntries.Insert(index + 1, item);\n            Data.UiProperty.SelectedRecordSong = item;\n            File.WriteAllText(ConfigPath.PlayerDataPath,\n                JsonConvert.SerializeObject(Data.RecordSongEntries, Formatting.Indented));\n        };\n        DelSelectedSong.Click += (_, _) =>\n        {\n            if (Data.RecordSongEntries.Count == 0 || Data.UiProperty.SelectedRecordSong == null) return;\n            Data.RecordSongEntries.RemoveAt(PlayListView.SelectedIndex);\n            File.WriteAllText(ConfigPath.PlayerDataPath,\n                JsonConvert.SerializeObject(Data.RecordSongEntries, Formatting.Indented));\n            Data.UiProperty.SelectedRecordSong = Data.RecordSongEntries.LastOrDefault();\n        };\n        AddLocalSong.Click += async (_, _) =>\n        {\n            var files = await TopLevel.GetTopLevel(this).StorageProvider.OpenFilePickerAsync(\n                new FilePickerOpenOptions\n                {\n                    AllowMultiple = true, Title = MainLang.SelectMusicFile, FileTypeFilter =\n                    [\n                        new FilePickerFileType(\"All Audio Files\")\n                        {\n                            Patterns =\n                            [\n                                \"*.mp3\",\n                                \"*.wav\",\n                                \"*.aac\",\n                                \"*.flac\",\n                                \"*.ogg\",\n                                \"*.alac\",\n                                \"*.m4a\",\n                                \"*.wma\",\n                                \"*.aiff\",\n                                \"*.mid\"\n                            ]\n                        }\n                    ]\n                });\n            if (files.Count == 0) return;\n            foreach (var file in files)\n            {\n                await using var reader = new MediaFoundationReader(file.Path.LocalPath);\n                var time = Converter.MsToTime(reader.TotalTime.TotalMilliseconds);\n                var song = new RecordSongEntry()\n                {\n                    DisplayDuration = time,\n                    Duration = reader.TotalTime,\n                    SongPicUri = null,\n                    SongName = file.Name,\n                    SongAuthors = Path.GetExtension(file.Path.LocalPath).TrimStart('.'),\n                    Path = file.Path.LocalPath,\n                    Type = SongType.Local\n                };\n                Data.RecordSongEntries.Add(song);\n            }\n\n            await File.WriteAllTextAsync(ConfigPath.PlayerDataPath,\n                JsonConvert.SerializeObject(Data.RecordSongEntries, Formatting.Indented));\n            Data.UiProperty.SelectedRecordSong = Data.RecordSongEntries.LastOrDefault();\n        };\n    }\n\n    public void NextSong()\n    {\n        if (Data.RecordSongEntries.Count <= 1) return;\n        Data.UiProperty.SelectedRecordSong = PlayListView.SelectedIndex == Data.RecordSongEntries.Count - 1\n            ? Data.RecordSongEntries.First()\n            : Data.RecordSongEntries[PlayListView.SelectedIndex + 1];\n    }\n\n    public void PreviousSong()\n    {\n        if (Data.RecordSongEntries.Count <= 1) return;\n        Data.UiProperty.SelectedRecordSong = PlayListView.SelectedIndex == 0\n            ? Data.RecordSongEntries.LastOrDefault()\n            : Data.RecordSongEntries[PlayListView.SelectedIndex - 1];\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MusicPages/Search.axaml",
    "content": "<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.MusicPages.Search\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:netease=\"clr-namespace:YMCL.Public.Classes.Netease\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Name=\"SearchRoot\"\n        Opacity=\"{DynamicResource MainOpacity}\">\n        <Border.Transitions>\n            <Transitions>\n                <DoubleTransition Duration=\"0:0:0.25\" Property=\"Opacity\" />\n            </Transitions>\n        </Border.Transitions>\n        <DockPanel>\n            <DockPanel DockPanel.Dock=\"Top\" Margin=\"10\">\n                <Button\n                    DockPanel.Dock=\"Right\"\n                    Height=\"32\"\n                    Name=\"SearchBtn\"\n                    VerticalAlignment=\"Top\">\n                    <DockPanel>\n                        <PathIcon\n                            Data=\"F1 M 15.966797 7.802734 C 16.533203 7.802734 17.062174 7.918295 17.553711 8.149414 C 18.045246 8.380534 18.47168 8.691406 18.833008 9.082031 C 19.194336 9.472656 19.479166 9.923503 19.6875 10.43457 C 19.895832 10.945639 20 11.477865 20 12.03125 C 20 12.584636 19.895832 13.115234 19.6875 13.623047 C 19.479166 14.130859 19.194336 14.580078 18.833008 14.970703 C 18.47168 15.361328 18.046875 15.672201 17.558594 15.90332 C 17.070312 16.134441 16.542969 16.25 15.976562 16.25 L 10.585938 16.25 L 9.824219 15.478516 L 10.009766 15 L 15.957031 15 C 16.354166 15 16.723633 14.916992 17.06543 14.750977 C 17.407227 14.584961 17.701822 14.365234 17.949219 14.091797 C 18.196613 13.818359 18.391926 13.502604 18.535156 13.144531 C 18.678385 12.786459 18.75 12.415365 18.75 12.03125 C 18.75 11.614584 18.675129 11.225586 18.525391 10.864258 C 18.37565 10.50293 18.168945 10.187175 17.905273 9.916992 C 17.641602 9.646811 17.330729 9.435222 16.972656 9.282227 C 16.614582 9.129232 16.227213 9.052734 15.810547 9.052734 C 15.472005 9.052734 15.192057 8.94694 14.970703 8.735352 C 14.749349 8.523764 14.61263 8.255209 14.560547 7.929688 C 14.527994 7.695313 14.49056 7.467449 14.448242 7.246094 C 14.405924 7.02474 14.342447 6.800131 14.257812 6.572266 C 14.088541 6.103516 13.862304 5.693359 13.579102 5.341797 C 13.295897 4.990234 12.970377 4.695639 12.602539 4.458008 C 12.2347 4.220378 11.831055 4.042969 11.391602 3.925781 C 10.952148 3.808594 10.488281 3.75 10 3.75 C 9.420572 3.75 8.885091 3.828125 8.393555 3.984375 C 7.902018 4.140625 7.464192 4.370117 7.080078 4.672852 C 6.695963 4.975586 6.37207 5.348308 6.108398 5.791016 C 5.844727 6.233725 5.651042 6.738281 5.527344 7.304688 C 5.31901 7.259115 5.110677 7.22819 4.902344 7.211914 C 4.69401 7.195639 4.485677 7.1875 4.277344 7.1875 C 4.407552 6.458334 4.641927 5.802409 4.980469 5.219727 C 5.31901 4.637045 5.737305 4.145508 6.235352 3.745117 C 6.733398 3.344727 7.301432 3.037109 7.939453 2.822266 C 8.577474 2.607422 9.264322 2.5 10 2.5 C 10.800781 2.5 11.541341 2.626953 12.22168 2.880859 C 12.902018 3.134766 13.496093 3.49284 14.003906 3.955078 C 14.511718 4.417318 14.921874 4.973959 15.234375 5.625 C 15.546874 6.276042 15.738932 7.001953 15.810547 7.802734 Z M 11.25 19.375 C 11.25 19.544271 11.18815 19.690756 11.064453 19.814453 C 10.940755 19.93815 10.794271 20 10.625 20 C 10.455729 20 10.309244 19.93815 10.185547 19.814453 L 6.992188 16.621094 C 6.595052 16.927084 6.171875 17.150064 5.722656 17.290039 C 5.273438 17.430014 4.798177 17.5 4.296875 17.5 C 3.704427 17.5 3.147786 17.381186 2.626953 17.143555 C 2.10612 16.905924 1.650391 16.586914 1.259766 16.186523 C 0.869141 15.786133 0.561523 15.320639 0.336914 14.790039 C 0.112305 14.25944 0 13.704428 0 13.125 C 0 12.526042 0.11556 11.961264 0.34668 11.430664 C 0.577799 10.900065 0.891927 10.436198 1.289062 10.039062 C 1.686198 9.641928 2.150065 9.3278 2.680664 9.09668 C 3.211263 8.865561 3.776042 8.75 4.375 8.75 C 4.954427 8.75 5.50944 8.862305 6.040039 9.086914 C 6.570638 9.311523 7.036133 9.619141 7.436523 10.009766 C 7.836914 10.400391 8.155924 10.85612 8.393555 11.376953 C 8.631185 11.897787 8.75 12.454428 8.75 13.046875 C 8.75 13.548178 8.680013 14.023438 8.540039 14.472656 C 8.400064 14.921875 8.177083 15.345053 7.871094 15.742188 L 11.064453 18.935547 C 11.18815 19.059244 11.25 19.205729 11.25 19.375 Z M 4.375 16.25 L 4.443359 16.25 C 4.866536 16.25 5.263672 16.165365 5.634766 15.996094 C 6.005859 15.826823 6.329752 15.598959 6.606445 15.3125 C 6.883138 15.026042 7.101237 14.694011 7.260742 14.316406 C 7.420247 13.938803 7.5 13.541667 7.5 13.125 C 7.5 12.688803 7.418619 12.281901 7.255859 11.904297 C 7.093099 11.526693 6.870117 11.196289 6.586914 10.913086 C 6.303711 10.629883 5.973307 10.406901 5.595703 10.244141 C 5.218099 10.081381 4.811198 10 4.375 10 C 3.938802 10 3.531901 10.081381 3.154297 10.244141 C 2.776693 10.406901 2.446289 10.629883 2.163086 10.913086 C 1.879883 11.196289 1.656901 11.526693 1.494141 11.904297 C 1.33138 12.281901 1.25 12.688803 1.25 13.125 C 1.25 13.561198 1.33138 13.9681 1.494141 14.345703 C 1.656901 14.723308 1.879883 15.053711 2.163086 15.336914 C 2.446289 15.620117 2.776693 15.8431 3.154297 16.005859 C 3.531901 16.168621 3.938802 16.25 4.375 16.25 Z \"\n                            Margin=\"0,2,5,0\"\n                            Width=\"20\" />\n                        <TextBlock\n                            Margin=\"0,1,0,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Search}\"\n                            VerticalAlignment=\"Center\" />\n                    </DockPanel>\n                </Button>\n                <TextBox\n                    DockPanel.Dock=\"Left\"\n                    Margin=\"0,0,5,0\"\n                    Name=\"SearchBox\"\n                    VerticalAlignment=\"Top\" />\n            </DockPanel>\n            <ScrollViewer DockPanel.Dock=\"Bottom\" Name=\"SongListViewScroll\">\n                <StackPanel>\n                    <ListBox\n                        ItemsSource=\"{Binding SearchSongEntries}\"\n                        Margin=\"10,0,10,0\"\n                        Name=\"SearchSongListView\"\n                        SelectedItem=\"{Binding UiProperty.SelectedSearchSong}\">\n                        <ListBox.ItemTemplate>\n                            <DataTemplate DataType=\"netease:RecordSongEntry\">\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <TextBlock\n                                        Foreground=\"{DynamicResource GrayColor}\"\n                                        Margin=\"0,0,6,0\"\n                                        Text=\"{Binding DisplayNumber}\"\n                                        VerticalAlignment=\"Center\" />\n                                    <StackPanel Margin=\"0,3\">\n                                        <TextBlock TextWrapping=\"Wrap\">\n                                            <Run FontFamily=\"{DynamicResource Font}\" Text=\"{Binding SongName}\" />\n                                            <Run\n                                                FontFamily=\"{DynamicResource Font}\"\n                                                FontSize=\"12\"\n                                                Foreground=\"{DynamicResource GrayColor}\"\n                                                Text=\"{Binding DisplayDuration}\" />\n                                        </TextBlock>\n                                        <TextBlock\n                                            FontFamily=\"{DynamicResource Font}\"\n                                            FontSize=\"12\"\n                                            Foreground=\"{DynamicResource GrayColor}\"\n                                            Text=\"{Binding SongAuthors}\"\n                                            TextWrapping=\"Wrap\" />\n                                    </StackPanel>\n                                </StackPanel>\n                            </DataTemplate>\n                        </ListBox.ItemTemplate>\n                    </ListBox>\n                    <ui:ProgressRing\n                        Height=\"48\"\n                        IsVisible=\"False\"\n                        Margin=\"0,50,0,50\"\n                        Name=\"Loading\"\n                        Width=\"48\" />\n                    <HyperlinkButton\n                        Classes=\"accent\"\n                        HorizontalAlignment=\"Center\"\n                        IsVisible=\"False\"\n                        Margin=\"0,50,0,50\"\n                        Name=\"LoadMoreBtn\">\n                        <TextBlock FontFamily=\"{DynamicResource Font}\" TextDecorations=\"{x:Null}\">\n                            <Run Text=\"→\" />\n                            <Run Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LoadMore}\" />\n                            <Run Text=\"←\" />\n                        </TextBlock>\n                    </HyperlinkButton>\n                </StackPanel>\n            </ScrollViewer>\n        </DockPanel>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/MusicPages/Search.axaml.cs",
    "content": "using System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Input;\nusing Avalonia.Markup.Xaml;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Netease;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.IO.Network;\n\nnamespace YMCL.Views.Main.Pages.MusicPages;\n\npublic partial class Search : UserControl\n{\n    private string _realDefaultKeyword = string.Empty;\n    private string _lastKeyword = string.Empty;\n    private uint _number = 1;\n    private int _page = 1;\n\n    public Search()\n    {\n        InitializeComponent();\n        BindingEvent();\n        _ = SetDefaultKeyWord();\n    }\n\n    private void BindingEvent()\n    {\n        SearchBox.KeyDown += (o, e) =>\n        {\n            if (e.Key != Key.Enter) return;\n            _ = SearchAction();\n            e.Handled = true;\n        };\n        SearchBtn.Click += (_, _) => { _ = SearchAction(); };\n        LoadMoreBtn.Click += (_, _) => { _ = LoadMore(); };\n        SearchSongListView.SelectionChanged += async (_, _) =>\n        {\n            var item = SearchSongListView.SelectedItem;\n            if (item == null) return;\n            Data.RecordSongEntries.Add((item as RecordSongEntry)!);\n            await System.Threading.Tasks.Task.Delay(200);\n            SearchSongListView.SelectedItem = null;\n            Data.UiProperty.SelectedRecordSong = Data.RecordSongEntries.LastOrDefault();\n            _ = File.WriteAllTextAsync(ConfigPath.PlayerDataPath,\n                JsonConvert.SerializeObject(Data.RecordSongEntries, Formatting.Indented));\n        };\n    }\n\n    public async System.Threading.Tasks.Task SearchAction()\n    {\n        var key = !string.IsNullOrWhiteSpace(SearchBox.Text) ? SearchBox.Text : _realDefaultKeyword;\n        if (string.IsNullOrWhiteSpace(key)) return;\n        _number = 1;\n        _page = 1;\n        _lastKeyword = key;\n        Data.SearchSongEntries.Clear();\n        Loading.IsVisible = true;\n        SearchBox.IsEnabled = false;\n        SearchBtn.IsEnabled = false;\n        LoadMoreBtn.IsVisible = false;\n        var songs = await NeteaseMusic.SearchForSingleSong(key);\n        if (songs.Count == 0)\n        {\n            Notice(MainLang.SearchNoResult, NotificationType.Warning);\n        }\n\n        songs.ForEach(song =>\n        {\n            Data.SearchSongEntries.Add(new RecordSongEntry()\n            {\n                Duration = TimeSpan.FromMilliseconds(song.dt),\n                Number = _number,\n                DisplayNumber = _number < 10 ? $\"0{_number}\" : _number.ToString(),\n                DisplayDuration = Public.Module.Value.Converter.MsToTime(song.dt),\n                SongName = song.name,\n                SongId = song.id,\n                AlbumId = song.al.id,\n                AlbumName = song.al.name,\n                Type = SongType.Netease,\n                SongPicUri = song.al.picUrl,\n                SongAuthors = string.Join(\"/\", song.ar.Select(a => a.name))\n            });\n            _number++;\n        });\n        Loading.IsVisible = false;\n        LoadMoreBtn.IsVisible = songs.Count >= 30;\n        SearchBox.IsEnabled = true;\n        SearchBtn.IsEnabled = true;\n    }\n\n    private async System.Threading.Tasks.Task SetDefaultKeyWord()\n    {\n        var key = await NeteaseMusic.GetDefaultKeyword();\n        if (string.IsNullOrWhiteSpace(key.real) || string.IsNullOrWhiteSpace(key.show)) return;\n        _realDefaultKeyword = key.real;\n        SearchBox.Watermark = key.show;\n    }\n\n    private async System.Threading.Tasks.Task LoadMore()\n    {\n        _page++;\n        Loading.IsVisible = true;\n        LoadMoreBtn.IsVisible = false;\n        SearchBox.IsEnabled = false;\n        SearchBtn.IsEnabled = false;\n        var songs = await NeteaseMusic.SearchForSingleSong(_lastKeyword, _page);\n        if (songs.Count == 0)\n        {\n            Notice(MainLang.SearchNoResult, NotificationType.Warning);\n        }\n\n        songs.ForEach(song =>\n        {\n            Data.SearchSongEntries.Add(new RecordSongEntry()\n            {\n                Duration = TimeSpan.FromMilliseconds(song.dt),\n                Number = _number,\n                DisplayNumber = _number < 10 ? $\"0{_number}\" : _number.ToString(),\n                DisplayDuration = Public.Module.Value.Converter.MsToTime(song.dt),\n                SongName = song.name,\n                SongId = song.id,\n                AlbumId = song.al.id,\n                AlbumName = song.al.name,\n                Type = SongType.Netease,\n                SongPicUri = song.al.picUrl,\n                SongAuthors = string.Join(\"/\", song.ar.Select(a => a.name))\n            });\n            _number++;\n        });\n        Loading.IsVisible = false;\n        LoadMoreBtn.IsVisible = songs.Count >= 30;\n        SearchBox.IsEnabled = true;\n        SearchBtn.IsEnabled = true;\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Search.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.Search\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Margin=\"10\"\n        Opacity=\"{DynamicResource MainOpacity}\">\n        <DockPanel>\n            <TextBox\n                DockPanel.Dock=\"Top\"\n                FontFamily=\"{DynamicResource Font}\"\n                Margin=\"10\"\n                Name=\"AggregateSearchBox\"\n                Text=\"{Binding UiProperty.Instance.AggregateSearchFilter}\"\n                Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AggregateSearchTip}\" />\n            <ListBox\n                FontFamily=\"{DynamicResource Font}\"\n                ItemsSource=\"{Binding UiProperty.Instance.FilteredAggregateSearchEntries}\"\n                Margin=\"10,0,10,10\"\n                Name=\"AggregateSearchListBox\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate DataType=\"data:AggregateSearchEntry\">\n                        <StackPanel Margin=\"0,5\">\n                            <TextBlock FontFamily=\"{DynamicResource Font}\" TextWrapping=\"Wrap\">\n                                <Run Text=\"[\" />\n                                <Run Text=\"{Binding Type}\" />\n                                <Run Text=\"]\" />\n                                <Run Text=\"{Binding Text}\" />\n                            </TextBlock>\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"12\"\n                                Foreground=\"{DynamicResource GrayColor}\"\n                                Text=\"{Binding Summary}\"\n                                TextWrapping=\"Wrap\" />\n                        </StackPanel>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </DockPanel>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Search.axaml.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Input;\nusing Avalonia.Markup.Xaml;\nusing Ursa.Controls;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Data;\nusing YMCL.Public.Module.Ui.Special;\n\nnamespace YMCL.Views.Main.Pages;\n\npublic partial class Search : UserControl\n{\n    public Search(bool isPage)\n    {\n        InitializeComponent();\n        AggregateSearchListBox.SelectionChanged += async (_, e) =>\n        {\n            if (e.AddedItems.Count <= 0) return;\n            if (e.AddedItems[0] is AggregateSearchEntry entry)\n                YMCL.Public.Module.Ui.Special.AggregateSearchUi.HandleSelectedEntry(entry);\n            await System.Threading.Tasks.Task.Delay(300);\n            AggregateSearchListBox.SelectedIndex = -1;\n        };\n    }\n\n    public Search()\n    {\n        InitializeComponent();\n        AggregateSearchListBox.SelectionChanged += (_, e) =>\n        {\n            if (e.AddedItems.Count <= 0) return;\n            if (e.AddedItems[0] is AggregateSearchEntry entry)\n                YMCL.Public.Module.Ui.Special.AggregateSearchUi.HandleSelectedEntry(entry);\n            AggregateSearchListBox.SelectedIndex = -1;\n            var host = TopLevel.GetTopLevel(this);\n            if (host is DialogWindow window)\n            {\n                window.Close();\n            }\n        };\n        Width = 870;\n        Height = 550;\n        PointerMoved += (_, _) =>\n        {\n            AggregateSearchBox.Focus();\n        };\n        KeyDown += (_, e) =>\n        {\n            if (e.Key is not Key.Escape) return;\n            var host = TopLevel.GetTopLevel(this);\n            if (host is DialogWindow window)\n            {\n                window.Close();\n            }\n        };\n        Loaded += (_, _) =>\n        {\n            AggregateSearchBox.Focus();\n            AggregateSearchBox.Text = \"\";\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Setting.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.Setting\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:ui=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <DockPanel>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n            DockPanel.Dock=\"Top\"\n            Height=\"40\"\n            Margin=\"10,10,10,0\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            VerticalAlignment=\"Top\">\n            <ui:NavigationView\n                AlwaysShowHeader=\"False\"\n                Background=\"{DynamicResource 1x}\"\n                IsBackButtonVisible=\"False\"\n                IsBackEnabled=\"False\"\n                IsPaneToggleButtonVisible=\"False\"\n                IsSettingsVisible=\"False\"\n                PaneDisplayMode=\"Top\"\n                SelectionFollowsFocus=\"False\"\n                x:Name=\"Nav\">\n                <ui:NavigationView.MenuItems>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavLaunch\"\n                        Tag=\"launch\">\n                        <DockPanel>\n                            <Image\n                                Height=\"14\"\n                                Margin=\"0,0,3,0\"\n                                Width=\"14\">\n                                <Image.Source>\n                                    <DrawingImage>\n                                        <DrawingImage.Drawing>\n                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                <GeometryDrawing.Geometry>\n                                                    <PathGeometry Figures=\"M304,607.9359741210938L304,687.4080200195312C208.6719970703125,694.47998046875 196.39999389648438,747.0399780273438 191.75999450683594,832 297.1520080566406,826.1920166015625 318.1759948730469,796.0800170898438 330.55999755859375,752.9119873046875 333.9519958496094,741.0880126953125 335.7919921875,720 336.447998046875,720L416.1600036621094,720C413.00799560546875,783.4559936523438 389.7439880371094,837.8880004882812 343.3919982910156,870.656005859375 269.21600341796875,923.10400390625 139.93600463867188,910.8319702148438 113.85600280761719,909.4240112304688 109.98400115966797,838.6400146484375 109.04000091552734,742.3519897460938 153.0240020751953,680.5120239257812 186.39999389648438,633.5679931640625 240.41600036621094,611.0399780273438 304,607.9359741210938z M568,416C574.906005859375,416,581.81201171875,417.78631591796875,588,421.3589782714844C600.3760375976562,428.5043029785156,608,441.7093811035156,608,456C608,478.0914001464844,590.0913696289062,496,568,496C545.9086303710938,496,528,478.0914001464844,528,456C528,441.7093811035156,535.6239624023438,428.5043029785156,548,421.3589782714844C554.18798828125,417.78631591796875,561.093994140625,416,568,416z M712,272C718.906005859375,272,725.81201171875,273.78631591796875,732,277.3589782714844C744.3760375976562,284.5043029785156,752,297.7093811035156,752,312C752,334.0914001464844,734.0913696289062,352,712,352C689.9086303710938,352,672,334.0914001464844,672,312C672,297.7093811035156,679.6239624023438,284.5043029785156,692,277.3589782714844C698.18798828125,273.78631591796875,705.093994140625,272,712,272z M720.5599975585938,96L886.4000244140625,96C909.343994140625,96,928,114.65599822998047,928,137.60000610351562L928,303.44000244140625C928.1890869140625,373.4942321777344,900.34423828125,440.7125549316406,850.6719970703125,490.11199951171875L725.760009765625,615.0079956054688 734.1119995117188,666.0159912109375C743.0126953125,719.037841796875,719.864990234375,772.3301391601562,675.0399780273438,802.0159912109375L499.4880065917969,918.27197265625 437.9200134277344,856.7039794921875 480,610.4639892578125 548.6400146484375,679.10400390625 527.8880004882812,803.6160278320312 630.89599609375,735.2960205078125C649.3660888671875,723.0823974609375,658.9049682617188,701.1323852539062,655.2319946289062,679.2960205078125L640.031982421875,587.6160278320312 794.1119995117188,433.552001953125C828.864013671875,398.79998779296875,848,352.57598876953125,848,303.44000244140625L848,176 720.5440063476562,176C671.7284545898438,175.87518310546875,624.8904418945312,195.2786865234375,590.4639892578125,229.88800048828125L436.3840026855469,383.9679870605469 344.68798828125,368.76800537109375C322.86383056640625,365.16363525390625,300.9522705078125,374.6794738769531,288.68798828125,393.0880126953125L220.38400268554688,496.11199951171875 344.8800048828125,475.3599853515625 413.5199890136719,544 167.26400756835938,586.0479736328125 105.71199798583984,524.47998046875 221.96800231933594,348.9599914550781C247.10214233398438,310.84869384765625 289.7230529785156,287.9387512207031 335.3760070800781,288 342.9454345703125,287.998779296875 350.5019836425781,288.62493896484375 357.9679870605469,289.87200927734375L408.99200439453125,298.2239990234375 533.8880004882812,173.3280029296875C583.760009765625,123.47200012207031,650.0479736328125,96,720.5599975585938,96z\" />\n                                                </GeometryDrawing.Geometry>\n                                            </GeometryDrawing>\n                                        </DrawingImage.Drawing>\n                                    </DrawingImage>\n                                </Image.Source>\n                            </Image>\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Launch}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavAccount\"\n                        Tag=\"account\">\n                        <DockPanel>\n                            <Image\n                                Height=\"18\"\n                                Margin=\"0,0,3,0\"\n                                Width=\"18\">\n                                <Image.Source>\n                                    <DrawingImage>\n                                        <DrawingImage.Drawing>\n                                            <DrawingGroup>\n                                                <DrawingGroup.Children>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"M472.6,535.2C534.3,501.1 576,435.5 576,360 576,249.5 486.5,160 376,160 265.5,160 176,249.5 176,360 176,435.5 217.7,501.1 279.4,535.2 233.09999999999997,550.2 190.79999999999998,576 155.39999999999998,611.4000000000001 96.5,670.3 64,748.6 64,831.9 64,849.6 78.4,864 96.1,864 113.8,864 128.2,849.6 128.2,831.9 128.2,765.8 154,703.5 200.79999999999998,656.8 247.59999999999997,610.0999999999999 309.79999999999995,584.3 376,584.3 442.20000000000005,584.3 504.4,610 551.2,656.8 598,703.5 623.8000000000001,765.6999999999999 623.8000000000001,831.9 623.8000000000001,849.6 638.2,864 655.9000000000001,864 673.6000000000001,864 688.0000000000001,849.6 688.0000000000001,831.9 688.0000000000001,748.6 655.5000000000001,670.3 596.6000000000001,611.4 561.2000000000002,576 518.9000000000001,550.1999999999999 472.60000000000014,535.1999999999999z M280.9,264.9C306.29999999999995,239.49999999999997 340.09999999999997,225.49999999999997 376,225.49999999999997 411.9,225.49999999999997 445.7,239.49999999999997 471.1,264.9 496.5,290.29999999999995 510.5,324.09999999999997 510.5,360 510.5,395.9 496.5,429.7 471.1,455.1 445.70000000000005,480.5 411.90000000000003,494.5 376,494.5 340.1,494.5 306.3,480.5 280.9,455.1 255.49999999999997,429.70000000000005 241.49999999999997,395.90000000000003 241.49999999999997,360 241.49999999999997,324.1 255.49999999999997,290.3 280.9,264.9z M728,384L928,384C945.7,384 960,369.7 960,352 960,334.3 945.7,320 928,320L728,320C710.3,320 696,334.3 696,352 696,369.7 710.3,384 728,384z\" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                    <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                        <GeometryDrawing.Geometry>\n                                                            <PathGeometry Figures=\"M928,480L648,480C630.3,480 616,494.3 616,512 616,529.7 630.3,544 648,544L928,544C945.7,544 960,529.7 960,512 960,494.29999999999995 945.7,480 928,480z M928,640L760,640C742.3,640 728,654.3 728,672 728,689.7 742.3,704 760,704L928,704C945.7,704 960,689.7 960,672 960,654.3 945.7,640 928,640z\" />\n                                                        </GeometryDrawing.Geometry>\n                                                    </GeometryDrawing>\n                                                </DrawingGroup.Children>\n                                                <DrawingGroup.ClipGeometry>\n                                                    <RectangleGeometry Rect=\"0,0,1024,1024\" />\n                                                </DrawingGroup.ClipGeometry>\n                                            </DrawingGroup>\n                                        </DrawingImage.Drawing>\n                                    </DrawingImage>\n                                </Image.Source>\n                            </Image>\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Account}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"True\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavPersonalize\"\n                        Tag=\"personalize\">\n                        <DockPanel>\n                            <Image\n                                Height=\"14\"\n                                Margin=\"0,0,3,0\"\n                                Width=\"14\">\n                                <Image.Source>\n                                    <DrawingImage>\n                                        <DrawingImage.Drawing>\n                                            <GeometryDrawing Brush=\"{DynamicResource TextColor}\">\n                                                <GeometryDrawing.Geometry>\n                                                    <PathGeometry Figures=\"M290.5,704C276.5,704 262.0830078125,706.6669921875 247.25,712 232.41700744628906,717.3330078125 220,724.8330078125 210,734.5 199,745.1669921875 192,756.75 189,769.25 186,781.75 184,795.1669921875 183,809.5 182.33299255371094,820.1669921875 180.66700744628906,831.1669921875 178,842.5 175.33299255371094,853.8330078125 172.16700744628906,864.5 168.5,874.5 164.83299255371094,883.8330078125 160.91700744628906,892.1669921875 156.75,899.5 152.58299255371094,906.8330078125 147.83299255371094,913.5830078125 142.5,919.75 137.16700744628906,925.9169921875 131.33299255371094,931.9169921875 125,937.75 118.66699981689453,943.5830078125 111.83300018310547,949.5 104.5,955.5 113.5,956.8330078125 122.58300018310547,957.9169921875 131.75,958.75 140.91700744628906,959.5830078125 150.16700744628906,960 159.5,960 173.5,960 188.75,958.9169921875 205.25,956.75 221.75,954.5830078125 238.33299255371094,951.1669921875 255,946.5 271.6669921875,941.8330078125 287.75,935.9169921875 303.25,928.75 318.75,921.5830078125 332.5,912.75 344.5,902.25 356.5,891.75 366.0830078125,879.6669921875 373.25,866 380.4169921875,852.3330078125 384,836.8330078125 384,819.5 384,808.8330078125 382.9169921875,798.0830078125 380.75,787.25 378.5830078125,776.4169921875 375.1669921875,766.25 370.5,756.75 365.8330078125,747.25 359.75,738.6669921875 352.25,731 344.75,723.3330078125 335.5,717.3330078125 324.5,713 320.1669921875,711.3330078125 314.5830078125,709.4169921875 307.75,707.25 300.9169921875,705.0830078125 295.1669921875,704 290.5,704z M930.5,65C924.8330078125,65 919.6669921875,66.16670227050781 915,68.5 910.3330078125,70.8333969116211 905.8330078125,73.8333969116211 901.5,77.5L803,158C714.3330078125,230.33299255371094 630.75,307.1669921875 552.25,388.5 473.75,469.8330078125 399.6669921875,555.8330078125 330,646.5 354.6669921875,653.8330078125 376,666.0830078125 394,683.25 412,700.4169921875 425.6669921875,721 435,745 516,669.6669921875 592.25,590.4169921875 663.75,507.25 735.25,424.0830078125 802.1669921875,336.6669921875 864.5,245L949,121C951.6669921875,117 954.0830078125,112.5 956.25,107.5 958.4169921875,102.5 959.5,97.5000991821289 959.5,92.5 959.5,84.8333969116211 956.5,78.3333969116211 950.5,73 944.5,67.66670227050781 937.8330078125,65 930.5,65z M930.5,1C942.8330078125,1.000059962272644 954.6669921875,3.416749954223633 966,8.25 977.3330078125,13.083399772644043 987.25,19.58340072631836 995.75,27.75 1004.25,35.91669845581055 1011,45.58340072631836 1016,56.75 1021,67.91670227050781 1023.5,79.66670227050781 1023.5,92 1023.5,103 1021.5800170898438,114.25 1017.75,125.75 1013.9199829101562,137.25 1008.8300170898438,147.5 1002.5,156.5L917,281C849,380.3330078125 776.0830078125,474.75 698.25,564.25 620.4169921875,653.75 537,739.1669921875 448,820.5 447.6669921875,844.5 443.5,866.75 435.5,887.25 427.5,907.75 414.5,926.1669921875 396.5,942.5 381.1669921875,956.5 364,968.5830078125 345,978.75 326,988.9169921875 306.1669921875,997.4169921875 285.5,1004.25 264.8330078125,1011.0800170898438 243.75,1016.0800170898438 222.25,1019.25 200.75,1022.4199829101562 179.83299255371094,1024 159.5,1024 150.83299255371094,1024 140.33299255371094,1023.5800170898438 128,1022.75 115.66699981689453,1021.9199829101562 103,1020.5800170898438 90,1018.75 77,1016.9199829101562 64.5,1014.8300170898438 52.5,1012.5 40.5,1010.1699829101562 30.5,1007.5 22.5,1004.5 15.5,1001.8300170898438 10,998 6,993 2,988 0,981.6669921875 0,974 0,964.3330078125 3.833329916000366,956.1669921875 11.5,949.5 24.5,938.8330078125 37.83330154418945,928.0830078125 51.5,917.25 65.16670227050781,906.4169921875 77.83329772949219,894.8330078125 89.5,882.5 99.83329772949219,871.8330078125 106.91699981689453,859.9169921875 110.75,846.75 114.58300018310547,833.5830078125 117.33300018310547,819.8330078125 119,805.5 119.33300018310547,802.8330078125 119.5,800.6669921875 119.5,799 119.5,797.3330078125 119.5,796.1669921875 119.5,795.5L119.5,794.5C119.16699981689453,794.5 119,794.3330078125 119,794 119,793.3330078125 119.08300018310547,792.25 119.25,790.75 119.41699981689453,789.25 119.83300018310547,786.6669921875 120.5,783 122.5,765.3330078125 127.33300018310547,748.4169921875 135,732.25 142.66700744628906,716.0830078125 152.83299255371094,701.6669921875 165.5,689 177.16700744628906,677.3330078125 190.41700744628906,667.9169921875 205.25,660.75 220.08299255371094,653.5830078125 235.5,648.1669921875 251.5,644.5 325.8330078125,544.5 405.5,450 490.5,361 575.5,272 666.1669921875,187.83299255371094 762.5,108.5L860.5,28C870.5,19.66670036315918 881.4169921875,13.083399772644043 893.25,8.25 905.0830078125,3.416749954223633 917.5,1.000059962272644 930.5,1z\" />\n                                                </GeometryDrawing.Geometry>\n                                            </GeometryDrawing>\n                                        </DrawingImage.Drawing>\n                                    </DrawingImage>\n                                </Image.Source>\n                            </Image>\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Margin=\"5,0,0,0\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Personalize}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"False\"\n                        Margin=\"0,0,0,7\"\n                        Tag=\"download\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 4.023438 13.75 C 3.476562 13.75 2.958984 13.636068 2.470703 13.408203 C 1.982422 13.180339 1.554362 12.875977 1.186523 12.495117 C 0.818685 12.114258 0.528971 11.674805 0.317383 11.176758 C 0.105794 10.678711 0 10.159506 0 9.619141 C 0 9.065756 0.094401 8.535156 0.283203 8.027344 C 0.472005 7.519531 0.737305 7.068686 1.079102 6.674805 C 1.420898 6.280926 1.829427 5.961915 2.304688 5.717773 C 2.779948 5.473634 3.304036 5.338543 3.876953 5.3125 L 4.189453 5.302734 C 4.261067 4.501953 4.453125 3.776043 4.765625 3.125 C 5.078125 2.473959 5.488281 1.915691 5.996094 1.450195 C 6.503906 0.984701 7.097981 0.626629 7.77832 0.375977 C 8.458658 0.125326 9.199219 0 10 0 C 10.800781 0 11.541341 0.126953 12.22168 0.380859 C 12.902018 0.634766 13.496093 0.99284 14.003906 1.455078 C 14.511718 1.917318 14.921874 2.473959 15.234375 3.125 C 15.546874 3.776043 15.738932 4.501953 15.810547 5.302734 L 15.966797 5.302734 C 16.513672 5.302734 17.032877 5.416667 17.524414 5.644531 C 18.015949 5.872396 18.44401 6.176758 18.808594 6.557617 C 19.173176 6.938477 19.462891 7.379558 19.677734 7.880859 C 19.892578 8.382162 20 8.902995 20 9.443359 L 20 9.667969 C 20 9.700521 20 9.736328 20 9.775391 C 20 9.814453 19.996744 9.850261 19.990234 9.882812 C 19.573566 9.375 19.108072 8.932292 18.59375 8.554688 C 18.489582 8.248698 18.346354 7.972006 18.164062 7.724609 C 17.98177 7.477214 17.770182 7.267253 17.529297 7.094727 C 17.28841 6.922201 17.021484 6.788737 16.728516 6.694336 C 16.435547 6.599936 16.129557 6.552735 15.810547 6.552734 C 15.472005 6.552735 15.192057 6.446941 14.970703 6.235352 C 14.749349 6.023764 14.61263 5.755209 14.560547 5.429688 C 14.527994 5.195312 14.49056 4.967448 14.448242 4.746094 C 14.405924 4.52474 14.342447 4.300131 14.257812 4.072266 C 14.088541 3.603516 13.862304 3.193359 13.579102 2.841797 C 13.295897 2.490234 12.970377 2.195639 12.602539 1.958008 C 12.2347 1.720379 11.831055 1.542969 11.391602 1.425781 C 10.952148 1.308594 10.488281 1.25 10 1.25 C 9.511719 1.25 9.047852 1.308594 8.608398 1.425781 C 8.168945 1.542969 7.765299 1.71875 7.397461 1.953125 C 7.029622 2.1875 6.704102 2.480469 6.420898 2.832031 C 6.137695 3.183594 5.911458 3.59375 5.742188 4.0625 C 5.657552 4.290365 5.594075 4.514975 5.551758 4.736328 C 5.50944 4.957683 5.472005 5.188803 5.439453 5.429688 C 5.38737 5.813803 5.236002 6.097006 4.985352 6.279297 C 4.7347 6.46159 4.423828 6.552735 4.052734 6.552734 C 3.655599 6.552735 3.286133 6.635743 2.944336 6.801758 C 2.602539 6.967774 2.306315 7.189129 2.055664 7.46582 C 1.805013 7.742514 1.608073 8.059896 1.464844 8.417969 C 1.321615 8.776042 1.25 9.147136 1.25 9.53125 C 1.25 9.928386 1.321615 10.30599 1.464844 10.664062 C 1.608073 11.022136 1.806641 11.337891 2.060547 11.611328 C 2.314453 11.884766 2.61556 12.101237 2.963867 12.260742 C 3.312174 12.420248 3.691406 12.5 4.101562 12.5 L 7.431641 12.5 C 7.373047 12.708334 7.327474 12.916667 7.294922 13.125 C 7.26237 13.333334 7.236328 13.541667 7.216797 13.75 Z M 8.75 14.375 C 8.75 13.600261 8.898111 12.871094 9.194336 12.1875 C 9.49056 11.503906 9.892578 10.908203 10.400391 10.400391 C 10.908203 9.892578 11.503906 9.490561 12.1875 9.194336 C 12.871093 8.898112 13.60026 8.75 14.375 8.75 C 14.889322 8.75 15.385741 8.816732 15.864258 8.950195 C 16.342773 9.083659 16.790363 9.272461 17.207031 9.516602 C 17.623697 9.760742 18.004557 10.055339 18.349609 10.400391 C 18.69466 10.745443 18.989258 11.126303 19.233398 11.542969 C 19.477539 11.959636 19.66634 12.407227 19.799805 12.885742 C 19.933268 13.364258 20 13.860678 20 14.375 C 20 15.14974 19.851887 15.878906 19.555664 16.5625 C 19.259439 17.246094 18.857422 17.841797 18.349609 18.349609 C 17.841797 18.857422 17.246094 19.259439 16.5625 19.555664 C 15.878906 19.851889 15.149739 20 14.375 20 C 13.59375 20 12.861328 19.853516 12.177734 19.560547 C 11.494141 19.267578 10.898438 18.867188 10.390625 18.359375 C 9.882812 17.851562 9.482422 17.255859 9.189453 16.572266 C 8.896484 15.888672 8.75 15.15625 8.75 14.375 Z M 14.375 17.578125 C 14.570312 17.578125 14.736328 17.509766 14.873047 17.373047 L 17.373047 14.873047 C 17.509766 14.736328 17.578125 14.570312 17.578125 14.375 C 17.578125 14.179688 17.509766 14.013672 17.373047 13.876953 C 17.236328 13.740234 17.070312 13.671875 16.875 13.671875 C 16.679688 13.671875 16.513672 13.740234 16.376953 13.876953 L 15 15.253906 L 15 11.875 C 14.999999 11.705729 14.93815 11.559245 14.814453 11.435547 C 14.690755 11.31185 14.544271 11.25 14.375 11.25 C 14.205729 11.25 14.059244 11.31185 13.935547 11.435547 C 13.811849 11.559245 13.75 11.705729 13.75 11.875 L 13.75 15.253906 L 12.373047 13.876953 C 12.236328 13.740234 12.070312 13.671875 11.875 13.671875 C 11.679688 13.671875 11.513672 13.740234 11.376953 13.876953 C 11.240234 14.013672 11.171875 14.179688 11.171875 14.375 C 11.171875 14.570312 11.240234 14.736328 11.376953 14.873047 L 13.876953 17.373047 C 14.013672 17.509766 14.179688 17.578125 14.375 17.578125 Z \"\n                                Margin=\"0,0,6,0\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Download}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"False\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"NavLauncher\"\n                        Tag=\"launcher\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"F1 M 17.548828 2.5 C 17.874348 2.5 18.185221 2.566732 18.481445 2.700195 C 18.777668 2.83366 19.038086 3.012695 19.262695 3.237305 C 19.487305 3.461914 19.66634 3.722332 19.799805 4.018555 C 19.933268 4.314779 20 4.625651 20 4.951172 L 20 11.298828 C 20 11.63737 19.931641 11.954753 19.794922 12.250977 C 19.658203 12.547201 19.47591 12.80599 19.248047 13.027344 C 19.020182 13.248698 18.754883 13.424479 18.452148 13.554688 C 18.149414 13.684896 17.832031 13.75 17.5 13.75 L 13.642578 13.75 C 13.577474 13.938803 13.486328 14.109701 13.369141 14.262695 C 13.251953 14.41569 13.115234 14.547526 12.958984 14.658203 C 12.802734 14.768881 12.633463 14.853516 12.451172 14.912109 C 12.26888 14.970703 12.076822 15 11.875 15 L 3.125 15 C 2.871094 15 2.630208 14.951172 2.402344 14.853516 C 2.174479 14.755859 1.974284 14.620769 1.801758 14.448242 C 1.629232 14.275717 1.494141 14.075521 1.396484 13.847656 C 1.298828 13.619792 1.25 13.378906 1.25 13.125 L 1.25 8.125 C 1.25 7.871094 1.298828 7.630209 1.396484 7.402344 C 1.494141 7.174479 1.629232 6.974284 1.801758 6.801758 C 1.974284 6.629232 2.174479 6.494141 2.402344 6.396484 C 2.630208 6.298828 2.871094 6.25 3.125 6.25 L 5 6.25 L 5 4.951172 C 5 4.625651 5.066731 4.314779 5.200195 4.018555 C 5.333659 3.722332 5.512695 3.461914 5.737305 3.237305 C 5.961914 3.012695 6.222331 2.83366 6.518555 2.700195 C 6.814778 2.566732 7.125651 2.5 7.451172 2.5 Z M 18.75 5 C 18.75 4.830729 18.717447 4.669597 18.652344 4.516602 C 18.587238 4.363607 18.497721 4.230144 18.383789 4.116211 C 18.269855 4.002279 18.136393 3.912762 17.983398 3.847656 C 17.830402 3.782553 17.66927 3.75 17.5 3.75 L 7.5 3.75 C 7.324218 3.75 7.161458 3.782553 7.011719 3.847656 C 6.861979 3.912762 6.730143 4.002279 6.616211 4.116211 C 6.502278 4.230144 6.41276 4.361979 6.347656 4.511719 C 6.282552 4.661459 6.25 4.82422 6.25 5 L 6.25 6.25 L 11.875 6.25 C 12.128906 6.25 12.369791 6.298828 12.597656 6.396484 C 12.825521 6.494141 13.025716 6.629232 13.198242 6.801758 C 13.370768 6.974284 13.505859 7.174479 13.603516 7.402344 C 13.701172 7.630209 13.75 7.871094 13.75 8.125 L 13.75 12.5 L 17.5 12.5 C 17.675781 12.5 17.838541 12.467448 17.988281 12.402344 C 18.13802 12.33724 18.269855 12.247722 18.383789 12.133789 C 18.497721 12.019857 18.587238 11.888021 18.652344 11.738281 C 18.717447 11.588542 18.75 11.425781 18.75 11.25 Z M 12.5 8.125 C 12.5 7.95573 12.43815 7.809246 12.314453 7.685547 C 12.190754 7.56185 12.04427 7.5 11.875 7.5 L 3.125 7.5 C 2.955729 7.5 2.809245 7.56185 2.685547 7.685547 C 2.561849 7.809246 2.5 7.95573 2.5 8.125 L 2.5 13.125 C 2.5 13.294271 2.561849 13.440756 2.685547 13.564453 C 2.809245 13.688151 2.955729 13.75 3.125 13.75 L 11.875 13.75 C 12.04427 13.75 12.190754 13.688151 12.314453 13.564453 C 12.43815 13.440756 12.5 13.294271 12.5 13.125 Z M 14.375 16.25 C 14.544271 16.25 14.690755 16.31185 14.814453 16.435547 C 14.93815 16.559244 14.999999 16.705729 15 16.875 C 14.999999 17.044271 14.93815 17.190756 14.814453 17.314453 C 14.690755 17.43815 14.544271 17.5 14.375 17.5 L 0.625 17.5 C 0.455729 17.5 0.309245 17.43815 0.185547 17.314453 C 0.061849 17.190756 0 17.044271 0 16.875 C 0 16.705729 0.061849 16.559244 0.185547 16.435547 C 0.309245 16.31185 0.455729 16.25 0.625 16.25 Z \"\n                                Margin=\"0,0,6,0\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Launcher}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                    <ui:NavigationViewItem\n                        IsSelected=\"False\"\n                        Margin=\"0,0,0,7\"\n                        Name=\"PluginSettingNavControl\"\n                        Tag=\"plugin\">\n                        <DockPanel>\n                            <PathIcon\n                                Data=\"M481.5360107421875,160C448.725341796875,160,422.101318359375,186.62399291992188,422.101318359375,219.43466186523438L422.101318359375,274.3039855957031C422.101318359375,291.97711181640625,407.7744445800781,306.3039855957031,390.101318359375,306.3039855957031L243.79733276367188,306.3039855957031C221.1840057373047,306.3039855957031,203.05067443847656,324.5653381347656,203.05067443847656,347.4773254394531L202.8800048828125,454.3573303222656 225.4933319091797,454.3999938964844C294.71527099609375,454.41339111328125,351.9443054199219,508.350830078125,356.0533447265625,577.45068359375L356.26666259765625,585.1306762695312C356.2196044921875,657.3117065429688,297.717041015625,715.8142700195312,225.53599548339844,715.861328125L202.79466247558594,715.861328125 202.6666717529297,822.8693237304688C202.65521240234375,843.7451171875,218.2842254638672,861.3185424804688,239.01866149902344,863.7440185546875L243.79733276367188,864 350.7626647949219,864 350.7626647949219,841.17333984375C350.77740478515625,771.9359130859375,404.7393493652344,714.7007446289062,473.8559875488281,710.6133422851562L481.5360107421875,710.4000244140625C553.7171020507812,710.4471435546875,612.2196044921875,768.9496459960938,612.2666625976562,841.1306762695312L612.2666625976562,864 719.2319946289062,864C740.1077880859375,864.0114135742188,757.6812133789062,848.3824462890625,760.106689453125,827.6480102539062L760.3626708984375,822.8693237304688 760.3626708984375,676.5653076171875C760.3626708984375,658.8922119140625,774.6895751953125,644.5653076171875,792.3626708984375,644.5653076171875L847.2319946289062,644.5653076171875C879.1809692382812,643.3543701171875,904.4567260742188,617.1025390625,904.4567260742188,585.130615234375C904.4567260742188,553.15869140625,879.1809692382812,526.9068603515625,847.2319946289062,525.6959838867188L792.3626708984375,525.6959838867188C774.6986694335938,525.6959838867188,760.3626708984375,511.4026794433594,760.3626708984375,493.6960144042969L760.3626708984375,347.4346618652344C760.3626708984375,324.6506652832031,741.9733276367188,306.3039855957031,719.2319946289062,306.3039855957031L572.9706420898438,306.3039855957031C555.2639770507812,306.3039855957031,540.9706420898438,291.9679870605469,540.9706420898438,274.3039855957031L540.9706420898438,219.43466186523438C540.9706420898438,186.62399291992188,514.3040161132812,160,481.5360107421875,160z M481.5360107421875,96C549.6806640625,96.04710388183594,604.9044189453125,151.2899932861328,604.927978515625,219.43466186523438L604.927978515625,242.26133728027344 719.2319946289062,242.3040008544922C774.6163330078125,242.29653930664062,820.5079956054688,285.2581787109375,824.1493530273438,340.5226745605469L824.3626708984375,347.4346618652344 824.3626708984375,461.6960144042969 847.2319946289062,461.6960144042969C912.5772705078125,461.71734619140625,966.5921630859375,512.6461791992188,970.4533081054688,577.8773193359375L970.6666870117188,585.1306762695312C970.64306640625,653.2919921875,915.393310546875,708.5418090820312,847.2319946289062,708.5653076171875L824.3626708984375,708.5653076171875 824.3626708984375,822.82666015625C824.392578125,878.2273559570312,781.4248657226562,924.1442260742188,726.1439819335938,927.7866821289062L719.2319946289062,928 580.2666625976562,928C562.6026611328125,928,548.2666625976562,913.6640014648438,548.2666625976562,896L548.2666625976562,841.17333984375C546.7015991210938,805.4431762695312,517.279052734375,777.2811889648438,481.5146484375,777.2811889648438C445.7502746582031,777.2811889648438,416.32769775390625,805.4431762695312,414.7626647949219,841.17333984375L414.7626647949219,896.0426635742188C414.7626647949219,913.7157592773438,400.435791015625,928.0426635742188,382.7626647949219,928.0426635742188L243.79733276367188,928.0426635742188C215.90756225585938,928.0426635742188,189.16067504882812,916.9605712890625,169.44363403320312,897.2354736328125C149.72659301757812,877.5104370117188,138.6553497314453,850.7590942382812,138.6666717529297,822.8693237304688L138.8373260498047,683.9039916992188C138.86087036132812,666.24755859375,153.1808624267578,651.9466552734375,170.8373260498047,651.9466552734375L225.57867431640625,651.9466552734375C262.3999938964844,651.9466552734375 292.309326171875,621.9946899414062 292.309326171875,585.17333984375 292.309326171875,548.3519897460938 262.3999938964844,518.4426879882812 225.57867431640625,518.4426879882812L170.8800048828125,518.4426879882812C162.38568115234375,518.4426879882812,154.2398681640625,515.0654296875,148.2374725341797,509.0550231933594C142.23507690429688,503.04461669921875,138.86866760253906,494.8943176269531,138.8800048828125,486.3999938964844L139.0933380126953,347.4773254394531C138.9913330078125,319.6298522949219,149.97344970703125,292.8861083984375,169.61663818359375,273.1468505859375C189.25982666015625,253.40762329101562,215.94969177246094,242.295166015625,243.79733276367188,242.26133728027344L358.05865478515625,242.26133728027344 358.101318359375,219.43466186523438C358.12261962890625,154.08934020996094,409.0514831542969,100.07444763183594,474.28265380859375,96.21332550048828L481.5360107421875,96z\"\n                                Margin=\"0,0,7,0\"\n                                Width=\"16\" />\n                            <TextBlock\n                                FontFamily=\"{DynamicResource Font}\"\n                                FontSize=\"14\"\n                                Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Plugin}\" />\n                        </DockPanel>\n                    </ui:NavigationViewItem>\n                </ui:NavigationView.MenuItems>\n            </ui:NavigationView>\n        </Border>\n        <ContentControl\n            DockPanel.Dock=\"Bottom\"\n            Margin=\"0,10,0,0\"\n            Name=\"FrameView\" />\n    </DockPanel>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Setting.axaml.cs",
    "content": "﻿using FluentAvalonia.UI.Controls;\nusing Modrinth.Models;\nusing YMCL.Public.Module.Ui;\n\nnamespace YMCL.Views.Main.Pages;\n\npublic partial class Setting : UserControl\n{\n    public readonly SettingPages.Launch _launch = new();\n    public readonly SettingPages.Account _account = new();\n    public readonly SettingPages.Personalize _personalize = new();\n    public readonly SettingPages.Download _download = new();\n    public readonly SettingPages.Plugin _plugin = new();\n    public readonly SettingPages.Launcher _launcher = new();\n    public NavigationView NavigationView => Nav;\n    public ContentControl Frame => FrameView;\n\n    public Setting()\n    {\n        InitializeComponent();\n        FrameView.Content = _launch;\n        BindingEvent();\n    }\n\n    private void BindingEvent()\n    {\n        Nav.SelectionChanged += (o, e) =>\n        {\n            var tag = ((e.SelectedItem as NavigationViewItem).Tag as string)!;\n            UserControl page = tag switch\n            {\n                \"launch\" => _launch,\n                \"account\" => _account,\n                \"personalize\" => _personalize,\n                \"download\" => _download,\n                \"launcher\" => _launcher,\n                \"plugin\" => _plugin,\n                _ => null\n            };\n            if (page == null) return;\n            FrameView.Content = page;\n            _ = Animator.PageLoading.LevelTwoPage(page);\n        };\n        Loaded += (_, _) =>\n        {\n            _ = Animator.PageLoading.LevelTwoPage(FrameView.Content as UserControl);\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Account.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.SettingPages.Account\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:converters=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:setting=\"clr-namespace:YMCL.Public.Classes.Setting\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converters:AccountTypeIsMicrosoftConverter x:Key=\"AccountTypeIsMicrosoftConverter\" />\n    </UserControl.Resources>\n    <Border\n        Background=\"{DynamicResource 1x}\"\n        ClipToBounds=\"True\"\n        CornerRadius=\"{DynamicResource MainCornerRadius}\"\n        Margin=\"10,0,10,10\"\n        Opacity=\"{DynamicResource MainOpacity}\"\n        Padding=\"0,10,0,0\">\n        <StackPanel Margin=\"5,0,10,10\" Spacing=\"10\">\n            <DockPanel LastChildFill=\"False\">\n                <Button\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AddNewAccount}\"\n                    FontFamily=\"{DynamicResource Font}\"\n                    Margin=\"6.5,0,0,0\"\n                    x:Name=\"AddAccountBtn\" />\n                <Button\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DelSelectedItem}\"\n                    FontFamily=\"{DynamicResource Font}\"\n                    Margin=\"6.5,0,0,0\"\n                    x:Name=\"DelSelectedAccountBtn\" />\n                <Button\n                    Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.RefreshMicrosoftSkin}\"\n                    FontFamily=\"{DynamicResource Font}\"\n                    IsEnabled=\"{Binding SettingEntry.Account, Converter={StaticResource AccountTypeIsMicrosoftConverter}}\"\n                    IsVisible=\"{Binding SettingEntry.Account, Converter={StaticResource AccountTypeIsMicrosoftConverter}}\"\n                    Margin=\"6.5,0,0,0\"\n                    x:Name=\"RefreshMicrosoftSkinBtn\" />\n            </DockPanel>\n            <ListBox\n                ItemsSource=\"{Binding Accounts}\"\n                Margin=\"0,-5,0,0\"\n                SelectedItem=\"{Binding SettingEntry.Account}\"\n                x:Name=\"AccountsListView\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate DataType=\"setting:AccountInfo\">\n                        <Border Margin=\"0,6\">\n                            <DockPanel>\n                                <Border\n                                    ClipToBounds=\"True\"\n                                    CornerRadius=\"3,3,3,3\"\n                                    Height=\"28\"\n                                    Margin=\"2,0,6.5,0\"\n                                    Width=\"28\">\n                                    <Image Source=\"{Binding Bitmap}\" />\n                                </Border>\n                                <Grid>\n                                    <TextBlock\n                                        FontFamily=\"{DynamicResource Font}\"\n                                        FontSize=\"14\"\n                                        Text=\"{Binding Name}\" />\n                                    <StackPanel Margin=\"0,17,0,0\" Orientation=\"Horizontal\">\n                                        <TextBlock\n                                            FontFamily=\"{DynamicResource Font}\"\n                                            FontSize=\"11\"\n                                            Foreground=\"{DynamicResource GrayColor}\"\n                                            Margin=\"0,0,0,0\"\n                                            Text=\"{Binding AccountType}\" />\n                                        <TextBlock\n                                            FontFamily=\"{DynamicResource Font}\"\n                                            FontSize=\"11\"\n                                            Foreground=\"{DynamicResource GrayColor}\"\n                                            Margin=\"5,0,0,0\"\n                                            Text=\"{Binding AddTime}\" />\n                                    </StackPanel>\n                                </Grid>\n                            </DockPanel>\n                        </Border>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        </StackPanel>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Account.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Semi.Avalonia.Locale;\n\nnamespace YMCL.Views.Main.Pages.SettingPages;\n\npublic partial class Account : UserControl\n{\n    public Account()\n    {\n        InitializeComponent();\n        BindingEvent();\n        DataContext = Data.Instance;\n    }\n\n    private void BindingEvent()\n    {\n        AddAccountBtn.Click += (_, _) => { _ = Public.Module.Op.Account.AddByUi(this); };\n        DelSelectedAccountBtn.Click += (_, _) => { Public.Module.Op.Account.RemoveSelected(); };\n        RefreshMicrosoftSkinBtn.Click += (_, _) =>\n        {\n            _ = Public.Module.Op.Account.RefreshSelectedMicrosoftAccountSkin();\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Download.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.SettingPages.Download\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:controls=\"clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:BoolToIntConverter x:Key=\"BoolIntConverter\" />\n        <converter:MaxThreadOverSafeConverter x:Key=\"MaxThreadOverSafeConverter\" />\n    </UserControl.Resources>\n    <ScrollViewer>\n        <StackPanel Margin=\"10,0,10,10\" Spacing=\"10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DownloadSource}\"\n                        VerticalAlignment=\"Center\" />\n                    <ComboBox\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        SelectedIndex=\"{Binding SettingEntry.DownloadSource}\"\n                        x:Name=\"DownloadSourceComboBox\">\n                        <ComboBox.Items>\n                            <ComboBoxItem>Mojang</ComboBoxItem>\n                            <ComboBoxItem>BmclApi</ComboBoxItem>\n                        </ComboBox.Items>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Name=\"CustomUpdateUrlRoot\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Name=\"CustomUpdateUrlLabel\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CustomUpdateUrl}\"\n                        VerticalAlignment=\"Center\" />\n                    <DockPanel DockPanel.Dock=\"Right\" HorizontalAlignment=\"Stretch\">\n                        <TextBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            HorizontalAlignment=\"Stretch\"\n                            IsVisible=\"{Binding SettingEntry.EnableCustomUpdateUrl}\"\n                            Name=\"CustomUpdateUrlTextBox\"\n                            Text=\"{Binding SettingEntry.CustomUpdateUrl}\" />\n                        <ComboBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            HorizontalAlignment=\"Stretch\"\n                            Margin=\"10,0,0,0\"\n                            SelectedIndex=\"{Binding SettingEntry.EnableCustomUpdateUrl, Converter={StaticResource BoolIntConverter}}\"\n                            x:Name=\"CustomUpdateUrlEnableComboBox\">\n                            <ComboBox.Items>\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Off}\" />\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.On}\" />\n                            </ComboBox.Items>\n                        </ComboBox>\n                    </DockPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Name=\"MusicApiRoot\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MusicApi}\"\n                        VerticalAlignment=\"Center\" />\n                    <DockPanel DockPanel.Dock=\"Right\" HorizontalAlignment=\"Stretch\">\n                        <Button\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ProjectInfo}\"\n                            Margin=\"0,0,5,0\"\n                            Name=\"MusicApiButton\" />\n                        <TextBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            HorizontalAlignment=\"Stretch\"\n                            Name=\"MusicApiTextBox\"\n                            Text=\"{Binding SettingEntry.MusicApi}\" />\n                    </DockPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MusicApiWithIP}\"\n                        VerticalAlignment=\"Center\" />\n                    <DockPanel DockPanel.Dock=\"Right\" HorizontalAlignment=\"Stretch\">\n                        <TextBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            HorizontalAlignment=\"Stretch\"\n                            Text=\"{Binding SettingEntry.MusicApiWithIPAddress}\" />\n                    </DockPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"40\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <DockPanel>\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MaxFileFragmentation}\"\n                            VerticalAlignment=\"Center\" />\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"3,0,3,0\"\n                            Name=\"MaxFileFragmentationText\"\n                            Text=\"{Binding SettingEntry.MaxFileFragmentation}\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\"\n                            Width=\"65\" />\n                        <Slider\n                            IsSnapToTickEnabled=\"True\"\n                            Maximum=\"64\"\n                            Minimum=\"1\"\n                            Name=\"MaxFileFragmentationSlider\"\n                            TickFrequency=\"1\"\n                            Value=\"{Binding SettingEntry.MaxFileFragmentation}\"\n                            VerticalAlignment=\"Center\" />\n                    </DockPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"40\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MaximumDownloadThread}\"\n                        VerticalAlignment=\"Center\" />\n                    <TextBlock\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"3,0,3,0\"\n                        Name=\"MaximumDownloadThreadText\"\n                        Text=\"{Binding SettingEntry.MaxDownloadThread}\"\n                        TextAlignment=\"Center\"\n                        VerticalAlignment=\"Center\"\n                        Width=\"65\" />\n                    <Slider\n                        IsSnapToTickEnabled=\"True\"\n                        Maximum=\"512\"\n                        Minimum=\"8\"\n                        Name=\"MaximumDownloadThreadSlider\"\n                        TickFrequency=\"1\"\n                        Value=\"{Binding SettingEntry.MaxDownloadThread}\"\n                        VerticalAlignment=\"Center\" />\n                </DockPanel>\n            </Border>\n            <controls:InfoBar\n                FontFamily=\"{DynamicResource Font}\"\n                IsClosable=\"False\"\n                IsOpen=\"True\"\n                IsVisible=\"{Binding SettingEntry.MaxDownloadThread, Converter={StaticResource MaxThreadOverSafeConverter}}\"\n                Message=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DownloadThreadTooBigTip}\"\n                Name=\"DownloadThreadWarning\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Severity=\"Warning\" />\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"40\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoUpdate}\"\n                        VerticalAlignment=\"Center\" />\n                    <ToggleSwitch\n                        FontFamily=\"{DynamicResource Font}\"\n                        Height=\"40\"\n                        HorizontalAlignment=\"Right\"\n                        IsChecked=\"{Binding SettingEntry.EnableAutoCheckUpdate}\"\n                        Margin=\"0,-10,10,0\"\n                        Name=\"AutoUpdateSwitch\"\n                        OffContent=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Off}\"\n                        OnContent=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.On}\"\n                        VerticalAlignment=\"Center\" />\n                </DockPanel>\n            </Border>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Download.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace YMCL.Views.Main.Pages.SettingPages;\n\npublic partial class Download : UserControl\n{\n    public Download()\n    {\n        InitializeComponent();\n        DataContext = Data.Instance;\n        MusicApiButton.Click += (_, _) =>\n        {\n            var launcher = TopLevel.GetTopLevel(this).Launcher;\n            launcher.LaunchUriAsync(new Uri(\"https://gitlab.com/Binaryify/neteasecloudmusicapi\"));\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Launch.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.SettingPages.Launch\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:BoolReversalConverter x:Key=\"BoolReversalConverter\" />\n    </UserControl.Resources>\n    <ScrollViewer Margin=\"10,0,10,10\">\n        <StackPanel Spacing=\"10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MinecraftFolder}\"\n                        VerticalAlignment=\"Center\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DelSelectedItem}\"\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"6.5,0,0,0\"\n                        x:Name=\"DelSelectedMinecraftFolderBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AddFolder}\"\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"6.5,0,0,0\"\n                        x:Name=\"AddMinecraftFolderBtn\" />\n                    <ComboBox\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        ItemsSource=\"{Binding MinecraftFolders}\"\n                        SelectedItem=\"{Binding SettingEntry.MinecraftFolder}\"\n                        x:Name=\"MinecraftFolderComboBox\">\n                        <ComboBox.ItemTemplate>\n                            <DataTemplate DataType=\"data:MinecraftFolder\">\n                                <TextBlock\n                                    FontFamily=\"{DynamicResource Font}\"\n                                    Margin=\"0,5\"\n                                    TextWrapping=\"Wrap\">\n                                    <Run>[</Run>\n                                    <Run Text=\"{Binding Name}\" />\n                                    <Run>]</Run>\n                                    <Run Text=\"{Binding Path}\" />\n                                </TextBlock>\n                            </DataTemplate>\n                        </ComboBox.ItemTemplate>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"Java\"\n                        VerticalAlignment=\"Center\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeleteSelect}\"\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"6.5,0,0,0\"\n                        x:Name=\"RemoveJavaBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoScan}\"\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"6.5,0,0,0\"\n                        x:Name=\"AutoScanJavaBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ManualAdd}\"\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        Margin=\"6.5,0,0,0\"\n                        x:Name=\"ManualAddJavaBtn\" />\n                    <ComboBox\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        ItemsSource=\"{Binding JavaRuntimes}\"\n                        Name=\"JavaComboBox\"\n                        SelectedItem=\"{Binding SettingEntry.Java}\">\n                        <ComboBox.ItemTemplate>\n                            <DataTemplate DataType=\"data:JavaEntry\">\n                                <TextBlock>\n                                    <Run Text=\"[\" />\n                                    <Run Text=\"{Binding JavaType}\" />\n                                    <Run Text=\"{Binding JavaVersion}\" />\n                                    <Run Text=\"]\" />\n                                    <Run Text=\"{Binding JavaPath}\" />\n                                </TextBlock>\n                            </DataTemplate>\n                        </ComboBox.ItemTemplate>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <StackPanel Margin=\"0,5\" Spacing=\"5\">\n                    <DockPanel Name=\"DockPanel\">\n                        <DockPanel.IsEnabled>\n                            <MultiBinding Converter=\"{StaticResource BoolReversalConverter}\">\n                                <Binding Path=\"SettingEntry.EnableAutoAllocateMem\" />\n                            </MultiBinding>\n                        </DockPanel.IsEnabled>\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.MaxMem}\"\n                            VerticalAlignment=\"Center\" />\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"6.5,0,6.5,0\"\n                            Name=\"CanUseMemText\"\n                            Text=\"∞\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\"\n                            Width=\"65\" />\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"6.5,0,6.5,0\"\n                            Name=\"MaxMemText\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\">\n                            <Run Text=\"{Binding SettingEntry.MaxMem}\" />\n                            <Run Text=\"Mib\" />\n                        </TextBlock>\n                        <Slider\n                            IsSnapToTickEnabled=\"True\"\n                            Margin=\"0,0,0,0\"\n                            Maximum=\"{Binding UiProperty.Instance.SystemMaxMem}\"\n                            Name=\"MaxMemSlider\"\n                            TickFrequency=\"1\"\n                            Value=\"{Binding SettingEntry.MaxMem}\"\n                            VerticalAlignment=\"Center\" />\n                    </DockPanel>\n                    <DockPanel Name=\"UsedMemRoot\">\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.UsedMem}\"\n                            VerticalAlignment=\"Center\" />\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"6.5,0,6.5,0\"\n                            Name=\"UsedMemText\"\n                            Text=\"∞\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\"\n                            Width=\"65\" />\n                        <ProgressBar\n                            Margin=\"0,0,0,0\"\n                            Maximum=\"100\"\n                            Name=\"UsedMemProgressBar\"\n                            VerticalAlignment=\"Center\" />\n                    </DockPanel>\n                    <DockPanel Name=\"AutoMemRoot\">\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AutoAllocate}\"\n                            VerticalAlignment=\"Center\" />\n                        <CheckBox\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.EnableAutoAllocateMem}\"\n                            DockPanel.Dock=\"Right\"\n                            HorizontalAlignment=\"Right\"\n                            IsChecked=\"{Binding SettingEntry.EnableAutoAllocateMem}\"\n                            Margin=\"0,0,15,0\" />\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"6.5,0,6.5,0\"\n                            Name=\"AutoMemText\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\"\n                            Width=\"85\">\n                            <Run Text=\"{Binding UiProperty.AutoMaxMem}\" />\n                            <Run Text=\"Mib\" />\n                        </TextBlock>\n                        <ProgressBar\n                            Margin=\"0,0,0,0\"\n                            Maximum=\"{Binding UiProperty.SystemMaxMem}\"\n                            Name=\"AutoMemProgressBar\"\n                            Value=\"{Binding UiProperty.AutoMaxMem}\"\n                            VerticalAlignment=\"Center\" />\n                    </DockPanel>\n                </StackPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"40\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.EnableIndependencyCore}\"\n                        VerticalAlignment=\"Center\" />\n                    <ToggleSwitch\n                        FontFamily=\"{DynamicResource Font}\"\n                        Height=\"40\"\n                        HorizontalAlignment=\"Right\"\n                        IsChecked=\"{Binding SettingEntry.EnableIndependencyCore}\"\n                        Margin=\"0,-10,10,0\"\n                        Name=\"IndependencyCoreSwitch\"\n                        OffContent=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Off}\"\n                        OnContent=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.On}\" />\n                </DockPanel>\n            </Border>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Launch.axaml.cs",
    "content": "﻿using System.Management;\nusing System.Runtime.InteropServices;\nusing System.Threading.Tasks;\nusing Avalonia.Threading;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Module.IO;\nusing YMCL.Public.Module.Op;\nusing MinecraftFolder = YMCL.Public.Module.Op.MinecraftFolder;\n\nnamespace YMCL.Views.Main.Pages.SettingPages;\n\npublic partial class Launch : UserControl\n{\n    public Launch()\n    {\n        InitializeComponent();\n        BindingEvent();\n        _ = ControlProperty();\n    }\n\n    private async System.Threading.Tasks.Task ControlProperty()\n    {\n        DataContext = Data.Instance;\n        AutoMemProgressBar.Maximum = UiProperty.Instance.SystemMaxMem;\n        while (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))\n        {\n            await System.Threading.Tasks.Task.Run(() =>\n            {\n                using var managementClass = new ManagementClass(\"Win32_PerfFormattedData_PerfOS_Memory\");\n                using var instances = managementClass.GetInstances();\n                foreach (var mo in instances)\n                {\n                    var size = long.Parse(mo.Properties[\"AvailableMBytes\"].Value.ToString()!);\n                    var used = Math.Round(100 - size / UiProperty.Instance.SystemMaxMem * 100, 2);\n                    Dispatcher.UIThread.Invoke(() =>\n                    {\n                        var free = Math.Round(100 - size / UiProperty.Instance.SystemMaxMem * 100 -\n                                              MaxMemSlider.Value / MaxMemSlider.Maximum * 100, 2);\n                        UsedMemText.Text = $\"{used}%\";\n                        UsedMemProgressBar.Value = used;\n                        CanUseMemText.Text = $\"{free}%\";\n                        var auto = Math.Floor((100 - used) / 100 * 0.75 * UiProperty.Instance.SystemMaxMem);\n                        AutoMemProgressBar.Value = auto;\n                        AutoMemText.Text = $\"{auto} Mib\";\n                        Data.UiProperty.AutoMaxMem = auto;\n                    });\n                }\n            });\n            await System.Threading.Tasks.Task.Delay(100);\n        }\n        \n        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) return;\n        UsedMemRoot.IsVisible = false;\n        CanUseMemText.IsVisible = false;\n        // AutoScanJavaBtn.IsVisible = false;\n        AutoMemRoot.IsVisible = false;\n        DockPanel.IsEnabled = true;\n        Data.SettingEntry.EnableAutoAllocateMem = false;\n    }\n\n    private void BindingEvent()\n    {\n        AddMinecraftFolderBtn.Click += (_, _) => { _ = MinecraftFolder.AddByUi(this); };\n        DelSelectedMinecraftFolderBtn.Click += (_, _) => { MinecraftFolder.RemoveSelected(); };\n        RemoveJavaBtn.Click += (_, _) => { JavaRuntime.RemoveSelected(); };\n        AutoScanJavaBtn.Click += (_, _) => { JavaRuntime.AddByAutoScan(); };\n        ManualAddJavaBtn.Click += (_, _) => { _ = JavaRuntime.AddByUi(this); };\n        JavaComboBox.SelectionChanged += (_, _) =>\n        {\n            JavaComboBox.IsVisible = false;\n            JavaComboBox.IsVisible = true;\n        };\n        Loaded += (_, _) =>\n        {\n            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) return;\n            UsedMemRoot.IsVisible = false;\n            CanUseMemText.IsVisible = false;\n            // AutoScanJavaBtn.IsVisible = false;\n            AutoMemRoot.IsVisible = false;\n            DockPanel.IsEnabled = true;\n            Data.SettingEntry.EnableAutoAllocateMem = false;\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Launcher.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.SettingPages.Launcher\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <ScrollViewer>\n        <StackPanel Margin=\"10,0,10,10\" Spacing=\"10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel LastChildFill=\"False\">\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ImportOrExportSetting}\"\n                        VerticalAlignment=\"Center\" />\n                    <StackPanel\n                        DockPanel.Dock=\"Right\"\n                        HorizontalAlignment=\"Right\"\n                        Orientation=\"Horizontal\"\n                        Spacing=\"10\">\n                        <Button Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Import}\" Name=\"ImportButton\" />\n                        <Button Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Export}\" Name=\"ExportButton\" />\n                    </StackPanel>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Name=\"UrlSchemeBorder\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel LastChildFill=\"False\">\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"Url Scheme\"\n                        VerticalAlignment=\"Center\" />\n                    <StackPanel\n                        DockPanel.Dock=\"Right\"\n                        HorizontalAlignment=\"Right\"\n                        Orientation=\"Horizontal\"\n                        Spacing=\"10\">\n                        <Button Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.WriteIn}\" Name=\"UrlSchemeButton\" />\n                    </StackPanel>\n                </DockPanel>\n            </Border>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Launcher.axaml.cs",
    "content": "﻿using System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Controls.Notifications;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Platform.Storage;\nusing AvaloniaEdit;\nusing FluentAvalonia.UI.Controls;\nusing Microsoft.Win32;\nusing Newtonsoft.Json;\nusing YMCL.Public.Classes.Setting;\nusing YMCL.Public.Enum;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module.Util;\nusing YMCL.Public.Module.Util.Extension;\n\nnamespace YMCL.Views.Main.Pages.SettingPages;\n\npublic partial class Launcher : UserControl\n{\n    public Launcher()\n    {\n        DataContext = Data.Instance;\n        InitializeComponent();\n        BindingEvent();\n        UrlSchemeBorder.IsVisible = Data.DesktopType == DesktopRunnerType.Windows;\n    }\n\n    private void BindingEvent()\n    {\n        ExportButton.Click += async (_, _) =>\n        {\n            var ui = new CheckBox() { Content = MainLang.ExchangeSetting_Ui };\n            var net = new CheckBox() { Content = MainLang.ExchangeSetting_Net };\n            var launch = new CheckBox() { Content = MainLang.ExchangeSetting_Launch };\n            var other = new CheckBox() { Content = MainLang.ExchangeSetting_Other };\n            var accounts = new CheckBox() { Content = MainLang.ExchangeSetting_Account };\n            var panel = new StackPanel()\n            {\n                Spacing = 5,\n                Children =\n                {\n                    ui,\n                    net,\n                    launch,\n                    other,\n                    accounts\n                }\n            };\n            var cr = await ShowDialogAsync(MainLang.Export, MainLang.ExportSettingTip, panel, b_primary: MainLang.Ok,\n                b_cancel: MainLang.Cancel);\n            if (cr != ContentDialogResult.Primary) return;\n            var hex = Public.Module.App.Setting.Export(ui.IsChecked ?? false, net.IsChecked ?? false,\n                launch.IsChecked ?? false,\n                other.IsChecked ?? false, accounts.IsChecked ?? false);\n            var cr1 = await ShowDialogAsync(MainLang.ExportSuccess, \"ヾ(•ω•`)o\",\n                b_primary: MainLang.CopyToClipBoard, b_secondary: MainLang.SaveAs, b_cancel: MainLang.Ok);\n            if (cr1 == ContentDialogResult.Primary)\n            {\n                var clipboard = TopLevel.GetTopLevel(this)?.Clipboard;\n                await clipboard.SetTextAsync(hex);\n            }\n\n            if (cr1 == ContentDialogResult.Secondary)\n            {\n                var path = (await TopLevel.GetTopLevel(YMCL.App.UiRoot).StorageProvider.SaveFilePickerAsync(\n                    new FilePickerSaveOptions\n                    {\n                        Title = MainLang.Export,\n                        SuggestedFileName = $\"YMCL.Setting.Export.DaiYu\",\n                        FileTypeChoices =\n                        [\n                            new FilePickerFileType(\"DaiYu File\") { Patterns = [\"*.DaiYu\"] }\n                        ]\n                    }))?.Path.LocalPath;\n                if (string.IsNullOrWhiteSpace(path)) return;\n                await File.WriteAllTextAsync(path, hex);\n                Notice(MainLang.ExportSuccess, NotificationType.Success);\n            }\n        };\n        ImportButton.Click += async (_, _) =>\n        {\n            var cr = await ShowDialogAsync(MainLang.Import, \"ヾ(•ω•`)o\",\n                b_primary: MainLang.ReadClipBoard,\n                b_secondary: MainLang.OpenFile,\n                b_cancel: MainLang.Cancel);\n            var hex = string.Empty;\n            if (cr == ContentDialogResult.None) return;\n            if (cr == ContentDialogResult.Primary)\n            {\n                var clipboard = TopLevel.GetTopLevel(this)?.Clipboard;\n                hex = await clipboard.GetTextAsync();\n            }\n\n            if (cr == ContentDialogResult.Secondary)\n            {\n                var files = await TopLevel.GetTopLevel(this).StorageProvider.OpenFilePickerAsync(\n                    new FilePickerOpenOptions\n                    {\n                        AllowMultiple = false, Title = MainLang.OpenFile, FileTypeFilter =\n                        [\n                            new FilePickerFileType(\"DaiYu File\")\n                            {\n                                Patterns =\n                                [\n                                    \"*.DaiYu\"\n                                ]\n                            }\n                        ]\n                    });\n                if (files.Count == 0) return;\n                hex = await File.ReadAllTextAsync(files[0].Path.LocalPath);\n            }\n\n            if (string.IsNullOrWhiteSpace(hex))\n            {\n                Notice(MainLang.ImportFailed, NotificationType.Error);\n                return;\n            }\n\n            var info = Public.Module.App.Setting.Import(hex);\n            if (!info.success || info.data == null)\n            {\n                Notice(MainLang.ImportFailed, NotificationType.Error);\n                return;\n            }\n\n\n            var data = JsonConvert.DeserializeObject<ExchangeSettingEntry.Data>(JsonConvert.SerializeObject(info.data));\n            if (data.UiSettings != null)\n            {\n                data.UiSettings.WindowBackGroundImgData = \" ( ...... ) \";\n            }\n\n            if (data.AccountSettings != null)\n            {\n                foreach (var a in data.AccountSettings)\n                {\n                    a.Skin = \" ( ...... ) \";\n                    a.Data = \" ( ...... ) \";\n                }\n            }\n\n            var cr1 = await ShowDialogAsync(MainLang.Import,\n                JsonConvert.SerializeObject(data, Formatting.Indented), b_primary: MainLang.Import,\n                b_cancel: MainLang.Cancel);\n            if (cr1 != ContentDialogResult.Primary) return;\n            Public.Module.App.Setting.Replace(Data.SettingEntry, info.data);\n        };\n        UrlSchemeButton.Click += async (_, _) =>\n        {\n            try\n            {\n                if (!await Permission.TryToUpgradePermission())\n                {\n                    Notice(MainLang.UpgradeToAdministratorPrivilegesFail, NotificationType.Error);\n                    return;\n                }\n                var keyRoot = Registry.ClassesRoot.CreateSubKey(\"YMCL\", true);\n                keyRoot.SetValue(\"\", \"Yu Minecraft Launcher\");\n                keyRoot.SetValue(\"URL Protocol\", ConfigPath.LauncherClPath);\n                var a = Registry.ClassesRoot.OpenSubKey(\"YMCL\", true).CreateSubKey(\"DefaultIcon\");\n                a.SetValue(\"\", ConfigPath.LauncherClPath);\n                var b = Registry.ClassesRoot.OpenSubKey(\"YMCL\", true).CreateSubKey(@\"shell\\open\\command\");\n                b.SetValue(\"\", $\"\\\"{ConfigPath.LauncherClPath}\\\" \\\"%1\\\"\");\n                await File.WriteAllTextAsync(ConfigPath.LauncherClPath, \"set /p ymcl=<%USERPROFILE%\\\\AppData\\\\Roaming\\\\DaiYu.Platform.YMCL\\\\YMCL.AppPath.DaiYu\\r\\necho %ymcl%\\r\\necho %1\\r\\nstart %ymcl% %1\");\n                Notice(MainLang.OperateSuccess, NotificationType.Success);\n            }\n            catch (Exception e)\n            {\n                Console.WriteLine(e);\n                Notice(MainLang.OperateFailed, NotificationType.Error);\n            }\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Personalize.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.SettingPages.Personalize\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:colorPicker=\"clr-namespace:Semi.Avalonia.ColorPicker;assembly=Semi.Avalonia.ColorPicker\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:data=\"clr-namespace:YMCL.Public.Classes.Data\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:settingPages=\"clr-namespace:YMCL.Views.Main.Pages.SettingPages\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <UserControl.Resources>\n        <converter:DoubleToPercentageConverter x:Key=\"DoubleToPercentageConverter\" />\n        <converter:SpecialControlEnableListConverter x:Key=\"SpecialControlEnableListConverter\" />\n        <converter:ListDistinctConverter x:Key=\"ListDistinctConverter\" />\n        <converter:BoolReversalConverter x:Key=\"BoolReversalConverter\" />\n        <converter:EnumIndexToBoolConverter x:Key=\"EnumIndexToBoolConverter\" />\n    </UserControl.Resources>\n    <ScrollViewer>\n        <StackPanel Margin=\"10,0,10,10\" Spacing=\"10\">\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Name=\"ColorPickerRoot\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Name=\"ColorPickerLabel\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ThemeColor}\"\n                        VerticalAlignment=\"Center\" />\n                    <ColorPicker\n                        Color=\"{Binding SettingEntry.AccentColor}\"\n                        ColorSpectrumShape=\"Box\"\n                        HorizontalAlignment=\"Stretch\"\n                        Name=\"ColorPicker\"\n                        Theme=\"{DynamicResource HexColorPicker}\"\n                        Width=\"{x:Static x:Double.NaN}\">\n                        <ColorPicker.Styles>\n                            <Style Selector=\"DropDownButton\">\n                                <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                            </Style>\n                        </ColorPicker.Styles>\n                    </ColorPicker>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Language}\"\n                        VerticalAlignment=\"Center\" />\n                    <ComboBox\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        ItemsSource=\"{Binding Langs}\"\n                        SelectedItem=\"{Binding SettingEntry.Language}\"\n                        x:Name=\"LanguageComboBox\">\n                        <ComboBox.ItemTemplate>\n                            <DataTemplate DataType=\"data:Language\">\n                                <TextBlock>\n                                    <Run Text=\"[\" />\n                                    <Run Text=\"{Binding Code}\" />\n                                    <Run Text=\"]\" />\n                                    <Run Text=\"{Binding Label}\" />\n                                </TextBlock>\n                            </DataTemplate>\n                        </ComboBox.ItemTemplate>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.ColorMode}\"\n                        VerticalAlignment=\"Center\" />\n                    <ComboBox\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        SelectedIndex=\"{Binding SettingEntry.Theme}\"\n                        x:Name=\"ThemeComboBox\">\n                        <ComboBox.Items>\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.FollowSystem}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Light}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Dark}\" />\n                        </ComboBox.Items>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <StackPanel Margin=\"0,5\" Spacing=\"7\">\n                    <DockPanel>\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CustomBackground}\"\n                            VerticalAlignment=\"Center\" />\n                        <Button\n                            Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.SelectImgFile}\"\n                            DockPanel.Dock=\"Right\"\n                            IsVisible=\"{Binding SettingEntry.CustomBackGround, Converter={StaticResource EnumIndexToBoolConverter}, ConverterParameter=1}\"\n                            Margin=\"5,0,0,0\"\n                            Name=\"EditCustomBackGroundImgBtn\" />\n                        <ComboBox\n                            DockPanel.Dock=\"Left\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            HorizontalAlignment=\"Stretch\"\n                            SelectedIndex=\"{Binding SettingEntry.CustomBackGround}\"\n                            x:Name=\"CustomBackGroundImgComboBox\">\n                            <ComboBox.Items>\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Default}\" />\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.BackGroundImg}\" />\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AcrylicBlur}\" />\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Transparent}\" />\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Mica}\" />\n                            </ComboBox.Items>\n                        </ComboBox>\n                    </DockPanel>\n                    <DockPanel>\n                        <DockPanel.IsVisible>\n                            <MultiBinding Converter=\"{StaticResource BoolReversalConverter}\">\n                                <Binding\n                                    Converter=\"{StaticResource EnumIndexToBoolConverter}\"\n                                    ConverterParameter=\"0\"\n                                    Path=\"SettingEntry.CustomBackGround\" />\n                            </MultiBinding>\n                        </DockPanel.IsVisible>\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.TranslucentBackgroundOpacity}\"\n                            VerticalAlignment=\"Center\" />\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"6.5,0,6.5,0\"\n                            Text=\"{Binding SettingEntry.TranslucentBackgroundOpacity, Converter={StaticResource DoubleToPercentageConverter}}\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\"\n                            Width=\"60\" />\n                        <Slider\n                            Margin=\"0,0,0,0\"\n                            Maximum=\"1\"\n                            Minimum=\"0.2\"\n                            Value=\"{Binding SettingEntry.TranslucentBackgroundOpacity}\"\n                            VerticalAlignment=\"Center\" />\n                    </DockPanel>\n                    <DockPanel>\n                        <DockPanel.IsVisible>\n                            <MultiBinding Converter=\"{StaticResource BoolReversalConverter}\">\n                                <Binding\n                                    Converter=\"{StaticResource EnumIndexToBoolConverter}\"\n                                    ConverterParameter=\"0\"\n                                    Path=\"SettingEntry.CustomBackGround\" />\n                            </MultiBinding>\n                            <!--  False  -->\n                        </DockPanel.IsVisible>\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.EnableTranslucentSpecialControlList}\"\n                            VerticalAlignment=\"Center\" />\n                        <u:MultiComboBox\n                            HorizontalAlignment=\"Stretch\"\n                            Margin=\"0,0,0,0\"\n                            Name=\"MultiComboBox\"\n                            SelectedItems=\"{Binding SelectedItems}\"\n                            VerticalAlignment=\"Center\"\n                            Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CurrentListIsEmpty}\"\n                            x:DataType=\"settingPages:Personalize\" />\n                    </DockPanel>\n                </StackPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <StackPanel Margin=\"0,5\" Spacing=\"5\">\n                    <DockPanel>\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CornerRadius}\"\n                            VerticalAlignment=\"Center\" />\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"6.5,0,6.5,0\"\n                            Text=\"{Binding SettingEntry.CornerRadius}\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\"\n                            Width=\"60\" />\n                        <Slider\n                            IsSnapToTickEnabled=\"True\"\n                            Margin=\"0,0,0,0\"\n                            Maximum=\"100\"\n                            Minimum=\"0\"\n                            TickFrequency=\"1\"\n                            Value=\"{Binding SettingEntry.CornerRadius}\"\n                            VerticalAlignment=\"Center\" />\n                    </DockPanel>\n                </StackPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoticeWay}\"\n                        VerticalAlignment=\"Center\" />\n                    <ComboBox\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        Name=\"NotificationComboBox\"\n                        SelectedIndex=\"{Binding SettingEntry.NoticeWay}\">\n                        <ComboBox.Items>\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NotificationBubble}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NotificationCard}\" />\n                        </ComboBox.Items>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Height=\"40\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.EnableIndependencyWindowNotification}\"\n                        VerticalAlignment=\"Center\" />\n                    <ToggleSwitch\n                        FontFamily=\"{DynamicResource Font}\"\n                        Height=\"40\"\n                        HorizontalAlignment=\"Right\"\n                        IsChecked=\"{Binding SettingEntry.EnableIndependencyWindowNotification}\"\n                        Margin=\"0,-10,10,0\"\n                        Name=\"EnableIndependencyWindowNotificationSwitch\"\n                        OffContent=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Off}\"\n                        OnContent=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.On}\" />\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Name=\"LyricRoot\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <StackPanel Margin=\"0,5\" Spacing=\"6\">\n                    <DockPanel>\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Name=\"LyricColorPickerLabel\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeskLyricColor}\"\n                            VerticalAlignment=\"Center\" />\n                        <ColorPicker\n                            Color=\"{Binding SettingEntry.DeskLyricColor}\"\n                            HorizontalAlignment=\"Stretch\"\n                            Name=\"LyricColorPicker\"\n                            Width=\"{x:Static x:Double.NaN}\">\n                            <ColorPicker.Styles>\n                                <Style Selector=\"DropDownButton\">\n                                    <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                                </Style>\n                            </ColorPicker.Styles>\n                        </ColorPicker>\n                    </DockPanel>\n                    <DockPanel>\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeskLyricAlignment}\"\n                            VerticalAlignment=\"Center\" />\n                        <ComboBox\n                            FontFamily=\"{DynamicResource Font}\"\n                            HorizontalAlignment=\"Stretch\"\n                            Name=\"LyricAlignComboBox\"\n                            SelectedIndex=\"{Binding SettingEntry.DeskLyricAlignment}\">\n                            <ComboBox.Items>\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AlignLeft}\" />\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AlignCenter}\" />\n                                <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AlignRight}\" />\n                            </ComboBox.Items>\n                        </ComboBox>\n                    </DockPanel>\n                    <DockPanel Margin=\"0,2,0,0\">\n                        <TextBlock\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"10,0,20,0\"\n                            Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DeskLyricSize}\"\n                            VerticalAlignment=\"Center\" />\n                        <TextBlock\n                            DockPanel.Dock=\"Right\"\n                            FontFamily=\"{DynamicResource Font}\"\n                            FontSize=\"14\"\n                            Margin=\"6.5,0,6.5,0\"\n                            Name=\"LyricSizeSliderText\"\n                            Text=\"{Binding SettingEntry.DeskLyricSize}\"\n                            TextAlignment=\"Center\"\n                            VerticalAlignment=\"Center\"\n                            Width=\"65\" />\n                        <Slider\n                            IsSnapToTickEnabled=\"True\"\n                            Margin=\"0,0,0,0\"\n                            Maximum=\"72\"\n                            Minimum=\"1\"\n                            Name=\"LyricSizeSlider\"\n                            TickFrequency=\"1\"\n                            Value=\"{Binding SettingEntry.DeskLyricSize}\"\n                            VerticalAlignment=\"Center\" />\n                    </DockPanel>\n                </StackPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LauncherVisibility}\"\n                        VerticalAlignment=\"Center\" />\n                    <ComboBox\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        SelectedIndex=\"{Binding SettingEntry.LauncherVisibility}\"\n                        x:Name=\"LauncherVisibilityComboBox\">\n                        <ComboBox.Items>\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AfterLaunchKeepLauncherVisible}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AfterLaunchMakeLauncherMinimize}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AfterLaunchMinimizeAndShowWhenGameExit}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AfterLaunchHideAndShowWhenGameExit}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.AfterLaunchExitLauncher}\" />\n                        </ComboBox.Items>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n            <Border\n                Background=\"{DynamicResource 1x}\"\n                CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                Opacity=\"{DynamicResource MainOpacity}\"\n                Padding=\"6.5\">\n                <DockPanel>\n                    <TextBlock\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        Margin=\"10,0,20,0\"\n                        Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CustomHomePage}\"\n                        VerticalAlignment=\"Center\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Edit}\"\n                        DockPanel.Dock=\"Right\"\n                        IsVisible=\"{Binding SettingEntry.CustomHomePage, Converter={StaticResource EnumIndexToBoolConverter}, ConverterParameter=1}\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"EditCustomHomePageBtn\" />\n                    <Button\n                        Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Refresh}\"\n                        DockPanel.Dock=\"Right\"\n                        Margin=\"5,0,0,0\"\n                        Name=\"RefreshCustomHomePageBtn\">\n                        <Button.IsVisible>\n                            <MultiBinding Converter=\"{StaticResource BoolReversalConverter}\">\n                                <Binding\n                                    Converter=\"{StaticResource EnumIndexToBoolConverter}\"\n                                    ConverterParameter=\"0\"\n                                    Path=\"SettingEntry.CustomBackGround\" />\n                            </MultiBinding>\n                        </Button.IsVisible>\n                    </Button>\n                    <TextBox\n                        DockPanel.Dock=\"Right\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        FontSize=\"14\"\n                        IsVisible=\"{Binding SettingEntry.CustomHomePage, Converter={StaticResource EnumIndexToBoolConverter}, ConverterParameter=2}\"\n                        Margin=\"5,0,0,0\"\n                        MinWidth=\"200\"\n                        Text=\"{Binding SettingEntry.CustomHomePageUrl}\"\n                        VerticalAlignment=\"Center\"\n                        Watermark=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.DownloadUrl}\" />\n                    <ComboBox\n                        DockPanel.Dock=\"Left\"\n                        FontFamily=\"{DynamicResource Font}\"\n                        HorizontalAlignment=\"Stretch\"\n                        MinWidth=\"140\"\n                        SelectedIndex=\"{Binding SettingEntry.CustomHomePage}\"\n                        x:Name=\"CustomHomePageComboBox\">\n                        <ComboBox.Items>\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Off}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.LocalSourceCode}\" />\n                            <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NetworkSource}\" />\n                            <!-- <ComboBoxItem Content=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.CustomHomePageWay_Presetting_JavaNews}\" /> -->\n                        </ComboBox.Items>\n                    </ComboBox>\n                </DockPanel>\n            </Border>\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Personalize.axaml.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Linq;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Input;\nusing Avalonia.Interactivity;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Platform.Storage;\nusing Avalonia.Threading;\nusing YMCL.Public.Langs;\nusing YMCL.Public.Module;\nusing YMCL.Public.Module.App.Init.SubModule;\n\nnamespace YMCL.Views.Main.Pages.SettingPages;\n\npublic partial class Personalize : UserControl\n{\n    public static ObservableCollection<string> SelectedItems { get; } = [];\n\n    public Personalize()\n    {\n        InitializeComponent();\n        EditCustomBackGroundImgBtn.Click += async (_, _) =>\n        {\n            var list = await TopLevel.GetTopLevel(this).StorageProvider.OpenFilePickerAsync(\n                new FilePickerOpenOptions { AllowMultiple = false, FileTypeFilter = [FilePickerFileTypes.ImageAll] });\n            if (list.Count == 0) return;\n            Data.SettingEntry.WindowBackGroundImgData =\n                Public.Module.Value.Converter.BytesToBase64(File.ReadAllBytes(list[0].Path.LocalPath));\n            Public.Module.Ui.Setter.SetBackGround();\n        };\n        EditCustomHomePageBtn.Click += (_, _) =>\n        {\n            var launcher = TopLevel.GetTopLevel(this).Launcher;\n            launcher.LaunchFileInfoAsync(new FileInfo(ConfigPath.CustomHomePageXamlDataPath));\n        };\n        MultiComboBox.ItemsSource = new List<string>\n        {\n            \"ContentDialog\",\n            \"NotificationCard\",\n            \"NotificationBubble\",\n            \"Popup\"\n        };\n        if (!string.IsNullOrWhiteSpace(Data.SettingEntry.SpecialControlEnableTranslucent))\n        {\n            Data.SettingEntry.SpecialControlEnableTranslucent.Split(',').Select(x => x.Trim())\n                .Distinct().ToList().ForEach(x => SelectedItems.Add(x));\n        }\n\n        var isDistinct = false;\n        var debouncer = new Debouncer(() =>\n        {\n            isDistinct = true;\n            Dispatcher.UIThread.Invoke(() =>\n            {\n                SelectedItems.Clear();\n                if (!string.IsNullOrWhiteSpace(Data.SettingEntry.SpecialControlEnableTranslucent))\n                {\n                    Data.SettingEntry.SpecialControlEnableTranslucent.Split(',').Select(x => x.Trim())\n                        .Distinct().ToList().ForEach(x => SelectedItems.Add(x));\n                }\n            });\n            isDistinct = false;\n        }, 10);\n        SelectedItems.CollectionChanged += (_, _) =>\n        {\n            if (isDistinct) return;\n            Data.SettingEntry.SpecialControlEnableTranslucent =\n                SelectedItems.Count == 0 ? \"\" : string.Join(\",\", SelectedItems.Distinct());\n            debouncer.Trigger();\n        };\n        RefreshCustomHomePageBtn.Click += (_, _) => { _ = InitUi.SetCustomHomePage(); };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Plugin.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.SettingPages.Plugin\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:classes=\"clr-namespace:YMCL.Public.Classes\"\n    xmlns:controls=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:operate=\"clr-namespace:YMCL.Public.Classes.Operate\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid>\n        <ScrollViewer>\n            <ItemsControl ItemsSource=\"{Binding IdentifiedPlugins}\" Margin=\"10,0,10,10\">\n                <ItemsControl.ItemsPanel>\n                    <ItemsPanelTemplate>\n                        <VirtualizingStackPanel />\n                    </ItemsPanelTemplate>\n                </ItemsControl.ItemsPanel>\n                <ItemsControl.ItemTemplate>\n                    <DataTemplate DataType=\"operate:PluginInfoEntry\">\n                        <Border\n                            Background=\"{DynamicResource 1x}\"\n                            ClipToBounds=\"True\"\n                            CornerRadius=\"{DynamicResource MainCornerRadius}\"\n                            Margin=\"0,0,0,10\"\n                            Opacity=\"{DynamicResource MainOpacity}\"\n                            Padding=\"10\">\n                            <Grid>\n                                <TextBlock IsVisible=\"False\" Name=\"PluginPath\" />\n                                <ToggleSwitch\n                                    DockPanel.Dock=\"Right\"\n                                    HorizontalAlignment=\"Right\"\n                                    IsChecked=\"{Binding IsEnable}\"\n                                    Margin=\"0,-10,10,0\"\n                                    Name=\"PluginSwitch\"\n                                    OffContent=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Off}\"\n                                    OnContent=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.On}\"\n                                    VerticalAlignment=\"Top\" />\n                                <StackPanel Margin=\"5,0,0,0\">\n                                    <TextBlock\n                                        FontSize=\"18\"\n                                        Margin=\"0,0,0,5\"\n                                        Name=\"PluginName\"\n                                        Text=\"{Binding Plugin.Name}\"\n                                        VerticalAlignment=\"Center\" />\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <TextBlock Text=\" - \" />\n                                        <TextBlock Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Version}\" />\n                                        <TextBlock Text=\": \" />\n                                        <TextBlock\n                                            FontSize=\"14\"\n                                            Name=\"PluginVersion\"\n                                            Text=\"{Binding Plugin.Version}\"\n                                            VerticalAlignment=\"Center\" />\n                                    </StackPanel>\n                                    <StackPanel Orientation=\"Horizontal\">\n                                        <TextBlock Text=\" - \" />\n                                        <TextBlock Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Author}\" />\n                                        <TextBlock Text=\": \" />\n                                        <TextBlock\n                                            FontSize=\"14\"\n                                            Name=\"PluginAuthor\"\n                                            Text=\"{Binding Plugin.Author}\"\n                                            VerticalAlignment=\"Center\" />\n                                    </StackPanel>\n                                    <DockPanel>\n                                        <TextBlock Text=\" - \" />\n                                        <TextBlock Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.Description}\" />\n                                        <TextBlock Text=\": \" />\n                                        <TextBlock\n                                            FontSize=\"14\"\n                                            Margin=\"0,0,10,0\"\n                                            Name=\"PluginDescription\"\n                                            Text=\"{Binding Plugin.Description}\"\n                                            TextWrapping=\"Wrap\"\n                                            VerticalAlignment=\"Center\" />\n                                    </DockPanel>\n                                </StackPanel>\n                            </Grid>\n                        </Border>\n                    </DataTemplate>\n                </ItemsControl.ItemTemplate>\n            </ItemsControl>\n        </ScrollViewer>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"9999\"\n            HorizontalAlignment=\"Center\"\n            Margin=\"0,100,0,0\"\n            Name=\"NoTasksTip\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            Padding=\"10,7\"\n            VerticalAlignment=\"Top\">\n            <TextBlock Foreground=\"{DynamicResource GrayColor}\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoIdentifiedPlugins}\" />\n        </Border>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/SettingPages/Plugin.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\n\nnamespace YMCL.Views.Main.Pages.SettingPages;\n\npublic partial class Plugin : UserControl\n{\n    public Plugin()\n    {\n        InitializeComponent();\n        DataContext = Data.Instance;\n        Data.IdentifiedPlugins.CollectionChanged += (_, _) =>\n        {\n            NoTasksTip.IsVisible = Data.IdentifiedPlugins.Count == 0;\n        };\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Task.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.Main.Pages.Task\"\n    x:DataType=\"da:Data\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:controls=\"clr-namespace:YMCL.Public.Controls\"\n    xmlns:converter=\"clr-namespace:YMCL.Public.Module.Ui.Converter\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:da=\"clr-namespace:YMCL.Public.Const\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:properties=\"clr-namespace:YMCL.Public.Langs\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Grid>\n        <ScrollViewer>\n            <ItemsControl ItemsSource=\"{Binding TaskEntries}\" Margin=\"10\">\n                <ItemsControl.ItemsPanel>\n                    <ItemsPanelTemplate>\n                        <StackPanel Spacing=\"10\" />\n                    </ItemsPanelTemplate>\n                </ItemsControl.ItemsPanel>\n                <ItemsControl.ItemTemplate>\n                    <DataTemplate DataType=\"controls:TaskEntry\">\n                        <ContentControl Content=\"{Binding Model.Instance}\" />\n                    </DataTemplate>\n                </ItemsControl.ItemTemplate>\n            </ItemsControl>\n        </ScrollViewer>\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            CornerRadius=\"9999\"\n            HorizontalAlignment=\"Center\"\n            Margin=\"0,100,0,0\"\n            Name=\"NoTasksTip\"\n            Opacity=\"{DynamicResource MainOpacity}\"\n            Padding=\"10,7\"\n            VerticalAlignment=\"Top\">\n            <TextBlock Foreground=\"{DynamicResource GrayColor}\" Text=\"{Binding Source={x:Static properties:LangHelper.Current}, Path=Resources.NoWorkingTask}\" />\n        </Border>\n    </Grid>\n</UserControl>"
  },
  {
    "path": "YMCL.Main/YMCL/Views/Main/Pages/Task.axaml.cs",
    "content": "﻿using System.Linq;\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing YMCL.Public.Classes;\nusing YMCL.Public.Controls;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Views.Main.Pages;\n\npublic partial class Task : UserControl\n{\n    public Task()\n    {\n        InitializeComponent();\n    }\n\n    public void UpdateTasksTip()\n    {\n        NoTasksTip.IsVisible = !Data.TaskEntries.Any(x => x.IsVisible);\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/Views/NotificationWindow.axaml",
    "content": "<Window\n    CanResize=\"False\"\n    ExtendClientAreaChromeHints=\"NoChrome\"\n    ExtendClientAreaToDecorationsHint=\"False\"\n    FontFamily=\"{DynamicResource Font}\"\n    FontWeight=\"{DynamicResource FontWeight}\"\n    Icon=\"../../../Public/Assets/Icon.Shadow.ico\"\n    IsHitTestVisible=\"True\"\n    MaxHeight=\"96\"\n    MaxWidth=\"312\"\n    MinHeight=\"96\"\n    MinWidth=\"312\"\n    Opacity=\"1\"\n    SystemDecorations=\"None\"\n    Title=\"NotificationWindow\"\n    Topmost=\"True\"\n    WindowStartupLocation=\"Manual\"\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Views.NotificationWindow\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:u=\"https://irihi.tech/ursa\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <Window.Styles>\n        <Style Selector=\"Window\">\n            <Setter Property=\"Background\">\n                <Setter.Value>\n                    <SolidColorBrush Color=\"#00ACFF00\" Opacity=\"0\" />\n                </Setter.Value>\n            </Setter>\n        </Style>\n    </Window.Styles>\n    <Border ClipToBounds=\"True\" CornerRadius=\"8\">\n        <Border\n            Background=\"{DynamicResource 1x}\"\n            BorderBrush=\"{DynamicResource 1x}\"\n            ClipToBounds=\"True\"\n            CornerRadius=\"8\"\n            Opacity=\"0\"\n            x:Name=\"Root\">\n            <DockPanel>\n                <DockPanel\n                    Dock=\"Top\"\n                    Margin=\"7,5,0,0\"\n                    VerticalAlignment=\"Top\">\n                    <Image\n                        DockPanel.Dock=\"Left\"\n                        Height=\"18\"\n                        Margin=\"0,0,5,0\"\n                        Name=\"Icon\"\n                        Source=\"../Public/Assets/Icon.Shadow.ico\"\n                        VerticalAlignment=\"Top\"\n                        Width=\"18\">\n                        <Image.Transitions>\n                            <Transitions>\n                                <DoubleTransition Duration=\"0:0:0.4\" Property=\"Opacity\" />\n                            </Transitions>\n                        </Image.Transitions>\n                    </Image>\n                    <TextBlock DockPanel.Dock=\"Left\" Text=\"Yu Minecraft Launcher\" />\n                    <Button\n                        Classes=\"icon-button\"\n                        Content=\"{DynamicResource Close}\"\n                        HorizontalAlignment=\"Right\"\n                        Margin=\"0,-5,3,0\"\n                        Name=\"CloseButton\"\n                        VerticalAlignment=\"Center\">\n                        <Button.Transitions>\n                            <Transitions>\n                                <DoubleTransition Duration=\"0:0:0.4\" Property=\"Opacity\" />\n                            </Transitions>\n                        </Button.Transitions>\n                    </Button>\n                </DockPanel>\n                <DockPanel Margin=\"0,-7,0,0\">\n                    <Image\n                        Height=\"56\"\n                        HorizontalAlignment=\"Left\"\n                        IsVisible=\"False\"\n                        Margin=\"15,-5,0,0\"\n                        Name=\"Image\"\n                        Source=\"../Public/Assets/Icon.Shadow.ico\"\n                        Width=\"56\">\n                        <Image.Transitions>\n                            <Transitions>\n                                <DoubleTransition Duration=\"0:0:0.4\" Property=\"Opacity\" />\n                            </Transitions>\n                        </Image.Transitions>\n                    </Image>\n                    <DockPanel Margin=\"30,10,0,0\" Name=\"Panel\">\n                        <SelectableTextBlock\n                            DockPanel.Dock=\"Top\"\n                            FontSize=\"16\"\n                            Name=\"TitleTextBlock\"\n                            Text=\"Title\"\n                            TextWrapping=\"Wrap\">\n                            <SelectableTextBlock.Transitions>\n                                <Transitions>\n                                    <DoubleTransition Duration=\"0:0:0.4\" Property=\"Opacity\" />\n                                </Transitions>\n                            </SelectableTextBlock.Transitions>\n                        </SelectableTextBlock>\n                        <ScrollViewer\n                            DockPanel.Dock=\"Bottom\"\n                            Margin=\"0,-2,0,0\"\n                            Name=\"Viewer\">\n                            <SelectableTextBlock\n                                Foreground=\"{DynamicResource GrayColor}\"\n                                Margin=\"2,0,0,0\"\n                                Name=\"MessageTextBlock\"\n                                Text=\"Message\"\n                                TextWrapping=\"Wrap\" />\n                            <ScrollViewer.Transitions>\n                                <Transitions>\n                                    <DoubleTransition Duration=\"0:0:0.4\" Property=\"Opacity\" />\n                                </Transitions>\n                            </ScrollViewer.Transitions>\n                        </ScrollViewer>\n                    </DockPanel>\n                </DockPanel>\n            </DockPanel>\n        </Border>\n    </Border>\n</Window>\n"
  },
  {
    "path": "YMCL.Main/YMCL/Views/NotificationWindow.axaml.cs",
    "content": "using Avalonia;\nusing Avalonia.Animation;\nusing Avalonia.Animation.Easings;\nusing Avalonia.Controls;\nusing Avalonia.Interactivity;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.Media;\nusing Avalonia.Media.Imaging;\nusing Avalonia.Platform;\nusing Avalonia.Threading;\nusing Ursa.Controls;\nusing YMCL.Views.Main;\nusing String = System.String;\n\nnamespace YMCL.Views;\n\npublic partial class NotificationWindow : Window\n{\n    public NotificationWindow(string? title, string? message = null, IImage? icon = null, double time = -1)\n    {\n        InitializeComponent();\n        TitleTextBlock.Text = title ?? \"Title\";\n        MessageTextBlock.Text = message ?? string.Empty;\n        if (icon != null)\n        {\n            Panel.Margin = new Thickness(15, 10, 0, 0);\n            Image.IsVisible = true;\n            Image.Source = icon;\n        }\n\n        CloseButton.ClickMode = ClickMode.Release;\n        CloseButton.Click += (_, _) => { CloseAction(); };\n        Loaded += (_, _) =>\n        {\n            SystemDecorations = SystemDecorations.None;\n            Root.Transitions.Clear();\n            Root.Margin = new Thickness(Root.Bounds.Width, 0, -1 * Root.Bounds.Width, 0);\n            Root.Transitions =\n            [\n                new ThicknessTransition()\n                {\n                    Duration = TimeSpan.FromMilliseconds(300),\n                    Property = MarginProperty,\n                    Easing = new ExponentialEaseOut()\n                },\n                new DoubleTransition()\n                {\n                    Duration = TimeSpan.FromMilliseconds(400),\n                    Property = OpacityProperty,\n                    Easing = new ExponentialEaseOut()\n                }\n            ];\n            Root.Margin = new Thickness(0);\n            Root.Opacity = 1;\n        };\n        var cTimer = new DispatcherTimer\n        {\n            Interval = TimeSpan.FromMilliseconds(time > 0 ? time : 4000)\n        };\n\n        cTimer.Tick += Timer_Tick!;\n        cTimer.Start();\n        return;\n\n        void Timer_Tick(object? sender, EventArgs e)\n        {\n            cTimer.Stop();\n            CloseAction();\n        }\n    }\n\n\n    public NotificationWindow()\n    {\n    }\n\n    protected override void OnLoaded(RoutedEventArgs e)\n    {\n        var screenSize = Screens.Primary.WorkingArea.Size;\n        var windowSize = PixelSize.FromSize(ClientSize, Screens.Primary.Scaling);\n        Root.Opacity = 0;\n\n        Position = new PixelPoint(\n            screenSize.Width - windowSize.Width - 10,\n            screenSize.Height - windowSize.Height - 10);\n\n        base.OnLoaded(e);\n    }\n\n    public async void  CloseAction()\n    {\n        Root.Opacity = 0;\n        Icon.Opacity = 0;\n        Image.Opacity = 0;\n        CloseButton.Opacity = 0;\n        TitleTextBlock.Opacity = 0;\n        Viewer.Opacity = 0;\n        await Task.Delay(450);\n        Close();\n    }\n}"
  },
  {
    "path": "YMCL.Main/YMCL/YMCL.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <LangVersion>latest</LangVersion>\n    <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>\n    <ApplicationIcon>Icon.Shadow.ico</ApplicationIcon>\n    <Authors>yiiko | http://i.yik.at</Authors>\n    <Product>Yu Minecraft Launcher</Product>\n    <Description>Yu Minecraft Launcher</Description>\n    <Title>Yu Minecraft Launcher</Title>\n    <Copyright>yiiko | http://i.yik.at</Copyright>\n    <PackageProjectUrl>http://ymcl.yik.at</PackageProjectUrl>\n    <PackageIcon>Icon.Shadow.png</PackageIcon>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n    <RepositoryUrl>https://github.com/yiikooo/YMCL.Avalonia</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageTags>yiiko;YMCL</PackageTags>\n    <PackageReleaseNotes>Yu Minecraft Launcher</PackageReleaseNotes>\n    <PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <AvaloniaResource Include=\"Assets\\**\" />\n    <AvaloniaResource Include=\"Public\\Assets\\MiSans-Regular.otf\" />\n    <None Remove=\"Public\\Assets\\Icon.png\" />\n    <AvaloniaResource Include=\"Public\\Assets\\Icon.png\" />\n    <None Remove=\"Public\\Assets\\Icon.Shadow.ico\" />\n    <EmbeddedResource Include=\"Public\\Assets\\Icon.Shadow.Embedded.ico\" />\n    <AvaloniaResource Include=\"Public\\Assets\\Icon.Shadow.ico\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"..\\..\\README.md\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n    <None Include=\"..\\..\\Assets\\Icon.Shadow.png\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Afdian.Sdk\" />\n    <PackageReference Include=\"AsyncImageLoader.Avalonia\" />\n    <PackageReference Include=\"Avalonia\" />\n    <PackageReference Include=\"Avalonia.AvaloniaEdit\" />\n    <PackageReference Include=\"Avalonia.Markup.Xaml.Loader\" />\n    <PackageReference Include=\"Avalonia.Themes.Fluent\" />\n    <PackageReference Include=\"Avalonia.Fonts.Inter\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Diagnostics\">\n      <IncludeAssets Condition=\"'$(Configuration)' != 'Debug'\">None</IncludeAssets>\n      <PrivateAssets Condition=\"'$(Configuration)' != 'Debug'\">All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"CommunityToolkit.Mvvm\" />\n    <PackageReference Include=\"CurseForge.APIClient\" />\n    <PackageReference Include=\"F23.StringSimilarity\" />\n    <PackageReference Include=\"FluentAvaloniaUI\" />\n    <PackageReference Include=\"HtmlAgilityPack\" />\n    <PackageReference Include=\"Irihi.Ursa\" />\n    <PackageReference Include=\"Irihi.Ursa.Themes.Semi\" />\n    <PackageReference Include=\"MinecraftLaunch\" />\n    <PackageReference Include=\"MinecraftLaunch.Skin\" />\n    <PackageReference Include=\"Modrinth.Net\" />\n    <PackageReference Include=\"NAudio\" />\n    <PackageReference Include=\"Newtonsoft.Json\" />\n    <PackageReference Include=\"ReactiveUI\" />\n    <PackageReference Include=\"ReactiveUI.Fody\" />\n    <PackageReference Include=\"Semi.Avalonia\" />\n    <PackageReference Include=\"Semi.Avalonia.ColorPicker\" />\n    <PackageReference Include=\"System.Management\" />\n    <PackageReference Include=\"Tomlyn\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <AvaloniaXaml Remove=\"Public\\Texts\\CustomHomePageDefault.axaml\" />\n    <EmbeddedResource Include=\"Public\\Texts\\CustomHomePageDefault.axaml\" />\n    <EmbeddedResource Update=\"Public\\Langs\\MainLang.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>MainLang.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <None Remove=\"Public\\Texts\\DateTime.txt\" />\n    <EmbeddedResource Include=\"Public\\Texts\\DateTime.txt\" />\n    <None Remove=\"Public\\Assets\\McIcons\\crafting_table_front.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\crafting_table_front.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\dirt_path_side.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\dirt_path_side.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\FabricIcon.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\FabricIcon.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\furnace_front.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\furnace_front.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\QuiltIcon.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\QuiltIcon.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\OptiFineIcon.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\OptiFineIcon.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\OptiFabricIcon.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\OptiFabricIcon.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\NeoForgeIcon.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\NeoForgeIcon.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\grass_block_side.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\grass_block_side.png\" />\n    <None Remove=\"Public\\Assets\\McIcons\\ForgeIcon.png\" />\n    <EmbeddedResource Include=\"Public\\Assets\\McIcons\\ForgeIcon.png\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Update=\"Views\\Main\\MainWindow.axaml.cs\">\n      <DependentUpon>MainWindow.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\MainView.axaml.cs\">\n      <DependentUpon>MainView.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Public\\Controls\\TitleBar.axaml.cs\">\n      <DependentUpon>TitleBar.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Public\\Langs\\MainLang.Designer.cs\">\n      <DesignTime>True</DesignTime>\n      <AutoGen>True</AutoGen>\n      <DependentUpon>MainLang.resx</DependentUpon>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\Download.axaml.cs\">\n      <DependentUpon>Download.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\More.axaml.cs\">\n      <DependentUpon>More.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\Music.axaml.cs\">\n      <DependentUpon>Music.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\Setting.axaml.cs\">\n      <DependentUpon>Setting.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Public\\Controls\\Drawers\\MsgHistory.axaml.cs\">\n      <DependentUpon>MsgHistory.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\AutoInstallPages\\InstallableGames.axaml.cs\">\n      <DependentUpon>InstallableGames.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\AutoInstallPages\\InstallPreview.axaml.cs\">\n      <DependentUpon>InstallPreview.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\CurseForge.axaml.cs\">\n      <DependentUpon>CurseForge.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\CurseForgePages\\Fetcher.axaml.cs\">\n      <DependentUpon>CurseForgeFetcher.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\Fetcher.axaml.cs\">\n      <DependentUpon>Fetcher.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\Fetcher.axaml.cs\">\n      <DependentUpon>Fetcher.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\SearchResult.axaml.cs\">\n      <DependentUpon>SearchResult.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\SearchResult.axaml.cs\">\n      <DependentUpon>SearchResult.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\ModFileResult.axaml.cs\">\n      <DependentUpon>ModFileResult.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\ModFileResult.axaml.cs\">\n      <DependentUpon>ModFileResult.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\LogWindow.axaml.cs\">\n      <DependentUpon>LogWindow.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n    <Compile Update=\"Views\\CrashWindow.axaml.cs\">\n      <DependentUpon>CrashWindow.axaml</DependentUpon>\n      <SubType>Code</SubType>\n    </Compile>\n  </ItemGroup>\n\n  <ItemGroup>\n    <UpToDateCheckInput Remove=\"Public\\Controls\\ModFileView\\ModFileView.axaml\" />\n    <UpToDateCheckInput Remove=\"Public\\Controls\\PluginInfo\\PluginInfo.axaml\" />\n    <UpToDateCheckInput Remove=\"Public\\Controls\\UrlImage\\UrlImage.axaml\" />\n    <UpToDateCheckInput Remove=\"Assets\\MiSans-Regular.otf\" />\n    <UpToDateCheckInput Remove=\"Views\\Main\\Drawers\\MsgHistory\\MsgHistory.axaml\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\YMCL.Plugin\\YMCL.Plugin.Base\\YMCL.Plugin.Base.csproj\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <AdditionalFiles Include=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\Fetcher.axaml\" />\n    <AdditionalFiles Include=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\ModFileResult.axaml\" />\n    <AdditionalFiles Include=\"Views\\Main\\Pages\\DownloadPages\\ModrinthPages\\SearchResult.axaml\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Content Include=\"Icon.Shadow.ico\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "YMCL.Main/YMCL.Desktop/Program.cs",
    "content": "﻿using System;\nusing Avalonia;\nusing YMCL.Public.Const;\nusing YMCL.Public.Enum;\n\nnamespace YMCL.Desktop;\n\nsealed class Program\n{\n    // Initialization code. Don't use any Avalonia, third-party APIs or any\n    // SynchronizationContext-reliant code before AppMain is called: things aren't initialized\n    // yet and stuff might break.\n    [STAThread]\n    public static void Main(string[] args)\n    {\n        BuildAvaloniaApp(args).StartWithClassicDesktopLifetime(args);\n    }\n\n    // Avalonia configuration, don't remove; also used by visual designer.\n    public static AppBuilder BuildAvaloniaApp(string[] args)\n    {\n        YMCL.Public.Const.Data.AppArgs = args;\n        ConfigPath.InitPath();\n        return AppBuilder.Configure<App>()\n            .UsePlatformDetect()\n            .WithInterFont()\n            .LogToTrace();\n    }\n}\n"
  },
  {
    "path": "YMCL.Main/YMCL.Desktop/Properties/PublishProfiles/FolderProfile.pubxml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project>\n  <PropertyGroup>\n    <Configuration>Release</Configuration>\n    <Platform>Any CPU</Platform>\n    <PublishDir>bin\\Release\\net8.0\\publish\\win-x64\\</PublishDir>\n    <PublishProtocol>FileSystem</PublishProtocol>\n    <_TargetId>Folder</_TargetId>\n    <TargetFramework>net8.0</TargetFramework>\n    <RuntimeIdentifier>win-x64</RuntimeIdentifier>\n    <SelfContained>true</SelfContained>\n    <PublishSingleFile>true</PublishSingleFile>\n    <PublishReadyToRun>false</PublishReadyToRun>\n    <PublishTrimmed>false</PublishTrimmed>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "YMCL.Main/YMCL.Desktop/YMCL.Desktop.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <!--If you are willing to use Windows/MacOS native APIs you will need to create 3 projects.\n    One for Windows with net8.0-windows TFM, one for MacOS with net8.0-macos and one with net8.0 TFM for Linux.-->\n    <TargetFramework>net8.0</TargetFramework>\n    <Nullable>enable</Nullable>\n    <BuiltInComInteropSupport>true</BuiltInComInteropSupport>\n    <ApplicationIcon>Icon.Shadow.ico</ApplicationIcon>\n    <Authors>yiiko | http://i.yik.at</Authors>\n    <Product>Yu Minecraft Launcher</Product>\n    <Description>Yu Minecraft Launcher</Description>\n    <Title>Yu Minecraft Launcher</Title>\n    <Copyright>yiiko | http://i.yik.at</Copyright>\n    <PackageProjectUrl>http://ymcl.yik.at</PackageProjectUrl>\n    <PackageIcon>Icon.Shadow.png</PackageIcon>\n    <PackageReadmeFile>README.md</PackageReadmeFile>\n    <RepositoryUrl>https://github.com/yiikooo/YMCL.Avalonia</RepositoryUrl>\n    <RepositoryType>git</RepositoryType>\n    <PackageTags>yiiko;YMCL</PackageTags>\n    <PackageReleaseNotes>Yu Minecraft Launcher</PackageReleaseNotes>\n    <PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>\n    <CFBundleName>YMCL</CFBundleName>\n    <CFBundleDisplayName>YMCL</CFBundleDisplayName>\n    <CFBundleIdentifier>fun.daiyu.ymcl</CFBundleIdentifier>\n    <CFBundleVersion>1.0.0</CFBundleVersion>\n    <CFBundlePackageType>AAPL</CFBundlePackageType>\n    <CFBundleSignature>YuMinecraftLauncher</CFBundleSignature>\n    <CFBundleExecutable>YMCL.Desktop</CFBundleExecutable>\n    <CFBundleIconFile>Icon-Border.icns</CFBundleIconFile>\n    <CFBundleShortVersionString>1.0</CFBundleShortVersionString>\n    <NSPrincipalClass>NSApplication</NSPrincipalClass>\n    <NSHighResolutionCapable>true</NSHighResolutionCapable>\n  </PropertyGroup>\n\n  <PropertyGroup>\n    <ApplicationManifest>app.manifest</ApplicationManifest>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Content Include=\"Icon.Shadow.ico\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Include=\"..\\..\\Assets\\Icon.Shadow.png\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n    <None Include=\"..\\..\\README.md\">\n      <Pack>True</Pack>\n      <PackagePath>\\</PackagePath>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Avalonia.Desktop\" />\n    <!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->\n    <PackageReference Include=\"Avalonia.Diagnostics\">\n      <IncludeAssets Condition=\"'$(Configuration)' != 'Debug'\">None</IncludeAssets>\n      <PrivateAssets Condition=\"'$(Configuration)' != 'Debug'\">All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"Dotnet.Bundle\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\YMCL\\YMCL.csproj\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "YMCL.Main/YMCL.Desktop/YMCL.Desktop.desktop",
    "content": "[Desktop Entry]\nType=Application\nName=${APP_FRIENDLY_NAME}\nIcon=${APP_ID}\nComment=${APP_SHORT_SUMMARY}\nExec=${INSTALL_EXEC}\nTryExec=${INSTALL_EXEC}\nNoDisplay=${DESKTOP_NODISPLAY}\nX-AppImage-Integrate=${DESKTOP_INTEGRATE}\nTerminal=${DESKTOP_TERMINAL}\nCategories=${PRIME_CATEGORY};\nMimeType=\nKeywords="
  },
  {
    "path": "YMCL.Main/YMCL.Desktop/YMCL.Desktop.metainfo.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component type=\"desktop-application\">\n    <metadata_license>GPL-3</metadata_license>\n\n    <!-- Note the use of macros to automate most (but not all) content below -->\n    <id>${APP_ID}</id>\n    <name>${APP_FRIENDLY_NAME}</name>\n    <summary>${APP_SHORT_SUMMARY}</summary>\n    <developer_name>${PUBLISHER_NAME}</developer_name>\n    <url type=\"homepage\">${PUBLISHER_LINK_URL}</url>\n    <project_license>${APP_LICENSE_ID}</project_license>\n    <content_rating type=\"oars-1.1\" />\n\n    <launchable type=\"desktop-id\">${APP_ID}.desktop</launchable>\n\n    <description>\n        <!-- See AppDescription in configuration -->\n        ${APPSTREAM_DESCRIPTION_XML}\n        <!--\n        <p>This is a longer application description in the default (English) language\n        which may span several short paragraphs. You may either specify it yourself\n        directly here, or have it populated automatically using the macro above.</p>\n        <p>IMPORTANT. If you wish to provide your own (default) description here, delete the\n        macro directly above. In either case, you may wish to provide other language\n        descriptions here also.</p>\n        -->\n    </description>\n\n    <!-- Freedesktop Categories -->\n    <categories>\n        <category>${PRIME_CATEGORY}</category>\n    </categories>\n\n    <!-- Uncomment to provide keywords\n    <keywords>\n        <keyword translate=\"no\">IDE</keyword>\n        <keyword>development</keyword>\n        <keyword>programming</keyword>\n        <keyword xml:lang=\"de\">entwicklung</keyword>\n        <keyword xml:lang=\"de\">programmierung</keyword>\n    </keywords>\n    -->\n\n    <!-- Uncomment to provide screenshots\n    <screenshots>\n        <screenshot type=\"default\">\n            <image>https://i.postimg.cc/0jc8xxxC/Hello-Computer.png</image>\n        </screenshot>\n    </screenshots>\n    -->\n\n    <releases>\n        <!-- See AppChangeFile in configuration -->\n        ${APPSTREAM_CHANGELOG_XML}\n        <!-- Or, uncomment below and delete macro directly above to specify changes yourself\n        <release version=\"1.0.0\" date=\"2023-05-04\">\n            <description>\n                <ul>\n                    <li>Added feature 1</li>\n                    <li>Added feature 2</li>\n                </ul>\n            </description>\n        </release>\n        -->\n    </releases>\n\n</component>\n"
  },
  {
    "path": "YMCL.Main/YMCL.Desktop/YMCL.Desktop.pupnet.conf",
    "content": "################################################################################\n# PUPNET DEPLOY: 1.8.0\n################################################################################\n\n########################################\n# APP PREAMBLE\n########################################\n\n# Mandatory application base name. This MUST BE the base name of the main executable file. It should NOT\n# include any directory part or extension, i.e. do not append '.exe' or '.dll'. It should not contain\n# spaces or invalid filename characters.\nAppBaseName = YMCL.Desktop\n\n# Mandatory application friendly name.\nAppFriendlyName = \"# Yu Minecraft Launcher\"\n\n# Mandatory application ID in reverse DNS form. This should stay constant for lifetime of the software.\nAppId = DaiYu.YMCL\n\n# Mandatory application version and package release of form: 'VERSION[RELEASE]'. Use optional square\n# brackets to denote package release, i.e. '1.2.3[1]'. Release refers to a change to the deployment\n# package, rather the application. If release part is absent (i.e. '1.2.3'), the release value defaults\n# to '1'. Note that the version-release value given here may be overridden from the command line.\nAppVersionRelease = 1.0.0[1]\n\n# Mandatory single line application summary text in default (English) language.\nAppShortSummary = Yu Minecraft Launcher\n\n# Multi-line (surround with triple \"\"\" quotes) application description which provides longer explanation\n# than AppShortSummary in default language. Optional but it is recommended to specify this. Text\n# separated by an empty line will be treated as separate paragraphs. Avoid complex formatting, and do not\n# use HTML or markdown, other than list items begining with \"* \", \"+ \" or \"- \". This content is\n# used by package builders where supported, including RPM and DEB, and is used to populate the\n# ${APPSTREAM_DESCRIPTION_XML} element used within AppStream metadata.\nAppDescription = \"\"\"\n    Yu Minecraft Launcher\n\"\"\"\n\n# Mandatory application license ID. This should be one of the recognized SPDX license\n# identifiers, such as: 'MIT', 'GPL-3.0-or-later' or 'Apache-2.0'. For a proprietary or\n# custom license, use 'LicenseRef-Proprietary' or 'LicenseRef-LICENSE'.\nAppLicenseId = GPL-3.0-or-later\n\n# Optional path to application copyright/license text file. If provided, it will be packaged with the\n# application and used with package builders where supported.\nAppLicenseFile = \n\n# Optional path to application changelog file. IMPORTANT. If given, this file should contain version\n# information in a predefined format. Namely, it should contain one or more version headings of form:\n# '+ VERSION;DATE', under which are to be listed change items of form: '- Change description'. Formatted\n# information will be parsed and used to expand the ${APPSTREAM_CHANGELOG_XML} macro used\n# for AppStream metadata (superfluous text is ignored, so the file may also contain README information).\n# The given file will also be packaged with the application verbatim. See: https://github.com/kuiperzone/PupNet-Deploy.\nAppChangeFile = \n\n########################################\n# PUBLISHER\n########################################\n\n# Mandatory publisher, group or creator.\nPublisherName = DaiYu\n\n# Optional copyright statement.\nPublisherCopyright = Copyright (C) DaiYu 2026\n\n# Optional publisher or application web-link name. Note that Windows Setup packages\n# require both PublisherLinkName and PublisherLinkUrl in order to include the link as\n# an item in program menu entries. Do not modify name, as may leave old entries in updated installations.\nPublisherLinkName = YMCL 官网\n\n# Publisher or application web-link URL. Although optional, it should be considered mandatory if using\n# MetaFile\nPublisherLinkUrl = https://ymcl.yik.at/\n\n# Publisher or maintainer email contact. Although optional, some package builders (i.e. DEB) require it\n# and may warn or fail unless provided.\nPublisherEmail = 840673183@qq.com\n\n########################################\n# DESKTOP INTEGRATION\n########################################\n\n# Boolean (true or false) which indicates whether the application is hidden on the desktop. It is used to\n# populate the 'NoDisplay' field of the .desktop file. The default is false. Setting to true will also\n# cause the main application start menu entry to be omitted for Windows Setup.\nDesktopNoDisplay = false\n\n# Boolean (true or false) which indicates whether the application runs in the terminal, rather than\n# providing a GUI. It is used to populate the 'Terminal' field of the .desktop file.\nDesktopTerminal = true\n\n# Optional path to a Linux desktop file. If empty (default), one will be generated automatically from\n# the information in this file. Supplying a custom file, however, allows for mime-types and\n# internationalisation. If supplied, the file MUST contain the line: 'Exec=${INSTALL_EXEC}'\n# in order to use the correct install location. Other macros may be used to help automate the content.\n# Note. PupNet Deploy can generate you a desktop file. Use --help and 'pupnet --help macro' for reference.\n# See: https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html\nDesktopFile = YMCL.Desktop.desktop\n\n# Optional command name to start the application from the terminal. If, for example, AppBaseName is\n# 'Zone.Kuiper.HelloWorld', the value here may be set to a simpler and/or lower-case variant such as\n# 'helloworld'. It must not contain spaces or invalid filename characters. Do not add any extension such\n# as '.exe'. If empty, the application will not be in the path and cannot be started from the command line.\n# For Windows Setup packages, see also SetupCommandPrompt. StartCommand is not\n# supported for all packages kinds (i.e. Flatpak). Default is empty (none).\nStartCommand = \n\n# Optional category for the application. The value should be one of the recognized Freedesktop top-level\n# categories, such as: Audio, Development, Game, Office, Utility etc. Only a single value should be\n# provided here which will be used, where supported, to populate metadata. The default is empty.\n# See: https://specifications.freedesktop.org/menu-spec/latest/apa.html\nPrimeCategory = \n\n# Path to AppStream metadata file. It is optional, but recommended as it is used by software centers.\n# Note. The contents of the files may use macro variables. Use 'pupnet --help macro' for reference.\n# See: https://docs.appimage.org/packaging-guide/optional/appstream.html\nMetaFile = YMCL.Desktop.metainfo.xml\n\n# Optional icon file paths. The value may include multiple filenames separated with semicolon or given\n# in multi-line form. Valid types are SVG, PNG and ICO (ICO ignored on Linux). Note that the inclusion\n# of a scalable SVG is preferable on Linux, whereas PNGs must be one of the standard sizes and MUST\n# include the size in the filename in the form: name.32x32.png' or 'name.32.png'.\nIconFiles = ./Icon.svg\n\n########################################\n# DOTNET PUBLISH\n########################################\n\n# Optional path relative to this file in which to find the dotnet project (.csproj) file, or the\n# directory containing it. If empty (default), a single project file is expected under the same\n# directory as this file. IMPORTANT. If set to 'NONE', dotnet publish is disabled\n# (i.e. not called). Instead, only DotnetPostPublish is called.\nDotnetProjectPath = \n\n# Optional arguments supplied to 'dotnet publish'. Do NOT include '-r' (runtime), or '-c' (configuration)\n# here as they will be added according to command line arguments. Typically you want as a minimum:\n# '-p:Version=${APP_VERSION} --self-contained true'. Additional useful arguments include:\n# '-p:DebugType=None -p:DebugSymbols=false -p:PublishSingleFile=true -p:PublishReadyToRun=true\n# -p:PublishTrimmed=true -p:TrimMode=link'. Note. This value may use macro variables. Use 'pupnet --help macro'\n# for reference. See: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish\nDotnetPublishArgs = -p:Version=${APP_VERSION} --self-contained true -p:DebugType=None -p:DebugSymbols=false\n\n# Post-publish (or standalone build) command on Linux (ignored on Windows). It is called after dotnet\n# publish, but before the final output is built. This could, for example, be a script which copies\n# additional files into the build directory given by ${BUILD_APP_BIN}. The working directory will be\n# the location of this file. This value is optional, but becomes mandatory if DotnetProjectPath equals\n# 'NONE'. Note. This value may use macro variables. Additionally, scripts may use these as environment\n# variables. Use 'pupnet --help macro' for reference.\nDotnetPostPublish = \n\n# Post-publish (or standalone build) command on Windows (ignored on Linux). This should perform\n# the equivalent operation, as required, as DotnetPostPublish, but using DOS commands and batch\n# scripts. Multiple commands may be specified, separated by semicolon or given in multi-line form.\n# Note. This value may use macro variables. Additionally, scripts may use these as environment\n# variables. Use 'pupnet --help macro' for reference.\nDotnetPostPublishOnWindows = \n\n########################################\n# PACKAGE OUTPUT\n########################################\n\n# Optional package name (excludes version etc.). If empty, defaults to AppBaseName. However, it is\n# used not only to specify the base output filename, but to identify the application in DEB and RPM\n# packages. You may wish, therefore, to ensure that the value represents a unique name. Naming\n# requirements are strict and must contain only alpha-numeric and '-', '+' and '.' characters.\nPackageName = YMCL.Desktop\n\n# Output directory, or subdirectory relative to this file. It will be created if it does not exist and\n# will contain the final deploy output files. If empty, it defaults to the location of this file.\nOutputDirectory = Deploy/OUT\n\n########################################\n# APPIMAGE OPTIONS\n########################################\n\n# Additional arguments for use with appimagetool. Useful for signing. Default is empty.\nAppImageArgs = \n\n# Boolean (true or false) which sets whether to include the application version in the AppImage filename,\n# i.e. 'HelloWorld-1.2.3-x86_64.AppImage'. Default is false. It is ignored if the output filename is\n# specified at command line.\nAppImageVersionOutput = false\n\n########################################\n# FLATPAK OPTIONS\n########################################\n\n# The runtime platform. Invariably for .NET (inc. Avalonia), this should be 'org.freedesktop.Platform'.\n# Refer: https://docs.flatpak.org/en/latest/available-runtimes.html\nFlatpakPlatformRuntime = org.freedesktop.Platform\n\n# The platform SDK. Invariably for .NET (inc. Avalonia applications) this should be 'org.freedesktop.Sdk'.\n# The SDK must be installed on the build system.\nFlatpakPlatformSdk = org.freedesktop.Sdk\n\n# The platform runtime version. The latest available version may change periodically.\n# Refer to Flatpak documentation.\nFlatpakPlatformVersion = 23.08\n\n# Flatpak manifest 'finish-args' sandbox permissions. Optional, but if empty, the application will have\n# extremely limited access to the host environment. This option may be used to grant required\n# application permissions. Values here should be prefixed with '--' and separated by semicolon or given\n# in multi-line form. Refer: https://docs.flatpak.org/en/latest/sandbox-permissions.html\nFlatpakFinishArgs = \"\"\"\n    --socket=wayland\n    --socket=x11\n    --filesystem=host\n    --share=network\n\"\"\"\n\n# Additional arguments for use with flatpak-builder. Useful for signing. Default is empty.\n# See flatpak-builder --help.\nFlatpakBuilderArgs = \n\n########################################\n# RPM OPTIONS\n########################################\n\n# Boolean (true or false) which specifies whether to build the RPM package with 'AutoReq' equal to yes or no.\n# For dotnet application, the value should typically be false, but see RpmRequires below.\n# Refer: https://rpm-software-management.github.io/rpm/manual/spec.html\nRpmAutoReq = false\n\n# Boolean (true or false) which specifies whether to build the RPM package with 'AutoProv' equal to yes or no.\n# Refer: https://rpm-software-management.github.io/rpm/manual/spec.html\nRpmAutoProv = true\n\n# Optional list of RPM dependencies. The list may include multiple values separated with semicolon or given\n# in multi-line form. If empty, a self-contained dotnet package will successfully run on many (but not all)\n# Linux distros. In some cases, it will be necessary to explicitly specify additional dependencies.\n# Default values are recommended for use with dotnet and RPM packages at the time of writing.\n# For updated information, see: https://learn.microsoft.com/en-us/dotnet/core/install/linux-rhel#dependencies\nRpmRequires = \"\"\"\n    krb5-libs\n    libicu\n    openssl-libs\n    zlib\n\"\"\"\n\n########################################\n# DEBIAN OPTIONS\n########################################\n\n# Optional list of Debian dependencies. The list may include multiple values separated with semicolon or given\n# in multi-line form. If empty, a self-contained dotnet package will successfully run on many (but not all)\n# Linux distros. In some cases, it will be necessary to explicitly specify additional dependencies.\n# Default values are recommended for use with dotnet and Debian packages at the time of writing.\n# For updated information, see: https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu#dependencies\nDebianRecommends = \"\"\"\n    libc6\n    libgcc1\n    libgcc-s1\n    libgssapi-krb5-2\n    libicu\n    libssl\n    libstdc++6\n    libunwind\n    zlib1g\n\"\"\"\n\n########################################\n# WINDOWS SETUP OPTIONS\n########################################\n\n# Optional application group name used as the Start Menu folder and install directory under Program Files.\n# Specifically, it is used to define the InnoSetup DefaultGroupName and DefaultDirName parameters.\n# If empty (default), suitable values are used based on your application.\n# See: https://jrsoftware.org/ishelp/index.php?topic=setup_defaultgroupname\nSetupGroupName = \n\n# Boolean (true or false) which specifies whether the application is to be installed in administrative\n# mode, or per-user. Default is false. See: https://jrsoftware.org/ishelp/topic_admininstallmode.htm\nSetupAdminInstall = false\n\n# Optional command prompt title. The Windows installer will NOT add your application to the path. However,\n# if your package contains a command-line utility, setting this value will ensure that a 'Command Prompt'\n# program menu entry is added (with this title) which, when launched, will open a dedicated command\n# window with your application directory in its path. Default is empty. See also StartCommand.\nSetupCommandPrompt = \n\n# Mandatory value which specifies minimum version of Windows that your software runs on. Windows 8 = 6.2,\n# Windows 10/11 = 10. Default: 10. See: https://jrsoftware.org/ishelp/topic_setup_minversion.htm\nSetupMinWindowsVersion = 10\n\n# Optional name and parameters of the Sign Tool to be used to digitally sign: the installer,\n# uninstaller, and contained exe and dll files. If empty, files will not be signed.\n# See: https://jrsoftware.org/ishelp/topic_setup_signtool.htm\nSetupSignTool = \n\n# Optional suffix for the installer output filename. The default is empty, but you may wish set it to:\n# 'Setup' or similar. This, for example, will output a file of name: HelloWorldSetup-x86_64.exe\n# Ignored if the output filename is specified at command line.\nSetupSuffixOutput = \n\n# Boolean (true or false) which sets whether to include the application version in the setup filename,\n# i.e. 'HelloWorld-1.2.3-x86_64.exe'. Default is false. Ignored if the output filename is specified\n# at command line.\nSetupVersionOutput = false"
  },
  {
    "path": "YMCL.Main/YMCL.Desktop/app.manifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <!-- This manifest is used on Windows only.\n       Don't remove it as it might cause problems with window transparency and embedded controls.\n       For more details visit https://learn.microsoft.com/en-us/windows/win32/sbscs/application-manifests -->\n  <assemblyIdentity version=\"1.0.0.0\" name=\"YMCL.Desktop\"/>\n\n  <compatibility xmlns=\"urn:schemas-microsoft-com:compatibility.v1\">\n    <application>\n      <!-- A list of the Windows versions that this application has been tested on\n           and is designed to work with. Uncomment the appropriate elements\n           and Windows will automatically select the most compatible environment. -->\n\n      <!-- Windows 10 -->\n      <supportedOS Id=\"{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}\" />\n    </application>\n  </compatibility>\n</assembly>\n"
  },
  {
    "path": "YMCL.Plugin/YMCL.Plugin.Base/IPlugin.cs",
    "content": "﻿namespace YMCL.Plugin.Base;\n\npublic interface IPlugin\n{\n    string Name { get; }\n    string Author { get; }\n    string Description { get; }\n    string Version { get; }\n\n    int Execute(bool isEnable);\n}"
  },
  {
    "path": "YMCL.Plugin/YMCL.Plugin.Base/YMCL.Plugin.Base.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <TargetFramework>net8.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n        <RootNamespace>YMCL.PluginBase</RootNamespace>\n    </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "YMCL.Plugin/YMCL.Plugin.Page/ExamplePage.axaml",
    "content": "﻿<UserControl\n    d:DesignHeight=\"450\"\n    d:DesignWidth=\"800\"\n    mc:Ignorable=\"d\"\n    x:Class=\"YMCL.Plugin.Page.ExamplePage\"\n    xmlns=\"https://github.com/avaloniaui\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <ScrollViewer>\n        <StackPanel Margin=\"10\" Spacing=\"5\">\n            <TextBlock Text=\"This a example page\" />\n            <TextBox Name=\"TextBox\" />\n            <Button Click=\"Button_OnClick\" Content=\"Click me\" />\n        </StackPanel>\n    </ScrollViewer>\n</UserControl>\n"
  },
  {
    "path": "YMCL.Plugin/YMCL.Plugin.Page/ExamplePage.axaml.cs",
    "content": "﻿using Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Interactivity;\nusing Avalonia.Markup.Xaml;\n\nnamespace YMCL.Plugin.Page;\n\npublic partial class ExamplePage : UserControl\n{\n    private int _num = 0;\n    public ExamplePage()\n    {\n        InitializeComponent();\n    }\n\n    private void Button_OnClick(object? sender, RoutedEventArgs e)\n    {\n        _num++;\n        TextBox.Text = $\"{_num}\";\n    }\n}"
  },
  {
    "path": "YMCL.Plugin/YMCL.Plugin.Page/Main.cs",
    "content": "﻿using System.Reflection;\nusing Avalonia.Controls;\nusing FluentAvalonia.UI.Controls;\nusing Newtonsoft.Json;\nusing YMCL.Plugin.Base;\nusing YMCL.Public.Classes.Operate;\nusing YMCL.Public.Module.Ui;\nusing YMCL.Public.Plugin;\nusing YMCL.Views.Main;\n\nnamespace YMCL.Plugin.Page;\n\npublic class ExamplePluginWithDependence : IPlugin\n{\n    public string Name => \"Example Plugin With Page\";\n    public string Author => \"DaiYu\";\n    public string Description => \"A example plugin with page for YMCL.\";\n    public string Version => \"1.0.0\";\n    private RegisteredPage _registeredPage;\n    private bool _registered;\n\n    public int Execute(bool isEnable)\n    {\n        if (!_registered)\n        {\n            _registeredPage = App.UiRoot.NavigationView.RegisterPage(new ExamplePage(), \"test\",\n                BuildNavItemContent.Build(\"Example\",\n                    //Icon\n                    \"F1 M 4.951172 20 C 4.625651 20 4.314778 19.933268 4.018555 19.799805 C 3.722331 19.666342 3.461914 19.487305 3.237305 19.262695 C 3.012695 19.038086 2.833659 18.77767 2.700195 18.481445 C 2.566732 18.185221 2.5 17.87435 2.5 17.548828 L 2.5 2.451172 C 2.5 2.125652 2.566732 1.814779 2.700195 1.518555 C 2.833659 1.222332 3.012695 0.961914 3.237305 0.737305 C 3.461914 0.512695 3.722331 0.33366 4.018555 0.200195 C 4.314778 0.066732 4.625651 0 4.951172 0 L 10 0 L 10 5.048828 C 10 5.387371 10.068359 5.704754 10.205078 6.000977 C 10.341797 6.297201 10.524088 6.55599 10.751953 6.777344 C 10.979817 6.998699 11.245117 7.17448 11.547852 7.304688 C 11.850586 7.434896 12.167969 7.5 12.5 7.5 L 17.5 7.5 L 17.5 17.548828 C 17.5 17.87435 17.433268 18.185221 17.299805 18.481445 C 17.16634 18.77767 16.987305 19.038086 16.762695 19.262695 C 16.538086 19.487305 16.277668 19.666342 15.981445 19.799805 C 15.685221 19.933268 15.374349 20 15.048828 20 Z M 12.5 6.25 C 12.324219 6.25 12.15983 6.217448 12.006836 6.152344 C 11.853841 6.08724 11.722005 5.99935 11.611328 5.888672 C 11.50065 5.777995 11.41276 5.646159 11.347656 5.493164 C 11.282552 5.34017 11.25 5.175782 11.25 5 L 11.25 0.361328 L 17.138672 6.25 Z \"));\n            _registered = true;\n        }\n\n        if (isEnable)\n        {\n            _registeredPage.Show();\n        }\n        else\n        {\n            _registeredPage.Hide();\n        }\n\n        return 0;\n    }\n}"
  },
  {
    "path": "YMCL.Plugin/YMCL.Plugin.Page/YMCL.Plugin.Page.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <TargetFramework>net8.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n        <EnableDynamicLoading>true</EnableDynamicLoading>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\..\\YMCL.Main\\YMCL\\YMCL.csproj\" >\n          <Private>false</Private>\n          <ExcludeAssets>runtime</ExcludeAssets>\n      </ProjectReference>\n      <ProjectReference Include=\"..\\YMCL.Plugin.Base\\YMCL.Plugin.Base.csproj\" >\n          <Private>false</Private>\n          <ExcludeAssets>runtime</ExcludeAssets>\n      </ProjectReference>\n    </ItemGroup>\n\n    <ItemGroup>\n      <PackageReference Include=\"Newtonsoft.Json\" >\n          <Private>false</Private>\n          <ExcludeAssets>runtime</ExcludeAssets>\n      </PackageReference>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "YMCL.Plugin/YMCL.Plugin.Simple/Main.cs",
    "content": "﻿using YMCL.Plugin.Base;\n\nnamespace YMCL.Plugin.Example;\n\npublic class ExamplePlugin : IPlugin\n{\n    public string Name => \"Example Plugin\"; \n    public string Author => \"DaiYu\";\n    public string Description => \"A example plugin for YMCL.\";\n    public string Version => \"1.0.0\"; \n\n    public int Execute(bool isEnable)\n    {\n        Console.WriteLine(\"Example plugin loaded successfully !\");\n        return 0;\n    }\n}"
  },
  {
    "path": "YMCL.Plugin/YMCL.Plugin.Simple/YMCL.Plugin.Simple.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n    <PropertyGroup>\n        <TargetFramework>net8.0</TargetFramework>\n        <ImplicitUsings>enable</ImplicitUsings>\n        <Nullable>enable</Nullable>\n        <EnableDynamicLoading>true</EnableDynamicLoading>\n        <RootNamespace>YMCL.Plugin.Example</RootNamespace>\n    </PropertyGroup>\n\n    <ItemGroup>\n      <ProjectReference Include=\"..\\YMCL.Plugin.Base\\YMCL.Plugin.Base.csproj\">\n          <Private>false</Private>\n          <ExcludeAssets>runtime</ExcludeAssets>\n      </ProjectReference>\n    </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "YMCL.Web/css/components.css",
    "content": "/* Button Components */\n.btn {\n  display: inline-flex;\n  align-items: center;\n  gap: var(--spacing-sm);\n  padding: var(--spacing-md) var(--spacing-xl);\n  font-size: var(--font-size-base);\n  font-weight: 500;\n  text-decoration: none;\n  border: none;\n  border-radius: var(--radius-lg);\n  cursor: pointer;\n  transition: all var(--transition-fast);\n  white-space: nowrap;\n}\n\n.btn-icon {\n  width: 18px;\n  height: 18px;\n  stroke-width: 2;\n}\n\n.btn-primary {\n  background-color: var(--primary-color);\n  color: var(--text-inverse);\n  box-shadow: var(--shadow-md);\n}\n\n.btn-primary:hover {\n  background-color: var(--primary-hover);\n  transform: translateY(-1px);\n  box-shadow: var(--shadow-lg);\n  color: var(--text-inverse);\n}\n\n.btn-secondary {\n  background-color: transparent;\n  color: var(--text-primary);\n  border: 2px solid var(--border-color);\n}\n\n.btn-secondary:hover {\n  background-color: var(--bg-tertiary);\n  border-color: var(--border-hover);\n  color: var(--text-primary);\n}\n\n.btn-download {\n  background-color: var(--success-color);\n  color: var(--text-inverse);\n  box-shadow: var(--shadow-md);\n}\n\n.btn-download:hover {\n  background-color: #059669;\n  transform: translateY(-1px);\n  box-shadow: var(--shadow-lg);\n  color: var(--text-inverse);\n}\n\n/* Card Components */\n.feature-card {\n  background-color: var(--bg-card);\n  border-radius: var(--radius-xl);\n  padding: var(--spacing-xl);\n  box-shadow: var(--shadow-sm);\n  border: 1px solid var(--border-color);\n  transition: all var(--transition-normal);\n  height: 100%;\n}\n\n.feature-card:hover {\n  transform: translateY(-4px);\n  box-shadow: var(--shadow-lg);\n}\n\n.feature-card.featured {\n  border-color: var(--primary-color);\n  background: linear-gradient(\n    135deg,\n    rgba(37, 99, 235, 0.05) 0%,\n    var(--bg-card) 100%\n  );\n}\n\n.feature-icon {\n  width: 48px;\n  height: 48px;\n  background-color: var(--primary-color);\n  border-radius: var(--radius-lg);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: var(--spacing-lg);\n}\n\n.feature-icon svg {\n  width: 24px;\n  height: 24px;\n  stroke: var(--text-inverse);\n  stroke-width: 2;\n}\n\n.feature-title {\n  font-size: var(--font-size-xl);\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: var(--spacing-md);\n}\n\n.feature-description {\n  color: var(--text-secondary);\n  margin-bottom: var(--spacing-lg);\n  line-height: 1.6;\n}\n\n.feature-list {\n  list-style: none;\n  padding: 0;\n}\n\n.feature-list li {\n  position: relative;\n  padding-left: var(--spacing-lg);\n  margin-bottom: var(--spacing-sm);\n  color: var(--text-secondary);\n}\n\n.feature-list li::before {\n  content: \"✓\";\n  position: absolute;\n  left: 0;\n  color: var(--success-color);\n  font-weight: 600;\n}\n\n/* Tab Showcase Component */\n.tab-showcase {\n  /* Removed perspective for flat design */\n}\n\n.tab-window {\n  background-color: var(--bg-card);\n  border-radius: var(--radius-xl);\n  box-shadow: var(--shadow-xl);\n  overflow: hidden;\n  /* Removed 3D transforms for flat design */\n  transition: box-shadow var(--transition-slow);\n  max-width: 600px;\n  width: 100%;\n  margin: 0 auto;\n}\n\n.tab-window:hover {\n  box-shadow: var(--shadow-2xl);\n}\n\n.tab-header {\n  background-color: var(--bg-tertiary);\n  padding: var(--spacing-md);\n  border-bottom: 1px solid var(--border-color);\n  display: flex;\n  align-items: center;\n  gap: var(--spacing-md);\n  min-height: 48px;\n  overflow: hidden;\n}\n\n.tab-controls {\n  display: flex;\n  gap: var(--spacing-sm);\n}\n\n.tab-control {\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n}\n\n.tab-control.close {\n  background-color: #ef4444;\n}\n\n.tab-control.minimize {\n  background-color: #f59e0b;\n}\n\n.tab-control.maximize {\n  background-color: #10b981;\n}\n\n.tab-bar {\n  display: flex;\n  gap: var(--spacing-xs);\n  flex: 1;\n  overflow-x: auto;\n  overflow-y: hidden;\n  scrollbar-width: thin;\n  scrollbar-color: #87ceeb #f0f8ff;\n  padding-bottom: 6px;\n  margin-bottom: -6px;\n  min-width: 0;\n  max-width: 100%;\n}\n\n.tab-bar::-webkit-scrollbar {\n  height: 6px;\n}\n\n.tab-bar::-webkit-scrollbar-track {\n  background: #f0f8ff;\n  border-radius: 3px;\n}\n\n.tab-bar::-webkit-scrollbar-thumb {\n  background: linear-gradient(90deg, #87ceeb 0%, #6bb6ff 50%, #4da6ff 100%);\n  border-radius: 3px;\n  border: 1px solid #b3d9ff;\n  transition: all var(--transition-fast);\n}\n\n.tab-bar::-webkit-scrollbar-thumb:hover {\n  background: linear-gradient(90deg, #6bb6ff 0%, #4da6ff 50%, #3399ff 100%);\n  border-color: #99ccff;\n  box-shadow: 0 0 4px rgba(135, 206, 235, 0.4);\n}\n\n.tab-bar::-webkit-scrollbar-corner {\n  background: #f0f8ff;\n}\n\n.tab {\n  display: flex;\n  align-items: center;\n  gap: var(--spacing-sm);\n  padding: var(--spacing-sm) var(--spacing-md);\n  background-color: var(--bg-secondary);\n  border-radius: var(--radius-md);\n  font-size: var(--font-size-sm);\n  color: var(--text-secondary);\n  cursor: pointer;\n  transition: all var(--transition-fast);\n  min-width: 120px;\n  max-width: 200px;\n  flex-shrink: 0;\n  white-space: nowrap;\n}\n\n.tab span {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  flex: 1;\n  min-width: 0;\n}\n\n.tab.active {\n  background-color: var(--bg-card);\n  color: var(--text-primary);\n  box-shadow: var(--shadow-sm);\n}\n\n.tab-icon {\n  width: 14px;\n  height: 14px;\n  stroke-width: 2;\n}\n\n.tab-close {\n  margin-left: var(--spacing-xs);\n  opacity: 0.5;\n  transition: all var(--transition-fast);\n  cursor: pointer;\n  border-radius: 50%;\n  width: 16px;\n  height: 16px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  font-size: 12px;\n  line-height: 1;\n}\n\n.tab-close:hover {\n  opacity: 1;\n  background-color: rgba(239, 68, 68, 0.1);\n  color: #ef4444;\n}\n\n.tab:hover .tab-close {\n  opacity: 1;\n}\n\n/* Tab creation and deletion animations */\n.tab {\n  transition: all var(--transition-normal);\n}\n\n.tab.tab-creating {\n  animation: tabSlideIn 0.3s ease-out;\n}\n\n.tab.tab-closing {\n  animation: tabSlideOut 0.3s ease-in forwards;\n}\n\n@keyframes tabSlideIn {\n  from {\n    opacity: 0;\n    transform: scale(0.8) translateX(-20px);\n    max-width: 0;\n  }\n\n  to {\n    opacity: 1;\n    transform: scale(1) translateX(0);\n    max-width: 200px;\n  }\n}\n\n@keyframes tabSlideOut {\n  from {\n    opacity: 1;\n    transform: scale(1) translateX(0);\n    max-width: 200px;\n  }\n\n  to {\n    opacity: 0;\n    transform: scale(0.8) translateX(-20px);\n    max-width: 0;\n    padding: 0;\n    margin: 0;\n  }\n}\n\n.tab-new {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 32px;\n  height: 32px;\n  background-color: var(--bg-secondary);\n  border-radius: var(--radius-md);\n  color: var(--text-secondary);\n  cursor: pointer;\n  transition: all var(--transition-fast);\n  flex-shrink: 0;\n  margin-left: var(--spacing-sm);\n}\n\n.tab-new:hover {\n  background-color: var(--primary-color);\n  color: var(--text-inverse);\n}\n\n.tab-content {\n  padding: var(--spacing-lg);\n  height: 200px;\n}\n\n.content-area {\n  height: 100%;\n  background-color: var(--bg-secondary);\n  border-radius: var(--radius-md);\n  padding: var(--spacing-md);\n  overflow-y: auto;\n  scrollbar-width: thin;\n  scrollbar-color: #87ceeb #f0f8ff;\n}\n\n.content-area::-webkit-scrollbar {\n  width: 6px;\n}\n\n.content-area::-webkit-scrollbar-track {\n  background: #f0f8ff;\n  border-radius: 3px;\n}\n\n.content-area::-webkit-scrollbar-thumb {\n  background: linear-gradient(180deg, #87ceeb 0%, #6bb6ff 100%);\n  border-radius: 3px;\n  border: 1px solid #b3d9ff;\n  transition: all 0.3s ease;\n}\n\n.content-area::-webkit-scrollbar-thumb:hover {\n  background: linear-gradient(180deg, #6bb6ff 0%, #4da6ff 100%);\n  border-color: #99ccff;\n  box-shadow: 0 0 4px rgba(135, 206, 235, 0.3);\n}\n\n.file-explorer {\n  height: 100%;\n}\n\n.file-tree {\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing-sm);\n}\n\n.file-item {\n  padding: var(--spacing-sm);\n  border-radius: var(--radius-sm);\n  font-size: var(--font-size-sm);\n  color: var(--text-secondary);\n  cursor: pointer;\n  transition: background-color var(--transition-fast);\n}\n\n.file-item:hover {\n  background-color: var(--bg-card);\n}\n\n/* Mirror Selector Components */\n.mirror-selector-container {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: var(--spacing-lg);\n  margin-bottom: 30px;\n  padding: var(--spacing-xl);\n  background-color: var(--bg-card);\n  border-radius: var(--radius-xl);\n  box-shadow: var(--shadow-sm);\n  border: 1px solid var(--border-color);\n}\n\n.mirror-selector-label {\n  font-size: var(--font-size-lg);\n  font-weight: 600;\n  color: var(--text-primary);\n  margin: 0;\n}\n\n.mirror-selector {\n  display: flex;\n  gap: var(--spacing-md);\n  flex-wrap: wrap;\n  justify-content: center;\n  width: 100%;\n}\n\n.mirror-option {\n  position: relative;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n}\n\n.mirror-option input[type=\"radio\"] {\n  position: absolute;\n  opacity: 0;\n  cursor: pointer;\n  width: 0;\n  height: 0;\n}\n\n.mirror-label {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  padding: var(--spacing-md) var(--spacing-lg);\n  background-color: var(--bg-secondary);\n  border: 2px solid var(--border-color);\n  border-radius: var(--radius-lg);\n  color: var(--text-secondary);\n  font-weight: 500;\n  font-size: var(--font-size-base);\n  transition: all var(--transition-fast);\n  cursor: pointer;\n  min-width: 100px;\n  text-align: center;\n}\n\n.mirror-option input[type=\"radio\"]:checked + .mirror-label {\n  background-color: var(--primary-color);\n  color: var(--text-inverse);\n  border-color: var(--primary-color);\n  box-shadow: 0 0 12px rgba(37, 99, 235, 0.3);\n  transform: translateY(-2px);\n}\n\n.mirror-label:hover {\n  border-color: var(--primary-color);\n  background-color: rgba(37, 99, 235, 0.05);\n  transform: translateY(-1px);\n}\n\n.mirror-option input[type=\"radio\"]:checked + .mirror-label:hover {\n  background-color: var(--primary-color);\n  box-shadow: 0 0 16px rgba(37, 99, 235, 0.4);\n}\n\n/* Download Components */\n.download-card {\n  background-color: var(--bg-card);\n  border-radius: var(--radius-xl);\n  padding: var(--spacing-xl);\n  box-shadow: var(--shadow-sm);\n  border: 1px solid var(--border-color);\n  text-align: center;\n  transition: all var(--transition-normal);\n}\n\n.download-card:hover {\n  transform: translateY(-2px);\n  box-shadow: var(--shadow-md);\n}\n\n.download-icon {\n  width: 64px;\n  height: 64px;\n  background-color: var(--primary-color);\n  border-radius: var(--radius-xl);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin: 0 auto var(--spacing-lg);\n}\n\n.download-icon svg {\n  width: 32px;\n  height: 32px;\n  stroke: var(--text-inverse);\n  stroke-width: 1.5;\n}\n\n.download-title {\n  font-size: var(--font-size-xl);\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: var(--spacing-sm);\n}\n\n.download-description {\n  color: var(--text-secondary);\n  margin-bottom: var(--spacing-lg);\n}\n\n.download-options {\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing-md);\n}\n\n.download-select {\n  padding: var(--spacing-md);\n  border: 1px solid var(--border-color);\n  border-radius: var(--radius-md);\n  background-color: var(--bg-card);\n  color: var(--text-primary);\n  font-size: var(--font-size-sm);\n  cursor: pointer;\n  transition: border-color var(--transition-fast);\n  scrollbar-width: thin;\n  scrollbar-color: #87ceeb #f0f8ff;\n}\n\n.download-select:focus {\n  outline: none;\n  border-color: var(--primary-color);\n}\n\n.download-select::-webkit-scrollbar {\n  width: 6px;\n}\n\n.download-select::-webkit-scrollbar-track {\n  background: #f0f8ff;\n  border-radius: 3px;\n}\n\n.download-select::-webkit-scrollbar-thumb {\n  background: linear-gradient(180deg, #87ceeb 0%, #6bb6ff 100%);\n  border-radius: 3px;\n  border: 1px solid #b3d9ff;\n}\n\n.download-select::-webkit-scrollbar-thumb:hover {\n  background: linear-gradient(180deg, #6bb6ff 0%, #4da6ff 100%);\n  border-color: #99ccff;\n}\n\n/* System Requirements */\n.system-requirements {\n  background-color: var(--bg-card);\n  border-radius: var(--radius-xl);\n  padding: var(--spacing-xl);\n  box-shadow: var(--shadow-sm);\n  border: 1px solid var(--border-color);\n}\n\n.system-requirements h3 {\n  text-align: center;\n  margin-bottom: var(--spacing-lg);\n  color: var(--text-primary);\n}\n\n.requirements-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n  gap: var(--spacing-lg);\n}\n\n.requirement-item {\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing-xs);\n}\n\n.requirement-item strong {\n  color: var(--text-primary);\n  font-weight: 600;\n}\n\n.requirement-item span {\n  color: var(--text-secondary);\n}\n\n/* Special Link Styling (with blue underline expanding to full background on hover with glow) */\n.special-link {\n  position: relative;\n  color: #00aaff;\n  text-decoration: none;\n  padding: 2px 4px;\n  transition: all var(--transition-normal);\n  background: linear-gradient(to right, transparent 0%, transparent 100%);\n  background-size: 0% 100%;\n  background-repeat: no-repeat;\n  background-position: left bottom;\n  border-bottom: 2px solid #00aaff;\n}\n\n.special-link:hover {\n  color: var(--text-inverse);\n  border-radius: var(--radius-sm);\n  background: linear-gradient(\n    to right,\n    var(--primary-color) 0%,\n    var(--accent-color) 100%\n  );\n  background-size: 100% 100%;\n  box-shadow: 0 0 20px rgba(37, 99, 235, 0.4);\n  transform: translateY(-1px);\n}\n\n/* Author Link with Glowing Effect */\n.author-link {\n  position: relative;\n  color: #00aaff;\n  text-decoration: none;\n  padding: 4px 8px;\n  transition: all var(--transition-normal);\n  background: linear-gradient(135deg, transparent 0%, transparent 100%);\n  border-bottom: 2px solid #00aaff;\n}\n\n.author-link:hover {\n  color: var(--text-inverse);\n  border-radius: var(--radius-md);\n  background: linear-gradient(\n    135deg,\n    var(--primary-color) 0%,\n    var(--accent-color) 100%\n  );\n  box-shadow: 0 0 20px rgba(37, 99, 235, 0.6), 0 0 40px rgba(37, 99, 235, 0.4),\n    0 0 60px rgba(37, 99, 235, 0.2);\n  transform: translateY(-2px);\n  border-bottom-color: transparent;\n}\n\n/* Tech Stack Components */\n.tech-category {\n  background-color: var(--bg-card);\n  border-radius: var(--radius-xl);\n  padding: var(--spacing-xl);\n  box-shadow: var(--shadow-sm);\n  border: 1px solid var(--border-color);\n}\n\n.tech-category-title {\n  font-size: var(--font-size-lg);\n  font-weight: 600;\n  color: var(--text-primary);\n  margin-bottom: var(--spacing-lg);\n  text-align: center;\n}\n\n.tech-items {\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing-md);\n}\n\n.tech-item {\n  display: flex;\n  flex-direction: column;\n  gap: var(--spacing-xs);\n  padding: var(--spacing-md);\n  background-color: var(--bg-secondary);\n  border-radius: var(--radius-md);\n  transition: all var(--transition-fast);\n}\n\n.tech-item:hover {\n  background-color: var(--bg-tertiary);\n  transform: translateX(4px);\n}\n\n.tech-name {\n  font-weight: 600;\n  color: var(--text-primary);\n  font-size: var(--font-size-base);\n}\n\n.tech-description {\n  color: var(--text-secondary);\n  font-size: var(--font-size-sm);\n}\n\n/* Open Source Info */\n.open-source-info {\n  margin-top: var(--spacing-3xl);\n}\n\n.open-source-card {\n  background-color: var(--bg-card);\n  border-radius: var(--radius-xl);\n  padding: var(--spacing-xl);\n  box-shadow: var(--shadow-sm);\n  border: 1px solid var(--border-color);\n  text-align: center;\n}\n\n.open-source-card h3 {\n  color: var(--text-primary);\n  margin-bottom: var(--spacing-md);\n}\n\n.open-source-card p {\n  color: var(--text-secondary);\n  margin-bottom: var(--spacing-lg);\n}\n\n.open-source-links {\n  display: flex;\n  justify-content: center;\n  gap: var(--spacing-lg);\n  flex-wrap: wrap;\n}\n\n/* Footer Components */\n.footer-brand {\n  display: flex;\n  align-items: center;\n  gap: var(--spacing-sm);\n  margin-bottom: var(--spacing-md);\n}\n\n.footer-logo {\n  width: 32px;\n  height: 32px;\n}\n\n.footer-title {\n  font-size: var(--font-size-xl);\n  font-weight: 600;\n  color: var(--text-inverse);\n}\n\n.footer-description {\n  color: rgba(255, 255, 255, 0.7);\n  line-height: 1.6;\n}\n\n.footer-section-title {\n  font-size: var(--font-size-lg);\n  font-weight: 600;\n  color: var(--text-inverse);\n  margin-bottom: var(--spacing-md);\n}\n\n.footer-links {\n  list-style: none;\n  padding: 0;\n}\n\n.footer-links li {\n  margin-bottom: var(--spacing-sm);\n}\n\n.footer-link {\n  color: rgba(255, 255, 255, 0.7);\n  text-decoration: none;\n  transition: color var(--transition-fast);\n}\n\n.footer-link:hover {\n  color: var(--text-inverse);\n}\n\n.footer-author {\n  color: rgba(255, 255, 255, 0.7);\n  margin-bottom: var(--spacing-sm);\n}\n\n.footer-license {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n.footer-copyright {\n  color: rgba(255, 255, 255, 0.7);\n  font-size: var(--font-size-sm);\n}\n\n.footer-social {\n  display: flex;\n  gap: var(--spacing-md);\n}\n\n.social-link {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 40px;\n  height: 40px;\n  background-color: rgba(255, 255, 255, 0.1);\n  border-radius: var(--radius-lg);\n  color: rgba(255, 255, 255, 0.7);\n  transition: all var(--transition-fast);\n}\n\n.social-link:hover {\n  background-color: var(--primary-color);\n  color: var(--text-inverse);\n  transform: translateY(-2px);\n}\n\n.social-link svg {\n  width: 20px;\n  height: 20px;\n}\n"
  },
  {
    "path": "YMCL.Web/css/google.css",
    "content": "/* cyrillic-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 300;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n\n/* cyrillic */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 300;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n\n/* greek-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 300;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n\n/* greek */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 300;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n    unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n\n/* vietnamese */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 300;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n\n/* latin-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 300;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n/* latin */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 300;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 400;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n\n/* cyrillic */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 400;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n\n/* greek-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 400;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n\n/* greek */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 400;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n    unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n\n/* vietnamese */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 400;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n\n/* latin-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 400;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n/* latin */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 400;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 500;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n\n/* cyrillic */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 500;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n\n/* greek-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 500;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n\n/* greek */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 500;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n    unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n\n/* vietnamese */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 500;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n\n/* latin-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 500;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n/* latin */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 500;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 600;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n\n/* cyrillic */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 600;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n\n/* greek-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 600;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n\n/* greek */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 600;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n    unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n\n/* vietnamese */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 600;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n\n/* latin-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 600;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n/* latin */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 600;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n\n/* cyrillic-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 700;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n    unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n\n/* cyrillic */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 700;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n    unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n\n/* greek-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 700;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n    unicode-range: U+1F00-1FFF;\n}\n\n/* greek */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 700;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n    unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n\n/* vietnamese */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 700;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n    unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n\n/* latin-ext */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 700;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n\n/* latin */\n@font-face {\n    font-family: 'Inter';\n    font-style: normal;\n    font-weight: 700;\n    font-display: swap;\n    src: url(https://gstatic.loli.net/s/inter/v19/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}"
  },
  {
    "path": "YMCL.Web/css/main.css",
    "content": "/* CSS Custom Properties */\n:root {\n  /* Colors */\n  --primary-color: #2563eb;\n  --primary-hover: #1d4ed8;\n  --secondary-color: #64748b;\n  --accent-color: #3b82f6;\n  --success-color: #10b981;\n  --warning-color: #f59e0b;\n  --error-color: #ef4444;\n\n  /* Background Colors */\n  --bg-primary: #ffffff;\n  --bg-secondary: #f8fafc;\n  --bg-tertiary: #f1f5f9;\n  --bg-dark: #0f172a;\n  --bg-card: #ffffff;\n\n  /* Text Colors */\n  --text-primary: #1e293b;\n  --text-secondary: #64748b;\n  --text-muted: #94a3b8;\n  --text-inverse: #ffffff;\n\n  /* Border Colors */\n  --border-color: #e2e8f0;\n  --border-hover: #cbd5e1;\n\n  /* Shadows */\n  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n  --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),\n    0 4px 6px -4px rgb(0 0 0 / 0.1);\n  --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),\n    0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n\n  /* Typography */\n  --font-family: \"Inter\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto,\n    sans-serif;\n  --font-size-xs: 0.75rem;\n  --font-size-sm: 0.875rem;\n  --font-size-base: 1rem;\n  --font-size-lg: 1.125rem;\n  --font-size-xl: 1.25rem;\n  --font-size-2xl: 1.5rem;\n  --font-size-3xl: 1.875rem;\n  --font-size-4xl: 2.25rem;\n  --font-size-5xl: 3rem;\n\n  /* Spacing */\n  --spacing-xs: 0.25rem;\n  --spacing-sm: 0.5rem;\n  --spacing-md: 1rem;\n  --spacing-lg: 1.5rem;\n  --spacing-xl: 2rem;\n  --spacing-2xl: 3rem;\n  --spacing-3xl: 4rem;\n\n  /* Border Radius */\n  --radius-sm: 0.25rem;\n  --radius-md: 0.375rem;\n  --radius-lg: 0.5rem;\n  --radius-xl: 0.75rem;\n  --radius-2xl: 1rem;\n\n  /* Transitions */\n  --transition-fast: 150ms ease-in-out;\n  --transition-normal: 250ms ease-in-out;\n  --transition-slow: 350ms ease-in-out;\n\n  /* Layout */\n  --container-max-width: 1250px;\n  --header-height: 70px;\n}\n\n/* Reset and Base Styles */\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n\nhtml {\n  scroll-behavior: smooth;\n}\n\nbody {\n  font-family: var(--font-family);\n  font-size: var(--font-size-base);\n  line-height: 1.6;\n  color: var(--text-primary);\n  background-color: var(--bg-primary);\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n/* Global Scrollbar Styles - Light Blue Theme */\n* {\n  scrollbar-width: thin;\n  scrollbar-color: #87ceeb #f0f8ff;\n}\n\n/* Webkit Scrollbar Styles */\n*::-webkit-scrollbar {\n  width: 8px;\n  height: 8px;\n}\n\n*::-webkit-scrollbar-track {\n  background: #f0f8ff;\n  border-radius: 4px;\n}\n\n*::-webkit-scrollbar-thumb {\n  background: linear-gradient(180deg, #87ceeb 0%, #6bb6ff 50%, #4da6ff 100%);\n  border-radius: 4px;\n  border: 1px solid #b3d9ff;\n  transition: all 0.3s ease;\n}\n\n*::-webkit-scrollbar-thumb:hover {\n  background: linear-gradient(180deg, #6bb6ff 0%, #4da6ff 50%, #3399ff 100%);\n  border-color: #99ccff;\n  box-shadow: 0 0 6px rgba(135, 206, 235, 0.4);\n}\n\n*::-webkit-scrollbar-thumb:active {\n  background: linear-gradient(180deg, #4da6ff 0%, #3399ff 50%, #2d8cff 100%);\n  border-color: #80bfff;\n}\n\n*::-webkit-scrollbar-corner {\n  background: #f0f8ff;\n}\n\n/* Horizontal Scrollbar */\n*::-webkit-scrollbar:horizontal {\n  height: 8px;\n}\n\n/* Body Scrollbar - Slightly Larger */\nbody::-webkit-scrollbar {\n  width: 12px;\n}\n\nbody::-webkit-scrollbar-track {\n  background: #f0f8ff;\n  border-radius: 6px;\n}\n\nbody::-webkit-scrollbar-thumb {\n  background: linear-gradient(180deg, #87ceeb 0%, #6bb6ff 50%, #4da6ff 100%);\n  border-radius: 6px;\n  border: 2px solid #b3d9ff;\n  transition: all 0.3s ease;\n}\n\nbody::-webkit-scrollbar-thumb:hover {\n  background: linear-gradient(180deg, #6bb6ff 0%, #4da6ff 50%, #3399ff 100%);\n  border-color: #99ccff;\n  box-shadow: 0 0 8px rgba(135, 206, 235, 0.5);\n}\n\n/* Container */\n.container {\n  max-width: var(--container-max-width);\n  margin: 0 auto;\n  padding: 0 var(--spacing-lg);\n}\n\n/* Typography */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-weight: 600;\n  line-height: 1.2;\n  margin-bottom: var(--spacing-md);\n}\n\nh1 {\n  font-size: var(--font-size-4xl);\n}\n\nh2 {\n  font-size: var(--font-size-3xl);\n}\n\nh3 {\n  font-size: var(--font-size-2xl);\n}\n\nh4 {\n  font-size: var(--font-size-xl);\n}\n\np {\n  margin-bottom: var(--spacing-md);\n  color: var(--text-secondary);\n}\n\na {\n  color: var(--primary-color);\n  text-decoration: none;\n  transition: color var(--transition-fast);\n}\n\na:hover {\n  color: var(--primary-hover);\n}\n\n/* Header */\n.header {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: var(--header-height);\n  background-color: rgba(255, 255, 255, 0.95);\n  backdrop-filter: blur(10px);\n  border-bottom: 1px solid var(--border-color);\n  z-index: 1000;\n  transition: all var(--transition-normal);\n}\n\n.nav {\n  height: 100%;\n}\n\n.nav-container {\n  height: 100%;\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n}\n\n.nav-brand {\n  display: flex;\n  margin-left: 30px;\n  align-items: center;\n  gap: var(--spacing-sm);\n  font-weight: 600;\n  font-size: var(--font-size-xl);\n  color: var(--text-primary);\n}\n\n.nav-logo {\n  width: 32px;\n  height: 32px;\n}\n\n.nav-menu {\n  margin-right: 24px;\n  display: flex;\n  align-items: center;\n  gap: var(--spacing-xl);\n}\n\n.nav-link {\n  font-weight: 500;\n  color: var(--text-secondary);\n  transition: color var(--transition-fast);\n}\n\n.nav-link:hover {\n  color: var(--primary-color);\n}\n\n.nav-toggle {\n  margin-right: 10px;\n  display: none;\n  align-items: center;\n  justify-content: center;\n  width: 40px;\n  height: 40px;\n  cursor: pointer;\n  border-radius: var(--radius-md);\n  transition: background-color var(--transition-fast);\n}\n\n.nav-toggle:hover {\n  background-color: var(--bg-tertiary);\n}\n\n.nav-toggle-icon {\n  width: 24px;\n  height: 24px;\n  color: var(--text-primary);\n  transition: all var(--transition-fast);\n}\n\n.nav-toggle-close {\n  display: none;\n}\n\n.nav-toggle.active .nav-toggle-open {\n  display: none;\n}\n\n.nav-toggle.active .nav-toggle-close {\n  display: block;\n}\n\n/* Main Content */\n.main {\n  margin-top: var(--header-height);\n}\n\n/* Hero Section */\n.hero {\n  padding: var(--spacing-3xl) 0;\n  background: linear-gradient(\n    135deg,\n    var(--bg-secondary) 0%,\n    var(--bg-primary) 100%\n  );\n  min-height: 80vh;\n  display: flex;\n  align-items: center;\n}\n\n.hero-content {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: var(--spacing-3xl);\n  align-items: center;\n}\n\n.hero-title {\n  font-size: var(--font-size-5xl);\n  font-weight: 700;\n  color: var(--text-primary);\n  margin-bottom: var(--spacing-lg);\n}\n\n.highlight {\n  color: var(--primary-color);\n  position: relative;\n}\n\n.highlight::after {\n  content: \"\";\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  height: 3px;\n  background: linear-gradient(90deg, var(--primary-color), var(--accent-color));\n  border-radius: var(--radius-sm);\n}\n\n.hero-subtitle {\n  font-size: var(--font-size-lg);\n  color: var(--text-secondary);\n  margin-bottom: var(--spacing-xl);\n  line-height: 1.7;\n}\n\n.hero-actions {\n  display: flex;\n  gap: var(--spacing-lg);\n  flex-wrap: wrap;\n}\n\n/* Sections */\n.section-header {\n  text-align: center;\n  margin-bottom: var(--spacing-3xl);\n}\n\n.section-title {\n  font-size: var(--font-size-3xl);\n  color: var(--text-primary);\n  margin-bottom: var(--spacing-md);\n}\n\n.section-subtitle {\n  font-size: var(--font-size-lg);\n  color: var(--text-secondary);\n  max-width: 600px;\n  margin: 0 auto;\n}\n\n/* Features Section */\n.features {\n  padding: var(--spacing-3xl) 0;\n  background-color: var(--bg-secondary);\n}\n\n.features-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));\n  gap: var(--spacing-xl);\n}\n\n/* Downloads Section */\n.downloads {\n  padding: var(--spacing-3xl) 0;\n  background-color: var(--bg-primary);\n}\n\n.download-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n  gap: var(--spacing-xl);\n  margin-bottom: var(--spacing-3xl);\n}\n\n/* Tech Stack Section */\n.tech-stack {\n  padding: var(--spacing-3xl) 0;\n  background-color: var(--bg-secondary);\n}\n\n.tech-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n  gap: var(--spacing-xl);\n  margin-bottom: var(--spacing-3xl);\n}\n\n/* Footer */\n.footer {\n  background-color: #2e3b5b;\n  color: var(--text-inverse);\n  padding: var(--spacing-3xl) 0 var(--spacing-xl);\n}\n\n.footer-content {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n  gap: var(--spacing-xl);\n  margin-bottom: var(--spacing-xl);\n}\n\n.footer-bottom {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  padding-top: var(--spacing-xl);\n  border-top: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n.hero-visual {\n  user-select: none;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n.logo-showcase {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 100%;\n  max-width: 500px;\n}\n\n.hero-logo {\n  width: 100%;\n  height: auto;\n  max-width: 500px;\n  filter: drop-shadow(0 20px 25px rgba(0, 0, 0, 0.1))\n    drop-shadow(0 8px 10px rgba(0, 0, 0, 0.06));\n  transition: all var(--transition-normal);\n}\n"
  },
  {
    "path": "YMCL.Web/css/responsive.css",
    "content": "/* Responsive Design */\n\n/* Large Desktop (1200px and up) */\n@media (min-width: 1200px) {\n    .container {\n        padding: 0 var(--spacing-2xl);\n    }\n\n    .hero-title {\n        font-size: 4rem;\n    }\n\n    .features-grid {\n        grid-template-columns: repeat(3, 1fr);\n    }\n\n    .download-grid {\n        grid-template-columns: repeat(3, 1fr);\n    }\n\n    .tech-grid {\n        grid-template-columns: repeat(3, 1fr);\n    }\n}\n\n/* Desktop Large (1129px to 1199px) */\n@media (max-width: 1199px) and (min-width: 1129px) {\n    .hero-title {\n        font-size: 3.5rem;\n    }\n\n    .features-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n\n    .download-grid {\n        grid-template-columns: repeat(3, 1fr);\n    }\n\n    .tech-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n}\n\n/* Desktop Medium (601px to 1128px) */\n@media (max-width: 1128px) and (min-width: 601px) {\n    .container {\n        padding: 0 var(--spacing-lg);\n    }\n\n    .hero-content {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-2xl);\n        text-align: center;\n    }\n\n    .hero-title {\n        font-size: 3rem;\n    }\n\n    .hero-actions {\n        justify-content: center;\n    }\n\n    .features-grid {\n        grid-template-columns: repeat(2, 1fr);\n        gap: var(--spacing-lg);\n    }\n\n    .download-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n\n    .tech-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n\n    .footer-content {\n        grid-template-columns: repeat(2, 1fr);\n    }\n\n    .footer-bottom {\n        flex-direction: column;\n        gap: var(--spacing-md);\n        text-align: center;\n    }\n\n    .tab-window {\n        transform: none;\n        max-width: 500px;\n    }\n\n    .tab-window:hover {\n        transform: none;\n    }\n}\n\n/* Mobile and Tablet (up to 600px) */\n@media (max-width: 600px) {\n    .container {\n        padding: 0 var(--spacing-md);\n    }\n\n    .hero {\n        padding: var(--spacing-2xl) 0;\n        min-height: 70vh;\n    }\n\n    .hero-content {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-xl);\n        text-align: center;\n    }\n\n    .hero-title {\n        font-size: 2.5rem;\n        line-height: 1.1;\n    }\n\n    .hero-subtitle {\n        font-size: var(--font-size-base);\n    }\n\n    .hero-actions {\n        flex-direction: column;\n        align-items: center;\n        gap: var(--spacing-md);\n    }\n\n    .btn {\n        width: 100%;\n        max-width: 280px;\n        justify-content: center;\n    }\n\n    .nav-menu {\n        display: none;\n    }\n\n    .nav-toggle {\n        display: flex;\n    }\n\n    .features-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-lg);\n    }\n\n    .download-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-lg);\n    }\n\n    .tech-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-lg);\n    }\n\n    .requirements-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-md);\n    }\n\n    .footer-content {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-xl);\n        text-align: center;\n    }\n\n    .footer-bottom {\n        flex-direction: column;\n        gap: var(--spacing-md);\n        text-align: center;\n    }\n\n    .open-source-links {\n        flex-direction: column;\n        align-items: center;\n    }\n\n    .tab-window {\n        transform: none;\n        max-width: 400px;\n    }\n\n    .tab-window:hover {\n        transform: none;\n    }\n\n    .tab-bar {\n        flex-wrap: wrap;\n        gap: var(--spacing-xs);\n    }\n\n    .tab {\n        font-size: var(--font-size-xs);\n        padding: var(--spacing-xs) var(--spacing-sm);\n    }\n\n    .tab span {\n        display: none;\n    }\n\n    .tab.active span {\n        display: inline;\n    }\n\n    .section-title {\n        font-size: var(--font-size-2xl);\n    }\n\n    .section-subtitle {\n        font-size: var(--font-size-base);\n    }\n}\n\n/* Mobile Large (400px to 575px) */\n@media (max-width: 575px) and (min-width: 400px) {\n    .container {\n        padding: 0 var(--spacing-md);\n    }\n\n    .hero {\n        padding: var(--spacing-2xl) 0;\n        min-height: 70vh;\n    }\n\n    .hero-content {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-xl);\n        text-align: center;\n    }\n\n    .hero-title {\n        font-size: 2.5rem;\n        line-height: 1.1;\n    }\n\n    .hero-subtitle {\n        font-size: var(--font-size-base);\n    }\n\n    .hero-actions {\n        flex-direction: column;\n        align-items: center;\n        gap: var(--spacing-md);\n    }\n\n    .btn {\n        width: 100%;\n        max-width: 280px;\n        justify-content: center;\n    }\n\n    .nav-menu {\n        display: none;\n    }\n\n    .nav-toggle {\n        display: flex;\n    }\n\n    .features-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-lg);\n    }\n\n    .download-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-lg);\n    }\n\n    .tech-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-lg);\n    }\n\n    .requirements-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-md);\n    }\n\n    .footer-content {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-xl);\n        text-align: center;\n    }\n\n    .footer-bottom {\n        flex-direction: column;\n        gap: var(--spacing-md);\n        text-align: center;\n    }\n\n    .open-source-links {\n        flex-direction: column;\n        align-items: center;\n    }\n\n    .tab-window {\n        transform: none;\n        max-width: 400px;\n    }\n\n    .tab-window:hover {\n        transform: none;\n    }\n\n    .tab-bar {\n        flex-wrap: wrap;\n        gap: var(--spacing-xs);\n    }\n\n    .tab {\n        font-size: var(--font-size-xs);\n        padding: var(--spacing-xs) var(--spacing-sm);\n    }\n\n    .tab span {\n        display: none;\n    }\n\n    .tab.active span {\n        display: inline;\n    }\n\n    .section-title {\n        font-size: var(--font-size-2xl);\n    }\n\n    .section-subtitle {\n        font-size: var(--font-size-base);\n    }\n}\n\n/* Mobile Small (up to 399px) */\n@media (max-width: 399px) {\n    .container {\n        padding: 0 var(--spacing-md);\n    }\n\n    .hero {\n        padding: var(--spacing-xl) 0;\n        min-height: 60vh;\n    }\n\n    .hero-content {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-lg);\n        text-align: center;\n    }\n\n    .hero-title {\n        font-size: 2rem;\n        line-height: 1.1;\n    }\n\n    .hero-subtitle {\n        font-size: var(--font-size-sm);\n    }\n\n    .hero-actions {\n        flex-direction: column;\n        align-items: center;\n        gap: var(--spacing-sm);\n    }\n\n    .btn {\n        width: 100%;\n        justify-content: center;\n        padding: var(--spacing-md) var(--spacing-lg);\n    }\n\n    .nav-container {\n        padding: 0 var(--spacing-md);\n    }\n\n    .nav-brand {\n        font-size: var(--font-size-lg);\n    }\n\n    .nav-logo {\n        width: 28px;\n        height: 28px;\n    }\n\n    .nav-menu {\n        display: none;\n    }\n\n    .nav-toggle {\n        display: flex;\n    }\n\n    .features {\n        padding: var(--spacing-2xl) 0;\n    }\n\n    .downloads {\n        padding: var(--spacing-2xl) 0;\n    }\n\n    .tech-stack {\n        padding: var(--spacing-2xl) 0;\n    }\n\n    .features-grid,\n    .download-grid,\n    .tech-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-md);\n    }\n\n    .feature-card,\n    .download-card,\n    .tech-category {\n        padding: var(--spacing-lg);\n    }\n\n    .requirements-grid {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-sm);\n    }\n\n    .footer {\n        padding: var(--spacing-2xl) 0 var(--spacing-lg);\n    }\n\n    .footer-content {\n        grid-template-columns: 1fr;\n        gap: var(--spacing-lg);\n        text-align: center;\n    }\n\n    .footer-bottom {\n        flex-direction: column;\n        gap: var(--spacing-sm);\n        text-align: center;\n    }\n\n    .open-source-links {\n        flex-direction: column;\n        align-items: center;\n        gap: var(--spacing-sm);\n    }\n\n    .tab-content {\n        padding: var(--spacing-md);\n        height: 150px;\n    }\n\n    .tab-window {\n        max-width: 320px;\n    }\n\n    .tab-bar {\n        flex-wrap: wrap;\n        gap: 2px;\n    }\n\n    .tab {\n        font-size: var(--font-size-xs);\n        padding: 4px 8px;\n        min-width: auto;\n    }\n\n    .tab span {\n        display: none;\n    }\n\n    .tab.active span {\n        display: inline;\n        max-width: 60px;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n    }\n\n    .tab-icon {\n        width: 12px;\n        height: 12px;\n    }\n\n    .section-header {\n        margin-bottom: var(--spacing-2xl);\n    }\n\n    .section-title {\n        font-size: var(--font-size-xl);\n    }\n\n    .section-subtitle {\n        font-size: var(--font-size-sm);\n    }\n\n    .download-options {\n        gap: var(--spacing-sm);\n    }\n\n    .download-select {\n        font-size: var(--font-size-xs);\n        padding: var(--spacing-sm);\n    }\n}\n\n/* Mobile Navigation */\n@media (max-width: 600px) {\n    .nav-menu {\n        display: none;\n    }\n\n    .nav-menu.active {\n        display: flex;\n        position: fixed;\n        top: var(--header-height);\n        left: 0;\n        right: 0;\n        height: calc(100vh - var(--header-height));\n        background-color: var(--bg-card);\n        border-top: 1px solid var(--border-color);\n        flex-direction: column;\n        justify-content: flex-start;\n        align-items: stretch;\n        padding: var(--spacing-xl);\n        gap: var(--spacing-lg);\n        box-shadow: var(--shadow-lg);\n        z-index: 999;\n        overflow-y: auto;\n        animation: slideDown 0.3s ease-out;\n        scrollbar-width: thin;\n        scrollbar-color: #87ceeb #f0f8ff;\n    }\n\n    .nav-menu.active::-webkit-scrollbar {\n        width: 8px;\n    }\n\n    .nav-menu.active::-webkit-scrollbar-track {\n        background: #f0f8ff;\n        border-radius: 4px;\n    }\n\n    .nav-menu.active::-webkit-scrollbar-thumb {\n        background: linear-gradient(180deg, #87ceeb 0%, #6bb6ff 50%, #4da6ff 100%);\n        border-radius: 4px;\n        border: 1px solid #b3d9ff;\n        transition: all 0.3s ease;\n    }\n\n    .nav-menu.active::-webkit-scrollbar-thumb:hover {\n        background: linear-gradient(180deg, #6bb6ff 0%, #4da6ff 50%, #3399ff 100%);\n        border-color: #99ccff;\n        box-shadow: 0 0 6px rgba(135, 206, 235, 0.4);\n    }\n\n    @keyframes slideDown {\n        from {\n            transform: translateY(-100%);\n            opacity: 0;\n        }\n\n        to {\n            transform: translateY(0);\n            opacity: 1;\n        }\n    }\n\n    .nav-menu.active .nav-link {\n        font-size: var(--font-size-lg);\n        padding: var(--spacing-md) 0;\n        border-bottom: 1px solid var(--border-color);\n        text-align: center;\n        transition: all var(--transition-fast);\n    }\n\n    .nav-menu.active .nav-link:last-child {\n        border-bottom: none;\n    }\n\n    .nav-menu.active .nav-link:hover {\n        background-color: var(--bg-secondary);\n        color: var(--primary-color);\n        transform: translateX(4px);\n    }\n\n    .nav-toggle {\n        display: flex;\n    }\n}\n\n/* Print Styles */\n@media print {\n\n    .header,\n    .nav-toggle,\n    .hero-actions,\n    .download-card,\n    .footer {\n        display: none;\n    }\n\n    .main {\n        margin-top: 0;\n    }\n\n    .hero {\n        padding: var(--spacing-lg) 0;\n        min-height: auto;\n    }\n\n    .features,\n    .tech-stack {\n        padding: var(--spacing-lg) 0;\n    }\n\n    .feature-card,\n    .tech-category {\n        break-inside: avoid;\n        box-shadow: none;\n        border: 1px solid var(--border-color);\n    }\n}"
  },
  {
    "path": "YMCL.Web/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"description\" content=\"YMCL - 免费、跨平台、完全开源的 Minecraft 启动器，支持 Mod 管理、自动安装加载器和多账户\">\n    <meta name=\"keywords\" content=\"YMCL, Minecraft, 启动器, 跨平台, .NET, Avalonia, Mod 管理, 开源\">\n    <meta name=\"author\" content=\"yiikooo\">\n\n    <title>YMCL - Yu Minecraft Launcher</title>\n\n    <link rel=\"icon\" type=\"image/svg+xml\" href=\"images/Icon.svg\">\n\n    <!-- CSS Files -->\n    <link rel=\"stylesheet\" href=\"css/main.css\">\n    <link rel=\"stylesheet\" href=\"css/components.css\">\n    <link rel=\"stylesheet\" href=\"css/responsive.css\">\n\n    <!-- Fonts -->\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"css/google.css\" rel=\"stylesheet\">\n\n    <script charset=\"UTF-8\" id=\"LA_COLLECT\" src=\"//sdk.51.la/js-sdk-pro.min.js\"></script>\n    <script>LA.init({ id: \"Kqedlvz2C7T8YuVc\", ck: \"Kqedlvz2C7T8YuVc\", autoTrack: true, hashMode: true })</script>\n    <script defer src=\"https://umami.yik.at/script.js\" data-website-id=\"96330e31-e20f-4db6-b525-decc0d3478d4\"></script>\n    <script defer src=\"https://cloud.umami.is/script.js\"\n        data-website-id=\"57d43297-3528-4c75-959d-9b8e0c4bb0ae\"></script>\n</head>\n\n<body>\n    <!-- Header -->\n    <header class=\"header\">\n        <nav class=\"nav\">\n            <div class=\"nav-container\">\n                <div class=\"nav-brand\">\n                    <span class=\"nav-title\">YMCL</span>\n                </div>\n                <div class=\"nav-menu\">\n                    <a href=\"#features\" class=\"nav-link\">功能特性</a>\n                    <a href=\"#downloads\" class=\"nav-link\">下载</a>\n                    <a href=\"#tech\" class=\"nav-link\">技术栈</a>\n                    <a href=\"https://github.com/yiikooo/YMCL.Avalonia\" class=\"nav-link\" target=\"_blank\">GitHub</a>\n                </div>\n                <div class=\"nav-toggle\">\n                    <svg class=\"nav-toggle-icon nav-toggle-open\" viewBox=\"0 0 640 640\" fill=\"currentColor\">\n                        <path\n                            d=\"M96 160C96 142.3 110.3 128 128 128L512 128C529.7 128 544 142.3 544 160C544 177.7 529.7 192 512 192L128 192C110.3 192 96 177.7 96 160zM96 320C96 302.3 110.3 288 128 288L512 288C529.7 288 544 302.3 544 320C544 337.7 529.7 352 512 352L128 352C110.3 352 96 337.7 96 320zM544 480C544 497.7 529.7 512 512 512L128 512C110.3 512 96 497.7 96 480C96 462.3 110.3 448 128 448L512 448C529.7 448 544 462.3 544 480z\" />\n                    </svg>\n                    <svg class=\"nav-toggle-icon nav-toggle-close\" viewBox=\"0 0 640 640\" fill=\"currentColor\">\n                        <path\n                            d=\"M183.1 137.4C170.6 124.9 150.3 124.9 137.8 137.4C125.3 149.9 125.3 170.2 137.8 182.7L275.2 320L137.9 457.4C125.4 469.9 125.4 490.2 137.9 502.7C150.4 515.2 170.7 515.2 183.2 502.7L320.5 365.3L457.9 502.6C470.4 515.1 490.7 515.1 503.2 502.6C515.7 490.1 515.7 469.8 503.2 457.3L365.8 320L503.1 182.6C515.6 170.1 515.6 149.8 503.1 137.3C490.6 124.8 470.3 124.8 457.8 137.3L320.5 274.7L183.1 137.4z\" />\n                    </svg>\n                </div>\n            </div>\n        </nav>\n    </header>\n\n    <!-- Main Content -->\n    <main class=\"main\">\n        <!-- Hero Section -->\n        <section class=\"hero\">\n            <div class=\"container\">\n                <div class=\"hero-content\">\n                    <div class=\"hero-text\">\n                        <h1 class=\"hero-title\">\n                            免费、跨平台的<span class=\"highlight\">Minecraft</span><br>启动器\n                        </h1>\n                        <p class=\"hero-subtitle\">\n                            基于 .NET 8 和 Avalonia UI 构建的完全开源 Minecraft 启动器，支持强大的 Mod 管理、自动安装加载器、多账户管理和跨平台同步\n                        </p>\n                        <div class=\"hero-actions\">\n                            <a href=\"#downloads\" class=\"btn btn-primary\">\n                                <svg class=\"btn-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n                                    <polyline points=\"7,10 12,15 17,10\" />\n                                    <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n                                </svg>\n                                立即下载\n                            </a>\n                            <a href=\"https://github.com/yiikooo/YMCL.Avalonia\" class=\"btn btn-secondary\"\n                                target=\"_blank\">\n                                <svg class=\"btn-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                    <path\n                                        d=\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\" />\n                                </svg>\n                                查看源码\n                            </a>\n                        </div>\n                    </div>\n                    <div class=\"hero-visual\">\n                        <div class=\"logo-showcase\">\n                            <img src=\"Icon.Border.png\" alt=\"YMCL Logo\" class=\"hero-logo\">\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- Features Section -->\n        <section id=\"features\" class=\"features\">\n            <div class=\"container\">\n                <div class=\"section-header\">\n                    <h2 class=\"section-title\">强大的功能特性</h2>\n                    <p class=\"section-subtitle\">为 Minecraft 玩家设计的全面功能集</p>\n                </div>\n                <div class=\"features-grid\">\n                    <div class=\"feature-card featured\">\n                        <div class=\"feature-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <path d=\"M3 7v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2z\" />\n                                <polyline points=\"3,7 12,13 21,7\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"feature-title\">Mod 管理</h3>\n                        <p class=\"feature-description\">\n                            轻松安装、管理和切换 Mod，支持多个 Mod 加载器和版本管理\n                        </p>\n                        <ul class=\"feature-list\">\n                            <li>一键安装 Mod</li>\n                            <li>Mod 版本管理</li>\n                            <li>依赖关系检查</li>\n                            <li>快速启用/禁用</li>\n                        </ul>\n                    </div>\n\n                    <div class=\"feature-card\">\n                        <div class=\"feature-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <circle cx=\"12\" cy=\"12\" r=\"3\" />\n                                <path\n                                    d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1 1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"feature-title\">自动安装加载器</h3>\n                        <p class=\"feature-description\">\n                            一键自动安装 Forge、NeoForge、Fabric、Quilt、OptiFine 等加载器\n                        </p>\n                        <ul class=\"feature-list\">\n                            <li>Forge 支持</li>\n                            <li>Fabric 支持</li>\n                            <li>NeoForge 支持</li>\n                            <li>OptiFine 支持</li>\n                        </ul>\n                    </div>\n\n                    <div class=\"feature-card\">\n                        <div class=\"feature-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n                                <circle cx=\"9\" cy=\"7\" r=\"4\" />\n                                <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n                                <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"feature-title\">多账户支持</h3>\n                        <p class=\"feature-description\">\n                            管理多个游戏账户，快速切换不同账户启动游戏\n                        </p>\n                        <ul class=\"feature-list\">\n                            <li>多账户管理</li>\n                            <li>快速账户切换</li>\n                            <li>账户信息保存</li>\n                            <li>离线模式支持</li>\n                        </ul>\n                    </div>\n\n                    <div class=\"feature-card\">\n                        <div class=\"feature-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n                                <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"9\" />\n                                <line x1=\"9\" y1=\"12\" x2=\"15\" y2=\"12\" />\n                                <line x1=\"9\" y1=\"15\" x2=\"13\" y2=\"15\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"feature-title\">游戏自定义</h3>\n                        <p class=\"feature-description\">\n                            灵活配置游戏参数、JVM 参数和启动选项\n                        </p>\n                        <ul class=\"feature-list\">\n                            <li>JVM 参数配置</li>\n                            <li>游戏参数设置</li>\n                            <li>内存分配管理</li>\n                            <li>启动脚本支持</li>\n                        </ul>\n                    </div>\n\n                    <div class=\"feature-card\">\n                        <div class=\"feature-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <path\n                                    d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"feature-title\">跨平台同步</h3>\n                        <p class=\"feature-description\">\n                            在 Windows、macOS 和 Linux 间无缝切换，配置自动同步\n                        </p>\n                        <ul class=\"feature-list\">\n                            <li>Windows 支持</li>\n                            <li>macOS 支持</li>\n                            <li>Linux 支持</li>\n                            <li>配置云同步</li>\n                        </ul>\n                    </div>\n\n                    <div class=\"feature-card\">\n                        <div class=\"feature-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n                                <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n                                <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"feature-title\">界面自定义</h3>\n                        <p class=\"feature-description\">\n                            个性化启动器外观和主题，支持深色/浅色模式\n                        </p>\n                        <ul class=\"feature-list\">\n                            <li>主题切换</li>\n                            <li>深色/浅色模式</li>\n                            <li>自定义背景</li>\n                            <li>布局自定义</li>\n                        </ul>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- Downloads Section -->\n        <section id=\"downloads\" class=\"downloads\">\n            <div class=\"container\">\n                <div class=\"section-header\">\n                    <h2 class=\"section-title\">立即下载</h2>\n                    <p class=\"section-subtitle\">选择适合您平台的版本</p>\n                </div>\n                <div class=\"mirror-selector-container\">\n                    <p class=\"mirror-selector-label\">选择下载线路</p>\n                    <div class=\"mirror-selector\">\n                        <label class=\"mirror-option\">\n                            <input type=\"radio\" name=\"mirror-route\" value=\"0\" checked>\n                            <span class=\"mirror-label\">官方</span>\n                        </label>\n                        <label class=\"mirror-option\">\n                            <input type=\"radio\" name=\"mirror-route\" value=\"1\">\n                            <span class=\"mirror-label\">镜像1</span>\n                        </label>\n                        <label class=\"mirror-option\">\n                            <input type=\"radio\" name=\"mirror-route\" value=\"2\">\n                            <span class=\"mirror-label\">镜像2</span>\n                        </label>\n                        <label class=\"mirror-option\">\n                            <input type=\"radio\" name=\"mirror-route\" value=\"3\">\n                            <span class=\"mirror-label\">镜像3</span>\n                        </label>\n                    </div>\n                </div>\n\n                <div class=\"download-grid\">\n                    <div class=\"download-card\">\n                        <div class=\"download-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n                                <rect x=\"7\" y=\"8\" width=\"10\" height=\"6\" rx=\"1\" ry=\"1\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"download-title\">Windows</h3>\n                        <p class=\"download-description\">支持 Windows 7 及以上版本</p>\n                        <div class=\"download-options\">\n                            <select class=\"download-select\" data-platform=\"windows\">\n                                <option value=\"win-x64-installer\">win 64位 安装包</option>\n                                <option value=\"win-x64-portable\">win 64位 便携版</option>\n                                <option value=\"win-x86-installer\">win 32位 安装包</option>\n                                <option value=\"win-x86-portable\">win 32位 便携版</option>\n                                <option value=\"win-arm64-installer\">win Arm64 安装包</option>\n                                <option value=\"win-arm64-portable\">win Arm64 便携版</option>\n                            </select>\n                            <button class=\"btn btn-download\" data-platform=\"windows\">\n                                <svg class=\"btn-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n                                    <polyline points=\"7,10 12,15 17,10\" />\n                                    <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n                                </svg>\n                                下载\n                            </button>\n                        </div>\n                    </div>\n\n                    <div class=\"download-card\">\n                        <div class=\"download-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\" />\n                                <path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"download-title\">macOS</h3>\n                        <p class=\"download-description\">支持 macOS 10.15 及以上版本</p>\n                        <div class=\"download-options\">\n                            <select class=\"download-select\" data-platform=\"macos\">\n                                <option value=\"osx-x64-dmg\">mac dmg</option>\n                                <option value=\"osx-x64-app\">mac app</option>\n                            </select>\n                            <button class=\"btn btn-download\" data-platform=\"macos\">\n                                <svg class=\"btn-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n                                    <polyline points=\"7,10 12,15 17,10\" />\n                                    <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n                                </svg>\n                                下载\n                            </button>\n                        </div>\n                    </div>\n\n                    <div class=\"download-card\">\n                        <div class=\"download-icon\">\n                            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                <circle cx=\"12\" cy=\"12\" r=\"10\" />\n                                <path d=\"M12 6v6l4 2\" />\n                            </svg>\n                        </div>\n                        <h3 class=\"download-title\">Linux</h3>\n                        <p class=\"download-description\">支持主流 Linux 发行版</p>\n                        <div class=\"download-options\">\n                            <select class=\"download-select\" data-platform=\"linux\">\n                                <option value=\"linux-x64-appimage\">linux 64位 AppImage</option>\n                                <option value=\"linux-arm64-appimage\">linux Arm64 AppImage</option>\n                                <option value=\"linux-arm-appimage\">linux Arm AppImage</option>\n                            </select>\n                            <button class=\"btn btn-download\" data-platform=\"linux\">\n                                <svg class=\"btn-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n                                    <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n                                    <polyline points=\"7,10 12,15 17,10\" />\n                                    <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n                                </svg>\n                                下载\n                            </button>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"system-requirements\">\n                    <h3>系统要求</h3>\n                    <div class=\"requirements-grid\">\n                        <div class=\"requirement-item\">\n                            <strong>操作系统：</strong>\n                            <span>Windows 7+、macOS 10.15+、Linux</span>\n                        </div>\n                        <div class=\"requirement-item\">\n                            <strong>.NET Runtime：</strong>\n                            <span>.NET 8.0</span>\n                        </div>\n                        <div class=\"requirement-item\">\n                            <strong>内存：</strong>\n                            <span>至少 512MB RAM</span>\n                        </div>\n                        <div class=\"requirement-item\">\n                            <strong>存储空间：</strong>\n                            <span>至少 120MB 可用空间</span>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- Tech Stack Section -->\n        <section id=\"tech\" class=\"tech-stack\">\n            <div class=\"container\">\n                <div class=\"section-header\">\n                    <h2 class=\"section-title\">技术栈</h2>\n                    <p class=\"section-subtitle\">基于现代化技术构建</p>\n                </div>\n                <div class=\"tech-grid\">\n                    <div class=\"tech-category\">\n                        <h3 class=\"tech-category-title\">核心框架</h3>\n                        <div class=\"tech-items\">\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">.NET 8.0</span>\n                                <span class=\"tech-description\">现代化的 .NET 运行时</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">Avalonia UI 11.3.2</span>\n                                <span class=\"tech-description\">跨平台 UI 框架</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">FluentAvalonia UI</span>\n                                <span class=\"tech-description\">Fluent Design 风格组件库</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">ReactiveUI</span>\n                                <span class=\"tech-description\">响应式 MVVM 框架</span>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"tech-category\">\n                        <h3 class=\"tech-category-title\">主要依赖</h3>\n                        <div class=\"tech-items\">\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">CommunityToolkit.Mvvm</span>\n                                <span class=\"tech-description\">MVVM 工具包</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">Newtonsoft.Json</span>\n                                <span class=\"tech-description\">JSON 序列化</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">SkiaSharp</span>\n                                <span class=\"tech-description\">2D 图形渲染</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">SharpCompress</span>\n                                <span class=\"tech-description\">压缩文件处理</span>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"tech-category\">\n                        <h3 class=\"tech-category-title\">开发工具</h3>\n                        <div class=\"tech-items\">\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">AvaloniaEdit</span>\n                                <span class=\"tech-description\">代码编辑器组件</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">Ursa Controls</span>\n                                <span class=\"tech-description\">额外的 UI 控件库</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">Semi.Avalonia</span>\n                                <span class=\"tech-description\">Semi Design 主题</span>\n                            </div>\n                            <div class=\"tech-item\">\n                                <span class=\"tech-name\">Flurl.Http</span>\n                                <span class=\"tech-description\">HTTP 客户端</span>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"open-source-info\">\n                    <div class=\"open-source-card\">\n                        <h3>开源项目</h3>\n                        <p>YMCL 是一个完全开源的 Minecraft 启动器，采用 GPL-3.0 许可证。我们欢迎社区贡献和反馈。</p>\n                        <div class=\"open-source-links\">\n                            <a href=\"https://github.com/yiikooo/YMCL.Avalonia\" class=\"special-link\" target=\"_blank\">\n                                GitHub 仓库\n                            </a>\n                            <a href=\"https://github.com/yiikooo/YMCL.Avalonia/issues\" class=\"special-link\"\n                                target=\"_blank\">\n                                问题反馈\n                            </a>\n                            <a href=\"https://github.com/yiikooo/YMCL.Avalonia/pulls\" class=\"special-link\"\n                                target=\"_blank\">\n                                贡献代码\n                            </a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </section>\n    </main>\n\n    <!-- Footer -->\n    <footer class=\"footer\">\n        <div class=\"container\">\n            <div class=\"footer-content\">\n                <div class=\"footer-section\">\n                    <div class=\"footer-brand\">\n                        <img src=\"images/Icon.png\" alt=\"YMCL Logo\" class=\"footer-logo\">\n                        <span class=\"footer-title\">YMCL</span>\n                    </div>\n                    <p class=\"footer-description\">\n                        免费、跨平台的 Minecraft 启动器\n                    </p>\n                </div>\n\n                <div class=\"footer-section\">\n                    <h4 class=\"footer-section-title\">快速链接</h4>\n                    <ul class=\"footer-links\">\n                        <li><a href=\"#features\" class=\"footer-link\">功能特性</a></li>\n                        <li><a href=\"#downloads\" class=\"footer-link\">下载</a></li>\n                        <li><a href=\"#tech\" class=\"footer-link\">技术栈</a></li>\n                        <li><a href=\"https://github.com/yiikooo/YMCL.Avalonia\" class=\"footer-link\"\n                                target=\"_blank\">GitHub</a>\n                        </li>\n                    </ul>\n                </div>\n\n                <div class=\"footer-section\">\n                    <h4 class=\"footer-section-title\">支持</h4>\n                    <ul class=\"footer-links\">\n                        <li><a href=\"https://github.com/yiikooo/YMCL.Avalonia/issues\" class=\"footer-link\"\n                                target=\"_blank\">问题反馈</a></li>\n                    </ul>\n                </div>\n\n                <div class=\"footer-section\">\n                    <h4 class=\"footer-section-title\">作者</h4>\n                    <p class=\"footer-author\">\n                        由 <a href=\"https://github.com/yiikooo\" class=\"author-link\" target=\"_blank\">yiikooo</a> 开发\n                    </p>\n                    <p class=\"footer-license\">\n                        采用 <a href=\"https://github.com/yiikooo/YMCL.Avalonia/blob/main/LICENSE\" class=\"special-link\"\n                            target=\"_blank\">GPL-3.0</a> 许可证\n                    </p>\n                </div>\n            </div>\n\n            <div class=\"footer-bottom\">\n                <p class=\"footer-copyright\">\n                    © 2026 yiikooo. All rights reserved.\n                </p>\n                <div class=\"footer-social\">\n                    <a href=\"https://github.com/yiikooo/YMCL.Avalonia\" class=\"social-link\" target=\"_blank\"\n                        aria-label=\"GitHub\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                            <path\n                                d=\"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z\" />\n                        </svg>\n                    </a>\n                </div>\n            </div>\n        </div>\n    </footer>\n\n    <!-- JavaScript Files -->\n    <script src=\"js/main.js\"></script>\n    <script src=\"js/downloads.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "YMCL.Web/js/downloads.js",
    "content": "// Download functionality for Aurelio website\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  initDownloads();\n  initMirrorSelector();\n});\n\n// Mirror routes configuration\nconst mirrorRoutes = {\n  0: \"\", // Official - no prefix\n  1: \"https://github.moeyy.xyz/\",\n  2: \"https://ghproxy.net/\",\n  3: \"https://ghfast.top/\",\n};\n\n// Download configuration based on the README.md information\nconst downloadConfig = {\n  baseUrl:\n    \"https://github.com/yiikooo/YMCL.Avalonia/releases/download/AutoPublish/\",\n  files: {\n    // Windows\n    \"win-x64-installer\": \"YMCL.win.x64.installer.exe\",\n    \"win-x64-portable\": \"YMCL.win.x64.portable.exe\",\n    \"win-x86-installer\": \"YMCL.win.x86.installer.exe\",\n    \"win-x86-portable\": \"YMCL.win.x86.portable.exe\",\n    \"win-arm64-installer\": \"YMCL.win.arm64.installer.exe\",\n    \"win-arm64-portable\": \"YMCL.win.arm64.portable.exe\",\n\n    // macOS\n    \"osx-x64-dmg\": \"YMCL.osx.mac.x64.dmg\",\n    \"osx-x64-app\": \"YMCL.osx.mac.x64.app.zip\",\n\n    // Linux\n    \"linux-x64-appimage\": \"YMCL.linux.x64.AppImage\",\n    \"linux-arm64-appimage\": \"YMCL.linux.arm64.AppImage\",\n    \"linux-arm-appimage\": \"YMCL.linux.arm.AppImage\",\n  },\n};\n\n// Store current mirror selection\nlet currentMirror = 0;\n\nfunction initMirrorSelector() {\n  const mirrorRadios = document.querySelectorAll('input[name=\"mirror-route\"]');\n\n  mirrorRadios.forEach((radio) => {\n    radio.addEventListener(\"change\", function () {\n      currentMirror = parseInt(this.value);\n      console.log(`Mirror route changed to: ${currentMirror}`);\n    });\n  });\n}\n\nfunction initDownloads() {\n  const downloadButtons = document.querySelectorAll(\".btn-download\");\n  const downloadSelects = document.querySelectorAll(\".download-select\");\n\n  // Initialize download buttons\n  downloadButtons.forEach((button) => {\n    button.addEventListener(\"click\", handleDownload);\n  });\n\n  // Initialize download selects\n  downloadSelects.forEach((select) => {\n    select.addEventListener(\"change\", updateDownloadButton);\n  });\n\n  // Set default selections based on user's platform\n  detectAndSetDefaultPlatform();\n}\n\nfunction detectAndSetDefaultPlatform() {\n  const userAgent = navigator.userAgent.toLowerCase();\n  const platform = navigator.platform.toLowerCase();\n\n  let detectedPlatform = \"windows\";\n  let defaultOption = \"win-x64-installer\";\n\n  // Detect platform\n  if (userAgent.includes(\"mac\") || platform.includes(\"mac\")) {\n    detectedPlatform = \"macos\";\n    // Detect Apple Silicon vs Intel\n    if (userAgent.includes(\"arm\") || platform.includes(\"arm\")) {\n      defaultOption = \"osx-arm64-dmg\";\n    } else {\n      defaultOption = \"osx-x64-dmg\";\n    }\n  } else if (userAgent.includes(\"linux\") || platform.includes(\"linux\")) {\n    detectedPlatform = \"linux\";\n    // Detect architecture\n    if (userAgent.includes(\"arm64\") || platform.includes(\"arm64\")) {\n      defaultOption = \"linux-arm64-appimage\";\n    } else if (userAgent.includes(\"arm\")) {\n      defaultOption = \"linux-arm-appimage\";\n    } else {\n      defaultOption = \"linux-x64-appimage\";\n    }\n  } else if (userAgent.includes(\"win\") || platform.includes(\"win\")) {\n    detectedPlatform = \"windows\";\n    // Detect architecture\n    if (\n      userAgent.includes(\"wow64\") ||\n      userAgent.includes(\"win64\") ||\n      userAgent.includes(\"x64\")\n    ) {\n      defaultOption = \"win-x64-installer\";\n    } else if (userAgent.includes(\"arm\")) {\n      defaultOption = \"win-arm64-installer\";\n    } else {\n      defaultOption = \"win-x86-installer\";\n    }\n  }\n\n  // Set default selection\n  const platformSelect = document.querySelector(\n    `[data-platform=\"${detectedPlatform}\"]`\n  );\n  if (platformSelect && platformSelect.tagName === \"SELECT\") {\n    platformSelect.value = defaultOption;\n    updateDownloadButton({ target: platformSelect });\n  }\n}\n\nfunction updateDownloadButton(event) {\n  const select = event.target;\n  const platform = select.dataset.platform;\n  const selectedValue = select.value;\n\n  const button = select.parentElement.querySelector(\".btn-download\");\n  if (button) {\n    button.dataset.downloadType = selectedValue;\n\n    // Update button text based on selection\n    const buttonText = getButtonText(selectedValue);\n    const iconSvg = button.querySelector(\"svg\").outerHTML;\n    button.innerHTML = iconSvg + buttonText;\n  }\n}\n\nfunction getButtonText(downloadType) {\n  const textMap = {\n    // Windows\n    \"win-x64-installer\": \"下载安装包\",\n    \"win-x64-portable\": \"下载便携版\",\n    \"win-x86-installer\": \"下载安装包\",\n    \"win-x86-portable\": \"下载便携版\",\n    \"win-arm64-installer\": \"下载安装包\",\n    \"win-arm64-portable\": \"下载便携版\",\n\n    // macOS\n    \"osx-x64-dmg\": \"下载 dmg\",\n    \"osx-x64-app\": \"下载 app\",\n    \"osx-arm64-dmg\": \"下载 DMG\",\n    \"osx-arm64-app\": \"下载 APP\",\n\n    // Linux\n    \"linux-x64-appimage\": \"下载 AppImage\",\n    \"linux-arm64-appimage\": \"下载 AppImage\",\n    \"linux-arm-appimage\": \"下载 AppImage\",\n  };\n\n  return textMap[downloadType] || \"下载\";\n}\n\nfunction handleDownload(event) {\n  event.preventDefault();\n\n  const button = event.currentTarget;\n  const platform = button.dataset.platform;\n\n  // Get selected download type\n  let downloadType = button.dataset.downloadType;\n\n  // If no download type is set, get it from the select\n  if (!downloadType) {\n    const select = button.parentElement.querySelector(\".download-select\");\n    downloadType = select ? select.value : getDefaultDownloadType(platform);\n  }\n\n  // Get download URL with mirror route\n  const downloadUrl = getDownloadUrl(downloadType, currentMirror);\n\n  if (downloadUrl) {\n    // Add download animation\n    animateDownloadButton(button);\n\n    // Start download\n    setTimeout(() => {\n      window.open(downloadUrl, \"_blank\");\n\n      // Track download (you can add analytics here)\n      trackDownload(downloadType, currentMirror);\n    }, 500);\n  }\n}\n\nfunction getDefaultDownloadType(platform) {\n  const defaults = {\n    windows: \"win-x64-installer\",\n    macos: \"osx-x64-dmg\",\n    linux: \"linux-x64-appimage\",\n  };\n\n  return defaults[platform] || \"win-x64-installer\";\n}\n\nfunction getDownloadUrl(downloadType, mirrorRoute = 0) {\n  const fileName = downloadConfig.files[downloadType];\n  if (fileName) {\n    const mirrorPrefix = mirrorRoutes[mirrorRoute] || \"\";\n\n    if (mirrorRoute === 0) {\n      // Official route - use direct GitHub URL\n      return downloadConfig.baseUrl + fileName;\n    } else {\n      // Mirror routes - use mirror prefix + GitHub URL\n      const githubUrl = downloadConfig.baseUrl + fileName;\n      return mirrorPrefix + githubUrl;\n    }\n  }\n  return null;\n}\n\nfunction animateDownloadButton(button) {\n  const originalContent = button.innerHTML;\n\n  // Change button to loading state\n  button.innerHTML = `\n        <svg class=\"btn-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n            <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n            <path d=\"M12 6v6l4 2\"/>\n        </svg>\n        下载中...\n    `;\n\n  button.style.opacity = \"0.7\";\n  button.style.pointerEvents = \"none\";\n\n  // Reset button after animation\n  setTimeout(() => {\n    button.innerHTML = originalContent;\n    button.style.opacity = \"1\";\n    button.style.pointerEvents = \"auto\";\n  }, 2000);\n}\n\nfunction trackDownload(downloadType, mirrorRoute) {\n  // You can add analytics tracking here\n  console.log(\n    `Download started: ${downloadType} via mirror route ${mirrorRoute}`\n  );\n\n  // Example: Google Analytics tracking\n  if (typeof gtag !== \"undefined\") {\n    gtag(\"event\", \"download\", {\n      event_category: \"software\",\n      event_label: downloadType,\n      mirror_route: mirrorRoute,\n      value: 1,\n    });\n  }\n\n  // Example: Custom analytics\n  if (typeof analytics !== \"undefined\") {\n    analytics.track(\"Download Started\", {\n      downloadType: downloadType,\n      platform: downloadType.split(\"-\")[0],\n      mirrorRoute: mirrorRoute,\n      timestamp: new Date().toISOString(),\n    });\n  }\n}\n\n// Add keyboard shortcuts for quick downloads\ndocument.addEventListener(\"keydown\", function (event) {\n  // Ctrl/Cmd + D for quick download\n  if ((event.ctrlKey || event.metaKey) && event.key === \"d\") {\n    event.preventDefault();\n\n    const firstDownloadButton = document.querySelector(\".btn-download\");\n    if (firstDownloadButton) {\n      firstDownloadButton.click();\n    }\n  }\n});\n\n// Add download progress simulation (for demo purposes)\nfunction simulateDownloadProgress() {\n  // This is just for demonstration - real downloads would be handled by the browser\n  return new Promise((resolve) => {\n    let progress = 0;\n    const interval = setInterval(() => {\n      progress += Math.random() * 20;\n      if (progress >= 100) {\n        progress = 100;\n        clearInterval(interval);\n        resolve();\n      }\n    }, 200);\n  });\n}\n\n// Export functions for potential use by other scripts\nwindow.AurelioDownloads = {\n  handleDownload,\n  getDownloadUrl,\n  trackDownload,\n  detectAndSetDefaultPlatform,\n  currentMirror,\n};\n"
  },
  {
    "path": "YMCL.Web/js/main.js",
    "content": "// Main JavaScript functionality for Aurelio website\n\ndocument.addEventListener('DOMContentLoaded', function () {\n    // Initialize all components\n    initNavigation();\n    initSmoothScrolling();\n    initTabShowcase();\n    initScrollEffects();\n});\n\n// Navigation functionality\nfunction initNavigation() {\n    const navToggle = document.querySelector('.nav-toggle');\n    const navMenu = document.querySelector('.nav-menu');\n    const navLinks = document.querySelectorAll('.nav-link');\n\n    // Mobile menu toggle\n    if (navToggle && navMenu) {\n        navToggle.addEventListener('click', function (e) {\n            e.stopPropagation();\n            navToggle.classList.toggle('active');\n            navMenu.classList.toggle('active');\n\n            // Add/remove body scroll lock when menu is open\n            if (navMenu.classList.contains('active')) {\n                document.body.style.overflow = 'hidden';\n            } else {\n                document.body.style.overflow = '';\n            }\n        });\n\n        // Close menu when clicking on a link\n        navLinks.forEach(link => {\n            link.addEventListener('click', function () {\n                navToggle.classList.remove('active');\n                navMenu.classList.remove('active');\n                document.body.style.overflow = '';\n            });\n        });\n\n        // Close menu when clicking outside\n        document.addEventListener('click', function (e) {\n            if (!navToggle.contains(e.target) && !navMenu.contains(e.target)) {\n                navToggle.classList.remove('active');\n                navMenu.classList.remove('active');\n                document.body.style.overflow = '';\n            }\n        });\n\n        // Close menu on escape key\n        document.addEventListener('keydown', function (e) {\n            if (e.key === 'Escape' && navMenu.classList.contains('active')) {\n                navToggle.classList.remove('active');\n                navMenu.classList.remove('active');\n                document.body.style.overflow = '';\n            }\n        });\n    }\n\n    // Header scroll effect\n    const header = document.querySelector('.header');\n    if (header) {\n        window.addEventListener('scroll', function () {\n            if (window.scrollY > 100) {\n                header.style.backgroundColor = 'rgba(255, 255, 255, 0.98)';\n                header.style.boxShadow = '0 2px 20px rgba(0, 0, 0, 0.1)';\n            } else {\n                header.style.backgroundColor = 'rgba(255, 255, 255, 0.95)';\n                header.style.boxShadow = 'none';\n            }\n        });\n    }\n}\n\n// Smooth scrolling for anchor links\nfunction initSmoothScrolling() {\n    const links = document.querySelectorAll('a[href^=\"#\"]');\n\n    links.forEach(link => {\n        link.addEventListener('click', function (e) {\n            e.preventDefault();\n\n            const targetId = this.getAttribute('href');\n            const targetElement = document.querySelector(targetId);\n\n            if (targetElement) {\n                const headerHeight = document.querySelector('.header').offsetHeight;\n                const targetPosition = targetElement.offsetTop - headerHeight - 20;\n\n                window.scrollTo({\n                    top: targetPosition,\n                    behavior: 'smooth'\n                });\n            }\n        });\n    });\n}\n\n// Tab showcase animation\nfunction initTabShowcase() {\n    const tabWindow = document.querySelector('.tab-window');\n    const tabs = document.querySelectorAll('.tab');\n    const tabContent = document.querySelector('.content-area');\n\n    if (!tabWindow || !tabs.length) return;\n\n    // Tab switching animation\n    tabs.forEach((tab, index) => {\n        tab.addEventListener('click', function () {\n            // Remove active class from all tabs\n            tabs.forEach(t => t.classList.remove('active'));\n\n            // Add active class to clicked tab\n            this.classList.add('active');\n\n            // Animate content change\n            if (tabContent) {\n                tabContent.style.opacity = '0.5';\n                tabContent.style.transform = 'scale(0.95)';\n\n                setTimeout(() => {\n                    // Update content based on tab\n                    updateTabContent(index);\n\n                    tabContent.style.opacity = '1';\n                    tabContent.style.transform = 'scale(1)';\n                }, 150);\n            }\n        });\n    });\n\n    // Handle new tab button\n    const newTabButton = document.querySelector('.tab-new');\n    if (newTabButton) {\n        newTabButton.addEventListener('click', function () {\n            createNewTab();\n        });\n    }\n\n    // Handle tab close buttons\n    function setupTabCloseHandlers() {\n        const tabCloseButtons = document.querySelectorAll('.tab-close');\n        tabCloseButtons.forEach((closeBtn, index) => {\n            closeBtn.addEventListener('click', function (e) {\n                e.stopPropagation(); // Prevent tab selection when clicking close\n                closeTab(index);\n            });\n        });\n    }\n\n    // Initial setup of close handlers\n    setupTabCloseHandlers();\n}\n\n// Update tab content based on selected tab\nfunction updateTabContent(tabIndex) {\n    const contentArea = document.querySelector('.content-area');\n    if (!contentArea) return;\n\n    const contents = [\n        // File Explorer\n        `<div class=\"file-explorer\">\n            <div class=\"file-tree\">\n                <div class=\"file-item folder\">📁 Documents</div>\n                <div class=\"file-item folder\">📁 Projects</div>\n                <div class=\"file-item file\">📄 README.md</div>\n                <div class=\"file-item file\">📄 config.json</div>\n                <div class=\"file-item file\">🖼️ screenshot.png</div>\n            </div>\n        </div>`,\n\n        // Terminal\n        `<div class=\"terminal-demo\">\n            <div style=\"font-family: monospace; color: #10b981; font-size: 12px; line-height: 1.4;text-align: left;\">\n                <div>$ dotnet --version</div>\n                <div style=\"color: #64748b;\">8.0.0</div>\n                <div>$ dotnet run --project Aurelio.Desktop</div>\n                <div style=\"color: #64748b;\">启动 Aurelio 应用程序...</div>\n                <div style=\"color: #64748b;\">应用程序已成功启动</div>\n                <div>$ _</div>\n            </div>\n        </div>`,\n\n        // Settings\n        `<div class=\"settings-demo\">\n            <div style=\"display: flex; flex-direction: column; gap: 8px; font-size: 12px;\">\n                <div style=\"display: flex; justify-content: space-between; align-items: center; padding: 8px; background: rgba(37, 99, 235, 0.1); border-radius: 4px;\">\n                    <span>🎨 主题</span>\n                    <span style=\"color: #64748b;\">深色</span>\n                </div>\n                <div style=\"display: flex; justify-content: space-between; align-items: center; padding: 8px; background: rgba(37, 99, 235, 0.1); border-radius: 4px;\">\n                    <span>🌍 语言</span>\n                    <span style=\"color: #64748b;\">中文</span>\n                </div>\n                <div style=\"display: flex; justify-content: space-between; align-items: center; padding: 8px; background: rgba(37, 99, 235, 0.1); border-radius: 4px;\">\n                    <span>🔌 插件</span>\n                    <span style=\"color: #10b981;\">已启用</span>\n                </div>\n            </div>\n        </div>`\n    ];\n\n    contentArea.innerHTML = contents[tabIndex] || contents[0];\n}\n\n// Create new tab functionality\nfunction createNewTab() {\n    const tabBar = document.querySelector('.tab-bar');\n    const newTabButton = document.querySelector('.tab-new');\n\n    if (!tabBar || !newTabButton) return;\n\n    // Tab types for new tabs\n    const newTabTypes = [\n        { name: '新标签页', icon: 'M12 4.5v15m7.5-7.5h-15', content: 0 },\n        { name: '文档', icon: 'M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z', content: 0 },\n        { name: '代码编辑器', icon: 'M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4', content: 1 }\n    ];\n\n    // Randomly select a tab type\n    const randomType = newTabTypes[Math.floor(Math.random() * newTabTypes.length)];\n\n    // Create new tab element\n    const newTab = document.createElement('div');\n    newTab.className = 'tab';\n    newTab.innerHTML = `\n        <svg class=\"tab-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n            <path d=\"${randomType.icon}\"/>\n        </svg>\n        <span>${randomType.name}</span>\n        <div class=\"tab-close\">×</div>\n    `;\n\n    // Insert before the new tab button\n    tabBar.insertBefore(newTab, newTabButton);\n\n    // Add click handler for the new tab\n    newTab.addEventListener('click', function () {\n        // Remove active class from all tabs\n        const allTabs = document.querySelectorAll('.tab');\n        allTabs.forEach(t => t.classList.remove('active'));\n\n        // Add active class to clicked tab\n        this.classList.add('active');\n\n        // Update content\n        const tabIndex = Array.from(allTabs).indexOf(this);\n        updateTabContent(randomType.content);\n    });\n\n    // Setup close handler for the new tab\n    const closeBtn = newTab.querySelector('.tab-close');\n    closeBtn.addEventListener('click', function (e) {\n        e.stopPropagation();\n        const tabIndex = Array.from(document.querySelectorAll('.tab')).indexOf(newTab);\n        closeTab(tabIndex);\n    });\n\n    // Automatically select the new tab\n    const allTabs = document.querySelectorAll('.tab');\n    allTabs.forEach(t => t.classList.remove('active'));\n    newTab.classList.add('active');\n    updateTabContent(randomType.content);\n\n    // Add creation animation\n    newTab.classList.add('tab-creating');\n    setTimeout(() => {\n        newTab.classList.remove('tab-creating');\n    }, 300);\n\n    // Scroll to the new tab\n    scrollToTab(newTab);\n\n\n}\n\n// Close tab functionality\nfunction closeTab(tabIndex) {\n    const tabs = document.querySelectorAll('.tab');\n    const tabToClose = tabs[tabIndex];\n\n    if (!tabToClose || tabs.length <= 1) {\n        // Don't close if it's the last tab\n        return;\n    }\n\n    const wasActive = tabToClose.classList.contains('active');\n\n    // Add closing animation\n    tabToClose.classList.add('tab-closing');\n\n    setTimeout(() => {\n        // Remove the tab\n        tabToClose.remove();\n\n        // If the closed tab was active, select another tab\n        if (wasActive) {\n            const remainingTabs = document.querySelectorAll('.tab');\n            if (remainingTabs.length > 0) {\n                // Select the previous tab, or the first one if we closed the first tab\n                const newActiveIndex = Math.min(tabIndex, remainingTabs.length - 1);\n                remainingTabs[newActiveIndex].classList.add('active');\n\n                // Update content for the newly active tab\n                updateTabContent(newActiveIndex % 3); // Cycle through content types\n            }\n        }\n    }, 300);\n\n\n}\n\n// Scroll to specific tab in the tab bar\nfunction scrollToTab(tab) {\n    const tabBar = document.querySelector('.tab-bar');\n    if (!tabBar || !tab) return;\n\n    const tabBarRect = tabBar.getBoundingClientRect();\n    const tabRect = tab.getBoundingClientRect();\n\n    // Calculate the scroll position to center the tab\n    const scrollLeft = tab.offsetLeft - (tabBarRect.width / 2) + (tabRect.width / 2);\n\n    tabBar.scrollTo({\n        left: scrollLeft,\n        behavior: 'smooth'\n    });\n}\n\n// Scroll effects for elements\nfunction initScrollEffects() {\n    const observerOptions = {\n        threshold: 0.1,\n        rootMargin: '0px 0px -50px 0px'\n    };\n\n    const observer = new IntersectionObserver((entries) => {\n        entries.forEach(entry => {\n            if (entry.isIntersecting) {\n                entry.target.style.opacity = '1';\n                entry.target.style.transform = 'translateY(0)';\n            }\n        });\n    }, observerOptions);\n\n    // Observe feature cards\n    const featureCards = document.querySelectorAll('.feature-card');\n    featureCards.forEach((card, index) => {\n        card.style.opacity = '0';\n        card.style.transform = 'translateY(30px)';\n        card.style.transition = `opacity 0.6s ease ${index * 0.1}s, transform 0.6s ease ${index * 0.1}s`;\n        observer.observe(card);\n    });\n\n    // Observe download cards\n    const downloadCards = document.querySelectorAll('.download-card');\n    downloadCards.forEach((card, index) => {\n        card.style.opacity = '0';\n        card.style.transform = 'translateY(30px)';\n        card.style.transition = `opacity 0.6s ease ${index * 0.1}s, transform 0.6s ease ${index * 0.1}s`;\n        observer.observe(card);\n    });\n\n    // Observe tech categories\n    const techCategories = document.querySelectorAll('.tech-category');\n    techCategories.forEach((category, index) => {\n        category.style.opacity = '0';\n        category.style.transform = 'translateY(30px)';\n        category.style.transition = `opacity 0.6s ease ${index * 0.1}s, transform 0.6s ease ${index * 0.1}s`;\n        observer.observe(category);\n    });\n}\n\n\n\n// Utility functions\nfunction debounce(func, wait) {\n    let timeout;\n    return function executedFunction(...args) {\n        const later = () => {\n            clearTimeout(timeout);\n            func(...args);\n        };\n        clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n    };\n}\n\n// Add some interactive effects\ndocument.addEventListener('DOMContentLoaded', function () {\n    // Add hover effects to buttons\n    const buttons = document.querySelectorAll('.btn');\n    buttons.forEach(button => {\n        button.addEventListener('mouseenter', function () {\n            this.style.transform = 'translateY(-2px)';\n        });\n\n        button.addEventListener('mouseleave', function () {\n            this.style.transform = 'translateY(0)';\n        });\n    });\n\n    // Add click ripple effect\n    buttons.forEach(button => {\n        button.addEventListener('click', function (e) {\n            const ripple = document.createElement('span');\n            const rect = this.getBoundingClientRect();\n            const size = Math.max(rect.width, rect.height);\n            const x = e.clientX - rect.left - size / 2;\n            const y = e.clientY - rect.top - size / 2;\n\n            ripple.style.cssText = `\n                position: absolute;\n                width: ${size}px;\n                height: ${size}px;\n                left: ${x}px;\n                top: ${y}px;\n                background: rgba(255, 255, 255, 0.3);\n                border-radius: 50%;\n                transform: scale(0);\n                animation: ripple 0.6s ease-out;\n                pointer-events: none;\n            `;\n\n            this.style.position = 'relative';\n            this.style.overflow = 'hidden';\n            this.appendChild(ripple);\n\n            setTimeout(() => {\n                ripple.remove();\n            }, 600);\n        });\n    });\n});\n\n// Add CSS for ripple animation\nconst style = document.createElement('style');\nstyle.textContent = `\n    @keyframes ripple {\n        to {\n            transform: scale(2);\n            opacity: 0;\n        }\n    }\n`;\ndocument.head.appendChild(style);\n"
  },
  {
    "path": "YMCL.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.3.32811.315\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"YMCL\", \"YMCL.Main\\YMCL\\YMCL.csproj\", \"{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}\"\nEndProject\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"YMCL.Desktop\", \"YMCL.Main\\YMCL.Desktop\\YMCL.Desktop.csproj\", \"{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{3DA99C4E-89E3-4049-9C22-0A7EC60D83D8}\"\n\tProjectSection(SolutionItems) = preProject\n\t\tDirectory.Packages.props = Directory.Packages.props\n\tEndProjectSection\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"YMCL.Main\", \"YMCL.Main\", \"{1ABDA67F-1B6B-4D65-BC95-3B4028562ECC}\"\nEndProject\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"YMCL.Plugin\", \"YMCL.Plugin\", \"{F335C660-7A28-43E0-B366-0A9F1298BE0B}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"YMCL.Plugin.Simple\", \"YMCL.Plugin\\YMCL.Plugin.Simple\\YMCL.Plugin.Simple.csproj\", \"{2E6BB208-F685-45EE-9A26-38501087BE47}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"YMCL.Plugin.Base\", \"YMCL.Plugin\\YMCL.Plugin.Base\\YMCL.Plugin.Base.csproj\", \"{7E3E3637-2ABC-4864-A059-98F1030AFDCE}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"YMCL.Plugin.Page\", \"YMCL.Plugin\\YMCL.Plugin.Page\\YMCL.Plugin.Page.csproj\", \"{D35FC608-7FCF-4CAE-97BA-891FC4C75E37}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{2E6BB208-F685-45EE-9A26-38501087BE47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{2E6BB208-F685-45EE-9A26-38501087BE47}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{2E6BB208-F685-45EE-9A26-38501087BE47}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{2E6BB208-F685-45EE-9A26-38501087BE47}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{7E3E3637-2ABC-4864-A059-98F1030AFDCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{7E3E3637-2ABC-4864-A059-98F1030AFDCE}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{7E3E3637-2ABC-4864-A059-98F1030AFDCE}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{7E3E3637-2ABC-4864-A059-98F1030AFDCE}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D35FC608-7FCF-4CAE-97BA-891FC4C75E37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D35FC608-7FCF-4CAE-97BA-891FC4C75E37}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D35FC608-7FCF-4CAE-97BA-891FC4C75E37}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D35FC608-7FCF-4CAE-97BA-891FC4C75E37}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\n\tGlobalSection(NestedProjects) = preSolution\n\t\t{EBFA8512-1EA5-4D8C-B4AC-AB5B48A6D568} = {1ABDA67F-1B6B-4D65-BC95-3B4028562ECC}\n\t\t{ABC31E74-02FF-46EB-B3B2-4E6AE43B456C} = {1ABDA67F-1B6B-4D65-BC95-3B4028562ECC}\n\t\t{2E6BB208-F685-45EE-9A26-38501087BE47} = {F335C660-7A28-43E0-B366-0A9F1298BE0B}\n\t\t{7E3E3637-2ABC-4864-A059-98F1030AFDCE} = {F335C660-7A28-43E0-B366-0A9F1298BE0B}\n\t\t{D35FC608-7FCF-4CAE-97BA-891FC4C75E37} = {F335C660-7A28-43E0-B366-0A9F1298BE0B}\n\tEndGlobalSection\n\tGlobalSection(ExtensibilityGlobals) = postSolution\n\t\tRESX_PrefixFieldType = Comment, TargetComment\n\t\tRESX_PrefixTranslations = True\n\t\tRESX_NeutralResourcesLanguage = zh-CN\n\t\tSolutionGuid = {83CB65B8-011F-4ED7-BCD3-A6CFA935EF7E}\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "YMCL.sln.DotSettings",
    "content": "﻿<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:ss=\"urn:shemas-jetbrains-com:settings-storage-xaml\" xmlns:wpf=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=langs/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=netease/@EntryIndexedValue\">True</s:Boolean>\n\t<s:Boolean x:Key=\"/Default/UserDictionary/Words/=ymcl/@EntryIndexedValue\">True</s:Boolean></wpf:ResourceDictionary>"
  },
  {
    "path": "crowdin.yml",
    "content": "files:\n  - source: /YMCL.Main/YMCL/Public/Langs/MainLang.resx\n    translation: /YMCL.Main/YMCL/Public/Langs/MainLang.%language%.resx\n"
  }
]