diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml new file mode 100755 index 0000000..728995a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -0,0 +1,58 @@ +name: Bug 报告 +description: 在提出问题前请先自行排除服务器端问题和升级到最新客户端,同时也请通过搜索确认是否有人提出过相同问题。 +title: "[Bug]: " +labels: ["bug"] +body: + - type: input + id: "expectation" + attributes: + label: "预期情况" + description: "描述你认为应该发生什么" + validations: + required: true + - type: textarea + id: "describe-the-bug" + attributes: + label: "实际情况" + description: "描述实际发生了什么" + validations: + required: true + - type: textarea + id: "reproduction-method" + attributes: + label: "复现方法" + description: "在BUG出现前执行了哪些操作" + placeholder: 标序号 + validations: + required: true + - type: textarea + id: "log" + attributes: + label: "日志信息" + description: "位置在软件当前目录下的guiLogs" + placeholder: 在日志开始和结束位置粘贴冒号后的内容:``` + validations: + required: true + - type: textarea + id: "more" + attributes: + label: "额外信息" + description: "可选" + validations: + required: false + - type: checkboxes + id: "latest-version" + attributes: + label: "我确认已更新至最新版本" + description: "否则请更新后尝试" + options: + - label: 是 + required: true + - type: checkboxes + id: "issues" + attributes: + label: "我确认已查询历史issues" + description: "否则请查询后提出" + options: + - label: 是 + required: true diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml new file mode 100755 index 0000000..4e79294 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -0,0 +1,34 @@ +name: Feature 请求 +description: "为这个项目提出一个建议" +title: "[Feature request]: " +labels: ['enhancement'] +body: +- type: input + id: problem + attributes: + label: 相关问题 + description: "清楚而简洁地描述问题是什么。" + placeholder: "当我想要……时,软件不能……" + validations: + required: true +- type: input + id: way-to-solve + attributes: + label: 描述你希望的解决方案 + description: "你希望发生什么" + validations: + required: true +- type: input + id: instead + attributes: + label: 描述你所考虑的替代方案 + validations: + required: false +- type: checkboxes + id: "issues" + attributes: + label: "我确认已查询历史issues" + description: "否则请查询后提出" + options: + - label: 是 + required: true diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100755 index 0000000..f414dbc --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,60 @@ +name: release + +on: + push: + branches: [ "zh_TW" ] + pull_request: + branches: [ "zh_TW" ] + +jobs: + build: + strategy: + matrix: + configuration: [Release] + + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + # - name: 删除工作流运行 + # uses: Mattraks/delete-workflow-runs@v2 + # with: + # token: ${{ github.token }} + # repository: ${{ github.repository }} + # retain_days: 0 + # keep_minimum_runs: 1 + + - name: Build + run: cd v2rayN && + .\build.ps1 + + # - name: Package + # shell: pwsh + # run: | + # 7z a -mx9 ..\v2rayN.7z $env:Wap_Project_Directory + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: v2rayN + path: | + .\v2rayN\v2rayN.zip + + # - name: Release + # uses: softprops/action-gh-release@v1 + # env: + # GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} + # with: + # prerelease: ${{ contains(github.ref, '-') }} + # draft: false + # files: | + # .\v2rayN\v2rayN.zip + # body: | + # [![](https://img.shields.io/badge/Telegram-Channel-blue)](https://t.me/netch_channel) [![](https://img.shields.io/badge/Telegram-Group-green)](https://t.me/netch_group) + # ## Changelogs + # * This is an automated deployment of GitHub Actions, the change log should be updated manually soon + + # ## 更新日志 + # * 这是 GitHub Actions 自动化部署,更新日志应该很快会手动更新 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index fa46646..44dca1a --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,20 @@ -.vs -v2rayN/bin -Installer/Release -Installer/Debug -*.exe \ No newline at end of file +################################################################################ +# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 +################################################################################ + +/v2rayN/.vs/ +/v2rayN/v2rayN/bin/Debug/app.publish +/v2rayN/v2rayN/bin/Debug +/v2rayN/v2rayN/bin/Release +/v2rayN/v2rayN/obj/ +/v2rayN/.vs/v2rayN/DesignTimeBuild +/v2rayN/packages +.vs/ProjectSettings.json +.vs/slnx.sqlite +.vs/VSWorkspaceState.json +/v2rayN/v2rayUpgrade/bin/Debug +/v2rayN/v2rayUpgrade/bin/Release +/v2rayN/v2rayUpgrade/obj/ +*.user +/.vs/v2rayN +.DS_Store diff --git a/Installer/Installer.vdproj b/Installer/Installer.vdproj deleted file mode 100644 index 539b488..0000000 --- a/Installer/Installer.vdproj +++ /dev/null @@ -1,1924 +0,0 @@ -"DeployProject" -{ -"VSVersion" = "3:800" -"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" -"IsWebType" = "8:FALSE" -"ProjectName" = "8:Installer" -"LanguageId" = "3:1028" -"CodePage" = "3:950" -"UILanguageId" = "3:1028" -"SccProjectName" = "8:" -"SccLocalPath" = "8:" -"SccAuxPath" = "8:" -"SccProvider" = "8:" - "Hierarchy" - { - "Entry" - { - "MsmKey" = "8:_0457734360F95EAB1074A1F500A577CF" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_0E8B5FC603E357C23B21D49D1A5CA98B" - "OwnerKey" = "8:_1EEA0968A04A19AFDC4366E4A551AFAB" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_0E8B5FC603E357C23B21D49D1A5CA98B" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_1A551C81A7F643C1A08BB8F897B7D395" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_1EEA0968A04A19AFDC4366E4A551AFAB" - "OwnerKey" = "8:_0457734360F95EAB1074A1F500A577CF" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_1EEA0968A04A19AFDC4366E4A551AFAB" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_1EEA0968A04A19AFDC4366E4A551AFAB" - "OwnerKey" = "8:_B2BBC6DBA43E94934A3F72E396E9C1B1" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_1EEA0968A04A19AFDC4366E4A551AFAB" - "OwnerKey" = "8:_A584C87B9241E1FCB9F477A4266E7F93" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_292FD20540FE44F39098C0BEB379F7A1" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_29ECF1815EDB4073A061CAFCF8C3D9FE" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_421ED96A288A4BB69EF62F5EFD8097DB" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_468EB0A7E7D701997EA1AD36FD82EDE0" - "OwnerKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_47E12BD2F91365B3E9113440EDB6DB7E" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_582AB85661AE48B99507AA3FDA42BE19" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_58CC0F90AF6529F6EFC02318F7E8ECAE" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_59233CF5E5774D16A5BE58CF775EEACB" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_5B325B762E4CA1B5B06DE4DD92D1CD75" - "OwnerKey" = "8:_815E39BA65769A7FDDDE9F7AD611F566" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_5B325B762E4CA1B5B06DE4DD92D1CD75" - "OwnerKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_6B930376AF8C8B3A6D0E86B48F3014F5" - "OwnerKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_6B930376AF8C8B3A6D0E86B48F3014F5" - "OwnerKey" = "8:_DF449ACE6E643F631A178F9012F7DC2D" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_71B3D9DF66CB410882F95065D5CAAD50" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_815E39BA65769A7FDDDE9F7AD611F566" - "OwnerKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_815E39BA65769A7FDDDE9F7AD611F566" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_885EDEC9FD7A8FB641B8CF35F84C77C2" - "OwnerKey" = "8:_1EEA0968A04A19AFDC4366E4A551AFAB" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_885EDEC9FD7A8FB641B8CF35F84C77C2" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_944F203DAF2148229B69C0944FE86F14" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_A584C87B9241E1FCB9F477A4266E7F93" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_A584C87B9241E1FCB9F477A4266E7F93" - "OwnerKey" = "8:_B2BBC6DBA43E94934A3F72E396E9C1B1" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_B2BBC6DBA43E94934A3F72E396E9C1B1" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_B76BF040FC7343D6A4688935BD37ED2D" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_BC5B00B2D58A4EDE8C5A987B48F21362" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_BF558F1AEC4A4673ACA0724D83D3C91C" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_C3C1C0F92B5742946E53F0EE6A2E1FE8" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_D8CFACC46D26BEE5A70313611045C9A7" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_DE60509B825B47069197C72DD2D9BCD1" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_DF449ACE6E643F631A178F9012F7DC2D" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_EE4304F39C76CEB0983A6CF8C010024E" - "OwnerKey" = "8:_1EEA0968A04A19AFDC4366E4A551AFAB" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_EE4304F39C76CEB0983A6CF8C010024E" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_EE4304F39C76CEB0983A6CF8C010024E" - "OwnerKey" = "8:_B2BBC6DBA43E94934A3F72E396E9C1B1" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "OwnerKey" = "8:_0E8B5FC603E357C23B21D49D1A5CA98B" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "OwnerKey" = "8:_EE4304F39C76CEB0983A6CF8C010024E" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "OwnerKey" = "8:_1EEA0968A04A19AFDC4366E4A551AFAB" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_F7E88EC8E8A2301B3C7258BA6ADCC87E" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_F7E88EC8E8A2301B3C7258BA6ADCC87E" - "OwnerKey" = "8:_D8CFACC46D26BEE5A70313611045C9A7" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_FCF5BAD554D54E2388D5CC52D81AB074" - "OwnerKey" = "8:_UNDEFINED" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_29ECF1815EDB4073A061CAFCF8C3D9FE" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_D8CFACC46D26BEE5A70313611045C9A7" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_F7E88EC8E8A2301B3C7258BA6ADCC87E" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_C3C1C0F92B5742946E53F0EE6A2E1FE8" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_B2BBC6DBA43E94934A3F72E396E9C1B1" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_A584C87B9241E1FCB9F477A4266E7F93" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_0457734360F95EAB1074A1F500A577CF" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_885EDEC9FD7A8FB641B8CF35F84C77C2" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_DF449ACE6E643F631A178F9012F7DC2D" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_47E12BD2F91365B3E9113440EDB6DB7E" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_58CC0F90AF6529F6EFC02318F7E8ECAE" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_F2D6E62EE7D98D355B14808A12DF76D3" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_6B930376AF8C8B3A6D0E86B48F3014F5" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_468EB0A7E7D701997EA1AD36FD82EDE0" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_815E39BA65769A7FDDDE9F7AD611F566" - "MsmSig" = "8:_UNDEFINED" - } - "Entry" - { - "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_5B325B762E4CA1B5B06DE4DD92D1CD75" - "MsmSig" = "8:_UNDEFINED" - } - } - "Configurations" - { - "Debug" - { - "DisplayName" = "8:Debug" - "IsDebugOnly" = "11:TRUE" - "IsReleaseOnly" = "11:FALSE" - "OutputFilename" = "8:Debug\\Installer.msi" - "PackageFilesAs" = "3:2" - "PackageFileSize" = "3:-2147483648" - "CabType" = "3:1" - "Compression" = "3:2" - "SignOutput" = "11:FALSE" - "CertificateFile" = "8:" - "PrivateKeyFile" = "8:" - "TimeStampServer" = "8:" - "InstallerBootstrapper" = "3:2" - "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" - { - "Enabled" = "11:TRUE" - "PromptEnabled" = "11:TRUE" - "PrerequisitesLocation" = "2:1" - "Url" = "8:" - "ComponentsUrl" = "8:" - "Items" - { - "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.8" - { - "Name" = "8:Microsoft .NET Framework 4.8 (x86 和 x64)" - "ProductCode" = "8:.NETFramework,Version=v4.8" - } - } - } - } - "Release" - { - "DisplayName" = "8:Release" - "IsDebugOnly" = "11:FALSE" - "IsReleaseOnly" = "11:TRUE" - "OutputFilename" = "8:Release\\V2rayN Installer.msi" - "PackageFilesAs" = "3:2" - "PackageFileSize" = "3:-2147483648" - "CabType" = "3:1" - "Compression" = "3:2" - "SignOutput" = "11:FALSE" - "CertificateFile" = "8:" - "PrivateKeyFile" = "8:" - "TimeStampServer" = "8:" - "InstallerBootstrapper" = "3:2" - "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" - { - "Enabled" = "11:TRUE" - "PromptEnabled" = "11:TRUE" - "PrerequisitesLocation" = "2:1" - "Url" = "8:" - "ComponentsUrl" = "8:" - "Items" - { - "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.7.2" - { - "Name" = "8:Microsoft .NET Framework 4.7.2 (x86 and x64)" - "ProductCode" = "8:.NETFramework,Version=v4.7.2" - } - } - } - } - } - "Deployable" - { - "CustomAction" - { - } - "DefaultFeature" - { - "Name" = "8:DefaultFeature" - "Title" = "8:" - "Description" = "8:" - } - "ExternalPersistence" - { - "LaunchCondition" - { - "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_AD87E0F56F134AD3A23EA945146D271C" - { - "Name" = "8:.NET Framework" - "Message" = "8:[VSDNETMSG]" - "FrameworkVersion" = "8:.NETFramework,Version=v4.8" - "AllowLaterVersions" = "11:FALSE" - "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=863262" - } - } - } - "File" - { - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0457734360F95EAB1074A1F500A577CF" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Google.Protobuf, Version=3.11.4.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_0457734360F95EAB1074A1F500A577CF" - { - "Name" = "8:Google.Protobuf.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:Google.Protobuf.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0E8B5FC603E357C23B21D49D1A5CA98B" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" - "ScatterAssemblies" - { - "_0E8B5FC603E357C23B21D49D1A5CA98B" - { - "Name" = "8:System.Runtime.CompilerServices.Unsafe.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.Runtime.CompilerServices.Unsafe.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1A551C81A7F643C1A08BB8F897B7D395" - { - "SourcePath" = "8:..\\v2rayN\\v2ray-windows-64\\vpoint_socks_vmess.json" - "TargetName" = "8:vpoint_socks_vmess.json" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_1EEA0968A04A19AFDC4366E4A551AFAB" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_1EEA0968A04A19AFDC4366E4A551AFAB" - { - "Name" = "8:System.Memory.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.Memory.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_292FD20540FE44F39098C0BEB379F7A1" - { - "SourcePath" = "8:..\\v2rayN\\v2ray-windows-64\\config.json" - "TargetName" = "8:config.json" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_29ECF1815EDB4073A061CAFCF8C3D9FE" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:v2rayN.resources, Version=0.0.0.0, Culture=zh-Hans, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_29ECF1815EDB4073A061CAFCF8C3D9FE" - { - "Name" = "8:v2rayN.resources.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:..\\v2rayN\\zh-Hans\\v2rayN.resources.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_2DC91CA5BA4C46A38BC17AFD5D02A57B" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_421ED96A288A4BB69EF62F5EFD8097DB" - { - "SourcePath" = "8:..\\v2rayN\\v2ray-windows-64\\vpoint_vmess_freedom.json" - "TargetName" = "8:vpoint_vmess_freedom.json" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_468EB0A7E7D701997EA1AD36FD82EDE0" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:TRUE" - "AssemblyAsmDisplayName" = "8:System.Diagnostics.Tracing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_468EB0A7E7D701997EA1AD36FD82EDE0" - { - "Name" = "8:System.Diagnostics.Tracing.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.Diagnostics.Tracing.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_47E12BD2F91365B3E9113440EDB6DB7E" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:System.Net.Http, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" - "ScatterAssemblies" - { - "_47E12BD2F91365B3E9113440EDB6DB7E" - { - "Name" = "8:System.Net.Http.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.Net.Http.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_582AB85661AE48B99507AA3FDA42BE19" - { - "SourcePath" = "8:..\\v2rayN\\v2ray-windows-64\\v2ctl.exe" - "TargetName" = "8:v2ctl.exe" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_58CC0F90AF6529F6EFC02318F7E8ECAE" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:System.IO.Compression, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" - "ScatterAssemblies" - { - "_58CC0F90AF6529F6EFC02318F7E8ECAE" - { - "Name" = "8:System.IO.Compression.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.IO.Compression.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_59233CF5E5774D16A5BE58CF775EEACB" - { - "SourcePath" = "8:..\\v2rayN\\v2ray-windows-64\\wv2ray.exe" - "TargetName" = "8:wv2ray.exe" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_5B325B762E4CA1B5B06DE4DD92D1CD75" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:TRUE" - "AssemblyAsmDisplayName" = "8:System.IO.Compression, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_5B325B762E4CA1B5B06DE4DD92D1CD75" - { - "Name" = "8:System.IO.Compression.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.IO.Compression.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6B930376AF8C8B3A6D0E86B48F3014F5" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:TRUE" - "AssemblyAsmDisplayName" = "8:System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_6B930376AF8C8B3A6D0E86B48F3014F5" - { - "Name" = "8:System.Net.Http.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.Net.Http.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_71B3D9DF66CB410882F95065D5CAAD50" - { - "SourcePath" = "8:..\\v2rayN\\v2ray-windows-64\\geoip.dat" - "TargetName" = "8:geoip.dat" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_815E39BA65769A7FDDDE9F7AD611F566" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" - "ScatterAssemblies" - { - "_815E39BA65769A7FDDDE9F7AD611F566" - { - "Name" = "8:System.IO.Compression.FileSystem.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.IO.Compression.FileSystem.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_885EDEC9FD7A8FB641B8CF35F84C77C2" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:System.Numerics.Vectors, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" - "ScatterAssemblies" - { - "_885EDEC9FD7A8FB641B8CF35F84C77C2" - { - "Name" = "8:System.Numerics.Vectors.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.Numerics.Vectors.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_944F203DAF2148229B69C0944FE86F14" - { - "SourcePath" = "8:..\\v2rayN\\uninstall.ico" - "TargetName" = "8:uninstall.ico" - "Tag" = "8:" - "Folder" = "8:_1059402958314C9691BC2AF6EC2D6E22" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A584C87B9241E1FCB9F477A4266E7F93" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Grpc.Core.Api, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_A584C87B9241E1FCB9F477A4266E7F93" - { - "Name" = "8:Grpc.Core.Api.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:Grpc.Core.Api.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_B2BBC6DBA43E94934A3F72E396E9C1B1" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Grpc.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d754f35622e28bad, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_B2BBC6DBA43E94934A3F72E396E9C1B1" - { - "Name" = "8:Grpc.Core.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:Grpc.Core.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B76BF040FC7343D6A4688935BD37ED2D" - { - "SourcePath" = "8:..\\v2rayN\\v2ray-windows-64\\v2ray.exe" - "TargetName" = "8:v2ray.exe" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BC5B00B2D58A4EDE8C5A987B48F21362" - { - "SourcePath" = "8:..\\v2rayN\\setup_wizard_banner.jpg.png" - "TargetName" = "8:setup_wizard_banner.jpg.png" - "Tag" = "8:" - "Folder" = "8:_1059402958314C9691BC2AF6EC2D6E22" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BF558F1AEC4A4673ACA0724D83D3C91C" - { - "SourcePath" = "8:..\\v2rayN\\v2ray-windows-64\\geosite.dat" - "TargetName" = "8:geosite.dat" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_C3C1C0F92B5742946E53F0EE6A2E1FE8" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_C3C1C0F92B5742946E53F0EE6A2E1FE8" - { - "Name" = "8:Newtonsoft.Json.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:Newtonsoft.Json.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D8CFACC46D26BEE5A70313611045C9A7" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:zxing.presentation, Version=0.16.5.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_D8CFACC46D26BEE5A70313611045C9A7" - { - "Name" = "8:zxing.presentation.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:zxing.presentation.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DE60509B825B47069197C72DD2D9BCD1" - { - "SourcePath" = "8:..\\v2rayN\\Resources\\v2rayN.ico" - "TargetName" = "8:v2rayN.ico" - "Tag" = "8:" - "Folder" = "8:_1059402958314C9691BC2AF6EC2D6E22" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DF449ACE6E643F631A178F9012F7DC2D" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:System.Net.Http.WebRequest, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" - "ScatterAssemblies" - { - "_DF449ACE6E643F631A178F9012F7DC2D" - { - "Name" = "8:System.Net.Http.WebRequest.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.Net.Http.WebRequest.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_EE4304F39C76CEB0983A6CF8C010024E" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" - "ScatterAssemblies" - { - "_EE4304F39C76CEB0983A6CF8C010024E" - { - "Name" = "8:System.Buffers.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:System.Buffers.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F2D6E62EE7D98D355B14808A12DF76D3" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" - "ScatterAssemblies" - { - "_F2D6E62EE7D98D355B14808A12DF76D3" - { - "Name" = "8:netstandard.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:netstandard.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F7E88EC8E8A2301B3C7258BA6ADCC87E" - { - "AssemblyRegister" = "3:1" - "AssemblyIsInGAC" = "11:FALSE" - "AssemblyAsmDisplayName" = "8:zxing, Version=0.16.5.0, Culture=neutral, PublicKeyToken=4e88037ac681fe60, processorArchitecture=MSIL" - "ScatterAssemblies" - { - "_F7E88EC8E8A2301B3C7258BA6ADCC87E" - { - "Name" = "8:zxing.dll" - "Attributes" = "3:512" - } - } - "SourcePath" = "8:zxing.dll" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:TRUE" - "IsolateTo" = "8:" - } - "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_FCF5BAD554D54E2388D5CC52D81AB074" - { - "SourcePath" = "8:C:\\Windows\\System32\\msiexec.exe" - "TargetName" = "8:Uninstall.exe" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - } - } - "FileType" - { - } - "Folder" - { - "{1525181F-901A-416C-8A58-119130FE478E}:_88DDB92D32424505A131D6201E8D107E" - { - "Name" = "8:#1916" - "AlwaysCreate" = "11:FALSE" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Property" = "8:DesktopFolder" - "Folders" - { - } - } - "{1525181F-901A-416C-8A58-119130FE478E}:_9432A87B1392485680396ED8583E375C" - { - "Name" = "8:#1919" - "AlwaysCreate" = "11:FALSE" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Property" = "8:ProgramMenuFolder" - "Folders" - { - "{9EF0B969-E518-4E46-987F-47570745A589}:_ECDE81D7516142C3BE55DEA6DF0AB1B2" - { - "Name" = "8:v2rayN" - "AlwaysCreate" = "11:FALSE" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Property" = "8:_25ABF5E35AEC48C7BE470A920F4AE080" - "Folders" - { - } - } - } - } - "{3C67513D-01DD-4637-8A68-80971EB9504F}:_9C6E27CB3ED14F6086DAD010E9FDBD64" - { - "DefaultLocation" = "8:[ProgramFilesFolder]\\RAYFISH\\[ProductName]" - "Name" = "8:#1925" - "AlwaysCreate" = "11:FALSE" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Property" = "8:TARGETDIR" - "Folders" - { - "{9EF0B969-E518-4E46-987F-47570745A589}:_1059402958314C9691BC2AF6EC2D6E22" - { - "Name" = "8:statics" - "AlwaysCreate" = "11:FALSE" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Property" = "8:_D58D5E057D2348A0AF9C4938FE85E4BD" - "Folders" - { - } - } - "{9EF0B969-E518-4E46-987F-47570745A589}:_2DC91CA5BA4C46A38BC17AFD5D02A57B" - { - "Name" = "8:zh-Hans" - "AlwaysCreate" = "11:FALSE" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Property" = "8:_6D29D489F40C41E8A47F95939B47AE2D" - "Folders" - { - } - } - } - } - } - "LaunchCondition" - { - } - "Locator" - { - } - "MsiBootstrapper" - { - "LangId" = "3:1028" - "RequiresElevation" = "11:FALSE" - } - "Product" - { - "Name" = "8:Microsoft Visual Studio" - "ProductName" = "8:v2rayN" - "ProductCode" = "8:{E1B15FB9-CF7F-4F90-85B0-014D670C6BAD}" - "PackageCode" = "8:{FC2E6272-4DE5-46F4-9BCC-1A8E399752C6}" - "UpgradeCode" = "8:{ED35ECBD-C596-4611-A7F8-5E03F261CC93}" - "AspNetVersion" = "8:" - "RestartWWWService" = "11:FALSE" - "RemovePreviousVersions" = "11:TRUE" - "DetectNewerInstalledVersion" = "11:TRUE" - "InstallAllUsers" = "11:TRUE" - "ProductVersion" = "8:3.29.1" - "Manufacturer" = "8:RAYFISH, LLC" - "ARPHELPTELEPHONE" = "8:" - "ARPHELPLINK" = "8:" - "Title" = "8:Installer" - "Subject" = "8:" - "ARPCONTACT" = "8:RAYFISH, LLC" - "Keywords" = "8:" - "ARPCOMMENTS" = "8:自動化安裝您的 V2rayN 主程式" - "ARPURLINFOABOUT" = "8:https://linktofish.org" - "ARPPRODUCTICON" = "8:_DE60509B825B47069197C72DD2D9BCD1" - "ARPIconIndex" = "3:0" - "SearchPath" = "8:" - "UseSystemSearchPath" = "11:TRUE" - "TargetPlatform" = "3:0" - "PreBuildEvent" = "8:" - "PostBuildEvent" = "8:" - "RunPostBuildEvent" = "3:0" - } - "Registry" - { - "HKLM" - { - "Keys" - { - "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_FAD5FF8318444F9999D9EBD582E7BF11" - { - "Name" = "8:Software" - "Condition" = "8:" - "AlwaysCreate" = "11:FALSE" - "DeleteAtUninstall" = "11:FALSE" - "Transitive" = "11:FALSE" - "Keys" - { - "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_57AD563E694D45A2AE6B4A8E1C15E27B" - { - "Name" = "8:[Manufacturer]" - "Condition" = "8:" - "AlwaysCreate" = "11:FALSE" - "DeleteAtUninstall" = "11:FALSE" - "Transitive" = "11:FALSE" - "Keys" - { - } - "Values" - { - } - } - } - "Values" - { - } - } - } - } - "HKCU" - { - "Keys" - { - "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_00A8B155833C486FACBD93DAA0DA4FEA" - { - "Name" = "8:Software" - "Condition" = "8:" - "AlwaysCreate" = "11:FALSE" - "DeleteAtUninstall" = "11:FALSE" - "Transitive" = "11:FALSE" - "Keys" - { - "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_4A7FE9F2F3264A3386CC2CE87CA68294" - { - "Name" = "8:[Manufacturer]" - "Condition" = "8:" - "AlwaysCreate" = "11:FALSE" - "DeleteAtUninstall" = "11:FALSE" - "Transitive" = "11:FALSE" - "Keys" - { - } - "Values" - { - } - } - } - "Values" - { - } - } - } - } - "HKCR" - { - "Keys" - { - } - } - "HKU" - { - "Keys" - { - } - } - "HKPU" - { - "Keys" - { - } - } - } - "Sequences" - { - } - "Shortcut" - { - "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_0DBFB89CD100438D91D5FC65BCAFE798" - { - "Name" = "8:v2rayN" - "Arguments" = "8:" - "Description" = "8:高強度加密連接,兼顧您的隱私與自由" - "ShowCmd" = "3:1" - "IconIndex" = "3:0" - "Transitive" = "11:FALSE" - "Target" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "Folder" = "8:_88DDB92D32424505A131D6201E8D107E" - "WorkingFolder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Icon" = "8:_DE60509B825B47069197C72DD2D9BCD1" - "Feature" = "8:" - } - "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_3FBDE3C972264D4AB4B70F9D74880A8F" - { - "Name" = "8:v2rayN" - "Arguments" = "8:" - "Description" = "8:高強度加密連接,兼顧您的隱私與自由" - "ShowCmd" = "3:1" - "IconIndex" = "3:0" - "Transitive" = "11:FALSE" - "Target" = "8:_1F547B3C6B3240B39E582B3C208CDA63" - "Folder" = "8:_ECDE81D7516142C3BE55DEA6DF0AB1B2" - "WorkingFolder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Icon" = "8:_DE60509B825B47069197C72DD2D9BCD1" - "Feature" = "8:" - } - "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_4CF990D24DEF47B5842C040AC2DC726E" - { - "Name" = "8:移除 v2rayN" - "Arguments" = "8:/x {E1B15FB9-CF7F-4F90-85B0-014D670C6BAD}" - "Description" = "8:完整移除 v2rayN 應用程式" - "ShowCmd" = "3:1" - "IconIndex" = "3:0" - "Transitive" = "11:FALSE" - "Target" = "8:_FCF5BAD554D54E2388D5CC52D81AB074" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "WorkingFolder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Icon" = "8:_944F203DAF2148229B69C0944FE86F14" - "Feature" = "8:" - } - "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_AF36A4279B0348948E0B8CA373302AB4" - { - "Name" = "8:移除 v2rayN" - "Arguments" = "8:/x {E1B15FB9-CF7F-4F90-85B0-014D670C6BAD}" - "Description" = "8:完整移除 v2rayN 應用程式" - "ShowCmd" = "3:1" - "IconIndex" = "3:0" - "Transitive" = "11:FALSE" - "Target" = "8:_FCF5BAD554D54E2388D5CC52D81AB074" - "Folder" = "8:_ECDE81D7516142C3BE55DEA6DF0AB1B2" - "WorkingFolder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Icon" = "8:_944F203DAF2148229B69C0944FE86F14" - "Feature" = "8:" - } - } - "UserInterface" - { - "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_2F30AB9284BB4152917C9871CCA3988B" - { - "Name" = "8:#1901" - "Sequence" = "3:1" - "Attributes" = "3:2" - "Dialogs" - { - "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_43497BA1E8FB4FEF8CFEDD984A1AE8B1" - { - "Sequence" = "3:100" - "DisplayName" = "8:进度" - "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:\\VsdProgressDlg.wid" - "Properties" - { - "BannerBitmap" - { - "Name" = "8:BannerBitmap" - "DisplayName" = "8:#1001" - "Description" = "8:#1101" - "Type" = "3:8" - "ContextData" = "8:Bitmap" - "Attributes" = "3:4" - "Setting" = "3:2" - "Value" = "8:_BC5B00B2D58A4EDE8C5A987B48F21362" - "UsePlugInResources" = "11:TRUE" - } - "ShowProgress" - { - "Name" = "8:ShowProgress" - "DisplayName" = "8:#1009" - "Description" = "8:#1109" - "Type" = "3:5" - "ContextData" = "8:1;True=1;False=0" - "Attributes" = "3:0" - "Setting" = "3:0" - "Value" = "3:1" - "DefaultValue" = "3:1" - "UsePlugInResources" = "11:TRUE" - } - } - } - } - } - "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3D1F8B1B55B64A3CBDF4D1EBFDED2ECC" - { - "Name" = "8:#1900" - "Sequence" = "3:2" - "Attributes" = "3:1" - "Dialogs" - { - "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B64F9C374FC94E0FB1B5BCA2B2ABDB74" - { - "Sequence" = "3:100" - "DisplayName" = "8:欢迎使用" - "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" - "Properties" - { - "BannerBitmap" - { - "Name" = "8:BannerBitmap" - "DisplayName" = "8:#1001" - "Description" = "8:#1101" - "Type" = "3:8" - "ContextData" = "8:Bitmap" - "Attributes" = "3:4" - "Setting" = "3:2" - "Value" = "8:_BC5B00B2D58A4EDE8C5A987B48F21362" - "UsePlugInResources" = "11:TRUE" - } - "CopyrightWarning" - { - "Name" = "8:CopyrightWarning" - "DisplayName" = "8:#1002" - "Description" = "8:#1102" - "Type" = "3:3" - "ContextData" = "8:" - "Attributes" = "3:0" - "Setting" = "3:1" - "Value" = "8:#1202" - "DefaultValue" = "8:#1202" - "UsePlugInResources" = "11:TRUE" - } - "Welcome" - { - "Name" = "8:Welcome" - "DisplayName" = "8:#1003" - "Description" = "8:#1103" - "Type" = "3:3" - "ContextData" = "8:" - "Attributes" = "3:0" - "Setting" = "3:2" - "Value" = "8:正在將 [ProductName] 安裝到您的電腦。" - "DefaultValue" = "8:#1203" - "UsePlugInResources" = "11:TRUE" - } - } - } - } - } - "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_6CDA5ACDED4842E9B509743995CA4118" - { - "Name" = "8:#1901" - "Sequence" = "3:2" - "Attributes" = "3:2" - "Dialogs" - { - "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A2FD503C08804630B71A9C6D1B9F54AA" - { - "Sequence" = "3:100" - "DisplayName" = "8:进度" - "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:\\VsdAdminProgressDlg.wid" - "Properties" - { - "BannerBitmap" - { - "Name" = "8:BannerBitmap" - "DisplayName" = "8:#1001" - "Description" = "8:#1101" - "Type" = "3:8" - "ContextData" = "8:Bitmap" - "Attributes" = "3:4" - "Setting" = "3:2" - "Value" = "8:_BC5B00B2D58A4EDE8C5A987B48F21362" - "UsePlugInResources" = "11:TRUE" - } - "ShowProgress" - { - "Name" = "8:ShowProgress" - "DisplayName" = "8:#1009" - "Description" = "8:#1109" - "Type" = "3:5" - "ContextData" = "8:1;True=1;False=0" - "Attributes" = "3:0" - "Setting" = "3:0" - "Value" = "3:1" - "DefaultValue" = "3:1" - "UsePlugInResources" = "11:TRUE" - } - } - } - } - } - "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_A1C844B18DE4455D9386BCA4969DD58F" - { - "Name" = "8:#1900" - "Sequence" = "3:1" - "Attributes" = "3:1" - "Dialogs" - { - "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3CFF50E1123E4C18BAF42A1200FBC877" - { - "Sequence" = "3:100" - "DisplayName" = "8:欢迎使用" - "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:\\VsdWelcomeDlg.wid" - "Properties" - { - "BannerBitmap" - { - "Name" = "8:BannerBitmap" - "DisplayName" = "8:#1001" - "Description" = "8:#1101" - "Type" = "3:8" - "ContextData" = "8:Bitmap" - "Attributes" = "3:4" - "Setting" = "3:2" - "Value" = "8:_BC5B00B2D58A4EDE8C5A987B48F21362" - "UsePlugInResources" = "11:TRUE" - } - "CopyrightWarning" - { - "Name" = "8:CopyrightWarning" - "DisplayName" = "8:#1002" - "Description" = "8:#1102" - "Type" = "3:3" - "ContextData" = "8:" - "Attributes" = "3:0" - "Setting" = "3:1" - "Value" = "8:#1202" - "DefaultValue" = "8:#1202" - "UsePlugInResources" = "11:TRUE" - } - "Welcome" - { - "Name" = "8:Welcome" - "DisplayName" = "8:#1003" - "Description" = "8:#1103" - "Type" = "3:3" - "ContextData" = "8:" - "Attributes" = "3:0" - "Setting" = "3:2" - "Value" = "8:正在將 [ProductName] 安裝到您的電腦。" - "DefaultValue" = "8:#1203" - "UsePlugInResources" = "11:TRUE" - } - } - } - } - } - "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_CB2F56348B3C43CB9440833478ABB95D" - { - "UseDynamicProperties" = "11:FALSE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:\\VsdUserInterface.wim" - } - "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_CDC03FE4D0414FFBB8E9E7262EE86534" - { - "UseDynamicProperties" = "11:FALSE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:\\VsdBasicDialogs.wim" - } - "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_E9F73A5CB06645B6B375D4586DBFEB83" - { - "Name" = "8:#1902" - "Sequence" = "3:1" - "Attributes" = "3:3" - "Dialogs" - { - "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3533A8FAC2FA4555A1D832CFDCAA87A0" - { - "Sequence" = "3:100" - "DisplayName" = "8:已完成" - "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:\\VsdFinishedDlg.wid" - "Properties" - { - "BannerBitmap" - { - "Name" = "8:BannerBitmap" - "DisplayName" = "8:#1001" - "Description" = "8:#1101" - "Type" = "3:8" - "ContextData" = "8:Bitmap" - "Attributes" = "3:4" - "Setting" = "3:2" - "Value" = "8:_BC5B00B2D58A4EDE8C5A987B48F21362" - "UsePlugInResources" = "11:TRUE" - } - "UpdateText" - { - "Name" = "8:UpdateText" - "DisplayName" = "8:#1058" - "Description" = "8:#1158" - "Type" = "3:15" - "ContextData" = "8:" - "Attributes" = "3:0" - "Setting" = "3:2" - "Value" = "8:請使用系統内建的 Windows Update 功能來更新 .NET Framework。" - "DefaultValue" = "8:#1258" - "UsePlugInResources" = "11:TRUE" - } - } - } - } - } - "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_FF891BD4665646BC8F7D285BFA9627D0" - { - "Name" = "8:#1902" - "Sequence" = "3:2" - "Attributes" = "3:3" - "Dialogs" - { - "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7A940DC84FA046539379658C5B0FF9A7" - { - "Sequence" = "3:100" - "DisplayName" = "8:已完成" - "UseDynamicProperties" = "11:TRUE" - "IsDependency" = "11:FALSE" - "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" - "Properties" - { - "BannerBitmap" - { - "Name" = "8:BannerBitmap" - "DisplayName" = "8:#1001" - "Description" = "8:#1101" - "Type" = "3:8" - "ContextData" = "8:Bitmap" - "Attributes" = "3:4" - "Setting" = "3:2" - "Value" = "8:_BC5B00B2D58A4EDE8C5A987B48F21362" - "UsePlugInResources" = "11:TRUE" - } - } - } - } - } - } - "MergeModule" - { - } - "ProjectOutput" - { - "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1F547B3C6B3240B39E582B3C208CDA63" - { - "SourcePath" = "8:..\\v2rayN\\obj\\Debug\\v2rayN.exe" - "TargetName" = "8:" - "Tag" = "8:" - "Folder" = "8:_9C6E27CB3ED14F6086DAD010E9FDBD64" - "Condition" = "8:" - "Transitive" = "11:FALSE" - "Vital" = "11:TRUE" - "ReadOnly" = "11:FALSE" - "Hidden" = "11:FALSE" - "System" = "11:FALSE" - "Permanent" = "11:FALSE" - "SharedLegacy" = "11:FALSE" - "PackageAs" = "3:1" - "Register" = "3:1" - "Exclude" = "11:FALSE" - "IsDependency" = "11:FALSE" - "IsolateTo" = "8:" - "ProjectOutputGroupRegister" = "3:1" - "OutputConfiguration" = "8:" - "OutputGroupCanonicalName" = "8:Built" - "OutputProjectGuid" = "8:{0A9785E6-D256-4B73-9757-4EF59955FD1E}" - "ShowKeyOutput" = "11:TRUE" - "ExcludeFilters" - { - } - } - } - } -} diff --git a/LICENSE b/LICENSE new file mode 100755 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 079d620..9980a00 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ -# V2rayN for Windows -這是一個基於 [2dust/v2rayN](https://github.com/2dust/v2rayN) 的微調定制版本,需要原版的請前往原開發者主頁獲取。 -本軟體需要搭配 v2ray-Core 才可使用,v3.29.1 版本已内置 v2ray-core 4.34 版本,用戶安裝後直接可以運行。 +# v2rayN +## 介紹 +1. 基於 [2dust/v2rayN](https://github.com/2dust/v2rayN) 專案的原版代碼 +2. 將繁體中文介面語言優化為台灣習慣用語 +3. 移除軟體內的推廣內容及自動更新相關功能 + +## 分支說明 +1. zh_TW 分支為繁體中文版本 +2. zh_CN 分支為簡體中文版本 \ No newline at end of file diff --git a/v2rayN.sln b/v2rayN.sln deleted file mode 100644 index 3a99a04..0000000 --- a/v2rayN.sln +++ /dev/null @@ -1,51 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30907.101 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "v2rayN", "v2rayN\v2rayN.csproj", "{0A9785E6-D256-4B73-9757-4EF59955FD1E}" -EndProject -Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Installer", "Installer\Installer.vdproj", "{818D9054-3ABB-460B-A45A-BA1212B19ACD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Debug|x64.ActiveCfg = Debug|Any CPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Debug|x64.Build.0 = Debug|Any CPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Debug|x86.ActiveCfg = Debug|Any CPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Debug|x86.Build.0 = Debug|Any CPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|Any CPU.Build.0 = Release|Any CPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|x64.ActiveCfg = Release|x64 - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|x64.Build.0 = Release|x64 - {0A9785E6-D256-4B73-9757-4EF59955FD1E}.Release|x86.ActiveCfg = Release|Any CPU - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Debug|Any CPU.ActiveCfg = Debug - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Debug|Any CPU.Build.0 = Debug - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Debug|x64.ActiveCfg = Debug - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Debug|x64.Build.0 = Debug - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Debug|x86.ActiveCfg = Debug - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Debug|x86.Build.0 = Debug - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Release|Any CPU.ActiveCfg = Release - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Release|Any CPU.Build.0 = Release - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Release|x64.ActiveCfg = Release - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Release|x64.Build.0 = Release - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Release|x86.ActiveCfg = Release - {818D9054-3ABB-460B-A45A-BA1212B19ACD}.Release|x86.Build.0 = Release - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {56B88873-C9CC-4069-A1E5-DABD6C6E865E} - RESX_SortFileContentOnSave = True - EndGlobalSection -EndGlobal diff --git a/v2rayN.v11.suo b/v2rayN.v11.suo deleted file mode 100644 index 91d8fcf..0000000 Binary files a/v2rayN.v11.suo and /dev/null differ diff --git a/v2rayN/.gitattributes b/v2rayN/.gitattributes new file mode 100755 index 0000000..1ff0c42 --- /dev/null +++ b/v2rayN/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/v2rayN/.gitignore b/v2rayN/.gitignore new file mode 100755 index 0000000..9491a2f --- /dev/null +++ b/v2rayN/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/v2rayN/Base/HttpWebServer.cs b/v2rayN/Base/HttpWebServer.cs deleted file mode 100644 index 9fa7249..0000000 --- a/v2rayN/Base/HttpWebServer.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Net; -using System.Text; -using System.Threading; - -namespace v2rayN.Base -{ - public class HttpWebServer - { - private HttpListener _listener; - private Func _responderMethod; - - public HttpWebServer(string[] prefixes, Func method) - { - try - { - _listener = new HttpListener(); - - if (!HttpListener.IsSupported) - throw new NotSupportedException( - "Needs Windows XP SP2, Server 2003 or later."); - - // URI prefixes are required, for example - // "http://localhost:8080/index/". - if (prefixes == null || prefixes.Length == 0) - throw new ArgumentException("prefixes"); - - // A responder method is required - if (method == null) - throw new ArgumentException("method"); - - foreach (string s in prefixes) - _listener.Prefixes.Add(s); - - _responderMethod = method; - _listener.Start(); - - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - throw; - } - } - - public HttpWebServer(Func method, params string[] prefixes) - : this(prefixes, method) { } - - public void Run() - { - ThreadPool.QueueUserWorkItem((o) => - { - Utils.SaveLog("Webserver running..."); - try - { - while (_listener.IsListening) - { - ThreadPool.QueueUserWorkItem((c) => - { - HttpListenerContext ctx = c as HttpListenerContext; - try - { - string address = ctx.Request.LocalEndPoint.Address.ToString(); - Utils.SaveLog("Webserver Request " + address); - string rstr = _responderMethod(address); - byte[] buf = Encoding.UTF8.GetBytes(rstr); - ctx.Response.StatusCode = 200; - ctx.Response.ContentType = "application/x-ns-proxy-autoconfig"; - ctx.Response.ContentLength64 = buf.Length; - ctx.Response.OutputStream.Write(buf, 0, buf.Length); - } - catch - { - } // suppress any exceptions - finally - { - // always close the stream - ctx.Response.OutputStream.Close(); - } - }, _listener.GetContext()); - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } // suppress any exceptions - }); - } - - public void Stop() - { - if (_listener != null) - { - _listener.Stop(); - _listener.Close(); - _listener = null; - } - } - - } -} diff --git a/v2rayN/Base/HttpWebServerB.cs b/v2rayN/Base/HttpWebServerB.cs deleted file mode 100644 index fcbca1d..0000000 --- a/v2rayN/Base/HttpWebServerB.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System; -using System.IO; -using System.Net; -using System.Net.Sockets; -using System.Threading; - -namespace v2rayN.Base -{ - public class HttpWebServerB - { - private TcpListener listener; - private int port; - private Func _responderMethod; - - public HttpWebServerB(int port, Func method) - { - this.port = port; - this._responderMethod = method; - - Thread thread = new Thread(StartListen) - { - IsBackground = true - }; - thread.Start(); - } - - public void Stop() - { - if (listener != null) - { - listener.Stop(); - listener = null; - } - } - - private void StartListen() - { - try - { - listener = new TcpListener(IPAddress.Any, port); - listener.Start(); - Utils.SaveLog("WebserverB running..."); - - while (true) - { - if (!listener.Pending()) - { - Thread.Sleep(100); - continue; - } - - TcpClient socket = listener.AcceptTcpClient(); - Thread thread = new Thread(new ParameterizedThreadStart(ProcessThread)) - { - IsBackground = true - }; - thread.Start(socket); - Thread.Sleep(1); - } - } - catch - { - Utils.SaveLog("WebserverB start fail."); - } - } - private void ProcessThread(object obj) - { - try - { - TcpClient socket = obj as TcpClient; - - BufferedStream inputStream = new BufferedStream(socket.GetStream()); - StreamWriter outputStream = new StreamWriter(new BufferedStream(socket.GetStream())); - if (inputStream.CanRead) - { - string data = ReadStream(inputStream); - - if (data.Contains("/pac/")) - { - if (_responderMethod != null) - { - string address = ((IPEndPoint)socket.Client.LocalEndPoint).Address.ToString(); - Utils.SaveLog("WebserverB Request " + address); - string pac = _responderMethod(address); - - if (inputStream.CanWrite) - { - WriteStream(outputStream, pac); - } - } - } - } - - outputStream.BaseStream.Flush(); - inputStream = null; - outputStream = null; - socket.Close(); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - private string ReadStream(Stream inputStream) - { - int nextchar; - string data = ""; - while (true) - { - nextchar = inputStream.ReadByte(); - if (nextchar == '\n') - { - break; - } - if (nextchar == '\r') - { - continue; - } - if (nextchar == -1) - { - Thread.Sleep(1); - continue; - }; - data += Convert.ToChar(nextchar); - } - return data; - } - - private void WriteStream(StreamWriter outputStream, string pac) - { - string content_type = "application/x-ns-proxy-autoconfig"; - outputStream.WriteLine("HTTP/1.1 200 OK"); - outputStream.WriteLine(String.Format("Content-Type:{0}", content_type)); - outputStream.WriteLine("Connection: close"); - outputStream.WriteLine(""); - outputStream.WriteLine(pac); - outputStream.Flush(); - } - } -} diff --git a/v2rayN/Base/ListViewFlickerFree.cs b/v2rayN/Base/ListViewFlickerFree.cs deleted file mode 100644 index a113a7b..0000000 --- a/v2rayN/Base/ListViewFlickerFree.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Drawing; -using System.Windows.Forms; - -namespace v2rayN.Base -{ - class ListViewFlickerFree : ListView - { - public ListViewFlickerFree() - { - SetStyle(ControlStyles.OptimizedDoubleBuffer - | ControlStyles.AllPaintingInWmPaint - , true); - UpdateStyles(); - } - - - public void AutoResizeColumns() - { - try - { - this.SuspendLayout(); - Graphics graphics = this.CreateGraphics(); - - // 原生 ColumnHeaderAutoResizeStyle.ColumnContent 将忽略列头宽度 - this.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); - - for (int i = 0; i < this.Columns.Count; i++) - { - ColumnHeader c = this.Columns[i]; - int cWidth = c.Width; - string MaxStr = ""; - Font font = this.Items[0].SubItems[0].Font; - - foreach (ListViewItem item in this.Items) - { - // 整行视作相同字形,不单独计算每个单元格 - font = item.SubItems[i].Font; - string str = item.SubItems[i].Text; - if (str.Length > MaxStr.Length) // 未考虑非等宽问题 - MaxStr = str; - } - int strWidth = (int)graphics.MeasureString(MaxStr, font).Width; - c.Width = System.Math.Max(cWidth, strWidth); - } - this.ResumeLayout(); - } - catch { } - } - } -} \ No newline at end of file diff --git a/v2rayN/Base/StringEx.cs b/v2rayN/Base/StringEx.cs deleted file mode 100644 index 4054410..0000000 --- a/v2rayN/Base/StringEx.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using System.Linq; - -namespace v2rayN.Base -{ - static class StringEx - { - public static bool IsNullOrEmpty(this string value) - { - return string.IsNullOrEmpty(value); - } - - public static bool IsNullOrWhiteSpace(this string value) - { - return string.IsNullOrWhiteSpace(value); - } - - public static bool BeginWithAny(this string s, IEnumerable chars) - { - if (s.IsNullOrEmpty()) return false; - return chars.Contains(s[0]); - } - - public static bool IsWhiteSpace(this string value) - { - foreach (char c in value) - { - if (char.IsWhiteSpace(c)) continue; - - return false; - } - return true; - } - - - public static IEnumerable NonWhiteSpaceLines(this TextReader reader) - { - string line; - while ((line = reader.ReadLine()) != null) - { - if (line.IsWhiteSpace()) continue; - yield return line; - } - } - - public static string TrimEx(this string value) - { - return value == null ? string.Empty : value.Trim(); - } - } -} diff --git a/v2rayN/Base/WebClientEx.cs b/v2rayN/Base/WebClientEx.cs deleted file mode 100644 index 096826c..0000000 --- a/v2rayN/Base/WebClientEx.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Net; - -namespace v2rayN.Base -{ - class WebClientEx : WebClient - { - public int Timeout - { - get; set; - } - public WebClientEx(int timeout = 3000) - { - Timeout = timeout; - } - - protected override WebRequest GetWebRequest(Uri address) - { - HttpWebRequest request; - request = (HttpWebRequest)base.GetWebRequest(address); - request.Timeout = Timeout; - request.ReadWriteTimeout = Timeout; - //request.AllowAutoRedirect = false; - //request.AllowWriteStreamBuffering = true; - - request.ServicePoint.BindIPEndPointDelegate = (servicePoint, remoteEndPoint, retryCount) => - { - if (remoteEndPoint.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6) - return new IPEndPoint(IPAddress.IPv6Any, 0); - else - return new IPEndPoint(IPAddress.Any, 0); - }; - - return request; - } - } -} diff --git a/v2rayN/Forms/AddServer2Form.Designer.cs b/v2rayN/Forms/AddServer2Form.Designer.cs deleted file mode 100644 index 0e407a4..0000000 --- a/v2rayN/Forms/AddServer2Form.Designer.cs +++ /dev/null @@ -1,140 +0,0 @@ -namespace v2rayN.Forms -{ - partial class AddServer2Form - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer2Form)); - this.btnClose = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.txtAddress = new System.Windows.Forms.TextBox(); - this.label13 = new System.Windows.Forms.Label(); - this.txtRemarks = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.label1 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.groupBox1.SuspendLayout(); - this.panel2.SuspendLayout(); - this.SuspendLayout(); - // - // btnClose - // - resources.ApplyResources(this.btnClose, "btnClose"); - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnClose.Name = "btnClose"; - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // groupBox1 - // - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Controls.Add(this.txtAddress); - this.groupBox1.Controls.Add(this.label13); - this.groupBox1.Controls.Add(this.txtRemarks); - this.groupBox1.Controls.Add(this.label6); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // txtAddress - // - resources.ApplyResources(this.txtAddress, "txtAddress"); - this.txtAddress.Name = "txtAddress"; - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // - // txtRemarks - // - resources.ApplyResources(this.txtRemarks, "txtRemarks"); - this.txtRemarks.Name = "txtRemarks"; - // - // label6 - // - resources.ApplyResources(this.label6, "label6"); - this.label6.Name = "label6"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // panel2 - // - resources.ApplyResources(this.panel2, "panel2"); - this.panel2.Controls.Add(this.btnClose); - this.panel2.Controls.Add(this.btnOK); - this.panel2.Name = "panel2"; - // - // btnOK - // - resources.ApplyResources(this.btnOK, "btnOK"); - this.btnOK.Name = "btnOK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // panel1 - // - resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Name = "panel1"; - // - // AddServer2Form - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Name = "AddServer2Form"; - this.Load += new System.EventHandler(this.AddServer2Form_Load); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.panel2.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.TextBox txtRemarks; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.TextBox txtAddress; - } -} \ No newline at end of file diff --git a/v2rayN/Forms/AddServer2Form.cs b/v2rayN/Forms/AddServer2Form.cs deleted file mode 100644 index 999b0c2..0000000 --- a/v2rayN/Forms/AddServer2Form.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class AddServer2Form : BaseServerForm - { - - public AddServer2Form() - { - InitializeComponent(); - } - - private void AddServer2Form_Load(object sender, EventArgs e) - { - if (EditIndex >= 0) - { - BindingServer(); - } - else - { - ClearServer(); - } - } - - /// - /// 绑定数据 - /// - private void BindingServer() - { - vmessItem = config.vmess[EditIndex]; - txtRemarks.Text = vmessItem.remarks; - txtAddress.Text = vmessItem.address; - txtAddress.ReadOnly = true; - } - - - /// - /// 清除设置 - /// - private void ClearServer() - { - txtRemarks.Text = ""; - } - - private void btnOK_Click(object sender, EventArgs e) - { - string remarks = txtRemarks.Text; - if (Utils.IsNullOrEmpty(remarks)) - { - UI.Show(UIRes.I18N("PleaseFillRemarks")); - return; - } - vmessItem.remarks = remarks; - - if (ConfigHandler.EditCustomServer(ref config, vmessItem, EditIndex) == 0) - { - this.DialogResult = DialogResult.OK; - } - else - { - UI.ShowWarning(UIRes.I18N("OperationFailed")); - } - } - - private void btnClose_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - } - } -} diff --git a/v2rayN/Forms/AddServer2Form.resx b/v2rayN/Forms/AddServer2Form.resx deleted file mode 100644 index 0e6e73f..0000000 --- a/v2rayN/Forms/AddServer2Form.resx +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 6, 12 - - - 611, 271 - - - - True - - - 編輯自定義節點 - - - 396, 17 - - - 75, 23 - - - 4 - - - &取消 - - - 303, 17 - - - 75, 23 - - - 5 - - - &確認 - - - - Fill - - - 0, 10 - - - 611, 201 - - - 3 - - - 節點伺服器 - - - True - - - 12, 62 - - - 83, 12 - - - 0 - - - 節點地址 URL - - - True - - - 446, 26 - - - 113, 12 - - - 22 - - - *請手動輸入 - - - True - - - 12, 27 - - - 83, 12 - - - 10 - - - 節點別名 (自定義) - - - Top - - - 0, 0 - - - 611, 10 - - - 6 - - - Bottom - - - 0, 211 - - - 611, 60 - - - 7 - - - 127, 62 - - - True - - - 432, 104 - - - 23 - - - 127, 23 - - - 313, 21 - - - 11 - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServer3Form.Designer.cs b/v2rayN/Forms/AddServer3Form.Designer.cs deleted file mode 100644 index 0631242..0000000 --- a/v2rayN/Forms/AddServer3Form.Designer.cs +++ /dev/null @@ -1,231 +0,0 @@ -namespace v2rayN.Forms -{ - partial class AddServer3Form - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer3Form)); - this.btnClose = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.label13 = new System.Windows.Forms.Label(); - this.cmbSecurity = new System.Windows.Forms.ComboBox(); - this.txtRemarks = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.txtId = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.txtPort = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.txtAddress = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.menuServer = new System.Windows.Forms.MenuStrip(); - this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.menuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem(); - this.groupBox1.SuspendLayout(); - this.panel2.SuspendLayout(); - this.menuServer.SuspendLayout(); - this.SuspendLayout(); - // - // btnClose - // - resources.ApplyResources(this.btnClose, "btnClose"); - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnClose.Name = "btnClose"; - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // groupBox1 - // - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Controls.Add(this.label13); - this.groupBox1.Controls.Add(this.cmbSecurity); - this.groupBox1.Controls.Add(this.txtRemarks); - this.groupBox1.Controls.Add(this.label6); - this.groupBox1.Controls.Add(this.label5); - this.groupBox1.Controls.Add(this.txtId); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.txtPort); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.txtAddress); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // - // cmbSecurity - // - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); - this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbSecurity.FormattingEnabled = true; - this.cmbSecurity.Items.AddRange(new object[] { - resources.GetString("cmbSecurity.Items"), - resources.GetString("cmbSecurity.Items1"), - resources.GetString("cmbSecurity.Items2"), - resources.GetString("cmbSecurity.Items3"), - resources.GetString("cmbSecurity.Items4"), - resources.GetString("cmbSecurity.Items5"), - resources.GetString("cmbSecurity.Items6"), - resources.GetString("cmbSecurity.Items7")}); - this.cmbSecurity.Name = "cmbSecurity"; - // - // txtRemarks - // - resources.ApplyResources(this.txtRemarks, "txtRemarks"); - this.txtRemarks.Name = "txtRemarks"; - // - // label6 - // - resources.ApplyResources(this.label6, "label6"); - this.label6.Name = "label6"; - // - // label5 - // - resources.ApplyResources(this.label5, "label5"); - this.label5.Name = "label5"; - // - // txtId - // - resources.ApplyResources(this.txtId, "txtId"); - this.txtId.Name = "txtId"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // txtPort - // - resources.ApplyResources(this.txtPort, "txtPort"); - this.txtPort.Name = "txtPort"; - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // txtAddress - // - resources.ApplyResources(this.txtAddress, "txtAddress"); - this.txtAddress.Name = "txtAddress"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // panel2 - // - resources.ApplyResources(this.panel2, "panel2"); - this.panel2.Controls.Add(this.btnClose); - this.panel2.Controls.Add(this.btnOK); - this.panel2.Name = "panel2"; - // - // btnOK - // - resources.ApplyResources(this.btnOK, "btnOK"); - this.btnOK.Name = "btnOK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // panel1 - // - resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Name = "panel1"; - // - // menuServer - // - resources.ApplyResources(this.menuServer, "menuServer"); - this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItem1}); - this.menuServer.Name = "menuServer"; - // - // MenuItem1 - // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); - this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuItemImportClipboard}); - this.MenuItem1.Name = "MenuItem1"; - // - // menuItemImportClipboard - // - resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard"); - this.menuItemImportClipboard.Name = "menuItemImportClipboard"; - this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click); - // - // AddServer3Form - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); - this.Controls.Add(this.menuServer); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MinimizeBox = true; - this.Name = "AddServer3Form"; - this.Load += new System.EventHandler(this.AddServer3Form_Load); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.panel2.ResumeLayout(false); - this.menuServer.ResumeLayout(false); - this.menuServer.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.TextBox txtRemarks; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox txtId; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtPort; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox txtAddress; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox cmbSecurity; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.MenuStrip menuServer; - private System.Windows.Forms.ToolStripMenuItem MenuItem1; - private System.Windows.Forms.ToolStripMenuItem menuItemImportClipboard; - } -} \ No newline at end of file diff --git a/v2rayN/Forms/AddServer3Form.cs b/v2rayN/Forms/AddServer3Form.cs deleted file mode 100644 index 8113a78..0000000 --- a/v2rayN/Forms/AddServer3Form.cs +++ /dev/null @@ -1,140 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class AddServer3Form : BaseServerForm - { - - public AddServer3Form() - { - InitializeComponent(); - } - - private void AddServer3Form_Load(object sender, EventArgs e) - { - if (EditIndex >= 0) - { - vmessItem = config.vmess[EditIndex]; - BindingServer(); - } - else - { - vmessItem = new VmessItem(); - ClearServer(); - } - } - - /// - /// 绑定数据 - /// - private void BindingServer() - { - - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - cmbSecurity.Text = vmessItem.security; - txtRemarks.Text = vmessItem.remarks; - } - - - /// - /// 清除设置 - /// - private void ClearServer() - { - txtAddress.Text = ""; - txtPort.Text = ""; - txtId.Text = ""; - cmbSecurity.Text = Global.DefaultSecurity; - txtRemarks.Text = ""; - } - - private void btnOK_Click(object sender, EventArgs e) - { - string address = txtAddress.Text; - string port = txtPort.Text; - string id = txtId.Text; - string security = cmbSecurity.Text; - string remarks = txtRemarks.Text; - - if (Utils.IsNullOrEmpty(address)) - { - UI.Show(UIRes.I18N("FillServerAddress")); - return; - } - if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port)) - { - UI.Show(UIRes.I18N("FillCorrectServerPort")); - return; - } - if (Utils.IsNullOrEmpty(id)) - { - UI.Show(UIRes.I18N("FillPassword")); - return; - } - if (Utils.IsNullOrEmpty(security)) - { - UI.Show(UIRes.I18N("PleaseSelectEncryption")); - return; - } - - vmessItem.address = address; - vmessItem.port = Utils.ToInt(port); - vmessItem.id = id; - vmessItem.security = security; - vmessItem.remarks = remarks; - - if (ConfigHandler.AddShadowsocksServer(ref config, vmessItem, EditIndex) == 0) - { - this.DialogResult = DialogResult.OK; - } - else - { - UI.ShowWarning(UIRes.I18N("OperationFailed")); - } - } - private void btnClose_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - } - - - #region 导入配置 - - /// - /// 从剪贴板导入URL - /// - /// - /// - private void menuItemImportClipboard_Click(object sender, EventArgs e) - { - ImportConfig(); - } - - private void ImportConfig() - { - ClearServer(); - - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); - if (vmessItem == null) - { - UI.ShowWarning(msg); - return; - } - - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - cmbSecurity.Text = vmessItem.security; - txtId.Text = vmessItem.id; - txtRemarks.Text = vmessItem.remarks; - } - - #endregion - - - } -} diff --git a/v2rayN/Forms/AddServer3Form.resx b/v2rayN/Forms/AddServer3Form.resx deleted file mode 100644 index ec1f218..0000000 --- a/v2rayN/Forms/AddServer3Form.resx +++ /dev/null @@ -1,606 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 113, 12 - - - 53, 12 - - - label6 - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 547, 25 - - - - 11 - - - $this - - - groupBox1 - - - 8 - - - - Bottom - - - groupBox1 - - - panel1 - - - 3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemImportClipboard - - - Fill - - - groupBox1 - - - 8 - - - 89, 12 - - - 127, 27 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - aes-256-cfb - - - 6 - - - 5 - - - 303, 17 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 - - - MenuItem1 - - - 0 - - - 359, 21 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 396, 17 - - - 8 - - - 0, 0 - - - label1 - - - 547, 60 - - - 0, 25 - - - groupBox1 - - - True - - - 22 - - - 162, 21 - - - 127, 123 - - - 127, 91 - - - groupBox1 - - - panel2 - - - 5 - - - 2 - - - groupBox1 - - - True - - - label5 - - - txtId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 12, 31 - - - groupBox1 - - - 1 - - - AddServer3Form - - - 194, 21 - - - groupBox1 - - - 127, 59 - - - 0 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 71, 12 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 12, 124 - - - 2 - - - 10 - - - txtPort - - - aes-128-cfb - - - 547, 10 - - - 0, 35 - - - 5 - - - 235, 22 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 編輯或新增 [Shadowsocks] 節點 - - - &確認 - - - chacha20 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - btnClose - - - panel2 - - - 0 - - - 3 - - - 12, 93 - - - 194, 20 - - - 10 - - - chacha20-ietf - - - True - - - panel2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 194, 21 - - - 1 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6 - - - 1 - - - 7 - - - label13 - - - aes-256-gcm - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - label3 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 231 - - - 9 - - - aes-128-gcm - - - 4 - - - &取消 - - - True - - - 6, 12 - - - True - - - menuServer - - - txtAddress - - - 127, 154 - - - chacha20-poly1305 - - - 95, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 7 - - - label2 - - - 12, 62 - - - 547, 291 - - - chacha20-ietf-poly1305 - - - btnOK - - - cmbSecurity - - - $this - - - 547, 196 - - - 3 - - - 75, 23 - - - 6 - - - 337, 158 - - - 65, 12 - - - 4 - - - 2 - - - 1 - - - * - - - 75, 23 - - - groupBox1 - - - txtRemarks - - - 12, 155 - - - True - - - 278, 21 - - - Top - - - 3 - - - True - - - 17, 17 - - - 節點資訊 - - - 節點地址 - - - *請手動輸入 - - - 連線端口 - - - 密碼 - - - 加密方式 - - - 節點別名 (自定義) - - - 匯入節點設定檔 - - - 從剪貼簿匯入節點 URL - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServer3Form.zh-Hans.resx b/v2rayN/Forms/AddServer3Form.zh-Hans.resx deleted file mode 100644 index 27655e0..0000000 --- a/v2rayN/Forms/AddServer3Form.zh-Hans.resx +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 取消(&C) - - - 服务器 - - - *请手动填写 - - - - 83, 12 - - - 别名 (自定义) - - - 53, 12 - - - 加密方式 - - - 29, 12 - - - 密码 - - - 65, 12 - - - 服务器端口 - - - 65, 12 - - - 服务器地址 - - - 确定(&O) - - - 92, 21 - - - 导入配置文件 - - - 171, 22 - - - 从剪贴板导入 URL - - - 编辑或添加 [Shadowsocks] 服务器 - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServer4Form.Designer.cs b/v2rayN/Forms/AddServer4Form.Designer.cs deleted file mode 100644 index bdcd694..0000000 --- a/v2rayN/Forms/AddServer4Form.Designer.cs +++ /dev/null @@ -1,220 +0,0 @@ -namespace v2rayN.Forms -{ - partial class AddServer4Form - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer4Form)); - this.btnClose = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.txtSecurity = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.txtId = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label13 = new System.Windows.Forms.Label(); - this.txtRemarks = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.txtPort = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.txtAddress = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.menuServer = new System.Windows.Forms.MenuStrip(); - this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.menuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem(); - this.groupBox1.SuspendLayout(); - this.panel2.SuspendLayout(); - this.menuServer.SuspendLayout(); - this.SuspendLayout(); - // - // btnClose - // - resources.ApplyResources(this.btnClose, "btnClose"); - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnClose.Name = "btnClose"; - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // groupBox1 - // - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Controls.Add(this.txtSecurity); - this.groupBox1.Controls.Add(this.label4); - this.groupBox1.Controls.Add(this.txtId); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.label13); - this.groupBox1.Controls.Add(this.txtRemarks); - this.groupBox1.Controls.Add(this.label6); - this.groupBox1.Controls.Add(this.txtPort); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.txtAddress); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // txtSecurity - // - resources.ApplyResources(this.txtSecurity, "txtSecurity"); - this.txtSecurity.Name = "txtSecurity"; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.Name = "label4"; - // - // txtId - // - resources.ApplyResources(this.txtId, "txtId"); - this.txtId.Name = "txtId"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // - // txtRemarks - // - resources.ApplyResources(this.txtRemarks, "txtRemarks"); - this.txtRemarks.Name = "txtRemarks"; - // - // label6 - // - resources.ApplyResources(this.label6, "label6"); - this.label6.Name = "label6"; - // - // txtPort - // - resources.ApplyResources(this.txtPort, "txtPort"); - this.txtPort.Name = "txtPort"; - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // txtAddress - // - resources.ApplyResources(this.txtAddress, "txtAddress"); - this.txtAddress.Name = "txtAddress"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // panel2 - // - resources.ApplyResources(this.panel2, "panel2"); - this.panel2.Controls.Add(this.btnClose); - this.panel2.Controls.Add(this.btnOK); - this.panel2.Name = "panel2"; - // - // btnOK - // - resources.ApplyResources(this.btnOK, "btnOK"); - this.btnOK.Name = "btnOK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // panel1 - // - resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Name = "panel1"; - // - // menuServer - // - resources.ApplyResources(this.menuServer, "menuServer"); - this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItem1}); - this.menuServer.Name = "menuServer"; - // - // MenuItem1 - // - resources.ApplyResources(this.MenuItem1, "MenuItem1"); - this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuItemImportClipboard}); - this.MenuItem1.Name = "MenuItem1"; - // - // menuItemImportClipboard - // - resources.ApplyResources(this.menuItemImportClipboard, "menuItemImportClipboard"); - this.menuItemImportClipboard.Name = "menuItemImportClipboard"; - this.menuItemImportClipboard.Click += new System.EventHandler(this.menuItemImportClipboard_Click); - // - // AddServer4Form - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); - this.Controls.Add(this.menuServer); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MinimizeBox = true; - this.Name = "AddServer4Form"; - this.Load += new System.EventHandler(this.AddServer4Form_Load); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.panel2.ResumeLayout(false); - this.menuServer.ResumeLayout(false); - this.menuServer.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.TextBox txtRemarks; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox txtPort; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox txtAddress; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.MenuStrip menuServer; - private System.Windows.Forms.ToolStripMenuItem MenuItem1; - private System.Windows.Forms.ToolStripMenuItem menuItemImportClipboard; - private System.Windows.Forms.TextBox txtId; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtSecurity; - private System.Windows.Forms.Label label4; - } -} \ No newline at end of file diff --git a/v2rayN/Forms/AddServer4Form.cs b/v2rayN/Forms/AddServer4Form.cs deleted file mode 100644 index 23ec6aa..0000000 --- a/v2rayN/Forms/AddServer4Form.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class AddServer4Form : BaseServerForm - { - - public AddServer4Form() - { - InitializeComponent(); - } - - private void AddServer4Form_Load(object sender, EventArgs e) - { - if (EditIndex >= 0) - { - vmessItem = config.vmess[EditIndex]; - BindingServer(); - } - else - { - vmessItem = new VmessItem(); - ClearServer(); - } - } - - /// - /// 绑定数据 - /// - private void BindingServer() - { - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - txtSecurity.Text = vmessItem.security; - txtRemarks.Text = vmessItem.remarks; - } - - - /// - /// 清除设置 - /// - private void ClearServer() - { - txtAddress.Text = ""; - txtPort.Text = ""; - txtId.Text = ""; - txtSecurity.Text = ""; - txtRemarks.Text = ""; - } - - private void btnOK_Click(object sender, EventArgs e) - { - string address = txtAddress.Text; - string port = txtPort.Text; - string id = txtId.Text; - string security = txtSecurity.Text; - string remarks = txtRemarks.Text; - - if (Utils.IsNullOrEmpty(address)) - { - UI.Show(UIRes.I18N("FillServerAddress")); - return; - } - if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port)) - { - UI.Show(UIRes.I18N("FillCorrectServerPort")); - return; - } - - vmessItem.address = address; - vmessItem.port = Utils.ToInt(port); - vmessItem.id = id; - vmessItem.security = security; - vmessItem.remarks = remarks; - - if (ConfigHandler.AddSocksServer(ref config, vmessItem, EditIndex) == 0) - { - this.DialogResult = DialogResult.OK; - } - else - { - UI.ShowWarning(UIRes.I18N("OperationFailed")); - } - } - private void btnClose_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - } - - - #region 导入配置 - - /// - /// 从剪贴板导入URL - /// - /// - /// - private void menuItemImportClipboard_Click(object sender, EventArgs e) - { - ImportConfig(); - } - - private void ImportConfig() - { - ClearServer(); - - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); - if (vmessItem == null) - { - UI.ShowWarning(msg); - return; - } - - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtSecurity.Text = vmessItem.security; - txtId.Text = vmessItem.id; - txtRemarks.Text = vmessItem.remarks; - } - - #endregion - - - } -} diff --git a/v2rayN/Forms/AddServer4Form.resx b/v2rayN/Forms/AddServer4Form.resx deleted file mode 100644 index 423f993..0000000 --- a/v2rayN/Forms/AddServer4Form.resx +++ /dev/null @@ -1,588 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 113, 12 - - - 113, 12 - - - label6 - - - groupBox1 - - - - True - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 547, 25 - - - 11 - - - - Bottom - - - panel1 - - - 3 - - - 密碼 (可選) - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuItemImportClipboard - - - Fill - - - groupBox1 - - - 8 - - - 89, 12 - - - 127, 27 - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 - - - 編輯或新增 [Socks] 節點 - - - NoControl - - - 10 - - - 24 - - - 303, 17 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 23 - - - MenuItem1 - - - 0 - - - 359, 21 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 396, 17 - - - 8 - - - 0, 0 - - - label1 - - - 547, 60 - - - 0, 25 - - - groupBox1 - - - True - - - 22 - - - 162, 21 - - - True - - - 127, 120 - - - panel2 - - - groupBox1 - - - 5 - - - 2 - - - 26 - - - groupBox1 - - - menuServer - - - groupBox1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl - - - txtId - - - 235, 22 - - - 12, 93 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 12, 31 - - - groupBox1 - - - 1 - - - AddServer4Form - - - 194, 21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 127, 58 - - - 1 - - - 0 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 71, 12 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - groupBox1 - - - txtPort - - - panel2 - - - 547, 10 - - - * - - - 2 - - - txtSecurity - - - $this - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label4 - - - btnClose - - - 278, 21 - - - 0 - - - 3 - - - 12, 124 - - - 2 - - - 10 - - - btnOK - - - 194, 21 - - - 1 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6 - - - 1 - - - 7 - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - label3 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 231 - - - 9 - - - True - - - 6, 12 - - - 25 - - - txtAddress - - - 127, 151 - - - 95, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 7 - - - label2 - - - 12, 62 - - - 547, 291 - - - $this - - - 547, 196 - - - 6 - - - 0 - - - 75, 23 - - - 3 - - - 127, 89 - - - 337, 155 - - - True - - - 4 - - - 5 - - - 75, 23 - - - 89, 12 - - - groupBox1 - - - groupBox1 - - - 0, 35 - - - txtRemarks - - - 12, 155 - - - True - - - 用戶名 (可選) - - - 278, 21 - - - Top - - - 3 - - - True - - - 17, 17 - - - &取消 - - - &確認 - - - 節點資訊 - - - 節點地址 - - - *請手動輸入 - - - 連線端口 - - - 節點別名 (自定義) - - - 匯入節點設定檔 - - - 從剪貼簿匯入節點 URL - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServer4Form.zh-Hans.resx b/v2rayN/Forms/AddServer4Form.zh-Hans.resx deleted file mode 100644 index 9d8de4d..0000000 --- a/v2rayN/Forms/AddServer4Form.zh-Hans.resx +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 取消(&C) - - - 服务器 - - - - 194, 21 - - - 77, 12 - - - 用户名 (可选) - - - 194, 21 - - - 65, 12 - - - 密码 (可选) - - - *请手动填写 - - - 83, 12 - - - 别名 (自定义) - - - 65, 12 - - - 服务器端口 - - - 65, 12 - - - 服务器地址 - - - 确定(&O) - - - 92, 21 - - - 导入配置文件 - - - 171, 22 - - - 从剪贴板导入 URL - - - 编辑或添加 [Socks] 服务器 - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServer5Form.Designer.cs b/v2rayN/Forms/AddServer5Form.Designer.cs deleted file mode 100644 index 423b738..0000000 --- a/v2rayN/Forms/AddServer5Form.Designer.cs +++ /dev/null @@ -1,513 +0,0 @@ -namespace v2rayN.Forms -{ - partial class AddServer5Form - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer5Form)); - this.btnClose = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.cmbFlow = new System.Windows.Forms.ComboBox(); - this.label4 = new System.Windows.Forms.Label(); - this.btnGUID = new System.Windows.Forms.Button(); - this.label13 = new System.Windows.Forms.Label(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.label24 = new System.Windows.Forms.Label(); - this.label23 = new System.Windows.Forms.Label(); - this.panTlsMore = new System.Windows.Forms.Panel(); - this.label21 = new System.Windows.Forms.Label(); - this.cmbAllowInsecure = new System.Windows.Forms.ComboBox(); - this.label9 = new System.Windows.Forms.Label(); - this.label20 = new System.Windows.Forms.Label(); - this.txtPath = new System.Windows.Forms.TextBox(); - this.cmbNetwork = new System.Windows.Forms.ComboBox(); - this.label7 = new System.Windows.Forms.Label(); - this.label19 = new System.Windows.Forms.Label(); - this.label18 = new System.Windows.Forms.Label(); - this.label17 = new System.Windows.Forms.Label(); - this.label16 = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); - this.label15 = new System.Windows.Forms.Label(); - this.cmbStreamSecurity = new System.Windows.Forms.ComboBox(); - this.label12 = new System.Windows.Forms.Label(); - this.txtRequestHost = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.cmbHeaderType = new System.Windows.Forms.ComboBox(); - this.label8 = new System.Windows.Forms.Label(); - this.cmbSecurity = new System.Windows.Forms.ComboBox(); - this.txtRemarks = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.txtId = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.txtPort = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.txtAddress = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.menuServer = new System.Windows.Forms.MenuStrip(); - this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.MenuItemImportClient = new System.Windows.Forms.ToolStripMenuItem(); - this.MenuItemImportServer = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.MenuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.panTlsMore.SuspendLayout(); - this.panel2.SuspendLayout(); - this.menuServer.SuspendLayout(); - this.SuspendLayout(); - // - // btnClose - // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - resources.ApplyResources(this.btnClose, "btnClose"); - this.btnClose.Name = "btnClose"; - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.cmbFlow); - this.groupBox1.Controls.Add(this.label4); - this.groupBox1.Controls.Add(this.btnGUID); - this.groupBox1.Controls.Add(this.label13); - this.groupBox1.Controls.Add(this.groupBox2); - this.groupBox1.Controls.Add(this.label8); - this.groupBox1.Controls.Add(this.cmbSecurity); - this.groupBox1.Controls.Add(this.txtRemarks); - this.groupBox1.Controls.Add(this.label6); - this.groupBox1.Controls.Add(this.label5); - this.groupBox1.Controls.Add(this.txtId); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.txtPort); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.txtAddress); - this.groupBox1.Controls.Add(this.label1); - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // cmbFlow - // - this.cmbFlow.FormattingEnabled = true; - this.cmbFlow.Items.AddRange(new object[] { - resources.GetString("cmbFlow.Items"), - resources.GetString("cmbFlow.Items1"), - resources.GetString("cmbFlow.Items2"), - resources.GetString("cmbFlow.Items3"), - resources.GetString("cmbFlow.Items4")}); - resources.ApplyResources(this.cmbFlow, "cmbFlow"); - this.cmbFlow.Name = "cmbFlow"; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.Name = "label4"; - // - // btnGUID - // - resources.ApplyResources(this.btnGUID, "btnGUID"); - this.btnGUID.Name = "btnGUID"; - this.btnGUID.UseVisualStyleBackColor = true; - this.btnGUID.Click += new System.EventHandler(this.btnGUID_Click); - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.label24); - this.groupBox2.Controls.Add(this.label23); - this.groupBox2.Controls.Add(this.panTlsMore); - this.groupBox2.Controls.Add(this.label9); - this.groupBox2.Controls.Add(this.label20); - this.groupBox2.Controls.Add(this.txtPath); - this.groupBox2.Controls.Add(this.cmbNetwork); - this.groupBox2.Controls.Add(this.label7); - this.groupBox2.Controls.Add(this.label19); - this.groupBox2.Controls.Add(this.label18); - this.groupBox2.Controls.Add(this.label17); - this.groupBox2.Controls.Add(this.label16); - this.groupBox2.Controls.Add(this.label14); - this.groupBox2.Controls.Add(this.label15); - this.groupBox2.Controls.Add(this.cmbStreamSecurity); - this.groupBox2.Controls.Add(this.label12); - this.groupBox2.Controls.Add(this.txtRequestHost); - this.groupBox2.Controls.Add(this.label11); - this.groupBox2.Controls.Add(this.label10); - this.groupBox2.Controls.Add(this.cmbHeaderType); - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; - // - // label24 - // - resources.ApplyResources(this.label24, "label24"); - this.label24.Name = "label24"; - // - // label23 - // - resources.ApplyResources(this.label23, "label23"); - this.label23.Name = "label23"; - // - // panTlsMore - // - this.panTlsMore.Controls.Add(this.label21); - this.panTlsMore.Controls.Add(this.cmbAllowInsecure); - resources.ApplyResources(this.panTlsMore, "panTlsMore"); - this.panTlsMore.Name = "panTlsMore"; - // - // label21 - // - resources.ApplyResources(this.label21, "label21"); - this.label21.Name = "label21"; - // - // cmbAllowInsecure - // - this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbAllowInsecure.FormattingEnabled = true; - this.cmbAllowInsecure.Items.AddRange(new object[] { - resources.GetString("cmbAllowInsecure.Items"), - resources.GetString("cmbAllowInsecure.Items1"), - resources.GetString("cmbAllowInsecure.Items2")}); - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); - this.cmbAllowInsecure.Name = "cmbAllowInsecure"; - // - // label9 - // - resources.ApplyResources(this.label9, "label9"); - this.label9.Name = "label9"; - // - // label20 - // - resources.ApplyResources(this.label20, "label20"); - this.label20.Name = "label20"; - // - // txtPath - // - resources.ApplyResources(this.txtPath, "txtPath"); - this.txtPath.Name = "txtPath"; - // - // cmbNetwork - // - this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbNetwork.FormattingEnabled = true; - this.cmbNetwork.Items.AddRange(new object[] { - resources.GetString("cmbNetwork.Items"), - resources.GetString("cmbNetwork.Items1"), - resources.GetString("cmbNetwork.Items2"), - resources.GetString("cmbNetwork.Items3"), - resources.GetString("cmbNetwork.Items4")}); - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); - this.cmbNetwork.Name = "cmbNetwork"; - this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); - // - // label7 - // - resources.ApplyResources(this.label7, "label7"); - this.label7.Name = "label7"; - // - // label19 - // - resources.ApplyResources(this.label19, "label19"); - this.label19.Name = "label19"; - // - // label18 - // - resources.ApplyResources(this.label18, "label18"); - this.label18.Name = "label18"; - // - // label17 - // - resources.ApplyResources(this.label17, "label17"); - this.label17.Name = "label17"; - // - // label16 - // - resources.ApplyResources(this.label16, "label16"); - this.label16.Name = "label16"; - // - // label14 - // - resources.ApplyResources(this.label14, "label14"); - this.label14.Name = "label14"; - // - // label15 - // - resources.ApplyResources(this.label15, "label15"); - this.label15.Name = "label15"; - // - // cmbStreamSecurity - // - this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbStreamSecurity.FormattingEnabled = true; - this.cmbStreamSecurity.Items.AddRange(new object[] { - resources.GetString("cmbStreamSecurity.Items"), - resources.GetString("cmbStreamSecurity.Items1"), - resources.GetString("cmbStreamSecurity.Items2")}); - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); - this.cmbStreamSecurity.Name = "cmbStreamSecurity"; - this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); - // - // label12 - // - resources.ApplyResources(this.label12, "label12"); - this.label12.Name = "label12"; - // - // txtRequestHost - // - resources.ApplyResources(this.txtRequestHost, "txtRequestHost"); - this.txtRequestHost.Name = "txtRequestHost"; - // - // label11 - // - resources.ApplyResources(this.label11, "label11"); - this.label11.Name = "label11"; - // - // label10 - // - resources.ApplyResources(this.label10, "label10"); - this.label10.Name = "label10"; - // - // cmbHeaderType - // - this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbHeaderType.FormattingEnabled = true; - this.cmbHeaderType.Items.AddRange(new object[] { - resources.GetString("cmbHeaderType.Items"), - resources.GetString("cmbHeaderType.Items1"), - resources.GetString("cmbHeaderType.Items2"), - resources.GetString("cmbHeaderType.Items3"), - resources.GetString("cmbHeaderType.Items4"), - resources.GetString("cmbHeaderType.Items5"), - resources.GetString("cmbHeaderType.Items6")}); - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); - this.cmbHeaderType.Name = "cmbHeaderType"; - // - // label8 - // - resources.ApplyResources(this.label8, "label8"); - this.label8.Name = "label8"; - // - // cmbSecurity - // - this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple; - this.cmbSecurity.FormattingEnabled = true; - this.cmbSecurity.Items.AddRange(new object[] { - resources.GetString("cmbSecurity.Items")}); - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); - this.cmbSecurity.Name = "cmbSecurity"; - // - // txtRemarks - // - resources.ApplyResources(this.txtRemarks, "txtRemarks"); - this.txtRemarks.Name = "txtRemarks"; - // - // label6 - // - resources.ApplyResources(this.label6, "label6"); - this.label6.Name = "label6"; - // - // label5 - // - resources.ApplyResources(this.label5, "label5"); - this.label5.Name = "label5"; - // - // txtId - // - resources.ApplyResources(this.txtId, "txtId"); - this.txtId.Name = "txtId"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // txtPort - // - resources.ApplyResources(this.txtPort, "txtPort"); - this.txtPort.Name = "txtPort"; - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // txtAddress - // - resources.ApplyResources(this.txtAddress, "txtAddress"); - this.txtAddress.Name = "txtAddress"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // panel2 - // - this.panel2.Controls.Add(this.btnClose); - this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); - this.panel2.Name = "panel2"; - // - // btnOK - // - resources.ApplyResources(this.btnOK, "btnOK"); - this.btnOK.Name = "btnOK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // panel1 - // - resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Name = "panel1"; - // - // menuServer - // - this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); - this.menuServer.Name = "menuServer"; - // - // MenuItem1 - // - this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItemImportClient, - this.MenuItemImportServer, - this.toolStripSeparator1, - this.MenuItemImportClipboard}); - this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); - // - // MenuItemImportClient - // - this.MenuItemImportClient.Name = "MenuItemImportClient"; - resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); - this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); - // - // MenuItemImportServer - // - this.MenuItemImportServer.Name = "MenuItemImportServer"; - resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); - this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); - // - // MenuItemImportClipboard - // - this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; - resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); - this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); - // - // AddServer5Form - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); - this.Controls.Add(this.menuServer); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Name = "AddServer5Form"; - this.Load += new System.EventHandler(this.AddServer5Form_Load); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.panTlsMore.ResumeLayout(false); - this.panTlsMore.PerformLayout(); - this.panel2.ResumeLayout(false); - this.menuServer.ResumeLayout(false); - this.menuServer.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.TextBox txtRemarks; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox txtId; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtPort; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox txtAddress; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox cmbSecurity; - private System.Windows.Forms.ComboBox cmbNetwork; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.TextBox txtRequestHost; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.ComboBox cmbHeaderType; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.MenuStrip menuServer; - private System.Windows.Forms.ToolStripMenuItem MenuItem1; - private System.Windows.Forms.ToolStripMenuItem MenuItemImportClient; - private System.Windows.Forms.ToolStripMenuItem MenuItemImportServer; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.ComboBox cmbStreamSecurity; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem MenuItemImportClipboard; - private System.Windows.Forms.Button btnGUID; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Label label17; - private System.Windows.Forms.Label label18; - private System.Windows.Forms.Label label19; - private System.Windows.Forms.TextBox txtPath; - private System.Windows.Forms.Label label20; - private System.Windows.Forms.Label label21; - private System.Windows.Forms.ComboBox cmbAllowInsecure; - private System.Windows.Forms.Panel panTlsMore; - private System.Windows.Forms.Label label24; - private System.Windows.Forms.Label label23; - private System.Windows.Forms.ComboBox cmbFlow; - private System.Windows.Forms.Label label4; - } -} \ No newline at end of file diff --git a/v2rayN/Forms/AddServer5Form.cs b/v2rayN/Forms/AddServer5Form.cs deleted file mode 100644 index d426e5c..0000000 --- a/v2rayN/Forms/AddServer5Form.cs +++ /dev/null @@ -1,286 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class AddServer5Form : BaseServerForm - { - - public AddServer5Form() - { - InitializeComponent(); - } - - private void AddServer5Form_Load(object sender, EventArgs e) - { - if (EditIndex >= 0) - { - vmessItem = config.vmess[EditIndex]; - BindingServer(); - } - else - { - vmessItem = new VmessItem(); - ClearServer(); - } - } - - /// - /// 绑定数据 - /// - private void BindingServer() - { - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - cmbFlow.Text = vmessItem.flow; - cmbSecurity.Text = vmessItem.security; - cmbNetwork.Text = vmessItem.network; - txtRemarks.Text = vmessItem.remarks; - - cmbHeaderType.Text = vmessItem.headerType; - txtRequestHost.Text = vmessItem.requestHost; - txtPath.Text = vmessItem.path; - cmbStreamSecurity.Text = vmessItem.streamSecurity; - cmbAllowInsecure.Text = vmessItem.allowInsecure; - } - - - /// - /// 清除设置 - /// - private void ClearServer() - { - txtAddress.Text = ""; - txtPort.Text = ""; - txtId.Text = ""; - cmbFlow.Text = ""; - cmbSecurity.Text = Global.None; - cmbNetwork.Text = Global.DefaultNetwork; - txtRemarks.Text = ""; - - cmbHeaderType.Text = Global.None; - txtRequestHost.Text = ""; - cmbStreamSecurity.Text = ""; - cmbAllowInsecure.Text = ""; - txtPath.Text = ""; - } - - - private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e) - { - SetHeaderType(); - } - - /// - /// 设置伪装选项 - /// - private void SetHeaderType() - { - cmbHeaderType.Items.Clear(); - - string network = cmbNetwork.Text; - if (Utils.IsNullOrEmpty(network)) - { - cmbHeaderType.Items.Add(Global.None); - return; - } - - cmbHeaderType.Items.Add(Global.None); - if (network.Equals(Global.DefaultNetwork)) - { - cmbHeaderType.Items.Add(Global.TcpHeaderHttp); - } - else if (network.Equals("kcp") || network.Equals("quic")) - { - cmbHeaderType.Items.Add("srtp"); - cmbHeaderType.Items.Add("utp"); - cmbHeaderType.Items.Add("wechat-video"); - cmbHeaderType.Items.Add("dtls"); - cmbHeaderType.Items.Add("wireguard"); - } - else - { - } - cmbHeaderType.Text = Global.None; - } - - private void btnOK_Click(object sender, EventArgs e) - { - string address = txtAddress.Text; - string port = txtPort.Text; - string id = txtId.Text; - string flow = cmbFlow.Text; - string security = cmbSecurity.Text; - string network = cmbNetwork.Text; - string remarks = txtRemarks.Text; - - string headerType = cmbHeaderType.Text; - string requestHost = txtRequestHost.Text; - string path = txtPath.Text; - string streamSecurity = cmbStreamSecurity.Text; - string allowInsecure = cmbAllowInsecure.Text; - - if (Utils.IsNullOrEmpty(address)) - { - UI.Show(UIRes.I18N("FillServerAddress")); - return; - } - if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port)) - { - UI.Show(UIRes.I18N("FillCorrectServerPort")); - return; - } - if (Utils.IsNullOrEmpty(id)) - { - UI.Show(UIRes.I18N("FillUUID")); - return; - } - - - vmessItem.address = address; - vmessItem.port = Utils.ToInt(port); - vmessItem.id = id; - vmessItem.flow = flow; - vmessItem.security = security; - vmessItem.network = network; - vmessItem.remarks = remarks; - - vmessItem.headerType = headerType; - vmessItem.requestHost = requestHost.Replace(" ", ""); - vmessItem.path = path.Replace(" ", ""); - vmessItem.streamSecurity = streamSecurity; - vmessItem.allowInsecure = allowInsecure; - - if (ConfigHandler.AddVlessServer(ref config, vmessItem, EditIndex) == 0) - { - this.DialogResult = DialogResult.OK; - } - else - { - UI.ShowWarning(UIRes.I18N("OperationFailed")); - } - } - - private void btnGUID_Click(object sender, EventArgs e) - { - txtId.Text = Utils.GetGUID(); - } - - private void btnClose_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - } - - private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e) - { - string security = cmbStreamSecurity.Text; - if (Utils.IsNullOrEmpty(security)) - { - panTlsMore.Hide(); - } - else - { - panTlsMore.Show(); - } - } - - #region 导入客户端/服务端配置 - - /// - /// 导入客户端 - /// - /// - /// - private void MenuItemImportClient_Click(object sender, EventArgs e) - { - MenuItemImport(1); - } - - /// - /// 导入服务端 - /// - /// - /// - private void MenuItemImportServer_Click(object sender, EventArgs e) - { - MenuItemImport(2); - } - - private void MenuItemImport(int type) - { - ClearServer(); - - OpenFileDialog fileDialog = new OpenFileDialog - { - Multiselect = false, - Filter = "Config|*.json|All|*.*" - }; - if (fileDialog.ShowDialog() != DialogResult.OK) - { - return; - } - string fileName = fileDialog.FileName; - if (Utils.IsNullOrEmpty(fileName)) - { - return; - } - string msg; - VmessItem vmessItem; - if (type.Equals(1)) - { - vmessItem = V2rayConfigHandler.ImportFromClientConfig(fileName, out msg); - } - else - { - vmessItem = V2rayConfigHandler.ImportFromServerConfig(fileName, out msg); - } - if (vmessItem == null) - { - UI.ShowWarning(msg); - return; - } - - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - txtRemarks.Text = vmessItem.remarks; - cmbNetwork.Text = vmessItem.network; - cmbHeaderType.Text = vmessItem.headerType; - txtRequestHost.Text = vmessItem.requestHost; - txtPath.Text = vmessItem.path; - cmbStreamSecurity.Text = vmessItem.streamSecurity; - } - - /// - /// 从剪贴板导入URL - /// - /// - /// - private void MenuItemImportClipboard_Click(object sender, EventArgs e) - { - ClearServer(); - - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); - if (vmessItem == null) - { - UI.ShowWarning(msg); - return; - } - - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - txtRemarks.Text = vmessItem.remarks; - cmbNetwork.Text = vmessItem.network; - cmbHeaderType.Text = vmessItem.headerType; - txtRequestHost.Text = vmessItem.requestHost; - txtPath.Text = vmessItem.path; - cmbStreamSecurity.Text = vmessItem.streamSecurity; - } - #endregion - - } -} diff --git a/v2rayN/Forms/AddServer5Form.resx b/v2rayN/Forms/AddServer5Form.resx deleted file mode 100644 index 648a2a5..0000000 --- a/v2rayN/Forms/AddServer5Form.resx +++ /dev/null @@ -1,1386 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 396, 17 - - - 75, 23 - - - - 4 - - - &取消 - - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 0 - - - - - - xtls-rprx-origin - - - xtls-rprx-origin-udp443 - - - xtls-rprx-direct - - - xtls-rprx-direct-udp443 - - - 127, 123 - - - 211, 20 - - - 24 - - - cmbFlow - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - True - - - - NoControl - - - 12, 127 - - - 29, 12 - - - 25 - - - 流控 (flow) - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - 411, 91 - - - 75, 23 - - - 23 - - - &創建 - - - btnGUID - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 2 - - - True - - - 353, 189 - - - 113, 12 - - - 22 - - - *請手動輸入 - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - True - - - NoControl - - - 529, 207 - - - 119, 12 - - - 35 - - - 3) QUIC 加密密鑰 / Kcp seed - - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - True - - - NoControl - - - 465, 140 - - - 89, 12 - - - 34 - - - 4) QUIC 加密方式 - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - True - - - NoControl - - - 12, 11 - - - 83, 12 - - - 31 - - - 跳過證書驗證 (allowInsecure) - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - - - - true - - - false - - - 107, 7 - - - 91, 20 - - - 30 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - 284, 232 - - - 338, 35 - - - 33 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - True - - - 353, 32 - - - 113, 12 - - - 15 - - - *預設 tcp,請根據服務端選擇 - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - True - - - 464, 124 - - - 203, 12 - - - 29 - - - 3) h2 host 中間以逗號 (,) 隔開 - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - 127, 169 - - - True - - - 396, 54 - - - 28 - - - txtPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 5 - - - tcp - - - kcp - - - ws - - - h2 - - - quic - - - 192, 28 - - - 143, 20 - - - 12 - - - cmbNetwork - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 6 - - - True - - - 9, 32 - - - 167, 12 - - - 13 - - - 傳輸協議 (network) - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 7 - - - True - - - 9, 169 - - - 29, 12 - - - 27 - - - 路徑 (path) - - - label19 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 8 - - - True - - - 529, 189 - - - 59, 12 - - - 26 - - - 2) h2 path - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 9 - - - True - - - 464, 109 - - - 59, 12 - - - 25 - - - 2) ws host - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 10 - - - True - - - 529, 172 - - - 59, 12 - - - 24 - - - 1) ws path - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 11 - - - True - - - 464, 94 - - - 215, 12 - - - 23 - - - 1) http host 中間以逗號 (,) 隔開 - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 12 - - - True - - - 9, 243 - - - 23, 12 - - - 22 - - - TLS - - - label15 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 13 - - - - - - tls - - - xtls - - - 127, 239 - - - 143, 20 - - - 21 - - - cmbStreamSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 14 - - - True - - - 282, 68 - - - 299, 12 - - - 20 - - - *根據偽裝類型選擇,預設為 none - - - label12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 15 - - - 158, 100 - - - True - - - 300, 53 - - - 16 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 16 - - - True - - - 9, 68 - - - 95, 12 - - - 19 - - - 偽裝類型 (type) - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 17 - - - True - - - 9, 100 - - - 143, 12 - - - 17 - - - 偽裝域名 (host) - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 18 - - - none - - - http - - - srtp - - - utp - - - wechat-video - - - dtls - - - wireguard - - - 127, 64 - - - 143, 20 - - - 18 - - - cmbHeaderType - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 19 - - - Bottom - - - 3, 215 - - - 723, 281 - - - 21 - - - 底層傳輸協議 - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - True - - - NoControl - - - 353, 157 - - - 119, 12 - - - 14 - - - *非空 (none) - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 5 - - - none - - - 127, 154 - - - 211, 20 - - - 6 - - - cmbSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 6 - - - 127, 185 - - - 211, 21 - - - 11 - - - txtRemarks - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 7 - - - True - - - 12, 189 - - - 95, 12 - - - 10 - - - 節點別名 (自定義) - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 8 - - - True - - - 12, 158 - - - 65, 12 - - - 8 - - - 加密 (encryption) - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 9 - - - 127, 91 - - - 278, 21 - - - 5 - - - txtId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 10 - - - True - - - 12, 95 - - - 53, 12 - - - 4 - - - 用戶 ID (UUID) - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 - - - 127, 59 - - - 143, 21 - - - 3 - - - txtPort - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 12 - - - True - - - 12, 63 - - - 29, 12 - - - 2 - - - 端口 (port) - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 13 - - - 127, 27 - - - 359, 21 - - - 1 - - - txtAddress - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 14 - - - True - - - 12, 31 - - - 47, 12 - - - 0 - - - 節點地址 - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 15 - - - Fill - - - 0, 35 - - - 729, 499 - - - 3 - - - 節點資訊 - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 303, 17 - - - 75, 23 - - - 5 - - - &確認 - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - Bottom - - - 0, 534 - - - 729, 60 - - - 7 - - - panel2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Top - - - 0, 25 - - - 729, 10 - - - 6 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 17, 17 - - - 237, 22 - - - 237, 22 - - - 234, 6 - - - 237, 22 - - - 162, 21 - - - 0, 0 - - - 729, 25 - - - 8 - - - menuServer - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - True - - - 25 - - - 6, 12 - - - 729, 594 - - - 編輯或新增 [VLESS] 節點 - - - MenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportClient - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportClipboard - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AddServer5Form - - - v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - 匯入節點設定檔 - - - 匯入客戶端設定檔 - - - 從剪貼簿匯入節點 URL - - - 匯入服務端設定檔 - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServer5Form.zh-Hans.resx b/v2rayN/Forms/AddServer5Form.zh-Hans.resx deleted file mode 100644 index d5f9a45..0000000 --- a/v2rayN/Forms/AddServer5Form.zh-Hans.resx +++ /dev/null @@ -1,344 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 取消(&C) - - - 服务器 - - - - 220, 20 - - - 65, 12 - - - 流控 (flow) - - - 生成(&G) - - - *请手动填写 - - - 底层传输方式 (transport) - - - 149, 12 - - - 3) QUIC 加密密钥 / Kcp seed - - - 95, 12 - - - 4) QUIC 加密方式 - - - 167, 12 - - - 跳过证书验证 (allowInsecure) - - - 223, 7 - - - 353, 36 - - - 143, 12 - - - *默认 tcp,选错会无法连接 - - - 149, 12 - - - 3) h2 host 中间逗号 (,) 隔开 - - - 127, 168 - - - 127, 32 - - - 220, 20 - - - 9, 36 - - - 107, 12 - - - 传输协议 (network) - - - 9, 168 - - - 65, 12 - - - 路径 (path) - - - 161, 12 - - - 1) http host 中间逗号 (,) 隔开 - - - 9, 241 - - - 107, 12 - - - 底层传输安全 (tls) - - - 127, 237 - - - 282, 71 - - - 197, 12 - - - *tcp 或 kcp 或 QUIC 伪装类型,默认 none - - - 127, 102 - - - 334, 51 - - - 9, 71 - - - 89, 12 - - - 伪装类型 (type) - - - 9, 102 - - - 89, 12 - - - 伪装域名 (host) - - - 127, 67 - - - 353, 158 - - - 71, 12 - - - *非空 (none) - - - 220, 20 - - - 220, 21 - - - 83, 12 - - - 别名 (remarks) - - - 101, 12 - - - 加密 (encryption) - - - 65, 12 - - - 用户ID (id) - - - 65, 12 - - - 端口 (port) - - - 83, 12 - - - 地址 (address) - - - 确定(&O) - - - - False - - - 92, 21 - - - 导入配置文件 - - - 171, 22 - - - 导入客户端配置 - - - 171, 22 - - - 导入服务端配置 - - - 168, 6 - - - 171, 22 - - - 从剪贴板导入 URL - - - 编辑或添加 [VLESS] 服务器 - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServer6Form.Designer.cs b/v2rayN/Forms/AddServer6Form.Designer.cs deleted file mode 100644 index f14d46e..0000000 --- a/v2rayN/Forms/AddServer6Form.Designer.cs +++ /dev/null @@ -1,189 +0,0 @@ -namespace v2rayN.Forms -{ - partial class AddServer6Form - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServer6Form)); - this.btnClose = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.label4 = new System.Windows.Forms.Label(); - this.txtRequestHost = new System.Windows.Forms.TextBox(); - this.label13 = new System.Windows.Forms.Label(); - this.txtRemarks = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.txtId = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.txtPort = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.txtAddress = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.groupBox1.SuspendLayout(); - this.panel2.SuspendLayout(); - this.SuspendLayout(); - // - // btnClose - // - resources.ApplyResources(this.btnClose, "btnClose"); - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnClose.Name = "btnClose"; - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // groupBox1 - // - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Controls.Add(this.label4); - this.groupBox1.Controls.Add(this.txtRequestHost); - this.groupBox1.Controls.Add(this.label13); - this.groupBox1.Controls.Add(this.txtRemarks); - this.groupBox1.Controls.Add(this.label6); - this.groupBox1.Controls.Add(this.txtId); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.txtPort); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.txtAddress); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.Name = "label4"; - // - // txtRequestHost - // - resources.ApplyResources(this.txtRequestHost, "txtRequestHost"); - this.txtRequestHost.Name = "txtRequestHost"; - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // - // txtRemarks - // - resources.ApplyResources(this.txtRemarks, "txtRemarks"); - this.txtRemarks.Name = "txtRemarks"; - // - // label6 - // - resources.ApplyResources(this.label6, "label6"); - this.label6.Name = "label6"; - // - // txtId - // - resources.ApplyResources(this.txtId, "txtId"); - this.txtId.Name = "txtId"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // txtPort - // - resources.ApplyResources(this.txtPort, "txtPort"); - this.txtPort.Name = "txtPort"; - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // txtAddress - // - resources.ApplyResources(this.txtAddress, "txtAddress"); - this.txtAddress.Name = "txtAddress"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // panel2 - // - resources.ApplyResources(this.panel2, "panel2"); - this.panel2.Controls.Add(this.btnClose); - this.panel2.Controls.Add(this.btnOK); - this.panel2.Name = "panel2"; - // - // btnOK - // - resources.ApplyResources(this.btnOK, "btnOK"); - this.btnOK.Name = "btnOK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // panel1 - // - resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Name = "panel1"; - // - // AddServer6Form - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MinimizeBox = true; - this.Name = "AddServer6Form"; - this.Load += new System.EventHandler(this.AddServer6Form_Load); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.panel2.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.TextBox txtRemarks; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox txtId; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtPort; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox txtAddress; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox txtRequestHost; - } -} \ No newline at end of file diff --git a/v2rayN/Forms/AddServer6Form.cs b/v2rayN/Forms/AddServer6Form.cs deleted file mode 100644 index 6911714..0000000 --- a/v2rayN/Forms/AddServer6Form.cs +++ /dev/null @@ -1,100 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class AddServer6Form : BaseServerForm - { - public AddServer6Form() - { - InitializeComponent(); - } - - private void AddServer6Form_Load(object sender, EventArgs e) - { - if (EditIndex >= 0) - { - vmessItem = config.vmess[EditIndex]; - BindingServer(); - } - else - { - vmessItem = new VmessItem(); - ClearServer(); - } - } - - /// - /// 绑定数据 - /// - private void BindingServer() - { - - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - txtRequestHost.Text = vmessItem.requestHost; - txtRemarks.Text = vmessItem.remarks; - } - - - /// - /// 清除设置 - /// - private void ClearServer() - { - txtAddress.Text = ""; - txtPort.Text = ""; - txtId.Text = ""; - txtRequestHost.Text = ""; - txtRemarks.Text = ""; - } - - private void btnOK_Click(object sender, EventArgs e) - { - string address = txtAddress.Text; - string port = txtPort.Text; - string id = txtId.Text; - string requestHost = txtRequestHost.Text; - string remarks = txtRemarks.Text; - - if (Utils.IsNullOrEmpty(address)) - { - UI.Show(UIRes.I18N("FillServerAddress")); - return; - } - if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port)) - { - UI.Show(UIRes.I18N("FillCorrectServerPort")); - return; - } - if (Utils.IsNullOrEmpty(id)) - { - UI.Show(UIRes.I18N("FillPassword")); - return; - } - - vmessItem.address = address; - vmessItem.port = Utils.ToInt(port); - vmessItem.id = id; - vmessItem.requestHost = requestHost.Replace(" ", ""); - vmessItem.remarks = remarks; - - if (ConfigHandler.AddTrojanServer(ref config, vmessItem, EditIndex) == 0) - { - this.DialogResult = DialogResult.OK; - } - else - { - UI.ShowWarning(UIRes.I18N("OperationFailed")); - } - } - private void btnClose_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - } - - } -} diff --git a/v2rayN/Forms/AddServer6Form.resx b/v2rayN/Forms/AddServer6Form.resx deleted file mode 100644 index 3d261da..0000000 --- a/v2rayN/Forms/AddServer6Form.resx +++ /dev/null @@ -1,537 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - - 3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Bottom - - - NoControl - - - txtPort - - - True - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - btnOK - - - txtRemarks - - - - 194, 21 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AddServer6Form - - - label1 - - - 359, 21 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 12, 155 - - - Fill - - - 53, 12 - - - 127, 123 - - - 194, 21 - - - groupBox1 - - - 6, 12 - - - 396, 17 - - - True - - - label3 - - - 127, 154 - - - True - - - 6 - - - 7 - - - groupBox1 - - - 113, 12 - - - 12, 93 - - - 10 - - - 3 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - txtRequestHost - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 547, 60 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 359, 21 - - - 編輯或新增 [Trojan] 節點 - - - 359, 21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - * - - - groupBox1 - - - 11 - - - 10 - - - 71, 12 - - - 24 - - - label4 - - - txtId - - - 303, 17 - - - $this - - - 75, 23 - - - btnClose - - - label6 - - - 5 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 75, 23 - - - 1 - - - txtAddress - - - groupBox1 - - - Top - - - 0, 10 - - - 4 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 547, 221 - - - 2 - - - groupBox1 - - - 4 - - - 3 - - - 127, 27 - - - 5 - - - groupBox1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 23 - - - 127, 59 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - True - - - 89, 12 - - - groupBox1 - - - 0 - - - 547, 10 - - - 8 - - - 12, 31 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 4 - - - 337, 158 - - - True - - - 12, 62 - - - 127, 91 - - - 12, 126 - - - 7 - - - $this - - - 59, 12 - - - 1 - - - groupBox1 - - - 0, 0 - - - 1 - - - label13 - - - 5 - - - 95, 12 - - - label2 - - - 2 - - - panel2 - - - 0, 231 - - - 22 - - - 9 - - - 547, 291 - - - 0 - - - v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - groupBox1 - - - $this - - - 6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - panel2 - - - panel1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - True - - - &取消 - - - &確認 - - - 節點資訊 - - - 節點地址 - - - *請手動輸入 - - - 連線端口 - - - 密碼 - - - 域名 (SNI) - - - 節點別名 (自定義) - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServer6Form.zh-Hans.resx b/v2rayN/Forms/AddServer6Form.zh-Hans.resx deleted file mode 100644 index 21db4f7..0000000 --- a/v2rayN/Forms/AddServer6Form.zh-Hans.resx +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 取消(&C) - - - 服务器 - - - 域名 (SNI) - - - *请手动填写 - - - - 83, 12 - - - 别名 (自定义) - - - 29, 12 - - - 密码 - - - 65, 12 - - - 服务器端口 - - - 65, 12 - - - 服务器地址 - - - 确定(&O) - - - 编辑或添加 [Trojan] 服务器 - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServerForm.Designer.cs b/v2rayN/Forms/AddServerForm.Designer.cs deleted file mode 100644 index a96b32a..0000000 --- a/v2rayN/Forms/AddServerForm.Designer.cs +++ /dev/null @@ -1,508 +0,0 @@ -namespace v2rayN.Forms -{ - partial class AddServerForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AddServerForm)); - this.btnClose = new System.Windows.Forms.Button(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.btnGUID = new System.Windows.Forms.Button(); - this.label13 = new System.Windows.Forms.Label(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.label24 = new System.Windows.Forms.Label(); - this.label23 = new System.Windows.Forms.Label(); - this.panTlsMore = new System.Windows.Forms.Panel(); - this.label21 = new System.Windows.Forms.Label(); - this.cmbAllowInsecure = new System.Windows.Forms.ComboBox(); - this.label9 = new System.Windows.Forms.Label(); - this.label20 = new System.Windows.Forms.Label(); - this.txtPath = new System.Windows.Forms.TextBox(); - this.cmbNetwork = new System.Windows.Forms.ComboBox(); - this.label7 = new System.Windows.Forms.Label(); - this.label19 = new System.Windows.Forms.Label(); - this.label18 = new System.Windows.Forms.Label(); - this.label17 = new System.Windows.Forms.Label(); - this.label16 = new System.Windows.Forms.Label(); - this.label14 = new System.Windows.Forms.Label(); - this.label15 = new System.Windows.Forms.Label(); - this.cmbStreamSecurity = new System.Windows.Forms.ComboBox(); - this.label12 = new System.Windows.Forms.Label(); - this.txtRequestHost = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.cmbHeaderType = new System.Windows.Forms.ComboBox(); - this.label8 = new System.Windows.Forms.Label(); - this.cmbSecurity = new System.Windows.Forms.ComboBox(); - this.txtRemarks = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.txtAlterId = new System.Windows.Forms.TextBox(); - this.label4 = new System.Windows.Forms.Label(); - this.txtId = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.txtPort = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.txtAddress = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.menuServer = new System.Windows.Forms.MenuStrip(); - this.MenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.MenuItemImportClient = new System.Windows.Forms.ToolStripMenuItem(); - this.MenuItemImportServer = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.MenuItemImportClipboard = new System.Windows.Forms.ToolStripMenuItem(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.panTlsMore.SuspendLayout(); - this.panel2.SuspendLayout(); - this.menuServer.SuspendLayout(); - this.SuspendLayout(); - // - // btnClose - // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - resources.ApplyResources(this.btnClose, "btnClose"); - this.btnClose.Name = "btnClose"; - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.btnGUID); - this.groupBox1.Controls.Add(this.label13); - this.groupBox1.Controls.Add(this.groupBox2); - this.groupBox1.Controls.Add(this.label8); - this.groupBox1.Controls.Add(this.cmbSecurity); - this.groupBox1.Controls.Add(this.txtRemarks); - this.groupBox1.Controls.Add(this.label6); - this.groupBox1.Controls.Add(this.label5); - this.groupBox1.Controls.Add(this.txtAlterId); - this.groupBox1.Controls.Add(this.label4); - this.groupBox1.Controls.Add(this.txtId); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.txtPort); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.txtAddress); - this.groupBox1.Controls.Add(this.label1); - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // btnGUID - // - resources.ApplyResources(this.btnGUID, "btnGUID"); - this.btnGUID.Name = "btnGUID"; - this.btnGUID.UseVisualStyleBackColor = true; - this.btnGUID.Click += new System.EventHandler(this.btnGUID_Click); - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.label24); - this.groupBox2.Controls.Add(this.label23); - this.groupBox2.Controls.Add(this.panTlsMore); - this.groupBox2.Controls.Add(this.label9); - this.groupBox2.Controls.Add(this.label20); - this.groupBox2.Controls.Add(this.txtPath); - this.groupBox2.Controls.Add(this.cmbNetwork); - this.groupBox2.Controls.Add(this.label7); - this.groupBox2.Controls.Add(this.label19); - this.groupBox2.Controls.Add(this.label18); - this.groupBox2.Controls.Add(this.label17); - this.groupBox2.Controls.Add(this.label16); - this.groupBox2.Controls.Add(this.label14); - this.groupBox2.Controls.Add(this.label15); - this.groupBox2.Controls.Add(this.cmbStreamSecurity); - this.groupBox2.Controls.Add(this.label12); - this.groupBox2.Controls.Add(this.txtRequestHost); - this.groupBox2.Controls.Add(this.label11); - this.groupBox2.Controls.Add(this.label10); - this.groupBox2.Controls.Add(this.cmbHeaderType); - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; - // - // label24 - // - resources.ApplyResources(this.label24, "label24"); - this.label24.Name = "label24"; - // - // label23 - // - resources.ApplyResources(this.label23, "label23"); - this.label23.Name = "label23"; - // - // panTlsMore - // - this.panTlsMore.Controls.Add(this.label21); - this.panTlsMore.Controls.Add(this.cmbAllowInsecure); - resources.ApplyResources(this.panTlsMore, "panTlsMore"); - this.panTlsMore.Name = "panTlsMore"; - // - // label21 - // - resources.ApplyResources(this.label21, "label21"); - this.label21.Name = "label21"; - // - // cmbAllowInsecure - // - this.cmbAllowInsecure.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbAllowInsecure.FormattingEnabled = true; - this.cmbAllowInsecure.Items.AddRange(new object[] { - resources.GetString("cmbAllowInsecure.Items"), - resources.GetString("cmbAllowInsecure.Items1"), - resources.GetString("cmbAllowInsecure.Items2")}); - resources.ApplyResources(this.cmbAllowInsecure, "cmbAllowInsecure"); - this.cmbAllowInsecure.Name = "cmbAllowInsecure"; - // - // label9 - // - resources.ApplyResources(this.label9, "label9"); - this.label9.Name = "label9"; - // - // label20 - // - resources.ApplyResources(this.label20, "label20"); - this.label20.Name = "label20"; - // - // txtPath - // - resources.ApplyResources(this.txtPath, "txtPath"); - this.txtPath.Name = "txtPath"; - // - // cmbNetwork - // - this.cmbNetwork.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbNetwork.FormattingEnabled = true; - this.cmbNetwork.Items.AddRange(new object[] { - resources.GetString("cmbNetwork.Items"), - resources.GetString("cmbNetwork.Items1"), - resources.GetString("cmbNetwork.Items2"), - resources.GetString("cmbNetwork.Items3"), - resources.GetString("cmbNetwork.Items4")}); - resources.ApplyResources(this.cmbNetwork, "cmbNetwork"); - this.cmbNetwork.Name = "cmbNetwork"; - this.cmbNetwork.SelectedIndexChanged += new System.EventHandler(this.cmbNetwork_SelectedIndexChanged); - // - // label7 - // - resources.ApplyResources(this.label7, "label7"); - this.label7.Name = "label7"; - // - // label19 - // - resources.ApplyResources(this.label19, "label19"); - this.label19.Name = "label19"; - // - // label18 - // - resources.ApplyResources(this.label18, "label18"); - this.label18.Name = "label18"; - // - // label17 - // - resources.ApplyResources(this.label17, "label17"); - this.label17.Name = "label17"; - // - // label16 - // - resources.ApplyResources(this.label16, "label16"); - this.label16.Name = "label16"; - // - // label14 - // - resources.ApplyResources(this.label14, "label14"); - this.label14.Name = "label14"; - // - // label15 - // - resources.ApplyResources(this.label15, "label15"); - this.label15.Name = "label15"; - // - // cmbStreamSecurity - // - this.cmbStreamSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbStreamSecurity.FormattingEnabled = true; - this.cmbStreamSecurity.Items.AddRange(new object[] { - resources.GetString("cmbStreamSecurity.Items"), - resources.GetString("cmbStreamSecurity.Items1")}); - resources.ApplyResources(this.cmbStreamSecurity, "cmbStreamSecurity"); - this.cmbStreamSecurity.Name = "cmbStreamSecurity"; - this.cmbStreamSecurity.SelectedIndexChanged += new System.EventHandler(this.cmbStreamSecurity_SelectedIndexChanged); - // - // label12 - // - resources.ApplyResources(this.label12, "label12"); - this.label12.Name = "label12"; - // - // txtRequestHost - // - resources.ApplyResources(this.txtRequestHost, "txtRequestHost"); - this.txtRequestHost.Name = "txtRequestHost"; - // - // label11 - // - resources.ApplyResources(this.label11, "label11"); - this.label11.Name = "label11"; - // - // label10 - // - resources.ApplyResources(this.label10, "label10"); - this.label10.Name = "label10"; - // - // cmbHeaderType - // - this.cmbHeaderType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbHeaderType.FormattingEnabled = true; - this.cmbHeaderType.Items.AddRange(new object[] { - resources.GetString("cmbHeaderType.Items"), - resources.GetString("cmbHeaderType.Items1"), - resources.GetString("cmbHeaderType.Items2"), - resources.GetString("cmbHeaderType.Items3"), - resources.GetString("cmbHeaderType.Items4"), - resources.GetString("cmbHeaderType.Items5"), - resources.GetString("cmbHeaderType.Items6")}); - resources.ApplyResources(this.cmbHeaderType, "cmbHeaderType"); - this.cmbHeaderType.Name = "cmbHeaderType"; - // - // label8 - // - resources.ApplyResources(this.label8, "label8"); - this.label8.Name = "label8"; - // - // cmbSecurity - // - this.cmbSecurity.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbSecurity.FormattingEnabled = true; - this.cmbSecurity.Items.AddRange(new object[] { - resources.GetString("cmbSecurity.Items"), - resources.GetString("cmbSecurity.Items1"), - resources.GetString("cmbSecurity.Items2"), - resources.GetString("cmbSecurity.Items3")}); - resources.ApplyResources(this.cmbSecurity, "cmbSecurity"); - this.cmbSecurity.Name = "cmbSecurity"; - // - // txtRemarks - // - resources.ApplyResources(this.txtRemarks, "txtRemarks"); - this.txtRemarks.Name = "txtRemarks"; - // - // label6 - // - resources.ApplyResources(this.label6, "label6"); - this.label6.Name = "label6"; - // - // label5 - // - resources.ApplyResources(this.label5, "label5"); - this.label5.Name = "label5"; - // - // txtAlterId - // - resources.ApplyResources(this.txtAlterId, "txtAlterId"); - this.txtAlterId.Name = "txtAlterId"; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.Name = "label4"; - // - // txtId - // - resources.ApplyResources(this.txtId, "txtId"); - this.txtId.Name = "txtId"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // txtPort - // - resources.ApplyResources(this.txtPort, "txtPort"); - this.txtPort.Name = "txtPort"; - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // txtAddress - // - resources.ApplyResources(this.txtAddress, "txtAddress"); - this.txtAddress.Name = "txtAddress"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // panel2 - // - this.panel2.Controls.Add(this.btnClose); - this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); - this.panel2.Name = "panel2"; - // - // btnOK - // - resources.ApplyResources(this.btnOK, "btnOK"); - this.btnOK.Name = "btnOK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // panel1 - // - resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Name = "panel1"; - // - // menuServer - // - this.menuServer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItem1}); - resources.ApplyResources(this.menuServer, "menuServer"); - this.menuServer.Name = "menuServer"; - // - // MenuItem1 - // - this.MenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.MenuItemImportClient, - this.MenuItemImportServer, - this.toolStripSeparator1, - this.MenuItemImportClipboard}); - this.MenuItem1.Name = "MenuItem1"; - resources.ApplyResources(this.MenuItem1, "MenuItem1"); - // - // MenuItemImportClient - // - this.MenuItemImportClient.Name = "MenuItemImportClient"; - resources.ApplyResources(this.MenuItemImportClient, "MenuItemImportClient"); - this.MenuItemImportClient.Click += new System.EventHandler(this.MenuItemImportClient_Click); - // - // MenuItemImportServer - // - this.MenuItemImportServer.Name = "MenuItemImportServer"; - resources.ApplyResources(this.MenuItemImportServer, "MenuItemImportServer"); - this.MenuItemImportServer.Click += new System.EventHandler(this.MenuItemImportServer_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); - // - // MenuItemImportClipboard - // - this.MenuItemImportClipboard.Name = "MenuItemImportClipboard"; - resources.ApplyResources(this.MenuItemImportClipboard, "MenuItemImportClipboard"); - this.MenuItemImportClipboard.Click += new System.EventHandler(this.MenuItemImportClipboard_Click); - // - // AddServerForm - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); - this.Controls.Add(this.menuServer); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Name = "AddServerForm"; - this.Load += new System.EventHandler(this.AddServerForm_Load); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.panTlsMore.ResumeLayout(false); - this.panTlsMore.PerformLayout(); - this.panel2.ResumeLayout(false); - this.menuServer.ResumeLayout(false); - this.menuServer.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.TextBox txtRemarks; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox txtAlterId; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox txtId; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtPort; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.TextBox txtAddress; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox cmbSecurity; - private System.Windows.Forms.ComboBox cmbNetwork; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.TextBox txtRequestHost; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.ComboBox cmbHeaderType; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.MenuStrip menuServer; - private System.Windows.Forms.ToolStripMenuItem MenuItem1; - private System.Windows.Forms.ToolStripMenuItem MenuItemImportClient; - private System.Windows.Forms.ToolStripMenuItem MenuItemImportServer; - private System.Windows.Forms.Label label15; - private System.Windows.Forms.ComboBox cmbStreamSecurity; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.ToolStripMenuItem MenuItemImportClipboard; - private System.Windows.Forms.Button btnGUID; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Label label17; - private System.Windows.Forms.Label label18; - private System.Windows.Forms.Label label19; - private System.Windows.Forms.TextBox txtPath; - private System.Windows.Forms.Label label20; - private System.Windows.Forms.Label label21; - private System.Windows.Forms.ComboBox cmbAllowInsecure; - private System.Windows.Forms.Panel panTlsMore; - private System.Windows.Forms.Label label24; - private System.Windows.Forms.Label label23; - } -} \ No newline at end of file diff --git a/v2rayN/Forms/AddServerForm.cs b/v2rayN/Forms/AddServerForm.cs deleted file mode 100644 index bd80867..0000000 --- a/v2rayN/Forms/AddServerForm.cs +++ /dev/null @@ -1,292 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class AddServerForm : BaseServerForm - { - - public AddServerForm() - { - InitializeComponent(); - } - - private void AddServerForm_Load(object sender, EventArgs e) - { - if (EditIndex >= 0) - { - vmessItem = config.vmess[EditIndex]; - BindingServer(); - } - else - { - vmessItem = new VmessItem(); - ClearServer(); - } - } - - /// - /// 绑定数据 - /// - private void BindingServer() - { - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - txtAlterId.Text = vmessItem.alterId.ToString(); - cmbSecurity.Text = vmessItem.security; - cmbNetwork.Text = vmessItem.network; - txtRemarks.Text = vmessItem.remarks; - - cmbHeaderType.Text = vmessItem.headerType; - txtRequestHost.Text = vmessItem.requestHost; - txtPath.Text = vmessItem.path; - cmbStreamSecurity.Text = vmessItem.streamSecurity; - cmbAllowInsecure.Text = vmessItem.allowInsecure; - } - - - /// - /// 清除设置 - /// - private void ClearServer() - { - txtAddress.Text = ""; - txtPort.Text = ""; - txtId.Text = ""; - txtAlterId.Text = "0"; - cmbSecurity.Text = Global.DefaultSecurity; - cmbNetwork.Text = Global.DefaultNetwork; - txtRemarks.Text = ""; - - cmbHeaderType.Text = Global.None; - txtRequestHost.Text = ""; - cmbStreamSecurity.Text = ""; - cmbAllowInsecure.Text = ""; - txtPath.Text = ""; - } - - - private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e) - { - SetHeaderType(); - } - - /// - /// 设置伪装选项 - /// - private void SetHeaderType() - { - cmbHeaderType.Items.Clear(); - - string network = cmbNetwork.Text; - if (Utils.IsNullOrEmpty(network)) - { - cmbHeaderType.Items.Add(Global.None); - return; - } - - cmbHeaderType.Items.Add(Global.None); - if (network.Equals(Global.DefaultNetwork)) - { - cmbHeaderType.Items.Add(Global.TcpHeaderHttp); - } - else if (network.Equals("kcp") || network.Equals("quic")) - { - cmbHeaderType.Items.Add("srtp"); - cmbHeaderType.Items.Add("utp"); - cmbHeaderType.Items.Add("wechat-video"); - cmbHeaderType.Items.Add("dtls"); - cmbHeaderType.Items.Add("wireguard"); - } - else - { - } - cmbHeaderType.Text = Global.None; - } - - private void btnOK_Click(object sender, EventArgs e) - { - string address = txtAddress.Text; - string port = txtPort.Text; - string id = txtId.Text; - string alterId = txtAlterId.Text; - string security = cmbSecurity.Text; - string network = cmbNetwork.Text; - string remarks = txtRemarks.Text; - - string headerType = cmbHeaderType.Text; - string requestHost = txtRequestHost.Text; - string path = txtPath.Text; - string streamSecurity = cmbStreamSecurity.Text; - string allowInsecure = cmbAllowInsecure.Text; - - if (Utils.IsNullOrEmpty(address)) - { - UI.Show(UIRes.I18N("FillServerAddress")); - return; - } - if (Utils.IsNullOrEmpty(port) || !Utils.IsNumberic(port)) - { - UI.Show(UIRes.I18N("FillCorrectServerPort")); - return; - } - if (Utils.IsNullOrEmpty(id)) - { - UI.Show(UIRes.I18N("FillUUID")); - return; - } - if (Utils.IsNullOrEmpty(alterId) || !Utils.IsNumberic(alterId)) - { - UI.Show(UIRes.I18N("FillCorrectAlterId")); - return; - } - - vmessItem.address = address; - vmessItem.port = Utils.ToInt(port); - vmessItem.id = id; - vmessItem.alterId = Utils.ToInt(alterId); - vmessItem.security = security; - vmessItem.network = network; - vmessItem.remarks = remarks; - - vmessItem.headerType = headerType; - vmessItem.requestHost = requestHost.Replace(" ", ""); - vmessItem.path = path.Replace(" ", ""); - vmessItem.streamSecurity = streamSecurity; - vmessItem.allowInsecure = allowInsecure; - - if (ConfigHandler.AddServer(ref config, vmessItem, EditIndex) == 0) - { - this.DialogResult = DialogResult.OK; - } - else - { - UI.ShowWarning(UIRes.I18N("OperationFailed")); - } - } - - private void btnGUID_Click(object sender, EventArgs e) - { - txtId.Text = Utils.GetGUID(); - } - - private void btnClose_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - } - - private void cmbStreamSecurity_SelectedIndexChanged(object sender, EventArgs e) - { - string security = cmbStreamSecurity.Text; - if (Utils.IsNullOrEmpty(security)) - { - panTlsMore.Hide(); - } - else - { - panTlsMore.Show(); - } - } - - #region 导入客户端/服务端配置 - - /// - /// 导入客户端 - /// - /// - /// - private void MenuItemImportClient_Click(object sender, EventArgs e) - { - MenuItemImport(1); - } - - /// - /// 导入服务端 - /// - /// - /// - private void MenuItemImportServer_Click(object sender, EventArgs e) - { - MenuItemImport(2); - } - - private void MenuItemImport(int type) - { - ClearServer(); - - OpenFileDialog fileDialog = new OpenFileDialog - { - Multiselect = false, - Filter = "Config|*.json|All|*.*" - }; - if (fileDialog.ShowDialog() != DialogResult.OK) - { - return; - } - string fileName = fileDialog.FileName; - if (Utils.IsNullOrEmpty(fileName)) - { - return; - } - string msg; - VmessItem vmessItem; - if (type.Equals(1)) - { - vmessItem = V2rayConfigHandler.ImportFromClientConfig(fileName, out msg); - } - else - { - vmessItem = V2rayConfigHandler.ImportFromServerConfig(fileName, out msg); - } - if (vmessItem == null) - { - UI.ShowWarning(msg); - return; - } - - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - txtAlterId.Text = vmessItem.alterId.ToString(); - txtRemarks.Text = vmessItem.remarks; - cmbNetwork.Text = vmessItem.network; - cmbHeaderType.Text = vmessItem.headerType; - txtRequestHost.Text = vmessItem.requestHost; - txtPath.Text = vmessItem.path; - cmbStreamSecurity.Text = vmessItem.streamSecurity; - } - - /// - /// 从剪贴板导入URL - /// - /// - /// - private void MenuItemImportClipboard_Click(object sender, EventArgs e) - { - ClearServer(); - - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(Utils.GetClipboardData(), out string msg); - if (vmessItem == null) - { - UI.ShowWarning(msg); - return; - } - - txtAddress.Text = vmessItem.address; - txtPort.Text = vmessItem.port.ToString(); - txtId.Text = vmessItem.id; - txtAlterId.Text = vmessItem.alterId.ToString(); - txtRemarks.Text = vmessItem.remarks; - cmbNetwork.Text = vmessItem.network; - cmbHeaderType.Text = vmessItem.headerType; - txtRequestHost.Text = vmessItem.requestHost; - txtPath.Text = vmessItem.path; - cmbStreamSecurity.Text = vmessItem.streamSecurity; - } - #endregion - - } -} diff --git a/v2rayN/Forms/AddServerForm.resx b/v2rayN/Forms/AddServerForm.resx deleted file mode 100644 index 599a683..0000000 --- a/v2rayN/Forms/AddServerForm.resx +++ /dev/null @@ -1,1368 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 396, 17 - - - 75, 23 - - - - 4 - - - &取消 - - - btnClose - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 0 - - - 411, 83 - - - 75, 23 - - - 23 - - - &創建 - - - btnGUID - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - True - - - 285, 175 - - - 113, 12 - - - 22 - - - *請手動輸入 - - - label13 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 1 - - - True - - - - NoControl - - - 529, 207 - - - 119, 12 - - - 35 - - - 3) QUIC 加密密鑰 / Kcp seed - - - label24 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - True - - - NoControl - - - 465, 146 - - - 89, 12 - - - 34 - - - 4) QUIC 加密方式 - - - label23 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - True - - - 12, 11 - - - 83, 12 - - - 31 - - - 跳過證書驗證 (allowInsecure) - - - label21 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 0 - - - - - - true - - - false - - - 107, 7 - - - 91, 20 - - - 30 - - - cmbAllowInsecure - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panTlsMore - - - 1 - - - 284, 234 - - - 338, 35 - - - 33 - - - panTlsMore - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - True - - - 350, 32 - - - 113, 12 - - - 15 - - - *預設 tcp,請根據服務端選擇 - - - label9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 3 - - - True - - - 464, 130 - - - 203, 12 - - - 29 - - - 3) h2 host 中間以逗號 (,) 隔開 - - - label20 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 4 - - - 127, 169 - - - True - - - 396, 54 - - - 28 - - - txtPath - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 5 - - - tcp - - - kcp - - - ws - - - h2 - - - quic - - - 192, 28 - - - 143, 20 - - - 12 - - - cmbNetwork - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 6 - - - True - - - 9, 32 - - - 167, 12 - - - 13 - - - 傳輸協議 (network) - - - label7 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 7 - - - True - - - 9, 169 - - - 29, 12 - - - 27 - - - 路徑 (path) - - - label19 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 8 - - - True - - - 529, 189 - - - 59, 12 - - - 26 - - - 2)h2 path - - - label18 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 9 - - - True - - - 464, 115 - - - 59, 12 - - - 25 - - - 2)ws host - - - label17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 10 - - - True - - - 529, 172 - - - 59, 12 - - - 24 - - - 1)ws path - - - label16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 11 - - - True - - - 464, 100 - - - 215, 12 - - - 23 - - - 1) http host 中間以逗號 (,) 隔開 - - - label14 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 12 - - - True - - - 9, 243 - - - 23, 12 - - - 22 - - - TLS - - - label15 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 13 - - - - - - tls - - - 127, 239 - - - 143, 20 - - - 21 - - - cmbStreamSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 14 - - - True - - - 282, 66 - - - 299, 12 - - - 20 - - - *根據偽裝類型選擇,預設為 none - - - label12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 15 - - - 158, 100 - - - True - - - 300, 53 - - - 16 - - - txtRequestHost - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 16 - - - True - - - 9, 66 - - - 95, 12 - - - 19 - - - 偽裝類型 (type) - - - label11 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 17 - - - True - - - 9, 100 - - - 143, 12 - - - 17 - - - 偽裝域名 (host) - - - label10 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 18 - - - none - - - http - - - srtp - - - utp - - - wechat-video - - - dtls - - - wireguard - - - 127, 64 - - - 143, 20 - - - 18 - - - cmbHeaderType - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 19 - - - Bottom - - - 3, 215 - - - 723, 281 - - - 21 - - - 底層傳輸方式 (transport) - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 2 - - - True - - - 353, 147 - - - 119, 12 - - - 14 - - - *隨便選,建議 auto - - - label8 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 3 - - - aes-128-gcm - - - chacha20-poly1305 - - - auto - - - none - - - 195, 143 - - - 143, 20 - - - 6 - - - cmbSecurity - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 4 - - - 127, 171 - - - 143, 21 - - - 11 - - - txtRemarks - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 5 - - - True - - - 12, 175 - - - 95, 12 - - - 10 - - - 節點別名 (自定義) - - - label6 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 6 - - - True - - - 12, 147 - - - 173, 12 - - - 8 - - - 加密方式 (security) - - - label5 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 7 - - - 127, 114 - - - 143, 21 - - - 7 - - - txtAlterId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 8 - - - True - - - 12, 118 - - - 47, 12 - - - 6 - - - 額外 ID (AlterId) - - - label4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 9 - - - 127, 85 - - - 278, 21 - - - 5 - - - txtId - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 10 - - - True - - - 12, 89 - - - 53, 12 - - - 4 - - - 用戶 ID (UUID) - - - label3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 11 - - - 127, 56 - - - 143, 21 - - - 3 - - - txtPort - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 12 - - - True - - - 12, 60 - - - 29, 12 - - - 2 - - - 連線端口 (port) - - - label2 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 13 - - - 127, 27 - - - 359, 21 - - - 1 - - - txtAddress - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 14 - - - True - - - 12, 31 - - - 47, 12 - - - 0 - - - 節點地址 (address) - - - label1 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 15 - - - Fill - - - 0, 35 - - - 729, 499 - - - 3 - - - 節點資訊 - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - 303, 17 - - - 75, 23 - - - 5 - - - &確認 - - - btnOK - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel2 - - - 1 - - - Bottom - - - 0, 534 - - - 729, 60 - - - 7 - - - panel2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Top - - - 0, 25 - - - 729, 10 - - - 6 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - 17, 17 - - - 237, 22 - - - 237, 22 - - - 234, 6 - - - 237, 22 - - - 162, 21 - - - 0, 0 - - - 729, 25 - - - 8 - - - menuServer - - - System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - True - - - 25 - - - 6, 12 - - - 729, 594 - - - 編輯或新增 [VMess] 節點 - - - MenuItem1 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportClient - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MenuItemImportClipboard - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - AddServerForm - - - v2rayN.Forms.BaseServerForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - 匯入節點設定檔 - - - 匯入客戶端設定檔 - - - 從剪貼簿匯入節點 URL - - - 匯入服務端設定檔 - - \ No newline at end of file diff --git a/v2rayN/Forms/AddServerForm.zh-Hans.resx b/v2rayN/Forms/AddServerForm.zh-Hans.resx deleted file mode 100644 index 195adeb..0000000 --- a/v2rayN/Forms/AddServerForm.zh-Hans.resx +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 取消(&C) - - - 服务器 - - - 生成(&G) - - - *请手动填写 - - - 底层传输方式 (transport) - - - - 149, 12 - - - 3) QUIC 加密密钥 / Kcp seed - - - 95, 12 - - - 4) QUIC 加密方式 - - - 167, 12 - - - 跳过证书验证 (allowInsecure) - - - 223, 7 - - - 350, 36 - - - 143, 12 - - - *默认 tcp,选错会无法连接 - - - 149, 12 - - - 3) h2 host 中间逗号 (,) 隔开 - - - 127, 168 - - - 127, 32 - - - 211, 20 - - - 9, 36 - - - 107, 12 - - - 传输协议 (network) - - - 9, 168 - - - 65, 12 - - - 路径 (path) - - - 161, 12 - - - 1) http host 中间逗号 (,) 隔开 - - - 9, 237 - - - 107, 12 - - - 底层传输安全 (tls) - - - 127, 237 - - - 282, 71 - - - 197, 12 - - - *根据伪装类型选择,默认 none - - - 127, 102 - - - 334, 51 - - - 9, 71 - - - 89, 12 - - - 伪装类型 (type) - - - 9, 102 - - - 89, 12 - - - 伪装域名 (host) - - - 127, 67 - - - 113, 12 - - - *随便选,建议 (auto) - - - 127, 143 - - - 211, 20 - - - 83, 12 - - - 别名 (remarks) - - - 113, 12 - - - 加密方式 (security) - - - 95, 12 - - - 额外ID (alterId) - - - 65, 12 - - - 用户ID (id) - - - 65, 12 - - - 端口 (port) - - - 83, 12 - - - 地址 (address) - - - 确定(&O) - - - 92, 21 - - - 导入配置文件 - - - 171, 22 - - - 导入客户端配置 - - - 171, 22 - - - 导入服务端配置 - - - 168, 6 - - - 171, 22 - - - 从剪贴板导入 URL - - - 编辑或添加 [VMess] 服务器 - - \ No newline at end of file diff --git a/v2rayN/Forms/BaseForm.Designer.cs b/v2rayN/Forms/BaseForm.Designer.cs deleted file mode 100644 index f23103b..0000000 --- a/v2rayN/Forms/BaseForm.Designer.cs +++ /dev/null @@ -1,51 +0,0 @@ -namespace v2rayN.Forms -{ - partial class BaseForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BaseForm)); - this.SuspendLayout(); - // - // BaseForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(292, 273); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "BaseForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "BaseForm"; - this.ResumeLayout(false); - - } - - #endregion - } -} \ No newline at end of file diff --git a/v2rayN/Forms/BaseForm.cs b/v2rayN/Forms/BaseForm.cs deleted file mode 100644 index 4ea789b..0000000 --- a/v2rayN/Forms/BaseForm.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class BaseForm : Form - { - protected static Config config; - protected static System.Drawing.Icon icon; - - public BaseForm() - { - InitializeComponent(); - LoadCustomIcon(); - } - - private void LoadCustomIcon() - { - try - { - if (icon == null) - { - string file = Utils.GetPath(Global.CustomIconName); - if (!System.IO.File.Exists(file)) - { - return; - } - icon = new System.Drawing.Icon(file); - } - this.Icon = icon; - } - catch (Exception e) - { - Utils.SaveLog($"Loading custom icon failed: {e.Message}"); - } - } - - } -} diff --git a/v2rayN/Forms/BaseForm.resx b/v2rayN/Forms/BaseForm.resx deleted file mode 100644 index 61360d3..0000000 --- a/v2rayN/Forms/BaseForm.resx +++ /dev/null @@ -1,1253 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAIAAAACAAAAAwAA - AAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAADAAAAAwAAAAMAAAADAAAAAgAAAAIAAAACAAAAAQAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAA - AAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAgAAAAKAAAACgAAAAsAAAAMAAAADQAAAA0AAAANAAAADQAA - AAwAAAALAAAACgAAAAoAAAAIAAAACAAAAAYAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAUAAAAHAAAACQAAAAwAAAAOAAAAEQAAABMAAAAVAAAAFwAA - ABgAAAAaAAAAGwAAABwAAAAcAAAAHQAAAB0AAAAcAAAAHAAAABsAAAAaAAAAGAAAABcAAAAVAAAAEwAA - ABEAAAAOAAAADAAAAAkAAAAHAAAABQAAAAQAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAAEAAAABwAAAAkAAAAMAAAAEAAA - ABMAAAAXAAAAGgAAAB4BAQAgAgEBIwMDASUDAgEmAwMBKAUEASkGAwMrCAUDKwgFAysIBQMsCAUDLAgF - AysIBQMrBgMDKwUEASkDAwEoAwIBJgMDASUCAQEjAQEAIAAAAB4AAAAaAAAAFwAAABMAAAAQAAAADAAA - AAkAAAAHAAAABAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA - AAQAAAAHAAAACgAAAA4AAAASAAAAFwAAABwAAAAgAwIBJAUDAicGBAIqBQUCKwICAi0FAwMvCQcEMQgH - BjACAwQwAAECMQYFBTURDgg5GRMJPBwWCz0cFgs9GRMJPBEOCDkGBQU1AAECMQICBDAIBwYwCQcEMQUD - Ay8CAgItBQUCKwYEAioFAwInAwIBJAAAACAAAAAcAAAAFwAAABIAAAAOAAAACgAAAAcAAAAEAAAAAgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAUAAAAIAAAADQAAABIAAAAXAQAAHQIBASIDAgEmBgMDKgQD - AywAAAEtBQQEMRYRCTckHA0+OCoTSlU/G19sUCF1elomhoZjKZWOaCufkmstqphwL7Kccy+3nnQwup51 - MLqccy+3mXEvspNsLaqOaSufh2QqlHtbJ4ZtTyJ1Vj8cXzgpE0okHA0+FhEJNwUEBDEAAAEtBAMDLAYD - AyoDAgEmAgEBIgAAAB0AAAAXAAAAEgAAAA0AAAAIAAAABQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAADwAA - ABUAAAAcAgIAIgQCAicFBAErBAMDLgUEBDAWEQo5QjEWT2BHH2d6WiaHkGssq6B2MMWtfzTbt4Y367+M - OfXEjzv5yZM8/M2WPv7PmD7/0Zk//9KaP//Tmz//05s//9OaP//Smj//0Jg+/82WPv3KlD37xZA7+cCM - OvW4iDjrroA126F2McWRbCyre1smh2FHH2dCMRZPFhEKOQUEBDAEAwMuBQQBKwQCAicCAgAiAAAAHAAA - ABUAAAAPAAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAwAAAAYAAAAKAAAAEAAAABcBAQAeAwIBJAYDAyoBAAEsBwUEMSIaDDxSPBtaelomhpRt - LbGoezPVt4Y37MSQO/nMlj3/0Zk//9WcQP/YnkH/2J5B/9ieQP/XnkD/155A/9eeQP7XnkD+155A/tee - QP7XnkD+155A/teeQP7XnkD+155A/9eeQP/YnkD/2J5B/9ieQf/WnED/0po//82WPf/FkTv5uog47Kp8 - M9WVbi6xelomh1E8GlshGQw8BwUFMgEAASwGAwMqAwIBJAEBAB4AAAAXAAAAEAAAAAoAAAAGAAAAAwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAAEQAAABgBAQAgBAMBJgUD - AysDAgMvGRIKOVQ+G1p+XSiKm3MvvrKDNubCjjr5zZY+/tWcQP/XnUD/2J9B/tieQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/2J5A/9ifQf7XnUD/1ZxA/8+YPv7Djzv5s4M25pxyL799XCeLUj0bWhkT - CzkDAgMvBQMDKwQDASYBAQAfAAAAGAAAABEAAAAKAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA - AAQAAAAJAAAADwAAABcBAQAfBAMBJgMCASsIBgQwMSQRQ2xQIXOUbS2xr4A14cOOO/nPmD7/1p1A/9ie - QP/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/tieQP/WnUD/0Jg+/8SPO/mvgTXhlG0usWtOInQwIxJDCAYEMAMCASsEAwEnAQEAHwAA - ABcAAAAPAAAACQAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADQAAABQBAQAdBQQBJQUFAiwGBQQwRDMXTXxc - J4ahdjHKuog48syVPf7VnED/155B/9ieQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/9Wc - QP/Nlj3+uok486B2Mcp6WiaGQjIWTgYFBDAEAwIsBAMBJQEBAB0AAAAUAAAADQAAAAcAAAADAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEAAAACgAA - ABEAAAAaAwIBIwUDAioHBgQvQDAVSoFeKIynejLTv4w6+NCYPv/XnkD/155A/teeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7XnkD/0Jk+/8CNOvimejLTfl0njT0u - FEoGBQQvBQMCKgMCASMAAAAaAAAAEQAAAAoAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAA0AAAAWAQAAHwQDASgDAgIuNScSRHxbJoOnejPSwY06+dKa - P//YnkD+2J5A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/2J5B/tObP//Bjjr5pXky03hZJoQzJhJEAwMCLgQDASgBAAAfAAAAFgAA - AA0AAAAHAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAgAAAAQAAAAGQQC - AiQDAQIqFBAINWlOIWuedDDBvos59dGZP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie - Qf/Smj//vYs59ZtyL8JlSh9sEw8INQMBAioEAgIkAAAAGQAAABAAAAAIAAAAAwAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAgAAAAQAAAAKAAAAEwIBAR0FAwInAQECLUg1GE2QaiyjtoU3686WPf/XnUD/2J5A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/zpc+/7SEN+yLZiqlRTMXTwEB - Ai4FAwInAgEBHQAAABMAAAAKAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADAAAABUDAgEgBAIBKBoU - CTVxUyNxpnkyzcWQO/zVnED/2J5A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/1ZxA/8WQO/yidzHPak8hcxkTCTUEAgEoAwIBIAAAABUAAAAMAAAABQAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAACAAAABgAAAA0AAAAXAwMBIgIBAis4KhNDj2ksm7iHN+7QmD7/155A/teeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/tCZ - Pv+2hTfviGQqnTUnEkUDAgIrAwMBIwAAABcAAAANAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAQEAGQQCAiQIBgMsXEQdWaB2 - Mb3Djzr51ZxA/9ieQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tacQP/Cjjr5mnAvv1U/G1sIBgMtBAICJAEB - ABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAHAAAADwEBABkFAwIlCQcDLnVWJHCvgDXZzJY9/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/LlT3/qHwz2m1QInIJBwMvBQMCJgEBABkAAAAPAAAABwAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA8CAQAaAwIBJhIOBjJ/Xid+toY35tGZ - P//YnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ieQP7RmT7/sYI26HZX - JYARDQYzBAIBJgIBABoAAAAPAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - AAYAAAAOAQEAGgYFASYjGgw4jGcrkLuJOO7Tmz//2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7UnD//toY374FeKJIgGAs5BgUBJwEBABoAAAAOAAAABgAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADQIBABkBAQEkLCENOpJrLZnAjTrz1Js//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/VnED/u4k49IdjKZwpHw07AgEBJAIBABkAAAANAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA - AAwBAQAXBgQBJSwiDjmXby2fw4469tadQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnUD/vYs594tmKqEqHg07BwUBJQEB - ABcAAAAMAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAQEAFgMCASImHAw2lm4umMSPO/bVnED+155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/VnED+vos59ohkKZsiGgw4AwIBIgEBABYAAAAKAAAABAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQEB - ABMGBAIhFQ8IMJJrLY/Djzrz1p1A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnUD/vIo59INh - KZMUDggxBgQCIQEBABMAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAQBQICHQgGAyqHYyl8wI067tWcQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/VnED/uIc38HhYJYAIBgMrBQICHQAAABAAAAAGAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADQQD - ARoEAwEnf10mbr2LOebVnED/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/UnD//s4M26HBSInEFAwEnBAQBGgAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAoFAwIWAQABI2hNIFW5hzjY05o//9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/RmT//qn0021tCHFoDAQEjBAMCFgAA - AAoAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAwICEgAA - AB9GNBU/roA0vdCZPv7XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP7Mlj3/nXIwwTwsEkEAAAEfAwICEgAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0GBAMbHRUJLaF2MJnMlT35155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Djzv6jGcrnhoT - CC8HBAMbAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJBgQDFgAA - ACOGYiluxpE779adQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ifQ//cq1n/2qVN/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9adQP+5hzfwc1QjcwAAACQGAwMWAAAACQAAAAMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABgIBARAAAAEdW0MbR7mIN83Um0D/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2KFH/+XCiP/pypf/26dS/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tGZ - P/+nejPRTjkYSgAAAR0CAQEQAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMBAAEKBgMDGBwU - CSypfDOh0Jg+/deeQf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Zokf/6cqX//jw5P/qzZ7/2aNL/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155B/seSPP2SayynGBEILQcDAxgBAAELAAAAAwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAABwcEAxECAAIghWEoZciSPOvXnUD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/154//9iiR//pyZf//Pr3//n06//mw4v/2aRM/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/1p1A/reHN+1uUSFqBAICIAcEAhEAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAwALAAAAGE05 - Fzm6iDe/1ZtA/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f7+//jv - 4//nxY7/2aJJ/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/0Jg+/6F3McVBMBQ9AgIAGAID - AAsAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABggGAhIHBQMgnHMvf8+YPvbXnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//Yokf/6cmX//z69//9/f7//f39//jw4v/kvX//2aJI/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/YnkH/wY4694JhKIQIBgMhCAYCEgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEBAELAQEAGFxC - G0DCjjrR151A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 - /f/9/f3//f39//bs3P/kv4L/2KFG/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Tmz//q3401Us3 - F0MCAgAYBQMBCwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABQkHARACAgEgpXgxh9KaP/rYnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//fz8//br2f/huHX/2KFF/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/FkDv7iWQpjQQCASEJBwERAAAABQAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAwAJAAAAFWhL - H0HGkTzS2J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 - +P/9/f3//f39//39/f/9/f3//f39//Xo1P/iuXf/2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tSb - QP+tfzTWVD0ZRQAAABUDAwAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABAsIAw4HBQIdpnkygNObP/nYnkH+155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//fz6//Tl - zv/fs2v/159C/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/sSQO/qJZCmHCQYCHgsIAw4AAAAEAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGBQEHBgYAE1Q+ - GTTFkTvI155B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ - l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//fz7//Pky//gtW3/159C/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/0po//6p8M85FMRQ4BwcBEwYFAQcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwkGBAsCAAEZnHMvatObP/LYnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//Pv4//Hfwf/er2H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/wI069H5cJnIDAgIZCQYECwAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFCgQFDzUn - ESfAjTqt155B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii - R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pv5//Hfwv/esWb/155B/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP7QmD7/n3YwtCwhDioLBQYQAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQoJAQgAAAAShmIoTM+YPt/YnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//Pn1/+/Ztv/drFz/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9adQP+2hjfkaE0gUgAA - ABIJCQEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEw0GCw4K - BRmygjWC1p1A+teeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pn2/+/Y - tf/drV3/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/2J5B/siTPPuOaSuKDwsFGxMNBgsAAAADAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUEAAQEBAANRjQVKMiSPLrYnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7/+/fx/+3Uq//bqVX/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/0po//6h7 - M8I2JxErBgUADQUEAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDgoFBgYE - AhGOaCpK05s/5tieQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f7/+/fy/+zSqP/bqVX/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnUD/vIk56m1PIVMJBQMSDgoEBgAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUEQMIAAAAFLSENnvXnUH5155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7/+vTs/+rOof/apk//154//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie - QP/Ikzz6jWgrhAAAABUUEQMIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxcP - Bws+LBMhyJI8rdieQf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3/+vTs/+rMnP/apU7/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5A/tKZP/+keDK0MSMPJRcPBwsAAAADAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQADAAAADIRgJznRmT/S2J9B/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+fHm/+jJ - lv/Zo0r/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/1p1A/7SFNthlSh5AAAAADAABAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARsV - BgUAAAAMpXkyV9acQOvYnkH/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+PLm/+fGj//Zo0r/154//9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH/wY06735cJl4AAAANGRQFBgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIxcMBwwHBRK7iTl82J5B/NeeQf7XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/fz/9+7g/+bDi//YoUb/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9ieQf7LlT38lGwthg8KBhQiFgsHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEQCAcIQS4UG8iSPKLZn0H/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pz/9+7g/+S/gv/YoUf/154//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5A/tGZPv+leTGsMyQPHRMK - CAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABkVw0ACwoAAgAAAAhcQxwizpg+wdmfQf/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 - +P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/Pz/9erX/+S+gP/YoEP/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/1ZxA/7CBNchCMBQmAgEACAoKAAJLQQoAAAAAAAAAAAAAAAAAAAAAAAAA - AAAcEQsCBwAFCodiKTPUmz/c2J5B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/9uvZ/+K5 - dv/YoEX/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnUH/uog34GRK - HjoLBAYKGxALAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8VCgMLBgQLpXkxTNadQO7YnkH/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ - l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/8+TM/+G3c//Xn0L/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9ieQf/Cjjrwf10mVQ4IBQweFAoDAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIBcJAwsIAg21hDZj155A9deeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/8+/r/9ObR/9+zaf/YoEP/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/8eS - PPeOaCtsDgoEDR8WCQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVDgcEAAABDL+MOXfXnkH4155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii - R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/8d/C/9+yaf/Xn0H/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/y5U9+phwLoAAAAIMFQ4HBAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAASAfAQQAAAAMxpA7idieQfzXnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/8+/n/8uDF/92vYv/Xn0L/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Plz79oHYwkAAAAAwfHgEEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABKxoQBQwKBQ/JkzyX2J5B/tee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/8+/n/79m2/92t - X//XnkH/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tGZP/+leTKeDAkFEigYDwUAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAE4IxUFRC8UE82WPaTYnkH/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/8+vf/8Nu6/9ysW//Xn0H/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD+05s//6x+M6s0JBEYNiMTBgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAS8eEAZcQhwXz5g+rtie - Qf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/7+fX/7NOq/9upV//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Um0D/sIE0tEYzFhwvHhEGAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAABKRoPBmlMIBnQmT+12J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/7+PP/7dWu/9uoVf/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/tWcQP+0gza7UzoYHioaDwYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAE5Kg4FcVMiGtGZ - PrjYnkH/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/69u//6s2d/9qmT//Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+1ZxA/7WENr5aQBkfOSsPBgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAADwsDwV1VSIa0Zk+uNieQf/XnkD+155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/69vD/69Ci/9qm - UP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP7VnED/tYU2vltCGh89LRAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCATBHNU - IhjSmj+12J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/58+n/6MiU/9qkTP/Xnj//155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tWcQP+1hTa6WUAaHTUh - EwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBKRcEa04gFdGZP67YnkH/155A/teeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /v/58uj/6MiU/9mkS//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD+1ZtA/7ODNbRSPRcaPSYWBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFM0 - HgRbQhwQ0Jg+pdieQf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/37+H/5cGH/9miSP/Xnj//155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Tmz//sIE0q0Uy - FhVKLxoEAAAAAAAAAAAAAAAAAAAAAAAAAACCRD4AYC4xAyQXDArPlz6W2J5B/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//YoUf/6cmX//z6 - 9//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/7+PT/+fLo//38+//9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/37uD/5cKI/9iiSP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/tKaP/+rfTOdHRMKDlQpKwNpNzIAAAAAAAAAAAAAAAAAAAAAACQb - CgBVPhcCAAAABs2WPYfYnkH8155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/154//9ihR//pyZf//Pr3//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f7///ft3v/pypn/9ejT//38+//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/P/27Nv/471//9ih - Rf/Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkD/0Jg+/ah7 - Mo4AAAAHUDsWAiMaCQAAAAAAAAAAAAAAAAAAAAAAPzMNADUvCgEAAAAFyZM9ddieQfnYnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ - l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/96wZP/ht3P/8+TM//z7 - +v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/P/26tj/47x9/9igRP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Nlj36pHgxfQAAAAU2MAoBPzMNAAAAAAAAAAAAAAAAAAAA - AABuUB4AVj8XARsTBQbGkDte2J5B9deeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//3+///26tn/3a5f/9igQ//htnD/8+LJ//z7+f/9/f7//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//38 - +v/159P/4rh0/9ifQ//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/8mT - PPadcy9nIBcHBlE7FgFmShsAAAAAAAAAAAAAAAAAAAAAAH1bIgBrTh0BKB0JBcCMOkbYnkHu2J5B/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii - R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150+/9ef - Qv/gs2v/8d/B//z6+P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//38+//05c7/4bdy/9efQv/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH/xZE78JduLU8rHwoFYEYaAW1QHgAAAAAAAAAAAAAA - AAAAAAAAi1M4ALluSwASABEDsYI2LNedQN3Zn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9efQv/fsWf/8d6///z59v/9/f7//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//z7+P/z48r/37Nq/9eeQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie - Qf/AjTnghGIoMhsGEgOPVToAckQuAAAAAAAAAAAAAAAAAAAAAAB/dAsAvasRAAARAAKacC4Y1ZxAwdmf - Qf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9ed - P//XnkD/155A/9eeQf/esGT/79m3//v49P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//z7+f/x4MP/37Np/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/1ZxA/7mHN8dwUiIbCh4AArGgEAB6bwoAAAAAAAAA - AAAAAAAAAAAAAEZHAAAADwAATT8MAolkKQ7Smj+g2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9efQf/drV7/7tex//v3 - 8P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//z59v/w3sD/3a5g/9eeQf/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Smj//soI2qWhMIBBZSA8CABAAAEdIAAAAAAAAAAAAAAAAAAAAAAAAAAAAALR4PACfZzcBRTAXBs+Y - PnjZn0H92J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92u - YP/XnT//155A/9eeQP/XnkD/155A/9eeQP/cq1n/69Gl//r28P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//v6 - 9v/v2rf/3q5h/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J9A/s6XPf2pfDOBOygVCIpZMAKVYzIAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAt25JAL9yTQEAAAAAyJI8TtieQezYn0H/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9ee - QP/bqVT/69Gl//r17P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//v48//u2LT/26lW/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/YnkH+yJI87590MFQAAAABlVk8AY5WOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADixB0A/+AeAAAA - AADAjDkt151A0tmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq - 2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/aqFP/6cuZ//n07P/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//v49P/s0qj/3KpY/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9edQP+/jDnXlGwsMgAAAADjyBsAy7AaAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcPx4AfU8rAqF1MBHVnD+r2Z9B/9ieQP7XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/apU3/6cyb//nx5v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//r27v/s0af/2qVO/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/YnkD+1JtA/7eGNrF3VyQWdksoAlM5GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdO - GQCMdxUBAAAAAtGZPnTZn0H52J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+ - ///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//apEz/5sSL//ny - 5//9/Pz//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f3+//v48v/py5r/2qdS/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ifQP7Olz76rX40fAAAAAONeBUBZU0ZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArXY3AMqKQQAtFhICyJM9PtieQejYnkH/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yokj/58eR//fv4f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//nz - 6f/pyZf/2aNL/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2J5B/8aRO+ueczBGOSAVAq53OACZaDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACSghAAtrAHAAADAAGwgDYV1p1AutmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//Yokf/5L6B//ft3v/8/Pr//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//r17f/nxpH/2qVN/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/VnED/u4k4wIJfKBgbGAABop0GAId4 - DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+dEsAvWpTAXdSJgXSmj972Z9B/Nie - QP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 - +P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YoEX/5cGF//br2f/9/fz//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//jw4//mxIz/2KJH/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2J5B/s+YPv2xgjWDWz0cB6pgSQGkZEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAO+CbgD+iXYA//+JAMuUPTvYnkHf2J9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/YoET/4bh1//Xo1P/8+/n//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//ny6P/lwof/2aNJ/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/xZA746J3MUH//4YA8oJxAd55 - ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJMKACQVDgBtIM3Etad - QKvZn0H/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KFH/+nJ - l//8+vf//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YoET/4rp5//Tn - 0P/9/Pv//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//bs3P/kvX//2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2J5A/tObP/+6iDiwiGMrFZpcOQFrRyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAnVxAALlxSAEAABMB0po/XtmfQfTYnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - Qf/Xn0L/159C/9efQv/Xn0L/159C/9efQv/Zo0n/6cqY//z6+P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0L/37Jn//Lgxf/8+vf//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//fu - 4P/kvX7/2KFG/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH+y5U99q6ANGUGABcCn2E+AY1T - OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyiycAyJ0rAB4k - AAHDjzse155BydmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2qZQ/+K5dv/kvoH/5L6A/+S+gP/kvoD/5L6A/+XA - hf/v27r//Pv5//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Yn0L/4LNr//LgxP/8+/n//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fz7//Tn0v/iuXb/2J9D/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9WdQP/AjTrNmXEuITk1AAGphSUAm3kiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKfU4AynRVAaNvNQPUmz922Z9B+tifQP7XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//gtGz/9OjU//r38P/69u//+vbv//r27//69u//+vbw//v59f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0H/3a5g/+/auP/8+fT//f3+//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//fz8//Xo1P/iuHT/2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0D+zpc9+7OENn10UCYFv25PAbRw - RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+B - gwD/i5AA//91AMuWPSzYnkHS2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/150//+C2b//37uD//f7+//39/v/9/f7//f3+//39 - /v/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9ed - P//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xn0H/3a9h/+/Ztv/7+fX//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pv6//LiyP/fs2v/159B/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9adQP/EkDrWo3gxMf//ZAC2Wl0AqlVWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZaPQDLZWYBjmcpBdWcP37Zn0H62J9A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnT//4LZv//fu3//9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/3KtZ/+3U - rf/69/D//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//Pv5//Lhxv/fsmj/159C/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkD/z5g++7eGNoRoSx4GolBQAX9L - MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAwXFRANB5VwBGAEQBzZc+KNieQdLZn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9edP//gtm//9+7f//39/v/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92u - YP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/3KpZ/+zSqf/69vD//f3+//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pr3//Dd - vf/er2P/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9adQP/FkDvVpnozLFoORQG3a00ArGRJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/mswA87wPAP/AWgDCjzUD1p1Ac9mf - QfjYn0D+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/150//+C2b//37t///f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/26hT/+rPov/69Oz//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pr2/+/bu//drV//155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0D+z5g++bmIN3mMaSUE/+FqAPSv - DgD/v/0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD//wAA//8AAP/+agDTmkEf2J5Bv9mfQf/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnT//4LZv//fu4P/9/v7//f3+//39 - /v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//v7///br - 2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/26hU/+rMnf/59Or//f3+//39 - /v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39 - /v/9/f7/+/n1/+7Xs//drFz/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9WdQP/EkDvDrH00Iv//dwD//wAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGdVEA1YJTAF4h - PQHVnEBW2Z9B7difQf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//gtW3/9erY//z59v/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z5 - 9f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+vf/9OfS/92tX//XnT//155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/2qVP/+nJlv/37+H//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z5 - 9f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX/+fPq/+zSqP/bp1P/154//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+zZY97riHN1pbJTECtm9HAbBo - SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+sVQD/3nIAwXpDAceROw3XnkGd2Z9B/tifQP7XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9upV//mxYz/6syb/+rM - m//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rM - nP/mw4n/2qZP/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2qVO/+O9 - f//pzJr/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rM - m//qzJv/6syb/+rMm//qzJv/58WO/9yrW//Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/tObP//CjjqhnnIvD7RzPgHLh0UAwIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfK - HgDu0xsA5aVJANKZPy7YnkHO2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155B/9igQ//YoET/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9ig - Q//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBE/9ifQ//XnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/159C/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9ig - Q//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9igRP/YoET/159C/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnkD/yZM80bKCNjHVmkcA9tkcAOfK - HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaSNADwpkgBpXwvA9acP2HZn0Hy2J9B/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2J5B/8+YPvO9iThliGQpBMuNPQG8ijEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA6s8bAOXPFgD//wAAzZc8C9edQJPZn0H62J9B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9efQP7Tmz/7xJA7l6h9MQz//wAA5ccWAOrP - GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/6pWAP+wWQD//0MA0Jg/JNif - Qb/Zn0H/2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/YnkD+1p1A/8qUPcG0hDcn//9RAP+0WwD/qlYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAwIs2AMaKPABOQBEB151AP9mfQdrZn0H/2J5A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQf/Plz7cwIw5QlxRGwHWlEAAyJE4AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP+7 - dgDXik8B151BW9mfQejZn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Yn0D/0Zo/6cSPO16dYz0C/+KKAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gIAA/3yEAP+6egDVmj8H2J5Ac9mfQfHYn0H+155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tSbP/LJkjx2sYA1CP/ikQD/fIQA/4CAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADAgEAAxIVAAKJbQAHOlj4O2J5AitmfQfbYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9if - QP7VnD/3ypQ9jbKAOA++bkkBwoRAAMGBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/gEAAxYRCAP///wDOmD4U2J9Bldmf - QfrYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0H+155A+82XPZi3hzgW//9PAMeGQwC/gEAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADSpiwA0qoqAMabGQDUmj8Z2J5BntmfQfrYn0H+155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J9A/tee - QPrRmT6gwo07GvrDIgDUrCoA1qktAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD/4CcA/+seAMN8 - TwDZnkEY2Z9BltmfQffYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9ieQP7XnkD30po/mMiTPBm6dUkA/+0eAP/gJwD//wAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3SsA//YVAPHUHgDVm0EU2Z5Bi9mfQfLZn0H/2J5A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0D/2J5A8tOa - P4zGkD0V//8qAP/4FQD/4iwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - AAB+AIEAyZQ3AP//SADUmkAO2Z9BdNmfQejZn0H/2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD+2J5B/9edQOnTmj91xo88D///KgDKlTcAfgCBAP//AAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6ekAAv4FAAJ5YPwHJlj4G2Z5BXNmf - QdvZn0H/2J9B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/159A/tifQf/YnkHb1Js/XbiI - NwepYUMBwoNAAL19QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC/gEAAv4BAALdxQQHXnEED2J9BQNmfQcHZn0H72J9B/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9ifQf/Zn0H72J9BwdSdQEHPlz0DvXVEAb+AQAC/gEAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/qlUA/6pVAP+t - WQDBjC4A2Z5BJdmfQZTZn0Hy2Z9B/9ifQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Yn0H/2Z9B8tmfQZTXnUAlqHoqAP+v - WQD/q1UA/6tVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAOCaRQAIAEwA155AC9ieQWLZn0HQ2Z9B/dif - Qf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Yn0H+2Z9B/dmfQdDYnkFi155ACwoAUwDinEUA//8AAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/6tWAP+sVgD/k2MAx4tCA9ieQS/YnkGg2Z9B7tmfQf/Yn0D+155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+2J9B/9mfQe7YnkGg2J5BL8eLQgP/k2MA/6xWAP+r - VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAypc1APXnDwC4eD4Bn1w2ANab - Qg/Zn0FZ2Z9BxNmfQfjZn0H/2J5B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+2J9B/9mf - QfjZn0HE2Z9BWdabQg+fXDYAuHg+AfXnDwDKlzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaVMQDjzRMAxopOAeGlUAHZoEEh2J5Bd9mfQdXZn0H72Z9B/9if - QP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD+2J9B/9mfQfvZn0HV2Z9BdtmgQSHhpVABxopOAePNEwDGlTEAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+q - VQD/q1gA7dAbAYdJLQDbnUUE2J9CKtmfQYLZn0HV2Z9B+tmfQf/Yn0D/155A/teeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7YnkD/2J9B/9ifQfrZn0HV2Z9Bg9if - QirgoEYEh0ktAO3QGwH/q1gA/6pVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/f4EA/3+BAP+fcgEMAIwA1pxIBNme - Qi7Zn0F72Z9BztmfQffZn0H/2J9B/tieQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie - QP7Yn0D+2J9B/9mfQffZn0HO2Z9Be9qfQi7ZlkMFAgCRAP+ecgH/f4EA/3+BAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/gIAA/4CqANp/XADzpFQB/9emAN6gQQTZn0Ae2Z9CY9mfQbDZn0Hj2Z9B/dif - Qf/YnkH/2J5A/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD+2J5A/9ieQf/Yn0H/2Z9B/dmfQePZn0Gw2Z9CY9mfQB7eoEEE/+ezAPOm - VQHaf1wA/4CqAP+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ - hAD/foQA/6BzAY5EQwC6cUYB2Z9DEtmfQT7Zn0GB2Z9Bv9mfQezZn0H62Z9B/9ifQf/Yn0H+155A/tee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7YnkD+2J5B/9ifQf/Zn0H62Z9B7Nmf - Qb/Zn0GB2Z9BPtmfQxK6cUYBjkRDAP+gcwH/foQA/36EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA0KMtAN+pPwD/uGIAAAAAAOGi - SATbnkMV2aBBQtmfQXnZn0Gx2Z9B1tmfQfDZn0H+2Z9B/9mfQf/YnkH/2J5A/9eeQP/YnkD+155A/tee - QP7XnkD+155A/teeQP7XnkD+155A/teeQP7XnkD+155A/teeQP7XnkD+155A/teeQP/XnkD/2J5B/9if - Qf/Zn0H/2Z9B/tmfQfDZn0HW2Z9BsdmfQXnZoEFC255DFeGiSAQAAAAA/7hiAN+pPwDQoy0A//8AAP// - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+ZbAD/iHsA/6BoAbohkgCBMUIA3aFBAdmeQBHYnkEt2Z9AUtqf - QX/Zn0Gm2Z9ByNmfQePZn0Hx2Z9B9tmfQfrZn0H+2Z9B/9ieQf/YnkH/2J5B/9ieQf/YnkH/2J5B/9ie - Qf/YnkH/2Z9B/9mfQf7Zn0H62Z9B9tmfQfHZn0Hj2Z9ByNmfQabZn0F+2Z9AUtieQS3ZnkAR3aFBAYEx - QgC6IZIA/6BoAf+IewD/mWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADSgFMA635uANaMSgD/jXgB7qBwAQAAIAD//2kA46NHBNueRAvYn0MW2Z9CLtmfQEnZn0Fj2Z9Bedie - QYzZn0Ge2Z9BrNmfQbbZn0G82Z9Bv9mfQb/Zn0G82Z9BttmfQazZn0Ge2J5BjNmfQXnZn0Fj2Z9ASdmf - Qi7Yn0MW255EC+GkSgP///8AAAAbAO6gcAH/jXgB1oxKAOt+bgDSgFMAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/p1oA/94hAP+Z - awH/rGAB/2SnAP/B6gC9f2oAqngnAcCcGgDRpzoA0ao7AdudPwfZnD8M2KBBEdmgQxTaoEIX2qBCF9mg - QxTYoEER2Zw/DNudPwfRqjsB0ac6AMCcGgCqeCcBvX9qAP/B6gD/Y6YA/6xgAf+ZagH/3iEA/6daAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA/6NgAOOUUADLkzkB951ZAP/P - MQD/mW4B9qlcAbJxQwGhWz8Bj0U8AX0yOgF9MjoBj0U8AaFbPwGycUMB9qlcAf+ZbgH/zzEA951ZAMuT - OQHjlFAA/6NgAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////////4AAAB///////////////+AAAAAAf/////////////+AAAAAA - B/////////////8AAAAAAAD////////////8AAAAAAAAP///////////4AAAAAAAAAf//////////8AA - AAAAAAAD//////////8AAAAAAAAAAP/////////+AAAAAAAAAAB/////////+AAAAAAAAAAAH/////// - //AAAAAAAAAAAA/////////AAAAAAAAAAAAD////////wAAAAAAAAAAAA////////wAAAAAAAAAAAAD/ - //////4AAAAAAAAAAAAAf//////8AAAAAAAAAAAAAD//////+AAAAAAAAAAAAAAf//////AAAAAAAAAA - AAAAD//////gAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAAf////8AAAAA - AAAAAAAAAAD////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAAf///4 - AAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA - B///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAAf//gAAAAAAAAAAA - AAAAAAH//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//gAAAAAA - AAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/gA - AAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAA - AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA - AAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAA - AAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AA - AAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA - AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAA - AAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA - AAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AA - AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAA - AAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAA - AAAAAAAP8AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA - AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAA//QAAAAAAAAAAAAAAAAAAv/4A - AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA - AP//QAAAAAAAAAAAAAAAAAL//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAA - AAAAAAP//9AAAAAAAAAAAAAAAAAL///gAAAAAAAAAAAAAAAAB///4AAAAAAAAAAAAAAAAAf///QAAAAA - AAAAAAAAAAAv///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////0AAAAAAAAAAAAAAAC////+ - AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAB - /////9AAAAAAAAAAAAAAC//////gAAAAAAAAAAAAAAf/////9AAAAAAAAAAAAAAv//////gAAAAAAAAA - AAAAH//////9AAAAAAAAAAAAAL///////gAAAAAAAAAAAAB///////8AAAAAAAAAAAAA////////gAAA - AAAAAAAAAf///////8AAAAAAAAAAAAP////////wAAAAAAAAAAAP////////+AAAAAAAAAAAH/////// - //4AAAAAAAAAAH//////////AAAAAAAAAAD//////////8AAAAAAAAAD///////////gAAAAAAAAB/// - /////////AAAAAAAAD////////////4QAAAAAAh/////////////4AAAAAAH//////////////gAAAAA - H///////////////gEACAf////////////////AAAA////////////////////////////////////// - //////////////////////////////////8= - - - \ No newline at end of file diff --git a/v2rayN/Forms/BaseServerForm.Designer.cs b/v2rayN/Forms/BaseServerForm.Designer.cs deleted file mode 100644 index 7fe6a79..0000000 --- a/v2rayN/Forms/BaseServerForm.Designer.cs +++ /dev/null @@ -1,51 +0,0 @@ -namespace v2rayN.Forms -{ - partial class BaseServerForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BaseServerForm)); - this.SuspendLayout(); - // - // BaseServerForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(292, 273); - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "BaseServerForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "BaseServerForm"; - this.ResumeLayout(false); - - } - - #endregion - } -} \ No newline at end of file diff --git a/v2rayN/Forms/BaseServerForm.cs b/v2rayN/Forms/BaseServerForm.cs deleted file mode 100644 index 8471172..0000000 --- a/v2rayN/Forms/BaseServerForm.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class BaseServerForm : BaseForm - { - public int EditIndex { get; set; } - protected VmessItem vmessItem = null; - - public BaseServerForm() - { - InitializeComponent(); - } - - } -} diff --git a/v2rayN/Forms/BaseServerForm.resx b/v2rayN/Forms/BaseServerForm.resx deleted file mode 100644 index 61360d3..0000000 --- a/v2rayN/Forms/BaseServerForm.resx +++ /dev/null @@ -1,1253 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAAAIAAAACAAAAAwAA - AAMAAAADAAAAAwAAAAQAAAAEAAAABAAAAAQAAAADAAAAAwAAAAMAAAADAAAAAgAAAAIAAAACAAAAAQAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAA - AAIAAAADAAAABAAAAAUAAAAGAAAACAAAAAgAAAAKAAAACgAAAAsAAAAMAAAADQAAAA0AAAANAAAADQAA - AAwAAAALAAAACgAAAAoAAAAIAAAACAAAAAYAAAAFAAAABAAAAAMAAAACAAAAAQAAAAEAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAIAAAACAAAABAAAAAUAAAAHAAAACQAAAAwAAAAOAAAAEQAAABMAAAAVAAAAFwAA - ABgAAAAaAAAAGwAAABwAAAAcAAAAHQAAAB0AAAAcAAAAHAAAABsAAAAaAAAAGAAAABcAAAAVAAAAEwAA - ABEAAAAOAAAADAAAAAkAAAAHAAAABQAAAAQAAAACAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAMAAAAEAAAABwAAAAkAAAAMAAAAEAAA - ABMAAAAXAAAAGgAAAB4BAQAgAgEBIwMDASUDAgEmAwMBKAUEASkGAwMrCAUDKwgFAysIBQMsCAUDLAgF - AysIBQMrBgMDKwUEASkDAwEoAwIBJgMDASUCAQEjAQEAIAAAAB4AAAAaAAAAFwAAABMAAAAQAAAADAAA - AAkAAAAHAAAABAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA - AAQAAAAHAAAACgAAAA4AAAASAAAAFwAAABwAAAAgAwIBJAUDAicGBAIqBQUCKwICAi0FAwMvCQcEMQgH - BjACAwQwAAECMQYFBTURDgg5GRMJPBwWCz0cFgs9GRMJPBEOCDkGBQU1AAECMQICBDAIBwYwCQcEMQUD - Ay8CAgItBQUCKwYEAioFAwInAwIBJAAAACAAAAAcAAAAFwAAABIAAAAOAAAACgAAAAcAAAAEAAAAAgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAUAAAAIAAAADQAAABIAAAAXAQAAHQIBASIDAgEmBgMDKgQD - AywAAAEtBQQEMRYRCTckHA0+OCoTSlU/G19sUCF1elomhoZjKZWOaCufkmstqphwL7Kccy+3nnQwup51 - MLqccy+3mXEvspNsLaqOaSufh2QqlHtbJ4ZtTyJ1Vj8cXzgpE0okHA0+FhEJNwUEBDEAAAEtBAMDLAYD - AyoDAgEmAgEBIgAAAB0AAAAXAAAAEgAAAA0AAAAIAAAABQAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAADwAA - ABUAAAAcAgIAIgQCAicFBAErBAMDLgUEBDAWEQo5QjEWT2BHH2d6WiaHkGssq6B2MMWtfzTbt4Y367+M - OfXEjzv5yZM8/M2WPv7PmD7/0Zk//9KaP//Tmz//05s//9OaP//Smj//0Jg+/82WPv3KlD37xZA7+cCM - OvW4iDjrroA126F2McWRbCyre1smh2FHH2dCMRZPFhEKOQUEBDAEAwMuBQQBKwQCAicCAgAiAAAAHAAA - ABUAAAAPAAAACgAAAAYAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAwAAAAYAAAAKAAAAEAAAABcBAQAeAwIBJAYDAyoBAAEsBwUEMSIaDDxSPBtaelomhpRt - LbGoezPVt4Y37MSQO/nMlj3/0Zk//9WcQP/YnkH/2J5B/9ieQP/XnkD/155A/9eeQP7XnkD+155A/tee - QP7XnkD+155A/teeQP7XnkD+155A/9eeQP/YnkD/2J5B/9ieQf/WnED/0po//82WPf/FkTv5uog47Kp8 - M9WVbi6xelomh1E8GlshGQw8BwUFMgEAASwGAwMqAwIBJAEBAB4AAAAXAAAAEAAAAAoAAAAGAAAAAwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAAEQAAABgBAQAgBAMBJgUD - AysDAgMvGRIKOVQ+G1p+XSiKm3MvvrKDNubCjjr5zZY+/tWcQP/XnUD/2J9B/tieQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/2J5A/9ifQf7XnUD/1ZxA/8+YPv7Djzv5s4M25pxyL799XCeLUj0bWhkT - CzkDAgMvBQMDKwQDASYBAQAfAAAAGAAAABEAAAAKAAAABgAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA - AAQAAAAJAAAADwAAABcBAQAfBAMBJgMCASsIBgQwMSQRQ2xQIXOUbS2xr4A14cOOO/nPmD7/1p1A/9ie - QP/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/tieQP/WnUD/0Jg+/8SPO/mvgTXhlG0usWtOInQwIxJDCAYEMAMCASsEAwEnAQEAHwAA - ABcAAAAPAAAACQAAAAQAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAHAAAADQAAABQBAQAdBQQBJQUFAiwGBQQwRDMXTXxc - J4ahdjHKuog48syVPf7VnED/155B/9ieQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/9Wc - QP/Nlj3+uok486B2Mcp6WiaGQjIWTgYFBDAEAwIsBAMBJQEBAB0AAAAUAAAADQAAAAcAAAADAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEAAAACgAA - ABEAAAAaAwIBIwUDAioHBgQvQDAVSoFeKIynejLTv4w6+NCYPv/XnkD/155A/teeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7XnkD/0Jk+/8CNOvimejLTfl0njT0u - FEoGBQQvBQMCKgMCASMAAAAaAAAAEQAAAAoAAAAEAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAADAAAABwAAAA0AAAAWAQAAHwQDASgDAgIuNScSRHxbJoOnejPSwY06+dKa - P//YnkD+2J5A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/2J5B/tObP//Bjjr5pXky03hZJoQzJhJEAwMCLgQDASgBAAAfAAAAFgAA - AA0AAAAHAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAgAAAAQAAAAGQQC - AiQDAQIqFBAINWlOIWuedDDBvos59dGZP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie - Qf/Smj//vYs59ZtyL8JlSh9sEw8INQMBAioEAgIkAAAAGQAAABAAAAAIAAAAAwAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAgAAAAQAAAAKAAAAEwIBAR0FAwInAQECLUg1GE2QaiyjtoU3686WPf/XnUD/2J5A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/zpc+/7SEN+yLZiqlRTMXTwEB - Ai4FAwInAgEBHQAAABMAAAAKAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADAAAABUDAgEgBAIBKBoU - CTVxUyNxpnkyzcWQO/zVnED/2J5A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/1ZxA/8WQO/yidzHPak8hcxkTCTUEAgEoAwIBIAAAABUAAAAMAAAABQAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAACAAAABgAAAA0AAAAXAwMBIgIBAis4KhNDj2ksm7iHN+7QmD7/155A/teeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/tCZ - Pv+2hTfviGQqnTUnEkUDAgIrAwMBIwAAABcAAAANAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAOAQEAGQQCAiQIBgMsXEQdWaB2 - Mb3Djzr51ZxA/9ieQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tacQP/Cjjr5mnAvv1U/G1sIBgMtBAICJAEB - ABkAAAAOAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAIAAAAHAAAADwEBABkFAwIlCQcDLnVWJHCvgDXZzJY9/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/LlT3/qHwz2m1QInIJBwMvBQMCJgEBABkAAAAPAAAABwAAAAIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAA8CAQAaAwIBJhIOBjJ/Xid+toY35tGZ - P//YnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ieQP7RmT7/sYI26HZX - JYARDQYzBAIBJgIBABoAAAAPAAAABgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA - AAYAAAAOAQEAGgYFASYjGgw4jGcrkLuJOO7Tmz//2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7UnD//toY374FeKJIgGAs5BgUBJwEBABoAAAAOAAAABgAA - AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFAAAADQIBABkBAQEkLCENOpJrLZnAjTrz1Js//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/VnED/u4k49IdjKZwpHw07AgEBJAIBABkAAAANAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAA - AAwBAQAXBgQBJSwiDjmXby2fw4469tadQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnUD/vYs594tmKqEqHg07BwUBJQEB - ABcAAAAMAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAKAQEAFgMCASImHAw2lm4umMSPO/bVnED+155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/VnED+vos59ohkKZsiGgw4AwIBIgEBABYAAAAKAAAABAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAACQEB - ABMGBAIhFQ8IMJJrLY/Djzrz1p1A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnUD/vIo59INh - KZMUDggxBgQCIQEBABMAAAAJAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAQBQICHQgGAyqHYyl8wI067tWcQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/VnED/uIc38HhYJYAIBgMrBQICHQAAABAAAAAGAAAAAgAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAADQQD - ARoEAwEnf10mbr2LOebVnED/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/UnD//s4M26HBSInEFAwEnBAQBGgAAAA0AAAAFAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAoFAwIWAQABI2hNIFW5hzjY05o//9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/RmT//qn0021tCHFoDAQEjBAMCFgAA - AAoAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAwICEgAA - AB9GNBU/roA0vdCZPv7XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP7Mlj3/nXIwwTwsEkEAAAEfAwICEgAAAAcAAAACAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0GBAMbHRUJLaF2MJnMlT35155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Djzv6jGcrnhoT - CC8HBAMbAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJBgQDFgAA - ACOGYiluxpE779adQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ifQ//cq1n/2qVN/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9adQP+5hzfwc1QjcwAAACQGAwMWAAAACQAAAAMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABgIBARAAAAEdW0MbR7mIN83Um0D/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2KFH/+XCiP/pypf/26dS/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tGZ - P/+nejPRTjkYSgAAAR0CAQEQAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMBAAEKBgMDGBwU - CSypfDOh0Jg+/deeQf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Zokf/6cqX//jw5P/qzZ7/2aNL/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155B/seSPP2SayynGBEILQcDAxgBAAELAAAAAwAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAACAAAABwcEAxECAAIghWEoZciSPOvXnUD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/154//9iiR//pyZf//Pr3//n06//mw4v/2aRM/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/1p1A/reHN+1uUSFqBAICIAcEAhEAAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCAwALAAAAGE05 - Fzm6iDe/1ZtA/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f7+//jv - 4//nxY7/2aJJ/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/0Jg+/6F3McVBMBQ9AgIAGAID - AAsAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABggGAhIHBQMgnHMvf8+YPvbXnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//Yokf/6cmX//z69//9/f7//f39//jw4v/kvX//2aJI/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/YnkH/wY4694JhKIQIBgMhCAYCEgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEBAELAQEAGFxC - G0DCjjrR151A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 - /f/9/f3//f39//bs3P/kv4L/2KFG/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Tmz//q3401Us3 - F0MCAgAYBQMBCwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABQkHARACAgEgpXgxh9KaP/rYnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//fz8//br2f/huHX/2KFF/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/FkDv7iWQpjQQCASEJBwERAAAABQAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDAwAJAAAAFWhL - H0HGkTzS2J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 - +P/9/f3//f39//39/f/9/f3//f39//Xo1P/iuXf/2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tSb - QP+tfzTWVD0ZRQAAABUDAwAJAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAABAsIAw4HBQIdpnkygNObP/nYnkH+155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//fz6//Tl - zv/fs2v/159C/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5B/sSQO/qJZCmHCQYCHgsIAw4AAAAEAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGBQEHBgYAE1Q+ - GTTFkTvI155B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ - l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//fz7//Pky//gtW3/159C/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/0po//6p8M85FMRQ4BwcBEwYFAQcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwkGBAsCAAEZnHMvatObP/LYnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//Pv4//Hfwf/er2H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/wI069H5cJnIDAgIZCQYECwAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFCgQFDzUn - ESfAjTqt155B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii - R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pv5//Hfwv/esWb/155B/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP7QmD7/n3YwtCwhDioLBQYQAAAABQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQoJAQgAAAAShmIoTM+YPt/YnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//Pn1/+/Ztv/drFz/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9adQP+2hjfkaE0gUgAA - ABIJCQEIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEw0GCw4K - BRmygjWC1p1A+teeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pn2/+/Y - tf/drV3/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/2J5B/siTPPuOaSuKDwsFGxMNBgsAAAADAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQUEAAQEBAANRjQVKMiSPLrYnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7/+/fx/+3Uq//bqVX/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/0po//6h7 - M8I2JxErBgUADQUEAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDgoFBgYE - AhGOaCpK05s/5tieQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f7/+/fy/+zSqP/bqVX/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnUD/vIk56m1PIVMJBQMSDgoEBgAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUEQMIAAAAFLSENnvXnUH5155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7/+vTs/+rOof/apk//154//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie - QP/Ikzz6jWgrhAAAABUUEQMIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxcP - Bws+LBMhyJI8rdieQf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3/+vTs/+rMnP/apU7/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5A/tKZP/+keDK0MSMPJRcPBwsAAAADAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQADAAAADIRgJznRmT/S2J9B/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+fHm/+jJ - lv/Zo0r/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/1p1A/7SFNthlSh5AAAAADAABAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARsV - BgUAAAAMpXkyV9acQOvYnkH/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3/+PLm/+fGj//Zo0r/154//9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH/wY06735cJl4AAAANGRQFBgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIxcMBwwHBRK7iTl82J5B/NeeQf7XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/fz/9+7g/+bDi//YoUb/154//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9ieQf7LlT38lGwthg8KBhQiFgsHAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEQCAcIQS4UG8iSPKLZn0H/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pz/9+7g/+S/gv/YoUf/154//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J5A/tGZPv+leTGsMyQPHRMK - CAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABkVw0ACwoAAgAAAAhcQxwizpg+wdmfQf/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 - +P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/Pz/9erX/+S+gP/YoEP/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/1ZxA/7CBNchCMBQmAgEACAoKAAJLQQoAAAAAAAAAAAAAAAAAAAAAAAAA - AAAcEQsCBwAFCodiKTPUmz/c2J5B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/9uvZ/+K5 - dv/YoEX/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnUH/uog34GRK - HjoLBAYKGxALAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8VCgMLBgQLpXkxTNadQO7YnkH/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ - l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/8+TM/+G3c//Xn0L/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9ieQf/Cjjrwf10mVQ4IBQweFAoDAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAIBcJAwsIAg21hDZj155A9deeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/8+/r/9ObR/9+zaf/YoEP/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/8eS - PPeOaCtsDgoEDR8WCQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVDgcEAAABDL+MOXfXnkH4155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii - R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/Pv/8d/C/9+yaf/Xn0H/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/y5U9+phwLoAAAAIMFQ4HBAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAASAfAQQAAAAMxpA7idieQfzXnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/8+/n/8uDF/92vYv/Xn0L/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Plz79oHYwkAAAAAwfHgEEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABKxoQBQwKBQ/JkzyX2J5B/tee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/8+/n/79m2/92t - X//XnkH/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tGZP/+leTKeDAkFEigYDwUAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAE4IxUFRC8UE82WPaTYnkH/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/8+vf/8Nu6/9ysW//Xn0H/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD+05s//6x+M6s0JBEYNiMTBgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAS8eEAZcQhwXz5g+rtie - Qf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/7+fX/7NOq/9upV//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Um0D/sIE0tEYzFhwvHhEGAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAABKRoPBmlMIBnQmT+12J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/7+PP/7dWu/9uoVf/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/tWcQP+0gza7UzoYHioaDwYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAE5Kg4FcVMiGtGZ - PrjYnkH/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/69u//6s2d/9qmT//Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+1ZxA/7WENr5aQBkfOSsPBgAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAADwsDwV1VSIa0Zk+uNieQf/XnkD+155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/69vD/69Ci/9qm - UP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP7VnED/tYU2vltCGh89LRAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCATBHNU - IhjSmj+12J5B/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/58+n/6MiU/9qkTP/Xnj//155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tWcQP+1hTa6WUAaHTUh - EwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBKRcEa04gFdGZP67YnkH/155A/teeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /v/58uj/6MiU/9mkS//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD+1ZtA/7ODNbRSPRcaPSYWBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFM0 - HgRbQhwQ0Jg+pdieQf/XnkD+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/37+H/5cGH/9miSP/Xnj//155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Tmz//sIE0q0Uy - FhVKLxoEAAAAAAAAAAAAAAAAAAAAAAAAAACCRD4AYC4xAyQXDArPlz6W2J5B/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//YoUf/6cmX//z6 - 9//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/v/7+PT/+fLo//38+//9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/37uD/5cKI/9iiSP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/tKaP/+rfTOdHRMKDlQpKwNpNzIAAAAAAAAAAAAAAAAAAAAAACQb - CgBVPhcCAAAABs2WPYfYnkH8155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/154//9ihR//pyZf//Pr3//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f7///ft3v/pypn/9ejT//38+//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/P/27Nv/471//9ih - Rf/Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkD/0Jg+/ah7 - Mo4AAAAHUDsWAiMaCQAAAAAAAAAAAAAAAAAAAAAAPzMNADUvCgEAAAAFyZM9ddieQfnYnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJ - l//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/96wZP/ht3P/8+TM//z7 - +v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/P/26tj/47x9/9igRP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Nlj36pHgxfQAAAAU2MAoBPzMNAAAAAAAAAAAAAAAAAAAA - AABuUB4AVj8XARsTBQbGkDte2J5B9deeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//3+///26tn/3a5f/9igQ//htnD/8+LJ//z7+f/9/f7//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//38 - +v/159P/4rh0/9ifQ//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/8mT - PPadcy9nIBcHBlE7FgFmShsAAAAAAAAAAAAAAAAAAAAAAH1bIgBrTh0BKB0JBcCMOkbYnkHu2J5B/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9ii - R//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150+/9ef - Qv/gs2v/8d/B//z6+P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//38+//05c7/4bdy/9efQv/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH/xZE78JduLU8rHwoFYEYaAW1QHgAAAAAAAAAAAAAA - AAAAAAAAi1M4ALluSwASABEDsYI2LNedQN3Zn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9efQv/fsWf/8d6///z59v/9/f7//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//z7+P/z48r/37Nq/9eeQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie - Qf/AjTnghGIoMhsGEgOPVToAckQuAAAAAAAAAAAAAAAAAAAAAAB/dAsAvasRAAARAAKacC4Y1ZxAwdmf - Qf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9ed - P//XnkD/155A/9eeQf/esGT/79m3//v49P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//z7+f/x4MP/37Np/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/1ZxA/7mHN8dwUiIbCh4AArGgEAB6bwoAAAAAAAAA - AAAAAAAAAAAAAEZHAAAADwAATT8MAolkKQ7Smj+g2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9efQf/drV7/7tex//v3 - 8P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//z59v/w3sD/3a5g/9eeQf/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Smj//soI2qWhMIBBZSA8CABAAAEdIAAAAAAAAAAAAAAAAAAAAAAAAAAAAALR4PACfZzcBRTAXBs+Y - PnjZn0H92J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92u - YP/XnT//155A/9eeQP/XnkD/155A/9eeQP/cq1n/69Gl//r28P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//v6 - 9v/v2rf/3q5h/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J9A/s6XPf2pfDOBOygVCIpZMAKVYzIAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAt25JAL9yTQEAAAAAyJI8TtieQezYn0H/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9ee - QP/bqVT/69Gl//r17P/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//v48//u2LT/26lW/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/YnkH+yJI87590MFQAAAABlVk8AY5WOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADixB0A/+AeAAAA - AADAjDkt151A0tmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq - 2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/aqFP/6cuZ//n07P/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//v49P/s0qj/3KpY/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9edQP+/jDnXlGwsMgAAAADjyBsAy7AaAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcPx4AfU8rAqF1MBHVnD+r2Z9B/9ieQP7XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/apU3/6cyb//nx5v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//r27v/s0af/2qVO/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/YnkD+1JtA/7eGNrF3VyQWdksoAlM5GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdO - GQCMdxUBAAAAAtGZPnTZn0H52J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//Yokf/6cmX//z6+P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+ - ///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//apEz/5sSL//ny - 5//9/Pz//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f3+//v48v/py5r/2qdS/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ifQP7Olz76rX40fAAAAAONeBUBZU0ZAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArXY3AMqKQQAtFhICyJM9PtieQejYnkH/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yokj/58eR//fv4f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3+//nz - 6f/pyZf/2aNL/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2J5B/8aRO+ueczBGOSAVAq53OACZaDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AACSghAAtrAHAAADAAGwgDYV1p1AutmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xnj//2KJH/+nJl//8+vj//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//Yokf/5L6B//ft3v/8/Pr//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//r17f/nxpH/2qVN/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/VnED/u4k4wIJfKBgbGAABop0GAId4 - DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+dEsAvWpTAXdSJgXSmj972Z9B/Nie - QP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeP//Yokf/6cmX//z6 - +P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YoEX/5cGF//br2f/9/fz//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//jw4//mxIz/2KJH/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2J5B/s+YPv2xgjWDWz0cB6pgSQGkZEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAO+CbgD+iXYA//+JAMuUPTvYnkHf2J9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/154//9iiR//pyZf//Pr4//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/YoET/4bh1//Xo1P/8+/n//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//ny6P/lwof/2aNJ/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/xZA746J3MUH//4YA8oJxAd55 - ZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHJMKACQVDgBtIM3Etad - QKvZn0H/155A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2KFH/+nJ - l//8+vf//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YoET/4rp5//Tn - 0P/9/Pv//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//bs3P/kvX//2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2J5A/tObP/+6iDiwiGMrFZpcOQFrRyYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAnVxAALlxSAEAABMB0po/XtmfQfTYnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - Qf/Xn0L/159C/9efQv/Xn0L/159C/9efQv/Zo0n/6cqY//z6+P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0L/37Jn//Lgxf/8+vf//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//fu - 4P/kvX7/2KFG/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkH+y5U99q6ANGUGABcCn2E+AY1T - OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyiycAyJ0rAB4k - AAHDjzse155BydmfQf/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2qZQ/+K5dv/kvoH/5L6A/+S+gP/kvoD/5L6A/+XA - hf/v27r//Pv5//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Yn0L/4LNr//LgxP/8+/n//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//fz7//Tn0v/iuXb/2J9D/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9WdQP/AjTrNmXEuITk1AAGphSUAm3kiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKfU4AynRVAaNvNQPUmz922Z9B+tifQP7XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - P//gtGz/9OjU//r38P/69u//+vbv//r27//69u//+vbw//v59f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/v//9urZ/92uYP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0H/3a5g/+/auP/8+fT//f3+//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//fz8//Xo1P/iuHT/2KBE/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0D+zpc9+7OENn10UCYFv25PAbRw - RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+B - gwD/i5AA//91AMuWPSzYnkHS2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/150//+C2b//37uD//f7+//39/v/9/f7//f3+//39 - /v/9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9ed - P//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/Xn0H/3a9h/+/Ztv/7+fX//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pv6//LiyP/fs2v/159B/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9adQP/EkDrWo3gxMf//ZAC2Wl0AqlVWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJZaPQDLZWYBjmcpBdWcP37Zn0H62J9A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnT//4LZv//fu3//9/f7//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f7///bq2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/3KtZ/+3U - rf/69/D//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//Pv5//Lhxv/fsmj/159C/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/YnkD/z5g++7eGNoRoSx4GolBQAX9L - MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAwXFRANB5VwBGAEQBzZc+KNieQdLZn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9edP//gtm//9+7f//39/v/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/v//9urZ/92u - YP/XnT//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/3KpZ/+zSqf/69vD//f3+//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pr3//Dd - vf/er2P/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9adQP/FkDvVpnozLFoORQG3a00ArGRJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/mswA87wPAP/AWgDCjzUD1p1Ac9mf - QfjYn0D+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/150//+C2b//37t///f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//3+///26tn/3a5g/9edP//XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/26hT/+rPov/69Oz//f3+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f7//Pr2/+/bu//drV//155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xn0D+z5g++bmIN3mMaSUE/+FqAPSv - DgD/v/0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD//wAA//8AAP/+agDTmkEf2J5Bv9mfQf/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnT//4LZv//fu4P/9/v7//f3+//39 - /v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//v7///br - 2f/drmD/150//9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/26hU/+rMnf/59Or//f3+//39 - /v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39/v/9/f7//f3+//39 - /v/9/f7/+/n1/+7Xs//drFz/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9WdQP/EkDvDrH00Iv//dwD//wAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGdVEA1YJTAF4h - PQHVnEBW2Z9B7difQf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeP//gtW3/9erY//z59v/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z5 - 9f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+vf/9OfS/92tX//XnT//155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/2qVP/+nJlv/37+H//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z5 - 9f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX//Pn1//z59f/8+fX/+fPq/+zSqP/bp1P/154//9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+zZY97riHN1pbJTECtm9HAbBo - SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+sVQD/3nIAwXpDAceROw3XnkGd2Z9B/tifQP7XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9upV//mxYz/6syb/+rM - m//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rM - nP/mw4n/2qZP/9eeP//XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Xnj//2qVO/+O9 - f//pzJr/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rMm//qzJv/6syb/+rM - m//qzJv/6syb/+rMm//qzJv/58WO/9yrW//Xnj//155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/tObP//CjjqhnnIvD7RzPgHLh0UAwIFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfK - HgDu0xsA5aVJANKZPy7YnkHO2Z9B/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155B/9igQ//YoET/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9ig - Q//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBE/9ifQ//XnkH/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/159C/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9ig - Q//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9igQ//YoEP/2KBD/9igRP/YoET/159C/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/WnkD/yZM80bKCNjHVmkcA9tkcAOfK - HgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaSNADwpkgBpXwvA9acP2HZn0Hy2J9B/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/2J5B/8+YPvO9iThliGQpBMuNPQG8ijEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA6s8bAOXPFgD//wAAzZc8C9edQJPZn0H62J9B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9efQP7Tmz/7xJA7l6h9MQz//wAA5ccWAOrP - GwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/6pWAP+wWQD//0MA0Jg/JNif - Qb/Zn0H/2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/YnkD+1p1A/8qUPcG0hDcn//9RAP+0WwD/qlYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAwIs2AMaKPABOQBEB151AP9mfQdrZn0H/2J5A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQf/Plz7cwIw5QlxRGwHWlEAAyJE4AAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP+7 - dgDXik8B151BW9mfQejZn0H/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Yn0D/0Zo/6cSPO16dYz0C/+KKAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/gIAA/3yEAP+6egDVmj8H2J5Ac9mfQfHYn0H+155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/tSbP/LJkjx2sYA1CP/ikQD/fIQA/4CAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADAgEAAxIVAAKJbQAHOlj4O2J5AitmfQfbYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9if - QP7VnD/3ypQ9jbKAOA++bkkBwoRAAMGBQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/gEAAxYRCAP///wDOmD4U2J9Bldmf - QfrYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0H+155A+82XPZi3hzgW//9PAMeGQwC/gEAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADSpiwA0qoqAMabGQDUmj8Z2J5BntmfQfrYn0H+155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/2J9A/tee - QPrRmT6gwo07GvrDIgDUrCoA1qktAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD/4CcA/+seAMN8 - TwDZnkEY2Z9BltmfQffYn0H+155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9ieQP7XnkD30po/mMiTPBm6dUkA/+0eAP/gJwD//wAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/3SsA//YVAPHUHgDVm0EU2Z5Bi9mfQfLZn0H/2J5A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/Yn0D/2J5A8tOa - P4zGkD0V//8qAP/4FQD/4iwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - AAB+AIEAyZQ3AP//SADUmkAO2Z9BdNmfQejZn0H/2J5A/teeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD+2J5B/9edQOnTmj91xo88D///KgDKlTcAfgCBAP//AAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC6ekAAv4FAAJ5YPwHJlj4G2Z5BXNmf - QdvZn0H/2J9B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/159A/tifQf/YnkHb1Js/XbiI - NwepYUMBwoNAAL19QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC/gEAAv4BAALdxQQHXnEED2J9BQNmfQcHZn0H72J9B/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9ifQf/Zn0H72J9BwdSdQEHPlz0DvXVEAb+AQAC/gEAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/qlUA/6pVAP+t - WQDBjC4A2Z5BJdmfQZTZn0Hy2Z9B/9ifQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7Yn0H/2Z9B8tmfQZTXnUAlqHoqAP+v - WQD/q1UA/6tVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAOCaRQAIAEwA155AC9ieQWLZn0HQ2Z9B/dif - Qf7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/Yn0H+2Z9B/dmfQdDYnkFi155ACwoAUwDinEUA//8AAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA/6tWAP+sVgD/k2MAx4tCA9ieQS/YnkGg2Z9B7tmfQf/Yn0D+155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+2J9B/9mfQe7YnkGg2J5BL8eLQgP/k2MA/6xWAP+r - VgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAypc1APXnDwC4eD4Bn1w2ANab - Qg/Zn0FZ2Z9BxNmfQfjZn0H/2J5B/teeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD+2J9B/9mf - QfjZn0HE2Z9BWdabQg+fXDYAuHg+AfXnDwDKlzUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMaVMQDjzRMAxopOAeGlUAHZoEEh2J5Bd9mfQdXZn0H72Z9B/9if - QP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD+2J9B/9mfQfvZn0HV2Z9BdtmgQSHhpVABxopOAePNEwDGlTEAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+q - VQD/q1gA7dAbAYdJLQDbnUUE2J9CKtmfQYLZn0HV2Z9B+tmfQf/Yn0D/155A/teeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7YnkD/2J9B/9ifQfrZn0HV2Z9Bg9if - QirgoEYEh0ktAO3QGwH/q1gA/6pVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/f4EA/3+BAP+fcgEMAIwA1pxIBNme - Qi7Zn0F72Z9BztmfQffZn0H/2J9B/tieQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ie - QP7Yn0D+2J9B/9mfQffZn0HO2Z9Be9qfQi7ZlkMFAgCRAP+ecgH/f4EA/3+BAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAD/gIAA/4CqANp/XADzpFQB/9emAN6gQQTZn0Ae2Z9CY9mfQbDZn0Hj2Z9B/dif - Qf/YnkH/2J5A/9eeQP7XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD+2J5A/9ieQf/Yn0H/2Z9B/dmfQePZn0Gw2Z9CY9mfQB7eoEEE/+ezAPOm - VQHaf1wA/4CqAP+AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+ - hAD/foQA/6BzAY5EQwC6cUYB2Z9DEtmfQT7Zn0GB2Z9Bv9mfQezZn0H62Z9B/9ifQf/Yn0H+155A/tee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9ee - QP/XnkD/155A/9eeQP/XnkD/155A/9eeQP/XnkD/155A/9eeQP7YnkD+2J5B/9ifQf/Zn0H62Z9B7Nmf - Qb/Zn0GB2Z9BPtmfQxK6cUYBjkRDAP+gcwH/foQA/36EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA0KMtAN+pPwD/uGIAAAAAAOGi - SATbnkMV2aBBQtmfQXnZn0Gx2Z9B1tmfQfDZn0H+2Z9B/9mfQf/YnkH/2J5A/9eeQP/YnkD+155A/tee - QP7XnkD+155A/teeQP7XnkD+155A/teeQP7XnkD+155A/teeQP7XnkD+155A/teeQP/XnkD/2J5B/9if - Qf/Zn0H/2Z9B/tmfQfDZn0HW2Z9BsdmfQXnZoEFC255DFeGiSAQAAAAA/7hiAN+pPwDQoy0A//8AAP// - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+ZbAD/iHsA/6BoAbohkgCBMUIA3aFBAdmeQBHYnkEt2Z9AUtqf - QX/Zn0Gm2Z9ByNmfQePZn0Hx2Z9B9tmfQfrZn0H+2Z9B/9ieQf/YnkH/2J5B/9ieQf/YnkH/2J5B/9ie - Qf/YnkH/2Z9B/9mfQf7Zn0H62Z9B9tmfQfHZn0Hj2Z9ByNmfQabZn0F+2Z9AUtieQS3ZnkAR3aFBAYEx - QgC6IZIA/6BoAf+IewD/mWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AADSgFMA635uANaMSgD/jXgB7qBwAQAAIAD//2kA46NHBNueRAvYn0MW2Z9CLtmfQEnZn0Fj2Z9Bedie - QYzZn0Ge2Z9BrNmfQbbZn0G82Z9Bv9mfQb/Zn0G82Z9BttmfQazZn0Ge2J5BjNmfQXnZn0Fj2Z9ASdmf - Qi7Yn0MW255EC+GkSgP///8AAAAbAO6gcAH/jXgB1oxKAOt+bgDSgFMAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/p1oA/94hAP+Z - awH/rGAB/2SnAP/B6gC9f2oAqngnAcCcGgDRpzoA0ao7AdudPwfZnD8M2KBBEdmgQxTaoEIX2qBCF9mg - QxTYoEER2Zw/DNudPwfRqjsB0ac6AMCcGgCqeCcBvX9qAP/B6gD/Y6YA/6xgAf+ZagH/3iEA/6daAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA/6NgAOOUUADLkzkB951ZAP/P - MQD/mW4B9qlcAbJxQwGhWz8Bj0U8AX0yOgF9MjoBj0U8AaFbPwGycUMB9qlcAf+ZbgH/zzEA951ZAMuT - OQHjlFAA/6NgAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA////////4AAAB///////////////+AAAAAAf/////////////+AAAAAA - B/////////////8AAAAAAAD////////////8AAAAAAAAP///////////4AAAAAAAAAf//////////8AA - AAAAAAAD//////////8AAAAAAAAAAP/////////+AAAAAAAAAAB/////////+AAAAAAAAAAAH/////// - //AAAAAAAAAAAA/////////AAAAAAAAAAAAD////////wAAAAAAAAAAAA////////wAAAAAAAAAAAAD/ - //////4AAAAAAAAAAAAAf//////8AAAAAAAAAAAAAD//////+AAAAAAAAAAAAAAf//////AAAAAAAAAA - AAAAD//////gAAAAAAAAAAAAAAf/////wAAAAAAAAAAAAAAD/////4AAAAAAAAAAAAAAAf////8AAAAA - AAAAAAAAAAD////+AAAAAAAAAAAAAAAAf////AAAAAAAAAAAAAAAAD////gAAAAAAAAAAAAAAAAf///4 - AAAAAAAAAAAAAAAAH///8AAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAA - B///wAAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAAAD//+AAAAAAAAAAAAAAAAAAf//gAAAAAAAAAAA - AAAAAAH//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//gAAAAAA - AAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAA//AAAAAAAAAAAAAAAAAAAP/gA - AAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf+AAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAA - AB/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA - AAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAA - AAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAA8AA - AAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAA - AAPAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAA - AAAAAAADwAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAADwAAAAAAA - AAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AA - AAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAA - AAfgAAAAAAAAAAAAAAAAAAAH4AAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAA - AAAAAAAP8AAAAAAAAAAAAAAAAAAAD/gAAAAAAAAAAAAAAAAAAB/4AAAAAAAAAAAAAAAAAAAf+AAAAAAA - AAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAA//QAAAAAAAAAAAAAAAAAAv/4A - AAAAAAAAAAAAAAAAAH/+AAAAAAAAAAAAAAAAAAB//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAA - AP//QAAAAAAAAAAAAAAAAAL//4AAAAAAAAAAAAAAAAAB//+AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAA - AAAAAAP//9AAAAAAAAAAAAAAAAAL///gAAAAAAAAAAAAAAAAB///4AAAAAAAAAAAAAAAAAf///QAAAAA - AAAAAAAAAAAv///4AAAAAAAAAAAAAAAAH///+AAAAAAAAAAAAAAAAB////0AAAAAAAAAAAAAAAC////+ - AAAAAAAAAAAAAAAAf////gAAAAAAAAAAAAAAAH////8AAAAAAAAAAAAAAAD/////gAAAAAAAAAAAAAAB - /////9AAAAAAAAAAAAAAC//////gAAAAAAAAAAAAAAf/////9AAAAAAAAAAAAAAv//////gAAAAAAAAA - AAAAH//////9AAAAAAAAAAAAAL///////gAAAAAAAAAAAAB///////8AAAAAAAAAAAAA////////gAAA - AAAAAAAAAf///////8AAAAAAAAAAAAP////////wAAAAAAAAAAAP////////+AAAAAAAAAAAH/////// - //4AAAAAAAAAAH//////////AAAAAAAAAAD//////////8AAAAAAAAAD///////////gAAAAAAAAB/// - /////////AAAAAAAAD////////////4QAAAAAAh/////////////4AAAAAAH//////////////gAAAAA - H///////////////gEACAf////////////////AAAA////////////////////////////////////// - //////////////////////////////////8= - - - \ No newline at end of file diff --git a/v2rayN/Forms/MainForm.Designer.cs b/v2rayN/Forms/MainForm.Designer.cs deleted file mode 100644 index f5e5745..0000000 --- a/v2rayN/Forms/MainForm.Designer.cs +++ /dev/null @@ -1,830 +0,0 @@ -namespace v2rayN.Forms -{ - partial class MainForm - { - /// - /// 必需的设计器变量。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 清理所有正在使用的资源。 - /// - /// 如果应释放托管资源,为 true;否则为 false。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows 窗体设计器生成的代码 - - /// - /// 设计器支持所需的方法 - 不要 - /// 使用代码编辑器修改此方法的内容。 - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.scMain = new System.Windows.Forms.SplitContainer(); - this.lvServers = new v2rayN.Base.ListViewFlickerFree(); - this.cmsLv = new System.Windows.Forms.ContextMenuStrip(this.components); - this.menuAddServers = new System.Windows.Forms.ToolStripMenuItem(); - this.menuScanScreen = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - this.menuRemoveServer = new System.Windows.Forms.ToolStripMenuItem(); - this.menuRemoveDuplicateServer = new System.Windows.Forms.ToolStripMenuItem(); - this.menuCopyServer = new System.Windows.Forms.ToolStripMenuItem(); - this.menuSetDefaultServer = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.menuMoveTop = new System.Windows.Forms.ToolStripMenuItem(); - this.menuMoveUp = new System.Windows.Forms.ToolStripMenuItem(); - this.menuMoveDown = new System.Windows.Forms.ToolStripMenuItem(); - this.menuMoveBottom = new System.Windows.Forms.ToolStripMenuItem(); - this.menuSelectAll = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); - this.menuTcpingServer = new System.Windows.Forms.ToolStripMenuItem(); - this.menuSpeedServer = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbTestMe = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); - this.qrCodeControl = new v2rayN.Forms.QRCodeControl(); - this.tsbServer = new System.Windows.Forms.ToolStripDropDownButton(); - this.notifyMain = new System.Windows.Forms.NotifyIcon(this.components); - this.cmsMain = new System.Windows.Forms.ContextMenuStrip(this.components); - this.menuSysAgentMode = new System.Windows.Forms.ToolStripMenuItem(); - this.menuNotEnabledHttp = new System.Windows.Forms.ToolStripMenuItem(); - this.menuGlobal = new System.Windows.Forms.ToolStripMenuItem(); - this.menuGlobalPAC = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeep = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeepPAC = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeepNothing = new System.Windows.Forms.ToolStripMenuItem(); - this.menuKeepPACNothing = new System.Windows.Forms.ToolStripMenuItem(); - this.menuServers = new System.Windows.Forms.ToolStripMenuItem(); - this.menuAddServers2 = new System.Windows.Forms.ToolStripMenuItem(); - this.menuScanScreen2 = new System.Windows.Forms.ToolStripMenuItem(); - this.menuCopyPACUrl = new System.Windows.Forms.ToolStripMenuItem(); - this.menuUpdateSubscriptions = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.menuExit = new System.Windows.Forms.ToolStripMenuItem(); - this.bgwScan = new System.ComponentModel.BackgroundWorker(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.txtMsgBox = new System.Windows.Forms.TextBox(); - this.ssMain = new System.Windows.Forms.StatusStrip(); - this.toolSslSocksPortLab = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslSocksPort = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslBlank1 = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslHttpPortLab = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslHttpPort = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslBlank2 = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslPacPortLab = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslPacPort = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslBlank3 = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslServerSpeed = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolSslBlank4 = new System.Windows.Forms.ToolStripStatusLabel(); - this.panel1 = new System.Windows.Forms.Panel(); - this.tsMain = new System.Windows.Forms.ToolStrip(); - this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbSub = new System.Windows.Forms.ToolStripDropDownButton(); - this.tsbSubSetting = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbSubUpdate = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbQRCodeSwitch = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbOptionSetting = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbReload = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbCheckUpdate = new System.Windows.Forms.ToolStripDropDownButton(); - this.tsbCheckUpdateCore = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbCheckUpdatePACList = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator13 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbCheckClearPACList = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator10 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbHelp = new System.Windows.Forms.ToolStripDropDownButton(); - this.toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbLanguageDef = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbLanguageZhHans = new System.Windows.Forms.ToolStripMenuItem(); - this.tsbPromotion = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator11 = new System.Windows.Forms.ToolStripSeparator(); - this.tsbClose = new System.Windows.Forms.ToolStripButton(); - this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); - ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit(); - this.scMain.Panel1.SuspendLayout(); - this.scMain.Panel2.SuspendLayout(); - this.scMain.SuspendLayout(); - this.cmsLv.SuspendLayout(); - this.cmsMain.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.ssMain.SuspendLayout(); - this.tsMain.SuspendLayout(); - this.SuspendLayout(); - // - // scMain - // - resources.ApplyResources(this.scMain, "scMain"); - this.scMain.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.scMain.Name = "scMain"; - // - // scMain.Panel1 - // - this.scMain.Panel1.Controls.Add(this.lvServers); - // - // scMain.Panel2 - // - this.scMain.Panel2.Controls.Add(this.qrCodeControl); - this.scMain.TabStop = false; - // - // lvServers - // - this.lvServers.ContextMenuStrip = this.cmsLv; - resources.ApplyResources(this.lvServers, "lvServers"); - this.lvServers.FullRowSelect = true; - this.lvServers.GridLines = true; - this.lvServers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; - this.lvServers.HideSelection = false; - this.lvServers.Items.AddRange(new System.Windows.Forms.ListViewItem[] { - ((System.Windows.Forms.ListViewItem)(resources.GetObject("lvServers.Items")))}); - this.lvServers.MultiSelect = false; - this.lvServers.Name = "lvServers"; - this.lvServers.UseCompatibleStateImageBehavior = false; - this.lvServers.View = System.Windows.Forms.View.Details; - this.lvServers.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lvServers_ColumnClick); - this.lvServers.SelectedIndexChanged += new System.EventHandler(this.lvServers_SelectedIndexChanged); - this.lvServers.Click += new System.EventHandler(this.lvServers_Click); - this.lvServers.DoubleClick += new System.EventHandler(this.lvServers_DoubleClick); - this.lvServers.KeyDown += new System.Windows.Forms.KeyEventHandler(this.lvServers_KeyDown); - // - // cmsLv - // - this.cmsLv.ImageScalingSize = new System.Drawing.Size(20, 20); - this.cmsLv.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuSetDefaultServer, - this.toolStripSeparator9, - this.menuTcpingServer, - this.menuSpeedServer, - this.tsbTestMe, - this.toolStripSeparator1, - this.menuRemoveServer, - this.menuRemoveDuplicateServer, - this.menuCopyServer, - this.toolStripSeparator3, - this.menuMoveTop, - this.menuMoveUp, - this.menuMoveDown, - this.menuMoveBottom, - this.menuSelectAll, - this.toolStripSeparator6, - this.menuAddServers, - this.menuScanScreen}); - this.cmsLv.Name = "cmsLv"; - resources.ApplyResources(this.cmsLv, "cmsLv"); - // - // menuAddServers - // - this.menuAddServers.Name = "menuAddServers"; - resources.ApplyResources(this.menuAddServers, "menuAddServers"); - this.menuAddServers.Click += new System.EventHandler(this.menuAddServers_Click); - // - // menuScanScreen - // - this.menuScanScreen.Name = "menuScanScreen"; - resources.ApplyResources(this.menuScanScreen, "menuScanScreen"); - this.menuScanScreen.Click += new System.EventHandler(this.menuScanScreen_Click); - // - // toolStripSeparator1 - // - this.toolStripSeparator1.Name = "toolStripSeparator1"; - resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); - // - // menuRemoveServer - // - this.menuRemoveServer.Name = "menuRemoveServer"; - resources.ApplyResources(this.menuRemoveServer, "menuRemoveServer"); - this.menuRemoveServer.Click += new System.EventHandler(this.menuRemoveServer_Click); - // - // menuRemoveDuplicateServer - // - this.menuRemoveDuplicateServer.Name = "menuRemoveDuplicateServer"; - resources.ApplyResources(this.menuRemoveDuplicateServer, "menuRemoveDuplicateServer"); - this.menuRemoveDuplicateServer.Click += new System.EventHandler(this.menuRemoveDuplicateServer_Click); - // - // menuCopyServer - // - this.menuCopyServer.Name = "menuCopyServer"; - resources.ApplyResources(this.menuCopyServer, "menuCopyServer"); - this.menuCopyServer.Click += new System.EventHandler(this.menuCopyServer_Click); - // - // menuSetDefaultServer - // - this.menuSetDefaultServer.Name = "menuSetDefaultServer"; - resources.ApplyResources(this.menuSetDefaultServer, "menuSetDefaultServer"); - this.menuSetDefaultServer.Click += new System.EventHandler(this.menuSetDefaultServer_Click); - // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); - // - // menuMoveTop - // - this.menuMoveTop.Name = "menuMoveTop"; - resources.ApplyResources(this.menuMoveTop, "menuMoveTop"); - this.menuMoveTop.Click += new System.EventHandler(this.menuMoveTop_Click); - // - // menuMoveUp - // - this.menuMoveUp.Name = "menuMoveUp"; - resources.ApplyResources(this.menuMoveUp, "menuMoveUp"); - this.menuMoveUp.Click += new System.EventHandler(this.menuMoveUp_Click); - // - // menuMoveDown - // - this.menuMoveDown.Name = "menuMoveDown"; - resources.ApplyResources(this.menuMoveDown, "menuMoveDown"); - this.menuMoveDown.Click += new System.EventHandler(this.menuMoveDown_Click); - // - // menuMoveBottom - // - this.menuMoveBottom.Name = "menuMoveBottom"; - resources.ApplyResources(this.menuMoveBottom, "menuMoveBottom"); - this.menuMoveBottom.Click += new System.EventHandler(this.menuMoveBottom_Click); - // - // menuSelectAll - // - this.menuSelectAll.Name = "menuSelectAll"; - resources.ApplyResources(this.menuSelectAll, "menuSelectAll"); - this.menuSelectAll.Click += new System.EventHandler(this.menuSelectAll_Click); - // - // toolStripSeparator9 - // - this.toolStripSeparator9.Name = "toolStripSeparator9"; - resources.ApplyResources(this.toolStripSeparator9, "toolStripSeparator9"); - // - // menuTcpingServer - // - this.menuTcpingServer.Name = "menuTcpingServer"; - resources.ApplyResources(this.menuTcpingServer, "menuTcpingServer"); - this.menuTcpingServer.Click += new System.EventHandler(this.menuTcpingServer_Click); - // - // menuSpeedServer - // - this.menuSpeedServer.Name = "menuSpeedServer"; - resources.ApplyResources(this.menuSpeedServer, "menuSpeedServer"); - this.menuSpeedServer.Click += new System.EventHandler(this.menuSpeedServer_Click); - // - // tsbTestMe - // - this.tsbTestMe.Name = "tsbTestMe"; - resources.ApplyResources(this.tsbTestMe, "tsbTestMe"); - this.tsbTestMe.Click += new System.EventHandler(this.tsbTestMe_Click); - // - // toolStripSeparator6 - // - this.toolStripSeparator6.Name = "toolStripSeparator6"; - resources.ApplyResources(this.toolStripSeparator6, "toolStripSeparator6"); - // - // qrCodeControl - // - resources.ApplyResources(this.qrCodeControl, "qrCodeControl"); - this.qrCodeControl.Name = "qrCodeControl"; - // - // tsbServer - // - this.tsbServer.DropDown = this.cmsLv; - this.tsbServer.Image = global::v2rayN.Properties.Resources.server; - resources.ApplyResources(this.tsbServer, "tsbServer"); - this.tsbServer.Name = "tsbServer"; - // - // notifyMain - // - this.notifyMain.ContextMenuStrip = this.cmsMain; - resources.ApplyResources(this.notifyMain, "notifyMain"); - this.notifyMain.MouseClick += new System.Windows.Forms.MouseEventHandler(this.notifyMain_MouseClick); - // - // cmsMain - // - this.cmsMain.ImageScalingSize = new System.Drawing.Size(20, 20); - resources.ApplyResources(this.cmsMain, "cmsMain"); - this.cmsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuSysAgentMode, - this.menuServers, - this.menuAddServers2, - this.menuScanScreen2, - this.menuCopyPACUrl, - this.menuUpdateSubscriptions, - this.toolStripSeparator2, - this.menuExit}); - this.cmsMain.Name = "contextMenuStrip1"; - this.cmsMain.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; - this.cmsMain.ShowCheckMargin = true; - this.cmsMain.ShowImageMargin = false; - // - // menuSysAgentMode - // - this.menuSysAgentMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menuNotEnabledHttp, - this.menuGlobal, - this.menuGlobalPAC, - this.menuKeep, - this.menuKeepPAC, - this.menuKeepNothing, - this.menuKeepPACNothing}); - this.menuSysAgentMode.Name = "menuSysAgentMode"; - resources.ApplyResources(this.menuSysAgentMode, "menuSysAgentMode"); - // - // menuNotEnabledHttp - // - this.menuNotEnabledHttp.Name = "menuNotEnabledHttp"; - resources.ApplyResources(this.menuNotEnabledHttp, "menuNotEnabledHttp"); - this.menuNotEnabledHttp.Click += new System.EventHandler(this.menuNotEnabledHttp_Click); - // - // menuGlobal - // - this.menuGlobal.Name = "menuGlobal"; - resources.ApplyResources(this.menuGlobal, "menuGlobal"); - this.menuGlobal.Click += new System.EventHandler(this.menuGlobal_Click); - // - // menuGlobalPAC - // - this.menuGlobalPAC.Name = "menuGlobalPAC"; - resources.ApplyResources(this.menuGlobalPAC, "menuGlobalPAC"); - this.menuGlobalPAC.Click += new System.EventHandler(this.menuGlobalPAC_Click); - // - // menuKeep - // - this.menuKeep.Name = "menuKeep"; - resources.ApplyResources(this.menuKeep, "menuKeep"); - this.menuKeep.Click += new System.EventHandler(this.menuKeep_Click); - // - // menuKeepPAC - // - this.menuKeepPAC.Name = "menuKeepPAC"; - resources.ApplyResources(this.menuKeepPAC, "menuKeepPAC"); - this.menuKeepPAC.Click += new System.EventHandler(this.menuKeepPAC_Click); - // - // menuKeepNothing - // - this.menuKeepNothing.Name = "menuKeepNothing"; - resources.ApplyResources(this.menuKeepNothing, "menuKeepNothing"); - this.menuKeepNothing.Click += new System.EventHandler(this.menuKeepNothing_Click); - // - // menuKeepPACNothing - // - this.menuKeepPACNothing.Name = "menuKeepPACNothing"; - resources.ApplyResources(this.menuKeepPACNothing, "menuKeepPACNothing"); - this.menuKeepPACNothing.Click += new System.EventHandler(this.menuKeepPACNothing_Click); - // - // menuServers - // - this.menuServers.Name = "menuServers"; - resources.ApplyResources(this.menuServers, "menuServers"); - // - // menuAddServers2 - // - this.menuAddServers2.Name = "menuAddServers2"; - resources.ApplyResources(this.menuAddServers2, "menuAddServers2"); - this.menuAddServers2.Click += new System.EventHandler(this.menuAddServers_Click); - // - // menuScanScreen2 - // - this.menuScanScreen2.Name = "menuScanScreen2"; - resources.ApplyResources(this.menuScanScreen2, "menuScanScreen2"); - this.menuScanScreen2.Click += new System.EventHandler(this.menuScanScreen_Click); - // - // menuCopyPACUrl - // - this.menuCopyPACUrl.Name = "menuCopyPACUrl"; - resources.ApplyResources(this.menuCopyPACUrl, "menuCopyPACUrl"); - this.menuCopyPACUrl.Click += new System.EventHandler(this.menuCopyPACUrl_Click); - // - // menuUpdateSubscriptions - // - this.menuUpdateSubscriptions.Name = "menuUpdateSubscriptions"; - resources.ApplyResources(this.menuUpdateSubscriptions, "menuUpdateSubscriptions"); - this.menuUpdateSubscriptions.Click += new System.EventHandler(this.menuUpdateSubscriptions_Click); - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); - // - // menuExit - // - this.menuExit.Name = "menuExit"; - resources.ApplyResources(this.menuExit, "menuExit"); - this.menuExit.Click += new System.EventHandler(this.menuExit_Click); - // - // bgwScan - // - this.bgwScan.WorkerReportsProgress = true; - this.bgwScan.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bgwScan_DoWork); - this.bgwScan.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.bgwScan_ProgressChanged); - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.scMain); - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // groupBox2 - // - this.groupBox2.Controls.Add(this.txtMsgBox); - this.groupBox2.Controls.Add(this.ssMain); - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; - // - // txtMsgBox - // - this.txtMsgBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(41)))), ((int)(((byte)(49)))), ((int)(((byte)(52))))); - this.txtMsgBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - resources.ApplyResources(this.txtMsgBox, "txtMsgBox"); - this.txtMsgBox.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(226)))), ((int)(((byte)(228))))); - this.txtMsgBox.Name = "txtMsgBox"; - this.txtMsgBox.ReadOnly = true; - // - // ssMain - // - this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolSslSocksPortLab, - this.toolSslSocksPort, - this.toolSslBlank1, - this.toolSslHttpPortLab, - this.toolSslHttpPort, - this.toolSslBlank2, - this.toolSslPacPortLab, - this.toolSslPacPort, - this.toolSslBlank3, - this.toolSslServerSpeed, - this.toolSslBlank4}); - resources.ApplyResources(this.ssMain, "ssMain"); - this.ssMain.Name = "ssMain"; - this.ssMain.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.ssMain_ItemClicked); - // - // toolSslSocksPortLab - // - resources.ApplyResources(this.toolSslSocksPortLab, "toolSslSocksPortLab"); - this.toolSslSocksPortLab.Name = "toolSslSocksPortLab"; - // - // toolSslSocksPort - // - this.toolSslSocksPort.Name = "toolSslSocksPort"; - resources.ApplyResources(this.toolSslSocksPort, "toolSslSocksPort"); - // - // toolSslBlank1 - // - resources.ApplyResources(this.toolSslBlank1, "toolSslBlank1"); - this.toolSslBlank1.Name = "toolSslBlank1"; - this.toolSslBlank1.Spring = true; - // - // toolSslHttpPortLab - // - resources.ApplyResources(this.toolSslHttpPortLab, "toolSslHttpPortLab"); - this.toolSslHttpPortLab.Name = "toolSslHttpPortLab"; - // - // toolSslHttpPort - // - this.toolSslHttpPort.Name = "toolSslHttpPort"; - resources.ApplyResources(this.toolSslHttpPort, "toolSslHttpPort"); - // - // toolSslBlank2 - // - resources.ApplyResources(this.toolSslBlank2, "toolSslBlank2"); - this.toolSslBlank2.Name = "toolSslBlank2"; - this.toolSslBlank2.Spring = true; - // - // toolSslPacPortLab - // - resources.ApplyResources(this.toolSslPacPortLab, "toolSslPacPortLab"); - this.toolSslPacPortLab.Name = "toolSslPacPortLab"; - // - // toolSslPacPort - // - this.toolSslPacPort.Name = "toolSslPacPort"; - resources.ApplyResources(this.toolSslPacPort, "toolSslPacPort"); - // - // toolSslBlank3 - // - resources.ApplyResources(this.toolSslBlank3, "toolSslBlank3"); - this.toolSslBlank3.Name = "toolSslBlank3"; - this.toolSslBlank3.Spring = true; - // - // toolSslServerSpeed - // - resources.ApplyResources(this.toolSslServerSpeed, "toolSslServerSpeed"); - this.toolSslServerSpeed.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; - this.toolSslServerSpeed.Name = "toolSslServerSpeed"; - // - // toolSslBlank4 - // - this.toolSslBlank4.Name = "toolSslBlank4"; - resources.ApplyResources(this.toolSslBlank4, "toolSslBlank4"); - // - // panel1 - // - resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Name = "panel1"; - // - // tsMain - // - this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32); - this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.tsbServer, - this.toolStripSeparator4, - this.tsbSub, - this.tsbQRCodeSwitch, - this.toolStripSeparator8, - this.tsbOptionSetting, - this.toolStripSeparator5, - this.tsbReload, - this.toolStripSeparator7, - this.tsbCheckUpdate, - this.toolStripSeparator10, - this.tsbHelp, - this.tsbPromotion, - this.toolStripSeparator11, - this.tsbClose}); - resources.ApplyResources(this.tsMain, "tsMain"); - this.tsMain.Name = "tsMain"; - this.tsMain.TabStop = true; - // - // toolStripSeparator4 - // - this.toolStripSeparator4.Name = "toolStripSeparator4"; - resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4"); - // - // tsbSub - // - this.tsbSub.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.tsbSubSetting, - this.tsbSubUpdate}); - this.tsbSub.Image = global::v2rayN.Properties.Resources.sub; - resources.ApplyResources(this.tsbSub, "tsbSub"); - this.tsbSub.Name = "tsbSub"; - // - // tsbSubSetting - // - this.tsbSubSetting.Name = "tsbSubSetting"; - resources.ApplyResources(this.tsbSubSetting, "tsbSubSetting"); - this.tsbSubSetting.Click += new System.EventHandler(this.tsbSubSetting_Click); - // - // tsbSubUpdate - // - this.tsbSubUpdate.Name = "tsbSubUpdate"; - resources.ApplyResources(this.tsbSubUpdate, "tsbSubUpdate"); - this.tsbSubUpdate.Click += new System.EventHandler(this.tsbSubUpdate_Click); - // - // tsbQRCodeSwitch - // - this.tsbQRCodeSwitch.CheckOnClick = true; - this.tsbQRCodeSwitch.ForeColor = System.Drawing.Color.Black; - this.tsbQRCodeSwitch.Image = global::v2rayN.Properties.Resources.share; - resources.ApplyResources(this.tsbQRCodeSwitch, "tsbQRCodeSwitch"); - this.tsbQRCodeSwitch.Name = "tsbQRCodeSwitch"; - this.tsbQRCodeSwitch.CheckedChanged += new System.EventHandler(this.tsbQRCodeSwitch_CheckedChanged); - // - // toolStripSeparator8 - // - this.toolStripSeparator8.Name = "toolStripSeparator8"; - resources.ApplyResources(this.toolStripSeparator8, "toolStripSeparator8"); - // - // tsbOptionSetting - // - this.tsbOptionSetting.Image = global::v2rayN.Properties.Resources.option; - resources.ApplyResources(this.tsbOptionSetting, "tsbOptionSetting"); - this.tsbOptionSetting.Name = "tsbOptionSetting"; - this.tsbOptionSetting.Click += new System.EventHandler(this.tsbOptionSetting_Click); - // - // toolStripSeparator5 - // - this.toolStripSeparator5.Name = "toolStripSeparator5"; - resources.ApplyResources(this.toolStripSeparator5, "toolStripSeparator5"); - // - // tsbReload - // - resources.ApplyResources(this.tsbReload, "tsbReload"); - this.tsbReload.Name = "tsbReload"; - this.tsbReload.Click += new System.EventHandler(this.tsbReload_Click); - // - // toolStripSeparator7 - // - this.toolStripSeparator7.Name = "toolStripSeparator7"; - resources.ApplyResources(this.toolStripSeparator7, "toolStripSeparator7"); - // - // tsbCheckUpdate - // - this.tsbCheckUpdate.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.tsbCheckUpdateCore, - this.tsbCheckUpdatePACList, - this.toolStripSeparator13, - this.tsbCheckClearPACList}); - this.tsbCheckUpdate.Image = global::v2rayN.Properties.Resources.checkupdate; - resources.ApplyResources(this.tsbCheckUpdate, "tsbCheckUpdate"); - this.tsbCheckUpdate.Name = "tsbCheckUpdate"; - // - // tsbCheckUpdateCore - // - this.tsbCheckUpdateCore.Name = "tsbCheckUpdateCore"; - resources.ApplyResources(this.tsbCheckUpdateCore, "tsbCheckUpdateCore"); - this.tsbCheckUpdateCore.Click += new System.EventHandler(this.tsbCheckUpdateCore_Click); - // - // tsbCheckUpdatePACList - // - this.tsbCheckUpdatePACList.Name = "tsbCheckUpdatePACList"; - resources.ApplyResources(this.tsbCheckUpdatePACList, "tsbCheckUpdatePACList"); - this.tsbCheckUpdatePACList.Click += new System.EventHandler(this.tsbCheckUpdatePACList_Click); - // - // toolStripSeparator13 - // - this.toolStripSeparator13.Name = "toolStripSeparator13"; - resources.ApplyResources(this.toolStripSeparator13, "toolStripSeparator13"); - // - // tsbCheckClearPACList - // - this.tsbCheckClearPACList.Name = "tsbCheckClearPACList"; - resources.ApplyResources(this.tsbCheckClearPACList, "tsbCheckClearPACList"); - this.tsbCheckClearPACList.Click += new System.EventHandler(this.tsbCheckClearPACList_Click); - // - // toolStripSeparator10 - // - this.toolStripSeparator10.Name = "toolStripSeparator10"; - resources.ApplyResources(this.toolStripSeparator10, "toolStripSeparator10"); - // - // tsbHelp - // - this.tsbHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripSeparator12, - this.tsbLanguageDef, - this.tsbLanguageZhHans}); - this.tsbHelp.Image = global::v2rayN.Properties.Resources.language; - resources.ApplyResources(this.tsbHelp, "tsbHelp"); - this.tsbHelp.Name = "tsbHelp"; - // - // toolStripSeparator12 - // - this.toolStripSeparator12.Name = "toolStripSeparator12"; - resources.ApplyResources(this.toolStripSeparator12, "toolStripSeparator12"); - // - // tsbLanguageDef - // - this.tsbLanguageDef.Name = "tsbLanguageDef"; - resources.ApplyResources(this.tsbLanguageDef, "tsbLanguageDef"); - this.tsbLanguageDef.Click += new System.EventHandler(this.tsbLanguageDef_Click); - // - // tsbLanguageZhHans - // - this.tsbLanguageZhHans.Name = "tsbLanguageZhHans"; - resources.ApplyResources(this.tsbLanguageZhHans, "tsbLanguageZhHans"); - this.tsbLanguageZhHans.Click += new System.EventHandler(this.tsbLanguageZhHans_Click); - // - // tsbPromotion - // - this.tsbPromotion.ForeColor = System.Drawing.Color.Black; - this.tsbPromotion.Image = global::v2rayN.Properties.Resources.help; - resources.ApplyResources(this.tsbPromotion, "tsbPromotion"); - this.tsbPromotion.Name = "tsbPromotion"; - this.tsbPromotion.Click += new System.EventHandler(this.tsbPromotion_Click); - // - // toolStripSeparator11 - // - this.toolStripSeparator11.Name = "toolStripSeparator11"; - resources.ApplyResources(this.toolStripSeparator11, "toolStripSeparator11"); - // - // tsbClose - // - resources.ApplyResources(this.tsbClose, "tsbClose"); - this.tsbClose.Name = "tsbClose"; - this.tsbClose.Click += new System.EventHandler(this.tsbClose_Click); - // - // toolStripLabel1 - // - this.toolStripLabel1.Name = "toolStripLabel1"; - resources.ApplyResources(this.toolStripLabel1, "toolStripLabel1"); - // - // MainForm - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.groupBox2); - this.Controls.Add(this.panel1); - this.Controls.Add(this.tsMain); - this.MaximizeBox = true; - this.MinimizeBox = true; - this.Name = "MainForm"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); - this.Load += new System.EventHandler(this.MainForm_Load); - this.Shown += new System.EventHandler(this.MainForm_Shown); - this.VisibleChanged += new System.EventHandler(this.MainForm_VisibleChanged); - this.Resize += new System.EventHandler(this.MainForm_Resize); - this.scMain.Panel1.ResumeLayout(false); - this.scMain.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit(); - this.scMain.ResumeLayout(false); - this.cmsLv.ResumeLayout(false); - this.cmsMain.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.ssMain.ResumeLayout(false); - this.ssMain.PerformLayout(); - this.tsMain.ResumeLayout(false); - this.tsMain.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - -#endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.TextBox txtMsgBox; - private v2rayN.Base.ListViewFlickerFree lvServers; - private System.Windows.Forms.NotifyIcon notifyMain; - private System.Windows.Forms.ContextMenuStrip cmsMain; - private System.Windows.Forms.ToolStripMenuItem menuExit; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.ToolStripMenuItem menuServers; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; - private System.Windows.Forms.ContextMenuStrip cmsLv; - private System.Windows.Forms.ToolStripMenuItem menuRemoveServer; - private System.Windows.Forms.ToolStripMenuItem menuSetDefaultServer; - private System.Windows.Forms.ToolStripMenuItem menuCopyServer; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; - private System.Windows.Forms.ToolStrip tsMain; - private System.Windows.Forms.ToolStripDropDownButton tsbServer; - private System.Windows.Forms.ToolStripButton tsbOptionSetting; - private System.Windows.Forms.ToolStripButton tsbClose; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; - private System.Windows.Forms.ToolStripMenuItem menuMoveTop; - private System.Windows.Forms.ToolStripMenuItem menuMoveUp; - private System.Windows.Forms.ToolStripMenuItem menuMoveDown; - private System.Windows.Forms.ToolStripMenuItem menuMoveBottom; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; - private System.Windows.Forms.ToolStripMenuItem menuSysAgentMode; - private System.Windows.Forms.ToolStripMenuItem menuGlobal; - private System.Windows.Forms.ToolStripMenuItem menuGlobalPAC; - private System.Windows.Forms.ToolStripMenuItem menuKeep; - private System.Windows.Forms.ToolStripMenuItem menuCopyPACUrl; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - private System.Windows.Forms.SplitContainer scMain; - private QRCodeControl qrCodeControl; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator10; - private System.Windows.Forms.ToolStripDropDownButton tsbCheckUpdate; - private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdateCore; - private System.Windows.Forms.ToolStripMenuItem tsbCheckUpdatePACList; - private System.Windows.Forms.ToolStripMenuItem menuAddServers; - private System.Windows.Forms.ToolStripMenuItem menuSpeedServer; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator11; - private System.Windows.Forms.ToolStripDropDownButton tsbHelp; - private System.Windows.Forms.ToolStripMenuItem menuAddServers2; - private System.ComponentModel.BackgroundWorker bgwScan; - private System.Windows.Forms.ToolStripMenuItem menuScanScreen; - private System.Windows.Forms.ToolStripMenuItem menuScanScreen2; - private System.Windows.Forms.ToolStripDropDownButton tsbSub; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; - private System.Windows.Forms.ToolStripMenuItem tsbSubSetting; - private System.Windows.Forms.ToolStripMenuItem tsbSubUpdate; - private System.Windows.Forms.ToolStripMenuItem tsbCheckClearPACList; - private System.Windows.Forms.ToolStripMenuItem menuKeepPAC; - private System.Windows.Forms.ToolStripMenuItem menuSelectAll; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator12; - private System.Windows.Forms.ToolStripMenuItem tsbLanguageDef; - private System.Windows.Forms.ToolStripMenuItem tsbLanguageZhHans; - private System.Windows.Forms.StatusStrip ssMain; - private System.Windows.Forms.ToolStripStatusLabel toolSslSocksPort; - private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPort; - private System.Windows.Forms.ToolStripStatusLabel toolSslBlank2; - private System.Windows.Forms.ToolStripStatusLabel toolSslBlank1; - private System.Windows.Forms.ToolStripStatusLabel toolSslPacPort; - private System.Windows.Forms.ToolStripStatusLabel toolSslBlank3; - private System.Windows.Forms.ToolStripStatusLabel toolSslSocksPortLab; - private System.Windows.Forms.ToolStripStatusLabel toolSslHttpPortLab; - private System.Windows.Forms.ToolStripStatusLabel toolSslPacPortLab; - private System.Windows.Forms.ToolStripStatusLabel toolSslServerSpeed; - private System.Windows.Forms.ToolStripStatusLabel toolSslBlank4; - private System.Windows.Forms.ToolStripMenuItem menuRemoveDuplicateServer; - private System.Windows.Forms.ToolStripMenuItem menuTcpingServer; - private System.Windows.Forms.ToolStripMenuItem menuNotEnabledHttp; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator13; - private System.Windows.Forms.ToolStripMenuItem menuUpdateSubscriptions; - private System.Windows.Forms.ToolStripMenuItem menuKeepNothing; - private System.Windows.Forms.ToolStripMenuItem menuKeepPACNothing; - private System.Windows.Forms.ToolStripMenuItem tsbTestMe; - private System.Windows.Forms.ToolStripButton tsbReload; - private System.Windows.Forms.ToolStripButton tsbQRCodeSwitch; - private System.Windows.Forms.ToolStripButton tsbPromotion; - private System.Windows.Forms.ToolStripLabel toolStripLabel1; - } -} - diff --git a/v2rayN/Forms/MainForm.cs b/v2rayN/Forms/MainForm.cs deleted file mode 100644 index d378321..0000000 --- a/v2rayN/Forms/MainForm.cs +++ /dev/null @@ -1,1585 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.HttpProxyHandler; -using v2rayN.Mode; -using v2rayN.Base; -using v2rayN.Tool; -using System.Diagnostics; -using System.Drawing; -using System.Net; - -namespace v2rayN.Forms -{ - public partial class MainForm : BaseForm - { - private V2rayHandler v2rayHandler; - private List lvSelecteds = new List(); - private StatisticsHandler statistics = null; - - #region Window 事件 - - public MainForm() - { - InitializeComponent(); - this.ShowInTaskbar = false; - this.WindowState = FormWindowState.Minimized; - HideForm(); - this.Text = Utils.GetVersion(); - Global.processJob = new Job(); - - Application.ApplicationExit += (sender, args) => - { - v2rayHandler.V2rayStop(); - - HttpProxyHandle.CloseHttpAgent(config); - PACServerHandle.Stop(); - - ConfigHandler.SaveConfig(ref config); - statistics?.SaveToFile(); - statistics?.Close(); - }; - } - - private void MainForm_Load(object sender, EventArgs e) - { - ConfigHandler.LoadConfig(ref config); - v2rayHandler = new V2rayHandler(); - v2rayHandler.ProcessEvent += v2rayHandler_ProcessEvent; - - if (config.enableStatistics) - { - statistics = new StatisticsHandler(config, UpdateStatisticsHandler); - } - } - - private void MainForm_VisibleChanged(object sender, EventArgs e) - { - if (statistics == null || !statistics.Enable) return; - if ((sender as Form).Visible) - { - statistics.UpdateUI = true; - } - else - { - statistics.UpdateUI = false; - } - } - - private void MainForm_Shown(object sender, EventArgs e) - { - InitServersView(); - RefreshServers(); - RestoreUI(); - - LoadV2ray(); - - HideForm(); - - } - - private void MainForm_FormClosing(object sender, FormClosingEventArgs e) - { - if (e.CloseReason == CloseReason.UserClosing) - { - StorageUI(); - e.Cancel = true; - HideForm(); - return; - } - } - - private void MainForm_Resize(object sender, EventArgs e) - { - //if (this.WindowState == FormWindowState.Minimized) - //{ - // HideForm(); - //} - //else - //{ - - //} - } - - - //private const int WM_QUERYENDSESSION = 0x0011; - //protected override void WndProc(ref Message m) - //{ - // switch (m.Msg) - // { - // case WM_QUERYENDSESSION: - // Utils.SaveLog("Windows shutdown UnsetProxy"); - - // ConfigHandler.ToJsonFile(config); - // statistics?.SaveToFile(); - // ProxySetting.UnsetProxy(); - // m.Result = (IntPtr)1; - // break; - // default: - // base.WndProc(ref m); - // break; - // } - //} - - private void RestoreUI() - { - scMain.Panel2Collapsed = true; - - if (!config.uiItem.mainSize.IsEmpty) - { - this.Width = config.uiItem.mainSize.Width; - this.Height = config.uiItem.mainSize.Height; - } - - for (int k = 0; k < lvServers.Columns.Count; k++) - { - var width = ConfigHandler.GetformMainLvColWidth(ref config, ((EServerColName)k).ToString(), lvServers.Columns[k].Width); - lvServers.Columns[k].Width = width; - } - } - - private void StorageUI() - { - config.uiItem.mainSize = new Size(this.Width, this.Height); - - for (int k = 0; k < lvServers.Columns.Count; k++) - { - ConfigHandler.AddformMainLvColWidth(ref config, ((EServerColName)k).ToString(), lvServers.Columns[k].Width); - } - } - - #endregion - - #region 显示服务器 listview 和 menu - - /// - /// 刷新服务器 - /// - private void RefreshServers() - { - RefreshServersView(); - //lvServers.AutoResizeColumns(); - RefreshServersMenu(); - } - - /// - /// 初始化服务器列表 - /// - private void InitServersView() - { - lvServers.BeginUpdate(); - lvServers.Items.Clear(); - - lvServers.GridLines = true; - lvServers.FullRowSelect = true; - lvServers.View = View.Details; - lvServers.Scrollable = true; - lvServers.MultiSelect = true; - lvServers.HeaderStyle = ColumnHeaderStyle.Clickable; - - lvServers.Columns.Add("", 30); - lvServers.Columns.Add(UIRes.I18N("LvServiceType"), 80); - lvServers.Columns.Add(UIRes.I18N("LvAlias"), 100); - lvServers.Columns.Add(UIRes.I18N("LvAddress"), 120); - lvServers.Columns.Add(UIRes.I18N("LvPort"), 50); - lvServers.Columns.Add(UIRes.I18N("LvEncryptionMethod"), 90); - lvServers.Columns.Add(UIRes.I18N("LvTransportProtocol"), 70); - lvServers.Columns.Add(UIRes.I18N("LvSubscription"), 50); - lvServers.Columns.Add(UIRes.I18N("LvTestResults"), 70, HorizontalAlignment.Right); - - if (statistics != null && statistics.Enable) - { - lvServers.Columns.Add(UIRes.I18N("LvTodayDownloadDataAmount"), 70); - lvServers.Columns.Add(UIRes.I18N("LvTodayUploadDataAmount"), 70); - lvServers.Columns.Add(UIRes.I18N("LvTotalDownloadDataAmount"), 70); - lvServers.Columns.Add(UIRes.I18N("LvTotalUploadDataAmount"), 70); - } - lvServers.EndUpdate(); - } - - /// - /// 刷新服务器列表 - /// - private void RefreshServersView() - { - lvServers.BeginUpdate(); - lvServers.Items.Clear(); - - for (int k = 0; k < config.vmess.Count; k++) - { - string def = string.Empty; - string totalUp = string.Empty, - totalDown = string.Empty, - todayUp = string.Empty, - todayDown = string.Empty; - if (config.index.Equals(k)) - { - def = "√"; - } - - VmessItem item = config.vmess[k]; - - void _addSubItem(ListViewItem i, string name, string text) - { - i.SubItems.Add(new ListViewItem.ListViewSubItem() { Name = name, Text = text }); - } - bool stats = statistics != null && statistics.Enable; - if (stats) - { - ServerStatItem sItem = statistics.Statistic.Find(item_ => item_.itemId == item.getItemId()); - if (sItem != null) - { - totalUp = Utils.HumanFy(sItem.totalUp); - totalDown = Utils.HumanFy(sItem.totalDown); - todayUp = Utils.HumanFy(sItem.todayUp); - todayDown = Utils.HumanFy(sItem.todayDown); - } - } - ListViewItem lvItem = new ListViewItem(def); - _addSubItem(lvItem, EServerColName.configType.ToString(), ((EConfigType)item.configType).ToString()); - _addSubItem(lvItem, EServerColName.remarks.ToString(), item.remarks); - _addSubItem(lvItem, EServerColName.address.ToString(), item.address); - _addSubItem(lvItem, EServerColName.port.ToString(), item.port.ToString()); - _addSubItem(lvItem, EServerColName.security.ToString(), item.security); - _addSubItem(lvItem, EServerColName.network.ToString(), item.network); - _addSubItem(lvItem, EServerColName.subRemarks.ToString(), item.getSubRemarks(config)); - _addSubItem(lvItem, EServerColName.testResult.ToString(), item.testResult); - if (stats) - { - _addSubItem(lvItem, EServerColName.todayDown.ToString(), todayDown); - _addSubItem(lvItem, EServerColName.todayUp.ToString(), todayUp); - _addSubItem(lvItem, EServerColName.totalDown.ToString(), totalDown); - _addSubItem(lvItem, EServerColName.totalUp.ToString(), totalUp); - } - - if (k % 2 == 1) // 隔行着色 - { - lvItem.BackColor = Color.WhiteSmoke; - } - if (config.index.Equals(k)) - { - //lvItem.Checked = true; - lvItem.ForeColor = Color.DodgerBlue; - lvItem.Font = new Font(lvItem.Font, FontStyle.Bold); - } - - if (lvItem != null) lvServers.Items.Add(lvItem); - } - lvServers.EndUpdate(); - - //if (lvServers.Items.Count > 0) - //{ - // if (lvServers.Items.Count <= testConfigIndex) - // { - // testConfigIndex = lvServers.Items.Count - 1; - // } - // lvServers.Items[testConfigIndex].Selected = true; - // lvServers.Select(); - //} - } - - /// - /// 刷新托盘服务器菜单 - /// - private void RefreshServersMenu() - { - menuServers.DropDownItems.Clear(); - - List lst = new List(); - for (int k = 0; k < config.vmess.Count; k++) - { - VmessItem item = config.vmess[k]; - string name = item.getSummary(); - - ToolStripMenuItem ts = new ToolStripMenuItem(name) - { - Tag = k - }; - if (config.index.Equals(k)) - { - ts.Checked = true; - } - ts.Click += new EventHandler(ts_Click); - lst.Add(ts); - } - menuServers.DropDownItems.AddRange(lst.ToArray()); - } - - private void ts_Click(object sender, EventArgs e) - { - try - { - ToolStripItem ts = (ToolStripItem)sender; - int index = Utils.ToInt(ts.Tag); - SetDefaultServer(index); - } - catch - { - } - } - - private void lvServers_SelectedIndexChanged(object sender, EventArgs e) - { - int index = -1; - try - { - if (lvServers.SelectedIndices.Count > 0) - { - index = lvServers.SelectedIndices[0]; - } - } - catch - { - } - if (index < 0) - { - return; - } - //qrCodeControl.showQRCode(index, config); - } - - private void DisplayToolStatus() - { - toolSslSocksPort.Text = - toolSslHttpPort.Text = - toolSslPacPort.Text = "OFF"; - - toolSslSocksPort.Text = $"{Global.Loopback}:{config.inbound[0].localPort}"; - - if (config.listenerType != (int)ListenerType.noHttpProxy) - { - toolSslHttpPort.Text = $"{Global.Loopback}:{Global.httpPort}"; - if (config.listenerType == ListenerType.GlobalPac || - config.listenerType == ListenerType.PacOpenAndClear || - config.listenerType == ListenerType.PacOpenOnly) - { - if (PACServerHandle.IsRunning) - { - toolSslPacPort.Text = $"{HttpProxyHandle.GetPacUrl()}"; - } - else - { - toolSslPacPort.Text = UIRes.I18N("StartPacFailed"); - } - } - } - - notifyMain.Icon = MainFormHandler.Instance.GetNotifyIcon(config, this.Icon); - } - private void ssMain_ItemClicked(object sender, ToolStripItemClickedEventArgs e) - { - if (!Utils.IsNullOrEmpty(e.ClickedItem.Text)) - { - Utils.SetClipboardData(e.ClickedItem.Text); - } - } - - private void lvServers_ColumnClick(object sender, ColumnClickEventArgs e) - { - if (e.Column < 0) - { - return; - } - - try - { - var tag = lvServers.Columns[e.Column].Tag?.ToString(); - bool asc = Utils.IsNullOrEmpty(tag) ? true : !Convert.ToBoolean(tag); - if (ConfigHandler.SortServers(ref config, (EServerColName)e.Column, asc) != 0) - { - return; - } - lvServers.Columns[e.Column].Tag = Convert.ToString(asc); - RefreshServers(); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - - if (e.Column < 0) - { - return; - } - - } - #endregion - - #region v2ray 操作 - - /// - /// 载入V2ray - /// - private void LoadV2ray() - { - tsbReload.Enabled = false; - - if (Global.reloadV2ray) - { - ClearMsg(); - } - v2rayHandler.LoadV2ray(config); - Global.reloadV2ray = false; - ConfigHandler.SaveConfig(ref config, false); - statistics?.SaveToFile(); - - ChangePACButtonStatus(config.listenerType); - - tsbReload.Enabled = true; - } - - /// - /// 关闭V2ray - /// - private void CloseV2ray() - { - ConfigHandler.SaveConfig(ref config, false); - statistics?.SaveToFile(); - - ChangePACButtonStatus(0); - - v2rayHandler.V2rayStop(); - } - - #endregion - - #region 功能按钮 - - private void lvServers_Click(object sender, EventArgs e) - { - int index = -1; - try - { - if (lvServers.SelectedIndices.Count > 0) - { - index = lvServers.SelectedIndices[0]; - } - } - catch - { - } - if (index < 0) - { - return; - } - qrCodeControl.showQRCode(index, config); - } - - private void lvServers_DoubleClick(object sender, EventArgs e) - { - int index = GetLvSelectedIndex(); - if (index < 0) - { - return; - } - ShowServerForm(config.vmess[index].configType, index); - } - private void ShowServerForm(int configType, int index) - { - BaseServerForm fm; - switch (configType) - { - case (int)EConfigType.Vmess: - fm = new AddServerForm(); - break; - case (int)EConfigType.Shadowsocks: - fm = new AddServer3Form(); - break; - case (int)EConfigType.Socks: - fm = new AddServer4Form(); - break; - case (int)EConfigType.VLESS: - fm = new AddServer5Form(); - break; - case (int)EConfigType.Trojan: - fm = new AddServer6Form(); - break; - default: - fm = new AddServer2Form(); - break; - } - fm.EditIndex = index; - if (fm.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } - } - - - private void lvServers_KeyDown(object sender, KeyEventArgs e) - { - if (e.Control) - { - switch (e.KeyCode) - { - case Keys.A: - menuSelectAll_Click(null, null); - break; - case Keys.C: - menuExport2ShareUrl_Click(null, null); - break; - case Keys.V: - menuAddServers_Click(null, null); - break; - case Keys.P: - menuPingServer_Click(null, null); - break; - case Keys.O: - menuTcpingServer_Click(null, null); - break; - case Keys.R: - menuRealPingServer_Click(null, null); - break; - case Keys.S: - menuScanScreen_Click(null, null); - break; - case Keys.T: - menuSpeedServer_Click(null, null); - break; - } - } - else - { - switch (e.KeyCode) - { - case Keys.Enter: - menuSetDefaultServer_Click(null, null); - break; - case Keys.Delete: - menuRemoveServer_Click(null, null); - break; - case Keys.T: - menuMoveTop_Click(null, null); - break; - case Keys.B: - menuMoveBottom_Click(null, null); - break; - case Keys.U: - menuMoveUp_Click(null, null); - break; - case Keys.D: - menuMoveDown_Click(null, null); - break; - } - } - } - - private void menuAddVmessServer_Click(object sender, EventArgs e) - { - ShowServerForm((int)EConfigType.Vmess, -1); - } - - private void menuAddVlessServer_Click(object sender, EventArgs e) - { - ShowServerForm((int)EConfigType.VLESS, -1); - } - - private void menuRemoveServer_Click(object sender, EventArgs e) - { - - int index = GetLvSelectedIndex(); - if (index < 0) - { - return; - } - if (UI.ShowYesNo(UIRes.I18N("RemoveServer")) == DialogResult.No) - { - return; - } - for (int k = lvSelecteds.Count - 1; k >= 0; k--) - { - ConfigHandler.RemoveServer(ref config, lvSelecteds[k]); - } - //刷新 - RefreshServers(); - LoadV2ray(); - - } - - private void menuRemoveDuplicateServer_Click(object sender, EventArgs e) - { - Utils.DedupServerList(config.vmess, out List servers, config.keepOlderDedupl); - int oldCount = config.vmess.Count; - int newCount = servers.Count; - if (servers != null) - { - config.vmess = servers; - } - //刷新 - RefreshServers(); - LoadV2ray(); - UI.Show(string.Format(UIRes.I18N("RemoveDuplicateServerResult"), oldCount, newCount)); - } - - private void menuCopyServer_Click(object sender, EventArgs e) - { - int index = GetLvSelectedIndex(); - if (index < 0) - { - return; - } - if (ConfigHandler.CopyServer(ref config, index) == 0) - { - //刷新 - RefreshServers(); - } - } - - private void menuSetDefaultServer_Click(object sender, EventArgs e) - { - int index = GetLvSelectedIndex(); - if (index < 0) - { - return; - } - SetDefaultServer(index); - } - - - private void menuPingServer_Click(object sender, EventArgs e) - { - Speedtest("ping"); - } - private void menuTcpingServer_Click(object sender, EventArgs e) - { - Speedtest("tcping"); - } - - private void menuRealPingServer_Click(object sender, EventArgs e) - { - //if (!config.sysAgentEnabled) - //{ - // UI.Show(UIRes.I18N("NeedHttpGlobalProxy")); - // return; - //} - - //UI.Show(UIRes.I18N("SpeedServerTips")); - - Speedtest("realping"); - } - - private void menuSpeedServer_Click(object sender, EventArgs e) - { - //if (!config.sysAgentEnabled) - //{ - // UI.Show(UIRes.I18N("NeedHttpGlobalProxy")); - // return; - //} - - //UI.Show(UIRes.I18N("SpeedServerTips")); - - Speedtest("speedtest"); - } - private void Speedtest(string actionType) - { - if (GetLvSelectedIndex() < 0) return; - ClearTestResult(); - SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, actionType, UpdateSpeedtestHandler); - } - - private void tsbTestMe_Click(object sender, EventArgs e) - { - string result = httpProxyTest() + "ms"; - AppendText(false, string.Format(UIRes.I18N("TestMeOutput"), result)); - } - private int httpProxyTest() - { - SpeedtestHandler statistics = new SpeedtestHandler(ref config, ref v2rayHandler, lvSelecteds, "", UpdateSpeedtestHandler); - return statistics.RunAvailabilityCheck(); - } - - private void menuExport2ClientConfig_Click(object sender, EventArgs e) - { - int index = GetLvSelectedIndex(); - MainFormHandler.Instance.Export2ClientConfig(index, config); - } - - private void menuExport2ServerConfig_Click(object sender, EventArgs e) - { - int index = GetLvSelectedIndex(); - MainFormHandler.Instance.Export2ServerConfig(index, config); - } - - private void menuExport2ShareUrl_Click(object sender, EventArgs e) - { - GetLvSelectedIndex(); - - StringBuilder sb = new StringBuilder(); - foreach (int v in lvSelecteds) - { - string url = ConfigHandler.GetVmessQRCode(config, v); - if (Utils.IsNullOrEmpty(url)) - { - continue; - } - sb.Append(url); - sb.AppendLine(); - } - if (sb.Length > 0) - { - Utils.SetClipboardData(sb.ToString()); - AppendText(false, UIRes.I18N("BatchExportURLSuccessfully")); - //UI.Show(UIRes.I18N("BatchExportURLSuccessfully")); - } - } - - private void menuExport2SubContent_Click(object sender, EventArgs e) - { - GetLvSelectedIndex(); - - StringBuilder sb = new StringBuilder(); - foreach (int v in lvSelecteds) - { - string url = ConfigHandler.GetVmessQRCode(config, v); - if (Utils.IsNullOrEmpty(url)) - { - continue; - } - sb.Append(url); - sb.AppendLine(); - } - if (sb.Length > 0) - { - Utils.SetClipboardData(Utils.Base64Encode(sb.ToString())); - UI.Show(UIRes.I18N("BatchExportSubscriptionSuccessfully")); - } - } - - private void tsbOptionSetting_Click(object sender, EventArgs e) - { - OptionSettingForm fm = new OptionSettingForm(); - if (fm.ShowDialog() == DialogResult.OK) - { - //刷新 - RefreshServers(); - LoadV2ray(); - HttpProxyHandle.RestartHttpAgent(config, true); - } - } - - private void tsbReload_Click(object sender, EventArgs e) - { - Global.reloadV2ray = true; - LoadV2ray(); - } - - private void tsbClose_Click(object sender, EventArgs e) - { - HideForm(); - //this.WindowState = FormWindowState.Minimized; - } - - /// - /// 设置活动服务器 - /// - /// - /// - private int SetDefaultServer(int index) - { - if (index < 0) - { - UI.Show(UIRes.I18N("PleaseSelectServer")); - return -1; - } - if (ConfigHandler.SetDefaultServer(ref config, index) == 0) - { - //刷新 - RefreshServers(); - LoadV2ray(); - } - return 0; - } - - /// - /// 取得ListView选中的行 - /// - /// - private int GetLvSelectedIndex() - { - int index = -1; - lvSelecteds.Clear(); - try - { - if (lvServers.SelectedIndices.Count <= 0) - { - UI.Show(UIRes.I18N("PleaseSelectServer")); - return index; - } - - index = lvServers.SelectedIndices[0]; - foreach (int i in lvServers.SelectedIndices) - { - lvSelecteds.Add(i); - } - return index; - } - catch - { - return index; - } - } - - private void menuAddCustomServer_Click(object sender, EventArgs e) - { - UI.Show(UIRes.I18N("CustomServerTips")); - - OpenFileDialog fileDialog = new OpenFileDialog - { - Multiselect = false, - Filter = "Config|*.json|All|*.*" - }; - if (fileDialog.ShowDialog() != DialogResult.OK) - { - return; - } - string fileName = fileDialog.FileName; - if (Utils.IsNullOrEmpty(fileName)) - { - return; - } - - if (ConfigHandler.AddCustomServer(ref config, fileName) == 0) - { - //刷新 - RefreshServers(); - //LoadV2ray(); - UI.Show(UIRes.I18N("SuccessfullyImportedCustomServer")); - } - else - { - UI.ShowWarning(UIRes.I18N("FailedImportedCustomServer")); - } - } - - private void menuAddShadowsocksServer_Click(object sender, EventArgs e) - { - ShowServerForm((int)EConfigType.Shadowsocks, -1); - ShowForm(); - } - - private void menuAddSocksServer_Click(object sender, EventArgs e) - { - ShowServerForm((int)EConfigType.Socks, -1); - ShowForm(); - } - - private void menuAddTrojanServer_Click(object sender, EventArgs e) - { - ShowServerForm((int)EConfigType.Trojan, -1); - ShowForm(); - } - - private void menuAddServers_Click(object sender, EventArgs e) - { - string clipboardData = Utils.GetClipboardData(); - int result = AddBatchServers(clipboardData); - if (result > 0) - { - UI.Show(string.Format(UIRes.I18N("SuccessfullyImportedServerViaClipboard"), result)); - } - } - - private void menuScanScreen_Click(object sender, EventArgs e) - { - HideForm(); - bgwScan.RunWorkerAsync(); - } - - private int AddBatchServers(string clipboardData, string subid = "") - { - int counter; - int _Add() - { - return ConfigHandler.AddBatchServers(ref config, clipboardData, subid); - } - counter = _Add(); - if (counter < 1) - { - clipboardData = Utils.Base64Decode(clipboardData); - counter = _Add(); - } - RefreshServers(); - return counter; - } - - private void menuUpdateSubscriptions_Click(object sender, EventArgs e) - { - UpdateSubscriptionProcess(); - } - - #endregion - - - #region 提示信息 - - /// - /// 消息委托 - /// - /// - /// - void v2rayHandler_ProcessEvent(bool notify, string msg) - { - AppendText(notify, msg); - } - - delegate void AppendTextDelegate(string text); - void AppendText(bool notify, string msg) - { - try - { - AppendText(msg); - if (notify) - { - notifyMsg(msg); - } - } - catch - { - } - } - - void AppendText(string text) - { - if (this.txtMsgBox.InvokeRequired) - { - Invoke(new AppendTextDelegate(AppendText), new object[] { text }); - } - else - { - //this.txtMsgBox.AppendText(text); - ShowMsg(text); - } - } - - /// - /// 提示信息 - /// - /// - private void ShowMsg(string msg) - { - if (txtMsgBox.Lines.Length > 999) - { - ClearMsg(); - } - this.txtMsgBox.AppendText(msg); - if (!msg.EndsWith(Environment.NewLine)) - { - this.txtMsgBox.AppendText(Environment.NewLine); - } - } - - /// - /// 清除信息 - /// - private void ClearMsg() - { - this.txtMsgBox.Clear(); - } - - /// - /// 托盘信息 - /// - /// - private void notifyMsg(string msg) - { - notifyMain.Text = msg; - } - - #endregion - - - #region 托盘事件 - - private void notifyMain_MouseClick(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - ShowForm(); - } - } - - private void menuExit_Click(object sender, EventArgs e) - { - this.Visible = false; - this.Close(); - - Application.Exit(); - } - - - private void ShowForm() - { - this.Show(); - this.WindowState = FormWindowState.Normal; - this.Activate(); - this.ShowInTaskbar = true; - //this.notifyIcon1.Visible = false; - this.txtMsgBox.ScrollToCaret(); - if (config.index >= 0 && config.index < lvServers.Items.Count) - { - lvServers.EnsureVisible(config.index); // workaround - } - - SetVisibleCore(true); - } - - private void HideForm() - { - //this.WindowState = FormWindowState.Minimized; - this.Hide(); - //this.notifyMain.Icon = this.Icon; - this.notifyMain.Visible = true; - this.ShowInTaskbar = false; - - SetVisibleCore(false); - } - - #endregion - - #region 后台测速 - - private void SetTestResult(int k, string txt) - { - if (k < lvServers.Items.Count) - { - config.vmess[k].testResult = txt; - lvServers.Items[k].SubItems["testResult"].Text = txt; - } - } - private void ClearTestResult() - { - foreach (int s in lvSelecteds) - { - SetTestResult(s, ""); - } - } - private void UpdateSpeedtestHandler(int index, string msg) - { - lvServers.Invoke((MethodInvoker)delegate - { - SetTestResult(index, msg); - }); - } - - private void UpdateStatisticsHandler(ulong up, ulong down, List statistics) - { - try - { - up /= (ulong)(config.statisticsFreshRate / 1000f); - down /= (ulong)(config.statisticsFreshRate / 1000f); - toolSslServerSpeed.Text = string.Format("{0}/s↑ | {1}/s↓", Utils.HumanFy(up), Utils.HumanFy(down)); - - List datas = new List(); - for (int i = 0; i < config.vmess.Count; i++) - { - int index = statistics.FindIndex(item_ => item_.itemId == config.vmess[i].getItemId()); - if (index != -1) - { - lvServers.Invoke((MethodInvoker)delegate - { - lvServers.BeginUpdate(); - - lvServers.Items[i].SubItems["todayDown"].Text = Utils.HumanFy(statistics[index].todayDown); - lvServers.Items[i].SubItems["todayUp"].Text = Utils.HumanFy(statistics[index].todayUp); - lvServers.Items[i].SubItems["totalDown"].Text = Utils.HumanFy(statistics[index].totalDown); - lvServers.Items[i].SubItems["totalUp"].Text = Utils.HumanFy(statistics[index].totalUp); - - lvServers.EndUpdate(); - }); - } - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - #endregion - - #region 移动服务器 - - private void menuMoveTop_Click(object sender, EventArgs e) - { - MoveServer(EMove.Top); - } - - private void menuMoveUp_Click(object sender, EventArgs e) - { - MoveServer(EMove.Up); - } - - private void menuMoveDown_Click(object sender, EventArgs e) - { - MoveServer(EMove.Down); - } - - private void menuMoveBottom_Click(object sender, EventArgs e) - { - MoveServer(EMove.Bottom); - } - - private void MoveServer(EMove eMove) - { - int index = GetLvSelectedIndex(); - if (index < 0) - { - UI.Show(UIRes.I18N("PleaseSelectServer")); - return; - } - if (ConfigHandler.MoveServer(ref config, index, eMove) == 0) - { - //TODO: reload is not good. - RefreshServers(); - //LoadV2ray(); - } - } - private void menuSelectAll_Click(object sender, EventArgs e) - { - foreach (ListViewItem item in lvServers.Items) - { - item.Selected = true; - } - } - - #endregion - - #region 系统代理相关 - - private void menuCopyPACUrl_Click(object sender, EventArgs e) - { - Utils.SetClipboardData(HttpProxyHandle.GetPacUrl()); - } - - private void menuNotEnabledHttp_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.noHttpProxy); - } - private void menuGlobal_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.GlobalHttp); - } - private void menuGlobalPAC_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.GlobalPac); - } - private void menuKeep_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.HttpOpenAndClear); - } - private void menuKeepPAC_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.PacOpenAndClear); - } - private void menuKeepNothing_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.HttpOpenOnly); - } - private void menuKeepPACNothing_Click(object sender, EventArgs e) - { - SetListenerType(ListenerType.PacOpenOnly); - } - private void SetListenerType(ListenerType type) - { - config.listenerType = type; - ChangePACButtonStatus(type); - } - - private void ChangePACButtonStatus(ListenerType type) - { - if (type != ListenerType.noHttpProxy) - { - HttpProxyHandle.RestartHttpAgent(config, false); - } - else - { - HttpProxyHandle.CloseHttpAgent(config); - } - - for (int k = 0; k < menuSysAgentMode.DropDownItems.Count; k++) - { - ToolStripMenuItem item = ((ToolStripMenuItem)menuSysAgentMode.DropDownItems[k]); - item.Checked = ((int)type == k); - } - - ConfigHandler.SaveConfig(ref config, false); - DisplayToolStatus(); - } - - #endregion - - - #region CheckUpdate - - private void askToDownload(DownloadHandle downloadHandle, string url) - { - if (UI.ShowYesNo(string.Format(UIRes.I18N("DownloadYesNo"), url)) == DialogResult.Yes) - { - if (httpProxyTest() > 0) - { - int httpPort = config.GetLocalPort(Global.InboundHttp); - WebProxy webProxy = new WebProxy(Global.Loopback, httpPort); - downloadHandle.DownloadFileAsync(url, webProxy, 600); - } - else - { - downloadHandle.DownloadFileAsync(url, null, 600); - } - } - } - private void tsbCheckUpdateN_Click(object sender, EventArgs e) - { - //System.Diagnostics.Process.Start(Global.UpdateUrl); - DownloadHandle downloadHandle = null; - if (downloadHandle == null) - { - downloadHandle = new DownloadHandle(); - downloadHandle.AbsoluteCompleted += (sender2, args) => - { - if (args.Success) - { - AppendText(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "v2rayN")); - - string url = args.Msg; - this.Invoke((MethodInvoker)(delegate - { - askToDownload(downloadHandle, url); - })); - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - AppendText(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully")); - - try - { - string fileName = Utils.GetPath(downloadHandle.DownloadFileName); - Process process = new Process - { - StartInfo = new ProcessStartInfo - { - FileName = "v2rayUpgrade.exe", - Arguments = "\"" + fileName + "\"", - WorkingDirectory = Utils.StartupPath() - } - }; - process.Start(); - if (process.Id > 0) - { - menuExit_Click(null, null); - } - } - catch (Exception ex) - { - AppendText(false, ex.Message); - } - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - } - - AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayN")); - downloadHandle.CheckUpdateAsync("v2rayN"); - } - - private void tsbCheckUpdateCore_Click(object sender, EventArgs e) - { - DownloadHandle downloadHandle = null; - if (downloadHandle == null) - { - downloadHandle = new DownloadHandle(); - downloadHandle.AbsoluteCompleted += (sender2, args) => - { - if (args.Success) - { - AppendText(false, string.Format(UIRes.I18N("MsgParsingSuccessfully"), "v2rayCore")); - - string url = args.Msg; - this.Invoke((MethodInvoker)(delegate - { - askToDownload(downloadHandle, url); - })); - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - AppendText(false, UIRes.I18N("MsgDownloadV2rayCoreSuccessfully")); - AppendText(false, UIRes.I18N("MsgUnpacking")); - - try - { - CloseV2ray(); - - string fileName = downloadHandle.DownloadFileName; - fileName = Utils.GetPath(fileName); - FileManager.ZipExtractToFile(fileName); - - AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfullyMore")); - - Global.reloadV2ray = true; - LoadV2ray(); - - AppendText(false, UIRes.I18N("MsgUpdateV2rayCoreSuccessfully")); - } - catch (Exception ex) - { - AppendText(false, ex.Message); - } - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - } - - AppendText(false, string.Format(UIRes.I18N("MsgStartUpdating"), "v2rayCore")); - downloadHandle.CheckUpdateAsync("Core"); - } - - private void tsbCheckUpdatePACList_Click(object sender, EventArgs e) - { - DownloadHandle pacListHandle = null; - if (pacListHandle == null) - { - pacListHandle = new DownloadHandle(); - pacListHandle.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - string result = args.Msg; - if (Utils.IsNullOrEmpty(result)) - { - return; - } - pacListHandle.GenPacFile(result); - - AppendText(false, UIRes.I18N("MsgPACUpdateSuccessfully")); - } - else - { - AppendText(false, UIRes.I18N("MsgPACUpdateFailed")); - } - }; - pacListHandle.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - } - AppendText(false, UIRes.I18N("MsgStartUpdatingPAC")); - pacListHandle.WebDownloadString(config.urlGFWList); - } - - private void tsbCheckClearPACList_Click(object sender, EventArgs e) - { - try - { - File.WriteAllText(Utils.GetPath(Global.pacFILE), Utils.GetEmbedText(Global.BlankPacFileName), Encoding.UTF8); - AppendText(false, UIRes.I18N("MsgSimplifyPAC")); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - #endregion - - #region Help - - - private void tsbAbout_Click(object sender, EventArgs e) - { - Process.Start(Global.AboutUrl); - } - - private void tsbV2rayWebsite_Click(object sender, EventArgs e) - { - Process.Start(Global.v2rayWebsiteUrl); - } - - private void tsbPromotion_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start(Global.PromotionUrl); - } - #endregion - - #region ScanScreen - - - private void bgwScan_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) - { - string ret = Utils.ScanScreen(); - bgwScan.ReportProgress(0, ret); - } - - private void bgwScan_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) - { - ShowForm(); - - string result = Convert.ToString(e.UserState); - if (Utils.IsNullOrEmpty(result)) - { - UI.ShowWarning(UIRes.I18N("NoValidQRcodeFound")); - } - else - { - if (AddBatchServers(result) > 0) - { - UI.Show(UIRes.I18N("SuccessfullyImportedServerViaScan")); - } - } - } - - #endregion - - #region 订阅 - private void tsbSubSetting_Click(object sender, EventArgs e) - { - SubSettingForm fm = new SubSettingForm(); - if (fm.ShowDialog() == DialogResult.OK) - { - RefreshServers(); - } - } - - private void tsbSubUpdate_Click(object sender, EventArgs e) - { - UpdateSubscriptionProcess(); - } - - /// - /// the subscription update process - /// - private void UpdateSubscriptionProcess() - { - AppendText(false, UIRes.I18N("MsgUpdateSubscriptionStart")); - - if (config.subItem == null || config.subItem.Count <= 0) - { - AppendText(false, UIRes.I18N("MsgNoValidSubscription")); - return; - } - - for (int k = 1; k <= config.subItem.Count; k++) - { - string id = config.subItem[k - 1].id.TrimEx(); - string url = config.subItem[k - 1].url.TrimEx(); - string hashCode = $"{k}->"; - if (config.subItem[k - 1].enabled == false) - { - continue; - } - if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url)) - { - AppendText(false, $"{hashCode}{UIRes.I18N("MsgNoValidSubscription")}"); - continue; - } - - DownloadHandle downloadHandle3 = new DownloadHandle(); - downloadHandle3.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - AppendText(false, $"{hashCode}{UIRes.I18N("MsgGetSubscriptionSuccessfully")}"); - string result = Utils.Base64Decode(args.Msg); - if (Utils.IsNullOrEmpty(result)) - { - AppendText(false, $"{hashCode}{UIRes.I18N("MsgSubscriptionDecodingFailed")}"); - return; - } - - ConfigHandler.RemoveServerViaSubid(ref config, id); - AppendText(false, $"{hashCode}{UIRes.I18N("MsgClearSubscription")}"); - RefreshServers(); - if (AddBatchServers(result, id) > 0) - { - } - else - { - AppendText(false, $"{hashCode}{UIRes.I18N("MsgFailedImportSubscription")}"); - } - AppendText(false, $"{hashCode}{UIRes.I18N("MsgUpdateSubscriptionEnd")}"); - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle3.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - - downloadHandle3.WebDownloadString(url); - AppendText(false, $"{hashCode}{UIRes.I18N("MsgStartGettingSubscriptions")}"); - } - } - - private void tsbQRCodeSwitch_CheckedChanged(object sender, EventArgs e) - { - bool bShow = tsbQRCodeSwitch.Checked; - scMain.Panel2Collapsed = !bShow; - } - #endregion - - #region Language - - string msg = string.Format(UIRes.I18N("RestartService")); - - private void tsbLanguageDef_Click(object sender, EventArgs e) - { - SetCurrentLanguage("en"); - UI.Show(UIRes.I18N("RestartService")); - } - - private void tsbLanguageZhHans_Click(object sender, EventArgs e) - { - SetCurrentLanguage("zh-Hans"); - UI.Show(UIRes.I18N("RestartService")); - } - private void SetCurrentLanguage(string value) - { - Utils.RegWriteValue(Global.MyRegPath, Global.MyRegKeyLanguage, value); - //Application.Restart(); - } - - - - - - #endregion - - private void toolStripButton2_Click(object sender, EventArgs e) - { - - } - } -} diff --git a/v2rayN/Forms/MainForm.resx b/v2rayN/Forms/MainForm.resx deleted file mode 100644 index e3a36ba..0000000 --- a/v2rayN/Forms/MainForm.resx +++ /dev/null @@ -1,1355 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Fill - - - - 3, 17 - - - 327, 17 - - - 326, 22 - - - 切換連線至此節點 (Enter) - - - 323, 6 - - - 326, 22 - - - 測試所選節點延遲 TCP Ping [可多選] (Ctrl+O) - - - 326, 22 - - - 測試所選節點下載速度 [可多選] (Ctrl+T) - - - 326, 22 - - - 測試當前服務狀態 - - - 323, 6 - - - 326, 22 - - - 刪除所選節點 [可多選] (Delete) - - - 326, 22 - - - 刪除重複節點 - - - 326, 22 - - - 複製所選節點 - - - 323, 6 - - - 326, 22 - - - 上移至頂 (T) - - - 326, 22 - - - 上移 (U) - - - 326, 22 - - - 下移 (D) - - - 326, 22 - - - 下移至底 (B) - - - 326, 22 - - - 全選 (Ctrl+A) - - - 323, 6 - - - 326, 22 - - - 從剪貼簿批次匯入節點 URL (Ctrl+V) - - - 326, 22 - - - 掃描螢幕上的 QR 碼 (Ctrl+S) - - - 327, 336 - - - cmsLv - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 - ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu - PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA - BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 - bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp - bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz - dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA - CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp - bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 - bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 - ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 - ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - - - 0, 0 - - - 686, 331 - - - - 0 - - - lvServers - - - v2rayN.Base.ListViewFlickerFree, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - scMain.Panel1 - - - 0 - - - scMain.Panel1 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - scMain - - - 0 - - - Fill - - - 0, 0 - - - 256, 331 - - - 2 - - - qrCodeControl - - - v2rayN.Forms.QRCodeControl, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - scMain.Panel2 - - - 0 - - - scMain.Panel2 - - - System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - scMain - - - 1 - - - 100 - - - 946, 331 - - - 686 - - - 0 - - - scMain - - - System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 0 - - - Magenta - - - 85, 53 - - - 節點設定 - - - ImageAboveText - - - 17, 17 - - - 137, 17 - - - NoControl - - - 354, 22 - - - [直連模式] 使瀏覽器不代理任何網站連線 - - - 354, 22 - - - [全局模式] 使瀏覽器代理所有網站連線 - - - 354, 22 - - - [分流模式] 使瀏覽器僅代理被中國封鎖的網站 - - - 354, 22 - - - [手動模式] 僅開啟 HTTP 代理,並清除系統代理設定 - - - 354, 22 - - - [手動模式] 僅開啟 PAC,並清除系統代理設定 - - - 354, 22 - - - [手動模式] 僅開啟 HTTP 代理,不改變系統代理設定 - - - 354, 22 - - - [手動模式] 僅開啟 PAC,不改變系統代理設定 - - - 223, 22 - - - 路由模式 - - - 223, 22 - - - 節點列表 - - - 223, 22 - - - 從剪貼簿批次匯入節點 URL - - - 223, 22 - - - 掃描螢幕上的 QR 碼 - - - 223, 22 - - - 複製本機 PAC 網址 - - - 223, 22 - - - 更新訂閲 - - - 220, 6 - - - 223, 22 - - - 結束應用程式 - - - 224, 164 - - - cmsMain - - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - v2rayN - - - True - - - 498, 17 - - - Fill - - - 0, 66 - - - 952, 351 - - - 0 - - - 節點列表 - - - groupBox1 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 2 - - - Fill - - - 3, 17 - - - 0 - - - True - - - Vertical - - - 946, 134 - - - 3 - - - txtMsgBox - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 0 - - - 228, 18 - - - 微软雅黑, 8pt - - - 52, 17 - - - SOCKS5: - - - 0, 17 - - - 微软雅黑, 8pt - - - 195, 17 - - - 微软雅黑, 8pt - - - 39, 17 - - - HTTP: - - - 0, 17 - - - 微软雅黑, 8pt - - - 195, 17 - - - 微软雅黑, 8pt - - - 33, 17 - - - PAC: - - - 0, 17 - - - 微软雅黑, 8pt - - - 195, 17 - - - False - - - 微软雅黑, 8pt - - - No - - - 220, 17 - - - 未開啟網速顯示 - - - MiddleRight - - - 0, 17 - - - 3, 151 - - - 946, 22 - - - 0 - - - statusStrip1 - - - ssMain - - - System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 1 - - - Bottom - - - 0, 417 - - - 952, 176 - - - 3 - - - 系統資訊 - - - groupBox2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 3 - - - Top - - - 0, 56 - - - 952, 10 - - - 2 - - - panel1 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 4 - - - 409, 17 - - - 6, 56 - - - 180, 22 - - - 節點訂閱設定 - - - 180, 22 - - - 更新訂閱 - - - Magenta - - - 85, 53 - - - 節點訂閱 - - - ImageAboveText - - - Magenta - - - 74, 53 - - - 節點 QR - - - BottomCenter - - - ImageAboveText - - - 6, 56 - - - Magenta - - - 76, 53 - - - 參數設定 - - - ImageAboveText - - - 6, 56 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE3SURBVFhH7ZaBDQIhDEVvBEdwBDfQDXQER3AD3cARdAPd - QDfSDbQvuSb1AicFjJrwkxcN0FIolOuamv5VE2E+gLaPayWchEcE+hhTXVPhIoQmDcFYbKpoJtwEdX4X - jgIrXfTwnzb6dBw22BaJVdjJmWQs1/SdBRtE0U5cBXW2oSFRO0HtSEeW2FZ1wsq9sjuRdTDVAXnNuWLY - 6JnAl0sYa/Q5q1dhq35ci+Bkq2HJvbZpxGeybAAuw4Fq+cnW1wPITgHFYxvBUw+qHEIL1yq1vDKhVlH3 - NQwF4JkcFRWiUAB7IVW2FFPO3YqlgPd+LJf02e8Fdi3rMdIAcLDuf9UpeT0IS0G/hvhPm305vSl7EQFY - B6zCvozvYGzRM8zEoeg5TPZwDaGvpHQni1yzSxbXPW9q+hF13ROHuJnQcjbhtQAAAABJRU5ErkJggg== - - - - BottomCenter - - - Magenta - - - 76, 53 - - - 重啟服務 - - - ImageAboveText - - - 6, 56 - - - 247, 22 - - - 線上更新 V2ray 核心 - - - 247, 22 - - - 線上更新 PAC (需要開啟代理) - - - 244, 6 - - - 247, 22 - - - 簡化 PAC (需要設定 Core 路由) - - - Magenta - - - 85, 53 - - - 線上更新 - - - ImageAboveText - - - 6, 56 - - - 158, 6 - - - 161, 22 - - - 語言-[中文繁體] - - - 161, 22 - - - 语言-[中文简体] - - - Magenta - - - 89, 53 - - - 切換語言 - - - ImageAboveText - - - Magenta - - - 76, 53 - - - 使用教學 - - - ImageAboveText - - - 6, 56 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAySURBVFhH7c6xDQAgCEVBRnVTHU2ZABuMxV3yOvJDAAA/ - GqfZVG6X8mg1dfUAAPBQxAZd0SJruVXHWwAAAABJRU5ErkJggg== - - - - Magenta - - - 64, 53 - - - 最小化 - - - ImageAboveText - - - 0, 0 - - - 952, 56 - - - 1 - - - tsMain - - - System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 5 - - - 96, 53 - - - toolStripLabel1 - - - True - - - 25 - - - 6, 12 - - - 952, 593 - - - 4, 4, 4, 4 - - - v2rayN - - - menuAddServers - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuScanScreen - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator1 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRemoveServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuRemoveDuplicateServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuCopyServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSetDefaultServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator3 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveTop - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveUp - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveDown - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuMoveBottom - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSelectAll - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator9 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuTcpingServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSpeedServer - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbTestMe - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator6 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbServer - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - notifyMain - - - System.Windows.Forms.NotifyIcon, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuSysAgentMode - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuNotEnabledHttp - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuGlobal - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuGlobalPAC - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeep - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepPAC - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepNothing - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuKeepPACNothing - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuServers - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuAddServers2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuScanScreen2 - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuCopyPACUrl - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuUpdateSubscriptions - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator2 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - menuExit - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - bgwScan - - - System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslSocksPortLab - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslSocksPort - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank1 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslHttpPortLab - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslHttpPort - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank2 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslPacPortLab - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslPacPort - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank3 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslServerSpeed - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolSslBlank4 - - - System.Windows.Forms.ToolStripStatusLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator4 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSub - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSubSetting - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbSubUpdate - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbQRCodeSwitch - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator8 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbOptionSetting - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator5 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbReload - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator7 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdate - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdateCore - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckUpdatePACList - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator13 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbCheckClearPACList - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator10 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbHelp - - - System.Windows.Forms.ToolStripDropDownButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator12 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbLanguageDef - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbLanguageZhHans - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbPromotion - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripSeparator11 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tsbClose - - - System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripLabel1 - - - System.Windows.Forms.ToolStripLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MainForm - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - \ No newline at end of file diff --git a/v2rayN/Forms/MainForm.zh-Hans.resx b/v2rayN/Forms/MainForm.zh-Hans.resx deleted file mode 100644 index fececb5..0000000 --- a/v2rayN/Forms/MainForm.zh-Hans.resx +++ /dev/null @@ -1,525 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 300, 22 - - - 添加 [VMess] 服务器 - - - 300, 22 - - - 添加 [VLESS] 服务器 - - - 300, 22 - - - 添加 [Shadowsocks] 服务器 - - - 300, 22 - - - 添加 [Socks] 服务器 - - - 300, 22 - - - 添加 [Trojan] 服务器 - - - 300, 22 - - - 添加自定义配置服务器 - - - 300, 22 - - - 从剪贴板导入批量 URL (Ctrl+V) - - - 300, 22 - - - 扫描屏幕上的二维码 (Ctrl+S) - - - 297, 6 - - - 300, 22 - - - 移除所选服务器 [可多选] (Delete) - - - 300, 22 - - - 移除重复的服务器 - - - 300, 22 - - - 复制所选服务器 - - - 300, 22 - - - 设为活动服务器 (Enter) - - - 297, 6 - - - 300, 22 - - - 上移至顶 (T) - - - 300, 22 - - - 上移 (U) - - - 300, 22 - - - 下移 (D) - - - 300, 22 - - - 下移至底 (B) - - - 300, 22 - - - 全选 (Ctrl+A) - - - 297, 6 - - - 300, 22 - - - 测试服务器延迟 ICMP Ping [可多选] (Ctrl+P) - - - 300, 22 - - - 测试服务器延迟 TCP Ping [可多选] (Ctrl+O) - - - 300, 22 - - - 测试服务器真连接延迟 [可多选] (Ctrl+R) - - - 300, 22 - - - 测试服务器速度 [可多选] (Ctrl+T) - - - 300, 22 - - - 测试当前服务状态 - - - 297, 6 - - - 300, 22 - - - 导出所选服务器为客户端配置 - - - 300, 22 - - - 导出所选服务器为服务端配置 - - - 300, 22 - - - 批量导出分享 URL 至剪贴板 (多选) (Ctrl+C) - - - 300, 22 - - - 批量导出订阅内容至剪贴板 (多选) - - - 301, 600 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 - ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu - PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA - BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 - bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp - bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz - dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA - CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp - bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 - bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 - ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 - ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - - - 73, 53 - - - 服务器 - - - 196, 164 - - - 195, 22 - - - 路由模式 - - - 316, 22 - - - [直连模式] 所有通过浏览器访问的网站不走代理 - - - 316, 22 - - - [全局模式] 所有通过浏览器访问的网站走代理 - - - 316, 22 - - - [分流模式] 只有通过浏览器访问的被墙网站走代理 - - - 316, 22 - - - [手动模式] 仅开启 HTTP 代理,并清除系统代理设置 - - - 316, 22 - - - [手动模式] 仅开启 PAC,并清除系统代理设置 - - - 316, 22 - - - [手动模式] 仅开启 HTTP 代理,不改变系统代理设置 - - - 316, 22 - - - [手动模式] 仅开启 PAC,不改变系统代理设置 - - - 195, 22 - - - 服务器 - - - 195, 22 - - - 从剪贴板导入批量 URL - - - 195, 22 - - - 扫描屏幕上的二维码 - - - 195, 22 - - - 复制本地 PAC 网址 - - - 195, 22 - - - 更新订阅 - - - 192, 6 - - - 195, 22 - - - 退出 - - - 服务器列表 - - - 信息 - - - 网速显示未启用 - - - 61, 53 - - - 节点订阅 - - - 124, 22 - - - 节点订阅设置 - - - 124, 22 - - - 更新订阅 - - - 52, 53 - - - 分享二维码 - - - 76, 53 - - - 参数设置 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAATdJREFUWEftloENAiEMRW8ER3AEN9ANdARHcAPdwBF0A91AN9INtC+5JvUCJwWM - mvCTFw3QUiiU65qa/lUTYT6Ato9rJZyERwT6GFNdU+EihCYNwVhsqmgm3AR1fheOAitd9PCfNvp0HDbY - FolV2MmZZCzX9J0FG0TRTlwFdbahIVE7Qe1IR5bYVnXCyr2yO5F1MNUBec25YtjomcCXSxhr9DmrV2Gr - flyL4GSrYcm9tmnEZ7JsAC7DgWr5ydbXA8hOAcVjG8FTD6ocQgvXKrW8MqFWUfc1DAXgmRwVFaJQAHsh - VbYUU87diqWA934sl/TZ7wV2Lesx0gBwsO5/1Sl5PQhLQb+G+E+bfTm9KXsRAVgHrMK+jO9gbNEzzMSh - 6DlM9nANoa+kdCeLXLNLFtc9b2r6EXXdE4e4mdByNuG1AAAAAElFTkSuQmCC - - - - 76, 53 - - - 重启服务 - - - 85, 53 - - - 检查更新 - - - 223, 22 - - - 检查更新 v2rayN - - - 223, 22 - - - 检查更新 V2ray 核心 - - - 223, 22 - - - 检查更新 PAC - - - 220, 6 - - - 223, 22 - - - 简化 PAC (请设置 Core 路由) - - - 69, 53 - - - 更改语言 - - - 开发者信息 - - - V2Ray 官网 - - - 68, 53 - - - 操作教程 - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAADJJREFUWEftzrENACAIRUFGdVMdTZkAG4zFXfI68kMAAD8ap9lUbpfyaDV19QAA - 8FDEBl3RImu5VcdbAAAAAElFTkSuQmCC - - - - 76, 53 - - - 关闭窗口 - - \ No newline at end of file diff --git a/v2rayN/Forms/OptionSettingForm.Designer.cs b/v2rayN/Forms/OptionSettingForm.Designer.cs deleted file mode 100644 index 62af604..0000000 --- a/v2rayN/Forms/OptionSettingForm.Designer.cs +++ /dev/null @@ -1,738 +0,0 @@ -namespace v2rayN.Forms -{ - partial class OptionSettingForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OptionSettingForm)); - this.btnClose = new System.Windows.Forms.Button(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.chkdefAllowInsecure = new System.Windows.Forms.CheckBox(); - this.label16 = new System.Windows.Forms.Label(); - this.cmblistenerType = new System.Windows.Forms.ComboBox(); - this.chksniffingEnabled2 = new System.Windows.Forms.CheckBox(); - this.chksniffingEnabled = new System.Windows.Forms.CheckBox(); - this.txtremoteDNS = new System.Windows.Forms.TextBox(); - this.label14 = new System.Windows.Forms.Label(); - this.chkmuxEnabled = new System.Windows.Forms.CheckBox(); - this.chkAllowIn2 = new System.Windows.Forms.CheckBox(); - this.chkudpEnabled2 = new System.Windows.Forms.CheckBox(); - this.cmbprotocol2 = new System.Windows.Forms.ComboBox(); - this.label3 = new System.Windows.Forms.Label(); - this.txtlocalPort2 = new System.Windows.Forms.TextBox(); - this.cmbprotocol = new System.Windows.Forms.ComboBox(); - this.label1 = new System.Windows.Forms.Label(); - this.chkudpEnabled = new System.Windows.Forms.CheckBox(); - this.chklogEnabled = new System.Windows.Forms.CheckBox(); - this.cmbloglevel = new System.Windows.Forms.ComboBox(); - this.label5 = new System.Windows.Forms.Label(); - this.txtlocalPort = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.tabControl2 = new System.Windows.Forms.TabControl(); - this.tabPage3 = new System.Windows.Forms.TabPage(); - this.txtUseragent = new System.Windows.Forms.TextBox(); - this.tabPage4 = new System.Windows.Forms.TabPage(); - this.txtUserdirect = new System.Windows.Forms.TextBox(); - this.tabPage5 = new System.Windows.Forms.TabPage(); - this.txtUserblock = new System.Windows.Forms.TextBox(); - this.tabPage8 = new System.Windows.Forms.TabPage(); - this.cmbroutingMode = new System.Windows.Forms.ComboBox(); - this.panel3 = new System.Windows.Forms.Panel(); - this.linkLabelRoutingDoc = new System.Windows.Forms.LinkLabel(); - this.btnSetDefRountingRule = new System.Windows.Forms.Button(); - this.labRoutingTips = new System.Windows.Forms.Label(); - this.cmbdomainStrategy = new System.Windows.Forms.ComboBox(); - this.tabPage6 = new System.Windows.Forms.TabPage(); - this.chkKcpcongestion = new System.Windows.Forms.CheckBox(); - this.txtKcpwriteBufferSize = new System.Windows.Forms.TextBox(); - this.label10 = new System.Windows.Forms.Label(); - this.txtKcpreadBufferSize = new System.Windows.Forms.TextBox(); - this.label11 = new System.Windows.Forms.Label(); - this.txtKcpdownlinkCapacity = new System.Windows.Forms.TextBox(); - this.label8 = new System.Windows.Forms.Label(); - this.txtKcpuplinkCapacity = new System.Windows.Forms.TextBox(); - this.label9 = new System.Windows.Forms.Label(); - this.txtKcptti = new System.Windows.Forms.TextBox(); - this.label7 = new System.Windows.Forms.Label(); - this.txtKcpmtu = new System.Windows.Forms.TextBox(); - this.label6 = new System.Windows.Forms.Label(); - this.tabPage7 = new System.Windows.Forms.TabPage(); - this.chkKeepOlderDedupl = new System.Windows.Forms.CheckBox(); - this.cbFreshrate = new System.Windows.Forms.ComboBox(); - this.lbFreshrate = new System.Windows.Forms.Label(); - this.chkEnableStatistics = new System.Windows.Forms.CheckBox(); - this.chkAllowLANConn = new System.Windows.Forms.CheckBox(); - this.txturlGFWList = new System.Windows.Forms.TextBox(); - this.label13 = new System.Windows.Forms.Label(); - this.chkAutoRun = new System.Windows.Forms.CheckBox(); - this.tabPage9 = new System.Windows.Forms.TabPage(); - this.txtuserPacRule = new System.Windows.Forms.TextBox(); - this.panel4 = new System.Windows.Forms.Panel(); - this.label4 = new System.Windows.Forms.Label(); - this.panel2 = new System.Windows.Forms.Panel(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.groupBox1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.tabControl2.SuspendLayout(); - this.tabPage3.SuspendLayout(); - this.tabPage4.SuspendLayout(); - this.tabPage5.SuspendLayout(); - this.tabPage8.SuspendLayout(); - this.panel3.SuspendLayout(); - this.tabPage6.SuspendLayout(); - this.tabPage7.SuspendLayout(); - this.tabPage9.SuspendLayout(); - this.panel4.SuspendLayout(); - this.panel2.SuspendLayout(); - this.SuspendLayout(); - // - // btnClose - // - resources.ApplyResources(this.btnClose, "btnClose"); - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.btnClose.Name = "btnClose"; - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // tabControl1 - // - resources.ApplyResources(this.tabControl1, "tabControl1"); - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Controls.Add(this.tabPage6); - this.tabControl1.Controls.Add(this.tabPage7); - this.tabControl1.Controls.Add(this.tabPage9); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - // - // tabPage1 - // - resources.ApplyResources(this.tabPage1, "tabPage1"); - this.tabPage1.Controls.Add(this.groupBox1); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.UseVisualStyleBackColor = true; - // - // groupBox1 - // - resources.ApplyResources(this.groupBox1, "groupBox1"); - this.groupBox1.Controls.Add(this.chkdefAllowInsecure); - this.groupBox1.Controls.Add(this.label16); - this.groupBox1.Controls.Add(this.cmblistenerType); - this.groupBox1.Controls.Add(this.chksniffingEnabled2); - this.groupBox1.Controls.Add(this.chksniffingEnabled); - this.groupBox1.Controls.Add(this.txtremoteDNS); - this.groupBox1.Controls.Add(this.label14); - this.groupBox1.Controls.Add(this.chkmuxEnabled); - this.groupBox1.Controls.Add(this.chkAllowIn2); - this.groupBox1.Controls.Add(this.chkudpEnabled2); - this.groupBox1.Controls.Add(this.cmbprotocol2); - this.groupBox1.Controls.Add(this.label3); - this.groupBox1.Controls.Add(this.txtlocalPort2); - this.groupBox1.Controls.Add(this.cmbprotocol); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Controls.Add(this.chkudpEnabled); - this.groupBox1.Controls.Add(this.chklogEnabled); - this.groupBox1.Controls.Add(this.cmbloglevel); - this.groupBox1.Controls.Add(this.label5); - this.groupBox1.Controls.Add(this.txtlocalPort); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.TabStop = false; - // - // chkdefAllowInsecure - // - resources.ApplyResources(this.chkdefAllowInsecure, "chkdefAllowInsecure"); - this.chkdefAllowInsecure.Name = "chkdefAllowInsecure"; - this.chkdefAllowInsecure.UseVisualStyleBackColor = true; - // - // label16 - // - resources.ApplyResources(this.label16, "label16"); - this.label16.Name = "label16"; - // - // cmblistenerType - // - resources.ApplyResources(this.cmblistenerType, "cmblistenerType"); - this.cmblistenerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmblistenerType.FormattingEnabled = true; - this.cmblistenerType.Items.AddRange(new object[] { - resources.GetString("cmblistenerType.Items"), - resources.GetString("cmblistenerType.Items1"), - resources.GetString("cmblistenerType.Items2"), - resources.GetString("cmblistenerType.Items3"), - resources.GetString("cmblistenerType.Items4"), - resources.GetString("cmblistenerType.Items5"), - resources.GetString("cmblistenerType.Items6")}); - this.cmblistenerType.Name = "cmblistenerType"; - // - // chksniffingEnabled2 - // - resources.ApplyResources(this.chksniffingEnabled2, "chksniffingEnabled2"); - this.chksniffingEnabled2.Name = "chksniffingEnabled2"; - this.chksniffingEnabled2.UseVisualStyleBackColor = true; - // - // chksniffingEnabled - // - resources.ApplyResources(this.chksniffingEnabled, "chksniffingEnabled"); - this.chksniffingEnabled.Name = "chksniffingEnabled"; - this.chksniffingEnabled.UseVisualStyleBackColor = true; - // - // txtremoteDNS - // - resources.ApplyResources(this.txtremoteDNS, "txtremoteDNS"); - this.txtremoteDNS.Name = "txtremoteDNS"; - // - // label14 - // - resources.ApplyResources(this.label14, "label14"); - this.label14.Name = "label14"; - // - // chkmuxEnabled - // - resources.ApplyResources(this.chkmuxEnabled, "chkmuxEnabled"); - this.chkmuxEnabled.Name = "chkmuxEnabled"; - this.chkmuxEnabled.UseVisualStyleBackColor = true; - // - // chkAllowIn2 - // - resources.ApplyResources(this.chkAllowIn2, "chkAllowIn2"); - this.chkAllowIn2.Name = "chkAllowIn2"; - this.chkAllowIn2.UseVisualStyleBackColor = true; - this.chkAllowIn2.CheckedChanged += new System.EventHandler(this.chkAllowIn2_CheckedChanged); - // - // chkudpEnabled2 - // - resources.ApplyResources(this.chkudpEnabled2, "chkudpEnabled2"); - this.chkudpEnabled2.Name = "chkudpEnabled2"; - this.chkudpEnabled2.UseVisualStyleBackColor = true; - // - // cmbprotocol2 - // - resources.ApplyResources(this.cmbprotocol2, "cmbprotocol2"); - this.cmbprotocol2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbprotocol2.FormattingEnabled = true; - this.cmbprotocol2.Items.AddRange(new object[] { - resources.GetString("cmbprotocol2.Items"), - resources.GetString("cmbprotocol2.Items1")}); - this.cmbprotocol2.Name = "cmbprotocol2"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // txtlocalPort2 - // - resources.ApplyResources(this.txtlocalPort2, "txtlocalPort2"); - this.txtlocalPort2.Name = "txtlocalPort2"; - // - // cmbprotocol - // - resources.ApplyResources(this.cmbprotocol, "cmbprotocol"); - this.cmbprotocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbprotocol.FormattingEnabled = true; - this.cmbprotocol.Items.AddRange(new object[] { - resources.GetString("cmbprotocol.Items"), - resources.GetString("cmbprotocol.Items1")}); - this.cmbprotocol.Name = "cmbprotocol"; - // - // label1 - // - resources.ApplyResources(this.label1, "label1"); - this.label1.Name = "label1"; - // - // chkudpEnabled - // - resources.ApplyResources(this.chkudpEnabled, "chkudpEnabled"); - this.chkudpEnabled.Name = "chkudpEnabled"; - this.chkudpEnabled.UseVisualStyleBackColor = true; - // - // chklogEnabled - // - resources.ApplyResources(this.chklogEnabled, "chklogEnabled"); - this.chklogEnabled.Name = "chklogEnabled"; - this.chklogEnabled.UseVisualStyleBackColor = true; - // - // cmbloglevel - // - resources.ApplyResources(this.cmbloglevel, "cmbloglevel"); - this.cmbloglevel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbloglevel.FormattingEnabled = true; - this.cmbloglevel.Items.AddRange(new object[] { - resources.GetString("cmbloglevel.Items"), - resources.GetString("cmbloglevel.Items1"), - resources.GetString("cmbloglevel.Items2"), - resources.GetString("cmbloglevel.Items3"), - resources.GetString("cmbloglevel.Items4")}); - this.cmbloglevel.Name = "cmbloglevel"; - // - // label5 - // - resources.ApplyResources(this.label5, "label5"); - this.label5.Name = "label5"; - // - // txtlocalPort - // - resources.ApplyResources(this.txtlocalPort, "txtlocalPort"); - this.txtlocalPort.Name = "txtlocalPort"; - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // tabPage2 - // - resources.ApplyResources(this.tabPage2, "tabPage2"); - this.tabPage2.Controls.Add(this.groupBox2); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.UseVisualStyleBackColor = true; - // - // groupBox2 - // - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Controls.Add(this.tabControl2); - this.groupBox2.Controls.Add(this.panel3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; - // - // tabControl2 - // - resources.ApplyResources(this.tabControl2, "tabControl2"); - this.tabControl2.Controls.Add(this.tabPage3); - this.tabControl2.Controls.Add(this.tabPage4); - this.tabControl2.Controls.Add(this.tabPage5); - this.tabControl2.Controls.Add(this.tabPage8); - this.tabControl2.Name = "tabControl2"; - this.tabControl2.SelectedIndex = 0; - // - // tabPage3 - // - resources.ApplyResources(this.tabPage3, "tabPage3"); - this.tabPage3.Controls.Add(this.txtUseragent); - this.tabPage3.Name = "tabPage3"; - this.tabPage3.UseVisualStyleBackColor = true; - // - // txtUseragent - // - resources.ApplyResources(this.txtUseragent, "txtUseragent"); - this.txtUseragent.Name = "txtUseragent"; - // - // tabPage4 - // - resources.ApplyResources(this.tabPage4, "tabPage4"); - this.tabPage4.Controls.Add(this.txtUserdirect); - this.tabPage4.Name = "tabPage4"; - this.tabPage4.UseVisualStyleBackColor = true; - // - // txtUserdirect - // - resources.ApplyResources(this.txtUserdirect, "txtUserdirect"); - this.txtUserdirect.Name = "txtUserdirect"; - // - // tabPage5 - // - resources.ApplyResources(this.tabPage5, "tabPage5"); - this.tabPage5.Controls.Add(this.txtUserblock); - this.tabPage5.Name = "tabPage5"; - this.tabPage5.UseVisualStyleBackColor = true; - // - // txtUserblock - // - resources.ApplyResources(this.txtUserblock, "txtUserblock"); - this.txtUserblock.Name = "txtUserblock"; - // - // tabPage8 - // - resources.ApplyResources(this.tabPage8, "tabPage8"); - this.tabPage8.Controls.Add(this.cmbroutingMode); - this.tabPage8.Name = "tabPage8"; - this.tabPage8.UseVisualStyleBackColor = true; - // - // cmbroutingMode - // - resources.ApplyResources(this.cmbroutingMode, "cmbroutingMode"); - this.cmbroutingMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbroutingMode.FormattingEnabled = true; - this.cmbroutingMode.Items.AddRange(new object[] { - resources.GetString("cmbroutingMode.Items"), - resources.GetString("cmbroutingMode.Items1"), - resources.GetString("cmbroutingMode.Items2"), - resources.GetString("cmbroutingMode.Items3")}); - this.cmbroutingMode.Name = "cmbroutingMode"; - // - // panel3 - // - resources.ApplyResources(this.panel3, "panel3"); - this.panel3.Controls.Add(this.linkLabelRoutingDoc); - this.panel3.Controls.Add(this.btnSetDefRountingRule); - this.panel3.Controls.Add(this.labRoutingTips); - this.panel3.Controls.Add(this.cmbdomainStrategy); - this.panel3.Name = "panel3"; - // - // linkLabelRoutingDoc - // - resources.ApplyResources(this.linkLabelRoutingDoc, "linkLabelRoutingDoc"); - this.linkLabelRoutingDoc.Name = "linkLabelRoutingDoc"; - this.linkLabelRoutingDoc.TabStop = true; - this.linkLabelRoutingDoc.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabelRoutingDoc_LinkClicked); - // - // btnSetDefRountingRule - // - resources.ApplyResources(this.btnSetDefRountingRule, "btnSetDefRountingRule"); - this.btnSetDefRountingRule.Name = "btnSetDefRountingRule"; - this.btnSetDefRountingRule.UseVisualStyleBackColor = true; - this.btnSetDefRountingRule.Click += new System.EventHandler(this.btnSetDefRountingRule_Click); - // - // labRoutingTips - // - resources.ApplyResources(this.labRoutingTips, "labRoutingTips"); - this.labRoutingTips.ForeColor = System.Drawing.Color.Brown; - this.labRoutingTips.Name = "labRoutingTips"; - // - // cmbdomainStrategy - // - resources.ApplyResources(this.cmbdomainStrategy, "cmbdomainStrategy"); - this.cmbdomainStrategy.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cmbdomainStrategy.FormattingEnabled = true; - this.cmbdomainStrategy.Items.AddRange(new object[] { - resources.GetString("cmbdomainStrategy.Items"), - resources.GetString("cmbdomainStrategy.Items1"), - resources.GetString("cmbdomainStrategy.Items2")}); - this.cmbdomainStrategy.Name = "cmbdomainStrategy"; - // - // tabPage6 - // - resources.ApplyResources(this.tabPage6, "tabPage6"); - this.tabPage6.Controls.Add(this.chkKcpcongestion); - this.tabPage6.Controls.Add(this.txtKcpwriteBufferSize); - this.tabPage6.Controls.Add(this.label10); - this.tabPage6.Controls.Add(this.txtKcpreadBufferSize); - this.tabPage6.Controls.Add(this.label11); - this.tabPage6.Controls.Add(this.txtKcpdownlinkCapacity); - this.tabPage6.Controls.Add(this.label8); - this.tabPage6.Controls.Add(this.txtKcpuplinkCapacity); - this.tabPage6.Controls.Add(this.label9); - this.tabPage6.Controls.Add(this.txtKcptti); - this.tabPage6.Controls.Add(this.label7); - this.tabPage6.Controls.Add(this.txtKcpmtu); - this.tabPage6.Controls.Add(this.label6); - this.tabPage6.Name = "tabPage6"; - this.tabPage6.UseVisualStyleBackColor = true; - // - // chkKcpcongestion - // - resources.ApplyResources(this.chkKcpcongestion, "chkKcpcongestion"); - this.chkKcpcongestion.Name = "chkKcpcongestion"; - this.chkKcpcongestion.UseVisualStyleBackColor = true; - // - // txtKcpwriteBufferSize - // - resources.ApplyResources(this.txtKcpwriteBufferSize, "txtKcpwriteBufferSize"); - this.txtKcpwriteBufferSize.Name = "txtKcpwriteBufferSize"; - // - // label10 - // - resources.ApplyResources(this.label10, "label10"); - this.label10.Name = "label10"; - // - // txtKcpreadBufferSize - // - resources.ApplyResources(this.txtKcpreadBufferSize, "txtKcpreadBufferSize"); - this.txtKcpreadBufferSize.Name = "txtKcpreadBufferSize"; - // - // label11 - // - resources.ApplyResources(this.label11, "label11"); - this.label11.Name = "label11"; - // - // txtKcpdownlinkCapacity - // - resources.ApplyResources(this.txtKcpdownlinkCapacity, "txtKcpdownlinkCapacity"); - this.txtKcpdownlinkCapacity.Name = "txtKcpdownlinkCapacity"; - // - // label8 - // - resources.ApplyResources(this.label8, "label8"); - this.label8.Name = "label8"; - // - // txtKcpuplinkCapacity - // - resources.ApplyResources(this.txtKcpuplinkCapacity, "txtKcpuplinkCapacity"); - this.txtKcpuplinkCapacity.Name = "txtKcpuplinkCapacity"; - // - // label9 - // - resources.ApplyResources(this.label9, "label9"); - this.label9.Name = "label9"; - // - // txtKcptti - // - resources.ApplyResources(this.txtKcptti, "txtKcptti"); - this.txtKcptti.Name = "txtKcptti"; - // - // label7 - // - resources.ApplyResources(this.label7, "label7"); - this.label7.Name = "label7"; - // - // txtKcpmtu - // - resources.ApplyResources(this.txtKcpmtu, "txtKcpmtu"); - this.txtKcpmtu.Name = "txtKcpmtu"; - // - // label6 - // - resources.ApplyResources(this.label6, "label6"); - this.label6.Name = "label6"; - // - // tabPage7 - // - resources.ApplyResources(this.tabPage7, "tabPage7"); - this.tabPage7.Controls.Add(this.chkKeepOlderDedupl); - this.tabPage7.Controls.Add(this.cbFreshrate); - this.tabPage7.Controls.Add(this.lbFreshrate); - this.tabPage7.Controls.Add(this.chkEnableStatistics); - this.tabPage7.Controls.Add(this.chkAllowLANConn); - this.tabPage7.Controls.Add(this.txturlGFWList); - this.tabPage7.Controls.Add(this.label13); - this.tabPage7.Controls.Add(this.chkAutoRun); - this.tabPage7.Name = "tabPage7"; - this.tabPage7.UseVisualStyleBackColor = true; - // - // chkKeepOlderDedupl - // - resources.ApplyResources(this.chkKeepOlderDedupl, "chkKeepOlderDedupl"); - this.chkKeepOlderDedupl.Name = "chkKeepOlderDedupl"; - this.chkKeepOlderDedupl.UseVisualStyleBackColor = true; - // - // cbFreshrate - // - resources.ApplyResources(this.cbFreshrate, "cbFreshrate"); - this.cbFreshrate.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.cbFreshrate.FormattingEnabled = true; - this.cbFreshrate.Name = "cbFreshrate"; - // - // lbFreshrate - // - resources.ApplyResources(this.lbFreshrate, "lbFreshrate"); - this.lbFreshrate.Name = "lbFreshrate"; - // - // chkEnableStatistics - // - resources.ApplyResources(this.chkEnableStatistics, "chkEnableStatistics"); - this.chkEnableStatistics.Name = "chkEnableStatistics"; - this.chkEnableStatistics.UseVisualStyleBackColor = true; - // - // chkAllowLANConn - // - resources.ApplyResources(this.chkAllowLANConn, "chkAllowLANConn"); - this.chkAllowLANConn.Name = "chkAllowLANConn"; - this.chkAllowLANConn.UseVisualStyleBackColor = true; - // - // txturlGFWList - // - resources.ApplyResources(this.txturlGFWList, "txturlGFWList"); - this.txturlGFWList.Name = "txturlGFWList"; - // - // label13 - // - resources.ApplyResources(this.label13, "label13"); - this.label13.Name = "label13"; - // - // chkAutoRun - // - resources.ApplyResources(this.chkAutoRun, "chkAutoRun"); - this.chkAutoRun.Name = "chkAutoRun"; - this.chkAutoRun.UseVisualStyleBackColor = true; - // - // tabPage9 - // - resources.ApplyResources(this.tabPage9, "tabPage9"); - this.tabPage9.Controls.Add(this.txtuserPacRule); - this.tabPage9.Controls.Add(this.panel4); - this.tabPage9.Name = "tabPage9"; - this.tabPage9.UseVisualStyleBackColor = true; - // - // txtuserPacRule - // - resources.ApplyResources(this.txtuserPacRule, "txtuserPacRule"); - this.txtuserPacRule.Name = "txtuserPacRule"; - // - // panel4 - // - resources.ApplyResources(this.panel4, "panel4"); - this.panel4.Controls.Add(this.label4); - this.panel4.Name = "panel4"; - // - // label4 - // - resources.ApplyResources(this.label4, "label4"); - this.label4.ForeColor = System.Drawing.Color.Brown; - this.label4.Name = "label4"; - // - // panel2 - // - resources.ApplyResources(this.panel2, "panel2"); - this.panel2.Controls.Add(this.btnClose); - this.panel2.Controls.Add(this.btnOK); - this.panel2.Name = "panel2"; - // - // btnOK - // - resources.ApplyResources(this.btnOK, "btnOK"); - this.btnOK.Name = "btnOK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // panel1 - // - resources.ApplyResources(this.panel1, "panel1"); - this.panel1.Name = "panel1"; - // - // OptionSettingForm - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.Controls.Add(this.tabControl1); - this.Controls.Add(this.panel2); - this.Controls.Add(this.panel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Name = "OptionSettingForm"; - this.Load += new System.EventHandler(this.OptionSettingForm_Load); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.tabPage2.ResumeLayout(false); - this.groupBox2.ResumeLayout(false); - this.tabControl2.ResumeLayout(false); - this.tabPage3.ResumeLayout(false); - this.tabPage3.PerformLayout(); - this.tabPage4.ResumeLayout(false); - this.tabPage4.PerformLayout(); - this.tabPage5.ResumeLayout(false); - this.tabPage5.PerformLayout(); - this.tabPage8.ResumeLayout(false); - this.panel3.ResumeLayout(false); - this.panel3.PerformLayout(); - this.tabPage6.ResumeLayout(false); - this.tabPage6.PerformLayout(); - this.tabPage7.ResumeLayout(false); - this.tabPage7.PerformLayout(); - this.tabPage9.ResumeLayout(false); - this.tabPage9.PerformLayout(); - this.panel4.ResumeLayout(false); - this.panel2.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.ComboBox cmbloglevel; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox txtlocalPort; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.CheckBox chklogEnabled; - private System.Windows.Forms.CheckBox chkudpEnabled; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.TabControl tabControl1; - private System.Windows.Forms.TabPage tabPage1; - private System.Windows.Forms.TabPage tabPage2; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.ComboBox cmbprotocol; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.ComboBox cmbprotocol2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.TextBox txtlocalPort2; - private System.Windows.Forms.CheckBox chkudpEnabled2; - private System.Windows.Forms.CheckBox chkAllowIn2; - private System.Windows.Forms.CheckBox chkmuxEnabled; - private System.Windows.Forms.TabControl tabControl2; - private System.Windows.Forms.TabPage tabPage3; - private System.Windows.Forms.TabPage tabPage4; - private System.Windows.Forms.Label labRoutingTips; - private System.Windows.Forms.TextBox txtUseragent; - private System.Windows.Forms.TabPage tabPage5; - private System.Windows.Forms.TextBox txtUserdirect; - private System.Windows.Forms.TextBox txtUserblock; - private System.Windows.Forms.TabPage tabPage6; - private System.Windows.Forms.TextBox txtKcpmtu; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.TextBox txtKcptti; - private System.Windows.Forms.Label label7; - private System.Windows.Forms.TextBox txtKcpwriteBufferSize; - private System.Windows.Forms.Label label10; - private System.Windows.Forms.TextBox txtKcpreadBufferSize; - private System.Windows.Forms.Label label11; - private System.Windows.Forms.TextBox txtKcpdownlinkCapacity; - private System.Windows.Forms.Label label8; - private System.Windows.Forms.TextBox txtKcpuplinkCapacity; - private System.Windows.Forms.Label label9; - private System.Windows.Forms.CheckBox chkKcpcongestion; - private System.Windows.Forms.TabPage tabPage7; - private System.Windows.Forms.CheckBox chkAutoRun; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.TextBox txturlGFWList; - private System.Windows.Forms.CheckBox chkAllowLANConn; - private System.Windows.Forms.TextBox txtremoteDNS; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.Panel panel3; - private System.Windows.Forms.ComboBox cmbdomainStrategy; - private System.Windows.Forms.ComboBox cmbroutingMode; - private System.Windows.Forms.CheckBox chksniffingEnabled; - private System.Windows.Forms.CheckBox chksniffingEnabled2; - private System.Windows.Forms.Button btnSetDefRountingRule; - private System.Windows.Forms.CheckBox chkEnableStatistics; - private System.Windows.Forms.ComboBox cbFreshrate; - private System.Windows.Forms.Label lbFreshrate; - private System.Windows.Forms.Label label16; - private System.Windows.Forms.ComboBox cmblistenerType; - private System.Windows.Forms.TabPage tabPage8; - private System.Windows.Forms.TabPage tabPage9; - private System.Windows.Forms.TextBox txtuserPacRule; - private System.Windows.Forms.Panel panel4; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.CheckBox chkKeepOlderDedupl; - private System.Windows.Forms.LinkLabel linkLabelRoutingDoc; - private System.Windows.Forms.CheckBox chkdefAllowInsecure; - } -} \ No newline at end of file diff --git a/v2rayN/Forms/OptionSettingForm.cs b/v2rayN/Forms/OptionSettingForm.cs deleted file mode 100644 index 78d4eef..0000000 --- a/v2rayN/Forms/OptionSettingForm.cs +++ /dev/null @@ -1,462 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Base; -using v2rayN.HttpProxyHandler; - -namespace v2rayN.Forms -{ - public partial class OptionSettingForm : BaseForm - { - public OptionSettingForm() - { - InitializeComponent(); - } - - private void OptionSettingForm_Load(object sender, EventArgs e) - { - InitBase(); - - InitRouting(); - - InitKCP(); - - InitGUI(); - - InitUserPAC(); - } - - /// - /// 初始化基础设置 - /// - private void InitBase() - { - //日志 - chklogEnabled.Checked = config.logEnabled; - cmbloglevel.Text = config.loglevel; - - //Mux - chkmuxEnabled.Checked = config.muxEnabled; - - //本地监听 - if (config.inbound.Count > 0) - { - txtlocalPort.Text = config.inbound[0].localPort.ToString(); - cmbprotocol.Text = config.inbound[0].protocol.ToString(); - chkudpEnabled.Checked = config.inbound[0].udpEnabled; - chksniffingEnabled.Checked = config.inbound[0].sniffingEnabled; - - txtlocalPort2.Text = $"{config.inbound[0].localPort + 1}"; - cmbprotocol2.Text = Global.InboundHttp; - - if (config.inbound.Count > 1) - { - txtlocalPort2.Text = config.inbound[1].localPort.ToString(); - cmbprotocol2.Text = config.inbound[1].protocol.ToString(); - chkudpEnabled2.Checked = config.inbound[1].udpEnabled; - chksniffingEnabled2.Checked = config.inbound[1].sniffingEnabled; - chkAllowIn2.Checked = true; - } - else - { - chkAllowIn2.Checked = false; - } - chkAllowIn2State(); - } - - //remoteDNS - txtremoteDNS.Text = config.remoteDNS; - - cmblistenerType.SelectedIndex = (int)config.listenerType; - - chkdefAllowInsecure.Checked = config.defAllowInsecure; - } - - /// - /// 初始化路由设置 - /// - private void InitRouting() - { - //路由 - cmbdomainStrategy.Text = config.domainStrategy; - int.TryParse(config.routingMode, out int routingMode); - cmbroutingMode.SelectedIndex = routingMode; - - txtUseragent.Text = Utils.List2String(config.useragent, true); - txtUserdirect.Text = Utils.List2String(config.userdirect, true); - txtUserblock.Text = Utils.List2String(config.userblock, true); - } - - /// - /// 初始化KCP设置 - /// - private void InitKCP() - { - txtKcpmtu.Text = config.kcpItem.mtu.ToString(); - txtKcptti.Text = config.kcpItem.tti.ToString(); - txtKcpuplinkCapacity.Text = config.kcpItem.uplinkCapacity.ToString(); - txtKcpdownlinkCapacity.Text = config.kcpItem.downlinkCapacity.ToString(); - txtKcpreadBufferSize.Text = config.kcpItem.readBufferSize.ToString(); - txtKcpwriteBufferSize.Text = config.kcpItem.writeBufferSize.ToString(); - chkKcpcongestion.Checked = config.kcpItem.congestion; - } - - /// - /// 初始化v2rayN GUI设置 - /// - private void InitGUI() - { - //开机自动启动 - chkAutoRun.Checked = Utils.IsAutoRun(); - - //自定义GFWList - txturlGFWList.Text = config.urlGFWList; - - chkAllowLANConn.Checked = config.allowLANConn; - chkEnableStatistics.Checked = config.enableStatistics; - chkKeepOlderDedupl.Checked = config.keepOlderDedupl; - - - - - ComboItem[] cbSource = new ComboItem[] - { - new ComboItem{ID = (int)Global.StatisticsFreshRate.quick, Text = UIRes.I18N("QuickFresh")}, - new ComboItem{ID = (int)Global.StatisticsFreshRate.medium, Text = UIRes.I18N("MediumFresh")}, - new ComboItem{ID = (int)Global.StatisticsFreshRate.slow, Text = UIRes.I18N("SlowFresh")}, - }; - cbFreshrate.DataSource = cbSource; - - cbFreshrate.DisplayMember = "Text"; - cbFreshrate.ValueMember = "ID"; - - switch (config.statisticsFreshRate) - { - case (int)Global.StatisticsFreshRate.quick: - cbFreshrate.SelectedItem = cbSource[0]; - break; - case (int)Global.StatisticsFreshRate.medium: - cbFreshrate.SelectedItem = cbSource[1]; - break; - case (int)Global.StatisticsFreshRate.slow: - cbFreshrate.SelectedItem = cbSource[2]; - break; - } - - } - - private void InitUserPAC() - { - txtuserPacRule.Text = Utils.List2String(config.userPacRule, true); - } - - private void btnOK_Click(object sender, EventArgs e) - { - if (SaveBase() != 0) - { - return; - } - - if (SaveRouting() != 0) - { - return; - } - - if (SaveKCP() != 0) - { - return; - } - - if (SaveGUI() != 0) - { - return; - } - - if (SaveUserPAC() != 0) - { - return; - } - - if (ConfigHandler.SaveConfig(ref config) == 0) - { - this.DialogResult = DialogResult.OK; - } - else - { - UI.ShowWarning(UIRes.I18N("OperationFailed")); - } - } - - /// - /// 保存基础设置 - /// - /// - private int SaveBase() - { - //日志 - bool logEnabled = chklogEnabled.Checked; - string loglevel = cmbloglevel.Text.TrimEx(); - - //Mux - bool muxEnabled = chkmuxEnabled.Checked; - - //本地监听 - string localPort = txtlocalPort.Text.TrimEx(); - string protocol = cmbprotocol.Text.TrimEx(); - bool udpEnabled = chkudpEnabled.Checked; - bool sniffingEnabled = chksniffingEnabled.Checked; - if (Utils.IsNullOrEmpty(localPort) || !Utils.IsNumberic(localPort)) - { - UI.Show(UIRes.I18N("FillLocalListeningPort")); - return -1; - } - if (Utils.IsNullOrEmpty(protocol)) - { - UI.Show(UIRes.I18N("PleaseSelectProtocol")); - return -1; - } - config.inbound[0].localPort = Utils.ToInt(localPort); - config.inbound[0].protocol = protocol; - config.inbound[0].udpEnabled = udpEnabled; - config.inbound[0].sniffingEnabled = sniffingEnabled; - - //本地监听2 - string localPort2 = txtlocalPort2.Text.TrimEx(); - string protocol2 = cmbprotocol2.Text.TrimEx(); - bool udpEnabled2 = chkudpEnabled2.Checked; - bool sniffingEnabled2 = chksniffingEnabled2.Checked; - if (chkAllowIn2.Checked) - { - if (Utils.IsNullOrEmpty(localPort2) || !Utils.IsNumberic(localPort2)) - { - UI.Show(UIRes.I18N("FillLocalListeningPort")); - return -1; - } - if (Utils.IsNullOrEmpty(protocol2)) - { - UI.Show(UIRes.I18N("PleaseSelectProtocol")); - return -1; - } - if (config.inbound.Count < 2) - { - config.inbound.Add(new Mode.InItem()); - } - config.inbound[1].localPort = Utils.ToInt(localPort2); - config.inbound[1].protocol = protocol2; - config.inbound[1].udpEnabled = udpEnabled2; - config.inbound[1].sniffingEnabled = sniffingEnabled2; - } - else - { - if (config.inbound.Count > 1) - { - config.inbound.RemoveAt(1); - } - } - - //日志 - config.logEnabled = logEnabled; - config.loglevel = loglevel; - - //Mux - config.muxEnabled = muxEnabled; - - //remoteDNS - config.remoteDNS = txtremoteDNS.Text.TrimEx(); - - config.listenerType = (ListenerType)Enum.ToObject(typeof(ListenerType), cmblistenerType.SelectedIndex); - - config.defAllowInsecure = chkdefAllowInsecure.Checked; - - return 0; - } - - /// - /// 保存路由设置 - /// - /// - private int SaveRouting() - { - //路由 - string domainStrategy = cmbdomainStrategy.Text; - string routingMode = cmbroutingMode.SelectedIndex.ToString(); - - string useragent = txtUseragent.Text.TrimEx(); - string userdirect = txtUserdirect.Text.TrimEx(); - string userblock = txtUserblock.Text.TrimEx(); - - config.domainStrategy = domainStrategy; - config.routingMode = routingMode; - - config.useragent = Utils.String2List(useragent); - config.userdirect = Utils.String2List(userdirect); - config.userblock = Utils.String2List(userblock); - - return 0; - } - - /// - /// 保存KCP设置 - /// - /// - private int SaveKCP() - { - string mtu = txtKcpmtu.Text.TrimEx(); - string tti = txtKcptti.Text.TrimEx(); - string uplinkCapacity = txtKcpuplinkCapacity.Text.TrimEx(); - string downlinkCapacity = txtKcpdownlinkCapacity.Text.TrimEx(); - string readBufferSize = txtKcpreadBufferSize.Text.TrimEx(); - string writeBufferSize = txtKcpwriteBufferSize.Text.TrimEx(); - bool congestion = chkKcpcongestion.Checked; - - if (Utils.IsNullOrEmpty(mtu) || !Utils.IsNumberic(mtu) - || Utils.IsNullOrEmpty(tti) || !Utils.IsNumberic(tti) - || Utils.IsNullOrEmpty(uplinkCapacity) || !Utils.IsNumberic(uplinkCapacity) - || Utils.IsNullOrEmpty(downlinkCapacity) || !Utils.IsNumberic(downlinkCapacity) - || Utils.IsNullOrEmpty(readBufferSize) || !Utils.IsNumberic(readBufferSize) - || Utils.IsNullOrEmpty(writeBufferSize) || !Utils.IsNumberic(writeBufferSize)) - { - UI.Show(UIRes.I18N("FillKcpParameters")); - return -1; - } - config.kcpItem.mtu = Utils.ToInt(mtu); - config.kcpItem.tti = Utils.ToInt(tti); - config.kcpItem.uplinkCapacity = Utils.ToInt(uplinkCapacity); - config.kcpItem.downlinkCapacity = Utils.ToInt(downlinkCapacity); - config.kcpItem.readBufferSize = Utils.ToInt(readBufferSize); - config.kcpItem.writeBufferSize = Utils.ToInt(writeBufferSize); - config.kcpItem.congestion = congestion; - - return 0; - } - - /// - /// 保存GUI设置 - /// - /// - private int SaveGUI() - { - //开机自动启动 - Utils.SetAutoRun(chkAutoRun.Checked); - - //自定义GFWList - config.urlGFWList = txturlGFWList.Text.TrimEx(); - - config.allowLANConn = chkAllowLANConn.Checked; - - bool lastEnableStatistics = config.enableStatistics; - config.enableStatistics = chkEnableStatistics.Checked; - config.statisticsFreshRate = (int)cbFreshrate.SelectedValue; - config.keepOlderDedupl = chkKeepOlderDedupl.Checked; - - //if(lastEnableStatistics != config.enableStatistics) - //{ - // /// https://stackoverflow.com/questions/779405/how-do-i-restart-my-c-sharp-winform-application - // // Shut down the current app instance. - // Application.Exit(); - - // // Restart the app passing "/restart [processId]" as cmd line args - // Process.Start(Application.ExecutablePath, "/restart " + Process.GetCurrentProcess().Id); - //} - return 0; - } - - private int SaveUserPAC() - { - string userPacRule = txtuserPacRule.Text.TrimEx(); - userPacRule = userPacRule.Replace("\"", ""); - - config.userPacRule = Utils.String2List(userPacRule); - - return 0; - } - private void btnClose_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - } - - private void chkAllowIn2_CheckedChanged(object sender, EventArgs e) - { - chkAllowIn2State(); - } - private void chkAllowIn2State() - { - bool blAllow2 = chkAllowIn2.Checked; - txtlocalPort2.Enabled = - cmbprotocol2.Enabled = - chkudpEnabled2.Enabled = blAllow2; - } - - private void btnSetDefRountingRule_Click(object sender, EventArgs e) - { - txtUseragent.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.agentTag); - txtUserdirect.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.directTag); - txtUserblock.Text = Utils.GetEmbedText(Global.CustomRoutingFileName + Global.blockTag); - cmbroutingMode.SelectedIndex = 3; - - List lstUrl = new List - { - Global.CustomRoutingListUrl + Global.agentTag, - Global.CustomRoutingListUrl + Global.directTag, - Global.CustomRoutingListUrl + Global.blockTag - }; - - List lstTxt = new List - { - txtUseragent, - txtUserdirect, - txtUserblock - }; - - for (int k = 0; k < lstUrl.Count; k++) - { - TextBox txt = lstTxt[k]; - DownloadHandle downloadHandle = new DownloadHandle(); - downloadHandle.UpdateCompleted += (sender2, args) => - { - if (args.Success) - { - string result = args.Msg; - if (Utils.IsNullOrEmpty(result)) - { - return; - } - txt.Text = result; - } - else - { - AppendText(false, args.Msg); - } - }; - downloadHandle.Error += (sender2, args) => - { - AppendText(true, args.GetException().Message); - }; - - downloadHandle.WebDownloadString(lstUrl[k]); - } - } - void AppendText(bool notify, string text) - { - labRoutingTips.Text = text; - } - - private void linkLabelRoutingDoc_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - System.Diagnostics.Process.Start("https://www.v2fly.org/config/routing.html"); - } - } - - class ComboItem - { - public int ID - { - get; set; - } - public string Text - { - get; set; - } - } -} diff --git a/v2rayN/Forms/OptionSettingForm.resx b/v2rayN/Forms/OptionSettingForm.resx deleted file mode 100644 index 3eb10d4..0000000 --- a/v2rayN/Forms/OptionSettingForm.resx +++ /dev/null @@ -1,2073 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - True - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 11 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 2 - - - - 30, 176 - - - 記錄本地日誌 (預設為關閉) - - - 634, 460 - - - 12 - - - 4, 22 - - - txtKcpwriteBufferSize - - - txtuserPacRule - - - 2 - - - False - - - 18 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - groupBox1 - - - 5 - - - 94, 21 - - - 9 - - - groupBox1 - - - tabPage9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - linkLabelRoutingDoc - - - 468, 60 - - - - Top - - - 102, 16 - - - 6 - - - txtKcptti - - - tabPage3 - - - 4, 22 - - - cmblistenerType - - - 0 - - - 634, 460 - - - 0 - - - 111, 100 - - - True - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3 - - - 598, 16 - - - [Core] 基本設定 - - - True - - - 120, 16 - - - 281, 12 - - - panel3 - - - True - - - tti - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 84, 16 - - - groupBox1 - - - 65, 12 - - - 628, 454 - - - tabPage7 - - - [手動模式] 僅開啟 PAC,並清除系統代理設定 - - - 12 - - - 662, 60 - - - 20 - - - http - - - 7 - - - chkdefAllowInsecure - - - 648, 573 - - - 206, 64 - - - 95, 12 - - - tabPage6 - - - 14 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15, 63 - - - tabControl2 - - - 16 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - 啟用 UDP - - - 94, 21 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - label10 - - - 648, 573 - - - Vertical - - - groupBox1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Top - - - 12 - - - txtKcpmtu - - - lbFreshrate - - - 1 - - - label11 - - - 29 - - - 1 - - - NoControl - - - 啟用流量探測 - - - [手動模式] 僅開啟 HTTP 代理,並清除系統代理設定 - - - False - - - 4 - - - tabPage6 - - - False - - - tabControl2 - - - 1 - - - $this - - - 7 - - - 3 - - - 4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - readBufferSize - - - 0 - - - tabPage6 - - - 3 - - - True - - - 18 - - - True - - - Fill - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - congestion - - - NoControl - - - groupBox1 - - - panel3 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - 89, 12 - - - info - - - txtUseragent - - - 1 - - - tabPage7 - - - v2rayN 設定 - - - 20 - - - groupBox1 - - - 16 - - - [直連模式] 使瀏覽器不代理任何網站連線 - - - 14 - - - 32 - - - 628, 454 - - - 6, 12 - - - groupBox1 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - txtKcpdownlinkCapacity - - - 198, 16 - - - 開機自動啟動 - - - 3, 3, 3, 3 - - - 1 - - - 路由模式 - - - 4 - - - groupBox1 - - - tabPage6 - - - 355, 16 - - - 3, 3, 3, 3 - - - 97, 20 - - - 3 - - - 662, 605 - - - 33, 29 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 78, 21 - - - 5, 45 - - - 自定義 DNS (可多個,用逗號 (,) 分隔) - - - tabControl1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 598, 16 - - - v2rayN.Forms.BaseForm, v2rayN, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - - warning - - - groupBox1 - - - 0 - - - tabPage7 - - - 統計更新頻率 - - - label5 - - - 120, 16 - - - 20 - - - 89, 12 - - - [手動模式] 僅開啟 HTTP 代理,不改變系統代理設定 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 18, 66 - - - 20, 143 - - - 11 - - - 4, 4, 4, 4 - - - tabPage6 - - - btnClose - - - 啟用流量探測 - - - groupBox1 - - - 18, 28 - - - 30 - - - 34 - - - 20 - - - 29 - - - 0 - - - 21, 17 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 14 - - - 19 - - - 4, 22 - - - *自訂智能分流規則,每項之間請用逗號 (,) 分隔 - - - True - - - chksniffingEnabled - - - 6 - - - 174, 16 - - - 16 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox1 - - - 18, 104 - - - tabPage2 - - - NoControl - - - 97, 20 - - - socks - - - tabPage5 - - - 576, 16 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 464, 20 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage9 - - - True - - - tabPage6 - - - *您可於下方自訂域名解析策略規則,每項之間請用逗號 (,) 分隔,支持域名和 IP - - - tabPage3 - - - 30 - - - 53, 12 - - - 17 - - - label8 - - - 468, 27 - - - label13 - - - chkAutoRun - - - tabControl2 - - - 654, 579 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 345, 62 - - - 15 - - - 12 - - - 1 - - - chkudpEnabled - - - True - - - 33, 253 - - - tabPage1 - - - 5 - - - tabPage6 - - - 2 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 5 - - - btnSetDefRountingRule - - - True - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 32 - - - label1 - - - 84, 16 - - - tabPage8 - - - True - - - panel4 - - - label7 - - - 底層傳輸安全選擇 tls 時,預設為跳過證書驗證 (allowInsecure) - - - txtlocalPort - - - True - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage7 - - - 3, 17 - - - 3, 40 - - - labRoutingTips - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - 124, 25 - - - 協議 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl2 - - - Top, Right - - - 啟用 Mux 多路複用 (預設為啟用) - - - True - - - 23, 12 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 555, 100 - - - socks - - - 0 - - - 3, 3 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - chkAllowLANConn - - - 84, 16 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl1 - - - tabControl1 - - - True - - - tabPage6 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 15, 38 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3 - - - 10 - - - 369, 62 - - - 13 - - - 1. 代理名單 - - - groupBox1 - - - panel3 - - - NoControl - - - 654, 579 - - - chkEnableStatistics - - - 14 - - - 8 - - - 7 - - - http - - - 53, 12 - - - 193, 162 - - - True - - - 2 - - - 0 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage6 - - - label2 - - - 165, 20 - - - False - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 3, 3 - - - 9 - - - groupBox1 - - - 4. 預定義規則 - - - 101, 12 - - - 3 - - - 12 - - - 431, 12 - - - 域名解析策略 - - - cmbprotocol - - - 648, 37 - - - True - - - 啟用統計功能 (含實時網速顯示、使用流量記錄,需要重啟 v2rayN 才生效) - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 4 - - - 本地監聽端口 - - - Vertical - - - Fill - - - 1 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Vertical - - - 1 - - - 28 - - - 257, 60 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 94, 21 - - - True - - - cmbprotocol2 - - - [全局模式] 使瀏覽器代理所有網站連線 - - - groupBox2 - - - chkKeepOlderDedupl - - - 15, 129 - - - 255, 20 - - - mtu - - - True - - - True - - - True - - - chkKcpcongestion - - - 1 - - - 0 - - - 257, 25 - - - 3, 84 - - - groupBox1 - - - Top - - - 97, 20 - - - chkAllowIn2 - - - tabPage2 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - True - - - False - - - 3 - - - 33 - - - 4, 22 - - - 9 - - - 541, 100 - - - [Core] KCP 設定 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - error - - - 15, 160 - - - True - - - 59, 12 - - - 5, 14 - - - groupBox1 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 634, 460 - - - 12 - - - 120, 16 - - - 662, 10 - - - txtlocalPort2 - - - [手動模式] 僅開啟 PAC,不改變系統代理設定 - - - True - - - Fill - - - groupBox1 - - - 654, 579 - - - 7 - - - 27 - - - 10 - - - False - - - Vertical - - - 206, 29 - - - 8 - - - txtUserdirect - - - chkudpEnabled2 - - - 0 - - - 0 - - - 648, 536 - - - 開啟本地代理 - - - 161, 84 - - - panel3 - - - 0 - - - tabPage6 - - - tabControl2 - - - 30, 87 - - - txtKcpreadBufferSize - - - 4 - - - panel2 - - - 3 - - - 8 - - - 35 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 用戶分流規則設定 - - - 95, 12 - - - tabPage7 - - - 10 - - - none - - - 日誌等級 - - - tabControl1 - - - 協議 - - - 6 - - - tabPage4 - - - NoControl - - - 2 - - - AsIs - - - 15, 62 - - - 7 - - - tabPage7 - - - 642, 486 - - - 4, 22 - - - 58, 20 - - - groupBox1 - - - 1 - - - 42, 98 - - - 13 - - - 13 - - - 2 - - - downlinkCapacity - - - True - - - 78, 21 - - - tabPage7 - - - True - - - 19 - - - System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - cmbroutingMode - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 1 - - - 23, 12 - - - True - - - 8 - - - True - - - 3, 3, 3, 3 - - - 自定義 GFWList 網址 (不自定義請留白) - - - 345, 100 - - - panel3 - - - 75, 23 - - - 654, 579 - - - 10 - - - 204, 16 - - - 17 - - - 628, 454 - - - debug - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 6 - - - 1 - - - txtUserblock - - - 229, 23 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage1 - - - 15 - - - 2 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 11 - - - 18 - - - 126, 16 - - - 345, 24 - - - NoControl - - - 4, 22 - - - cmbdomainStrategy - - - False - - - 257, 158 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 10 - - - 634, 460 - - - panel2 - - - txtKcpuplinkCapacity - - - 115, 10 - - - System.Windows.Forms.LinkLabel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage4 - - - chklogEnabled - - - chksniffingEnabled2 - - - tabPage7 - - - 642, 67 - - - 0 - - - 4, 22 - - - True - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPage5 - - - 9 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - IPIfNonMatch - - - groupBox1 - - - 4, 22 - - - 23 - - - 3. 封鎖名單 (擋廣告) - - - label3 - - - 6 - - - 236, 66 - - - tabPage7 - - - $this - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - $this - - - 8 - - - txtremoteDNS - - - 3, 3 - - - 0, 615 - - - 19 - - - 33 - - - 94, 21 - - - 4, 22 - - - writeBufferSize - - - 11 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 89, 12 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - 31 - - - 369, 27 - - - 4 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - tabPage6 - - - groupBox1 - - - groupBox1 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - panel4 - - - True - - - 29 - - - Fill - - - True - - - 3, 3 - - - OptionSettingForm - - - 124, 94 - - - [Core] 路由設定 - - - 13 - - - tabPage8 - - - 2 - - - 236, 104 - - - 5 - - - [分流模式] 使瀏覽器僅代理被中國封鎖的網站 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - NoControl - - - tabPage9 - - - 94, 21 - - - 75, 23 - - - 15, 16 - - - 33, 277 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 0, 0, 0 - - - 662, 675 - - - uplinkCapacity - - - IPOnDemand - - - NoControl - - - True - - - 6 - - - 1 - - - 0 - - - 連線參數設定 - - - 0 - - - 3, 3, 3, 3 - - - 3, 3 - - - 32, 205 - - - cmbloglevel - - - 111, 62 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - label4 - - - System.Windows.Forms.Panel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - label16 - - - btnOK - - - tabPage6 - - - txturlGFWList - - - chkmuxEnabled - - - 654, 579 - - - tabPage6 - - - tabControl1 - - - 0 - - - 15, 110 - - - 5, 11 - - - 0 - - - System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0, 0 - - - 啟用 UDP - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 3, 3, 3, 3 - - - groupBox1 - - - 19 - - - 2. 直連名單 - - - 267, 16 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Fill - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 9 - - - 0 - - - 322, 10 - - - 15, 192 - - - 0 - - - 94, 21 - - - 3 - - - 删除重複節點時保留較早新增的一個 - - - 3, 3, 3, 3 - - - 236, 28 - - - Bottom - - - 3 - - - System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - groupBox1 - - - 125, 12 - - - 3, 3, 3, 3 - - - 11 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 124, 60 - - - cbFreshrate - - - 246, 16 - - - tabPage6 - - - label6 - - - 111, 24 - - - panel2 - - - 21 - - - label9 - - - 0, 10 - - - panel1 - - - 2 - - - label14 - - - True - - - &取消 - - - &確定 - - - 一鍵套用預設路由規則 - - - 本地監聽端口 2 - - - 全局模式 - - - 繞過區域網路 - - - 繞過中國大陸地址 - - - 繞過區域網路和中國大陸地址 - - \ No newline at end of file diff --git a/v2rayN/Forms/OptionSettingForm.zh-Hans.resx b/v2rayN/Forms/OptionSettingForm.zh-Hans.resx deleted file mode 100644 index e900c66..0000000 --- a/v2rayN/Forms/OptionSettingForm.zh-Hans.resx +++ /dev/null @@ -1,378 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 取消(&C) - - - Core: 基础设置 - - - - 222, 16 - - - 底层传输安全选 tls 时,默认跳过证书验证 (allowInsecure) - - - 53, 12 - - - 路由模式 - - - [直连模式] 所有通过浏览器访问的网站不走代理 - - - [全局模式] 所有通过浏览器访问的网站走代理 - - - [分流模式] 只有通过浏览器访问的被墙网站走代理 - - - [手动模式] 仅开启 HTTP 代理,并清除系统代理设置 - - - [手动模式] 仅开启 PAC,并清除系统代理设置 - - - [手动模式] 仅开启 HTTP 代理,不改变系统代理设置 - - - [手动模式] 仅开启 PAC,不改变系统代理设置 - - - 96, 16 - - - 开启流量探测 - - - 96, 16 - - - 开启流量探测 - - - 191, 12 - - - 自定义 DNS (可多个,用逗号 (,) 隔开) - - - 开启 Mux 多路复用 (默认开启) - - - 102, 16 - - - 本地监听端口 2 - - - 66, 16 - - - 开启 UDP - - - 29, 12 - - - 协议 - - - 29, 12 - - - 协议 - - - 66, 16 - - - 开启 UDP - - - 156, 16 - - - 记录本地日志 (默认关闭) - - - 53, 12 - - - 日志等级 - - - 77, 12 - - - 本地监听端口 - - - Core: 路由设置 - - - 3, 89 - - - 642, 481 - - - 634, 455 - - - 1. 代理的域名或 IP - - - 628, 449 - - - 634, 455 - - - 2. 直连的域名或 IP - - - 628, 449 - - - 634, 455 - - - 3. 阻止的域名或 IP - - - 628, 449 - - - 634, 455 - - - 4. 预定义规则 - - - 全局 - - - 绕过局域网地址 - - - 绕过大陆地址 - - - 绕过局域网及大陆地址 - - - 19, 26 - - - 244, 20 - - - 642, 72 - - - 77, 12 - - - 域名解析策略 - - - - NoControl - - - 351, 14 - - - 201, 23 - - - 一键设置默认自定义路由规则 - - - - True - - - 5, 49 - - - 383, 12 - - - *设置的规则,用逗号 (,) 隔开;支持 Domain (纯字符串 / 正则 / 子域名 ) 和 IP - - - Core: KCP设置 - - - v2rayN 设置 - - - 156, 16 - - - 去重时保留序号较小的项 - - - 77, 12 - - - 统计刷新频率 - - - 372, 16 - - - 启用统计 (包含实时网速和使用流量显示,需要重启 v2rayN 客户端) - - - 144, 16 - - - 允许来自局域网的连接 - - - 227, 12 - - - 自定义 GFWList 地址 (不需自定义请留空) - - - 180, 16 - - - 开机自动启动 (可能会不成功) - - - 用户分流规则设置 - - - *设置用户分流规则,用逗号 (,) 隔开 - - - 确定(&O) - - - 参数设置 - - \ No newline at end of file diff --git a/v2rayN/Forms/QRCodeControl.Designer.cs b/v2rayN/Forms/QRCodeControl.Designer.cs deleted file mode 100644 index ca40596..0000000 --- a/v2rayN/Forms/QRCodeControl.Designer.cs +++ /dev/null @@ -1,68 +0,0 @@ -namespace v2rayN.Forms -{ - partial class QRCodeControl - { - /// - /// 必需的设计器变量。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 清理所有正在使用的资源。 - /// - /// 如果应释放托管资源,为 true;否则为 false。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region 组件设计器生成的代码 - - /// - /// 设计器支持所需的方法 - 不要 - /// 使用代码编辑器修改此方法的内容。 - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(QRCodeControl)); - this.txtUrl = new System.Windows.Forms.TextBox(); - this.picQRCode = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.picQRCode)).BeginInit(); - this.SuspendLayout(); - // - // txtUrl - // - resources.ApplyResources(this.txtUrl, "txtUrl"); - this.txtUrl.Name = "txtUrl"; - this.txtUrl.ReadOnly = true; - // - // picQRCode - // - resources.ApplyResources(this.picQRCode, "picQRCode"); - this.picQRCode.Name = "picQRCode"; - this.picQRCode.TabStop = false; - // - // QRCodeControl - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.picQRCode); - this.Controls.Add(this.txtUrl); - this.Name = "QRCodeControl"; - this.Load += new System.EventHandler(this.QRCodeControl_Load); - ((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.TextBox txtUrl; - private System.Windows.Forms.PictureBox picQRCode; - } -} diff --git a/v2rayN/Forms/QRCodeControl.cs b/v2rayN/Forms/QRCodeControl.cs deleted file mode 100644 index 02d59b4..0000000 --- a/v2rayN/Forms/QRCodeControl.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class QRCodeControl : UserControl - { - public QRCodeControl() - { - InitializeComponent(); - } - private void QRCodeControl_Load(object sender, System.EventArgs e) - { - txtUrl.MouseUp += txtUrl_MouseUp; - } - - void txtUrl_MouseUp(object sender, MouseEventArgs e) - { - txtUrl.SelectAll(); - } - - public void showQRCode(int Index, Config config) - { - if (Index >= 0) - { - string url = ConfigHandler.GetVmessQRCode(config, Index); - if (Utils.IsNullOrEmpty(url)) - { - picQRCode.Image = null; - txtUrl.Text = string.Empty; - return; - } - txtUrl.Text = url; - picQRCode.Image = QRCodeHelper.GetQRCode(url); - } - } - } -} diff --git a/v2rayN/Forms/QRCodeControl.resx b/v2rayN/Forms/QRCodeControl.resx deleted file mode 100644 index a6ceff0..0000000 --- a/v2rayN/Forms/QRCodeControl.resx +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - Bottom - - - - 0, 371 - - - - True - - - 356, 70 - - - 0 - - - txtUrl - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 1 - - - Fill - - - 0, 0 - - - 356, 371 - - - Zoom - - - 24 - - - picQRCode - - - System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - - - True - - - 6, 12 - - - 356, 441 - - - QRCodeControl - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/v2rayN/Forms/QRCodeForm.Designer.cs b/v2rayN/Forms/QRCodeForm.Designer.cs deleted file mode 100644 index 733adb4..0000000 --- a/v2rayN/Forms/QRCodeForm.Designer.cs +++ /dev/null @@ -1,94 +0,0 @@ -namespace v2rayN.Forms -{ - partial class QRCodeForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.picQRCode = new System.Windows.Forms.PictureBox(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.txtUrl = new System.Windows.Forms.TextBox(); - ((System.ComponentModel.ISupportInitialize)(this.picQRCode)).BeginInit(); - this.groupBox1.SuspendLayout(); - this.SuspendLayout(); - // - // picQRCode - // - this.picQRCode.Dock = System.Windows.Forms.DockStyle.Fill; - this.picQRCode.Location = new System.Drawing.Point(0, 0); - this.picQRCode.Name = "picQRCode"; - this.picQRCode.Size = new System.Drawing.Size(482, 483); - this.picQRCode.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; - this.picQRCode.TabIndex = 23; - this.picQRCode.TabStop = false; - // - // groupBox1 - // - this.groupBox1.Controls.Add(this.txtUrl); - this.groupBox1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.groupBox1.Location = new System.Drawing.Point(0, 483); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Size = new System.Drawing.Size(482, 90); - this.groupBox1.TabIndex = 0; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "URL"; - // - // txtUrl - // - this.txtUrl.Dock = System.Windows.Forms.DockStyle.Fill; - this.txtUrl.Location = new System.Drawing.Point(3, 17); - this.txtUrl.Multiline = true; - this.txtUrl.Name = "txtUrl"; - this.txtUrl.ReadOnly = true; - this.txtUrl.Size = new System.Drawing.Size(476, 70); - this.txtUrl.TabIndex = 0; - // - // QRCodeForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(482, 573); - this.Controls.Add(this.picQRCode); - this.Controls.Add(this.groupBox1); - this.Name = "QRCodeForm"; - this.Text = "服务器配置二维码和URL"; - this.Load += new System.EventHandler(this.QRCodeForm_Load); - this.Shown += new System.EventHandler(this.QRCodeForm_Shown); - ((System.ComponentModel.ISupportInitialize)(this.picQRCode)).EndInit(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.TextBox txtUrl; - private System.Windows.Forms.PictureBox picQRCode; - - } -} \ No newline at end of file diff --git a/v2rayN/Forms/QRCodeForm.cs b/v2rayN/Forms/QRCodeForm.cs deleted file mode 100644 index d170b17..0000000 --- a/v2rayN/Forms/QRCodeForm.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class QRCodeForm : BaseForm - { - public int Index { get; set; } - - public QRCodeForm() - { - InitializeComponent(); - } - - private void QRCodeForm_Load(object sender, EventArgs e) - { - txtUrl.MouseUp += txtUrl_MouseUp; - } - - void txtUrl_MouseUp(object sender, MouseEventArgs e) - { - txtUrl.SelectAll(); - } - - private void QRCodeForm_Shown(object sender, EventArgs e) - { - if (Index >= 0) - { - VmessQRCode vmessQRCode = null; - if (ConfigHandler.GetVmessQRCode(config, Index, ref vmessQRCode) != 0) - { - return; - } - string url = Utils.ToJson(vmessQRCode); - url = Utils.Base64Encode(url); - url = string.Format("{0}{1}", Global.vmessProtocol, url); - picQRCode.Image = QRCodeHelper.GetQRCode(url); - txtUrl.Text = url; - } - } - - } -} diff --git a/v2rayN/Forms/SubSettingControl.Designer.cs b/v2rayN/Forms/SubSettingControl.Designer.cs deleted file mode 100644 index 30fcadf..0000000 --- a/v2rayN/Forms/SubSettingControl.Designer.cs +++ /dev/null @@ -1,113 +0,0 @@ -namespace v2rayN.Forms -{ - partial class SubSettingControl - { - /// - /// 必需的设计器变量。 - /// - private System.ComponentModel.IContainer components = null; - - /// - /// 清理所有正在使用的资源。 - /// - /// 如果应释放托管资源,为 true;否则为 false。 - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region 组件设计器生成的代码 - - /// - /// 设计器支持所需的方法 - 不要修改 - /// 使用代码编辑器修改此方法的内容。 - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubSettingControl)); - this.groupBox2 = new System.Windows.Forms.GroupBox(); - this.chkEnabled = new System.Windows.Forms.CheckBox(); - this.btnRemove = new System.Windows.Forms.Button(); - this.txtUrl = new System.Windows.Forms.TextBox(); - this.txtRemarks = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.groupBox2.SuspendLayout(); - this.SuspendLayout(); - // - // groupBox2 - // - resources.ApplyResources(this.groupBox2, "groupBox2"); - this.groupBox2.Controls.Add(this.chkEnabled); - this.groupBox2.Controls.Add(this.btnRemove); - this.groupBox2.Controls.Add(this.txtUrl); - this.groupBox2.Controls.Add(this.txtRemarks); - this.groupBox2.Controls.Add(this.label2); - this.groupBox2.Controls.Add(this.label3); - this.groupBox2.Name = "groupBox2"; - this.groupBox2.TabStop = false; - // - // chkEnabled - // - resources.ApplyResources(this.chkEnabled, "chkEnabled"); - this.chkEnabled.Name = "chkEnabled"; - this.chkEnabled.UseVisualStyleBackColor = true; - this.chkEnabled.Leave += new System.EventHandler(this.txtRemarks_Leave); - // - // btnRemove - // - resources.ApplyResources(this.btnRemove, "btnRemove"); - this.btnRemove.Name = "btnRemove"; - this.btnRemove.UseVisualStyleBackColor = true; - this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click); - // - // txtUrl - // - resources.ApplyResources(this.txtUrl, "txtUrl"); - this.txtUrl.Name = "txtUrl"; - this.txtUrl.Leave += new System.EventHandler(this.txtRemarks_Leave); - // - // txtRemarks - // - resources.ApplyResources(this.txtRemarks, "txtRemarks"); - this.txtRemarks.Name = "txtRemarks"; - this.txtRemarks.Leave += new System.EventHandler(this.txtRemarks_Leave); - // - // label2 - // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; - // - // label3 - // - resources.ApplyResources(this.label3, "label3"); - this.label3.Name = "label3"; - // - // SubSettingControl - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.groupBox2); - this.Name = "SubSettingControl"; - this.Load += new System.EventHandler(this.SubSettingControl_Load); - this.groupBox2.ResumeLayout(false); - this.groupBox2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.TextBox txtUrl; - private System.Windows.Forms.TextBox txtRemarks; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button btnRemove; - private System.Windows.Forms.CheckBox chkEnabled; - } -} diff --git a/v2rayN/Forms/SubSettingControl.cs b/v2rayN/Forms/SubSettingControl.cs deleted file mode 100644 index 9836be5..0000000 --- a/v2rayN/Forms/SubSettingControl.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Windows.Forms; -using v2rayN.Base; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public delegate void ChangeEventHandler(object sender, EventArgs e); - public partial class SubSettingControl : UserControl - { - public event ChangeEventHandler OnButtonClicked; - - - public SubItem subItem { get; set; } - - public SubSettingControl() - { - InitializeComponent(); - } - - private void SubSettingControl_Load(object sender, EventArgs e) - { - BindingSub(); - } - - private void BindingSub() - { - if (subItem != null) - { - txtRemarks.Text = subItem.remarks.ToString(); - txtUrl.Text = subItem.url.ToString(); - chkEnabled.Checked = subItem.enabled; - } - } - private void EndBindingSub() - { - if (subItem != null) - { - subItem.remarks = txtRemarks.Text.TrimEx(); - subItem.url = txtUrl.Text.TrimEx(); - subItem.enabled = chkEnabled.Checked; - } - } - private void txtRemarks_Leave(object sender, EventArgs e) - { - EndBindingSub(); - } - - private void btnRemove_Click(object sender, EventArgs e) - { - if (subItem != null) - { - subItem.remarks = string.Empty; - subItem.url = string.Empty; - } - - OnButtonClicked?.Invoke(sender, e); - } - } -} diff --git a/v2rayN/Forms/SubSettingControl.resx b/v2rayN/Forms/SubSettingControl.resx deleted file mode 100644 index 5cf898f..0000000 --- a/v2rayN/Forms/SubSettingControl.resx +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - NoControl - - - groupBox2 - - - - 60, 16 - - - txtUrl - - - 75, 23 - - - 刪除 - - - txtRemarks - - - - 24 - - - 432, 46 - - - SubSettingControl - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - True - - - groupBox2 - - - 83, 12 - - - 265, 21 - - - 6, 12 - - - label3 - - - 127, 21 - - - True - - - 0 - - - 12, 55 - - - 10 - - - 127, 55 - - - Bottom - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 2 - - - groupBox2 - - - 11 - - - 47, 12 - - - 節點訂閱詳情 - - - 0, 9 - - - 啟用 - - - chkEnabled - - - 3 - - - NoControl - - - 1 - - - 25 - - - 23 - - - groupBox2 - - - groupBox2 - - - 406, 23 - - - True - - - True - - - btnRemove - - - NoControl - - - label2 - - - System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 584, 110 - - - 4 - - - NoControl - - - 584, 119 - - - 訂閱組名 (自定義) - - - 0 - - - 12, 25 - - - groupBox2 - - - 0 - - - 10 - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 訂閱連結 (url) - - - $this - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - groupBox2 - - - 484, 21 - - - 5 - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - zh-Hans - - - True - - \ No newline at end of file diff --git a/v2rayN/Forms/SubSettingForm.Designer.cs b/v2rayN/Forms/SubSettingForm.Designer.cs deleted file mode 100644 index 489693c..0000000 --- a/v2rayN/Forms/SubSettingForm.Designer.cs +++ /dev/null @@ -1,97 +0,0 @@ -namespace v2rayN.Forms -{ - partial class SubSettingForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SubSettingForm)); - this.btnClose = new System.Windows.Forms.Button(); - this.panCon = new System.Windows.Forms.Panel(); - this.panel2 = new System.Windows.Forms.Panel(); - this.btnAdd = new System.Windows.Forms.Button(); - this.btnOK = new System.Windows.Forms.Button(); - this.panel2.SuspendLayout(); - this.SuspendLayout(); - // - // btnClose - // - this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; - resources.ApplyResources(this.btnClose, "btnClose"); - this.btnClose.Name = "btnClose"; - this.btnClose.UseVisualStyleBackColor = true; - this.btnClose.Click += new System.EventHandler(this.btnClose_Click); - // - // panCon - // - resources.ApplyResources(this.panCon, "panCon"); - this.panCon.Name = "panCon"; - // - // panel2 - // - this.panel2.Controls.Add(this.btnAdd); - this.panel2.Controls.Add(this.btnClose); - this.panel2.Controls.Add(this.btnOK); - resources.ApplyResources(this.panel2, "panel2"); - this.panel2.Name = "panel2"; - // - // btnAdd - // - resources.ApplyResources(this.btnAdd, "btnAdd"); - this.btnAdd.Name = "btnAdd"; - this.btnAdd.UseVisualStyleBackColor = true; - this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); - // - // btnOK - // - resources.ApplyResources(this.btnOK, "btnOK"); - this.btnOK.Name = "btnOK"; - this.btnOK.UseVisualStyleBackColor = true; - this.btnOK.Click += new System.EventHandler(this.btnOK_Click); - // - // SubSettingForm - // - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.btnClose; - this.Controls.Add(this.panCon); - this.Controls.Add(this.panel2); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Name = "SubSettingForm"; - this.Load += new System.EventHandler(this.SubSettingForm_Load); - this.panel2.ResumeLayout(false); - this.ResumeLayout(false); - - } - - #endregion - private System.Windows.Forms.Button btnClose; - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Button btnAdd; - private System.Windows.Forms.Panel panCon; - } -} \ No newline at end of file diff --git a/v2rayN/Forms/SubSettingForm.cs b/v2rayN/Forms/SubSettingForm.cs deleted file mode 100644 index 4c8e5d4..0000000 --- a/v2rayN/Forms/SubSettingForm.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using v2rayN.Handler; -using v2rayN.Mode; - -namespace v2rayN.Forms -{ - public partial class SubSettingForm : BaseForm - { - List lstControls = new List(); - - public SubSettingForm() - { - InitializeComponent(); - } - - private void SubSettingForm_Load(object sender, EventArgs e) - { - if (config.subItem == null) - { - config.subItem = new List(); - } - - RefreshSubsView(); - } - - /// - /// 刷新列表 - /// - private void RefreshSubsView() - { - panCon.Controls.Clear(); - lstControls.Clear(); - - for (int k = config.subItem.Count - 1; k >= 0; k--) - { - SubItem item = config.subItem[k]; - if (Utils.IsNullOrEmpty(item.remarks) - && Utils.IsNullOrEmpty(item.url)) - { - if (!Utils.IsNullOrEmpty(item.id)) - { - ConfigHandler.RemoveServerViaSubid(ref config, item.id); - } - config.subItem.RemoveAt(k); - } - } - - foreach (SubItem item in config.subItem) - { - SubSettingControl control = new SubSettingControl(); - control.OnButtonClicked += Control_OnButtonClicked; - control.subItem = item; - control.Dock = DockStyle.Top; - - panCon.Controls.Add(control); - panCon.Controls.SetChildIndex(control, 0); - - lstControls.Add(control); - } - } - - private void Control_OnButtonClicked(object sender, EventArgs e) - { - RefreshSubsView(); - } - - private void btnOK_Click(object sender, EventArgs e) - { - if (config.subItem.Count <= 0) - { - AddSub(); - } - - if (ConfigHandler.SaveSubItem(ref config) == 0) - { - this.DialogResult = DialogResult.OK; - } - else - { - UI.ShowWarning(UIRes.I18N("OperationFailed")); - } - } - - private void btnClose_Click(object sender, EventArgs e) - { - this.DialogResult = DialogResult.Cancel; - } - - private void btnAdd_Click(object sender, EventArgs e) - { - AddSub(); - - RefreshSubsView(); - } - - - private void AddSub() - { - SubItem subItem = new SubItem - { - id = string.Empty, - remarks = "(此處填入自定義名稱)", - url = "(此處貼上訂閲連結,請全選刪除本提示後貼入)" - }; - config.subItem.Add(subItem); - } - } -} diff --git a/v2rayN/Forms/SubSettingForm.resx b/v2rayN/Forms/SubSettingForm.resx deleted file mode 100644 index 6db859d..0000000 --- a/v2rayN/Forms/SubSettingForm.resx +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - 6, 12 - - - 581, 629 - - - - True - - - 節點訂閱設定 - - - - NoControl - - - 47, 17 - - - 75, 23 - - - 6 - - - &新增 - - - NoControl - - - 448, 17 - - - 75, 23 - - - 4 - - - &取消 - - - NoControl - - - 355, 17 - - - 75, 23 - - - 5 - - - &確認 - - - True - - - Fill - - - 0, 0 - - - 581, 569 - - - 10 - - - Bottom - - - 0, 569 - - - 581, 60 - - - 7 - - \ No newline at end of file diff --git a/v2rayN/Forms/SubSettingForm.zh-Hans.resx b/v2rayN/Forms/SubSettingForm.zh-Hans.resx deleted file mode 100644 index 35c3cba..0000000 --- a/v2rayN/Forms/SubSettingForm.zh-Hans.resx +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 订阅设置 - - - 添加(&A) - - - 取消(&C) - - - 确定(&O) - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 - ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu - PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0HAAAA - BFRleHQKSW1hZ2VJbmRleAlCYWNrQ29sb3IHQ2hlY2tlZARGb250CUZvcmVDb2xvchdVc2VJdGVtU3R5 - bGVGb3JTdWJJdGVtcwEABAAEBAAIFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAETU3lzdGVtLkRyYXdp - bmcuRm9udAMAAAAUU3lzdGVtLkRyYXdpbmcuQ29sb3IDAAAAAQIAAAAGBAAAAAD/////Bfv///8UU3lz - dGVtLkRyYXdpbmcuQ29sb3IEAAAABG5hbWUFdmFsdWUKa25vd25Db2xvcgVzdGF0ZQEAAAAJBwcDAAAA - CgAAAAAAAAAAGAABAAAJBgAAAAH5////+////woAAAAAAAAAABoAAQABBQYAAAATU3lzdGVtLkRyYXdp - bmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0uRHJhd2luZy5Gb250U3R5 - bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABggAAAAG5a6L5L2TAAAQQQX3 - ////GFN5c3RlbS5EcmF3aW5nLkZvbnRTdHlsZQEAAAAHdmFsdWVfXwAIAwAAAAAAAAAF9v///xtTeXN0 - ZW0uRHJhd2luZy5HcmFwaGljc1VuaXQBAAAAB3ZhbHVlX18ACAMAAAADAAAACw== - - - \ No newline at end of file diff --git a/v2rayN/Global.cs b/v2rayN/Global.cs deleted file mode 100644 index 1451fbc..0000000 --- a/v2rayN/Global.cs +++ /dev/null @@ -1,264 +0,0 @@ - -namespace v2rayN -{ - class Global - { - #region 常量 - - - public const string v2rayWebsiteUrl = @"https://www.v2fly.org/"; - public const string UpdateUrl = AboutUrl + @"/releases"; - public const string AboutUrl = @"https://github.com/raymao9/v2rayN"; - public const string NUrl = @"https://github.com/raymao9/v2rayN/releases"; - - /// - /// SpeedTestUrl - /// - public const string SpeedTestUrl = @"http://cachefly.cachefly.net/10mb.test"; - public const string SpeedPingTestUrl = @"https://www.google.com/generate_204"; - public const string AvailabilityTestUrl = @"https://www.google.com/generate_204"; - - /// - /// CustomRoutingListUrl - /// - public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/"; - - public const string GFWLIST_URL = "https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt"; - - /// - /// PromotionUrl - /// - public const string PromotionUrl = @"https://linktofish.org/knowledgebase.php"; - - /// - /// 本软件配置文件名 - /// - public const string ConfigFileName = "guiNConfig.json"; - - /// - /// v2ray配置文件名 - /// - public const string v2rayConfigFileName = "config.json"; - - /// - /// v2ray客户端配置样例文件名 - /// - public const string v2raySampleClient = "v2rayN.Sample.SampleClientConfig.txt"; - /// - /// v2ray服务端配置样例文件名 - /// - public const string v2raySampleServer = "v2rayN.Sample.SampleServerConfig.txt"; - /// - /// v2ray配置Httprequest文件名 - /// - public const string v2raySampleHttprequestFileName = "v2rayN.Sample.SampleHttprequest.txt"; - /// - /// v2ray配置Httpresponse文件名 - /// - public const string v2raySampleHttpresponseFileName = "v2rayN.Sample.SampleHttpresponse.txt"; - /// - /// 空白的pac文件 - /// - public const string BlankPacFileName = "v2rayN.Sample.BlankPac.txt"; - - public const string CustomRoutingFileName = "v2rayN.Sample.custom_routing_"; - - - /// - /// 默认加密方式 - /// - public const string DefaultSecurity = "auto"; - - /// - /// 默认传输协议 - /// - public const string DefaultNetwork = "tcp"; - - /// - /// Tcp伪装http - /// - public const string TcpHeaderHttp = "http"; - - /// - /// None值 - /// - public const string None = "none"; - - /// - /// 代理 tag值 - /// - public const string agentTag = "proxy"; - - /// - /// 直连 tag值 - /// - public const string directTag = "direct"; - - /// - /// 阻止 tag值 - /// - public const string blockTag = "block"; - - /// - /// - /// - public const string StreamSecurity = "tls"; - public const string StreamSecurityX = "xtls"; - - public const string InboundSocks = "socks"; - public const string InboundHttp = "http"; - public const string Loopback = "127.0.0.1"; - public const string InboundAPITagName = "api"; - public const string InboundAPIProtocal = "dokodemo-door"; - - - /// - /// vmess - /// - public const string vmessProtocol = "vmess://"; - /// - /// vmess - /// - public const string vmessProtocolLite = "vmess"; - /// - /// shadowsocks - /// - public const string ssProtocol = "ss://"; - /// - /// shadowsocks - /// - public const string ssProtocolLite = "shadowsocks"; - /// - /// socks - /// - public const string socksProtocol = "socks://"; - /// - /// socks - /// - public const string socksProtocolLite = "socks"; - /// - /// http - /// - public const string httpProtocol = "http://"; - /// - /// https - /// - public const string httpsProtocol = "https://"; - /// - /// vless - /// - public const string vlessProtocol = "vless://"; - /// - /// vless - /// - public const string vlessProtocolLite = "vless"; - /// - /// trojan - /// - public const string trojanProtocol = "trojan://"; - /// - /// trojan - /// - public const string trojanProtocolLite = "trojan"; - - /// - /// pac - /// - public const string pacFILE = "pac.txt"; - - /// - /// email - /// - public const string userEMail = "t@t.tt"; - - /// - /// MyRegPath - /// - public const string MyRegPath = "Software\\v2rayNGUI"; - - /// - /// Language - /// - public const string MyRegKeyLanguage = "CurrentLanguage"; - /// - /// Icon - /// - public const string CustomIconName = "v2rayN.ico"; - - public enum StatisticsFreshRate - { - quick = 1000, - medium = 2000, - slow = 3000 - } - public const string StatisticLogOverall = "StatisticLogOverall.json"; - - public const string IEProxyExceptions = "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*"; - - #endregion - - #region 全局变量 - - /// - /// 是否需要重启服务V2ray - /// - public static bool reloadV2ray - { - get; set; - } - - /// - /// 是否开启全局代理(http) - /// - public static bool sysAgent - { - get; set; - } - - /// - /// socks端口 - /// - public static int socksPort - { - get; set; - } - - /// - /// http端口 - /// - public static int httpPort - { - get; set; - } - - /// - /// PAC端口 - /// - public static int pacPort - { - get; set; - } - - /// - /// - /// - public static int statePort - { - get; set; - } - - public static Job processJob - { - get; set; - } - public static System.Threading.Mutex mutexObj - { - get; set; - } - - #endregion - - - - } -} diff --git a/v2rayN/Handler/ConfigHandler.cs b/v2rayN/Handler/ConfigHandler.cs deleted file mode 100644 index 37a9878..0000000 --- a/v2rayN/Handler/ConfigHandler.cs +++ /dev/null @@ -1,1084 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Net; -using v2rayN.Mode; -using v2rayN.Base; -using System.Linq; -using v2rayN.Tool; - -namespace v2rayN.Handler -{ - /// - /// 本软件配置文件处理类 - /// - class ConfigHandler - { - private static string configRes = Global.ConfigFileName; - - /// - /// 载入配置文件 - /// - /// - /// - public static int LoadConfig(ref Config config) - { - //载入配置文件 - string result = Utils.LoadResource(Utils.GetPath(configRes)); - if (!Utils.IsNullOrEmpty(result)) - { - //转成Json - config = Utils.FromJson(result); - } - if (config == null) - { - config = new Config - { - index = -1, - logEnabled = false, - loglevel = "warning", - vmess = new List(), - - //Mux - muxEnabled = false, - - ////默认监听端口 - //config.pacPort = 8888; - - // 默认不开启统计 - enableStatistics = false, - - // 默认中等刷新率 - statisticsFreshRate = (int)Global.StatisticsFreshRate.medium - }; - } - - //本地监听 - if (config.inbound == null) - { - config.inbound = new List(); - InItem inItem = new InItem - { - protocol = Global.InboundSocks, - localPort = 10808, - udpEnabled = true, - sniffingEnabled = true - }; - - config.inbound.Add(inItem); - - //inItem = new InItem(); - //inItem.protocol = "http"; - //inItem.localPort = 1081; - //inItem.udpEnabled = true; - - //config.inbound.Add(inItem); - } - else - { - //http协议不由core提供,只保留socks - if (config.inbound.Count > 0) - { - config.inbound[0].protocol = Global.InboundSocks; - } - } - //路由规则 - if (Utils.IsNullOrEmpty(config.domainStrategy)) - { - config.domainStrategy = "IPIfNonMatch"; - } - if (Utils.IsNullOrEmpty(config.routingMode)) - { - config.routingMode = "0"; - } - if (config.useragent == null) - { - config.useragent = new List(); - } - if (config.userdirect == null) - { - config.userdirect = new List(); - } - if (config.userblock == null) - { - config.userblock = new List(); - } - //kcp - if (config.kcpItem == null) - { - config.kcpItem = new KcpItem - { - mtu = 1350, - tti = 50, - uplinkCapacity = 12, - downlinkCapacity = 100, - readBufferSize = 2, - writeBufferSize = 2, - congestion = false - }; - } - if (config.uiItem == null) - { - config.uiItem = new UIItem(); - } - if (config.uiItem.mainLvColWidth == null) - { - config.uiItem.mainLvColWidth = new Dictionary(); - } - - //// 如果是用户升级,首次会有端口号为0的情况,不可用,这里处理 - //if (config.pacPort == 0) - //{ - // config.pacPort = 8888; - //} - if (Utils.IsNullOrEmpty(config.speedTestUrl)) - { - config.speedTestUrl = Global.SpeedTestUrl; - } - if (Utils.IsNullOrEmpty(config.speedPingTestUrl)) - { - config.speedPingTestUrl = Global.SpeedPingTestUrl; - } - if (Utils.IsNullOrEmpty(config.urlGFWList)) - { - config.urlGFWList = Global.GFWLIST_URL; - } - //if (Utils.IsNullOrEmpty(config.remoteDNS)) - //{ - // config.remoteDNS = "1.1.1.1"; - //} - - if (config.subItem == null) - { - config.subItem = new List(); - } - if (config.userPacRule == null) - { - config.userPacRule = new List(); - } - - if (config == null - || config.index < 0 - || config.vmess.Count <= 0 - || config.index > config.vmess.Count - 1 - ) - { - Global.reloadV2ray = false; - } - else - { - Global.reloadV2ray = true; - - //版本升级 - for (int i = 0; i < config.vmess.Count; i++) - { - VmessItem vmessItem = config.vmess[i]; - UpgradeServerVersion(ref vmessItem); - } - } - - return 0; - } - - /// - /// 添加服务器或编辑 - /// - /// - /// - /// - /// - public static int AddServer(ref Config config, VmessItem vmessItem, int index) - { - vmessItem.configVersion = 2; - vmessItem.configType = (int)EConfigType.Vmess; - - vmessItem.address = vmessItem.address.TrimEx(); - vmessItem.id = vmessItem.id.TrimEx(); - vmessItem.security = vmessItem.security.TrimEx(); - vmessItem.network = vmessItem.network.TrimEx(); - vmessItem.headerType = vmessItem.headerType.TrimEx(); - vmessItem.requestHost = vmessItem.requestHost.TrimEx(); - vmessItem.path = vmessItem.path.TrimEx(); - vmessItem.streamSecurity = vmessItem.streamSecurity.TrimEx(); - - if (index >= 0) - { - //修改 - config.vmess[index] = vmessItem; - if (config.index.Equals(index)) - { - Global.reloadV2ray = true; - } - } - else - { - //添加 - if (Utils.IsNullOrEmpty(vmessItem.allowInsecure)) - { - vmessItem.allowInsecure = config.defAllowInsecure.ToString(); - } - config.vmess.Add(vmessItem); - if (config.vmess.Count == 1) - { - config.index = 0; - Global.reloadV2ray = true; - } - } - - ToJsonFile(config); - - return 0; - } - - /// - /// 移除服务器 - /// - /// - /// - /// - public static int RemoveServer(ref Config config, int index) - { - if (index < 0 || index > config.vmess.Count - 1) - { - return -1; - } - - //删除 - config.vmess.RemoveAt(index); - - - //移除的是活动的 - if (config.index.Equals(index)) - { - if (config.vmess.Count > 0) - { - config.index = 0; - } - else - { - config.index = -1; - } - Global.reloadV2ray = true; - } - else if (index < config.index)//移除活动之前的 - { - config.index--; - Global.reloadV2ray = true; - } - - ToJsonFile(config); - - return 0; - } - - /// - /// 克隆服务器 - /// - /// - /// - /// - public static int CopyServer(ref Config config, int index) - { - if (index < 0 || index > config.vmess.Count - 1) - { - return -1; - } - - VmessItem vmessItem = new VmessItem - { - configVersion = config.vmess[index].configVersion, - address = config.vmess[index].address, - port = config.vmess[index].port, - id = config.vmess[index].id, - alterId = config.vmess[index].alterId, - security = config.vmess[index].security, - network = config.vmess[index].network, - remarks = string.Format("{0}-clone", config.vmess[index].remarks), - headerType = config.vmess[index].headerType, - requestHost = config.vmess[index].requestHost, - path = config.vmess[index].path, - streamSecurity = config.vmess[index].streamSecurity, - allowInsecure = config.vmess[index].allowInsecure, - configType = config.vmess[index].configType - }; - - config.vmess.Insert(index + 1, vmessItem); // 插入到下一项 - - ToJsonFile(config); - - return 0; - } - - /// - /// 设置活动服务器 - /// - /// - /// - /// - public static int SetDefaultServer(ref Config config, int index) - { - if (index < 0 || index > config.vmess.Count - 1) - { - return -1; - } - - ////和现在相同 - //if (config.index.Equals(index)) - //{ - // return -1; - //} - config.index = index; - Global.reloadV2ray = true; - - ToJsonFile(config); - - return 0; - } - - /// - /// 保参数 - /// - /// - /// - public static int SaveConfig(ref Config config, bool reload = true) - { - Global.reloadV2ray = reload; - - ToJsonFile(config); - - return 0; - } - - /// - /// 存储文件 - /// - /// - private static void ToJsonFile(Config config) - { - Utils.ToJsonFile(config, Utils.GetPath(configRes)); - } - - /// - /// 取得服务器QRCode配置 - /// - /// - /// - /// - public static string GetVmessQRCode(Config config, int index) - { - try - { - string url = string.Empty; - - VmessItem vmessItem = config.vmess[index]; - if (vmessItem.configType == (int)EConfigType.Vmess) - { - VmessQRCode vmessQRCode = new VmessQRCode - { - v = vmessItem.configVersion.ToString(), - ps = vmessItem.remarks.TrimEx(), //备注也许很长 ; - add = vmessItem.address, - port = vmessItem.port.ToString(), - id = vmessItem.id, - aid = vmessItem.alterId.ToString(), - net = vmessItem.network, - type = vmessItem.headerType, - host = vmessItem.requestHost, - path = vmessItem.path, - tls = vmessItem.streamSecurity - }; - - url = Utils.ToJson(vmessQRCode); - url = Utils.Base64Encode(url); - url = string.Format("{0}{1}", Global.vmessProtocol, url); - - } - else if (vmessItem.configType == (int)EConfigType.Shadowsocks) - { - string remark = string.Empty; - if (!Utils.IsNullOrEmpty(vmessItem.remarks)) - { - remark = "#" + WebUtility.UrlEncode(vmessItem.remarks); - } - url = string.Format("{0}:{1}@{2}:{3}", - vmessItem.security, - vmessItem.id, - vmessItem.address, - vmessItem.port); - url = Utils.Base64Encode(url); - url = string.Format("{0}{1}{2}", Global.ssProtocol, url, remark); - } - else if (vmessItem.configType == (int)EConfigType.Socks) - { - string remark = string.Empty; - if (!Utils.IsNullOrEmpty(vmessItem.remarks)) - { - remark = "#" + WebUtility.UrlEncode(vmessItem.remarks); - } - url = string.Format("{0}:{1}@{2}:{3}", - vmessItem.security, - vmessItem.id, - vmessItem.address, - vmessItem.port); - url = Utils.Base64Encode(url); - url = string.Format("{0}{1}{2}", Global.socksProtocol, url, remark); - } - else if (vmessItem.configType == (int)EConfigType.Trojan) - { - string remark = string.Empty; - if (!Utils.IsNullOrEmpty(vmessItem.remarks)) - { - remark = "#" + WebUtility.UrlEncode(vmessItem.remarks); - } - string query = string.Empty; - if (!Utils.IsNullOrEmpty(vmessItem.requestHost)) - { - query = string.Format("?sni={0}", vmessItem.requestHost); - } - url = string.Format("{0}@{1}:{2}", - vmessItem.id, - vmessItem.address, - vmessItem.port); - url = string.Format("{0}{1}{2}{3}", Global.trojanProtocol, url, query, remark); - } - else - { - } - return url; - } - catch - { - return ""; - } - } - - /// - /// 移动服务器 - /// - /// - /// - /// - /// - public static int MoveServer(ref Config config, int index, EMove eMove) - { - int count = config.vmess.Count; - if (index < 0 || index > config.vmess.Count - 1) - { - return -1; - } - switch (eMove) - { - case EMove.Top: - { - if (index == 0) - { - return 0; - } - VmessItem vmess = Utils.DeepCopy(config.vmess[index]); - config.vmess.RemoveAt(index); - config.vmess.Insert(0, vmess); - if (index < config.index) - { - // - } - else if (config.index == index) - { - config.index = 0; - } - else - { - config.index++; - } - break; - } - case EMove.Up: - { - if (index == 0) - { - return 0; - } - VmessItem vmess = Utils.DeepCopy(config.vmess[index]); - config.vmess.RemoveAt(index); - config.vmess.Insert(index - 1, vmess); - if (index == config.index + 1) - { - config.index++; - } - else if (config.index == index) - { - config.index--; - } - break; - } - - case EMove.Down: - { - if (index == count - 1) - { - return 0; - } - VmessItem vmess = Utils.DeepCopy(config.vmess[index]); - config.vmess.RemoveAt(index); - config.vmess.Insert(index + 1, vmess); - if (index == config.index - 1) - { - config.index--; - } - else if (config.index == index) - { - config.index++; - } - break; - } - case EMove.Bottom: - { - if (index == count - 1) - { - return 0; - } - VmessItem vmess = Utils.DeepCopy(config.vmess[index]); - config.vmess.RemoveAt(index); - config.vmess.Add(vmess); - if (index < config.index) - { - config.index--; - } - else if (config.index == index) - { - config.index = count - 1; - } - else - { - // - } - break; - } - - } - Global.reloadV2ray = true; - - ToJsonFile(config); - - return 0; - } - - /// - /// 添加自定义服务器 - /// - /// - /// - /// - public static int AddCustomServer(ref Config config, string fileName) - { - string newFileName = string.Format("{0}.json", Utils.GetGUID()); - //newFileName = Path.Combine(Utils.GetTempPath(), newFileName); - - try - { - File.Copy(fileName, Path.Combine(Utils.GetTempPath(), newFileName)); - } - catch - { - return -1; - } - - VmessItem vmessItem = new VmessItem - { - address = newFileName, - configType = (int)EConfigType.Custom, - remarks = string.Format("import custom@{0}", DateTime.Now.ToShortDateString()) - }; - - config.vmess.Add(vmessItem); - if (config.vmess.Count == 1) - { - config.index = 0; - Global.reloadV2ray = true; - } - - ToJsonFile(config); - - return 0; - } - - /// - /// 添加服务器或编辑 - /// - /// - /// - /// - /// - public static int EditCustomServer(ref Config config, VmessItem vmessItem, int index) - { - //修改 - config.vmess[index] = vmessItem; - if (config.index.Equals(index)) - { - Global.reloadV2ray = true; - } - - ToJsonFile(config); - - return 0; - } - - /// - /// 添加服务器或编辑 - /// - /// - /// - /// - /// - public static int AddShadowsocksServer(ref Config config, VmessItem vmessItem, int index) - { - vmessItem.configVersion = 2; - vmessItem.configType = (int)EConfigType.Shadowsocks; - - vmessItem.address = vmessItem.address.TrimEx(); - vmessItem.id = vmessItem.id.TrimEx(); - vmessItem.security = vmessItem.security.TrimEx(); - - if (index >= 0) - { - //修改 - config.vmess[index] = vmessItem; - if (config.index.Equals(index)) - { - Global.reloadV2ray = true; - } - } - else - { - //添加 - config.vmess.Add(vmessItem); - if (config.vmess.Count == 1) - { - config.index = 0; - Global.reloadV2ray = true; - } - } - - ToJsonFile(config); - - return 0; - } - - /// - /// 添加服务器或编辑 - /// - /// - /// - /// - /// - public static int AddSocksServer(ref Config config, VmessItem vmessItem, int index) - { - vmessItem.configVersion = 2; - vmessItem.configType = (int)EConfigType.Socks; - - vmessItem.address = vmessItem.address.TrimEx(); - - if (index >= 0) - { - //修改 - config.vmess[index] = vmessItem; - if (config.index.Equals(index)) - { - Global.reloadV2ray = true; - } - } - else - { - //添加 - config.vmess.Add(vmessItem); - if (config.vmess.Count == 1) - { - config.index = 0; - Global.reloadV2ray = true; - } - } - - ToJsonFile(config); - - return 0; - } - - - /// - /// 添加服务器或编辑 - /// - /// - /// - /// - /// - public static int AddTrojanServer(ref Config config, VmessItem vmessItem, int index) - { - vmessItem.configVersion = 2; - vmessItem.configType = (int)EConfigType.Trojan; - - vmessItem.address = vmessItem.address.TrimEx(); - vmessItem.id = vmessItem.id.TrimEx(); - - vmessItem.streamSecurity = Global.StreamSecurity; - vmessItem.allowInsecure = "false"; - - if (index >= 0) - { - //修改 - config.vmess[index] = vmessItem; - if (config.index.Equals(index)) - { - Global.reloadV2ray = true; - } - } - else - { - //添加 - config.vmess.Add(vmessItem); - if (config.vmess.Count == 1) - { - config.index = 0; - Global.reloadV2ray = true; - } - } - - ToJsonFile(config); - - return 0; - } - - /// - /// 配置文件版本升级 - /// - /// - /// - public static int UpgradeServerVersion(ref VmessItem vmessItem) - { - try - { - if (vmessItem == null - || vmessItem.configVersion == 2) - { - return 0; - } - if (vmessItem.configType == (int)EConfigType.Vmess) - { - string path = ""; - string host = ""; - string[] arrParameter; - switch (vmessItem.network) - { - case "kcp": - break; - case "ws": - //*ws(path+host),它们中间分号(;)隔开 - arrParameter = vmessItem.requestHost.Replace(" ", "").Split(';'); - if (arrParameter.Length > 0) - { - path = arrParameter[0]; - } - if (arrParameter.Length > 1) - { - path = arrParameter[0]; - host = arrParameter[1]; - } - vmessItem.path = path; - vmessItem.requestHost = host; - break; - case "h2": - //*h2 path - arrParameter = vmessItem.requestHost.Replace(" ", "").Split(';'); - if (arrParameter.Length > 0) - { - path = arrParameter[0]; - } - if (arrParameter.Length > 1) - { - path = arrParameter[0]; - host = arrParameter[1]; - } - vmessItem.path = path; - vmessItem.requestHost = host; - break; - default: - break; - } - } - vmessItem.configVersion = 2; - } - catch - { - } - return 0; - } - - /// - /// 批量添加服务器 - /// - /// - /// - /// - /// 成功导入的数量 - public static int AddBatchServers(ref Config config, string clipboardData, string subid = "") - { - if (Utils.IsNullOrEmpty(clipboardData)) - { - return -1; - } - //if (clipboardData.IndexOf("vmess") >= 0 && clipboardData.IndexOf("vmess") == clipboardData.LastIndexOf("vmess")) - //{ - // clipboardData = clipboardData.Replace("\r\n", "").Replace("\n", ""); - //} - int countServers = 0; - - //string[] arrData = clipboardData.Split(new string[] { "\r\n" }, StringSplitOptions.None); - string[] arrData = clipboardData.Split(Environment.NewLine.ToCharArray()); - foreach (string str in arrData) - { - //maybe sub - if (str.StartsWith(Global.httpsProtocol) || str.StartsWith(Global.httpProtocol)) - { - if (AddSubItem(ref config, str) == 0) - { - countServers++; - } - continue; - } - VmessItem vmessItem = V2rayConfigHandler.ImportFromClipboardConfig(str, out string msg); - if (vmessItem == null) - { - continue; - } - vmessItem.subid = subid; - if (vmessItem.configType == (int)EConfigType.Vmess) - { - if (AddServer(ref config, vmessItem, -1) == 0) - { - countServers++; - } - } - else if (vmessItem.configType == (int)EConfigType.Shadowsocks) - { - if (AddShadowsocksServer(ref config, vmessItem, -1) == 0) - { - countServers++; - } - } - else if (vmessItem.configType == (int)EConfigType.Socks) - { - if (AddSocksServer(ref config, vmessItem, -1) == 0) - { - countServers++; - } - } - else if (vmessItem.configType == (int)EConfigType.Trojan) - { - if (AddTrojanServer(ref config, vmessItem, -1) == 0) - { - countServers++; - } - } - } - return countServers; - } - - /// - /// add sub - /// - /// - /// - /// - public static int AddSubItem(ref Config config, string url) - { - //already exists - foreach (SubItem sub in config.subItem) - { - if (url == sub.url) - { - return 0; - } - } - - SubItem subItem = new SubItem - { - id = string.Empty, - remarks = "import sub", - url = url - }; - config.subItem.Add(subItem); - - return SaveSubItem(ref config); - } - - /// - /// save sub - /// - /// - /// - public static int SaveSubItem(ref Config config) - { - if (config.subItem == null || config.subItem.Count <= 0) - { - return -1; - } - - foreach (SubItem sub in config.subItem) - { - if (Utils.IsNullOrEmpty(sub.id)) - { - sub.id = Utils.GetGUID(); - } - } - - ToJsonFile(config); - return 0; - } - - /// - /// 移除服务器 - /// - /// - /// - /// - public static int RemoveServerViaSubid(ref Config config, string subid) - { - if (Utils.IsNullOrEmpty(subid) || config.vmess.Count <= 0) - { - return -1; - } - for (int k = config.vmess.Count - 1; k >= 0; k--) - { - if (config.vmess[k].subid.Equals(subid)) - { - config.vmess.RemoveAt(k); - } - } - - ToJsonFile(config); - return 0; - } - - public static int AddformMainLvColWidth(ref Config config, string name, int width) - { - if (config.uiItem.mainLvColWidth == null) - { - config.uiItem.mainLvColWidth = new Dictionary(); - } - if (config.uiItem.mainLvColWidth.ContainsKey(name)) - { - config.uiItem.mainLvColWidth[name] = width; - } - else - { - config.uiItem.mainLvColWidth.Add(name, width); - } - return 0; - } - public static int GetformMainLvColWidth(ref Config config, string name, int width) - { - if (config.uiItem.mainLvColWidth == null) - { - config.uiItem.mainLvColWidth = new Dictionary(); - } - if (config.uiItem.mainLvColWidth.ContainsKey(name)) - { - return config.uiItem.mainLvColWidth[name]; - } - else - { - return width; - } - } - - public static int SortServers(ref Config config, EServerColName name, bool asc) - { - if (config.vmess.Count <= 0) - { - return -1; - } - switch (name) - { - case EServerColName.configType: - case EServerColName.remarks: - case EServerColName.address: - case EServerColName.port: - case EServerColName.security: - case EServerColName.network: - case EServerColName.testResult: - break; - default: - return -1; - } - string itemId = config.getItemId(); - var items = config.vmess.AsQueryable(); - - if (asc) - { - config.vmess = items.OrderBy(name.ToString()).ToList(); - } - else - { - config.vmess = items.OrderByDescending(name.ToString()).ToList(); - } - - var index_ = config.vmess.FindIndex(it => it.getItemId() == itemId); - if (index_ >= 0) - { - config.index = index_; - } - - ToJsonFile(config); - return 0; - } - - /// - /// 添加服务器或编辑 - /// - /// - /// - /// - /// - public static int AddVlessServer(ref Config config, VmessItem vmessItem, int index) - { - vmessItem.configVersion = 2; - vmessItem.configType = (int)EConfigType.VLESS; - - vmessItem.address = vmessItem.address.TrimEx(); - vmessItem.id = vmessItem.id.TrimEx(); - vmessItem.security = vmessItem.security.TrimEx(); - vmessItem.network = vmessItem.network.TrimEx(); - vmessItem.headerType = vmessItem.headerType.TrimEx(); - vmessItem.requestHost = vmessItem.requestHost.TrimEx(); - vmessItem.path = vmessItem.path.TrimEx(); - vmessItem.streamSecurity = vmessItem.streamSecurity.TrimEx(); - - if (index >= 0) - { - //修改 - config.vmess[index] = vmessItem; - if (config.index.Equals(index)) - { - Global.reloadV2ray = true; - } - } - else - { - //添加 - if (Utils.IsNullOrEmpty(vmessItem.allowInsecure)) - { - vmessItem.allowInsecure = config.defAllowInsecure.ToString(); - } - config.vmess.Add(vmessItem); - if (config.vmess.Count == 1) - { - config.index = 0; - Global.reloadV2ray = true; - } - } - - ToJsonFile(config); - - return 0; - } - - } -} diff --git a/v2rayN/Handler/DownloadHandle.cs b/v2rayN/Handler/DownloadHandle.cs deleted file mode 100644 index f74e137..0000000 --- a/v2rayN/Handler/DownloadHandle.cs +++ /dev/null @@ -1,359 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Net; -using System.Net.Http; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using v2rayN.Base; -using v2rayN.Mode; -using v2rayN.Properties; - -namespace v2rayN.Handler -{ - /// - ///Download - /// - class DownloadHandle - { - public event EventHandler AbsoluteCompleted; - - public event EventHandler UpdateCompleted; - - public event ErrorEventHandler Error; - - public string DownloadFileName - { - get - { - return "v2ray-windows.zip"; - } - } - - public class ResultEventArgs : EventArgs - { - public bool Success; - public string Msg; - - public ResultEventArgs(bool success, string msg) - { - this.Success = success; - this.Msg = msg; - } - } - - private int progressPercentage = -1; - private long totalBytesToReceive = 0; - private DateTime totalDatetime = new DateTime(); - private int DownloadTimeout = -1; - - #region Check for updates - - private readonly string nLatestUrl = Global.NUrl + "/latest"; - private const string nUrl = Global.NUrl + "/download/{0}/v2rayN.zip"; - private readonly string coreLatestUrl = "https://github.com/v2fly/v2ray-core/releases/latest"; - private const string coreUrl = "https://github.com/v2fly/v2ray-core/releases/download/{0}/v2ray-windows-{1}.zip"; - - public async void CheckUpdateAsync(string type) - { - Utils.SetSecurityProtocol(); - WebRequestHandler webRequestHandler = new WebRequestHandler - { - AllowAutoRedirect = false - }; - HttpClient httpClient = new HttpClient(webRequestHandler); - - string url; - if (type == "Core") - { - url = coreLatestUrl; - } - else if (type == "v2rayN") - { - url = nLatestUrl; - } - else - { - throw new ArgumentException("Type"); - } - HttpResponseMessage response = await httpClient.GetAsync(url); - if (response.StatusCode.ToString() == "Redirect") - { - responseHandler(type, response.Headers.Location.ToString()); - } - else - { - Utils.SaveLog("StatusCode error: " + url); - return; - } - } - - /// - /// 获取V2RayCore版本 - /// - public string getV2rayVersion() - { - try - { - string filePath = Utils.GetPath("V2ray.exe"); - if (!File.Exists(filePath)) - { - string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2fly/v2ray-core/releases"); - //ShowMsg(true, msg); - return ""; - } - - Process p = new Process(); - p.StartInfo.FileName = filePath; - p.StartInfo.Arguments = "-version"; - p.StartInfo.WorkingDirectory = Utils.StartupPath(); - p.StartInfo.UseShellExecute = false; - p.StartInfo.RedirectStandardOutput = true; - p.StartInfo.CreateNoWindow = true; - p.StartInfo.StandardOutputEncoding = Encoding.UTF8; - p.Start(); - p.WaitForExit(5000); - string echo = p.StandardOutput.ReadToEnd(); - string version = Regex.Match(echo, "V2Ray ([0-9.]+) \\(").Groups[1].Value; - return version; - } - - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - return ""; - } - } - private void responseHandler(string type, string redirectUrl) - { - try - { - string version = redirectUrl.Substring(redirectUrl.LastIndexOf("/", StringComparison.Ordinal) + 1); - - string curVersion; - string message; - string url; - if (type == "Core") - { - curVersion = "v" + getV2rayVersion(); - message = string.Format(UIRes.I18N("IsLatestCore"), curVersion); - string osBit = Environment.Is64BitProcess ? "64" : "32"; - url = string.Format(coreUrl, version, osBit); - } - else if (type == "v2rayN") - { - curVersion = FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString(); - message = string.Format(UIRes.I18N("IsLatestN"), curVersion); - url = string.Format(nUrl, version); - } - else - { - throw new ArgumentException("Type"); - } - - if (curVersion == version) - { - AbsoluteCompleted?.Invoke(this, new ResultEventArgs(false, message)); - return; - } - - AbsoluteCompleted?.Invoke(this, new ResultEventArgs(true, url)); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - - Error?.Invoke(this, new ErrorEventArgs(ex)); - } - } - - #endregion - - #region Download - - public WebClientEx DownloadFileAsync(string url, WebProxy webProxy, int downloadTimeout) - { - WebClientEx ws = new WebClientEx(); - try - { - Utils.SetSecurityProtocol(); - UpdateCompleted?.Invoke(this, new ResultEventArgs(false, UIRes.I18N("Downloading"))); - - progressPercentage = -1; - totalBytesToReceive = 0; - - //WebClientEx ws = new WebClientEx(); - DownloadTimeout = downloadTimeout; - if (webProxy != null) - { - ws.Proxy = webProxy;// new WebProxy(Global.Loopback, Global.httpPort); - } - - ws.DownloadFileCompleted += ws_DownloadFileCompleted; - ws.DownloadProgressChanged += ws_DownloadProgressChanged; - ws.DownloadFileAsync(new Uri(url), Utils.GetPath(DownloadFileName)); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - - Error?.Invoke(this, new ErrorEventArgs(ex)); - } - return ws; - } - - void ws_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) - { - if (UpdateCompleted != null) - { - if (totalBytesToReceive == 0) - { - totalDatetime = DateTime.Now; - totalBytesToReceive = e.BytesReceived; - return; - } - totalBytesToReceive = e.BytesReceived; - - if (DownloadTimeout != -1) - { - if ((DateTime.Now - totalDatetime).TotalSeconds > DownloadTimeout) - { - ((WebClientEx)sender).CancelAsync(); - } - } - if (progressPercentage != e.ProgressPercentage && e.ProgressPercentage % 10 == 0) - { - progressPercentage = e.ProgressPercentage; - string msg = string.Format("...{0}%", e.ProgressPercentage); - UpdateCompleted(this, new ResultEventArgs(false, msg)); - } - } - } - void ws_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) - { - try - { - if (UpdateCompleted != null) - { - if (e.Cancelled) - { - ((WebClientEx)sender).Dispose(); - TimeSpan ts = (DateTime.Now - totalDatetime); - string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.##")); - UpdateCompleted(this, new ResultEventArgs(true, speed)); - return; - } - - if (e.Error == null - || Utils.IsNullOrEmpty(e.Error.ToString())) - { - - TimeSpan ts = (DateTime.Now - totalDatetime); - string speed = string.Format("{0} M/s", (totalBytesToReceive / ts.TotalMilliseconds / 1000).ToString("#0.##")); - UpdateCompleted(this, new ResultEventArgs(true, speed)); - } - else - { - throw e.Error; - } - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - - Error?.Invoke(this, new ErrorEventArgs(ex)); - } - } - - /// - /// DownloadString - /// - /// - public void WebDownloadString(string url) - { - string source = string.Empty; - try - { - Utils.SetSecurityProtocol(); - - WebClientEx ws = new WebClientEx(); - ws.DownloadStringCompleted += Ws_DownloadStringCompleted; - ws.DownloadStringAsync(new Uri(url)); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - private void Ws_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) - { - try - { - if (e.Error == null - || Utils.IsNullOrEmpty(e.Error.ToString())) - { - string source = e.Result; - UpdateCompleted?.Invoke(this, new ResultEventArgs(true, source)); - } - else - { - throw e.Error; - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - - Error?.Invoke(this, new ErrorEventArgs(ex)); - } - } - - #endregion - - #region PAC - - public string GenPacFile(string result) - { - try - { - File.WriteAllText(Utils.GetTempPath("gfwlist.txt"), result, Encoding.UTF8); - List lines = ParsePacResult(result); - string abpContent = Utils.UnGzip(Resources.abp_js); - abpContent = abpContent.Replace("__RULES__", JsonConvert.SerializeObject(lines, Formatting.Indented)); - File.WriteAllText(Utils.GetPath(Global.pacFILE), abpContent, Encoding.UTF8); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - return ex.Message; - } - return string.Empty; - } - - private List ParsePacResult(string response) - { - IEnumerable IgnoredLineBegins = new[] { '!', '[' }; - - byte[] bytes = Convert.FromBase64String(response); - string content = Encoding.UTF8.GetString(bytes); - List valid_lines = new List(); - using (StringReader sr = new StringReader(content)) - { - foreach (string line in sr.NonWhiteSpaceLines()) - { - if (line.BeginWithAny(IgnoredLineBegins)) - continue; - valid_lines.Add(line); - } - } - return valid_lines; - } - - #endregion - } -} diff --git a/v2rayN/Handler/MainFormHandler.cs b/v2rayN/Handler/MainFormHandler.cs deleted file mode 100644 index 419ba37..0000000 --- a/v2rayN/Handler/MainFormHandler.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System; -using System.Drawing; -using System.Windows.Forms; -using v2rayN.Mode; - -namespace v2rayN.Handler -{ - class MainFormHandler - { - private static MainFormHandler instance; - - //private DownloadHandle downloadHandle2; - //private Config _config; - //private V2rayHandler _v2rayHandler; - //private List _selecteds; - //private Thread _workThread; - //Action _updateFunc; - public static MainFormHandler Instance - { - get - { - if (instance == null) - { - instance = new MainFormHandler(); - } - return instance; - } - } - - public Icon GetNotifyIcon(Config config, Icon def) - { - try - { - Color color = ColorTranslator.FromHtml("#3399CC"); - int index = (int)config.listenerType; - if (index > 0) - { - color = (new Color[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1]; - //color = ColorTranslator.FromHtml(new string[] { "#CC0066", "#CC6600", "#99CC99", "#666699" }[index - 1]); - } - - int width = 128; - int height = 128; - - Bitmap bitmap = new Bitmap(width, height); - Graphics graphics = Graphics.FromImage(bitmap); - SolidBrush drawBrush = new SolidBrush(color); - - graphics.FillEllipse(drawBrush, new Rectangle(0, 0, width, height)); - int zoom = 16; - graphics.DrawImage(new Bitmap(Properties.Resources.notify, width - zoom, width - zoom), zoom / 2, zoom / 2); - - Icon createdIcon = Icon.FromHandle(bitmap.GetHicon()); - - drawBrush.Dispose(); - graphics.Dispose(); - bitmap.Dispose(); - - return createdIcon; - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - return def; - } - } - - public void Export2ClientConfig(int index, Config config) - { - //int index = GetLvSelectedIndex(); - if (index < 0) - { - return; - } - if (config.vmess[index].configType != (int)EConfigType.Vmess - && config.vmess[index].configType != (int)EConfigType.VLESS) - { - UI.Show(UIRes.I18N("NonVmessService")); - return; - } - - SaveFileDialog fileDialog = new SaveFileDialog - { - Filter = "Config|*.json", - FilterIndex = 2, - RestoreDirectory = true - }; - if (fileDialog.ShowDialog() != DialogResult.OK) - { - return; - } - string fileName = fileDialog.FileName; - if (Utils.IsNullOrEmpty(fileName)) - { - return; - } - Config configCopy = Utils.DeepCopy(config); - configCopy.index = index; - if (V2rayConfigHandler.Export2ClientConfig(configCopy, fileName, out string msg) != 0) - { - UI.Show(msg); - } - else - { - UI.ShowWarning(string.Format(UIRes.I18N("SaveClientConfigurationIn"), fileName)); - } - } - - public void Export2ServerConfig(int index, Config config) - { - //int index = GetLvSelectedIndex(); - if (index < 0) - { - return; - } - if (config.vmess[index].configType != (int)EConfigType.Vmess - && config.vmess[index].configType != (int)EConfigType.VLESS) - { - UI.Show(UIRes.I18N("NonVmessService")); - return; - } - - SaveFileDialog fileDialog = new SaveFileDialog - { - Filter = "Config|*.json", - FilterIndex = 2, - RestoreDirectory = true - }; - if (fileDialog.ShowDialog() != DialogResult.OK) - { - return; - } - string fileName = fileDialog.FileName; - if (Utils.IsNullOrEmpty(fileName)) - { - return; - } - Config configCopy = Utils.DeepCopy(config); - configCopy.index = index; - if (V2rayConfigHandler.Export2ServerConfig(configCopy, fileName, out string msg) != 0) - { - UI.Show(msg); - } - else - { - UI.ShowWarning(string.Format(UIRes.I18N("SaveServerConfigurationIn"), fileName)); - } - } - - - } -} diff --git a/v2rayN/Handler/QRCodeHelper.cs b/v2rayN/Handler/QRCodeHelper.cs deleted file mode 100644 index 2fc5695..0000000 --- a/v2rayN/Handler/QRCodeHelper.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Drawing; -using ZXing; -using ZXing.QrCode; - -namespace v2rayN.Handler -{ - /// - /// 含有QR码的描述类和包装编码和渲染 - /// - public class QRCodeHelper - { - public static Image GetQRCode(string strContent) - { - Image img = null; - try - { - QrCodeEncodingOptions options = new QrCodeEncodingOptions - { - CharacterSet = "UTF-8", - DisableECI = true, // Extended Channel Interpretation (ECI) 主要用于特殊的字符集。并不是所有的扫描器都支持这种编码。 - ErrorCorrection = ZXing.QrCode.Internal.ErrorCorrectionLevel.M, // 纠错级别 - Width = 500, - Height = 500, - Margin = 1 - }; - // options.Hints,更多属性,也可以在这里添加。 - - BarcodeWriter writer = new BarcodeWriter - { - Format = BarcodeFormat.QR_CODE, - Options = options - }; - Bitmap bmp = writer.Write(strContent); - img = (Image)bmp; - return img; - } - catch - { - return img; - } - } - } -} diff --git a/v2rayN/Handler/SpeedtestHandler.cs b/v2rayN/Handler/SpeedtestHandler.cs deleted file mode 100644 index 9152309..0000000 --- a/v2rayN/Handler/SpeedtestHandler.cs +++ /dev/null @@ -1,295 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Net; -using System.Net.Sockets; -using System.Threading; -using System.Threading.Tasks; -using v2rayN.Mode; - -namespace v2rayN.Handler -{ - class SpeedtestHandler - { - private Config _config; - private V2rayHandler _v2rayHandler; - private List _selecteds; - Action _updateFunc; - - - public SpeedtestHandler(ref Config config, ref V2rayHandler v2rayHandler, List selecteds, string actionType, Action update) - { - _config = config; - _v2rayHandler = v2rayHandler; - _selecteds = Utils.DeepCopy(selecteds); - _updateFunc = update; - - if (actionType == "ping") - { - Task.Run(() => RunPing()); - } - if (actionType == "tcping") - { - Task.Run(() => RunTcping()); - } - else if (actionType == "realping") - { - Task.Run(() => RunRealPing()); - } - else if (actionType == "speedtest") - { - Task.Run(() => RunSpeedTest()); - } - } - - private void RunPingSub(Action updateFun) - { - try - { - foreach (int index in _selecteds) - { - if (_config.vmess[index].configType == (int)EConfigType.Custom) - { - continue; - } - try - { - updateFun(index); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - Thread.Sleep(10); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - - private void RunPing() - { - RunPingSub((int index) => - { - long time = Utils.Ping(_config.vmess[index].address); - _updateFunc(index, FormatOut(time, "ms")); - }); - } - - private void RunTcping() - { - RunPingSub((int index) => - { - int time = GetTcpingTime(_config.vmess[index].address, _config.vmess[index].port); - _updateFunc(index, FormatOut(time, "ms")); - }); - } - - private void RunRealPing() - { - int pid = -1; - try - { - string msg = string.Empty; - - pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds); - - //Thread.Sleep(5000); - int httpPort = _config.GetLocalPort("speedtest"); - List tasks = new List(); - foreach (int itemIndex in _selecteds) - { - if (_config.vmess[itemIndex].configType == (int)EConfigType.Custom) - { - continue; - } - tasks.Add(Task.Run(() => - { - try - { - WebProxy webProxy = new WebProxy(Global.Loopback, httpPort + itemIndex); - int responseTime = -1; - string status = GetRealPingTime(_config.speedPingTestUrl, webProxy, out responseTime); - string output = Utils.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : FormatOut(status, ""); - _updateFunc(itemIndex, output); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - })); - //Thread.Sleep(100); - } - Task.WaitAll(tasks.ToArray()); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - finally - { - if (pid > 0) _v2rayHandler.V2rayStopPid(pid); - } - } - - public int RunAvailabilityCheck() // alias: isLive - { - try - { - int httpPort = _config.GetLocalPort(Global.InboundHttp); - - Task t = Task.Run(() => - { - try - { - WebProxy webProxy = new WebProxy(Global.Loopback, httpPort); - int responseTime = -1; - string status = GetRealPingTime(Global.AvailabilityTestUrl, webProxy, out responseTime); - bool noError = Utils.IsNullOrEmpty(status); - return noError ? responseTime : -1; - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - return -1; - } - }); - return t.Result; - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - return -1; - } - } - - private void RunSpeedTest() - { - int testCounter = 0; - int pid = -1; - - if (_config.vmess.Count <= 0) - { - return; - } - - pid = _v2rayHandler.LoadV2rayConfigString(_config, _selecteds); - - string url = _config.speedTestUrl; - DownloadHandle downloadHandle2 = new DownloadHandle(); - downloadHandle2.UpdateCompleted += (sender2, args) => - { - _updateFunc(testCounter, args.Msg); - }; - downloadHandle2.Error += (sender2, args) => - { - _updateFunc(testCounter, args.GetException().Message); - }; - - var timeout = 10; - foreach (int itemIndex in _selecteds) - { - if (itemIndex >= _config.vmess.Count) - { - break; - } - - if (_config.vmess[itemIndex].configType == (int)EConfigType.Custom) - { - continue; - } - testCounter = itemIndex; - int httpPort = _config.GetLocalPort("speedtest"); - - WebProxy webProxy = new WebProxy(Global.Loopback, httpPort + itemIndex); - var ws = downloadHandle2.DownloadFileAsync(url, webProxy, timeout - 2); - - Thread.Sleep(1000 * timeout); - - ws.CancelAsync(); - - Thread.Sleep(1000 * 2); - } - if (pid > 0) _v2rayHandler.V2rayStopPid(pid); - } - - - private int GetTcpingTime(string url, int port) - { - int responseTime = -1; - - try - { - if (!IPAddress.TryParse(url, out IPAddress ipAddress)) - { - IPHostEntry ipHostInfo = System.Net.Dns.GetHostEntry(url); - ipAddress = ipHostInfo.AddressList[0]; - } - - Stopwatch timer = new Stopwatch(); - timer.Start(); - - IPEndPoint endPoint = new IPEndPoint(ipAddress, port); - Socket clientSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); - - IAsyncResult result = clientSocket.BeginConnect(endPoint, null, null); - if (!result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5))) - throw new TimeoutException("connect timeout (5s): " + url); - clientSocket.EndConnect(result); - - timer.Stop(); - responseTime = timer.Elapsed.Milliseconds; - clientSocket.Close(); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - return responseTime; - } - - private string GetRealPingTime(string url, WebProxy webProxy, out int responseTime) - { - string msg = string.Empty; - responseTime = -1; - try - { - HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); - myHttpWebRequest.Timeout = 5000; - myHttpWebRequest.Proxy = webProxy;//new WebProxy(Global.Loopback, Global.httpPort); - - Stopwatch timer = new Stopwatch(); - timer.Start(); - - HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); - if (myHttpWebResponse.StatusCode != HttpStatusCode.OK - && myHttpWebResponse.StatusCode != HttpStatusCode.NoContent) - { - msg = myHttpWebResponse.StatusDescription; - } - timer.Stop(); - responseTime = timer.Elapsed.Milliseconds; - - myHttpWebResponse.Close(); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - msg = ex.Message; - } - return msg; - } - private string FormatOut(object time, string unit) - { - if (time.ToString().Equals("-1")) - { - return "Timeout"; - } - return string.Format("{0}{1}", time, unit).PadLeft(6, ' '); - } - } -} diff --git a/v2rayN/Handler/StatisticsHandler.cs b/v2rayN/Handler/StatisticsHandler.cs deleted file mode 100644 index ab4d4a6..0000000 --- a/v2rayN/Handler/StatisticsHandler.cs +++ /dev/null @@ -1,278 +0,0 @@ -using Grpc.Core; -using System; -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -using System.Threading; -using System.Threading.Tasks; -using v2rayN.Mode; -using v2rayN.Protos.Statistics; - -namespace v2rayN.Handler -{ - class StatisticsHandler - { - private Mode.Config config_; - private ServerStatistics serverStatistics_; - private Channel channel_; - private StatsService.StatsServiceClient client_; - private bool exitFlag_; - - Action> updateFunc_; - - public bool Enable - { - get; set; - } - - public bool UpdateUI - { - get; set; - } - - public List Statistic - { - get - { - return serverStatistics_.server; - } - } - - public StatisticsHandler(Mode.Config config, Action> update) - { - //try - //{ - // if (Environment.Is64BitOperatingSystem) - // { - // FileManager.UncompressFile(Utils.GetPath("grpc_csharp_ext.x64.dll"), Resources.grpc_csharp_ext_x64_dll); - // } - // else - // { - // FileManager.UncompressFile(Utils.GetPath("grpc_csharp_ext.x86.dll"), Resources.grpc_csharp_ext_x86_dll); - // } - //} - //catch (IOException ex) - //{ - // Utils.SaveLog(ex.Message, ex); - - //} - - config_ = config; - Enable = config.enableStatistics; - UpdateUI = false; - updateFunc_ = update; - exitFlag_ = false; - - LoadFromFile(); - - GrpcInit(); - - Task.Run(() => Run()); - } - - private void GrpcInit() - { - if (channel_ == null) - { - Global.statePort = GetFreePort(); - - channel_ = new Channel($"{Global.Loopback}:{Global.statePort}", ChannelCredentials.Insecure); - channel_.ConnectAsync(); - client_ = new StatsService.StatsServiceClient(channel_); - } - } - - public void Close() - { - try - { - exitFlag_ = true; - channel_.ShutdownAsync(); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - public void Run() - { - while (!exitFlag_) - { - try - { - if (Enable && channel_.State == ChannelState.Ready) - { - QueryStatsResponse res = null; - try - { - res = client_.QueryStats(new QueryStatsRequest() { Pattern = "", Reset = true }); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - - if (res != null) - { - string itemId = config_.getItemId(); - ServerStatItem serverStatItem = GetServerStatItem(itemId); - - //TODO: parse output - ParseOutput(res.Stat, out ulong up, out ulong down); - - serverStatItem.todayUp += up; - serverStatItem.todayDown += down; - serverStatItem.totalUp += up; - serverStatItem.totalDown += down; - - if (UpdateUI) - { - updateFunc_(up, down, new List { serverStatItem }); - } - } - } - Thread.Sleep(config_.statisticsFreshRate); - channel_.ConnectAsync(); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - } - - public void LoadFromFile() - { - try - { - string result = Utils.LoadResource(Utils.GetPath(Global.StatisticLogOverall)); - if (!Utils.IsNullOrEmpty(result)) - { - //转成Json - serverStatistics_ = Utils.FromJson(result); - } - - if (serverStatistics_ == null) - { - serverStatistics_ = new ServerStatistics(); - } - if (serverStatistics_.server == null) - { - serverStatistics_.server = new List(); - } - - long ticks = DateTime.Now.Date.Ticks; - foreach (ServerStatItem item in serverStatistics_.server) - { - if (item.dateNow != ticks) - { - item.todayUp = 0; - item.todayDown = 0; - item.dateNow = ticks; - } - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - public void SaveToFile() - { - try - { - Utils.ToJsonFile(serverStatistics_, Utils.GetPath(Global.StatisticLogOverall)); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - private ServerStatItem GetServerStatItem(string itemId) - { - long ticks = DateTime.Now.Date.Ticks; - int cur = Statistic.FindIndex(item => item.itemId == itemId); - if (cur < 0) - { - Statistic.Add(new ServerStatItem - { - itemId = itemId, - totalUp = 0, - totalDown = 0, - todayUp = 0, - todayDown = 0, - dateNow = ticks - }); - cur = Statistic.Count - 1; - } - if (Statistic[cur].dateNow != ticks) - { - Statistic[cur].todayUp = 0; - Statistic[cur].todayDown = 0; - Statistic[cur].dateNow = ticks; - } - return Statistic[cur]; - } - - private void ParseOutput(Google.Protobuf.Collections.RepeatedField source, out ulong up, out ulong down) - { - - up = 0; down = 0; - try - { - - foreach (Stat stat in source) - { - string name = stat.Name; - long value = stat.Value; - string[] nStr = name.Split(">>>".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); - string type = ""; - - name = name.Trim(); - - name = nStr[1]; - type = nStr[3]; - - if (name == Global.agentTag) - { - if (type == "uplink") - { - up = (ulong)value; - } - else if (type == "downlink") - { - down = (ulong)value; - } - } - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - private int GetFreePort() - { - int defaultPort = 28123; - try - { - // TCP stack please do me a favor - TcpListener l = new TcpListener(IPAddress.Loopback, 0); - l.Start(); - int port = ((IPEndPoint)l.LocalEndpoint).Port; - l.Stop(); - return port; - } - catch (Exception ex) - { - // in case access denied - Utils.SaveLog(ex.Message, ex); - return defaultPort; - } - } - } -} diff --git a/v2rayN/Handler/V2rayConfigHandler.cs b/v2rayN/Handler/V2rayConfigHandler.cs deleted file mode 100644 index b02ea32..0000000 --- a/v2rayN/Handler/V2rayConfigHandler.cs +++ /dev/null @@ -1,1795 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.IO; -using System.Linq; -using System.Net; -using System.Text; -using System.Text.RegularExpressions; -using System.Web; -using v2rayN.Base; -using v2rayN.Mode; - -namespace v2rayN.Handler -{ - /// - /// v2ray配置文件处理类 - /// - class V2rayConfigHandler - { - private static string SampleClient = Global.v2raySampleClient; - private static string SampleServer = Global.v2raySampleServer; - - #region 生成客户端配置 - - /// - /// 生成v2ray的客户端配置文件 - /// - /// - /// - /// - /// - public static int GenerateClientConfig(Config config, string fileName, bool blExport, out string msg) - { - try - { - //检查GUI设置 - if (config == null - || config.index < 0 - || config.vmess.Count <= 0 - || config.index > config.vmess.Count - 1 - ) - { - msg = UIRes.I18N("CheckServerSettings"); - return -1; - } - - msg = UIRes.I18N("InitialConfiguration"); - if (config.configType() == (int)EConfigType.Custom) - { - return GenerateClientCustomConfig(config, fileName, out msg); - } - - //取得默认配置 - string result = Utils.GetEmbedText(SampleClient); - if (Utils.IsNullOrEmpty(result)) - { - msg = UIRes.I18N("FailedGetDefaultConfiguration"); - return -1; - } - - //转成Json - V2rayConfig v2rayConfig = Utils.FromJson(result); - if (v2rayConfig == null) - { - msg = UIRes.I18N("FailedGenDefaultConfiguration"); - return -1; - } - - //开始修改配置 - log(config, ref v2rayConfig, blExport); - - //本地端口 - inbound(config, ref v2rayConfig); - - //路由 - routing(config, ref v2rayConfig); - - //outbound - outbound(config, ref v2rayConfig); - - //dns - dns(config, ref v2rayConfig); - - // TODO: 统计配置 - statistic(config, ref v2rayConfig); - - Utils.ToJsonFile(v2rayConfig, fileName, false); - - msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary()); - } - catch - { - msg = UIRes.I18N("FailedGenDefaultConfiguration"); - return -1; - } - return 0; - } - - /// - /// 日志 - /// - /// - /// - /// - private static int log(Config config, ref V2rayConfig v2rayConfig, bool blExport) - { - try - { - if (blExport) - { - if (config.logEnabled) - { - v2rayConfig.log.loglevel = config.loglevel; - } - else - { - v2rayConfig.log.loglevel = config.loglevel; - v2rayConfig.log.access = ""; - v2rayConfig.log.error = ""; - } - } - else - { - if (config.logEnabled) - { - v2rayConfig.log.loglevel = config.loglevel; - v2rayConfig.log.access = Utils.GetPath(v2rayConfig.log.access); - v2rayConfig.log.error = Utils.GetPath(v2rayConfig.log.error); - } - else - { - v2rayConfig.log.loglevel = config.loglevel; - v2rayConfig.log.access = ""; - v2rayConfig.log.error = ""; - } - } - } - catch - { - } - return 0; - } - - /// - /// 本地端口 - /// - /// - /// - /// - private static int inbound(Config config, ref V2rayConfig v2rayConfig) - { - try - { - Inbounds inbound = v2rayConfig.inbounds[0]; - //端口 - inbound.port = config.inbound[0].localPort; - inbound.protocol = config.inbound[0].protocol; - if (config.allowLANConn) - { - inbound.listen = "0.0.0.0"; - } - else - { - inbound.listen = Global.Loopback; - } - //开启udp - inbound.settings.udp = config.inbound[0].udpEnabled; - inbound.sniffing.enabled = config.inbound[0].sniffingEnabled; - } - catch - { - } - return 0; - } - - /// - /// 路由 - /// - /// - /// - /// - private static int routing(Config config, ref V2rayConfig v2rayConfig) - { - try - { - if (v2rayConfig.routing != null - && v2rayConfig.routing.rules != null) - { - v2rayConfig.routing.domainStrategy = config.domainStrategy; - - //自定义 - //需代理 - routingUserRule(config.useragent, Global.agentTag, ref v2rayConfig); - //直连 - routingUserRule(config.userdirect, Global.directTag, ref v2rayConfig); - //阻止 - routingUserRule(config.userblock, Global.blockTag, ref v2rayConfig); - - - switch (config.routingMode) - { - case "0": - break; - case "1": - routingGeo("ip", "private", Global.directTag, ref v2rayConfig); - break; - case "2": - routingGeo("", "cn", Global.directTag, ref v2rayConfig); - break; - case "3": - routingGeo("ip", "private", Global.directTag, ref v2rayConfig); - routingGeo("", "cn", Global.directTag, ref v2rayConfig); - break; - } - - } - } - catch - { - } - return 0; - } - private static int routingUserRule(List userRule, string tag, ref V2rayConfig v2rayConfig) - { - try - { - if (userRule != null - && userRule.Count > 0) - { - //Domain - RulesItem rulesDomain = new RulesItem - { - type = "field", - outboundTag = tag, - domain = new List() - }; - - //IP - RulesItem rulesIP = new RulesItem - { - type = "field", - outboundTag = tag, - ip = new List() - }; - - foreach (string u in userRule) - { - string url = u.TrimEx(); - if (Utils.IsNullOrEmpty(url)) - { - continue; - } - if (Utils.IsIP(url) || url.StartsWith("geoip:")) - { - rulesIP.ip.Add(url); - } - else if (Utils.IsDomain(url) - || url.StartsWith("geosite:") - || url.StartsWith("regexp:") - || url.StartsWith("domain:") - || url.StartsWith("full:")) - { - rulesDomain.domain.Add(url); - } - } - if (rulesDomain.domain.Count > 0) - { - v2rayConfig.routing.rules.Add(rulesDomain); - } - if (rulesIP.ip.Count > 0) - { - v2rayConfig.routing.rules.Add(rulesIP); - } - } - } - catch - { - } - return 0; - } - - - private static int routingGeo(string ipOrDomain, string code, string tag, ref V2rayConfig v2rayConfig) - { - try - { - if (!Utils.IsNullOrEmpty(code)) - { - //IP - if (ipOrDomain == "ip" || ipOrDomain == "") - { - RulesItem rulesItem = new RulesItem - { - type = "field", - outboundTag = Global.directTag, - ip = new List() - }; - rulesItem.ip.Add($"geoip:{code}"); - - v2rayConfig.routing.rules.Add(rulesItem); - } - - if (ipOrDomain == "domain" || ipOrDomain == "") - { - RulesItem rulesItem = new RulesItem - { - type = "field", - outboundTag = Global.directTag, - domain = new List() - }; - rulesItem.domain.Add($"geosite:{code}"); - v2rayConfig.routing.rules.Add(rulesItem); - } - } - } - catch - { - } - return 0; - } - - /// - /// vmess协议服务器配置 - /// - /// - /// - /// - private static int outbound(Config config, ref V2rayConfig v2rayConfig) - { - try - { - Outbounds outbound = v2rayConfig.outbounds[0]; - if (config.configType() == (int)EConfigType.Vmess) - { - VnextItem vnextItem; - if (outbound.settings.vnext.Count <= 0) - { - vnextItem = new VnextItem(); - outbound.settings.vnext.Add(vnextItem); - } - else - { - vnextItem = outbound.settings.vnext[0]; - } - //远程服务器地址和端口 - vnextItem.address = config.address(); - vnextItem.port = config.port(); - - UsersItem usersItem; - if (vnextItem.users.Count <= 0) - { - usersItem = new UsersItem(); - vnextItem.users.Add(usersItem); - } - else - { - usersItem = vnextItem.users[0]; - } - //远程服务器用户ID - usersItem.id = config.id(); - usersItem.alterId = config.alterId(); - usersItem.email = Global.userEMail; - usersItem.security = config.security(); - - //Mux - outbound.mux.enabled = config.muxEnabled; - outbound.mux.concurrency = config.muxEnabled ? 8 : -1; - - //远程服务器底层传输配置 - StreamSettings streamSettings = outbound.streamSettings; - boundStreamSettings(config, "out", ref streamSettings); - - outbound.protocol = Global.vmessProtocolLite; - outbound.settings.servers = null; - } - else if (config.configType() == (int)EConfigType.Shadowsocks) - { - ServersItem serversItem; - if (outbound.settings.servers.Count <= 0) - { - serversItem = new ServersItem(); - outbound.settings.servers.Add(serversItem); - } - else - { - serversItem = outbound.settings.servers[0]; - } - //远程服务器地址和端口 - serversItem.address = config.address(); - serversItem.port = config.port(); - serversItem.password = config.id(); - serversItem.method = config.security(); - - serversItem.ota = false; - serversItem.level = 1; - - outbound.mux.enabled = false; - outbound.mux.concurrency = -1; - - - outbound.protocol = Global.ssProtocolLite; - outbound.settings.vnext = null; - } - else if (config.configType() == (int)EConfigType.Socks) - { - ServersItem serversItem; - if (outbound.settings.servers.Count <= 0) - { - serversItem = new ServersItem(); - outbound.settings.servers.Add(serversItem); - } - else - { - serversItem = outbound.settings.servers[0]; - } - //远程服务器地址和端口 - serversItem.address = config.address(); - serversItem.port = config.port(); - serversItem.method = null; - serversItem.password = null; - - if (!Utils.IsNullOrEmpty(config.security()) - && !Utils.IsNullOrEmpty(config.id())) - { - SocksUsersItem socksUsersItem = new SocksUsersItem - { - user = config.security(), - pass = config.id(), - level = 1 - }; - - serversItem.users = new List() { socksUsersItem }; - } - - outbound.mux.enabled = false; - outbound.mux.concurrency = -1; - - outbound.protocol = Global.socksProtocolLite; - outbound.settings.vnext = null; - } - else if (config.configType() == (int)EConfigType.VLESS) - { - VnextItem vnextItem; - if (outbound.settings.vnext.Count <= 0) - { - vnextItem = new VnextItem(); - outbound.settings.vnext.Add(vnextItem); - } - else - { - vnextItem = outbound.settings.vnext[0]; - } - //远程服务器地址和端口 - vnextItem.address = config.address(); - vnextItem.port = config.port(); - - UsersItem usersItem; - if (vnextItem.users.Count <= 0) - { - usersItem = new UsersItem(); - vnextItem.users.Add(usersItem); - } - else - { - usersItem = vnextItem.users[0]; - } - //远程服务器用户ID - usersItem.id = config.id(); - usersItem.alterId = 0; - usersItem.flow = string.Empty; - usersItem.email = Global.userEMail; - usersItem.encryption = config.security(); - - //Mux - outbound.mux.enabled = config.muxEnabled; - outbound.mux.concurrency = config.muxEnabled ? 8 : -1; - - //远程服务器底层传输配置 - StreamSettings streamSettings = outbound.streamSettings; - boundStreamSettings(config, "out", ref streamSettings); - - //if xtls - if (config.streamSecurity() == Global.StreamSecurityX) - { - if (Utils.IsNullOrEmpty(config.flow())) - { - usersItem.flow = "xtls-rprx-origin"; - } - else - { - usersItem.flow = config.flow(); - } - - outbound.mux.enabled = false; - outbound.mux.concurrency = -1; - } - - outbound.protocol = Global.vlessProtocolLite; - outbound.settings.servers = null; - } - else if (config.configType() == (int)EConfigType.Trojan) - { - ServersItem serversItem; - if (outbound.settings.servers.Count <= 0) - { - serversItem = new ServersItem(); - outbound.settings.servers.Add(serversItem); - } - else - { - serversItem = outbound.settings.servers[0]; - } - //远程服务器地址和端口 - serversItem.address = config.address(); - serversItem.port = config.port(); - serversItem.password = config.id(); - - serversItem.ota = false; - serversItem.level = 1; - - outbound.mux.enabled = false; - outbound.mux.concurrency = -1; - - - //远程服务器底层传输配置 - StreamSettings streamSettings = outbound.streamSettings; - boundStreamSettings(config, "out", ref streamSettings); - - outbound.protocol = Global.trojanProtocolLite; - outbound.settings.vnext = null; - } - } - catch - { - } - return 0; - } - - /// - /// vmess协议远程服务器底层传输配置 - /// - /// - /// - /// - /// - private static int boundStreamSettings(Config config, string iobound, ref StreamSettings streamSettings) - { - try - { - //远程服务器底层传输配置 - streamSettings.network = config.network(); - string host = config.requestHost(); - //if tls - if (config.streamSecurity() == Global.StreamSecurity) - { - streamSettings.security = config.streamSecurity(); - - TlsSettings tlsSettings = new TlsSettings - { - allowInsecure = config.allowInsecure() - }; - if (!string.IsNullOrWhiteSpace(host)) - { - tlsSettings.serverName = Utils.String2List(host)[0]; - } - streamSettings.tlsSettings = tlsSettings; - } - - //if xtls - if (config.streamSecurity() == Global.StreamSecurityX) - { - streamSettings.security = config.streamSecurity(); - - TlsSettings xtlsSettings = new TlsSettings - { - allowInsecure = config.allowInsecure() - }; - if (!string.IsNullOrWhiteSpace(host)) - { - xtlsSettings.serverName = Utils.String2List(host)[0]; - } - streamSettings.xtlsSettings = xtlsSettings; - } - - //streamSettings - switch (config.network()) - { - //kcp基本配置暂时是默认值,用户能自己设置伪装类型 - case "kcp": - KcpSettings kcpSettings = new KcpSettings - { - mtu = config.kcpItem.mtu, - tti = config.kcpItem.tti - }; - if (iobound.Equals("out")) - { - kcpSettings.uplinkCapacity = config.kcpItem.uplinkCapacity; - kcpSettings.downlinkCapacity = config.kcpItem.downlinkCapacity; - } - else if (iobound.Equals("in")) - { - kcpSettings.uplinkCapacity = config.kcpItem.downlinkCapacity; ; - kcpSettings.downlinkCapacity = config.kcpItem.downlinkCapacity; - } - else - { - kcpSettings.uplinkCapacity = config.kcpItem.uplinkCapacity; - kcpSettings.downlinkCapacity = config.kcpItem.downlinkCapacity; - } - - kcpSettings.congestion = config.kcpItem.congestion; - kcpSettings.readBufferSize = config.kcpItem.readBufferSize; - kcpSettings.writeBufferSize = config.kcpItem.writeBufferSize; - kcpSettings.header = new Header - { - type = config.headerType() - }; - if (!Utils.IsNullOrEmpty(config.path())) - { - kcpSettings.seed = config.path(); - } - streamSettings.kcpSettings = kcpSettings; - break; - //ws - case "ws": - WsSettings wsSettings = new WsSettings - { - }; - - string path = config.path(); - if (!string.IsNullOrWhiteSpace(host)) - { - wsSettings.headers = new Headers - { - Host = host - }; - } - if (!string.IsNullOrWhiteSpace(path)) - { - wsSettings.path = path; - } - streamSettings.wsSettings = wsSettings; - - //TlsSettings tlsSettings = new TlsSettings(); - //tlsSettings.allowInsecure = config.allowInsecure(); - //if (!string.IsNullOrWhiteSpace(host)) - //{ - // tlsSettings.serverName = host; - //} - //streamSettings.tlsSettings = tlsSettings; - break; - //h2 - case "h2": - HttpSettings httpSettings = new HttpSettings(); - - if (!string.IsNullOrWhiteSpace(host)) - { - httpSettings.host = Utils.String2List(host); - } - httpSettings.path = config.path(); - - streamSettings.httpSettings = httpSettings; - - //TlsSettings tlsSettings2 = new TlsSettings(); - //tlsSettings2.allowInsecure = config.allowInsecure(); - //streamSettings.tlsSettings = tlsSettings2; - break; - //quic - case "quic": - QuicSettings quicsettings = new QuicSettings - { - security = host, - key = config.path(), - header = new Header - { - type = config.headerType() - } - }; - streamSettings.quicSettings = quicsettings; - if (config.streamSecurity() == Global.StreamSecurity) - { - streamSettings.tlsSettings.serverName = config.address(); - } - break; - default: - //tcp带http伪装 - if (config.headerType().Equals(Global.TcpHeaderHttp)) - { - TcpSettings tcpSettings = new TcpSettings - { - header = new Header - { - type = config.headerType() - } - }; - - if (iobound.Equals("out")) - { - //request填入自定义Host - string request = Utils.GetEmbedText(Global.v2raySampleHttprequestFileName); - string[] arrHost = host.Split(','); - string host2 = string.Join("\",\"", arrHost); - request = request.Replace("$requestHost$", string.Format("\"{0}\"", host2)); - //request = request.Replace("$requestHost$", string.Format("\"{0}\"", config.requestHost())); - - //填入自定义Path - string pathHttp = @"/"; - if (!Utils.IsNullOrEmpty(config.path())) - { - string[] arrPath = config.path().Split(','); - pathHttp = string.Join("\",\"", arrPath); - } - request = request.Replace("$requestPath$", string.Format("\"{0}\"", pathHttp)); - tcpSettings.header.request = Utils.FromJson(request); - } - else if (iobound.Equals("in")) - { - //string response = Utils.GetEmbedText(Global.v2raySampleHttpresponseFileName); - //tcpSettings.header.response = Utils.FromJson(response); - } - - streamSettings.tcpSettings = tcpSettings; - } - break; - } - } - catch - { - } - return 0; - } - - /// - /// remoteDNS - /// - /// - /// - /// - private static int dns(Config config, ref V2rayConfig v2rayConfig) - { - try - { - if (string.IsNullOrWhiteSpace(config.remoteDNS)) - { - return 0; - } - List servers = new List(); - - string[] arrDNS = config.remoteDNS.Split(','); - foreach (string str in arrDNS) - { - //if (Utils.IsIP(str)) - //{ - servers.Add(str); - //} - } - //servers.Add("localhost"); - v2rayConfig.dns = new Mode.Dns - { - servers = servers - }; - } - catch - { - } - return 0; - } - - public static int statistic(Config config, ref V2rayConfig v2rayConfig) - { - if (config.enableStatistics) - { - string tag = Global.InboundAPITagName; - API apiObj = new API(); - Policy policyObj = new Policy(); - SystemPolicy policySystemSetting = new SystemPolicy(); - - string[] services = { "StatsService" }; - - v2rayConfig.stats = new Stats(); - - apiObj.tag = tag; - apiObj.services = services.ToList(); - v2rayConfig.api = apiObj; - - policySystemSetting.statsInboundDownlink = true; - policySystemSetting.statsInboundUplink = true; - policyObj.system = policySystemSetting; - v2rayConfig.policy = policyObj; - - if (!v2rayConfig.inbounds.Exists(item => { return item.tag == tag; })) - { - Inbounds apiInbound = new Inbounds(); - Inboundsettings apiInboundSettings = new Inboundsettings(); - apiInbound.tag = tag; - apiInbound.listen = Global.Loopback; - apiInbound.port = Global.statePort; - apiInbound.protocol = Global.InboundAPIProtocal; - apiInboundSettings.address = Global.Loopback; - apiInbound.settings = apiInboundSettings; - v2rayConfig.inbounds.Add(apiInbound); - } - - if (!v2rayConfig.routing.rules.Exists(item => { return item.outboundTag == tag; })) - { - RulesItem apiRoutingRule = new RulesItem - { - inboundTag = new List { tag }, - outboundTag = tag, - type = "field" - }; - v2rayConfig.routing.rules.Add(apiRoutingRule); - } - } - return 0; - } - - /// - /// 生成v2ray的客户端配置文件(自定义配置) - /// - /// - /// - /// - /// - public static int GenerateClientCustomConfig(Config config, string fileName, out string msg) - { - try - { - //检查GUI设置 - if (config == null - || config.index < 0 - || config.vmess.Count <= 0 - || config.index > config.vmess.Count - 1 - ) - { - msg = UIRes.I18N("CheckServerSettings"); - return -1; - } - - if (File.Exists(fileName)) - { - File.Delete(fileName); - } - - string addressFileName = config.address(); - if (!File.Exists(addressFileName)) - { - addressFileName = Path.Combine(Utils.GetTempPath(), addressFileName); - } - if (!File.Exists(addressFileName)) - { - msg = UIRes.I18N("FailedGenDefaultConfiguration"); - return -1; - } - File.Copy(addressFileName, fileName); - - msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary()); - } - catch - { - msg = UIRes.I18N("FailedGenDefaultConfiguration"); - return -1; - } - return 0; - } - - #endregion - - #region 生成服务端端配置 - - /// - /// 生成v2ray的客户端配置文件 - /// - /// - /// - /// - /// - public static int GenerateServerConfig(Config config, string fileName, out string msg) - { - try - { - //检查GUI设置 - if (config == null - || config.index < 0 - || config.vmess.Count <= 0 - || config.index > config.vmess.Count - 1 - ) - { - msg = UIRes.I18N("CheckServerSettings"); - return -1; - } - - msg = UIRes.I18N("InitialConfiguration"); - - //取得默认配置 - string result = Utils.GetEmbedText(SampleServer); - if (Utils.IsNullOrEmpty(result)) - { - msg = UIRes.I18N("FailedGetDefaultConfiguration"); - return -1; - } - - //转成Json - V2rayConfig v2rayConfig = Utils.FromJson(result); - if (v2rayConfig == null) - { - msg = UIRes.I18N("FailedGenDefaultConfiguration"); - return -1; - } - - ////开始修改配置 - log(config, ref v2rayConfig, true); - - //vmess协议服务器配置 - ServerInbound(config, ref v2rayConfig); - - //传出设置 - ServerOutbound(config, ref v2rayConfig); - - Utils.ToJsonFile(v2rayConfig, fileName, false); - - msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), config.getSummary()); - } - catch - { - msg = UIRes.I18N("FailedGenDefaultConfiguration"); - return -1; - } - return 0; - } - - /// - /// vmess协议服务器配置 - /// - /// - /// - /// - private static int ServerInbound(Config config, ref V2rayConfig v2rayConfig) - { - try - { - Inbounds inbound = v2rayConfig.inbounds[0]; - UsersItem usersItem; - if (inbound.settings.clients.Count <= 0) - { - usersItem = new UsersItem(); - inbound.settings.clients.Add(usersItem); - } - else - { - usersItem = inbound.settings.clients[0]; - } - //远程服务器端口 - inbound.port = config.port(); - - //远程服务器用户ID - usersItem.id = config.id(); - usersItem.email = Global.userEMail; - - if (config.configType() == (int)EConfigType.Vmess) - { - inbound.protocol = Global.vmessProtocolLite; - usersItem.alterId = config.alterId(); - - } - else if (config.configType() == (int)EConfigType.VLESS) - { - inbound.protocol = Global.vlessProtocolLite; - usersItem.alterId = 0; - usersItem.flow = config.flow(); - inbound.settings.decryption = config.security(); - } - - //远程服务器底层传输配置 - StreamSettings streamSettings = inbound.streamSettings; - boundStreamSettings(config, "in", ref streamSettings); - } - catch - { - } - return 0; - } - - /// - /// 传出设置 - /// - /// - /// - /// - private static int ServerOutbound(Config config, ref V2rayConfig v2rayConfig) - { - try - { - if (v2rayConfig.outbounds[0] != null) - { - v2rayConfig.outbounds[0].settings = null; - } - } - catch - { - } - return 0; - } - #endregion - - #region 导入(导出)客户端/服务端配置 - - /// - /// 导入v2ray客户端配置 - /// - /// - /// - /// - public static VmessItem ImportFromClientConfig(string fileName, out string msg) - { - msg = string.Empty; - VmessItem vmessItem = new VmessItem(); - - try - { - //载入配置文件 - string result = Utils.LoadResource(fileName); - if (Utils.IsNullOrEmpty(result)) - { - msg = UIRes.I18N("FailedReadConfiguration"); - return null; - } - - //转成Json - V2rayConfig v2rayConfig = Utils.FromJson(result); - if (v2rayConfig == null) - { - msg = UIRes.I18N("FailedConversionConfiguration"); - return null; - } - - if (v2rayConfig.outbounds == null - || v2rayConfig.outbounds.Count <= 0) - { - msg = UIRes.I18N("IncorrectClientConfiguration"); - return null; - } - - Outbounds outbound = v2rayConfig.outbounds[0]; - if (outbound == null - || Utils.IsNullOrEmpty(outbound.protocol) - || outbound.protocol != Global.vmessProtocolLite - || outbound.settings == null - || outbound.settings.vnext == null - || outbound.settings.vnext.Count <= 0 - || outbound.settings.vnext[0].users == null - || outbound.settings.vnext[0].users.Count <= 0) - { - msg = UIRes.I18N("IncorrectClientConfiguration"); - return null; - } - - vmessItem.security = Global.DefaultSecurity; - vmessItem.network = Global.DefaultNetwork; - vmessItem.headerType = Global.None; - vmessItem.address = outbound.settings.vnext[0].address; - vmessItem.port = outbound.settings.vnext[0].port; - vmessItem.id = outbound.settings.vnext[0].users[0].id; - vmessItem.alterId = outbound.settings.vnext[0].users[0].alterId; - vmessItem.remarks = string.Format("import@{0}", DateTime.Now.ToShortDateString()); - - //tcp or kcp - if (outbound.streamSettings != null - && outbound.streamSettings.network != null - && !Utils.IsNullOrEmpty(outbound.streamSettings.network)) - { - vmessItem.network = outbound.streamSettings.network; - } - - //tcp伪装http - if (outbound.streamSettings != null - && outbound.streamSettings.tcpSettings != null - && outbound.streamSettings.tcpSettings.header != null - && !Utils.IsNullOrEmpty(outbound.streamSettings.tcpSettings.header.type)) - { - if (outbound.streamSettings.tcpSettings.header.type.Equals(Global.TcpHeaderHttp)) - { - vmessItem.headerType = outbound.streamSettings.tcpSettings.header.type; - string request = Convert.ToString(outbound.streamSettings.tcpSettings.header.request); - if (!Utils.IsNullOrEmpty(request)) - { - V2rayTcpRequest v2rayTcpRequest = Utils.FromJson(request); - if (v2rayTcpRequest != null - && v2rayTcpRequest.headers != null - && v2rayTcpRequest.headers.Host != null - && v2rayTcpRequest.headers.Host.Count > 0) - { - vmessItem.requestHost = v2rayTcpRequest.headers.Host[0]; - } - } - } - } - //kcp伪装 - if (outbound.streamSettings != null - && outbound.streamSettings.kcpSettings != null - && outbound.streamSettings.kcpSettings.header != null - && !Utils.IsNullOrEmpty(outbound.streamSettings.kcpSettings.header.type)) - { - vmessItem.headerType = outbound.streamSettings.kcpSettings.header.type; - } - - //ws - if (outbound.streamSettings != null - && outbound.streamSettings.wsSettings != null) - { - if (!Utils.IsNullOrEmpty(outbound.streamSettings.wsSettings.path)) - { - vmessItem.path = outbound.streamSettings.wsSettings.path; - } - if (outbound.streamSettings.wsSettings.headers != null - && !Utils.IsNullOrEmpty(outbound.streamSettings.wsSettings.headers.Host)) - { - vmessItem.requestHost = outbound.streamSettings.wsSettings.headers.Host; - } - } - - //h2 - if (outbound.streamSettings != null - && outbound.streamSettings.httpSettings != null) - { - if (!Utils.IsNullOrEmpty(outbound.streamSettings.httpSettings.path)) - { - vmessItem.path = outbound.streamSettings.httpSettings.path; - } - if (outbound.streamSettings.httpSettings.host != null - && outbound.streamSettings.httpSettings.host.Count > 0) - { - vmessItem.requestHost = Utils.List2String(outbound.streamSettings.httpSettings.host); - } - } - - //tls - if (outbound.streamSettings != null - && outbound.streamSettings.security != null - && outbound.streamSettings.security == Global.StreamSecurity) - { - vmessItem.streamSecurity = Global.StreamSecurity; - } - } - catch - { - msg = UIRes.I18N("IncorrectClientConfiguration"); - return null; - } - - return vmessItem; - } - - /// - /// 导入v2ray服务端配置 - /// - /// - /// - /// - public static VmessItem ImportFromServerConfig(string fileName, out string msg) - { - msg = string.Empty; - VmessItem vmessItem = new VmessItem(); - - try - { - //载入配置文件 - string result = Utils.LoadResource(fileName); - if (Utils.IsNullOrEmpty(result)) - { - msg = UIRes.I18N("FailedReadConfiguration"); - return null; - } - - //转成Json - V2rayConfig v2rayConfig = Utils.FromJson(result); - if (v2rayConfig == null) - { - msg = UIRes.I18N("FailedConversionConfiguration"); - return null; - } - - if (v2rayConfig.inbounds == null - || v2rayConfig.inbounds.Count <= 0) - { - msg = UIRes.I18N("IncorrectServerConfiguration"); - return null; - } - - Inbounds inbound = v2rayConfig.inbounds[0]; - if (inbound == null - || Utils.IsNullOrEmpty(inbound.protocol) - || inbound.protocol != Global.vmessProtocolLite - || inbound.settings == null - || inbound.settings.clients == null - || inbound.settings.clients.Count <= 0) - { - msg = UIRes.I18N("IncorrectServerConfiguration"); - return null; - } - - vmessItem.security = Global.DefaultSecurity; - vmessItem.network = Global.DefaultNetwork; - vmessItem.headerType = Global.None; - vmessItem.address = string.Empty; - vmessItem.port = inbound.port; - vmessItem.id = inbound.settings.clients[0].id; - vmessItem.alterId = inbound.settings.clients[0].alterId; - - vmessItem.remarks = string.Format("import@{0}", DateTime.Now.ToShortDateString()); - - //tcp or kcp - if (inbound.streamSettings != null - && inbound.streamSettings.network != null - && !Utils.IsNullOrEmpty(inbound.streamSettings.network)) - { - vmessItem.network = inbound.streamSettings.network; - } - - //tcp伪装http - if (inbound.streamSettings != null - && inbound.streamSettings.tcpSettings != null - && inbound.streamSettings.tcpSettings.header != null - && !Utils.IsNullOrEmpty(inbound.streamSettings.tcpSettings.header.type)) - { - if (inbound.streamSettings.tcpSettings.header.type.Equals(Global.TcpHeaderHttp)) - { - vmessItem.headerType = inbound.streamSettings.tcpSettings.header.type; - string request = Convert.ToString(inbound.streamSettings.tcpSettings.header.request); - if (!Utils.IsNullOrEmpty(request)) - { - V2rayTcpRequest v2rayTcpRequest = Utils.FromJson(request); - if (v2rayTcpRequest != null - && v2rayTcpRequest.headers != null - && v2rayTcpRequest.headers.Host != null - && v2rayTcpRequest.headers.Host.Count > 0) - { - vmessItem.requestHost = v2rayTcpRequest.headers.Host[0]; - } - } - } - } - //kcp伪装 - //if (v2rayConfig.outbound.streamSettings != null - // && v2rayConfig.outbound.streamSettings.kcpSettings != null - // && v2rayConfig.outbound.streamSettings.kcpSettings.header != null - // && !Utils.IsNullOrEmpty(v2rayConfig.outbound.streamSettings.kcpSettings.header.type)) - //{ - // cmbHeaderType.Text = v2rayConfig.outbound.streamSettings.kcpSettings.header.type; - //} - - //ws - if (inbound.streamSettings != null - && inbound.streamSettings.wsSettings != null) - { - if (!Utils.IsNullOrEmpty(inbound.streamSettings.wsSettings.path)) - { - vmessItem.path = inbound.streamSettings.wsSettings.path; - } - if (inbound.streamSettings.wsSettings.headers != null - && !Utils.IsNullOrEmpty(inbound.streamSettings.wsSettings.headers.Host)) - { - vmessItem.requestHost = inbound.streamSettings.wsSettings.headers.Host; - } - } - - //h2 - if (inbound.streamSettings != null - && inbound.streamSettings.httpSettings != null) - { - if (!Utils.IsNullOrEmpty(inbound.streamSettings.httpSettings.path)) - { - vmessItem.path = inbound.streamSettings.httpSettings.path; - } - if (inbound.streamSettings.httpSettings.host != null - && inbound.streamSettings.httpSettings.host.Count > 0) - { - vmessItem.requestHost = Utils.List2String(inbound.streamSettings.httpSettings.host); - } - } - - //tls - if (inbound.streamSettings != null - && inbound.streamSettings.security != null - && inbound.streamSettings.security == Global.StreamSecurity) - { - vmessItem.streamSecurity = Global.StreamSecurity; - } - } - catch - { - msg = UIRes.I18N("IncorrectClientConfiguration"); - return null; - } - return vmessItem; - } - - /// - /// 从剪贴板导入URL - /// - /// - /// - /// - public static VmessItem ImportFromClipboardConfig(string clipboardData, out string msg) - { - msg = string.Empty; - VmessItem vmessItem = new VmessItem(); - - try - { - //载入配置文件 - string result = clipboardData.TrimEx();// Utils.GetClipboardData(); - if (Utils.IsNullOrEmpty(result)) - { - msg = UIRes.I18N("FailedReadConfiguration"); - return null; - } - - if (result.StartsWith(Global.vmessProtocol)) - { - int indexSplit = result.IndexOf("?"); - if (indexSplit > 0) - { - vmessItem = ResolveStdVmess(result) ?? ResolveVmess4Kitsunebi(result); - } - else - { - vmessItem.configType = (int)EConfigType.Vmess; - result = result.Substring(Global.vmessProtocol.Length); - result = Utils.Base64Decode(result); - - //转成Json - VmessQRCode vmessQRCode = Utils.FromJson(result); - if (vmessQRCode == null) - { - msg = UIRes.I18N("FailedConversionConfiguration"); - return null; - } - vmessItem.security = Global.DefaultSecurity; - vmessItem.network = Global.DefaultNetwork; - vmessItem.headerType = Global.None; - - - vmessItem.configVersion = Utils.ToInt(vmessQRCode.v); - vmessItem.remarks = Utils.ToString(vmessQRCode.ps); - vmessItem.address = Utils.ToString(vmessQRCode.add); - vmessItem.port = Utils.ToInt(vmessQRCode.port); - vmessItem.id = Utils.ToString(vmessQRCode.id); - vmessItem.alterId = Utils.ToInt(vmessQRCode.aid); - - if (!Utils.IsNullOrEmpty(vmessQRCode.net)) - { - vmessItem.network = vmessQRCode.net; - } - if (!Utils.IsNullOrEmpty(vmessQRCode.type)) - { - vmessItem.headerType = vmessQRCode.type; - } - - vmessItem.requestHost = Utils.ToString(vmessQRCode.host); - vmessItem.path = Utils.ToString(vmessQRCode.path); - vmessItem.streamSecurity = Utils.ToString(vmessQRCode.tls); - } - - ConfigHandler.UpgradeServerVersion(ref vmessItem); - } - else if (result.StartsWith(Global.ssProtocol)) - { - msg = UIRes.I18N("ConfigurationFormatIncorrect"); - - vmessItem = ResolveSSLegacy(result); - if (vmessItem == null) - { - vmessItem = ResolveSip002(result); - } - if (vmessItem == null) - { - return null; - } - if (vmessItem.address.Length == 0 || vmessItem.port == 0 || vmessItem.security.Length == 0 || vmessItem.id.Length == 0) - { - return null; - } - - vmessItem.configType = (int)EConfigType.Shadowsocks; - } - else if (result.StartsWith(Global.socksProtocol)) - { - msg = UIRes.I18N("ConfigurationFormatIncorrect"); - - vmessItem.configType = (int)EConfigType.Socks; - result = result.Substring(Global.socksProtocol.Length); - //remark - int indexRemark = result.IndexOf("#"); - if (indexRemark > 0) - { - try - { - vmessItem.remarks = WebUtility.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); - } - catch { } - result = result.Substring(0, indexRemark); - } - //part decode - int indexS = result.IndexOf("@"); - if (indexS > 0) - { - } - else - { - result = Utils.Base64Decode(result); - } - - string[] arr1 = result.Split('@'); - if (arr1.Length != 2) - { - return null; - } - string[] arr21 = arr1[0].Split(':'); - //string[] arr22 = arr1[1].Split(':'); - int indexPort = arr1[1].LastIndexOf(":"); - if (arr21.Length != 2 || indexPort < 0) - { - return null; - } - vmessItem.address = arr1[1].Substring(0, indexPort); - vmessItem.port = Utils.ToInt(arr1[1].Substring(indexPort + 1, arr1[1].Length - (indexPort + 1))); - vmessItem.security = arr21[0]; - vmessItem.id = arr21[1]; - } - else if (result.StartsWith(Global.trojanProtocol)) - { - msg = UIRes.I18N("ConfigurationFormatIncorrect"); - - vmessItem.configType = (int)EConfigType.Trojan; - - Uri uri = new Uri(result); - vmessItem.address = uri.IdnHost; - vmessItem.port = uri.Port; - vmessItem.id = uri.UserInfo; - - var qurery = HttpUtility.ParseQueryString(uri.Query); - vmessItem.requestHost = qurery["sni"] ?? ""; - - var remarks = uri.Fragment.Replace("#", ""); - if (Utils.IsNullOrEmpty(remarks)) - { - vmessItem.remarks = "NONE"; - } - else - { - vmessItem.remarks = WebUtility.UrlDecode(remarks); - } - } - else - { - msg = UIRes.I18N("NonvmessOrssProtocol"); - return null; - } - } - catch - { - msg = UIRes.I18N("Incorrectconfiguration"); - return null; - } - - return vmessItem; - } - - - /// - /// 导出为客户端配置 - /// - /// - /// - /// - /// - public static int Export2ClientConfig(Config config, string fileName, out string msg) - { - return GenerateClientConfig(config, fileName, true, out msg); - } - - /// - /// 导出为服务端配置 - /// - /// - /// - /// - /// - public static int Export2ServerConfig(Config config, string fileName, out string msg) - { - return GenerateServerConfig(config, fileName, out msg); - } - - private static VmessItem ResolveVmess4Kitsunebi(string result) - { - VmessItem vmessItem = new VmessItem - { - configType = (int)EConfigType.Vmess - }; - result = result.Substring(Global.vmessProtocol.Length); - int indexSplit = result.IndexOf("?"); - if (indexSplit > 0) - { - result = result.Substring(0, indexSplit); - } - result = Utils.Base64Decode(result); - - string[] arr1 = result.Split('@'); - if (arr1.Length != 2) - { - return null; - } - string[] arr21 = arr1[0].Split(':'); - string[] arr22 = arr1[1].Split(':'); - if (arr21.Length != 2 || arr21.Length != 2) - { - return null; - } - - vmessItem.address = arr22[0]; - vmessItem.port = Utils.ToInt(arr22[1]); - vmessItem.security = arr21[0]; - vmessItem.id = arr21[1]; - - vmessItem.network = Global.DefaultNetwork; - vmessItem.headerType = Global.None; - vmessItem.remarks = "Alien"; - vmessItem.alterId = 0; - - return vmessItem; - } - - private static VmessItem ResolveSip002(string result) - { - Uri parsedUrl; - try - { - parsedUrl = new Uri(result); - } - catch (UriFormatException) - { - return null; - } - VmessItem server = new VmessItem - { - remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped), - address = parsedUrl.IdnHost, - port = parsedUrl.Port, - }; - - // parse base64 UserInfo - string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped); - string base64 = rawUserInfo.Replace('-', '+').Replace('_', '/'); // Web-safe base64 to normal base64 - string userInfo; - try - { - userInfo = Encoding.UTF8.GetString(Convert.FromBase64String( - base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '='))); - } - catch (FormatException) - { - return null; - } - string[] userInfoParts = userInfo.Split(new char[] { ':' }, 2); - if (userInfoParts.Length != 2) - { - return null; - } - server.security = userInfoParts[0]; - server.id = userInfoParts[1]; - - NameValueCollection queryParameters = HttpUtility.ParseQueryString(parsedUrl.Query); - if (queryParameters["plugin"] != null) - { - return null; - } - - return server; - } - - private static readonly Regex UrlFinder = new Regex(@"ss://(?[A-Za-z0-9+-/=_]+)(?:#(?\S+))?", RegexOptions.IgnoreCase); - private static readonly Regex DetailsParser = new Regex(@"^((?.+?):(?.*)@(?.+?):(?\d+?))$", RegexOptions.IgnoreCase); - - private static VmessItem ResolveSSLegacy(string result) - { - var match = UrlFinder.Match(result); - if (!match.Success) - return null; - - VmessItem server = new VmessItem(); - var base64 = match.Groups["base64"].Value.TrimEnd('/'); - var tag = match.Groups["tag"].Value; - if (!tag.IsNullOrEmpty()) - { - server.remarks = HttpUtility.UrlDecode(tag, Encoding.UTF8); - } - Match details; - try - { - details = DetailsParser.Match(Encoding.UTF8.GetString(Convert.FromBase64String( - base64.PadRight(base64.Length + (4 - base64.Length % 4) % 4, '=')))); - } - catch (FormatException) - { - return null; - } - if (!details.Success) - return null; - server.security = details.Groups["method"].Value; - server.id = details.Groups["password"].Value; - server.address = details.Groups["hostname"].Value; - server.port = int.Parse(details.Groups["port"].Value); - return server; - } - - - private static readonly Regex StdVmessUserInfo = new Regex( - @"^(?[a-z]+)(\+(?[a-z]+))?:(?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})-(?[0-9]+)$"); - - private static VmessItem ResolveStdVmess(string result) - { - VmessItem i = new VmessItem - { - configType = (int)EConfigType.Vmess, - security = "auto" - }; - - Uri u = new Uri(result); - - i.address = u.IdnHost; - i.port = u.Port; - i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); - var q = HttpUtility.ParseQueryString(u.Query); - - var m = StdVmessUserInfo.Match(u.UserInfo); - if (!m.Success) return null; - - i.id = m.Groups["id"].Value; - if (!int.TryParse(m.Groups["alterId"].Value, out int aid)) - { - return null; - } - i.alterId = aid; - - if (m.Groups["streamSecurity"].Success) - { - i.streamSecurity = m.Groups["streamSecurity"].Value; - } - switch (i.streamSecurity) - { - case "tls": - // TODO tls config - break; - default: - if (!string.IsNullOrWhiteSpace(i.streamSecurity)) - return null; - break; - } - - i.network = m.Groups["network"].Value; - switch (i.network) - { - case "tcp": - string t1 = q["type"] ?? "none"; - i.headerType = t1; - // TODO http option - - break; - case "kcp": - i.headerType = q["type"] ?? "none"; - // TODO kcp seed - break; - - case "ws": - string p1 = q["path"] ?? "/"; - string h1 = q["host"] ?? ""; - i.requestHost = h1; - i.path = p1; - break; - - case "http": - i.network = "h2"; - string p2 = q["path"] ?? "/"; - string h2 = q["host"] ?? ""; - i.requestHost = h2; - i.path = p2; - break; - - case "quic": - string s = q["security"] ?? "none"; - string k = q["key"] ?? ""; - string t3 = q["type"] ?? "none"; - i.headerType = t3; - i.requestHost = s; - i.path = k; - break; - - default: - return null; - } - - return i; - } - #endregion - - #region Gen speedtest config - - - public static string GenerateClientSpeedtestConfigString(Config config, List selecteds, out string msg) - { - try - { - if (config == null - || config.index < 0 - || config.vmess.Count <= 0 - || config.index > config.vmess.Count - 1 - ) - { - msg = UIRes.I18N("CheckServerSettings"); - return ""; - } - - msg = UIRes.I18N("InitialConfiguration"); - - Config configCopy = Utils.DeepCopy(config); - - string result = Utils.GetEmbedText(SampleClient); - if (Utils.IsNullOrEmpty(result)) - { - msg = UIRes.I18N("FailedGetDefaultConfiguration"); - return ""; - } - - V2rayConfig v2rayConfig = Utils.FromJson(result); - if (v2rayConfig == null) - { - msg = UIRes.I18N("FailedGenDefaultConfiguration"); - return ""; - } - - log(configCopy, ref v2rayConfig, false); - //routing(config, ref v2rayConfig); - dns(configCopy, ref v2rayConfig); - - v2rayConfig.inbounds.RemoveAt(0); // Remove "proxy" service for speedtest, avoiding port conflicts. - - int httpPort = configCopy.GetLocalPort("speedtest"); - foreach (int index in selecteds) - { - if (configCopy.vmess[index].configType == (int)EConfigType.Custom) - { - continue; - } - - configCopy.index = index; - - Inbounds inbound = new Inbounds - { - listen = Global.Loopback, - port = httpPort + index, - protocol = Global.InboundHttp - }; - inbound.tag = Global.InboundHttp + inbound.port.ToString(); - v2rayConfig.inbounds.Add(inbound); - - - V2rayConfig v2rayConfigCopy = Utils.FromJson(result); - outbound(configCopy, ref v2rayConfigCopy); - v2rayConfigCopy.outbounds[0].tag = Global.agentTag + inbound.port.ToString(); - v2rayConfig.outbounds.Add(v2rayConfigCopy.outbounds[0]); - - RulesItem rule = new RulesItem - { - inboundTag = new List { inbound.tag }, - outboundTag = v2rayConfigCopy.outbounds[0].tag, - type = "field" - }; - v2rayConfig.routing.rules.Add(rule); - } - - msg = string.Format(UIRes.I18N("SuccessfulConfiguration"), configCopy.getSummary()); - return Utils.ToJson(v2rayConfig); - } - catch - { - msg = UIRes.I18N("FailedGenDefaultConfiguration"); - return ""; - } - } - - #endregion - - } -} diff --git a/v2rayN/Handler/V2rayHandler.cs b/v2rayN/Handler/V2rayHandler.cs deleted file mode 100644 index e4d1337..0000000 --- a/v2rayN/Handler/V2rayHandler.cs +++ /dev/null @@ -1,323 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Text; -using v2rayN.Mode; - -namespace v2rayN.Handler -{ - - /// - /// 消息委托 - /// - /// 是否显示在托盘区 - /// 内容 - public delegate void ProcessDelegate(bool notify, string msg); - - /// - /// v2ray进程处理类 - /// - class V2rayHandler - { - private static string v2rayConfigRes = Global.v2rayConfigFileName; - private List lstV2ray; - public event ProcessDelegate ProcessEvent; - //private int processId = 0; - private Process _process; - - public V2rayHandler() - { - lstV2ray = new List - { - "xray", - "wv2ray", - "v2ray" - }; - } - - /// - /// 载入V2ray - /// - public void LoadV2ray(Config config) - { - if (Global.reloadV2ray) - { - string fileName = Utils.GetPath(v2rayConfigRes); - if (V2rayConfigHandler.GenerateClientConfig(config, fileName, false, out string msg) != 0) - { - ShowMsg(false, msg); - } - else - { - ShowMsg(true, msg); - V2rayRestart(); - } - } - } - - /// - /// 新建进程,载入V2ray配置文件字符串 - /// 返回新进程pid。 - /// - public int LoadV2rayConfigString(Config config, List _selecteds) - { - int pid = -1; - string configStr = V2rayConfigHandler.GenerateClientSpeedtestConfigString(config, _selecteds, out string msg); - if (configStr == "") - { - ShowMsg(false, msg); - } - else - { - ShowMsg(false, msg); - pid = V2rayStartNew(configStr); - //V2rayRestart(); - // start with -config - } - return pid; - } - - /// - /// V2ray重启 - /// - private void V2rayRestart() - { - V2rayStop(); - V2rayStart(); - } - - /// - /// V2ray停止 - /// - public void V2rayStop() - { - try - { - if (_process != null) - { - KillProcess(_process); - _process.Dispose(); - _process = null; - } - else - { - foreach (string vName in lstV2ray) - { - Process[] existing = Process.GetProcessesByName(vName); - foreach (Process p in existing) - { - string path = p.MainModule.FileName; - if (path == $"{Utils.GetPath(vName)}.exe") - { - KillProcess(p); - } - } - } - } - - //bool blExist = true; - //if (processId > 0) - //{ - // Process p1 = Process.GetProcessById(processId); - // if (p1 != null) - // { - // p1.Kill(); - // blExist = false; - // } - //} - //if (blExist) - //{ - // foreach (string vName in lstV2ray) - // { - // Process[] killPro = Process.GetProcessesByName(vName); - // foreach (Process p in killPro) - // { - // p.Kill(); - // } - // } - //} - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - /// - /// V2ray停止 - /// - public void V2rayStopPid(int pid) - { - try - { - Process _p = Process.GetProcessById(pid); - KillProcess(_p); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - private string V2rayFindexe() { - //查找v2ray文件是否存在 - string fileName = string.Empty; - //lstV2ray.Reverse(); - foreach (string name in lstV2ray) - { - string vName = string.Format("{0}.exe", name); - vName = Utils.GetPath(vName); - if (File.Exists(vName)) - { - fileName = vName; - break; - } - } - if (Utils.IsNullOrEmpty(fileName)) - { - string msg = string.Format(UIRes.I18N("NotFoundCore"), @"https://github.com/v2fly/v2ray-core/releases"); - ShowMsg(false, msg); - } - return fileName; - } - - /// - /// V2ray启动 - /// - private void V2rayStart() - { - ShowMsg(false, string.Format(UIRes.I18N("StartService"), DateTime.Now.ToString())); - - try - { - string fileName = V2rayFindexe(); - if (fileName == "") return; - - Process p = new Process - { - StartInfo = new ProcessStartInfo - { - FileName = fileName, - WorkingDirectory = Utils.StartupPath(), - UseShellExecute = false, - RedirectStandardOutput = true, - RedirectStandardError = true, - CreateNoWindow = true, - StandardOutputEncoding = Encoding.UTF8 - } - }; - p.OutputDataReceived += new DataReceivedEventHandler((sender, e) => - { - if (!String.IsNullOrEmpty(e.Data)) - { - string msg = e.Data + Environment.NewLine; - ShowMsg(false, msg); - } - }); - p.Start(); - p.PriorityClass = ProcessPriorityClass.High; - p.BeginOutputReadLine(); - //processId = p.Id; - _process = p; - - if (p.WaitForExit(1000)) - { - throw new Exception(p.StandardError.ReadToEnd()); - } - - Global.processJob.AddProcess(p.Handle); - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - string msg = ex.Message; - ShowMsg(true, msg); - } - } - /// - /// V2ray启动,新建进程,传入配置字符串 - /// - private int V2rayStartNew(string configStr) - { - ShowMsg(false, string.Format(UIRes.I18N("StartService"), DateTime.Now.ToString())); - - try - { - string fileName = V2rayFindexe(); - if (fileName == "") return -1; - - Process p = new Process - { - StartInfo = new ProcessStartInfo - { - FileName = fileName, - Arguments = "-config stdin:", - WorkingDirectory = Utils.StartupPath(), - UseShellExecute = false, - RedirectStandardInput = true, - RedirectStandardOutput = true, - RedirectStandardError = true, - CreateNoWindow = true, - StandardOutputEncoding = Encoding.UTF8 - } - }; - p.OutputDataReceived += new DataReceivedEventHandler((sender, e) => - { - if (!String.IsNullOrEmpty(e.Data)) - { - string msg = e.Data + Environment.NewLine; - ShowMsg(false, msg); - } - }); - p.Start(); - p.BeginOutputReadLine(); - - p.StandardInput.Write(configStr); - p.StandardInput.Close(); - - if (p.WaitForExit(1000)) - { - throw new Exception(p.StandardError.ReadToEnd()); - } - - Global.processJob.AddProcess(p.Handle); - return p.Id; - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - string msg = ex.Message; - ShowMsg(false, msg); - return -1; - } - } - - /// - /// 消息委托 - /// - /// 是否更新托盘图标的工具提示 - /// 输出到日志框 - private void ShowMsg(bool updateToTrayTooltip, string msg) - { - ProcessEvent?.Invoke(updateToTrayTooltip, msg); - } - - private void KillProcess(Process p) - { - try - { - p.CloseMainWindow(); - p.WaitForExit(100); - if (!p.HasExited) - { - p.Kill(); - p.WaitForExit(100); - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - } -} diff --git a/v2rayN/HttpProxyHandler/HttpProxyHandle.cs b/v2rayN/HttpProxyHandler/HttpProxyHandle.cs deleted file mode 100644 index 04e2acb..0000000 --- a/v2rayN/HttpProxyHandler/HttpProxyHandle.cs +++ /dev/null @@ -1,186 +0,0 @@ -using System; -using v2rayN.Mode; - -namespace v2rayN.HttpProxyHandler -{ - /// - /// 系统代理(http)模式 - /// - public enum ListenerType - { - noHttpProxy = 0, - GlobalHttp = 1, - GlobalPac = 2, - HttpOpenAndClear = 3, - PacOpenAndClear = 4, - HttpOpenOnly = 5, - PacOpenOnly = 6 - } - /// - /// 系统代理(http)总处理 - /// 启动privoxy提供http协议 - /// 设置IE系统代理或者PAC模式 - /// - class HttpProxyHandle - { - private static bool Update(Config config, bool forceDisable) - { - ListenerType type = config.listenerType; - - if (forceDisable) - { - type = ListenerType.noHttpProxy; - } - - try - { - if (type != ListenerType.noHttpProxy) - { - int port = Global.httpPort; - if (port <= 0) - { - return false; - } - if (type == ListenerType.GlobalHttp) - { - //PACServerHandle.Stop(); - //ProxySetting.SetProxy($"{Global.Loopback}:{port}", Global.IEProxyExceptions, 2); - SysProxyHandle.SetIEProxy(true, true, $"{Global.Loopback}:{port}"); - } - else if (type == ListenerType.GlobalPac) - { - string pacUrl = GetPacUrl(); - //ProxySetting.SetProxy(pacUrl, "", 4); - SysProxyHandle.SetIEProxy(true, false, pacUrl); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } - else if (type == ListenerType.HttpOpenAndClear) - { - //PACServerHandle.Stop(); - SysProxyHandle.ResetIEProxy(); - } - else if (type == ListenerType.PacOpenAndClear) - { - string pacUrl = GetPacUrl(); - SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } - else if (type == ListenerType.HttpOpenOnly) - { - //PACServerHandle.Stop(); - //SysProxyHandle.ResetIEProxy(); - } - else if (type == ListenerType.PacOpenOnly) - { - string pacUrl = GetPacUrl(); - //SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); - PACServerHandle.Init(config); - } - } - else - { - SysProxyHandle.ResetIEProxy(); - //PACServerHandle.Stop(); - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - return true; - } - - /// - /// 启用系统代理(http) - /// - /// - private static void StartHttpAgent(Config config) - { - try - { - int localPort = config.GetLocalPort(Global.InboundSocks); - if (localPort > 0) - { - PrivoxyHandler.Instance.Restart(localPort, config); - if (PrivoxyHandler.Instance.RunningPort > 0) - { - Global.sysAgent = true; - Global.socksPort = localPort; - Global.httpPort = PrivoxyHandler.Instance.RunningPort; - Global.pacPort = config.GetLocalPort("pac"); - } - } - } - catch - { - } - } - - /// - /// 关闭系统代理 - /// - /// - public static void CloseHttpAgent(Config config) - { - try - { - if (config.listenerType != ListenerType.HttpOpenOnly && config.listenerType != ListenerType.PacOpenOnly) - { - Update(config, true); - } - - PrivoxyHandler.Instance.Stop(); - - Global.sysAgent = false; - Global.socksPort = 0; - Global.httpPort = 0; - } - catch - { - } - } - - /// - /// 重启系统代理(http) - /// - /// - /// - public static void RestartHttpAgent(Config config, bool forced) - { - bool isRestart = false; - if (config.listenerType == ListenerType.noHttpProxy) - { - // 关闭http proxy时,直接返回 - return; - } - //强制重启或者socks端口变化 - if (forced) - { - isRestart = true; - } - else - { - int localPort = config.GetLocalPort(Global.InboundSocks); - if (localPort != Global.socksPort) - { - isRestart = true; - } - } - if (isRestart) - { - CloseHttpAgent(config); - StartHttpAgent(config); - } - Update(config, false); - } - - public static string GetPacUrl() - { - string pacUrl = $"http://{Global.Loopback}:{Global.pacPort}/pac/?t={ DateTime.Now.ToString("HHmmss")}"; - return pacUrl; - } - } -} diff --git a/v2rayN/HttpProxyHandler/PACServerHandle.cs b/v2rayN/HttpProxyHandler/PACServerHandle.cs deleted file mode 100644 index 23bf808..0000000 --- a/v2rayN/HttpProxyHandler/PACServerHandle.cs +++ /dev/null @@ -1,209 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using v2rayN.Mode; -using v2rayN.Properties; -using v2rayN.Tool; -using v2rayN.Base; - -namespace v2rayN.HttpProxyHandler -{ - /// - /// 提供PAC功能支持 - /// - class PACServerHandle - { - private static int pacPort = 0; - private static HttpWebServer server; - private static HttpWebServerB serverB; - private static Config _config; - - public static bool IsRunning - { - get - { - return (pacPort > 0); - } - } - - public static void Init(Config config) - { - _config = config; - Global.pacPort = config.GetLocalPort("pac"); - - if (InitServer("*")) - { - pacPort = Global.pacPort; - } - //else if (InitServer(Global.Loopback)) - //{ - // pacPort = Global.pacPort; - //} - else if (InitServerB(Global.Loopback)) - { - pacPort = Global.pacPort; - } - else - { - Utils.SaveLog("Webserver init failed "); - pacPort = 0; - } - } - - private static bool InitServer(string address) - { - try - { - if (pacPort != Global.pacPort) - { - if (server != null) - { - server.Stop(); - server = null; - } - - if (server == null) - { - string prefixes = string.Format("http://{0}:{1}/pac/", address, Global.pacPort); - Utils.SaveLog("Webserver prefixes " + prefixes); - - server = new HttpWebServer(SendResponse, prefixes); - server.Run(); - - } - } - Utils.SaveLog("Webserver at " + address); - } - catch (Exception ex) - { - Utils.SaveLog("Webserver InitServer " + ex.Message); - return false; - } - return true; - } - - public static bool InitServerB(string address) - { - try - { - if (pacPort != Global.pacPort) - { - if (serverB != null) - { - serverB.Stop(); - serverB = null; - } - - if (serverB == null) - { - serverB = new HttpWebServerB(Global.pacPort, SendResponse); - } - } - Utils.SaveLog("WebserverB at " + address); - } - catch (Exception ex) - { - Utils.SaveLog("WebserverB InitServer " + ex.Message); - return false; - } - return true; - } - - public static string SendResponse(string address) - { - try - { - string pac = GetPacList(address); - return pac; - } - catch (Exception ex) - { - Utils.SaveLog("Webserver SendResponse " + ex.Message); - return ex.Message; - } - } - - public static void Stop() - { - try - { - if (server != null) - { - server.Stop(); - server = null; - } - if (serverB != null) - { - serverB.Stop(); - serverB = null; - } - } - catch (Exception ex) - { - Utils.SaveLog("Webserver Stop " + ex.Message); - } - - //try - //{ - // if (httpWebServer == null) - // { - // return; - // } - // foreach (var key in httpWebServer.Keys) - // { - // Utils.SaveLog("Webserver Stop " + key.ToString()); - // ((HttpWebServer)httpWebServer[key]).Stop(); - // } - // httpWebServer.Clear(); - //} - //catch (Exception ex) - //{ - // Utils.SaveLog("Webserver Stop " + ex.Message); - //} - } - - private static string GetPacList(string address) - { - int port = Global.httpPort; - if (port <= 0) - { - return "No port"; - } - try - { - List lstProxy = new List - { - string.Format("PROXY {0}:{1};", address, port) - }; - string proxy = string.Join("", lstProxy.ToArray()); - - string strPacfile = Utils.GetPath(Global.pacFILE); - if (!File.Exists(strPacfile)) - { - FileManager.UncompressFile(strPacfile, Resources.pac_txt); - } - string pac = File.ReadAllText(strPacfile, Encoding.UTF8); - pac = pac.Replace("__PROXY__", proxy); - - if (_config.userPacRule.Count > 0) - { - string keyWords = "var rules = ["; - if (pac.IndexOf(keyWords) >= 0) - { - string userPac = string.Join($"\",{Environment.NewLine}\"", _config.userPacRule.ToArray()); - userPac = string.Format("\"{0}\",", userPac); - pac = pac.Replace(keyWords, keyWords + userPac); - } - } - - return pac; - } - catch - { - } - return "No pac content"; - } - - } -} diff --git a/v2rayN/HttpProxyHandler/PrivoxyHandler.cs b/v2rayN/HttpProxyHandler/PrivoxyHandler.cs deleted file mode 100644 index f738a31..0000000 --- a/v2rayN/HttpProxyHandler/PrivoxyHandler.cs +++ /dev/null @@ -1,194 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text; -using System.Windows.Forms; -using v2rayN.Mode; -using v2rayN.Properties; -using v2rayN.Tool; - -namespace v2rayN.HttpProxyHandler -{ - /// - /// Privoxy处理类,提供http协议代理 - /// - class PrivoxyHandler - { - /// - /// 单例 - /// - private static PrivoxyHandler instance; - - private static int _uid; - private static string _uniqueConfigFile; - private Process _process; - private static string _privoxyName = "v2ray_privoxy"; - - static PrivoxyHandler() - { - try - { - _uid = Application.StartupPath.GetHashCode(); - _uniqueConfigFile = string.Format("privoxy_{0}.conf", _uid); - - FileManager.UncompressFile(Utils.GetTempPath($"{_privoxyName}.exe"), Resources.privoxy_exe); - } - catch (IOException ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - /// - /// 单例 - /// - public static PrivoxyHandler Instance - { - get - { - if (instance == null) - { - instance = new PrivoxyHandler(); - } - return instance; - } - } - - public int RunningPort - { - get; set; - } - - public void Restart(int localPort, Config config) - { - Stop(); - Start(localPort, config); - } - - - public void Start(int localPort, Config config) - { - try - { - if (_process == null) - { - - string privoxyConfig = Resources.privoxy_conf; - RunningPort = config.GetLocalPort(Global.InboundHttp); - privoxyConfig = privoxyConfig.Replace("__SOCKS_PORT__", localPort.ToString()); - privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_PORT__", RunningPort.ToString()); - if (config.allowLANConn) - { - privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", "0.0.0.0"); - } - else - { - privoxyConfig = privoxyConfig.Replace("__PRIVOXY_BIND_IP__", Global.Loopback); - } - FileManager.ByteArrayToFile(Utils.GetTempPath(_uniqueConfigFile), Encoding.UTF8.GetBytes(privoxyConfig)); - - _process = new Process - { - // Configure the process using the StartInfo properties. - StartInfo = - { - FileName = $"{_privoxyName}.exe", - Arguments = _uniqueConfigFile, - WorkingDirectory = Utils.GetTempPath(), - WindowStyle = ProcessWindowStyle.Hidden, - UseShellExecute = true, - CreateNoWindow = true - } - }; - _process.Start(); - - /* - * Add this process to job obj associated with this ss process, so that - * when ss exit unexpectedly, this process will be forced killed by system. - */ - - Global.processJob.AddProcess(_process.Handle); - } - } - catch (Exception ex) - { - RunningPort = 0; - Utils.SaveLog(ex.Message, ex); - } - } - - public void Stop() - { - if (_process != null) - { - KillProcess(_process); - _process.Dispose(); - _process = null; - RunningPort = 0; - } - else - { - Process[] existingPrivoxy = Process.GetProcessesByName(_privoxyName); - foreach (Process p in existingPrivoxy.Where(IsChildProcess)) - { - KillProcess(p); - } - } - } - - private static void KillProcess(Process p) - { - try - { - p.CloseMainWindow(); - p.WaitForExit(100); - if (!p.HasExited) - { - p.Kill(); - p.WaitForExit(100); - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - /* - * We won't like to kill other ss instances' v2ray_privoxy.exe. - * This function will check whether the given process is created - * by this process by checking the module path or command line. - * - * Since it's required to put ss in different dirs to run muti instances, - * different instance will create their unique "privoxy_UID.conf" where - * UID is hash of ss's location. - */ - - private static bool IsChildProcess(Process process) - { - try - { - /* - * Under PortableMode, we could identify it by the path of v2ray_privoxy.exe. - */ - string path = process.MainModule.FileName; - - return Utils.GetTempPath($"{_privoxyName}.exe").Equals(path); - - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - /* - * Sometimes Process.GetProcessesByName will return some processes that - * are already dead, and that will cause exceptions here. - * We could simply ignore those exceptions. - */ - //Logging.LogUsefulException(ex); - return false; - } - } - - } -} diff --git a/v2rayN/HttpProxyHandler/ProxySetting.cs b/v2rayN/HttpProxyHandler/ProxySetting.cs deleted file mode 100644 index 2ee7107..0000000 --- a/v2rayN/HttpProxyHandler/ProxySetting.cs +++ /dev/null @@ -1,215 +0,0 @@ -using Microsoft.Win32; -using System; -using System.Runtime.InteropServices; - -namespace v2rayN.HttpProxyHandler -{ - class ProxySetting - { - public static bool UnsetProxy() - { - return SetProxy(null, null, 1); - } - - public static bool SetProxy(string strProxy, string exceptions, int type) - { - InternetPerConnOptionList list = new InternetPerConnOptionList(); - - int optionCount = 1; - if (type == 1) - { - optionCount = 1; - } - else if (type == 2 || type == 4) - { - optionCount = Utils.IsNullOrEmpty(exceptions) ? 2 : 3; - } - - int m_Int = (int)PerConnFlags.PROXY_TYPE_DIRECT; - PerConnOption m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS; - if (type == 2) - { - m_Int = (int)(PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY); - m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER; - } - else if (type == 4) - { - m_Int = (int)(PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL); - m_Option = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL; - } - - //int optionCount = Utils.IsNullOrEmpty(strProxy) ? 1 : (Utils.IsNullOrEmpty(exceptions) ? 2 : 3); - InternetConnectionOption[] options = new InternetConnectionOption[optionCount]; - // USE a proxy server ... - options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS; - //options[0].m_Value.m_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY)); - options[0].m_Value.m_Int = m_Int; - // use THIS proxy server - if (optionCount > 1) - { - options[1].m_Option = m_Option; - options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(strProxy); - // except for these addresses ... - if (optionCount > 2) - { - options[2].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS; - options[2].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(exceptions); - } - } - - // default stuff - list.dwSize = Marshal.SizeOf(list); - list.szConnection = IntPtr.Zero; - list.dwOptionCount = options.Length; - list.dwOptionError = 0; - - - int optSize = Marshal.SizeOf(typeof(InternetConnectionOption)); - // make a pointer out of all that ... - IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length); - // copy the array over into that spot in memory ... - for (int i = 0; i < options.Length; ++i) - { - if (Environment.Is64BitOperatingSystem) - { - IntPtr opt = new IntPtr(optionsPtr.ToInt64() + (i * optSize)); - Marshal.StructureToPtr(options[i], opt, false); - } - else - { - IntPtr opt = new IntPtr(optionsPtr.ToInt32() + (i * optSize)); - Marshal.StructureToPtr(options[i], opt, false); - } - } - - list.options = optionsPtr; - - // and then make a pointer out of the whole list - IntPtr ipcoListPtr = Marshal.AllocCoTaskMem((int)list.dwSize); - Marshal.StructureToPtr(list, ipcoListPtr, false); - - // and finally, call the API method! - int returnvalue = NativeMethods.InternetSetOption(IntPtr.Zero, - InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION, - ipcoListPtr, list.dwSize) ? -1 : 0; - if (returnvalue == 0) - { // get the error codes, they might be helpful - returnvalue = Marshal.GetLastWin32Error(); - } - // FREE the data ASAP - Marshal.FreeCoTaskMem(optionsPtr); - Marshal.FreeCoTaskMem(ipcoListPtr); - if (returnvalue > 0) - { // throw the error codes, they might be helpful - //throw new Win32Exception(Marshal.GetLastWin32Error()); - } - - return (returnvalue < 0); - } - - - #region WinInet structures - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - public struct InternetPerConnOptionList - { - public int dwSize; // size of the INTERNET_PER_CONN_OPTION_LIST struct - public IntPtr szConnection; // connection name to set/query options - public int dwOptionCount; // number of options to set/query - public int dwOptionError; // on error, which option failed - //[MarshalAs(UnmanagedType.)] - public IntPtr options; - }; - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] - public struct InternetConnectionOption - { - static readonly int Size; - public PerConnOption m_Option; - public InternetConnectionOptionValue m_Value; - static InternetConnectionOption() - { - Size = Marshal.SizeOf(typeof(InternetConnectionOption)); - } - - // Nested Types - [StructLayout(LayoutKind.Explicit)] - public struct InternetConnectionOptionValue - { - // Fields - [FieldOffset(0)] - public System.Runtime.InteropServices.ComTypes.FILETIME m_FileTime; - [FieldOffset(0)] - public int m_Int; - [FieldOffset(0)] - public IntPtr m_StringPtr; - } - } - #endregion - - #region WinInet enums - // - // options manifests for Internet{Query|Set}Option - // - public enum InternetOption : uint - { - INTERNET_OPTION_PER_CONNECTION_OPTION = 75 - } - - // - // Options used in INTERNET_PER_CONN_OPTON struct - // - public enum PerConnOption - { - INTERNET_PER_CONN_FLAGS = 1, // Sets or retrieves the connection type. The Value member will contain one or more of the values from PerConnFlags - INTERNET_PER_CONN_PROXY_SERVER = 2, // Sets or retrieves a string containing the proxy servers. - INTERNET_PER_CONN_PROXY_BYPASS = 3, // Sets or retrieves a string containing the URLs that do not use the proxy server. - INTERNET_PER_CONN_AUTOCONFIG_URL = 4//, // Sets or retrieves a string containing the URL to the automatic configuration script. - - } - - // - // PER_CONN_FLAGS - // - [Flags] - public enum PerConnFlags - { - PROXY_TYPE_DIRECT = 0x00000001, // direct to net - PROXY_TYPE_PROXY = 0x00000002, // via named proxy - PROXY_TYPE_AUTO_PROXY_URL = 0x00000004, // autoproxy URL - PROXY_TYPE_AUTO_DETECT = 0x00000008 // use autoproxy detection - } - #endregion - - internal static class NativeMethods - { - [DllImport("WinInet.dll", SetLastError = true, CharSet = CharSet.Auto)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool InternetSetOption(IntPtr hInternet, InternetOption dwOption, IntPtr lpBuffer, int dwBufferLength); - } - - //判断是否使用代理 - public static bool UsedProxy() - { - RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true); - if (rk.GetValue("ProxyEnable").ToString() == "1") - { - rk.Close(); - return true; - } - else - { - rk.Close(); - return false; - } - } - //获得代理的IP和端口 - public static string GetProxyProxyServer() - { - RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", true); - string ProxyServer = rk.GetValue("ProxyServer").ToString(); - rk.Close(); - return ProxyServer; - - } - } -} diff --git a/v2rayN/HttpProxyHandler/SysProxyHandle.cs b/v2rayN/HttpProxyHandler/SysProxyHandle.cs deleted file mode 100644 index 7c5410c..0000000 --- a/v2rayN/HttpProxyHandler/SysProxyHandle.cs +++ /dev/null @@ -1,192 +0,0 @@ - -using System; -using System.Diagnostics; -using System.IO; -using System.Text; -using System.Threading; -using v2rayN.Mode; -using v2rayN.Properties; -using v2rayN.Tool; - -namespace v2rayN.HttpProxyHandler -{ - public static class SysProxyHandle - { - //private const string _userWininetConfigFile = "user-wininet.json"; - - //private static string _queryStr; - - // In general, this won't change - // format: - // - // - // - // - private static SysproxyConfig _userSettings = null; - - enum RET_ERRORS : int - { - RET_NO_ERROR = 0, - INVALID_FORMAT = 1, - NO_PERMISSION = 2, - SYSCALL_FAILED = 3, - NO_MEMORY = 4, - INVAILD_OPTION_COUNT = 5, - }; - - static SysProxyHandle() - { - try - { - FileManager.UncompressFile(Utils.GetTempPath("sysproxy.exe"), - Environment.Is64BitOperatingSystem ? Resources.sysproxy64_exe : Resources.sysproxy_exe); - } - catch (IOException ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - public static void SetIEProxy(bool enable, bool global, string strProxy) - { - //Read(); - - //if (!_userSettings.UserSettingsRecorded) - //{ - // // record user settings - // ExecSysproxy("query"); - // //ParseQueryStr(_queryStr); - //} - - string arguments; - if (enable) - { - arguments = global - ? $"global {strProxy} {Global.IEProxyExceptions}" - : $"pac {strProxy}"; - } - else - { - // restore user settings - string flags = _userSettings.Flags; - string proxy_server = _userSettings.ProxyServer ?? "-"; - string bypass_list = _userSettings.BypassList ?? "-"; - string pac_url = _userSettings.PacUrl ?? "-"; - arguments = $"set {flags} {proxy_server} {bypass_list} {pac_url}"; - - // have to get new settings - _userSettings.UserSettingsRecorded = false; - } - - //Save(); - ExecSysproxy(arguments); - } - - // set system proxy to 1 (null) (null) (null) - public static bool ResetIEProxy() - { - try - { - // clear user-wininet.json - //_userSettings = new SysproxyConfig(); - //Save(); - // clear system setting - ExecSysproxy("set 1 - - -"); - } - catch (Exception) - { - return false; - } - - return true; - } - - private static void ExecSysproxy(string arguments) - { - // using event to avoid hanging when redirect standard output/error - // ref: https://stackoverflow.com/questions/139593/processstartinfo-hanging-on-waitforexit-why - // and http://blog.csdn.net/zhangweixing0/article/details/7356841 - using (AutoResetEvent outputWaitHandle = new AutoResetEvent(false)) - using (AutoResetEvent errorWaitHandle = new AutoResetEvent(false)) - { - using (Process process = new Process()) - { - // Configure the process using the StartInfo properties. - process.StartInfo.FileName = Utils.GetTempPath("sysproxy.exe"); - process.StartInfo.Arguments = arguments; - process.StartInfo.WorkingDirectory = Utils.GetTempPath(); - process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; - process.StartInfo.UseShellExecute = false; - process.StartInfo.RedirectStandardError = true; - process.StartInfo.RedirectStandardOutput = true; - - // Need to provide encoding info, or output/error strings we got will be wrong. - process.StartInfo.StandardOutputEncoding = Encoding.Unicode; - process.StartInfo.StandardErrorEncoding = Encoding.Unicode; - - process.StartInfo.CreateNoWindow = true; - - StringBuilder output = new StringBuilder(); - StringBuilder error = new StringBuilder(); - - process.OutputDataReceived += (sender, e) => - { - if (e.Data == null) - { - outputWaitHandle.Set(); - } - else - { - output.AppendLine(e.Data); - } - }; - process.ErrorDataReceived += (sender, e) => - { - if (e.Data == null) - { - errorWaitHandle.Set(); - } - else - { - error.AppendLine(e.Data); - } - }; - try - { - process.Start(); - - process.BeginErrorReadLine(); - process.BeginOutputReadLine(); - - process.WaitForExit(); - } - catch (System.ComponentModel.Win32Exception e) - { - - // log the arguments - throw new Exception(process.StartInfo.Arguments); - } - string stderr = error.ToString(); - string stdout = output.ToString(); - - int exitCode = process.ExitCode; - if (exitCode != (int)RET_ERRORS.RET_NO_ERROR) - { - throw new Exception(stderr); - } - - //if (arguments == "query") - //{ - // if (stdout.IsNullOrWhiteSpace() || stdout.IsNullOrEmpty()) - // { - // throw new Exception("failed to query wininet settings"); - // } - // _queryStr = stdout; - //} - } - } - } - - - } -} diff --git a/v2rayN/Mode/Config.cs b/v2rayN/Mode/Config.cs deleted file mode 100644 index fb73794..0000000 --- a/v2rayN/Mode/Config.cs +++ /dev/null @@ -1,740 +0,0 @@ -using System; -using System.Collections.Generic; -using v2rayN.Base; -using v2rayN.HttpProxyHandler; - - -namespace v2rayN.Mode -{ - /// - /// 本软件配置文件实体类 - /// - [Serializable] - public class Config - { - /// - /// 本地监听 - /// - public List inbound - { - get; set; - } - - /// - /// 允许日志 - /// - public bool logEnabled - { - get; set; - } - - /// - /// 日志等级 - /// - public string loglevel - { - get; set; - } - - /// - /// 活动配置序号 - /// - public int index - { - get; set; - } - - /// - /// vmess服务器信息 - /// - public List vmess - { - get; set; - } - - /// - /// 允许Mux多路复用 - /// - public bool muxEnabled - { - get; set; - } - - /// - /// 域名解析策略 - /// - public string domainStrategy - { - get; set; - } - - /// - /// 路由模式 - /// - public string routingMode - { - get; set; - } - - /// - /// 用户自定义需代理的网址或ip - /// - public List useragent - { - get; set; - } - - /// - /// 用户自定义直连的网址或ip - /// - public List userdirect - { - get; set; - } - - /// - /// 用户自定义阻止的网址或ip - /// - public List userblock - { - get; set; - } - - /// - /// KcpItem - /// - public KcpItem kcpItem - { - get; set; - } - - /// - /// 监听状态 - /// - public ListenerType listenerType - { - get; set; - } - - /// - /// 自定义服务器下载测速url - /// - public string speedTestUrl - { - get; set; - } - /// - /// 自定义“服务器真连接延迟”测试url - /// - public string speedPingTestUrl - { - get; set; - } - /// - /// 自定义GFWList url - /// - public string urlGFWList - { - get; set; - } - - /// - /// 允许来自局域网的连接 - /// - public bool allowLANConn - { - get; set; - } - - /// - /// 启用实时网速和流量统计 - /// - public bool enableStatistics - { - get; set; - } - - /// - /// 去重时优先保留较旧(顶部)节点 - /// - public bool keepOlderDedupl - { - get; set; - } - - /// - /// 视图刷新率 - /// - public int statisticsFreshRate - { - get; set; - } - - - /// - /// 自定义远程DNS - /// - public string remoteDNS - { - get; set; - } - - /// - /// 是否允许不安全连接 - /// - public bool defAllowInsecure - { - get; set; - } - - /// - /// 订阅 - /// - public List subItem - { - get; set; - } - /// - /// UI - /// - public UIItem uiItem - { - get; set; - } - - public List userPacRule - { - get; set; - } - - #region 函数 - - public string address() - { - if (index < 0) - { - return string.Empty; - } - return vmess[index].address.TrimEx(); - } - - public int port() - { - if (index < 0) - { - return 10808; - } - return vmess[index].port; - } - - public string id() - { - if (index < 0) - { - return string.Empty; - } - return vmess[index].id.TrimEx(); - } - - public int alterId() - { - if (index < 0) - { - return 0; - } - return vmess[index].alterId; - } - - public string security() - { - if (index < 0) - { - return string.Empty; - } - return vmess[index].security.TrimEx(); - } - - public string remarks() - { - if (index < 0) - { - return string.Empty; - } - return vmess[index].remarks.TrimEx(); - } - public string network() - { - if (index < 0 || Utils.IsNullOrEmpty(vmess[index].network)) - { - return Global.DefaultNetwork; - } - return vmess[index].network.TrimEx(); - } - public string headerType() - { - if (index < 0 || Utils.IsNullOrEmpty(vmess[index].headerType)) - { - return Global.None; - } - return vmess[index].headerType.Replace(" ", "").TrimEx(); - } - public string requestHost() - { - if (index < 0 || Utils.IsNullOrEmpty(vmess[index].requestHost)) - { - return string.Empty; - } - return vmess[index].requestHost.Replace(" ", "").TrimEx(); - } - public string path() - { - if (index < 0 || Utils.IsNullOrEmpty(vmess[index].path)) - { - return string.Empty; - } - return vmess[index].path.Replace(" ", "").TrimEx(); - } - public string streamSecurity() - { - if (index < 0 || Utils.IsNullOrEmpty(vmess[index].streamSecurity)) - { - return string.Empty; - } - return vmess[index].streamSecurity; - } - public bool allowInsecure() - { - if (index < 0 || Utils.IsNullOrEmpty(vmess[index].allowInsecure)) - { - return defAllowInsecure; - } - return Convert.ToBoolean(vmess[index].allowInsecure); - } - - public int GetLocalPort(string protocol) - { - if (protocol == Global.InboundHttp) - { - return GetLocalPort(Global.InboundSocks) + 1; - } - else if (protocol == "pac") - { - return GetLocalPort(Global.InboundSocks) + 2; - } - else if (protocol == "speedtest") - { - return GetLocalPort(Global.InboundSocks) + 103; - } - - int localPort = 0; - foreach (InItem inItem in inbound) - { - if (inItem.protocol.Equals(protocol)) - { - localPort = inItem.localPort; - break; - } - } - return localPort; - } - - public int configType() - { - if (index < 0) - { - return 0; - } - return vmess[index].configType; - } - - public string getSummary() - { - if (index < 0) - { - return string.Empty; - } - return vmess[index].getSummary(); - } - - public string getItemId() - { - if (index < 0) - { - return string.Empty; - } - - return vmess[index].getItemId(); - } - public string flow() - { - if (index < 0) - { - return string.Empty; - } - return vmess[index].flow.TrimEx(); - } - #endregion - - } - - [Serializable] - public class VmessItem - { - public VmessItem() - { - configVersion = 1; - address = string.Empty; - port = 0; - id = string.Empty; - alterId = 0; - security = string.Empty; - network = string.Empty; - remarks = string.Empty; - headerType = string.Empty; - requestHost = string.Empty; - path = string.Empty; - streamSecurity = string.Empty; - allowInsecure = string.Empty; - configType = (int)EConfigType.Vmess; - testResult = string.Empty; - subid = string.Empty; - flow = string.Empty; - } - - public string getSummary() - { - string summary = string.Format("[{0}] ", ((EConfigType)configType).ToString()); - string[] arrAddr = address.Split('.'); - string addr; - if (arrAddr.Length > 2) - { - addr = $"{arrAddr[0]}***{arrAddr[arrAddr.Length - 1]}"; - } - else if (arrAddr.Length > 1) - { - addr = $"***{arrAddr[arrAddr.Length - 1]}"; - } - else - { - addr = address; - } - switch (configType) - { - case (int)EConfigType.Vmess: - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - break; - case (int)EConfigType.Shadowsocks: - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - break; - case (int)EConfigType.Socks: - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - break; - case (int)EConfigType.VLESS: - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - break; - case (int)EConfigType.Trojan: - summary += string.Format("{0}({1}:{2})", remarks, addr, port); - break; - default: - summary += string.Format("{0}", remarks); - break; - } - return summary; - } - public string getSubRemarks(Config config) - { - string subRemarks = string.Empty; - if (Utils.IsNullOrEmpty(subid)) - { - return subRemarks; - } - foreach (SubItem sub in config.subItem) - { - if (sub.id.EndsWith(subid)) - { - return sub.remarks; - } - } - if (subid.Length <= 4) - { - return subid; - } - return subid.Substring(0, 4); - } - - public string getItemId() - { - string itemId = $"{address}{port}{requestHost}{path}"; - itemId = Utils.Base64Encode(itemId); - return itemId; - } - - /// - /// 版本(现在=2) - /// - public int configVersion - { - get; set; - } - - /// - /// 远程服务器地址 - /// - public string address - { - get; set; - } - /// - /// 远程服务器端口 - /// - public int port - { - get; set; - } - /// - /// 远程服务器ID - /// - public string id - { - get; set; - } - /// - /// 远程服务器额外ID - /// - public int alterId - { - get; set; - } - /// - /// 本地安全策略 - /// - public string security - { - get; set; - } - /// - /// tcp,kcp,ws,h2,quic - /// - public string network - { - get; set; - } - /// - /// 备注或别名 - /// - public string remarks - { - get; set; - } - - /// - /// 伪装类型 - /// - public string headerType - { - get; set; - } - - /// - /// 伪装的域名 - /// - public string requestHost - { - get; set; - } - - /// - /// ws h2 path - /// - public string path - { - get; set; - } - - /// - /// 底层传输安全 - /// - public string streamSecurity - { - get; set; - } - - /// - /// 是否允许不安全连接(用于客户端) - /// - public string allowInsecure - { - get; set; - } - - - /// - /// config type(1=normal,2=custom) - /// - public int configType - { - get; set; - } - - /// - /// - /// - public string testResult - { - get; set; - } - - /// - /// SubItem id - /// - public string subid - { - get; set; - } - - /// - /// VLESS flow - /// - public string flow - { - get; set; - } - } - - [Serializable] - public class InItem - { - /// - /// 本地监听端口 - /// - public int localPort - { - get; set; - } - - /// - /// 协议,默认为socks - /// - public string protocol - { - get; set; - } - - /// - /// 允许udp - /// - public bool udpEnabled - { - get; set; - } - - /// - /// 开启流量探测 - /// - public bool sniffingEnabled { get; set; } = true; - } - - [Serializable] - public class KcpItem - { - /// - /// - /// - public int mtu - { - get; set; - } - /// - /// - /// - public int tti - { - get; set; - } - /// - /// - /// - public int uplinkCapacity - { - get; set; - } - /// - /// - /// - public int downlinkCapacity - { - get; set; - } - /// - /// - /// - public bool congestion - { - get; set; - } - /// - /// - /// - public int readBufferSize - { - get; set; - } - /// - /// - /// - public int writeBufferSize - { - get; set; - } - } - - - [Serializable] - public class SubItem - { - /// - /// - /// - public string id - { - get; set; - } - - /// - /// 备注 - /// - public string remarks - { - get; set; - } - - /// - /// url - /// - public string url - { - get; set; - } - - /// - /// enable - /// - public bool enabled { get; set; } = true; - } - - [Serializable] - public class UIItem - { - - - public System.Drawing.Size mainSize - { - get; set; - } - - public Dictionary mainLvColWidth - { - get; set; - } - } -} diff --git a/v2rayN/Mode/EConfigType.cs b/v2rayN/Mode/EConfigType.cs deleted file mode 100644 index e1adc53..0000000 --- a/v2rayN/Mode/EConfigType.cs +++ /dev/null @@ -1,13 +0,0 @@ - -namespace v2rayN.Mode -{ - public enum EConfigType - { - Vmess = 1, - Custom = 2, - Shadowsocks = 3, - Socks = 4, - VLESS = 5, - Trojan = 6 - } -} diff --git a/v2rayN/Mode/ServerStatistics.cs b/v2rayN/Mode/ServerStatistics.cs deleted file mode 100644 index e4a42a5..0000000 --- a/v2rayN/Mode/ServerStatistics.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace v2rayN.Mode -{ - [Serializable] - public class ServerStatistics - { - public List server - { - get; set; - } - } - - [Serializable] - public class ServerStatItem - { - public string itemId - { - get; set; - } - public ulong totalUp - { - get; set; - } - public ulong totalDown - { - get; set; - } - public ulong todayUp - { - get; set; - } - public ulong todayDown - { - get; set; - } - public long dateNow - { - get; set; - } - } -} diff --git a/v2rayN/Mode/VmessQRCode.cs b/v2rayN/Mode/VmessQRCode.cs deleted file mode 100644 index 0a9cc8a..0000000 --- a/v2rayN/Mode/VmessQRCode.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; - -namespace v2rayN.Mode -{ - [Serializable] - class VmessQRCode - { - /// - /// 版本 - /// - public string v { get; set; } = string.Empty; - /// - /// 备注 - /// - public string ps { get; set; } = string.Empty; - /// - /// 远程服务器地址 - /// - public string add { get; set; } = string.Empty; - /// - /// 远程服务器端口 - /// - public string port { get; set; } = string.Empty; - /// - /// 远程服务器ID - /// - public string id { get; set; } = string.Empty; - /// - /// 远程服务器额外ID - /// - public string aid { get; set; } = string.Empty; - /// - /// 传输协议tcp,kcp,ws - /// - public string net { get; set; } = string.Empty; - /// - /// 伪装类型 - /// - public string type { get; set; } = string.Empty; - /// - /// 伪装的域名 - /// - public string host { get; set; } = string.Empty; - /// - /// path - /// - public string path { get; set; } = string.Empty; - /// - /// 底层传输安全 - /// - public string tls { get; set; } = string.Empty; - } -} diff --git a/v2rayN/PacLib/PacHandler.cs b/v2rayN/PacLib/PacHandler.cs new file mode 100755 index 0000000..2e32f1f --- /dev/null +++ b/v2rayN/PacLib/PacHandler.cs @@ -0,0 +1,102 @@ +using System; +using System.IO; +using System.Net.Sockets; +using System.Text; +using System.Threading.Tasks; + +namespace PacLib; + +public class PacHandler +{ + private static string _configPath; + private static int _httpPort; + private static int _pacPort; + private static TcpListener? _tcpListener; + private static string _pacText; + private static bool _isRunning; + private static bool _needRestart = true; + + public static void Start(string configPath, int httpPort, int pacPort) + { + _needRestart = (configPath != _configPath || httpPort != _httpPort || pacPort != _pacPort || !_isRunning); + + _configPath = configPath; + _httpPort = httpPort; + _pacPort = pacPort; + + InitText(); + + if (_needRestart) + { + Stop(); + RunListener(); + } + } + + private static void InitText() + { + var path = Path.Combine(_configPath, "pac.txt"); + if (!File.Exists(path)) + { + File.AppendAllText(path, Resources.ResourceManager.GetString("pac")); + } + + _pacText = File.ReadAllText(path).Replace("__PROXY__", $"PROXY 127.0.0.1:{_httpPort};DIRECT;"); + } + + private static void RunListener() + { + _tcpListener = TcpListener.Create(_pacPort); + _isRunning = true; + _tcpListener.Start(); + Task.Factory.StartNew(async () => + { + while (_isRunning) + { + try + { + if (!_tcpListener.Pending()) + { + await Task.Delay(10); + continue; + } + + var client = _tcpListener.AcceptTcpClient(); + await Task.Run(() => + { + var stream = client.GetStream(); + var sb = new StringBuilder(); + sb.AppendLine("HTTP/1.0 200 OK"); + sb.AppendLine("Content-type:application/x-ns-proxy-autoconfig"); + sb.AppendLine("Connection:close"); + sb.AppendLine("Content-Length:" + Encoding.UTF8.GetByteCount(_pacText)); + sb.AppendLine(); + sb.Append(_pacText); + var content = Encoding.UTF8.GetBytes(sb.ToString()); + stream.Write(content, 0, content.Length); + stream.Flush(); + }); + } + catch (Exception e) + { + } + } + }, TaskCreationOptions.LongRunning); + } + + public static void Stop() + { + if (_tcpListener != null) + { + try + { + _isRunning = false; + _tcpListener.Stop(); + _tcpListener = null; + } + catch (Exception e) + { + } + } + } +} \ No newline at end of file diff --git a/v2rayN/PacLib/PacLib.csproj b/v2rayN/PacLib/PacLib.csproj new file mode 100755 index 0000000..feb6e55 --- /dev/null +++ b/v2rayN/PacLib/PacLib.csproj @@ -0,0 +1,20 @@ + + + + net8.0 + enable + + + + + True + True + Resources.resx + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + diff --git a/v2rayN/PacLib/Resources.Designer.cs b/v2rayN/PacLib/Resources.Designer.cs new file mode 100755 index 0000000..e7bfd02 --- /dev/null +++ b/v2rayN/PacLib/Resources.Designer.cs @@ -0,0 +1,95 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace PacLib { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PacLib.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找类似 var proxy = '__PROXY__'; + ///var rules = [ + /// [ + /// [], + /// [] + /// ], + /// [ + /// [ + /// "aftygh.gov.tw", + /// "aide.gov.tw", + /// "aliyun.com", + /// "arte.gov.tw", + /// "baidu.com", + /// "chinaso.com", + /// "chinaz.com", + /// "chukuang.gov.tw", + /// "cycab.gov.tw", + /// "dbnsa.gov.tw", + /// "df.gov.tw", + /// "eastcoast-nsa.gov.tw", + /// "erv-nsa.gov.tw", + /// "grb.gov.tw", + /// "haosou.com", + /// [字符串的其余部分被截断]"; 的本地化字符串。 + /// + internal static string pac { + get { + return ResourceManager.GetString("pac", resourceCulture); + } + } + } +} diff --git a/v2rayN/Forms/QRCodeForm.resx b/v2rayN/PacLib/Resources.resx old mode 100644 new mode 100755 similarity index 94% rename from v2rayN/Forms/QRCodeForm.resx rename to v2rayN/PacLib/Resources.resx index 1af7de1..1fffd5a --- a/v2rayN/Forms/QRCodeForm.resx +++ b/v2rayN/PacLib/Resources.resx @@ -117,4 +117,8 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Resources\pac.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312 + \ No newline at end of file diff --git a/v2rayN/PacLib/Resources/pac.txt b/v2rayN/PacLib/Resources/pac.txt new file mode 100755 index 0000000..0257652 --- /dev/null +++ b/v2rayN/PacLib/Resources/pac.txt @@ -0,0 +1,6024 @@ +var proxy = '__PROXY__'; +var rules = [ + [ + [], + [] + ], + [ + [ + "aftygh.gov.tw", + "aide.gov.tw", + "aliyun.com", + "arte.gov.tw", + "baidu.com", + "chinaso.com", + "chinaz.com", + "chukuang.gov.tw", + "cycab.gov.tw", + "dbnsa.gov.tw", + "df.gov.tw", + "eastcoast-nsa.gov.tw", + "erv-nsa.gov.tw", + "grb.gov.tw", + "haosou.com", + "haygo.com", + "hchcc.gov.tw", + "hsinchu-cc.gov.tw", + "iner.gov.tw", + "ip.cn", + "jike.com", + "jpush.cn", + "klsio.gov.tw", + "kmseh.gov.tw", + "locql.com", + "lungtanhr.gov.tw", + "maolin-nsa.gov.tw", + "matsu-news.gov.tw", + "matsu-nsa.gov.tw", + "matsucc.gov.tw", + "moe.gov.tw", + "nankan.gov.tw", + "ncree.gov.tw", + "necoast-nsa.gov.tw", + "ner.gov.tw", + "nmmba.gov.tw", + "nmp.gov.tw", + "nmvttc.gov.tw", + "northguan-nsa.gov.tw", + "npm.gov.tw", + "nstm.gov.tw", + "ntdmh.gov.tw", + "ntl.gov.tw", + "ntsec.gov.tw", + "ntuh.gov.tw", + "nvri.gov.tw", + "nyc.gov.tw", + "penghu-nsa.gov.tw", + "post.gov.tw", + "qq.com", + "simplecd.me", + "sina.cn", + "sina.com.cn", + "siraya-nsa.gov.tw", + "sl-reverse.com", + "so.com", + "sogou.com", + "soso.com", + "stdtime.gov.tw", + "sunmoonlake.gov.tw", + "syniumsoftware.com", + "taitung-house.gov.tw", + "taoyuan.gov.tw", + "tphcc.gov.tw", + "trimt-nsa.gov.tw", + "uluai.com.cn", + "vghks.gov.tw", + "vghtc.gov.tw", + "vghtpe.gov.tw", + "wallproxy.com.cn", + "wanfang.gov.tw", + "weibo.com", + "yahoo.cn", + "yatsen.gov.tw", + "yda.gov.tw", + "youdao.com", + "zhongsou.com" + ], + [ + "000webhost.com", + "030buy.com", + "0rz.tw", + "1-apple.com.tw", + "10.tt", + "1000giri.net", + "100ke.org", + "10beasts.net", + "10conditionsoflove.com", + "10musume.com", + "123rf.com", + "12bet.com", + "12vpn.com", + "12vpn.net", + "1337x.to", + "138.com", + "141hongkong.com", + "141jj.com", + "141tube.com", + "1688.com.au", + "173ng.com", + "177pic.info", + "17t17p.com", + "18board.com", + "18board.info", + "18onlygirls.com", + "18p2p.com", + "18virginsex.com", + "1949er.org", + "1984.city", + "1984bbs.com", + "1984bbs.org", + "1991way.com", + "1998cdp.org", + "1bao.org", + "1dumb.com", + "1e100.net", + "1eew.com", + "1mobile.com", + "1mobile.tw", + "1pondo.tv", + "2-hand.info", + "2000fun.com", + "2008xianzhang.info", + "2017.hk", + "2021hkcharter.com", + "2047.name", + "21andy.com", + "21join.com", + "21pron.com", + "21sextury.com", + "228.net.tw", + "233abc.com", + "24hrs.ca", + "24smile.org", + "25u.com", + "2lipstube.com", + "2shared.com", + "2waky.com", + "3-a.net", + "30boxes.com", + "315lz.com", + "32red.com", + "36rain.com", + "3a5a.com", + "3arabtv.com", + "3boys2girls.com", + "3d-game.com", + "3proxy.ru", + "3ren.ca", + "3tui.net", + "404museum.com", + "43110.cf", + "466453.com", + "4bluestones.biz", + "4chan.com", + "4dq.com", + "4everproxy.com", + "4irc.com", + "4mydomain.com", + "4pu.com", + "4rbtv.com", + "4shared.com", + "4sqi.net", + "50webs.com", + "51.ca", + "51jav.org", + "51luoben.com", + "5278.cc", + "5299.tv", + "5aimiku.com", + "5i01.com", + "5isotoi5.org", + "5maodang.com", + "63i.com", + "64museum.org", + "64tianwang.com", + "64wiki.com", + "66.ca", + "666kb.com", + "6do.news", + "6park.com", + "6parkbbs.com", + "6parker.com", + "6parknews.com", + "7-zip.org", + "7capture.com", + "7cow.com", + "8-d.com", + "85cc.net", + "85cc.us", + "85st.com", + "881903.com", + "888.com", + "888poker.com", + "89-64.org", + "8964museum.com", + "8news.com.tw", + "8z1.net", + "9001700.com", + "908taiwan.org", + "91porn.com", + "91vps.club", + "92ccav.com", + "991.com", + "99btgc01.com", + "99cn.info", + "9bis.com", + "9bis.net", + "9cache.com", + "9gag.com", + "9news.com.au", + "a-normal-day.com", + "aamacau.com", + "abc.com", + "abc.net.au", + "abc.xyz", + "abchinese.com", + "abclite.net", + "abebooks.com", + "ablwang.com", + "aboluowang.com", + "about.google", + "aboutgfw.com", + "abs.edu", + "acast.com", + "accim.org", + "accountkit.com", + "aceros-de-hispania.com", + "acevpn.com", + "acg18.me", + "acgbox.org", + "acgkj.com", + "acgnx.se", + "acmedia365.com", + "acmetoy.com", + "acnw.com.au", + "actfortibet.org", + "actimes.com.au", + "activpn.com", + "aculo.us", + "adcex.com", + "addictedtocoffee.de", + "addyoutube.com", + "adelaidebbs.com", + "admob.com", + "adpl.org.hk", + "ads-twitter.com", + "adsense.com", + "adult-sex-games.com", + "adultfriendfinder.com", + "adultkeep.net", + "advanscene.com", + "advertfan.com", + "advertisercommunity.com", + "ae.org", + "aenhancers.com", + "aex.com", + "af.mil", + "afantibbs.com", + "afr.com", + "afreecatv.com", + "agnesb.fr", + "agoogleaday.com", + "agro.hk", + "ai-kan.net", + "ai-wen.net", + "ai.google", + "aiph.net", + "airasia.com", + "airconsole.com", + "aircrack-ng.org", + "airvpn.org", + "aisex.com", + "ait.org.tw", + "aiweiwei.com", + "aiweiweiblog.com", + "ajsands.com", + "akademiye.org", + "akamai.net", + "akamaihd.net", + "akamaistream.net", + "akamaized.net", + "akiba-online.com", + "akiba-web.com", + "akow.org", + "al-islam.com", + "al-qimmah.net", + "alabout.com", + "alanhou.com", + "alarab.qa", + "alasbarricadas.org", + "alexlur.org", + "alforattv.net", + "alhayat.com", + "alicejapan.co.jp", + "aliengu.com", + "alive.bar", + "alkasir.com", + "all4mom.org", + "allcoin.com", + "allconnected.co", + "alldrawnsex.com", + "allervpn.com", + "allfinegirls.com", + "allgirlmassage.com", + "allgirlsallowed.org", + "allgravure.com", + "alliance.org.hk", + "allinfa.com", + "alljackpotscasino.com", + "allmovie.com", + "allowed.org", + "almasdarnews.com", + "almostmy.com", + "alphaporno.com", + "alternate-tools.com", + "alternativeto.net", + "altrec.com", + "alvinalexander.com", + "alwaysdata.com", + "alwaysdata.net", + "alwaysvpn.com", + "am730.com.hk", + "amazon.co.jp", + "amazon.com", + "amazonaws.com", + "ameblo.jp", + "america.gov", + "american.edu", + "americangreencard.com", + "americanunfinished.com", + "americorps.gov", + "amiblockedornot.com", + "amigobbs.net", + "amitabhafoundation.us", + "amnesty.org", + "amnesty.org.hk", + "amnesty.tw", + "amnestyusa.org", + "amnyemachen.org", + "amoiist.com", + "ampproject.org", + "amtb-taipei.org", + "anchor.fm", + "anchorfree.com", + "ancsconf.org", + "andfaraway.net", + "android-x86.org", + "android.com", + "androidify.com", + "androidplus.co", + "androidtv.com", + "andygod.com", + "angela-merkel.de", + "angelfire.com", + "angola.org", + "angularjs.org", + "animecrazy.net", + "aniscartujo.com", + "annatam.com", + "anobii.com", + "anontext.com", + "anonymitynetwork.com", + "anonymizer.com", + "anonymouse.org", + "anpopo.com", + "answering-islam.org", + "antd.org", + "anthonycalzadilla.com", + "anti1984.com", + "antichristendom.com", + "antiwave.net", + "anws.gov.tw", + "anyporn.com", + "anysex.com", + "ao3.org", + "aobo.com.au", + "aofriend.com", + "aofriend.com.au", + "aojiao.org", + "aol.ca", + "aol.co.uk", + "aol.com", + "aolnews.com", + "aomiwang.com", + "ap.org", + "apartmentratings.com", + "apartments.com", + "apat1989.org", + "apetube.com", + "api.ai", + "apiary.io", + "apigee.com", + "apk-dl.com", + "apk.support", + "apkcombo.com", + "apkmirror.com", + "apkmonk.com", + "apkplz.com", + "apkpure.com", + "aplusvpn.com", + "appbrain.com", + "appdownloader.net", + "appledaily.com", + "appledaily.com.hk", + "appledaily.com.tw", + "appshopper.com", + "appsocks.net", + "appspot.com", + "appsto.re", + "aptoide.com", + "archive.fo", + "archive.is", + "archive.li", + "archive.org", + "archive.ph", + "archive.today", + "archiveofourown.com", + "archiveofourown.org", + "archives.gov", + "archives.gov.tw", + "arctosia.com", + "areca-backup.org", + "arena.taipei", + "arethusa.su", + "arlingtoncemetery.mil", + "army.mil", + "art4tibet1998.org", + "arte.tv", + "artofpeacefoundation.org", + "artstation.com", + "artsy.net", + "asacp.org", + "asdfg.jp", + "asg.to", + "asia-gaming.com", + "asiaharvest.org", + "asianage.com", + "asianews.it", + "asianfreeforum.com", + "asiansexdiary.com", + "asianspiss.com", + "asianwomensfilm.de", + "asiaone.com", + "asiatgp.com", + "asiatoday.us", + "askstudent.com", + "askynz.net", + "aspi.org.au", + "aspistrategist.org.au", + "assembla.com", + "assimp.org", + "astrill.com", + "atc.org.au", + "atchinese.com", + "atdmt.com", + "atgfw.org", + "athenaeizou.com", + "atlanta168.com", + "atlaspost.com", + "atnext.com", + "audionow.com", + "authorizeddns.net", + "authorizeddns.org", + "authorizeddns.us", + "autodraw.com", + "av-e-body.com", + "av.com", + "av.movie", + "avaaz.org", + "avbody.tv", + "avcity.tv", + "avcool.com", + "avdb.in", + "avdb.tv", + "avfantasy.com", + "avg.com", + "avgle.com", + "avidemux.org", + "avmo.pw", + "avmoo.com", + "avmoo.net", + "avmoo.pw", + "avoision.com", + "avyahoo.com", + "axios.com", + "axureformac.com", + "azerbaycan.tv", + "azerimix.com", + "azubu.tv", + "azurewebsites.net", + "b-ok.cc", + "b0ne.com", + "baby-kingdom.com", + "babylonbee.com", + "babynet.com.hk", + "backchina.com", + "backpackers.com.tw", + "backtotiananmen.com", + "badiucao.com", + "badjojo.com", + "badoo.com", + "baidu.jp", + "baijie.org", + "bailandaily.com", + "baixing.me", + "bakgeekhome.tk", + "banana-vpn.com", + "band.us", + "bandcamp.com", + "bandwagonhost.com", + "bangbrosnetwork.com", + "bangchen.net", + "bangdream.space", + "bangkokpost.com", + "bangyoulater.com", + "bankmobilevibe.com", + "bannedbook.org", + "bannednews.org", + "banorte.com", + "baramangaonline.com", + "barenakedislam.com", + "barnabu.co.uk", + "barton.de", + "bastillepost.com", + "bayvoice.net", + "baywords.com", + "bb-chat.tv", + "bbc.co.uk", + "bbc.com", + "bbc.in", + "bbcchinese.com", + "bbchat.tv", + "bbci.co.uk", + "bbg.gov", + "bbkz.com", + "bbnradio.org", + "bbs-tw.com", + "bbsdigest.com", + "bbsfeed.com", + "bbsland.com", + "bbsmo.com", + "bbsone.com", + "bbtoystore.com", + "bcast.co.nz", + "bcc.com.tw", + "bcchinese.net", + "bcex.ca", + "bcmorning.com", + "bdsmvideos.net", + "beaconevents.com", + "bebo.com", + "beeg.com", + "beevpn.com", + "behance.net", + "behindkink.com", + "beijing1989.com", + "beijing2022.art", + "beijingspring.com", + "beijingzx.org", + "belamionline.com", + "bell.wiki", + "bemywife.cc", + "beric.me", + "berlinerbericht.de", + "berlintwitterwall.com", + "berm.co.nz", + "bestforchina.org", + "bestgore.com", + "bestpornstardb.com", + "bestvpn.com", + "bestvpnanalysis.com", + "bestvpnserver.com", + "bestvpnservice.com", + "bestvpnusa.com", + "bet365.com", + "betfair.com", + "betternet.co", + "bettervpn.com", + "bettween.com", + "betvictor.com", + "bewww.net", + "beyondfirewall.com", + "bfnn.org", + "bfsh.hk", + "bgvpn.com", + "bianlei.com", + "biantailajiao.com", + "biantailajiao.in", + "biblesforamerica.org", + "bibox.com", + "bic2011.org", + "biedian.me", + "big.one", + "bigfools.com", + "bigjapanesesex.com", + "bigmoney.biz", + "bignews.org", + "bigone.com", + "bigsound.org", + "bild.de", + "biliworld.com", + "billypan.com", + "binance.com", + "bing.com", + "binux.me", + "binwang.me", + "bird.so", + "bit-z.com", + "bit.do", + "bit.ly", + "bitbay.net", + "bitchute.com", + "bitcointalk.org", + "bitcoinworld.com", + "bitfinex.com", + "bithumb.com", + "bitinka.com.ar", + "bitmex.com", + "bitshare.com", + "bitsnoop.com", + "bitterwinter.org", + "bitvise.com", + "bitz.ai", + "bizhat.com", + "bjnewlife.org", + "bjs.org", + "bjzc.org", + "bl-doujinsouko.com", + "blacklogic.com", + "blackvpn.com", + "blewpass.com", + "blingblingsquad.net", + "blinkx.com", + "blinw.com", + "blip.tv", + "blockcast.it", + "blockcn.com", + "blockedbyhk.com", + "blockless.com", + "blog.de", + "blog.google", + "blog.jp", + "blogblog.com", + "blogcatalog.com", + "blogcity.me", + "blogdns.org", + "blogger.com", + "blogimg.jp", + "bloglines.com", + "bloglovin.com", + "blogs.com", + "blogspot.com", + "blogspot.hk", + "blogspot.jp", + "blogspot.tw", + "blogtd.net", + "blogtd.org", + "bloodshed.net", + "bloomberg.cn", + "bloomberg.com", + "bloomberg.de", + "bloombergview.com", + "bloomfortune.com", + "blubrry.com", + "blueangellive.com", + "bmfinn.com", + "bnews.co", + "bnext.com.tw", + "bnn.co", + "bnrmetal.com", + "boardreader.com", + "bod.asia", + "bodog88.com", + "bolehvpn.net", + "bonbonme.com", + "bonbonsex.com", + "bonfoundation.org", + "bongacams.com", + "boobstagram.com", + "book.com.tw", + "bookdepository.com", + "bookepub.com", + "books.com.tw", + "booktopia.com.au", + "boomssr.com", + "borgenmagazine.com", + "bot.nu", + "botanwang.com", + "bowenpress.com", + "box.com", + "box.net", + "boxpn.com", + "boxun.com", + "boxun.tv", + "boxunblog.com", + "boxunclub.com", + "boyangu.com", + "boyfriendtv.com", + "boysfood.com", + "boysmaster.com", + "br.st", + "brainyquote.com", + "brandonhutchinson.com", + "braumeister.org", + "brave.com", + "bravotube.net", + "brazzers.com", + "breached.to", + "break.com", + "breakgfw.com", + "breaking911.com", + "breakingtweets.com", + "breakwall.net", + "briefdream.com", + "briian.com", + "brill.com", + "brizzly.com", + "brkmd.com", + "broadbook.com", + "broadpressinc.com", + "brockbbs.com", + "brookings.edu", + "brucewang.net", + "brutaltgp.com", + "bt2mag.com", + "bt95.com", + "btaia.com", + "btbtav.com", + "btc98.com", + "btcbank.bank", + "btctrade.im", + "btdigg.org", + "btku.me", + "btku.org", + "btspread.com", + "btsynckeys.com", + "budaedu.org", + "buddhanet.com.tw", + "buddhistchannel.tv", + "buffered.com", + "bullguard.com", + "bullog.org", + "bullogger.com", + "bunbunhk.com", + "busayari.com", + "business-humanrights.org", + "business.page", + "businessinsider.com", + "businessinsider.com.au", + "businesstoday.com.tw", + "businessweek.com", + "busu.org", + "busytrade.com", + "buugaa.com", + "buzzhand.com", + "buzzhand.net", + "buzzorange.com", + "bvpn.com", + "bwbx.io", + "bwgyhw.com", + "bwh1.net", + "bwsj.hk", + "bx.in.th", + "bx.tl", + "bybit.com", + "bynet.co.il", + "bypasscensorship.org", + "byrut.org", + "c-est-simple.com", + "c-span.org", + "c-spanvideo.org", + "c100tibet.org", + "c2cx.com", + "cablegatesearch.net", + "cachinese.com", + "cacnw.com", + "cactusvpn.com", + "cafepress.com", + "cahr.org.tw", + "caijinglengyan.com", + "calameo.com", + "calebelston.com", + "calgarychinese.ca", + "calgarychinese.com", + "calgarychinese.net", + "calibre-ebook.com", + "caltech.edu", + "cam4.com", + "cam4.jp", + "cam4.sg", + "camfrog.com", + "campaignforuyghurs.org", + "cams.com", + "cams.org.sg", + "canadameet.com", + "canalporno.com", + "cantonese.asia", + "canyu.org", + "cao.im", + "caobian.info", + "caochangqing.com", + "cap.org.hk", + "carabinasypistolas.com", + "cardinalkungfoundation.org", + "careerengine.us", + "carfax.com", + "cari.com.my", + "caribbeancom.com", + "carmotorshow.com", + "carrd.co", + "carryzhou.com", + "cartoonmovement.com", + "casadeltibetbcn.org", + "casatibet.org.mx", + "casinobellini.com", + "casinoking.com", + "casinoriva.com", + "castbox.fm", + "catch22.net", + "catchgod.com", + "catfightpayperview.xxx", + "catholic.org.hk", + "catholic.org.tw", + "cathvoice.org.tw", + "cato.org", + "cattt.com", + "cbc.ca", + "cbsnews.com", + "cbtc.org.hk", + "cc.com", + "cccat.cc", + "cccat.co", + "ccdtr.org", + "cchere.com", + "ccim.org", + "cclife.ca", + "cclife.org", + "cclifefl.org", + "ccthere.com", + "ccthere.net", + "cctmweb.net", + "cctongbao.com", + "ccue.ca", + "ccue.com", + "ccvoice.ca", + "ccw.org.tw", + "cdbook.org", + "cdcparty.com", + "cdef.org", + "cdig.info", + "cdjp.org", + "cdnews.com.tw", + "cdninstagram.com", + "cdp1989.org", + "cdp1998.org", + "cdp2006.org", + "cdpeu.org", + "cdpusa.org", + "cdpweb.org", + "cdpwu.org", + "cdw.com", + "cecc.gov", + "cellulo.info", + "cenews.eu", + "centauro.com.br", + "centerforhumanreprod.com", + "centralnation.com", + "centurys.net", + "certificate-transparency.org", + "cfhks.org.hk", + "cfos.de", + "cfr.org", + "cftfc.com", + "cgdepot.org", + "cgst.edu", + "change.org", + "changeip.name", + "changeip.net", + "changeip.org", + "changp.com", + "changsa.net", + "channelnewsasia.com", + "chaoex.com", + "chapm25.com", + "chatnook.com", + "chaturbate.com", + "checkgfw.com", + "chengmingmag.com", + "chenguangcheng.com", + "chenpokong.com", + "chenpokong.net", + "chenpokongvip.com", + "cherrysave.com", + "chhongbi.org", + "chicagoncmtv.com", + "china-mmm.net", + "china-review.com.ua", + "china-week.com", + "china101.com", + "china18.org", + "china21.com", + "china21.org", + "china5000.us", + "chinaaffairs.org", + "chinaaid.me", + "chinaaid.net", + "chinaaid.org", + "chinaaid.us", + "chinachange.org", + "chinachannel.hk", + "chinacitynews.be", + "chinacomments.org", + "chinadialogue.net", + "chinadigitaltimes.net", + "chinaelections.org", + "chinaeweekly.com", + "chinafreepress.org", + "chinagate.com", + "chinageeks.org", + "chinagfw.org", + "chinagonet.com", + "chinagreenparty.org", + "chinahorizon.org", + "chinahush.com", + "chinainperspective.com", + "chinainterimgov.org", + "chinalaborwatch.org", + "chinalawandpolicy.com", + "chinalawtranslate.com", + "chinamule.com", + "chinamz.org", + "chinanewscenter.com", + "chinapost.com.tw", + "chinapress.com.my", + "chinarightsia.org", + "chinasmile.net", + "chinasocialdemocraticparty.com", + "chinasoul.org", + "chinasucks.net", + "chinatimes.com", + "chinatopsex.com", + "chinatown.com.au", + "chinatweeps.com", + "chinaway.org", + "chinaworker.info", + "chinaxchina.com", + "chinayouth.org.hk", + "chinayuanmin.org", + "chinese-hermit.net", + "chinese-leaders.org", + "chinese-memorial.org", + "chinesedaily.com", + "chinesedailynews.com", + "chinesedemocracy.com", + "chinesegay.org", + "chinesen.de", + "chinesenews.net.au", + "chinesepen.org", + "chineseradioseattle.com", + "chinesetalks.net", + "chineseupress.com", + "chingcheong.com", + "chinman.net", + "chithu.org", + "chobit.cc", + "chosun.com", + "chrdnet.com", + "christianfreedom.org", + "christianstudy.com", + "christiantimes.org.hk", + "christusrex.org", + "chrlawyers.hk", + "chrome.com", + "chromecast.com", + "chromeenterprise.google", + "chromeexperiments.com", + "chromercise.com", + "chromestatus.com", + "chromium.org", + "chuang-yen.org", + "chubold.com", + "chubun.com", + "churchinhongkong.org", + "chushigangdrug.ch", + "cienen.com", + "cineastentreff.de", + "cipfg.org", + "circlethebayfortibet.org", + "cirosantilli.com", + "citizencn.com", + "citizenlab.ca", + "citizenlab.org", + "citizenscommission.hk", + "citizensradio.org", + "city365.ca", + "city9x.com", + "citypopulation.de", + "citytalk.tw", + "civicparty.hk", + "civildisobediencemovement.org", + "civilhrfront.org", + "civiliangunner.com", + "civilmedia.tw", + "civisec.org", + "cjb.net", + "ck101.com", + "clarionproject.org", + "classicalguitarblog.net", + "clb.org.hk", + "cleansite.biz", + "cleansite.info", + "cleansite.us", + "clearharmony.net", + "clearsurance.com", + "clearwisdom.net", + "clementine-player.org", + "clinica-tibet.ru", + "clipfish.de", + "cloakpoint.com", + "cloudcone.com", + "cloudflare-ipfs.com", + "cloudfront.net", + "club1069.com", + "clubhouseapi.com", + "clyp.it", + "cmcn.org", + "cmi.org.tw", + "cmoinc.org", + "cms.gov", + "cmu.edu", + "cmule.com", + "cmule.org", + "cmx.im", + "cn-proxy.com", + "cn.com", + "cn6.eu", + "cna.com.tw", + "cnabc.com", + "cnd.org", + "cnet.com", + "cnex.org.cn", + "cnineu.com", + "cnitter.com", + "cnn.com", + "cnpolitics.org", + "cnproxy.com", + "cnyes.com", + "co.tv", + "coat.co.jp", + "cobinhood.com", + "cochina.co", + "cochina.org", + "code1984.com", + "codeplex.com", + "codeshare.io", + "codeskulptor.org", + "coin2co.in", + "coinbene.com", + "coinegg.com", + "coinex.com", + "coingecko.com", + "coingi.com", + "coinmarketcap.com", + "coinrail.co.kr", + "cointiger.com", + "cointobe.com", + "coinut.com", + "collateralmurder.com", + "collateralmurder.org", + "com.google", + "com.ru", + "com.uk", + "comedycentral.com", + "comefromchina.com", + "comic-mega.me", + "comico.tw", + "commandarms.com", + "commentshk.com", + "communistcrimes.org", + "communitychoicecu.com", + "comparitech.com", + "compileheart.com", + "compress.to", + "compython.net", + "conoha.jp", + "constitutionalism.solutions", + "contactmagazine.net", + "convio.net", + "coobay.com", + "cool18.com", + "coolaler.com", + "coolder.com", + "coolloud.org.tw", + "coolncute.com", + "coolstuffinc.com", + "corumcollege.com", + "cos-moe.com", + "cosplayjav.pl", + "costco.com", + "cotweet.com", + "counter.social", + "coursehero.com", + "cpj.org", + "cq99.us", + "crackle.com", + "crazys.cc", + "crazyshit.com", + "crbug.com", + "crchina.org", + "crd-net.org", + "creaders.net", + "creadersnet.com", + "creativelab5.com", + "crisisresponse.google", + "cristyli.com", + "crocotube.com", + "crossfire.co.kr", + "crossthewall.net", + "crossvpn.net", + "croxyproxy.com", + "crrev.com", + "crucial.com", + "crunchyroll.com", + "cryptographyengineering.com", + "csdparty.com", + "csis.org", + "csmonitor.com", + "csuchen.de", + "csw.org.uk", + "ct.org.tw", + "ctao.org", + "ctfriend.net", + "ctitv.com.tw", + "ctowc.org", + "cts.com.tw", + "ctwant.com", + "cuhk.edu.hk", + "cuhkacs.org", + "cuihua.org", + "cuiweiping.net", + "culture.tw", + "cumlouder.com", + "curvefish.com", + "cusp.hk", + "cusu.hk", + "cutscenes.net", + "cw.com.tw", + "cwb.gov.tw", + "cyberctm.com", + "cyberghostvpn.com", + "cynscribe.com", + "cytode.us", + "cz.cc", + "d-fukyu.com", + "d0z.net", + "d100.net", + "d2bay.com", + "d2pass.com", + "dabr.co.uk", + "dabr.eu", + "dabr.me", + "dabr.mobi", + "dadazim.com", + "dadi360.com", + "dafabet.com", + "dafagood.com", + "dafahao.com", + "dafoh.org", + "daftporn.com", + "dagelijksestandaard.nl", + "daidostup.ru", + "dailidaili.com", + "dailymail.co.uk", + "dailymotion.com", + "dailysabah.com", + "dailyview.tw", + "daiphapinfo.net", + "dajiyuan.com", + "dajiyuan.de", + "dajiyuan.eu", + "dalailama-archives.org", + "dalailama.com", + "dalailama.mn", + "dalailama.ru", + "dalailama80.org", + "dalailamacenter.org", + "dalailamafellows.org", + "dalailamafilm.com", + "dalailamafoundation.org", + "dalailamahindi.com", + "dalailamainaustralia.org", + "dalailamajapanese.com", + "dalailamaprotesters.info", + "dalailamaquotes.org", + "dalailamatrust.org", + "dalailamavisit.org.nz", + "dalailamaworld.com", + "dalianmeng.org", + "daliulian.org", + "danke4china.net", + "daolan.net", + "darktech.org", + "darktoy.net", + "darpa.mil", + "darrenliuwei.com", + "dastrassi.org", + "data-vocabulary.org", + "data.gov.tw", + "daum.net", + "david-kilgour.com", + "dawangidc.com", + "daxa.cn", + "dayabook.com", + "daylife.com", + "db.tt", + "dbc.hk", + "dbgjd.com", + "dcard.tw", + "dcmilitary.com", + "ddc.com.tw", + "ddhw.info", + "ddns.info", + "ddns.me.uk", + "ddns.mobi", + "ddns.ms", + "ddns.name", + "ddns.net", + "ddns.us", + "de-sci.org", + "deadline.com", + "deaftone.com", + "debug.com", + "deck.ly", + "decodet.co", + "deepmind.com", + "deezer.com", + "definebabe.com", + "deja.com", + "delcamp.net", + "delicious.com", + "democrats.org", + "demosisto.hk", + "depositphotos.com", + "desc.se", + "design.google", + "desipro.de", + "dessci.com", + "destroy-china.jp", + "deutsche-welle.de", + "deviantart.com", + "deviantart.net", + "devio.us", + "devpn.com", + "dfas.mil", + "dfn.org", + "dharamsalanet.com", + "dharmakara.net", + "dhcp.biz", + "diaoyuislands.org", + "difangwenge.org", + "digiland.tw", + "digisfera.com", + "digitalnomadsproject.org", + "diigo.com", + "dilber.se", + "dingchin.com.tw", + "dipity.com", + "directcreative.com", + "discoins.com", + "disconnect.me", + "discord.com", + "discord.gg", + "discordapp.com", + "discordapp.net", + "discuss.com.hk", + "discuss4u.com", + "dish.com", + "disp.cc", + "disqus.com", + "dit-inc.us", + "dizhidizhi.com", + "dizhuzhishang.com", + "djangosnippets.org", + "djorz.com", + "dl-laby.jp", + "dlive.tv", + "dlsite.com", + "dlsite.jp", + "dlyoutube.com", + "dm530.net", + "dmc.nico", + "dmcdn.net", + "dmhy.org", + "dmm.co.jp", + "dmm.com", + "dns-dns.com", + "dns-stuff.com", + "dns.google", + "dns04.com", + "dns05.com", + "dns1.us", + "dns2.us", + "dns2go.com", + "dnscrypt.org", + "dnset.com", + "dnsrd.com", + "dnssec.net", + "dnvod.tv", + "doctorvoice.org", + "documentingreality.com", + "dogfartnetwork.com", + "dojin.com", + "dok-forum.net", + "dolc.de", + "dolf.org.hk", + "dollf.com", + "domain.club.tw", + "domains.google", + "domaintoday.com.au", + "donga.com", + "dongtaiwang.com", + "dongtaiwang.net", + "dongyangjing.com", + "donmai.us", + "dontfilter.us", + "dontmovetochina.com", + "dorjeshugden.com", + "dotplane.com", + "dotsub.com", + "dotvpn.com", + "doub.io", + "doubibackup.com", + "doubmirror.cf", + "dougscripts.com", + "douhokanko.net", + "doujincafe.com", + "dowei.org", + "dowjones.com", + "dphk.org", + "dpp.org.tw", + "dpr.info", + "dragonex.io", + "dragonsprings.org", + "dreamamateurs.com", + "drepung.org", + "drgan.net", + "drmingxia.org", + "dropbooks.tv", + "dropbox.com", + "dropboxapi.com", + "dropboxusercontent.com", + "drsunacademy.com", + "drtuber.com", + "dscn.info", + "dsmtp.com", + "dstk.dk", + "dtdns.net", + "dtiblog.com", + "dtic.mil", + "dtwang.org", + "duanzhihu.com", + "dubox.com", + "duck.com", + "duckdns.org", + "duckduckgo.com", + "duckload.com", + "duckmylife.com", + "duga.jp", + "duihua.org", + "duihuahrjournal.org", + "dumb1.com", + "dunyabulteni.net", + "duoweitimes.com", + "duping.net", + "duplicati.com", + "dupola.com", + "dupola.net", + "dushi.ca", + "duyaoss.com", + "dvdpac.com", + "dvorak.org", + "dw-world.com", + "dw-world.de", + "dw.com", + "dw.de", + "dwheeler.com", + "dwnews.com", + "dwnews.net", + "dxiong.com", + "dynamic-dns.net", + "dynamicdns.biz", + "dynamicdns.co.uk", + "dynamicdns.me.uk", + "dynamicdns.org.uk", + "dynawebinc.com", + "dyndns-ip.com", + "dyndns-pics.com", + "dyndns.org", + "dyndns.pro", + "dynssl.com", + "dynu.com", + "dynu.net", + "dysfz.cc", + "dzze.com", + "e-classical.com.tw", + "e-gold.com", + "e-hentai.org", + "e-hentaidb.com", + "e-info.org.tw", + "e-traderland.net", + "e-zone.com.hk", + "e123.hk", + "earlytibet.com", + "earthcam.com", + "earthvpn.com", + "eastern-ark.com", + "easternlightning.org", + "eastturkestan.com", + "eastturkistan-gov.org", + "eastturkistan.net", + "eastturkistancc.org", + "eastturkistangovernmentinexile.us", + "easyca.ca", + "easypic.com", + "ebc.net.tw", + "ebony-beauty.com", + "ebookbrowse.com", + "ebookee.com", + "ebtcbank.com", + "ecfa.org.tw", + "echainhost.com", + "echofon.com", + "ecimg.tw", + "ecministry.net", + "economist.com", + "ecstart.com", + "edgecastcdn.net", + "edgesuite.net", + "edicypages.com", + "edmontonchina.cn", + "edmontonservice.com", + "edns.biz", + "edoors.com", + "edubridge.com", + "edupro.org", + "eesti.ee", + "eevpn.com", + "efcc.org.hk", + "effers.com", + "efksoft.com", + "efukt.com", + "eic-av.com", + "eireinikotaerukai.com", + "eisbb.com", + "eksisozluk.com", + "electionsmeter.com", + "elgoog.im", + "ellawine.org", + "elpais.com", + "eltondisney.com", + "emaga.com", + "emanna.com", + "emilylau.org.hk", + "emory.edu", + "empfil.com", + "emule-ed2k.com", + "emulefans.com", + "emuparadise.me", + "enanyang.my", + "encrypt.me", + "encyclopedia.com", + "enewstree.com", + "enfal.de", + "engadget.com", + "engagedaily.org", + "englishforeveryone.org", + "englishfromengland.co.uk", + "englishpen.org", + "enlighten.org.tw", + "entermap.com", + "environment.google", + "epa.gov.tw", + "epac.to", + "episcopalchurch.org", + "epochhk.com", + "epochtimes-bg.com", + "epochtimes-romania.com", + "epochtimes.co.il", + "epochtimes.co.kr", + "epochtimes.com", + "epochtimes.cz", + "epochtimes.de", + "epochtimes.fr", + "epochtimes.ie", + "epochtimes.it", + "epochtimes.jp", + "epochtimes.ru", + "epochtimes.se", + "epochtimestr.com", + "epochweek.com", + "epochweekly.com", + "eporner.com", + "equinenow.com", + "erabaru.net", + "eracom.com.tw", + "eraysoft.com.tr", + "erepublik.com", + "erights.net", + "eriversoft.com", + "erktv.com", + "ernestmandel.org", + "erodaizensyu.com", + "erodoujinlog.com", + "erodoujinworld.com", + "eromanga-kingdom.com", + "eromangadouzin.com", + "eromon.net", + "eroprofile.com", + "eroticsaloon.net", + "eslite.com", + "esmtp.biz", + "esu.dog", + "esu.im", + "esurance.com", + "etaa.org.au", + "etadult.com", + "etaiwannews.com", + "etherdelta.com", + "etherscan.io", + "etizer.org", + "etokki.com", + "etowns.net", + "etowns.org", + "etsy.com", + "ettoday.net", + "etvonline.hk", + "eu.org", + "eucasino.com", + "eulam.com", + "eurekavpt.com", + "euronews.com", + "europa.eu", + "evozi.com", + "evschool.net", + "exblog.co.jp", + "exblog.jp", + "exchristian.hk", + "excite.co.jp", + "exhentai.org", + "exmo.com", + "exmormon.org", + "expatshield.com", + "expecthim.com", + "expekt.com", + "experts-univers.com", + "exploader.net", + "expofutures.com", + "expressvpn.com", + "exrates.me", + "extmatrix.com", + "extremetube.com", + "exx.com", + "eyevio.jp", + "eyny.com", + "ezpc.tk", + "ezpeer.com", + "ezua.com", + "f8.com", + "fa.gov.tw", + "facebook.br", + "facebook.com", + "facebook.design", + "facebook.hu", + "facebook.in", + "facebook.net", + "facebook.nl", + "facebook.se", + "facebookmail.com", + "facebookquotes4u.com", + "faceless.me", + "facesofnyfw.com", + "facesoftibetanselfimmolators.info", + "factpedia.org", + "fail.hk", + "faith100.org", + "faithfuleye.com", + "faiththedog.info", + "fakku.net", + "fallenark.com", + "falsefire.com", + "falun-co.org", + "falun-ny.net", + "falunart.org", + "falunasia.info", + "falunau.org", + "falunaz.net", + "falundafa-dc.org", + "falundafa-florida.org", + "falundafa-nc.org", + "falundafa-pa.net", + "falundafa-sacramento.org", + "falundafa.org", + "falundafaindia.org", + "falundafamuseum.org", + "falungong.club", + "falungong.de", + "falungong.org.uk", + "falunhr.org", + "faluninfo.de", + "faluninfo.net", + "falunpilipinas.net", + "falunworld.net", + "familyfed.org", + "famunion.com", + "fan-qiang.com", + "fandom.com", + "fangbinxing.com", + "fangeming.com", + "fangeqiang.com", + "fanglizhi.info", + "fangmincn.org", + "fangong.org", + "fangongheike.com", + "fanhaodang.com", + "fanhaolou.com", + "fanqiang.network", + "fanqiang.tk", + "fanqiangdang.com", + "fanqianghou.com", + "fanqiangyakexi.net", + "fanqiangzhe.com", + "fanswong.com", + "fantv.hk", + "fanyue.info", + "fapdu.com", + "faproxy.com", + "faqserv.com", + "fartit.com", + "farwestchina.com", + "fastestvpn.com", + "fastly.net", + "fastpic.ru", + "fastssh.com", + "faststone.org", + "fatbtc.com", + "favotter.net", + "favstar.fm", + "fawanghuihui.org", + "faydao.com", + "faz.net", + "fb.com", + "fb.me", + "fb.watch", + "fbaddins.com", + "fbcdn.net", + "fbsbx.com", + "fbworkmail.com", + "fc2.com", + "fc2blog.net", + "fc2china.com", + "fc2cn.com", + "fc2web.com", + "fda.gov.tw", + "fdbox.com", + "fdc64.de", + "fdc64.org", + "fdc89.jp", + "feedburner.com", + "feeder.co", + "feedly.com", + "feedx.net", + "feelssh.com", + "feer.com", + "feifeiss.com", + "feitian-california.org", + "feitianacademy.org", + "feixiaohao.com", + "feministteacher.com", + "fengzhenghu.com", + "fengzhenghu.net", + "fevernet.com", + "ff.im", + "fffff.at", + "fflick.com", + "ffvpn.com", + "fgmtv.net", + "fgmtv.org", + "fhreports.net", + "figprayer.com", + "fileflyer.com", + "fileforum.com", + "files2me.com", + "fileserve.com", + "filesor.com", + "fillthesquare.org", + "filmingfortibet.org", + "filthdump.com", + "financetwitter.com", + "finchvpn.com", + "findmespot.com", + "findyoutube.com", + "findyoutube.net", + "fingerdaily.com", + "finler.net", + "firearmsworld.net", + "firebaseio.com", + "firefox.com", + "fireofliberty.org", + "firetweet.io", + "firstfivefollowers.com", + "firstpost.com", + "firstrade.com", + "fizzik.com", + "flagsonline.it", + "flecheinthepeche.fr", + "fleshbot.com", + "fleursdeslettres.com", + "flgg.us", + "flgjustice.org", + "flickr.com", + "flickrhivemind.net", + "flickriver.com", + "fling.com", + "flipboard.com", + "flipkart.com", + "flitto.com", + "flnet.org", + "flog.tw", + "flurry.com", + "flyvpn.com", + "flyzy2005.com", + "fmnnow.com", + "fnac.be", + "fnac.com", + "fochk.org", + "focustaiwan.tw", + "focusvpn.com", + "fofg-europe.net", + "fofg.org", + "fofldfradio.org", + "foolsmountain.com", + "fooooo.com", + "foreignaffairs.com", + "foreignpolicy.com", + "forum4hk.com", + "forums-free.com", + "fotile.me", + "fourthinternational.org", + "foxbusiness.com", + "foxdie.us", + "foxgay.com", + "foxsub.com", + "foxtang.com", + "fpmt-osel.org", + "fpmt.org", + "fpmt.tw", + "fpmtmexico.org", + "fqok.org", + "fqrouter.com", + "franklc.com", + "freakshare.com", + "free-gate.org", + "free-hada-now.org", + "free-proxy.cz", + "free-ss.site", + "free-ssh.com", + "free.fr", + "free4u.com.ar", + "freealim.com", + "freebeacon.com", + "freebearblog.org", + "freebrowser.org", + "freechal.com", + "freechina.net", + "freechina.news", + "freechinaforum.org", + "freechinaweibo.com", + "freeddns.com", + "freeddns.org", + "freedomchina.info", + "freedomcollection.org", + "freedomhouse.org", + "freedomsherald.org", + "freeforums.org", + "freefq.com", + "freefuckvids.com", + "freegao.com", + "freehongkong.org", + "freeilhamtohti.org", + "freekazakhs.org", + "freekwonpyong.org", + "freelotto.com", + "freeman2.com", + "freemoren.com", + "freemorenews.com", + "freemuse.org", + "freenet-china.org", + "freenetproject.org", + "freenewscn.com", + "freeones.com", + "freeopenvpn.com", + "freeoz.org", + "freerk.com", + "freessh.us", + "freetcp.com", + "freetibet.net", + "freetibet.org", + "freetibetanheroes.org", + "freetribe.me", + "freeviewmovies.com", + "freevpn.me", + "freevpn.nl", + "freewallpaper4.me", + "freewebs.com", + "freewechat.com", + "freeweibo.com", + "freewww.biz", + "freewww.info", + "freexinwen.com", + "freeyellow.com", + "freeyoutubeproxy.net", + "frienddy.com", + "friendfeed-media.com", + "friendfeed.com", + "friendfinder.com", + "friends-of-tibet.org", + "friendsoftibet.org", + "fring.com", + "fringenetwork.com", + "from-pr.com", + "from-sd.com", + "fromchinatousa.net", + "frommel.net", + "frontlinedefenders.org", + "frootvpn.com", + "fscked.org", + "fsurf.com", + "ftchinese.com", + "ftp1.biz", + "ftpserver.biz", + "ftv.com.tw", + "ftvnews.com.tw", + "ftx.com", + "fucd.com", + "fuckcnnic.net", + "fuckgfw.org", + "fuckgfw233.org", + "fulione.com", + "fullerconsideration.com", + "fulue.com", + "funf.tw", + "funkyimg.com", + "funp.com", + "fuq.com", + "furbo.org", + "furhhdl.org", + "furinkan.com", + "furl.net", + "futurechinaforum.org", + "futuremessage.org", + "fux.com", + "fuyin.net", + "fuyindiantai.org", + "fuyu.org.tw", + "fw.cm", + "fxcm-chinese.com", + "fxnetworks.com", + "fzh999.com", + "fzh999.net", + "fzlm.com", + "g-area.org", + "g-queen.com", + "g.co", + "g0v.social", + "g6hentai.com", + "gab.com", + "gabocorp.com", + "gaeproxy.com", + "gaforum.org", + "gagaoolala.com", + "galaxymacau.com", + "galenwu.com", + "galstars.net", + "game735.com", + "gamebase.com.tw", + "gamejolt.com", + "gamer.com.tw", + "gamerp.jp", + "gamez.com.tw", + "gamousa.com", + "ganges.com", + "ganjingworld.com", + "gaoming.net", + "gaopi.net", + "gaozhisheng.net", + "gaozhisheng.org", + "gardennetworks.com", + "gardennetworks.org", + "gartlive.com", + "gate-project.com", + "gate.io", + "gatecoin.com", + "gather.com", + "gatherproxy.com", + "gati.org.tw", + "gaybubble.com", + "gaycn.net", + "gayhub.com", + "gaymap.cc", + "gaymenring.com", + "gaytube.com", + "gaywatch.com", + "gazotube.com", + "gcc.org.hk", + "gclooney.com", + "gclubs.com", + "gcmasia.com", + "gcpnews.com", + "gcr.io", + "gdbt.net", + "gdzf.org", + "geek-art.net", + "geekerhome.com", + "geekheart.info", + "gekikame.com", + "gelbooru.com", + "genius.com", + "geocities.co.jp", + "geocities.com", + "geocities.jp", + "geph.io", + "gerefoundation.org", + "get.app", + "get.dev", + "get.how", + "get.page", + "getastrill.com", + "getchu.com", + "getcloak.com", + "getfoxyproxy.org", + "getfreedur.com", + "getgom.com", + "geti2p.net", + "getiton.com", + "getjetso.com", + "getlantern.org", + "getmalus.com", + "getmdl.io", + "getoutline.org", + "getsocialscope.com", + "getsync.com", + "gettr.com", + "gettrials.com", + "gettyimages.com", + "getuploader.com", + "gfbv.de", + "gfgold.com.hk", + "gfsale.com", + "gfw.org.ua", + "gfw.press", + "gfw.report", + "ggpht.com", + "ggssl.com", + "ghidra-sre.org", + "ghostpath.com", + "ghut.org", + "giantessnight.com", + "gifree.com", + "giga-web.jp", + "gigacircle.com", + "giganews.com", + "gigporno.ru", + "girlbanker.com", + "git.io", + "gitbooks.io", + "githack.com", + "github.blog", + "github.com", + "github.io", + "githubassets.com", + "githubusercontent.com", + "gizlen.net", + "gjczz.com", + "glass8.eu", + "globaljihad.net", + "globalmediaoutreach.com", + "globalmuseumoncommunism.org", + "globalrescue.net", + "globaltm.org", + "globalvoices.org", + "globalvoicesonline.org", + "globalvpn.net", + "glock.com", + "gloryhole.com", + "glorystar.me", + "gluckman.com", + "glype.com", + "gmail.com", + "gmgard.com", + "gmhz.org", + "gmiddle.com", + "gmiddle.net", + "gmll.org", + "gmodules.com", + "gmx.net", + "gnci.org.hk", + "gnews.org", + "go-pki.com", + "go141.com", + "goagent.biz", + "goagentplus.com", + "gobet.cc", + "godfootsteps.org", + "godns.work", + "godoc.org", + "godsdirectcontact.co.uk", + "godsdirectcontact.org", + "godsdirectcontact.org.tw", + "godsimmediatecontact.com", + "gofundme.com", + "gogotunnel.com", + "gohappy.com.tw", + "gokbayrak.com", + "golang.org", + "goldbet.com", + "goldbetsports.com", + "golden-ages.org", + "goldeneyevault.com", + "goldenfrog.com", + "goldjizz.com", + "goldstep.net", + "goldwave.com", + "gongm.in", + "gongmeng.info", + "gongminliliang.com", + "gongwt.com", + "goo.gl", + "goo.gle", + "goo.ne.jp", + "gooday.xyz", + "gooddns.info", + "goodhope.school", + "goodreaders.com", + "goodreads.com", + "goodtv.com.tw", + "goodtv.tv", + "goofind.com", + "google.ac", + "google.ad", + "google.ae", + "google.af", + "google.ai", + "google.al", + "google.am", + "google.as", + "google.at", + "google.az", + "google.ba", + "google.be", + "google.bf", + "google.bg", + "google.bi", + "google.bj", + "google.bs", + "google.bt", + "google.by", + "google.ca", + "google.cat", + "google.cd", + "google.cf", + "google.cg", + "google.ch", + "google.ci", + "google.cl", + "google.cm", + "google.cn", + "google.co.ao", + "google.co.bw", + "google.co.ck", + "google.co.cr", + "google.co.id", + "google.co.il", + "google.co.in", + "google.co.jp", + "google.co.ke", + "google.co.kr", + "google.co.ls", + "google.co.ma", + "google.co.mz", + "google.co.nz", + "google.co.th", + "google.co.tz", + "google.co.ug", + "google.co.uk", + "google.co.uz", + "google.co.ve", + "google.co.vi", + "google.co.za", + "google.co.zm", + "google.co.zw", + "google.com", + "google.com.af", + "google.com.ag", + "google.com.ai", + "google.com.ar", + "google.com.au", + "google.com.bd", + "google.com.bh", + "google.com.bn", + "google.com.bo", + "google.com.br", + "google.com.bz", + "google.com.co", + "google.com.cu", + "google.com.cy", + "google.com.do", + "google.com.ec", + "google.com.eg", + "google.com.et", + "google.com.fj", + "google.com.gh", + "google.com.gi", + "google.com.gt", + "google.com.hk", + "google.com.jm", + "google.com.kh", + "google.com.kw", + "google.com.lb", + "google.com.ly", + "google.com.mm", + "google.com.mt", + "google.com.mx", + "google.com.my", + "google.com.na", + "google.com.nf", + "google.com.ng", + "google.com.ni", + "google.com.np", + "google.com.om", + "google.com.pa", + "google.com.pe", + "google.com.pg", + "google.com.ph", + "google.com.pk", + "google.com.pr", + "google.com.py", + "google.com.qa", + "google.com.sa", + "google.com.sb", + "google.com.sg", + "google.com.sl", + "google.com.sv", + "google.com.tj", + "google.com.tr", + "google.com.tw", + "google.com.ua", + "google.com.uy", + "google.com.vc", + "google.com.vn", + "google.cv", + "google.cz", + "google.de", + "google.dev", + "google.dj", + "google.dk", + "google.dm", + "google.dz", + "google.ee", + "google.es", + "google.eu", + "google.fi", + "google.fm", + "google.fr", + "google.ga", + "google.ge", + "google.gg", + "google.gl", + "google.gm", + "google.gp", + "google.gr", + "google.gy", + "google.hk", + "google.hn", + "google.hr", + "google.ht", + "google.hu", + "google.ie", + "google.im", + "google.iq", + "google.is", + "google.it", + "google.it.ao", + "google.je", + "google.jo", + "google.kg", + "google.ki", + "google.kz", + "google.la", + "google.li", + "google.lk", + "google.lt", + "google.lu", + "google.lv", + "google.md", + "google.me", + "google.mg", + "google.mk", + "google.ml", + "google.mn", + "google.ms", + "google.mu", + "google.mv", + "google.mw", + "google.mx", + "google.ne", + "google.nl", + "google.no", + "google.nr", + "google.nu", + "google.org", + "google.pl", + "google.pn", + "google.ps", + "google.pt", + "google.ro", + "google.rs", + "google.ru", + "google.rw", + "google.sc", + "google.se", + "google.sh", + "google.si", + "google.sk", + "google.sm", + "google.sn", + "google.so", + "google.sr", + "google.st", + "google.td", + "google.tg", + "google.tk", + "google.tl", + "google.tm", + "google.tn", + "google.to", + "google.tt", + "google.us", + "google.vg", + "google.vn", + "google.vu", + "google.ws", + "googleapis.cn", + "googleapis.com", + "googleapps.com", + "googlearth.com", + "googleartproject.com", + "googleblog.com", + "googlebot.com", + "googlechinawebmaster.com", + "googlecode.com", + "googlecommerce.com", + "googledomains.com", + "googledrive.com", + "googleearth.com", + "googlefiber.net", + "googlegroups.com", + "googlehosted.com", + "googleideas.com", + "googleinsidesearch.com", + "googlelabs.com", + "googlemail.com", + "googlemashups.com", + "googlepagecreator.com", + "googleplay.com", + "googleplus.com", + "googlesile.com", + "googlesource.com", + "googleusercontent.com", + "googlevideo.com", + "googleweblight.com", + "googlezip.net", + "gopetition.com", + "goproxing.net", + "goreforum.com", + "goregrish.com", + "gospelherald.com", + "got-game.org", + "gotdns.ch", + "gotgeeks.com", + "gotrusted.com", + "gotw.ca", + "gov.taipei", + "gr8domain.biz", + "gr8name.biz", + "gradconnection.com", + "grammaly.com", + "grandtrial.org", + "grangorz.org", + "graphis.ne.jp", + "graphql.org", + "gravatar.com", + "greasespot.net", + "great-firewall.com", + "great-roc.org", + "greatfire.org", + "greatfirewall.biz", + "greatfirewallofchina.net", + "greatfirewallofchina.org", + "greatroc.org", + "greatroc.tw", + "greatzhonghua.org", + "greenfieldbookstore.com.hk", + "greenparty.org.tw", + "greenpeace.com.tw", + "greenpeace.org", + "greenreadings.com", + "greenvpn.net", + "greenvpn.org", + "grotty-monday.com", + "grow.google", + "gs-discuss.com", + "gsearch.media", + "gstatic.com", + "gtricks.com", + "gts-vpn.com", + "gtv.org", + "gtv1.org", + "gu-chu-sum.org", + "guaguass.com", + "guaguass.org", + "guancha.org", + "guaneryu.com", + "guangming.com.my", + "guangnianvpn.com", + "guardster.com", + "guishan.org", + "gumroad.com", + "gun-world.net", + "gunsamerica.com", + "gunsandammo.com", + "guo.media", + "guruonline.hk", + "gutteruncensored.com", + "gvlib.com", + "gvm.com.tw", + "gvt0.com", + "gvt1.com", + "gvt3.com", + "gwins.org", + "gwtproject.org", + "gyalwarinpoche.com", + "gyatsostudio.com", + "gzm.tv", + "gzone-anime.info", + "h-china.org", + "h-moe.com", + "h1n1china.org", + "h528.com", + "h5dm.com", + "h5galgame.me", + "hacg.club", + "hacg.in", + "hacg.li", + "hacg.me", + "hacg.red", + "hacken.cc", + "hacker.org", + "hackmd.io", + "hackthatphone.net", + "hahlo.com", + "hakkatv.org.tw", + "handcraftedsoftware.org", + "hanime.tv", + "hanminzu.org", + "hanunyi.com", + "hao.news", + "hao123.com", + "hao123img.com", + "happy-vpn.com", + "haproxy.org", + "hardsextube.com", + "harunyahya.com", + "hasi.wang", + "hautelook.com", + "hautelookcdn.com", + "have8.com", + "hbg.com", + "hbo.com", + "hclips.com", + "hdlt.me", + "hdtvb.net", + "hdzog.com", + "he.net", + "heartyit.com", + "heavy-r.com", + "hec.su", + "hecaitou.net", + "hechaji.com", + "heeact.edu.tw", + "hegre-art.com", + "helixstudios.net", + "helloandroid.com", + "helloqueer.com", + "helloss.pw", + "hellotxt.com", + "hellouk.org", + "helpeachpeople.com", + "helplinfen.com", + "helpster.de", + "helpuyghursnow.org", + "helpzhuling.org", + "hentai.to", + "hentaitube.tv", + "hentaivideoworld.com", + "heqinglian.net", + "here.com", + "heritage.org", + "heroku.com", + "heungkongdiscuss.com", + "hexieshe.com", + "hexieshe.xyz", + "hexxeh.net", + "heyuedi.com", + "heywire.com", + "heyzo.com", + "hgseav.com", + "hhdcb3office.org", + "hhthesakyatrizin.org", + "hi-on.org.tw", + "hidden-advent.org", + "hide.me", + "hidecloud.com", + "hidein.net", + "hideipvpn.com", + "hideman.net", + "hideme.nl", + "hidemy.name", + "hidemyass.com", + "hidemycomp.com", + "higfw.com", + "highpeakspureearth.com", + "highrockmedia.com", + "hightail.com", + "hihiforum.com", + "hihistory.net", + "hiitch.com", + "hikinggfw.org", + "hilive.tv", + "himalayan-foundation.org", + "himalayanglacier.com", + "himemix.com", + "himemix.net", + "hinet.net", + "hitbtc.com", + "hitomi.la", + "hiwifi.com", + "hizb-ut-tahrir.info", + "hizb-ut-tahrir.org", + "hizbuttahrir.org", + "hjclub.info", + "hk-pub.com", + "hk01.com", + "hk32168.com", + "hkacg.com", + "hkacg.net", + "hkatvnews.com", + "hkbc.net", + "hkbf.org", + "hkbookcity.com", + "hkchronicles.com", + "hkchurch.org", + "hkci.org.hk", + "hkcmi.edu", + "hkcnews.com", + "hkcoc.com", + "hkctu.org.hk", + "hkdailynews.com.hk", + "hkday.net", + "hkdc.us", + "hkdf.org", + "hkej.com", + "hkepc.com", + "hket.com", + "hkfaa.com", + "hkfreezone.com", + "hkfront.org", + "hkgalden.com", + "hkgolden.com", + "hkgpao.com", + "hkgreenradio.org", + "hkheadline.com", + "hkhkhk.com", + "hkhrc.org.hk", + "hkhrm.org.hk", + "hkip.org.uk", + "hkja.org.hk", + "hkjc.com", + "hkjp.org", + "hklft.com", + "hklts.org.hk", + "hkmap.live", + "hkopentv.com", + "hkpeanut.com", + "hkptu.org", + "hkreporter.com", + "hku.hk", + "hkusu.net", + "hkvwet.com", + "hkwcc.org.hk", + "hkzone.org", + "hmoegirl.com", + "hmonghot.com", + "hmv.co.jp", + "hmvdigital.ca", + "hmvdigital.com", + "hnjhj.com", + "hnntube.com", + "hola.com", + "hola.org", + "holymountaincn.com", + "holyspiritspeaks.org", + "homedepot.com", + "homeip.net", + "homeperversion.com", + "homeservershow.com", + "honeynet.org", + "hongkongfp.com", + "hongmeimei.com", + "hongzhi.li", + "honven.xyz", + "hootsuite.com", + "hoover.org", + "hoovers.com", + "hopedialogue.org", + "hopto.org", + "hornygamer.com", + "hornytrip.com", + "horrorporn.com", + "hotair.com", + "hotav.tv", + "hotels.cn", + "hotfrog.com.tw", + "hotgoo.com", + "hotpornshow.com", + "hotpot.hk", + "hotshame.com", + "hotspotshield.com", + "hottg.com", + "hotvpn.com", + "hougaige.com", + "howtoforge.com", + "hoxx.com", + "hpa.gov.tw", + "hqcdp.org", + "hqjapanesesex.com", + "hqmovies.com", + "hrcchina.org", + "hrcir.com", + "hrea.org", + "hrichina.org", + "hrtsea.com", + "hrw.org", + "hrweb.org", + "hsjp.net", + "hsselite.com", + "hst.net.tw", + "hstern.net", + "hstt.net", + "ht.ly", + "htkou.net", + "htl.li", + "html5rocks.com", + "https443.net", + "https443.org", + "hua-yue.net", + "huaglad.com", + "huanghuagang.org", + "huangyiyu.com", + "huaren.us", + "huaren4us.com", + "huashangnews.com", + "huasing.org", + "huaxia-news.com", + "huaxiabao.org", + "huaxin.ph", + "huayuworld.org", + "hudatoriq.web.id", + "hudson.org", + "huffingtonpost.com", + "hugoroy.eu", + "huhaitai.com", + "huhamhire.com", + "huhangfei.com", + "huiyi.in", + "hulkshare.com", + "hulu.com", + "huluim.com", + "hung-ya.com", + "hungerstrikeforaids.org", + "huobi.co", + "huobi.com", + "huobi.me", + "huobi.pro", + "huobi.sc", + "huobipro.com", + "huping.net", + "hurgokbayrak.com", + "hurriyet.com.tr", + "hustler.com", + "hustlercash.com", + "hut2.ru", + "hutianyi.net", + "hutong9.net", + "huyandex.com", + "hwadzan.tw", + "hwayue.org.tw", + "hwinfo.com", + "hxwk.org", + "hxwq.org", + "hybrid-analysis.com", + "hyperrate.com", + "hyread.com.tw", + "i-cable.com", + "i-part.com.tw", + "i-scmp.com", + "i1.hk", + "i2p2.de", + "i2runner.com", + "i818hk.com", + "iam.soy", + "iamtopone.com", + "iask.bz", + "iask.ca", + "iav19.com", + "ibiblio.org", + "ibit.am", + "iblist.com", + "iblogserv-f.net", + "ibros.org", + "ibtimes.com", + "ibvpn.com", + "icams.com", + "icerocket.com", + "icij.org", + "icl-fi.org", + "icoco.com", + "iconfactory.net", + "iconpaper.org", + "icu-project.org", + "idaiwan.com", + "idemocracy.asia", + "identi.ca", + "idiomconnection.com", + "idlcoyote.com", + "idouga.com", + "idreamx.com", + "idsam.com", + "ieasy5.com", + "ied2k.net", + "ienergy1.com", + "iepl.us", + "ifanqiang.com", + "ifcss.org", + "ifjc.org", + "ifreewares.com", + "ift.tt", + "igcd.net", + "igfw.net", + "igfw.tech", + "igmg.de", + "ignitedetroit.net", + "igoogle.com", + "igotmail.com.tw", + "igvita.com", + "ihakka.net", + "ihao.org", + "iicns.com", + "ikstar.com", + "ikwb.com", + "ilbe.com", + "ilhamtohtiinstitute.org", + "illusionfactory.com", + "ilove80.be", + "ilovelongtoes.com", + "im.tv", + "im88.tw", + "imageab.com", + "imagefap.com", + "imageflea.com", + "images-gaytube.com", + "imageshack.us", + "imagevenue.com", + "imagezilla.net", + "imb.org", + "imdb.com", + "img.ly", + "imgchili.net", + "imgmega.com", + "imgur.com", + "imkev.com", + "imlive.com", + "immigration.gov.tw", + "immoral.jp", + "impact.org.au", + "impp.mn", + "in-disguise.com", + "in.com", + "in99.org", + "incapdns.net", + "incloak.com", + "incredibox.fr", + "independent.co.uk", + "indiablooms.com", + "indianarrative.com", + "indiandefensenews.in", + "indiatimes.com", + "indiemerch.com", + "info-graf.fr", + "informer.com", + "initiativesforchina.org", + "inkui.com", + "inmediahk.net", + "innermongolia.org", + "inoreader.com", + "inote.tw", + "insecam.org", + "inside.com.tw", + "insidevoa.com", + "instagram.com", + "instanthq.com", + "institut-tibetain.org", + "internet.org", + "internetdefenseleague.org", + "internetfreedom.org", + "internetpopculture.com", + "inthenameofconfuciusmovie.com", + "inxian.com", + "iownyour.biz", + "iownyour.org", + "ipalter.com", + "ipfire.org", + "ipfs.io", + "iphone4hongkong.com", + "iphonehacks.com", + "iphonetaiwan.org", + "iphonix.fr", + "ipicture.ru", + "ipjetable.net", + "ipobar.com", + "ipoock.com", + "iportal.me", + "ippotv.com", + "ipredator.se", + "iptv.com.tw", + "iptvbin.com", + "ipvanish.com", + "iqiyi.com", + "iredmail.org", + "irib.ir", + "ironpython.net", + "ironsocket.com", + "is-a-hunter.com", + "is.gd", + "isaacmao.com", + "isasecret.com", + "isgreat.org", + "islahhaber.net", + "islam.org.hk", + "islamawareness.net", + "islamhouse.com", + "islamicity.com", + "islamicpluralism.org", + "islamtoday.net", + "ismaelan.com", + "ismalltits.com", + "ismprofessional.net", + "isohunt.com", + "israbox.com", + "issuu.com", + "istars.co.nz", + "istarshine.com", + "istef.info", + "istiqlalhewer.com", + "istockphoto.com", + "isunaffairs.com", + "isuntv.com", + "isupportuyghurs.org", + "itaboo.info", + "itaiwan.gov.tw", + "italiatibet.org", + "itasoftware.com", + "itemdb.com", + "ithome.com.tw", + "itsaol.com", + "itshidden.com", + "itsky.it", + "itweet.net", + "iu45.com", + "iuhrdf.org", + "iuksky.com", + "ivacy.com", + "iverycd.com", + "ivpn.net", + "ixquick.com", + "ixxx.com", + "iyouport.com", + "iyouport.org", + "izaobao.us", + "izihost.org", + "izles.net", + "izlesem.org", + "j.mp", + "jable.tv", + "jackjia.com", + "jamaat.org", + "jamestown.org", + "jamyangnorbu.com", + "jandyx.com", + "janwongphoto.com", + "japan-whores.com", + "japantimes.co.jp", + "jav.com", + "jav101.com", + "jav2be.com", + "jav68.tv", + "javakiba.org", + "javbus.com", + "javfor.me", + "javhd.com", + "javhip.com", + "javhub.net", + "javhuge.com", + "javlibrary.com", + "javmobile.net", + "javmoo.com", + "javmoo.xyz", + "javseen.com", + "javtag.com", + "javzoo.com", + "jbtalks.cc", + "jbtalks.com", + "jbtalks.my", + "jcpenney.com", + "jdwsy.com", + "jeanyim.com", + "jetos.com", + "jex.com", + "jfqu36.club", + "jfqu37.xyz", + "jgoodies.com", + "jiangweiping.com", + "jiaoyou8.com", + "jichangtj.com", + "jiehua.cz", + "jiepang.com", + "jieshibaobao.com", + "jigglegifs.com", + "jigong1024.com", + "jigsy.com", + "jihadology.net", + "jiji.com", + "jims.net", + "jinbushe.org", + "jingpin.org", + "jingsim.org", + "jinhai.de", + "jinpianwang.com", + "jinroukong.com", + "jintian.net", + "jinx.com", + "jiruan.net", + "jitouch.com", + "jizzthis.com", + "jjgirls.com", + "jkb.cc", + "jkforum.net", + "jkub.com", + "jma.go.jp", + "jmscult.com", + "joachims.org", + "jobso.tv", + "joinbbs.net", + "joinclubhouse.com", + "joinmastodon.org", + "joins.com", + "jornaldacidadeonline.com.br", + "journalchretien.net", + "journalofdemocracy.org", + "joymiihub.com", + "joyourself.com", + "jp.net", + "jpopforum.net", + "jqueryui.com", + "jsdelivr.net", + "jshell.net", + "jtvnw.net", + "jubushoushen.com", + "juhuaren.com", + "jukujo-club.com", + "juliepost.com", + "juliereyc.com", + "junauza.com", + "june4commemoration.org", + "junefourth-20.net", + "jungleheart.com", + "junglobal.net", + "juoaa.com", + "justdied.com", + "justfreevpn.com", + "justicefortenzin.org", + "justmysocks1.net", + "justpaste.it", + "justtristan.com", + "juyuange.org", + "juziyue.com", + "jwmusic.org", + "jyxf.net", + "k-doujin.net", + "ka-wai.com", + "kadokawa.co.jp", + "kagyu.org", + "kagyu.org.za", + "kagyumonlam.org", + "kagyunews.com.hk", + "kagyuoffice.org", + "kagyuoffice.org.tw", + "kaiyuan.de", + "kakao.com", + "kalachakralugano.org", + "kangye.org", + "kankan.today", + "kannewyork.com", + "kanshifang.com", + "kantie.org", + "kanzhongguo.com", + "kanzhongguo.eu", + "kaotic.com", + "karayou.com", + "karkhung.com", + "karmapa-teachings.org", + "karmapa.org", + "kawaiikawaii.jp", + "kawase.com", + "kba-tx.org", + "kcoolonline.com", + "kebrum.com", + "kechara.com", + "keepandshare.com", + "keezmovies.com", + "kendatire.com", + "kendincos.net", + "kenengba.com", + "keontech.net", + "kepard.com", + "keso.cn", + "kex.com", + "keycdn.com", + "khabdha.org", + "khatrimaza.org", + "khmusic.com.tw", + "kichiku-doujinko.com", + "kik.com", + "killwall.com", + "kimy.com.tw", + "kindleren.com", + "kingdomsalvation.org", + "kinghost.com", + "kingstone.com.tw", + "kink.com", + "kinmen.org.tw", + "kinmen.travel", + "kinokuniya.com", + "kir.jp", + "kissbbao.cn", + "kiwi.kz", + "kk-whys.co.jp", + "kkbox.com", + "kknews.cc", + "klip.me", + "kmuh.org.tw", + "knowledgerush.com", + "knowyourmeme.com", + "kobo.com", + "kobobooks.com", + "kodingen.com", + "kompozer.net", + "konachan.com", + "kone.com", + "koolsolutions.com", + "koornk.com", + "koranmandarin.com", + "korenan2.com", + "kqes.net", + "krtco.com.tw", + "ksdl.org", + "ksnews.com.tw", + "kspcoin.com", + "ktzhk.com", + "kucoin.com", + "kui.name", + "kukuku.uk", + "kun.im", + "kurashsultan.com", + "kurtmunger.com", + "kusocity.com", + "kwcg.ca", + "kwok7.com", + "kwongwah.com.my", + "kxsw.life", + "kyofun.com", + "kyohk.net", + "kyoyue.com", + "kyzyhello.com", + "kzeng.info", + "la-forum.org", + "labiennale.org", + "ladbrokes.com", + "lagranepoca.com", + "lala.im", + "lalulalu.com", + "lama.com.tw", + "lamayeshe.com", + "lamenhu.com", + "lamnia.co.uk", + "lamrim.com", + "landofhope.tv", + "lanterncn.cn", + "lantosfoundation.org", + "laod.cn", + "laogai.org", + "laogairesearch.org", + "laomiu.com", + "laoyang.info", + "laptoplockdown.com", + "laqingdan.net", + "larsgeorge.com", + "lastcombat.com", + "lastfm.es", + "latelinenews.com", + "lausan.hk", + "law.com", + "lbank.info", + "le-vpn.com", + "leafyvpn.net", + "lecloud.net", + "leeao.com.cn", + "lefora.com", + "left21.hk", + "legalporno.com", + "legsjapan.com", + "leirentv.ca", + "leisurecafe.ca", + "leisurepro.com", + "lematin.ch", + "lemonde.fr", + "lenwhite.com", + "leorockwell.com", + "lerosua.org", + "lers.google", + "lesoir.be", + "lester850.info", + "letou.com", + "letscorp.net", + "letsencrypt.org", + "levyhsu.com", + "lflink.com", + "lflinkup.com", + "lflinkup.net", + "lflinkup.org", + "lfpcontent.com", + "lhakar.org", + "lhasocialwork.org", + "liangyou.net", + "liangzhichuanmei.com", + "lianyue.net", + "liaowangxizang.net", + "liberal.org.hk", + "libertytimes.com.tw", + "libraryinformationtechnology.com", + "libredd.it", + "lifemiles.com", + "lighten.org.tw", + "lighti.me", + "lightnovel.cn", + "lightyearvpn.com", + "lihkg.com", + "like.com", + "limiao.net", + "line-apps.com", + "line-scdn.net", + "line.me", + "linglingfa.com", + "lingvodics.com", + "link-o-rama.com", + "linkedin.com", + "linkideo.com", + "linksalpha.com", + "linkuswell.com", + "linpie.com", + "linux.org.hk", + "linuxtoy.org", + "lionsroar.com", + "lipuman.com", + "liquiditytp.com", + "liquidvpn.com", + "list-manage.com", + "listennotes.com", + "listentoyoutube.com", + "listorious.com", + "lithium.com", + "liu-xiaobo.org", + "liudejun.com", + "liuhanyu.com", + "liujianshu.com", + "liuxiaobo.net", + "liuxiaotong.com", + "live.com", + "livecoin.net", + "livedoor.jp", + "liveleak.com", + "livemint.com", + "livestation.com", + "livestream.com", + "livevideo.com", + "livingonline.us", + "livingstream.com", + "liwangyang.com", + "lizhizhuangbi.com", + "lkcn.net", + "llss.me", + "lncn.org", + "load.to", + "lobsangwangyal.com", + "localbitcoins.com", + "localdomain.ws", + "localpresshk.com", + "lockestek.com", + "logbot.net", + "logiqx.com", + "logmein.com", + "logos.com.hk", + "londonchinese.ca", + "longhair.hk", + "longmusic.com", + "longtermly.net", + "longtoes.com", + "lookpic.com", + "looktoronto.com", + "lotsawahouse.org", + "lotuslight.org.hk", + "lotuslight.org.tw", + "loved.hk", + "lovetvshow.com", + "lpsg.com", + "lrfz.com", + "lrip.org", + "lsd.org.hk", + "lsforum.net", + "lsm.org", + "lsmchinese.org", + "lsmkorean.org", + "lsmradio.com", + "lsmwebcast.com", + "lsxszzg.com", + "ltn.com.tw", + "luckydesigner.space", + "luke54.com", + "luke54.org", + "lupm.org", + "lushstories.com", + "luxebc.com", + "lvhai.org", + "lvv2.com", + "lyfhk.net", + "lzjscript.com", + "lzmtnews.org", + "m-sport.co.uk", + "m-team.cc", + "m.me", + "macgamestore.com", + "macrovpn.com", + "macts.com.tw", + "mad-ar.ch", + "madewithcode.com", + "madonna-av.com", + "madrau.com", + "madthumbs.com", + "magic-net.info", + "mahabodhi.org", + "maiio.net", + "mail-archive.com", + "mail.ru", + "mailchimp.com", + "maildns.xyz", + "maiplus.com", + "maizhong.org", + "makemymood.com", + "makkahnewspaper.com", + "malaysiakini.com", + "mamingzhe.com", + "manchukuo.net", + "mandiant.com", + "mangafox.com", + "mangafox.me", + "maniash.com", + "manicur4ik.ru", + "mansion.com", + "mansionpoker.com", + "manta.com", + "manyvoices.news", + "maplew.com", + "marc.info", + "marguerite.su", + "martau.com", + "martincartoons.com", + "martinoei.com", + "martsangkagyuofficial.org", + "maruta.be", + "marxist.com", + "marxist.net", + "marxists.org", + "mash.to", + "maskedip.com", + "mastodon.cloud", + "mastodon.host", + "mastodon.social", + "mastodon.xyz", + "matainja.com", + "material.io", + "mathable.io", + "mathiew-badimon.com", + "matome-plus.com", + "matome-plus.net", + "matrix.org", + "matsushimakaede.com", + "matters.news", + "mattwilcox.net", + "maturejp.com", + "maxing.jp", + "mayimayi.com", + "mcadforums.com", + "mcaf.ee", + "mcfog.com", + "mcreasite.com", + "md-t.org", + "me.me", + "meansys.com", + "media.org.hk", + "mediachinese.com", + "mediafire.com", + "mediafreakcity.com", + "medium.com", + "meetav.com", + "meetup.com", + "mefeedia.com", + "meforum.org", + "mefound.com", + "mega.co.nz", + "mega.io", + "mega.nz", + "megaproxy.com", + "megarotic.com", + "megavideo.com", + "megurineluka.com", + "meizhong.blog", + "meizhong.report", + "meltoday.com", + "memehk.com", + "memorybbs.com", + "memri.org", + "memrijttm.org", + "mercatox.com", + "mercdn.net", + "mercyprophet.org", + "mergersandinquisitions.org", + "meridian-trust.org", + "meripet.biz", + "meripet.com", + "merit-times.com.tw", + "meshrep.com", + "mesotw.com", + "messenger.com", + "metacafe.com", + "metafilter.com", + "metart.com", + "metarthunter.com", + "meteorshowersonline.com", + "metro.taipei", + "metrohk.com.hk", + "metrolife.ca", + "metroradio.com.hk", + "mewe.com", + "meyou.jp", + "meyul.com", + "mfxmedia.com", + "mgoon.com", + "mgstage.com", + "mh4u.org", + "mhradio.org", + "michaelanti.com", + "michaelmarketl.com", + "microvpn.com", + "middle-way.net", + "mihk.hk", + "mihr.com", + "mihua.org", + "mikesoltys.com", + "mikocon.com", + "milph.net", + "milsurps.com", + "mimiai.net", + "mimivip.com", + "mimivv.com", + "mindrolling.org", + "mingdemedia.org", + "minghui-a.org", + "minghui-b.org", + "minghui-school.org", + "minghui.or.kr", + "minghui.org", + "mingjinglishi.com", + "mingjingnews.com", + "mingjingtimes.com", + "mingpao.com", + "mingpaocanada.com", + "mingpaomonthly.com", + "mingpaonews.com", + "mingpaony.com", + "mingpaosf.com", + "mingpaotor.com", + "mingpaovan.com", + "mingshengbao.com", + "minhhue.net", + "miniforum.org", + "ministrybooks.org", + "minzhuhua.net", + "minzhuzhanxian.com", + "minzhuzhongguo.org", + "miroguide.com", + "mirrorbooks.com", + "mirrormedia.mg", + "mist.vip", + "mit.edu", + "mitao.com.tw", + "mitbbs.com", + "mitbbsau.com", + "mixero.com", + "mixi.jp", + "mixpod.com", + "mixx.com", + "mizzmona.com", + "mjib.gov.tw", + "mk5000.com", + "mlcool.com", + "mlzs.work", + "mm-cg.com", + "mmaaxx.com", + "mmmca.com", + "mnewstv.com", + "mobatek.net", + "mobile01.com", + "mobileways.de", + "moby.to", + "mobypicture.com", + "mod.io", + "modernchinastudies.org", + "moeaic.gov.tw", + "moeerolibrary.com", + "moegirl.org", + "mofa.gov.tw", + "mofaxiehui.com", + "mofos.com", + "mog.com", + "mohu.club", + "mohu.ml", + "mohu.rocks", + "mojim.com", + "mol.gov.tw", + "molihua.org", + "monar.ch", + "mondex.org", + "money-link.com.tw", + "moneyhome.biz", + "monitorchina.org", + "monitorware.com", + "monlamit.org", + "monster.com", + "moodyz.com", + "moon.fm", + "moonbbs.com", + "moonbingo.com", + "moptt.tw", + "morbell.com", + "morningsun.org", + "moroneta.com", + "mos.ru", + "motherless.com", + "motiyun.com", + "motor4ik.ru", + "mousebreaker.com", + "movements.org", + "moviefap.com", + "moztw.org", + "mp3buscador.com", + "mpettis.com", + "mpfinance.com", + "mpinews.com", + "mponline.hk", + "mqxd.org", + "mrbasic.com", + "mrbonus.com", + "mrface.com", + "mrslove.com", + "mrtweet.com", + "msa-it.org", + "msguancha.com", + "msha.gov", + "msn.com", + "msn.com.tw", + "mswe1.org", + "mthruf.com", + "mtw.tl", + "mubi.com", + "muchosucko.com", + "mullvad.net", + "multiply.com", + "multiproxy.org", + "multiupload.com", + "mummysgold.com", + "murmur.tw", + "musicade.net", + "muslimvideo.com", + "muzi.com", + "muzi.net", + "muzu.tv", + "mvdis.gov.tw", + "mvg.jp", + "mx981.com", + "my-formosa.com", + "my-private-network.co.uk", + "my-proxy.com", + "my03.com", + "my903.com", + "myactimes.com", + "myanniu.com", + "myaudiocast.com", + "myav.com.tw", + "mybbs.us", + "mybet.com", + "myca168.com", + "mycanadanow.com", + "mychat.to", + "mychinamyhome.com", + "mychinanet.com", + "mychinanews.com", + "mychinese.news", + "mycnnews.com", + "mycould.com", + "mydad.info", + "myddns.com", + "myeasytv.com", + "myeclipseide.com", + "myforum.com.hk", + "myfreecams.com", + "myfreepaysite.com", + "myfreshnet.com", + "myftp.info", + "myftp.name", + "myiphide.com", + "mykomica.org", + "mylftv.com", + "mymaji.com", + "mymediarom.com", + "mymoe.moe", + "mymom.info", + "mymusic.net.tw", + "mynetav.net", + "mynetav.org", + "mynumber.org", + "myparagliding.com", + "mypicture.info", + "mypikpak.com", + "mypop3.net", + "mypop3.org", + "mypopescu.com", + "myradio.hk", + "myreadingmanga.info", + "mysecondarydns.com", + "mysinablog.com", + "myspace.com", + "myspacecdn.com", + "mytalkbox.com", + "mytizi.com", + "mywww.biz", + "myz.info", + "naacoalition.org", + "nabble.com", + "naitik.net", + "nakido.com", + "nakuz.com", + "nalandabodhi.org", + "nalandawest.org", + "namgyal.org", + "namgyalmonastery.org", + "namsisi.com", + "nanyang.com", + "nanyangpost.com", + "nanzao.com", + "naol.ca", + "naol.cc", + "narod.ru", + "nasa.gov", + "nat.gov.tw", + "nat.moe", + "natado.com", + "national-lottery.co.uk", + "nationalawakening.org", + "nationalgeographic.com", + "nationalinterest.org", + "nationalreview.com", + "nationsonline.org", + "nationwide.com", + "naughtyamerica.com", + "naver.jp", + "navy.mil", + "naweeklytimes.com", + "nbc.com", + "nbcnews.com", + "nbtvpn.com", + "nccwatch.org.tw", + "nch.com.tw", + "nchrd.org", + "ncn.org", + "ncol.com", + "nde.de", + "ndi.org", + "ndr.de", + "ned.org", + "nekoslovakia.net", + "neo-miracle.com", + "neowin.net", + "nepusoku.com", + "nesnode.com", + "net-fits.pro", + "netalert.me", + "netbig.com", + "netbirds.com", + "netcolony.com", + "netfirms.com", + "netflav.com", + "netflix.com", + "netflix.net", + "netme.cc", + "netsarang.com", + "netsneak.com", + "network54.com", + "networkedblogs.com", + "networktunnel.net", + "neverforget8964.org", + "new-3lunch.net", + "new-akiba.com", + "new96.ca", + "newcenturymc.com", + "newcenturynews.com", + "newchen.com", + "newgrounds.com", + "newhighlandvision.com", + "newipnow.com", + "newlandmagazine.com.au", + "newnews.ca", + "news100.com.tw", + "newsancai.com", + "newschinacomment.org", + "newscn.org", + "newsdetox.ca", + "newsdh.com", + "newsmagazine.asia", + "newsmax.com", + "newspeak.cc", + "newstamago.com", + "newstapa.org", + "newstarnet.com", + "newstatesman.com", + "newsweek.com", + "newtaiwan.com.tw", + "newtalk.tw", + "newyorker.com", + "newyorktimes.com", + "nexon.com", + "next11.co.jp", + "nextdigital.com.hk", + "nextmag.com.tw", + "nextmedia.com", + "nexton-net.jp", + "nexttv.com.tw", + "nf.id.au", + "nfjtyd.com", + "nflxext.com", + "nflximg.com", + "nflximg.net", + "nflxso.net", + "nflxvideo.net", + "ng.mil", + "nga.mil", + "ngensis.com", + "ngodupdongchung.com", + "nhentai.net", + "nhi.gov.tw", + "nhk-ondemand.jp", + "nic.google", + "nic.gov", + "nicovideo.jp", + "nighost.org", + "nightlife141.com", + "nike.com", + "nikkei.com", + "ninecommentaries.com", + "ning.com", + "ninjacloak.com", + "ninjaproxy.ninja", + "nintendium.com", + "ninth.biz", + "nitter.cc", + "nitter.net", + "niu.moe", + "niusnews.com", + "njactb.org", + "njuice.com", + "nlfreevpn.com", + "nmsl.website", + "nnews.eu", + "no-ip.com", + "no-ip.org", + "nobel.se", + "nobelprize.org", + "nobodycanstop.us", + "nodesnoop.com", + "nofile.io", + "nokogiri.org", + "nokola.com", + "noodlevpn.com", + "norbulingka.org", + "nordstrom.com", + "nordstromimage.com", + "nordstromrack.com", + "nordvpn.com", + "notepad-plus-plus.org", + "nottinghampost.com", + "novelasia.com", + "now.com", + "now.im", + "nownews.com", + "nowtorrents.com", + "noxinfluencer.com", + "noypf.com", + "npa.go.jp", + "npa.gov.tw", + "npnt.me", + "nps.gov", + "npsboost.com", + "nradio.me", + "nrk.no", + "ns01.biz", + "ns01.info", + "ns01.us", + "ns02.biz", + "ns02.info", + "ns02.us", + "ns1.name", + "ns2.name", + "ns3.name", + "nsc.gov.tw", + "ntbk.gov.tw", + "ntbna.gov.tw", + "ntbt.gov.tw", + "ntd.tv", + "ntdtv.ca", + "ntdtv.co.kr", + "ntdtv.com", + "ntdtv.com.tw", + "ntdtv.cz", + "ntdtv.org", + "ntdtv.ru", + "ntdtvla.com", + "ntrfun.com", + "ntsna.gov.tw", + "ntu.edu.tw", + "nu.nl", + "nubiles.net", + "nudezz.com", + "nuexpo.com", + "nukistream.com", + "nurgo-software.com", + "nusatrip.com", + "nutaku.net", + "nutsvpn.work", + "nuuvem.com", + "nuvid.com", + "nuzcom.com", + "nvdst.com", + "nvquan.org", + "nvtongzhisheng.org", + "nwtca.org", + "nyaa.eu", + "nyaa.si", + "nybooks.com", + "nydus.ca", + "nylon-angel.com", + "nylonstockingsonline.com", + "nypost.com", + "nyt.com", + "nytchina.com", + "nytcn.me", + "nytco.com", + "nyti.ms", + "nytimes.com", + "nytimg.com", + "nytlog.com", + "nytstyle.com", + "nzchinese.com", + "nzchinese.net.nz", + "oanda.com", + "oann.com", + "oauth.net", + "observechina.net", + "obutu.com", + "ocaspro.com", + "occupytiananmen.com", + "oclp.hk", + "ocreampies.com", + "ocry.com", + "october-review.org", + "oculus.com", + "oculuscdn.com", + "odysee.com", + "oex.com", + "offbeatchina.com", + "officeoftibet.com", + "ofile.org", + "ogaoga.org", + "ogate.org", + "ohchr.org", + "ohmyrss.com", + "oikos.com.tw", + "oiktv.com", + "oizoblog.com", + "ok.ru", + "okayfreedom.com", + "okex.com", + "okk.tw", + "okx.com", + "olabloga.pl", + "old-cat.net", + "olevod.com", + "olumpo.com", + "olympicwatch.org", + "omct.org", + "omgili.com", + "omni7.jp", + "omnitalk.com", + "omnitalk.org", + "omny.fm", + "omy.sg", + "on.cc", + "on2.com", + "onapp.com", + "onedumb.com", + "onejav.com", + "onion.city", + "onion.ly", + "onlinecha.com", + "onlineyoutube.com", + "onlygayvideo.com", + "onlytweets.com", + "onmoon.com", + "onmoon.net", + "onmypc.biz", + "onmypc.info", + "onmypc.net", + "onmypc.org", + "onmypc.us", + "onthehunt.com", + "ontrac.com", + "oopsforum.com", + "open.com.hk", + "openallweb.com", + "opendemocracy.net", + "opendn.xyz", + "openervpn.in", + "openid.net", + "openleaks.org", + "opensea.io", + "opensource.google", + "opentech.fund", + "openvpn.net", + "openvpn.org", + "openwebster.com", + "openwrt.org.cn", + "opera-mini.net", + "opera.com", + "opus-gaming.com", + "orchidbbs.com", + "organcare.org.tw", + "organharvestinvestigation.net", + "organiccrap.com", + "orgasm.com", + "orgfree.com", + "oricon.co.jp", + "orient-doll.com", + "orientaldaily.com.my", + "orn.jp", + "orzdream.com", + "orzistic.org", + "osfoora.com", + "otcbtc.com", + "otnd.org", + "otto.de", + "otzo.com", + "ourdearamy.com", + "ourhobby.com", + "oursogo.com", + "oursteps.com.au", + "oursweb.net", + "ourtv.hk", + "over-blog.com", + "overcast.fm", + "overdaily.org", + "overplay.net", + "ovi.com", + "ovpn.com", + "ow.ly", + "owind.com", + "owl.li", + "owltail.com", + "oxfordscholarship.com", + "oxid.it", + "oyax.com", + "oyghan.com", + "ozchinese.com", + "ozvoice.org", + "ozxw.com", + "ozyoyo.com", + "pachosting.com", + "pacificpoker.com", + "packetix.net", + "pacopacomama.com", + "padmanet.com", + "page.tl", + "page2rss.com", + "pages.dev", + "pagodabox.com", + "palacemoon.com", + "paldengyal.com", + "paljorpublications.com", + "palmislife.com", + "paltalk.com", + "pandapow.co", + "pandapow.net", + "pandavpn-jp.com", + "pandavpnpro.com", + "pandora.com", + "pandora.tv", + "panluan.net", + "panoramio.com", + "pao-pao.net", + "paper.li", + "paperb.us", + "paradisehill.cc", + "paradisepoker.com", + "parkansky.com", + "parler.com", + "parse.com", + "parsevideo.com", + "partycasino.com", + "partypoker.com", + "passion.com", + "passiontimes.hk", + "paste.ee", + "pastebin.com", + "pastie.org", + "pathtosharepoint.com", + "patreon.com", + "paxful.com", + "pbs.org", + "pbwiki.com", + "pbworks.com", + "pbxes.com", + "pbxes.org", + "pcanywhere.net", + "pcc.gov.tw", + "pcdvd.com.tw", + "pchome.com.tw", + "pcij.org", + "pcloud.com", + "pcstore.com.tw", + "pct.org.tw", + "pdetails.com", + "pdproxy.com", + "peace.ca", + "peacefire.org", + "peacehall.com", + "pearlher.org", + "peeasian.com", + "peing.net", + "pekingduck.org", + "pemulihan.or.id", + "pen.io", + "penchinese.com", + "penchinese.net", + "pengyulong.com", + "penisbot.com", + "pentalogic.net", + "penthouse.com", + "pentoy.hk", + "peoplebookcafe.com", + "peoplenews.tw", + "peopo.org", + "percy.in", + "perfect-privacy.com", + "perfectgirls.net", + "periscope.tv", + "persecutionblog.com", + "persiankitty.com", + "phapluan.org", + "phayul.com", + "philborges.com", + "philly.com", + "phmsociety.org", + "phncdn.com", + "phonegap.com", + "photodharma.net", + "photofocus.com", + "phuquocservices.com", + "picacomic.com", + "picacomiccn.com", + "picasaweb.com", + "picidae.net", + "picturedip.com", + "picturesocial.com", + "pimg.tw", + "pin-cong.com", + "pin6.com", + "pincong.rocks", + "ping.fm", + "pinimg.com", + "pinkrod.com", + "pinoy-n.com", + "pinterest.at", + "pinterest.ca", + "pinterest.co.kr", + "pinterest.co.uk", + "pinterest.com", + "pinterest.com.mx", + "pinterest.de", + "pinterest.dk", + "pinterest.fr", + "pinterest.jp", + "pinterest.nl", + "pinterest.se", + "pipii.tv", + "piposay.com", + "piraattilahti.org", + "piring.com", + "pixelqi.com", + "pixiv.net", + "pixnet.in", + "pixnet.net", + "pk.com", + "pki.goog", + "placemix.com", + "playboy.com", + "playboyplus.com", + "player.fm", + "playno1.com", + "playpcesor.com", + "plays.com.tw", + "plexvpn.pro", + "plixi.com", + "plm.org.hk", + "plunder.com", + "plurk.com", + "plus.codes", + "plus28.com", + "plusbb.com", + "pmatehunter.com", + "pmates.com", + "po2b.com", + "pobieramy.top", + "podbean.com", + "podcast.co", + "podictionary.com", + "pokerstars.com", + "pokerstars.net", + "pokerstrategy.com", + "politicalchina.org", + "politicalconsultation.org", + "politiscales.net", + "poloniex.com", + "polymer-project.org", + "polymerhk.com", + "poolin.com", + "popo.tw", + "popvote.hk", + "popxi.click", + "popyard.com", + "popyard.org", + "porn.com", + "porn2.com", + "porn5.com", + "pornbase.org", + "pornerbros.com", + "pornhd.com", + "pornhost.com", + "pornhub.com", + "pornhubdeutsch.net", + "pornmm.net", + "pornoxo.com", + "pornrapidshare.com", + "pornsharing.com", + "pornsocket.com", + "pornstarclub.com", + "porntube.com", + "porntubenews.com", + "porntvblog.com", + "pornvisit.com", + "port25.biz", + "portablevpn.nl", + "poskotanews.com", + "post01.com", + "post76.com", + "post852.com", + "postadult.com", + "postimg.org", + "potato.im", + "potvpn.com", + "power.com", + "powerapple.com", + "powercx.com", + "powerphoto.org", + "powerpointninja.com", + "pp.ru", + "prayforchina.net", + "premeforwindows7.com", + "premproxy.com", + "presentationzen.com", + "presidentlee.tw", + "prestige-av.com", + "pride.google", + "printfriendly.com", + "prism-break.org", + "prisoneralert.com", + "pritunl.com", + "privacybox.de", + "private.com", + "privateinternetaccess.com", + "privatepaste.com", + "privatetunnel.com", + "privatevpn.com", + "privoxy.org", + "procopytips.com", + "project-syndicate.org", + "prosiben.de", + "proton.me", + "protonvpn.com", + "provideocoalition.com", + "provpnaccounts.com", + "proxfree.com", + "proxifier.com", + "proxlet.com", + "proxomitron.info", + "proxpn.com", + "proxyanonimo.es", + "proxydns.com", + "proxylist.org.uk", + "proxynetwork.org.uk", + "proxypy.net", + "proxyroad.com", + "proxytunnel.net", + "proyectoclubes.com", + "prozz.net", + "psblog.name", + "pscp.tv", + "pshvpn.com", + "psiphon.ca", + "psiphon3.com", + "psiphontoday.com", + "pt.im", + "pts.org.tw", + "ptt.cc", + "pttgame.com", + "pttvan.org", + "pubu.com.tw", + "puffinbrowser.com", + "puffstore.com", + "pullfolio.com", + "punyu.com", + "pure18.com", + "pureapk.com", + "pureconcepts.net", + "pureinsight.org", + "purepdf.com", + "purevpn.com", + "purplelotus.org", + "pursuestar.com", + "pushchinawall.com", + "pussthecat.org", + "pussyspace.com", + "putihome.org", + "putlocker.com", + "putty.org", + "puuko.com", + "pwned.com", + "pximg.net", + "python.com", + "python.com.tw", + "pythonhackers.com", + "pythonic.life", + "pytorch.org", + "qanote.com", + "qgirl.com.tw", + "qhigh.com", + "qi-gong.me", + "qianbai.tw", + "qiandao.today", + "qiangwaikan.com", + "qiangyou.org", + "qidian.ca", + "qienkuen.org", + "qiwen.lu", + "qixianglu.cn", + "qkshare.com", + "qmzdd.com", + "qoos.com", + "qooza.hk", + "qpoe.com", + "qq.co.za", + "qstatus.com", + "qtrac.eu", + "qtweeter.com", + "quannengshen.org", + "quantumbooter.net", + "questvisual.com", + "quitccp.net", + "quitccp.org", + "quora.com", + "quoracdn.net", + "quran.com", + "quranexplorer.com", + "qusi8.net", + "qvodzy.org", + "qx.net", + "qxbbs.org", + "qz.com", + "r0.ru", + "r18.com", + "ra.gg", + "radicalparty.org", + "radiko.jp", + "radio.garden", + "radioaustralia.net.au", + "radiohilight.net", + "radioline.co", + "radiotime.com", + "radiovaticana.org", + "radiovncr.com", + "rael.org", + "raggedbanner.com", + "raidcall.com.tw", + "raidtalk.com.tw", + "rainbowplan.org", + "raindrop.io", + "raizoji.or.jp", + "ramcity.com.au", + "rangwang.biz", + "rangzen.com", + "rangzen.net", + "rangzen.org", + "ranxiang.com", + "ranyunfei.com", + "rapbull.net", + "rapidgator.net", + "rapidmoviez.com", + "rapidvpn.com", + "rarbgprx.org", + "raremovie.cc", + "raremovie.net", + "rateyourmusic.com", + "rationalwiki.org", + "rawgit.com", + "rawgithub.com", + "raxcdn.com", + "razyboard.com", + "rcinet.ca", + "rd.com", + "rdio.com", + "read01.com", + "read100.com", + "readingtimes.com.tw", + "readmoo.com", + "readydown.com", + "realcourage.org", + "realitykings.com", + "realraptalk.com", + "realsexpass.com", + "reason.com", + "rebatesrule.net", + "recaptcha.net", + "recordhistory.org", + "recovery.org.tw", + "recoveryversion.com.tw", + "recoveryversion.org", + "red-lang.org", + "redballoonsolidarity.org", + "redbubble.com", + "redchinacn.net", + "redchinacn.org", + "redd.it", + "reddit.com", + "redditlist.com", + "redditmedia.com", + "redditstatic.com", + "redhotlabs.com", + "redtube.com", + "referer.us", + "reflectivecode.com", + "registry.google", + "relaxbbs.com", + "relay.com.tw", + "releaseinternational.org", + "religionnews.com", + "religioustolerance.org", + "renminbao.com", + "renyurenquan.org", + "rerouted.org", + "research.google", + "resilio.com", + "resistchina.org", + "retweeteffect.com", + "retweetist.com", + "retweetrank.com", + "reuters.com", + "reutersmedia.net", + "revleft.com", + "revocationcheck.com", + "revver.com", + "rfa.org", + "rfachina.com", + "rfamobile.org", + "rfaweb.org", + "rferl.org", + "rfi.fr", + "rfi.my", + "rightbtc.com", + "rightster.com", + "rigpa.org", + "riku.me", + "rileyguide.com", + "riseup.net", + "ritouki.jp", + "ritter.vg", + "rixcloud.com", + "rixcloud.us", + "rlwlw.com", + "rmjdw.com", + "rmjdw132.info", + "roadshow.hk", + "roboforex.com", + "robustnessiskey.com", + "rocket-inc.net", + "rocketbbs.com", + "rocksdb.org", + "rojo.com", + "rolfoundation.org", + "rolia.net", + "rolsociety.org", + "ronjoneswriter.com", + "roodo.com", + "rosechina.net", + "rotten.com", + "rsdlmonitor.com", + "rsf-chinese.org", + "rsf.org", + "rsgamen.org", + "rsshub.app", + "rssing.com", + "rssmeme.com", + "rtalabel.org", + "rthk.hk", + "rthk.org.hk", + "rti.org.tw", + "rti.tw", + "rtycminnesota.org", + "ruanyifeng.com", + "rukor.org", + "rule34.xxx", + "runbtx.com", + "rushbee.com", + "rusvpn.com", + "ruten.com.tw", + "rutracker.net", + "rutube.ru", + "ruyiseek.com", + "rxhj.net", + "s-cute.com", + "s-dragon.org", + "s1heng.com", + "s1s1s1.com", + "s4miniarchive.com", + "s8forum.com", + "sa.com", + "saboom.com", + "sacks.com", + "sacom.hk", + "sadistic-v.com", + "sadpanda.us", + "safechat.com", + "safeguarddefenders.com", + "safervpn.com", + "safety.google", + "saintyculture.com", + "saiq.me", + "sakuralive.com", + "sakya.org", + "salvation.org.hk", + "samair.ru", + "sambhota.org", + "sandscotaicentral.com", + "sankei.com", + "sanmin.com.tw", + "sans.edu", + "sapikachu.net", + "saveliuxiaobo.com", + "savemedia.com", + "savethedate.foo", + "savethesounds.info", + "savetibet.de", + "savetibet.fr", + "savetibet.nl", + "savetibet.org", + "savetibet.ru", + "savetibetstore.org", + "saveuighur.org", + "savevid.com", + "say2.info", + "sbme.me", + "sbs.com.au", + "scasino.com", + "schema.org", + "sciencemag.org", + "sciencenets.com", + "scieron.com", + "scmp.com", + "scmpchinese.com", + "scramble.io", + "scribd.com", + "scriptspot.com", + "search.com", + "search.xxx", + "searchtruth.com", + "searx.me", + "seatguru.com", + "seattlefdc.com", + "secretchina.com", + "secretgarden.no", + "secretsline.biz", + "secureservercdn.net", + "securetunnel.com", + "securityinabox.org", + "securitykiss.com", + "seed4.me", + "seehua.com", + "seesmic.com", + "seevpn.com", + "seezone.net", + "sejie.com", + "sellclassics.com", + "sendsmtp.com", + "sendspace.com", + "sensortower.com", + "seraph.me", + "servehttp.com", + "serveuser.com", + "serveusers.com", + "sesawe.net", + "sesawe.org", + "sethwklein.net", + "setn.com", + "settv.com.tw", + "setty.com.tw", + "sevenload.com", + "sex-11.com", + "sex.com", + "sex3.com", + "sex8.cc", + "sexandsubmission.com", + "sexbot.com", + "sexhu.com", + "sexhuang.com", + "sexidude.com", + "sexinsex.net", + "sextvx.com", + "sexxxy.biz", + "sf.net", + "sfileydy.com", + "sfshibao.com", + "sftindia.org", + "sftuk.org", + "shadeyouvpn.com", + "shadow.ma", + "shadowsky.xyz", + "shadowsocks-r.com", + "shadowsocks.asia", + "shadowsocks.be", + "shadowsocks.com", + "shadowsocks.com.hk", + "shadowsocks.org", + "shadowsocks9.com", + "shafaqna.com", + "shahit.biz", + "shambalapost.com", + "shambhalasun.com", + "shangfang.org", + "shapeservices.com", + "sharebee.com", + "sharecool.org", + "sharpdaily.com.hk", + "sharpdaily.hk", + "sharpdaily.tw", + "shat-tibet.com", + "shattered.io", + "sheikyermami.com", + "shellfire.de", + "shemalez.com", + "shenshou.org", + "shenyun.com", + "shenyunperformingarts.org", + "shenyunshop.com", + "shenzhoufilm.com", + "shenzhouzhengdao.org", + "sherabgyaltsen.com", + "shiatv.net", + "shicheng.org", + "shiksha.com", + "shinychan.com", + "shipcamouflage.com", + "shireyishunjian.com", + "shitaotv.org", + "shixiao.org", + "shizhao.org", + "shkspr.mobi", + "shodanhq.com", + "shooshtime.com", + "shop2000.com.tw", + "shopee.tw", + "shopping.com", + "showhaotu.com", + "showtime.jp", + "showwe.tw", + "shutterstock.com", + "shvoong.com", + "shwchurch.org", + "shwchurch3.com", + "siddharthasintent.org", + "sidelinesnews.com", + "sidelinessportseatery.com", + "sierrafriendsoftibet.org", + "signal.org", + "sijihuisuo.club", + "sijihuisuo.com", + "silkbook.com", + "simbolostwitter.com", + "simplecd.org", + "simpleproductivityblog.com", + "sina.com", + "sina.com.hk", + "sina.com.tw", + "sinchew.com.my", + "singaporepools.com.sg", + "singfortibet.com", + "singpao.com.hk", + "singtao.ca", + "singtao.com", + "singtaousa.com", + "sino-monthly.com", + "sinoants.com", + "sinoca.com", + "sinocast.com", + "sinocism.com", + "sinoinsider.com", + "sinomontreal.ca", + "sinonet.ca", + "sinopitt.info", + "sinoquebec.com", + "sipml5.org", + "sis.xxx", + "sis001.com", + "sis001.us", + "site2unblock.com", + "site90.net", + "sitebro.tw", + "sitekreator.com", + "sitemaps.org", + "six-degrees.io", + "sixth.biz", + "sjrt.org", + "sjum.cn", + "sketchappsources.com", + "skimtube.com", + "skk.moe", + "skybet.com", + "skyking.com.tw", + "skykiwi.com", + "skynet.be", + "skype.com", + "skyvegas.com", + "skyxvpn.com", + "slacker.com", + "slandr.net", + "slaytizle.com", + "sleazydream.com", + "slheng.com", + "slickvpn.com", + "slideshare.net", + "slime.com.tw", + "slinkset.com", + "slutload.com", + "slutmoonbeam.com", + "slyip.com", + "slyip.net", + "sm-miracle.com", + "smartdnsproxy.com", + "smarthide.com", + "smartmailcloud.com", + "smchbooks.com", + "smh.com.au", + "smhric.org", + "smith.edu", + "smyxy.org", + "snapchat.com", + "snaptu.com", + "sndcdn.com", + "sneakme.net", + "snowlionpub.com", + "so-net.net.tw", + "sobees.com", + "soc.mil", + "socialblade.com", + "socialwhale.com", + "socks-proxy.net", + "sockscap64.com", + "sockslist.net", + "socrec.org", + "sod.co.jp", + "softether-download.com", + "softether.co.jp", + "softether.org", + "softfamous.com", + "softlayer.net", + "softnology.biz", + "softsmirror.cf", + "softwarebychuck.com", + "sogclub.com", + "sogoo.org", + "sogrady.me", + "soh.tw", + "sohcradio.com", + "sohfrance.org", + "soifind.com", + "sokamonline.com", + "sokmil.com", + "solana.com", + "solidaritetibet.org", + "solidfiles.com", + "solv.finance", + "somee.com", + "songjianjun.com", + "sonicbbs.cc", + "sonidodelaesperanza.org", + "sopcast.com", + "sopcast.org", + "sophos.com", + "sorazone.net", + "sorting-algorithms.com", + "sos.org", + "sosreader.com", + "sostibet.org", + "sou-tong.org", + "soubory.com", + "soul-plus.net", + "soulcaliburhentai.net", + "soumo.info", + "soundcloud.com", + "soundofhope.kr", + "soundofhope.org", + "soup.io", + "soupofmedia.com", + "sourceforge.net", + "sourcewadio.com", + "south-plus.org", + "southnews.com.tw", + "sowers.org.hk", + "sowiki.net", + "soylent.com", + "soylentnews.org", + "spankbang.com", + "spankingtube.com", + "spankwire.com", + "spb.com", + "speakerdeck.com", + "speedify.com", + "spem.at", + "spencertipping.com", + "spendee.com", + "spicevpn.com", + "spideroak.com", + "spike.com", + "spotflux.com", + "spotify.com", + "spreadshirt.es", + "spring4u.info", + "springboardplatform.com", + "sprite.org", + "sproutcore.com", + "sproxy.info", + "squirly.info", + "squirrelvpn.com", + "srocket.us", + "ss-link.com", + "ssglobal.co", + "ssglobal.me", + "ssh91.com", + "ssl443.org", + "sspanel.net", + "sspro.ml", + "ssr.tools", + "ssrshare.com", + "sss.camp", + "sstm.moe", + "sstmlt.moe", + "sstmlt.net", + "stackoverflow.com", + "stage64.hk", + "standupfortibet.org", + "standwithhk.org", + "stanford.edu", + "starfishfx.com", + "starp2p.com", + "startpage.com", + "startuplivingchina.com", + "stat.gov.tw", + "state.gov", + "static-economist.com", + "staticflickr.com", + "statueofdemocracy.org", + "stboy.net", + "stc.com.sa", + "steamcommunity.com", + "steampowered.com", + "steel-storm.com", + "steemit.com", + "steganos.com", + "steganos.net", + "stepchina.com", + "stephaniered.com", + "stgloballink.com", + "stheadline.com", + "sthoo.com", + "stickam.com", + "stickeraction.com", + "stileproject.com", + "sto.cc", + "stoporganharvesting.org", + "stoptibetcrisis.net", + "storagenewsletter.com", + "stories.google", + "storify.com", + "storm.mg", + "stormmediagroup.com", + "stoweboyd.com", + "straitstimes.com", + "stranabg.com", + "straplessdildo.com", + "streamable.com", + "streamate.com", + "streamingthe.net", + "streema.com", + "streetvoice.com", + "strikingly.com", + "strongvpn.com", + "strongwindpress.com", + "student.tw", + "studentsforafreetibet.org", + "stumbleupon.com", + "stupidvideos.com", + "substack.com", + "successfn.com", + "sueddeutsche.de", + "sugarsync.com", + "sugobbs.com", + "sugumiru18.com", + "suissl.com", + "sulian.me", + "summify.com", + "sumrando.com", + "sun1911.com", + "sundayguardianlive.com", + "sunmedia.ca", + "sunporno.com", + "sunskyforum.com", + "sunta.com.tw", + "sunvpn.net", + "suoluo.org", + "supchina.com", + "superfreevpn.com", + "superokayama.com", + "superpages.com", + "supervpn.net", + "superzooi.com", + "suppig.net", + "suprememastertv.com", + "surfeasy.com", + "surfeasy.com.au", + "surfshark.com", + "suroot.com", + "surrenderat20.net", + "sustainability.google", + "svsfx.com", + "swagbucks.com", + "swissinfo.ch", + "swissvpn.net", + "switch1.jp", + "switchvpn.net", + "sydneytoday.com", + "sylfoundation.org", + "syncback.com", + "synergyse.com", + "sysresccd.org", + "sytes.net", + "syx86.cn", + "syx86.com", + "szbbs.net", + "szetowah.org.hk", + "t-g.com", + "t.co", + "t.me", + "t35.com", + "t66y.com", + "t91y.com", + "taa-usa.org", + "taaze.tw", + "tablesgenerator.com", + "tabtter.jp", + "tacem.org", + "taconet.com.tw", + "taedp.org.tw", + "tafm.org", + "tagwa.org.au", + "tagwalk.com", + "tahr.org.tw", + "taipei.gov.tw", + "taipeisociety.org", + "taipeitimes.com", + "taiwan-sex.com", + "taiwanbible.com", + "taiwancon.com", + "taiwandaily.net", + "taiwandc.org", + "taiwanhot.net", + "taiwanjobs.gov.tw", + "taiwanjustice.com", + "taiwanjustice.net", + "taiwankiss.com", + "taiwannation.com", + "taiwannation.com.tw", + "taiwanncf.org.tw", + "taiwannews.com.tw", + "taiwanonline.cc", + "taiwantp.net", + "taiwantt.org.tw", + "taiwanus.net", + "taiwanyes.com", + "talk853.com", + "talkboxapp.com", + "talkcc.com", + "talkonly.net", + "tamiaode.tk", + "tampabay.com", + "tanc.org", + "tangben.com", + "tangren.us", + "taoism.net", + "taolun.info", + "tapanwap.com", + "tapatalk.com", + "taragana.com", + "target.com", + "tascn.com.au", + "taup.net", + "taup.org.tw", + "taweet.com", + "tbcollege.org", + "tbi.org.hk", + "tbicn.org", + "tbjyt.org", + "tbpic.info", + "tbrc.org", + "tbs-rainbow.org", + "tbsec.org", + "tbsmalaysia.org", + "tbsn.org", + "tbsseattle.org", + "tbssqh.org", + "tbswd.org", + "tbtemple.org.uk", + "tbthouston.org", + "tccwonline.org", + "tcewf.org", + "tchrd.org", + "tcnynj.org", + "tcpspeed.co", + "tcpspeed.com", + "tcsofbc.org", + "tcsovi.org", + "tdesktop.com", + "tdm.com.mo", + "teachparentstech.org", + "teamamericany.com", + "technews.tw", + "techspot.com", + "techviz.net", + "teck.in", + "teco-hk.org", + "teco-mo.org", + "teddysun.com", + "teeniefuck.net", + "teensinasia.com", + "tehrantimes.com", + "telecomspace.com", + "telegra.ph", + "telegram.dog", + "telegram.me", + "telegram.org", + "telegramdownload.com", + "telegraph.co.uk", + "telesco.pe", + "tellme.pw", + "tenacy.com", + "tensorflow.org", + "tenzinpalmo.com", + "terabox.com", + "tew.org", + "textnow.me", + "tfhub.dev", + "tfiflve.com", + "thaicn.com", + "thb.gov.tw", + "theatlantic.com", + "theatrum-belli.com", + "theaustralian.com.au", + "thebcomplex.com", + "theblaze.com", + "theblemish.com", + "thebobs.com", + "thebodyshop-usa.com", + "thechinabeat.org", + "thechinacollection.org", + "thechinastory.org", + "theconversation.com", + "thedalailamamovie.com", + "thediplomat.com", + "thedw.us", + "theepochtimes.com", + "thefacebook.com", + "thefrontier.hk", + "thegay.com", + "thegioitinhoc.vn", + "thegly.com", + "theguardian.com", + "thehots.info", + "thehousenews.com", + "thehun.net", + "theinitium.com", + "themoviedb.org", + "thenewslens.com", + "thepiratebay.org", + "theporndude.com", + "theportalwiki.com", + "theprint.in", + "thereallove.kr", + "therock.net.nz", + "thesaturdaypaper.com.au", + "thestandnews.com", + "thetibetcenter.org", + "thetibetconnection.org", + "thetibetmuseum.org", + "thetibetpost.com", + "thetinhat.com", + "thetrotskymovie.com", + "thetvdb.com", + "thevivekspot.com", + "thewgo.org", + "theync.com", + "thinkgeek.com", + "thinkingtaiwan.com", + "thinkwithgoogle.com", + "thisav.com", + "thlib.org", + "thomasbernhard.org", + "thongdreams.com", + "threatchaos.com", + "throughnightsfire.com", + "thumbzilla.com", + "thywords.com", + "thywords.com.tw", + "tiananmenduizhi.com", + "tiananmenmother.org", + "tiananmenuniv.com", + "tiananmenuniv.net", + "tiandixing.org", + "tianhuayuan.com", + "tianlawoffice.com", + "tianti.io", + "tiantibooks.org", + "tianyantong.org.cn", + "tianzhu.org", + "tibet-envoy.eu", + "tibet-foundation.org", + "tibet-house-trust.co.uk", + "tibet-initiative.de", + "tibet-munich.de", + "tibet.a.se", + "tibet.at", + "tibet.ca", + "tibet.com", + "tibet.fr", + "tibet.net", + "tibet.nu", + "tibet.org", + "tibet.org.tw", + "tibet.sk", + "tibet.to", + "tibet3rdpole.org", + "tibetaction.net", + "tibetaid.org", + "tibetalk.com", + "tibetan-alliance.org", + "tibetan.fr", + "tibetanaidproject.org", + "tibetanarts.org", + "tibetanbuddhistinstitute.org", + "tibetancommunity.org", + "tibetancommunityuk.net", + "tibetanculture.org", + "tibetanentrepreneurs.org", + "tibetanfeministcollective.org", + "tibetanhealth.org", + "tibetanjournal.com", + "tibetanlanguage.org", + "tibetanliberation.org", + "tibetanpaintings.com", + "tibetanphotoproject.com", + "tibetanpoliticalreview.org", + "tibetanreview.net", + "tibetansports.org", + "tibetanwomen.org", + "tibetanyouth.org", + "tibetanyouthcongress.org", + "tibetcharity.dk", + "tibetcharity.in", + "tibetchild.org", + "tibetcity.com", + "tibetcollection.com", + "tibetcorps.org", + "tibetexpress.net", + "tibetfocus.com", + "tibetfund.org", + "tibetgermany.com", + "tibetgermany.de", + "tibethaus.com", + "tibetheritagefund.org", + "tibethouse.jp", + "tibethouse.org", + "tibethouse.us", + "tibetinfonet.net", + "tibetjustice.org", + "tibetkomite.dk", + "tibetmuseum.org", + "tibetnetwork.org", + "tibetoffice.ch", + "tibetoffice.com.au", + "tibetoffice.eu", + "tibetoffice.org", + "tibetonline.com", + "tibetonline.tv", + "tibetoralhistory.org", + "tibetpolicy.eu", + "tibetrelieffund.co.uk", + "tibetsites.com", + "tibetsociety.com", + "tibetsun.com", + "tibetsupportgroup.org", + "tibetswiss.ch", + "tibettelegraph.com", + "tibettimes.net", + "tibetwrites.org", + "ticket.com.tw", + "tigervpn.com", + "tiktok.com", + "tiltbrush.com", + "timdir.com", + "time.com", + "timesnownews.com", + "timsah.com", + "timtales.com", + "tinc-vpn.org", + "tiney.com", + "tineye.com", + "tintuc101.com", + "tiny.cc", + "tinychat.com", + "tinypaste.com", + "tipas.net", + "tipo.gov.tw", + "tistory.com", + "tkcs-collins.com", + "tl.gd", + "tma.co.jp", + "tmagazine.com", + "tmdfish.com", + "tmi.me", + "tmpp.org", + "tnaflix.com", + "tngrnow.com", + "tngrnow.net", + "tnp.org", + "to-porno.com", + "togetter.com", + "toh.info", + "tokyo-247.com", + "tokyo-hot.com", + "tokyo-porn-tube.com", + "tokyocn.com", + "tomonews.net", + "tongil.or.kr", + "tono-oka.jp", + "tonyyan.net", + "toodoc.com", + "toonel.net", + "top.tv", + "top10vpn.com", + "top81.ws", + "topbtc.com", + "topnews.in", + "toppornsites.com", + "topshareware.com", + "topsy.com", + "toptip.ca", + "tora.to", + "torcn.com", + "torguard.net", + "torlock.com", + "torproject.org", + "torrentkitty.tv", + "torrentprivacy.com", + "torrentproject.se", + "torrenty.org", + "torrentz.eu", + "torvpn.com", + "totalvpn.com", + "toutiaoabc.com", + "towngain.com", + "toypark.in", + "toythieves.com", + "toytractorshow.com", + "tparents.org", + "tpi.org.tw", + "tracfone.com", + "tradingview.com", + "translate.goog", + "translate.google", + "transparency.org", + "treemall.com.tw", + "trendsmap.com", + "trialofccp.org", + "trickip.net", + "trickip.org", + "trimondi.de", + "tronscan.org", + "trouw.nl", + "trt.net.tr", + "trtc.com.tw", + "truebuddha-md.org", + "trulyergonomic.com", + "truthontour.org", + "truthsocial.com", + "truveo.com", + "tryheart.jp", + "tsctv.net", + "tsemtulku.com", + "tsquare.tv", + "tsu.org.tw", + "tsunagarumon.com", + "tt1069.com", + "tttan.com", + "ttv.com.tw", + "ttvnw.net", + "tu8964.com", + "tubaholic.com", + "tube.com", + "tube8.com", + "tube911.com", + "tubecup.com", + "tubegals.com", + "tubeislam.com", + "tubepornclassic.com", + "tubestack.com", + "tubewolf.com", + "tuibeitu.net", + "tuidang.net", + "tuidang.org", + "tuidang.se", + "tuitui.info", + "tuitwit.com", + "tumblr.com", + "tumutanzi.com", + "tumview.com", + "tunein.com", + "tunnelbear.com", + "tunnelblick.net", + "tunnelr.com", + "tunsafe.com", + "turansam.org", + "turbobit.net", + "turbohide.com", + "turbotwitter.com", + "turkistantimes.com", + "turntable.fm", + "tushycash.com", + "tutanota.com", + "tuvpn.com", + "tuzaijidi.com", + "tv.com", + "tv.google", + "tvants.com", + "tvb.com", + "tvboxnow.com", + "tvbs.com.tw", + "tvider.com", + "tvmost.com.hk", + "tvplayvideos.com", + "tvunetworks.com", + "tw-blog.com", + "tw-npo.org", + "tw01.org", + "twaitter.com", + "twapperkeeper.com", + "twaud.io", + "twavi.com", + "twbbs.net.tw", + "twbbs.org", + "twbbs.tw", + "twblogger.com", + "tweepguide.com", + "tweeplike.me", + "tweepmag.com", + "tweepml.org", + "tweetbackup.com", + "tweetboard.com", + "tweetboner.biz", + "tweetcs.com", + "tweetdeck.com", + "tweetedtimes.com", + "tweetmylast.fm", + "tweetphoto.com", + "tweetrans.com", + "tweetree.com", + "tweettunnel.com", + "tweetwally.com", + "tweetymail.com", + "tweez.net", + "twelve.today", + "twerkingbutt.com", + "twftp.org", + "twgreatdaily.com", + "twibase.com", + "twibble.de", + "twibbon.com", + "twibs.com", + "twicountry.org", + "twicsy.com", + "twiends.com", + "twifan.com", + "twiffo.com", + "twiggit.org", + "twilightsex.com", + "twilio.com", + "twilog.org", + "twimbow.com", + "twimg.com", + "twindexx.com", + "twip.me", + "twipple.jp", + "twishort.com", + "twistar.cc", + "twister.net.co", + "twisterio.com", + "twisternow.com", + "twistory.net", + "twit2d.com", + "twitbrowser.net", + "twitcause.com", + "twitch.tv", + "twitchcdn.net", + "twitgether.com", + "twitgoo.com", + "twitiq.com", + "twitlonger.com", + "twitmania.com", + "twitoaster.com", + "twitonmsn.com", + "twitpic.com", + "twitstat.com", + "twittbot.net", + "twitter.com", + "twitter.jp", + "twitter4j.org", + "twittercounter.com", + "twitterfeed.com", + "twittergadget.com", + "twitterkr.com", + "twittermail.com", + "twitterrific.com", + "twittertim.es", + "twitthat.com", + "twitturk.com", + "twitturly.com", + "twitvid.com", + "twitzap.com", + "twiyia.com", + "twnorth.org.tw", + "twreporter.org", + "twskype.com", + "twstar.net", + "twt.tl", + "twtkr.com", + "twtrland.com", + "twttr.com", + "twurl.nl", + "twyac.org", + "txxx.com", + "tycool.com", + "typepad.com", + "typora.io", + "u15.info", + "u9un.com", + "ub0.cc", + "ubddns.org", + "uberproxy.net", + "uc-japan.org", + "ucam.org", + "ucanews.com", + "ucdc1998.org", + "uchicago.edu", + "uderzo.it", + "udn.com", + "udn.com.tw", + "udnbkk.com", + "uforadio.com.tw", + "ufreevpn.com", + "ugo.com", + "uhdwallpapers.org", + "uhrp.org", + "uighur.nl", + "uighurbiz.net", + "uk.to", + "ukcdp.co.uk", + "ukliferadio.co.uk", + "uku.im", + "ulike.net", + "ulop.net", + "ultravpn.fr", + "ultraxs.com", + "umich.edu", + "unblock-us.com", + "unblockdmm.com", + "unblocker.yt", + "unblocksit.es", + "uncyclomedia.org", + "uncyclopedia.hk", + "uncyclopedia.tw", + "underwoodammo.com", + "unholyknight.com", + "uni.cc", + "unicode.org", + "unification.net", + "unification.org.tw", + "unirule.cloud", + "unitedsocialpress.com", + "unix100.com", + "unknownspace.org", + "unodedos.com", + "unpo.org", + "unseen.is", + "unstable.icu", + "untraceable.us", + "uocn.org", + "updatestar.com", + "upghsbc.com", + "upholdjustice.org", + "upload4u.info", + "uploaded.net", + "uploaded.to", + "uploadstation.com", + "upmedia.mg", + "upornia.com", + "uproxy.org", + "uptodown.com", + "upwill.org", + "ur7s.com", + "uraban.me", + "urbandictionary.com", + "urbansurvival.com", + "urchin.com", + "url.com.tw", + "url.tw", + "urlborg.com", + "urlparser.com", + "us.to", + "usacn.com", + "usaip.eu", + "usc.edu", + "uscnpm.org", + "usembassy.gov", + "usfk.mil", + "usma.edu", + "usmc.mil", + "usocctn.com", + "uspto.gov", + "ustibetcommittee.org", + "ustream.tv", + "usus.cc", + "utopianpal.com", + "uu-gg.com", + "uukanshu.com", + "uvwxyz.xyz", + "uwants.com", + "uwants.net", + "uyghur-j.org", + "uyghur.co.uk", + "uyghuraa.org", + "uyghuramerican.org", + "uyghurbiz.org", + "uyghurcanadian.ca", + "uyghurcongress.org", + "uyghurpen.org", + "uyghurpress.com", + "uyghurstudies.org", + "uyghurtribunal.com", + "uygur.org", + "uymaarip.com", + "v2ex.com", + "v2fly.org", + "v2ray.com", + "v2raycn.com", + "v2raytech.com", + "valeursactuelles.com", + "van001.com", + "van698.com", + "vanemu.cn", + "vanilla-jp.com", + "vanpeople.com", + "vansky.com", + "vaticannews.va", + "vatn.org", + "vcf-online.org", + "vcfbuilder.org", + "vegasred.com", + "velkaepocha.sk", + "venbbs.com", + "venchina.com", + "venetianmacao.com", + "ventureswell.com", + "veoh.com", + "vercel.app", + "verizon.net", + "vermonttibet.org", + "versavpn.com", + "verybs.com", + "vevo.com", + "vft.com.tw", + "viber.com", + "vica.info", + "victimsofcommunism.org", + "vid.me", + "vidble.com", + "videobam.com", + "videodetective.com", + "videomega.tv", + "videomo.com", + "videopediaworld.com", + "videopress.com", + "vidinfo.org", + "vietdaikynguyen.com", + "vijayatemple.org", + "vilavpn.com", + "vimeo.com", + "vimperator.org", + "vincnd.com", + "vine.co", + "vinniev.com", + "vip-enterprise.com", + "virginia.edu", + "virtualrealporn.com", + "visibletweets.com", + "visiontimes.com", + "vital247.org", + "viu.com", + "viu.tv", + "vivahentai4u.net", + "vivaldi.com", + "vivatube.com", + "vivthomas.com", + "vizvaz.com", + "vjav.com", + "vjmedia.com.hk", + "vllcs.org", + "vmixcore.com", + "vmpsoft.com", + "vnet.link", + "voa.mobi", + "voacambodia.com", + "voacantonese.com", + "voachinese.com", + "voachineseblog.com", + "voagd.com", + "voaindonesia.com", + "voanews.com", + "voatibetan.com", + "voatibetanenglish.com", + "vocativ.com", + "vocn.tv", + "vocus.cc", + "voicettank.org", + "vot.org", + "vovo2000.com", + "voxer.com", + "voy.com", + "vpn.ac", + "vpn4all.com", + "vpnaccount.org", + "vpnaccounts.com", + "vpnbook.com", + "vpncomparison.org", + "vpncoupons.com", + "vpncup.com", + "vpndada.com", + "vpnfan.com", + "vpnfire.com", + "vpnfires.biz", + "vpnforgame.net", + "vpngate.jp", + "vpngate.net", + "vpngratis.net", + "vpnhq.com", + "vpnhub.com", + "vpninja.net", + "vpnintouch.com", + "vpnintouch.net", + "vpnjack.com", + "vpnmaster.com", + "vpnmentor.com", + "vpnpick.com", + "vpnpop.com", + "vpnpronet.com", + "vpnreactor.com", + "vpnreviewz.com", + "vpnsecure.me", + "vpnshazam.com", + "vpnshieldapp.com", + "vpnsp.com", + "vpntraffic.com", + "vpntunnel.com", + "vpnuk.info", + "vpnunlimitedapp.com", + "vpnvip.com", + "vpnworldwide.com", + "vporn.com", + "vpser.net", + "vraiesagesse.net", + "vrmtr.com", + "vrsmash.com", + "vs.com", + "vtunnel.com", + "vuku.cc", + "vultryhw.com", + "vzw.com", + "w3.org", + "w3schools.com", + "waffle1999.com", + "wahas.com", + "waigaobu.com", + "waikeung.org", + "wailaike.net", + "wainao.me", + "waiwaier.com", + "wallmama.com", + "wallornot.org", + "wallpapercasa.com", + "wallproxy.com", + "wallsttv.com", + "waltermartin.com", + "waltermartin.org", + "wan-press.org", + "wanderinghorse.net", + "wangafu.net", + "wangjinbo.org", + "wanglixiong.com", + "wango.org", + "wangruoshui.net", + "wangruowang.org", + "want-daily.com", + "wanz-factory.com", + "wapedia.mobi", + "warehouse333.com", + "warroom.org", + "waselpro.com", + "washeng.net", + "washingtonpost.com", + "watch8x.com", + "watchinese.com", + "watchmygf.net", + "watchout.tw", + "wattpad.com", + "wav.tv", + "waveprotocol.org", + "waymo.com", + "wda.gov.tw", + "wdf5.com", + "wealth.com.tw", + "wearehairy.com", + "wearn.com", + "weather.com.hk", + "web.dev", + "web2project.net", + "webbang.net", + "webevader.org", + "webfreer.com", + "webjb.org", + "weblagu.com", + "webmproject.org", + "webpack.de", + "webrtc.org", + "webrush.net", + "webs-tv.net", + "websitepulse.com", + "websnapr.com", + "webwarper.net", + "webworkerdaily.com", + "wechatlawsuit.com", + "weekmag.info", + "wefightcensorship.org", + "wefong.com", + "weiboleak.com", + "weihuo.org", + "weijingsheng.org", + "weiming.info", + "weiquanwang.org", + "weisuo.ws", + "welovecock.com", + "welt.de", + "wemigrate.org", + "wengewang.com", + "wengewang.org", + "wenhui.ch", + "wenweipo.com", + "wenxuecity.com", + "wenyunchao.com", + "wenzhao.ca", + "westca.com", + "westernshugdensociety.org", + "westernwolves.com", + "westkit.net", + "westpoint.edu", + "wetplace.com", + "wetpussygames.com", + "wexiaobo.org", + "wezhiyong.org", + "wezone.net", + "wforum.com", + "wha.la", + "whatblocked.com", + "whatbrowser.org", + "whatsapp.com", + "whatsapp.net", + "whatsonweibo.com", + "wheatseeds.org", + "wheelockslatin.com", + "whereiswerner.com", + "wheretowatch.com", + "whippedass.com", + "whispersystems.org", + "whodns.xyz", + "whoer.net", + "whotalking.com", + "whylover.com", + "whyx.org", + "widevine.com", + "wikaba.com", + "wikia.com", + "wikileaks-forum.com", + "wikileaks.ch", + "wikileaks.com", + "wikileaks.de", + "wikileaks.eu", + "wikileaks.lu", + "wikileaks.org", + "wikileaks.pl", + "wikilivres.info", + "wikimapia.org", + "wikimedia.org", + "wikinews.org", + "wikipedia.org", + "wikiquote.org", + "wikisource.org", + "wikiwand.com", + "wikiwiki.jp", + "wildammo.com", + "williamhill.com", + "willw.net", + "windowsphoneme.com", + "windscribe.com", + "windy.com", + "wingamestore.com", + "wingy.site", + "winning11.com", + "winwhispers.info", + "wionews.com", + "wire.com", + "wiredbytes.com", + "wiredpen.com", + "wireguard.com", + "wisdompubs.org", + "wisevid.com", + "wistia.com", + "withgoogle.com", + "withyoutube.com", + "witnessleeteaching.com", + "witopia.net", + "wizcrafts.net", + "wjbk.org", + "wn.com", + "wnacg.com", + "wnacg.org", + "wo.tc", + "woeser.com", + "woesermiddle-way.net", + "wokar.org", + "wolfax.com", + "wombo.ai", + "woolyss.com", + "woopie.jp", + "woopie.tv", + "wordpress.com", + "workatruna.com", + "workerdemo.org.hk", + "workerempowerment.org", + "workers.dev", + "workersthebig.net", + "workflow.is", + "worldcat.org", + "worldjournal.com", + "worldvpn.net", + "wow-life.net", + "wow.com", + "wowgirls.com", + "wowhead.com", + "wowlegacy.ml", + "wowporn.com", + "wowrk.com", + "woxinghuiguo.com", + "woyaolian.org", + "wozy.in", + "wp.com", + "wpoforum.com", + "wqyd.org", + "wrchina.org", + "wretch.cc", + "wsj.com", + "wsj.net", + "wsjhk.com", + "wtbn.org", + "wtfpeople.com", + "wuerkaixi.com", + "wufafangwen.com", + "wufi.org.tw", + "wuguoguang.com", + "wujie.net", + "wujieliulan.com", + "wukangrui.net", + "wuw.red", + "wuyanblog.com", + "wwe.com", + "wwitv.com", + "www1.biz", + "wwwhost.biz", + "wzyboy.im", + "x-art.com", + "x-berry.com", + "x-wall.org", + "x.co", + "x.company", + "x1949x.com", + "x24hr.com", + "x365x.com", + "xanga.com", + "xbabe.com", + "xbookcn.com", + "xbtce.com", + "xcafe.in", + "xcity.jp", + "xcritic.com", + "xda-developers.com", + "xerotica.com", + "xfiles.to", + "xfinity.com", + "xgmyd.com", + "xhamster.com", + "xianba.net", + "xianchawang.net", + "xianjian.tw", + "xianqiao.net", + "xiaobaiwu.com", + "xiaochuncnjp.com", + "xiaod.in", + "xiaohexie.com", + "xiaolan.me", + "xiaoma.org", + "xiaxiaoqiang.net", + "xiezhua.com", + "xihua.es", + "xinbao.de", + "xing.com", + "xinhuanet.org", + "xinjiangpolicefiles.org", + "xinmiao.com.hk", + "xinsheng.net", + "xinshijue.com", + "xinyubbs.net", + "xiongpian.com", + "xiuren.org", + "xixicui.icu", + "xizang-zhiye.org", + "xjp.cc", + "xjtravelguide.com", + "xkiwi.tk", + "xlfmtalk.com", + "xlfmwz.info", + "xm.com", + "xml-training-guide.com", + "xmovies.com", + "xn--4gq171p.com", + "xn--9pr62r24a.com", + "xn--czq75pvv1aj5c.org", + "xn--i2ru8q2qg.com", + "xn--ngstr-lra8j.com", + "xn--oiq.cc", + "xn--p8j9a0d9c9a.xn--q9jyb4c", + "xnxx.com", + "xpdo.net", + "xpud.org", + "xrentdvd.com", + "xsden.info", + "xskywalker.com", + "xskywalker.net", + "xtube.com", + "xuchao.net", + "xuchao.org", + "xuehua.us", + "xuite.net", + "xuzhiyong.net", + "xvbelink.com", + "xvideo.cc", + "xvideos-cdn.com", + "xvideos.com", + "xvideos.es", + "xvinlink.com", + "xxbbx.com", + "xxlmovies.com", + "xxuz.com", + "xxx.com", + "xxx.xxx", + "xxxfuckmom.com", + "xxxx.com.au", + "xxxy.biz", + "xxxy.info", + "xxxymovies.com", + "xys.org", + "xysblogs.org", + "xyy69.com", + "xyy69.info", + "y2mate.com", + "yadi.sk", + "yahoo.co.jp", + "yahoo.com", + "yahoo.com.hk", + "yahoo.com.tw", + "yahoo.net", + "yakbutterblues.com", + "yam.com", + "yam.org.tw", + "yande.re", + "yandex.com", + "yanghengjun.com", + "yangjianli.com", + "yasni.co.uk", + "yayabay.com", + "ycombinator.com", + "ydy.com", + "yeahteentube.com", + "yecl.net", + "yeelou.com", + "yeeyi.com", + "yegle.net", + "yes-news.com", + "yes.xxx", + "yes123.com.tw", + "yesasia.com", + "yesasia.com.hk", + "yespornplease.com", + "yeyeclub.com", + "ygto.com", + "yhcw.net", + "yibada.com", + "yibaochina.com", + "yidio.com", + "yigeni.com", + "yilubbs.com", + "yimg.com", + "yingsuoss.com", + "yinlei.org", + "yipub.com", + "yiyechat.com", + "yizhihongxing.com", + "yobit.net", + "yobt.com", + "yobt.tv", + "yogichen.org", + "yolasite.com", + "yomiuri.co.jp", + "yong.hu", + "yorkbbs.ca", + "you-get.org", + "youdontcare.com", + "youjizz.com", + "youmaker.com", + "youngpornvideos.com", + "youngspiration.hk", + "youpai.org", + "youporn.com", + "youporngay.com", + "your-freedom.net", + "yourepeat.com", + "yourlisten.com", + "yourlust.com", + "yourprivatevpn.com", + "yourtrap.com", + "yousendit.com", + "youshun12.com", + "youthforfreechina.org", + "youthnetradio.org", + "youthwant.com.tw", + "youtu.be", + "youtube-nocookie.com", + "youtube.com", + "youtubecn.com", + "youtubeeducation.com", + "youtubegaming.com", + "youtubekids.com", + "youversion.com", + "youwin.com", + "youxu.info", + "yt.be", + "ytht.net", + "ytimg.com", + "ytn.co.kr", + "yuanming.net", + "yuanzhengtang.org", + "yulghun.com", + "yunchao.net", + "yuntipub.com", + "yuvutu.com", + "yvesgeleyn.com", + "ywpw.com", + "yx51.net", + "yyii.org", + "yyjlymb.xyz", + "yzzk.com", + "z-lib.org", + "zacebook.com", + "zalmos.com", + "zannel.com", + "zaobao.com", + "zaobao.com.sg", + "zaozon.com", + "zapto.org", + "zattoo.com", + "zb.com", + "zdnet.com.tw", + "zello.com", + "zengjinyan.org", + "zenmate.com", + "zerohedge.com", + "zeronet.io", + "zeutch.com", + "zfreet.com", + "zgsddh.com", + "zgzcjj.net", + "zhanbin.net", + "zhangboli.net", + "zhangtianliang.com", + "zhanlve.org", + "zhenghui.org", + "zhengjian.org", + "zhengwunet.org", + "zhenlibu.info", + "zhenlibu1984.com", + "zhenxiang.biz", + "zhinengluyou.com", + "zhongguo.ca", + "zhongguorenquan.org", + "zhongguotese.net", + "zhongmeng.org", + "zhoushuguang.com", + "zhreader.com", + "zhuangbi.me", + "zhuanxing.cn", + "zhuatieba.com", + "zhuichaguoji.org", + "zi.media", + "zi5.me", + "ziddu.com", + "zillionk.com", + "zim.vn", + "zinio.com", + "ziporn.com", + "zippyshare.com", + "zkaip.com", + "zkiz.com", + "zmw.cn", + "zodgame.us", + "zoho.com", + "zomobo.net", + "zonaeuropa.com", + "zonghexinwen.com", + "zonghexinwen.net", + "zoogvpn.com", + "zootool.com", + "zoozle.net", + "zophar.net", + "zorrovpn.com", + "zozotown.com", + "zpn.im", + "zspeeder.me", + "zsrhao.com", + "zuo.la", + "zuobiao.me", + "zuola.com", + "zvereff.com", + "zynaima.com", + "zynamics.com", + "zyns.com", + "zyxel.com", + "zyzc9.com", + "zzcartoon.com", + "zzcloud.me", + "zzux.com", + "chat.openai.com" + ] + ] +]; + +var lastRule = ''; + +function FindProxyForURL(url, host) { + for (var i = 0; i < rules.length; i++) { + ret = testHost(host, i); + if (ret != undefined) + return ret; + } + return 'DIRECT'; +} + +function testHost(host, index) { + for (var i = 0; i < rules[index].length; i++) { + for (var j = 0; j < rules[index][i].length; j++) { + lastRule = rules[index][i][j]; + if (host == lastRule || host.endsWith('.' + lastRule)) + return i % 2 == 0 ? 'DIRECT' : proxy; + } + } + lastRule = ''; +} + +// REF: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith +if (!String.prototype.endsWith) { + String.prototype.endsWith = function(searchString, position) { + var subjectString = this.toString(); + if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) { + position = subjectString.length; + } + position -= searchString.length; + var lastIndex = subjectString.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; + }; +} diff --git a/v2rayN/Program.cs b/v2rayN/Program.cs deleted file mode 100644 index 59877fe..0000000 --- a/v2rayN/Program.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Diagnostics; -using System.Threading; -using System.Windows.Forms; -using v2rayN.Forms; -using v2rayN.Properties; -using v2rayN.Tool; - -namespace v2rayN -{ - static class Program - { - [System.Runtime.InteropServices.DllImport("user32.dll")] - private static extern bool SetProcessDPIAware(); - - /// - /// 应用程序的主入口点。 - /// - [STAThread] - static void Main() - { - if (Environment.OSVersion.Version.Major >= 6) - { - SetProcessDPIAware(); - } - - Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); - Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException); - AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); - - - //AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; - - if (!IsDuplicateInstance()) - { - - Utils.SaveLog("v2rayN start up " + Utils.GetVersion()); - - //设置语言环境 - string lang = Utils.RegReadValue(Global.MyRegPath, Global.MyRegKeyLanguage, "zh-Hans"); - Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang); - - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new MainForm()); - } - else - { - UI.ShowWarning($"v2rayN is already running (v2rayN 已啟動)"); - } - } - - //private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) - //{ - // try - // { - // string resourceName = "v2rayN.LIB." + new AssemblyName(args.Name).Name + ".dll"; - // using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) - // { - // if (stream == null) - // { - // return null; - // } - // byte[] assemblyData = new byte[stream.Length]; - // stream.Read(assemblyData, 0, assemblyData.Length); - // return Assembly.Load(assemblyData); - // } - // } - // catch - // { - // return null; - // } - //} - - /// - /// 检查是否已在运行 - /// - public static bool IsDuplicateInstance() - { - //string name = "v2rayN"; - - string name = Utils.GetExePath(); // Allow different locations to run - name = name.Replace("\\", "/"); // https://stackoverflow.com/questions/20714120/could-not-find-a-part-of-the-path-error-while-creating-mutex - - Global.mutexObj = new Mutex(false, name, out bool bCreatedNew); - return !bCreatedNew; - } - - static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) - { - Utils.SaveLog("Application_ThreadException", e.Exception); - } - - static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) - { - Utils.SaveLog("CurrentDomain_UnhandledException", (Exception)e.ExceptionObject); - } - } -} diff --git a/v2rayN/Properties/AssemblyInfo.cs b/v2rayN/Properties/AssemblyInfo.cs deleted file mode 100644 index e7c8279..0000000 --- a/v2rayN/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// 有关程序集的常规信息通过以下 -// 特性集控制。更改这些特性值可修改 -// 与程序集关联的信息。 -[assembly: AssemblyTitle("v2rayN")] -[assembly: AssemblyDescription("高強度加密連接,兼顧您的隱私與自由")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("RAYFISH, LLC")] -[assembly: AssemblyProduct("v2rayN")] -[assembly: AssemblyCopyright("Copyright © 2019-2020 (GPLv3)")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// 将 ComVisible 设置为 false 使此程序集中的类型 -// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型, -// 则将该类型上的 ComVisible 特性设置为 true。 -[assembly: ComVisible(false)] - -// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID -[assembly: Guid("72d9f089-5e7a-4c5f-be0a-8a211536b483")] - -// 程序集的版本信息由下面四个值组成: -// -// 主版本 -// 次版本 -// 生成号 -// 修订号 -// -// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, -// 方法是按如下所示使用“*”: -//[assembly: AssemblyVersion("1.0.*")] -//[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("3.29.1")] \ No newline at end of file diff --git a/v2rayN/Properties/Resources.resx b/v2rayN/Properties/Resources.resx deleted file mode 100644 index 62e477b..0000000 --- a/v2rayN/Properties/Resources.resx +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\resources\privoxy.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\Resources\about.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\option.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\restart.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\sysproxy.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\resources\sub.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\server.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\notify.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\checkupdate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\promotion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\sysproxy64.exe.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\resources\privoxy_conf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;gb2312 - - - ..\Resources\minimize.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\pac.txt.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\resources\help.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\abp.js.gz;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ..\resources\share.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\resources\language.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/v2rayN/Properties/app.manifest b/v2rayN/Properties/app.manifest deleted file mode 100644 index 15b2b8c..0000000 --- a/v2rayN/Properties/app.manifest +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/v2rayN/ProtosLib/ProtosLib.csproj b/v2rayN/ProtosLib/ProtosLib.csproj new file mode 100755 index 0000000..a9dab02 --- /dev/null +++ b/v2rayN/ProtosLib/ProtosLib.csproj @@ -0,0 +1,20 @@ + + + net8.0 + enable + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + diff --git a/v2rayN/Protos/Statistics.proto b/v2rayN/ProtosLib/Statistics.proto old mode 100644 new mode 100755 similarity index 94% rename from v2rayN/Protos/Statistics.proto rename to v2rayN/ProtosLib/Statistics.proto index 1dd4f2b..db96ac0 --- a/v2rayN/Protos/Statistics.proto +++ b/v2rayN/ProtosLib/Statistics.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package v2ray.core.app.stats.command; -option csharp_namespace = "v2rayN.Protos.Statistics"; +option csharp_namespace = "ProtosLib.Statistics"; message GetStatsRequest { // Name of the stat counter. diff --git a/v2rayN/ProtosLib/Tests.cs b/v2rayN/ProtosLib/Tests.cs new file mode 100755 index 0000000..e1eb85b --- /dev/null +++ b/v2rayN/ProtosLib/Tests.cs @@ -0,0 +1,13 @@ +using ProtosLib.Statistics; + +namespace ProtosLib +{ + public class Tests + { + private StatsService.StatsServiceClient client_; + + public Tests() + { + } + } +} \ No newline at end of file diff --git a/v2rayN/Resources/about.png b/v2rayN/Resources/about.png deleted file mode 100644 index 48fa6b1..0000000 Binary files a/v2rayN/Resources/about.png and /dev/null differ diff --git a/v2rayN/Resources/abp.js.gz b/v2rayN/Resources/abp.js.gz deleted file mode 100644 index 0577c7f..0000000 Binary files a/v2rayN/Resources/abp.js.gz and /dev/null differ diff --git a/v2rayN/Resources/checkupdate.png b/v2rayN/Resources/checkupdate.png deleted file mode 100644 index bc1fade..0000000 Binary files a/v2rayN/Resources/checkupdate.png and /dev/null differ diff --git a/v2rayN/Resources/help.png b/v2rayN/Resources/help.png deleted file mode 100644 index 03691a4..0000000 Binary files a/v2rayN/Resources/help.png and /dev/null differ diff --git a/v2rayN/Resources/language.png b/v2rayN/Resources/language.png deleted file mode 100644 index 5598a31..0000000 Binary files a/v2rayN/Resources/language.png and /dev/null differ diff --git a/v2rayN/Resources/minimize.png b/v2rayN/Resources/minimize.png deleted file mode 100644 index 82ee86e..0000000 Binary files a/v2rayN/Resources/minimize.png and /dev/null differ diff --git a/v2rayN/Resources/notify.png b/v2rayN/Resources/notify.png deleted file mode 100644 index 4752fe6..0000000 Binary files a/v2rayN/Resources/notify.png and /dev/null differ diff --git a/v2rayN/Resources/option.png b/v2rayN/Resources/option.png deleted file mode 100644 index a0973e5..0000000 Binary files a/v2rayN/Resources/option.png and /dev/null differ diff --git a/v2rayN/Resources/pac.txt b/v2rayN/Resources/pac.txt deleted file mode 100644 index 6695b76..0000000 --- a/v2rayN/Resources/pac.txt +++ /dev/null @@ -1,7614 +0,0 @@ -// Generated by gfwlist2pac in precise mode -// https://github.com/clowwindy/gfwlist2pac - -var proxy = "__PROXY__"; - -var rules = [ - "|http://85.17.73.31/", - "||agnesb.fr", - "||akiba-web.com", - "||altrec.com", - "||angela-merkel.de", - "||angola.org", - "||apartmentratings.com", - "||apartments.com", - "||arena.taipei", - "||asianspiss.com", - "||assimp.org", - "||athenaeizou.com", - "||azubu.tv", - "||bankmobilevibe.com", - "||banorte.com", - "||bash-hackers.org", - "||beeg.com", - "||global.bing.com", - "||bloombergview.com", - "||booktopia.com.au", - "||boysmaster.com", - "||bynet.co.il", - "||carfax.com", - ".casinobellini.com", - "||casinobellini.com", - "||centauro.com.br", - "||chobit.cc", - "||clearsurance.com", - "||images.comico.tw", - "||static.comico.tw", - "||counter.social", - "||costco.com", - "||crossfire.co.kr", - "||d2pass.com", - "||darpa.mil", - "||dawangidc.com", - "||deezer.com", - "||desipro.de", - "||dingchin.com.tw", - "||discordapp.com", - "||discordapp.net", - "||dish.com", - "|http://img.dlsite.jp/", - "||dm530.net", - "share.dmhy.org", - "||dmhy.org", - "||dmm.co.jp", - "|http://www.dmm.com/netgame", - "||dnvod.tv", - "||dvdpac.com", - "||eesti.ee", - "||esurance.com", - ".expekt.com", - "||expekt.com", - ".extmatrix.com", - "||extmatrix.com", - "||fakku.net", - "||fastpic.ru", - "||filesor.com", - "||financetwitter.com", - "||flipboard.com", - "||flitto.com", - "||fnac.be", - "||fnac.com", - "||funkyimg.com", - "||fxnetworks.com", - "||g-area.org", - "||gettyimages.com", - "||getuploader.com", - "|https://raw.githubusercontent.com/programthink/zhao", - "||glass8.eu", - "||glype.com", - "||go141.com", - "||guo.media", - "||hautelook.com", - "||hautelookcdn.com", - "||wego.here.com", - "||gamer-cds.cdn.hinet.net", - "||gamer2-cds.cdn.hinet.net", - "||hmvdigital.ca", - "||hmvdigital.com", - "||homedepot.com", - "||hoovers.com", - "||hulu.com", - "||huluim.com", - "|http://secure.hustler.com", - "|http://hustlercash.com", - "|http://www.hustlercash.com", - "||hybrid-analysis.com", - "||cdn*.i-scmp.com", - "||ilovelongtoes.com", - "|http://imgmega.com/*.gif.html", - "|http://imgmega.com/*.jpg.html", - "|http://imgmega.com/*.jpeg.html", - "|http://imgmega.com/*.png.html", - "||imlive.com", - "||tw.iqiyi.com", - "||javhub.net", - "||javhuge.com", - ".javlibrary.com", - "||javlibrary.com", - "||jcpenney.com", - "||jims.net", - "||jukujo-club.com", - "||juliepost.com", - "||kawaiikawaii.jp", - "||kendatire.com", - "||khatrimaza.org", - "||kkbox.com", - "||leisurepro.com", - "||lifemiles.com", - "||longtoes.com", - "||lovetvshow.com", - "|http://www.m-sport.co.uk", - "||macgamestore.com", - "||madonna-av.com", - "||mangafox.com", - "||mangafox.me", - "||manta.com", - "||matome-plus.com", - "||matome-plus.net", - "||mattwilcox.net", - "||metarthunter.com", - "||mfxmedia.com", - "||mojim.com", - "||kb.monitorware.com", - "||monster.com", - "||moodyz.com", - "||moonbingo.com", - "||mos.ru", - "||msha.gov", - "||muzu.tv", - "||mvg.jp", - ".mybet.com", - "||mybet.com", - "||nationwide.com", - "|http://www.nbc.com/live", - "||neo-miracle.com", - "||netflix.com", - "||nflximg.com", - "||nflximg.net", - "||nflxext.com", - "||nflxso.net", - "||nflxvideo.net", - "||nic.gov", - "|http://mo.nightlife141.com", - "||nordstrom.com", - "||nordstromimage.com", - "||nordstromrack.com", - "||nottinghampost.com", - "||npsboost.com", - "||ntdtv.cz", - "||s1.nudezz.com", - "||nusatrip.com", - "||nuuvem.com", - "||omni7.jp", - "||onapp.com", - "||ontrac.com", - "@@|http://blog.ontrac.com", - "||pandora.com", - ".pandora.tv", - "||parkansky.com", - "||phmsociety.org", - "|http://*.pimg.tw/", - "||pure18.com", - "||pytorch.org", - "||qq.co.za", - "||r18.com", - "|http://radiko.jp", - "||ramcity.com.au", - "||rd.com", - "||rdio.com", - "|https://riseup.net", - "||sadistic-v.com", - "||isc.sans.edu", - "|http://cdn*.search.xxx/", - "||shiksha.com", - "||slacker.com", - "||sm-miracle.com", - "||soylentnews.org", - "||spotify.com", - "||spreadshirt.es", - "||springboardplatform.com", - "||sprite.org", - "@@|http://store.sprite.org", - "||superokayama.com", - "||superpages.com", - "||swagbucks.com", - "||switch1.jp", - "||tapanwap.com", - "||gsp.target.com", - "||login.target.com", - "||rcam.target.com", - "||thinkgeek.com", - "||thebodyshop-usa.com", - "||tma.co.jp", - "||tracfone.com", - "||tryheart.jp", - "||turntable.fm", - "||twerkingbutt.com", - "||ulop.net", - "||uukanshu.com", - "||vegasred.com", - "||vevo.com", - "||vip-enterprise.com", - "|http://viu.tv/ch/", - "|http://viu.tv/encore/", - "||vmpsoft.com", - "|http://ecsm.vs.com/", - "||wanz-factory.com", - "||ssl.webpack.de", - "||wheretowatch.com", - "||wingamestore.com", - "||wizcrafts.net", - "||vod.wwe.com", - "||xfinity.com", - "||youwin.com", - "||ytn.co.kr", - "||zattoo.com", - "||zim.vn", - "||zozotown.com", - "14.102.250.18", - "14.102.250.19", - "50.7.31.230:8898", - "174.142.105.153", - "69.65.19.160", - "||xn--4gq171p.com", - "||xn--czq75pvv1aj5c.org", - "||xn--i2ru8q2qg.com", - "||xn--oiq.cc", - "||xn--p8j9a0d9c9a.xn--q9jyb4c", - "||abebooks.com", - "|https://*.s3.amazonaws.com", - "||s3-ap-southeast-2.amazonaws.com", - "||43110.cf", - "||9gag.com", - "||agro.hk", - "||share.america.gov", - "||apkmirror.com", - "||arte.tv", - "||artstation.com", - "||bangdream.space", - "||behance.net", - "||bird.so", - "||zh.bitterwinter.org", - "||bnn.co", - "||businessinsider.com", - "||boomssr.com", - "||bwgyhw.com", - "||castbox.fm", - "||chinatimes.com", - "||clyp.it", - "||cmcn.org", - "||cmx.im", - "||dailyview.tw", - "||daum.net", - "||depositphotos.com", - "||disconnect.me", - "||documentingreality.com", - "||doubibackup.com", - "||doubmirror.cf", - "||encyclopedia.com", - "||fangeqiang.com", - "||fanqiangdang.com", - "||cloud.feedly.com", - "||feedx.net", - "||flyzy2005.com", - "||foreignpolicy.com", - "||free-ss.site", - "||freehongkong.org", - "||blog.fuckgfw233.org", - "||g0v.social", - "||globalvoices.org", - "||glorystar.me", - "||goregrish.com", - "||guangnianvpn.com", - "||hanime.tv", - "||hbo.com", - "||spaces.hightail.com", - "||hkgalden.com", - "||hkgolden.com", - "||hudson.org", - "||ipfs.io", - "||japantimes.co.jp", - "||jiji.com", - "||jintian.net", - "||jinx.com", - "||joinmastodon.org", - "||liangzhichuanmei.com", - "||lighti.me", - "||lightyearvpn.com", - "||lihkg.com", - "||line-scdn.net", - "||i.lithium.com", - "||cloud.mail.ru", - "||cdn-images.mailchimp.com", - "||mastodon.cloud", - "||mastodon.host", - "||mastodon.social", - "||matters.news", - "||me.me", - "||metart.com", - "||mohu.club", - "||mohu.ml", - "||motiyun.com", - "||msa-it.org", - "||dictionary.goo.ne.jp", - "||go.nesnode.com", - "||international-news.newsmagazine.asia", - "||nikkei.com", - "||niu.moe", - "||nofile.io", - "||now.com", - "||sukebei.nyaa.si", - "||openvpn.org", - "||onejav.com", - "||paste.ee", - "||my.pcloud.com", - "||picacomic.com", - "||pincong.rocks", - "||pixiv.net", - "||potato.im", - "||premproxy.com", - "||prism-break.org", - "||protonvpn.com", - "||api.pureapk.com", - "||quora.com", - "||quoracdn.net", - "||qz.com", - "||cdn.seatguru.com", - "||secure.raxcdn.com", - "||redd.it", - "||reddit.com", - ".redditlist.com", - "|http://redditlist.com", - "||redditmedia.com", - "||redditstatic.com", - "||rixcloud.com", - "||rixcloud.us", - "||rsdlmonitor.com", - "||shadowsocks.be", - "||shadowsocks9.com", - "||tn1.shemalez.com", - "||tn2.shemalez.com", - "||tn3.shemalez.com", - "||static.shemalez.com", - "||six-degrees.io", - "||softfamous.com", - "||softsmirror.cf", - "||sosreader.com", - "||sspanel.net", - "||sulian.me", - "||supchina.com", - "||teddysun.com", - "||textnow.me", - "||tineye.com", - "||top10vpn.com", - "||tubepornclassic.com", - "||uku.im", - "||unseen.is", - "||cn.uptodown.com", - "||uraban.me", - "||vrsmash.com", - "||vultryhw.com", - "||scache.vzw.com", - "||scache1.vzw.com", - "||scache2.vzw.com", - "||ss7.vzw.com", - "||ssr.tools", - "||steemit.com", - "||taiwanjustice.net", - "||tinc-vpn.org", - "||u15.info", - "||washingtonpost.com", - "||wenzhao.ca", - "||whatsonweibo.com", - "||wire.com", - "||blog.workflow.is", - "||xm.com", - "||xuehua.us", - "||yes-news.com", - "||yigeni.com", - "||you-get.org", - "||zzcloud.me", - "||aex.com", - "||allcoin.com", - "||adcex.com", - "||bcex.ca", - "||bibox.com", - "||big.one", - "||binance.com", - "||bit-z.com", - "||bitcoinworld.com", - "||bitfinex.com", - "||bithumb.com", - "||bitinka.com.ar", - "||bitmex.com", - "||btc98.com", - "||btcbank.bank", - "||btctrade.im", - "||c2cx.com", - "||chaoex.com", - "||cobinhood.com", - "||coin2co.in", - "||coinbene.com", - ".coinegg.com", - "||coinegg.com", - "||coinex.com", - "||coingi.com", - "||coinrail.co.kr", - "||cointiger.com", - "||cointobe.com", - "||coinut.com", - "||discoins.com", - "||dragonex.io", - "||ebtcbank.com", - "||etherdelta.com", - "||exmo.com", - "||exrates.me", - "||exx.com", - "||fatbtc.com", - "||gate.io", - "||gatecoin.com", - "||hbg.com", - "||hitbtc.com", - "||huobi.com", - "||huobi.pro", - "||huobipro.com", - "||bx.in.th", - "||jex.com", - "||kex.com", - "||kspcoin.com", - "||kucoin.com", - "||lbank.info", - "||livecoin.net", - "||localbitcoins.com", - "||mercatox.com", - "||oex.com", - "||okex.com", - "||otcbtc.com", - "||rightbtc.com", - "||topbtc.com", - "||xbtce.com", - "||yobit.net", - "||zb.com", - "||read01.com", - "||kknews.cc", - "china-mmm.jp.net", - ".lsxszzg.com", - ".china-mmm.net", - "||china-mmm.net", - "china-mmm.sa.com", - ".allowed.org", - ".now.im", - "||amazon.co.jp", - ".amazon.com/Dalai-Lama", - "amazon.com/Prisoner-State-Secret-Journal-Premier", - "s3-ap-northeast-1.amazonaws.com", - "||aolchannels.aol.com", - "video.aol.ca/video-detail", - "video.aol.co.uk/video-detail", - "video.aol.com", - "||video.aol.com", - "||search.aol.com", - "www.aolnews.com", - ".avmo.pw", - ".avmoo.com", - "|http://avmoo.com", - ".avmoo.net", - "|http://avmoo.net", - "||avmoo.pw", - ".javmoo.xyz", - "|http://javmoo.xyz", - ".javtag.com", - "|http://javtag.com", - ".javzoo.com", - "|http://javzoo.com", - ".tellme.pw", - ".bbc.com", - "||bbc.com", - ".bbc.co.uk", - "||bbc.co.uk", - "||bbci.co.uk", - ".bbcchinese.com", - "||bbcchinese.com", - "|http://bbc.in", - ".1dumb.com", - ".25u.com", - ".2waky.com", - ".3-a.net", - ".4dq.com", - ".4mydomain.com", - ".4pu.com", - ".acmetoy.com", - ".almostmy.com", - ".americanunfinished.com", - ".authorizeddns.net", - ".authorizeddns.org", - ".authorizeddns.us", - ".bigmoney.biz", - ".changeip.name", - ".changeip.net", - ".changeip.org", - ".cleansite.biz", - ".cleansite.info", - ".cleansite.us", - ".compress.to", - ".ddns.info", - ".ddns.me.uk", - ".ddns.mobi", - ".ddns.ms", - ".ddns.name", - ".ddns.us", - ".dhcp.biz", - ".dns-dns.com", - ".dns-stuff.com", - ".dns04.com", - ".dns05.com", - ".dns1.us", - ".dns2.us", - ".dnset.com", - ".dnsrd.com", - ".dsmtp.com", - ".dumb1.com", - ".dynamic-dns.net", - ".dynamicdns.biz", - ".dynamicdns.co.uk", - ".dynamicdns.me.uk", - ".dynamicdns.org.uk", - ".dyndns.pro", - ".dynssl.com", - ".edns.biz", - ".epac.to", - ".esmtp.biz", - ".ezua.com", - ".faqserv.com", - ".fartit.com", - ".freeddns.com", - ".freetcp.com", - ".freewww.biz", - ".freewww.info", - ".ftp1.biz", - ".ftpserver.biz", - ".gettrials.com", - ".got-game.org", - ".gr8domain.biz", - ".gr8name.biz", - ".https443.net", - ".https443.org", - ".ikwb.com", - ".instanthq.com", - ".iownyour.biz", - ".iownyour.org", - ".isasecret.com", - ".itemdb.com", - ".itsaol.com", - ".jetos.com", - ".jkub.com", - ".jungleheart.com", - ".justdied.com", - ".lflink.com", - ".lflinkup.com", - ".lflinkup.net", - ".lflinkup.org", - ".longmusic.com", - ".mefound.com", - ".moneyhome.biz", - ".mrbasic.com", - ".mrbonus.com", - ".mrface.com", - ".mrslove.com", - ".my03.com", - ".mydad.info", - ".myddns.com", - ".myftp.info", - ".myftp.name", - ".mylftv.com", - ".mymom.info", - ".mynetav.net", - ".mynetav.org", - ".mynumber.org", - ".mypicture.info", - ".mypop3.net", - ".mypop3.org", - ".mysecondarydns.com", - ".mywww.biz", - ".myz.info", - ".ninth.biz", - ".ns01.biz", - ".ns01.info", - ".ns01.us", - ".ns02.biz", - ".ns02.info", - ".ns02.us", - ".ns1.name", - ".ns2.name", - ".ns3.name", - ".ocry.com", - ".onedumb.com", - ".onmypc.biz", - ".onmypc.info", - ".onmypc.net", - ".onmypc.org", - ".onmypc.us", - ".organiccrap.com", - ".otzo.com", - ".ourhobby.com", - ".pcanywhere.net", - ".port25.biz", - ".proxydns.com", - ".qhigh.com", - ".qpoe.com", - ".rebatesrule.net", - ".sellclassics.com", - ".sendsmtp.com", - ".serveuser.com", - ".serveusers.com", - ".sexidude.com", - ".sexxxy.biz", - ".sixth.biz", - ".squirly.info", - ".ssl443.org", - ".toh.info", - ".toythieves.com", - ".trickip.net", - ".trickip.org", - ".vizvaz.com", - ".wha.la", - ".wikaba.com", - ".www1.biz", - ".wwwhost.biz", - "@@|http://xx.wwwhost.biz", - ".x24hr.com", - ".xxuz.com", - ".xxxy.biz", - ".xxxy.info", - ".ygto.com", - ".youdontcare.com", - ".yourtrap.com", - ".zyns.com", - ".zzux.com", - "d1b183sg0nvnuh.cloudfront.net", - "|https://d1b183sg0nvnuh.cloudfront.net", - "d1c37gjwa26taa.cloudfront.net", - "|https://d1c37gjwa26taa.cloudfront.net", - "d3c33hcgiwev3.cloudfront.net", - "|https://d3c33hcgiwev3.cloudfront.net", - "||d3rhr7kgmtrq1v.cloudfront.net", - ".3d-game.com", - ".4irc.com", - ".b0ne.com", - ".chatnook.com", - ".darktech.org", - ".deaftone.com", - ".dtdns.net", - ".effers.com", - ".etowns.net", - ".etowns.org", - ".flnet.org", - ".gotgeeks.com", - ".scieron.com", - ".slyip.com", - ".slyip.net", - ".suroot.com", - ".blogdns.org", - ".dyndns.org", - ".dyndns-ip.com", - ".dyndns-pics.com", - ".from-sd.com", - ".from-pr.com", - ".is-a-hunter.com", - ".dynu.com", - ".dynu.net", - ".freeddns.org", - "cdninstagram.com", - "||cdninstagram.com", - "||facebook.br", - ".facebook.com", - "||facebook.com", - "@@||v6.facebook.com", - "||facebook.design", - "||connect.facebook.net", - "||facebook.hu", - "||facebook.in", - "||facebook.nl", - "||facebook.se", - "||facebookmail.com", - "||fb.com", - "||fb.me", - "||fbcdn.net", - "||fbsbx.com", - "||fbaddins.com", - "||fbworkmail.com", - ".instagram.com", - "||instagram.com", - "||m.me", - "||messenger.com", - "||oculus.com", - "||oculuscdn.com", - "||rocksdb.org", - "@@||ip6.static.sl-reverse.com", - "||thefacebook.com", - "||whatsapp.com", - "||whatsapp.net", - ".ftchinese.com", - "||ftchinese.com", - "||1e100.net", - "||466453.com", - "||abc.xyz", - "||about.google", - "||admob.com", - "||adsense.com", - "||agoogleaday.com", - "||ai.google", - "||ampproject.org", - "@@|https://www.ampproject.org", - "@@|https://cdn.ampproject.org", - "||android.com", - "||androidify.com", - "||androidtv.com", - "||api.ai", - ".appspot.com", - "||appspot.com", - "||autodraw.com", - "||blog.google", - "||blogblog.com", - "blogspot.com", - "/^https?:\\/\\/[^\\/]+blogspot\\.(.*)/", - ".blogspot.hk", - ".blogspot.jp", - ".blogspot.tw", - "||certificate-transparency.org", - "||chrome.com", - "||chromecast.com", - "||chromeexperiments.com", - "||chromercise.com", - "||chromestatus.com", - "||chromium.org", - "||com.google", - "||crbug.com", - "||creativelab5.com", - "||crisisresponse.google", - "||crrev.com", - "||data-vocabulary.org", - "||debug.com", - "||deepmind.com", - "||deja.com", - "||design.google", - "||digisfera.com", - "||dns.google", - "||domains.google", - "||duck.com", - "||environment.google", - "||feedburner.com", - "||firebaseio.com", - "||g.co", - "||gcr.io", - "||get.app", - "||get.dev", - "||get.how", - "||get.page", - "||getmdl.io", - "||getoutline.org", - "||ggpht.com", - "||gmail.com", - "||gmodules.com", - "||godoc.org", - "||golang.org", - "||goo.gl", - ".google.ae", - ".google.as", - ".google.am", - ".google.at", - ".google.az", - ".google.ba", - ".google.be", - ".google.bg", - ".google.ca", - ".google.cd", - ".google.ci", - ".google.co.id", - ".google.co.jp", - ".google.co.kr", - ".google.co.ma", - ".google.co.uk", - ".google.com", - ".google.de", - "||google.dev", - ".google.dj", - ".google.dk", - ".google.es", - ".google.fi", - ".google.fm", - ".google.fr", - ".google.gg", - ".google.gl", - ".google.gr", - ".google.ie", - ".google.is", - ".google.it", - ".google.jo", - ".google.kz", - ".google.lv", - ".google.mn", - ".google.ms", - ".google.nl", - ".google.nu", - ".google.no", - ".google.ro", - ".google.ru", - ".google.rw", - ".google.sc", - ".google.sh", - ".google.sk", - ".google.sm", - ".google.sn", - ".google.tk", - ".google.tm", - ".google.to", - ".google.tt", - ".google.vu", - ".google.ws", - "/^https?:\\/\\/([^\\/]+\\.)*google\\.(ac|ad|ae|af|al|am|as|at|az|ba|be|bf|bg|bi|bj|bs|bt|by|ca|cat|cd|cf|cg|ch|ci|cl|cm|co.ao|co.bw|co.ck|co.cr|co.id|co.il|co.in|co.jp|co.ke|co.kr|co.ls|co.ma|com|com.af|com.ag|com.ai|com.ar|com.au|com.bd|com.bh|com.bn|com.bo|com.br|com.bz|com.co|com.cu|com.cy|com.do|com.ec|com.eg|com.et|com.fj|com.gh|com.gi|com.gt|com.hk|com.jm|com.kh|com.kw|com.lb|com.ly|com.mm|com.mt|com.mx|com.my|com.na|com.nf|com.ng|com.ni|com.np|com.om|com.pa|com.pe|com.pg|com.ph|com.pk|com.pr|com.py|com.qa|com.sa|com.sb|com.sg|com.sl|com.sv|com.tj|com.tr|com.tw|com.ua|com.uy|com.vc|com.vn|co.mz|co.nz|co.th|co.tz|co.ug|co.uk|co.uz|co.ve|co.vi|co.za|co.zm|co.zw|cv|cz|de|dj|dk|dm|dz|ee|es|eu|fi|fm|fr|ga|ge|gg|gl|gm|gp|gr|gy|hk|hn|hr|ht|hu|ie|im|iq|is|it|it.ao|je|jo|kg|ki|kz|la|li|lk|lt|lu|lv|md|me|mg|mk|ml|mn|ms|mu|mv|mw|mx|ne|nl|no|nr|nu|org|pl|pn|ps|pt|ro|rs|ru|rw|sc|se|sh|si|sk|sm|sn|so|sr|st|td|tg|tk|tl|tm|tn|to|tt|us|vg|vn|vu|ws)\\/.*/", - "||googleapis.cn", - "||googleapis.com", - "||googleapps.com", - "||googleartproject.com", - "||googleblog.com", - "||googlebot.com", - "||googlechinawebmaster.com", - "||googlecode.com", - "||googlecommerce.com", - "||googledomains.com", - "||googlearth.com", - "||googleearth.com", - "||googledrive.com", - "||googlegroups.com", - "||googlehosted.com", - "||googleideas.com", - "||googleinsidesearch.com", - "||googlelabs.com", - "||googlemail.com", - "||googlemashups.com", - "||googlepagecreator.com", - "||googleplay.com", - "||googleplus.com", - "||googlescholar.com", - "||googlesource.com", - "||googleusercontent.com", - ".googlevideo.com", - "||googlevideo.com", - "||googleweblight.com", - "||googlezip.net", - "||groups.google.cn", - "||grow.google", - "||gstatic.com", - "||gvt0.com", - "||gvt1.com", - "@@||redirector.gvt1.com", - "||gvt3.com", - "||gwtproject.org", - "||html5rocks.com", - "||iam.soy", - "||igoogle.com", - "||itasoftware.com", - "||lers.google", - "||like.com", - "||madewithcode.com", - "||material.io", - "||nic.google", - "||on2.com", - "||panoramio.com", - "||picasaweb.com", - "||pki.goog", - "||plus.codes", - "||polymer-project.org", - "||pride.google", - "||questvisual.com", - "||admin.recaptcha.net", - "||api.recaptcha.net", - "||api-secure.recaptcha.net", - "||api-verify.recaptcha.net", - "||redhotlabs.com", - "||registry.google", - "||safety.google", - "||savethedate.foo", - "||schema.org", - "||shattered.io", - "|http://sipml5.org/", - "||stories.google", - "||sustainability.google", - "||synergyse.com", - "||teachparentstech.org", - "||tensorflow.org", - "||tfhub.dev", - "||thinkwithgoogle.com", - "||tiltbrush.com", - "||urchin.com", - "||waveprotocol.org", - "||waymo.com", - "||web.dev", - "||webmproject.org", - "||webrtc.org", - "||whatbrowser.org", - "||widevine.com", - "||withgoogle.com", - "||withyoutube.com", - "||x.company", - "||xn--ngstr-lra8j.com", - "||youtu.be", - ".youtube.com", - "||youtube.com", - "||youtube-nocookie.com", - "||youtubeeducation.com", - "||youtubegaming.com", - "||yt.be", - "||ytimg.com", - "||zynamics.com", - "||naughtyamerica.com", - "static01.nyt.com", - "||nyt.com", - "nytchina.com", - "nytcn.me", - "||nytcn.me", - "||nytco.com", - "|http://nyti.ms/", - ".nytimes.com", - "||nytimes.com", - "||nytimg.com", - "userapi.nytlog.com", - "cn.nytstyle.com", - "||nytstyle.com", - ".steamcommunity.com", - "||steamcommunity.com", - "|http://store.steampowered.com/app/333600", - "||t.me", - "||updates.tdesktop.com", - "||telegram.dog", - "||telegram.me", - "||telegram.org", - ".telegramdownload.com", - "||telesco.pe", - "||jtvnw.net", - "||ttvnw.net", - "||twitch.tv", - "||twitchcdn.net", - "||periscope.tv", - ".pscp.tv", - "||pscp.tv", - ".t.co", - "||t.co", - ".tweetdeck.com", - "||tweetdeck.com", - "||twimg.com", - ".twitpic.com", - "||twitpic.com", - ".twitter.com", - "||twitter.com", - "||twitter.jp", - "||vine.co", - "||gov.taipei", - ".gov.tw", - "|https://aiss.anws.gov.tw", - "||archives.gov.tw", - "||tacc.cwb.gov.tw", - "||data.gov.tw", - "||epa.gov.tw", - "||fa.gov.tw", - "||fda.gov.tw", - "||hpa.gov.tw", - "||immigration.gov.tw", - "||itaiwan.gov.tw", - "||mjib.gov.tw", - "||moeaic.gov.tw", - "||mofa.gov.tw", - "||mol.gov.tw", - "||mvdis.gov.tw", - "||nat.gov.tw", - "||nhi.gov.tw", - "||npa.gov.tw", - "||nsc.gov.tw", - "||ntbk.gov.tw", - "||ntbna.gov.tw", - "||ntbt.gov.tw", - "||ntsna.gov.tw", - "||pcc.gov.tw", - "||stat.gov.tw", - "||taipei.gov.tw", - "||taiwanjobs.gov.tw", - "||thb.gov.tw", - "||tipo.gov.tw", - "||wda.gov.tw", - "||teco-hk.org", - "||teco-mo.org", - "@@||aftygh.gov.tw", - "@@||aide.gov.tw", - "@@||tpde.aide.gov.tw", - "@@||arte.gov.tw", - "@@||chukuang.gov.tw", - "@@||cwb.gov.tw", - "@@||cycab.gov.tw", - "@@||dbnsa.gov.tw", - "@@||df.gov.tw", - "@@||eastcoast-nsa.gov.tw", - "@@||erv-nsa.gov.tw", - "@@||grb.gov.tw", - "@@||gysd.nyc.gov.tw", - "@@||hchcc.gov.tw", - "@@||hsinchu-cc.gov.tw", - "@@||iner.gov.tw", - "@@||klsio.gov.tw", - "@@||kmseh.gov.tw", - "@@||lungtanhr.gov.tw", - "@@||maolin-nsa.gov.tw", - "@@||matsu-news.gov.tw", - "@@||matsu-nsa.gov.tw", - "@@||matsucc.gov.tw", - "@@||moe.gov.tw", - "@@||mvdis.gov.tw", - "@@||nankan.gov.tw", - "@@||ncree.gov.tw", - "@@||necoast-nsa.gov.tw", - "@@||siraya-nsa.gov.tw", - "@@||cromotc.nat.gov.tw", - "@@||tax.nat.gov.tw", - "@@||necoast-nsa.gov.tw", - "@@||ner.gov.tw", - "@@||nmmba.gov.tw", - "@@||nmp.gov.tw", - "@@||nmvttc.gov.tw", - "@@||northguan-nsa.gov.tw", - "@@||npm.gov.tw", - "@@||nstm.gov.tw", - "@@||ntdmh.gov.tw", - "@@||ntl.gov.tw", - "@@||ntsec.gov.tw", - "@@||ntuh.gov.tw", - "@@||nvri.gov.tw", - "@@||penghu-nsa.gov.tw", - "@@||post.gov.tw", - "@@||siraya-nsa.gov.tw", - "@@||stdtime.gov.tw", - "@@||sunmoonlake.gov.tw", - "@@||taitung-house.gov.tw", - "@@||taoyuan.gov.tw", - "@@||tphcc.gov.tw", - "@@||trimt-nsa.gov.tw", - "@@||vghtpe.gov.tw", - "@@||vghks.gov.tw", - "@@||vghtc.gov.tw", - "@@||wanfang.gov.tw", - "@@||yatsen.gov.tw", - "@@||yda.gov.tw", - "||kinmen.org.tw", - ".v2ex.com", - "@@|http://v2ex.com", - "@@|http://cdn.v2ex.com", - "@@|http://cn.v2ex.com", - "@@|http://hk.v2ex.com", - "@@|http://i.v2ex.com", - "@@|http://lax.v2ex.com", - "@@|http://neue.v2ex.com", - "@@|http://pagespeed.v2ex.com", - "@@|http://static.v2ex.com", - "@@|http://workspace.v2ex.com", - "@@|http://www.v2ex.com", - "||data.flurry.com", - "page.bid.yahoo.com", - "tw.bid.yahoo.com", - "|https://tw.bid.yahoo.com", - "blogs.yahoo.co.jp", - "||search.yahoo.co.jp", - "buy.yahoo.com.tw/gdsale", - "hk.yahoo.com", - "hk.knowledge.yahoo.com", - "tw.money.yahoo.com", - "hk.myblog.yahoo.com", - "news.yahoo.com/china-blocks-bbc", - "||hk.news.yahoo.com", - "hk.rd.yahoo.com", - "hk.search.yahoo.com/search", - "hk.video.news.yahoo.com/video", - "meme.yahoo.com", - "tw.answers.yahoo.com", - "|https://tw.answers.yahoo.com", - "||tw.knowledge.yahoo.com", - "||tw.mall.yahoo.com", - "tw.yahoo.com", - "||tw.mobi.yahoo.com", - "tw.myblog.yahoo.com", - "||tw.news.yahoo.com", - "pulse.yahoo.com", - "||search.yahoo.com", - "upcoming.yahoo.com", - "video.yahoo.com", - "||yahoo.com.hk", - "||duckduckgo-owned-server.yahoo.net", - ".030buy.com", - ".0rz.tw", - "|http://0rz.tw", - "1-apple.com.tw", - "||1-apple.com.tw", - ".10.tt", - ".100ke.org", - ".1000giri.net", - "||1000giri.net", - ".10conditionsoflove.com", - "||10musume.com", - "123rf.com", - ".12bet.com", - "||12bet.com", - ".12vpn.com", - ".12vpn.net", - "||12vpn.com", - "||12vpn.net", - ".138.com", - "141hongkong.com/forum", - "||141jj.com", - ".141tube.com", - ".1688.com.au", - ".173ng.com", - "||173ng.com", - ".177pic.info", - ".17t17p.com", - "||18board.com", - "||18board.info", - "18onlygirls.com", - ".18p2p.com", - ".18virginsex.com", - ".1949er.org", - "zhao.1984.city", - "||zhao.1984.city", - "1984bbs.com", - "||1984bbs.com", - ".1984bbs.org", - "||1984bbs.org", - ".1991way.com", - "||1991way.com", - ".1998cdp.org", - ".1bao.org", - "|http://1bao.org", - ".1eew.com", - ".1mobile.com", - "|http://*.1mobile.tw", - "||1pondo.tv", - ".2-hand.info", - ".2000fun.com/bbs", - ".2008xianzhang.info", - "||2008xianzhang.info", - "||2017.hk", - "21andy.com/blog", - ".21join.com", - ".21pron.com", - "21sextury.com", - ".228.net.tw", - "||233abc.com", - "||24hrs.ca", - "24smile.org", - "2lipstube.com", - ".2shared.com", - "30boxes.com", - ".315lz.com", - "||32red.com", - "||36rain.com", - ".3a5a.com", - "3arabtv.com", - ".3boys2girls.com", - ".3proxy.ru", - ".3ren.ca", - ".3tui.net", - "||4bluestones.biz", - ".4chan.com", - ".4everproxy.com", - "||4everproxy.com", - "||4rbtv.com", - "||4shared.com", - "taiwannation.50webs.com", - "||51.ca", - "||51jav.org", - ".51luoben.com", - "||51luoben.com", - ".5278.cc", - ".5299.tv", - "5aimiku.com", - "5i01.com", - ".5isotoi5.org", - ".5maodang.com", - "||63i.com", - ".64museum.org", - "64tianwang.com", - "64wiki.com", - ".66.ca", - "666kb.com", - ".6park.com", - "||6park.com", - "||6parker.com", - "||6parknews.com", - "||7capture.com", - ".7cow.com", - ".8-d.com", - "|http://8-d.com", - "85cc.net", - ".85cc.us", - "|http://85cc.us", - "|http://85st.com", - ".881903.com/page/zh-tw/", - "||881903.com", - ".888.com", - ".888poker.com", - "89.64.charter.constitutionalism.solutions", - "89-64.org", - "||89-64.org", - ".8news.com.tw", - ".8z1.net", - "||8z1.net", - ".9001700.com", - "|http://908taiwan.org/", - "||91porn.com", - "||91vps.club", - ".92ccav.com", - ".991.com", - "|http://991.com", - ".99btgc01.com", - "||99btgc01.com", - ".99cn.info", - "|http://99cn.info", - "||9bis.com", - "||9bis.net", - ".tibet.a.se", - "|http://tibet.a.se", - "||a-normal-day.com", - "a5.com.ru", - "|http://aamacau.com", - ".abc.com", - ".abc.net.au", - "||abc.net.au", - ".abchinese.com", - "abclite.net", - "|https://www.abclite.net", - ".ablwang.com", - ".aboluowang.com", - "||aboluowang.com", - ".aboutgfw.com", - ".abs.edu", - ".accim.org", - ".aceros-de-hispania.com", - ".acevpn.com", - "||acevpn.com", - ".acg18.me", - "|http://acg18.me", - "||acgkj.com", - ".acmedia365.com", - ".acnw.com.au", - "actfortibet.org", - "actimes.com.au", - "activpn.com", - "||activpn.com", - "||aculo.us", - "||addictedtocoffee.de", - ".adelaidebbs.com/bbs", - ".adpl.org.hk", - "|http://adpl.org.hk", - ".adult-sex-games.com", - "||adult-sex-games.com", - "adultfriendfinder.com", - "adultkeep.net/peepshow/members/main.htm", - "||advanscene.com", - "||advertfan.com", - ".ae.org", - "||aenhancers.com", - "||af.mil", - ".afantibbs.com", - "|http://afantibbs.com", - ".ai-kan.net", - "||ai-kan.net", - "ai-wen.net", - ".aiph.net", - "||aiph.net", - ".airasia.com", - "||airconsole.com", - "|http://download.aircrack-ng.org", - ".airvpn.org", - "||airvpn.org", - ".aisex.com", - "||ait.org.tw", - "aiweiwei.com", - ".aiweiweiblog.com", - "||aiweiweiblog.com", - "||www.ajsands.com", - "a248.e.akamai.net", - "||a248.e.akamai.net", - "rfalive1.akacast.akamaistream.net", - "voa-11.akacast.akamaistream.net", - "||abematv.akamaized.net", - "||linear-abematv.akamaized.net", - "||vod-abematv.akamaized.net", - "|https://fbcdn*.akamaihd.net/", - "rthklive2-lh.akamaihd.net", - ".akademiye.org/ug", - "|http://akademiye.org/ug", - "||akiba-online.com", - "||akow.org", - ".al-islam.com", - "||al-qimmah.net", - "||alabout.com", - ".alanhou.com", - "|http://alanhou.com", - ".alarab.qa", - "||alasbarricadas.org", - "alexlur.org", - "||alforattv.net", - ".alhayat.com", - ".alicejapan.co.jp", - "aliengu.com", - "||alkasir.com", - "||allconnected.co", - ".alldrawnsex.com", - "||alldrawnsex.com", - ".allervpn.com", - "||allfinegirls.com", - ".allgirlmassage.com", - "allgirlsallowed.org", - ".allgravure.com", - "alliance.org.hk", - ".allinfa.com", - "||allinfa.com", - ".alljackpotscasino.com", - "||allmovie.com", - "||almasdarnews.com", - ".alphaporno.com", - "||alternate-tools.com", - "alternativeto.net/software", - "alvinalexander.com", - "alwaysdata.com", - "||alwaysdata.com", - "||alwaysdata.net", - ".alwaysvpn.com", - "||alwaysvpn.com", - "||am730.com.hk", - "ameblo.jp", - "||ameblo.jp", - "www1.american.edu/ted/ice/tibet", - "||americangreencard.com", - "|http://www.americorps.gov", - "||amiblockedornot.com", - ".amigobbs.net", - ".amitabhafoundation.us", - "|http://amitabhafoundation.us", - ".amnesty.org", - "||amnesty.org", - "||amnesty.org.hk", - ".amnesty.tw", - ".amnestyusa.org", - "||amnestyusa.org", - ".amnyemachen.org", - ".amoiist.com", - ".amtb-taipei.org", - "androidplus.co/apk", - ".andygod.com", - "|http://andygod.com", - "annatam.com/chinese", - "||anchorfree.com", - "||ancsconf.org", - "||andfaraway.net", - "||android-x86.org", - "angelfire.com/hi/hayashi", - "||angularjs.org", - "animecrazy.net", - ".animeshippuuden.com", - "aniscartujo.com", - "||aniscartujo.com", - "||anobii.com", - "anonymise.us", - ".anonymitynetwork.com", - ".anonymizer.com", - ".anonymouse.org", - "||anonymouse.org", - "anontext.com", - ".anpopo.com", - ".answering-islam.org", - "|http://www.antd.org", - "||anthonycalzadilla.com", - ".anti1984.com", - "antichristendom.com", - ".antiwave.net", - "|http://antiwave.net", - ".anyporn.com", - ".anysex.com", - "|http://anysex.com", - "||aobo.com.au", - ".aofriend.com", - "|http://aofriend.com", - ".aofriend.com.au", - ".aojiao.org", - "||aomiwang.com", - "video.ap.org", - ".apetube.com", - "||apiary.io", - ".apigee.com", - "||apigee.com", - "apk-dl.com", - "apkdler.com/apk/view", - ".apkmonk.com/app", - "||apkplz.com", - "apkpure.com", - "||apkpure.com", - ".aplusvpn.com", - ".appdownloader.net/Android", - ".appledaily.com", - "||appledaily.com", - "appledaily.com.hk", - "||appledaily.com.hk", - "appledaily.com.tw", - "||appledaily.com.tw", - ".appshopper.com", - "|http://appshopper.com", - "||appsocks.net", - "||appsto.re", - ".aptoide.com", - "||aptoide.com", - "||archives.gov", - ".archive.fo", - "||archive.fo", - ".archive.is", - "||archive.is", - ".archive.li", - "||archive.li", - "||archive.org", - "archive.today", - "|https://archive.today", - ".arctosia.com", - "|http://arctosia.com", - "||areca-backup.org", - ".arethusa.su", - "||arethusa.su", - "||arlingtoncemetery.mil", - "||army.mil", - ".art4tibet1998.org", - "artofpeacefoundation.org", - "artsy.net", - "||asacp.org", - "asdfg.jp/dabr", - "asg.to", - ".asia-gaming.com", - ".asiaharvest.org", - "||asiaharvest.org", - "asianews.it", - "|http://japanfirst.asianfreeforum.com/", - "||asiansexdiary.com", - "||asianwomensfilm.de", - ".asiatgp.com", - ".asiatoday.us", - "||askstudent.com", - ".askynz.net", - "||askynz.net", - "||assembla.com", - "||astrill.com", - "||atc.org.au", - ".atchinese.com", - "|http://atchinese.com", - "atgfw.org", - ".atlaspost.com", - "||atlaspost.com", - "||atdmt.com", - ".atlanta168.com/forum", - ".atnext.com", - "||atnext.com", - "ice.audionow.com", - ".av.com", - "||av.movie", - ".av-e-body.com", - "avaaz.org", - "||avaaz.org", - ".avbody.tv", - ".avcity.tv", - ".avcool.com", - ".avdb.in", - "||avdb.in", - ".avdb.tv", - "||avdb.tv", - ".avfantasy.com", - "||avg.com", - ".avgle.com", - "||avgle.com", - "||avidemux.org", - "||avoision.com", - ".avyahoo.com", - "||axureformac.com", - ".azerbaycan.tv", - "azerimix.com", - "boxun*.azurewebsites.net", - "||boxun*.azurewebsites.net", - "forum.baby-kingdom.com", - "babynet.com.hk", - "backchina.com", - "||backchina.com", - ".backpackers.com.tw/forum", - "backtotiananmen.com", - ".badiucao.com", - "||badiucao.com", - ".badjojo.com", - "badoo.com", - "|http://*2.bahamut.com.tw", - "||baidu.jp", - ".baijie.org", - "|http://baijie.org", - "||bailandaily.com", - "||baixing.me", - "||bakgeekhome.tk", - ".banana-vpn.com", - "||banana-vpn.com", - ".band.us", - ".bandwagonhost.com", - "||bandwagonhost.com", - ".bangbrosnetwork.com", - ".bangchen.net", - "|http://bangchen.net", - "||bangyoulater.com", - "bannedbook.org", - "||bannedbook.org", - ".bannednews.org", - ".baramangaonline.com", - "|http://baramangaonline.com", - ".barenakedislam.com", - "||barnabu.co.uk", - "||barton.de", - "bartvpn.com", - ".bastillepost.com", - "bayvoice.net", - "||bayvoice.net", - "dajusha.baywords.com", - "||bbchat.tv", - "||bb-chat.tv", - ".bbg.gov", - ".bbkz.com/forum", - ".bbnradio.org", - "bbs-tw.com", - ".bbsdigest.com/thread", - "||bbsfeed.com", - "bbsland.com", - ".bbsmo.com", - ".bbsone.com", - "bbtoystore.com", - ".bcast.co.nz", - ".bcc.com.tw/board", - ".bcchinese.net", - ".bcmorning.com", - "bdsmvideos.net", - ".beaconevents.com", - ".bebo.com", - "||bebo.com", - ".beevpn.com", - "||beevpn.com", - ".behindkink.com", - "||beijing1989.com", - "beijingspring.com", - "||beijingspring.com", - ".beijingzx.org", - "|http://beijingzx.org", - ".belamionline.com", - ".bell.wiki", - "|http://bell.wiki", - "bemywife.cc", - "beric.me", - ".berlintwitterwall.com", - "||berlintwitterwall.com", - ".berm.co.nz", - ".bestforchina.org", - "||bestforchina.org", - ".bestgore.com", - ".bestpornstardb.com", - "||bestvpn.com", - ".bestvpnanalysis.com", - ".bestvpnserver.com", - ".bestvpnservice.com", - ".bestvpnusa.com", - "||bet365.com", - ".betfair.com", - "||betternet.co", - ".bettervpn.com", - "||bettervpn.com", - ".bettween.com", - "||bettween.com", - "||betvictor.com", - ".bewww.net", - ".beyondfirewall.com", - "||bfnn.org", - "||bfsh.hk", - ".bgvpn.com", - "||bgvpn.com", - ".bianlei.com", - "@@||bianlei.com", - "biantailajiao.com", - "biantailajiao.in", - ".biblesforamerica.org", - "|http://biblesforamerica.org", - ".bic2011.org", - "bigfools.com", - "||bigjapanesesex.com", - ".bignews.org", - "||bignews.org", - ".bigsound.org", - ".biliworld.com", - "|http://biliworld.com", - "|http://billypan.com/wiki", - ".binux.me", - "ai.binwang.me/couplet", - "bipic.net", - ".bit.do", - "|http://bit.do", - ".bit.ly", - "|http://bit.ly", - "||bitcointalk.org", - ".bitshare.com", - "||bitshare.com", - "bitsnoop.com", - ".bitvise.com", - "||bitvise.com", - "bizhat.com", - "||bl-doujinsouko.com", - ".bjnewlife.org", - ".bjs.org", - "bjzc.org", - "||bjzc.org", - ".blacklogic.com", - ".blackvpn.com", - "||blackvpn.com", - "blewpass.com", - "tor.blingblingsquad.net", - ".blinkx.com", - "||blinkx.com", - "blinw.com", - ".blip.tv", - "||blip.tv/", - ".blockcn.com", - "||blockcn.com", - "||blockless.com", - "||blog.de", - ".blog.jp", - "|http://blog.jp", - "@@||jpush.cn", - ".blogcatalog.com", - "||blogcatalog.com", - "||blogcity.me", - ".blogger.com", - "||blogger.com", - "blogimg.jp", - "||blog.kangye.org", - ".bloglines.com", - "||bloglines.com", - "||bloglovin.com", - "rconversation.blogs.com", - "blogtd.net", - ".blogtd.org", - "|http://blogtd.org", - "||bloodshed.net", - ".bloomberg.cn", - "||bloomberg.cn", - ".bloomberg.com", - "||bloomberg.com", - "bloomberg.de", - "||bloomberg.de", - "||assets.bwbx.io", - "||bloomfortune.com", - "blueangellive.com", - ".bmfinn.com", - ".bnews.co", - "||bnews.co", - "||bnrmetal.com", - "boardreader.com/thread", - "||boardreader.com", - ".bod.asia", - "|http://bod.asia", - ".bodog88.com", - ".bolehvpn.net", - "||bolehvpn.net", - "bonbonme.com", - ".bonbonsex.com", - ".bonfoundation.org", - ".bongacams.com", - "||boobstagram.com", - "||book.com.tw", - "bookepub.com", - "||books.com.tw", - "||botanwang.com", - ".bot.nu", - ".bowenpress.com", - "||bowenpress.com", - "||app.box.com", - "dl.box.net", - "||dl.box.net", - ".boxpn.com", - "||boxpn.com", - "boxun.com", - "||boxun.com", - ".boxun.tv", - "||boxun.tv", - "boxunblog.com", - "||boxunblog.com", - ".boxunclub.com", - "boyangu.com", - ".boyfriendtv.com", - ".boysfood.com", - "||br.st", - ".brainyquote.com/quotes/authors/d/dalai_lama", - "||brandonhutchinson.com", - "||braumeister.org", - ".bravotube.net", - "||bravotube.net", - ".brazzers.com", - "||brazzers.com", - ".break.com", - "||break.com", - "breakgfw.com", - "||breakgfw.com", - "breaking911.com", - ".breakingtweets.com", - "||breakingtweets.com", - "||breakwall.net", - "briian.com/6511/freegate", - ".briefdream.com/%E7%B4%A0%E6%A3%BA", - "brizzly.com", - "||brizzly.com", - "||brkmd.com", - "broadbook.com", - ".broadpressinc.com", - "||broadpressinc.com", - "bbs.brockbbs.com", - "brucewang.net", - ".brutaltgp.com", - "||brutaltgp.com", - ".bt2mag.com", - "||bt95.com", - ".btaia.com", - ".btbtav.com", - "|http://btdigg.org", - ".btku.me", - "||btku.me", - "||btku.org", - ".btspread.com", - ".btsynckeys.com", - ".budaedu.org", - "||budaedu.org", - ".buddhanet.com.tw/zfrop/tibet", - ".buddhistchannel.tv", - ".buffered.com", - "|http://buffered.com", - ".bullog.org", - "||bullog.org", - ".bullogger.com", - "||bullogger.com", - "bunbunhk.com", - ".busayari.com", - "|http://busayari.com", - ".businessinsider.com/bing-could-be-censoring-search-results-2014", - ".businessinsider.com/china-banks-preparing-for-debt-implosion-2014", - ".businessinsider.com/hong-kong-activists-defy-police-tear-gas-as-protests-continue-overnight-2014", - ".businessinsider.com/internet-outages-reported-in-north-korea-2014", - ".businessinsider.com/iphone-6-is-approved-for-sale-in-china-2014", - ".businessinsider.com/nfl-announcers-surface-tablets-2014", - ".businessinsider.com/panama-papers", - ".businessinsider.com/umbrella-man-hong-kong-2014", - "|http://www.businessinsider.com.au/*", - ".businesstoday.com.tw", - "||businesstoday.com.tw", - ".businessweek.com", - ".busu.org/news", - "|http://busu.org/news", - "busytrade.com", - ".buugaa.com", - ".buzzhand.com", - ".buzzhand.net", - ".buzzorange.com", - "||buzzorange.com", - "||bvpn.com", - "||bwh1.net", - "bwsj.hk", - "||bx.tl", - ".c-spanvideo.org", - "||c-spanvideo.org", - "||c-est-simple.com", - ".c100tibet.org", - "||cablegatesearch.net", - ".cachinese.com", - ".cacnw.com", - "|http://cacnw.com", - ".cactusvpn.com", - "||cactusvpn.com", - ".cafepress.com", - ".cahr.org.tw", - ".calameo.com/books", - "cn.calameo.com", - "|http://cn.calameo.com", - ".calgarychinese.ca", - ".calgarychinese.com", - ".calgarychinese.net", - "|http://blog.calibre-ebook.com", - "|http://google.calstate.edu", - "falun.caltech.edu", - ".its.caltech.edu/~falun/", - ".cam4.com", - ".cam4.jp", - ".cam4.sg", - ".camfrog.com", - "||camfrog.com", - "||cams.com", - ".cams.org.sg", - "canadameet.com", - ".canalporno.com", - "|http://bbs.cantonese.asia/", - ".canyu.org", - "||canyu.org", - ".cao.im", - ".caobian.info", - "||caobian.info", - "caochangqing.com", - "||caochangqing.com", - ".cap.org.hk", - "||cap.org.hk", - ".carabinasypistolas.com", - "cardinalkungfoundation.org", - "carmotorshow.com", - "ss.carryzhou.com", - ".cartoonmovement.com", - "||cartoonmovement.com", - ".casadeltibetbcn.org", - ".casatibet.org.mx", - "|http://casatibet.org.mx", - "cari.com.my", - "||caribbeancom.com", - ".casinoking.com", - ".casinoriva.com", - "||catch22.net", - ".catchgod.com", - "|http://catchgod.com", - "||catfightpayperview.xxx", - ".catholic.org.hk", - "||catholic.org.hk", - "catholic.org.tw", - "||catholic.org.tw", - ".cathvoice.org.tw", - "||cattt.com", - ".cbc.ca", - "||cbc.ca", - ".cbsnews.com/video", - ".cbtc.org.hk", - "||cccat.cc", - "||cccat.co", - ".ccdtr.org", - "||ccdtr.org", - ".cchere.com", - "||cchere.com", - ".ccim.org", - ".cclife.ca", - "cclife.org", - "cclifefl.org", - ".ccthere.com", - "||ccthere.com", - "||ccthere.net", - ".cctmweb.net", - ".cctongbao.com/article/2078732", - "ccue.ca", - "ccue.com", - ".ccvoice.ca", - ".ccw.org.tw", - ".cgdepot.org", - "|http://cgdepot.org", - "||cdbook.org", - ".cdcparty.com", - ".cdef.org", - "||cdef.org", - "||cdig.info", - "cdjp.org", - "||cdjp.org", - ".cdn-apple.com", - "||cdn-apple.com", - ".cdnews.com.tw", - "cdp1989.org", - "cdp1998.org", - "||cdp1998.org", - "cdp2006.org", - "||cdp2006.org", - ".cdpa.url.tw", - "cdpeu.org", - "cdpusa.org", - "cdpweb.org", - "||cdpweb.org", - "cdpwu.org", - "||cdpwu.org", - "||cdw.com", - ".cecc.gov", - "||cecc.gov", - "||cellulo.info", - "||cenews.eu", - "||centerforhumanreprod.com", - "||centralnation.com", - ".centurys.net", - "|http://centurys.net", - ".cfhks.org.hk", - ".cfos.de", - ".cftfc.com", - ".cgst.edu", - ".change.org", - "||change.org", - ".changp.com", - "||changp.com", - ".changsa.net", - "|http://changsa.net", - ".channel8news.sg/news8", - ".chapm25.com", - ".chaturbate.com", - ".chuang-yen.org", - "chengmingmag.com", - ".chenguangcheng.com", - "||chenguangcheng.com", - ".chenpokong.com", - ".chenpokong.net", - "|http://chenpokong.net", - "||cherrysave.com", - ".chhongbi.org", - "chicagoncmtv.com", - "|http://chicagoncmtv.com", - ".china-week.com", - "china101.com", - "||china101.com", - "||china18.org", - "||china21.com", - "china21.org", - "||china21.org", - ".china5000.us", - "chinaaffairs.org", - "||chinaaffairs.org", - "||chinaaid.me", - "chinaaid.us", - "chinaaid.org", - "chinaaid.net", - "chinacomments.org", - "||chinacomments.org", - ".chinachange.org", - "||chinachange.org", - "chinachannel.hk", - "||chinachannel.hk", - ".chinacitynews.be", - ".chinadialogue.net", - ".chinadigitaltimes.net", - "||chinadigitaltimes.net", - ".chinaelections.org", - "||chinaelections.org", - ".chinaeweekly.com", - "||chinaeweekly.com", - "||chinafreepress.org", - ".chinagate.com", - "chinageeks.org", - "chinagfw.org", - "||chinagfw.org", - ".chinagonet.com", - ".chinagreenparty.org", - "||chinagreenparty.org", - ".chinahorizon.org", - "||chinahorizon.org", - ".chinahush.com", - ".chinainperspective.com", - "||chinainterimgov.org", - "chinalaborwatch.org", - "chinalawtranslate.com", - ".chinapost.com.tw/taiwan/national/national-news", - "chinaxchina.com/howto", - "chinalawandpolicy.com", - ".chinamule.com", - "||chinamule.com", - "chinamz.org", - ".chinanewscenter.com", - "|https://chinanewscenter.com", - ".chinapress.com.my", - "||chinapress.com.my", - ".china-review.com.ua", - "|http://china-review.com.ua", - ".chinarightsia.org", - "chinasmile.net/forums", - "chinasocialdemocraticparty.com", - "||chinasocialdemocraticparty.com", - "chinasoul.org", - "||chinasoul.org", - ".chinasucks.net", - "||chinatopsex.com", - ".chinatown.com.au", - "chinatweeps.com", - "chinaway.org", - ".chinaworker.info", - "||chinaworker.info", - "chinayouth.org.hk", - "chinayuanmin.org", - "||chinayuanmin.org", - ".chinese-hermit.net", - "chinese-leaders.org", - "chinese-memorial.org", - ".chinesedaily.com", - "||chinesedailynews.com", - ".chinesedemocracy.com", - "||chinesedemocracy.com", - "||chinesegay.org", - ".chinesen.de", - "||chinesen.de", - ".chinesenews.net.au/", - ".chinesepen.org", - ".chinesetalks.net/ch", - "||chineseupress.com", - ".chingcheong.com", - "||chingcheong.com", - ".chinman.net", - "|http://chinman.net", - "chithu.org", - "|http://chn.chosun.com", - "cnnews.chosun.com/client/news/viw.asp?cate=C01&mcate", - ".chrdnet.com", - "|http://chrdnet.com", - ".christianfreedom.org", - "|http://christianfreedom.org", - "christianstudy.com", - "||christianstudy.com", - "christusrex.org/www1/sdc", - ".chubold.com", - "chubun.com", - "chuizi.net", - "christiantimes.org.hk", - ".chrlawyers.hk", - "|http://chrlawyers.hk", - ".churchinhongkong.org/b5/index.php", - "|http://churchinhongkong.org/b5/index.php", - ".chushigangdrug.ch", - ".cienen.com", - ".cineastentreff.de", - ".cipfg.org", - "||circlethebayfortibet.org", - "||cirosantilli.com", - ".citizencn.com", - "||citizencn.com", - "|http://citizenlab.org", - "|http://www.citizenlab.org", - "||citizenscommission.hk", - ".citizenlab.org", - "citizensradio.org", - ".city365.ca", - "|http://city365.ca", - "city9x.com", - "||citypopulation.de", - ".citytalk.tw/event", - ".civicparty.hk", - "||civicparty.hk", - ".civildisobediencemovement.org", - "civilhrfront.org", - "||civilhrfront.org", - ".civiliangunner.com", - ".civilmedia.tw", - "||civilmedia.tw", - "psiphon.civisec.org", - "||vpn.cjb.net", - ".ck101.com", - "||ck101.com", - ".clarionproject.org/news/islamic-state-isis-isil-propaganda", - "||classicalguitarblog.net", - ".clb.org.hk", - "clearharmony.net", - "clearwisdom.net", - "clinica-tibet.ru", - ".clipfish.de", - "cloakpoint.com", - "||club1069.com", - "cmi.org.tw", - "|http://www.cmoinc.org", - "cmp.hku.hk", - "hkupop.hku.hk", - "||cmule.com", - "||cmule.org", - "||cms.gov", - "|http://vpn.cmu.edu", - "|http://vpn.sv.cmu.edu", - ".cn6.eu", - ".cna.com.tw", - "||cna.com.tw", - ".cnabc.com", - ".cnd.org", - "||cnd.org", - "download.cnet.com", - ".cnex.org.cn", - ".cnineu.com", - "wiki.cnitter.com", - ".cnn.com/video", - ".cnpolitics.org", - "||cnpolitics.org", - ".cn-proxy.com", - "|http://cn-proxy.com", - ".cnproxy.com", - "blog.cnyes.com", - "news.cnyes.com", - "||coat.co.jp", - ".cochina.co", - "||cochina.co", - "||cochina.org", - ".code1984.com/64", - "|http://goagent.codeplex.com", - "||codeshare.io", - "||codeskulptor.org", - "|http://tosh.comedycentral.com", - "comefromchina.com", - "||comefromchina.com", - ".comic-mega.me", - "commandarms.com", - "||commentshk.com", - ".communistcrimes.org", - "||communistcrimes.org", - "||communitychoicecu.com", - "||compileheart.com", - "||conoha.jp", - ".contactmagazine.net", - ".convio.net", - ".coobay.com", - "|http://www.cool18.com/bbs*/", - ".coolaler.com", - "||coolaler.com", - "coolder.com", - "||coolder.com", - "||coolloud.org.tw", - ".coolncute.com", - "||coolstuffinc.com", - "corumcollege.com", - ".cos-moe.com", - "|http://cos-moe.com", - ".cosplayjav.pl", - "|http://cosplayjav.pl", - ".cotweet.com", - "||cotweet.com", - ".coursehero.com", - "||coursehero.com", - "cpj.org", - "||cpj.org", - ".cq99.us", - "|http://cq99.us", - "crackle.com", - "||crackle.com", - ".crazys.cc", - ".crazyshit.com", - "||crchina.org", - "crd-net.org", - "creaders.net", - "||creaders.net", - ".creadersnet.com", - "||cristyli.com", - ".crocotube.com", - "|http://crocotube.com", - ".crossthewall.net", - "||crossthewall.net", - ".crossvpn.net", - "||crossvpn.net", - "||crucial.com", - "csdparty.com", - "||csdparty.com", - "||csuchen.de", - ".csw.org.uk", - ".ct.org.tw", - "||ct.org.tw", - ".ctao.org", - ".ctfriend.net", - ".ctitv.com.tw", - "cts.com.tw", - "|http://library.usc.cuhk.edu.hk/", - "|http://mjlsh.usc.cuhk.edu.hk/", - ".cuhkacs.org/~benng", - ".cuihua.org", - "||cuihua.org", - ".cuiweiping.net", - "||cuiweiping.net", - "||culture.tw", - ".cumlouder.com", - "||cumlouder.com", - "||curvefish.com", - ".cusu.hk", - "||cusu.hk", - ".cutscenes.net", - ".cw.com.tw", - "||cw.com.tw", - "|http://forum.cyberctm.com", - "cyberghostvpn.com", - "||cyberghostvpn.com", - "||cynscribe.com", - "cytode.us", - "||ifan.cz.cc", - "||mike.cz.cc", - "||nic.cz.cc", - ".d-fukyu.com", - "|http://d-fukyu.com", - "cl.d0z.net", - ".d100.net", - "||d100.net", - ".d2bay.com", - "|http://d2bay.com", - ".dabr.co.uk", - "||dabr.co.uk", - "dabr.eu", - "dabr.mobi", - "||dabr.mobi", - "||dabr.me", - "dadazim.com", - "||dadazim.com", - ".dadi360.com", - ".dafabet.com", - "dafagood.com", - "dafahao.com", - ".dafoh.org", - ".daftporn.com", - ".dagelijksestandaard.nl", - ".daidostup.ru", - "|http://daidostup.ru", - ".dailidaili.com", - "||dailidaili.com", - ".dailymotion.com", - "||dailymotion.com", - "daiphapinfo.net", - ".dajiyuan.com", - "||dajiyuan.de", - "dajiyuan.eu", - "dalailama.com", - ".dalailama.mn", - "|http://dalailama.mn", - ".dalailama.ru", - "||dalailama.ru", - "dalailama80.org", - ".dalailama-archives.org", - ".dalailamacenter.org", - "|http://dalailamacenter.org", - "dalailamafellows.org", - ".dalailamafilm.com", - ".dalailamafoundation.org", - ".dalailamahindi.com", - ".dalailamainaustralia.org", - ".dalailamajapanese.com", - ".dalailamaprotesters.info", - ".dalailamaquotes.org", - ".dalailamatrust.org", - ".dalailamavisit.org.nz", - ".dalailamaworld.com", - "||dalailamaworld.com", - "dalianmeng.org", - "||dalianmeng.org", - ".daliulian.org", - "||daliulian.org", - ".danke4china.net", - "||danke4china.net", - ".danwei.org", - "daolan.net", - ".daozhongxing.org", - "darktoy.net", - "||dastrassi.org", - "blog.daum.net/_blog", - ".david-kilgour.com", - "|http://david-kilgour.com", - "daxa.cn", - "||daxa.cn", - "cn.dayabook.com", - ".daylife.com/topic/dalai_lama", - "||db.tt", - ".dbc.hk/main", - "||dcard.tw", - "dcmilitary.com", - ".ddc.com.tw", - ".ddhw.info", - "||de-sci.org", - ".de-sci.org", - "packages.debian.org/zh-cn/lenny/gpass", - "||decodet.co", - ".definebabe.com", - "||delcamp.net", - "delicious.com/GFWbookmark", - ".democrats.org", - "||democrats.org", - ".demosisto.hk", - "||demosisto.hk", - "||desc.se", - "||dessci.com", - ".destroy-china.jp", - "||deutsche-welle.de", - "||devio.us", - "||devpn.com", - "||dfas.mil", - "dfn.org", - "dharmakara.net", - ".dharamsalanet.com", - ".diaoyuislands.org", - "||diaoyuislands.org", - ".difangwenge.org", - "|http://digiland.tw/", - "||digitalnomadsproject.org", - ".diigo.com", - "||diigo.com", - "||dilber.se", - "||furl.net", - ".dipity.com", - "||directcreative.com", - ".discuss.com.hk", - "||discuss.com.hk", - ".discuss4u.com", - "disp.cc", - ".disqus.com", - "||disqus.com", - ".dit-inc.us", - "||dit-inc.us", - ".dizhidizhi.com", - "||dizhuzhishang.com", - "djangosnippets.org", - ".djorz.com", - "||djorz.com", - "||dl-laby.jp", - "||dlsite.com", - "||dlyoutube.com", - "||dmcdn.net", - ".dnscrypt.org", - "||dnscrypt.org", - "||dns2go.com", - "||dnssec.net", - "doctorvoice.org", - ".dogfartnetwork.com/tour", - "gloryhole.com", - ".dojin.com", - ".dok-forum.net", - "||dolc.de", - "||dolf.org.hk", - "||dollf.com", - ".domain.club.tw", - ".domaintoday.com.au", - "chinese.donga.com", - "dongtaiwang.com", - "||dongtaiwang.com", - ".dongtaiwang.net", - "||dongtaiwang.net", - ".dongyangjing.com", - "|http://danbooru.donmai.us", - ".dontfilter.us", - "||dontmovetochina.com", - ".dorjeshugden.com", - ".dotplane.com", - "||dotplane.com", - "||dotsub.com", - ".dotvpn.com", - "||dotvpn.com", - ".doub.io", - "||doub.io", - "||dougscripts.com", - "||douhokanko.net", - "||doujincafe.com", - "dowei.org", - "dphk.org", - "dpp.org.tw", - "||dpp.org.tw", - "||dpr.info", - "||dragonsprings.org", - ".dreamamateurs.com", - ".drepung.org", - "||drgan.net", - ".drmingxia.org", - "|http://drmingxia.org", - "||dropbooks.tv", - "||dropbox.com", - "||api.dropboxapi.com", - "||notify.dropboxapi.com", - "||dropboxusercontent.com", - "drsunacademy.com", - ".drtuber.com", - ".dscn.info", - "|http://dscn.info", - ".dstk.dk", - "|http://dstk.dk", - "||dtiblog.com", - "||dtic.mil", - ".dtwang.org", - ".duanzhihu.com", - ".duckdns.org", - "|http://duckdns.org", - ".duckduckgo.com", - "||duckduckgo.com", - ".duckload.com/download", - "||duckmylife.com", - ".duga.jp", - "|http://duga.jp", - ".duihua.org", - "||duihua.org", - "||duihuahrjournal.org", - ".dunyabulteni.net", - ".duoweitimes.com", - "||duoweitimes.com", - "duping.net", - "||duplicati.com", - "dupola.com", - "dupola.net", - ".dushi.ca", - "||dvorak.org", - ".dw.com", - "||dw.com", - "||dw.de", - ".dw-world.com", - "||dw-world.com", - ".dw-world.de", - "|http://dw-world.de", - "www.dwheeler.com", - "dwnews.com", - "||dwnews.com", - "dwnews.net", - "||dwnews.net", - "xys.dxiong.com", - "||dynawebinc.com", - "||dysfz.cc", - ".dzze.com", - "||e-classical.com.tw", - "||e-gold.com", - ".e-gold.com", - ".e-hentai.org", - "||e-hentai.org", - ".e-hentaidb.com", - "|http://e-hentaidb.com", - "e-info.org.tw", - ".e-traderland.net/board", - ".e-zone.com.hk/discuz", - "|http://e-zone.com.hk/discuz", - ".e123.hk", - "||e123.hk", - ".earlytibet.com", - "|http://earlytibet.com", - ".earthcam.com", - ".earthvpn.com", - "||earthvpn.com", - "eastern-ark.com", - ".easternlightning.org", - ".eastturkestan.com", - "|http://www.eastturkistan.net/", - ".eastturkistan-gov.org", - ".eastturkistancc.org", - ".eastturkistangovernmentinexile.us", - "||eastturkistangovernmentinexile.us", - ".easyca.ca", - ".easypic.com", - ".ebony-beauty.com", - "ebookbrowse.com", - "ebookee.com", - "||ecfa.org.tw", - "ushuarencity.echainhost.com", - "||ecimg.tw", - "ecministry.net", - ".economist.com", - "bbs.ecstart.com", - "edgecastcdn.net", - "||edgecastcdn.net", - "/twimg\\.edgesuite\\.net\\/\\/?appledaily/", - "edicypages.com", - ".edmontonchina.cn", - ".edmontonservice.com", - "edoors.com", - ".edubridge.com", - "||edubridge.com", - ".edupro.org", - "||eevpn.com", - "efcc.org.hk", - ".efukt.com", - "|http://efukt.com", - "||eic-av.com", - "||eireinikotaerukai.com", - ".eisbb.com", - ".eksisozluk.com", - "||eksisozluk.com", - "electionsmeter.com", - "||elgoog.im", - ".ellawine.org", - ".elpais.com", - "||elpais.com", - ".eltondisney.com", - ".emaga.com/info/3407", - "emilylau.org.hk", - ".emanna.com/chineseTraditional", - "bitc.bme.emory.edu/~lzhou/blogs", - ".empfil.com", - ".emule-ed2k.com", - "|http://emule-ed2k.com", - ".emulefans.com", - "|http://emulefans.com", - ".emuparadise.me", - ".enanyang.my", - "||enewstree.com", - ".enfal.de", - "chinese.engadget.com", - "||engagedaily.org", - "englishforeveryone.org", - "||englishfromengland.co.uk", - "englishpen.org", - ".enlighten.org.tw", - "||entermap.com", - ".entnt.com", - "|http://entnt.com", - ".episcopalchurch.org", - ".epochhk.com", - "|http://epochhk.com", - "epochtimes-bg.com", - "||epochtimes-bg.com", - "epochtimes-romania.com", - "||epochtimes-romania.com", - "epochtimes.co.il", - "||epochtimes.co.il", - "epochtimes.co.kr", - "||epochtimes.co.kr", - "epochtimes.com", - "||epochtimes.com", - ".epochtimes.cz", - "epochtimes.de", - "epochtimes.fr", - ".epochtimes.ie", - ".epochtimes.it", - "epochtimes.jp", - "epochtimes.ru", - "epochtimes.se", - "epochtimestr.com", - ".epochweek.com", - "||epochweek.com", - "||epochweekly.com", - ".eporner.com", - ".equinenow.com", - "erabaru.net", - ".eracom.com.tw", - ".eraysoft.com.tr", - ".erepublik.com", - ".erights.net", - "||erights.net", - ".erktv.com", - "|http://erktv.com", - "||ernestmandel.org", - "||erodaizensyu.com", - "||erodoujinlog.com", - "||erodoujinworld.com", - "||eromanga-kingdom.com", - "||eromangadouzin.com", - ".eromon.net", - "|http://eromon.net", - ".eroprofile.com", - ".eroticsaloon.net", - ".eslite.com", - "||eslite.com", - "wiki.esu.im/%E8%9B%A4%E8%9B%A4%E8%AF%AD%E5%BD%95", - ".etaa.org.au", - ".etadult.com", - "etaiwannews.com", - "||etizer.org", - "||etokki.com", - ".ettoday.net/news/20151216/614081", - "etvonline.hk", - ".eu.org", - "||eu.org", - ".eucasino.com", - ".eulam.com", - ".eurekavpt.com", - "||eurekavpt.com", - ".euronews.com", - "||euronews.com", - "eeas.europa.eu/delegations/china/press_corner/all_news/news/2015/20150716_zh", - "eeas.europa.eu/statements-eeas/2015/151022", - ".evschool.net", - "|http://evschool.net", - "||exblog.jp", - "||blog.exblog.co.jp", - "@@||www.exblog.jp", - ".exchristian.hk", - "||exchristian.hk", - "|http://blog.excite.co.jp", - "||exmormon.org", - "||expatshield.com", - ".expecthim.com", - "||expecthim.com", - "experts-univers.com", - "||exploader.net", - ".expressvpn.com", - "||expressvpn.com", - ".extremetube.com", - "eyevio.jp", - "||eyevio.jp", - ".eyny.com", - "||eyny.com", - ".ezpc.tk/category/soft", - ".ezpeer.com", - "||facebookquotes4u.com", - ".faceless.me", - "||faceless.me", - "|http://facesoftibetanselfimmolators.info", - "||facesofnyfw.com", - ".faith100.org", - "|http://faith100.org", - ".faithfuleye.com", - "||faiththedog.info", - ".fakku.net", - ".falsefire.com", - "||falsefire.com", - "falun-co.org", - "falunart.org", - "||falunasia.info", - "|http://falunau.org", - ".falunaz.net", - "falundafa.org", - "falundafa-dc.org", - "||falundafa-florida.org", - "||falundafa-nc.org", - "||falundafa-pa.net", - "||falundafa-sacramento.org", - "falun-ny.net", - "||falundafaindia.org", - "falundafamuseum.org", - ".falungong.club", - ".falungong.de", - "falungong.org.uk", - "||falunhr.org", - "faluninfo.de", - "faluninfo.net", - ".falunpilipinas.net", - "||falunworld.net", - "familyfed.org", - ".fangeming.com", - "||fanglizhi.info", - "||fangong.org", - "fangongheike.com", - ".fanqiang.tk", - "fanqianghou.com", - "||fanqianghou.com", - ".fanqiangzhe.com", - "||fanqiangzhe.com", - "fapdu.com", - "faproxy.com", - ".fawanghuihui.org", - "fanqiangyakexi.net", - "fail.hk", - "||famunion.com", - ".fan-qiang.com", - ".fangbinxing.com", - "||fangbinxing.com", - "fangeming.com", - ".fangmincn.org", - "||fangmincn.org", - ".fanhaodang.com", - "||fanswong.com", - ".fanyue.info", - ".farwestchina.com", - "en.favotter.net", - "nytimes.map.fastly.net", - "||nytimes.map.fastly.net", - "||fast.wistia.com", - "||fastssh.com", - "||faststone.org", - "favstar.fm", - "||favstar.fm", - "faydao.com/weblog", - ".fc2.com", - ".fc2china.com", - ".fc2cn.com", - "||fc2cn.com", - "fc2blog.net", - "|http://uygur.fc2web.com/", - "video.fdbox.com", - ".fdc64.de", - ".fdc64.org", - ".fdc89.jp", - "||fourface.nodesnoop.com", - "||feelssh.com", - "feer.com", - ".feifeiss.com", - "|http://feitianacademy.org", - ".feitian-california.org", - "||feministteacher.com", - ".fengzhenghu.com", - "||fengzhenghu.com", - ".fengzhenghu.net", - "||fengzhenghu.net", - ".fevernet.com", - "|http://ff.im", - "fffff.at", - "fflick.com", - ".ffvpn.com", - "fgmtv.net", - ".fgmtv.org", - ".fhreports.net", - "|http://fhreports.net", - ".figprayer.com", - "||figprayer.com", - ".fileflyer.com", - "||fileflyer.com", - "|http://feeds.fileforum.com", - ".files2me.com", - ".fileserve.com/file", - "fillthesquare.org", - "filmingfortibet.org", - ".filthdump.com", - ".finchvpn.com", - "||finchvpn.com", - "findmespot.com", - "||findyoutube.com", - "||findyoutube.net", - ".fingerdaily.com", - "finler.net", - ".firearmsworld.net", - "|http://firearmsworld.net", - ".fireofliberty.org", - "||fireofliberty.org", - ".firetweet.io", - "||firetweet.io", - ".flagsonline.it", - "fleshbot.com", - ".fleursdeslettres.com", - "|http://fleursdeslettres.com", - "||flgg.us", - "||flgjustice.org", - "||flickr.com", - "||staticflickr.com", - "flickrhivemind.net", - ".flickriver.com", - ".fling.com", - "||flipkart.com", - "||flog.tw", - ".flyvpn.com", - "||flyvpn.com", - "|http://cn.fmnnow.com", - "fofldfradio.org", - "blog.foolsmountain.com", - ".forum4hk.com", - "fangong.forums-free.com", - "pioneer-worker.forums-free.com", - "|https://ss*.4sqi.net", - "video.foxbusiness.com", - "|http://foxgay.com", - "||fringenetwork.com", - "||flecheinthepeche.fr", - ".fochk.org", - "|http://fochk.org", - "||focustaiwan.tw", - ".focusvpn.com", - "||fofg.org", - ".fofg-europe.net", - ".fooooo.com", - "||fooooo.com", - "footwiball.com", - ".fotile.me", - "||fourthinternational.org", - "||foxdie.us", - "||foxsub.com", - "foxtang.com", - ".fpmt.org", - "|http://fpmt.org", - ".fpmt.tw", - ".fpmt-osel.org", - "||fpmtmexico.org", - "fqok.org", - "||fqrouter.com", - "||franklc.com", - ".freakshare.com", - "|http://freakshare.com", - "||free4u.com.ar", - "free-gate.org", - ".free-hada-now.org", - "free-proxy.cz", - ".free.fr/adsl", - "kineox.free.fr", - "tibetlibre.free.fr", - "||freealim.com", - "whitebear.freebearblog.org", - "||freebrowser.org", - ".freechal.com", - ".freedomchina.info", - "||freedomchina.info", - ".freedomhouse.org", - "||freedomhouse.org", - ".freedomsherald.org", - "||freedomsherald.org", - ".freefq.com", - ".freefuckvids.com", - ".freegao.com", - "||freegao.com", - "freeilhamtohti.org", - ".freekwonpyong.org", - "||saveliuxiaobo.com", - ".freelotto.com", - "||freelotto.com", - "freeman2.com", - ".freeopenvpn.com", - "freemoren.com", - "freemorenews.com", - "freemuse.org/archives/789", - "freenet-china.org", - "freenewscn.com", - "cn.freeones.com", - ".freeoz.org/bbs", - "||freeoz.org", - "||freessh.us", - "free4u.com.ar", - ".free-ssh.com", - "||free-ssh.com", - ".freechina.news/", - "||freechinaforum.org", - "||freechinaweibo.com", - ".freedomcollection.org/interviews/rebiya_kadeer", - ".freeforums.org", - "||freenetproject.org", - ".freeoz.org", - ".freetibet.net", - "||freetibet.org", - ".freetibetanheroes.org", - "|http://freetibetanheroes.org", - ".freeviewmovies.com", - ".freevpn.me", - "|http://freevpn.me", - "||freewallpaper4.me", - ".freewebs.com", - ".freewechat.com", - "||freewechat.com", - "freeweibo.com", - "||freeweibo.com", - ".freexinwen.com", - ".freeyoutubeproxy.net", - "||freeyoutubeproxy.net", - "friendfeed.com", - "friendfeed-media.com/e99a4ebe2fb4c1985c2a58775eb4422961aa5a2e", - "friends-of-tibet.org", - ".friendsoftibet.org", - "freechina.net", - "|http://www.zensur.freerk.com/", - "freevpn.nl", - "freeyellow.com", - "hk.frienddy.com/hk", - "|http://adult.friendfinder.com/", - ".fring.com", - "||fring.com", - ".fromchinatousa.net", - "||frommel.net", - ".frontlinedefenders.org", - ".frootvpn.com", - "||frootvpn.com", - "||fscked.org", - ".fsurf.com", - ".ftv.com.tw", - "fucd.com", - ".fuckcnnic.net", - "||fuckcnnic.net", - "fuckgfw.org", - ".fulione.com", - "|https://fulione.com", - "||fullerconsideration.com", - "fulue.com", - ".funf.tw", - "funp.com", - ".fuq.com", - ".furhhdl.org", - "||furinkan.com", - ".futurechinaforum.org", - "||futuremessage.org", - ".fux.com", - ".fuyin.net", - ".fuyindiantai.org", - ".fuyu.org.tw", - "||fw.cm", - ".fxcm-chinese.com", - "||fxcm-chinese.com", - "fzh999.com", - "fzh999.net", - "fzlm.com", - ".g6hentai.com", - "|http://g6hentai.com", - "||g-queen.com", - "||gabocorp.com", - ".gaeproxy.com", - ".gaforum.org", - ".galaxymacau.com", - "||galenwu.com", - ".galstars.net", - "||game735.com", - "gamebase.com.tw", - "gamejolt.com", - "|http://wiki.gamerp.jp", - "||gamer.com.tw", - ".gamer.com.tw", - ".gamez.com.tw", - "||gamez.com.tw", - ".gamousa.com", - ".gaoming.net", - "||gaoming.net", - "ganges.com", - ".gaopi.net", - "|http://gaopi.net", - ".gaozhisheng.org", - ".gaozhisheng.net", - "gardennetworks.com", - "||gardennetworks.org", - "72.52.81.22", - "||gartlive.com", - "||gate-project.com", - "||gather.com", - ".gatherproxy.com", - "gati.org.tw", - ".gaybubble.com", - ".gaycn.net", - ".gayhub.com", - "||gaymap.cc", - ".gaymenring.com", - ".gaytube.com", - "||images-gaytube.com", - ".gaywatch.com", - "|http://gaywatch.com", - ".gazotube.com", - "||gazotube.com", - "||gcc.org.hk", - "||gclooney.com", - "||gcmasia.com", - ".gcpnews.com", - "|http://gcpnews.com", - ".gdbt.net/forum", - "gdzf.org", - "||geek-art.net", - "geekerhome.com/2010/03/xixiang-project-cross-gfw", - "||geekheart.info", - ".gekikame.com", - "|http://gekikame.com", - ".gelbooru.com", - "|http://gelbooru.com", - ".geocities.co.jp", - ".geocities.com/SiliconValley/Circuit/5683/download.html", - "hk.geocities.com", - "geocities.jp", - ".gerefoundation.org", - "||getastrill.com", - ".getchu.com", - ".getcloak.com", - "||getcloak.com", - "||getfoxyproxy.org", - ".getfreedur.com", - "||getgom.com", - ".geti2p.net", - "||geti2p.net", - ".getlantern.org", - "||getlantern.org", - ".getjetso.com/forum", - "getiton.com", - ".getsocialscope.com", - "||getsync.com", - "gfbv.de", - ".gfgold.com.hk", - ".gfsale.com", - "||gfsale.com", - "gfw.org.ua", - ".gfw.press", - "||gfw.press", - ".ggssl.com", - "||ggssl.com", - ".ghostpath.com", - "||ghostpath.com", - "||ghut.org", - ".giantessnight.com", - "|http://giantessnight.com", - ".gifree.com", - "||giga-web.jp", - "tw.gigacircle.com", - "|http://cn.giganews.com/", - "gigporno.ru", - "||girlbanker.com", - ".git.io", - "||git.io", - "|http://softwaredownload.gitbooks.io", - "github.com/getlantern", - "|https://gist.github.com", - "http://cthlo.github.io/hktv", - "hahaxixi.github.io", - "|https://hahaxixi.github.io", - "||haoel.github.io", - "||rg3.github.io", - "||sikaozhe1997.github.io", - "||sodatea.github.io", - "||terminus2049.github.io", - "||toutyrater.github.io", - "wsgzao.github.io", - "|https://wsgzao.github.io", - "||raw.githubusercontent.com", - ".gizlen.net", - "||gizlen.net", - ".gjczz.com", - "||gjczz.com", - "globaljihad.net", - "globalmediaoutreach.com", - "globalmuseumoncommunism.org", - "||globalrescue.net", - ".globaltm.org", - ".globalvoicesonline.org", - "||globalvoicesonline.org", - "||globalvpn.net", - ".glock.com", - "gluckman.com/DalaiLama", - "gmbd.cn", - "||gmhz.org", - "|http://www.gmiddle.com", - "|http://www.gmiddle.net", - ".gmll.org", - "||gnci.org.hk", - "go-pki.com", - "||goagent.biz", - "||goagentplus.com", - "gobet.cc", - "godfootsteps.org", - "||godfootsteps.org", - "godns.work", - "godsdirectcontact.co.uk", - ".godsdirectcontact.org", - "godsdirectcontact.org.tw", - ".godsimmediatecontact.com", - ".gogotunnel.com", - "||gohappy.com.tw", - ".gokbayrak.com", - ".goldbet.com", - "||goldbetsports.com", - "||goldeneyevault.com", - ".goldenfrog.com", - "||goldenfrog.com", - ".goldjizz.com", - "|http://goldjizz.com", - ".goldstep.net", - "||goldwave.com", - "gongmeng.info", - "gongm.in", - "gongminliliang.com", - ".gongwt.com", - "|http://gongwt.com", - "blog.goo.ne.jp/duck-tail_2009", - ".gooday.xyz", - "|http://gooday.xyz", - ".goodreads.com", - "||goodreads.com", - ".goodreaders.com", - "||goodreaders.com", - ".goodtv.com.tw", - ".goodtv.tv", - "||goofind.com", - ".googlesile.com", - ".gopetition.com", - "||gopetition.com", - ".goproxing.net", - ".gotrusted.com", - "||gotrusted.com", - "||gotw.ca", - "||grammaly.com", - "grandtrial.org", - ".graphis.ne.jp", - "||graphis.ne.jp", - "||graphql.org", - "greatfirewall.biz", - "||greatfirewallofchina.net", - ".greatfirewallofchina.org", - "||greatfirewallofchina.org", - "||greenfieldbookstore.com.hk", - ".greenparty.org.tw", - "||greenpeace.org", - ".greenreadings.com/forum", - "great-firewall.com", - "great-roc.org", - "greatroc.org", - "greatzhonghua.org", - ".greenpeace.com.tw", - ".greenvpn.net", - "||greenvpn.net", - ".greenvpn.org", - "||grotty-monday.com", - "gs-discuss.com", - "||gtricks.com", - "guancha.org", - "guaneryu.com", - ".guardster.com", - ".gun-world.net", - "gunsandammo.com", - "||gutteruncensored.com", - "||gvm.com.tw", - ".gzm.tv", - "||gzone-anime.info", - "||clementine-player.org", - "echofon.com", - "||greasespot.net", - "||www.klip.me", - "@@||site.locql.com", - "||stephaniered.com", - "@@||download.syniumsoftware.com", - "|http://ub0.cc", - "wozy.in", - "gospelherald.com", - "||gospelherald.com", - "|http://hk.gradconnection.com/", - "||grangorz.org", - "greatfire.org", - "||greatfire.org", - "greatfirewallofchina.org", - "||greatroc.tw", - ".gts-vpn.com", - "|http://gts-vpn.com", - ".gu-chu-sum.org", - "|http://gu-chu-sum.org", - ".guaguass.com", - "|http://guaguass.com", - ".guaguass.org", - "|http://guaguass.org", - ".guangming.com.my", - "guishan.org", - "||guishan.org", - ".gumroad.com", - "||gumroad.com", - "||gunsamerica.com", - "guruonline.hk", - "|http://gvlib.com", - ".gyalwarinpoche.com", - ".gyatsostudio.com", - ".h528.com", - ".h5dm.com", - ".h5galgame.me", - "||h-china.org", - ".h-moe.com", - "|http://h-moe.com", - "h1n1china.org", - ".hacg.club", - "||hacg.club", - ".hacg.in", - "|http://hacg.in", - ".hacg.li", - "|http://hacg.li", - ".hacg.me", - "|http://hacg.me", - ".hacg.red", - "|http://hacg.red", - ".hacken.cc/bbs", - ".hacker.org", - "||hackthatphone.net", - "hahlo.com", - "||hakkatv.org.tw", - ".handcraftedsoftware.org", - "|http://bbs.hanminzu.org/", - ".hanunyi.com", - ".hao.news/news", - "|http://ae.hao123.com", - "|http://ar.hao123.com", - "|http://br.hao123.com", - "|http://en.hao123.com", - "|http://id.hao123.com", - "|http://jp.hao123.com", - "|http://ma.hao123.com", - "|http://mx.hao123.com", - "|http://sa.hao123.com", - "|http://th.hao123.com", - "|http://tw.hao123.com", - "|http://vn.hao123.com", - "|http://hk.hao123img.com", - "|http://ld.hao123img.com", - "||happy-vpn.com", - ".haproxy.org", - "||hardsextube.com", - ".harunyahya.com", - "|http://harunyahya.com", - "bbs.hasi.wang", - "have8.com", - "@@||haygo.com", - ".hclips.com", - "||hdlt.me", - "||hdtvb.net", - ".hdzog.com", - "|http://hdzog.com", - "||heartyit.com", - ".heavy-r.com", - ".hec.su", - "|http://hec.su", - ".hecaitou.net", - "||hecaitou.net", - ".hechaji.com", - "||hechaji.com", - "||heeact.edu.tw", - ".hegre-art.com", - "|http://hegre-art.com", - "||cdn.helixstudios.net", - "||helplinfen.com", - "||helloandroid.com", - "||helloqueer.com", - ".helloss.pw", - "hellotxt.com", - "||hellotxt.com", - ".hentai.to", - ".hellouk.org/forum/lofiversion", - ".helpeachpeople.com", - "||helpeachpeople.com", - "||helpster.de", - ".helpzhuling.org", - "hentaitube.tv", - ".hentaivideoworld.com", - "||id.heroku.com", - "heqinglian.net", - "||heungkongdiscuss.com", - ".hexieshe.com", - "||hexieshe.com", - "||hexieshe.xyz", - "||hexxeh.net", - "app.heywire.com", - ".heyzo.com", - ".hgseav.com", - ".hhdcb3office.org", - ".hhthesakyatrizin.org", - "hi-on.org.tw", - "hidden-advent.org", - "||hidden-advent.org", - "hidecloud.com/blog/2008/07/29/fuck-beijing-olympics.html", - "||hide.me", - ".hidein.net", - ".hideipvpn.com", - "||hideipvpn.com", - ".hideman.net", - "||hideman.net", - "hideme.nl", - "||hidemy.name", - ".hidemyass.com", - "||hidemyass.com", - "hidemycomp.com", - "||hidemycomp.com", - ".hihiforum.com", - ".hihistory.net", - "||hihistory.net", - ".higfw.com", - "highpeakspureearth.com", - "||highrockmedia.com", - "||hiitch.com", - "||hikinggfw.org", - ".hilive.tv", - ".himalayan-foundation.org", - "himalayanglacier.com", - ".himemix.com", - "||himemix.com", - ".himemix.net", - "times.hinet.net", - ".hitomi.la", - "|http://hitomi.la", - ".hiwifi.com", - "@@||hiwifi.com", - "hizbuttahrir.org", - "hizb-ut-tahrir.info", - "hizb-ut-tahrir.org", - ".hjclub.info", - ".hk-pub.com/forum", - "|http://hk-pub.com", - ".hk01.com", - "||hk01.com", - ".hk32168.com", - "||hk32168.com", - "||hkacg.com", - "||hkacg.net", - ".hkatvnews.com", - "hkbc.net", - ".hkbf.org", - ".hkbookcity.com", - "||hkbookcity.com", - ".hkchurch.org", - "hkci.org.hk", - ".hkcmi.edu", - "||hkcnews.com", - "||hkcoc.com", - "hkday.net", - ".hkdailynews.com.hk/china.php", - "hkdf.org", - ".hkej.com", - ".hkepc.com/forum/viewthread.php?tid=1153322", - "china.hket.com", - "||hkfaa.com", - "hkfreezone.com", - "hkfront.org", - "m.hkgalden.com", - "|https://m.hkgalden.com", - ".hkgreenradio.org/home", - ".hkheadline.com*blog", - ".hkheadline.com/instantnews", - "hkhkhk.com", - "hkhrc.org.hk", - "hkhrm.org.hk", - "||hkip.org.uk", - "1989report.hkja.org.hk", - "hkjc.com", - ".hkjp.org", - ".hklft.com", - ".hklts.org.hk", - "||hklts.org.hk", - "news.hkpeanut.com", - "hkptu.org", - ".hkreporter.com", - "||hkreporter.com", - "|http://hkupop.hku.hk/", - ".hkusu.net", - "||hkusu.net", - ".hkvwet.com", - ".hkwcc.org.hk", - "||hkzone.org", - ".hmonghot.com", - "|http://hmonghot.com", - ".hmv.co.jp/", - "hnjhj.com", - "||hnjhj.com", - ".hnntube.com", - "||hola.com", - "||hola.org", - "holymountaincn.com", - "holyspiritspeaks.org", - "||holyspiritspeaks.org", - "||derekhsu.homeip.net", - ".homeperversion.com", - "|http://homeservershow.com", - "|http://old.honeynet.org/scans/scan31/sub/doug_eric/spam_translation.html", - ".hongkongfp.com", - "||hongkongfp.com", - "hongmeimei.com", - "||hongzhi.li", - ".hootsuite.com", - "||hootsuite.com", - ".hopedialogue.org", - "|http://hopedialogue.org", - ".hopto.org", - ".hornygamer.com", - ".hornytrip.com", - "|http://hornytrip.com", - ".hotav.tv", - ".hotels.cn", - "hotfrog.com.tw", - "hotgoo.com", - ".hotpornshow.com", - "hotpot.hk", - ".hotshame.com", - "||hotspotshield.com", - ".hotvpn.com", - "||hotvpn.com", - "||hougaige.com", - "||howtoforge.com", - "||hoxx.com", - ".hqcdp.org", - "||hqcdp.org", - "||hqjapanesesex.com", - "hqmovies.com", - ".hrcir.com", - ".hrcchina.org", - ".hrea.org", - ".hrichina.org", - "||hrichina.org", - ".hrtsea.com", - ".hrw.org", - "||hrw.org", - "hrweb.org", - "||hsjp.net", - "||hsselite.com", - "|http://hst.net.tw", - ".hstern.net", - ".hstt.net", - ".htkou.net", - "||htkou.net", - ".hua-yue.net", - ".huaglad.com", - "||huaglad.com", - ".huanghuagang.org", - "||huanghuagang.org", - ".huangyiyu.com", - ".huaren.us", - "||huaren.us", - ".huaren4us.com", - ".huashangnews.com", - "|http://huashangnews.com", - "bbs.huasing.org", - "huaxia-news.com", - "huaxiabao.org", - "huaxin.ph", - "||huayuworld.org", - ".huffingtonpost.com/rebiya-kadeer", - "||hugoroy.eu", - "||huhaitai.com", - "||huhamhire.com", - "huiyi.in", - ".hulkshare.com", - "humanrightsbriefing.org", - "||hung-ya.com", - "||hungerstrikeforaids.org", - "||huping.net", - "hurgokbayrak.com", - ".hurriyet.com.tr", - ".hut2.ru", - "||hutianyi.net", - "hutong9.net", - "huyandex.com", - ".hwadzan.tw", - "||hwayue.org.tw", - "||hwinfo.com", - "||hxwk.org", - "hxwq.org", - "||hyperrate.com", - "ebook.hyread.com.tw", - "||ebook.hyread.com.tw", - "||i1.hk", - "||i2p2.de", - "||i2runner.com", - "||i818hk.com", - ".i-cable.com", - ".i-part.com.tw", - ".iamtopone.com", - "iask.ca", - "||iask.ca", - "iask.bz", - "||iask.bz", - ".iav19.com", - "ibiblio.org/pub/packages/ccic", - ".iblist.com", - "||iblogserv-f.net", - "ibros.org", - "|http://cn.ibtimes.com", - ".ibvpn.com", - "||ibvpn.com", - "icams.com", - "blogs.icerocket.com/tag", - ".icij.org", - "||icij.org", - "||icl-fi.org", - ".icoco.com", - "||icoco.com", - "||furbo.org", - "||warbler.iconfactory.net", - "||iconpaper.org", - "||icu-project.org", - "w.idaiwan.com/forum", - "||iddddg.com", - "idemocracy.asia", - ".identi.ca", - "||identi.ca", - "||idiomconnection.com", - "|http://www.idlcoyote.com", - ".idouga.com", - ".idreamx.com", - "forum.idsam.com", - ".idv.tw", - ".ieasy5.com", - "|http://ieasy5.com", - ".ied2k.net", - ".ienergy1.com", - "|http://if.ttt/", - "ifanqiang.com", - ".ifcss.org", - "||ifcss.org", - "ifjc.org", - ".ift.tt", - "|http://ift.tt", - "||ifreewares.com", - "||igcd.net", - ".igfw.net", - "||igfw.net", - ".igfw.tech", - "||igfw.tech", - ".igmg.de", - "||ignitedetroit.net", - ".igotmail.com.tw", - "||igvita.com", - "||ihakka.net", - ".ihao.org/dz5", - "||iicns.com", - ".ikstar.com", - "||illusionfactory.com", - "||ilove80.be", - "||im.tv", - "@@||myvlog.im.tv", - "||im88.tw", - ".imgchili.net", - "|http://imgchili.net", - ".imageab.com", - ".imagefap.com", - "||imagefap.com", - "||imageflea.com", - "imageshack.us", - "||imagevenue.com", - "||imagezilla.net", - ".imb.org", - "|http://imb.org", - "|http://www.imdb.com/name/nm0482730", - ".imdb.com/title/tt0819354", - ".imdb.com/title/tt1540068", - ".imdb.com/title/tt4908644", - ".img.ly", - "||img.ly", - ".imgur.com", - "||imgur.com", - ".imkev.com", - "||imkev.com", - ".imlive.com", - ".immoral.jp", - "impact.org.au", - "impp.mn", - "|http://tech2.in.com/video/", - "in99.org", - "in-disguise.com", - ".incapdns.net", - ".incloak.com", - "||incloak.com", - "||incredibox.fr", - "||indiandefensenews.in", - "timesofindia.indiatimes.com/dalai", - "timesofindia.indiatimes.com/defaultinterstitial.cms", - ".indiemerch.com", - "||indiemerch.com", - "info-graf.fr", - "website.informer.com", - ".initiativesforchina.org", - ".inkui.com", - ".inmediahk.net", - "||inmediahk.net", - "||innermongolia.org", - "|http://blog.inoreader.com", - ".inote.tw", - ".insecam.org", - "|http://insecam.org", - "||insidevoa.com", - ".institut-tibetain.org", - "|http://internet.org/", - "internetdefenseleague.org", - "internetfreedom.org", - "||internetpopculture.com", - ".inthenameofconfuciusmovie.com", - "||inthenameofconfuciusmovie.com", - "inxian.com", - "||inxian.com", - "ipalter.com", - ".ipfire.org", - "||iphone4hongkong.com", - "||iphonehacks.com", - "||iphonetaiwan.org", - "||iphonix.fr", - "||ipicture.ru", - ".ipjetable.net", - "||ipjetable.net", - ".ipobar.com/read.php?", - "ipoock.com/img", - ".iportal.me", - "|http://iportal.me", - "||ippotv.com", - ".ipredator.se", - "||ipredator.se", - ".iptv.com.tw", - "||iptvbin.com", - "||ipvanish.com", - "iredmail.org", - "chinese.irib.ir", - "||ironbigfools.compython.net", - "||ironpython.net", - ".ironsocket.com", - "||ironsocket.com", - ".is.gd", - ".islahhaber.net", - ".islam.org.hk", - "|http://islam.org.hk", - ".islamawareness.net/Asia/China", - ".islamhouse.com", - "||islamhouse.com", - ".islamicity.com", - ".islamicpluralism.org", - ".islamtoday.net", - ".isaacmao.com", - "||isaacmao.com", - "||isgreat.org", - "||ismaelan.com", - ".ismalltits.com", - "||ismprofessional.net", - "isohunt.com", - "||israbox.com", - ".issuu.com", - "||issuu.com", - ".istars.co.nz", - "oversea.istarshine.com", - "||oversea.istarshine.com", - "blog.istef.info/2007/10/21/myentunnel", - ".istiqlalhewer.com", - ".istockphoto.com", - "isunaffairs.com", - "isuntv.com", - "itaboo.info", - "||itaboo.info", - ".italiatibet.org", - "download.ithome.com.tw", - "ithelp.ithome.com.tw", - "||itshidden.com", - ".itsky.it", - ".itweet.net", - "|http://itweet.net", - ".iu45.com", - ".iuhrdf.org", - "||iuhrdf.org", - ".iuksky.com", - ".ivacy.com", - "||ivacy.com", - ".iverycd.com", - ".ivpn.net", - "||ixquick.com", - ".ixxx.com", - "iyouport.com", - "||iyouport.com", - ".izaobao.us", - "||gmozomg.izihost.org", - ".izles.net", - ".izlesem.org", - "||j.mp", - "blog.jackjia.com", - "jamaat.org", - ".jamyangnorbu.com", - "|http://jamyangnorbu.com", - ".jandyx.com", - "||janwongphoto.com", - "||japan-whores.com", - ".jav.com", - ".jav101.com", - ".jav2be.com", - "||jav2be.com", - ".jav68.tv", - ".javakiba.org", - "|http://javakiba.org", - ".javbus.com", - "||javbus.com", - "||javfor.me", - ".javhd.com", - ".javhip.com", - ".javmobile.net", - "|http://javmobile.net", - ".javmoo.com", - ".javseen.com", - "|http://javseen.com", - "jbtalks.cc", - "jbtalks.com", - "jbtalks.my", - ".jdwsy.com", - "jeanyim.com", - "||jfqu36.club", - "||jfqu37.xyz", - "||jgoodies.com", - ".jiangweiping.com", - "||jiangweiping.com", - "||jiaoyou8.com", - ".jiehua.cz", - "||hk.jiepang.com", - "||tw.jiepang.com", - "jieshibaobao.com", - ".jigglegifs.com", - "56cun04.jigsy.com", - "jigong1024.com", - "daodu14.jigsy.com", - "specxinzl.jigsy.com", - "wlcnew.jigsy.com", - ".jihadology.net", - "|http://jihadology.net", - "jinbushe.org", - "||jinbushe.org", - ".jingsim.org", - "zhao.jinhai.de", - "jingpin.org", - "||jingpin.org", - "jinpianwang.com", - ".jinroukong.com", - "ac.jiruan.net", - "||jitouch.com", - ".jizzthis.com", - "jjgirls.com", - ".jkb.cc", - "|http://jkb.cc", - "jkforum.net", - "||jma.go.jp", - "research.jmsc.hku.hk/social", - "weiboscope.jmsc.hku.hk", - ".jmscult.com", - "|http://jmscult.com", - "||joachims.org", - "||jobso.tv", - ".sunwinism.joinbbs.net", - ".journalchretien.net", - "||journalofdemocracy.org", - ".joymiihub.com", - ".joyourself.com", - "jpopforum.net", - "||fiddle.jshell.net", - ".jubushoushen.com", - "||jubushoushen.com", - ".juhuaren.com", - "||juliereyc.com", - "||junauza.com", - ".june4commemoration.org", - ".junefourth-20.net", - "||junefourth-20.net", - "||bbs.junglobal.net", - ".juoaa.com", - "|http://juoaa.com", - "justfreevpn.com", - ".justicefortenzin.org", - "justpaste.it", - "justtristan.com", - "juyuange.org", - "juziyue.com", - "||juziyue.com", - "||jwmusic.org", - "@@||music.jwmusic.org", - ".jyxf.net", - "||k-doujin.net", - "||ka-wai.com", - ".kagyu.org", - "||kagyu.org.za", - ".kagyumonlam.org", - ".kagyunews.com.hk", - ".kagyuoffice.org", - "||kagyuoffice.org", - "||kagyuoffice.org.tw", - ".kaiyuan.de", - ".kakao.com", - "||kakao.com", - ".kalachakralugano.org", - ".kankan.today", - ".kannewyork.com", - "||kannewyork.com", - ".kanshifang.com", - "||kanshifang.com", - "||kantie.org", - "kanzhongguo.com", - "kanzhongguo.eu", - ".kaotic.com", - "||karayou.com", - "karkhung.com", - ".karmapa.org", - ".karmapa-teachings.org", - "||kawase.com", - ".kba-tx.org", - ".kcoolonline.com", - ".kebrum.com", - "||kebrum.com", - ".kechara.com", - ".keepandshare.com/visit/visit_page.php?i=688154", - ".keezmovies.com", - ".kendincos.net", - ".kenengba.com", - "||kenengba.com", - "||keontech.net", - ".kepard.com", - "||kepard.com", - "wiki.keso.cn/Home", - "||keycdn.com", - ".khabdha.org", - ".khmusic.com.tw", - "||kichiku-doujinko.com", - ".kik.com", - "||kik.com", - "bbs.kimy.com.tw", - ".kindleren.com", - "|http://kindleren.com", - "|http://www.kindleren.com", - ".kingdomsalvation.org", - "||kingdomsalvation.org", - "kinghost.com", - "||kingstone.com.tw", - ".kink.com", - ".kinokuniya.com", - "||kinokuniya.com", - "killwall.com", - "||killwall.com", - "||kinmen.travel", - ".kir.jp", - ".kissbbao.cn", - "|http://kiwi.kz", - "||kk-whys.co.jp", - ".kmuh.org.tw", - ".knowledgerush.com/kr/encyclopedia", - ".kobo.com", - "||kobo.com", - ".kobobooks.com", - "||kobobooks.com", - "||kodingen.com", - "@@||www.kodingen.com", - "||kompozer.net", - ".konachan.com", - "|http://konachan.com", - ".kone.com", - "||koolsolutions.com", - ".koornk.com", - "||koornk.com", - "||koranmandarin.com", - ".korenan2.com", - "|http://gojet.krtco.com.tw", - ".ksdl.org", - ".ksnews.com.tw", - "||ktzhk.com", - ".kui.name/event", - "kun.im", - ".kurashsultan.com", - "||kurtmunger.com", - "kusocity.com", - "||kwcg.ca", - "kwongwah.com.my", - ".kxsw.life", - "||kxsw.life", - ".kyofun.com", - "kyohk.net", - "||kyoyue.com", - ".kyzyhello.com", - "||kyzyhello.com", - ".kzeng.info", - "||kzeng.info", - "la-forum.org", - "ladbrokes.com", - "||labiennale.org", - ".lagranepoca.com", - "||lagranepoca.com", - ".lalulalu.com", - ".lama.com.tw", - "||lama.com.tw", - ".lamayeshe.com", - "|http://lamayeshe.com", - "|http://www.lamenhu.com", - ".lamnia.co.uk", - "||lamnia.co.uk", - "lamrim.com", - ".lanterncn.cn", - "|http://lanterncn.cn", - ".lantosfoundation.org", - ".laod.cn", - "|http://laod.cn", - "laogai.org", - "||laogai.org", - "laomiu.com", - ".laoyang.info", - "|http://laoyang.info", - "||laptoplockdown.com", - ".laqingdan.net", - "||laqingdan.net", - "||larsgeorge.com", - ".lastcombat.com", - "|http://lastcombat.com", - "||lastfm.es", - "latelinenews.com", - ".latibet.org", - "||le-vpn.com", - ".leafyvpn.net", - "||leafyvpn.net", - "leeao.com.cn/bbs/forum.php", - "lefora.com", - "||left21.hk", - ".legalporno.com", - ".legsjapan.com", - "|http://leirentv.ca", - "leisurecafe.ca", - "||lematin.ch", - ".lemonde.fr", - "||lenwhite.com", - "lerosua.org", - "||lerosua.org", - "blog.lester850.info", - "||lesoir.be", - ".letou.com", - "letscorp.net", - "||letscorp.net", - "||ss.levyhsu.com", - "||cdn.assets.lfpcontent.com", - ".lhakar.org", - "|http://lhakar.org", - ".lhasocialwork.org", - ".liangyou.net", - "||liangyou.net", - ".lianyue.net", - "||liaowangxizang.net", - ".liaowangxizang.net", - "||liberal.org.hk", - ".libertytimes.com.tw", - "blogs.libraryinformationtechnology.com/jxyz", - ".lidecheng.com/blog/fucking-gfw", - ".lighten.org.tw", - ".lightnovel.cn", - "@@|https://www.lightnovel.cn", - "limiao.net", - "linkuswell.com", - "abitno.linpie.com/use-ipv6-to-fuck-gfw", - "||line.me", - "||line-apps.com", - ".linglingfa.com", - "||lingvodics.com", - ".link-o-rama.com", - "|http://link-o-rama.com", - ".linkideo.com", - "||api.linksalpha.com", - "||apidocs.linksalpha.com", - "||www.linksalpha.com", - "||help.linksalpha.com", - "||linux.org.hk", - "linuxtoy.org/archives/installing-west-chamber-on-ubuntu", - ".lionsroar.com", - ".lipuman.com", - "||liquidvpn.com", - "||greatfire.us7.list-manage.com", - "||listentoyoutube.com", - "listorious.com", - ".liu-xiaobo.org", - "||liudejun.com", - ".liuhanyu.com", - ".liujianshu.com", - "||liujianshu.com", - ".liuxiaobo.net", - "|http://liuxiaobo.net", - "liuxiaotong.com", - "||liuxiaotong.com", - ".livedoor.jp", - ".liveleak.com", - "||liveleak.com", - ".livestation.com", - "livestream.com", - "||livestream.com", - "||livingonline.us", - "||livingstream.com", - "||livevideo.com", - ".livevideo.com", - ".liwangyang.com", - "lizhizhuangbi.com", - "lkcn.net", - ".llss.me/", - ".load.to", - ".lobsangwangyal.com", - ".localdomain.ws", - "||localdomain.ws", - "localpresshk.com", - "||lockestek.com", - "logbot.net", - "||logiqx.com", - "secure.logmein.com", - "||secure.logmein.com", - ".londonchinese.ca", - ".longhair.hk", - "longmusic.com", - "||longtermly.net", - "||lookpic.com", - ".looktoronto.com", - "|http://looktoronto.com", - ".lotsawahouse.org/tibetan-masters/fourteenth-dalai-lama", - ".lotuslight.org.hk", - ".lotuslight.org.tw", - "hkreporter.loved.hk", - "||lpsg.com", - "||lrfz.com", - ".lrip.org", - "||lrip.org", - ".lsd.org.hk", - "||lsd.org.hk", - "lsforum.net", - ".lsm.org", - "||lsm.org", - ".lsmchinese.org", - "||lsmchinese.org", - ".lsmkorean.org", - "||lsmkorean.org", - ".lsmradio.com/rad_archives", - ".lsmwebcast.com", - ".ltn.com.tw", - "||ltn.com.tw", - ".luke54.com", - ".luke54.org", - ".lupm.org", - "||lupm.org", - "||lushstories.com", - "luxebc.com", - "lvhai.org", - "||lvhai.org", - "||lvv2.com", - ".lyfhk.net", - "|http://lyfhk.net", - ".lzmtnews.org", - "||lzmtnews.org", - "http://*.m-team.cc", - ".macrovpn.com", - "macts.com.tw", - "||mad-ar.ch", - "||madrau.com", - "||madthumbs.com", - "||magic-net.info", - "mahabodhi.org", - "my.mail.ru", - ".maiplus.com", - "|http://maiplus.com", - ".maizhong.org", - "makkahnewspaper.com", - ".mamingzhe.com", - "manicur4ik.ru", - ".maplew.com", - "|http://maplew.com", - "||marc.info", - "marguerite.su", - "||martincartoons.com", - "maskedip.com", - ".maiio.net", - ".mail-archive.com", - ".malaysiakini.com", - "||makemymood.com", - ".manchukuo.net", - ".maniash.com", - "|http://maniash.com", - ".mansion.com", - ".mansionpoker.com", - "||martau.com", - "|http://blog.martinoei.com", - ".martsangkagyuofficial.org", - "|http://martsangkagyuofficial.org", - "maruta.be/forget", - ".marxist.com", - "||marxist.net", - ".marxists.org/chinese", - "||matainja.com", - "||mathable.io", - "||mathiew-badimon.com", - "||matsushimakaede.com", - "|http://maturejp.com", - "mayimayi.com", - ".maxing.jp", - ".mcaf.ee", - "|http://mcaf.ee", - "||mcadforums.com", - "mcfog.com", - "mcreasite.com", - ".md-t.org", - "||md-t.org", - "||meansys.com", - ".media.org.hk", - ".mediachinese.com", - "||mediachinese.com", - ".mediafire.com/?", - ".mediafire.com/download", - ".mediafreakcity.com", - "||mediafreakcity.com", - ".medium.com", - "||medium.com", - ".meetav.com", - "||meetup.com", - "mefeedia.com", - "jihadintel.meforum.org", - "||mega.nz", - "||megaproxy.com", - "||megarotic.com", - "megavideo.com", - "||megurineluka.com", - "meirixiaochao.com", - ".meltoday.com", - ".memehk.com", - "||memehk.com", - "memorybbs.com", - ".memri.org", - ".memrijttm.org", - ".mercyprophet.org", - "|http://mercyprophet.org", - "||mergersandinquisitions.org", - ".meridian-trust.org", - "|http://meridian-trust.org", - ".meripet.biz", - "|http://meripet.biz", - ".meripet.com", - "|http://meripet.com", - "merit-times.com.tw", - "meshrep.com", - ".mesotw.com/bbs", - "metacafe.com/watch", - "||meteorshowersonline.com", - "|http://www.metro.taipei/", - ".metrohk.com.hk/?cmd=detail&categoryID=2", - "||metrolife.ca", - ".metroradio.com.hk", - "|http://metroradio.com.hk", - "meyou.jp", - ".meyul.com", - "||mgoon.com", - "||mgstage.com", - "||mh4u.org", - "mhradio.org", - "|http://michaelanti.com", - "||michaelmarketl.com", - "|http://bbs.mikocon.com", - ".microvpn.com", - "|http://microvpn.com", - "middle-way.net", - ".mihk.hk/forum", - ".mihr.com", - "mihua.org", - "||mikesoltys.com", - ".milph.net", - "|http://milph.net", - ".milsurps.com", - "mimiai.net", - ".mimivip.com", - ".mimivv.com", - ".mindrolling.org", - "|http://mindrolling.org", - ".minghui.or.kr", - "|http://minghui.or.kr", - "minghui.org", - "||minghui.org", - "minghui-a.org", - "minghui-b.org", - "minghui-school.org", - ".mingjinglishi.com", - "||mingjinglishi.com", - "mingjingnews.com", - "||mingjingtimes.com", - ".mingpao.com", - "||mingpao.com", - ".mingpaocanada.com", - ".mingpaomonthly.com", - "|http://mingpaomonthly.com", - "mingpaonews.com", - ".mingpaony.com", - ".mingpaosf.com", - ".mingpaotor.com", - ".mingpaovan.com", - ".mingshengbao.com", - ".minhhue.net", - ".miniforum.org", - ".ministrybooks.org", - ".minzhuhua.net", - "||minzhuhua.net", - "minzhuzhanxian.com", - "minzhuzhongguo.org", - "||miroguide.com", - "mirrorbooks.com", - ".mist.vip", - "thecenter.mit.edu", - ".mitao.com.tw", - ".mitbbs.com", - "||mitbbs.com", - "mitbbsau.com", - ".mixero.com", - "||mixero.com", - "mixpod.com", - ".mixx.com", - "||mixx.com", - "||mizzmona.com", - ".mk5000.com", - ".mlcool.com", - "||mlzs.work", - ".mm-cg.com", - "||mmaaxx.com", - ".mmmca.com", - "mnewstv.com", - "||mobatek.net", - ".mobile01.com", - "||mobile01.com", - "||mobileways.de", - ".mobypicture.com", - "|http://moby.to", - "||moeerolibrary.com", - "wiki.moegirl.org", - ".mofaxiehui.com", - ".mofos.com", - "||mog.com", - "molihua.org", - "||mondex.org", - ".money-link.com.tw", - "|http://money-link.com.tw", - "|http://www.monlamit.org", - ".moonbbs.com", - "||moonbbs.com", - "c1522.mooo.com", - "||monitorchina.org", - "bbs.morbell.com", - "||morningsun.org", - "||moroneta.com", - ".motherless.com", - "|http://motherless.com", - "motor4ik.ru", - ".mousebreaker.com", - ".movements.org", - "||movements.org", - "||moviefap.com", - "||www.moztw.org", - ".mp3buscador.com", - "mp3ye.eu", - "||mpettis.com", - "mpfinance.com", - "mpinews.com", - "mponline.hk", - ".mqxd.org", - "|http://mqxd.org", - "mrtweet.com", - "||mrtweet.com", - "news.hk.msn.com", - "news.msn.com.tw", - "msguancha.com", - ".mswe1.org", - "|http://mswe1.org", - "||mthruf.com", - "muchosucko.com", - "||multiply.com", - "multiproxy.org", - "multiupload.com", - ".mullvad.net", - "||mullvad.net", - ".mummysgold.com", - ".murmur.tw", - "|http://murmur.tw", - ".musicade.net", - ".muslimvideo.com", - "||muzi.com", - "||muzi.net", - "||mx981.com", - ".my-formosa.com", - ".my-proxy.com", - ".my-private-network.co.uk", - "||my-private-network.co.uk", - "forum.my903.com", - ".myactimes.com/actimes", - "||myanniu.com", - ".myaudiocast.com", - "||myaudiocast.com", - ".myav.com.tw/bbs", - ".mybbs.us", - ".myca168.com", - ".mycanadanow.com", - "||bbs.mychat.to", - "||mychinamyhome.com", - ".mychinamyhome.com", - ".mychinanet.com", - ".mychinanews.com", - "||mychinanews.com", - ".mychinese.news", - "||mycnnews.com", - "||mykomica.org", - "mycould.com/discuz", - ".myeasytv.com", - "||myeclipseide.com", - ".myforum.com.hk", - "||myforum.com.hk", - "||myforum.com.uk", - ".myfreecams.com", - ".myfreepaysite.com", - ".myfreshnet.com", - ".myiphide.com", - "||myiphide.com", - "forum.mymaji.com", - "mymediarom.com/files/box", - "||mymoe.moe", - "||mymusic.net.tw", - "||myparagliding.com", - "||mypopescu.com", - "myradio.hk/podcast", - ".myreadingmanga.info", - "mysinablog.com", - ".myspace.com", - "||myspacecdn.com", - ".mytalkbox.com", - ".mytizi.com", - "||naacoalition.org", - "old.nabble.com", - "||naitik.net", - ".nakuz.com/bbs", - "||nalandabodhi.org", - "||nalandawest.org", - ".namgyal.org", - "namgyalmonastery.org", - "||namsisi.com", - ".nanyang.com", - "||nanyang.com", - ".nanyangpost.com", - "||nanyangpost.com", - ".nanzao.com", - "||jpl.nasa.gov", - "||pds.nasa.gov", - "||solarsystem.nasa.gov", - ".nakido.com", - "||nakido.com", - ".naol.ca", - ".naol.cc", - "uighur.narod.ru", - ".nat.moe", - "||nat.moe", - "cyberghost.natado.com", - "||national-lottery.co.uk", - "news.nationalgeographic.com/news/2014/06/140603-tiananmen-square", - ".nationsonline.org/oneworld/tibet", - "||line.naver.jp", - "||navyfamily.navy.mil", - "||navyreserve.navy.mil", - "||nko.navy.mil", - "||usno.navy.mil", - "naweeklytimes.com", - ".nbtvpn.com", - "|http://nbtvpn.com", - "nccwatch.org.tw", - ".nch.com.tw", - ".ncn.org", - "||ncn.org", - "||etools.ncol.com", - ".nde.de", - ".ndr.de", - ".ned.org", - "||nekoslovakia.net", - "||nepusoku.com", - "||net-fits.pro", - "bbs.netbig.com", - ".netbirds.com", - "netcolony.com", - "bolin.netfirms.com", - "||netme.cc", - "netsneak.com", - ".network54.com", - "networkedblogs.com", - ".networktunnel.net", - "neverforget8964.org", - "new-3lunch.net", - ".new-akiba.com", - ".new96.ca", - ".newcenturymc.com", - "|http://newcenturymc.com", - "newcenturynews.com", - "||newchen.com", - ".newchen.com", - ".newgrounds.com", - "newipnow.com", - ".newlandmagazine.com.au", - ".newnews.ca", - "news100.com.tw", - "newschinacomment.org", - ".newscn.org", - "||newscn.org", - "newspeak.cc/story", - ".newsancai.com", - "||newsancai.com", - ".newsdetox.ca", - ".newsdh.com", - "||newstamago.com", - "||newstapa.org", - "newstarnet.com", - ".newtaiwan.com.tw", - "newtalk.tw", - "||newtalk.tw", - "newyorktimes.com", - "||nexon.com", - ".next11.co.jp", - ".nextmag.com.tw", - ".nextmedia.com", - "||nexton-net.jp", - "nexttv.com.tw", - ".nfjtyd.com", - "||co.ng.mil", - "||nga.mil", - "ngensis.com", - ".nhentai.net", - "|http://nhentai.net", - ".nhk-ondemand.jp", - ".nicovideo.jp/watch", - "||nicovideo.jp", - "||nighost.org", - "av.nightlife141.com", - "ninecommentaries.com", - ".ninjacloak.com", - "||ninjaproxy.ninja", - "nintendium.com", - "taiwanyes.ning.com", - "usmgtcg.ning.com/forum", - "||niusnews.com", - "||njactb.org", - "njuice.com", - "||njuice.com", - "nlfreevpn.com", - ".ddns.net/", - ".gooddns.info", - "||gotdns.ch", - ".maildns.xyz", - ".no-ip.org", - ".opendn.xyz", - ".servehttp.com", - "sytes.net", - ".whodns.xyz", - ".zapto.org", - "|http://dynupdate.no-ip.com/", - "||nobel.se", - "nobelprize.org/nobel_prizes/peace/laureates/1989", - "nobelprize.org/nobel_prizes/peace/laureates/2010", - "nobodycanstop.us", - "||nobodycanstop.us", - "||nokogiri.org", - "||nokola.com", - "noodlevpn.com", - ".norbulingka.org", - "nordvpn.com", - "||nordvpn.com", - "||novelasia.com", - ".news.now.com", - "|http://news.now.com", - "news.now.com%2Fhome", - "||nownews.com", - ".nowtorrents.com", - ".noypf.com", - "||noypf.com", - "||npa.go.jp", - ".npnt.me", - "|http://npnt.me", - ".nps.gov", - ".nradio.me", - "|http://nradio.me", - ".nrk.no", - "||nrk.no", - ".ntd.tv", - "||ntd.tv", - ".ntdtv.com", - "||ntdtv.com", - ".ntdtv.co.kr", - "ntdtv.ca", - "ntdtv.org", - "ntdtv.ru", - "ntdtvla.com", - ".ntrfun.com", - "||cbs.ntu.edu.tw", - "||media.nu.nl", - ".nubiles.net", - "||nuexpo.com", - ".nukistream.com", - "||nurgo-software.com", - "||nutaku.net", - ".nuvid.com", - "||nvdst.com", - "nuzcom.com", - ".nvquan.org", - ".nvtongzhisheng.org", - "|http://nvtongzhisheng.org", - ".nwtca.org", - "|http://nyaa.eu", - "||nyaa.si", - ".nydus.ca", - "nylon-angel.com", - "nylonstockingsonline.com", - ".nzchinese.com", - "||nzchinese.net.nz", - "observechina.net", - ".obutu.com", - "ocaspro.com", - "occupytiananmen.com", - "oclp.hk", - ".ocreampies.com", - "||october-review.org", - "offbeatchina.com", - "officeoftibet.com", - "|http://ofile.org", - "||ogaoga.org", - "twtr2src.ogaoga.org", - ".ogate.org", - "||ogate.org", - "www2.ohchr.org/english/bodies/cat/docs/ngos/II_China_41.pdf", - ".oikos.com.tw/v4", - ".oiktv.com", - "oizoblog.com", - ".ok.ru", - "||ok.ru", - ".okayfreedom.com", - "||okayfreedom.com", - "okk.tw", - "|http://filmy.olabloga.pl/player", - "old-cat.net", - "||olumpo.com", - ".olympicwatch.org", - "omgili.com", - "||omnitalk.com", - "||omnitalk.org", - "cling.omy.sg", - "forum.omy.sg", - "news.omy.sg", - "showbiz.omy.sg", - "||on.cc", - "||onedrive.live.com", - "||onion.city", - ".onlinecha.com", - "||onlineyoutube.com", - ".onlytweets.com", - "|http://onlytweets.com", - "onmoon.net", - "onmoon.com", - ".onthehunt.com", - "|http://onthehunt.com", - ".oopsforum.com", - "open.com.hk", - "openallweb.com", - "opendemocracy.net", - "||opendemocracy.net", - ".openervpn.in", - "openid.net", - "||openid.net", - ".openleaks.org", - "||openleaks.org", - "openvpn.net", - "||openvpn.net", - "||openwebster.com", - ".openwrt.org.cn", - "@@||openwrt.org.cn", - "my.opera.com/dahema", - "||demo.opera-mini.net", - ".opus-gaming.com", - "|http://opus-gaming.com", - "www.orchidbbs.com", - ".organcare.org.tw", - "organharvestinvestigation.net", - ".orgasm.com", - ".orgfree.com", - "||orient-doll.com", - "orientaldaily.com.my", - "||orientaldaily.com.my", - "||orn.jp", - "t.orzdream.com", - "||t.orzdream.com", - "tui.orzdream.com", - "||orzistic.org", - "||osfoora.com", - ".otnd.org", - "||otnd.org", - "||otto.de", - "||ourdearamy.com", - "oursogo.com", - ".oursteps.com.au", - "||oursteps.com.au", - ".oursweb.net", - "||ourtv.hk", - "xinqimeng.over-blog.com", - "||overplay.net", - "share.ovi.com/media", - "|http://owl.li", - "|http://ht.ly", - "|http://htl.li", - "|http://mash.to", - "www.owind.com", - "|http://www.oxid.it", - "oyax.com", - "oyghan.com/wps", - ".ozchinese.com/bbs", - "||ow.ly", - "bbs.ozchinese.com", - ".ozvoice.org", - "||ozvoice.org", - ".ozxw.com", - ".ozyoyo.com", - "||pachosting.com", - ".pacificpoker.com", - ".packetix.net", - "||pacopacomama.com", - ".padmanet.com", - "page2rss.com", - "||pagodabox.com", - ".palacemoon.com", - "forum.palmislife.com", - "||eriversoft.com", - ".paldengyal.com", - "paljorpublications.com", - ".paltalk.com", - "||pandapow.co", - ".pandapow.net", - ".pandavpn-jp.com", - ".panluan.net", - "||panluan.net", - "||pao-pao.net", - "paper.li", - "paperb.us", - ".paradisehill.cc", - ".paradisepoker.com", - ".partycasino.com", - ".partypoker.com", - ".passion.com", - "||passion.com", - ".passiontimes.hk", - "pastebin.com", - ".pastie.org", - "||pastie.org", - "||blog.pathtosharepoint.com", - "pbs.org/wgbh/pages/frontline/gate", - "pbs.org/wgbh/pages/frontline/tankman", - "pbs.org/wgbh/pages/frontline/tibet", - "video.pbs.org", - "pbwiki.com", - "||pbworks.com", - "||developers.box.net", - "||wiki.oauth.net", - "||wiki.phonegap.com", - "||wiki.jqueryui.com", - "||pbxes.com", - "||pbxes.org", - "pcdvd.com.tw", - ".pchome.com.tw", - "|http://pcij.org", - ".pcstore.com.tw", - "||pct.org.tw", - "pdetails.com", - "||pdproxy.com", - "||peace.ca", - "peacefire.org", - "peacehall.com", - "||peacehall.com", - "|http://pearlher.org", - ".peeasian.com", - ".pekingduck.org", - "||pekingduck.org", - ".pemulihan.or.id", - "|http://pemulihan.or.id", - "||pen.io", - "penchinese.com", - "||penchinese.net", - ".penchinese.net", - "pengyulong.com", - "penisbot.com", - "||blog.pentalogic.net", - ".penthouse.com", - ".pentoy.hk/%E4%B8%AD%E5%9C%8B", - ".pentoy.hk/%E6%99%82%E4%BA%8B", - ".peoplebookcafe.com", - ".peoplenews.tw", - "||peoplenews.tw", - ".peopo.org", - "||peopo.org", - ".percy.in", - ".perfectgirls.net", - "perfectvpn.net", - ".persecutionblog.com", - ".persiankitty.com", - "pfd.org.hk", - "phapluan.org", - "phayul.com", - "philborges.com", - "philly.com", - "||phncdn.com", - "||photodharma.net", - "||photofocus.com", - "||phuquocservices.com", - "||picacomiccn.com", - ".picidae.net", - "||img*.picturedip.com", - "picturesocial.com", - "||pin-cong.com", - ".pin6.com", - "||pin6.com", - ".ping.fm", - "||ping.fm", - "||pinimg.com", - ".pinkrod.com", - "||pinoy-n.com", - "||pinterest.at", - "||pinterest.ca", - "||pinterest.co.kr", - "||pinterest.co.uk", - ".pinterest.com", - "||pinterest.com", - "||pinterest.de", - "||pinterest.dk", - "||pinterest.fr", - "||pinterest.jp", - "||pinterest.nl", - "||pinterest.se", - ".pipii.tv", - ".piposay.com", - "piraattilahti.org", - ".piring.com", - "||pixelqi.com", - "||css.pixnet.in", - "||pixnet.net", - ".pixnet.net", - ".pk.com", - "||placemix.com", - "|http://pictures.playboy.com", - "||playboy.com", - ".playboyplus.com", - "||playboyplus.com", - "||player.fm", - ".playno1.com", - "||playno1.com", - "||playpcesor.com", - "plays.com.tw", - "||m.plixi.com", - "plm.org.hk", - "plunder.com", - ".plurk.com", - "||plurk.com", - ".plus28.com", - ".plusbb.com", - ".pmatehunter.com", - "|http://pmatehunter.com", - ".pmates.com", - "||po2b.com", - "pobieramy.top", - "||podictionary.com", - ".pokerstars.com", - "||pokerstars.com", - ".pokerstars.net", - "zh.pokerstrategy.com", - "politicalchina.org", - "politicalconsultation.org", - ".politiscales.net", - "||poloniex.com", - ".polymerhk.com", - "|http://polymerhk.com", - ".popo.tw", - "||popvote.hk", - ".popyard.com", - "||popyard.org", - ".porn.com", - ".porn2.com", - ".porn5.com", - ".pornbase.org", - ".pornerbros.com", - "||pornhd.com", - ".pornhost.com", - ".pornhub.com", - "||pornhub.com", - ".pornhubdeutsch.net", - "|http://pornhubdeutsch.net", - "||pornmm.net", - ".pornoxo.com", - ".pornrapidshare.com", - "||pornrapidshare.com", - ".pornsharing.com", - "|http://pornsharing.com", - ".pornsocket.com", - ".pornstarclub.com", - "||pornstarclub.com", - ".porntube.com", - ".porntubenews.com", - ".porntvblog.com", - "||porntvblog.com", - ".pornvisit.com", - ".portablevpn.nl", - "||poskotanews.com", - ".post01.com", - ".post76.com", - "||post76.com", - ".post852.com", - "postadult.com", - ".postimg.org", - "||potvpn.com", - "||powercx.com", - ".powerphoto.org", - "||www.powerpointninja.com", - "||presidentlee.tw", - "||cdn.printfriendly.com", - ".pritunl.com", - "provpnaccounts.com", - "||provpnaccounts.com", - ".proxfree.com", - "||proxfree.com", - "proxyanonimo.es", - ".proxynetwork.org.uk", - "||proxynetwork.org.uk", - "||pts.org.tw", - ".pttvan.org", - "pubu.com.tw", - "puffinbrowser.com", - "pureinsight.org", - ".pushchinawall.com", - ".putty.org", - "||putty.org", - "||calebelston.com", - "||blog.fizzik.com", - "||nf.id.au", - "||sogrady.me", - "||vatn.org", - "||ventureswell.com", - "||whereiswerner.com", - ".power.com", - "||power.com", - "powerapple.com", - "||powerapple.com", - "||abc.pp.ru", - "heix.pp.ru", - "||prayforchina.net", - "||premeforwindows7.com", - "||presentationzen.com", - "||prestige-av.com", - "prisoner-state-secret-journal-premier", - ".prisoneralert.com", - "||pritunl.com", - "||privacybox.de", - ".private.com/home", - "||privateinternetaccess.com", - "privatepaste.com", - "||privatepaste.com", - "privatetunnel.com", - "||privatetunnel.com", - "||privatevpn.com", - "||procopytips.com", - "provideocoalition.com", - "||prosiben.de", - "proxifier.com", - "api.proxlet.com", - "||proxomitron.info", - ".proxpn.com", - "||proxpn.com", - ".proxylist.org.uk", - "||proxylist.org.uk", - ".proxypy.net", - "||proxypy.net", - "proxyroad.com", - ".proxytunnel.net", - "||proyectoclubes.com", - "prozz.net", - "psblog.name", - "||psblog.name", - "||psiphon.ca", - ".psiphon3.com", - "||psiphon3.com", - ".psiphontoday.com", - ".ptt.cc", - "||ptt.cc", - ".puffstore.com", - ".puuko.com", - "||pullfolio.com", - ".punyu.com/puny", - "||pureconcepts.net", - "||pureinsight.org", - "||purepdf.com", - "||purevpn.com", - ".purplelotus.org", - ".pursuestar.com", - "||pursuestar.com", - ".pussyspace.com", - ".putihome.org", - ".putlocker.com/file", - "pwned.com", - "python.com", - ".python.com.tw", - "|http://python.com.tw", - "pythonhackers.com/p", - "ss.pythonic.life/", - ".qanote.com", - "||qanote.com", - ".qgirl.com.tw", - "||qiandao.today", - ".qi-gong.me", - "||qi-gong.me", - "||qiangyou.org", - ".qidian.ca", - ".qienkuen.org", - "||qienkuen.org", - "||qiwen.lu", - "qixianglu.cn", - "bbs.qmzdd.com", - ".qkshare.com", - "qoos.com", - "||qoos.com", - "blog.qooza.hk/dafengqixi", - "||efksoft.com", - "||qstatus.com", - "||qtweeter.com", - "||qtrac.eu", - ".quannengshen.org", - "|http://quannengshen.org", - "quantumbooter.net", - "||quitccp.net", - ".quitccp.net", - "||quitccp.org", - ".quitccp.org", - ".quora.com/Chinas-Future", - ".quran.com", - "|http://quran.com", - ".quranexplorer.com", - "qusi8.net", - ".qvodzy.org", - "nemesis2.qx.net/pages/MyEnTunnel", - "qxbbs.org", - ".ra.gg", - "|http://ra.gg/", - ".radicalparty.org", - "||rael.org", - "radicalparty.org", - "radioaustralia.net.au", - ".radiohilight.net", - "||radiohilight.net", - "opml.radiotime.com", - "||radiovaticana.org", - "||radiovncr.com", - "||raggedbanner.com", - "||raidcall.com.tw", - ".raidtalk.com.tw", - ".rainbowplan.org/bbs", - "|https://raindrop.io/", - ".raizoji.or.jp", - "|http://raizoji.or.jp", - "rangwang.biz", - "rangzen.com", - "rangzen.net", - "rangzen.org", - "|http://blog.ranxiang.com/", - "ranyunfei.com", - "||ranyunfei.com", - ".rapbull.net", - "|http://rapidgator.net/", - "||rapidmoviez.com", - "rapidvpn.com", - "||rapidvpn.com", - "||rarbgprx.org", - ".raremovie.cc", - "|http://raremovie.cc", - ".raremovie.net", - "|http://raremovie.net", - "||rawgit.com", - "||rawgithub.com", - "||razyboard.com", - "rcinet.ca", - ".read100.com", - ".readingtimes.com.tw", - "||readingtimes.com.tw", - "||readmoo.com", - ".readydown.com", - "|http://readydown.com", - ".realcourage.org", - ".realitykings.com", - "||realitykings.com", - ".realraptalk.com", - ".realsexpass.com", - ".recordhistory.org", - ".recovery.org.tw", - "|http://online.recoveryversion.org", - "||recoveryversion.com.tw", - "||red-lang.org", - "redballoonsolidarity.org", - ".redchinacn.net", - "|http://redchinacn.net", - "redchinacn.org", - "redtube.com", - "referer.us", - "||referer.us", - "||reflectivecode.com", - "relaxbbs.com", - ".relay.com.tw", - ".releaseinternational.org", - "religioustolerance.org", - "renminbao.com", - "||renminbao.com", - ".renyurenquan.org", - "||renyurenquan.org", - "|http://certificate.revocationcheck.com", - "subacme.rerouted.org", - "||resilio.com", - ".reuters.com", - "||reuters.com", - "||reutersmedia.net", - ".revleft.com", - "retweetist.com", - "||retweetrank.com", - "revver.com", - ".rfa.org", - "||rfa.org", - ".rfachina.com", - ".rfamobile.org", - "rfaweb.org", - "||rferl.org", - ".rfi.fr", - "||rfi.fr", - "|http://rfi.my/", - "|http://vds.rightster.com/", - ".rigpa.org", - ".rileyguide.com", - "riku.me/", - ".ritouki.jp", - "||ritter.vg", - ".rlwlw.com", - "||rlwlw.com", - ".rmjdw.com", - ".rmjdw132.info", - ".roadshow.hk", - ".roboforex.com", - "||robustnessiskey.com", - "||rocket-inc.net", - "|http://www2.rocketbbs.com/11/bbs.cgi?id=5mus", - "|http://www2.rocketbbs.com/11/bbs.cgi?id=freemgl", - "||rojo.com", - "||ronjoneswriter.com", - "||rolia.net", - ".roodo.com", - ".rosechina.net", - ".rotten.com", - ".rsf.org", - "||rsf.org", - ".rsf-chinese.org", - "||rsf-chinese.org", - ".rsgamen.org", - "||phosphation13.rssing.com", - ".rssmeme.com", - "||rssmeme.com", - "||rtalabel.org", - ".rthk.hk", - "|http://rthk.hk", - ".rthk.org.hk", - "|http://rthk.org.hk", - ".rti.org.tw", - "||rti.org.tw", - ".rtycminnesota.org", - ".ruanyifeng.com/blog*some_ways_to_break_the_great_firewall", - "rukor.org", - ".runbtx.com", - ".rushbee.com", - ".ruten.com.tw", - "rutube.ru", - ".ruyiseek.com", - ".rxhj.net", - "|http://rxhj.net", - ".s1s1s1.com", - "||s-cute.com", - ".s-dragon.org", - "||s1heng.com", - "|http://www.s4miniarchive.com", - "||s8forum.com", - "cdn1.lp.saboom.com", - "||sacks.com", - "sacom.hk", - "||sacom.hk", - "||sadpanda.us", - ".safervpn.com", - "||safervpn.com", - ".saintyculture.com", - "|http://saintyculture.com", - ".saiq.me", - "||saiq.me", - "||sakuralive.com", - ".sakya.org", - ".salvation.org.hk", - "||salvation.org.hk", - ".samair.ru/proxy/type-01", - ".sambhota.org", - ".cn.sandscotaicentral.com", - "|http://cn.sandscotaicentral.com", - ".sanmin.com.tw", - "sapikachu.net", - "savemedia.com", - "||savethesounds.info", - ".savetibet.de", - "||savetibet.de", - "savetibet.fr", - "savetibet.nl", - ".savetibet.org", - "||savetibet.org", - "savetibet.ru", - ".savetibetstore.org", - "||savetibetstore.org", - "savevid.com", - "||say2.info", - ".sbme.me", - "|http://sbme.me", - ".sbs.com.au/yourlanguage", - ".scasino.com", - "|http://www.sciencemag.org/content/344/6187/953", - ".sciencenets.com", - ".scmp.com", - "||scmp.com", - ".scmpchinese.com", - "||scramble.io", - ".scribd.com", - "||scribd.com", - "||scriptspot.com", - "seapuff.com", - "domainhelp.search.com", - ".searchtruth.com", - "secretchina.com", - "||secretchina.com", - "||secretgarden.no", - ".secretsline.biz", - "||secretsline.biz", - "||securetunnel.com", - "securityinabox.org", - "|https://securityinabox.org", - ".securitykiss.com", - "||securitykiss.com", - "||seed4.me", - "news.seehua.com", - "seesmic.com", - "||seevpn.com", - "||seezone.net", - "sejie.com", - ".sendspace.com", - "|http://tweets.seraph.me/", - "sesawe.net", - "||sesawe.net", - ".sesawe.org", - "||sethwklein.net", - ".setn.com", - ".settv.com.tw", - "forum.setty.com.tw", - ".sevenload.com", - "||sevenload.com", - ".sex.com", - ".sex-11.com", - "||sex3.com", - "||sex8.cc", - ".sexandsubmission.com", - ".sexbot.com", - ".sexhu.com", - ".sexhuang.com", - "sexinsex.net", - "||sexinsex.net", - ".sextvx.com", - "67.220.91.15", - "67.220.91.18", - "67.220.91.23", - "|http://*.sf.net", - ".sfileydy.com", - "||sfshibao.com", - ".sftindia.org", - ".sftuk.org", - "||sftuk.org", - "||shadeyouvpn.com", - "shadow.ma", - ".shadowsky.xyz", - ".shadowsocks.asia", - "||www.shadowsocks.com", - ".shadowsocks.com", - "||shadowsocks.com.hk", - ".shadowsocks.org", - "||shadowsocks.org", - "||shadowsocks-r.com", - "|http://cn.shafaqna.com", - ".shambalapost.com", - ".shambhalasun.com", - ".shangfang.org", - "||shangfang.org", - "shapeservices.com", - ".sharebee.com", - "||sharecool.org", - "sharpdaily.com.hk", - "||sharpdaily.com.hk", - ".sharpdaily.hk", - ".sharpdaily.tw", - ".shat-tibet.com", - "sheikyermami.com", - ".shellfire.de", - "||shellfire.de", - ".shenshou.org", - "shenyun.com", - "shenyunperformingarts.org", - "||shenyunperformingarts.org", - "shenzhoufilm.com", - "||shenzhoufilm.com", - "||sherabgyaltsen.com", - ".shiatv.net", - ".shicheng.org", - "shinychan.com", - "shipcamouflage.com", - ".shireyishunjian.com", - ".shitaotv.org", - "||shixiao.org", - "||shizhao.org", - "shizhao.org", - "shkspr.mobi/dabr", - "||shodanhq.com", - "||shooshtime.com", - ".shop2000.com.tw", - ".shopping.com", - ".showhaotu.com", - ".showtime.jp", - ".shutterstock.com", - "||shutterstock.com", - "ch.shvoong.com", - ".shwchurch.org", - "||www.shwchurch.org", - ".shwchurch3.com", - "|http://shwchurch3.com", - ".siddharthasintent.org", - "||sidelinesnews.com", - ".sidelinessportseatery.com", - ".sijihuisuo.club", - ".sijihuisuo.com", - ".silkbook.com", - "||simbolostwitter.com", - "simplecd.org", - "||simplecd.org", - "@@||simplecd.me", - "simpleproductivityblog.com", - "bbs.sina.com/", - "bbs.sina.com%2F", - "blog.sina.com.tw", - "dailynews.sina.com/", - "dailynews.sina.com%2F", - "forum.sina.com.hk", - "home.sina.com", - "||magazines.sina.com.tw", - "news.sina.com.hk", - "news.sina.com.tw", - "news.sinchew.com.my", - ".sinchew.com.my/node/", - ".sinchew.com.my/taxonomy/term", - ".singaporepools.com.sg", - "||singaporepools.com.sg", - ".singfortibet.com", - ".singpao.com.hk", - "singtao.com", - "||singtao.com", - "news.singtao.ca", - ".singtaousa.com", - "||singtaousa.com", - "sino-monthly.com", - "||sinocast.com", - "sinocism.com", - "sinomontreal.ca", - ".sinonet.ca", - ".sinopitt.info", - ".sinoants.com", - "||sinoants.com", - ".sinoquebec.com", - ".sierrafriendsoftibet.org", - "sis.xxx", - "||sis001.com", - "sis001.us", - ".site2unblock.com", - "||site90.net", - ".sitebro.tw", - "||sitekreator.com", - "||siteks.uk.to", - "||sitemaps.org", - ".sjrt.org", - "|http://sjrt.org", - "||sjum.cn", - "||sketchappsources.com", - "||skimtube.com", - "||skybet.com", - "|http://users.skynet.be/reves/tibethome.html", - ".skyking.com.tw", - "bbs.skykiwi.com", - "|http://www.skype.com/intl/", - "|http://www.skype.com/zh-Hant", - "||skyvegas.com", - ".xskywalker.com", - "||xskywalker.com", - "||skyxvpn.com", - "m.slandr.net", - ".slaytizle.com", - ".sleazydream.com", - "||slheng.com", - "||slideshare.net", - "forum.slime.com.tw", - ".slinkset.com", - "||slickvpn.com", - ".slutload.com", - "||smartdnsproxy.com", - ".smarthide.com", - "||app.smartmailcloud.com", - "smchbooks.com", - ".smh.com.au/world/death-of-chinese-playboy-leaves-fresh-scratches-in-party-paintwork-20120903-25a8v", - "smhric.org", - ".smith.edu/dalailama", - ".smyxy.org", - "||snapchat.com", - ".snaptu.com", - "||snaptu.com", - "||sndcdn.com", - "sneakme.net", - "snowlionpub.com", - "home.so-net.net.tw/yisa_tsai", - "||soc.mil", - ".socks-proxy.net", - "||socks-proxy.net", - ".sockscap64.com", - "||sockslist.net", - ".socrec.org", - "|http://socrec.org", - ".sod.co.jp", - ".softether.org", - "||softether.org", - ".softether-download.com", - "||softether-download.com", - "||cdn.softlayer.net", - "||sogclub.com", - "sohcradio.com", - "||sohcradio.com", - ".sokmil.com", - "||sorting-algorithms.com", - ".sostibet.org", - ".soumo.info", - "||soup.io", - "@@||static.soup.io", - ".sobees.com", - "||sobees.com", - "socialwhale.com", - ".softether.co.jp", - "||softwarebychuck.com", - "blog.sogoo.org", - "soh.tw", - "||soh.tw", - "sohfrance.org", - "||sohfrance.org", - "chinese.soifind.com", - "sokamonline.com", - ".solidaritetibet.org", - ".solidfiles.com", - "||somee.com", - ".songjianjun.com", - "||songjianjun.com", - ".sonicbbs.cc", - ".sonidodelaesperanza.org", - ".sopcast.com", - ".sopcast.org", - ".sorazone.net", - "||sos.org", - "bbs.sou-tong.org", - ".soubory.com", - "|http://soubory.com", - ".soul-plus.net", - ".soulcaliburhentai.net", - "||soulcaliburhentai.net", - "||soundcloud.com", - ".soundofhope.kr", - "soundofhope.org", - "||soundofhope.org", - "||soupofmedia.com", - "|http://sourceforge.net/p*/shadowsocksgui/", - ".sourcewadio.com", - "southnews.com.tw", - "sowers.org.hk", - "||wlx.sowiki.net", - "||spankbang.com", - ".spankingtube.com", - ".spankwire.com", - "||spb.com", - "||speakerdeck.com", - "||speedify.com", - "spem.at", - "||spencertipping.com", - "||spendee.com", - "||spicevpn.com", - ".spideroak.com", - "||spideroak.com", - ".spike.com", - ".spotflux.com", - "||spotflux.com", - ".spring4u.info", - "|http://spring4u.info", - "||sproutcore.com", - "||sproxy.info", - "||srocket.us", - ".ss-link.com", - "||ss-link.com", - ".ssglobal.co/wp", - "|http://ssglobal.co", - ".ssglobal.me", - "||ssh91.com", - ".sspro.ml", - "|http://sspro.ml", - ".ssrshare.com", - "||ssrshare.com", - "||sss.camp", - "||sstmlt.moe", - "sstmlt.net", - "||sstmlt.net", - "|http://stackoverflow.com/users/895245", - ".stage64.hk", - "||stage64.hk", - "||standupfortibet.org", - "stanford.edu/group/falun", - "usinfo.state.gov", - "||statueofdemocracy.org", - ".starfishfx.com", - ".starp2p.com", - "||starp2p.com", - ".startpage.com", - "||startpage.com", - ".startuplivingchina.com", - "|http://startuplivingchina.com", - "||static-economist.com", - "||stc.com.sa", - "||steel-storm.com", - ".steganos.com", - "||steganos.com", - ".steganos.net", - ".stepchina.com", - "ny.stgloballink.com", - "hd.stheadline.com/news/realtime", - "sthoo.com", - "||sthoo.com", - ".stickam.com", - "stickeraction.com/sesawe", - ".stileproject.com", - ".sto.cc", - ".stoporganharvesting.org", - "||storagenewsletter.com", - ".storm.mg", - "||storm.mg", - ".stoptibetcrisis.net", - "||stoptibetcrisis.net", - "||storify.com", - ".stormmediagroup.com", - "||stoweboyd.com", - "stranabg.com", - "||straplessdildo.com", - "||streamingthe.net", - "streema.com/tv/NTDTV_Chinese", - "cn.streetvoice.com/article", - "cn.streetvoice.com/diary", - "cn2.streetvoice.com", - "tw.streetvoice.com", - ".strikingly.com", - "||strongvpn.com", - ".strongwindpress.com", - ".student.tw/db", - "||studentsforafreetibet.org", - "||stumbleupon.com", - "stupidvideos.com", - ".successfn.com", - "panamapapers.sueddeutsche.de", - ".sugarsync.com", - "||sugarsync.com", - ".sugobbs.com", - "||sugumiru18.com", - "||suissl.com", - "summify.com", - ".sumrando.com", - "||sumrando.com", - "sun1911.com", - ".sunporno.com", - "||sunmedia.ca", - "||sunporno.com", - ".sunskyforum.com", - ".sunta.com.tw", - ".sunvpn.net", - ".suoluo.org", - ".superfreevpn.com", - ".supervpn.net", - "||supervpn.net", - ".superzooi.com", - "|http://superzooi.com", - ".suppig.net", - ".suprememastertv.com", - "|http://suprememastertv.com", - ".surfeasy.com", - "||surfeasy.com", - ".surfeasy.com.au", - "|http://surfeasy.com.au", - "||surrenderat20.net", - ".suyangg.com", - "|http://suyangg.com", - ".svsfx.com", - ".swissinfo.ch", - "||swissinfo.ch", - ".swissvpn.net", - "||swissvpn.net", - "switchvpn.net", - "||switchvpn.net", - ".sydneytoday.com", - "||sydneytoday.com", - ".sylfoundation.org", - "||syncback.com", - "sysresccd.org", - ".sytes.net", - "blog.syx86.com/2009/09/puff", - "blog.syx86.cn/2009/09/puff", - ".szbbs.net", - ".szetowah.org.hk", - "||t-g.com", - ".t35.com", - ".t66y.com", - "||t66y.com", - ".taa-usa.org", - "|http://taa-usa.org", - ".taaze.tw", - "||taaze.tw", - "|http://www.tablesgenerator.com/", - "tabtter.jp", - ".tacem.org", - ".taconet.com.tw", - "||taedp.org.tw", - ".tafm.org", - ".tagwa.org.au", - "tagwalk.com", - "||tagwalk.com", - "tahr.org.tw", - ".taipeisociety.org", - "||taipeisociety.org", - ".taiwanbible.com", - ".taiwancon.com", - ".taiwandaily.net", - "||taiwandaily.net", - ".taiwandc.org", - ".taiwanjustice.com", - "taiwankiss.com", - "taiwannation.com", - "taiwannation.com.tw", - "||taiwanncf.org.tw", - "||taiwannews.com.tw", - "|http://www.taiwanonline.cc/", - "taiwantp.net", - "||taiwantt.org.tw", - "taiwanus.net", - "taiwanyes.com", - "taiwan-sex.com", - ".talk853.com", - ".talkboxapp.com", - "||talkboxapp.com", - ".talkcc.com", - "||talkcc.com", - ".talkonly.net", - "||talkonly.net", - "||tamiaode.tk", - "||tanc.org", - "tangben.com", - ".tangren.us", - ".taoism.net", - "|http://taoism.net", - ".taolun.info", - "||taolun.info", - ".tapatalk.com", - "||tapatalk.com", - "blog.taragana.com", - ".tascn.com.au", - "||taup.net", - "|http://www.taup.org.tw", - ".taweet.com", - "||taweet.com", - ".tbcollege.org", - "||tbcollege.org", - ".tbi.org.hk", - ".tbicn.org", - ".tbjyt.org", - "||tbpic.info", - ".tbrc.org", - "tbs-rainbow.org", - ".tbsec.org", - "||tbsec.org", - "tbskkinabalu.page.tl", - ".tbsmalaysia.org", - ".tbsn.org", - "||tbsn.org", - ".tbsseattle.org", - ".tbssqh.org", - "|http://tbssqh.org", - "tbswd.org", - ".tbtemple.org.uk", - ".tbthouston.org", - ".tccwonline.org", - ".tcewf.org", - "tchrd.org", - "tcnynj.org", - "||tcpspeed.co", - ".tcpspeed.com", - "||tcpspeed.com", - ".tcsofbc.org", - ".tcsovi.org", - ".tdm.com.mo", - "teamamericany.com", - "||techviz.net", - "||teck.in", - ".teeniefuck.net", - "teensinasia.com", - ".telecomspace.com", - "||telegraph.co.uk", - ".tenacy.com", - "||tenzinpalmo.com", - ".tew.org", - ".thaicn.com", - "||theatrum-belli.com", - "theblemish.com", - "||thebcomplex.com", - ".thebobs.com", - "||thebobs.com", - ".thechinabeat.org", - "|http://www.thechinastory.org/yearbooks/yearbook-2012/", - ".thedalailamamovie.com", - "|http://thedalailamamovie.com", - "||thedw.us", - "thefrontier.hk/tf", - "cn.thegay.com", - "|http://thegioitinhoc.vn/", - ".thegly.com", - ".thehots.info", - "thehousenews.com", - "||thehun.net", - ".theinitium.com", - "||theinitium.com", - ".thenewslens.com", - "||thenewslens.com", - ".thepiratebay.org", - "||thepiratebay.org", - ".theporndude.com", - "||theporndude.com", - "||theportalwiki.com", - "thereallove.kr", - "therock.net.nz", - "thespeeder.com", - "||thestandnews.com", - "thetibetcenter.org", - "thetibetconnection.org", - ".thetibetmuseum.org", - ".thetibetpost.com", - "||thetibetpost.com", - "||thetinhat.com", - "thetrotskymovie.com", - "thevivekspot.com", - "||thewgo.org", - ".theync.com", - "|http://theync.com", - ".thinkingtaiwan.com", - ".thisav.com", - "|http://thisav.com", - ".thlib.org", - "||thomasbernhard.org", - ".thongdreams.com", - "threatchaos.com", - "||throughnightsfire.com", - ".thumbzilla.com", - "||thywords.com", - ".thywords.com.tw", - "tiananmenmother.org", - ".tiananmenduizhi.com", - "||tiananmenduizhi.com", - "||tiananmenuniv.com", - "||tiananmenuniv.net", - "||tiandixing.org", - ".tianhuayuan.com", - ".tianlawoffice.com", - "||tianti.io", - "tiantibooks.org", - "||tiantibooks.org", - "tianyantong.org.cn", - ".tianzhu.org", - ".tibet.at", - "tibet.ca", - ".tibet.com", - "||tibet.com", - "tibet.fr", - ".tibet.net", - "||tibet.net", - "tibet.nu", - ".tibet.org", - "||tibet.org", - ".tibet.sk", - "tibet.org.tw", - ".tibet.to", - ".tibet-envoy.eu", - "||tibet-envoy.eu", - ".tibet-foundation.org", - ".tibet-house-trust.co.uk", - "tibet-info.net", - "tibet-initiative.de", - "||tibet-initiative.de", - ".tibet-munich.de", - ".tibet3rdpole.org", - "|http://tibet3rdpole.org", - "tibetaction.net", - "||tibetaction.net", - ".tibetaid.org", - "tibetalk.com", - ".tibetan.fr", - "tibetan-alliance.org", - ".tibetanarts.org", - ".tibetanbuddhistinstitute.org", - "|http://tibetanbuddhistinstitute.org", - "tibetancommunity.org", - ".tibetanjournal.com", - ".tibetanlanguage.org", - ".tibetanliberation.org", - "||tibetanliberation.org", - ".tibetcollection.com", - ".tibetanaidproject.org", - ".tibetancommunityuk.net", - "|http://tibetancommunityuk.net", - "tibetanculture.org", - "tibetanfeministcollective.org", - ".tibetanpaintings.com", - ".tibetanphotoproject.com", - ".tibetanpoliticalreview.org", - ".tibetanreview.net", - "|http://tibetansports.org", - ".tibetanwomen.org", - "|http://tibetanwomen.org", - ".tibetanyouth.org", - ".tibetanyouthcongress.org", - "||tibetanyouthcongress.org", - ".tibetcharity.dk", - "tibetcharity.in", - ".tibetchild.org", - ".tibetcity.com", - ".tibetcorps.org", - ".tibetexpress.net", - "|http://tibetexpress.net", - "tibetfocus.com", - "tibetfund.org", - ".tibetgermany.com", - "||tibetgermany.de", - ".tibethaus.com", - ".tibetheritagefund.org", - "tibethouse.jp", - "tibethouse.org", - "||tibethouse.us", - ".tibetinfonet.net", - ".tibetjustice.org", - ".tibetkomite.dk", - "|http://tibetmuseum.org", - "tibetnetwork.org", - "||tibetnetwork.org", - ".tibetoffice.ch", - "|http://tibetoffice.ch", - "tibetoffice.eu", - "tibetoffice.org", - "tibetonline.com", - "||tibetonline.com", - ".tibetoffice.com.au", - "|http://tibetoffice.com.au", - "||tibetonline.tv", - ".tibetonline.tv", - ".tibetoralhistory.org", - "|http://tibetoralhistory.org", - ".tibetpolicy.eu", - ".tibetrelieffund.co.uk", - "tibetsites.com", - ".tibetsociety.com", - "||tibetsociety.com", - ".tibetsun.com", - ".tibetsupportgroup.org", - "|http://tibetsupportgroup.org", - ".tibetswiss.ch", - ".tibettelegraph.com", - "tibettimes.net", - "||tibetwrites.org", - ".ticket.com.tw", - ".tigervpn.com", - "||tigervpn.com", - ".timdir.com", - "|http://timdir.com", - ".time.com", - "|http://time.com", - ".timsah.com", - "||blog.tiney.com", - "tintuc101.com", - ".tiny.cc", - "|http://tiny.cc", - "tinychat.com", - "||tinypaste.com", - ".tistory.com", - "||tkcs-collins.com", - ".tmagazine.com", - "||tmagazine.com", - ".tmdfish.com", - "|http://tmi.me", - ".tmpp.org", - "|http://tmpp.org", - ".tnaflix.com", - "||tnaflix.com", - ".tngrnow.com", - ".tngrnow.net", - ".tnp.org", - "|http://tnp.org", - ".to-porno.com", - "||to-porno.com", - "togetter.com", - ".tokyo-247.com", - ".tokyo-hot.com", - "||tokyo-porn-tube.com", - "||tokyocn.com", - "tw.tomonews.net", - ".tongil.or.kr", - ".tono-oka.jp", - "tonyyan.net", - ".toodoc.com", - "toonel.net", - "top81.ws", - ".topnews.in", - ".toppornsites.com", - "|http://toppornsites.com", - ".torguard.net", - "||torguard.net", - "||top.tv", - ".topshareware.com", - ".topsy.com", - "||topsy.com", - "||toptip.ca", - "tora.to", - ".torcn.com", - ".torproject.org", - "||torproject.org", - "torrentprivacy.com", - "||torrentprivacy.com", - "|http://torrentproject.se", - "||torrenty.org", - "||torrentz.eu", - "||torvpn.com", - "||totalvpn.com", - ".toutiaoabc.com", - "towngain.com", - "toypark.in", - "toytractorshow.com", - ".tparents.org", - ".tpi.org.tw", - "||tpi.org.tw", - "traffichaus.com", - "||transparency.org", - "||treemall.com.tw", - "trendsmap.com", - "||trendsmap.com", - ".trialofccp.org", - "||trialofccp.org", - ".trimondi.de/SDLE", - ".trouw.nl", - "|http://trouw.nl", - ".trt.net.tr", - "trtc.com.tw", - ".truebuddha-md.org", - "|http://truebuddha-md.org", - "trulyergonomic.com", - ".truth101.co.tv", - "|http://truth101.co.tv", - ".truthontour.org", - "|http://truthontour.org", - ".truveo.com", - ".tsctv.net", - ".tsemtulku.com", - "tsquare.tv", - ".tsu.org.tw", - "tsunagarumon.com", - ".tsctv.net", - "||tt1069.com", - ".tttan.com", - "||tttan.com", - "bb.ttv.com.tw/bb", - "tu8964.com", - ".tubaholic.com", - ".tube.com", - "tube8.com", - "||tube8.com", - ".tube911.com", - "||tube911.com", - ".tubecup.com", - ".tubegals.com", - ".tubeislam.com", - "|http://tubeislam.com", - ".tubestack.com", - "||tubewolf.com", - ".tuibeitu.net", - "tuidang.net", - ".tuidang.org", - "||tuidang.org", - ".tuidang.se", - "bbs.tuitui.info", - ".tumutanzi.com", - "|http://tumutanzi.com", - "||tumview.com", - ".tunein.com", - "|http://tunein.com", - "||tunnelbear.com", - ".tunnelr.com", - "||tunnelr.com", - ".tuo8.blue", - "||tuo8.blue", - ".tuo8.cc", - ".tuo8.club", - "||tuo8.club", - ".tuo8.fit", - ".tuo8.hk", - ".tuo8.in", - ".tuo8.ninja", - ".tuo8.org", - "||tuo8.fit", - "||tuo8.org", - ".tuo8.pw", - "|http://tuo8.pw", - "||tuo8.red", - ".tuo8.space", - "tuitwit.com", - ".turansam.org", - ".turbobit.net", - "|http://turbobit.net", - ".turbohide.com", - "||turbohide.com", - ".tushycash.com", - "|http://tushycash.com", - "||app.tutanota.com", - ".tuvpn.com", - "||tuvpn.com", - "|http://tuzaijidi.com", - "|http://*.tuzaijidi.com", - ".tw01.org", - "|http://tw01.org", - ".tumblr.com", - "||tumblr.com", - "||lecloud.net", - "|http://cosmic.monar.ch", - "||slutmoonbeam.com", - "|http://blog.soylent.com", - ".tv.com", - "|http://tv.com", - "tvants.com", - "forum.tvb.com", - "news.tvb.com/list/world", - "news.tvb.com/local", - "news.tvbs.com.tw", - ".tvboxnow.com", - "|http://tvboxnow.com/", - "tvider.com", - ".tvmost.com.hk", - ".tvplayvideos.com", - "||tvunetworks.com", - ".tw-blog.com", - "|https://tw-blog.com", - ".tw-npo.org", - ".twaitter.com", - "twapperkeeper.com", - "||twapperkeeper.com", - "||twaud.io", - ".twaud.io", - ".twavi.com", - ".twbbs.net.tw", - "twbbs.org", - "twbbs.tw", - "||twblogger.com", - "tweepmag.com", - ".tweepml.org", - "||tweepml.org", - ".tweetbackup.com", - "||tweetbackup.com", - "tweetboard.com", - "||tweetboard.com", - ".tweetboner.biz", - "||tweetboner.biz", - ".tweetcs.com", - "|http://tweetcs.com", - "|http://deck.ly", - "||mtw.tl", - "||tweetedtimes.com", - "||tweetmylast.fm", - "tweetphoto.com", - "||tweetphoto.com", - "||tweetrans.com", - "tweetree.com", - "||tweetree.com", - ".tweettunnel.com", - "||tweettunnel.com", - "||tweetwally.com", - "tweetymail.com", - "||twelve.today", - ".tweez.net", - "|http://tweez.net", - "||twftp.org", - "||twgreatdaily.com", - "twibase.com", - ".twibble.de", - "||twibble.de", - "twibbon.com", - "||twibs.com", - ".twicountry.org", - "|http://twicountry.org", - "twicsy.com", - ".twiends.com", - "|http://twiends.com", - ".twifan.com", - "|http://twifan.com", - "twiffo.com", - "||twiffo.com", - ".twilightsex.com", - "twilog.org", - "twimbow.com", - "||twindexx.com", - "twipple.jp", - "||twipple.jp", - "||twip.me", - "twishort.com", - "||twishort.com", - "twistar.cc", - "||twister.net.co", - "||twisterio.com", - "twisternow.com", - "twistory.net", - "twitbrowser.net", - "||twitcause.com", - "||twitgether.com", - "||twiggit.org", - "twitgoo.com", - "twitiq.com", - "||twitiq.com", - ".twitlonger.com", - "||twitlonger.com", - "|http://tl.gd/", - "twitmania.com", - "twitoaster.com", - "||twitoaster.com", - "||twitonmsn.com", - ".twit2d.com", - "||twit2d.com", - ".twitstat.com", - "||twitstat.com", - "||firstfivefollowers.com", - "||retweeteffect.com", - "||tweeplike.me", - "||tweepguide.com", - "||turbotwitter.com", - ".twitvid.com", - "||twitvid.com", - "|http://twt.tl", - "twittbot.net", - "||ads-twitter.com", - "||twttr.com", - "||twitter4j.org", - ".twittercounter.com", - "||twittercounter.com", - "twitterfeed.com", - ".twittergadget.com", - "||twittergadget.com", - ".twitterkr.com", - "||twitterkr.com", - "||twittermail.com", - "||twitterrific.com", - "twittertim.es", - "||twittertim.es", - "twitthat.com", - "||twitturk.com", - ".twitturly.com", - "||twitturly.com", - ".twitzap.com", - "twiyia.com", - "||twstar.net", - ".twtkr.com", - "|http://twtkr.com", - ".twnorth.org.tw", - "twskype.com", - "twtrland.com", - "twurl.nl", - ".twyac.org", - "||twyac.org", - ".txxx.com", - ".tycool.com", - "||tycool.com", - "||typepad.com", - "@@||www.typepad.com", - "@@||static.typepad.com", - "||blog.expofutures.com", - "||legaltech.law.com", - "||blogs.tampabay.com", - "||contests.twilio.com", - ".embr.in", - "||embr.in", - ".u9un.com", - "||u9un.com", - ".ubddns.org", - "|http://ubddns.org", - "||uberproxy.net", - ".uc-japan.org", - "||uc-japan.org", - ".srcf.ucam.org/salon/", - "|http://china.ucanews.com/", - "||ucdc1998.org", - "|http://hum*.uchicago.edu/faculty/ywang/history", - "||uderzo.it", - ".udn.com", - "||udn.com", - "||udn.com.tw", - "udnbkk.com/bbs", - "||uforadio.com.tw", - "ufreevpn.com", - ".ugo.com", - "||uhdwallpapers.org", - "||uhrp.org", - ".uighur.nl", - "||uighur.nl", - "uighurbiz.net", - ".ulike.net", - "ukcdp.co.uk", - "ukliferadio.co.uk", - "||ukliferadio.co.uk", - "ultravpn.fr", - "||ultravpn.fr", - "ultraxs.com", - "umich.edu/~falun", - "||unblock.cn.com", - ".unblocker.yt", - "unblock-us.com", - "||unblock-us.com", - ".unblockdmm.com", - "|http://unblockdmm.com", - "||unblocksit.es", - "uncyclomedia.org", - ".uncyclopedia.hk/wiki", - "|http://uncyclopedia.hk", - "|http://uncyclopedia.tw", - "underwoodammo.com", - "||underwoodammo.com", - "||unholyknight.com", - ".uni.cc", - "||cldr.unicode.org", - ".unification.net", - ".unification.org.tw", - "||unirule.cloud", - ".unitedsocialpress.com", - ".unix100.com", - "||unknownspace.org", - ".unodedos.com", - "unpo.org", - ".untraceable.us", - "|http://untraceable.us", - "||uocn.org", - "tor.updatestar.com", - ".upholdjustice.org", - ".upload4u.info", - "uploaded.net/file", - "|http://uploaded.net/file", - "|http://uploaded.to/file", - ".uploadstation.com/file", - ".upmedia.mg", - "||upmedia.mg", - ".upornia.com", - "|http://upornia.com", - "||uproxy.org", - "|http://tor.cn.uptodown.com/", - ".upwill.org", - "ur7s.com", - "||urbansurvival.com", - "myshare.url.com.tw/", - "||urlborg.com", - "||urlparser.com", - "us.to", - "||usacn.com", - ".usaip.eu", - "||usaip.eu", - "dalailama.usc.edu", - "iipdigital.usembassy.gov", - "||usfk.mil", - "||usma.edu", - "||usmc.mil", - ".usocctn.com", - "|http://tarr.uspto.gov/", - "||tsdr.uspto.gov", - ".ustream.tv", - "||ustream.tv", - ".usunitednews.com", - "|http://usunitednews.com", - "usus.cc", - ".utopianpal.com", - "||utopianpal.com", - ".uu-gg.com", - ".uvwxyz.xyz", - "||uvwxyz.xyz", - ".uwants.com", - ".uwants.net", - "uyghur.co.uk", - "|http://uyghur-j.org", - "||uyghuramerican.org", - ".uyghurcanadiansociety.org", - ".uyghurensemble.co.uk", - "||uyghurcongress.org", - ".uyghurpen.org", - ".uyghurpress.com", - "|https://uyghurpress.com", - ".uyghurstudies.org", - "|http://uyghurstudies.org", - "uygur.org", - "|http://uymaarip.com/", - ".v2ray.com", - "||v2ray.com", - ".van001.com", - ".van698.com", - ".vanemu.cn", - ".vanilla-jp.com", - ".vanpeople.com", - "vansky.com", - "||vaticannews.va", - "||vcf-online.org", - "||vcfbuilder.org", - ".vegasred.com", - ".velkaepocha.sk", - ".venbbs.com", - ".venchina.com", - ".venetianmacao.com", - "||venetianmacao.com", - "veoh.com", - "mysite.verizon.net", - "vermonttibet.org", - ".versavpn.com", - "||versavpn.com", - "||verybs.com", - ".vft.com.tw", - ".viber.com", - "||viber.com", - ".vica.info", - ".victimsofcommunism.org", - "|http://victimsofcommunism.org", - "||vid.me", - "||vidble.com", - "videobam.com", - "||videobam.com", - ".videodetective.com", - ".videomega.tv", - "||videomega.tv", - ".videomo.com", - "videopediaworld.com", - ".videopress.com", - ".vidinfo.org/video", - "vietdaikynguyen.com", - ".vijayatemple.org", - "vimeo.com", - "||vimeo.com", - "||vimperator.org", - "||vincnd.com", - "||vinniev.com", - "|http://www.lib.virginia.edu/area-studies/Tibet/tibet.html", - ".virtualrealporn.com", - "||virtualrealporn.com", - "visibletweets.com", - "|http://ny.visiontimes.com", - ".vital247.org", - "||viu.com", - ".vivahentai4u.net", - ".vivatube.com", - ".vivthomas.com", - "||vivthomas.com", - ".vjav.com", - "||vjav.com", - ".vjmedia.com.hk", - ".vllcs.org", - "|http://vllcs.org", - "||vmixcore.com", - "||vnet.link", - "cn.voa.mobi", - "tw.voa.mobi", - ".voachineseblog.com", - "||voachineseblog.com", - "voagd.com", - ".voacantonese.com", - "||voacantonese.com", - "voachinese.com", - "||voachinese.com", - ".voanews.com", - "||voanews.com", - "voatibetan.com", - "||voatibetan.com", - ".voatibetanenglish.com", - "||voatibetanenglish.com", - ".vocativ.com", - "vocn.tv", - ".vot.org", - "||vot.org", - ".vovo2000.com", - "|http://vovo2000.com", - ".voxer.com", - "||voxer.com", - ".voy.com", - "||vpn.ac", - ".vpn4all.com", - "||vpn4all.com", - ".vpnaccount.org", - "|http://vpnaccount.org", - ".vpnaccounts.com", - "||vpnaccounts.com", - ".vpncomparison.org", - ".vpncup.com", - "||vpncup.com", - "vpnbook.com", - ".vpncoupons.com", - "|http://vpncoupons.com", - ".vpndada.com", - "||vpndada.com", - ".vpnfan.com", - "vpnfire.com", - ".vpnfires.biz", - ".vpnforgame.net", - "||vpnforgame.net", - "||vpngate.jp", - ".vpngate.net", - "||vpngate.net", - ".vpngratis.net", - "vpnhq.com", - ".vpnmaster.com", - "||vpnmaster.com", - ".vpnmentor.com", - "||vpnmentor.com", - ".vpninja.net", - "||vpninja.net", - ".vpnintouch.com", - "||vpnintouch.net", - "vpnjack.com", - "||vpnjack.com", - ".vpnpick.com", - "||vpnpick.com", - "||vpnpop.com", - "||vpnpronet.com", - ".vpnreactor.com", - "||vpnreactor.com", - "||vpnreviewz.com", - ".vpnsecure.me", - "||vpnsecure.me", - ".vpnshazam.com", - "||vpnshazam.com", - ".vpnshieldapp.com", - "||vpnshieldapp.com", - ".vpnsp.com", - ".vpntraffic.com", - ".vpntunnel.com", - "||vpntunnel.com", - ".vpnuk.info", - "||vpnuk.info", - "||vpnunlimitedapp.com", - ".vpnvip.com", - "||vpnvip.com", - ".vpnworldwide.com", - ".vporn.com", - "||vporn.com", - ".vpser.net", - "@@||vpser.net", - "vraiesagesse.net", - ".vrmtr.com", - "||vtunnel.com", - "||vuku.cc", - "lists.w3.org/archives/public", - "||w3schools.com", - "||waffle1999.com", - ".wahas.com", - ".waigaobu.com", - "waikeung.org/php_wind", - ".wailaike.net", - ".waiwaier.com", - "|http://waiwaier.com", - "||wallmama.com", - "wallornot.org", - "||wallpapercasa.com", - ".wallproxy.com", - "@@||wallproxy.com.cn", - "||waltermartin.com", - "||waltermartin.org", - "||www.wan-press.org", - "||wanderinghorse.net", - "||wangafu.net", - "||wangjinbo.org", - ".wangjinbo.org", - "wanglixiong.com", - ".wango.org", - "||wango.org", - "wangruoshui.net", - "www.wangruowang.org", - "want-daily.com", - "wapedia.mobi/zhsimp", - "||waselpro.com", - ".watchinese.com", - ".wattpad.com", - "||wattpad.com", - ".makzhou.warehouse333.com", - "washeng.net", - ".watch8x.com", - "||watchmygf.net", - "||wav.tv", - ".wdf5.com", - ".wearehairy.com", - ".wearn.com", - "||wearn.com", - "|http://hkcoc.weather.com.hk", - "||hudatoriq.web.id", - "||web2project.net", - "webbang.net", - ".webevader.org", - ".webfreer.com", - "weblagu.com", - ".webjb.org", - ".webrush.net", - "webs-tv.net", - ".websitepulse.com/help/testtools.china-test", - "|http://www.websnapr.com", - ".webwarper.net", - "|http://webwarper.net", - "webworkerdaily.com", - ".weekmag.info", - "||wefightcensorship.org", - ".wefong.com", - "weiboleak.com", - ".weihuo.org", - "weijingsheng.org", - ".weiming.info", - "||weiming.info", - "weiquanwang.org", - "|http://weisuo.ws", - ".welovecock.com", - ".wemigrate.org", - "|http://wemigrate.org", - "wengewang.com", - "||wengewang.org", - ".wenhui.ch", - "|http://trans.wenweipo.com/gb/", - ".wenxuecity.com", - "||wenxuecity.com", - ".wenyunchao.com", - "||wenyunchao.com", - ".westca.com", - "||westca.com", - "||westernwolves.com", - ".westkit.net", - "||westpoint.edu", - ".westernshugdensociety.org", - "wetpussygames.com", - ".wetplace.com", - "wexiaobo.org", - "||wexiaobo.org", - "wezhiyong.org", - "||wezone.net", - ".wforum.com", - "||wforum.com/", - ".whatblocked.com", - "||whatblocked.com", - ".wheatseeds.org", - "||wheelockslatin.com", - ".whippedass.com", - ".whoer.net", - "||whoer.net", - "whotalking.com", - "whylover.com", - "||whyx.org", - "|http://zh.ecdm.wikia.com", - "|http://evchk.wikia.com", - "fq.wikia.com", - "zh.pttpedia.wikia.com/wiki/%E7%BF%92%E5%8C%85%E5%AD%90%E4%B9%8B%E4%BA%82", - "cn.uncyclopedia.wikia.com", - "zh.uncyclopedia.wikia.com", - "||wikileaks.ch", - "||wikileaks.com", - "||wikileaks.de", - "||wikileaks.eu", - "||wikileaks.lu", - ".wikileaks.org", - "||wikileaks.org", - "||wikileaks.pl", - ".wikileaks-forum.com", - "wildammo.com", - ".williamhill.com", - "||collateralmurder.com", - "||collateralmurder.org", - "wikilivres.info/wiki/%E9%9B%B6%E5%85%AB%E5%AE%AA%E7%AB%A0", - "||wikimapia.org", - "|http://zh.wikisource.org", - "||zh.wikinews.org", - "||ja.wikipedia.org", - "||wikipedia.org", - "||wikiwiki.jp", - "||casino.williamhill.com", - "||sports.williamhill.com", - "||vegas.williamhill.com", - "||willw.net", - "||windowsphoneme.com", - ".windscribe.com", - "||windscribe.com", - "||community.windy.com", - "||wingy.site", - ".winning11.com", - "winwhispers.info", - "||wiredbytes.com", - "||wiredpen.com", - ".wisdompubs.org", - ".wisevid.com", - "||wisevid.com", - ".witnessleeteaching.com", - ".witopia.net", - ".wjbk.org", - "||wjbk.org", - "|http://wn.com", - ".wnacg.com", - ".wnacg.org", - ".wo.tc", - "||woeser.com", - "|http://woesermiddle-way.net/", - ".wokar.org", - "|http://wokar.org", - "wolfax.com", - "||wolfax.com", - "||woolyss.com", - "woopie.jp", - "||woopie.jp", - "woopie.tv", - "||woopie.tv", - "||workatruna.com", - ".workerdemo.org.hk", - ".workerempowerment.org", - "||workersthebig.net", - ".worldcat.org", - "worldjournal.com", - ".worldvpn.net", - "||worldvpn.net", - "||videopress.com", - ".wordpress.com", - "|http://*.wordpress.com", - "||chenshan20042005.wordpress.com", - "||chinaview.wordpress.com", - "||cnbbnews.wordpress.com", - "||freedominfonetweb.wordpress.com", - "||hka8964.wordpress.com", - "||hkanews.wordpress.com", - "||hqsbnet.wordpress.com", - "||hqsbonline.wordpress.com", - "||investigating.wordpress.com", - "||jobnewera.wordpress.com", - "||minghuiyw.wordpress.com", - "||wo3ttt.wordpress.com", - "||sujiatun.wordpress.com", - "||xijie.wordpress.com", - "||wp.com", - ".wow.com", - ".wow-life.net", - "||wowlegacy.ml", - "||wowporn.com", - "||wowgirls.com", - ".wowrk.com", - "woxinghuiguo.com", - ".woyaolian.org", - "|http://woyaolian.org", - ".wpoforum.com", - "||wpoforum.com", - ".wqyd.org", - "||wqyd.org", - "wrchina.org", - "wretch.cc", - ".wsj.com", - "||wsj.com", - ".wsj.net", - "||wsj.net", - ".wsjhk.com", - ".wtbn.org", - ".wtfpeople.com", - "wuerkaixi.com", - "||wufafangwen.com", - "wufi.org.tw", - "||wuguoguang.com", - "wujie.net", - "wujieliulan.com", - "||wujieliulan.com", - "wukangrui.net", - "||wuw.red", - "||wuyanblog.com", - ".wwitv.com", - "||wwitv.com", - "wzyboy.im/post/160", - ".x-berry.com", - "||x-berry.com", - "||x-art.com", - "||x-wall.org", - "x1949x.com", - "x365x.com", - "xanga.com", - "||xbabe.com", - ".xbookcn.com", - "||xbookcn.com", - "||xcafe.in", - "||xcity.jp", - ".xcritic.com", - "|http://cdn*.xda-developers.com", - ".xerotica.com", - "destiny.xfiles.to/ubbthreads", - ".xfm.pp.ru", - ".xgmyd.com", - "||xgmyd.com", - "xhamster.com", - "||xhamster.com", - ".xianba.net", - ".xianchawang.net", - ".xianjian.tw", - "|http://xianjian.tw", - ".xianqiao.net", - ".xiaobaiwu.com", - ".xiaochuncnjp.com", - ".xiaod.in", - ".xiaohexie.com", - "||xiaolan.me", - "||xiaoma.org", - "||xiaohexie.com", - "xiezhua.com", - ".xihua.es", - "forum.xinbao.de/forum", - ".xing.com", - "|http://xing.com", - ".xinmiao.com.hk", - "||xinmiao.com.hk", - "xinsheng.net", - "xinshijue.com", - "xinhuanet.org", - "|http://xinyubbs.net", - ".xiongpian.com", - ".xiuren.org", - "xizang-zhiye.org", - "xjp.cc", - "||xjp.cc", - "||xjtravelguide.com", - "xlfmtalk.com", - "||xlfmwz.info", - "||xml-training-guide.com", - "xmovies.com", - "||xnxx.com", - "xpdo.net", - "||xpud.org", - ".xrentdvd.com", - ".xskywalker.net", - "||xtube.com", - "blog.xuite.net", - "vlog.xuite.net", - "xuzhiyong.net", - "||xuchao.org", - "xuchao.net", - "||xuchao.net", - "xvideo.cc", - ".xvideos.com", - "||xvideos.com", - "||xvideos.es", - ".xkiwi.tk/", - ".xxbbx.com", - ".xxlmovies.com", - "||xxx.com", - ".xxx.xxx", - "|http://xxx.xxx", - ".xxxfuckmom.com", - "||xxxx.com.au", - ".xxxymovies.com", - "|http://xxxymovies.com", - "xys.org", - "xysblogs.org", - "xyy69.com", - "xyy69.info", - "||yakbutterblues.com", - "||yam.com", - "||yam.org.tw", - ".yanghengjun.com", - "yangjianli.com", - ".yasni.co.uk", - "||yasni.co.uk", - ".yayabay.com/forum", - ".ydy.com", - ".yeahteentube.com", - "||yeahteentube.com", - "||yecl.net", - "||yeelou.com", - "yeeyi.com", - "yegle.net", - "||yegle.net", - ".yes.xxx", - "||yes123.com.tw", - "||yesasia.com", - "||yesasia.com.hk", - ".yes-news.com", - "|http://yes-news.com", - ".yespornplease.com", - "||yespornplease.com", - "|http://yeyeclub.com", - "||yhcw.net", - ".yibada.com", - ".yibaochina.com", - ".yidio.com", - "||yidio.com", - "yilubbs.com", - "xa.yimg.com", - ".yingsuoss.com", - ".yipub.com", - "||yipub.com", - "yinlei.org/mt", - ".yizhihongxing.com", - ".yobt.com", - ".yobt.tv", - "||yobt.tv", - ".yogichen.org", - "||yogichen.org", - ".yolasite.com", - ".yomiuri.co.jp", - "yong.hu", - ".yorkbbs.ca", - "||youxu.info", - ".youjizz.com", - "||youjizz.com", - ".youmaker.com", - "||youmaker.com", - ".youngpornvideos.com", - "youngspiration.hk", - ".youpai.org", - "||youpai.org", - ".your-freedom.net", - "||yourepeat.com", - ".yourprivatevpn.com", - "||yourprivatevpn.com", - ".yousendit.com", - "||yousendit.com", - ".youthnetradio.org/tmit/forum", - "blog.youthwant.com.tw", - "me.youthwant.com.tw", - "share.youthwant.com.tw", - "topic.youthwant.com.tw", - ".youporn.com", - "||youporn.com", - ".youporngay.com", - "||youporngay.com", - ".yourlisten.com", - "|http://yourlisten.com", - ".yourlust.com", - "|http://yourlust.com", - "youshun12.com", - ".youtubecn.com", - "youversion.com", - "||youversion.com", - "blog.youxu.info/2010/03/14/west-chamber", - "ytht.net", - "yuanming.net", - ".yuanzhengtang.org", - ".yulghun.com", - "||yunchao.net", - "||yuntipub.com", - ".yuvutu.com", - "||yvesgeleyn.com", - ".ywpw.com/forums/history/post/A0/p0/html/227", - "yx51.net", - ".yyii.org", - "||yyii.org", - ".yzzk.com", - "|http://yzzk.com", - "zacebook.com", - ".zalmos.com", - "||zalmos.com", - "||zannel.com", - ".zaobao.com", - "||zaobao.com", - "|http://zaobao.com.sg", - "||zaobao.com.sg", - ".zaozon.com", - "||zdnet.com.tw", - ".zello.com", - "||zello.com", - ".zengjinyan.org", - ".zenmate.com", - "||zenmate.com", - "||zenmate.com.ru", - "||zeronet.io", - "||zeutch.com", - ".zfreet.com", - ".zgsddh.com", - "zgzcjj.net", - ".zhanbin.net", - "||zhanbin.net", - ".zhangboli.net", - "||zhangtianliang.com", - "||zhanlve.org", - "zhenghui.org", - ".zhengjian.org", - "||zhengjian.org", - "zhengwunet.org", - "zhenlibu.info", - "||zhenlibu.info", - ".zhenlibu1984.com", - "||zhenlibu1984.com", - "|http://zhenxiang.biz", - ".zhinengluyou.com", - "zhongguo.ca", - "|http://zhongguorenquan.org", - "zhongguotese.net", - "||zhongguotese.net", - "||zhongmeng.org", - ".zhoushuguang.com", - "||zhreader.com", - ".zhuangbi.me", - "||zhuangbi.me", - ".zhuanxing.cn", - "||zhuatieba.com", - "zhuichaguoji.org", - "||zhuichaguoji.org", - "|http://book.zi5.me", - ".ziddu.com/download", - "||zillionk.com", - ".zinio.com", - "||zinio.com", - ".ziporn.com", - ".zippyshare.com", - ".zkaip.com", - "||zkaip.com", - "realforum.zkiz.com", - "||zmw.cn", - ".zodgame.us", - "zomobo.net", - ".zonaeuropa.com", - "||zonaeuropa.com", - "||zonghexinwen.com", - ".zonghexinwen.net", - "||zoogvpn.com", - "||zootool.com", - ".zoozle.net", - "writer.zoho.com", - "||zorrovpn.com", - "||zpn.im", - "||zspeeder.me", - ".zsrhao.com", - ".zuo.la", - "||zuo.la", - "||zuobiao.me", - ".zuola.com", - "||zuola.com", - "||zvereff.com", - ".zynaima.com", - "zyzc9.com", - ".zzcartoon.com", - "64memo", - "aHR0cHM6Ly95ZWNsLm5ldA", - "freenet", - ".google.*/falun", - "phobos.apple.com*/video", - "q=freedom", - "q%3Dfreedom", - "remembering_tiananmen_20_years", - "search*safeweb", - "q=triangle", - "q%3DTriangle", - "ultrareach", - "ultrasurf", - "@@||aliyun.com", - "@@||baidu.com", - "@@||chinaso.com", - "@@||chinaz.com", - "@@|http://nrch.culture.tw/", - "@@||adservice.google.com", - "@@||dl.google.com", - "@@||kh.google.com", - "@@||khm.google.com", - "@@||khm0.google.com", - "@@||khm1.google.com", - "@@||khm2.google.com", - "@@||khm3.google.com", - "@@||khmdb.google.com", - "@@||tools.google.com", - "@@||clientservices.googleapis.com", - "@@||fonts.googleapis.com", - "@@||khm.googleapis.com", - "@@||khm0.googleapis.com", - "@@||khm1.googleapis.com", - "@@||khm2.googleapis.com", - "@@||khm3.googleapis.com", - "@@||khmdb.googleapis.com", - "@@||storage.googleapis.com", - "@@||translate.googleapis.com", - "@@||update.googleapis.com", - "@@||safebrowsing.googleapis.com", - "@@||cn.gravatar.com", - "@@||connectivitycheck.gstatic.com", - "@@||csi.gstatic.com", - "@@||fonts.gstatic.com", - "@@||ssl.gstatic.com", - "@@||haosou.com", - "@@||ip.cn", - "@@||jike.com", - "@@|http://translate.google.cn", - "@@|http://www.google.cn/maps", - "@@||http2.golang.org", - "@@||gov.cn", - "@@||qq.com", - "@@||sina.cn", - "@@||sina.com.cn", - "@@||sogou.com", - "@@||so.com", - "@@||soso.com", - "@@||uluai.com.cn", - "@@||weibo.com", - "@@||yahoo.cn", - "@@||youdao.com", - "@@||zhongsou.com", - "@@|http://ime.baidu.jp" -]; - -/* -* This file is part of Adblock Plus , -* Copyright (C) 2006-2014 Eyeo GmbH -* -* Adblock Plus is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 3 as -* published by the Free Software Foundation. -* -* Adblock Plus is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with Adblock Plus. If not, see . -*/ - -function createDict() -{ - var result = {}; - result.__proto__ = null; - return result; -} - -function getOwnPropertyDescriptor(obj, key) -{ - if (obj.hasOwnProperty(key)) - { - return obj[key]; - } - return null; -} - -function extend(subclass, superclass, definition) -{ - if (Object.__proto__) - { - definition.__proto__ = superclass.prototype; - subclass.prototype = definition; - } - else - { - var tmpclass = function(){}, ret; - tmpclass.prototype = superclass.prototype; - subclass.prototype = new tmpclass(); - subclass.prototype.constructor = superclass; - for (var i in definition) - { - if (definition.hasOwnProperty(i)) - { - subclass.prototype[i] = definition[i]; - } - } - } -} - -function Filter(text) -{ - this.text = text; - this.subscriptions = []; -} -Filter.prototype = { - text: null, - subscriptions: null, - toString: function() - { - return this.text; - } -}; -Filter.knownFilters = createDict(); -Filter.elemhideRegExp = /^([^\/\*\|\@"!]*?)#(\@)?(?:([\w\-]+|\*)((?:\([\w\-]+(?:[$^*]?=[^\(\)"]*)?\))*)|#([^{}]+))$/; -Filter.regexpRegExp = /^(@@)?\/.*\/(?:\$~?[\w\-]+(?:=[^,\s]+)?(?:,~?[\w\-]+(?:=[^,\s]+)?)*)?$/; -Filter.optionsRegExp = /\$(~?[\w\-]+(?:=[^,\s]+)?(?:,~?[\w\-]+(?:=[^,\s]+)?)*)$/; -Filter.fromText = function(text) -{ - if (text in Filter.knownFilters) - { - return Filter.knownFilters[text]; - } - var ret; - if (text.charAt(0) == "!") - { - ret = new CommentFilter(text); - } - else - { - ret = RegExpFilter.fromText(text); - } - Filter.knownFilters[ret.text] = ret; - return ret; -}; - -function InvalidFilter(text, reason) -{ - Filter.call(this, text); - this.reason = reason; -} -extend(InvalidFilter, Filter, { - reason: null -}); - -function CommentFilter(text) -{ - Filter.call(this, text); -} -extend(CommentFilter, Filter, { -}); - -function ActiveFilter(text, domains) -{ - Filter.call(this, text); - this.domainSource = domains; -} -extend(ActiveFilter, Filter, { - domainSource: null, - domainSeparator: null, - ignoreTrailingDot: true, - domainSourceIsUpperCase: false, - getDomains: function() - { - var prop = getOwnPropertyDescriptor(this, "domains"); - if (prop) - { - return prop; - } - var domains = null; - if (this.domainSource) - { - var source = this.domainSource; - if (!this.domainSourceIsUpperCase) - { - source = source.toUpperCase(); - } - var list = source.split(this.domainSeparator); - if (list.length == 1 && (list[0]).charAt(0) != "~") - { - domains = createDict(); - domains[""] = false; - if (this.ignoreTrailingDot) - { - list[0] = list[0].replace(/\.+$/, ""); - } - domains[list[0]] = true; - } - else - { - var hasIncludes = false; - for (var i = 0; i < list.length; i++) - { - var domain = list[i]; - if (this.ignoreTrailingDot) - { - domain = domain.replace(/\.+$/, ""); - } - if (domain == "") - { - continue; - } - var include; - if (domain.charAt(0) == "~") - { - include = false; - domain = domain.substr(1); - } - else - { - include = true; - hasIncludes = true; - } - if (!domains) - { - domains = createDict(); - } - domains[domain] = include; - } - domains[""] = !hasIncludes; - } - this.domainSource = null; - } - return this.domains; - }, - sitekeys: null, - isActiveOnDomain: function(docDomain, sitekey) - { - if (this.getSitekeys() && (!sitekey || this.getSitekeys().indexOf(sitekey.toUpperCase()) < 0)) - { - return false; - } - if (!this.getDomains()) - { - return true; - } - if (!docDomain) - { - return this.getDomains()[""]; - } - if (this.ignoreTrailingDot) - { - docDomain = docDomain.replace(/\.+$/, ""); - } - docDomain = docDomain.toUpperCase(); - while (true) - { - if (docDomain in this.getDomains()) - { - return this.domains[docDomain]; - } - var nextDot = docDomain.indexOf("."); - if (nextDot < 0) - { - break; - } - docDomain = docDomain.substr(nextDot + 1); - } - return this.domains[""]; - }, - isActiveOnlyOnDomain: function(docDomain) - { - if (!docDomain || !this.getDomains() || this.getDomains()[""]) - { - return false; - } - if (this.ignoreTrailingDot) - { - docDomain = docDomain.replace(/\.+$/, ""); - } - docDomain = docDomain.toUpperCase(); - for (var domain in this.getDomains()) - { - if (this.domains[domain] && domain != docDomain && (domain.length <= docDomain.length || domain.indexOf("." + docDomain) != domain.length - docDomain.length - 1)) - { - return false; - } - } - return true; - } -}); - -function RegExpFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys) -{ - ActiveFilter.call(this, text, domains, sitekeys); - if (contentType != null) - { - this.contentType = contentType; - } - if (matchCase) - { - this.matchCase = matchCase; - } - if (thirdParty != null) - { - this.thirdParty = thirdParty; - } - if (sitekeys != null) - { - this.sitekeySource = sitekeys; - } - if (regexpSource.length >= 2 && regexpSource.charAt(0) == "/" && regexpSource.charAt(regexpSource.length - 1) == "/") - { - var regexp = new RegExp(regexpSource.substr(1, regexpSource.length - 2), this.matchCase ? "" : "i"); - this.regexp = regexp; - } - else - { - this.regexpSource = regexpSource; - } -} -extend(RegExpFilter, ActiveFilter, { - domainSourceIsUpperCase: true, - length: 1, - domainSeparator: "|", - regexpSource: null, - getRegexp: function() - { - var prop = getOwnPropertyDescriptor(this, "regexp"); - if (prop) - { - return prop; - } - var source = this.regexpSource.replace(/\*+/g, "*").replace(/\^\|$/, "^").replace(/\W/g, "\\$&").replace(/\\\*/g, ".*").replace(/\\\^/g, "(?:[\\x00-\\x24\\x26-\\x2C\\x2F\\x3A-\\x40\\x5B-\\x5E\\x60\\x7B-\\x7F]|$)").replace(/^\\\|\\\|/, "^[\\w\\-]+:\\/+(?!\\/)(?:[^\\/]+\\.)?").replace(/^\\\|/, "^").replace(/\\\|$/, "$").replace(/^(\.\*)/, "").replace(/(\.\*)$/, ""); - var regexp = new RegExp(source, this.matchCase ? "" : "i"); - this.regexp = regexp; - return regexp; - }, - contentType: 2147483647, - matchCase: false, - thirdParty: null, - sitekeySource: null, - getSitekeys: function() - { - var prop = getOwnPropertyDescriptor(this, "sitekeys"); - if (prop) - { - return prop; - } - var sitekeys = null; - if (this.sitekeySource) - { - sitekeys = this.sitekeySource.split("|"); - this.sitekeySource = null; - } - this.sitekeys = sitekeys; - return this.sitekeys; - }, - matches: function(location, contentType, docDomain, thirdParty, sitekey) - { - if (this.getRegexp().test(location) && this.isActiveOnDomain(docDomain, sitekey)) - { - return true; - } - return false; - } -}); -RegExpFilter.prototype["0"] = "#this"; -RegExpFilter.fromText = function(text) -{ - var blocking = true; - var origText = text; - if (text.indexOf("@@") == 0) - { - blocking = false; - text = text.substr(2); - } - var contentType = null; - var matchCase = null; - var domains = null; - var sitekeys = null; - var thirdParty = null; - var collapse = null; - var options; - var match = text.indexOf("$") >= 0 ? Filter.optionsRegExp.exec(text) : null; - if (match) - { - options = match[1].toUpperCase().split(","); - text = match.input.substr(0, match.index); - for (var _loopIndex6 = 0; _loopIndex6 < options.length; ++_loopIndex6) - { - var option = options[_loopIndex6]; - var value = null; - var separatorIndex = option.indexOf("="); - if (separatorIndex >= 0) - { - value = option.substr(separatorIndex + 1); - option = option.substr(0, separatorIndex); - } - option = option.replace(/-/, "_"); - if (option in RegExpFilter.typeMap) - { - if (contentType == null) - { - contentType = 0; - } - contentType |= RegExpFilter.typeMap[option]; - } - else if (option.charAt(0) == "~" && option.substr(1) in RegExpFilter.typeMap) - { - if (contentType == null) - { - contentType = RegExpFilter.prototype.contentType; - } - contentType &= ~RegExpFilter.typeMap[option.substr(1)]; - } - else if (option == "MATCH_CASE") - { - matchCase = true; - } - else if (option == "~MATCH_CASE") - { - matchCase = false; - } - else if (option == "DOMAIN" && typeof value != "undefined") - { - domains = value; - } - else if (option == "THIRD_PARTY") - { - thirdParty = true; - } - else if (option == "~THIRD_PARTY") - { - thirdParty = false; - } - else if (option == "COLLAPSE") - { - collapse = true; - } - else if (option == "~COLLAPSE") - { - collapse = false; - } - else if (option == "SITEKEY" && typeof value != "undefined") - { - sitekeys = value; - } - else - { - return new InvalidFilter(origText, "Unknown option " + option.toLowerCase()); - } - } - } - if (!blocking && (contentType == null || contentType & RegExpFilter.typeMap.DOCUMENT) && (!options || options.indexOf("DOCUMENT") < 0) && !/^\|?[\w\-]+:/.test(text)) - { - if (contentType == null) - { - contentType = RegExpFilter.prototype.contentType; - } - contentType &= ~RegExpFilter.typeMap.DOCUMENT; - } - try - { - if (blocking) - { - return new BlockingFilter(origText, text, contentType, matchCase, domains, thirdParty, sitekeys, collapse); - } - else - { - return new WhitelistFilter(origText, text, contentType, matchCase, domains, thirdParty, sitekeys); - } - } - catch (e) - { - return new InvalidFilter(origText, e); - } -}; -RegExpFilter.typeMap = { - OTHER: 1, - SCRIPT: 2, - IMAGE: 4, - STYLESHEET: 8, - OBJECT: 16, - SUBDOCUMENT: 32, - DOCUMENT: 64, - XBL: 1, - PING: 1, - XMLHTTPREQUEST: 2048, - OBJECT_SUBREQUEST: 4096, - DTD: 1, - MEDIA: 16384, - FONT: 32768, - BACKGROUND: 4, - POPUP: 268435456, - ELEMHIDE: 1073741824 -}; -RegExpFilter.prototype.contentType &= ~ (RegExpFilter.typeMap.ELEMHIDE | RegExpFilter.typeMap.POPUP); - -function BlockingFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys, collapse) -{ - RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys); - this.collapse = collapse; -} -extend(BlockingFilter, RegExpFilter, { - collapse: null -}); - -function WhitelistFilter(text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys) -{ - RegExpFilter.call(this, text, regexpSource, contentType, matchCase, domains, thirdParty, sitekeys); -} -extend(WhitelistFilter, RegExpFilter, { -}); - -function Matcher() -{ - this.clear(); -} -Matcher.prototype = { - filterByKeyword: null, - keywordByFilter: null, - clear: function() - { - this.filterByKeyword = createDict(); - this.keywordByFilter = createDict(); - }, - add: function(filter) - { - if (filter.text in this.keywordByFilter) - { - return; - } - var keyword = this.findKeyword(filter); - var oldEntry = this.filterByKeyword[keyword]; - if (typeof oldEntry == "undefined") - { - this.filterByKeyword[keyword] = filter; - } - else if (oldEntry.length == 1) - { - this.filterByKeyword[keyword] = [oldEntry, filter]; - } - else - { - oldEntry.push(filter); - } - this.keywordByFilter[filter.text] = keyword; - }, - remove: function(filter) - { - if (!(filter.text in this.keywordByFilter)) - { - return; - } - var keyword = this.keywordByFilter[filter.text]; - var list = this.filterByKeyword[keyword]; - if (list.length <= 1) - { - delete this.filterByKeyword[keyword]; - } - else - { - var index = list.indexOf(filter); - if (index >= 0) - { - list.splice(index, 1); - if (list.length == 1) - { - this.filterByKeyword[keyword] = list[0]; - } - } - } - delete this.keywordByFilter[filter.text]; - }, - findKeyword: function(filter) - { - var result = ""; - var text = filter.text; - if (Filter.regexpRegExp.test(text)) - { - return result; - } - var match = Filter.optionsRegExp.exec(text); - if (match) - { - text = match.input.substr(0, match.index); - } - if (text.substr(0, 2) == "@@") - { - text = text.substr(2); - } - var candidates = text.toLowerCase().match(/[^a-z0-9%*][a-z0-9%]{3,}(?=[^a-z0-9%*])/g); - if (!candidates) - { - return result; - } - var hash = this.filterByKeyword; - var resultCount = 16777215; - var resultLength = 0; - for (var i = 0, l = candidates.length; i < l; i++) - { - var candidate = candidates[i].substr(1); - var count = candidate in hash ? hash[candidate].length : 0; - if (count < resultCount || count == resultCount && candidate.length > resultLength) - { - result = candidate; - resultCount = count; - resultLength = candidate.length; - } - } - return result; - }, - hasFilter: function(filter) - { - return filter.text in this.keywordByFilter; - }, - getKeywordForFilter: function(filter) - { - if (filter.text in this.keywordByFilter) - { - return this.keywordByFilter[filter.text]; - } - else - { - return null; - } - }, - _checkEntryMatch: function(keyword, location, contentType, docDomain, thirdParty, sitekey) - { - var list = this.filterByKeyword[keyword]; - for (var i = 0; i < list.length; i++) - { - var filter = list[i]; - if (filter == "#this") - { - filter = list; - } - if (filter.matches(location, contentType, docDomain, thirdParty, sitekey)) - { - return filter; - } - } - return null; - }, - matchesAny: function(location, contentType, docDomain, thirdParty, sitekey) - { - var candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); - if (candidates === null) - { - candidates = []; - } - candidates.push(""); - for (var i = 0, l = candidates.length; i < l; i++) - { - var substr = candidates[i]; - if (substr in this.filterByKeyword) - { - var result = this._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); - if (result) - { - return result; - } - } - } - return null; - } -}; - -function CombinedMatcher() -{ - this.blacklist = new Matcher(); - this.whitelist = new Matcher(); - this.resultCache = createDict(); -} -CombinedMatcher.maxCacheEntries = 1000; -CombinedMatcher.prototype = { - blacklist: null, - whitelist: null, - resultCache: null, - cacheEntries: 0, - clear: function() - { - this.blacklist.clear(); - this.whitelist.clear(); - this.resultCache = createDict(); - this.cacheEntries = 0; - }, - add: function(filter) - { - if (filter instanceof WhitelistFilter) - { - this.whitelist.add(filter); - } - else - { - this.blacklist.add(filter); - } - if (this.cacheEntries > 0) - { - this.resultCache = createDict(); - this.cacheEntries = 0; - } - }, - remove: function(filter) - { - if (filter instanceof WhitelistFilter) - { - this.whitelist.remove(filter); - } - else - { - this.blacklist.remove(filter); - } - if (this.cacheEntries > 0) - { - this.resultCache = createDict(); - this.cacheEntries = 0; - } - }, - findKeyword: function(filter) - { - if (filter instanceof WhitelistFilter) - { - return this.whitelist.findKeyword(filter); - } - else - { - return this.blacklist.findKeyword(filter); - } - }, - hasFilter: function(filter) - { - if (filter instanceof WhitelistFilter) - { - return this.whitelist.hasFilter(filter); - } - else - { - return this.blacklist.hasFilter(filter); - } - }, - getKeywordForFilter: function(filter) - { - if (filter instanceof WhitelistFilter) - { - return this.whitelist.getKeywordForFilter(filter); - } - else - { - return this.blacklist.getKeywordForFilter(filter); - } - }, - isSlowFilter: function(filter) - { - var matcher = filter instanceof WhitelistFilter ? this.whitelist : this.blacklist; - if (matcher.hasFilter(filter)) - { - return !matcher.getKeywordForFilter(filter); - } - else - { - return !matcher.findKeyword(filter); - } - }, - matchesAnyInternal: function(location, contentType, docDomain, thirdParty, sitekey) - { - var candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); - if (candidates === null) - { - candidates = []; - } - candidates.push(""); - var blacklistHit = null; - for (var i = 0, l = candidates.length; i < l; i++) - { - var substr = candidates[i]; - if (substr in this.whitelist.filterByKeyword) - { - var result = this.whitelist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); - if (result) - { - return result; - } - } - if (substr in this.blacklist.filterByKeyword && blacklistHit === null) - { - blacklistHit = this.blacklist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, sitekey); - } - } - return blacklistHit; - }, - matchesAny: function(location, docDomain) - { - var key = location + " " + docDomain + " "; - if (key in this.resultCache) - { - return this.resultCache[key]; - } - var result = this.matchesAnyInternal(location, 0, docDomain, null, null); - if (this.cacheEntries >= CombinedMatcher.maxCacheEntries) - { - this.resultCache = createDict(); - this.cacheEntries = 0; - } - this.resultCache[key] = result; - this.cacheEntries++; - return result; - } -}; -var defaultMatcher = new CombinedMatcher(); - -var direct = 'DIRECT;'; - -for (var i = 0; i < rules.length; i++) { - defaultMatcher.add(Filter.fromText(rules[i])); -} - -function FindProxyForURL(url, host) { - if (defaultMatcher.matchesAny(url, host) instanceof BlockingFilter) { - return proxy; - } - return direct; -} diff --git a/v2rayN/Resources/pac.txt.gz b/v2rayN/Resources/pac.txt.gz deleted file mode 100644 index 7f621cb..0000000 Binary files a/v2rayN/Resources/pac.txt.gz and /dev/null differ diff --git a/v2rayN/Resources/privoxy.exe.gz b/v2rayN/Resources/privoxy.exe.gz deleted file mode 100644 index bf58503..0000000 Binary files a/v2rayN/Resources/privoxy.exe.gz and /dev/null differ diff --git a/v2rayN/Resources/privoxy_conf.txt b/v2rayN/Resources/privoxy_conf.txt deleted file mode 100644 index 6a265b2..0000000 --- a/v2rayN/Resources/privoxy_conf.txt +++ /dev/null @@ -1,8 +0,0 @@ -listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ -toggle 0 -logfile v2ray_privoxy.log -show-on-task-bar 0 -activity-animation 0 -forward-socks5 / 127.0.0.1:__SOCKS_PORT__ . -max-client-connections 2048 -hide-console diff --git a/v2rayN/Resources/promotion.png b/v2rayN/Resources/promotion.png deleted file mode 100644 index e7b6251..0000000 Binary files a/v2rayN/Resources/promotion.png and /dev/null differ diff --git a/v2rayN/Resources/restart.png b/v2rayN/Resources/restart.png deleted file mode 100644 index 1c0e0ca..0000000 Binary files a/v2rayN/Resources/restart.png and /dev/null differ diff --git a/v2rayN/Resources/server.png b/v2rayN/Resources/server.png deleted file mode 100644 index ee3b697..0000000 Binary files a/v2rayN/Resources/server.png and /dev/null differ diff --git a/v2rayN/Resources/share.png b/v2rayN/Resources/share.png deleted file mode 100644 index df5e239..0000000 Binary files a/v2rayN/Resources/share.png and /dev/null differ diff --git a/v2rayN/Resources/sub.png b/v2rayN/Resources/sub.png deleted file mode 100644 index c60b5b3..0000000 Binary files a/v2rayN/Resources/sub.png and /dev/null differ diff --git a/v2rayN/Resources/sysproxy.exe.gz b/v2rayN/Resources/sysproxy.exe.gz deleted file mode 100644 index 980d304..0000000 Binary files a/v2rayN/Resources/sysproxy.exe.gz and /dev/null differ diff --git a/v2rayN/Resources/sysproxy64.exe.gz b/v2rayN/Resources/sysproxy64.exe.gz deleted file mode 100644 index c5ff36a..0000000 Binary files a/v2rayN/Resources/sysproxy64.exe.gz and /dev/null differ diff --git a/v2rayN/Resources/v2rayN.ico b/v2rayN/Resources/v2rayN.ico deleted file mode 100644 index 2a2f85a..0000000 Binary files a/v2rayN/Resources/v2rayN.ico and /dev/null differ diff --git a/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/Resx/ResUI.Designer.cs deleted file mode 100644 index 208ed11..0000000 --- a/v2rayN/Resx/ResUI.Designer.cs +++ /dev/null @@ -1,847 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -namespace v2rayN.Resx { - using System; - - - /// - /// 一个强类型的资源类,用于查找本地化的字符串等。 - /// - // 此类是由 StronglyTypedResourceBuilder - // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 - // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen - // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class ResUI { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal ResUI() { - } - - /// - /// 返回此类使用的缓存的 ResourceManager 实例。 - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("v2rayN.Resx.ResUI", typeof(ResUI).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// 重写当前线程的 CurrentUICulture 属性,对 - /// 使用此强类型资源类的所有资源查找执行重写。 - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// 查找类似 批次匯出節點訂閱內容至剪貼簿已完成 的本地化字符串。 - /// - internal static string BatchExportSubscriptionSuccessfully { - get { - return ResourceManager.GetString("BatchExportSubscriptionSuccessfully", resourceCulture); - } - } - - /// - /// 查找类似 批次匯出所選節點 URL 至剪貼簿已完成 的本地化字符串。 - /// - internal static string BatchExportURLSuccessfully { - get { - return ResourceManager.GetString("BatchExportURLSuccessfully", resourceCulture); - } - } - - /// - /// 查找类似 請先檢查伺服器設定 的本地化字符串。 - /// - internal static string CheckServerSettings { - get { - return ResourceManager.GetString("CheckServerSettings", resourceCulture); - } - } - - /// - /// 查找类似 設定檔格式有誤 的本地化字符串。 - /// - internal static string ConfigurationFormatIncorrect { - get { - return ResourceManager.GetString("ConfigurationFormatIncorrect", resourceCulture); - } - } - - /// - /// 查找类似 注意:自定義節點設定檔完全依賴您自己的設定,不一定適用本軟體所有功能 的本地化字符串。 - /// - internal static string CustomServerTips { - get { - return ResourceManager.GetString("CustomServerTips", resourceCulture); - } - } - - /// - /// 查找类似 正在下載... 的本地化字符串。 - /// - internal static string Downloading { - get { - return ResourceManager.GetString("Downloading", resourceCulture); - } - } - - /// - /// 查找类似 下載速度 的本地化字符串。 - /// - internal static string downloadSpeed { - get { - return ResourceManager.GetString("downloadSpeed", resourceCulture); - } - } - - /// - /// 查找类似 更新需要下載部分檔案,您確認要下載嗎?{0} 的本地化字符串。 - /// - internal static string DownloadYesNo { - get { - return ResourceManager.GetString("DownloadYesNo", resourceCulture); - } - } - - /// - /// 查找类似 節點設定檔轉換失敗 的本地化字符串。 - /// - internal static string FailedConversionConfiguration { - get { - return ResourceManager.GetString("FailedConversionConfiguration", resourceCulture); - } - } - - /// - /// 查找类似 預設節點設定檔創建失敗 的本地化字符串。 - /// - internal static string FailedGenDefaultConfiguration { - get { - return ResourceManager.GetString("FailedGenDefaultConfiguration", resourceCulture); - } - } - - /// - /// 查找类似 預設節點設定檔獲取失敗 的本地化字符串。 - /// - internal static string FailedGetDefaultConfiguration { - get { - return ResourceManager.GetString("FailedGetDefaultConfiguration", resourceCulture); - } - } - - /// - /// 查找类似 自定義節點設定檔匯入失敗 的本地化字符串。 - /// - internal static string FailedImportedCustomServer { - get { - return ResourceManager.GetString("FailedImportedCustomServer", resourceCulture); - } - } - - /// - /// 查找类似 設定檔讀取失敗 的本地化字符串。 - /// - internal static string FailedReadConfiguration { - get { - return ResourceManager.GetString("FailedReadConfiguration", resourceCulture); - } - } - - /// - /// 查找类似 請按正確格式填寫額外 ID (AlterId) 的本地化字符串。 - /// - internal static string FillCorrectAlterId { - get { - return ResourceManager.GetString("FillCorrectAlterId", resourceCulture); - } - } - - /// - /// 查找类似 請按正確格式填寫伺服器端口 的本地化字符串。 - /// - internal static string FillCorrectServerPort { - get { - return ResourceManager.GetString("FillCorrectServerPort", resourceCulture); - } - } - - /// - /// 查找类似 請正確填寫 KCP 參數 的本地化字符串。 - /// - internal static string FillKcpParameters { - get { - return ResourceManager.GetString("FillKcpParameters", resourceCulture); - } - } - - /// - /// 查找类似 請填寫本地監聽端口 的本地化字符串。 - /// - internal static string FillLocalListeningPort { - get { - return ResourceManager.GetString("FillLocalListeningPort", resourceCulture); - } - } - - /// - /// 查找类似 請填寫密碼 的本地化字符串。 - /// - internal static string FillPassword { - get { - return ResourceManager.GetString("FillPassword", resourceCulture); - } - } - - /// - /// 查找类似 請填寫伺服器地址 的本地化字符串。 - /// - internal static string FillServerAddress { - get { - return ResourceManager.GetString("FillServerAddress", resourceCulture); - } - } - - /// - /// 查找类似 請正確填寫用戶 ID (UUID) 的本地化字符串。 - /// - internal static string FillUUID { - get { - return ResourceManager.GetString("FillUUID", resourceCulture); - } - } - - /// - /// 查找类似 這不是正確的客戶端設定檔,請確認 的本地化字符串。 - /// - internal static string IncorrectClientConfiguration { - get { - return ResourceManager.GetString("IncorrectClientConfiguration", resourceCulture); - } - } - - /// - /// 查找类似 這不是正確的設定檔,請確認 的本地化字符串。 - /// - internal static string Incorrectconfiguration { - get { - return ResourceManager.GetString("Incorrectconfiguration", resourceCulture); - } - } - - /// - /// 查找类似 這不是正確的服務端設定檔,請確認 的本地化字符串。 - /// - internal static string IncorrectServerConfiguration { - get { - return ResourceManager.GetString("IncorrectServerConfiguration", resourceCulture); - } - } - - /// - /// 查找类似 初始化設定 的本地化字符串。 - /// - internal static string InitialConfiguration { - get { - return ResourceManager.GetString("InitialConfiguration", resourceCulture); - } - } - - /// - /// 查找类似 {0} 已是最新版本。 的本地化字符串。 - /// - internal static string IsLatestCore { - get { - return ResourceManager.GetString("IsLatestCore", resourceCulture); - } - } - - /// - /// 查找类似 {0} 已是最新版本。 的本地化字符串。 - /// - internal static string IsLatestN { - get { - return ResourceManager.GetString("IsLatestN", resourceCulture); - } - } - - /// - /// 查找类似 節點地址 的本地化字符串。 - /// - internal static string LvAddress { - get { - return ResourceManager.GetString("LvAddress", resourceCulture); - } - } - - /// - /// 查找类似 節點名稱 的本地化字符串。 - /// - internal static string LvAlias { - get { - return ResourceManager.GetString("LvAlias", resourceCulture); - } - } - - /// - /// 查找类似 加密方式 的本地化字符串。 - /// - internal static string LvEncryptionMethod { - get { - return ResourceManager.GetString("LvEncryptionMethod", resourceCulture); - } - } - - /// - /// 查找类似 端口 的本地化字符串。 - /// - internal static string LvPort { - get { - return ResourceManager.GetString("LvPort", resourceCulture); - } - } - - /// - /// 查找类似 代理類型 的本地化字符串。 - /// - internal static string LvServiceType { - get { - return ResourceManager.GetString("LvServiceType", resourceCulture); - } - } - - /// - /// 查找类似 訂閱組 的本地化字符串。 - /// - internal static string LvSubscription { - get { - return ResourceManager.GetString("LvSubscription", resourceCulture); - } - } - - /// - /// 查找类似 測速結果 的本地化字符串。 - /// - internal static string LvTestResults { - get { - return ResourceManager.GetString("LvTestResults", resourceCulture); - } - } - - /// - /// 查找类似 今日下載 的本地化字符串。 - /// - internal static string LvTodayDownloadDataAmount { - get { - return ResourceManager.GetString("LvTodayDownloadDataAmount", resourceCulture); - } - } - - /// - /// 查找类似 今日上傳 的本地化字符串。 - /// - internal static string LvTodayUploadDataAmount { - get { - return ResourceManager.GetString("LvTodayUploadDataAmount", resourceCulture); - } - } - - /// - /// 查找类似 總下載 的本地化字符串。 - /// - internal static string LvTotalDownloadDataAmount { - get { - return ResourceManager.GetString("LvTotalDownloadDataAmount", resourceCulture); - } - } - - /// - /// 查找类似 總上傳 的本地化字符串。 - /// - internal static string LvTotalUploadDataAmount { - get { - return ResourceManager.GetString("LvTotalUploadDataAmount", resourceCulture); - } - } - - /// - /// 查找类似 傳輸協議 的本地化字符串。 - /// - internal static string LvTransportProtocol { - get { - return ResourceManager.GetString("LvTransportProtocol", resourceCulture); - } - } - - /// - /// 查找类似 中等 的本地化字符串。 - /// - internal static string MediumFresh { - get { - return ResourceManager.GetString("MediumFresh", resourceCulture); - } - } - - /// - /// 查找类似 刪除原節點訂閱內容 的本地化字符串。 - /// - internal static string MsgClearSubscription { - get { - return ResourceManager.GetString("MsgClearSubscription", resourceCulture); - } - } - - /// - /// 查找类似 V2ray 核心下載成功 的本地化字符串。 - /// - internal static string MsgDownloadV2rayCoreSuccessfully { - get { - return ResourceManager.GetString("MsgDownloadV2rayCoreSuccessfully", resourceCulture); - } - } - - /// - /// 查找类似 節點訂閱內容匯入失敗 的本地化字符串。 - /// - internal static string MsgFailedImportSubscription { - get { - return ResourceManager.GetString("MsgFailedImportSubscription", resourceCulture); - } - } - - /// - /// 查找类似 節點訂閱內容獲取成功 的本地化字符串。 - /// - internal static string MsgGetSubscriptionSuccessfully { - get { - return ResourceManager.GetString("MsgGetSubscriptionSuccessfully", resourceCulture); - } - } - - /// - /// 查找类似 無有效的節點訂閱設定 的本地化字符串。 - /// - internal static string MsgNoValidSubscription { - get { - return ResourceManager.GetString("MsgNoValidSubscription", resourceCulture); - } - } - - /// - /// 查找类似 PAC 更新失敗 的本地化字符串。 - /// - internal static string MsgPACUpdateFailed { - get { - return ResourceManager.GetString("MsgPACUpdateFailed", resourceCulture); - } - } - - /// - /// 查找类似 PAC 更新成功 的本地化字符串。 - /// - internal static string MsgPACUpdateSuccessfully { - get { - return ResourceManager.GetString("MsgPACUpdateSuccessfully", resourceCulture); - } - } - - /// - /// 查找类似 {0} 解析成功 的本地化字符串。 - /// - internal static string MsgParsingSuccessfully { - get { - return ResourceManager.GetString("MsgParsingSuccessfully", resourceCulture); - } - } - - /// - /// 查找类似 V2ray 核心解析成功 的本地化字符串。 - /// - internal static string MsgParsingV2rayCoreSuccessfully { - get { - return ResourceManager.GetString("MsgParsingV2rayCoreSuccessfully", resourceCulture); - } - } - - /// - /// 查找类似 PAC 簡化成功 的本地化字符串。 - /// - internal static string MsgSimplifyPAC { - get { - return ResourceManager.GetString("MsgSimplifyPAC", resourceCulture); - } - } - - /// - /// 查找类似 PAC 簡化成功 的本地化字符串。 - /// - internal static string MsgSimplifyPAC1 { - get { - return ResourceManager.GetString("MsgSimplifyPAC1", resourceCulture); - } - } - - /// - /// 查找类似 正在獲取節點訂閱內容 的本地化字符串。 - /// - internal static string MsgStartGettingSubscriptions { - get { - return ResourceManager.GetString("MsgStartGettingSubscriptions", resourceCulture); - } - } - - /// - /// 查找类似 正在獲取節點訂閱內容 的本地化字符串。 - /// - internal static string MsgStartGettingSubscriptions1 { - get { - return ResourceManager.GetString("MsgStartGettingSubscriptions1", resourceCulture); - } - } - - /// - /// 查找类似 開始更新 {0}... 的本地化字符串。 - /// - internal static string MsgStartUpdating { - get { - return ResourceManager.GetString("MsgStartUpdating", resourceCulture); - } - } - - /// - /// 查找类似 開始更新 PAC... 的本地化字符串。 - /// - internal static string MsgStartUpdatingPAC { - get { - return ResourceManager.GetString("MsgStartUpdatingPAC", resourceCulture); - } - } - - /// - /// 查找类似 開始更新 PAC... 的本地化字符串。 - /// - internal static string MsgStartUpdatingPAC1 { - get { - return ResourceManager.GetString("MsgStartUpdatingPAC1", resourceCulture); - } - } - - /// - /// 查找类似 開始更新 V2ray 核心... 的本地化字符串。 - /// - internal static string MsgStartUpdatingV2rayCore { - get { - return ResourceManager.GetString("MsgStartUpdatingV2rayCore", resourceCulture); - } - } - - /// - /// 查找类似 節點訂閱內容解碼失敗 (非 BASE64 編碼) 的本地化字符串。 - /// - internal static string MsgSubscriptionDecodingFailed { - get { - return ResourceManager.GetString("MsgSubscriptionDecodingFailed", resourceCulture); - } - } - - /// - /// 查找类似 正在解壓... 的本地化字符串。 - /// - internal static string MsgUnpacking { - get { - return ResourceManager.GetString("MsgUnpacking", resourceCulture); - } - } - - /// - /// 查找类似 結束更新節點訂閱 的本地化字符串。 - /// - internal static string MsgUpdateSubscriptionEnd { - get { - return ResourceManager.GetString("MsgUpdateSubscriptionEnd", resourceCulture); - } - } - - /// - /// 查找类似 開始更新節點訂閱 的本地化字符串。 - /// - internal static string MsgUpdateSubscriptionStart { - get { - return ResourceManager.GetString("MsgUpdateSubscriptionStart", resourceCulture); - } - } - - /// - /// 查找类似 V2ray 核心更新成功 的本地化字符串。 - /// - internal static string MsgUpdateV2rayCoreSuccessfully { - get { - return ResourceManager.GetString("MsgUpdateV2rayCoreSuccessfully", resourceCulture); - } - } - - /// - /// 查找类似 V2ray 核心更新成功!正在重啟服務... 的本地化字符串。 - /// - internal static string MsgUpdateV2rayCoreSuccessfullyMore { - get { - return ResourceManager.GetString("MsgUpdateV2rayCoreSuccessfullyMore", resourceCulture); - } - } - - /// - /// 查找类似 此功能依賴全局代理,請先調整您的路由模式 的本地化字符串。 - /// - internal static string NeedHttpGlobalProxy { - get { - return ResourceManager.GetString("NeedHttpGlobalProxy", resourceCulture); - } - } - - /// - /// 查找类似 非 Vmess 或 SS 協議 的本地化字符串。 - /// - internal static string NonvmessOrssProtocol { - get { - return ResourceManager.GetString("NonvmessOrssProtocol", resourceCulture); - } - } - - /// - /// 查找类似 非 Vmess 協議,此功能無效 的本地化字符串。 - /// - internal static string NonVmessService { - get { - return ResourceManager.GetString("NonVmessService", resourceCulture); - } - } - - /// - /// 查找类似 未找到 V2ray-core,下載點: {0} 的本地化字符串。 - /// - internal static string NotFoundCore { - get { - return ResourceManager.GetString("NotFoundCore", resourceCulture); - } - } - - /// - /// 查找类似 掃描完成,未發現有效 QR 碼 的本地化字符串。 - /// - internal static string NoValidQRcodeFound { - get { - return ResourceManager.GetString("NoValidQRcodeFound", resourceCulture); - } - } - - /// - /// 查找类似 操作失敗,請重試 的本地化字符串。 - /// - internal static string OperationFailed { - get { - return ResourceManager.GetString("OperationFailed", resourceCulture); - } - } - - /// - /// 查找类似 請填寫自定義名稱 的本地化字符串。 - /// - internal static string PleaseFillRemarks { - get { - return ResourceManager.GetString("PleaseFillRemarks", resourceCulture); - } - } - - /// - /// 查找类似 請選擇加密方式 的本地化字符串。 - /// - internal static string PleaseSelectEncryption { - get { - return ResourceManager.GetString("PleaseSelectEncryption", resourceCulture); - } - } - - /// - /// 查找类似 請選擇協議 的本地化字符串。 - /// - internal static string PleaseSelectProtocol { - get { - return ResourceManager.GetString("PleaseSelectProtocol", resourceCulture); - } - } - - /// - /// 查找类似 請先選擇節點 的本地化字符串。 - /// - internal static string PleaseSelectServer { - get { - return ResourceManager.GetString("PleaseSelectServer", resourceCulture); - } - } - - /// - /// 查找类似 快 的本地化字符串。 - /// - internal static string QuickFresh { - get { - return ResourceManager.GetString("QuickFresh", resourceCulture); - } - } - - /// - /// 查找类似 已清理重複的節點。原有節點數量 {0},現有節點數量 {1}. 的本地化字符串。 - /// - internal static string RemoveDuplicateServerResult { - get { - return ResourceManager.GetString("RemoveDuplicateServerResult", resourceCulture); - } - } - - /// - /// 查找类似 您確認要刪除節點嗎? 的本地化字符串。 - /// - internal static string RemoveServer { - get { - return ResourceManager.GetString("RemoveServer", resourceCulture); - } - } - - /// - /// 查找类似 設定完成!請重啟應用程式以套用新的語言介面。 的本地化字符串。 - /// - internal static string RestartService { - get { - return ResourceManager.GetString("RestartService", resourceCulture); - } - } - - /// - /// 查找类似 客戶端設定檔已儲存至: {0} 的本地化字符串。 - /// - internal static string SaveClientConfigurationIn { - get { - return ResourceManager.GetString("SaveClientConfigurationIn", resourceCulture); - } - } - - /// - /// 查找类似 服務端設定檔已儲存至: {0} 的本地化字符串。 - /// - internal static string SaveServerConfigurationIn { - get { - return ResourceManager.GetString("SaveServerConfigurationIn", resourceCulture); - } - } - - /// - /// 查找类似 慢 的本地化字符串。 - /// - internal static string SlowFresh { - get { - return ResourceManager.GetString("SlowFresh", resourceCulture); - } - } - - /// - /// 查找类似 注意:此功能依賴全局代理,您可於測速完成後重新選擇其他路由模式 的本地化字符串。 - /// - internal static string SpeedServerTips { - get { - return ResourceManager.GetString("SpeedServerTips", resourceCulture); - } - } - - /// - /// 查找类似 PAC 服務啟動失敗,請用管理員身份啟動 的本地化字符串。 - /// - internal static string StartPacFailed { - get { - return ResourceManager.GetString("StartPacFailed", resourceCulture); - } - } - - /// - /// 查找类似 啟動服務 ({0})...... 的本地化字符串。 - /// - internal static string StartService { - get { - return ResourceManager.GetString("StartService", resourceCulture); - } - } - - /// - /// 查找类似 配置成功 - ///{0} 的本地化字符串。 - /// - internal static string SuccessfulConfiguration { - get { - return ResourceManager.GetString("SuccessfulConfiguration", resourceCulture); - } - } - - /// - /// 查找类似 自定義節點設定檔已匯入 的本地化字符串。 - /// - internal static string SuccessfullyImportedCustomServer { - get { - return ResourceManager.GetString("SuccessfullyImportedCustomServer", resourceCulture); - } - } - - /// - /// 查找类似 從剪貼簿批次匯入節點 URL 已完成 的本地化字符串。 - /// - internal static string SuccessfullyImportedServerViaClipboard { - get { - return ResourceManager.GetString("SuccessfullyImportedServerViaClipboard", resourceCulture); - } - } - - /// - /// 查找类似 掃描匯入節點 URL 已完成 的本地化字符串。 - /// - internal static string SuccessfullyImportedServerViaScan { - get { - return ResourceManager.GetString("SuccessfullyImportedServerViaScan", resourceCulture); - } - } - - /// - /// 查找类似 當前所選節點的真連接延遲:{0} 的本地化字符串。 - /// - internal static string TestMeOutput { - get { - return ResourceManager.GetString("TestMeOutput", resourceCulture); - } - } - } -} diff --git a/v2rayN/Resx/ResUI.resx b/v2rayN/Resx/ResUI.resx deleted file mode 100644 index 1aa9ed7..0000000 --- a/v2rayN/Resx/ResUI.resx +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 批次匯出節點訂閱內容至剪貼簿已完成 - - - 批次匯出所選節點 URL 至剪貼簿已完成 - - - 請先檢查伺服器設定 - - - 設定檔格式有誤 - - - 注意:自定義節點設定檔完全依賴您自己的設定,不一定適用本軟體所有功能 - - - 正在下載... - - - 下載速度 - - - 更新需要下載部分檔案,您確認要下載嗎?{0} - - - 節點設定檔轉換失敗 - - - 預設節點設定檔創建失敗 - - - 預設節點設定檔獲取失敗 - - - 自定義節點設定檔匯入失敗 - - - 設定檔讀取失敗 - - - 請按正確格式填寫額外 ID (AlterId) - - - 請按正確格式填寫伺服器端口 - - - 請正確填寫 KCP 參數 - - - 請填寫本地監聽端口 - - - 請填寫密碼 - - - 請填寫伺服器地址 - - - 請正確填寫用戶 ID (UUID) - - - 這不是正確的客戶端設定檔,請確認 - - - 這不是正確的設定檔,請確認 - - - 這不是正確的服務端設定檔,請確認 - - - 初始化設定 - - - {0} 已是最新版本。 - - - {0} 已是最新版本。 - - - 節點地址 - - - 節點名稱 - - - 加密方式 - - - 端口 - - - 代理類型 - - - 訂閱組 - - - 測速結果 - - - 今日下載 - - - 今日上傳 - - - 總下載 - - - 總上傳 - - - 傳輸協議 - - - 中等 - - - 刪除原節點訂閱內容 - - - V2ray 核心下載成功 - - - 節點訂閱內容匯入失敗 - - - 節點訂閱內容獲取成功 - - - 無有效的節點訂閱設定 - - - PAC 更新失敗 - - - PAC 更新成功 - - - {0} 解析成功 - - - V2ray 核心解析成功 - - - PAC 簡化成功 - - - PAC 簡化成功 - - - 正在獲取節點訂閱內容 - - - 正在獲取節點訂閱內容 - - - 開始更新 {0}... - - - 開始更新 PAC... - - - 開始更新 PAC... - - - 開始更新 V2ray 核心... - - - 節點訂閱內容解碼失敗 (非 BASE64 編碼) - - - 正在解壓... - - - 結束更新節點訂閱 - - - 開始更新節點訂閱 - - - V2ray 核心更新成功 - - - V2ray 核心更新成功!正在重啟服務... - - - 此功能依賴全局代理,請先調整您的路由模式 - - - 非 Vmess 或 SS 協議 - - - 非 Vmess 協議,此功能無效 - - - 未找到 V2ray-core,下載點: {0} - - - 掃描完成,未發現有效 QR 碼 - - - 操作失敗,請重試 - - - 請填寫自定義名稱 - - - 請選擇加密方式 - - - 請選擇協議 - - - 請先選擇節點 - - - - - - 已清理重複的節點。原有節點數量 {0},現有節點數量 {1}. - - - 您確認要刪除節點嗎? - - - 設定完成!請重啟應用程式以套用新的語言介面。 - - - 客戶端設定檔已儲存至: {0} - - - 服務端設定檔已儲存至: {0} - - - - - - 注意:此功能依賴全局代理,您可於測速完成後重新選擇其他路由模式 - - - PAC 服務啟動失敗,請用管理員身份啟動 - - - 啟動服務 ({0})...... - - - 配置成功 -{0} - - - 自定義節點設定檔已匯入 - - - 從剪貼簿批次匯入節點 URL 已完成 - - - 掃描匯入節點 URL 已完成 - - - 當前所選節點的真連接延遲:{0} - - \ No newline at end of file diff --git a/v2rayN/Resx/ResUI.zh-Hans.Designer.cs b/v2rayN/Resx/ResUI.zh-Hans.Designer.cs deleted file mode 100644 index e69de29..0000000 diff --git a/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/Resx/ResUI.zh-Hans.resx deleted file mode 100644 index a738565..0000000 --- a/v2rayN/Resx/ResUI.zh-Hans.resx +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 批量导出订阅内容至剪贴板成功 - - - 批量导出分享 URL 至剪贴板成功 - - - 请先检查服务器设置 - - - 配置格式不正确 - - - 注意:自定义配置完全依赖您自己的配置,不一定能通用所有设置功能 - - - 下载开始... - - - 下载速度 - - - 更新需要联机下载部分文件,您确认要下载吗? - - - 转换配置文件失败 - - - 生成默认配置文件失败 - - - 取得默认配置失败 - - - 导入自定义配置服务器失败 - - - 读取配置文件失败 - - - 请填写正确格式额外 ID - - - 请填写正确格式服务器端口 - - - 请正确填写 KCP 参数 - - - 请填写本地监听端口 - - - 请填写密码 - - - 请填写服务器地址 - - - 请填写用户 UUID - - - 不是正确的客户端配置文件,请检查 - - - 不是正确的配置,请检查 - - - 不是正确的服务端配置文件,请检查 - - - 初始化配置 - - - {0} 已是最新版本。 - - - {0} 已是最新版本。 - - - 节点地址 - - - 节点名称 - - - 加密方式 - - - 端口 - - - 代理类型 - - - 订阅组 - - - 测速结果 - - - 今日下载 - - - 今日上传 - - - 总下载 - - - 总上传 - - - 传输协议 - - - 中等 - - - 清除原订阅内容 - - - V2ray 核心已下载 - - - 导入订阅内容失败 - - - 获取订阅内容成功 - - - 未设置有效的订阅 - - - PAC 更新失败 - - - PAC 更新成功 - - - {0} 解析成功 - - - PAC 简化成功 - - - 开始获取订阅内容 - - - 开始更新 {0}... - - - 开始更新 PAC... - - - 订阅内容解码失败 (非 BASE64 码) - - - 正在解压...... - - - 更新订阅结束 - - - 更新订阅开始 - - - V2ray 核心更新成功 - - - V2ray 核心更新成功!正在重启服务... - - - 此功能依赖全局代理,请先设置正确 - - - 非 Vmess 或 SS 协议 - - - 非 Vmess 服务,此功能无效 - - - 找不到 V2ray 核心,下载地址: {0} - - - 扫描完成,未发现有效二维码 - - - 操作失败,请检查重试 - - - 请填写备注 - - - 请选择加密方式 - - - 请选择协议 - - - 请先选择服务器 - - - - - - 服务器去重完成。原数量: {0},现数量: {1} - - - 是否确定移除服务器? - - - 设置成功!新的界面语言将于重启程序后生效。 - - - 客户端配置文件保存在:{0} - - - 服务端配置文件保存在:{0} - - - - - - 注意:此功能依赖全局代理!测试完成后,请手工调整路由模式和活动节点 - - - PAC 服务启动失败,请用系统管理员身份启动 - - - 启动服务 ({0})... - - - 配置成功 -{0} - - - 成功导入自定义配置服务器 - - - 成功从剪贴板导入 {0} 个服务器 - - - 扫描导入 URL 成功 - - - 当前节点的真连接延迟:{0} - - \ No newline at end of file diff --git a/v2rayN/Resx/Resx.zip b/v2rayN/Resx/Resx.zip deleted file mode 100644 index 0cb38db..0000000 Binary files a/v2rayN/Resx/Resx.zip and /dev/null differ diff --git a/v2rayN/Sample/BlankPac.txt b/v2rayN/Sample/BlankPac.txt deleted file mode 100644 index 906a14c..0000000 --- a/v2rayN/Sample/BlankPac.txt +++ /dev/null @@ -1,5 +0,0 @@ -var proxy = "__PROXY__"; - -function FindProxyForURL(url, host) { - return proxy; -} \ No newline at end of file diff --git a/v2rayN/Sample/SampleHttprequest.txt b/v2rayN/Sample/SampleHttprequest.txt deleted file mode 100644 index 48a0be4..0000000 --- a/v2rayN/Sample/SampleHttprequest.txt +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.1","method":"GET","path":[$requestPath$],"headers":{"Host":[$requestHost$],"User-Agent":["Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36","Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46"],"Accept-Encoding":["gzip, deflate"],"Connection":["keep-alive"],"Pragma":"no-cache"}} \ No newline at end of file diff --git a/v2rayN/Sample/SampleServerConfig.txt b/v2rayN/Sample/SampleServerConfig.txt deleted file mode 100644 index bd773f4..0000000 --- a/v2rayN/Sample/SampleServerConfig.txt +++ /dev/null @@ -1,34 +0,0 @@ -{ - "log": { - "access": "/var/log/v2ray/access.log", - "error": "/var/log/v2ray/error.log", - "loglevel": "warning" - }, - "inbounds": [{ - "port": 10086, - "protocol": "vmess", - "settings": { - "clients": [{ - "id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297", - "level": 1, - "alterId": 64, - "email": "t@t.tt" - }] - }, - "streamSettings": { - "network": "tcp" - } - }], - "outbound": [{ - "protocol": "freedom", - "settings": {} - }, { - "protocol": "blackhole", - "settings": {}, - "tag": "block" - }], - "routing": { - "domainStrategy": "IPIfNonMatch", - "rules": [] - } -} \ No newline at end of file diff --git a/v2rayN/Sample/custom_routing_block b/v2rayN/Sample/custom_routing_block deleted file mode 100644 index 0cd55ac..0000000 --- a/v2rayN/Sample/custom_routing_block +++ /dev/null @@ -1 +0,0 @@ -geosite:category-ads-all, diff --git a/v2rayN/Sample/custom_routing_direct b/v2rayN/Sample/custom_routing_direct deleted file mode 100644 index 5408992..0000000 --- a/v2rayN/Sample/custom_routing_direct +++ /dev/null @@ -1,132 +0,0 @@ -domain:12306.com, -domain:51ym.me, -domain:52pojie.cn, -domain:8686c.com, -domain:abercrombie.com, -domain:adobesc.com, -domain:air-matters.com, -domain:air-matters.io, -domain:airtable.com, -domain:akadns.net, -domain:apache.org, -domain:api.crisp.chat, -domain:api.termius.com, -domain:appshike.com, -domain:appstore.com, -domain:aweme.snssdk.com, -domain:bababian.com, -domain:battle.net, -domain:beatsbydre.com, -domain:bet365.com, -domain:bilibili.cn, -domain:ccgslb.com, -domain:ccgslb.net, -domain:chunbo.com, -domain:chunboimg.com, -domain:clashroyaleapp.com, -domain:cloudsigma.com, -domain:cloudxns.net, -domain:cmfu.com, -domain:culturedcode.com, -domain:dct-cloud.com, -domain:didialift.com, -domain:douyutv.com, -domain:duokan.com, -domain:dytt8.net, -domain:easou.com, -domain:ecitic.net, -domain:eclipse.org, -domain:eudic.net, -domain:ewqcxz.com, -domain:fir.im, -domain:frdic.com, -domain:fresh-ideas.cc, -domain:godic.net, -domain:goodread.com, -domain:haibian.com, -domain:hdslb.net, -domain:hollisterco.com, -domain:hongxiu.com, -domain:hxcdn.net, -domain:images.unsplash.com, -domain:img4me.com, -domain:ipify.org, -domain:ixdzs.com, -domain:jd.hk, -domain:jianshuapi.com, -domain:jomodns.com, -domain:jsboxbbs.com, -domain:knewone.com, -domain:kuaidi100.com, -domain:lemicp.com, -domain:letvcloud.com, -domain:lizhi.io, -domain:localizecdn.com, -domain:lucifr.com, -domain:luoo.net, -domain:mai.tn, -domain:maven.org, -domain:miwifi.com, -domain:moji.com, -domain:moke.com, -domain:mtalk.google.com, -domain:mxhichina.com, -domain:myqcloud.com, -domain:myunlu.com, -domain:netease.com, -domain:nfoservers.com, -domain:nssurge.com, -domain:nuomi.com, -domain:ourdvs.com, -domain:overcast.fm, -domain:paypal.com, -domain:paypalobjects.com, -domain:pgyer.com, -domain:qdaily.com, -domain:qdmm.com, -domain:qin.io, -domain:qingmang.me, -domain:qingmang.mobi, -domain:qqurl.com, -domain:rarbg.to, -domain:rrmj.tv, -domain:ruguoapp.com, -domain:sm.ms, -domain:snwx.com, -domain:soku.com, -domain:startssl.com, -domain:store.steampowered.com, -domain:symcd.com, -domain:teamviewer.com, -domain:tmzvps.com, -domain:trello.com, -domain:trellocdn.com, -domain:ttmeiju.com, -domain:udache.com, -domain:uxengine.net, -domain:weather.bjango.com, -domain:weather.com, -domain:webqxs.com, -domain:weico.cc, -domain:wenku8.net, -domain:werewolf.53site.com, -domain:windowsupdate.com, -domain:wkcdn.com, -domain:workflowy.com, -domain:xdrig.com, -domain:xiaojukeji.com, -domain:xiaomi.net, -domain:xiaomicp.com, -domain:ximalaya.com, -domain:xitek.com, -domain:xmcdn.com, -domain:xslb.net, -domain:xteko.com, -domain:yach.me, -domain:yixia.com, -domain:yunjiasu-cdn.net, -domain:zealer.com, -domain:zgslb.net, -domain:zimuzu.tv, -domain:zmz002.com, -domain:samsungdm.com, \ No newline at end of file diff --git a/v2rayN/Sample/custom_routing_proxy b/v2rayN/Sample/custom_routing_proxy deleted file mode 100644 index d67a623..0000000 --- a/v2rayN/Sample/custom_routing_proxy +++ /dev/null @@ -1,33 +0,0 @@ -geosite:google, -geosite:github, -geosite:netflix, -geosite:steam, -geosite:telegram, -geosite:tumblr, -geosite:speedtest, -geosite:bbc, -domain:gvt1.com, -domain:textnow.com, -domain:twitch.tv, -domain:wikileaks.org, -domain:naver.com, -91.108.4.0/22, -91.108.8.0/22, -91.108.12.0/22, -91.108.20.0/22, -91.108.36.0/23, -91.108.38.0/23, -91.108.56.0/22, -149.154.160.0/20, -149.154.164.0/22, -149.154.172.0/22, -74.125.0.0/16, -173.194.0.0/16, -172.217.0.0/16, -216.58.200.0/24, -216.58.220.0/24, -91.108.56.116, -91.108.56.0/24, -109.239.140.0/24, -149.154.167.0/24, -149.154.175.0/24, \ No newline at end of file diff --git a/v2rayN/Tool/CDateTime.cs b/v2rayN/Tool/CDateTime.cs deleted file mode 100644 index fb7a2e2..0000000 --- a/v2rayN/Tool/CDateTime.cs +++ /dev/null @@ -1,156 +0,0 @@ -using System; -using System.Net; -using System.Runtime.InteropServices; -using System.Text; - -namespace v2rayN -{ - class CDateTime - { - /// - /// 设置本地系统时间 - /// - public static void SetLocalTime() - { - using (WebClient wc = new WebClient()) - { - string url = ""; - string result = string.Empty; - - try - { - wc.Encoding = Encoding.UTF8; - wc.DownloadStringCompleted += wc_DownloadStringCompleted; - wc.DownloadStringAsync(new Uri(url)); - } - catch - { - } - } - } - - static void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) - { - try - { - string result = e.Result; - if (Utils.IsNullOrEmpty(result)) - { - return; - } - EWebTime webTime = Utils.FromJson(result); - if (webTime != null - && webTime.result != null - && webTime.result.stime != null - && !Utils.IsNullOrEmpty(webTime.result.stime)) - { - DateTime dtWeb = GetTimeFromLinux(webTime.result.stime); - - SYSTEMTIME st = new SYSTEMTIME(); - st.FromDateTime(dtWeb); - - //调用Win32 API设置系统时间 - Win32API.SetLocalTime(ref st); - } - } - catch - { - } - } - - /// - /// 时间戳转为C#格式时间 - /// - /// - /// - private static DateTime GetTimeFromLinux(string timeStamp) - { - DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); - long lTime = long.Parse(timeStamp + "0000000"); - TimeSpan toNow = new TimeSpan(lTime); return dtStart.Add(toNow); - } - } - - /// - /// - /// - public struct SYSTEMTIME - { - public ushort wYear; - public ushort wMonth; - public ushort wDayOfWeek; - public ushort wDay; - public ushort wHour; - public ushort wMinute; - public ushort wSecond; - public ushort wMilliseconds; - - /// - /// 从System.DateTime转换。 - /// - /// System.DateTime类型的时间。 - public void FromDateTime(DateTime time) - { - wYear = (ushort)time.Year; - wMonth = (ushort)time.Month; - wDayOfWeek = (ushort)time.DayOfWeek; - wDay = (ushort)time.Day; - wHour = (ushort)time.Hour; - wMinute = (ushort)time.Minute; - wSecond = (ushort)time.Second; - wMilliseconds = (ushort)time.Millisecond; - } - - /// - /// 转换为System.DateTime类型。 - /// - /// - public DateTime ToDateTime() - { - return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, wMilliseconds); - } - - /// - /// 静态方法。转换为System.DateTime类型。 - /// - /// SYSTEMTIME类型的时间。 - /// - public static DateTime ToDateTime(SYSTEMTIME time) - { - return time.ToDateTime(); - } - } - - public class Win32API - { - [DllImport("Kernel32.dll")] - public static extern bool SetLocalTime(ref SYSTEMTIME Time); - [DllImport("Kernel32.dll")] - public static extern void GetLocalTime(ref SYSTEMTIME Time); - } - - public class WTResult - { - /// - /// - /// - public string stime { get; set; } - } - - public class EWebTime - { - /// - /// - /// - public WTResult result { get; set; } - /// - /// - /// - public int error_code { get; set; } - /// - /// - /// - public string reason { get; set; } - } -} - diff --git a/v2rayN/Tool/FileManager.cs b/v2rayN/Tool/FileManager.cs deleted file mode 100644 index bd5ebf9..0000000 --- a/v2rayN/Tool/FileManager.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using System.IO; -using System.IO.Compression; -using System.Text; - -namespace v2rayN.Tool -{ - public static class FileManager - { - public static bool ByteArrayToFile(string fileName, byte[] content) - { - try - { - using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) - fs.Write(content, 0, content.Length); - return true; - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - return false; - } - - public static void UncompressFile(string fileName, byte[] content) - { - try - { - // Because the uncompressed size of the file is unknown, - // we are using an arbitrary buffer size. - byte[] buffer = new byte[4096]; - int n; - - using (FileStream fs = File.Create(fileName)) - using (GZipStream input = new GZipStream(new MemoryStream(content), - CompressionMode.Decompress, false)) - { - while ((n = input.Read(buffer, 0, buffer.Length)) > 0) - { - fs.Write(buffer, 0, n); - } - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - - public static string NonExclusiveReadAllText(string path) - { - return NonExclusiveReadAllText(path, Encoding.Default); - } - - public static string NonExclusiveReadAllText(string path, Encoding encoding) - { - try - { - using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (StreamReader sr = new StreamReader(fs, encoding)) - { - return sr.ReadToEnd(); - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - throw ex; - } - } - public static bool ZipExtractToFile(string fileName) - { - try - { - using (ZipArchive archive = ZipFile.OpenRead(fileName)) - { - foreach (ZipArchiveEntry entry in archive.Entries) - { - if (entry.Length == 0) - { - continue; - } - try - { - entry.ExtractToFile(Utils.GetPath(entry.Name), true); - } - catch (IOException ex) - { - Utils.SaveLog(ex.Message, ex); - } - } - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - return false; - } - return true; - } - - public static bool ZipExtractToFullFile(string fileName) - { - try - { - using (ZipArchive archive = ZipFile.OpenRead(fileName)) - { - foreach (ZipArchiveEntry entry in archive.Entries) - { - if (entry.Length == 0) - continue; - - string entryOuputPath = Utils.GetPath(entry.FullName); - FileInfo fileInfo = new FileInfo(entryOuputPath); - fileInfo.Directory.Create(); - entry.ExtractToFile(entryOuputPath, true); - } - } - } - catch (Exception ex) - { - Utils.SaveLog(ex.Message, ex); - return false; - } - return true; - } - } -} diff --git a/v2rayN/Tool/UI.cs b/v2rayN/Tool/UI.cs deleted file mode 100644 index f2cabf7..0000000 --- a/v2rayN/Tool/UI.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Windows.Forms; - -namespace v2rayN -{ - class UI - { - public static void Show(string msg) - { - MessageBox.Show(msg, "v2rayN", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - public static void ShowWarning(string msg) - { - MessageBox.Show(msg, "v2rayN", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - public static void ShowError(string msg) - { - MessageBox.Show(msg, "v2rayN", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - public static DialogResult ShowYesNo(string msg) - { - return MessageBox.Show(msg, "v2rayN", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - } - - //public static string GetResourseString(string key) - //{ - // CultureInfo cultureInfo = null; - // try - // { - // string languageCode = this.LanguageCode; - // cultureInfo = new CultureInfo(languageCode); - // return Common.ResourceManager.GetString(key, cultureInfo); - // } - // catch (Exception) - // { - // //默认读取英文的多语言 - // cultureInfo = new CultureInfo(MKey.kDefaultLanguageCode); - // return Common.ResourceManager.GetString(key, cultureInfo); - // } - //} - - } - - -} diff --git a/v2rayN/Tool/UIRes.cs b/v2rayN/Tool/UIRes.cs deleted file mode 100644 index f066043..0000000 --- a/v2rayN/Tool/UIRes.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using System.Reflection; -using System.Resources; - -namespace v2rayN -{ - public class UIRes - { - static ResourceManager res = new ResourceManager("v2rayN.Resx.ResUI", Assembly.GetExecutingAssembly()); - - static string LoadString(ResourceManager resMgr, string key) - { - string value = resMgr.GetString(key); - if (value == null) - { - throw new KeyNotFoundException($"key: {key}"); - } - return value; - } - - public static string I18N(string key) - { - return LoadString(res, key); - } - } -} diff --git a/v2rayN/Tool/Utils.cs b/v2rayN/Tool/Utils.cs deleted file mode 100644 index 22c3797..0000000 --- a/v2rayN/Tool/Utils.cs +++ /dev/null @@ -1,920 +0,0 @@ -using Microsoft.Win32; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.IO.Compression; -using System.Net; -using System.Net.NetworkInformation; -using System.Net.Sockets; -using System.Reflection; -using System.Runtime.Serialization.Formatters.Binary; -using System.Text; -using System.Text.RegularExpressions; -using System.Windows.Forms; -using System.Drawing; -using ZXing; -using ZXing.Common; -using ZXing.QrCode; -using System.Security.Principal; -using v2rayN.Base; - -namespace v2rayN -{ - class Utils - { - - - #region 资源Json操作 - - /// - /// 获取嵌入文本资源 - /// - /// - /// - public static string GetEmbedText(string res) - { - string result = string.Empty; - - try - { - Assembly assembly = Assembly.GetExecutingAssembly(); - using (Stream stream = assembly.GetManifestResourceStream(res)) - using (StreamReader reader = new StreamReader(stream)) - { - result = reader.ReadToEnd(); - } - } - catch - { - } - return result; - } - - - /// - /// 取得存储资源 - /// - /// - public static string LoadResource(string res) - { - string result = string.Empty; - - try - { - using (StreamReader reader = new StreamReader(res)) - { - result = reader.ReadToEnd(); - } - } - catch - { - } - return result; - } - - /// - /// 反序列化成对象 - /// - /// - /// - /// - public static T FromJson(string strJson) - { - try - { - T obj = JsonConvert.DeserializeObject(strJson); - return obj; - } - catch - { - return JsonConvert.DeserializeObject(""); - } - } - - /// - /// 序列化成Json - /// - /// - /// - public static string ToJson(Object obj) - { - string result = string.Empty; - try - { - result = JsonConvert.SerializeObject(obj, - Formatting.Indented, - new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); - } - catch - { - } - return result; - } - - /// - /// 保存成json文件 - /// - /// - /// - /// - public static int ToJsonFile(Object obj, string filePath, bool nullValue = true) - { - int result; - try - { - using (StreamWriter file = File.CreateText(filePath)) - { - JsonSerializer serializer; - if (nullValue) - { - serializer = new JsonSerializer() { Formatting = Formatting.Indented }; - } - else - { - serializer = new JsonSerializer() { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore }; - } - - serializer.Serialize(file, obj); - } - result = 0; - } - catch - { - result = -1; - } - return result; - } - #endregion - - #region 转换函数 - - /// - /// List转逗号分隔的字符串 - /// - /// - /// - public static string List2String(List lst, bool wrap = false) - { - try - { - if (wrap) - { - return string.Join("," + Environment.NewLine, lst.ToArray()); - } - else - { - return string.Join(",", lst.ToArray()); - } - } - catch - { - return string.Empty; - } - } - /// - /// 逗号分隔的字符串,转List - /// - /// - /// - public static List String2List(string str) - { - try - { - str = str.Replace(Environment.NewLine, ""); - return new List(str.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)); - } - catch - { - return new List(); - } - } - - /// - /// Base64编码 - /// - /// - /// - public static string Base64Encode(string plainText) - { - try - { - byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); - return Convert.ToBase64String(plainTextBytes); - } - catch (Exception ex) - { - SaveLog("Base64Encode", ex); - return string.Empty; - } - } - - /// - /// Base64解码 - /// - /// - /// - public static string Base64Decode(string plainText) - { - try - { - plainText = plainText.TrimEx() - .Replace(Environment.NewLine, "") - .Replace("\n", "") - .Replace("\r", "") - .Replace(" ", ""); - - if (plainText.Length % 4 > 0) - { - plainText = plainText.PadRight(plainText.Length + 4 - plainText.Length % 4, '='); - } - - byte[] data = Convert.FromBase64String(plainText); - return Encoding.UTF8.GetString(data); - } - catch (Exception ex) - { - SaveLog("Base64Decode", ex); - return string.Empty; - } - } - - /// - /// 转Int - /// - /// - /// - public static int ToInt(object obj) - { - try - { - return Convert.ToInt32(obj); - } - catch - { - return 0; - } - } - - public static string ToString(object obj) - { - try - { - return (obj == null ? string.Empty : obj.ToString()); - } - catch - { - return string.Empty; - } - } - - /// - /// byte 转成 有两位小数点的 方便阅读的数据 - /// 比如 2.50 MB - /// - /// bytes - /// 转换之后的数据 - /// 单位 - public static void ToHumanReadable(ulong amount, out double result, out string unit) - { - uint factor = 1024u; - ulong KBs = amount / factor; - if (KBs > 0) - { - // multi KB - ulong MBs = KBs / factor; - if (MBs > 0) - { - // multi MB - ulong GBs = MBs / factor; - if (GBs > 0) - { - // multi GB - /*ulong TBs = GBs / factor; - if (TBs > 0) - { - // 你是魔鬼吗? 用这么多流量 - result = TBs + GBs % factor / (factor + 0.0); - unit = "TB"; - return; - }*/ - result = GBs + MBs % factor / (factor + 0.0); - unit = "GB"; - return; - } - result = MBs + KBs % factor / (factor + 0.0); - unit = "MB"; - return; - } - result = KBs + amount % factor / (factor + 0.0); - unit = "KB"; - return; - } - else - { - result = amount; - unit = "B"; - } - } - - public static string HumanFy(ulong amount) - { - ToHumanReadable(amount, out double result, out string unit); - return $"{string.Format("{0:f1}", result)} {unit}"; - } - - public static void DedupServerList(List source, out List result, bool keepOlder) - { - List list = new List(); - if (!keepOlder) source.Reverse(); // Remove the early items first - - bool _isAdded(Mode.VmessItem o, Mode.VmessItem n) - { - return o.configVersion == n.configVersion && - o.configType == n.configType && - o.address == n.address && - o.port == n.port && - o.id == n.id && - o.alterId == n.alterId && - o.security == n.security && - o.network == n.network && - o.headerType == n.headerType && - o.requestHost == n.requestHost && - o.path == n.path && - o.streamSecurity == n.streamSecurity; - // skip (will remove) different remarks - } - foreach (Mode.VmessItem item in source) - { - if (!list.Exists(i => _isAdded(i, item))) - { - list.Add(item); - } - } - if (!keepOlder) list.Reverse(); - result = list; - } - - #endregion - - - #region 数据检查 - - /// - /// 判断输入的是否是数字 - /// - /// - /// - public static bool IsNumberic(string oText) - { - try - { - int var1 = ToInt(oText); - return true; - } - catch - { - return false; - } - } - - /// - /// 文本 - /// - /// - /// - public static bool IsNullOrEmpty(string text) - { - if (string.IsNullOrEmpty(text)) - { - return true; - } - if (text.Equals("null")) - { - return true; - } - return false; - } - - /// - /// 验证IP地址是否合法 - /// - /// - public static bool IsIP(string ip) - { - //如果为空 - if (IsNullOrEmpty(ip)) - { - return false; - } - - //清除要验证字符串中的空格 - //ip = ip.TrimEx(); - //可能是CIDR - if (ip.IndexOf(@"/") > 0) - { - string[] cidr = ip.Split('/'); - if (cidr.Length == 2) - { - if (!IsNumberic(cidr[0])) - { - return false; - } - ip = cidr[0]; - } - } - - - //模式字符串 - string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"; - - //验证 - return IsMatch(ip, pattern); - } - - /// - /// 验证Domain地址是否合法 - /// - /// - public static bool IsDomain(string domain) - { - //如果为空 - if (IsNullOrEmpty(domain)) - { - return false; - } - - //清除要验证字符串中的空格 - //domain = domain.TrimEx(); - - //模式字符串 - string pattern = @"^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$"; - - //验证 - return IsMatch(domain, pattern); - } - - /// - /// 验证输入字符串是否与模式字符串匹配,匹配返回true - /// - /// 输入字符串 - /// 模式字符串 - public static bool IsMatch(string input, string pattern) - { - return Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase); - } - - #endregion - - #region 开机自动启动 - - private static string autoRunName = "v2rayNAutoRun"; - private static string autoRunRegPath - { - get - { - return @"Software\Microsoft\Windows\CurrentVersion\Run"; - //if (Environment.Is64BitProcess) - //{ - // return @"Software\Microsoft\Windows\CurrentVersion\Run"; - //} - //else - //{ - // return @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run"; - //} - } - } - - /// - /// 开机自动启动 - /// - /// - /// - public static void SetAutoRun(bool run) - { - try - { - string exePath = GetExePath(); - RegWriteValue(autoRunRegPath, autoRunName, run ? exePath : ""); - } - catch - { - } - } - - /// - /// 是否已经设置开机自动启动 - /// - /// - public static bool IsAutoRun() - { - try - { - string value = RegReadValue(autoRunRegPath, autoRunName, ""); - string exePath = GetExePath(); - if (value?.Equals(exePath) == true) - { - return true; - } - } - catch - { - } - return false; - } - - /// - /// 获取启动了应用程序的可执行文件的路径 - /// - /// - public static string GetPath(string fileName) - { - string startupPath = StartupPath(); - if (IsNullOrEmpty(fileName)) - { - return startupPath; - } - return Path.Combine(startupPath, fileName); - } - - /// - /// 获取启动了应用程序的可执行文件的路径及文件名 - /// - /// - public static string GetExePath() - { - return Application.ExecutablePath; - } - - public static string StartupPath() - { - return Application.StartupPath; - } - - public static string RegReadValue(string path, string name, string def) - { - RegistryKey regKey = null; - try - { - regKey = Registry.CurrentUser.OpenSubKey(path, false); - string value = regKey?.GetValue(name) as string; - if (IsNullOrEmpty(value)) - { - return def; - } - else - { - return value; - } - } - catch - { - } - finally - { - regKey?.Close(); - } - return def; - } - - public static void RegWriteValue(string path, string name, string value) - { - RegistryKey regKey = null; - try - { - regKey = Registry.CurrentUser.CreateSubKey(path); - if (IsNullOrEmpty(value)) - { - regKey?.DeleteValue(name, false); - } - else - { - regKey?.SetValue(name, value); - } - } - catch - { - } - finally - { - regKey?.Close(); - } - } - #endregion - - #region 测速 - - /// - /// Ping - /// - /// - /// - public static long Ping(string host) - { - long roundtripTime = -1; - try - { - int timeout = 30; - int echoNum = 2; - Ping pingSender = new Ping(); - for (int i = 0; i < echoNum; i++) - { - PingReply reply = pingSender.Send(host, timeout); - if (reply.Status == IPStatus.Success) - { - if (reply.RoundtripTime < 0) - { - continue; - } - if (roundtripTime < 0 || reply.RoundtripTime < roundtripTime) - { - roundtripTime = reply.RoundtripTime; - } - } - } - } - catch - { - return -1; - } - return roundtripTime; - } - - /// - /// 取得本机 IP Address - /// - /// - public static List GetHostIPAddress() - { - List lstIPAddress = new List(); - try - { - IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName()); - foreach (IPAddress ipa in IpEntry.AddressList) - { - if (ipa.AddressFamily == AddressFamily.InterNetwork) - lstIPAddress.Add(ipa.ToString()); - } - } - catch - { - } - return lstIPAddress; - } - - public static void SetSecurityProtocol() - { - ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 - | SecurityProtocolType.Tls - | SecurityProtocolType.Tls11 - | SecurityProtocolType.Tls12; - ServicePointManager.DefaultConnectionLimit = 256; - } - #endregion - - #region 杂项 - - /// - /// 取得版本 - /// - /// - public static string GetVersion() - { - try - { - string location = GetExePath(); - return string.Format("v2rayN - V{0} - {1}", - FileVersionInfo.GetVersionInfo(location).FileVersion.ToString(), - File.GetLastWriteTime(location).ToString("yyyy/MM/dd")); - } - catch - { - return string.Empty; - } - } - - /// - /// 深度拷贝 - /// - /// - /// - /// - public static T DeepCopy(T obj) - { - object retval; - using (MemoryStream ms = new MemoryStream()) - { - BinaryFormatter bf = new BinaryFormatter(); - //序列化成流 - bf.Serialize(ms, obj); - ms.Seek(0, SeekOrigin.Begin); - //反序列化成对象 - retval = bf.Deserialize(ms); - ms.Close(); - } - return (T)retval; - } - - /// - /// 获取剪贴板数 - /// - /// - public static string GetClipboardData() - { - string strData = string.Empty; - try - { - IDataObject data = Clipboard.GetDataObject(); - if (data.GetDataPresent(DataFormats.Text)) - { - strData = data.GetData(DataFormats.Text).ToString(); - } - return strData; - } - catch - { - } - return strData; - } - - /// - /// 拷贝至剪贴板 - /// - /// - public static void SetClipboardData(string strData) - { - try - { - Clipboard.SetText(strData); - } - catch - { - } - } - - /// - /// 取得GUID - /// - /// - public static string GetGUID() - { - try - { - return Guid.NewGuid().ToString("D"); - } - catch - { - } - return string.Empty; - } - - /// - /// IsAdministrator - /// - /// - public static bool IsAdministrator() - { - try - { - WindowsIdentity current = WindowsIdentity.GetCurrent(); - WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current); - //WindowsBuiltInRole可以枚举出很多权限,例如系统用户、User、Guest等等 - return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator); - } - catch - { - return false; - } - } - - #endregion - - #region TempPath - - // return path to store temporary files - public static string GetTempPath() - { - string _tempPath = Path.Combine(StartupPath(), "v2ray_win_temp"); - if (!Directory.Exists(_tempPath)) - { - Directory.CreateDirectory(_tempPath); - } - return _tempPath; - } - - public static string GetTempPath(string filename) - { - return Path.Combine(GetTempPath(), filename); - } - - public static string UnGzip(byte[] buf) - { - MemoryStream sb = new MemoryStream(); - using (GZipStream input = new GZipStream(new MemoryStream(buf), - CompressionMode.Decompress, - false)) - { - input.CopyTo(sb); - } - return Encoding.UTF8.GetString(sb.ToArray()); - } - - #endregion - - #region Log - - public static void SaveLog(string strContent) - { - SaveLog("info", new Exception(strContent)); - } - public static void SaveLog(string strTitle, Exception ex) - { - try - { - string path = Path.Combine(StartupPath(), "guiLogs"); - string FilePath = Path.Combine(path, DateTime.Now.ToString("yyyyMMdd") + ".txt"); - if (!Directory.Exists(path)) - { - Directory.CreateDirectory(path); - } - if (!File.Exists(FilePath)) - { - FileStream FsCreate = new FileStream(FilePath, FileMode.Create); - FsCreate.Close(); - FsCreate.Dispose(); - } - FileStream FsWrite = new FileStream(FilePath, FileMode.Append, FileAccess.Write); - StreamWriter SwWrite = new StreamWriter(FsWrite); - - string strContent = ex.ToString(); - - SwWrite.WriteLine(string.Format("{0}{1}[{2}]{3}", "--------------------------------", strTitle, DateTime.Now.ToString("HH:mm:ss"), "--------------------------------")); - SwWrite.Write(strContent); - SwWrite.WriteLine(Environment.NewLine); - SwWrite.WriteLine(" "); - SwWrite.Flush(); - SwWrite.Close(); - } - catch { } - } - - #endregion - - - #region scan screen - - public static string ScanScreen() - { - try - { - foreach (Screen screen in Screen.AllScreens) - { - using (Bitmap fullImage = new Bitmap(screen.Bounds.Width, - screen.Bounds.Height)) - { - using (Graphics g = Graphics.FromImage(fullImage)) - { - g.CopyFromScreen(screen.Bounds.X, - screen.Bounds.Y, - 0, 0, - fullImage.Size, - CopyPixelOperation.SourceCopy); - } - int maxTry = 10; - for (int i = 0; i < maxTry; i++) - { - int marginLeft = (int)((double)fullImage.Width * i / 2.5 / maxTry); - int marginTop = (int)((double)fullImage.Height * i / 2.5 / maxTry); - Rectangle cropRect = new Rectangle(marginLeft, marginTop, fullImage.Width - marginLeft * 2, fullImage.Height - marginTop * 2); - Bitmap target = new Bitmap(screen.Bounds.Width, screen.Bounds.Height); - - double imageScale = (double)screen.Bounds.Width / (double)cropRect.Width; - using (Graphics g = Graphics.FromImage(target)) - { - g.DrawImage(fullImage, new Rectangle(0, 0, target.Width, target.Height), - cropRect, - GraphicsUnit.Pixel); - } - - BitmapLuminanceSource source = new BitmapLuminanceSource(target); - BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); - QRCodeReader reader = new QRCodeReader(); - Result result = reader.decode(bitmap); - if (result != null) - { - string ret = result.Text; - return ret; - } - } - } - } - } - catch { } - return string.Empty; - } - - #endregion - - } -} diff --git a/v2rayN/app.config b/v2rayN/app.config deleted file mode 100644 index df5f190..0000000 --- a/v2rayN/app.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/v2rayN/build.ps1 b/v2rayN/build.ps1 new file mode 100755 index 0000000..b82d1d1 --- /dev/null +++ b/v2rayN/build.ps1 @@ -0,0 +1,39 @@ +param ( + [Parameter()] + [ValidateNotNullOrEmpty()] + [string] + $OutputPath = '.\bin\v2rayN' +) + +Write-Host 'Building' + +dotnet publish ` + .\v2rayN\v2rayN.csproj ` + -c Release ` + --self-contained false ` + -p:PublishReadyToRun=true ` + -p:PublishSingleFile=true ` + -o $OutputPath + +dotnet publish ` + .\v2rayUpgrade\v2rayUpgrade.csproj ` + -c Release ` + --self-contained false ` + -p:PublishReadyToRun=true ` + -p:PublishSingleFile=true ` + -o $OutputPath + +if ( -Not $? ) { + exit $lastExitCode + } + +if ( Test-Path -Path .\bin\v2rayN ) { + rm -Force "$OutputPath\*.pdb" + rm -Force "$OutputPath\*.xml" +} + +Write-Host 'Build done' + +ls $OutputPath +7z a v2rayN.zip $OutputPath +exit 0 \ No newline at end of file diff --git a/v2rayN/obj/Debug/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs b/v2rayN/obj/Debug/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs deleted file mode 100644 index 3aa5318..0000000 --- a/v2rayN/obj/Debug/.NETFramework,Version=v4.6.1.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6.1", FrameworkDisplayName = ".NET Framework 4.6.1")] diff --git a/v2rayN/obj/Debug/.NETFramework,Version=v4.6.AssemblyAttributes.cs b/v2rayN/obj/Debug/.NETFramework,Version=v4.6.AssemblyAttributes.cs deleted file mode 100644 index a216cb0..0000000 --- a/v2rayN/obj/Debug/.NETFramework,Version=v4.6.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")] diff --git a/v2rayN/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/v2rayN/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs deleted file mode 100644 index 3871b18..0000000 --- a/v2rayN/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/v2rayN/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/v2rayN/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs deleted file mode 100644 index 15efebf..0000000 --- a/v2rayN/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] diff --git a/v2rayN/obj/Debug/12fbc7ffe642ca7e_Statistics.protodep b/v2rayN/obj/Debug/12fbc7ffe642ca7e_Statistics.protodep deleted file mode 100644 index ca46955..0000000 --- a/v2rayN/obj/Debug/12fbc7ffe642ca7e_Statistics.protodep +++ /dev/null @@ -1,2 +0,0 @@ -obj\Debug/Statistics.cs \ -obj\Debug/StatisticsGrpc.cs: Protos/Statistics.proto \ No newline at end of file diff --git a/v2rayN/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/v2rayN/obj/Debug/DesignTimeResolveAssemblyReferences.cache deleted file mode 100644 index 893ff45..0000000 Binary files a/v2rayN/obj/Debug/DesignTimeResolveAssemblyReferences.cache and /dev/null differ diff --git a/v2rayN/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/v2rayN/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index cd5d513..0000000 Binary files a/v2rayN/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache and /dev/null differ diff --git a/v2rayN/obj/Debug/Statistics.cs b/v2rayN/obj/Debug/Statistics.cs deleted file mode 100644 index cce0741..0000000 --- a/v2rayN/obj/Debug/Statistics.cs +++ /dev/null @@ -1,1386 +0,0 @@ -// -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Protos/Statistics.proto -// -#pragma warning disable 1591, 0612, 3021 -#region Designer generated code - -using pb = global::Google.Protobuf; -using pbc = global::Google.Protobuf.Collections; -using pbr = global::Google.Protobuf.Reflection; -using scg = global::System.Collections.Generic; -namespace v2rayN.Protos.Statistics { - - /// Holder for reflection information generated from Protos/Statistics.proto - public static partial class StatisticsReflection { - - #region Descriptor - /// File descriptor for Protos/Statistics.proto - public static pbr::FileDescriptor Descriptor { - get { return descriptor; } - } - private static pbr::FileDescriptor descriptor; - - static StatisticsReflection() { - byte[] descriptorData = global::System.Convert.FromBase64String( - string.Concat( - "ChdQcm90b3MvU3RhdGlzdGljcy5wcm90bxIcdjJyYXkuY29yZS5hcHAuc3Rh", - "dHMuY29tbWFuZCIuCg9HZXRTdGF0c1JlcXVlc3QSDAoEbmFtZRgBIAEoCRIN", - "CgVyZXNldBgCIAEoCCIjCgRTdGF0EgwKBG5hbWUYASABKAkSDQoFdmFsdWUY", - "AiABKAMiRAoQR2V0U3RhdHNSZXNwb25zZRIwCgRzdGF0GAEgASgLMiIudjJy", - "YXkuY29yZS5hcHAuc3RhdHMuY29tbWFuZC5TdGF0IjMKEVF1ZXJ5U3RhdHNS", - "ZXF1ZXN0Eg8KB3BhdHRlcm4YASABKAkSDQoFcmVzZXQYAiABKAgiRgoSUXVl", - "cnlTdGF0c1Jlc3BvbnNlEjAKBHN0YXQYASADKAsyIi52MnJheS5jb3JlLmFw", - "cC5zdGF0cy5jb21tYW5kLlN0YXQiEQoPU3lzU3RhdHNSZXF1ZXN0IsIBChBT", - "eXNTdGF0c1Jlc3BvbnNlEhQKDE51bUdvcm91dGluZRgBIAEoDRINCgVOdW1H", - "QxgCIAEoDRINCgVBbGxvYxgDIAEoBBISCgpUb3RhbEFsbG9jGAQgASgEEgsK", - "A1N5cxgFIAEoBBIPCgdNYWxsb2NzGAYgASgEEg0KBUZyZWVzGAcgASgEEhMK", - "C0xpdmVPYmplY3RzGAggASgEEhQKDFBhdXNlVG90YWxOcxgJIAEoBBIOCgZV", - "cHRpbWUYCiABKA0iCAoGQ29uZmlnMt4CCgxTdGF0c1NlcnZpY2USawoIR2V0", - "U3RhdHMSLS52MnJheS5jb3JlLmFwcC5zdGF0cy5jb21tYW5kLkdldFN0YXRz", - "UmVxdWVzdBouLnYycmF5LmNvcmUuYXBwLnN0YXRzLmNvbW1hbmQuR2V0U3Rh", - "dHNSZXNwb25zZSIAEnEKClF1ZXJ5U3RhdHMSLy52MnJheS5jb3JlLmFwcC5z", - "dGF0cy5jb21tYW5kLlF1ZXJ5U3RhdHNSZXF1ZXN0GjAudjJyYXkuY29yZS5h", - "cHAuc3RhdHMuY29tbWFuZC5RdWVyeVN0YXRzUmVzcG9uc2UiABJuCgtHZXRT", - "eXNTdGF0cxItLnYycmF5LmNvcmUuYXBwLnN0YXRzLmNvbW1hbmQuU3lzU3Rh", - "dHNSZXF1ZXN0Gi4udjJyYXkuY29yZS5hcHAuc3RhdHMuY29tbWFuZC5TeXNT", - "dGF0c1Jlc3BvbnNlIgBCG6oCGHYycmF5Ti5Qcm90b3MuU3RhdGlzdGljc2IG", - "cHJvdG8z")); - descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, - new pbr::FileDescriptor[] { }, - new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.GetStatsRequest), global::v2rayN.Protos.Statistics.GetStatsRequest.Parser, new[]{ "Name", "Reset" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.Stat), global::v2rayN.Protos.Statistics.Stat.Parser, new[]{ "Name", "Value" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.GetStatsResponse), global::v2rayN.Protos.Statistics.GetStatsResponse.Parser, new[]{ "Stat" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.QueryStatsRequest), global::v2rayN.Protos.Statistics.QueryStatsRequest.Parser, new[]{ "Pattern", "Reset" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.QueryStatsResponse), global::v2rayN.Protos.Statistics.QueryStatsResponse.Parser, new[]{ "Stat" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.SysStatsRequest), global::v2rayN.Protos.Statistics.SysStatsRequest.Parser, null, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.SysStatsResponse), global::v2rayN.Protos.Statistics.SysStatsResponse.Parser, new[]{ "NumGoroutine", "NumGC", "Alloc", "TotalAlloc", "Sys", "Mallocs", "Frees", "LiveObjects", "PauseTotalNs", "Uptime" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.Config), global::v2rayN.Protos.Statistics.Config.Parser, null, null, null, null, null) - })); - } - #endregion - - } - #region Messages - public sealed partial class GetStatsRequest : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new GetStatsRequest()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[0]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsRequest() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsRequest(GetStatsRequest other) : this() { - name_ = other.name_; - reset_ = other.reset_; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsRequest Clone() { - return new GetStatsRequest(this); - } - - /// Field number for the "name" field. - public const int NameFieldNumber = 1; - private string name_ = ""; - /// - /// Name of the stat counter. - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public string Name { - get { return name_; } - set { - name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); - } - } - - /// Field number for the "reset" field. - public const int ResetFieldNumber = 2; - private bool reset_; - /// - /// Whether or not to reset the counter to fetching its value. - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Reset { - get { return reset_; } - set { - reset_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as GetStatsRequest); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(GetStatsRequest other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (Name != other.Name) return false; - if (Reset != other.Reset) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (Name.Length != 0) hash ^= Name.GetHashCode(); - if (Reset != false) hash ^= Reset.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (Name.Length != 0) { - output.WriteRawTag(10); - output.WriteString(Name); - } - if (Reset != false) { - output.WriteRawTag(16); - output.WriteBool(Reset); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (Name.Length != 0) { - size += 1 + pb::CodedOutputStream.ComputeStringSize(Name); - } - if (Reset != false) { - size += 1 + 1; - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(GetStatsRequest other) { - if (other == null) { - return; - } - if (other.Name.Length != 0) { - Name = other.Name; - } - if (other.Reset != false) { - Reset = other.Reset; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - Name = input.ReadString(); - break; - } - case 16: { - Reset = input.ReadBool(); - break; - } - } - } - } - - } - - public sealed partial class Stat : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Stat()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[1]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Stat() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Stat(Stat other) : this() { - name_ = other.name_; - value_ = other.value_; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Stat Clone() { - return new Stat(this); - } - - /// Field number for the "name" field. - public const int NameFieldNumber = 1; - private string name_ = ""; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public string Name { - get { return name_; } - set { - name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); - } - } - - /// Field number for the "value" field. - public const int ValueFieldNumber = 2; - private long value_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public long Value { - get { return value_; } - set { - value_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as Stat); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(Stat other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (Name != other.Name) return false; - if (Value != other.Value) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (Name.Length != 0) hash ^= Name.GetHashCode(); - if (Value != 0L) hash ^= Value.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (Name.Length != 0) { - output.WriteRawTag(10); - output.WriteString(Name); - } - if (Value != 0L) { - output.WriteRawTag(16); - output.WriteInt64(Value); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (Name.Length != 0) { - size += 1 + pb::CodedOutputStream.ComputeStringSize(Name); - } - if (Value != 0L) { - size += 1 + pb::CodedOutputStream.ComputeInt64Size(Value); - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(Stat other) { - if (other == null) { - return; - } - if (other.Name.Length != 0) { - Name = other.Name; - } - if (other.Value != 0L) { - Value = other.Value; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - Name = input.ReadString(); - break; - } - case 16: { - Value = input.ReadInt64(); - break; - } - } - } - } - - } - - public sealed partial class GetStatsResponse : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new GetStatsResponse()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[2]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsResponse() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsResponse(GetStatsResponse other) : this() { - stat_ = other.stat_ != null ? other.stat_.Clone() : null; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsResponse Clone() { - return new GetStatsResponse(this); - } - - /// Field number for the "stat" field. - public const int StatFieldNumber = 1; - private global::v2rayN.Protos.Statistics.Stat stat_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public global::v2rayN.Protos.Statistics.Stat Stat { - get { return stat_; } - set { - stat_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as GetStatsResponse); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(GetStatsResponse other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (!object.Equals(Stat, other.Stat)) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (stat_ != null) hash ^= Stat.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (stat_ != null) { - output.WriteRawTag(10); - output.WriteMessage(Stat); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (stat_ != null) { - size += 1 + pb::CodedOutputStream.ComputeMessageSize(Stat); - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(GetStatsResponse other) { - if (other == null) { - return; - } - if (other.stat_ != null) { - if (stat_ == null) { - Stat = new global::v2rayN.Protos.Statistics.Stat(); - } - Stat.MergeFrom(other.Stat); - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - if (stat_ == null) { - Stat = new global::v2rayN.Protos.Statistics.Stat(); - } - input.ReadMessage(Stat); - break; - } - } - } - } - - } - - public sealed partial class QueryStatsRequest : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new QueryStatsRequest()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[3]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsRequest() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsRequest(QueryStatsRequest other) : this() { - pattern_ = other.pattern_; - reset_ = other.reset_; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsRequest Clone() { - return new QueryStatsRequest(this); - } - - /// Field number for the "pattern" field. - public const int PatternFieldNumber = 1; - private string pattern_ = ""; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public string Pattern { - get { return pattern_; } - set { - pattern_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); - } - } - - /// Field number for the "reset" field. - public const int ResetFieldNumber = 2; - private bool reset_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Reset { - get { return reset_; } - set { - reset_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as QueryStatsRequest); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(QueryStatsRequest other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (Pattern != other.Pattern) return false; - if (Reset != other.Reset) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (Pattern.Length != 0) hash ^= Pattern.GetHashCode(); - if (Reset != false) hash ^= Reset.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (Pattern.Length != 0) { - output.WriteRawTag(10); - output.WriteString(Pattern); - } - if (Reset != false) { - output.WriteRawTag(16); - output.WriteBool(Reset); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (Pattern.Length != 0) { - size += 1 + pb::CodedOutputStream.ComputeStringSize(Pattern); - } - if (Reset != false) { - size += 1 + 1; - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(QueryStatsRequest other) { - if (other == null) { - return; - } - if (other.Pattern.Length != 0) { - Pattern = other.Pattern; - } - if (other.Reset != false) { - Reset = other.Reset; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - Pattern = input.ReadString(); - break; - } - case 16: { - Reset = input.ReadBool(); - break; - } - } - } - } - - } - - public sealed partial class QueryStatsResponse : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new QueryStatsResponse()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[4]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsResponse() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsResponse(QueryStatsResponse other) : this() { - stat_ = other.stat_.Clone(); - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsResponse Clone() { - return new QueryStatsResponse(this); - } - - /// Field number for the "stat" field. - public const int StatFieldNumber = 1; - private static readonly pb::FieldCodec _repeated_stat_codec - = pb::FieldCodec.ForMessage(10, global::v2rayN.Protos.Statistics.Stat.Parser); - private readonly pbc::RepeatedField stat_ = new pbc::RepeatedField(); - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public pbc::RepeatedField Stat { - get { return stat_; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as QueryStatsResponse); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(QueryStatsResponse other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if(!stat_.Equals(other.stat_)) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - hash ^= stat_.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - stat_.WriteTo(output, _repeated_stat_codec); - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - size += stat_.CalculateSize(_repeated_stat_codec); - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(QueryStatsResponse other) { - if (other == null) { - return; - } - stat_.Add(other.stat_); - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - stat_.AddEntriesFrom(input, _repeated_stat_codec); - break; - } - } - } - } - - } - - public sealed partial class SysStatsRequest : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new SysStatsRequest()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[5]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsRequest() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsRequest(SysStatsRequest other) : this() { - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsRequest Clone() { - return new SysStatsRequest(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as SysStatsRequest); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(SysStatsRequest other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(SysStatsRequest other) { - if (other == null) { - return; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - } - } - } - - } - - public sealed partial class SysStatsResponse : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new SysStatsResponse()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[6]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsResponse() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsResponse(SysStatsResponse other) : this() { - numGoroutine_ = other.numGoroutine_; - numGC_ = other.numGC_; - alloc_ = other.alloc_; - totalAlloc_ = other.totalAlloc_; - sys_ = other.sys_; - mallocs_ = other.mallocs_; - frees_ = other.frees_; - liveObjects_ = other.liveObjects_; - pauseTotalNs_ = other.pauseTotalNs_; - uptime_ = other.uptime_; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsResponse Clone() { - return new SysStatsResponse(this); - } - - /// Field number for the "NumGoroutine" field. - public const int NumGoroutineFieldNumber = 1; - private uint numGoroutine_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public uint NumGoroutine { - get { return numGoroutine_; } - set { - numGoroutine_ = value; - } - } - - /// Field number for the "NumGC" field. - public const int NumGCFieldNumber = 2; - private uint numGC_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public uint NumGC { - get { return numGC_; } - set { - numGC_ = value; - } - } - - /// Field number for the "Alloc" field. - public const int AllocFieldNumber = 3; - private ulong alloc_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong Alloc { - get { return alloc_; } - set { - alloc_ = value; - } - } - - /// Field number for the "TotalAlloc" field. - public const int TotalAllocFieldNumber = 4; - private ulong totalAlloc_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong TotalAlloc { - get { return totalAlloc_; } - set { - totalAlloc_ = value; - } - } - - /// Field number for the "Sys" field. - public const int SysFieldNumber = 5; - private ulong sys_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong Sys { - get { return sys_; } - set { - sys_ = value; - } - } - - /// Field number for the "Mallocs" field. - public const int MallocsFieldNumber = 6; - private ulong mallocs_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong Mallocs { - get { return mallocs_; } - set { - mallocs_ = value; - } - } - - /// Field number for the "Frees" field. - public const int FreesFieldNumber = 7; - private ulong frees_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong Frees { - get { return frees_; } - set { - frees_ = value; - } - } - - /// Field number for the "LiveObjects" field. - public const int LiveObjectsFieldNumber = 8; - private ulong liveObjects_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong LiveObjects { - get { return liveObjects_; } - set { - liveObjects_ = value; - } - } - - /// Field number for the "PauseTotalNs" field. - public const int PauseTotalNsFieldNumber = 9; - private ulong pauseTotalNs_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong PauseTotalNs { - get { return pauseTotalNs_; } - set { - pauseTotalNs_ = value; - } - } - - /// Field number for the "Uptime" field. - public const int UptimeFieldNumber = 10; - private uint uptime_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public uint Uptime { - get { return uptime_; } - set { - uptime_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as SysStatsResponse); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(SysStatsResponse other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (NumGoroutine != other.NumGoroutine) return false; - if (NumGC != other.NumGC) return false; - if (Alloc != other.Alloc) return false; - if (TotalAlloc != other.TotalAlloc) return false; - if (Sys != other.Sys) return false; - if (Mallocs != other.Mallocs) return false; - if (Frees != other.Frees) return false; - if (LiveObjects != other.LiveObjects) return false; - if (PauseTotalNs != other.PauseTotalNs) return false; - if (Uptime != other.Uptime) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (NumGoroutine != 0) hash ^= NumGoroutine.GetHashCode(); - if (NumGC != 0) hash ^= NumGC.GetHashCode(); - if (Alloc != 0UL) hash ^= Alloc.GetHashCode(); - if (TotalAlloc != 0UL) hash ^= TotalAlloc.GetHashCode(); - if (Sys != 0UL) hash ^= Sys.GetHashCode(); - if (Mallocs != 0UL) hash ^= Mallocs.GetHashCode(); - if (Frees != 0UL) hash ^= Frees.GetHashCode(); - if (LiveObjects != 0UL) hash ^= LiveObjects.GetHashCode(); - if (PauseTotalNs != 0UL) hash ^= PauseTotalNs.GetHashCode(); - if (Uptime != 0) hash ^= Uptime.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (NumGoroutine != 0) { - output.WriteRawTag(8); - output.WriteUInt32(NumGoroutine); - } - if (NumGC != 0) { - output.WriteRawTag(16); - output.WriteUInt32(NumGC); - } - if (Alloc != 0UL) { - output.WriteRawTag(24); - output.WriteUInt64(Alloc); - } - if (TotalAlloc != 0UL) { - output.WriteRawTag(32); - output.WriteUInt64(TotalAlloc); - } - if (Sys != 0UL) { - output.WriteRawTag(40); - output.WriteUInt64(Sys); - } - if (Mallocs != 0UL) { - output.WriteRawTag(48); - output.WriteUInt64(Mallocs); - } - if (Frees != 0UL) { - output.WriteRawTag(56); - output.WriteUInt64(Frees); - } - if (LiveObjects != 0UL) { - output.WriteRawTag(64); - output.WriteUInt64(LiveObjects); - } - if (PauseTotalNs != 0UL) { - output.WriteRawTag(72); - output.WriteUInt64(PauseTotalNs); - } - if (Uptime != 0) { - output.WriteRawTag(80); - output.WriteUInt32(Uptime); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (NumGoroutine != 0) { - size += 1 + pb::CodedOutputStream.ComputeUInt32Size(NumGoroutine); - } - if (NumGC != 0) { - size += 1 + pb::CodedOutputStream.ComputeUInt32Size(NumGC); - } - if (Alloc != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Alloc); - } - if (TotalAlloc != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(TotalAlloc); - } - if (Sys != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Sys); - } - if (Mallocs != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Mallocs); - } - if (Frees != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Frees); - } - if (LiveObjects != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(LiveObjects); - } - if (PauseTotalNs != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(PauseTotalNs); - } - if (Uptime != 0) { - size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Uptime); - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(SysStatsResponse other) { - if (other == null) { - return; - } - if (other.NumGoroutine != 0) { - NumGoroutine = other.NumGoroutine; - } - if (other.NumGC != 0) { - NumGC = other.NumGC; - } - if (other.Alloc != 0UL) { - Alloc = other.Alloc; - } - if (other.TotalAlloc != 0UL) { - TotalAlloc = other.TotalAlloc; - } - if (other.Sys != 0UL) { - Sys = other.Sys; - } - if (other.Mallocs != 0UL) { - Mallocs = other.Mallocs; - } - if (other.Frees != 0UL) { - Frees = other.Frees; - } - if (other.LiveObjects != 0UL) { - LiveObjects = other.LiveObjects; - } - if (other.PauseTotalNs != 0UL) { - PauseTotalNs = other.PauseTotalNs; - } - if (other.Uptime != 0) { - Uptime = other.Uptime; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 8: { - NumGoroutine = input.ReadUInt32(); - break; - } - case 16: { - NumGC = input.ReadUInt32(); - break; - } - case 24: { - Alloc = input.ReadUInt64(); - break; - } - case 32: { - TotalAlloc = input.ReadUInt64(); - break; - } - case 40: { - Sys = input.ReadUInt64(); - break; - } - case 48: { - Mallocs = input.ReadUInt64(); - break; - } - case 56: { - Frees = input.ReadUInt64(); - break; - } - case 64: { - LiveObjects = input.ReadUInt64(); - break; - } - case 72: { - PauseTotalNs = input.ReadUInt64(); - break; - } - case 80: { - Uptime = input.ReadUInt32(); - break; - } - } - } - } - - } - - public sealed partial class Config : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Config()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[7]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Config() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Config(Config other) : this() { - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Config Clone() { - return new Config(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as Config); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(Config other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(Config other) { - if (other == null) { - return; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - } - } - } - - } - - #endregion - -} - -#endregion Designer generated code diff --git a/v2rayN/obj/Debug/StatisticsGrpc.cs b/v2rayN/obj/Debug/StatisticsGrpc.cs deleted file mode 100644 index 079100d..0000000 --- a/v2rayN/obj/Debug/StatisticsGrpc.cs +++ /dev/null @@ -1,171 +0,0 @@ -// -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Protos/Statistics.proto -// -#pragma warning disable 0414, 1591 -#region Designer generated code - -using grpc = global::Grpc.Core; - -namespace v2rayN.Protos.Statistics { - public static partial class StatsService - { - static readonly string __ServiceName = "v2ray.core.app.stats.command.StatsService"; - - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_GetStatsRequest = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.GetStatsRequest.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_GetStatsResponse = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.GetStatsResponse.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_QueryStatsRequest = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.QueryStatsRequest.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_QueryStatsResponse = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.QueryStatsResponse.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_SysStatsRequest = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.SysStatsRequest.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_SysStatsResponse = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.SysStatsResponse.Parser.ParseFrom); - - static readonly grpc::Method __Method_GetStats = new grpc::Method( - grpc::MethodType.Unary, - __ServiceName, - "GetStats", - __Marshaller_v2ray_core_app_stats_command_GetStatsRequest, - __Marshaller_v2ray_core_app_stats_command_GetStatsResponse); - - static readonly grpc::Method __Method_QueryStats = new grpc::Method( - grpc::MethodType.Unary, - __ServiceName, - "QueryStats", - __Marshaller_v2ray_core_app_stats_command_QueryStatsRequest, - __Marshaller_v2ray_core_app_stats_command_QueryStatsResponse); - - static readonly grpc::Method __Method_GetSysStats = new grpc::Method( - grpc::MethodType.Unary, - __ServiceName, - "GetSysStats", - __Marshaller_v2ray_core_app_stats_command_SysStatsRequest, - __Marshaller_v2ray_core_app_stats_command_SysStatsResponse); - - /// Service descriptor - public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor - { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.Services[0]; } - } - - /// Base class for server-side implementations of StatsService - [grpc::BindServiceMethod(typeof(StatsService), "BindService")] - public abstract partial class StatsServiceBase - { - public virtual global::System.Threading.Tasks.Task GetStats(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::ServerCallContext context) - { - throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, "")); - } - - public virtual global::System.Threading.Tasks.Task QueryStats(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::ServerCallContext context) - { - throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, "")); - } - - public virtual global::System.Threading.Tasks.Task GetSysStats(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::ServerCallContext context) - { - throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, "")); - } - - } - - /// Client for StatsService - public partial class StatsServiceClient : grpc::ClientBase - { - /// Creates a new client for StatsService - /// The channel to use to make remote calls. - public StatsServiceClient(grpc::ChannelBase channel) : base(channel) - { - } - /// Creates a new client for StatsService that uses a custom CallInvoker. - /// The callInvoker to use to make remote calls. - public StatsServiceClient(grpc::CallInvoker callInvoker) : base(callInvoker) - { - } - /// Protected parameterless constructor to allow creation of test doubles. - protected StatsServiceClient() : base() - { - } - /// Protected constructor to allow creation of configured clients. - /// The client configuration. - protected StatsServiceClient(ClientBaseConfiguration configuration) : base(configuration) - { - } - - public virtual global::v2rayN.Protos.Statistics.GetStatsResponse GetStats(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return GetStats(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual global::v2rayN.Protos.Statistics.GetStatsResponse GetStats(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.BlockingUnaryCall(__Method_GetStats, null, options, request); - } - public virtual grpc::AsyncUnaryCall GetStatsAsync(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return GetStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual grpc::AsyncUnaryCall GetStatsAsync(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.AsyncUnaryCall(__Method_GetStats, null, options, request); - } - public virtual global::v2rayN.Protos.Statistics.QueryStatsResponse QueryStats(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return QueryStats(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual global::v2rayN.Protos.Statistics.QueryStatsResponse QueryStats(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.BlockingUnaryCall(__Method_QueryStats, null, options, request); - } - public virtual grpc::AsyncUnaryCall QueryStatsAsync(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return QueryStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual grpc::AsyncUnaryCall QueryStatsAsync(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.AsyncUnaryCall(__Method_QueryStats, null, options, request); - } - public virtual global::v2rayN.Protos.Statistics.SysStatsResponse GetSysStats(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return GetSysStats(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual global::v2rayN.Protos.Statistics.SysStatsResponse GetSysStats(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.BlockingUnaryCall(__Method_GetSysStats, null, options, request); - } - public virtual grpc::AsyncUnaryCall GetSysStatsAsync(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return GetSysStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual grpc::AsyncUnaryCall GetSysStatsAsync(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.AsyncUnaryCall(__Method_GetSysStats, null, options, request); - } - /// Creates a new instance of client from given ClientBaseConfiguration. - protected override StatsServiceClient NewInstance(ClientBaseConfiguration configuration) - { - return new StatsServiceClient(configuration); - } - } - - /// Creates service definition that can be registered with a server - /// An object implementing the server-side handling logic. - public static grpc::ServerServiceDefinition BindService(StatsServiceBase serviceImpl) - { - return grpc::ServerServiceDefinition.CreateBuilder() - .AddMethod(__Method_GetStats, serviceImpl.GetStats) - .AddMethod(__Method_QueryStats, serviceImpl.QueryStats) - .AddMethod(__Method_GetSysStats, serviceImpl.GetSysStats).Build(); - } - - /// Register service method with a service binder with or without implementation. Useful when customizing the service binding logic. - /// Note: this method is part of an experimental API that can change or be removed without any prior notice. - /// Service methods will be bound by calling AddMethod on this object. - /// An object implementing the server-side handling logic. - public static void BindService(grpc::ServiceBinderBase serviceBinder, StatsServiceBase serviceImpl) - { - serviceBinder.AddMethod(__Method_GetStats, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.GetStats)); - serviceBinder.AddMethod(__Method_QueryStats, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.QueryStats)); - serviceBinder.AddMethod(__Method_GetSysStats, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.GetSysStats)); - } - - } -} -#endregion diff --git a/v2rayN/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/v2rayN/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll deleted file mode 100644 index b5a639e..0000000 Binary files a/v2rayN/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll and /dev/null differ diff --git a/v2rayN/obj/Debug/TempPE/Resx.ResUI.Designer.cs.dll b/v2rayN/obj/Debug/TempPE/Resx.ResUI.Designer.cs.dll deleted file mode 100644 index fcdcfcc..0000000 Binary files a/v2rayN/obj/Debug/TempPE/Resx.ResUI.Designer.cs.dll and /dev/null differ diff --git a/v2rayN/obj/Debug/TempPE/Resx.ResUI.zh-Hans.Designer.cs.dll b/v2rayN/obj/Debug/TempPE/Resx.ResUI.zh-Hans.Designer.cs.dll deleted file mode 100644 index 3f8f7c6..0000000 Binary files a/v2rayN/obj/Debug/TempPE/Resx.ResUI.zh-Hans.Designer.cs.dll and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer2Form.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer2Form.resources deleted file mode 100644 index d3af0ae..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer2Form.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer2Form.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer2Form.zh-Hans.resources deleted file mode 100644 index 35ff9c7..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer2Form.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer3Form.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer3Form.resources deleted file mode 100644 index ed91cfb..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer3Form.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer3Form.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer3Form.zh-Hans.resources deleted file mode 100644 index 3fd6478..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer3Form.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer4Form.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer4Form.resources deleted file mode 100644 index 20dc7bb..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer4Form.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer4Form.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer4Form.zh-Hans.resources deleted file mode 100644 index 9706920..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer4Form.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer5Form.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer5Form.resources deleted file mode 100644 index 8963866..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer5Form.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer5Form.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer5Form.zh-Hans.resources deleted file mode 100644 index 7219d9b..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer5Form.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer6Form.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer6Form.resources deleted file mode 100644 index 1b9c216..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer6Form.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServer6Form.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServer6Form.zh-Hans.resources deleted file mode 100644 index 154082e..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServer6Form.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServerForm.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServerForm.resources deleted file mode 100644 index dae3db8..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServerForm.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.AddServerForm.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.AddServerForm.zh-Hans.resources deleted file mode 100644 index 148714e..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.AddServerForm.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.BaseForm.resources b/v2rayN/obj/Debug/v2rayN.Forms.BaseForm.resources deleted file mode 100644 index 04e4a52..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.BaseForm.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.BaseServerForm.resources b/v2rayN/obj/Debug/v2rayN.Forms.BaseServerForm.resources deleted file mode 100644 index 04e4a52..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.BaseServerForm.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.MainForm.resources b/v2rayN/obj/Debug/v2rayN.Forms.MainForm.resources deleted file mode 100644 index 7a363f4..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.MainForm.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.MainForm.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.MainForm.zh-Hans.resources deleted file mode 100644 index 4d1df64..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.MainForm.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.OptionSettingForm.resources b/v2rayN/obj/Debug/v2rayN.Forms.OptionSettingForm.resources deleted file mode 100644 index 71a881d..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.OptionSettingForm.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.OptionSettingForm.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.OptionSettingForm.zh-Hans.resources deleted file mode 100644 index 256736d..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.OptionSettingForm.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.QRCodeControl.resources b/v2rayN/obj/Debug/v2rayN.Forms.QRCodeControl.resources deleted file mode 100644 index 1d4b887..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.QRCodeControl.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.QRCodeControl.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.QRCodeControl.zh-Hans.resources deleted file mode 100644 index 6c05a97..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.QRCodeControl.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.SubSettingControl.resources b/v2rayN/obj/Debug/v2rayN.Forms.SubSettingControl.resources deleted file mode 100644 index b8f21ea..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.SubSettingControl.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.SubSettingControl.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.SubSettingControl.zh-Hans.resources deleted file mode 100644 index 4690392..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.SubSettingControl.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.SubSettingForm.resources b/v2rayN/obj/Debug/v2rayN.Forms.SubSettingForm.resources deleted file mode 100644 index 5f06c2e..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.SubSettingForm.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Forms.SubSettingForm.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Forms.SubSettingForm.zh-Hans.resources deleted file mode 100644 index 8b38fe3..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Forms.SubSettingForm.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Properties.Resources.resources b/v2rayN/obj/Debug/v2rayN.Properties.Resources.resources deleted file mode 100644 index f5f06a8..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Properties.Resources.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Resx.ResUI.resources b/v2rayN/obj/Debug/v2rayN.Resx.ResUI.resources deleted file mode 100644 index 1dec93b..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Resx.ResUI.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.Resx.ResUI.zh-Hans.resources b/v2rayN/obj/Debug/v2rayN.Resx.ResUI.zh-Hans.resources deleted file mode 100644 index 5f7f7d6..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.Resx.ResUI.zh-Hans.resources and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.csproj.CopyComplete b/v2rayN/obj/Debug/v2rayN.csproj.CopyComplete deleted file mode 100644 index e69de29..0000000 diff --git a/v2rayN/obj/Debug/v2rayN.csproj.CoreCompileInputs.cache b/v2rayN/obj/Debug/v2rayN.csproj.CoreCompileInputs.cache deleted file mode 100644 index c9a60b3..0000000 --- a/v2rayN/obj/Debug/v2rayN.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -5b89f7efe0a81f5fa0626a7f55400e1101e52aa3 diff --git a/v2rayN/obj/Debug/v2rayN.csproj.FileListAbsolute.txt b/v2rayN/obj/Debug/v2rayN.csproj.FileListAbsolute.txt deleted file mode 100644 index 419502b..0000000 --- a/v2rayN/obj/Debug/v2rayN.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,178 +0,0 @@ -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\grpc_csharp_ext.x86.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\grpc_csharp_ext.x64.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x86.so -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x64.so -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x86.dylib -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x64.dylib -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\v2rayN.exe.config -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\v2rayN.exe -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\v2rayN.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\zh-Hans\v2rayN.resources.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\Google.Protobuf.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\Google.Protobuf.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.Api.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.Api.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\Newtonsoft.Json.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\System.Buffers.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\System.Memory.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\System.Runtime.CompilerServices.Unsafe.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\zxing.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\zxing.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\zxing.presentation.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\bin\Debug\zxing.presentation.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csprojAssemblyReference.cache -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.exe.config -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer6Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer4Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer5Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.BaseServerForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.MainForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingControl.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServerForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.BaseForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.OptionSettingForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.QRCodeControl.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer2Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer3Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Properties.Resources.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Resx.ResUI.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer2Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer6Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer4Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer3Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer5Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServerForm.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.MainForm.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.OptionSettingForm.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.QRCodeControl.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingControl.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingForm.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Resx.ResUI.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.GenerateResource.cache -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.CoreCompileInputs.cache -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\zh-Hans\v2rayN.resources.dll -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.CopyComplete -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.exe -C:\Users\nanamao\Downloads\Projects\v2rayN-3.29\v2rayN\v2rayN\obj\Debug\v2rayN.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\grpc_csharp_ext.x86.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\grpc_csharp_ext.x64.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x86.so -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x64.so -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x86.dylib -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x64.dylib -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\v2rayN.exe.config -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\v2rayN.exe -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\v2rayN.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zh-Hans\v2rayN.resources.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Google.Protobuf.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Google.Protobuf.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.Api.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.Api.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Newtonsoft.Json.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\System.Buffers.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\System.Memory.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\System.Runtime.CompilerServices.Unsafe.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zxing.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zxing.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zxing.presentation.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zxing.presentation.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.exe.config -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer6Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer4Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer5Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.BaseServerForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.MainForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingControl.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServerForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.BaseForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.OptionSettingForm.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.QRCodeControl.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer2Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer3Form.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Properties.Resources.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Resx.ResUI.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer2Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer6Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer4Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer3Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer5Form.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServerForm.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.MainForm.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.OptionSettingForm.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.QRCodeControl.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingControl.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingForm.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Resx.ResUI.zh-Hans.resources -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.GenerateResource.cache -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.CoreCompileInputs.cache -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\zh-Hans\v2rayN.resources.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.CopyComplete -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.exe -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.pdb -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\System.Numerics.Vectors.dll -C:\Users\nanamao\Downloads\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csprojAssemblyReference.cache -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\grpc_csharp_ext.x86.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\grpc_csharp_ext.x64.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x86.so -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x64.so -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x86.dylib -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\libgrpc_csharp_ext.x64.dylib -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\v2rayN.exe.config -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\v2rayN.exe -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\v2rayN.pdb -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zh-Hans\v2rayN.resources.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Google.Protobuf.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Google.Protobuf.pdb -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.pdb -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.Api.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Grpc.Core.Api.pdb -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\Newtonsoft.Json.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\System.Buffers.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\System.Memory.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\System.Numerics.Vectors.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\System.Runtime.CompilerServices.Unsafe.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zxing.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zxing.pdb -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zxing.presentation.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\bin\Debug\zxing.presentation.pdb -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.exe.config -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer6Form.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer4Form.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer5Form.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.BaseServerForm.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.MainForm.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingControl.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingForm.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServerForm.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.BaseForm.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.OptionSettingForm.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.QRCodeControl.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer2Form.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer3Form.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Properties.Resources.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Resx.ResUI.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer2Form.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer6Form.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer4Form.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer3Form.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServer5Form.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.AddServerForm.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.MainForm.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.OptionSettingForm.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.QRCodeControl.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingControl.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Forms.SubSettingForm.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.Resx.ResUI.zh-Hans.resources -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.GenerateResource.cache -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.CoreCompileInputs.cache -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\zh-Hans\v2rayN.resources.dll -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.csproj.CopyComplete -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.exe -C:\Users\nanamao\Documents\Projects\v2rayN_3.29\v2rayN\v2rayN\obj\Debug\v2rayN.pdb diff --git a/v2rayN/obj/Debug/v2rayN.csproj.GenerateResource.cache b/v2rayN/obj/Debug/v2rayN.csproj.GenerateResource.cache deleted file mode 100644 index 5cd9207..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.csproj.GenerateResource.cache and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.exe b/v2rayN/obj/Debug/v2rayN.exe deleted file mode 100644 index 51b4933..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.exe and /dev/null differ diff --git a/v2rayN/obj/Debug/v2rayN.exe.config b/v2rayN/obj/Debug/v2rayN.exe.config deleted file mode 100644 index 5a73e96..0000000 --- a/v2rayN/obj/Debug/v2rayN.exe.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/v2rayN/obj/Debug/v2rayN.pdb b/v2rayN/obj/Debug/v2rayN.pdb deleted file mode 100644 index 2987c21..0000000 Binary files a/v2rayN/obj/Debug/v2rayN.pdb and /dev/null differ diff --git a/v2rayN/obj/Debug/zh-Hans/v2rayN.resources.dll b/v2rayN/obj/Debug/zh-Hans/v2rayN.resources.dll deleted file mode 100644 index 839448c..0000000 Binary files a/v2rayN/obj/Debug/zh-Hans/v2rayN.resources.dll and /dev/null differ diff --git a/v2rayN/obj/project.assets.json b/v2rayN/obj/project.assets.json deleted file mode 100644 index ab5a210..0000000 --- a/v2rayN/obj/project.assets.json +++ /dev/null @@ -1,973 +0,0 @@ -{ - "version": 3, - "targets": { - ".NETFramework,Version=v4.8": { - "Google.Protobuf/3.11.4": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.2" - }, - "compile": { - "lib/net45/Google.Protobuf.dll": {} - }, - "runtime": { - "lib/net45/Google.Protobuf.dll": {} - } - }, - "Grpc.Core/2.27.0": { - "type": "package", - "dependencies": { - "Grpc.Core.Api": "2.27.0", - "System.Memory": "4.5.3" - }, - "frameworkAssemblies": [ - "Microsoft.CSharp", - "System" - ], - "compile": { - "lib/net45/Grpc.Core.dll": {} - }, - "runtime": { - "lib/net45/Grpc.Core.dll": {} - }, - "build": { - "build/net45/Grpc.Core.targets": {} - }, - "runtimeTargets": { - "runtimes/linux/native/libgrpc_csharp_ext.x64.so": { - "assetType": "native", - "rid": "linux" - }, - "runtimes/linux/native/libgrpc_csharp_ext.x86.so": { - "assetType": "native", - "rid": "linux" - }, - "runtimes/osx/native/libgrpc_csharp_ext.x64.dylib": { - "assetType": "native", - "rid": "osx" - }, - "runtimes/osx/native/libgrpc_csharp_ext.x86.dylib": { - "assetType": "native", - "rid": "osx" - }, - "runtimes/win/native/grpc_csharp_ext.x64.dll": { - "assetType": "native", - "rid": "win" - }, - "runtimes/win/native/grpc_csharp_ext.x86.dll": { - "assetType": "native", - "rid": "win" - } - } - }, - "Grpc.Core.Api/2.27.0": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.3" - }, - "frameworkAssemblies": [ - "Microsoft.CSharp", - "System" - ], - "compile": { - "lib/net45/Grpc.Core.Api.dll": {} - }, - "runtime": { - "lib/net45/Grpc.Core.Api.dll": {} - } - }, - "Grpc.Tools/2.27.0": { - "type": "package", - "build": { - "build/Grpc.Tools.props": {}, - "build/Grpc.Tools.targets": {} - } - }, - "Newtonsoft.Json/12.0.3": { - "type": "package", - "compile": { - "lib/net45/Newtonsoft.Json.dll": {} - }, - "runtime": { - "lib/net45/Newtonsoft.Json.dll": {} - } - }, - "System.Buffers/4.4.0": { - "type": "package", - "compile": { - "ref/netstandard2.0/System.Buffers.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Buffers.dll": {} - } - }, - "System.Memory/4.5.3": { - "type": "package", - "dependencies": { - "System.Buffers": "4.4.0", - "System.Numerics.Vectors": "4.4.0", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" - }, - "compile": { - "lib/netstandard2.0/System.Memory.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Memory.dll": {} - } - }, - "System.Numerics.Vectors/4.4.0": { - "type": "package", - "frameworkAssemblies": [ - "System.Numerics", - "mscorlib" - ], - "compile": { - "ref/net46/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/net46/System.Numerics.Vectors.dll": {} - } - }, - "System.Runtime.CompilerServices.Unsafe/4.5.2": { - "type": "package", - "compile": { - "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {} - } - }, - "ZXing.Net/0.16.5": { - "type": "package", - "compile": { - "lib/net48/zxing.dll": {}, - "lib/net48/zxing.presentation.dll": {} - }, - "runtime": { - "lib/net48/zxing.dll": {}, - "lib/net48/zxing.presentation.dll": {} - } - } - }, - ".NETFramework,Version=v4.8/win": { - "Google.Protobuf/3.11.4": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.2" - }, - "compile": { - "lib/net45/Google.Protobuf.dll": {} - }, - "runtime": { - "lib/net45/Google.Protobuf.dll": {} - } - }, - "Grpc.Core/2.27.0": { - "type": "package", - "dependencies": { - "Grpc.Core.Api": "2.27.0", - "System.Memory": "4.5.3" - }, - "frameworkAssemblies": [ - "Microsoft.CSharp", - "System" - ], - "compile": { - "lib/net45/Grpc.Core.dll": {} - }, - "runtime": { - "lib/net45/Grpc.Core.dll": {} - }, - "native": { - "runtimes/win/native/grpc_csharp_ext.x64.dll": {}, - "runtimes/win/native/grpc_csharp_ext.x86.dll": {} - }, - "build": { - "build/net45/Grpc.Core.targets": {} - } - }, - "Grpc.Core.Api/2.27.0": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.3" - }, - "frameworkAssemblies": [ - "Microsoft.CSharp", - "System" - ], - "compile": { - "lib/net45/Grpc.Core.Api.dll": {} - }, - "runtime": { - "lib/net45/Grpc.Core.Api.dll": {} - } - }, - "Grpc.Tools/2.27.0": { - "type": "package", - "build": { - "build/Grpc.Tools.props": {}, - "build/Grpc.Tools.targets": {} - } - }, - "Newtonsoft.Json/12.0.3": { - "type": "package", - "compile": { - "lib/net45/Newtonsoft.Json.dll": {} - }, - "runtime": { - "lib/net45/Newtonsoft.Json.dll": {} - } - }, - "System.Buffers/4.4.0": { - "type": "package", - "compile": { - "ref/netstandard2.0/System.Buffers.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Buffers.dll": {} - } - }, - "System.Memory/4.5.3": { - "type": "package", - "dependencies": { - "System.Buffers": "4.4.0", - "System.Numerics.Vectors": "4.4.0", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" - }, - "compile": { - "lib/netstandard2.0/System.Memory.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Memory.dll": {} - } - }, - "System.Numerics.Vectors/4.4.0": { - "type": "package", - "frameworkAssemblies": [ - "System.Numerics", - "mscorlib" - ], - "compile": { - "ref/net46/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/net46/System.Numerics.Vectors.dll": {} - } - }, - "System.Runtime.CompilerServices.Unsafe/4.5.2": { - "type": "package", - "compile": { - "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {} - } - }, - "ZXing.Net/0.16.5": { - "type": "package", - "compile": { - "lib/net48/zxing.dll": {}, - "lib/net48/zxing.presentation.dll": {} - }, - "runtime": { - "lib/net48/zxing.dll": {}, - "lib/net48/zxing.presentation.dll": {} - } - } - }, - ".NETFramework,Version=v4.8/win-x64": { - "Google.Protobuf/3.11.4": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.2" - }, - "compile": { - "lib/net45/Google.Protobuf.dll": {} - }, - "runtime": { - "lib/net45/Google.Protobuf.dll": {} - } - }, - "Grpc.Core/2.27.0": { - "type": "package", - "dependencies": { - "Grpc.Core.Api": "2.27.0", - "System.Memory": "4.5.3" - }, - "frameworkAssemblies": [ - "Microsoft.CSharp", - "System" - ], - "compile": { - "lib/net45/Grpc.Core.dll": {} - }, - "runtime": { - "lib/net45/Grpc.Core.dll": {} - }, - "build": { - "build/net45/Grpc.Core.targets": {} - } - }, - "Grpc.Core.Api/2.27.0": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.3" - }, - "frameworkAssemblies": [ - "Microsoft.CSharp", - "System" - ], - "compile": { - "lib/net45/Grpc.Core.Api.dll": {} - }, - "runtime": { - "lib/net45/Grpc.Core.Api.dll": {} - } - }, - "Grpc.Tools/2.27.0": { - "type": "package", - "build": { - "build/Grpc.Tools.props": {}, - "build/Grpc.Tools.targets": {} - } - }, - "Newtonsoft.Json/12.0.3": { - "type": "package", - "compile": { - "lib/net45/Newtonsoft.Json.dll": {} - }, - "runtime": { - "lib/net45/Newtonsoft.Json.dll": {} - } - }, - "System.Buffers/4.4.0": { - "type": "package", - "compile": { - "ref/netstandard2.0/System.Buffers.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Buffers.dll": {} - } - }, - "System.Memory/4.5.3": { - "type": "package", - "dependencies": { - "System.Buffers": "4.4.0", - "System.Numerics.Vectors": "4.4.0", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" - }, - "compile": { - "lib/netstandard2.0/System.Memory.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Memory.dll": {} - } - }, - "System.Numerics.Vectors/4.4.0": { - "type": "package", - "frameworkAssemblies": [ - "System.Numerics", - "mscorlib" - ], - "compile": { - "ref/net46/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/net46/System.Numerics.Vectors.dll": {} - } - }, - "System.Runtime.CompilerServices.Unsafe/4.5.2": { - "type": "package", - "compile": { - "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {} - } - }, - "ZXing.Net/0.16.5": { - "type": "package", - "compile": { - "lib/net48/zxing.dll": {}, - "lib/net48/zxing.presentation.dll": {} - }, - "runtime": { - "lib/net48/zxing.dll": {}, - "lib/net48/zxing.presentation.dll": {} - } - } - }, - ".NETFramework,Version=v4.8/win-x86": { - "Google.Protobuf/3.11.4": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.2" - }, - "compile": { - "lib/net45/Google.Protobuf.dll": {} - }, - "runtime": { - "lib/net45/Google.Protobuf.dll": {} - } - }, - "Grpc.Core/2.27.0": { - "type": "package", - "dependencies": { - "Grpc.Core.Api": "2.27.0", - "System.Memory": "4.5.3" - }, - "frameworkAssemblies": [ - "Microsoft.CSharp", - "System" - ], - "compile": { - "lib/net45/Grpc.Core.dll": {} - }, - "runtime": { - "lib/net45/Grpc.Core.dll": {} - }, - "build": { - "build/net45/Grpc.Core.targets": {} - } - }, - "Grpc.Core.Api/2.27.0": { - "type": "package", - "dependencies": { - "System.Memory": "4.5.3" - }, - "frameworkAssemblies": [ - "Microsoft.CSharp", - "System" - ], - "compile": { - "lib/net45/Grpc.Core.Api.dll": {} - }, - "runtime": { - "lib/net45/Grpc.Core.Api.dll": {} - } - }, - "Grpc.Tools/2.27.0": { - "type": "package", - "build": { - "build/Grpc.Tools.props": {}, - "build/Grpc.Tools.targets": {} - } - }, - "Newtonsoft.Json/12.0.3": { - "type": "package", - "compile": { - "lib/net45/Newtonsoft.Json.dll": {} - }, - "runtime": { - "lib/net45/Newtonsoft.Json.dll": {} - } - }, - "System.Buffers/4.4.0": { - "type": "package", - "compile": { - "ref/netstandard2.0/System.Buffers.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Buffers.dll": {} - } - }, - "System.Memory/4.5.3": { - "type": "package", - "dependencies": { - "System.Buffers": "4.4.0", - "System.Numerics.Vectors": "4.4.0", - "System.Runtime.CompilerServices.Unsafe": "4.5.2" - }, - "compile": { - "lib/netstandard2.0/System.Memory.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Memory.dll": {} - } - }, - "System.Numerics.Vectors/4.4.0": { - "type": "package", - "frameworkAssemblies": [ - "System.Numerics", - "mscorlib" - ], - "compile": { - "ref/net46/System.Numerics.Vectors.dll": {} - }, - "runtime": { - "lib/net46/System.Numerics.Vectors.dll": {} - } - }, - "System.Runtime.CompilerServices.Unsafe/4.5.2": { - "type": "package", - "compile": { - "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {} - }, - "runtime": { - "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {} - } - }, - "ZXing.Net/0.16.5": { - "type": "package", - "compile": { - "lib/net48/zxing.dll": {}, - "lib/net48/zxing.presentation.dll": {} - }, - "runtime": { - "lib/net48/zxing.dll": {}, - "lib/net48/zxing.presentation.dll": {} - } - } - } - }, - "libraries": { - "Google.Protobuf/3.11.4": { - "sha512": "dajCxjDCiPyZuqwZCkFJTwhn/0TJ5VesIs4fXvs56ez1VUi68JjhYMMsPjnJ9gcPqJwTMtXMU1WqUdXYiG1x4w==", - "type": "package", - "path": "google.protobuf/3.11.4", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "google.protobuf.3.11.4.nupkg.sha512", - "google.protobuf.nuspec", - "lib/net45/Google.Protobuf.dll", - "lib/net45/Google.Protobuf.pdb", - "lib/net45/Google.Protobuf.xml", - "lib/netstandard1.0/Google.Protobuf.dll", - "lib/netstandard1.0/Google.Protobuf.pdb", - "lib/netstandard1.0/Google.Protobuf.xml", - "lib/netstandard2.0/Google.Protobuf.dll", - "lib/netstandard2.0/Google.Protobuf.pdb", - "lib/netstandard2.0/Google.Protobuf.xml" - ] - }, - "Grpc.Core/2.27.0": { - "sha512": "iNWowSeJvGCkFwKxpJmhpRBrgAJ0kB+iwyZ0b0z2w1hCqs2ho02699TmDn6IwCgJrTfXtYnsBVevD+gKprmbug==", - "type": "package", - "path": "grpc.core/2.27.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "build/MonoAndroid10/Grpc.Core.targets", - "build/Xamarin.iOS10/Grpc.Core.targets", - "build/net45/Grpc.Core.targets", - "grpc.core.2.27.0.nupkg.sha512", - "grpc.core.nuspec", - "lib/net45/Grpc.Core.dll", - "lib/net45/Grpc.Core.pdb", - "lib/net45/Grpc.Core.xml", - "lib/netstandard1.5/Grpc.Core.dll", - "lib/netstandard1.5/Grpc.Core.pdb", - "lib/netstandard1.5/Grpc.Core.xml", - "lib/netstandard2.0/Grpc.Core.dll", - "lib/netstandard2.0/Grpc.Core.pdb", - "lib/netstandard2.0/Grpc.Core.xml", - "native/android/arm64-v8a/libgrpc_csharp_ext.so", - "native/android/armeabi-v7a/libgrpc_csharp_ext.so", - "native/android/x86/libgrpc_csharp_ext.so", - "native/ios/universal/libgrpc.a", - "native/ios/universal/libgrpc_csharp_ext.a", - "runtimes/linux/native/libgrpc_csharp_ext.x64.so", - "runtimes/linux/native/libgrpc_csharp_ext.x86.so", - "runtimes/osx/native/libgrpc_csharp_ext.x64.dylib", - "runtimes/osx/native/libgrpc_csharp_ext.x86.dylib", - "runtimes/win/native/grpc_csharp_ext.x64.dll", - "runtimes/win/native/grpc_csharp_ext.x86.dll" - ] - }, - "Grpc.Core.Api/2.27.0": { - "sha512": "UAHXfV+n6TEMCybML7V+1qWP7G9byGXUE2mtATWpctP7xB8P5J++iYMuyxrprKkC36X/QuUwHJmHpBxlDHzF2g==", - "type": "package", - "path": "grpc.core.api/2.27.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "grpc.core.api.2.27.0.nupkg.sha512", - "grpc.core.api.nuspec", - "lib/net45/Grpc.Core.Api.dll", - "lib/net45/Grpc.Core.Api.pdb", - "lib/net45/Grpc.Core.Api.xml", - "lib/netstandard1.5/Grpc.Core.Api.dll", - "lib/netstandard1.5/Grpc.Core.Api.pdb", - "lib/netstandard1.5/Grpc.Core.Api.xml", - "lib/netstandard2.0/Grpc.Core.Api.dll", - "lib/netstandard2.0/Grpc.Core.Api.pdb", - "lib/netstandard2.0/Grpc.Core.Api.xml" - ] - }, - "Grpc.Tools/2.27.0": { - "sha512": "eaDHiBziIPLpJ9vLGgxW3YXgHhYCKi0yPgyVuDM1dSTQEzwzannL9i9aqaPfcVliY/vWDCik3ki0PPwxzLUdww==", - "type": "package", - "path": "grpc.tools/2.27.0", - "hasTools": true, - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "build/Grpc.Tools.props", - "build/Grpc.Tools.targets", - "build/_grpc/Grpc.CSharp.xml", - "build/_grpc/_Grpc.Tools.props", - "build/_grpc/_Grpc.Tools.targets", - "build/_protobuf/Google.Protobuf.Tools.props", - "build/_protobuf/Google.Protobuf.Tools.targets", - "build/_protobuf/Protobuf.CSharp.xml", - "build/_protobuf/net45/Protobuf.MSBuild.dll", - "build/_protobuf/netstandard1.3/Protobuf.MSBuild.dll", - "build/native/Grpc.Tools.props", - "build/native/include/google/protobuf/any.proto", - "build/native/include/google/protobuf/api.proto", - "build/native/include/google/protobuf/descriptor.proto", - "build/native/include/google/protobuf/duration.proto", - "build/native/include/google/protobuf/empty.proto", - "build/native/include/google/protobuf/field_mask.proto", - "build/native/include/google/protobuf/source_context.proto", - "build/native/include/google/protobuf/struct.proto", - "build/native/include/google/protobuf/timestamp.proto", - "build/native/include/google/protobuf/type.proto", - "build/native/include/google/protobuf/wrappers.proto", - "grpc.tools.2.27.0.nupkg.sha512", - "grpc.tools.nuspec", - "tools/linux_x64/grpc_csharp_plugin", - "tools/linux_x64/protoc", - "tools/linux_x86/grpc_csharp_plugin", - "tools/linux_x86/protoc", - "tools/macosx_x64/grpc_csharp_plugin", - "tools/macosx_x64/protoc", - "tools/macosx_x86/grpc_csharp_plugin", - "tools/macosx_x86/protoc", - "tools/windows_x64/grpc_csharp_plugin.exe", - "tools/windows_x64/protoc.exe", - "tools/windows_x86/grpc_csharp_plugin.exe", - "tools/windows_x86/protoc.exe" - ] - }, - "Newtonsoft.Json/12.0.3": { - "sha512": "6mgjfnRB4jKMlzHSl+VD+oUc1IebOZabkbyWj2RiTgWwYPPuaK1H97G1sHqGwPlS5npiF5Q0OrxN1wni2n5QWg==", - "type": "package", - "path": "newtonsoft.json/12.0.3", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.md", - "lib/net20/Newtonsoft.Json.dll", - "lib/net20/Newtonsoft.Json.xml", - "lib/net35/Newtonsoft.Json.dll", - "lib/net35/Newtonsoft.Json.xml", - "lib/net40/Newtonsoft.Json.dll", - "lib/net40/Newtonsoft.Json.xml", - "lib/net45/Newtonsoft.Json.dll", - "lib/net45/Newtonsoft.Json.xml", - "lib/netstandard1.0/Newtonsoft.Json.dll", - "lib/netstandard1.0/Newtonsoft.Json.xml", - "lib/netstandard1.3/Newtonsoft.Json.dll", - "lib/netstandard1.3/Newtonsoft.Json.xml", - "lib/netstandard2.0/Newtonsoft.Json.dll", - "lib/netstandard2.0/Newtonsoft.Json.xml", - "lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.dll", - "lib/portable-net40+sl5+win8+wp8+wpa81/Newtonsoft.Json.xml", - "lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.dll", - "lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.xml", - "newtonsoft.json.12.0.3.nupkg.sha512", - "newtonsoft.json.nuspec", - "packageIcon.png" - ] - }, - "System.Buffers/4.4.0": { - "sha512": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==", - "type": "package", - "path": "system.buffers/4.4.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/netcoreapp2.0/_._", - "lib/netstandard1.1/System.Buffers.dll", - "lib/netstandard1.1/System.Buffers.xml", - "lib/netstandard2.0/System.Buffers.dll", - "lib/netstandard2.0/System.Buffers.xml", - "ref/netcoreapp2.0/_._", - "ref/netstandard1.1/System.Buffers.dll", - "ref/netstandard1.1/System.Buffers.xml", - "ref/netstandard2.0/System.Buffers.dll", - "ref/netstandard2.0/System.Buffers.xml", - "system.buffers.4.4.0.nupkg.sha512", - "system.buffers.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "System.Memory/4.5.3": { - "sha512": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==", - "type": "package", - "path": "system.memory/4.5.3", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/netcoreapp2.1/_._", - "lib/netstandard1.1/System.Memory.dll", - "lib/netstandard1.1/System.Memory.xml", - "lib/netstandard2.0/System.Memory.dll", - "lib/netstandard2.0/System.Memory.xml", - "ref/netcoreapp2.1/_._", - "system.memory.4.5.3.nupkg.sha512", - "system.memory.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "System.Numerics.Vectors/4.4.0": { - "sha512": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==", - "type": "package", - "path": "system.numerics.vectors/4.4.0", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/MonoAndroid10/_._", - "lib/MonoTouch10/_._", - "lib/net46/System.Numerics.Vectors.dll", - "lib/net46/System.Numerics.Vectors.xml", - "lib/netcoreapp2.0/_._", - "lib/netstandard1.0/System.Numerics.Vectors.dll", - "lib/netstandard1.0/System.Numerics.Vectors.xml", - "lib/netstandard2.0/System.Numerics.Vectors.dll", - "lib/netstandard2.0/System.Numerics.Vectors.xml", - "lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.dll", - "lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml", - "lib/xamarinios10/_._", - "lib/xamarinmac20/_._", - "lib/xamarintvos10/_._", - "lib/xamarinwatchos10/_._", - "ref/MonoAndroid10/_._", - "ref/MonoTouch10/_._", - "ref/net46/System.Numerics.Vectors.dll", - "ref/net46/System.Numerics.Vectors.xml", - "ref/netcoreapp2.0/_._", - "ref/netstandard1.0/System.Numerics.Vectors.dll", - "ref/netstandard1.0/System.Numerics.Vectors.xml", - "ref/netstandard2.0/System.Numerics.Vectors.dll", - "ref/netstandard2.0/System.Numerics.Vectors.xml", - "ref/xamarinios10/_._", - "ref/xamarinmac20/_._", - "ref/xamarintvos10/_._", - "ref/xamarinwatchos10/_._", - "system.numerics.vectors.4.4.0.nupkg.sha512", - "system.numerics.vectors.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "System.Runtime.CompilerServices.Unsafe/4.5.2": { - "sha512": "wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ==", - "type": "package", - "path": "system.runtime.compilerservices.unsafe/4.5.2", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "LICENSE.TXT", - "THIRD-PARTY-NOTICES.TXT", - "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll", - "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml", - "lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll", - "lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml", - "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", - "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", - "ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll", - "ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml", - "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", - "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", - "system.runtime.compilerservices.unsafe.4.5.2.nupkg.sha512", - "system.runtime.compilerservices.unsafe.nuspec", - "useSharedDesignerContext.txt", - "version.txt" - ] - }, - "ZXing.Net/0.16.5": { - "sha512": "FYZht7J1G8U3l7muiXl+OiBvJ7PkvsQKDgOhqUZe7/Sps7ys+ICWwLoYNygEOLPR476x8tJDB2we8V0a6bbz8A==", - "type": "package", - "path": "zxing.net/0.16.5", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "lib/MonoAndroid/zxing.monoandroid.dll", - "lib/MonoAndroid/zxing.monoandroid.pdb", - "lib/MonoAndroid/zxing.monoandroid.xml", - "lib/native/zxing.XML", - "lib/native/zxing.pdb", - "lib/native/zxing.pri", - "lib/native/zxing.winmd", - "lib/net20-cf/zxing.ce2.0.dll", - "lib/net20-cf/zxing.ce2.0.pdb", - "lib/net20-cf/zxing.ce2.0.xml", - "lib/net20/zxing.XML", - "lib/net20/zxing.dll", - "lib/net20/zxing.pdb", - "lib/net35-cf/zxing.ce3.5.dll", - "lib/net35-cf/zxing.ce3.5.pdb", - "lib/net35-cf/zxing.ce3.5.xml", - "lib/net35/zxing.XML", - "lib/net35/zxing.dll", - "lib/net35/zxing.pdb", - "lib/net40/zxing.XML", - "lib/net40/zxing.dll", - "lib/net40/zxing.pdb", - "lib/net40/zxing.presentation.XML", - "lib/net40/zxing.presentation.dll", - "lib/net40/zxing.presentation.pdb", - "lib/net45/zxing.XML", - "lib/net45/zxing.dll", - "lib/net45/zxing.pdb", - "lib/net45/zxing.presentation.XML", - "lib/net45/zxing.presentation.dll", - "lib/net45/zxing.presentation.pdb", - "lib/net461/zxing.XML", - "lib/net461/zxing.dll", - "lib/net461/zxing.pdb", - "lib/net461/zxing.presentation.XML", - "lib/net461/zxing.presentation.dll", - "lib/net461/zxing.presentation.pdb", - "lib/net47/zxing.XML", - "lib/net47/zxing.dll", - "lib/net47/zxing.pdb", - "lib/net47/zxing.presentation.XML", - "lib/net47/zxing.presentation.dll", - "lib/net47/zxing.presentation.pdb", - "lib/net48/zxing.XML", - "lib/net48/zxing.dll", - "lib/net48/zxing.pdb", - "lib/net48/zxing.presentation.XML", - "lib/net48/zxing.presentation.dll", - "lib/net48/zxing.presentation.pdb", - "lib/netcoreapp3.0/zxing.dll", - "lib/netcoreapp3.0/zxing.pdb", - "lib/netcoreapp3.0/zxing.xml", - "lib/netstandard1.0/zxing.dll", - "lib/netstandard1.0/zxing.pdb", - "lib/netstandard1.0/zxing.xml", - "lib/netstandard1.1/zxing.dll", - "lib/netstandard1.1/zxing.pdb", - "lib/netstandard1.1/zxing.xml", - "lib/netstandard1.3/zxing.dll", - "lib/netstandard1.3/zxing.pdb", - "lib/netstandard1.3/zxing.xml", - "lib/netstandard2.0/zxing.dll", - "lib/netstandard2.0/zxing.pdb", - "lib/netstandard2.0/zxing.xml", - "lib/portable-win+net40+sl4+sl5+wp7+wp71+wp8/zxing.portable.XML", - "lib/portable-win+net40+sl4+sl5+wp7+wp71+wp8/zxing.portable.dll", - "lib/portable-win+net40+sl4+sl5+wp7+wp71+wp8/zxing.portable.pdb", - "lib/sl3-wp/zxing.wp7.0.XML", - "lib/sl3-wp/zxing.wp7.0.dll", - "lib/sl3-wp/zxing.wp7.0.pdb", - "lib/sl4-wp71/zxing.wp7.1.XML", - "lib/sl4-wp71/zxing.wp7.1.dll", - "lib/sl4-wp71/zxing.wp7.1.pdb", - "lib/sl4/zxing.sl4.XML", - "lib/sl4/zxing.sl4.dll", - "lib/sl4/zxing.sl4.pdb", - "lib/sl5/zxing.sl5.XML", - "lib/sl5/zxing.sl5.dll", - "lib/sl5/zxing.sl5.pdb", - "lib/uap10/zxing.dll", - "lib/uap10/zxing.pdb", - "lib/uap10/zxing.pri", - "lib/uap10/zxing.xml", - "lib/windows8-managed/zxing.winrt.XML", - "lib/windows8-managed/zxing.winrt.dll", - "lib/windows8-managed/zxing.winrt.pdb", - "lib/windows8/zxing.XML", - "lib/windows8/zxing.pdb", - "lib/windows8/zxing.pri", - "lib/windows8/zxing.winmd", - "lib/wp8/zxing.wp8.0.XML", - "lib/wp8/zxing.wp8.0.dll", - "lib/wp8/zxing.wp8.0.pdb", - "zxing.net.0.16.5.nupkg.sha512", - "zxing.net.nuspec" - ] - } - }, - "projectFileDependencyGroups": { - ".NETFramework,Version=v4.8": [ - "Google.Protobuf >= 3.11.4", - "Grpc.Core >= 2.27.0", - "Grpc.Tools >= 2.27.0", - "Newtonsoft.Json >= 12.0.3", - "ZXing.Net >= 0.16.5" - ] - }, - "packageFolders": { - "C:\\Users\\nanamao\\.nuget\\packages\\": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\v2rayN.csproj", - "projectName": "v2rayN", - "projectPath": "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\v2rayN.csproj", - "packagesPath": "C:\\Users\\nanamao\\.nuget\\packages\\", - "outputPath": "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\obj\\", - "projectStyle": "PackageReference", - "skipContentFileWrite": true, - "configFilePaths": [ - "C:\\Users\\nanamao\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net48" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net48": { - "projectReferences": {} - } - } - }, - "frameworks": { - "net48": { - "dependencies": { - "Google.Protobuf": { - "target": "Package", - "version": "[3.11.4, )" - }, - "Grpc.Core": { - "target": "Package", - "version": "[2.27.0, )" - }, - "Grpc.Tools": { - "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", - "suppressParent": "All", - "target": "Package", - "version": "[2.27.0, )" - }, - "Newtonsoft.Json": { - "target": "Package", - "version": "[12.0.3, )" - }, - "ZXing.Net": { - "target": "Package", - "version": "[0.16.5, )" - } - } - } - }, - "runtimes": { - "win": { - "#import": [] - }, - "win-x64": { - "#import": [] - }, - "win-x86": { - "#import": [] - } - } - } -} \ No newline at end of file diff --git a/v2rayN/obj/project.nuget.cache b/v2rayN/obj/project.nuget.cache deleted file mode 100644 index e0c4c1a..0000000 --- a/v2rayN/obj/project.nuget.cache +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "MH+gMdNq8WL2jUOcjwT6JzbL13RF7ozrlF8y9EpGNbvZ2Iq0xnDuD+Wo5gUDmYVo0pvSGVN2Qm/ppB3MJ487bA==", - "success": true, - "projectFilePath": "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\v2rayN.csproj", - "expectedPackageFiles": [ - "C:\\Users\\nanamao\\.nuget\\packages\\google.protobuf\\3.11.4\\google.protobuf.3.11.4.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\grpc.core\\2.27.0\\grpc.core.2.27.0.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\grpc.core.api\\2.27.0\\grpc.core.api.2.27.0.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\grpc.tools\\2.27.0\\grpc.tools.2.27.0.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\newtonsoft.json\\12.0.3\\newtonsoft.json.12.0.3.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\system.buffers\\4.4.0\\system.buffers.4.4.0.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\system.memory\\4.5.3\\system.memory.4.5.3.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\system.numerics.vectors\\4.4.0\\system.numerics.vectors.4.4.0.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\4.5.2\\system.runtime.compilerservices.unsafe.4.5.2.nupkg.sha512", - "C:\\Users\\nanamao\\.nuget\\packages\\zxing.net\\0.16.5\\zxing.net.0.16.5.nupkg.sha512" - ], - "logs": [] -} \ No newline at end of file diff --git a/v2rayN/obj/v2rayN.csproj.nuget.dgspec.json b/v2rayN/obj/v2rayN.csproj.nuget.dgspec.json deleted file mode 100644 index 30e6263..0000000 --- a/v2rayN/obj/v2rayN.csproj.nuget.dgspec.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "format": 1, - "restore": { - "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\v2rayN.csproj": {} - }, - "projects": { - "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\v2rayN.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\v2rayN.csproj", - "projectName": "v2rayN", - "projectPath": "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\v2rayN.csproj", - "packagesPath": "C:\\Users\\nanamao\\.nuget\\packages\\", - "outputPath": "C:\\Users\\nanamao\\Documents\\Projects\\v2rayN_3.29\\v2rayN\\v2rayN\\obj\\", - "projectStyle": "PackageReference", - "skipContentFileWrite": true, - "configFilePaths": [ - "C:\\Users\\nanamao\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net48" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net48": { - "projectReferences": {} - } - } - }, - "frameworks": { - "net48": { - "dependencies": { - "Google.Protobuf": { - "target": "Package", - "version": "[3.11.4, )" - }, - "Grpc.Core": { - "target": "Package", - "version": "[2.27.0, )" - }, - "Grpc.Tools": { - "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", - "suppressParent": "All", - "target": "Package", - "version": "[2.27.0, )" - }, - "Newtonsoft.Json": { - "target": "Package", - "version": "[12.0.3, )" - }, - "ZXing.Net": { - "target": "Package", - "version": "[0.16.5, )" - } - } - } - }, - "runtimes": { - "win": { - "#import": [] - }, - "win-x64": { - "#import": [] - }, - "win-x86": { - "#import": [] - } - } - } - } -} \ No newline at end of file diff --git a/v2rayN/obj/v2rayN.csproj.nuget.g.props b/v2rayN/obj/v2rayN.csproj.nuget.g.props deleted file mode 100644 index 58854d1..0000000 --- a/v2rayN/obj/v2rayN.csproj.nuget.g.props +++ /dev/null @@ -1,24 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\nanamao\.nuget\packages\ - PackageReference - 5.8.1 - - - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - - - - C:\Users\nanamao\.nuget\packages\grpc.tools\2.27.0 - - \ No newline at end of file diff --git a/v2rayN/obj/v2rayN.csproj.nuget.g.targets b/v2rayN/obj/v2rayN.csproj.nuget.g.targets deleted file mode 100644 index 17e2fd6..0000000 --- a/v2rayN/obj/v2rayN.csproj.nuget.g.targets +++ /dev/null @@ -1,10 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - - - - \ No newline at end of file diff --git a/v2rayN/obj/x64/Debug/.NETFramework,Version=v4.6.AssemblyAttributes.cs b/v2rayN/obj/x64/Debug/.NETFramework,Version=v4.6.AssemblyAttributes.cs deleted file mode 100644 index a216cb0..0000000 --- a/v2rayN/obj/x64/Debug/.NETFramework,Version=v4.6.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")] diff --git a/v2rayN/obj/x64/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs b/v2rayN/obj/x64/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs deleted file mode 100644 index 3871b18..0000000 --- a/v2rayN/obj/x64/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] diff --git a/v2rayN/obj/x64/Debug/12fbc7ffe642ca7e_Statistics.protodep b/v2rayN/obj/x64/Debug/12fbc7ffe642ca7e_Statistics.protodep deleted file mode 100644 index 75e8237..0000000 --- a/v2rayN/obj/x64/Debug/12fbc7ffe642ca7e_Statistics.protodep +++ /dev/null @@ -1,2 +0,0 @@ -obj\x64\Debug/Statistics.cs \ -obj\x64\Debug/StatisticsGrpc.cs: Protos/Statistics.proto \ No newline at end of file diff --git a/v2rayN/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/v2rayN/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index 148b322..0000000 Binary files a/v2rayN/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache and /dev/null differ diff --git a/v2rayN/obj/x64/Debug/Statistics.cs b/v2rayN/obj/x64/Debug/Statistics.cs deleted file mode 100644 index cce0741..0000000 --- a/v2rayN/obj/x64/Debug/Statistics.cs +++ /dev/null @@ -1,1386 +0,0 @@ -// -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Protos/Statistics.proto -// -#pragma warning disable 1591, 0612, 3021 -#region Designer generated code - -using pb = global::Google.Protobuf; -using pbc = global::Google.Protobuf.Collections; -using pbr = global::Google.Protobuf.Reflection; -using scg = global::System.Collections.Generic; -namespace v2rayN.Protos.Statistics { - - /// Holder for reflection information generated from Protos/Statistics.proto - public static partial class StatisticsReflection { - - #region Descriptor - /// File descriptor for Protos/Statistics.proto - public static pbr::FileDescriptor Descriptor { - get { return descriptor; } - } - private static pbr::FileDescriptor descriptor; - - static StatisticsReflection() { - byte[] descriptorData = global::System.Convert.FromBase64String( - string.Concat( - "ChdQcm90b3MvU3RhdGlzdGljcy5wcm90bxIcdjJyYXkuY29yZS5hcHAuc3Rh", - "dHMuY29tbWFuZCIuCg9HZXRTdGF0c1JlcXVlc3QSDAoEbmFtZRgBIAEoCRIN", - "CgVyZXNldBgCIAEoCCIjCgRTdGF0EgwKBG5hbWUYASABKAkSDQoFdmFsdWUY", - "AiABKAMiRAoQR2V0U3RhdHNSZXNwb25zZRIwCgRzdGF0GAEgASgLMiIudjJy", - "YXkuY29yZS5hcHAuc3RhdHMuY29tbWFuZC5TdGF0IjMKEVF1ZXJ5U3RhdHNS", - "ZXF1ZXN0Eg8KB3BhdHRlcm4YASABKAkSDQoFcmVzZXQYAiABKAgiRgoSUXVl", - "cnlTdGF0c1Jlc3BvbnNlEjAKBHN0YXQYASADKAsyIi52MnJheS5jb3JlLmFw", - "cC5zdGF0cy5jb21tYW5kLlN0YXQiEQoPU3lzU3RhdHNSZXF1ZXN0IsIBChBT", - "eXNTdGF0c1Jlc3BvbnNlEhQKDE51bUdvcm91dGluZRgBIAEoDRINCgVOdW1H", - "QxgCIAEoDRINCgVBbGxvYxgDIAEoBBISCgpUb3RhbEFsbG9jGAQgASgEEgsK", - "A1N5cxgFIAEoBBIPCgdNYWxsb2NzGAYgASgEEg0KBUZyZWVzGAcgASgEEhMK", - "C0xpdmVPYmplY3RzGAggASgEEhQKDFBhdXNlVG90YWxOcxgJIAEoBBIOCgZV", - "cHRpbWUYCiABKA0iCAoGQ29uZmlnMt4CCgxTdGF0c1NlcnZpY2USawoIR2V0", - "U3RhdHMSLS52MnJheS5jb3JlLmFwcC5zdGF0cy5jb21tYW5kLkdldFN0YXRz", - "UmVxdWVzdBouLnYycmF5LmNvcmUuYXBwLnN0YXRzLmNvbW1hbmQuR2V0U3Rh", - "dHNSZXNwb25zZSIAEnEKClF1ZXJ5U3RhdHMSLy52MnJheS5jb3JlLmFwcC5z", - "dGF0cy5jb21tYW5kLlF1ZXJ5U3RhdHNSZXF1ZXN0GjAudjJyYXkuY29yZS5h", - "cHAuc3RhdHMuY29tbWFuZC5RdWVyeVN0YXRzUmVzcG9uc2UiABJuCgtHZXRT", - "eXNTdGF0cxItLnYycmF5LmNvcmUuYXBwLnN0YXRzLmNvbW1hbmQuU3lzU3Rh", - "dHNSZXF1ZXN0Gi4udjJyYXkuY29yZS5hcHAuc3RhdHMuY29tbWFuZC5TeXNT", - "dGF0c1Jlc3BvbnNlIgBCG6oCGHYycmF5Ti5Qcm90b3MuU3RhdGlzdGljc2IG", - "cHJvdG8z")); - descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, - new pbr::FileDescriptor[] { }, - new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] { - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.GetStatsRequest), global::v2rayN.Protos.Statistics.GetStatsRequest.Parser, new[]{ "Name", "Reset" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.Stat), global::v2rayN.Protos.Statistics.Stat.Parser, new[]{ "Name", "Value" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.GetStatsResponse), global::v2rayN.Protos.Statistics.GetStatsResponse.Parser, new[]{ "Stat" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.QueryStatsRequest), global::v2rayN.Protos.Statistics.QueryStatsRequest.Parser, new[]{ "Pattern", "Reset" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.QueryStatsResponse), global::v2rayN.Protos.Statistics.QueryStatsResponse.Parser, new[]{ "Stat" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.SysStatsRequest), global::v2rayN.Protos.Statistics.SysStatsRequest.Parser, null, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.SysStatsResponse), global::v2rayN.Protos.Statistics.SysStatsResponse.Parser, new[]{ "NumGoroutine", "NumGC", "Alloc", "TotalAlloc", "Sys", "Mallocs", "Frees", "LiveObjects", "PauseTotalNs", "Uptime" }, null, null, null, null), - new pbr::GeneratedClrTypeInfo(typeof(global::v2rayN.Protos.Statistics.Config), global::v2rayN.Protos.Statistics.Config.Parser, null, null, null, null, null) - })); - } - #endregion - - } - #region Messages - public sealed partial class GetStatsRequest : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new GetStatsRequest()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[0]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsRequest() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsRequest(GetStatsRequest other) : this() { - name_ = other.name_; - reset_ = other.reset_; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsRequest Clone() { - return new GetStatsRequest(this); - } - - /// Field number for the "name" field. - public const int NameFieldNumber = 1; - private string name_ = ""; - /// - /// Name of the stat counter. - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public string Name { - get { return name_; } - set { - name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); - } - } - - /// Field number for the "reset" field. - public const int ResetFieldNumber = 2; - private bool reset_; - /// - /// Whether or not to reset the counter to fetching its value. - /// - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Reset { - get { return reset_; } - set { - reset_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as GetStatsRequest); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(GetStatsRequest other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (Name != other.Name) return false; - if (Reset != other.Reset) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (Name.Length != 0) hash ^= Name.GetHashCode(); - if (Reset != false) hash ^= Reset.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (Name.Length != 0) { - output.WriteRawTag(10); - output.WriteString(Name); - } - if (Reset != false) { - output.WriteRawTag(16); - output.WriteBool(Reset); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (Name.Length != 0) { - size += 1 + pb::CodedOutputStream.ComputeStringSize(Name); - } - if (Reset != false) { - size += 1 + 1; - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(GetStatsRequest other) { - if (other == null) { - return; - } - if (other.Name.Length != 0) { - Name = other.Name; - } - if (other.Reset != false) { - Reset = other.Reset; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - Name = input.ReadString(); - break; - } - case 16: { - Reset = input.ReadBool(); - break; - } - } - } - } - - } - - public sealed partial class Stat : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Stat()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[1]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Stat() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Stat(Stat other) : this() { - name_ = other.name_; - value_ = other.value_; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Stat Clone() { - return new Stat(this); - } - - /// Field number for the "name" field. - public const int NameFieldNumber = 1; - private string name_ = ""; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public string Name { - get { return name_; } - set { - name_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); - } - } - - /// Field number for the "value" field. - public const int ValueFieldNumber = 2; - private long value_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public long Value { - get { return value_; } - set { - value_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as Stat); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(Stat other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (Name != other.Name) return false; - if (Value != other.Value) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (Name.Length != 0) hash ^= Name.GetHashCode(); - if (Value != 0L) hash ^= Value.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (Name.Length != 0) { - output.WriteRawTag(10); - output.WriteString(Name); - } - if (Value != 0L) { - output.WriteRawTag(16); - output.WriteInt64(Value); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (Name.Length != 0) { - size += 1 + pb::CodedOutputStream.ComputeStringSize(Name); - } - if (Value != 0L) { - size += 1 + pb::CodedOutputStream.ComputeInt64Size(Value); - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(Stat other) { - if (other == null) { - return; - } - if (other.Name.Length != 0) { - Name = other.Name; - } - if (other.Value != 0L) { - Value = other.Value; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - Name = input.ReadString(); - break; - } - case 16: { - Value = input.ReadInt64(); - break; - } - } - } - } - - } - - public sealed partial class GetStatsResponse : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new GetStatsResponse()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[2]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsResponse() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsResponse(GetStatsResponse other) : this() { - stat_ = other.stat_ != null ? other.stat_.Clone() : null; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public GetStatsResponse Clone() { - return new GetStatsResponse(this); - } - - /// Field number for the "stat" field. - public const int StatFieldNumber = 1; - private global::v2rayN.Protos.Statistics.Stat stat_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public global::v2rayN.Protos.Statistics.Stat Stat { - get { return stat_; } - set { - stat_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as GetStatsResponse); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(GetStatsResponse other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (!object.Equals(Stat, other.Stat)) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (stat_ != null) hash ^= Stat.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (stat_ != null) { - output.WriteRawTag(10); - output.WriteMessage(Stat); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (stat_ != null) { - size += 1 + pb::CodedOutputStream.ComputeMessageSize(Stat); - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(GetStatsResponse other) { - if (other == null) { - return; - } - if (other.stat_ != null) { - if (stat_ == null) { - Stat = new global::v2rayN.Protos.Statistics.Stat(); - } - Stat.MergeFrom(other.Stat); - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - if (stat_ == null) { - Stat = new global::v2rayN.Protos.Statistics.Stat(); - } - input.ReadMessage(Stat); - break; - } - } - } - } - - } - - public sealed partial class QueryStatsRequest : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new QueryStatsRequest()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[3]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsRequest() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsRequest(QueryStatsRequest other) : this() { - pattern_ = other.pattern_; - reset_ = other.reset_; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsRequest Clone() { - return new QueryStatsRequest(this); - } - - /// Field number for the "pattern" field. - public const int PatternFieldNumber = 1; - private string pattern_ = ""; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public string Pattern { - get { return pattern_; } - set { - pattern_ = pb::ProtoPreconditions.CheckNotNull(value, "value"); - } - } - - /// Field number for the "reset" field. - public const int ResetFieldNumber = 2; - private bool reset_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Reset { - get { return reset_; } - set { - reset_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as QueryStatsRequest); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(QueryStatsRequest other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (Pattern != other.Pattern) return false; - if (Reset != other.Reset) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (Pattern.Length != 0) hash ^= Pattern.GetHashCode(); - if (Reset != false) hash ^= Reset.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (Pattern.Length != 0) { - output.WriteRawTag(10); - output.WriteString(Pattern); - } - if (Reset != false) { - output.WriteRawTag(16); - output.WriteBool(Reset); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (Pattern.Length != 0) { - size += 1 + pb::CodedOutputStream.ComputeStringSize(Pattern); - } - if (Reset != false) { - size += 1 + 1; - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(QueryStatsRequest other) { - if (other == null) { - return; - } - if (other.Pattern.Length != 0) { - Pattern = other.Pattern; - } - if (other.Reset != false) { - Reset = other.Reset; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - Pattern = input.ReadString(); - break; - } - case 16: { - Reset = input.ReadBool(); - break; - } - } - } - } - - } - - public sealed partial class QueryStatsResponse : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new QueryStatsResponse()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[4]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsResponse() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsResponse(QueryStatsResponse other) : this() { - stat_ = other.stat_.Clone(); - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public QueryStatsResponse Clone() { - return new QueryStatsResponse(this); - } - - /// Field number for the "stat" field. - public const int StatFieldNumber = 1; - private static readonly pb::FieldCodec _repeated_stat_codec - = pb::FieldCodec.ForMessage(10, global::v2rayN.Protos.Statistics.Stat.Parser); - private readonly pbc::RepeatedField stat_ = new pbc::RepeatedField(); - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public pbc::RepeatedField Stat { - get { return stat_; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as QueryStatsResponse); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(QueryStatsResponse other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if(!stat_.Equals(other.stat_)) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - hash ^= stat_.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - stat_.WriteTo(output, _repeated_stat_codec); - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - size += stat_.CalculateSize(_repeated_stat_codec); - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(QueryStatsResponse other) { - if (other == null) { - return; - } - stat_.Add(other.stat_); - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 10: { - stat_.AddEntriesFrom(input, _repeated_stat_codec); - break; - } - } - } - } - - } - - public sealed partial class SysStatsRequest : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new SysStatsRequest()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[5]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsRequest() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsRequest(SysStatsRequest other) : this() { - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsRequest Clone() { - return new SysStatsRequest(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as SysStatsRequest); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(SysStatsRequest other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(SysStatsRequest other) { - if (other == null) { - return; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - } - } - } - - } - - public sealed partial class SysStatsResponse : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new SysStatsResponse()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[6]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsResponse() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsResponse(SysStatsResponse other) : this() { - numGoroutine_ = other.numGoroutine_; - numGC_ = other.numGC_; - alloc_ = other.alloc_; - totalAlloc_ = other.totalAlloc_; - sys_ = other.sys_; - mallocs_ = other.mallocs_; - frees_ = other.frees_; - liveObjects_ = other.liveObjects_; - pauseTotalNs_ = other.pauseTotalNs_; - uptime_ = other.uptime_; - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public SysStatsResponse Clone() { - return new SysStatsResponse(this); - } - - /// Field number for the "NumGoroutine" field. - public const int NumGoroutineFieldNumber = 1; - private uint numGoroutine_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public uint NumGoroutine { - get { return numGoroutine_; } - set { - numGoroutine_ = value; - } - } - - /// Field number for the "NumGC" field. - public const int NumGCFieldNumber = 2; - private uint numGC_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public uint NumGC { - get { return numGC_; } - set { - numGC_ = value; - } - } - - /// Field number for the "Alloc" field. - public const int AllocFieldNumber = 3; - private ulong alloc_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong Alloc { - get { return alloc_; } - set { - alloc_ = value; - } - } - - /// Field number for the "TotalAlloc" field. - public const int TotalAllocFieldNumber = 4; - private ulong totalAlloc_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong TotalAlloc { - get { return totalAlloc_; } - set { - totalAlloc_ = value; - } - } - - /// Field number for the "Sys" field. - public const int SysFieldNumber = 5; - private ulong sys_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong Sys { - get { return sys_; } - set { - sys_ = value; - } - } - - /// Field number for the "Mallocs" field. - public const int MallocsFieldNumber = 6; - private ulong mallocs_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong Mallocs { - get { return mallocs_; } - set { - mallocs_ = value; - } - } - - /// Field number for the "Frees" field. - public const int FreesFieldNumber = 7; - private ulong frees_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong Frees { - get { return frees_; } - set { - frees_ = value; - } - } - - /// Field number for the "LiveObjects" field. - public const int LiveObjectsFieldNumber = 8; - private ulong liveObjects_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong LiveObjects { - get { return liveObjects_; } - set { - liveObjects_ = value; - } - } - - /// Field number for the "PauseTotalNs" field. - public const int PauseTotalNsFieldNumber = 9; - private ulong pauseTotalNs_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public ulong PauseTotalNs { - get { return pauseTotalNs_; } - set { - pauseTotalNs_ = value; - } - } - - /// Field number for the "Uptime" field. - public const int UptimeFieldNumber = 10; - private uint uptime_; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public uint Uptime { - get { return uptime_; } - set { - uptime_ = value; - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as SysStatsResponse); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(SysStatsResponse other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - if (NumGoroutine != other.NumGoroutine) return false; - if (NumGC != other.NumGC) return false; - if (Alloc != other.Alloc) return false; - if (TotalAlloc != other.TotalAlloc) return false; - if (Sys != other.Sys) return false; - if (Mallocs != other.Mallocs) return false; - if (Frees != other.Frees) return false; - if (LiveObjects != other.LiveObjects) return false; - if (PauseTotalNs != other.PauseTotalNs) return false; - if (Uptime != other.Uptime) return false; - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (NumGoroutine != 0) hash ^= NumGoroutine.GetHashCode(); - if (NumGC != 0) hash ^= NumGC.GetHashCode(); - if (Alloc != 0UL) hash ^= Alloc.GetHashCode(); - if (TotalAlloc != 0UL) hash ^= TotalAlloc.GetHashCode(); - if (Sys != 0UL) hash ^= Sys.GetHashCode(); - if (Mallocs != 0UL) hash ^= Mallocs.GetHashCode(); - if (Frees != 0UL) hash ^= Frees.GetHashCode(); - if (LiveObjects != 0UL) hash ^= LiveObjects.GetHashCode(); - if (PauseTotalNs != 0UL) hash ^= PauseTotalNs.GetHashCode(); - if (Uptime != 0) hash ^= Uptime.GetHashCode(); - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (NumGoroutine != 0) { - output.WriteRawTag(8); - output.WriteUInt32(NumGoroutine); - } - if (NumGC != 0) { - output.WriteRawTag(16); - output.WriteUInt32(NumGC); - } - if (Alloc != 0UL) { - output.WriteRawTag(24); - output.WriteUInt64(Alloc); - } - if (TotalAlloc != 0UL) { - output.WriteRawTag(32); - output.WriteUInt64(TotalAlloc); - } - if (Sys != 0UL) { - output.WriteRawTag(40); - output.WriteUInt64(Sys); - } - if (Mallocs != 0UL) { - output.WriteRawTag(48); - output.WriteUInt64(Mallocs); - } - if (Frees != 0UL) { - output.WriteRawTag(56); - output.WriteUInt64(Frees); - } - if (LiveObjects != 0UL) { - output.WriteRawTag(64); - output.WriteUInt64(LiveObjects); - } - if (PauseTotalNs != 0UL) { - output.WriteRawTag(72); - output.WriteUInt64(PauseTotalNs); - } - if (Uptime != 0) { - output.WriteRawTag(80); - output.WriteUInt32(Uptime); - } - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (NumGoroutine != 0) { - size += 1 + pb::CodedOutputStream.ComputeUInt32Size(NumGoroutine); - } - if (NumGC != 0) { - size += 1 + pb::CodedOutputStream.ComputeUInt32Size(NumGC); - } - if (Alloc != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Alloc); - } - if (TotalAlloc != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(TotalAlloc); - } - if (Sys != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Sys); - } - if (Mallocs != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Mallocs); - } - if (Frees != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(Frees); - } - if (LiveObjects != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(LiveObjects); - } - if (PauseTotalNs != 0UL) { - size += 1 + pb::CodedOutputStream.ComputeUInt64Size(PauseTotalNs); - } - if (Uptime != 0) { - size += 1 + pb::CodedOutputStream.ComputeUInt32Size(Uptime); - } - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(SysStatsResponse other) { - if (other == null) { - return; - } - if (other.NumGoroutine != 0) { - NumGoroutine = other.NumGoroutine; - } - if (other.NumGC != 0) { - NumGC = other.NumGC; - } - if (other.Alloc != 0UL) { - Alloc = other.Alloc; - } - if (other.TotalAlloc != 0UL) { - TotalAlloc = other.TotalAlloc; - } - if (other.Sys != 0UL) { - Sys = other.Sys; - } - if (other.Mallocs != 0UL) { - Mallocs = other.Mallocs; - } - if (other.Frees != 0UL) { - Frees = other.Frees; - } - if (other.LiveObjects != 0UL) { - LiveObjects = other.LiveObjects; - } - if (other.PauseTotalNs != 0UL) { - PauseTotalNs = other.PauseTotalNs; - } - if (other.Uptime != 0) { - Uptime = other.Uptime; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - case 8: { - NumGoroutine = input.ReadUInt32(); - break; - } - case 16: { - NumGC = input.ReadUInt32(); - break; - } - case 24: { - Alloc = input.ReadUInt64(); - break; - } - case 32: { - TotalAlloc = input.ReadUInt64(); - break; - } - case 40: { - Sys = input.ReadUInt64(); - break; - } - case 48: { - Mallocs = input.ReadUInt64(); - break; - } - case 56: { - Frees = input.ReadUInt64(); - break; - } - case 64: { - LiveObjects = input.ReadUInt64(); - break; - } - case 72: { - PauseTotalNs = input.ReadUInt64(); - break; - } - case 80: { - Uptime = input.ReadUInt32(); - break; - } - } - } - } - - } - - public sealed partial class Config : pb::IMessage { - private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Config()); - private pb::UnknownFieldSet _unknownFields; - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pb::MessageParser Parser { get { return _parser; } } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public static pbr::MessageDescriptor Descriptor { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.MessageTypes[7]; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - pbr::MessageDescriptor pb::IMessage.Descriptor { - get { return Descriptor; } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Config() { - OnConstruction(); - } - - partial void OnConstruction(); - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Config(Config other) : this() { - _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public Config Clone() { - return new Config(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override bool Equals(object other) { - return Equals(other as Config); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public bool Equals(Config other) { - if (ReferenceEquals(other, null)) { - return false; - } - if (ReferenceEquals(other, this)) { - return true; - } - return Equals(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override int GetHashCode() { - int hash = 1; - if (_unknownFields != null) { - hash ^= _unknownFields.GetHashCode(); - } - return hash; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public override string ToString() { - return pb::JsonFormatter.ToDiagnosticString(this); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void WriteTo(pb::CodedOutputStream output) { - if (_unknownFields != null) { - _unknownFields.WriteTo(output); - } - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public int CalculateSize() { - int size = 0; - if (_unknownFields != null) { - size += _unknownFields.CalculateSize(); - } - return size; - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(Config other) { - if (other == null) { - return; - } - _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); - } - - [global::System.Diagnostics.DebuggerNonUserCodeAttribute] - public void MergeFrom(pb::CodedInputStream input) { - uint tag; - while ((tag = input.ReadTag()) != 0) { - switch(tag) { - default: - _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); - break; - } - } - } - - } - - #endregion - -} - -#endregion Designer generated code diff --git a/v2rayN/obj/x64/Debug/StatisticsGrpc.cs b/v2rayN/obj/x64/Debug/StatisticsGrpc.cs deleted file mode 100644 index 079100d..0000000 --- a/v2rayN/obj/x64/Debug/StatisticsGrpc.cs +++ /dev/null @@ -1,171 +0,0 @@ -// -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: Protos/Statistics.proto -// -#pragma warning disable 0414, 1591 -#region Designer generated code - -using grpc = global::Grpc.Core; - -namespace v2rayN.Protos.Statistics { - public static partial class StatsService - { - static readonly string __ServiceName = "v2ray.core.app.stats.command.StatsService"; - - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_GetStatsRequest = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.GetStatsRequest.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_GetStatsResponse = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.GetStatsResponse.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_QueryStatsRequest = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.QueryStatsRequest.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_QueryStatsResponse = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.QueryStatsResponse.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_SysStatsRequest = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.SysStatsRequest.Parser.ParseFrom); - static readonly grpc::Marshaller __Marshaller_v2ray_core_app_stats_command_SysStatsResponse = grpc::Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::v2rayN.Protos.Statistics.SysStatsResponse.Parser.ParseFrom); - - static readonly grpc::Method __Method_GetStats = new grpc::Method( - grpc::MethodType.Unary, - __ServiceName, - "GetStats", - __Marshaller_v2ray_core_app_stats_command_GetStatsRequest, - __Marshaller_v2ray_core_app_stats_command_GetStatsResponse); - - static readonly grpc::Method __Method_QueryStats = new grpc::Method( - grpc::MethodType.Unary, - __ServiceName, - "QueryStats", - __Marshaller_v2ray_core_app_stats_command_QueryStatsRequest, - __Marshaller_v2ray_core_app_stats_command_QueryStatsResponse); - - static readonly grpc::Method __Method_GetSysStats = new grpc::Method( - grpc::MethodType.Unary, - __ServiceName, - "GetSysStats", - __Marshaller_v2ray_core_app_stats_command_SysStatsRequest, - __Marshaller_v2ray_core_app_stats_command_SysStatsResponse); - - /// Service descriptor - public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor - { - get { return global::v2rayN.Protos.Statistics.StatisticsReflection.Descriptor.Services[0]; } - } - - /// Base class for server-side implementations of StatsService - [grpc::BindServiceMethod(typeof(StatsService), "BindService")] - public abstract partial class StatsServiceBase - { - public virtual global::System.Threading.Tasks.Task GetStats(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::ServerCallContext context) - { - throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, "")); - } - - public virtual global::System.Threading.Tasks.Task QueryStats(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::ServerCallContext context) - { - throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, "")); - } - - public virtual global::System.Threading.Tasks.Task GetSysStats(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::ServerCallContext context) - { - throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, "")); - } - - } - - /// Client for StatsService - public partial class StatsServiceClient : grpc::ClientBase - { - /// Creates a new client for StatsService - /// The channel to use to make remote calls. - public StatsServiceClient(grpc::ChannelBase channel) : base(channel) - { - } - /// Creates a new client for StatsService that uses a custom CallInvoker. - /// The callInvoker to use to make remote calls. - public StatsServiceClient(grpc::CallInvoker callInvoker) : base(callInvoker) - { - } - /// Protected parameterless constructor to allow creation of test doubles. - protected StatsServiceClient() : base() - { - } - /// Protected constructor to allow creation of configured clients. - /// The client configuration. - protected StatsServiceClient(ClientBaseConfiguration configuration) : base(configuration) - { - } - - public virtual global::v2rayN.Protos.Statistics.GetStatsResponse GetStats(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return GetStats(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual global::v2rayN.Protos.Statistics.GetStatsResponse GetStats(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.BlockingUnaryCall(__Method_GetStats, null, options, request); - } - public virtual grpc::AsyncUnaryCall GetStatsAsync(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return GetStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual grpc::AsyncUnaryCall GetStatsAsync(global::v2rayN.Protos.Statistics.GetStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.AsyncUnaryCall(__Method_GetStats, null, options, request); - } - public virtual global::v2rayN.Protos.Statistics.QueryStatsResponse QueryStats(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return QueryStats(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual global::v2rayN.Protos.Statistics.QueryStatsResponse QueryStats(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.BlockingUnaryCall(__Method_QueryStats, null, options, request); - } - public virtual grpc::AsyncUnaryCall QueryStatsAsync(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return QueryStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual grpc::AsyncUnaryCall QueryStatsAsync(global::v2rayN.Protos.Statistics.QueryStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.AsyncUnaryCall(__Method_QueryStats, null, options, request); - } - public virtual global::v2rayN.Protos.Statistics.SysStatsResponse GetSysStats(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return GetSysStats(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual global::v2rayN.Protos.Statistics.SysStatsResponse GetSysStats(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.BlockingUnaryCall(__Method_GetSysStats, null, options, request); - } - public virtual grpc::AsyncUnaryCall GetSysStatsAsync(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken)) - { - return GetSysStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken)); - } - public virtual grpc::AsyncUnaryCall GetSysStatsAsync(global::v2rayN.Protos.Statistics.SysStatsRequest request, grpc::CallOptions options) - { - return CallInvoker.AsyncUnaryCall(__Method_GetSysStats, null, options, request); - } - /// Creates a new instance of client from given ClientBaseConfiguration. - protected override StatsServiceClient NewInstance(ClientBaseConfiguration configuration) - { - return new StatsServiceClient(configuration); - } - } - - /// Creates service definition that can be registered with a server - /// An object implementing the server-side handling logic. - public static grpc::ServerServiceDefinition BindService(StatsServiceBase serviceImpl) - { - return grpc::ServerServiceDefinition.CreateBuilder() - .AddMethod(__Method_GetStats, serviceImpl.GetStats) - .AddMethod(__Method_QueryStats, serviceImpl.QueryStats) - .AddMethod(__Method_GetSysStats, serviceImpl.GetSysStats).Build(); - } - - /// Register service method with a service binder with or without implementation. Useful when customizing the service binding logic. - /// Note: this method is part of an experimental API that can change or be removed without any prior notice. - /// Service methods will be bound by calling AddMethod on this object. - /// An object implementing the server-side handling logic. - public static void BindService(grpc::ServiceBinderBase serviceBinder, StatsServiceBase serviceImpl) - { - serviceBinder.AddMethod(__Method_GetStats, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.GetStats)); - serviceBinder.AddMethod(__Method_QueryStats, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.QueryStats)); - serviceBinder.AddMethod(__Method_GetSysStats, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.GetSysStats)); - } - - } -} -#endregion diff --git a/v2rayN/obj/x64/Debug/TempPE/Properties.Resources.Designer.cs.dll b/v2rayN/obj/x64/Debug/TempPE/Properties.Resources.Designer.cs.dll deleted file mode 100644 index ea25dda..0000000 Binary files a/v2rayN/obj/x64/Debug/TempPE/Properties.Resources.Designer.cs.dll and /dev/null differ diff --git a/v2rayN/obj/x64/Debug/TempPE/Resx.ResUI.Designer.cs.dll b/v2rayN/obj/x64/Debug/TempPE/Resx.ResUI.Designer.cs.dll deleted file mode 100644 index 90cbeb2..0000000 Binary files a/v2rayN/obj/x64/Debug/TempPE/Resx.ResUI.Designer.cs.dll and /dev/null differ diff --git a/v2rayN/obj/x64/Debug/TempPE/Resx.ResUI.zh-Hans.Designer.cs.dll b/v2rayN/obj/x64/Debug/TempPE/Resx.ResUI.zh-Hans.Designer.cs.dll deleted file mode 100644 index ba3931e..0000000 Binary files a/v2rayN/obj/x64/Debug/TempPE/Resx.ResUI.zh-Hans.Designer.cs.dll and /dev/null differ diff --git a/v2rayN/obj/x64/Debug/build.force b/v2rayN/obj/x64/Debug/build.force deleted file mode 100644 index e69de29..0000000 diff --git a/v2rayN/obj/x64/Debug/v2rayN.csprojAssemblyReference.cache b/v2rayN/obj/x64/Debug/v2rayN.csprojAssemblyReference.cache deleted file mode 100644 index cdcc4db..0000000 Binary files a/v2rayN/obj/x64/Debug/v2rayN.csprojAssemblyReference.cache and /dev/null differ diff --git a/v2rayN/obj/x64/Debug/v2rayN.exe.config b/v2rayN/obj/x64/Debug/v2rayN.exe.config deleted file mode 100644 index 5a73e96..0000000 --- a/v2rayN/obj/x64/Debug/v2rayN.exe.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/v2rayN/setup_wizard_banner.jpg.png b/v2rayN/setup_wizard_banner.jpg.png deleted file mode 100644 index 39c5069..0000000 Binary files a/v2rayN/setup_wizard_banner.jpg.png and /dev/null differ diff --git a/v2rayN/uninstall.ico b/v2rayN/uninstall.ico deleted file mode 100644 index 247dca7..0000000 Binary files a/v2rayN/uninstall.ico and /dev/null differ diff --git a/v2rayN/v2ray-windows-64/config.json b/v2rayN/v2ray-windows-64/config.json deleted file mode 100644 index 7217277..0000000 --- a/v2rayN/v2ray-windows-64/config.json +++ /dev/null @@ -1,144 +0,0 @@ -// Config file of V2Ray. This file follows standard JSON format, with comments support. -// Uncomment entries below to satisfy your needs. Also read our manual for more detail at -// https://www.v2ray.com/ -{ - "log": { - // By default, V2Ray writes access log to stdout. - // "access": "/path/to/access/log/file", - - // By default, V2Ray write error log to stdout. - // "error": "/path/to/error/log/file", - - // Log level, one of "debug", "info", "warning", "error", "none" - "loglevel": "warning" - }, - // List of inbound proxy configurations. - "inbounds": [{ - // Port to listen on. You may need root access if the value is less than 1024. - "port": 1080, - - // IP address to listen on. Change to "0.0.0.0" to listen on all network interfaces. - "listen": "127.0.0.1", - - // Tag of the inbound proxy. May be used for routing. - "tag": "socks-inbound", - - // Protocol name of inbound proxy. - "protocol": "socks", - - // Settings of the protocol. Varies based on protocol. - "settings": { - "auth": "noauth", - "udp": false, - "ip": "127.0.0.1" - }, - - // Enable sniffing on TCP connection. - "sniffing": { - "enabled": true, - // Target domain will be overriden to the one carried by the connection, if the connection is HTTP or HTTPS. - "destOverride": ["http", "tls"] - } - }], - // List of outbound proxy configurations. - "outbounds": [{ - // Protocol name of the outbound proxy. - "protocol": "freedom", - - // Settings of the protocol. Varies based on protocol. - "settings": {}, - - // Tag of the outbound. May be used for routing. - "tag": "direct" - },{ - "protocol": "blackhole", - "settings": {}, - "tag": "blocked" - }], - - // Transport is for global transport settings. If you have multiple transports with same settings - // (say mKCP), you may put it here, instead of in each individual inbound/outbounds. - //"transport": {}, - - // Routing controls how traffic from inbounds are sent to outbounds. - "routing": { - "domainStrategy": "IPOnDemand", - "rules":[ - { - // Blocks access to private IPs. Remove this if you want to access your router. - "type": "field", - "ip": ["geoip:private"], - "outboundTag": "blocked" - }, - { - // Blocks major ads. - "type": "field", - "domain": ["geosite:category-ads"], - "outboundTag": "blocked" - } - ] - }, - - // Dns settings for domain resolution. - "dns": { - // Static hosts, similar to hosts file. - "hosts": { - // Match v2ray.com to another domain on CloudFlare. This domain will be used when querying IPs for v2ray.com. - "domain:v2ray.com": "www.vicemc.net", - - // The following settings help to eliminate DNS poisoning in mainland China. - // It is safe to comment these out if this is not the case for you. - "domain:github.io": "pages.github.com", - "domain:wikipedia.org": "www.wikimedia.org", - "domain:shadowsocks.org": "electronicsrealm.com" - }, - "servers": [ - "1.1.1.1", - { - "address": "114.114.114.114", - "port": 53, - // List of domains that use this DNS first. - "domains": [ - "geosite:cn" - ] - }, - "8.8.8.8", - "localhost" - ] - }, - - // Policy controls some internal behavior of how V2Ray handles connections. - // It may be on connection level by user levels in 'levels', or global settings in 'system.' - "policy": { - // Connection policys by user levels - "levels": { - "0": { - "uplinkOnly": 0, - "downlinkOnly": 0 - } - }, - "system": { - "statsInboundUplink": false, - "statsInboundDownlink": false, - "statsOutboundUplink": false, - "statsOutboundDownlink": false - } - }, - - // Stats enables internal stats counter. - // This setting can be used together with Policy and Api. - //"stats":{}, - - // Api enables gRPC APIs for external programs to communicate with V2Ray instance. - //"api": { - //"tag": "api", - //"services": [ - // "HandlerService", - // "LoggerService", - // "StatsService" - //] - //}, - - // You may add other entries to the configuration, but they will not be recognized by V2Ray. - "other": {} -} diff --git a/v2rayN/v2ray-windows-64/geoip.dat b/v2rayN/v2ray-windows-64/geoip.dat deleted file mode 100644 index cecbaaa..0000000 Binary files a/v2rayN/v2ray-windows-64/geoip.dat and /dev/null differ diff --git a/v2rayN/v2ray-windows-64/geosite.dat b/v2rayN/v2ray-windows-64/geosite.dat deleted file mode 100644 index 6c685cd..0000000 --- a/v2rayN/v2ray-windows-64/geosite.dat +++ /dev/null @@ -1,11291 +0,0 @@ - - - CATEGORY-CASbuypass-ssl.com buypass.com -buypass.no -buypass.se minid.no -comodo.com comodoca.com comodoca2.com comodoca3.com comodoca4.comcybertrust.co.jpcybertrust.ne.jp digicert.comdigitalcertvalidation.com freessl.com geotrust.com rapidssl.com -thawte.com  thawte.de  thawte.fr entrust.netentrustdatacard.comglobalsign-media.com globalsign.be globalsign.chglobalsign.co.ukglobalsign.comglobalsign.com.auglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nl!secure.globalsign.com -cnocsp.globalsign.com -cn ocsp2.globalsign.com -cn identrust.comidentrust.co.uk identrust.netletsencrypt.org secom.co.jpsecomtrust.net sectigo.comenterprisessl.comhackerguardian.cominstantssl.comoptimumssl.compositivessl.com digital-id.ch digitalid.chmanaged-pki.chmanaged-pki.de pki-post.ch pki-posta.ch pki-poste.chroot-signing.chrootsigning.comssl-certificate.ch -swissid.ch swissign.com swissign.liswisssign-group.chswisssign-group.comswisssign-group.li swisssign.ch swisssign.com swisssign.li swisssign.net swisssign.orgswisssigner.chswisssigner.comswisssigngroup.chswisssigngroup.comswissstick.com swisstsa.ch swisstsa.li trustdoc.ch trustsign.ch zert.ch telekom.com -telekom.de trustwave.com verisign.asia verisign.biz verisign.chverisign.co.inverisign.co.uk verisign.comverisign.com.auverisign.com.brverisign.com.cnverisign.com.esverisign.com.hkverisign.com.sgverisign.com.twverisign.com.vn verisign.de verisign.dk verisign.es verisign.fr verisign.hk verisign.in verisign.info verisign.jobs verisign.mobi verisign.name verisign.net verisign.org verisign.pro verisign.se verisign.sg verisign.tw verisign.us verisign.vnverisigninc.com -D - -POCOIQ-ADS cdn.pocoiq.cn -ads oct.pocoiq.cn -ads - -TABOOLA taboola.com - -MUJI muji.com muji.com.cn -cn muji.com.hk muji.eu muji.net muji.tw muji.us mujikorea.net - -PAXFUL -paxful.com - -ZOHO zoho.com zoho.com.au zoho.eu zoho.in zohocdn.comzohomeetups.comzohomerchandise.comzohopublic.comzohoschools.comzohostatic.com zohostatic.inzohouniversity.comzohowebstatic.com -" - ALPINELINUXalpinelinux.org -. -FLUTTER flutter.devflutterapp.com - -ICBCicbc icbc-ltd.com icbc-uk.com icbc-us.com -icbc.co.id icbc.com.cn icbc.com.mo icbc.com.pe icbc.com.sg icbcasia.com icbcbr.com.bricbclondon.com -icbcmy.comicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com icbccs.com.cn - -MOZILLA firefox.comdeveloper.mozilla.org($interactive-examples.mdn.mozilla.netmdn.mozillademos.orgmedia.prod.mdn.mozit.cloud rust-lang.org  rustup.rs  crates.io docs.rsmozilla.community mozilla.net mozilla.org bugzilla.org getpocket.comseamonkey-project.orgthunderbird.net -d -REDDIT -reddit.comredditstatic.comredditmail.comredditmedia.com redd.it - -ATTaccbusiness.com -atandt.comatt-bundles.com att-japan.com att-mail.comatt-promotions.com att-rsvp.comatt.cn -cn att.com att.jobs att.net -att.tvattalascom.comattbelieves.comattbusiness.net attcenter.comattcollaborate.com -attcorp.cn -cnattexperts.com attglobal.netattinnovationspace.comattinternetservice.com -attjoy.comattnetclient.comattonlineoffers.com attproxy.comattpublicpolicy.comattpurchasing.comattsavings.comattspecial.com -attssl.comattstadium.comattsuppliers.com atttvnow.comattuverseoffers.comattuverseonline.com attvoip.com attwifi.comattwirelessinternet.comattwirelessonline.comattwirelesssolutions.com bellsouth.net -budatt.com -cobatt.com currently.com currently.netdirectvbusinessmarket.comenterprisepaging.com itcanwait.com mymmode.comnaturalvoices.comnettyinternet.comopenapiplatform.comopenapiservice.compatentgold.netpaygonline.comraponlinereview.com signalbar.comsundayready.com synaptic.netthanksloyalty.com tvpromise.com -uverse.comwebhosting.com att-idns.net -attdns.com -attdns.netna-att-idns.netaudiencenetwork.comaudiencenetwork.tvcabletvdirectv.com dierectv.com -dirctv.com direcpath.com direcpath.netdirecttv-deals.tvdirecttv-dish.com dkrecttv.com directtv.netdirecttvdeals.tvdirecttvreviews.comdirectv-4-you.comdirectv-newyork.com directv.comdirectvadsales.comdirectvatlantaga.comdirectvboston.comdirectvbundles.comdirectvbusiness.comdirectvcincinnatioh.comdirectvcinema.comdirectvconnect.comdirectvcookevilletn.comdirectvcrossvilletn.comdirectvdealer.comdirectvdeals.comdirectvdealsnow.com directvdsl.tvdirectvforhotels.comdirectvgrandslam.comdirectvhouston.comdirectvinternet.comdirectvkentucky.comdirectvlebanontn.comdirectvlosangeles.comdirectvmetropolisil.comdirectvmonitoring.comdirectvmurfreesborotn.comdirectvnewhampshire.comdirectvnow.comdirectvoffercodes.comdirectvonline.comdirectvplans.comdirectvpomise.comdirectvpromise.comdirectvpromotions.comdirectvrebate.comdirectvrichmond.comdirectvsavings.comdirectvsports.comdirectvsundayticket.com direectv.com -diretv.comdtv2009offers.comfreedirecttvspecial.com getdirect.tv hddirectv.com le-direct.tvmydirectgroove.commydirectvchannels.comredzonechannel.com txdirectv.com  xandr.com -a -DYNA dynacw.co.jp -dynacw.com dynacw.com.cn dynacw.com.hk dynacw.com.tw -2 - GROWINGIO-ADS!assets.growingio.com -ads -- -LANTERNgetlantern.org -lantern.io -F - IDENTRUST identrust.comidentrust.co.uk identrust.net -) -OSCHINA  gitee.com oschina.net - -KUAISHOU gifshow.com ksapisrv.com kuaishou.com -yximgs.com log-sdk.gifshow.com -adswlog.kuaishou.com -ads - -AZURE azure-dns.comazure-dns.info azure-dns.net azure-dns.orgazure-mobile.netazure-sphere.comazure-test.netazure.cn -cn  azure.com  azure.netazurecomcdn.netazurecontainer.ioazurecosmos.netazurecosmosdb.comazurecosmosdb.infoazurecosmosdb.netazuredatabricks.netazuredevopslaunch.comazuredigitaltwin.comazuredigitaltwins.comazuredigitaltwins.netazuredns-prd.infoazuredns-prd.orgazureedge-test.net azureedge.netazureiotcentral.comazureiotsolutions.comazureiotsuite.comazureplanetscale.infoazureplanetscale.netazureserviceprofiler.comazuresmartspaces.netazurestackvalidation.comazurewebsites.netchinacloudapi.cn -cnchinacloudapp.cn -cnchinacloudsites.cn -cn cosmosdb.info cosmosdb.net devopsms.com gotcosmos.commicrosofteca.commicrosoftiotcentral.comserverlesslibrary.nettryfunctions.comwindowsazure.cn -cnwindowsazure.comazure.microsoft.com"azuremarketplace.microsoft.com - -DROPBOX db.ttdropbox-dns.com dropbox.com dropbox.techdropboxapi.comdropboxbusiness.comdropboxcaptcha.comdropboxforum.comdropboxforums.comdropboxinsiders.comdropboxmail.comdropboxpartners.comdropboxstatic.comdropboxusercontent.comgetdropbox.com&"paper-attachments.s3.amazonaws.com - - EPICGAMESbattlebreakers.com eac-cdn.com easy.aceasyanticheat.net epicgames.com fortnite.com paragon.complayparagon.comroborecall.comshadowcomplex.com spyjinx.comunrealengine.comunrealtournament.com6*^cdn\d-epicgames-\d+\.file\.myqcloud\.com$ -cn*&^epicgames-download\d\.akamaized\.net$;/^epicgames-download\d-\d+\.file\.myqcloud\.com$ -cn - - -FREEBEACONfreebeacon.com -k - PANASONIC  panasonic panasonic.cn -cn panasonic.com panasonic.jp technics.com -- -SURFLITE surflite.co surflite.net - -YUEWEN -yuewen.com hongxiu.com lrts.me qdmm.com -qidian.com readnovel.com tingbook.com webnovel.com -xs8.cn xxsy.net - -BEATS100beatscheap.com1monsterbeatsbydreus.com2013beatsbydrdreonline.com2013beatsbydrdreshop.com2013beatsbydreshop.com2013beatshdcybermonday.com2013cheapestbeats.com2013newbeatsworld.com2013pascherbeatsbydre.com2014cheapbeatsbydre.com 2beatsdre.com2buybeatsbydre.com2drdrebeats.com40shopping.com4beatsbydre.com5beatsbydre.comaaagradeheadphones.com -aanaan.comabcheadphones.comabeatsbydrdre.com aeasyshop.com -airmay.com -ajtalk.com albeats.com annstores.netaokwholesale.netaucheapbeats.comaudiobeatsau.comaudiobeatsbydre.comaudiomonsterbeatsonline.comauricularemonsterbeats.com#auricularesbeatsbaratosshop.comauricularesbeatsmarkt.comausbeatsbydrdre.combag-glasses1.com bandgirlz.com baxsound.com bbestmall.com -beatbd.combeatbydre2013.combeatbydremonster.com!beatbydreheadphonesonsale.combeatbydrekopen.combeatbydreuk2014.combeatdrdres.combeatfactoryoutlets.combeatmonstersaustralia.netbeats-by-dre-australia.combeats-bydrdre.netbeats-bydre-mall.combeats-bydrecheapsale.combeats-bydreoutletonline.combeats-bydreoutletsale.combeats-bydreoutletsale.netbeats-bydreoutletssale.netbeats-bydrestore.combeats-bydreuk.combeats-deal.combeats-dre-us.com"beats-headphones-buy-cheap.combeats-headphones.usbeats-sale.combeats-seller.combeats-soaho.com  beats1.cc beats1.cn -cn  beats1.tv beats1.com.cn -cn beats123.com beats2.com.cn -cn beats4.cn -cn -beats4.netbeats4outlets.combeats4salecheap.combeatsallsale.combeatsaudifonos.combeatsaudiobydre.combeatsaudiobydre.netbeatsaudios.netbeatsbeatsmonster.combeatsbestdeals.combeatsblackfridaydeals.netbeatsblackfridayretails.combeatsboxingdayuksale.combeatsbydrdre-headphones.combeatsbydrdre-officials5.combeatsbydrdre-online.combeatsbydrdre-onsale.combeatsbydrdre-store.combeatsbydrdre-store.usbeatsbydrdre4sale.combeatsbydrdrebiz.combeatsbydrdrecustom.combeatsbydrdredanmark.combeatsbydrdremall.combeatsbydrdreoutlet.combeatsbydrdres.combeatsbydrdresale.netbeatsbydrdrestore.combeatsbydrdreus.com!beatsbydre-beatsheadphone.combeatsbydre-chen.combeatsbydre-club.combeatsbydre-headphones.com!beatsbydre-headphonesshop.combeatsbydre-mall.combeatsbydre-outlet.combeatsbydre-outletsale.netbeatsbydre-outletstore.combeatsbydre-sell.combeatsbydre-store.combeatsbydre-studio.combeatsbydre-us.com beatsbydre.jpbeatsbydre2081.combeatsbydre411.combeatsbydre4usales.combeatsbydreauofficial.combeatsbydreausale.net beatsbydreaustralia-sale.com!beatsbydreaustraliaonline.com"beatsbydreaustraliaonlines.com beatsbydreaustraliasales.combeatsbydrebeatsby.com!beatsbydreblackfriday2013.com beatsbydreblackfridaypro.combeatsbydreboxingdayca.combeatsbydrecasquesfr.com#beatsbydrecheap-outletstore.combeatsbydrecheaper.com"beatsbydrecheaponlinesales.combeatsbydrecolors.com beatsbydrecustomwireless.com&"beatsbydrecybermondaydeals2013.com&"beatsbydrecybermondaydeals2013.netbeatsbydredanmarks.com"beatsbydredealsblackfriday.com"beatsbydredealscybermonday.combeatsbydrediscount.com beatsbydrediscountonline.netbeatsbydredr.combeatsbydreexecutivesale.com beatsbydreformall2013-nl.com beatsbydreforsalesonline.com beatsbydreforshop2013-nl.combeatsbydreforstore.combeatsbydreforyououtlet.combeatsbydrefr.com!beatsbydrefrcasquepascher.combeatsbydrefriday.combeatsbydregot.combeatsbydrehd.combeatsbydrehd.netbeatsbydreheadphones-nz.combeatsbydreheadphonesolo.combeatsbydrehut.combeatsbydreinexpensive.combeatsbydreireland-sales.com beatsbydreirelandonlines.combeatsbydreirelandsale.com beatsbydreirelandsonline.combeatsbydremall2013.com"beatsbydremonsteraustralia.combeatsbydrenls.combeatsbydrenorge1.net!beatsbydreofficialdanmark.combeatsbydreoksale.combeatsbydreol.combeatsbydreonlie2013-nl.com!beatsbydreonlines-ireland.combeatsbydreonlines-uk.combeatsbydreonlinesale-nz.combeatsbydreoordopjes.combeatsbydreoslo.combeatsbydreoutletsale.combeatsbydreoutletscheap.combeatsbydrerealstore.combeatsbydres-shop.combeatsbydresale-uk.combeatsbydresalemall2013.combeatsbydresales.us'#beatsbydresalesonline-australia.com beatsbydresaleonlines-nz.combeatsbydresdanmark.netbeatsbydreshop-uk.combeatsbydreshops.netbeatsbydresingapores.combeatsbydresingaporesale.combeatsbydrespeakers.combeatsbydresold.com%!beatsbydresolohdonline-canada.combeatsbydresonline-nz.combeatsbydrestorevip.combeatsbydressale.combeatsbydressolo.combeatsbydresstudio.com"beatsbydrestudio-australia.combeatsbydrestudio.combeatsbydretoutlet.combeatsbydreuk.combeatsbydreuk.netbeatsbydreus.combeatsbydrevipde.combeatsbydrew.combeatsbydrsmonsterinusa.combeatsbymusic.netbeatsbysdrbre.combeatsbysdrdres.combeatscasque-france.combeatscheap-nz.combeatscheap-uk.combeatscheapforsale.combeatscollection2014.combeatscustomblackfriday.combeatsdanmark2013.combeatsdrdre-headphones.combeatsdrdre-it.combeatsdrdre-solo.combeatsdrdre2014.combeatsdrdrecuffie.netbeatsdrdrekaufenschweiz.netbeatsdrdreneon.combeatsdre-monster.com beatsdre.netbeatsdre4cheap.combeatsdrecheap.combeatsdredreheadphones.combeatsdreforsale.combeatsdreinau.combeatsdremonster-uk.com!beatsdrenewcolorful4usale.combeatsdreoutletsale.combeatsdresale2013.combeatsdresalestore.combeatsdresolo2013.combeatsdreus.combeatsearbudsheadphoness.combeatsfacstore.combeatsfactoroutlets.combeatsfactorycollection.combeatsfactoryoutles.combeatsforcheap-usa.combeatsforme.combeatsfranceofficiel.combeatselectronic.netbeatselectronics.com -beatsep.cn -cn beatsep.com beatsep.net beatsheadphones-discount.combeatsheadphones1.combeatsheadphones2u.combeatsheadphonesale.combeatsheadphonesdealer.combeatsheadphonesforcheap.netbeatsheadphonesonline.combeatsheadphoness.combeatsheadphonestudio.combeatsheadphonesusamall.combestshoesale2014.netbeatshopuk.combeatsincanada.combeatsinsingapore.combeatsireland.net beatsjoy.combeatsmonstersales.combeatsmusic.combeatsmusic.wang beatsneon.combeatsnzsale.com beatsodre.combeatsofdre-usa.combeatsonblackfriday2013.com beatsone.netbeatsoutlet.netbeatsoutletanytime.combeatsoutletonlines.combeatspascher-bydre.combeatspascher-fr.netbeatspascher.netbeatspaschers.netbeatspillnewcolor.combeatspills.combeatspromonsterjp.combeatspromotions.combeatssales.combeatssaleus.combeatssaustraliabuy.combeatssbyaustralia.combeatssbydredanmark.combeatsshop-uk.combeatsshop-usa.combeatsshopstore.combeatssingapores.combeatssingaporeshop.com beatsstudiohodetelefoner.combeatsstudiosite.combeatstoreusa.com beatsua.combeatswholesale.usbeatswirelesscheap.combeatswirelesscuffie.combegin-trade.combestbeats4u.com -biitii.comblackfridaydrebeatsnew.comblackfridaydrebeatsshop.combloommicroventures.com bookonsky.net -bossae.combrandeasygo.combrandelectronic.combrandproducts1688.com brands098.combusinesswebwise.combuy-from-shanghai.combuybeatsbydre-uk.combuybeatsheadphonesbydre.combuycheapbeatsbus.combuycheapbeatsbydre.combuycheapbeatsbydreshop.combuycheapbeatsdreuk.combuydrdrebeatbox.combuyminibeatbox.combuyonlineheadphones.combuyshoponly.combuzzardflapper.combybeatsdre.combydrebeats.comcanada-beatsbydre.com casque-fr.com casquebeatsbydrdresolohd.comcasquebeatsdocteurdre.comcasquebeatsdre2013.comcasquebeatsenligne.comcasquebeatsfracheter.comcasquebeatsmer.netcasquebeatsofficiel-fr.comcasquebeatspascher2013.comcasquebeatssolo.netcasquedrdrebeatssfr.comcasquemonsterbeats.com#casquemonsterbeatsbydre2013.comcasquesbeatsaudio.comcheap-beats-by-dre.netcheap-beatsbydre.comcheapbagshoes.com cheapbeats.uscheapbeats365.comcheapbeats4sale.netcheapbeatsaustraliasale.comcheapbeatsbus.comcheapbeatsbydr.comcheapbeatsbydrdrepro.comcheapbeatsbydre-au.comcheapbeatsbydre99.comcheapbeatsbydrefau.comcheapbeatsbydremall.comcheapbeatsbydremonster.comcheapbeatsbydrenz.netcheapbeatsbydreonsale.com cheapbeatsbydreoutlet-nz.comcheapbeatsbydreoutlet.com"cheapbeatsbydreoutlets2013.comcheapbeatsbydresale.comcheapbeatsbydreshop.comcheapbeatsdrdresolo.com$ cheapbeatsbydrestudioedition.com"cheapbeatsbydrestudioutlet.comcheapbeatsdrestudios.comcheapbeatsheadphone2014.comcheapbeatsheadphones.uscheapbeatsie.comcheapbeatsla.comcheapbeatssale4u.comcheapbeatsshopbydre.comcheapcustombeatsbydre.comcheapdrdrebeats8.comcheapdrdrebeatsca.comcheapdrebeats8.netcheaperbeatsbydresale.comcheapestbeatsdrdre.comcheapheadphonesland.comcheapheadphonessale.comcheapheadsetmall.comcheapheadsetshop.com cheapmonsterbeatsbydrdre.com!cheapmonsterbeatsheadsets.com cheapmonstersbeatsonsale.comcheapmonsterbeatssale.comcheapmonsterbeatsusa.uscheapnewbeatsbydre.comcheapsalemonster.comcheapshoesvip.comcheapwireless04.comcheapwirelessbeats.comcheerwholesale.uschihair-straightener.comchinaclothesstore.comciattackers.com -cmhalq.com cnshopin.comcoolmonster.netcozydrdrebeats.com cqcorea.comcuffiesaldi.comcustombeatsbydrebuy.comcustombeatsdeals.comcustombeatsforcheap.comcustombeatsny.comcustombeatssbydreus.comcustomdrdrebeats.comcustomizedbeatbydre.comcustomizedbeatsbydre.comcustomizedbeatsdre.comcybermondaybeats4sale.comdanemarket.comdanmarkbeatsbydrdre.comdctbeatsbydre.comdealsbeatsblackfriday.comdetaliczny.comdiscountbeatsbydre-us.comdiscountbeatsstore.comdkbeatsbydre.comdrbeatsukmart.comdrdre-beats.comdrdrebeats-chen.comdrdrebeats-headphone.comdrdrebeats-usa.comdrdrebeatsale.comdrdrebeatsbillig.comdrdrebeatsdesale.comdrdrebeatsdiscount.comdrdrebeatsforu.comdrdrebeatsretail2013.comdrdrebeatssale7.comdrdrebeatsuk.comdrdreheadphonebeats.comdrdreheadphonekey.comdrdreheadphonesusstore.comdrdremonster-beats.comdrdremonsterdre.comdrdreprobeatssale.com drdrefnac.comdrebeats-australia.comdrebeats-france.comdrebeats-monster.com!drebeats-monsteraustralia.comdrebeats-monsterusa.comdrebeats-singapore.comdrebeats-singapore.netdrebeats-singaporecheap.comdrebeats-singaporecheap.netdrebeats-solo.comdrebeats-studio.comdrebeatsaustralia-cheap.comdrebeatsaustralia-cheap.netdrebeatsbuy.comdrebeatsbydreoutlet.comdrebeatscanada.comdrebeatsdeutschland.netdrebeatsforsaleus.comdrebeatsheadphones-nz.comdrebeatshome.comdrebeatsoutletstore.comdrebeatsoldes.comdrebeatspill.comdrebeatssite.com#drebeatssolocybermondaysale.comdrebeatsstudio2013.comdrebeatstudio.com drebyby.comdremonsterbeatsoutlets.comdreprobeats.com dreprofy.com -dtsell.comearphonescheapest.comebuyheadphones.comesbeatsbydrebuy.cometheadphones.comfamosascalvas.comfindmybeats.comfr-beatsbydrestore.comfrancecasquebeatssolde.comfrcasquesbeats.com free-aa.com free-sns.com frishoes.comgamebeforethegame.comgetdrebeatssale.comgmnetworks.net gobeatsye.comgobuyonlinestore.net goodsdunk.netheadphonepubs.comheadphones-cool.comheadphones-dre.com headphones-outlet-online.comheadphonesbeatsaudio.comheadphonesbeatsbydre.comheadphoneses.comheadphoneshome.comheadphoneshotsales.comheadphonesol.comheadphonesretailer.comheadphonessupply.comheadphonezip.comheadset987.comhellokittybeats.com highbolt.net highdefinitionbeatsbydre.com hipaa6020.com hipzoom.nethonawalaan.comhotbeatsonsale.comhotmonsterbeats.comhottestheadphonesonline.com  hrsaz.com ibeats-uk.comibeatsbydre.ccibeatsbydre.comigoshopping.net illianacomputerrecycling.comimonsterbeats.comincentivetravelgifts.comioffergift.com islamiccenterofnewlondon.comitaliabeatsbydrdre.com jkbeats.comkickshatchannel.comkobbeatssbydredk.comkopfhorergunstigshop.comleecountytimes.com lexuemei.comlovebeatsdr.com lovemarca.comluckyissue.com -lyzsxx.com mairbeats.com -makeeu.commallheadphone.commbeats-tech.commbheadphone.com -micstl.commmonsterheadphones.netmonbeats2013.commonster-beats-by-dr-dre.com monster-beats-headphones.commonsterbeats-cheap.commonsterbeats-headphone.commonsterbeats-onsale.commonsterbeats-solo.commonsterbeats-solo.netmonsterbeats365buy.commonsterbeats8beatsbydre.commonsterbeatsale.commonsterbeatsalestore.commonsterbeatssalg.commonsterbeatsau.commonsterbeatsbydrdre-nz.commonsterbeatsbydrdre-usa.com!monsterbeatsbydrdrecanada.com!monsterbeatsbydrdrestudio.commonsterbeatsbydre-nz.commonsterbeatsbydre-usa.commonsterbeatsbydre2015.com'#monsterbeatsbydreaustraliacheap.com!monsterbeatsbydrebilligde.com monsterbeatsbydrefactory.commonsterbeatsbydrenew.commonsterbeatsbydres.commonsterbeatsbydreshop.commonsterbeatscasques.commonsterbeatscommunity.commonsterbeatsdrdrecheap.commonsterbeatsfactory.netmonsterbeatsfinland.commonsterbeatsforsale.commonsterbeatsheadphone.commonsterbeatsheadphones.netmonsterbeatshere.commonsterbeatsitaly.commonsterbeatsmall.commonsterbeatsnegozi.netmonsterbeatsok.com!monsterbeatsonlinestoreuk.commonsterbeatsoutlet.usmonsterbeatspascher.netmonsterbeatsru.commonsterbeatssales.commonsterbeatsshops.netmonsterbeatsstore.com#monsterbeatssydneyaustralia.commonsterbeatstang.commonsterbeatstienda.commonsterbeatstudio.commonsterbydrebeat.com!monstercasquebeatspascher.netmonstercheapbeatss.commonsterdrebeats-canada.netmonsterdrebeats-usa.commonsterdrebeats-usa.netmonsterheadphone.netmonsterproduct.netmonstersbeatbydres.commonstersdebea.commonstershopcheapbeats.netmoreheadphones.com -ms4dre.commybeatsbydrestudio.commybeatsbydreuk.commybeatscheapbydre.commyferrariheadphones.comnamemybeats.com neborder.comnegozimonsterbeats.comnegoziomonsterbeats.comnewbeatsblackfriday.com newbemany.comnewdrediscount.comnewestbeatsbydre.comnewlysprung.netnewmonst1erbeatsto1re.com!newmonsterbeatsheadphones.comnewschristmasshopping.comnflhotsalejerseys.com nicesshop.netofferairjordanlebron.comofficialbeatsbydreshop.comofficialbeatsbydrestore.comofficialdrdre.comofficialheadphone.com ogameblog.comonbeatsbydresale.com onlinemonsterbeatsonsale.com onsalekey.comonsaletrend.comoutletbeatsshop.compascherbeatsmonster.compaulsimon-music.comperfectkickz.netpersoneelsland.compicknicekicks.netpickshoesclothes.com pillbeatsblackfridaysale.compocketbiketrader.compowerbeats2wireless.compowerbeatsbydrdre.compowerbeatsbydre.compromonsterbeatsbydre.comprostudiobeatscybersale.com  rbsgr.comrepsneakermall.com repswing.com!salebeatslasteststyle4you.comsaleblackfridaydrebeats.comsalecheaphandbags.com samebags.com sanvaras.com -scnshop.cc -shoers.com shoestop2.comshop-headphones.netshopbeatsdre.com shopbydre.comshopcustomizedbeats.comshopdrebeats.comshopmonsterbeats.comshopping-days.netshoppinguheadphones.comsneaker666.comsneakerpage.netsneakerskick.comsolostudioksale.com soso7778.comspecialtyheadphones.comspiritclubs.comstraightouttasomewhere.comstudiobeatsbydrdre.comsulwerphoto.comsunglassessale2014.comsuperearsenjoy.comsupplybestjerseys.comsustainthesound.comsverigebeatsbydrdre.com szcheapmonsterheadphones.comszwinnertechnology.com takegoto.comthe-monster-beats.comthebeatsbydre.comthebeatsbydre.netthebeatsheadphonesale.com -theuab.nettopbeatsbydrdreoutlet.comtopbeatsdealer.comtopbeatsforsale.com tradevip1.com tteshop.com ubnw.net -unstyle.us&"usa-beatsbydreheadphonesonsale.net  v-has.com vip-beats.comvipbeatsbydre.comvipheadphones.com vipshoes2.com  wasdj.comwholesale-exporter1.comwholesalediscountpurses.comwholesalefine.comwholesaleonlinemart.comworldcoinpay.comyourmonsterbeats.com%!beatselectronicsllc.tt.omtrdc.net - -BITFINEX bitfinex.com - -PASTEBIN pastebin.com - -YARNPKG yarnpkg.com -u - -ATTWATCHTV -att.tv atttvnow.comattwatchtv.com directv.com  dtvce.comnettyinternet.com -X -FACEBOOKaccountkit.comatscaleconference.com botorch.org -buck.build buckbuild.comcomponentkit.org draftjs.org -f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com -fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.comfbmessenger.comm.me messenger.com -nbabot.net binoculus.com buyoculus.com ocul.usoculus-china.com -oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.comaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org -atdmt2.com atlasdmt.comatlasonepoint.combuyingfacebooklikes.comcareersatfb.comcelebgramme.comchina-facebook.com click-url.comcomo-hackearfacebook.comcrowdtangle.com dacebook.comdlfacebook.comdotfacebook.comdotfacebook.netexpresswifi.com faacebok.com faacebook.com faasbook.com facbebook.com facbeok.com -facboo.com facbook.com facbool.com facboox.com faccebook.comfaccebookk.com facdbook.com facdebook.com face-book.com faceabook.com facebboc.com facebbook.comfacebboook.com facebcook.com facebdok.com facebgook.com facebhook.com facebkkk.com facebo-ok.com faceboak.com facebock.com facebocke.com facebof.com faceboik.com facebok.comfacebokbook.com facebokc.com facebokk.com facebokok.com faceboks.com facebol.com facebolk.com facebomok.com faceboo.com facebooa.com faceboob.comfaceboobok.com facebooc.com faceboock.com facebood.com facebooe.com faceboof.com facebooi.com facebooik.com facebooik.org facebooj.comfacebook-corp.comfacebook-covid-19.comfacebook-ebook.comfacebook-forum.comfacebook-inc.comfacebook-login.comfacebook-newsroom.comfacebook-newsroom.orgfacebook-pmdcenter.comfacebook-pmdcenter.netfacebook-pmdcenter.orgfacebook-privacy.comfacebook-program.comfacebook-studio.comfacebook-support.orgfacebook-texas-holdem.comfacebook-texas-holdem.net facebook.br facebook.ca facebook.cc facebook.comfacebook.design facebook.net facebook.hu facebook.in fecebook.net facebook.nl facebook.org facebook.se facebook.shop facebook.tv facebook.us facebook.wangfacebook123.orgfacebook30.comfacebook30.netfacebook30.orgfacebook4business.comfacebookads.com"facebookadvertisingsecrets.comfacebookatschool.comfacebookawards.comfacebookblueprint.netfacebookbrand.comfacebookbrand.net3/facebookcanadianelectionintegrityinitiative.comfacebookcareer.comfacebookcheats.comfacebookck.comfacebookclub.comfacebookcom.comfacebookconsultant.orgfacebookcoronavirus.comfacebookcovers.orgfacebookcredits.infofacebookdating.netfacebookdusexe.orgfacebookemail.comfacebookenespanol.comfacebookexchange.comfacebookexchange.netfacebookfacebook.comfacebookflow.comfacebookgames.comfacebookgraphsearch.comfacebookgraphsearch.infofacebookgroups.comfacebookhome.ccfacebookhome.comfacebookhome.infofacebookhub.com facebooki.comfacebookinc.comfacebookland.comfacebooklikeexchange.comfacebooklive.comfacebooklivestaging.netfacebooklivestaging.orgfacebooklogin.comfacebooklogin.infofacebookloginhelp.netfacebooklogs.comfacebookmail.comfacebookmail.tvfacebookmanager.infofacebookmarketing.info facebookmarketingpartner.com!facebookmarketingpartners.comfacebookmobile.comfacebookmsn.comfacebooknews.comfacebooknfl.comfacebooknude.comfacebookofsex.comfacebookook.comfacebookpaper.comfacebookpay.comfacebookphonenumber.netfacebookphoto.comfacebookphotos.comfacebookpmdcenter.comfacebookpoke.netfacebookpoke.orgfacebookpoker.infofacebookpokerchips.infofacebookporn.netfacebookporn.orgfacebookporno.netfacebookportal.com facebooks.comfacebooksafety.comfacebooksecurity.netfacebookshop.comfacebooksignup.netfacebooksite.netfacebookstories.comfacebookstudios.netfacebookstudios.orgfacebooksupplier.comfacebooksuppliers.comfacebookswagemea.comfacebookswagstore.comfacebooksz.comfacebookthreads.netfacebooktv.netfacebooktv.orgfacebookvacation.com facebookw.comfacebookworld.com facebool.com facebool.info facebooll.com faceboom.com faceboon.com faceboonk.comfaceboooik.com faceboook.com faceboop.com faceboot.com faceboox.com facebopk.com facebpook.com facebuk.com facebuok.com facebvook.com facebyook.com facebzook.comfacecbgook.com facecbook.com facecbook.org facecook.com facecook.org facedbook.com faceebok.com faceebook.com faceebot.com facegbok.com facegbook.com faceobk.com faceobok.com faceobook.com faceook.comfacerbooik.com facerbook.com facesbooc.comfacesounds.com facetook.com facevbook.com facewbook.co facewook.comfacfacebook.com facfebook.com fackebook.com facnbook.com facrbook.com facvebook.com facwebook.com facxebook.com fadebook.com -faebok.com faebook.com faebookc.com faeboook.com faecebok.com faesebook.comfafacebook.com faicbooc.com fasebokk.com fasebook.com faseboox.com favebook.com faycbok.com -fb.careers -fb.com fb.me fbacebook.com fbbmarket.comfbboostyourbusiness.com  fbcdn.com  fbcdn.netfbfeedback.com -fbhome.com fbidb.io  fbinc.comfbinnovation.comfbmarketing.com  fbreg.com -fbrpms.com  fbsbx.com  fbsbx.netfbsupport-covid.netfbthirdpartypixel.comfbthirdpartypixel.netfbthirdpartypixel.org  fburl.comfbworkmail.com fcacebook.com fcaebook.com fcebook.com fcebookk.comfcfacebook.comfdacebook.info feacboo.com feacbook.com feacbooke.com feacebook.com fecbbok.com fecbooc.com fecbook.com feceboock.com feceboox.com fececbook.com  feook.com ferabook.com fescebook.com fesebook.com ffacebook.com fgacebook.com ficeboock.com fmcebook.com fnacebook.com fosebook.com fpacebook.com fqcebook.com fracebook.com  freeb.comfreebasics.comfreebasics.net -freebs.comfreefacebook.comfreefacebook.netfreefacebookads.netfreefblikes.comfreindfeed.comfriendbook.info friendfed.comfriendfeed-api.comfriendfeed-media.comfriendfeed.comfriendfeedmedia.com fsacebok.com fscebook.comfundraisingwithfacebook.comfunnyfacebook.orgfutureofbusinesssurvey.org gacebook.com gameroom.comgfacecbook.com -groups.comhackerfacebook.comhackfacebook.comhackfacebookid.comhifacebook.info!howtohackfacebook-account.comhsfacebook.comhttpfacebook.comhttpsfacebook.comhttpwwwfacebook.com i.org internet.org klik.me liverail.com liverail.tvlogin-account.netmarkzuckerberg.commidentsolutions.commobilefacebook.commoneywithfacebook.com myfbfans.com newsfeed.com nextstop.comonline-deals.netopencreate.orgreachtheworldonfacebook.com rocksdb.orgshopfacebook.comsportsfacebook.comsportstream.comsupportfacebook.comterragraph.comthefacebook.comthefacebook.net thefind.comtoplayerserver.comviewpointsfromfacebook.comwhyfacebook.com worldhack.comwww-facebook.comwwwfacebok.comwwwfacebook.comwwwmfacebook.comzuckerberg.comzuckerberg.netfacebookwork.com -redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.net - -GITHUB atom.io  npmjs.com npm.communitydependabot.com -git.io github.blog -github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubstatus.comgithubusercontent.com/+github-avatars.oss-cn-hongkong.aliyuncs.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com -E -PIXIV  pixiv.net  pixiv.org pixiv.co.jp  pximg.net - -115 115.com - -GOOGLE-SCHOLARscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk -" - SINOINSIDERsinoinsider.com -# -V8 -v8.dev v8project.org -" - MASTERCLASSmasterclass.com - - YOUKU-ADSactives.youku.com -ads ad.api.3g.youku.com -ads$ad.api.mobile.youku.com -ads ad.mobile.youku.com -ads(a-dxk.play.api.3g.youku.com -ads atm.youku.com -ads#b.smartvideo.youku.com -adsc.yes.youku.com -adsdas.api.youku.com -ads!das.mobile.youku.com -ads!dev-push.m.youku.com -adsdl.g.youku.com -adsdmapp.youku.com -adse.stat.ykimg.com -ads#gamex.mobile.youku.com -ads!guanggaoad.youku.com -ads hudong.pl.youku.com -ads!huodong.pl.youku.com -ads"huodong.vip.youku.com -ads hz.youku.com -adsiyes.youku.com -ads l.ykimg.com -adslstat.youku.com -ads mobilemsg.youku.com -ads msg.youku.com -adsmyes.youku.com -ads p.l.youku.com -ads pl.youku.com -ads#passport-log.youku.com -adsp-log.ykimg.com -adspush.m.youku.com -ads r.l.youku.com -ads s.p.youku.com -adssdk.m.youku.com -adsstat.youku.com -ads$statis.api.3g.youku.com -ads&store.tv.api.3g.youku.com -ads&store.xl.api.3g.youku.com -adstdrec.youku.com -adstest.ott.youku.com -ads!test.sdk.m.youku.com -ads v.l.youku.com -adsval.api.youku.com -ads wan.youku.com -adsykatr.youku.com -adsykrec.youku.com -ads - -D100 d100.net - -NICONICOnico -nicodic.jp nicomanga.jp niconico.com nicoseiga.jp nicovideo.jp nimg.jp simg.jp - -VANISHo2action.co.krpowerofresolve.capowerofresolve.comspraynwash.com  vanish.at  vanish.be  vanish.ch  vanish.cl vanish.cn -cn vanish.co.id vanish.co.il vanish.co.in vanish.co.nz vanish.co.uk vanish.co.za vanish.com.ar vanish.com.br vanish.com.co vanish.com.hr vanish.com.mx vanish.com.my vanish.com.pe vanish.com.sg vanish.com.tr  vanish.de  vanish.dk  vanish.es  vanish.fi  vanish.fr  vanish.hu  vanish.ie  vanish.it  vanish.nl  vanish.no  vanish.pl  vanish.pt  vanish.ro  vanish.ru  vanish.se  vanish.si  vanish.skvanisharabia.comvanishbancaseulook.com.brvanishcentroamerica.com vanishinfo.czvanishstains.comvanishstains.com.au -: - ENTERMEDIADBentermediadb.netentermediadb.org -< -NGA -nga.cn 178.com -ngabbs.com ngacn.cc - -QUANTIL quantil.com -5 -COLORFULCLOUDS caiyunai.com caiyunapp.com -7 -DART dart.dev dartlang.org dartpad.dev - -IUS -ius.io - -OK ok.ru -- -ASUS asus.com asus.com.cn -cn - -WALMART walmart wal-mart.com -wal.cowalmart-content.com walmart.comwalmart.pharmacywalmartimages.com -wmt.co - - WIKILEAKS wikileaks.org -% -ZHIHU  zhihu.com  zhimg.com - -UBI ubi.com ubisoft.com  uplay.com,(ubisoft-uplay-savegames.s3.amazonaws.com,(ubisoft-orbit-savegames.s3.amazonaws.com)uplaypc-s-ubisoft.cdn.ubi.com -cn - - -BRIGHTCOVE videojs.com bcove.video bcovlive.io bcvp0rtal.com boltdns.netbrightcove.combrightcove.netbrightcove.servicesbrightcovecdn.combcovlive-a.akamaihd.netbcsecure01-a.akamaihd.netbrightcove.imgix.net - - KINDGIRLS kindgirls.com - -PARLER -parler.com - -TIDELIFT tidelift.com - -EFF eff.org - -ENFAbebepremium3.com.bo -enfa.co.id enfa.com.vn enfaaplus.com enfababy.com enfabebe.comenfabebe.com.brenfabebe.com.coenfabebe.com.doenfabebe.com.ecenfabebe.com.mxenfabebe.com.peenfabebe.com.veenfabebe3.com.arenfagrow.co.inenfagrow.com.bnenfagrow.com.myenfagrow.com.phenfagrow.com.sg enfagrow4.comenfamama.com.arenfamama.com.ph -enfamil.ca enfamil.com -enfamil.es -enfamil.pl -enfamil.pt enfasmart.comenspireformula.comnutramigen.net nutramigen.pl -P -KKBOX -kfs.io  kkbox.com kkbox.com.tw  kktix.com kktv.me - -SONY playstationplaystation.complaystation.net sonyentertainmentnetwork.comimageworks.commotionpictureser.com playshow.ioplayshowtv.comsonyclassics.comsonypictures.comsonypicturesanimation.comsonypicturesmuseum.comsonypicturesstudios.comsonypicturestelevision.com#sonypicturestelevisiongames.com wheelpop.com -wwtbam.comyourfantasybeginsnow.comsonyginzasonypark.jpsony-africa.com sony-asia.comsony-europe.comsony-hes.co.jpsony-latin.com sony-mea.comsony-olympus-medical.comsony-promotion.eusony-semicon.co.jp sony.at sony.ba sony.be sony.bg sony.ca sony.ch sony.cl -sony.co.cr -sony.co.id -sony.co.in -sony.co.jp -sony.co.kr -sony.co.nz -sony.co.th -sony.co.uk sony.com sony.com.ar sony.com.au sony.com.bo sony.com.br sony.com.co sony.com.do sony.com.ec sony.com.gt sony.com.hk sony.com.hn sony.com.mk sony.com.mx sony.com.my sony.com.ni sony.com.pa sony.com.pe sony.com.ph sony.com.sg sony.com.sv sony.com.tr sony.com.tw sony.com.vn sony.cz sony.de sony.dk sony.ee sony.es sony.eu sony.fi sony.fr sony.gr sony.hr sony.hu sony.ie sony.it sony.kz sony.lt sony.lu sony.lv sony.net sony.nl sony.no sony.pl sony.pt sony.ro sony.rs sony.ru sony.se sony.si sony.sk sony.ua sonybo.co.jp sonybsc.comsonybuilding.jpsonydesign.com sonydna.comsonyglobalsolutions.jp sonykigyo.jpsonylatvija.com -sonypcl.jpsonyprotechnosupport.co.jpsonystoragemedia.co.jp sonytc.co.jp  sovec.net -< -DOCKERcompose-spec.io -docker.com  docker.io - -HK01 hk01.com - -GRAVATAR gravatar.com - -RSSHUB -rsshub.app -; - SCORELAND scoreland.comcdn77.scoreuniverse.com -j -BAHAMUT gamer.com.twbahamut.com.twgamer-cds.cdn.hinet.netgamer2-cds.cdn.hinet.net - -GAMERSKY gamersky.com - - -QINGTINGFM qingting.fm -F -SOGOU -go2map.com sogo.com  sogou.com sogoucdn.com - -CATEGORY-CRYPTOCURRENCY asproex.comasproexapi.combinance.charity binance.cloud binance.combinance.vision binancezh.com bnbstatic.com yshyqxx.com -bitbank.cc bitcoin.org bitfinex.com bitflyer.com bitflyer.jp -bitmex.com bitquick.co bisq.io bisq.network bitsquare.io bitstamp.net bittrex.com btcbox.co.jp -cex.io coinbase.com coinone.co.krcoinonecore.comcoinonecorp.com dogecoin.com -devcon.orgethereum.foundation ethereum.org -hbabit.com -hbfile.net  huobi.com huobi.me  huobi.pro huobi.sc huobiasia.viphuobigroup.comhuobitoken.com -kraken.comlocalbitcoins.comlocalbitcoinschain.com okex.com -paxful.com -zb.app -zb.com zb.io zb.live - -MOCHA mochajs.org - -NVIDIA -geforce.cn -cn geforce.co.kr geforce.co.uk geforce.comgeforce.com.twgputechconf.cn -cngputechconf.co.krgputechconf.comgputechconf.com.augputechconf.com.twgputechconf.eugputechconf.ingputechconf.jp nvidia.asia  nvidia.be  nvidia.ch nvidia.cn -cn nvidia.co.jp nvidia.co.kr -nvidia.com nvidia.com.au nvidia.com.br nvidia.com.tr nvidia.com.tw  nvidia.cz  nvidia.de  nvidia.dk  nvidia.es  nvidia.eu  nvidia.fi  nvidia.fr  nvidia.it  nvidia.lu  nvidia.nl  nvidia.no  nvidia.pl  nvidia.ro  nvidia.ru  nvidia.seshotwithgeforce.comnvidia.tt.omtrdc.net -* -HKOPENTV hkopentv.com fantv.hk - -LINUX  linux.org - -ERLANG -erlang.org - -FEEDLY -feedly.com -m -SUNING cnsuning.com -suning.comsuningcloud.comsuningestate.comsuningholdings.com -G -TEX ctan.orglatex-project.org -miktex.org tug.org - - -GLOBALSIGNglobalsign-media.com globalsign.be globalsign.chglobalsign.co.ukglobalsign.comglobalsign.com.auglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nl!secure.globalsign.com -cnocsp.globalsign.com -cn ocsp2.globalsign.com -cn - -MPV -mpv.io -6 - NORDSTROM nordstrom.comnordstrommedia.com -( -UDEMY  udemy.com udemycdn.com -< -QUIP quip-cdn.com quip.comquipelements.com - -VERCEL -now.shvercel-dns.comvercel-status.com -vercel.app -vercel.comzeit-world.co.ukzeit-world.comzeit-world.netzeit-world.org zeit.co zeit.sh zeitworld.com - -BITQUICK bitquick.co -/ -CLEARBITJS-ADSx.clearbitjs.com -ads -" - LETSENCRYPTletsencrypt.org -) -MEITU  meitu.com meitudata.com -' -928PLUS 928.plus -zind.cloud -F -DEEPIN  deepin.cn -deepin.com  deepin.io -deepin.org - -NETEASE 126.com 126.link 126.net 127.com 127.net 163.com163industry.com 163mail.com 163qiyukf.com -163yun.com 166.net -haowu.linkicourse163.org  kaola.com -lofter.com  nease.netnetease-inc.com netease.com -netease.im -qiyukf.com ydstatic.com yeah.net -youdao.comanalytics.163.com -ads crash.163.com -ads crashlytics.163.com -ads g.163.com -ads - -ZEE -bgr.inbollywoodlife.comcareerfundas.comcricketcountry.com dnai.in dnaindia.com earngeek.com ekhindi.com -ind.sh  india.comindiancolleges.com itripto.com  oncars.in prepsure.comthehealthsite.com wionews.com yo1health.com zee.com -zeebiz.comzeeentertainment.com zeenews.com"zeenews-fonts.s3.amazonaws.com - -VIU -viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net - -ARCHIVE archive.org - - -BLOGSPOT blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn - -DNSPOD dns.pub  dnsapi.cn  dnspod.cn -dnspod.com dnspod.com.cn -dnspod.net -dnspod.org  dnsv1.com  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub -7 -PGYER  pgyer.com -tracup.com frontjs.com -/ - STARTPAGE startpage.com ixquick.com - -TUNSAFE tunsafe.com -$ - LOCALPRESSHKlocalpresshk.com - -NODEJS -nodejs.org -r - -PURIKONEJP"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.net -" - RASPBERRYPIraspberrypi.org - -JIGUANG -42r.cn -5566ua.com aurorapush.cn -e0n.cn japps.cn jchat.io -jiguang.cn jmlk.co jpush.cn jpush.io jpushoa.com -jsurvey.cn  jvoice.cn -kc9.cn -n0q.cn pushcfg.com -s0n.cn - - NEURALINK neuralink.com - -SFACG  sfacg.com - -UPROXY -uproxy.org - - ALIBABACLOUDalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.com - -AMAZON amazon-adsystem.com -adswholecitiesfoundation.orgwholefoodsmarket.comwholekidsfoundation.orgwholeplanetfoundation.orgaws -amazonimdb -kindle xn--cckwcxetdxn--jlq480n2rg yamaxun -zappos a2z.comaboutamazon.cn -cnaboutamazon.co.ukaboutamazon.comaboutamazon.com.auaboutamazon.deaboutamazon.esaboutamazon.euaboutamazon.fraboutamazon.inaboutamazon.itaboutamazon.jpaboutamazon.pl alexafund.cn -cnalexafund.com.cn -cn amaaozn.comamazon-fashions.comamazon-jp-recruiting.comamazon-lantern.comamazon-launchpad.com  amazon.ae  amazon.ca amazon.cn -cn amazon.co.jp amazon.co.uk -amazon.com amazon.com.au amazon.com.br amazon.com.mx amazon.com.tr  amazon.de  amazon.es  amazon.fr  amazon.in  amazon.it amazon.jobs  amazon.jp  amazon.nl -amazon.red  amazon.sgamazonalexavoxcon.comamazonauthorinsights.comamazonbusiness.cn -cn!amazonbusiness.com.cn -cnamazonbusiness.orgamazonbusinessblog.comamazonchoice.cn -cnamazonchoice.com.cn -cnamazonchoices.cn -cn amazonchoices.com.cn -cnamazondevicesupport.comamazonfctours.comamazonianblog.comamazonimages.comamazoninspire.cn -cn amazoninspire.com.cn -cnamazonlaunchpad.cn -cnamazonlaunchpad.com"amazonlaunchpad.com.cn -cn amazonlending.com.cn -cn!amazonliterarypartnership.comamazonlumberyard.wang amazonnow.cn -cnamazonnow.com.cn -cn amazonpay.com amazonpay.in amazonsdi.comamazonstudiosguilds.comamazontrust.comamazonvideodirect.com amzn.com amzn.to  amznl.comassoc-amazon.cn -cnassociates-amazon.comgameon-masters.comgdansk-amazon.comimages-amazon.commedia-amazon.com primeday.cn -cnprimeday.com.cn -cn primeday.infosiege-amazon.comssl-images-amazon.comueberamazon.de -yamaxun.cn -cn yamaxun.comz.cn -cn  alexa.com audible.comacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.com amazonaws.com amazonaws.tvamazonworkdocs.cn -cnamazonworkdocs.com!amazonworkdocs.com.cn -cnamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrust.comcdkworkshop.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com".+\.awsdns-[0-9][0-9]\.co\.uk$.+\.awsdns-[0-9][0-9]\.com$.+\.awsdns-[0-9][0-9]\.net$.+\.awsdns-[0-9][0-9]\.org$".+\.awsdns-cn-[0-9][0-9]\.biz$!.+\.awsdns-cn-[0-9][0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$createspace.com kindle.cn -cn kindle.co.jp kindle.co.uk -kindle.com  kindle.de  kindle.es  kindle.fr  kindle.in  kindle.it  kindle.jpkindleoasis.cn -cnkindleoasis.comkindleoasis.com.cn -cnkindleoasis.infokindleoasis.jpkindleoasis.orgkindleoasis.uskindleoasisnews.comkindleproject.comamazonprimevideo.cn -cn#amazonprimevideo.com.cn -cnamazonprimevideos.comamazonvideo.ccamazonvideo.comprime-video.com primevideo.ccprimevideo.comprimevideo.infoprimevideo.org primevideo.tv+images-cn.ssl-images-amazon.com -cn-!images-cn-8.ssl-images-amazon.com -cn -( -DEBIAN -debian.org -dotdeb.org - - INOREADER inoreader.com - -ZERONET -zeronet.io -@ -JQUERY -jquery.comjquerymobile.com jqueryui.com - - OPENSTREETMAP openmaps.orgopenstreetmap.comopenstreetmap.netopenstreetmap.orgopenstreetmaps.org osm.orgosmfoundation.orgstateofthemap.comstateofthemap.org - -HKCNEWS hkcnews.com -a -LE -le.com lecloud.com -lemall.com letv.com letvcdn.com letvimg.com - -RSF rsf.org -? -STRIPE -stripe.comstripe.network stripecdn.com - -AKASHA akasha.world -' -HEYZO heydoga.com  heyzo.com - - -STATICFILEstaticfile.org - -DMM-ADS bluekai.com -adsfout.jp -ads gmossp-sp.jp -adsi-mobile.co.jp -ads im-apps.net -ads impact-ad.jp -ads ladsp.com -ads microad.co.jp -ads -microad.jp -ads socdm.com -ads - -ITU itu.int -4 -SCInewisiknowledge.comisiknowledge.com -9 -SHADOWSOCKSCOMshadowsocks.comshadowsocks.nl -I -PYTHON -python.orgpythonhosted.org pypa.io pypi.org -! -WANFANGwanfangdata.com.cn - -WINDY  windy.com - -CASTRO  castro.fm - - CATEGORY-ADS apilog-web.acfun.cn -ads adcolony.com -ads -adjust.com -ads a.alimama.cn -adsacjs.aliyun.com -adsadash.m.taobao.com -ads!adashbc.m.taobao.com -ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com -ads adashx.m.taobao.com -ads$adashx4ae.ut.taobao.com -ads#adashx4yt.m.taobao.com -ads#adashxgc.ut.taobao.com -adsadsh.m.taobao.com -adsafp.adchina.com -adsafp.alicdn.com -ads agoodm.m.taobao.com -ads#agoodm.wapa.taobao.com -ads alipaylog.com -adsamdc.alipay.com -adsamdc.m.taobao.com -ads api.wapa.taobao.com -ads#api.waptest.taobao.com -adsapoll.m.taobao.com -ads#appdownload.alicdn.com -adsatanx.alicdn.com -adsatanx2.alicdn.com -adscbu01.alicdn.com -adscdn0.mobmore.com -adsclick.aliyun.com -ads&click.mz.simba.taobao.com -adscm.ipinyou.com -ads cm.mlt01.com -ads!dsp.simba.taobao.com -adserr.taobao.com -adsex.mobmore.com -ads ex.puata.info -ads!fav.simba.taobao.com -ads$feedback.whalecloud.com -adsff.win.taobao.com -ads fm.p0y.cn -adsg.click.taobao.com -ads -g.tbcdn.cn -adsgma.alicdn.com -adsgtms01.alicdn.com -adsgtms02.alicdn.com -adsgtms03.alicdn.com -adsgtms04.alicdn.com -adshydra.alibaba.com -ads'hz.pre.tbusergw.taobao.net -ads#hz.tbusergw.taobao.net -ads i.ipinyou.com -adsinit.phpwind.com -ads!intl.wapa.taobao.com -ads$intl.waptest.taobao.com -ads"jxlog.istreamsche.com -adslog.umtrack.com -adsm.intl.taobao.com -adsm.simba.taobao.com -adsmatch.p4p.1688.com -ads%material.istreamsche.com -ads mlt01.com -ads&nbsdk-baichuan.alicdn.com -ads&nbsdk-baichuan.taobao.com -ads"osfota.cdn.aliyun.com -ads osupdate.aliyun.com -ads&osupdateservice.yunos.com -ads%pindao.huoban.taobao.com -adspush.wandoujia.com -adsre.m.taobao.com -ads re.taobao.com -ads&redirect.simba.taobao.com -adsrj.m.taobao.co -adsrj.m.taobao.com -adssdkinit.taobao.com -adsshow.re.taobao.com -adssimaba.taobao.com -adssimba.m.taobao.com -ads!srd.simba.taobao.com -adsstats.ipinyou.com -ads strip.taobaocdn.com -ads$tanxlog.istreamsche.com -adstejia.taobao.com -adstemai.taobao.com -ads!tns.simba.taobao.com -ads tongji.linezing.com -ads tvupgrade.yunos.com -adstyh.taobao.com -adsuserimg.qunar.com -adsw.m.taobao.com -adsyiliao.hupan.com -ads amazon-adsystem.com -adsiadsdk.apple.com -ads iad.apple.com -ads qwapi.com -ads applovin.com -ads -applvn.com -ads atom-data.io -adsanalytics-data.io -ads ironbeast.io -ads a.baidu.com -ads ad.duapps.com -ads ad.player.baidu.com -ads adm.baidu.com -adsadscdn.baidu.com -adsadx.xiaodutv.com -adsae.bdstatic.com -ads afd.baidu.com -ads als.baidu.com -ads&api.mobula.sdk.duapps.com -ads"api.tuisong.baidu.com -adsappc.baidu.com -adsb.bdstatic.com -adsbaichuan.baidu.com -adsbaidustatic.com -adsbaidutv.baidu.com -adsbanlv.baidu.com -ads bar.baidu.com -ads"bdimg.share.baidu.com -adsbdplus.baidu.com -ads bj.bcebos.com -adsbtlaunch.baidu.com -ads c.baidu.com -ads cb.baidu.com -adscbjs.baidu.com -adscjhq.baidu.com -adscleaner.baidu.com -ads click.bes.baidu.com -adsclick.hm.baidu.com -adsclick.qianqian.com -ads"cm.baichuan.baidu.com -ads cm.baidu.com -adscm.pos.baidu.com -ads cpro.baidu.cn -adscpro.baidu.com -ads!cpro.baidustatic.com -ads!cpro.tieba.baidu.com -ads"cpro.zhidao.baidu.com -adscpro2.baidu.com -ads"cpro2.baidustatic.com -ads crs.baidu.com -adsdatax.baidu.com -ads dd713.bj.bcebos.com -ads dl.client.baidu.com -adsdl.ops.baidu.com -adsdl1sw.baidu.com -adsdl2.bav.baidu.com -adsdlsw.baidu.com -adsdlsw.br.baidu.com -ads!dl-vip.bav.baidu.com -ads(dl-vip.pcfaster.baidu.co.th -ads#download.bav.baidu.com -ads"download.sd.baidu.com -adsdrmcmm.baidu.com -ads dup.baidustatic.com -ads dxp.baidu.com -ads dzl.baidu.com -ads e.baidu.com -adseclick.baidu.com -adsecma.bdimg.com -adsecmb.bdimg.com -adsecmc.bdimg.com -ads eiv.baidu.com -ads em.baidu.com -adsentry.baidu.com -ads ers.baidu.com -ads f10.baidu.com -ads#fc-feed.cdn.bcebos.com -adsfclick.baidu.com -adsfeed.baidu.com -adsfexclick.baidu.com -ads g.baidu.com -adsgimg.baidu.com -adsguanjia.baidu.com -ads hc.baidu.com -ads hm.baidu.com -adshmma.baidu.com -ads hpd.baidu.com -adsidm.bce.baidu.com -adsidm-su.baidu.com -adsiebar.baidu.com -adsikcode.baidu.com -adsimg.taotaosou.cn -adsimg01.taotaosou.cn -adsj.br.baidu.com -adskstj.baidu.com -ads log.music.baidu.com -ads m1.baidu.com -ads ma.baidu.com -adsmobads.baidu.com -ads"mobads-logs.baidu.com -adsmpro.baidu.com -adsmsite.baidu.com -adsneirong.baidu.com -adsnsclick.baidu.com -ads#nsclickvideo.baidu.com -adsopenrcv.baidu.com -ads$pc.videoclick.baidu.com -ads pos.baidu.com -adspups.bdimg.com -ads%push.zhanzhang.baidu.com -ads qianclick.baidu.com -adsrelease.baidu.com -adsres.mi.baidu.com -ads"rigel.baidustatic.com -ads#river.zhidao.baidu.com -ads rj.baidu.com -adsrplog.baidu.com -ads s.baidu.com -adss.cpro.baidu.com -ads!sa.tuisong.baidu.com -adssclick.baidu.com -adssestat.baidu.com -adsshadu.baidu.com -adsshare.baidu.com -ads"snippet.pos.baidu.com -adssobar.baidu.com -adssobartop.baidu.com -adsspcode.baidu.com -adsstat.v.baidu.com -ads su.bdimg.com -adssu.bdstatic.com -ads t10.baidu.com -ads t11.baidu.com -ads t12.baidu.com -ads tk.baidu.com -adstkweb.baidu.com -ads"tob-cms.bj.bcebos.com -adstongji.baidu.com -adstoolbar.baidu.com -adstracker.baidu.com -adstuijian.baidu.com -ads*uat1.bfsspadserver.8le8le.com -ads#ubmcmm.baidustatic.com -adsucstat.baidu.com -adsulic.baidu.com -ads ulog.imap.baidu.com -adsunion.baidu.com -ads!unionimage.baidu.com -adsutility.baidu.com -ads utk.baidu.com -ads videopush.baidu.com -adsvv84.bj.bcebos.com -adsw.gdown.baidu.com -ads w.x.baidu.com -adswangmeng.baidu.com -adsweishi.baidu.com -ads$wenku-cms.bj.bcebos.com -ads%wisepush.video.baidu.com -ads wm.baidu.com -adswn.pos.baidu.com -adsznsv.baidu.com -adszz.bdstatic.com -adszzy1.quyaoya.com -adsmcs.snssdk.com -adsx.clearbitjs.com -ads bluekai.com -adsfout.jp -ads gmossp-sp.jp -adsi-mobile.co.jp -ads im-apps.net -ads impact-ad.jp -ads ladsp.com -ads microad.co.jp -ads -microad.jp -ads socdm.com -ads emogi.com -adsdata.flurry.com -ads2mdn.net -ads admob.com -ads adsense.com -ads'adsensecustomsearchads.com -ads%adsenseformobileapps.com -ads$advertisercommunity.com -ads%advertiserscommunity.com -ads"adwords-community.com -ads adwords.com -adsadwordsexpress.com -ads app-measurement.com -ads&clickserver.googleads.com -adsdoubleclick.com -adsdoubleclick.net -ads!google-analytics.com -adsgoogleadapis.com -ads!googleadservices.com -ads googleanalytics.com -adsgoogleoptimize.com -ads"googlesyndication.com -ads!googletagmanager.com -ads"googletagservices.com -ads'googletraveladservices.com -ads -urchin.com -ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ -ads!assets.growingio.com -adsmlog.hiido.com -adsylog.hiido.com -adsstatic.hotjar.com -adsclick.hunantv.com -adsda.hunantv.com -ads da.mgtv.com -adslog.hunantv.com -adslog.v2.hunantv.com -adsres.hunantv.com -adsv2.log.hunantv.com -adsinner-active.mobi -adsa.ckm.iqiyi.com -adsad.m.iqiyi.com -ads afp.iqiyi.com -adsc.uaa.iqiyi.com -ads cloudpush.iqiyi.com -ads"cm.passport.iqiyi.com -adscupid.iqiyi.com -ads#emoticon.sns.iqiyi.com -ads!gamecenter.iqiyi.com -ads!hotchat-im.iqiyi.com -adsifacelog.iqiyi.com -adsmbdlog.iqiyi.com -ads msg.71.am -adsmsg.video.qiyi.com -ads msg2.video.qiyi.com -ads#policy.video.iqiyi.com -adsyuedu.iqiyi.com -adsads.union.jd.com -ads c-nfa.jd.com -adscps.360buy.com -ads -jzt.jd.com -ads stat.m.jd.com -ads img-x.jd.com -ads log-sdk.gifshow.com -adswlog.kuaishou.com -ads leanplum.com -ads#api.game.letvstore.com -ads ark.letv.com -ads dc.letv.com -adsdev.dc.letv.com -ads fz.letv.com -ads g3.letv.com -adsletv.allyes.com -adsminisite.letv.com -adsmsg.m.letv.com -adsn.mark.letv.com -adsplog.dc.letv.com -adspro.hoye.letv.com -ads pro.letv.com -ads stat.letv.com -ads"static.app.m.letv.com -ads decide.mixpanel.com -ads mopub.com -adsevt.mxplay.com -adsanalytics.163.com -ads crash.163.com -ads crashlytics.163.com -ads g.163.com -ads"js-agent.newrelic.com -ads ogury.com -ads -presage.io -adsogury.co -ads onesignal.com -adsOB^speed\.(coe|open)\.ad\.[a-z]{2,6}\.prod\.hosts\.ooklaserver\.net$ -ads cdn.pocoiq.cn -ads oct.pocoiq.cn -adsads.pubmatic.com -adscdn.segment.com -ads"static.sensorsdata.cn -ads 2016.sina.cn -adsad.sina.com.cn -adsadbox.sina.com.cn -ads!adimages.sina.com.hk -ads!adimg.mobile.sina.cn -ads adimg.uve.weibo.com -ads!adm.leju.sina.com.cn -ads ads.sina.com -adsalitui.weibo.com -adsapi.apps.sina.cn -ads appgift.sinaapp.com -ads#appsupdate.sinaapp.com -ads atm.sina.com -adsbeacon.sina.com.cn -ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com -ads%click.uve.mobile.sina.cn -ads click.uve.weibo.com -adscm.dmp.sina.cn -ads0#contentrecommend-out.mobile.sina.cn -ads$count.video.sina.com.cn -ads counter.sina.com.cn -adscre.dp.sina.cn -adscre-dp.sina.cn -adsd00.sina.com.cn -adsdcads.sina.com.cn -adsdl.kjava.sina.cn -ads dmp.sina.cn -adsdp.im.weibo.cn -ads game.weibo.cn -adsgame.weibo.com -ads"gw5.push.mcp.weibo.cn -ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn -ads"int.dpool.sina.com.cn -ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn -ads log.mix.sina.com.cn -ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn -ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn -adsnewspush.sinajs.cn -ads oascentral.sina.com -ads#oascentral.sina.com.hk -adsp4p.sina.com.cn -adspalmnews.sina.cn -adspay.mobile.sina.cn -adspfp.sina.com.cn -adspfpip.sina.com -ads!promote.biz.weibo.cn -ads r.dmp.sina.cn -adsrm.sina.com.cn -ads rs.sinajs.cn -adss.alitui.weibo.com -ads"s.img.mix.sina.com.cn -ads sapi.sina.cn -ads sax.sina.cn -adssax.sina.com.cn -adssaxn.sina.com.cn -adssaxs.sina.com.cn -ads sbeacon.sina.com.cn -ads"sdkapp.mobile.sina.cn -ads!sdkapp.uve.weibo.com -ads$sdkclick.mobile.sina.cn -ads slog.sina.cn -adsslog.sina.com.cn -ads'staticadm.leju.sina.com.cn -adstjs.sjs.sinajs.cn -ads"trends.mobile.sina.cn -ads"u1.img.mobile.sina.cn -ads&wapwbclick.mobile.sina.cn -ads!wbapp.mobile.sina.cn -ads wbapp.uve.weibo.com -ads#wbclick.mobile.sina.cn -ads$wbpctips.mobile.sina.cn -adswidget.weibo.com -ads woocall.sina.com.cn -adszc.biz.weibo.com -adszymo.mps.weibo.com -adsadnet.sohu.com -ads ads.sohu.com -ads!adv-sv-show.focus.cn -ads aty.sohu.com -adsdata.vod.itc.cn -adsepro.sogou.com -ads go.sohu.com -adsgolden1.sogou.com -adsimp.optaim.com -adsinte.sogou.com -adsinte.sogoucdn.com -adslu.sogoucdn.com -ads pv.sohu.com -adstheta.sogoucdn.com -adstrack.sohu.com -adsuranus.sogou.com -adsv2.reachmax.cn -ads)e8aeb8bbdbbd7.cdn.sohucs.com -ads)643108e7617ef.cdn.sohucs.com -ads'adeventtracker.spotify.com -ads$adstudio-assets.scdn.co -ads#bloodhound.spotify.com -adssupersonic.com -adssupersonicads.com -ads -ssacdn.com -ads)supersonicads-a.akamaihd.net -ads g1.tagtic.cn -adsxy-log.tagtic.cn -adsssp.api.tappx.com -ads ad.qq.com -ads ad.qun.qq.com -ads!adfilter.imtt.qq.com -ads adping.qq.com -adsadpm.app.qq.com -adsadsclick.qq.com -adsadsfile.qq.com -adsadshmmsg.qq.com -adsadslvfile.qq.com -adsadslvseed.qq.com -ads%adsmind.apdcdn.tc.qq.com -adsadsqqclick.qq.com -adsadstestview.qq.com -adsadsview.qq.com -adsadsview2.qq.com -adsadv.app.qq.com -ads adver.qq.com -ads btrace.qq.com -adse.qq.com -adslog.tbs.qq.com -ads mpush.qq.com -ads mtrace.qq.com -ads push.qq.com -ads pgdt.gtimg.cn -ads uberads.com -adsalog.umeng.com -ads alog.umengcloud.com -ads -w.cnzz.com -ads!unityads.unity3d.com -ads#unityads.unitychina.cn -ads ads.wteam.xyz -ads#collector.xhamster.com -adsad.intl.xiaomi.com -ads ad.mi.com -ads ad.xiaomi.com -adsadmob.xiaomi.com -adsad1.xiaomi.com -adsmistat.xiaomi.com -adstracking.miui.com -adsadv.sec.miui.com -ads"adv.sec.intl.miui.com -ads"misc.in.duokanbox.com -ads ad.hpplay.cn -adsadeng.hpplay.cn -ads kuyun.com -ads umeng.com -ads ads.yahoo.com -adsgemini.yahoo.com -ads ysm.yahoo.com -adsactives.youku.com -ads ad.api.3g.youku.com -ads$ad.api.mobile.youku.com -ads ad.mobile.youku.com -ads(a-dxk.play.api.3g.youku.com -ads atm.youku.com -ads#b.smartvideo.youku.com -adsc.yes.youku.com -adsdas.api.youku.com -ads!das.mobile.youku.com -ads!dev-push.m.youku.com -adsdl.g.youku.com -adsdmapp.youku.com -adse.stat.ykimg.com -ads#gamex.mobile.youku.com -ads!guanggaoad.youku.com -ads hudong.pl.youku.com -ads!huodong.pl.youku.com -ads"huodong.vip.youku.com -ads hz.youku.com -adsiyes.youku.com -ads l.ykimg.com -adslstat.youku.com -ads mobilemsg.youku.com -ads msg.youku.com -adsmyes.youku.com -ads p.l.youku.com -ads pl.youku.com -ads#passport-log.youku.com -adsp-log.ykimg.com -adspush.m.youku.com -ads r.l.youku.com -ads s.p.youku.com -adssdk.m.youku.com -adsstat.youku.com -ads$statis.api.3g.youku.com -ads&store.tv.api.3g.youku.com -ads&store.xl.api.3g.youku.com -adstdrec.youku.com -adstest.ott.youku.com -ads!test.sdk.m.youku.com -ads v.l.youku.com -adsval.api.youku.com -ads wan.youku.com -adsykatr.youku.com -adsykrec.youku.com -ads cvnad.com -ads -iyoowi.com -ads zynga.com -ads#zyngaplayersupport.com -ads 51y5.net a.adtng.com -aaxads.com -ad-srv.netad.api.moji.comad.wang502.com adbutter.netads.trafficjunky.net adtechus.com adxprtz.comcdn.advertserve.comcdn.banclip.comcfts1tifqr.comcontentabc.com cretgate.comero-advertising.comeroadvertising.com exoclick.com -exosrv.comimg-bss.csdn.net imglnkc.com imglnkd.comja2.gamersky.com jl3.yjaxa.topkepler-37b.com -lqc006.coms4yxaqyq95.comshhs-ydd8x2.yjrmss.cnstatic.javhd.comtrafficfactory.biztsyndicate.com adx.36kr.comclick.ali213.netpbmp.ali213.net^pinggai\d\.caixin\.com$adq.chinaso.comstat.chinaso.com toboads.comdn-growing.qbox.me ad.unimhk.comdas-rpt-log.ucloud.cn -& -HUYA huya.com msstatic.com -# -MEGA -mega.co.nz mega.nz - - -CHATURBATEchaturbate.com - - OPENRESTY openresty.org -i -SNAP -sc-cdn.net snap-dev.net snap.com snapads.com snapchat.com -snapkit.co - -CATEGORY-ENTERTAINMENT abema.io abema.tv  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net -att.tv atttvnow.comattwatchtv.com directv.com  dtvce.comnettyinternet.com gamer.com.twbahamut.com.twgamer-cds.cdn.hinet.netgamer2-cds.cdn.hinet.net bandcamp.com -bcbits.com blubrry.com  castro.fm blizzard.cn -cn blizzard.comblizzardgearstore.comblz-contentstack.com blzstatic.cn -cn -battle.netbattlenet.com.cn -cn bnet.163.com -cnblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comdi.res.netease.com -cn!diablo3.nosdn.127.net -cnfiresidegatherings.complayhearthstone.com%hearthstone.nosdn.127.net -cnheroesofthestorm.com%hearthstone.nosdn.127.net -cn"heroes.nos.netease.com -cnplayoverwatch.com#overwatch.nosdn.127.net -cn starcraft.comstarcraft2.comsc2.nosdn.127.net -cnplaywarcraft3.comworldofwarcraft.com wowchina.com -cnwow.nosdn.127.net -cnblizzcon-a.akamaihd.netblz.nosdn.127.net -cnblzmedia-a.akamaihd.netblznav.akamaized.net dawngate.com eastore.comlordofultima.com -origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.akamaihd.netrtm.tnt-ea.comssl-lvlt.cdn.ea.comawayoutgame.combattlefieldbadcompany2.combattlefront2.combattlefrontii.combejewled-stars.combejeweledstars.comcapitalgames.com chillingo.comcommandandconquer.comconquerwithcharacter.com  crysis.jp dawngate.comdawngatechronicles.com -dicela.com -dicela.netea-anz-press.com -ea.com eaaccess.comeacashcard.com eacodigos.com eakorea.co.kr eamobile.com eanordic.com -eaplay.com easports.com easports.jpeasportsactive.comeasportsactiveonline.comeasportsfootball.comeasportsfootballclub.comeasportsmma.comeasportsworld.comelectronicarts.comelectronicarts.fr futpromos.com futunited.comghostgames.comheroesofdragonage.com hutpromos.commaddenchampionship.commaddenrewards.commaddenseason.infomaddenseason.netmaddenseason.org  maxis.commysimsracing.com play4free.com playapex.com pogo.com pogobeta.com -popcap.comprojectapex.com pvzheroes.com spearhead.krspeedhunters.com  spore.com ssx3.comstarwarsbattlefront.comstarwarsbattlefront2.comtiberiumalliances.com tiburon.com -tnt-ea.comultimaforever.com unravel2.comunraveltwo.comvisceralgames.com -yogify.comanthemgame.comanthemthegame.comapexlegends.comprojectapex.combattlefield.combattlefield1943.combattlefield3.combattlefield4.combattlefield5.combattlefieldheroes.combattlefieldv.com battlelog.com bioware.combiowarestore.com eamythic.com eamythic.net cncrivals.comcommandandconquer.comtiberiumalliances.comcamelot-europe.comcamelotherald.comcamelotherald.net daoc.netdarkageofcamelot.comdarkness-risen.comdeadspacegame.com dice.se dragonage.comdragonagekeep.comdragonagemovie.comthedreadwolfrises.comdungeonkeeper.cndungeonkeeper.comdungeonkeeper.com.cneafootballworld.comfifastreet.comfifastreet3.com frostbite.comindustrialtoys.commasseffect.commasseffectarchives.comeamirrorsedge.commirrorsedge.commirrorsedge.jpmirrorsedge.netmirrorsedge2.commirrorsedge2d.comblackboxgames.comeablackbox.comneedforspeed.comneedforspeedboost.comneedforspeeddriftkings.comneedforspeedeliminator.comneedforspeedlightning.comneedforspeedoverdrive.comneedforspeedproven.comneedforspeedredline.comneedforspeedshowdown.comneedforspeedstreetkings.comneedforspeedtakedown.comneedforspeedtherun.comneedforspeedtimeattack.com#needforspeedundergroundeast.com nfsworld.comteamneedforspeed.complantsvszombies2.com -pvzgw2.com pvzheroes.comseaofsolitude.comsimcity-buildit.com simcity.com -skate2.com spearhead.krstarwarsfallenorder.comstarwarsjedifallenorder.comstarwarstheoldrepublic.comswjedifallenorder.com  swjfo.com  swtor.com  swtor.net -mysims.com thesims.com thesims3.com thesims4.comthesimssocial.com titanfall.commythicentertainment.commythicentertainment.netmythicgames.comultimaonline.com -uo.com uoherald.com xdsummit.comea.tt.omtrdc.neteaassets-a.akamaihd.netbattlebreakers.com eac-cdn.com easy.aceasyanticheat.net epicgames.com fortnite.com paragon.complayparagon.comroborecall.comshadowcomplex.com spyjinx.comunrealengine.comunrealtournament.com6*^cdn\d-epicgames-\d+\.file\.myqcloud\.com$ -cn*&^epicgames-download\d\.akamaized\.net$;/^epicgames-download\d-\d+\.file\.myqcloud\.com$ -cn"avatargarenanow-a.akamaihd.netcdngarenanow-a.akamaihd.netdlgarenanow-a.akamaihd.net!dlmobilegarena-a.akamaihd.net garena.co.id garena.co.th -garena.com garena.live  garena.my  garena.ph  garena.sg  garena.tv  garena.tw  garena.vn garenanow.com seagroup.com gog.comgog-statics.comgog.qtlglb.com -cn$gogalaxy.gog-statics.com -cn'menu-static.gog-statics.com -cn'productcard.gog-statics.com -cn(static-login.gog-statics.com -cn'www4-static.gog-statics.com -cn, ^images(-\d)?\.gog-statics\.com$ -cn100classicbooks.com -amiibo.comayudanintendo.combowsersinsidestory.comexcitebots.comflipnotestudio.comgloryofheracles.comhackyourconsole.comkirbysuperstarultra.comkirbysepicyarn.comlegendofzelda.cn -cn legendofzelda.com.cn -cn miitomo.commiitomo.com.cn -cn miiverse.com nentindo.netnintendo-europe-sales.comnintendo-europe.com nintendo.at nintendo.be nintendo.chnintendo.co.jpnintendo.co.krnintendo.co.uknintendo.co.za nintendo.comnintendo.com.hknintendo.com.pt nintendo.de nintendo.dk nintendo.es nintendo.eu nintendo.fi nintendo.fr nintendo.it nintendo.net nintendo.nl nintendo.no nintendo.pt nintendo.ru nintendo.se nintendo.twnintendo3ds.comnintendodsi.comnintendoeurope.comnintendolabo.cn -cnnintendonetwork.netnintendonyc.comnintendostore.comnintendoswitch.comnintendoswitch.netnintendoswitchtogether.compersonaltrainermath.complaynintendo.comsupersmashbros.cn -cn!supersmashbros.com.cn -cnthelegendarystarfy.comthewonderful101.comwariolandshakeit.comwariowarediy.comyoshisnewisland.comac-pocketcamp.comdiddykongracing.com dkr.com donkeykongcountryreturns.comfire-emblem-heroes.comfireemblemawakening.com -dialga.com giratina.com -kyurem.com pokedex3d.compokemon-moon.compokemon-sun.compokemon-sunmoon.com pokemon.compokemonbank.compokemonblackwhite.com pokemonbw.compokemonchampionships.compokemongoldsilver.compokemonhome.compokemonletsgoeevee.compokemonletsgopikachu.compokemonmysterydungeon.compokemonpicross.compokemonplatinum.compokemonrubysapphire.compokemonsunmoon.compokemonswordshield.compokemonultrasunmoon.compokemonvgc.compokemonwifi.net xn--mts47c3w9b1qr.cn -cnxn--mts47c3w9b1qr.netsplatoon2tournament.com starfox.comdrmario-world.commarioandluigidreamteam.commariobroswii.com mariokart.cn -cnmariokart.com.cn -cnmariokart7.commariokart8.commariosupersluggers.comnewsupermariobrosu.comsupermario.comsupermario3dworld.com!supermariobros.com.cn -cnsupermariogalaxy.comsupermariorun.comsuperpapermario.comnintendowii.com  wii-u.com -wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net playstationplaystation.complaystation.net sonyentertainmentnetwork.com"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn -cnleagueoflegends.co.krleagueoflegends.comleagueoflegends.infoleagueoflegends.krleagueoflegends.netleagueoflegends.orgleagueoflegendsscripts.comleaguesharp.infoleaguoflegends.comlearnwithleague.comlol-europe.com lolclub.org lolespor.comlolesports.com lolfanart.net -lolpcs.com lolshop.co.kr lolstatic.comlolusercontent.com -lpl.com.cn -cn pvp.net -pvp.tv ulol.comlolstatic-a.akamaihd.netplayvalorant.comriotforgegames.comruinedking.comconvrgencegame.comrockstargames.com -rsg.sc1-gamedownloads-rockstargames-com.akamaized.net)%media-rockstargames-com.akamaized.net*&videos-rockstargames-com.akamaized.net fanatical.comhumblebundle.complayartifact.com -s.teamsteam-chat.comsteamcommunity.comsteamcontent.comsteamgames.comsteampowered.comsteamstatic.comsteamusercontent.comunderlords.comvalvesoftware.com wmsjsteam.com -cn csgo.wmsj.cn -cndl.steam.ksyna.com -cn dota2.wmsj.cn -cn st.dl.bscstorage.net -cnst.dl.eccdnx.com -cn!st.dl.pinyuncloud.com -cn&steampowered.com.8686c.com -cn%steamstatic.com.8686c.com -cn steambroadcast.akamaized.netsteamcdn-a.akamaihd.net!steamcommunity-a.akamaihd.netsteamstore-a.akamaihd.net#steamusercontent-a.akamaihd.net"steamuserimages-a.akamaihd.netsteamunlocked.net ubi.com ubisoft.com  uplay.com,(ubisoft-uplay-savegames.s3.amazonaws.com,(ubisoft-orbit-savegames.s3.amazonaws.com)uplaypc-s-ubisoft.cdn.ubi.com -cn -beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com -mojang.comforzamotorsport.netforzaracingchampionship.com forzarc.comorithegame.comrenovacionxboxlive.comtellmewhygame.com xbox.co xbox.com xbox.eu xbox.org -xbox360.co xbox360.com -xbox360.eu xbox360.org -xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn -cn xboxlive.com -xboxone.co xboxone.com -xboxone.euxboxplayanywhere.comxboxstudios.com -xbx.lvdeviantart.comdeviantart.net da-files.comabc-studios.com abc.com edgedatg.com espn.com espn.net espncdn.com -espnqa.com watchespn.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net -marvel.commarvel10thanniversary.commarveldimensionofheroes.commarvelparty.netmarvelpinball.commarvelsdoubleagent.commarvelspotlightplays.com marvelsuperheroseptember.commarvelsuperwar.comthemarvelexperiencetour.comnatgeomaps.comnationalgeographic.com"nationalgeographicpartners.com ngeo.comadventuresbydisney.com -babble.com babyzone.com -dilcdn.comdisney-asia.comdisney-discount.comdisney-plus.netdisney-studio.comdisney-studio.net  disney.be  disney.bg  disney.ca disney.co.il disney.co.th disney.co.uk disney.co.za -disney.com disney.com.au disney.com.br  disney.cz  disney.de  disney.dk  disney.es  disney.fi  disney.fr  disney.gr  disney.hu  disney.id  disney.in  disney.io  disney.it  disney.my  disney.nl  disney.no  disney.ph  disney.pl  disney.pt  disney.ro  disney.se  disney.sgdisneyadsales.comdisneyarena.comdisneyaulani.comdisneybaby.comdisneycareers.comdisneychannelonstage.comdisneychannelroadtrip.comdisneycruisebrasil.comdisneyenconcert.comdisneyiejobs.comdisneyinflight.comdisneyjunior.comdisneyjuniortreataday.comdisneylatino.comdisneymagicmoments.co.ildisneymagicmoments.co.ukdisneymagicmoments.co.zadisneymagicmoments.dedisneymagicmoments.esdisneymagicmoments.frdisneymagicmoments.gen.trdisneymagicmoments.grdisneymagicmoments.itdisneymagicmoments.pl disneyme.comdisneymeetingsandevents.comdisneymovieinsiders.comdisneymusicpromotion.comdisneynewseries.com disneynow.comdisneypeoplesurveys.comdisneyplus.comdisneyredirects.comdisneysrivieraresort.comdisneystore.comdisneysubscription.comdisneyturkiye.com.trdisneytvajobs.comdisneyworld-go.com -dssott.comgo-disneyworldgo.com -go.com  mickey.tvmoviesanywhere.complaymation.comshopdisney.comshops-disney.comsorcerersarena.comspaindisney.com starwars.com#starwarsgalacticstarcruiser.comstreamingdisney.netthestationbymaker.comthisispolaris.comwatchdisneyfe.com fireside.fm cinemax.comforthethrone.com hbo.com hboasia.com  hbogo.com hbogoasia.com hbogoasia.hk -hbomax.com -hbonow.com  maxgo.com -112263.com callhulu.comfindyourlimits.com freehulu.com  hooloo.tv  hoolu.com hoolu.tv hu1u.com huloo.cc huloo.tv hulu.com hulu.tv hulu.ushuluaction.com -huluad.com huluapp.com huluasks.com hulucall.com hulufree.com hulugans.comhulugermany.com -hulugo.com -huluim.comhuluinstantmessenger.com huluitaly.com hulunet.comhulunetwork.com huluplus.comhulupremium.comhulupurchase.com -huluqa.comhulurussia.com huluspain.comhulusports.comhulustream.com huluteam.com -hulutv.com huluusa.comjoinmaidez.com mushymush.tv -myhulu.comoriginalhulu.com payhulu.comregisterhulu.comthehulubraintrust.comwwwhuluplus.com imdb.com imdb.tomedia-imdb.cominternationalsaimoe.comkingkong.com.twkingkongapp.com -kfs.io  kkbox.com kkbox.com.tw  kktix.com kktv.me litv.tv megaphone.fm moov.hk fast.com -netflix.ca netflix.com netflix.netnetflixinvestor.comnetflixtechblog.com nflxext.com nflximg.com nflximg.netnflxsearch.net -nflxso.net nflxvideo.netnico -nicodic.jp nicomanga.jp niconico.com nicoseiga.jp nicovideo.jp nimg.jp simg.jp overcast.fm  pixiv.net  pixiv.org pixiv.co.jp  pximg.net -pca.stpocketcasts.com fandango.com mgo.commgo-images.com ravm.tv roku.com rokutime.com dishworld.comslinginternational.com  sling.commovenetworks.com -movetv.comimageworks.commotionpictureser.com playshow.ioplayshowtv.comsonyclassics.comsonypictures.comsonypicturesanimation.comsonypicturesmuseum.comsonypicturesstudios.comsonypicturestelevision.com#sonypicturestelevisiongames.com wheelpop.com -wwtbam.comyourfantasybeginsnow.comsoundcloud.com -sndcdn.com byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com syosetu.com  amemv.com -muscdn.com -musical.ly -tiktok.com tiktokcdn.com tiktokv.com#p16-tiktokcdn-com.akamaized.net ext-twitch.tv  jtvnw.net  ttvnw.net  twitch.tv twitchcdn.net twitchsvc.net -vhx.tv -vhxqa1.com -vhxqa2.com -vhxqa3.com -vhxqa4.com -vhxqa6.comvimeo-staging.comvimeo-staging2.com  vimeo.com vimeo.frvimeobusiness.com vimeocdn.comvimeogoods.comvimeoondemand.comvimeostatus.comlivestream.com abow.jp angelbeats.jp -anigema.jpcharlotte-anime.jpclannad-movie.jpheaven-burns-red.comkamisama-day.jpkamisama-maeda-lab.com koubaibu.jplitbus-anime.com product.co.jprewrite-anime.tvvisualarts.gr.jpvisual-arts.jp -viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net -weverse.io wwe.com wwe9.com yande.re cvnad.com -ads -iyoowi.com -ads -got001.com -got002.com jstucdn.com playcvn.com rrys.tv rrys2019.com rrys2020.com rrysapp.com  yyets.com -zimuzu.com  zimuzu.tv zmz2019.com -zmzapi.com -z5.app -z5.com zee5.com zee5.in zee5.tvzeebioskop.com zeetv.co.uk  zeetv.com  zeeuk.com - -VIDEOLAN videolan.org - - -VISUALARTS abow.jp angelbeats.jp -anigema.jpcharlotte-anime.jpclannad-movie.jpheaven-burns-red.comkamisama-day.jpkamisama-maeda-lab.com koubaibu.jplitbus-anime.com product.co.jprewrite-anime.tvvisualarts.gr.jpvisual-arts.jp -, -DUYAOSS duyaoss.com duyaossr.com -L - -TEAMBITIONteambition.comteambition.netteambitionapis.com - -SOFTBANK softbank sb-mobile.jpsb-telecom.netsoftbank-ipo.comsoftbank-jp.comsoftbank-robotics.comsoftbank-telecom.comsoftbank-telecom.net softbank.jp softbank.tvsoftbankbb.comsoftbankbb.netsoftbankci.comsoftbankhawksstore.jpsoftbankmobile.netsoftbankrobotics.comsoftbanktelecom.comsoftbankusa.netsoftbankventuresasia.comsoftbankworld.com -i -ARCHIVEOFOUROWN ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net -0 -BITLY -bit.ly  bitly.com bitly.is - - -FAMILYMARTfamifun.com.tw family.co.jp family.com.twfamilymart.com.cn -cnfamilymart.com.myfamilymart.com.ph  famima.vn -@ - GLOBALVOICESglobalvoices.orgglobalvoicesonline.org -Q - BANDWAGONHOSTbandwagonhost.com bwh1.net bwh8.net  bwh88.net -* -BOXUN  boxun.combowenpress.com -~ -GITLAB -gitlab.com  gitlab.io -gitlab.netgitlab-static.net.*gitlab-assets.oss-cn-hongkong.aliyuncs.com -$ -NOTEPADnotepad-plus-plus.org -3 - XHAMSTER-ADS#collector.xhamster.com -ads -H -BTTZYW -btt804.com -btt904.com -bttzyw.com -bttzyw.net - - -CRAIGSLISTcraigslist.org -v -NATIONALGEOGRAPHICnatgeomaps.comnationalgeographic.com"nationalgeographicpartners.com ngeo.com - -SYOSETU syosetu.com - - -SHUZIYIMINshuziyimin.org -" - THEPORNDUDEtheporndude.com - -BITBANK -bitbank.cc - - -CLOUDFLAREcloudflare-dns.comcloudflare-ipfs.comcloudflare.comcloudflare.netcloudflareapps.comcloudflarebolt.comcloudflareclient.comcloudflareinsights.comcloudflareok.comcloudflareresolve.comcloudflaressl.comcloudflarestatus.comcloudflarestream.comcloudflaretest.com one.one.onetrycloudflare.comvideodelivery.net  warp.plus workers.dev - -DW -dw.com -( -LAGOU  lagou.com lgstatic.com -1 - QINGCLOUD qingcache.com qingcloud.com -8 - -CYBERTRUSTcybertrust.co.jpcybertrust.ne.jp - -GIT git-scm.com - -NUROFEN -nurofen.at -nurofen.bg -nurofen.cn -cn nurofen.co.il nurofen.co.nz nurofen.co.uk nurofen.co.za nurofen.comnurofen.com.aunurofen.com.cn -cnnurofen.com.sg -nurofen.cz -nurofen.de -nurofen.es -nurofen.fr -nurofen.hr -nurofen.hu -nurofen.ie -nurofen.it nurofen.net -nurofen.no -nurofen.pl -nurofen.pt -nurofen.ro -nurofen.sk -nurofen.runurofengel.com51nurofensk-prod-env.eu-west-1.elasticbeanstalk.com -, -PAOFUYUN paofu.cloud paofuyun.me -/ -REALTYPErealtype.co.jp realtype.jp - -RT -rt.com - -STEAM fanatical.comhumblebundle.complayartifact.com -s.teamsteam-chat.comsteamcommunity.comsteamcontent.comsteamgames.comsteampowered.comsteamstatic.comsteamusercontent.comunderlords.comvalvesoftware.com wmsjsteam.com -cn csgo.wmsj.cn -cndl.steam.ksyna.com -cn dota2.wmsj.cn -cn st.dl.bscstorage.net -cnst.dl.eccdnx.com -cn!st.dl.pinyuncloud.com -cn&steampowered.com.8686c.com -cn%steamstatic.com.8686c.com -cn steambroadcast.akamaized.netsteamcdn-a.akamaihd.net!steamcommunity-a.akamaihd.netsteamstore-a.akamaihd.net#steamusercontent-a.akamaihd.net"steamuserimages-a.akamaihd.net -S - UNITY-ADS!unityads.unity3d.com -ads#unityads.unitychina.cn -ads -$ -AFP afp.com afpforum.com -' -CODING  coding.me -coding.net - -CUTTLY cutt.ly -* -JIANSHU jianshu.com -jianshu.io - -ADIDAS  adidas.at  adidas.be  adidas.ch adidas.co.in adidas.co.uk -adidas.com adidas.com.cn -cn adidas.com.sa adidas.com.tw  adidas.cz  adidas.de  adidas.dk  adidas.hu  adidas.ie  adidas.it  adidas.nl  adidas.pl  adidas.ru  adidas.se - -BLUBRRY blubrry.com - - REALCLEAR realclear.comrealclearbooks.comrealcleardefense.comrealcleareducation.comrealclearenergy.orgrealclearfoundation.orgrealclearhealth.comrealclearhistory.comrealclearinvestigations.comrealclearlife.comrealclearmarkets.comrealclearpolicy.comrealclearpolitics.comrealclearpublicaffairs.comrealclearreligion.orgrealclearscience.comrealclearworld.com - -RUANMEI 6655.com cooldock.com -ithome.com lapin365.com ruanmei.com -saayaa.com win7china.com win8china.com - -TUBE8  tube8.com -R -UPAI  aicdn.com upai.com upaiyun.com  upcdn.net  upyun.com - -CATEGORY-COMPANIESacer-group.com acer.com acer.com.cn -cn typekit.com typekit.net10xfotolia.com 2o7.net acrobat.com adbecrsl.comadobe-aemassets-value.comadobe-audience-finder.com"adobe-video-partner-finder.com  adobe.com adobe.lyadobeaemcloud.comadobeaemcloud.netadobeawards.comadobecontent.ioadobecreativityawards.com adobedc.net adobedemo.com adobedtm.comadobeexchange.comadobeexperienceawards.com adobegov.comadobehiddentreasures.comadobejanus.com adobeku.comadobelanding.comadobelogin.com adobeoobe.comadobeplatinumclub.comadobeprojectm.com adobesc.com adobesign.comadobesigncdn.comadobespark.com adobess.comadobestock.com adobetag.comadobetarget.comadobetcstrialdvd.comadobetechcomm.comadobetechcommcallback.comadobetechcommdemo.comadobexdplatform.comassetsadobe.com authorxml.combusinesscatalyst.com ccnsite.com  ccpsx.com -demdex.netdollarfotoclub.comdollarphotoclub.comdollarphotosclub.comdouwriteright.com echocdn.com echosign.com edgefonts.netenablementadobe.com  ftcdn.net gostorego.comimagineecommerce.commacromedia.commagentoliveconference.commarketing-nirvana.com omniture.com -omtrdc.net photoshop.complacesdocs.comsundanceignite2016.comworldsecureemail.comworldsecuresystems.com adobe.iodevelopria.com behance.nets2stagehance.com adobecc.com adobecce.comadobeccstatic.comcreativecloud.comcreativesdk.com cotolia.com ffotolia.com fiotolia.com foftolia.com fonolia.com fotiolia.com fotoiia.comfotolia-noticias.com -fotolia.cc fotolia.com -fotolia.tv fotolja.com fptolia.com gfotolia.com motolia.com photolia.nettenbyfotolia.com votolia.combluefootcms.com mageconf.commageconf.com.ua magento.com magento.netmagentocommerce.commagentomobile.commarketing-cloud.com marketo.co.uk marketo.com marketo.net -marketo.tvmarketodesigner.commarketolive.com -mktdns.commkto-c0100.com mktorest.com mktroute.commobilemarketo.com&"revenue-performance-management.com toutapp.comcompresspdf.new pdf.new sign.newalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.com amazon-adsystem.com -adswholecitiesfoundation.orgwholefoodsmarket.comwholekidsfoundation.orgwholeplanetfoundation.orgaws -amazonimdb -kindle xn--cckwcxetdxn--jlq480n2rg yamaxun -zappos a2z.comaboutamazon.cn -cnaboutamazon.co.ukaboutamazon.comaboutamazon.com.auaboutamazon.deaboutamazon.esaboutamazon.euaboutamazon.fraboutamazon.inaboutamazon.itaboutamazon.jpaboutamazon.pl alexafund.cn -cnalexafund.com.cn -cn amaaozn.comamazon-fashions.comamazon-jp-recruiting.comamazon-lantern.comamazon-launchpad.com  amazon.ae  amazon.ca amazon.cn -cn amazon.co.jp amazon.co.uk -amazon.com amazon.com.au amazon.com.br amazon.com.mx amazon.com.tr  amazon.de  amazon.es  amazon.fr  amazon.in  amazon.it amazon.jobs  amazon.jp  amazon.nl -amazon.red  amazon.sgamazonalexavoxcon.comamazonauthorinsights.comamazonbusiness.cn -cn!amazonbusiness.com.cn -cnamazonbusiness.orgamazonbusinessblog.comamazonchoice.cn -cnamazonchoice.com.cn -cnamazonchoices.cn -cn amazonchoices.com.cn -cnamazondevicesupport.comamazonfctours.comamazonianblog.comamazonimages.comamazoninspire.cn -cn amazoninspire.com.cn -cnamazonlaunchpad.cn -cnamazonlaunchpad.com"amazonlaunchpad.com.cn -cn amazonlending.com.cn -cn!amazonliterarypartnership.comamazonlumberyard.wang amazonnow.cn -cnamazonnow.com.cn -cn amazonpay.com amazonpay.in amazonsdi.comamazonstudiosguilds.comamazontrust.comamazonvideodirect.com amzn.com amzn.to  amznl.comassoc-amazon.cn -cnassociates-amazon.comgameon-masters.comgdansk-amazon.comimages-amazon.commedia-amazon.com primeday.cn -cnprimeday.com.cn -cn primeday.infosiege-amazon.comssl-images-amazon.comueberamazon.de -yamaxun.cn -cn yamaxun.comz.cn -cn  alexa.com audible.comacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.com amazonaws.com amazonaws.tvamazonworkdocs.cn -cnamazonworkdocs.com!amazonworkdocs.com.cn -cnamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrust.comcdkworkshop.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com".+\.awsdns-[0-9][0-9]\.co\.uk$.+\.awsdns-[0-9][0-9]\.com$.+\.awsdns-[0-9][0-9]\.net$.+\.awsdns-[0-9][0-9]\.org$".+\.awsdns-cn-[0-9][0-9]\.biz$!.+\.awsdns-cn-[0-9][0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$createspace.com kindle.cn -cn kindle.co.jp kindle.co.uk -kindle.com  kindle.de  kindle.es  kindle.fr  kindle.in  kindle.it  kindle.jpkindleoasis.cn -cnkindleoasis.comkindleoasis.com.cn -cnkindleoasis.infokindleoasis.jpkindleoasis.orgkindleoasis.uskindleoasisnews.comkindleproject.comamazonprimevideo.cn -cn#amazonprimevideo.com.cn -cnamazonprimevideos.comamazonvideo.ccamazonvideo.comprime-video.com primevideo.ccprimevideo.comprimevideo.infoprimevideo.org primevideo.tv+images-cn.ssl-images-amazon.com -cn-!images-cn-8.ssl-images-amazon.com -cn amd.comamdfanstore.com -radeon.comiadsdk.apple.com -ads iad.apple.com -ads qwapi.com -adscalendarserver.orgapple-cloudkit.com cups.orgdeveloper.apple.comdevimages-cdn.apple.comdevstreaming-cdn.apple.comfoundationdb.orgmacosforge.org macruby.com macruby.net macruby.orgapple-mapkit.complaygrounds-cdn.apple.com carekit.orgresearchandcare.orgresearchkit.cn -cnresearchkit.com.cn -cnresearchkit.hkresearchkit.netresearchkit.orgresearchkit.tvservicetalk.io -webkit.org webkitgtk.org wpewebkit.orgwebobjects.com-)appleworldwidedeveloper.hb-api.omtrdc.net)%appleworldwidedeveloper.sc.omtrdc.net#p-events-delivery.akamaized.net100beatscheap.com1monsterbeatsbydreus.com2013beatsbydrdreonline.com2013beatsbydrdreshop.com2013beatsbydreshop.com2013beatshdcybermonday.com2013cheapestbeats.com2013newbeatsworld.com2013pascherbeatsbydre.com2014cheapbeatsbydre.com 2beatsdre.com2buybeatsbydre.com2drdrebeats.com40shopping.com4beatsbydre.com5beatsbydre.comaaagradeheadphones.com -aanaan.comabcheadphones.comabeatsbydrdre.com aeasyshop.com -airmay.com -ajtalk.com albeats.com annstores.netaokwholesale.netaucheapbeats.comaudiobeatsau.comaudiobeatsbydre.comaudiomonsterbeatsonline.comauricularemonsterbeats.com#auricularesbeatsbaratosshop.comauricularesbeatsmarkt.comausbeatsbydrdre.combag-glasses1.com bandgirlz.com baxsound.com bbestmall.com -beatbd.combeatbydre2013.combeatbydremonster.com!beatbydreheadphonesonsale.combeatbydrekopen.combeatbydreuk2014.combeatdrdres.combeatfactoryoutlets.combeatmonstersaustralia.netbeats-by-dre-australia.combeats-bydrdre.netbeats-bydre-mall.combeats-bydrecheapsale.combeats-bydreoutletonline.combeats-bydreoutletsale.combeats-bydreoutletsale.netbeats-bydreoutletssale.netbeats-bydrestore.combeats-bydreuk.combeats-deal.combeats-dre-us.com"beats-headphones-buy-cheap.combeats-headphones.usbeats-sale.combeats-seller.combeats-soaho.com  beats1.cc beats1.cn -cn  beats1.tv beats1.com.cn -cn beats123.com beats2.com.cn -cn beats4.cn -cn -beats4.netbeats4outlets.combeats4salecheap.combeatsallsale.combeatsaudifonos.combeatsaudiobydre.combeatsaudiobydre.netbeatsaudios.netbeatsbeatsmonster.combeatsbestdeals.combeatsblackfridaydeals.netbeatsblackfridayretails.combeatsboxingdayuksale.combeatsbydrdre-headphones.combeatsbydrdre-officials5.combeatsbydrdre-online.combeatsbydrdre-onsale.combeatsbydrdre-store.combeatsbydrdre-store.usbeatsbydrdre4sale.combeatsbydrdrebiz.combeatsbydrdrecustom.combeatsbydrdredanmark.combeatsbydrdremall.combeatsbydrdreoutlet.combeatsbydrdres.combeatsbydrdresale.netbeatsbydrdrestore.combeatsbydrdreus.com!beatsbydre-beatsheadphone.combeatsbydre-chen.combeatsbydre-club.combeatsbydre-headphones.com!beatsbydre-headphonesshop.combeatsbydre-mall.combeatsbydre-outlet.combeatsbydre-outletsale.netbeatsbydre-outletstore.combeatsbydre-sell.combeatsbydre-store.combeatsbydre-studio.combeatsbydre-us.com beatsbydre.jpbeatsbydre2081.combeatsbydre411.combeatsbydre4usales.combeatsbydreauofficial.combeatsbydreausale.net beatsbydreaustralia-sale.com!beatsbydreaustraliaonline.com"beatsbydreaustraliaonlines.com beatsbydreaustraliasales.combeatsbydrebeatsby.com!beatsbydreblackfriday2013.com beatsbydreblackfridaypro.combeatsbydreboxingdayca.combeatsbydrecasquesfr.com#beatsbydrecheap-outletstore.combeatsbydrecheaper.com"beatsbydrecheaponlinesales.combeatsbydrecolors.com beatsbydrecustomwireless.com&"beatsbydrecybermondaydeals2013.com&"beatsbydrecybermondaydeals2013.netbeatsbydredanmarks.com"beatsbydredealsblackfriday.com"beatsbydredealscybermonday.combeatsbydrediscount.com beatsbydrediscountonline.netbeatsbydredr.combeatsbydreexecutivesale.com beatsbydreformall2013-nl.com beatsbydreforsalesonline.com beatsbydreforshop2013-nl.combeatsbydreforstore.combeatsbydreforyououtlet.combeatsbydrefr.com!beatsbydrefrcasquepascher.combeatsbydrefriday.combeatsbydregot.combeatsbydrehd.combeatsbydrehd.netbeatsbydreheadphones-nz.combeatsbydreheadphonesolo.combeatsbydrehut.combeatsbydreinexpensive.combeatsbydreireland-sales.com beatsbydreirelandonlines.combeatsbydreirelandsale.com beatsbydreirelandsonline.combeatsbydremall2013.com"beatsbydremonsteraustralia.combeatsbydrenls.combeatsbydrenorge1.net!beatsbydreofficialdanmark.combeatsbydreoksale.combeatsbydreol.combeatsbydreonlie2013-nl.com!beatsbydreonlines-ireland.combeatsbydreonlines-uk.combeatsbydreonlinesale-nz.combeatsbydreoordopjes.combeatsbydreoslo.combeatsbydreoutletsale.combeatsbydreoutletscheap.combeatsbydrerealstore.combeatsbydres-shop.combeatsbydresale-uk.combeatsbydresalemall2013.combeatsbydresales.us'#beatsbydresalesonline-australia.com beatsbydresaleonlines-nz.combeatsbydresdanmark.netbeatsbydreshop-uk.combeatsbydreshops.netbeatsbydresingapores.combeatsbydresingaporesale.combeatsbydrespeakers.combeatsbydresold.com%!beatsbydresolohdonline-canada.combeatsbydresonline-nz.combeatsbydrestorevip.combeatsbydressale.combeatsbydressolo.combeatsbydresstudio.com"beatsbydrestudio-australia.combeatsbydrestudio.combeatsbydretoutlet.combeatsbydreuk.combeatsbydreuk.netbeatsbydreus.combeatsbydrevipde.combeatsbydrew.combeatsbydrsmonsterinusa.combeatsbymusic.netbeatsbysdrbre.combeatsbysdrdres.combeatscasque-france.combeatscheap-nz.combeatscheap-uk.combeatscheapforsale.combeatscollection2014.combeatscustomblackfriday.combeatsdanmark2013.combeatsdrdre-headphones.combeatsdrdre-it.combeatsdrdre-solo.combeatsdrdre2014.combeatsdrdrecuffie.netbeatsdrdrekaufenschweiz.netbeatsdrdreneon.combeatsdre-monster.com beatsdre.netbeatsdre4cheap.combeatsdrecheap.combeatsdredreheadphones.combeatsdreforsale.combeatsdreinau.combeatsdremonster-uk.com!beatsdrenewcolorful4usale.combeatsdreoutletsale.combeatsdresale2013.combeatsdresalestore.combeatsdresolo2013.combeatsdreus.combeatsearbudsheadphoness.combeatsfacstore.combeatsfactoroutlets.combeatsfactorycollection.combeatsfactoryoutles.combeatsforcheap-usa.combeatsforme.combeatsfranceofficiel.combeatselectronic.netbeatselectronics.com -beatsep.cn -cn beatsep.com beatsep.net beatsheadphones-discount.combeatsheadphones1.combeatsheadphones2u.combeatsheadphonesale.combeatsheadphonesdealer.combeatsheadphonesforcheap.netbeatsheadphonesonline.combeatsheadphoness.combeatsheadphonestudio.combeatsheadphonesusamall.combestshoesale2014.netbeatshopuk.combeatsincanada.combeatsinsingapore.combeatsireland.net beatsjoy.combeatsmonstersales.combeatsmusic.combeatsmusic.wang beatsneon.combeatsnzsale.com beatsodre.combeatsofdre-usa.combeatsonblackfriday2013.com beatsone.netbeatsoutlet.netbeatsoutletanytime.combeatsoutletonlines.combeatspascher-bydre.combeatspascher-fr.netbeatspascher.netbeatspaschers.netbeatspillnewcolor.combeatspills.combeatspromonsterjp.combeatspromotions.combeatssales.combeatssaleus.combeatssaustraliabuy.combeatssbyaustralia.combeatssbydredanmark.combeatsshop-uk.combeatsshop-usa.combeatsshopstore.combeatssingapores.combeatssingaporeshop.com beatsstudiohodetelefoner.combeatsstudiosite.combeatstoreusa.com beatsua.combeatswholesale.usbeatswirelesscheap.combeatswirelesscuffie.combegin-trade.combestbeats4u.com -biitii.comblackfridaydrebeatsnew.comblackfridaydrebeatsshop.combloommicroventures.com bookonsky.net -bossae.combrandeasygo.combrandelectronic.combrandproducts1688.com brands098.combusinesswebwise.combuy-from-shanghai.combuybeatsbydre-uk.combuybeatsheadphonesbydre.combuycheapbeatsbus.combuycheapbeatsbydre.combuycheapbeatsbydreshop.combuycheapbeatsdreuk.combuydrdrebeatbox.combuyminibeatbox.combuyonlineheadphones.combuyshoponly.combuzzardflapper.combybeatsdre.combydrebeats.comcanada-beatsbydre.com casque-fr.com casquebeatsbydrdresolohd.comcasquebeatsdocteurdre.comcasquebeatsdre2013.comcasquebeatsenligne.comcasquebeatsfracheter.comcasquebeatsmer.netcasquebeatsofficiel-fr.comcasquebeatspascher2013.comcasquebeatssolo.netcasquedrdrebeatssfr.comcasquemonsterbeats.com#casquemonsterbeatsbydre2013.comcasquesbeatsaudio.comcheap-beats-by-dre.netcheap-beatsbydre.comcheapbagshoes.com cheapbeats.uscheapbeats365.comcheapbeats4sale.netcheapbeatsaustraliasale.comcheapbeatsbus.comcheapbeatsbydr.comcheapbeatsbydrdrepro.comcheapbeatsbydre-au.comcheapbeatsbydre99.comcheapbeatsbydrefau.comcheapbeatsbydremall.comcheapbeatsbydremonster.comcheapbeatsbydrenz.netcheapbeatsbydreonsale.com cheapbeatsbydreoutlet-nz.comcheapbeatsbydreoutlet.com"cheapbeatsbydreoutlets2013.comcheapbeatsbydresale.comcheapbeatsbydreshop.comcheapbeatsdrdresolo.com$ cheapbeatsbydrestudioedition.com"cheapbeatsbydrestudioutlet.comcheapbeatsdrestudios.comcheapbeatsheadphone2014.comcheapbeatsheadphones.uscheapbeatsie.comcheapbeatsla.comcheapbeatssale4u.comcheapbeatsshopbydre.comcheapcustombeatsbydre.comcheapdrdrebeats8.comcheapdrdrebeatsca.comcheapdrebeats8.netcheaperbeatsbydresale.comcheapestbeatsdrdre.comcheapheadphonesland.comcheapheadphonessale.comcheapheadsetmall.comcheapheadsetshop.com cheapmonsterbeatsbydrdre.com!cheapmonsterbeatsheadsets.com cheapmonstersbeatsonsale.comcheapmonsterbeatssale.comcheapmonsterbeatsusa.uscheapnewbeatsbydre.comcheapsalemonster.comcheapshoesvip.comcheapwireless04.comcheapwirelessbeats.comcheerwholesale.uschihair-straightener.comchinaclothesstore.comciattackers.com -cmhalq.com cnshopin.comcoolmonster.netcozydrdrebeats.com cqcorea.comcuffiesaldi.comcustombeatsbydrebuy.comcustombeatsdeals.comcustombeatsforcheap.comcustombeatsny.comcustombeatssbydreus.comcustomdrdrebeats.comcustomizedbeatbydre.comcustomizedbeatsbydre.comcustomizedbeatsdre.comcybermondaybeats4sale.comdanemarket.comdanmarkbeatsbydrdre.comdctbeatsbydre.comdealsbeatsblackfriday.comdetaliczny.comdiscountbeatsbydre-us.comdiscountbeatsstore.comdkbeatsbydre.comdrbeatsukmart.comdrdre-beats.comdrdrebeats-chen.comdrdrebeats-headphone.comdrdrebeats-usa.comdrdrebeatsale.comdrdrebeatsbillig.comdrdrebeatsdesale.comdrdrebeatsdiscount.comdrdrebeatsforu.comdrdrebeatsretail2013.comdrdrebeatssale7.comdrdrebeatsuk.comdrdreheadphonebeats.comdrdreheadphonekey.comdrdreheadphonesusstore.comdrdremonster-beats.comdrdremonsterdre.comdrdreprobeatssale.com drdrefnac.comdrebeats-australia.comdrebeats-france.comdrebeats-monster.com!drebeats-monsteraustralia.comdrebeats-monsterusa.comdrebeats-singapore.comdrebeats-singapore.netdrebeats-singaporecheap.comdrebeats-singaporecheap.netdrebeats-solo.comdrebeats-studio.comdrebeatsaustralia-cheap.comdrebeatsaustralia-cheap.netdrebeatsbuy.comdrebeatsbydreoutlet.comdrebeatscanada.comdrebeatsdeutschland.netdrebeatsforsaleus.comdrebeatsheadphones-nz.comdrebeatshome.comdrebeatsoutletstore.comdrebeatsoldes.comdrebeatspill.comdrebeatssite.com#drebeatssolocybermondaysale.comdrebeatsstudio2013.comdrebeatstudio.com drebyby.comdremonsterbeatsoutlets.comdreprobeats.com dreprofy.com -dtsell.comearphonescheapest.comebuyheadphones.comesbeatsbydrebuy.cometheadphones.comfamosascalvas.comfindmybeats.comfr-beatsbydrestore.comfrancecasquebeatssolde.comfrcasquesbeats.com free-aa.com free-sns.com frishoes.comgamebeforethegame.comgetdrebeatssale.comgmnetworks.net gobeatsye.comgobuyonlinestore.net goodsdunk.netheadphonepubs.comheadphones-cool.comheadphones-dre.com headphones-outlet-online.comheadphonesbeatsaudio.comheadphonesbeatsbydre.comheadphoneses.comheadphoneshome.comheadphoneshotsales.comheadphonesol.comheadphonesretailer.comheadphonessupply.comheadphonezip.comheadset987.comhellokittybeats.com highbolt.net highdefinitionbeatsbydre.com hipaa6020.com hipzoom.nethonawalaan.comhotbeatsonsale.comhotmonsterbeats.comhottestheadphonesonline.com  hrsaz.com ibeats-uk.comibeatsbydre.ccibeatsbydre.comigoshopping.net illianacomputerrecycling.comimonsterbeats.comincentivetravelgifts.comioffergift.com islamiccenterofnewlondon.comitaliabeatsbydrdre.com jkbeats.comkickshatchannel.comkobbeatssbydredk.comkopfhorergunstigshop.comleecountytimes.com lexuemei.comlovebeatsdr.com lovemarca.comluckyissue.com -lyzsxx.com mairbeats.com -makeeu.commallheadphone.commbeats-tech.commbheadphone.com -micstl.commmonsterheadphones.netmonbeats2013.commonster-beats-by-dr-dre.com monster-beats-headphones.commonsterbeats-cheap.commonsterbeats-headphone.commonsterbeats-onsale.commonsterbeats-solo.commonsterbeats-solo.netmonsterbeats365buy.commonsterbeats8beatsbydre.commonsterbeatsale.commonsterbeatsalestore.commonsterbeatssalg.commonsterbeatsau.commonsterbeatsbydrdre-nz.commonsterbeatsbydrdre-usa.com!monsterbeatsbydrdrecanada.com!monsterbeatsbydrdrestudio.commonsterbeatsbydre-nz.commonsterbeatsbydre-usa.commonsterbeatsbydre2015.com'#monsterbeatsbydreaustraliacheap.com!monsterbeatsbydrebilligde.com monsterbeatsbydrefactory.commonsterbeatsbydrenew.commonsterbeatsbydres.commonsterbeatsbydreshop.commonsterbeatscasques.commonsterbeatscommunity.commonsterbeatsdrdrecheap.commonsterbeatsfactory.netmonsterbeatsfinland.commonsterbeatsforsale.commonsterbeatsheadphone.commonsterbeatsheadphones.netmonsterbeatshere.commonsterbeatsitaly.commonsterbeatsmall.commonsterbeatsnegozi.netmonsterbeatsok.com!monsterbeatsonlinestoreuk.commonsterbeatsoutlet.usmonsterbeatspascher.netmonsterbeatsru.commonsterbeatssales.commonsterbeatsshops.netmonsterbeatsstore.com#monsterbeatssydneyaustralia.commonsterbeatstang.commonsterbeatstienda.commonsterbeatstudio.commonsterbydrebeat.com!monstercasquebeatspascher.netmonstercheapbeatss.commonsterdrebeats-canada.netmonsterdrebeats-usa.commonsterdrebeats-usa.netmonsterheadphone.netmonsterproduct.netmonstersbeatbydres.commonstersdebea.commonstershopcheapbeats.netmoreheadphones.com -ms4dre.commybeatsbydrestudio.commybeatsbydreuk.commybeatscheapbydre.commyferrariheadphones.comnamemybeats.com neborder.comnegozimonsterbeats.comnegoziomonsterbeats.comnewbeatsblackfriday.com newbemany.comnewdrediscount.comnewestbeatsbydre.comnewlysprung.netnewmonst1erbeatsto1re.com!newmonsterbeatsheadphones.comnewschristmasshopping.comnflhotsalejerseys.com nicesshop.netofferairjordanlebron.comofficialbeatsbydreshop.comofficialbeatsbydrestore.comofficialdrdre.comofficialheadphone.com ogameblog.comonbeatsbydresale.com onlinemonsterbeatsonsale.com onsalekey.comonsaletrend.comoutletbeatsshop.compascherbeatsmonster.compaulsimon-music.comperfectkickz.netpersoneelsland.compicknicekicks.netpickshoesclothes.com pillbeatsblackfridaysale.compocketbiketrader.compowerbeats2wireless.compowerbeatsbydrdre.compowerbeatsbydre.compromonsterbeatsbydre.comprostudiobeatscybersale.com  rbsgr.comrepsneakermall.com repswing.com!salebeatslasteststyle4you.comsaleblackfridaydrebeats.comsalecheaphandbags.com samebags.com sanvaras.com -scnshop.cc -shoers.com shoestop2.comshop-headphones.netshopbeatsdre.com shopbydre.comshopcustomizedbeats.comshopdrebeats.comshopmonsterbeats.comshopping-days.netshoppinguheadphones.comsneaker666.comsneakerpage.netsneakerskick.comsolostudioksale.com soso7778.comspecialtyheadphones.comspiritclubs.comstraightouttasomewhere.comstudiobeatsbydrdre.comsulwerphoto.comsunglassessale2014.comsuperearsenjoy.comsupplybestjerseys.comsustainthesound.comsverigebeatsbydrdre.com szcheapmonsterheadphones.comszwinnertechnology.com takegoto.comthe-monster-beats.comthebeatsbydre.comthebeatsbydre.netthebeatsheadphonesale.com -theuab.nettopbeatsbydrdreoutlet.comtopbeatsdealer.comtopbeatsforsale.com tradevip1.com tteshop.com ubnw.net -unstyle.us&"usa-beatsbydreheadphonesonsale.net  v-has.com vip-beats.comvipbeatsbydre.comvipheadphones.com vipshoes2.com  wasdj.comwholesale-exporter1.comwholesalediscountpurses.comwholesalefine.comwholesaleonlinemart.comworldcoinpay.comyourmonsterbeats.com%!beatselectronicsllc.tt.omtrdc.netapple-icloud.cn -cnappleicloud.cn -cnapplemx-icloud.comicloud-apple.cn -cnicloud-content.comicloud-isupport.com  icloud.ch -icloud.com icloud.com.cn -cn  icloud.de  icloud.ee  icloud.fi  icloud.fr  icloud.hu  icloud.ie  icloud.is  icloud.jp  icloud.lv icloud.net.cn -cn  icloud.om -icloud.org  icloud.pt  icloud.ro  icloud.se  icloud.si  icloud.sk  icloud.vn icloudads.neticloudapple.cn -cn icloudbox.neticloudbrowser.net icloude.comicloudhome.comicloudmail.neticloudmusic.net icloudnet.net icloudpay.net icloudo.com -icloudo.de icloudo.net icloudos.de icloudos.neticloudsecure.neticloudsetup.comios-icloud.com -me.com myicloud.net mylcloud.net wwwicloud.com!www-cdn.icloud.com.akadns.net!12diasdepresentesdeitunes.com12diasderegalosdeitunes.cl12diasderegalosdeitunes.co!12diasderegalosdeitunes.co.cr!12diasderegalosdeitunes.co.ni!12diasderegalosdeitunes.co.ve12diasderegalosdeitunes.com"12diasderegalosdeitunes.com.co"12diasderegalosdeitunes.com.hn"12diasderegalosdeitunes.com.ni"12diasderegalosdeitunes.com.ve12diasderegalosdeitunes.cr12diasderegalosdeitunes.gt12diasderegalosdeitunes.hn12diasderegalosdeitunes.pe 12joursdecadeauxdeitunes.comapple-itunes.cn -cn itun.es itunbes.com ituneas.comitunes-apple.cn -cnitunes-radio.net  itunes.ca  itunes.co itunes.co.th -itunes.com  itunes.hk  itunes.mx -itunes.org -itunes.rio  itunes.usitunes12days.comitunesapple.cn -cnitunesessentials.comitunesfestivals.comitunesiradio.comituneslatino.comituneslogin.netitunesmatch.comitunesparty.comitunesradio.cn -cnitunesradio.comitunesradio.com.cn -cnitunesradio.rioitunesradio.tvitunesradio.twitunesstore.co itunesu.com itunesu.net iutunes.com wwwitunes.comitunes-apple.com.akadns.netappleswift.com  swift.org -swiftui.cn -cnswiftui.com.cn -cn apple apple.ae apple.at apple.be apple.bg apple.bs apple.ca apple.ch apple.cl apple.cmapple.cn -cn apple.co apple.co.cr apple.co.hu apple.co.jp apple.co.kr apple.co.mz apple.co.nz apple.co.th apple.co.uk  apple.com apple.com.af apple.com.au apple.com.bo apple.com.br apple.com.cn -cn apple.com.co apple.com.de apple.com.do apple.com.gr apple.com.gy apple.com.jm apple.com.lk apple.com.mg apple.com.mx apple.com.my apple.com.pa apple.com.pe apple.com.pl apple.com.pr apple.com.pt apple.com.py apple.com.sg apple.com.sv apple.com.tr apple.com.tw apple.com.uy apple.cz apple.de apple.dk apple.ee apple.es apple.eu apple.fi apple.fr apple.hamburg apple.hn apple.hr apple.hu apple.ie apple.in apple.is apple.it apple.jo apple.jp apple.kr apple.lk apple.lt apple.lv apple.me apple.my  apple.net apple.net.gr apple.nl apple.no apple.pk apple.pl apple.pt apple.ro apple.rs apple.ru apple.sa apple.se apple.sg apple.si apple.sk apple.so apple.tt apple.tw apple.uk apple.usapple.xn--czr694bapple.xn--fiqs8s  apple.xyz aplestore.comapple-store.cn -cnapple-store.netapple-store.wang applestor.com applestore.bg applestore.cc applestore.ch applestore.cm applestore.cn -cnapplestore.co.huapplestore.co.jpapplestore.co.ugapplestore.co.ukapplestore.comapplestore.com.auapplestore.com.bnapplestore.com.cn -cnapplestore.com.eeapplestore.com.egapplestore.com.grapplestore.com.hkapplestore.com.hrapplestore.com.joapplestore.com.myapplestore.com.phapplestore.com.plapplestore.com.ptapplestore.com.roapplestore.com.ruapplestore.com.snapplestore.com.tw applestore.de applestore.hk applestore.kr applestore.meapplestore.netapplestore.net.gr applestore.ph applestore.qa applestore.sgapplestore.wangapplestoreonline.comapplestorepro.euonlineapplestore.comapp-store.wangappe-store.comapple-appstore.cn -cnappleappstore.cn -cnappleappstore.netappleappstore.tv  appsto.reappstore.co.id appstore.hk appstore.my appstore.phappstoreapple.cn -cn asto.retvappstore.netapple-imac.com appleimac.comimac-apple.comimac-applecomputer.com imac.co -imac.co.nz imac.com imac.eu imac.gr imac.one imac.rs imacapple.comimacapplecomputer.comebookforipad.com euroipad.comfindmyipad.com indiaipad.com -ipad.co.kr ipad.de  ipad.host  ipad.wang  ipad3.com -ipadair.cl -ipadair.cmipadair.com.bripadair.com.es -ipadair.fr -ipadair.hk -ipadair.ie -ipadair.jp -ipadair.twipadaustralia.com ipadmini.cmipadmini.com.lk ipadmini.lk ipadpro.buzz -ukipad.comappleiphone.huappleiphone.netappleiphonecell.combestiphonestuff.comcooliphonecasesstore.comcustom-iphonecase.comdesigneriphonescases.com dl-iphone.comfundaiphone5s.com hebiphone.com hf-iphone.com -iphine.comiphone-8.com.cn -cn iphone-cd.com iphone-cn.com iphone-sh.comiphone-vip1.comiphone-vip2.comiphone-vip3.comiphone-vip4.comiphone-vip5.com iphone-x.tv iphone-yh.com iphone-zh.com  iphone.cm -iphone.com iphone.com.au iphone.com.gr  iphone.es iphone.host iphone.net.gr  iphone.pt  iphone.rs  iphone.ru iphone.wang iphone4.comiphone4.com.br iphone4s.com iphone5.comiphone5casescovers.comiphone5s5case.comiphoneacessorios.com.briphonecase2013.comiphonecase5.comiphonecases100.comiphonecases5.comiphoneclaro.com.briphonecollcase.com iphonefc.comiphonegermany.comiphonehangzhou.comiphoneimessage.comiphoneplus.wang iphonerip.net iphonese.tviphoneunlockimei.com iphonexs.tvonlyiphone5case.comaplleipods.comappleclassicipod.comdownloadsforipod.com ipod.ca ipod.ch ipod.cm ipod.co -ipod.co.nz -ipod.co.uk -ipod.co.za ipod.com ipod.com.au ipod.com.cn -cn ipod.com.fr ipod.com.hk ipod.com.sg ipod.com.tw ipod.de ipod.es ipod.eu ipod.fr ipod.gr ipod.hk ipod.is ipod.net ipod.no ipod.pk ipod.rs ipod.ru ipod.tw ipodcentre.nlipodcleaner.comipoditouch.com ipodnano.com ipodnano.netipodprices.com -ipodrip.caipodrocks.com.au  ipods.comipodshop.com.au ipodtouch.co ipodtouch.com -myipod.netoffrezdesipods.comsimplyipod.comwwwipodlounge.comimacsources.comlaunchpad.wang mac.wang -macbook.co -macbook.hk -macbook.tw macbook.wang macbookair.cn -cnmacbookair.co.krmacbookair.co.ukmacbookair.commacbookair.com.aumacbookair.com.cn -cnmacbookair.com.es macbookair.es macbookair.hk macbookair.kr macbookair.jpmacbookair.net macbookpro.comacbookpro.commacbookpro.com.aumacbookpro.net macbookpro.usmacbookpros.commacbooksale.comwwwmacbookair.comapple-watch.com.ru applewatch.hk applewatch.tv applewatch.twapplewatch.wangapplewatchedition.comapplewatchseries3.netapplewatchsport.comapplemusic.berlinapplemusic.comapplemusic.com.auapplemusic.hamburgapplemusic.wangapplemusicconnect.comapplemusicfestival.com musickit.netwwwapplemusic.comapple.comscoreresearch.com -apple.newsappleenews.comapplenews.berlinapplenews.hamburg applenews.tvapplenewsformat.com apple-pay.com apple-pay.rsapple-pay.wangapplepay.berlinapplepay.co.rsapplepay.com.twapplepay.hamburg applepay.hk applepay.info applepay.jp applepay.rs applepay.tvapplepaycash.cn -cnapplepaycash.com.cn -cnapplepaycash.netapplepaycash.tv!applepaymerchantsupplies.infoapplepaysupplies.berlinapplepaysupplies.cn -cnapplepaysupplies.com#applepaysupplies.com.cn -cnapplepaysupplies.infoapplepaysupplies.netapplepaysupplies.tvapplewallet.comapplewallet.tv -i-book.com -i-book.net ibook.co.nz  ibook.com ibook.eu  ibook.netibookpartner.comibooksauthor.com  iphoto.eu  iphoto.no  iphoto.se iphoto.wang  imovie.euimoviegallery.comimoviestage.comapplecare.berlin applecare.cc applecare.euapplecare.hamburgapplecare.wangappledarwin.comappledarwin.netdarwinsource.comdarwinsource.orgdarwinsourcecode.comappleaccount.netappleid-applemx.comappleid-applemx.usappleid-iclou.com appleid-uk.usappleid.berlin appleid.comappleid.hamburg -appleid.hk ids-apple.com myappleid.com appletv.com -appletv.fr appletv.wang appletv4.cn -cnappletv4.com.cn -cnappletvapp.appleappleone.audio appleone.blog appleone.chatappleone.cloud appleone.clubappleone.community appleone.filmappleone.guide appleone.hostappleone.space appleone.techappleone.website -shazam.com1to1computing.com.au1to1conference.com.au 5lml.com -a0pple.net aapl.twairport.brussels airport.com -airport.euairsupportapp.com airtunes.com airtunes.info airtunes.netalchemysynth.com  ap0le.com aple.com  apole.com -app0le.com -appl-e.com appl.com -appl4e.com  appla.comapple-darwin.comapple-darwin.netapple-darwin.org apple-dns.cn -cn apple-dns.comapple-dns.com.cn -cn apple-dns.netapple-enews.comapple-expo.com apple-expo.eu apple-hk.comapple-ibooks.cn -cn apple-inc.netapple-livephotoskit.com apple-maps.cn -cnapple-online.com apple-usa.netappleafrica.comappleantilles.comappleaustralia.comappleaustralia.com.auappleaustralia.net.au applebk.netapplecarbon.com applecard.tvapplecentar.co.rsapplecentar.rsapplecenter.cn -cnapplecenter.com.cn -cnapplecentre.com.auapplecentre.infoappleclub.com.hk applecom.comapplecomputer-imac.comapplecomputer.cn -cnapplecomputer.co.inapplecomputer.co.nzapplecomputer.com applecomputer.com.cn -cnapplecomputer.com.hkapplecomputer.com.twapplecomputer.huapplecomputer.krapplecomputerimac.comapplecomputerinc.infoapplecomputers.co.nzapplecoronavirus.com appledns.cn -cnappledns.com.cn -cn appleexpo.euappleexpo.infoapplefilmaker.comapplefilmmaker.comapplefinalcutproworld.comapplefinalcutproworld.netapplefinalcutproworld.orgapplehongkong.comapplehongkong.com.hkappleinclegal.comappleipodsettlement.comappleiservices.com applelink.comapplemagickeyboard.comapplemalaysia.com.myapplemasters.infoappleonline.comappleonline.net appleoriginalproductions.com -appleos.tvapplepencil.netapplepodcasts.comapplepremiumreseller.com.au applepremiumresellers.com.auapplereach.comapplereach.net apples-msk.ruapplescreensavers.comapplescript.infoappleshare.infoappleshop.co.uk applesiri.cn -cnapplesurveys.comappletaiwan.com appletips.net appleweb.net applexpo.net applezh.com  applf.com -applfe.com -applle.com  applw.comappmediagroup.com -appule.com  appye.com  apyle.com  beddit.tvbraeburncapital.com burstly.netburstlyrewards.com buyaapl.com buyaapl.net buyaple.com camelphat.comcamelspaceeffect.com -carbon.com catalina.hk cdn-apple.com  chomp.com -coreml.netdashwood360.comdesktopmovie.comdesktopmovie.netdesktopmovie.orgdesktopmovies.netdesktopmovies.orgdeveloper-advisor.comdevice-manager.usdigitalhub.comdiscussionsapple.com -dot-mac.de  dotmac.dedvdstudiopro.bizdvdstudiopro.comdvdstudiopro.infodvdstudiopro.netdvdstudiopro.orgdvdstudiopro.us -earpod.net ecgapp.com.cn -cn -ecgapp.netedu-research.org -emac.co.in emac.in  emagic.de -eworld.com faceid99.com faceid99.netfaceidglobal.com faceshift.cn -cn facetime.netfinalcutpro.comfind-apple.com firewire.cl firewire.eu geoport.com -homepod.cn -cn -hopstop.tv ichat.co.in idvd.eu  ikids.comilecture.co.nz ilife.eu ilife.gr -ilife.wang imessage.tv insidear.cn -cninsidemacintosh.comiosinthecar.comipa-iphone.net  ipple.com ischool.com itools.info  iwork.com iwork.se -iwork.wangjetfuelapp.comjetfuelapps.comlatticedata.com livephotos.cn -cnlivephotos.com.cn -cn livephotos.tvlojaiphone.com.br mac-mini.com mac.com -mac.com.au -mac.eu -mac.rs macappsto.re macboxset.com mach-os.com mach-os.net -machos.net macintosh.eumacintoshsoftware.com macmini.com macos.com.aumacossierra.com macosx.infomacosxlion.com macpazar.com macreach.com macreach.net mobileme.dkmr-apple.com.tw mzstatic.com -newton.com next.com overapple.com powerbook.eupullstring.netquatrowireless.com quicktime.cc quicktime.comquicktime.com.au quicktime.eu quicktime.net quicktime.tvreform-apple.comservices-apple.net siri.com spektral.cc texture.comthinkdifferent.us -touchid.tv touchid.wangtracking-location.comtruedepth3d.com tryrating.comwebobjects.co.uk webobjects.de webobjects.euwebobjects.net wuxiapple.com wwapple.netwww-sms-apple.com wwwapple.com wwwapple.net wwwlapple.comxn--czrs0t4phtr3a.cnxn--fiqs8sxootzz.cn xn--fiqs8sxootzz.xn--hxt814e!xn--gtvq61aiijy0b.xn--hxt814exn--gtvz22d.wangxn--gtvz22d.xn--hxt814exn--hxtr4rozx.xn--czr694b xn--kput3imi374g.xn--hxt814e#xn--ohq11k7pl25iyo8a.cn -cn xn--ruq8a011kt6y.xn--hxt814e, adcdownload.apple.com.akadns.net -cn!adcdownload.apple.com -cn."amp-api-search-edge.apps.apple.com -cn"amp-api.apps.apple.com -cn aod.itunes.apple.com -cn#api-edge.apps.apple.com -cnappldnld.apple.com -cn"appldnld.g.aaplimg.com -cnapps.apple.com -cnapps.mzstatic.com -cn(apptrailers.itunes.apple.com -cn bag.itunes.apple.com -cn'bookkeeper.itunes.apple.com -cnbooks.apple.com -cn!cds-cdn.v.aaplimg.com -cn$cds.apple.com.akadns.net -cn cds.apple.com -cncl2-cn.apple.com -cn<0cl2.apple.com.edgekey.net.globalredir.akadns.net -cncl4-cn.apple.com -cn'client-api.itunes.apple.com -cn+clientflow.apple.com.akadns.net -cn clientflow.apple.com -cn cma.itunes.apple.com -cn."configuration.apple.com.akadns.net -cn#configuration.apple.com -cn!communities.apple.com -cncstat.apple.com -cn."dd-cdn.origin-apple.com.akadns.net -cn(discussionschinese.apple.com -cn(download.developer.apple.com -cnfides-pol.apple.com -cngs-loc-cn.apple.com -cngs-loc.apple.com -cn%gsp10-ssl-cn.ls.apple.com -cn!gsp11-cn.ls.apple.com -cn!gsp12-cn.ls.apple.com -cn!gsp13-cn.ls.apple.com -cnC7gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net -cn, gsp4-cn.ls.apple.com.edgekey.net -cn gsp4-cn.ls.apple.com -cn gsp5-cn.ls.apple.com -cn(gspe11-2-cn-ssl.ls.apple.com -cn&gspe12-cn-ssl.ls.apple.com -cn&gspe19-cn-ssl.ls.apple.com -cn-!gspe19-cn.ls-apple.com.akadns.net -cn"gspe19-cn.ls.apple.com -cn#gspe21-ssl.ls.apple.com -cngspe21.ls.apple.com -cn#gspe35-ssl.ls.apple.com -cn&gspe85-cn-ssl.ls.apple.com -cniadsdk.apple.com -cn, icloud-cdn.icloud.com.akadns.net -cn icloud.cdn-apple.com -cn'images.apple.com.akadns.net -cn?3images.apple.com.edgekey.net.globalredir.akadns.net -cnimages.apple.com -cn3'init-p01md-lb.push-apple.com.akadns.net -cn init-p01md.apple.com -cn3'init-p01st-lb.push-apple.com.akadns.net -cn%init-p01st.push.apple.com -cn3'init-s01st-lb.push-apple.com.akadns.net -cn%init-s01st.push.apple.com -cn!init.itunes.apple.com -cn$iosapps.itunes.apple.com -cn(iosapps.itunes.g.aaplimg.com -cniphone-ld.apple.com -cn'itunes-apple.com.akadns.net -cnitunes.apple.com -cn#itunesconnect.apple.com -cn"js-cdn.music.apple.com -cn km.support.apple.com -cnmaps.apple.com -cn)mesu-cdn.apple.com.akadns.net -cn+mesu-china.apple.com.akadns.net -cnmesu.apple.com -cnmusic.apple.com -cn(ocsp-lb.apple.com.akadns.net -cnocsp.apple.com -cnoscdn.apple.com -cn-!oscdn.origin-apple.com.akadns.net -cn$osxapps.itunes.apple.com -cnpancake.apple.com -cn, pancake.cdn-apple.com.akadns.net -cnpd.itunes.apple.com -cnphobos.apple.com -cn!play.itunes.apple.com -cn1%prod-support.apple-support.akadns.net -cn$se-edge.itunes.apple.com -cn se2.itunes.apple.com -cn#search.itunes.apple.com -cn1%sf-api-token-service.itunes.apple.com -cnsp.itunes.apple.com -cn4(stocks-sparkline-lb.apple.com.akadns.net -cn&stocks-sparkline.apple.com -cn>2store.apple.com.edgekey.net.globalredir.akadns.net -cn'store.apple.com.edgekey.net -cnstore.apple.com -cn2&store.storeimages.apple.com.akadns.net -cn+store.storeimages.cdn-apple.com -cn+streamingaudio.itunes.apple.com -cnsu.itunes.apple.com -cn2&support-china.apple-support.akadns.net -cnsupport.apple.com -cn."swcatalog-cdn.apple.com.akadns.net -cnswcatalog.apple.com -cnswcdn.apple.com -cnswcdn.g.aaplimg.com -cn'swdist.apple.com.akadns.net -cnswdist.apple.com -cn+swscan-cdn.apple.com.akadns.net -cnswscan.apple.com -cn!sync.itunes.apple.com -cn1%updates-http.cdn-apple.com.akadns.net -cn&updates-http.cdn-apple.com -cn upp.itunes.apple.com -cnvalid.apple.com -cn-!valid.origin-apple.com.akadns.net -cn"weather-data.apple.com -cn<0www.apple.com.edgekey.net.globalredir.akadns.net -cn%www.apple.com.edgekey.net -cn www.apple.com -cn#^a[1-5]\.mzstatic\.com$ -cn0$^cdn(-cn)?[1-4]?\.apple-mapkit\.com$ -cn9-^cl[1-5]-cdn\.origin-apple\.com\.akadns\.net$ -cn!^cl[1-5]\.apple\.com$ -cn+^is[1-5](-ssl)?\.mzstatic\.com$ -cn$^s[1-5]?\.mzstatic\.com$ -cnapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net asus.com asus.com.cn -cn atlassian.com bitbucket.org statuspage.io -trello.com trellocdn.comaccbusiness.com -atandt.comatt-bundles.com att-japan.com att-mail.comatt-promotions.com att-rsvp.comatt.cn -cn att.com att.jobs att.net -att.tvattalascom.comattbelieves.comattbusiness.net attcenter.comattcollaborate.com -attcorp.cn -cnattexperts.com attglobal.netattinnovationspace.comattinternetservice.com -attjoy.comattnetclient.comattonlineoffers.com attproxy.comattpublicpolicy.comattpurchasing.comattsavings.comattspecial.com -attssl.comattstadium.comattsuppliers.com atttvnow.comattuverseoffers.comattuverseonline.com attvoip.com attwifi.comattwirelessinternet.comattwirelessonline.comattwirelesssolutions.com bellsouth.net -budatt.com -cobatt.com currently.com currently.netdirectvbusinessmarket.comenterprisepaging.com itcanwait.com mymmode.comnaturalvoices.comnettyinternet.comopenapiplatform.comopenapiservice.compatentgold.netpaygonline.comraponlinereview.com signalbar.comsundayready.com synaptic.netthanksloyalty.com tvpromise.com -uverse.comwebhosting.com att-idns.net -attdns.com -attdns.netna-att-idns.netaudiencenetwork.comaudiencenetwork.tvcabletvdirectv.com dierectv.com -dirctv.com direcpath.com direcpath.netdirecttv-deals.tvdirecttv-dish.com dkrecttv.com directtv.netdirecttvdeals.tvdirecttvreviews.comdirectv-4-you.comdirectv-newyork.com directv.comdirectvadsales.comdirectvatlantaga.comdirectvboston.comdirectvbundles.comdirectvbusiness.comdirectvcincinnatioh.comdirectvcinema.comdirectvconnect.comdirectvcookevilletn.comdirectvcrossvilletn.comdirectvdealer.comdirectvdeals.comdirectvdealsnow.com directvdsl.tvdirectvforhotels.comdirectvgrandslam.comdirectvhouston.comdirectvinternet.comdirectvkentucky.comdirectvlebanontn.comdirectvlosangeles.comdirectvmetropolisil.comdirectvmonitoring.comdirectvmurfreesborotn.comdirectvnewhampshire.comdirectvnow.comdirectvoffercodes.comdirectvonline.comdirectvplans.comdirectvpomise.comdirectvpromise.comdirectvpromotions.comdirectvrebate.comdirectvrichmond.comdirectvsavings.comdirectvsports.comdirectvsundayticket.com direectv.com -diretv.comdtv2009offers.comfreedirecttvspecial.com getdirect.tv hddirectv.com le-direct.tvmydirectgroove.commydirectvchannels.comredzonechannel.com txdirectv.com  xandr.combandwagonhost.com bwh1.net bwh8.net  bwh88.net canon c-ij.com canon-cee.comcanon-cmos-sensors.com canon-cna.comcanon-ebm.com.hkcanon-emea.comcanon-emirates.aecanon-europa.comcanon-europe.com canon-me.com canon-ois.qacanon-se.com.tw canon.am canon.at canon.az canon.ba canon.be canon.bg canon.ca canon.chcanon.cn -cn canon.co.il canon.co.uk canon.co.za  canon.com canon.com.al canon.com.au canon.com.by canon.com.cn -cn canon.com.cy canon.com.hk canon.com.mk canon.com.mt canon.com.my canon.com.tr canon.com.tw canon.cz canon.de canon.dk canon.ee canon.es canon.fi canon.fr canon.ge canon.gr canon.hr canon.hu canon.ie canon.it canon.kz canon.lt canon.lu canon.lv canon.me  canon.net canon.nl canon.no canon.pl canon.pt canon.ro canon.rs canon.ru canon.se canon.si canon.sk canon.tj canon.ua canon.uzcanonfoundation.orgcanonproprinters.com webex.ca webex.co.in webex.co.it webex.co.jp webex.co.kr webex.co.nz webex.co.uk  webex.com webex.com.au webex.com.br webex.com.cn -cn webex.com.hk webex.com.mx webex.de webex.es webex.fr ciscoacademynetriders.comcciernslabs.comcciesecuritylabs.comccievoicelabs.com  ccna5.netcisco-returns.comcisco-warrantyfinder.comcisco.cn -cn  cisco.com cisco.com.cn -cn -cisco.mobiciscoccservice.comciscoconnectcloud.comciscoconnectcloud.netciscoconnectcloud.orgciscocontest.comciscoerate.com ciscofax.comciscoinvestments.comciscojabbervideo.netciscokinetic.comciscoknowledgenetwork.comciscolearningsociety.orgciscolearningsystem.com ciscolive.comcisconetspace.comcisconetspace.infocisconetspace.netcisconetapp.comciscopartnermarketing.comciscopowercube.comciscoprice.comciscoresearch.comciscosoftware.com ciscospark.caciscospark.com ciscospark.jpciscotaccc.com ciscotr.com ciscoturk.netciscovideo.comciscowebseminars.com cloudlock.com cloupia.com cloupia.netconnect-in-canada.comcoreoptics.net cs.co -devm2m.com dnaspaces.io flipshare.comgpstheseries.com inlethd.cominternetofeverything.com ioe.com kscisco.com m2m.com -mcisco.commediafiles-cisco.com metacloud.com mindmeld.commultiplydiversity.commyciscobenefits.com  mysdn.com -mysdn.info  mysdn.net netacad.com netacad.netnetwork-auth.cn -cnobservable.net obsrvbl.com parstream.com parstream.net parstream.orgservices-exchange.comstatic-cisco.comtandberg-china.com tandberg.com -versly.comvideochampion.com virtuata.comwballiance.com!whyiwantciscotelepresence.com wifi-mx.comyoutubecisco.comapp-dynamics.comappdynamics.co.ukappdynamics.comappdynamics.deappdynamics.frappdynamics.infoappdynamics.jpappdynamics.org -mearki.com meraki-go.com  meraki.hk merakigo.com -tail-f.com  tailf.comcisco.evergage.comciscolivehls-i.akamaihd.net clco.cc -cloudc.one cloudcone.com cloudcone.net -cfblob.comcloudchoose.comcloudvolumes.com -cmpaas.com -cpedge.comcrit-staging.comexperience-vmware.com gemfire.netgeodesummit.com getboxer.com gitstar.com gitstar.net gopivotal.net greenplum.net hwslabs.com immidio.comitfromtheinside.comlatamvmwareforum.compivotalinitiative.comsnapvolumes.com ssdevrd.com vcanedge.com vcloudair.net vfabric.netvidmpreview.com -virsto.com -virsto.net vmglobal.net -vmmark.comvmtestdrive.com vmw.comvmware-cloudmanagement.comvmware-techcenter.comvmware20mosaic.comvmwareausnews.com!vmwarecertificationvideos.comvmwarecloud.comvmwaredemandcenter.comvmwareemeablog.comvmwaregrid.comvmwarehorizon.comvmwareidentity.comvmwarelearning.comvmwarelearningplatform.comvmwarestuff.comvmwareusergroupstore.comvmwareviewpoint.com vmwarevmc.com vmwdemo.com vmwgcomms.comvmwhorizonair.comvmwidm-ads.com -vmwidm.comvmwlabconnect.comvmwlearningplatform.com vmworld.comvmworld2010.comvmworld2013.comvmwsalesrewards.comvmwservices.com -vnware.netwhychoosehorizon.comwhychooseview.comwhychoosevmwareeuc.comwindowsuem.comworkspaceair.com xlstudio.comavinetworks.com -badaas.com bitnami.combitnamiapp.combitnamistudio.comdockerizer.comcloudcredibility.comcloudhealthtech.com cloudlive.comkubeacademy.com kubeapps.com -nyansa.com velocloud.com gopivotal.com heptio.cn -cn -heptio.com aliveipc.com aliveitsm.comaliveprofiler.com alivercm.comaliverewind.com alivertsm.com alivevm.com alivevmax.com alivevue.com vsphere.com vsphere.net air-watch.comairwatchexpress.comairwatchqa.com -getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.netdelldell-brand.com dell.com dellcdn.comaccountkit.comatscaleconference.com botorch.org -buck.build buckbuild.comcomponentkit.org draftjs.org -f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com -fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.comfbmessenger.comm.me messenger.com -nbabot.net binoculus.com buyoculus.com ocul.usoculus-china.com -oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.comaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org -atdmt2.com atlasdmt.comatlasonepoint.combuyingfacebooklikes.comcareersatfb.comcelebgramme.comchina-facebook.com click-url.comcomo-hackearfacebook.comcrowdtangle.com dacebook.comdlfacebook.comdotfacebook.comdotfacebook.netexpresswifi.com faacebok.com faacebook.com faasbook.com facbebook.com facbeok.com -facboo.com facbook.com facbool.com facboox.com faccebook.comfaccebookk.com facdbook.com facdebook.com face-book.com faceabook.com facebboc.com facebbook.comfacebboook.com facebcook.com facebdok.com facebgook.com facebhook.com facebkkk.com facebo-ok.com faceboak.com facebock.com facebocke.com facebof.com faceboik.com facebok.comfacebokbook.com facebokc.com facebokk.com facebokok.com faceboks.com facebol.com facebolk.com facebomok.com faceboo.com facebooa.com faceboob.comfaceboobok.com facebooc.com faceboock.com facebood.com facebooe.com faceboof.com facebooi.com facebooik.com facebooik.org facebooj.comfacebook-corp.comfacebook-covid-19.comfacebook-ebook.comfacebook-forum.comfacebook-inc.comfacebook-login.comfacebook-newsroom.comfacebook-newsroom.orgfacebook-pmdcenter.comfacebook-pmdcenter.netfacebook-pmdcenter.orgfacebook-privacy.comfacebook-program.comfacebook-studio.comfacebook-support.orgfacebook-texas-holdem.comfacebook-texas-holdem.net facebook.br facebook.ca facebook.cc facebook.comfacebook.design facebook.net facebook.hu facebook.in fecebook.net facebook.nl facebook.org facebook.se facebook.shop facebook.tv facebook.us facebook.wangfacebook123.orgfacebook30.comfacebook30.netfacebook30.orgfacebook4business.comfacebookads.com"facebookadvertisingsecrets.comfacebookatschool.comfacebookawards.comfacebookblueprint.netfacebookbrand.comfacebookbrand.net3/facebookcanadianelectionintegrityinitiative.comfacebookcareer.comfacebookcheats.comfacebookck.comfacebookclub.comfacebookcom.comfacebookconsultant.orgfacebookcoronavirus.comfacebookcovers.orgfacebookcredits.infofacebookdating.netfacebookdusexe.orgfacebookemail.comfacebookenespanol.comfacebookexchange.comfacebookexchange.netfacebookfacebook.comfacebookflow.comfacebookgames.comfacebookgraphsearch.comfacebookgraphsearch.infofacebookgroups.comfacebookhome.ccfacebookhome.comfacebookhome.infofacebookhub.com facebooki.comfacebookinc.comfacebookland.comfacebooklikeexchange.comfacebooklive.comfacebooklivestaging.netfacebooklivestaging.orgfacebooklogin.comfacebooklogin.infofacebookloginhelp.netfacebooklogs.comfacebookmail.comfacebookmail.tvfacebookmanager.infofacebookmarketing.info facebookmarketingpartner.com!facebookmarketingpartners.comfacebookmobile.comfacebookmsn.comfacebooknews.comfacebooknfl.comfacebooknude.comfacebookofsex.comfacebookook.comfacebookpaper.comfacebookpay.comfacebookphonenumber.netfacebookphoto.comfacebookphotos.comfacebookpmdcenter.comfacebookpoke.netfacebookpoke.orgfacebookpoker.infofacebookpokerchips.infofacebookporn.netfacebookporn.orgfacebookporno.netfacebookportal.com facebooks.comfacebooksafety.comfacebooksecurity.netfacebookshop.comfacebooksignup.netfacebooksite.netfacebookstories.comfacebookstudios.netfacebookstudios.orgfacebooksupplier.comfacebooksuppliers.comfacebookswagemea.comfacebookswagstore.comfacebooksz.comfacebookthreads.netfacebooktv.netfacebooktv.orgfacebookvacation.com facebookw.comfacebookworld.com facebool.com facebool.info facebooll.com faceboom.com faceboon.com faceboonk.comfaceboooik.com faceboook.com faceboop.com faceboot.com faceboox.com facebopk.com facebpook.com facebuk.com facebuok.com facebvook.com facebyook.com facebzook.comfacecbgook.com facecbook.com facecbook.org facecook.com facecook.org facedbook.com faceebok.com faceebook.com faceebot.com facegbok.com facegbook.com faceobk.com faceobok.com faceobook.com faceook.comfacerbooik.com facerbook.com facesbooc.comfacesounds.com facetook.com facevbook.com facewbook.co facewook.comfacfacebook.com facfebook.com fackebook.com facnbook.com facrbook.com facvebook.com facwebook.com facxebook.com fadebook.com -faebok.com faebook.com faebookc.com faeboook.com faecebok.com faesebook.comfafacebook.com faicbooc.com fasebokk.com fasebook.com faseboox.com favebook.com faycbok.com -fb.careers -fb.com fb.me fbacebook.com fbbmarket.comfbboostyourbusiness.com  fbcdn.com  fbcdn.netfbfeedback.com -fbhome.com fbidb.io  fbinc.comfbinnovation.comfbmarketing.com  fbreg.com -fbrpms.com  fbsbx.com  fbsbx.netfbsupport-covid.netfbthirdpartypixel.comfbthirdpartypixel.netfbthirdpartypixel.org  fburl.comfbworkmail.com fcacebook.com fcaebook.com fcebook.com fcebookk.comfcfacebook.comfdacebook.info feacboo.com feacbook.com feacbooke.com feacebook.com fecbbok.com fecbooc.com fecbook.com feceboock.com feceboox.com fececbook.com  feook.com ferabook.com fescebook.com fesebook.com ffacebook.com fgacebook.com ficeboock.com fmcebook.com fnacebook.com fosebook.com fpacebook.com fqcebook.com fracebook.com  freeb.comfreebasics.comfreebasics.net -freebs.comfreefacebook.comfreefacebook.netfreefacebookads.netfreefblikes.comfreindfeed.comfriendbook.info friendfed.comfriendfeed-api.comfriendfeed-media.comfriendfeed.comfriendfeedmedia.com fsacebok.com fscebook.comfundraisingwithfacebook.comfunnyfacebook.orgfutureofbusinesssurvey.org gacebook.com gameroom.comgfacecbook.com -groups.comhackerfacebook.comhackfacebook.comhackfacebookid.comhifacebook.info!howtohackfacebook-account.comhsfacebook.comhttpfacebook.comhttpsfacebook.comhttpwwwfacebook.com i.org internet.org klik.me liverail.com liverail.tvlogin-account.netmarkzuckerberg.commidentsolutions.commobilefacebook.commoneywithfacebook.com myfbfans.com newsfeed.com nextstop.comonline-deals.netopencreate.orgreachtheworldonfacebook.com rocksdb.orgshopfacebook.comsportsfacebook.comsportstream.comsupportfacebook.comterragraph.comthefacebook.comthefacebook.net thefind.comtoplayerserver.comviewpointsfromfacebook.comwhyfacebook.com worldhack.comwww-facebook.comwwwfacebok.comwwwfacebook.comwwwmfacebook.comzuckerberg.comzuckerberg.netfacebookwork.com -redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.net  aorus.com aoruszone.cn -cn gigabyte.cn -cn gigabyte.comgigabyte2.azureedge.netsa78gs.wpc.edgecastcdn.net"sni1dcb6gl.wpc.edgecastcdn.net godaddy.comx.co godaddy android.comandroidify.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn dart.dev dartlang.org dartpad.dev fastlane.cifastlane.tools flutter.devflutterapp.com go-lang.com go-lang.net go-lang.org -go.dev  godoc.org -golang.com -golang.net -golang.org2mdn.net -ads admob.com -ads adsense.com -ads'adsensecustomsearchads.com -ads%adsenseformobileapps.com -ads$advertisercommunity.com -ads%advertiserscommunity.com -ads"adwords-community.com -ads adwords.com -adsadwordsexpress.com -ads app-measurement.com -ads&clickserver.googleads.com -adsdoubleclick.com -adsdoubleclick.net -ads!google-analytics.com -adsgoogleadapis.com -ads!googleadservices.com -ads googleanalytics.com -adsgoogleoptimize.com -ads"googlesyndication.com -ads!googletagmanager.com -ads"googletagservices.com -ads'googletraveladservices.com -ads -urchin.com -ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ -adscharlestonroadregistry.comregistry.google get.app get.dev get.how get.page iam.soyxn--p8j9a0d9c9a.xn--q9jyb4cscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.skpolymer-project.orgpolymerproject.org -v8.dev v8project.org youtubeggpht.cn -cn  ggpht.comgooglevideo.comwithyoutube.com youtu.beyoutube-nocookie.com -youtube.ae -youtube.al -youtube.am -youtube.at -youtube.az -youtube.ba -youtube.be -youtube.bg -youtube.bh -youtube.bo -youtube.by -youtube.ca youtube.cat -youtube.ch -youtube.cl -youtube.co youtube.co.ae youtube.co.at youtube.co.cr youtube.co.hu youtube.co.id youtube.co.il youtube.co.in youtube.co.jp youtube.co.ke youtube.co.kr youtube.co.ma youtube.co.nz youtube.co.th youtube.co.tz youtube.co.ug youtube.co.uk youtube.co.ve youtube.co.za youtube.co.zw youtube.comyoutube.com.aryoutube.com.auyoutube.com.azyoutube.com.bdyoutube.com.bhyoutube.com.boyoutube.com.bryoutube.com.byyoutube.com.coyoutube.com.doyoutube.com.ecyoutube.com.eeyoutube.com.egyoutube.com.esyoutube.com.ghyoutube.com.gryoutube.com.gtyoutube.com.hkyoutube.com.hnyoutube.com.hryoutube.com.jmyoutube.com.joyoutube.com.kwyoutube.com.lbyoutube.com.lvyoutube.com.lyyoutube.com.mkyoutube.com.mtyoutube.com.mxyoutube.com.myyoutube.com.ngyoutube.com.niyoutube.com.omyoutube.com.payoutube.com.peyoutube.com.phyoutube.com.pkyoutube.com.ptyoutube.com.pyyoutube.com.qayoutube.com.royoutube.com.sayoutube.com.sgyoutube.com.svyoutube.com.tnyoutube.com.tryoutube.com.twyoutube.com.uayoutube.com.uyyoutube.com.ve -youtube.cr -youtube.cz -youtube.de -youtube.dk -youtube.ee -youtube.es -youtube.fi -youtube.fr -youtube.ge -youtube.gr -youtube.gt -youtube.hk -youtube.hr -youtube.hu -youtube.ie -youtube.in -youtube.iq -youtube.is -youtube.it -youtube.jo -youtube.jp -youtube.kr -youtube.kz -youtube.la -youtube.lk -youtube.lt -youtube.lu -youtube.lv -youtube.ly -youtube.ma -youtube.md -youtube.me -youtube.mk -youtube.mn -youtube.mx -youtube.my -youtube.ng -youtube.ni -youtube.nl -youtube.no -youtube.pa -youtube.pe -youtube.ph -youtube.pk -youtube.pl -youtube.pr -youtube.pt -youtube.qa -youtube.ro -youtube.rs -youtube.ru -youtube.sa -youtube.se -youtube.sg -youtube.si -youtube.sk -youtube.sn youtube.soy -youtube.sv -youtube.tn -youtube.tv -youtube.ua -youtube.ug -youtube.uy -youtube.vnyoutubeeducation.comyoutubefanfest.comyoutubegaming.comyoutubego.co.idyoutubego.co.in youtubego.comyoutubego.com.br youtubego.id youtubego.inyoutubei.googleapis.comyoutubekids.comyoutubemobilesupport.com yt.be  ytimg.comand -chromedclkgbizgle gmailgoogoog -googleguge hangout nexus xn--qcka1pmc  google.ad  google.ae  google.al  google.am  google.as  google.at  google.az  google.ba  google.be  google.bf  google.bg  google.bi  google.bj  google.bs  google.bt  google.by  google.ca -google.cat  google.cd  google.cf  google.cg  google.ch  google.ci  google.cl  google.cm google.cn -cn google.co.ao google.co.bw google.co.ck google.co.cr google.co.id google.co.il google.co.in google.co.jp google.co.ke google.co.kr google.co.ls google.co.ma google.co.mz google.co.nz google.co.th google.co.tz google.co.ug google.co.uk google.co.uz google.co.ve google.co.vi google.co.za google.co.zm google.co.zw -google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws 0emm.com  1e100.net  1ucrs.com -466453.com abc.xyz adgoogle.net -admeld.comangulardart.org -api.ai -apigee.com appbridge.ca appbridge.io appbridge.it appspot.com -apture.com area120.com -asp-cc.com autodraw.com bandpage.combaselinestudy.combaselinestudy.org bazel.build bdn.devbeatthatquote.com  blink.org blogblog.com blogger.combrocaproject.com -brotli.org bumpshare.com -bumptop.ca bumptop.com bumptop.net bumptop.org bumptunes.comcampuslondon.com certificate-transparency.org -chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com crr.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org episodic.comfeedburner.com -fflick.comfinanceleadsonline.comfirebaseapp.comfirebaseio.com -foofle.com froogle.com fuchsia.dev  g-tun.comg.cn -cng.co g.dev -g.page gateway.devgerritcodereview.comgetbumptop.com ggoogle.com gipscorp.com gkecnapps.cn -cn globaledu.org  gmail.com gmodules.com  gogle.com -gogole.comgonglchuangl.net -goo.gl -googel.com -googil.com  googl.comgoogle-syndication.com google.berlin -google.dev -google.net -google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cn -cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn -cngooglecode.comgooglecommerce.comgooglecompare.co.ukgoogledanmark.comgoogledomains.comgoogledrive.com googlee.comgoogleearth.comgooglefiber.netgooglefinland.comgooglemail.comgooglemaps.comgooglepagecreator.comgooglephotos.comgoogleplay.comgoogleplus.comgooglesource.comgooglestore.comgooglesverige.comgoogleusercontent.comgoogleventures.com -googlr.com -goolge.com gooogle.com gridaware.app gsrc.io -gstatic.cn -cn gstatic.comgstaticcnapps.cn -cn -gsuite.com -gv.com gvt0.com gvt1.com gvt2.com gvt3.com gvt5.com gvt6.com gvt7.com gvt9.comhdrplusdata.org hindiweb.comhowtogetmo.co.ukhtml5rocks.com hwgo.comiamremarkable.org igoogle.com impermium.com -j2objc.orgjibemobile.com keyhole.comkeytransparency.comkeytransparency.fookeytransparency.org lanternal.com like.commadewithcode.com material.io mdialog.com meet.newmfg-inspector.commobileview.pagemoodstocks.com near.by nest.com nomulus.foo -oauthz.com on.here on2.comonefifteen.netonefifteen.orgoneworldmanystories.com openthread.io openweave.io orbitera.com  page.linkpagespeedmobilizer.com pageview.mobi panoramio.compartylikeits1986.orgpaxlicense.org -picasa.com picasaweb.com picasaweb.net picasaweb.org -picnik.com pittpatt.com -pixate.com postini.comprojectara.comprojectbaseline.compublishproxy.comquestvisual.comquickoffice.com quiksee.com -revolv.comridepenguin.com run.appsavethedate.foo -saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com snapseed.com solveforx.com -stadia.devstcroixmosquito.comstcroixmosquitoproject.comstudywatchbyverily.comstudywatchbyverily.orgstxmosquito.comstxmosquitoproject.comstxmosquitoproject.netstxmosquitoproject.org synergyse.comtensorflow.org  tfhub.devthecleversense.comthegooglestore.comthinkquarterly.co.ukthinkquarterly.comthinkwithgoogle.com tiltbrush.com txcloud.net  txvia.comunfiltered.news useplannr.comusvimosquito.comusvimosquitoproject.comvelostrata.com -verily.comverilylifesciences.comverilystudyhub.comverilystudywatch.comverilystudywatch.org -wallet.com  waymo.com waze.com web.app web.devwebappfieldguide.comwebmproject.orgwebpkgcache.com -webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company -x.team xn--9kr7l.comxn--9trs65b.comxn--flw351e.comxn--ggle-55da.comxn--gogl-0nd52e.comxn--gogl-1nd42e.comxn--ngstr-lra8j.com xplr.cozukunftswerkstatt.de265.com -cn2mdn.net -cn adservice.google.com -cnapp-measurement.com -cn beacons.gcp.gvt2.com -cnbeacons.gvt2.com -cnbeacons3.gvt2.com -cn c.admob.com -cn(c.android.clients.google.com -cn!cache.pack.google.com -cn%clickserve.dartsearch.net -cn)clientservices.googleapis.com -cncorp.google.com -cn crl.pki.goog -cn"csi-china.l.google.com -cn dl.google.com -cndl.l.google.com -cndoubleclick.net -cn-!firebase-settings.crashlytics.com -cn fonts.googleapis.com -cn google-analytics.com -cn googleadservices.com -cngoogleanalytics.com -cn!googlesyndication.com -cn googletagmanager.com -cn!googletagservices.com -cngtm.oasisfeng.com -cn!imasdk.googleapis.com -cn kh.google.com -cn ocsp.pki.goog -cn, pagead-googlehosted.l.google.com -cn!pki-goog.l.google.com -cn recaptcha.net -cnredirector.gvt1.com -cn)safebrowsing-cache.google.com -cn'safebrowsing.googleapis.com -cn$settings.crashlytics.com -cn-!ssl-google-analytics.l.google.com -cn%toolbarqueries.google.com -cntools.google.com -cntools.l.google.com -cn$translate.googleapis.com -cn!update.googleapis.com -cn-!www-googletagmanager.l.google.com -cnwww.recaptcha.net -cn0$^khm([0-3]|db)?\.google(apis)?\.com$ -cn  hinet.net -123-hp.com123hplaserjet.com8008206616.com as-hp.cabaterias-hp.com campushp.comcolorprotechnology.com -compaq.orgdavid-laserscanner.com demoprint.comdigitalpack.com eprintsw.comgaming-notebooks.comgetprintersupports.comhp-imagine.comhp-infolab.com hp-invent.comhp-invent.info -hp-mns.comhp-printing.comhp-webplatform.com  hp-ww.com -hp.com -hp.company hp.io hp3d.comhp3dmetals.comhp3dprinter.comhp3dsamplepromo.comhpallinoneprinter.comhpapplicationscenter.com hpbestbuy.comhpbluecarpet.comhpbluecarpet.nethpbuiltforlearning.com hpbundle.com hpcampus.comhpcatridge.com  hpccp.com  hpceo.com  hpcmw.nethpcodewarsbcn.comhpcomputers.comhpcomputerservices.comhpconnected.comhpconnected.nethpconnected.orghpconnected.ushpconnectedstage.comhpcontinuum.com  hpcpi.com hpcu.orghpcustomersupport.comhpcustomersupport.net -hpdaas.comhpdesignjetl25500.comhpdesktopcomputer.comhpdownloadstore.comhpdreamcolor.com hpdriver.com hpdrivers.com hpdrivers.org hpeclipse.com hpengage.com hpeprint.comhpeprintcenter.com hpeurope.comhpeventcenter.com -hpfaqs.comhpfeedback.com -hpgift.com -hpgpas.comhpgraphicspartners.com  hpiie.org -hpinc.info  hpinc.nethpindigopress.com hpinkjet.comhpinstantink.cahpinstantink.comhpkeyboard.com hplaptop.comhplaptopbattery.comhplargeformatremote.comhplatexknowledgecenter.com hplfmedia.com  hplip.nethplipopensource.comhpmarketplace.comhpmemorychips.comhpmicrcartridge.com -hpmini.com hpmobile.comhpofficejetprinter.comhponlinehelp.comhponlineprinting.comhppage5000.comhppavillionlaptop.comhpphotoscanners.comhpprinterdrivers.comhpprinterinstalls.comhpprintersupplies.comhpsalescentral.com hpserver.comhpservices.comhpshooping.com -hpshop.com hpshoping.com hpshopping.hk hpsignage.com hpsmart.com hpsmarts.comhpsmartstage.comhpsmartupdate.comhpsoftware.com hpspeaker.comhpsprocket.com  hpsso.comhpstore-china.comhpstore-emea.com -hpstore.cn -cn hpstore.comhpstorethailand.com hpsupport.comhpsuresupply.comhptechventures.com hpto.net hptouch.comhptouchpointmanager.comhptrainingcenter.com  hpuae.comhpuniversity.infohpusertraining.com -hpveer.comhpvirtualthin.com hpwallart.comhpwellnesscentral.com  hpwsn.com i-123-hp.com inkchoice.cominstantink.comleavinghpinc.comlife-global.orgmyhpsupport.com printeron.comprintersetupsupport.comprintspots.comprintspots.netserviceshp.comthecompaqstore.comtouchsmartpc.comtouchsmartpc.nettouchsmartpc.orgworkstations.tv www8-hp.comxn--6eup7j.comxn--6eup7j.nethpstore.corpmerchandise.comibmweatherchannel weatherappdomain.cloud bluemix.com bluemix.net ibm.com -ibm.eu ibm.net -ibm.us s-bluemix.net s81c.com -01.org hyperscan.iointellinuxgraphics.comintellinuxgraphics.net -oneapi.comopenvinotoolkit.orgsnap-telemetry.io -acpica.com clearlinux.cn -cnclearlinux.org -ospray.net -ospray.org intel intel.ac intel.ae intel.af intel.ag intel.ai intel.ar intel.at intel.az intel.ba intel.bg intel.bh intel.bi intel.bo intel.bs intel.by intel.ca intel.cc intel.cg intel.ch intel.cl intel.cmintel.cn -cn intel.co.ae intel.co.cr intel.co.id intel.co.il intel.co.jp intel.co.kr intel.co.uk intel.co.za  intel.com intel.com.ar intel.com.au intel.com.bo intel.com.br intel.com.cn -cn intel.com.co intel.com.ec intel.com.hk intel.com.jm intel.com.mx intel.com.my intel.com.pe intel.com.ph intel.com.pr intel.com.py intel.com.tr intel.com.tw intel.com.uy intel.com.ve intel.cr intel.cu intel.cz intel.de intel.dk intel.dz intel.ec intel.ee intel.eg intel.es intel.eu intel.fi intel.fr intel.ga intel.gd intel.ge intel.gl intel.gm intel.gr intel.gs intel.gt intel.gy intel.hk intel.hn intel.ht intel.hu intel.ie intel.in intel.io intel.it intel.je intel.jo intel.jp intel.ke intel.la intel.lc intel.lk intel.lt intel.lu intel.ly intel.ma intel.md intel.me intel.mg intel.mk intel.mn intel.mp intel.mt intel.mu intel.mw intel.mx intel.my intel.ng intel.nl intel.nu intel.nz intel.pa intel.pe intel.ph intel.pl intel.pn intel.re intel.ro intel.ru intel.rw intel.sa intel.sc intel.se intel.sg intel.si intel.sk intel.sn intel.sr intel.st intel.sv intel.sx intel.sy intel.tf intel.tj intel.tl intel.tm intel.tn intel.tt intel.tv intel.tw intel.ua intel.uk intel.us intel.uy intel.uz intel.vg intel.vn intel.vu intel.wf intel.yt -altera.comalteraforum.comalteraforums.comalteraforums.netalterauserforum.comalterauserforum.netalterauserforums.comalterauserforums.net buyaltera.com celeron.com celeron.net centrino.com centrino.net  chips.com cilk.com cilk.netcloudinsights.comclusterconnection.com coreduo.comcoreextreme.comcrosswalk-project.comcrosswalk-project.netdoceapower.com  easic.com enpirion.comexascale-tech.comexploreintel.comgordonmoore.cominsidefilms.com intc.comintel-research.net&"intel-university-collaboration.netintelamericasstore.comintelapacstore.com intelatom.netintelcapital.comintelcapital.netintelcloudbuilders.comintelcloudfinder.comintelemeastore.cominteleventexpress.comintelforchange.comintelfreepress.com intelgo.netintelinsight.cominteliotmarketplace.com -intell.comintellearningseries.comintellinuxwireless.netintelnervana.comintelnet.component intelplay.comintelquark.comintelrealsense.cn -cnintelrealsense.com intelrxt.comintelsalestraining.comintelsecurity.comintelserveredge.comintelsoftwarenetwork.comintelstore.cominteltechnologyprovider.com intelvmwarecybersecurity.com  itnel.comlatencytop.comlookinside.commakebettercode.commakesenseofdata.com movidius.com movidius.netnervanasys.com  nevex.comnextgenerationcenter.com -niosii.com -niosii.netomekinteractive.com -omnitek.tv openamt.comopendroneid.orgoptanedifference.com -pc.com pentium.com pentium.net pintool.compoweredbyintel.comreconinstruments.com reconjet.comresearchintel.comsaffrontech.comsensorynetworks.com -siport.comsmart-edge.comtheintelstore.comthunderbolttechnology.nettrustedanalytics.comtrustedanalytics.net -vokevr.com vpro.com vpro.net xeon.comxn--ztsq84g.cn -xscale.combarefootnetworks.com -lg.com lgappstv.com  lge.co.kr lge.comlgecareers.com -lghvac.comlghvacstory.comlgrecyclingprogram.comlgsalesportal.comlgelectronics.122.2o7.net linkedin.com  licdn.com logi.comlogicool.co.jp logicoolg.com logitech.biz logitech.com logitech.fr logitechg.com logitechg.frworldsfastestgamer.net imgsmail.ru mail.ru mycdn.me azure-dns.comazure-dns.info azure-dns.net azure-dns.orgazure-mobile.netazure-sphere.comazure-test.netazure.cn -cn  azure.com  azure.netazurecomcdn.netazurecontainer.ioazurecosmos.netazurecosmosdb.comazurecosmosdb.infoazurecosmosdb.netazuredatabricks.netazuredevopslaunch.comazuredigitaltwin.comazuredigitaltwins.comazuredigitaltwins.netazuredns-prd.infoazuredns-prd.orgazureedge-test.net azureedge.netazureiotcentral.comazureiotsolutions.comazureiotsuite.comazureplanetscale.infoazureplanetscale.netazureserviceprofiler.comazuresmartspaces.netazurestackvalidation.comazurewebsites.netchinacloudapi.cn -cnchinacloudapp.cn -cnchinacloudsites.cn -cn cosmosdb.info cosmosdb.net devopsms.com gotcosmos.commicrosofteca.commicrosoftiotcentral.comserverlesslibrary.nettryfunctions.comwindowsazure.cn -cnwindowsazure.comazure.microsoft.com"azuremarketplace.microsoft.combing bing.com bing.com.cn -cn bing.net bingads.combingagencyawards.combingapistatistics.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com -dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.com cn.bing.com -cn cn.bing.net -cn ditu.live.com -cnbj1.api.bing.com -cnemoi-cncdn.bing.com -cn atom.io  npmjs.com npm.communitydependabot.com -git.io github.blog -github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubstatus.comgithubusercontent.com/+github-avatars.oss-cn-hongkong.aliyuncs.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.comadaptivecards.ioapi-extractor.com -apisof.net appcenter.ms -blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com -jwt.ms microbit.orgmicrosoftadc.commicrosoftgamestack.commicrosoftiotinsiderlabs.commicrosoftreactor.cn -cn#microsoftreactor.com.cn -cnmicrosoftreactor.infomicrosoftreactor.netmicrosoftreactor.orgmicrosoftsilverlight.commicrosoftsilverlight.orgmicrosoftsilverlight.netmicrosoftsqlserver.com  mmdnn.commono-project.com msdn.commsinnovationchallenge.commspairlift.commsropendata.com  nuget.org nugettest.orgopentranslatorstothings.orgposhtestgallery.compwabuilder.comreactorms.com.cn -cn -sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io xamarin.comdeveloper.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.netmicrosoftnews.ccmicrosoftnews.cn -cnmicrosoftnews.commicrosoftnews.netmicrosoftnews.orgmicrosoftnewsforkids.commicrosoftnewsforkids.netmicrosoftnewsforkids.orgmicrosoftnewskids.commicrosoftnewskids.netmicrosoftnewskids.org msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com -beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com -mojang.comforzamotorsport.netforzaracingchampionship.com forzarc.comorithegame.comrenovacionxboxlive.comtellmewhygame.com xbox.co xbox.com xbox.eu xbox.org -xbox360.co xbox360.com -xbox360.eu xbox360.org -xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn -cn xboxlive.com -xboxone.co xboxone.com -xboxone.euxboxplayanywhere.comxboxstudios.com -xbx.lv  microsoft azure hotmail -office skype windowsxbox microsoft.az microsoft.be microsoft.by microsoft.ca microsoft.cat microsoft.ch microsoft.cl microsoft.com microsoft.cz microsoft.de microsoft.dk microsoft.ee microsoft.es microsoft.eu microsoft.fi microsoft.ge microsoft.hu microsoft.io microsoft.is microsoft.it microsoft.jp microsoft.lt microsoft.lu microsoft.lv microsoft.md microsoft.pl microsoft.pt microsoft.red microsoft.ro microsoft.rs microsoft.ru microsoft.se microsoft.si microsoft.tv microsoft.ua microsoft.uz microsoft.vnfemalefounderscomp.com -m12.vc -aka.msankarazirvesi2018.comapplicationinsights.ioapplicationinsights.net aria.ms asp.net aspnetcdn.com -binads.com bluehatil.combrazilpartneruniversity.com breakdown.mecentralvalidation.com -ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.com docs.com dynamics.com efproject.netazuredigitaltwin.comfasttrackreadysupport.comfluidpreview.comgameuxmasterguide.com -gears5.com gearspop.comgearstactics.com -gfx.ms -gigjam.com hololens.com -hotmail.co hotmail.com -hotmail.eu hotmail.net hotmail.orghummingbird.ms -ie8.co ie9.com ie10.com ie11.cominternetexplorer.cointernetexplorer.com imaginecup.pl -ingads.comintunewiki.comiotinactionevents.com -kidgrid.tvlatampartneruniversity.com live.com live.com.au live.eu live.netlivingyourambition.com makecode.orgmanagedmeetingrooms.commeetfasttrack.commeetyourdevices.com mepn.commicrosoft-int.commicrosoft-ppe.commicrosoft-sap-events.commicrosoft-sbs-domains.commicrosoft-smb.cn -cnmicrosoft365.commicrosoftaccountguard.commicrosoftads.commicrosoftadvertising.com*µsoftadvertisingregionalawards.commicrosoftaffiliates.commicrosoftcloud.commicrosoftcloudworkshop.com"microsoftcommunitytraining.commicrosoftedge.commicrosofthouse.commicrosofthouse.netmicrosoftinternetsafety.netmicrosoftlatamaitour.commicrosoftlinc.commicrosoftonline-p.commicrosoftonline.com!microsoftpartnercommunity.commicrosoftready.commicrosoftsiteselection.commicrosoftstore.commicrosoftstore.com.hkmicrosoftstream.commicrosoftteams.commicrosofttradein.commicrosofttranslator.commicrosoftuwp.commomentumms.commorphcharts.commpnevolution.comms-studiosmedia.comms365surfaceoffer.com  msads.net msauth.cn -cn -msauth.netmschallenge2018.com -msecnd.net -msedge.net  msft.info msft.net msftauth.cn -cn msftauth.netmsfteducation.ca msftnet.orgmsgamesresearch.com -msocdn.com -msocsp.com msturing.orgmsudalosti.commymicrosoft.comnextechafrica.net nxta.orgo365weve-dev.como365weve-ppe.com o365weve.com -office.com -office.net office365.com onenote.com onenote.net onestore.msopticsforthecloud.netoutingsapp.com outlook.com passport.net -pixapp.netpowerappscdn.netpowerautomate.com powerbi.compowershellgallery.comprojectmurphy.netprojectsangam.com -pxt.ios-microsoft.com  s-msn.com sfbassets.com sfbassets.net -sfx.ms sharepoint.cn -cnsharepoint.comsharepointonline.com  skype.com  skype.netskypeassets.comskypeassets.net staffhub.mssuccesswithteams.com surface.com sway-cdn.com sway.comsysinternals.comtailwindtraders.com -techhub.ms tfsallin.nettrafficmanager.nettranslatetheweb.comunlocklimitlesslearning.com -userpxt.iovideobreakdown.comvideoindexer.aivirtualearth.net vsallin.net -wbd.ms what-fan.netwindows-int.net windows.com windows.net -windows.nl windows8.hkwindowscommunity.netwindowsmarketplace.comwindowsphone-int.comwindowsphone.comwindowssearch.comwindowsupdate.com -winhec.com -winhec.net -yammer.comcdn.office.net -cn(dl.delivery.mp.microsoft.com -cn&download.windowsupdate.com -cn'bg.v4.a.dl.ws.microsoft.com -cn(bg4.v4.a.dl.ws.microsoft.com -cn2&cdn.marketplaceimages.windowsphone.com -cn cn.windowssearch.com -cn#ctldl.windowsupdate.com -cn#developer.microsoft.com -cndocs.microsoft.com -cn"download.microsoft.com -cn/#download.visualstudio.microsoft.com -cnfs.microsoft.com -cn(msgr.dlservice.microsoft.com -cn, msgruser.dlservice.microsoft.com -cn#officecdn.microsoft.com -cn&qh.dlservice.microsoft.com -cnsdx.microsoft.com -cn/#silverlight.dlservice.microsoft.com -cn, slupdate.dlservice.microsoft.com -cn, storeedgefd.dsx.mp.microsoft.com -cn&wl.dlservice.microsoft.com -cn&wscont1.apps.microsoft.com -cn&wscont2.apps.microsoft.com -cnwww.microsoft.com -cn&xb.dlservice.microsoft.com -cn/+img-prod-cms-rt-microsoft-com.akamaized.netimg-s-msn-com.akamaized.netmwf-service.akamaized.net)%officecdn-microsoft-com.akamaized.net3/statics-marketingsites-eus-ms-com.akamaized.net40statics-marketingsites-wcus-ms-com.akamaized.net firefox.comdeveloper.mozilla.org($interactive-examples.mdn.mozilla.netmdn.mozillademos.orgmedia.prod.mdn.mozit.cloud rust-lang.org  rustup.rs  crates.io docs.rsmozilla.community mozilla.net mozilla.org bugzilla.org getpocket.comseamonkey-project.orgthunderbird.net -lin.ee line.me line.naver.jp line-apps.com line-cdn.net line-scdn.net -nhncorp.jp grafolio.com  naver.com naver.jp  naver.net navercorp.com  plug.game pstatic.net neuralink.com -geforce.cn -cn geforce.co.kr geforce.co.uk geforce.comgeforce.com.twgputechconf.cn -cngputechconf.co.krgputechconf.comgputechconf.com.augputechconf.com.twgputechconf.eugputechconf.ingputechconf.jp nvidia.asia  nvidia.be  nvidia.ch nvidia.cn -cn nvidia.co.jp nvidia.co.kr -nvidia.com nvidia.com.au nvidia.com.br nvidia.com.tr nvidia.com.tw  nvidia.cz  nvidia.de  nvidia.dk  nvidia.es  nvidia.eu  nvidia.fi  nvidia.fr  nvidia.it  nvidia.lu  nvidia.nl  nvidia.no  nvidia.pl  nvidia.ro  nvidia.ru  nvidia.seshotwithgeforce.comnvidia.tt.omtrdc.net -oracle -oracle.comoraclecloud.comoraclefoundation.org oracleimg.comateam-oracle.com -bronto.comcovid19-rx.org covid19rx.org sun.com addthis.comaddthiscdn.comaddthisedge.comjava java.com java.net  panasonic panasonic.cn -cn panasonic.com panasonic.jp technics.comairgonetworks.comberkanawireless.comdragoniscoming.comgobianywhere.comhellosmartbook.com imod.comipleadership.org -iskoot.commeetsmartbook.compatenttruth.org pixtronix.comqctconnect.com -qprize.comqualcomm-email.com qualcomm.cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com -uplinq.com wipower.comwirelessreach.com -brewmp.comqualcomm.sc.omtrdc.net  razer.comrazersupport.com razerzone.com razerzone.jprespawnbyrazer.com appcloud.comappexchange.com attic.iobeyondcore.combuddymedia.com chatter.comcloudcraze.com cotweet.com data.comdemandware.com desk.comdocumentforce.comdreamforce.com einstein.comexacttarget.com  force.com govforce.comgravitytank.com heywire.com krux.commarketingcloud.com metamind.io -pardot.com quotable.com radian6.com relateiq.comsalesforce.comsalesforce.orgsalesforceiq.comsalesforceliveagent.com salesforcemarketingcloud.com sequence.comsfdcstatic.com -sforce.com site.com -social.comsteelbrick.com twinprime.comweinvoiceit.com samsung -xn--cg4bkigalaxyappstore.comgalaxymobile.jpgame-platform.net knoxemm.com samsung.comsamsungapps.comsamsungcloud.com samsungdm.comsamsungeshop.com.cn -cnsamsunggalaxyfriends.comsamsungknox.comsamsungqbe.com -sc-cdn.net snap-dev.net snap.com snapads.com snapchat.com -snapkit.co playstationplaystation.complaystation.net sonyentertainmentnetwork.comimageworks.commotionpictureser.com playshow.ioplayshowtv.comsonyclassics.comsonypictures.comsonypicturesanimation.comsonypicturesmuseum.comsonypicturesstudios.comsonypicturestelevision.com#sonypicturestelevisiongames.com wheelpop.com -wwtbam.comyourfantasybeginsnow.comsonyginzasonypark.jpsony-africa.com sony-asia.comsony-europe.comsony-hes.co.jpsony-latin.com sony-mea.comsony-olympus-medical.comsony-promotion.eusony-semicon.co.jp sony.at sony.ba sony.be sony.bg sony.ca sony.ch sony.cl -sony.co.cr -sony.co.id -sony.co.in -sony.co.jp -sony.co.kr -sony.co.nz -sony.co.th -sony.co.uk sony.com sony.com.ar sony.com.au sony.com.bo sony.com.br sony.com.co sony.com.do sony.com.ec sony.com.gt sony.com.hk sony.com.hn sony.com.mk sony.com.mx sony.com.my sony.com.ni sony.com.pa sony.com.pe sony.com.ph sony.com.sg sony.com.sv sony.com.tr sony.com.tw sony.com.vn sony.cz sony.de sony.dk sony.ee sony.es sony.eu sony.fi sony.fr sony.gr sony.hr sony.hu sony.ie sony.it sony.kz sony.lt sony.lu sony.lv sony.net sony.nl sony.no sony.pl sony.pt sony.ro sony.rs sony.ru sony.se sony.si sony.sk sony.ua sonybo.co.jp sonybsc.comsonybuilding.jpsonydesign.com sonydna.comsonyglobalsolutions.jp sonykigyo.jpsonylatvija.com -sonypcl.jpsonyprotechnosupport.co.jpsonystoragemedia.co.jp sonytc.co.jp  sovec.net -spacex.comboringcompany.com x.comads-twitter.com periscope.tv pscp.tvt.co tellapart.com tweetdeck.com  twimg.com twitpic.com twitter.com -twitter.jptwitterinc.comtwitteroauth.comtwitterstat.us twtrdns.net  twttr.com vine.couber-assets.com uber.com ubereats.com -oath.cloud oath.com ouroath.comstatic-verizon.com verizon.com verizon.netverizonbusinessfios.comverizonenterprise.comverizonfios.comverizonmedia.comverizonwireless.com vzw.com -xo.com mvk.com userapi.com  vk-cdn.me -vk-cdn.net vk-portal.net vk.cc -vk.com  vk.design vk.link vk.me vkcache.com vkgo.app -vklive.appvkmessenger.comvkmessenger.app vkontakte.ruvkuseraudio.comvkuserlive.netvkuservideo.comvkuservideo.netg-technology.com -sandisk.ae -sandisk.it -sandisk.cn -cn sandisk.co.jp sandisk.co.kr sandisk.co.uk sandisk.comsandisk.com.ausandisk.com.brsandisk.com.trsandisk.com.tw -sandisk.de -sandisk.es -sandisk.fr -sandisk.hk -sandisk.id -sandisk.in -sandisk.nl -sandisk.sg -wd.com wdc.comwesterndigital.com -flickr -flickr.com -flickr.netstaticflickr.com ads.yahoo.com -adsgemini.yahoo.com -ads ysm.yahoo.com -ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn -cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn -cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hkyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comxn--d1acpjx3f.xn--p1ai  yandex.az  yandex.by yandex.co.il -yandex.com yandex.com.am yandex.com.ge yandex.com.tr  yandex.ee  yandex.kg  yandex.kz  yandex.lt  yandex.lv  yandex.md -yandex.net  yandex.ru  yandex.st  yandex.sx  yandex.tj  yandex.tm  yandex.ua  yandex.uzyandexcloud.net yastatic.net -yandex -_ -FEDORA getfedora.orgfedoraforum.orgfedoraproject.orgfedoramagazine.org -S - OGURY-ADS ogury.com -ads -presage.io -adsogury.co -ads - -ONEDRIVE 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com -B - LOCALBITCOINSlocalbitcoins.comlocalbitcoinschain.com -p -ONEPLUS oneplus.com -oneplus.cn oneplus.net opstatics.comoneplusbbs.com h2os.com - -SAMSUNG samsung -xn--cg4bkigalaxyappstore.comgalaxymobile.jpgame-platform.net knoxemm.com samsung.comsamsungapps.comsamsungcloud.com samsungdm.comsamsungeshop.com.cn -cnsamsunggalaxyfriends.comsamsungknox.comsamsungqbe.com - - ZEROHEDGE zerohedge.com -' - AMERICASVOICEamericasvoice.news -y -GANNETTgannett-cdn.com gannett.comgannettdigital.com usatoday.comusatodaynetworkservice.com - -GARENA"avatargarenanow-a.akamaihd.netcdngarenanow-a.akamaihd.netdlgarenanow-a.akamaihd.net!dlmobilegarena-a.akamaihd.net garena.co.id garena.co.th -garena.com garena.live  garena.my  garena.ph  garena.sg  garena.tv  garena.tw  garena.vn garenanow.com seagroup.com -. -SXL mysxl.cn -sxl.cn  sxlcdn.cn -% -RTHK etvonline.hk rthk.hk - -SHIELDS -shields.io -. -U17 u17.com u17i.com u17t.com -$ -CAS -csdl.ac.cn  las.ac.cn -b - -EMOJIPEDIAemojipedia.orgworldemojiawards.comworldemojiday.com xn--yt8h.la - -FIREFOX firefox.com - -GITV gitv.cn gitv.tv -^ -BITAUTO bitauto.combitautoimg.com cheyisou.com  yiche.com  yccdn.com - -CYTHON -cython.org - -INSIDERbusinessinsider.co.zabusinessinsider.combusinessinsider.com.aubusinessinsider.com.plbusinessinsider.debusinessinsider.esbusinessinsider.frbusinessinsider.inbusinessinsider.jpbusinessinsider.mxbusinessinsider.mybusinessinsider.nlbusinessinsider.sginsider-intelligence.com insider.cominsiderintelligence.com - -MDNdeveloper.mozilla.org($interactive-examples.mdn.mozilla.netmdn.mozillademos.orgmedia.prod.mdn.mozit.cloud - - HUNANTV-ADSclick.hunantv.com -adsda.hunantv.com -ads da.mgtv.com -adslog.hunantv.com -adslog.v2.hunantv.com -adsres.hunantv.com -adsv2.log.hunantv.com -ads -9 -MOGUJIE mogu.com mogucdn.com mogujie.com - -SLACKslack-edge.comslack-imgs.com  slack.com -slackb.comslackcertified.com slackdemo.com slackhq.com - -4399 3304399.net 4399.com 4399api.com 4399dmw.com -4399er.com4399youpai.com 5054399.com img4399.com -+ -BOSLIFE boslife.biz boslife.net - -CENTOS -centos.org - -ORIGIN dawngate.com eastore.comlordofultima.com -origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.akamaihd.netrtm.tnt-ea.comssl-lvlt.cdn.ea.com - -FARFETCHfarfetch-apps.comfarfetch-contents.com farfetch.cn -cn farfetch.comfarfetch.com.cn -cn farfetch.netfarfetch.net.cn -cn  fflnk.net -| -MEITUAN dianping.com -maoyan.com meituan.com meituan.net  mtyun.com  neixin.cn sankuai.com -. -OP op.ggopgg-static.akamaized.net -H -ACFUN acfun.cn aixifan.com apilog-web.acfun.cn -ads - -DISNEYabc-studios.com abc.com edgedatg.com espn.com espn.net espncdn.com -espnqa.com watchespn.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net -marvel.commarvel10thanniversary.commarveldimensionofheroes.commarvelparty.netmarvelpinball.commarvelsdoubleagent.commarvelspotlightplays.com marvelsuperheroseptember.commarvelsuperwar.comthemarvelexperiencetour.comnatgeomaps.comnationalgeographic.com"nationalgeographicpartners.com ngeo.comadventuresbydisney.com -babble.com babyzone.com -dilcdn.comdisney-asia.comdisney-discount.comdisney-plus.netdisney-studio.comdisney-studio.net  disney.be  disney.bg  disney.ca disney.co.il disney.co.th disney.co.uk disney.co.za -disney.com disney.com.au disney.com.br  disney.cz  disney.de  disney.dk  disney.es  disney.fi  disney.fr  disney.gr  disney.hu  disney.id  disney.in  disney.io  disney.it  disney.my  disney.nl  disney.no  disney.ph  disney.pl  disney.pt  disney.ro  disney.se  disney.sgdisneyadsales.comdisneyarena.comdisneyaulani.comdisneybaby.comdisneycareers.comdisneychannelonstage.comdisneychannelroadtrip.comdisneycruisebrasil.comdisneyenconcert.comdisneyiejobs.comdisneyinflight.comdisneyjunior.comdisneyjuniortreataday.comdisneylatino.comdisneymagicmoments.co.ildisneymagicmoments.co.ukdisneymagicmoments.co.zadisneymagicmoments.dedisneymagicmoments.esdisneymagicmoments.frdisneymagicmoments.gen.trdisneymagicmoments.grdisneymagicmoments.itdisneymagicmoments.pl disneyme.comdisneymeetingsandevents.comdisneymovieinsiders.comdisneymusicpromotion.comdisneynewseries.com disneynow.comdisneypeoplesurveys.comdisneyplus.comdisneyredirects.comdisneysrivieraresort.comdisneystore.comdisneysubscription.comdisneyturkiye.com.trdisneytvajobs.comdisneyworld-go.com -dssott.comgo-disneyworldgo.com -go.com  mickey.tvmoviesanywhere.complaymation.comshopdisney.comshops-disney.comsorcerersarena.comspaindisney.com starwars.com#starwarsgalacticstarcruiser.comstreamingdisney.netthestationbymaker.comthisispolaris.comwatchdisneyfe.com - -GENTOO -gentoo.org - -HUFFPOSThuffingtonpost.cahuffingtonpost.co.ukhuffingtonpost.co.zahuffingtonpost.comhuffingtonpost.com.auhuffingtonpost.com.mxhuffingtonpost.dehuffingtonpost.eshuffingtonpost.frhuffingtonpost.grhuffingtonpost.inhuffingtonpost.ithuffingtonpost.jphuffingtonpost.kr huffpost.comhuffpostarabi.comhuffpostbrasil.comhuffpostmaghreb.com - -SOLIDOT solidot.org -' -WATCHOUT watchout.tw -waa.tw -6 -CATEGORY-COLLABORATE-CN shimo.im  yuque.com -4 - KHANACADEMYkhanacademy.org kastatic.org - -MARIADB mariadb.org - -UNWIRE  unwire.hk -$ - APPLEINSIDERappleinsider.com -Y -UNIONPAY  95516.com unionpay.comunionpayintl.comunionpaysecure.com -' -FOXfoxfox-corporation.com fox-news.com fox.com -fox.tv fox10.tv fox10news.comfox10phoenix.com  fox11.comfox13memphis.com fox13news.com  fox23.comfox23maine.com -fox247.com  fox247.tv  fox26.comfox26houston.comfox28media.com  fox29.comfox2detroit.com fox2news.com  fox32.comfox32chicago.comfox35orlando.comfox38corpuschristi.com fox42kptm.com  fox46.comfox46charlotte.com  fox47.com fox49.tv fox4news.com fox51tns.netfox5atlanta.com -fox5dc.com -fox5ny.com fox5storm.com fox6now.com fox7.comfox7austin.com fox9.comfoxacrossamerica.comfoxaffiliateportal.comfoxandfriends.com -foxbet.comfoxbusiness.comfoxbusiness.tvfoxbusinessgo.comfoxcanvasroom.comfoxcareers.comfoxcharlotte.com foxcincy.com foxcincy.jobs foxcincy.netfoxcollegesports.comfoxcorporation.comfoxcreativeuniversity.com foxcredit.com foxcredit.org foxd.tv -foxdcg.comfoxdeportes.comfoxdeportes.netfoxdeportes.tvfoxdigitalmovies.com foxdoua.comfoxentertainment.com -foxest.com -foxfaq.com -foxfdm.com foxfiles.com -foxinc.com foxkansas.com  foxla.com foxla.tvfoxlexington.comfoxmediacloud.com foxnation.comfoxnebraska.com -foxneo.comfoxneodigital.comfoxnetworks.infofoxnetworksinfo.com -foxnews.cc foxnews.com foxnews.net foxnews.org -foxnews.tvfoxnewsaffiliates.comfoxnewsaroundtheworld.comfoxnewsb2b.comfoxnewschannel.com foxnewsgo.net foxnewsgo.org foxnewsgo.tvfoxnewshealth.comfoxnewslatino.comfoxnewsmagazine.comfoxnewsnetwork.comfoxnewsopinion.comfoxnewspodcasts.comfoxnewspolitics.comfoxnewsradio.comfoxnewsrundown.comfoxnewssunday.com  foxon.comfoxphiladelphia.com foxpoker.com  foxrad.io foxredeem.comfoxrelease.comfoxrichmond.com foxrobots.comfoxsmallbusinesscenter.comfoxsmallbusinesscenter.netfoxsmallbusinesscenter.org foxsoccer.net foxsoccer.tvfoxsoccermatchpass.comfoxsoccerplus.comfoxsoccerplus.netfoxsoccerplus.tvfoxsoccershop.comfoxsports-chicago.comfoxsports-newyork.comfoxsports-world.com foxsports.cl foxsports.cofoxsports.co.ve foxsports.comfoxsports.com.arfoxsports.com.bofoxsports.com.brfoxsports.com.cofoxsports.com.ecfoxsports.com.gtfoxsports.com.mxfoxsports.com.pefoxsports.com.pyfoxsports.com.uyfoxsports.com.ve foxsports.gtfoxsports.info foxsports.netfoxsports.net.br foxsports.pe foxsports.sv foxsports.uyfoxsports2.comfoxsportsflorida.comfoxsportsgo.comfoxsportsla.comfoxsportsnetmilwaukee.comfoxsportsneworleans.comfoxsportsracing.comfoxsportssupports.comfoxsportsuniversity.comfoxsportsworld.comfoxstudiolot.com foxsuper6.com -foxtel.com foxtel.com.aufoxtelevisionstations.com  foxtv.com foxtvdvd.com  foxuv.comfoxweatherwatch.com  fssta.com -fxn.ws fxnetwork.comfxnetworks.com bentobox.tv kicu.tv ktvu.commyfoxsanfran.comafewmomentswith.com -anidom.comcasoneexchange.comcoronavirusnow.com -fse.tvgeraldoatlarge.comgooddaychicago.com joeswall.comkilmeadeandfriends.commaskedsingerfox.com -my13la.com -my20dc.commy20houston.com -my29tv.com my45.com  my9nj.commyfoxatlanta.commyfoxaustin.commyfoxboston.commyfoxcharlotte.commyfoxchicago.com myfoxdc.commyfoxdetroit.com myfoxdfw.commyfoxhouston.commyfoxhurricane.com myfoxla.commyfoxlosangeles.commyfoxlubbock.commyfoxmaine.com myfoxny.commyfoxorlando.commyfoxphilly.commyfoxphoenix.commyfoxtampa.commyfoxtampabay.commyfoxtwincities.com myfoxzone.com myq2.comnewsnowfox.comorlandohurricane.comparadisehotelquizfox.com q13.com -q13fox.comrealamericanstories.comrealamericanstories.inforealamericanstories.netrealamericanstories.orgrealamericanstories.tvrealmilwaukeenow.com rprimelab.comshopspeedtv.comsoccermatchpass.comspeeddreamride.comspeedfantasybid.comspeedracegear.com speedxtra.comteenchoice.com testonfox.comtheclasshroom.comthefoxnation.comthegeorgiascene.comwhatthefox.comwhosthehost.com wofl.tvwoflthenewsstation.com wogx.com foxnewsplayer-a.akamaihd.net -. -SCALAscala-lang.org scala-sbt.org -/ -MAPBOX mapbox.cn -cn -mapbox.com -- -C-SPAN -c-span.orgc-spanvideo.org -y -FONTSHOP fontbook.com fontshop.comfstopimages.com40fontshop-prod-responsive-images.s3.amazonaws.com - -GLYPHS glyphsapp.com - - MACRUMORS macrumors.com - - CATEGORY-ORGS aomedia.org archive.org  atypi.org -change.org ccstatic.orgcreativecommons.orgcreativecommons.engineeringlicensebuttons.net csis.orgcsis-prod.s3.amazonaws.comemojipedia.orgworldemojiawards.comworldemojiday.com xn--yt8h.laglobalsecurity.org ieee.org ieee.tvtryengineering.org ieee-ccnc.org ieee-ecce.org ieeemce.orgstandardsuniversity.orgieee-region6.org ieee.ca ieeer10.org -ieeer5.org -ieeer8.org ieeeusa.orgieeefoundation.orgieee-into-focus.org ieee-vics.org ieeeday.orgdatasheets360.comglobalspec.com ieee-isto.orgtechstreet.com computer.org -comsoc.org embs.org emcs.org grss-ieee.org ieee-aess.org ieee-cas.org ieee-ceda.orgieee-edusociety.org ieee-ies.org ieee-ims.org ieee-npss.org ieee-pels.org ieee-pes.org ieee-ras.orgieee-sensors.org ieee-tems.org ieee-uffc.org ieeeaps.org ieeecsc.org ieeecss.org ieeedeis.orgieeemagnetics.org ieeenano.org ieeeoes.org ieeesmc.orgieeesystemscouncil.org  itsoc.org mtt.orgphotonicssociety.orgsignalprocessingsociety.orgtechnologyandsociety.org vtsociety.org ietf.org itu.int nist.gov time.gov openmaps.orgopenstreetmap.comopenstreetmap.netopenstreetmap.orgopenstreetmaps.org osm.orgosmfoundation.orgstateofthemap.comstateofthemap.orgrolfoundation.orgrolsociety.org  smpte.org -un.org -w3.org who.int wto.org -/ -FASTLANE fastlane.cifastlane.tools -B -RBaerogard.com.auaerogard.com.cn -cnaerogardcn.com -airwick.at -airwick.be -airwick.ca -airwick.ch -airwick.cl airwick.co.in airwick.co.nz airwick.co.uk airwick.co.za airwick.comairwick.com.auairwick.com.brairwick.com.cn -cnairwick.com.mxairwick.com.tr -airwick.cz -airwick.de -airwick.dk -airwick.es -airwick.fi -airwick.fr -airwick.hr -airwick.hu -airwick.ie -airwick.it -airwick.jp airwick.net -airwick.nl -airwick.no -airwick.pl -airwick.pt -airwick.ro -airwick.ru -airwick.se -airwick.si -airwick.sk -airwick.tv -airwick.usairwickarabia.com vipoo.es  calgon.at  calgon.be  calgon.ch calgon.cn -cn calgon.co.uk -calgon.com calgon.com.tr  calgon.de  calgon.es  calgon.fr  calgon.ie  calgon.it  calgon.nl  calgon.pt  calgon.ru  calgon.tvcalgoncarbon-china.comcalgoncarbon.com calgonit.com clearasil.cn -cnclearasil.com.cn -cn clearasil.usdettol-prize.com  dettol.at  dettol.be  dettol.ch  dettol.cl dettol.co.id dettol.co.in dettol.co.ke dettol.co.nz dettol.co.uk -dettol.com dettol.com.au dettol.com.bd dettol.com.br dettol.com.cn -cn dettol.com.eg dettol.com.hk dettol.com.my dettol.com.ng dettol.com.sg  dettol.cz  dettol.fr  dettol.hu  dettol.ie -dettol.net  dettol.nl  dettol.pk  dettol.pl  dettol.pt  dettol.rudettolarabia.comdettolcleannaija.comdettolsitishield.co.indettolthailand.comespadoldettol.com.ardewitwithdurex.com dotherex.com durex-shop.chdurex-shopline.comdurex-slovenia.si durex.at durex.be durex.cl durex.co.id durex.co.il durex.co.nz durex.co.th durex.co.uk durex.co.za  durex.com durex.com.au durex.com.bd durex.com.cn -cn durex.com.co durex.com.hr durex.com.my durex.com.ng durex.com.pe durex.com.ph durex.com.pk durex.com.sg durex.com.tr durex.cz durex.de durex.dk durex.ee durex.es durex.fi durex.fr durex.hu durex.ie durex.it durex.jp durex.lv durex.mx durex.nl durex.no durex.pl durex.pt durex.ro durex.ru durex.se durex.us durexcam.comdurexcanada.comdurexchina.comdurexchina.com.cn -cndurexindia.comdurexloveclub.comdurexukraine.com durexusa.comlovesexdurex.cn -cnlovesexdurex.complaybydurex.com shopdurex.com trydurex.net trydurex.tvbebepremium3.com.bo -enfa.co.id enfa.com.vn enfaaplus.com enfababy.com enfabebe.comenfabebe.com.brenfabebe.com.coenfabebe.com.doenfabebe.com.ecenfabebe.com.mxenfabebe.com.peenfabebe.com.veenfabebe3.com.arenfagrow.co.inenfagrow.com.bnenfagrow.com.myenfagrow.com.phenfagrow.com.sg enfagrow4.comenfamama.com.arenfamama.com.ph -enfamil.ca enfamil.com -enfamil.es -enfamil.pl -enfamil.pt enfasmart.comenspireformula.comnutramigen.net nutramigen.pl$dishwashingexpert.com.cn -cn  finish.at  finish.bg finish.co.kr finish.co.nz finish.co.uk finish.co.za finish.com.cn -cn finish.com.hr finish.com.tr  finish.de  finish.es  finish.fr  finish.gr  finish.hu  finish.lv  finish.pl  finish.pt  finish.ro  finish.si  finish.skfinisharabia.comfinishbrasil.com.brfinishdishwashing.cafinishdishwashing.com finishinfo.be finishinfo.clfinishinfo.comfinishinfo.com.arfinishinfo.com.au finishinfo.cz finishinfo.fi finishinfo.it finishinfo.jp finishinfo.nl finishinfo.no finishinfo.ru finishinfo.sefinishkilpailu.fi finishwin.beyarininsuyu.com lizol.co.in lysol.ca lysol.cllysol.cn -cn lysol.co.cr  lysol.com lysol.com.cn -cn lysol.com.mx  lysol.netenfinitas.com.cn -cnmeadjohnson.commeadjohnson.com.cn -cnmeadjohnson.com.hkmeadjohnson.com.twmeadjohnson.net -mortein.cn -cn mortein.co.in mortein.co.nz mortein.co.za mortein.commortein.com.aumortein.com.brmortein.com.ngmortein.com.pkmorteincam.compifpafarabia.comkeepmovingwithmovefree.com move-free.net movefree.cn -cn movefrees.commovefreeoffers.commovefreerewards.comschiffvitamins.com -mucinex.ca -mucinex.cn mucinex.co.nz mucinex.commucinex.com.cn mucinex.net -mucinex.tvmucinexprofessional.com -nurofen.at -nurofen.bg -nurofen.cn -cn nurofen.co.il nurofen.co.nz nurofen.co.uk nurofen.co.za nurofen.comnurofen.com.aunurofen.com.cn -cnnurofen.com.sg -nurofen.cz -nurofen.de -nurofen.es -nurofen.fr -nurofen.hr -nurofen.hu -nurofen.ie -nurofen.it nurofen.net -nurofen.no -nurofen.pl -nurofen.pt -nurofen.ro -nurofen.sk -nurofen.runurofengel.com51nurofensk-prod-env.eu-west-1.elasticbeanstalk.com -cepacol.ca cepacol.com dobendan.degraneodin.com.mx -repsils.no strepsils.at strepsils.ch strepsils.cn -cnstrepsils.co.krstrepsils.co.nzstrepsils.co.zastrepsils.com.arstrepsils.com.brstrepsils.com.cn -cnstrepsils.com.costrepsils.com.austrepsils.com.hkstrepsils.com.phstrepsils.com.tw strepsils.es strepsils.fi strepsils.fr strepsils.hr strepsils.hu strepsils.ie strepsils.net strepsils.pl strepsils.pt strepsils.ro strepsils.ru strepsils.si strepsils.usstrepsilsarabia.como2action.co.krpowerofresolve.capowerofresolve.comspraynwash.com  vanish.at  vanish.be  vanish.ch  vanish.cl vanish.cn -cn vanish.co.id vanish.co.il vanish.co.in vanish.co.nz vanish.co.uk vanish.co.za vanish.com.ar vanish.com.br vanish.com.co vanish.com.hr vanish.com.mx vanish.com.my vanish.com.pe vanish.com.sg vanish.com.tr  vanish.de  vanish.dk  vanish.es  vanish.fi  vanish.fr  vanish.hu  vanish.ie  vanish.it  vanish.nl  vanish.no  vanish.pl  vanish.pt  vanish.ro  vanish.ru  vanish.se  vanish.si  vanish.skvanisharabia.comvanishbancaseulook.com.brvanishcentroamerica.com vanishinfo.czvanishstains.comvanishstains.com.au veet.at veet.be veet.ca veet.ch veet.clveet.cn -cn -veet.co.id -veet.co.in -veet.co.kr -veet.co.nz -veet.co.uk -veet.co.za veet.com veet.com.ar veet.com.au veet.com.bd veet.com.br veet.com.cn -cn veet.com.co veet.com.hk veet.com.mx veet.com.my veet.com.ph veet.com.pk veet.com.sg veet.com.tr veet.de veet.dk veet.es veet.fi veet.fr veet.hu veet.jp veet.nl veet.no veet.pt veet.ro veet.ru veet.se veet.tv veet.usveetarabia.comveetbangladesh.comveetcentroamerica.com veetclub.it -woolite.ca -woolite.cn -cn woolite.comwoolite.com.cn -cn -woolite.pl -woolite.uswoolitecarpet.comdigital-rb.com rb-crisis.com -rb.com -rb.netrbbusinessshop.comrbdigitalab.comrbdigitallab.comrbeuroinfo.com rbgrads.comrbgraduates.comrbmavericks.comrbnainternational.com  rbplc.comrbrandlibrary.com rbspeakup.com reckitt.netreckittbenckiser.cn -cnreckittbenckiser.com#reckittbenckiser.com.cn -cnreckittbenckiser.netreckittbenckiser.tvreckittprofessional.com - -SSPAI  sspai.com - -WENZHAO -wenzhao.ca -+ -BAIDU a.baidu.com -ads ad.duapps.com -ads ad.player.baidu.com -ads adm.baidu.com -adsadscdn.baidu.com -adsadx.xiaodutv.com -adsae.bdstatic.com -ads afd.baidu.com -ads als.baidu.com -ads&api.mobula.sdk.duapps.com -ads"api.tuisong.baidu.com -adsappc.baidu.com -adsb.bdstatic.com -adsbaichuan.baidu.com -adsbaidustatic.com -adsbaidutv.baidu.com -adsbanlv.baidu.com -ads bar.baidu.com -ads"bdimg.share.baidu.com -adsbdplus.baidu.com -ads bj.bcebos.com -adsbtlaunch.baidu.com -ads c.baidu.com -ads cb.baidu.com -adscbjs.baidu.com -adscjhq.baidu.com -adscleaner.baidu.com -ads click.bes.baidu.com -adsclick.hm.baidu.com -adsclick.qianqian.com -ads"cm.baichuan.baidu.com -ads cm.baidu.com -adscm.pos.baidu.com -ads cpro.baidu.cn -adscpro.baidu.com -ads!cpro.baidustatic.com -ads!cpro.tieba.baidu.com -ads"cpro.zhidao.baidu.com -adscpro2.baidu.com -ads"cpro2.baidustatic.com -ads crs.baidu.com -adsdatax.baidu.com -ads dd713.bj.bcebos.com -ads dl.client.baidu.com -adsdl.ops.baidu.com -adsdl1sw.baidu.com -adsdl2.bav.baidu.com -adsdlsw.baidu.com -adsdlsw.br.baidu.com -ads!dl-vip.bav.baidu.com -ads(dl-vip.pcfaster.baidu.co.th -ads#download.bav.baidu.com -ads"download.sd.baidu.com -adsdrmcmm.baidu.com -ads dup.baidustatic.com -ads dxp.baidu.com -ads dzl.baidu.com -ads e.baidu.com -adseclick.baidu.com -adsecma.bdimg.com -adsecmb.bdimg.com -adsecmc.bdimg.com -ads eiv.baidu.com -ads em.baidu.com -adsentry.baidu.com -ads ers.baidu.com -ads f10.baidu.com -ads#fc-feed.cdn.bcebos.com -adsfclick.baidu.com -adsfeed.baidu.com -adsfexclick.baidu.com -ads g.baidu.com -adsgimg.baidu.com -adsguanjia.baidu.com -ads hc.baidu.com -ads hm.baidu.com -adshmma.baidu.com -ads hpd.baidu.com -adsidm.bce.baidu.com -adsidm-su.baidu.com -adsiebar.baidu.com -adsikcode.baidu.com -adsimg.taotaosou.cn -adsimg01.taotaosou.cn -adsj.br.baidu.com -adskstj.baidu.com -ads log.music.baidu.com -ads m1.baidu.com -ads ma.baidu.com -adsmobads.baidu.com -ads"mobads-logs.baidu.com -adsmpro.baidu.com -adsmsite.baidu.com -adsneirong.baidu.com -adsnsclick.baidu.com -ads#nsclickvideo.baidu.com -adsopenrcv.baidu.com -ads$pc.videoclick.baidu.com -ads pos.baidu.com -adspups.bdimg.com -ads%push.zhanzhang.baidu.com -ads qianclick.baidu.com -adsrelease.baidu.com -adsres.mi.baidu.com -ads"rigel.baidustatic.com -ads#river.zhidao.baidu.com -ads rj.baidu.com -adsrplog.baidu.com -ads s.baidu.com -adss.cpro.baidu.com -ads!sa.tuisong.baidu.com -adssclick.baidu.com -adssestat.baidu.com -adsshadu.baidu.com -adsshare.baidu.com -ads"snippet.pos.baidu.com -adssobar.baidu.com -adssobartop.baidu.com -adsspcode.baidu.com -adsstat.v.baidu.com -ads su.bdimg.com -adssu.bdstatic.com -ads t10.baidu.com -ads t11.baidu.com -ads t12.baidu.com -ads tk.baidu.com -adstkweb.baidu.com -ads"tob-cms.bj.bcebos.com -adstongji.baidu.com -adstoolbar.baidu.com -adstracker.baidu.com -adstuijian.baidu.com -ads*uat1.bfsspadserver.8le8le.com -ads#ubmcmm.baidustatic.com -adsucstat.baidu.com -adsulic.baidu.com -ads ulog.imap.baidu.com -adsunion.baidu.com -ads!unionimage.baidu.com -adsutility.baidu.com -ads utk.baidu.com -ads videopush.baidu.com -adsvv84.bj.bcebos.com -adsw.gdown.baidu.com -ads w.x.baidu.com -adswangmeng.baidu.com -adsweishi.baidu.com -ads$wenku-cms.bj.bcebos.com -ads%wisepush.video.baidu.com -ads wm.baidu.com -adswn.pos.baidu.com -adsznsv.baidu.com -adszz.bdstatic.com -adszzy1.quyaoya.com -ads zuoyebang.cc zuoyebang.com -zybang.com baidu -91.com -aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baidubce.combaiducontent.com baidupcs.combaidustatic.com -baifae.com baifubao.com -bcebos.com  bdimg.com bdstatic.com bdtjrcv.com  bdydns.cn -bdydns.com -bdydns.net chuanke.com  dlnel.com  dlnel.org -duapps.com -dwz.cn -hao123.com hao123img.com -hao222.com -haokan.com jomocdn.net jomodns.com -mipcdn.com  nuomi.com quyaoya.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com - - BRILLIANT brilliant.org - -IPIP ipip.net -? -LIEPIN -liepin.com -lietou.comlietou-static.com - -VUVUZELA vuvuzela.io - -XDTY xdty.org -2 -ZOOM zoom.com zoom.com.cn zoom.us - -1PONDO  1pondo.tv -1 - STACKPATH stackpath.com stackpath.dev -" -TED ted.com -tedcdn.com -L -TLD-!CNacadaeafagalamanaoaqaratauawaxazbabgbhbibjbmbnbobrbsbvbwbybzcacdcgclcmcrcucwcxcyczdedkdzecegehereseufifjfkfofrgagbgdgeghgiglgmgngrgsgtgugwgyhkhnhthuieiliniqirjejmjojpkekhkiknkpkrkwkykzlblclilklrlsltlulymamcmdmfmgmhmkmnmompmqmrmtmumwmxmymznancnenfngninlnonpnrnunzompapepfpgphplpnrerorurwsascsdsesgsisjskslsnsrssstsusvsxsysztctdtfthtjtktltmtntotptrtttwtzuaugukumusuyuzvavcvevgvivnvuwfytzazmzwaflmlbnbanflnra averybbbbcgcebcrsdnbdnpdunsdvagerni globalxice locus mckinsey olayangroup -olayan praxisapseek -vistaprint vistawtc xerox athletabananarepublic  bloomberg boots calvinklein cartier chloegap gucci -hermesiwcjlc  lancaster lipsyloft mango  montblanc mrporter -netaporter -nextdirectnextnike oldnavy omega panerai  patagonia -piaget  piperlimepolo redstone -swatchaarp -abbott -abbvie aetna alcon -anthembms -boehringer caremore -cialis dabur  freseniusjnj merck mutuelle -sanofiaeg -airbus -alstom -aramco -blanco bosch -bostik -chesapeakechk crown -doosan -dupontflirfls flsmidth  gecompany grainger hitachi  honeywellifm ipirangajio komatsukoneksb  kuokgroup leclerclidl linde lottemanmtr reliance rexrothril rockwoolrwesandvikcoromant sandvik sapphiresca -schaeffler schmidt schwarzgroup schwarz senersewsncf statoil total -vanish -walter -warman weberweir woodsidezara zippo agakhanakdn -ansons -bharti -extraspace genting glean ikano -imamat  ladbrokes -livestrongmaif -mattel shell transformersvanawme astriumcern -emerck  hisamitsu lilly lundbeck lupin merckmsdmsdmtpc -otsuka -pfizer stadateva toray weather auspost deutschepostdhl epost fedex -pitneyaaa -abarthadac  alfaromeoaudi bentleybmw bridgestone bugatti buick cadillaccase -caseih  chevrolet chevy chrysler -datsun dodge -dunlop ferrarifiat  firestonefordgmc goodyear honda hyundai infiniti iveco -jaguarjeepkia lamborghini -lancia  landrover lexus lincoln maseratimini -mitsubishi mopar -newholland -nissanramseatsrt -suzuki -tatamotors -toyotatvs uconnect -volkswagen volvoaigo android apple bestbuy brother canondell digikey fujitsu  fujixerox  goldpointibm nikon nokia olympus  panasonic philips pioneer samsung sharpsony toshiba  yodobashi  allfinanzallfinanzberaterallfinanzberatungallyamericanexpressamexampanz banamex barclaycard barclaysbbtbbvabnl -bnpparibasbofa bradesco -capitalone cashbackbonuscbacfa chasecimb citadelciti commbank deloitte discover everbank fidelity hdfcbankhdfchsbcitaujcbjll jpmorganchase jpmorgankfhkpmg lacaixa lasalle lixil lplfinanciallplnab nadex netbanknorthwesternmutualopen -pictetpncpohl  pramerica -prudentialprupwcsaxosbiscbscor shriram softbank  statebank temasek -transunion ubankubs vanguardvisa wolterskluwerafamilycompany  aquarellediyduck -finish glade  homedepot  homegoods mrmuscleoffraid rightathome  scjohnsonaig allstateamericanfamily amfam amicaaxa chartis esurance farmers  goodhands guardian guardianlife iselect metlifemma -mutual -nationwide -nissaynorthlandinsurance -onyourside progressive redumbrella  statefarm -swiftcover thehartfordtiaatravelersinsurance  travelers travelguardtrvvig beats blockbusterbway netflix playstation showtimetab williamhillxboxasda bloomingdales -george  homesense justforulego macys  marshallsobiqvc safeway samsclub shopyourway staples -targetthd tiffany -tjmaxxtjx -tkmaxxvons walmartabb  accentureaceraco -active -airtel -amazonandaolawsaxis azure chatr -chrome cisco comcast -connectorscscdclkdish -docomodtvdwg emerson epson ericsson etisalat  fairwindsfido -flickr frogans frontierftrgbizgeaggeegle gmailgmogmx godaddygoog -googlegoogreeguge hangouthkt hotmailhtc -hughesieee iinet infosysinfy intel -intuitjavajcpjmpjprs juniperkddi -kindle -konamikpn lanxess liaison -lockermeo  microsoftmihmiimint mitekmit -mobily -mozaicmtn multichoice naspersnec neustar nexusnico -nortonntt -officeollo -oracle -orangeovh patchpayupccwqtel quest  richardli ricoh -rogers -sakurasaposassessfrshaw skolkovo skydrive skype sling smart stcgroupstc symantectatatcitdk telecity -telefonica terra translations  ultrabook unicornuol verisignvivavivo windows xfinity -xperia yahoo yamaxun -yandex yellowpages youtube -zappos -chanel clinique garnier  kerastase -kiehls lamer lancome -loreal -matrix -maybelline -natura origins -redkensvr barefoot beknown cityeatscookingchannel -cuisinella delmonte edekafage ferrero foodnetworkfood gallo heinz -kindermcd  mcdonalds pamperedchef -rocher -wilmarxn--3oq18vl8pn36axn--55qx5d8y0buji4b870uxn--5su34j936bgsgxn--b4w605ferd xn--cckwcxetd -xn--cg4bkixn--dkwm73cwpn xn--flw351exn--fzys8d69uvgmxn--hxt035cmppuelxn--hxt035czzpfflxn--j6w470d71isscxn--jlq480n2rgxn--jlq61u9w7bxn--kcrx77d1x4axn--kcrx7bb75ajk3bxn--mgba3a3ejtxn--mgba7c0bbn0axn--mgbaakc7dvfxn--mgbb9fbpob xn--ngbe9e0a xn--pgb3ceoj xn--qcka1pmcxn--w4r85el8fhu5dnra xn--w4rs40l avianca caravan changiairport cipriani clubmed delta firmdale -hilton hyatt kerryhotelskerrylogisiticskerryproperties marriott orientexpress  shangrila tradershotelstui -viking -virgin -webjetablecbre chintai  frontdoor -lefrakabc africamagicartebbc  canalpluscbncbsdstv -eurovisionfox -gallup globogotv guardianmediahbohgtvimdbitv -kyknetmnet movistar mzansimagicnhk nowtvsbs sevensky spiegel starhub -supersport theguardian travelchannelweatherchannel bauhaus latrobe -monashrmit - - CALGONCARBON  calgon.at  calgon.be  calgon.ch calgon.cn -cn calgon.co.uk -calgon.com calgon.com.tr  calgon.de  calgon.es  calgon.fr  calgon.ie  calgon.it  calgon.nl  calgon.pt  calgon.ru  calgon.tvcalgoncarbon-china.comcalgoncarbon.com calgonit.com -3 -PPTV  pplive.cn -pplive.com pptv.com - - MCDONALDSmcd  mcdonalds4008-517-517.cn -cnaboutmcdonalds.comhappymeal.co.nzhappymeal.com.au mcd.commcdelivery.co.idmcdelivery.co.krmcdelivery.com.aumcdelivery.com.mymcdelivery.com.sgmcdelivery.com.twmcdindonesia.com mcdonalds.camcdonalds.co.uk mcdonalds.commcdonalds.com.hk mcdonalds.hk mcdonalds.it mcdonalds.no mcdonalds.semcdonaldsarabia.commcdonaldsparties.co.nzmcdonaldsparties.com.au!xn--qhrx81fxh2a.xn--55qx5d.hk - - -NODESOURCEnodesource.com -T -NOW now.com -now.com.hk nowe.com -now-tv.comnow-ashare.com -z -CMB cignacmb.comcmb-leasing.com cmbchina.com cmbi.com.hkcmbwinglungbank.com cmfchina.com - -ELECTRONelectronjs.org - -GOOGLE-REGISTRYcharlestonroadregistry.comregistry.google get.app get.dev get.how get.page iam.soyxn--p8j9a0d9c9a.xn--q9jyb4c -I -MADSHI -madshi.net  madvr.com  madvr.net madvrlabs.llc - -3DM 3dmgame.com -g - ATLASSIAN atlassian.com bitbucket.org statuspage.io -trello.com trellocdn.com -2 -INTERNATIONALSAIMOEinternationalsaimoe.com - -VIM vim.org -& -CHINASO chinaso.com -pg0.cn -# -EDX edx.org edx-cdn.org -3 -QUORA  quora.com quoracdn.net qr.ae -> -UBUNTU -ubuntu.com -ubuntu.netubuntuforums.org - -EA dawngate.com eastore.comlordofultima.com -origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.akamaihd.netrtm.tnt-ea.comssl-lvlt.cdn.ea.comawayoutgame.combattlefieldbadcompany2.combattlefront2.combattlefrontii.combejewled-stars.combejeweledstars.comcapitalgames.com chillingo.comcommandandconquer.comconquerwithcharacter.com  crysis.jp dawngate.comdawngatechronicles.com -dicela.com -dicela.netea-anz-press.com -ea.com eaaccess.comeacashcard.com eacodigos.com eakorea.co.kr eamobile.com eanordic.com -eaplay.com easports.com easports.jpeasportsactive.comeasportsactiveonline.comeasportsfootball.comeasportsfootballclub.comeasportsmma.comeasportsworld.comelectronicarts.comelectronicarts.fr futpromos.com futunited.comghostgames.comheroesofdragonage.com hutpromos.commaddenchampionship.commaddenrewards.commaddenseason.infomaddenseason.netmaddenseason.org  maxis.commysimsracing.com play4free.com playapex.com pogo.com pogobeta.com -popcap.comprojectapex.com pvzheroes.com spearhead.krspeedhunters.com  spore.com ssx3.comstarwarsbattlefront.comstarwarsbattlefront2.comtiberiumalliances.com tiburon.com -tnt-ea.comultimaforever.com unravel2.comunraveltwo.comvisceralgames.com -yogify.comanthemgame.comanthemthegame.comapexlegends.comprojectapex.combattlefield.combattlefield1943.combattlefield3.combattlefield4.combattlefield5.combattlefieldheroes.combattlefieldv.com battlelog.com bioware.combiowarestore.com eamythic.com eamythic.net cncrivals.comcommandandconquer.comtiberiumalliances.comcamelot-europe.comcamelotherald.comcamelotherald.net daoc.netdarkageofcamelot.comdarkness-risen.comdeadspacegame.com dice.se dragonage.comdragonagekeep.comdragonagemovie.comthedreadwolfrises.comdungeonkeeper.cndungeonkeeper.comdungeonkeeper.com.cneafootballworld.comfifastreet.comfifastreet3.com frostbite.comindustrialtoys.commasseffect.commasseffectarchives.comeamirrorsedge.commirrorsedge.commirrorsedge.jpmirrorsedge.netmirrorsedge2.commirrorsedge2d.comblackboxgames.comeablackbox.comneedforspeed.comneedforspeedboost.comneedforspeeddriftkings.comneedforspeedeliminator.comneedforspeedlightning.comneedforspeedoverdrive.comneedforspeedproven.comneedforspeedredline.comneedforspeedshowdown.comneedforspeedstreetkings.comneedforspeedtakedown.comneedforspeedtherun.comneedforspeedtimeattack.com#needforspeedundergroundeast.com nfsworld.comteamneedforspeed.complantsvszombies2.com -pvzgw2.com pvzheroes.comseaofsolitude.comsimcity-buildit.com simcity.com -skate2.com spearhead.krstarwarsfallenorder.comstarwarsjedifallenorder.comstarwarstheoldrepublic.comswjedifallenorder.com  swjfo.com  swtor.com  swtor.net -mysims.com thesims.com thesims3.com thesims4.comthesimssocial.com titanfall.commythicentertainment.commythicentertainment.netmythicgames.comultimaonline.com -uo.com uoherald.com xdsummit.comea.tt.omtrdc.neteaassets-a.akamaihd.net - -J-TEST -j-test.com -O -PUBMATIC pubmatic.compubmatic.co.jpads.pubmatic.com -ads -" - SHADOWSOCKSshadowsocks.org -R -ARPHIC -arphic.com arphic.com.cn arphic.com.twifontcloud.com - -NETFLIX fast.com -netflix.ca netflix.com netflix.netnetflixinvestor.comnetflixtechblog.com nflxext.com nflximg.com nflximg.netnflxsearch.net -nflxso.net nflxvideo.net -) - REBRANDLY rb.gy rebrandly.com -2 -INNER-ACTIVE-ADSinner-active.mobi -ads - - NEWYORKER newyorker.com - -TRIBLER tribler.org - -YANDE yande.re - -ALI213 -ali213.net - -AVGLE  avgle.com - -FFMPEG -ffmpeg.org - -KALI kali.org - -YOUTUBE youtubeggpht.cn -cn  ggpht.comgooglevideo.comwithyoutube.com youtu.beyoutube-nocookie.com -youtube.ae -youtube.al -youtube.am -youtube.at -youtube.az -youtube.ba -youtube.be -youtube.bg -youtube.bh -youtube.bo -youtube.by -youtube.ca youtube.cat -youtube.ch -youtube.cl -youtube.co youtube.co.ae youtube.co.at youtube.co.cr youtube.co.hu youtube.co.id youtube.co.il youtube.co.in youtube.co.jp youtube.co.ke youtube.co.kr youtube.co.ma youtube.co.nz youtube.co.th youtube.co.tz youtube.co.ug youtube.co.uk youtube.co.ve youtube.co.za youtube.co.zw youtube.comyoutube.com.aryoutube.com.auyoutube.com.azyoutube.com.bdyoutube.com.bhyoutube.com.boyoutube.com.bryoutube.com.byyoutube.com.coyoutube.com.doyoutube.com.ecyoutube.com.eeyoutube.com.egyoutube.com.esyoutube.com.ghyoutube.com.gryoutube.com.gtyoutube.com.hkyoutube.com.hnyoutube.com.hryoutube.com.jmyoutube.com.joyoutube.com.kwyoutube.com.lbyoutube.com.lvyoutube.com.lyyoutube.com.mkyoutube.com.mtyoutube.com.mxyoutube.com.myyoutube.com.ngyoutube.com.niyoutube.com.omyoutube.com.payoutube.com.peyoutube.com.phyoutube.com.pkyoutube.com.ptyoutube.com.pyyoutube.com.qayoutube.com.royoutube.com.sayoutube.com.sgyoutube.com.svyoutube.com.tnyoutube.com.tryoutube.com.twyoutube.com.uayoutube.com.uyyoutube.com.ve -youtube.cr -youtube.cz -youtube.de -youtube.dk -youtube.ee -youtube.es -youtube.fi -youtube.fr -youtube.ge -youtube.gr -youtube.gt -youtube.hk -youtube.hr -youtube.hu -youtube.ie -youtube.in -youtube.iq -youtube.is -youtube.it -youtube.jo -youtube.jp -youtube.kr -youtube.kz -youtube.la -youtube.lk -youtube.lt -youtube.lu -youtube.lv -youtube.ly -youtube.ma -youtube.md -youtube.me -youtube.mk -youtube.mn -youtube.mx -youtube.my -youtube.ng -youtube.ni -youtube.nl -youtube.no -youtube.pa -youtube.pe -youtube.ph -youtube.pk -youtube.pl -youtube.pr -youtube.pt -youtube.qa -youtube.ro -youtube.rs -youtube.ru -youtube.sa -youtube.se -youtube.sg -youtube.si -youtube.sk -youtube.sn youtube.soy -youtube.sv -youtube.tn -youtube.tv -youtube.ua -youtube.ug -youtube.uy -youtube.vnyoutubeeducation.comyoutubefanfest.comyoutubegaming.comyoutubego.co.idyoutubego.co.in youtubego.comyoutubego.com.br youtubego.id youtubego.inyoutubei.googleapis.comyoutubekids.comyoutubemobilesupport.com yt.be  ytimg.com - - CANONICAL launchpad.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io -ubuntu.com -ubuntu.netubuntuforums.org canonical.com - -I2P -geti2p.net - - SITEPOINT sitepoint.com -& - STEAMUNLOCKEDsteamunlocked.net - -CLOJURE clojure.org - -FANDOM cursecdn.com -fandom.com  wikia.com  wikia.org dndbeyond.com futhead.com gamepedia.com muthead.comwikia.nocookie.netfandom.zendesk.com - -PIGAV  pigav.com - -VOXMEDIA cstatic.net -curbed.com  eater.comfunnyordie.com meridian.net polygon.com -racked.com -recode.net sbnation.com theverge.com vox-cdn.com vox.comvoxcreative.comvoxfieldguide.com voxmedia.com -voxops.net -; -WJX -sojump.com -wjx.cn wjx.com wjx.top -l -XUEQIU aiganggu.comdanjuanfunds.com -imedao.comsnowballsecurities.com -xueqiu.com -t - CAMBRIDGE cambridge.org"cambridgeschoolshakespeare.comcambridgedigital.netcambridgemaths.org -r - LAUNCHPAD launchpad.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org -7 - -LONDONREALfreedomplatform.tv londonreal.tv - - THEGUARDIAN theguardiandev-guardianapis.comdev-theguardian.com -gu-web.netguardianapis.comguardianapps.co.uk -guim.co.uktheguardian.comtheguardiandns.com -C -BOOKING -booking.cn -cn booking.com bstatic.com - -DISCORD -discord.co discord.com -discord.gg discord.gift discord.gifts discord.media discord.newdiscordapp.comdiscordapp.netdiscordstatus.com -+ -LINKEDIN linkedin.com  licdn.com - - TONGCHENG 40017.cn -17u.cn 17u.net 17usoft.com 17usoft.net  elong.comelongstatic.com -ly.com - -VGTIME -vgtime.com -* -BETTEREXPLAINEDbetterexplained.com -) -KEEP gotokeep.com keepcdn.com -W -MOJANGcallersbane.com minecraft.netminecraftshop.com -mojang.com - -MUNCLOUD muncloud.dog - -QMAP qmap.pub - -WEBFLOW webflow.com - -CONAIR  conair.me -) - LEANPLUM-ADS leanplum.com -ads - -LG -lg.com lgappstv.com  lge.co.kr lge.comlgecareers.com -lghvac.comlghvacstory.comlgrecyclingprogram.comlgsalesportal.comlgelectronics.122.2o7.net - -PSIPHON psiphon3.com - -YOUPORN youporn.com - -AVSFORUM avsforum.com - -IPFS ipfs.io -Y -JFROG  jfrog.com  jfrog.org bintray.com!d29vzk4ow07wi7.cloudfront.net -, -MEDIUM -medium.commedium.systems - - JFENGTIME jfengtime.com - -XHAMSTER xhamster.comxhamsterlive.com  xhcdn.comwidgets.stripst.com#collector.xhamster.com -ads - -MONOTYPEfontexplorerx.com  fonts.com  fonts.net fontbook.com fontshop.comfstopimages.com40fontshop-prod-responsive-images.s3.amazonaws.com linotype.com myfonts.com myfonts.net monotype.commonotypeimaging.com bitstream.com itcfonts.com - -RFI -rfi.fr -5 -SENSORSDATA-ADS"static.sensorsdata.cn -ads -k -SLING dishworld.comslinginternational.com  sling.commovenetworks.com -movetv.com - -BITMEX -bitmex.com - -DMZJ dmzj.com -( -IMGUR  imgur.com imgurinc.com - -LOGITECH logi.comlogicool.co.jp logicoolg.com logitech.biz logitech.com logitech.fr logitechg.com logitechg.frworldsfastestgamer.net - -YOULUCKY youlucky.com - -ZSH zsh.org - -JENKINS -jenkins.io - -JIYUKOBOjiyu-kobo.co.jp - -TGBUS  tgbus.com -' -ZEPLIN -zeplin.dev  zeplin.io - -HEGRE  hegre.com -@ - ZUOYEBANG zuoyebang.cc zuoyebang.com -zybang.com - -0X0 -0x0.st -- - ACFUN-ADS apilog-web.acfun.cn -ads -7 - FONTAWESOMEfontawesome.comfortawesome.com -$ -GFW  gfw.press -gfw.report - - MANMANBUY manmanbuy.com - -TSQUARE -tsquare.tv -k -IKEAikea.cn -cn ikea.com ikea.net  ingka.com  ingka.devingkacentres.com - - XIAOMITV-ADSad.intl.xiaomi.com -ads ad.mi.com -ads ad.xiaomi.com -adsadmob.xiaomi.com -adsad1.xiaomi.com -adsmistat.xiaomi.com -adstracking.miui.com -adsadv.sec.miui.com -ads"adv.sec.intl.miui.com -ads"misc.in.duokanbox.com -ads ad.hpplay.cn -adsadeng.hpplay.cn -ads kuyun.com -ads umeng.com -ads -" - MOCLOUDPLUSmocloudplus.com - -MOOV moov.hk - -OPENAI -openai.com - -HKGOLDEN hkgolden.com - -WHONIX -whonix.org - -WIKIHOW wikihow.com - -CAIXIN -caixin.com -3 - -CONTENTFULcontentful.com ctfassets.net - - -JAVLIBRARYjavlibrary.com - -TWITTERads-twitter.com periscope.tv pscp.tvt.co tellapart.com tweetdeck.com  twimg.com twitpic.com twitter.com -twitter.jptwitterinc.comtwitteroauth.comtwitterstat.us twtrdns.net  twttr.com vine.co - - -LANDOFHOPE landofhope.tv -2 -YNET ynet.cn ynet.com ynet.com.cn - - DAILYMAIL  anm.co.uk  dailym.aidailymail.co.uk dailymail.comdailymail.com.au dailymail.dkdailymailonline.comdmgmediaprivacy.co.ukmailhealth.commailonline.co.ukmailonline.commailonsunday.co.ukmailonsunday.ie metro.co.uk -mol.imthisismoney.co.uk -thismon.ee -U -SB -dns.sb ip.sb loli.net sb.sb sm.msu.nu -www.sb - -SMPTE  smpte.org - -TMTPOST tmtpost.com chaindd.com -72whys.com checkzeit.com -tivitv.com tigeek.net.cntmtsmartlife.comtmtsmartrun.com -+ -AFDIAN -afdian.net afdiancdn.com - - INTEL-DEV -01.org hyperscan.iointellinuxgraphics.comintellinuxgraphics.net -oneapi.comopenvinotoolkit.orgsnap-telemetry.io -acpica.com clearlinux.cn -cnclearlinux.org -ospray.net -ospray.org - - -JD3.cn  300hu.com -360buy.com 360buyimg.com -360top.com -7fresh.com baitiao.comblackdragon.com  caiyu.comchinabank.com.cn -dao123.comjcloud-cdn.comjcloud-live.comjcloud-oss.com -jcloud.comjcloudcache.com jcloudcs.com jclouddn.com jcloudec.com jcloudlb.comjcloudlive.com jcloudlv.com jcloudoss.com jcloudss.comjcloudstatic.comjcloudvideo.com  jclps.com -jd-app.com  jd-ex.com jd.cn jd.co.th -jd.com jd.hk jd.id jd.ru jdcache.com jdcloud.com jdcloudcs.comjdcloud-api.comjddapeigou.com jddebug.com jddglobal.com jdjinrong.com  jdpay.com jdpaydns.com jdx.com jdwl.comjingdongjinrong.com -jingxi.com -jkcsjd.com -joybuy.com  joybuy.eslinglonglife.com mayshijia.com minitiao.com  ocwms.com paidaojia.cn -paipai.comprestodb-china.com qianxun.comqingzhouip.com toplife.com -vg.com wangyin.com  wdfok.com yhd.com yihaodian.comyihaodianimg.com yiyaojd.com yizhitou.comads.union.jd.com -ads c-nfa.jd.com -adscps.360buy.com -ads -jzt.jd.com -ads stat.m.jd.com -ads img-x.jd.com -ads -} -SHOPIFY myshopify.com shopify.com shopify.devshopifycdn.comshopifystatus.comshopifysvc.com -L -APKPURE apkpure.com cdnpure.com pureapk.com -winudf.com - -DETTOLdettol-prize.com  dettol.at  dettol.be  dettol.ch  dettol.cl dettol.co.id dettol.co.in dettol.co.ke dettol.co.nz dettol.co.uk -dettol.com dettol.com.au dettol.com.bd dettol.com.br dettol.com.cn -cn dettol.com.eg dettol.com.hk dettol.com.my dettol.com.ng dettol.com.sg  dettol.cz  dettol.fr  dettol.hu  dettol.ie -dettol.net  dettol.nl  dettol.pk  dettol.pl  dettol.pt  dettol.rudettolarabia.comdettolcleannaija.comdettolsitishield.co.indettolthailand.comespadoldettol.com.ar - -OPENJSFOUNDATION amp.devampproject.comampproject.netampproject.orgcdn.ampproject.org -cnamp.akamaized.netelectronjs.org -jquery.comjquerymobile.com jqueryui.com mochajs.org -nodejs.org openjsf.org -# -QT qt.ioqt-project.org - -AHMIA ahmia.fi -, -GANJI  ganji.comganjistatic1.com -" -KODI kodi.tv  kodi.wiki - -OKEX okex.com -F - -DEVIANTARTdeviantart.comdeviantart.net da-files.com - -KERNEL -kernel.org - -YANDEXxn--d1acpjx3f.xn--p1ai  yandex.az  yandex.by yandex.co.il -yandex.com yandex.com.am yandex.com.ge yandex.com.tr  yandex.ee  yandex.kg  yandex.kz  yandex.lt  yandex.lv  yandex.md -yandex.net  yandex.ru  yandex.st  yandex.sx  yandex.tj  yandex.tm  yandex.ua  yandex.uzyandexcloud.net yastatic.net -yandex -+ -MYFONTS myfonts.com myfonts.net -0 - -SOUNDCLOUDsoundcloud.com -sndcdn.com - -TELEX telex.cc - -AIRWICK -airwick.at -airwick.be -airwick.ca -airwick.ch -airwick.cl airwick.co.in airwick.co.nz airwick.co.uk airwick.co.za airwick.comairwick.com.auairwick.com.brairwick.com.cn -cnairwick.com.mxairwick.com.tr -airwick.cz -airwick.de -airwick.dk -airwick.es -airwick.fi -airwick.fr -airwick.hr -airwick.hu -airwick.ie -airwick.it -airwick.jp airwick.net -airwick.nl -airwick.no -airwick.pl -airwick.pt -airwick.ro -airwick.ru -airwick.se -airwick.si -airwick.sk -airwick.tv -airwick.usairwickarabia.com vipoo.es - -BITTREX bittrex.com - -FINISH$dishwashingexpert.com.cn -cn  finish.at  finish.bg finish.co.kr finish.co.nz finish.co.uk finish.co.za finish.com.cn -cn finish.com.hr finish.com.tr  finish.de  finish.es  finish.fr  finish.gr  finish.hu  finish.lv  finish.pl  finish.pt  finish.ro  finish.si  finish.skfinisharabia.comfinishbrasil.com.brfinishdishwashing.cafinishdishwashing.com finishinfo.be finishinfo.clfinishinfo.comfinishinfo.com.arfinishinfo.com.au finishinfo.cz finishinfo.fi finishinfo.it finishinfo.jp finishinfo.nl finishinfo.no finishinfo.ru finishinfo.sefinishkilpailu.fi finishwin.beyarininsuyu.com - -HULU -112263.com callhulu.comfindyourlimits.com freehulu.com  hooloo.tv  hoolu.com hoolu.tv hu1u.com huloo.cc huloo.tv hulu.com hulu.tv hulu.ushuluaction.com -huluad.com huluapp.com huluasks.com hulucall.com hulufree.com hulugans.comhulugermany.com -hulugo.com -huluim.comhuluinstantmessenger.com huluitaly.com hulunet.comhulunetwork.com huluplus.comhulupremium.comhulupurchase.com -huluqa.comhulurussia.com huluspain.comhulusports.comhulustream.com huluteam.com -hulutv.com huluusa.comjoinmaidez.com mushymush.tv -myhulu.comoriginalhulu.com payhulu.comregisterhulu.comthehulubraintrust.comwwwhuluplus.com - -TENCENT dns.pub  dnsapi.cn  dnspod.cn -dnspod.com dnspod.com.cn -dnspod.net -dnspod.org  dnsv1.com  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub ad.qq.com -ads ad.qun.qq.com -ads!adfilter.imtt.qq.com -ads adping.qq.com -adsadpm.app.qq.com -adsadsclick.qq.com -adsadsfile.qq.com -adsadshmmsg.qq.com -adsadslvfile.qq.com -adsadslvseed.qq.com -ads%adsmind.apdcdn.tc.qq.com -adsadsqqclick.qq.com -adsadstestview.qq.com -adsadsview.qq.com -adsadsview2.qq.com -adsadv.app.qq.com -ads adver.qq.com -ads btrace.qq.com -adse.qq.com -adslog.tbs.qq.com -ads mpush.qq.com -ads mtrace.qq.com -ads push.qq.com -ads pgdt.gtimg.cn -ads -yuewen.com hongxiu.com lrts.me qdmm.com -qidian.com readnovel.com tingbook.com webnovel.com -xs8.cn xxsy.net -apcdns.net  cdn-go.cn cdntips.com foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com myqcloud.com -qcloud.com qcloudimg.com qlogo.cn qpic.cn -qq.com -qqmail.com  qzone.com -rtx.com.cnservicewechat.com smtcdns.com smtcdns.net -tencent.cn tencent.comtencent.com.cntencent.com.hktencent.net.cntencent-cloud.comtencentmusic.comtencentyun.com -tenpay.com -wechat.com -wegame.com wegame.com.cn -weiyun.com alloyteam.com imweb.io ivweb.io - -CNN cnn.com -cnn.io cnnarabic.com cnnlabs.com cnnmoney.ch cnnmoney.comcnnmoneystream.comcnnpolitics.com -3 -ELEME -ele.me elemecdn.com eleme.cn - -HUOBI -hbabit.com -hbfile.net  huobi.com huobi.me  huobi.pro huobi.sc huobiasia.viphuobigroup.comhuobitoken.com -0 - MIXPANEL-ADS decide.mixpanel.com -ads - -EPOCHMEDIAGROUP dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.comepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net -etviet.comlagranepoca.com ntd.com  ntdca.com -ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtvla.com  ntdvn.compersianepochtimes.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.cz -' -HM -hm.com hm.com.cn -cn -j -IMPERIALCOLLEGE ic.ac.ukimperial.ac.ukimperialbusiness.schoolimperial.insendi.com -6 -UDN udn.com -udn.com.twudnfunlife.com -C -ADDTHIS addthis.comaddthiscdn.comaddthisedge.com -_ -CATEGORY-WIKI-CNhuijistatic.com huijiwiki.com moegirl.orgmoegirl.org.cn - -CCBccb-life.com.cn ccb.com -ccbfund.cnccbfutures.comccbintl.com.hkccbleasing.com ccbseoul.comccbtrust.com.cn -* -DUOWAN -duowan.com dwstatic.com - -DOOM9  doom9.org -4 - ARCHLINUX archlinux.orgarchlinuxarm.org -% - FONTEXPLORERfontexplorerx.com -# - PRIVACYTOOLSprivacytools.io - -TIKTOK  amemv.com -muscdn.com -musical.ly -tiktok.com tiktokcdn.com tiktokv.com#p16-tiktokcdn-com.akamaized.net - -SSPLIVE -ssplive.pw -B - APPLOVIN-ADS applovin.com -ads -applvn.com -ads - -DELL -cfblob.comcloudchoose.comcloudvolumes.com -cmpaas.com -cpedge.comcrit-staging.comexperience-vmware.com gemfire.netgeodesummit.com getboxer.com gitstar.com gitstar.net gopivotal.net greenplum.net hwslabs.com immidio.comitfromtheinside.comlatamvmwareforum.compivotalinitiative.comsnapvolumes.com ssdevrd.com vcanedge.com vcloudair.net vfabric.netvidmpreview.com -virsto.com -virsto.net vmglobal.net -vmmark.comvmtestdrive.com vmw.comvmware-cloudmanagement.comvmware-techcenter.comvmware20mosaic.comvmwareausnews.com!vmwarecertificationvideos.comvmwarecloud.comvmwaredemandcenter.comvmwareemeablog.comvmwaregrid.comvmwarehorizon.comvmwareidentity.comvmwarelearning.comvmwarelearningplatform.comvmwarestuff.comvmwareusergroupstore.comvmwareviewpoint.com vmwarevmc.com vmwdemo.com vmwgcomms.comvmwhorizonair.comvmwidm-ads.com -vmwidm.comvmwlabconnect.comvmwlearningplatform.com vmworld.comvmworld2010.comvmworld2013.comvmwsalesrewards.comvmwservices.com -vnware.netwhychoosehorizon.comwhychooseview.comwhychoosevmwareeuc.comwindowsuem.comworkspaceair.com xlstudio.comavinetworks.com -badaas.com bitnami.combitnamiapp.combitnamistudio.comdockerizer.comcloudcredibility.comcloudhealthtech.com cloudlive.comkubeacademy.com kubeapps.com -nyansa.com velocloud.com gopivotal.com heptio.cn -cn -heptio.com aliveipc.com aliveitsm.comaliveprofiler.com alivercm.comaliverewind.com alivertsm.com alivevm.com alivevmax.com alivevue.com vsphere.com vsphere.net air-watch.comairwatchexpress.comairwatchqa.com -getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.netdelldell-brand.com dell.com dellcdn.com - -FIRESIDE fireside.fm -, -MATTERS matters.news matters.one - -CATEGORY-SCHOLAR-CN -csdl.ac.cn  las.ac.cn cnki.netwanfangdata.com.cn  apabi.comcnthinkers.com  cqvip.com -, -THENATIONALPULSEthenationalpulse.com - - YUNFANJIASU yfcache.com -yfcalc.com yfcloud.com  yfdts.net  yfp2p.net -yfscdn.net yunfancdn.com -( -OPENCOLLECTIVEopencollective.com - -BESTBUY bby.combbycastatic.ca bbycloud.combbycontent.combbycontent.net bbyintl.com bbystatic.com  bbyurl.us bestbhy.combestbuy-audio.com"bestbuy-communityrelations.combestbuy-giftcard.infobestbuy-int.combestbuy-jobs.com -bestbuy.ca -bestbuy.cn -cn bestbuy.combestbuy.com.cn -cnbestbuy.com.mx bestbuy.infobestbuy24x7solutions.combestbuybusiness.com'#bestbuybusinessadvantageaccount.combestbuycanada.cabestbuycanada.combestbuycanadaltd.cabestbuycharityclassic.combestbuycoffeemakers.combestbuyethics.combestbuyforbusiness.cabestbuygsm.combestbuyideax.com!bestbuyphotoworkshoptours.combestbuyrewards.combestbuyrewardzone.ca bestbuys.combestbuysgeeksquad.combestbuysolutions.netbestbuystores.combestbuytradein.com bestbuyus.com besztbuy.com bextbuy.combienvenuechezbestbuy.ca cowboom.com futureshop.cainitproducts.commagnoliaav.com.cn -cn mybestbuy.commybestbuyclaims.commyrewardzone.com myrz.compacifickitchenandhome.comtiendabestbuy.comunbrandedproducts.comwelcometobestbuy.cawolfatbestbuy.comwolfatbestbuy.netwww-bestbuystores.comgeek-squad-support.comgeek-squad.netgeek-squad.orggeek-squads.net geeksquad.ca geeksquad.cc geeksquad.com geeksquad.net geeksquad.tvgeeksquadcares.comgeeksquadcentral.comgeeksquadforums.comgeeksquadonline.comgeeksquadprotectionplan.orggeeksquadservices.orggeeksquadwebroot.org gscanada.info -gsccdn.com  gslink.usonlinegeeksquad.comrocketfishproducts.com dealtree.orgtechliquidators.com -, -BYPASSCENSORSHIPbypasscensorship.org - -CCTV cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn -cctvlib.cncctvlibrary.cncctvlib.com.cncctvlibrary.com.cn -cctvpro.cncctvpro.com.cn  cntvwb.cn gjgbdszt.cngjgbdszt.com.cngjgbdszt.net.cn  ipanda.cn -ipanda.com ipanda.com.cn -ipanda.net livechina.cn livechina.comolympicchannelchina.cn tvcc.cn tvcc.com.cn%!xn--fiq53l6wcx3kp9bc7joo6apn8a.cn%!xn--fiq53l90et9fpncc7joo6apn8a.cn-)xn--fiq53l6wcx3kp9bc7joo6apn8a.xn--fiqs8s%!xn--kprv4ewxfr9cpxcc7joo6apn8a.cn-)xn--kprv4ewxfr9cpxcc7joo6apn8a.xn--fiqs8s zggbdszt.cnzggbdszt.com.cnzggbdszt.net.cnzygbdszt.net.cn - -CHANGE -change.org -+ -TRELLO -trello.com trellocdn.com -, -HITUN hitun.ioxn--90wwvt03e.com - -LETV-ADS#api.game.letvstore.com -ads ark.letv.com -ads dc.letv.com -adsdev.dc.letv.com -ads fz.letv.com -ads g3.letv.com -adsletv.allyes.com -adsminisite.letv.com -adsmsg.m.letv.com -adsn.mark.letv.com -adsplog.dc.letv.com -adspro.hoye.letv.com -ads pro.letv.com -ads stat.letv.com -ads"static.app.m.letv.com -ads -T - -PROTONMAIL protonmail.chprotonmail.comprotonstatus.com pm.me -F - -TAGTIC-ADS g1.tagtic.cn -adsxy-log.tagtic.cn -ads - -BILIBILI -acg.tv acgvideo.com -b23.tv biliapi.com biliapi.net bilibili.combilibiligame.net biligame.com biligame.net bilivideo.com  hdslb.com im9.com -mincdn.com$ upos-hz-mirrorakam.akamaized.net - -JITSI  jitsi.org -. -KUAIKAN kkmh.comkuaikanmanhua.com - -MAYING  maying.co -+ -WIKIDOT wdfiles.com wikidot.com - -ADBLOCKgetadblock.com -? -BOOTCSS bootcss.com -bootcdn.cnphpcomposer.com - -CANON canon c-ij.com canon-cee.comcanon-cmos-sensors.com canon-cna.comcanon-ebm.com.hkcanon-emea.comcanon-emirates.aecanon-europa.comcanon-europe.com canon-me.com canon-ois.qacanon-se.com.tw canon.am canon.at canon.az canon.ba canon.be canon.bg canon.ca canon.chcanon.cn -cn canon.co.il canon.co.uk canon.co.za  canon.com canon.com.al canon.com.au canon.com.by canon.com.cn -cn canon.com.cy canon.com.hk canon.com.mk canon.com.mt canon.com.my canon.com.tr canon.com.tw canon.cz canon.de canon.dk canon.ee canon.es canon.fi canon.fr canon.ge canon.gr canon.hr canon.hu canon.ie canon.it canon.kz canon.lt canon.lu canon.lv canon.me  canon.net canon.nl canon.no canon.pl canon.pt canon.ro canon.rs canon.ru canon.se canon.si canon.sk canon.tj canon.ua canon.uzcanonfoundation.orgcanonproprinters.com -6 -PROQUESTserialssolutions.com proquest.com -Z -XUNLEI  00cdn.com  88cdn.com -sandai.netthunderurl.com -xunlei.com -b - YAHOO-ADS ads.yahoo.com -adsgemini.yahoo.com -ads ysm.yahoo.com -ads -r -ZENDESK outbound.io zdassets.comzdusercontent.com zendesk.com  zndsk.com  zopim.com - -CDNJS  cdnjs.com -8 - KINGKONGLIVEkingkong.com.twkingkongapp.com -. -NETLIFY netlify.combitballoon.com -Z -PICSEE pics.ee  picsee.co -picsee.pro pise.pw pros.ee -pse.is - -NIXOS  nixos.org - -OVERCAST overcast.fm - -ADDTOANY addtoany.com -$ - BROWSERLEAKSbrowserleaks.com - - LINUXMINT linuxmint.com - -NINTENDO100classicbooks.com -amiibo.comayudanintendo.combowsersinsidestory.comexcitebots.comflipnotestudio.comgloryofheracles.comhackyourconsole.comkirbysuperstarultra.comkirbysepicyarn.comlegendofzelda.cn -cn legendofzelda.com.cn -cn miitomo.commiitomo.com.cn -cn miiverse.com nentindo.netnintendo-europe-sales.comnintendo-europe.com nintendo.at nintendo.be nintendo.chnintendo.co.jpnintendo.co.krnintendo.co.uknintendo.co.za nintendo.comnintendo.com.hknintendo.com.pt nintendo.de nintendo.dk nintendo.es nintendo.eu nintendo.fi nintendo.fr nintendo.it nintendo.net nintendo.nl nintendo.no nintendo.pt nintendo.ru nintendo.se nintendo.twnintendo3ds.comnintendodsi.comnintendoeurope.comnintendolabo.cn -cnnintendonetwork.netnintendonyc.comnintendostore.comnintendoswitch.comnintendoswitch.netnintendoswitchtogether.compersonaltrainermath.complaynintendo.comsupersmashbros.cn -cn!supersmashbros.com.cn -cnthelegendarystarfy.comthewonderful101.comwariolandshakeit.comwariowarediy.comyoshisnewisland.comac-pocketcamp.comdiddykongracing.com dkr.com donkeykongcountryreturns.comfire-emblem-heroes.comfireemblemawakening.com -dialga.com giratina.com -kyurem.com pokedex3d.compokemon-moon.compokemon-sun.compokemon-sunmoon.com pokemon.compokemonbank.compokemonblackwhite.com pokemonbw.compokemonchampionships.compokemongoldsilver.compokemonhome.compokemonletsgoeevee.compokemonletsgopikachu.compokemonmysterydungeon.compokemonpicross.compokemonplatinum.compokemonrubysapphire.compokemonsunmoon.compokemonswordshield.compokemonultrasunmoon.compokemonvgc.compokemonwifi.net xn--mts47c3w9b1qr.cn -cnxn--mts47c3w9b1qr.netsplatoon2tournament.com starfox.comdrmario-world.commarioandluigidreamteam.commariobroswii.com mariokart.cn -cnmariokart.com.cn -cnmariokart7.commariokart8.commariosupersluggers.comnewsupermariobrosu.comsupermario.comsupermario3dworld.com!supermariobros.com.cn -cnsupermariogalaxy.comsupermariorun.comsuperpapermario.comnintendowii.com  wii-u.com -wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com -e -METART -metart.commetartnetwork.com metcams.comnaiadsystems.com  nsimg.net -% -NGINX  nginx.com  nginx.org - - SOUNDOFHOPE bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.krsoundofhope.orgwanokokorosoh.com - - SPEEDTEST  cdnst.net cellmaps.com ekahau.cloud -ekahau.com  ookla.comooklaserver.net pingtest.net speedtest.co speedtest.netspeedtestcustom.com webtest.netOB^speed\.(coe|open)\.ad\.[a-z]{2,6}\.prod\.hosts\.ooklaserver\.net$ -ads - - BREITBART breitbart.com - -CUP -cup.com.hk -: -ESRI -arcgis.comarcgisonline.com esri.com -& -JABLE cdnlab.live jable.tv - -VEET veet.at veet.be veet.ca veet.ch veet.clveet.cn -cn -veet.co.id -veet.co.in -veet.co.kr -veet.co.nz -veet.co.uk -veet.co.za veet.com veet.com.ar veet.com.au veet.com.bd veet.com.br veet.com.cn -cn veet.com.co veet.com.hk veet.com.mx veet.com.my veet.com.ph veet.com.pk veet.com.sg veet.com.tr veet.de veet.dk veet.es veet.fi veet.fr veet.hu veet.jp veet.nl veet.no veet.pt veet.ro veet.ru veet.se veet.tv veet.usveetarabia.comveetbangladesh.comveetcentroamerica.com veetclub.it -f -OOKLA-SPEEDTEST-ADSOB^speed\.(coe|open)\.ad\.[a-z]{2,6}\.prod\.hosts\.ooklaserver\.net$ -ads - - STACKEXCHANGE askubuntu.comblogoverflow.commathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.comstackoverflow.emailstackoverflowbusiness.comstacksnippets.net superuser.com tex-talk.netthesffblog.com - -VIMEO -vhx.tv -vhxqa1.com -vhxqa2.com -vhxqa3.com -vhxqa4.com -vhxqa6.comvimeo-staging.comvimeo-staging2.com  vimeo.com vimeo.frvimeobusiness.com vimeocdn.comvimeogoods.comvimeoondemand.comvimeostatus.comlivestream.com -# -DCARD dcard.io dcard.tw - -KRAKEN -kraken.com -C -MAOCLOUD -maoyun.commaoyuncloud.cnmaoyuncloud.com - -NTC  ntc.party -, -BANDCAMP bandcamp.com -bcbits.com -3 - -CITIZENLAB citizenlab.cacitizenlab.org -) - GATEWAYPUNDITthegatewaypundit.com -* -PAYPALaccount-paypal.infoaccount-paypal.netaccount-paypal.orgaccountpaypal.comaccountpaypal.netaccountpaypal.org anfutong.cn -cn anfutong.comanfutong.com.cn -cn beibao.cn -cn -beibao.com beibao.com.cn -cn bill-safe.combillmelater.combillmelater.infobillmelater.net bml.infobuyfast-paysmart.net cashify.comdevtools-paypal.comexperiencebillmelater.comfundpaypal.com -gmoney.org -i-o-u.infologin-paypal.comlogin-paypal.infomywaytopay.infomywaytopay.net -pa9pal.com paaypal.com  paily.net  paily.org -paipal.com -pavpal.com paydiant.com paylike.com -paypa1.com -paypa1.org paypaal.compaypal-activate.compaypal-activate.infopaypal-activate.orgpaypal-apac.compaypal-apps.compaypal-biz.compaypal-brandcentral.compaypal-business.compaypal-business.netpaypal-business.orgpaypal-cardcash.compaypal-cash.compaypal-center.compaypal-center.infopaypal-center.netpaypal-center.orgpaypal-communication.compaypal-communications.compaypal-communications.netpaypal-community.compaypal-community.netpaypal-comunidad.compaypal-corp.compaypal-database.compaypal-database.uspaypal-donations.compaypal-dynamic.compaypal-engineering.compaypal-europe.compaypal-excelinvoicing.compaypal-exchanges.compaypal-forward.compaypal-galactic.compaypal-gift.compaypal-gifts.compaypal-gpplus.compaypal-here.compaypal-hrsystem.compaypal-innovationlab.compaypal-integration.compaypal-japan.compaypal-knowledge.compaypal-labs.compaypal-latam.compaypal-learning.compaypal-login.compaypal-login.infopaypal-login.orgpaypal-login.uspaypal-luxury.compaypal-mainstreet.netpaypal-marketing.compaypal-media.compaypal-merchantloyalty.compaypal-mobilemoney.compaypal-network.orgpaypal-notice.compaypal-notify.compaypal-online.infopaypal-online.netpaypal-online.orgpaypal-optimizer.compaypal-pages.compaypal-photocard.compaypal-plaza.compaypal-portal.compaypal-prepagata.compaypal-prepagata.netpaypal-prepaid.compaypal-profile.compaypal-proserv.compaypal-qrshopping.orgpaypal-recargacelular.compaypal-redeem.compaypal-referral.compaypal-retail.compaypal-scoop.compaypal-search.compaypal-secure.netpaypal-secure.orgpaypal-security.netpaypal-security.orgpaypal-service.orgpaypal-signin.compaypal-signin.uspaypal-special.compaypal-specialoffers.compaypal-sptam.compaypal-support.compaypal-survey.compaypal-survey.orgpaypal-status.compaypal-team.compaypal-viewpoints.net  paypal.ca -paypal.com paypal.com.cn -cn paypal.com.hk paypal.com.sg  paypal.hk paypal.info  paypal.jp  paypal.me paypal.net.cn -cn paypal.org.cn -cn  paypal.so  paypal.uspaypalbeacon.compaypalbenefits.compaypalbrasil.compaypalcommunity.cn -cnpaypalcommunity.compaypalcommunity.netpaypalcommunity.orgpaypalcorp.compaypalcredit.compaypalcreditcard.compaypalgivingfund.org paypalhere.cn -cnpaypalhere.compaypalhere.com.cn -cnpaypalhere.infopaypalhere.netpaypalhere.org paypalhere.tv paypali.net paypalinc.compaypalindia.compaypalinsuranceservices.org paypall.compaypallabs.com paypalme.com paypalnet.net paypalnet.orgpaypalnetwork.infopaypalnetwork.netpaypalnetwork.orgpaypalobjects.compaypalonline.netpaypalonline.orgpaypalprepagata.compaypalprepagata.netpaypalservice.compaypalshopping.compaypalshopping.netpaypalsurvey.com paypalx.com paypaly.com payppal.com payypal.compdncommunity.com -pp-soc.com ppaypal.com  pppds.com pypl.com  pypl.info pypl.net pypl.tvsecure-paypal.infosecurepaypal.info sslpaypal.orgthepaypalshop.comtheshoppingexpresslane.netwww-paypal.info www-paypal.usxn--bnq297cix3a.cn -cnbraintreegateway.combraintreegateway.tvbraintreepayments.combraintreepayments.infobraintreepayments.orgbraintreepayments.tv!braintreepaymentsolutions.combraintreeps.combriantreepayments.netbriantreepayments.tv card.iogetbraintree.com krakenjs.comloanbuilder.comswiftcapital.com simility.com cashify.netswiftbank.info swiftbank.usswiftfinancial.comswiftfinancial.infoswiftfinancial.netvenmo-touch.com  venmo.com -venmo.info  venmo.net  venmo.org  cash2.comfilipino-music.net -s-xoom.comwebmoneyinfo.com2.wiremoneytoirelandwithxoomeasierandcheaper.com wwwxoom.comxoom-experience.com xoom.com xoom.io xoom.net.cn -cn xoom.us xoomcom.comvenmo.s3.amazonaws.com -1 -HOMEBREW brew.shhomebrew.bintray.com -d - JUSTMYSOCKSjustmysocks.netjustmysocks1.netjustmysocks2.netjustmysocks4.net - -OCULUS binoculus.com buyoculus.com ocul.usoculus-china.com -oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com - -WEBEX webex.ca webex.co.in webex.co.it webex.co.jp webex.co.kr webex.co.nz webex.co.uk  webex.com webex.com.au webex.com.br webex.com.cn -cn webex.com.hk webex.com.mx webex.de webex.es webex.fr - -ADOBE-ACTIVATION3dns-1.adobe.com3dns-2.adobe.com3dns-3.adobe.com3dns-4.adobe.com3dns-5.adobe.com3dns.adobe.comactivate-sea.adobe.comactivate-sjc0.adobe.comactivate.adobe.comactivate.wip1.adobe.comactivate.wip2.adobe.comactivate.wip3.adobe.comactivate.wip4.adobe.comadobe-dns-1.adobe.comadobe-dns-2.adobe.comadobe-dns-3.adobe.comadobe-dns-4.adobe.comadobe-dns.adobe.com adobeereg.comcrl.versign.netereg.adobe.comereg.wip.adobe.comereg.wip1.adobe.comereg.wip2.adobe.comereg.wip3.adobe.comereg.wip4.adobe.comhl2rcv.adobe.comhlrcv.stage.adobe.comlm.licenses.adobe.comlmlicenses.wip4.adobe.comna1r.services.adobe.comood.opsource.netpractivate.adobepractivate.adobe.compractivate.adobe.ipppractivate.adobe.newoapractivate.adobe.ntp wip.adobe.comwip1.adobe.comwip2.adobe.comwip3.adobe.comwip4.adobe.comwwis-dubc1-vip100.adobe.comwwis-dubc1-vip101.adobe.comwwis-dubc1-vip102.adobe.comwwis-dubc1-vip103.adobe.comwwis-dubc1-vip104.adobe.comwwis-dubc1-vip105.adobe.comwwis-dubc1-vip106.adobe.comwwis-dubc1-vip107.adobe.comwwis-dubc1-vip108.adobe.comwwis-dubc1-vip109.adobe.comwwis-dubc1-vip110.adobe.comwwis-dubc1-vip111.adobe.comwwis-dubc1-vip112.adobe.comwwis-dubc1-vip113.adobe.comwwis-dubc1-vip114.adobe.comwwis-dubc1-vip115.adobe.comwwis-dubc1-vip116.adobe.comwwis-dubc1-vip117.adobe.comwwis-dubc1-vip118.adobe.comwwis-dubc1-vip119.adobe.comwwis-dubc1-vip120.adobe.comwwis-dubc1-vip121.adobe.comwwis-dubc1-vip122.adobe.comwwis-dubc1-vip123.adobe.comwwis-dubc1-vip124.adobe.comwwis-dubc1-vip125.adobe.comwwis-dubc1-vip30.adobe.comwwis-dubc1-vip31.adobe.comwwis-dubc1-vip32.adobe.comwwis-dubc1-vip33.adobe.comwwis-dubc1-vip34.adobe.comwwis-dubc1-vip35.adobe.comwwis-dubc1-vip36.adobe.comwwis-dubc1-vip37.adobe.comwwis-dubc1-vip38.adobe.comwwis-dubc1-vip39.adobe.comwwis-dubc1-vip40.adobe.comwwis-dubc1-vip41.adobe.comwwis-dubc1-vip42.adobe.comwwis-dubc1-vip43.adobe.comwwis-dubc1-vip44.adobe.comwwis-dubc1-vip45.adobe.comwwis-dubc1-vip46.adobe.comwwis-dubc1-vip47.adobe.comwwis-dubc1-vip48.adobe.comwwis-dubc1-vip49.adobe.comwwis-dubc1-vip50.adobe.comwwis-dubc1-vip51.adobe.comwwis-dubc1-vip52.adobe.comwwis-dubc1-vip53.adobe.comwwis-dubc1-vip54.adobe.comwwis-dubc1-vip55.adobe.comwwis-dubc1-vip56.adobe.comwwis-dubc1-vip57.adobe.comwwis-dubc1-vip58.adobe.comwwis-dubc1-vip59.adobe.comwwis-dubc1-vip60.adobe.comwwis-dubc1-vip61.adobe.comwwis-dubc1-vip62.adobe.comwwis-dubc1-vip63.adobe.comwwis-dubc1-vip64.adobe.comwwis-dubc1-vip65.adobe.comwwis-dubc1-vip66.adobe.comwwis-dubc1-vip67.adobe.comwwis-dubc1-vip68.adobe.comwwis-dubc1-vip69.adobe.comwwis-dubc1-vip70.adobe.comwwis-dubc1-vip71.adobe.comwwis-dubc1-vip72.adobe.comwwis-dubc1-vip73.adobe.comwwis-dubc1-vip74.adobe.comwwis-dubc1-vip75.adobe.comwwis-dubc1-vip76.adobe.comwwis-dubc1-vip77.adobe.comwwis-dubc1-vip78.adobe.comwwis-dubc1-vip79.adobe.comwwis-dubc1-vip80.adobe.comwwis-dubc1-vip81.adobe.comwwis-dubc1-vip82.adobe.comwwis-dubc1-vip83.adobe.comwwis-dubc1-vip84.adobe.comwwis-dubc1-vip85.adobe.comwwis-dubc1-vip86.adobe.comwwis-dubc1-vip87.adobe.comwwis-dubc1-vip88.adobe.comwwis-dubc1-vip89.adobe.comwwis-dubc1-vip90.adobe.comwwis-dubc1-vip91.adobe.comwwis-dubc1-vip92.adobe.comwwis-dubc1-vip93.adobe.comwwis-dubc1-vip94.adobe.comwwis-dubc1-vip95.adobe.comwwis-dubc1-vip96.adobe.comwwis-dubc1-vip97.adobe.comwwis-dubc1-vip98.adobe.comwwis-dubc1-vip99.adobe.com -f -COURSERAcoursera-for-business.orgcoursera.community coursera.help coursera.org -: - SOFTETHER softether.orgsoftether-download.com - -DOI doi.org doi.info - -RIOThistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn -cnleagueoflegends.co.krleagueoflegends.comleagueoflegends.infoleagueoflegends.krleagueoflegends.netleagueoflegends.orgleagueoflegendsscripts.comleaguesharp.infoleaguoflegends.comlearnwithleague.comlol-europe.com lolclub.org lolespor.comlolesports.com lolfanart.net -lolpcs.com lolshop.co.kr lolstatic.comlolusercontent.com -lpl.com.cn -cn pvp.net -pvp.tv ulol.comlolstatic-a.akamaihd.netplayvalorant.comriotforgegames.comruinedking.comconvrgencegame.com - -WTO wto.org - -ZEETV -z5.app -z5.com zee5.com zee5.in zee5.tvzeebioskop.com zeetv.co.uk  zeetv.com  zeeuk.com -) -NPMJS  npmjs.com npm.community -i -RAZER  razer.comrazersupport.com razerzone.com razerzone.jprespawnbyrazer.com -0 - COWTRANSFER c-t.workcowtransfer.com -4 -CSIS csis.orgcsis-prod.s3.amazonaws.com -, - -HOTJAR-ADSstatic.hotjar.com -ads -! - -MASTERCARD mastercard.ae mastercard.at mastercard.az mastercard.ba mastercard.be mastercard.bg mastercard.by mastercard.ca mastercard.ch mastercard.cl mastercard.cn -cnmastercard.co.idmastercard.co.ilmastercard.co.inmastercard.co.jpmastercard.co.kemastercard.co.krmastercard.co.nzmastercard.co.thmastercard.co.ukmastercard.co.vemastercard.co.zamastercard.commastercard.com.armastercard.com.aumastercard.com.bhmastercard.com.brmastercard.com.bzmastercard.com.cn -cnmastercard.com.comastercard.com.cymastercard.com.egmastercard.com.gemastercard.com.gtmastercard.com.hkmastercard.com.kwmastercard.com.lbmastercard.com.mxmastercard.com.mymastercard.com.ngmastercard.com.pemastercard.com.phmastercard.com.samastercard.com.sgmastercard.com.trmastercard.com.twmastercard.com.vemastercard.com.vn mastercard.cz mastercard.de mastercard.dk mastercard.es mastercard.eu mastercard.fi mastercard.fr mastercard.gr mastercard.hr mastercard.hu mastercard.iemastercard.inc mastercard.it mastercard.jo mastercard.ke mastercard.kz mastercard.lu mastercard.md mastercard.my mastercard.nl mastercard.no mastercard.om mastercard.pl mastercard.pt mastercard.qa mastercard.ro mastercard.rs mastercard.ru mastercard.se mastercard.si mastercard.sk mastercard.ua mastercard.usareyoucreditwise.comborderlessprepaid.combranchportal.com idservice.incinclusivegrowthscore.com findacard.com mastercad.commastercard-email.commastercardacademy.commastercardadvisors.commastercardcenter.commastercardcenter.org*&mastercardcenterforinclusivegrowth.orgmastercardconnect.commastercardezsavings.commastercardidtheftalerts.commastercardrestaurant.commastercardservices.commastercardworldwide.commasterpassteststore.commasterintelligence.commcpeaceofmind.commyaccountglobalcash.commycardbenefits.comonedinesfree.com paypass.netpieceofplastic.compredictivetechnologies.com priceless.com pricelessmarketingengine.comsbitravelcard.comshoppercentre.com!smartcommunitiescoalition.com!smartcommunitiescoalition.org startpath.comtaptotokyo.comtasteofpremium.jptravelcontroller.comwwwpaypass.combecomeindex.comcashpassport.cacashpassport.co.zacashpassport.comcashpassport.com.brcashpassport.netcorporatecashpassport.comicashpassport.com.mxintercamcashpassport.com.mx!multicurrencycashpassport.comshinhangmc.commastercardbiz.camastercardbiz.com!mastercardbusinessnetwork.com -nab.com.aunabtravellercard.com.au 53world.com53worldsweeps.comlovethiscity.commastercardmoments.compahabicilemezsurprizler.com priceless.compriceless.com.cn -cn priceless.orgpricelessafrica.compricelessarabia.compricelessaruba.compricelessbeijing.cn -cnpricelessbeijing.com#pricelessbeijing.com.cn -cnpricelesshongkong.compricelesshonolulu.compricelesspick.compricelesssantiago.compricelesssydney.compricelesssurprises.compricelesstoronto.capricelesstv.com simplify.comsimplifycommerce.comcashpassportglobe.comgwktravelex.nl travelex.be travelex.bh travelex.catravelex.co.intravelex.co.jptravelex.co.nztravelex.co.uk travelex.comtravelex.com.autravelex.com.cn -cntravelex.com.hktravelex.com.mytravelex.com.omtravelex.com.tr travelex.de travelex.fr travelex.it travelex.qatravelexae.comtravelexch.comtravelexmoneycard.combidvestbank.co.zaworldcurrencycard.co.zanab.demdex.net&"nationalaustraliaban.tt.omtrdc.net - -CATEGORY-BANK-CN -boc.cnbankofchina.combocaviation.com  boccfc.cn  bocgi.com bocgins.com  bochk.com bocichina.com bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn ccb.com -ccbfund.cnccbfutures.comccbintl.com.hkccbleasing.com ccbseoul.comccbtrust.com.cn cignacmb.comcmb-leasing.com cmbchina.com cmbi.com.hkcmbwinglungbank.com cmfchina.comicbc icbc-ltd.com icbc-uk.com icbc-us.com -icbc.co.id icbc.com.cn icbc.com.mo icbc.com.pe icbc.com.sg icbcasia.com icbcbr.com.bricbclondon.com -icbcmy.comicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com icbccs.com.cn  95516.com unionpay.comunionpayintl.comunionpaysecure.com abchina.com bankcomm.combankofbeijing.com.cn bosc.cn -bsb.com.cn ccb.comcgbchina.com.cn -cib.com.cncitibank.com.cn cmbc.com.cn hsbc.com.cn -hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com -) -DRIBBBLE drbl.in dribbble.com -( -LTN -ltn.com.tw yes123.com.tw -h -51JOB  51job.com 51jobcdn.comyingjiesheng.comyingjiesheng.netzhiding.com.cn -. -XDAxda-developers.com xda-cdn.com - -PKOPLINK pkoplink.com - -WARROOM warroom.org -9 -YOUZAN -youzan.com yzcdn.cn youzanyun.com - -AOMEDIA aomedia.org -% - -CHINAPOWERchinapower.csis.org -O -COSTCOcostco-static.com -costco.comcostcobusinessdelivery.com - -DENO  deno.land - -AAEX aaex.uk - -AP -ap.org -apnews.com -T - DLERCLOUD dlercloud.com dlercloud.org dlercloud.me dleris.best -j - PLAYSTATION playstationplaystation.complaystation.net sonyentertainmentnetwork.com -( -CHINAZ -chinaz.com -chinaz.net - -IEEE ieee.org ieee.tvtryengineering.org ieee-ccnc.org ieee-ecce.org ieeemce.orgstandardsuniversity.orgieee-region6.org ieee.ca ieeer10.org -ieeer5.org -ieeer8.org ieeeusa.orgieeefoundation.orgieee-into-focus.org ieee-vics.org ieeeday.orgdatasheets360.comglobalspec.com ieee-isto.orgtechstreet.com computer.org -comsoc.org embs.org emcs.org grss-ieee.org ieee-aess.org ieee-cas.org ieee-ceda.orgieee-edusociety.org ieee-ies.org ieee-ims.org ieee-npss.org ieee-pels.org ieee-pes.org ieee-ras.orgieee-sensors.org ieee-tems.org ieee-uffc.org ieeeaps.org ieeecsc.org ieeecss.org ieeedeis.orgieeemagnetics.org ieeenano.org ieeeoes.org ieeesmc.orgieeesystemscouncil.org  itsoc.org mtt.orgphotonicssociety.orgsignalprocessingsociety.orgtechnologyandsociety.org vtsociety.org - -REMIREPO remirepo.net - -91PORN -91porn.com - - CHINAUNICOM  10010.com 10010.com.cnchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com  wo.com.cn - -BITSTAMP bitstamp.net -E -ETHEREUM -devcon.orgethereum.foundation ethereum.org - -JUEJIN  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com -# - MOPUB-ADS mopub.com -ads - -NIKEnikeair-nike-shoes.com airmax360.combeijingnike.combetternike.combuynikechina.comcheap-nike.comcheapnikedunks.comcheapnikeoutlet.comclassicnike.comcnnikebrand.comcustomnikeshoes.com easynike.com -eenike.comfashionnike.com finenike.comfoampositeshoes.comgoldnikeclub.com -gonike.comhandbags-nike.comhightopnikes.com -idnike.cominikesneakers.com just-do-it.cn -cn justdoit.uskicksnike1.comkidsnikeshoes.com -mynike.comnike-air-max.comnike-dunksb.com nike-fr.com nike-org.com nike-shox.cn -cn nike-uk.com nike-us.com nike-usa.com nike.cinike.cn -cn nike.com nike.com.br nike.com.hk nike.gy nike.hk  nike.shop nike.usnike.xn--hxt814e nike0594.com -nike23.comnikeadidas.comnikeairhuarache.comnikeairmax.comnikeairmaxs.comnikeairmaxshoes.comnikeairrift.com nikeasia.comnikeaustralia.com nikeaw77.com  nikeb.com nikebbn.comnikebetrue.comnikebetterworld.cn -cnnikebetterworld.com"nikebetterworld.com.cn -cnnikebetterworld.infonikebetterworld.netnikebetterworld.org nikebiz.info nikebuy.com -nikeby.com nikecdn.comnikecompany.comnikeconfluence.com nikechina.cn -cnnikechosen.com nikecloud.com nikeclub.com nikecraft.com nikedawn.com nikedunks.netnikedunksshoes.com nikeelite.comnikefactorystore.com nikefind.com nikefirm.comnikefoamposites.comnikefoampositeshoes.comnikefootballcleats.comnikefootballgloves.comnikefootballjersey.comnikefoundation.org -nikefr.comnikefrance.com nikefree.comnikefreeshoes.comnikefuelband.comnikegadgets.comnikegenealogy.com nikegolf.ca nikegolf.cn -cn nikegrid.com nikehelp.comnikehightops.comnikehyperdunk.com nikeid.cn -cn nikeid.com.cn -cnnikeidshoes.com nikeinc.comnikeinc.com.cn -cnnikeincchemistry.comnikeinstock.com -nikeit.comnikeitalia.com nikeitaly.com -nikekd.com nikekid.com -nikelab.cn -cnnikelab.com.cn -cn nikelink.comnikeliuxiang.cn -cnnikeliuxiang.comnikeliuxiang.com.cn -cn nikelives.comnikelunarglide.com nikemall.cn -cnnikemall.com.cn -cnnikemarketing.com nikenews.com -niken7.comnikeonlinestore.comnikeoutletstore.comnikeoutletstores.comnikepioneer.com nikeplus.com nikeplus.org nikepress.com nikeprice.comnikeproduct.comnikepromax.comnikeresponsibility.comnikereuseashoe.comnikerunclub.cn -cnnikerunclub.com.cn -cnnikerunner.comnikerunning.com.cn -cnnikerunningshoes.com -nikesb.comnikesbdunks.netnikeseason.comnikeselling.comnikesellorder.comnikeshoemarket.comnikeshoes-store.comnikeshoes21.comnikeshoes4u.comnikeshoescity.comnikeshoesgroup.comnikeshoesinc.comnikeshoesmarket.comnikeshoesretro.comnikeshoeswon.comnikeshoponline.comnikeshoxsale.com nikesku.comnikesnowboarding.comnikesoccercleats.comnikesportswear.comnikestares.com nikestore.cn -cn nikestore.comnikestore.com.aunikestyles.com nikeswim.comniketaiwan.netniketracking.comniketradeweb.comniketrainer.comniketrainers.comniketraining.com nikeusa.com nikewear.com  nikey.com nikezoom.com nke6.comoutletnike.com runnike.comrunningnike.comsale-nikeshoes.comstatic-nike.com swoo.sh -swoosh.com  swoosh.tvthedailysnkr.comverygoodnike.comwomensnikeshox.comxn--74q035i.xn--hxt814e - -TWISTERtwister.net.co -( -UCLOUD  ucloud.cn ufileos.com - -BBGWATCH bbgwatch.com - -BETHESDA -beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.com - -EVERNOTE evernote.com - -LINOTYPE linotype.com -: -POLYMERpolymer-project.orgpolymerproject.org -( -CAIJINGLENGYANcaijinglengyan.com - -DOGECOIN dogecoin.com - -GUOKR  guokr.com -C - SCIENCEDIRECTsciencedirect.comsciencedirectassets.com - - LARACASTS laracasts.com -Q -NEWSMAXandysparis.com newsmax.com -newsmax.in newsmaxtv.com -& - CHINADECODINGchinadecoding.com -H -COOLAPK coolapk.comcoolapkmarket.comcoolapkmarket.net - -DIGICERT digicert.comdigitalcertvalidation.com freessl.com geotrust.com rapidssl.com -thawte.com  thawte.de  thawte.fr -* -JAVWIDE -javwide.tv javwide.com - -XART  x-art.com - -COINBASE coinbase.com - -MANORAMAmalayalamanorama.com manorama.commanoramanews.commanoramaonline.commanoramayearbook.inonmanorama.com radiomango.fm  theman.in -theweek.invanitaonline.com -vanitha.invanithaveedu.com -^ -SWIFTappleswift.com  swift.org -swiftui.cn -cnswiftui.com.cn -cn - - NBCUNIVERSALdreamworks.com cnbc.com -cnbcfm.com  msnbc.com -nbc.co nbc.com nbcnews.comnbcolympics.com nbcsports.com -nbcuni.comnbcuniversal.com s-nbcnews.com peacocktv.comuniversalorlando.comuniversalpictures.com&"universalpicturesinternational.com!universalstudioshollywood.com - - -SF-EXPRESS  feng1.comrongechain.comsf-airlines.comsf-cityrush.comsf-express.comsf-financial.com sf-saas.comsf-tech.com.cn sfcar.hk sffix.cn sfgy.org - -SUPERSONIC-ADSsupersonic.com -adssupersonicads.com -ads -ssacdn.com -ads)supersonicads-a.akamaihd.net -ads - -XIAOMI -mi.com -mi-img.com  mifile.cn miui.com -miwifi.com  xiaomi.cn -xiaomi.com -xiaomi.netxiaomiyoupin.com -2 -ALIBABA alibaba -alipay -taobao tmall a.alimama.cn -adsacjs.aliyun.com -adsadash.m.taobao.com -ads!adashbc.m.taobao.com -ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com -ads adashx.m.taobao.com -ads$adashx4ae.ut.taobao.com -ads#adashx4yt.m.taobao.com -ads#adashxgc.ut.taobao.com -adsadsh.m.taobao.com -adsafp.adchina.com -adsafp.alicdn.com -ads agoodm.m.taobao.com -ads#agoodm.wapa.taobao.com -ads alipaylog.com -adsamdc.alipay.com -adsamdc.m.taobao.com -ads api.wapa.taobao.com -ads#api.waptest.taobao.com -adsapoll.m.taobao.com -ads#appdownload.alicdn.com -adsatanx.alicdn.com -adsatanx2.alicdn.com -adscbu01.alicdn.com -adscdn0.mobmore.com -adsclick.aliyun.com -ads&click.mz.simba.taobao.com -adscm.ipinyou.com -ads cm.mlt01.com -ads!dsp.simba.taobao.com -adserr.taobao.com -adsex.mobmore.com -ads ex.puata.info -ads!fav.simba.taobao.com -ads$feedback.whalecloud.com -adsff.win.taobao.com -ads fm.p0y.cn -adsg.click.taobao.com -ads -g.tbcdn.cn -adsgma.alicdn.com -adsgtms01.alicdn.com -adsgtms02.alicdn.com -adsgtms03.alicdn.com -adsgtms04.alicdn.com -adshydra.alibaba.com -ads'hz.pre.tbusergw.taobao.net -ads#hz.tbusergw.taobao.net -ads i.ipinyou.com -adsinit.phpwind.com -ads!intl.wapa.taobao.com -ads$intl.waptest.taobao.com -ads"jxlog.istreamsche.com -adslog.umtrack.com -adsm.intl.taobao.com -adsm.simba.taobao.com -adsmatch.p4p.1688.com -ads%material.istreamsche.com -ads mlt01.com -ads&nbsdk-baichuan.alicdn.com -ads&nbsdk-baichuan.taobao.com -ads"osfota.cdn.aliyun.com -ads osupdate.aliyun.com -ads&osupdateservice.yunos.com -ads%pindao.huoban.taobao.com -adspush.wandoujia.com -adsre.m.taobao.com -ads re.taobao.com -ads&redirect.simba.taobao.com -adsrj.m.taobao.co -adsrj.m.taobao.com -adssdkinit.taobao.com -adsshow.re.taobao.com -adssimaba.taobao.com -adssimba.m.taobao.com -ads!srd.simba.taobao.com -adsstats.ipinyou.com -ads strip.taobaocdn.com -ads$tanxlog.istreamsche.com -adstejia.taobao.com -adstemai.taobao.com -ads!tns.simba.taobao.com -ads tongji.linezing.com -ads tvupgrade.yunos.com -adstyh.taobao.com -adsuserimg.qunar.com -adsw.m.taobao.com -adsyiliao.hupan.com -adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com -alicdn.com alidayu.com -alidns.com alikunlun.comaliyun-inc.comaliyun-iot-share.com -aliyun.com aliyuncdn.com aliyuncs.com hichina.comica-alliance.org kunlunaq.com kunlunar.com kunlunca.com kunluncan.com kunlunea.com kunlungem.com kunlungr.com kunlunhuf.com kunlunle.com kunlunli.com kunlunno.com kunlunpi.com kunlunra.com kunlunsa.com kunlunsc.com kunlunsl.com kunlunso.com kunlunta.com kunlunvi.com kunlunwe.com mxhichina.com ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.to -ele.me elemecdn.com eleme.cnteambition.comteambition.netteambitionapis.com mobmore.com  umeng.comumengcloud.com  umsns.com umtrack.com -uyunad.comwhalecloud.comalog.umeng.com -ads alog.umengcloud.com -ads -w.cnzz.com -ads 25pp.com  56che.com  95095.com 9game.cn -aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk -aliimg.com -alikmd.com alimama.com alimebot.com -alimei.com alios.cn -alipay.comalipayobjects.com aliplus.comaliresearch.com alisoft.com alisports.com alitianji.comaliunicorn.com -aliway.com aliwork.com alixiaomi.comalizhaopin.com alyms.cn -asczwa.comasczxcefsv.com -asmlink.cn atatech.org -b2byao.com  bazai.com  bcvbw.com  cheng.xin cloudeagle.cn damai.cn dayu.com -dfkhgj.com doctoryou.ai doctoryou.cn dongting.com -dratio.com emas-poc.com -gongyi.xin ialicdn.com iconfont.cn -ics.design -jhgtgb.com -kanbox.com -lazada.comliangxinyao.com m-now.cn -maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.comxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com -zuodao.comaliexpress.com aliexpress.ru sm.cn cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com -hemaos.com hemashare.cn shyhhema.com 1688.com etao.com juhuasuan.comlingshoujia.com -mashort.cn pailitao.com -taobao.com -taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai alitrip.com  feizhu.cn -feizhu.com -fliggy.com  fliggy.hk -iuynfg.com amap.com amapauto.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net -, - BYTEDANCE-ADSmcs.snssdk.com -ads - -ESPN espn.com espn.net espncdn.com -espnqa.com watchespn.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net -W -HAINANAIRLINEShainanairlines.com hnacargo.com  hnair.com 10044.cn - - -CHOCOLATEYchocolatey.org -^ -CTEXCEL -ctexcel.ca ctexcel.comctexcel.com.hk -ctexcel.fr -ctexcel.us - -FREENODE freenode.net -1 -JINSHUJU jinshuju.netjinshujucdn.com -A - PINDUODUO -pddpic.com pinduoduo.com yangkeduo.com - - -APPLEDAILYappledaily.comappledaily.com.hkappledaily.com.tw appledaily.hkapplefruity.comapplehealth.com.hk -atnext.combestmallawards.com deluxe.com.hk eracom.com.tw next.hknextdigital.com.hknextdigital.com.twnextfilm.com.hknextmag.com.tw nextmedia.comnextmedia.com.tw nextmgz.comnextplus.com.hk nexttv.com.twnextwork.com.hknextwork.com.tw nextwork.hk nextwork.tw nxtdig.com.hk nxtdig.com.tw omoplanet.com privilege.hk privilege.tw sharpdaily.tw tomonews.nettwnextdigital.com - - EASTMONEY1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.com emsec.hk guba.com.cn - -JUPYTER jupyter.org - - PACKAGIST packagist.org - -PCRE pcre.org - - PHANTOMJS phantomjs.org - -MINISOloveminiso.com.br miniso-au.com miniso-bh.com miniso-np.com miniso-nz.com  miniso.by  miniso.ca miniso.cn -cn  miniso.co miniso.co.id miniso.co.tz -miniso.com miniso.com.es miniso.com.gr miniso.com.mx miniso.com.pl miniso.com.py miniso.com.tr  miniso.ge  miniso.ie  miniso.jp  miniso.ma  miniso.my  miniso.pe  miniso.pk  miniso.ua  miniso.uz minisohome.cn -cnminisoindia.comminisojordan.comminisokorea.comminisolife.co.zaminisothailand.comminisovietam.vn minsio.cn -cn myminiso.com - -PINGPE ping.pe - -ZDNS zcmbc.com.cn zdns.cn zdns.net.cn zdns.org.cn zdnscloud.biz zdnscloud.cn zdnscloud.comzdnscloud.com.cnzdnscloud.info zdnscloud.netzdnscloud.net.cnzdnscloud.org.cn -A -ACERacer-group.com acer.com acer.com.cn -cn - - BITWARDEN bitwarden.com -V - JETBRAINS jetbrains.com jetbrains.net datalore.iokotlinlang.org - -PINCONG pincong.rocks -- - PUBMATIC-ADSads.pubmatic.com -ads - -WEVERSE -weverse.io -/ -ADGUARDadguard-vpn.com adguard.com -5 -IMDB imdb.com imdb.tomedia-imdb.com - -OPENVPN openvpn.net - -TESLA solarcity.comtesla.cn -cn  tesla.com tesla.com.cn -cnteslamotors.cn -cnteslamotors.comteslamotors.com.cn -cntesla-cdn.thron.cn -cntesla-cdn.thron.com -< - BITSQUARE bisq.io bisq.network bitsquare.io -% -DEMOCRACYEARTHdemocracy.earth -" -NIST nist.gov time.gov - -PRIVATElan localdomain example invalid  localhosttest local  home.arpa ^[^.]+$router.asus.comlocalhost.sec.qq.comlocalhost.ptlogin2.qq.commsftconnecttest.com - - -XUEYUANJUNxueyuanjun.com - -CATEGORY-VPNSERVICES 928.plus -zind.cloud aaex.uk amytele.com -ark.tobaicaonetwork.com bighead.groupblinkload.zone boslife.biz boslife.net  cloudn.me  conair.me cordcloud.org ctyun.online -cylink.procylink0122.icu dlercloud.com dlercloud.org dlercloud.me dleris.best duyaoss.com duyaossr.com geph.io hitun.ioxn--90wwvt03e.comjustmysocks.netjustmysocks1.netjustmysocks2.netjustmysocks4.net  maying.comocloudplus.com  mray.club muncloud.dog n3ro.lol n3ro.net n3ro.wtf nexitally.comnexitallysafe.com nexitcore.com paofu.cloud paofuyun.me renzhe.cloudshadowsocks.comshadowsocks.nlsquirrelvpn.comsquirrelgroup.net -ssplive.pwairport-gov-cn.comcnix-gov-cn.comxn--d4ty0ojsqzfd.com -ssrpass.pwstc-server.com surflite.co surflite.net vilavpn.com vilavpn.xyz vilavpn1.xyz vilavpn2.xyz vilavpn3.xyz vilavpn4.xyz vilavpn5.xyz vilavpn6.xyz vilavpn7.xyz -u -CREATIVECOMMONS ccstatic.orgcreativecommons.orgcreativecommons.engineeringlicensebuttons.net -B -DISQUS -disqus.com disquscdn.comdisqusservice.com - -NYTIMES nyt.com nyt.net nytchina.com nytcn.me  nytco.com nyti.ms nytimes.com nytstyle.comtimestalks.com - -9TO59to5google.com 9to5mac.com9to5terminal.com 9to5toys.com dronedj.com electrek.cospaceexplored.com -U - MICROSOFT azure-dns.comazure-dns.info azure-dns.net azure-dns.orgazure-mobile.netazure-sphere.comazure-test.netazure.cn -cn  azure.com  azure.netazurecomcdn.netazurecontainer.ioazurecosmos.netazurecosmosdb.comazurecosmosdb.infoazurecosmosdb.netazuredatabricks.netazuredevopslaunch.comazuredigitaltwin.comazuredigitaltwins.comazuredigitaltwins.netazuredns-prd.infoazuredns-prd.orgazureedge-test.net azureedge.netazureiotcentral.comazureiotsolutions.comazureiotsuite.comazureplanetscale.infoazureplanetscale.netazureserviceprofiler.comazuresmartspaces.netazurestackvalidation.comazurewebsites.netchinacloudapi.cn -cnchinacloudapp.cn -cnchinacloudsites.cn -cn cosmosdb.info cosmosdb.net devopsms.com gotcosmos.commicrosofteca.commicrosoftiotcentral.comserverlesslibrary.nettryfunctions.comwindowsazure.cn -cnwindowsazure.comazure.microsoft.com"azuremarketplace.microsoft.combing bing.com bing.com.cn -cn bing.net bingads.combingagencyawards.combingapistatistics.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com -dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.com cn.bing.com -cn cn.bing.net -cn ditu.live.com -cnbj1.api.bing.com -cnemoi-cncdn.bing.com -cn atom.io  npmjs.com npm.communitydependabot.com -git.io github.blog -github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubstatus.comgithubusercontent.com/+github-avatars.oss-cn-hongkong.aliyuncs.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.comadaptivecards.ioapi-extractor.com -apisof.net appcenter.ms -blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com -jwt.ms microbit.orgmicrosoftadc.commicrosoftgamestack.commicrosoftiotinsiderlabs.commicrosoftreactor.cn -cn#microsoftreactor.com.cn -cnmicrosoftreactor.infomicrosoftreactor.netmicrosoftreactor.orgmicrosoftsilverlight.commicrosoftsilverlight.orgmicrosoftsilverlight.netmicrosoftsqlserver.com  mmdnn.commono-project.com msdn.commsinnovationchallenge.commspairlift.commsropendata.com  nuget.org nugettest.orgopentranslatorstothings.orgposhtestgallery.compwabuilder.comreactorms.com.cn -cn -sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io xamarin.comdeveloper.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.netmicrosoftnews.ccmicrosoftnews.cn -cnmicrosoftnews.commicrosoftnews.netmicrosoftnews.orgmicrosoftnewsforkids.commicrosoftnewsforkids.netmicrosoftnewsforkids.orgmicrosoftnewskids.commicrosoftnewskids.netmicrosoftnewskids.org msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com -beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com -mojang.comforzamotorsport.netforzaracingchampionship.com forzarc.comorithegame.comrenovacionxboxlive.comtellmewhygame.com xbox.co xbox.com xbox.eu xbox.org -xbox360.co xbox360.com -xbox360.eu xbox360.org -xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn -cn xboxlive.com -xboxone.co xboxone.com -xboxone.euxboxplayanywhere.comxboxstudios.com -xbx.lv  microsoft azure hotmail -office skype windowsxbox microsoft.az microsoft.be microsoft.by microsoft.ca microsoft.cat microsoft.ch microsoft.cl microsoft.com microsoft.cz microsoft.de microsoft.dk microsoft.ee microsoft.es microsoft.eu microsoft.fi microsoft.ge microsoft.hu microsoft.io microsoft.is microsoft.it microsoft.jp microsoft.lt microsoft.lu microsoft.lv microsoft.md microsoft.pl microsoft.pt microsoft.red microsoft.ro microsoft.rs microsoft.ru microsoft.se microsoft.si microsoft.tv microsoft.ua microsoft.uz microsoft.vnfemalefounderscomp.com -m12.vc -aka.msankarazirvesi2018.comapplicationinsights.ioapplicationinsights.net aria.ms asp.net aspnetcdn.com -binads.com bluehatil.combrazilpartneruniversity.com breakdown.mecentralvalidation.com -ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.com docs.com dynamics.com efproject.netazuredigitaltwin.comfasttrackreadysupport.comfluidpreview.comgameuxmasterguide.com -gears5.com gearspop.comgearstactics.com -gfx.ms -gigjam.com hololens.com -hotmail.co hotmail.com -hotmail.eu hotmail.net hotmail.orghummingbird.ms -ie8.co ie9.com ie10.com ie11.cominternetexplorer.cointernetexplorer.com imaginecup.pl -ingads.comintunewiki.comiotinactionevents.com -kidgrid.tvlatampartneruniversity.com live.com live.com.au live.eu live.netlivingyourambition.com makecode.orgmanagedmeetingrooms.commeetfasttrack.commeetyourdevices.com mepn.commicrosoft-int.commicrosoft-ppe.commicrosoft-sap-events.commicrosoft-sbs-domains.commicrosoft-smb.cn -cnmicrosoft365.commicrosoftaccountguard.commicrosoftads.commicrosoftadvertising.com*µsoftadvertisingregionalawards.commicrosoftaffiliates.commicrosoftcloud.commicrosoftcloudworkshop.com"microsoftcommunitytraining.commicrosoftedge.commicrosofthouse.commicrosofthouse.netmicrosoftinternetsafety.netmicrosoftlatamaitour.commicrosoftlinc.commicrosoftonline-p.commicrosoftonline.com!microsoftpartnercommunity.commicrosoftready.commicrosoftsiteselection.commicrosoftstore.commicrosoftstore.com.hkmicrosoftstream.commicrosoftteams.commicrosofttradein.commicrosofttranslator.commicrosoftuwp.commomentumms.commorphcharts.commpnevolution.comms-studiosmedia.comms365surfaceoffer.com  msads.net msauth.cn -cn -msauth.netmschallenge2018.com -msecnd.net -msedge.net  msft.info msft.net msftauth.cn -cn msftauth.netmsfteducation.ca msftnet.orgmsgamesresearch.com -msocdn.com -msocsp.com msturing.orgmsudalosti.commymicrosoft.comnextechafrica.net nxta.orgo365weve-dev.como365weve-ppe.com o365weve.com -office.com -office.net office365.com onenote.com onenote.net onestore.msopticsforthecloud.netoutingsapp.com outlook.com passport.net -pixapp.netpowerappscdn.netpowerautomate.com powerbi.compowershellgallery.comprojectmurphy.netprojectsangam.com -pxt.ios-microsoft.com  s-msn.com sfbassets.com sfbassets.net -sfx.ms sharepoint.cn -cnsharepoint.comsharepointonline.com  skype.com  skype.netskypeassets.comskypeassets.net staffhub.mssuccesswithteams.com surface.com sway-cdn.com sway.comsysinternals.comtailwindtraders.com -techhub.ms tfsallin.nettrafficmanager.nettranslatetheweb.comunlocklimitlesslearning.com -userpxt.iovideobreakdown.comvideoindexer.aivirtualearth.net vsallin.net -wbd.ms what-fan.netwindows-int.net windows.com windows.net -windows.nl windows8.hkwindowscommunity.netwindowsmarketplace.comwindowsphone-int.comwindowsphone.comwindowssearch.comwindowsupdate.com -winhec.com -winhec.net -yammer.comcdn.office.net -cn(dl.delivery.mp.microsoft.com -cn&download.windowsupdate.com -cn'bg.v4.a.dl.ws.microsoft.com -cn(bg4.v4.a.dl.ws.microsoft.com -cn2&cdn.marketplaceimages.windowsphone.com -cn cn.windowssearch.com -cn#ctldl.windowsupdate.com -cn#developer.microsoft.com -cndocs.microsoft.com -cn"download.microsoft.com -cn/#download.visualstudio.microsoft.com -cnfs.microsoft.com -cn(msgr.dlservice.microsoft.com -cn, msgruser.dlservice.microsoft.com -cn#officecdn.microsoft.com -cn&qh.dlservice.microsoft.com -cnsdx.microsoft.com -cn/#silverlight.dlservice.microsoft.com -cn, slupdate.dlservice.microsoft.com -cn, storeedgefd.dsx.mp.microsoft.com -cn&wl.dlservice.microsoft.com -cn&wscont1.apps.microsoft.com -cn&wscont2.apps.microsoft.com -cnwww.microsoft.com -cn&xb.dlservice.microsoft.com -cn/+img-prod-cms-rt-microsoft-com.akamaized.netimg-s-msn-com.akamaized.netmwf-service.akamaized.net)%officecdn-microsoft-com.akamaized.net3/statics-marketingsites-eus-ms-com.akamaized.net40statics-marketingsites-wcus-ms-com.akamaized.net -g - READTHEDOCSreadthedocs-hosted.comreadthedocs.comreadthedocs.ioreadthedocs.org -7 -VANCL  vancl.com vanclimg.com  vcimg.com - -B3LOG  b3log.org - -MACPORTS macports.org - - PINTEREST -pin.it -pinimg.com pinterest.at pinterest.be pinterest.ca pinterest.ch pinterest.cl pinterest.copinterest.co.atpinterest.co.inpinterest.co.krpinterest.co.nzpinterest.co.uk pinterest.compinterest.com.aupinterest.com.bopinterest.com.ecpinterest.com.mxpinterest.com.pepinterest.com.pypinterest.com.uypinterest.com.vn pinterest.de pinterest.dk pinterest.ecpinterest.engineering pinterest.es pinterest.fr pinterest.hu pinterest.id pinterest.ie pinterest.inpinterest.info pinterest.it pinterest.jp pinterest.kr pinterest.mx pinterest.nl pinterest.nz pinterest.pe pinterest.ph pinterest.pt pinterest.ru pinterest.se pinterest.th pinterest.tw pinterest.uk pinterest.vnpinterestmail.com - -YAHOO -flickr -flickr.com -flickr.netstaticflickr.com ads.yahoo.com -adsgemini.yahoo.com -ads ysm.yahoo.com -ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn -cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn -cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hkyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.com -! -FREENETfreenetproject.org -E -HCAPTCHA botstop.com hcaptcha.comhcaptchastatus.com - -ROCKSTARrockstargames.com -rsg.sc1-gamedownloads-rockstargames-com.akamaized.net)%media-rockstargames-com.akamaized.net*&videos-rockstargames-com.akamaized.net -& -SMZDM  smzdm.com -zdmimg.com -< - YYETS-ADS cvnad.com -ads -iyoowi.com -ads - -ICLOUDapple-icloud.cn -cnappleicloud.cn -cnapplemx-icloud.comicloud-apple.cn -cnicloud-content.comicloud-isupport.com  icloud.ch -icloud.com icloud.com.cn -cn  icloud.de  icloud.ee  icloud.fi  icloud.fr  icloud.hu  icloud.ie  icloud.is  icloud.jp  icloud.lv icloud.net.cn -cn  icloud.om -icloud.org  icloud.pt  icloud.ro  icloud.se  icloud.si  icloud.sk  icloud.vn icloudads.neticloudapple.cn -cn icloudbox.neticloudbrowser.net icloude.comicloudhome.comicloudmail.neticloudmusic.net icloudnet.net icloudpay.net icloudo.com -icloudo.de icloudo.net icloudos.de icloudos.neticloudsecure.neticloudsetup.comios-icloud.com -me.com myicloud.net mylcloud.net wwwicloud.com!www-cdn.icloud.com.akadns.net - -OPENSUSE opensuse.org - -VK mvk.com userapi.com  vk-cdn.me -vk-cdn.net vk-portal.net vk.cc -vk.com  vk.design vk.link vk.me vkcache.com vkgo.app -vklive.appvkmessenger.comvkmessenger.app vkontakte.ruvkuseraudio.comvkuserlive.netvkuservideo.comvkuservideo.net -& -XNXX xnxx.com xnxx-cdn.com -~ -NEWSCORP newscorp.com dowjones.com dowjones.iodowjoneson.com wsj.com wsj.net barrons.com - - BLINKLOADblinkload.zone - - HELLOFONT hellofont.cnhellowebfont.com0,hellofontpreview.oss-cn-beijing.aliyuncs.com-)hellowebfonts.oss-cn-beijing.aliyuncs.com - -HEYTEA -heytea.com -P - KUAISHOU-ADS log-sdk.gifshow.com -adswlog.kuaishou.com -ads - - STARBUCKS starbucks.castarbucks.co.uk starbucks.comstarbucks.com.cn -cn starbucks.de starbucks.fr starbucks.ie -6 -4CHAN 4cdn.org  4chan.org 4channel.org - -CATEGORY-MEDIA-CN 36kr.com 36krcdn.com -caixin.com cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn -cctvlib.cncctvlibrary.cncctvlib.com.cncctvlibrary.com.cn -cctvpro.cncctvpro.com.cn  cntvwb.cn gjgbdszt.cngjgbdszt.com.cngjgbdszt.net.cn  ipanda.cn -ipanda.com ipanda.com.cn -ipanda.net livechina.cn livechina.comolympicchannelchina.cn tvcc.cn tvcc.com.cn%!xn--fiq53l6wcx3kp9bc7joo6apn8a.cn%!xn--fiq53l90et9fpncc7joo6apn8a.cn-)xn--fiq53l6wcx3kp9bc7joo6apn8a.xn--fiqs8s%!xn--kprv4ewxfr9cpxcc7joo6apn8a.cn-)xn--kprv4ewxfr9cpxcc7joo6apn8a.xn--fiqs8s zggbdszt.cnzggbdszt.com.cnzggbdszt.net.cnzygbdszt.net.cn chinanews.comchinanews.com.cn -cns.com.cn ecns.cn  dgtle.com geekpark.nethoopchina.com.cn hupu.com hupucdn.com  shihuo.cn coolbuy.com  ifanr.com ifanr.inifanrusercontent.com -ifanrx.com -minapp.com jiemian.comjiemian.com.cn -lancdn.comlandiannews.com  wsoso.com  ifeng.com ifengimg.comphoenixcenter.cn fengedu.comifengweekly.com 6655.com cooldock.com -ithome.com lapin365.com ruanmei.com -saayaa.com win7china.com win8china.com sohu.com -sohucs.com -itc.cn solidot.org  sspai.com tmtpost.com chaindd.com -72whys.com checkzeit.com -tivitv.com tigeek.net.cntmtsmartlife.comtmtsmartrun.com feng.com fengimg.com wfdata.club ynet.cn ynet.com ynet.com.cn aiganggu.comdanjuanfunds.com -imedao.comsnowballsecurities.com -xueqiu.com stcn.comcaijing.com.cn  hexun.com  cnfol.com cnfolimg.com zqrb.cn -nbd.com.cn cnstock.com 21jingji.com  yicai.com  cs.com.cn  ssajax.cn ssimg.cn stockstar.com -jrj.com.cn  jrjimg.cn -cls.cncailianpress.comwallstreetcn.com jianyuweb.com wallstcn.com 10jqka.com.cn thsi.cn -ths123.com -dzh.com.cn  gw.com.cn -yundzh.com - - IQIYI-ADSa.ckm.iqiyi.com -adsad.m.iqiyi.com -ads afp.iqiyi.com -adsc.uaa.iqiyi.com -ads cloudpush.iqiyi.com -ads"cm.passport.iqiyi.com -adscupid.iqiyi.com -ads#emoticon.sns.iqiyi.com -ads!gamecenter.iqiyi.com -ads!hotchat-im.iqiyi.com -adsifacelog.iqiyi.com -adsmbdlog.iqiyi.com -ads msg.71.am -adsmsg.video.qiyi.com -ads msg2.video.qiyi.com -ads#policy.video.iqiyi.com -adsyuedu.iqiyi.com -ads - -SPACEX -spacex.com -c -COMODO -comodo.com comodoca.com comodoca2.com comodoca3.com comodoca4.com -% -MIHOYO -mihoyo.com bh3.com - -XINGRZ  xingrz.me - -CLOUDN  cloudn.me - -GFASHION gfashion.com -+ -MONGODB mongodb.com mongodb.org -H - NEXITALLY nexitally.comnexitallysafe.com nexitcore.com -k - CHEETAHMOBILE cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.com -- -BITFLYER bitflyer.com bitflyer.jp - -GOLANG go-lang.com go-lang.net go-lang.org -go.dev  godoc.org -golang.com -golang.net -golang.org -m -WPS -wps.cn  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn - - APPLE-DEVappleswift.com  swift.org -swiftui.cn -cnswiftui.com.cn -cncalendarserver.orgapple-cloudkit.com cups.orgdeveloper.apple.comdevimages-cdn.apple.comdevstreaming-cdn.apple.comfoundationdb.orgmacosforge.org macruby.com macruby.net macruby.orgapple-mapkit.complaygrounds-cdn.apple.com carekit.orgresearchandcare.orgresearchkit.cn -cnresearchkit.com.cn -cnresearchkit.hkresearchkit.netresearchkit.orgresearchkit.tvservicetalk.io -webkit.org webkitgtk.org wpewebkit.orgwebobjects.com-)appleworldwidedeveloper.hb-api.omtrdc.net)%appleworldwidedeveloper.sc.omtrdc.net#p-events-delivery.akamaized.net - - FFPROFILE ffprofile.com -s - GREATFIREapplecensorship.comfreebrowser.orgfreewechat.com freeweibo.com greatfire.org -( -TAPTAP -tapimg.com -taptap.com - -3TYPE 3type.cn -9 - YCOMBINATORstartupschool.orgycombinator.com -D -YY -duowan.com dwstatic.com -yy.com yystatic.com - -VMWARE -cfblob.comcloudchoose.comcloudvolumes.com -cmpaas.com -cpedge.comcrit-staging.comexperience-vmware.com gemfire.netgeodesummit.com getboxer.com gitstar.com gitstar.net gopivotal.net greenplum.net hwslabs.com immidio.comitfromtheinside.comlatamvmwareforum.compivotalinitiative.comsnapvolumes.com ssdevrd.com vcanedge.com vcloudair.net vfabric.netvidmpreview.com -virsto.com -virsto.net vmglobal.net -vmmark.comvmtestdrive.com vmw.comvmware-cloudmanagement.comvmware-techcenter.comvmware20mosaic.comvmwareausnews.com!vmwarecertificationvideos.comvmwarecloud.comvmwaredemandcenter.comvmwareemeablog.comvmwaregrid.comvmwarehorizon.comvmwareidentity.comvmwarelearning.comvmwarelearningplatform.comvmwarestuff.comvmwareusergroupstore.comvmwareviewpoint.com vmwarevmc.com vmwdemo.com vmwgcomms.comvmwhorizonair.comvmwidm-ads.com -vmwidm.comvmwlabconnect.comvmwlearningplatform.com vmworld.comvmworld2010.comvmworld2013.comvmwsalesrewards.comvmwservices.com -vnware.netwhychoosehorizon.comwhychooseview.comwhychoosevmwareeuc.comwindowsuem.comworkspaceair.com xlstudio.comavinetworks.com -badaas.com bitnami.combitnamiapp.combitnamistudio.comdockerizer.comcloudcredibility.comcloudhealthtech.com cloudlive.comkubeacademy.com kubeapps.com -nyansa.com velocloud.com gopivotal.com heptio.cn -cn -heptio.com aliveipc.com aliveitsm.comaliveprofiler.com alivercm.comaliverewind.com alivertsm.com alivevm.com alivevmax.com alivevue.com vsphere.com vsphere.net air-watch.comairwatchexpress.comairwatchqa.com -getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.net -: -WEIPHONE feng.com fengimg.com wfdata.club -% - -ADJUST-ADS -adjust.com -ads -? -GEETEST geetest.com#geetest.datasink.sensorsdata.cn -" - GETCOMPOSERgetcomposer.org - -MRAY  mray.club -, -JAVAjava java.com java.net - -OONI ooni.org - -TUMBLR -tumblr.com - -UU-CHAT  uug22.com  uug23.com  uug25.com  uug26.com  uug27.com  uuk28.com  uun78.com  uun79.com  uun82.com  uun83.com  uun85.com  uun86.com  uun87.com  uun89.com  uun92.com  uun93.com  uun95.com  uun96.com  uun97.com  uun98.com  uun99.com  uux68.com - -MIAOPAI miaopai.com - - TRUSTWAVE trustwave.com - -VIDEOJS videojs.com - - WIREGUARD wireguard.com -q -CATEGORY-HOSPITAL-CN  fuwai.com pkuh6.cn puh3.net.cnhospital.pku.edu.cnss.bjmu.edu.cn - -EGGHEAD -egghead.io - -FREEBSD freebsd.org - - HASHICORP  consul.io hashicorp.comnomadproject.io  packer.io terraform.io vagrantup.comvaultproject.io - - WORDPRESSvideopress.com w.org wordpress.com wordpress.org wordpress.tv wp-themes.com -wp.com  wpvip.com -^ - APPLE-ADSiadsdk.apple.com -ads iad.apple.com -ads qwapi.com -ads - -JD-ADSads.union.jd.com -ads c-nfa.jd.com -adscps.360buy.com -ads -jzt.jd.com -ads stat.m.jd.com -ads img-x.jd.com -ads - - STREPSILS -cepacol.ca cepacol.com dobendan.degraneodin.com.mx -repsils.no strepsils.at strepsils.ch strepsils.cn -cnstrepsils.co.krstrepsils.co.nzstrepsils.co.zastrepsils.com.arstrepsils.com.brstrepsils.com.cn -cnstrepsils.com.costrepsils.com.austrepsils.com.hkstrepsils.com.phstrepsils.com.tw strepsils.es strepsils.fi strepsils.fr strepsils.hr strepsils.hu strepsils.ie strepsils.net strepsils.pl strepsils.pt strepsils.ro strepsils.ru strepsils.si strepsils.usstrepsilsarabia.com - -DINGTALK ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.to - -JS-ORG -js.org -A -MEIZU flyme.cn meizu.cn  meizu.com  mzres.com - -DEDAO biji.com -ddmogo.com -igetget.cn igetget.com luojilab.com  mogoo.com -sao.cn saolife.com -@ -REUTERS reuters.com -reuters.tvreutersmedia.net - -SOHU-ADSadnet.sohu.com -ads ads.sohu.com -ads!adv-sv-show.focus.cn -ads aty.sohu.com -adsdata.vod.itc.cn -adsepro.sogou.com -ads go.sohu.com -adsgolden1.sogou.com -adsimp.optaim.com -adsinte.sogou.com -adsinte.sogoucdn.com -adslu.sogoucdn.com -ads pv.sohu.com -adstheta.sogoucdn.com -adstrack.sohu.com -adsuranus.sogou.com -adsv2.reachmax.cn -ads)e8aeb8bbdbbd7.cdn.sohucs.com -ads)643108e7617ef.cdn.sohucs.com -ads - - SONYPICTURESimageworks.commotionpictureser.com playshow.ioplayshowtv.comsonyclassics.comsonypictures.comsonypicturesanimation.comsonypicturesmuseum.comsonypicturesstudios.comsonypicturestelevision.com#sonypicturestelevisiongames.com wheelpop.com -wwtbam.comyourfantasybeginsnow.com -Q - CHINANEWS chinanews.comchinanews.com.cn -cns.com.cn ecns.cn -* - -FLURRY-ADSdata.flurry.com -ads -" - HUBBLEPHONEhubblephone.com - -MIRAHEZE miraheze.org - - -ONIONSHAREonionshare.org - - ALJAZEERA -ajplus.net aljazeera.com aljazeera.netpalestineremix.comsarajevopodopsadom.comsrebrenica360.com syhacked.com - -DIDA365 dida365.com - -GITEE  gitee.com - -JINJIANG  jjwxc.net -ҹ -CNcn citic baidu -unicomsohu -xn--fiqs8s -xn--fiqz9s xn--1qqw23a xn--xhq521b xn--8y0a063a xn--6frz82g -xn--fiq64b xn--estv75g xn--vuq861b xn--zfr164b -42r.cn -5566ua.com aurorapush.cn -e0n.cn japps.cn jchat.io -jiguang.cn jmlk.co jpush.cn jpush.io jpushoa.com -jsurvey.cn  jvoice.cn -kc9.cn -n0q.cn pushcfg.com -s0n.cn mobmore.com  umeng.comumengcloud.com  umsns.com umtrack.com -uyunad.comwhalecloud.comalog.umeng.com -ads alog.umengcloud.com -ads -w.cnzz.com -ads bootcss.com -bootcdn.cnphpcomposer.com acadn.cn  acadn.com bbbcdns.com  dlgslb.cn -dlgslb.net  dwion.com fastcdn.comfastcdn.com.cn  flxdns.cn -flxdns.com globalcdn.cn mcadn.cn  tlgslb.cn -tlgslb.com -maoyun.commaoyuncloud.cnmaoyuncloud.com pkoplink.com qingcache.com qingcloud.comstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com -qiniup.com  qnsdk.com  qnssl.com  ucloud.cn ufileos.com  aicdn.com upai.com upaiyun.com  upcdn.net  upyun.com  51cdn.com  8686c.com  cdn30.orgchinanetcenter.com  lxdns.com -lxdns.info  lxdns.org ourdvsss.com speedws.info speedws.org -wangsu.com -wscdns.com wscdns.info -wscdns.org yfcache.com -yfcalc.com yfcloud.com  yfdts.net  yfp2p.net -yfscdn.net yunfancdn.com -boc.cnbankofchina.combocaviation.com  boccfc.cn  bocgi.com bocgins.com  bochk.com bocichina.com bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn ccb.com -ccbfund.cnccbfutures.comccbintl.com.hkccbleasing.com ccbseoul.comccbtrust.com.cn cignacmb.comcmb-leasing.com cmbchina.com cmbi.com.hkcmbwinglungbank.com cmfchina.comicbc icbc-ltd.com icbc-uk.com icbc-us.com -icbc.co.id icbc.com.cn icbc.com.mo icbc.com.pe icbc.com.sg icbcasia.com icbcbr.com.bricbclondon.com -icbcmy.comicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com icbccs.com.cn  95516.com unionpay.comunionpayintl.comunionpaysecure.com abchina.com bankcomm.combankofbeijing.com.cn bosc.cn -bsb.com.cn ccb.comcgbchina.com.cn -cib.com.cncitibank.com.cn cmbc.com.cn hsbc.com.cn -hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com -sse.com.cn sseinfo.com szse.cn cninfo.com.cn ajzq.com avicsec.com  ccnew.com cczq.com cczq.net cfsc.com.cn cfzq.com cgws.comchinalions.comchinastock.com.cn cicc.com -ciccwm.com cindasc.com cjsc.com cnhbstock.com cnht.com.cn csco.com.cn csfounder.com  ctsec.com daton.com.cn  dfham.com dfzq.com.cn dgzq.com.cn dtsbc.com.cn dwjq.com.cn dxzq.net easec.com.cnessence.com.cn ewww.com.cn fcsc.cnfzfinancing.com  gf.com.cn ghsl.cn ghzq.com.cn gjzq.com.cn gkzq.com.cn glsc.com.cn grzq.com gsgh.cn gszq.com gtja.com gtja.com  guodu.com guosen.com.cn gyzq.com.cn hazq.com hczq.com hfzq.com.cn -hlzqgs.comhongtastock.com hrsec.com.cn hsbcqh.com.cn htsc.com.cn  htsec.comhuajingsec.com huajinsc.cn huayingsc.com hx168.com.cn hxzq.cn i618.com.cn  iztzq.com jhzq.com.cnjpmorganchina.com jyzq.cn  jzsec.com kysec.cn lczq.com lhzq.comlongone.com.cnmorganstanleyhuaxin.com mszq.com nesc.cn njzq.com.cnnomuraoi-sec.com -shgsec.com -shhxzq.com shzq.com stocke.com.cn -swhysc.com swsc.com.cn tebon.com.cn tfzq.com  tpyzq.com vanho.cn west95582.com wkzq.com.cn wlzq.cn wxzq.com xcsc.com xsdzq.cn xyzq.com.cn ydsc.com.cn ykzq.com ytzq.com zdzq.com.cn zszq.com -ztfsec.com -zts.com.cn -99fund.com -abc-ca.com avicfund.cn  bdfund.cn -bobbns.com boscam.com.cn -bosera.com ccfund.com.cn cfund108.comchanganfunds.comchinanature.com.cncib-fund.com.cncryuantafund.com -ctfund.com dbfund.com.cn efunds.com.cn fadfunds.comforesightfund.com founderff.com -fsfund.com -ftfund.comfullgoal.com.cn furamc.com.cngalaxyasset.com gefund.com.cngffunds.com.cn  gfund.com gowinamc.com -hffunds.cn hftfund.comhongdefund.com -hsfund.com huaan.com.cn -igwfmc.com  jsfund.cn  jtamc.com mfcteda.commsjyfund.com.cn -nffund.com  ocfund.cnorient-fund.com phfund.com.cnpostfund.com.cn -py-axa.com  swsmu.comtaipingfund.com.cn thfund.com.cntongtaiamc.com ubssdic.com xf-fund.com xqfunds.com  ydamc.com yhfund.com.cn -zhfund.com -zofund.com -5ifund.com -fund123.cn -howbuy.com lufunds.com  zlfund.cn citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk citicsf.com clsa.comcncbinternational.com -csc108.com csci.hk -ecitic.com1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.com emsec.hk guba.com.cn cebbank.com ceblease.com -eb-ind.com ebasset.com ebchina.comebchinaintl.com -ebf.com.cn  ebfcn.com ebfortune.com ebtrust.com ebscn-am.com  ebscn.comeverbright.com  secec.comsunlife-everbright.com -pingan.com pingan.com.cn pingan.com.hk yqb.com taikang.comtaikanglife.comtaikangzhijia.comtkhealthcare.com -58.com  58.com.cn 5858.com  58che.com 58xueche.com -anjuke.comanjukestatic.com chinahr.com -daojia.com diandao.org fang.com  sofun.com soufunimg.com  jxedt.com zhuancorp.comzhuanspirit.comzhuanzhuan.com c-ctrip.com colinker.com ctrip.cn ctrip.co.id ctrip.co.kr ctrip.co.th  ctrip.com ctrip.com.hk ctrip.my ctrip.sg ctripbiz.com ctripbuy.hk ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw izuchebao.com  lvtds.com  shuntu.cn -skysea.com  suanya.cn -suanya.com -tieyou.com -toptown.cn toursbms.com trip.com tripcdn.com -vipdlt.com dangdang.com ddimg.cn -ele.me elemecdn.com eleme.cn  ganji.comganjistatic1.com3.cn  300hu.com -360buy.com 360buyimg.com -360top.com -7fresh.com baitiao.comblackdragon.com  caiyu.comchinabank.com.cn -dao123.comjcloud-cdn.comjcloud-live.comjcloud-oss.com -jcloud.comjcloudcache.com jcloudcs.com jclouddn.com jcloudec.com jcloudlb.comjcloudlive.com jcloudlv.com jcloudoss.com jcloudss.comjcloudstatic.comjcloudvideo.com  jclps.com -jd-app.com  jd-ex.com jd.cn jd.co.th -jd.com jd.hk jd.id jd.ru jdcache.com jdcloud.com jdcloudcs.comjdcloud-api.comjddapeigou.com jddebug.com jddglobal.com jdjinrong.com  jdpay.com jdpaydns.com jdx.com jdwl.comjingdongjinrong.com -jingxi.com -jkcsjd.com -joybuy.com  joybuy.eslinglonglife.com mayshijia.com minitiao.com  ocwms.com paidaojia.cn -paipai.comprestodb-china.com qianxun.comqingzhouip.com toplife.com -vg.com wangyin.com  wdfok.com yhd.com yihaodian.comyihaodianimg.com yiyaojd.com yizhitou.comads.union.jd.com -ads c-nfa.jd.com -adscps.360buy.com -ads -jzt.jd.com -ads stat.m.jd.com -ads img-x.jd.com -ads lianjia.com  ljcdn.com manmanbuy.com dianping.com -maoyan.com meituan.com meituan.net  mtyun.com  neixin.cn sankuai.com mogu.com mogucdn.com mogujie.com -pddpic.com pinduoduo.com yangkeduo.com  smzdm.com -zdmimg.com cnsuning.com -suning.comsuningcloud.comsuningestate.comsuningholdings.com 40017.cn -17u.cn 17u.net 17usoft.com 17usoft.net  elong.comelongstatic.com -ly.com  vancl.com vanclimg.com  vcimg.com -youzan.com yzcdn.cn youzanyun.com -ziroom.comziroomapartment.com 3dmgame.com 3304399.net 4399.com 4399api.com 4399dmw.com -4399er.com4399youpai.com 5054399.com img4399.com acfun.cn aixifan.com apilog-web.acfun.cn -ads -acplay.netdandanplay.com -ali213.net -acg.tv acgvideo.com -b23.tv biliapi.com biliapi.net bilibili.combilibiligame.net biligame.com biligame.net bilivideo.com  hdslb.com im9.com -mincdn.com$ upos-hz-mirrorakam.akamaized.net biji.com -ddmogo.com -igetget.cn igetget.com luojilab.com  mogoo.com -sao.cn saolife.com dmzj.com  douyu.com douyu.tv douyucdn.cn douyucdn2.cn douyuscdn.com douyutv.com gamersky.com -gcores.com gitv.cn gitv.tv huya.com msstatic.com 71.am  iqiyi.com iqiyipic.com -pps.tv -ppsimg.com qiyi.com qiyipic.com -qy.net -71edge.coma.ckm.iqiyi.com -adsad.m.iqiyi.com -ads afp.iqiyi.com -adsc.uaa.iqiyi.com -ads cloudpush.iqiyi.com -ads"cm.passport.iqiyi.com -adscupid.iqiyi.com -ads#emoticon.sns.iqiyi.com -ads!gamecenter.iqiyi.com -ads!hotchat-im.iqiyi.com -adsifacelog.iqiyi.com -adsmbdlog.iqiyi.com -ads msg.71.am -adsmsg.video.qiyi.com -ads msg2.video.qiyi.com -ads#policy.video.iqiyi.com -adsyuedu.iqiyi.com -ads  jjwxc.net ku6.com -ku6cdn.com -ku6img.com kkmh.comkuaikanmanhua.com gifshow.com ksapisrv.com kuaishou.com -yximgs.com log-sdk.gifshow.com -adswlog.kuaishou.com -ads  kgimg.com  kugou.com -le.com lecloud.com -lemall.com letv.com letvcdn.com letvimg.com miaopai.com -mihoyo.com bh3.com  pplive.cn -pplive.com pptv.com qingting.fm  sfacg.com -61.com -taomee.com -tapimg.com -taptap.com  tgbus.com tiancity.comtiancitycdn.com u17.com u17i.com u17t.com -vgtime.com ximalaya.com  xmcdn.com -kumiao.com  youku.com  ykimg.com -mmstat.com soku.com -cibntv.net -duowan.com dwstatic.com -yy.com yystatic.com  zhanqi.tv -heytea.com chiphell.com -douban.com  douban.fm doubanio.com erji.net -hacpai.com  ld246.com -nga.cn 178.com -ngabbs.com ngacn.cc saraba1st.com  zhihu.com  zhimg.com  feng1.comrongechain.comsf-airlines.comsf-cityrush.comsf-express.comsf-financial.com sf-saas.comsf-tech.com.cn sfcar.hk sffix.cn sfgy.org 36kr.com 36krcdn.com -caixin.com cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn -cctvlib.cncctvlibrary.cncctvlib.com.cncctvlibrary.com.cn -cctvpro.cncctvpro.com.cn  cntvwb.cn gjgbdszt.cngjgbdszt.com.cngjgbdszt.net.cn  ipanda.cn -ipanda.com ipanda.com.cn -ipanda.net livechina.cn livechina.comolympicchannelchina.cn tvcc.cn tvcc.com.cn%!xn--fiq53l6wcx3kp9bc7joo6apn8a.cn%!xn--fiq53l90et9fpncc7joo6apn8a.cn-)xn--fiq53l6wcx3kp9bc7joo6apn8a.xn--fiqs8s%!xn--kprv4ewxfr9cpxcc7joo6apn8a.cn-)xn--kprv4ewxfr9cpxcc7joo6apn8a.xn--fiqs8s zggbdszt.cnzggbdszt.com.cnzggbdszt.net.cnzygbdszt.net.cn chinanews.comchinanews.com.cn -cns.com.cn ecns.cn  dgtle.com geekpark.nethoopchina.com.cn hupu.com hupucdn.com  shihuo.cn coolbuy.com  ifanr.com ifanr.inifanrusercontent.com -ifanrx.com -minapp.com jiemian.comjiemian.com.cn -lancdn.comlandiannews.com  wsoso.com  ifeng.com ifengimg.comphoenixcenter.cn fengedu.comifengweekly.com 6655.com cooldock.com -ithome.com lapin365.com ruanmei.com -saayaa.com win7china.com win8china.com sohu.com -sohucs.com -itc.cn solidot.org  sspai.com tmtpost.com chaindd.com -72whys.com checkzeit.com -tivitv.com tigeek.net.cntmtsmartlife.comtmtsmartrun.com feng.com fengimg.com wfdata.club ynet.cn ynet.com ynet.com.cn aiganggu.comdanjuanfunds.com -imedao.comsnowballsecurities.com -xueqiu.com stcn.comcaijing.com.cn  hexun.com  cnfol.com cnfolimg.com zqrb.cn -nbd.com.cn cnstock.com 21jingji.com  yicai.com  cs.com.cn  ssajax.cn ssimg.cn stockstar.com -jrj.com.cn  jrjimg.cn -cls.cncailianpress.comwallstreetcn.com jianyuweb.com wallstcn.com 10jqka.com.cn thsi.cn -ths123.com -dzh.com.cn  gw.com.cn -yundzh.comhainanairlines.com hnacargo.com  hnair.com 10044.cn jbcz.tvjibencaozuo.comsinopec-usa.com sinopec.comsinopecgroup.comsinopecnews.com.cnsinopecsales.com -csdl.ac.cn  las.ac.cn  fuwai.com pkuh6.cn puh3.net.cnhospital.pku.edu.cnss.bjmu.edu.cn 115.com 3type.cn 4paradigm.com  51job.com 51jobcdn.comyingjiesheng.comyingjiesheng.netzhiding.com.cn -afdian.net afdiancdn.com agora.io -agoraio.cn agoralab.co -antutu.com bitauto.combitautoimg.com cheyisou.com  yiche.com  yccdn.com shimo.im  yuque.com chinaso.com -pg0.cn -chinaz.com -chinaz.net caiyunai.com caiyunapp.com coolapk.comcoolapkmarket.comcoolapkmarket.net c-t.workcowtransfer.com dida365.com geetest.com#geetest.datasink.sensorsdata.cn hellofont.cnhellowebfont.com0,hellofontpreview.oss-cn-beijing.aliyuncs.com-)hellowebfonts.oss-cn-beijing.aliyuncs.com hanyi.com.cnfontstar.com.cnfoundertype.com ipip.net jianshu.com -jianshu.io jinshuju.netjinshujucdn.com gotokeep.com keepcdn.com  lagou.com lgstatic.com baidupan.com -lanzou.com lanzous.com woozooo.com -liepin.com -lietou.comlietou-static.com mafengwo.cn mafengwo.com mafengwo.net  meitu.com meitudata.com moji.com mojichina.com  polyv.net videocc.net -renren.comrenren-inc.com vaptcha.com vaptcha.net wamawama.com -wiwide.com -sojump.com -wjx.cn wjx.com wjx.top zcmbc.com.cn zdns.cn zdns.net.cn zdns.org.cn zdnscloud.biz zdnscloud.cn zdnscloud.comzdnscloud.com.cnzdnscloud.info zdnscloud.netzdnscloud.net.cnzdnscloud.org.cnchinesemooc.org -cnmooc.orgicourse163.org icourses.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com cnki.net  apabi.comcnthinkers.com  cqvip.comhuijistatic.com huijiwiki.com moegirl.orgmoegirl.org.cn cugbonline.cn  guokr.comwanfangdata.com.cn speiyou.com -xesimg.com xueersi.com banmaaike.comxiaoyuankousuan.com ybccode.com yuanfudao.com yuansouti.com yuantiku.com zhihuishu.com  coding.me -coding.net csdn.net -csdnimg.cn  deepin.cn -deepin.com  deepin.io -deepin.org  gitee.comjinrishici.com  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com oschina.net  pgyer.com -tracup.com frontjs.comruby-china.orgrubyconfchina.org mysxl.cn -sxl.cn  sxlcdn.cnsegmentfault.com  sifou.com -tipdim.orgxueyuanjun.com alibaba -alipay -taobao tmall a.alimama.cn -adsacjs.aliyun.com -adsadash.m.taobao.com -ads!adashbc.m.taobao.com -ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com -ads adashx.m.taobao.com -ads$adashx4ae.ut.taobao.com -ads#adashx4yt.m.taobao.com -ads#adashxgc.ut.taobao.com -adsadsh.m.taobao.com -adsafp.adchina.com -adsafp.alicdn.com -ads agoodm.m.taobao.com -ads#agoodm.wapa.taobao.com -ads alipaylog.com -adsamdc.alipay.com -adsamdc.m.taobao.com -ads api.wapa.taobao.com -ads#api.waptest.taobao.com -adsapoll.m.taobao.com -ads#appdownload.alicdn.com -adsatanx.alicdn.com -adsatanx2.alicdn.com -adscbu01.alicdn.com -adscdn0.mobmore.com -adsclick.aliyun.com -ads&click.mz.simba.taobao.com -adscm.ipinyou.com -ads cm.mlt01.com -ads!dsp.simba.taobao.com -adserr.taobao.com -adsex.mobmore.com -ads ex.puata.info -ads!fav.simba.taobao.com -ads$feedback.whalecloud.com -adsff.win.taobao.com -ads fm.p0y.cn -adsg.click.taobao.com -ads -g.tbcdn.cn -adsgma.alicdn.com -adsgtms01.alicdn.com -adsgtms02.alicdn.com -adsgtms03.alicdn.com -adsgtms04.alicdn.com -adshydra.alibaba.com -ads'hz.pre.tbusergw.taobao.net -ads#hz.tbusergw.taobao.net -ads i.ipinyou.com -adsinit.phpwind.com -ads!intl.wapa.taobao.com -ads$intl.waptest.taobao.com -ads"jxlog.istreamsche.com -adslog.umtrack.com -adsm.intl.taobao.com -adsm.simba.taobao.com -adsmatch.p4p.1688.com -ads%material.istreamsche.com -ads mlt01.com -ads&nbsdk-baichuan.alicdn.com -ads&nbsdk-baichuan.taobao.com -ads"osfota.cdn.aliyun.com -ads osupdate.aliyun.com -ads&osupdateservice.yunos.com -ads%pindao.huoban.taobao.com -adspush.wandoujia.com -adsre.m.taobao.com -ads re.taobao.com -ads&redirect.simba.taobao.com -adsrj.m.taobao.co -adsrj.m.taobao.com -adssdkinit.taobao.com -adsshow.re.taobao.com -adssimaba.taobao.com -adssimba.m.taobao.com -ads!srd.simba.taobao.com -adsstats.ipinyou.com -ads strip.taobaocdn.com -ads$tanxlog.istreamsche.com -adstejia.taobao.com -adstemai.taobao.com -ads!tns.simba.taobao.com -ads tongji.linezing.com -ads tvupgrade.yunos.com -adstyh.taobao.com -adsuserimg.qunar.com -adsw.m.taobao.com -adsyiliao.hupan.com -adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com -alicdn.com alidayu.com -alidns.com alikunlun.comaliyun-inc.comaliyun-iot-share.com -aliyun.com aliyuncdn.com aliyuncs.com hichina.comica-alliance.org kunlunaq.com kunlunar.com kunlunca.com kunluncan.com kunlunea.com kunlungem.com kunlungr.com kunlunhuf.com kunlunle.com kunlunli.com kunlunno.com kunlunpi.com kunlunra.com kunlunsa.com kunlunsc.com kunlunsl.com kunlunso.com kunlunta.com kunlunvi.com kunlunwe.com mxhichina.com ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.toteambition.comteambition.netteambitionapis.com 25pp.com  56che.com  95095.com 9game.cn -aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk -aliimg.com -alikmd.com alimama.com alimebot.com -alimei.com alios.cn -alipay.comalipayobjects.com aliplus.comaliresearch.com alisoft.com alisports.com alitianji.comaliunicorn.com -aliway.com aliwork.com alixiaomi.comalizhaopin.com alyms.cn -asczwa.comasczxcefsv.com -asmlink.cn atatech.org -b2byao.com  bazai.com  bcvbw.com  cheng.xin cloudeagle.cn damai.cn dayu.com -dfkhgj.com doctoryou.ai doctoryou.cn dongting.com -dratio.com emas-poc.com -gongyi.xin ialicdn.com iconfont.cn -ics.design -jhgtgb.com -kanbox.com -lazada.comliangxinyao.com m-now.cn -maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.comxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com -zuodao.comaliexpress.com aliexpress.ru sm.cn cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com -hemaos.com hemashare.cn shyhhema.com 1688.com etao.com juhuasuan.comlingshoujia.com -mashort.cn pailitao.com -taobao.com -taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai alitrip.com  feizhu.cn -feizhu.com -fliggy.com  fliggy.hk -iuynfg.com amap.com amapauto.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net  b3log.org a.baidu.com -ads ad.duapps.com -ads ad.player.baidu.com -ads adm.baidu.com -adsadscdn.baidu.com -adsadx.xiaodutv.com -adsae.bdstatic.com -ads afd.baidu.com -ads als.baidu.com -ads&api.mobula.sdk.duapps.com -ads"api.tuisong.baidu.com -adsappc.baidu.com -adsb.bdstatic.com -adsbaichuan.baidu.com -adsbaidustatic.com -adsbaidutv.baidu.com -adsbanlv.baidu.com -ads bar.baidu.com -ads"bdimg.share.baidu.com -adsbdplus.baidu.com -ads bj.bcebos.com -adsbtlaunch.baidu.com -ads c.baidu.com -ads cb.baidu.com -adscbjs.baidu.com -adscjhq.baidu.com -adscleaner.baidu.com -ads click.bes.baidu.com -adsclick.hm.baidu.com -adsclick.qianqian.com -ads"cm.baichuan.baidu.com -ads cm.baidu.com -adscm.pos.baidu.com -ads cpro.baidu.cn -adscpro.baidu.com -ads!cpro.baidustatic.com -ads!cpro.tieba.baidu.com -ads"cpro.zhidao.baidu.com -adscpro2.baidu.com -ads"cpro2.baidustatic.com -ads crs.baidu.com -adsdatax.baidu.com -ads dd713.bj.bcebos.com -ads dl.client.baidu.com -adsdl.ops.baidu.com -adsdl1sw.baidu.com -adsdl2.bav.baidu.com -adsdlsw.baidu.com -adsdlsw.br.baidu.com -ads!dl-vip.bav.baidu.com -ads(dl-vip.pcfaster.baidu.co.th -ads#download.bav.baidu.com -ads"download.sd.baidu.com -adsdrmcmm.baidu.com -ads dup.baidustatic.com -ads dxp.baidu.com -ads dzl.baidu.com -ads e.baidu.com -adseclick.baidu.com -adsecma.bdimg.com -adsecmb.bdimg.com -adsecmc.bdimg.com -ads eiv.baidu.com -ads em.baidu.com -adsentry.baidu.com -ads ers.baidu.com -ads f10.baidu.com -ads#fc-feed.cdn.bcebos.com -adsfclick.baidu.com -adsfeed.baidu.com -adsfexclick.baidu.com -ads g.baidu.com -adsgimg.baidu.com -adsguanjia.baidu.com -ads hc.baidu.com -ads hm.baidu.com -adshmma.baidu.com -ads hpd.baidu.com -adsidm.bce.baidu.com -adsidm-su.baidu.com -adsiebar.baidu.com -adsikcode.baidu.com -adsimg.taotaosou.cn -adsimg01.taotaosou.cn -adsj.br.baidu.com -adskstj.baidu.com -ads log.music.baidu.com -ads m1.baidu.com -ads ma.baidu.com -adsmobads.baidu.com -ads"mobads-logs.baidu.com -adsmpro.baidu.com -adsmsite.baidu.com -adsneirong.baidu.com -adsnsclick.baidu.com -ads#nsclickvideo.baidu.com -adsopenrcv.baidu.com -ads$pc.videoclick.baidu.com -ads pos.baidu.com -adspups.bdimg.com -ads%push.zhanzhang.baidu.com -ads qianclick.baidu.com -adsrelease.baidu.com -adsres.mi.baidu.com -ads"rigel.baidustatic.com -ads#river.zhidao.baidu.com -ads rj.baidu.com -adsrplog.baidu.com -ads s.baidu.com -adss.cpro.baidu.com -ads!sa.tuisong.baidu.com -adssclick.baidu.com -adssestat.baidu.com -adsshadu.baidu.com -adsshare.baidu.com -ads"snippet.pos.baidu.com -adssobar.baidu.com -adssobartop.baidu.com -adsspcode.baidu.com -adsstat.v.baidu.com -ads su.bdimg.com -adssu.bdstatic.com -ads t10.baidu.com -ads t11.baidu.com -ads t12.baidu.com -ads tk.baidu.com -adstkweb.baidu.com -ads"tob-cms.bj.bcebos.com -adstongji.baidu.com -adstoolbar.baidu.com -adstracker.baidu.com -adstuijian.baidu.com -ads*uat1.bfsspadserver.8le8le.com -ads#ubmcmm.baidustatic.com -adsucstat.baidu.com -adsulic.baidu.com -ads ulog.imap.baidu.com -adsunion.baidu.com -ads!unionimage.baidu.com -adsutility.baidu.com -ads utk.baidu.com -ads videopush.baidu.com -adsvv84.bj.bcebos.com -adsw.gdown.baidu.com -ads w.x.baidu.com -adswangmeng.baidu.com -adsweishi.baidu.com -ads$wenku-cms.bj.bcebos.com -ads%wisepush.video.baidu.com -ads wm.baidu.com -adswn.pos.baidu.com -adsznsv.baidu.com -adszz.bdstatic.com -adszzy1.quyaoya.com -ads zuoyebang.cc zuoyebang.com -zybang.com baidu -91.com -aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baidubce.combaiducontent.com baidupcs.combaidustatic.com -baifae.com baifubao.com -bcebos.com  bdimg.com bdstatic.com bdtjrcv.com  bdydns.cn -bdydns.com -bdydns.net chuanke.com  dlnel.com  dlnel.org -duapps.com -dwz.cn -hao123.com hao123img.com -hao222.com -haokan.com jomocdn.net jomodns.com -mipcdn.com  nuomi.com quyaoya.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com -bytecdn.cn bytedance.com bytedance.net bytedns.net byteimg.combyteoversea.com -douyin.com huaxiong.com ibytedtos.comjokecommunity.comneihanshequ.com -pstatp.com -snssdk.com toutiao.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.com -wukong.comwukongwenda.cnwukongwenda.com zijiecdn.com zijiecdn.net  zjcdn.com  baike.com -ixigua.comixiguavideo.com ixgvideo.com  365yg.com didi-food.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comxiaojukeji.com  dbank.com dbankcdn.com harmonyos.com hicloud.com hihonor.com honor.cn -huawei.comhuaweicloud.com  vmall.com vmallres.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn -wps.cn  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com -ks-cdn.com  ksyun.com ksyungslb.com flyme.cn meizu.cn  meizu.com  mzres.com 126.com 126.link 126.net 127.com 127.net 163.com163industry.com 163mail.com 163qiyukf.com -163yun.com 166.net -haowu.linkicourse163.org  kaola.com -lofter.com  nease.netnetease-inc.com netease.com -netease.im -qiyukf.com ydstatic.com yeah.net -youdao.comanalytics.163.com -ads crash.163.com -ads crashlytics.163.com -ads g.163.com -ads coloros.com finzfin.com -heytap.com heytapcs.comheytapdownload.comheytapimage.com -myoppo.com nearme.com.cn oppo.cn oppo.com  oppo.mobioppodigital.com  oppoer.meoppomobile.com oppopay.com opposhop.cn -realme.com realmebbs.comrealmemobile.com oneplus.com -oneplus.cn oneplus.net opstatics.comoneplusbbs.com h2os.com 75.team -75team.com baomitu.com -360.cn 360.com -360-jr.com 360chou.com360daikuan.com360huzhubao.com -360jie.com360jinrong.net -360kan.com 360kuai.com  360os.com 360panyun.cn 360safe.com 360shouji.com 360taojin.com360totalsecurity.com 360tpcdn.com360webcache.com anquanke.com  haoso.com -haosou.com haosou.com.cn -haosou.net i360mall.com ludashi.com nicaifu.com  nzwgs.com  qhimg.com qhimgs0.com qhimgs1.com qhimgs2.com qhimgs3.com qhimgs4.com qhimgs5.com qhimgs6.com  qhmsg.com  qhres.com qhstatic.com qhupdate.com -qihuapi.cn qihucdn.com  qihoo.com qikucdn.com -so.com sou.com urlqh.cnxiaoluyouxuan.comxiaoluzhidian.com xjietiao.com -youhua.com  yunpan.cn  97973.com -picself.cn sina.cn sina.com sina.com.cn sina.net sinaapp.com sinaedge.com -sinaimg.cn sinaimg.com  sinajs.cn -sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.com 2016.sina.cn -adsad.sina.com.cn -adsadbox.sina.com.cn -ads!adimages.sina.com.hk -ads!adimg.mobile.sina.cn -ads adimg.uve.weibo.com -ads!adm.leju.sina.com.cn -ads ads.sina.com -adsalitui.weibo.com -adsapi.apps.sina.cn -ads appgift.sinaapp.com -ads#appsupdate.sinaapp.com -ads atm.sina.com -adsbeacon.sina.com.cn -ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com -ads%click.uve.mobile.sina.cn -ads click.uve.weibo.com -adscm.dmp.sina.cn -ads0#contentrecommend-out.mobile.sina.cn -ads$count.video.sina.com.cn -ads counter.sina.com.cn -adscre.dp.sina.cn -adscre-dp.sina.cn -adsd00.sina.com.cn -adsdcads.sina.com.cn -adsdl.kjava.sina.cn -ads dmp.sina.cn -adsdp.im.weibo.cn -ads game.weibo.cn -adsgame.weibo.com -ads"gw5.push.mcp.weibo.cn -ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn -ads"int.dpool.sina.com.cn -ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn -ads log.mix.sina.com.cn -ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn -ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn -adsnewspush.sinajs.cn -ads oascentral.sina.com -ads#oascentral.sina.com.hk -adsp4p.sina.com.cn -adspalmnews.sina.cn -adspay.mobile.sina.cn -adspfp.sina.com.cn -adspfpip.sina.com -ads!promote.biz.weibo.cn -ads r.dmp.sina.cn -adsrm.sina.com.cn -ads rs.sinajs.cn -adss.alitui.weibo.com -ads"s.img.mix.sina.com.cn -ads sapi.sina.cn -ads sax.sina.cn -adssax.sina.com.cn -adssaxn.sina.com.cn -adssaxs.sina.com.cn -ads sbeacon.sina.com.cn -ads"sdkapp.mobile.sina.cn -ads!sdkapp.uve.weibo.com -ads$sdkclick.mobile.sina.cn -ads slog.sina.cn -adsslog.sina.com.cn -ads'staticadm.leju.sina.com.cn -adstjs.sjs.sinajs.cn -ads"trends.mobile.sina.cn -ads"u1.img.mobile.sina.cn -ads&wapwbclick.mobile.sina.cn -ads!wbapp.mobile.sina.cn -ads wbapp.uve.weibo.com -ads#wbclick.mobile.sina.cn -ads$wbpctips.mobile.sina.cn -adswidget.weibo.com -ads woocall.sina.com.cn -adszc.biz.weibo.com -adszymo.mps.weibo.com -ads -go2map.com sogo.com  sogou.com sogoucdn.com dns.pub  dnsapi.cn  dnspod.cn -dnspod.com dnspod.com.cn -dnspod.net -dnspod.org  dnsv1.com  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub ad.qq.com -ads ad.qun.qq.com -ads!adfilter.imtt.qq.com -ads adping.qq.com -adsadpm.app.qq.com -adsadsclick.qq.com -adsadsfile.qq.com -adsadshmmsg.qq.com -adsadslvfile.qq.com -adsadslvseed.qq.com -ads%adsmind.apdcdn.tc.qq.com -adsadsqqclick.qq.com -adsadstestview.qq.com -adsadsview.qq.com -adsadsview2.qq.com -adsadv.app.qq.com -ads adver.qq.com -ads btrace.qq.com -adse.qq.com -adslog.tbs.qq.com -ads mpush.qq.com -ads mtrace.qq.com -ads push.qq.com -ads pgdt.gtimg.cn -ads -yuewen.com hongxiu.com lrts.me qdmm.com -qidian.com readnovel.com tingbook.com webnovel.com -xs8.cn xxsy.net -apcdns.net  cdn-go.cn cdntips.com foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com myqcloud.com -qcloud.com qcloudimg.com qlogo.cn qpic.cn -qq.com -qqmail.com  qzone.com -rtx.com.cnservicewechat.com smtcdns.com smtcdns.net -tencent.cn tencent.comtencent.com.cntencent.com.hktencent.net.cntencent-cloud.comtencentmusic.comtencentyun.com -tenpay.com -wechat.com -wegame.com wegame.com.cn -weiyun.com alloyteam.com imweb.io ivweb.io -mi.com -mi-img.com  mifile.cn miui.com -miwifi.com  xiaomi.cn -xiaomi.com -xiaomi.netxiaomiyoupin.com  00cdn.com  88cdn.com -sandai.netthunderurl.com -xunlei.com 10086.cn 139.comchinamobile.comchinamobileltd.com migucloud.com migu.cn -cmvideo.cn miguvideo.com andfx.cn  andfx.net -cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com -ctexcel.ca ctexcel.comctexcel.com.hk -ctexcel.fr -ctexcel.us -189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com -chntel.com  10010.com 10010.com.cnchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com  wo.com.cn -j-test.comguoxuedashi.com guoxuemi.com mojidict.com jikipedia.com haidilao.com0123456789.com 0379home.com -055110.com  05sun.com 0759job.com  100bt.com 100offer.com  11467.com -114chn.com 114piaowu.com 114shouji.com -119you.com 123juzi.com 123juzi.net 123u.com 1637.com  16888.com 16rd.com  17173.com 178linux.com  17989.com  17cdn.com 17house.com  18183.com 188.com 1905.com  19yxw.com 1nongjing.com  1ting.com 1zhe.com 21cn.com 2265.com 2288.org 2345.com 258.com 263.net 289.com 2cto.com 3000.com -310win.com -315che.com 3234.com 32r.com 3322.org 3387.com 33lc.com 3454.com 3456.cc -35.com 3533.com 360aiyi.com -360doc.com  360jq.com 360zhyx.com -365azw.com -365dmp.com -37.com 3733.com 3839.com -39.net 3conline.com 3d66.com -3elife.net 3h3.com 3yx.com  40407.com 500.com 500d.me -50bang.org -51.com 51.la -510you.com 51credit.com  51cto.com 51eshop.com 51gaifang.com 51hejia.com51jingying.com 51meishu.com -51sole.com 51wendang.com  51yes.com 5253.com  52hxw.com -52miji.com 52pk.com 52z.com 53kf.com -55.com -56.com 5577.com  55bbs.com  58pic.com  5bite.com 5fun.com 5gzm.net 5khouse.com 5you.com 66wz.com 68h5.com -6rooms.com 714.com 7230.com -72byte.com  7down.com 7k7k.com  7moor.com 7po.com -7x24cc.com -7xdown.com  818ps.com  84399.com 885.com -900.la 917.com 91danji.com 91yunxiao.com 9553.com 962.net 9718.com  99166.com 998.com 999d.com 99danji.com 9ht.com -9xgame.com 9xu.com a9vg.com -aardio.com -adxvip.com -afzhan.com agrantsem.com  aiemy.com aiketour.com  aiops.com  aipai.comairchangan.com airguilin.com aisee.tv aiskycn.com aiyunxiao.com -aizhan.comalittle-tea.com -allyes.com anfensi.com -anquan.org -anruan.com -aotrip.net  aoyou.com apk3.com apk8.com appchina.com -appinn.com  arpun.com babytree.combabytreeimg.com baidufree.combaifendian.com  baihe.com baixing.com baixing.netbamenzhushou.combangongziyuan.com baofeng.combaoxianshichang.com bcy.net bearychat.com beihaidc.combeijing-lipin.com bengbeng.com  benmi.com  berui.combestopview.com biancheng.net bianews.com bibaodao.com bidchance.com biddingx.com bihu.com -bio360.net  bio4p.com bio-equip.combiodiscover.com bishijie.com bitecoin.com biyehome.net bjcathay.com bobo.com bojianger.com -bokecc.com  boosj.com btcfans.com btgtravel.com bthhotels.com  btime.comcabbagebox.com caijingwu.com -caiyun.com cang.comcankaoxiaoxi.comcardbaobao.com -carnoc.com  cdn20.com  cecdc.com cecport.com centanet.com cerambath.org -ch.com chachaba.com changba.com chashebao.comchazhengla.com -che168.comchina-chair.comchina-nengyuan.com  china.comchinacache.comchinacache.netchinachugui.comchinadongchu.com chinafph.comchinakaoyan.comchinalawedu.com chinapay.com chinapp.netchinapubmed.net chinasspp.comchinatranslation.net chinaunix.netchinaweiyu.comchinawutong.com chinazns.comchongdiantou.com -chouti.com chuangxin.com chuansong.mechuansongme.com -chushou.tv chuyu.me  city8.com cjol.com clouddn.com cloudxns.com cnanzhi.com -cnbeta.com cnbetacdn.com cnblogs.com -cnepub.com  cnlaw.net cnzz.com cocodiy.com code666.com -cofeed.com -cofool.com coindog.comcontentchina.com  cpppf.org  cr173.com  crsky.com  csbew.com -csmjzs.com csslcloud.net -ctfile.com ctiforum.com ctoutiao.com  ctsbw.com -cubead.com  cwxzx.com -cyagen.com  cybtc.com cyol.com cyts.com cztv.com cztvcloud.com dadajiasu.com dadighost.com daguzhe.com dajiabao.com  dajie.com dajieimg.com dalongyun.com dangbei.com danji100.com -danji6.com daocloud.io daovoice.iodayukaoshi.com dazijia.com -dcdkjx.com  dd373.com  ddooo.com dedecms.com develenv.com -dginfo.comdgphospital.comdianchacha.com diandian.comdiandianqi.comdianwannan.comdingxiang-inc.com -diopic.net diyiyou.com dj99.com  docin.com dockerone.com -dockone.io dogedoge.com -donews.com -dongao.comdongguantoday.com dopa.com -douxie.com -downcc.com downxia.com -downyi.com -dpfile.comdreams-travel.comdrivergenius.com -dui.ai duiopen.com duoduocdn.com duokanbox.com -duomai.com duoshuo.com  duote.com dxpmedia.com -dxycdn.com  dyhjw.com dzsc.com dzw3.com  dzwww.com easesale.com  easiu.com eastday.com eastsoo.com -eayyou.com  ebico.com  ebrun.com -ecitic.com ecjobhome.com -edu.cn  eduei.com eeyy.com eflycloud.com elecfans.com emarbox.com -emumax.com enterdesk.comeoeandroid.com excelhome.net expreview.com extfans.comf.cx  faloo.com famulei.com  fanli.comfangxiaoer.com fanxian.com fastapi.net -feihuo.com feiniaomy.comfengkongcloud.com fengniao.comfengxian110.com  fenxi.com -fhldns.com  fimmu.com finchina.com fixdown.com  fqjob.net freebuf.com fugetech.com fuwj.com fxxz.com fyxz.com game234.com gameabc.com gamemei.com -gaodun.comgaoshouyou.comgaoxiaojob.com -gdjdxy.comgdliontech.com gdrc.com geilicdn.comgenelinkout.com  getui.com -gezida.com gfan.com -giocdn.com globrand.com gm86.com gmallbio.com  gmz88.comgobasearcher.com gold678.com  golue.comgongxiangcj.com goosail.com  goufw.com gree.comgreenxiazai.com growingio.com  gtags.net  guabu.com guaiguai.comguanaitong.comguanhaobio.com gucheng.com  guigu.org guoxinmac.com  gupzs.com gushiwen.orgguzhangting.com -gwdang.comgxairlines.com -gxb.io gzwanju.com h5uc.com hack520.com hackhome.com haishun.com hanboshi.com handanjob.comhangjiayun.com haolietou.com  haote.comhaoyouyinxiang.com hefei.cc -heisha.net  henha.com henkuai.com herostart.com  hiido.com hitv.com hiyd.com hktheone.com hn-cbec.com -hnrcsc.com hntv.tv hnyuyuhui.com hollycrm.com homeinns.com homekoo.comhongsanban.com -houdao.comhouyuantuan.com hteacher.net huanqiu.comhuashengdaili.com  huatu.com  huize.com  hujia.org hujiang.com hunantv.comhuochepiao.com huocheso.com  huxiu.com hxfy888.com hxsd.com iask.com -ibaotu.com ibuychem.com icaidao.com ichangtou.com idongdong.com iflytek.com  igao7.com -iheima.com ijiandao.com -ikafan.com im2maker.com  im-cc.com -imedao.com imgo.tv  imooc.com indienova.cominfinitynewtab.com  infoq.cominfoqstatic.com -ip-cdn.com  ip138.com ipinyou.com iranshao.com  irs01.com ishumei.com  it165.net  it168.com  it610.com  iteye.com -itjuzi.com  itmop.com  iyiou.com iyunxiao.com -izuche.com -jandan.net jb51.com  jdair.net jia.com jiameng.com jianbihua.com jianzhi8.com jiaodong.net jiaoyimao.com jiasuhui.com jiasule.com jiathis.com jiayuan.com jiazhao.com jiemeng8.comjikexueyuan.com jinianbi.comjinrongren.net  jinse.com  jinti.comjiqizhixin.com jisuanke.com jisuxia.com jiuzhilan.com jj20.com jkbl.com jmstatic.com job5588.com -job910.com  jobjm.com jsbc.com -jsrdgg.com jstv.com  jsyks.com juefeng.com -julive.com  jumei.com  juwan.com  juxia.com  jyimg.com k366.com kaifubiao.com kaixin001.com kameng98.com -kanimg.com kankanews.com kantianqi.net kanzhun.com kaopu001.comkeboyunxiao.com  kejet.net kf5.com -kimiss.com kingdee.com kkzj.com -kongfz.com koolearn.com -kouclo.com -koudai.com koudai8.com kq7.com  ksord.com  kuaaa.com kuaidi100.com kuaihou.com kuaizhan.com  kuqin.com -kuyiso.com lady8844.com lanhuapp.com laomaotao.net laomaotao.org  lascn.net  lawxp.com leanote.com ledu.comleetcode-cn.com leikeji.com leiphone.com leiting.com leju.com leturich.org lianmishu.com -liantu.com lianzhuli.comliaoxuefeng.com liba.com libaclub.comlieyunwang.com lightonus.com -likuso.com lingkou.com linkvans.com  linsn.com linuxidc.com liulanqi.net liuxiaoer.com live800.com liweijia.com lixinger.com lkkbrand.com longhoo.net -longre.comlongtugame.com longzhu.com  lotpc.com -loupan.com -lu.com luckyair.net  lufax.com lufaxcdn.com lunwengo.net luyouqi.com -lvmama.comlvsexitong.com  lxway.com -magedu.com maisanqi.com -mamecn.com manhuatai.com manmankan.com -mapbar.com mayi.com -mayihr.com -mcbang.com  mdpda.com mechina.org -mediav.com meifang.com meika360.com meilishuo.commeimingteng.com -meiqia.commeishichina.com meishij.netmengtuoshi.wang mgtv.commiaobolive.com miaozhen.com -miercn.com mijisou.com mikecrm.comminhangshi.com miusi.co mjia.cc -mmbang.com mmbang.info -mofang.com mofazhu.com mogu.com mogucdn.com mogujie.com -mokahr.com moleecel.commoocollege.com mop.com msanjia.com -mscbsc.com mukewang.com -mumayi.com -muomou.com muzhiwan.com -mydown.com mydrivers.com myshow360.net myyx618.com myzaker.com naixuecha.com netbian.com -newasp.netnewbandeng.com  newyx.net nowcoder.com nowscore.com  nruan.com ntalker.com nvsheng.com  nzbdw.com oadz.com  oeeee.com  offcn.com officese.com -oicq88.com  okooo.com -ol-cdn.com -ol-img.com oldboyedu.com -oneapm.com onegreen.net -oneyac.comonlinedown.netonlinesjtu.com onlylady.com -opdown.com oray.com  ottcn.com -oupeng.com -p2peye.com p5w.netpaipaibang.com paopaoche.net pc6.com -pcbeta.com -pchome.net  pcpop.com  peccn.com pgzs.compharmacodia.com piaoliang.compingplusplus.com pingwest.com -pingxx.com pintu360.com  pipaw.com  pipaw.net pptbest.com -pubyun.com  qc188.com qcc.com qcds.com qd8.com qd-metro.com qh24.com qiangbus.com qianjia.com qianlima.com qianzhan.comqiaobutang.com qichacha.com -qie.tv qifeiye.comqijiayoudao.netqingdaochina.orgqingdaonews.comqingsongchou.com qiumibao.com qizuang.com  qqddc.comqqgexingqianming.com qqrizhi.comqqshuoshuo.com -qschou.com -qtmojo.com -qudong.com -qugame.com  qunar.com qunarzz.com qyer.com rfchost.comrockyenglish.com rong360.com rtbasia.com  ruan8.com -runoob.com rzrc114.com  saibo.com sanguosha.com -sanwen.net  scdng.com scoregg.com -sczsxx.com sdo.com sec-wiki.com -sencdn.com seniverse.comsenlinjimore.com -sgamer.com shang360.com -shangc.netshanghairc.com shangzhibo.tvshanshuihotel.com sharejs.com shebiaotm.comshelter-china.comshelterdome.netshengdaosoft.comshenmayouxi.com  sheui.com shijiexia.com shixiseng.com shmetro.comshoujihuifu.comshouyoubus.com shrbank.comshuidichou.comshuidihuzhu.com shumensy.comshuoshuokong.com -shutcm.com -simei8.com simuwang.com sinesafe.com  sjwyx.com  skycn.com sllssrq.com -snimay.com  sobot.com sofreight.com softwhy.com -sojson.com -somode.com soso.com souqian.comsouthmoney.comsparkletour.comspringtour.com ssports.com starbaby.cc starbaby.com stockstar.com sun0769.com -sunrtb.com supermap.comsupermapcloud.com -sys321.com szfw.org szhk.com szzfgjj.com t1y5.com  taihe.comtaihuoniao.com tangeche.com tanx.com -tao123.com -taoche.com te5.com tenxcloud.comtianjimedia.comtianjin-air.comtianlailive.com -tianqi.com tietuku.com -tiexue.net timedoo.com tingyun.com titanar.com tjjt360.com  tmcdn.net -tobosu.com tom.com tongdun.net topthink.com touqikan.com travelsky.com trunktech.comtrustexporter.com trustutn.org  tudou.com tudouui.com tuer123.com tuicool.com -tuiwen.net  tujia.com  tuniu.com tutuapp.com  tuwan.com tuwanjun.com u.tools  ucbug.com -uggame.com uoko.com urselect.comurumqi-air.com  useso.com uuu9.com uzzf.com  v5875.com value500.com vamaker.com vdolady.com veryhuo.com veryzhun.com  vic18.com videojj.com  vijos.org vip.com  vobao.com -vpgame.comwangyangyang.vipwannianli8.com wanplus.com wanwushuo.com wanyiwang.com  wanyx.com -wdjimg.com wdzj.com  weand.com webterren.com weicaifu.com weidian.comweilaicaijing.comweilaiyunxiao.com weiphone.net weixing.com weiyangx.comwelltrend-edu.com wenjuan.comwhlovehome.com wicresoft.com -win007.com win8.netwindows10zj.comwindows7en.com windowszj.com winwin7.com wishdown.com  wmzhe.com wnhuifu.com wodingche.com  womai.com wonnder.com -wooyun.org worktile.comwoyaogexing.com  woyoo.com  wqiis.com wrating.com -wscdns.com  wtown.com  wumii.com -wuming.comwuximediaglobal.com  wywyx.com xafc.com  xbiao.com  xdwan.com -xfdown.com -xhscdn.comxiachufang.comxiaobaixitong.comxiaoe-tech.com xiaogouh5.comxiaohongshu.com  xiaoka.tv xiaokaxiu.comxiaomingtaiji.comxiaoxiongxitong.comxiaoyuxitong.com  xiayx.com xiazaiba.com xingjiesj.com xinhuanet.comxinrenxinshi.com xinshipu.comxingtan001.com xitong8.com xitu.com xiu8.com -xiucai.com xiziwang.net xmhouse.com  xnpic.com  xpgod.com -xsa239.comxuanchuanyi.com  xue51.com xuekanba.com xuexicha.com xundupdf.com  xycdn.com xywy.com -xzking.com yahui.cc -yaolan.com  yaoyl.com  yaozh.com -ycgame.com -yeepay.com -yeshen.com  yesky.com yh31.com  yigao.com yigoonet.com yihedoors.comyikaochacha.com yikexue.comyingjia360.comyinhang123.net yinxiang.com yinyuetai.comyinzhaowang.com -yiqifa.com -yiqifa.org yisu.com yitaifang.com  yiwan.com yixi.tv yizhibo.com  yjbys.com ynhr.com -yocajr.com -youboy.com youjiao.com youke.co youlian.fun youshang.com youxiake.com youxihezi.net youxila.com youxiniao.com youxigt.com  youzu.com yoyojie.com  yoyou.com  ypppt.com -yslyhr.com  ysten.com -yuewen.com  yunaq.com yunba.io yundaex.com yundasys.com -yundun.com yunqishi.net yunshipei.com yunxiao.com yunzhijia.com  yupoo.com  yuzua.com  yxbao.com -yxdown.com -yytcdn.com -zampda.net zampdsp.com zastatic.com -zbjimg.com zczj.com -zdfans.com zgjm.org -zgjsks.com  zglxw.com  zgzcw.com zhanbuba.comzhangyoubao.com zhanzhang.net zhaodanji.com zhaokao.net zhaopin.com zhcw.com -zhenai.com  zhibo8.cc  zhidx.com zhifang.com -zhipin.com zhiziyun.com zhongkao.comzhuangjiba.comzhuanyewanjia.comzhuayoukong.com zhubajie.com zhugeapi.net zhugeio.com  zimuzu.io zixiaomao.com zixuntop.com  zjstv.com zmengzhu.com zongheng.com -zpb365.com -zrblog.net zsxq.com  zuche.com zuchecdn.com zuhaowan.com zuidaima.com zuowen8.comzuowenwang.net jindidata.comtianyancha.comzhuanxiandai.com -fm3838.comlarsonlimited.com runsheng.com vzuu.com -zoom3g.com -zoomyou.cn chaoxing.com chaoxing.cc - -X-ORG x.org -% - BAIDU-ADS a.baidu.com -ads ad.duapps.com -ads ad.player.baidu.com -ads adm.baidu.com -adsadscdn.baidu.com -adsadx.xiaodutv.com -adsae.bdstatic.com -ads afd.baidu.com -ads als.baidu.com -ads&api.mobula.sdk.duapps.com -ads"api.tuisong.baidu.com -adsappc.baidu.com -adsb.bdstatic.com -adsbaichuan.baidu.com -adsbaidustatic.com -adsbaidutv.baidu.com -adsbanlv.baidu.com -ads bar.baidu.com -ads"bdimg.share.baidu.com -adsbdplus.baidu.com -ads bj.bcebos.com -adsbtlaunch.baidu.com -ads c.baidu.com -ads cb.baidu.com -adscbjs.baidu.com -adscjhq.baidu.com -adscleaner.baidu.com -ads click.bes.baidu.com -adsclick.hm.baidu.com -adsclick.qianqian.com -ads"cm.baichuan.baidu.com -ads cm.baidu.com -adscm.pos.baidu.com -ads cpro.baidu.cn -adscpro.baidu.com -ads!cpro.baidustatic.com -ads!cpro.tieba.baidu.com -ads"cpro.zhidao.baidu.com -adscpro2.baidu.com -ads"cpro2.baidustatic.com -ads crs.baidu.com -adsdatax.baidu.com -ads dd713.bj.bcebos.com -ads dl.client.baidu.com -adsdl.ops.baidu.com -adsdl1sw.baidu.com -adsdl2.bav.baidu.com -adsdlsw.baidu.com -adsdlsw.br.baidu.com -ads!dl-vip.bav.baidu.com -ads(dl-vip.pcfaster.baidu.co.th -ads#download.bav.baidu.com -ads"download.sd.baidu.com -adsdrmcmm.baidu.com -ads dup.baidustatic.com -ads dxp.baidu.com -ads dzl.baidu.com -ads e.baidu.com -adseclick.baidu.com -adsecma.bdimg.com -adsecmb.bdimg.com -adsecmc.bdimg.com -ads eiv.baidu.com -ads em.baidu.com -adsentry.baidu.com -ads ers.baidu.com -ads f10.baidu.com -ads#fc-feed.cdn.bcebos.com -adsfclick.baidu.com -adsfeed.baidu.com -adsfexclick.baidu.com -ads g.baidu.com -adsgimg.baidu.com -adsguanjia.baidu.com -ads hc.baidu.com -ads hm.baidu.com -adshmma.baidu.com -ads hpd.baidu.com -adsidm.bce.baidu.com -adsidm-su.baidu.com -adsiebar.baidu.com -adsikcode.baidu.com -adsimg.taotaosou.cn -adsimg01.taotaosou.cn -adsj.br.baidu.com -adskstj.baidu.com -ads log.music.baidu.com -ads m1.baidu.com -ads ma.baidu.com -adsmobads.baidu.com -ads"mobads-logs.baidu.com -adsmpro.baidu.com -adsmsite.baidu.com -adsneirong.baidu.com -adsnsclick.baidu.com -ads#nsclickvideo.baidu.com -adsopenrcv.baidu.com -ads$pc.videoclick.baidu.com -ads pos.baidu.com -adspups.bdimg.com -ads%push.zhanzhang.baidu.com -ads qianclick.baidu.com -adsrelease.baidu.com -adsres.mi.baidu.com -ads"rigel.baidustatic.com -ads#river.zhidao.baidu.com -ads rj.baidu.com -adsrplog.baidu.com -ads s.baidu.com -adss.cpro.baidu.com -ads!sa.tuisong.baidu.com -adssclick.baidu.com -adssestat.baidu.com -adsshadu.baidu.com -adsshare.baidu.com -ads"snippet.pos.baidu.com -adssobar.baidu.com -adssobartop.baidu.com -adsspcode.baidu.com -adsstat.v.baidu.com -ads su.bdimg.com -adssu.bdstatic.com -ads t10.baidu.com -ads t11.baidu.com -ads t12.baidu.com -ads tk.baidu.com -adstkweb.baidu.com -ads"tob-cms.bj.bcebos.com -adstongji.baidu.com -adstoolbar.baidu.com -adstracker.baidu.com -adstuijian.baidu.com -ads*uat1.bfsspadserver.8le8le.com -ads#ubmcmm.baidustatic.com -adsucstat.baidu.com -adsulic.baidu.com -ads ulog.imap.baidu.com -adsunion.baidu.com -ads!unionimage.baidu.com -adsutility.baidu.com -ads utk.baidu.com -ads videopush.baidu.com -adsvv84.bj.bcebos.com -adsw.gdown.baidu.com -ads w.x.baidu.com -adswangmeng.baidu.com -adsweishi.baidu.com -ads$wenku-cms.bj.bcebos.com -ads%wisepush.video.baidu.com -ads wm.baidu.com -adswn.pos.baidu.com -adsznsv.baidu.com -adszz.bdstatic.com -adszzy1.quyaoya.com -ads - -BIGHEAD bighead.group -9 -NIKKEI -nikkei.com  nikkei.jp nikkei.co.jp - -RASPBIAN raspbian.org -M - -STRIKINGLYmystrikingly.comstrikingly.comstrikinglycdn.com -, -CYLINK -cylink.procylink0122.icu -$ - FREECODECAMPfreecodecamp.org -w -JWPLAYER -jwpcdn.comjwplatform.com jwplayer.com -jwpltx.com -jwpsrv.comlongtailvideo.com - -MINImini4myminicard.comaboutyourmini.comatlantaminidealers.comgreatergothammini.com!midatlanticbmwmotorcycles.commini-abudhabi.commini-antilles.frmini-bahrain.commini-bosnia.com mini-clubs-international.commini-connected.atmini-connected.bemini-connected.chmini-connected.co.ukmini-connected.commini-connected.czmini-connected.demini-connected.dkmini-connected.eemini-connected.esmini-connected.fimini-connected.frmini-connected.iemini-connected.itmini-connected.ltmini-connected.lumini-connected.lvmini-connected.nlmini-connected.nomini-connected.plmini-connected.ptmini-connected.semini-corporate-sales.com mini-coupe.camini-dubai.com -mini-e.commini-egypt.commini-georgia.commini-grouparchiv.demini-grouparchive.commini-jordan.com mini-ksa.commini-kuwait.commini-lebanon.com mini-me.com mini-oman.commini-qatar.commini-srilanka.commini-stjohns.camini-stjohns.commini-tahiti.commini-vietnam.commini-windsor.camini-windsor.com mini.am mini.at mini.be mini.bg mini.by mini.ca mini.cc mini.ch mini.cl -mini.co.cr -mini.co.id -mini.co.il -mini.co.kr -mini.co.me -mini.co.th -mini.co.uk -mini.co.za mini.com mini.com.ar mini.com.bn mini.com.br mini.com.co mini.com.cy mini.com.do mini.com.ec mini.com.gr mini.com.gt mini.com.hr mini.com.mk mini.com.mo mini.com.mt mini.com.mx mini.com.pa mini.com.pe mini.com.ph mini.com.pl mini.com.py mini.com.sg mini.com.tr mini.com.tw mini.com.uy mini.cz mini.de mini.dk mini.dz mini.es mini.fi mini.fr mini.gp mini.hu mini.ie mini.in mini.is mini.it mini.jp mini.kz mini.lu mini.ma mini.md mini.mq mini.mu mini.my mini.nc mini.nl mini.no mini.pt mini.re mini.ro mini.rs mini.ru mini.se mini.si mini.sk mini.tm mini.tn mini.ua -mini101.caminiargentina.comminibrossard.caminibrossard.com minicanada.caminicaribbean.com miniccrc.ca minicooper.caminidealer.comminidealernet.comminidowntown.caminidowntown.com minidrivingexperienceusa.com minidurham.caminidurham.com  minie.com -minifs.comminigeorgian.caminigrandriver.comminihalifax.caminihalifax.com -minihk.comminiinvasion.caminiitalianjob.comminikelowna.caminikelowna.comminilangley.caminilangley.com minilat.com minilaval.ca minilaval.com minilondon.ca minilondon.cominimarkham.caminimarkham.comminimoncton.caminimoncton.comminimontrealcentre.caminimontroyal.caminimontroyal.comminimotoringrewards.comminimotoringschool.comminimotorsport.commininanaimo.camininanaimo.comminioakville.comminiofmonrovia.comminipetfriendly.comminirichmond.caminirichmond.comminisaskatoon.caminisaskatoon.com minishop.ca minispace.comminispecialoffers.caminispygear.comministcatharines.caministeagathe.comministjohns.caminitakesthestates.comminitoronto.caminitroisrivieres.ca miniusa.comminiusaservice.comminiusatires.comminivalueservice.comminivancouver.caminivaughanwest.caminivaughanwest.comminivictoria.caminivictoria.comminivilledequebec.caminivilledequebec.comminiwholesaleconnect.com miniwidget.caminiwindsor.comminiworkshop.comminiyaletown.capugetsoundmini.comshopminiusa.comsouthfloridamini.com -trmini.comtroisrivieresmini.comyours-customised.mini.com -7 - BOOTSTRAPbootstrapcdn.comgetbootstrap.com - - SPOTIFY-ADS'adeventtracker.spotify.com -ads$adstudio-assets.scdn.co -ads#bloodhound.spotify.com -ads - -BADGEN -badgen.net -> - CATEGORY-DEValpinelinux.org anaconda.com anaconda.org conda.io android.comandroidify.com -apache.orgappleswift.com  swift.org -swiftui.cn -cnswiftui.com.cn -cncalendarserver.orgapple-cloudkit.com cups.orgdeveloper.apple.comdevimages-cdn.apple.comdevstreaming-cdn.apple.comfoundationdb.orgmacosforge.org macruby.com macruby.net macruby.orgapple-mapkit.complaygrounds-cdn.apple.com carekit.orgresearchandcare.orgresearchkit.cn -cnresearchkit.com.cn -cnresearchkit.hkresearchkit.netresearchkit.orgresearchkit.tvservicetalk.io -webkit.org webkitgtk.org wpewebkit.orgwebobjects.com-)appleworldwidedeveloper.hb-api.omtrdc.net)%appleworldwidedeveloper.sc.omtrdc.net#p-events-delivery.akamaized.net archlinux.orgarchlinuxarm.org atom.io -badgen.netbootstrapcdn.comgetbootstrap.combraventures.com braveux.com -compass.isfightforux.comforthebadge.comstockagainstphotography.com launchpad.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io -ubuntu.com -ubuntu.netubuntuforums.org canonical.com  cdnjs.com -centos.orgchocolatey.org clojure.org -cnpmjs.org -cygwin.com -cython.org dart.dev dartlang.org dartpad.dev -debian.org -dotdeb.org  deno.landcompose-spec.io -docker.com  docker.ioelixir-lang.org -elrepo.org embed.ly embedly.com playerjs.io -erlang.orgaccountkit.comatscaleconference.com botorch.org -buck.build buckbuild.comcomponentkit.org draftjs.org -f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com -fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com fastlane.cifastlane.tools getfedora.orgfedoraforum.orgfedoraproject.orgfedoramagazine.org -ffmpeg.org flathub.org flatpak.org flutter.devflutterapp.comfontawesome.comfortawesome.com freebsd.org  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com -gentoo.orggetcomposer.org git-scm.com gitbook.com -gitbook.io  npmjs.com npm.communitydependabot.com -git.io github.blog -github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubstatus.comgithubusercontent.com/+github-avatars.oss-cn-hongkong.aliyuncs.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com -gitlab.com  gitlab.io -gitlab.netgitlab-static.net.*gitlab-assets.oss-cn-hongkong.aliyuncs.com gnu.org go-lang.com go-lang.net go-lang.org -go.dev  godoc.org -golang.com -golang.net -golang.org  consul.io hashicorp.comnomadproject.io  packer.io terraform.io vagrantup.comvaultproject.io haskell.orghaskellstack.org stackage.org brew.shhomebrew.bintray.com -01.org hyperscan.iointellinuxgraphics.comintellinuxgraphics.net -oneapi.comopenvinotoolkit.orgsnap-telemetry.io -acpica.com clearlinux.cn -cnclearlinux.org -ospray.net -ospray.org -ius.iojava java.com java.net -jenkins.io jetbrains.com jetbrains.net datalore.iokotlinlang.org  jfrog.com  jfrog.org bintray.com!d29vzk4ow07wi7.cloudfront.net -js.org jsdelivr.net jsdelivr.comcdn.jsdelivr.net -cn jupyter.org kali.org kubernetes.io -k8s.iolinuxfromscratch.org linuxmint.com lua.org macports.org mariadb.orgadaptivecards.ioapi-extractor.com -apisof.net appcenter.ms -blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com -jwt.ms microbit.orgmicrosoftadc.commicrosoftgamestack.commicrosoftiotinsiderlabs.commicrosoftreactor.cn -cn#microsoftreactor.com.cn -cnmicrosoftreactor.infomicrosoftreactor.netmicrosoftreactor.orgmicrosoftsilverlight.commicrosoftsilverlight.orgmicrosoftsilverlight.netmicrosoftsqlserver.com  mmdnn.commono-project.com msdn.commsinnovationchallenge.commspairlift.commsropendata.com  nuget.org nugettest.orgopentranslatorstothings.orgposhtestgallery.compwabuilder.comreactorms.com.cn -cn -sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io xamarin.comdeveloper.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.net  mingw.org mongodb.com mongodb.org  mysql.com  nginx.com  nginx.org  nixos.orgnodesource.comnotepad-plus-plus.org -openai.com openresty.org openssl.org opensuse.org openwrt.orglede-project.org packagist.org pcre.org perl.org cpan.org metacpan.org phantomjs.org php.netpolymer-project.orgpolymerproject.orgpostgresql.org -python.orgpythonhosted.org pypa.io pypi.org qt.ioqt-project.org r-project.orgraspberrypi.org raspbian.orgreadthedocs-hosted.comreadthedocs.comreadthedocs.ioreadthedocs.org redis.io redislabs.com remirepo.net rpmfusion.org ruby-lang.org rubygems.orgscala-lang.org scala-sbt.orgscientificlinux.org scoop.sh -shields.io -sqlite.org askubuntu.comblogoverflow.commathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.comstackoverflow.emailstackoverflowbusiness.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.comsublimetext.com -kernel.org  linux.org amp.devampproject.comampproject.netampproject.orgcdn.ampproject.org -cnamp.akamaized.netelectronjs.org -jquery.comjquerymobile.com jqueryui.com mochajs.org -nodejs.org openjsf.orglfai.foundationlinuxfoundation.org  unity.com unity3d.com!unityads.unity3d.com -ads#unityads.unitychina.cn -ads  unpkg.com -v8.dev v8project.org videojs.com videolan.org vim.org wireshark.org x.orgxda-developers.com xda-cdn.com xposed.info yarnpkg.com zsh.org -@ -HAVEIBEENPWNEDhaveibeenpwned.compwnedpasswords.com -+ -XIMALAYA ximalaya.com  xmcdn.com - - -ITUNES!12diasdepresentesdeitunes.com12diasderegalosdeitunes.cl12diasderegalosdeitunes.co!12diasderegalosdeitunes.co.cr!12diasderegalosdeitunes.co.ni!12diasderegalosdeitunes.co.ve12diasderegalosdeitunes.com"12diasderegalosdeitunes.com.co"12diasderegalosdeitunes.com.hn"12diasderegalosdeitunes.com.ni"12diasderegalosdeitunes.com.ve12diasderegalosdeitunes.cr12diasderegalosdeitunes.gt12diasderegalosdeitunes.hn12diasderegalosdeitunes.pe 12joursdecadeauxdeitunes.comapple-itunes.cn -cn itun.es itunbes.com ituneas.comitunes-apple.cn -cnitunes-radio.net  itunes.ca  itunes.co itunes.co.th -itunes.com  itunes.hk  itunes.mx -itunes.org -itunes.rio  itunes.usitunes12days.comitunesapple.cn -cnitunesessentials.comitunesfestivals.comitunesiradio.comituneslatino.comituneslogin.netitunesmatch.comitunesparty.comitunesradio.cn -cnitunesradio.comitunesradio.com.cn -cnitunesradio.rioitunesradio.tvitunesradio.twitunesstore.co itunesu.com itunesu.net iutunes.com wwwitunes.comitunes-apple.com.akadns.net - -WHOLEFOODSMARKETwholecitiesfoundation.orgwholefoodsmarket.comwholekidsfoundation.orgwholeplanetfoundation.org - -KNOVEL -knovel.com -' - WTEAM-ADS ads.wteam.xyz -ads -c -YOUKU -kumiao.com  youku.com  ykimg.com -mmstat.com soku.com -cibntv.net -& - BAICAONETWORKbaicaonetwork.com -& - VAGINACONTESTvaginacontest.com - -SKYsky sky.com skyassets.comskyoceanrescue.comskyoceanrescue.deskyoceanrescue.it skysports.com skysports.fr skysports.ieskysportsonline.comskysportsracing.com -4 -ZB -zb.app -zb.com zb.io zb.live - -HEROKU  heroku.co -heroku.com  heroku.me herokuapp.com herokucdn.comherokucharge.com herokussl.comheroku-app.comheroku-charge.com codei.sh -codeish.co -codeish.io - -QINIUstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com -qiniup.com  qnsdk.com  qnssl.com - -SPOTIFY byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com -e - ATOM-DATA-ADS atom-data.io -adsanalytics-data.io -ads ironbeast.io -ads - -BINANCEbinance.charity binance.cloud binance.combinance.vision binancezh.com bnbstatic.com yshyqxx.com -. -CHINADIGITALTIMESchinadigitaltimes.net -" - EPICBROWSERepicbrowser.com - -TINYURL tinyurl.com - - BRIDGESTONE bridgestone  bandag.cc -bandag.comblizzak-juken.jpbookmybridgestonetyre.combridgestone-asiapacific.combridgestone-bandag.combridgestone-brand.com#bridgestone-business-service.jpbridgestone-korea.co.krbridgestone-plt-eng.combridgestone-tac-oman.combridgestone.clbridgestone.cn -cnbridgestone.co.crbridgestone.co.idbridgestone.co.inbridgestone.co.jpbridgestone.co.thbridgestone.combridgestone.com.arbridgestone.com.brbridgestone.com.cn -cnbridgestone.com.cobridgestone.com.mxbridgestone.com.sgbridgestone.com.twbridgestone.com.vnbridgestoneamericas.combridgestonearena.combridgestonecntc.combridgestonecomercial.clbridgestonecomercial.co.crbridgestonecomercial.com.arbridgestonecomercial.com.brbridgestonecomercial.com.cobridgestonecomercial.com.mxbridgestonegolf.combridgestonegz.combridgestonela.combridgestonemarketing.combridgestonemerchandise.com bridgestonenationalfleet.combridgestoneperformance.com#bridgestoneperformancemedia.net bridgestonerapiddelivery.combridgestonerewards.combridgestonesyb.combridgestonetire.cabridgestonetire.combridgestonetyre.com.mybridgestonevan.combridgestonewx.combs-adreview.com bs-awh.ne.jp  bsw.co.jp -bsw.jpcarcare-and-tireshop.jpdaytontrucktires.com ecoforme.jp gcrtires.comjsbridgestone.commenshin-channel.com monitrix.net mr-tireman.jpmybridgestoneeducation.com playz.jp -potenza.jpprodrive-japan.comstore-bridgestonesports.com thetread.com tiresplus.com cfna.combastropfirestone.comcrossfitfirestone.com firestone.clfirestone.co.crfirestone.com.arfirestone.com.brfirestone.com.cofirestone.com.mxfirestonebpco.comfirestonecomercial.clfirestonecomercial.co.crfirestonecomercial.com.arfirestonecomercial.com.brfirestonecomercial.com.cofirestonecomercial.com.mx!firestonecompleteautocare.comfirestonedrivestore.comfirestoneip.comfirestonerewards.comfirestonetire.cafirestonetire.comhibdontire.comwheelworks.netnokiantyres.cn -cnnokiantyres.com - - INSTAGRAM!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.com - - -KINDLE4RSSkindle4rss.com -* -PAGECDN pagecdn.com -pagecdn.io - -BOC -boc.cnbankofchina.combocaviation.com  boccfc.cn  bocgi.com bocgins.com  bochk.com bocichina.com bocigroup.com  bocim.combocservices.com.cn - -CATEGORY-SECURITIES-CN -sse.com.cn sseinfo.com szse.cn cninfo.com.cn ajzq.com avicsec.com  ccnew.com cczq.com cczq.net cfsc.com.cn cfzq.com cgws.comchinalions.comchinastock.com.cn cicc.com -ciccwm.com cindasc.com cjsc.com cnhbstock.com cnht.com.cn csco.com.cn csfounder.com  ctsec.com daton.com.cn  dfham.com dfzq.com.cn dgzq.com.cn dtsbc.com.cn dwjq.com.cn dxzq.net easec.com.cnessence.com.cn ewww.com.cn fcsc.cnfzfinancing.com  gf.com.cn ghsl.cn ghzq.com.cn gjzq.com.cn gkzq.com.cn glsc.com.cn grzq.com gsgh.cn gszq.com gtja.com gtja.com  guodu.com guosen.com.cn gyzq.com.cn hazq.com hczq.com hfzq.com.cn -hlzqgs.comhongtastock.com hrsec.com.cn hsbcqh.com.cn htsc.com.cn  htsec.comhuajingsec.com huajinsc.cn huayingsc.com hx168.com.cn hxzq.cn i618.com.cn  iztzq.com jhzq.com.cnjpmorganchina.com jyzq.cn  jzsec.com kysec.cn lczq.com lhzq.comlongone.com.cnmorganstanleyhuaxin.com mszq.com nesc.cn njzq.com.cnnomuraoi-sec.com -shgsec.com -shhxzq.com shzq.com stocke.com.cn -swhysc.com swsc.com.cn tebon.com.cn tfzq.com  tpyzq.com vanho.cn west95582.com wkzq.com.cn wlzq.cn wxzq.com xcsc.com xsdzq.cn xyzq.com.cn ydsc.com.cn ykzq.com ytzq.com zdzq.com.cn zszq.com -ztfsec.com -zts.com.cn -99fund.com -abc-ca.com avicfund.cn  bdfund.cn -bobbns.com boscam.com.cn -bosera.com ccfund.com.cn cfund108.comchanganfunds.comchinanature.com.cncib-fund.com.cncryuantafund.com -ctfund.com dbfund.com.cn efunds.com.cn fadfunds.comforesightfund.com founderff.com -fsfund.com -ftfund.comfullgoal.com.cn furamc.com.cngalaxyasset.com gefund.com.cngffunds.com.cn  gfund.com gowinamc.com -hffunds.cn hftfund.comhongdefund.com -hsfund.com huaan.com.cn -igwfmc.com  jsfund.cn  jtamc.com mfcteda.commsjyfund.com.cn -nffund.com  ocfund.cnorient-fund.com phfund.com.cnpostfund.com.cn -py-axa.com  swsmu.comtaipingfund.com.cn thfund.com.cntongtaiamc.com ubssdic.com xf-fund.com xqfunds.com  ydamc.com yhfund.com.cn -zhfund.com -zofund.com -5ifund.com -fund123.cn -howbuy.com lufunds.com  zlfund.cn -: -EBAY21centuryaccess.com4ebaytraders.com adcommerce.cn -cn adcommerce.tv appforebay.cn -cnappsonebay.net -asebay.com -baazee.com -bidbay.combidorbuyindia.com billpoint.combillpoint.info billpoint.tv billpoint.usbillpointnewzealand.com blogebay.combookclubcorner.combuiltfromebay.com buyitnow.com buyitnow.net buyitnow.org buyitnow.tvbuyitnowshop.net cafr.ca carebay.comcargigileads.com  cebay.comcollective99.comcommerceos.comconnectcommerce.cn -cn"connectcommerce.com.cn -cnconnectcommerce.hkconnectcommerce.infoconnectcommerce.tv connectedcommerce.cn -cnconnectedcommerce.comconnectedcommerce.tvcrececonebay.comcreditcardsbay.com cyber-bay.cn -cncyber-bay.com.cn -cncyber-bay.info cyber-bay.org -dba.dk dealbay.com dealtime.com  didce.com  douya.orgdreamtoplay.com  e-bay.com e-bay.it  e-bay.net eachpay.com eachpay.net  ebahy.comebay-authenticate.netebay-confirm.comebay-course.com ebay-cz.comebay-delivery.comebay-discoveries.comebay-fashion.com ebay-inc.com ebay-inc.net ebay-inc.orgebay-online.comebay-sales.comebay-stories.com ebay-us.comebay-vacation.com ebay.at ebay.be ebay.ca ebay.chebay.cn -cn -ebay.co.nz -ebay.co.uk -ebay.co.ve -ebay.co.za ebay.com ebay.com.ar ebay.com.au ebay.com.cn -cn ebay.com.ec ebay.com.hk ebay.com.mt ebay.com.my ebay.com.ph ebay.com.sg ebay.de ebay.es ebay.fr ebay.ie ebay.in ebay.it ebay.jp ebay.lt ebay.mn ebay.net.cn -cn ebay.nl ebay.org ebay.org.cn -cn ebay.ph ebay.pk ebay.pl ebay.sg ebay.us ebay.vn -ebay.yn.cn -cn -ebay.zj.cn -cn -ebay25.com -ebay68.com  ebaya.com ebayads.com ebayads.netebayadvertising.cn -cnebayadvertising.comebayanunsios.netebayauction.comebayaustralia.comebayauthenticate.com.cn ebaybags.com ebaybank.comebaybenefits.comebayboutique.com -ebayca.com -ebayca.org ebaycafe.com ebaycar.comebaycareers.com ebaycbt.co.kr ebaycdn.net ebaychina.netebayclassifiedsgroup.comebayclassifieds.cn -cnebayclassifieds.com"ebayclassifieds.com.cn -cnebayclassifieds.infoebayclassifieds.orgebayclassifieds.tvebayclassifiedsgroup.comebayclassifiedsgroup.infoebayclassifiedsgroup.orgebayclassifies.com ebayclub.com ebaycoins.com ebaycom.comebaycommercenetwork.comebaycourse.com  ebayd.com -ebayde.com ebaydesc.cn -cnebaydesc.com.cn -cnebaydlassifieds.com -ebaydns.cn -cn ebaydts.com ebayedu.comebayeletro.comebayenterprise.cn -cnebayenterprise.com!ebayenterprise.com.cn -cnebayenterprise.infoebayenterprise.netebayenterprise.tv ebayetc.comebayexpress.sgebayfashion.comebayfashion.netebayforcharity.orgebayforeclosure.orgebayfrance.comebayglobalshipping.com ebaygroup.com ebayhabit.com ebayheels.com ebayhots.com ebayimg.com ebayinc.com ebayinc.net ebayinc.org ebayincconnectedcommerce.netebayinkblog.comebayinternetsalestax.com -ebayit.comebayjewelry.com ebayjob.com -ebayla.orgebaylisting.com ebaylocal.netebaylocationsdevacances.com ebaymag.comebaymainstreet.com ebaymall.comebaymarketplace.net ebaymotors.ca ebaymotors.cn -cnebaymotors.comebaymotors.com.cn -cnebaymotors.orgebaymotorsblog.com ebaynow.com ebaynyc.com -ebayon.com -ebayon.netebayoncampus.com ebayopen.comebayopensource.comebayopensource.netebaypakistan.net ebaypark.com ebayparts.com ebaypedia.cn -cnebaypedia.com.cn -cnebayprivacycenter.com -ebayqq.com ebayradio.com ebayrtm.comebayseller.comebayshoesstore.com ebayshop.comebayshop111.comebayshopping.cn -cnebayshopping.com.cn -cnebayshopping.orgebaysocial.com ebaysocial.ru ebaysoho.com ebaysohos.com ebaystatic.cn -cnebaystatic.com ebaystore.comebaystore77.com ebaystores.cn -cn ebaystyle.comebaysweden.com  ebayt.comebaytechblog.comebaytopratedseller.netebaytrading.comebaytradingassistant.com -ebaytv.org ebayuae.netebayvakantiehuizen.com ebayvalet.comebayvietnam.netebayworlds.com  ebayy.com edisebay.com  eebay.com epinions.comeu-consumer-empowerment.comexpertmaker.comfairmarket.comfragrancebay.comfrancemail.com half.com half.com.cn -cn half.tvhalfcanada.com halfjapan.comhandbagsoutletebay.com  iebay.com irribay.comitsbetterwhenyouwinit.com liketwice.comliveauction.com milofetch.com musicbay.netmyconstructionworld.net -myebay.com  nebay.net paisapay.cc paisapay.info paisapay.tv premobay.comprivatemarketplaces.netprivatemarketplaces.us prostores.cn -cn prostores.comprostores.com.cn -cn rethink.net shopibay.net shoping.comsourcingforebay.com.cnsourcingforebay.netsourcingforebay.tv speybay.comstoresense.com -svpply.com telebay.com telesell.com texttobuy.orgtheebayshop.comtheopportunityproject.orgtowerauction.com  vendu.com weareebay.comwatch-ebay.org wwwdecide.com wwwebay.com wwwebay.net wwwwebay.com xindelu.comxn--3et96bj49ahpq.comxn--4vq475g.comxn--4vq477m.comxn--7hv594h.comxn--7hvy28f.cn -cnxn--hb4aw0g.comxn--q41am8x.comxn--qoq462m.comxn--tkry91n.comxn--ubt498knmf.comxn--xsq421m.comxn--xsq605n.comxn--xsq959n.comxn--yf1at58a.com  xxbay.com  yibei.orggittigidiyor.netgittigidiyorsikayet.com -gumtree.sg  jijiji.ca kiji.ca kijii.ca kijij.ca  kijiji.ca kijijiauto.cakijijiautos.ca kijijidns.cn -cnkijijidns.com.cn -cnkijijiforbusiness.ca -kijijii.ca kijijiraps.ca kijji.ca -kijjiji.ca automobile.fr  mobile.demobileinternational.com&mobileinternational.com.cn -cn -q10.jp qoo10.jpachievementanalytics.comcdn-terapeak.comlistinganalytics.netmarketexecutive.net tearapeak.com terapeack.com terapeak.ca terapeak.cn -cn terapeak.comterapeak.com.hk terapeak.hk terapeak.info teraperk.com terrapeak.com thebayuk.com -nexcat.com nexpart.com -nexpart.tv renchead.comwhisolutions.com wrenchead.com-)ebay-25-assets.s3-us-west-1.amazonaws.com -Q -SSRCLOUDairport-gov-cn.comcnix-gov-cn.comxn--d4ty0ojsqzfd.com - -CBScbs showtime cbs.comcbsaavideo.comcbscorporation.com cbsi.com -cbsi.video -cbsiam.com  cbsig.net -cbsimg.netcbsinteractive.comcbsistatic.com cbsivideo.com cbsnews.comcbspressexpress.com cbssports.com cbsstatic.com cbssvideo.com -viacbs.com -viacom.com viacomcbs.comviacomcbspressexpress.com paramount.com - -DIDI didi-food.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comxiaojukeji.com - -GEEKPARK geekpark.net -, -RENREN -renren.comrenren-inc.com -{ -OREILLY oreil.ly oreilly.comoreilly.com.cn -cnoreilly.revieworeillystatic.com -orl.ly -s -BMWmini4myminicard.comaboutyourmini.comatlantaminidealers.comgreatergothammini.com!midatlanticbmwmotorcycles.commini-abudhabi.commini-antilles.frmini-bahrain.commini-bosnia.com mini-clubs-international.commini-connected.atmini-connected.bemini-connected.chmini-connected.co.ukmini-connected.commini-connected.czmini-connected.demini-connected.dkmini-connected.eemini-connected.esmini-connected.fimini-connected.frmini-connected.iemini-connected.itmini-connected.ltmini-connected.lumini-connected.lvmini-connected.nlmini-connected.nomini-connected.plmini-connected.ptmini-connected.semini-corporate-sales.com mini-coupe.camini-dubai.com -mini-e.commini-egypt.commini-georgia.commini-grouparchiv.demini-grouparchive.commini-jordan.com mini-ksa.commini-kuwait.commini-lebanon.com mini-me.com mini-oman.commini-qatar.commini-srilanka.commini-stjohns.camini-stjohns.commini-tahiti.commini-vietnam.commini-windsor.camini-windsor.com mini.am mini.at mini.be mini.bg mini.by mini.ca mini.cc mini.ch mini.cl -mini.co.cr -mini.co.id -mini.co.il -mini.co.kr -mini.co.me -mini.co.th -mini.co.uk -mini.co.za mini.com mini.com.ar mini.com.bn mini.com.br mini.com.co mini.com.cy mini.com.do mini.com.ec mini.com.gr mini.com.gt mini.com.hr mini.com.mk mini.com.mo mini.com.mt mini.com.mx mini.com.pa mini.com.pe mini.com.ph mini.com.pl mini.com.py mini.com.sg mini.com.tr mini.com.tw mini.com.uy mini.cz mini.de mini.dk mini.dz mini.es mini.fi mini.fr mini.gp mini.hu mini.ie mini.in mini.is mini.it mini.jp mini.kz mini.lu mini.ma mini.md mini.mq mini.mu mini.my mini.nc mini.nl mini.no mini.pt mini.re mini.ro mini.rs mini.ru mini.se mini.si mini.sk mini.tm mini.tn mini.ua -mini101.caminiargentina.comminibrossard.caminibrossard.com minicanada.caminicaribbean.com miniccrc.ca minicooper.caminidealer.comminidealernet.comminidowntown.caminidowntown.com minidrivingexperienceusa.com minidurham.caminidurham.com  minie.com -minifs.comminigeorgian.caminigrandriver.comminihalifax.caminihalifax.com -minihk.comminiinvasion.caminiitalianjob.comminikelowna.caminikelowna.comminilangley.caminilangley.com minilat.com minilaval.ca minilaval.com minilondon.ca minilondon.cominimarkham.caminimarkham.comminimoncton.caminimoncton.comminimontrealcentre.caminimontroyal.caminimontroyal.comminimotoringrewards.comminimotoringschool.comminimotorsport.commininanaimo.camininanaimo.comminioakville.comminiofmonrovia.comminipetfriendly.comminirichmond.caminirichmond.comminisaskatoon.caminisaskatoon.com minishop.ca minispace.comminispecialoffers.caminispygear.comministcatharines.caministeagathe.comministjohns.caminitakesthestates.comminitoronto.caminitroisrivieres.ca miniusa.comminiusaservice.comminiusatires.comminivalueservice.comminivancouver.caminivaughanwest.caminivaughanwest.comminivictoria.caminivictoria.comminivilledequebec.caminivilledequebec.comminiwholesaleconnect.com miniwidget.caminiwindsor.comminiworkshop.comminiyaletown.capugetsoundmini.comshopminiusa.comsouthfloridamini.com -trmini.comtroisrivieresmini.comyours-customised.mini.combmwapprovedusedbmw.combaltimorebmw.combayareabmw.combmw-abudhabi.combmw-adventskalender.combmw-albania.combmw-antilles.frbmw-art-journey.combmw-arts-design.com bmw-asia.com bmw-auslieferungszentrum.combmw-authority-vehicles.combmw-bahrain.combmw-businessdrive.combmw-calgary.ca bmw-carit.debmw-classic.combmw-clubs-international.combmw-connected-drive.combmw-connecteddrive.aebmw-connecteddrive.atbmw-connecteddrive.bebmw-connecteddrive.bgbmw-connecteddrive.cabmw-connecteddrive.chbmw-connecteddrive.co.nzbmw-connecteddrive.co.ukbmw-connecteddrive.co.zabmw-connecteddrive.combmw-connecteddrive.com.aubmw-connecteddrive.com.brbmw-connecteddrive.com.cybmw-connecteddrive.com.hrbmw-connecteddrive.com.kwbmw-connecteddrive.com.mtbmw-connecteddrive.czbmw-connecteddrive.debmw-connecteddrive.dkbmw-connecteddrive.eebmw-connecteddrive.esbmw-connecteddrive.fibmw-connecteddrive.frbmw-connecteddrive.grbmw-connecteddrive.hubmw-connecteddrive.iebmw-connecteddrive.itbmw-connecteddrive.jpbmw-connecteddrive.krbmw-connecteddrive.ltbmw-connecteddrive.lubmw-connecteddrive.lvbmw-connecteddrive.mxbmw-connecteddrive.mybmw-connecteddrive.nlbmw-connecteddrive.nobmw-connecteddrive.plbmw-connecteddrive.ptbmw-connecteddrive.robmw-connecteddrive.rubmw-connecteddrive.sebmw-connecteddrive.sgbmw-connecteddrive.sibmw-connecteddrive.skbmw-connecteddrive.twbmw-corporate-sales.combmw-diplomatic-sales.combmw-driving-center.co.krbmw-drivingexperience.com bmw-dubai.com -bmw-eg.com bmw-fleet.net bmw-ghana.combmw-golfsport.com bmw-group.com bmw-group.netbmw-grouparchiv.debmw-grouparchives.com -bmw-gta.cabmw-i-pure-impulse.com bmw-i.jp bmw-int1.com bmw-iraq.combmw-jordan.combmw-konzernarchiv.de bmw-ksa.combmw-kuwait.com -bmw-lao.labmw-lebanon.combmw-m-safetycar.com  bmw-m.combmw-mdrivetour.com -bmw-me.combmw-military-sales.combmw-motorcycle.combmw-motorcycles.vnbmw-motorrad-abudhabi.com bmw-motorrad-authorities.combmw-motorrad-dubai.combmw-motorrad-motorsport.com!bmw-motorrad-now-or-never.com&"bmw-motorrad-service-inclusive.combmw-motorrad-test-ride.combmw-motorrad.atbmw-motorrad.bebmw-motorrad.bgbmw-motorrad.bhbmw-motorrad.bobmw-motorrad.cabmw-motorrad.chbmw-motorrad.clbmw-motorrad.cobmw-motorrad.co.idbmw-motorrad.co.krbmw-motorrad.co.nzbmw-motorrad.co.thbmw-motorrad.co.ukbmw-motorrad.co.zabmw-motorrad.combmw-motorrad.com.arbmw-motorrad.com.aubmw-motorrad.com.brbmw-motorrad.com.dobmw-motorrad.com.hrbmw-motorrad.com.mxbmw-motorrad.com.mybmw-motorrad.com.pebmw-motorrad.com.pybmw-motorrad.com.trbmw-motorrad.crbmw-motorrad.czbmw-motorrad.debmw-motorrad.dkbmw-motorrad.dzbmw-motorrad.ecbmw-motorrad.eebmw-motorrad.esbmw-motorrad.fibmw-motorrad.frbmw-motorrad.grbmw-motorrad.gtbmw-motorrad.hubmw-motorrad.inbmw-motorrad.itbmw-motorrad.jpbmw-motorrad.lubmw-motorrad.mabmw-motorrad.nlbmw-motorrad.nobmw-motorrad.pabmw-motorrad.plbmw-motorrad.ptbmw-motorrad.robmw-motorrad.rsbmw-motorrad.rubmw-motorrad.sabmw-motorrad.sebmw-motorrad.sibmw-motorrad.skbmw-motorrad.svbmw-motorrad.twbmw-motorrad.uabmw-motorrad.uybmw-motorsport.combmw-mountains.combmw-museum.combmw-museum.netbmw-nigeria.com bmw-oman.com bmw-ottawa.cabmw-pakistan.combmw-plant-munich.combmw-pma.com.sgbmw-powertrain.combmw-product-highlights.com bmw-qatar.combmw-routes.com -bmw-rp.combmw-rrdays.combmw-saudiarabia.combmw-security-vehicles.combmw-special-sales.combmw-sports.com bmw-sudan.combmw-tahiti.combmw-tunisia.combmw-vancouver.ca bmw-voli.me bmw-welt.com bmw-welt.net bmw-welt.tvbmw-werk-berlin.de bmw-world.com bmw-world.net bmw-world.tvbmw-worldfinal.combmw-yachtsport.com -bmw-yeg.ca bmw-yemen.com -bmw.am -bmw.at -bmw.az -bmw.ba -bmw.bb -bmw.be -bmw.bg -bmw.bm -bmw.bs -bmw.by -bmw.ca -bmw.cc -bmw.ch -bmw.cl  bmw.co.ao  bmw.co.cr  bmw.co.id  bmw.co.il  bmw.co.jp  bmw.co.ke  bmw.co.kr  bmw.co.nz  bmw.co.th  bmw.co.uk  bmw.co.za bmw.com -bmw.com.ar -bmw.com.au -bmw.com.bd -bmw.com.bn -bmw.com.bo -bmw.com.br -bmw.com.cn -cn -bmw.com.co -bmw.com.cy -bmw.com.do -bmw.com.ec -bmw.com.ge -bmw.com.gt -bmw.com.kh -bmw.com.ky -bmw.com.mk -bmw.com.mo -bmw.com.mt -bmw.com.mx -bmw.com.my -bmw.com.ni -bmw.com.pa -bmw.com.pe -bmw.com.ph -bmw.com.py -bmw.com.sg -bmw.com.sv -bmw.com.tr -bmw.com.tw -bmw.com.uy -bmw.com.ve -bmw.cw -bmw.cz -bmw.de -bmw.dk -bmw.dz -bmw.ee -bmw.es -bmw.fi -bmw.fr -bmw.gp -bmw.gr -bmw.hn -bmw.hr -bmw.ht -bmw.hu -bmw.ie -bmw.in -bmw.is -bmw.it -bmw.kg -bmw.kz -bmw.lc -bmw.lk -bmw.lt -bmw.lu -bmw.lv -bmw.ly -bmw.ma -bmw.md -bmw.mn -bmw.mq -bmw.mu -bmw.nc -bmw.nl -bmw.no -bmw.pl -bmw.ps -bmw.pt -bmw.re -bmw.ro -bmw.rs -bmw.se -bmw.si -bmw.sk -bmw.sn -bmw.tm -bmw.tt -bmw.ua -bmw.uz -bmw.vn bmwarchiv.at bmwarchiv.debmwartjourney.com bmwasia.combmwauslieferungszentrum.com bmwbikes.com  bmwbkk.de -bmwccrc.cabmwcenternet.combmwchampionship.combmwchampionshipusa.combmwcharitygolf.combmwcitychallenge.combmwclassic.combmwcolorado.combmwconnecteddrive.combmwcustomapparel.com bmwdcsnet.netbmwdealercareers.combmwdealerdirect.combmwdelawarevalley.com bmwfilms.combmwgroup-classic-heart.combmwgroup-classic.combmwgroup-gaad.combmwgroup-plants.combmwgroup-posdigital.combmwgroup-werke.com bmwgroup.at bmwgroup.com bmwgroup.net bmwgroup.jobsbmwgroupclassic.combmwgroupdesignworks.combmwgroupdirect.combmwgroupfs.combmwgroupinfobahn.combmwgroupna.com  bmwhk.com bmwi.ca bmwi.jpbmwiventures.combmwjamaica.com -bmwlat.combmwlifestyle.ca bmwm.combmwmagazine.combmwmagazine.de bmwmass.com bmwmass.net  bmwmc.netbmwmontreal.cabmwmotorcycles.combmwmotorcycleusa.combmwmotorrad.co.krbmwmotorrad.com.aubmwmotorrad.com.phbmwmotorrad.com.sgbmwmotorradhk.combmwmotorshowblog.combmwmotorsport.combmwmperformance.com bmwmuseum.netbmwmyanmar.combmwofannapolis.combmwofcentralpa.combmwoftulsa.combmwondemandusa.com bmworegon.combmwperformancecenter.combmwpittsburgh.combmwproductnews.com bmwsafari.com -bmwsfl.com -bmwsfl.net -bmwshop.cabmwspecialoffers.ca bmwsports.combmwstartupgarage.com bmwstep.combmwstepconnections.combmwsummerschool.combmwtampabay.com -bmwusa.combmwusatires.combmwusaservice.combmwusfactory.combmwusrideracademy.combmwvalueservice.combmwwholesaleconnect.com bmwworld.com bmwworld.net bmwworld.tvbmwzentrum.combrand-protection-team.comcencoastbmw.com chargenow.comchargenowusa.comchicagolandbmw.comconnected-drive.com daytonbmw.comdealerspeed.net desertbmw.com dreambmw.ca grupobmw.com guambmw.comhackthedrive.com hawaiibmw.com iaablog.comlasvegasbmw.com m-power.comminneapolisbmw.comminneapolisbmw.netmotorshowblog.com mybmw.ca  mybmw.comnewhampshirebmw.com  nmbmw.comocbmwdealers.comoffresspecialesbmw.ca park-now.com parkinfo.com -pdxbmw.com -phxbmw.compre-bmwgroup.jobspugetsoundbmw.com rentaride.com rentaride.derhodeislandbmw.comsdcountybmw.comshopbmwmotorcycles.comshopbmwusa.com socalbmw.comstlouisbmw.netthe-m-festival.comtristatebmw.comvancouverbmwretailers.cawashingtondcbmw.com alfera.com.hk alfera.com.my  alfera.in  alfera.myalphera-finance.co.inalphera-finance.com.hkalphera-finance.in -alphera.ca alphera.co.in alphera.co.nz alphera.comalphera.com.esalphera.com.hkalphera.com.my -alphera.de -alphera.es -alphera.ie -alphera.in -alphera.my alphera.netalpherafinance.com.hkalpherafinancialservices.esalpherafinancialservices.in alpherafs.caalpherafs.co.nzalpherafs.com.hkalpherafs.com.my alpherafs.ie alpherafs.in alpherafs.my premiumfs.de alphabet.asia alphabet.at alphabet.be alphabet.biz alphabet.chalphabet.co.hualphabet.co.ukalphabet.co.za alphabet.comalphabet.com.cn -cnalphabet.com.esalphabet.com.lvalphabet.com.mxalphabet.com.plalphabet.com.pt alphabet.cz alphabet.de alphabet.es alphabet.eu alphabet.fr alphabet.info alphabet.jp alphabet.lt alphabet.lu alphabet.lv alphabet.mxalphabet.net.cn -cn alphabet.noalphabet.org.uk alphabet.pl alphabet.pt alphabet.uk alphabet.usalphabetfinance.netelectricluxury.comrolls-roycecullinan.comrolls-roycemotorcars.comrolls-roycemotorcarsna.com  rrtis.comspiritofecstasy.com - -CTRIP c-ctrip.com colinker.com ctrip.cn ctrip.co.id ctrip.co.kr ctrip.co.th  ctrip.com ctrip.com.hk ctrip.my ctrip.sg ctripbiz.com ctripbuy.hk ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw izuchebao.com  lvtds.com  shuntu.cn -skysea.com  suanya.cn -suanya.com -tieyou.com -toptown.cn toursbms.com trip.com tripcdn.com -vipdlt.com - -HBO cinemax.comforthethrone.com hbo.com hboasia.com  hbogo.com hbogoasia.com hbogoasia.hk -hbomax.com -hbonow.com  maxgo.com -) -LIANJIA lianjia.com  ljcdn.com -o -UNITY  unity.com unity3d.com!unityads.unity3d.com -ads#unityads.unitychina.cn -ads -N -CNBC cnbc.com -cnbcfm.com -nbcuni.comnbcudigitaladops.com - -CODE code.org -2 -KU6 ku6.com -ku6cdn.com -ku6img.com -\ -TAIKANG taikang.comtaikanglife.comtaikangzhijia.comtkhealthcare.com -` -GEMFURY  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com - - INMEDIAHK inmediahk.net -' - UBERADS-ADS uberads.com -ads - -WHO who.int - - APPLE-UPDATEappldnld.apple.com gg.apple.comgnf-mdn.apple.comgnf-mr.apple.com gs.apple.com ig.apple.commesu.apple.comns.itunes.apple.comoscdn.apple.comosrecovery.apple.com skl.apple.comswcdn.apple.comswdist.apple.comswdownload.apple.comswpost.apple.comswscan.apple.comupdates-http.cdn-apple.comupdates.cdn-apple.com xp.apple.com - -GEOLOCATION-CN -42r.cn -5566ua.com aurorapush.cn -e0n.cn japps.cn jchat.io -jiguang.cn jmlk.co jpush.cn jpush.io jpushoa.com -jsurvey.cn  jvoice.cn -kc9.cn -n0q.cn pushcfg.com -s0n.cn mobmore.com  umeng.comumengcloud.com  umsns.com umtrack.com -uyunad.comwhalecloud.comalog.umeng.com -ads alog.umengcloud.com -ads -w.cnzz.com -ads bootcss.com -bootcdn.cnphpcomposer.com acadn.cn  acadn.com bbbcdns.com  dlgslb.cn -dlgslb.net  dwion.com fastcdn.comfastcdn.com.cn  flxdns.cn -flxdns.com globalcdn.cn mcadn.cn  tlgslb.cn -tlgslb.com -maoyun.commaoyuncloud.cnmaoyuncloud.com pkoplink.com qingcache.com qingcloud.comstaticfile.org qbox.me  qiniu.com qiniucdn.com qiniudn.com qiniudns.com -qiniup.com  qnsdk.com  qnssl.com  ucloud.cn ufileos.com  aicdn.com upai.com upaiyun.com  upcdn.net  upyun.com  51cdn.com  8686c.com  cdn30.orgchinanetcenter.com  lxdns.com -lxdns.info  lxdns.org ourdvsss.com speedws.info speedws.org -wangsu.com -wscdns.com wscdns.info -wscdns.org yfcache.com -yfcalc.com yfcloud.com  yfdts.net  yfp2p.net -yfscdn.net yunfancdn.com -boc.cnbankofchina.combocaviation.com  boccfc.cn  bocgi.com bocgins.com  bochk.com bocichina.com bocigroup.com  bocim.combocservices.com.cnccb-life.com.cn ccb.com -ccbfund.cnccbfutures.comccbintl.com.hkccbleasing.com ccbseoul.comccbtrust.com.cn cignacmb.comcmb-leasing.com cmbchina.com cmbi.com.hkcmbwinglungbank.com cmfchina.comicbc icbc-ltd.com icbc-uk.com icbc-us.com -icbc.co.id icbc.com.cn icbc.com.mo icbc.com.pe icbc.com.sg icbcasia.com icbcbr.com.bricbclondon.com -icbcmy.comicbcstandard.comicbcstandardbank.comicbcstandardresources.comicbcstandardsecurities.com icbcswiss.com icbccs.com.cn  95516.com unionpay.comunionpayintl.comunionpaysecure.com abchina.com bankcomm.combankofbeijing.com.cn bosc.cn -bsb.com.cn ccb.comcgbchina.com.cn -cib.com.cncitibank.com.cn cmbc.com.cn hsbc.com.cn -hxb.com.cn njcb.com.cn psbc.com spdb.com.cn  whccb.com -sse.com.cn sseinfo.com szse.cn cninfo.com.cn ajzq.com avicsec.com  ccnew.com cczq.com cczq.net cfsc.com.cn cfzq.com cgws.comchinalions.comchinastock.com.cn cicc.com -ciccwm.com cindasc.com cjsc.com cnhbstock.com cnht.com.cn csco.com.cn csfounder.com  ctsec.com daton.com.cn  dfham.com dfzq.com.cn dgzq.com.cn dtsbc.com.cn dwjq.com.cn dxzq.net easec.com.cnessence.com.cn ewww.com.cn fcsc.cnfzfinancing.com  gf.com.cn ghsl.cn ghzq.com.cn gjzq.com.cn gkzq.com.cn glsc.com.cn grzq.com gsgh.cn gszq.com gtja.com gtja.com  guodu.com guosen.com.cn gyzq.com.cn hazq.com hczq.com hfzq.com.cn -hlzqgs.comhongtastock.com hrsec.com.cn hsbcqh.com.cn htsc.com.cn  htsec.comhuajingsec.com huajinsc.cn huayingsc.com hx168.com.cn hxzq.cn i618.com.cn  iztzq.com jhzq.com.cnjpmorganchina.com jyzq.cn  jzsec.com kysec.cn lczq.com lhzq.comlongone.com.cnmorganstanleyhuaxin.com mszq.com nesc.cn njzq.com.cnnomuraoi-sec.com -shgsec.com -shhxzq.com shzq.com stocke.com.cn -swhysc.com swsc.com.cn tebon.com.cn tfzq.com  tpyzq.com vanho.cn west95582.com wkzq.com.cn wlzq.cn wxzq.com xcsc.com xsdzq.cn xyzq.com.cn ydsc.com.cn ykzq.com ytzq.com zdzq.com.cn zszq.com -ztfsec.com -zts.com.cn -99fund.com -abc-ca.com avicfund.cn  bdfund.cn -bobbns.com boscam.com.cn -bosera.com ccfund.com.cn cfund108.comchanganfunds.comchinanature.com.cncib-fund.com.cncryuantafund.com -ctfund.com dbfund.com.cn efunds.com.cn fadfunds.comforesightfund.com founderff.com -fsfund.com -ftfund.comfullgoal.com.cn furamc.com.cngalaxyasset.com gefund.com.cngffunds.com.cn  gfund.com gowinamc.com -hffunds.cn hftfund.comhongdefund.com -hsfund.com huaan.com.cn -igwfmc.com  jsfund.cn  jtamc.com mfcteda.commsjyfund.com.cn -nffund.com  ocfund.cnorient-fund.com phfund.com.cnpostfund.com.cn -py-axa.com  swsmu.comtaipingfund.com.cn thfund.com.cntongtaiamc.com ubssdic.com xf-fund.com xqfunds.com  ydamc.com yhfund.com.cn -zhfund.com -zofund.com -5ifund.com -fund123.cn -howbuy.com lufunds.com  zlfund.cn citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk citicsf.com clsa.comcncbinternational.com -csc108.com csci.hk -ecitic.com1234567.com.cn 18.cn  18.com.cn  dfcfw.com eastmoney.comeastmoneyfutures.com emsec.hk guba.com.cn cebbank.com ceblease.com -eb-ind.com ebasset.com ebchina.comebchinaintl.com -ebf.com.cn  ebfcn.com ebfortune.com ebtrust.com ebscn-am.com  ebscn.comeverbright.com  secec.comsunlife-everbright.com -pingan.com pingan.com.cn pingan.com.hk yqb.com taikang.comtaikanglife.comtaikangzhijia.comtkhealthcare.com -58.com  58.com.cn 5858.com  58che.com 58xueche.com -anjuke.comanjukestatic.com chinahr.com -daojia.com diandao.org fang.com  sofun.com soufunimg.com  jxedt.com zhuancorp.comzhuanspirit.comzhuanzhuan.com c-ctrip.com colinker.com ctrip.cn ctrip.co.id ctrip.co.kr ctrip.co.th  ctrip.com ctrip.com.hk ctrip.my ctrip.sg ctripbiz.com ctripbuy.hk ctripteam.com doticloud.com easytrip.com hhtravel.comhhtravel.com.tw izuchebao.com  lvtds.com  shuntu.cn -skysea.com  suanya.cn -suanya.com -tieyou.com -toptown.cn toursbms.com trip.com tripcdn.com -vipdlt.com dangdang.com ddimg.cn -ele.me elemecdn.com eleme.cn  ganji.comganjistatic1.com3.cn  300hu.com -360buy.com 360buyimg.com -360top.com -7fresh.com baitiao.comblackdragon.com  caiyu.comchinabank.com.cn -dao123.comjcloud-cdn.comjcloud-live.comjcloud-oss.com -jcloud.comjcloudcache.com jcloudcs.com jclouddn.com jcloudec.com jcloudlb.comjcloudlive.com jcloudlv.com jcloudoss.com jcloudss.comjcloudstatic.comjcloudvideo.com  jclps.com -jd-app.com  jd-ex.com jd.cn jd.co.th -jd.com jd.hk jd.id jd.ru jdcache.com jdcloud.com jdcloudcs.comjdcloud-api.comjddapeigou.com jddebug.com jddglobal.com jdjinrong.com  jdpay.com jdpaydns.com jdx.com jdwl.comjingdongjinrong.com -jingxi.com -jkcsjd.com -joybuy.com  joybuy.eslinglonglife.com mayshijia.com minitiao.com  ocwms.com paidaojia.cn -paipai.comprestodb-china.com qianxun.comqingzhouip.com toplife.com -vg.com wangyin.com  wdfok.com yhd.com yihaodian.comyihaodianimg.com yiyaojd.com yizhitou.comads.union.jd.com -ads c-nfa.jd.com -adscps.360buy.com -ads -jzt.jd.com -ads stat.m.jd.com -ads img-x.jd.com -ads lianjia.com  ljcdn.com manmanbuy.com dianping.com -maoyan.com meituan.com meituan.net  mtyun.com  neixin.cn sankuai.com mogu.com mogucdn.com mogujie.com -pddpic.com pinduoduo.com yangkeduo.com  smzdm.com -zdmimg.com cnsuning.com -suning.comsuningcloud.comsuningestate.comsuningholdings.com 40017.cn -17u.cn 17u.net 17usoft.com 17usoft.net  elong.comelongstatic.com -ly.com  vancl.com vanclimg.com  vcimg.com -youzan.com yzcdn.cn youzanyun.com -ziroom.comziroomapartment.com 3dmgame.com 3304399.net 4399.com 4399api.com 4399dmw.com -4399er.com4399youpai.com 5054399.com img4399.com acfun.cn aixifan.com apilog-web.acfun.cn -ads -acplay.netdandanplay.com -ali213.net -acg.tv acgvideo.com -b23.tv biliapi.com biliapi.net bilibili.combilibiligame.net biligame.com biligame.net bilivideo.com  hdslb.com im9.com -mincdn.com$ upos-hz-mirrorakam.akamaized.net biji.com -ddmogo.com -igetget.cn igetget.com luojilab.com  mogoo.com -sao.cn saolife.com dmzj.com  douyu.com douyu.tv douyucdn.cn douyucdn2.cn douyuscdn.com douyutv.com gamersky.com -gcores.com gitv.cn gitv.tv huya.com msstatic.com 71.am  iqiyi.com iqiyipic.com -pps.tv -ppsimg.com qiyi.com qiyipic.com -qy.net -71edge.coma.ckm.iqiyi.com -adsad.m.iqiyi.com -ads afp.iqiyi.com -adsc.uaa.iqiyi.com -ads cloudpush.iqiyi.com -ads"cm.passport.iqiyi.com -adscupid.iqiyi.com -ads#emoticon.sns.iqiyi.com -ads!gamecenter.iqiyi.com -ads!hotchat-im.iqiyi.com -adsifacelog.iqiyi.com -adsmbdlog.iqiyi.com -ads msg.71.am -adsmsg.video.qiyi.com -ads msg2.video.qiyi.com -ads#policy.video.iqiyi.com -adsyuedu.iqiyi.com -ads  jjwxc.net ku6.com -ku6cdn.com -ku6img.com kkmh.comkuaikanmanhua.com gifshow.com ksapisrv.com kuaishou.com -yximgs.com log-sdk.gifshow.com -adswlog.kuaishou.com -ads  kgimg.com  kugou.com -le.com lecloud.com -lemall.com letv.com letvcdn.com letvimg.com miaopai.com -mihoyo.com bh3.com  pplive.cn -pplive.com pptv.com qingting.fm  sfacg.com -61.com -taomee.com -tapimg.com -taptap.com  tgbus.com tiancity.comtiancitycdn.com u17.com u17i.com u17t.com -vgtime.com ximalaya.com  xmcdn.com -kumiao.com  youku.com  ykimg.com -mmstat.com soku.com -cibntv.net -duowan.com dwstatic.com -yy.com yystatic.com  zhanqi.tv -heytea.com chiphell.com -douban.com  douban.fm doubanio.com erji.net -hacpai.com  ld246.com -nga.cn 178.com -ngabbs.com ngacn.cc saraba1st.com  zhihu.com  zhimg.com  feng1.comrongechain.comsf-airlines.comsf-cityrush.comsf-express.comsf-financial.com sf-saas.comsf-tech.com.cn sfcar.hk sffix.cn sfgy.org 36kr.com 36krcdn.com -caixin.com cctv.cn cctv.com cctvpic.com chinaepg.cn chinalive.com citv.net.cn cnms.net.cn cntv.cn cntv.com.cn -cctvlib.cncctvlibrary.cncctvlib.com.cncctvlibrary.com.cn -cctvpro.cncctvpro.com.cn  cntvwb.cn gjgbdszt.cngjgbdszt.com.cngjgbdszt.net.cn  ipanda.cn -ipanda.com ipanda.com.cn -ipanda.net livechina.cn livechina.comolympicchannelchina.cn tvcc.cn tvcc.com.cn%!xn--fiq53l6wcx3kp9bc7joo6apn8a.cn%!xn--fiq53l90et9fpncc7joo6apn8a.cn-)xn--fiq53l6wcx3kp9bc7joo6apn8a.xn--fiqs8s%!xn--kprv4ewxfr9cpxcc7joo6apn8a.cn-)xn--kprv4ewxfr9cpxcc7joo6apn8a.xn--fiqs8s zggbdszt.cnzggbdszt.com.cnzggbdszt.net.cnzygbdszt.net.cn chinanews.comchinanews.com.cn -cns.com.cn ecns.cn  dgtle.com geekpark.nethoopchina.com.cn hupu.com hupucdn.com  shihuo.cn coolbuy.com  ifanr.com ifanr.inifanrusercontent.com -ifanrx.com -minapp.com jiemian.comjiemian.com.cn -lancdn.comlandiannews.com  wsoso.com  ifeng.com ifengimg.comphoenixcenter.cn fengedu.comifengweekly.com 6655.com cooldock.com -ithome.com lapin365.com ruanmei.com -saayaa.com win7china.com win8china.com sohu.com -sohucs.com -itc.cn solidot.org  sspai.com tmtpost.com chaindd.com -72whys.com checkzeit.com -tivitv.com tigeek.net.cntmtsmartlife.comtmtsmartrun.com feng.com fengimg.com wfdata.club ynet.cn ynet.com ynet.com.cn aiganggu.comdanjuanfunds.com -imedao.comsnowballsecurities.com -xueqiu.com stcn.comcaijing.com.cn  hexun.com  cnfol.com cnfolimg.com zqrb.cn -nbd.com.cn cnstock.com 21jingji.com  yicai.com  cs.com.cn  ssajax.cn ssimg.cn stockstar.com -jrj.com.cn  jrjimg.cn -cls.cncailianpress.comwallstreetcn.com jianyuweb.com wallstcn.com 10jqka.com.cn thsi.cn -ths123.com -dzh.com.cn  gw.com.cn -yundzh.comhainanairlines.com hnacargo.com  hnair.com 10044.cn jbcz.tvjibencaozuo.comsinopec-usa.com sinopec.comsinopecgroup.comsinopecnews.com.cnsinopecsales.com -csdl.ac.cn  las.ac.cn  fuwai.com pkuh6.cn puh3.net.cnhospital.pku.edu.cnss.bjmu.edu.cn 115.com 3type.cn 4paradigm.com  51job.com 51jobcdn.comyingjiesheng.comyingjiesheng.netzhiding.com.cn -afdian.net afdiancdn.com agora.io -agoraio.cn agoralab.co -antutu.com bitauto.combitautoimg.com cheyisou.com  yiche.com  yccdn.com shimo.im  yuque.com chinaso.com -pg0.cn -chinaz.com -chinaz.net caiyunai.com caiyunapp.com coolapk.comcoolapkmarket.comcoolapkmarket.net c-t.workcowtransfer.com dida365.com geetest.com#geetest.datasink.sensorsdata.cn hellofont.cnhellowebfont.com0,hellofontpreview.oss-cn-beijing.aliyuncs.com-)hellowebfonts.oss-cn-beijing.aliyuncs.com hanyi.com.cnfontstar.com.cnfoundertype.com ipip.net jianshu.com -jianshu.io jinshuju.netjinshujucdn.com gotokeep.com keepcdn.com  lagou.com lgstatic.com baidupan.com -lanzou.com lanzous.com woozooo.com -liepin.com -lietou.comlietou-static.com mafengwo.cn mafengwo.com mafengwo.net  meitu.com meitudata.com moji.com mojichina.com  polyv.net videocc.net -renren.comrenren-inc.com vaptcha.com vaptcha.net wamawama.com -wiwide.com -sojump.com -wjx.cn wjx.com wjx.top zcmbc.com.cn zdns.cn zdns.net.cn zdns.org.cn zdnscloud.biz zdnscloud.cn zdnscloud.comzdnscloud.com.cnzdnscloud.info zdnscloud.netzdnscloud.net.cnzdnscloud.org.cnchinesemooc.org -cnmooc.orgicourse163.org icourses.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com cnki.net  apabi.comcnthinkers.com  cqvip.comhuijistatic.com huijiwiki.com moegirl.orgmoegirl.org.cn cugbonline.cn  guokr.comwanfangdata.com.cn speiyou.com -xesimg.com xueersi.com banmaaike.comxiaoyuankousuan.com ybccode.com yuanfudao.com yuansouti.com yuantiku.com zhihuishu.com  coding.me -coding.net csdn.net -csdnimg.cn  deepin.cn -deepin.com  deepin.io -deepin.org  gitee.comjinrishici.com  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com oschina.net  pgyer.com -tracup.com frontjs.comruby-china.orgrubyconfchina.org mysxl.cn -sxl.cn  sxlcdn.cnsegmentfault.com  sifou.com -tipdim.orgxueyuanjun.com alibaba -alipay -taobao tmall a.alimama.cn -adsacjs.aliyun.com -adsadash.m.taobao.com -ads!adashbc.m.taobao.com -ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com -ads adashx.m.taobao.com -ads$adashx4ae.ut.taobao.com -ads#adashx4yt.m.taobao.com -ads#adashxgc.ut.taobao.com -adsadsh.m.taobao.com -adsafp.adchina.com -adsafp.alicdn.com -ads agoodm.m.taobao.com -ads#agoodm.wapa.taobao.com -ads alipaylog.com -adsamdc.alipay.com -adsamdc.m.taobao.com -ads api.wapa.taobao.com -ads#api.waptest.taobao.com -adsapoll.m.taobao.com -ads#appdownload.alicdn.com -adsatanx.alicdn.com -adsatanx2.alicdn.com -adscbu01.alicdn.com -adscdn0.mobmore.com -adsclick.aliyun.com -ads&click.mz.simba.taobao.com -adscm.ipinyou.com -ads cm.mlt01.com -ads!dsp.simba.taobao.com -adserr.taobao.com -adsex.mobmore.com -ads ex.puata.info -ads!fav.simba.taobao.com -ads$feedback.whalecloud.com -adsff.win.taobao.com -ads fm.p0y.cn -adsg.click.taobao.com -ads -g.tbcdn.cn -adsgma.alicdn.com -adsgtms01.alicdn.com -adsgtms02.alicdn.com -adsgtms03.alicdn.com -adsgtms04.alicdn.com -adshydra.alibaba.com -ads'hz.pre.tbusergw.taobao.net -ads#hz.tbusergw.taobao.net -ads i.ipinyou.com -adsinit.phpwind.com -ads!intl.wapa.taobao.com -ads$intl.waptest.taobao.com -ads"jxlog.istreamsche.com -adslog.umtrack.com -adsm.intl.taobao.com -adsm.simba.taobao.com -adsmatch.p4p.1688.com -ads%material.istreamsche.com -ads mlt01.com -ads&nbsdk-baichuan.alicdn.com -ads&nbsdk-baichuan.taobao.com -ads"osfota.cdn.aliyun.com -ads osupdate.aliyun.com -ads&osupdateservice.yunos.com -ads%pindao.huoban.taobao.com -adspush.wandoujia.com -adsre.m.taobao.com -ads re.taobao.com -ads&redirect.simba.taobao.com -adsrj.m.taobao.co -adsrj.m.taobao.com -adssdkinit.taobao.com -adsshow.re.taobao.com -adssimaba.taobao.com -adssimba.m.taobao.com -ads!srd.simba.taobao.com -adsstats.ipinyou.com -ads strip.taobaocdn.com -ads$tanxlog.istreamsche.com -adstejia.taobao.com -adstemai.taobao.com -ads!tns.simba.taobao.com -ads tongji.linezing.com -ads tvupgrade.yunos.com -adstyh.taobao.com -adsuserimg.qunar.com -adsw.m.taobao.com -adsyiliao.hupan.com -adsalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.comalibabadns.com -alicdn.com alidayu.com -alidns.com alikunlun.comaliyun-inc.comaliyun-iot-share.com -aliyun.com aliyuncdn.com aliyuncs.com hichina.comica-alliance.org kunlunaq.com kunlunar.com kunlunca.com kunluncan.com kunlunea.com kunlungem.com kunlungr.com kunlunhuf.com kunlunle.com kunlunli.com kunlunno.com kunlunpi.com kunlunra.com kunlunsa.com kunlunsc.com kunlunsl.com kunlunso.com kunlunta.com kunlunvi.com kunlunwe.com mxhichina.com ddurl.to dingding.xin dingtalk.cn dingtalk.com dingtalk.netdingtalkapps.com laiwang.com lwurl.toteambition.comteambition.netteambitionapis.com 25pp.com  56che.com  95095.com 9game.cn -aliapp.orgalibaba-inc.com alibaba.comalibabacapital.comalibabacorp.comalibabadoctor.comalibabafuturehotel.comalibabagroup.comalibabaplanet.comalibabaued.comalibabausercontent.com alifanyi.comalihealth.com.cn alihealth.hk -aliimg.com -alikmd.com alimama.com alimebot.com -alimei.com alios.cn -alipay.comalipayobjects.com aliplus.comaliresearch.com alisoft.com alisports.com alitianji.comaliunicorn.com -aliway.com aliwork.com alixiaomi.comalizhaopin.com alyms.cn -asczwa.comasczxcefsv.com -asmlink.cn atatech.org -b2byao.com  bazai.com  bcvbw.com  cheng.xin cloudeagle.cn damai.cn dayu.com -dfkhgj.com doctoryou.ai doctoryou.cn dongting.com -dratio.com emas-poc.com -gongyi.xin ialicdn.com iconfont.cn -ics.design -jhgtgb.com -kanbox.com -lazada.comliangxinyao.com m-now.cn -maitix.com  mdeer.com mei.commiaostreet.com  mshare.cc nic.xinphilanthropy.xin phpwind.com phpwind.netqingtingtrip.com  rexpos.cn saee.org.cn shenjing.com  shuqi.comshuqireader.com sparenode.com  supet.com  ttpod.com wandoujia.comxinlingshou.cn yowhale.com yunos-inc.com  yunos.comyushanfang.com -zuodao.comaliexpress.com aliexpress.ru sm.cn cainiao.comcainiao.com.cncainiao-inc.com freshhema.com hemamax.com -hemaos.com hemashare.cn shyhhema.com 1688.com etao.com juhuasuan.comlingshoujia.com -mashort.cn pailitao.com -taobao.com -taobao.org taobaocdn.comtaobizhong.comtaopiaopiao.com tb.cn tbcache.com tburl.in  tmall.com tmall.ru tmalltv.com tmjl.ai alitrip.com  feizhu.cn -feizhu.com -fliggy.com  fliggy.hk -iuynfg.com amap.com amapauto.com autonavi.com  gaode.com  xiami.com xiami.fm  xiami.net  b3log.org a.baidu.com -ads ad.duapps.com -ads ad.player.baidu.com -ads adm.baidu.com -adsadscdn.baidu.com -adsadx.xiaodutv.com -adsae.bdstatic.com -ads afd.baidu.com -ads als.baidu.com -ads&api.mobula.sdk.duapps.com -ads"api.tuisong.baidu.com -adsappc.baidu.com -adsb.bdstatic.com -adsbaichuan.baidu.com -adsbaidustatic.com -adsbaidutv.baidu.com -adsbanlv.baidu.com -ads bar.baidu.com -ads"bdimg.share.baidu.com -adsbdplus.baidu.com -ads bj.bcebos.com -adsbtlaunch.baidu.com -ads c.baidu.com -ads cb.baidu.com -adscbjs.baidu.com -adscjhq.baidu.com -adscleaner.baidu.com -ads click.bes.baidu.com -adsclick.hm.baidu.com -adsclick.qianqian.com -ads"cm.baichuan.baidu.com -ads cm.baidu.com -adscm.pos.baidu.com -ads cpro.baidu.cn -adscpro.baidu.com -ads!cpro.baidustatic.com -ads!cpro.tieba.baidu.com -ads"cpro.zhidao.baidu.com -adscpro2.baidu.com -ads"cpro2.baidustatic.com -ads crs.baidu.com -adsdatax.baidu.com -ads dd713.bj.bcebos.com -ads dl.client.baidu.com -adsdl.ops.baidu.com -adsdl1sw.baidu.com -adsdl2.bav.baidu.com -adsdlsw.baidu.com -adsdlsw.br.baidu.com -ads!dl-vip.bav.baidu.com -ads(dl-vip.pcfaster.baidu.co.th -ads#download.bav.baidu.com -ads"download.sd.baidu.com -adsdrmcmm.baidu.com -ads dup.baidustatic.com -ads dxp.baidu.com -ads dzl.baidu.com -ads e.baidu.com -adseclick.baidu.com -adsecma.bdimg.com -adsecmb.bdimg.com -adsecmc.bdimg.com -ads eiv.baidu.com -ads em.baidu.com -adsentry.baidu.com -ads ers.baidu.com -ads f10.baidu.com -ads#fc-feed.cdn.bcebos.com -adsfclick.baidu.com -adsfeed.baidu.com -adsfexclick.baidu.com -ads g.baidu.com -adsgimg.baidu.com -adsguanjia.baidu.com -ads hc.baidu.com -ads hm.baidu.com -adshmma.baidu.com -ads hpd.baidu.com -adsidm.bce.baidu.com -adsidm-su.baidu.com -adsiebar.baidu.com -adsikcode.baidu.com -adsimg.taotaosou.cn -adsimg01.taotaosou.cn -adsj.br.baidu.com -adskstj.baidu.com -ads log.music.baidu.com -ads m1.baidu.com -ads ma.baidu.com -adsmobads.baidu.com -ads"mobads-logs.baidu.com -adsmpro.baidu.com -adsmsite.baidu.com -adsneirong.baidu.com -adsnsclick.baidu.com -ads#nsclickvideo.baidu.com -adsopenrcv.baidu.com -ads$pc.videoclick.baidu.com -ads pos.baidu.com -adspups.bdimg.com -ads%push.zhanzhang.baidu.com -ads qianclick.baidu.com -adsrelease.baidu.com -adsres.mi.baidu.com -ads"rigel.baidustatic.com -ads#river.zhidao.baidu.com -ads rj.baidu.com -adsrplog.baidu.com -ads s.baidu.com -adss.cpro.baidu.com -ads!sa.tuisong.baidu.com -adssclick.baidu.com -adssestat.baidu.com -adsshadu.baidu.com -adsshare.baidu.com -ads"snippet.pos.baidu.com -adssobar.baidu.com -adssobartop.baidu.com -adsspcode.baidu.com -adsstat.v.baidu.com -ads su.bdimg.com -adssu.bdstatic.com -ads t10.baidu.com -ads t11.baidu.com -ads t12.baidu.com -ads tk.baidu.com -adstkweb.baidu.com -ads"tob-cms.bj.bcebos.com -adstongji.baidu.com -adstoolbar.baidu.com -adstracker.baidu.com -adstuijian.baidu.com -ads*uat1.bfsspadserver.8le8le.com -ads#ubmcmm.baidustatic.com -adsucstat.baidu.com -adsulic.baidu.com -ads ulog.imap.baidu.com -adsunion.baidu.com -ads!unionimage.baidu.com -adsutility.baidu.com -ads utk.baidu.com -ads videopush.baidu.com -adsvv84.bj.bcebos.com -adsw.gdown.baidu.com -ads w.x.baidu.com -adswangmeng.baidu.com -adsweishi.baidu.com -ads$wenku-cms.bj.bcebos.com -ads%wisepush.video.baidu.com -ads wm.baidu.com -adswn.pos.baidu.com -adsznsv.baidu.com -adszz.bdstatic.com -adszzy1.quyaoya.com -ads zuoyebang.cc zuoyebang.com -zybang.com baidu -91.com -aipage.com apollo.auto baidu.cn  baidu.com baidu.com.cn baidubce.combaiducontent.com baidupcs.combaidustatic.com -baifae.com baifubao.com -bcebos.com  bdimg.com bdstatic.com bdtjrcv.com  bdydns.cn -bdydns.com -bdydns.net chuanke.com  dlnel.com  dlnel.org -duapps.com -dwz.cn -hao123.com hao123img.com -hao222.com -haokan.com jomocdn.net jomodns.com -mipcdn.com  nuomi.com quyaoya.com smartapps.cn  tieba.com tiebaimg.com xianfae.com xiaodutv.com -bytecdn.cn bytedance.com bytedance.net bytedns.net byteimg.combyteoversea.com -douyin.com huaxiong.com ibytedtos.comjokecommunity.comneihanshequ.com -pstatp.com -snssdk.com toutiao.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.com -wukong.comwukongwenda.cnwukongwenda.com zijiecdn.com zijiecdn.net  zjcdn.com  baike.com -ixigua.comixiguavideo.com ixgvideo.com  365yg.com didi-food.comdidiaustralia.blogdidichuxing.comdidiglobal.comdidimobility.co.jpdidistatic.comxiaojukeji.com  dbank.com dbankcdn.com harmonyos.com hicloud.com hihonor.com honor.cn -huawei.comhuaweicloud.com  vmall.com vmallres.com cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn -wps.cn  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com -ks-cdn.com  ksyun.com ksyungslb.com flyme.cn meizu.cn  meizu.com  mzres.com 126.com 126.link 126.net 127.com 127.net 163.com163industry.com 163mail.com 163qiyukf.com -163yun.com 166.net -haowu.linkicourse163.org  kaola.com -lofter.com  nease.netnetease-inc.com netease.com -netease.im -qiyukf.com ydstatic.com yeah.net -youdao.comanalytics.163.com -ads crash.163.com -ads crashlytics.163.com -ads g.163.com -ads coloros.com finzfin.com -heytap.com heytapcs.comheytapdownload.comheytapimage.com -myoppo.com nearme.com.cn oppo.cn oppo.com  oppo.mobioppodigital.com  oppoer.meoppomobile.com oppopay.com opposhop.cn -realme.com realmebbs.comrealmemobile.com oneplus.com -oneplus.cn oneplus.net opstatics.comoneplusbbs.com h2os.com 75.team -75team.com baomitu.com -360.cn 360.com -360-jr.com 360chou.com360daikuan.com360huzhubao.com -360jie.com360jinrong.net -360kan.com 360kuai.com  360os.com 360panyun.cn 360safe.com 360shouji.com 360taojin.com360totalsecurity.com 360tpcdn.com360webcache.com anquanke.com  haoso.com -haosou.com haosou.com.cn -haosou.net i360mall.com ludashi.com nicaifu.com  nzwgs.com  qhimg.com qhimgs0.com qhimgs1.com qhimgs2.com qhimgs3.com qhimgs4.com qhimgs5.com qhimgs6.com  qhmsg.com  qhres.com qhstatic.com qhupdate.com -qihuapi.cn qihucdn.com  qihoo.com qikucdn.com -so.com sou.com urlqh.cnxiaoluyouxuan.comxiaoluzhidian.com xjietiao.com -youhua.com  yunpan.cn  97973.com -picself.cn sina.cn sina.com sina.com.cn sina.net sinaapp.com sinaedge.com -sinaimg.cn sinaimg.com  sinajs.cn -sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.com 2016.sina.cn -adsad.sina.com.cn -adsadbox.sina.com.cn -ads!adimages.sina.com.hk -ads!adimg.mobile.sina.cn -ads adimg.uve.weibo.com -ads!adm.leju.sina.com.cn -ads ads.sina.com -adsalitui.weibo.com -adsapi.apps.sina.cn -ads appgift.sinaapp.com -ads#appsupdate.sinaapp.com -ads atm.sina.com -adsbeacon.sina.com.cn -ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com -ads%click.uve.mobile.sina.cn -ads click.uve.weibo.com -adscm.dmp.sina.cn -ads0#contentrecommend-out.mobile.sina.cn -ads$count.video.sina.com.cn -ads counter.sina.com.cn -adscre.dp.sina.cn -adscre-dp.sina.cn -adsd00.sina.com.cn -adsdcads.sina.com.cn -adsdl.kjava.sina.cn -ads dmp.sina.cn -adsdp.im.weibo.cn -ads game.weibo.cn -adsgame.weibo.com -ads"gw5.push.mcp.weibo.cn -ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn -ads"int.dpool.sina.com.cn -ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn -ads log.mix.sina.com.cn -ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn -ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn -adsnewspush.sinajs.cn -ads oascentral.sina.com -ads#oascentral.sina.com.hk -adsp4p.sina.com.cn -adspalmnews.sina.cn -adspay.mobile.sina.cn -adspfp.sina.com.cn -adspfpip.sina.com -ads!promote.biz.weibo.cn -ads r.dmp.sina.cn -adsrm.sina.com.cn -ads rs.sinajs.cn -adss.alitui.weibo.com -ads"s.img.mix.sina.com.cn -ads sapi.sina.cn -ads sax.sina.cn -adssax.sina.com.cn -adssaxn.sina.com.cn -adssaxs.sina.com.cn -ads sbeacon.sina.com.cn -ads"sdkapp.mobile.sina.cn -ads!sdkapp.uve.weibo.com -ads$sdkclick.mobile.sina.cn -ads slog.sina.cn -adsslog.sina.com.cn -ads'staticadm.leju.sina.com.cn -adstjs.sjs.sinajs.cn -ads"trends.mobile.sina.cn -ads"u1.img.mobile.sina.cn -ads&wapwbclick.mobile.sina.cn -ads!wbapp.mobile.sina.cn -ads wbapp.uve.weibo.com -ads#wbclick.mobile.sina.cn -ads$wbpctips.mobile.sina.cn -adswidget.weibo.com -ads woocall.sina.com.cn -adszc.biz.weibo.com -adszymo.mps.weibo.com -ads -go2map.com sogo.com  sogou.com sogoucdn.com dns.pub  dnsapi.cn  dnspod.cn -dnspod.com dnspod.com.cn -dnspod.net -dnspod.org  dnsv1.com  dnsv2.com  dnsv3.com  dnsv4.com  dnsv5.com doh.pub ad.qq.com -ads ad.qun.qq.com -ads!adfilter.imtt.qq.com -ads adping.qq.com -adsadpm.app.qq.com -adsadsclick.qq.com -adsadsfile.qq.com -adsadshmmsg.qq.com -adsadslvfile.qq.com -adsadslvseed.qq.com -ads%adsmind.apdcdn.tc.qq.com -adsadsqqclick.qq.com -adsadstestview.qq.com -adsadsview.qq.com -adsadsview2.qq.com -adsadv.app.qq.com -ads adver.qq.com -ads btrace.qq.com -adse.qq.com -adslog.tbs.qq.com -ads mpush.qq.com -ads mtrace.qq.com -ads push.qq.com -ads pgdt.gtimg.cn -ads -yuewen.com hongxiu.com lrts.me qdmm.com -qidian.com readnovel.com tingbook.com webnovel.com -xs8.cn xxsy.net -apcdns.net  cdn-go.cn cdntips.com foxmail.comfoxmail.com.cn gtimg.cn  gtimg.com gtimg.com.cn idqqimg.com imqq.com  myapp.com myqcloud.com -qcloud.com qcloudimg.com qlogo.cn qpic.cn -qq.com -qqmail.com  qzone.com -rtx.com.cnservicewechat.com smtcdns.com smtcdns.net -tencent.cn tencent.comtencent.com.cntencent.com.hktencent.net.cntencent-cloud.comtencentmusic.comtencentyun.com -tenpay.com -wechat.com -wegame.com wegame.com.cn -weiyun.com alloyteam.com imweb.io ivweb.io -mi.com -mi-img.com  mifile.cn miui.com -miwifi.com  xiaomi.cn -xiaomi.com -xiaomi.netxiaomiyoupin.com  00cdn.com  88cdn.com -sandai.netthunderurl.com -xunlei.com 10086.cn 139.comchinamobile.comchinamobileltd.com migucloud.com migu.cn -cmvideo.cn miguvideo.com andfx.cn  andfx.net -cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com -ctexcel.ca ctexcel.comctexcel.com.hk -ctexcel.fr -ctexcel.us -189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com -chntel.com  10010.com 10010.com.cnchinaunicom.comchinaunicom.com.cnchinaunicom.com.hkchinaunicomglobal.commychinaunicom.com  wo.com.cn -j-test.comguoxuedashi.com guoxuemi.com mojidict.com jikipedia.com haidilao.com0123456789.com 0379home.com -055110.com  05sun.com 0759job.com  100bt.com 100offer.com  11467.com -114chn.com 114piaowu.com 114shouji.com -119you.com 123juzi.com 123juzi.net 123u.com 1637.com  16888.com 16rd.com  17173.com 178linux.com  17989.com  17cdn.com 17house.com  18183.com 188.com 1905.com  19yxw.com 1nongjing.com  1ting.com 1zhe.com 21cn.com 2265.com 2288.org 2345.com 258.com 263.net 289.com 2cto.com 3000.com -310win.com -315che.com 3234.com 32r.com 3322.org 3387.com 33lc.com 3454.com 3456.cc -35.com 3533.com 360aiyi.com -360doc.com  360jq.com 360zhyx.com -365azw.com -365dmp.com -37.com 3733.com 3839.com -39.net 3conline.com 3d66.com -3elife.net 3h3.com 3yx.com  40407.com 500.com 500d.me -50bang.org -51.com 51.la -510you.com 51credit.com  51cto.com 51eshop.com 51gaifang.com 51hejia.com51jingying.com 51meishu.com -51sole.com 51wendang.com  51yes.com 5253.com  52hxw.com -52miji.com 52pk.com 52z.com 53kf.com -55.com -56.com 5577.com  55bbs.com  58pic.com  5bite.com 5fun.com 5gzm.net 5khouse.com 5you.com 66wz.com 68h5.com -6rooms.com 714.com 7230.com -72byte.com  7down.com 7k7k.com  7moor.com 7po.com -7x24cc.com -7xdown.com  818ps.com  84399.com 885.com -900.la 917.com 91danji.com 91yunxiao.com 9553.com 962.net 9718.com  99166.com 998.com 999d.com 99danji.com 9ht.com -9xgame.com 9xu.com a9vg.com -aardio.com -adxvip.com -afzhan.com agrantsem.com  aiemy.com aiketour.com  aiops.com  aipai.comairchangan.com airguilin.com aisee.tv aiskycn.com aiyunxiao.com -aizhan.comalittle-tea.com -allyes.com anfensi.com -anquan.org -anruan.com -aotrip.net  aoyou.com apk3.com apk8.com appchina.com -appinn.com  arpun.com babytree.combabytreeimg.com baidufree.combaifendian.com  baihe.com baixing.com baixing.netbamenzhushou.combangongziyuan.com baofeng.combaoxianshichang.com bcy.net bearychat.com beihaidc.combeijing-lipin.com bengbeng.com  benmi.com  berui.combestopview.com biancheng.net bianews.com bibaodao.com bidchance.com biddingx.com bihu.com -bio360.net  bio4p.com bio-equip.combiodiscover.com bishijie.com bitecoin.com biyehome.net bjcathay.com bobo.com bojianger.com -bokecc.com  boosj.com btcfans.com btgtravel.com bthhotels.com  btime.comcabbagebox.com caijingwu.com -caiyun.com cang.comcankaoxiaoxi.comcardbaobao.com -carnoc.com  cdn20.com  cecdc.com cecport.com centanet.com cerambath.org -ch.com chachaba.com changba.com chashebao.comchazhengla.com -che168.comchina-chair.comchina-nengyuan.com  china.comchinacache.comchinacache.netchinachugui.comchinadongchu.com chinafph.comchinakaoyan.comchinalawedu.com chinapay.com chinapp.netchinapubmed.net chinasspp.comchinatranslation.net chinaunix.netchinaweiyu.comchinawutong.com chinazns.comchongdiantou.com -chouti.com chuangxin.com chuansong.mechuansongme.com -chushou.tv chuyu.me  city8.com cjol.com clouddn.com cloudxns.com cnanzhi.com -cnbeta.com cnbetacdn.com cnblogs.com -cnepub.com  cnlaw.net cnzz.com cocodiy.com code666.com -cofeed.com -cofool.com coindog.comcontentchina.com  cpppf.org  cr173.com  crsky.com  csbew.com -csmjzs.com csslcloud.net -ctfile.com ctiforum.com ctoutiao.com  ctsbw.com -cubead.com  cwxzx.com -cyagen.com  cybtc.com cyol.com cyts.com cztv.com cztvcloud.com dadajiasu.com dadighost.com daguzhe.com dajiabao.com  dajie.com dajieimg.com dalongyun.com dangbei.com danji100.com -danji6.com daocloud.io daovoice.iodayukaoshi.com dazijia.com -dcdkjx.com  dd373.com  ddooo.com dedecms.com develenv.com -dginfo.comdgphospital.comdianchacha.com diandian.comdiandianqi.comdianwannan.comdingxiang-inc.com -diopic.net diyiyou.com dj99.com  docin.com dockerone.com -dockone.io dogedoge.com -donews.com -dongao.comdongguantoday.com dopa.com -douxie.com -downcc.com downxia.com -downyi.com -dpfile.comdreams-travel.comdrivergenius.com -dui.ai duiopen.com duoduocdn.com duokanbox.com -duomai.com duoshuo.com  duote.com dxpmedia.com -dxycdn.com  dyhjw.com dzsc.com dzw3.com  dzwww.com easesale.com  easiu.com eastday.com eastsoo.com -eayyou.com  ebico.com  ebrun.com -ecitic.com ecjobhome.com -edu.cn  eduei.com eeyy.com eflycloud.com elecfans.com emarbox.com -emumax.com enterdesk.comeoeandroid.com excelhome.net expreview.com extfans.comf.cx  faloo.com famulei.com  fanli.comfangxiaoer.com fanxian.com fastapi.net -feihuo.com feiniaomy.comfengkongcloud.com fengniao.comfengxian110.com  fenxi.com -fhldns.com  fimmu.com finchina.com fixdown.com  fqjob.net freebuf.com fugetech.com fuwj.com fxxz.com fyxz.com game234.com gameabc.com gamemei.com -gaodun.comgaoshouyou.comgaoxiaojob.com -gdjdxy.comgdliontech.com gdrc.com geilicdn.comgenelinkout.com  getui.com -gezida.com gfan.com -giocdn.com globrand.com gm86.com gmallbio.com  gmz88.comgobasearcher.com gold678.com  golue.comgongxiangcj.com goosail.com  goufw.com gree.comgreenxiazai.com growingio.com  gtags.net  guabu.com guaiguai.comguanaitong.comguanhaobio.com gucheng.com  guigu.org guoxinmac.com  gupzs.com gushiwen.orgguzhangting.com -gwdang.comgxairlines.com -gxb.io gzwanju.com h5uc.com hack520.com hackhome.com haishun.com hanboshi.com handanjob.comhangjiayun.com haolietou.com  haote.comhaoyouyinxiang.com hefei.cc -heisha.net  henha.com henkuai.com herostart.com  hiido.com hitv.com hiyd.com hktheone.com hn-cbec.com -hnrcsc.com hntv.tv hnyuyuhui.com hollycrm.com homeinns.com homekoo.comhongsanban.com -houdao.comhouyuantuan.com hteacher.net huanqiu.comhuashengdaili.com  huatu.com  huize.com  hujia.org hujiang.com hunantv.comhuochepiao.com huocheso.com  huxiu.com hxfy888.com hxsd.com iask.com -ibaotu.com ibuychem.com icaidao.com ichangtou.com idongdong.com iflytek.com  igao7.com -iheima.com ijiandao.com -ikafan.com im2maker.com  im-cc.com -imedao.com imgo.tv  imooc.com indienova.cominfinitynewtab.com  infoq.cominfoqstatic.com -ip-cdn.com  ip138.com ipinyou.com iranshao.com  irs01.com ishumei.com  it165.net  it168.com  it610.com  iteye.com -itjuzi.com  itmop.com  iyiou.com iyunxiao.com -izuche.com -jandan.net jb51.com  jdair.net jia.com jiameng.com jianbihua.com jianzhi8.com jiaodong.net jiaoyimao.com jiasuhui.com jiasule.com jiathis.com jiayuan.com jiazhao.com jiemeng8.comjikexueyuan.com jinianbi.comjinrongren.net  jinse.com  jinti.comjiqizhixin.com jisuanke.com jisuxia.com jiuzhilan.com jj20.com jkbl.com jmstatic.com job5588.com -job910.com  jobjm.com jsbc.com -jsrdgg.com jstv.com  jsyks.com juefeng.com -julive.com  jumei.com  juwan.com  juxia.com  jyimg.com k366.com kaifubiao.com kaixin001.com kameng98.com -kanimg.com kankanews.com kantianqi.net kanzhun.com kaopu001.comkeboyunxiao.com  kejet.net kf5.com -kimiss.com kingdee.com kkzj.com -kongfz.com koolearn.com -kouclo.com -koudai.com koudai8.com kq7.com  ksord.com  kuaaa.com kuaidi100.com kuaihou.com kuaizhan.com  kuqin.com -kuyiso.com lady8844.com lanhuapp.com laomaotao.net laomaotao.org  lascn.net  lawxp.com leanote.com ledu.comleetcode-cn.com leikeji.com leiphone.com leiting.com leju.com leturich.org lianmishu.com -liantu.com lianzhuli.comliaoxuefeng.com liba.com libaclub.comlieyunwang.com lightonus.com -likuso.com lingkou.com linkvans.com  linsn.com linuxidc.com liulanqi.net liuxiaoer.com live800.com liweijia.com lixinger.com lkkbrand.com longhoo.net -longre.comlongtugame.com longzhu.com  lotpc.com -loupan.com -lu.com luckyair.net  lufax.com lufaxcdn.com lunwengo.net luyouqi.com -lvmama.comlvsexitong.com  lxway.com -magedu.com maisanqi.com -mamecn.com manhuatai.com manmankan.com -mapbar.com mayi.com -mayihr.com -mcbang.com  mdpda.com mechina.org -mediav.com meifang.com meika360.com meilishuo.commeimingteng.com -meiqia.commeishichina.com meishij.netmengtuoshi.wang mgtv.commiaobolive.com miaozhen.com -miercn.com mijisou.com mikecrm.comminhangshi.com miusi.co mjia.cc -mmbang.com mmbang.info -mofang.com mofazhu.com mogu.com mogucdn.com mogujie.com -mokahr.com moleecel.commoocollege.com mop.com msanjia.com -mscbsc.com mukewang.com -mumayi.com -muomou.com muzhiwan.com -mydown.com mydrivers.com myshow360.net myyx618.com myzaker.com naixuecha.com netbian.com -newasp.netnewbandeng.com  newyx.net nowcoder.com nowscore.com  nruan.com ntalker.com nvsheng.com  nzbdw.com oadz.com  oeeee.com  offcn.com officese.com -oicq88.com  okooo.com -ol-cdn.com -ol-img.com oldboyedu.com -oneapm.com onegreen.net -oneyac.comonlinedown.netonlinesjtu.com onlylady.com -opdown.com oray.com  ottcn.com -oupeng.com -p2peye.com p5w.netpaipaibang.com paopaoche.net pc6.com -pcbeta.com -pchome.net  pcpop.com  peccn.com pgzs.compharmacodia.com piaoliang.compingplusplus.com pingwest.com -pingxx.com pintu360.com  pipaw.com  pipaw.net pptbest.com -pubyun.com  qc188.com qcc.com qcds.com qd8.com qd-metro.com qh24.com qiangbus.com qianjia.com qianlima.com qianzhan.comqiaobutang.com qichacha.com -qie.tv qifeiye.comqijiayoudao.netqingdaochina.orgqingdaonews.comqingsongchou.com qiumibao.com qizuang.com  qqddc.comqqgexingqianming.com qqrizhi.comqqshuoshuo.com -qschou.com -qtmojo.com -qudong.com -qugame.com  qunar.com qunarzz.com qyer.com rfchost.comrockyenglish.com rong360.com rtbasia.com  ruan8.com -runoob.com rzrc114.com  saibo.com sanguosha.com -sanwen.net  scdng.com scoregg.com -sczsxx.com sdo.com sec-wiki.com -sencdn.com seniverse.comsenlinjimore.com -sgamer.com shang360.com -shangc.netshanghairc.com shangzhibo.tvshanshuihotel.com sharejs.com shebiaotm.comshelter-china.comshelterdome.netshengdaosoft.comshenmayouxi.com  sheui.com shijiexia.com shixiseng.com shmetro.comshoujihuifu.comshouyoubus.com shrbank.comshuidichou.comshuidihuzhu.com shumensy.comshuoshuokong.com -shutcm.com -simei8.com simuwang.com sinesafe.com  sjwyx.com  skycn.com sllssrq.com -snimay.com  sobot.com sofreight.com softwhy.com -sojson.com -somode.com soso.com souqian.comsouthmoney.comsparkletour.comspringtour.com ssports.com starbaby.cc starbaby.com stockstar.com sun0769.com -sunrtb.com supermap.comsupermapcloud.com -sys321.com szfw.org szhk.com szzfgjj.com t1y5.com  taihe.comtaihuoniao.com tangeche.com tanx.com -tao123.com -taoche.com te5.com tenxcloud.comtianjimedia.comtianjin-air.comtianlailive.com -tianqi.com tietuku.com -tiexue.net timedoo.com tingyun.com titanar.com tjjt360.com  tmcdn.net -tobosu.com tom.com tongdun.net topthink.com touqikan.com travelsky.com trunktech.comtrustexporter.com trustutn.org  tudou.com tudouui.com tuer123.com tuicool.com -tuiwen.net  tujia.com  tuniu.com tutuapp.com  tuwan.com tuwanjun.com u.tools  ucbug.com -uggame.com uoko.com urselect.comurumqi-air.com  useso.com uuu9.com uzzf.com  v5875.com value500.com vamaker.com vdolady.com veryhuo.com veryzhun.com  vic18.com videojj.com  vijos.org vip.com  vobao.com -vpgame.comwangyangyang.vipwannianli8.com wanplus.com wanwushuo.com wanyiwang.com  wanyx.com -wdjimg.com wdzj.com  weand.com webterren.com weicaifu.com weidian.comweilaicaijing.comweilaiyunxiao.com weiphone.net weixing.com weiyangx.comwelltrend-edu.com wenjuan.comwhlovehome.com wicresoft.com -win007.com win8.netwindows10zj.comwindows7en.com windowszj.com winwin7.com wishdown.com  wmzhe.com wnhuifu.com wodingche.com  womai.com wonnder.com -wooyun.org worktile.comwoyaogexing.com  woyoo.com  wqiis.com wrating.com -wscdns.com  wtown.com  wumii.com -wuming.comwuximediaglobal.com  wywyx.com xafc.com  xbiao.com  xdwan.com -xfdown.com -xhscdn.comxiachufang.comxiaobaixitong.comxiaoe-tech.com xiaogouh5.comxiaohongshu.com  xiaoka.tv xiaokaxiu.comxiaomingtaiji.comxiaoxiongxitong.comxiaoyuxitong.com  xiayx.com xiazaiba.com xingjiesj.com xinhuanet.comxinrenxinshi.com xinshipu.comxingtan001.com xitong8.com xitu.com xiu8.com -xiucai.com xiziwang.net xmhouse.com  xnpic.com  xpgod.com -xsa239.comxuanchuanyi.com  xue51.com xuekanba.com xuexicha.com xundupdf.com  xycdn.com xywy.com -xzking.com yahui.cc -yaolan.com  yaoyl.com  yaozh.com -ycgame.com -yeepay.com -yeshen.com  yesky.com yh31.com  yigao.com yigoonet.com yihedoors.comyikaochacha.com yikexue.comyingjia360.comyinhang123.net yinxiang.com yinyuetai.comyinzhaowang.com -yiqifa.com -yiqifa.org yisu.com yitaifang.com  yiwan.com yixi.tv yizhibo.com  yjbys.com ynhr.com -yocajr.com -youboy.com youjiao.com youke.co youlian.fun youshang.com youxiake.com youxihezi.net youxila.com youxiniao.com youxigt.com  youzu.com yoyojie.com  yoyou.com  ypppt.com -yslyhr.com  ysten.com -yuewen.com  yunaq.com yunba.io yundaex.com yundasys.com -yundun.com yunqishi.net yunshipei.com yunxiao.com yunzhijia.com  yupoo.com  yuzua.com  yxbao.com -yxdown.com -yytcdn.com -zampda.net zampdsp.com zastatic.com -zbjimg.com zczj.com -zdfans.com zgjm.org -zgjsks.com  zglxw.com  zgzcw.com zhanbuba.comzhangyoubao.com zhanzhang.net zhaodanji.com zhaokao.net zhaopin.com zhcw.com -zhenai.com  zhibo8.cc  zhidx.com zhifang.com -zhipin.com zhiziyun.com zhongkao.comzhuangjiba.comzhuanyewanjia.comzhuayoukong.com zhubajie.com zhugeapi.net zhugeio.com  zimuzu.io zixiaomao.com zixuntop.com  zjstv.com zmengzhu.com zongheng.com -zpb365.com -zrblog.net zsxq.com  zuche.com zuchecdn.com zuhaowan.com zuidaima.com zuowen8.comzuowenwang.net jindidata.comtianyancha.comzhuanxiandai.com -fm3838.comlarsonlimited.com runsheng.com vzuu.com -zoom3g.com -zoomyou.cn chaoxing.com chaoxing.cc - -MOVEFREEkeepmovingwithmovefree.com move-free.net movefree.cn -cn movefrees.commovefreeoffers.commovefreerewards.comschiffvitamins.com -< -SHOWTIMEANYTIMEshowtimeanytime.com showtime.com -K -PINGAN -pingan.com pingan.com.cn pingan.com.hk yqb.com - -PORNHD -pornhd.com - -REDTUBE redtube.com - -RENZHE renzhe.cloud - - NETEASE-ADSanalytics.163.com -ads crash.163.com -ads crashlytics.163.com -ads g.163.com -ads -D -RUST rust-lang.org  rustup.rs  crates.io docs.rs -1 -TIANCITY tiancity.comtiancitycdn.com - - 58TONGCHENG -58.com  58.com.cn 5858.com  58che.com 58xueche.com -anjuke.comanjukestatic.com chinahr.com -daojia.com diandao.org fang.com  sofun.com soufunimg.com  jxedt.com zhuancorp.comzhuanspirit.comzhuanzhuan.com - - ALIBABA-ADS a.alimama.cn -adsacjs.aliyun.com -adsadash.m.taobao.com -ads!adashbc.m.taobao.com -ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com -ads adashx.m.taobao.com -ads$adashx4ae.ut.taobao.com -ads#adashx4yt.m.taobao.com -ads#adashxgc.ut.taobao.com -adsadsh.m.taobao.com -adsafp.adchina.com -adsafp.alicdn.com -ads agoodm.m.taobao.com -ads#agoodm.wapa.taobao.com -ads alipaylog.com -adsamdc.alipay.com -adsamdc.m.taobao.com -ads api.wapa.taobao.com -ads#api.waptest.taobao.com -adsapoll.m.taobao.com -ads#appdownload.alicdn.com -adsatanx.alicdn.com -adsatanx2.alicdn.com -adscbu01.alicdn.com -adscdn0.mobmore.com -adsclick.aliyun.com -ads&click.mz.simba.taobao.com -adscm.ipinyou.com -ads cm.mlt01.com -ads!dsp.simba.taobao.com -adserr.taobao.com -adsex.mobmore.com -ads ex.puata.info -ads!fav.simba.taobao.com -ads$feedback.whalecloud.com -adsff.win.taobao.com -ads fm.p0y.cn -adsg.click.taobao.com -ads -g.tbcdn.cn -adsgma.alicdn.com -adsgtms01.alicdn.com -adsgtms02.alicdn.com -adsgtms03.alicdn.com -adsgtms04.alicdn.com -adshydra.alibaba.com -ads'hz.pre.tbusergw.taobao.net -ads#hz.tbusergw.taobao.net -ads i.ipinyou.com -adsinit.phpwind.com -ads!intl.wapa.taobao.com -ads$intl.waptest.taobao.com -ads"jxlog.istreamsche.com -adslog.umtrack.com -adsm.intl.taobao.com -adsm.simba.taobao.com -adsmatch.p4p.1688.com -ads%material.istreamsche.com -ads mlt01.com -ads&nbsdk-baichuan.alicdn.com -ads&nbsdk-baichuan.taobao.com -ads"osfota.cdn.aliyun.com -ads osupdate.aliyun.com -ads&osupdateservice.yunos.com -ads%pindao.huoban.taobao.com -adspush.wandoujia.com -adsre.m.taobao.com -ads re.taobao.com -ads&redirect.simba.taobao.com -adsrj.m.taobao.co -adsrj.m.taobao.com -adssdkinit.taobao.com -adsshow.re.taobao.com -adssimaba.taobao.com -adssimba.m.taobao.com -ads!srd.simba.taobao.com -adsstats.ipinyou.com -ads strip.taobaocdn.com -ads$tanxlog.istreamsche.com -adstejia.taobao.com -adstemai.taobao.com -ads!tns.simba.taobao.com -ads tongji.linezing.com -ads tvupgrade.yunos.com -adstyh.taobao.com -adsuserimg.qunar.com -adsw.m.taobao.com -adsyiliao.hupan.com -ads - -APPLEiadsdk.apple.com -ads iad.apple.com -ads qwapi.com -adscalendarserver.orgapple-cloudkit.com cups.orgdeveloper.apple.comdevimages-cdn.apple.comdevstreaming-cdn.apple.comfoundationdb.orgmacosforge.org macruby.com macruby.net macruby.orgapple-mapkit.complaygrounds-cdn.apple.com carekit.orgresearchandcare.orgresearchkit.cn -cnresearchkit.com.cn -cnresearchkit.hkresearchkit.netresearchkit.orgresearchkit.tvservicetalk.io -webkit.org webkitgtk.org wpewebkit.orgwebobjects.com-)appleworldwidedeveloper.hb-api.omtrdc.net)%appleworldwidedeveloper.sc.omtrdc.net#p-events-delivery.akamaized.net100beatscheap.com1monsterbeatsbydreus.com2013beatsbydrdreonline.com2013beatsbydrdreshop.com2013beatsbydreshop.com2013beatshdcybermonday.com2013cheapestbeats.com2013newbeatsworld.com2013pascherbeatsbydre.com2014cheapbeatsbydre.com 2beatsdre.com2buybeatsbydre.com2drdrebeats.com40shopping.com4beatsbydre.com5beatsbydre.comaaagradeheadphones.com -aanaan.comabcheadphones.comabeatsbydrdre.com aeasyshop.com -airmay.com -ajtalk.com albeats.com annstores.netaokwholesale.netaucheapbeats.comaudiobeatsau.comaudiobeatsbydre.comaudiomonsterbeatsonline.comauricularemonsterbeats.com#auricularesbeatsbaratosshop.comauricularesbeatsmarkt.comausbeatsbydrdre.combag-glasses1.com bandgirlz.com baxsound.com bbestmall.com -beatbd.combeatbydre2013.combeatbydremonster.com!beatbydreheadphonesonsale.combeatbydrekopen.combeatbydreuk2014.combeatdrdres.combeatfactoryoutlets.combeatmonstersaustralia.netbeats-by-dre-australia.combeats-bydrdre.netbeats-bydre-mall.combeats-bydrecheapsale.combeats-bydreoutletonline.combeats-bydreoutletsale.combeats-bydreoutletsale.netbeats-bydreoutletssale.netbeats-bydrestore.combeats-bydreuk.combeats-deal.combeats-dre-us.com"beats-headphones-buy-cheap.combeats-headphones.usbeats-sale.combeats-seller.combeats-soaho.com  beats1.cc beats1.cn -cn  beats1.tv beats1.com.cn -cn beats123.com beats2.com.cn -cn beats4.cn -cn -beats4.netbeats4outlets.combeats4salecheap.combeatsallsale.combeatsaudifonos.combeatsaudiobydre.combeatsaudiobydre.netbeatsaudios.netbeatsbeatsmonster.combeatsbestdeals.combeatsblackfridaydeals.netbeatsblackfridayretails.combeatsboxingdayuksale.combeatsbydrdre-headphones.combeatsbydrdre-officials5.combeatsbydrdre-online.combeatsbydrdre-onsale.combeatsbydrdre-store.combeatsbydrdre-store.usbeatsbydrdre4sale.combeatsbydrdrebiz.combeatsbydrdrecustom.combeatsbydrdredanmark.combeatsbydrdremall.combeatsbydrdreoutlet.combeatsbydrdres.combeatsbydrdresale.netbeatsbydrdrestore.combeatsbydrdreus.com!beatsbydre-beatsheadphone.combeatsbydre-chen.combeatsbydre-club.combeatsbydre-headphones.com!beatsbydre-headphonesshop.combeatsbydre-mall.combeatsbydre-outlet.combeatsbydre-outletsale.netbeatsbydre-outletstore.combeatsbydre-sell.combeatsbydre-store.combeatsbydre-studio.combeatsbydre-us.com beatsbydre.jpbeatsbydre2081.combeatsbydre411.combeatsbydre4usales.combeatsbydreauofficial.combeatsbydreausale.net beatsbydreaustralia-sale.com!beatsbydreaustraliaonline.com"beatsbydreaustraliaonlines.com beatsbydreaustraliasales.combeatsbydrebeatsby.com!beatsbydreblackfriday2013.com beatsbydreblackfridaypro.combeatsbydreboxingdayca.combeatsbydrecasquesfr.com#beatsbydrecheap-outletstore.combeatsbydrecheaper.com"beatsbydrecheaponlinesales.combeatsbydrecolors.com beatsbydrecustomwireless.com&"beatsbydrecybermondaydeals2013.com&"beatsbydrecybermondaydeals2013.netbeatsbydredanmarks.com"beatsbydredealsblackfriday.com"beatsbydredealscybermonday.combeatsbydrediscount.com beatsbydrediscountonline.netbeatsbydredr.combeatsbydreexecutivesale.com beatsbydreformall2013-nl.com beatsbydreforsalesonline.com beatsbydreforshop2013-nl.combeatsbydreforstore.combeatsbydreforyououtlet.combeatsbydrefr.com!beatsbydrefrcasquepascher.combeatsbydrefriday.combeatsbydregot.combeatsbydrehd.combeatsbydrehd.netbeatsbydreheadphones-nz.combeatsbydreheadphonesolo.combeatsbydrehut.combeatsbydreinexpensive.combeatsbydreireland-sales.com beatsbydreirelandonlines.combeatsbydreirelandsale.com beatsbydreirelandsonline.combeatsbydremall2013.com"beatsbydremonsteraustralia.combeatsbydrenls.combeatsbydrenorge1.net!beatsbydreofficialdanmark.combeatsbydreoksale.combeatsbydreol.combeatsbydreonlie2013-nl.com!beatsbydreonlines-ireland.combeatsbydreonlines-uk.combeatsbydreonlinesale-nz.combeatsbydreoordopjes.combeatsbydreoslo.combeatsbydreoutletsale.combeatsbydreoutletscheap.combeatsbydrerealstore.combeatsbydres-shop.combeatsbydresale-uk.combeatsbydresalemall2013.combeatsbydresales.us'#beatsbydresalesonline-australia.com beatsbydresaleonlines-nz.combeatsbydresdanmark.netbeatsbydreshop-uk.combeatsbydreshops.netbeatsbydresingapores.combeatsbydresingaporesale.combeatsbydrespeakers.combeatsbydresold.com%!beatsbydresolohdonline-canada.combeatsbydresonline-nz.combeatsbydrestorevip.combeatsbydressale.combeatsbydressolo.combeatsbydresstudio.com"beatsbydrestudio-australia.combeatsbydrestudio.combeatsbydretoutlet.combeatsbydreuk.combeatsbydreuk.netbeatsbydreus.combeatsbydrevipde.combeatsbydrew.combeatsbydrsmonsterinusa.combeatsbymusic.netbeatsbysdrbre.combeatsbysdrdres.combeatscasque-france.combeatscheap-nz.combeatscheap-uk.combeatscheapforsale.combeatscollection2014.combeatscustomblackfriday.combeatsdanmark2013.combeatsdrdre-headphones.combeatsdrdre-it.combeatsdrdre-solo.combeatsdrdre2014.combeatsdrdrecuffie.netbeatsdrdrekaufenschweiz.netbeatsdrdreneon.combeatsdre-monster.com beatsdre.netbeatsdre4cheap.combeatsdrecheap.combeatsdredreheadphones.combeatsdreforsale.combeatsdreinau.combeatsdremonster-uk.com!beatsdrenewcolorful4usale.combeatsdreoutletsale.combeatsdresale2013.combeatsdresalestore.combeatsdresolo2013.combeatsdreus.combeatsearbudsheadphoness.combeatsfacstore.combeatsfactoroutlets.combeatsfactorycollection.combeatsfactoryoutles.combeatsforcheap-usa.combeatsforme.combeatsfranceofficiel.combeatselectronic.netbeatselectronics.com -beatsep.cn -cn beatsep.com beatsep.net beatsheadphones-discount.combeatsheadphones1.combeatsheadphones2u.combeatsheadphonesale.combeatsheadphonesdealer.combeatsheadphonesforcheap.netbeatsheadphonesonline.combeatsheadphoness.combeatsheadphonestudio.combeatsheadphonesusamall.combestshoesale2014.netbeatshopuk.combeatsincanada.combeatsinsingapore.combeatsireland.net beatsjoy.combeatsmonstersales.combeatsmusic.combeatsmusic.wang beatsneon.combeatsnzsale.com beatsodre.combeatsofdre-usa.combeatsonblackfriday2013.com beatsone.netbeatsoutlet.netbeatsoutletanytime.combeatsoutletonlines.combeatspascher-bydre.combeatspascher-fr.netbeatspascher.netbeatspaschers.netbeatspillnewcolor.combeatspills.combeatspromonsterjp.combeatspromotions.combeatssales.combeatssaleus.combeatssaustraliabuy.combeatssbyaustralia.combeatssbydredanmark.combeatsshop-uk.combeatsshop-usa.combeatsshopstore.combeatssingapores.combeatssingaporeshop.com beatsstudiohodetelefoner.combeatsstudiosite.combeatstoreusa.com beatsua.combeatswholesale.usbeatswirelesscheap.combeatswirelesscuffie.combegin-trade.combestbeats4u.com -biitii.comblackfridaydrebeatsnew.comblackfridaydrebeatsshop.combloommicroventures.com bookonsky.net -bossae.combrandeasygo.combrandelectronic.combrandproducts1688.com brands098.combusinesswebwise.combuy-from-shanghai.combuybeatsbydre-uk.combuybeatsheadphonesbydre.combuycheapbeatsbus.combuycheapbeatsbydre.combuycheapbeatsbydreshop.combuycheapbeatsdreuk.combuydrdrebeatbox.combuyminibeatbox.combuyonlineheadphones.combuyshoponly.combuzzardflapper.combybeatsdre.combydrebeats.comcanada-beatsbydre.com casque-fr.com casquebeatsbydrdresolohd.comcasquebeatsdocteurdre.comcasquebeatsdre2013.comcasquebeatsenligne.comcasquebeatsfracheter.comcasquebeatsmer.netcasquebeatsofficiel-fr.comcasquebeatspascher2013.comcasquebeatssolo.netcasquedrdrebeatssfr.comcasquemonsterbeats.com#casquemonsterbeatsbydre2013.comcasquesbeatsaudio.comcheap-beats-by-dre.netcheap-beatsbydre.comcheapbagshoes.com cheapbeats.uscheapbeats365.comcheapbeats4sale.netcheapbeatsaustraliasale.comcheapbeatsbus.comcheapbeatsbydr.comcheapbeatsbydrdrepro.comcheapbeatsbydre-au.comcheapbeatsbydre99.comcheapbeatsbydrefau.comcheapbeatsbydremall.comcheapbeatsbydremonster.comcheapbeatsbydrenz.netcheapbeatsbydreonsale.com cheapbeatsbydreoutlet-nz.comcheapbeatsbydreoutlet.com"cheapbeatsbydreoutlets2013.comcheapbeatsbydresale.comcheapbeatsbydreshop.comcheapbeatsdrdresolo.com$ cheapbeatsbydrestudioedition.com"cheapbeatsbydrestudioutlet.comcheapbeatsdrestudios.comcheapbeatsheadphone2014.comcheapbeatsheadphones.uscheapbeatsie.comcheapbeatsla.comcheapbeatssale4u.comcheapbeatsshopbydre.comcheapcustombeatsbydre.comcheapdrdrebeats8.comcheapdrdrebeatsca.comcheapdrebeats8.netcheaperbeatsbydresale.comcheapestbeatsdrdre.comcheapheadphonesland.comcheapheadphonessale.comcheapheadsetmall.comcheapheadsetshop.com cheapmonsterbeatsbydrdre.com!cheapmonsterbeatsheadsets.com cheapmonstersbeatsonsale.comcheapmonsterbeatssale.comcheapmonsterbeatsusa.uscheapnewbeatsbydre.comcheapsalemonster.comcheapshoesvip.comcheapwireless04.comcheapwirelessbeats.comcheerwholesale.uschihair-straightener.comchinaclothesstore.comciattackers.com -cmhalq.com cnshopin.comcoolmonster.netcozydrdrebeats.com cqcorea.comcuffiesaldi.comcustombeatsbydrebuy.comcustombeatsdeals.comcustombeatsforcheap.comcustombeatsny.comcustombeatssbydreus.comcustomdrdrebeats.comcustomizedbeatbydre.comcustomizedbeatsbydre.comcustomizedbeatsdre.comcybermondaybeats4sale.comdanemarket.comdanmarkbeatsbydrdre.comdctbeatsbydre.comdealsbeatsblackfriday.comdetaliczny.comdiscountbeatsbydre-us.comdiscountbeatsstore.comdkbeatsbydre.comdrbeatsukmart.comdrdre-beats.comdrdrebeats-chen.comdrdrebeats-headphone.comdrdrebeats-usa.comdrdrebeatsale.comdrdrebeatsbillig.comdrdrebeatsdesale.comdrdrebeatsdiscount.comdrdrebeatsforu.comdrdrebeatsretail2013.comdrdrebeatssale7.comdrdrebeatsuk.comdrdreheadphonebeats.comdrdreheadphonekey.comdrdreheadphonesusstore.comdrdremonster-beats.comdrdremonsterdre.comdrdreprobeatssale.com drdrefnac.comdrebeats-australia.comdrebeats-france.comdrebeats-monster.com!drebeats-monsteraustralia.comdrebeats-monsterusa.comdrebeats-singapore.comdrebeats-singapore.netdrebeats-singaporecheap.comdrebeats-singaporecheap.netdrebeats-solo.comdrebeats-studio.comdrebeatsaustralia-cheap.comdrebeatsaustralia-cheap.netdrebeatsbuy.comdrebeatsbydreoutlet.comdrebeatscanada.comdrebeatsdeutschland.netdrebeatsforsaleus.comdrebeatsheadphones-nz.comdrebeatshome.comdrebeatsoutletstore.comdrebeatsoldes.comdrebeatspill.comdrebeatssite.com#drebeatssolocybermondaysale.comdrebeatsstudio2013.comdrebeatstudio.com drebyby.comdremonsterbeatsoutlets.comdreprobeats.com dreprofy.com -dtsell.comearphonescheapest.comebuyheadphones.comesbeatsbydrebuy.cometheadphones.comfamosascalvas.comfindmybeats.comfr-beatsbydrestore.comfrancecasquebeatssolde.comfrcasquesbeats.com free-aa.com free-sns.com frishoes.comgamebeforethegame.comgetdrebeatssale.comgmnetworks.net gobeatsye.comgobuyonlinestore.net goodsdunk.netheadphonepubs.comheadphones-cool.comheadphones-dre.com headphones-outlet-online.comheadphonesbeatsaudio.comheadphonesbeatsbydre.comheadphoneses.comheadphoneshome.comheadphoneshotsales.comheadphonesol.comheadphonesretailer.comheadphonessupply.comheadphonezip.comheadset987.comhellokittybeats.com highbolt.net highdefinitionbeatsbydre.com hipaa6020.com hipzoom.nethonawalaan.comhotbeatsonsale.comhotmonsterbeats.comhottestheadphonesonline.com  hrsaz.com ibeats-uk.comibeatsbydre.ccibeatsbydre.comigoshopping.net illianacomputerrecycling.comimonsterbeats.comincentivetravelgifts.comioffergift.com islamiccenterofnewlondon.comitaliabeatsbydrdre.com jkbeats.comkickshatchannel.comkobbeatssbydredk.comkopfhorergunstigshop.comleecountytimes.com lexuemei.comlovebeatsdr.com lovemarca.comluckyissue.com -lyzsxx.com mairbeats.com -makeeu.commallheadphone.commbeats-tech.commbheadphone.com -micstl.commmonsterheadphones.netmonbeats2013.commonster-beats-by-dr-dre.com monster-beats-headphones.commonsterbeats-cheap.commonsterbeats-headphone.commonsterbeats-onsale.commonsterbeats-solo.commonsterbeats-solo.netmonsterbeats365buy.commonsterbeats8beatsbydre.commonsterbeatsale.commonsterbeatsalestore.commonsterbeatssalg.commonsterbeatsau.commonsterbeatsbydrdre-nz.commonsterbeatsbydrdre-usa.com!monsterbeatsbydrdrecanada.com!monsterbeatsbydrdrestudio.commonsterbeatsbydre-nz.commonsterbeatsbydre-usa.commonsterbeatsbydre2015.com'#monsterbeatsbydreaustraliacheap.com!monsterbeatsbydrebilligde.com monsterbeatsbydrefactory.commonsterbeatsbydrenew.commonsterbeatsbydres.commonsterbeatsbydreshop.commonsterbeatscasques.commonsterbeatscommunity.commonsterbeatsdrdrecheap.commonsterbeatsfactory.netmonsterbeatsfinland.commonsterbeatsforsale.commonsterbeatsheadphone.commonsterbeatsheadphones.netmonsterbeatshere.commonsterbeatsitaly.commonsterbeatsmall.commonsterbeatsnegozi.netmonsterbeatsok.com!monsterbeatsonlinestoreuk.commonsterbeatsoutlet.usmonsterbeatspascher.netmonsterbeatsru.commonsterbeatssales.commonsterbeatsshops.netmonsterbeatsstore.com#monsterbeatssydneyaustralia.commonsterbeatstang.commonsterbeatstienda.commonsterbeatstudio.commonsterbydrebeat.com!monstercasquebeatspascher.netmonstercheapbeatss.commonsterdrebeats-canada.netmonsterdrebeats-usa.commonsterdrebeats-usa.netmonsterheadphone.netmonsterproduct.netmonstersbeatbydres.commonstersdebea.commonstershopcheapbeats.netmoreheadphones.com -ms4dre.commybeatsbydrestudio.commybeatsbydreuk.commybeatscheapbydre.commyferrariheadphones.comnamemybeats.com neborder.comnegozimonsterbeats.comnegoziomonsterbeats.comnewbeatsblackfriday.com newbemany.comnewdrediscount.comnewestbeatsbydre.comnewlysprung.netnewmonst1erbeatsto1re.com!newmonsterbeatsheadphones.comnewschristmasshopping.comnflhotsalejerseys.com nicesshop.netofferairjordanlebron.comofficialbeatsbydreshop.comofficialbeatsbydrestore.comofficialdrdre.comofficialheadphone.com ogameblog.comonbeatsbydresale.com onlinemonsterbeatsonsale.com onsalekey.comonsaletrend.comoutletbeatsshop.compascherbeatsmonster.compaulsimon-music.comperfectkickz.netpersoneelsland.compicknicekicks.netpickshoesclothes.com pillbeatsblackfridaysale.compocketbiketrader.compowerbeats2wireless.compowerbeatsbydrdre.compowerbeatsbydre.compromonsterbeatsbydre.comprostudiobeatscybersale.com  rbsgr.comrepsneakermall.com repswing.com!salebeatslasteststyle4you.comsaleblackfridaydrebeats.comsalecheaphandbags.com samebags.com sanvaras.com -scnshop.cc -shoers.com shoestop2.comshop-headphones.netshopbeatsdre.com shopbydre.comshopcustomizedbeats.comshopdrebeats.comshopmonsterbeats.comshopping-days.netshoppinguheadphones.comsneaker666.comsneakerpage.netsneakerskick.comsolostudioksale.com soso7778.comspecialtyheadphones.comspiritclubs.comstraightouttasomewhere.comstudiobeatsbydrdre.comsulwerphoto.comsunglassessale2014.comsuperearsenjoy.comsupplybestjerseys.comsustainthesound.comsverigebeatsbydrdre.com szcheapmonsterheadphones.comszwinnertechnology.com takegoto.comthe-monster-beats.comthebeatsbydre.comthebeatsbydre.netthebeatsheadphonesale.com -theuab.nettopbeatsbydrdreoutlet.comtopbeatsdealer.comtopbeatsforsale.com tradevip1.com tteshop.com ubnw.net -unstyle.us&"usa-beatsbydreheadphonesonsale.net  v-has.com vip-beats.comvipbeatsbydre.comvipheadphones.com vipshoes2.com  wasdj.comwholesale-exporter1.comwholesalediscountpurses.comwholesalefine.comwholesaleonlinemart.comworldcoinpay.comyourmonsterbeats.com%!beatselectronicsllc.tt.omtrdc.netapple-icloud.cn -cnappleicloud.cn -cnapplemx-icloud.comicloud-apple.cn -cnicloud-content.comicloud-isupport.com  icloud.ch -icloud.com icloud.com.cn -cn  icloud.de  icloud.ee  icloud.fi  icloud.fr  icloud.hu  icloud.ie  icloud.is  icloud.jp  icloud.lv icloud.net.cn -cn  icloud.om -icloud.org  icloud.pt  icloud.ro  icloud.se  icloud.si  icloud.sk  icloud.vn icloudads.neticloudapple.cn -cn icloudbox.neticloudbrowser.net icloude.comicloudhome.comicloudmail.neticloudmusic.net icloudnet.net icloudpay.net icloudo.com -icloudo.de icloudo.net icloudos.de icloudos.neticloudsecure.neticloudsetup.comios-icloud.com -me.com myicloud.net mylcloud.net wwwicloud.com!www-cdn.icloud.com.akadns.net!12diasdepresentesdeitunes.com12diasderegalosdeitunes.cl12diasderegalosdeitunes.co!12diasderegalosdeitunes.co.cr!12diasderegalosdeitunes.co.ni!12diasderegalosdeitunes.co.ve12diasderegalosdeitunes.com"12diasderegalosdeitunes.com.co"12diasderegalosdeitunes.com.hn"12diasderegalosdeitunes.com.ni"12diasderegalosdeitunes.com.ve12diasderegalosdeitunes.cr12diasderegalosdeitunes.gt12diasderegalosdeitunes.hn12diasderegalosdeitunes.pe 12joursdecadeauxdeitunes.comapple-itunes.cn -cn itun.es itunbes.com ituneas.comitunes-apple.cn -cnitunes-radio.net  itunes.ca  itunes.co itunes.co.th -itunes.com  itunes.hk  itunes.mx -itunes.org -itunes.rio  itunes.usitunes12days.comitunesapple.cn -cnitunesessentials.comitunesfestivals.comitunesiradio.comituneslatino.comituneslogin.netitunesmatch.comitunesparty.comitunesradio.cn -cnitunesradio.comitunesradio.com.cn -cnitunesradio.rioitunesradio.tvitunesradio.twitunesstore.co itunesu.com itunesu.net iutunes.com wwwitunes.comitunes-apple.com.akadns.netappleswift.com  swift.org -swiftui.cn -cnswiftui.com.cn -cn apple apple.ae apple.at apple.be apple.bg apple.bs apple.ca apple.ch apple.cl apple.cmapple.cn -cn apple.co apple.co.cr apple.co.hu apple.co.jp apple.co.kr apple.co.mz apple.co.nz apple.co.th apple.co.uk  apple.com apple.com.af apple.com.au apple.com.bo apple.com.br apple.com.cn -cn apple.com.co apple.com.de apple.com.do apple.com.gr apple.com.gy apple.com.jm apple.com.lk apple.com.mg apple.com.mx apple.com.my apple.com.pa apple.com.pe apple.com.pl apple.com.pr apple.com.pt apple.com.py apple.com.sg apple.com.sv apple.com.tr apple.com.tw apple.com.uy apple.cz apple.de apple.dk apple.ee apple.es apple.eu apple.fi apple.fr apple.hamburg apple.hn apple.hr apple.hu apple.ie apple.in apple.is apple.it apple.jo apple.jp apple.kr apple.lk apple.lt apple.lv apple.me apple.my  apple.net apple.net.gr apple.nl apple.no apple.pk apple.pl apple.pt apple.ro apple.rs apple.ru apple.sa apple.se apple.sg apple.si apple.sk apple.so apple.tt apple.tw apple.uk apple.usapple.xn--czr694bapple.xn--fiqs8s  apple.xyz aplestore.comapple-store.cn -cnapple-store.netapple-store.wang applestor.com applestore.bg applestore.cc applestore.ch applestore.cm applestore.cn -cnapplestore.co.huapplestore.co.jpapplestore.co.ugapplestore.co.ukapplestore.comapplestore.com.auapplestore.com.bnapplestore.com.cn -cnapplestore.com.eeapplestore.com.egapplestore.com.grapplestore.com.hkapplestore.com.hrapplestore.com.joapplestore.com.myapplestore.com.phapplestore.com.plapplestore.com.ptapplestore.com.roapplestore.com.ruapplestore.com.snapplestore.com.tw applestore.de applestore.hk applestore.kr applestore.meapplestore.netapplestore.net.gr applestore.ph applestore.qa applestore.sgapplestore.wangapplestoreonline.comapplestorepro.euonlineapplestore.comapp-store.wangappe-store.comapple-appstore.cn -cnappleappstore.cn -cnappleappstore.netappleappstore.tv  appsto.reappstore.co.id appstore.hk appstore.my appstore.phappstoreapple.cn -cn asto.retvappstore.netapple-imac.com appleimac.comimac-apple.comimac-applecomputer.com imac.co -imac.co.nz imac.com imac.eu imac.gr imac.one imac.rs imacapple.comimacapplecomputer.comebookforipad.com euroipad.comfindmyipad.com indiaipad.com -ipad.co.kr ipad.de  ipad.host  ipad.wang  ipad3.com -ipadair.cl -ipadair.cmipadair.com.bripadair.com.es -ipadair.fr -ipadair.hk -ipadair.ie -ipadair.jp -ipadair.twipadaustralia.com ipadmini.cmipadmini.com.lk ipadmini.lk ipadpro.buzz -ukipad.comappleiphone.huappleiphone.netappleiphonecell.combestiphonestuff.comcooliphonecasesstore.comcustom-iphonecase.comdesigneriphonescases.com dl-iphone.comfundaiphone5s.com hebiphone.com hf-iphone.com -iphine.comiphone-8.com.cn -cn iphone-cd.com iphone-cn.com iphone-sh.comiphone-vip1.comiphone-vip2.comiphone-vip3.comiphone-vip4.comiphone-vip5.com iphone-x.tv iphone-yh.com iphone-zh.com  iphone.cm -iphone.com iphone.com.au iphone.com.gr  iphone.es iphone.host iphone.net.gr  iphone.pt  iphone.rs  iphone.ru iphone.wang iphone4.comiphone4.com.br iphone4s.com iphone5.comiphone5casescovers.comiphone5s5case.comiphoneacessorios.com.briphonecase2013.comiphonecase5.comiphonecases100.comiphonecases5.comiphoneclaro.com.briphonecollcase.com iphonefc.comiphonegermany.comiphonehangzhou.comiphoneimessage.comiphoneplus.wang iphonerip.net iphonese.tviphoneunlockimei.com iphonexs.tvonlyiphone5case.comaplleipods.comappleclassicipod.comdownloadsforipod.com ipod.ca ipod.ch ipod.cm ipod.co -ipod.co.nz -ipod.co.uk -ipod.co.za ipod.com ipod.com.au ipod.com.cn -cn ipod.com.fr ipod.com.hk ipod.com.sg ipod.com.tw ipod.de ipod.es ipod.eu ipod.fr ipod.gr ipod.hk ipod.is ipod.net ipod.no ipod.pk ipod.rs ipod.ru ipod.tw ipodcentre.nlipodcleaner.comipoditouch.com ipodnano.com ipodnano.netipodprices.com -ipodrip.caipodrocks.com.au  ipods.comipodshop.com.au ipodtouch.co ipodtouch.com -myipod.netoffrezdesipods.comsimplyipod.comwwwipodlounge.comimacsources.comlaunchpad.wang mac.wang -macbook.co -macbook.hk -macbook.tw macbook.wang macbookair.cn -cnmacbookair.co.krmacbookair.co.ukmacbookair.commacbookair.com.aumacbookair.com.cn -cnmacbookair.com.es macbookair.es macbookair.hk macbookair.kr macbookair.jpmacbookair.net macbookpro.comacbookpro.commacbookpro.com.aumacbookpro.net macbookpro.usmacbookpros.commacbooksale.comwwwmacbookair.comapple-watch.com.ru applewatch.hk applewatch.tv applewatch.twapplewatch.wangapplewatchedition.comapplewatchseries3.netapplewatchsport.comapplemusic.berlinapplemusic.comapplemusic.com.auapplemusic.hamburgapplemusic.wangapplemusicconnect.comapplemusicfestival.com musickit.netwwwapplemusic.comapple.comscoreresearch.com -apple.newsappleenews.comapplenews.berlinapplenews.hamburg applenews.tvapplenewsformat.com apple-pay.com apple-pay.rsapple-pay.wangapplepay.berlinapplepay.co.rsapplepay.com.twapplepay.hamburg applepay.hk applepay.info applepay.jp applepay.rs applepay.tvapplepaycash.cn -cnapplepaycash.com.cn -cnapplepaycash.netapplepaycash.tv!applepaymerchantsupplies.infoapplepaysupplies.berlinapplepaysupplies.cn -cnapplepaysupplies.com#applepaysupplies.com.cn -cnapplepaysupplies.infoapplepaysupplies.netapplepaysupplies.tvapplewallet.comapplewallet.tv -i-book.com -i-book.net ibook.co.nz  ibook.com ibook.eu  ibook.netibookpartner.comibooksauthor.com  iphoto.eu  iphoto.no  iphoto.se iphoto.wang  imovie.euimoviegallery.comimoviestage.comapplecare.berlin applecare.cc applecare.euapplecare.hamburgapplecare.wangappledarwin.comappledarwin.netdarwinsource.comdarwinsource.orgdarwinsourcecode.comappleaccount.netappleid-applemx.comappleid-applemx.usappleid-iclou.com appleid-uk.usappleid.berlin appleid.comappleid.hamburg -appleid.hk ids-apple.com myappleid.com appletv.com -appletv.fr appletv.wang appletv4.cn -cnappletv4.com.cn -cnappletvapp.appleappleone.audio appleone.blog appleone.chatappleone.cloud appleone.clubappleone.community appleone.filmappleone.guide appleone.hostappleone.space appleone.techappleone.website -shazam.com1to1computing.com.au1to1conference.com.au 5lml.com -a0pple.net aapl.twairport.brussels airport.com -airport.euairsupportapp.com airtunes.com airtunes.info airtunes.netalchemysynth.com  ap0le.com aple.com  apole.com -app0le.com -appl-e.com appl.com -appl4e.com  appla.comapple-darwin.comapple-darwin.netapple-darwin.org apple-dns.cn -cn apple-dns.comapple-dns.com.cn -cn apple-dns.netapple-enews.comapple-expo.com apple-expo.eu apple-hk.comapple-ibooks.cn -cn apple-inc.netapple-livephotoskit.com apple-maps.cn -cnapple-online.com apple-usa.netappleafrica.comappleantilles.comappleaustralia.comappleaustralia.com.auappleaustralia.net.au applebk.netapplecarbon.com applecard.tvapplecentar.co.rsapplecentar.rsapplecenter.cn -cnapplecenter.com.cn -cnapplecentre.com.auapplecentre.infoappleclub.com.hk applecom.comapplecomputer-imac.comapplecomputer.cn -cnapplecomputer.co.inapplecomputer.co.nzapplecomputer.com applecomputer.com.cn -cnapplecomputer.com.hkapplecomputer.com.twapplecomputer.huapplecomputer.krapplecomputerimac.comapplecomputerinc.infoapplecomputers.co.nzapplecoronavirus.com appledns.cn -cnappledns.com.cn -cn appleexpo.euappleexpo.infoapplefilmaker.comapplefilmmaker.comapplefinalcutproworld.comapplefinalcutproworld.netapplefinalcutproworld.orgapplehongkong.comapplehongkong.com.hkappleinclegal.comappleipodsettlement.comappleiservices.com applelink.comapplemagickeyboard.comapplemalaysia.com.myapplemasters.infoappleonline.comappleonline.net appleoriginalproductions.com -appleos.tvapplepencil.netapplepodcasts.comapplepremiumreseller.com.au applepremiumresellers.com.auapplereach.comapplereach.net apples-msk.ruapplescreensavers.comapplescript.infoappleshare.infoappleshop.co.uk applesiri.cn -cnapplesurveys.comappletaiwan.com appletips.net appleweb.net applexpo.net applezh.com  applf.com -applfe.com -applle.com  applw.comappmediagroup.com -appule.com  appye.com  apyle.com  beddit.tvbraeburncapital.com burstly.netburstlyrewards.com buyaapl.com buyaapl.net buyaple.com camelphat.comcamelspaceeffect.com -carbon.com catalina.hk cdn-apple.com  chomp.com -coreml.netdashwood360.comdesktopmovie.comdesktopmovie.netdesktopmovie.orgdesktopmovies.netdesktopmovies.orgdeveloper-advisor.comdevice-manager.usdigitalhub.comdiscussionsapple.com -dot-mac.de  dotmac.dedvdstudiopro.bizdvdstudiopro.comdvdstudiopro.infodvdstudiopro.netdvdstudiopro.orgdvdstudiopro.us -earpod.net ecgapp.com.cn -cn -ecgapp.netedu-research.org -emac.co.in emac.in  emagic.de -eworld.com faceid99.com faceid99.netfaceidglobal.com faceshift.cn -cn facetime.netfinalcutpro.comfind-apple.com firewire.cl firewire.eu geoport.com -homepod.cn -cn -hopstop.tv ichat.co.in idvd.eu  ikids.comilecture.co.nz ilife.eu ilife.gr -ilife.wang imessage.tv insidear.cn -cninsidemacintosh.comiosinthecar.comipa-iphone.net  ipple.com ischool.com itools.info  iwork.com iwork.se -iwork.wangjetfuelapp.comjetfuelapps.comlatticedata.com livephotos.cn -cnlivephotos.com.cn -cn livephotos.tvlojaiphone.com.br mac-mini.com mac.com -mac.com.au -mac.eu -mac.rs macappsto.re macboxset.com mach-os.com mach-os.net -machos.net macintosh.eumacintoshsoftware.com macmini.com macos.com.aumacossierra.com macosx.infomacosxlion.com macpazar.com macreach.com macreach.net mobileme.dkmr-apple.com.tw mzstatic.com -newton.com next.com overapple.com powerbook.eupullstring.netquatrowireless.com quicktime.cc quicktime.comquicktime.com.au quicktime.eu quicktime.net quicktime.tvreform-apple.comservices-apple.net siri.com spektral.cc texture.comthinkdifferent.us -touchid.tv touchid.wangtracking-location.comtruedepth3d.com tryrating.comwebobjects.co.uk webobjects.de webobjects.euwebobjects.net wuxiapple.com wwapple.netwww-sms-apple.com wwwapple.com wwwapple.net wwwlapple.comxn--czrs0t4phtr3a.cnxn--fiqs8sxootzz.cn xn--fiqs8sxootzz.xn--hxt814e!xn--gtvq61aiijy0b.xn--hxt814exn--gtvz22d.wangxn--gtvz22d.xn--hxt814exn--hxtr4rozx.xn--czr694b xn--kput3imi374g.xn--hxt814e#xn--ohq11k7pl25iyo8a.cn -cn xn--ruq8a011kt6y.xn--hxt814e, adcdownload.apple.com.akadns.net -cn!adcdownload.apple.com -cn."amp-api-search-edge.apps.apple.com -cn"amp-api.apps.apple.com -cn aod.itunes.apple.com -cn#api-edge.apps.apple.com -cnappldnld.apple.com -cn"appldnld.g.aaplimg.com -cnapps.apple.com -cnapps.mzstatic.com -cn(apptrailers.itunes.apple.com -cn bag.itunes.apple.com -cn'bookkeeper.itunes.apple.com -cnbooks.apple.com -cn!cds-cdn.v.aaplimg.com -cn$cds.apple.com.akadns.net -cn cds.apple.com -cncl2-cn.apple.com -cn<0cl2.apple.com.edgekey.net.globalredir.akadns.net -cncl4-cn.apple.com -cn'client-api.itunes.apple.com -cn+clientflow.apple.com.akadns.net -cn clientflow.apple.com -cn cma.itunes.apple.com -cn."configuration.apple.com.akadns.net -cn#configuration.apple.com -cn!communities.apple.com -cncstat.apple.com -cn."dd-cdn.origin-apple.com.akadns.net -cn(discussionschinese.apple.com -cn(download.developer.apple.com -cnfides-pol.apple.com -cngs-loc-cn.apple.com -cngs-loc.apple.com -cn%gsp10-ssl-cn.ls.apple.com -cn!gsp11-cn.ls.apple.com -cn!gsp12-cn.ls.apple.com -cn!gsp13-cn.ls.apple.com -cnC7gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net -cn, gsp4-cn.ls.apple.com.edgekey.net -cn gsp4-cn.ls.apple.com -cn gsp5-cn.ls.apple.com -cn(gspe11-2-cn-ssl.ls.apple.com -cn&gspe12-cn-ssl.ls.apple.com -cn&gspe19-cn-ssl.ls.apple.com -cn-!gspe19-cn.ls-apple.com.akadns.net -cn"gspe19-cn.ls.apple.com -cn#gspe21-ssl.ls.apple.com -cngspe21.ls.apple.com -cn#gspe35-ssl.ls.apple.com -cn&gspe85-cn-ssl.ls.apple.com -cniadsdk.apple.com -cn, icloud-cdn.icloud.com.akadns.net -cn icloud.cdn-apple.com -cn'images.apple.com.akadns.net -cn?3images.apple.com.edgekey.net.globalredir.akadns.net -cnimages.apple.com -cn3'init-p01md-lb.push-apple.com.akadns.net -cn init-p01md.apple.com -cn3'init-p01st-lb.push-apple.com.akadns.net -cn%init-p01st.push.apple.com -cn3'init-s01st-lb.push-apple.com.akadns.net -cn%init-s01st.push.apple.com -cn!init.itunes.apple.com -cn$iosapps.itunes.apple.com -cn(iosapps.itunes.g.aaplimg.com -cniphone-ld.apple.com -cn'itunes-apple.com.akadns.net -cnitunes.apple.com -cn#itunesconnect.apple.com -cn"js-cdn.music.apple.com -cn km.support.apple.com -cnmaps.apple.com -cn)mesu-cdn.apple.com.akadns.net -cn+mesu-china.apple.com.akadns.net -cnmesu.apple.com -cnmusic.apple.com -cn(ocsp-lb.apple.com.akadns.net -cnocsp.apple.com -cnoscdn.apple.com -cn-!oscdn.origin-apple.com.akadns.net -cn$osxapps.itunes.apple.com -cnpancake.apple.com -cn, pancake.cdn-apple.com.akadns.net -cnpd.itunes.apple.com -cnphobos.apple.com -cn!play.itunes.apple.com -cn1%prod-support.apple-support.akadns.net -cn$se-edge.itunes.apple.com -cn se2.itunes.apple.com -cn#search.itunes.apple.com -cn1%sf-api-token-service.itunes.apple.com -cnsp.itunes.apple.com -cn4(stocks-sparkline-lb.apple.com.akadns.net -cn&stocks-sparkline.apple.com -cn>2store.apple.com.edgekey.net.globalredir.akadns.net -cn'store.apple.com.edgekey.net -cnstore.apple.com -cn2&store.storeimages.apple.com.akadns.net -cn+store.storeimages.cdn-apple.com -cn+streamingaudio.itunes.apple.com -cnsu.itunes.apple.com -cn2&support-china.apple-support.akadns.net -cnsupport.apple.com -cn."swcatalog-cdn.apple.com.akadns.net -cnswcatalog.apple.com -cnswcdn.apple.com -cnswcdn.g.aaplimg.com -cn'swdist.apple.com.akadns.net -cnswdist.apple.com -cn+swscan-cdn.apple.com.akadns.net -cnswscan.apple.com -cn!sync.itunes.apple.com -cn1%updates-http.cdn-apple.com.akadns.net -cn&updates-http.cdn-apple.com -cn upp.itunes.apple.com -cnvalid.apple.com -cn-!valid.origin-apple.com.akadns.net -cn"weather-data.apple.com -cn<0www.apple.com.edgekey.net.globalredir.akadns.net -cn%www.apple.com.edgekey.net -cn www.apple.com -cn#^a[1-5]\.mzstatic\.com$ -cn0$^cdn(-cn)?[1-4]?\.apple-mapkit\.com$ -cn9-^cl[1-5]-cdn\.origin-apple\.com\.akadns\.net$ -cn!^cl[1-5]\.apple\.com$ -cn+^is[1-5](-ssl)?\.mzstatic\.com$ -cn$^s[1-5]?\.mzstatic\.com$ -cnapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net - -CATEGORY-MEDIA 9cdn.net9nation.com.au 9news.com.au 9now.com.aufreeviewplus.net.au -mi9.com.au -mi9cdn.com nine.com.aunineentertainment.com.aunineentertainmentco.com.auninemediaroom.com.auninemsn.com.austatic9.net.au yourtv.com.au9to5google.com 9to5mac.com9to5terminal.com 9to5toys.com dronedj.com electrek.cospaceexplored.com afp.com afpforum.com -ajplus.net aljazeera.com aljazeera.netpalestineremix.comsarajevopodopsadom.comsrebrenica360.com syhacked.comamericasvoice.news -ap.org -apnews.comappledaily.comappledaily.com.hkappledaily.com.tw appledaily.hkapplefruity.comapplehealth.com.hk -atnext.combestmallawards.com deluxe.com.hk eracom.com.tw next.hknextdigital.com.hknextdigital.com.twnextfilm.com.hknextmag.com.tw nextmedia.comnextmedia.com.tw nextmgz.comnextplus.com.hk nexttv.com.twnextwork.com.hknextwork.com.tw nextwork.hk nextwork.tw nxtdig.com.hk nxtdig.com.tw omoplanet.com privilege.hk privilege.tw sharpdaily.tw tomonews.nettwnextdigital.comappleinsider.com  asahi.com asahicom.jpasahishimbun.sc.omtrdc.netbbc  bbc.co.uk bbc.com -bbci.co.uk bbgwatch.com  bloomberg bbgevent.com bbhub.io -bbthat.com bgov.com bloomberg.cnbloomberg.co.jpbloomberg.co.kr bloomberg.combloomberg.com.br bloomberg.fm bloomberg.tvbloombergapps.combloombergarcade.combloombergbeta.combloombergbna.combloombergbreakaway.combloombergbriefs.combloombergchina.combloombergenvironment.combloombergforeducation.combloomberggovernment.combloombergindices.combloombergindustry.combloomberglabs.combloomberglaw.combloomberglive.combloomberglp.combloombergmedia.combloombergnext.combloombergpolarlake.combloombergprep.combloombergquint.combloombergradio.combloombergsef.combloombergspace.combloombergstatus.combloombergsurvey.combloombergtax.combloombergtax1.combloombergtaxtech.com!bloombergtradingchallenge.combloombergtv.mnbloombergvault.combloombergview.comblpcareers.com blpevents.comblpprofessional.com bmia.org bnef.combusinessweek.combusinessweekmag.com bwbx.io citylab.com gotraffic.netlondonmithraeum.comneweconomyforum.comnewenergyfinance.comquicktake.videotechatbloomberg.com tictoc.video  boxun.combowenpress.com breitbart.com -c-span.orgc-spanvideo.orgcabletv.com.hk i-cable.comcaijinglengyan.comcbs showtime cbs.comcbsaavideo.comcbscorporation.com cbsi.com -cbsi.video -cbsiam.com  cbsig.net -cbsimg.netcbsinteractive.comcbsistatic.com cbsivideo.com cbsnews.comcbspressexpress.com cbssports.com cbsstatic.com cbssvideo.com -viacbs.com -viacom.com viacomcbs.comviacomcbspressexpress.com paramount.comchinadecoding.comchinadigitaltimes.net cnbc.com -cnbcfm.com -nbcuni.comnbcudigitaladops.com cnn.com -cnn.io cnnarabic.com cnnlabs.com cnnmoney.ch cnnmoney.comcnnmoneystream.comcnnpolitics.com -cup.com.hk d100.net  anm.co.uk  dailym.aidailymail.co.uk dailymail.comdailymail.com.au dailymail.dkdailymailonline.comdmgmediaprivacy.co.ukmailhealth.commailonline.co.ukmailonline.commailonsunday.co.ukmailonsunday.ie metro.co.uk -mol.imthisismoney.co.uk -thismon.ee -dw.com dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.comepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net -etviet.comlagranepoca.com ntd.com  ntdca.com -ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtvla.com  ntdvn.compersianepochtimes.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.cz -forbes.com forbesimg.comfoxfox-corporation.com fox-news.com fox.com -fox.tv fox10.tv fox10news.comfox10phoenix.com  fox11.comfox13memphis.com fox13news.com  fox23.comfox23maine.com -fox247.com  fox247.tv  fox26.comfox26houston.comfox28media.com  fox29.comfox2detroit.com fox2news.com  fox32.comfox32chicago.comfox35orlando.comfox38corpuschristi.com fox42kptm.com  fox46.comfox46charlotte.com  fox47.com fox49.tv fox4news.com fox51tns.netfox5atlanta.com -fox5dc.com -fox5ny.com fox5storm.com fox6now.com fox7.comfox7austin.com fox9.comfoxacrossamerica.comfoxaffiliateportal.comfoxandfriends.com -foxbet.comfoxbusiness.comfoxbusiness.tvfoxbusinessgo.comfoxcanvasroom.comfoxcareers.comfoxcharlotte.com foxcincy.com foxcincy.jobs foxcincy.netfoxcollegesports.comfoxcorporation.comfoxcreativeuniversity.com foxcredit.com foxcredit.org foxd.tv -foxdcg.comfoxdeportes.comfoxdeportes.netfoxdeportes.tvfoxdigitalmovies.com foxdoua.comfoxentertainment.com -foxest.com -foxfaq.com -foxfdm.com foxfiles.com -foxinc.com foxkansas.com  foxla.com foxla.tvfoxlexington.comfoxmediacloud.com foxnation.comfoxnebraska.com -foxneo.comfoxneodigital.comfoxnetworks.infofoxnetworksinfo.com -foxnews.cc foxnews.com foxnews.net foxnews.org -foxnews.tvfoxnewsaffiliates.comfoxnewsaroundtheworld.comfoxnewsb2b.comfoxnewschannel.com foxnewsgo.net foxnewsgo.org foxnewsgo.tvfoxnewshealth.comfoxnewslatino.comfoxnewsmagazine.comfoxnewsnetwork.comfoxnewsopinion.comfoxnewspodcasts.comfoxnewspolitics.comfoxnewsradio.comfoxnewsrundown.comfoxnewssunday.com  foxon.comfoxphiladelphia.com foxpoker.com  foxrad.io foxredeem.comfoxrelease.comfoxrichmond.com foxrobots.comfoxsmallbusinesscenter.comfoxsmallbusinesscenter.netfoxsmallbusinesscenter.org foxsoccer.net foxsoccer.tvfoxsoccermatchpass.comfoxsoccerplus.comfoxsoccerplus.netfoxsoccerplus.tvfoxsoccershop.comfoxsports-chicago.comfoxsports-newyork.comfoxsports-world.com foxsports.cl foxsports.cofoxsports.co.ve foxsports.comfoxsports.com.arfoxsports.com.bofoxsports.com.brfoxsports.com.cofoxsports.com.ecfoxsports.com.gtfoxsports.com.mxfoxsports.com.pefoxsports.com.pyfoxsports.com.uyfoxsports.com.ve foxsports.gtfoxsports.info foxsports.netfoxsports.net.br foxsports.pe foxsports.sv foxsports.uyfoxsports2.comfoxsportsflorida.comfoxsportsgo.comfoxsportsla.comfoxsportsnetmilwaukee.comfoxsportsneworleans.comfoxsportsracing.comfoxsportssupports.comfoxsportsuniversity.comfoxsportsworld.comfoxstudiolot.com foxsuper6.com -foxtel.com foxtel.com.aufoxtelevisionstations.com  foxtv.com foxtvdvd.com  foxuv.comfoxweatherwatch.com  fssta.com -fxn.ws fxnetwork.comfxnetworks.com bentobox.tv kicu.tv ktvu.commyfoxsanfran.comafewmomentswith.com -anidom.comcasoneexchange.comcoronavirusnow.com -fse.tvgeraldoatlarge.comgooddaychicago.com joeswall.comkilmeadeandfriends.commaskedsingerfox.com -my13la.com -my20dc.commy20houston.com -my29tv.com my45.com  my9nj.commyfoxatlanta.commyfoxaustin.commyfoxboston.commyfoxcharlotte.commyfoxchicago.com myfoxdc.commyfoxdetroit.com myfoxdfw.commyfoxhouston.commyfoxhurricane.com myfoxla.commyfoxlosangeles.commyfoxlubbock.commyfoxmaine.com myfoxny.commyfoxorlando.commyfoxphilly.commyfoxphoenix.commyfoxtampa.commyfoxtampabay.commyfoxtwincities.com myfoxzone.com myq2.comnewsnowfox.comorlandohurricane.comparadisehotelquizfox.com q13.com -q13fox.comrealamericanstories.comrealamericanstories.inforealamericanstories.netrealamericanstories.orgrealamericanstories.tvrealmilwaukeenow.com rprimelab.comshopspeedtv.comsoccermatchpass.comspeeddreamride.comspeedfantasybid.comspeedracegear.com speedxtra.comteenchoice.com testonfox.comtheclasshroom.comthefoxnation.comthegeorgiascene.comwhatthefox.comwhosthehost.com wofl.tvwoflthenewsstation.com wogx.com foxnewsplayer-a.akamaihd.netfreebeacon.comgannett-cdn.com gannett.comgannettdigital.com usatoday.comusatodaynetworkservice.comthegatewaypundit.comglobalvoices.orgglobalvoicesonline.org  guo.media  gnews.org gtv.org gtv1.org g-tvapp.com hk01.com hkcnews.com hkopentv.com fantv.hkhongkongfp.comhuffingtonpost.cahuffingtonpost.co.ukhuffingtonpost.co.zahuffingtonpost.comhuffingtonpost.com.auhuffingtonpost.com.mxhuffingtonpost.dehuffingtonpost.eshuffingtonpost.frhuffingtonpost.grhuffingtonpost.inhuffingtonpost.ithuffingtonpost.jphuffingtonpost.kr huffpost.comhuffpostarabi.comhuffpostbrasil.comhuffpostmaghreb.com banned.video infowars.cominfowarsmedia.com inmediahk.netbusinessinsider.co.zabusinessinsider.combusinessinsider.com.aubusinessinsider.com.plbusinessinsider.debusinessinsider.esbusinessinsider.frbusinessinsider.inbusinessinsider.jpbusinessinsider.mxbusinessinsider.mybusinessinsider.nlbusinessinsider.sginsider-intelligence.com insider.cominsiderintelligence.com jfengtime.com landofhope.tvlocalpresshk.comfreedomplatform.tv londonreal.tv -ltn.com.tw yes123.com.tw macrumors.commalayalamanorama.com manorama.commanoramanews.commanoramaonline.commanoramayearbook.inonmanorama.com radiomango.fm  theman.in -theweek.invanitaonline.com -vanitha.invanithaveedu.com matters.news matters.one -medium.commedium.systems -myradio.hkmyradio.com.hkdreamworks.com cnbc.com -cnbcfm.com  msnbc.com -nbc.co nbc.com nbcnews.comnbcolympics.com nbcsports.com -nbcuni.comnbcuniversal.com s-nbcnews.com peacocktv.comuniversalorlando.comuniversalpictures.com&"universalpicturesinternational.com!universalstudioshollywood.com newscorp.com dowjones.com dowjones.iodowjoneson.com wsj.com wsj.net barrons.comandysparis.com newsmax.com -newsmax.in newsmaxtv.com newyorker.com -nikkei.com  nikkei.jp nikkei.co.jp now.com -now.com.hk nowe.com -now-tv.comnow-ashare.com -nypost.com nypost.helpnypostreprints.com nyt.com nyt.net nytchina.com nytcn.me  nytco.com nyti.ms nytimes.com nytstyle.comtimestalks.com aweencore.com  awetv.comherringnetwork.com oanencore.com oann.compassiontimes.hk qmap.pub realclear.comrealclearbooks.comrealcleardefense.comrealcleareducation.comrealclearenergy.orgrealclearfoundation.orgrealclearhealth.comrealclearhistory.comrealclearinvestigations.comrealclearlife.comrealclearmarkets.comrealclearpolicy.comrealclearpolitics.comrealclearpublicaffairs.comrealclearreligion.orgrealclearscience.comrealclearworld.comrealvision.com reuters.com -reuters.tvreutersmedia.net rfa.org -rfi.fr rsf.org -rt.com etvonline.hk rthk.hk -rtings.com scmp.com -i-scmp.comshuziyimin.orgsinoinsider.comsky sky.com skyassets.comskyoceanrescue.comskyoceanrescue.deskyoceanrescue.it skysports.com skysports.fr skysports.ieskysportsonline.comskysportsracing.com slashdot.org bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.krsoundofhope.orgwanokokorosoh.com theguardiandev-guardianapis.comdev-theguardian.com -gu-web.netguardianapis.comguardianapps.co.uk -guim.co.uktheguardian.comtheguardiandns.comtheinitium.com  init.shopthenationalpulse.comthestandnews.comdreamteamfc.com  page3.comsunbingo.co.uk talksport.comthescottishsun.co.uk thesun.co.uk  thesun.ie thetype.cloud -cn thetype.comtypeisbeautiful.com udn.com -udn.com.twudnfunlife.com  unwire.hkamerikaninsesi.comamerikaninsesi.orgamerikaovozi.comamerikayidzayn.comamerikiskhma.com bbg.govdandalinvoa.com darivoa.comdengeamerika.comdengiamerika.comglasamerike.netgolos-ameriki.rugolosameriki.com insidevoa.com pashtovoa.com persagg.comradiyoyacuvoa.com urduvoa.com voa.govvoaafaanoromoo.comvoaafrique.comvoabambara.com voabangla.comvoacambodia.comvoacantonese.comvoachinese.comvoadeewanews.comvoadeewaradio.com voahausa.comvoaindonesia.com voakorea.comvoalingala.comvoandebele.com voanews.com -voanews.euvoanoticias.com voanouvel.comvoaportugues.com voashona.com voasomali.comvoaswahili.com voathai.comvoatibetan.comvoatibetanenglish.comvoatiengviet.com voatour.comvoazimbabwe.comzeriamerikes.com cstatic.net -curbed.com  eater.comfunnyordie.com meridian.net polygon.com -racked.com -recode.net sbnation.com theverge.com vox-cdn.com vox.comvoxcreative.comvoxfieldguide.com voxmedia.com -voxops.net warroom.orgwashingtonpost.com watchout.tw -waa.tw -wenzhao.castartupschool.orgycombinator.com youlucky.com -zaobao.com zaobao.com.sg  zaobao.sg -bgr.inbollywoodlife.comcareerfundas.comcricketcountry.com dnai.in dnaindia.com earngeek.com ekhindi.com -ind.sh  india.comindiancolleges.com itripto.com  oncars.in prepsure.comthehealthsite.com wionews.com yo1health.com zee.com -zeebiz.comzeeentertainment.com zeenews.com"zeenews-fonts.s3.amazonaws.com zerohedge.com zoomingin.tv - -LITV litv.tv - -OUPamamanualofstyle.com anb.org blackstonespoliceservice.com epigeum.com oed.com  omscr.com oup.com -ouplaw.com ox.ac.ukoxfordaasc.comoxfordartonline.comoxfordbibliographies.comoxfordclinicalpsych.com oxforddnb.comoxfordfirstsource.comoxfordhandbooks.comoxfordlawtrove.comoxfordmedicine.comoxfordmusiconline.comoxfordpoliticstrove.com oxfordre.comoxfordreference.comoxfordscholarlyeditions.comoxfordscholarship.comoxfordwesternmusic.comsipriyearbook.org ukwhoswho.com"universitypressscholarship.comveryshortintroductions.com -+ -RUBY ruby-lang.org rubygems.org -A -NYPOST -nypost.com nypost.helpnypostreprints.com - -VOLVO volvodynafleetonline.comescandinavia-arg.comindependentoperatorcn.com road-crew.com udfs.com vfsco.at vfsco.be vfsco.bg vfsco.ca vfsco.ch vfsco.cl vfsco.co.uk vfsco.co.za  vfsco.com vfsco.com.au vfsco.com.br vfsco.com.cn -cn vfsco.com.tr vfsco.cz vfsco.de vfsco.dk vfsco.ee vfsco.es vfsco.fi vfsco.fr vfsco.hu vfsco.ie vfsco.in vfsco.it vfsco.jp vfsco.kr vfsco.lt vfsco.lv vfsco.mx vfsco.nl vfsco.no vfsco.pe vfsco.pl vfsco.ro vfsco.ru vfsco.se vfsco.sk vfsco.us vgcareers.netvolvo-truck.nl volvo.cavolvo.cn -cn  volvo.com volvo.com.cn -cn volvo.sevolvobrandshop.com volvobuses.at volvobuses.be volvobuses.ca volvobuses.ch volvobuses.covolvobuses.co.nzvolvobuses.co.ukvolvobuses.co.zavolvobuses.comvolvobuses.com.arvolvobuses.com.auvolvobuses.com.brvolvobuses.com.kwvolvobuses.com.ptvolvobuses.com.tw volvobuses.de volvobuses.dk volvobuses.es volvobuses.fi volvobuses.fr volvobuses.hk volvobuses.hu volvobuses.in volvobuses.it volvobuses.jo volvobuses.kr volvobuses.ma volvobuses.mx volvobuses.my volvobuses.no volvobuses.om volvobuses.ph volvobuses.pk volvobuses.pl volvobuses.ru volvobuses.se volvobuses.sg volvobuses.tn volvobuses.us volvoce.comvolvodefense.com volvogroup.be volvogroup.cn -cnvolvogroup.comvolvogroup.com.brvolvogroup.com.cn -cn volvogroup.de volvogroup.fr volvogroup.jp volvogroup.kr volvogroup.mx volvogroup.nl volvogroup.pe volvogroup.pl volvogroup.ru volvogroup.sevolvogrouptruckcenter.nlvolvomerchandise.comvolvopenta.comvolvopenta.com.br volvopenta.de volvopenta.es volvopenta.fr volvopenta.it volvopenta.nl volvopenta.se volvopenta.usvolvosaatio.fivolvospares.comvolvotrucks.aevolvotrucks.alvolvotrucks.amvolvotrucks.atvolvotrucks.azvolvotrucks.bavolvotrucks.bevolvotrucks.bgvolvotrucks.byvolvotrucks.chvolvotrucks.clvolvotrucks.co.aovolvotrucks.co.bwvolvotrucks.co.ilvolvotrucks.co.mzvolvotrucks.co.navolvotrucks.co.ukvolvotrucks.co.nzvolvotrucks.co.zavolvotrucks.co.zmvolvotrucks.co.zwvolvotrucks.comvolvotrucks.com.arvolvotrucks.com.auvolvotrucks.com.bnvolvotrucks.com.brvolvotrucks.com.cn -cnvolvotrucks.com.covolvotrucks.com.kwvolvotrucks.com.ptvolvotrucks.com.trvolvotrucks.com.twvolvotrucks.com.uavolvotrucks.czvolvotrucks.devolvotrucks.dkvolvotrucks.eevolvotrucks.esvolvotrucks.fivolvotrucks.frvolvotrucks.gevolvotrucks.grvolvotrucks.hkvolvotrucks.hrvolvotrucks.huvolvotrucks.idvolvotrucks.involvotrucks.itvolvotrucks.jpvolvotrucks.kgvolvotrucks.krvolvotrucks.kzvolvotrucks.ltvolvotrucks.lvvolvotrucks.mavolvotrucks.mdvolvotrucks.mkvolvotrucks.mnvolvotrucks.myvolvotrucks.netvolvotrucks.nlvolvotrucks.novolvotrucks.pevolvotrucks.phvolvotrucks.pkvolvotrucks.plvolvotrucks.psvolvotrucks.qavolvotrucks.rovolvotrucks.rsvolvotrucks.ruvolvotrucks.sevolvotrucks.sgvolvotrucks.sivolvotrucks.skvolvotrucks.tmvolvotrucks.tnvolvotrucks.uyvolvotruckcenter.bevolvotruckcenter.dkvolvotruckcenter.esvolvotruckcenter.fivolvotruckcenter.itvolvotruckcenter.krvolvotruckcenter.kzvolvotruckcenter.nlvolvotruckcenter.novolvotruckcenter.sevolvotruckrental.beudtrucksmeena.com -6 -AGORA agora.io -agoraio.cn agoralab.co - -AMP amp.devampproject.comampproject.netampproject.orgcdn.ampproject.org -cnamp.akamaized.net - -CHIPHELL chiphell.com - -JAVHD  javhd.com -> -NOTION  notion.sonotion-static.com -notion.new - - -REALVISIONrealvision.com - -BLIZZARD blizzard.cn -cn blizzard.comblizzardgearstore.comblz-contentstack.com blzstatic.cn -cn -battle.netbattlenet.com.cn -cn bnet.163.com -cnblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comdi.res.netease.com -cn!diablo3.nosdn.127.net -cnfiresidegatherings.complayhearthstone.com%hearthstone.nosdn.127.net -cnheroesofthestorm.com%hearthstone.nosdn.127.net -cn"heroes.nos.netease.com -cnplayoverwatch.com#overwatch.nosdn.127.net -cn starcraft.comstarcraft2.comsc2.nosdn.127.net -cnplaywarcraft3.comworldofwarcraft.com wowchina.com -cnwow.nosdn.127.net -cnblizzcon-a.akamaihd.netblz.nosdn.127.net -cnblzmedia-a.akamaihd.netblznav.akamaized.net - - CHINATELECOM -ctexcel.ca ctexcel.comctexcel.com.hk -ctexcel.fr -ctexcel.us -189.cnchinatelecom-h.comchinatelecom.com.cnchinatelecomglobal.com -chntel.com - -CYGWIN -cygwin.com - -GEOLOCATION-!CNacadaeafagalamanaoaqaratauawaxazbabgbhbibjbmbnbobrbsbvbwbybzcacdcgclcmcrcucwcxcyczdedkdzecegehereseufifjfkfofrgagbgdgeghgiglgmgngrgsgtgugwgyhkhnhthuieiliniqirjejmjojpkekhkiknkpkrkwkykzlblclilklrlsltlulymamcmdmfmgmhmkmnmompmqmrmtmumwmxmymznancnenfngninlnonpnrnunzompapepfpgphplpnrerorurwsascsdsesgsisjskslsnsrssstsusvsxsysztctdtfthtjtktltmtntotptrtttwtzuaugukumusuyuzvavcvevgvivnvuwfytzazmzwaflmlbnbanflnra averybbbbcgcebcrsdnbdnpdunsdvagerni globalxice locus mckinsey olayangroup -olayan praxisapseek -vistaprint vistawtc xerox athletabananarepublic  bloomberg boots calvinklein cartier chloegap gucci -hermesiwcjlc  lancaster lipsyloft mango  montblanc mrporter -netaporter -nextdirectnextnike oldnavy omega panerai  patagonia -piaget  piperlimepolo redstone -swatchaarp -abbott -abbvie aetna alcon -anthembms -boehringer caremore -cialis dabur  freseniusjnj merck mutuelle -sanofiaeg -airbus -alstom -aramco -blanco bosch -bostik -chesapeakechk crown -doosan -dupontflirfls flsmidth  gecompany grainger hitachi  honeywellifm ipirangajio komatsukoneksb  kuokgroup leclerclidl linde lottemanmtr reliance rexrothril rockwoolrwesandvikcoromant sandvik sapphiresca -schaeffler schmidt schwarzgroup schwarz senersewsncf statoil total -vanish -walter -warman weberweir woodsidezara zippo agakhanakdn -ansons -bharti -extraspace genting glean ikano -imamat  ladbrokes -livestrongmaif -mattel shell transformersvanawme astriumcern -emerck  hisamitsu lilly lundbeck lupin merckmsdmsdmtpc -otsuka -pfizer stadateva toray weather auspost deutschepostdhl epost fedex -pitneyaaa -abarthadac  alfaromeoaudi bentleybmw bridgestone bugatti buick cadillaccase -caseih  chevrolet chevy chrysler -datsun dodge -dunlop ferrarifiat  firestonefordgmc goodyear honda hyundai infiniti iveco -jaguarjeepkia lamborghini -lancia  landrover lexus lincoln maseratimini -mitsubishi mopar -newholland -nissanramseatsrt -suzuki -tatamotors -toyotatvs uconnect -volkswagen volvoaigo android apple bestbuy brother canondell digikey fujitsu  fujixerox  goldpointibm nikon nokia olympus  panasonic philips pioneer samsung sharpsony toshiba  yodobashi  allfinanzallfinanzberaterallfinanzberatungallyamericanexpressamexampanz banamex barclaycard barclaysbbtbbvabnl -bnpparibasbofa bradesco -capitalone cashbackbonuscbacfa chasecimb citadelciti commbank deloitte discover everbank fidelity hdfcbankhdfchsbcitaujcbjll jpmorganchase jpmorgankfhkpmg lacaixa lasalle lixil lplfinanciallplnab nadex netbanknorthwesternmutualopen -pictetpncpohl  pramerica -prudentialprupwcsaxosbiscbscor shriram softbank  statebank temasek -transunion ubankubs vanguardvisa wolterskluwerafamilycompany  aquarellediyduck -finish glade  homedepot  homegoods mrmuscleoffraid rightathome  scjohnsonaig allstateamericanfamily amfam amicaaxa chartis esurance farmers  goodhands guardian guardianlife iselect metlifemma -mutual -nationwide -nissaynorthlandinsurance -onyourside progressive redumbrella  statefarm -swiftcover thehartfordtiaatravelersinsurance  travelers travelguardtrvvig beats blockbusterbway netflix playstation showtimetab williamhillxboxasda bloomingdales -george  homesense justforulego macys  marshallsobiqvc safeway samsclub shopyourway staples -targetthd tiffany -tjmaxxtjx -tkmaxxvons walmartabb  accentureaceraco -active -airtel -amazonandaolawsaxis azure chatr -chrome cisco comcast -connectorscscdclkdish -docomodtvdwg emerson epson ericsson etisalat  fairwindsfido -flickr frogans frontierftrgbizgeaggeegle gmailgmogmx godaddygoog -googlegoogreeguge hangouthkt hotmailhtc -hughesieee iinet infosysinfy intel -intuitjavajcpjmpjprs juniperkddi -kindle -konamikpn lanxess liaison -lockermeo  microsoftmihmiimint mitekmit -mobily -mozaicmtn multichoice naspersnec neustar nexusnico -nortonntt -officeollo -oracle -orangeovh patchpayupccwqtel quest  richardli ricoh -rogers -sakurasaposassessfrshaw skolkovo skydrive skype sling smart stcgroupstc symantectatatcitdk telecity -telefonica terra translations  ultrabook unicornuol verisignvivavivo windows xfinity -xperia yahoo yamaxun -yandex yellowpages youtube -zappos -chanel clinique garnier  kerastase -kiehls lamer lancome -loreal -matrix -maybelline -natura origins -redkensvr barefoot beknown cityeatscookingchannel -cuisinella delmonte edekafage ferrero foodnetworkfood gallo heinz -kindermcd  mcdonalds pamperedchef -rocher -wilmarxn--3oq18vl8pn36axn--55qx5d8y0buji4b870uxn--5su34j936bgsgxn--b4w605ferd xn--cckwcxetd -xn--cg4bkixn--dkwm73cwpn xn--flw351exn--fzys8d69uvgmxn--hxt035cmppuelxn--hxt035czzpfflxn--j6w470d71isscxn--jlq480n2rgxn--jlq61u9w7bxn--kcrx77d1x4axn--kcrx7bb75ajk3bxn--mgba3a3ejtxn--mgba7c0bbn0axn--mgbaakc7dvfxn--mgbb9fbpob xn--ngbe9e0a xn--pgb3ceoj xn--qcka1pmcxn--w4r85el8fhu5dnra xn--w4rs40l avianca caravan changiairport cipriani clubmed delta firmdale -hilton hyatt kerryhotelskerrylogisiticskerryproperties marriott orientexpress  shangrila tradershotelstui -viking -virgin -webjetablecbre chintai  frontdoor -lefrakabc africamagicartebbc  canalpluscbncbsdstv -eurovisionfox -gallup globogotv guardianmediahbohgtvimdbitv -kyknetmnet movistar mzansimagicnhk nowtvsbs sevensky spiegel starhub -supersport theguardian travelchannelweatherchannel bauhaus latrobe -monashrmit pubmatic.compubmatic.co.jpads.pubmatic.com -ads taboola.com ahmia.fi akasha.worldbrowserleaks.combypasscensorship.org citizenlab.cacitizenlab.orgdat.foundationdemocracy.earth eff.orgepicbrowser.com ffprofile.comfreenetproject.org fteproxy.org  gfw.press -gfw.reportapplecensorship.comfreebrowser.orgfreewechat.com freeweibo.com greatfire.orgguardianproject.infohaveibeenpwned.compwnedpasswords.com -geti2p.net ipfs.io  jitsi.orggetlantern.org -lantern.io  ntc.partyonionshare.org ooni.org openvpn.netprivacytools.io psiphon3.comshadowsocks.org softether.orgsoftether-download.com stunnel.org telex.cctorproject.org tribler.org tunsafe.comtwister.net.co -uproxy.org  v2ray.com -v2ray.cool  v2fly.org vuvuzela.io -whonix.org wikileaks.org wireguard.com -zeronet.ioartstation.comartstationmedia.com drbl.in dribbble.com dynacw.co.jp -dynacw.com dynacw.com.cn dynacw.com.hk dynacw.com.tw -flickr -flickr.com -flickr.netstaticflickr.com  fonts.com  fonts.netfontsinuse.comgettyimages.aegettyimages.atgettyimages.begettyimages.cagettyimages.chgettyimages.co.jpgettyimages.co.nzgettyimages.co.ukgettyimages.comgettyimages.com.augettyimages.com.brgettyimages.com.mxgettyimages.degettyimages.dkgettyimages.esgettyimages.figettyimages.frgettyimages.hkgettyimages.iegettyimages.ingettyimages.itgettyimages.nlgettyimages.nogettyimages.ptgettyimages.se glyphsapp.comjiyu-kobo.co.jpfontexplorerx.com fontbook.com fontshop.comfstopimages.com40fontshop-prod-responsive-images.s3.amazonaws.com linotype.com myfonts.com myfonts.net monotype.commonotypeimaging.com bitstream.com itcfonts.commorisawa.co.jptypesquare.com -pin.it -pinimg.com pinterest.at pinterest.be pinterest.ca pinterest.ch pinterest.cl pinterest.copinterest.co.atpinterest.co.inpinterest.co.krpinterest.co.nzpinterest.co.uk pinterest.compinterest.com.aupinterest.com.bopinterest.com.ecpinterest.com.mxpinterest.com.pepinterest.com.pypinterest.com.uypinterest.com.vn pinterest.de pinterest.dk pinterest.ecpinterest.engineering pinterest.es pinterest.fr pinterest.hu pinterest.id pinterest.ie pinterest.inpinterest.info pinterest.it pinterest.jp pinterest.kr pinterest.mx pinterest.nl pinterest.nz pinterest.pe pinterest.ph pinterest.pt pinterest.ru pinterest.se pinterest.th pinterest.tw pinterest.uk pinterest.vnpinterestmail.comrealtype.co.jp realtype.jptypenetwork.comtypography.com webtype.commini4myminicard.comaboutyourmini.comatlantaminidealers.comgreatergothammini.com!midatlanticbmwmotorcycles.commini-abudhabi.commini-antilles.frmini-bahrain.commini-bosnia.com mini-clubs-international.commini-connected.atmini-connected.bemini-connected.chmini-connected.co.ukmini-connected.commini-connected.czmini-connected.demini-connected.dkmini-connected.eemini-connected.esmini-connected.fimini-connected.frmini-connected.iemini-connected.itmini-connected.ltmini-connected.lumini-connected.lvmini-connected.nlmini-connected.nomini-connected.plmini-connected.ptmini-connected.semini-corporate-sales.com mini-coupe.camini-dubai.com -mini-e.commini-egypt.commini-georgia.commini-grouparchiv.demini-grouparchive.commini-jordan.com mini-ksa.commini-kuwait.commini-lebanon.com mini-me.com mini-oman.commini-qatar.commini-srilanka.commini-stjohns.camini-stjohns.commini-tahiti.commini-vietnam.commini-windsor.camini-windsor.com mini.am mini.at mini.be mini.bg mini.by mini.ca mini.cc mini.ch mini.cl -mini.co.cr -mini.co.id -mini.co.il -mini.co.kr -mini.co.me -mini.co.th -mini.co.uk -mini.co.za mini.com mini.com.ar mini.com.bn mini.com.br mini.com.co mini.com.cy mini.com.do mini.com.ec mini.com.gr mini.com.gt mini.com.hr mini.com.mk mini.com.mo mini.com.mt mini.com.mx mini.com.pa mini.com.pe mini.com.ph mini.com.pl mini.com.py mini.com.sg mini.com.tr mini.com.tw mini.com.uy mini.cz mini.de mini.dk mini.dz mini.es mini.fi mini.fr mini.gp mini.hu mini.ie mini.in mini.is mini.it mini.jp mini.kz mini.lu mini.ma mini.md mini.mq mini.mu mini.my mini.nc mini.nl mini.no mini.pt mini.re mini.ro mini.rs mini.ru mini.se mini.si mini.sk mini.tm mini.tn mini.ua -mini101.caminiargentina.comminibrossard.caminibrossard.com minicanada.caminicaribbean.com miniccrc.ca minicooper.caminidealer.comminidealernet.comminidowntown.caminidowntown.com minidrivingexperienceusa.com minidurham.caminidurham.com  minie.com -minifs.comminigeorgian.caminigrandriver.comminihalifax.caminihalifax.com -minihk.comminiinvasion.caminiitalianjob.comminikelowna.caminikelowna.comminilangley.caminilangley.com minilat.com minilaval.ca minilaval.com minilondon.ca minilondon.cominimarkham.caminimarkham.comminimoncton.caminimoncton.comminimontrealcentre.caminimontroyal.caminimontroyal.comminimotoringrewards.comminimotoringschool.comminimotorsport.commininanaimo.camininanaimo.comminioakville.comminiofmonrovia.comminipetfriendly.comminirichmond.caminirichmond.comminisaskatoon.caminisaskatoon.com minishop.ca minispace.comminispecialoffers.caminispygear.comministcatharines.caministeagathe.comministjohns.caminitakesthestates.comminitoronto.caminitroisrivieres.ca miniusa.comminiusaservice.comminiusatires.comminivalueservice.comminivancouver.caminivaughanwest.caminivaughanwest.comminivictoria.caminivictoria.comminivilledequebec.caminivilledequebec.comminiwholesaleconnect.com miniwidget.caminiwindsor.comminiworkshop.comminiyaletown.capugetsoundmini.comshopminiusa.comsouthfloridamini.com -trmini.comtroisrivieresmini.comyours-customised.mini.combmwapprovedusedbmw.combaltimorebmw.combayareabmw.combmw-abudhabi.combmw-adventskalender.combmw-albania.combmw-antilles.frbmw-art-journey.combmw-arts-design.com bmw-asia.com bmw-auslieferungszentrum.combmw-authority-vehicles.combmw-bahrain.combmw-businessdrive.combmw-calgary.ca bmw-carit.debmw-classic.combmw-clubs-international.combmw-connected-drive.combmw-connecteddrive.aebmw-connecteddrive.atbmw-connecteddrive.bebmw-connecteddrive.bgbmw-connecteddrive.cabmw-connecteddrive.chbmw-connecteddrive.co.nzbmw-connecteddrive.co.ukbmw-connecteddrive.co.zabmw-connecteddrive.combmw-connecteddrive.com.aubmw-connecteddrive.com.brbmw-connecteddrive.com.cybmw-connecteddrive.com.hrbmw-connecteddrive.com.kwbmw-connecteddrive.com.mtbmw-connecteddrive.czbmw-connecteddrive.debmw-connecteddrive.dkbmw-connecteddrive.eebmw-connecteddrive.esbmw-connecteddrive.fibmw-connecteddrive.frbmw-connecteddrive.grbmw-connecteddrive.hubmw-connecteddrive.iebmw-connecteddrive.itbmw-connecteddrive.jpbmw-connecteddrive.krbmw-connecteddrive.ltbmw-connecteddrive.lubmw-connecteddrive.lvbmw-connecteddrive.mxbmw-connecteddrive.mybmw-connecteddrive.nlbmw-connecteddrive.nobmw-connecteddrive.plbmw-connecteddrive.ptbmw-connecteddrive.robmw-connecteddrive.rubmw-connecteddrive.sebmw-connecteddrive.sgbmw-connecteddrive.sibmw-connecteddrive.skbmw-connecteddrive.twbmw-corporate-sales.combmw-diplomatic-sales.combmw-driving-center.co.krbmw-drivingexperience.com bmw-dubai.com -bmw-eg.com bmw-fleet.net bmw-ghana.combmw-golfsport.com bmw-group.com bmw-group.netbmw-grouparchiv.debmw-grouparchives.com -bmw-gta.cabmw-i-pure-impulse.com bmw-i.jp bmw-int1.com bmw-iraq.combmw-jordan.combmw-konzernarchiv.de bmw-ksa.combmw-kuwait.com -bmw-lao.labmw-lebanon.combmw-m-safetycar.com  bmw-m.combmw-mdrivetour.com -bmw-me.combmw-military-sales.combmw-motorcycle.combmw-motorcycles.vnbmw-motorrad-abudhabi.com bmw-motorrad-authorities.combmw-motorrad-dubai.combmw-motorrad-motorsport.com!bmw-motorrad-now-or-never.com&"bmw-motorrad-service-inclusive.combmw-motorrad-test-ride.combmw-motorrad.atbmw-motorrad.bebmw-motorrad.bgbmw-motorrad.bhbmw-motorrad.bobmw-motorrad.cabmw-motorrad.chbmw-motorrad.clbmw-motorrad.cobmw-motorrad.co.idbmw-motorrad.co.krbmw-motorrad.co.nzbmw-motorrad.co.thbmw-motorrad.co.ukbmw-motorrad.co.zabmw-motorrad.combmw-motorrad.com.arbmw-motorrad.com.aubmw-motorrad.com.brbmw-motorrad.com.dobmw-motorrad.com.hrbmw-motorrad.com.mxbmw-motorrad.com.mybmw-motorrad.com.pebmw-motorrad.com.pybmw-motorrad.com.trbmw-motorrad.crbmw-motorrad.czbmw-motorrad.debmw-motorrad.dkbmw-motorrad.dzbmw-motorrad.ecbmw-motorrad.eebmw-motorrad.esbmw-motorrad.fibmw-motorrad.frbmw-motorrad.grbmw-motorrad.gtbmw-motorrad.hubmw-motorrad.inbmw-motorrad.itbmw-motorrad.jpbmw-motorrad.lubmw-motorrad.mabmw-motorrad.nlbmw-motorrad.nobmw-motorrad.pabmw-motorrad.plbmw-motorrad.ptbmw-motorrad.robmw-motorrad.rsbmw-motorrad.rubmw-motorrad.sabmw-motorrad.sebmw-motorrad.sibmw-motorrad.skbmw-motorrad.svbmw-motorrad.twbmw-motorrad.uabmw-motorrad.uybmw-motorsport.combmw-mountains.combmw-museum.combmw-museum.netbmw-nigeria.com bmw-oman.com bmw-ottawa.cabmw-pakistan.combmw-plant-munich.combmw-pma.com.sgbmw-powertrain.combmw-product-highlights.com bmw-qatar.combmw-routes.com -bmw-rp.combmw-rrdays.combmw-saudiarabia.combmw-security-vehicles.combmw-special-sales.combmw-sports.com bmw-sudan.combmw-tahiti.combmw-tunisia.combmw-vancouver.ca bmw-voli.me bmw-welt.com bmw-welt.net bmw-welt.tvbmw-werk-berlin.de bmw-world.com bmw-world.net bmw-world.tvbmw-worldfinal.combmw-yachtsport.com -bmw-yeg.ca bmw-yemen.com -bmw.am -bmw.at -bmw.az -bmw.ba -bmw.bb -bmw.be -bmw.bg -bmw.bm -bmw.bs -bmw.by -bmw.ca -bmw.cc -bmw.ch -bmw.cl  bmw.co.ao  bmw.co.cr  bmw.co.id  bmw.co.il  bmw.co.jp  bmw.co.ke  bmw.co.kr  bmw.co.nz  bmw.co.th  bmw.co.uk  bmw.co.za bmw.com -bmw.com.ar -bmw.com.au -bmw.com.bd -bmw.com.bn -bmw.com.bo -bmw.com.br -bmw.com.cn -cn -bmw.com.co -bmw.com.cy -bmw.com.do -bmw.com.ec -bmw.com.ge -bmw.com.gt -bmw.com.kh -bmw.com.ky -bmw.com.mk -bmw.com.mo -bmw.com.mt -bmw.com.mx -bmw.com.my -bmw.com.ni -bmw.com.pa -bmw.com.pe -bmw.com.ph -bmw.com.py -bmw.com.sg -bmw.com.sv -bmw.com.tr -bmw.com.tw -bmw.com.uy -bmw.com.ve -bmw.cw -bmw.cz -bmw.de -bmw.dk -bmw.dz -bmw.ee -bmw.es -bmw.fi -bmw.fr -bmw.gp -bmw.gr -bmw.hn -bmw.hr -bmw.ht -bmw.hu -bmw.ie -bmw.in -bmw.is -bmw.it -bmw.kg -bmw.kz -bmw.lc -bmw.lk -bmw.lt -bmw.lu -bmw.lv -bmw.ly -bmw.ma -bmw.md -bmw.mn -bmw.mq -bmw.mu -bmw.nc -bmw.nl -bmw.no -bmw.pl -bmw.ps -bmw.pt -bmw.re -bmw.ro -bmw.rs -bmw.se -bmw.si -bmw.sk -bmw.sn -bmw.tm -bmw.tt -bmw.ua -bmw.uz -bmw.vn bmwarchiv.at bmwarchiv.debmwartjourney.com bmwasia.combmwauslieferungszentrum.com bmwbikes.com  bmwbkk.de -bmwccrc.cabmwcenternet.combmwchampionship.combmwchampionshipusa.combmwcharitygolf.combmwcitychallenge.combmwclassic.combmwcolorado.combmwconnecteddrive.combmwcustomapparel.com bmwdcsnet.netbmwdealercareers.combmwdealerdirect.combmwdelawarevalley.com bmwfilms.combmwgroup-classic-heart.combmwgroup-classic.combmwgroup-gaad.combmwgroup-plants.combmwgroup-posdigital.combmwgroup-werke.com bmwgroup.at bmwgroup.com bmwgroup.net bmwgroup.jobsbmwgroupclassic.combmwgroupdesignworks.combmwgroupdirect.combmwgroupfs.combmwgroupinfobahn.combmwgroupna.com  bmwhk.com bmwi.ca bmwi.jpbmwiventures.combmwjamaica.com -bmwlat.combmwlifestyle.ca bmwm.combmwmagazine.combmwmagazine.de bmwmass.com bmwmass.net  bmwmc.netbmwmontreal.cabmwmotorcycles.combmwmotorcycleusa.combmwmotorrad.co.krbmwmotorrad.com.aubmwmotorrad.com.phbmwmotorrad.com.sgbmwmotorradhk.combmwmotorshowblog.combmwmotorsport.combmwmperformance.com bmwmuseum.netbmwmyanmar.combmwofannapolis.combmwofcentralpa.combmwoftulsa.combmwondemandusa.com bmworegon.combmwperformancecenter.combmwpittsburgh.combmwproductnews.com bmwsafari.com -bmwsfl.com -bmwsfl.net -bmwshop.cabmwspecialoffers.ca bmwsports.combmwstartupgarage.com bmwstep.combmwstepconnections.combmwsummerschool.combmwtampabay.com -bmwusa.combmwusatires.combmwusaservice.combmwusfactory.combmwusrideracademy.combmwvalueservice.combmwwholesaleconnect.com bmwworld.com bmwworld.net bmwworld.tvbmwzentrum.combrand-protection-team.comcencoastbmw.com chargenow.comchargenowusa.comchicagolandbmw.comconnected-drive.com daytonbmw.comdealerspeed.net desertbmw.com dreambmw.ca grupobmw.com guambmw.comhackthedrive.com hawaiibmw.com iaablog.comlasvegasbmw.com m-power.comminneapolisbmw.comminneapolisbmw.netmotorshowblog.com mybmw.ca  mybmw.comnewhampshirebmw.com  nmbmw.comocbmwdealers.comoffresspecialesbmw.ca park-now.com parkinfo.com -pdxbmw.com -phxbmw.compre-bmwgroup.jobspugetsoundbmw.com rentaride.com rentaride.derhodeislandbmw.comsdcountybmw.comshopbmwmotorcycles.comshopbmwusa.com socalbmw.comstlouisbmw.netthe-m-festival.comtristatebmw.comvancouverbmwretailers.cawashingtondcbmw.com alfera.com.hk alfera.com.my  alfera.in  alfera.myalphera-finance.co.inalphera-finance.com.hkalphera-finance.in -alphera.ca alphera.co.in alphera.co.nz alphera.comalphera.com.esalphera.com.hkalphera.com.my -alphera.de -alphera.es -alphera.ie -alphera.in -alphera.my alphera.netalpherafinance.com.hkalpherafinancialservices.esalpherafinancialservices.in alpherafs.caalpherafs.co.nzalpherafs.com.hkalpherafs.com.my alpherafs.ie alpherafs.in alpherafs.my premiumfs.de alphabet.asia alphabet.at alphabet.be alphabet.biz alphabet.chalphabet.co.hualphabet.co.ukalphabet.co.za alphabet.comalphabet.com.cn -cnalphabet.com.esalphabet.com.lvalphabet.com.mxalphabet.com.plalphabet.com.pt alphabet.cz alphabet.de alphabet.es alphabet.eu alphabet.fr alphabet.info alphabet.jp alphabet.lt alphabet.lu alphabet.lv alphabet.mxalphabet.net.cn -cn alphabet.noalphabet.org.uk alphabet.pl alphabet.pt alphabet.uk alphabet.usalphabetfinance.netelectricluxury.comrolls-roycecullinan.comrolls-roycemotorcars.comrolls-roycemotorcarsna.com  rrtis.comspiritofecstasy.com bridgestone  bandag.cc -bandag.comblizzak-juken.jpbookmybridgestonetyre.combridgestone-asiapacific.combridgestone-bandag.combridgestone-brand.com#bridgestone-business-service.jpbridgestone-korea.co.krbridgestone-plt-eng.combridgestone-tac-oman.combridgestone.clbridgestone.cn -cnbridgestone.co.crbridgestone.co.idbridgestone.co.inbridgestone.co.jpbridgestone.co.thbridgestone.combridgestone.com.arbridgestone.com.brbridgestone.com.cn -cnbridgestone.com.cobridgestone.com.mxbridgestone.com.sgbridgestone.com.twbridgestone.com.vnbridgestoneamericas.combridgestonearena.combridgestonecntc.combridgestonecomercial.clbridgestonecomercial.co.crbridgestonecomercial.com.arbridgestonecomercial.com.brbridgestonecomercial.com.cobridgestonecomercial.com.mxbridgestonegolf.combridgestonegz.combridgestonela.combridgestonemarketing.combridgestonemerchandise.com bridgestonenationalfleet.combridgestoneperformance.com#bridgestoneperformancemedia.net bridgestonerapiddelivery.combridgestonerewards.combridgestonesyb.combridgestonetire.cabridgestonetire.combridgestonetyre.com.mybridgestonevan.combridgestonewx.combs-adreview.com bs-awh.ne.jp  bsw.co.jp -bsw.jpcarcare-and-tireshop.jpdaytontrucktires.com ecoforme.jp gcrtires.comjsbridgestone.commenshin-channel.com monitrix.net mr-tireman.jpmybridgestoneeducation.com playz.jp -potenza.jpprodrive-japan.comstore-bridgestonesports.com thetread.com tiresplus.com cfna.combastropfirestone.comcrossfitfirestone.com firestone.clfirestone.co.crfirestone.com.arfirestone.com.brfirestone.com.cofirestone.com.mxfirestonebpco.comfirestonecomercial.clfirestonecomercial.co.crfirestonecomercial.com.arfirestonecomercial.com.brfirestonecomercial.com.cofirestonecomercial.com.mx!firestonecompleteautocare.comfirestonedrivestore.comfirestoneip.comfirestonerewards.comfirestonetire.cafirestonetire.comhibdontire.comwheelworks.netnokiantyres.cn -cnnokiantyres.com solarcity.comtesla.cn -cn  tesla.com tesla.com.cn -cnteslamotors.cn -cnteslamotors.comteslamotors.com.cn -cntesla-cdn.thron.cn -cntesla-cdn.thron.com volvodynafleetonline.comescandinavia-arg.comindependentoperatorcn.com road-crew.com udfs.com vfsco.at vfsco.be vfsco.bg vfsco.ca vfsco.ch vfsco.cl vfsco.co.uk vfsco.co.za  vfsco.com vfsco.com.au vfsco.com.br vfsco.com.cn -cn vfsco.com.tr vfsco.cz vfsco.de vfsco.dk vfsco.ee vfsco.es vfsco.fi vfsco.fr vfsco.hu vfsco.ie vfsco.in vfsco.it vfsco.jp vfsco.kr vfsco.lt vfsco.lv vfsco.mx vfsco.nl vfsco.no vfsco.pe vfsco.pl vfsco.ro vfsco.ru vfsco.se vfsco.sk vfsco.us vgcareers.netvolvo-truck.nl volvo.cavolvo.cn -cn  volvo.com volvo.com.cn -cn volvo.sevolvobrandshop.com volvobuses.at volvobuses.be volvobuses.ca volvobuses.ch volvobuses.covolvobuses.co.nzvolvobuses.co.ukvolvobuses.co.zavolvobuses.comvolvobuses.com.arvolvobuses.com.auvolvobuses.com.brvolvobuses.com.kwvolvobuses.com.ptvolvobuses.com.tw volvobuses.de volvobuses.dk volvobuses.es volvobuses.fi volvobuses.fr volvobuses.hk volvobuses.hu volvobuses.in volvobuses.it volvobuses.jo volvobuses.kr volvobuses.ma volvobuses.mx volvobuses.my volvobuses.no volvobuses.om volvobuses.ph volvobuses.pk volvobuses.pl volvobuses.ru volvobuses.se volvobuses.sg volvobuses.tn volvobuses.us volvoce.comvolvodefense.com volvogroup.be volvogroup.cn -cnvolvogroup.comvolvogroup.com.brvolvogroup.com.cn -cn volvogroup.de volvogroup.fr volvogroup.jp volvogroup.kr volvogroup.mx volvogroup.nl volvogroup.pe volvogroup.pl volvogroup.ru volvogroup.sevolvogrouptruckcenter.nlvolvomerchandise.comvolvopenta.comvolvopenta.com.br volvopenta.de volvopenta.es volvopenta.fr volvopenta.it volvopenta.nl volvopenta.se volvopenta.usvolvosaatio.fivolvospares.comvolvotrucks.aevolvotrucks.alvolvotrucks.amvolvotrucks.atvolvotrucks.azvolvotrucks.bavolvotrucks.bevolvotrucks.bgvolvotrucks.byvolvotrucks.chvolvotrucks.clvolvotrucks.co.aovolvotrucks.co.bwvolvotrucks.co.ilvolvotrucks.co.mzvolvotrucks.co.navolvotrucks.co.ukvolvotrucks.co.nzvolvotrucks.co.zavolvotrucks.co.zmvolvotrucks.co.zwvolvotrucks.comvolvotrucks.com.arvolvotrucks.com.auvolvotrucks.com.bnvolvotrucks.com.brvolvotrucks.com.cn -cnvolvotrucks.com.covolvotrucks.com.kwvolvotrucks.com.ptvolvotrucks.com.trvolvotrucks.com.twvolvotrucks.com.uavolvotrucks.czvolvotrucks.devolvotrucks.dkvolvotrucks.eevolvotrucks.esvolvotrucks.fivolvotrucks.frvolvotrucks.gevolvotrucks.grvolvotrucks.hkvolvotrucks.hrvolvotrucks.huvolvotrucks.idvolvotrucks.involvotrucks.itvolvotrucks.jpvolvotrucks.kgvolvotrucks.krvolvotrucks.kzvolvotrucks.ltvolvotrucks.lvvolvotrucks.mavolvotrucks.mdvolvotrucks.mkvolvotrucks.mnvolvotrucks.myvolvotrucks.netvolvotrucks.nlvolvotrucks.novolvotrucks.pevolvotrucks.phvolvotrucks.pkvolvotrucks.plvolvotrucks.psvolvotrucks.qavolvotrucks.rovolvotrucks.rsvolvotrucks.ruvolvotrucks.sevolvotrucks.sgvolvotrucks.sivolvotrucks.skvolvotrucks.tmvolvotrucks.tnvolvotrucks.uyvolvotruckcenter.bevolvotruckcenter.dkvolvotruckcenter.esvolvotruckcenter.fivolvotruckcenter.itvolvotruckcenter.krvolvotruckcenter.kzvolvotruckcenter.nlvolvotruckcenter.novolvotruckcenter.sevolvotruckrental.beudtrucksmeena.com mastercard.ae mastercard.at mastercard.az mastercard.ba mastercard.be mastercard.bg mastercard.by mastercard.ca mastercard.ch mastercard.cl mastercard.cn -cnmastercard.co.idmastercard.co.ilmastercard.co.inmastercard.co.jpmastercard.co.kemastercard.co.krmastercard.co.nzmastercard.co.thmastercard.co.ukmastercard.co.vemastercard.co.zamastercard.commastercard.com.armastercard.com.aumastercard.com.bhmastercard.com.brmastercard.com.bzmastercard.com.cn -cnmastercard.com.comastercard.com.cymastercard.com.egmastercard.com.gemastercard.com.gtmastercard.com.hkmastercard.com.kwmastercard.com.lbmastercard.com.mxmastercard.com.mymastercard.com.ngmastercard.com.pemastercard.com.phmastercard.com.samastercard.com.sgmastercard.com.trmastercard.com.twmastercard.com.vemastercard.com.vn mastercard.cz mastercard.de mastercard.dk mastercard.es mastercard.eu mastercard.fi mastercard.fr mastercard.gr mastercard.hr mastercard.hu mastercard.iemastercard.inc mastercard.it mastercard.jo mastercard.ke mastercard.kz mastercard.lu mastercard.md mastercard.my mastercard.nl mastercard.no mastercard.om mastercard.pl mastercard.pt mastercard.qa mastercard.ro mastercard.rs mastercard.ru mastercard.se mastercard.si mastercard.sk mastercard.ua mastercard.usareyoucreditwise.comborderlessprepaid.combranchportal.com idservice.incinclusivegrowthscore.com findacard.com mastercad.commastercard-email.commastercardacademy.commastercardadvisors.commastercardcenter.commastercardcenter.org*&mastercardcenterforinclusivegrowth.orgmastercardconnect.commastercardezsavings.commastercardidtheftalerts.commastercardrestaurant.commastercardservices.commastercardworldwide.commasterpassteststore.commasterintelligence.commcpeaceofmind.commyaccountglobalcash.commycardbenefits.comonedinesfree.com paypass.netpieceofplastic.compredictivetechnologies.com priceless.com pricelessmarketingengine.comsbitravelcard.comshoppercentre.com!smartcommunitiescoalition.com!smartcommunitiescoalition.org startpath.comtaptotokyo.comtasteofpremium.jptravelcontroller.comwwwpaypass.combecomeindex.comcashpassport.cacashpassport.co.zacashpassport.comcashpassport.com.brcashpassport.netcorporatecashpassport.comicashpassport.com.mxintercamcashpassport.com.mx!multicurrencycashpassport.comshinhangmc.commastercardbiz.camastercardbiz.com!mastercardbusinessnetwork.com -nab.com.aunabtravellercard.com.au 53world.com53worldsweeps.comlovethiscity.commastercardmoments.compahabicilemezsurprizler.com priceless.compriceless.com.cn -cn priceless.orgpricelessafrica.compricelessarabia.compricelessaruba.compricelessbeijing.cn -cnpricelessbeijing.com#pricelessbeijing.com.cn -cnpricelesshongkong.compricelesshonolulu.compricelesspick.compricelesssantiago.compricelesssydney.compricelesssurprises.compricelesstoronto.capricelesstv.com simplify.comsimplifycommerce.comcashpassportglobe.comgwktravelex.nl travelex.be travelex.bh travelex.catravelex.co.intravelex.co.jptravelex.co.nztravelex.co.uk travelex.comtravelex.com.autravelex.com.cn -cntravelex.com.hktravelex.com.mytravelex.com.omtravelex.com.tr travelex.de travelex.fr travelex.it travelex.qatravelexae.comtravelexch.comtravelexmoneycard.combidvestbank.co.zaworldcurrencycard.co.zanab.demdex.net&"nationalaustraliaban.tt.omtrdc.netaccount-paypal.infoaccount-paypal.netaccount-paypal.orgaccountpaypal.comaccountpaypal.netaccountpaypal.org anfutong.cn -cn anfutong.comanfutong.com.cn -cn beibao.cn -cn -beibao.com beibao.com.cn -cn bill-safe.combillmelater.combillmelater.infobillmelater.net bml.infobuyfast-paysmart.net cashify.comdevtools-paypal.comexperiencebillmelater.comfundpaypal.com -gmoney.org -i-o-u.infologin-paypal.comlogin-paypal.infomywaytopay.infomywaytopay.net -pa9pal.com paaypal.com  paily.net  paily.org -paipal.com -pavpal.com paydiant.com paylike.com -paypa1.com -paypa1.org paypaal.compaypal-activate.compaypal-activate.infopaypal-activate.orgpaypal-apac.compaypal-apps.compaypal-biz.compaypal-brandcentral.compaypal-business.compaypal-business.netpaypal-business.orgpaypal-cardcash.compaypal-cash.compaypal-center.compaypal-center.infopaypal-center.netpaypal-center.orgpaypal-communication.compaypal-communications.compaypal-communications.netpaypal-community.compaypal-community.netpaypal-comunidad.compaypal-corp.compaypal-database.compaypal-database.uspaypal-donations.compaypal-dynamic.compaypal-engineering.compaypal-europe.compaypal-excelinvoicing.compaypal-exchanges.compaypal-forward.compaypal-galactic.compaypal-gift.compaypal-gifts.compaypal-gpplus.compaypal-here.compaypal-hrsystem.compaypal-innovationlab.compaypal-integration.compaypal-japan.compaypal-knowledge.compaypal-labs.compaypal-latam.compaypal-learning.compaypal-login.compaypal-login.infopaypal-login.orgpaypal-login.uspaypal-luxury.compaypal-mainstreet.netpaypal-marketing.compaypal-media.compaypal-merchantloyalty.compaypal-mobilemoney.compaypal-network.orgpaypal-notice.compaypal-notify.compaypal-online.infopaypal-online.netpaypal-online.orgpaypal-optimizer.compaypal-pages.compaypal-photocard.compaypal-plaza.compaypal-portal.compaypal-prepagata.compaypal-prepagata.netpaypal-prepaid.compaypal-profile.compaypal-proserv.compaypal-qrshopping.orgpaypal-recargacelular.compaypal-redeem.compaypal-referral.compaypal-retail.compaypal-scoop.compaypal-search.compaypal-secure.netpaypal-secure.orgpaypal-security.netpaypal-security.orgpaypal-service.orgpaypal-signin.compaypal-signin.uspaypal-special.compaypal-specialoffers.compaypal-sptam.compaypal-support.compaypal-survey.compaypal-survey.orgpaypal-status.compaypal-team.compaypal-viewpoints.net  paypal.ca -paypal.com paypal.com.cn -cn paypal.com.hk paypal.com.sg  paypal.hk paypal.info  paypal.jp  paypal.me paypal.net.cn -cn paypal.org.cn -cn  paypal.so  paypal.uspaypalbeacon.compaypalbenefits.compaypalbrasil.compaypalcommunity.cn -cnpaypalcommunity.compaypalcommunity.netpaypalcommunity.orgpaypalcorp.compaypalcredit.compaypalcreditcard.compaypalgivingfund.org paypalhere.cn -cnpaypalhere.compaypalhere.com.cn -cnpaypalhere.infopaypalhere.netpaypalhere.org paypalhere.tv paypali.net paypalinc.compaypalindia.compaypalinsuranceservices.org paypall.compaypallabs.com paypalme.com paypalnet.net paypalnet.orgpaypalnetwork.infopaypalnetwork.netpaypalnetwork.orgpaypalobjects.compaypalonline.netpaypalonline.orgpaypalprepagata.compaypalprepagata.netpaypalservice.compaypalshopping.compaypalshopping.netpaypalsurvey.com paypalx.com paypaly.com payppal.com payypal.compdncommunity.com -pp-soc.com ppaypal.com  pppds.com pypl.com  pypl.info pypl.net pypl.tvsecure-paypal.infosecurepaypal.info sslpaypal.orgthepaypalshop.comtheshoppingexpresslane.netwww-paypal.info www-paypal.usxn--bnq297cix3a.cn -cnbraintreegateway.combraintreegateway.tvbraintreepayments.combraintreepayments.infobraintreepayments.orgbraintreepayments.tv!braintreepaymentsolutions.combraintreeps.combriantreepayments.netbriantreepayments.tv card.iogetbraintree.com krakenjs.comloanbuilder.comswiftcapital.com simility.com cashify.netswiftbank.info swiftbank.usswiftfinancial.comswiftfinancial.infoswiftfinancial.netvenmo-touch.com  venmo.com -venmo.info  venmo.net  venmo.org  cash2.comfilipino-music.net -s-xoom.comwebmoneyinfo.com2.wiremoneytoirelandwithxoomeasierandcheaper.com wwwxoom.comxoom-experience.com xoom.com xoom.io xoom.net.cn -cn xoom.us xoomcom.comvenmo.s3.amazonaws.com softbank sb-mobile.jpsb-telecom.netsoftbank-ipo.comsoftbank-jp.comsoftbank-robotics.comsoftbank-telecom.comsoftbank-telecom.net softbank.jp softbank.tvsoftbankbb.comsoftbankbb.netsoftbankci.comsoftbankhawksstore.jpsoftbankmobile.netsoftbankrobotics.comsoftbanktelecom.comsoftbankusa.netsoftbankventuresasia.comsoftbankworld.com -stripe.comstripe.network stripecdn.com visa.be visa.ca visa.clvisa.cn -cn -visa.co.ao -visa.co.cr -visa.co.id -visa.co.il -visa.co.in -visa.co.jp -visa.co.ke -visa.co.ni -visa.co.nz -visa.co.th -visa.co.uk -visa.co.ve -visa.co.za visa.com visa.com.ag visa.com.ai visa.com.ar visa.com.au visa.com.az visa.com.bo visa.com.br visa.com.bs visa.com.bz visa.com.cn -cn visa.com.co visa.com.cy visa.com.dm visa.com.do visa.com.ec visa.com.ge visa.com.gt visa.com.gy visa.com.hk visa.com.hn visa.com.hr visa.com.jm visa.com.kh visa.com.kn visa.com.kz visa.com.lc visa.com.lk visa.com.ms visa.com.mx visa.com.my visa.com.ng visa.com.pa visa.com.pe visa.com.ph visa.com.pr visa.com.py visa.com.ru visa.com.sg visa.com.sv visa.com.tr visa.com.tt visa.com.tw visa.com.ua visa.com.uy visa.com.vc visa.com.vi visa.com.vn visa.cz visa.de visa.dk visa.es visa.fi visa.fr visa.gd visa.gp visa.gr visa.hk visa.hu visa.ie visa.is visa.ky visa.lt visa.lv visa.mn visa.mq visa.nl visa.no visa.pl visa.pt visa.ro visa.se visa.sk visa.so visa.sx visa.tc -visabg.com visaeurope.at visaeurope.ch visaeurope.lu visaeurope.sivisaitalia.com visakorea.comvisamiddleeast.comvisasoutheasteurope.comfinlitsummit.orgmyvisaluxuryhotels.comvisainfinite.cavisainfiniteluxuryhotels.ca!visaluxuryhotelcollection.com$ visaluxuryhotelcollection.com.br$ visaluxuryhotelcollection.com.mxvisaluxuryhotels.comvisaluxuryhotels.com.arvisasignaturehotels.com($connaissancesfinancierespratiques.ca dnsvisa.comeubluecardvisa.comfinancialsoccer.ca"financialsoccer.com.cn -cnlightbridge.commiamifintechfestival.commhshosting.compracticalbusinessskills.compracticalmoneyskills.ca#practicalmoneyskills.cn -cn'practicalmoneyskills.com.cn -cnpracticalmoneyskills.jpsoccerfinancier.catorcidadeouro.com vaultify.com vaultify.info vaultify.net visa-atm.com visa-news.jp visabank.orgvisabusinessinsights.comvisacarddesignlab.com visacards.comvisacheckout.netvisacheckout.orgvisaconciergelac.comvisadigital.comvisadigitalconcierge.com visadns.comvisadpsonline.usvisaeverywhereshop.comvisafintechfasttrack.comvisafulfillment.comvisagiftcard.usvisaglobalfinance.comvisaicsdirect.comvisainfinite.cavisainfinite.cn -cn visanet.net -visapay.cn -cnvisapcsdirect.comvisaplatinum.cn -cnvisaplatinum.com.cn -cn visaplus.comvisasavingsedge.cavisasignature.co.kr visb.org ak1.net -aka-ai.com -aka-ai.net akacrypto.net akadeem.net -akadns.com akadns6.net -akaeai.com -akafms.net akahost.net -akaint.net akam.net -akamaa.com -akamah.com -akamak.com -akamam.comakamai-access.comakamai-access.netakamai-cdn.com akamai-platform-internal.netakamai-platform-staging.comakamai-platform.netakamai-regression.netakamai-staging.netakamai-sucks.netakamai-thailand.comakamai-thailand.netakamai-trials.com akamai.co.kr -akamai.com -akamai.netakamaientrypoint.netakamaietpcnctest.com#akamaietpcompromisedcnctest.com'#akamaietpcompromisedmalwaretest.comakamaietpmalwaretest.comakamaietpphishingtest.comakamaihd-staging.net akamaihd.com akamaihd.netakamaimagicmath.netakamainewzealand.comakamaiphillipines.comakamaiphillipines.netakamaitech.comakamaitech.netakamaitechnologies.comakamaitechnologies.netakamaisingapore.netakamaized-staging.net akamaized.netakamaizercentral.com -akamci.com  akami.com  akami.net -akamii.com -akamqi.com akastream.com akastream.net -akatns.net iamakamai.com iamakamai.netsoasta-dswb.com -srtcdn.netcloudflare-dns.comcloudflare-ipfs.comcloudflare.comcloudflare.netcloudflareapps.comcloudflarebolt.comcloudflareclient.comcloudflareinsights.comcloudflareok.comcloudflareresolve.comcloudflaressl.comcloudflarestatus.comcloudflarestream.comcloudflaretest.com one.one.onetrycloudflare.comvideodelivery.net  warp.plus workers.dev -fastly.com -fastly.netfastlylabs.com fastlylb.netfastly-terrarium.com -zencdn.net  imgix.com  imgix.net pagecdn.com -pagecdn.io quantil.com stackpath.com stackpath.devbuypass-ssl.com buypass.com -buypass.no -buypass.se minid.no -comodo.com comodoca.com comodoca2.com comodoca3.com comodoca4.comcybertrust.co.jpcybertrust.ne.jp digicert.comdigitalcertvalidation.com freessl.com geotrust.com rapidssl.com -thawte.com  thawte.de  thawte.fr entrust.netentrustdatacard.comglobalsign-media.com globalsign.be globalsign.chglobalsign.co.ukglobalsign.comglobalsign.com.auglobalsign.com.hkglobalsign.com.sg globalsign.es globalsign.eu globalsign.frglobalsign.net globalsign.nl!secure.globalsign.com -cnocsp.globalsign.com -cn ocsp2.globalsign.com -cn identrust.comidentrust.co.uk identrust.netletsencrypt.org secom.co.jpsecomtrust.net sectigo.comenterprisessl.comhackerguardian.cominstantssl.comoptimumssl.compositivessl.com digital-id.ch digitalid.chmanaged-pki.chmanaged-pki.de pki-post.ch pki-posta.ch pki-poste.chroot-signing.chrootsigning.comssl-certificate.ch -swissid.ch swissign.com swissign.liswisssign-group.chswisssign-group.comswisssign-group.li swisssign.ch swisssign.com swisssign.li swisssign.net swisssign.orgswisssigner.chswisssigner.comswisssigngroup.chswisssigngroup.comswissstick.com swisstsa.ch swisstsa.li trustdoc.ch trustsign.ch zert.ch telekom.com -telekom.de trustwave.com verisign.asia verisign.biz verisign.chverisign.co.inverisign.co.uk verisign.comverisign.com.auverisign.com.brverisign.com.cnverisign.com.esverisign.com.hkverisign.com.sgverisign.com.twverisign.com.vn verisign.de verisign.dk verisign.es verisign.fr verisign.hk verisign.in verisign.info verisign.jobs verisign.mobi verisign.name verisign.net verisign.org verisign.pro verisign.se verisign.sg verisign.tw verisign.us verisign.vnverisigninc.com -discord.co discord.com -discord.gg discord.gift discord.gifts discord.media discord.newdiscordapp.comdiscordapp.netdiscordstatus.com freenode.net -lin.ee line.me line.naver.jp line-apps.com line-cdn.net line-scdn.net -nhncorp.jp -signal.art -signal.orgsignalusers.orgslack-edge.comslack-imgs.com  slack.com -slackb.comslackcertified.com slackdemo.com slackhq.com contest.com  graph.orgquiz.directoryt.me tdesktop.com -telega.one -telegra.ph telegram.dog telegram.me telegram.orgtelegram.space -telesco.pe -tg.dev tx.meusercontent.dev asproex.comasproexapi.combinance.charity binance.cloud binance.combinance.vision binancezh.com bnbstatic.com yshyqxx.com -bitbank.cc bitcoin.org bitfinex.com bitflyer.com bitflyer.jp -bitmex.com bitquick.co bisq.io bisq.network bitsquare.io bitstamp.net bittrex.com btcbox.co.jp -cex.io coinbase.com coinone.co.krcoinonecore.comcoinonecorp.com dogecoin.com -devcon.orgethereum.foundation ethereum.org -hbabit.com -hbfile.net  huobi.com huobi.me  huobi.pro huobi.sc huobiasia.viphuobigroup.comhuobitoken.com -kraken.comlocalbitcoins.comlocalbitcoinschain.com okex.com -paxful.com -zb.app -zb.com zb.io zb.live  adidas.at  adidas.be  adidas.ch adidas.co.in adidas.co.uk -adidas.com adidas.com.cn -cn adidas.com.sa adidas.com.tw  adidas.cz  adidas.de  adidas.dk  adidas.hu  adidas.ie  adidas.it  adidas.nl  adidas.pl  adidas.ru  adidas.se bby.combbycastatic.ca bbycloud.combbycontent.combbycontent.net bbyintl.com bbystatic.com  bbyurl.us bestbhy.combestbuy-audio.com"bestbuy-communityrelations.combestbuy-giftcard.infobestbuy-int.combestbuy-jobs.com -bestbuy.ca -bestbuy.cn -cn bestbuy.combestbuy.com.cn -cnbestbuy.com.mx bestbuy.infobestbuy24x7solutions.combestbuybusiness.com'#bestbuybusinessadvantageaccount.combestbuycanada.cabestbuycanada.combestbuycanadaltd.cabestbuycharityclassic.combestbuycoffeemakers.combestbuyethics.combestbuyforbusiness.cabestbuygsm.combestbuyideax.com!bestbuyphotoworkshoptours.combestbuyrewards.combestbuyrewardzone.ca bestbuys.combestbuysgeeksquad.combestbuysolutions.netbestbuystores.combestbuytradein.com bestbuyus.com besztbuy.com bextbuy.combienvenuechezbestbuy.ca cowboom.com futureshop.cainitproducts.commagnoliaav.com.cn -cn mybestbuy.commybestbuyclaims.commyrewardzone.com myrz.compacifickitchenandhome.comtiendabestbuy.comunbrandedproducts.comwelcometobestbuy.cawolfatbestbuy.comwolfatbestbuy.netwww-bestbuystores.comgeek-squad-support.comgeek-squad.netgeek-squad.orggeek-squads.net geeksquad.ca geeksquad.cc geeksquad.com geeksquad.net geeksquad.tvgeeksquadcares.comgeeksquadcentral.comgeeksquadforums.comgeeksquadonline.comgeeksquadprotectionplan.orggeeksquadservices.orggeeksquadwebroot.org gscanada.info -gsccdn.com  gslink.usonlinegeeksquad.comrocketfishproducts.com dealtree.orgtechliquidators.com -booking.cn -cn booking.com bstatic.comcostco-static.com -costco.comcostcobusinessdelivery.comcraigslist.org dmm.com  dmm.co.jpdmm-extension.com21centuryaccess.com4ebaytraders.com adcommerce.cn -cn adcommerce.tv appforebay.cn -cnappsonebay.net -asebay.com -baazee.com -bidbay.combidorbuyindia.com billpoint.combillpoint.info billpoint.tv billpoint.usbillpointnewzealand.com blogebay.combookclubcorner.combuiltfromebay.com buyitnow.com buyitnow.net buyitnow.org buyitnow.tvbuyitnowshop.net cafr.ca carebay.comcargigileads.com  cebay.comcollective99.comcommerceos.comconnectcommerce.cn -cn"connectcommerce.com.cn -cnconnectcommerce.hkconnectcommerce.infoconnectcommerce.tv connectedcommerce.cn -cnconnectedcommerce.comconnectedcommerce.tvcrececonebay.comcreditcardsbay.com cyber-bay.cn -cncyber-bay.com.cn -cncyber-bay.info cyber-bay.org -dba.dk dealbay.com dealtime.com  didce.com  douya.orgdreamtoplay.com  e-bay.com e-bay.it  e-bay.net eachpay.com eachpay.net  ebahy.comebay-authenticate.netebay-confirm.comebay-course.com ebay-cz.comebay-delivery.comebay-discoveries.comebay-fashion.com ebay-inc.com ebay-inc.net ebay-inc.orgebay-online.comebay-sales.comebay-stories.com ebay-us.comebay-vacation.com ebay.at ebay.be ebay.ca ebay.chebay.cn -cn -ebay.co.nz -ebay.co.uk -ebay.co.ve -ebay.co.za ebay.com ebay.com.ar ebay.com.au ebay.com.cn -cn ebay.com.ec ebay.com.hk ebay.com.mt ebay.com.my ebay.com.ph ebay.com.sg ebay.de ebay.es ebay.fr ebay.ie ebay.in ebay.it ebay.jp ebay.lt ebay.mn ebay.net.cn -cn ebay.nl ebay.org ebay.org.cn -cn ebay.ph ebay.pk ebay.pl ebay.sg ebay.us ebay.vn -ebay.yn.cn -cn -ebay.zj.cn -cn -ebay25.com -ebay68.com  ebaya.com ebayads.com ebayads.netebayadvertising.cn -cnebayadvertising.comebayanunsios.netebayauction.comebayaustralia.comebayauthenticate.com.cn ebaybags.com ebaybank.comebaybenefits.comebayboutique.com -ebayca.com -ebayca.org ebaycafe.com ebaycar.comebaycareers.com ebaycbt.co.kr ebaycdn.net ebaychina.netebayclassifiedsgroup.comebayclassifieds.cn -cnebayclassifieds.com"ebayclassifieds.com.cn -cnebayclassifieds.infoebayclassifieds.orgebayclassifieds.tvebayclassifiedsgroup.comebayclassifiedsgroup.infoebayclassifiedsgroup.orgebayclassifies.com ebayclub.com ebaycoins.com ebaycom.comebaycommercenetwork.comebaycourse.com  ebayd.com -ebayde.com ebaydesc.cn -cnebaydesc.com.cn -cnebaydlassifieds.com -ebaydns.cn -cn ebaydts.com ebayedu.comebayeletro.comebayenterprise.cn -cnebayenterprise.com!ebayenterprise.com.cn -cnebayenterprise.infoebayenterprise.netebayenterprise.tv ebayetc.comebayexpress.sgebayfashion.comebayfashion.netebayforcharity.orgebayforeclosure.orgebayfrance.comebayglobalshipping.com ebaygroup.com ebayhabit.com ebayheels.com ebayhots.com ebayimg.com ebayinc.com ebayinc.net ebayinc.org ebayincconnectedcommerce.netebayinkblog.comebayinternetsalestax.com -ebayit.comebayjewelry.com ebayjob.com -ebayla.orgebaylisting.com ebaylocal.netebaylocationsdevacances.com ebaymag.comebaymainstreet.com ebaymall.comebaymarketplace.net ebaymotors.ca ebaymotors.cn -cnebaymotors.comebaymotors.com.cn -cnebaymotors.orgebaymotorsblog.com ebaynow.com ebaynyc.com -ebayon.com -ebayon.netebayoncampus.com ebayopen.comebayopensource.comebayopensource.netebaypakistan.net ebaypark.com ebayparts.com ebaypedia.cn -cnebaypedia.com.cn -cnebayprivacycenter.com -ebayqq.com ebayradio.com ebayrtm.comebayseller.comebayshoesstore.com ebayshop.comebayshop111.comebayshopping.cn -cnebayshopping.com.cn -cnebayshopping.orgebaysocial.com ebaysocial.ru ebaysoho.com ebaysohos.com ebaystatic.cn -cnebaystatic.com ebaystore.comebaystore77.com ebaystores.cn -cn ebaystyle.comebaysweden.com  ebayt.comebaytechblog.comebaytopratedseller.netebaytrading.comebaytradingassistant.com -ebaytv.org ebayuae.netebayvakantiehuizen.com ebayvalet.comebayvietnam.netebayworlds.com  ebayy.com edisebay.com  eebay.com epinions.comeu-consumer-empowerment.comexpertmaker.comfairmarket.comfragrancebay.comfrancemail.com half.com half.com.cn -cn half.tvhalfcanada.com halfjapan.comhandbagsoutletebay.com  iebay.com irribay.comitsbetterwhenyouwinit.com liketwice.comliveauction.com milofetch.com musicbay.netmyconstructionworld.net -myebay.com  nebay.net paisapay.cc paisapay.info paisapay.tv premobay.comprivatemarketplaces.netprivatemarketplaces.us prostores.cn -cn prostores.comprostores.com.cn -cn rethink.net shopibay.net shoping.comsourcingforebay.com.cnsourcingforebay.netsourcingforebay.tv speybay.comstoresense.com -svpply.com telebay.com telesell.com texttobuy.orgtheebayshop.comtheopportunityproject.orgtowerauction.com  vendu.com weareebay.comwatch-ebay.org wwwdecide.com wwwebay.com wwwebay.net wwwwebay.com xindelu.comxn--3et96bj49ahpq.comxn--4vq475g.comxn--4vq477m.comxn--7hv594h.comxn--7hvy28f.cn -cnxn--hb4aw0g.comxn--q41am8x.comxn--qoq462m.comxn--tkry91n.comxn--ubt498knmf.comxn--xsq421m.comxn--xsq605n.comxn--xsq959n.comxn--yf1at58a.com  xxbay.com  yibei.orggittigidiyor.netgittigidiyorsikayet.com -gumtree.sg  jijiji.ca kiji.ca kijii.ca kijij.ca  kijiji.ca kijijiauto.cakijijiautos.ca kijijidns.cn -cnkijijidns.com.cn -cnkijijiforbusiness.ca -kijijii.ca kijijiraps.ca kijji.ca -kijjiji.ca automobile.fr  mobile.demobileinternational.com&mobileinternational.com.cn -cn -q10.jp qoo10.jpachievementanalytics.comcdn-terapeak.comlistinganalytics.netmarketexecutive.net tearapeak.com terapeack.com terapeak.ca terapeak.cn -cn terapeak.comterapeak.com.hk terapeak.hk terapeak.info teraperk.com terrapeak.com thebayuk.com -nexcat.com nexpart.com -nexpart.tv renchead.comwhisolutions.com wrenchead.com-)ebay-25-assets.s3-us-west-1.amazonaws.comfarfetch-apps.comfarfetch-contents.com farfetch.cn -cn farfetch.comfarfetch.com.cn -cn farfetch.netfarfetch.net.cn -cn  fflnk.net gfashion.com guccichimeforchange.orggucci.cn -cn  gucci.comguccimuseo.comguccitimeless.comregiongold.com -hm.com hm.com.cn -cnhomedepot-static.com homedepot.comikea.cn -cn ikea.com ikea.net  ingka.com  ingka.devingkacentres.comloveminiso.com.br miniso-au.com miniso-bh.com miniso-np.com miniso-nz.com  miniso.by  miniso.ca miniso.cn -cn  miniso.co miniso.co.id miniso.co.tz -miniso.com miniso.com.es miniso.com.gr miniso.com.mx miniso.com.pl miniso.com.py miniso.com.tr  miniso.ge  miniso.ie  miniso.jp  miniso.ma  miniso.my  miniso.pe  miniso.pk  miniso.ua  miniso.uz minisohome.cn -cnminisoindia.comminisojordan.comminisokorea.comminisolife.co.zaminisothailand.comminisovietam.vn minsio.cn -cn myminiso.com muji.com muji.com.cn -cn muji.com.hk muji.eu muji.net muji.tw muji.us mujikorea.netnikeair-nike-shoes.com airmax360.combeijingnike.combetternike.combuynikechina.comcheap-nike.comcheapnikedunks.comcheapnikeoutlet.comclassicnike.comcnnikebrand.comcustomnikeshoes.com easynike.com -eenike.comfashionnike.com finenike.comfoampositeshoes.comgoldnikeclub.com -gonike.comhandbags-nike.comhightopnikes.com -idnike.cominikesneakers.com just-do-it.cn -cn justdoit.uskicksnike1.comkidsnikeshoes.com -mynike.comnike-air-max.comnike-dunksb.com nike-fr.com nike-org.com nike-shox.cn -cn nike-uk.com nike-us.com nike-usa.com nike.cinike.cn -cn nike.com nike.com.br nike.com.hk nike.gy nike.hk  nike.shop nike.usnike.xn--hxt814e nike0594.com -nike23.comnikeadidas.comnikeairhuarache.comnikeairmax.comnikeairmaxs.comnikeairmaxshoes.comnikeairrift.com nikeasia.comnikeaustralia.com nikeaw77.com  nikeb.com nikebbn.comnikebetrue.comnikebetterworld.cn -cnnikebetterworld.com"nikebetterworld.com.cn -cnnikebetterworld.infonikebetterworld.netnikebetterworld.org nikebiz.info nikebuy.com -nikeby.com nikecdn.comnikecompany.comnikeconfluence.com nikechina.cn -cnnikechosen.com nikecloud.com nikeclub.com nikecraft.com nikedawn.com nikedunks.netnikedunksshoes.com nikeelite.comnikefactorystore.com nikefind.com nikefirm.comnikefoamposites.comnikefoampositeshoes.comnikefootballcleats.comnikefootballgloves.comnikefootballjersey.comnikefoundation.org -nikefr.comnikefrance.com nikefree.comnikefreeshoes.comnikefuelband.comnikegadgets.comnikegenealogy.com nikegolf.ca nikegolf.cn -cn nikegrid.com nikehelp.comnikehightops.comnikehyperdunk.com nikeid.cn -cn nikeid.com.cn -cnnikeidshoes.com nikeinc.comnikeinc.com.cn -cnnikeincchemistry.comnikeinstock.com -nikeit.comnikeitalia.com nikeitaly.com -nikekd.com nikekid.com -nikelab.cn -cnnikelab.com.cn -cn nikelink.comnikeliuxiang.cn -cnnikeliuxiang.comnikeliuxiang.com.cn -cn nikelives.comnikelunarglide.com nikemall.cn -cnnikemall.com.cn -cnnikemarketing.com nikenews.com -niken7.comnikeonlinestore.comnikeoutletstore.comnikeoutletstores.comnikepioneer.com nikeplus.com nikeplus.org nikepress.com nikeprice.comnikeproduct.comnikepromax.comnikeresponsibility.comnikereuseashoe.comnikerunclub.cn -cnnikerunclub.com.cn -cnnikerunner.comnikerunning.com.cn -cnnikerunningshoes.com -nikesb.comnikesbdunks.netnikeseason.comnikeselling.comnikesellorder.comnikeshoemarket.comnikeshoes-store.comnikeshoes21.comnikeshoes4u.comnikeshoescity.comnikeshoesgroup.comnikeshoesinc.comnikeshoesmarket.comnikeshoesretro.comnikeshoeswon.comnikeshoponline.comnikeshoxsale.com nikesku.comnikesnowboarding.comnikesoccercleats.comnikesportswear.comnikestares.com nikestore.cn -cn nikestore.comnikestore.com.aunikestyles.com nikeswim.comniketaiwan.netniketracking.comniketradeweb.comniketrainer.comniketrainers.comniketraining.com nikeusa.com nikewear.com  nikey.com nikezoom.com nke6.comoutletnike.com runnike.comrunningnike.comsale-nikeshoes.comstatic-nike.com swoo.sh -swoosh.com  swoosh.tvthedailysnkr.comverygoodnike.comwomensnikeshox.comxn--74q035i.xn--hxt814e nordstrom.comnordstrommedia.com shopee.cn -cn shopee.co.id shopee.co.th -shopee.com shopee.com.br shopee.com.my  shopee.ph  shopee.sg  shopee.tw  shopee.vnshopeemobile.com shopeesz.com -cn -shp.ee -target -target.comtargetimg1.com walmart wal-mart.com -wal.cowalmart-content.com walmart.comwalmart.pharmacywalmartimages.com -wmt.cobetterexplained.com brilliant.org apa.orgpsyccareers.com cambridge.org"cambridgeschoolshakespeare.comcambridgedigital.netcambridgemaths.orgnewisiknowledge.comisiknowledge.com clarivate.comwebofknowledge.comwebofscience.com doi.org doi.info els-cdn.comelsevier-ae.com elsevier.com elsevier.ioengineeringvillage.com  evise.com -scopus.comscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk ic.ac.ukimperial.ac.ukimperialbusiness.schoolimperial.insendi.commit mit.edu mit.netmitpressjournals.orgamamanualofstyle.com anb.org blackstonespoliceservice.com epigeum.com oed.com  omscr.com oup.com -ouplaw.com ox.ac.ukoxfordaasc.comoxfordartonline.comoxfordbibliographies.comoxfordclinicalpsych.com oxforddnb.comoxfordfirstsource.comoxfordhandbooks.comoxfordlawtrove.comoxfordmedicine.comoxfordmusiconline.comoxfordpoliticstrove.com oxfordre.comoxfordreference.comoxfordscholarlyeditions.comoxfordscholarship.comoxfordwesternmusic.comsipriyearbook.org ukwhoswho.com"universitypressscholarship.comveryshortintroductions.comserialssolutions.com proquest.comsciencedirect.comsciencedirectassets.com -apress.com springer.comspringerlink.comspringernature.com wkap.nl tandf.co.uktandfonline.comtaylorandfrancis.comtaylorfrancis.com -aclweb.org acm.org acs.org altmetric.comanalytictech.comannualreviews.org  arxiv.org asha.org berkeley.edubiomedcentral.com biorxiv.org  brill.com cell.com cmu.educomputingreviews.com degruyter.comdentalhypotheses.comelifesciences.org europepmc.orgfrontiersin.org gale.com galegroup.com  ggsrv.com hindawi.com informs.org iop.orgisca-speech.orgjamanetwork.comjapanknowledge.comjbe-platform.com jmlr.org jneurosci.org  jstor.org kuke.comlawdata.com.twliteratumonline.com mdpi.com -nature.com nejm.org neurology.org ovid.com  peerj.comphysiology.org plos.org pnas.org princeton.eduresearchgate.netroutledgehandbooks.comroyalsocietypublishing.org rsc.org sagepub.comscholarpedia.orgsciencemag.orgscientificamerican.com scitation.orgsilverchair-cdn.comspiedigitallibrary.orgstatsmakemecry.com thelancet.com uchicago.edu ucla.edu  umass.edu  wiley.com yale.educern ams02.space cern.ch cixp.netdotcernpilot.info  ippog.orglinearcollider.orgchinapower.csis.org code.orgcodecademy.comcoursera-for-business.orgcoursera.community coursera.help coursera.org edx.org edx-cdn.org -egghead.iofreecodecamp.orgkhanacademy.org kastatic.org -knovel.com laracasts.commasterclass.com mzed.com oreil.ly oreilly.comoreilly.com.cn -cnoreilly.revieworeillystatic.com -orl.ly sitepoint.comskillshare.com ted.com -tedcdn.com udacity.com  udemy.com udemycdn.com w3schools.com abema.io abema.tv  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net ao3.orgarchiveofourown.orgarchiveofourown.comarchiveofourown.net -att.tv atttvnow.comattwatchtv.com directv.com  dtvce.comnettyinternet.com gamer.com.twbahamut.com.twgamer-cds.cdn.hinet.netgamer2-cds.cdn.hinet.net bandcamp.com -bcbits.com blubrry.com  castro.fm blizzard.cn -cn blizzard.comblizzardgearstore.comblz-contentstack.com blzstatic.cn -cn -battle.netbattlenet.com.cn -cn bnet.163.com -cnblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comdi.res.netease.com -cn!diablo3.nosdn.127.net -cnfiresidegatherings.complayhearthstone.com%hearthstone.nosdn.127.net -cnheroesofthestorm.com%hearthstone.nosdn.127.net -cn"heroes.nos.netease.com -cnplayoverwatch.com#overwatch.nosdn.127.net -cn starcraft.comstarcraft2.comsc2.nosdn.127.net -cnplaywarcraft3.comworldofwarcraft.com wowchina.com -cnwow.nosdn.127.net -cnblizzcon-a.akamaihd.netblz.nosdn.127.net -cnblzmedia-a.akamaihd.netblznav.akamaized.net dawngate.com eastore.comlordofultima.com -origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.akamaihd.netrtm.tnt-ea.comssl-lvlt.cdn.ea.comawayoutgame.combattlefieldbadcompany2.combattlefront2.combattlefrontii.combejewled-stars.combejeweledstars.comcapitalgames.com chillingo.comcommandandconquer.comconquerwithcharacter.com  crysis.jp dawngate.comdawngatechronicles.com -dicela.com -dicela.netea-anz-press.com -ea.com eaaccess.comeacashcard.com eacodigos.com eakorea.co.kr eamobile.com eanordic.com -eaplay.com easports.com easports.jpeasportsactive.comeasportsactiveonline.comeasportsfootball.comeasportsfootballclub.comeasportsmma.comeasportsworld.comelectronicarts.comelectronicarts.fr futpromos.com futunited.comghostgames.comheroesofdragonage.com hutpromos.commaddenchampionship.commaddenrewards.commaddenseason.infomaddenseason.netmaddenseason.org  maxis.commysimsracing.com play4free.com playapex.com pogo.com pogobeta.com -popcap.comprojectapex.com pvzheroes.com spearhead.krspeedhunters.com  spore.com ssx3.comstarwarsbattlefront.comstarwarsbattlefront2.comtiberiumalliances.com tiburon.com -tnt-ea.comultimaforever.com unravel2.comunraveltwo.comvisceralgames.com -yogify.comanthemgame.comanthemthegame.comapexlegends.comprojectapex.combattlefield.combattlefield1943.combattlefield3.combattlefield4.combattlefield5.combattlefieldheroes.combattlefieldv.com battlelog.com bioware.combiowarestore.com eamythic.com eamythic.net cncrivals.comcommandandconquer.comtiberiumalliances.comcamelot-europe.comcamelotherald.comcamelotherald.net daoc.netdarkageofcamelot.comdarkness-risen.comdeadspacegame.com dice.se dragonage.comdragonagekeep.comdragonagemovie.comthedreadwolfrises.comdungeonkeeper.cndungeonkeeper.comdungeonkeeper.com.cneafootballworld.comfifastreet.comfifastreet3.com frostbite.comindustrialtoys.commasseffect.commasseffectarchives.comeamirrorsedge.commirrorsedge.commirrorsedge.jpmirrorsedge.netmirrorsedge2.commirrorsedge2d.comblackboxgames.comeablackbox.comneedforspeed.comneedforspeedboost.comneedforspeeddriftkings.comneedforspeedeliminator.comneedforspeedlightning.comneedforspeedoverdrive.comneedforspeedproven.comneedforspeedredline.comneedforspeedshowdown.comneedforspeedstreetkings.comneedforspeedtakedown.comneedforspeedtherun.comneedforspeedtimeattack.com#needforspeedundergroundeast.com nfsworld.comteamneedforspeed.complantsvszombies2.com -pvzgw2.com pvzheroes.comseaofsolitude.comsimcity-buildit.com simcity.com -skate2.com spearhead.krstarwarsfallenorder.comstarwarsjedifallenorder.comstarwarstheoldrepublic.comswjedifallenorder.com  swjfo.com  swtor.com  swtor.net -mysims.com thesims.com thesims3.com thesims4.comthesimssocial.com titanfall.commythicentertainment.commythicentertainment.netmythicgames.comultimaonline.com -uo.com uoherald.com xdsummit.comea.tt.omtrdc.neteaassets-a.akamaihd.netbattlebreakers.com eac-cdn.com easy.aceasyanticheat.net epicgames.com fortnite.com paragon.complayparagon.comroborecall.comshadowcomplex.com spyjinx.comunrealengine.comunrealtournament.com6*^cdn\d-epicgames-\d+\.file\.myqcloud\.com$ -cn*&^epicgames-download\d\.akamaized\.net$;/^epicgames-download\d-\d+\.file\.myqcloud\.com$ -cn"avatargarenanow-a.akamaihd.netcdngarenanow-a.akamaihd.netdlgarenanow-a.akamaihd.net!dlmobilegarena-a.akamaihd.net garena.co.id garena.co.th -garena.com garena.live  garena.my  garena.ph  garena.sg  garena.tv  garena.tw  garena.vn garenanow.com seagroup.com gog.comgog-statics.comgog.qtlglb.com -cn$gogalaxy.gog-statics.com -cn'menu-static.gog-statics.com -cn'productcard.gog-statics.com -cn(static-login.gog-statics.com -cn'www4-static.gog-statics.com -cn, ^images(-\d)?\.gog-statics\.com$ -cn100classicbooks.com -amiibo.comayudanintendo.combowsersinsidestory.comexcitebots.comflipnotestudio.comgloryofheracles.comhackyourconsole.comkirbysuperstarultra.comkirbysepicyarn.comlegendofzelda.cn -cn legendofzelda.com.cn -cn miitomo.commiitomo.com.cn -cn miiverse.com nentindo.netnintendo-europe-sales.comnintendo-europe.com nintendo.at nintendo.be nintendo.chnintendo.co.jpnintendo.co.krnintendo.co.uknintendo.co.za nintendo.comnintendo.com.hknintendo.com.pt nintendo.de nintendo.dk nintendo.es nintendo.eu nintendo.fi nintendo.fr nintendo.it nintendo.net nintendo.nl nintendo.no nintendo.pt nintendo.ru nintendo.se nintendo.twnintendo3ds.comnintendodsi.comnintendoeurope.comnintendolabo.cn -cnnintendonetwork.netnintendonyc.comnintendostore.comnintendoswitch.comnintendoswitch.netnintendoswitchtogether.compersonaltrainermath.complaynintendo.comsupersmashbros.cn -cn!supersmashbros.com.cn -cnthelegendarystarfy.comthewonderful101.comwariolandshakeit.comwariowarediy.comyoshisnewisland.comac-pocketcamp.comdiddykongracing.com dkr.com donkeykongcountryreturns.comfire-emblem-heroes.comfireemblemawakening.com -dialga.com giratina.com -kyurem.com pokedex3d.compokemon-moon.compokemon-sun.compokemon-sunmoon.com pokemon.compokemonbank.compokemonblackwhite.com pokemonbw.compokemonchampionships.compokemongoldsilver.compokemonhome.compokemonletsgoeevee.compokemonletsgopikachu.compokemonmysterydungeon.compokemonpicross.compokemonplatinum.compokemonrubysapphire.compokemonsunmoon.compokemonswordshield.compokemonultrasunmoon.compokemonvgc.compokemonwifi.net xn--mts47c3w9b1qr.cn -cnxn--mts47c3w9b1qr.netsplatoon2tournament.com starfox.comdrmario-world.commarioandluigidreamteam.commariobroswii.com mariokart.cn -cnmariokart.com.cn -cnmariokart7.commariokart8.commariosupersluggers.comnewsupermariobrosu.comsupermario.comsupermario3dworld.com!supermariobros.com.cn -cnsupermariogalaxy.comsupermariorun.comsuperpapermario.comnintendowii.com  wii-u.com -wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net playstationplaystation.complaystation.net sonyentertainmentnetwork.com"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn -cnleagueoflegends.co.krleagueoflegends.comleagueoflegends.infoleagueoflegends.krleagueoflegends.netleagueoflegends.orgleagueoflegendsscripts.comleaguesharp.infoleaguoflegends.comlearnwithleague.comlol-europe.com lolclub.org lolespor.comlolesports.com lolfanart.net -lolpcs.com lolshop.co.kr lolstatic.comlolusercontent.com -lpl.com.cn -cn pvp.net -pvp.tv ulol.comlolstatic-a.akamaihd.netplayvalorant.comriotforgegames.comruinedking.comconvrgencegame.comrockstargames.com -rsg.sc1-gamedownloads-rockstargames-com.akamaized.net)%media-rockstargames-com.akamaized.net*&videos-rockstargames-com.akamaized.net fanatical.comhumblebundle.complayartifact.com -s.teamsteam-chat.comsteamcommunity.comsteamcontent.comsteamgames.comsteampowered.comsteamstatic.comsteamusercontent.comunderlords.comvalvesoftware.com wmsjsteam.com -cn csgo.wmsj.cn -cndl.steam.ksyna.com -cn dota2.wmsj.cn -cn st.dl.bscstorage.net -cnst.dl.eccdnx.com -cn!st.dl.pinyuncloud.com -cn&steampowered.com.8686c.com -cn%steamstatic.com.8686c.com -cn steambroadcast.akamaized.netsteamcdn-a.akamaihd.net!steamcommunity-a.akamaihd.netsteamstore-a.akamaihd.net#steamusercontent-a.akamaihd.net"steamuserimages-a.akamaihd.netsteamunlocked.net ubi.com ubisoft.com  uplay.com,(ubisoft-uplay-savegames.s3.amazonaws.com,(ubisoft-orbit-savegames.s3.amazonaws.com)uplaypc-s-ubisoft.cdn.ubi.com -cn -beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com -mojang.comforzamotorsport.netforzaracingchampionship.com forzarc.comorithegame.comrenovacionxboxlive.comtellmewhygame.com xbox.co xbox.com xbox.eu xbox.org -xbox360.co xbox360.com -xbox360.eu xbox360.org -xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn -cn xboxlive.com -xboxone.co xboxone.com -xboxone.euxboxplayanywhere.comxboxstudios.com -xbx.lvdeviantart.comdeviantart.net da-files.comabc-studios.com abc.com edgedatg.com espn.com espn.net espncdn.com -espnqa.com watchespn.comespn.hb.omtrdc.netespndotcom.tt.omtrdc.net -marvel.commarvel10thanniversary.commarveldimensionofheroes.commarvelparty.netmarvelpinball.commarvelsdoubleagent.commarvelspotlightplays.com marvelsuperheroseptember.commarvelsuperwar.comthemarvelexperiencetour.comnatgeomaps.comnationalgeographic.com"nationalgeographicpartners.com ngeo.comadventuresbydisney.com -babble.com babyzone.com -dilcdn.comdisney-asia.comdisney-discount.comdisney-plus.netdisney-studio.comdisney-studio.net  disney.be  disney.bg  disney.ca disney.co.il disney.co.th disney.co.uk disney.co.za -disney.com disney.com.au disney.com.br  disney.cz  disney.de  disney.dk  disney.es  disney.fi  disney.fr  disney.gr  disney.hu  disney.id  disney.in  disney.io  disney.it  disney.my  disney.nl  disney.no  disney.ph  disney.pl  disney.pt  disney.ro  disney.se  disney.sgdisneyadsales.comdisneyarena.comdisneyaulani.comdisneybaby.comdisneycareers.comdisneychannelonstage.comdisneychannelroadtrip.comdisneycruisebrasil.comdisneyenconcert.comdisneyiejobs.comdisneyinflight.comdisneyjunior.comdisneyjuniortreataday.comdisneylatino.comdisneymagicmoments.co.ildisneymagicmoments.co.ukdisneymagicmoments.co.zadisneymagicmoments.dedisneymagicmoments.esdisneymagicmoments.frdisneymagicmoments.gen.trdisneymagicmoments.grdisneymagicmoments.itdisneymagicmoments.pl disneyme.comdisneymeetingsandevents.comdisneymovieinsiders.comdisneymusicpromotion.comdisneynewseries.com disneynow.comdisneypeoplesurveys.comdisneyplus.comdisneyredirects.comdisneysrivieraresort.comdisneystore.comdisneysubscription.comdisneyturkiye.com.trdisneytvajobs.comdisneyworld-go.com -dssott.comgo-disneyworldgo.com -go.com  mickey.tvmoviesanywhere.complaymation.comshopdisney.comshops-disney.comsorcerersarena.comspaindisney.com starwars.com#starwarsgalacticstarcruiser.comstreamingdisney.netthestationbymaker.comthisispolaris.comwatchdisneyfe.com fireside.fm cinemax.comforthethrone.com hbo.com hboasia.com  hbogo.com hbogoasia.com hbogoasia.hk -hbomax.com -hbonow.com  maxgo.com -112263.com callhulu.comfindyourlimits.com freehulu.com  hooloo.tv  hoolu.com hoolu.tv hu1u.com huloo.cc huloo.tv hulu.com hulu.tv hulu.ushuluaction.com -huluad.com huluapp.com huluasks.com hulucall.com hulufree.com hulugans.comhulugermany.com -hulugo.com -huluim.comhuluinstantmessenger.com huluitaly.com hulunet.comhulunetwork.com huluplus.comhulupremium.comhulupurchase.com -huluqa.comhulurussia.com huluspain.comhulusports.comhulustream.com huluteam.com -hulutv.com huluusa.comjoinmaidez.com mushymush.tv -myhulu.comoriginalhulu.com payhulu.comregisterhulu.comthehulubraintrust.comwwwhuluplus.com imdb.com imdb.tomedia-imdb.cominternationalsaimoe.comkingkong.com.twkingkongapp.com -kfs.io  kkbox.com kkbox.com.tw  kktix.com kktv.me litv.tv megaphone.fm moov.hk fast.com -netflix.ca netflix.com netflix.netnetflixinvestor.comnetflixtechblog.com nflxext.com nflximg.com nflximg.netnflxsearch.net -nflxso.net nflxvideo.netnico -nicodic.jp nicomanga.jp niconico.com nicoseiga.jp nicovideo.jp nimg.jp simg.jp overcast.fm  pixiv.net  pixiv.org pixiv.co.jp  pximg.net -pca.stpocketcasts.com fandango.com mgo.commgo-images.com ravm.tv roku.com rokutime.com dishworld.comslinginternational.com  sling.commovenetworks.com -movetv.comimageworks.commotionpictureser.com playshow.ioplayshowtv.comsonyclassics.comsonypictures.comsonypicturesanimation.comsonypicturesmuseum.comsonypicturesstudios.comsonypicturestelevision.com#sonypicturestelevisiongames.com wheelpop.com -wwtbam.comyourfantasybeginsnow.comsoundcloud.com -sndcdn.com byspotify.com pscdn.co scdn.co spoti.fispotify-everywhere.com spotify.comspotify.designspotifycdn.comspotifycharts.comspotifycodes.comspotifyforbrands.comspotifyjobs.com syosetu.com  amemv.com -muscdn.com -musical.ly -tiktok.com tiktokcdn.com tiktokv.com#p16-tiktokcdn-com.akamaized.net ext-twitch.tv  jtvnw.net  ttvnw.net  twitch.tv twitchcdn.net twitchsvc.net -vhx.tv -vhxqa1.com -vhxqa2.com -vhxqa3.com -vhxqa4.com -vhxqa6.comvimeo-staging.comvimeo-staging2.com  vimeo.com vimeo.frvimeobusiness.com vimeocdn.comvimeogoods.comvimeoondemand.comvimeostatus.comlivestream.com abow.jp angelbeats.jp -anigema.jpcharlotte-anime.jpclannad-movie.jpheaven-burns-red.comkamisama-day.jpkamisama-maeda-lab.com koubaibu.jplitbus-anime.com product.co.jprewrite-anime.tvvisualarts.gr.jpvisual-arts.jp -viu.tvapi.viu.now.com^ewcdn[0-9]{2}\.nowe\.com$ viu.com dfp6rglgjqszk.cloudfront.net!d1k2us671qcoau.cloudfront.net!d2anahhhmp1ffz.cloudfront.net -weverse.io wwe.com wwe9.com yande.re cvnad.com -ads -iyoowi.com -ads -got001.com -got002.com jstucdn.com playcvn.com rrys.tv rrys2019.com rrys2020.com rrysapp.com  yyets.com -zimuzu.com  zimuzu.tv zmz2019.com -zmzapi.com -z5.app -z5.com zee5.com zee5.in zee5.tvzeebioskop.com zeetv.co.uk  zeetv.com  zeeuk.com -0x0.st db.ttdropbox-dns.com dropbox.com dropbox.techdropboxapi.comdropboxbusiness.comdropboxcaptcha.comdropboxforum.comdropboxforums.comdropboxinsiders.comdropboxmail.comdropboxpartners.comdropboxstatic.comdropboxusercontent.comgetdropbox.com&"paper-attachments.s3.amazonaws.com -gfycat.com  imgur.com imgurinc.com embed-cdn.comstreamable.com 4cdn.org  4chan.org 4channel.org 2ch.net 5ch.net avsforum.com dcard.io dcard.tw  doom9.org hkgolden.com -lih.kg  lihkg.com pincong.rocks  quora.com quoracdn.net qr.ae -reddit.comredditstatic.comredditmail.comredditmedia.com redd.it 9cdn.net9nation.com.au 9news.com.au 9now.com.aufreeviewplus.net.au -mi9.com.au -mi9cdn.com nine.com.aunineentertainment.com.aunineentertainmentco.com.auninemediaroom.com.auninemsn.com.austatic9.net.au yourtv.com.au9to5google.com 9to5mac.com9to5terminal.com 9to5toys.com dronedj.com electrek.cospaceexplored.com afp.com afpforum.com -ajplus.net aljazeera.com aljazeera.netpalestineremix.comsarajevopodopsadom.comsrebrenica360.com syhacked.comamericasvoice.news -ap.org -apnews.comappledaily.comappledaily.com.hkappledaily.com.tw appledaily.hkapplefruity.comapplehealth.com.hk -atnext.combestmallawards.com deluxe.com.hk eracom.com.tw next.hknextdigital.com.hknextdigital.com.twnextfilm.com.hknextmag.com.tw nextmedia.comnextmedia.com.tw nextmgz.comnextplus.com.hk nexttv.com.twnextwork.com.hknextwork.com.tw nextwork.hk nextwork.tw nxtdig.com.hk nxtdig.com.tw omoplanet.com privilege.hk privilege.tw sharpdaily.tw tomonews.nettwnextdigital.comappleinsider.com  asahi.com asahicom.jpasahishimbun.sc.omtrdc.netbbc  bbc.co.uk bbc.com -bbci.co.uk bbgwatch.com  bloomberg bbgevent.com bbhub.io -bbthat.com bgov.com bloomberg.cnbloomberg.co.jpbloomberg.co.kr bloomberg.combloomberg.com.br bloomberg.fm bloomberg.tvbloombergapps.combloombergarcade.combloombergbeta.combloombergbna.combloombergbreakaway.combloombergbriefs.combloombergchina.combloombergenvironment.combloombergforeducation.combloomberggovernment.combloombergindices.combloombergindustry.combloomberglabs.combloomberglaw.combloomberglive.combloomberglp.combloombergmedia.combloombergnext.combloombergpolarlake.combloombergprep.combloombergquint.combloombergradio.combloombergsef.combloombergspace.combloombergstatus.combloombergsurvey.combloombergtax.combloombergtax1.combloombergtaxtech.com!bloombergtradingchallenge.combloombergtv.mnbloombergvault.combloombergview.comblpcareers.com blpevents.comblpprofessional.com bmia.org bnef.combusinessweek.combusinessweekmag.com bwbx.io citylab.com gotraffic.netlondonmithraeum.comneweconomyforum.comnewenergyfinance.comquicktake.videotechatbloomberg.com tictoc.video  boxun.combowenpress.com breitbart.com -c-span.orgc-spanvideo.orgcabletv.com.hk i-cable.comcaijinglengyan.comcbs showtime cbs.comcbsaavideo.comcbscorporation.com cbsi.com -cbsi.video -cbsiam.com  cbsig.net -cbsimg.netcbsinteractive.comcbsistatic.com cbsivideo.com cbsnews.comcbspressexpress.com cbssports.com cbsstatic.com cbssvideo.com -viacbs.com -viacom.com viacomcbs.comviacomcbspressexpress.com paramount.comchinadecoding.comchinadigitaltimes.net cnbc.com -cnbcfm.com -nbcuni.comnbcudigitaladops.com cnn.com -cnn.io cnnarabic.com cnnlabs.com cnnmoney.ch cnnmoney.comcnnmoneystream.comcnnpolitics.com -cup.com.hk d100.net  anm.co.uk  dailym.aidailymail.co.uk dailymail.comdailymail.com.au dailymail.dkdailymailonline.comdmgmediaprivacy.co.ukmailhealth.commailonline.co.ukmailonline.commailonsunday.co.ukmailonsunday.ie metro.co.uk -mol.imthisismoney.co.uk -thismon.ee -dw.com dajiyuan.com dajiyuan.eu edninfo.com epoch.cloud epoch.org.il epochbuy.com epochcar.com epochhk.com epochmall.comepochmediagroup.com epochshop.comepochstories.com epochtime.comepochtimes-bg.comepochtimes-romania.comepochtimes.co.ilepochtimes.co.krepochtimes.co.ukepochtimes.comepochtimes.com.auepochtimes.com.brepochtimes.com.sgepochtimes.com.twepochtimes.com.ua epochtimes.cz epochtimes.de epochtimes.eu epochtimes.fr epochtimes.it epochtimes.jp epochtimes.nl epochtimes.pl epochtimes.ru epochtimes.seepochtimeshk.orgepochtimestr.com epochweek.comepochweekly.com erabaru.net -etviet.comlagranepoca.com ntd.com  ntdca.com -ntdimg.com ntdtv.ca ntdtv.co.kr  ntdtv.com ntdtv.com.tw ntdtv.jp ntdtv.kr  ntdtv.org ntdtv.ru ntdtvla.com  ntdvn.compersianepochtimes.comtheepochtimes.comtheepochtimessubscribe.comvelkaepocha.cz -forbes.com forbesimg.comfoxfox-corporation.com fox-news.com fox.com -fox.tv fox10.tv fox10news.comfox10phoenix.com  fox11.comfox13memphis.com fox13news.com  fox23.comfox23maine.com -fox247.com  fox247.tv  fox26.comfox26houston.comfox28media.com  fox29.comfox2detroit.com fox2news.com  fox32.comfox32chicago.comfox35orlando.comfox38corpuschristi.com fox42kptm.com  fox46.comfox46charlotte.com  fox47.com fox49.tv fox4news.com fox51tns.netfox5atlanta.com -fox5dc.com -fox5ny.com fox5storm.com fox6now.com fox7.comfox7austin.com fox9.comfoxacrossamerica.comfoxaffiliateportal.comfoxandfriends.com -foxbet.comfoxbusiness.comfoxbusiness.tvfoxbusinessgo.comfoxcanvasroom.comfoxcareers.comfoxcharlotte.com foxcincy.com foxcincy.jobs foxcincy.netfoxcollegesports.comfoxcorporation.comfoxcreativeuniversity.com foxcredit.com foxcredit.org foxd.tv -foxdcg.comfoxdeportes.comfoxdeportes.netfoxdeportes.tvfoxdigitalmovies.com foxdoua.comfoxentertainment.com -foxest.com -foxfaq.com -foxfdm.com foxfiles.com -foxinc.com foxkansas.com  foxla.com foxla.tvfoxlexington.comfoxmediacloud.com foxnation.comfoxnebraska.com -foxneo.comfoxneodigital.comfoxnetworks.infofoxnetworksinfo.com -foxnews.cc foxnews.com foxnews.net foxnews.org -foxnews.tvfoxnewsaffiliates.comfoxnewsaroundtheworld.comfoxnewsb2b.comfoxnewschannel.com foxnewsgo.net foxnewsgo.org foxnewsgo.tvfoxnewshealth.comfoxnewslatino.comfoxnewsmagazine.comfoxnewsnetwork.comfoxnewsopinion.comfoxnewspodcasts.comfoxnewspolitics.comfoxnewsradio.comfoxnewsrundown.comfoxnewssunday.com  foxon.comfoxphiladelphia.com foxpoker.com  foxrad.io foxredeem.comfoxrelease.comfoxrichmond.com foxrobots.comfoxsmallbusinesscenter.comfoxsmallbusinesscenter.netfoxsmallbusinesscenter.org foxsoccer.net foxsoccer.tvfoxsoccermatchpass.comfoxsoccerplus.comfoxsoccerplus.netfoxsoccerplus.tvfoxsoccershop.comfoxsports-chicago.comfoxsports-newyork.comfoxsports-world.com foxsports.cl foxsports.cofoxsports.co.ve foxsports.comfoxsports.com.arfoxsports.com.bofoxsports.com.brfoxsports.com.cofoxsports.com.ecfoxsports.com.gtfoxsports.com.mxfoxsports.com.pefoxsports.com.pyfoxsports.com.uyfoxsports.com.ve foxsports.gtfoxsports.info foxsports.netfoxsports.net.br foxsports.pe foxsports.sv foxsports.uyfoxsports2.comfoxsportsflorida.comfoxsportsgo.comfoxsportsla.comfoxsportsnetmilwaukee.comfoxsportsneworleans.comfoxsportsracing.comfoxsportssupports.comfoxsportsuniversity.comfoxsportsworld.comfoxstudiolot.com foxsuper6.com -foxtel.com foxtel.com.aufoxtelevisionstations.com  foxtv.com foxtvdvd.com  foxuv.comfoxweatherwatch.com  fssta.com -fxn.ws fxnetwork.comfxnetworks.com bentobox.tv kicu.tv ktvu.commyfoxsanfran.comafewmomentswith.com -anidom.comcasoneexchange.comcoronavirusnow.com -fse.tvgeraldoatlarge.comgooddaychicago.com joeswall.comkilmeadeandfriends.commaskedsingerfox.com -my13la.com -my20dc.commy20houston.com -my29tv.com my45.com  my9nj.commyfoxatlanta.commyfoxaustin.commyfoxboston.commyfoxcharlotte.commyfoxchicago.com myfoxdc.commyfoxdetroit.com myfoxdfw.commyfoxhouston.commyfoxhurricane.com myfoxla.commyfoxlosangeles.commyfoxlubbock.commyfoxmaine.com myfoxny.commyfoxorlando.commyfoxphilly.commyfoxphoenix.commyfoxtampa.commyfoxtampabay.commyfoxtwincities.com myfoxzone.com myq2.comnewsnowfox.comorlandohurricane.comparadisehotelquizfox.com q13.com -q13fox.comrealamericanstories.comrealamericanstories.inforealamericanstories.netrealamericanstories.orgrealamericanstories.tvrealmilwaukeenow.com rprimelab.comshopspeedtv.comsoccermatchpass.comspeeddreamride.comspeedfantasybid.comspeedracegear.com speedxtra.comteenchoice.com testonfox.comtheclasshroom.comthefoxnation.comthegeorgiascene.comwhatthefox.comwhosthehost.com wofl.tvwoflthenewsstation.com wogx.com foxnewsplayer-a.akamaihd.netfreebeacon.comgannett-cdn.com gannett.comgannettdigital.com usatoday.comusatodaynetworkservice.comthegatewaypundit.comglobalvoices.orgglobalvoicesonline.org  guo.media  gnews.org gtv.org gtv1.org g-tvapp.com hk01.com hkcnews.com hkopentv.com fantv.hkhongkongfp.comhuffingtonpost.cahuffingtonpost.co.ukhuffingtonpost.co.zahuffingtonpost.comhuffingtonpost.com.auhuffingtonpost.com.mxhuffingtonpost.dehuffingtonpost.eshuffingtonpost.frhuffingtonpost.grhuffingtonpost.inhuffingtonpost.ithuffingtonpost.jphuffingtonpost.kr huffpost.comhuffpostarabi.comhuffpostbrasil.comhuffpostmaghreb.com banned.video infowars.cominfowarsmedia.com inmediahk.netbusinessinsider.co.zabusinessinsider.combusinessinsider.com.aubusinessinsider.com.plbusinessinsider.debusinessinsider.esbusinessinsider.frbusinessinsider.inbusinessinsider.jpbusinessinsider.mxbusinessinsider.mybusinessinsider.nlbusinessinsider.sginsider-intelligence.com insider.cominsiderintelligence.com jfengtime.com landofhope.tvlocalpresshk.comfreedomplatform.tv londonreal.tv -ltn.com.tw yes123.com.tw macrumors.commalayalamanorama.com manorama.commanoramanews.commanoramaonline.commanoramayearbook.inonmanorama.com radiomango.fm  theman.in -theweek.invanitaonline.com -vanitha.invanithaveedu.com matters.news matters.one -medium.commedium.systems -myradio.hkmyradio.com.hkdreamworks.com cnbc.com -cnbcfm.com  msnbc.com -nbc.co nbc.com nbcnews.comnbcolympics.com nbcsports.com -nbcuni.comnbcuniversal.com s-nbcnews.com peacocktv.comuniversalorlando.comuniversalpictures.com&"universalpicturesinternational.com!universalstudioshollywood.com newscorp.com dowjones.com dowjones.iodowjoneson.com wsj.com wsj.net barrons.comandysparis.com newsmax.com -newsmax.in newsmaxtv.com newyorker.com -nikkei.com  nikkei.jp nikkei.co.jp now.com -now.com.hk nowe.com -now-tv.comnow-ashare.com -nypost.com nypost.helpnypostreprints.com nyt.com nyt.net nytchina.com nytcn.me  nytco.com nyti.ms nytimes.com nytstyle.comtimestalks.com aweencore.com  awetv.comherringnetwork.com oanencore.com oann.compassiontimes.hk qmap.pub realclear.comrealclearbooks.comrealcleardefense.comrealcleareducation.comrealclearenergy.orgrealclearfoundation.orgrealclearhealth.comrealclearhistory.comrealclearinvestigations.comrealclearlife.comrealclearmarkets.comrealclearpolicy.comrealclearpolitics.comrealclearpublicaffairs.comrealclearreligion.orgrealclearscience.comrealclearworld.comrealvision.com reuters.com -reuters.tvreutersmedia.net rfa.org -rfi.fr rsf.org -rt.com etvonline.hk rthk.hk -rtings.com scmp.com -i-scmp.comshuziyimin.orgsinoinsider.comsky sky.com skyassets.comskyoceanrescue.comskyoceanrescue.deskyoceanrescue.it skysports.com skysports.fr skysports.ieskysportsonline.comskysportsracing.com slashdot.org bayvoice.net ozvoice.org sohcradio.com sohfrance.orgsoundofhope.krsoundofhope.orgwanokokorosoh.com theguardiandev-guardianapis.comdev-theguardian.com -gu-web.netguardianapis.comguardianapps.co.uk -guim.co.uktheguardian.comtheguardiandns.comtheinitium.com  init.shopthenationalpulse.comthestandnews.comdreamteamfc.com  page3.comsunbingo.co.uk talksport.comthescottishsun.co.uk thesun.co.uk  thesun.ie thetype.cloud -cn thetype.comtypeisbeautiful.com udn.com -udn.com.twudnfunlife.com  unwire.hkamerikaninsesi.comamerikaninsesi.orgamerikaovozi.comamerikayidzayn.comamerikiskhma.com bbg.govdandalinvoa.com darivoa.comdengeamerika.comdengiamerika.comglasamerike.netgolos-ameriki.rugolosameriki.com insidevoa.com pashtovoa.com persagg.comradiyoyacuvoa.com urduvoa.com voa.govvoaafaanoromoo.comvoaafrique.comvoabambara.com voabangla.comvoacambodia.comvoacantonese.comvoachinese.comvoadeewanews.comvoadeewaradio.com voahausa.comvoaindonesia.com voakorea.comvoalingala.comvoandebele.com voanews.com -voanews.euvoanoticias.com voanouvel.comvoaportugues.com voashona.com voasomali.comvoaswahili.com voathai.comvoatibetan.comvoatibetanenglish.comvoatiengviet.com voatour.comvoazimbabwe.comzeriamerikes.com cstatic.net -curbed.com  eater.comfunnyordie.com meridian.net polygon.com -racked.com -recode.net sbnation.com theverge.com vox-cdn.com vox.comvoxcreative.comvoxfieldguide.com voxmedia.com -voxops.net warroom.orgwashingtonpost.com watchout.tw -waa.tw -wenzhao.castartupschool.orgycombinator.com youlucky.com -zaobao.com zaobao.com.sg  zaobao.sg -bgr.inbollywoodlife.comcareerfundas.comcricketcountry.com dnai.in dnaindia.com earngeek.com ekhindi.com -ind.sh  india.comindiancolleges.com itripto.com  oncars.in prepsure.comthehealthsite.com wionews.com yo1health.com zee.com -zeebiz.comzeeentertainment.com zeenews.com"zeenews-fonts.s3.amazonaws.com zerohedge.com zoomingin.tv aomedia.org archive.org  atypi.org -change.org ccstatic.orgcreativecommons.orgcreativecommons.engineeringlicensebuttons.net csis.orgcsis-prod.s3.amazonaws.comemojipedia.orgworldemojiawards.comworldemojiday.com xn--yt8h.laglobalsecurity.org ieee.org ieee.tvtryengineering.org ieee-ccnc.org ieee-ecce.org ieeemce.orgstandardsuniversity.orgieee-region6.org ieee.ca ieeer10.org -ieeer5.org -ieeer8.org ieeeusa.orgieeefoundation.orgieee-into-focus.org ieee-vics.org ieeeday.orgdatasheets360.comglobalspec.com ieee-isto.orgtechstreet.com computer.org -comsoc.org embs.org emcs.org grss-ieee.org ieee-aess.org ieee-cas.org ieee-ceda.orgieee-edusociety.org ieee-ies.org ieee-ims.org ieee-npss.org ieee-pels.org ieee-pes.org ieee-ras.orgieee-sensors.org ieee-tems.org ieee-uffc.org ieeeaps.org ieeecsc.org ieeecss.org ieeedeis.orgieeemagnetics.org ieeenano.org ieeeoes.org ieeesmc.orgieeesystemscouncil.org  itsoc.org mtt.orgphotonicssociety.orgsignalprocessingsociety.orgtechnologyandsociety.org vtsociety.org ietf.org itu.int nist.gov time.gov openmaps.orgopenstreetmap.comopenstreetmap.netopenstreetmap.orgopenstreetmaps.org osm.orgosmfoundation.orgstateofthemap.comstateofthemap.orgrolfoundation.orgrolsociety.org  smpte.org -un.org -w3.org who.int wto.org  1pondo.tv -91porn.com  avgle.com avn.com beeg.com bongacams.com -bcicdn.com bcrncdn.com -btt804.com -btt904.com -bttzyw.com -bttzyw.net t66y.comchaturbate.com e-hentai.org ehgt.org ehtracker.org -ehwiki.org exhentai.orghentaiverse.org eporner.comfanhaodian.com  hegre.com heydoga.com  heyzo.com hqporner.com cdnlab.live jable.tv -javbus.com javbus22.com javfinder.sh findercdn.me o0-2.com  javhd.comjavlibrary.com -javwide.tv javwide.com kindgirls.comlivejasmin.com dditsadn.com dditscdn.com -metart.commetartnetwork.com metcams.comnaiadsystems.com  nsimg.net netflav.com  pigav.com -pornhd.com -phncdn.com phprcdn.com pornhub.compornhubpremium.com  press.vin redtube.com scoreland.comcdn77.scoreuniverse.com spankbang.comtheporndude.com  tube8.com  uug22.com  uug23.com  uug25.com  uug26.com  uug27.com  uuk28.com  uun78.com  uun79.com  uun82.com  uun83.com  uun85.com  uun86.com  uun87.com  uun89.com  uun92.com  uun93.com  uun95.com  uun96.com  uun97.com  uun98.com  uun99.com  uux68.comvaginacontest.com  x-art.com xhamster.comxhamsterlive.com  xhcdn.comwidgets.stripst.com#collector.xhamster.com -ads xnxx.com xnxx-cdn.com xvideos.comxvideos-cdn.com youjizz.comyjcontentdelivery.com youporn.com 0plkijj.vip  114av.xyz 16fhgdty.xyz 18novel.xyz -1jjdg2.vip -1jsa22.vip  51dh.site 520aa.tv 5278.cc -52hyse.com 54647.online 69story.com 69vj.com  721av.com -7mm.tv -85tube.com 91.51rmc.com 920share.com -a.91gay.me a.kslive.tv aavs.xyz  agzy1.com aibaobei.me aimei133.com airav.ccanimezilla.comasianpornmovies.com av01.tv  av1688.cc av6k.com avfox.cc -avinin.com -avmoo.cyou -avpanda.cc -avsee01.tv avseesee.com bangbros.combesthentaitube.com brazzers.com -buzzav.com  caime.xyz calvappd.me cam4.com cslpldyb.me  dkk37.comdownload.91porn005.medownload.i91av.org -dvh30n.vipflirt4free.com follasian.com -gaypad.net  gouri.xyz  hanime.tv -hanime1.me hpjav.tv hsxhr.ccichineseporn.com  iijav.com  immxd.com isexlove.tw isexomega.twjapan-whores.comjapanesebeauties.net jav.guru jav01.cc -jav101.com  jav168.cc javcc.cc  javcc.com -javdoe.com javdove8.xyz  javfor.me javfull.net  javhd.pro javhd3x.com javhdfree.netjavlibrary.com javmost.com  javqd.com javynow.com  jgg18.xyz jiayoulu.com jinnaju.com jjdong7.com -johren.net kissjav.com kphimsex.net  love7.xyz lp99.pw lsnzxzy1.com lubetube.com -lululu.one manyvids.com mdlf.xyz myavfun.commydirtyhobby.commyfreecams.com nekoxxx.com nhentai.netohyeah1080.com -onejav.comosakamotion.netp3.csgfnmdb.com papalah.com  popjav.tv pornbest.org porntea.com -pyhapp.com -qingse.one  r18lu.comrealitykings.com -rule34.xxx seqingx.com seselah.com sextop1.net -sexzy4.com -soirt4.funsouth-plus.net stripchat.com -sub147.com  swag.livetbr.tangbr.net theav.cc -thisav.com thtmod1.com -tkb008.xyztokyomotion.net  tssp.besttubetubetube.com upjav.cc vgg8.com vjav.comwatchjavonline.com wuso.me  wzmyg.com  x99av.com  xo104.com  xtube.com  youav.comaccuweather.comgetadblock.comadblockplus.org addthis.comaddthiscdn.comaddthisedge.com addtoany.comadguard-vpn.com adguard.com apkpure.com cdnpure.com pureapk.com -winudf.com -arphic.com arphic.com.cn arphic.com.twifontcloud.com -bit.ly  bitly.com bitly.is bitwarden.combigbuckbunny.org blender.orgelephantsdream.org videojs.com bcove.video bcovlive.io bcvp0rtal.com boltdns.netbrightcove.combrightcove.netbrightcove.servicesbrightcovecdn.combcovlive-a.akamaihd.netbcsecure01-a.akamaihd.netbrightcove.imgix.net buymeacoff.eebuymeacoffee.comcloudconvert.comcontentful.com ctfassets.net cutt.lydigitalocean.comdigitaloceanspaces.com -disqus.com disquscdn.comdisqusservice.comcispaletter.comcispaletter.orgcometotheduckside.com -ddg.co -ddg.gg -ddh.gg -dgg.gg dontbubble.us donttrack.us duck.co duck.comduckduckco.com duckduckco.de duckduckgo.ca duckduckgo.coduckduckgo.co.ukduckduckgo.comduckduckgo.com.mxduckduckgo.com.tw duckduckgo.de duckduckgo.dk duckduckgo.in duckduckgo.jp duckduckgo.ke duckduckgo.mx duckduckgo.nlduckduckgo.org duckduckgo.pl duckduckgo.sg duckduckgo.ukduckduckhack.com -duckgo.com ducksear.ch duckside.com  dukgo.comenteentegeh.defixtracking.com goduckgo.com hacksear.chjustduckit.comprivacysimplified.comprivatebrowsingmyths.comspreadprivacy.com easylist.to lanik.usentermediadb.netentermediadb.org -arcgis.comarcgisonline.com esri.com evernote.com faststone.org -feedly.com  figma.com gofundme.com gravatar.com botstop.com hcaptcha.comhcaptchastatus.com  heroku.co -heroku.com  heroku.me herokuapp.com herokucdn.comherokucharge.com herokussl.comheroku-app.comheroku-charge.com codei.sh -codeish.co -codeish.io iina.ioinfrapedia.com inoreader.com is.gdv.gd -jwpcdn.comjwplatform.com jwplayer.com -jwpltx.com -jwpsrv.comlongtailvideo.comkindle4rss.com kodi.tv  kodi.wiki liberapay.com liberapay.org linguee.com  deepl.com -madshi.net  madvr.com  madvr.net madvrlabs.llc mapbox.cn -cn -mapbox.com -mega.co.nz mega.nz -mpv.io netlify.combitballoon.com  notion.sonotion-static.com -notion.new ok.ruopencollective.com osdn.net -parler.com pastebin.com patreon.com pics.ee  picsee.co -picsee.pro pise.pw pros.ee -pse.is ping.pe protonmail.chprotonmail.comprotonstatus.com pm.me quip-cdn.com quip.comquipelements.com -reabble.cn -cn reabble.com rb.gy rebrandly.com reurl.cc -rsshub.app -dns.sb ip.sb loli.net sb.sb sm.msu.nu -www.sb -setapp.com sharethis.com myshopify.com shopify.com shopify.devshopifycdn.comshopifystatus.comshopifysvc.com shorturl.atsourceforge.comsourceforge.net -sf.net fsdn.com startpage.com ixquick.com steemit.com svp-team.com test-ipv6.com ctan.orglatex-project.org -miktex.org tug.org tidelift.com tinyurl.com -trello.com trellocdn.com -tumblr.com -now.shvercel-dns.comvercel-status.com -vercel.app -vercel.comzeit-world.co.ukzeit-world.comzeit-world.netzeit-world.org zeit.co zeit.sh zeitworld.com webflow.com wix.com  wixmp.com wixsite.com wixstatic.comvideopress.com w.org wordpress.com wordpress.org wordpress.tv wp-themes.com -wp.com  wpvip.com outbound.io zdassets.comzdusercontent.com zendesk.com  zndsk.com  zopim.com -zeplin.dev  zeplin.io zoho.com zoho.com.au zoho.eu zoho.in zohocdn.comzohomeetups.comzohomerchandise.comzohopublic.comzohoschools.comzohostatic.com zohostatic.inzohouniversity.comzohowebstatic.com zoom.com zoom.com.cn zoom.usalpinelinux.org anaconda.com anaconda.org conda.io android.comandroidify.com -apache.orgappleswift.com  swift.org -swiftui.cn -cnswiftui.com.cn -cncalendarserver.orgapple-cloudkit.com cups.orgdeveloper.apple.comdevimages-cdn.apple.comdevstreaming-cdn.apple.comfoundationdb.orgmacosforge.org macruby.com macruby.net macruby.orgapple-mapkit.complaygrounds-cdn.apple.com carekit.orgresearchandcare.orgresearchkit.cn -cnresearchkit.com.cn -cnresearchkit.hkresearchkit.netresearchkit.orgresearchkit.tvservicetalk.io -webkit.org webkitgtk.org wpewebkit.orgwebobjects.com-)appleworldwidedeveloper.hb-api.omtrdc.net)%appleworldwidedeveloper.sc.omtrdc.net#p-events-delivery.akamaized.net archlinux.orgarchlinuxarm.org atom.io -badgen.netbootstrapcdn.comgetbootstrap.combraventures.com braveux.com -compass.isfightforux.comforthebadge.comstockagainstphotography.com launchpad.netlaunchpadlibrarian.comlaunchpadlibrarian.netlaunchpadlibrarian.org snapcraft.io snapstore.io -ubuntu.com -ubuntu.netubuntuforums.org canonical.com  cdnjs.com -centos.orgchocolatey.org clojure.org -cnpmjs.org -cygwin.com -cython.org dart.dev dartlang.org dartpad.dev -debian.org -dotdeb.org  deno.landcompose-spec.io -docker.com  docker.ioelixir-lang.org -elrepo.org embed.ly embedly.com playerjs.io -erlang.orgaccountkit.comatscaleconference.com botorch.org -buck.build buckbuild.comcomponentkit.org draftjs.org -f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com -fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com fastlane.cifastlane.tools getfedora.orgfedoraforum.orgfedoraproject.orgfedoramagazine.org -ffmpeg.org flathub.org flatpak.org flutter.devflutterapp.comfontawesome.comfortawesome.com freebsd.org  fury.blog fury.co fury.dev  fury.help fury.io gemfury.com -gentoo.orggetcomposer.org git-scm.com gitbook.com -gitbook.io  npmjs.com npm.communitydependabot.com -git.io github.blog -github.comgithub.community -github.dev  github.io githubapp.comgithubassets.comgithubhackathon.comgithubstatus.comgithubusercontent.com/+github-avatars.oss-cn-hongkong.aliyuncs.comFBgithub-production-release-asset-[0-9a-za-z]{6}\.s3\.amazonaws\.com -gitlab.com  gitlab.io -gitlab.netgitlab-static.net.*gitlab-assets.oss-cn-hongkong.aliyuncs.com gnu.org go-lang.com go-lang.net go-lang.org -go.dev  godoc.org -golang.com -golang.net -golang.org  consul.io hashicorp.comnomadproject.io  packer.io terraform.io vagrantup.comvaultproject.io haskell.orghaskellstack.org stackage.org brew.shhomebrew.bintray.com -01.org hyperscan.iointellinuxgraphics.comintellinuxgraphics.net -oneapi.comopenvinotoolkit.orgsnap-telemetry.io -acpica.com clearlinux.cn -cnclearlinux.org -ospray.net -ospray.org -ius.iojava java.com java.net -jenkins.io jetbrains.com jetbrains.net datalore.iokotlinlang.org  jfrog.com  jfrog.org bintray.com!d29vzk4ow07wi7.cloudfront.net -js.org jsdelivr.net jsdelivr.comcdn.jsdelivr.net -cn jupyter.org kali.org kubernetes.io -k8s.iolinuxfromscratch.org linuxmint.com lua.org macports.org mariadb.orgadaptivecards.ioapi-extractor.com -apisof.net appcenter.ms -blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com -jwt.ms microbit.orgmicrosoftadc.commicrosoftgamestack.commicrosoftiotinsiderlabs.commicrosoftreactor.cn -cn#microsoftreactor.com.cn -cnmicrosoftreactor.infomicrosoftreactor.netmicrosoftreactor.orgmicrosoftsilverlight.commicrosoftsilverlight.orgmicrosoftsilverlight.netmicrosoftsqlserver.com  mmdnn.commono-project.com msdn.commsinnovationchallenge.commspairlift.commsropendata.com  nuget.org nugettest.orgopentranslatorstothings.orgposhtestgallery.compwabuilder.comreactorms.com.cn -cn -sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io xamarin.comdeveloper.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.net  mingw.org mongodb.com mongodb.org  mysql.com  nginx.com  nginx.org  nixos.orgnodesource.comnotepad-plus-plus.org -openai.com openresty.org openssl.org opensuse.org openwrt.orglede-project.org packagist.org pcre.org perl.org cpan.org metacpan.org phantomjs.org php.netpolymer-project.orgpolymerproject.orgpostgresql.org -python.orgpythonhosted.org pypa.io pypi.org qt.ioqt-project.org r-project.orgraspberrypi.org raspbian.orgreadthedocs-hosted.comreadthedocs.comreadthedocs.ioreadthedocs.org redis.io redislabs.com remirepo.net rpmfusion.org ruby-lang.org rubygems.orgscala-lang.org scala-sbt.orgscientificlinux.org scoop.sh -shields.io -sqlite.org askubuntu.comblogoverflow.commathoverflow.netserverfault.com sstatic.net stackapps.com stackauth.comstackexchange.com stackmod.blogstackoverflow.blogstackoverflow.comstackoverflow.emailstackoverflowbusiness.comstacksnippets.net superuser.com tex-talk.netthesffblog.commystrikingly.comstrikingly.comstrikinglycdn.comsublimetext.com -kernel.org  linux.org amp.devampproject.comampproject.netampproject.orgcdn.ampproject.org -cnamp.akamaized.netelectronjs.org -jquery.comjquerymobile.com jqueryui.com mochajs.org -nodejs.org openjsf.orglfai.foundationlinuxfoundation.org  unity.com unity3d.com!unityads.unity3d.com -ads#unityads.unitychina.cn -ads  unpkg.com -v8.dev v8project.org videolan.org vim.org wireshark.org x.orgxda-developers.com xda-cdn.com xposed.info yarnpkg.com zsh.orgacer-group.com acer.com acer.com.cn -cn typekit.com typekit.net10xfotolia.com 2o7.net acrobat.com adbecrsl.comadobe-aemassets-value.comadobe-audience-finder.com"adobe-video-partner-finder.com  adobe.com adobe.lyadobeaemcloud.comadobeaemcloud.netadobeawards.comadobecontent.ioadobecreativityawards.com adobedc.net adobedemo.com adobedtm.comadobeexchange.comadobeexperienceawards.com adobegov.comadobehiddentreasures.comadobejanus.com adobeku.comadobelanding.comadobelogin.com adobeoobe.comadobeplatinumclub.comadobeprojectm.com adobesc.com adobesign.comadobesigncdn.comadobespark.com adobess.comadobestock.com adobetag.comadobetarget.comadobetcstrialdvd.comadobetechcomm.comadobetechcommcallback.comadobetechcommdemo.comadobexdplatform.comassetsadobe.com authorxml.combusinesscatalyst.com ccnsite.com  ccpsx.com -demdex.netdollarfotoclub.comdollarphotoclub.comdollarphotosclub.comdouwriteright.com echocdn.com echosign.com edgefonts.netenablementadobe.com  ftcdn.net gostorego.comimagineecommerce.commacromedia.commagentoliveconference.commarketing-nirvana.com omniture.com -omtrdc.net photoshop.complacesdocs.comsundanceignite2016.comworldsecureemail.comworldsecuresystems.com adobe.iodevelopria.com behance.nets2stagehance.com adobecc.com adobecce.comadobeccstatic.comcreativecloud.comcreativesdk.com cotolia.com ffotolia.com fiotolia.com foftolia.com fonolia.com fotiolia.com fotoiia.comfotolia-noticias.com -fotolia.cc fotolia.com -fotolia.tv fotolja.com fptolia.com gfotolia.com motolia.com photolia.nettenbyfotolia.com votolia.combluefootcms.com mageconf.commageconf.com.ua magento.com magento.netmagentocommerce.commagentomobile.commarketing-cloud.com marketo.co.uk marketo.com marketo.net -marketo.tvmarketodesigner.commarketolive.com -mktdns.commkto-c0100.com mktorest.com mktroute.commobilemarketo.com&"revenue-performance-management.com toutapp.comcompresspdf.new pdf.new sign.newalibabacloud.co.inalibabacloud.comalibabacloud.com.aualibabacloud.com.hkalibabacloud.com.myalibabacloud.com.sgalibabacloud.com.tw alicloud.com amazon-adsystem.com -adswholecitiesfoundation.orgwholefoodsmarket.comwholekidsfoundation.orgwholeplanetfoundation.orgaws -amazonimdb -kindle xn--cckwcxetdxn--jlq480n2rg yamaxun -zappos a2z.comaboutamazon.cn -cnaboutamazon.co.ukaboutamazon.comaboutamazon.com.auaboutamazon.deaboutamazon.esaboutamazon.euaboutamazon.fraboutamazon.inaboutamazon.itaboutamazon.jpaboutamazon.pl alexafund.cn -cnalexafund.com.cn -cn amaaozn.comamazon-fashions.comamazon-jp-recruiting.comamazon-lantern.comamazon-launchpad.com  amazon.ae  amazon.ca amazon.cn -cn amazon.co.jp amazon.co.uk -amazon.com amazon.com.au amazon.com.br amazon.com.mx amazon.com.tr  amazon.de  amazon.es  amazon.fr  amazon.in  amazon.it amazon.jobs  amazon.jp  amazon.nl -amazon.red  amazon.sgamazonalexavoxcon.comamazonauthorinsights.comamazonbusiness.cn -cn!amazonbusiness.com.cn -cnamazonbusiness.orgamazonbusinessblog.comamazonchoice.cn -cnamazonchoice.com.cn -cnamazonchoices.cn -cn amazonchoices.com.cn -cnamazondevicesupport.comamazonfctours.comamazonianblog.comamazonimages.comamazoninspire.cn -cn amazoninspire.com.cn -cnamazonlaunchpad.cn -cnamazonlaunchpad.com"amazonlaunchpad.com.cn -cn amazonlending.com.cn -cn!amazonliterarypartnership.comamazonlumberyard.wang amazonnow.cn -cnamazonnow.com.cn -cn amazonpay.com amazonpay.in amazonsdi.comamazonstudiosguilds.comamazontrust.comamazonvideodirect.com amzn.com amzn.to  amznl.comassoc-amazon.cn -cnassociates-amazon.comgameon-masters.comgdansk-amazon.comimages-amazon.commedia-amazon.com primeday.cn -cnprimeday.com.cn -cn primeday.infosiege-amazon.comssl-images-amazon.comueberamazon.de -yamaxun.cn -cn yamaxun.comz.cn -cn  alexa.com audible.comacmvalidations.comacmvalidationsaws.comaesworkshops.comamazonaws-china.com amazonaws.com amazonaws.tvamazonworkdocs.cn -cnamazonworkdocs.com!amazonworkdocs.com.cn -cnamplifyapp.comamplifyframework.comaws-iot-hackathon.comawsautopilot.comawsautoscaling.com awsbraket.comawscommandlineinterface.comawsedstart.comawseducate.comawseducate.netawseducate.orgawsloft-johannesburg.comawsloft-stockholm.comawssecworkshops.com awsstatic.comawsthinkbox.com awstrust.comcdkworkshop.comcloudfront.netcontainersonaws.comelasticbeanstalk.comthinkboxsoftware.com".+\.awsdns-[0-9][0-9]\.co\.uk$.+\.awsdns-[0-9][0-9]\.com$.+\.awsdns-[0-9][0-9]\.net$.+\.awsdns-[0-9][0-9]\.org$".+\.awsdns-cn-[0-9][0-9]\.biz$!.+\.awsdns-cn-[0-9][0-9]\.cn$".+\.awsdns-cn-[0-9][0-9]\.com$".+\.awsdns-cn-[0-9][0-9]\.net$createspace.com kindle.cn -cn kindle.co.jp kindle.co.uk -kindle.com  kindle.de  kindle.es  kindle.fr  kindle.in  kindle.it  kindle.jpkindleoasis.cn -cnkindleoasis.comkindleoasis.com.cn -cnkindleoasis.infokindleoasis.jpkindleoasis.orgkindleoasis.uskindleoasisnews.comkindleproject.comamazonprimevideo.cn -cn#amazonprimevideo.com.cn -cnamazonprimevideos.comamazonvideo.ccamazonvideo.comprime-video.com primevideo.ccprimevideo.comprimevideo.infoprimevideo.org primevideo.tv+images-cn.ssl-images-amazon.com -cn-!images-cn-8.ssl-images-amazon.com -cn amd.comamdfanstore.com -radeon.comiadsdk.apple.com -ads iad.apple.com -ads qwapi.com -ads100beatscheap.com1monsterbeatsbydreus.com2013beatsbydrdreonline.com2013beatsbydrdreshop.com2013beatsbydreshop.com2013beatshdcybermonday.com2013cheapestbeats.com2013newbeatsworld.com2013pascherbeatsbydre.com2014cheapbeatsbydre.com 2beatsdre.com2buybeatsbydre.com2drdrebeats.com40shopping.com4beatsbydre.com5beatsbydre.comaaagradeheadphones.com -aanaan.comabcheadphones.comabeatsbydrdre.com aeasyshop.com -airmay.com -ajtalk.com albeats.com annstores.netaokwholesale.netaucheapbeats.comaudiobeatsau.comaudiobeatsbydre.comaudiomonsterbeatsonline.comauricularemonsterbeats.com#auricularesbeatsbaratosshop.comauricularesbeatsmarkt.comausbeatsbydrdre.combag-glasses1.com bandgirlz.com baxsound.com bbestmall.com -beatbd.combeatbydre2013.combeatbydremonster.com!beatbydreheadphonesonsale.combeatbydrekopen.combeatbydreuk2014.combeatdrdres.combeatfactoryoutlets.combeatmonstersaustralia.netbeats-by-dre-australia.combeats-bydrdre.netbeats-bydre-mall.combeats-bydrecheapsale.combeats-bydreoutletonline.combeats-bydreoutletsale.combeats-bydreoutletsale.netbeats-bydreoutletssale.netbeats-bydrestore.combeats-bydreuk.combeats-deal.combeats-dre-us.com"beats-headphones-buy-cheap.combeats-headphones.usbeats-sale.combeats-seller.combeats-soaho.com  beats1.cc beats1.cn -cn  beats1.tv beats1.com.cn -cn beats123.com beats2.com.cn -cn beats4.cn -cn -beats4.netbeats4outlets.combeats4salecheap.combeatsallsale.combeatsaudifonos.combeatsaudiobydre.combeatsaudiobydre.netbeatsaudios.netbeatsbeatsmonster.combeatsbestdeals.combeatsblackfridaydeals.netbeatsblackfridayretails.combeatsboxingdayuksale.combeatsbydrdre-headphones.combeatsbydrdre-officials5.combeatsbydrdre-online.combeatsbydrdre-onsale.combeatsbydrdre-store.combeatsbydrdre-store.usbeatsbydrdre4sale.combeatsbydrdrebiz.combeatsbydrdrecustom.combeatsbydrdredanmark.combeatsbydrdremall.combeatsbydrdreoutlet.combeatsbydrdres.combeatsbydrdresale.netbeatsbydrdrestore.combeatsbydrdreus.com!beatsbydre-beatsheadphone.combeatsbydre-chen.combeatsbydre-club.combeatsbydre-headphones.com!beatsbydre-headphonesshop.combeatsbydre-mall.combeatsbydre-outlet.combeatsbydre-outletsale.netbeatsbydre-outletstore.combeatsbydre-sell.combeatsbydre-store.combeatsbydre-studio.combeatsbydre-us.com beatsbydre.jpbeatsbydre2081.combeatsbydre411.combeatsbydre4usales.combeatsbydreauofficial.combeatsbydreausale.net beatsbydreaustralia-sale.com!beatsbydreaustraliaonline.com"beatsbydreaustraliaonlines.com beatsbydreaustraliasales.combeatsbydrebeatsby.com!beatsbydreblackfriday2013.com beatsbydreblackfridaypro.combeatsbydreboxingdayca.combeatsbydrecasquesfr.com#beatsbydrecheap-outletstore.combeatsbydrecheaper.com"beatsbydrecheaponlinesales.combeatsbydrecolors.com beatsbydrecustomwireless.com&"beatsbydrecybermondaydeals2013.com&"beatsbydrecybermondaydeals2013.netbeatsbydredanmarks.com"beatsbydredealsblackfriday.com"beatsbydredealscybermonday.combeatsbydrediscount.com beatsbydrediscountonline.netbeatsbydredr.combeatsbydreexecutivesale.com beatsbydreformall2013-nl.com beatsbydreforsalesonline.com beatsbydreforshop2013-nl.combeatsbydreforstore.combeatsbydreforyououtlet.combeatsbydrefr.com!beatsbydrefrcasquepascher.combeatsbydrefriday.combeatsbydregot.combeatsbydrehd.combeatsbydrehd.netbeatsbydreheadphones-nz.combeatsbydreheadphonesolo.combeatsbydrehut.combeatsbydreinexpensive.combeatsbydreireland-sales.com beatsbydreirelandonlines.combeatsbydreirelandsale.com beatsbydreirelandsonline.combeatsbydremall2013.com"beatsbydremonsteraustralia.combeatsbydrenls.combeatsbydrenorge1.net!beatsbydreofficialdanmark.combeatsbydreoksale.combeatsbydreol.combeatsbydreonlie2013-nl.com!beatsbydreonlines-ireland.combeatsbydreonlines-uk.combeatsbydreonlinesale-nz.combeatsbydreoordopjes.combeatsbydreoslo.combeatsbydreoutletsale.combeatsbydreoutletscheap.combeatsbydrerealstore.combeatsbydres-shop.combeatsbydresale-uk.combeatsbydresalemall2013.combeatsbydresales.us'#beatsbydresalesonline-australia.com beatsbydresaleonlines-nz.combeatsbydresdanmark.netbeatsbydreshop-uk.combeatsbydreshops.netbeatsbydresingapores.combeatsbydresingaporesale.combeatsbydrespeakers.combeatsbydresold.com%!beatsbydresolohdonline-canada.combeatsbydresonline-nz.combeatsbydrestorevip.combeatsbydressale.combeatsbydressolo.combeatsbydresstudio.com"beatsbydrestudio-australia.combeatsbydrestudio.combeatsbydretoutlet.combeatsbydreuk.combeatsbydreuk.netbeatsbydreus.combeatsbydrevipde.combeatsbydrew.combeatsbydrsmonsterinusa.combeatsbymusic.netbeatsbysdrbre.combeatsbysdrdres.combeatscasque-france.combeatscheap-nz.combeatscheap-uk.combeatscheapforsale.combeatscollection2014.combeatscustomblackfriday.combeatsdanmark2013.combeatsdrdre-headphones.combeatsdrdre-it.combeatsdrdre-solo.combeatsdrdre2014.combeatsdrdrecuffie.netbeatsdrdrekaufenschweiz.netbeatsdrdreneon.combeatsdre-monster.com beatsdre.netbeatsdre4cheap.combeatsdrecheap.combeatsdredreheadphones.combeatsdreforsale.combeatsdreinau.combeatsdremonster-uk.com!beatsdrenewcolorful4usale.combeatsdreoutletsale.combeatsdresale2013.combeatsdresalestore.combeatsdresolo2013.combeatsdreus.combeatsearbudsheadphoness.combeatsfacstore.combeatsfactoroutlets.combeatsfactorycollection.combeatsfactoryoutles.combeatsforcheap-usa.combeatsforme.combeatsfranceofficiel.combeatselectronic.netbeatselectronics.com -beatsep.cn -cn beatsep.com beatsep.net beatsheadphones-discount.combeatsheadphones1.combeatsheadphones2u.combeatsheadphonesale.combeatsheadphonesdealer.combeatsheadphonesforcheap.netbeatsheadphonesonline.combeatsheadphoness.combeatsheadphonestudio.combeatsheadphonesusamall.combestshoesale2014.netbeatshopuk.combeatsincanada.combeatsinsingapore.combeatsireland.net beatsjoy.combeatsmonstersales.combeatsmusic.combeatsmusic.wang beatsneon.combeatsnzsale.com beatsodre.combeatsofdre-usa.combeatsonblackfriday2013.com beatsone.netbeatsoutlet.netbeatsoutletanytime.combeatsoutletonlines.combeatspascher-bydre.combeatspascher-fr.netbeatspascher.netbeatspaschers.netbeatspillnewcolor.combeatspills.combeatspromonsterjp.combeatspromotions.combeatssales.combeatssaleus.combeatssaustraliabuy.combeatssbyaustralia.combeatssbydredanmark.combeatsshop-uk.combeatsshop-usa.combeatsshopstore.combeatssingapores.combeatssingaporeshop.com beatsstudiohodetelefoner.combeatsstudiosite.combeatstoreusa.com beatsua.combeatswholesale.usbeatswirelesscheap.combeatswirelesscuffie.combegin-trade.combestbeats4u.com -biitii.comblackfridaydrebeatsnew.comblackfridaydrebeatsshop.combloommicroventures.com bookonsky.net -bossae.combrandeasygo.combrandelectronic.combrandproducts1688.com brands098.combusinesswebwise.combuy-from-shanghai.combuybeatsbydre-uk.combuybeatsheadphonesbydre.combuycheapbeatsbus.combuycheapbeatsbydre.combuycheapbeatsbydreshop.combuycheapbeatsdreuk.combuydrdrebeatbox.combuyminibeatbox.combuyonlineheadphones.combuyshoponly.combuzzardflapper.combybeatsdre.combydrebeats.comcanada-beatsbydre.com casque-fr.com casquebeatsbydrdresolohd.comcasquebeatsdocteurdre.comcasquebeatsdre2013.comcasquebeatsenligne.comcasquebeatsfracheter.comcasquebeatsmer.netcasquebeatsofficiel-fr.comcasquebeatspascher2013.comcasquebeatssolo.netcasquedrdrebeatssfr.comcasquemonsterbeats.com#casquemonsterbeatsbydre2013.comcasquesbeatsaudio.comcheap-beats-by-dre.netcheap-beatsbydre.comcheapbagshoes.com cheapbeats.uscheapbeats365.comcheapbeats4sale.netcheapbeatsaustraliasale.comcheapbeatsbus.comcheapbeatsbydr.comcheapbeatsbydrdrepro.comcheapbeatsbydre-au.comcheapbeatsbydre99.comcheapbeatsbydrefau.comcheapbeatsbydremall.comcheapbeatsbydremonster.comcheapbeatsbydrenz.netcheapbeatsbydreonsale.com cheapbeatsbydreoutlet-nz.comcheapbeatsbydreoutlet.com"cheapbeatsbydreoutlets2013.comcheapbeatsbydresale.comcheapbeatsbydreshop.comcheapbeatsdrdresolo.com$ cheapbeatsbydrestudioedition.com"cheapbeatsbydrestudioutlet.comcheapbeatsdrestudios.comcheapbeatsheadphone2014.comcheapbeatsheadphones.uscheapbeatsie.comcheapbeatsla.comcheapbeatssale4u.comcheapbeatsshopbydre.comcheapcustombeatsbydre.comcheapdrdrebeats8.comcheapdrdrebeatsca.comcheapdrebeats8.netcheaperbeatsbydresale.comcheapestbeatsdrdre.comcheapheadphonesland.comcheapheadphonessale.comcheapheadsetmall.comcheapheadsetshop.com cheapmonsterbeatsbydrdre.com!cheapmonsterbeatsheadsets.com cheapmonstersbeatsonsale.comcheapmonsterbeatssale.comcheapmonsterbeatsusa.uscheapnewbeatsbydre.comcheapsalemonster.comcheapshoesvip.comcheapwireless04.comcheapwirelessbeats.comcheerwholesale.uschihair-straightener.comchinaclothesstore.comciattackers.com -cmhalq.com cnshopin.comcoolmonster.netcozydrdrebeats.com cqcorea.comcuffiesaldi.comcustombeatsbydrebuy.comcustombeatsdeals.comcustombeatsforcheap.comcustombeatsny.comcustombeatssbydreus.comcustomdrdrebeats.comcustomizedbeatbydre.comcustomizedbeatsbydre.comcustomizedbeatsdre.comcybermondaybeats4sale.comdanemarket.comdanmarkbeatsbydrdre.comdctbeatsbydre.comdealsbeatsblackfriday.comdetaliczny.comdiscountbeatsbydre-us.comdiscountbeatsstore.comdkbeatsbydre.comdrbeatsukmart.comdrdre-beats.comdrdrebeats-chen.comdrdrebeats-headphone.comdrdrebeats-usa.comdrdrebeatsale.comdrdrebeatsbillig.comdrdrebeatsdesale.comdrdrebeatsdiscount.comdrdrebeatsforu.comdrdrebeatsretail2013.comdrdrebeatssale7.comdrdrebeatsuk.comdrdreheadphonebeats.comdrdreheadphonekey.comdrdreheadphonesusstore.comdrdremonster-beats.comdrdremonsterdre.comdrdreprobeatssale.com drdrefnac.comdrebeats-australia.comdrebeats-france.comdrebeats-monster.com!drebeats-monsteraustralia.comdrebeats-monsterusa.comdrebeats-singapore.comdrebeats-singapore.netdrebeats-singaporecheap.comdrebeats-singaporecheap.netdrebeats-solo.comdrebeats-studio.comdrebeatsaustralia-cheap.comdrebeatsaustralia-cheap.netdrebeatsbuy.comdrebeatsbydreoutlet.comdrebeatscanada.comdrebeatsdeutschland.netdrebeatsforsaleus.comdrebeatsheadphones-nz.comdrebeatshome.comdrebeatsoutletstore.comdrebeatsoldes.comdrebeatspill.comdrebeatssite.com#drebeatssolocybermondaysale.comdrebeatsstudio2013.comdrebeatstudio.com drebyby.comdremonsterbeatsoutlets.comdreprobeats.com dreprofy.com -dtsell.comearphonescheapest.comebuyheadphones.comesbeatsbydrebuy.cometheadphones.comfamosascalvas.comfindmybeats.comfr-beatsbydrestore.comfrancecasquebeatssolde.comfrcasquesbeats.com free-aa.com free-sns.com frishoes.comgamebeforethegame.comgetdrebeatssale.comgmnetworks.net gobeatsye.comgobuyonlinestore.net goodsdunk.netheadphonepubs.comheadphones-cool.comheadphones-dre.com headphones-outlet-online.comheadphonesbeatsaudio.comheadphonesbeatsbydre.comheadphoneses.comheadphoneshome.comheadphoneshotsales.comheadphonesol.comheadphonesretailer.comheadphonessupply.comheadphonezip.comheadset987.comhellokittybeats.com highbolt.net highdefinitionbeatsbydre.com hipaa6020.com hipzoom.nethonawalaan.comhotbeatsonsale.comhotmonsterbeats.comhottestheadphonesonline.com  hrsaz.com ibeats-uk.comibeatsbydre.ccibeatsbydre.comigoshopping.net illianacomputerrecycling.comimonsterbeats.comincentivetravelgifts.comioffergift.com islamiccenterofnewlondon.comitaliabeatsbydrdre.com jkbeats.comkickshatchannel.comkobbeatssbydredk.comkopfhorergunstigshop.comleecountytimes.com lexuemei.comlovebeatsdr.com lovemarca.comluckyissue.com -lyzsxx.com mairbeats.com -makeeu.commallheadphone.commbeats-tech.commbheadphone.com -micstl.commmonsterheadphones.netmonbeats2013.commonster-beats-by-dr-dre.com monster-beats-headphones.commonsterbeats-cheap.commonsterbeats-headphone.commonsterbeats-onsale.commonsterbeats-solo.commonsterbeats-solo.netmonsterbeats365buy.commonsterbeats8beatsbydre.commonsterbeatsale.commonsterbeatsalestore.commonsterbeatssalg.commonsterbeatsau.commonsterbeatsbydrdre-nz.commonsterbeatsbydrdre-usa.com!monsterbeatsbydrdrecanada.com!monsterbeatsbydrdrestudio.commonsterbeatsbydre-nz.commonsterbeatsbydre-usa.commonsterbeatsbydre2015.com'#monsterbeatsbydreaustraliacheap.com!monsterbeatsbydrebilligde.com monsterbeatsbydrefactory.commonsterbeatsbydrenew.commonsterbeatsbydres.commonsterbeatsbydreshop.commonsterbeatscasques.commonsterbeatscommunity.commonsterbeatsdrdrecheap.commonsterbeatsfactory.netmonsterbeatsfinland.commonsterbeatsforsale.commonsterbeatsheadphone.commonsterbeatsheadphones.netmonsterbeatshere.commonsterbeatsitaly.commonsterbeatsmall.commonsterbeatsnegozi.netmonsterbeatsok.com!monsterbeatsonlinestoreuk.commonsterbeatsoutlet.usmonsterbeatspascher.netmonsterbeatsru.commonsterbeatssales.commonsterbeatsshops.netmonsterbeatsstore.com#monsterbeatssydneyaustralia.commonsterbeatstang.commonsterbeatstienda.commonsterbeatstudio.commonsterbydrebeat.com!monstercasquebeatspascher.netmonstercheapbeatss.commonsterdrebeats-canada.netmonsterdrebeats-usa.commonsterdrebeats-usa.netmonsterheadphone.netmonsterproduct.netmonstersbeatbydres.commonstersdebea.commonstershopcheapbeats.netmoreheadphones.com -ms4dre.commybeatsbydrestudio.commybeatsbydreuk.commybeatscheapbydre.commyferrariheadphones.comnamemybeats.com neborder.comnegozimonsterbeats.comnegoziomonsterbeats.comnewbeatsblackfriday.com newbemany.comnewdrediscount.comnewestbeatsbydre.comnewlysprung.netnewmonst1erbeatsto1re.com!newmonsterbeatsheadphones.comnewschristmasshopping.comnflhotsalejerseys.com nicesshop.netofferairjordanlebron.comofficialbeatsbydreshop.comofficialbeatsbydrestore.comofficialdrdre.comofficialheadphone.com ogameblog.comonbeatsbydresale.com onlinemonsterbeatsonsale.com onsalekey.comonsaletrend.comoutletbeatsshop.compascherbeatsmonster.compaulsimon-music.comperfectkickz.netpersoneelsland.compicknicekicks.netpickshoesclothes.com pillbeatsblackfridaysale.compocketbiketrader.compowerbeats2wireless.compowerbeatsbydrdre.compowerbeatsbydre.compromonsterbeatsbydre.comprostudiobeatscybersale.com  rbsgr.comrepsneakermall.com repswing.com!salebeatslasteststyle4you.comsaleblackfridaydrebeats.comsalecheaphandbags.com samebags.com sanvaras.com -scnshop.cc -shoers.com shoestop2.comshop-headphones.netshopbeatsdre.com shopbydre.comshopcustomizedbeats.comshopdrebeats.comshopmonsterbeats.comshopping-days.netshoppinguheadphones.comsneaker666.comsneakerpage.netsneakerskick.comsolostudioksale.com soso7778.comspecialtyheadphones.comspiritclubs.comstraightouttasomewhere.comstudiobeatsbydrdre.comsulwerphoto.comsunglassessale2014.comsuperearsenjoy.comsupplybestjerseys.comsustainthesound.comsverigebeatsbydrdre.com szcheapmonsterheadphones.comszwinnertechnology.com takegoto.comthe-monster-beats.comthebeatsbydre.comthebeatsbydre.netthebeatsheadphonesale.com -theuab.nettopbeatsbydrdreoutlet.comtopbeatsdealer.comtopbeatsforsale.com tradevip1.com tteshop.com ubnw.net -unstyle.us&"usa-beatsbydreheadphonesonsale.net  v-has.com vip-beats.comvipbeatsbydre.comvipheadphones.com vipshoes2.com  wasdj.comwholesale-exporter1.comwholesalediscountpurses.comwholesalefine.comwholesaleonlinemart.comworldcoinpay.comyourmonsterbeats.com%!beatselectronicsllc.tt.omtrdc.netapple-icloud.cn -cnappleicloud.cn -cnapplemx-icloud.comicloud-apple.cn -cnicloud-content.comicloud-isupport.com  icloud.ch -icloud.com icloud.com.cn -cn  icloud.de  icloud.ee  icloud.fi  icloud.fr  icloud.hu  icloud.ie  icloud.is  icloud.jp  icloud.lv icloud.net.cn -cn  icloud.om -icloud.org  icloud.pt  icloud.ro  icloud.se  icloud.si  icloud.sk  icloud.vn icloudads.neticloudapple.cn -cn icloudbox.neticloudbrowser.net icloude.comicloudhome.comicloudmail.neticloudmusic.net icloudnet.net icloudpay.net icloudo.com -icloudo.de icloudo.net icloudos.de icloudos.neticloudsecure.neticloudsetup.comios-icloud.com -me.com myicloud.net mylcloud.net wwwicloud.com!www-cdn.icloud.com.akadns.net!12diasdepresentesdeitunes.com12diasderegalosdeitunes.cl12diasderegalosdeitunes.co!12diasderegalosdeitunes.co.cr!12diasderegalosdeitunes.co.ni!12diasderegalosdeitunes.co.ve12diasderegalosdeitunes.com"12diasderegalosdeitunes.com.co"12diasderegalosdeitunes.com.hn"12diasderegalosdeitunes.com.ni"12diasderegalosdeitunes.com.ve12diasderegalosdeitunes.cr12diasderegalosdeitunes.gt12diasderegalosdeitunes.hn12diasderegalosdeitunes.pe 12joursdecadeauxdeitunes.comapple-itunes.cn -cn itun.es itunbes.com ituneas.comitunes-apple.cn -cnitunes-radio.net  itunes.ca  itunes.co itunes.co.th -itunes.com  itunes.hk  itunes.mx -itunes.org -itunes.rio  itunes.usitunes12days.comitunesapple.cn -cnitunesessentials.comitunesfestivals.comitunesiradio.comituneslatino.comituneslogin.netitunesmatch.comitunesparty.comitunesradio.cn -cnitunesradio.comitunesradio.com.cn -cnitunesradio.rioitunesradio.tvitunesradio.twitunesstore.co itunesu.com itunesu.net iutunes.com wwwitunes.comitunes-apple.com.akadns.net apple apple.ae apple.at apple.be apple.bg apple.bs apple.ca apple.ch apple.cl apple.cmapple.cn -cn apple.co apple.co.cr apple.co.hu apple.co.jp apple.co.kr apple.co.mz apple.co.nz apple.co.th apple.co.uk  apple.com apple.com.af apple.com.au apple.com.bo apple.com.br apple.com.cn -cn apple.com.co apple.com.de apple.com.do apple.com.gr apple.com.gy apple.com.jm apple.com.lk apple.com.mg apple.com.mx apple.com.my apple.com.pa apple.com.pe apple.com.pl apple.com.pr apple.com.pt apple.com.py apple.com.sg apple.com.sv apple.com.tr apple.com.tw apple.com.uy apple.cz apple.de apple.dk apple.ee apple.es apple.eu apple.fi apple.fr apple.hamburg apple.hn apple.hr apple.hu apple.ie apple.in apple.is apple.it apple.jo apple.jp apple.kr apple.lk apple.lt apple.lv apple.me apple.my  apple.net apple.net.gr apple.nl apple.no apple.pk apple.pl apple.pt apple.ro apple.rs apple.ru apple.sa apple.se apple.sg apple.si apple.sk apple.so apple.tt apple.tw apple.uk apple.usapple.xn--czr694bapple.xn--fiqs8s  apple.xyz aplestore.comapple-store.cn -cnapple-store.netapple-store.wang applestor.com applestore.bg applestore.cc applestore.ch applestore.cm applestore.cn -cnapplestore.co.huapplestore.co.jpapplestore.co.ugapplestore.co.ukapplestore.comapplestore.com.auapplestore.com.bnapplestore.com.cn -cnapplestore.com.eeapplestore.com.egapplestore.com.grapplestore.com.hkapplestore.com.hrapplestore.com.joapplestore.com.myapplestore.com.phapplestore.com.plapplestore.com.ptapplestore.com.roapplestore.com.ruapplestore.com.snapplestore.com.tw applestore.de applestore.hk applestore.kr applestore.meapplestore.netapplestore.net.gr applestore.ph applestore.qa applestore.sgapplestore.wangapplestoreonline.comapplestorepro.euonlineapplestore.comapp-store.wangappe-store.comapple-appstore.cn -cnappleappstore.cn -cnappleappstore.netappleappstore.tv  appsto.reappstore.co.id appstore.hk appstore.my appstore.phappstoreapple.cn -cn asto.retvappstore.netapple-imac.com appleimac.comimac-apple.comimac-applecomputer.com imac.co -imac.co.nz imac.com imac.eu imac.gr imac.one imac.rs imacapple.comimacapplecomputer.comebookforipad.com euroipad.comfindmyipad.com indiaipad.com -ipad.co.kr ipad.de  ipad.host  ipad.wang  ipad3.com -ipadair.cl -ipadair.cmipadair.com.bripadair.com.es -ipadair.fr -ipadair.hk -ipadair.ie -ipadair.jp -ipadair.twipadaustralia.com ipadmini.cmipadmini.com.lk ipadmini.lk ipadpro.buzz -ukipad.comappleiphone.huappleiphone.netappleiphonecell.combestiphonestuff.comcooliphonecasesstore.comcustom-iphonecase.comdesigneriphonescases.com dl-iphone.comfundaiphone5s.com hebiphone.com hf-iphone.com -iphine.comiphone-8.com.cn -cn iphone-cd.com iphone-cn.com iphone-sh.comiphone-vip1.comiphone-vip2.comiphone-vip3.comiphone-vip4.comiphone-vip5.com iphone-x.tv iphone-yh.com iphone-zh.com  iphone.cm -iphone.com iphone.com.au iphone.com.gr  iphone.es iphone.host iphone.net.gr  iphone.pt  iphone.rs  iphone.ru iphone.wang iphone4.comiphone4.com.br iphone4s.com iphone5.comiphone5casescovers.comiphone5s5case.comiphoneacessorios.com.briphonecase2013.comiphonecase5.comiphonecases100.comiphonecases5.comiphoneclaro.com.briphonecollcase.com iphonefc.comiphonegermany.comiphonehangzhou.comiphoneimessage.comiphoneplus.wang iphonerip.net iphonese.tviphoneunlockimei.com iphonexs.tvonlyiphone5case.comaplleipods.comappleclassicipod.comdownloadsforipod.com ipod.ca ipod.ch ipod.cm ipod.co -ipod.co.nz -ipod.co.uk -ipod.co.za ipod.com ipod.com.au ipod.com.cn -cn ipod.com.fr ipod.com.hk ipod.com.sg ipod.com.tw ipod.de ipod.es ipod.eu ipod.fr ipod.gr ipod.hk ipod.is ipod.net ipod.no ipod.pk ipod.rs ipod.ru ipod.tw ipodcentre.nlipodcleaner.comipoditouch.com ipodnano.com ipodnano.netipodprices.com -ipodrip.caipodrocks.com.au  ipods.comipodshop.com.au ipodtouch.co ipodtouch.com -myipod.netoffrezdesipods.comsimplyipod.comwwwipodlounge.comimacsources.comlaunchpad.wang mac.wang -macbook.co -macbook.hk -macbook.tw macbook.wang macbookair.cn -cnmacbookair.co.krmacbookair.co.ukmacbookair.commacbookair.com.aumacbookair.com.cn -cnmacbookair.com.es macbookair.es macbookair.hk macbookair.kr macbookair.jpmacbookair.net macbookpro.comacbookpro.commacbookpro.com.aumacbookpro.net macbookpro.usmacbookpros.commacbooksale.comwwwmacbookair.comapple-watch.com.ru applewatch.hk applewatch.tv applewatch.twapplewatch.wangapplewatchedition.comapplewatchseries3.netapplewatchsport.comapplemusic.berlinapplemusic.comapplemusic.com.auapplemusic.hamburgapplemusic.wangapplemusicconnect.comapplemusicfestival.com musickit.netwwwapplemusic.comapple.comscoreresearch.com -apple.newsappleenews.comapplenews.berlinapplenews.hamburg applenews.tvapplenewsformat.com apple-pay.com apple-pay.rsapple-pay.wangapplepay.berlinapplepay.co.rsapplepay.com.twapplepay.hamburg applepay.hk applepay.info applepay.jp applepay.rs applepay.tvapplepaycash.cn -cnapplepaycash.com.cn -cnapplepaycash.netapplepaycash.tv!applepaymerchantsupplies.infoapplepaysupplies.berlinapplepaysupplies.cn -cnapplepaysupplies.com#applepaysupplies.com.cn -cnapplepaysupplies.infoapplepaysupplies.netapplepaysupplies.tvapplewallet.comapplewallet.tv -i-book.com -i-book.net ibook.co.nz  ibook.com ibook.eu  ibook.netibookpartner.comibooksauthor.com  iphoto.eu  iphoto.no  iphoto.se iphoto.wang  imovie.euimoviegallery.comimoviestage.comapplecare.berlin applecare.cc applecare.euapplecare.hamburgapplecare.wangappledarwin.comappledarwin.netdarwinsource.comdarwinsource.orgdarwinsourcecode.comappleaccount.netappleid-applemx.comappleid-applemx.usappleid-iclou.com appleid-uk.usappleid.berlin appleid.comappleid.hamburg -appleid.hk ids-apple.com myappleid.com appletv.com -appletv.fr appletv.wang appletv4.cn -cnappletv4.com.cn -cnappletvapp.appleappleone.audio appleone.blog appleone.chatappleone.cloud appleone.clubappleone.community appleone.filmappleone.guide appleone.hostappleone.space appleone.techappleone.website -shazam.com1to1computing.com.au1to1conference.com.au 5lml.com -a0pple.net aapl.twairport.brussels airport.com -airport.euairsupportapp.com airtunes.com airtunes.info airtunes.netalchemysynth.com  ap0le.com aple.com  apole.com -app0le.com -appl-e.com appl.com -appl4e.com  appla.comapple-darwin.comapple-darwin.netapple-darwin.org apple-dns.cn -cn apple-dns.comapple-dns.com.cn -cn apple-dns.netapple-enews.comapple-expo.com apple-expo.eu apple-hk.comapple-ibooks.cn -cn apple-inc.netapple-livephotoskit.com apple-maps.cn -cnapple-online.com apple-usa.netappleafrica.comappleantilles.comappleaustralia.comappleaustralia.com.auappleaustralia.net.au applebk.netapplecarbon.com applecard.tvapplecentar.co.rsapplecentar.rsapplecenter.cn -cnapplecenter.com.cn -cnapplecentre.com.auapplecentre.infoappleclub.com.hk applecom.comapplecomputer-imac.comapplecomputer.cn -cnapplecomputer.co.inapplecomputer.co.nzapplecomputer.com applecomputer.com.cn -cnapplecomputer.com.hkapplecomputer.com.twapplecomputer.huapplecomputer.krapplecomputerimac.comapplecomputerinc.infoapplecomputers.co.nzapplecoronavirus.com appledns.cn -cnappledns.com.cn -cn appleexpo.euappleexpo.infoapplefilmaker.comapplefilmmaker.comapplefinalcutproworld.comapplefinalcutproworld.netapplefinalcutproworld.orgapplehongkong.comapplehongkong.com.hkappleinclegal.comappleipodsettlement.comappleiservices.com applelink.comapplemagickeyboard.comapplemalaysia.com.myapplemasters.infoappleonline.comappleonline.net appleoriginalproductions.com -appleos.tvapplepencil.netapplepodcasts.comapplepremiumreseller.com.au applepremiumresellers.com.auapplereach.comapplereach.net apples-msk.ruapplescreensavers.comapplescript.infoappleshare.infoappleshop.co.uk applesiri.cn -cnapplesurveys.comappletaiwan.com appletips.net appleweb.net applexpo.net applezh.com  applf.com -applfe.com -applle.com  applw.comappmediagroup.com -appule.com  appye.com  apyle.com  beddit.tvbraeburncapital.com burstly.netburstlyrewards.com buyaapl.com buyaapl.net buyaple.com camelphat.comcamelspaceeffect.com -carbon.com catalina.hk cdn-apple.com  chomp.com -coreml.netdashwood360.comdesktopmovie.comdesktopmovie.netdesktopmovie.orgdesktopmovies.netdesktopmovies.orgdeveloper-advisor.comdevice-manager.usdigitalhub.comdiscussionsapple.com -dot-mac.de  dotmac.dedvdstudiopro.bizdvdstudiopro.comdvdstudiopro.infodvdstudiopro.netdvdstudiopro.orgdvdstudiopro.us -earpod.net ecgapp.com.cn -cn -ecgapp.netedu-research.org -emac.co.in emac.in  emagic.de -eworld.com faceid99.com faceid99.netfaceidglobal.com faceshift.cn -cn facetime.netfinalcutpro.comfind-apple.com firewire.cl firewire.eu geoport.com -homepod.cn -cn -hopstop.tv ichat.co.in idvd.eu  ikids.comilecture.co.nz ilife.eu ilife.gr -ilife.wang imessage.tv insidear.cn -cninsidemacintosh.comiosinthecar.comipa-iphone.net  ipple.com ischool.com itools.info  iwork.com iwork.se -iwork.wangjetfuelapp.comjetfuelapps.comlatticedata.com livephotos.cn -cnlivephotos.com.cn -cn livephotos.tvlojaiphone.com.br mac-mini.com mac.com -mac.com.au -mac.eu -mac.rs macappsto.re macboxset.com mach-os.com mach-os.net -machos.net macintosh.eumacintoshsoftware.com macmini.com macos.com.aumacossierra.com macosx.infomacosxlion.com macpazar.com macreach.com macreach.net mobileme.dkmr-apple.com.tw mzstatic.com -newton.com next.com overapple.com powerbook.eupullstring.netquatrowireless.com quicktime.cc quicktime.comquicktime.com.au quicktime.eu quicktime.net quicktime.tvreform-apple.comservices-apple.net siri.com spektral.cc texture.comthinkdifferent.us -touchid.tv touchid.wangtracking-location.comtruedepth3d.com tryrating.comwebobjects.co.uk webobjects.de webobjects.euwebobjects.net wuxiapple.com wwapple.netwww-sms-apple.com wwwapple.com wwwapple.net wwwlapple.comxn--czrs0t4phtr3a.cnxn--fiqs8sxootzz.cn xn--fiqs8sxootzz.xn--hxt814e!xn--gtvq61aiijy0b.xn--hxt814exn--gtvz22d.wangxn--gtvz22d.xn--hxt814exn--hxtr4rozx.xn--czr694b xn--kput3imi374g.xn--hxt814e#xn--ohq11k7pl25iyo8a.cn -cn xn--ruq8a011kt6y.xn--hxt814e, adcdownload.apple.com.akadns.net -cn!adcdownload.apple.com -cn."amp-api-search-edge.apps.apple.com -cn"amp-api.apps.apple.com -cn aod.itunes.apple.com -cn#api-edge.apps.apple.com -cnappldnld.apple.com -cn"appldnld.g.aaplimg.com -cnapps.apple.com -cnapps.mzstatic.com -cn(apptrailers.itunes.apple.com -cn bag.itunes.apple.com -cn'bookkeeper.itunes.apple.com -cnbooks.apple.com -cn!cds-cdn.v.aaplimg.com -cn$cds.apple.com.akadns.net -cn cds.apple.com -cncl2-cn.apple.com -cn<0cl2.apple.com.edgekey.net.globalredir.akadns.net -cncl4-cn.apple.com -cn'client-api.itunes.apple.com -cn+clientflow.apple.com.akadns.net -cn clientflow.apple.com -cn cma.itunes.apple.com -cn."configuration.apple.com.akadns.net -cn#configuration.apple.com -cn!communities.apple.com -cncstat.apple.com -cn."dd-cdn.origin-apple.com.akadns.net -cn(discussionschinese.apple.com -cn(download.developer.apple.com -cnfides-pol.apple.com -cngs-loc-cn.apple.com -cngs-loc.apple.com -cn%gsp10-ssl-cn.ls.apple.com -cn!gsp11-cn.ls.apple.com -cn!gsp12-cn.ls.apple.com -cn!gsp13-cn.ls.apple.com -cnC7gsp4-cn.ls.apple.com.edgekey.net.globalredir.akadns.net -cn, gsp4-cn.ls.apple.com.edgekey.net -cn gsp4-cn.ls.apple.com -cn gsp5-cn.ls.apple.com -cn(gspe11-2-cn-ssl.ls.apple.com -cn&gspe12-cn-ssl.ls.apple.com -cn&gspe19-cn-ssl.ls.apple.com -cn-!gspe19-cn.ls-apple.com.akadns.net -cn"gspe19-cn.ls.apple.com -cn#gspe21-ssl.ls.apple.com -cngspe21.ls.apple.com -cn#gspe35-ssl.ls.apple.com -cn&gspe85-cn-ssl.ls.apple.com -cniadsdk.apple.com -cn, icloud-cdn.icloud.com.akadns.net -cn icloud.cdn-apple.com -cn'images.apple.com.akadns.net -cn?3images.apple.com.edgekey.net.globalredir.akadns.net -cnimages.apple.com -cn3'init-p01md-lb.push-apple.com.akadns.net -cn init-p01md.apple.com -cn3'init-p01st-lb.push-apple.com.akadns.net -cn%init-p01st.push.apple.com -cn3'init-s01st-lb.push-apple.com.akadns.net -cn%init-s01st.push.apple.com -cn!init.itunes.apple.com -cn$iosapps.itunes.apple.com -cn(iosapps.itunes.g.aaplimg.com -cniphone-ld.apple.com -cn'itunes-apple.com.akadns.net -cnitunes.apple.com -cn#itunesconnect.apple.com -cn"js-cdn.music.apple.com -cn km.support.apple.com -cnmaps.apple.com -cn)mesu-cdn.apple.com.akadns.net -cn+mesu-china.apple.com.akadns.net -cnmesu.apple.com -cnmusic.apple.com -cn(ocsp-lb.apple.com.akadns.net -cnocsp.apple.com -cnoscdn.apple.com -cn-!oscdn.origin-apple.com.akadns.net -cn$osxapps.itunes.apple.com -cnpancake.apple.com -cn, pancake.cdn-apple.com.akadns.net -cnpd.itunes.apple.com -cnphobos.apple.com -cn!play.itunes.apple.com -cn1%prod-support.apple-support.akadns.net -cn$se-edge.itunes.apple.com -cn se2.itunes.apple.com -cn#search.itunes.apple.com -cn1%sf-api-token-service.itunes.apple.com -cnsp.itunes.apple.com -cn4(stocks-sparkline-lb.apple.com.akadns.net -cn&stocks-sparkline.apple.com -cn>2store.apple.com.edgekey.net.globalredir.akadns.net -cn'store.apple.com.edgekey.net -cnstore.apple.com -cn2&store.storeimages.apple.com.akadns.net -cn+store.storeimages.cdn-apple.com -cn+streamingaudio.itunes.apple.com -cnsu.itunes.apple.com -cn2&support-china.apple-support.akadns.net -cnsupport.apple.com -cn."swcatalog-cdn.apple.com.akadns.net -cnswcatalog.apple.com -cnswcdn.apple.com -cnswcdn.g.aaplimg.com -cn'swdist.apple.com.akadns.net -cnswdist.apple.com -cn+swscan-cdn.apple.com.akadns.net -cnswscan.apple.com -cn!sync.itunes.apple.com -cn1%updates-http.cdn-apple.com.akadns.net -cn&updates-http.cdn-apple.com -cn upp.itunes.apple.com -cnvalid.apple.com -cn-!valid.origin-apple.com.akadns.net -cn"weather-data.apple.com -cn<0www.apple.com.edgekey.net.globalredir.akadns.net -cn%www.apple.com.edgekey.net -cn www.apple.com -cn#^a[1-5]\.mzstatic\.com$ -cn0$^cdn(-cn)?[1-4]?\.apple-mapkit\.com$ -cn9-^cl[1-5]-cdn\.origin-apple\.com\.akadns\.net$ -cn!^cl[1-5]\.apple\.com$ -cn+^is[1-5](-ssl)?\.mzstatic\.com$ -cn$^s[1-5]?\.mzstatic\.com$ -cnapple.com.akadns.net%!courier-push-apple.com.akadns.netpush-apple.com.akadns.net asus.com asus.com.cn -cn atlassian.com bitbucket.org statuspage.ioaccbusiness.com -atandt.comatt-bundles.com att-japan.com att-mail.comatt-promotions.com att-rsvp.comatt.cn -cn att.com att.jobs att.net -att.tvattalascom.comattbelieves.comattbusiness.net attcenter.comattcollaborate.com -attcorp.cn -cnattexperts.com attglobal.netattinnovationspace.comattinternetservice.com -attjoy.comattnetclient.comattonlineoffers.com attproxy.comattpublicpolicy.comattpurchasing.comattsavings.comattspecial.com -attssl.comattstadium.comattsuppliers.com atttvnow.comattuverseoffers.comattuverseonline.com attvoip.com attwifi.comattwirelessinternet.comattwirelessonline.comattwirelesssolutions.com bellsouth.net -budatt.com -cobatt.com currently.com currently.netdirectvbusinessmarket.comenterprisepaging.com itcanwait.com mymmode.comnaturalvoices.comnettyinternet.comopenapiplatform.comopenapiservice.compatentgold.netpaygonline.comraponlinereview.com signalbar.comsundayready.com synaptic.netthanksloyalty.com tvpromise.com -uverse.comwebhosting.com att-idns.net -attdns.com -attdns.netna-att-idns.netaudiencenetwork.comaudiencenetwork.tvcabletvdirectv.com dierectv.com -dirctv.com direcpath.com direcpath.netdirecttv-deals.tvdirecttv-dish.com dkrecttv.com directtv.netdirecttvdeals.tvdirecttvreviews.comdirectv-4-you.comdirectv-newyork.com directv.comdirectvadsales.comdirectvatlantaga.comdirectvboston.comdirectvbundles.comdirectvbusiness.comdirectvcincinnatioh.comdirectvcinema.comdirectvconnect.comdirectvcookevilletn.comdirectvcrossvilletn.comdirectvdealer.comdirectvdeals.comdirectvdealsnow.com directvdsl.tvdirectvforhotels.comdirectvgrandslam.comdirectvhouston.comdirectvinternet.comdirectvkentucky.comdirectvlebanontn.comdirectvlosangeles.comdirectvmetropolisil.comdirectvmonitoring.comdirectvmurfreesborotn.comdirectvnewhampshire.comdirectvnow.comdirectvoffercodes.comdirectvonline.comdirectvplans.comdirectvpomise.comdirectvpromise.comdirectvpromotions.comdirectvrebate.comdirectvrichmond.comdirectvsavings.comdirectvsports.comdirectvsundayticket.com direectv.com -diretv.comdtv2009offers.comfreedirecttvspecial.com getdirect.tv hddirectv.com le-direct.tvmydirectgroove.commydirectvchannels.comredzonechannel.com txdirectv.com  xandr.combandwagonhost.com bwh1.net bwh8.net  bwh88.net canon c-ij.com canon-cee.comcanon-cmos-sensors.com canon-cna.comcanon-ebm.com.hkcanon-emea.comcanon-emirates.aecanon-europa.comcanon-europe.com canon-me.com canon-ois.qacanon-se.com.tw canon.am canon.at canon.az canon.ba canon.be canon.bg canon.ca canon.chcanon.cn -cn canon.co.il canon.co.uk canon.co.za  canon.com canon.com.al canon.com.au canon.com.by canon.com.cn -cn canon.com.cy canon.com.hk canon.com.mk canon.com.mt canon.com.my canon.com.tr canon.com.tw canon.cz canon.de canon.dk canon.ee canon.es canon.fi canon.fr canon.ge canon.gr canon.hr canon.hu canon.ie canon.it canon.kz canon.lt canon.lu canon.lv canon.me  canon.net canon.nl canon.no canon.pl canon.pt canon.ro canon.rs canon.ru canon.se canon.si canon.sk canon.tj canon.ua canon.uzcanonfoundation.orgcanonproprinters.com webex.ca webex.co.in webex.co.it webex.co.jp webex.co.kr webex.co.nz webex.co.uk  webex.com webex.com.au webex.com.br webex.com.cn -cn webex.com.hk webex.com.mx webex.de webex.es webex.fr ciscoacademynetriders.comcciernslabs.comcciesecuritylabs.comccievoicelabs.com  ccna5.netcisco-returns.comcisco-warrantyfinder.comcisco.cn -cn  cisco.com cisco.com.cn -cn -cisco.mobiciscoccservice.comciscoconnectcloud.comciscoconnectcloud.netciscoconnectcloud.orgciscocontest.comciscoerate.com ciscofax.comciscoinvestments.comciscojabbervideo.netciscokinetic.comciscoknowledgenetwork.comciscolearningsociety.orgciscolearningsystem.com ciscolive.comcisconetspace.comcisconetspace.infocisconetspace.netcisconetapp.comciscopartnermarketing.comciscopowercube.comciscoprice.comciscoresearch.comciscosoftware.com ciscospark.caciscospark.com ciscospark.jpciscotaccc.com ciscotr.com ciscoturk.netciscovideo.comciscowebseminars.com cloudlock.com cloupia.com cloupia.netconnect-in-canada.comcoreoptics.net cs.co -devm2m.com dnaspaces.io flipshare.comgpstheseries.com inlethd.cominternetofeverything.com ioe.com kscisco.com m2m.com -mcisco.commediafiles-cisco.com metacloud.com mindmeld.commultiplydiversity.commyciscobenefits.com  mysdn.com -mysdn.info  mysdn.net netacad.com netacad.netnetwork-auth.cn -cnobservable.net obsrvbl.com parstream.com parstream.net parstream.orgservices-exchange.comstatic-cisco.comtandberg-china.com tandberg.com -versly.comvideochampion.com virtuata.comwballiance.com!whyiwantciscotelepresence.com wifi-mx.comyoutubecisco.comapp-dynamics.comappdynamics.co.ukappdynamics.comappdynamics.deappdynamics.frappdynamics.infoappdynamics.jpappdynamics.org -mearki.com meraki-go.com  meraki.hk merakigo.com -tail-f.com  tailf.comcisco.evergage.comciscolivehls-i.akamaihd.net clco.cc -cloudc.one cloudcone.com cloudcone.net -cfblob.comcloudchoose.comcloudvolumes.com -cmpaas.com -cpedge.comcrit-staging.comexperience-vmware.com gemfire.netgeodesummit.com getboxer.com gitstar.com gitstar.net gopivotal.net greenplum.net hwslabs.com immidio.comitfromtheinside.comlatamvmwareforum.compivotalinitiative.comsnapvolumes.com ssdevrd.com vcanedge.com vcloudair.net vfabric.netvidmpreview.com -virsto.com -virsto.net vmglobal.net -vmmark.comvmtestdrive.com vmw.comvmware-cloudmanagement.comvmware-techcenter.comvmware20mosaic.comvmwareausnews.com!vmwarecertificationvideos.comvmwarecloud.comvmwaredemandcenter.comvmwareemeablog.comvmwaregrid.comvmwarehorizon.comvmwareidentity.comvmwarelearning.comvmwarelearningplatform.comvmwarestuff.comvmwareusergroupstore.comvmwareviewpoint.com vmwarevmc.com vmwdemo.com vmwgcomms.comvmwhorizonair.comvmwidm-ads.com -vmwidm.comvmwlabconnect.comvmwlearningplatform.com vmworld.comvmworld2010.comvmworld2013.comvmwsalesrewards.comvmwservices.com -vnware.netwhychoosehorizon.comwhychooseview.comwhychoosevmwareeuc.comwindowsuem.comworkspaceair.com xlstudio.comavinetworks.com -badaas.com bitnami.combitnamiapp.combitnamistudio.comdockerizer.comcloudcredibility.comcloudhealthtech.com cloudlive.comkubeacademy.com kubeapps.com -nyansa.com velocloud.com gopivotal.com heptio.cn -cn -heptio.com aliveipc.com aliveitsm.comaliveprofiler.com alivercm.comaliverewind.com alivertsm.com alivevm.com alivevmax.com alivevue.com vsphere.com vsphere.net air-watch.comairwatchexpress.comairwatchqa.com -getws1.com getwsone.comwhatisairwatch.comwhatisworkspaceone.comworkspaceone.comvmware.tt.omtrdc.netdelldell-brand.com dell.com dellcdn.com!achat-followers-instagram.com#acheter-followers-instagram.com$ acheterdesfollowersinstagram.com!acheterfollowersinstagram.combookstagram.comcarstagram.comcdninstagram.comchickstagram.com ig.me  igcdn.com igsonar.com igtv.com imstagram.com imtagram.cominstaadder.cominstachecker.cominstafallow.cominstafollower.cominstagainer.com instagda.com instagify.cominstagmania.com instagor.cominstagram-brand.cominstagram-engineering.cominstagram-help.cominstagram-press.cominstagram-press.net instagram.cominstagramci.cominstagramcn.cominstagramdi.cominstagramhashtags.netinstagramhilecim.cominstagramhilesi.orginstagramium.cominstagramizlenme.cominstagramkusu.cominstagramlogin.cominstagramm.cominstagramn.cominstagrampartners.cominstagramphoto.cominstagramq.cominstagramsepeti.cominstagramtakipcisatinal.netinstagramtakiphilesi.cominstagramtips.cominstagramtr.com instagran.cominstagranm.com instagrem.com instagrm.cominstagtram.com instagy.cominstamgram.cominstangram.cominstanttelegram.cominstaplayer.net instastyle.tv instgram.com intagram.com intagrm.com intgram.comkingstagram.comlnstagram-help.comtheinstagramhack.comoninstagram.comonline-instagram.comonlineinstagram.comweb-instagram.netwwwinstagram.comfbmessenger.comm.me messenger.com -nbabot.net binoculus.com buyoculus.com ocul.usoculus-china.com -oculus.comoculus2014.com oculus3d.comoculusblog.comoculusbrand.comoculuscasino.net oculuscdn.comoculusconnect.comoculusdiving.comoculusforbusiness.comoculusrift.com oculusvr.compowersunitedvr.com wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.comaboutfacebook.com accessfacebookfromschool.com acebooik.com acebook.comadvancediddetection.comaskfacebook.netaskfacebook.org -atdmt2.com atlasdmt.comatlasonepoint.combuyingfacebooklikes.comcareersatfb.comcelebgramme.comchina-facebook.com click-url.comcomo-hackearfacebook.comcrowdtangle.com dacebook.comdlfacebook.comdotfacebook.comdotfacebook.netexpresswifi.com faacebok.com faacebook.com faasbook.com facbebook.com facbeok.com -facboo.com facbook.com facbool.com facboox.com faccebook.comfaccebookk.com facdbook.com facdebook.com face-book.com faceabook.com facebboc.com facebbook.comfacebboook.com facebcook.com facebdok.com facebgook.com facebhook.com facebkkk.com facebo-ok.com faceboak.com facebock.com facebocke.com facebof.com faceboik.com facebok.comfacebokbook.com facebokc.com facebokk.com facebokok.com faceboks.com facebol.com facebolk.com facebomok.com faceboo.com facebooa.com faceboob.comfaceboobok.com facebooc.com faceboock.com facebood.com facebooe.com faceboof.com facebooi.com facebooik.com facebooik.org facebooj.comfacebook-corp.comfacebook-covid-19.comfacebook-ebook.comfacebook-forum.comfacebook-inc.comfacebook-login.comfacebook-newsroom.comfacebook-newsroom.orgfacebook-pmdcenter.comfacebook-pmdcenter.netfacebook-pmdcenter.orgfacebook-privacy.comfacebook-program.comfacebook-studio.comfacebook-support.orgfacebook-texas-holdem.comfacebook-texas-holdem.net facebook.br facebook.ca facebook.cc facebook.comfacebook.design facebook.net facebook.hu facebook.in fecebook.net facebook.nl facebook.org facebook.se facebook.shop facebook.tv facebook.us facebook.wangfacebook123.orgfacebook30.comfacebook30.netfacebook30.orgfacebook4business.comfacebookads.com"facebookadvertisingsecrets.comfacebookatschool.comfacebookawards.comfacebookblueprint.netfacebookbrand.comfacebookbrand.net3/facebookcanadianelectionintegrityinitiative.comfacebookcareer.comfacebookcheats.comfacebookck.comfacebookclub.comfacebookcom.comfacebookconsultant.orgfacebookcoronavirus.comfacebookcovers.orgfacebookcredits.infofacebookdating.netfacebookdusexe.orgfacebookemail.comfacebookenespanol.comfacebookexchange.comfacebookexchange.netfacebookfacebook.comfacebookflow.comfacebookgames.comfacebookgraphsearch.comfacebookgraphsearch.infofacebookgroups.comfacebookhome.ccfacebookhome.comfacebookhome.infofacebookhub.com facebooki.comfacebookinc.comfacebookland.comfacebooklikeexchange.comfacebooklive.comfacebooklivestaging.netfacebooklivestaging.orgfacebooklogin.comfacebooklogin.infofacebookloginhelp.netfacebooklogs.comfacebookmail.comfacebookmail.tvfacebookmanager.infofacebookmarketing.info facebookmarketingpartner.com!facebookmarketingpartners.comfacebookmobile.comfacebookmsn.comfacebooknews.comfacebooknfl.comfacebooknude.comfacebookofsex.comfacebookook.comfacebookpaper.comfacebookpay.comfacebookphonenumber.netfacebookphoto.comfacebookphotos.comfacebookpmdcenter.comfacebookpoke.netfacebookpoke.orgfacebookpoker.infofacebookpokerchips.infofacebookporn.netfacebookporn.orgfacebookporno.netfacebookportal.com facebooks.comfacebooksafety.comfacebooksecurity.netfacebookshop.comfacebooksignup.netfacebooksite.netfacebookstories.comfacebookstudios.netfacebookstudios.orgfacebooksupplier.comfacebooksuppliers.comfacebookswagemea.comfacebookswagstore.comfacebooksz.comfacebookthreads.netfacebooktv.netfacebooktv.orgfacebookvacation.com facebookw.comfacebookworld.com facebool.com facebool.info facebooll.com faceboom.com faceboon.com faceboonk.comfaceboooik.com faceboook.com faceboop.com faceboot.com faceboox.com facebopk.com facebpook.com facebuk.com facebuok.com facebvook.com facebyook.com facebzook.comfacecbgook.com facecbook.com facecbook.org facecook.com facecook.org facedbook.com faceebok.com faceebook.com faceebot.com facegbok.com facegbook.com faceobk.com faceobok.com faceobook.com faceook.comfacerbooik.com facerbook.com facesbooc.comfacesounds.com facetook.com facevbook.com facewbook.co facewook.comfacfacebook.com facfebook.com fackebook.com facnbook.com facrbook.com facvebook.com facwebook.com facxebook.com fadebook.com -faebok.com faebook.com faebookc.com faeboook.com faecebok.com faesebook.comfafacebook.com faicbooc.com fasebokk.com fasebook.com faseboox.com favebook.com faycbok.com -fb.careers -fb.com fb.me fbacebook.com fbbmarket.comfbboostyourbusiness.com  fbcdn.com  fbcdn.netfbfeedback.com -fbhome.com fbidb.io  fbinc.comfbinnovation.comfbmarketing.com  fbreg.com -fbrpms.com  fbsbx.com  fbsbx.netfbsupport-covid.netfbthirdpartypixel.comfbthirdpartypixel.netfbthirdpartypixel.org  fburl.comfbworkmail.com fcacebook.com fcaebook.com fcebook.com fcebookk.comfcfacebook.comfdacebook.info feacboo.com feacbook.com feacbooke.com feacebook.com fecbbok.com fecbooc.com fecbook.com feceboock.com feceboox.com fececbook.com  feook.com ferabook.com fescebook.com fesebook.com ffacebook.com fgacebook.com ficeboock.com fmcebook.com fnacebook.com fosebook.com fpacebook.com fqcebook.com fracebook.com  freeb.comfreebasics.comfreebasics.net -freebs.comfreefacebook.comfreefacebook.netfreefacebookads.netfreefblikes.comfreindfeed.comfriendbook.info friendfed.comfriendfeed-api.comfriendfeed-media.comfriendfeed.comfriendfeedmedia.com fsacebok.com fscebook.comfundraisingwithfacebook.comfunnyfacebook.orgfutureofbusinesssurvey.org gacebook.com gameroom.comgfacecbook.com -groups.comhackerfacebook.comhackfacebook.comhackfacebookid.comhifacebook.info!howtohackfacebook-account.comhsfacebook.comhttpfacebook.comhttpsfacebook.comhttpwwwfacebook.com i.org internet.org klik.me liverail.com liverail.tvlogin-account.netmarkzuckerberg.commidentsolutions.commobilefacebook.commoneywithfacebook.com myfbfans.com newsfeed.com nextstop.comonline-deals.netopencreate.orgreachtheworldonfacebook.com rocksdb.orgshopfacebook.comsportsfacebook.comsportstream.comsupportfacebook.comterragraph.comthefacebook.comthefacebook.net thefind.comtoplayerserver.comviewpointsfromfacebook.comwhyfacebook.com worldhack.comwww-facebook.comwwwfacebok.comwwwfacebook.comwwwmfacebook.comzuckerberg.comzuckerberg.netfacebookwork.com -redkix.com workplace.comworkplaceusecases.comfbcdn-a.akamaihd.net  aorus.com aoruszone.cn -cn gigabyte.cn -cn gigabyte.comgigabyte2.azureedge.netsa78gs.wpc.edgecastcdn.net"sni1dcb6gl.wpc.edgecastcdn.net godaddy.comx.co godaddy blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn2mdn.net -ads admob.com -ads adsense.com -ads'adsensecustomsearchads.com -ads%adsenseformobileapps.com -ads$advertisercommunity.com -ads%advertiserscommunity.com -ads"adwords-community.com -ads adwords.com -adsadwordsexpress.com -ads app-measurement.com -ads&clickserver.googleads.com -adsdoubleclick.com -adsdoubleclick.net -ads!google-analytics.com -adsgoogleadapis.com -ads!googleadservices.com -ads googleanalytics.com -adsgoogleoptimize.com -ads"googlesyndication.com -ads!googletagmanager.com -ads"googletagservices.com -ads'googletraveladservices.com -ads -urchin.com -ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ -adscharlestonroadregistry.comregistry.google get.app get.dev get.how get.page iam.soyxn--p8j9a0d9c9a.xn--q9jyb4c youtubeggpht.cn -cn  ggpht.comgooglevideo.comwithyoutube.com youtu.beyoutube-nocookie.com -youtube.ae -youtube.al -youtube.am -youtube.at -youtube.az -youtube.ba -youtube.be -youtube.bg -youtube.bh -youtube.bo -youtube.by -youtube.ca youtube.cat -youtube.ch -youtube.cl -youtube.co youtube.co.ae youtube.co.at youtube.co.cr youtube.co.hu youtube.co.id youtube.co.il youtube.co.in youtube.co.jp youtube.co.ke youtube.co.kr youtube.co.ma youtube.co.nz youtube.co.th youtube.co.tz youtube.co.ug youtube.co.uk youtube.co.ve youtube.co.za youtube.co.zw youtube.comyoutube.com.aryoutube.com.auyoutube.com.azyoutube.com.bdyoutube.com.bhyoutube.com.boyoutube.com.bryoutube.com.byyoutube.com.coyoutube.com.doyoutube.com.ecyoutube.com.eeyoutube.com.egyoutube.com.esyoutube.com.ghyoutube.com.gryoutube.com.gtyoutube.com.hkyoutube.com.hnyoutube.com.hryoutube.com.jmyoutube.com.joyoutube.com.kwyoutube.com.lbyoutube.com.lvyoutube.com.lyyoutube.com.mkyoutube.com.mtyoutube.com.mxyoutube.com.myyoutube.com.ngyoutube.com.niyoutube.com.omyoutube.com.payoutube.com.peyoutube.com.phyoutube.com.pkyoutube.com.ptyoutube.com.pyyoutube.com.qayoutube.com.royoutube.com.sayoutube.com.sgyoutube.com.svyoutube.com.tnyoutube.com.tryoutube.com.twyoutube.com.uayoutube.com.uyyoutube.com.ve -youtube.cr -youtube.cz -youtube.de -youtube.dk -youtube.ee -youtube.es -youtube.fi -youtube.fr -youtube.ge -youtube.gr -youtube.gt -youtube.hk -youtube.hr -youtube.hu -youtube.ie -youtube.in -youtube.iq -youtube.is -youtube.it -youtube.jo -youtube.jp -youtube.kr -youtube.kz -youtube.la -youtube.lk -youtube.lt -youtube.lu -youtube.lv -youtube.ly -youtube.ma -youtube.md -youtube.me -youtube.mk -youtube.mn -youtube.mx -youtube.my -youtube.ng -youtube.ni -youtube.nl -youtube.no -youtube.pa -youtube.pe -youtube.ph -youtube.pk -youtube.pl -youtube.pr -youtube.pt -youtube.qa -youtube.ro -youtube.rs -youtube.ru -youtube.sa -youtube.se -youtube.sg -youtube.si -youtube.sk -youtube.sn youtube.soy -youtube.sv -youtube.tn -youtube.tv -youtube.ua -youtube.ug -youtube.uy -youtube.vnyoutubeeducation.comyoutubefanfest.comyoutubegaming.comyoutubego.co.idyoutubego.co.in youtubego.comyoutubego.com.br youtubego.id youtubego.inyoutubei.googleapis.comyoutubekids.comyoutubemobilesupport.com yt.be  ytimg.comand -chromedclkgbizgle gmailgoogoog -googleguge hangout nexus xn--qcka1pmc  google.ad  google.ae  google.al  google.am  google.as  google.at  google.az  google.ba  google.be  google.bf  google.bg  google.bi  google.bj  google.bs  google.bt  google.by  google.ca -google.cat  google.cd  google.cf  google.cg  google.ch  google.ci  google.cl  google.cm google.cn -cn google.co.ao google.co.bw google.co.ck google.co.cr google.co.id google.co.il google.co.in google.co.jp google.co.ke google.co.kr google.co.ls google.co.ma google.co.mz google.co.nz google.co.th google.co.tz google.co.ug google.co.uk google.co.uz google.co.ve google.co.vi google.co.za google.co.zm google.co.zw -google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws 0emm.com  1e100.net  1ucrs.com -466453.com abc.xyz adgoogle.net -admeld.comangulardart.org -api.ai -apigee.com appbridge.ca appbridge.io appbridge.it appspot.com -apture.com area120.com -asp-cc.com autodraw.com bandpage.combaselinestudy.combaselinestudy.org bazel.build bdn.devbeatthatquote.com  blink.org blogblog.com blogger.combrocaproject.com -brotli.org bumpshare.com -bumptop.ca bumptop.com bumptop.net bumptop.org bumptunes.comcampuslondon.com certificate-transparency.org -chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com crr.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org episodic.comfeedburner.com -fflick.comfinanceleadsonline.comfirebaseapp.comfirebaseio.com -foofle.com froogle.com fuchsia.dev  g-tun.comg.cn -cng.co g.dev -g.page gateway.devgerritcodereview.comgetbumptop.com ggoogle.com gipscorp.com gkecnapps.cn -cn globaledu.org  gmail.com gmodules.com  gogle.com -gogole.comgonglchuangl.net -goo.gl -googel.com -googil.com  googl.comgoogle-syndication.com google.berlin -google.dev -google.net -google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cn -cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn -cngooglecode.comgooglecommerce.comgooglecompare.co.ukgoogledanmark.comgoogledomains.comgoogledrive.com googlee.comgoogleearth.comgooglefiber.netgooglefinland.comgooglemail.comgooglemaps.comgooglepagecreator.comgooglephotos.comgoogleplay.comgoogleplus.comgooglesource.comgooglestore.comgooglesverige.comgoogleusercontent.comgoogleventures.com -googlr.com -goolge.com gooogle.com gridaware.app gsrc.io -gstatic.cn -cn gstatic.comgstaticcnapps.cn -cn -gsuite.com -gv.com gvt0.com gvt1.com gvt2.com gvt3.com gvt5.com gvt6.com gvt7.com gvt9.comhdrplusdata.org hindiweb.comhowtogetmo.co.ukhtml5rocks.com hwgo.comiamremarkable.org igoogle.com impermium.com -j2objc.orgjibemobile.com keyhole.comkeytransparency.comkeytransparency.fookeytransparency.org lanternal.com like.commadewithcode.com material.io mdialog.com meet.newmfg-inspector.commobileview.pagemoodstocks.com near.by nest.com nomulus.foo -oauthz.com on.here on2.comonefifteen.netonefifteen.orgoneworldmanystories.com openthread.io openweave.io orbitera.com  page.linkpagespeedmobilizer.com pageview.mobi panoramio.compartylikeits1986.orgpaxlicense.org -picasa.com picasaweb.com picasaweb.net picasaweb.org -picnik.com pittpatt.com -pixate.com postini.comprojectara.comprojectbaseline.compublishproxy.comquestvisual.comquickoffice.com quiksee.com -revolv.comridepenguin.com run.appsavethedate.foo -saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com snapseed.com solveforx.com -stadia.devstcroixmosquito.comstcroixmosquitoproject.comstudywatchbyverily.comstudywatchbyverily.orgstxmosquito.comstxmosquitoproject.comstxmosquitoproject.netstxmosquitoproject.org synergyse.comtensorflow.org  tfhub.devthecleversense.comthegooglestore.comthinkquarterly.co.ukthinkquarterly.comthinkwithgoogle.com tiltbrush.com txcloud.net  txvia.comunfiltered.news useplannr.comusvimosquito.comusvimosquitoproject.comvelostrata.com -verily.comverilylifesciences.comverilystudyhub.comverilystudywatch.comverilystudywatch.org -wallet.com  waymo.com waze.com web.app web.devwebappfieldguide.comwebmproject.orgwebpkgcache.com -webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company -x.team xn--9kr7l.comxn--9trs65b.comxn--flw351e.comxn--ggle-55da.comxn--gogl-0nd52e.comxn--gogl-1nd42e.comxn--ngstr-lra8j.com xplr.cozukunftswerkstatt.de265.com -cn2mdn.net -cn adservice.google.com -cnapp-measurement.com -cn beacons.gcp.gvt2.com -cnbeacons.gvt2.com -cnbeacons3.gvt2.com -cn c.admob.com -cn(c.android.clients.google.com -cn!cache.pack.google.com -cn%clickserve.dartsearch.net -cn)clientservices.googleapis.com -cncorp.google.com -cn crl.pki.goog -cn"csi-china.l.google.com -cn dl.google.com -cndl.l.google.com -cndoubleclick.net -cn-!firebase-settings.crashlytics.com -cn fonts.googleapis.com -cn google-analytics.com -cn googleadservices.com -cngoogleanalytics.com -cn!googlesyndication.com -cn googletagmanager.com -cn!googletagservices.com -cngtm.oasisfeng.com -cn!imasdk.googleapis.com -cn kh.google.com -cn ocsp.pki.goog -cn, pagead-googlehosted.l.google.com -cn!pki-goog.l.google.com -cn recaptcha.net -cnredirector.gvt1.com -cn)safebrowsing-cache.google.com -cn'safebrowsing.googleapis.com -cn$settings.crashlytics.com -cn-!ssl-google-analytics.l.google.com -cn%toolbarqueries.google.com -cntools.google.com -cntools.l.google.com -cn$translate.googleapis.com -cn!update.googleapis.com -cn-!www-googletagmanager.l.google.com -cnwww.recaptcha.net -cn0$^khm([0-3]|db)?\.google(apis)?\.com$ -cn  hinet.net -123-hp.com123hplaserjet.com8008206616.com as-hp.cabaterias-hp.com campushp.comcolorprotechnology.com -compaq.orgdavid-laserscanner.com demoprint.comdigitalpack.com eprintsw.comgaming-notebooks.comgetprintersupports.comhp-imagine.comhp-infolab.com hp-invent.comhp-invent.info -hp-mns.comhp-printing.comhp-webplatform.com  hp-ww.com -hp.com -hp.company hp.io hp3d.comhp3dmetals.comhp3dprinter.comhp3dsamplepromo.comhpallinoneprinter.comhpapplicationscenter.com hpbestbuy.comhpbluecarpet.comhpbluecarpet.nethpbuiltforlearning.com hpbundle.com hpcampus.comhpcatridge.com  hpccp.com  hpceo.com  hpcmw.nethpcodewarsbcn.comhpcomputers.comhpcomputerservices.comhpconnected.comhpconnected.nethpconnected.orghpconnected.ushpconnectedstage.comhpcontinuum.com  hpcpi.com hpcu.orghpcustomersupport.comhpcustomersupport.net -hpdaas.comhpdesignjetl25500.comhpdesktopcomputer.comhpdownloadstore.comhpdreamcolor.com hpdriver.com hpdrivers.com hpdrivers.org hpeclipse.com hpengage.com hpeprint.comhpeprintcenter.com hpeurope.comhpeventcenter.com -hpfaqs.comhpfeedback.com -hpgift.com -hpgpas.comhpgraphicspartners.com  hpiie.org -hpinc.info  hpinc.nethpindigopress.com hpinkjet.comhpinstantink.cahpinstantink.comhpkeyboard.com hplaptop.comhplaptopbattery.comhplargeformatremote.comhplatexknowledgecenter.com hplfmedia.com  hplip.nethplipopensource.comhpmarketplace.comhpmemorychips.comhpmicrcartridge.com -hpmini.com hpmobile.comhpofficejetprinter.comhponlinehelp.comhponlineprinting.comhppage5000.comhppavillionlaptop.comhpphotoscanners.comhpprinterdrivers.comhpprinterinstalls.comhpprintersupplies.comhpsalescentral.com hpserver.comhpservices.comhpshooping.com -hpshop.com hpshoping.com hpshopping.hk hpsignage.com hpsmart.com hpsmarts.comhpsmartstage.comhpsmartupdate.comhpsoftware.com hpspeaker.comhpsprocket.com  hpsso.comhpstore-china.comhpstore-emea.com -hpstore.cn -cn hpstore.comhpstorethailand.com hpsupport.comhpsuresupply.comhptechventures.com hpto.net hptouch.comhptouchpointmanager.comhptrainingcenter.com  hpuae.comhpuniversity.infohpusertraining.com -hpveer.comhpvirtualthin.com hpwallart.comhpwellnesscentral.com  hpwsn.com i-123-hp.com inkchoice.cominstantink.comleavinghpinc.comlife-global.orgmyhpsupport.com printeron.comprintersetupsupport.comprintspots.comprintspots.netserviceshp.comthecompaqstore.comtouchsmartpc.comtouchsmartpc.nettouchsmartpc.orgworkstations.tv www8-hp.comxn--6eup7j.comxn--6eup7j.nethpstore.corpmerchandise.comibmweatherchannel weatherappdomain.cloud bluemix.com bluemix.net ibm.com -ibm.eu ibm.net -ibm.us s-bluemix.net s81c.com intel intel.ac intel.ae intel.af intel.ag intel.ai intel.ar intel.at intel.az intel.ba intel.bg intel.bh intel.bi intel.bo intel.bs intel.by intel.ca intel.cc intel.cg intel.ch intel.cl intel.cmintel.cn -cn intel.co.ae intel.co.cr intel.co.id intel.co.il intel.co.jp intel.co.kr intel.co.uk intel.co.za  intel.com intel.com.ar intel.com.au intel.com.bo intel.com.br intel.com.cn -cn intel.com.co intel.com.ec intel.com.hk intel.com.jm intel.com.mx intel.com.my intel.com.pe intel.com.ph intel.com.pr intel.com.py intel.com.tr intel.com.tw intel.com.uy intel.com.ve intel.cr intel.cu intel.cz intel.de intel.dk intel.dz intel.ec intel.ee intel.eg intel.es intel.eu intel.fi intel.fr intel.ga intel.gd intel.ge intel.gl intel.gm intel.gr intel.gs intel.gt intel.gy intel.hk intel.hn intel.ht intel.hu intel.ie intel.in intel.io intel.it intel.je intel.jo intel.jp intel.ke intel.la intel.lc intel.lk intel.lt intel.lu intel.ly intel.ma intel.md intel.me intel.mg intel.mk intel.mn intel.mp intel.mt intel.mu intel.mw intel.mx intel.my intel.ng intel.nl intel.nu intel.nz intel.pa intel.pe intel.ph intel.pl intel.pn intel.re intel.ro intel.ru intel.rw intel.sa intel.sc intel.se intel.sg intel.si intel.sk intel.sn intel.sr intel.st intel.sv intel.sx intel.sy intel.tf intel.tj intel.tl intel.tm intel.tn intel.tt intel.tv intel.tw intel.ua intel.uk intel.us intel.uy intel.uz intel.vg intel.vn intel.vu intel.wf intel.yt -altera.comalteraforum.comalteraforums.comalteraforums.netalterauserforum.comalterauserforum.netalterauserforums.comalterauserforums.net buyaltera.com celeron.com celeron.net centrino.com centrino.net  chips.com cilk.com cilk.netcloudinsights.comclusterconnection.com coreduo.comcoreextreme.comcrosswalk-project.comcrosswalk-project.netdoceapower.com  easic.com enpirion.comexascale-tech.comexploreintel.comgordonmoore.cominsidefilms.com intc.comintel-research.net&"intel-university-collaboration.netintelamericasstore.comintelapacstore.com intelatom.netintelcapital.comintelcapital.netintelcloudbuilders.comintelcloudfinder.comintelemeastore.cominteleventexpress.comintelforchange.comintelfreepress.com intelgo.netintelinsight.cominteliotmarketplace.com -intell.comintellearningseries.comintellinuxwireless.netintelnervana.comintelnet.component intelplay.comintelquark.comintelrealsense.cn -cnintelrealsense.com intelrxt.comintelsalestraining.comintelsecurity.comintelserveredge.comintelsoftwarenetwork.comintelstore.cominteltechnologyprovider.com intelvmwarecybersecurity.com  itnel.comlatencytop.comlookinside.commakebettercode.commakesenseofdata.com movidius.com movidius.netnervanasys.com  nevex.comnextgenerationcenter.com -niosii.com -niosii.netomekinteractive.com -omnitek.tv openamt.comopendroneid.orgoptanedifference.com -pc.com pentium.com pentium.net pintool.compoweredbyintel.comreconinstruments.com reconjet.comresearchintel.comsaffrontech.comsensorynetworks.com -siport.comsmart-edge.comtheintelstore.comthunderbolttechnology.nettrustedanalytics.comtrustedanalytics.net -vokevr.com vpro.com vpro.net xeon.comxn--ztsq84g.cn -xscale.combarefootnetworks.com -lg.com lgappstv.com  lge.co.kr lge.comlgecareers.com -lghvac.comlghvacstory.comlgrecyclingprogram.comlgsalesportal.comlgelectronics.122.2o7.net linkedin.com  licdn.com logi.comlogicool.co.jp logicoolg.com logitech.biz logitech.com logitech.fr logitechg.com logitechg.frworldsfastestgamer.net imgsmail.ru mail.ru mycdn.me azure-dns.comazure-dns.info azure-dns.net azure-dns.orgazure-mobile.netazure-sphere.comazure-test.netazure.cn -cn  azure.com  azure.netazurecomcdn.netazurecontainer.ioazurecosmos.netazurecosmosdb.comazurecosmosdb.infoazurecosmosdb.netazuredatabricks.netazuredevopslaunch.comazuredigitaltwin.comazuredigitaltwins.comazuredigitaltwins.netazuredns-prd.infoazuredns-prd.orgazureedge-test.net azureedge.netazureiotcentral.comazureiotsolutions.comazureiotsuite.comazureplanetscale.infoazureplanetscale.netazureserviceprofiler.comazuresmartspaces.netazurestackvalidation.comazurewebsites.netchinacloudapi.cn -cnchinacloudapp.cn -cnchinacloudsites.cn -cn cosmosdb.info cosmosdb.net devopsms.com gotcosmos.commicrosofteca.commicrosoftiotcentral.comserverlesslibrary.nettryfunctions.comwindowsazure.cn -cnwindowsazure.comazure.microsoft.com"azuremarketplace.microsoft.combing bing.com bing.com.cn -cn bing.net bingads.combingagencyawards.combingapistatistics.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com -dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.com cn.bing.com -cn cn.bing.net -cn ditu.live.com -cnbj1.api.bing.com -cnemoi-cncdn.bing.com -cnmicrosoftnews.ccmicrosoftnews.cn -cnmicrosoftnews.commicrosoftnews.netmicrosoftnews.orgmicrosoftnewsforkids.commicrosoftnewsforkids.netmicrosoftnewsforkids.orgmicrosoftnewskids.commicrosoftnewskids.netmicrosoftnewskids.org msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.com 1drv.com 1drv.mslivefilestore.com onedrive.coonedrive.co.uk onedrive.com onedrive.eu onedrive.net onedrive.orgonedrive.live.comstorage.live.com  microsoft azure hotmail -office skype windowsxbox microsoft.az microsoft.be microsoft.by microsoft.ca microsoft.cat microsoft.ch microsoft.cl microsoft.com microsoft.cz microsoft.de microsoft.dk microsoft.ee microsoft.es microsoft.eu microsoft.fi microsoft.ge microsoft.hu microsoft.io microsoft.is microsoft.it microsoft.jp microsoft.lt microsoft.lu microsoft.lv microsoft.md microsoft.pl microsoft.pt microsoft.red microsoft.ro microsoft.rs microsoft.ru microsoft.se microsoft.si microsoft.tv microsoft.ua microsoft.uz microsoft.vnfemalefounderscomp.com -m12.vc -aka.msankarazirvesi2018.comapplicationinsights.ioapplicationinsights.net aria.ms asp.net aspnetcdn.com -binads.com bluehatil.combrazilpartneruniversity.com breakdown.mecentralvalidation.com -ch9.mscharticulator.com cloudapp.netcloudappsecurity.comcortanaanalytics.comcortanaskills.comcrmdynint-gcc.com crmdynint.comcrossborderexpansion.com docs.com dynamics.com efproject.netazuredigitaltwin.comfasttrackreadysupport.comfluidpreview.comgameuxmasterguide.com -gears5.com gearspop.comgearstactics.com -gfx.ms -gigjam.com hololens.com -hotmail.co hotmail.com -hotmail.eu hotmail.net hotmail.orghummingbird.ms -ie8.co ie9.com ie10.com ie11.cominternetexplorer.cointernetexplorer.com imaginecup.pl -ingads.comintunewiki.comiotinactionevents.com -kidgrid.tvlatampartneruniversity.com live.com live.com.au live.eu live.netlivingyourambition.com makecode.orgmanagedmeetingrooms.commeetfasttrack.commeetyourdevices.com mepn.commicrosoft-int.commicrosoft-ppe.commicrosoft-sap-events.commicrosoft-sbs-domains.commicrosoft-smb.cn -cnmicrosoft365.commicrosoftaccountguard.commicrosoftads.commicrosoftadvertising.com*µsoftadvertisingregionalawards.commicrosoftaffiliates.commicrosoftcloud.commicrosoftcloudworkshop.com"microsoftcommunitytraining.commicrosoftedge.commicrosofthouse.commicrosofthouse.netmicrosoftinternetsafety.netmicrosoftlatamaitour.commicrosoftlinc.commicrosoftonline-p.commicrosoftonline.com!microsoftpartnercommunity.commicrosoftready.commicrosoftsiteselection.commicrosoftstore.commicrosoftstore.com.hkmicrosoftstream.commicrosoftteams.commicrosofttradein.commicrosofttranslator.commicrosoftuwp.commomentumms.commorphcharts.commpnevolution.comms-studiosmedia.comms365surfaceoffer.com  msads.net msauth.cn -cn -msauth.netmschallenge2018.com -msecnd.net -msedge.net  msft.info msft.net msftauth.cn -cn msftauth.netmsfteducation.ca msftnet.orgmsgamesresearch.com -msocdn.com -msocsp.com msturing.orgmsudalosti.commymicrosoft.comnextechafrica.net nxta.orgo365weve-dev.como365weve-ppe.com o365weve.com -office.com -office.net office365.com onenote.com onenote.net onestore.msopticsforthecloud.netoutingsapp.com outlook.com passport.net -pixapp.netpowerappscdn.netpowerautomate.com powerbi.compowershellgallery.comprojectmurphy.netprojectsangam.com -pxt.ios-microsoft.com  s-msn.com sfbassets.com sfbassets.net -sfx.ms sharepoint.cn -cnsharepoint.comsharepointonline.com  skype.com  skype.netskypeassets.comskypeassets.net staffhub.mssuccesswithteams.com surface.com sway-cdn.com sway.comsysinternals.comtailwindtraders.com -techhub.ms tfsallin.nettrafficmanager.nettranslatetheweb.comunlocklimitlesslearning.com -userpxt.iovideobreakdown.comvideoindexer.aivirtualearth.net vsallin.net -wbd.ms what-fan.netwindows-int.net windows.com windows.net -windows.nl windows8.hkwindowscommunity.netwindowsmarketplace.comwindowsphone-int.comwindowsphone.comwindowssearch.comwindowsupdate.com -winhec.com -winhec.net -yammer.comcdn.office.net -cn(dl.delivery.mp.microsoft.com -cn&download.windowsupdate.com -cn'bg.v4.a.dl.ws.microsoft.com -cn(bg4.v4.a.dl.ws.microsoft.com -cn2&cdn.marketplaceimages.windowsphone.com -cn cn.windowssearch.com -cn#ctldl.windowsupdate.com -cn#developer.microsoft.com -cndocs.microsoft.com -cn"download.microsoft.com -cn/#download.visualstudio.microsoft.com -cnfs.microsoft.com -cn(msgr.dlservice.microsoft.com -cn, msgruser.dlservice.microsoft.com -cn#officecdn.microsoft.com -cn&qh.dlservice.microsoft.com -cnsdx.microsoft.com -cn/#silverlight.dlservice.microsoft.com -cn, slupdate.dlservice.microsoft.com -cn, storeedgefd.dsx.mp.microsoft.com -cn&wl.dlservice.microsoft.com -cn&wscont1.apps.microsoft.com -cn&wscont2.apps.microsoft.com -cnwww.microsoft.com -cn&xb.dlservice.microsoft.com -cn/+img-prod-cms-rt-microsoft-com.akamaized.netimg-s-msn-com.akamaized.netmwf-service.akamaized.net)%officecdn-microsoft-com.akamaized.net3/statics-marketingsites-eus-ms-com.akamaized.net40statics-marketingsites-wcus-ms-com.akamaized.net firefox.comdeveloper.mozilla.org($interactive-examples.mdn.mozilla.netmdn.mozillademos.orgmedia.prod.mdn.mozit.cloud rust-lang.org  rustup.rs  crates.io docs.rsmozilla.community mozilla.net mozilla.org bugzilla.org getpocket.comseamonkey-project.orgthunderbird.net grafolio.com  naver.com naver.jp  naver.net navercorp.com  plug.game pstatic.net neuralink.com -geforce.cn -cn geforce.co.kr geforce.co.uk geforce.comgeforce.com.twgputechconf.cn -cngputechconf.co.krgputechconf.comgputechconf.com.augputechconf.com.twgputechconf.eugputechconf.ingputechconf.jp nvidia.asia  nvidia.be  nvidia.ch nvidia.cn -cn nvidia.co.jp nvidia.co.kr -nvidia.com nvidia.com.au nvidia.com.br nvidia.com.tr nvidia.com.tw  nvidia.cz  nvidia.de  nvidia.dk  nvidia.es  nvidia.eu  nvidia.fi  nvidia.fr  nvidia.it  nvidia.lu  nvidia.nl  nvidia.no  nvidia.pl  nvidia.ro  nvidia.ru  nvidia.seshotwithgeforce.comnvidia.tt.omtrdc.net -oracle -oracle.comoraclecloud.comoraclefoundation.org oracleimg.comateam-oracle.com -bronto.comcovid19-rx.org covid19rx.org sun.com  panasonic panasonic.cn -cn panasonic.com panasonic.jp technics.comairgonetworks.comberkanawireless.comdragoniscoming.comgobianywhere.comhellosmartbook.com imod.comipleadership.org -iskoot.commeetsmartbook.compatenttruth.org pixtronix.comqctconnect.com -qprize.comqualcomm-email.com qualcomm.cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com -uplinq.com wipower.comwirelessreach.com -brewmp.comqualcomm.sc.omtrdc.net  razer.comrazersupport.com razerzone.com razerzone.jprespawnbyrazer.com appcloud.comappexchange.com attic.iobeyondcore.combuddymedia.com chatter.comcloudcraze.com cotweet.com data.comdemandware.com desk.comdocumentforce.comdreamforce.com einstein.comexacttarget.com  force.com govforce.comgravitytank.com heywire.com krux.commarketingcloud.com metamind.io -pardot.com quotable.com radian6.com relateiq.comsalesforce.comsalesforce.orgsalesforceiq.comsalesforceliveagent.com salesforcemarketingcloud.com sequence.comsfdcstatic.com -sforce.com site.com -social.comsteelbrick.com twinprime.comweinvoiceit.com samsung -xn--cg4bkigalaxyappstore.comgalaxymobile.jpgame-platform.net knoxemm.com samsung.comsamsungapps.comsamsungcloud.com samsungdm.comsamsungeshop.com.cn -cnsamsunggalaxyfriends.comsamsungknox.comsamsungqbe.com -sc-cdn.net snap-dev.net snap.com snapads.com snapchat.com -snapkit.cosonyginzasonypark.jpsony-africa.com sony-asia.comsony-europe.comsony-hes.co.jpsony-latin.com sony-mea.comsony-olympus-medical.comsony-promotion.eusony-semicon.co.jp sony.at sony.ba sony.be sony.bg sony.ca sony.ch sony.cl -sony.co.cr -sony.co.id -sony.co.in -sony.co.jp -sony.co.kr -sony.co.nz -sony.co.th -sony.co.uk sony.com sony.com.ar sony.com.au sony.com.bo sony.com.br sony.com.co sony.com.do sony.com.ec sony.com.gt sony.com.hk sony.com.hn sony.com.mk sony.com.mx sony.com.my sony.com.ni sony.com.pa sony.com.pe sony.com.ph sony.com.sg sony.com.sv sony.com.tr sony.com.tw sony.com.vn sony.cz sony.de sony.dk sony.ee sony.es sony.eu sony.fi sony.fr sony.gr sony.hr sony.hu sony.ie sony.it sony.kz sony.lt sony.lu sony.lv sony.net sony.nl sony.no sony.pl sony.pt sony.ro sony.rs sony.ru sony.se sony.si sony.sk sony.ua sonybo.co.jp sonybsc.comsonybuilding.jpsonydesign.com sonydna.comsonyglobalsolutions.jp sonykigyo.jpsonylatvija.com -sonypcl.jpsonyprotechnosupport.co.jpsonystoragemedia.co.jp sonytc.co.jp  sovec.net -spacex.comboringcompany.com x.comads-twitter.com periscope.tv pscp.tvt.co tellapart.com tweetdeck.com  twimg.com twitpic.com twitter.com -twitter.jptwitterinc.comtwitteroauth.comtwitterstat.us twtrdns.net  twttr.com vine.couber-assets.com uber.com ubereats.com -oath.cloud oath.com ouroath.comstatic-verizon.com verizon.com verizon.netverizonbusinessfios.comverizonenterprise.comverizonfios.comverizonmedia.comverizonwireless.com vzw.com -xo.com mvk.com userapi.com  vk-cdn.me -vk-cdn.net vk-portal.net vk.cc -vk.com  vk.design vk.link vk.me vkcache.com vkgo.app -vklive.appvkmessenger.comvkmessenger.app vkontakte.ruvkuseraudio.comvkuserlive.netvkuservideo.comvkuservideo.netg-technology.com -sandisk.ae -sandisk.it -sandisk.cn -cn sandisk.co.jp sandisk.co.kr sandisk.co.uk sandisk.comsandisk.com.ausandisk.com.brsandisk.com.trsandisk.com.tw -sandisk.de -sandisk.es -sandisk.fr -sandisk.hk -sandisk.id -sandisk.in -sandisk.nl -sandisk.sg -wd.com wdc.comwesterndigital.com ads.yahoo.com -adsgemini.yahoo.com -ads ysm.yahoo.com -ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn -cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn -cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hkyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.comxn--d1acpjx3f.xn--p1ai  yandex.az  yandex.by yandex.co.il -yandex.com yandex.com.am yandex.com.ge yandex.com.tr  yandex.ee  yandex.kg  yandex.kz  yandex.lt  yandex.lv  yandex.md -yandex.net  yandex.ru  yandex.st  yandex.sx  yandex.tj  yandex.tm  yandex.ua  yandex.uzyandexcloud.net yastatic.net -yandex 928.plus -zind.cloud aaex.uk amytele.com -ark.tobaicaonetwork.com bighead.groupblinkload.zone boslife.biz boslife.net  cloudn.me  conair.me cordcloud.org ctyun.online -cylink.procylink0122.icu dlercloud.com dlercloud.org dlercloud.me dleris.best duyaoss.com duyaossr.com geph.io hitun.ioxn--90wwvt03e.comjustmysocks.netjustmysocks1.netjustmysocks2.netjustmysocks4.net  maying.comocloudplus.com  mray.club muncloud.dog n3ro.lol n3ro.net n3ro.wtf nexitally.comnexitallysafe.com nexitcore.com paofu.cloud paofuyun.me renzhe.cloudshadowsocks.comshadowsocks.nlsquirrelvpn.comsquirrelgroup.net -ssplive.pwairport-gov-cn.comcnix-gov-cn.comxn--d4ty0ojsqzfd.com -ssrpass.pwstc-server.com surflite.co surflite.net vilavpn.com vilavpn.xyz vilavpn1.xyz vilavpn2.xyz vilavpn3.xyz vilavpn4.xyz vilavpn5.xyz vilavpn6.xyz vilavpn7.xyz cursecdn.com -fandom.com  wikia.com  wikia.org dndbeyond.com futhead.com gamepedia.com muthead.comwikia.nocookie.netfandom.zendesk.com miraheze.org scp-wiki.net  scpdb.org scpwiki.comtranslatewiki.nettranslatewiki.org wdfiles.com wikidot.com wikihow.com mediawiki.org wikibooks.org wikidata.orgwikimediafoundation.org wikimedia.org wikinews.org wikipedia.org wikiquote.orgwikisource.orgwikiversity.orgwikivoyage.orgwiktionary.orgwmfusercontent.org -w.wiki toolforge.orgwikimediacloud.org wmcloud.org wmflabs.orgfamifun.com.tw family.co.jp family.com.twfamilymart.com.cn -cnfamilymart.com.myfamilymart.com.ph  famima.vn hkedcity.nethkreadingcity.nethuanghuagang.orgmcd  mcdonalds4008-517-517.cn -cnaboutmcdonalds.comhappymeal.co.nzhappymeal.com.au mcd.commcdelivery.co.idmcdelivery.co.krmcdelivery.com.aumcdelivery.com.mymcdelivery.com.sgmcdelivery.com.twmcdindonesia.com mcdonalds.camcdonalds.co.uk mcdonalds.commcdonalds.com.hk mcdonalds.hk mcdonalds.it mcdonalds.no mcdonalds.semcdonaldsarabia.commcdonaldsparties.co.nzmcdonaldsparties.com.au!xn--qhrx81fxh2a.xn--55qx5d.hk rarbg.me rarbg.toproxyrarbg.org rarbg.israrbgaccess.org rarbggo.orgrarbgmirror.comrarbgmirror.orgrarbgproxy.org rarbgprx.orgrarbgunblock.comaerogard.com.auaerogard.com.cn -cnaerogardcn.com -airwick.at -airwick.be -airwick.ca -airwick.ch -airwick.cl airwick.co.in airwick.co.nz airwick.co.uk airwick.co.za airwick.comairwick.com.auairwick.com.brairwick.com.cn -cnairwick.com.mxairwick.com.tr -airwick.cz -airwick.de -airwick.dk -airwick.es -airwick.fi -airwick.fr -airwick.hr -airwick.hu -airwick.ie -airwick.it -airwick.jp airwick.net -airwick.nl -airwick.no -airwick.pl -airwick.pt -airwick.ro -airwick.ru -airwick.se -airwick.si -airwick.sk -airwick.tv -airwick.usairwickarabia.com vipoo.es  calgon.at  calgon.be  calgon.ch calgon.cn -cn calgon.co.uk -calgon.com calgon.com.tr  calgon.de  calgon.es  calgon.fr  calgon.ie  calgon.it  calgon.nl  calgon.pt  calgon.ru  calgon.tvcalgoncarbon-china.comcalgoncarbon.com calgonit.com clearasil.cn -cnclearasil.com.cn -cn clearasil.usdettol-prize.com  dettol.at  dettol.be  dettol.ch  dettol.cl dettol.co.id dettol.co.in dettol.co.ke dettol.co.nz dettol.co.uk -dettol.com dettol.com.au dettol.com.bd dettol.com.br dettol.com.cn -cn dettol.com.eg dettol.com.hk dettol.com.my dettol.com.ng dettol.com.sg  dettol.cz  dettol.fr  dettol.hu  dettol.ie -dettol.net  dettol.nl  dettol.pk  dettol.pl  dettol.pt  dettol.rudettolarabia.comdettolcleannaija.comdettolsitishield.co.indettolthailand.comespadoldettol.com.ardewitwithdurex.com dotherex.com durex-shop.chdurex-shopline.comdurex-slovenia.si durex.at durex.be durex.cl durex.co.id durex.co.il durex.co.nz durex.co.th durex.co.uk durex.co.za  durex.com durex.com.au durex.com.bd durex.com.cn -cn durex.com.co durex.com.hr durex.com.my durex.com.ng durex.com.pe durex.com.ph durex.com.pk durex.com.sg durex.com.tr durex.cz durex.de durex.dk durex.ee durex.es durex.fi durex.fr durex.hu durex.ie durex.it durex.jp durex.lv durex.mx durex.nl durex.no durex.pl durex.pt durex.ro durex.ru durex.se durex.us durexcam.comdurexcanada.comdurexchina.comdurexchina.com.cn -cndurexindia.comdurexloveclub.comdurexukraine.com durexusa.comlovesexdurex.cn -cnlovesexdurex.complaybydurex.com shopdurex.com trydurex.net trydurex.tvbebepremium3.com.bo -enfa.co.id enfa.com.vn enfaaplus.com enfababy.com enfabebe.comenfabebe.com.brenfabebe.com.coenfabebe.com.doenfabebe.com.ecenfabebe.com.mxenfabebe.com.peenfabebe.com.veenfabebe3.com.arenfagrow.co.inenfagrow.com.bnenfagrow.com.myenfagrow.com.phenfagrow.com.sg enfagrow4.comenfamama.com.arenfamama.com.ph -enfamil.ca enfamil.com -enfamil.es -enfamil.pl -enfamil.pt enfasmart.comenspireformula.comnutramigen.net nutramigen.pl$dishwashingexpert.com.cn -cn  finish.at  finish.bg finish.co.kr finish.co.nz finish.co.uk finish.co.za finish.com.cn -cn finish.com.hr finish.com.tr  finish.de  finish.es  finish.fr  finish.gr  finish.hu  finish.lv  finish.pl  finish.pt  finish.ro  finish.si  finish.skfinisharabia.comfinishbrasil.com.brfinishdishwashing.cafinishdishwashing.com finishinfo.be finishinfo.clfinishinfo.comfinishinfo.com.arfinishinfo.com.au finishinfo.cz finishinfo.fi finishinfo.it finishinfo.jp finishinfo.nl finishinfo.no finishinfo.ru finishinfo.sefinishkilpailu.fi finishwin.beyarininsuyu.com lizol.co.in lysol.ca lysol.cllysol.cn -cn lysol.co.cr  lysol.com lysol.com.cn -cn lysol.com.mx  lysol.netenfinitas.com.cn -cnmeadjohnson.commeadjohnson.com.cn -cnmeadjohnson.com.hkmeadjohnson.com.twmeadjohnson.net -mortein.cn -cn mortein.co.in mortein.co.nz mortein.co.za mortein.commortein.com.aumortein.com.brmortein.com.ngmortein.com.pkmorteincam.compifpafarabia.comkeepmovingwithmovefree.com move-free.net movefree.cn -cn movefrees.commovefreeoffers.commovefreerewards.comschiffvitamins.com -mucinex.ca -mucinex.cn mucinex.co.nz mucinex.commucinex.com.cn mucinex.net -mucinex.tvmucinexprofessional.com -nurofen.at -nurofen.bg -nurofen.cn -cn nurofen.co.il nurofen.co.nz nurofen.co.uk nurofen.co.za nurofen.comnurofen.com.aunurofen.com.cn -cnnurofen.com.sg -nurofen.cz -nurofen.de -nurofen.es -nurofen.fr -nurofen.hr -nurofen.hu -nurofen.ie -nurofen.it nurofen.net -nurofen.no -nurofen.pl -nurofen.pt -nurofen.ro -nurofen.sk -nurofen.runurofengel.com51nurofensk-prod-env.eu-west-1.elasticbeanstalk.com -cepacol.ca cepacol.com dobendan.degraneodin.com.mx -repsils.no strepsils.at strepsils.ch strepsils.cn -cnstrepsils.co.krstrepsils.co.nzstrepsils.co.zastrepsils.com.arstrepsils.com.brstrepsils.com.cn -cnstrepsils.com.costrepsils.com.austrepsils.com.hkstrepsils.com.phstrepsils.com.tw strepsils.es strepsils.fi strepsils.fr strepsils.hr strepsils.hu strepsils.ie strepsils.net strepsils.pl strepsils.pt strepsils.ro strepsils.ru strepsils.si strepsils.usstrepsilsarabia.como2action.co.krpowerofresolve.capowerofresolve.comspraynwash.com  vanish.at  vanish.be  vanish.ch  vanish.cl vanish.cn -cn vanish.co.id vanish.co.il vanish.co.in vanish.co.nz vanish.co.uk vanish.co.za vanish.com.ar vanish.com.br vanish.com.co vanish.com.hr vanish.com.mx vanish.com.my vanish.com.pe vanish.com.sg vanish.com.tr  vanish.de  vanish.dk  vanish.es  vanish.fi  vanish.fr  vanish.hu  vanish.ie  vanish.it  vanish.nl  vanish.no  vanish.pl  vanish.pt  vanish.ro  vanish.ru  vanish.se  vanish.si  vanish.skvanisharabia.comvanishbancaseulook.com.brvanishcentroamerica.com vanishinfo.czvanishstains.comvanishstains.com.au veet.at veet.be veet.ca veet.ch veet.clveet.cn -cn -veet.co.id -veet.co.in -veet.co.kr -veet.co.nz -veet.co.uk -veet.co.za veet.com veet.com.ar veet.com.au veet.com.bd veet.com.br veet.com.cn -cn veet.com.co veet.com.hk veet.com.mx veet.com.my veet.com.ph veet.com.pk veet.com.sg veet.com.tr veet.de veet.dk veet.es veet.fi veet.fr veet.hu veet.jp veet.nl veet.no veet.pt veet.ro veet.ru veet.se veet.tv veet.usveetarabia.comveetbangladesh.comveetcentroamerica.com veetclub.it -woolite.ca -woolite.cn -cn woolite.comwoolite.com.cn -cn -woolite.pl -woolite.uswoolitecarpet.comdigital-rb.com rb-crisis.com -rb.com -rb.netrbbusinessshop.comrbdigitalab.comrbdigitallab.comrbeuroinfo.com rbgrads.comrbgraduates.comrbmavericks.comrbnainternational.com  rbplc.comrbrandlibrary.com rbspeakup.com reckitt.netreckittbenckiser.cn -cnreckittbenckiser.com#reckittbenckiser.com.cn -cnreckittbenckiser.netreckittbenckiser.tvreckittprofessional.com starbucks.castarbucks.co.uk starbucks.comstarbucks.com.cn -cn starbucks.de starbucks.fr starbucks.ie -tsquare.tv  windy.com xdty.org  xingrz.me - - GETTYIMAGESgettyimages.aegettyimages.atgettyimages.begettyimages.cagettyimages.chgettyimages.co.jpgettyimages.co.nzgettyimages.co.ukgettyimages.comgettyimages.com.augettyimages.com.brgettyimages.com.mxgettyimages.degettyimages.dkgettyimages.esgettyimages.figettyimages.frgettyimages.hkgettyimages.iegettyimages.ingettyimages.itgettyimages.nlgettyimages.nogettyimages.ptgettyimages.se - -SECTIGO sectigo.comenterprisessl.comhackerguardian.cominstantssl.comoptimumssl.compositivessl.com -f - TAYLORFRANCIS tandf.co.uktandfonline.comtaylorandfrancis.comtaylorfrancis.com - -XPOSED xposed.info - -CITIC citic chinaamc.comcitic-prudential.com.cn citicbank.comciticcapital.com citiciam.com citicifh.comciticprufunds.com.cn citics.com.hk citicsf.com clsa.comcncbinternational.com -csc108.com csci.hk -ecitic.com - - -DUCKDUCKGOcispaletter.comcispaletter.orgcometotheduckside.com -ddg.co -ddg.gg -ddh.gg -dgg.gg dontbubble.us donttrack.us duck.co duck.comduckduckco.com duckduckco.de duckduckgo.ca duckduckgo.coduckduckgo.co.ukduckduckgo.comduckduckgo.com.mxduckduckgo.com.tw duckduckgo.de duckduckgo.dk duckduckgo.in duckduckgo.jp duckduckgo.ke duckduckgo.mx duckduckgo.nlduckduckgo.org duckduckgo.pl duckduckgo.sg duckduckgo.ukduckduckhack.com -duckgo.com ducksear.ch duckside.com  dukgo.comenteentegeh.defixtracking.com goduckgo.com hacksear.chjustduckit.comprivacysimplified.comprivatebrowsingmyths.comspreadprivacy.com -) -EASYLIST easylist.to lanik.us -# - EMOGI-ADS emogi.com -ads - -EPORNER eporner.com - -MARVEL -marvel.commarvel10thanniversary.commarveldimensionofheroes.commarvelparty.netmarvelpinball.commarvelsdoubleagent.commarvelspotlightplays.com marvelsuperheroseptember.commarvelsuperwar.comthemarvelexperiencetour.com - -PHP php.net -3 -HKEDCITY hkedcity.nethkreadingcity.net -% -IMGIX  imgix.com  imgix.net -% -KUGOU  kgimg.com  kugou.com - -OOKLA-SPEEDTEST  cdnst.net cellmaps.com ekahau.cloud -ekahau.com  ookla.comooklaserver.net pingtest.net speedtest.co speedtest.netspeedtestcustom.com webtest.netOB^speed\.(coe|open)\.ad\.[a-z]{2,6}\.prod\.hosts\.ooklaserver\.net$ -ads -" - ACCUWEATHERaccuweather.com - - -AKAMAI ak1.net -aka-ai.com -aka-ai.net akacrypto.net akadeem.net -akadns.com akadns6.net -akaeai.com -akafms.net akahost.net -akaint.net akam.net -akamaa.com -akamah.com -akamak.com -akamam.comakamai-access.comakamai-access.netakamai-cdn.com akamai-platform-internal.netakamai-platform-staging.comakamai-platform.netakamai-regression.netakamai-staging.netakamai-sucks.netakamai-thailand.comakamai-thailand.netakamai-trials.com akamai.co.kr -akamai.com -akamai.netakamaientrypoint.netakamaietpcnctest.com#akamaietpcompromisedcnctest.com'#akamaietpcompromisedmalwaretest.comakamaietpmalwaretest.comakamaietpphishingtest.comakamaihd-staging.net akamaihd.com akamaihd.netakamaimagicmath.netakamainewzealand.comakamaiphillipines.comakamaiphillipines.netakamaitech.comakamaitech.netakamaitechnologies.comakamaitechnologies.netakamaisingapore.netakamaized-staging.net akamaized.netakamaizercentral.com -akamci.com  akami.com  akami.net -akamii.com -akamqi.com akastream.com akastream.net -akatns.net iamakamai.com iamakamai.netsoasta-dswb.com -srtcdn.net -# - DATFOUNDATIONdat.foundation -k -DOUYU  douyu.com douyu.tv douyucdn.cn douyucdn2.cn douyuscdn.com douyutv.com -6 - RUBYCHINAruby-china.orgrubyconfchina.org -n -TWITCH ext-twitch.tv  jtvnw.net  ttvnw.net  twitch.tv twitchcdn.net twitchsvc.net -9 -ABCabc-studios.com abc.com edgedatg.com - - MEGAPHONE megaphone.fm -+ - ONESIGNAL-ADS onesignal.com -ads -3 - SEGMENTFAULTsegmentfault.com  sifou.com -4 -MAILRU imgsmail.ru mail.ru mycdn.me -+ - MXPLAYER-ADSevt.mxplay.com -ads - -THESUNdreamteamfc.com  page3.comsunbingo.co.uk talksport.comthescottishsun.co.uk thesun.co.uk  thesun.ie -* -WIWIDE wamawama.com -wiwide.com - -GFYCAT -gfycat.com - - -JINRISHICIjinrishici.com - -SLASHDOT slashdot.org - - ZOOMINGIN zoomingin.tv - -CAOLIU t66y.com -z -CERNcern ams02.space cern.ch cixp.netdotcernpilot.info  ippog.orglinearcollider.org -9 -DOUBAN -douban.com  douban.fm doubanio.com -x -FASTLY -fastly.com -fastly.netfastlylabs.com fastlylb.netfastly-terrarium.com -zencdn.net -; -XUEERSI speiyou.com -xesimg.com xueersi.com -H -BLENDERbigbuckbunny.org blender.orgelephantsdream.org -8 - HOMEDEPOThomedepot-static.com homedepot.com - -IQIYI 71.am  iqiyi.com iqiyipic.com -pps.tv -ppsimg.com qiyi.com qiyipic.com -qy.net -71edge.coma.ckm.iqiyi.com -adsad.m.iqiyi.com -ads afp.iqiyi.com -adsc.uaa.iqiyi.com -ads cloudpush.iqiyi.com -ads"cm.passport.iqiyi.com -adscupid.iqiyi.com -ads#emoticon.sns.iqiyi.com -ads!gamecenter.iqiyi.com -ads!hotchat-im.iqiyi.com -adsifacelog.iqiyi.com -adsmbdlog.iqiyi.com -ads msg.71.am -adsmsg.video.qiyi.com -ads msg2.video.qiyi.com -ads#policy.video.iqiyi.com -adsyuedu.iqiyi.com -ads - -STEEMIT steemit.com -P -AEROGARDaerogard.com.auaerogard.com.cn -cnaerogardcn.com -/ - JIBENCAOZUO jbcz.tvjibencaozuo.com -6 -75TEAM 75.team -75team.com baomitu.com -) - ADCOLONY-ADS adcolony.com -ads - -RFA rfa.org -/ - SNAPCRAFT snapcraft.io snapstore.io -' -APA apa.orgpsyccareers.com - -IBMibmweatherchannel weatherappdomain.cloud bluemix.com bluemix.net ibm.com -ibm.eu ibm.net -ibm.us s-bluemix.net s81c.com -M - MESSENGERfbmessenger.comm.me messenger.com -nbabot.net -0 -SOHU sohu.com -sohucs.com -itc.cn - -BITCOIN bitcoin.org -+ -COWLEVEL cowlevel.net  cdncl.net - -IINA iina.io -= -SIGNAL -signal.art -signal.orgsignalusers.org -) -LINGUEE linguee.com  deepl.com -3 - -STREAMABLE embed-cdn.comstreamable.com -< -ANACONDA anaconda.com anaconda.org conda.io - -DUREXdewitwithdurex.com dotherex.com durex-shop.chdurex-shopline.comdurex-slovenia.si durex.at durex.be durex.cl durex.co.id durex.co.il durex.co.nz durex.co.th durex.co.uk durex.co.za  durex.com durex.com.au durex.com.bd durex.com.cn -cn durex.com.co durex.com.hr durex.com.my durex.com.ng durex.com.pe durex.com.ph durex.com.pk durex.com.sg durex.com.tr durex.cz durex.de durex.dk durex.ee durex.es durex.fi durex.fr durex.hu durex.ie durex.it durex.jp durex.lv durex.mx durex.nl durex.no durex.pl durex.pt durex.ro durex.ru durex.se durex.us durexcam.comdurexcanada.comdurexchina.comdurexchina.com.cn -cndurexindia.comdurexloveclub.comdurexukraine.com durexusa.comlovesexdurex.cn -cnlovesexdurex.complaybydurex.com shopdurex.com trydurex.net trydurex.tv -1 -GODADDY godaddy.comx.co godaddy -O -GUO  guo.media  gnews.org gtv.org gtv1.org g-tvapp.com - -BRAVEUXbraventures.com braveux.com -compass.isfightforux.comforthebadge.comstockagainstphotography.com -s -SINOPECsinopec-usa.com sinopec.comsinopecgroup.comsinopecnews.com.cnsinopecsales.com - -UNPKG  unpkg.com -0 -N3RO n3ro.lol n3ro.net n3ro.wtf - -STUNNEL stunnel.org - -UMENG mobmore.com  umeng.comumengcloud.com  umsns.com umtrack.com -uyunad.comwhalecloud.comalog.umeng.com -ads alog.umengcloud.com -ads -w.cnzz.com -ads - -WHATSAPP wa.mewhatsapp-plus.infowhatsapp-plus.mewhatsapp-plus.net whatsapp.cc whatsapp.com whatsapp.info whatsapp.net whatsapp.org whatsapp.tvwhatsappbrand.com - -ATOM atom.io -J -HUPUhoopchina.com.cn hupu.com hupucdn.com  shihuo.cn -z -LINE -lin.ee line.me line.naver.jp line-apps.com line-cdn.net line-scdn.net -nhncorp.jp - - -POSTGRESQLpostgresql.org -* -JAVBUS -javbus.com javbus22.com -* -SCIENTIFICLINUXscientificlinux.org -\ -CATEGORY-GAMES blizzard.cn -cn blizzard.comblizzardgearstore.comblz-contentstack.com blzstatic.cn -cn -battle.netbattlenet.com.cn -cn bnet.163.com -cnblizzard.nefficient.co.krblzddist1-a.akamaihd.netblzddistkr1-a.akamaihd.netbnetcmsus-a.akamaihd.netbnetproduct-a.akamaihd.netbnetshopus.akamaized.net diablo3.comdiabloimmortal.comdi.res.netease.com -cn!diablo3.nosdn.127.net -cnfiresidegatherings.complayhearthstone.com%hearthstone.nosdn.127.net -cnheroesofthestorm.com%hearthstone.nosdn.127.net -cn"heroes.nos.netease.com -cnplayoverwatch.com#overwatch.nosdn.127.net -cn starcraft.comstarcraft2.comsc2.nosdn.127.net -cnplaywarcraft3.comworldofwarcraft.com wowchina.com -cnwow.nosdn.127.net -cnblizzcon-a.akamaihd.netblz.nosdn.127.net -cnblzmedia-a.akamaihd.netblznav.akamaized.net dawngate.com eastore.comlordofultima.com -origin.com  origin.tv#cloudsync-prod.s3.amazonaws.comorigin-a.akamaihd.netrtm.tnt-ea.comssl-lvlt.cdn.ea.comawayoutgame.combattlefieldbadcompany2.combattlefront2.combattlefrontii.combejewled-stars.combejeweledstars.comcapitalgames.com chillingo.comcommandandconquer.comconquerwithcharacter.com  crysis.jp dawngate.comdawngatechronicles.com -dicela.com -dicela.netea-anz-press.com -ea.com eaaccess.comeacashcard.com eacodigos.com eakorea.co.kr eamobile.com eanordic.com -eaplay.com easports.com easports.jpeasportsactive.comeasportsactiveonline.comeasportsfootball.comeasportsfootballclub.comeasportsmma.comeasportsworld.comelectronicarts.comelectronicarts.fr futpromos.com futunited.comghostgames.comheroesofdragonage.com hutpromos.commaddenchampionship.commaddenrewards.commaddenseason.infomaddenseason.netmaddenseason.org  maxis.commysimsracing.com play4free.com playapex.com pogo.com pogobeta.com -popcap.comprojectapex.com pvzheroes.com spearhead.krspeedhunters.com  spore.com ssx3.comstarwarsbattlefront.comstarwarsbattlefront2.comtiberiumalliances.com tiburon.com -tnt-ea.comultimaforever.com unravel2.comunraveltwo.comvisceralgames.com -yogify.comanthemgame.comanthemthegame.comapexlegends.comprojectapex.combattlefield.combattlefield1943.combattlefield3.combattlefield4.combattlefield5.combattlefieldheroes.combattlefieldv.com battlelog.com bioware.combiowarestore.com eamythic.com eamythic.net cncrivals.comcommandandconquer.comtiberiumalliances.comcamelot-europe.comcamelotherald.comcamelotherald.net daoc.netdarkageofcamelot.comdarkness-risen.comdeadspacegame.com dice.se dragonage.comdragonagekeep.comdragonagemovie.comthedreadwolfrises.comdungeonkeeper.cndungeonkeeper.comdungeonkeeper.com.cneafootballworld.comfifastreet.comfifastreet3.com frostbite.comindustrialtoys.commasseffect.commasseffectarchives.comeamirrorsedge.commirrorsedge.commirrorsedge.jpmirrorsedge.netmirrorsedge2.commirrorsedge2d.comblackboxgames.comeablackbox.comneedforspeed.comneedforspeedboost.comneedforspeeddriftkings.comneedforspeedeliminator.comneedforspeedlightning.comneedforspeedoverdrive.comneedforspeedproven.comneedforspeedredline.comneedforspeedshowdown.comneedforspeedstreetkings.comneedforspeedtakedown.comneedforspeedtherun.comneedforspeedtimeattack.com#needforspeedundergroundeast.com nfsworld.comteamneedforspeed.complantsvszombies2.com -pvzgw2.com pvzheroes.comseaofsolitude.comsimcity-buildit.com simcity.com -skate2.com spearhead.krstarwarsfallenorder.comstarwarsjedifallenorder.comstarwarstheoldrepublic.comswjedifallenorder.com  swjfo.com  swtor.com  swtor.net -mysims.com thesims.com thesims3.com thesims4.comthesimssocial.com titanfall.commythicentertainment.commythicentertainment.netmythicgames.comultimaonline.com -uo.com uoherald.com xdsummit.comea.tt.omtrdc.neteaassets-a.akamaihd.netbattlebreakers.com eac-cdn.com easy.aceasyanticheat.net epicgames.com fortnite.com paragon.complayparagon.comroborecall.comshadowcomplex.com spyjinx.comunrealengine.comunrealtournament.com6*^cdn\d-epicgames-\d+\.file\.myqcloud\.com$ -cn*&^epicgames-download\d\.akamaized\.net$;/^epicgames-download\d-\d+\.file\.myqcloud\.com$ -cn"avatargarenanow-a.akamaihd.netcdngarenanow-a.akamaihd.netdlgarenanow-a.akamaihd.net!dlmobilegarena-a.akamaihd.net garena.co.id garena.co.th -garena.com garena.live  garena.my  garena.ph  garena.sg  garena.tv  garena.tw  garena.vn garenanow.com seagroup.com gog.comgog-statics.comgog.qtlglb.com -cn$gogalaxy.gog-statics.com -cn'menu-static.gog-statics.com -cn'productcard.gog-statics.com -cn(static-login.gog-statics.com -cn'www4-static.gog-statics.com -cn, ^images(-\d)?\.gog-statics\.com$ -cn100classicbooks.com -amiibo.comayudanintendo.combowsersinsidestory.comexcitebots.comflipnotestudio.comgloryofheracles.comhackyourconsole.comkirbysuperstarultra.comkirbysepicyarn.comlegendofzelda.cn -cn legendofzelda.com.cn -cn miitomo.commiitomo.com.cn -cn miiverse.com nentindo.netnintendo-europe-sales.comnintendo-europe.com nintendo.at nintendo.be nintendo.chnintendo.co.jpnintendo.co.krnintendo.co.uknintendo.co.za nintendo.comnintendo.com.hknintendo.com.pt nintendo.de nintendo.dk nintendo.es nintendo.eu nintendo.fi nintendo.fr nintendo.it nintendo.net nintendo.nl nintendo.no nintendo.pt nintendo.ru nintendo.se nintendo.twnintendo3ds.comnintendodsi.comnintendoeurope.comnintendolabo.cn -cnnintendonetwork.netnintendonyc.comnintendostore.comnintendoswitch.comnintendoswitch.netnintendoswitchtogether.compersonaltrainermath.complaynintendo.comsupersmashbros.cn -cn!supersmashbros.com.cn -cnthelegendarystarfy.comthewonderful101.comwariolandshakeit.comwariowarediy.comyoshisnewisland.comac-pocketcamp.comdiddykongracing.com dkr.com donkeykongcountryreturns.comfire-emblem-heroes.comfireemblemawakening.com -dialga.com giratina.com -kyurem.com pokedex3d.compokemon-moon.compokemon-sun.compokemon-sunmoon.com pokemon.compokemonbank.compokemonblackwhite.com pokemonbw.compokemonchampionships.compokemongoldsilver.compokemonhome.compokemonletsgoeevee.compokemonletsgopikachu.compokemonmysterydungeon.compokemonpicross.compokemonplatinum.compokemonrubysapphire.compokemonsunmoon.compokemonswordshield.compokemonultrasunmoon.compokemonvgc.compokemonwifi.net xn--mts47c3w9b1qr.cn -cnxn--mts47c3w9b1qr.netsplatoon2tournament.com starfox.comdrmario-world.commarioandluigidreamteam.commariobroswii.com mariokart.cn -cnmariokart.com.cn -cnmariokart7.commariokart8.commariosupersluggers.comnewsupermariobrosu.comsupermario.comsupermario3dworld.com!supermariobros.com.cn -cnsupermariogalaxy.comsupermariorun.comsuperpapermario.comnintendowii.com  wii-u.com -wiifit.com wiifitu.com wiipartyu.com wiisports.comwiisportsresort.comwiiugamepad.com  wiivc.net xenoblade.com op.ggopgg-static.akamaized.net playstationplaystation.complaystation.net sonyentertainmentnetwork.com"api-priconne-redive.cygames.jpomotenashi.cygames.jp%!prd-priconne-redive.akamaized.nethistoryofdota.comhistoryofdota.nethistoryofdota.orginstituteofwar.orgmolesports.com rgpub.ioriot-games.com riot.com riot.net riotcdn.netriotgames.co.kr riotgames.comriotgames.info riotgames.jp riotgames.net riotgames.tv riotpin.comriotpoints.com rstatic.net supremacy.com supremacy.net championshipseriesleague.com lcsmerch.comleaguehighschool.comleagueoflegends.caleagueoflegends.cn -cnleagueoflegends.co.krleagueoflegends.comleagueoflegends.infoleagueoflegends.krleagueoflegends.netleagueoflegends.orgleagueoflegendsscripts.comleaguesharp.infoleaguoflegends.comlearnwithleague.comlol-europe.com lolclub.org lolespor.comlolesports.com lolfanart.net -lolpcs.com lolshop.co.kr lolstatic.comlolusercontent.com -lpl.com.cn -cn pvp.net -pvp.tv ulol.comlolstatic-a.akamaihd.netplayvalorant.comriotforgegames.comruinedking.comconvrgencegame.comrockstargames.com -rsg.sc1-gamedownloads-rockstargames-com.akamaized.net)%media-rockstargames-com.akamaized.net*&videos-rockstargames-com.akamaized.net fanatical.comhumblebundle.complayartifact.com -s.teamsteam-chat.comsteamcommunity.comsteamcontent.comsteamgames.comsteampowered.comsteamstatic.comsteamusercontent.comunderlords.comvalvesoftware.com wmsjsteam.com -cn csgo.wmsj.cn -cndl.steam.ksyna.com -cn dota2.wmsj.cn -cn st.dl.bscstorage.net -cnst.dl.eccdnx.com -cn!st.dl.pinyuncloud.com -cn&steampowered.com.8686c.com -cn%steamstatic.com.8686c.com -cn steambroadcast.akamaized.netsteamcdn-a.akamaihd.net!steamcommunity-a.akamaihd.netsteamstore-a.akamaihd.net#steamusercontent-a.akamaihd.net"steamuserimages-a.akamaihd.netsteamunlocked.net ubi.com ubisoft.com  uplay.com,(ubisoft-uplay-savegames.s3.amazonaws.com,(ubisoft-orbit-savegames.s3.amazonaws.com)uplaypc-s-ubisoft.cdn.ubi.com -cn -beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com -mojang.comforzamotorsport.netforzaracingchampionship.com forzarc.comorithegame.comrenovacionxboxlive.comtellmewhygame.com xbox.co xbox.com xbox.eu xbox.org -xbox360.co xbox360.com -xbox360.eu xbox360.org -xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn -cn xboxlive.com -xboxone.co xboxone.com -xboxone.euxboxplayanywhere.comxboxstudios.com -xbx.lv -+ -GUARDIANPROJECTguardianproject.info - - -HONGKONGFPhongkongfp.com - -HUAWEI  dbank.com dbankcdn.com harmonyos.com hicloud.com hihonor.com honor.cn -huawei.comhuaweicloud.com  vmall.com vmallres.com -, -ACPLAY -acplay.netdandanplay.com - -CNPMJS -cnpmjs.org -8 -TARGET -target -target.comtargetimg1.com -5 -YOUJIZZ youjizz.comyjcontentdelivery.com - -YYETS cvnad.com -ads -iyoowi.com -ads -got001.com -got002.com jstucdn.com playcvn.com rrys.tv rrys2019.com rrys2020.com rrysapp.com  yyets.com -zimuzu.com  zimuzu.tv zmz2019.com -zmzapi.com - - -FONTSINUSEfontsinuse.com - -MINGW  mingw.org -+ - TAPPX-ADSssp.api.tappx.com -ads -/ - -THEINITIUMtheinitium.com  init.shop - -ALIYUNalibabadns.com -alicdn.com alidayu.com -alidns.com alikunlun.comaliyun-inc.comaliyun-iot-share.com -aliyun.com aliyuncdn.com aliyuncs.com hichina.comica-alliance.org kunlunaq.com kunlunar.com kunlunca.com kunluncan.com kunlunea.com kunlungem.com kunlungr.com kunlunhuf.com kunlunle.com kunlunli.com kunlunno.com kunlunpi.com kunlunra.com kunlunsa.com kunlunsc.com kunlunsl.com kunlunso.com kunlunta.com kunlunvi.com kunlunwe.com mxhichina.com - -WEBTYPE webtype.com -+ -VAPTCHA vaptcha.com vaptcha.net -] -BUYPASSbuypass-ssl.com buypass.com -buypass.no -buypass.se minid.no -+ -FLATPAK flathub.org flatpak.org - -QUALCOMMairgonetworks.comberkanawireless.comdragoniscoming.comgobianywhere.comhellosmartbook.com imod.comipleadership.org -iskoot.commeetsmartbook.compatenttruth.org pixtronix.comqctconnect.com -qprize.comqualcomm-email.com qualcomm.cnqualcomm.co.idqualcomm.co.inqualcomm.co.jpqualcomm.co.krqualcomm.co.uk qualcomm.comqualcomm.com.brqualcomm.com.tw qualcomm.de qualcomm.frqualcommhalo.comqualcommlabs.comqualcommmea.comqualcommretail.comqualcommventures.cnqualcommventures.com qualphone.com quicinc.com snapdragon.cnsnapdragonbooth.com -uplinq.com wipower.comwirelessreach.com -brewmp.comqualcomm.sc.omtrdc.net -+ -TYPEKIT typekit.com typekit.net -{ - CLARIVATEnewisiknowledge.comisiknowledge.com clarivate.comwebofknowledge.comwebofscience.com - -TOR onion - -HQPORNER hqporner.com - -MSNmicrosoftnews.ccmicrosoftnews.cn -cnmicrosoftnews.commicrosoftnews.netmicrosoftnews.orgmicrosoftnewsforkids.commicrosoftnewsforkids.netmicrosoftnewsforkids.orgmicrosoftnewskids.commicrosoftnewskids.netmicrosoftnewskids.org msn.commsnewskids.commsnewskids.netmsnewskids.org msnkids.com - - SPANKBANG spankbang.com - -VOANEWSamerikaninsesi.comamerikaninsesi.orgamerikaovozi.comamerikayidzayn.comamerikiskhma.com bbg.govdandalinvoa.com darivoa.comdengeamerika.comdengiamerika.comglasamerike.netgolos-ameriki.rugolosameriki.com insidevoa.com pashtovoa.com persagg.comradiyoyacuvoa.com urduvoa.com voa.govvoaafaanoromoo.comvoaafrique.comvoabambara.com voabangla.comvoacambodia.comvoacantonese.comvoachinese.comvoadeewanews.comvoadeewaradio.com voahausa.comvoaindonesia.com voakorea.comvoalingala.comvoandebele.com voanews.com -voanews.euvoanoticias.com voanouvel.comvoaportugues.com voashona.com voasomali.comvoaswahili.com voathai.comvoatibetan.comvoatibetanenglish.comvoatiengviet.com voatour.comvoazimbabwe.comzeriamerikes.com - -WESTERNDIGITALg-technology.com -sandisk.ae -sandisk.it -sandisk.cn -cn sandisk.co.jp sandisk.co.kr sandisk.co.uk sandisk.comsandisk.com.ausandisk.com.brsandisk.com.trsandisk.com.tw -sandisk.de -sandisk.es -sandisk.fr -sandisk.hk -sandisk.id -sandisk.in -sandisk.nl -sandisk.sg -wd.com wdc.comwesterndigital.com -* -TELEKOM telekom.com -telekom.de -" - TYPENETWORKtypenetwork.com - -LYSOL lizol.co.in lysol.ca lysol.cllysol.cn -cn lysol.co.cr  lysol.com lysol.com.cn -cn lysol.com.mx  lysol.net - -MUCINEX -mucinex.ca -mucinex.cn mucinex.co.nz mucinex.commucinex.com.cn mucinex.net -mucinex.tvmucinexprofessional.com - -OPPO coloros.com finzfin.com -heytap.com heytapcs.comheytapdownload.comheytapimage.com -myoppo.com nearme.com.cn oppo.cn oppo.com  oppo.mobioppodigital.com  oppoer.meoppomobile.com oppopay.com opposhop.cn -realme.com realmebbs.comrealmemobile.com -$ -SCMP scmp.com -i-scmp.com -8 -DMM dmm.com  dmm.co.jpdmm-extension.com - -ERJI erji.net -= - JAVFINDER javfinder.sh findercdn.me o0-2.com - -WOOLITE -woolite.ca -woolite.cn -cn woolite.comwoolite.com.cn -cn -woolite.pl -woolite.uswoolitecarpet.com - -DGTLE  dgtle.com -4 -PERL perl.org cpan.org metacpan.org - -XBOX -beth.games bethesda.netbethesdagamestudios.com bethsoft.com doom.comelderscrolls.comcallersbane.com minecraft.netminecraftshop.com -mojang.comforzamotorsport.netforzaracingchampionship.com forzarc.comorithegame.comrenovacionxboxlive.comtellmewhygame.com xbox.co xbox.com xbox.eu xbox.org -xbox360.co xbox360.com -xbox360.eu xbox360.org -xboxab.comxboxgamepass.comxboxgamestudios.com xboxlive.cn -cn xboxlive.com -xboxone.co xboxone.com -xboxone.euxboxplayanywhere.comxboxstudios.com -xbx.lv - -CATEGORY-MOOC-CNchinesemooc.org -cnmooc.orgicourse163.org icourses.cn mooc.cnopenlearning.com pmphmooc.commoocs.unipus.cnopencourse.pku.edu.cn study.163.com - -FIGMA  figma.com -5 -V2RAY  v2ray.com -v2ray.cool  v2fly.org - -VILAVPN vilavpn.com vilavpn.xyz vilavpn1.xyz vilavpn2.xyz vilavpn3.xyz vilavpn4.xyz vilavpn5.xyz vilavpn6.xyz vilavpn7.xyz - -AMYTELE amytele.com - -GNU gnu.org - -HINET  hinet.net - -KINGSOFT cmcm.com cmcmcdn.com  liebao.cn duba.com duba.net ijinshan.comseasungames.com xishanju.com xoyo.com testplus.cn -wps.cn  51dzt.com  iciba.com  docer.com kdocs.cn papocket.com  wpspdf.cn kimg.cn kingsoft.com ksmobile.com -ks-cdn.com  ksyun.com ksyungslb.com - -LUA lua.org - -OPENSSL openssl.org -" - SUBLIMETEXTsublimetext.com -% -36KR 36kr.com 36krcdn.com -. - -AMAZON-ADS amazon-adsystem.com -ads - -CATEGORY-ANTICENSORSHIP ahmia.fi akasha.worldbrowserleaks.combypasscensorship.org citizenlab.cacitizenlab.orgdat.foundationdemocracy.earth eff.orgepicbrowser.com ffprofile.comfreenetproject.org fteproxy.org  gfw.press -gfw.reportapplecensorship.comfreebrowser.orgfreewechat.com freeweibo.com greatfire.orgguardianproject.infohaveibeenpwned.compwnedpasswords.com -geti2p.net ipfs.io  jitsi.orggetlantern.org -lantern.io  ntc.partyonionshare.org ooni.org openvpn.netprivacytools.io psiphon3.comshadowsocks.org softether.orgsoftether-download.com stunnel.org telex.cctorproject.org tribler.org tunsafe.comtwister.net.co -uproxy.org  v2ray.com -v2ray.cool  v2fly.org vuvuzela.io -whonix.org wikileaks.org wireguard.com -zeronet.io -% -FONTS  fonts.com  fonts.net -$ - THESTANDNEWSthestandnews.com - -UDACITY udacity.com - - ZHIHUISHU zhihuishu.com -+ - -KUBERNETES kubernetes.io -k8s.io -g -SPRINGER -apress.com springer.comspringerlink.comspringernature.com wkap.nl - -ELSEVIER els-cdn.comelsevier-ae.com elsevier.com elsevier.ioengineeringvillage.com  evise.com -scopus.com - -SETAPP -setapp.com - -VERISIGN verisign.asia verisign.biz verisign.chverisign.co.inverisign.co.uk verisign.comverisign.com.auverisign.com.brverisign.com.cnverisign.com.esverisign.com.hkverisign.com.sgverisign.com.twverisign.com.vn verisign.de verisign.dk verisign.es verisign.fr verisign.hk verisign.in verisign.info verisign.jobs verisign.mobi verisign.name verisign.net verisign.org verisign.pro verisign.se verisign.sg verisign.tw verisign.us verisign.vnverisigninc.com - -VERIZON -flickr -flickr.com -flickr.netstaticflickr.com ads.yahoo.com -adsgemini.yahoo.com -ads ysm.yahoo.com -ads yahoo yahoo.ae yahoo.am yahoo.as yahoo.at yahoo.az yahoo.ba yahoo.be yahoo.bg yahoo.bi yahoo.bs yahoo.bt yahoo.by yahoo.ca  yahoo.cat yahoo.cd yahoo.cg yahoo.ch yahoo.cl yahoo.cmyahoo.cn -cn yahoo.co.ao yahoo.co.bw yahoo.co.ck yahoo.co.cr yahoo.co.id yahoo.co.il yahoo.co.in yahoo.co.jp yahoo.co.kr yahoo.co.mz yahoo.co.nz yahoo.co.th yahoo.co.tz yahoo.co.uk yahoo.co.uz yahoo.co.ve yahoo.co.vi yahoo.co.za  yahoo.com yahoo.com.af yahoo.com.ag yahoo.com.ai yahoo.com.ar yahoo.com.au yahoo.com.bd yahoo.com.bo yahoo.com.br yahoo.com.bz yahoo.com.cn -cn yahoo.com.co yahoo.com.do yahoo.com.ec yahoo.com.eg yahoo.com.es yahoo.com.fj yahoo.com.gi yahoo.com.gt yahoo.com.hk yahoo.com.kw yahoo.com.lb yahoo.com.ly yahoo.com.mt yahoo.com.mx yahoo.com.my yahoo.com.na yahoo.com.nf yahoo.com.om yahoo.com.pa yahoo.com.pe yahoo.com.ph yahoo.com.pk yahoo.com.pr yahoo.com.py yahoo.com.sa yahoo.com.sb yahoo.com.sg yahoo.com.sv yahoo.com.tj yahoo.com.tr yahoo.com.tw yahoo.com.ua yahoo.com.uy yahoo.com.vc yahoo.com.vn yahoo.cz yahoo.de yahoo.dj yahoo.dk yahoo.dm yahoo.ee yahoo.es yahoo.fi yahoo.fm yahoo.fr yahoo.ge yahoo.gg yahoo.gl yahoo.gm yahoo.gp yahoo.gr yahoo.gy yahoo.hk yahoo.hr yahoo.hu yahoo.ie yahoo.im yahoo.in yahoo.is yahoo.it yahoo.je yahoo.jo yahoo.la yahoo.lt yahoo.lu yahoo.lv yahoo.md yahoo.me yahoo.mk yahoo.mw yahoo.mx  yahoo.net yahoo.nl yahoo.no yahoo.nu yahoo.ph yahoo.pl yahoo.pn yahoo.ps yahoo.pt yahoo.ro yahoo.ru yahoo.rw yahoo.se yahoo.sg yahoo.sh yahoo.si yahoo.sk yahoo.sm yahoo.sn yahoo.so yahoo.sr yahoo.st yahoo.tg yahoo.tk yahoo.tl yahoo.tm yahoo.tn yahoo.vg yahoo.ws maktoob.com -myguide.hkyahoo-news.com.hk yahooapis.com yahoodns.netyahoofinance.comyahoohealth.comyahoomusic.comyahoosportsbook.com yho.com yimg.com yimg.jp  ymail.com -oath.cloud oath.com ouroath.comstatic-verizon.com verizon.com verizon.netverizonbusinessfios.comverizonenterprise.comverizonfios.comverizonmedia.comverizonwireless.com vzw.com -xo.com - -ZHANQI  zhanqi.tv - -PATREON patreon.com - -RTINGS -rtings.com - - TEST-IPV6 test-ipv6.com -( -WASHINGTONPOSTwashingtonpost.com -B -MITmit mit.edu mit.netmitpressjournals.org - - BYTEDANCE  juejin.cn  juejin.im xitu.iop1-juejin.byteimg.comp2-juejin.byteimg.comp3-juejin.byteimg.comp4-juejin.byteimg.comp5-juejin.byteimg.comp6-juejin.byteimg.comp7-juejin.byteimg.comp8-juejin.byteimg.comp9-juejin.byteimg.com -bytecdn.cn bytedance.com bytedance.net bytedns.net byteimg.combyteoversea.com -douyin.com huaxiong.com ibytedtos.comjokecommunity.comneihanshequ.com -pstatp.com -snssdk.com toutiao.comtoutiaocdn.comtoutiaocloud.comtoutiaocloud.nettoutiaohao.comtoutiaohao.net toutiaoimg.cntoutiaoimg.comtoutiaoimg.nettoutiaopage.com -wukong.comwukongwenda.cnwukongwenda.com zijiecdn.com zijiecdn.net  zjcdn.com  baike.com -ixigua.comixiguavideo.com ixgvideo.com  365yg.com - -ELIXIRelixir-lang.org - -QIHOO360 75.team -75team.com baomitu.com -360.cn 360.com -360-jr.com 360chou.com360daikuan.com360huzhubao.com -360jie.com360jinrong.net -360kan.com 360kuai.com  360os.com 360panyun.cn 360safe.com 360shouji.com 360taojin.com360totalsecurity.com 360tpcdn.com360webcache.com anquanke.com  haoso.com -haosou.com haosou.com.cn -haosou.net i360mall.com ludashi.com nicaifu.com  nzwgs.com  qhimg.com qhimgs0.com qhimgs1.com qhimgs2.com qhimgs3.com qhimgs4.com qhimgs5.com qhimgs6.com  qhmsg.com  qhres.com qhstatic.com qhupdate.com -qihuapi.cn qihucdn.com  qihoo.com qikucdn.com -so.com sou.com urlqh.cnxiaoluyouxuan.comxiaoluzhidian.com xjietiao.com -youhua.com  yunpan.cn -Q - SOURCEFORGEsourceforge.comsourceforge.net -sf.net fsdn.com -. -JIEMIAN jiemian.comjiemian.com.cn - -MZED mzed.com - - TENCENT-ADS ad.qq.com -ads ad.qun.qq.com -ads!adfilter.imtt.qq.com -ads adping.qq.com -adsadpm.app.qq.com -adsadsclick.qq.com -adsadsfile.qq.com -adsadshmmsg.qq.com -adsadslvfile.qq.com -adsadslvseed.qq.com -ads%adsmind.apdcdn.tc.qq.com -adsadsqqclick.qq.com -adsadstestview.qq.com -adsadsview.qq.com -adsadsview2.qq.com -adsadv.app.qq.com -ads adver.qq.com -ads btrace.qq.com -adse.qq.com -adslog.tbs.qq.com -ads mpush.qq.com -ads mtrace.qq.com -ads push.qq.com -ads pgdt.gtimg.cn -ads - -VISA visa.be visa.ca visa.clvisa.cn -cn -visa.co.ao -visa.co.cr -visa.co.id -visa.co.il -visa.co.in -visa.co.jp -visa.co.ke -visa.co.ni -visa.co.nz -visa.co.th -visa.co.uk -visa.co.ve -visa.co.za visa.com visa.com.ag visa.com.ai visa.com.ar visa.com.au visa.com.az visa.com.bo visa.com.br visa.com.bs visa.com.bz visa.com.cn -cn visa.com.co visa.com.cy visa.com.dm visa.com.do visa.com.ec visa.com.ge visa.com.gt visa.com.gy visa.com.hk visa.com.hn visa.com.hr visa.com.jm visa.com.kh visa.com.kn visa.com.kz visa.com.lc visa.com.lk visa.com.ms visa.com.mx visa.com.my visa.com.ng visa.com.pa visa.com.pe visa.com.ph visa.com.pr visa.com.py visa.com.ru visa.com.sg visa.com.sv visa.com.tr visa.com.tt visa.com.tw visa.com.ua visa.com.uy visa.com.vc visa.com.vi visa.com.vn visa.cz visa.de visa.dk visa.es visa.fi visa.fr visa.gd visa.gp visa.gr visa.hk visa.hu visa.ie visa.is visa.ky visa.lt visa.lv visa.mn visa.mq visa.nl visa.no visa.pl visa.pt visa.ro visa.se visa.sk visa.so visa.sx visa.tc -visabg.com visaeurope.at visaeurope.ch visaeurope.lu visaeurope.sivisaitalia.com visakorea.comvisamiddleeast.comvisasoutheasteurope.comfinlitsummit.orgmyvisaluxuryhotels.comvisainfinite.cavisainfiniteluxuryhotels.ca!visaluxuryhotelcollection.com$ visaluxuryhotelcollection.com.br$ visaluxuryhotelcollection.com.mxvisaluxuryhotels.comvisaluxuryhotels.com.arvisasignaturehotels.com($connaissancesfinancierespratiques.ca dnsvisa.comeubluecardvisa.comfinancialsoccer.ca"financialsoccer.com.cn -cnlightbridge.commiamifintechfestival.commhshosting.compracticalbusinessskills.compracticalmoneyskills.ca#practicalmoneyskills.cn -cn'practicalmoneyskills.com.cn -cnpracticalmoneyskills.jpsoccerfinancier.catorcidadeouro.com vaultify.com vaultify.info vaultify.net visa-atm.com visa-news.jp visabank.orgvisabusinessinsights.comvisacarddesignlab.com visacards.comvisacheckout.netvisacheckout.orgvisaconciergelac.comvisadigital.comvisadigitalconcierge.com visadns.comvisadpsonline.usvisaeverywhereshop.comvisafintechfasttrack.comvisafulfillment.comvisagiftcard.usvisaglobalfinance.comvisaicsdirect.comvisainfinite.cavisainfinite.cn -cn visanet.net -visapay.cn -cnvisapcsdirect.comvisaplatinum.cn -cnvisaplatinum.com.cn -cn visaplus.comvisasavingsedge.cavisasignature.co.kr visb.org - - 4PARADIGM 4paradigm.com - -ABEMA abema.io abema.tv  adx.promo ameba.jp amebame.com amebaownd.comamebaowndme.com  ameblo.jp bucketeer.jpdokusho-ojikan.jp hayabusa.dev hayabusa.iohayabusa.media winticket.jpabematv.akamaized.net#ds-linear-abematv.akamaized.net - -BINGbing bing.com bing.com.cn -cn bing.net bingads.combingagencyawards.combingapistatistics.combingsandbox.combingvisualsearch.com bingworld.combluehatnights.com -dictate.msflipwithsurface.commasalladeloslimites.commicrosoft-give.commicrosoftcloudsummit.commicrosoftdiplomados.commicrosoftlatamholiday.commicrosoftmxfilantropia.com!microsoftpartnersolutions.commsunlimitedcloudsummit.comoffice365love.comoffice365tw.comrenovacionoffice.comsprinklesapp.com cn.bing.com -cn cn.bing.net -cn ditu.live.com -cnbj1.api.bing.com -cnemoi-cncdn.bing.com -cn - - -EVERBRIGHT cebbank.com ceblease.com -eb-ind.com ebasset.com ebchina.comebchinaintl.com -ebf.com.cn  ebfcn.com ebfortune.com ebtrust.com ebscn-am.com  ebscn.comeverbright.com  secec.comsunlife-everbright.com - - RPMFUSION rpmfusion.org - -STAGE1ST saraba1st.com -N -THETYPE thetype.cloud -cn thetype.comtypeisbeautiful.com -F -COINONE coinone.co.krcoinonecore.comcoinonecorp.com - -GOG gog.comgog-statics.comgog.qtlglb.com -cn$gogalaxy.gog-statics.com -cn'menu-static.gog-statics.com -cn'productcard.gog-statics.com -cn(static-login.gog-statics.com -cn'www4-static.gog-statics.com -cn, ^images(-\d)?\.gog-statics\.com$ -cn - -HP -123-hp.com123hplaserjet.com8008206616.com as-hp.cabaterias-hp.com campushp.comcolorprotechnology.com -compaq.orgdavid-laserscanner.com demoprint.comdigitalpack.com eprintsw.comgaming-notebooks.comgetprintersupports.comhp-imagine.comhp-infolab.com hp-invent.comhp-invent.info -hp-mns.comhp-printing.comhp-webplatform.com  hp-ww.com -hp.com -hp.company hp.io hp3d.comhp3dmetals.comhp3dprinter.comhp3dsamplepromo.comhpallinoneprinter.comhpapplicationscenter.com hpbestbuy.comhpbluecarpet.comhpbluecarpet.nethpbuiltforlearning.com hpbundle.com hpcampus.comhpcatridge.com  hpccp.com  hpceo.com  hpcmw.nethpcodewarsbcn.comhpcomputers.comhpcomputerservices.comhpconnected.comhpconnected.nethpconnected.orghpconnected.ushpconnectedstage.comhpcontinuum.com  hpcpi.com hpcu.orghpcustomersupport.comhpcustomersupport.net -hpdaas.comhpdesignjetl25500.comhpdesktopcomputer.comhpdownloadstore.comhpdreamcolor.com hpdriver.com hpdrivers.com hpdrivers.org hpeclipse.com hpengage.com hpeprint.comhpeprintcenter.com hpeurope.comhpeventcenter.com -hpfaqs.comhpfeedback.com -hpgift.com -hpgpas.comhpgraphicspartners.com  hpiie.org -hpinc.info  hpinc.nethpindigopress.com hpinkjet.comhpinstantink.cahpinstantink.comhpkeyboard.com hplaptop.comhplaptopbattery.comhplargeformatremote.comhplatexknowledgecenter.com hplfmedia.com  hplip.nethplipopensource.comhpmarketplace.comhpmemorychips.comhpmicrcartridge.com -hpmini.com hpmobile.comhpofficejetprinter.comhponlinehelp.comhponlineprinting.comhppage5000.comhppavillionlaptop.comhpphotoscanners.comhpprinterdrivers.comhpprinterinstalls.comhpprintersupplies.comhpsalescentral.com hpserver.comhpservices.comhpshooping.com -hpshop.com hpshoping.com hpshopping.hk hpsignage.com hpsmart.com hpsmarts.comhpsmartstage.comhpsmartupdate.comhpsoftware.com hpspeaker.comhpsprocket.com  hpsso.comhpstore-china.comhpstore-emea.com -hpstore.cn -cn hpstore.comhpstorethailand.com hpsupport.comhpsuresupply.comhptechventures.com hpto.net hptouch.comhptouchpointmanager.comhptrainingcenter.com  hpuae.comhpuniversity.infohpusertraining.com -hpveer.comhpvirtualthin.com hpwallart.comhpwellnesscentral.com  hpwsn.com i-123-hp.com inkchoice.cominstantink.comleavinghpinc.comlife-global.orgmyhpsupport.com printeron.comprintersetupsupport.comprintspots.comprintspots.netserviceshp.comthecompaqstore.comtouchsmartpc.comtouchsmartpc.nettouchsmartpc.orgworkstations.tv www8-hp.comxn--6eup7j.comxn--6eup7j.nethpstore.corpmerchandise.com -$ -INTEL -01.org hyperscan.iointellinuxgraphics.comintellinuxgraphics.net -oneapi.comopenvinotoolkit.orgsnap-telemetry.io -acpica.com clearlinux.cn -cnclearlinux.org -ospray.net -ospray.org intel intel.ac intel.ae intel.af intel.ag intel.ai intel.ar intel.at intel.az intel.ba intel.bg intel.bh intel.bi intel.bo intel.bs intel.by intel.ca intel.cc intel.cg intel.ch intel.cl intel.cmintel.cn -cn intel.co.ae intel.co.cr intel.co.id intel.co.il intel.co.jp intel.co.kr intel.co.uk intel.co.za  intel.com intel.com.ar intel.com.au intel.com.bo intel.com.br intel.com.cn -cn intel.com.co intel.com.ec intel.com.hk intel.com.jm intel.com.mx intel.com.my intel.com.pe intel.com.ph intel.com.pr intel.com.py intel.com.tr intel.com.tw intel.com.uy intel.com.ve intel.cr intel.cu intel.cz intel.de intel.dk intel.dz intel.ec intel.ee intel.eg intel.es intel.eu intel.fi intel.fr intel.ga intel.gd intel.ge intel.gl intel.gm intel.gr intel.gs intel.gt intel.gy intel.hk intel.hn intel.ht intel.hu intel.ie intel.in intel.io intel.it intel.je intel.jo intel.jp intel.ke intel.la intel.lc intel.lk intel.lt intel.lu intel.ly intel.ma intel.md intel.me intel.mg intel.mk intel.mn intel.mp intel.mt intel.mu intel.mw intel.mx intel.my intel.ng intel.nl intel.nu intel.nz intel.pa intel.pe intel.ph intel.pl intel.pn intel.re intel.ro intel.ru intel.rw intel.sa intel.sc intel.se intel.sg intel.si intel.sk intel.sn intel.sr intel.st intel.sv intel.sx intel.sy intel.tf intel.tj intel.tl intel.tm intel.tn intel.tt intel.tv intel.tw intel.ua intel.uk intel.us intel.uy intel.uz intel.vg intel.vn intel.vu intel.wf intel.yt -altera.comalteraforum.comalteraforums.comalteraforums.netalterauserforum.comalterauserforum.netalterauserforums.comalterauserforums.net buyaltera.com celeron.com celeron.net centrino.com centrino.net  chips.com cilk.com cilk.netcloudinsights.comclusterconnection.com coreduo.comcoreextreme.comcrosswalk-project.comcrosswalk-project.netdoceapower.com  easic.com enpirion.comexascale-tech.comexploreintel.comgordonmoore.cominsidefilms.com intc.comintel-research.net&"intel-university-collaboration.netintelamericasstore.comintelapacstore.com intelatom.netintelcapital.comintelcapital.netintelcloudbuilders.comintelcloudfinder.comintelemeastore.cominteleventexpress.comintelforchange.comintelfreepress.com intelgo.netintelinsight.cominteliotmarketplace.com -intell.comintellearningseries.comintellinuxwireless.netintelnervana.comintelnet.component intelplay.comintelquark.comintelrealsense.cn -cnintelrealsense.com intelrxt.comintelsalestraining.comintelsecurity.comintelserveredge.comintelsoftwarenetwork.comintelstore.cominteltechnologyprovider.com intelvmwarecybersecurity.com  itnel.comlatencytop.comlookinside.commakebettercode.commakesenseofdata.com movidius.com movidius.netnervanasys.com  nevex.comnextgenerationcenter.com -niosii.com -niosii.netomekinteractive.com -omnitek.tv openamt.comopendroneid.orgoptanedifference.com -pc.com pentium.com pentium.net pintool.compoweredbyintel.comreconinstruments.com reconjet.comresearchintel.comsaffrontech.comsensorynetworks.com -siport.comsmart-edge.comtheintelstore.comthunderbolttechnology.nettrustedanalytics.comtrustedanalytics.net -vokevr.com vpro.com vpro.net xeon.comxn--ztsq84g.cn -xscale.combarefootnetworks.com - -ADOBE typekit.com typekit.net10xfotolia.com 2o7.net acrobat.com adbecrsl.comadobe-aemassets-value.comadobe-audience-finder.com"adobe-video-partner-finder.com  adobe.com adobe.lyadobeaemcloud.comadobeaemcloud.netadobeawards.comadobecontent.ioadobecreativityawards.com adobedc.net adobedemo.com adobedtm.comadobeexchange.comadobeexperienceawards.com adobegov.comadobehiddentreasures.comadobejanus.com adobeku.comadobelanding.comadobelogin.com adobeoobe.comadobeplatinumclub.comadobeprojectm.com adobesc.com adobesign.comadobesigncdn.comadobespark.com adobess.comadobestock.com adobetag.comadobetarget.comadobetcstrialdvd.comadobetechcomm.comadobetechcommcallback.comadobetechcommdemo.comadobexdplatform.comassetsadobe.com authorxml.combusinesscatalyst.com ccnsite.com  ccpsx.com -demdex.netdollarfotoclub.comdollarphotoclub.comdollarphotosclub.comdouwriteright.com echocdn.com echosign.com edgefonts.netenablementadobe.com  ftcdn.net gostorego.comimagineecommerce.commacromedia.commagentoliveconference.commarketing-nirvana.com omniture.com -omtrdc.net photoshop.complacesdocs.comsundanceignite2016.comworldsecureemail.comworldsecuresystems.com adobe.iodevelopria.com behance.nets2stagehance.com adobecc.com adobecce.comadobeccstatic.comcreativecloud.comcreativesdk.com cotolia.com ffotolia.com fiotolia.com foftolia.com fonolia.com fotiolia.com fotoiia.comfotolia-noticias.com -fotolia.cc fotolia.com -fotolia.tv fotolja.com fptolia.com gfotolia.com motolia.com photolia.nettenbyfotolia.com votolia.combluefootcms.com mageconf.commageconf.com.ua magento.com magento.netmagentocommerce.commagentomobile.commarketing-cloud.com marketo.co.uk marketo.com marketo.net -marketo.tvmarketodesigner.commarketolive.com -mktdns.commkto-c0100.com mktorest.com mktroute.commobilemarketo.com&"revenue-performance-management.com toutapp.comcompresspdf.new pdf.new sign.new -" - FOUNDERTYPEfoundertype.com - -GEPH geph.io -( -REDIS redis.io redislabs.com -= -LANDIAN -lancdn.comlandiannews.com  wsoso.com - -SCOOP scoop.sh -. - POCKETCASTS -pca.stpocketcasts.com - -SINA-ADS 2016.sina.cn -adsad.sina.com.cn -adsadbox.sina.com.cn -ads!adimages.sina.com.hk -ads!adimg.mobile.sina.cn -ads adimg.uve.weibo.com -ads!adm.leju.sina.com.cn -ads ads.sina.com -adsalitui.weibo.com -adsapi.apps.sina.cn -ads appgift.sinaapp.com -ads#appsupdate.sinaapp.com -ads atm.sina.com -adsbeacon.sina.com.cn -ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com -ads%click.uve.mobile.sina.cn -ads click.uve.weibo.com -adscm.dmp.sina.cn -ads0#contentrecommend-out.mobile.sina.cn -ads$count.video.sina.com.cn -ads counter.sina.com.cn -adscre.dp.sina.cn -adscre-dp.sina.cn -adsd00.sina.com.cn -adsdcads.sina.com.cn -adsdl.kjava.sina.cn -ads dmp.sina.cn -adsdp.im.weibo.cn -ads game.weibo.cn -adsgame.weibo.com -ads"gw5.push.mcp.weibo.cn -ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn -ads"int.dpool.sina.com.cn -ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn -ads log.mix.sina.com.cn -ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn -ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn -adsnewspush.sinajs.cn -ads oascentral.sina.com -ads#oascentral.sina.com.hk -adsp4p.sina.com.cn -adspalmnews.sina.cn -adspay.mobile.sina.cn -adspfp.sina.com.cn -adspfpip.sina.com -ads!promote.biz.weibo.cn -ads r.dmp.sina.cn -adsrm.sina.com.cn -ads rs.sinajs.cn -adss.alitui.weibo.com -ads"s.img.mix.sina.com.cn -ads sapi.sina.cn -ads sax.sina.cn -adssax.sina.com.cn -adssaxn.sina.com.cn -adssaxs.sina.com.cn -ads sbeacon.sina.com.cn -ads"sdkapp.mobile.sina.cn -ads!sdkapp.uve.weibo.com -ads$sdkclick.mobile.sina.cn -ads slog.sina.cn -adsslog.sina.com.cn -ads'staticadm.leju.sina.com.cn -adstjs.sjs.sinajs.cn -ads"trends.mobile.sina.cn -ads"u1.img.mobile.sina.cn -ads&wapwbclick.mobile.sina.cn -ads!wbapp.mobile.sina.cn -ads wbapp.uve.weibo.com -ads#wbclick.mobile.sina.cn -ads$wbpctips.mobile.sina.cn -adswidget.weibo.com -ads woocall.sina.com.cn -adszc.biz.weibo.com -adszymo.mps.weibo.com -ads - - STCSERVERstc-server.com - -CEX -cex.io -N - CLOUDCONE clco.cc -cloudc.one cloudcone.com cloudcone.net -c - UMENG-ADSalog.umeng.com -ads alog.umengcloud.com -ads -w.cnzz.com -ads - -SSRPASS -ssrpass.pw -: -ZAOBAO -zaobao.com zaobao.com.sg  zaobao.sg - -ANTUTU -antutu.com - -OSDN osdn.net - -SHOPEE shopee.cn -cn shopee.co.id shopee.co.th -shopee.com shopee.com.br shopee.com.my  shopee.ph  shopee.sg  shopee.tw  shopee.vnshopeemobile.com shopeesz.com -cn -shp.ee - -SQLITE -sqlite.org -U - CLEARASIL clearasil.cn -cnclearasil.com.cn -cn clearasil.us - -PRESS  press.vin - -5CH 2ch.net 5ch.net -N -SEASUNseasungames.com xishanju.com xoyo.com testplus.cn - - SWISSSIGN digital-id.ch digitalid.chmanaged-pki.chmanaged-pki.de pki-post.ch pki-posta.ch pki-poste.chroot-signing.chrootsigning.comssl-certificate.ch -swissid.ch swissign.com swissign.liswisssign-group.chswisssign-group.comswisssign-group.li swisssign.ch swisssign.com swisssign.li swisssign.net swisssign.orgswisssigner.chswisssigner.comswisssigngroup.chswisssigngroup.comswissstick.com swisstsa.ch swisstsa.li trustdoc.ch trustsign.ch zert.ch - - WIKIMEDIA mediawiki.org wikibooks.org wikidata.orgwikimediafoundation.org wikimedia.org wikinews.org wikipedia.org wikiquote.orgwikisource.orgwikiversity.orgwikivoyage.orgwiktionary.orgwmfusercontent.org -w.wiki toolforge.orgwikimediacloud.org wmcloud.org wmflabs.org - -ARK -ark.to - -GOFUNDME gofundme.com -+ - SEGMENT-ADScdn.segment.com -ads - - - BLOOMBERG  bloomberg bbgevent.com bbhub.io -bbthat.com bgov.com bloomberg.cnbloomberg.co.jpbloomberg.co.kr bloomberg.combloomberg.com.br bloomberg.fm bloomberg.tvbloombergapps.combloombergarcade.combloombergbeta.combloombergbna.combloombergbreakaway.combloombergbriefs.combloombergchina.combloombergenvironment.combloombergforeducation.combloomberggovernment.combloombergindices.combloombergindustry.combloomberglabs.combloomberglaw.combloomberglive.combloomberglp.combloombergmedia.combloombergnext.combloombergpolarlake.combloombergprep.combloombergquint.combloombergradio.combloombergsef.combloombergspace.combloombergstatus.combloombergsurvey.combloombergtax.combloombergtax1.combloombergtaxtech.com!bloombergtradingchallenge.combloombergtv.mnbloombergvault.combloombergview.comblpcareers.com blpevents.comblpprofessional.com bmia.org bnef.combusinessweek.combusinessweekmag.com bwbx.io citylab.com gotraffic.netlondonmithraeum.comneweconomyforum.comnewenergyfinance.comquicktake.videotechatbloomberg.com tictoc.video -s -EHENTAI e-hentai.org ehgt.org ehtracker.org -ehwiki.org exhentai.orghentaiverse.org - -GUCCI guccichimeforchange.orggucci.cn -cn  gucci.comguccimuseo.comguccitimeless.comregiongold.com - - YUANFUDAO banmaaike.comxiaoyuankousuan.com ybccode.com yuanfudao.com yuansouti.com yuantiku.com -` -OAN aweencore.com  awetv.comherringnetwork.com oanencore.com oann.com - -ORACLE -oracle -oracle.comoraclecloud.comoraclefoundation.org oracleimg.comateam-oracle.com -bronto.comcovid19-rx.org covid19rx.org sun.com addthis.comaddthiscdn.comaddthisedge.comjava java.com java.net -= - TRANSLATEWIKItranslatewiki.nettranslatewiki.org -o -IFANR coolbuy.com  ifanr.com ifanr.inifanrusercontent.com -ifanrx.com -minapp.com -- -MYRADIO -myradio.hkmyradio.com.hk -# - PASSIONTIMESpassiontimes.hk -# -CATEGORY-SCHOLAR-!CN apa.orgpsyccareers.com cambridge.org"cambridgeschoolshakespeare.comcambridgedigital.netcambridgemaths.orgnewisiknowledge.comisiknowledge.com clarivate.comwebofknowledge.comwebofscience.com doi.org doi.info els-cdn.comelsevier-ae.com elsevier.com elsevier.ioengineeringvillage.com  evise.com -scopus.comscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.sk ic.ac.ukimperial.ac.ukimperialbusiness.schoolimperial.insendi.com -knovel.commit mit.edu mit.netmitpressjournals.orgamamanualofstyle.com anb.org blackstonespoliceservice.com epigeum.com oed.com  omscr.com oup.com -ouplaw.com ox.ac.ukoxfordaasc.comoxfordartonline.comoxfordbibliographies.comoxfordclinicalpsych.com oxforddnb.comoxfordfirstsource.comoxfordhandbooks.comoxfordlawtrove.comoxfordmedicine.comoxfordmusiconline.comoxfordpoliticstrove.com oxfordre.comoxfordreference.comoxfordscholarlyeditions.comoxfordscholarship.comoxfordwesternmusic.comsipriyearbook.org ukwhoswho.com"universitypressscholarship.comveryshortintroductions.comserialssolutions.com proquest.comsciencedirect.comsciencedirectassets.com -apress.com springer.comspringerlink.comspringernature.com wkap.nl tandf.co.uktandfonline.comtaylorandfrancis.comtaylorfrancis.com -aclweb.org acm.org acs.org altmetric.comanalytictech.comannualreviews.org  arxiv.org asha.org berkeley.edubiomedcentral.com biorxiv.org  brill.com cell.com cmu.educomputingreviews.com degruyter.comdentalhypotheses.comelifesciences.org europepmc.orgfrontiersin.org gale.com galegroup.com  ggsrv.com hindawi.com informs.org iop.orgisca-speech.orgjamanetwork.comjapanknowledge.comjbe-platform.com jmlr.org jneurosci.org  jstor.org kuke.comlawdata.com.twliteratumonline.com mdpi.com -nature.com nejm.org neurology.org ovid.com  peerj.comphysiology.org plos.org pnas.org princeton.eduresearchgate.netroutledgehandbooks.comroyalsocietypublishing.org rsc.org sagepub.comscholarpedia.orgsciencemag.orgscientificamerican.com scitation.orgsilverchair-cdn.comspiedigitallibrary.orgstatsmakemecry.com thelancet.com uchicago.edu ucla.edu  umass.edu  wiley.com yale.edu -+ -FORBES -forbes.com forbesimg.com -' -HACPAI -hacpai.com  ld246.com -/ -XVIDEOS xvideos.comxvideos-cdn.com -7 -AMD amd.comamdfanstore.com -radeon.com - -NAVER -lin.ee line.me line.naver.jp line-apps.com line-cdn.net line-scdn.net -nhncorp.jp grafolio.com  naver.com naver.jp  naver.net navercorp.com  plug.game pstatic.net - -SHORTURL shorturl.at - -WANGSU  51cdn.com  8686c.com  cdn30.orgchinanetcenter.com  lxdns.com -lxdns.info  lxdns.org ourdvsss.com speedws.info speedws.org -wangsu.com -wscdns.com wscdns.info -wscdns.org - - -TORPROJECTtorproject.org -? - BONGACAMS bongacams.com -bcicdn.com bcrncdn.com - -ELREPO -elrepo.org - - MEADJOHNSONenfinitas.com.cn -cnmeadjohnson.commeadjohnson.com.cn -cnmeadjohnson.com.hkmeadjohnson.com.twmeadjohnson.net - - -SKILLSHAREskillshare.com -( -GLOBALSECURITYglobalsecurity.org -4 -THEBORINGCOMPANYboringcompany.com x.com -" -LIHKG -lih.kg  lihkg.com -2 -MORISAWAmorisawa.co.jptypesquare.com -E -WIX wix.com  wixmp.com wixsite.com wixstatic.com - -CTYUN ctyun.online - -MYSQL  mysql.com -0 -OPENWRT openwrt.orglede-project.org -2 -REABBLE -reabble.cn -cn reabble.com -" - ADBLOCKPLUSadblockplus.org -. -ASPROEX asproex.comasproexapi.com - -BILIPLUS biliplus.com - -CISCO webex.ca webex.co.in webex.co.it webex.co.jp webex.co.kr webex.co.nz webex.co.uk  webex.com webex.com.au webex.com.br webex.com.cn -cn webex.com.hk webex.com.mx webex.de webex.es webex.fr ciscoacademynetriders.comcciernslabs.comcciesecuritylabs.comccievoicelabs.com  ccna5.netcisco-returns.comcisco-warrantyfinder.comcisco.cn -cn  cisco.com cisco.com.cn -cn -cisco.mobiciscoccservice.comciscoconnectcloud.comciscoconnectcloud.netciscoconnectcloud.orgciscocontest.comciscoerate.com ciscofax.comciscoinvestments.comciscojabbervideo.netciscokinetic.comciscoknowledgenetwork.comciscolearningsociety.orgciscolearningsystem.com ciscolive.comcisconetspace.comcisconetspace.infocisconetspace.netcisconetapp.comciscopartnermarketing.comciscopowercube.comciscoprice.comciscoresearch.comciscosoftware.com ciscospark.caciscospark.com ciscospark.jpciscotaccc.com ciscotr.com ciscoturk.netciscovideo.comciscowebseminars.com cloudlock.com cloupia.com cloupia.netconnect-in-canada.comcoreoptics.net cs.co -devm2m.com dnaspaces.io flipshare.comgpstheseries.com inlethd.cominternetofeverything.com ioe.com kscisco.com m2m.com -mcisco.commediafiles-cisco.com metacloud.com mindmeld.commultiplydiversity.commyciscobenefits.com  mysdn.com -mysdn.info  mysdn.net netacad.com netacad.netnetwork-auth.cn -cnobservable.net obsrvbl.com parstream.com parstream.net parstream.orgservices-exchange.comstatic-cisco.comtandberg-china.com tandberg.com -versly.comvideochampion.com virtuata.comwballiance.com!whyiwantciscotelepresence.com wifi-mx.comyoutubecisco.comapp-dynamics.comappdynamics.co.ukappdynamics.comappdynamics.deappdynamics.frappdynamics.infoappdynamics.jpappdynamics.org -mearki.com meraki-go.com  meraki.hk merakigo.com -tail-f.com  tailf.comcisco.evergage.comciscolivehls-i.akamaihd.net - -W3C -w3.org - - CORDCLOUD cordcloud.org -* -DANGDANG dangdang.com ddimg.cn -f -PHOENIX  ifeng.com ifengimg.comphoenixcenter.cn fengedu.comifengweekly.com - - R-PROJECT r-project.org - -THELINUXFOUNDATION -kernel.org  linux.org amp.devampproject.comampproject.netampproject.orgcdn.ampproject.org -cnamp.akamaized.netelectronjs.org -jquery.comjquerymobile.com jqueryui.com mochajs.org -nodejs.org openjsf.orglfai.foundationlinuxfoundation.org - - W3SCHOOLS w3schools.com -, -LINUXFROMSCRATCHlinuxfromscratch.org - -MORTEIN -mortein.cn -cn mortein.co.in mortein.co.nz mortein.co.za mortein.commortein.com.aumortein.com.brmortein.com.ngmortein.com.pkmorteincam.compifpafarabia.com - -RARBG rarbg.me rarbg.toproxyrarbg.org rarbg.israrbgaccess.org rarbggo.orgrarbgmirror.comrarbgmirror.orgrarbgproxy.org rarbgprx.orgrarbgunblock.com -9 - SQUIRRELVPNsquirrelvpn.comsquirrelgroup.net - -DWION acadn.cn  acadn.com bbbcdns.com  dlgslb.cn -dlgslb.net  dwion.com fastcdn.comfastcdn.com.cn  flxdns.cn -flxdns.com globalcdn.cn mcadn.cn  tlgslb.cn -tlgslb.com - - FACEBOOK-DEVaccountkit.comatscaleconference.com botorch.org -buck.build buckbuild.comcomponentkit.org draftjs.org -f8.comfacebookappcenter.infofacebookappcenter.netfacebookappcenter.orgfacebookconnect.comfacebookdevelopergarage.comfaciometrics.com fasttext.cc fbf8.com fbinfer.com fblitho.com fbredex.com -fbrell.com flow.dev flow.org flowtype.org frescolib.org hacklang.org hhvm.commakeitopen.com mcrouter.net mcrouter.orgmessengerdevelopers.com -ogp.meopengraphprotocol.comopengraphprotocol.org  parse.com pyrobot.org  react.com reactjs.com reactjs.org recoiljs.org rocksdb.com rocksdb.net rocksdb.orgyogalayout.comdevelopers.facebook.com -f -ROKU fandango.com mgo.commgo-images.com ravm.tv roku.com rokutime.com - -SVP svp-team.com - -FTEPROXY fteproxy.org -E -INFOWARS banned.video infowars.cominfowarsmedia.com - -APACHE -apache.org - - -CUGBONLINE cugbonline.cn -@ - DIGITALOCEANdigitalocean.comdigitaloceanspaces.com -J -FLICKR -flickr -flickr.com -flickr.netstaticflickr.com - -AVN avn.com -$ -TAOMEE -61.com -taomee.com - - WIRESHARK wireshark.org -H - ZYNGA-ADS zynga.com -ads#zyngaplayersupport.com -ads -: -BBCbbc  bbc.co.uk bbc.com -bbci.co.uk -B -HASKELL haskell.orghaskellstack.org stackage.org -' -POLYV  polyv.net videocc.net -, -SECOM secom.co.jpsecomtrust.net -G -ASAHI  asahi.com asahicom.jpasahishimbun.sc.omtrdc.net -$ -CSDN csdn.net -csdnimg.cn - -IETF ietf.org - - -INFRAPEDIAinfrapedia.com - - -CODECADEMYcodecademy.com - -REURL reurl.cc - -WWE wwe.com wwe9.com -1 -ZIROOM -ziroom.comziroomapartment.com -. -ANDROID android.comandroidify.com -9 -EMBEDLY embed.ly embedly.com playerjs.io -D - -LIVEJASMINlivejasmin.com dditsadn.com dditscdn.com -6 - RULEOFLAWrolfoundation.orgrolsociety.org - - - MICROSOFT-DEVadaptivecards.ioapi-extractor.com -apisof.net appcenter.ms -blazor.netbotframework.comcodethemicrobit.comdevopsassessment.net dot.netgamesstack.comgraphengine.ioinsiderdevtour.com -jwt.ms microbit.orgmicrosoftadc.commicrosoftgamestack.commicrosoftiotinsiderlabs.commicrosoftreactor.cn -cn#microsoftreactor.com.cn -cnmicrosoftreactor.infomicrosoftreactor.netmicrosoftreactor.orgmicrosoftsilverlight.commicrosoftsilverlight.orgmicrosoftsilverlight.netmicrosoftsqlserver.com  mmdnn.commono-project.com msdn.commsinnovationchallenge.commspairlift.commsropendata.com  nuget.org nugettest.orgopentranslatorstothings.orgposhtestgallery.compwabuilder.comreactorms.com.cn -cn -sankie.netsqlserveronlinux.comtimelinestoryteller.comuwpcommunitytoolkit.comvisualstudio-staging.comvisualstudio.comvisualstudio.covisualstudio.co.ukvisualstudio.euvisualstudio.net vfsforgit.com vfsforgit.org vsassets.io xamarin.comdeveloper.microsoft.comdtlgalleryint.cloudapp.net poshtestgallery.cloudapp.net"psg-int-centralus.cloudapp.netpsg-int-eastus.cloudapp.net -2 - NEWRELIC-ADS"js-agent.newrelic.com -ads -9 - -ARTSTATIONartstation.comartstationmedia.com - -BTCBOX btcbox.co.jp -$ - CLOUDCONVERTcloudconvert.com - -GCORES -gcores.com - -TELEGRAM contest.com  graph.orgquiz.directoryt.me tdesktop.com -telega.one -telegra.ph telegram.dog telegram.me telegram.orgtelegram.space -telesco.pe -tg.dev tx.meusercontent.dev - -UN -un.org -7 - BUYMEACOFFEE buymeacoff.eebuymeacoffee.com - -CATEGORY-ADS-ALL7box.vip -adsad-delivery.net -ads adinplay.com -ads adnxs.com -ads!ads.trafficjunky.net -adsadvertserve.com -adscasalemedia.com -ads!contextual.media.net -ads cpmstar.com -ads -demdex.net -ads httpool.com -ads lijit.com -ads1rx.io -ads mfadsrvr.com -adsmgid.com -adsns1p.net -ads openx.net -ads pubmatic.com -adsspotxchange.com -ads -unimhk.com -ads upapi.net -ads taboola.com apilog-web.acfun.cn -ads adcolony.com -ads -adjust.com -ads a.alimama.cn -adsacjs.aliyun.com -adsadash.m.taobao.com -ads!adashbc.m.taobao.com -ads"adashbc.ut.taobao.com -ads"adash-c.ut.taobao.com -ads adashx.m.taobao.com -ads$adashx4ae.ut.taobao.com -ads#adashx4yt.m.taobao.com -ads#adashxgc.ut.taobao.com -adsadsh.m.taobao.com -adsafp.adchina.com -adsafp.alicdn.com -ads agoodm.m.taobao.com -ads#agoodm.wapa.taobao.com -ads alipaylog.com -adsamdc.alipay.com -adsamdc.m.taobao.com -ads api.wapa.taobao.com -ads#api.waptest.taobao.com -adsapoll.m.taobao.com -ads#appdownload.alicdn.com -adsatanx.alicdn.com -adsatanx2.alicdn.com -adscbu01.alicdn.com -adscdn0.mobmore.com -adsclick.aliyun.com -ads&click.mz.simba.taobao.com -adscm.ipinyou.com -ads cm.mlt01.com -ads!dsp.simba.taobao.com -adserr.taobao.com -adsex.mobmore.com -ads ex.puata.info -ads!fav.simba.taobao.com -ads$feedback.whalecloud.com -adsff.win.taobao.com -ads fm.p0y.cn -adsg.click.taobao.com -ads -g.tbcdn.cn -adsgma.alicdn.com -adsgtms01.alicdn.com -adsgtms02.alicdn.com -adsgtms03.alicdn.com -adsgtms04.alicdn.com -adshydra.alibaba.com -ads'hz.pre.tbusergw.taobao.net -ads#hz.tbusergw.taobao.net -ads i.ipinyou.com -adsinit.phpwind.com -ads!intl.wapa.taobao.com -ads$intl.waptest.taobao.com -ads"jxlog.istreamsche.com -adslog.umtrack.com -adsm.intl.taobao.com -adsm.simba.taobao.com -adsmatch.p4p.1688.com -ads%material.istreamsche.com -ads mlt01.com -ads&nbsdk-baichuan.alicdn.com -ads&nbsdk-baichuan.taobao.com -ads"osfota.cdn.aliyun.com -ads osupdate.aliyun.com -ads&osupdateservice.yunos.com -ads%pindao.huoban.taobao.com -adspush.wandoujia.com -adsre.m.taobao.com -ads re.taobao.com -ads&redirect.simba.taobao.com -adsrj.m.taobao.co -adsrj.m.taobao.com -adssdkinit.taobao.com -adsshow.re.taobao.com -adssimaba.taobao.com -adssimba.m.taobao.com -ads!srd.simba.taobao.com -adsstats.ipinyou.com -ads strip.taobaocdn.com -ads$tanxlog.istreamsche.com -adstejia.taobao.com -adstemai.taobao.com -ads!tns.simba.taobao.com -ads tongji.linezing.com -ads tvupgrade.yunos.com -adstyh.taobao.com -adsuserimg.qunar.com -adsw.m.taobao.com -adsyiliao.hupan.com -ads amazon-adsystem.com -adsiadsdk.apple.com -ads iad.apple.com -ads qwapi.com -ads applovin.com -ads -applvn.com -ads atom-data.io -adsanalytics-data.io -ads ironbeast.io -ads a.baidu.com -ads ad.duapps.com -ads ad.player.baidu.com -ads adm.baidu.com -adsadscdn.baidu.com -adsadx.xiaodutv.com -adsae.bdstatic.com -ads afd.baidu.com -ads als.baidu.com -ads&api.mobula.sdk.duapps.com -ads"api.tuisong.baidu.com -adsappc.baidu.com -adsb.bdstatic.com -adsbaichuan.baidu.com -adsbaidustatic.com -adsbaidutv.baidu.com -adsbanlv.baidu.com -ads bar.baidu.com -ads"bdimg.share.baidu.com -adsbdplus.baidu.com -ads bj.bcebos.com -adsbtlaunch.baidu.com -ads c.baidu.com -ads cb.baidu.com -adscbjs.baidu.com -adscjhq.baidu.com -adscleaner.baidu.com -ads click.bes.baidu.com -adsclick.hm.baidu.com -adsclick.qianqian.com -ads"cm.baichuan.baidu.com -ads cm.baidu.com -adscm.pos.baidu.com -ads cpro.baidu.cn -adscpro.baidu.com -ads!cpro.baidustatic.com -ads!cpro.tieba.baidu.com -ads"cpro.zhidao.baidu.com -adscpro2.baidu.com -ads"cpro2.baidustatic.com -ads crs.baidu.com -adsdatax.baidu.com -ads dd713.bj.bcebos.com -ads dl.client.baidu.com -adsdl.ops.baidu.com -adsdl1sw.baidu.com -adsdl2.bav.baidu.com -adsdlsw.baidu.com -adsdlsw.br.baidu.com -ads!dl-vip.bav.baidu.com -ads(dl-vip.pcfaster.baidu.co.th -ads#download.bav.baidu.com -ads"download.sd.baidu.com -adsdrmcmm.baidu.com -ads dup.baidustatic.com -ads dxp.baidu.com -ads dzl.baidu.com -ads e.baidu.com -adseclick.baidu.com -adsecma.bdimg.com -adsecmb.bdimg.com -adsecmc.bdimg.com -ads eiv.baidu.com -ads em.baidu.com -adsentry.baidu.com -ads ers.baidu.com -ads f10.baidu.com -ads#fc-feed.cdn.bcebos.com -adsfclick.baidu.com -adsfeed.baidu.com -adsfexclick.baidu.com -ads g.baidu.com -adsgimg.baidu.com -adsguanjia.baidu.com -ads hc.baidu.com -ads hm.baidu.com -adshmma.baidu.com -ads hpd.baidu.com -adsidm.bce.baidu.com -adsidm-su.baidu.com -adsiebar.baidu.com -adsikcode.baidu.com -adsimg.taotaosou.cn -adsimg01.taotaosou.cn -adsj.br.baidu.com -adskstj.baidu.com -ads log.music.baidu.com -ads m1.baidu.com -ads ma.baidu.com -adsmobads.baidu.com -ads"mobads-logs.baidu.com -adsmpro.baidu.com -adsmsite.baidu.com -adsneirong.baidu.com -adsnsclick.baidu.com -ads#nsclickvideo.baidu.com -adsopenrcv.baidu.com -ads$pc.videoclick.baidu.com -ads pos.baidu.com -adspups.bdimg.com -ads%push.zhanzhang.baidu.com -ads qianclick.baidu.com -adsrelease.baidu.com -adsres.mi.baidu.com -ads"rigel.baidustatic.com -ads#river.zhidao.baidu.com -ads rj.baidu.com -adsrplog.baidu.com -ads s.baidu.com -adss.cpro.baidu.com -ads!sa.tuisong.baidu.com -adssclick.baidu.com -adssestat.baidu.com -adsshadu.baidu.com -adsshare.baidu.com -ads"snippet.pos.baidu.com -adssobar.baidu.com -adssobartop.baidu.com -adsspcode.baidu.com -adsstat.v.baidu.com -ads su.bdimg.com -adssu.bdstatic.com -ads t10.baidu.com -ads t11.baidu.com -ads t12.baidu.com -ads tk.baidu.com -adstkweb.baidu.com -ads"tob-cms.bj.bcebos.com -adstongji.baidu.com -adstoolbar.baidu.com -adstracker.baidu.com -adstuijian.baidu.com -ads*uat1.bfsspadserver.8le8le.com -ads#ubmcmm.baidustatic.com -adsucstat.baidu.com -adsulic.baidu.com -ads ulog.imap.baidu.com -adsunion.baidu.com -ads!unionimage.baidu.com -adsutility.baidu.com -ads utk.baidu.com -ads videopush.baidu.com -adsvv84.bj.bcebos.com -adsw.gdown.baidu.com -ads w.x.baidu.com -adswangmeng.baidu.com -adsweishi.baidu.com -ads$wenku-cms.bj.bcebos.com -ads%wisepush.video.baidu.com -ads wm.baidu.com -adswn.pos.baidu.com -adsznsv.baidu.com -adszz.bdstatic.com -adszzy1.quyaoya.com -adsmcs.snssdk.com -adsx.clearbitjs.com -ads bluekai.com -adsfout.jp -ads gmossp-sp.jp -adsi-mobile.co.jp -ads im-apps.net -ads impact-ad.jp -ads ladsp.com -ads microad.co.jp -ads -microad.jp -ads socdm.com -ads emogi.com -adsdata.flurry.com -ads2mdn.net -ads admob.com -ads adsense.com -ads'adsensecustomsearchads.com -ads%adsenseformobileapps.com -ads$advertisercommunity.com -ads%advertiserscommunity.com -ads"adwords-community.com -ads adwords.com -adsadwordsexpress.com -ads app-measurement.com -ads&clickserver.googleads.com -adsdoubleclick.com -adsdoubleclick.net -ads!google-analytics.com -adsgoogleadapis.com -ads!googleadservices.com -ads googleanalytics.com -adsgoogleoptimize.com -ads"googlesyndication.com -ads!googletagmanager.com -ads"googletagservices.com -ads'googletraveladservices.com -ads -urchin.com -ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ -ads!assets.growingio.com -adsmlog.hiido.com -adsylog.hiido.com -adsstatic.hotjar.com -adsclick.hunantv.com -adsda.hunantv.com -ads da.mgtv.com -adslog.hunantv.com -adslog.v2.hunantv.com -adsres.hunantv.com -adsv2.log.hunantv.com -adsinner-active.mobi -adsa.ckm.iqiyi.com -adsad.m.iqiyi.com -ads afp.iqiyi.com -adsc.uaa.iqiyi.com -ads cloudpush.iqiyi.com -ads"cm.passport.iqiyi.com -adscupid.iqiyi.com -ads#emoticon.sns.iqiyi.com -ads!gamecenter.iqiyi.com -ads!hotchat-im.iqiyi.com -adsifacelog.iqiyi.com -adsmbdlog.iqiyi.com -ads msg.71.am -adsmsg.video.qiyi.com -ads msg2.video.qiyi.com -ads#policy.video.iqiyi.com -adsyuedu.iqiyi.com -adsads.union.jd.com -ads c-nfa.jd.com -adscps.360buy.com -ads -jzt.jd.com -ads stat.m.jd.com -ads img-x.jd.com -ads log-sdk.gifshow.com -adswlog.kuaishou.com -ads leanplum.com -ads#api.game.letvstore.com -ads ark.letv.com -ads dc.letv.com -adsdev.dc.letv.com -ads fz.letv.com -ads g3.letv.com -adsletv.allyes.com -adsminisite.letv.com -adsmsg.m.letv.com -adsn.mark.letv.com -adsplog.dc.letv.com -adspro.hoye.letv.com -ads pro.letv.com -ads stat.letv.com -ads"static.app.m.letv.com -ads decide.mixpanel.com -ads mopub.com -adsevt.mxplay.com -adsanalytics.163.com -ads crash.163.com -ads crashlytics.163.com -ads g.163.com -ads"js-agent.newrelic.com -ads ogury.com -ads -presage.io -adsogury.co -ads onesignal.com -adsOB^speed\.(coe|open)\.ad\.[a-z]{2,6}\.prod\.hosts\.ooklaserver\.net$ -ads cdn.pocoiq.cn -ads oct.pocoiq.cn -adsads.pubmatic.com -adscdn.segment.com -ads"static.sensorsdata.cn -ads 2016.sina.cn -adsad.sina.com.cn -adsadbox.sina.com.cn -ads!adimages.sina.com.hk -ads!adimg.mobile.sina.cn -ads adimg.uve.weibo.com -ads!adm.leju.sina.com.cn -ads ads.sina.com -adsalitui.weibo.com -adsapi.apps.sina.cn -ads appgift.sinaapp.com -ads#appsupdate.sinaapp.com -ads atm.sina.com -adsbeacon.sina.com.cn -ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com -ads%click.uve.mobile.sina.cn -ads click.uve.weibo.com -adscm.dmp.sina.cn -ads0#contentrecommend-out.mobile.sina.cn -ads$count.video.sina.com.cn -ads counter.sina.com.cn -adscre.dp.sina.cn -adscre-dp.sina.cn -adsd00.sina.com.cn -adsdcads.sina.com.cn -adsdl.kjava.sina.cn -ads dmp.sina.cn -adsdp.im.weibo.cn -ads game.weibo.cn -adsgame.weibo.com -ads"gw5.push.mcp.weibo.cn -ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn -ads"int.dpool.sina.com.cn -ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn -ads log.mix.sina.com.cn -ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn -ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn -adsnewspush.sinajs.cn -ads oascentral.sina.com -ads#oascentral.sina.com.hk -adsp4p.sina.com.cn -adspalmnews.sina.cn -adspay.mobile.sina.cn -adspfp.sina.com.cn -adspfpip.sina.com -ads!promote.biz.weibo.cn -ads r.dmp.sina.cn -adsrm.sina.com.cn -ads rs.sinajs.cn -adss.alitui.weibo.com -ads"s.img.mix.sina.com.cn -ads sapi.sina.cn -ads sax.sina.cn -adssax.sina.com.cn -adssaxn.sina.com.cn -adssaxs.sina.com.cn -ads sbeacon.sina.com.cn -ads"sdkapp.mobile.sina.cn -ads!sdkapp.uve.weibo.com -ads$sdkclick.mobile.sina.cn -ads slog.sina.cn -adsslog.sina.com.cn -ads'staticadm.leju.sina.com.cn -adstjs.sjs.sinajs.cn -ads"trends.mobile.sina.cn -ads"u1.img.mobile.sina.cn -ads&wapwbclick.mobile.sina.cn -ads!wbapp.mobile.sina.cn -ads wbapp.uve.weibo.com -ads#wbclick.mobile.sina.cn -ads$wbpctips.mobile.sina.cn -adswidget.weibo.com -ads woocall.sina.com.cn -adszc.biz.weibo.com -adszymo.mps.weibo.com -adsadnet.sohu.com -ads ads.sohu.com -ads!adv-sv-show.focus.cn -ads aty.sohu.com -adsdata.vod.itc.cn -adsepro.sogou.com -ads go.sohu.com -adsgolden1.sogou.com -adsimp.optaim.com -adsinte.sogou.com -adsinte.sogoucdn.com -adslu.sogoucdn.com -ads pv.sohu.com -adstheta.sogoucdn.com -adstrack.sohu.com -adsuranus.sogou.com -adsv2.reachmax.cn -ads)e8aeb8bbdbbd7.cdn.sohucs.com -ads)643108e7617ef.cdn.sohucs.com -ads'adeventtracker.spotify.com -ads$adstudio-assets.scdn.co -ads#bloodhound.spotify.com -adssupersonic.com -adssupersonicads.com -ads -ssacdn.com -ads)supersonicads-a.akamaihd.net -ads g1.tagtic.cn -adsxy-log.tagtic.cn -adsssp.api.tappx.com -ads ad.qq.com -ads ad.qun.qq.com -ads!adfilter.imtt.qq.com -ads adping.qq.com -adsadpm.app.qq.com -adsadsclick.qq.com -adsadsfile.qq.com -adsadshmmsg.qq.com -adsadslvfile.qq.com -adsadslvseed.qq.com -ads%adsmind.apdcdn.tc.qq.com -adsadsqqclick.qq.com -adsadstestview.qq.com -adsadsview.qq.com -adsadsview2.qq.com -adsadv.app.qq.com -ads adver.qq.com -ads btrace.qq.com -adse.qq.com -adslog.tbs.qq.com -ads mpush.qq.com -ads mtrace.qq.com -ads push.qq.com -ads pgdt.gtimg.cn -ads uberads.com -adsalog.umeng.com -ads alog.umengcloud.com -ads -w.cnzz.com -ads!unityads.unity3d.com -ads#unityads.unitychina.cn -ads ads.wteam.xyz -ads#collector.xhamster.com -adsad.intl.xiaomi.com -ads ad.mi.com -ads ad.xiaomi.com -adsadmob.xiaomi.com -adsad1.xiaomi.com -adsmistat.xiaomi.com -adstracking.miui.com -adsadv.sec.miui.com -ads"adv.sec.intl.miui.com -ads"misc.in.duokanbox.com -ads ad.hpplay.cn -adsadeng.hpplay.cn -ads kuyun.com -ads umeng.com -ads ads.yahoo.com -adsgemini.yahoo.com -ads ysm.yahoo.com -adsactives.youku.com -ads ad.api.3g.youku.com -ads$ad.api.mobile.youku.com -ads ad.mobile.youku.com -ads(a-dxk.play.api.3g.youku.com -ads atm.youku.com -ads#b.smartvideo.youku.com -adsc.yes.youku.com -adsdas.api.youku.com -ads!das.mobile.youku.com -ads!dev-push.m.youku.com -adsdl.g.youku.com -adsdmapp.youku.com -adse.stat.ykimg.com -ads#gamex.mobile.youku.com -ads!guanggaoad.youku.com -ads hudong.pl.youku.com -ads!huodong.pl.youku.com -ads"huodong.vip.youku.com -ads hz.youku.com -adsiyes.youku.com -ads l.ykimg.com -adslstat.youku.com -ads mobilemsg.youku.com -ads msg.youku.com -adsmyes.youku.com -ads p.l.youku.com -ads pl.youku.com -ads#passport-log.youku.com -adsp-log.ykimg.com -adspush.m.youku.com -ads r.l.youku.com -ads s.p.youku.com -adssdk.m.youku.com -adsstat.youku.com -ads$statis.api.3g.youku.com -ads&store.tv.api.3g.youku.com -ads&store.xl.api.3g.youku.com -adstdrec.youku.com -adstest.ott.youku.com -ads!test.sdk.m.youku.com -ads v.l.youku.com -adsval.api.youku.com -ads wan.youku.com -adsykatr.youku.com -adsykrec.youku.com -ads cvnad.com -ads -iyoowi.com -ads zynga.com -ads#zyngaplayersupport.com -ads 51y5.net a.adtng.com -aaxads.com -ad-srv.netad.api.moji.comad.wang502.com adbutter.netads.trafficjunky.net adtechus.com adxprtz.comcdn.advertserve.comcdn.banclip.comcfts1tifqr.comcontentabc.com cretgate.comero-advertising.comeroadvertising.com exoclick.com -exosrv.comimg-bss.csdn.net imglnkc.com imglnkd.comja2.gamersky.com jl3.yjaxa.topkepler-37b.com -lqc006.coms4yxaqyq95.comshhs-ydd8x2.yjrmss.cnstatic.javhd.comtrafficfactory.biztsyndicate.com adx.36kr.comclick.ali213.netpbmp.ali213.net^pinggai\d\.caixin\.com$adq.chinaso.comstat.chinaso.com toboads.comdn-growing.qbox.me ad.unimhk.comdas-rpt-log.ucloud.cn - - -FANHAODIANfanhaodian.com -? -MAFENGWO mafengwo.cn mafengwo.com mafengwo.net - - SHARETHIS sharethis.com - - -TYPOGRAPHYtypography.com - -ATYPI  atypi.org - -BEEG beeg.com - - CATEGORY-PORN  1pondo.tv -91porn.com  avgle.com avn.com beeg.com bongacams.com -bcicdn.com bcrncdn.com -btt804.com -btt904.com -bttzyw.com -bttzyw.net t66y.comchaturbate.com e-hentai.org ehgt.org ehtracker.org -ehwiki.org exhentai.orghentaiverse.org eporner.comfanhaodian.com  hegre.com heydoga.com  heyzo.com hqporner.com cdnlab.live jable.tv -javbus.com javbus22.com javfinder.sh findercdn.me o0-2.com  javhd.comjavlibrary.com -javwide.tv javwide.com kindgirls.comlivejasmin.com dditsadn.com dditscdn.com -metart.commetartnetwork.com metcams.comnaiadsystems.com  nsimg.net netflav.com  pigav.com -pornhd.com -phncdn.com phprcdn.com pornhub.compornhubpremium.com  press.vin redtube.com scoreland.comcdn77.scoreuniverse.com spankbang.comtheporndude.com  tube8.com  uug22.com  uug23.com  uug25.com  uug26.com  uug27.com  uuk28.com  uun78.com  uun79.com  uun82.com  uun83.com  uun85.com  uun86.com  uun87.com  uun89.com  uun92.com  uun93.com  uun95.com  uun96.com  uun97.com  uun98.com  uun99.com  uux68.comvaginacontest.com  x-art.com xhamster.comxhamsterlive.com  xhcdn.comwidgets.stripst.com#collector.xhamster.com -ads xnxx.com xnxx-cdn.com xvideos.comxvideos-cdn.com youjizz.comyjcontentdelivery.com youporn.com 0plkijj.vip  114av.xyz 16fhgdty.xyz 18novel.xyz -1jjdg2.vip -1jsa22.vip  51dh.site 520aa.tv 5278.cc -52hyse.com 54647.online 69story.com 69vj.com  721av.com -7mm.tv -85tube.com 91.51rmc.com 920share.com -a.91gay.me a.kslive.tv aavs.xyz  agzy1.com aibaobei.me aimei133.com airav.ccanimezilla.comasianpornmovies.com av01.tv  av1688.cc av6k.com avfox.cc -avinin.com -avmoo.cyou -avpanda.cc -avsee01.tv avseesee.com bangbros.combesthentaitube.com brazzers.com -buzzav.com  caime.xyz calvappd.me cam4.com cslpldyb.me  dkk37.comdownload.91porn005.medownload.i91av.org -dvh30n.vipflirt4free.com follasian.com -gaypad.net  gouri.xyz  hanime.tv -hanime1.me hpjav.tv hsxhr.ccichineseporn.com  iijav.com  immxd.com isexlove.tw isexomega.twjapan-whores.comjapanesebeauties.net jav.guru jav01.cc -jav101.com  jav168.cc javcc.cc  javcc.com -javdoe.com javdove8.xyz  javfor.me javfull.net  javhd.pro javhd3x.com javhdfree.netjavlibrary.com javmost.com  javqd.com javynow.com  jgg18.xyz jiayoulu.com jinnaju.com jjdong7.com -johren.net kissjav.com kphimsex.net  love7.xyz lp99.pw lsnzxzy1.com lubetube.com -lululu.one manyvids.com mdlf.xyz myavfun.commydirtyhobby.commyfreecams.com nekoxxx.com nhentai.netohyeah1080.com -onejav.comosakamotion.netp3.csgfnmdb.com papalah.com  popjav.tv pornbest.org porntea.com -pyhapp.com -qingse.one  r18lu.comrealitykings.com -rule34.xxx seqingx.com seselah.com sextop1.net -sexzy4.com -soirt4.funsouth-plus.net stripchat.com -sub147.com  swag.livetbr.tangbr.net theav.cc -thisav.com thtmod1.com -tkb008.xyztokyomotion.net  tssp.besttubetubetube.com upjav.cc vgg8.com vjav.comwatchjavonline.com wuso.me  wzmyg.com  x99av.com  xo104.com  xtube.com  youav.com -S -PORNHUB -phncdn.com phprcdn.com pornhub.compornhubpremium.com - - -SALESFORCE appcloud.comappexchange.com attic.iobeyondcore.combuddymedia.com chatter.comcloudcraze.com cotweet.com data.comdemandware.com desk.comdocumentforce.comdreamforce.com einstein.comexacttarget.com  force.com govforce.comgravitytank.com heywire.com krux.commarketingcloud.com metamind.io -pardot.com quotable.com radian6.com relateiq.comsalesforce.comsalesforce.orgsalesforceiq.comsalesforceliveagent.com salesforcemarketingcloud.com sequence.comsfdcstatic.com -sforce.com site.com -social.comsteelbrick.com twinprime.comweinvoiceit.com - -GIGABYTE  aorus.com aoruszone.cn -cn gigabyte.cn -cn gigabyte.comgigabyte2.azureedge.netsa78gs.wpc.edgecastcdn.net"sni1dcb6gl.wpc.edgecastcdn.net -E - HIIDO-ADSmlog.hiido.com -adsylog.hiido.com -ads -$ - HUANGHUAGANGhuanghuagang.org -L -JSDELIVR jsdelivr.net jsdelivr.comcdn.jsdelivr.net -cn -L -LANZOU baidupan.com -lanzou.com lanzous.com woozooo.com - -SINA  97973.com -picself.cn sina.cn sina.com sina.com.cn sina.net sinaapp.com sinaedge.com -sinaimg.cn sinaimg.com  sinajs.cn -sinajs.comt.cn videoself.cn  wbimg.com wbimg.cn wcdn.cn weibo.cn  weibo.com weibo.com.cn weibocdn.com xhaiwai.com 2016.sina.cn -adsad.sina.com.cn -adsadbox.sina.com.cn -ads!adimages.sina.com.hk -ads!adimg.mobile.sina.cn -ads adimg.uve.weibo.com -ads!adm.leju.sina.com.cn -ads ads.sina.com -adsalitui.weibo.com -adsapi.apps.sina.cn -ads appgift.sinaapp.com -ads#appsupdate.sinaapp.com -ads atm.sina.com -adsbeacon.sina.com.cn -ads biz.weibo.com -adsc.biz.weibo.com -ads!c.wcpt.biz.weibo.com -ads%click.uve.mobile.sina.cn -ads click.uve.weibo.com -adscm.dmp.sina.cn -ads0#contentrecommend-out.mobile.sina.cn -ads$count.video.sina.com.cn -ads counter.sina.com.cn -adscre.dp.sina.cn -adscre-dp.sina.cn -adsd00.sina.com.cn -adsdcads.sina.com.cn -adsdl.kjava.sina.cn -ads dmp.sina.cn -adsdp.im.weibo.cn -ads game.weibo.cn -adsgame.weibo.com -ads"gw5.push.mcp.weibo.cn -ads"gw6.push.mcp.weibo.cn -ads"img.adbox.sina.com.cn -ads#img.amp.ad.sina.com.cn -ads"int.dpool.sina.com.cn -ads%interest.mix.sina.com.cn -ads)log.interest.mix.sina.com.cn -ads log.mix.sina.com.cn -ads log.sina.cn -ads!m.beacon.sina.com.cn -adsm.game.weibo.cn -ads!mg.games.sina.com.cn -ads!motu.p4p.sina.com.cn -adsnewspush.sinajs.cn -ads oascentral.sina.com -ads#oascentral.sina.com.hk -adsp4p.sina.com.cn -adspalmnews.sina.cn -adspay.mobile.sina.cn -adspfp.sina.com.cn -adspfpip.sina.com -ads!promote.biz.weibo.cn -ads r.dmp.sina.cn -adsrm.sina.com.cn -ads rs.sinajs.cn -adss.alitui.weibo.com -ads"s.img.mix.sina.com.cn -ads sapi.sina.cn -ads sax.sina.cn -adssax.sina.com.cn -adssaxn.sina.com.cn -adssaxs.sina.com.cn -ads sbeacon.sina.com.cn -ads"sdkapp.mobile.sina.cn -ads!sdkapp.uve.weibo.com -ads$sdkclick.mobile.sina.cn -ads slog.sina.cn -adsslog.sina.com.cn -ads'staticadm.leju.sina.com.cn -adstjs.sjs.sinajs.cn -ads"trends.mobile.sina.cn -ads"u1.img.mobile.sina.cn -ads&wapwbclick.mobile.sina.cn -ads!wbapp.mobile.sina.cn -ads wbapp.uve.weibo.com -ads#wbclick.mobile.sina.cn -ads$wbpctips.mobile.sina.cn -adswidget.weibo.com -ads woocall.sina.com.cn -adszc.biz.weibo.com -adszymo.mps.weibo.com -ads - -9NEWS 9cdn.net9nation.com.au 9news.com.au 9now.com.aufreeviewplus.net.au -mi9.com.au -mi9cdn.com nine.com.aunineentertainment.com.aunineentertainmentco.com.auninemediaroom.com.auninemsn.com.austatic9.net.au yourtv.com.au -. -CABLETVcabletv.com.hk i-cable.com - -GOOGLE android.comandroidify.com blogspot.ae blogspot.al blogspot.am blogspot.ba blogspot.be blogspot.bg blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.clblogspot.co.atblogspot.co.idblogspot.co.ilblogspot.co.keblogspot.co.nzblogspot.co.ukblogspot.co.za blogspot.comblogspot.com.arblogspot.com.aublogspot.com.brblogspot.com.byblogspot.com.coblogspot.com.cyblogspot.com.eeblogspot.com.egblogspot.com.esblogspot.com.mtblogspot.com.ngblogspot.com.trblogspot.com.uy blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hr blogspot.hu blogspot.ie blogspot.in blogspot.is blogspot.it blogspot.jp blogspot.kr blogspot.li blogspot.lt blogspot.lu blogspot.md blogspot.mk blogspot.mx blogspot.my blogspot.nl blogspot.no blogspot.pe blogspot.pt blogspot.qa blogspot.re blogspot.ro blogspot.rs blogspot.ru blogspot.se blogspot.sg blogspot.si blogspot.sk blogspot.sn blogspot.td blogspot.tw blogspot.ug blogspot.vn dart.dev dartlang.org dartpad.dev fastlane.cifastlane.tools flutter.devflutterapp.com go-lang.com go-lang.net go-lang.org -go.dev  godoc.org -golang.com -golang.net -golang.org2mdn.net -ads admob.com -ads adsense.com -ads'adsensecustomsearchads.com -ads%adsenseformobileapps.com -ads$advertisercommunity.com -ads%advertiserscommunity.com -ads"adwords-community.com -ads adwords.com -adsadwordsexpress.com -ads app-measurement.com -ads&clickserver.googleads.com -adsdoubleclick.com -adsdoubleclick.net -ads!google-analytics.com -adsgoogleadapis.com -ads!googleadservices.com -ads googleanalytics.com -adsgoogleoptimize.com -ads"googlesyndication.com -ads!googletagmanager.com -ads"googletagservices.com -ads'googletraveladservices.com -ads -urchin.com -ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ -adscharlestonroadregistry.comregistry.google get.app get.dev get.how get.page iam.soyxn--p8j9a0d9c9a.xn--q9jyb4cscholar.google.aescholar.google.atscholar.google.bescholar.google.bgscholar.google.cascholar.google.catscholar.google.chscholar.google.clscholar.google.cnscholar.google.co.crscholar.google.co.idscholar.google.co.ilscholar.google.co.inscholar.google.co.jpscholar.google.co.krscholar.google.co.nzscholar.google.co.thscholar.google.co.ukscholar.google.co.vescholar.google.co.zascholar.google.comscholar.google.com.arscholar.google.com.auscholar.google.com.boscholar.google.com.brscholar.google.com.coscholar.google.com.cuscholar.google.com.doscholar.google.com.ecscholar.google.com.egscholar.google.com.gtscholar.google.com.hkscholar.google.com.lyscholar.google.com.mxscholar.google.com.myscholar.google.com.nischolar.google.com.pascholar.google.com.pescholar.google.com.phscholar.google.com.pkscholar.google.com.prscholar.google.com.pyscholar.google.com.sgscholar.google.com.svscholar.google.com.trscholar.google.com.twscholar.google.com.uascholar.google.com.uyscholar.google.com.vnscholar.google.czscholar.google.descholar.google.dkscholar.google.esscholar.google.fischolar.google.frscholar.google.grscholar.google.hnscholar.google.hrscholar.google.huscholar.google.isscholar.google.itscholar.google.lischolar.google.ltscholar.google.luscholar.google.lvscholar.google.nlscholar.google.noscholar.google.plscholar.google.ptscholar.google.roscholar.google.ruscholar.google.sescholar.google.sischolar.google.skpolymer-project.orgpolymerproject.org -v8.dev v8project.org youtubeggpht.cn -cn  ggpht.comgooglevideo.comwithyoutube.com youtu.beyoutube-nocookie.com -youtube.ae -youtube.al -youtube.am -youtube.at -youtube.az -youtube.ba -youtube.be -youtube.bg -youtube.bh -youtube.bo -youtube.by -youtube.ca youtube.cat -youtube.ch -youtube.cl -youtube.co youtube.co.ae youtube.co.at youtube.co.cr youtube.co.hu youtube.co.id youtube.co.il youtube.co.in youtube.co.jp youtube.co.ke youtube.co.kr youtube.co.ma youtube.co.nz youtube.co.th youtube.co.tz youtube.co.ug youtube.co.uk youtube.co.ve youtube.co.za youtube.co.zw youtube.comyoutube.com.aryoutube.com.auyoutube.com.azyoutube.com.bdyoutube.com.bhyoutube.com.boyoutube.com.bryoutube.com.byyoutube.com.coyoutube.com.doyoutube.com.ecyoutube.com.eeyoutube.com.egyoutube.com.esyoutube.com.ghyoutube.com.gryoutube.com.gtyoutube.com.hkyoutube.com.hnyoutube.com.hryoutube.com.jmyoutube.com.joyoutube.com.kwyoutube.com.lbyoutube.com.lvyoutube.com.lyyoutube.com.mkyoutube.com.mtyoutube.com.mxyoutube.com.myyoutube.com.ngyoutube.com.niyoutube.com.omyoutube.com.payoutube.com.peyoutube.com.phyoutube.com.pkyoutube.com.ptyoutube.com.pyyoutube.com.qayoutube.com.royoutube.com.sayoutube.com.sgyoutube.com.svyoutube.com.tnyoutube.com.tryoutube.com.twyoutube.com.uayoutube.com.uyyoutube.com.ve -youtube.cr -youtube.cz -youtube.de -youtube.dk -youtube.ee -youtube.es -youtube.fi -youtube.fr -youtube.ge -youtube.gr -youtube.gt -youtube.hk -youtube.hr -youtube.hu -youtube.ie -youtube.in -youtube.iq -youtube.is -youtube.it -youtube.jo -youtube.jp -youtube.kr -youtube.kz -youtube.la -youtube.lk -youtube.lt -youtube.lu -youtube.lv -youtube.ly -youtube.ma -youtube.md -youtube.me -youtube.mk -youtube.mn -youtube.mx -youtube.my -youtube.ng -youtube.ni -youtube.nl -youtube.no -youtube.pa -youtube.pe -youtube.ph -youtube.pk -youtube.pl -youtube.pr -youtube.pt -youtube.qa -youtube.ro -youtube.rs -youtube.ru -youtube.sa -youtube.se -youtube.sg -youtube.si -youtube.sk -youtube.sn youtube.soy -youtube.sv -youtube.tn -youtube.tv -youtube.ua -youtube.ug -youtube.uy -youtube.vnyoutubeeducation.comyoutubefanfest.comyoutubegaming.comyoutubego.co.idyoutubego.co.in youtubego.comyoutubego.com.br youtubego.id youtubego.inyoutubei.googleapis.comyoutubekids.comyoutubemobilesupport.com yt.be  ytimg.comand -chromedclkgbizgle gmailgoogoog -googleguge hangout nexus xn--qcka1pmc  google.ad  google.ae  google.al  google.am  google.as  google.at  google.az  google.ba  google.be  google.bf  google.bg  google.bi  google.bj  google.bs  google.bt  google.by  google.ca -google.cat  google.cd  google.cf  google.cg  google.ch  google.ci  google.cl  google.cm google.cn -cn google.co.ao google.co.bw google.co.ck google.co.cr google.co.id google.co.il google.co.in google.co.jp google.co.ke google.co.kr google.co.ls google.co.ma google.co.mz google.co.nz google.co.th google.co.tz google.co.ug google.co.uk google.co.uz google.co.ve google.co.vi google.co.za google.co.zm google.co.zw -google.com google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn  google.cv  google.cz  google.de  google.dj  google.dk  google.dm  google.dz  google.ee  google.es  google.fi  google.fm  google.fr  google.ga  google.ge  google.gg  google.gl  google.gm  google.gr  google.gy  google.hn  google.hr  google.ht  google.hu  google.ie  google.im  google.iq  google.is  google.it  google.je  google.jo  google.kg  google.ki  google.kz  google.la  google.li  google.lk  google.lt  google.lu  google.lv  google.md  google.me  google.mg  google.mk  google.ml  google.mn  google.ms  google.mu  google.mv  google.mw  google.ne  google.nl  google.no  google.nr  google.nu  google.pl  google.pn  google.ps  google.pt  google.ro  google.rs  google.ru  google.rw  google.sc  google.se  google.sh  google.si  google.sk  google.sm  google.sn  google.so  google.sr  google.st  google.td  google.tg  google.tl  google.tm  google.tn  google.to  google.tt  google.vg  google.vu  google.ws 0emm.com  1e100.net  1ucrs.com -466453.com abc.xyz adgoogle.net -admeld.comangulardart.org -api.ai -apigee.com appbridge.ca appbridge.io appbridge.it appspot.com -apture.com area120.com -asp-cc.com autodraw.com bandpage.combaselinestudy.combaselinestudy.org bazel.build bdn.devbeatthatquote.com  blink.org blogblog.com blogger.combrocaproject.com -brotli.org bumpshare.com -bumptop.ca bumptop.com bumptop.net bumptop.org bumptunes.comcampuslondon.com certificate-transparency.org -chrome.comchromebook.comchromecast.com chromeos.dev chromium.orgchronicle.securitychroniclesec.comcloudburstresearch.comcloudfunctions.netcloudrobotics.comcobrasearch.com codespot.com conscrypt.com conscrypt.orgcookiechoices.org  coova.com  coova.net  coova.orgcrossmediapanel.com crr.com  cs4hs.comdartsearch.netdataliberation.org  debug.comdebugproject.com deepmind.comdevsitetest.howdialogflow.comdigitalassetlinks.org episodic.comfeedburner.com -fflick.comfinanceleadsonline.comfirebaseapp.comfirebaseio.com -foofle.com froogle.com fuchsia.dev  g-tun.comg.cn -cng.co g.dev -g.page gateway.devgerritcodereview.comgetbumptop.com ggoogle.com gipscorp.com gkecnapps.cn -cn globaledu.org  gmail.com gmodules.com  gogle.com -gogole.comgonglchuangl.net -goo.gl -googel.com -googil.com  googl.comgoogle-syndication.com google.berlin -google.dev -google.net -google.orggoogle.ventures"googleacquisitionmigration.com googleapis.cn -cngoogleapis.comgoogleapps.comgooglearth.comgoogleblog.com googlebot.comgooglecapital.comgooglecert.netgooglecnapps.cn -cngooglecode.comgooglecommerce.comgooglecompare.co.ukgoogledanmark.comgoogledomains.comgoogledrive.com googlee.comgoogleearth.comgooglefiber.netgooglefinland.comgooglemail.comgooglemaps.comgooglepagecreator.comgooglephotos.comgoogleplay.comgoogleplus.comgooglesource.comgooglestore.comgooglesverige.comgoogleusercontent.comgoogleventures.com -googlr.com -goolge.com gooogle.com gridaware.app gsrc.io -gstatic.cn -cn gstatic.comgstaticcnapps.cn -cn -gsuite.com -gv.com gvt0.com gvt1.com gvt2.com gvt3.com gvt5.com gvt6.com gvt7.com gvt9.comhdrplusdata.org hindiweb.comhowtogetmo.co.ukhtml5rocks.com hwgo.comiamremarkable.org igoogle.com impermium.com -j2objc.orgjibemobile.com keyhole.comkeytransparency.comkeytransparency.fookeytransparency.org lanternal.com like.commadewithcode.com material.io mdialog.com meet.newmfg-inspector.commobileview.pagemoodstocks.com near.by nest.com nomulus.foo -oauthz.com on.here on2.comonefifteen.netonefifteen.orgoneworldmanystories.com openthread.io openweave.io orbitera.com  page.linkpagespeedmobilizer.com pageview.mobi panoramio.compartylikeits1986.orgpaxlicense.org -picasa.com picasaweb.com picasaweb.net picasaweb.org -picnik.com pittpatt.com -pixate.com postini.comprojectara.comprojectbaseline.compublishproxy.comquestvisual.comquickoffice.com quiksee.com -revolv.comridepenguin.com run.appsavethedate.foo -saynow.com schemer.comscreenwisetrends.comscreenwisetrendspanel.com snapseed.com solveforx.com -stadia.devstcroixmosquito.comstcroixmosquitoproject.comstudywatchbyverily.comstudywatchbyverily.orgstxmosquito.comstxmosquitoproject.comstxmosquitoproject.netstxmosquitoproject.org synergyse.comtensorflow.org  tfhub.devthecleversense.comthegooglestore.comthinkquarterly.co.ukthinkquarterly.comthinkwithgoogle.com tiltbrush.com txcloud.net  txvia.comunfiltered.news useplannr.comusvimosquito.comusvimosquitoproject.comvelostrata.com -verily.comverilylifesciences.comverilystudyhub.comverilystudywatch.comverilystudywatch.org -wallet.com  waymo.com waze.com web.app web.devwebappfieldguide.comwebmproject.orgwebpkgcache.com -webrtc.orgweltweitwachsen.dewhatbrowser.org widevine.comwithgoogle.com womenwill.comwomenwill.com.br womenwill.id womenwill.in womenwill.mx  x.company -x.team xn--9kr7l.comxn--9trs65b.comxn--flw351e.comxn--ggle-55da.comxn--gogl-0nd52e.comxn--gogl-1nd42e.comxn--ngstr-lra8j.com xplr.cozukunftswerkstatt.de265.com -cn2mdn.net -cn adservice.google.com -cnapp-measurement.com -cn beacons.gcp.gvt2.com -cnbeacons.gvt2.com -cnbeacons3.gvt2.com -cn c.admob.com -cn(c.android.clients.google.com -cn!cache.pack.google.com -cn%clickserve.dartsearch.net -cn)clientservices.googleapis.com -cncorp.google.com -cn crl.pki.goog -cn"csi-china.l.google.com -cn dl.google.com -cndl.l.google.com -cndoubleclick.net -cn-!firebase-settings.crashlytics.com -cn fonts.googleapis.com -cn google-analytics.com -cn googleadservices.com -cngoogleanalytics.com -cn!googlesyndication.com -cn googletagmanager.com -cn!googletagservices.com -cngtm.oasisfeng.com -cn!imasdk.googleapis.com -cn kh.google.com -cn ocsp.pki.goog -cn, pagead-googlehosted.l.google.com -cn!pki-goog.l.google.com -cn recaptcha.net -cnredirector.gvt1.com -cn)safebrowsing-cache.google.com -cn'safebrowsing.googleapis.com -cn$settings.crashlytics.com -cn-!ssl-google-analytics.l.google.com -cn%toolbarqueries.google.com -cntools.google.com -cntools.l.google.com -cn$translate.googleapis.com -cn!update.googleapis.com -cn-!www-googletagmanager.l.google.com -cnwww.recaptcha.net -cn0$^khm([0-3]|db)?\.google(apis)?\.com$ -cn - - -GOOGLE-ADS2mdn.net -ads admob.com -ads adsense.com -ads'adsensecustomsearchads.com -ads%adsenseformobileapps.com -ads$advertisercommunity.com -ads%advertiserscommunity.com -ads"adwords-community.com -ads adwords.com -adsadwordsexpress.com -ads app-measurement.com -ads&clickserver.googleads.com -adsdoubleclick.com -adsdoubleclick.net -ads!google-analytics.com -adsgoogleadapis.com -ads!googleadservices.com -ads googleanalytics.com -adsgoogleoptimize.com -ads"googlesyndication.com -ads!googletagmanager.com -ads"googletagservices.com -ads'googletraveladservices.com -ads -urchin.com -ads>1^adservice\.google\.([a-z]{2}|com?)(\.[a-z]{2})?$ -ads -3 -ENTRUST entrust.netentrustdatacard.com -* -GITBOOK gitbook.com -gitbook.io - -TIPDM -tipdim.org - -TLD-CNcn citic baidu -unicomsohu -xn--fiqs8s -xn--fiqz9s xn--1qqw23a xn--xhq521b xn--8y0a063a xn--6frz82g -xn--fiq64b xn--estv75g xn--vuq861b xn--zfr164b - -HANYI hellofont.cnhellowebfont.com0,hellofontpreview.oss-cn-beijing.aliyuncs.com-)hellowebfonts.oss-cn-beijing.aliyuncs.com hanyi.com.cnfontstar.com.cn -' -MOJI moji.com mojichina.com -7 -SCP scp-wiki.net  scpdb.org scpwiki.com - -CNKI cnki.net -1 - LIBERAPAY liberapay.com liberapay.org -; -UBERuber-assets.com uber.com ubereats.com - - CHINAMOBILE 10086.cn 139.comchinamobile.comchinamobileltd.com migucloud.com migu.cn -cmvideo.cn miguvideo.com andfx.cn  andfx.net -cmicrwx.cncmpassport.comfetion-portal.com fetionpic.com mmarket.com mmarket6.com - - FASTSTONE faststone.org - -ISGD is.gdv.gd - -NETFLAV netflav.com \ No newline at end of file diff --git a/v2rayN/v2ray-windows-64/vpoint_socks_vmess.json b/v2rayN/v2ray-windows-64/vpoint_socks_vmess.json deleted file mode 100644 index 789cd27..0000000 --- a/v2rayN/v2ray-windows-64/vpoint_socks_vmess.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "log": { - "loglevel": "warning" - }, - "inbounds": [{ - "port": 1080, - "listen": "127.0.0.1", - "protocol": "socks", - "settings": { - "auth": "noauth", - "udp": false, - "ip": "127.0.0.1" - } - }], - "outbounds": [{ - "protocol": "freedom", - "settings": {}, - "tag": "direct" - }], - "policy": { - "levels": { - "0": {"uplinkOnly": 0} - } - } -} diff --git a/v2rayN/v2ray-windows-64/vpoint_vmess_freedom.json b/v2rayN/v2ray-windows-64/vpoint_vmess_freedom.json deleted file mode 100644 index de51e9f..0000000 --- a/v2rayN/v2ray-windows-64/vpoint_vmess_freedom.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "inbounds": [{ - "port": 10086, - "protocol": "vmess", - "settings": { - "clients": [ - { - "id": "23ad6b10-8d1a-40f7-8ad0-e3e35cd38297", - "level": 1, - "alterId": 64 - } - ] - } - }], - "outbounds": [{ - "protocol": "freedom", - "settings": {} - },{ - "protocol": "blackhole", - "settings": {}, - "tag": "blocked" - }], - "routing": { - "rules": [ - { - "type": "field", - "ip": ["geoip:private"], - "outboundTag": "blocked" - } - ] - } -} diff --git a/v2rayN/v2rayN.csproj b/v2rayN/v2rayN.csproj deleted file mode 100644 index fd9269c..0000000 --- a/v2rayN/v2rayN.csproj +++ /dev/null @@ -1,479 +0,0 @@ - - - - - Debug - AnyCPU - {0A9785E6-D256-4B73-9757-4EF59955FD1E} - WinExe - Properties - v2rayN - v2rayN - v4.8 - 512 - - false - - - 发布\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 2 - 1.0.0.%2a - false - true - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - none - true - bin\Release\ - TRACE - prompt - 4 - false - - - v2rayN.ico - - - BD431FE78E8A6683106E7110882AE5C41CBF5C60 - - - v2rayN_TemporaryKey.pfx - - - false - - - false - - - - Custom - - - - - v2rayN.Program - - - true - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - 7.3 - prompt - - - bin\x64\Release\ - TRACE - true - x64 - 7.3 - prompt - - - Properties\app.manifest - - - - - - - - - - - - - - - - - - - - - - Form - - - AddServer6Form.cs - - - Form - - - AddServer4Form.cs - - - Component - - - Form - - - AddServer5Form.cs - - - Form - - - BaseServerForm.cs - - - Form - - - MainForm.cs - - - Form - - - SubSettingForm.cs - - - Form - - - AddServer2Form.cs - - - Form - - - AddServer3Form.cs - - - UserControl - - - QRCodeControl.cs - - - UserControl - - - SubSettingControl.cs - - - - - - - - - - - - - Component - - - - - - - - - True - True - Resources.resx - - - True - True - ResUI.zh-Hans.resx - - - True - True - ResUI.resx - - - Code - - - Form - - - AddServerForm.cs - - - Form - - - BaseForm.cs - - - - - - - - - - - Form - - - OptionSettingForm.cs - - - - - - - - - - - - AddServer2Form.cs - Designer - - - AddServer6Form.cs - Designer - - - AddServer6Form.cs - Designer - - - AddServer4Form.cs - Designer - - - AddServer4Form.cs - Designer - - - AddServer3Form.cs - Designer - - - AddServer5Form.cs - Designer - - - AddServer5Form.cs - Designer - - - AddServerForm.cs - Designer - - - BaseServerForm.cs - - - MainForm.cs - Designer - - - MainForm.cs - Designer - - - OptionSettingForm.cs - - - QRCodeControl.cs - Designer - - - SubSettingControl.cs - Designer - - - SubSettingControl.cs - - - SubSettingForm.cs - Designer - - - AddServerForm.cs - Designer - - - BaseForm.cs - - - OptionSettingForm.cs - Designer - - - QRCodeControl.cs - Designer - - - AddServer2Form.cs - Designer - - - AddServer3Form.cs - Designer - - - SubSettingForm.cs - - - ResXFileCodeGenerator - Designer - Resources.Designer.cs - - - Designer - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - - - - ResXFileCodeGenerator - ResUI.zh-Hans.Designer.cs - Designer - - - ResXFileCodeGenerator - ResUI.Designer.cs - Designer - - - - - - - - - - - - - False - Microsoft .NET Framework 4 %28x86 和 x64%29 - true - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - false - - - False - Windows Installer 4.5 - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3.11.4 - - - 2.27.0 - - - 2.27.0 - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - 12.0.3 - - - 0.16.5 - - - - - copy /y $(SolutionDir)v2rayUpgrade\$(OutDir)* $(TargetDir) - -del $(TargetDir)*.xml $(TargetDir)*.so $(TargetDir)*.dylib -if not "$(ConfigurationName)" == "Debug" del $(TargetDir)*.pdb - - - - \ No newline at end of file diff --git a/v2rayN/v2rayN.csproj.user b/v2rayN/v2rayN.csproj.user deleted file mode 100644 index 778969a..0000000 --- a/v2rayN/v2rayN.csproj.user +++ /dev/null @@ -1,22 +0,0 @@ - - - - 发布\ - - - - - - zh-CN - false - ProjectFiles - - - false - - - Project - - - - \ No newline at end of file diff --git a/v2rayN/v2rayN.ico b/v2rayN/v2rayN.ico deleted file mode 100644 index 2a2f85a..0000000 Binary files a/v2rayN/v2rayN.ico and /dev/null differ diff --git a/v2rayN/v2rayN.sln b/v2rayN/v2rayN.sln new file mode 100755 index 0000000..df0929a --- /dev/null +++ b/v2rayN/v2rayN.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.3.32811.315 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "v2rayN", "v2rayN\v2rayN.csproj", "{6DE127CA-1763-4236-B297-D2EF9CB2EC9B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProtosLib", "ProtosLib\ProtosLib.csproj", "{C5F24BB0-9CC1-44DD-82FF-D545F081819B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PacLib", "PacLib\PacLib.csproj", "{EE4E6CD8-8353-446B-8F29-A841A02AE5EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "v2rayUpgrade", "v2rayUpgrade\v2rayUpgrade.csproj", "{3CD0B9E8-331B-42C6-A395-4DA0FD4BC8EB}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6DE127CA-1763-4236-B297-D2EF9CB2EC9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6DE127CA-1763-4236-B297-D2EF9CB2EC9B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6DE127CA-1763-4236-B297-D2EF9CB2EC9B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6DE127CA-1763-4236-B297-D2EF9CB2EC9B}.Release|Any CPU.Build.0 = Release|Any CPU + {C5F24BB0-9CC1-44DD-82FF-D545F081819B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5F24BB0-9CC1-44DD-82FF-D545F081819B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5F24BB0-9CC1-44DD-82FF-D545F081819B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5F24BB0-9CC1-44DD-82FF-D545F081819B}.Release|Any CPU.Build.0 = Release|Any CPU + {EE4E6CD8-8353-446B-8F29-A841A02AE5EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE4E6CD8-8353-446B-8F29-A841A02AE5EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE4E6CD8-8353-446B-8F29-A841A02AE5EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE4E6CD8-8353-446B-8F29-A841A02AE5EC}.Release|Any CPU.Build.0 = Release|Any CPU + {3CD0B9E8-331B-42C6-A395-4DA0FD4BC8EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3CD0B9E8-331B-42C6-A395-4DA0FD4BC8EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3CD0B9E8-331B-42C6-A395-4DA0FD4BC8EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3CD0B9E8-331B-42C6-A395-4DA0FD4BC8EB}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {43E06CBD-3DA9-40A3-8E4D-F0943CB0DD32} + EndGlobalSection +EndGlobal diff --git a/v2rayN/v2rayN/App.xaml b/v2rayN/v2rayN/App.xaml new file mode 100755 index 0000000..de82e83 --- /dev/null +++ b/v2rayN/v2rayN/App.xaml @@ -0,0 +1,161 @@ + + + + + + + + 26 + 12 + 13 + 14 + 11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v2rayN/v2rayN/App.xaml.cs b/v2rayN/v2rayN/App.xaml.cs new file mode 100755 index 0000000..a857173 --- /dev/null +++ b/v2rayN/v2rayN/App.xaml.cs @@ -0,0 +1,93 @@ +using System.Diagnostics; +using System.Windows; +using System.Windows.Threading; +using v2rayN.Handler; +using v2rayN.Models; + +namespace v2rayN +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + public static EventWaitHandle ProgramStarted; + private static Config _config; + + public App() + { + // Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly()); + this.DispatcherUnhandledException += App_DispatcherUnhandledException; + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; + TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; + } + + /// + /// 只打开一个进程 + /// + /// + protected override void OnStartup(StartupEventArgs e) + { + var exePathKey = Utils.GetMD5(Utils.GetExePath()); + + var rebootas = (e.Args ?? new string[] { }).Any(t => t == Global.RebootAs); + ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, exePathKey, out bool bCreatedNew); + if (!rebootas && !bCreatedNew) + { + ProgramStarted.Set(); + Environment.Exit(0); + return; + } + + Logging.Setup(); + Init(); + Logging.LoggingEnabled(_config.guiItem.enableLog); + Logging.SaveLog($"v2rayN start up | {Utils.GetVersion()} | {Utils.GetExePath()}"); + Logging.ClearLogs(); + + Thread.CurrentThread.CurrentUICulture = new(_config.uiItem.currentLanguage); + + base.OnStartup(e); + } + + private void Init() + { + if (ConfigHandler.LoadConfig(ref _config) != 0) + { + UI.Show($"Loading GUI configuration file is abnormal,please restart the application{Environment.NewLine}加载GUI配置文件异常,请重启应用"); + Environment.Exit(0); + return; + } + //if (RuntimeInformation.ProcessArchitecture != Architecture.X86 && RuntimeInformation.ProcessArchitecture != Architecture.X64) + //{ + // _config.guiItem.enableStatistics = false; + //} + } + + private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) + { + Logging.SaveLog("App_DispatcherUnhandledException", e.Exception); + e.Handled = true; + } + + private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + if (e.ExceptionObject != null) + { + Logging.SaveLog("CurrentDomain_UnhandledException", (Exception)e.ExceptionObject!); + } + } + + private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) + { + Logging.SaveLog("TaskScheduler_UnobservedTaskException", e.Exception); + } + + protected override void OnExit(ExitEventArgs e) + { + Logging.SaveLog("OnExit"); + base.OnExit(e); + Process.GetCurrentProcess().Kill(); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/AssemblyInfo.cs b/v2rayN/v2rayN/AssemblyInfo.cs new file mode 100755 index 0000000..4f943de --- /dev/null +++ b/v2rayN/v2rayN/AssemblyInfo.cs @@ -0,0 +1,10 @@ +using System.Windows; + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] \ No newline at end of file diff --git a/v2rayN/v2rayN/Base/MyDGTextColumn.cs b/v2rayN/v2rayN/Base/MyDGTextColumn.cs new file mode 100755 index 0000000..427ffac --- /dev/null +++ b/v2rayN/v2rayN/Base/MyDGTextColumn.cs @@ -0,0 +1,9 @@ +using System.Windows.Controls; + +namespace v2rayN.Base +{ + internal class MyDGTextColumn : DataGridTextColumn + { + public string ExName { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/DownloaderHelper.cs b/v2rayN/v2rayN/Common/DownloaderHelper.cs new file mode 100755 index 0000000..ddfe381 --- /dev/null +++ b/v2rayN/v2rayN/Common/DownloaderHelper.cs @@ -0,0 +1,181 @@ +using Downloader; +using System.IO; +using System.Net; + +namespace v2rayN +{ + internal class DownloaderHelper + { + private static readonly Lazy _instance = new(() => new()); + public static DownloaderHelper Instance => _instance.Value; + + public async Task DownloadStringAsync(IWebProxy? webProxy, string url, string? userAgent, int timeout) + { + if (Utils.IsNullOrEmpty(url)) + { + return null; + } + + Uri uri = new(url); + //Authorization Header + var headers = new WebHeaderCollection(); + if (!Utils.IsNullOrEmpty(uri.UserInfo)) + { + headers.Add(HttpRequestHeader.Authorization, "Basic " + Utils.Base64Encode(uri.UserInfo)); + } + + var downloadOpt = new DownloadConfiguration() + { + Timeout = timeout * 1000, + MaxTryAgainOnFailover = 2, + RequestConfiguration = + { + Headers = headers, + UserAgent = userAgent, + Timeout = timeout * 1000, + Proxy = webProxy + } + }; + + using var downloader = new DownloadService(downloadOpt); + downloader.DownloadFileCompleted += (sender, value) => + { + if (value.Error != null) + { + throw value.Error; + } + }; + + using var cts = new CancellationTokenSource(); + using var stream = await downloader.DownloadFileTaskAsync(address: url, cts.Token).WaitAsync(TimeSpan.FromSeconds(timeout), cts.Token); + using StreamReader reader = new(stream); + + downloadOpt = null; + + return reader.ReadToEnd(); + } + + public async Task DownloadDataAsync4Speed(IWebProxy webProxy, string url, IProgress progress, int timeout) + { + if (Utils.IsNullOrEmpty(url)) + { + throw new ArgumentNullException(nameof(url)); + } + + var downloadOpt = new DownloadConfiguration() + { + Timeout = timeout * 1000, + MaxTryAgainOnFailover = 2, + RequestConfiguration = + { + Timeout= timeout * 1000, + Proxy = webProxy + } + }; + + DateTime totalDatetime = DateTime.Now; + int totalSecond = 0; + var hasValue = false; + double maxSpeed = 0; + using var downloader = new DownloadService(downloadOpt); + //downloader.DownloadStarted += (sender, value) => + //{ + // if (progress != null) + // { + // progress.Report("Start download data..."); + // } + //}; + downloader.DownloadProgressChanged += (sender, value) => + { + TimeSpan ts = (DateTime.Now - totalDatetime); + if (progress != null && ts.Seconds > totalSecond) + { + hasValue = true; + totalSecond = ts.Seconds; + if (value.BytesPerSecondSpeed > maxSpeed) + { + maxSpeed = value.BytesPerSecondSpeed; + var speed = (maxSpeed / 1000 / 1000).ToString("#0.0"); + progress.Report(speed); + } + } + }; + downloader.DownloadFileCompleted += (sender, value) => + { + if (progress != null) + { + if (!hasValue && value.Error != null) + { + progress.Report(value.Error?.Message); + } + } + }; + //progress.Report("......"); + using var cts = new CancellationTokenSource(); + cts.CancelAfter(timeout * 1000); + using var stream = await downloader.DownloadFileTaskAsync(address: url, cts.Token); + + downloadOpt = null; + } + + public async Task DownloadFileAsync(IWebProxy? webProxy, string url, string fileName, IProgress progress, int timeout) + { + if (Utils.IsNullOrEmpty(url)) + { + throw new ArgumentNullException(nameof(url)); + } + if (Utils.IsNullOrEmpty(fileName)) + { + throw new ArgumentNullException(nameof(fileName)); + } + if (File.Exists(fileName)) + { + File.Delete(fileName); + } + + var downloadOpt = new DownloadConfiguration() + { + Timeout = timeout * 1000, + MaxTryAgainOnFailover = 2, + RequestConfiguration = + { + Timeout= timeout * 1000, + Proxy = webProxy + } + }; + + var progressPercentage = 0; + var hasValue = false; + using var downloader = new DownloadService(downloadOpt); + downloader.DownloadStarted += (sender, value) => + { + progress?.Report(0); + }; + downloader.DownloadProgressChanged += (sender, value) => + { + hasValue = true; + var percent = (int)value.ProgressPercentage;// Convert.ToInt32((totalRead * 1d) / (total * 1d) * 100); + if (progressPercentage != percent && percent % 10 == 0) + { + progressPercentage = percent; + progress.Report(percent); + } + }; + downloader.DownloadFileCompleted += (sender, value) => + { + if (progress != null) + { + if (hasValue && value.Error == null) + { + progress.Report(101); + } + } + }; + + using var cts = new CancellationTokenSource(); + await downloader.DownloadFileTaskAsync(url, fileName, cts.Token).WaitAsync(TimeSpan.FromSeconds(timeout), cts.Token); + + downloadOpt = null; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/FileManager.cs b/v2rayN/v2rayN/Common/FileManager.cs new file mode 100755 index 0000000..b721f5d --- /dev/null +++ b/v2rayN/v2rayN/Common/FileManager.cs @@ -0,0 +1,90 @@ +using System.IO; +using System.IO.Compression; +using System.Text; + +namespace v2rayN +{ + public static class FileManager + { + public static bool ByteArrayToFile(string fileName, byte[] content) + { + try + { + File.WriteAllBytes(fileName, content); + return true; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return false; + } + + public static void UncompressedFile(string fileName, byte[] content) + { + try + { + using FileStream fs = File.Create(fileName); + using GZipStream input = new(new MemoryStream(content), CompressionMode.Decompress, false); + input.CopyTo(fs); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + public static string NonExclusiveReadAllText(string path) + { + return NonExclusiveReadAllText(path, Encoding.Default); + } + + public static string NonExclusiveReadAllText(string path, Encoding encoding) + { + try + { + using FileStream fs = new(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + using StreamReader sr = new(fs, encoding); + return sr.ReadToEnd(); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + throw; + } + } + + public static bool ZipExtractToFile(string fileName, string toPath, string ignoredName) + { + try + { + using ZipArchive archive = ZipFile.OpenRead(fileName); + foreach (ZipArchiveEntry entry in archive.Entries) + { + if (entry.Length == 0) + { + continue; + } + try + { + if (!Utils.IsNullOrEmpty(ignoredName) && entry.Name.Contains(ignoredName)) + { + continue; + } + entry.ExtractToFile(Path.Combine(toPath, entry.Name), true); + } + catch (IOException ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return false; + } + return true; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/HttpClientHelper.cs b/v2rayN/v2rayN/Common/HttpClientHelper.cs new file mode 100755 index 0000000..1c338b6 --- /dev/null +++ b/v2rayN/v2rayN/Common/HttpClientHelper.cs @@ -0,0 +1,156 @@ +using System.IO; +using System.Net.Http; +using System.Net.Mime; +using System.Text; + +namespace v2rayN +{ + /// + /// + public class HttpClientHelper + { + private static readonly Lazy _instance = new(() => + { + HttpClientHandler handler = new() { UseCookies = false }; + HttpClientHelper helper = new(new HttpClient(handler)); + return helper; + }); + + public static HttpClientHelper Instance => _instance.Value; + private readonly HttpClient httpClient; + + private HttpClientHelper(HttpClient httpClient) => this.httpClient = httpClient; + + public async Task GetAsync(string url) + { + if (Utils.IsNullOrEmpty(url)) return null; + return await httpClient.GetStringAsync(url); + } + + public async Task GetAsync(HttpClient client, string url, CancellationToken token = default) + { + if (Utils.IsNullOrEmpty(url)) return null; + return await client.GetStringAsync(url, token); + } + + public async Task PutAsync(string url, Dictionary headers) + { + var jsonContent = JsonUtils.Serialize(headers); + var content = new StringContent(jsonContent, Encoding.UTF8, MediaTypeNames.Application.Json); + + var result = await httpClient.PutAsync(url, content); + } + + public static async Task DownloadFileAsync(HttpClient client, string url, string fileName, IProgress? progress, CancellationToken token = default) + { + ArgumentNullException.ThrowIfNull(url); + ArgumentNullException.ThrowIfNull(fileName); + if (File.Exists(fileName)) File.Delete(fileName); + + using var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, token); + + if (!response.IsSuccessStatusCode) throw new Exception(response.StatusCode.ToString()); + + var total = response.Content.Headers.ContentLength ?? -1L; + var canReportProgress = total != -1 && progress != null; + + using var stream = await response.Content.ReadAsStreamAsync(token); + using var file = File.Create(fileName); + var totalRead = 0L; + var buffer = new byte[1024 * 1024]; + var progressPercentage = 0; + + while (true) + { + token.ThrowIfCancellationRequested(); + + var read = await stream.ReadAsync(buffer, token); + totalRead += read; + + if (read == 0) break; + file.Write(buffer, 0, read); + + if (canReportProgress) + { + var percent = (int)(100.0 * totalRead / total); + //if (progressPercentage != percent && percent % 10 == 0) + { + progressPercentage = percent; + progress?.Report(percent); + } + } + } + if (canReportProgress) + { + progress?.Report(101); + } + } + + public async Task DownloadDataAsync4Speed(HttpClient client, string url, IProgress progress, CancellationToken token = default) + { + if (Utils.IsNullOrEmpty(url)) + { + throw new ArgumentNullException(nameof(url)); + } + + var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, token); + + if (!response.IsSuccessStatusCode) + { + throw new Exception(response.StatusCode.ToString()); + } + + //var total = response.Content.Headers.ContentLength.HasValue ? response.Content.Headers.ContentLength.Value : -1L; + //var canReportProgress = total != -1 && progress != null; + + using var stream = await response.Content.ReadAsStreamAsync(token); + var totalRead = 0L; + var buffer = new byte[1024 * 64]; + var isMoreToRead = true; + string progressSpeed = string.Empty; + DateTime totalDatetime = DateTime.Now; + int totalSecond = 0; + + do + { + if (token.IsCancellationRequested) + { + if (totalRead > 0) + { + return; + } + else + { + token.ThrowIfCancellationRequested(); + } + } + + var read = await stream.ReadAsync(buffer, token); + + if (read == 0) + { + isMoreToRead = false; + } + else + { + var data = new byte[read]; + buffer.ToList().CopyTo(0, data, 0, read); + + totalRead += read; + + TimeSpan ts = (DateTime.Now - totalDatetime); + if (progress != null && ts.Seconds > totalSecond) + { + totalSecond = ts.Seconds; + var speed = (totalRead * 1d / ts.TotalMilliseconds / 1000).ToString("#0.0"); + if (progressSpeed != speed) + { + progressSpeed = speed; + progress.Report(speed); + } + } + } + } while (isMoreToRead); + } + } +} \ No newline at end of file diff --git a/v2rayN/Tool/Job.cs b/v2rayN/v2rayN/Common/Job.cs old mode 100644 new mode 100755 similarity index 89% rename from v2rayN/Tool/Job.cs rename to v2rayN/v2rayN/Common/Job.cs index e2569b7..c25a222 --- a/v2rayN/Tool/Job.cs +++ b/v2rayN/v2rayN/Common/Job.cs @@ -1,14 +1,13 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using System.Runtime.InteropServices; - namespace v2rayN { /* * See: * http://stackoverflow.com/questions/6266820/working-example-of-createjobobject-setinformationjobobject-pinvoke-in-net */ + public class Job : IDisposable { private IntPtr handle = IntPtr.Zero; @@ -17,12 +16,12 @@ public Job() { handle = CreateJobObject(IntPtr.Zero, null); IntPtr extendedInfoPtr = IntPtr.Zero; - JOBOBJECT_BASIC_LIMIT_INFORMATION info = new JOBOBJECT_BASIC_LIMIT_INFORMATION + JOBOBJECT_BASIC_LIMIT_INFORMATION info = new() { LimitFlags = 0x2000 }; - JOBOBJECT_EXTENDED_LIMIT_INFORMATION extendedInfo = new JOBOBJECT_EXTENDED_LIMIT_INFORMATION + JOBOBJECT_EXTENDED_LIMIT_INFORMATION extendedInfo = new() { BasicLimitInformation = info }; @@ -34,7 +33,7 @@ public Job() Marshal.StructureToPtr(extendedInfo, extendedInfoPtr, false); if (!SetInformationJobObject(handle, JobObjectInfoType.ExtendedLimitInformation, extendedInfoPtr, - (uint) length)) + (uint)length)) throw new Exception(string.Format("Unable to set information. Error: {0}", Marshal.GetLastWin32Error())); } @@ -53,7 +52,7 @@ public bool AddProcess(IntPtr processHandle) if (!succ) { - Utils.SaveLog("Failed to call AssignProcessToJobObject! GetLastError=" + Marshal.GetLastWin32Error()); + Logging.SaveLog("Failed to call AssignProcessToJobObject! GetLastError=" + Marshal.GetLastWin32Error()); } return succ; @@ -96,12 +95,12 @@ protected virtual void Dispose(bool disposing) Dispose(false); } - #endregion + #endregion IDisposable #region Interop [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] - private static extern IntPtr CreateJobObject(IntPtr a, string lpName); + private static extern IntPtr CreateJobObject(IntPtr a, string? lpName); [DllImport("kernel32.dll", SetLastError = true)] private static extern bool SetInformationJobObject(IntPtr hJob, JobObjectInfoType infoType, IntPtr lpJobObjectInfo, UInt32 cbJobObjectInfoLength); @@ -113,13 +112,13 @@ protected virtual void Dispose(bool disposing) [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CloseHandle(IntPtr hObject); - #endregion + #endregion Interop } #region Helper classes [StructLayout(LayoutKind.Sequential)] - struct IO_COUNTERS + internal struct IO_COUNTERS { public UInt64 ReadOperationCount; public UInt64 WriteOperationCount; @@ -129,9 +128,8 @@ struct IO_COUNTERS public UInt64 OtherTransferCount; } - [StructLayout(LayoutKind.Sequential)] - struct JOBOBJECT_BASIC_LIMIT_INFORMATION + internal struct JOBOBJECT_BASIC_LIMIT_INFORMATION { public Int64 PerProcessUserTimeLimit; public Int64 PerJobUserTimeLimit; @@ -153,7 +151,7 @@ public struct SECURITY_ATTRIBUTES } [StructLayout(LayoutKind.Sequential)] - struct JOBOBJECT_EXTENDED_LIMIT_INFORMATION + internal struct JOBOBJECT_EXTENDED_LIMIT_INFORMATION { public JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation; public IO_COUNTERS IoInfo; @@ -174,5 +172,5 @@ public enum JobObjectInfoType GroupInformation = 11 } - #endregion -} + #endregion Helper classes +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/JsonUtils.cs b/v2rayN/v2rayN/Common/JsonUtils.cs new file mode 100755 index 0000000..2198ba3 --- /dev/null +++ b/v2rayN/v2rayN/Common/JsonUtils.cs @@ -0,0 +1,132 @@ +using System.IO; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Text.Json.Serialization; + +namespace v2rayN +{ + internal class JsonUtils + { + /// + /// DeepCopy + /// + /// + /// + /// + public static T DeepCopy(T obj) + { + return Deserialize(Serialize(obj, false))!; + } + + /// + /// Deserialize to object + /// + /// + /// + /// + public static T? Deserialize(string? strJson) + { + try + { + if (string.IsNullOrWhiteSpace(strJson)) + { + return default; + } + return JsonSerializer.Deserialize(strJson); + } + catch + { + return default; + } + } + + /// + /// parse + /// + /// + /// + public static JsonNode? ParseJson(string strJson) + { + try + { + if (string.IsNullOrWhiteSpace(strJson)) + { + return null; + } + return JsonNode.Parse(strJson); + } + catch + { + //SaveLog(ex.Message, ex); + return null; + } + } + + /// + /// Serialize Object to Json string + /// + /// + /// + /// + public static string Serialize(object? obj, bool indented = true) + { + string result = string.Empty; + try + { + if (obj == null) + { + return result; + } + var options = new JsonSerializerOptions + { + WriteIndented = indented ? true : false, + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull + }; + result = JsonSerializer.Serialize(obj, options); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return result; + } + + /// + /// SerializeToNode + /// + /// + /// + public static JsonNode? SerializeToNode(object? obj) => JsonSerializer.SerializeToNode(obj); + + /// + /// Save as json file + /// + /// + /// + /// + /// + public static int ToFile(object? obj, string filePath, bool nullValue = true) + { + int result; + try + { + using FileStream file = File.Create(filePath); + + var options = new JsonSerializerOptions + { + WriteIndented = true, + DefaultIgnoreCondition = nullValue ? JsonIgnoreCondition.Never : JsonIgnoreCondition.WhenWritingNull + }; + + JsonSerializer.Serialize(file, obj, options); + result = 0; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + result = -1; + } + return result; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/Logging.cs b/v2rayN/v2rayN/Common/Logging.cs new file mode 100755 index 0000000..ba5b97e --- /dev/null +++ b/v2rayN/v2rayN/Common/Logging.cs @@ -0,0 +1,78 @@ +using NLog; +using NLog.Config; +using NLog.Targets; +using System.IO; + +namespace v2rayN +{ + public class Logging + { + public static void Setup() + { + LoggingConfiguration config = new(); + FileTarget fileTarget = new(); + config.AddTarget("file", fileTarget); + fileTarget.Layout = "${longdate}-${level:uppercase=true} ${message}"; + fileTarget.FileName = Utils.GetLogPath("${shortdate}.txt"); + config.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, fileTarget)); + LogManager.Configuration = config; + } + + public static void LoggingEnabled(bool enable) + { + if (!enable) + { + LogManager.SuspendLogging(); + } + } + + public static void ClearLogs() + { + Task.Run(() => + { + try + { + var now = DateTime.Now.AddMonths(-1); + var dir = Utils.GetLogPath(); + var files = Directory.GetFiles(dir, "*.txt"); + foreach (var filePath in files) + { + var file = new FileInfo(filePath); + if (file.CreationTime < now) + { + try + { + file.Delete(); + } + catch { } + } + } + } + catch { } + }); + } + + public static void SaveLog(string strContent) + { + if (LogManager.IsLoggingEnabled()) + { + var logger = LogManager.GetLogger("Log1"); + logger.Info(strContent); + } + } + + public static void SaveLog(string strTitle, Exception ex) + { + if (LogManager.IsLoggingEnabled()) + { + var logger = LogManager.GetLogger("Log2"); + logger.Debug($"{strTitle},{ex.Message}"); + logger.Debug(ex.StackTrace); + if (ex?.InnerException != null) + { + logger.Error(ex.InnerException); + } + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/QRCodeHelper.cs b/v2rayN/v2rayN/Common/QRCodeHelper.cs new file mode 100755 index 0000000..9b02a48 --- /dev/null +++ b/v2rayN/v2rayN/Common/QRCodeHelper.cs @@ -0,0 +1,104 @@ +using QRCoder; +using QRCoder.Xaml; +using System.Drawing; +using System.Windows.Interop; +using System.Windows; +using System.Windows.Media; +using ZXing.Common; +using ZXing.QrCode; +using ZXing.Windows.Compatibility; +using ZXing; + +namespace v2rayN +{ + /// + /// 含有QR码的描述类和包装编码和渲染 + /// + public class QRCodeHelper + { + public static DrawingImage? GetQRCode(string? strContent) + { + if (strContent is null) + { + return null; + } + try + { + QRCodeGenerator qrGenerator = new(); + QRCodeData qrCodeData = qrGenerator.CreateQrCode(strContent, QRCodeGenerator.ECCLevel.H); + XamlQRCode qrCode = new(qrCodeData); + DrawingImage qrCodeAsXaml = qrCode.GetGraphic(40); + return qrCodeAsXaml; + } + catch + { + return null; + } + } + + public static string ScanScreen(float dpiX, float dpiY) + { + try + { + var left = (int)(SystemParameters.WorkArea.Left); + var top = (int)(SystemParameters.WorkArea.Top); + var width = (int)(SystemParameters.WorkArea.Width / dpiX); + var height = (int)(SystemParameters.WorkArea.Height / dpiY); + + using Bitmap fullImage = new Bitmap(width, height); + using (Graphics g = Graphics.FromImage(fullImage)) + { + g.CopyFromScreen(left, top, 0, 0, fullImage.Size, CopyPixelOperation.SourceCopy); + } + int maxTry = 10; + for (int i = 0; i < maxTry; i++) + { + int marginLeft = (int)((double)fullImage.Width * i / 2.5 / maxTry); + int marginTop = (int)((double)fullImage.Height * i / 2.5 / maxTry); + Rectangle cropRect = new(marginLeft, marginTop, fullImage.Width - marginLeft * 2, fullImage.Height - marginTop * 2); + Bitmap target = new(width, height); + + double imageScale = (double)width / (double)cropRect.Width; + using (Graphics g = Graphics.FromImage(target)) + { + g.DrawImage(fullImage, new Rectangle(0, 0, target.Width, target.Height), + cropRect, + GraphicsUnit.Pixel); + } + + BitmapLuminanceSource source = new(target); + QRCodeReader reader = new(); + + BinaryBitmap bitmap = new(new HybridBinarizer(source)); + var result = reader.decode(bitmap); + if (result != null) + { + return result.Text; + } + else + { + BinaryBitmap bitmap2 = new(new HybridBinarizer(source.invert())); + var result2 = reader.decode(bitmap2); + if (result2 != null) + { + return result2.Text; + } + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return string.Empty; + } + + public static Tuple GetDpiXY(Window window) + { + IntPtr hWnd = new WindowInteropHelper(window).EnsureHandle(); + Graphics g = Graphics.FromHwnd(hWnd); + + return new(96 / g.DpiX, 96 / g.DpiY); + } + } +} \ No newline at end of file diff --git a/v2rayN/Tool/QueryableExtension.cs b/v2rayN/v2rayN/Common/QueryableExtension.cs old mode 100644 new mode 100755 similarity index 70% rename from v2rayN/Tool/QueryableExtension.cs rename to v2rayN/v2rayN/Common/QueryableExtension.cs index eefb04d..113f282 --- a/v2rayN/Tool/QueryableExtension.cs +++ b/v2rayN/v2rayN/Common/QueryableExtension.cs @@ -1,9 +1,7 @@ -using System; -using System.Linq; -using System.Linq.Expressions; +using System.Linq.Expressions; using System.Reflection; -namespace v2rayN.Tool +namespace v2rayN { public static class QueryableExtension { @@ -11,12 +9,13 @@ public static IOrderedQueryable OrderBy(this IQueryable query, string p { return _OrderBy(query, propertyName, false); } + public static IOrderedQueryable OrderByDescending(this IQueryable query, string propertyName) { return _OrderBy(query, propertyName, true); } - static IOrderedQueryable _OrderBy(IQueryable query, string propertyName, bool isDesc) + private static IOrderedQueryable _OrderBy(IQueryable query, string propertyName, bool isDesc) { string methodname = (isDesc) ? "OrderByDescendingInternal" : "OrderByInternal"; @@ -27,22 +26,25 @@ static IOrderedQueryable _OrderBy(IQueryable query, string propertyName return (IOrderedQueryable)method.Invoke(null, new object[] { query, memberProp }); } + public static IOrderedQueryable OrderByInternal(IQueryable query, PropertyInfo memberProperty) {//public - return query.OrderBy(_GetLamba(memberProperty)); + return query.OrderBy(_GetLambda(memberProperty)); } + public static IOrderedQueryable OrderByDescendingInternal(IQueryable query, PropertyInfo memberProperty) {//public - return query.OrderByDescending(_GetLamba(memberProperty)); + return query.OrderByDescending(_GetLambda(memberProperty)); } - static Expression> _GetLamba(PropertyInfo memberProperty) + + private static Expression> _GetLambda(PropertyInfo memberProperty) { if (memberProperty.PropertyType != typeof(TProp)) throw new Exception(); var thisArg = Expression.Parameter(typeof(T)); - var lamba = Expression.Lambda>(Expression.Property(thisArg, memberProperty), thisArg); + var lambda = Expression.Lambda>(Expression.Property(thisArg, memberProperty), thisArg); - return lamba; + return lambda; } } -} +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/SemanticVersion.cs b/v2rayN/v2rayN/Common/SemanticVersion.cs new file mode 100755 index 0000000..597ed97 --- /dev/null +++ b/v2rayN/v2rayN/Common/SemanticVersion.cs @@ -0,0 +1,180 @@ +namespace v2rayN +{ + public class SemanticVersion + { + private int major; + private int minor; + private int patch; + private string version; + + public SemanticVersion(int major, int minor, int patch) + { + this.major = major; + this.minor = minor; + this.patch = patch; + this.version = $"{major}.{minor}.{patch}"; + } + + public SemanticVersion(string version) + { + this.version = version.RemovePrefix('v'); + try + { + string[] parts = this.version.Split('.'); + if (parts.Length == 2) + { + this.major = int.Parse(parts[0]); + this.minor = int.Parse(parts[1]); + this.patch = 0; + } + else if (parts.Length == 3) + { + this.major = int.Parse(parts[0]); + this.minor = int.Parse(parts[1]); + this.patch = int.Parse(parts[2]); + } + else + { + throw new ArgumentException("Invalid version string"); + } + } + catch + { + this.major = 0; + this.minor = 0; + this.patch = 0; + //this.version = "0.0.0"; + } + } + + public override bool Equals(object? obj) + { + if (obj is SemanticVersion other) + { + return this.major == other.major && this.minor == other.minor && this.patch == other.patch; + } + else + { + return false; + } + } + + public override int GetHashCode() + { + return this.major.GetHashCode() ^ this.minor.GetHashCode() ^ this.patch.GetHashCode(); + } + + /// + /// Use ToVersionString(string? prefix) instead if possible. + /// + /// major.minor.patch + public override string ToString() + { + return this.version; + } + + public string ToVersionString(string? prefix = null) + { + if (prefix == null) + { + return this.version; + } + else + { + return $"{prefix}{this.version}"; + } + } + + public static bool operator ==(SemanticVersion v1, SemanticVersion v2) + { return v1.Equals(v2); } + + public static bool operator !=(SemanticVersion v1, SemanticVersion v2) + { return !v1.Equals(v2); } + + public static bool operator >=(SemanticVersion v1, SemanticVersion v2) + { return v1.GreaterEquals(v2); } + + public static bool operator <=(SemanticVersion v1, SemanticVersion v2) + { return v1.LessEquals(v2); } + + #region Private + + private bool GreaterEquals(SemanticVersion other) + { + if (this.major < other.major) + { + return false; + } + else if (this.major > other.major) + { + return true; + } + else + { + if (this.minor < other.minor) + { + return false; + } + else if (this.minor > other.minor) + { + return true; + } + else + { + if (this.patch < other.patch) + { + return false; + } + else if (this.patch > other.patch) + { + return true; + } + else + { + return true; + } + } + } + } + + private bool LessEquals(SemanticVersion other) + { + if (this.major < other.major) + { + return true; + } + else if (this.major > other.major) + { + return false; + } + else + { + if (this.minor < other.minor) + { + return true; + } + else if (this.minor > other.minor) + { + return false; + } + else + { + if (this.patch < other.patch) + { + return true; + } + else if (this.patch > other.patch) + { + return false; + } + else + { + return true; + } + } + } + } + + #endregion Private + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/SqliteHelper.cs b/v2rayN/v2rayN/Common/SqliteHelper.cs new file mode 100755 index 0000000..70beb81 --- /dev/null +++ b/v2rayN/v2rayN/Common/SqliteHelper.cs @@ -0,0 +1,123 @@ +using SQLite; +using System.Collections; + +namespace v2rayN +{ + public sealed class SQLiteHelper + { + private static readonly Lazy _instance = new(() => new()); + public static SQLiteHelper Instance => _instance.Value; + private string _connstr; + private SQLiteConnection _db; + private SQLiteAsyncConnection _dbAsync; + private static readonly object objLock = new(); + public readonly string _configDB = "guiNDB.db"; + + public SQLiteHelper() + { + _connstr = Utils.GetConfigPath(_configDB); + _db = new SQLiteConnection(_connstr, false); + _dbAsync = new SQLiteAsyncConnection(_connstr, false); + } + + public CreateTableResult CreateTable() + { + return _db.CreateTable(); + } + + public int Insert(object model) + { + return _db.Insert(model); + } + + public int InsertAll(IEnumerable models) + { + lock (objLock) + { + return _db.InsertAll(models); + } + } + + public async Task InsertAsync(object model) + { + return await _dbAsync.InsertAsync(model); + } + + public int Replace(object model) + { + lock (objLock) + { + return _db.InsertOrReplace(model); + } + } + + public async Task ReplaceAsync(object model) + { + return await _dbAsync.InsertOrReplaceAsync(model); + } + + public int Update(object model) + { + lock (objLock) + { + return _db.Update(model); + } + } + + public async Task UpdateAsync(object model) + { + return await _dbAsync.UpdateAsync(model); + } + + public int UpdateAll(IEnumerable models) + { + lock (objLock) + { + return _db.UpdateAll(models); + } + } + + public int Delete(object model) + { + lock (objLock) + { + return _db.Delete(model); + } + } + + public async Task DeleteAsync(object model) + { + return await _dbAsync.DeleteAsync(model); + } + + public List Query(string sql) where T : new() + { + return _db.Query(sql); + } + + public async Task> QueryAsync(string sql) where T : new() + { + return await _dbAsync.QueryAsync(sql); + } + + public int Execute(string sql) + { + return _db.Execute(sql); + } + + public async Task ExecuteAsync(string sql) + { + return await _dbAsync.ExecuteAsync(sql); + } + + public TableQuery Table() where T : new() + { + return _db.Table(); + } + + public AsyncTableQuery TableAsync() where T : new() + { + return _dbAsync.Table(); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/StringEx.cs b/v2rayN/v2rayN/Common/StringEx.cs new file mode 100755 index 0000000..9a751ce --- /dev/null +++ b/v2rayN/v2rayN/Common/StringEx.cs @@ -0,0 +1,94 @@ +using System.Diagnostics.CodeAnalysis; +using System.IO; + +namespace v2rayN +{ + internal static class StringEx + { + public static bool IsNullOrEmpty([NotNullWhen(false)] this string? value) + { + return string.IsNullOrEmpty(value); + } + + public static bool IsNullOrWhiteSpace([NotNullWhen(false)] this string? value) + { + return string.IsNullOrWhiteSpace(value); + } + + public static bool BeginWithAny(this string s, IEnumerable chars) + { + if (s.IsNullOrEmpty()) return false; + return chars.Contains(s[0]); + } + + public static bool IsWhiteSpace(this string value) + { + foreach (char c in value) + { + if (char.IsWhiteSpace(c)) continue; + + return false; + } + return true; + } + + public static IEnumerable NonWhiteSpaceLines(this TextReader reader) + { + string? line; + while ((line = reader.ReadLine()) != null) + { + if (line.IsWhiteSpace()) continue; + yield return line; + } + } + + public static string TrimEx(this string? value) + { + return value == null ? string.Empty : value.Trim(); + } + + public static string RemovePrefix(this string value, char prefix) + { + if (value.StartsWith(prefix)) + { + return value.Substring(1); + } + else + { + return value; + } + } + + public static string RemovePrefix(this string value, string prefix) + { + if (value.StartsWith(prefix)) + { + return value.Substring(prefix.Length); + } + else + { + return value; + } + } + + public static string UpperFirstChar(this string value) + { + if (string.IsNullOrEmpty(value)) + { + return string.Empty; + } + + return char.ToUpper(value[0]) + value.Substring(1); + } + + public static string AppendQuotes(this string value) + { + if (string.IsNullOrEmpty(value)) + { + return string.Empty; + } + + return $"\"{value}\""; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/UI.cs b/v2rayN/v2rayN/Common/UI.cs new file mode 100755 index 0000000..7b608e9 --- /dev/null +++ b/v2rayN/v2rayN/Common/UI.cs @@ -0,0 +1,39 @@ +using Microsoft.Win32; +using System.Windows; + +namespace v2rayN +{ + internal class UI + { + private static readonly string caption = "v2rayN"; + + public static void Show(string msg) + { + MessageBox.Show(msg, caption, MessageBoxButton.OK, MessageBoxImage.Information, MessageBoxResult.OK); + } + + public static MessageBoxResult ShowYesNo(string msg) + { + return MessageBox.Show(msg, caption, MessageBoxButton.YesNo, MessageBoxImage.Question); + } + + public static bool? OpenFileDialog(out string fileName, string filter) + { + fileName = string.Empty; + + var fileDialog = new OpenFileDialog + { + Multiselect = false, + Filter = filter + }; + + if (fileDialog.ShowDialog() != true) + { + return false; + } + fileName = fileDialog.FileName; + + return true; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Common/Utils.cs b/v2rayN/v2rayN/Common/Utils.cs new file mode 100755 index 0000000..286fac9 --- /dev/null +++ b/v2rayN/v2rayN/Common/Utils.cs @@ -0,0 +1,1128 @@ +using Microsoft.Win32; +using Microsoft.Win32.TaskScheduler; +using System.Collections.Specialized; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.IO.Compression; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Security.Principal; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows; +using System.Windows.Interop; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace v2rayN +{ + internal class Utils + { + #region 资源Json操作 + + /// + /// 获取嵌入文本资源 + /// + /// + /// + public static string GetEmbedText(string res) + { + string result = string.Empty; + + try + { + Assembly assembly = Assembly.GetExecutingAssembly(); + using Stream? stream = assembly.GetManifestResourceStream(res); + ArgumentNullException.ThrowIfNull(stream); + using StreamReader reader = new(stream); + result = reader.ReadToEnd(); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return result; + } + + /// + /// 取得存储资源 + /// + /// + public static string? LoadResource(string? res) + { + try + { + if (!File.Exists(res)) + { + return null; + } + return File.ReadAllText(res); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return null; + } + + #endregion 资源Json操作 + + #region 转换函数 + + /// + /// List转逗号分隔的字符串 + /// + /// + /// + public static string List2String(List lst, bool wrap = false) + { + try + { + if (lst == null) + { + return string.Empty; + } + if (wrap) + { + return string.Join("," + Environment.NewLine, lst); + } + else + { + return string.Join(",", lst); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return string.Empty; + } + } + + /// + /// 逗号分隔的字符串,转List + /// + /// + /// + public static List String2List(string str) + { + try + { + str = str.Replace(Environment.NewLine, ""); + return new List(str.Split(',', StringSplitOptions.RemoveEmptyEntries)); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return new List(); + } + } + + /// + /// 逗号分隔的字符串,先排序后转List + /// + /// + /// + public static List String2ListSorted(string str) + { + try + { + str = str.Replace(Environment.NewLine, ""); + List list = new(str.Split(',', StringSplitOptions.RemoveEmptyEntries)); + list.Sort(); + return list; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return new List(); + } + } + + /// + /// Base64编码 + /// + /// + /// + public static string Base64Encode(string plainText) + { + try + { + byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText); + return Convert.ToBase64String(plainTextBytes); + } + catch (Exception ex) + { + Logging.SaveLog("Base64Encode", ex); + return string.Empty; + } + } + + /// + /// Base64解码 + /// + /// + /// + public static string Base64Decode(string plainText) + { + try + { + plainText = plainText.Trim() + .Replace(Environment.NewLine, "") + .Replace("\n", "") + .Replace("\r", "") + .Replace('_', '/') + .Replace('-', '+') + .Replace(" ", ""); + + if (plainText.Length % 4 > 0) + { + plainText = plainText.PadRight(plainText.Length + 4 - plainText.Length % 4, '='); + } + + byte[] data = Convert.FromBase64String(plainText); + return Encoding.UTF8.GetString(data); + } + catch (Exception ex) + { + Logging.SaveLog("Base64Decode", ex); + return string.Empty; + } + } + + /// + /// 转Int + /// + /// + /// + public static int ToInt(object? obj) + { + try + { + return Convert.ToInt32(obj ?? string.Empty); + } + catch //(Exception ex) + { + //SaveLog(ex.Message, ex); + return 0; + } + } + + public static bool ToBool(object obj) + { + try + { + return Convert.ToBoolean(obj); + } + catch //(Exception ex) + { + //SaveLog(ex.Message, ex); + return false; + } + } + + public static string ToString(object obj) + { + try + { + return obj?.ToString() ?? string.Empty; + } + catch// (Exception ex) + { + //SaveLog(ex.Message, ex); + return string.Empty; + } + } + + /// + /// byte 转成 有两位小数点的 方便阅读的数据 + /// 比如 2.50 MB + /// + /// bytes + /// 转换之后的数据 + /// 单位 + public static void ToHumanReadable(long amount, out double result, out string unit) + { + uint factor = 1024u; + //long KBs = amount / factor; + long KBs = amount; + if (KBs > 0) + { + // multi KB + long MBs = KBs / factor; + if (MBs > 0) + { + // multi MB + long GBs = MBs / factor; + if (GBs > 0) + { + // multi GB + long TBs = GBs / factor; + if (TBs > 0) + { + result = TBs + ((GBs % factor) / (factor + 0.0)); + unit = "TB"; + return; + } + result = GBs + ((MBs % factor) / (factor + 0.0)); + unit = "GB"; + return; + } + result = MBs + ((KBs % factor) / (factor + 0.0)); + unit = "MB"; + return; + } + result = KBs + ((amount % factor) / (factor + 0.0)); + unit = "KB"; + return; + } + else + { + result = amount; + unit = "B"; + } + } + + public static string HumanFy(long amount) + { + ToHumanReadable(amount, out double result, out string unit); + return $"{string.Format("{0:f1}", result)} {unit}"; + } + + public static string UrlEncode(string url) + { + return Uri.EscapeDataString(url); + //return HttpUtility.UrlEncode(url); + } + + public static string UrlDecode(string url) + { + return Uri.UnescapeDataString(url); + //return HttpUtility.UrlDecode(url); + } + + public static NameValueCollection ParseQueryString(string query) + { + var result = new NameValueCollection(StringComparer.OrdinalIgnoreCase); + if (IsNullOrEmpty(query)) + { + return result; + } + + var parts = query[1..].Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries); + foreach (var part in parts) + { + var keyValue = part.Split(['=']); + if (keyValue.Length != 2) + { + continue; + } + var key = Uri.UnescapeDataString(keyValue[0]); + var val = Uri.UnescapeDataString(keyValue[1]); + + if (result[key] is null) + { + result.Add(key, val); + } + } + + return result; + } + + public static string GetMD5(string str) + { + byte[] byteOld = Encoding.UTF8.GetBytes(str); + byte[] byteNew = MD5.HashData(byteOld); + StringBuilder sb = new(32); + foreach (byte b in byteNew) + { + sb.Append(b.ToString("x2")); + } + return sb.ToString(); + } + + public static ImageSource IconToImageSource(Icon icon) + { + return Imaging.CreateBitmapSourceFromHIcon( + icon.Handle, + new System.Windows.Int32Rect(0, 0, icon.Width, icon.Height), + BitmapSizeOptions.FromEmptyOptions()); + } + + /// + /// idn to idc + /// + /// + /// + public static string GetPunycode(string url) + { + if (Utils.IsNullOrEmpty(url)) + { + return url; + } + try + { + Uri uri = new(url); + if (uri.Host == uri.IdnHost || uri.Host == $"[{uri.IdnHost}]") + { + return url; + } + else + { + return url.Replace(uri.Host, uri.IdnHost); + } + } + catch + { + return url; + } + } + + public static bool IsBase64String(string plainText) + { + var buffer = new Span(new byte[plainText.Length]); + return Convert.TryFromBase64String(plainText, buffer, out int _); + } + + public static string Convert2Comma(string text) + { + if (Utils.IsNullOrEmpty(text)) + { + return text; + } + return text.Replace(",", ",").Replace(Environment.NewLine, ","); + } + + #endregion 转换函数 + + #region 数据检查 + + /// + /// 判断输入的是否是数字 + /// + /// + /// + public static bool IsNumeric(string oText) + { + try + { + int var1 = ToInt(oText); + return true; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return false; + } + } + + /// + /// 文本 + /// + /// + /// + public static bool IsNullOrEmpty(string? text) + { + if (string.IsNullOrWhiteSpace(text)) + { + return true; + } + if (text == "null") + { + return true; + } + return false; + } + + /// + /// 验证IP地址是否合法 + /// + /// + public static bool IsIP(string ip) + { + //如果为空 + if (IsNullOrEmpty(ip)) + { + return false; + } + + //清除要验证字符串中的空格 + //ip = ip.TrimEx(); + //可能是CIDR + if (ip.IndexOf(@"/") > 0) + { + string[] cidr = ip.Split('/'); + if (cidr.Length == 2) + { + if (!IsNumeric(cidr[0])) + { + return false; + } + ip = cidr[0]; + } + } + + //模式字符串 + string pattern = @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$"; + + //验证 + return IsMatch(ip, pattern); + } + + /// + /// 验证Domain地址是否合法 + /// + /// + public static bool IsDomain(string? domain) + { + //如果为空 + if (IsNullOrEmpty(domain)) + { + return false; + } + + return Uri.CheckHostName(domain) == UriHostNameType.Dns; + } + + /// + /// 验证输入字符串是否与模式字符串匹配,匹配返回true + /// + /// 输入字符串 + /// 模式字符串 + public static bool IsMatch(string input, string pattern) + { + return Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase); + } + + public static bool IsIpv6(string ip) + { + if (IPAddress.TryParse(ip, out IPAddress? address)) + { + return address.AddressFamily switch + { + AddressFamily.InterNetwork => false, + AddressFamily.InterNetworkV6 => true, + _ => false, + }; + } + return false; + } + + #endregion 数据检查 + + #region 测速 + + /// + /// 取得本机 IP Address + /// + /// + //public static List GetHostIPAddress() + //{ + // List lstIPAddress = new List(); + // try + // { + // IPHostEntry IpEntry = Dns.GetHostEntry(Dns.GetHostName()); + // foreach (IPAddress ipa in IpEntry.AddressList) + // { + // if (ipa.AddressFamily == AddressFamily.InterNetwork) + // lstIPAddress.Add(ipa.ToString()); + // } + // } + // catch (Exception ex) + // { + // SaveLog(ex.Message, ex); + // } + // return lstIPAddress; + //} + + public static void SetSecurityProtocol(bool enableSecurityProtocolTls13) + { + if (enableSecurityProtocolTls13) + { + ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13; + } + else + { + ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; + } + ServicePointManager.DefaultConnectionLimit = 256; + } + + public static bool PortInUse(int port) + { + bool inUse = false; + try + { + IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); + IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners(); + + var lstIpEndPoints = new List(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners()); + + foreach (IPEndPoint endPoint in ipEndPoints) + { + if (endPoint.Port == port) + { + inUse = true; + break; + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return inUse; + } + + public static int GetFreePort(int defaultPort = 9090) + { + try + { + if (!Utils.PortInUse(defaultPort)) + { + return defaultPort; + } + + TcpListener l = new(IPAddress.Loopback, 0); + l.Start(); + int port = ((IPEndPoint)l.LocalEndpoint).Port; + l.Stop(); + return port; + } + catch + { + } + return 59090; + } + + #endregion 测速 + + #region 杂项 + + /// + /// 取得版本 + /// + /// + public static string GetVersion(bool blFull = true) + { + try + { + string location = GetExePath(); + if (blFull) + { + return string.Format("v2rayN - V{0} - {1}", + FileVersionInfo.GetVersionInfo(location).FileVersion?.ToString(), + File.GetLastWriteTime(location).ToString("yyyy/MM/dd")); + } + else + { + return string.Format("v2rayN/{0}", + FileVersionInfo.GetVersionInfo(location).FileVersion?.ToString()); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return string.Empty; + } + } + + /// + /// 获取剪贴板数 + /// + /// + public static string? GetClipboardData() + { + string? strData = string.Empty; + try + { + IDataObject data = Clipboard.GetDataObject(); + if (data.GetDataPresent(DataFormats.UnicodeText)) + { + strData = data.GetData(DataFormats.UnicodeText)?.ToString(); + } + return strData; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return strData; + } + + /// + /// 拷贝至剪贴板 + /// + /// + public static void SetClipboardData(string strData) + { + try + { + Clipboard.SetText(strData); + } + catch + { + } + } + + /// + /// 取得GUID + /// + /// + public static string GetGUID(bool full = true) + { + try + { + if (full) + { + return Guid.NewGuid().ToString("D"); + } + else + { + return BitConverter.ToInt64(Guid.NewGuid().ToByteArray(), 0).ToString(); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return string.Empty; + } + + /// + /// IsAdministrator + /// + /// + public static bool IsAdministrator() + { + try + { + WindowsIdentity current = WindowsIdentity.GetCurrent(); + WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current); + //WindowsBuiltInRole可以枚举出很多权限,例如系统用户、User、Guest等等 + return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return false; + } + } + + public static string GetDownloadFileName(string url) + { + var fileName = Path.GetFileName(url); + fileName += "_temp"; + + return fileName; + } + + public static IPAddress? GetDefaultGateway() + { + return NetworkInterface + .GetAllNetworkInterfaces() + .Where(n => n.OperationalStatus == OperationalStatus.Up) + .Where(n => n.NetworkInterfaceType != NetworkInterfaceType.Loopback) + .SelectMany(n => n.GetIPProperties()?.GatewayAddresses) + .Select(g => g?.Address) + .Where(a => a != null) + // .Where(a => a.AddressFamily == AddressFamily.InterNetwork) + // .Where(a => Array.FindIndex(a.GetAddressBytes(), b => b != 0) >= 0) + .FirstOrDefault(); + } + + public static bool IsGuidByParse(string strSrc) + { + return Guid.TryParse(strSrc, out Guid g); + } + + public static void ProcessStart(string fileName, string arguments = "") + { + try + { + Process.Start(new ProcessStartInfo(fileName, arguments) { UseShellExecute = true }); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + public static void SetDarkBorder(System.Windows.Window window, bool dark) + { + // Make sure the handle is created before the window is shown + IntPtr hWnd = new System.Windows.Interop.WindowInteropHelper(window).EnsureHandle(); + int attribute = dark ? 1 : 0; + uint attributeSize = (uint)Marshal.SizeOf(attribute); + DwmSetWindowAttribute(hWnd, DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, ref attribute, attributeSize); + DwmSetWindowAttribute(hWnd, DWMWINDOWATTRIBUTE.DWMWA_USE_IMMERSIVE_DARK_MODE, ref attribute, attributeSize); + } + + public static bool IsLightTheme() + { + using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"); + var value = key?.GetValue("AppsUseLightTheme"); + return value is int i && i > 0; + } + + /// + /// 获取系统hosts + /// + /// + public static Dictionary GetSystemHosts() + { + var systemHosts = new Dictionary(); + var hostfile = @"C:\Windows\System32\drivers\etc\hosts"; + try + { + if (File.Exists(hostfile)) + { + var hosts = File.ReadAllText(hostfile).Replace("\r", ""); + var hostsList = hosts.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var host in hostsList) + { + if (host.StartsWith("#")) continue; + var hostItem = host.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); + if (hostItem.Length < 2) continue; + systemHosts.Add(hostItem[1], hostItem[0]); + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return systemHosts; + } + + #endregion 杂项 + + #region TempPath + + /// + /// 获取启动了应用程序的可执行文件的路径 + /// + /// + public static string GetPath(string fileName) + { + string startupPath = StartupPath(); + if (IsNullOrEmpty(fileName)) + { + return startupPath; + } + return Path.Combine(startupPath, fileName); + } + + /// + /// 获取启动了应用程序的可执行文件的路径及文件名 + /// + /// + public static string GetExePath() + { + return Environment.ProcessPath ?? string.Empty; + } + + public static string StartupPath() + { + return AppDomain.CurrentDomain.BaseDirectory; + } + + public static string GetTempPath(string filename = "") + { + string _tempPath = Path.Combine(StartupPath(), "guiTemps"); + if (!Directory.Exists(_tempPath)) + { + Directory.CreateDirectory(_tempPath); + } + if (Utils.IsNullOrEmpty(filename)) + { + return _tempPath; + } + else + { + return Path.Combine(_tempPath, filename); + } + } + + public static string UnGzip(byte[] buf) + { + using MemoryStream sb = new(); + using GZipStream input = new(new MemoryStream(buf), CompressionMode.Decompress, false); + input.CopyTo(sb); + sb.Position = 0; + return new StreamReader(sb, Encoding.UTF8).ReadToEnd(); + } + + public static string GetBackupPath(string filename) + { + string _tempPath = Path.Combine(StartupPath(), "guiBackups"); + if (!Directory.Exists(_tempPath)) + { + Directory.CreateDirectory(_tempPath); + } + return Path.Combine(_tempPath, filename); + } + + public static string GetConfigPath(string filename = "") + { + string _tempPath = Path.Combine(StartupPath(), "guiConfigs"); + if (!Directory.Exists(_tempPath)) + { + Directory.CreateDirectory(_tempPath); + } + if (Utils.IsNullOrEmpty(filename)) + { + return _tempPath; + } + else + { + return Path.Combine(_tempPath, filename); + } + } + + public static string GetBinPath(string filename, string? coreType = null) + { + string _tempPath = Path.Combine(StartupPath(), "bin"); + if (!Directory.Exists(_tempPath)) + { + Directory.CreateDirectory(_tempPath); + } + if (coreType != null) + { + _tempPath = Path.Combine(_tempPath, coreType.ToString()!); + if (!Directory.Exists(_tempPath)) + { + Directory.CreateDirectory(_tempPath); + } + } + if (Utils.IsNullOrEmpty(filename)) + { + return _tempPath; + } + else + { + return Path.Combine(_tempPath, filename); + } + } + + public static string GetLogPath(string filename = "") + { + string _tempPath = Path.Combine(StartupPath(), "guiLogs"); + if (!Directory.Exists(_tempPath)) + { + Directory.CreateDirectory(_tempPath); + } + if (Utils.IsNullOrEmpty(filename)) + { + return _tempPath; + } + else + { + return Path.Combine(_tempPath, filename); + } + } + + public static string GetFontsPath(string filename = "") + { + string _tempPath = Path.Combine(StartupPath(), "guiFonts"); + if (!Directory.Exists(_tempPath)) + { + Directory.CreateDirectory(_tempPath); + } + if (Utils.IsNullOrEmpty(filename)) + { + return _tempPath; + } + else + { + return Path.Combine(_tempPath, filename); + } + } + + #endregion TempPath + + #region 开机自动启动等 + + /// + /// 开机自动启动 + /// + /// + /// + public static void SetAutoRun(string AutoRunRegPath, string AutoRunName, bool run) + { + try + { + var autoRunName = $"{AutoRunName}_{GetMD5(StartupPath())}"; + + //delete first + RegWriteValue(AutoRunRegPath, autoRunName, ""); + if (IsAdministrator()) + { + AutoStart(autoRunName, "", ""); + } + + if (run) + { + string exePath = GetExePath(); + if (IsAdministrator()) + { + AutoStart(autoRunName, exePath, ""); + } + else + { + RegWriteValue(AutoRunRegPath, autoRunName, exePath.AppendQuotes()); + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + public static string? RegReadValue(string path, string name, string def) + { + RegistryKey? regKey = null; + try + { + regKey = Registry.CurrentUser.OpenSubKey(path, false); + string? value = regKey?.GetValue(name) as string; + if (IsNullOrEmpty(value)) + { + return def; + } + else + { + return value; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + finally + { + regKey?.Close(); + } + return def; + } + + public static void RegWriteValue(string path, string name, object value) + { + RegistryKey? regKey = null; + try + { + regKey = Registry.CurrentUser.CreateSubKey(path); + if (IsNullOrEmpty(value.ToString())) + { + regKey?.DeleteValue(name, false); + } + else + { + regKey?.SetValue(name, value); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + finally + { + regKey?.Close(); + } + } + + /// + /// Auto Start via TaskService + /// + /// + /// + /// + /// + public static void AutoStart(string taskName, string fileName, string description) + { + if (Utils.IsNullOrEmpty(taskName)) + { + return; + } + string TaskName = taskName; + var logonUser = WindowsIdentity.GetCurrent().Name; + string taskDescription = description; + string deamonFileName = fileName; + + using var taskService = new TaskService(); + var tasks = taskService.RootFolder.GetTasks(new Regex(TaskName)); + foreach (var t in tasks) + { + taskService.RootFolder.DeleteTask(t.Name); + } + if (Utils.IsNullOrEmpty(fileName)) + { + return; + } + + var task = taskService.NewTask(); + task.RegistrationInfo.Description = taskDescription; + task.Settings.DisallowStartIfOnBatteries = false; + task.Settings.StopIfGoingOnBatteries = false; + task.Settings.RunOnlyIfIdle = false; + task.Settings.IdleSettings.StopOnIdleEnd = false; + task.Settings.ExecutionTimeLimit = TimeSpan.Zero; + task.Triggers.Add(new LogonTrigger { UserId = logonUser, Delay = TimeSpan.FromSeconds(10) }); + task.Principal.RunLevel = TaskRunLevel.Highest; + task.Actions.Add(new ExecAction(deamonFileName.AppendQuotes(), null, Path.GetDirectoryName(deamonFileName))); + + taskService.RootFolder.RegisterTaskDefinition(TaskName, task); + } + + public static void RemoveTunDevice() + { + try + { + string pnputilPath = @"C:\Windows\System32\pnputil.exe"; + string arg = $" /remove-device /deviceid \"wintun\""; + + // Try to remove the device + Process proc = new() + { + StartInfo = new() + { + FileName = pnputilPath, + Arguments = arg, + RedirectStandardOutput = true, + UseShellExecute = false, + CreateNoWindow = true + } + }; + + proc.Start(); + var output = proc.StandardOutput.ReadToEnd(); + proc.WaitForExit(); + } + catch + { + } + } + + #endregion 开机自动启动等 + + #region Windows API + + [Flags] + public enum DWMWINDOWATTRIBUTE : uint + { + DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1 = 19, + DWMWA_USE_IMMERSIVE_DARK_MODE = 20, + } + + [DllImport("dwmapi.dll")] + public static extern int DwmSetWindowAttribute(IntPtr hwnd, DWMWINDOWATTRIBUTE attribute, ref int attributeValue, uint attributeSize); + + #endregion Windows API + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Converters/DelayColorConverter.cs b/v2rayN/v2rayN/Converters/DelayColorConverter.cs new file mode 100755 index 0000000..b5c9156 --- /dev/null +++ b/v2rayN/v2rayN/Converters/DelayColorConverter.cs @@ -0,0 +1,25 @@ +using System.Windows.Data; +using System.Windows.Media; + +namespace v2rayN.Converters +{ + public class DelayColorConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + int.TryParse(value.ToString(), out var delay); + + if (delay <= 0) + return new SolidColorBrush(Colors.Red); + if (delay <= 200) + return new SolidColorBrush(Colors.Green); + else + return new SolidColorBrush(Colors.IndianRed); + } + + public object? ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + return null; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Converters/InverseBooleanConverter.cs b/v2rayN/v2rayN/Converters/InverseBooleanConverter.cs new file mode 100755 index 0000000..d5809a3 --- /dev/null +++ b/v2rayN/v2rayN/Converters/InverseBooleanConverter.cs @@ -0,0 +1,24 @@ +using System.Globalization; +using System.Windows.Data; + +namespace v2rayN.Converters +{ + [ValueConversion(typeof(bool), typeof(bool))] + public class InverseBooleanConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (targetType != typeof(bool)) + { + throw new InvalidOperationException("The target must be a boolean"); + } + + return !(bool)value; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Converters/MaterialDesignFonts.cs b/v2rayN/v2rayN/Converters/MaterialDesignFonts.cs new file mode 100755 index 0000000..5ce0328 --- /dev/null +++ b/v2rayN/v2rayN/Converters/MaterialDesignFonts.cs @@ -0,0 +1,27 @@ +using System.Windows.Media; +using v2rayN.Handler; + +namespace v2rayN.Converters +{ + public class MaterialDesignFonts + { + public static FontFamily MyFont { get; } + + static MaterialDesignFonts() + { + try + { + var fontFamily = LazyConfig.Instance.GetConfig().uiItem.currentFontFamily; + if (!Utils.IsNullOrEmpty(fontFamily)) + { + var fontPath = Utils.GetFontsPath(); + MyFont = new FontFamily(new Uri(@$"file:///{fontPath}\"), $"./#{fontFamily}"); + } + } + catch + { + } + MyFont ??= new FontFamily("Microsoft YaHei"); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/FodyWeavers.xml b/v2rayN/v2rayN/FodyWeavers.xml new file mode 100755 index 0000000..63fc148 --- /dev/null +++ b/v2rayN/v2rayN/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Global.cs b/v2rayN/v2rayN/Global.cs new file mode 100755 index 0000000..723aec6 --- /dev/null +++ b/v2rayN/v2rayN/Global.cs @@ -0,0 +1,187 @@ +using v2rayN.Models; + +namespace v2rayN +{ + internal class Global + { + #region const + + public const string GithubUrl = "https://github.com"; + public const string GithubApiUrl = "https://api.github.com/repos"; + public const string V2flyCoreUrl = "https://github.com/v2fly/v2ray-core/releases"; + public const string XrayCoreUrl = "https://github.com/XTLS/Xray-core/releases"; + public const string SagerNetCoreUrl = "https://github.com/SagerNet/v2ray-core/releases"; + public const string NUrl = @"https://github.com/2dust/v2rayN/releases"; + public const string ClashCoreUrl = "https://github.com/Dreamacro/clash/releases"; + public const string ClashMetaCoreUrl = "https://github.com/MetaCubeX/Clash.Meta/releases"; + public const string MihomoCoreUrl = "https://github.com/MetaCubeX/mihomo/releases"; + public const string HysteriaCoreUrl = "https://github.com/apernet/hysteria/releases"; + public const string NaiveproxyCoreUrl = "https://github.com/klzgrad/naiveproxy/releases"; + public const string TuicCoreUrl = "https://github.com/EAimTY/tuic/releases"; + public const string SingboxCoreUrl = "https://github.com/SagerNet/sing-box/releases"; + public const string GeoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat"; + public const string SpeedPingTestUrl = @"https://www.google.com/generate_204"; + public const string JuicityCoreUrl = "https://github.com/juicity/juicity/releases"; + public const string CustomRoutingListUrl = @"https://raw.githubusercontent.com/2dust/v2rayCustomRoutingList/master/"; + public const string SingboxRulesetUrl = @"https://raw.githubusercontent.com/SagerNet/sing-{0}/rule-set/{1}.srs"; + + public const string PromotionUrl = @"aHR0cHM6Ly85LjIzNDQ1Ni54eXovYWJjLmh0bWw="; + public const string ConfigFileName = "guiNConfig.json"; + public const string CoreConfigFileName = "config.json"; + public const string CorePreConfigFileName = "configPre.json"; + public const string CoreSpeedtestConfigFileName = "configSpeedtest.json"; + public const string V2raySampleClient = "v2rayN.Sample.SampleClientConfig"; + public const string SingboxSampleClient = "v2rayN.Sample.SingboxSampleClientConfig"; + public const string V2raySampleHttpRequestFileName = "v2rayN.Sample.SampleHttpRequest"; + public const string V2raySampleHttpResponseFileName = "v2rayN.Sample.SampleHttpResponse"; + public const string V2raySampleInbound = "v2rayN.Sample.SampleInbound"; + public const string V2raySampleOutbound = "v2rayN.Sample.SampleOutbound"; + public const string SingboxSampleOutbound = "v2rayN.Sample.SingboxSampleOutbound"; + public const string CustomRoutingFileName = "v2rayN.Sample.custom_routing_"; + public const string TunSingboxDNSFileName = "v2rayN.Sample.tun_singbox_dns"; + public const string TunSingboxInboundFileName = "v2rayN.Sample.tun_singbox_inbound"; + public const string TunSingboxRulesFileName = "v2rayN.Sample.tun_singbox_rules"; + public const string DNSV2rayNormalFileName = "v2rayN.Sample.dns_v2ray_normal"; + public const string DNSSingboxNormalFileName = "v2rayN.Sample.dns_singbox_normal"; + + public const string DefaultSecurity = "auto"; + public const string DefaultNetwork = "tcp"; + public const string TcpHeaderHttp = "http"; + public const string None = "none"; + public const string ProxyTag = "proxy"; + public const string DirectTag = "direct"; + public const string BlockTag = "block"; + public const string StreamSecurity = "tls"; + public const string StreamSecurityReality = "reality"; + public const string Loopback = "127.0.0.1"; + public const string InboundAPIProtocol = "dokodemo-door"; + public const string HttpProtocol = "http://"; + public const string HttpsProtocol = "https://"; + + public const string UserEMail = "t@t.tt"; + public const string AutoRunRegPath = @"Software\Microsoft\Windows\CurrentVersion\Run"; + public const string AutoRunName = "v2rayNAutoRun"; + public const string CustomIconName = "v2rayN.ico"; + public const string IEProxyExceptions = "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*"; + public const string RoutingRuleComma = ""; + public const string GrpcGunMode = "gun"; + public const string GrpcMultiMode = "multi"; + public const int MaxPort = 65536; + public const string CommandClearMsg = "CommandClearMsg"; + public const string CommandSendMsgView = "CommandSendMsgView"; + public const string CommandStopSpeedTest = "CommandStopSpeedTest"; + public const string DelayUnit = ""; + public const string SpeedUnit = ""; + public const int MinFontSize = 10; + public const string RebootAs = "rebootas"; + + public static readonly List IEProxyProtocols = new() { + "{ip}:{http_port}", + "socks={ip}:{socks_port}", + "http={ip}:{http_port};https={ip}:{http_port};ftp={ip}:{http_port};socks={ip}:{socks_port}", + "http=http://{ip}:{http_port};https=http://{ip}:{http_port}", + "" + }; + + public static readonly List SubConvertUrls = new List { + @"https://sub.xeton.dev/sub?url={0}", + @"https://api.dler.io/sub?url={0}", + @"http://127.0.0.1:25500/sub?url={0}", + "" + }; + + public static readonly List SubConvertConfig = new List { + @"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online.ini" + }; + + public static readonly List SubConvertTargets = new List { + "", + "mixed", + "v2ray", + "clash", + "ss", + }; + + public static readonly List SpeedTestUrls = new() { + @"https://speed.cloudflare.com/__down?bytes=100000000", + @"https://speed.cloudflare.com/__down?bytes=10000000", + @"http://cachefly.cachefly.net/50mb.test", + @"http://cachefly.cachefly.net/100mb.test", + @"http://cachefly.cachefly.net/10mb.test" + }; + + public static readonly List SpeedPingTestUrls = new() { + @"https://www.google.com/generate_204", + @"https://www.apple.com/library/test/success.html", + @"http://www.msftconnecttest.com/connecttest.txt", + }; + + public static readonly Dictionary UserAgentTexts = new() + { + {"chrome","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" }, + {"firefox","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0" }, + {"safari","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15" }, + {"edge","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70" }, + {"none",""} + }; + + public const string Hysteria2ProtocolShare = "hy2://"; + + public static readonly Dictionary ProtocolShares = new() + { + {EConfigType.VMess,"vmess://"}, + {EConfigType.Shadowsocks,"ss://"}, + {EConfigType.Socks,"socks://"}, + {EConfigType.VLESS,"vless://"}, + {EConfigType.Trojan,"trojan://"}, + {EConfigType.Hysteria2,"hysteria2://"}, + {EConfigType.Tuic,"tuic://"}, + {EConfigType.Wireguard,"wireguard://"} + }; + + public static readonly Dictionary ProtocolTypes = new() + { + {EConfigType.VMess,"vmess"}, + {EConfigType.Shadowsocks,"shadowsocks"}, + {EConfigType.Socks,"socks"}, + {EConfigType.Http,"http"}, + {EConfigType.VLESS,"vless"}, + {EConfigType.Trojan,"trojan"}, + {EConfigType.Hysteria2,"hysteria2"}, + {EConfigType.Tuic,"tuic"}, + {EConfigType.Wireguard,"wireguard"} + }; + + public static readonly List VmessSecurities = new() { "aes-128-gcm", "chacha20-poly1305", "auto", "none", "zero" }; + public static readonly List SsSecurities = new() { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "none", "plain" }; + public static readonly List SsSecuritiesInSagerNet = new() { "none", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305", "aes-128-gcm", "aes-192-gcm", "aes-256-gcm", "chacha20-ietf-poly1305", "xchacha20-ietf-poly1305", "rc4", "rc4-md5", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-cfb8", "aes-192-cfb8", "aes-256-cfb8", "aes-128-ofb", "aes-192-ofb", "aes-256-ofb", "bf-cfb", "cast5-cfb", "des-cfb", "idea-cfb", "rc2-cfb", "seed-cfb", "camellia-128-cfb", "camellia-192-cfb", "camellia-256-cfb", "camellia-128-cfb8", "camellia-192-cfb8", "camellia-256-cfb8", "salsa20", "chacha20", "chacha20-ietf", "xchacha20" }; + public static readonly List SsSecuritiesInXray = new() { "aes-256-gcm", "aes-128-gcm", "chacha20-poly1305", "chacha20-ietf-poly1305", "xchacha20-poly1305", "xchacha20-ietf-poly1305", "none", "plain", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305" }; + public static readonly List SsSecuritiesInSingbox = new() { "aes-256-gcm", "aes-192-gcm", "aes-128-gcm", "chacha20-ietf-poly1305", "xchacha20-ietf-poly1305", "none", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305", "aes-128-ctr", "aes-192-ctr", "aes-256-ctr", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "rc4-md5", "chacha20-ietf", "xchacha20" }; + public static readonly List Flows = new() { "", "xtls-rprx-vision", "xtls-rprx-vision-udp443" }; + public static readonly List Networks = new() { "tcp", "kcp", "ws", "httpupgrade", "h2", "quic", "grpc" }; + public static readonly List KcpHeaderTypes = new() { "srtp", "utp", "wechat-video", "dtls", "wireguard" }; + public static readonly List CoreTypes = new() { "v2fly", "SagerNet", "Xray", "sing_box" }; + public static readonly List CoreTypes4VLESS = new() { "Xray", "sing_box" }; + public static readonly List DomainStrategies = new() { "AsIs", "IPIfNonMatch", "IPOnDemand" }; + public static readonly List DomainStrategies4Singbox = new() { "ipv4_only", "ipv6_only", "prefer_ipv4", "prefer_ipv6", "" }; + public static readonly List DomainMatchers = new() { "linear", "mph", "" }; + public static readonly List Fingerprints = new() { "chrome", "firefox", "safari", "ios", "android", "edge", "360", "qq", "random", "randomized", "" }; + public static readonly List UserAgent = new() { "chrome", "firefox", "safari", "edge", "none" }; + + public static readonly List AllowInsecure = new() { "true", "false", "" }; + public static readonly List DomainStrategy4Freedoms = new() { "AsIs", "UseIP", "UseIPv4", "UseIPv6", "" }; + public static readonly List Languages = new() { "zh-Hant", "zh-Hans", "en", "fa-Ir", "ru" }; + public static readonly List Alpns = new() { "h3", "h2", "http/1.1", "h3,h2,http/1.1", "h3,h2", "h2,http/1.1", "" }; + public static readonly List LogLevels = new() { "debug", "info", "warning", "error", "none" }; + public static readonly List InboundTags = new() { "socks", "http", "socks2", "http2" }; + public static readonly List RuleProtocols = new() { "http", "tls", "bittorrent" }; + public static readonly List destOverrideProtocols = ["http", "tls", "quic", "fakedns", "fakedns+others"]; + public static readonly List TunMtus = new() { "1280", "1408", "1500", "9000" }; + public static readonly List TunStacks = new() { "gvisor", "system" }; + public static readonly List PresetMsgFilters = new() { "proxy", "direct", "block", "" }; + public static readonly List SingboxMuxs = new() { "h2mux", "smux", "yamux", "" }; + public static readonly List TuicCongestionControls = new() { "cubic", "new_reno", "bbr" }; + + #endregion const + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/ConfigHandler.cs b/v2rayN/v2rayN/Handler/ConfigHandler.cs new file mode 100755 index 0000000..35dc7e7 --- /dev/null +++ b/v2rayN/v2rayN/Handler/ConfigHandler.cs @@ -0,0 +1,1783 @@ +using System.Data; +using System.IO; +using System.Text.RegularExpressions; +using v2rayN.Models; + +namespace v2rayN.Handler +{ + /// + /// 本软件配置文件处理类 + /// + internal class ConfigHandler + { + private static string configRes = Global.ConfigFileName; + private static readonly object objLock = new(); + + #region ConfigHandler + + /// + /// 载入配置文件 + /// + /// + /// + public static int LoadConfig(ref Config? config) + { + //载入配置文件 + var result = Utils.LoadResource(Utils.GetConfigPath(configRes)); + if (!Utils.IsNullOrEmpty(result)) + { + //转成Json + config = JsonUtils.Deserialize(result); + } + else + { + if (File.Exists(Utils.GetConfigPath(configRes))) + { + Logging.SaveLog("LoadConfig Exception"); + return -1; + } + } + + if (config == null) + { + config = new Config + { + }; + } + if (config.coreBasicItem == null) + { + config.coreBasicItem = new() + { + logEnabled = false, + loglevel = "warning", + muxEnabled = false, + }; + } + + //本地监听 + if (config.inbound == null) + { + config.inbound = new List(); + InItem inItem = new() + { + protocol = EInboundProtocol.socks.ToString(), + localPort = 10808, + udpEnabled = true, + sniffingEnabled = true, + routeOnly = false, + }; + + config.inbound.Add(inItem); + } + else + { + if (config.inbound.Count > 0) + { + config.inbound[0].protocol = EInboundProtocol.socks.ToString(); + } + } + if (config.routingBasicItem == null) + { + config.routingBasicItem = new() + { + enableRoutingAdvanced = true + }; + } + //路由规则 + if (Utils.IsNullOrEmpty(config.routingBasicItem.domainStrategy)) + { + config.routingBasicItem.domainStrategy = Global.DomainStrategies[0];//"IPIfNonMatch"; + } + //if (Utile.IsNullOrEmpty(config.domainMatcher)) + //{ + // config.domainMatcher = "linear"; + //} + + //kcp + if (config.kcpItem == null) + { + config.kcpItem = new KcpItem + { + mtu = 1350, + tti = 50, + uplinkCapacity = 12, + downlinkCapacity = 100, + readBufferSize = 2, + writeBufferSize = 2, + congestion = false + }; + } + if (config.grpcItem == null) + { + config.grpcItem = new GrpcItem + { + idle_timeout = 60, + health_check_timeout = 20, + permit_without_stream = false, + initial_windows_size = 0, + }; + } + if (config.tunModeItem == null) + { + config.tunModeItem = new TunModeItem + { + enableTun = false, + mtu = 9000, + }; + } + if (config.guiItem == null) + { + config.guiItem = new() + { + enableStatistics = false, + }; + } + if (config.uiItem == null) + { + config.uiItem = new UIItem() + { + enableAutoAdjustMainLvColWidth = true + }; + } + if (config.uiItem.mainColumnItem == null) + { + config.uiItem.mainColumnItem = new(); + } + if (Utils.IsNullOrEmpty(config.uiItem.currentLanguage)) + { + config.uiItem.currentLanguage = Global.Languages[0]; + } + + if (config.constItem == null) + { + config.constItem = new ConstItem(); + } + if (Utils.IsNullOrEmpty(config.constItem.defIEProxyExceptions)) + { + config.constItem.defIEProxyExceptions = Global.IEProxyExceptions; + } + + if (config.speedTestItem == null) + { + config.speedTestItem = new(); + } + if (config.speedTestItem.speedTestTimeout < 10) + { + config.speedTestItem.speedTestTimeout = 10; + } + if (Utils.IsNullOrEmpty(config.speedTestItem.speedTestUrl)) + { + config.speedTestItem.speedTestUrl = Global.SpeedTestUrls[0]; + } + if (Utils.IsNullOrEmpty(config.speedTestItem.speedPingTestUrl)) + { + config.speedTestItem.speedPingTestUrl = Global.SpeedPingTestUrl; + } + + if (config.mux4SboxItem == null) + { + config.mux4SboxItem = new() + { + protocol = Global.SingboxMuxs[0], + max_connections = 8 + }; + } + + if (config.hysteriaItem == null) + { + config.hysteriaItem = new() + { + up_mbps = 100, + down_mbps = 100 + }; + } + + LazyConfig.Instance.SetConfig(config); + return 0; + } + + /// + /// 保参数 + /// + /// + /// + public static int SaveConfig(Config config, bool reload = true) + { + ToJsonFile(config); + + return 0; + } + + /// + /// 存储文件 + /// + /// + private static void ToJsonFile(Config config) + { + lock (objLock) + { + try + { + //save temp file + var resPath = Utils.GetConfigPath(configRes); + var tempPath = $"{resPath}_temp"; + if (JsonUtils.ToFile(config, tempPath) != 0) + { + return; + } + + if (File.Exists(resPath)) + { + File.Delete(resPath); + } + //rename + File.Move(tempPath, resPath); + } + catch (Exception ex) + { + Logging.SaveLog("ToJsonFile", ex); + } + } + } + + //public static int ImportOldGuiConfig(Config config, string fileName) + //{ + // var result = Utils.LoadResource(fileName); + // if (Utils.IsNullOrEmpty(result)) + // { + // return -1; + // } + + // var configOld = JsonUtils.Deserialize(result); + // if (configOld == null) + // { + // return -1; + // } + + // var subItem = JsonUtils.Deserialize>(JsonUtils.Serialize(configOld.subItem)); + // foreach (var it in subItem) + // { + // if (Utils.IsNullOrEmpty(it.id)) + // { + // it.id = Utils.GetGUID(false); + // } + // SQLiteHelper.Instance.Replace(it); + // } + + // var profileItems = JsonUtils.Deserialize>(JsonUtils.Serialize(configOld.vmess)); + // foreach (var it in profileItems) + // { + // if (Utils.IsNullOrEmpty(it.indexId)) + // { + // it.indexId = Utils.GetGUID(false); + // } + // SQLiteHelper.Instance.Replace(it); + // } + + // foreach (var it in configOld.routings) + // { + // if (it.locked) + // { + // continue; + // } + // var routing = JsonUtils.Deserialize(JsonUtils.Serialize(it)); + // foreach (var it2 in it.rules) + // { + // it2.id = Utils.GetGUID(false); + // } + // routing.ruleNum = it.rules.Count; + // routing.ruleSet = JsonUtils.Serialize(it.rules, false); + + // if (Utils.IsNullOrEmpty(routing.id)) + // { + // routing.id = Utils.GetGUID(false); + // } + // SQLiteHelper.Instance.Replace(routing); + // } + + // config = JsonUtils.Deserialize(JsonUtils.Serialize(configOld)); + + // if (config.coreBasicItem == null) + // { + // config.coreBasicItem = new() + // { + // logEnabled = configOld.logEnabled, + // loglevel = configOld.loglevel, + // muxEnabled = configOld.muxEnabled, + // }; + // } + + // if (config.routingBasicItem == null) + // { + // config.routingBasicItem = new() + // { + // enableRoutingAdvanced = configOld.enableRoutingAdvanced, + // domainStrategy = configOld.domainStrategy + // }; + // } + + // if (config.guiItem == null) + // { + // config.guiItem = new() + // { + // enableStatistics = configOld.enableStatistics, + // keepOlderDedupl = configOld.keepOlderDedupl, + // ignoreGeoUpdateCore = configOld.ignoreGeoUpdateCore, + // autoUpdateInterval = configOld.autoUpdateInterval, + // checkPreReleaseUpdate = configOld.checkPreReleaseUpdate, + // enableSecurityProtocolTls13 = configOld.enableSecurityProtocolTls13, + // trayMenuServersLimit = configOld.trayMenuServersLimit, + // }; + // } + + // GetDefaultServer(config); + // GetDefaultRouting(config); + // SaveConfig(config); + // LoadConfig(ref config); + + // return 0; + //} + + #endregion ConfigHandler + + #region Server + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddServer(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.VMess; + + profileItem.address = profileItem.address.TrimEx(); + profileItem.id = profileItem.id.TrimEx(); + profileItem.security = profileItem.security.TrimEx(); + profileItem.network = profileItem.network.TrimEx(); + profileItem.headerType = profileItem.headerType.TrimEx(); + profileItem.requestHost = profileItem.requestHost.TrimEx(); + profileItem.path = profileItem.path.TrimEx(); + profileItem.streamSecurity = profileItem.streamSecurity.TrimEx(); + + if (!Global.VmessSecurities.Contains(profileItem.security)) + { + return -1; + } + if (profileItem.id.IsNullOrEmpty()) + { + return -1; + } + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + /// + /// 移除服务器 + /// + /// + /// + /// + public static int RemoveServer(Config config, List indexes) + { + var subid = "TempRemoveSubId"; + foreach (var item in indexes) + { + item.subid = subid; + } + + SQLiteHelper.Instance.UpdateAll(indexes); + RemoveServerViaSubid(config, subid, false); + + return 0; + } + + /// + /// 克隆服务器 + /// + /// + /// + /// + public static int CopyServer(Config config, List indexes) + { + foreach (var it in indexes) + { + var item = LazyConfig.Instance.GetProfileItem(it.indexId); + if (item is null) + { + continue; + } + + ProfileItem profileItem = JsonUtils.DeepCopy(item); + profileItem.indexId = string.Empty; + profileItem.remarks = $"{item.remarks}-clone"; + + if (profileItem.configType == EConfigType.Custom) + { + profileItem.address = Utils.GetConfigPath(profileItem.address); + if (AddCustomServer(config, profileItem, false) == 0) + { + } + } + else + { + AddServerCommon(config, profileItem, true); + } + } + + return 0; + } + + /// + /// 设置活动服务器 + /// + /// + /// + /// + public static int SetDefaultServerIndex(Config config, string? indexId) + { + if (Utils.IsNullOrEmpty(indexId)) + { + return -1; + } + + config.indexId = indexId; + + ToJsonFile(config); + + return 0; + } + + public static int SetDefaultServer(Config config, List lstProfile) + { + if (lstProfile.Exists(t => t.indexId == config.indexId)) + { + return 0; + } + if (SQLiteHelper.Instance.Table().Where(t => t.indexId == config.indexId).Any()) + { + return 0; + } + if (lstProfile.Count > 0) + { + return SetDefaultServerIndex(config, lstProfile.Where(t => t.port > 0).FirstOrDefault()?.indexId); + } + return SetDefaultServerIndex(config, SQLiteHelper.Instance.Table().Where(t => t.port > 0).Select(t => t.indexId).FirstOrDefault()); + } + + public static ProfileItem? GetDefaultServer(Config config) + { + var item = LazyConfig.Instance.GetProfileItem(config.indexId); + if (item is null) + { + var item2 = SQLiteHelper.Instance.Table().FirstOrDefault(); + SetDefaultServerIndex(config, item2?.indexId); + return item2; + } + + return item; + } + + /// + /// 移动服务器 + /// + /// + /// + /// + /// + /// + public static int MoveServer(Config config, ref List lstProfile, int index, EMove eMove, int pos = -1) + { + int count = lstProfile.Count; + if (index < 0 || index > lstProfile.Count - 1) + { + return -1; + } + + for (int i = 0; i < lstProfile.Count; i++) + { + ProfileExHandler.Instance.SetSort(lstProfile[i].indexId, (i + 1) * 10); + } + + var sort = 0; + switch (eMove) + { + case EMove.Top: + { + if (index == 0) + { + return 0; + } + sort = ProfileExHandler.Instance.GetSort(lstProfile[0].indexId) - 1; + + break; + } + case EMove.Up: + { + if (index == 0) + { + return 0; + } + sort = ProfileExHandler.Instance.GetSort(lstProfile[index - 1].indexId) - 1; + + break; + } + + case EMove.Down: + { + if (index == count - 1) + { + return 0; + } + sort = ProfileExHandler.Instance.GetSort(lstProfile[index + 1].indexId) + 1; + + break; + } + case EMove.Bottom: + { + if (index == count - 1) + { + return 0; + } + sort = ProfileExHandler.Instance.GetSort(lstProfile[^1].indexId) + 1; + + break; + } + case EMove.Position: + sort = pos * 10 + 1; + break; + } + + ProfileExHandler.Instance.SetSort(lstProfile[index].indexId, sort); + return 0; + } + + /// + /// 添加自定义服务器 + /// + /// + /// + /// + public static int AddCustomServer(Config config, ProfileItem profileItem, bool blDelete) + { + var fileName = profileItem.address; + if (!File.Exists(fileName)) + { + return -1; + } + var ext = Path.GetExtension(fileName); + string newFileName = $"{Utils.GetGUID()}{ext}"; + //newFileName = Path.Combine(Utile.GetTempPath(), newFileName); + + try + { + File.Copy(fileName, Utils.GetConfigPath(newFileName)); + if (blDelete) + { + File.Delete(fileName); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return -1; + } + + profileItem.address = newFileName; + profileItem.configType = EConfigType.Custom; + if (Utils.IsNullOrEmpty(profileItem.remarks)) + { + profileItem.remarks = $"import custom@{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")}"; + } + + AddServerCommon(config, profileItem, true); + + return 0; + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int EditCustomServer(Config config, ProfileItem profileItem) + { + if (SQLiteHelper.Instance.Update(profileItem) > 0) + { + return 0; + } + else + { + return -1; + } + + //ToJsonFile(config); + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddShadowsocksServer(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.Shadowsocks; + + profileItem.address = profileItem.address.TrimEx(); + profileItem.id = profileItem.id.TrimEx(); + profileItem.security = profileItem.security.TrimEx(); + + if (!LazyConfig.Instance.GetShadowsocksSecurities(profileItem).Contains(profileItem.security)) + { + return -1; + } + if (profileItem.id.IsNullOrEmpty()) + { + return -1; + } + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddSocksServer(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.Socks; + + profileItem.address = profileItem.address.TrimEx(); + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddHttpServer(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.Http; + + profileItem.address = profileItem.address.TrimEx(); + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddTrojanServer(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.Trojan; + + profileItem.address = profileItem.address.TrimEx(); + profileItem.id = profileItem.id.TrimEx(); + if (Utils.IsNullOrEmpty(profileItem.streamSecurity)) + { + profileItem.streamSecurity = Global.StreamSecurity; + } + if (profileItem.id.IsNullOrEmpty()) + { + return -1; + } + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddHysteria2Server(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.Hysteria2; + profileItem.coreType = ECoreType.sing_box; + + profileItem.address = profileItem.address.TrimEx(); + profileItem.id = profileItem.id.TrimEx(); + profileItem.path = profileItem.path.TrimEx(); + profileItem.network = string.Empty; + + if (Utils.IsNullOrEmpty(profileItem.streamSecurity)) + { + profileItem.streamSecurity = Global.StreamSecurity; + } + if (profileItem.id.IsNullOrEmpty()) + { + return -1; + } + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddTuicServer(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.Tuic; + profileItem.coreType = ECoreType.sing_box; + + profileItem.address = profileItem.address.TrimEx(); + profileItem.id = profileItem.id.TrimEx(); + profileItem.security = profileItem.security.TrimEx(); + profileItem.network = string.Empty; + + if (!Global.TuicCongestionControls.Contains(profileItem.headerType)) + { + profileItem.headerType = Global.TuicCongestionControls.FirstOrDefault()!; + } + + if (Utils.IsNullOrEmpty(profileItem.streamSecurity)) + { + profileItem.streamSecurity = Global.StreamSecurity; + } + if (Utils.IsNullOrEmpty(profileItem.alpn)) + { + profileItem.alpn = "h3"; + } + if (profileItem.id.IsNullOrEmpty()) + { + return -1; + } + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddWireguardServer(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.Wireguard; + profileItem.coreType = ECoreType.sing_box; + + profileItem.address = profileItem.address.TrimEx(); + profileItem.id = profileItem.id.TrimEx(); + profileItem.publicKey = profileItem.publicKey.TrimEx(); + profileItem.path = profileItem.path.TrimEx(); + profileItem.requestHost = profileItem.requestHost.TrimEx(); + profileItem.network = string.Empty; + if (profileItem.shortId.IsNullOrEmpty()) + { + profileItem.shortId = Global.TunMtus.FirstOrDefault(); + } + + if (profileItem.id.IsNullOrEmpty()) + { + return -1; + } + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + public static int SortServers(Config config, string subId, string colName, bool asc) + { + var lstModel = LazyConfig.Instance.ProfileItems(subId, ""); + if (lstModel.Count <= 0) + { + return -1; + } + var lstProfileExs = ProfileExHandler.Instance.ProfileExs; + var lstProfile = (from t in lstModel + join t3 in lstProfileExs on t.indexId equals t3.indexId into t3b + from t33 in t3b.DefaultIfEmpty() + select new ProfileItemModel + { + indexId = t.indexId, + configType = t.configType, + remarks = t.remarks, + address = t.address, + port = t.port, + security = t.security, + network = t.network, + streamSecurity = t.streamSecurity, + delay = t33 == null ? 0 : t33.delay, + speed = t33 == null ? 0 : t33.speed, + sort = t33 == null ? 0 : t33.sort + }).ToList(); + + Enum.TryParse(colName, true, out EServerColName name); + var propertyName = string.Empty; + switch (name) + { + case EServerColName.configType: + case EServerColName.remarks: + case EServerColName.address: + case EServerColName.port: + case EServerColName.network: + case EServerColName.streamSecurity: + propertyName = name.ToString(); + break; + + case EServerColName.delayVal: + propertyName = "delay"; + break; + + case EServerColName.speedVal: + propertyName = "speed"; + break; + + case EServerColName.subRemarks: + propertyName = "subid"; + break; + + default: + return -1; + } + + var items = lstProfile.AsQueryable(); + + if (asc) + { + lstProfile = items.OrderBy(propertyName).ToList(); + } + else + { + lstProfile = items.OrderByDescending(propertyName).ToList(); + } + for (int i = 0; i < lstProfile.Count; i++) + { + ProfileExHandler.Instance.SetSort(lstProfile[i].indexId, (i + 1) * 10); + } + if (name == EServerColName.delayVal) + { + var maxSort = lstProfile.Max(t => t.sort) + 10; + foreach (var item in lstProfile) + { + if (item.delay <= 0) + { + ProfileExHandler.Instance.SetSort(item.indexId, maxSort); + } + } + } + if (name == EServerColName.speedVal) + { + var maxSort = lstProfile.Max(t => t.sort) + 10; + foreach (var item in lstProfile) + { + if (item.speed <= 0) + { + ProfileExHandler.Instance.SetSort(item.indexId, maxSort); + } + } + } + + return 0; + } + + /// + /// Add or edit server + /// + /// + /// + /// + public static int AddVlessServer(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configType = EConfigType.VLESS; + + profileItem.address = profileItem.address.TrimEx(); + profileItem.id = profileItem.id.TrimEx(); + profileItem.security = profileItem.security.TrimEx(); + profileItem.network = profileItem.network.TrimEx(); + profileItem.headerType = profileItem.headerType.TrimEx(); + profileItem.requestHost = profileItem.requestHost.TrimEx(); + profileItem.path = profileItem.path.TrimEx(); + profileItem.streamSecurity = profileItem.streamSecurity.TrimEx(); + + if (!Global.Flows.Contains(profileItem.flow)) + { + profileItem.flow = Global.Flows.First(); + } + if (profileItem.id.IsNullOrEmpty()) + { + return -1; + } + if (!Utils.IsNullOrEmpty(profileItem.security) && profileItem.security != Global.None) + { + profileItem.security = Global.None; + } + + AddServerCommon(config, profileItem, toFile); + + return 0; + } + + public static Tuple DedupServerList(Config config, string subId) + { + var lstProfile = LazyConfig.Instance.ProfileItems(subId); + + List lstKeep = new(); + List lstRemove = new(); + if (!config.guiItem.keepOlderDedupl) lstProfile.Reverse(); + + foreach (ProfileItem item in lstProfile) + { + if (!lstKeep.Exists(i => CompareProfileItem(i, item, false))) + { + lstKeep.Add(item); + } + else + { + lstRemove.Add(item); + } + } + RemoveServer(config, lstRemove); + + return new Tuple(lstProfile.Count, lstKeep.Count); + } + + public static int AddServerCommon(Config config, ProfileItem profileItem, bool toFile = true) + { + profileItem.configVersion = 2; + + if (!Utils.IsNullOrEmpty(profileItem.streamSecurity)) + { + if (profileItem.streamSecurity != Global.StreamSecurity + && profileItem.streamSecurity != Global.StreamSecurityReality) + { + profileItem.streamSecurity = string.Empty; + } + else + { + if (Utils.IsNullOrEmpty(profileItem.allowInsecure)) + { + profileItem.allowInsecure = config.coreBasicItem.defAllowInsecure.ToString().ToLower(); + } + if (Utils.IsNullOrEmpty(profileItem.fingerprint) && profileItem.streamSecurity == Global.StreamSecurityReality) + { + profileItem.fingerprint = config.coreBasicItem.defFingerprint; + } + } + } + + if (!Utils.IsNullOrEmpty(profileItem.network) && !Global.Networks.Contains(profileItem.network)) + { + profileItem.network = Global.DefaultNetwork; + } + + var maxSort = -1; + if (Utils.IsNullOrEmpty(profileItem.indexId)) + { + profileItem.indexId = Utils.GetGUID(false); + maxSort = ProfileExHandler.Instance.GetMaxSort(); + } + if (!toFile && maxSort < 0) + { + maxSort = ProfileExHandler.Instance.GetMaxSort(); + } + if (maxSort > 0) + { + ProfileExHandler.Instance.SetSort(profileItem.indexId, maxSort + 1); + } + + if (toFile) + { + SQLiteHelper.Instance.Replace(profileItem); + } + return 0; + } + + private static bool CompareProfileItem(ProfileItem o, ProfileItem n, bool remarks) + { + if (o == null || n == null) + { + return false; + } + + return o.configType == n.configType + && o.address == n.address + && o.port == n.port + && o.id == n.id + && o.alterId == n.alterId + && o.security == n.security + && o.network == n.network + && o.headerType == n.headerType + && o.requestHost == n.requestHost + && o.path == n.path + && (o.configType == EConfigType.Trojan || o.streamSecurity == n.streamSecurity) + && o.flow == n.flow + && o.sni == n.sni + && (!remarks || o.remarks == n.remarks); + } + + private static int RemoveProfileItem(Config config, string indexId) + { + try + { + var item = LazyConfig.Instance.GetProfileItem(indexId); + if (item == null) + { + return 0; + } + if (item.configType == EConfigType.Custom) + { + File.Delete(Utils.GetConfigPath(item.address)); + } + + SQLiteHelper.Instance.Delete(item); + } + catch (Exception ex) + { + Logging.SaveLog("Remove Item", ex); + } + + return 0; + } + + #endregion Server + + #region Batch add servers + + /// + /// 批量添加服务器 + /// + /// + /// + /// + /// 成功导入的数量 + private static int AddBatchServers(Config config, string clipboardData, string subid, bool isSub, List lstOriSub) + { + if (Utils.IsNullOrEmpty(clipboardData)) + { + return -1; + } + + string subFilter = string.Empty; + //remove sub items + if (isSub && !Utils.IsNullOrEmpty(subid)) + { + RemoveServerViaSubid(config, subid, isSub); + subFilter = LazyConfig.Instance.GetSubItem(subid)?.filter ?? ""; + } + + int countServers = 0; + //Check for duplicate indexId + List? lstDbIndexId = null; + List lstAdd = new(); + var arrData = clipboardData.Split(Environment.NewLine.ToCharArray()).Where(t => !t.IsNullOrEmpty()); + if (isSub) + { + arrData = arrData.Distinct(); + } + foreach (string str in arrData) + { + //maybe sub + if (!isSub && (str.StartsWith(Global.HttpsProtocol) || str.StartsWith(Global.HttpProtocol))) + { + if (AddSubItem(config, str) == 0) + { + countServers++; + } + continue; + } + var profileItem = ShareHandler.ImportFromClipboardConfig(str, out string msg); + if (profileItem is null) + { + continue; + } + + //exist sub items + if (isSub && !Utils.IsNullOrEmpty(subid)) + { + var existItem = lstOriSub?.FirstOrDefault(t => t.isSub == isSub + && config.uiItem.enableUpdateSubOnlyRemarksExist ? t.remarks == profileItem.remarks : CompareProfileItem(t, profileItem, true)); + if (existItem != null) + { + //Check for duplicate indexId + if (lstDbIndexId is null) + { + lstDbIndexId = LazyConfig.Instance.ProfileItemIndexes(""); + } + if (lstAdd.Any(t => t.indexId == existItem.indexId) + || lstDbIndexId.Any(t => t == existItem.indexId)) + { + profileItem.indexId = string.Empty; + } + else + { + profileItem.indexId = existItem.indexId; + } + } + //filter + if (!Utils.IsNullOrEmpty(subFilter)) + { + if (!Regex.IsMatch(profileItem.remarks, subFilter)) + { + continue; + } + } + } + profileItem.subid = subid; + profileItem.isSub = isSub; + + var addStatus = profileItem.configType switch + { + EConfigType.VMess => AddServer(config, profileItem, false), + EConfigType.Shadowsocks => AddShadowsocksServer(config, profileItem, false), + EConfigType.Socks => AddSocksServer(config, profileItem, false), + EConfigType.Trojan => AddTrojanServer(config, profileItem, false), + EConfigType.VLESS => AddVlessServer(config, profileItem, false), + EConfigType.Hysteria2 => AddHysteria2Server(config, profileItem, false), + EConfigType.Tuic => AddTuicServer(config, profileItem, false), + EConfigType.Wireguard => AddWireguardServer(config, profileItem, false), + _ => -1, + }; + + if (addStatus == 0) + { + countServers++; + lstAdd.Add(profileItem); + } + } + + if (lstAdd.Count > 0) + { + SQLiteHelper.Instance.InsertAll(lstAdd); + } + + ToJsonFile(config); + return countServers; + } + + private static int AddBatchServers4Custom(Config config, string clipboardData, string subid, bool isSub, List lstOriSub) + { + if (Utils.IsNullOrEmpty(clipboardData)) + { + return -1; + } + + //判断str是否包含s的任意一个字符串 + static bool Contains(string str, params string[] s) + { + foreach (var item in s) + { + if (str.Contains(item, StringComparison.OrdinalIgnoreCase)) return true; + } + return false; + } + + //Is v2ray array configuration + var configObjects = JsonUtils.Deserialize(clipboardData); + if (configObjects != null && configObjects.Length > 0) + { + if (isSub && !Utils.IsNullOrEmpty(subid)) + { + RemoveServerViaSubid(config, subid, isSub); + } + + int count = 0; + foreach (var configObject in configObjects) + { + var objectString = JsonUtils.Serialize(configObject); + var v2rayCon = JsonUtils.Deserialize(objectString); + if (v2rayCon?.inbounds?.Count > 0 && v2rayCon.outbounds?.Count > 0) + { + var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json"); + File.WriteAllText(fileName, objectString); + + var profileIt = new ProfileItem + { + coreType = ECoreType.Xray, + address = fileName, + remarks = v2rayCon.remarks ?? "v2ray_custom", + subid = subid, + isSub = isSub + }; + + if (AddCustomServer(config, profileIt, true) == 0) + { + count++; + } + } + } + if (count > 0) + { + return count; + } + } + + ProfileItem profileItem = new(); + //Is v2ray configuration + var v2rayConfig = JsonUtils.Deserialize(clipboardData); + if (v2rayConfig?.inbounds?.Count > 0 + && v2rayConfig.outbounds?.Count > 0) + { + var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json"); + File.WriteAllText(fileName, clipboardData); + + profileItem.coreType = ECoreType.Xray; + profileItem.address = fileName; + profileItem.remarks = v2rayConfig.remarks ?? "v2ray_custom"; + } + //Is Clash configuration + else if (Contains(clipboardData, "port", "socks-port", "proxies")) + { + var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.yaml"); + File.WriteAllText(fileName, clipboardData); + + profileItem.coreType = ECoreType.mihomo; + profileItem.address = fileName; + profileItem.remarks = "clash_custom"; + } + //Is hysteria configuration + else if (Contains(clipboardData, "server", "up", "down", "listen", "", "")) + { + var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json"); + File.WriteAllText(fileName, clipboardData); + + profileItem.coreType = ECoreType.hysteria; + profileItem.address = fileName; + profileItem.remarks = "hysteria_custom"; + } + //Is naiveproxy configuration + else if (Contains(clipboardData, "listen", "proxy", "", "")) + { + var fileName = Utils.GetTempPath($"{Utils.GetGUID(false)}.json"); + File.WriteAllText(fileName, clipboardData); + + profileItem.coreType = ECoreType.naiveproxy; + profileItem.address = fileName; + profileItem.remarks = "naiveproxy_custom"; + } + //Is Other configuration + else + { + return -1; + //var fileName = Utile.GetTempPath($"{Utile.GetGUID(false)}.txt"); + //File.WriteAllText(fileName, clipboardData); + + //profileItem.address = fileName; + //profileItem.remarks = "other_custom"; + } + + if (isSub && !Utils.IsNullOrEmpty(subid)) + { + RemoveServerViaSubid(config, subid, isSub); + } + if (isSub && lstOriSub?.Count == 1) + { + profileItem.indexId = lstOriSub[0].indexId; + } + profileItem.subid = subid; + profileItem.isSub = isSub; + + if (Utils.IsNullOrEmpty(profileItem.address)) + { + return -1; + } + + if (AddCustomServer(config, profileItem, true) == 0) + { + return 1; + } + else + { + return -1; + } + } + + private static int AddBatchServers4SsSIP008(Config config, string clipboardData, string subid, bool isSub, List lstOriSub) + { + if (Utils.IsNullOrEmpty(clipboardData)) + { + return -1; + } + + if (isSub && !Utils.IsNullOrEmpty(subid)) + { + RemoveServerViaSubid(config, subid, isSub); + } + + //SsSIP008 + var lstSsServer = JsonUtils.Deserialize>(clipboardData); + if (lstSsServer?.Count <= 0) + { + var ssSIP008 = JsonUtils.Deserialize(clipboardData); + if (ssSIP008?.servers?.Count > 0) + { + lstSsServer = ssSIP008.servers; + } + } + + if (lstSsServer?.Count > 0) + { + int counter = 0; + foreach (var it in lstSsServer) + { + var ssItem = new ProfileItem() + { + subid = subid, + remarks = it.remarks, + security = it.method, + id = it.password, + address = it.server, + port = Utils.ToInt(it.server_port) + }; + ssItem.subid = subid; + ssItem.isSub = isSub; + if (AddShadowsocksServer(config, ssItem) == 0) + { + counter++; + } + } + ToJsonFile(config); + return counter; + } + + return -1; + } + + public static int AddBatchServers(Config config, string clipboardData, string subid, bool isSub) + { + List? lstOriSub = null; + if (isSub && !Utils.IsNullOrEmpty(subid)) + { + lstOriSub = LazyConfig.Instance.ProfileItems(subid); + } + + var counter = 0; + if (Utils.IsBase64String(clipboardData)) + { + counter = AddBatchServers(config, Utils.Base64Decode(clipboardData), subid, isSub, lstOriSub); + } + if (counter < 1) + { + counter = AddBatchServers(config, clipboardData, subid, isSub, lstOriSub); + } + if (counter < 1) + { + counter = AddBatchServers(config, Utils.Base64Decode(clipboardData), subid, isSub, lstOriSub); + } + + if (counter < 1) + { + counter = AddBatchServers4SsSIP008(config, clipboardData, subid, isSub, lstOriSub); + } + + //maybe other sub + if (counter < 1) + { + counter = AddBatchServers4Custom(config, clipboardData, subid, isSub, lstOriSub); + } + + return counter; + } + + #endregion Batch add servers + + #region Sub & Group + + /// + /// add sub + /// + /// + /// + /// + public static int AddSubItem(Config config, string url) + { + //already exists + if (SQLiteHelper.Instance.Table().Where(e => e.url == url).Count() > 0) + { + return 0; + } + + SubItem subItem = new() + { + id = string.Empty, + remarks = "import_sub", + url = url + }; + + return AddSubItem(config, subItem); + } + + public static int AddSubItem(Config config, SubItem subItem) + { + if (Utils.IsNullOrEmpty(subItem.id)) + { + subItem.id = Utils.GetGUID(false); + + if (subItem.sort <= 0) + { + var maxSort = 0; + if (SQLiteHelper.Instance.Table().Count() > 0) + { + maxSort = SQLiteHelper.Instance.Table().Max(t => t == null ? 0 : t.sort); + } + subItem.sort = maxSort + 1; + } + } + if (SQLiteHelper.Instance.Replace(subItem) > 0) + { + return 0; + } + else + { + return -1; + } + } + + /// + /// 移除服务器 + /// + /// + /// + /// + public static int RemoveServerViaSubid(Config config, string subid, bool isSub) + { + if (Utils.IsNullOrEmpty(subid)) + { + return -1; + } + var customProfile = SQLiteHelper.Instance.Table().Where(t => t.subid == subid && t.configType == EConfigType.Custom).ToList(); + if (isSub) + { + SQLiteHelper.Instance.Execute($"delete from ProfileItem where isSub = 1 and subid = '{subid}'"); + } + else + { + SQLiteHelper.Instance.Execute($"delete from ProfileItem where subid = '{subid}'"); + } + foreach (var item in customProfile) + { + File.Delete(Utils.GetConfigPath(item.address)); + } + + return 0; + } + + public static int DeleteSubItem(Config config, string id) + { + var item = LazyConfig.Instance.GetSubItem(id); + if (item is null) + { + return 0; + } + SQLiteHelper.Instance.Delete(item); + RemoveServerViaSubid(config, id, false); + + return 0; + } + + public static int MoveToGroup(Config config, List lstProfile, string subid) + { + foreach (var item in lstProfile) + { + item.subid = subid; + } + SQLiteHelper.Instance.UpdateAll(lstProfile); + + return 0; + } + + #endregion Sub & Group + + #region Routing + + public static int SaveRoutingItem(Config config, RoutingItem item) + { + if (Utils.IsNullOrEmpty(item.id)) + { + item.id = Utils.GetGUID(false); + } + + if (SQLiteHelper.Instance.Replace(item) > 0) + { + return 0; + } + else + { + return -1; + } + } + + /// + /// AddBatchRoutingRules + /// + /// + /// + /// + public static int AddBatchRoutingRules(ref RoutingItem routingItem, string clipboardData) + { + if (Utils.IsNullOrEmpty(clipboardData)) + { + return -1; + } + + var lstRules = JsonUtils.Deserialize>(clipboardData); + if (lstRules == null) + { + return -1; + } + + foreach (var item in lstRules) + { + item.id = Utils.GetGUID(false); + } + routingItem.ruleNum = lstRules.Count; + routingItem.ruleSet = JsonUtils.Serialize(lstRules, false); + + if (Utils.IsNullOrEmpty(routingItem.id)) + { + routingItem.id = Utils.GetGUID(false); + } + + if (SQLiteHelper.Instance.Replace(routingItem) > 0) + { + return 0; + } + else + { + return -1; + } + } + + /// + /// MoveRoutingRule + /// + /// + /// + /// + /// + public static int MoveRoutingRule(List rules, int index, EMove eMove, int pos = -1) + { + int count = rules.Count; + if (index < 0 || index > rules.Count - 1) + { + return -1; + } + switch (eMove) + { + case EMove.Top: + { + if (index == 0) + { + return 0; + } + var item = JsonUtils.DeepCopy(rules[index]); + rules.RemoveAt(index); + rules.Insert(0, item); + + break; + } + case EMove.Up: + { + if (index == 0) + { + return 0; + } + var item = JsonUtils.DeepCopy(rules[index]); + rules.RemoveAt(index); + rules.Insert(index - 1, item); + + break; + } + + case EMove.Down: + { + if (index == count - 1) + { + return 0; + } + var item = JsonUtils.DeepCopy(rules[index]); + rules.RemoveAt(index); + rules.Insert(index + 1, item); + + break; + } + case EMove.Bottom: + { + if (index == count - 1) + { + return 0; + } + var item = JsonUtils.DeepCopy(rules[index]); + rules.RemoveAt(index); + rules.Add(item); + + break; + } + case EMove.Position: + { + var removeItem = rules[index]; + var item = JsonUtils.DeepCopy(rules[index]); + rules.Insert(pos, item); + rules.Remove(removeItem); + break; + } + } + return 0; + } + + public static int SetDefaultRouting(Config config, RoutingItem routingItem) + { + if (SQLiteHelper.Instance.Table().Where(t => t.id == routingItem.id).Count() > 0) + { + config.routingBasicItem.routingIndexId = routingItem.id; + } + + ToJsonFile(config); + + return 0; + } + + public static RoutingItem GetDefaultRouting(Config config) + { + var item = LazyConfig.Instance.GetRoutingItem(config.routingBasicItem.routingIndexId); + if (item is null) + { + var item2 = SQLiteHelper.Instance.Table().FirstOrDefault(t => t.locked == false); + SetDefaultRouting(config, item2); + return item2; + } + + return item; + } + + public static int InitBuiltinRouting(Config config, bool blImportAdvancedRules = false) + { + var ver = "V2-"; + var items = LazyConfig.Instance.RoutingItems(); + if (blImportAdvancedRules || items.Where(t => t.remarks.StartsWith(ver)).ToList().Count <= 0) + { + var maxSort = items.Count; + //Bypass the mainland + var item2 = new RoutingItem() + { + remarks = $"{ver}繞過大陸(Whitelist)", + url = string.Empty, + sort = maxSort + 1, + }; + AddBatchRoutingRules(ref item2, Utils.GetEmbedText(Global.CustomRoutingFileName + "white")); + + //Blacklist + var item3 = new RoutingItem() + { + remarks = $"{ver}黑名單(Blacklist)", + url = string.Empty, + sort = maxSort + 2, + }; + AddBatchRoutingRules(ref item3, Utils.GetEmbedText(Global.CustomRoutingFileName + "black")); + + //Global + var item1 = new RoutingItem() + { + remarks = $"{ver}全局(Global)", + url = string.Empty, + sort = maxSort + 3, + }; + AddBatchRoutingRules(ref item1, Utils.GetEmbedText(Global.CustomRoutingFileName + "global")); + + if (!blImportAdvancedRules) + { + SetDefaultRouting(config, item2); + } + } + + if (GetLockedRoutingItem(config) == null) + { + var item1 = new RoutingItem() + { + remarks = "locked", + url = string.Empty, + locked = true, + }; + AddBatchRoutingRules(ref item1, Utils.GetEmbedText(Global.CustomRoutingFileName + "locked")); + } + return 0; + } + + public static RoutingItem GetLockedRoutingItem(Config config) + { + return SQLiteHelper.Instance.Table().FirstOrDefault(it => it.locked == true); + } + + public static void RemoveRoutingItem(RoutingItem routingItem) + { + SQLiteHelper.Instance.Delete(routingItem); + } + + #endregion Routing + + #region DNS + + public static int InitBuiltinDNS(Config config) + { + var items = LazyConfig.Instance.DNSItems(); + if (items.Count <= 0) + { + var item = new DNSItem() + { + remarks = "V2ray", + coreType = ECoreType.Xray, + }; + SaveDNSItems(config, item); + + var item2 = new DNSItem() + { + remarks = "sing-box", + coreType = ECoreType.sing_box, + }; + SaveDNSItems(config, item2); + } + + return 0; + } + + public static int SaveDNSItems(Config config, DNSItem item) + { + if (Utils.IsNullOrEmpty(item.id)) + { + item.id = Utils.GetGUID(false); + } + + if (SQLiteHelper.Instance.Replace(item) > 0) + { + return 0; + } + else + { + return -1; + } + } + + #endregion DNS + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/CoreConfigHandler.cs b/v2rayN/v2rayN/Handler/CoreConfigHandler.cs new file mode 100755 index 0000000..bc7c929 --- /dev/null +++ b/v2rayN/v2rayN/Handler/CoreConfigHandler.cs @@ -0,0 +1,174 @@ +using System.IO; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + /// + /// Core configuration file processing class + /// + internal class CoreConfigHandler + { + public static int GenerateClientConfig(ProfileItem node, string? fileName, out string msg, out string content) + { + content = string.Empty; + try + { + if (node == null) + { + msg = ResUI.CheckServerSettings; + return -1; + } + var config = LazyConfig.Instance.GetConfig(); + + msg = ResUI.InitialConfiguration; + if (node.configType == EConfigType.Custom) + { + return GenerateClientCustomConfig(node, fileName, out msg); + } + else if (config.tunModeItem.enableTun || LazyConfig.Instance.GetCoreType(node, node.configType) == ECoreType.sing_box) + { + var configGenSingbox = new CoreConfigSingbox(config); + if (configGenSingbox.GenerateClientConfigContent(node, out SingboxConfig? singboxConfig, out msg) != 0) + { + return -1; + } + if (Utils.IsNullOrEmpty(fileName)) + { + content = JsonUtils.Serialize(singboxConfig); + } + else + { + JsonUtils.ToFile(singboxConfig, fileName, false); + } + } + else + { + var coreConfigV2ray = new CoreConfigV2ray(config); + if (coreConfigV2ray.GenerateClientConfigContent(node, out V2rayConfig? v2rayConfig, out msg) != 0) + { + return -1; + } + if (Utils.IsNullOrEmpty(fileName)) + { + content = JsonUtils.Serialize(v2rayConfig); + } + else + { + JsonUtils.ToFile(v2rayConfig, fileName, false); + } + } + } + catch (Exception ex) + { + Logging.SaveLog("GenerateClientConfig", ex); + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + return 0; + } + + private static int GenerateClientCustomConfig(ProfileItem node, string? fileName, out string msg) + { + try + { + if (node == null || fileName is null) + { + msg = ResUI.CheckServerSettings; + return -1; + } + + if (File.Exists(fileName)) + { + File.SetAttributes(fileName, FileAttributes.Normal); //If the file has a read-only attribute, direct deletion will fail + File.Delete(fileName); + } + + string addressFileName = node.address; + if (!File.Exists(addressFileName)) + { + addressFileName = Utils.GetConfigPath(addressFileName); + } + if (!File.Exists(addressFileName)) + { + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + File.Copy(addressFileName, fileName); + File.SetAttributes(fileName, FileAttributes.Normal); //Copy will keep the attributes of addressFileName, so we need to add write permissions to fileName just in case of addressFileName is a read-only file. + + //check again + if (!File.Exists(fileName)) + { + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + + //overwrite port + if (node.preSocksPort <= 0) + { + var fileContent = File.ReadAllLines(fileName).ToList(); + var coreType = LazyConfig.Instance.GetCoreType(node, node.configType); + switch (coreType) + { + case ECoreType.v2fly: + case ECoreType.SagerNet: + case ECoreType.Xray: + case ECoreType.v2fly_v5: + break; + + case ECoreType.clash: + case ECoreType.clash_meta: + case ECoreType.mihomo: + //remove the original + var indexPort = fileContent.FindIndex(t => t.Contains("port:")); + if (indexPort >= 0) + { + fileContent.RemoveAt(indexPort); + } + indexPort = fileContent.FindIndex(t => t.Contains("socks-port:")); + if (indexPort >= 0) + { + fileContent.RemoveAt(indexPort); + } + + fileContent.Add($"port: {LazyConfig.Instance.GetLocalPort(EInboundProtocol.http)}"); + fileContent.Add($"socks-port: {LazyConfig.Instance.GetLocalPort(EInboundProtocol.socks)}"); + break; + } + File.WriteAllLines(fileName, fileContent); + } + + msg = string.Format(ResUI.SuccessfulConfiguration, ""); + } + catch (Exception ex) + { + Logging.SaveLog("GenerateClientCustomConfig", ex); + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + return 0; + } + + public static int GenerateClientSpeedtestConfig(Config config, string fileName, List selecteds, ECoreType coreType, out string msg) + { + if (coreType == ECoreType.sing_box) + { + if ((new CoreConfigSingbox(config)).GenerateClientSpeedtestConfig(selecteds, out SingboxConfig? singboxConfig, out msg) != 0) + { + return -1; + } + JsonUtils.ToFile(singboxConfig, fileName, false); + } + else + { + if ((new CoreConfigV2ray(config)).GenerateClientSpeedtestConfig(selecteds, out V2rayConfig? v2rayConfig, out msg) != 0) + { + return -1; + } + JsonUtils.ToFile(v2rayConfig, fileName, false); + } + return 0; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs b/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs new file mode 100755 index 0000000..c2cd926 --- /dev/null +++ b/v2rayN/v2rayN/Handler/CoreConfigSingbox.cs @@ -0,0 +1,1120 @@ +using System.Net; +using System.Net.NetworkInformation; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + internal class CoreConfigSingbox + { + private Config _config; + + public CoreConfigSingbox(Config config) + { + _config = config; + } + + public int GenerateClientConfigContent(ProfileItem node, out SingboxConfig? singboxConfig, out string msg) + { + singboxConfig = null; + try + { + if (node == null + || node.port <= 0) + { + msg = ResUI.CheckServerSettings; + return -1; + } + + msg = ResUI.InitialConfiguration; + + string result = Utils.GetEmbedText(Global.SingboxSampleClient); + if (Utils.IsNullOrEmpty(result)) + { + msg = ResUI.FailedGetDefaultConfiguration; + return -1; + } + + singboxConfig = JsonUtils.Deserialize(result); + if (singboxConfig == null) + { + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + + GenLog(singboxConfig); + + GenInbounds(singboxConfig); + + GenOutbound(node, singboxConfig.outbounds[0]); + + GenMoreOutbounds(node, singboxConfig); + + GenRouting(singboxConfig); + + GenDns(node, singboxConfig); + + GenExperimental(singboxConfig); + + ConvertGeo2Ruleset(singboxConfig); + + msg = string.Format(ResUI.SuccessfulConfiguration, ""); + } + catch (Exception ex) + { + Logging.SaveLog("GenerateClientConfig4Singbox", ex); + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + return 0; + } + + #region private gen function + + private int GenLog(SingboxConfig singboxConfig) + { + try + { + switch (_config.coreBasicItem.loglevel) + { + case "debug": + case "info": + case "error": + singboxConfig.log.level = _config.coreBasicItem.loglevel; + break; + + case "warning": + singboxConfig.log.level = "warn"; + break; + + default: + break; + } + if (_config.coreBasicItem.loglevel == Global.None) + { + singboxConfig.log.disabled = true; + } + if (_config.coreBasicItem.logEnabled) + { + var dtNow = DateTime.Now; + singboxConfig.log.output = Utils.GetLogPath($"sbox_{dtNow:yyyy-MM-dd}.txt"); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenInbounds(SingboxConfig singboxConfig) + { + try + { + var listen = "::"; + singboxConfig.inbounds = []; + + if (!_config.tunModeItem.enableTun || (_config.tunModeItem.enableTun && _config.tunModeItem.enableExInbound)) + { + var inbound = new Inbound4Sbox() + { + type = EInboundProtocol.socks.ToString(), + tag = EInboundProtocol.socks.ToString(), + listen = Global.Loopback, + }; + singboxConfig.inbounds.Add(inbound); + + inbound.listen_port = LazyConfig.Instance.GetLocalPort(EInboundProtocol.socks); + inbound.sniff = _config.inbound[0].sniffingEnabled; + inbound.sniff_override_destination = _config.inbound[0].routeOnly ? false : _config.inbound[0].sniffingEnabled; + inbound.domain_strategy = Utils.IsNullOrEmpty(_config.routingBasicItem.domainStrategy4Singbox) ? null : _config.routingBasicItem.domainStrategy4Singbox; + + if (_config.routingBasicItem.enableRoutingAdvanced) + { + var routing = ConfigHandler.GetDefaultRouting(_config); + if (!Utils.IsNullOrEmpty(routing.domainStrategy4Singbox)) + { + inbound.domain_strategy = routing.domainStrategy4Singbox; + } + } + + //http + var inbound2 = GetInbound(inbound, EInboundProtocol.http, false); + singboxConfig.inbounds.Add(inbound2); + + if (_config.inbound[0].allowLANConn) + { + if (_config.inbound[0].newPort4LAN) + { + var inbound3 = GetInbound(inbound, EInboundProtocol.socks2, true); + inbound3.listen = listen; + singboxConfig.inbounds.Add(inbound3); + + var inbound4 = GetInbound(inbound, EInboundProtocol.http2, false); + inbound4.listen = listen; + singboxConfig.inbounds.Add(inbound4); + + //auth + if (!Utils.IsNullOrEmpty(_config.inbound[0].user) && !Utils.IsNullOrEmpty(_config.inbound[0].pass)) + { + inbound3.users = new() { new() { username = _config.inbound[0].user, password = _config.inbound[0].pass } }; + inbound4.users = new() { new() { username = _config.inbound[0].user, password = _config.inbound[0].pass } }; + } + } + else + { + inbound.listen = listen; + inbound2.listen = listen; + } + } + } + + if (_config.tunModeItem.enableTun) + { + if (_config.tunModeItem.mtu <= 0) + { + _config.tunModeItem.mtu = Utils.ToInt(Global.TunMtus[0]); + } + if (Utils.IsNullOrEmpty(_config.tunModeItem.stack)) + { + _config.tunModeItem.stack = Global.TunStacks[0]; + } + + var tunInbound = JsonUtils.Deserialize(Utils.GetEmbedText(Global.TunSingboxInboundFileName)) ?? new Inbound4Sbox { }; + tunInbound.mtu = _config.tunModeItem.mtu; + tunInbound.strict_route = _config.tunModeItem.strictRoute; + tunInbound.stack = _config.tunModeItem.stack; + tunInbound.sniff = _config.inbound[0].sniffingEnabled; + tunInbound.sniff_override_destination = _config.inbound[0].routeOnly ? false : _config.inbound[0].sniffingEnabled; + if (_config.tunModeItem.enableIPv6Address == false) + { + tunInbound.inet6_address = null; + } + + singboxConfig.inbounds.Add(tunInbound); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private Inbound4Sbox GetInbound(Inbound4Sbox inItem, EInboundProtocol protocol, bool bSocks) + { + var inbound = JsonUtils.DeepCopy(inItem); + inbound.tag = protocol.ToString(); + inbound.listen_port = inItem.listen_port + (int)protocol; + inbound.type = bSocks ? EInboundProtocol.socks.ToString() : EInboundProtocol.http.ToString(); + return inbound; + } + + private int GenOutbound(ProfileItem node, Outbound4Sbox outbound) + { + try + { + outbound.server = node.address; + outbound.server_port = node.port; + outbound.type = Global.ProtocolTypes[node.configType]; + + switch (node.configType) + { + case EConfigType.VMess: + { + outbound.uuid = node.id; + outbound.alter_id = node.alterId; + if (Global.VmessSecurities.Contains(node.security)) + { + outbound.security = node.security; + } + else + { + outbound.security = Global.DefaultSecurity; + } + + GenOutboundMux(node, outbound); + break; + } + case EConfigType.Shadowsocks: + { + outbound.method = LazyConfig.Instance.GetShadowsocksSecurities(node).Contains(node.security) ? node.security : Global.None; + outbound.password = node.id; + + GenOutboundMux(node, outbound); + break; + } + case EConfigType.Socks: + { + outbound.version = "5"; + if (!Utils.IsNullOrEmpty(node.security) + && !Utils.IsNullOrEmpty(node.id)) + { + outbound.username = node.security; + outbound.password = node.id; + } + break; + } + case EConfigType.Http: + { + if (!Utils.IsNullOrEmpty(node.security) + && !Utils.IsNullOrEmpty(node.id)) + { + outbound.username = node.security; + outbound.password = node.id; + } + break; + } + case EConfigType.VLESS: + { + outbound.uuid = node.id; + + outbound.packet_encoding = "xudp"; + + if (Utils.IsNullOrEmpty(node.flow)) + { + GenOutboundMux(node, outbound); + } + else + { + outbound.flow = node.flow; + } + break; + } + case EConfigType.Trojan: + { + outbound.password = node.id; + + GenOutboundMux(node, outbound); + break; + } + case EConfigType.Hysteria2: + { + outbound.password = node.id; + + if (!Utils.IsNullOrEmpty(node.path)) + { + outbound.obfs = new() + { + type = "salamander", + password = node.path.TrimEx(), + }; + } + + outbound.up_mbps = _config.hysteriaItem.up_mbps > 0 ? _config.hysteriaItem.up_mbps : null; + outbound.down_mbps = _config.hysteriaItem.down_mbps > 0 ? _config.hysteriaItem.down_mbps : null; + break; + } + case EConfigType.Tuic: + { + outbound.uuid = node.id; + outbound.password = node.security; + outbound.congestion_control = node.headerType; + break; + } + case EConfigType.Wireguard: + { + outbound.private_key = node.id; + outbound.peer_public_key = node.publicKey; + outbound.reserved = Utils.String2List(node.path).Select(int.Parse).ToArray(); + outbound.local_address = [.. Utils.String2List(node.requestHost)]; + outbound.mtu = Utils.ToInt(node.shortId.IsNullOrEmpty() ? Global.TunMtus.FirstOrDefault() : node.shortId); + break; + } + } + + GenOutboundTls(node, outbound); + + GenOutboundTransport(node, outbound); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenOutboundMux(ProfileItem node, Outbound4Sbox outbound) + { + try + { + if (_config.coreBasicItem.muxEnabled && !Utils.IsNullOrEmpty(_config.mux4SboxItem.protocol)) + { + var mux = new Multiplex4Sbox() + { + enabled = true, + protocol = _config.mux4SboxItem.protocol, + max_connections = _config.mux4SboxItem.max_connections, + }; + outbound.multiplex = mux; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenOutboundTls(ProfileItem node, Outbound4Sbox outbound) + { + try + { + if (node.streamSecurity == Global.StreamSecurityReality || node.streamSecurity == Global.StreamSecurity) + { + var server_name = string.Empty; + if (!Utils.IsNullOrEmpty(node.sni)) + { + server_name = node.sni; + } + else if (!Utils.IsNullOrEmpty(node.requestHost)) + { + server_name = Utils.String2List(node.requestHost)[0]; + } + var tls = new Tls4Sbox() + { + enabled = true, + server_name = server_name, + insecure = Utils.ToBool(node.allowInsecure.IsNullOrEmpty() ? _config.coreBasicItem.defAllowInsecure.ToString().ToLower() : node.allowInsecure), + alpn = node.GetAlpn(), + }; + if (!Utils.IsNullOrEmpty(node.fingerprint)) + { + tls.utls = new Utls4Sbox() + { + enabled = true, + fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.coreBasicItem.defFingerprint : node.fingerprint + }; + } + if (node.streamSecurity == Global.StreamSecurityReality) + { + tls.reality = new Reality4Sbox() + { + enabled = true, + public_key = node.publicKey, + short_id = node.shortId + }; + tls.insecure = false; + } + outbound.tls = tls; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenOutboundTransport(ProfileItem node, Outbound4Sbox outbound) + { + try + { + var transport = new Transport4Sbox(); + + switch (node.GetNetwork()) + { + case nameof(ETransport.h2): + transport.type = nameof(ETransport.http); + transport.host = Utils.IsNullOrEmpty(node.requestHost) ? null : Utils.String2List(node.requestHost); + transport.path = Utils.IsNullOrEmpty(node.path) ? null : node.path; + break; + + case nameof(ETransport.tcp): //http + if (node.headerType == Global.TcpHeaderHttp) + { + if (node.configType == EConfigType.Shadowsocks) + { + outbound.plugin = "obfs-local"; + outbound.plugin_opts = $"obfs=http;obfs-host={node.requestHost};"; + } + else + { + transport.type = nameof(ETransport.http); + transport.host = Utils.IsNullOrEmpty(node.requestHost) ? null : Utils.String2List(node.requestHost); + transport.path = Utils.IsNullOrEmpty(node.path) ? null : node.path; + } + } + break; + + case nameof(ETransport.ws): + transport.type = nameof(ETransport.ws); + transport.path = Utils.IsNullOrEmpty(node.path) ? null : node.path; + if (!Utils.IsNullOrEmpty(node.requestHost)) + { + transport.headers = new() + { + Host = node.requestHost + }; + } + break; + + case nameof(ETransport.httpupgrade): + transport.type = nameof(ETransport.httpupgrade); + transport.path = Utils.IsNullOrEmpty(node.path) ? null : node.path; + transport.host = Utils.IsNullOrEmpty(node.requestHost) ? null : node.requestHost; + + break; + + case nameof(ETransport.quic): + transport.type = nameof(ETransport.quic); + break; + + case nameof(ETransport.grpc): + transport.type = nameof(ETransport.grpc); + transport.service_name = node.path; + transport.idle_timeout = _config.grpcItem.idle_timeout.ToString("##s"); + transport.ping_timeout = _config.grpcItem.health_check_timeout.ToString("##s"); + transport.permit_without_stream = _config.grpcItem.permit_without_stream; + break; + + default: + break; + } + if (transport.type != null) + { + outbound.transport = transport; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenMoreOutbounds(ProfileItem node, SingboxConfig singboxConfig) + { + if (node.subid.IsNullOrEmpty()) + { + return 0; + } + try + { + var subItem = LazyConfig.Instance.GetSubItem(node.subid); + if (subItem is null) + { + return 0; + } + + //current proxy + var outbound = singboxConfig.outbounds[0]; + var txtOutbound = Utils.GetEmbedText(Global.SingboxSampleOutbound); + + //Previous proxy + var prevNode = LazyConfig.Instance.GetProfileItemViaRemarks(subItem.prevProfile!); + if (prevNode is not null + && prevNode.configType != EConfigType.Custom) + { + var prevOutbound = JsonUtils.Deserialize(txtOutbound); + GenOutbound(prevNode, prevOutbound); + prevOutbound.tag = $"{Global.ProxyTag}2"; + singboxConfig.outbounds.Add(prevOutbound); + + outbound.detour = prevOutbound.tag; + } + + //Next proxy + var nextNode = LazyConfig.Instance.GetProfileItemViaRemarks(subItem.nextProfile!); + if (nextNode is not null + && nextNode.configType != EConfigType.Custom) + { + var nextOutbound = JsonUtils.Deserialize(txtOutbound); + GenOutbound(nextNode, nextOutbound); + nextOutbound.tag = Global.ProxyTag; + singboxConfig.outbounds.Insert(0, nextOutbound); + + outbound.tag = $"{Global.ProxyTag}1"; + nextOutbound.detour = outbound.tag; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + + return 0; + } + + private int GenRouting(SingboxConfig singboxConfig) + { + try + { + var dnsOutbound = "dns_out"; + if (!_config.inbound[0].sniffingEnabled) + { + singboxConfig.route.rules.Add(new() + { + port = [53], + network = "udp", + outbound = dnsOutbound + }); + } + + if (_config.tunModeItem.enableTun) + { + singboxConfig.route.auto_detect_interface = true; + + var tunRules = JsonUtils.Deserialize>(Utils.GetEmbedText(Global.TunSingboxRulesFileName)); + if (tunRules != null) + { + singboxConfig.route.rules.AddRange(tunRules); + } + + GenRoutingDirectExe(out List lstDnsExe, out List lstDirectExe); + singboxConfig.route.rules.Add(new() + { + port = new() { 53 }, + outbound = dnsOutbound, + process_name = lstDnsExe + }); + + singboxConfig.route.rules.Add(new() + { + outbound = Global.DirectTag, + process_name = lstDirectExe + }); + } + + if (_config.routingBasicItem.enableRoutingAdvanced) + { + var routing = ConfigHandler.GetDefaultRouting(_config); + if (routing != null) + { + var rules = JsonUtils.Deserialize>(routing.ruleSet); + foreach (var item in rules!) + { + if (item.enabled) + { + GenRoutingUserRule(item, singboxConfig.route.rules); + } + } + } + } + else + { + var lockedItem = ConfigHandler.GetLockedRoutingItem(_config); + if (lockedItem != null) + { + var rules = JsonUtils.Deserialize>(lockedItem.ruleSet); + foreach (var item in rules!) + { + GenRoutingUserRule(item, singboxConfig.route.rules); + } + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private void GenRoutingDirectExe(out List lstDnsExe, out List lstDirectExe) + { + lstDnsExe = new(); + lstDirectExe = new(); + var coreInfo = LazyConfig.Instance.GetCoreInfo(); + foreach (var it in coreInfo) + { + if (it.coreType == ECoreType.v2rayN) + { + continue; + } + foreach (var it2 in it.coreExes) + { + if (!lstDnsExe.Contains(it2) && it.coreType != ECoreType.sing_box) + { + lstDnsExe.Add($"{it2}.exe"); + } + + if (!lstDirectExe.Contains(it2)) + { + lstDirectExe.Add($"{it2}.exe"); + } + } + } + } + + private int GenRoutingUserRule(RulesItem item, List rules) + { + try + { + if (item == null) + { + return 0; + } + + var rule = new Rule4Sbox() + { + outbound = item.outboundTag, + }; + + if (!Utils.IsNullOrEmpty(item.port)) + { + if (item.port.Contains("-")) + { + rule.port_range = new List { item.port.Replace("-", ":") }; + } + else + { + rule.port = new List { Utils.ToInt(item.port) }; + } + } + if (item.protocol?.Count > 0) + { + rule.protocol = item.protocol; + } + if (item.inboundTag?.Count >= 0) + { + rule.inbound = item.inboundTag; + } + var rule1 = JsonUtils.DeepCopy(rule); + var rule2 = JsonUtils.DeepCopy(rule); + var rule3 = JsonUtils.DeepCopy(rule); + + var hasDomainIp = false; + if (item.domain?.Count > 0) + { + var countDomain = 0; + foreach (var it in item.domain) + { + if (ParseV2Domain(it, rule1)) countDomain++; + } + if (countDomain > 0) + { + rules.Add(rule1); + hasDomainIp = true; + } + } + + if (item.ip?.Count > 0) + { + var countIp = 0; + foreach (var it in item.ip) + { + if (ParseV2Address(it, rule2)) countIp++; + } + if (countIp > 0) + { + rules.Add(rule2); + hasDomainIp = true; + } + } + + if (_config.tunModeItem.enableTun && item.process?.Count > 0) + { + rule3.process_name = item.process; + rules.Add(rule3); + hasDomainIp = true; + } + + if (!hasDomainIp + && (rule.port != null || rule.port_range != null || rule.protocol != null || rule.inbound != null)) + { + rules.Add(rule); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private bool ParseV2Domain(string domain, Rule4Sbox rule) + { + if (domain.StartsWith("#") || domain.StartsWith("ext:") || domain.StartsWith("ext-domain:")) + { + return false; + } + else if (domain.StartsWith("geosite:")) + { + rule.geosite ??= []; + rule.geosite?.Add(domain.Substring(8)); + } + else if (domain.StartsWith("regexp:")) + { + rule.domain_regex ??= []; + rule.domain_regex?.Add(domain.Replace(Global.RoutingRuleComma, ",").Substring(7)); + } + else if (domain.StartsWith("domain:")) + { + rule.domain ??= []; + rule.domain_suffix ??= []; + rule.domain?.Add(domain.Substring(7)); + rule.domain_suffix?.Add("." + domain.Substring(7)); + } + else if (domain.StartsWith("full:")) + { + rule.domain ??= []; + rule.domain?.Add(domain.Substring(5)); + } + else if (domain.StartsWith("keyword:")) + { + rule.domain_keyword ??= []; + rule.domain_keyword?.Add(domain.Substring(8)); + } + else + { + rule.domain_keyword ??= []; + rule.domain_keyword?.Add(domain); + } + return true; + } + + private bool ParseV2Address(string address, Rule4Sbox rule) + { + if (address.StartsWith("ext:") || address.StartsWith("ext-ip:")) + { + return false; + } + else if (address.StartsWith("geoip:!")) + { + return false; + } + else if (address.Equals("geoip:private")) + { + rule.ip_is_private = true; + } + else if (address.StartsWith("geoip:")) + { + if (rule.geoip is null) { rule.geoip = new(); } + rule.geoip?.Add(address.Substring(6)); + } + else + { + if (rule.ip_cidr is null) { rule.ip_cidr = new(); } + rule.ip_cidr?.Add(address); + } + return true; + } + + private int GenDns(ProfileItem node, SingboxConfig singboxConfig) + { + try + { + var item = LazyConfig.Instance.GetDNSItem(ECoreType.sing_box); + var strDNS = string.Empty; + if (_config.tunModeItem.enableTun) + { + strDNS = Utils.IsNullOrEmpty(item?.tunDNS) ? Utils.GetEmbedText(Global.TunSingboxDNSFileName) : item?.tunDNS; + } + else + { + strDNS = Utils.IsNullOrEmpty(item?.normalDNS) ? Utils.GetEmbedText(Global.DNSSingboxNormalFileName) : item?.normalDNS; + } + + var dns4Sbox = JsonUtils.Deserialize(strDNS); + if (dns4Sbox is null) + { + return 0; + } + singboxConfig.dns = dns4Sbox; + + GenDnsDomains(singboxConfig); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenDnsDomains(SingboxConfig singboxConfig) + { + var dns4Sbox = singboxConfig.dns ?? new(); + dns4Sbox.servers ??= []; + dns4Sbox.rules ??= []; + + var lstDomain = singboxConfig.outbounds + .Where(t => !Utils.IsNullOrEmpty(t.server) && Utils.IsDomain(t.server)) + .Select(t => t.server) + .ToList(); + if (lstDomain != null && lstDomain.Count > 0) + { + var tag = "local_local"; + dns4Sbox.servers.Insert(0, new() + { + tag = tag, + address = "223.5.5.5", + detour = Global.DirectTag, + }); + dns4Sbox.rules.Insert(0, new() + { + server = tag, + domain = lstDomain + }); + } + singboxConfig.dns = dns4Sbox; + return 0; + } + + private int GenExperimental(SingboxConfig singboxConfig) + { + if (_config.guiItem.enableStatistics) + { + singboxConfig.experimental ??= new Experimental4Sbox(); + singboxConfig.experimental.clash_api = new Clash_Api4Sbox() + { + external_controller = $"{Global.Loopback}:{LazyConfig.Instance.StatePort}", + }; + } + + if (_config.coreBasicItem.enableCacheFile4Sbox) + { + singboxConfig.experimental ??= new Experimental4Sbox(); + singboxConfig.experimental.cache_file = new CacheFile4Sbox() + { + enabled = true + }; + } + + return 0; + } + + private int ConvertGeo2Ruleset(SingboxConfig singboxConfig) + { + var geosite = "geosite"; + var geoip = "geoip"; + var ruleSets = new List(); + + //convert route geosite & geoip to ruleset + foreach (var rule in singboxConfig.route.rules.Where(t => t.geosite?.Count > 0).ToList() ?? []) + { + rule.rule_set = rule?.geosite?.Select(t => $"{geosite}-{t}").ToList(); + rule.geosite = null; + ruleSets.AddRange(rule.rule_set); + } + foreach (var rule in singboxConfig.route.rules.Where(t => t.geoip?.Count > 0).ToList() ?? []) + { + rule.rule_set = rule?.geoip?.Select(t => $"{geoip}-{t}").ToList(); + rule.geoip = null; + ruleSets.AddRange(rule.rule_set); + } + + //convert dns geosite & geoip to ruleset + foreach (var rule in singboxConfig.dns?.rules.Where(t => t.geosite?.Count > 0).ToList() ?? []) + { + rule.rule_set = rule?.geosite?.Select(t => $"{geosite}-{t}").ToList(); + rule.geosite = null; + } + foreach (var rule in singboxConfig.dns?.rules.Where(t => t.geoip?.Count > 0).ToList() ?? []) + { + rule.rule_set = rule?.geoip?.Select(t => $"{geoip}-{t}").ToList(); + rule.geoip = null; + } + foreach (var dnsRule in singboxConfig.dns?.rules.Where(t => t.rule_set?.Count > 0).ToList() ?? []) + { + ruleSets.AddRange(dnsRule.rule_set); + } + + //load custom ruleset file + List customRulesets = []; + if (_config.routingBasicItem.enableRoutingAdvanced) + { + var routing = ConfigHandler.GetDefaultRouting(_config); + if (!Utils.IsNullOrEmpty(routing.customRulesetPath4Singbox)) + { + var result = Utils.LoadResource(routing.customRulesetPath4Singbox); + if (!Utils.IsNullOrEmpty(result)) + { + customRulesets = (JsonUtils.Deserialize>(result) ?? []) + .Where(t => t.tag != null) + .Where(t => t.type != null) + .Where(t => t.format != null) + .ToList(); + } + } + } + + //Add ruleset srs + singboxConfig.route.rule_set = []; + foreach (var item in new HashSet(ruleSets)) + { + var customRuleset = customRulesets.FirstOrDefault(t => t.tag != null && t.tag.Equals(item)); + if (customRuleset != null) + { + singboxConfig.route.rule_set.Add(customRuleset); + } + else + { + singboxConfig.route.rule_set.Add(new() + { + type = "remote", + format = "binary", + tag = item, + url = string.Format(Global.SingboxRulesetUrl, item.StartsWith(geosite) ? geosite : geoip, item), + download_detour = Global.ProxyTag + }); + } + } + + return 0; + } + + #endregion private gen function + + #region Gen speedtest config + + public int GenerateClientSpeedtestConfig(List selecteds, out SingboxConfig? singboxConfig, out string msg) + { + singboxConfig = null; + try + { + if (_config == null) + { + msg = ResUI.CheckServerSettings; + return -1; + } + + msg = ResUI.InitialConfiguration; + + string result = Utils.GetEmbedText(Global.SingboxSampleClient); + string txtOutbound = Utils.GetEmbedText(Global.SingboxSampleOutbound); + if (Utils.IsNullOrEmpty(result) || txtOutbound.IsNullOrEmpty()) + { + msg = ResUI.FailedGetDefaultConfiguration; + return -1; + } + + singboxConfig = JsonUtils.Deserialize(result); + if (singboxConfig == null) + { + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + List lstIpEndPoints = new(); + List lstTcpConns = new(); + try + { + lstIpEndPoints.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners()); + lstIpEndPoints.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners()); + lstTcpConns.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections()); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + + GenLog(singboxConfig); + //GenDns(new(), singboxConfig); + singboxConfig.inbounds.Clear(); // Remove "proxy" service for speedtest, avoiding port conflicts. + singboxConfig.outbounds.RemoveAt(0); + + int httpPort = LazyConfig.Instance.GetLocalPort(EInboundProtocol.speedtest); + + foreach (var it in selecteds) + { + if (it.configType == EConfigType.Custom) + { + continue; + } + if (it.port <= 0) + { + continue; + } + if (it.configType is EConfigType.VMess or EConfigType.VLESS) + { + var item2 = LazyConfig.Instance.GetProfileItem(it.indexId); + if (item2 is null || Utils.IsNullOrEmpty(item2.id) || !Utils.IsGuidByParse(item2.id)) + { + continue; + } + } + + //find unused port + var port = httpPort; + for (int k = httpPort; k < Global.MaxPort; k++) + { + if (lstIpEndPoints?.FindIndex(_it => _it.Port == k) >= 0) + { + continue; + } + if (lstTcpConns?.FindIndex(_it => _it.LocalEndPoint.Port == k) >= 0) + { + continue; + } + //found + port = k; + httpPort = port + 1; + break; + } + + //Port In Used + if (lstIpEndPoints?.FindIndex(_it => _it.Port == port) >= 0) + { + continue; + } + it.port = port; + it.allowTest = true; + + //inbound + Inbound4Sbox inbound = new() + { + listen = Global.Loopback, + listen_port = port, + type = EInboundProtocol.http.ToString(), + }; + inbound.tag = inbound.type + inbound.listen_port.ToString(); + singboxConfig.inbounds.Add(inbound); + + //outbound + var item = LazyConfig.Instance.GetProfileItem(it.indexId); + if (item is null) + { + continue; + } + if (item.configType == EConfigType.Shadowsocks + && !Global.SsSecuritiesInSingbox.Contains(item.security)) + { + continue; + } + if (item.configType == EConfigType.VLESS + && !Global.Flows.Contains(item.flow)) + { + continue; + } + + var outbound = JsonUtils.Deserialize(txtOutbound); + GenOutbound(item, outbound); + outbound.tag = Global.ProxyTag + inbound.listen_port.ToString(); + singboxConfig.outbounds.Add(outbound); + + //rule + Rule4Sbox rule = new() + { + inbound = new List { inbound.tag }, + outbound = outbound.tag + }; + singboxConfig.route.rules.Add(rule); + } + + GenDnsDomains(singboxConfig); + //var dnsServer = singboxConfig.dns?.servers.FirstOrDefault(); + //if (dnsServer != null) + //{ + // dnsServer.detour = singboxConfig.route.rules.LastOrDefault()?.outbound; + //} + //var dnsRule = singboxConfig.dns?.rules.Where(t => t.outbound != null).FirstOrDefault(); + //if (dnsRule != null) + //{ + // singboxConfig.dns.rules = []; + // singboxConfig.dns.rules.Add(dnsRule); + //} + + //msg = string.Format(ResUI.SuccessfulConfiguration"), node.getSummary()); + return 0; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + } + + #endregion Gen speedtest config + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs b/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs new file mode 100755 index 0000000..8ca96e9 --- /dev/null +++ b/v2rayN/v2rayN/Handler/CoreConfigV2ray.cs @@ -0,0 +1,1079 @@ +using System.Net; +using System.Net.NetworkInformation; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + internal class CoreConfigV2ray + { + private Config _config; + + public CoreConfigV2ray(Config config) + { + _config = config; + } + + public int GenerateClientConfigContent(ProfileItem node, out V2rayConfig? v2rayConfig, out string msg) + { + v2rayConfig = null; + try + { + if (node == null + || node.port <= 0) + { + msg = ResUI.CheckServerSettings; + return -1; + } + + msg = ResUI.InitialConfiguration; + + string result = Utils.GetEmbedText(Global.V2raySampleClient); + if (Utils.IsNullOrEmpty(result)) + { + msg = ResUI.FailedGetDefaultConfiguration; + return -1; + } + + v2rayConfig = JsonUtils.Deserialize(result); + if (v2rayConfig == null) + { + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + + GenLog(v2rayConfig); + + GenInbounds(v2rayConfig); + + GenRouting(v2rayConfig); + + GenOutbound(node, v2rayConfig.outbounds[0]); + + GenMoreOutbounds(node, v2rayConfig); + + GenDns(v2rayConfig); + + GenStatistic(v2rayConfig); + + msg = string.Format(ResUI.SuccessfulConfiguration, ""); + } + catch (Exception ex) + { + Logging.SaveLog("GenerateClientConfig4V2ray", ex); + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + return 0; + } + + #region private gen function + + private int GenLog(V2rayConfig v2rayConfig) + { + try + { + if (_config.coreBasicItem.logEnabled) + { + var dtNow = DateTime.Now; + v2rayConfig.log.loglevel = _config.coreBasicItem.loglevel; + v2rayConfig.log.access = Utils.GetLogPath($"Vaccess_{dtNow:yyyy-MM-dd}.txt"); + v2rayConfig.log.error = Utils.GetLogPath($"Verror_{dtNow:yyyy-MM-dd}.txt"); + } + else + { + v2rayConfig.log.loglevel = _config.coreBasicItem.loglevel; + v2rayConfig.log.access = ""; + v2rayConfig.log.error = ""; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenInbounds(V2rayConfig v2rayConfig) + { + try + { + var listen = "0.0.0.0"; + v2rayConfig.inbounds = []; + + Inbounds4Ray? inbound = GetInbound(_config.inbound[0], EInboundProtocol.socks, true); + v2rayConfig.inbounds.Add(inbound); + + //http + Inbounds4Ray? inbound2 = GetInbound(_config.inbound[0], EInboundProtocol.http, false); + v2rayConfig.inbounds.Add(inbound2); + + if (_config.inbound[0].allowLANConn) + { + if (_config.inbound[0].newPort4LAN) + { + var inbound3 = GetInbound(_config.inbound[0], EInboundProtocol.socks2, true); + inbound3.listen = listen; + v2rayConfig.inbounds.Add(inbound3); + + var inbound4 = GetInbound(_config.inbound[0], EInboundProtocol.http2, false); + inbound4.listen = listen; + v2rayConfig.inbounds.Add(inbound4); + + //auth + if (!Utils.IsNullOrEmpty(_config.inbound[0].user) && !Utils.IsNullOrEmpty(_config.inbound[0].pass)) + { + inbound3.settings.auth = "password"; + inbound3.settings.accounts = new List { new AccountsItem4Ray() { user = _config.inbound[0].user, pass = _config.inbound[0].pass } }; + + inbound4.settings.auth = "password"; + inbound4.settings.accounts = new List { new AccountsItem4Ray() { user = _config.inbound[0].user, pass = _config.inbound[0].pass } }; + } + } + else + { + inbound.listen = listen; + inbound2.listen = listen; + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private Inbounds4Ray GetInbound(InItem inItem, EInboundProtocol protocol, bool bSocks) + { + string result = Utils.GetEmbedText(Global.V2raySampleInbound); + if (Utils.IsNullOrEmpty(result)) + { + return new(); + } + + var inbound = JsonUtils.Deserialize(result); + if (inbound == null) + { + return new(); + } + inbound.tag = protocol.ToString(); + inbound.port = inItem.localPort + (int)protocol; + inbound.protocol = bSocks ? EInboundProtocol.socks.ToString() : EInboundProtocol.http.ToString(); + inbound.settings.udp = inItem.udpEnabled; + inbound.sniffing.enabled = inItem.sniffingEnabled; + inbound.sniffing.destOverride = inItem.destOverride; + inbound.sniffing.routeOnly = inItem.routeOnly; + + return inbound; + } + + private int GenRouting(V2rayConfig v2rayConfig) + { + try + { + if (v2rayConfig.routing?.rules != null) + { + v2rayConfig.routing.domainStrategy = _config.routingBasicItem.domainStrategy; + v2rayConfig.routing.domainMatcher = Utils.IsNullOrEmpty(_config.routingBasicItem.domainMatcher) ? null : _config.routingBasicItem.domainMatcher; + + if (_config.routingBasicItem.enableRoutingAdvanced) + { + var routing = ConfigHandler.GetDefaultRouting(_config); + if (routing != null) + { + if (!Utils.IsNullOrEmpty(routing.domainStrategy)) + { + v2rayConfig.routing.domainStrategy = routing.domainStrategy; + } + var rules = JsonUtils.Deserialize>(routing.ruleSet); + foreach (var item in rules) + { + if (item.enabled) + { + var item2 = JsonUtils.Deserialize(JsonUtils.Serialize(item)); + GenRoutingUserRule(item2, v2rayConfig); + } + } + } + } + else + { + var lockedItem = ConfigHandler.GetLockedRoutingItem(_config); + if (lockedItem != null) + { + var rules = JsonUtils.Deserialize>(lockedItem.ruleSet); + foreach (var item in rules) + { + var item2 = JsonUtils.Deserialize(JsonUtils.Serialize(item)); + GenRoutingUserRule(item2, v2rayConfig); + } + } + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenRoutingUserRule(RulesItem4Ray? rules, V2rayConfig v2rayConfig) + { + try + { + if (rules == null) + { + return 0; + } + if (Utils.IsNullOrEmpty(rules.port)) + { + rules.port = null; + } + if (rules.domain?.Count == 0) + { + rules.domain = null; + } + if (rules.ip?.Count == 0) + { + rules.ip = null; + } + if (rules.protocol?.Count == 0) + { + rules.protocol = null; + } + if (rules.inboundTag?.Count == 0) + { + rules.inboundTag = null; + } + + var hasDomainIp = false; + if (rules.domain?.Count > 0) + { + var it = JsonUtils.DeepCopy(rules); + it.ip = null; + it.type = "field"; + for (int k = it.domain.Count - 1; k >= 0; k--) + { + if (it.domain[k].StartsWith("#")) + { + it.domain.RemoveAt(k); + } + it.domain[k] = it.domain[k].Replace(Global.RoutingRuleComma, ","); + } + v2rayConfig.routing.rules.Add(it); + hasDomainIp = true; + } + if (rules.ip?.Count > 0) + { + var it = JsonUtils.DeepCopy(rules); + it.domain = null; + it.type = "field"; + v2rayConfig.routing.rules.Add(it); + hasDomainIp = true; + } + if (!hasDomainIp) + { + if (!Utils.IsNullOrEmpty(rules.port) + || (rules.protocol?.Count > 0) + || (rules.inboundTag?.Count > 0) + ) + { + var it = JsonUtils.DeepCopy(rules); + it.type = "field"; + v2rayConfig.routing.rules.Add(it); + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenOutbound(ProfileItem node, Outbounds4Ray outbound) + { + try + { + switch (node.configType) + { + case EConfigType.VMess: + { + VnextItem4Ray vnextItem; + if (outbound.settings.vnext.Count <= 0) + { + vnextItem = new VnextItem4Ray(); + outbound.settings.vnext.Add(vnextItem); + } + else + { + vnextItem = outbound.settings.vnext[0]; + } + vnextItem.address = node.address; + vnextItem.port = node.port; + + UsersItem4Ray usersItem; + if (vnextItem.users.Count <= 0) + { + usersItem = new UsersItem4Ray(); + vnextItem.users.Add(usersItem); + } + else + { + usersItem = vnextItem.users[0]; + } + //远程服务器用户ID + usersItem.id = node.id; + usersItem.alterId = node.alterId; + usersItem.email = Global.UserEMail; + if (Global.VmessSecurities.Contains(node.security)) + { + usersItem.security = node.security; + } + else + { + usersItem.security = Global.DefaultSecurity; + } + + GenOutboundMux(node, outbound, _config.coreBasicItem.muxEnabled); + + outbound.settings.servers = null; + break; + } + case EConfigType.Shadowsocks: + { + ServersItem4Ray serversItem; + if (outbound.settings.servers.Count <= 0) + { + serversItem = new ServersItem4Ray(); + outbound.settings.servers.Add(serversItem); + } + else + { + serversItem = outbound.settings.servers[0]; + } + serversItem.address = node.address; + serversItem.port = node.port; + serversItem.password = node.id; + serversItem.method = LazyConfig.Instance.GetShadowsocksSecurities(node).Contains(node.security) ? node.security : "none"; + + serversItem.ota = false; + serversItem.level = 1; + + GenOutboundMux(node, outbound, false); + + outbound.settings.vnext = null; + break; + } + case EConfigType.Socks: + case EConfigType.Http: + { + ServersItem4Ray serversItem; + if (outbound.settings.servers.Count <= 0) + { + serversItem = new ServersItem4Ray(); + outbound.settings.servers.Add(serversItem); + } + else + { + serversItem = outbound.settings.servers[0]; + } + serversItem.address = node.address; + serversItem.port = node.port; + serversItem.method = null; + serversItem.password = null; + + if (!Utils.IsNullOrEmpty(node.security) + && !Utils.IsNullOrEmpty(node.id)) + { + SocksUsersItem4Ray socksUsersItem = new() + { + user = node.security, + pass = node.id, + level = 1 + }; + + serversItem.users = new List() { socksUsersItem }; + } + + GenOutboundMux(node, outbound, false); + + outbound.settings.vnext = null; + break; + } + case EConfigType.VLESS: + { + VnextItem4Ray vnextItem; + if (outbound.settings.vnext?.Count <= 0) + { + vnextItem = new VnextItem4Ray(); + outbound.settings.vnext.Add(vnextItem); + } + else + { + vnextItem = outbound.settings.vnext[0]; + } + vnextItem.address = node.address; + vnextItem.port = node.port; + + UsersItem4Ray usersItem; + if (vnextItem.users.Count <= 0) + { + usersItem = new UsersItem4Ray(); + vnextItem.users.Add(usersItem); + } + else + { + usersItem = vnextItem.users[0]; + } + usersItem.id = node.id; + usersItem.email = Global.UserEMail; + usersItem.encryption = node.security; + + GenOutboundMux(node, outbound, _config.coreBasicItem.muxEnabled); + + if (node.streamSecurity == Global.StreamSecurityReality + || node.streamSecurity == Global.StreamSecurity) + { + if (!Utils.IsNullOrEmpty(node.flow)) + { + usersItem.flow = node.flow; + + GenOutboundMux(node, outbound, false); + } + } + if (node.streamSecurity == Global.StreamSecurityReality && Utils.IsNullOrEmpty(node.flow)) + { + GenOutboundMux(node, outbound, _config.coreBasicItem.muxEnabled); + } + + outbound.settings.servers = null; + break; + } + case EConfigType.Trojan: + { + ServersItem4Ray serversItem; + if (outbound.settings.servers.Count <= 0) + { + serversItem = new ServersItem4Ray(); + outbound.settings.servers.Add(serversItem); + } + else + { + serversItem = outbound.settings.servers[0]; + } + serversItem.address = node.address; + serversItem.port = node.port; + serversItem.password = node.id; + + serversItem.ota = false; + serversItem.level = 1; + + GenOutboundMux(node, outbound, false); + + outbound.settings.vnext = null; + break; + } + } + + outbound.protocol = Global.ProtocolTypes[node.configType]; + GenBoundStreamSettings(node, outbound.streamSettings); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenOutboundMux(ProfileItem node, Outbounds4Ray outbound, bool enabled) + { + try + { + if (enabled) + { + outbound.mux.enabled = true; + outbound.mux.concurrency = 8; + } + else + { + outbound.mux.enabled = false; + outbound.mux.concurrency = -1; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenBoundStreamSettings(ProfileItem node, StreamSettings4Ray streamSettings) + { + try + { + streamSettings.network = node.GetNetwork(); + string host = node.requestHost.TrimEx(); + string sni = node.sni; + string useragent = ""; + if (!_config.coreBasicItem.defUserAgent.IsNullOrEmpty()) + { + try + { + useragent = Global.UserAgentTexts[_config.coreBasicItem.defUserAgent]; + } + catch (KeyNotFoundException) + { + useragent = _config.coreBasicItem.defUserAgent; + } + } + + //if tls + if (node.streamSecurity == Global.StreamSecurity) + { + streamSettings.security = node.streamSecurity; + + TlsSettings4Ray tlsSettings = new() + { + allowInsecure = Utils.ToBool(node.allowInsecure.IsNullOrEmpty() ? _config.coreBasicItem.defAllowInsecure.ToString().ToLower() : node.allowInsecure), + alpn = node.GetAlpn(), + fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.coreBasicItem.defFingerprint : node.fingerprint + }; + if (!Utils.IsNullOrEmpty(sni)) + { + tlsSettings.serverName = sni; + } + else if (!Utils.IsNullOrEmpty(host)) + { + tlsSettings.serverName = Utils.String2List(host)[0]; + } + streamSettings.tlsSettings = tlsSettings; + } + + //if Reality + if (node.streamSecurity == Global.StreamSecurityReality) + { + streamSettings.security = node.streamSecurity; + + TlsSettings4Ray realitySettings = new() + { + fingerprint = node.fingerprint.IsNullOrEmpty() ? _config.coreBasicItem.defFingerprint : node.fingerprint, + serverName = sni, + publicKey = node.publicKey, + shortId = node.shortId, + spiderX = node.spiderX, + }; + + streamSettings.realitySettings = realitySettings; + } + + //streamSettings + switch (node.GetNetwork()) + { + case nameof(ETransport.kcp): + KcpSettings4Ray kcpSettings = new() + { + mtu = _config.kcpItem.mtu, + tti = _config.kcpItem.tti + }; + + kcpSettings.uplinkCapacity = _config.kcpItem.uplinkCapacity; + kcpSettings.downlinkCapacity = _config.kcpItem.downlinkCapacity; + + kcpSettings.congestion = _config.kcpItem.congestion; + kcpSettings.readBufferSize = _config.kcpItem.readBufferSize; + kcpSettings.writeBufferSize = _config.kcpItem.writeBufferSize; + kcpSettings.header = new Header4Ray + { + type = node.headerType + }; + if (!Utils.IsNullOrEmpty(node.path)) + { + kcpSettings.seed = node.path; + } + streamSettings.kcpSettings = kcpSettings; + break; + //ws + case nameof(ETransport.ws): + WsSettings4Ray wsSettings = new(); + wsSettings.headers = new Headers4Ray(); + string path = node.path; + if (!Utils.IsNullOrEmpty(host)) + { + wsSettings.headers.Host = host; + } + if (!Utils.IsNullOrEmpty(path)) + { + wsSettings.path = path; + } + if (!Utils.IsNullOrEmpty(useragent)) + { + wsSettings.headers.UserAgent = useragent; + } + streamSettings.wsSettings = wsSettings; + + break; + //httpupgrade + case nameof(ETransport.httpupgrade): + HttpupgradeSettings4Ray httpupgradeSettings = new(); + + if (!Utils.IsNullOrEmpty(node.path)) + { + httpupgradeSettings.path = node.path; + } + if (!Utils.IsNullOrEmpty(host)) + { + httpupgradeSettings.host = host; + } + streamSettings.httpupgradeSettings = httpupgradeSettings; + + break; + //h2 + case nameof(ETransport.h2): + HttpSettings4Ray httpSettings = new(); + + if (!Utils.IsNullOrEmpty(host)) + { + httpSettings.host = Utils.String2List(host); + } + httpSettings.path = node.path; + + streamSettings.httpSettings = httpSettings; + + break; + //quic + case nameof(ETransport.quic): + QuicSettings4Ray quicsettings = new() + { + security = host, + key = node.path, + header = new Header4Ray + { + type = node.headerType + } + }; + streamSettings.quicSettings = quicsettings; + if (node.streamSecurity == Global.StreamSecurity) + { + if (!Utils.IsNullOrEmpty(sni)) + { + streamSettings.tlsSettings.serverName = sni; + } + else + { + streamSettings.tlsSettings.serverName = node.address; + } + } + break; + + case nameof(ETransport.grpc): + GrpcSettings4Ray grpcSettings = new() + { + authority = Utils.IsNullOrEmpty(host) ? null : host, + serviceName = node.path, + multiMode = (node.headerType == Global.GrpcMultiMode), + idle_timeout = _config.grpcItem.idle_timeout, + health_check_timeout = _config.grpcItem.health_check_timeout, + permit_without_stream = _config.grpcItem.permit_without_stream, + initial_windows_size = _config.grpcItem.initial_windows_size, + }; + streamSettings.grpcSettings = grpcSettings; + break; + + default: + //tcp + if (node.headerType == Global.TcpHeaderHttp) + { + TcpSettings4Ray tcpSettings = new() + { + header = new Header4Ray + { + type = node.headerType + } + }; + + //request Host + string request = Utils.GetEmbedText(Global.V2raySampleHttpRequestFileName); + string[] arrHost = host.Split(','); + string host2 = string.Join("\",\"", arrHost); + request = request.Replace("$requestHost$", $"\"{host2}\""); + //request = request.Replace("$requestHost$", string.Format("\"{0}\"", config.requestHost())); + request = request.Replace("$requestUserAgent$", $"\"{useragent}\""); + //Path + string pathHttp = @"/"; + if (!Utils.IsNullOrEmpty(node.path)) + { + string[] arrPath = node.path.Split(','); + pathHttp = string.Join("\",\"", arrPath); + } + request = request.Replace("$requestPath$", $"\"{pathHttp}\""); + tcpSettings.header.request = JsonUtils.Deserialize(request); + + streamSettings.tcpSettings = tcpSettings; + } + break; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenDns(V2rayConfig v2rayConfig) + { + try + { + var item = LazyConfig.Instance.GetDNSItem(ECoreType.Xray); + var normalDNS = item?.normalDNS; + var domainStrategy4Freedom = item?.domainStrategy4Freedom; + if (Utils.IsNullOrEmpty(normalDNS)) + { + normalDNS = Utils.GetEmbedText(Global.DNSV2rayNormalFileName); + } + + //Outbound Freedom domainStrategy + if (!Utils.IsNullOrEmpty(domainStrategy4Freedom)) + { + var outbound = v2rayConfig.outbounds[1]; + outbound.settings.domainStrategy = domainStrategy4Freedom; + outbound.settings.userLevel = 0; + } + + var obj = JsonUtils.ParseJson(normalDNS); + if (obj is null) + { + List servers = []; + string[] arrDNS = normalDNS.Split(','); + foreach (string str in arrDNS) + { + servers.Add(str); + } + obj = JsonUtils.ParseJson("{}"); + obj["servers"] = JsonUtils.SerializeToNode(servers); + } + + // 追加至 dns 设置 + if (item.useSystemHosts) + { + var systemHosts = Utils.GetSystemHosts(); + if (systemHosts.Count > 0) + { + var normalHost = obj["hosts"]; + if (normalHost != null) + { + foreach (var host in systemHosts) + { + if (normalHost[host.Key] != null) + continue; + normalHost[host.Key] = host.Value; + } + } + } + } + + v2rayConfig.dns = obj; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return 0; + } + + private int GenStatistic(V2rayConfig v2rayConfig) + { + if (_config.guiItem.enableStatistics) + { + string tag = EInboundProtocol.api.ToString(); + API4Ray apiObj = new(); + Policy4Ray policyObj = new(); + SystemPolicy4Ray policySystemSetting = new(); + + string[] services = { "StatsService" }; + + v2rayConfig.stats = new Stats4Ray(); + + apiObj.tag = tag; + apiObj.services = services.ToList(); + v2rayConfig.api = apiObj; + + policySystemSetting.statsOutboundDownlink = true; + policySystemSetting.statsOutboundUplink = true; + policyObj.system = policySystemSetting; + v2rayConfig.policy = policyObj; + + if (!v2rayConfig.inbounds.Exists(item => item.tag == tag)) + { + Inbounds4Ray apiInbound = new(); + Inboundsettings4Ray apiInboundSettings = new(); + apiInbound.tag = tag; + apiInbound.listen = Global.Loopback; + apiInbound.port = LazyConfig.Instance.StatePort; + apiInbound.protocol = Global.InboundAPIProtocol; + apiInboundSettings.address = Global.Loopback; + apiInbound.settings = apiInboundSettings; + v2rayConfig.inbounds.Add(apiInbound); + } + + if (!v2rayConfig.routing.rules.Exists(item => item.outboundTag == tag)) + { + RulesItem4Ray apiRoutingRule = new() + { + inboundTag = new List { tag }, + outboundTag = tag, + type = "field" + }; + + v2rayConfig.routing.rules.Add(apiRoutingRule); + } + } + return 0; + } + + private int GenMoreOutbounds(ProfileItem node, V2rayConfig v2rayConfig) + { + //fragment proxy + if (_config.coreBasicItem.enableFragment + && !Utils.IsNullOrEmpty(v2rayConfig.outbounds[0].streamSettings?.security)) + { + var fragmentOutbound = new Outbounds4Ray + { + protocol = "freedom", + tag = $"{Global.ProxyTag}3", + settings = new() + { + fragment = new() + { + packets = "tlshello", + length = "100-200", + interval = "10-20" + } + } + }; + + v2rayConfig.outbounds.Add(fragmentOutbound); + v2rayConfig.outbounds[0].streamSettings.sockopt = new() + { + dialerProxy = fragmentOutbound.tag + }; + return 0; + } + + if (node.subid.IsNullOrEmpty()) + { + return 0; + } + try + { + var subItem = LazyConfig.Instance.GetSubItem(node.subid); + if (subItem is null) + { + return 0; + } + + //current proxy + var outbound = v2rayConfig.outbounds[0]; + var txtOutbound = Utils.GetEmbedText(Global.V2raySampleOutbound); + + //Previous proxy + var prevNode = LazyConfig.Instance.GetProfileItemViaRemarks(subItem.prevProfile!); + if (prevNode is not null + && prevNode.configType != EConfigType.Custom + && prevNode.configType != EConfigType.Hysteria2 + && prevNode.configType != EConfigType.Tuic + && prevNode.configType != EConfigType.Wireguard) + { + var prevOutbound = JsonUtils.Deserialize(txtOutbound); + GenOutbound(prevNode, prevOutbound); + prevOutbound.tag = $"{Global.ProxyTag}2"; + v2rayConfig.outbounds.Add(prevOutbound); + + outbound.streamSettings.sockopt = new() + { + dialerProxy = prevOutbound.tag + }; + } + + //Next proxy + var nextNode = LazyConfig.Instance.GetProfileItemViaRemarks(subItem.nextProfile!); + if (nextNode is not null + && nextNode.configType != EConfigType.Custom + && nextNode.configType != EConfigType.Hysteria2 + && nextNode.configType != EConfigType.Tuic + && nextNode.configType != EConfigType.Wireguard) + { + var nextOutbound = JsonUtils.Deserialize(txtOutbound); + GenOutbound(nextNode, nextOutbound); + nextOutbound.tag = Global.ProxyTag; + v2rayConfig.outbounds.Insert(0, nextOutbound); + + outbound.tag = $"{Global.ProxyTag}1"; + nextOutbound.streamSettings.sockopt = new() + { + dialerProxy = outbound.tag + }; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + + return 0; + } + + #endregion private gen function + + #region Gen speedtest config + + public int GenerateClientSpeedtestConfig(List selecteds, out V2rayConfig? v2rayConfig, out string msg) + { + v2rayConfig = null; + try + { + if (_config == null) + { + msg = ResUI.CheckServerSettings; + return -1; + } + + msg = ResUI.InitialConfiguration; + + string result = Utils.GetEmbedText(Global.V2raySampleClient); + string txtOutbound = Utils.GetEmbedText(Global.V2raySampleOutbound); + if (Utils.IsNullOrEmpty(result) || txtOutbound.IsNullOrEmpty()) + { + msg = ResUI.FailedGetDefaultConfiguration; + return -1; + } + + v2rayConfig = JsonUtils.Deserialize(result); + if (v2rayConfig == null) + { + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + List lstIpEndPoints = new(); + List lstTcpConns = new(); + try + { + lstIpEndPoints.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpListeners()); + lstIpEndPoints.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveUdpListeners()); + lstTcpConns.AddRange(IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections()); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + + GenLog(v2rayConfig); + v2rayConfig.inbounds.Clear(); // Remove "proxy" service for speedtest, avoiding port conflicts. + v2rayConfig.outbounds.RemoveAt(0); + + int httpPort = LazyConfig.Instance.GetLocalPort(EInboundProtocol.speedtest); + + foreach (var it in selecteds) + { + if (it.configType == EConfigType.Custom) + { + continue; + } + if (it.port <= 0) + { + continue; + } + if (it.configType is EConfigType.VMess or EConfigType.VLESS) + { + var item2 = LazyConfig.Instance.GetProfileItem(it.indexId); + if (item2 is null || Utils.IsNullOrEmpty(item2.id) || !Utils.IsGuidByParse(item2.id)) + { + continue; + } + } + + //find unused port + var port = httpPort; + for (int k = httpPort; k < Global.MaxPort; k++) + { + if (lstIpEndPoints?.FindIndex(_it => _it.Port == k) >= 0) + { + continue; + } + if (lstTcpConns?.FindIndex(_it => _it.LocalEndPoint.Port == k) >= 0) + { + continue; + } + //found + port = k; + httpPort = port + 1; + break; + } + + //Port In Used + if (lstIpEndPoints?.FindIndex(_it => _it.Port == port) >= 0) + { + continue; + } + it.port = port; + it.allowTest = true; + + //inbound + Inbounds4Ray inbound = new() + { + listen = Global.Loopback, + port = port, + protocol = EInboundProtocol.http.ToString(), + }; + inbound.tag = inbound.protocol + inbound.port.ToString(); + v2rayConfig.inbounds.Add(inbound); + + //outbound + var item = LazyConfig.Instance.GetProfileItem(it.indexId); + if (item is null) + { + continue; + } + if (item.configType == EConfigType.Shadowsocks + && !Global.SsSecuritiesInXray.Contains(item.security)) + { + continue; + } + if (item.configType == EConfigType.VLESS + && !Global.Flows.Contains(item.flow)) + { + continue; + } + + var outbound = JsonUtils.Deserialize(txtOutbound); + GenOutbound(item, outbound); + outbound.tag = Global.ProxyTag + inbound.port.ToString(); + v2rayConfig.outbounds.Add(outbound); + + //rule + RulesItem4Ray rule = new() + { + inboundTag = new List { inbound.tag }, + outboundTag = outbound.tag, + type = "field" + }; + v2rayConfig.routing.rules.Add(rule); + } + + //msg = string.Format(ResUI.SuccessfulConfiguration"), node.getSummary()); + return 0; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + msg = ResUI.FailedGenDefaultConfiguration; + return -1; + } + } + + #endregion Gen speedtest config + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/CoreHandler.cs b/v2rayN/v2rayN/Handler/CoreHandler.cs new file mode 100755 index 0000000..b6b37c2 --- /dev/null +++ b/v2rayN/v2rayN/Handler/CoreHandler.cs @@ -0,0 +1,371 @@ +using System.Diagnostics; +using System.IO; +using System.Reactive.Linq; +using System.Text; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + /// + /// Core process processing class + /// + internal class CoreHandler + { + private Config _config; + private Process? _process; + private Process? _processPre; + private Action _updateFunc; + + public CoreHandler(Config config, Action update) + { + _config = config; + _updateFunc = update; + + Environment.SetEnvironmentVariable("v2ray.location.asset", Utils.GetBinPath(""), EnvironmentVariableTarget.Process); + Environment.SetEnvironmentVariable("xray.location.asset", Utils.GetBinPath(""), EnvironmentVariableTarget.Process); + } + + public void LoadCore() + { + var node = ConfigHandler.GetDefaultServer(_config); + if (node == null) + { + ShowMsg(false, ResUI.CheckServerSettings); + return; + } + + string fileName = Utils.GetConfigPath(Global.CoreConfigFileName); + if (CoreConfigHandler.GenerateClientConfig(node, fileName, out string msg, out string content) != 0) + { + ShowMsg(false, msg); + } + else + { + ShowMsg(false, msg); + ShowMsg(true, $"{node.GetSummary()}"); + CoreStop(); + if (_config.tunModeItem.enableTun) + { + Thread.Sleep(1000); + Utils.RemoveTunDevice(); + } + + CoreStart(node); + + //In tun mode, do a delay check and restart the core + if (_config.tunModeItem.enableTun) + { + Observable.Range(1, 1) + .Delay(TimeSpan.FromSeconds(15)) + .Subscribe(x => + { + { + if (_process == null || _process.HasExited) + { + CoreStart(node); + ShowMsg(false, "Tun mode restart the core once"); + Logging.SaveLog("Tun mode restart the core once"); + } + } + }); + } + } + } + + public int LoadCoreConfigSpeedtest(List selecteds) + { + int pid = -1; + var coreType = selecteds.Exists(t => t.configType == EConfigType.Hysteria2 || t.configType == EConfigType.Tuic || t.configType == EConfigType.Wireguard) ? ECoreType.sing_box : ECoreType.Xray; + string configPath = Utils.GetConfigPath(Global.CoreSpeedtestConfigFileName); + if (CoreConfigHandler.GenerateClientSpeedtestConfig(_config, configPath, selecteds, coreType, out string msg) != 0) + { + ShowMsg(false, msg); + } + else + { + ShowMsg(false, msg); + pid = CoreStartSpeedtest(configPath, coreType); + } + return pid; + } + + public void CoreStop() + { + try + { + bool hasProc = false; + if (_process != null) + { + KillProcess(_process); + _process.Dispose(); + _process = null; + hasProc = true; + } + + if (_processPre != null) + { + KillProcess(_processPre); + _processPre.Dispose(); + _processPre = null; + hasProc = true; + } + + if (!hasProc) + { + var coreInfo = LazyConfig.Instance.GetCoreInfo(); + foreach (var it in coreInfo) + { + if (it.coreType == ECoreType.v2rayN) + { + continue; + } + foreach (string vName in it.coreExes) + { + var existing = Process.GetProcessesByName(vName); + foreach (Process p in existing) + { + string? path = p.MainModule?.FileName; + if (path == $"{Utils.GetBinPath(vName, it.coreType.ToString())}.exe") + { + KillProcess(p); + } + } + } + } + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + public void CoreStopPid(int pid) + { + try + { + var _p = Process.GetProcessById(pid); + KillProcess(_p); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + #region Private + + private string CoreFindExe(CoreInfo coreInfo) + { + string fileName = string.Empty; + foreach (string name in coreInfo.coreExes) + { + string vName = $"{name}.exe"; + vName = Utils.GetBinPath(vName, coreInfo.coreType.ToString()); + if (File.Exists(vName)) + { + fileName = vName; + break; + } + } + if (Utils.IsNullOrEmpty(fileName)) + { + string msg = string.Format(ResUI.NotFoundCore, Utils.GetBinPath("", coreInfo.coreType.ToString()), string.Join(", ", coreInfo.coreExes.ToArray()), coreInfo.coreUrl); + Logging.SaveLog(msg); + ShowMsg(false, msg); + } + return fileName; + } + + private void CoreStart(ProfileItem node) + { + ShowMsg(false, $"{Environment.OSVersion} - {(Environment.Is64BitOperatingSystem ? 64 : 32)}"); + ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); + + ECoreType coreType; + if (node.configType != EConfigType.Custom && _config.tunModeItem.enableTun) + { + coreType = ECoreType.sing_box; + } + else + { + coreType = LazyConfig.Instance.GetCoreType(node, node.configType); + } + _config.runningCoreType = coreType; + var coreInfo = LazyConfig.Instance.GetCoreInfo(coreType); + + var displayLog = node.configType != EConfigType.Custom || node.displayLog; + var proc = RunProcess(node, coreInfo, "", displayLog); + if (proc is null) + { + return; + } + _process = proc; + + //start a socks service + if (_process != null && !_process.HasExited) + { + if ((node.configType == EConfigType.Custom && node.preSocksPort > 0)) + { + var preCoreType = _config.tunModeItem.enableTun ? ECoreType.sing_box : ECoreType.Xray; + var itemSocks = new ProfileItem() + { + coreType = preCoreType, + configType = EConfigType.Socks, + address = Global.Loopback, + port = node.preSocksPort + }; + _config.runningCoreType = preCoreType; + string fileName2 = Utils.GetConfigPath(Global.CorePreConfigFileName); + if (CoreConfigHandler.GenerateClientConfig(itemSocks, fileName2, out string msg2, out string configStr) == 0) + { + var coreInfo2 = LazyConfig.Instance.GetCoreInfo(preCoreType); + var proc2 = RunProcess(node, coreInfo2, $" -c {Global.CorePreConfigFileName}", true); + if (proc2 is not null) + { + _processPre = proc2; + } + } + } + } + } + + private int CoreStartSpeedtest(string configPath, ECoreType coreType) + { + ShowMsg(false, string.Format(ResUI.StartService, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"))); + + ShowMsg(false, configPath); + try + { + var coreInfo = LazyConfig.Instance.GetCoreInfo(coreType); + var proc = RunProcess(new(), coreInfo, $" -c {Global.CoreSpeedtestConfigFileName}", true); + if (proc is null) + { + return -1; + } + + return proc.Id; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + string msg = ex.Message; + ShowMsg(false, msg); + return -1; + } + } + + private void ShowMsg(bool notify, string msg) + { + _updateFunc(notify, msg); + } + + #endregion Private + + #region Process + + private Process? RunProcess(ProfileItem node, CoreInfo coreInfo, string configPath, bool displayLog) + { + try + { + string fileName = CoreFindExe(coreInfo); + if (Utils.IsNullOrEmpty(fileName)) + { + return null; + } + Process proc = new() + { + StartInfo = new() + { + FileName = fileName, + Arguments = string.Format(coreInfo.arguments, configPath), + WorkingDirectory = Utils.GetConfigPath(), + UseShellExecute = false, + RedirectStandardOutput = displayLog, + RedirectStandardError = displayLog, + CreateNoWindow = true, + StandardOutputEncoding = displayLog ? Encoding.UTF8 : null, + StandardErrorEncoding = displayLog ? Encoding.UTF8 : null, + } + }; + var startUpErrorMessage = new StringBuilder(); + var startUpSuccessful = false; + if (displayLog) + { + proc.OutputDataReceived += (sender, e) => + { + if (!Utils.IsNullOrEmpty(e.Data)) + { + string msg = e.Data + Environment.NewLine; + ShowMsg(false, msg); + } + }; + proc.ErrorDataReceived += (sender, e) => + { + if (!Utils.IsNullOrEmpty(e.Data)) + { + string msg = e.Data + Environment.NewLine; + ShowMsg(false, msg); + + if (!startUpSuccessful) + { + startUpErrorMessage.Append(msg); + } + } + }; + } + proc.Start(); + if (displayLog) + { + proc.BeginOutputReadLine(); + proc.BeginErrorReadLine(); + } + + if (proc.WaitForExit(1000)) + { + proc.CancelErrorRead(); + throw new Exception(displayLog ? startUpErrorMessage.ToString() : "启动进程失败并退出 (Failed to start the process and exited)"); + } + else + { + startUpSuccessful = true; + } + + LazyConfig.Instance.AddProcess(proc.Handle); + return proc; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + string msg = ex.Message; + ShowMsg(true, msg); + return null; + } + } + + private void KillProcess(Process? proc) + { + if (proc is null) + { + return; + } + try + { + proc.Kill(); + proc.WaitForExit(100); + if (!proc.HasExited) + { + proc.Kill(); + proc.WaitForExit(100); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + #endregion Process + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/DownloadHandle.cs b/v2rayN/v2rayN/Handler/DownloadHandle.cs new file mode 100755 index 0000000..d29106e --- /dev/null +++ b/v2rayN/v2rayN/Handler/DownloadHandle.cs @@ -0,0 +1,339 @@ +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Net.Sockets; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + /// + ///Download + /// + internal class DownloadHandle + { + public event EventHandler? UpdateCompleted; + + public event ErrorEventHandler? Error; + + public class ResultEventArgs : EventArgs + { + public bool Success; + public string Msg; + + public ResultEventArgs(bool success, string msg) + { + Success = success; + Msg = msg; + } + } + + public async Task DownloadDataAsync(string url, WebProxy webProxy, int downloadTimeout, Action update) + { + try + { + Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().guiItem.enableSecurityProtocolTls13); + + var progress = new Progress(); + progress.ProgressChanged += (sender, value) => + { + if (update != null) + { + string msg = $"{value}"; + update(false, msg); + } + }; + + await DownloaderHelper.Instance.DownloadDataAsync4Speed(webProxy, + url, + progress, + downloadTimeout); + } + catch (Exception ex) + { + update(false, ex.Message); + if (ex.InnerException != null) + { + update(false, ex.InnerException.Message); + } + } + return 0; + } + + public async Task DownloadFileAsync(string url, bool blProxy, int downloadTimeout) + { + try + { + Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().guiItem.enableSecurityProtocolTls13); + UpdateCompleted?.Invoke(this, new ResultEventArgs(false, $"{ResUI.Downloading} {url}")); + + var progress = new Progress(); + progress.ProgressChanged += (sender, value) => + { + UpdateCompleted?.Invoke(this, new ResultEventArgs(value > 100, $"...{value}%")); + }; + + var webProxy = GetWebProxy(blProxy); + await DownloaderHelper.Instance.DownloadFileAsync(webProxy, + url, + Utils.GetTempPath(Utils.GetDownloadFileName(url)), + progress, + downloadTimeout); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + } + + public async Task UrlRedirectAsync(string url, bool blProxy) + { + Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().guiItem.enableSecurityProtocolTls13); + var webRequestHandler = new SocketsHttpHandler + { + AllowAutoRedirect = false, + Proxy = GetWebProxy(blProxy) + }; + HttpClient client = new(webRequestHandler); + + HttpResponseMessage response = await client.GetAsync(url); + if (response.StatusCode == HttpStatusCode.Redirect && response.Headers.Location is not null) + { + return response.Headers.Location.ToString(); + } + else + { + Logging.SaveLog("StatusCode error: " + url); + return null; + } + } + + public async Task TryDownloadString(string url, bool blProxy, string userAgent) + { + try + { + var result1 = await DownloadStringAsync(url, blProxy, userAgent); + if (!Utils.IsNullOrEmpty(result1)) + { + return result1; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + + try + { + var result2 = await DownloadStringViaDownloader(url, blProxy, userAgent); + if (!Utils.IsNullOrEmpty(result2)) + { + return result2; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + + try + { + using var wc = new WebClient(); + wc.Proxy = GetWebProxy(blProxy); + var result3 = await wc.DownloadStringTaskAsync(url); + if (!Utils.IsNullOrEmpty(result3)) + { + return result3; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + + return null; + } + + /// + /// DownloadString + /// + /// + public async Task DownloadStringAsync(string url, bool blProxy, string userAgent) + { + try + { + Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().guiItem.enableSecurityProtocolTls13); + var webProxy = GetWebProxy(blProxy); + var client = new HttpClient(new SocketsHttpHandler() + { + Proxy = webProxy, + UseProxy = webProxy != null + }); + + if (Utils.IsNullOrEmpty(userAgent)) + { + userAgent = Utils.GetVersion(false); + } + client.DefaultRequestHeaders.UserAgent.TryParseAdd(userAgent); + + Uri uri = new(url); + //Authorization Header + if (!Utils.IsNullOrEmpty(uri.UserInfo)) + { + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Utils.Base64Encode(uri.UserInfo)); + } + + using var cts = new CancellationTokenSource(); + var result = await HttpClientHelper.Instance.GetAsync(client, url, cts.Token).WaitAsync(TimeSpan.FromSeconds(30), cts.Token); + return result; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + return null; + } + + /// + /// DownloadString + /// + /// + public async Task DownloadStringViaDownloader(string url, bool blProxy, string userAgent) + { + try + { + Utils.SetSecurityProtocol(LazyConfig.Instance.GetConfig().guiItem.enableSecurityProtocolTls13); + + var webProxy = GetWebProxy(blProxy); + + if (Utils.IsNullOrEmpty(userAgent)) + { + userAgent = Utils.GetVersion(false); + } + var result = await DownloaderHelper.Instance.DownloadStringAsync(webProxy, url, userAgent, 30); + return result; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + Error?.Invoke(this, new ErrorEventArgs(ex)); + if (ex.InnerException != null) + { + Error?.Invoke(this, new ErrorEventArgs(ex.InnerException)); + } + } + return null; + } + + public async Task RunAvailabilityCheck(IWebProxy? webProxy) + { + try + { + if (webProxy == null) + { + webProxy = GetWebProxy(true); + } + + try + { + var config = LazyConfig.Instance.GetConfig(); + int responseTime = await GetRealPingTime(config.speedTestItem.speedPingTestUrl, webProxy, 10); + return responseTime; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return -1; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return -1; + } + } + + public async Task GetRealPingTime(string url, IWebProxy? webProxy, int downloadTimeout) + { + int responseTime = -1; + try + { + Stopwatch timer = Stopwatch.StartNew(); + + using var cts = new CancellationTokenSource(); + cts.CancelAfter(TimeSpan.FromSeconds(downloadTimeout)); + using var client = new HttpClient(new SocketsHttpHandler() + { + Proxy = webProxy, + UseProxy = webProxy != null + }); + await client.GetAsync(url, cts.Token); + + responseTime = timer.Elapsed.Milliseconds; + } + catch //(Exception ex) + { + //Utile.SaveLog(ex.Message, ex); + } + return responseTime; + } + + private WebProxy? GetWebProxy(bool blProxy) + { + if (!blProxy) + { + return null; + } + var httpPort = LazyConfig.Instance.GetLocalPort(EInboundProtocol.http); + if (!SocketCheck(Global.Loopback, httpPort)) + { + return null; + } + + return new WebProxy(Global.Loopback, httpPort); + } + + private bool SocketCheck(string ip, int port) + { + try + { + IPEndPoint point = new(IPAddress.Parse(ip), port); + using Socket? sock = new(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + sock.Connect(point); + return true; + } + catch (Exception) + { + return false; + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/HotkeyHandler.cs b/v2rayN/v2rayN/Handler/HotkeyHandler.cs new file mode 100755 index 0000000..6ffec9a --- /dev/null +++ b/v2rayN/v2rayN/Handler/HotkeyHandler.cs @@ -0,0 +1,180 @@ +using System.ComponentModel; +using System.Runtime.InteropServices; +using System.Text; +using System.Windows; +using System.Windows.Input; +using System.Windows.Interop; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + public sealed class HotkeyHandler + { + private static readonly Lazy _instance = new(() => new()); + public static HotkeyHandler Instance = _instance.Value; + + private const int WmHotkey = 0x0312; + + private Config _config + { + get => LazyConfig.Instance.GetConfig(); + } + + private Dictionary> _hotkeyTriggerDic; + + public bool IsPause { get; set; } = false; + + public event Action? UpdateViewEvent; + + public event Action? HotkeyTriggerEvent; + + public HotkeyHandler() + { + _hotkeyTriggerDic = new(); + ComponentDispatcher.ThreadPreprocessMessage += OnThreadPreProcessMessage; + Init(); + } + + private void Init() + { + _hotkeyTriggerDic.Clear(); + if (_config.globalHotkeys == null) return; + foreach (var item in _config.globalHotkeys) + { + if (item.KeyCode != null && item.KeyCode != Key.None) + { + int key = KeyInterop.VirtualKeyFromKey((Key)item.KeyCode); + KeyModifiers modifiers = KeyModifiers.None; + if (item.Control) modifiers |= KeyModifiers.Ctrl; + if (item.Shift) modifiers |= KeyModifiers.Shift; + if (item.Alt) modifiers |= KeyModifiers.Alt; + key = (key << 16) | (int)modifiers; + if (!_hotkeyTriggerDic.ContainsKey(key)) + { + _hotkeyTriggerDic.Add(key, new() { item.eGlobalHotkey }); + } + else + { + if (!_hotkeyTriggerDic[key].Contains(item.eGlobalHotkey)) + _hotkeyTriggerDic[key].Add(item.eGlobalHotkey); + } + } + } + } + + public void Load() + { + foreach (var _hotkeyCode in _hotkeyTriggerDic.Keys) + { + var hotkeyInfo = GetHotkeyInfo(_hotkeyCode); + bool isSuccess = false; + string msg; + + Application.Current.Dispatcher.Invoke(() => + { + isSuccess = RegisterHotKey(IntPtr.Zero, _hotkeyCode, hotkeyInfo.fsModifiers, hotkeyInfo.vKey); + }); + foreach (var name in hotkeyInfo.Names) + { + if (isSuccess) + { + msg = string.Format(ResUI.RegisterGlobalHotkeySuccessfully, $"{name}({hotkeyInfo.hotkeyStr})"); + } + else + { + var errInfo = new Win32Exception(Marshal.GetLastWin32Error()).Message; + msg = string.Format(ResUI.RegisterGlobalHotkeyFailed, $"{name}({hotkeyInfo.hotkeyStr})", errInfo); + } + UpdateViewEvent?.Invoke(false, msg); + } + } + } + + public void ReLoad() + { + foreach (var hotkey in _hotkeyTriggerDic.Keys) + { + Application.Current.Dispatcher.Invoke(() => + { + UnregisterHotKey(IntPtr.Zero, hotkey); + }); + } + Init(); + Load(); + } + + private (int fsModifiers, int vKey, string hotkeyStr, List Names) GetHotkeyInfo(int hotkeycode) + { + var _fsModifiers = hotkeycode & 0xffff; + var _vkey = (hotkeycode >> 16) & 0xffff; + var _hotkeyStr = new StringBuilder(); + var _names = new List(); + + var mdif = (KeyModifiers)_fsModifiers; + var key = KeyInterop.KeyFromVirtualKey(_vkey); + if ((mdif & KeyModifiers.Ctrl) == KeyModifiers.Ctrl) _hotkeyStr.Append($"{KeyModifiers.Ctrl}+"); + if ((mdif & KeyModifiers.Alt) == KeyModifiers.Alt) _hotkeyStr.Append($"{KeyModifiers.Alt}+"); + if ((mdif & KeyModifiers.Shift) == KeyModifiers.Shift) _hotkeyStr.Append($"{KeyModifiers.Shift}+"); + _hotkeyStr.Append(key.ToString()); + + foreach (var name in _hotkeyTriggerDic[hotkeycode]) + { + _names.Add(name.ToString()); + } + + return (_fsModifiers, _vkey, _hotkeyStr.ToString(), _names); + } + + private void OnThreadPreProcessMessage(ref MSG msg, ref bool handled) + { + if (msg.message != WmHotkey || !_hotkeyTriggerDic.ContainsKey((int)msg.lParam)) + { + return; + } + handled = true; + var _hotKeyCode = (int)msg.lParam; + if (IsPause) + { + Application.Current.Dispatcher.Invoke(() => + { + UIElement? element = Keyboard.FocusedElement as UIElement; + if (element != null) + { + var _keyEventArgs = new KeyEventArgs(Keyboard.PrimaryDevice, + PresentationSource.FromVisual(element), 0, + KeyInterop.KeyFromVirtualKey(GetHotkeyInfo(_hotKeyCode).vKey)) + { + RoutedEvent = UIElement.KeyDownEvent + }; + element.RaiseEvent(_keyEventArgs); + } + }); + } + else + { + foreach (var keyEvent in _hotkeyTriggerDic[(int)msg.lParam]) + { + HotkeyTriggerEvent?.Invoke(keyEvent); + } + } + } + + [DllImport("user32.dll", SetLastError = true)] + private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc); + + [DllImport("user32.dll", SetLastError = true)] + private static extern bool UnregisterHotKey(IntPtr hWnd, int id); + + [Flags] + private enum KeyModifiers + { + None = 0x0000, + Alt = 0x0001, + Ctrl = 0x0002, + Shift = 0x0004, + Win = 0x0008, + NoRepeat = 0x4000 + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/LazyConfig.cs b/v2rayN/v2rayN/Handler/LazyConfig.cs new file mode 100755 index 0000000..04766ff --- /dev/null +++ b/v2rayN/v2rayN/Handler/LazyConfig.cs @@ -0,0 +1,406 @@ +using System.Runtime.Intrinsics.X86; +using v2rayN.Models; + +namespace v2rayN.Handler +{ + public sealed class LazyConfig + { + private static readonly Lazy _instance = new(() => new()); + private Config _config; + private List coreInfo; + + public static LazyConfig Instance => _instance.Value; + + private int? _statePort; + + public int StatePort + { + get + { + if (_statePort is null) + { + _statePort = Utils.GetFreePort(GetLocalPort(EInboundProtocol.api)); + } + + return _statePort.Value; + } + } + + private Job _processJob = new(); + + public LazyConfig() + { + SQLiteHelper.Instance.CreateTable(); + SQLiteHelper.Instance.CreateTable(); + SQLiteHelper.Instance.CreateTable(); + SQLiteHelper.Instance.CreateTable(); + SQLiteHelper.Instance.CreateTable(); + SQLiteHelper.Instance.CreateTable(); + } + + #region Config + + public void SetConfig(Config config) + { + _config = config; + } + + public Config GetConfig() + { + return _config; + } + + public int GetLocalPort(EInboundProtocol protocol) + { + var localPort = _config.inbound.FirstOrDefault(t => t.protocol == nameof(EInboundProtocol.socks))?.localPort ?? 10808; + return localPort + (int)protocol; + } + + public void AddProcess(IntPtr processHandle) + { + _processJob.AddProcess(processHandle); + } + + #endregion Config + + #region SqliteHelper + + public List SubItems() + { + return SQLiteHelper.Instance.Table().ToList(); + } + + public SubItem GetSubItem(string subid) + { + return SQLiteHelper.Instance.Table().FirstOrDefault(t => t.id == subid); + } + + public List ProfileItems(string subid) + { + if (Utils.IsNullOrEmpty(subid)) + { + return SQLiteHelper.Instance.Table().ToList(); + } + else + { + return SQLiteHelper.Instance.Table().Where(t => t.subid == subid).ToList(); + } + } + + public List ProfileItemIndexes(string subid) + { + if (Utils.IsNullOrEmpty(subid)) + { + return SQLiteHelper.Instance.Table().Select(t => t.indexId).ToList(); + } + else + { + return SQLiteHelper.Instance.Table().Where(t => t.subid == subid).Select(t => t.indexId).ToList(); + } + } + + public List ProfileItems(string subid, string filter) + { + var sql = @$"select a.* + ,b.remarks subRemarks + from ProfileItem a + left join SubItem b on a.subid = b.id + where 1=1 "; + if (!Utils.IsNullOrEmpty(subid)) + { + sql += $" and a.subid = '{subid}'"; + } + if (!Utils.IsNullOrEmpty(filter)) + { + if (filter.Contains('\'')) + { + filter = filter.Replace("'", ""); + } + sql += String.Format(" and (a.remarks like '%{0}%' or a.address like '%{0}%') ", filter); + } + + return SQLiteHelper.Instance.Query(sql).ToList(); + } + + public ProfileItem? GetProfileItem(string indexId) + { + if (Utils.IsNullOrEmpty(indexId)) + { + return null; + } + return SQLiteHelper.Instance.Table().FirstOrDefault(it => it.indexId == indexId); + } + + public ProfileItem? GetProfileItemViaRemarks(string remarks) + { + if (Utils.IsNullOrEmpty(remarks)) + { + return null; + } + return SQLiteHelper.Instance.Table().FirstOrDefault(it => it.remarks == remarks); + } + + public List RoutingItems() + { + return SQLiteHelper.Instance.Table().Where(it => it.locked == false).OrderBy(t => t.sort).ToList(); + } + + public RoutingItem GetRoutingItem(string id) + { + return SQLiteHelper.Instance.Table().FirstOrDefault(it => it.locked == false && it.id == id); + } + + public List DNSItems() + { + return SQLiteHelper.Instance.Table().ToList(); + } + + public DNSItem GetDNSItem(ECoreType eCoreType) + { + return SQLiteHelper.Instance.Table().FirstOrDefault(it => it.coreType == eCoreType); + } + + #endregion SqliteHelper + + #region Core Type + + public List GetShadowsocksSecurities(ProfileItem profileItem) + { + var coreType = GetCoreType(profileItem, EConfigType.Shadowsocks); + switch (coreType) + { + case ECoreType.v2fly: + return Global.SsSecurities; + + case ECoreType.Xray: + return Global.SsSecuritiesInXray; + + case ECoreType.sing_box: + return Global.SsSecuritiesInSingbox; + } + return Global.SsSecuritiesInSagerNet; + } + + public ECoreType GetCoreType(ProfileItem profileItem, EConfigType eConfigType) + { + if (profileItem?.coreType != null) + { + return (ECoreType)profileItem.coreType; + } + + if (_config.coreTypeItem == null) + { + return ECoreType.Xray; + } + var item = _config.coreTypeItem.FirstOrDefault(it => it.configType == eConfigType); + if (item == null) + { + return ECoreType.Xray; + } + return item.coreType; + } + + public CoreInfo? GetCoreInfo(ECoreType coreType) + { + if (coreInfo == null) + { + InitCoreInfo(); + } + return coreInfo?.FirstOrDefault(t => t.coreType == coreType); + } + + public List GetCoreInfo() + { + if (coreInfo == null) + { + InitCoreInfo(); + } + return coreInfo!; + } + + private void InitCoreInfo() + { + coreInfo = new(16); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.v2rayN, + coreUrl = Global.NUrl, + coreReleaseApiUrl = Global.NUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.NUrl + "/download/{0}/v2rayN-32.zip", + coreDownloadUrl64 = Global.NUrl + "/download/{0}/v2rayN.zip", + coreDownloadUrlArm64 = Global.NUrl + "/download/{0}/v2rayN-arm64.zip" + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.v2fly, + coreExes = new List { "wv2ray", "v2ray" }, + arguments = "", + coreUrl = Global.V2flyCoreUrl, + coreReleaseApiUrl = Global.V2flyCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.V2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + coreDownloadUrl64 = Global.V2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + coreDownloadUrlArm64 = Global.V2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + match = "V2Ray", + versionArg = "-version", + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.SagerNet, + coreExes = new List { "SagerNet", "v2ray" }, + arguments = "run", + coreUrl = Global.SagerNetCoreUrl, + coreReleaseApiUrl = Global.SagerNetCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.SagerNetCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + coreDownloadUrl64 = Global.SagerNetCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + coreDownloadUrlArm64 = Global.SagerNetCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + match = "V2Ray", + versionArg = "version", + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.v2fly_v5, + coreExes = new List { "v2ray" }, + arguments = "run -c config.json -format jsonv5", + coreUrl = Global.V2flyCoreUrl, + coreReleaseApiUrl = Global.V2flyCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.V2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + coreDownloadUrl64 = Global.V2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + coreDownloadUrlArm64 = Global.V2flyCoreUrl + "/download/{0}/v2ray-windows-{1}.zip", + match = "V2Ray", + versionArg = "version", + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.Xray, + coreExes = new List { "xray", "wxray" }, + arguments = "run {0}", + coreUrl = Global.XrayCoreUrl, + coreReleaseApiUrl = Global.XrayCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.XrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip", + coreDownloadUrl64 = Global.XrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip", + coreDownloadUrlArm64 = Global.XrayCoreUrl + "/download/{0}/Xray-windows-{1}.zip", + match = "Xray", + versionArg = "-version", + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.clash, + coreExes = new List { "clash-windows-amd64-v3", "clash-windows-amd64", "clash-windows-386", "clash" }, + arguments = "-f config.json", + coreUrl = Global.ClashCoreUrl, + coreReleaseApiUrl = Global.ClashCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.ClashCoreUrl + "/download/{0}/clash-windows-386-{0}.zip", + coreDownloadUrl64 = Global.ClashCoreUrl + "/download/{0}/clash-windows-amd64-{0}.zip", + coreDownloadUrlArm64 = Global.ClashCoreUrl + "/download/{0}/clash-windows-arm64-{0}.zip", + match = "v", + versionArg = "-v", + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.clash_meta, + coreExes = new List { "Clash.Meta-windows-amd64-compatible", "Clash.Meta-windows-amd64", "Clash.Meta-windows-386", "Clash.Meta", "clash" }, + arguments = "-f config.json", + coreUrl = Global.ClashMetaCoreUrl, + coreReleaseApiUrl = Global.ClashMetaCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.ClashMetaCoreUrl + "/download/{0}/Clash.Meta-windows-386-{0}.zip", + coreDownloadUrl64 = Global.ClashMetaCoreUrl + "/download/{0}/Clash.Meta-windows-amd64-compatible-{0}.zip", + coreDownloadUrlArm64 = Global.ClashMetaCoreUrl + "/download/{0}/Clash.Meta-windows-arm64-{0}.zip", + match = "v", + versionArg = "-v", + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.mihomo, + coreExes = new List { $"mihomo-windows-amd64{(Avx2.X64.IsSupported ? "" : "-compatible")}", "mihomo-windows-amd64-compatible", "mihomo-windows-amd64", "mihomo-windows-386", "mihomo", "clash" }, + arguments = "-f config.json", + coreUrl = Global.MihomoCoreUrl, + coreReleaseApiUrl = Global.MihomoCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + match = "Mihomo", + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.hysteria, + coreExes = new List { "hysteria-windows-amd64", "hysteria-windows-386", "hysteria" }, + arguments = "", + coreUrl = Global.HysteriaCoreUrl, + coreReleaseApiUrl = Global.HysteriaCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.HysteriaCoreUrl + "/download/{0}/hysteria-windows-386.exe", + coreDownloadUrl64 = Global.HysteriaCoreUrl + "/download/{0}/hysteria-windows-amd64.exe", + coreDownloadUrlArm64 = Global.HysteriaCoreUrl + "/download/{0}/hysteria-windows-arm64.exe", + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.naiveproxy, + coreExes = new List { "naiveproxy", "naive" }, + arguments = "config.json", + coreUrl = Global.NaiveproxyCoreUrl, + redirectInfo = false, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.tuic, + coreExes = new List { "tuic-client", "tuic" }, + arguments = "-c config.json", + coreUrl = Global.TuicCoreUrl, + redirectInfo = true, + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.sing_box, + coreExes = new List { "sing-box-client", "sing-box" }, + arguments = "run {0} --disable-color", + coreUrl = Global.SingboxCoreUrl, + redirectInfo = true, + coreReleaseApiUrl = Global.SingboxCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-windows-386.zip", + coreDownloadUrl64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-windows-amd64.zip", + coreDownloadUrlArm64 = Global.SingboxCoreUrl + "/download/{0}/sing-box-{1}-windows-arm64.zip", + match = "sing-box", + versionArg = "version", + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.juicity, + coreExes = new List { "juicity-client", "juicity" }, + arguments = "run -c config.json", + coreUrl = Global.JuicityCoreUrl + }); + + coreInfo.Add(new CoreInfo + { + coreType = ECoreType.hysteria2, + coreExes = new List { "hysteria-windows-amd64", "hysteria-windows-386", "hysteria" }, + arguments = "", + coreUrl = Global.HysteriaCoreUrl, + coreReleaseApiUrl = Global.HysteriaCoreUrl.Replace(Global.GithubUrl, Global.GithubApiUrl), + coreDownloadUrl32 = Global.HysteriaCoreUrl + "/download/{0}/hysteria-windows-386.exe", + coreDownloadUrl64 = Global.HysteriaCoreUrl + "/download/{0}/hysteria-windows-amd64.exe", + coreDownloadUrlArm64 = Global.HysteriaCoreUrl + "/download/{0}/hysteria-windows-arm64.exe", + redirectInfo = true, + }); + } + + #endregion Core Type + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/MainFormHandler.cs b/v2rayN/v2rayN/Handler/MainFormHandler.cs new file mode 100755 index 0000000..5d5d61d --- /dev/null +++ b/v2rayN/v2rayN/Handler/MainFormHandler.cs @@ -0,0 +1,230 @@ +using Microsoft.Win32; +using Splat; +using System.Drawing; +using System.IO; +using System.Windows.Media.Imaging; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + public sealed class MainFormHandler + { + private static readonly Lazy instance = new(() => new()); + public static MainFormHandler Instance => instance.Value; + + public Icon GetNotifyIcon(Config config) + { + try + { + int index = (int)config.sysProxyType; + + //Load from routing setting + var createdIcon = GetNotifyIcon4Routing(config); + if (createdIcon != null) + { + return createdIcon; + } + + //Load from local file + var fileName = Utils.GetPath($"NotifyIcon{index + 1}.ico"); + if (File.Exists(fileName)) + { + return new Icon(fileName); + } + return index switch + { + 0 => Properties.Resources.NotifyIcon1, + 1 => Properties.Resources.NotifyIcon2, + 2 => Properties.Resources.NotifyIcon3, + 3 => Properties.Resources.NotifyIcon2, + _ => Properties.Resources.NotifyIcon1, // default + }; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return Properties.Resources.NotifyIcon1; + } + } + + public System.Windows.Media.ImageSource GetAppIcon(Config config) + { + int index = 1; + switch (config.sysProxyType) + { + case ESysProxyType.ForcedClear: + index = 1; + break; + + case ESysProxyType.ForcedChange: + case ESysProxyType.Pac: + index = 2; + break; + + case ESysProxyType.Unchanged: + index = 3; + break; + } + return BitmapFrame.Create(new Uri($"pack://application:,,,/Resources/NotifyIcon{index}.ico", UriKind.RelativeOrAbsolute)); + } + + private Icon? GetNotifyIcon4Routing(Config config) + { + try + { + if (!config.routingBasicItem.enableRoutingAdvanced) + { + return null; + } + + var item = ConfigHandler.GetDefaultRouting(config); + if (item == null || Utils.IsNullOrEmpty(item.customIcon) || !File.Exists(item.customIcon)) + { + return null; + } + + Color color = ColorTranslator.FromHtml("#3399CC"); + int index = (int)config.sysProxyType; + if (index > 0) + { + color = (new[] { Color.Red, Color.Purple, Color.DarkGreen, Color.Orange, Color.DarkSlateBlue, Color.RoyalBlue })[index - 1]; + } + + int width = 128; + int height = 128; + + Bitmap bitmap = new(width, height); + Graphics graphics = Graphics.FromImage(bitmap); + SolidBrush drawBrush = new(color); + + graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; + //graphics.FillRectangle(drawBrush, new Rectangle(0, 0, width, height)); + graphics.DrawImage(new Bitmap(item.customIcon), 0, 0, width, height); + graphics.FillEllipse(drawBrush, width / 2, width / 2, width / 2, width / 2); + + Icon createdIcon = Icon.FromHandle(bitmap.GetHicon()); + + drawBrush.Dispose(); + graphics.Dispose(); + bitmap.Dispose(); + + return createdIcon; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return null; + } + } + + public void Export2ClientConfig(ProfileItem item, Config config) + { + if (item == null) + { + return; + } + if (item.configType == EConfigType.Custom) + { + Locator.Current.GetService()?.Enqueue(ResUI.NonVmessService); + return; + } + + SaveFileDialog fileDialog = new() + { + Filter = "Config|*.json", + FilterIndex = 2, + RestoreDirectory = true + }; + if (fileDialog.ShowDialog() != true) + { + return; + } + string fileName = fileDialog.FileName; + if (Utils.IsNullOrEmpty(fileName)) + { + return; + } + if (CoreConfigHandler.GenerateClientConfig(item, fileName, out string msg, out string content) != 0) + { + Locator.Current.GetService()?.Enqueue(msg); + } + else + { + msg = string.Format(ResUI.SaveClientConfigurationIn, fileName); + Locator.Current.GetService()?.SendMessageAndEnqueue(msg); + } + } + + public void UpdateTask(Config config, Action update) + { + Task.Run(() => UpdateTaskRunSubscription(config, update)); + Task.Run(() => UpdateTaskRunGeo(config, update)); + } + + private async Task UpdateTaskRunSubscription(Config config, Action update) + { + await Task.Delay(60000); + Logging.SaveLog("UpdateTaskRunSubscription"); + + var updateHandle = new UpdateHandle(); + while (true) + { + var updateTime = ((DateTimeOffset)DateTime.Now).ToUnixTimeSeconds(); + var lstSubs = LazyConfig.Instance.SubItems() + .Where(t => t.autoUpdateInterval > 0) + .Where(t => updateTime - t.updateTime >= t.autoUpdateInterval * 60) + .ToList(); + + foreach (var item in lstSubs) + { + updateHandle.UpdateSubscriptionProcess(config, item.id, true, (bool success, string msg) => + { + update(success, msg); + if (success) + Logging.SaveLog("subscription" + msg); + }); + item.updateTime = updateTime; + ConfigHandler.AddSubItem(config, item); + + await Task.Delay(5000); + } + await Task.Delay(60000); + } + } + + private async Task UpdateTaskRunGeo(Config config, Action update) + { + var autoUpdateGeoTime = DateTime.Now; + + await Task.Delay(1000 * 120); + Logging.SaveLog("UpdateTaskRunGeo"); + + var updateHandle = new UpdateHandle(); + while (true) + { + var dtNow = DateTime.Now; + if (config.guiItem.autoUpdateInterval > 0) + { + if ((dtNow - autoUpdateGeoTime).Hours % config.guiItem.autoUpdateInterval == 0) + { + updateHandle.UpdateGeoFileAll(config, (bool success, string msg) => + { + update(false, msg); + }); + autoUpdateGeoTime = dtNow; + } + } + + await Task.Delay(1000 * 3600); + } + } + + public void RegisterGlobalHotkey(Config config, Action handler, Action update) + { + HotkeyHandler.Instance.UpdateViewEvent += update; + HotkeyHandler.Instance.HotkeyTriggerEvent += handler; + HotkeyHandler.Instance.Load(); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/NoticeHandler.cs b/v2rayN/v2rayN/Handler/NoticeHandler.cs new file mode 100755 index 0000000..4fe41b3 --- /dev/null +++ b/v2rayN/v2rayN/Handler/NoticeHandler.cs @@ -0,0 +1,41 @@ +using MaterialDesignThemes.Wpf; +using ReactiveUI; + +namespace v2rayN.Handler +{ + public class NoticeHandler + { + private readonly ISnackbarMessageQueue _snackbarMessageQueue; + + public NoticeHandler(ISnackbarMessageQueue snackbarMessageQueue) + { + _snackbarMessageQueue = snackbarMessageQueue ?? throw new ArgumentNullException(nameof(snackbarMessageQueue)); + } + + public void Enqueue(string content) + { + if (content.IsNullOrEmpty()) + { + return; + } + _snackbarMessageQueue?.Enqueue(content); + } + + public void SendMessage(string msg) + { + MessageBus.Current.SendMessage(msg, Global.CommandSendMsgView); + } + + public void SendMessage(string msg, bool time) + { + msg = $"{DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")} {msg}"; + SendMessage(msg); + } + + public void SendMessageAndEnqueue(string msg) + { + Enqueue(msg); + SendMessage(msg); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/ProfileExHandler.cs b/v2rayN/v2rayN/Handler/ProfileExHandler.cs new file mode 100755 index 0000000..2d7fc93 --- /dev/null +++ b/v2rayN/v2rayN/Handler/ProfileExHandler.cs @@ -0,0 +1,174 @@ +using System.Collections.Concurrent; +using System.Reactive.Linq; +using v2rayN.Models; + +namespace v2rayN.Handler +{ + internal class ProfileExHandler + { + private static readonly Lazy _instance = new(() => new()); + private ConcurrentBag _lstProfileEx = []; + private Queue _queIndexIds = new(); + public ConcurrentBag ProfileExs => _lstProfileEx; + public static ProfileExHandler Instance => _instance.Value; + + public ProfileExHandler() + { + Init(); + + Task.Run(async () => + { + while (true) + { + SaveQueueIndexIds(); + await Task.Delay(1000 * 600); + } + }); + } + + private void Init() + { + SQLiteHelper.Instance.Execute($"delete from ProfileExItem where indexId not in ( select indexId from ProfileItem )"); + + _lstProfileEx = new(SQLiteHelper.Instance.Table()); + } + + private void IndexIdEnqueue(string indexId) + { + if (!Utils.IsNullOrEmpty(indexId) && !_queIndexIds.Contains(indexId)) + { + _queIndexIds.Enqueue(indexId); + } + } + + private void SaveQueueIndexIds() + { + var cnt = _queIndexIds.Count; + if (cnt > 0) + { + var lstExists = SQLiteHelper.Instance.Table(); + List lstInserts = []; + List lstUpdates = []; + + for (int i = 0; i < cnt; i++) + { + var id = _queIndexIds.Dequeue(); + var item = lstExists.FirstOrDefault(t => t.indexId == id); + var itemNew = _lstProfileEx?.FirstOrDefault(t => t.indexId == id); + if (itemNew is null) + { + continue; + } + + if (item is not null) + { + lstUpdates.Add(itemNew); + } + else + { + lstInserts.Add(itemNew); + } + } + try + { + if (lstInserts.Count() > 0) + SQLiteHelper.Instance.InsertAll(lstInserts); + + if (lstUpdates.Count() > 0) + SQLiteHelper.Instance.UpdateAll(lstUpdates); + } + catch (Exception ex) + { + Logging.SaveLog("ProfileExHandler", ex); + } + } + } + + private void AddProfileEx(string indexId, ref ProfileExItem? profileEx) + { + profileEx = new() + { + indexId = indexId, + delay = 0, + speed = 0, + sort = 0 + }; + _lstProfileEx.Add(profileEx); + IndexIdEnqueue(indexId); + } + + public void ClearAll() + { + SQLiteHelper.Instance.Execute($"delete from ProfileExItem "); + _lstProfileEx = new(); + } + + public void SaveTo() + { + try + { + SaveQueueIndexIds(); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + public void SetTestDelay(string indexId, string delayVal) + { + var profileEx = _lstProfileEx.FirstOrDefault(t => t.indexId == indexId); + if (profileEx == null) + { + AddProfileEx(indexId, ref profileEx); + } + + int.TryParse(delayVal, out int delay); + profileEx.delay = delay; + IndexIdEnqueue(indexId); + } + + public void SetTestSpeed(string indexId, string speedVal) + { + var profileEx = _lstProfileEx.FirstOrDefault(t => t.indexId == indexId); + if (profileEx == null) + { + AddProfileEx(indexId, ref profileEx); + } + + decimal.TryParse(speedVal, out decimal speed); + profileEx.speed = speed; + IndexIdEnqueue(indexId); + } + + public void SetSort(string indexId, int sort) + { + var profileEx = _lstProfileEx.FirstOrDefault(t => t.indexId == indexId); + if (profileEx == null) + { + AddProfileEx(indexId, ref profileEx); + } + profileEx.sort = sort; + IndexIdEnqueue(indexId); + } + + public int GetSort(string indexId) + { + var profileEx = _lstProfileEx.FirstOrDefault(t => t.indexId == indexId); + if (profileEx == null) + { + return 0; + } + return profileEx.sort; + } + + public int GetMaxSort() + { + if (_lstProfileEx.Count <= 0) + { + return 0; + } + return _lstProfileEx.Max(t => t == null ? 0 : t.sort); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/ProxySetting.cs b/v2rayN/v2rayN/Handler/ProxySetting.cs new file mode 100755 index 0000000..a6ce245 --- /dev/null +++ b/v2rayN/v2rayN/Handler/ProxySetting.cs @@ -0,0 +1,323 @@ +using System.Runtime.InteropServices; +using static v2rayN.Handler.ProxySetting.InternetConnectionOption; + +namespace v2rayN.Handler +{ + internal class ProxySetting + { + /// + // set to use no proxy + /// + /// Error message with win32 error code + public static bool UnsetProxy() + { + return SetProxy(null, null, 1); + } + + /// + /// Set system proxy settings + /// + /// proxy address + /// exception addresses that do not use proxy + /// type of proxy defined in PerConnFlags + /// PROXY_TYPE_DIRECT = 0x00000001, // direct connection (no proxy) + /// PROXY_TYPE_PROXY = 0x00000002, // via named proxy + /// PROXY_TYPE_AUTO_PROXY_URL = 0x00000004, // autoproxy script URL + /// PROXY_TYPE_AUTO_DETECT = 0x00000008 // use autoproxy detection + /// + /// Error message with win32 error code + /// true: one of connection is successfully updated proxy settings + public static bool SetProxy(string? strProxy, string? exceptions, int type) + { + // set proxy for LAN + bool result = SetConnectionProxy(null, strProxy, exceptions, type); + // set proxy for dial up connections + var connections = EnumerateRasEntries(); + foreach (var connection in connections) + { + result |= SetConnectionProxy(connection, strProxy, exceptions, type); + } + return result; + } + + private static bool SetConnectionProxy(string? connectionName, string? strProxy, string? exceptions, int type) + { + InternetPerConnOptionList list = new(); + + int optionCount = 1; + if (type == 1) // No proxy + { + optionCount = 1; + } + else if (type is 2 or 4) // named proxy or autoproxy script URL + { + optionCount = Utils.IsNullOrEmpty(exceptions) ? 2 : 3; + } + + int m_Int = (int)PerConnFlags.PROXY_TYPE_DIRECT; + PerConnOption m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS; + if (type == 2) // named proxy + { + m_Int = (int)(PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY); + m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_SERVER; + } + else if (type == 4) // autoproxy script url + { + m_Int = (int)(PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_AUTO_PROXY_URL); + m_Option = PerConnOption.INTERNET_PER_CONN_AUTOCONFIG_URL; + } + + //int optionCount = Utile.IsNullOrEmpty(strProxy) ? 1 : (Utile.IsNullOrEmpty(exceptions) ? 2 : 3); + InternetConnectionOption[] options = new InternetConnectionOption[optionCount]; + // USE a proxy server ... + options[0].m_Option = PerConnOption.INTERNET_PER_CONN_FLAGS; + //options[0].m_Value.m_Int = (int)((optionCount < 2) ? PerConnFlags.PROXY_TYPE_DIRECT : (PerConnFlags.PROXY_TYPE_DIRECT | PerConnFlags.PROXY_TYPE_PROXY)); + options[0].m_Value.m_Int = m_Int; + // use THIS proxy server + if (optionCount > 1) + { + options[1].m_Option = m_Option; + options[1].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(strProxy); // !! remember to deallocate memory 1 + // except for these addresses ... + if (optionCount > 2) + { + options[2].m_Option = PerConnOption.INTERNET_PER_CONN_PROXY_BYPASS; + options[2].m_Value.m_StringPtr = Marshal.StringToHGlobalAuto(exceptions); // !! remember to deallocate memory 2 + } + } + + // default stuff + list.dwSize = Marshal.SizeOf(list); + if (connectionName != null) + { + list.szConnection = Marshal.StringToHGlobalAuto(connectionName); // !! remember to deallocate memory 3 + } + else + { + list.szConnection = IntPtr.Zero; + } + list.dwOptionCount = options.Length; + list.dwOptionError = 0; + + int optSize = Marshal.SizeOf(typeof(InternetConnectionOption)); + // make a pointer out of all that ... + IntPtr optionsPtr = Marshal.AllocCoTaskMem(optSize * options.Length); // !! remember to deallocate memory 4 + // copy the array over into that spot in memory ... + for (int i = 0; i < options.Length; ++i) + { + if (Environment.Is64BitOperatingSystem) + { + IntPtr opt = new(optionsPtr.ToInt64() + (i * optSize)); + Marshal.StructureToPtr(options[i], opt, false); + } + else + { + IntPtr opt = new(optionsPtr.ToInt32() + (i * optSize)); + Marshal.StructureToPtr(options[i], opt, false); + } + } + + list.options = optionsPtr; + + // and then make a pointer out of the whole list + IntPtr ipcoListPtr = Marshal.AllocCoTaskMem(list.dwSize); // !! remember to deallocate memory 5 + Marshal.StructureToPtr(list, ipcoListPtr, false); + + // and finally, call the API method! + bool isSuccess = NativeMethods.InternetSetOption(IntPtr.Zero, + InternetOption.INTERNET_OPTION_PER_CONNECTION_OPTION, + ipcoListPtr, list.dwSize); + int returnvalue = 0; // ERROR_SUCCESS + if (!isSuccess) + { // get the error codes, they might be helpful + returnvalue = Marshal.GetLastPInvokeError(); + } + else + { + // Notify the system that the registry settings have been changed and cause them to be refreshed + NativeMethods.InternetSetOption(IntPtr.Zero, InternetOption.INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); + NativeMethods.InternetSetOption(IntPtr.Zero, InternetOption.INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); + } + + // FREE the data ASAP + if (list.szConnection != IntPtr.Zero) Marshal.FreeHGlobal(list.szConnection); // release mem 3 + if (optionCount > 1) + { + Marshal.FreeHGlobal(options[1].m_Value.m_StringPtr); // release mem 1 + if (optionCount > 2) + { + Marshal.FreeHGlobal(options[2].m_Value.m_StringPtr); // release mem 2 + } + } + Marshal.FreeCoTaskMem(optionsPtr); // release mem 4 + Marshal.FreeCoTaskMem(ipcoListPtr); // release mem 5 + if (returnvalue != 0) + { + // throw the error codes, they might be helpful + throw new ApplicationException($"Set Internet Proxy failed with error code: {Marshal.GetLastWin32Error()}"); + } + + return true; + } + + /// + /// Retrieve list of connections including LAN and WAN to support PPPoE connection + /// + /// A list of RAS connection names. May be empty list if no dial up connection. + /// Error message with win32 error code + private static IEnumerable EnumerateRasEntries() + { + int entries = 0; + // attempt to query with 1 entry buffer + RASENTRYNAME[] rasEntryNames = new RASENTRYNAME[1]; + int bufferSize = Marshal.SizeOf(typeof(RASENTRYNAME)); + rasEntryNames[0].dwSize = Marshal.SizeOf(typeof(RASENTRYNAME)); + + uint result = NativeMethods.RasEnumEntries(null, null, rasEntryNames, ref bufferSize, ref entries); + // increase buffer if the buffer is not large enough + if (result == (uint)ErrorCode.ERROR_BUFFER_TOO_SMALL) + { + rasEntryNames = new RASENTRYNAME[bufferSize / Marshal.SizeOf(typeof(RASENTRYNAME))]; + for (int i = 0; i < rasEntryNames.Length; i++) + { + rasEntryNames[i].dwSize = Marshal.SizeOf(typeof(RASENTRYNAME)); + } + + result = NativeMethods.RasEnumEntries(null, null, rasEntryNames, ref bufferSize, ref entries); + } + if (result == 0) + { + var entryNames = new List(); + for (int i = 0; i < entries; i++) + { + entryNames.Add(rasEntryNames[i].szEntryName); + } + + return entryNames; + } + throw new ApplicationException($"RasEnumEntries failed with error code: {result}"); + } + + #region WinInet structures + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct InternetPerConnOptionList + { + public int dwSize; // size of the INTERNET_PER_CONN_OPTION_LIST struct + public IntPtr szConnection; // connection name to set/query options + public int dwOptionCount; // number of options to set/query + public int dwOptionError; // on error, which option failed + + //[MarshalAs(UnmanagedType.)] + public IntPtr options; + }; + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct InternetConnectionOption + { + private static readonly int Size; + public PerConnOption m_Option; + public InternetConnectionOptionValue m_Value; + + static InternetConnectionOption() + { + Size = Marshal.SizeOf(typeof(InternetConnectionOption)); + } + + // Nested Types + [StructLayout(LayoutKind.Explicit)] + public struct InternetConnectionOptionValue + { + // Fields + [FieldOffset(0)] + public System.Runtime.InteropServices.ComTypes.FILETIME m_FileTime; + + [FieldOffset(0)] + public int m_Int; + + [FieldOffset(0)] + public IntPtr m_StringPtr; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] + public struct RASENTRYNAME + { + public int dwSize; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = RAS_MaxEntryName + 1)] + public string szEntryName; + + public int dwFlags; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH + 1)] + public string szPhonebookPath; + } + + // Constants + public const int RAS_MaxEntryName = 256; + + public const int MAX_PATH = 260; // Standard MAX_PATH value in Windows + } + + #endregion WinInet structures + + #region WinInet enums + + // + // options manifests for Internet{Query|Set}Option + // + public enum InternetOption : uint + { + INTERNET_OPTION_PER_CONNECTION_OPTION = 75, + INTERNET_OPTION_REFRESH = 37, + INTERNET_OPTION_SETTINGS_CHANGED = 39 + } + + // + // Options used in INTERNET_PER_CONN_OPTON struct + // + public enum PerConnOption + { + INTERNET_PER_CONN_FLAGS = 1, // Sets or retrieves the connection type. The Value member will contain one or more of the values from PerConnFlags + INTERNET_PER_CONN_PROXY_SERVER = 2, // Sets or retrieves a string containing the proxy servers. + INTERNET_PER_CONN_PROXY_BYPASS = 3, // Sets or retrieves a string containing the URLs that do not use the proxy server. + INTERNET_PER_CONN_AUTOCONFIG_URL = 4//, // Sets or retrieves a string containing the URL to the automatic configuration script. + } + + // + // PER_CONN_FLAGS + // + [Flags] + public enum PerConnFlags + { + PROXY_TYPE_DIRECT = 0x00000001, // direct to net + PROXY_TYPE_PROXY = 0x00000002, // via named proxy + PROXY_TYPE_AUTO_PROXY_URL = 0x00000004, // autoproxy URL + PROXY_TYPE_AUTO_DETECT = 0x00000008 // use autoproxy detection + } + + public enum ErrorCode : uint + { + ERROR_BUFFER_TOO_SMALL = 603, + ERROR_INVALID_SIZE = 632 + } + + #endregion WinInet enums + + internal static class NativeMethods + { + [DllImport("WinInet.dll", SetLastError = true, CharSet = CharSet.Auto)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool InternetSetOption(IntPtr hInternet, InternetOption dwOption, IntPtr lpBuffer, int dwBufferLength); + + [DllImport("Rasapi32.dll", CharSet = CharSet.Auto)] + public static extern uint RasEnumEntries( + string? reserved, // Reserved, must be null + string? lpszPhonebook, // Pointer to full path and filename of phone-book file. If this parameter is NULL, the entries are enumerated from all the remote access phone-book files + [In, Out] RASENTRYNAME[]? lprasentryname, // Buffer to receive RAS entry names + ref int lpcb, // Size of the buffer + ref int lpcEntries // Number of entries written to the buffer + ); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/ShareHandler.cs b/v2rayN/v2rayN/Handler/ShareHandler.cs new file mode 100755 index 0000000..309bde8 --- /dev/null +++ b/v2rayN/v2rayN/Handler/ShareHandler.cs @@ -0,0 +1,1003 @@ +using System.Collections.Specialized; +using System.Text.RegularExpressions; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + internal class ShareHandler + { + #region GetShareUrl + + /// + /// GetShareUrl + /// + /// + /// + public static string? GetShareUrl(ProfileItem item) + { + try + { + string? url = string.Empty; + + url = item.configType switch + { + EConfigType.VMess => ShareVmess(item), + EConfigType.Shadowsocks => ShareShadowsocks(item), + EConfigType.Socks => ShareSocks(item), + EConfigType.Trojan => ShareTrojan(item), + EConfigType.VLESS => ShareVLESS(item), + EConfigType.Hysteria2 => ShareHysteria2(item), + EConfigType.Tuic => ShareTuic(item), + EConfigType.Wireguard => ShareWireguard(item), + _ => null, + }; + + return url; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + return ""; + } + } + + private static string ShareVmess(ProfileItem item) + { + string url = string.Empty; + + VmessQRCode vmessQRCode = new() + { + v = item.configVersion, + ps = item.remarks.TrimEx(), + add = item.address, + port = item.port, + id = item.id, + aid = item.alterId, + scy = item.security, + net = item.network, + type = item.headerType, + host = item.requestHost, + path = item.path, + tls = item.streamSecurity, + sni = item.sni, + alpn = item.alpn, + fp = item.fingerprint + }; + + url = JsonUtils.Serialize(vmessQRCode); + url = Utils.Base64Encode(url); + url = $"{Global.ProtocolShares[EConfigType.VMess]}{url}"; + + return url; + } + + private static string ShareShadowsocks(ProfileItem item) + { + string url = string.Empty; + + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + Utils.UrlEncode(item.remarks); + } + //url = string.Format("{0}:{1}@{2}:{3}", + // item.security, + // item.id, + // item.address, + // item.port); + //url = Utile.Base64Encode(url); + //new Sip002 + var pw = Utils.Base64Encode($"{item.security}:{item.id}"); + url = $"{pw}@{GetIpv6(item.address)}:{item.port}"; + url = $"{Global.ProtocolShares[EConfigType.Shadowsocks]}{url}{remark}"; + return url; + } + + private static string ShareSocks(ProfileItem item) + { + string url = string.Empty; + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + Utils.UrlEncode(item.remarks); + } + //url = string.Format("{0}:{1}@{2}:{3}", + // item.security, + // item.id, + // item.address, + // item.port); + //url = Utile.Base64Encode(url); + //new + var pw = Utils.Base64Encode($"{item.security}:{item.id}"); + url = $"{pw}@{GetIpv6(item.address)}:{item.port}"; + url = $"{Global.ProtocolShares[EConfigType.Socks]}{url}{remark}"; + return url; + } + + private static string ShareTrojan(ProfileItem item) + { + string url = string.Empty; + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + Utils.UrlEncode(item.remarks); + } + var dicQuery = new Dictionary(); + GetStdTransport(item, null, ref dicQuery); + string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray()); + + url = string.Format("{0}@{1}:{2}", + item.id, + GetIpv6(item.address), + item.port); + url = $"{Global.ProtocolShares[EConfigType.Trojan]}{url}{query}{remark}"; + return url; + } + + private static string ShareVLESS(ProfileItem item) + { + string url = string.Empty; + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + Utils.UrlEncode(item.remarks); + } + var dicQuery = new Dictionary(); + if (!Utils.IsNullOrEmpty(item.security)) + { + dicQuery.Add("encryption", item.security); + } + else + { + dicQuery.Add("encryption", Global.None); + } + GetStdTransport(item, Global.None, ref dicQuery); + string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray()); + + url = string.Format("{0}@{1}:{2}", + item.id, + GetIpv6(item.address), + item.port); + url = $"{Global.ProtocolShares[EConfigType.VLESS]}{url}{query}{remark}"; + return url; + } + + private static string ShareHysteria2(ProfileItem item) + { + string url = string.Empty; + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + Utils.UrlEncode(item.remarks); + } + var dicQuery = new Dictionary(); + if (!Utils.IsNullOrEmpty(item.sni)) + { + dicQuery.Add("sni", item.sni); + } + if (!Utils.IsNullOrEmpty(item.alpn)) + { + dicQuery.Add("alpn", Utils.UrlEncode(item.alpn)); + } + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("obfs", "salamander"); + dicQuery.Add("obfs-password", Utils.UrlEncode(item.path)); + } + dicQuery.Add("insecure", item.allowInsecure.ToLower() == "true" ? "1" : "0"); + + string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray()); + + url = string.Format("{0}@{1}:{2}", + item.id, + GetIpv6(item.address), + item.port); + url = $"{Global.ProtocolShares[EConfigType.Hysteria2]}{url}/{query}{remark}"; + return url; + } + + private static string ShareTuic(ProfileItem item) + { + string url = string.Empty; + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + Utils.UrlEncode(item.remarks); + } + var dicQuery = new Dictionary(); + if (!Utils.IsNullOrEmpty(item.sni)) + { + dicQuery.Add("sni", item.sni); + } + if (!Utils.IsNullOrEmpty(item.alpn)) + { + dicQuery.Add("alpn", Utils.UrlEncode(item.alpn)); + } + dicQuery.Add("congestion_control", item.headerType); + + string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray()); + + url = string.Format("{0}@{1}:{2}", + $"{item.id}:{item.security}", + GetIpv6(item.address), + item.port); + url = $"{Global.ProtocolShares[EConfigType.Tuic]}{url}{query}{remark}"; + return url; + } + + private static string ShareWireguard(ProfileItem item) + { + string url = string.Empty; + string remark = string.Empty; + if (!Utils.IsNullOrEmpty(item.remarks)) + { + remark = "#" + Utils.UrlEncode(item.remarks); + } + + var dicQuery = new Dictionary(); + if (!Utils.IsNullOrEmpty(item.publicKey)) + { + dicQuery.Add("publickey", Utils.UrlEncode(item.publicKey)); + } + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("reserved", Utils.UrlEncode(item.path)); + } + if (!Utils.IsNullOrEmpty(item.requestHost)) + { + dicQuery.Add("address", Utils.UrlEncode(item.requestHost)); + } + if (!Utils.IsNullOrEmpty(item.shortId)) + { + dicQuery.Add("mtu", Utils.UrlEncode(item.shortId)); + } + string query = "?" + string.Join("&", dicQuery.Select(x => x.Key + "=" + x.Value).ToArray()); + + url = string.Format("{0}@{1}:{2}", + Utils.UrlEncode(item.id), + GetIpv6(item.address), + item.port); + url = $"{Global.ProtocolShares[EConfigType.Wireguard]}{url}/{query}{remark}"; + return url; + } + + private static string GetIpv6(string address) + { + if (Utils.IsIpv6(address)) + { + // 检查地址是否已经被方括号包围,如果没有,则添加方括号 + return address.StartsWith('[') && address.EndsWith(']') ? address : $"[{address}]"; + } + return address; // 如果不是IPv6地址,直接返回原地址 + } + + private static int GetStdTransport(ProfileItem item, string? securityDef, ref Dictionary dicQuery) + { + if (!Utils.IsNullOrEmpty(item.flow)) + { + dicQuery.Add("flow", item.flow); + } + + if (!Utils.IsNullOrEmpty(item.streamSecurity)) + { + dicQuery.Add("security", item.streamSecurity); + } + else + { + if (securityDef != null) + { + dicQuery.Add("security", securityDef); + } + } + if (!Utils.IsNullOrEmpty(item.sni)) + { + dicQuery.Add("sni", item.sni); + } + if (!Utils.IsNullOrEmpty(item.alpn)) + { + dicQuery.Add("alpn", Utils.UrlEncode(item.alpn)); + } + if (!Utils.IsNullOrEmpty(item.fingerprint)) + { + dicQuery.Add("fp", Utils.UrlEncode(item.fingerprint)); + } + if (!Utils.IsNullOrEmpty(item.publicKey)) + { + dicQuery.Add("pbk", Utils.UrlEncode(item.publicKey)); + } + if (!Utils.IsNullOrEmpty(item.shortId)) + { + dicQuery.Add("sid", Utils.UrlEncode(item.shortId)); + } + if (!Utils.IsNullOrEmpty(item.spiderX)) + { + dicQuery.Add("spx", Utils.UrlEncode(item.spiderX)); + } + + dicQuery.Add("type", !Utils.IsNullOrEmpty(item.network) ? item.network : nameof(ETransport.tcp)); + + switch (item.network) + { + case nameof(ETransport.tcp): + dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.headerType : Global.None); + if (!Utils.IsNullOrEmpty(item.requestHost)) + { + dicQuery.Add("host", Utils.UrlEncode(item.requestHost)); + } + break; + + case nameof(ETransport.kcp): + dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.headerType : Global.None); + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("seed", Utils.UrlEncode(item.path)); + } + break; + + case nameof(ETransport.ws): + case nameof(ETransport.httpupgrade): + if (!Utils.IsNullOrEmpty(item.requestHost)) + { + dicQuery.Add("host", Utils.UrlEncode(item.requestHost)); + } + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("path", Utils.UrlEncode(item.path)); + } + break; + + case nameof(ETransport.http): + case nameof(ETransport.h2): + dicQuery["type"] = nameof(ETransport.http); + if (!Utils.IsNullOrEmpty(item.requestHost)) + { + dicQuery.Add("host", Utils.UrlEncode(item.requestHost)); + } + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("path", Utils.UrlEncode(item.path)); + } + break; + + case nameof(ETransport.quic): + dicQuery.Add("headerType", !Utils.IsNullOrEmpty(item.headerType) ? item.headerType : Global.None); + dicQuery.Add("quicSecurity", Utils.UrlEncode(item.requestHost)); + dicQuery.Add("key", Utils.UrlEncode(item.path)); + break; + + case nameof(ETransport.grpc): + if (!Utils.IsNullOrEmpty(item.path)) + { + dicQuery.Add("authority", Utils.UrlEncode(item.requestHost)); + dicQuery.Add("serviceName", Utils.UrlEncode(item.path)); + if (item.headerType is Global.GrpcGunMode or Global.GrpcMultiMode) + { + dicQuery.Add("mode", Utils.UrlEncode(item.headerType)); + } + } + break; + } + return 0; + } + + #endregion GetShareUrl + + #region ImportShareUrl + + /// + /// 从剪贴板导入URL + /// + /// + /// + public static ProfileItem? ImportFromClipboardConfig(string clipboardData, out string msg) + { + msg = ResUI.ConfigurationFormatIncorrect; + ProfileItem? profileItem; + + try + { + string result = clipboardData.TrimEx(); + if (Utils.IsNullOrEmpty(result)) + { + msg = ResUI.FailedReadConfiguration; + return null; + } + + if (result.StartsWith(Global.ProtocolShares[EConfigType.VMess])) + { + int indexSplit = result.IndexOf("?"); + if (indexSplit > 0) + { + profileItem = ResolveStdVmess(result) ?? ResolveVmess4Kitsunebi(result); + } + else + { + profileItem = ResolveVmess(result, out msg); + } + } + else if (result.StartsWith(Global.ProtocolShares[EConfigType.Shadowsocks])) + { + profileItem = ResolveSSLegacy(result) ?? ResolveSip002(result); + if (profileItem == null) + { + return null; + } + if (profileItem.address.Length == 0 || profileItem.port == 0 || profileItem.security.Length == 0 || profileItem.id.Length == 0) + { + return null; + } + + profileItem.configType = EConfigType.Shadowsocks; + } + else if (result.StartsWith(Global.ProtocolShares[EConfigType.Socks])) + { + profileItem = ResolveSocksNew(result) ?? ResolveSocks(result); + if (profileItem == null) + { + return null; + } + if (profileItem.address.Length == 0 || profileItem.port == 0) + { + return null; + } + + profileItem.configType = EConfigType.Socks; + } + else if (result.StartsWith(Global.ProtocolShares[EConfigType.Trojan])) + { + profileItem = ResolveTrojan(result); + } + else if (result.StartsWith(Global.ProtocolShares[EConfigType.VLESS])) + { + profileItem = ResolveStdVLESS(result); + } + else if (result.StartsWith(Global.ProtocolShares[EConfigType.Hysteria2]) || result.StartsWith(Global.Hysteria2ProtocolShare)) + { + profileItem = ResolveHysteria2(result); + } + else if (result.StartsWith(Global.ProtocolShares[EConfigType.Tuic])) + { + profileItem = ResolveTuic(result); + } + else if (result.StartsWith(Global.ProtocolShares[EConfigType.Wireguard])) + { + profileItem = ResolveWireguard(result); + } + else + { + msg = ResUI.NonvmessOrssProtocol; + return null; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + msg = ResUI.Incorrectconfiguration; + return null; + } + + return profileItem; + } + + private static ProfileItem? ResolveVmess(string result, out string msg) + { + msg = string.Empty; + var profileItem = new ProfileItem + { + configType = EConfigType.VMess + }; + + result = result[Global.ProtocolShares[EConfigType.VMess].Length..]; + result = Utils.Base64Decode(result); + + //转成Json + VmessQRCode? vmessQRCode = JsonUtils.Deserialize(result); + if (vmessQRCode == null) + { + msg = ResUI.FailedConversionConfiguration; + return null; + } + + profileItem.network = Global.DefaultNetwork; + profileItem.headerType = Global.None; + + profileItem.configVersion = Utils.ToInt(vmessQRCode.v); + profileItem.remarks = Utils.ToString(vmessQRCode.ps); + profileItem.address = Utils.ToString(vmessQRCode.add); + profileItem.port = Utils.ToInt(vmessQRCode.port); + profileItem.id = Utils.ToString(vmessQRCode.id); + profileItem.alterId = Utils.ToInt(vmessQRCode.aid); + profileItem.security = Utils.ToString(vmessQRCode.scy); + + profileItem.security = !Utils.IsNullOrEmpty(vmessQRCode.scy) ? vmessQRCode.scy : Global.DefaultSecurity; + if (!Utils.IsNullOrEmpty(vmessQRCode.net)) + { + profileItem.network = vmessQRCode.net; + } + if (!Utils.IsNullOrEmpty(vmessQRCode.type)) + { + profileItem.headerType = vmessQRCode.type; + } + + profileItem.requestHost = Utils.ToString(vmessQRCode.host); + profileItem.path = Utils.ToString(vmessQRCode.path); + profileItem.streamSecurity = Utils.ToString(vmessQRCode.tls); + profileItem.sni = Utils.ToString(vmessQRCode.sni); + profileItem.alpn = Utils.ToString(vmessQRCode.alpn); + profileItem.fingerprint = Utils.ToString(vmessQRCode.fp); + + return profileItem; + } + + private static ProfileItem? ResolveVmess4Kitsunebi(string result) + { + ProfileItem profileItem = new() + { + configType = EConfigType.VMess + }; + result = result[Global.ProtocolShares[EConfigType.VMess].Length..]; + int indexSplit = result.IndexOf("?"); + if (indexSplit > 0) + { + result = result[..indexSplit]; + } + result = Utils.Base64Decode(result); + + string[] arr1 = result.Split('@'); + if (arr1.Length != 2) + { + return null; + } + string[] arr21 = arr1[0].Split(':'); + string[] arr22 = arr1[1].Split(':'); + if (arr21.Length != 2 || arr22.Length != 2) + { + return null; + } + + profileItem.address = arr22[0]; + profileItem.port = Utils.ToInt(arr22[1]); + profileItem.security = arr21[0]; + profileItem.id = arr21[1]; + + profileItem.network = Global.DefaultNetwork; + profileItem.headerType = Global.None; + profileItem.remarks = "Alien"; + + return profileItem; + } + + private static ProfileItem? ResolveStdVmess(string result) + { + ProfileItem i = new() + { + configType = EConfigType.VMess, + security = "auto" + }; + + Uri u = new(result); + + i.address = u.IdnHost; + i.port = u.Port; + i.remarks = u.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + var query = Utils.ParseQueryString(u.Query); + + var m = StdVmessUserInfo.Match(u.UserInfo); + if (!m.Success) return null; + + i.id = m.Groups["id"].Value; + + if (m.Groups["streamSecurity"].Success) + { + i.streamSecurity = m.Groups["streamSecurity"].Value; + } + switch (i.streamSecurity) + { + case Global.StreamSecurity: + break; + + default: + if (!Utils.IsNullOrEmpty(i.streamSecurity)) + return null; + break; + } + + i.network = m.Groups["network"].Value; + switch (i.network) + { + case nameof(ETransport.tcp): + string t1 = query["type"] ?? Global.None; + i.headerType = t1; + break; + + case nameof(ETransport.kcp): + i.headerType = query["type"] ?? Global.None; + break; + + case nameof(ETransport.ws): + case nameof(ETransport.httpupgrade): + string p1 = query["path"] ?? "/"; + string h1 = query["host"] ?? ""; + i.requestHost = Utils.UrlDecode(h1); + i.path = p1; + break; + + case nameof(ETransport.http): + case nameof(ETransport.h2): + i.network = nameof(ETransport.h2); + string p2 = query["path"] ?? "/"; + string h2 = query["host"] ?? ""; + i.requestHost = Utils.UrlDecode(h2); + i.path = p2; + break; + + case nameof(ETransport.quic): + string s = query["security"] ?? Global.None; + string k = query["key"] ?? ""; + string t3 = query["type"] ?? Global.None; + i.headerType = t3; + i.requestHost = Utils.UrlDecode(s); + i.path = k; + break; + + default: + return null; + } + + return i; + } + + private static ProfileItem? ResolveSip002(string result) + { + Uri parsedUrl; + try + { + parsedUrl = new Uri(result); + } + catch (UriFormatException) + { + return null; + } + ProfileItem server = new() + { + remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped), + address = parsedUrl.IdnHost, + port = parsedUrl.Port, + }; + string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.UriEscaped); + //2022-blake3 + if (rawUserInfo.Contains(':')) + { + string[] userInfoParts = rawUserInfo.Split(new[] { ':' }, 2); + if (userInfoParts.Length != 2) + { + return null; + } + server.security = userInfoParts[0]; + server.id = Utils.UrlDecode(userInfoParts[1]); + } + else + { + // parse base64 UserInfo + string userInfo = Utils.Base64Decode(rawUserInfo); + string[] userInfoParts = userInfo.Split(new[] { ':' }, 2); + if (userInfoParts.Length != 2) + { + return null; + } + server.security = userInfoParts[0]; + server.id = userInfoParts[1]; + } + + var queryParameters = Utils.ParseQueryString(parsedUrl.Query); + if (queryParameters["plugin"] != null) + { + //obfs-host exists + var obfsHost = queryParameters["plugin"]?.Split(';').FirstOrDefault(t => t.Contains("obfs-host")); + if (queryParameters["plugin"].Contains("obfs=http") && !Utils.IsNullOrEmpty(obfsHost)) + { + obfsHost = obfsHost?.Replace("obfs-host=", ""); + server.network = Global.DefaultNetwork; + server.headerType = Global.TcpHeaderHttp; + server.requestHost = obfsHost ?? ""; + } + else + { + return null; + } + } + + return server; + } + + private static readonly Regex UrlFinder = new(@"ss://(?[A-Za-z0-9+-/=_]+)(?:#(?\S+))?", RegexOptions.IgnoreCase | RegexOptions.Compiled); + private static readonly Regex DetailsParser = new(@"^((?.+?):(?.*)@(?.+?):(?\d+?))$", RegexOptions.IgnoreCase | RegexOptions.Compiled); + + private static ProfileItem? ResolveSSLegacy(string result) + { + var match = UrlFinder.Match(result); + if (!match.Success) + return null; + + ProfileItem server = new(); + var base64 = match.Groups["base64"].Value.TrimEnd('/'); + var tag = match.Groups["tag"].Value; + if (!Utils.IsNullOrEmpty(tag)) + { + server.remarks = Utils.UrlDecode(tag); + } + Match details; + try + { + details = DetailsParser.Match(Utils.Base64Decode(base64)); + } + catch (FormatException) + { + return null; + } + if (!details.Success) + return null; + server.security = details.Groups["method"].Value; + server.id = details.Groups["password"].Value; + server.address = details.Groups["hostname"].Value; + server.port = Utils.ToInt(details.Groups["port"].Value); + return server; + } + + private static readonly Regex StdVmessUserInfo = new( + @"^(?[a-z]+)(\+(?[a-z]+))?:(?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$", RegexOptions.Compiled); + + private static ProfileItem? ResolveSocks(string result) + { + ProfileItem profileItem = new() + { + configType = EConfigType.Socks + }; + result = result[Global.ProtocolShares[EConfigType.Socks].Length..]; + //remark + int indexRemark = result.IndexOf("#"); + if (indexRemark > 0) + { + try + { + profileItem.remarks = Utils.UrlDecode(result.Substring(indexRemark + 1, result.Length - indexRemark - 1)); + } + catch { } + result = result[..indexRemark]; + } + //part decode + int indexS = result.IndexOf("@"); + if (indexS > 0) + { + } + else + { + result = Utils.Base64Decode(result); + } + + string[] arr1 = result.Split('@'); + if (arr1.Length != 2) + { + return null; + } + string[] arr21 = arr1[0].Split(':'); + //string[] arr22 = arr1[1].Split(':'); + int indexPort = arr1[1].LastIndexOf(":"); + if (arr21.Length != 2 || indexPort < 0) + { + return null; + } + profileItem.address = arr1[1][..indexPort]; + profileItem.port = Utils.ToInt(arr1[1][(indexPort + 1)..]); + profileItem.security = arr21[0]; + profileItem.id = arr21[1]; + + return profileItem; + } + + private static ProfileItem? ResolveSocksNew(string result) + { + Uri parsedUrl; + try + { + parsedUrl = new Uri(result); + } + catch (UriFormatException) + { + return null; + } + ProfileItem server = new() + { + remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped), + address = parsedUrl.IdnHost, + port = parsedUrl.Port, + }; + + // parse base64 UserInfo + string rawUserInfo = parsedUrl.GetComponents(UriComponents.UserInfo, UriFormat.Unescaped); + string userInfo = Utils.Base64Decode(rawUserInfo); + string[] userInfoParts = userInfo.Split(new[] { ':' }, 2); + if (userInfoParts.Length == 2) + { + server.security = userInfoParts[0]; + server.id = userInfoParts[1]; + } + + return server; + } + + private static ProfileItem ResolveTrojan(string result) + { + ProfileItem item = new() + { + configType = EConfigType.Trojan + }; + + Uri url = new(result); + + item.address = url.IdnHost; + item.port = url.Port; + item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + item.id = Utils.UrlDecode(url.UserInfo); + + var query = Utils.ParseQueryString(url.Query); + ResolveStdTransport(query, ref item); + + return item; + } + + private static ProfileItem ResolveStdVLESS(string result) + { + ProfileItem item = new() + { + configType = EConfigType.VLESS, + security = Global.None + }; + + Uri url = new(result); + + item.address = url.IdnHost; + item.port = url.Port; + item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + item.id = Utils.UrlDecode(url.UserInfo); + + var query = Utils.ParseQueryString(url.Query); + item.security = query["encryption"] ?? Global.None; + item.streamSecurity = query["security"] ?? ""; + ResolveStdTransport(query, ref item); + + return item; + } + + private static ProfileItem ResolveHysteria2(string result) + { + ProfileItem item = new() + { + configType = EConfigType.Hysteria2 + }; + + Uri url = new(result); + + item.address = url.IdnHost; + item.port = url.Port; + item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + item.id = Utils.UrlDecode(url.UserInfo); + + var query = Utils.ParseQueryString(url.Query); + ResolveStdTransport(query, ref item); + item.path = Utils.UrlDecode(query["obfs-password"] ?? ""); + item.allowInsecure = (query["insecure"] ?? "") == "1" ? "true" : "false"; + + return item; + } + + private static ProfileItem ResolveTuic(string result) + { + ProfileItem item = new() + { + configType = EConfigType.Tuic + }; + + Uri url = new(result); + + item.address = url.IdnHost; + item.port = url.Port; + item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + var userInfoParts = url.UserInfo.Split(new[] { ':' }, 2); + if (userInfoParts.Length == 2) + { + item.id = userInfoParts[0]; + item.security = userInfoParts[1]; + } + + var query = Utils.ParseQueryString(url.Query); + ResolveStdTransport(query, ref item); + item.headerType = query["congestion_control"] ?? ""; + + return item; + } + + private static ProfileItem ResolveWireguard(string result) + { + ProfileItem item = new() + { + configType = EConfigType.Wireguard + }; + + Uri url = new(result); + + item.address = url.IdnHost; + item.port = url.Port; + item.remarks = url.GetComponents(UriComponents.Fragment, UriFormat.Unescaped); + item.id = Utils.UrlDecode(url.UserInfo); + + var query = Utils.ParseQueryString(url.Query); + + item.publicKey = Utils.UrlDecode(query["publickey"] ?? ""); + item.path = Utils.UrlDecode(query["reserved"] ?? ""); + item.requestHost = Utils.UrlDecode(query["address"] ?? ""); + item.shortId = Utils.UrlDecode(query["mtu"] ?? ""); + + return item; + } + + private static int ResolveStdTransport(NameValueCollection query, ref ProfileItem item) + { + item.flow = query["flow"] ?? ""; + item.streamSecurity = query["security"] ?? ""; + item.sni = query["sni"] ?? ""; + item.alpn = Utils.UrlDecode(query["alpn"] ?? ""); + item.fingerprint = Utils.UrlDecode(query["fp"] ?? ""); + item.publicKey = Utils.UrlDecode(query["pbk"] ?? ""); + item.shortId = Utils.UrlDecode(query["sid"] ?? ""); + item.spiderX = Utils.UrlDecode(query["spx"] ?? ""); + + item.network = query["type"] ?? nameof(ETransport.tcp); + switch (item.network) + { + case nameof(ETransport.tcp): + item.headerType = query["headerType"] ?? Global.None; + item.requestHost = Utils.UrlDecode(query["host"] ?? ""); + + break; + + case nameof(ETransport.kcp): + item.headerType = query["headerType"] ?? Global.None; + item.path = Utils.UrlDecode(query["seed"] ?? ""); + break; + + case nameof(ETransport.ws): + case nameof(ETransport.httpupgrade): + item.requestHost = Utils.UrlDecode(query["host"] ?? ""); + item.path = Utils.UrlDecode(query["path"] ?? "/"); + break; + + case nameof(ETransport.http): + case nameof(ETransport.h2): + item.network = nameof(ETransport.h2); + item.requestHost = Utils.UrlDecode(query["host"] ?? ""); + item.path = Utils.UrlDecode(query["path"] ?? "/"); + break; + + case nameof(ETransport.quic): + item.headerType = query["headerType"] ?? Global.None; + item.requestHost = query["quicSecurity"] ?? Global.None; + item.path = Utils.UrlDecode(query["key"] ?? ""); + break; + + case nameof(ETransport.grpc): + item.requestHost = Utils.UrlDecode(query["authority"] ?? ""); + item.path = Utils.UrlDecode(query["serviceName"] ?? ""); + item.headerType = Utils.UrlDecode(query["mode"] ?? Global.GrpcGunMode); + break; + + default: + break; + } + return 0; + } + + #endregion ImportShareUrl + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/SpeedtestHandler.cs b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs new file mode 100755 index 0000000..e30118a --- /dev/null +++ b/v2rayN/v2rayN/Handler/SpeedtestHandler.cs @@ -0,0 +1,414 @@ +using ReactiveUI; +using System.Diagnostics; +using System.Net; +using System.Net.Sockets; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + internal class SpeedtestHandler + { + private Config? _config; + private CoreHandler _coreHandler; + private List _selecteds; + private ESpeedActionType _actionType; + private Action _updateFunc; + + public SpeedtestHandler(Config config) + { + _config = config; + } + + public SpeedtestHandler(Config config, CoreHandler coreHandler, List selecteds, ESpeedActionType actionType, Action update) + { + _config = config; + _coreHandler = coreHandler; + _actionType = actionType; + _updateFunc = update; + + _selecteds = new List(); + foreach (var it in selecteds) + { + if (it.configType == EConfigType.Custom) + { + continue; + } + if (it.port <= 0) + { + continue; + } + _selecteds.Add(new ServerTestItem() + { + indexId = it.indexId, + address = it.address, + port = it.port, + configType = it.configType + }); + } + //clear test result + foreach (var it in _selecteds) + { + switch (actionType) + { + case ESpeedActionType.Tcping: + case ESpeedActionType.Realping: + UpdateFunc(it.indexId, ResUI.Speedtesting, ""); + ProfileExHandler.Instance.SetTestDelay(it.indexId, "0"); + break; + + case ESpeedActionType.Speedtest: + UpdateFunc(it.indexId, "", ResUI.SpeedtestingWait); + ProfileExHandler.Instance.SetTestSpeed(it.indexId, "0"); + break; + + case ESpeedActionType.Mixedtest: + UpdateFunc(it.indexId, ResUI.Speedtesting, ResUI.SpeedtestingWait); + ProfileExHandler.Instance.SetTestDelay(it.indexId, "0"); + ProfileExHandler.Instance.SetTestSpeed(it.indexId, "0"); + break; + } + } + + switch (actionType) + { + case ESpeedActionType.Tcping: + Task.Run(RunTcping); + break; + + case ESpeedActionType.Realping: + Task.Run(RunRealPing); + break; + + case ESpeedActionType.Speedtest: + Task.Run(RunSpeedTestAsync); + break; + + case ESpeedActionType.Mixedtest: + Task.Run(RunMixedtestAsync); + break; + } + } + + private Task RunTcping() + { + try + { + List tasks = []; + foreach (var it in _selecteds) + { + if (it.configType == EConfigType.Custom) + { + continue; + } + tasks.Add(Task.Run(() => + { + try + { + int time = GetTcpingTime(it.address, it.port); + var output = FormatOut(time, Global.DelayUnit); + + ProfileExHandler.Instance.SetTestDelay(it.indexId, output); + UpdateFunc(it.indexId, output); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + })); + } + Task.WaitAll([.. tasks]); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + finally + { + ProfileExHandler.Instance.SaveTo(); + } + + return Task.CompletedTask; + } + + private Task RunRealPing() + { + int pid = -1; + try + { + string msg = string.Empty; + + pid = _coreHandler.LoadCoreConfigSpeedtest(_selecteds); + if (pid < 0) + { + UpdateFunc("", ResUI.FailedToRunCore); + return Task.CompletedTask; + } + + DownloadHandle downloadHandle = new DownloadHandle(); + + List tasks = new(); + foreach (var it in _selecteds) + { + if (!it.allowTest) + { + continue; + } + if (it.configType == EConfigType.Custom) + { + continue; + } + tasks.Add(Task.Run(async () => + { + try + { + WebProxy webProxy = new(Global.Loopback, it.port); + string output = await GetRealPingTime(downloadHandle, webProxy); + + ProfileExHandler.Instance.SetTestDelay(it.indexId, output); + UpdateFunc(it.indexId, output); + int.TryParse(output, out int delay); + it.delay = delay; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + })); + } + Task.WaitAll(tasks.ToArray()); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + finally + { + if (pid > 0) + { + _coreHandler.CoreStopPid(pid); + } + ProfileExHandler.Instance.SaveTo(); + } + + return Task.CompletedTask; + } + + private async Task RunSpeedTestAsync() + { + int pid = -1; + //if (_actionType == ESpeedActionType.Mixedtest) + //{ + // _selecteds = _selecteds.OrderBy(t => t.delay).ToList(); + //} + + pid = _coreHandler.LoadCoreConfigSpeedtest(_selecteds); + if (pid < 0) + { + UpdateFunc("", ResUI.FailedToRunCore); + return; + } + + string url = _config.speedTestItem.speedTestUrl; + var timeout = _config.speedTestItem.speedTestTimeout; + + DownloadHandle downloadHandle = new(); + + var exitLoop = false; + MessageBus.Current.Listen(Global.CommandStopSpeedTest) + .Subscribe(x => + { + if (!exitLoop) + { + UpdateFunc("", ResUI.SpeedtestingStop); + } + exitLoop = true; + }); + + foreach (var it in _selecteds) + { + if (exitLoop) + { + UpdateFunc(it.indexId, "", ResUI.SpeedtestingSkip); + continue; + } + if (!it.allowTest) + { + continue; + } + if (it.configType == EConfigType.Custom) + { + continue; + } + //if (it.delay < 0) + //{ + // UpdateFunc(it.indexId, "", ResUI.SpeedtestingSkip); + // continue; + //} + ProfileExHandler.Instance.SetTestSpeed(it.indexId, "-1"); + UpdateFunc(it.indexId, "", ResUI.Speedtesting); + + var item = LazyConfig.Instance.GetProfileItem(it.indexId); + if (item is null) continue; + + WebProxy webProxy = new(Global.Loopback, it.port); + + await downloadHandle.DownloadDataAsync(url, webProxy, timeout, (bool success, string msg) => + { + decimal.TryParse(msg, out decimal dec); + if (dec > 0) + { + ProfileExHandler.Instance.SetTestSpeed(it.indexId, msg); + } + UpdateFunc(it.indexId, "", msg); + }); + } + + if (pid > 0) + { + _coreHandler.CoreStopPid(pid); + } + UpdateFunc("", ResUI.SpeedtestingCompleted); + ProfileExHandler.Instance.SaveTo(); + } + + private async Task RunSpeedTestMulti() + { + int pid = -1; + pid = _coreHandler.LoadCoreConfigSpeedtest(_selecteds); + if (pid < 0) + { + UpdateFunc("", ResUI.FailedToRunCore); + return; + } + + string url = _config.speedTestItem.speedTestUrl; + var timeout = _config.speedTestItem.speedTestTimeout; + + DownloadHandle downloadHandle = new(); + + var exitLoop = false; + MessageBus.Current.Listen(Global.CommandStopSpeedTest) + .Subscribe(x => + { + if (!exitLoop) + { + UpdateFunc("", ResUI.SpeedtestingStop); + } + exitLoop = true; + }); + + foreach (var it in _selecteds) + { + if (exitLoop) + { + UpdateFunc(it.indexId, "", ResUI.SpeedtestingSkip); + continue; + } + + if (!it.allowTest) + { + continue; + } + if (it.configType == EConfigType.Custom) + { + continue; + } + if (it.delay < 0) + { + UpdateFunc(it.indexId, "", ResUI.SpeedtestingSkip); + continue; + } + ProfileExHandler.Instance.SetTestSpeed(it.indexId, "-1"); + UpdateFunc(it.indexId, "", ResUI.Speedtesting); + + var item = LazyConfig.Instance.GetProfileItem(it.indexId); + if (item is null) continue; + + WebProxy webProxy = new(Global.Loopback, it.port); + _ = downloadHandle.DownloadDataAsync(url, webProxy, timeout, (bool success, string msg) => + { + decimal.TryParse(msg, out decimal dec); + if (dec > 0) + { + ProfileExHandler.Instance.SetTestSpeed(it.indexId, msg); + } + UpdateFunc(it.indexId, "", msg); + }); + await Task.Delay(2000); + } + + await Task.Delay((timeout + 2) * 1000); + + if (pid > 0) + { + _coreHandler.CoreStopPid(pid); + } + UpdateFunc("", ResUI.SpeedtestingCompleted); + ProfileExHandler.Instance.SaveTo(); + } + + private async Task RunMixedtestAsync() + { + await RunRealPing(); + + await Task.Delay(1000); + + await RunSpeedTestMulti(); + } + + private async Task GetRealPingTime(DownloadHandle downloadHandle, IWebProxy webProxy) + { + int responseTime = await downloadHandle.GetRealPingTime(_config.speedTestItem.speedPingTestUrl, webProxy, 10); + //string output = Utile.IsNullOrEmpty(status) ? FormatOut(responseTime, "ms") : status; + return FormatOut(responseTime, Global.DelayUnit); + } + + private int GetTcpingTime(string url, int port) + { + int responseTime = -1; + + try + { + if (!IPAddress.TryParse(url, out IPAddress? ipAddress)) + { + IPHostEntry ipHostInfo = System.Net.Dns.GetHostEntry(url); + ipAddress = ipHostInfo.AddressList[0]; + } + + Stopwatch timer = new(); + timer.Start(); + + IPEndPoint endPoint = new(ipAddress, port); + using Socket clientSocket = new(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); + + IAsyncResult result = clientSocket.BeginConnect(endPoint, null, null); + if (!result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5))) + throw new TimeoutException("connect timeout (5s): " + url); + clientSocket.EndConnect(result); + + timer.Stop(); + responseTime = timer.Elapsed.Milliseconds; + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return responseTime; + } + + private string FormatOut(object time, string unit) + { + //if (time.ToString().Equals("-1")) + //{ + // return "Timeout"; + //} + return $"{time}"; + } + + private void UpdateFunc(string indexId, string delay, string speed = "") + { + _updateFunc(indexId, delay, speed); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/StatisticsHandler.cs b/v2rayN/v2rayN/Handler/StatisticsHandler.cs new file mode 100755 index 0000000..f99a461 --- /dev/null +++ b/v2rayN/v2rayN/Handler/StatisticsHandler.cs @@ -0,0 +1,135 @@ +using v2rayN.Models; + +namespace v2rayN.Handler +{ + internal class StatisticsHandler + { + private Config _config; + private ServerStatItem? _serverStatItem; + private List _lstServerStat; + private Action _updateFunc; + private StatisticsV2ray? _statisticsV2Ray; + private StatisticsSingbox? _statisticsSingbox; + + public List ServerStat => _lstServerStat; + public bool Enable { get; set; } + + public StatisticsHandler(Config config, Action update) + { + _config = config; + Enable = config.guiItem.enableStatistics; + if (!Enable) + { + return; + } + + _updateFunc = update; + + Init(); + + _statisticsV2Ray = new StatisticsV2ray(config, UpdateServerStat); + _statisticsSingbox = new StatisticsSingbox(config, UpdateServerStat); + } + + public void Close() + { + try + { + _statisticsV2Ray?.Close(); + _statisticsSingbox?.Close(); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + public void ClearAllServerStatistics() + { + SQLiteHelper.Instance.Execute($"delete from ServerStatItem "); + _serverStatItem = null; + _lstServerStat = new(); + } + + public void SaveTo() + { + try + { + SQLiteHelper.Instance.UpdateAll(_lstServerStat); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + private void Init() + { + SQLiteHelper.Instance.Execute($"delete from ServerStatItem where indexId not in ( select indexId from ProfileItem )"); + + long ticks = DateTime.Now.Date.Ticks; + SQLiteHelper.Instance.Execute($"update ServerStatItem set todayUp = 0,todayDown=0,dateNow={ticks} where dateNow<>{ticks}"); + + _lstServerStat = SQLiteHelper.Instance.Table().ToList(); + } + + private void UpdateServerStat(ServerSpeedItem server) + { + GetServerStatItem(_config.indexId); + + if (_serverStatItem is null) + { + return; + } + if (server.proxyUp != 0 || server.proxyDown != 0) + { + _serverStatItem.todayUp += server.proxyUp; + _serverStatItem.todayDown += server.proxyDown; + _serverStatItem.totalUp += server.proxyUp; + _serverStatItem.totalDown += server.proxyDown; + } + + server.indexId = _config.indexId; + server.todayUp = _serverStatItem.todayUp; + server.todayDown = _serverStatItem.todayDown; + server.totalUp = _serverStatItem.totalUp; + server.totalDown = _serverStatItem.totalDown; + _updateFunc(server); + } + + private void GetServerStatItem(string indexId) + { + long ticks = DateTime.Now.Date.Ticks; + if (_serverStatItem != null && _serverStatItem.indexId != indexId) + { + _serverStatItem = null; + } + + if (_serverStatItem == null) + { + _serverStatItem = _lstServerStat.FirstOrDefault(t => t.indexId == indexId); + if (_serverStatItem == null) + { + _serverStatItem = new ServerStatItem + { + indexId = indexId, + totalUp = 0, + totalDown = 0, + todayUp = 0, + todayDown = 0, + dateNow = ticks + }; + SQLiteHelper.Instance.Replace(_serverStatItem); + _lstServerStat.Add(_serverStatItem); + } + } + + if (_serverStatItem.dateNow != ticks) + { + _serverStatItem.todayUp = 0; + _serverStatItem.todayDown = 0; + _serverStatItem.dateNow = ticks; + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/StatisticsSingbox.cs b/v2rayN/v2rayN/Handler/StatisticsSingbox.cs new file mode 100755 index 0000000..a845004 --- /dev/null +++ b/v2rayN/v2rayN/Handler/StatisticsSingbox.cs @@ -0,0 +1,129 @@ +using System.Net.WebSockets; +using System.Text; +using v2rayN.Models; + +namespace v2rayN.Handler +{ + internal class StatisticsSingbox + { + private Config _config; + private bool _exitFlag; + private ClientWebSocket? webSocket; + private string url = string.Empty; + private Action _updateFunc; + + public StatisticsSingbox(Config config, Action update) + { + _config = config; + _updateFunc = update; + _exitFlag = false; + + Task.Run(() => Run()); + } + + private async void Init() + { + await Task.Delay(5000); + + try + { + url = $"ws://{Global.Loopback}:{LazyConfig.Instance.StatePort}/traffic"; + + if (webSocket == null) + { + webSocket = new ClientWebSocket(); + await webSocket.ConnectAsync(new Uri(url), CancellationToken.None); + } + } + catch { } + } + + public void Close() + { + try + { + _exitFlag = true; + if (webSocket != null) + { + webSocket.Abort(); + webSocket = null; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + private async void Run() + { + Init(); + + while (!_exitFlag) + { + await Task.Delay(1000); + try + { + if (!(_config.runningCoreType is ECoreType.sing_box or ECoreType.clash or ECoreType.clash_meta or ECoreType.mihomo)) + { + continue; + } + if (webSocket != null) + { + if (webSocket.State == WebSocketState.Aborted + || webSocket.State == WebSocketState.Closed) + { + webSocket.Abort(); + webSocket = null; + Init(); + continue; + } + + if (webSocket.State != WebSocketState.Open) + { + continue; + } + + var buffer = new byte[1024]; + var res = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); + while (!res.CloseStatus.HasValue) + { + var result = Encoding.UTF8.GetString(buffer, 0, res.Count); + if (!Utils.IsNullOrEmpty(result)) + { + ParseOutput(result, out ulong up, out ulong down); + + _updateFunc(new ServerSpeedItem() + { + proxyUp = (long)(up / 1000), + proxyDown = (long)(down / 1000) + }); + } + res = await webSocket.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None); + } + } + } + catch + { + } + } + } + + private void ParseOutput(string source, out ulong up, out ulong down) + { + up = 0; down = 0; + try + { + var trafficItem = JsonUtils.Deserialize(source); + if (trafficItem != null) + { + up = trafficItem.up; + down = trafficItem.down; + } + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/StatisticsV2ray.cs b/v2rayN/v2rayN/Handler/StatisticsV2ray.cs new file mode 100755 index 0000000..9bf83f9 --- /dev/null +++ b/v2rayN/v2rayN/Handler/StatisticsV2ray.cs @@ -0,0 +1,132 @@ +using Grpc.Core; +using Grpc.Net.Client; +using ProtosLib.Statistics; +using v2rayN.Models; + +namespace v2rayN.Handler +{ + internal class StatisticsV2ray + { + private Models.Config _config; + private GrpcChannel? _channel; + private StatsService.StatsServiceClient? _client; + private bool _exitFlag; + private Action _updateFunc; + + public StatisticsV2ray(Models.Config config, Action update) + { + _config = config; + _updateFunc = update; + _exitFlag = false; + + GrpcInit(); + + Task.Run(Run); + } + + private void GrpcInit() + { + if (_channel is null) + { + try + { + _channel = GrpcChannel.ForAddress($"{Global.HttpProtocol}{Global.Loopback}:{LazyConfig.Instance.StatePort}"); + _client = new StatsService.StatsServiceClient(_channel); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + } + + public void Close() + { + _exitFlag = true; + } + + private async void Run() + { + while (!_exitFlag) + { + await Task.Delay(1000); + try + { + if (!(_config.runningCoreType is ECoreType.Xray or ECoreType.v2fly or ECoreType.v2fly_v5 or ECoreType.SagerNet)) + { + continue; + } + if (_channel?.State == ConnectivityState.Ready) + { + QueryStatsResponse? res = null; + try + { + if (_client != null) + res = await _client.QueryStatsAsync(new QueryStatsRequest() { Pattern = "", Reset = true }); + } + catch + { + } + + if (res != null) + { + ParseOutput(res.Stat, out ServerSpeedItem server); + _updateFunc(server); + } + } + if (_channel != null) + await _channel.ConnectAsync(); + } + catch + { + } + } + } + + private void ParseOutput(Google.Protobuf.Collections.RepeatedField source, out ServerSpeedItem server) + { + server = new(); + try + { + foreach (Stat stat in source) + { + string name = stat.Name; + long value = stat.Value / 1024; //KByte + string[] nStr = name.Split(">>>".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + string type = ""; + + name = name.Trim(); + + name = nStr[1]; + type = nStr[3]; + + if (name == Global.ProxyTag) + { + if (type == "uplink") + { + server.proxyUp = value; + } + else if (type == "downlink") + { + server.proxyDown = value; + } + } + else if (name == Global.DirectTag) + { + if (type == "uplink") + { + server.directUp = value; + } + else if (type == "downlink") + { + server.directDown = value; + } + } + } + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/SysProxyHandle.cs b/v2rayN/v2rayN/Handler/SysProxyHandle.cs new file mode 100755 index 0000000..d613139 --- /dev/null +++ b/v2rayN/v2rayN/Handler/SysProxyHandle.cs @@ -0,0 +1,107 @@ +using PacLib; +using v2rayN.Models; + +namespace v2rayN.Handler +{ + public static class SysProxyHandle + { + //private const string _userWininetConfigFile = "user-wininet.json"; + + //private static string _queryStr; + + // In general, this won't change + // format: + // + // + // + // + + private enum RET_ERRORS : int + { + RET_NO_ERROR = 0, + INVALID_FORMAT = 1, + NO_PERMISSION = 2, + SYSCALL_FAILED = 3, + NO_MEMORY = 4, + INVAILD_OPTION_COUNT = 5, + }; + + static SysProxyHandle() + { + } + + public static bool UpdateSysProxy(Config config, bool forceDisable) + { + var type = config.sysProxyType; + + if (forceDisable && type != ESysProxyType.Unchanged) + { + type = ESysProxyType.ForcedClear; + } + + try + { + int port = LazyConfig.Instance.GetLocalPort(EInboundProtocol.http); + int portSocks = LazyConfig.Instance.GetLocalPort(EInboundProtocol.socks); + int portPac = LazyConfig.Instance.GetLocalPort(EInboundProtocol.pac); + if (port <= 0) + { + return false; + } + if (type == ESysProxyType.ForcedChange) + { + var strExceptions = $";{config.constItem.defIEProxyExceptions};{config.systemProxyExceptions}"; + + var strProxy = string.Empty; + if (Utils.IsNullOrEmpty(config.systemProxyAdvancedProtocol)) + { + strProxy = $"{Global.Loopback}:{port}"; + } + else + { + strProxy = config.systemProxyAdvancedProtocol + .Replace("{ip}", Global.Loopback) + .Replace("{http_port}", port.ToString()) + .Replace("{socks_port}", portSocks.ToString()); + } + ProxySetting.SetProxy(strProxy, strExceptions, 2); // set a named proxy + } + else if (type == ESysProxyType.ForcedClear) + { + ProxySetting.UnsetProxy(); // set to no proxy + } + else if (type == ESysProxyType.Unchanged) + { + } + else if (type == ESysProxyType.Pac) + { + PacHandler.Start(Utils.GetConfigPath(), port, portPac); + var strProxy = $"{Global.HttpProtocol}{Global.Loopback}:{portPac}/pac?t={DateTime.Now.Ticks}"; + ProxySetting.SetProxy(strProxy, "", 4); // use pac script url for auto-config proxy + } + + if (type != ESysProxyType.Pac) + { + PacHandler.Stop(); + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + return true; + } + + public static void ResetIEProxy4WindowsShutDown() + { + try + { + //TODO To be verified + Utils.RegWriteValue(@"Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", 0); + } + catch + { + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Handler/UpdateHandle.cs b/v2rayN/v2rayN/Handler/UpdateHandle.cs new file mode 100755 index 0000000..175b3af --- /dev/null +++ b/v2rayN/v2rayN/Handler/UpdateHandle.cs @@ -0,0 +1,607 @@ +using DynamicData; +using Splat; +using System.Diagnostics; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; +using System.Text.RegularExpressions; +using System.Windows; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.Handler +{ + internal class UpdateHandle + { + private Action _updateFunc; + private Config _config; + + public event EventHandler AbsoluteCompleted; + + public class ResultEventArgs : EventArgs + { + public bool Success; + public string Msg; + public string Url; + + public ResultEventArgs(bool success, string msg, string url = "") + { + Success = success; + Msg = msg; + Url = url; + } + } + + public void CheckUpdateGuiN(Config config, Action update, bool preRelease) + { + _config = config; + _updateFunc = update; + var url = string.Empty; + + DownloadHandle downloadHandle = new(); + downloadHandle.UpdateCompleted += (sender2, args) => + { + if (args.Success) + { + _updateFunc(false, ResUI.MsgDownloadV2rayCoreSuccessfully); + + try + { + string fileName = Utils.GetTempPath(Utils.GetDownloadFileName(url)); + fileName = Utils.UrlEncode(fileName); + Process process = new() + { + StartInfo = new ProcessStartInfo + { + FileName = "v2rayUpgrade.exe", + Arguments = fileName.AppendQuotes(), + WorkingDirectory = Utils.StartupPath() + } + }; + process.Start(); + if (process.Id > 0) + { + _updateFunc(true, ""); + } + } + catch (Exception ex) + { + _updateFunc(false, ex.Message); + } + } + else + { + _updateFunc(false, args.Msg); + } + }; + downloadHandle.Error += (sender2, args) => + { + _updateFunc(false, args.GetException().Message); + }; + AbsoluteCompleted += (sender2, args) => + { + if (args.Success) + { + _updateFunc(false, string.Format(ResUI.MsgParsingSuccessfully, "v2rayN")); + _updateFunc(false, args.Msg); + + url = args.Url; + AskToDownload(downloadHandle, url, true).ContinueWith(task => + { + _updateFunc(false, url); + }); + } + else + { + Locator.Current.GetService()?.Enqueue(args.Msg); + _updateFunc(false, args.Msg); + } + }; + _updateFunc(false, string.Format(ResUI.MsgStartUpdating, "v2rayN")); + CheckUpdateAsync(ECoreType.v2rayN, preRelease); + } + + public void CheckUpdateCore(ECoreType type, Config config, Action update, bool preRelease) + { + _config = config; + _updateFunc = update; + var url = string.Empty; + + DownloadHandle downloadHandle = new(); + downloadHandle.UpdateCompleted += (sender2, args) => + { + if (args.Success) + { + _updateFunc(false, ResUI.MsgDownloadV2rayCoreSuccessfully); + _updateFunc(false, ResUI.MsgUnpacking); + + try + { + _updateFunc(true, url); + } + catch (Exception ex) + { + _updateFunc(false, ex.Message); + } + } + else + { + _updateFunc(false, args.Msg); + } + }; + downloadHandle.Error += (sender2, args) => + { + _updateFunc(true, args.GetException().Message); + }; + + AbsoluteCompleted += (sender2, args) => + { + if (args.Success) + { + _updateFunc(false, string.Format(ResUI.MsgParsingSuccessfully, "Core")); + _updateFunc(false, args.Msg); + + url = args.Url; + AskToDownload(downloadHandle, url, true).ContinueWith(task => + { + _updateFunc(false, url); + }); + } + else + { + Locator.Current.GetService()?.Enqueue(args.Msg); + _updateFunc(false, args.Msg); + } + }; + _updateFunc(false, string.Format(ResUI.MsgStartUpdating, "Core")); + CheckUpdateAsync(type, preRelease); + } + + public void UpdateSubscriptionProcess(Config config, string subId, bool blProxy, Action update) + { + _config = config; + _updateFunc = update; + + _updateFunc(false, ResUI.MsgUpdateSubscriptionStart); + var subItem = LazyConfig.Instance.SubItems().OrderBy(t => t.sort).ToList(); + + if (subItem == null || subItem.Count <= 0) + { + _updateFunc(false, ResUI.MsgNoValidSubscription); + return; + } + + Task.Run(async () => + { + foreach (var item in subItem) + { + string id = item.id.TrimEx(); + string url = item.url.TrimEx(); + string userAgent = item.userAgent.TrimEx(); + string hashCode = $"{item.remarks}->"; + if (Utils.IsNullOrEmpty(id) || Utils.IsNullOrEmpty(url) || (!Utils.IsNullOrEmpty(subId) && item.id != subId)) + { + //_updateFunc(false, $"{hashCode}{ResUI.MsgNoValidSubscription}"); + continue; + } + if (!url.StartsWith(Global.HttpsProtocol) && !url.StartsWith(Global.HttpProtocol)) + { + continue; + } + if (item.enabled == false) + { + _updateFunc(false, $"{hashCode}{ResUI.MsgSkipSubscriptionUpdate}"); + continue; + } + + var downloadHandle = new DownloadHandle(); + downloadHandle.Error += (sender2, args) => + { + _updateFunc(false, $"{hashCode}{args.GetException().Message}"); + }; + + _updateFunc(false, $"{hashCode}{ResUI.MsgStartGettingSubscriptions}"); + + //one url + url = Utils.GetPunycode(url); + //convert + if (!Utils.IsNullOrEmpty(item.convertTarget)) + { + var subConvertUrl = Utils.IsNullOrEmpty(config.constItem.subConvertUrl) ? Global.SubConvertUrls.FirstOrDefault() : config.constItem.subConvertUrl; + url = string.Format(subConvertUrl!, Utils.UrlEncode(url)); + if (!url.Contains("target=")) + { + url += string.Format("&target={0}", item.convertTarget); + } + if (!url.Contains("config=")) + { + url += string.Format("&config={0}", Global.SubConvertConfig.FirstOrDefault()); + } + } + var result = await downloadHandle.TryDownloadString(url, blProxy, userAgent); + if (blProxy && Utils.IsNullOrEmpty(result)) + { + result = await downloadHandle.TryDownloadString(url, false, userAgent); + } + + //more url + if (Utils.IsNullOrEmpty(item.convertTarget) && !Utils.IsNullOrEmpty(item.moreUrl.TrimEx())) + { + if (!Utils.IsNullOrEmpty(result) && Utils.IsBase64String(result!)) + { + result = Utils.Base64Decode(result); + } + + var lstUrl = new List + { + item.moreUrl.TrimEx().Split(",") + }; + foreach (var it in lstUrl) + { + var url2 = Utils.GetPunycode(it); + if (Utils.IsNullOrEmpty(url2)) + { + continue; + } + + var result2 = await downloadHandle.TryDownloadString(url2, blProxy, userAgent); + if (blProxy && Utils.IsNullOrEmpty(result2)) + { + result2 = await downloadHandle.TryDownloadString(url2, false, userAgent); + } + if (!Utils.IsNullOrEmpty(result2)) + { + if (Utils.IsBase64String(result2!)) + { + result += Utils.Base64Decode(result2); + } + else + { + result += result2; + } + } + } + } + + if (Utils.IsNullOrEmpty(result)) + { + _updateFunc(false, $"{hashCode}{ResUI.MsgSubscriptionDecodingFailed}"); + } + else + { + _updateFunc(false, $"{hashCode}{ResUI.MsgGetSubscriptionSuccessfully}"); + if (result?.Length < 99) + { + _updateFunc(false, $"{hashCode}{result}"); + } + + int ret = ConfigHandler.AddBatchServers(config, result, id, true); + if (ret <= 0) + { + Logging.SaveLog("FailedImportSubscription"); + Logging.SaveLog(result); + } + _updateFunc(false, + ret > 0 + ? $"{hashCode}{ResUI.MsgUpdateSubscriptionEnd}" + : $"{hashCode}{ResUI.MsgFailedImportSubscription}"); + } + _updateFunc(false, "-------------------------------------------------------"); + } + + _updateFunc(true, $"{ResUI.MsgUpdateSubscriptionEnd}"); + }); + } + + public void UpdateGeoFileAll(Config config, Action update) + { + Task.Run(async () => + { + await UpdateGeoFile("geosite", _config, update); + await UpdateGeoFile("geoip", _config, update); + + //await UpdateGeoFile4Singbox("geosite", _config, false, update); + //await UpdateGeoFile4Singbox("geoip", _config, true, update); + }); + } + + public void RunAvailabilityCheck(Action update) + { + Task.Run(async () => + { + var time = await (new DownloadHandle()).RunAvailabilityCheck(null); + + update(false, string.Format(ResUI.TestMeOutput, time)); + }); + } + + #region private + + private async void CheckUpdateAsync(ECoreType type, bool preRelease) + { + try + { + var coreInfo = LazyConfig.Instance.GetCoreInfo(type); + string url = coreInfo.coreReleaseApiUrl; + + var result = await (new DownloadHandle()).DownloadStringAsync(url, true, ""); + if (!Utils.IsNullOrEmpty(result)) + { + responseHandler(type, result, preRelease); + } + else + { + Logging.SaveLog("StatusCode error: " + url); + return; + } + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + _updateFunc(false, ex.Message); + } + } + + /// + /// 获取V2RayCore版本 + /// + private SemanticVersion getCoreVersion(ECoreType type) + { + try + { + var coreInfo = LazyConfig.Instance.GetCoreInfo(type); + string filePath = string.Empty; + foreach (string name in coreInfo.coreExes) + { + string vName = $"{name}.exe"; + vName = Utils.GetBinPath(vName, coreInfo.coreType.ToString()); + if (File.Exists(vName)) + { + filePath = vName; + break; + } + } + + if (!File.Exists(filePath)) + { + string msg = string.Format(ResUI.NotFoundCore, @"", "", ""); + //ShowMsg(true, msg); + return new SemanticVersion(""); + } + + using Process p = new(); + p.StartInfo.FileName = filePath.AppendQuotes(); + p.StartInfo.Arguments = coreInfo.versionArg; + p.StartInfo.WorkingDirectory = Utils.StartupPath(); + p.StartInfo.UseShellExecute = false; + p.StartInfo.RedirectStandardOutput = true; + p.StartInfo.CreateNoWindow = true; + p.StartInfo.StandardOutputEncoding = Encoding.UTF8; + p.Start(); + p.WaitForExit(5000); + string echo = p.StandardOutput.ReadToEnd(); + string version = string.Empty; + switch (type) + { + case ECoreType.v2fly: + case ECoreType.SagerNet: + case ECoreType.Xray: + case ECoreType.v2fly_v5: + version = Regex.Match(echo, $"{coreInfo.match} ([0-9.]+) \\(").Groups[1].Value; + break; + + case ECoreType.clash: + case ECoreType.clash_meta: + case ECoreType.mihomo: + version = Regex.Match(echo, $"v[0-9.]+").Groups[0].Value; + break; + + case ECoreType.sing_box: + version = Regex.Match(echo, $"([0-9.]+)").Groups[1].Value; + break; + } + return new SemanticVersion(version); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + _updateFunc(false, ex.Message); + return new SemanticVersion(""); + } + } + + private void responseHandler(ECoreType type, string gitHubReleaseApi, bool preRelease) + { + try + { + var gitHubReleases = JsonUtils.Deserialize>(gitHubReleaseApi); + var gitHubRelease = preRelease ? gitHubReleases?.First() : gitHubReleases?.First(r => r.Prerelease == false); + var version = new SemanticVersion(gitHubRelease?.TagName!); + var body = gitHubRelease?.Body; + + var coreInfo = LazyConfig.Instance.GetCoreInfo(type); + + SemanticVersion curVersion; + string message; + string url; + switch (type) + { + case ECoreType.v2fly: + case ECoreType.SagerNet: + case ECoreType.Xray: + case ECoreType.v2fly_v5: + { + curVersion = getCoreVersion(type); + message = string.Format(ResUI.IsLatestCore, type, curVersion.ToVersionString("v")); + string osBit = "64"; + switch (RuntimeInformation.ProcessArchitecture) + { + case Architecture.Arm64: + osBit = "arm64-v8a"; + break; + + case Architecture.X86: + osBit = "32"; + break; + + default: + osBit = "64"; + break; + } + + url = string.Format(coreInfo.coreDownloadUrl64, version.ToVersionString("v"), osBit); + break; + } + case ECoreType.clash: + case ECoreType.clash_meta: + case ECoreType.mihomo: + { + curVersion = getCoreVersion(type); + message = string.Format(ResUI.IsLatestCore, type, curVersion); + switch (RuntimeInformation.ProcessArchitecture) + { + case Architecture.Arm64: + url = coreInfo.coreDownloadUrlArm64; + break; + + case Architecture.X86: + url = coreInfo.coreDownloadUrl32; + break; + + default: + url = coreInfo.coreDownloadUrl64; + break; + } + url = string.Format(url, version.ToVersionString("v")); + break; + } + case ECoreType.sing_box: + { + curVersion = getCoreVersion(type); + message = string.Format(ResUI.IsLatestCore, type, curVersion.ToVersionString("v")); + switch (RuntimeInformation.ProcessArchitecture) + { + case Architecture.Arm64: + url = coreInfo.coreDownloadUrlArm64; + break; + + case Architecture.X86: + url = coreInfo.coreDownloadUrl32; + break; + + default: + url = coreInfo.coreDownloadUrl64; + break; + } + url = string.Format(url, version.ToVersionString("v"), version); + break; + } + case ECoreType.v2rayN: + { + curVersion = new SemanticVersion(FileVersionInfo.GetVersionInfo(Utils.GetExePath()).FileVersion.ToString()); + message = string.Format(ResUI.IsLatestN, type, curVersion); + switch (RuntimeInformation.ProcessArchitecture) + { + case Architecture.Arm64: + url = string.Format(coreInfo.coreDownloadUrlArm64, version); + break; + + case Architecture.X86: + url = string.Format(coreInfo.coreDownloadUrl32, version); + break; + + default: + url = string.Format(coreInfo.coreDownloadUrl64, version); + break; + } + break; + } + default: + throw new ArgumentException("Type"); + } + + if (curVersion >= version && version != new SemanticVersion(0, 0, 0)) + { + AbsoluteCompleted?.Invoke(this, new ResultEventArgs(false, message)); + return; + } + + AbsoluteCompleted?.Invoke(this, new ResultEventArgs(true, body, url)); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + _updateFunc(false, ex.Message); + } + } + + private async Task AskToDownload(DownloadHandle downloadHandle, string url, bool blAsk) + { + bool blDownload = false; + if (blAsk) + { + if (UI.ShowYesNo(string.Format(ResUI.DownloadYesNo, url)) == MessageBoxResult.Yes) + { + blDownload = true; + } + } + else + { + blDownload = true; + } + if (blDownload) + { + await downloadHandle.DownloadFileAsync(url, true, 600); + } + } + + private async Task UpdateGeoFile(string geoName, Config config, Action update) + { + _config = config; + _updateFunc = update; + var url = string.Format(Global.GeoUrl, geoName); + + DownloadHandle downloadHandle = new(); + downloadHandle.UpdateCompleted += (sender2, args) => + { + if (args.Success) + { + _updateFunc(false, string.Format(ResUI.MsgDownloadGeoFileSuccessfully, geoName)); + + try + { + string fileName = Utils.GetTempPath(Utils.GetDownloadFileName(url)); + if (File.Exists(fileName)) + { + //Global.coreTypes.ForEach(it => + //{ + // string targetPath = Utile.GetBinPath($"{geoName}.dat", (ECoreType)Enum.Parse(typeof(ECoreType), it)); + // File.Copy(fileName, targetPath, true); + //}); + string targetPath = Utils.GetBinPath($"{geoName}.dat"); + File.Copy(fileName, targetPath, true); + + File.Delete(fileName); + //_updateFunc(true, ""); + } + } + catch (Exception ex) + { + _updateFunc(false, ex.Message); + } + } + else + { + _updateFunc(false, args.Msg); + } + }; + downloadHandle.Error += (sender2, args) => + { + _updateFunc(false, args.GetException().Message); + }; + await AskToDownload(downloadHandle, url, false); + } + + #endregion private + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ComboItem.cs b/v2rayN/v2rayN/Models/ComboItem.cs new file mode 100755 index 0000000..836d88b --- /dev/null +++ b/v2rayN/v2rayN/Models/ComboItem.cs @@ -0,0 +1,15 @@ +namespace v2rayN.Models +{ + public class ComboItem + { + public string ID + { + get; set; + } + + public string Text + { + get; set; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/Config.cs b/v2rayN/v2rayN/Models/Config.cs new file mode 100755 index 0000000..d763f48 --- /dev/null +++ b/v2rayN/v2rayN/Models/Config.cs @@ -0,0 +1,40 @@ +namespace v2rayN.Models +{ + /// + /// 本软件配置文件实体类 + /// + [Serializable] + public class Config + { + #region property + + public string indexId { get; set; } + public string subIndexId { get; set; } + public ESysProxyType sysProxyType { get; set; } + public string systemProxyExceptions { get; set; } + public string systemProxyAdvancedProtocol { get; set; } + + public ECoreType runningCoreType { get; set; } + + #endregion property + + #region other entities + + public CoreBasicItem coreBasicItem { get; set; } + public TunModeItem tunModeItem { get; set; } + public KcpItem kcpItem { get; set; } + public GrpcItem grpcItem { get; set; } + public RoutingBasicItem routingBasicItem { get; set; } + public GUIItem guiItem { get; set; } + public UIItem uiItem { get; set; } + public ConstItem constItem { get; set; } + public SpeedTestItem speedTestItem { get; set; } + public Mux4SboxItem mux4SboxItem { get; set; } + public HysteriaItem hysteriaItem { get; set; } + public List inbound { get; set; } + public List globalHotkeys { get; set; } + public List coreTypeItem { get; set; } + + #endregion other entities + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ConfigItems.cs b/v2rayN/v2rayN/Models/ConfigItems.cs new file mode 100755 index 0000000..af768b4 --- /dev/null +++ b/v2rayN/v2rayN/Models/ConfigItems.cs @@ -0,0 +1,213 @@ +using System.Windows.Input; + +namespace v2rayN.Models +{ + [Serializable] + public class CoreBasicItem + { + /// + /// 允许日志 + /// + public bool logEnabled { get; set; } + + /// + /// 日志等级 + /// + public string loglevel { get; set; } + + /// + /// 允许Mux多路复用 + /// + public bool muxEnabled { get; set; } + + /// + /// 是否允许不安全连接 + /// + public bool defAllowInsecure { get; set; } + + public string defFingerprint { get; set; } + + /// + /// 默认用户代理 + /// + public string defUserAgent { get; set; } + + public bool enableFragment { get; set; } + + public bool enableCacheFile4Sbox { get; set; } = true; + } + + [Serializable] + public class InItem + { + public int localPort { get; set; } + + public string protocol { get; set; } + + public bool udpEnabled { get; set; } + + public bool sniffingEnabled { get; set; } = true; + public List? destOverride { get; set; } = ["http", "tls"]; + public bool routeOnly { get; set; } + public bool allowLANConn { get; set; } + + public bool newPort4LAN { get; set; } + + public string user { get; set; } + + public string pass { get; set; } + } + + [Serializable] + public class KcpItem + { + public int mtu { get; set; } + + public int tti { get; set; } + + public int uplinkCapacity { get; set; } + + public int downlinkCapacity { get; set; } + + public bool congestion { get; set; } + + public int readBufferSize { get; set; } + + public int writeBufferSize { get; set; } + } + + [Serializable] + public class GrpcItem + { + public int idle_timeout { get; set; } + public int health_check_timeout { get; set; } + public bool permit_without_stream { get; set; } + public int initial_windows_size { get; set; } + } + + [Serializable] + public class GUIItem + { + public bool autoRun { get; set; } + + public bool enableStatistics { get; set; } + + public bool keepOlderDedupl { get; set; } + + public bool ignoreGeoUpdateCore { get; set; } = true; + + public int autoUpdateInterval { get; set; } = 10; + + public bool checkPreReleaseUpdate { get; set; } = false; + + public bool enableSecurityProtocolTls13 { get; set; } + + public int trayMenuServersLimit { get; set; } = 20; + + public bool enableHWA { get; set; } = false; + + public bool enableLog { get; set; } = true; + } + + [Serializable] + public class UIItem + { + public bool enableAutoAdjustMainLvColWidth { get; set; } + public bool enableUpdateSubOnlyRemarksExist { get; set; } + public double mainWidth { get; set; } + public double mainHeight { get; set; } + public double mainGirdHeight1 { get; set; } + public double mainGirdHeight2 { get; set; } + public bool colorModeDark { get; set; } + public bool followSystemTheme { get; set; } + public string? colorPrimaryName { get; set; } + public string currentLanguage { get; set; } + public string currentFontFamily { get; set; } + public int currentFontSize { get; set; } + public bool enableDragDropSort { get; set; } + public bool doubleClick2Activate { get; set; } + public bool autoHideStartup { get; set; } + public string mainMsgFilter { get; set; } + public List mainColumnItem { get; set; } + } + + [Serializable] + public class ConstItem + { + public string defIEProxyExceptions { get; set; } + public string subConvertUrl { get; set; } = string.Empty; + } + + [Serializable] + public class KeyEventItem + { + public EGlobalHotkey eGlobalHotkey { get; set; } + + public bool Alt { get; set; } + + public bool Control { get; set; } + + public bool Shift { get; set; } + + public Key? KeyCode { get; set; } + } + + [Serializable] + public class CoreTypeItem + { + public EConfigType configType { get; set; } + + public ECoreType coreType { get; set; } + } + + [Serializable] + public class TunModeItem + { + public bool enableTun { get; set; } + public bool strictRoute { get; set; } = true; + public string stack { get; set; } + public int mtu { get; set; } + public bool enableExInbound { get; set; } + public bool enableIPv6Address { get; set; } = true; + } + + [Serializable] + public class SpeedTestItem + { + public int speedTestTimeout { get; set; } + public string speedTestUrl { get; set; } + public string speedPingTestUrl { get; set; } + } + + [Serializable] + public class RoutingBasicItem + { + public string domainStrategy { get; set; } + public string domainStrategy4Singbox { get; set; } + public string domainMatcher { get; set; } + public string routingIndexId { get; set; } + public bool enableRoutingAdvanced { get; set; } + } + + [Serializable] + public class ColumnItem + { + public string Name { get; set; } + public int Width { get; set; } + public int Index { get; set; } + } + + [Serializable] + public class Mux4SboxItem + { + public string protocol { get; set; } + public int max_connections { get; set; } + } + + [Serializable] + public class HysteriaItem + { + public int up_mbps { get; set; } + public int down_mbps { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ConfigOld.cs b/v2rayN/v2rayN/Models/ConfigOld.cs new file mode 100755 index 0000000..9f27b61 --- /dev/null +++ b/v2rayN/v2rayN/Models/ConfigOld.cs @@ -0,0 +1,440 @@ +namespace v2rayN.Models +{ + [Serializable] + public class ConfigOld + { + #region property + + /// + /// 允许日志 + /// + public bool logEnabled + { + get; set; + } + + /// + /// 日志等级 + /// + public string loglevel + { + get; set; + } + + public string indexId + { + get; set; + } + + /// + /// 允许Mux多路复用 + /// + public bool muxEnabled + { + get; set; + } + + /// + /// + /// + public ESysProxyType sysProxyType + { + get; set; + } + + /// + /// 启用实时网速和流量统计 + /// + public bool enableStatistics + { + get; set; + } + + /// + /// 去重时优先保留较旧(顶部)节点 + /// + public bool keepOlderDedupl + { + get; set; + } + + /// + /// 视图刷新率 + /// + public int statisticsFreshRate + { + get; set; + } + + /// + /// 自定义远程DNS + /// + public string remoteDNS + { + get; set; + } + + /// + /// Outbound Freedom domainStrategy + /// + public string domainStrategy4Freedom + { + get; set; + } + + /// + /// 是否允许不安全连接 + /// + public bool defAllowInsecure + { + get; set; + } + + /// + /// 域名解析策略 + /// + public string domainStrategy + { + get; set; + } + + public string domainMatcher + { + get; set; + } + + public int routingIndex + { + get; set; + } + + public bool enableRoutingAdvanced + { + get; set; + } + + public bool ignoreGeoUpdateCore + { + get; set; + } + + /// + /// systemProxyExceptions + /// + public string systemProxyExceptions + { + get; set; + } + + public string systemProxyAdvancedProtocol { get; set; } + + public int autoUpdateInterval { get; set; } = 0; + + public int autoUpdateSubInterval { get; set; } = 0; + + public bool checkPreReleaseUpdate { get; set; } = false; + + public bool enableSecurityProtocolTls13 + { + get; set; + } + + public int trayMenuServersLimit { get; set; } + + #endregion property + + #region other entities + + /// + /// 本地监听 + /// + public List inbound + { + get; set; + } + + /// + /// vmess服务器信息 + /// + public List vmess + { + get; set; + } + + /// + /// KcpItem + /// + public KcpItem kcpItem + { + get; set; + } + + /// + /// 订阅 + /// + public List subItem + { + get; set; + } + + /// + /// UI + /// + public UIItem uiItem + { + get; set; + } + + public List routings + { + get; set; + } + + public ConstItem constItem + { + get; set; + } + + public List globalHotkeys + { + get; set; + } + + public List coreTypeItem + { + get; set; + } + + #endregion other entities + } + + [Serializable] + public class VmessItem + { + public VmessItem() + { + indexId = string.Empty; + configType = EConfigType.VMess; + configVersion = 2; + sort = 0; + address = string.Empty; + port = 0; + id = string.Empty; + alterId = 0; + security = string.Empty; + network = string.Empty; + remarks = string.Empty; + headerType = string.Empty; + requestHost = string.Empty; + path = string.Empty; + streamSecurity = string.Empty; + allowInsecure = string.Empty; + testResult = string.Empty; + subid = string.Empty; + flow = string.Empty; + groupId = string.Empty; + } + + public string indexId + { + get; set; + } + + /// + /// config type(1=normal,2=custom) + /// + public EConfigType configType + { + get; set; + } + + /// + /// 版本(现在=2) + /// + public int configVersion + { + get; set; + } + + public int sort + { + get; set; + } + + /// + /// 远程服务器地址 + /// + public string address + { + get; set; + } + + /// + /// 远程服务器端口 + /// + public int port + { + get; set; + } + + /// + /// 远程服务器ID + /// + public string id + { + get; set; + } + + /// + /// 远程服务器额外ID + /// + public int alterId + { + get; set; + } + + /// + /// 本地安全策略 + /// + public string security + { + get; set; + } + + /// + /// tcp,kcp,ws,h2,quic + /// + public string network + { + get; set; + } + + /// + /// + /// + public string remarks + { + get; set; + } + + /// + /// 伪装类型 + /// + public string headerType + { + get; set; + } + + /// + /// 伪装的域名 + /// + public string requestHost + { + get; set; + } + + /// + /// ws h2 path + /// + public string path + { + get; set; + } + + /// + /// 传输层安全 + /// + public string streamSecurity + { + get; set; + } + + /// + /// 是否允许不安全连接(用于客户端) + /// + public string allowInsecure + { + get; set; + } + + /// + /// + /// + public string testResult + { + get; set; + } + + /// + /// SubItem id + /// + public string subid + { + get; set; + } + + /// + /// VLESS flow + /// + public string flow + { + get; set; + } + + /// + /// tls sni + /// + public string sni + { + get; set; + } + + public string groupId + { + get; set; + } = string.Empty; + + public ECoreType? coreType + { + get; set; + } + + public int preSocksPort + { + get; set; + } + + public string fingerprint { get; set; } + } + + [Serializable] + public class RoutingItemOld + { + public string remarks + { + get; set; + } + + public string url + { + get; set; + } + + public List rules + { + get; set; + } + + public bool enabled { get; set; } = true; + + public bool locked + { + get; set; + } + + public string customIcon + { + get; set; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/CoreInfo.cs b/v2rayN/v2rayN/Models/CoreInfo.cs new file mode 100755 index 0000000..00ecb3f --- /dev/null +++ b/v2rayN/v2rayN/Models/CoreInfo.cs @@ -0,0 +1,27 @@ +namespace v2rayN.Models +{ + [Serializable] + public class CoreInfo + { + public ECoreType coreType { get; set; } + + public List coreExes { get; set; } + + public string arguments { get; set; } + + public string coreUrl { get; set; } + + public string coreReleaseApiUrl { get; set; } + + public string coreDownloadUrl32 { get; set; } + + public string coreDownloadUrl64 { get; set; } + + public string coreDownloadUrlArm64 { get; set; } + + public string match { get; set; } + public string versionArg { get; set; } + + public bool redirectInfo { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/DNSItem.cs b/v2rayN/v2rayN/Models/DNSItem.cs new file mode 100755 index 0000000..315de91 --- /dev/null +++ b/v2rayN/v2rayN/Models/DNSItem.cs @@ -0,0 +1,19 @@ +using SQLite; + +namespace v2rayN.Models +{ + [Serializable] + public class DNSItem + { + [PrimaryKey] + public string id { get; set; } + + public string remarks { get; set; } + public bool enabled { get; set; } = true; + public ECoreType coreType { get; set; } + public bool useSystemHosts { get; set; } + public string? normalDNS { get; set; } + public string? tunDNS { get; set; } + public string? domainStrategy4Freedom { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/EConfigType.cs b/v2rayN/v2rayN/Models/EConfigType.cs new file mode 100755 index 0000000..81880eb --- /dev/null +++ b/v2rayN/v2rayN/Models/EConfigType.cs @@ -0,0 +1,16 @@ +namespace v2rayN.Models +{ + public enum EConfigType + { + VMess = 1, + Custom = 2, + Shadowsocks = 3, + Socks = 4, + VLESS = 5, + Trojan = 6, + Hysteria2 = 7, + Tuic = 8, + Wireguard = 9, + Http = 10 + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ECoreType.cs b/v2rayN/v2rayN/Models/ECoreType.cs new file mode 100755 index 0000000..f1556b3 --- /dev/null +++ b/v2rayN/v2rayN/Models/ECoreType.cs @@ -0,0 +1,20 @@ +namespace v2rayN.Models +{ + public enum ECoreType + { + v2fly = 1, + Xray = 2, + SagerNet = 3, + v2fly_v5 = 4, + clash = 11, + clash_meta = 12, + mihomo = 13, + hysteria = 21, + naiveproxy = 22, + tuic = 23, + sing_box = 24, + juicity = 25, + hysteria2 = 26, + v2rayN = 99 + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/EGlobalHotkey.cs b/v2rayN/v2rayN/Models/EGlobalHotkey.cs new file mode 100755 index 0000000..4618302 --- /dev/null +++ b/v2rayN/v2rayN/Models/EGlobalHotkey.cs @@ -0,0 +1,11 @@ +namespace v2rayN.Models +{ + public enum EGlobalHotkey + { + ShowForm = 0, + SystemProxyClear = 1, + SystemProxySet = 2, + SystemProxyUnchanged = 3, + SystemProxyPac = 4, + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/EInboundProtocol.cs b/v2rayN/v2rayN/Models/EInboundProtocol.cs new file mode 100755 index 0000000..79440fb --- /dev/null +++ b/v2rayN/v2rayN/Models/EInboundProtocol.cs @@ -0,0 +1,13 @@ +namespace v2rayN.Models +{ + public enum EInboundProtocol + { + socks = 0, + http, + socks2, + http2, + pac, + api, + speedtest = 21 + } +} \ No newline at end of file diff --git a/v2rayN/Mode/EMove.cs b/v2rayN/v2rayN/Models/EMove.cs old mode 100644 new mode 100755 similarity index 55% rename from v2rayN/Mode/EMove.cs rename to v2rayN/v2rayN/Models/EMove.cs index 7f67d5b..0629e62 --- a/v2rayN/Mode/EMove.cs +++ b/v2rayN/v2rayN/Models/EMove.cs @@ -1,11 +1,11 @@ - -namespace v2rayN.Mode +namespace v2rayN.Models { public enum EMove { Top = 1, Up = 2, Down = 3, - Bottom = 4 + Bottom = 4, + Position = 5 } -} +} \ No newline at end of file diff --git a/v2rayN/Mode/EServerColName.cs b/v2rayN/v2rayN/Models/EServerColName.cs old mode 100644 new mode 100755 similarity index 73% rename from v2rayN/Mode/EServerColName.cs rename to v2rayN/v2rayN/Models/EServerColName.cs index 0704e47..8bf9111 --- a/v2rayN/Mode/EServerColName.cs +++ b/v2rayN/v2rayN/Models/EServerColName.cs @@ -1,5 +1,4 @@ - -namespace v2rayN.Mode +namespace v2rayN.Models { public enum EServerColName { @@ -8,10 +7,11 @@ public enum EServerColName remarks, address, port, - security, network, + streamSecurity, subRemarks, - testResult, + delayVal, + speedVal, todayDown, todayUp, diff --git a/v2rayN/v2rayN/Models/ESpeedActionType.cs b/v2rayN/v2rayN/Models/ESpeedActionType.cs new file mode 100755 index 0000000..dee2970 --- /dev/null +++ b/v2rayN/v2rayN/Models/ESpeedActionType.cs @@ -0,0 +1,10 @@ +namespace v2rayN.Models +{ + public enum ESpeedActionType + { + Tcping, + Realping, + Speedtest, + Mixedtest + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ESysProxyType.cs b/v2rayN/v2rayN/Models/ESysProxyType.cs new file mode 100755 index 0000000..9c5bb42 --- /dev/null +++ b/v2rayN/v2rayN/Models/ESysProxyType.cs @@ -0,0 +1,10 @@ +namespace v2rayN.Models +{ + public enum ESysProxyType + { + ForcedClear = 0, + ForcedChange = 1, + Unchanged = 2, + Pac = 3 + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ETransport.cs b/v2rayN/v2rayN/Models/ETransport.cs new file mode 100755 index 0000000..15eac5d --- /dev/null +++ b/v2rayN/v2rayN/Models/ETransport.cs @@ -0,0 +1,14 @@ +namespace v2rayN.Models +{ + public enum ETransport + { + tcp, + kcp, + ws, + httpupgrade, + h2, + http, + quic, + grpc + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/EViewAction.cs b/v2rayN/v2rayN/Models/EViewAction.cs new file mode 100755 index 0000000..1abdbde --- /dev/null +++ b/v2rayN/v2rayN/Models/EViewAction.cs @@ -0,0 +1,8 @@ +namespace v2rayN.Models +{ + public enum EViewAction + { + AdjustMainLvColWidth, + ProfilesFocus + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/GitHubRelease.cs b/v2rayN/v2rayN/Models/GitHubRelease.cs new file mode 100755 index 0000000..84520d1 --- /dev/null +++ b/v2rayN/v2rayN/Models/GitHubRelease.cs @@ -0,0 +1,68 @@ +using System.Text.Json.Serialization; + +namespace v2rayN.Models +{ + public class GitHubReleaseAsset + { + [JsonPropertyName("url")] public string Url { get; set; } + + [JsonPropertyName("id")] public int Id { get; set; } + + [JsonPropertyName("node_id")] public string NodeId { get; set; } + + [JsonPropertyName("name")] public string Name { get; set; } + + [JsonPropertyName("label")] public object Label { get; set; } + + [JsonPropertyName("content_type")] public string ContentType { get; set; } + + [JsonPropertyName("state")] public string State { get; set; } + + [JsonPropertyName("size")] public int Size { get; set; } + + [JsonPropertyName("download_count")] public int DownloadCount { get; set; } + + [JsonPropertyName("created_at")] public DateTime CreatedAt { get; set; } + + [JsonPropertyName("updated_at")] public DateTime UpdatedAt { get; set; } + + [JsonPropertyName("browser_download_url")] public string BrowserDownloadUrl { get; set; } + } + + public class GitHubRelease + { + [JsonPropertyName("url")] public string Url { get; set; } + + [JsonPropertyName("assets_url")] public string AssetsUrl { get; set; } + + [JsonPropertyName("upload_url")] public string UploadUrl { get; set; } + + [JsonPropertyName("html_url")] public string HtmlUrl { get; set; } + + [JsonPropertyName("id")] public int Id { get; set; } + + [JsonPropertyName("node_id")] public string NodeId { get; set; } + + [JsonPropertyName("tag_name")] public string TagName { get; set; } + + [JsonPropertyName("target_commitish")] public string TargetCommitish { get; set; } + + [JsonPropertyName("name")] public string Name { get; set; } + + [JsonPropertyName("draft")] public bool Draft { get; set; } + + [JsonPropertyName("prerelease")] public bool Prerelease { get; set; } + + [JsonPropertyName("created_at")] public DateTime CreatedAt { get; set; } + + [JsonPropertyName("published_at")] public DateTime PublishedAt { get; set; } + + [JsonPropertyName("assets")] public List Assets { get; set; } + + [JsonPropertyName("tarball_url")] public string TarballUrl { get; set; } + + [JsonPropertyName("zipball_url")] public string ZipballUrl { get; set; } + + [JsonPropertyName("body")] public string Body { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ProfileExItem.cs b/v2rayN/v2rayN/Models/ProfileExItem.cs new file mode 100755 index 0000000..b572bd5 --- /dev/null +++ b/v2rayN/v2rayN/Models/ProfileExItem.cs @@ -0,0 +1,15 @@ +using SQLite; + +namespace v2rayN.Models +{ + [Serializable] + public class ProfileExItem + { + [PrimaryKey] + public string indexId { get; set; } + + public int delay { get; set; } + public decimal speed { get; set; } + public int sort { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ProfileItem.cs b/v2rayN/v2rayN/Models/ProfileItem.cs new file mode 100755 index 0000000..9118abf --- /dev/null +++ b/v2rayN/v2rayN/Models/ProfileItem.cs @@ -0,0 +1,190 @@ +using SQLite; + +namespace v2rayN.Models +{ + [Serializable] + public class ProfileItem + { + public ProfileItem() + { + indexId = string.Empty; + configType = EConfigType.VMess; + configVersion = 2; + address = string.Empty; + port = 0; + id = string.Empty; + alterId = 0; + security = string.Empty; + network = string.Empty; + remarks = string.Empty; + headerType = string.Empty; + requestHost = string.Empty; + path = string.Empty; + streamSecurity = string.Empty; + allowInsecure = string.Empty; + subid = string.Empty; + flow = string.Empty; + } + + #region function + + public string GetSummary() + { + string summary = string.Format("[{0}] ", (configType).ToString()); + string[] arrAddr = address.Split('.'); + string addr; + if (arrAddr.Length > 2) + { + addr = $"{arrAddr[0]}***{arrAddr[arrAddr.Length - 1]}"; + } + else if (arrAddr.Length > 1) + { + addr = $"***{arrAddr[arrAddr.Length - 1]}"; + } + else + { + addr = address; + } + switch (configType) + { + case EConfigType.Custom: + summary += string.Format("{0}", remarks); + break; + + default: + summary += string.Format("{0}({1}:{2})", remarks, addr, port); + break; + } + return summary; + } + + public List GetAlpn() + { + if (Utils.IsNullOrEmpty(alpn)) + { + return null; + } + else + { + return Utils.String2List(alpn); + } + } + + public string GetNetwork() + { + if (Utils.IsNullOrEmpty(network) || !Global.Networks.Contains(network)) + { + return Global.DefaultNetwork; + } + return network.TrimEx(); + } + + #endregion function + + [PrimaryKey] + public string indexId { get; set; } + + /// + /// config type(1=normal,2=custom) + /// + public EConfigType configType { get; set; } + + /// + /// 版本(现在=2) + /// + public int configVersion { get; set; } + + /// + /// 远程服务器地址 + /// + public string address { get; set; } + + /// + /// 远程服务器端口 + /// + public int port { get; set; } + + /// + /// 远程服务器ID + /// + public string id { get; set; } + + /// + /// 远程服务器额外ID + /// + public int alterId { get; set; } + + /// + /// 本地安全策略 + /// + public string security { get; set; } + + /// + /// tcp,kcp,ws,h2,quic + /// + public string network { get; set; } + + /// + /// + /// + public string remarks { get; set; } + + /// + /// 伪装类型 + /// + public string headerType { get; set; } + + /// + /// 伪装的域名 + /// + public string requestHost { get; set; } + + /// + /// ws h2 path + /// + public string path { get; set; } + + /// + /// 传输层安全 + /// + public string streamSecurity { get; set; } + + /// + /// 是否允许不安全连接(用于客户端) + /// + public string allowInsecure { get; set; } + + /// + /// SubItem id + /// + public string subid { get; set; } + + public bool isSub { get; set; } = true; + + /// + /// VLESS flow + /// + public string flow { get; set; } + + /// + /// tls sni + /// + public string sni { get; set; } + + /// + /// tls alpn + /// + public string alpn { get; set; } = string.Empty; + + public ECoreType? coreType { get; set; } + + public int preSocksPort { get; set; } + + public string fingerprint { get; set; } + + public bool displayLog { get; set; } = true; + public string publicKey { get; set; } + public string shortId { get; set; } + public string spiderX { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ProfileItemModel.cs b/v2rayN/v2rayN/Models/ProfileItemModel.cs new file mode 100755 index 0000000..8208d57 --- /dev/null +++ b/v2rayN/v2rayN/Models/ProfileItemModel.cs @@ -0,0 +1,18 @@ +namespace v2rayN.Models +{ + [Serializable] + public class ProfileItemModel : ProfileItem + { + public bool isActive { get; set; } + public string subRemarks { get; set; } + public int delay { get; set; } + public decimal speed { get; set; } + public int sort { get; set; } + public string delayVal { get; set; } + public string speedVal { get; set; } + public string todayUp { get; set; } + public string todayDown { get; set; } + public string totalUp { get; set; } + public string totalDown { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/RoutingItem.cs b/v2rayN/v2rayN/Models/RoutingItem.cs new file mode 100755 index 0000000..de5cfb2 --- /dev/null +++ b/v2rayN/v2rayN/Models/RoutingItem.cs @@ -0,0 +1,23 @@ +using SQLite; + +namespace v2rayN.Models +{ + [Serializable] + public class RoutingItem + { + [PrimaryKey] + public string id { get; set; } + + public string remarks { get; set; } + public string url { get; set; } + public string ruleSet { get; set; } + public int ruleNum { get; set; } + public bool enabled { get; set; } = true; + public bool locked { get; set; } + public string customIcon { get; set; } + public string customRulesetPath4Singbox { get; set; } + public string domainStrategy { get; set; } + public string domainStrategy4Singbox { get; set; } + public int sort { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/RoutingItemModel.cs b/v2rayN/v2rayN/Models/RoutingItemModel.cs new file mode 100755 index 0000000..3e2fd4f --- /dev/null +++ b/v2rayN/v2rayN/Models/RoutingItemModel.cs @@ -0,0 +1,8 @@ +namespace v2rayN.Models +{ + [Serializable] + public class RoutingItemModel : RoutingItem + { + public bool isActive { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/RulesItem.cs b/v2rayN/v2rayN/Models/RulesItem.cs new file mode 100755 index 0000000..cf6c367 --- /dev/null +++ b/v2rayN/v2rayN/Models/RulesItem.cs @@ -0,0 +1,25 @@ +namespace v2rayN.Models +{ + [Serializable] + public class RulesItem + { + public string id { get; set; } + public string type { get; set; } + + public string port { get; set; } + + public List inboundTag { get; set; } + + public string outboundTag { get; set; } + + public List ip { get; set; } + + public List domain { get; set; } + + public List protocol { get; set; } + + public List process { get; set; } + + public bool enabled { get; set; } = true; + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/RulesItemModel.cs b/v2rayN/v2rayN/Models/RulesItemModel.cs new file mode 100755 index 0000000..fbe7c57 --- /dev/null +++ b/v2rayN/v2rayN/Models/RulesItemModel.cs @@ -0,0 +1,14 @@ +namespace v2rayN.Models +{ + [Serializable] + public class RulesItemModel : RulesItem + { + public string inboundTags { get; set; } + + public string ips { get; set; } + + public string domains { get; set; } + + public string protocols { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ServerSpeedItem.cs b/v2rayN/v2rayN/Models/ServerSpeedItem.cs new file mode 100755 index 0000000..274fa49 --- /dev/null +++ b/v2rayN/v2rayN/Models/ServerSpeedItem.cs @@ -0,0 +1,40 @@ +namespace v2rayN.Models +{ + [Serializable] + internal class ServerSpeedItem : ServerStatItem + { + public long proxyUp + { + get; set; + } + + public long proxyDown + { + get; set; + } + + public long directUp + { + get; set; + } + + public long directDown + { + get; set; + } + } + + [Serializable] + public class TrafficItem + { + public ulong up + { + get; set; + } + + public ulong down + { + get; set; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ServerStatItem.cs b/v2rayN/v2rayN/Models/ServerStatItem.cs new file mode 100755 index 0000000..a24b78b --- /dev/null +++ b/v2rayN/v2rayN/Models/ServerStatItem.cs @@ -0,0 +1,39 @@ +using SQLite; + +namespace v2rayN.Models +{ + [Serializable] + public class ServerStatItem + { + [PrimaryKey] + public string indexId + { + get; set; + } + + public long totalUp + { + get; set; + } + + public long totalDown + { + get; set; + } + + public long todayUp + { + get; set; + } + + public long todayDown + { + get; set; + } + + public long dateNow + { + get; set; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/ServerTestItem.cs b/v2rayN/v2rayN/Models/ServerTestItem.cs new file mode 100755 index 0000000..3955da7 --- /dev/null +++ b/v2rayN/v2rayN/Models/ServerTestItem.cs @@ -0,0 +1,13 @@ +namespace v2rayN.Models +{ + [Serializable] + internal class ServerTestItem + { + public string indexId { get; set; } + public string address { get; set; } + public int port { get; set; } + public EConfigType configType { get; set; } + public bool allowTest { get; set; } + public int delay { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/SingboxConfig.cs b/v2rayN/v2rayN/Models/SingboxConfig.cs new file mode 100755 index 0000000..45012e6 --- /dev/null +++ b/v2rayN/v2rayN/Models/SingboxConfig.cs @@ -0,0 +1,246 @@ +namespace v2rayN.Models +{ + public class SingboxConfig + { + public Log4Sbox log { get; set; } + public Dns4Sbox? dns { get; set; } + public List inbounds { get; set; } + public List outbounds { get; set; } + public Route4Sbox route { get; set; } + public Experimental4Sbox? experimental { get; set; } + } + + public class Log4Sbox + { + public bool? disabled { get; set; } + public string level { get; set; } + public string output { get; set; } + public bool? timestamp { get; set; } + } + + public class Dns4Sbox + { + public List servers { get; set; } + public List rules { get; set; } + public string? final { get; set; } + public string? strategy { get; set; } + public bool? disable_cache { get; set; } + public bool? disable_expire { get; set; } + public bool? independent_cache { get; set; } + public bool? reverse_mapping { get; set; } + public Fakeip4Sbox? fakeip { get; set; } + } + + public class Route4Sbox + { + public bool? auto_detect_interface { get; set; } + public List rules { get; set; } + public List? rule_set { get; set; } + } + + [Serializable] + public class Rule4Sbox + { + public string? outbound { get; set; } + public string? server { get; set; } + public bool? disable_cache { get; set; } + public List? inbound { get; set; } + public List? protocol { get; set; } + public string? type { get; set; } + public string? mode { get; set; } + public string? network { get; set; } + public bool? ip_is_private { get; set; } + public List? port { get; set; } + public List? port_range { get; set; } + public List? geosite { get; set; } + public List? domain { get; set; } + public List? domain_suffix { get; set; } + public List? domain_keyword { get; set; } + public List? domain_regex { get; set; } + public List? geoip { get; set; } + public List? ip_cidr { get; set; } + public List? source_ip_cidr { get; set; } + public List? process_name { get; set; } + public List? rule_set { get; set; } + } + + [Serializable] + public class Inbound4Sbox + { + public string type { get; set; } + public string tag { get; set; } + public string listen { get; set; } + public int? listen_port { get; set; } + public string? domain_strategy { get; set; } + public string interface_name { get; set; } + public string inet4_address { get; set; } + public string? inet6_address { get; set; } + public int? mtu { get; set; } + public bool? auto_route { get; set; } + public bool? strict_route { get; set; } + public bool? endpoint_independent_nat { get; set; } + public string? stack { get; set; } + public bool? sniff { get; set; } + public bool? sniff_override_destination { get; set; } + public List users { get; set; } + } + + public class User4Sbox + { + public string username { get; set; } + public string password { get; set; } + } + + public class Outbound4Sbox + { + public string type { get; set; } + public string tag { get; set; } + public string? server { get; set; } + public int? server_port { get; set; } + public string uuid { get; set; } + public string security { get; set; } + public int? alter_id { get; set; } + public string flow { get; set; } + public int? up_mbps { get; set; } + public int? down_mbps { get; set; } + public string auth_str { get; set; } + public int? recv_window_conn { get; set; } + public int? recv_window { get; set; } + public bool? disable_mtu_discovery { get; set; } + public string? detour { get; set; } + public string method { get; set; } + public string username { get; set; } + public string password { get; set; } + public string congestion_control { get; set; } + public string? version { get; set; } + public string? network { get; set; } + public string? packet_encoding { get; set; } + public string[]? local_address { get; set; } + public string? private_key { get; set; } + public string? peer_public_key { get; set; } + public int[]? reserved { get; set; } + public int? mtu { get; set; } + public string? plugin { get; set; } + public string? plugin_opts { get; set; } + public Tls4Sbox? tls { get; set; } + public Multiplex4Sbox? multiplex { get; set; } + public Transport4Sbox? transport { get; set; } + public HyObfs4Sbox? obfs { get; set; } + } + + public class Tls4Sbox + { + public bool enabled { get; set; } + public string server_name { get; set; } + public bool? insecure { get; set; } + public List alpn { get; set; } + public Utls4Sbox utls { get; set; } + public Reality4Sbox reality { get; set; } + } + + public class Multiplex4Sbox + { + public bool enabled { get; set; } + public string protocol { get; set; } + public int max_connections { get; set; } + } + + public class Utls4Sbox + { + public bool enabled { get; set; } + public string fingerprint { get; set; } + } + + public class Reality4Sbox + { + public bool enabled { get; set; } + public string public_key { get; set; } + public string short_id { get; set; } + } + + public class Transport4Sbox + { + public string? type { get; set; } + public object? host { get; set; } + public string? path { get; set; } + public Headers4Sbox? headers { get; set; } + + public string? service_name { get; set; } + public string? idle_timeout { get; set; } + public string? ping_timeout { get; set; } + public bool? permit_without_stream { get; set; } + } + + public class Headers4Sbox + { + public string? Host { get; set; } + } + + public class HyObfs4Sbox + { + public string? type { get; set; } + public string? password { get; set; } + } + + public class Server4Sbox + { + public string tag { get; set; } + public string address { get; set; } + public string address_resolver { get; set; } + public string strategy { get; set; } + public string? detour { get; set; } + } + + public class Experimental4Sbox + { + public CacheFile4Sbox? cache_file { get; set; } + public V2ray_Api4Sbox? v2ray_api { get; set; } + public Clash_Api4Sbox? clash_api { get; set; } + } + + public class V2ray_Api4Sbox + { + public string listen { get; set; } + public Stats4Sbox stats { get; set; } + } + + public class Clash_Api4Sbox + { + public string? external_controller { get; set; } + public bool? store_selected { get; set; } + } + + public class Stats4Sbox + { + public bool enabled { get; set; } + public List? inbounds { get; set; } + public List? outbounds { get; set; } + public List? users { get; set; } + } + + public class Fakeip4Sbox + { + public bool enabled { get; set; } + public string inet4_range { get; set; } + public string inet6_range { get; set; } + } + + public class CacheFile4Sbox + { + public bool enabled { get; set; } + public string? path { get; set; } + public string? cache_id { get; set; } + public bool? store_fakeip { get; set; } + } + + public class Ruleset4Sbox + { + public string? tag { get; set; } + public string? type { get; set; } + public string? format { get; set; } + public string? path { get; set; } + public string? url { get; set; } + public string? download_detour { get; set; } + public string? update_interval { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/SsSIP008.cs b/v2rayN/v2rayN/Models/SsSIP008.cs new file mode 100755 index 0000000..3600a43 --- /dev/null +++ b/v2rayN/v2rayN/Models/SsSIP008.cs @@ -0,0 +1,18 @@ +namespace v2rayN.Models +{ + public class SsSIP008 + { + public List servers { get; set; } + } + + [Serializable] + public class SsServer + { + public string remarks { get; set; } + public string server { get; set; } + public string server_port { get; set; } + public string method { get; set; } + public string password { get; set; } + public string plugin { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/SubItem.cs b/v2rayN/v2rayN/Models/SubItem.cs new file mode 100755 index 0000000..1f36bb9 --- /dev/null +++ b/v2rayN/v2rayN/Models/SubItem.cs @@ -0,0 +1,35 @@ +using SQLite; + +namespace v2rayN.Models +{ + [Serializable] + public class SubItem + { + [PrimaryKey] + public string id { get; set; } + + public string remarks { get; set; } + + public string url { get; set; } + + public string moreUrl { get; set; } + + public bool enabled { get; set; } = true; + + public string userAgent { get; set; } = string.Empty; + + public int sort { get; set; } + + public string? filter { get; set; } + + public int autoUpdateInterval { get; set; } + + public long updateTime { get; set; } + + public string? convertTarget { get; set; } + + public string? prevProfile { get; set; } + + public string? nextProfile { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/Mode/SysproxyConfig.cs b/v2rayN/v2rayN/Models/SysProxyConfig.cs old mode 100644 new mode 100755 similarity index 79% rename from v2rayN/Mode/SysproxyConfig.cs rename to v2rayN/v2rayN/Models/SysProxyConfig.cs index 8b0d009..95c2221 --- a/v2rayN/Mode/SysproxyConfig.cs +++ b/v2rayN/v2rayN/Models/SysProxyConfig.cs @@ -1,7 +1,6 @@ - -namespace v2rayN.Mode +namespace v2rayN.Models { - class SysproxyConfig + internal class SysProxyConfig { public bool UserSettingsRecorded; public string Flags; @@ -9,7 +8,7 @@ class SysproxyConfig public string BypassList; public string PacUrl; - public SysproxyConfig() + public SysProxyConfig() { UserSettingsRecorded = false; Flags = "1"; @@ -18,4 +17,4 @@ public SysproxyConfig() PacUrl = ""; } } -} +} \ No newline at end of file diff --git a/v2rayN/Mode/V2rayConfig.cs b/v2rayN/v2rayN/Models/V2rayConfig.cs old mode 100644 new mode 100755 similarity index 52% rename from v2rayN/Mode/V2rayConfig.cs rename to v2rayN/v2rayN/Models/V2rayConfig.cs index bc85c18..459f3b8 --- a/v2rayN/Mode/V2rayConfig.cs +++ b/v2rayN/v2rayN/Models/V2rayConfig.cs @@ -1,125 +1,141 @@ -using System.Collections.Generic; +using System.Text.Json.Serialization; -namespace v2rayN.Mode +namespace v2rayN.Models { /// - /// v2ray配置文件实体类 - /// 例子SampleConfig.txt + /// v2ray配置文件实体类 例子SampleConfig.txt /// public class V2rayConfig { + /// + /// Properties that do not belong to Ray + /// + public string? remarks { get; set; } + /// /// 日志配置 /// - public Log log { get; set; } + public Log4Ray log { get; set; } + /// /// 传入连接配置 /// - public List inbounds { get; set; } + public List inbounds { get; set; } + /// /// 传出连接配置 /// - public List outbounds { get; set; } + public List outbounds { get; set; } /// /// 统计需要, 空对象 /// - public Stats stats { get; set; } - + public Stats4Ray stats { get; set; } + /// - public API api { get; set; } + public API4Ray api { get; set; } /// - public Policy policy; + public Policy4Ray policy { get; set; } /// /// DNS 配置 /// - public Dns dns { get; set; } + public object dns { get; set; } + /// /// 路由配置 /// - public Routing routing { get; set; } + public Routing4Ray routing { get; set; } } - public class Stats { }; + public class Stats4Ray + { }; - public class API + public class API4Ray { public string tag { get; set; } public List services { get; set; } } - public class Policy + public class Policy4Ray { - public SystemPolicy system; + public SystemPolicy4Ray system { get; set; } } - public class SystemPolicy + public class SystemPolicy4Ray { - public bool statsInboundUplink; - public bool statsInboundDownlink; + public bool statsOutboundUplink { get; set; } + public bool statsOutboundDownlink { get; set; } } - public class Log + public class Log4Ray { /// - /// + /// /// public string access { get; set; } + /// - /// + /// /// public string error { get; set; } + /// - /// + /// /// public string loglevel { get; set; } } - public class Inbounds + public class Inbounds4Ray { public string tag { get; set; } + /// - /// + /// /// public int port { get; set; } + /// - /// + /// /// public string listen { get; set; } + /// - /// + /// /// public string protocol { get; set; } + /// - /// + /// /// - public Sniffing sniffing { get; set; } + public Sniffing4Ray sniffing { get; set; } + /// - /// + /// /// - public Inboundsettings settings { get; set; } + public Inboundsettings4Ray settings { get; set; } /// - /// + /// /// - public StreamSettings streamSettings { get; set; } - + public StreamSettings4Ray streamSettings { get; set; } } - public class Inboundsettings + public class Inboundsettings4Ray { /// - /// + /// /// public string auth { get; set; } + /// - /// + /// /// public bool udp { get; set; } + /// - /// + /// /// public string ip { get; set; } @@ -129,34 +145,39 @@ public class Inboundsettings public string address { get; set; } /// - /// + /// /// - public List clients { get; set; } + public List clients { get; set; } - /// /// VLESS /// public string decryption { get; set; } - + + public bool allowTransparent { get; set; } + + public List accounts { get; set; } } - public class UsersItem + public class UsersItem4Ray { /// - /// + /// /// public string id { get; set; } + /// - /// + /// /// public int alterId { get; set; } + /// - /// + /// /// public string email { get; set; } + /// - /// + /// /// public string security { get; set; } @@ -168,370 +189,489 @@ public class UsersItem /// /// VLESS /// - public string flow { get; set; } + public string? flow { get; set; } } - public class Sniffing + + public class Sniffing4Ray { - /// - /// - /// public bool enabled { get; set; } - /// - /// - /// - public List destOverride { get; set; } + public List? destOverride { get; set; } + public bool routeOnly { get; set; } } - public class Outbounds + public class Outbounds4Ray { /// /// 默认值agentout /// public string tag { get; set; } + /// - /// + /// /// public string protocol { get; set; } + /// - /// + /// /// - public Outboundsettings settings { get; set; } + public Outboundsettings4Ray settings { get; set; } + /// - /// + /// /// - public StreamSettings streamSettings { get; set; } + public StreamSettings4Ray streamSettings { get; set; } + /// - /// + /// /// - public Mux mux { get; set; } + public Mux4Ray mux { get; set; } } - public class Outboundsettings + public class Outboundsettings4Ray { /// - /// + /// /// - public List vnext { get; set; } + public List? vnext { get; set; } + /// - /// + /// /// - public List servers { get; set; } + public List servers { get; set; } /// - /// + /// /// - public Response response { get; set; } + public Response4Ray response { get; set; } + + /// + /// + /// + public string domainStrategy { get; set; } + + /// + /// + /// + public int? userLevel { get; set; } + + public FragmentItem4Ray? fragment { get; set; } } - public class VnextItem + public class VnextItem4Ray { /// - /// + /// /// public string address { get; set; } + /// - /// + /// /// public int port { get; set; } + /// - /// + /// /// - public List users { get; set; } + public List users { get; set; } } - public class ServersItem + + public class ServersItem4Ray { /// - /// + /// /// public string email { get; set; } + /// - /// + /// /// public string address { get; set; } + /// - /// + /// /// - public string method { get; set; } + public string? method { get; set; } + /// - /// + /// /// - public bool ota { get; set; } + public bool? ota { get; set; } + /// - /// + /// /// - public string password { get; set; } + public string? password { get; set; } + /// - /// + /// /// public int port { get; set; } + /// - /// + /// /// - public int level { get; set; } + public int? level { get; set; } /// - /// + /// trojan /// - public List users { get; set; } + public string flow { get; set; } + + /// + /// + /// + public List users { get; set; } } - public class SocksUsersItem + public class SocksUsersItem4Ray { /// - /// + /// /// public string user { get; set; } + /// - /// + /// /// public string pass { get; set; } + /// - /// + /// /// - public int level { get; set; } + public int? level { get; set; } } - - public class Mux + public class Mux4Ray { /// - /// + /// /// public bool enabled { get; set; } /// - /// + /// /// public int concurrency { get; set; } } - public class Response + public class Response4Ray { /// - /// + /// /// public string type { get; set; } } - public class Dns + public class Dns4Ray { /// - /// + /// /// public List servers { get; set; } } - public class RulesItem + public class Routing4Ray { /// - /// - /// - public string type { get; set; } - /// - /// - /// - public string port { get; set; } - - public List inboundTag { get; set; } - /// - /// + /// /// - public string outboundTag { get; set; } + public string domainStrategy { get; set; } /// - /// + /// /// - public List ip { get; set; } + public string domainMatcher { get; set; } /// - /// + /// /// - public List domain { get; set; } + public List rules { get; set; } } - public class Routing + [Serializable] + public class RulesItem4Ray { - /// - /// - /// - public string domainStrategy { get; set; } - /// - /// - /// - public List rules { get; set; } + public string? type { get; set; } + + public string? port { get; set; } + + public List? inboundTag { get; set; } + + public string? outboundTag { get; set; } + + public List? ip { get; set; } + + public List? domain { get; set; } + + public List? protocol { get; set; } } - public class StreamSettings + public class StreamSettings4Ray { /// - /// + /// /// public string network { get; set; } + /// - /// + /// /// public string security { get; set; } /// - /// + /// /// - public TlsSettings tlsSettings { get; set; } + public TlsSettings4Ray tlsSettings { get; set; } /// /// Tcp传输额外设置 /// - public TcpSettings tcpSettings { get; set; } + public TcpSettings4Ray tcpSettings { get; set; } + /// /// Kcp传输额外设置 /// - public KcpSettings kcpSettings { get; set; } + public KcpSettings4Ray kcpSettings { get; set; } + /// /// ws传输额外设置 /// - public WsSettings wsSettings { get; set; } + public WsSettings4Ray wsSettings { get; set; } + + /// + /// + /// + public HttpupgradeSettings4Ray? httpupgradeSettings { get; set; } + /// /// h2传输额外设置 /// - public HttpSettings httpSettings { get; set; } + public HttpSettings4Ray httpSettings { get; set; } /// /// QUIC /// - public QuicSettings quicSettings { get; set; } + public QuicSettings4Ray quicSettings { get; set; } /// - /// VLESS xtls + /// VLESS only /// - public TlsSettings xtlsSettings { get; set; } + public TlsSettings4Ray realitySettings { get; set; } + /// + /// grpc + /// + public GrpcSettings4Ray grpcSettings { get; set; } + + /// + /// sockopt + /// + public Sockopt4Ray? sockopt { get; set; } } - public class TlsSettings + public class TlsSettings4Ray { /// /// 是否允许不安全连接(用于客户端) /// - public bool allowInsecure { get; set; } + public bool? allowInsecure { get; set; } /// - /// + /// /// - public string serverName { get; set; } + public string? serverName { get; set; } + + /// + /// + /// + public List? alpn { get; set; } + + public string? fingerprint { get; set; } + + public bool? show { get; set; } = false; + public string? publicKey { get; set; } + public string? shortId { get; set; } + public string? spiderX { get; set; } } - public class TcpSettings - { + public class TcpSettings4Ray + { /// /// 数据包头部伪装设置 /// - public Header header { get; set; } + public Header4Ray header { get; set; } } - public class Header + public class Header4Ray { /// /// 伪装 /// public string type { get; set; } + /// /// 结构复杂,直接存起来 /// public object request { get; set; } + /// /// 结构复杂,直接存起来 /// public object response { get; set; } } - public class KcpSettings + public class KcpSettings4Ray { /// - /// + /// /// public int mtu { get; set; } + /// - /// + /// /// public int tti { get; set; } + /// - /// + /// /// public int uplinkCapacity { get; set; } + /// - /// + /// /// public int downlinkCapacity { get; set; } + /// - /// + /// /// public bool congestion { get; set; } + /// - /// + /// /// public int readBufferSize { get; set; } + /// - /// + /// /// public int writeBufferSize { get; set; } + /// - /// + /// /// - public Header header { get; set; } + public Header4Ray header { get; set; } + /// - /// + /// /// public string seed { get; set; } } - public class WsSettings - { + public class WsSettings4Ray + { /// - /// + /// /// public string path { get; set; } /// - /// + /// /// - public Headers headers { get; set; } + public Headers4Ray headers { get; set; } } - public class Headers + + public class Headers4Ray { /// - /// + /// /// public string Host { get; set; } + + /// + /// 用户代理 + /// + [JsonPropertyName("User-Agent")] + public string UserAgent { get; set; } } - public class HttpSettings + public class HttpupgradeSettings4Ray { /// - /// + /// + /// + public string? path { get; set; } + + /// + /// + /// + public string? host { get; set; } + } + + public class HttpSettings4Ray + { + /// + /// /// public string path { get; set; } /// - /// + /// /// public List host { get; set; } - } - public class QuicSettings + public class QuicSettings4Ray { /// - /// + /// /// public string security { get; set; } + /// - /// + /// /// public string key { get; set; } /// - /// + /// /// - public Header header { get; set; } + public Header4Ray header { get; set; } } -} + public class GrpcSettings4Ray + { + public string? authority { get; set; } + public string? serviceName { get; set; } + public bool multiMode { get; set; } + public int idle_timeout { get; set; } + public int health_check_timeout { get; set; } + public bool permit_without_stream { get; set; } + public int initial_windows_size { get; set; } + } + + public class AccountsItem4Ray + { + /// + /// + /// + public string user { get; set; } + + /// + /// + /// + public string pass { get; set; } + } + + public class Sockopt4Ray + { + public string? dialerProxy { get; set; } + } + + public class FragmentItem4Ray + { + public string? packets { get; set; } + public string? length { get; set; } + public string? interval { get; set; } + } +} \ No newline at end of file diff --git a/v2rayN/Mode/V2rayTcpRequest.cs b/v2rayN/v2rayN/Models/V2rayTcpRequest.cs old mode 100644 new mode 100755 similarity index 80% rename from v2rayN/Mode/V2rayTcpRequest.cs rename to v2rayN/v2rayN/Models/V2rayTcpRequest.cs index 4a4e863..89158f1 --- a/v2rayN/Mode/V2rayTcpRequest.cs +++ b/v2rayN/v2rayN/Models/V2rayTcpRequest.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; - -namespace v2rayN.Mode +namespace v2rayN.Models { /// /// Tcp伪装http的Request,只要Host @@ -8,7 +6,7 @@ namespace v2rayN.Mode public class V2rayTcpRequest { /// - /// + /// /// public RequestHeaders headers { get; set; } } @@ -16,10 +14,8 @@ public class V2rayTcpRequest public class RequestHeaders { /// - /// + /// /// public List Host { get; set; } } - - -} +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Models/VmessQRCode.cs b/v2rayN/v2rayN/Models/VmessQRCode.cs new file mode 100755 index 0000000..e37d5c6 --- /dev/null +++ b/v2rayN/v2rayN/Models/VmessQRCode.cs @@ -0,0 +1,44 @@ +using System.Text.Json.Serialization; + +namespace v2rayN.Models +{ + /// + /// https://github.com/2dust/v2rayN/wiki/ + /// + [Serializable] + internal class VmessQRCode + { + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] + public int v { get; set; } = 2; + + public string ps { get; set; } = string.Empty; + + public string add { get; set; } = string.Empty; + + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] + public int port { get; set; } = 0; + + public string id { get; set; } = string.Empty; + + [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString)] + public int aid { get; set; } = 0; + + public string scy { get; set; } = string.Empty; + + public string net { get; set; } = string.Empty; + + public string type { get; set; } = string.Empty; + + public string host { get; set; } = string.Empty; + + public string path { get; set; } = string.Empty; + + public string tls { get; set; } = string.Empty; + + public string sni { get; set; } = string.Empty; + + public string alpn { get; set; } = string.Empty; + + public string fp { get; set; } = string.Empty; + } +} \ No newline at end of file diff --git a/v2rayN/Properties/Resources.Designer.cs b/v2rayN/v2rayN/Properties/Resources.Designer.cs old mode 100644 new mode 100755 similarity index 78% rename from v2rayN/Properties/Resources.Designer.cs rename to v2rayN/v2rayN/Properties/Resources.Designer.cs index 10ee0e6..24b5f9d --- a/v2rayN/Properties/Resources.Designer.cs +++ b/v2rayN/v2rayN/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace v2rayN.Properties { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -71,12 +71,12 @@ internal static System.Drawing.Bitmap about { } /// - /// 查找 System.Byte[] 类型的本地化资源。 + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// - internal static byte[] abp_js { + internal static System.Drawing.Bitmap active { get { - object obj = ResourceManager.GetObject("abp_js", resourceCulture); - return ((byte[])(obj)); + object obj = ResourceManager.GetObject("active", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); } } @@ -100,16 +100,6 @@ internal static System.Drawing.Bitmap help { } } - /// - /// 查找 System.Drawing.Bitmap 类型的本地化资源。 - /// - internal static System.Drawing.Bitmap language { - get { - object obj = ResourceManager.GetObject("language", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// @@ -131,49 +121,42 @@ internal static System.Drawing.Bitmap notify { } /// - /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。 /// - internal static System.Drawing.Bitmap option { + internal static System.Drawing.Icon NotifyIcon1 { get { - object obj = ResourceManager.GetObject("option", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); + object obj = ResourceManager.GetObject("NotifyIcon1", resourceCulture); + return ((System.Drawing.Icon)(obj)); } } /// - /// 查找 System.Byte[] 类型的本地化资源。 + /// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。 /// - internal static byte[] pac_txt { + internal static System.Drawing.Icon NotifyIcon2 { get { - object obj = ResourceManager.GetObject("pac_txt", resourceCulture); - return ((byte[])(obj)); + object obj = ResourceManager.GetObject("NotifyIcon2", resourceCulture); + return ((System.Drawing.Icon)(obj)); } } /// - /// 查找类似 listen-address __PRIVOXY_BIND_IP__:__PRIVOXY_BIND_PORT__ - ///toggle 0 - ///logfile v2ray_privoxy.log - ///show-on-task-bar 0 - ///activity-animation 0 - ///forward-socks5 / 127.0.0.1:__SOCKS_PORT__ . - ///max-client-connections 2048 - ///hide-console - /// 的本地化字符串。 + /// 查找类似于 (图标) 的 System.Drawing.Icon 类型的本地化资源。 /// - internal static string privoxy_conf { + internal static System.Drawing.Icon NotifyIcon3 { get { - return ResourceManager.GetString("privoxy_conf", resourceCulture); + object obj = ResourceManager.GetObject("NotifyIcon3", resourceCulture); + return ((System.Drawing.Icon)(obj)); } } /// - /// 查找 System.Byte[] 类型的本地化资源。 + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// - internal static byte[] privoxy_exe { + internal static System.Drawing.Bitmap option { get { - object obj = ResourceManager.GetObject("privoxy_exe", resourceCulture); - return ((byte[])(obj)); + object obj = ResourceManager.GetObject("option", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); } } @@ -220,30 +203,20 @@ internal static System.Drawing.Bitmap share { /// /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// - internal static System.Drawing.Bitmap sub { + internal static System.Drawing.Bitmap speedtest { get { - object obj = ResourceManager.GetObject("sub", resourceCulture); + object obj = ResourceManager.GetObject("speedtest", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } /// - /// 查找 System.Byte[] 类型的本地化资源。 - /// - internal static byte[] sysproxy_exe { - get { - object obj = ResourceManager.GetObject("sysproxy_exe", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// 查找 System.Byte[] 类型的本地化资源。 + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 /// - internal static byte[] sysproxy64_exe { + internal static System.Drawing.Bitmap sub { get { - object obj = ResourceManager.GetObject("sysproxy64_exe", resourceCulture); - return ((byte[])(obj)); + object obj = ResourceManager.GetObject("sub", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); } } } diff --git a/v2rayN/Forms/AddServer2Form.zh-Hans.resx b/v2rayN/v2rayN/Properties/Resources.resx old mode 100644 new mode 100755 similarity index 87% rename from v2rayN/Forms/AddServer2Form.zh-Hans.resx rename to v2rayN/v2rayN/Properties/Resources.resx index 10baa46..6089990 --- a/v2rayN/Forms/AddServer2Form.zh-Hans.resx +++ b/v2rayN/v2rayN/Properties/Resources.resx @@ -117,25 +117,14 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 编辑自定义配置服务器 + + + ..\Resources\NotifyIcon1.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - 取消(&C) + + ..\Resources\NotifyIcon2.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - 确定(&O) - - - 服务器 - - - 地址 (address) - - - *请手动填写 - - - 别名 (自定义) + + ..\Resources\NotifyIcon3.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/v2rayN/v2rayN/Resources/NotifyIcon1.ico b/v2rayN/v2rayN/Resources/NotifyIcon1.ico new file mode 100755 index 0000000..a978e0a Binary files /dev/null and b/v2rayN/v2rayN/Resources/NotifyIcon1.ico differ diff --git a/v2rayN/v2rayN/Resources/NotifyIcon2.ico b/v2rayN/v2rayN/Resources/NotifyIcon2.ico new file mode 100755 index 0000000..b625aa8 Binary files /dev/null and b/v2rayN/v2rayN/Resources/NotifyIcon2.ico differ diff --git a/v2rayN/v2rayN/Resources/NotifyIcon3.ico b/v2rayN/v2rayN/Resources/NotifyIcon3.ico new file mode 100755 index 0000000..6b6db8e Binary files /dev/null and b/v2rayN/v2rayN/Resources/NotifyIcon3.ico differ diff --git a/v2rayN/v2rayN/Resx/ResUI.Designer.cs b/v2rayN/v2rayN/Resx/ResUI.Designer.cs new file mode 100755 index 0000000..45c7d3c --- /dev/null +++ b/v2rayN/v2rayN/Resx/ResUI.Designer.cs @@ -0,0 +1,3367 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace v2rayN.Resx { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class ResUI { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal ResUI() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("v2rayN.Resx.ResUI", typeof(ResUI).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// 查找类似 Do you want to append rules? Choose yes to append, choose otherwise to replace 的本地化字符串。 + /// + public static string AddBatchRoutingRulesYesNo { + get { + return ResourceManager.GetString("AddBatchRoutingRulesYesNo", resourceCulture); + } + } + + /// + /// 查找类似 All 的本地化字符串。 + /// + public static string AllGroupServers { + get { + return ResourceManager.GetString("AllGroupServers", resourceCulture); + } + } + + /// + /// 查找类似 Batch export subscription to clipboard successfully 的本地化字符串。 + /// + public static string BatchExportSubscriptionSuccessfully { + get { + return ResourceManager.GetString("BatchExportSubscriptionSuccessfully", resourceCulture); + } + } + + /// + /// 查找类似 Batch export share URL to clipboard successfully 的本地化字符串。 + /// + public static string BatchExportURLSuccessfully { + get { + return ResourceManager.GetString("BatchExportURLSuccessfully", resourceCulture); + } + } + + /// + /// 查找类似 Please check the server settings first 的本地化字符串。 + /// + public static string CheckServerSettings { + get { + return ResourceManager.GetString("CheckServerSettings", resourceCulture); + } + } + + /// + /// 查找类似 Invalid configuration format 的本地化字符串。 + /// + public static string ConfigurationFormatIncorrect { + get { + return ResourceManager.GetString("ConfigurationFormatIncorrect", resourceCulture); + } + } + + /// + /// 查找类似 Note that custom configuration relies entirely on your own configuration and does not work with all settings. If you want to use the system proxy, please modify the listening port manually. 的本地化字符串。 + /// + public static string CustomServerTips { + get { + return ResourceManager.GetString("CustomServerTips", resourceCulture); + } + } + + /// + /// 查找类似 Downloading... 的本地化字符串。 + /// + public static string Downloading { + get { + return ResourceManager.GetString("Downloading", resourceCulture); + } + } + + /// + /// 查找类似 Download 的本地化字符串。 + /// + public static string downloadSpeed { + get { + return ResourceManager.GetString("downloadSpeed", resourceCulture); + } + } + + /// + /// 查找类似 Whether to download? {0} 的本地化字符串。 + /// + public static string DownloadYesNo { + get { + return ResourceManager.GetString("DownloadYesNo", resourceCulture); + } + } + + /// + /// 查找类似 Failed to convert configuration file 的本地化字符串。 + /// + public static string FailedConversionConfiguration { + get { + return ResourceManager.GetString("FailedConversionConfiguration", resourceCulture); + } + } + + /// + /// 查找类似 Failed to generate default configuration file 的本地化字符串。 + /// + public static string FailedGenDefaultConfiguration { + get { + return ResourceManager.GetString("FailedGenDefaultConfiguration", resourceCulture); + } + } + + /// + /// 查找类似 Failed to get the default configuration 的本地化字符串。 + /// + public static string FailedGetDefaultConfiguration { + get { + return ResourceManager.GetString("FailedGetDefaultConfiguration", resourceCulture); + } + } + + /// + /// 查找类似 Failed to import custom configuration server 的本地化字符串。 + /// + public static string FailedImportedCustomServer { + get { + return ResourceManager.GetString("FailedImportedCustomServer", resourceCulture); + } + } + + /// + /// 查找类似 Failed to read configuration file 的本地化字符串。 + /// + public static string FailedReadConfiguration { + get { + return ResourceManager.GetString("FailedReadConfiguration", resourceCulture); + } + } + + /// + /// 查找类似 Failed to run Core, please see the log 的本地化字符串。 + /// + public static string FailedToRunCore { + get { + return ResourceManager.GetString("FailedToRunCore", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in the correct custom DNS 的本地化字符串。 + /// + public static string FillCorrectDNSText { + get { + return ResourceManager.GetString("FillCorrectDNSText", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in the correct format server port 的本地化字符串。 + /// + public static string FillCorrectServerPort { + get { + return ResourceManager.GetString("FillCorrectServerPort", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in the KCP parameters correctly 的本地化字符串。 + /// + public static string FillKcpParameters { + get { + return ResourceManager.GetString("FillKcpParameters", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in the local listening port 的本地化字符串。 + /// + public static string FillLocalListeningPort { + get { + return ResourceManager.GetString("FillLocalListeningPort", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in the password 的本地化字符串。 + /// + public static string FillPassword { + get { + return ResourceManager.GetString("FillPassword", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in the server address 的本地化字符串。 + /// + public static string FillServerAddress { + get { + return ResourceManager.GetString("FillServerAddress", resourceCulture); + } + } + + /// + /// 查找类似 Please browse to import server configuration 的本地化字符串。 + /// + public static string FillServerAddressCustom { + get { + return ResourceManager.GetString("FillServerAddressCustom", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in the user ID 的本地化字符串。 + /// + public static string FillUUID { + get { + return ResourceManager.GetString("FillUUID", resourceCulture); + } + } + + /// + /// 查找类似 Transport 的本地化字符串。 + /// + public static string GbTransport { + get { + return ResourceManager.GetString("GbTransport", resourceCulture); + } + } + + /// + /// 查找类似 Is not the correct client configuration file, please check 的本地化字符串。 + /// + public static string IncorrectClientConfiguration { + get { + return ResourceManager.GetString("IncorrectClientConfiguration", resourceCulture); + } + } + + /// + /// 查找类似 Is not the correct configuration, please check 的本地化字符串。 + /// + public static string Incorrectconfiguration { + get { + return ResourceManager.GetString("Incorrectconfiguration", resourceCulture); + } + } + + /// + /// 查找类似 Is not the correct server configuration file, please check 的本地化字符串。 + /// + public static string IncorrectServerConfiguration { + get { + return ResourceManager.GetString("IncorrectServerConfiguration", resourceCulture); + } + } + + /// + /// 查找类似 Initial Configuration 的本地化字符串。 + /// + public static string InitialConfiguration { + get { + return ResourceManager.GetString("InitialConfiguration", resourceCulture); + } + } + + /// + /// 查找类似 {0} {1} already up to date. 的本地化字符串。 + /// + public static string IsLatestCore { + get { + return ResourceManager.GetString("IsLatestCore", resourceCulture); + } + } + + /// + /// 查找类似 {0} {1} already up to date. 的本地化字符串。 + /// + public static string IsLatestN { + get { + return ResourceManager.GetString("IsLatestN", resourceCulture); + } + } + + /// + /// 查找类似 LAN 的本地化字符串。 + /// + public static string LabLAN { + get { + return ResourceManager.GetString("LabLAN", resourceCulture); + } + } + + /// + /// 查找类似 Local 的本地化字符串。 + /// + public static string LabLocal { + get { + return ResourceManager.GetString("LabLocal", resourceCulture); + } + } + + /// + /// 查找类似 Address 的本地化字符串。 + /// + public static string LvAddress { + get { + return ResourceManager.GetString("LvAddress", resourceCulture); + } + } + + /// + /// 查找类似 Automatic update interval(minutes) 的本地化字符串。 + /// + public static string LvAutoUpdateInterval { + get { + return ResourceManager.GetString("LvAutoUpdateInterval", resourceCulture); + } + } + + /// + /// 查找类似 Convert target type 的本地化字符串。 + /// + public static string LvConvertTarget { + get { + return ResourceManager.GetString("LvConvertTarget", resourceCulture); + } + } + + /// + /// 查找类似 Please leave blank if no conversion is required 的本地化字符串。 + /// + public static string LvConvertTargetTip { + get { + return ResourceManager.GetString("LvConvertTargetTip", resourceCulture); + } + } + + /// + /// 查找类似 Count 的本地化字符串。 + /// + public static string LvCount { + get { + return ResourceManager.GetString("LvCount", resourceCulture); + } + } + + /// + /// 查找类似 Custom Icon 的本地化字符串。 + /// + public static string LvCustomIcon { + get { + return ResourceManager.GetString("LvCustomIcon", resourceCulture); + } + } + + /// + /// 查找类似 Custom the rule-set of sing-box 的本地化字符串。 + /// + public static string LvCustomRulesetPath4Singbox { + get { + return ResourceManager.GetString("LvCustomRulesetPath4Singbox", resourceCulture); + } + } + + /// + /// 查找类似 Enabled Update 的本地化字符串。 + /// + public static string LvEnabled { + get { + return ResourceManager.GetString("LvEnabled", resourceCulture); + } + } + + /// + /// 查找类似 Security 的本地化字符串。 + /// + public static string LvEncryptionMethod { + get { + return ResourceManager.GetString("LvEncryptionMethod", resourceCulture); + } + } + + /// + /// 查找类似 Remarks regular filter 的本地化字符串。 + /// + public static string LvFilter { + get { + return ResourceManager.GetString("LvFilter", resourceCulture); + } + } + + /// + /// 查找类似 More urls, separated by commas;Subscription conversion will be invalid 的本地化字符串。 + /// + public static string LvMoreUrl { + get { + return ResourceManager.GetString("LvMoreUrl", resourceCulture); + } + } + + /// + /// 查找类似 Next proxy remarks 的本地化字符串。 + /// + public static string LvNextProfile { + get { + return ResourceManager.GetString("LvNextProfile", resourceCulture); + } + } + + /// + /// 查找类似 Port 的本地化字符串。 + /// + public static string LvPort { + get { + return ResourceManager.GetString("LvPort", resourceCulture); + } + } + + /// + /// 查找类似 Previous proxy remarks 的本地化字符串。 + /// + public static string LvPrevProfile { + get { + return ResourceManager.GetString("LvPrevProfile", resourceCulture); + } + } + + /// + /// 查找类似 Please make sure the remarks exists and is unique 的本地化字符串。 + /// + public static string LvPrevProfileTip { + get { + return ResourceManager.GetString("LvPrevProfileTip", resourceCulture); + } + } + + /// + /// 查找类似 Remarks 的本地化字符串。 + /// + public static string LvRemarks { + get { + return ResourceManager.GetString("LvRemarks", resourceCulture); + } + } + + /// + /// 查找类似 Type 的本地化字符串。 + /// + public static string LvServiceType { + get { + return ResourceManager.GetString("LvServiceType", resourceCulture); + } + } + + /// + /// 查找类似 Sort 的本地化字符串。 + /// + public static string LvSort { + get { + return ResourceManager.GetString("LvSort", resourceCulture); + } + } + + /// + /// 查找类似 Subs group 的本地化字符串。 + /// + public static string LvSubscription { + get { + return ResourceManager.GetString("LvSubscription", resourceCulture); + } + } + + /// + /// 查找类似 Delay(ms) 的本地化字符串。 + /// + public static string LvTestDelay { + get { + return ResourceManager.GetString("LvTestDelay", resourceCulture); + } + } + + /// + /// 查找类似 Speed(M/s) 的本地化字符串。 + /// + public static string LvTestSpeed { + get { + return ResourceManager.GetString("LvTestSpeed", resourceCulture); + } + } + + /// + /// 查找类似 TLS 的本地化字符串。 + /// + public static string LvTLS { + get { + return ResourceManager.GetString("LvTLS", resourceCulture); + } + } + + /// + /// 查找类似 Download traffic today 的本地化字符串。 + /// + public static string LvTodayDownloadDataAmount { + get { + return ResourceManager.GetString("LvTodayDownloadDataAmount", resourceCulture); + } + } + + /// + /// 查找类似 Upload traffic today 的本地化字符串。 + /// + public static string LvTodayUploadDataAmount { + get { + return ResourceManager.GetString("LvTodayUploadDataAmount", resourceCulture); + } + } + + /// + /// 查找类似 Total download traffic 的本地化字符串。 + /// + public static string LvTotalDownloadDataAmount { + get { + return ResourceManager.GetString("LvTotalDownloadDataAmount", resourceCulture); + } + } + + /// + /// 查找类似 Total upload traffic 的本地化字符串。 + /// + public static string LvTotalUploadDataAmount { + get { + return ResourceManager.GetString("LvTotalUploadDataAmount", resourceCulture); + } + } + + /// + /// 查找类似 Transport 的本地化字符串。 + /// + public static string LvTransportProtocol { + get { + return ResourceManager.GetString("LvTransportProtocol", resourceCulture); + } + } + + /// + /// 查找类似 URL(Optional) 的本地化字符串。 + /// + public static string LvUrl { + get { + return ResourceManager.GetString("LvUrl", resourceCulture); + } + } + + /// + /// 查找类似 User Agent 的本地化字符串。 + /// + public static string LvUserAgent { + get { + return ResourceManager.GetString("LvUserAgent", resourceCulture); + } + } + + /// + /// 查找类似 Add a custom configuration server 的本地化字符串。 + /// + public static string menuAddCustomServer { + get { + return ResourceManager.GetString("menuAddCustomServer", resourceCulture); + } + } + + /// + /// 查找类似 Add [Http] server 的本地化字符串。 + /// + public static string menuAddHttpServer { + get { + return ResourceManager.GetString("menuAddHttpServer", resourceCulture); + } + } + + /// + /// 查找类似 Add [Hysteria2] server 的本地化字符串。 + /// + public static string menuAddHysteria2Server { + get { + return ResourceManager.GetString("menuAddHysteria2Server", resourceCulture); + } + } + + /// + /// 查找类似 Import bulk URL from clipboard (Ctrl+V) 的本地化字符串。 + /// + public static string menuAddServerViaClipboard { + get { + return ResourceManager.GetString("menuAddServerViaClipboard", resourceCulture); + } + } + + /// + /// 查找类似 Scan QR code on the screen (Ctrl+S) 的本地化字符串。 + /// + public static string menuAddServerViaScan { + get { + return ResourceManager.GetString("menuAddServerViaScan", resourceCulture); + } + } + + /// + /// 查找类似 Add [Shadowsocks] server 的本地化字符串。 + /// + public static string menuAddShadowsocksServer { + get { + return ResourceManager.GetString("menuAddShadowsocksServer", resourceCulture); + } + } + + /// + /// 查找类似 Add [Socks] server 的本地化字符串。 + /// + public static string menuAddSocksServer { + get { + return ResourceManager.GetString("menuAddSocksServer", resourceCulture); + } + } + + /// + /// 查找类似 Add [Trojan] server 的本地化字符串。 + /// + public static string menuAddTrojanServer { + get { + return ResourceManager.GetString("menuAddTrojanServer", resourceCulture); + } + } + + /// + /// 查找类似 Add [Tuic] server 的本地化字符串。 + /// + public static string menuAddTuicServer { + get { + return ResourceManager.GetString("menuAddTuicServer", resourceCulture); + } + } + + /// + /// 查找类似 Add [VLESS] server 的本地化字符串。 + /// + public static string menuAddVlessServer { + get { + return ResourceManager.GetString("menuAddVlessServer", resourceCulture); + } + } + + /// + /// 查找类似 Add [VMess] server 的本地化字符串。 + /// + public static string menuAddVmessServer { + get { + return ResourceManager.GetString("menuAddVmessServer", resourceCulture); + } + } + + /// + /// 查找类似 Add [Wireguard] server 的本地化字符串。 + /// + public static string menuAddWireguardServer { + get { + return ResourceManager.GetString("menuAddWireguardServer", resourceCulture); + } + } + + /// + /// 查找类似 Check Update 的本地化字符串。 + /// + public static string menuCheckUpdate { + get { + return ResourceManager.GetString("menuCheckUpdate", resourceCulture); + } + } + + /// + /// 查找类似 Clear all service statistics 的本地化字符串。 + /// + public static string menuClearServerStatistics { + get { + return ResourceManager.GetString("menuClearServerStatistics", resourceCulture); + } + } + + /// + /// 查找类似 Close 的本地化字符串。 + /// + public static string menuClose { + get { + return ResourceManager.GetString("menuClose", resourceCulture); + } + } + + /// + /// 查找类似 Clone selected server 的本地化字符串。 + /// + public static string menuCopyServer { + get { + return ResourceManager.GetString("menuCopyServer", resourceCulture); + } + } + + /// + /// 查找类似 DNS Settings 的本地化字符串。 + /// + public static string menuDNSSetting { + get { + return ResourceManager.GetString("menuDNSSetting", resourceCulture); + } + } + + /// + /// 查找类似 Edit Server (Ctrl+D) 的本地化字符串。 + /// + public static string menuEditServer { + get { + return ResourceManager.GetString("menuEditServer", resourceCulture); + } + } + + /// + /// 查找类似 Exit 的本地化字符串。 + /// + public static string menuExit { + get { + return ResourceManager.GetString("menuExit", resourceCulture); + } + } + + /// + /// 查找类似 Export selected server for client configuration 的本地化字符串。 + /// + public static string menuExport2ClientConfig { + get { + return ResourceManager.GetString("menuExport2ClientConfig", resourceCulture); + } + } + + /// + /// 查找类似 Export share URLs to clipboard (Ctrl+C) 的本地化字符串。 + /// + public static string menuExport2ShareUrl { + get { + return ResourceManager.GetString("menuExport2ShareUrl", resourceCulture); + } + } + + /// + /// 查找类似 Export subscription (base64) share to clipboard 的本地化字符串。 + /// + public static string menuExport2SubContent { + get { + return ResourceManager.GetString("menuExport2SubContent", resourceCulture); + } + } + + /// + /// 查找类似 Global Hotkey Setting 的本地化字符串。 + /// + public static string menuGlobalHotkeySetting { + get { + return ResourceManager.GetString("menuGlobalHotkeySetting", resourceCulture); + } + } + + /// + /// 查找类似 Help 的本地化字符串。 + /// + public static string menuHelp { + get { + return ResourceManager.GetString("menuHelp", resourceCulture); + } + } + + /// + /// 查找类似 Import old config (guiNConfig) 的本地化字符串。 + /// + public static string menuImportOldGuiConfig { + get { + return ResourceManager.GetString("menuImportOldGuiConfig", resourceCulture); + } + } + + /// + /// 查找类似 Import Rules From Clipboard 的本地化字符串。 + /// + public static string menuImportRulesFromClipboard { + get { + return ResourceManager.GetString("menuImportRulesFromClipboard", resourceCulture); + } + } + + /// + /// 查找类似 Import Rules From File 的本地化字符串。 + /// + public static string menuImportRulesFromFile { + get { + return ResourceManager.GetString("menuImportRulesFromFile", resourceCulture); + } + } + + /// + /// 查找类似 Import Rules From Subscription URL 的本地化字符串。 + /// + public static string menuImportRulesFromUrl { + get { + return ResourceManager.GetString("menuImportRulesFromUrl", resourceCulture); + } + } + + /// + /// 查找类似 One-click multi test Latency and speed (Ctrl+E) 的本地化字符串。 + /// + public static string menuMixedTestServer { + get { + return ResourceManager.GetString("menuMixedTestServer", resourceCulture); + } + } + + /// + /// 查找类似 Move to bottom (B) 的本地化字符串。 + /// + public static string menuMoveBottom { + get { + return ResourceManager.GetString("menuMoveBottom", resourceCulture); + } + } + + /// + /// 查找类似 Down (D) 的本地化字符串。 + /// + public static string menuMoveDown { + get { + return ResourceManager.GetString("menuMoveDown", resourceCulture); + } + } + + /// + /// 查找类似 Move up and down 的本地化字符串。 + /// + public static string menuMoveTo { + get { + return ResourceManager.GetString("menuMoveTo", resourceCulture); + } + } + + /// + /// 查找类似 Move to group 的本地化字符串。 + /// + public static string menuMoveToGroup { + get { + return ResourceManager.GetString("menuMoveToGroup", resourceCulture); + } + } + + /// + /// 查找类似 Move to top (T) 的本地化字符串。 + /// + public static string menuMoveTop { + get { + return ResourceManager.GetString("menuMoveTop", resourceCulture); + } + } + + /// + /// 查找类似 Up (U) 的本地化字符串。 + /// + public static string menuMoveUp { + get { + return ResourceManager.GetString("menuMoveUp", resourceCulture); + } + } + + /// + /// 查找类似 Clear all 的本地化字符串。 + /// + public static string menuMsgViewClear { + get { + return ResourceManager.GetString("menuMsgViewClear", resourceCulture); + } + } + + /// + /// 查找类似 Copy (Ctrl+C) 的本地化字符串。 + /// + public static string menuMsgViewCopy { + get { + return ResourceManager.GetString("menuMsgViewCopy", resourceCulture); + } + } + + /// + /// 查找类似 Copy all 的本地化字符串。 + /// + public static string menuMsgViewCopyAll { + get { + return ResourceManager.GetString("menuMsgViewCopyAll", resourceCulture); + } + } + + /// + /// 查找类似 Set message filters 的本地化字符串。 + /// + public static string menuMsgViewFilter { + get { + return ResourceManager.GetString("menuMsgViewFilter", resourceCulture); + } + } + + /// + /// 查找类似 Select all (Ctrl+A) 的本地化字符串。 + /// + public static string menuMsgViewSelectAll { + get { + return ResourceManager.GetString("menuMsgViewSelectAll", resourceCulture); + } + } + + /// + /// 查找类似 Open the storage location 的本地化字符串。 + /// + public static string menuOpenTheFileLocation { + get { + return ResourceManager.GetString("menuOpenTheFileLocation", resourceCulture); + } + } + + /// + /// 查找类似 Option Setting 的本地化字符串。 + /// + public static string menuOptionSetting { + get { + return ResourceManager.GetString("menuOptionSetting", resourceCulture); + } + } + + /// + /// 查找类似 Promotion 的本地化字符串。 + /// + public static string menuPromotion { + get { + return ResourceManager.GetString("menuPromotion", resourceCulture); + } + } + + /// + /// 查找类似 Test servers real delay (Ctrl+R) 的本地化字符串。 + /// + public static string menuRealPingServer { + get { + return ResourceManager.GetString("menuRealPingServer", resourceCulture); + } + } + + /// + /// 查找类似 Restart as Administrator 的本地化字符串。 + /// + public static string menuRebootAsAdmin { + get { + return ResourceManager.GetString("menuRebootAsAdmin", resourceCulture); + } + } + + /// + /// 查找类似 Reload 的本地化字符串。 + /// + public static string menuReload { + get { + return ResourceManager.GetString("menuReload", resourceCulture); + } + } + + /// + /// 查找类似 Remove duplicate servers 的本地化字符串。 + /// + public static string menuRemoveDuplicateServer { + get { + return ResourceManager.GetString("menuRemoveDuplicateServer", resourceCulture); + } + } + + /// + /// 查找类似 Remove selected servers (Delete) 的本地化字符串。 + /// + public static string menuRemoveServer { + get { + return ResourceManager.GetString("menuRemoveServer", resourceCulture); + } + } + + /// + /// 查找类似 Routing 的本地化字符串。 + /// + public static string menuRouting { + get { + return ResourceManager.GetString("menuRouting", resourceCulture); + } + } + + /// + /// 查找类似 Advanced Function 的本地化字符串。 + /// + public static string menuRoutingAdvanced { + get { + return ResourceManager.GetString("menuRoutingAdvanced", resourceCulture); + } + } + + /// + /// 查找类似 Add 的本地化字符串。 + /// + public static string menuRoutingAdvancedAdd { + get { + return ResourceManager.GetString("menuRoutingAdvancedAdd", resourceCulture); + } + } + + /// + /// 查找类似 Import Advanced Rules 的本地化字符串。 + /// + public static string menuRoutingAdvancedImportRules { + get { + return ResourceManager.GetString("menuRoutingAdvancedImportRules", resourceCulture); + } + } + + /// + /// 查找类似 Remove selected (Delete) 的本地化字符串。 + /// + public static string menuRoutingAdvancedRemove { + get { + return ResourceManager.GetString("menuRoutingAdvancedRemove", resourceCulture); + } + } + + /// + /// 查找类似 Set as active rule(Enter) 的本地化字符串。 + /// + public static string menuRoutingAdvancedSetDefault { + get { + return ResourceManager.GetString("menuRoutingAdvancedSetDefault", resourceCulture); + } + } + + /// + /// 查找类似 Basic Function 的本地化字符串。 + /// + public static string menuRoutingBasic { + get { + return ResourceManager.GetString("menuRoutingBasic", resourceCulture); + } + } + + /// + /// 查找类似 Import Basic Rules 的本地化字符串。 + /// + public static string menuRoutingBasicImportRules { + get { + return ResourceManager.GetString("menuRoutingBasicImportRules", resourceCulture); + } + } + + /// + /// 查找类似 RoutingRuleDetailsSetting 的本地化字符串。 + /// + public static string menuRoutingRuleDetailsSetting { + get { + return ResourceManager.GetString("menuRoutingRuleDetailsSetting", resourceCulture); + } + } + + /// + /// 查找类似 Rule Settings 的本地化字符串。 + /// + public static string menuRoutingRuleSetting { + get { + return ResourceManager.GetString("menuRoutingRuleSetting", resourceCulture); + } + } + + /// + /// 查找类似 Routing Setting 的本地化字符串。 + /// + public static string menuRoutingSetting { + get { + return ResourceManager.GetString("menuRoutingSetting", resourceCulture); + } + } + + /// + /// 查找类似 Add Rule 的本地化字符串。 + /// + public static string menuRuleAdd { + get { + return ResourceManager.GetString("menuRuleAdd", resourceCulture); + } + } + + /// + /// 查找类似 Export Selected Rules 的本地化字符串。 + /// + public static string menuRuleExportSelected { + get { + return ResourceManager.GetString("menuRuleExportSelected", resourceCulture); + } + } + + /// + /// 查找类似 Rule List 的本地化字符串。 + /// + public static string menuRuleList { + get { + return ResourceManager.GetString("menuRuleList", resourceCulture); + } + } + + /// + /// 查找类似 Remove Rule (Delete) 的本地化字符串。 + /// + public static string menuRuleRemove { + get { + return ResourceManager.GetString("menuRuleRemove", resourceCulture); + } + } + + /// + /// 查找类似 Select all (Ctrl+A) 的本地化字符串。 + /// + public static string menuSelectAll { + get { + return ResourceManager.GetString("menuSelectAll", resourceCulture); + } + } + + /// + /// 查找类似 Servers 的本地化字符串。 + /// + public static string menuServers { + get { + return ResourceManager.GetString("menuServers", resourceCulture); + } + } + + /// + /// 查找类似 Set as active server (Enter) 的本地化字符串。 + /// + public static string menuSetDefaultServer { + get { + return ResourceManager.GetString("menuSetDefaultServer", resourceCulture); + } + } + + /// + /// 查找类似 Settings 的本地化字符串。 + /// + public static string menuSetting { + get { + return ResourceManager.GetString("menuSetting", resourceCulture); + } + } + + /// + /// 查找类似 Share Server (Ctrl+F) 的本地化字符串。 + /// + public static string menuShareServer { + get { + return ResourceManager.GetString("menuShareServer", resourceCulture); + } + } + + /// + /// 查找类似 Sort by test result 的本地化字符串。 + /// + public static string menuSortServerResult { + get { + return ResourceManager.GetString("menuSortServerResult", resourceCulture); + } + } + + /// + /// 查找类似 Test servers download speed (Ctrl+T) 的本地化字符串。 + /// + public static string menuSpeedServer { + get { + return ResourceManager.GetString("menuSpeedServer", resourceCulture); + } + } + + /// + /// 查找类似 Add 的本地化字符串。 + /// + public static string menuSubAdd { + get { + return ResourceManager.GetString("menuSubAdd", resourceCulture); + } + } + + /// + /// 查找类似 Delete 的本地化字符串。 + /// + public static string menuSubDelete { + get { + return ResourceManager.GetString("menuSubDelete", resourceCulture); + } + } + + /// + /// 查找类似 Edit 的本地化字符串。 + /// + public static string menuSubEdit { + get { + return ResourceManager.GetString("menuSubEdit", resourceCulture); + } + } + + /// + /// 查找类似 Update current subscription without proxy 的本地化字符串。 + /// + public static string menuSubGroupUpdate { + get { + return ResourceManager.GetString("menuSubGroupUpdate", resourceCulture); + } + } + + /// + /// 查找类似 Update current subscription with proxy 的本地化字符串。 + /// + public static string menuSubGroupUpdateViaProxy { + get { + return ResourceManager.GetString("menuSubGroupUpdateViaProxy", resourceCulture); + } + } + + /// + /// 查找类似 Subscription group 的本地化字符串。 + /// + public static string menuSubscription { + get { + return ResourceManager.GetString("menuSubscription", resourceCulture); + } + } + + /// + /// 查找类似 Subscription group settings 的本地化字符串。 + /// + public static string menuSubSetting { + get { + return ResourceManager.GetString("menuSubSetting", resourceCulture); + } + } + + /// + /// 查找类似 Share 的本地化字符串。 + /// + public static string menuSubShare { + get { + return ResourceManager.GetString("menuSubShare", resourceCulture); + } + } + + /// + /// 查找类似 Update subscription without proxy 的本地化字符串。 + /// + public static string menuSubUpdate { + get { + return ResourceManager.GetString("menuSubUpdate", resourceCulture); + } + } + + /// + /// 查找类似 Update subscription with proxy 的本地化字符串。 + /// + public static string menuSubUpdateViaProxy { + get { + return ResourceManager.GetString("menuSubUpdateViaProxy", resourceCulture); + } + } + + /// + /// 查找类似 System proxy 的本地化字符串。 + /// + public static string menuSystemproxy { + get { + return ResourceManager.GetString("menuSystemproxy", resourceCulture); + } + } + + /// + /// 查找类似 Clear system proxy 的本地化字符串。 + /// + public static string menuSystemProxyClear { + get { + return ResourceManager.GetString("menuSystemProxyClear", resourceCulture); + } + } + + /// + /// 查找类似 Do not change system proxy 的本地化字符串。 + /// + public static string menuSystemProxyNothing { + get { + return ResourceManager.GetString("menuSystemProxyNothing", resourceCulture); + } + } + + /// + /// 查找类似 PAC mode 的本地化字符串。 + /// + public static string menuSystemProxyPac { + get { + return ResourceManager.GetString("menuSystemProxyPac", resourceCulture); + } + } + + /// + /// 查找类似 Set system proxy 的本地化字符串。 + /// + public static string menuSystemProxySet { + get { + return ResourceManager.GetString("menuSystemProxySet", resourceCulture); + } + } + + /// + /// 查找类似 Test servers with tcping (Ctrl+O) 的本地化字符串。 + /// + public static string menuTcpingServer { + get { + return ResourceManager.GetString("menuTcpingServer", resourceCulture); + } + } + + /// + /// 查找类似 Test current service status 的本地化字符串。 + /// + public static string menuTestMe { + get { + return ResourceManager.GetString("menuTestMe", resourceCulture); + } + } + + /// + /// 查找类似 {0} Website 的本地化字符串。 + /// + public static string menuWebsiteItem { + get { + return ResourceManager.GetString("menuWebsiteItem", resourceCulture); + } + } + + /// + /// 查找类似 Clear original subscription content 的本地化字符串。 + /// + public static string MsgClearSubscription { + get { + return ResourceManager.GetString("MsgClearSubscription", resourceCulture); + } + } + + /// + /// 查找类似 Download GeoFile: {0} successfully 的本地化字符串。 + /// + public static string MsgDownloadGeoFileSuccessfully { + get { + return ResourceManager.GetString("MsgDownloadGeoFileSuccessfully", resourceCulture); + } + } + + /// + /// 查找类似 Download Core successfully 的本地化字符串。 + /// + public static string MsgDownloadV2rayCoreSuccessfully { + get { + return ResourceManager.GetString("MsgDownloadV2rayCoreSuccessfully", resourceCulture); + } + } + + /// + /// 查找类似 Failed to import subscription content 的本地化字符串。 + /// + public static string MsgFailedImportSubscription { + get { + return ResourceManager.GetString("MsgFailedImportSubscription", resourceCulture); + } + } + + /// + /// 查找类似 Filter, support regular 的本地化字符串。 + /// + public static string MsgFilterTitle { + get { + return ResourceManager.GetString("MsgFilterTitle", resourceCulture); + } + } + + /// + /// 查找类似 Get subscription content successfully 的本地化字符串。 + /// + public static string MsgGetSubscriptionSuccessfully { + get { + return ResourceManager.GetString("MsgGetSubscriptionSuccessfully", resourceCulture); + } + } + + /// + /// 查找类似 Information 的本地化字符串。 + /// + public static string MsgInformationTitle { + get { + return ResourceManager.GetString("MsgInformationTitle", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in the URL 的本地化字符串。 + /// + public static string MsgNeedUrl { + get { + return ResourceManager.GetString("MsgNeedUrl", resourceCulture); + } + } + + /// + /// 查找类似 No valid subscriptions set 的本地化字符串。 + /// + public static string MsgNoValidSubscription { + get { + return ResourceManager.GetString("MsgNoValidSubscription", resourceCulture); + } + } + + /// + /// 查找类似 Resolve {0} successfully 的本地化字符串。 + /// + public static string MsgParsingSuccessfully { + get { + return ResourceManager.GetString("MsgParsingSuccessfully", resourceCulture); + } + } + + /// + /// 查找类似 Servers Filter, press Enter to execute 的本地化字符串。 + /// + public static string MsgServerTitle { + get { + return ResourceManager.GetString("MsgServerTitle", resourceCulture); + } + } + + /// + /// 查找类似 Updates are not enabled, skip this subscription 的本地化字符串。 + /// + public static string MsgSkipSubscriptionUpdate { + get { + return ResourceManager.GetString("MsgSkipSubscriptionUpdate", resourceCulture); + } + } + + /// + /// 查找类似 Start getting subscriptions 的本地化字符串。 + /// + public static string MsgStartGettingSubscriptions { + get { + return ResourceManager.GetString("MsgStartGettingSubscriptions", resourceCulture); + } + } + + /// + /// 查找类似 Start updating {0}... 的本地化字符串。 + /// + public static string MsgStartUpdating { + get { + return ResourceManager.GetString("MsgStartUpdating", resourceCulture); + } + } + + /// + /// 查找类似 Invalid subscription content 的本地化字符串。 + /// + public static string MsgSubscriptionDecodingFailed { + get { + return ResourceManager.GetString("MsgSubscriptionDecodingFailed", resourceCulture); + } + } + + /// + /// 查找类似 Is unpacking...... 的本地化字符串。 + /// + public static string MsgUnpacking { + get { + return ResourceManager.GetString("MsgUnpacking", resourceCulture); + } + } + + /// + /// 查找类似 Update subscription end 的本地化字符串。 + /// + public static string MsgUpdateSubscriptionEnd { + get { + return ResourceManager.GetString("MsgUpdateSubscriptionEnd", resourceCulture); + } + } + + /// + /// 查找类似 Update subscription starts 的本地化字符串。 + /// + public static string MsgUpdateSubscriptionStart { + get { + return ResourceManager.GetString("MsgUpdateSubscriptionStart", resourceCulture); + } + } + + /// + /// 查找类似 Update Core successfully 的本地化字符串。 + /// + public static string MsgUpdateV2rayCoreSuccessfully { + get { + return ResourceManager.GetString("MsgUpdateV2rayCoreSuccessfully", resourceCulture); + } + } + + /// + /// 查找类似 Update Core successfully! Restarting service... 的本地化字符串。 + /// + public static string MsgUpdateV2rayCoreSuccessfullyMore { + get { + return ResourceManager.GetString("MsgUpdateV2rayCoreSuccessfullyMore", resourceCulture); + } + } + + /// + /// 查找类似 Successful operation. Click the settings menu to reboot the app. 的本地化字符串。 + /// + public static string NeedRebootTips { + get { + return ResourceManager.GetString("NeedRebootTips", resourceCulture); + } + } + + /// + /// 查找类似 Non-VMess or ss protocol 的本地化字符串。 + /// + public static string NonvmessOrssProtocol { + get { + return ResourceManager.GetString("NonvmessOrssProtocol", resourceCulture); + } + } + + /// + /// 查找类似 Non-standard service, this feature is invalid 的本地化字符串。 + /// + public static string NonVmessService { + get { + return ResourceManager.GetString("NonVmessService", resourceCulture); + } + } + + /// + /// 查找类似 The Core file (file name: {1}) was not found under the folder ({0}), please download and put it in the folder, download address: {2} 的本地化字符串。 + /// + public static string NotFoundCore { + get { + return ResourceManager.GetString("NotFoundCore", resourceCulture); + } + } + + /// + /// 查找类似 Not run as Admin 的本地化字符串。 + /// + public static string NotRunAsAdmin { + get { + return ResourceManager.GetString("NotRunAsAdmin", resourceCulture); + } + } + + /// + /// 查找类似 Scan completed, no valid QR code found 的本地化字符串。 + /// + public static string NoValidQRcodeFound { + get { + return ResourceManager.GetString("NoValidQRcodeFound", resourceCulture); + } + } + + /// + /// 查找类似 Operation failed, please check and retry 的本地化字符串。 + /// + public static string OperationFailed { + get { + return ResourceManager.GetString("OperationFailed", resourceCulture); + } + } + + /// + /// 查找类似 Operation success 的本地化字符串。 + /// + public static string OperationSuccess { + get { + return ResourceManager.GetString("OperationSuccess", resourceCulture); + } + } + + /// + /// 查找类似 Please Fill Remarks 的本地化字符串。 + /// + public static string PleaseFillRemarks { + get { + return ResourceManager.GetString("PleaseFillRemarks", resourceCulture); + } + } + + /// + /// 查找类似 Please select the encryption method 的本地化字符串。 + /// + public static string PleaseSelectEncryption { + get { + return ResourceManager.GetString("PleaseSelectEncryption", resourceCulture); + } + } + + /// + /// 查找类似 Please select a protocol 的本地化字符串。 + /// + public static string PleaseSelectProtocol { + get { + return ResourceManager.GetString("PleaseSelectProtocol", resourceCulture); + } + } + + /// + /// 查找类似 Please select rules 的本地化字符串。 + /// + public static string PleaseSelectRules { + get { + return ResourceManager.GetString("PleaseSelectRules", resourceCulture); + } + } + + /// + /// 查找类似 Please select the server first 的本地化字符串。 + /// + public static string PleaseSelectServer { + get { + return ResourceManager.GetString("PleaseSelectServer", resourceCulture); + } + } + + /// + /// 查找类似 Global hotkey {0} registered failed, reason {1} 的本地化字符串。 + /// + public static string RegisterGlobalHotkeyFailed { + get { + return ResourceManager.GetString("RegisterGlobalHotkeyFailed", resourceCulture); + } + } + + /// + /// 查找类似 Global hotkey {0} registered successfully 的本地化字符串。 + /// + public static string RegisterGlobalHotkeySuccessfully { + get { + return ResourceManager.GetString("RegisterGlobalHotkeySuccessfully", resourceCulture); + } + } + + /// + /// 查找类似 Servers deduplication completed. Old: {0}, New: {1}. 的本地化字符串。 + /// + public static string RemoveDuplicateServerResult { + get { + return ResourceManager.GetString("RemoveDuplicateServerResult", resourceCulture); + } + } + + /// + /// 查找类似 Are you sure to remove the rules? 的本地化字符串。 + /// + public static string RemoveRules { + get { + return ResourceManager.GetString("RemoveRules", resourceCulture); + } + } + + /// + /// 查找类似 Are you sure to remove the server? 的本地化字符串。 + /// + public static string RemoveServer { + get { + return ResourceManager.GetString("RemoveServer", resourceCulture); + } + } + + /// + /// 查找类似 {0},One of the required. 的本地化字符串。 + /// + public static string RoutingRuleDetailRequiredTips { + get { + return ResourceManager.GetString("RoutingRuleDetailRequiredTips", resourceCulture); + } + } + + /// + /// 查找类似 Run as Admin 的本地化字符串。 + /// + public static string RunAsAdmin { + get { + return ResourceManager.GetString("RunAsAdmin", resourceCulture); + } + } + + /// + /// 查找类似 The client configuration file is saved at: {0} 的本地化字符串。 + /// + public static string SaveClientConfigurationIn { + get { + return ResourceManager.GetString("SaveClientConfigurationIn", resourceCulture); + } + } + + /// + /// 查找类似 {0} : {1}/s↑ | {2}/s↓ 的本地化字符串。 + /// + public static string SpeedDisplayText { + get { + return ResourceManager.GetString("SpeedDisplayText", resourceCulture); + } + } + + /// + /// 查找类似 Testing... 的本地化字符串。 + /// + public static string Speedtesting { + get { + return ResourceManager.GetString("Speedtesting", resourceCulture); + } + } + + /// + /// 查找类似 Test completed 的本地化字符串。 + /// + public static string SpeedtestingCompleted { + get { + return ResourceManager.GetString("SpeedtestingCompleted", resourceCulture); + } + } + + /// + /// 查找类似 Skip test 的本地化字符串。 + /// + public static string SpeedtestingSkip { + get { + return ResourceManager.GetString("SpeedtestingSkip", resourceCulture); + } + } + + /// + /// 查找类似 Test terminating... 的本地化字符串。 + /// + public static string SpeedtestingStop { + get { + return ResourceManager.GetString("SpeedtestingStop", resourceCulture); + } + } + + /// + /// 查找类似 Waiting for testing (press ESC to terminate)... 的本地化字符串。 + /// + public static string SpeedtestingWait { + get { + return ResourceManager.GetString("SpeedtestingWait", resourceCulture); + } + } + + /// + /// 查找类似 Start service ({0})... 的本地化字符串。 + /// + public static string StartService { + get { + return ResourceManager.GetString("StartService", resourceCulture); + } + } + + /// + /// 查找类似 Group please leave blank here 的本地化字符串。 + /// + public static string SubUrlTips { + get { + return ResourceManager.GetString("SubUrlTips", resourceCulture); + } + } + + /// + /// 查找类似 Configuration successful + ///{0} 的本地化字符串。 + /// + public static string SuccessfulConfiguration { + get { + return ResourceManager.GetString("SuccessfulConfiguration", resourceCulture); + } + } + + /// + /// 查找类似 Custom configuration server imported successfully 的本地化字符串。 + /// + public static string SuccessfullyImportedCustomServer { + get { + return ResourceManager.GetString("SuccessfullyImportedCustomServer", resourceCulture); + } + } + + /// + /// 查找类似 {0} servers have been imported from clipboard 的本地化字符串。 + /// + public static string SuccessfullyImportedServerViaClipboard { + get { + return ResourceManager.GetString("SuccessfullyImportedServerViaClipboard", resourceCulture); + } + } + + /// + /// 查找类似 Scan import URL successfully 的本地化字符串。 + /// + public static string SuccessfullyImportedServerViaScan { + get { + return ResourceManager.GetString("SuccessfullyImportedServerViaScan", resourceCulture); + } + } + + /// + /// 查找类似 System proxy 的本地化字符串。 + /// + public static string SystemProxy { + get { + return ResourceManager.GetString("SystemProxy", resourceCulture); + } + } + + /// + /// 查找类似 Address 的本地化字符串。 + /// + public static string TbAddress { + get { + return ResourceManager.GetString("TbAddress", resourceCulture); + } + } + + /// + /// 查找类似 AllowInsecure 的本地化字符串。 + /// + public static string TbAllowInsecure { + get { + return ResourceManager.GetString("TbAllowInsecure", resourceCulture); + } + } + + /// + /// 查找类似 ALPN 的本地化字符串。 + /// + public static string TbAlpn { + get { + return ResourceManager.GetString("TbAlpn", resourceCulture); + } + } + + /// + /// 查找类似 AlterID 的本地化字符串。 + /// + public static string TbAlterId { + get { + return ResourceManager.GetString("TbAlterId", resourceCulture); + } + } + + /// + /// 查找类似 AutoRefresh 的本地化字符串。 + /// + public static string TbAutoRefresh { + get { + return ResourceManager.GetString("TbAutoRefresh", resourceCulture); + } + } + + /// + /// 查找类似 Auto ScrollToEnd 的本地化字符串。 + /// + public static string TbAutoScrollToEnd { + get { + return ResourceManager.GetString("TbAutoScrollToEnd", resourceCulture); + } + } + + /// + /// 查找类似 Domain, ip, process are auto sorted when saving 的本地化字符串。 + /// + public static string TbAutoSort { + get { + return ResourceManager.GetString("TbAutoSort", resourceCulture); + } + } + + /// + /// 查找类似 Browse 的本地化字符串。 + /// + public static string TbBrowse { + get { + return ResourceManager.GetString("TbBrowse", resourceCulture); + } + } + + /// + /// 查找类似 Cancel 的本地化字符串。 + /// + public static string TbCancel { + get { + return ResourceManager.GetString("TbCancel", resourceCulture); + } + } + + /// + /// 查找类似 Clear system proxy 的本地化字符串。 + /// + public static string TbClearSystemProxy { + get { + return ResourceManager.GetString("TbClearSystemProxy", resourceCulture); + } + } + + /// + /// 查找类似 Confirm 的本地化字符串。 + /// + public static string TbConfirm { + get { + return ResourceManager.GetString("TbConfirm", resourceCulture); + } + } + + /// + /// 查找类似 Core Type 的本地化字符串。 + /// + public static string TbCoreType { + get { + return ResourceManager.GetString("TbCoreType", resourceCulture); + } + } + + /// + /// 查找类似 Display GUI 的本地化字符串。 + /// + public static string TbDisplayGUI { + get { + return ResourceManager.GetString("TbDisplayGUI", resourceCulture); + } + } + + /// + /// 查找类似 Display Log 的本地化字符串。 + /// + public static string TbDisplayLog { + get { + return ResourceManager.GetString("TbDisplayLog", resourceCulture); + } + } + + /// + /// 查找类似 Support DnsObject, Click to view the document 的本地化字符串。 + /// + public static string TbDnsObjectDoc { + get { + return ResourceManager.GetString("TbDnsObjectDoc", resourceCulture); + } + } + + /// + /// 查找类似 Please fill in DNS Structure, Click to view the document 的本地化字符串。 + /// + public static string TbDnsSingboxObjectDoc { + get { + return ResourceManager.GetString("TbDnsSingboxObjectDoc", resourceCulture); + } + } + + /// + /// 查找类似 Domain Matcher 的本地化字符串。 + /// + public static string TbdomainMatcher { + get { + return ResourceManager.GetString("TbdomainMatcher", resourceCulture); + } + } + + /// + /// 查找类似 Domain strategy 的本地化字符串。 + /// + public static string TbdomainStrategy { + get { + return ResourceManager.GetString("TbdomainStrategy", resourceCulture); + } + } + + /// + /// 查找类似 sing-box domain strategy 的本地化字符串。 + /// + public static string TbdomainStrategy4Singbox { + get { + return ResourceManager.GetString("TbdomainStrategy4Singbox", resourceCulture); + } + } + + /// + /// 查找类似 Edit 的本地化字符串。 + /// + public static string TbEdit { + get { + return ResourceManager.GetString("TbEdit", resourceCulture); + } + } + + /// + /// 查找类似 Enable advanced function 的本地化字符串。 + /// + public static string TbenableRoutingAdvanced { + get { + return ResourceManager.GetString("TbenableRoutingAdvanced", resourceCulture); + } + } + + /// + /// 查找类似 Enable Tun 的本地化字符串。 + /// + public static string TbEnableTunAs { + get { + return ResourceManager.GetString("TbEnableTunAs", resourceCulture); + } + } + + /// + /// 查找类似 Fingerprint 的本地化字符串。 + /// + public static string TbFingerprint { + get { + return ResourceManager.GetString("TbFingerprint", resourceCulture); + } + } + + /// + /// 查找类似 Flow 的本地化字符串。 + /// + public static string TbFlow5 { + get { + return ResourceManager.GetString("TbFlow5", resourceCulture); + } + } + + /// + /// 查找类似 Global Hotkey Settings 的本地化字符串。 + /// + public static string TbGlobalHotkeySetting { + get { + return ResourceManager.GetString("TbGlobalHotkeySetting", resourceCulture); + } + } + + /// + /// 查找类似 Set directly by pressing the keyboard, take effect after restart 的本地化字符串。 + /// + public static string TbGlobalHotkeySettingTip { + get { + return ResourceManager.GetString("TbGlobalHotkeySettingTip", resourceCulture); + } + } + + /// + /// 查找类似 Generate 的本地化字符串。 + /// + public static string TbGUID { + get { + return ResourceManager.GetString("TbGUID", resourceCulture); + } + } + + /// + /// 查找类似 Camouflage type 的本地化字符串。 + /// + public static string TbHeaderType { + get { + return ResourceManager.GetString("TbHeaderType", resourceCulture); + } + } + + /// + /// 查找类似 Congestion control 的本地化字符串。 + /// + public static string TbHeaderType8 { + get { + return ResourceManager.GetString("TbHeaderType8", resourceCulture); + } + } + + /// + /// 查找类似 UUID(id) 的本地化字符串。 + /// + public static string TbId { + get { + return ResourceManager.GetString("TbId", resourceCulture); + } + } + + /// + /// 查找类似 Password 的本地化字符串。 + /// + public static string TbId3 { + get { + return ResourceManager.GetString("TbId3", resourceCulture); + } + } + + /// + /// 查找类似 Password(Optional) 的本地化字符串。 + /// + public static string TbId4 { + get { + return ResourceManager.GetString("TbId4", resourceCulture); + } + } + + /// + /// 查找类似 UUID(id) 的本地化字符串。 + /// + public static string TbId5 { + get { + return ResourceManager.GetString("TbId5", resourceCulture); + } + } + + /// + /// 查找类似 Address(Ip,Ipv6) 的本地化字符串。 + /// + public static string TbLocalAddress { + get { + return ResourceManager.GetString("TbLocalAddress", resourceCulture); + } + } + + /// + /// 查找类似 Transport protocol(network) 的本地化字符串。 + /// + public static string TbNetwork { + get { + return ResourceManager.GetString("TbNetwork", resourceCulture); + } + } + + /// + /// 查找类似 Do not change system proxy 的本地化字符串。 + /// + public static string TbNotChangeSystemProxy { + get { + return ResourceManager.GetString("TbNotChangeSystemProxy", resourceCulture); + } + } + + /// + /// 查找类似 Path 的本地化字符串。 + /// + public static string TbPath { + get { + return ResourceManager.GetString("TbPath", resourceCulture); + } + } + + /// + /// 查找类似 obfs password 的本地化字符串。 + /// + public static string TbPath7 { + get { + return ResourceManager.GetString("TbPath7", resourceCulture); + } + } + + /// + /// 查找类似 Port 的本地化字符串。 + /// + public static string TbPort { + get { + return ResourceManager.GetString("TbPort", resourceCulture); + } + } + + /// + /// 查找类似 txtPreSocksPort 的本地化字符串。 + /// + public static string TbPreSocksPort { + get { + return ResourceManager.GetString("TbPreSocksPort", resourceCulture); + } + } + + /// + /// 查找类似 PrivateKey 的本地化字符串。 + /// + public static string TbPrivateKey { + get { + return ResourceManager.GetString("TbPrivateKey", resourceCulture); + } + } + + /// + /// 查找类似 PublicKey 的本地化字符串。 + /// + public static string TbPublicKey { + get { + return ResourceManager.GetString("TbPublicKey", resourceCulture); + } + } + + /// + /// 查找类似 Alias (remarks) 的本地化字符串。 + /// + public static string TbRemarks { + get { + return ResourceManager.GetString("TbRemarks", resourceCulture); + } + } + + /// + /// 查找类似 Camouflage domain(host) 的本地化字符串。 + /// + public static string TbRequestHost { + get { + return ResourceManager.GetString("TbRequestHost", resourceCulture); + } + } + + /// + /// 查找类似 Reserved(2,3,4) 的本地化字符串。 + /// + public static string TbReserved { + get { + return ResourceManager.GetString("TbReserved", resourceCulture); + } + } + + /// + /// 查找类似 Reset 的本地化字符串。 + /// + public static string TbReset { + get { + return ResourceManager.GetString("TbReset", resourceCulture); + } + } + + /// + /// 查找类似 Domain 的本地化字符串。 + /// + public static string TbRoutingRuleDomain { + get { + return ResourceManager.GetString("TbRoutingRuleDomain", resourceCulture); + } + } + + /// + /// 查找类似 IP or IP CIDR 的本地化字符串。 + /// + public static string TbRoutingRuleIP { + get { + return ResourceManager.GetString("TbRoutingRuleIP", resourceCulture); + } + } + + /// + /// 查找类似 Full process name (Tun mode) 的本地化字符串。 + /// + public static string TbRoutingRuleProcess { + get { + return ResourceManager.GetString("TbRoutingRuleProcess", resourceCulture); + } + } + + /// + /// 查找类似 3.Block Domain or IP 的本地化字符串。 + /// + public static string TbRoutingTabBlock { + get { + return ResourceManager.GetString("TbRoutingTabBlock", resourceCulture); + } + } + + /// + /// 查找类似 2.Direct Domain or IP 的本地化字符串。 + /// + public static string TbRoutingTabDirect { + get { + return ResourceManager.GetString("TbRoutingTabDirect", resourceCulture); + } + } + + /// + /// 查找类似 1.Proxy Domain or IP 的本地化字符串。 + /// + public static string TbRoutingTabProxy { + get { + return ResourceManager.GetString("TbRoutingTabProxy", resourceCulture); + } + } + + /// + /// 查找类似 Pre-defined Rule Set List 的本地化字符串。 + /// + public static string TbRoutingTabRuleList { + get { + return ResourceManager.GetString("TbRoutingTabRuleList", resourceCulture); + } + } + + /// + /// 查找类似 *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> 的本地化字符串。 + /// + public static string TbRoutingTips { + get { + return ResourceManager.GetString("TbRoutingTips", resourceCulture); + } + } + + /// + /// 查找类似 (Domain or IP or ProcName) and Port and Protocol and InboundTag => OutboundTag 的本地化字符串。 + /// + public static string TbRuleMatchingTips { + get { + return ResourceManager.GetString("TbRuleMatchingTips", resourceCulture); + } + } + + /// + /// 查找类似 Ruleobject Doc 的本地化字符串。 + /// + public static string TbRuleobjectDoc { + get { + return ResourceManager.GetString("TbRuleobjectDoc", resourceCulture); + } + } + + /// + /// 查找类似 Encryption method (security) 的本地化字符串。 + /// + public static string TbSecurity { + get { + return ResourceManager.GetString("TbSecurity", resourceCulture); + } + } + + /// + /// 查找类似 Encryption 的本地化字符串。 + /// + public static string TbSecurity3 { + get { + return ResourceManager.GetString("TbSecurity3", resourceCulture); + } + } + + /// + /// 查找类似 User(Optional) 的本地化字符串。 + /// + public static string TbSecurity4 { + get { + return ResourceManager.GetString("TbSecurity4", resourceCulture); + } + } + + /// + /// 查找类似 Encryption 的本地化字符串。 + /// + public static string TbSecurity5 { + get { + return ResourceManager.GetString("TbSecurity5", resourceCulture); + } + } + + /// + /// 查找类似 Set system proxy 的本地化字符串。 + /// + public static string TbSetSystemProxy { + get { + return ResourceManager.GetString("TbSetSystemProxy", resourceCulture); + } + } + + /// + /// 查找类似 Click to import default DNS config 的本地化字符串。 + /// + public static string TbSettingDnsImportDefConfig { + get { + return ResourceManager.GetString("TbSettingDnsImportDefConfig", resourceCulture); + } + } + + /// + /// 查找类似 Advanced proxy settings, protocol selection (optional) 的本地化字符串。 + /// + public static string TbSettingsAdvancedProtocol { + get { + return ResourceManager.GetString("TbSettingsAdvancedProtocol", resourceCulture); + } + } + + /// + /// 查找类似 Allow connections from the LAN 的本地化字符串。 + /// + public static string TbSettingsAllowLAN { + get { + return ResourceManager.GetString("TbSettingsAllowLAN", resourceCulture); + } + } + + /// + /// 查找类似 Auto hide startup 的本地化字符串。 + /// + public static string TbSettingsAutoHideStartup { + get { + return ResourceManager.GetString("TbSettingsAutoHideStartup", resourceCulture); + } + } + + /// + /// 查找类似 Automatic update interval of Geo (hours) 的本地化字符串。 + /// + public static string TbSettingsAutoUpdateInterval { + get { + return ResourceManager.GetString("TbSettingsAutoUpdateInterval", resourceCulture); + } + } + + /// + /// 查找类似 Color 的本地化字符串。 + /// + public static string TbSettingsColor { + get { + return ResourceManager.GetString("TbSettingsColor", resourceCulture); + } + } + + /// + /// 查找类似 Dark Mode 的本地化字符串。 + /// + public static string TbSettingsColorMode { + get { + return ResourceManager.GetString("TbSettingsColorMode", resourceCulture); + } + } + + /// + /// 查找类似 Core: basic settings 的本地化字符串。 + /// + public static string TbSettingsCore { + get { + return ResourceManager.GetString("TbSettingsCore", resourceCulture); + } + } + + /// + /// 查找类似 V2ray DNS settings 的本地化字符串。 + /// + public static string TbSettingsCoreDns { + get { + return ResourceManager.GetString("TbSettingsCoreDns", resourceCulture); + } + } + + /// + /// 查找类似 sing-box DNS settings 的本地化字符串。 + /// + public static string TbSettingsCoreDnsSingbox { + get { + return ResourceManager.GetString("TbSettingsCoreDnsSingbox", resourceCulture); + } + } + + /// + /// 查找类似 Core: KCP settings 的本地化字符串。 + /// + public static string TbSettingsCoreKcp { + get { + return ResourceManager.GetString("TbSettingsCoreKcp", resourceCulture); + } + } + + /// + /// 查找类似 CoreType settings 的本地化字符串。 + /// + public static string TbSettingsCoreType { + get { + return ResourceManager.GetString("TbSettingsCoreType", resourceCulture); + } + } + + /// + /// 查找类似 FontFamily(Require restart) 的本地化字符串。 + /// + public static string TbSettingsCurrentFontFamily { + get { + return ResourceManager.GetString("TbSettingsCurrentFontFamily", resourceCulture); + } + } + + /// + /// 查找类似 Copy the font TTF/TTC file to the directory guiFonts, restart the settings 的本地化字符串。 + /// + public static string TbSettingsCurrentFontFamilyTip { + get { + return ResourceManager.GetString("TbSettingsCurrentFontFamilyTip", resourceCulture); + } + } + + /// + /// 查找类似 AllowInsecure 的本地化字符串。 + /// + public static string TbSettingsDefAllowInsecure { + get { + return ResourceManager.GetString("TbSettingsDefAllowInsecure", resourceCulture); + } + } + + /// + /// 查找类似 Default TLS fingerprint 的本地化字符串。 + /// + public static string TbSettingsDefFingerprint { + get { + return ResourceManager.GetString("TbSettingsDefFingerprint", resourceCulture); + } + } + + /// + /// 查找类似 User-Agent 的本地化字符串。 + /// + public static string TbSettingsDefUserAgent { + get { + return ResourceManager.GetString("TbSettingsDefUserAgent", resourceCulture); + } + } + + /// + /// 查找类似 This parameter is valid only for tcp/http and ws 的本地化字符串。 + /// + public static string TbSettingsDefUserAgentTips { + get { + return ResourceManager.GetString("TbSettingsDefUserAgentTips", resourceCulture); + } + } + + /// + /// 查找类似 Outbound Freedom domainStrategy 的本地化字符串。 + /// + public static string TbSettingsDomainStrategy4Freedom { + get { + return ResourceManager.GetString("TbSettingsDomainStrategy4Freedom", resourceCulture); + } + } + + /// + /// 查找类似 Double-click server make active 的本地化字符串。 + /// + public static string TbSettingsDoubleClick2Activate { + get { + return ResourceManager.GetString("TbSettingsDoubleClick2Activate", resourceCulture); + } + } + + /// + /// 查找类似 Automatically adjust column width after updating subscription 的本地化字符串。 + /// + public static string TbSettingsEnableAutoAdjustMainLvColWidth { + get { + return ResourceManager.GetString("TbSettingsEnableAutoAdjustMainLvColWidth", resourceCulture); + } + } + + /// + /// 查找类似 Enable cache file for sing-box (ruleset files) 的本地化字符串。 + /// + public static string TbSettingsEnableCacheFile4Sbox { + get { + return ResourceManager.GetString("TbSettingsEnableCacheFile4Sbox", resourceCulture); + } + } + + /// + /// 查找类似 Check for pre-release updates 的本地化字符串。 + /// + public static string TbSettingsEnableCheckPreReleaseUpdate { + get { + return ResourceManager.GetString("TbSettingsEnableCheckPreReleaseUpdate", resourceCulture); + } + } + + /// + /// 查找类似 Enable Server Drag Drop Sort(Require restart) 的本地化字符串。 + /// + public static string TbSettingsEnableDragDropSort { + get { + return ResourceManager.GetString("TbSettingsEnableDragDropSort", resourceCulture); + } + } + + /// + /// 查找类似 Enable additional Inbound 的本地化字符串。 + /// + public static string TbSettingsEnableExInbound { + get { + return ResourceManager.GetString("TbSettingsEnableExInbound", resourceCulture); + } + } + + /// + /// 查找类似 Enable fragment 的本地化字符串。 + /// + public static string TbSettingsEnableFragment { + get { + return ResourceManager.GetString("TbSettingsEnableFragment", resourceCulture); + } + } + + /// + /// 查找类似 Use Xray and enable non-Tun mode, which conflicts with the group previous proxy 的本地化字符串。 + /// + public static string TbSettingsEnableFragmentTips { + get { + return ResourceManager.GetString("TbSettingsEnableFragmentTips", resourceCulture); + } + } + + /// + /// 查找类似 Enable hardware acceleration(Require restart) 的本地化字符串。 + /// + public static string TbSettingsEnableHWA { + get { + return ResourceManager.GetString("TbSettingsEnableHWA", resourceCulture); + } + } + + /// + /// 查找类似 Enable IPv6 Address 的本地化字符串。 + /// + public static string TbSettingsEnableIPv6Address { + get { + return ResourceManager.GetString("TbSettingsEnableIPv6Address", resourceCulture); + } + } + + /// + /// 查找类似 Updating subscription, only determine remarks exists 的本地化字符串。 + /// + public static string TbSettingsEnableUpdateSubOnlyRemarksExist { + get { + return ResourceManager.GetString("TbSettingsEnableUpdateSubOnlyRemarksExist", resourceCulture); + } + } + + /// + /// 查找类似 Exception 的本地化字符串。 + /// + public static string TbSettingsException { + get { + return ResourceManager.GetString("TbSettingsException", resourceCulture); + } + } + + /// + /// 查找类似 Exception. Do not use proxy server for addresses beginning with,Use semicolon (;) 的本地化字符串。 + /// + public static string TbSettingsExceptionTip { + get { + return ResourceManager.GetString("TbSettingsExceptionTip", resourceCulture); + } + } + + /// + /// 查找类似 Follow System Theme 的本地化字符串。 + /// + public static string TbSettingsFollowSystemTheme { + get { + return ResourceManager.GetString("TbSettingsFollowSystemTheme", resourceCulture); + } + } + + /// + /// 查找类似 Font Size 的本地化字符串。 + /// + public static string TbSettingsFontSize { + get { + return ResourceManager.GetString("TbSettingsFontSize", resourceCulture); + } + } + + /// + /// 查找类似 HTTP Port 的本地化字符串。 + /// + public static string TbSettingsHttpPort { + get { + return ResourceManager.GetString("TbSettingsHttpPort", resourceCulture); + } + } + + /// + /// 查找类似 Hysteria Max bandwidth (Up/Dw) 的本地化字符串。 + /// + public static string TbSettingsHysteriaBandwidth { + get { + return ResourceManager.GetString("TbSettingsHysteriaBandwidth", resourceCulture); + } + } + + /// + /// 查找类似 Ignore Geo files when updating core 的本地化字符串。 + /// + public static string TbSettingsIgnoreGeoUpdateCore { + get { + return ResourceManager.GetString("TbSettingsIgnoreGeoUpdateCore", resourceCulture); + } + } + + /// + /// 查找类似 Keep older when deduplication 的本地化字符串。 + /// + public static string TbSettingsKeepOlderDedupl { + get { + return ResourceManager.GetString("TbSettingsKeepOlderDedupl", resourceCulture); + } + } + + /// + /// 查找类似 Language (Restart) 的本地化字符串。 + /// + public static string TbSettingsLanguage { + get { + return ResourceManager.GetString("TbSettingsLanguage", resourceCulture); + } + } + + /// + /// 查找类似 Enable Log 的本地化字符串。 + /// + public static string TbSettingsLogEnabled { + get { + return ResourceManager.GetString("TbSettingsLogEnabled", resourceCulture); + } + } + + /// + /// 查找类似 Enable logging to file 的本地化字符串。 + /// + public static string TbSettingsLogEnabledToFile { + get { + return ResourceManager.GetString("TbSettingsLogEnabledToFile", resourceCulture); + } + } + + /// + /// 查找类似 Log Level 的本地化字符串。 + /// + public static string TbSettingsLogLevel { + get { + return ResourceManager.GetString("TbSettingsLogLevel", resourceCulture); + } + } + + /// + /// 查找类似 sing-box Mux Protocol 的本地化字符串。 + /// + public static string TbSettingsMux4SboxProtocol { + get { + return ResourceManager.GetString("TbSettingsMux4SboxProtocol", resourceCulture); + } + } + + /// + /// 查找类似 Turn on Mux Multiplexing 的本地化字符串。 + /// + public static string TbSettingsMuxEnabled { + get { + return ResourceManager.GetString("TbSettingsMuxEnabled", resourceCulture); + } + } + + /// + /// 查找类似 v2rayN settings 的本地化字符串。 + /// + public static string TbSettingsN { + get { + return ResourceManager.GetString("TbSettingsN", resourceCulture); + } + } + + /// + /// 查找类似 New Port for LAN 的本地化字符串。 + /// + public static string TbSettingsNewPort4LAN { + get { + return ResourceManager.GetString("TbSettingsNewPort4LAN", resourceCulture); + } + } + + /// + /// 查找类似 Auth pass 的本地化字符串。 + /// + public static string TbSettingsPass { + get { + return ResourceManager.GetString("TbSettingsPass", resourceCulture); + } + } + + /// + /// 查找类似 Custom DNS (multiple, separated by commas (,)) 的本地化字符串。 + /// + public static string TbSettingsRemoteDNS { + get { + return ResourceManager.GetString("TbSettingsRemoteDNS", resourceCulture); + } + } + + /// + /// 查找类似 RouteOnly 的本地化字符串。 + /// + public static string TbSettingsRouteOnly { + get { + return ResourceManager.GetString("TbSettingsRouteOnly", resourceCulture); + } + } + + /// + /// 查找类似 Set Win10 UWP Loopback 的本地化字符串。 + /// + public static string TbSettingsSetUWP { + get { + return ResourceManager.GetString("TbSettingsSetUWP", resourceCulture); + } + } + + /// + /// 查找类似 Turn on Sniffing 的本地化字符串。 + /// + public static string TbSettingsSniffingEnabled { + get { + return ResourceManager.GetString("TbSettingsSniffingEnabled", resourceCulture); + } + } + + /// + /// 查找类似 SOCKS Port 的本地化字符串。 + /// + public static string TbSettingsSocksPort { + get { + return ResourceManager.GetString("TbSettingsSocksPort", resourceCulture); + } + } + + /// + /// 查找类似 HTTP port=SOCKS port+1;Pac port=SOCKS port+4;API port=SOCKS port+5; 的本地化字符串。 + /// + public static string TbSettingsSocksPortTip { + get { + return ResourceManager.GetString("TbSettingsSocksPortTip", resourceCulture); + } + } + + /// + /// 查找类似 Speed Ping Test URL 的本地化字符串。 + /// + public static string TbSettingsSpeedPingTestUrl { + get { + return ResourceManager.GetString("TbSettingsSpeedPingTestUrl", resourceCulture); + } + } + + /// + /// 查找类似 SpeedTest Single Timeout Value 的本地化字符串。 + /// + public static string TbSettingsSpeedTestTimeout { + get { + return ResourceManager.GetString("TbSettingsSpeedTestTimeout", resourceCulture); + } + } + + /// + /// 查找类似 SpeedTest URL 的本地化字符串。 + /// + public static string TbSettingsSpeedTestUrl { + get { + return ResourceManager.GetString("TbSettingsSpeedTestUrl", resourceCulture); + } + } + + /// + /// 查找类似 Start on boot 的本地化字符串。 + /// + public static string TbSettingsStartBoot { + get { + return ResourceManager.GetString("TbSettingsStartBoot", resourceCulture); + } + } + + /// + /// 查找类似 Set this with admin privileges, get admin privileges after startup 的本地化字符串。 + /// + public static string TbSettingsStartBootTip { + get { + return ResourceManager.GetString("TbSettingsStartBootTip", resourceCulture); + } + } + + /// + /// 查找类似 Enable Statistics (Require restart) 的本地化字符串。 + /// + public static string TbSettingsStatistics { + get { + return ResourceManager.GetString("TbSettingsStatistics", resourceCulture); + } + } + + /// + /// 查找类似 Subscription conversion URL 的本地化字符串。 + /// + public static string TbSettingsSubConvert { + get { + return ResourceManager.GetString("TbSettingsSubConvert", resourceCulture); + } + } + + /// + /// 查找类似 System proxy settings 的本地化字符串。 + /// + public static string TbSettingsSystemproxy { + get { + return ResourceManager.GetString("TbSettingsSystemproxy", resourceCulture); + } + } + + /// + /// 查找类似 Enable Security Protocol TLS v1.3 (subscription/update) 的本地化字符串。 + /// + public static string TbSettingsTLS13 { + get { + return ResourceManager.GetString("TbSettingsTLS13", resourceCulture); + } + } + + /// + /// 查找类似 Tray right-click menu servers display limit 的本地化字符串。 + /// + public static string TbSettingsTrayMenuServersLimit { + get { + return ResourceManager.GetString("TbSettingsTrayMenuServersLimit", resourceCulture); + } + } + + /// + /// 查找类似 TunMode settings 的本地化字符串。 + /// + public static string TbSettingsTunMode { + get { + return ResourceManager.GetString("TbSettingsTunMode", resourceCulture); + } + } + + /// + /// 查找类似 Bypass Mode 的本地化字符串。 + /// + public static string TbSettingsTunModeBypassMode { + get { + return ResourceManager.GetString("TbSettingsTunModeBypassMode", resourceCulture); + } + } + + /// + /// 查找类似 Custom Template 的本地化字符串。 + /// + public static string TbSettingsTunModeCustomTemplate { + get { + return ResourceManager.GetString("TbSettingsTunModeCustomTemplate", resourceCulture); + } + } + + /// + /// 查找类似 Direct IP CIDR, separated by commas (,) 的本地化字符串。 + /// + public static string TbSettingsTunModeDirectIP { + get { + return ResourceManager.GetString("TbSettingsTunModeDirectIP", resourceCulture); + } + } + + /// + /// 查找类似 Direct Process name, separated by commas (,) 的本地化字符串。 + /// + public static string TbSettingsTunModeDirectProcess { + get { + return ResourceManager.GetString("TbSettingsTunModeDirectProcess", resourceCulture); + } + } + + /// + /// 查找类似 DNS object, e.g. {"servers":[]} 的本地化字符串。 + /// + public static string TbSettingsTunModeDNS { + get { + return ResourceManager.GetString("TbSettingsTunModeDNS", resourceCulture); + } + } + + /// + /// 查找类似 Proxy IP CIDR, separated by commas (,) 的本地化字符串。 + /// + public static string TbSettingsTunModeProxyIP { + get { + return ResourceManager.GetString("TbSettingsTunModeProxyIP", resourceCulture); + } + } + + /// + /// 查找类似 Proxy Process name, separated by commas (,) 的本地化字符串。 + /// + public static string TbSettingsTunModeProxyProcess { + get { + return ResourceManager.GetString("TbSettingsTunModeProxyProcess", resourceCulture); + } + } + + /// + /// 查找类似 Show console 的本地化字符串。 + /// + public static string TbSettingsTunModeShowWindow { + get { + return ResourceManager.GetString("TbSettingsTunModeShowWindow", resourceCulture); + } + } + + /// + /// 查找类似 Enable UDP 的本地化字符串。 + /// + public static string TbSettingsUdpEnabled { + get { + return ResourceManager.GetString("TbSettingsUdpEnabled", resourceCulture); + } + } + + /// + /// 查找类似 Auth user 的本地化字符串。 + /// + public static string TbSettingsUser { + get { + return ResourceManager.GetString("TbSettingsUser", resourceCulture); + } + } + + /// + /// 查找类似 Use System Hosts 的本地化字符串。 + /// + public static string TbSettingsUseSystemHosts { + get { + return ResourceManager.GetString("TbSettingsUseSystemHosts", resourceCulture); + } + } + + /// + /// 查找类似 ShortId 的本地化字符串。 + /// + public static string TbShortId { + get { + return ResourceManager.GetString("TbShortId", resourceCulture); + } + } + + /// + /// 查找类似 SNI 的本地化字符串。 + /// + public static string TbSNI { + get { + return ResourceManager.GetString("TbSNI", resourceCulture); + } + } + + /// + /// 查找类似 SpiderX 的本地化字符串。 + /// + public static string TbSpiderX { + get { + return ResourceManager.GetString("TbSpiderX", resourceCulture); + } + } + + /// + /// 查找类似 TLS 的本地化字符串。 + /// + public static string TbStreamSecurity { + get { + return ResourceManager.GetString("TbStreamSecurity", resourceCulture); + } + } + + /// + /// 查找类似 PAC mode 的本地化字符串。 + /// + public static string TbSystemProxyPac { + get { + return ResourceManager.GetString("TbSystemProxyPac", resourceCulture); + } + } + + /// + /// 查找类似 The ping of current service: {0} ms 的本地化字符串。 + /// + public static string TestMeOutput { + get { + return ResourceManager.GetString("TestMeOutput", resourceCulture); + } + } + + /// + /// 查找类似 Routing setting is changed 的本地化字符串。 + /// + public static string TipChangeRouting { + get { + return ResourceManager.GetString("TipChangeRouting", resourceCulture); + } + } + + /// + /// 查找类似 System proxy setting is changed 的本地化字符串。 + /// + public static string TipChangeSystemProxy { + get { + return ResourceManager.GetString("TipChangeSystemProxy", resourceCulture); + } + } + + /// + /// 查找类似 Please turn off when there is an abnormal disconnection 的本地化字符串。 + /// + public static string TipDisplayLog { + get { + return ResourceManager.GetString("TipDisplayLog", resourceCulture); + } + } + + /// + /// 查找类似 *Default value tcp 的本地化字符串。 + /// + public static string TipNetwork { + get { + return ResourceManager.GetString("TipNetwork", resourceCulture); + } + } + + /// + /// 查找类似 * After setting this value, an socks service will be started using Xray/sing-box(Tun) to provide functions such as speed display 的本地化字符串。 + /// + public static string TipPreSocksPort { + get { + return ResourceManager.GetString("TipPreSocksPort", resourceCulture); + } + } + + /// + /// 查找类似 Too many servers, please open the main interface 的本地化字符串。 + /// + public static string TooManyServersTip { + get { + return ResourceManager.GetString("TooManyServersTip", resourceCulture); + } + } + + /// + /// 查找类似 *tcp camouflage type 的本地化字符串。 + /// + public static string TransportHeaderTypeTip1 { + get { + return ResourceManager.GetString("TransportHeaderTypeTip1", resourceCulture); + } + } + + /// + /// 查找类似 *kcp camouflage type 的本地化字符串。 + /// + public static string TransportHeaderTypeTip2 { + get { + return ResourceManager.GetString("TransportHeaderTypeTip2", resourceCulture); + } + } + + /// + /// 查找类似 *QUIC camouflage type 的本地化字符串。 + /// + public static string TransportHeaderTypeTip3 { + get { + return ResourceManager.GetString("TransportHeaderTypeTip3", resourceCulture); + } + } + + /// + /// 查找类似 *grpc mode 的本地化字符串。 + /// + public static string TransportHeaderTypeTip4 { + get { + return ResourceManager.GetString("TransportHeaderTypeTip4", resourceCulture); + } + } + + /// + /// 查找类似 *ws/httpupgrade path 的本地化字符串。 + /// + public static string TransportPathTip1 { + get { + return ResourceManager.GetString("TransportPathTip1", resourceCulture); + } + } + + /// + /// 查找类似 *h2 path 的本地化字符串。 + /// + public static string TransportPathTip2 { + get { + return ResourceManager.GetString("TransportPathTip2", resourceCulture); + } + } + + /// + /// 查找类似 *QUIC key/KCP seed 的本地化字符串。 + /// + public static string TransportPathTip3 { + get { + return ResourceManager.GetString("TransportPathTip3", resourceCulture); + } + } + + /// + /// 查找类似 *grpc serviceName 的本地化字符串。 + /// + public static string TransportPathTip4 { + get { + return ResourceManager.GetString("TransportPathTip4", resourceCulture); + } + } + + /// + /// 查找类似 *kcp seed 的本地化字符串。 + /// + public static string TransportPathTip5 { + get { + return ResourceManager.GetString("TransportPathTip5", resourceCulture); + } + } + + /// + /// 查找类似 *http host Separated by commas (,) 的本地化字符串。 + /// + public static string TransportRequestHostTip1 { + get { + return ResourceManager.GetString("TransportRequestHostTip1", resourceCulture); + } + } + + /// + /// 查找类似 *ws/httpupgrade host 的本地化字符串。 + /// + public static string TransportRequestHostTip2 { + get { + return ResourceManager.GetString("TransportRequestHostTip2", resourceCulture); + } + } + + /// + /// 查找类似 *h2 host Separated by commas (,) 的本地化字符串。 + /// + public static string TransportRequestHostTip3 { + get { + return ResourceManager.GetString("TransportRequestHostTip3", resourceCulture); + } + } + + /// + /// 查找类似 *QUIC security 的本地化字符串。 + /// + public static string TransportRequestHostTip4 { + get { + return ResourceManager.GetString("TransportRequestHostTip4", resourceCulture); + } + } + + /// + /// 查找类似 *grpc Authority 的本地化字符串。 + /// + public static string TransportRequestHostTip5 { + get { + return ResourceManager.GetString("TransportRequestHostTip5", resourceCulture); + } + } + + /// + /// 查找类似 Ungrouped 的本地化字符串。 + /// + public static string UngroupedServers { + get { + return ResourceManager.GetString("UngroupedServers", resourceCulture); + } + } + } +} diff --git a/v2rayN/v2rayN/Resx/ResUI.fa-Ir.resx b/v2rayN/v2rayN/Resx/ResUI.fa-Ir.resx new file mode 100755 index 0000000..f539cd2 --- /dev/null +++ b/v2rayN/v2rayN/Resx/ResUI.fa-Ir.resx @@ -0,0 +1,1009 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + صادرات دسته ای محتوای اشتراک به کلیپ بورد با موفقیت انجام شد + + + Batch export share URL to clipboard successfully + + + لطفا ابتدا تنظیمات سرور را بررسی کنید + + + فرمت پیکربندی نادرست است + + + توجه داشته باشید که پیکربندی سفارشی کاملاً به پیکربندی خود شما بستگی دارد و با همه تنظیمات کار نمی کند. اگر می خواهید از پروکسی سیستم استفاده کنید، لطفاً پورت درحال شنود را به صورت دستی تغییر دهید. + + + درحال دانلود... + + + دانلود + + + Whether to download? {0} + + + تبدیل فایل پیکربندی انجام نشد + + + فایل پیکربندی پیش فرض ایجاد نشد + + + پیکربندی پیش فرض دریافت نشد + + + سرور پیکربندی سفارشی وارد نشد + + + فایل پیکربندی خوانده نشد + + + لطفا فرمت صحیح پورت سرور را پر کنید + + + لطفاً پارامترهای KCP را به درستی پر کنید + + + لطفاً پورت گوش دادن محلی را پر کنید + + + لطفا رمز عبور را وارد کنید + + + لطفا آدرس سرور را وارد کنید + + + لطفا شناسه کاربری را وارد کنید + + + فایل پیکربندی مشتری صحیح نیست، لطفا بررسی کنید + + + پیکربندی درستی نیست، لطفا بررسی کنید + + + فایل پیکربندی سرور صحیح نیست، لطفا بررسی کنید + + + پیکربندی اولیه + + + {0} {1} در حال حاضر به روز است. + + + {0} {1} در حال حاضر به روز است. + + + آدرس + + + امنیت + + + پورت + + + نوع + + + گروه فرعی + + + ترافیک دانلود امروز + + + ترافیک اپلود امروز + + + کل ترافیک دانلود + + + کل ترافیک آپلود + + + جابجایی + + + محتوای اشتراک اصلی را پاک کنید + + + دانلود Core با موفقیت + + + محتوای اشتراک وارد نشد + + + محتوای اشتراک با موفقیت دریافت شد + + + هیچ اشتراک معتبری تنظیم نشده است + + + Resolve {0} successfully + + + شروع به دریافت اشتراک شد + + + شروع بروزرسانی {0}... + + + محتوای اشتراک نامعتبر است + + + در حال باز کردن بسته می باشد ... + + + بروزرسانی اشتراک به پایان رسید + + + بروزرسانی اشتراک شروع شد + + + هسته با موفقیت بروزرسانی شد + + + هسته با موفقیت بروزرسانی شد! راه اندازی مجدد سرویس... + + + Non-VMess or ss protocol + + + non-standard service, this feature is invalid + + + The Core file (file name: {1}) was not found under the folder ({0}), please download and put it in the folder, download address: {2} + + + Scan completed, no valid QR code found + + + عملیات انجام نشد، لطفا بررسی کنید و دوباره امتحان کنید + + + Please Fill Remarks + + + لطفاً روش رمزگذاری را انتخاب کنید + + + لطفا یک پروتکل انتخاب کنید + + + لطفا ابتدا سرور را انتخاب کنید + + + Servers deduplication completed. Old: {0}, New: {1}. + + + آیا مطمئن هستید که سرور را حذف می کنید؟ + + + The client configuration file is saved at: {0} + + + Start service ({0})... + + + پیکربندی با موفقیت انجام شد +{0} + + + سرور پیکربندی سفارشی با موفقیت وارد شد. + + + {0} سرورها از کلیپ بورد وارد شده اند. + + + اسکن URL وارد کردن با موفقیت + + + پینگ سرویس فعلی: {0} ms + + + موفقیت عملیات + + + لطفا قوانین را انتخاب کنید + + + آیا مطمئن هستید که قوانین را حذف می کنید؟ + + + {0},یکی از مورد نیاز. + + + Remarks + + + Url(Optional) + + + Count + + + Please fill in the address (Url) + + + Do you want to append rules? Choose yes to append, choose otherwise to replace + + + دانلود GeoFile: {0} با موفقیت + + + اطلاعات + + + نماد سفارشی + + + لطفاً DNS سفارشی صحیح را پر کنید + + + *ws path + + + *h2 path + + + *QUIC key/Kcp seed + + + *grpc serviceName + + + *http host Separated by commas (,) + + + *ws host + + + *h2 host Separated by commas (,) + + + *QUIC securty + + + *tcp camouflage type + + + *kcp camouflage type + + + *QUIC camouflage type + + + *grpc mode + + + TLS + + + *Kcp seed + + + Global hotkey {0} registered failed, reason {1} + + + Global hotkey {0} registered successfully + + + گروه بندی نشده + + + همه سرورها + + + Please browse to import server configuration + + + پروکسی سیستم + + + درحال تست کردن... + + + تعداد سرورها خیلی زیاد است، لطفا رابط اصلی را باز کنید + + + LAN + + + محلی + + + فیلتر سرورها + + + بررسی بروزرسانی + + + بستن + + + خروج + + + تنظیم کلید میانبر کلی + + + کمک + + + تنظیمات پارامتر + + + ترفیع + + + بارگذاری مجدد + + + تنظیم مسیریابی + + + سرورها + + + تنظیمات + + + اشتراک فعلی را بدون پروکسی به روز شود + + + اشتراک فعلی را با پروکسی به روز شود + + + گروه اشتراک + + + تنظیم گروه اشتراک + + + اشتراک را بدون پروکسی به روز شود + + + اشتراک را با پروکسی به روز شود + + + پروکسی سیستم + + + پاک کردن پروکسی سیستم + + + پروکسی سیستم تغییر نکند + + + حالت Pac + + + تنظیم پراکسی سیستم + + + رنگ + + + حالت تاریک + + + زبان + + + وارد کردن URL انبوه از کلیپ بورد (Ctrl+V) + + + اسکن کد QR روی صفحه (Ctrl+S) + + + سرور انتخاب شده را شبیه سازی کنید + + + سرورهای تکراری را حذف کنید + + + حذف سرورهای انتخابی (Delete) + + + به عنوان سرور فعال تنظیم کنید (Enter) + + + تمام آمار خدمات را پاک کنید + + + آزمایش سرورها با تاخیر واقعی (Ctrl+R) + + + مرتب سازی بر اساس نتیجه تست + + + تست سرعت دانلود سرورها (Ctrl+T) + + + تست سرورها با tcping (Ctrl+O) + + + وضعیت سرویس فعلی را تست کنید + + + سرور انتخابی را برای پیکربندی کلاینت صادر کنید + + + URL های اشتراک گذاری را به کلیپ بورد صادر کنید (Ctrl+C) + + + اشتراک (base64) را به کلیپ بورد صادر کنید + + + یک سرور پیکربندی سفارشی اضافه شود + + + سرور [شادوساکس] را اضافه کنید + + + سرور [ساکس] را اضافه کنید + + + سرور [تروجان] را اضافه کنید + + + سرور [VLESS] را اضافه کنید + + + سرور [VMess] را اضافه کنید + + + انتخاب همه (Ctrl+A) + + + همه را پاک کن + + + کپی (Ctrl+C) + + + کپی همه + + + فیلترهای پیام را تنظیم کنید + + + انتخاب همه (Ctrl+A) + + + اضافه کردن + + + حذف + + + ویرایش + + + اشتراک + + + به روز رسانی فعال شد + + + مرتب سازی + + + عامل کاربر + + + لغو + + + تایید + + + انتقال + + + آدرس + + + اجازه ناامن + + + Alpn + + + AlterId + + + Fingerprint + + + Camouflage type + + + UUID(id) + + + پروتکل جابجایی (شبکه) + + + مسیر + + + پورت + + + Alias (remarks) + + + Camouflage domain(host) + + + Encryption method (security) + + + SNI + + + TLS + + + *Default value tcp + + + نوع هسته + + + جریان + + + Generate + + + رمزعبور + + + رمز عبور (اختیاری) + + + UUID(id) + + + رمزگذاری + + + کاربر (اختیاری) + + + رمزگذاری + + + txtPreSocksPort + + + * After setting this value, an socks service will be started using Xray/sing-box(Tun) to provide functions such as speed display + + + Browse + + + ویرایش + + + تنظیمات پیشرفته پروکسی، انتخاب پروتکل (اختیاری) + + + اتصالات از LAN را مجاز کنید + + + Auto hide startup + + + فاصله به روز رسانی خودکار و Geo (ساعت) + + + هسته: تنظیمات اولیه + + + V2ray DNS settings + + + هسته: تنظیمات KCP + + + تنظیمات CoreType + + + اجازه ناامن + + + Outbound Freedom domainStrategy + + + پس از به‌روزرسانی اشتراک، عرض ستون را به صورت خودکار تنظیم شود + + + به روز رسانی های پیش از انتشار را بررسی شود + + + استثنا + + + Exception. Do not use proxy server for addresses beginning with,Use semicolon (;) + + + پورت Http + + + هنگام به‌روزرسانی هسته، فایل‌های Geo را نادیده بگیرید + + + Keep older when deduplication + + + ثبت گزارش های محلی + + + سطح ثبت رویداد + + + Turn on Mux Multiplexing + + + تنظیمات v2rayN + + + Auth pass + + + سفارشی DNS (multiple, separated by commas (,)) + + + Set Win10 UWP Loopback + + + Turn on Sniffing + + + ساکس Port + + + درهنگام راه ائدازی شروع شود + + + فعال کردن آمار (نیاز به راه اندازی مجدد) + + + Subscription conversion Url + + + تنظیمات پراکسی سیستم + + + Enable Security Protocol TLS v1.3 (subscription/update) + + + Tray right-click menu servers display limit + + + UDP را فعال شود + + + Auth user + + + پاک کردن پروکسی سیستم + + + نمایش رابط کاربری گرافیکی + + + تنظیم کلید میانبر جهانی + + + مستقیماً با فشار دادن صفحه کلید تنظیم کنید، بعد از راه اندازی مجدد اعمال شود + + + پروکسی سیستم را تغییر ندهید + + + بازنشانی + + + تنظیم پراکسی سیستم + + + حالت Pac + + + اشتراک گذاری سرور(Ctrl+F) + + + مسیریابی + + + به عنوان ادمین اجرا نمی شود + + + اجرا به عنوان ادمین + + + به پایین حرکت شود(B) + + + پایین (D) + + + Move to top (T) + + + Up (U) + + + Filter, support regular + + + {0} Website + + + عملکرد پیشرفته + + + اضافه کردن + + + وارد کردن قوانین پیشرفته + + + حذف انتخاب شده + + + Set as active rule + + + عملکرد پایه + + + واردات قوانین اساسی + + + تطبیق دامنه + + + استراتژی دامنه + + + فعال کردن عملکرد پیشرفته + + + 3.Block Domain or IP + + + 2.Direct Domain or IP + + + 1.Proxy Domain or IP + + + لیست مجموعه قوانین از پیش تعریف شده + + + *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> + + + وارد کردن قوانین از کلیپ بورد + + + وارد کردن قوانین از فایل + + + وارد کردن قوانین از Sub Url + + + تنظیم قانون + + + اضافه کردن قانون + + + صادر کردن قوانین انتخاب شده + + + فهرست قوانین + + + حذف قوانین + + + تنظیم جزئیات قانون مسیریابی + + + دامنه و آی پی در هنگام ذخیره به طور خودکار مرتب می شوند + + + Ruleobject Doc + + + پشتیبانی از DnsObject + + + گروه لطفا اینجا را خالی بگذارید + + + تنظیمات مسیریابی تغییر کرده است + + + تنظیمات پراکسی سیستم تغییر کرده است + + + فقط مسیر + + + One-click test Latency and speed (Ctrl+E) + + + تاخیر (میلی‌ثانیه) + + + Speed(M/s) + + + Core اجرا نشد، لطفاً گزارش را ببینید + + + Remarks regular filter + + + نمایش گزارش + + + پیکربندی قدیمی guiNConfig را وارد شود + + + Tun را فعال شود + + + پورت جدید برای LAN + + + تنظیمات TunMode + + + Direct IP CIDR, separated by commas (,) + + + Direct Process name, separated by commas (,) + + + نمایش کنسول + + + User-Agent + + + This parameter is valid only for tcp/http and ws + + + فعال‌سازی شتاب‌دهنده سخت‌افزاری (نیاز به راه‌اندازی مجدد) + + + فعال کردن کش فایل مجموعه قوانین برای sing-box + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.resx b/v2rayN/v2rayN/Resx/ResUI.resx new file mode 100755 index 0000000..d3b17f9 --- /dev/null +++ b/v2rayN/v2rayN/Resx/ResUI.resx @@ -0,0 +1,1222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Batch export subscription to clipboard successfully + + + Batch export share URL to clipboard successfully + + + Please check the server settings first + + + Invalid configuration format + + + Note that custom configuration relies entirely on your own configuration and does not work with all settings. If you want to use the system proxy, please modify the listening port manually. + + + Downloading... + + + Download + + + Whether to download? {0} + + + Failed to convert configuration file + + + Failed to generate default configuration file + + + Failed to get the default configuration + + + Failed to import custom configuration server + + + Failed to read configuration file + + + Please fill in the correct format server port + + + Please fill in the KCP parameters correctly + + + Please fill in the local listening port + + + Please fill in the password + + + Please fill in the server address + + + Please fill in the user ID + + + Is not the correct client configuration file, please check + + + Is not the correct configuration, please check + + + Is not the correct server configuration file, please check + + + Initial Configuration + + + {0} {1} already up to date. + + + {0} {1} already up to date. + + + Address + + + Security + + + Port + + + Type + + + Subs group + + + Download traffic today + + + Upload traffic today + + + Total download traffic + + + Total upload traffic + + + Transport + + + Clear original subscription content + + + Download Core successfully + + + Failed to import subscription content + + + Get subscription content successfully + + + No valid subscriptions set + + + Resolve {0} successfully + + + Start getting subscriptions + + + Start updating {0}... + + + Invalid subscription content + + + Is unpacking...... + + + Update subscription end + + + Update subscription starts + + + Update Core successfully + + + Update Core successfully! Restarting service... + + + Non-VMess or ss protocol + + + Non-standard service, this feature is invalid + + + The Core file (file name: {1}) was not found under the folder ({0}), please download and put it in the folder, download address: {2} + + + Scan completed, no valid QR code found + + + Operation failed, please check and retry + + + Please Fill Remarks + + + Please select the encryption method + + + Please select a protocol + + + Please select the server first + + + Servers deduplication completed. Old: {0}, New: {1}. + + + Are you sure to remove the server? + + + The client configuration file is saved at: {0} + + + Start service ({0})... + + + Configuration successful +{0} + + + Custom configuration server imported successfully + + + {0} servers have been imported from clipboard + + + Scan import URL successfully + + + The ping of current service: {0} ms + + + Operation success + + + Please select rules + + + Are you sure to remove the rules? + + + {0},One of the required. + + + Remarks + + + URL(Optional) + + + Count + + + Please fill in the URL + + + Do you want to append rules? Choose yes to append, choose otherwise to replace + + + Download GeoFile: {0} successfully + + + Information + + + Custom Icon + + + Please fill in the correct custom DNS + + + *ws/httpupgrade path + + + *h2 path + + + *QUIC key/KCP seed + + + *grpc serviceName + + + *http host Separated by commas (,) + + + *ws/httpupgrade host + + + *h2 host Separated by commas (,) + + + *QUIC security + + + *tcp camouflage type + + + *kcp camouflage type + + + *QUIC camouflage type + + + *grpc mode + + + TLS + + + *kcp seed + + + Global hotkey {0} registered failed, reason {1} + + + Global hotkey {0} registered successfully + + + Ungrouped + + + All + + + Please browse to import server configuration + + + System proxy + + + Testing... + + + Too many servers, please open the main interface + + + LAN + + + Local + + + Servers Filter, press Enter to execute + + + Check Update + + + Close + + + Exit + + + Global Hotkey Setting + + + Help + + + Option Setting + + + Promotion + + + Reload + + + Routing Setting + + + Servers + + + Settings + + + Update current subscription without proxy + + + Update current subscription with proxy + + + Subscription group + + + Subscription group settings + + + Update subscription without proxy + + + Update subscription with proxy + + + System proxy + + + Clear system proxy + + + Do not change system proxy + + + PAC mode + + + Set system proxy + + + Color + + + Dark Mode + + + Follow System Theme + + + Language (Restart) + + + Import bulk URL from clipboard (Ctrl+V) + + + Scan QR code on the screen (Ctrl+S) + + + Clone selected server + + + Remove duplicate servers + + + Remove selected servers (Delete) + + + Set as active server (Enter) + + + Clear all service statistics + + + Test servers real delay (Ctrl+R) + + + Sort by test result + + + Test servers download speed (Ctrl+T) + + + Test servers with tcping (Ctrl+O) + + + Test current service status + + + Export selected server for client configuration + + + Export share URLs to clipboard (Ctrl+C) + + + Export subscription (base64) share to clipboard + + + Add a custom configuration server + + + Add [Shadowsocks] server + + + Add [Socks] server + + + Add [Trojan] server + + + Add [VLESS] server + + + Add [VMess] server + + + Select all (Ctrl+A) + + + Clear all + + + Copy (Ctrl+C) + + + Copy all + + + Set message filters + + + Select all (Ctrl+A) + + + Add + + + Delete + + + Edit + + + Share + + + Enabled Update + + + Sort + + + User Agent + + + Cancel + + + Confirm + + + Transport + + + Address + + + AllowInsecure + + + ALPN + + + AlterID + + + Fingerprint + + + Camouflage type + + + UUID(id) + + + Transport protocol(network) + + + Path + + + Port + + + Alias (remarks) + + + Camouflage domain(host) + + + Encryption method (security) + + + SNI + + + TLS + + + *Default value tcp + + + Core Type + + + Flow + + + Generate + + + Password + + + Password(Optional) + + + UUID(id) + + + Encryption + + + User(Optional) + + + Encryption + + + txtPreSocksPort + + + * After setting this value, an socks service will be started using Xray/sing-box(Tun) to provide functions such as speed display + + + Browse + + + Edit + + + Advanced proxy settings, protocol selection (optional) + + + Allow connections from the LAN + + + Auto hide startup + + + Automatic update interval of Geo (hours) + + + Core: basic settings + + + V2ray DNS settings + + + Core: KCP settings + + + CoreType settings + + + AllowInsecure + + + Outbound Freedom domainStrategy + + + Automatically adjust column width after updating subscription + + + Check for pre-release updates + + + Exception + + + Exception. Do not use proxy server for addresses beginning with,Use semicolon (;) + + + HTTP Port + + + Ignore Geo files when updating core + + + Keep older when deduplication + + + Enable Log + + + Log Level + + + Turn on Mux Multiplexing + + + v2rayN settings + + + Auth pass + + + Custom DNS (multiple, separated by commas (,)) + + + Set Win10 UWP Loopback + + + Turn on Sniffing + + + SOCKS Port + + + Start on boot + + + Enable Statistics (Require restart) + + + Subscription conversion URL + + + System proxy settings + + + Enable Security Protocol TLS v1.3 (subscription/update) + + + Tray right-click menu servers display limit + + + Enable UDP + + + Auth user + + + Clear system proxy + + + Display GUI + + + Global Hotkey Settings + + + Set directly by pressing the keyboard, take effect after restart + + + Do not change system proxy + + + Reset + + + Set system proxy + + + PAC mode + + + Share Server (Ctrl+F) + + + Routing + + + Not run as Admin + + + Run as Admin + + + Move to bottom (B) + + + Down (D) + + + Move to top (T) + + + Up (U) + + + Filter, support regular + + + {0} Website + + + Advanced Function + + + Add + + + Import Advanced Rules + + + Remove selected (Delete) + + + Set as active rule(Enter) + + + Basic Function + + + Import Basic Rules + + + Domain Matcher + + + Domain strategy + + + Enable advanced function + + + 3.Block Domain or IP + + + 2.Direct Domain or IP + + + 1.Proxy Domain or IP + + + Pre-defined Rule Set List + + + *Set the rules, separated by commas (,); The comma in the regular is replaced by <COMMA> + + + Import Rules From Clipboard + + + Import Rules From File + + + Import Rules From Subscription URL + + + Rule Settings + + + Add Rule + + + Export Selected Rules + + + Rule List + + + Remove Rule (Delete) + + + RoutingRuleDetailsSetting + + + Domain, ip, process are auto sorted when saving + + + Ruleobject Doc + + + Support DnsObject, Click to view the document + + + Group please leave blank here + + + Routing setting is changed + + + System proxy setting is changed + + + RouteOnly + + + One-click multi test Latency and speed (Ctrl+E) + + + Delay(ms) + + + Speed(M/s) + + + Failed to run Core, please see the log + + + Remarks regular filter + + + Display Log + + + Import old config (guiNConfig) + + + Enable Tun + + + New Port for LAN + + + TunMode settings + + + Direct IP CIDR, separated by commas (,) + + + Direct Process name, separated by commas (,) + + + Show console + + + Move to group + + + Custom Template + + + Enable Server Drag Drop Sort(Require restart) + + + AutoRefresh + + + Skip test + + + Edit Server (Ctrl+D) + + + Double-click server make active + + + Test completed + + + Default TLS fingerprint + + + User-Agent + + + This parameter is valid only for tcp/http and ws + + + FontFamily(Require restart) + + + Copy the font TTF/TTC file to the directory guiFonts, restart the settings + + + HTTP port=SOCKS port+1;Pac port=SOCKS port+4;API port=SOCKS port+5; + + + Set this with admin privileges, get admin privileges after startup + + + Font Size + + + Proxy IP CIDR, separated by commas (,) + + + Proxy Process name, separated by commas (,) + + + Bypass Mode + + + SpeedTest Single Timeout Value + + + SpeedTest URL + + + DNS object, e.g. {"servers":[]} + + + Move up and down + + + PublicKey + + + ShortId + + + SpiderX + + + Enable hardware acceleration(Require restart) + + + Waiting for testing (press ESC to terminate)... + + + Please turn off when there is an abnormal disconnection + + + Updates are not enabled, skip this subscription + + + Restart as Administrator + + + More urls, separated by commas;Subscription conversion will be invalid + + + {0} : {1}/s↑ | {2}/s↓ + + + Automatic update interval(minutes) + + + Enable logging to file + + + Convert target type + + + Please leave blank if no conversion is required + + + DNS Settings + + + sing-box DNS settings + + + Please fill in DNS Structure, Click to view the document + + + Click to import default DNS config + + + sing-box domain strategy + + + sing-box Mux Protocol + + + Full process name (Tun mode) + + + IP or IP CIDR + + + Domain + + + Add [Hysteria2] server + + + Hysteria Max bandwidth (Up/Dw) + + + Use System Hosts + + + Add [Tuic] server + + + Congestion control + + + Previous proxy remarks + + + Next proxy remarks + + + Please make sure the remarks exists and is unique + + + Enable additional Inbound + + + Enable IPv6 Address + + + Add [Wireguard] server + + + PrivateKey + + + Reserved(2,3,4) + + + Address(Ip,Ipv6) + + + obfs password + + + (Domain or IP or ProcName) and Port and Protocol and InboundTag => OutboundTag + + + Auto ScrollToEnd + + + Speed Ping Test URL + + + Updating subscription, only determine remarks exists + + + Test terminating... + + + *grpc Authority + + + Add [Http] server + + + Use Xray and enable non-Tun mode, which conflicts with the group previous proxy + + + Enable fragment + + + Enable cache file for sing-box (ruleset files) + + + Custom the rule-set of sing-box + + + Successful operation. Click the settings menu to reboot the app. + + + Open the storage location + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.ru.resx b/v2rayN/v2rayN/Resx/ResUI.ru.resx new file mode 100755 index 0000000..46c3ddb --- /dev/null +++ b/v2rayN/v2rayN/Resx/ResUI.ru.resx @@ -0,0 +1,1072 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Экспортирование подписок в буфер обмена успешно завершено + + + Экспортирование URL в буфер обмена успешно завершено + + + Пожалуйста, сначала проверьте настройки сервера + + + Недопустимый формат конфигурации + + + Обратите внимание, что пользовательская конфигурация полностью зависит от вашей собственной конфигурации и работает не со всеми настройками. Если вы хотите использовать системный прокси, пожалуйста, измените порт прослушивания вручную. + + + Загрузка... + + + Скорость загрузки + + + Хотите загрузить? {0} + + + Не удалось преобразовать файл конфигурации + + + Не удалось создать файл конфигурации по умолчаниюe + + + Не удалось получить конфигурацию по умолчанию + + + Не удалось импортировать сервер пользовательской конфигурации + + + Не удалось прочитать файл конфигурации + + + Пожалуйста, укажите порт сервера в правильном формате + + + Пожалуйста, заполните параметры KCP корректно + + + Пожалуйста, укажите локальный порт прослушивания + + + Пожалуйста, введите пароль + + + Пожалуйста, заполните адрес сервера + + + Пожалуйста, заполните идентификатор пользователя + + + Некорректный файл конфигурации клиента, пожалуйста, проверьте + + + Некорректная конфигурация, пожалуйста, проверьте + + + Некорректный файл конфигурации сервера, пожалуйста, проверьте + + + Исходная конфигурация + + + {0} {1} является последней версией. + + + {0} {1} является последней версией. + + + Адрес + + + Безопасность + + + Порт + + + Тип + + + Группа подписки + + + Загружено трафика сегодня + + + Отдано трафика сегодня + + + Всего загружено + + + Всего отдано + + + Протокол + + + Очистить контент оригинальной подписки + + + Ядро успешно загружено + + + Не удалось импортировать содержимое подписки + + + Содержимое подписки успешно импортировано + + + Нет установлены подписки + + + Парсинг {0} прошел успешно + + + Начинаю получать подписки + + + Начинаю обновление {0}... + + + Некорректное содержимое подписки + + + распаковывается... + + + Обновление подписки закончено + + + Обновление подписки начинается + + + Успешное обновление ядра + + + Успешное обновление ядра! Перезапуск службы... + + + Не является протоколом Vmess или SS + + + нестандартный сервис, эта функция недействительна + + + Файл Core (имя файла: {1}) не найден в папке ({0}), загрузите и поместите его в папку, адрес загрузки: {2} + + + Сканирование завершено, не найден корректный QR код + + + операция безуспешна, проверьте и попробуйте ещё раз + + + Пожалуйста, заполните примечания + + + Пожалуйста, выберите метод шифрования + + + Пожалуйста, выберите протокол + + + Сначала выберите сервер + + + Удаление дублей завершено. Старая: {0}, Новая: {1}. + + + Вы уверены, что хотите удалить сервер? + + + Файл конфигурации клиента сохранен по адресу: {0} + + + Запуск сервиса ({0})... + + + Конфигурация успешна +{0} + + + Пользовательский сервер конфигурации успешно импортирован. + + + {0} серверов импортировано из буфера обмена. + + + Сканирование URL-адреса импорта успешна. + + + Задержка текущего сервера: {0} мс + + + Операция успешна + + + Выберите правила + + + Вы уверены, что хотите удалить правила? + + + {0}, Один из обязательных.. + + + Примечания + + + URL (необязательно) + + + Количество + + + Пожалуйста, заполните адрес (Url) + + + Вы хотите добавить правила? Выберите «Да», чтобы добавить, выберите иное, чтобы заменить + + + Загрузка GeoFile: {0} успешна + + + Информация + + + Пользовательская иконка + + + Пожалуйста, заполните правильный пользовательский DNS + + + *ws путь + + + *h2 путь + + + *QUIC ключ/Kcp seed + + + *grpc serviceName + + + *http хосты разделенные запятыми (,) + + + *ws хост + + + *h2 хосты разделенные запятыми (,) + + + * безопасность QUIC + + + * тип TCP камуфляжа + + + * тип KCP камуфляжа + + + * тип QUIC камуфляжа + + + * режим grpc + + + TLS + + + *Kcp seed + + + Не удалось зарегистрировать глобальную горячую клавишу {0}, причина: {1} + + + Глобальная горячая клавиша {0} зарегистрирована успешно + + + Разгруппировано + + + Все сервера + + + Пожалуйста, просмотрите, чтобы импортировать конфигурацию сервера + + + Системный прокси + + + Тестирование... + + + Слишком много серверов, пожалуйста, откройте главный интерфейс + + + LAN + + + Локальный + + + Фильтр серверов + + + Проверить обновления + + + Закрыть + + + Выход + + + Глобальная настройка горячих клавиш + + + Помощь + + + Настройка параметров + + + Содействие + + + Перезагрузка + + + Настройки маршрутизации + + + Сервера + + + Настройки + + + Обновить текущую подписку без прокси + + + Обновить текущую подписку с прокси + + + Группа подписки + + + Настройки группы подписки + + + Обновить подписку без прокси + + + Обновить подписку с прокси + + + Системный прокси + + + Очистить системный прокси + + + Не менять системный прокси + + + Режим PAC + + + Установить системный прокси + + + Цвет + + + Тёмный режим + + + Следить за системной темой + + + Язык (требуется перезапуск) + + + Импорт массива URL из буфера обмена (Ctrl+V) + + + Сканировать QR-код с экрана (Ctrl+S) + + + Клонировать выбранный сервер + + + Удалить дубликаты серверов + + + Удалить выбранные серверы (Delete) + + + Установить как активный сервер (Enter) + + + Очистить всю статистику + + + Тест на реальную задержку сервера (Ctrl+R) + + + Сортировать по результату теста + + + Тест на скорость загрузки сервера (Ctrl+T) + + + Тест задержки с tcping (Ctrl+O) + + + Проверить текущий статус службы + + + Экспортировать выбранный сервер для клиента + + + Экспорт URL-адресов общего доступа в буфер обмена (Ctrl+C) + + + Экспортировать ссылку-подписку (base64) в буфер обмена + + + Добавить сервер пользовательской конфигурации + + + Добавить сервер [Shadowsocks] + + + Добавить сервер [Socks] + + + Добавить сервер [Trojan] + + + Добавить сервер [VLESS] + + + Добавить сервер [VMess] + + + Выбрать все (Ctrl+A) + + + Очистить все + + + Скопировать (Ctrl+C) + + + Скопировать все + + + Установить фильтры сообщений + + + Выбрать все (Ctrl+A) + + + Добавить + + + Удалить + + + Редактировать + + + Поделиться + + + Включены обновления + + + Сортировка + + + User Agent + + + Отмена + + + Подтвердить + + + Транспорт + + + Адрес + + + Разрешить небезопасные + + + ALPN + + + AlterId + + + Отпечаток + + + Тип камуфляжа + + + UUID (id) + + + Транспортный протокол сети + + + Путь + + + Порт + + + Примечание + + + Маскирующий домен (хост) + + + Метод шифрования + + + SNI + + + TLS + + + * По-умолчанию TCP + + + Ядро + + + Поток + + + Генерировать + + + Пароль + + + Пароль(Необязательно) + + + UUID(id) + + + Шифрование + + + Пользователь(Необязательно) + + + Шифрования + + + txtPreSocksPort + + + * После установки этого значения служба socks будет запущена с использованием Xray/sing-box(Tun) для обеспечения таких функций, как отображение скорости + + + Просмотр + + + Редактировать + + + Расширенные настройки прокси, выбор протокола (необязательно) + + + Разрешить подключения из локальной сети + + + Автоскрытие при автозапуске + + + Интервал автоматического обновления Geo в часах + + + Интервал автоматического обновления в минутах + + + Ядро: базовые настройки + + + Настройки DNS V2ray + + + Настройки DNS sing-box + + + Ядро: настройки KCP + + + Настройки типа ядра + + + Разрешить небезопасные + + + Outbound Freedom domainStrategy + + + Автоматически регулировать ширину столбца после обновления подписки + + + Проверить наличие предварительных обновлений + + + Исключение + + + Исключение. Не используйте прокси-сервер для адресов, начинающихся с (,), используйте точку с запятой (;) + + + HTTP порт + + + Игнорировать файлы Geo при обновлении ядра + + + Сохранить старые при удалении дублей + + + Записывать логи + + + Уровень логгирования + + + Включите мультиплексирование Mux + + + Настройки v2rayN + + + Пароль аутентификации + + + Пользовательский DNS (если несколько делите с запятыми (,)) + + + Set Win10 UWP Loopback + + + Включить сниффинг + + + Порт Socks + + + Автозапуск + + + Включить статистику (требуется перезагрузка) + + + URL-адрес конверсии подписки + + + Настройки системного прокси + + + Включить протокол безопасности TLS v1.3 (обновление подписки) + + + Лимит серверов в меню трея + + + Включить UDP + + + Auth user + + + Очистить системный прокси + + + Показать GUI + + + Настройка горячих клавиш + + + Установите непосредственно, нажав на клавиатуру, вступит в силу после перезапуска + + + Не изменять системный прокси + + + Обнулить + + + Установить системный прокси + + + Режим PAC + + + Поделиться сервером (Ctrl+F) + + + Маршрутизация + + + Пользователь + + + Администратор + + + Спуститься вниз (B) + + + Вниз (D) + + + Подняться наверх (T) + + + Вверх (U) + + + Фильтр, поддерживает regex + + + {0} веб-сайт + + + Расширенная функция + + + Добавить + + + Добавить расширенные правила + + + Удалить выбранные + + + Установить как активное правило + + + Основные функции + + + Импорт основных правил + + + Сопоставитель доменов + + + Доменная стратегия + + + Включить расширенные функции + + + 3.Заблокировать домен или IP + + + 2.Прямой домен или IP + + + 1.Прокси-домен или IP + + + Предустановленный список наборов правил + + + * Установите правила, разделенные запятыми (,); Запятая в регулярке заменена на <COMMA> + + + Импорт правил из буфера обмена + + + Импорт правил из файла + + + Импорт правил из URL + + + Настройка правил + + + Добавить правило + + + Экспорт выделенных правил + + + Список правил + + + Удалить правила (Delete) + + + RoutingRuleDetailsSetting + + + Домен и IP автоматически сортируются при сохранении + + + Ruleobject Doc + + + Поддержка DnsObject + + + Необязательное поле + + + Настройки маршрутизации изменены + + + Системные прокси изменены + + + Только маршрут + + + Тест задержки и скорости всех серверов (Ctrl+E) + + + Задержка (ms) + + + Скорость (M/s) + + + Не удалось запустить ядро, посмотрите логи + + + Remarks regular filter + + + Показать логи + + + Импортировать старый конфиг guiNConfig + + + Режим VPN + + + Новый порт для локальной сети + + + Настройки TunMode + + + Прямой IP CIDR, разделенный запятыми (,) + + + Имя процесса, разделенное запятыми (,) + + + Показать консоль + + + Перейти в группу + + + Пользовательский шаблон + + + Включить сортировку перетаскиванием сервера (требуется перезагрузка) + + + Автообновление + + + Пропустить тест + + + Редактировать сервер (Ctrl+D) + + + Двойной клик чтобы сделать сервер активным + + + Тест завершен + + + TLS отпечаток по умлочанию + + + User-Agent + + + Этот параметр действителен только для TCP/HTTP и WS + + + Шрифт (требуется перезагрузка) + + + Скопируйте файл шрифта TTF/TTC в каталог guiFonts, перезапустите настройки + + + HTTP port=socks port+1 + + + Установите это с правами администратора + + + Размер шрифта + + + Включить аппаратное ускорение (требуется перезагрузка) + + + Перезагрузить как администратор + + + Настройки DNS + + + Включить логгирование в файл + + + Таймаут одиночного спидтеста + + + URL спидтеста + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx new file mode 100755 index 0000000..56b2867 --- /dev/null +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hans.resx @@ -0,0 +1,1219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 批量导出订阅内容至剪贴板成功 + + + 批量导出分享URL至剪贴板成功 + + + 请先检查服务器设置 + + + 配置格式不正确 + + + 注意,自定义配置完全依赖您自己的配置,不能使用所有设置功能。如需使用系统代理请手动修改监听端口。 + + + 下载开始... + + + 下载 + + + 是否下载? {0} + + + 转换配置文件失败 + + + 生成默认配置文件失败 + + + 获取默认配置失败 + + + 导入自定义配置服务器失败 + + + 读取配置文件失败 + + + 请填写正确格式服务器端口 + + + 请正确填写KCP参数 + + + 请填写本地监听端口 + + + 请填写密码 + + + 请填写服务器地址 + + + 请填写用户ID + + + 不是正确的客户端配置文件,请检查 + + + 不是正确的配置,请检查 + + + 不是正确的服务端配置文件,请检查 + + + 初始化配置 + + + {0} {1} 已是最新版本。 + + + {0} {1} 已是最新版本。 + + + 地址 + + + 加密方式 + + + 端口 + + + 类型 + + + 订阅分组 + + + 今日下载 + + + 今日上传 + + + 总下载 + + + 总上传 + + + 传输协议 + + + 清除原订阅内容 + + + 下载Core成功 + + + 导入订阅内容失败 + + + 获取订阅内容成功 + + + 未设置有效的订阅 + + + 解析{0}成功 + + + 开始获取订阅内容 + + + 开始更新 {0}... + + + 无效的订阅内容 + + + 正在解压...... + + + 更新订阅结束 + + + 更新订阅开始 + + + 更新Core成功 + + + 更新Core成功!正在重启服务... + + + 非VMess或ss协议 + + + 非标准服务,此功能无效 + + + 在文件夹 ({0}) 下未找到Core文件 (文件名:{1}),请下载后放入文件夹,下载地址: {2} + + + 扫描完成,未发现有效二维码 + + + 操作失败,请检查重试 + + + 请填写别名 + + + 请选择加密方式 + + + 请选择协议 + + + 请先选择服务器 + + + 服务器去重完成。原数量: {0},现数量: {1} + + + 是否确定移除服务器? + + + 客户端配置文件保存在:{0} + + + 启动服务({0})... + + + 配置成功 +{0} + + + 成功导入自定义配置服务器 + + + 成功从剪贴板导入 {0} 个服务器 + + + 扫描导入URL成功 + + + 当前服务的真连接延迟: {0} ms + + + 操作成功 + + + 请先选择规则 + + + 是否确定移除规则? + + + {0},必填其中一项. + + + 别名 + + + 可选地址(Url) + + + 数量 + + + 请填写Url + + + 是否追加规则?选择是则追加,选择否则替换 + + + 下载 GeoFile: {0} 成功 + + + 信息 + + + 自定义图标 + + + 请填写正确的自定义DNS + + + *ws/httpupgrade path + + + *h2 path + + + *QUIC 加密密钥 + + + *grpc serviceName + + + *http host中间逗号(,)分隔 + + + *ws/httpupgrade host + + + *h2 host中间逗号(,)分隔 + + + *QUIC 加密方式 + + + *tcp伪装类型 + + + *kcp伪装类型 + + + *QUIC伪装类型 + + + *grpc 模式 + + + TLS + + + *Kcp seed + + + 注册全局热键 {0} 失败,原因 {1} + + + 注册全局热键 {0} 成功 + + + 未分组服务器 + + + 所有 + + + 请浏览导入服务器配置 + + + 系统代理 + + + 测试中... + + + 服务器太多,请打开主界面操作 + + + 局域网 + + + 本地 + + + 服务器过滤器,按回车执行 + + + 检查更新 + + + 关闭 + + + 退出 + + + 全局热键设置 + + + 帮助 + + + 参数设置 + + + 推广 + + + 重启服务 + + + 路由设置 + + + 服务器 + + + 设置 + + + 更新当前订阅(不通过代理) + + + 更新当前订阅(通过代理) + + + 订阅分组 + + + 订阅分组设置 + + + 更新全部订阅(不通过代理) + + + 更新全部订阅(通过代理) + + + 系统代理 + + + 清除系统代理 + + + 不改变系统代理 + + + Pac模式 + + + 自动配置系统代理 + + + 颜色 + + + 暗黑模式 + + + 是否跟随系统主题 + + + 语言(重启) + + + 从剪贴板导入批量URL (Ctrl+V) + + + 扫描屏幕上的二维码 (Ctrl+S) + + + 克隆所选服务器 + + + 移除重复的服务器 + + + 移除所选服务器(多选) (Delete) + + + 设为活动服务器 (Enter) + + + 清除所有服务统计数据 + + + 测试服务器真连接延迟(多选) (Ctrl+R) + + + 按测试结果排序 + + + 测试服务器速度(多选) (Ctrl+T) + + + 测试服务器延迟Tcping(多选) (Ctrl+O) + + + 测试当前服务状态 + + + 导出所选服务器为客户端配置 + + + 批量导出分享URL至剪贴板(多选) (Ctrl+C) + + + 批量导出订阅内容至剪贴板(多选) + + + 添加自定义配置服务器 + + + 添加[Shadowsocks]服务器 + + + 添加[Socks]服务器 + + + 添加[Trojan]服务器 + + + 添加[VLESS]服务器 + + + 添加[VMess]服务器 + + + 全选 (Ctrl+A) + + + 清除所有 + + + 复制 (Ctrl+C) + + + 复制所有 + + + 设置信息过滤器 + + + 全选 (Ctrl+A) + + + 添加 + + + 删除 + + + 编辑 + + + 分享 + + + 启用更新 + + + 排序 + + + User Agent(可选) + + + 取消 + + + 确定 + + + 底层传输方式(transport) + + + 地址(address) + + + 跳过证书验证(allowInsecure) + + + Alpn + + + 额外ID(alterId) + + + Fingerprint + + + 伪装类型(type) + + + 用户ID(id) + + + 传输协议(network) + + + 路径(path) + + + 端口(port) + + + 别名(remarks) + + + 伪装域名(host) + + + 加密方式(security) + + + SNI + + + 传输层安全(TLS) + + + *默认tcp,选错会无法连接 + + + Core类型 + + + 流控(flow) + + + 生成 + + + 密码(password) + + + 密码(可选) + + + 用户ID(id) + + + 加密方式(encryption) + + + 用户名(可选) + + + 加密方式(encryption) + + + Socks端口 + + + * 自定义配置的Socks端口值,可不设置;当设置此值后,将使用Xray/sing-box(Tun)额外启动一个前置Socks服务,提供分流和速度显示等功能 + + + 浏览 + + + 编辑 + + + 高级代理设置, 协议选择(可选) + + + 允许来自局域网的连接 + + + 启动后隐藏窗口 + + + 自动更新Geo文件的间隔(单位小时) + + + Core: 基础设置 + + + V2ray DNS设置 + + + Core: KCP设置 + + + Core类型设置 + + + 默认跳过证书验证(allowInsecure) + + + Outbound Freedom domainStrategy + + + 自动调整服务器列宽在更新订阅后 + + + 检查Pre-Release更新(请谨慎启用) + + + 例外 + + + 例外. 对于下列字符开头的地址不使用代理配置文件:使用分号(;)分隔 + + + 本地http监听端口 + + + 更新Core时忽略Geo文件 + + + 去重时保留序号较小的项 + + + 启用日志 + + + 日志等级 + + + 开启Mux多路复用 + + + v2rayN 设置 + + + 认证密码 + + + 自定义DNS(可多个,用逗号(,)分隔) + + + 解除Win10 UWP应用回环代理限制 + + + 开启流量探测 + + + 本地socks监听端口 + + + 开机启动(可能会不成功) + + + 启用统计(实时网速显示,需重启) + + + 订阅转换网址(可选) + + + 系统代理设置 + + + 启用安全协议TLS v1.3 (订阅/检查更新) + + + 托盘右键菜单服务器展示数量限制 + + + 开启UDP + + + 认证用户名 + + + 清除系统代理 + + + 显示主界面 + + + 全局热键设置 + + + 直接按键盘进行设置, 重启后生效 + + + 不改变系统代理 + + + 重置 + + + 自动配置系统代理 + + + Pac模式 + + + 分享服务器 (Ctrl+F) + + + 路由 + + + 以非管理员身份运行 + + + 以管理员身份运行 + + + 下移至底 (B) + + + 下移 (D) + + + 上移至顶 (T) + + + 上移 (U) + + + 过滤器, 支持正则 + + + {0} 官网 + + + 高级功能 + + + 添加规则集 + + + 一键导入高级规则 + + + 移除所选规则 (Delete) + + + 设为活动规则 (Enter) + + + 基础功能 + + + 一键导入基础规则 + + + 域名匹配算法 + + + 域名解析策略 + + + 启用高级功能 + + + 3.阻止的Domain或IP + + + 2.直连的Domain或IP + + + 1.代理的Domain或IP + + + 预定义规则集列表 + + + *设置的路由规则,用逗号(,)分隔;正则中的逗号用<COMMA>替代 + + + 从剪贴板中导入规则 + + + 从文件中导入规则 + + + 从订阅Url中导入规则 + + + 规则集设置 + + + 添加规则 + + + 导出所选规则至剪贴板 + + + 规则列表 + + + 移除所选规则 (Delete) + + + 路由规则详情设置 + + + 保存时Domain, IP, 进程名 自动排序 + + + 规则详细说明文档 + + + 支持填写DnsObject,JSON格式,点击查看文档 + + + 普通分组此处请留空 + + + 路由设置改变 + + + 系统代理设置改变 + + + RouteOnly + + + 一键多线程测试延迟和速度 (Ctrl+E) + + + 延迟(ms) + + + 速度(M/s) + + + 运行Core失败,请看日志 + + + 别名正则过滤 + + + 显示日志 + + + 导入旧的配置文件guiNConfig + + + 启用Tun模式 + + + 为局域网开启新的端口 + + + Tun模式设置 + + + 直连的IP CIDR,用逗号(,)分隔 + + + 直连的进程名,用逗号(,)分隔 + + + 显示控制台 + + + 移至订阅分组 + + + 自定义配置模板 + + + 启用服务器拖放排序(需重启) + + + 自动刷新 + + + 跳过测试 + + + 编辑服务器 (Ctrl+D) + + + 主界面双击设为活动服务器 + + + 测试完成 + + + 默认TLS指纹(fingerprint) + + + 用户代理(User-Agent) + + + 仅对tcp/http、ws协议生效 + + + 当前字体(需重启) + + + 拷贝字体TTF/TTC文件到目录guiFonts,重启设置 + + + http端口=socks端口+1;Pac端口=socks端口+4;API端口=socks端口+5; + + + 以管理员权限设置此项,在启动后获得管理员权限 + + + 字体大小 + + + 代理的IP CIDR,用逗号(,)分隔 + + + 代理的进程名,用逗号(,)分隔 + + + 绕行模式 + + + 测速单个超时值 + + + 测速文件地址 + + + DNS对象,例如 {"servers":[]} + + + 移至上下 + + + PublicKey + + + ShortId + + + SpiderX + + + 启用硬件加速(需重启) + + + 等待测试中(按ESC终止)... + + + 当有异常断流时请关闭 + + + 未启用更新,跳过此订阅 + + + 以管理员身份重启 + + + 更多地址(url),用逗号(,)分隔;订阅转换将失效 + + + 自动更新间隔(分钟) + + + 启用日志存到文件 + + + 订阅转换目标类型 + + + 不需要转换时请留空 + + + DNS设置 + + + sing-box DNS设置 + + + 请填写 DNS JSON 结构,点击查看文档 + + + 点击导入默认DNS配置 + + + sing-box域名解析策略 + + + sing-box Mux 多路复用协议 + + + 进程名全称 (Tun模式) + + + Domain + + + IP 或 IP CIDR + + + 添加[Hysteria2]服务器 + + + Hysteria 最大带宽(Up/Dw) + + + 使用系统hosts + + + 添加[Tuic]服务器 + + + 拥塞控制算法 + + + 前置代理别名 + + + 落地代理別名 + + + 请确保别名存在并唯一 + + + 启用额外监听端口 + + + 启用IPv6 + + + 添加[Wireguard]服务器 + + + PrivateKey + + + Reserved(2,3,4) + + + Address(Ip,Ipv6) + + + 混淆密码(obfs password) + + + (Domain 或 IP 或 进程名) 与 Port 与 Protocol 与 InboundTag => OutboundTag + + + 自动滚动到末尾 + + + 真连接测试地址 + + + 更新订阅时只判断别名已存在否 + + + 测试终止中... + + + *grpc Authority + + + 添加[Http]服务器 + + + 启用分片(Fragment) + + + 使用Xray且非Tun模式启用,和分组前置代理冲突 + + + 启用sing-box(规则集文件)的缓存文件 + + + 自定义sing-box rule-set + + + 操作成功。请点击设置菜单重启应用。 + + + 打开存储所在的位置 + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx b/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx new file mode 100755 index 0000000..7367329 --- /dev/null +++ b/v2rayN/v2rayN/Resx/ResUI.zh-Hant.resx @@ -0,0 +1,1192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 批次匯出訂閱內容至剪貼簿成功 + + + 批次匯出分享URL至剪貼簿成功 + + + 請先檢查伺服器設定 + + + 配置格式不正確 + + + 注意,自訂配置完全依賴您自己的配置,不能使用所有設定功能。如需使用系統代理請手動修改監聽埠。 + + + 下載開始... + + + 下載 + + + 是否下載? {0} + + + 轉換配置檔案失敗 + + + 生成預設配置檔案失敗 + + + 獲取預設配置失敗 + + + 匯入自訂配置伺服器失敗 + + + 讀取配置檔案失敗 + + + 請填寫正確格式伺服器埠 + + + 請正確填寫KCP參數 + + + 請填寫本機監聽埠 + + + 請填寫密碼 + + + 請填寫伺服器位址 + + + 請填寫使用者ID + + + 不是正確的用戶端配置檔案,請檢查 + + + 不是正確的配置,請檢查 + + + 不是正確的服務端配置檔案,請檢查 + + + 初始化配置 + + + {0} {1} 已是最新版本。 + + + {0} {1} 已是最新版本。 + + + 位址 + + + 加密方式 + + + + + + 類型 + + + 訂閱分組 + + + 今日下載 + + + 今日上傳 + + + 總下載 + + + 總上傳 + + + 傳輸協定 + + + 清除原訂閱內容 + + + 下載Core成功 + + + 匯入訂閱內容失敗 + + + 獲取訂閱內容成功 + + + 未設定有效的訂閱 + + + 解析{0}成功 + + + 開始獲取訂閱內容 + + + 開始更新 {0}... + + + 無效的訂閱內容 + + + 正在解壓...... + + + 更新訂閱結束 + + + 更新訂閱開始 + + + 更新Core成功 + + + 更新Core成功!正在重啟服務... + + + 非VMess或SS協定 + + + 非標準服務,此功能無效 + + + 在資料夾 ({0}) 下未找到Core文件 (檔案名:{1}),請下載後放入資料夾、,下載網址: {2} + + + 掃描完成,未發現有效二維碼 + + + 操作失敗,請檢查重試 + + + 請填寫別名 + + + 請選擇加密方式 + + + 請選擇協定 + + + 請先選擇伺服器 + + + 伺服器去重完成。原數量: {0},現數量: {1} + + + 是否確定移除伺服器? + + + 用戶端配置檔案儲存在:{0} + + + 啟動服務({0})... + + + 配置成功{0} + + + 成功匯入自訂配置伺服器 + + + 成功從剪貼簿匯入 {0} 個伺服器 + + + 掃描匯入URL成功 + + + 目前服務的真連接延遲: {0} ms + + + 操作成功 + + + 請先選擇規則 + + + 是否確定移除規則? + + + {0},必填其中一項. + + + 別名 + + + 可選位址(URL) + + + 數量 + + + 請填寫URL + + + 是否追加規則?選擇是則追加,選擇否則取代 + + + 下載 GeoFile: {0} 成功 + + + 資訊 + + + 自訂圖示 + + + 請填寫正確的自訂DNS + + + *ws/httpupgrade path + + + *h2 path + + + *QUIC 加密金鑰 + + + *grpc serviceName + + + *http host中間逗號(,)分隔 + + + *ws/httpupgrade host + + + *h2 host中間逗號(,)分隔 + + + *QUIC 加密方式 + + + *TCP偽裝類型 + + + *KCP偽裝類型 + + + *QUIC偽裝類型 + + + *GRPC 模式 + + + TLS + + + *KCP seed + + + 註冊全域快速鍵 {0} 失敗,原因 {1} + + + 註冊全域快速鍵 {0} 成功 + + + 未分組伺服器 + + + 所有 + + + 請瀏覽匯入伺服器配置 + + + 系統代理 + + + 測試中... + + + 伺服器太多,請打開主介面操作 + + + 區域網路 + + + 本機 + + + 伺服器過濾器,按Enter執行 + + + 檢查更新 + + + 關閉 + + + 退出 + + + 全域快速鍵設定 + + + 說明 + + + 參數設定 + + + 推廣 + + + 重啟服務 + + + 路由設定 + + + 伺服器 + + + 設定 + + + 更新目前訂閱(不透過代理) + + + 更新目前訂閱(透過代理) + + + 訂閱分組 + + + 訂閱分組設定 + + + 更新全部訂閱(不透過代理) + + + 更新全部訂閱(透過代理) + + + 系統代理 + + + 清除系統代理 + + + 不改變系統代理 + + + PAC模式 + + + 自動配置系統代理 + + + 顏色 + + + 暗黑模式 + + + 是否跟隨系統主題 + + + 語言(重啟) + + + 從剪貼簿匯入批次URL (Ctrl+V) + + + 掃描螢幕上的二維碼 (Ctrl+S) + + + 複製所選伺服器 + + + 移除重複的伺服器 + + + 移除所選伺服器(多選) (Delete) + + + 設為活動伺服器 (Enter) + + + 清除所有服務統計資料 + + + 測試伺服器真連接延遲(多選) (Ctrl+R) + + + 按測試結果排序 + + + 測試伺服器速度(多選) (Ctrl+T) + + + 測試伺服器延遲Tcping(多選) (Ctrl+O) + + + 測試目前服務狀態 + + + 匯出所選伺服器為用戶端配置 + + + 批次匯出分享URL至剪貼簿(多選) (Ctrl+C) + + + 批次匯出訂閱內容至剪貼簿(多選) + + + 新增自訂配置伺服器 + + + 新增[Shadowsocks]伺服器 + + + 新增[Socks]伺服器 + + + 新增[Trojan]伺服器 + + + 新增[VLESS]伺服器 + + + 新增[VMess]伺服器 + + + 全選 (Ctrl+A) + + + 清除所有 + + + 複製 (Ctrl+C) + + + 複製所有 + + + 設定資訊過濾器 + + + 全選 (Ctrl+A) + + + 新增 + + + 刪除 + + + 編輯 + + + 分享 + + + 啟用更新 + + + 排序 + + + User Agent(可選) + + + 取消 + + + 確定 + + + 底層傳輸方式(transport) + + + 位址(address) + + + 跳過憑證驗證(allowinsecure) + + + ALPN + + + 額外ID(alterid) + + + Fingerprint + + + 偽裝類型(type) + + + 使用者ID(id) + + + 傳輸協定(network) + + + 路徑(path) + + + 埠(port) + + + 別名(remarks) + + + 偽裝域名(host) + + + 加密方式(security) + + + SNI + + + 傳輸層安全(TLS) + + + *預設TCP,選錯會無法連接 + + + Core類型 + + + 流控(flow) + + + 生成 + + + 密碼(password) + + + 密碼(可選) + + + 使用者ID(id) + + + 加密方式(encryption) + + + 使用者名稱(可選) + + + 加密方式(encryption) + + + SOCKS埠 + + + * 自訂配置的Socks埠值,可不設定;當設定此值後,將使用Xray/sing-box(Tun)額外啟動一個前置Socks服務,提供分流和速度顯示等功能 + + + + 瀏覽 + + + 編輯 + + + 進階代理設定, 協定選擇(可選) + + + 允許來自區域網路的連接 + + + 啟動後隱藏視窗 + + + 自動更新Geo文件的間隔(單位小時) + + + Core: 基礎設定 + + + V2ray DNS設定 + + + Core: KCP設定 + + + Core類型設定 + + + 預設跳過憑證驗證(allowinsecure) + + + Outbound Freedom domainStrategy + + + 在更新訂閱後自動調整伺服器列寬 + + + 檢查Pre-Release更新(請謹慎啟用) + + + 例外 + + + 例外. 對於下列字元開頭的位址不使用代理配置檔案:使用分號(;)分隔 + + + 本機HTTP監聽埠 + + + 更新Core時忽略Geo檔案 + + + 去重時保留序號較小的項 + + + 啟用日誌 + + + 日誌等級 + + + 開啟Mux多路復用 + + + v2rayN 設定 + + + 認證密碼 + + + 自訂DNS(可多個,用逗號(,)分隔) + + + 解除Win10 UWP應用回環代理限制 + + + 開啟流量探測 + + + 本機SOCKS監聽埠 + + + 開機啟動(可能會不成功) + + + 啟用統計(即時網速顯示,需重啟) + + + 訂閱轉換網址(可選) + + + 系統代理設定 + + + 啟用安全協定TLS v1.3 (訂閱/檢查更新) + + + 工具列右鍵選單伺服器展示數量限制 + + + 開啟UDP + + + 認證使用者名稱 + + + 清除系統代理 + + + 顯示主介面 + + + 全域快速鍵設定 + + + 直接按鍵盤進行設定, 重啟後生效 + + + 不改變系統代理 + + + 重設 + + + 自動配置系統代理 + + + PAC模式 + + + 分享伺服器 (Ctrl+F) + + + 路由 + + + 以非管理員身份執行 + + + 以管理員身份執行 + + + 下移至底部 (B) + + + 下移 (D) + + + 上移至頂部 (T) + + + 上移 (U) + + + 過濾器, 支援正則 + + + {0} 官網 + + + 進階功能 + + + 新增規則集 + + + 一鍵匯入進階規則 + + + 移除所選規則 (Delete) + + + 設為活動規則 (Enter) + + + 基礎功能 + + + 一鍵匯入基礎規則 + + + 域名匹配演算法 + + + 域名解析策略 + + + 啟動進階功能 + + + 3.阻止的Domain或IP + + + 2.直連的Domain或IP + + + 1.代理的Domain或IP + + + 預定義規則集列表 + + + *設定的路由規則,用逗號(,)分隔;正則中的逗號用<COMMA>替代 + + + 從剪貼簿中匯入規則 + + + 從文件中匯入規則 + + + 從訂閱URL中匯入規則 + + + 規則集設定 + + + 新增規則 + + + 匯出所選規則至剪貼簿 + + + 規則列表 + + + 移除所選規則 (Delete) + + + 路由規則詳情設定 + + + 儲存時Domain, IP, 行程名 自動排序 + + + 規則詳細說明文件 + + + 支援填寫DnsObject,JSON格式,點擊查看文件 + + + 普通分組此處請留空 + + + 路由設定已改變 + + + 系統代理設定已改變 + + + RouteOnly + + + 一鍵多執行緒測試延遲和速度 (Ctrl+E) + + + 延遲(ms) + + + 速度(M/s) + + + 執行Core失敗,請看日誌 + + + 別名正則過濾 + + + 顯示日誌 + + + 匯入舊的配置檔案guiNConfig + + + 啟用TUN模式 + + + 為區域網路開啟新的埠 + + + TUN模式設定 + + + 直連的IP CIDR,用逗號(,)分隔 + + + 直連的行程名,用逗號(,)分隔 + + + 顯示控制台 + + + 移至訂閱分組 + + + 自訂配置模板 + + + 啟動伺服器拖放排序(需重啟) + + + 自動重新整理 + + + 跳過測試 + + + 編輯伺服器 (Ctrl+D) + + + 主介面輕按兩下設為活動伺服器 + + + 測試完成 + + + 預設TLS指紋(fingerprint) + + + 使用者代理(User-Agent) + + + 僅對TCP/HTTP、WS協定生效 + + + 目前字型(需重啟) + + + 複製字型TTF/TTC文件到目錄guiFonts,重啟設定 + + + HTTP埠=SOCKS埠+1 + + + 以管理員權限設定此項,在啟動後獲得管理員權限 + + + 字型大小 + + + 代理的IP CIDR,用逗號(,)分隔 + + + 代理的行程名,用逗號(,)分隔 + + + 繞行模式 + + + 測速單個超時值 + + + 測速檔案位址 + + + DNS物件,例如 {"servers":[]} + + + 移至上下 + + + PublicKey + + + ShortId + + + SpiderX + + + 啟用硬體加速(需重啟) + + + 等待测试中(按ESC终止)... + + + 當有異常斷流時請關閉 + + + 未啟動更新,跳過此訂閱 + + + 以管理員身份重啟 + + + 更多位址(url),用逗號(,)分隔;訂閱轉換將失效 + + + 自動更新間隔(分鐘) + + + 啟動日誌存到文件 + + + 訂閱轉換目標類型 + + + 不需要轉換時請留空 + + + DNS設定 + + + sing-box DNS設定 + + + 請填寫 DNS JSON 結構,點擊查看文件 + + + 點擊匯入預設DNS配置 + + + sing-box域名解析策略 + + + sing-box Mux 多路復用協定 + + + 行程名全稱 (TUN模式) + + + Domain + + + IP 或 IP CIDR + + + 新增[Tuic]伺服器 + + + 前置代理別名 + + + 落地代理別名 + + + 請確保別名存在並且唯一 + + + 啟用額外監聽端口 + + + 啟用IPv6 + + + (Domain 或 IP 或 行程名) 与 Port 与 Protocol 与 InboundTag => OutboundTag + + + 自动滚动到末尾 + + + 真連接測試地址 + + + 更新訂閱時只判斷別名是否存在 + + + 測試終止中... + + + *grpc Authority + + + 新增[Http]伺服器 + + + 啟用分片(Fragment) + + + 使用Xray且非Tun模式啟用,和分組前置代理衝突 + + + 啟用sing-box(規則集文件)的緩存文件 + + + 自訂sing-box rule-set + + + 操作成功。 請點選設定選單重啟應用程式。 + + + 打開儲存所在的位置 + + \ No newline at end of file diff --git a/v2rayN/Sample/SampleClientConfig.txt b/v2rayN/v2rayN/Sample/SampleClientConfig old mode 100644 new mode 100755 similarity index 73% rename from v2rayN/Sample/SampleClientConfig.txt rename to v2rayN/v2rayN/Sample/SampleClientConfig index a582c6e..98c58e0 --- a/v2rayN/Sample/SampleClientConfig.txt +++ b/v2rayN/v2rayN/Sample/SampleClientConfig @@ -1,33 +1,10 @@ -{ - "log": { - "access": "", - "error": "", - "loglevel": "error" - }, +{ "log": { "access": "Vaccess.log", "error": "Verror.log", "loglevel": "warning" }, - "inbounds": [ - { - "tag": "proxy", - "port": 10808, - "protocol": "socks", - "listen": "127.0.0.1", - "settings": { - "auth": "noauth", - "udp": true - }, - "sniffing": { - "enabled": true, - "destOverride": [ - "http", - "tls" - ] - } - } - ], + "inbounds": [], "outbounds": [{ "tag": "proxy", "protocol": "vmess", @@ -37,7 +14,6 @@ "port": 10086, "users": [{ "id": "a3482e88-686a-4a58-8126-99c9df64b7bf", - "alterId": 64, "security": "auto" }] }], diff --git a/v2rayN/v2rayN/Sample/SampleHttprequest b/v2rayN/v2rayN/Sample/SampleHttprequest new file mode 100755 index 0000000..583b89e --- /dev/null +++ b/v2rayN/v2rayN/Sample/SampleHttprequest @@ -0,0 +1 @@ +{"version":"1.1","method":"GET","path":[$requestPath$],"headers":{"Host":[$requestHost$],"User-Agent":[$requestUserAgent$],"Accept-Encoding":["gzip, deflate"],"Connection":["keep-alive"],"Pragma":"no-cache"}} \ No newline at end of file diff --git a/v2rayN/Sample/SampleHttpresponse.txt b/v2rayN/v2rayN/Sample/SampleHttpresponse old mode 100644 new mode 100755 similarity index 100% rename from v2rayN/Sample/SampleHttpresponse.txt rename to v2rayN/v2rayN/Sample/SampleHttpresponse diff --git a/v2rayN/v2rayN/Sample/SampleInbound b/v2rayN/v2rayN/Sample/SampleInbound new file mode 100755 index 0000000..a21452d --- /dev/null +++ b/v2rayN/v2rayN/Sample/SampleInbound @@ -0,0 +1,18 @@ +{ + "tag": "tag1", + "port": 10808, + "protocol": "socks", + "listen": "127.0.0.1", + "settings": { + "auth": "noauth", + "udp": true, + "allowTransparent": false + }, + "sniffing": { + "enabled": true, + "destOverride": [ + "http", + "tls" + ] + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/SampleOutbound b/v2rayN/v2rayN/Sample/SampleOutbound new file mode 100755 index 0000000..5488537 --- /dev/null +++ b/v2rayN/v2rayN/Sample/SampleOutbound @@ -0,0 +1,34 @@ +{ + "tag": "proxy", + "protocol": "vmess", + "settings": { + "vnext": [ + { + "address": "v2ray.cool", + "port": 10086, + "users": [ + { + "id": "a3482e88-686a-4a58-8126-99c9df64b7bf", + "security": "auto" + } + ] + } + ], + "servers": [ + { + "address": "v2ray.cool", + "method": "chacha20", + "ota": false, + "password": "123456", + "port": 10086, + "level": 1 + } + ] + }, + "streamSettings": { + "network": "tcp" + }, + "mux": { + "enabled": false + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/SingboxSampleClientConfig b/v2rayN/v2rayN/Sample/SingboxSampleClientConfig new file mode 100755 index 0000000..f88422a --- /dev/null +++ b/v2rayN/v2rayN/Sample/SingboxSampleClientConfig @@ -0,0 +1,35 @@ +{ + "log": { + "level": "debug", + "timestamp": true + }, + "inbounds": [], + "outbounds": [ + { + "type": "vless", + "tag": "proxy", + "server": "", + "server_port": 443 + }, + { + "type": "direct", + "tag": "direct" + }, + { + "type": "block", + "tag": "block" + }, + { + "tag": "dns_out", + "type": "dns" + } + ], + "route": { + "rules": [ + { + "protocol": [ "dns" ], + "outbound": "dns_out" + } + ] + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/SingboxSampleOutbound b/v2rayN/v2rayN/Sample/SingboxSampleOutbound new file mode 100755 index 0000000..9c87194 --- /dev/null +++ b/v2rayN/v2rayN/Sample/SingboxSampleOutbound @@ -0,0 +1,6 @@ +{ + "type": "vless", + "tag": "proxy", + "server": "", + "server_port": 443 +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_black b/v2rayN/v2rayN/Sample/custom_routing_black new file mode 100755 index 0000000..37913f7 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_black @@ -0,0 +1,26 @@ +[ + { + "outboundTag": "direct", + "protocol": [ + "bittorrent" + ] + }, + { + "outboundTag": "block", + "domain": [ + "geosite:category-ads-all" + ] + }, + { + "outboundTag": "proxy", + + "domain": [ + "geosite:geolocation-!cn", + "geosite:greatfire" + ] + }, + { + "port": "0-65535", + "outboundTag": "direct" + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_global b/v2rayN/v2rayN/Sample/custom_routing_global new file mode 100755 index 0000000..169d815 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_global @@ -0,0 +1,6 @@ +[ + { + "port": "0-65535", + "outboundTag": "proxy" + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_locked b/v2rayN/v2rayN/Sample/custom_routing_locked new file mode 100755 index 0000000..018ee60 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_locked @@ -0,0 +1,21 @@ +[ + { + "domain": [ + "geosite:google" + ], + "outboundTag": "proxy" + }, + { + "outboundTag": "direct", + "domain": [ + "domain:example-example.com", + "domain:example-example2.com" + ] + }, + { + "outboundTag": "block", + "domain": [ + "geosite:category-ads-all" + ] + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_rules b/v2rayN/v2rayN/Sample/custom_routing_rules new file mode 100755 index 0000000..94b2810 --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_rules @@ -0,0 +1,28 @@ +[{ + "remarks": "block", + "outboundTag": "block", + "domain": [ + "geosite:category-ads-all" + ] + }, + { + "remarks": "direct", + "outboundTag": "direct", + "domain": [ + "geosite:cn" + ] + }, + { + "remarks": "direct", + "outboundTag": "direct", + "ip": [ + "geoip:private", + "geoip:cn" + ] + }, + { + "remarks": "proxy", + "port": "0-65535", + "outboundTag": "proxy" + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/custom_routing_white b/v2rayN/v2rayN/Sample/custom_routing_white new file mode 100755 index 0000000..37ed49d --- /dev/null +++ b/v2rayN/v2rayN/Sample/custom_routing_white @@ -0,0 +1,33 @@ +[ + { + "outboundTag": "direct", + "domain": [ + "domain:example-example.com", + "domain:example-example2.com" + ] + }, + { + "outboundTag": "block", + "domain": [ + "geosite:category-ads-all" + ] + }, + { + "outboundTag": "direct", + "domain": [ + "geosite:cn", + "geosite:geolocation-cn" + ] + }, + { + "outboundTag": "direct", + "ip": [ + "geoip:private", + "geoip:cn" + ] + }, + { + "port": "0-65535", + "outboundTag": "proxy" + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/dns_singbox_normal b/v2rayN/v2rayN/Sample/dns_singbox_normal new file mode 100755 index 0000000..b323520 --- /dev/null +++ b/v2rayN/v2rayN/Sample/dns_singbox_normal @@ -0,0 +1,35 @@ +{ + "servers": [ + { + "tag": "remote", + "address": "tcp://8.8.8.8", + "strategy": "ipv4_only", + "detour": "proxy" + }, + { + "tag": "local", + "address": "223.5.5.5", + "strategy": "ipv4_only", + "detour": "direct" + }, + { + "tag": "block", + "address": "rcode://success" + } + ], + "rules": [ + { + "rule_set": [ + "geosite-geolocation-!cn" + ], + "server": "remote" + }, + { + "rule_set": [ + "geosite-category-ads-all" + ], + "server": "block" + } + ], + "final": "local" +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/dns_v2ray_normal b/v2rayN/v2rayN/Sample/dns_v2ray_normal new file mode 100755 index 0000000..c4b9ba0 --- /dev/null +++ b/v2rayN/v2rayN/Sample/dns_v2ray_normal @@ -0,0 +1,21 @@ +{ + "hosts": { + "dns.google": "8.8.8.8", + "proxy.example.com": "127.0.0.1" + }, + "servers": [ + { + "address": "223.5.5.5", + "domains": [ + "geosite:cn", + "geosite:geolocation-cn" + ], + "expectIPs": [ + "geoip:cn" + ] + }, + "1.1.1.1", + "8.8.8.8", + "https://dns.google/dns-query" + ] +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/tun_singbox_dns b/v2rayN/v2rayN/Sample/tun_singbox_dns new file mode 100755 index 0000000..b323520 --- /dev/null +++ b/v2rayN/v2rayN/Sample/tun_singbox_dns @@ -0,0 +1,35 @@ +{ + "servers": [ + { + "tag": "remote", + "address": "tcp://8.8.8.8", + "strategy": "ipv4_only", + "detour": "proxy" + }, + { + "tag": "local", + "address": "223.5.5.5", + "strategy": "ipv4_only", + "detour": "direct" + }, + { + "tag": "block", + "address": "rcode://success" + } + ], + "rules": [ + { + "rule_set": [ + "geosite-geolocation-!cn" + ], + "server": "remote" + }, + { + "rule_set": [ + "geosite-category-ads-all" + ], + "server": "block" + } + ], + "final": "local" +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/tun_singbox_inbound b/v2rayN/v2rayN/Sample/tun_singbox_inbound new file mode 100755 index 0000000..b4856dd --- /dev/null +++ b/v2rayN/v2rayN/Sample/tun_singbox_inbound @@ -0,0 +1,12 @@ +{ + "type": "tun", + "tag": "tun-in", + "interface_name": "singbox_tun", + "inet4_address": "172.19.0.1/30", + "inet6_address": "fdfe:dcba:9876::1/126", + "mtu": 9000, + "auto_route": true, + "strict_route": false, + "stack": "system", + "sniff": true +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Sample/tun_singbox_rules b/v2rayN/v2rayN/Sample/tun_singbox_rules new file mode 100755 index 0000000..df1dc4e --- /dev/null +++ b/v2rayN/v2rayN/Sample/tun_singbox_rules @@ -0,0 +1,20 @@ +[ + { + "network": "udp", + "port": [ + 135, + 137, + 138, + 139, + 5353 + ], + "outbound": "block" + }, + { + "ip_cidr": [ + "224.0.0.0/3", + "ff00::/8" + ], + "outbound": "block" + } +] \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/AddServer2ViewModel.cs b/v2rayN/v2rayN/ViewModels/AddServer2ViewModel.cs new file mode 100755 index 0000000..b227274 --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/AddServer2ViewModel.cs @@ -0,0 +1,154 @@ +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using ReactiveUI.Validation.Helpers; +using Splat; +using System.IO; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.ViewModels +{ + public class AddServer2ViewModel : ReactiveValidationObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + private Window _view; + + [Reactive] + public ProfileItem SelectedSource { get; set; } + + public ReactiveCommand BrowseServerCmd { get; } + public ReactiveCommand EditServerCmd { get; } + public ReactiveCommand SaveServerCmd { get; } + public bool IsModified { get; set; } + + public AddServer2ViewModel(ProfileItem profileItem, Window view) + { + _noticeHandler = Locator.Current.GetService(); + _config = LazyConfig.Instance.GetConfig(); + + if (profileItem.indexId.IsNullOrEmpty()) + { + SelectedSource = profileItem; + } + else + { + SelectedSource = JsonUtils.DeepCopy(profileItem); + } + + _view = view; + + BrowseServerCmd = ReactiveCommand.Create(() => + { + BrowseServer(); + }); + + EditServerCmd = ReactiveCommand.Create(() => + { + EditServer(); + }); + + SaveServerCmd = ReactiveCommand.Create(() => + { + SaveServer(); + }); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + private void SaveServer() + { + string remarks = SelectedSource.remarks; + if (Utils.IsNullOrEmpty(remarks)) + { + _noticeHandler?.Enqueue(ResUI.PleaseFillRemarks); + return; + } + + if (Utils.IsNullOrEmpty(SelectedSource.address)) + { + _noticeHandler?.Enqueue(ResUI.FillServerAddressCustom); + return; + } + + var item = LazyConfig.Instance.GetProfileItem(SelectedSource.indexId); + if (item is null) + { + item = SelectedSource; + } + else + { + item.remarks = SelectedSource.remarks; + item.address = SelectedSource.address; + item.coreType = SelectedSource.coreType; + item.displayLog = SelectedSource.displayLog; + item.preSocksPort = SelectedSource.preSocksPort; + } + + if (ConfigHandler.EditCustomServer(_config, item) == 0) + { + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + _view.DialogResult = true; + } + else + { + _noticeHandler?.Enqueue(ResUI.OperationFailed); + } + } + + private void BrowseServer() + { + //_noticeHandler?.Enqueue(ResUI.CustomServerTips); + + if (UI.OpenFileDialog(out string fileName, + "Config|*.json|YAML|*.yaml;*.yml|All|*.*") != true) + { + return; + } + if (Utils.IsNullOrEmpty(fileName)) + { + return; + } + + var item = LazyConfig.Instance.GetProfileItem(SelectedSource.indexId); + item ??= SelectedSource; + item.address = fileName; + if (ConfigHandler.AddCustomServer(_config, item, false) == 0) + { + _noticeHandler?.Enqueue(ResUI.SuccessfullyImportedCustomServer); + if (!Utils.IsNullOrEmpty(item.indexId)) + { + SelectedSource = JsonUtils.DeepCopy(item); + } + IsModified = true; + } + else + { + _noticeHandler?.Enqueue(ResUI.FailedImportedCustomServer); + } + } + + private void EditServer() + { + var address = SelectedSource.address; + if (Utils.IsNullOrEmpty(address)) + { + _noticeHandler?.Enqueue(ResUI.FillServerAddressCustom); + return; + } + + address = Utils.GetConfigPath(address); + if (File.Exists(address)) + { + Utils.ProcessStart(address); + } + else + { + _noticeHandler?.Enqueue(ResUI.FailedReadConfiguration); + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/AddServerViewModel.cs b/v2rayN/v2rayN/ViewModels/AddServerViewModel.cs new file mode 100755 index 0000000..bb191b4 --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/AddServerViewModel.cs @@ -0,0 +1,152 @@ +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.ViewModels +{ + public class AddServerViewModel : ReactiveObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + private Window _view; + + [Reactive] + public ProfileItem SelectedSource { get; set; } + + public ReactiveCommand SaveCmd { get; } + + public AddServerViewModel(ProfileItem profileItem, Window view) + { + _config = LazyConfig.Instance.GetConfig(); + _noticeHandler = Locator.Current.GetService(); + _view = view; + + if (profileItem.id.IsNullOrEmpty()) + { + profileItem.network = Global.DefaultNetwork; + profileItem.headerType = Global.None; + profileItem.requestHost = ""; + profileItem.streamSecurity = ""; + SelectedSource = profileItem; + } + else + { + SelectedSource = JsonUtils.DeepCopy(profileItem); + } + + SaveCmd = ReactiveCommand.Create(() => + { + SaveServer(); + }); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + private void SaveServer() + { + if (Utils.IsNullOrEmpty(SelectedSource.remarks)) + { + _noticeHandler?.Enqueue(ResUI.PleaseFillRemarks); + return; + } + + if (Utils.IsNullOrEmpty(SelectedSource.address)) + { + _noticeHandler?.Enqueue(ResUI.FillServerAddress); + return; + } + var port = SelectedSource.port.ToString(); + if (Utils.IsNullOrEmpty(port) || !Utils.IsNumeric(port) + || SelectedSource.port <= 0 || SelectedSource.port >= Global.MaxPort) + { + _noticeHandler?.Enqueue(ResUI.FillCorrectServerPort); + return; + } + if (SelectedSource.configType == EConfigType.Shadowsocks) + { + if (Utils.IsNullOrEmpty(SelectedSource.id)) + { + _noticeHandler?.Enqueue(ResUI.FillPassword); + return; + } + if (Utils.IsNullOrEmpty(SelectedSource.security)) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectEncryption); + return; + } + } + if (SelectedSource.configType != EConfigType.Socks + && SelectedSource.configType != EConfigType.Http) + { + if (Utils.IsNullOrEmpty(SelectedSource.id)) + { + _noticeHandler?.Enqueue(ResUI.FillUUID); + return; + } + } + + var item = LazyConfig.Instance.GetProfileItem(SelectedSource.indexId); + if (item is null) + { + item = SelectedSource; + } + else + { + item.coreType = SelectedSource.coreType; + item.remarks = SelectedSource.remarks; + item.address = SelectedSource.address; + item.port = SelectedSource.port; + + item.id = SelectedSource.id; + item.alterId = SelectedSource.alterId; + item.security = SelectedSource.security; + item.flow = SelectedSource.flow; + + item.network = SelectedSource.network; + item.headerType = SelectedSource.headerType; + item.requestHost = SelectedSource.requestHost; + item.path = SelectedSource.path; + + item.streamSecurity = SelectedSource.streamSecurity; + item.sni = SelectedSource.sni; + item.allowInsecure = SelectedSource.allowInsecure; + item.fingerprint = SelectedSource.fingerprint; + item.alpn = SelectedSource.alpn; + + item.publicKey = SelectedSource.publicKey; + item.shortId = SelectedSource.shortId; + item.spiderX = SelectedSource.spiderX; + } + + var ret = item.configType switch + { + EConfigType.VMess => ConfigHandler.AddServer(_config, item), + EConfigType.Shadowsocks => ConfigHandler.AddShadowsocksServer(_config, item), + EConfigType.Socks => ConfigHandler.AddSocksServer(_config, item), + EConfigType.Http => ConfigHandler.AddHttpServer(_config, item), + EConfigType.Trojan => ConfigHandler.AddTrojanServer(_config, item), + EConfigType.VLESS => ConfigHandler.AddVlessServer(_config, item), + EConfigType.Hysteria2 => ConfigHandler.AddHysteria2Server(_config, item), + EConfigType.Tuic => ConfigHandler.AddTuicServer(_config, item), + EConfigType.Wireguard => ConfigHandler.AddWireguardServer(_config, item), + _ => -1, + }; + + if (ret == 0) + { + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + _view.DialogResult = true; + //_view?.Close(); + } + else + { + _noticeHandler?.Enqueue(ResUI.OperationFailed); + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs new file mode 100755 index 0000000..d618c2d --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/DNSSettingViewModel.cs @@ -0,0 +1,113 @@ +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.ViewModels +{ + public class DNSSettingViewModel : ReactiveObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + private Window _view; + + [Reactive] public bool useSystemHosts { get; set; } + [Reactive] public string domainStrategy4Freedom { get; set; } + [Reactive] public string normalDNS { get; set; } + [Reactive] public string normalDNS2 { get; set; } + [Reactive] public string tunDNS2 { get; set; } + + public ReactiveCommand SaveCmd { get; } + public ReactiveCommand ImportDefConfig4V2rayCmd { get; } + public ReactiveCommand ImportDefConfig4SingboxCmd { get; } + + public DNSSettingViewModel(Window view) + { + _config = LazyConfig.Instance.GetConfig(); + _noticeHandler = Locator.Current.GetService(); + _view = view; + + var item = LazyConfig.Instance.GetDNSItem(ECoreType.Xray); + useSystemHosts = item.useSystemHosts; + domainStrategy4Freedom = item?.domainStrategy4Freedom!; + normalDNS = item?.normalDNS!; + + var item2 = LazyConfig.Instance.GetDNSItem(ECoreType.sing_box); + normalDNS2 = item2?.normalDNS!; + tunDNS2 = item2?.tunDNS!; + + SaveCmd = ReactiveCommand.Create(() => + { + SaveSetting(); + }); + + ImportDefConfig4V2rayCmd = ReactiveCommand.Create(() => + { + normalDNS = Utils.GetEmbedText(Global.DNSV2rayNormalFileName); + }); + + ImportDefConfig4SingboxCmd = ReactiveCommand.Create(() => + { + normalDNS2 = Utils.GetEmbedText(Global.DNSSingboxNormalFileName); + tunDNS2 = Utils.GetEmbedText(Global.TunSingboxDNSFileName); + }); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + private void SaveSetting() + { + if (!Utils.IsNullOrEmpty(normalDNS)) + { + var obj = JsonUtils.ParseJson(normalDNS); + if (obj != null && obj["servers"] != null) + { + } + else + { + if (normalDNS.Contains("{") || normalDNS.Contains("}")) + { + _noticeHandler?.Enqueue(ResUI.FillCorrectDNSText); + return; + } + } + } + if (!Utils.IsNullOrEmpty(normalDNS2)) + { + var obj2 = JsonUtils.Deserialize(normalDNS2); + if (obj2 == null) + { + _noticeHandler?.Enqueue(ResUI.FillCorrectDNSText); + return; + } + } + if (!Utils.IsNullOrEmpty(tunDNS2)) + { + var obj2 = JsonUtils.Deserialize(tunDNS2); + if (obj2 == null) + { + _noticeHandler?.Enqueue(ResUI.FillCorrectDNSText); + return; + } + } + + var item = LazyConfig.Instance.GetDNSItem(ECoreType.Xray); + item.domainStrategy4Freedom = domainStrategy4Freedom; + item.useSystemHosts = useSystemHosts; + item.normalDNS = normalDNS; + ConfigHandler.SaveDNSItems(_config, item); + + var item2 = LazyConfig.Instance.GetDNSItem(ECoreType.sing_box); + item2.normalDNS = JsonUtils.Serialize(JsonUtils.ParseJson(normalDNS2)); + item2.tunDNS = JsonUtils.Serialize(JsonUtils.ParseJson(tunDNS2)); + ConfigHandler.SaveDNSItems(_config, item2); + + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + _view.DialogResult = true; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs new file mode 100755 index 0000000..f4417a1 --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/MainWindowViewModel.cs @@ -0,0 +1,1890 @@ +using DynamicData; +using DynamicData.Binding; +using MaterialDesignColors; +using MaterialDesignColors.ColorManipulation; +using MaterialDesignThemes.Wpf; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Reactive; +using System.Reactive.Linq; +using System.Text; +using System.Windows; +using System.Windows.Media; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; +using v2rayN.Views; + +namespace v2rayN.ViewModels +{ + public class MainWindowViewModel : ReactiveObject + { + #region private prop + + private CoreHandler _coreHandler; + private StatisticsHandler _statistics; + private List _lstProfile; + private string _subId = string.Empty; + private string _serverFilter = string.Empty; + private static Config _config; + private NoticeHandler? _noticeHandler; + private readonly PaletteHelper _paletteHelper = new(); + private Dictionary _dicHeaderSort = new(); + private Action _updateView; + private bool _showInTaskbar; + + #endregion private prop + + #region ObservableCollection + + private IObservableCollection _profileItems = new ObservableCollectionExtended(); + public IObservableCollection ProfileItems => _profileItems; + + private IObservableCollection _subItems = new ObservableCollectionExtended(); + public IObservableCollection SubItems => _subItems; + + private IObservableCollection _routingItems = new ObservableCollectionExtended(); + public IObservableCollection RoutingItems => _routingItems; + + private IObservableCollection _servers = new ObservableCollectionExtended(); + public IObservableCollection Servers => _servers; + + [Reactive] + public ProfileItemModel SelectedProfile { get; set; } + + public IList SelectedProfiles { get; set; } + + [Reactive] + public SubItem SelectedSub { get; set; } + + [Reactive] + public SubItem SelectedMoveToGroup { get; set; } + + [Reactive] + public RoutingItem SelectedRouting { get; set; } + + [Reactive] + public ComboItem SelectedServer { get; set; } + + [Reactive] + public string ServerFilter { get; set; } + + [Reactive] + public bool BlServers { get; set; } + + #endregion ObservableCollection + + #region Menu + + //servers + public ReactiveCommand AddVmessServerCmd { get; } + + public ReactiveCommand AddVlessServerCmd { get; } + public ReactiveCommand AddShadowsocksServerCmd { get; } + public ReactiveCommand AddSocksServerCmd { get; } + public ReactiveCommand AddHttpServerCmd { get; } + public ReactiveCommand AddTrojanServerCmd { get; } + public ReactiveCommand AddHysteria2ServerCmd { get; } + public ReactiveCommand AddTuicServerCmd { get; } + public ReactiveCommand AddWireguardServerCmd { get; } + public ReactiveCommand AddCustomServerCmd { get; } + public ReactiveCommand AddServerViaClipboardCmd { get; } + public ReactiveCommand AddServerViaScanCmd { get; } + + //servers delete + public ReactiveCommand EditServerCmd { get; } + + public ReactiveCommand RemoveServerCmd { get; } + public ReactiveCommand RemoveDuplicateServerCmd { get; } + public ReactiveCommand CopyServerCmd { get; } + public ReactiveCommand SetDefaultServerCmd { get; } + public ReactiveCommand ShareServerCmd { get; } + + //servers move + public ReactiveCommand MoveTopCmd { get; } + + public ReactiveCommand MoveUpCmd { get; } + public ReactiveCommand MoveDownCmd { get; } + public ReactiveCommand MoveBottomCmd { get; } + + //servers ping + public ReactiveCommand MixedTestServerCmd { get; } + + public ReactiveCommand TcpingServerCmd { get; } + public ReactiveCommand RealPingServerCmd { get; } + public ReactiveCommand SpeedServerCmd { get; } + public ReactiveCommand SortServerResultCmd { get; } + + //servers export + public ReactiveCommand Export2ClientConfigCmd { get; } + + public ReactiveCommand Export2ShareUrlCmd { get; } + public ReactiveCommand Export2SubContentCmd { get; } + + //Subscription + public ReactiveCommand SubSettingCmd { get; } + + public ReactiveCommand AddSubCmd { get; } + public ReactiveCommand EditSubCmd { get; } + public ReactiveCommand SubUpdateCmd { get; } + public ReactiveCommand SubUpdateViaProxyCmd { get; } + public ReactiveCommand SubGroupUpdateCmd { get; } + public ReactiveCommand SubGroupUpdateViaProxyCmd { get; } + + //Setting + public ReactiveCommand OptionSettingCmd { get; } + + public ReactiveCommand RoutingSettingCmd { get; } + public ReactiveCommand DNSSettingCmd { get; } + public ReactiveCommand GlobalHotkeySettingCmd { get; } + public ReactiveCommand RebootAsAdminCmd { get; } + public ReactiveCommand ClearServerStatisticsCmd { get; } + public ReactiveCommand OpenTheFileLocationCmd { get; } + //public ReactiveCommand ImportOldGuiConfigCmd { get; } + + //CheckUpdate + public ReactiveCommand CheckUpdateNCmd { get; } + + //public ReactiveCommand CheckUpdateV2flyCoreCmd { get; } + + //public ReactiveCommand CheckUpdateSagerNetCoreCmd { get; } + public ReactiveCommand CheckUpdateXrayCoreCmd { get; } + + //public ReactiveCommand CheckUpdateClashCoreCmd { get; } + //public ReactiveCommand CheckUpdateClashMetaCoreCmd { get; } + public ReactiveCommand CheckUpdateSingBoxCoreCmd { get; } + + public ReactiveCommand CheckUpdateGeoCmd { get; } + + public ReactiveCommand ReloadCmd { get; } + + [Reactive] + public bool BlReloadEnabled { get; set; } + + public ReactiveCommand NotifyLeftClickCmd { get; } + + [Reactive] + public Icon NotifyIcon { get; set; } + + [Reactive] + public ImageSource AppIcon { get; set; } + + //[Reactive] + //public bool BlShowTrayTip { get; set; } + + #endregion Menu + + #region System Proxy + + [Reactive] + public bool BlSystemProxyClear { get; set; } + + [Reactive] + public bool BlSystemProxySet { get; set; } + + [Reactive] + public bool BlSystemProxyNothing { get; set; } + + [Reactive] + public bool BlSystemProxyPac { get; set; } + + public ReactiveCommand SystemProxyClearCmd { get; } + public ReactiveCommand SystemProxySetCmd { get; } + public ReactiveCommand SystemProxyNothingCmd { get; } + public ReactiveCommand SystemProxyPacCmd { get; } + + [Reactive] + public bool BlRouting { get; set; } + + [Reactive] + public int SystemProxySelected { get; set; } + + #endregion System Proxy + + #region UI + + [Reactive] + public string InboundDisplay { get; set; } + + [Reactive] + public string InboundLanDisplay { get; set; } + + [Reactive] + public string RunningServerDisplay { get; set; } + + [Reactive] + public string RunningServerToolTipText { get; set; } + + [Reactive] + public string RunningInfoDisplay { get; set; } + + [Reactive] + public string SpeedProxyDisplay { get; set; } + + [Reactive] + public string SpeedDirectDisplay { get; set; } + + [Reactive] + public bool EnableTun { get; set; } + + [Reactive] + public bool ColorModeDark { get; set; } + + private IObservableCollection _swatches = new ObservableCollectionExtended(); + public IObservableCollection Swatches => _swatches; + + [Reactive] + public Swatch SelectedSwatch { get; set; } + + [Reactive] + public int CurrentFontSize { get; set; } + + [Reactive] + public bool FollowSystemTheme { get; set; } + + [Reactive] + public string CurrentLanguage { get; set; } + + #endregion UI + + #region Init + + public MainWindowViewModel(ISnackbarMessageQueue snackbarMessageQueue, Action updateView) + { + _updateView = updateView; + ThreadPool.RegisterWaitForSingleObject(App.ProgramStarted, OnProgramStarted, null, -1, false); + + Locator.CurrentMutable.RegisterLazySingleton(() => new NoticeHandler(snackbarMessageQueue), typeof(NoticeHandler)); + _noticeHandler = Locator.Current.GetService(); + _config = LazyConfig.Instance.GetConfig(); + + SelectedProfile = new(); + SelectedSub = new(); + SelectedMoveToGroup = new(); + SelectedRouting = new(); + SelectedServer = new(); + if (_config.tunModeItem.enableTun && Utils.IsAdministrator()) + { + EnableTun = true; + } + _subId = _config.subIndexId; + + Init(); + BindingUI(); + RestoreUI(); + + #region WhenAnyValue && ReactiveCommand + + var canEditRemove = this.WhenAnyValue( + x => x.SelectedProfile, + selectedSource => selectedSource != null && !selectedSource.indexId.IsNullOrEmpty()); + + this.WhenAnyValue( + x => x.SelectedSub, + y => y != null && !y.remarks.IsNullOrEmpty() && _subId != y.id) + .Subscribe(c => SubSelectedChanged(c)); + this.WhenAnyValue( + x => x.SelectedMoveToGroup, + y => y != null && !y.remarks.IsNullOrEmpty()) + .Subscribe(c => MoveToGroup(c)); + + this.WhenAnyValue( + x => x.SelectedRouting, + y => y != null && !y.remarks.IsNullOrEmpty()) + .Subscribe(c => RoutingSelectedChanged(c)); + + this.WhenAnyValue( + x => x.SelectedServer, + y => y != null && !y.Text.IsNullOrEmpty()) + .Subscribe(c => ServerSelectedChanged(c)); + + this.WhenAnyValue( + x => x.ServerFilter, + y => y != null && _serverFilter != y) + .Subscribe(c => ServerFilterChanged(c)); + + SystemProxySelected = (int)_config.sysProxyType; + this.WhenAnyValue( + x => x.SystemProxySelected, + y => y >= 0) + .Subscribe(c => DoSystemProxySelected(c)); + + this.WhenAnyValue( + x => x.EnableTun, + y => y == true) + .Subscribe(c => DoEnableTun(c)); + + //servers + AddVmessServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.VMess); + }); + AddVlessServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.VLESS); + }); + AddShadowsocksServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.Shadowsocks); + }); + AddSocksServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.Socks); + }); + AddHttpServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.Http); + }); + AddTrojanServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.Trojan); + }); + AddHysteria2ServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.Hysteria2); + }); + AddTuicServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.Tuic); + }); + AddWireguardServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.Wireguard); + }); + AddCustomServerCmd = ReactiveCommand.Create(() => + { + EditServer(true, EConfigType.Custom); + }); + AddServerViaClipboardCmd = ReactiveCommand.Create(() => + { + AddServerViaClipboard(); + }); + AddServerViaScanCmd = ReactiveCommand.CreateFromTask(() => + { + return ScanScreenTaskAsync(); + }); + //servers delete + EditServerCmd = ReactiveCommand.Create(() => + { + EditServer(false, EConfigType.Custom); + }, canEditRemove); + RemoveServerCmd = ReactiveCommand.Create(() => + { + RemoveServer(); + }, canEditRemove); + RemoveDuplicateServerCmd = ReactiveCommand.Create(() => + { + RemoveDuplicateServer(); + }); + CopyServerCmd = ReactiveCommand.Create(() => + { + CopyServer(); + }, canEditRemove); + SetDefaultServerCmd = ReactiveCommand.Create(() => + { + SetDefaultServer(); + }, canEditRemove); + ShareServerCmd = ReactiveCommand.Create(() => + { + ShareServer(); + }, canEditRemove); + //servers move + MoveTopCmd = ReactiveCommand.Create(() => + { + MoveServer(EMove.Top); + }, canEditRemove); + MoveUpCmd = ReactiveCommand.Create(() => + { + MoveServer(EMove.Up); + }, canEditRemove); + MoveDownCmd = ReactiveCommand.Create(() => + { + MoveServer(EMove.Down); + }, canEditRemove); + MoveBottomCmd = ReactiveCommand.Create(() => + { + MoveServer(EMove.Bottom); + }, canEditRemove); + + //servers ping + MixedTestServerCmd = ReactiveCommand.Create(() => + { + ServerSpeedtest(ESpeedActionType.Mixedtest); + }); + TcpingServerCmd = ReactiveCommand.Create(() => + { + ServerSpeedtest(ESpeedActionType.Tcping); + }, canEditRemove); + RealPingServerCmd = ReactiveCommand.Create(() => + { + ServerSpeedtest(ESpeedActionType.Realping); + }, canEditRemove); + SpeedServerCmd = ReactiveCommand.Create(() => + { + ServerSpeedtest(ESpeedActionType.Speedtest); + }, canEditRemove); + SortServerResultCmd = ReactiveCommand.Create(() => + { + SortServer(EServerColName.delayVal.ToString()); + }); + //servers export + Export2ClientConfigCmd = ReactiveCommand.Create(() => + { + Export2ClientConfig(); + }, canEditRemove); + Export2ShareUrlCmd = ReactiveCommand.Create(() => + { + Export2ShareUrl(); + }, canEditRemove); + Export2SubContentCmd = ReactiveCommand.Create(() => + { + Export2SubContent(); + }, canEditRemove); + + //Subscription + SubSettingCmd = ReactiveCommand.Create(() => + { + SubSetting(); + }); + AddSubCmd = ReactiveCommand.Create(() => + { + EditSub(true); + }); + EditSubCmd = ReactiveCommand.Create(() => + { + EditSub(false); + }); + SubUpdateCmd = ReactiveCommand.Create(() => + { + UpdateSubscriptionProcess("", false); + }); + SubUpdateViaProxyCmd = ReactiveCommand.Create(() => + { + UpdateSubscriptionProcess("", true); + }); + SubGroupUpdateCmd = ReactiveCommand.Create(() => + { + UpdateSubscriptionProcess(_subId, false); + }); + SubGroupUpdateViaProxyCmd = ReactiveCommand.Create(() => + { + UpdateSubscriptionProcess(_subId, true); + }); + + //Setting + OptionSettingCmd = ReactiveCommand.Create(() => + { + OptionSetting(); + }); + RoutingSettingCmd = ReactiveCommand.Create(() => + { + RoutingSetting(); + }); + DNSSettingCmd = ReactiveCommand.Create(() => + { + DNSSetting(); + }); + GlobalHotkeySettingCmd = ReactiveCommand.Create(() => + { + if ((new GlobalHotkeySettingWindow()).ShowDialog() == true) + { + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + } + }); + RebootAsAdminCmd = ReactiveCommand.Create(() => + { + RebootAsAdmin(); + }); + ClearServerStatisticsCmd = ReactiveCommand.Create(() => + { + _statistics?.ClearAllServerStatistics(); + RefreshServers(); + }); + OpenTheFileLocationCmd = ReactiveCommand.Create(() => + { + Utils.ProcessStart("Explorer", $"/select,{Utils.GetConfigPath()}"); + }); + //ImportOldGuiConfigCmd = ReactiveCommand.Create(() => + //{ + // ImportOldGuiConfig(); + //}); + + //CheckUpdate + CheckUpdateNCmd = ReactiveCommand.Create(() => + { + CheckUpdateN(); + }); + //CheckUpdateV2flyCoreCmd = ReactiveCommand.Create(() => + //{ + // CheckUpdateCore(ECoreType.v2fly_v5); + //}); + //CheckUpdateSagerNetCoreCmd = ReactiveCommand.Create(() => + //{ + // CheckUpdateCore(ECoreType.SagerNet); + //}); + CheckUpdateXrayCoreCmd = ReactiveCommand.Create(() => + { + CheckUpdateCore(ECoreType.Xray); + }); + //CheckUpdateClashCoreCmd = ReactiveCommand.Create(() => + //{ + // CheckUpdateCore(ECoreType.clash); + //}); + //CheckUpdateClashMetaCoreCmd = ReactiveCommand.Create(() => + //{ + // CheckUpdateCore(ECoreType.clash_meta); + //}); + CheckUpdateSingBoxCoreCmd = ReactiveCommand.Create(() => + { + CheckUpdateCore(ECoreType.sing_box); + }); + CheckUpdateGeoCmd = ReactiveCommand.Create(() => + { + CheckUpdateGeo(); + }); + + ReloadCmd = ReactiveCommand.Create(() => + { + Reload(); + }); + + NotifyLeftClickCmd = ReactiveCommand.Create(() => + { + ShowHideWindow(null); + }); + + //System proxy + SystemProxyClearCmd = ReactiveCommand.Create(() => + { + SetListenerType(ESysProxyType.ForcedClear); + }); + SystemProxySetCmd = ReactiveCommand.Create(() => + { + SetListenerType(ESysProxyType.ForcedChange); + }); + SystemProxyNothingCmd = ReactiveCommand.Create(() => + { + SetListenerType(ESysProxyType.Unchanged); + }); + SystemProxyPacCmd = ReactiveCommand.Create(() => + { + SetListenerType(ESysProxyType.Pac); + }); + + #endregion WhenAnyValue && ReactiveCommand + + AutoHideStartup(); + + _showInTaskbar = true; + } + + private void Init() + { + ConfigHandler.InitBuiltinRouting(_config); + ConfigHandler.InitBuiltinDNS(_config); + _coreHandler = new CoreHandler(_config, UpdateHandler); + Locator.CurrentMutable.RegisterLazySingleton(() => _coreHandler, typeof(CoreHandler)); + + if (_config.guiItem.enableStatistics) + { + _statistics = new StatisticsHandler(_config, UpdateStatisticsHandler); + } + + MainFormHandler.Instance.UpdateTask(_config, UpdateTaskHandler); + MainFormHandler.Instance.RegisterGlobalHotkey(_config, OnHotkeyHandler, UpdateTaskHandler); + + InitSubscriptionView(); + RefreshRoutingsMenu(); + RefreshServers(); + + Reload(); + ChangeSystemProxyStatus(_config.sysProxyType, true); + } + + private void OnProgramStarted(object state, bool timeout) + { + Application.Current?.Dispatcher.Invoke((Action)(() => + { + ShowHideWindow(true); + })); + } + + #endregion Init + + #region Actions + + private void UpdateHandler(bool notify, string msg) + { + _noticeHandler?.SendMessage(msg); + if (notify) + { + _noticeHandler?.Enqueue(msg); + } + } + + private void UpdateTaskHandler(bool success, string msg) + { + _noticeHandler?.SendMessage(msg); + if (success) + { + var indexIdOld = _config.indexId; + RefreshServers(); + if (indexIdOld != _config.indexId) + { + Reload(); + } + if (_config.uiItem.enableAutoAdjustMainLvColWidth) + { + _updateView(EViewAction.AdjustMainLvColWidth); + } + } + } + + private void UpdateStatisticsHandler(ServerSpeedItem update) + { + try + { + Application.Current?.Dispatcher.Invoke((Action)(() => + { + if (!_showInTaskbar) + { + return; + } + + SpeedProxyDisplay = string.Format(ResUI.SpeedDisplayText, Global.ProxyTag, Utils.HumanFy(update.proxyUp), Utils.HumanFy(update.proxyDown)); + SpeedDirectDisplay = string.Format(ResUI.SpeedDisplayText, Global.DirectTag, Utils.HumanFy(update.directUp), Utils.HumanFy(update.directDown)); + + if (update.proxyUp + update.proxyDown > 0) + { + var second = DateTime.Now.Second; + if (second % 3 == 0) + { + var item = _profileItems.Where(it => it.indexId == update.indexId).FirstOrDefault(); + if (item != null) + { + item.todayDown = Utils.HumanFy(update.todayDown); + item.todayUp = Utils.HumanFy(update.todayUp); + item.totalDown = Utils.HumanFy(update.totalDown); + item.totalUp = Utils.HumanFy(update.totalUp); + + if (SelectedProfile?.indexId == item.indexId) + { + var temp = JsonUtils.DeepCopy(item); + _profileItems.Replace(item, temp); + SelectedProfile = temp; + } + else + { + _profileItems.Replace(item, JsonUtils.DeepCopy(item)); + } + } + } + } + })); + } + catch (Exception ex) + { + Logging.SaveLog(ex.Message, ex); + } + } + + private void UpdateSpeedtestHandler(string indexId, string delay, string speed) + { + Application.Current?.Dispatcher.Invoke((Action)(() => + { + SetTestResult(indexId, delay, speed); + })); + } + + private void SetTestResult(string indexId, string delay, string speed) + { + if (Utils.IsNullOrEmpty(indexId)) + { + _noticeHandler?.SendMessage(delay, true); + _noticeHandler?.Enqueue(delay); + return; + } + var item = _profileItems.Where(it => it.indexId == indexId).FirstOrDefault(); + if (item != null) + { + if (!Utils.IsNullOrEmpty(delay)) + { + int.TryParse(delay, out int temp); + item.delay = temp; + item.delayVal = $"{delay} {Global.DelayUnit}"; + } + if (!Utils.IsNullOrEmpty(speed)) + { + item.speedVal = $"{speed} {Global.SpeedUnit}"; + } + _profileItems.Replace(item, JsonUtils.DeepCopy(item)); + } + } + + private void OnHotkeyHandler(EGlobalHotkey e) + { + switch (e) + { + case EGlobalHotkey.ShowForm: + ShowHideWindow(null); + break; + + case EGlobalHotkey.SystemProxyClear: + SetListenerType(ESysProxyType.ForcedClear); + break; + + case EGlobalHotkey.SystemProxySet: + SetListenerType(ESysProxyType.ForcedChange); + break; + + case EGlobalHotkey.SystemProxyUnchanged: + SetListenerType(ESysProxyType.Unchanged); + break; + + case EGlobalHotkey.SystemProxyPac: + SetListenerType(ESysProxyType.Pac); + break; + } + } + + public void MyAppExit(bool blWindowsShutDown) + { + try + { + Logging.SaveLog("MyAppExit Begin"); + + ConfigHandler.SaveConfig(_config); + + //HttpProxyHandle.CloseHttpAgent(config); + if (blWindowsShutDown) + { + SysProxyHandle.ResetIEProxy4WindowsShutDown(); + } + else + { + SysProxyHandle.UpdateSysProxy(_config, true); + } + + ProfileExHandler.Instance.SaveTo(); + + _statistics?.SaveTo(); + _statistics?.Close(); + + _coreHandler.CoreStop(); + Logging.SaveLog("MyAppExit End"); + } + catch { } + finally + { + Application.Current.Shutdown(); + } + } + + #endregion Actions + + #region Servers && Groups + + private void SubSelectedChanged(bool c) + { + if (!c) + { + return; + } + _subId = SelectedSub?.id; + _config.subIndexId = _subId; + + RefreshServers(); + + _updateView(EViewAction.ProfilesFocus); + } + + private void ServerFilterChanged(bool c) + { + if (!c) + { + return; + } + _serverFilter = ServerFilter; + if (Utils.IsNullOrEmpty(_serverFilter)) + { + RefreshServers(); + } + } + + public void RefreshServers() + { + List lstModel = LazyConfig.Instance.ProfileItems(_subId, _serverFilter); + + ConfigHandler.SetDefaultServer(_config, lstModel); + + List lstServerStat = new(); + if (_statistics != null && _statistics.Enable) + { + lstServerStat = _statistics.ServerStat; + } + var lstProfileExs = ProfileExHandler.Instance.ProfileExs; + lstModel = (from t in lstModel + join t2 in lstServerStat on t.indexId equals t2.indexId into t2b + from t22 in t2b.DefaultIfEmpty() + join t3 in lstProfileExs on t.indexId equals t3.indexId into t3b + from t33 in t3b.DefaultIfEmpty() + select new ProfileItemModel + { + indexId = t.indexId, + configType = t.configType, + remarks = t.remarks, + address = t.address, + port = t.port, + security = t.security, + network = t.network, + streamSecurity = t.streamSecurity, + subid = t.subid, + subRemarks = t.subRemarks, + isActive = t.indexId == _config.indexId, + sort = t33 == null ? 0 : t33.sort, + delay = t33 == null ? 0 : t33.delay, + delayVal = t33?.delay != 0 ? $"{t33?.delay} {Global.DelayUnit}" : string.Empty, + speedVal = t33?.speed != 0 ? $"{t33?.speed} {Global.SpeedUnit}" : string.Empty, + todayDown = t22 == null ? "" : Utils.HumanFy(t22.todayDown), + todayUp = t22 == null ? "" : Utils.HumanFy(t22.todayUp), + totalDown = t22 == null ? "" : Utils.HumanFy(t22.totalDown), + totalUp = t22 == null ? "" : Utils.HumanFy(t22.totalUp) + }).OrderBy(t => t.sort).ToList(); + _lstProfile = JsonUtils.Deserialize>(JsonUtils.Serialize(lstModel)); + + Application.Current?.Dispatcher.Invoke((Action)(() => + { + _profileItems.Clear(); + _profileItems.AddRange(lstModel); + if (lstModel.Count > 0) + { + var selected = lstModel.FirstOrDefault(t => t.indexId == _config.indexId); + if (selected != null) + { + SelectedProfile = selected; + } + else + { + SelectedProfile = lstModel[0]; + } + } + + RefreshServersMenu(); + + //display running server + var running = ConfigHandler.GetDefaultServer(_config); + if (running != null) + { + RunningServerDisplay = + RunningServerToolTipText = running.GetSummary(); + } + else + { + RunningServerDisplay = + RunningServerToolTipText = ResUI.CheckServerSettings; + } + })); + } + + private void RefreshServersMenu() + { + _servers.Clear(); + if (_lstProfile.Count > _config.guiItem.trayMenuServersLimit) + { + BlServers = false; + return; + } + + BlServers = true; + for (int k = 0; k < _lstProfile.Count; k++) + { + ProfileItem it = _lstProfile[k]; + string name = it.GetSummary(); + + var item = new ComboItem() { ID = it.indexId, Text = name }; + _servers.Add(item); + if (_config.indexId == it.indexId) + { + SelectedServer = item; + } + } + } + + private void InitSubscriptionView() + { + _subItems.Clear(); + + _subItems.Add(new SubItem { remarks = ResUI.AllGroupServers }); + foreach (var item in LazyConfig.Instance.SubItems().OrderBy(t => t.sort)) + { + _subItems.Add(item); + } + if (_subId != null && _subItems.FirstOrDefault(t => t.id == _subId) != null) + { + SelectedSub = _subItems.FirstOrDefault(t => t.id == _subId); + } + else + { + SelectedSub = _subItems[0]; + } + } + + #endregion Servers && Groups + + #region Add Servers + + private int GetProfileItems(out List lstSelecteds, bool latest) + { + lstSelecteds = new List(); + if (SelectedProfiles == null || SelectedProfiles.Count <= 0) + { + return -1; + } + + var orderProfiles = SelectedProfiles?.OrderBy(t => t.sort); + if (latest) + { + foreach (var profile in orderProfiles) + { + var item = LazyConfig.Instance.GetProfileItem(profile.indexId); + if (item is not null) + { + lstSelecteds.Add(item); + } + } + } + else + { + lstSelecteds = JsonUtils.Deserialize>(JsonUtils.Serialize(orderProfiles)); + } + + return 0; + } + + public void EditServer(bool blNew, EConfigType eConfigType) + { + ProfileItem item; + if (blNew) + { + item = new() + { + subid = _subId, + configType = eConfigType, + isSub = false, + }; + } + else + { + if (Utils.IsNullOrEmpty(SelectedProfile?.indexId)) + { + return; + } + item = LazyConfig.Instance.GetProfileItem(SelectedProfile.indexId); + if (item is null) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectServer); + return; + } + eConfigType = item.configType; + } + bool? ret = false; + if (eConfigType == EConfigType.Custom) + { + ret = (new AddServer2Window(item)).ShowDialog(); + } + else + { + ret = (new AddServerWindow(item)).ShowDialog(); + } + if (ret == true) + { + RefreshServers(); + if (item.indexId == _config.indexId) + { + Reload(); + } + } + } + + public void AddServerViaClipboard() + { + var clipboardData = Utils.GetClipboardData(); + int ret = ConfigHandler.AddBatchServers(_config, clipboardData!, _subId, false); + if (ret > 0) + { + InitSubscriptionView(); + RefreshServers(); + _noticeHandler?.Enqueue(string.Format(ResUI.SuccessfullyImportedServerViaClipboard, ret)); + } + } + + public async Task ScanScreenTaskAsync() + { + ShowHideWindow(false); + + var dpiXY = QRCodeHelper.GetDpiXY(Application.Current.MainWindow); + string result = await Task.Run(() => + { + return QRCodeHelper.ScanScreen(dpiXY.Item1, dpiXY.Item2); + }); + + ShowHideWindow(true); + + if (Utils.IsNullOrEmpty(result)) + { + _noticeHandler?.Enqueue(ResUI.NoValidQRcodeFound); + } + else + { + int ret = ConfigHandler.AddBatchServers(_config, result, _subId, false); + if (ret > 0) + { + InitSubscriptionView(); + RefreshServers(); + _noticeHandler?.Enqueue(ResUI.SuccessfullyImportedServerViaScan); + } + } + } + + public void RemoveServer() + { + if (GetProfileItems(out List lstSelecteds, true) < 0) + { + return; + } + + if (UI.ShowYesNo(ResUI.RemoveServer) == MessageBoxResult.No) + { + return; + } + var exists = lstSelecteds.Exists(t => t.indexId == _config.indexId); + + ConfigHandler.RemoveServer(_config, lstSelecteds); + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + + RefreshServers(); + if (exists) + { + Reload(); + } + } + + private void RemoveDuplicateServer() + { + var tuple = ConfigHandler.DedupServerList(_config, _subId); + RefreshServers(); + Reload(); + _noticeHandler?.Enqueue(string.Format(ResUI.RemoveDuplicateServerResult, tuple.Item1, tuple.Item2)); + } + + private void CopyServer() + { + if (GetProfileItems(out List lstSelecteds, false) < 0) + { + return; + } + if (ConfigHandler.CopyServer(_config, lstSelecteds) == 0) + { + RefreshServers(); + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + } + } + + public void SetDefaultServer() + { + if (Utils.IsNullOrEmpty(SelectedProfile?.indexId)) + { + return; + } + SetDefaultServer(SelectedProfile.indexId); + } + + private void SetDefaultServer(string indexId) + { + if (Utils.IsNullOrEmpty(indexId)) + { + return; + } + if (indexId == _config.indexId) + { + return; + } + var item = LazyConfig.Instance.GetProfileItem(indexId); + if (item is null) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectServer); + return; + } + + if (ConfigHandler.SetDefaultServerIndex(_config, indexId) == 0) + { + RefreshServers(); + Reload(); + } + } + + private void ServerSelectedChanged(bool c) + { + if (!c) + { + return; + } + if (SelectedServer == null) + { + return; + } + if (Utils.IsNullOrEmpty(SelectedServer.ID)) + { + return; + } + SetDefaultServer(SelectedServer.ID); + } + + public async void ShareServer() + { + var item = LazyConfig.Instance.GetProfileItem(SelectedProfile.indexId); + if (item is null) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectServer); + return; + } + var url = ShareHandler.GetShareUrl(item); + if (Utils.IsNullOrEmpty(url)) + { + return; + } + var img = QRCodeHelper.GetQRCode(url); + var dialog = new QrcodeView() + { + imgQrcode = { Source = img }, + txtContent = { Text = url }, + }; + + await DialogHost.Show(dialog, "RootDialog"); + } + + public void SortServer(string colName) + { + if (Utils.IsNullOrEmpty(colName)) + { + return; + } + + _dicHeaderSort.TryAdd(colName, true); + _dicHeaderSort.TryGetValue(colName, out bool asc); + if (ConfigHandler.SortServers(_config, _subId, colName, asc) != 0) + { + return; + } + _dicHeaderSort[colName] = !asc; + RefreshServers(); + } + + public void TestServerAvailability() + { + var item = ConfigHandler.GetDefaultServer(_config); + if (item == null || item.configType == EConfigType.Custom) + { + return; + } + (new UpdateHandle()).RunAvailabilityCheck((bool success, string msg) => + { + _noticeHandler?.SendMessage(msg, true); + Application.Current?.Dispatcher.Invoke((Action)(() => + { + if (!_showInTaskbar) + { + return; + } + RunningInfoDisplay = msg; + })); + }); + } + + //move server + private void MoveToGroup(bool c) + { + if (!c) + { + return; + } + + if (GetProfileItems(out List lstSelecteds, true) < 0) + { + return; + } + + ConfigHandler.MoveToGroup(_config, lstSelecteds, SelectedMoveToGroup.id); + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + + RefreshServers(); + SelectedMoveToGroup = new(); + //Reload(); + } + + public void MoveServer(EMove eMove) + { + var item = _lstProfile.FirstOrDefault(t => t.indexId == SelectedProfile.indexId); + if (item is null) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectServer); + return; + } + + int index = _lstProfile.IndexOf(item); + if (index < 0) + { + return; + } + if (ConfigHandler.MoveServer(_config, ref _lstProfile, index, eMove) == 0) + { + RefreshServers(); + } + } + + public void MoveServerTo(int startIndex, ProfileItemModel targetItem) + { + var targetIndex = _profileItems.IndexOf(targetItem); + if (startIndex >= 0 && targetIndex >= 0 && startIndex != targetIndex) + { + if (ConfigHandler.MoveServer(_config, ref _lstProfile, startIndex, EMove.Position, targetIndex) == 0) + { + RefreshServers(); + } + } + } + + public void ServerSpeedtest(ESpeedActionType actionType) + { + if (actionType == ESpeedActionType.Mixedtest) + { + SelectedProfiles = _profileItems; + } + if (GetProfileItems(out List lstSelecteds, false) < 0) + { + return; + } + //ClearTestResult(); + new SpeedtestHandler(_config, _coreHandler, lstSelecteds, actionType, UpdateSpeedtestHandler); + } + + private void Export2ClientConfig() + { + var item = LazyConfig.Instance.GetProfileItem(SelectedProfile.indexId); + if (item is null) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectServer); + return; + } + MainFormHandler.Instance.Export2ClientConfig(item, _config); + } + + public void Export2ShareUrl() + { + if (GetProfileItems(out List lstSelecteds, true) < 0) + { + return; + } + + StringBuilder sb = new(); + foreach (var it in lstSelecteds) + { + string url = ShareHandler.GetShareUrl(it); + if (Utils.IsNullOrEmpty(url)) + { + continue; + } + sb.Append(url); + sb.AppendLine(); + } + if (sb.Length > 0) + { + Utils.SetClipboardData(sb.ToString()); + _noticeHandler?.SendMessage(ResUI.BatchExportURLSuccessfully); + } + } + + private void Export2SubContent() + { + if (GetProfileItems(out List lstSelecteds, true) < 0) + { + return; + } + + StringBuilder sb = new(); + foreach (var it in lstSelecteds) + { + string? url = ShareHandler.GetShareUrl(it); + if (Utils.IsNullOrEmpty(url)) + { + continue; + } + sb.Append(url); + sb.AppendLine(); + } + if (sb.Length > 0) + { + Utils.SetClipboardData(Utils.Base64Encode(sb.ToString())); + _noticeHandler?.SendMessage(ResUI.BatchExportSubscriptionSuccessfully); + } + } + + #endregion Add Servers + + #region Subscription + + private void SubSetting() + { + if ((new SubSettingWindow()).ShowDialog() == true) + { + InitSubscriptionView(); + SubSelectedChanged(true); + } + } + + private void EditSub(bool blNew) + { + SubItem item; + if (blNew) + { + item = new(); + } + else + { + item = LazyConfig.Instance.GetSubItem(_subId); + if (item is null) + { + return; + } + } + var ret = (new SubEditWindow(item)).ShowDialog(); + if (ret == true) + { + InitSubscriptionView(); + SubSelectedChanged(true); + } + } + + private void UpdateSubscriptionProcess(string subId, bool blProxy) + { + (new UpdateHandle()).UpdateSubscriptionProcess(_config, subId, blProxy, UpdateTaskHandler); + } + + #endregion Subscription + + #region Setting + + private void OptionSetting() + { + var ret = (new OptionSettingWindow()).ShowDialog(); + if (ret == true) + { + //RefreshServers(); + Reload(); + } + } + + private void RoutingSetting() + { + var ret = (new RoutingSettingWindow()).ShowDialog(); + if (ret == true) + { + ConfigHandler.InitBuiltinRouting(_config); + RefreshRoutingsMenu(); + //RefreshServers(); + Reload(); + } + } + + private void DNSSetting() + { + var ret = (new DNSSettingWindow()).ShowDialog(); + if (ret == true) + { + Reload(); + } + } + + private void RebootAsAdmin() + { + ProcessStartInfo startInfo = new() + { + UseShellExecute = true, + Arguments = Global.RebootAs, + WorkingDirectory = Utils.StartupPath(), + FileName = Utils.GetExePath().AppendQuotes(), + Verb = "runas", + }; + try + { + Process.Start(startInfo); + MyAppExit(false); + } + catch { } + } + + //private void ImportOldGuiConfig() + //{ + // if (UI.OpenFileDialog(out string fileName, + // "guiNConfig|*.json|All|*.*") != true) + // { + // return; + // } + // if (Utils.IsNullOrEmpty(fileName)) + // { + // return; + // } + + // var ret = ConfigHandler.ImportOldGuiConfig(_config, fileName); + // if (ret == 0) + // { + // RefreshRoutingsMenu(); + // InitSubscriptionView(); + // RefreshServers(); + // Reload(); + // _noticeHandler?.Enqueue(ResUI.OperationSuccess); + // } + // else + // { + // _noticeHandler?.Enqueue(ResUI.OperationFailed); + // } + //} + + #endregion Setting + + #region CheckUpdate + + private void CheckUpdateN() + { + void _updateUI(bool success, string msg) + { + _noticeHandler?.SendMessage(msg); + if (success) + { + MyAppExit(false); + } + } + (new UpdateHandle()).CheckUpdateGuiN(_config, _updateUI, _config.guiItem.checkPreReleaseUpdate); + } + + private void CheckUpdateCore(ECoreType type) + { + void _updateUI(bool success, string msg) + { + _noticeHandler?.SendMessage(msg); + if (success) + { + CloseCore(); + + string fileName = Utils.GetTempPath(Utils.GetDownloadFileName(msg)); + string toPath = Utils.GetBinPath("", type.ToString()); + + FileManager.ZipExtractToFile(fileName, toPath, _config.guiItem.ignoreGeoUpdateCore ? "geo" : ""); + + _noticeHandler?.SendMessage(ResUI.MsgUpdateV2rayCoreSuccessfullyMore); + + Reload(); + + _noticeHandler?.SendMessage(ResUI.MsgUpdateV2rayCoreSuccessfully); + + if (File.Exists(fileName)) + { + File.Delete(fileName); + } + } + } + (new UpdateHandle()).CheckUpdateCore(type, _config, _updateUI, _config.guiItem.checkPreReleaseUpdate); + } + + private void CheckUpdateGeo() + { + (new UpdateHandle()).UpdateGeoFileAll(_config, UpdateTaskHandler); + } + + #endregion CheckUpdate + + #region core job + + public void Reload() + { + BlReloadEnabled = false; + + LoadCore().ContinueWith(task => + { + TestServerAvailability(); + + Application.Current?.Dispatcher.Invoke((Action)(() => + { + BlReloadEnabled = true; + })); + }); + } + + private async Task LoadCore() + { + await Task.Run(() => + { + _coreHandler.LoadCore(); + + //ConfigHandler.SaveConfig(_config, false); + + ChangeSystemProxyStatus(_config.sysProxyType, false); + }); + } + + private void CloseCore() + { + ConfigHandler.SaveConfig(_config, false); + + ChangeSystemProxyStatus(ESysProxyType.ForcedClear, false); + + _coreHandler.CoreStop(); + } + + #endregion core job + + #region System proxy and Routings + + public void SetListenerType(ESysProxyType type) + { + if (_config.sysProxyType == type) + { + return; + } + _config.sysProxyType = type; + ChangeSystemProxyStatus(type, true); + + SystemProxySelected = (int)_config.sysProxyType; + ConfigHandler.SaveConfig(_config, false); + } + + private void ChangeSystemProxyStatus(ESysProxyType type, bool blChange) + { + SysProxyHandle.UpdateSysProxy(_config, _config.tunModeItem.enableTun ? true : false); + _noticeHandler?.SendMessage(ResUI.TipChangeSystemProxy + _config.sysProxyType.ToString(), true); + + Application.Current?.Dispatcher.Invoke((Action)(() => + { + BlSystemProxyClear = (type == ESysProxyType.ForcedClear); + BlSystemProxySet = (type == ESysProxyType.ForcedChange); + BlSystemProxyNothing = (type == ESysProxyType.Unchanged); + BlSystemProxyPac = (type == ESysProxyType.Pac); + + InboundDisplayStaus(); + + if (blChange) + { + NotifyIcon = MainFormHandler.Instance.GetNotifyIcon(_config); + AppIcon = MainFormHandler.Instance.GetAppIcon(_config); + } + })); + } + + private void RefreshRoutingsMenu() + { + _routingItems.Clear(); + if (!_config.routingBasicItem.enableRoutingAdvanced) + { + BlRouting = false; + return; + } + + BlRouting = true; + var routings = LazyConfig.Instance.RoutingItems(); + foreach (var item in routings) + { + _routingItems.Add(item); + if (item.id == _config.routingBasicItem.routingIndexId) + { + SelectedRouting = item; + } + } + } + + private void RoutingSelectedChanged(bool c) + { + if (!c) + { + return; + } + + if (SelectedRouting == null) + { + return; + } + + var item = LazyConfig.Instance.GetRoutingItem(SelectedRouting?.id); + if (item is null) + { + return; + } + if (_config.routingBasicItem.routingIndexId == item.id) + { + return; + } + + if (ConfigHandler.SetDefaultRouting(_config, item) == 0) + { + _noticeHandler?.SendMessage(ResUI.TipChangeRouting, true); + Reload(); + NotifyIcon = MainFormHandler.Instance.GetNotifyIcon(_config); + AppIcon = MainFormHandler.Instance.GetAppIcon(_config); + } + } + + private void DoSystemProxySelected(bool c) + { + if (!c) + { + return; + } + if (_config.sysProxyType == (ESysProxyType)SystemProxySelected) + { + return; + } + SetListenerType((ESysProxyType)SystemProxySelected); + } + + private void DoEnableTun(bool c) + { + if (_config.tunModeItem.enableTun != EnableTun) + { + _config.tunModeItem.enableTun = EnableTun; + // When running as a non-administrator, reboot to administrator mode + if (EnableTun && !Utils.IsAdministrator()) + { + _config.tunModeItem.enableTun = false; + RebootAsAdmin(); + return; + } + Reload(); + } + } + + #endregion System proxy and Routings + + #region UI + + public void ShowHideWindow(bool? blShow) + { + var bl = blShow ?? !_showInTaskbar; + if (bl) + { + //Application.Current.MainWindow.ShowInTaskbar = true; + Application.Current.MainWindow.Show(); + if (Application.Current.MainWindow.WindowState == WindowState.Minimized) + { + Application.Current.MainWindow.WindowState = WindowState.Normal; + } + Application.Current.MainWindow.Activate(); + Application.Current.MainWindow.Focus(); + } + else + { + Application.Current.MainWindow.Hide(); + //Application.Current.MainWindow.ShowInTaskbar = false; + //IntPtr windowHandle = new WindowInteropHelper(Application.Current.MainWindow).Handle; + //Utile.RegWriteValue(Global.MyRegPath, Utile.WindowHwndKey, Convert.ToString((long)windowHandle)); + } + _showInTaskbar = bl; + } + + private void RestoreUI() + { + if (FollowSystemTheme) + { + ModifyTheme(!Utils.IsLightTheme()); + } + else + { + ModifyTheme(_config.uiItem.colorModeDark); + } + + if (!_config.uiItem.colorPrimaryName.IsNullOrEmpty()) + { + var swatch = new SwatchesProvider().Swatches.FirstOrDefault(t => t.Name == _config.uiItem.colorPrimaryName); + if (swatch != null + && swatch.ExemplarHue != null + && swatch.ExemplarHue?.Color != null) + { + ChangePrimaryColor(swatch.ExemplarHue.Color); + } + } + } + + private void BindingUI() + { + ColorModeDark = _config.uiItem.colorModeDark; + FollowSystemTheme = _config.uiItem.followSystemTheme; + _swatches.AddRange(new SwatchesProvider().Swatches); + if (!_config.uiItem.colorPrimaryName.IsNullOrEmpty()) + { + SelectedSwatch = _swatches.FirstOrDefault(t => t.Name == _config.uiItem.colorPrimaryName); + } + CurrentFontSize = _config.uiItem.currentFontSize; + CurrentLanguage = _config.uiItem.currentLanguage; + + this.WhenAnyValue( + x => x.ColorModeDark, + y => y == true) + .Subscribe(c => + { + if (_config.uiItem.colorModeDark != ColorModeDark) + { + _config.uiItem.colorModeDark = ColorModeDark; + ModifyTheme(ColorModeDark); + ConfigHandler.SaveConfig(_config); + } + }); + + this.WhenAnyValue(x => x.FollowSystemTheme, + y => y == true) + .Subscribe(c => + { + if (_config.uiItem.followSystemTheme != FollowSystemTheme) + { + _config.uiItem.followSystemTheme = FollowSystemTheme; + ConfigHandler.SaveConfig(_config); + if (FollowSystemTheme) + { + ModifyTheme(!Utils.IsLightTheme()); + } + else + { + ModifyTheme(ColorModeDark); + } + } + }); + + this.WhenAnyValue( + x => x.SelectedSwatch, + y => y != null && !y.Name.IsNullOrEmpty()) + .Subscribe(c => + { + if (SelectedSwatch == null + || SelectedSwatch.Name.IsNullOrEmpty() + || SelectedSwatch.ExemplarHue == null + || SelectedSwatch.ExemplarHue?.Color == null) + { + return; + } + if (_config.uiItem.colorPrimaryName != SelectedSwatch?.Name) + { + _config.uiItem.colorPrimaryName = SelectedSwatch?.Name; + ChangePrimaryColor(SelectedSwatch.ExemplarHue.Color); + ConfigHandler.SaveConfig(_config); + } + }); + + this.WhenAnyValue( + x => x.CurrentFontSize, + y => y > 0) + .Subscribe(c => + { + if (CurrentFontSize >= Global.MinFontSize) + { + _config.uiItem.currentFontSize = CurrentFontSize; + double size = (long)CurrentFontSize; + Application.Current.Resources["StdFontSize"] = size; + Application.Current.Resources["StdFontSize1"] = size + 1; + Application.Current.Resources["StdFontSize2"] = size + 2; + Application.Current.Resources["StdFontSizeMsg"] = size - 1; + + ConfigHandler.SaveConfig(_config); + } + }); + + this.WhenAnyValue( + x => x.CurrentLanguage, + y => y != null && !y.IsNullOrEmpty()) + .Subscribe(c => + { + if (!Utils.IsNullOrEmpty(CurrentLanguage)) + { + _config.uiItem.currentLanguage = CurrentLanguage; + Thread.CurrentThread.CurrentUICulture = new(CurrentLanguage); + ConfigHandler.SaveConfig(_config); + } + }); + } + + public void InboundDisplayStaus() + { + StringBuilder sb = new(); + sb.Append($"[{EInboundProtocol.socks}:{LazyConfig.Instance.GetLocalPort(EInboundProtocol.socks)}]"); + sb.Append(" | "); + //if (_config.sysProxyType == ESysProxyType.ForcedChange) + //{ + // sb.Append($"[{Global.InboundHttp}({ResUI.SystemProxy}):{LazyConfig.Instance.GetLocalPort(Global.InboundHttp)}]"); + //} + //else + //{ + sb.Append($"[{EInboundProtocol.http}:{LazyConfig.Instance.GetLocalPort(EInboundProtocol.http)}]"); + //} + InboundDisplay = $"{ResUI.LabLocal}:{sb}"; + + if (_config.inbound[0].allowLANConn) + { + if (_config.inbound[0].newPort4LAN) + { + StringBuilder sb2 = new(); + sb2.Append($"[{EInboundProtocol.socks}:{LazyConfig.Instance.GetLocalPort(EInboundProtocol.socks2)}]"); + sb2.Append(" | "); + sb2.Append($"[{EInboundProtocol.http}:{LazyConfig.Instance.GetLocalPort(EInboundProtocol.http2)}]"); + InboundLanDisplay = $"{ResUI.LabLAN}:{sb2}"; + } + else + { + InboundLanDisplay = $"{ResUI.LabLAN}:{sb}"; + } + } + else + { + InboundLanDisplay = $"{ResUI.LabLAN}:None"; + } + } + + public void ModifyTheme(bool isDarkTheme) + { + var theme = _paletteHelper.GetTheme(); + + theme.SetBaseTheme(isDarkTheme ? BaseTheme.Dark : BaseTheme.Light); + _paletteHelper.SetTheme(theme); + + Utils.SetDarkBorder(Application.Current.MainWindow, isDarkTheme); + } + + public void ChangePrimaryColor(System.Windows.Media.Color color) + { + var theme = _paletteHelper.GetTheme(); + + theme.PrimaryLight = new ColorPair(color.Lighten()); + theme.PrimaryMid = new ColorPair(color); + theme.PrimaryDark = new ColorPair(color.Darken()); + + _paletteHelper.SetTheme(theme); + } + + private void AutoHideStartup() + { + if (_config.uiItem.autoHideStartup) + { + Observable.Range(1, 1) + .Delay(TimeSpan.FromSeconds(1)) + .Subscribe(x => + { + Application.Current?.Dispatcher.Invoke(() => + { + ShowHideWindow(false); + }); + }); + } + } + + #endregion UI + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs new file mode 100755 index 0000000..e0987cd --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/OptionSettingViewModel.cs @@ -0,0 +1,408 @@ +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.ViewModels +{ + public class OptionSettingViewModel : ReactiveObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + private Window _view; + + #region Core + + [Reactive] public int localPort { get; set; } + [Reactive] public bool udpEnabled { get; set; } + [Reactive] public bool sniffingEnabled { get; set; } + public IList destOverride { get; set; } + [Reactive] public bool routeOnly { get; set; } + [Reactive] public bool allowLANConn { get; set; } + [Reactive] public bool newPort4LAN { get; set; } + [Reactive] public string user { get; set; } + [Reactive] public string pass { get; set; } + [Reactive] public bool muxEnabled { get; set; } + [Reactive] public bool logEnabled { get; set; } + [Reactive] public string loglevel { get; set; } + [Reactive] public bool defAllowInsecure { get; set; } + [Reactive] public string defFingerprint { get; set; } + [Reactive] public string defUserAgent { get; set; } + [Reactive] public string mux4SboxProtocol { get; set; } + [Reactive] public bool enableCacheFile4Sbox { get; set; } + [Reactive] public int hyUpMbps { get; set; } + [Reactive] public int hyDownMbps { get; set; } + [Reactive] public bool enableFragment { get; set; } + + #endregion Core + + #region Core KCP + + //[Reactive] public int Kcpmtu { get; set; } + //[Reactive] public int Kcptti { get; set; } + //[Reactive] public int KcpuplinkCapacity { get; set; } + //[Reactive] public int KcpdownlinkCapacity { get; set; } + //[Reactive] public int KcpreadBufferSize { get; set; } + //[Reactive] public int KcpwriteBufferSize { get; set; } + //[Reactive] public bool Kcpcongestion { get; set; } + + #endregion Core KCP + + #region UI + + [Reactive] public bool AutoRun { get; set; } + [Reactive] public bool EnableStatistics { get; set; } + [Reactive] public bool KeepOlderDedupl { get; set; } + [Reactive] public bool IgnoreGeoUpdateCore { get; set; } + [Reactive] public bool EnableAutoAdjustMainLvColWidth { get; set; } + [Reactive] public bool EnableUpdateSubOnlyRemarksExist { get; set; } + [Reactive] public bool EnableSecurityProtocolTls13 { get; set; } + [Reactive] public bool AutoHideStartup { get; set; } + [Reactive] public bool EnableCheckPreReleaseUpdate { get; set; } + [Reactive] public bool EnableDragDropSort { get; set; } + [Reactive] public bool DoubleClick2Activate { get; set; } + [Reactive] public int AutoUpdateInterval { get; set; } + [Reactive] public int TrayMenuServersLimit { get; set; } + [Reactive] public string CurrentFontFamily { get; set; } + [Reactive] public int SpeedTestTimeout { get; set; } + [Reactive] public string SpeedTestUrl { get; set; } + [Reactive] public string SpeedPingTestUrl { get; set; } + [Reactive] public bool EnableHWA { get; set; } + [Reactive] public string SubConvertUrl { get; set; } + + #endregion UI + + #region System proxy + + [Reactive] public string systemProxyAdvancedProtocol { get; set; } + [Reactive] public string systemProxyExceptions { get; set; } + + #endregion System proxy + + #region Tun mode + + [Reactive] public bool TunStrictRoute { get; set; } + [Reactive] public string TunStack { get; set; } + [Reactive] public int TunMtu { get; set; } + [Reactive] public bool TunEnableExInbound { get; set; } + [Reactive] public bool TunEnableIPv6Address { get; set; } + + #endregion Tun mode + + #region CoreType + + [Reactive] public string CoreType1 { get; set; } + [Reactive] public string CoreType2 { get; set; } + [Reactive] public string CoreType3 { get; set; } + [Reactive] public string CoreType4 { get; set; } + [Reactive] public string CoreType5 { get; set; } + [Reactive] public string CoreType6 { get; set; } + + #endregion CoreType + + public ReactiveCommand SaveCmd { get; } + + public OptionSettingViewModel(Window view) + { + _config = LazyConfig.Instance.GetConfig(); + _noticeHandler = Locator.Current.GetService(); + _view = view; + + #region Core + + var inbound = _config.inbound[0]; + localPort = inbound.localPort; + udpEnabled = inbound.udpEnabled; + sniffingEnabled = inbound.sniffingEnabled; + routeOnly = inbound.routeOnly; + allowLANConn = inbound.allowLANConn; + newPort4LAN = inbound.newPort4LAN; + user = inbound.user; + pass = inbound.pass; + muxEnabled = _config.coreBasicItem.muxEnabled; + logEnabled = _config.coreBasicItem.logEnabled; + loglevel = _config.coreBasicItem.loglevel; + defAllowInsecure = _config.coreBasicItem.defAllowInsecure; + defFingerprint = _config.coreBasicItem.defFingerprint; + defUserAgent = _config.coreBasicItem.defUserAgent; + mux4SboxProtocol = _config.mux4SboxItem.protocol; + enableCacheFile4Sbox = _config.coreBasicItem.enableCacheFile4Sbox; + hyUpMbps = _config.hysteriaItem.up_mbps; + hyDownMbps = _config.hysteriaItem.down_mbps; + enableFragment = _config.coreBasicItem.enableFragment; + + #endregion Core + + #region Core KCP + + //Kcpmtu = _config.kcpItem.mtu; + //Kcptti = _config.kcpItem.tti; + //KcpuplinkCapacity = _config.kcpItem.uplinkCapacity; + //KcpdownlinkCapacity = _config.kcpItem.downlinkCapacity; + //KcpreadBufferSize = _config.kcpItem.readBufferSize; + //KcpwriteBufferSize = _config.kcpItem.writeBufferSize; + //Kcpcongestion = _config.kcpItem.congestion; + + #endregion Core KCP + + #region UI + + AutoRun = _config.guiItem.autoRun; + EnableStatistics = _config.guiItem.enableStatistics; + KeepOlderDedupl = _config.guiItem.keepOlderDedupl; + IgnoreGeoUpdateCore = _config.guiItem.ignoreGeoUpdateCore; + EnableAutoAdjustMainLvColWidth = _config.uiItem.enableAutoAdjustMainLvColWidth; + EnableUpdateSubOnlyRemarksExist = _config.uiItem.enableUpdateSubOnlyRemarksExist; + EnableSecurityProtocolTls13 = _config.guiItem.enableSecurityProtocolTls13; + AutoHideStartup = _config.uiItem.autoHideStartup; + EnableCheckPreReleaseUpdate = _config.guiItem.checkPreReleaseUpdate; + EnableDragDropSort = _config.uiItem.enableDragDropSort; + DoubleClick2Activate = _config.uiItem.doubleClick2Activate; + AutoUpdateInterval = _config.guiItem.autoUpdateInterval; + TrayMenuServersLimit = _config.guiItem.trayMenuServersLimit; + CurrentFontFamily = _config.uiItem.currentFontFamily; + SpeedTestTimeout = _config.speedTestItem.speedTestTimeout; + SpeedTestUrl = _config.speedTestItem.speedTestUrl; + SpeedPingTestUrl = _config.speedTestItem.speedPingTestUrl; + EnableHWA = _config.guiItem.enableHWA; + SubConvertUrl = _config.constItem.subConvertUrl; + + #endregion UI + + #region System proxy + + systemProxyAdvancedProtocol = _config.systemProxyAdvancedProtocol; + systemProxyExceptions = _config.systemProxyExceptions; + + #endregion System proxy + + #region Tun mode + + TunStrictRoute = _config.tunModeItem.strictRoute; + TunStack = _config.tunModeItem.stack; + TunMtu = _config.tunModeItem.mtu; + TunEnableExInbound = _config.tunModeItem.enableExInbound; + TunEnableIPv6Address = _config.tunModeItem.enableIPv6Address; + + #endregion Tun mode + + InitCoreType(); + + SaveCmd = ReactiveCommand.Create(() => + { + SaveSetting(); + }); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + private void InitCoreType() + { + if (_config.coreTypeItem == null) + { + _config.coreTypeItem = new List(); + } + + foreach (EConfigType it in Enum.GetValues(typeof(EConfigType))) + { + if (_config.coreTypeItem.FindIndex(t => t.configType == it) >= 0) + { + continue; + } + + _config.coreTypeItem.Add(new CoreTypeItem() + { + configType = it, + coreType = ECoreType.Xray + }); + } + _config.coreTypeItem.ForEach(it => + { + var type = it.coreType.ToString(); + switch ((int)it.configType) + { + case 1: + CoreType1 = type; + break; + + case 2: + CoreType2 = type; + break; + + case 3: + CoreType3 = type; + break; + + case 4: + CoreType4 = type; + break; + + case 5: + CoreType5 = type; + break; + + case 6: + CoreType6 = type; + break; + } + }); + } + + private void SaveSetting() + { + if (Utils.IsNullOrEmpty(localPort.ToString()) || !Utils.IsNumeric(localPort.ToString()) + || localPort <= 0 || localPort >= Global.MaxPort) + { + _noticeHandler?.Enqueue(ResUI.FillLocalListeningPort); + return; + } + var needReboot = (EnableStatistics != _config.guiItem.enableStatistics + || EnableDragDropSort != _config.uiItem.enableDragDropSort + || EnableHWA != _config.guiItem.enableHWA + || CurrentFontFamily != _config.uiItem.currentFontFamily); + + //if (Utile.IsNullOrEmpty(Kcpmtu.ToString()) || !Utile.IsNumeric(Kcpmtu.ToString()) + // || Utile.IsNullOrEmpty(Kcptti.ToString()) || !Utile.IsNumeric(Kcptti.ToString()) + // || Utile.IsNullOrEmpty(KcpuplinkCapacity.ToString()) || !Utile.IsNumeric(KcpuplinkCapacity.ToString()) + // || Utile.IsNullOrEmpty(KcpdownlinkCapacity.ToString()) || !Utile.IsNumeric(KcpdownlinkCapacity.ToString()) + // || Utile.IsNullOrEmpty(KcpreadBufferSize.ToString()) || !Utile.IsNumeric(KcpreadBufferSize.ToString()) + // || Utile.IsNullOrEmpty(KcpwriteBufferSize.ToString()) || !Utile.IsNumeric(KcpwriteBufferSize.ToString())) + //{ + // _noticeHandler?.Enqueue(ResUI.FillKcpParameters); + // return; + //} + + //Core + _config.inbound[0].localPort = localPort; + _config.inbound[0].udpEnabled = udpEnabled; + _config.inbound[0].sniffingEnabled = sniffingEnabled; + _config.inbound[0].destOverride = destOverride?.ToList(); + _config.inbound[0].routeOnly = routeOnly; + _config.inbound[0].allowLANConn = allowLANConn; + _config.inbound[0].newPort4LAN = newPort4LAN; + _config.inbound[0].user = user; + _config.inbound[0].pass = pass; + if (_config.inbound.Count > 1) + { + _config.inbound.RemoveAt(1); + } + _config.coreBasicItem.logEnabled = logEnabled; + _config.coreBasicItem.loglevel = loglevel; + _config.coreBasicItem.muxEnabled = muxEnabled; + _config.coreBasicItem.defAllowInsecure = defAllowInsecure; + _config.coreBasicItem.defFingerprint = defFingerprint; + _config.coreBasicItem.defUserAgent = defUserAgent; + _config.mux4SboxItem.protocol = mux4SboxProtocol; + _config.coreBasicItem.enableCacheFile4Sbox = enableCacheFile4Sbox; + _config.hysteriaItem.up_mbps = hyUpMbps; + _config.hysteriaItem.down_mbps = hyDownMbps; + _config.coreBasicItem.enableFragment = enableFragment; + + //Kcp + //_config.kcpItem.mtu = Kcpmtu; + //_config.kcpItem.tti = Kcptti; + //_config.kcpItem.uplinkCapacity = KcpuplinkCapacity; + //_config.kcpItem.downlinkCapacity = KcpdownlinkCapacity; + //_config.kcpItem.readBufferSize = KcpreadBufferSize; + //_config.kcpItem.writeBufferSize = KcpwriteBufferSize; + //_config.kcpItem.congestion = Kcpcongestion; + + //UI + Utils.SetAutoRun(Global.AutoRunRegPath, Global.AutoRunName, AutoRun); + _config.guiItem.autoRun = AutoRun; + _config.guiItem.enableStatistics = EnableStatistics; + _config.guiItem.keepOlderDedupl = KeepOlderDedupl; + _config.guiItem.ignoreGeoUpdateCore = IgnoreGeoUpdateCore; + _config.uiItem.enableAutoAdjustMainLvColWidth = EnableAutoAdjustMainLvColWidth; + _config.uiItem.enableUpdateSubOnlyRemarksExist = EnableUpdateSubOnlyRemarksExist; + _config.guiItem.enableSecurityProtocolTls13 = EnableSecurityProtocolTls13; + _config.uiItem.autoHideStartup = AutoHideStartup; + _config.guiItem.autoUpdateInterval = AutoUpdateInterval; + _config.guiItem.checkPreReleaseUpdate = EnableCheckPreReleaseUpdate; + _config.uiItem.enableDragDropSort = EnableDragDropSort; + _config.uiItem.doubleClick2Activate = DoubleClick2Activate; + _config.guiItem.trayMenuServersLimit = TrayMenuServersLimit; + _config.uiItem.currentFontFamily = CurrentFontFamily; + _config.speedTestItem.speedTestTimeout = SpeedTestTimeout; + _config.speedTestItem.speedTestUrl = SpeedTestUrl; + _config.speedTestItem.speedPingTestUrl = SpeedPingTestUrl; + _config.guiItem.enableHWA = EnableHWA; + _config.constItem.subConvertUrl = SubConvertUrl; + + //systemProxy + _config.systemProxyExceptions = systemProxyExceptions; + _config.systemProxyAdvancedProtocol = systemProxyAdvancedProtocol; + + //tun mode + _config.tunModeItem.strictRoute = TunStrictRoute; + _config.tunModeItem.stack = TunStack; + _config.tunModeItem.mtu = TunMtu; + _config.tunModeItem.enableExInbound = TunEnableExInbound; + _config.tunModeItem.enableIPv6Address = TunEnableIPv6Address; + + //coreType + SaveCoreType(); + + if (ConfigHandler.SaveConfig(_config) == 0) + { + if (needReboot) + { + _noticeHandler?.Enqueue(ResUI.NeedRebootTips); + } + else + { + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + } + _view.DialogResult = true; + } + else + { + _noticeHandler?.Enqueue(ResUI.OperationFailed); + } + } + + private int SaveCoreType() + { + for (int k = 1; k <= _config.coreTypeItem.Count; k++) + { + var item = _config.coreTypeItem[k - 1]; + var type = string.Empty; + switch ((int)item.configType) + { + case 1: + type = CoreType1; + break; + + case 2: + type = CoreType2; + break; + + case 3: + type = CoreType3; + break; + + case 4: + type = CoreType4; + break; + + case 5: + type = CoreType5; + break; + + case 6: + type = CoreType6; + break; + + default: + continue; + } + item.coreType = (ECoreType)Enum.Parse(typeof(ECoreType), type); + } + return 0; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/RoutingRuleDetailsViewModel.cs b/v2rayN/v2rayN/ViewModels/RoutingRuleDetailsViewModel.cs new file mode 100755 index 0000000..9bafcb6 --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/RoutingRuleDetailsViewModel.cs @@ -0,0 +1,104 @@ +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.ViewModels +{ + public class RoutingRuleDetailsViewModel : ReactiveObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + private Window _view; + + public IList ProtocolItems { get; set; } + public IList InboundTagItems { get; set; } + + [Reactive] + public RulesItem SelectedSource { get; set; } + + [Reactive] + public string Domain { get; set; } + + [Reactive] + public string IP { get; set; } + + [Reactive] + public string Process { get; set; } + + [Reactive] + public bool AutoSort { get; set; } + + public ReactiveCommand SaveCmd { get; } + + public RoutingRuleDetailsViewModel(RulesItem rulesItem, Window view) + { + _config = LazyConfig.Instance.GetConfig(); + _noticeHandler = Locator.Current.GetService(); + _view = view; + + if (rulesItem.id.IsNullOrEmpty()) + { + rulesItem.id = Utils.GetGUID(false); + rulesItem.outboundTag = Global.ProxyTag; + rulesItem.enabled = true; + SelectedSource = rulesItem; + } + else + { + SelectedSource = rulesItem; + } + + Domain = Utils.List2String(SelectedSource.domain, true); + IP = Utils.List2String(SelectedSource.ip, true); + Process = Utils.List2String(SelectedSource.process, true); + + SaveCmd = ReactiveCommand.Create(() => + { + SaveRules(); + }); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + private void SaveRules() + { + Domain = Utils.Convert2Comma(Domain); + IP = Utils.Convert2Comma(IP); + Process = Utils.Convert2Comma(Process); + + if (AutoSort) + { + SelectedSource.domain = Utils.String2ListSorted(Domain); + SelectedSource.ip = Utils.String2ListSorted(IP); + SelectedSource.process = Utils.String2ListSorted(Process); + } + else + { + SelectedSource.domain = Utils.String2List(Domain); + SelectedSource.ip = Utils.String2List(IP); + SelectedSource.process = Utils.String2List(Process); + } + SelectedSource.protocol = ProtocolItems?.ToList(); + SelectedSource.inboundTag = InboundTagItems?.ToList(); + + bool hasRule = SelectedSource.domain?.Count > 0 + || SelectedSource.ip?.Count > 0 + || SelectedSource.protocol?.Count > 0 + || SelectedSource.process?.Count > 0 + || !Utils.IsNullOrEmpty(SelectedSource.port); + + if (!hasRule) + { + _noticeHandler?.Enqueue(string.Format(ResUI.RoutingRuleDetailRequiredTips, "Port/Protocol/Domain/IP/Process")); + return; + } + //_noticeHandler?.Enqueue(ResUI.OperationSuccess); + _view.DialogResult = true; + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/RoutingRuleSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/RoutingRuleSettingViewModel.cs new file mode 100755 index 0000000..f648945 --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/RoutingRuleSettingViewModel.cs @@ -0,0 +1,355 @@ +using DynamicData.Binding; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; +using v2rayN.Views; +using Application = System.Windows.Application; + +namespace v2rayN.ViewModels +{ + public class RoutingRuleSettingViewModel : ReactiveObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + private Window _view; + private List _rules; + + [Reactive] + public RoutingItem SelectedRouting { get; set; } + + private IObservableCollection _rulesItems = new ObservableCollectionExtended(); + public IObservableCollection RulesItems => _rulesItems; + + [Reactive] + public RulesItemModel SelectedSource { get; set; } + + public IList SelectedSources { get; set; } + + public ReactiveCommand RuleAddCmd { get; } + public ReactiveCommand ImportRulesFromFileCmd { get; } + public ReactiveCommand ImportRulesFromClipboardCmd { get; } + public ReactiveCommand ImportRulesFromUrlCmd { get; } + public ReactiveCommand RuleRemoveCmd { get; } + public ReactiveCommand RuleExportSelectedCmd { get; } + public ReactiveCommand MoveTopCmd { get; } + public ReactiveCommand MoveUpCmd { get; } + public ReactiveCommand MoveDownCmd { get; } + public ReactiveCommand MoveBottomCmd { get; } + + public ReactiveCommand SaveCmd { get; } + + public RoutingRuleSettingViewModel(RoutingItem routingItem, Window view) + { + _config = LazyConfig.Instance.GetConfig(); + _noticeHandler = Locator.Current.GetService(); + _view = view; + SelectedSource = new(); + + if (routingItem.id.IsNullOrEmpty()) + { + SelectedRouting = routingItem; + _rules = new(); + } + else + { + SelectedRouting = routingItem; + _rules = JsonUtils.Deserialize>(SelectedRouting.ruleSet); + } + + RefreshRulesItems(); + + var canEditRemove = this.WhenAnyValue( + x => x.SelectedSource, + selectedSource => selectedSource != null && !selectedSource.outboundTag.IsNullOrEmpty()); + + RuleAddCmd = ReactiveCommand.Create(() => + { + RuleEdit(true); + }); + ImportRulesFromFileCmd = ReactiveCommand.Create(() => + { + ImportRulesFromFile(); + }); + ImportRulesFromClipboardCmd = ReactiveCommand.Create(() => + { + ImportRulesFromClipboard(); + }); + ImportRulesFromUrlCmd = ReactiveCommand.CreateFromTask(() => + { + return ImportRulesFromUrl(); + }); + + RuleRemoveCmd = ReactiveCommand.Create(() => + { + RuleRemove(); + }, canEditRemove); + RuleExportSelectedCmd = ReactiveCommand.Create(() => + { + RuleExportSelected(); + }, canEditRemove); + + MoveTopCmd = ReactiveCommand.Create(() => + { + MoveRule(EMove.Top); + }, canEditRemove); + MoveUpCmd = ReactiveCommand.Create(() => + { + MoveRule(EMove.Up); + }, canEditRemove); + MoveDownCmd = ReactiveCommand.Create(() => + { + MoveRule(EMove.Down); + }, canEditRemove); + MoveBottomCmd = ReactiveCommand.Create(() => + { + MoveRule(EMove.Bottom); + }, canEditRemove); + + SaveCmd = ReactiveCommand.Create(() => + { + SaveRouting(); + }); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + public void RefreshRulesItems() + { + _rulesItems.Clear(); + + foreach (var item in _rules) + { + var it = new RulesItemModel() + { + id = item.id, + outboundTag = item.outboundTag, + port = item.port, + protocols = Utils.List2String(item.protocol), + inboundTags = Utils.List2String(item.inboundTag), + domains = Utils.List2String(item.domain), + ips = Utils.List2String(item.ip), + enabled = item.enabled, + }; + _rulesItems.Add(it); + } + } + + public void RuleEdit(bool blNew) + { + RulesItem? item; + if (blNew) + { + item = new(); + } + else + { + item = _rules.FirstOrDefault(t => t.id == SelectedSource?.id); + if (item is null) + { + return; + } + } + var ret = (new RoutingRuleDetailsWindow(item)).ShowDialog(); + if (ret == true) + { + if (blNew) + { + _rules.Add(item); + } + RefreshRulesItems(); + } + } + + public void RuleRemove() + { + if (SelectedSource is null || SelectedSource.outboundTag.IsNullOrEmpty()) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectRules); + return; + } + if (UI.ShowYesNo(ResUI.RemoveRules) == MessageBoxResult.No) + { + return; + } + foreach (var it in SelectedSources) + { + var item = _rules.FirstOrDefault(t => t.id == it?.id); + if (item != null) + { + _rules.Remove(item); + } + } + + RefreshRulesItems(); + } + + public void RuleExportSelected() + { + if (SelectedSource is null || SelectedSource.outboundTag.IsNullOrEmpty()) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectRules); + return; + } + + var lst = new List(); + foreach (var it in SelectedSources) + { + var item = _rules.FirstOrDefault(t => t.id == it?.id); + if (item != null) + { + var item2 = JsonUtils.Deserialize(JsonUtils.Serialize(item)); + lst.Add(item2 ?? new()); + } + } + if (lst.Count > 0) + { + Utils.SetClipboardData(JsonUtils.Serialize(lst)); + //_noticeHandler?.Enqueue(ResUI.OperationSuccess")); + } + } + + public void MoveRule(EMove eMove) + { + if (SelectedSource is null || SelectedSource.outboundTag.IsNullOrEmpty()) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectRules); + return; + } + + var item = _rules.FirstOrDefault(t => t.id == SelectedSource?.id); + if (item == null) + { + return; + } + var index = _rules.IndexOf(item); + if (ConfigHandler.MoveRoutingRule(_rules, index, eMove) == 0) + { + RefreshRulesItems(); + } + } + + private void SaveRouting() + { + string remarks = SelectedRouting.remarks; + if (Utils.IsNullOrEmpty(remarks)) + { + _noticeHandler?.Enqueue(ResUI.PleaseFillRemarks); + return; + } + var item = SelectedRouting; + foreach (var it in _rules) + { + it.id = Utils.GetGUID(false); + } + item.ruleNum = _rules.Count; + item.ruleSet = JsonUtils.Serialize(_rules, false); + + if (ConfigHandler.SaveRoutingItem(_config, item) == 0) + { + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + _view.DialogResult = true; + } + else + { + _noticeHandler?.Enqueue(ResUI.OperationFailed); + } + } + + #region Import rules + + private void ImportRulesFromFile() + { + if (UI.OpenFileDialog(out string fileName, + "Rules|*.json|All|*.*") != true) + { + return; + } + if (Utils.IsNullOrEmpty(fileName)) + { + return; + } + + string result = Utils.LoadResource(fileName); + if (Utils.IsNullOrEmpty(result)) + { + return; + } + + if (AddBatchRoutingRules(SelectedRouting, result) == 0) + { + RefreshRulesItems(); + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + } + } + + private void ImportRulesFromClipboard() + { + string clipboardData = Utils.GetClipboardData(); + if (AddBatchRoutingRules(SelectedRouting, clipboardData) == 0) + { + RefreshRulesItems(); + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + } + } + + private async Task ImportRulesFromUrl() + { + var url = SelectedRouting.url; + if (Utils.IsNullOrEmpty(url)) + { + _noticeHandler?.Enqueue(ResUI.MsgNeedUrl); + return; + } + + DownloadHandle downloadHandle = new DownloadHandle(); + var result = await downloadHandle.TryDownloadString(url, true, ""); + if (AddBatchRoutingRules(SelectedRouting, result) == 0) + { + Application.Current.Dispatcher.Invoke((Action)(() => + { + RefreshRulesItems(); + })); + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + } + } + + private int AddBatchRoutingRules(RoutingItem routingItem, string? clipboardData) + { + bool blReplace = false; + if (UI.ShowYesNo(ResUI.AddBatchRoutingRulesYesNo) == MessageBoxResult.No) + { + blReplace = true; + } + if (Utils.IsNullOrEmpty(clipboardData)) + { + return -1; + } + var lstRules = JsonUtils.Deserialize>(clipboardData); + if (lstRules == null) + { + return -1; + } + foreach (var rule in lstRules) + { + rule.id = Utils.GetGUID(false); + } + + if (blReplace) + { + _rules = lstRules; + } + else + { + _rules.AddRange(lstRules); + } + return 0; + } + + #endregion Import rules + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/RoutingSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/RoutingSettingViewModel.cs new file mode 100755 index 0000000..334869b --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/RoutingSettingViewModel.cs @@ -0,0 +1,308 @@ +using DynamicData.Binding; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; +using v2rayN.Views; + +namespace v2rayN.ViewModels +{ + public class RoutingSettingViewModel : ReactiveObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + private Window _view; + private RoutingItem _lockedItem; + private List _lockedRules; + + #region Reactive + + private IObservableCollection _routingItems = new ObservableCollectionExtended(); + public IObservableCollection RoutingItems => _routingItems; + + [Reactive] + public RoutingItemModel SelectedSource { get; set; } + + public IList SelectedSources { get; set; } + + [Reactive] + public bool enableRoutingAdvanced { get; set; } + + [Reactive] + public bool enableRoutingBasic { get; set; } + + [Reactive] + public string domainStrategy { get; set; } + + [Reactive] + public string domainMatcher { get; set; } + + [Reactive] + public string domainStrategy4Singbox { get; set; } + + [Reactive] + public string ProxyDomain { get; set; } + + [Reactive] + public string ProxyIP { get; set; } + + [Reactive] + public string DirectDomain { get; set; } + + [Reactive] + public string DirectIP { get; set; } + + [Reactive] + public string BlockDomain { get; set; } + + [Reactive] + public string BlockIP { get; set; } + + public ReactiveCommand RoutingBasicImportRulesCmd { get; } + public ReactiveCommand RoutingAdvancedAddCmd { get; } + public ReactiveCommand RoutingAdvancedRemoveCmd { get; } + public ReactiveCommand RoutingAdvancedSetDefaultCmd { get; } + public ReactiveCommand RoutingAdvancedImportRulesCmd { get; } + + public ReactiveCommand SaveCmd { get; } + public bool IsModified { get; set; } + + #endregion Reactive + + public RoutingSettingViewModel(Window view) + { + _config = LazyConfig.Instance.GetConfig(); + _noticeHandler = Locator.Current.GetService(); + _view = view; + SelectedSource = new(); + + ConfigHandler.InitBuiltinRouting(_config); + + enableRoutingAdvanced = _config.routingBasicItem.enableRoutingAdvanced; + domainStrategy = _config.routingBasicItem.domainStrategy; + domainMatcher = _config.routingBasicItem.domainMatcher; + domainStrategy4Singbox = _config.routingBasicItem.domainStrategy4Singbox; + + RefreshRoutingItems(); + + BindingLockedData(); + + var canEditRemove = this.WhenAnyValue( + x => x.SelectedSource, + selectedSource => selectedSource != null && !selectedSource.remarks.IsNullOrEmpty()); + + this.WhenAnyValue( + x => x.enableRoutingAdvanced) + .Subscribe(c => enableRoutingBasic = !enableRoutingAdvanced); + + RoutingBasicImportRulesCmd = ReactiveCommand.Create(() => + { + RoutingBasicImportRules(); + }); + + RoutingAdvancedAddCmd = ReactiveCommand.Create(() => + { + RoutingAdvancedEdit(true); + }); + RoutingAdvancedRemoveCmd = ReactiveCommand.Create(() => + { + RoutingAdvancedRemove(); + }, canEditRemove); + RoutingAdvancedSetDefaultCmd = ReactiveCommand.Create(() => + { + RoutingAdvancedSetDefault(); + }, canEditRemove); + RoutingAdvancedImportRulesCmd = ReactiveCommand.Create(() => + { + RoutingAdvancedImportRules(); + }); + + SaveCmd = ReactiveCommand.Create(() => + { + SaveRouting(); + }); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + #region locked + + private void BindingLockedData() + { + _lockedItem = ConfigHandler.GetLockedRoutingItem(_config); + if (_lockedItem != null) + { + _lockedRules = JsonUtils.Deserialize>(_lockedItem.ruleSet); + ProxyDomain = Utils.List2String(_lockedRules[0].domain, true); + ProxyIP = Utils.List2String(_lockedRules[0].ip, true); + + DirectDomain = Utils.List2String(_lockedRules[1].domain, true); + DirectIP = Utils.List2String(_lockedRules[1].ip, true); + + BlockDomain = Utils.List2String(_lockedRules[2].domain, true); + BlockIP = Utils.List2String(_lockedRules[2].ip, true); + } + } + + private void EndBindingLockedData() + { + if (_lockedItem != null) + { + _lockedRules[0].domain = Utils.String2List(Utils.Convert2Comma(ProxyDomain.TrimEx())); + _lockedRules[0].ip = Utils.String2List(Utils.Convert2Comma(ProxyIP.TrimEx())); + + _lockedRules[1].domain = Utils.String2List(Utils.Convert2Comma(DirectDomain.TrimEx())); + _lockedRules[1].ip = Utils.String2List(Utils.Convert2Comma(DirectIP.TrimEx())); + + _lockedRules[2].domain = Utils.String2List(Utils.Convert2Comma(BlockDomain.TrimEx())); + _lockedRules[2].ip = Utils.String2List(Utils.Convert2Comma(BlockIP.TrimEx())); + + _lockedItem.ruleSet = JsonUtils.Serialize(_lockedRules, false); + + ConfigHandler.SaveRoutingItem(_config, _lockedItem); + } + } + + #endregion locked + + #region Refresh Save + + public void RefreshRoutingItems() + { + _routingItems.Clear(); + + var routings = LazyConfig.Instance.RoutingItems(); + foreach (var item in routings) + { + bool def = false; + if (item.id == _config.routingBasicItem.routingIndexId) + { + def = true; + } + + var it = new RoutingItemModel() + { + isActive = def, + ruleNum = item.ruleNum, + id = item.id, + remarks = item.remarks, + url = item.url, + customIcon = item.customIcon, + customRulesetPath4Singbox = item.customRulesetPath4Singbox, + sort = item.sort, + }; + _routingItems.Add(it); + } + } + + private void SaveRouting() + { + _config.routingBasicItem.domainStrategy = domainStrategy; + _config.routingBasicItem.enableRoutingAdvanced = enableRoutingAdvanced; + _config.routingBasicItem.domainMatcher = domainMatcher; + _config.routingBasicItem.domainStrategy4Singbox = domainStrategy4Singbox; + + EndBindingLockedData(); + + if (ConfigHandler.SaveConfig(_config) == 0) + { + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + _view.DialogResult = true; + } + else + { + _noticeHandler?.Enqueue(ResUI.OperationFailed); + } + } + + #endregion Refresh Save + + private void RoutingBasicImportRules() + { + //Extra to bypass the mainland + ProxyDomain = "geosite:google"; + DirectDomain = "geosite:cn"; + DirectIP = "geoip:private,geoip:cn"; + BlockDomain = "geosite:category-ads-all"; + + //_noticeHandler?.Enqueue(ResUI.OperationSuccess); + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + } + + public void RoutingAdvancedEdit(bool blNew) + { + RoutingItem item; + if (blNew) + { + item = new(); + } + else + { + item = LazyConfig.Instance.GetRoutingItem(SelectedSource?.id); + if (item is null) + { + return; + } + } + var ret = (new RoutingRuleSettingWindow(item)).ShowDialog(); + if (ret == true) + { + RefreshRoutingItems(); + IsModified = true; + } + } + + public void RoutingAdvancedRemove() + { + if (SelectedSource is null || SelectedSource.remarks.IsNullOrEmpty()) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectRules); + return; + } + if (UI.ShowYesNo(ResUI.RemoveRules) == MessageBoxResult.No) + { + return; + } + foreach (var it in SelectedSources) + { + var item = LazyConfig.Instance.GetRoutingItem(it?.id); + if (item != null) + { + ConfigHandler.RemoveRoutingItem(item); + } + } + + RefreshRoutingItems(); + IsModified = true; + } + + public void RoutingAdvancedSetDefault() + { + var item = LazyConfig.Instance.GetRoutingItem(SelectedSource?.id); + if (item is null) + { + _noticeHandler?.Enqueue(ResUI.PleaseSelectRules); + return; + } + + if (ConfigHandler.SetDefaultRouting(_config, item) == 0) + { + RefreshRoutingItems(); + IsModified = true; + } + } + + private void RoutingAdvancedImportRules() + { + if (ConfigHandler.InitBuiltinRouting(_config, true) == 0) + { + RefreshRoutingItems(); + IsModified = true; + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/SubEditViewModel.cs b/v2rayN/v2rayN/ViewModels/SubEditViewModel.cs new file mode 100755 index 0000000..84d02cd --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/SubEditViewModel.cs @@ -0,0 +1,87 @@ +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; + +namespace v2rayN.ViewModels +{ + public class SubEditViewModel : ReactiveObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + private Window _view; + + [Reactive] + public SubItem SelectedSource { get; set; } + + public ReactiveCommand SaveCmd { get; } + + public SubEditViewModel(SubItem subItem, Window view) + { + _config = LazyConfig.Instance.GetConfig(); + _noticeHandler = Locator.Current.GetService(); + _view = view; + + if (subItem.id.IsNullOrEmpty()) + { + SelectedSource = subItem; + } + else + { + SelectedSource = JsonUtils.DeepCopy(subItem); + } + + SaveCmd = ReactiveCommand.Create(() => + { + SaveSub(); + }); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + private void SaveSub() + { + string remarks = SelectedSource.remarks; + if (Utils.IsNullOrEmpty(remarks)) + { + _noticeHandler?.Enqueue(ResUI.PleaseFillRemarks); + return; + } + + var item = LazyConfig.Instance.GetSubItem(SelectedSource.id); + if (item is null) + { + item = SelectedSource; + } + else + { + item.remarks = SelectedSource.remarks; + item.url = SelectedSource.url; + item.moreUrl = SelectedSource.moreUrl; + item.enabled = SelectedSource.enabled; + item.autoUpdateInterval = SelectedSource.autoUpdateInterval; + item.userAgent = SelectedSource.userAgent; + item.sort = SelectedSource.sort; + item.filter = SelectedSource.filter; + item.convertTarget = SelectedSource.convertTarget; + item.prevProfile = SelectedSource.prevProfile; + item.nextProfile = SelectedSource.nextProfile; + } + + if (ConfigHandler.AddSubItem(_config, item) == 0) + { + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + _view.DialogResult = true; + //_view?.Close(); + } + else + { + _noticeHandler?.Enqueue(ResUI.OperationFailed); + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/ViewModels/SubSettingViewModel.cs b/v2rayN/v2rayN/ViewModels/SubSettingViewModel.cs new file mode 100755 index 0000000..ab57773 --- /dev/null +++ b/v2rayN/v2rayN/ViewModels/SubSettingViewModel.cs @@ -0,0 +1,129 @@ +using DynamicData; +using DynamicData.Binding; +using MaterialDesignThemes.Wpf; +using ReactiveUI; +using ReactiveUI.Fody.Helpers; +using Splat; +using System.Reactive; +using System.Windows; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; +using v2rayN.Views; + +namespace v2rayN.ViewModels +{ + public class SubSettingViewModel : ReactiveObject + { + private static Config _config; + private NoticeHandler? _noticeHandler; + + private IObservableCollection _subItems = new ObservableCollectionExtended(); + public IObservableCollection SubItems => _subItems; + + [Reactive] + public SubItem SelectedSource { get; set; } + + public IList SelectedSources { get; set; } + + public ReactiveCommand SubAddCmd { get; } + public ReactiveCommand SubDeleteCmd { get; } + public ReactiveCommand SubEditCmd { get; } + public ReactiveCommand SubShareCmd { get; } + public bool IsModified { get; set; } + + public SubSettingViewModel(Window view) + { + _config = LazyConfig.Instance.GetConfig(); + _noticeHandler = Locator.Current.GetService(); + + SelectedSource = new(); + + RefreshSubItems(); + + var canEditRemove = this.WhenAnyValue( + x => x.SelectedSource, + selectedSource => selectedSource != null && !selectedSource.id.IsNullOrEmpty()); + + SubAddCmd = ReactiveCommand.Create(() => + { + EditSub(true); + }); + SubDeleteCmd = ReactiveCommand.Create(() => + { + DeleteSub(); + }, canEditRemove); + SubEditCmd = ReactiveCommand.Create(() => + { + EditSub(false); + }, canEditRemove); + SubShareCmd = ReactiveCommand.Create(() => + { + SubShare(); + }, canEditRemove); + + Utils.SetDarkBorder(view, _config.uiItem.followSystemTheme ? !Utils.IsLightTheme() : _config.uiItem.colorModeDark); + } + + public void RefreshSubItems() + { + _subItems.Clear(); + _subItems.AddRange(LazyConfig.Instance.SubItems().OrderBy(t => t.sort)); + } + + public void EditSub(bool blNew) + { + SubItem item; + if (blNew) + { + item = new(); + } + else + { + item = LazyConfig.Instance.GetSubItem(SelectedSource?.id); + if (item is null) + { + return; + } + } + var ret = (new SubEditWindow(item)).ShowDialog(); + if (ret == true) + { + RefreshSubItems(); + IsModified = true; + } + } + + private void DeleteSub() + { + if (UI.ShowYesNo(ResUI.RemoveServer) == MessageBoxResult.No) + { + return; + } + + foreach (var it in SelectedSources) + { + ConfigHandler.DeleteSubItem(_config, it.id); + } + RefreshSubItems(); + _noticeHandler?.Enqueue(ResUI.OperationSuccess); + IsModified = true; + } + + private async void SubShare() + { + if (Utils.IsNullOrEmpty(SelectedSource?.url)) + { + return; + } + var img = QRCodeHelper.GetQRCode(SelectedSource?.url); + var dialog = new QrcodeView() + { + imgQrcode = { Source = img }, + txtContent = { Text = SelectedSource?.url }, + }; + + await DialogHost.Show(dialog, "SubDialog"); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Views/AddServer2Window.xaml b/v2rayN/v2rayN/Views/AddServer2Window.xaml new file mode 100755 index 0000000..0dba073 --- /dev/null +++ b/v2rayN/v2rayN/Views/AddServer2Window.xaml @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs new file mode 100755 index 0000000..4ef3e5d --- /dev/null +++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -0,0 +1,662 @@ +using ReactiveUI; +using Splat; +using System.ComponentModel; +using System.Reactive.Disposables; +using System.Runtime.InteropServices; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Input; +using System.Windows.Interop; +using System.Windows.Media; +using v2rayN.Base; +using v2rayN.Handler; +using v2rayN.Models; +using v2rayN.Resx; +using v2rayN.ViewModels; +using Point = System.Windows.Point; + +namespace v2rayN.Views +{ + public partial class MainWindow + { + private static Config _config; + + public MainWindow() + { + InitializeComponent(); + + // 设置窗口的尺寸不大于屏幕的尺寸 + if (this.Width > SystemParameters.WorkArea.Width) + { + this.Width = SystemParameters.WorkArea.Width; + } + if (this.Height > SystemParameters.WorkArea.Height) + { + this.Height = SystemParameters.WorkArea.Height; + } + + lstGroup.MaxHeight = Math.Floor(SystemParameters.WorkArea.Height * 0.20 / 40) * 40; + + _config = LazyConfig.Instance.GetConfig(); + + App.Current.SessionEnding += Current_SessionEnding; + this.Closing += MainWindow_Closing; + this.PreviewKeyDown += MainWindow_PreviewKeyDown; + btnAutofitColumnWidth.Click += BtnAutofitColumnWidth_Click; + txtServerFilter.PreviewKeyDown += TxtServerFilter_PreviewKeyDown; + lstProfiles.PreviewKeyDown += LstProfiles_PreviewKeyDown; + lstProfiles.SelectionChanged += lstProfiles_SelectionChanged; + lstProfiles.LoadingRow += LstProfiles_LoadingRow; + if (_config.uiItem.enableDragDropSort) + { + lstProfiles.AllowDrop = true; + lstProfiles.PreviewMouseLeftButtonDown += LstProfiles_PreviewMouseLeftButtonDown; + lstProfiles.MouseMove += LstProfiles_MouseMove; + lstProfiles.DragEnter += LstProfiles_DragEnter; + lstProfiles.Drop += LstProfiles_Drop; + } + + ViewModel = new MainWindowViewModel(MainSnackbar.MessageQueue!, UpdateViewHandler); + Locator.CurrentMutable.RegisterLazySingleton(() => ViewModel, typeof(MainWindowViewModel)); + + for (int i = Global.MinFontSize; i <= Global.MinFontSize + 8; i++) + { + cmbCurrentFontSize.Items.Add(i.ToString()); + } + + Global.Languages.ForEach(it => + { + cmbCurrentLanguage.Items.Add(it); + }); + + this.WhenActivated(disposables => + { + this.OneWayBind(ViewModel, vm => vm.ProfileItems, v => v.lstProfiles.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedProfile, v => v.lstProfiles.SelectedItem).DisposeWith(disposables); + + this.OneWayBind(ViewModel, vm => vm.SubItems, v => v.lstGroup.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedSub, v => v.lstGroup.SelectedItem).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.ServerFilter, v => v.txtServerFilter.Text).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddSubCmd, v => v.btnAddSub).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.EditSubCmd, v => v.btnEditSub).DisposeWith(disposables); + + //servers + this.BindCommand(ViewModel, vm => vm.AddVmessServerCmd, v => v.menuAddVmessServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddVlessServerCmd, v => v.menuAddVlessServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddShadowsocksServerCmd, v => v.menuAddShadowsocksServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddSocksServerCmd, v => v.menuAddSocksServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddHttpServerCmd, v => v.menuAddHttpServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddTrojanServerCmd, v => v.menuAddTrojanServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddHysteria2ServerCmd, v => v.menuAddHysteria2Server).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddTuicServerCmd, v => v.menuAddTuicServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddWireguardServerCmd, v => v.menuAddWireguardServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddCustomServerCmd, v => v.menuAddCustomServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddServerViaClipboardCmd, v => v.menuAddServerViaClipboard).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddServerViaScanCmd, v => v.menuAddServerViaScan).DisposeWith(disposables); + + //servers delete + this.BindCommand(ViewModel, vm => vm.EditServerCmd, v => v.menuEditServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.RemoveServerCmd, v => v.menuRemoveServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.RemoveDuplicateServerCmd, v => v.menuRemoveDuplicateServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.CopyServerCmd, v => v.menuCopyServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SetDefaultServerCmd, v => v.menuSetDefaultServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.ShareServerCmd, v => v.menuShareServer).DisposeWith(disposables); + + //servers move + this.OneWayBind(ViewModel, vm => vm.SubItems, v => v.cmbMoveToGroup.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedMoveToGroup, v => v.cmbMoveToGroup.SelectedItem).DisposeWith(disposables); + + this.BindCommand(ViewModel, vm => vm.MoveTopCmd, v => v.menuMoveTop).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.MoveUpCmd, v => v.menuMoveUp).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.MoveDownCmd, v => v.menuMoveDown).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.MoveBottomCmd, v => v.menuMoveBottom).DisposeWith(disposables); + + //servers ping + this.BindCommand(ViewModel, vm => vm.MixedTestServerCmd, v => v.menuMixedTestServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.TcpingServerCmd, v => v.menuTcpingServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.RealPingServerCmd, v => v.menuRealPingServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SpeedServerCmd, v => v.menuSpeedServer).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SortServerResultCmd, v => v.menuSortServerResult).DisposeWith(disposables); + + //servers export + this.BindCommand(ViewModel, vm => vm.Export2ClientConfigCmd, v => v.menuExport2ClientConfig).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.Export2ShareUrlCmd, v => v.menuExport2ShareUrl).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.Export2SubContentCmd, v => v.menuExport2SubContent).DisposeWith(disposables); + + //sub + this.BindCommand(ViewModel, vm => vm.SubSettingCmd, v => v.menuSubSetting).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubUpdateCmd, v => v.menuSubUpdate).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubUpdateViaProxyCmd, v => v.menuSubUpdateViaProxy).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubGroupUpdateCmd, v => v.menuSubGroupUpdate).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubGroupUpdateViaProxyCmd, v => v.menuSubGroupUpdateViaProxy).DisposeWith(disposables); + + //setting + this.BindCommand(ViewModel, vm => vm.OptionSettingCmd, v => v.menuOptionSetting).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.RoutingSettingCmd, v => v.menuRoutingSetting).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.DNSSettingCmd, v => v.menuDNSSetting).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.GlobalHotkeySettingCmd, v => v.menuGlobalHotkeySetting).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.RebootAsAdminCmd, v => v.menuRebootAsAdmin).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.ClearServerStatisticsCmd, v => v.menuClearServerStatistics).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.OpenTheFileLocationCmd, v => v.menuOpenTheFileLocation).DisposeWith(disposables); + //this.BindCommand(ViewModel, vm => vm.ImportOldGuiConfigCmd, v => v.menuImportOldGuiConfig).DisposeWith(disposables); + + //check update + //this.BindCommand(ViewModel, vm => vm.CheckUpdateNCmd, v => v.menuCheckUpdateN).DisposeWith(disposables); + //this.BindCommand(ViewModel, vm => vm.CheckUpdateV2flyCoreCmd, v => v.menuCheckUpdateV2flyCore).DisposeWith(disposables); + //this.BindCommand(ViewModel, vm => vm.CheckUpdateSagerNetCoreCmd, v => v.menuCheckUpdateSagerNetCore).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.CheckUpdateXrayCoreCmd, v => v.menuCheckUpdateXrayCore).DisposeWith(disposables); + //this.BindCommand(ViewModel, vm => vm.CheckUpdateClashCoreCmd, v => v.menuCheckUpdateClashCore).DisposeWith(disposables); + //this.BindCommand(ViewModel, vm => vm.CheckUpdateClashMetaCoreCmd, v => v.menuCheckUpdateClashMetaCore).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.CheckUpdateSingBoxCoreCmd, v => v.menuCheckUpdateSingBoxCore).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.CheckUpdateGeoCmd, v => v.menuCheckUpdateGeo).DisposeWith(disposables); + + this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables); + + //system proxy + this.OneWayBind(ViewModel, vm => vm.BlSystemProxyClear, v => v.menuSystemProxyClear2.Visibility, conversionHint: BooleanToVisibilityHint.UseHidden, vmToViewConverterOverride: new BooleanToVisibilityTypeConverter()).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.BlSystemProxySet, v => v.menuSystemProxySet2.Visibility, conversionHint: BooleanToVisibilityHint.UseHidden, vmToViewConverterOverride: new BooleanToVisibilityTypeConverter()).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.BlSystemProxyNothing, v => v.menuSystemProxyNothing2.Visibility, conversionHint: BooleanToVisibilityHint.UseHidden, vmToViewConverterOverride: new BooleanToVisibilityTypeConverter()).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.BlSystemProxyPac, v => v.menuSystemProxyPac2.Visibility, conversionHint: BooleanToVisibilityHint.UseHidden, vmToViewConverterOverride: new BooleanToVisibilityTypeConverter()).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SystemProxyClearCmd, v => v.menuSystemProxyClear).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SystemProxySetCmd, v => v.menuSystemProxySet).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SystemProxyPacCmd, v => v.menuSystemProxyPac).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SystemProxyNothingCmd, v => v.menuSystemProxyNothing).DisposeWith(disposables); + + //routings and servers + this.OneWayBind(ViewModel, vm => vm.RoutingItems, v => v.cmbRoutings.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedRouting, v => v.cmbRoutings.SelectedItem).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.BlRouting, v => v.menuRoutings.Visibility).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.BlRouting, v => v.sepRoutings.Visibility).DisposeWith(disposables); + + this.OneWayBind(ViewModel, vm => vm.Servers, v => v.cmbServers.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedServer, v => v.cmbServers.SelectedItem).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.BlServers, v => v.cmbServers.Visibility).DisposeWith(disposables); + + //tray menu + this.BindCommand(ViewModel, vm => vm.AddServerViaClipboardCmd, v => v.menuAddServerViaClipboard2).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.AddServerViaScanCmd, v => v.menuAddServerViaScan2).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubUpdateCmd, v => v.menuSubUpdate2).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubUpdateViaProxyCmd, v => v.menuSubUpdateViaProxy2).DisposeWith(disposables); + + this.OneWayBind(ViewModel, vm => vm.NotifyIcon, v => v.tbNotify.Icon).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.RunningServerToolTipText, v => v.tbNotify.ToolTipText).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.NotifyLeftClickCmd, v => v.tbNotify.LeftClickCommand).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.AppIcon, v => v.Icon).DisposeWith(disposables); + //this.OneWayBind(ViewModel, vm => vm.BlShowTrayTip, v => v.borTrayToolTip.Visibility).DisposeWith(disposables); + + //status bar + this.OneWayBind(ViewModel, vm => vm.InboundDisplay, v => v.txtInboundDisplay.Text).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.InboundLanDisplay, v => v.txtInboundLanDisplay.Text).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.RunningServerDisplay, v => v.txtRunningServerDisplay.Text).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.RunningInfoDisplay, v => v.txtRunningInfoDisplay.Text).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.SpeedProxyDisplay, v => v.txtSpeedProxyDisplay.Text).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.SpeedDirectDisplay, v => v.txtSpeedDirectDisplay.Text).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.EnableTun, v => v.togEnableTun.IsChecked).DisposeWith(disposables); + + this.Bind(ViewModel, vm => vm.SystemProxySelected, v => v.cmbSystemProxy.SelectedIndex).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.RoutingItems, v => v.cmbRoutings2.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedRouting, v => v.cmbRoutings2.SelectedItem).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.BlRouting, v => v.cmbRoutings2.Visibility).DisposeWith(disposables); + + //UI + this.Bind(ViewModel, vm => vm.ColorModeDark, v => v.togDarkMode.IsChecked).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.FollowSystemTheme, v => v.followSystemTheme.IsChecked).DisposeWith(disposables); + this.OneWayBind(ViewModel, vm => vm.Swatches, v => v.cmbSwatches.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedSwatch, v => v.cmbSwatches.SelectedItem).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.CurrentFontSize, v => v.cmbCurrentFontSize.Text).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.CurrentLanguage, v => v.cmbCurrentLanguage.Text).DisposeWith(disposables); + }); + + RestoreUI(); + AddHelpMenuItem(); + + var IsAdministrator = Utils.IsAdministrator(); + this.Title = $"{Utils.GetVersion()} - {(IsAdministrator ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; + + //if (_config.uiItem.autoHideStartup) + //{ + // WindowState = WindowState.Minimized; + //} + + if (!_config.guiItem.enableHWA) + { + RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly; + } + + var helper = new WindowInteropHelper(this); + var hwndSource = HwndSource.FromHwnd(helper.EnsureHandle()); + hwndSource.AddHook((IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) => + { + if (_config.uiItem.followSystemTheme) + { + const int WM_SETTINGCHANGE = 0x001A; + if (msg == WM_SETTINGCHANGE) + { + if (wParam == IntPtr.Zero && Marshal.PtrToStringUni(lParam) == "ImmersiveColorSet") + { + ViewModel?.ModifyTheme(!Utils.IsLightTheme()); + } + } + } + + return IntPtr.Zero; + }); + } + + #region Event + + private void UpdateViewHandler(EViewAction action) + { + if (action == EViewAction.AdjustMainLvColWidth) + { + Application.Current.Dispatcher.Invoke(() => + { + AutofitColumnWidth(); + }); + } + else if (action == EViewAction.ProfilesFocus) + { + lstProfiles.Focus(); + } + } + + private void MainWindow_Closing(object? sender, CancelEventArgs e) + { + e.Cancel = true; + ViewModel?.ShowHideWindow(false); + } + + private void menuExit_Click(object sender, RoutedEventArgs e) + { + tbNotify.Dispose(); + StorageUI(); + ViewModel?.MyAppExit(false); + } + + private void Current_SessionEnding(object sender, SessionEndingCancelEventArgs e) + { + Logging.SaveLog("Current_SessionEnding"); + StorageUI(); + ViewModel?.MyAppExit(true); + } + + private void lstProfiles_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) + { + ViewModel.SelectedProfiles = lstProfiles.SelectedItems.Cast().ToList(); + } + + private void LstProfiles_LoadingRow(object? sender, DataGridRowEventArgs e) + { + e.Row.Header = $" {e.Row.GetIndex() + 1}"; + } + + private void LstProfiles_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + if (_config.uiItem.doubleClick2Activate) + { + ViewModel?.SetDefaultServer(); + } + else + { + ViewModel?.EditServer(false, EConfigType.Custom); + } + } + + private void LstProfiles_ColumnHeader_Click(object sender, RoutedEventArgs e) + { + var colHeader = sender as DataGridColumnHeader; + if (colHeader == null || colHeader.TabIndex < 0 || colHeader.Column == null) + { + return; + } + + var colName = ((MyDGTextColumn)colHeader.Column).ExName; + ViewModel?.SortServer(colName); + } + + private void menuSelectAll_Click(object sender, RoutedEventArgs e) + { + lstProfiles.SelectAll(); + } + + private void MainWindow_PreviewKeyDown(object sender, KeyEventArgs e) + { + if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) + { + switch (e.Key) + { + case Key.V: + ViewModel?.AddServerViaClipboard(); + break; + + case Key.O: + ViewModel?.ServerSpeedtest(ESpeedActionType.Tcping); + break; + + case Key.R: + ViewModel?.ServerSpeedtest(ESpeedActionType.Realping); + break; + + case Key.S: + ViewModel?.ScanScreenTaskAsync().ContinueWith(_ => { }); + break; + + case Key.T: + ViewModel?.ServerSpeedtest(ESpeedActionType.Speedtest); + break; + + case Key.E: + ViewModel?.ServerSpeedtest(ESpeedActionType.Mixedtest); + break; + } + } + else + { + if (e.Key == Key.F5) + { + ViewModel?.Reload(); + } + else if (e.Key == Key.Escape) + { + MessageBus.Current.SendMessage("true", Global.CommandStopSpeedTest); + } + } + } + + private void LstProfiles_PreviewKeyDown(object sender, KeyEventArgs e) + { + if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) + { + if (e.Key == Key.A) + { + menuSelectAll_Click(null, null); + } + else if (e.Key == Key.C) + { + ViewModel?.Export2ShareUrl(); + } + else if (e.Key == Key.D) + { + ViewModel?.EditServer(false, EConfigType.Custom); + } + else if (e.Key == Key.F) + { + ViewModel?.ShareServer(); + } + } + else + { + if (e.Key is Key.Enter or Key.Return) + { + ViewModel?.SetDefaultServer(); + } + else if (e.Key == Key.Delete) + { + ViewModel?.RemoveServer(); + } + else if (e.Key == Key.T) + { + ViewModel?.MoveServer(EMove.Top); + } + else if (e.Key == Key.U) + { + ViewModel?.MoveServer(EMove.Up); + } + else if (e.Key == Key.D) + { + ViewModel?.MoveServer(EMove.Down); + } + else if (e.Key == Key.B) + { + ViewModel?.MoveServer(EMove.Bottom); + } + } + } + + private void menuClose_Click(object sender, RoutedEventArgs e) + { + StorageUI(); + ViewModel?.ShowHideWindow(false); + } + + private void menuPromotion_Click(object sender, RoutedEventArgs e) + { + Utils.ProcessStart($"{Utils.Base64Decode(Global.PromotionUrl)}?t={DateTime.Now.Ticks}"); + } + + private void txtRunningInfoDisplay_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + ViewModel?.TestServerAvailability(); + } + + private void menuSettingsSetUWP_Click(object sender, RoutedEventArgs e) + { + Utils.ProcessStart(Utils.GetBinPath("EnableLoopback.exe")); + } + + private void BtnAutofitColumnWidth_Click(object sender, RoutedEventArgs e) + { + AutofitColumnWidth(); + } + + private void AutofitColumnWidth() + { + foreach (var it in lstProfiles.Columns) + { + it.Width = new DataGridLength(1, DataGridLengthUnitType.Auto); + } + } + + private void TxtServerFilter_PreviewKeyDown(object sender, KeyEventArgs e) + { + if (e.Key is Key.Enter or Key.Return) + { + ViewModel?.RefreshServers(); + } + } + + #endregion Event + + #region UI + + private void RestoreUI() + { + if (_config.uiItem.mainWidth > 0 && _config.uiItem.mainHeight > 0) + { + Width = _config.uiItem.mainWidth; + Height = _config.uiItem.mainHeight; + } + + var maxWidth = SystemParameters.WorkArea.Width; + var maxHeight = SystemParameters.WorkArea.Height; + if (Width > maxWidth) Width = maxWidth; + if (Height > maxHeight) Height = maxHeight; + if (_config.uiItem.mainGirdHeight1 > 0 && _config.uiItem.mainGirdHeight2 > 0) + { + gridMain.RowDefinitions[0].Height = new GridLength(_config.uiItem.mainGirdHeight1, GridUnitType.Star); + gridMain.RowDefinitions[2].Height = new GridLength(_config.uiItem.mainGirdHeight2, GridUnitType.Star); + } + + var lvColumnItem = _config.uiItem.mainColumnItem.OrderBy(t => t.Index).ToList(); + var displayIndex = 0; + foreach (var item in lvColumnItem) + { + foreach (MyDGTextColumn item2 in lstProfiles.Columns) + { + if (item2.ExName == item.Name) + { + if (item.Width < 0) + { + item2.Visibility = Visibility.Hidden; + } + else + { + item2.Width = item.Width; + item2.DisplayIndex = displayIndex++; + } + } + } + } + + if (!_config.guiItem.enableStatistics) + { + colTodayUp.Visibility = + colTodayDown.Visibility = + colTotalUp.Visibility = + colTotalDown.Visibility = Visibility.Hidden; + } + else + { + colTodayUp.Visibility = + colTodayDown.Visibility = + colTotalUp.Visibility = + colTotalDown.Visibility = Visibility.Visible; + } + } + + private void StorageUI() + { + _config.uiItem.mainWidth = Utils.ToInt(this.Width); + _config.uiItem.mainHeight = Utils.ToInt(this.Height); + + List lvColumnItem = new(); + for (int k = 0; k < lstProfiles.Columns.Count; k++) + { + var item2 = (MyDGTextColumn)lstProfiles.Columns[k]; + lvColumnItem.Add(new() + { + Name = item2.ExName, + Width = item2.Visibility == Visibility.Visible ? Utils.ToInt(item2.ActualWidth) : -1, + Index = item2.DisplayIndex + }); + } + _config.uiItem.mainColumnItem = lvColumnItem; + + _config.uiItem.mainGirdHeight1 = Math.Ceiling(gridMain.RowDefinitions[0].ActualHeight + 0.1); + _config.uiItem.mainGirdHeight2 = Math.Ceiling(gridMain.RowDefinitions[2].ActualHeight + 0.1); + } + + private void AddHelpMenuItem() + { + var coreInfo = LazyConfig.Instance.GetCoreInfo(); + foreach (var it in coreInfo + .Where(t => t.coreType != ECoreType.v2fly + && t.coreType != ECoreType.clash + && t.coreType != ECoreType.clash_meta + && t.coreType != ECoreType.hysteria)) + { + var item = new MenuItem() + { + Tag = it.coreUrl.Replace(@"/releases", ""), + Header = string.Format(Resx.ResUI.menuWebsiteItem, it.coreType.ToString().Replace("_", " ")).UpperFirstChar() + }; + item.Click += MenuItem_Click; + menuHelp.Items.Add(item); + } + } + + private void MenuItem_Click(object sender, RoutedEventArgs e) + { + if (sender is MenuItem item) + { + Utils.ProcessStart(item.Tag.ToString()); + } + } + + #endregion UI + + #region Drag and Drop + + private Point startPoint = new(); + private int startIndex = -1; + private string formatData = "ProfileItemModel"; + + /// + /// Helper to search up the VisualTree + /// + /// + /// + /// + private static T? FindAncestor(DependencyObject current) where T : DependencyObject + { + do + { + if (current is T) + { + return (T)current; + } + current = VisualTreeHelper.GetParent(current); + } + while (current != null); + return null; + } + + private void LstProfiles_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + // Get current mouse position + startPoint = e.GetPosition(null); + } + + private void LstProfiles_MouseMove(object sender, MouseEventArgs e) + { + // Get the current mouse position + Point mousePos = e.GetPosition(null); + Vector diff = startPoint - mousePos; + + if (e.LeftButton == MouseButtonState.Pressed && + (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance || + Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)) + { + // Get the dragged Item + if (sender is not DataGrid listView) return; + var listViewItem = FindAncestor((DependencyObject)e.OriginalSource); + if (listViewItem == null) return; // Abort + // Find the data behind the ListViewItem + ProfileItemModel item = (ProfileItemModel)listView.ItemContainerGenerator.ItemFromContainer(listViewItem); + if (item == null) return; // Abort + // Initialize the drag & drop operation + startIndex = lstProfiles.SelectedIndex; + DataObject dragData = new(formatData, item); + DragDrop.DoDragDrop(listViewItem, dragData, DragDropEffects.Copy | DragDropEffects.Move); + } + } + + private void LstProfiles_DragEnter(object sender, DragEventArgs e) + { + if (!e.Data.GetDataPresent(formatData) || sender != e.Source) + { + e.Effects = DragDropEffects.None; + } + } + + private void LstProfiles_Drop(object sender, DragEventArgs e) + { + if (e.Data.GetDataPresent(formatData) && sender == e.Source) + { + // Get the drop Item destination + if (sender is not DataGrid listView) return; + var listViewItem = FindAncestor((DependencyObject)e.OriginalSource); + if (listViewItem == null) + { + // Abort + e.Effects = DragDropEffects.None; + return; + } + // Find the data behind the Item + ProfileItemModel item = (ProfileItemModel)listView.ItemContainerGenerator.ItemFromContainer(listViewItem); + if (item == null) return; + // Move item into observable collection + // (this will be automatically reflected to lstView.ItemsSource) + e.Effects = DragDropEffects.Move; + + ViewModel?.MoveServerTo(startIndex, item); + + startIndex = -1; + } + } + + #endregion Drag and Drop + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Views/MsgView.xaml b/v2rayN/v2rayN/Views/MsgView.xaml new file mode 100755 index 0000000..9e61d41 --- /dev/null +++ b/v2rayN/v2rayN/Views/MsgView.xaml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Views/MsgView.xaml.cs b/v2rayN/v2rayN/Views/MsgView.xaml.cs new file mode 100755 index 0000000..f6cac11 --- /dev/null +++ b/v2rayN/v2rayN/Views/MsgView.xaml.cs @@ -0,0 +1,121 @@ +using ReactiveUI; +using System.Reactive.Linq; +using System.Text.RegularExpressions; +using System.Windows.Threading; +using v2rayN.Handler; +using v2rayN.Models; + +namespace v2rayN.Views +{ + public partial class MsgView + { + private static Config? _config; + + private string lastMsgFilter = string.Empty; + private bool lastMsgFilterNotAvailable; + + public MsgView() + { + InitializeComponent(); + _config = LazyConfig.Instance.GetConfig(); + MessageBus.Current.Listen(Global.CommandSendMsgView).Subscribe(x => DelegateAppendText(x)); + Global.PresetMsgFilters.ForEach(it => + { + cmbMsgFilter.Items.Add(it); + }); + if (!_config.uiItem.mainMsgFilter.IsNullOrEmpty()) + { + cmbMsgFilter.Text = _config.uiItem.mainMsgFilter; + } + } + + private void DelegateAppendText(string msg) + { + Dispatcher.BeginInvoke(AppendText, DispatcherPriority.Send, msg); + } + + public void AppendText(string msg) + { + if (msg == Global.CommandClearMsg) + { + ClearMsg(); + return; + } + if (togAutoRefresh.IsChecked == false) + { + return; + } + + var MsgFilter = cmbMsgFilter.Text.TrimEx(); + if (MsgFilter != lastMsgFilter) lastMsgFilterNotAvailable = false; + if (!Utils.IsNullOrEmpty(MsgFilter) && !lastMsgFilterNotAvailable) + { + try + { + if (!Regex.IsMatch(msg, MsgFilter)) // ʽ쳣 + { + return; + } + } + catch (Exception) + { + lastMsgFilterNotAvailable = true; + } + } + lastMsgFilter = MsgFilter; + + ShowMsg(msg); + + if (togScrollToEnd.IsChecked ?? true) + { + txtMsg.ScrollToEnd(); + } + } + + private void ShowMsg(string msg) + { + if (txtMsg.LineCount > 999) + { + ClearMsg(); + } + this.txtMsg.AppendText(msg); + if (!msg.EndsWith(Environment.NewLine)) + { + this.txtMsg.AppendText(Environment.NewLine); + } + } + + public void ClearMsg() + { + txtMsg.Clear(); + } + + private void menuMsgViewSelectAll_Click(object sender, System.Windows.RoutedEventArgs e) + { + txtMsg.Focus(); + txtMsg.SelectAll(); + } + + private void menuMsgViewCopy_Click(object sender, System.Windows.RoutedEventArgs e) + { + var data = txtMsg.SelectedText.TrimEx(); + Utils.SetClipboardData(data); + } + + private void menuMsgViewCopyAll_Click(object sender, System.Windows.RoutedEventArgs e) + { + var data = txtMsg.Text; + Utils.SetClipboardData(data); + } + + private void menuMsgViewClear_Click(object sender, System.Windows.RoutedEventArgs e) + { + ClearMsg(); + } + + private void cmbMsgFilter_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) + { + _config.uiItem.mainMsgFilter = cmbMsgFilter.Text.TrimEx(); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/Views/OptionSettingWindow.xaml b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml new file mode 100755 index 0000000..1c10ca0 --- /dev/null +++ b/v2rayN/v2rayN/Views/OptionSettingWindow.xaml @@ -0,0 +1,1077 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs b/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs new file mode 100755 index 0000000..c6a37dc --- /dev/null +++ b/v2rayN/v2rayN/Views/SubSettingWindow.xaml.cs @@ -0,0 +1,76 @@ +using ReactiveUI; +using System.ComponentModel; +using System.Reactive.Disposables; +using System.Windows; +using System.Windows.Input; +using v2rayN.Models; +using v2rayN.ViewModels; + +namespace v2rayN.Views +{ + public partial class SubSettingWindow + { + public SubSettingWindow() + { + InitializeComponent(); + + // 设置窗口的尺寸不大于屏幕的尺寸 + if (this.Width > SystemParameters.WorkArea.Width) + { + this.Width = SystemParameters.WorkArea.Width; + } + if (this.Height > SystemParameters.WorkArea.Height) + { + this.Height = SystemParameters.WorkArea.Height; + } + + this.Owner = Application.Current.MainWindow; + + ViewModel = new SubSettingViewModel(this); + this.Closing += SubSettingWindow_Closing; + lstSubscription.MouseDoubleClick += LstSubscription_MouseDoubleClick; + lstSubscription.SelectionChanged += LstSubscription_SelectionChanged; + + this.WhenActivated(disposables => + { + this.OneWayBind(ViewModel, vm => vm.SubItems, v => v.lstSubscription.ItemsSource).DisposeWith(disposables); + this.Bind(ViewModel, vm => vm.SelectedSource, v => v.lstSubscription.SelectedItem).DisposeWith(disposables); + + this.BindCommand(ViewModel, vm => vm.SubAddCmd, v => v.menuSubAdd).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubDeleteCmd, v => v.menuSubDelete).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubEditCmd, v => v.menuSubEdit).DisposeWith(disposables); + this.BindCommand(ViewModel, vm => vm.SubShareCmd, v => v.menuSubShare).DisposeWith(disposables); + }); + } + + private void SubSettingWindow_Closing(object? sender, CancelEventArgs e) + { + if (ViewModel?.IsModified == true) + { + this.DialogResult = true; + } + } + + private void LstSubscription_MouseDoubleClick(object sender, MouseButtonEventArgs e) + { + ViewModel?.EditSub(false); + } + + private void LstSubscription_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) + { + ViewModel.SelectedSources = lstSubscription.SelectedItems.Cast().ToList(); + } + + private void menuClose_Click(object sender, System.Windows.RoutedEventArgs e) + { + if (ViewModel?.IsModified == true) + { + this.DialogResult = true; + } + else + { + this.Close(); + } + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayN/app.manifest b/v2rayN/v2rayN/app.manifest new file mode 100755 index 0000000..1246cc3 --- /dev/null +++ b/v2rayN/v2rayN/app.manifest @@ -0,0 +1,23 @@ + + + + + true + PerMonitorV2 + + + + + + + + + + \ No newline at end of file diff --git a/v2rayN/v2rayN/v2rayN.csproj b/v2rayN/v2rayN/v2rayN.csproj new file mode 100755 index 0000000..09b591b --- /dev/null +++ b/v2rayN/v2rayN/v2rayN.csproj @@ -0,0 +1,123 @@ + + + + true + WinExe + net8.0-windows10.0.17763 + enable + true + app.manifest + enable + v2rayN.ico + Copyright © 2017-2024 (GPLv3) + 6.45 + 7.0 + + + + + + + + + + + + + + + + + + + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + Never + + + + Never + + + Never + + + Never + + + Never + + + Never + + + + + + Always + + + + + + + + + + + True + True + ResUI.resx + + + + + + PublicResXFileCodeGenerator + ResUI.Designer.cs + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + PublicResXFileCodeGenerator + + + + diff --git a/v2rayN/v2rayN/v2rayN.ico b/v2rayN/v2rayN/v2rayN.ico new file mode 100755 index 0000000..a978e0a Binary files /dev/null and b/v2rayN/v2rayN/v2rayN.ico differ diff --git a/v2rayN/v2rayUpgrade/MainForm.Designer.cs b/v2rayN/v2rayUpgrade/MainForm.Designer.cs new file mode 100755 index 0000000..bdfa437 --- /dev/null +++ b/v2rayN/v2rayUpgrade/MainForm.Designer.cs @@ -0,0 +1,107 @@ +namespace v2rayUpgrade +{ + partial class MainForm + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + this.btnClose = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // btnClose + // + this.btnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnClose.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnClose.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.btnClose.Location = new System.Drawing.Point(367, 118); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(184, 89); + this.btnClose.TabIndex = 1; + this.btnClose.Text = "&Exit(退出)"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // btnOK + // + this.btnOK.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnOK.ImeMode = System.Windows.Forms.ImeMode.NoControl; + this.btnOK.Location = new System.Drawing.Point(81, 118); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(184, 89); + this.btnOK.TabIndex = 0; + this.btnOK.Text = "&Upgrade(升级)"; + this.btnOK.UseVisualStyleBackColor = true; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label1.Location = new System.Drawing.Point(79, 64); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(205, 15); + this.label1.TabIndex = 8; + this.label1.Text = "升级成功后将自动重启v2rayN"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("微软雅黑", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.label2.Location = new System.Drawing.Point(79, 37); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(471, 15); + this.label2.TabIndex = 9; + this.label2.Text = "v2rayN will restart automatically after successful upgrade"; + // + // MainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(616, 284); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.btnClose); + this.Controls.Add(this.btnOK); + this.Name = "MainForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "v2rayUpgrade"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} + diff --git a/v2rayN/v2rayUpgrade/MainForm.cs b/v2rayN/v2rayUpgrade/MainForm.cs new file mode 100755 index 0000000..39f8196 --- /dev/null +++ b/v2rayN/v2rayUpgrade/MainForm.cs @@ -0,0 +1,147 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.IO.Compression; +using System.Text; +using System.Windows.Forms; + +namespace v2rayUpgrade +{ + public partial class MainForm : Form + { + private readonly string defaultFilename = "v2ray-windows.zip"; + private string? fileName; + + public MainForm(string[] args) + { + InitializeComponent(); + if (args.Length > 0) + { + fileName = Uri.UnescapeDataString(string.Join(" ", args)); + } + else + { + fileName = defaultFilename; + } + } + + private void ShowWarn(string message) + { + MessageBox.Show(message, "", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + private void btnOK_Click(object sender, EventArgs e) + { + try + { + Process[] existing = Process.GetProcessesByName("v2rayN"); + foreach (Process p in existing) + { + string? path = p.MainModule?.FileName; + if (path == GetPath("v2rayN.exe")) + { + p.Kill(); + p.WaitForExit(100); + } + } + } + catch (Exception ex) + { + // Access may be denied without admin right. The user may not be an administrator. + ShowWarn("Failed to close v2rayN(关闭v2rayN失败).\n" + + "Close it manually, or the upgrade may fail.(请手动关闭正在运行的v2rayN,否则可能升级失败。\n\n" + ex.StackTrace); + } + + if (!File.Exists(fileName)) + { + if (File.Exists(defaultFilename)) + { + fileName = defaultFilename; + } + else + { + ShowWarn("Upgrade Failed, File Not Exist(升级失败,文件不存在)."); + return; + } + } + + StringBuilder sb = new(); + try + { + string thisAppOldFile = $"{Application.ExecutablePath}.tmp"; + File.Delete(thisAppOldFile); + string startKey = "v2rayN/"; + + using ZipArchive archive = ZipFile.OpenRead(fileName); + foreach (ZipArchiveEntry entry in archive.Entries) + { + try + { + if (entry.Length == 0) + { + continue; + } + string fullName = entry.FullName; + if (fullName.StartsWith(startKey)) + { + fullName = fullName[startKey.Length..]; + } + if (string.Equals(Application.ExecutablePath, GetPath(fullName), StringComparison.OrdinalIgnoreCase)) + { + File.Move(Application.ExecutablePath, thisAppOldFile); + } + + string entryOutputPath = GetPath(fullName); + Directory.CreateDirectory(Path.GetDirectoryName(entryOutputPath)!); + entry.ExtractToFile(entryOutputPath, true); + } + catch (Exception ex) + { + sb.Append(ex.StackTrace); + } + } + } + catch (Exception ex) + { + ShowWarn("Upgrade Failed(升级失败)." + ex.StackTrace); + return; + } + if (sb.Length > 0) + { + ShowWarn("Upgrade Failed,Hold ctrl + c to copy to clipboard.\n" + + "(升级失败,按住ctrl+c可以复制到剪贴板)." + sb.ToString()); + return; + } + + Process.Start("v2rayN.exe"); + MessageBox.Show("Upgrade successed(升级成功)", "", MessageBoxButtons.OK, MessageBoxIcon.Information); + + Close(); + } + + private void btnClose_Click(object sender, EventArgs e) + { + Close(); + } + + public static string GetExePath() + { + return Application.ExecutablePath; + } + + public static string StartupPath() + { + return Application.StartupPath; + } + + public static string GetPath(string fileName) + { + string startupPath = StartupPath(); + if (string.IsNullOrEmpty(fileName)) + { + return startupPath; + } + return Path.Combine(startupPath, fileName); + } + } +} diff --git a/v2rayN/Forms/QRCodeControl.zh-Hans.resx b/v2rayN/v2rayUpgrade/MainForm.resx old mode 100644 new mode 100755 similarity index 100% rename from v2rayN/Forms/QRCodeControl.zh-Hans.resx rename to v2rayN/v2rayUpgrade/MainForm.resx diff --git a/v2rayN/v2rayUpgrade/Program.cs b/v2rayN/v2rayUpgrade/Program.cs new file mode 100755 index 0000000..bc4303d --- /dev/null +++ b/v2rayN/v2rayUpgrade/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Windows.Forms; + +namespace v2rayUpgrade +{ + internal static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + private static void Main(string[] args) + { + Application.EnableVisualStyles(); + Application.SetHighDpiMode(HighDpiMode.SystemAware); + Application.SetHighDpiMode(HighDpiMode.PerMonitorV2); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm(args)); + } + } +} \ No newline at end of file diff --git a/v2rayN/v2rayUpgrade/Properties/Resources.Designer.cs b/v2rayN/v2rayUpgrade/Properties/Resources.Designer.cs new file mode 100755 index 0000000..f766ed1 --- /dev/null +++ b/v2rayN/v2rayUpgrade/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace v2rayUpgrade.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("v2rayUpgrade.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/v2rayN/Forms/SubSettingControl.zh-Hans.resx b/v2rayN/v2rayUpgrade/Properties/Resources.resx old mode 100644 new mode 100755 similarity index 78% rename from v2rayN/Forms/SubSettingControl.zh-Hans.resx rename to v2rayN/v2rayUpgrade/Properties/Resources.resx index 025daff..af7dbeb --- a/v2rayN/Forms/SubSettingControl.zh-Hans.resx +++ b/v2rayN/v2rayUpgrade/Properties/Resources.resx @@ -46,7 +46,7 @@ mimetype: application/x-microsoft.net.object.binary.base64 value : The object must be serialized with - : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : System.Serialization.Formatters.Binary.BinaryFormatter : and then encoded with base64 encoding. mimetype: application/x-microsoft.net.object.soap.base64 @@ -60,7 +60,6 @@ : and then encoded with base64 encoding. --> - @@ -69,10 +68,9 @@ - + - @@ -87,10 +85,9 @@ - + - @@ -112,34 +109,9 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 48, 16 - - - 启用 - - - 移除 - - - 29, 12 - - - 备注 - - - 65, 12 - - - 地址 (url) - - - 节点订阅详情 - \ No newline at end of file diff --git a/v2rayN/Properties/Settings.Designer.cs b/v2rayN/v2rayUpgrade/Properties/Settings.Designer.cs old mode 100644 new mode 100755 similarity index 94% rename from v2rayN/Properties/Settings.Designer.cs rename to v2rayN/v2rayUpgrade/Properties/Settings.Designer.cs index 9ff2ce1..ecf1927 --- a/v2rayN/Properties/Settings.Designer.cs +++ b/v2rayN/v2rayUpgrade/Properties/Settings.Designer.cs @@ -8,11 +8,11 @@ // //------------------------------------------------------------------------------ -namespace v2rayN.Properties { +namespace v2rayUpgrade.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.3.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); diff --git a/v2rayN/Properties/Settings.settings b/v2rayN/v2rayUpgrade/Properties/Settings.settings old mode 100644 new mode 100755 similarity index 100% rename from v2rayN/Properties/Settings.settings rename to v2rayN/v2rayUpgrade/Properties/Settings.settings diff --git a/v2rayN/v2rayUpgrade/app.manifest b/v2rayN/v2rayUpgrade/app.manifest new file mode 100755 index 0000000..3081161 --- /dev/null +++ b/v2rayN/v2rayUpgrade/app.manifest @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/v2rayN/v2rayUpgrade/v2rayUpgrade.csproj b/v2rayN/v2rayUpgrade/v2rayUpgrade.csproj new file mode 100755 index 0000000..73349b2 --- /dev/null +++ b/v2rayN/v2rayUpgrade/v2rayUpgrade.csproj @@ -0,0 +1,11 @@ + + + net8.0-windows + WinExe + true + Copyright © 2019-2024 (GPLv3) + 1.1.0.0 + app.manifest + enable + + \ No newline at end of file diff --git a/v2rayN/zh-Hans/v2rayN.resources.dll b/v2rayN/zh-Hans/v2rayN.resources.dll deleted file mode 100644 index 9232cc5..0000000 Binary files a/v2rayN/zh-Hans/v2rayN.resources.dll and /dev/null differ